ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdlb2wgYi8uaGdlb2wKaW5kZXggNGUwMzY5MC4uYWFkNzljMiAxMDA2NDQKLS0tIGEvLmhnZW9sCisrKyBiLy5oZ2VvbApAQCAtMjYsNiArMjYsNyBAQAogKioucHNkICA9IEJJTgogKioudGFyICA9IEJJTgogKioud2F2ICA9IEJJTgorKioud2hsICA9IEJJTgogKioueGFyICA9IEJJTgogKiouemlwICA9IEJJTgogCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uNjEyOGMyYiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksNiArMTksOCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKQEAgLTI4LDEyICszMCwxNCBAQAogRG9jL3Rvb2xzL2ppbmphMi8KIERvYy90b29scy9weWdtZW50cy8KIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gkCiBNb2R1bGVzL1NldHVwJAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKIE1vZHVsZXMvY29uZmlnLmMKIE1vZHVsZXMvbGRfc29fYWl4JAogUGFyc2VyL3BnZW4kCitebGNvdi1yZXBvcnQvCiBeY29yZQogXnB5dGhvbi1nZGIucHkKIF5weXRob24uZXhlLWdkYi5weQpAQCAtODIsNiArODYsOSBAQAogUENidWlsZC9XaW4zMi10ZW1wLSoKIFBDYnVpbGQveDY0LXRlbXAtKgogUENidWlsZC9hbWQ2NAorUENidWlsZC9pcGNoCitUb29scy91bmljb2RlL2J1aWxkLworVG9vbHMvdW5pY29kZS9NQVBQSU5HUy8KIEJ1aWxkTG9nLmh0bQogX19weWNhY2hlX18KIE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIKQEAgLTg5LDMgKzk2LDcgQEAKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCiBodG1sY292LworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorY292ZXJhZ2UuaW5mbwpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggNzgwMWFjZi4uMmJmZWU0OSAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC0xMTgsMyArMTE4LDggQEAKIGZkNTNjNTAwZjhiODBmNTRmM2VjZWRlYzlkYTJlOGM3ZTUyYTY4ODggdjMuMy4zcmMxCiBkMzI0NDJjMGU2MGRmYmQ3MTIzNGU4MDdkM2QxZGVkZDIyNzQ5NWE5IHYzLjMuM3JjMgogYzM4OTYyNzVjMGY2MWIyNTEwYTZjN2U2YzQ1OGE3NTAzNTlhOTFiOCB2My4zLjMKKzQ2NTM1ZjY1ZTdmM2JjZGNmMTc2ZjM2ZDM0YmMxZmVkNzE5ZmZkMmIgdjMuNC4wYTEKKzkyNjVhMjE2OGUyY2IyYTg0Nzg1ZDg3MTc3OTJhY2M2NjFlNmI2OTIgdjMuNC4wYTIKK2RkOWNkZjkwYTUwNzM1MTA4NzdlOWRkNTExMmY4ZTZjZjIwZDVlODkgdjMuNC4wYTMKK2UyNDViMGQ3MjA5YmI2ZDBlMTkzMTZlMWUyYWYxYWE5YzIxMzkxMDQgdjMuNC4wYTQKKzM0MDVkYzlhNmFmYWEwYTA2ZGQxZjZmMTgyZWM1Yzk5OGRjZTZmNWYgdjMuNC4wYjEKZGlmZiAtLWdpdCBhLy5oZ3RvdWNoIGIvLmhndG91Y2gKaW5kZXggMGFmOGMxOS4uN2UzYTVlNyAxMDA2NDQKLS0tIGEvLmhndG91Y2gKKysrIGIvLmhndG91Y2gKQEAgLTQsOCArNCw4IEBACiAKIFB5dGhvbi9pbXBvcnRsaWIuaDogTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwogCi1JbmNsdWRlL2FzdC5oOiBQYXJzZXIvUHl0aG9uLmFzZGwgUGFyc2VyL2FzZGwucHkgUGFyc2VyL2FzZGxfYy5weQotUHl0aG9uL1B5dGhvbi1hc3QuYzogSW5jbHVkZS9hc3QuaAorSW5jbHVkZS9QeXRob24tYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5CitQeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL1B5dGhvbi1hc3QuaAogCiBQeXRob24vb3Bjb2RlX3RhcmdldHMuaDogUHl0aG9uL21ha2VvcGNvZGV0YXJnZXRzLnB5IExpYi9vcGNvZGUucHkKIApkaWZmIC0tZ2l0IGEvRG9jL1JFQURNRS50eHQgYi9Eb2MvUkVBRE1FLnR4dAppbmRleCBjNjNmYzYwLi42NGUzMDdlIDEwMDY0NAotLS0gYS9Eb2MvUkVBRE1FLnR4dAorKysgYi9Eb2MvUkVBRE1FLnR4dApAQCAtNyw3ICs3LDggQEAKIAogRG9jdW1lbnRhdGlvbiBvbiB0aGUgYXV0aG9yaW5nIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQKIGJvdGggc3R5bGUgYW5kIG1hcmt1cCwgaXMgYXZhaWxhYmxlIGluIHRoZSAiRG9jdW1lbnRpbmcgUHl0aG9uIiBjaGFwdGVyIG9mIHRoZQotZG9jdW1lbnRhdGlvbi4gIFRoZXJlJ3MgYWxzbyBhIGNoYXB0ZXIgaW50ZW5kZWQgdG8gcG9pbnQgb3V0IGRpZmZlcmVuY2VzIHRvCitkZXZlbG9wZXJzIGd1aWRlIChodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2RvY3VtZW50aW5nLmh0bWwpLgorVGhlcmUncyBhbHNvIGEgY2hhcHRlciBpbnRlbmRlZCB0byBwb2ludCBvdXQgZGlmZmVyZW5jZXMgdG8KIHRob3NlIGZhbWlsaWFyIHdpdGggdGhlIHByZXZpb3VzIGRvY3Mgd3JpdHRlbiBpbiBMYVRlWC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCA2NTkwNGVlLi4yZDU2Mzg2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTc0LDI2ICs3NCwzNSBAQAogCiAuLiBfbWFwb2JqZWN0czoKIAotTWFwcGluZyBPYmplY3RzCi09PT09PT09PT09PT09PT0KK0NvbnRhaW5lciBPYmplY3RzCis9PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IG9iamVjdDogbWFwcGluZwogCiAuLiB0b2N0cmVlOjoKIAogICAgZGljdC5yc3QKKyAgIHNldC5yc3QKIAogCiAuLiBfb3RoZXJvYmplY3RzOgogCitGdW5jdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCisgICBmdW5jdGlvbi5yc3QKKyAgIG1ldGhvZC5yc3QKKyAgIGNlbGwucnN0CisgICBjb2RlLnJzdAorCisKIE90aGVyIE9iamVjdHMKID09PT09PT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAKLSAgIHNldC5yc3QKLSAgIGZ1bmN0aW9uLnJzdAotICAgbWV0aG9kLnJzdAogICAgZmlsZS5yc3QKICAgIG1vZHVsZS5yc3QKICAgIGl0ZXJhdG9yLnJzdApAQCAtMTAyLDcgKzExMSw2IEBACiAgICBtZW1vcnl2aWV3LnJzdAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0Ci0gICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0Ci0gICBjb2RlLnJzdAorCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uNWE5ZGNhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzNkOTc4Zi4uODY1OGE1OCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtMjM1LDcgKzIzNSw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlCiAgICBmaWxlbmFtZSBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorICAgZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUpCkBAIC0yOTMsMjAgKzI5MywyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCi0gICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhjYCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KIAogCkBAIC0zNTUsMTUgKzM2MiwyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjZjZDJiOGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA3MDU1MDlmLi42NDM5ZDdmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU3LDYgKzY5MSwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBlODBlMGVhLi4yNmM0Mzg0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLmJlNmQ3OTggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgIG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGNhbGxhYmxlX29iamVjdCgqYXJncylgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlKiwgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDIGFyZ3VtZW50cy4KICAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgc3R5bGUgZm9ybWF0CkBAIC0yNTAsOCArMjUwLDExIEBACiAgICBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzYCBpcyBhCiAgICBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZSBvZiAqZm9ybWF0KiB3YXMgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgKm1ldGhvZCogb2Ygb2JqZWN0ICpvKiB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMKICAgIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIGJ5IGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZm9ybWF0CkBAIC0yNjEsNiArMjY0LDkgQEAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLAogICAgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHR5cGVzIG9mICptZXRob2QqIGFuZCAqZm9ybWF0KiB3ZXJlIGNoYW5nZWQgZnJvbSBgYGNoYXIgKmBgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsIC4uLiwgTlVMTCkKIApAQCAtMzQyLDYgKzM0OCwxNSBAQAogICAgcmV0dXJuZWQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyBgYF9fbGVuZ3RoX2hpbnRfX2BgLCBhbmQgZmluYWxseQorICAgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiBPbiBlcnJvciBgYC0xYGAgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggYjJiODAzOC4uNDhiMTNlNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtNDY1LDYgKzQ2NSwxNCBAQAogICAgICAgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUdgLgogCiAKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUKKworICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2xvdCBpcyBwcmVzZW50IGluIHRoZQorICAgICAgdHlwZSBzdHJ1Y3R1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX2RvYwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcgZ2l2aW5nIHRoZSBkb2NzdHJpbmcgZm9yIHRoaXMKQEAgLTk2OCw2ICs5NzYsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKKy4uIGM6bWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZmluYWxpemUKKworICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCisgICA6Yzp0eXBlOmBkZXN0cnVjdG9yYDo6CisKKyAgICAgIHZvaWQgdHBfZmluYWxpemUoUHlPYmplY3QgKikKKworICAgSWYgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBjYWxscyBpdCBvbmNlIHdoZW4KKyAgIGZpbmFsaXppbmcgYW4gaW5zdGFuY2UuICBJdCBpcyBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIGdhcmJhZ2UKKyAgIGNvbGxlY3RvciAoaWYgdGhlIGluc3RhbmNlIGlzIHBhcnQgb2YgYW4gaXNvbGF0ZWQgcmVmZXJlbmNlIGN5Y2xlKSBvcgorICAganVzdCBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIGl0IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIGNhbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLCBlbnN1cmluZworICAgdGhhdCBpdCBmaW5kcyB0aGUgb2JqZWN0IGluIGEgc2FuZSBzdGF0ZS4KKworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzaG91bGQgbm90IG11dGF0ZSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhdHVzOworICAgdGhlcmVmb3JlLCBhIHJlY29tbWVuZGVkIHdheSB0byB3cml0ZSBhIG5vbi10cml2aWFsIGZpbmFsaXplciBpczo6CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBsb2NhbF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKKyAgICAgIHsKKyAgICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgICAgICAgIC8qIC4uLiAqLworCisgICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgICB9CisKKyAgIEZvciB0aGlzIGZpZWxkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCAoZXZlbiB0aHJvdWdoIGluaGVyaXRhbmNlKSwKKyAgIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRWAgZmxhZ3MgYml0LgorCisgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIHNlZWFsc286OiAiU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIiAoOnBlcDpgNDQyYCkKKworCiAuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDM2NDljZmIuLmM3ZWQ1ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTUyNiwxMiArNTI2LDIzIEBACiAgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQogICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSB3aWR0aCBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KKyAgICAgIFRoZSBwcmVjaXNpb24gZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGJ5dGVzIGZvciBgYCIlcyJgYCBhbmQKKyAgICAgIGBgIiVWImBgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBOVUxMKSwgYW5kIGEgbnVtYmVyIG9mCisgICAgICBjaGFyYWN0ZXJzIGZvciBgYCIlQSJgYCwgYGAiJVUiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhbmQgYGAiJVYiYGAKKyAgICAgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBub3QgTlVMTCkuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGxkImBgIGFuZCBgYCIlbGx1ImBgIGFkZGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxpImBgLCBgYCIlbGxpImBgIGFuZCBgYCIlemkiYGAgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IHdpZHRoIGFuZCBwcmVjaXNpb24gZm9ybWF0dGVyIGZvciBgYCIlcyJgYCwgYGAiJUEiYGAsIGBgIiVVImBgLAorICAgICAgYGAiJVYiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhZGRlZC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDE0ZWY4ZGYuLjlmMjFiODkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTQ0LDYgKzE0NCwzNyBAQAogICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBSZXR1cm5zIGBgMGBgIGF0IEVPRi4KIAogCisuLiBjOnZhcjo6IGludCAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGludCBmdW5jKHZvaWQpYGAuICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBQeXRob24ncworICAgaW50ZXJwcmV0ZXIgcHJvbXB0IGlzIGFib3V0IHRvIGJlY29tZSBpZGxlIGFuZCB3YWl0IGZvciB1c2VyIGlucHV0CisgICBmcm9tIHRoZSB0ZXJtaW5hbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4gIE92ZXJyaWRpbmcgdGhpcworICAgaG9vayBjYW4gYmUgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0IHdpdGggb3RoZXIKKyAgIGV2ZW50IGxvb3BzLCBhcyBkb25lIGluIHRoZSA6ZmlsZTpgTW9kdWxlcy9fdGtpbnRlci5jYCBpbiB0aGUKKyAgIFB5dGhvbiBzb3VyY2UgY29kZS4KKworCisuLiBjOnZhcjo6IGNoYXIqICgqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKikKKworICAgQ2FuIGJlIHNldCB0byBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3RvdHlwZQorICAgYGBjaGFyICpmdW5jKEZJTEUgKnN0ZGluLCBGSUxFICpzdGRvdXQsIGNoYXIgKnByb21wdClgYCwKKyAgIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQKKyAgIGF0IHRoZSBpbnRlcnByZXRlcidzIHByb21wdC4gIFRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBvdXRwdXQKKyAgIHRoZSBzdHJpbmcgKnByb21wdCogaWYgaXQncyBub3QgKk5VTEwqLCBhbmQgdGhlbiByZWFkIGEgbGluZSBvZgorICAgaW5wdXQgZnJvbSB0aGUgcHJvdmlkZWQgc3RhbmRhcmQgaW5wdXQgZmlsZSwgcmV0dXJuaW5nIHRoZQorICAgcmVzdWx0aW5nIHN0cmluZy4gIEZvciBleGFtcGxlLCBUaGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBzZXRzCisgICB0aGlzIGhvb2sgdG8gcHJvdmlkZSBsaW5lLWVkaXRpbmcgYW5kIHRhYi1jb21wbGV0aW9uIGZlYXR1cmVzLgorCisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmVzdWx0IG11c3QgYmUgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBieQorICAgICAgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworCiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCkKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCkBAIC0yMzUsMTYgKzI2NiwxNSBAQAogICAgKm9wdGltaXplKiBzZXQgdG8gYGAtMWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogCiAgICBQYXJzZSBhbmQgY29tcGlsZSB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGluICpzdHIqLCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBjb2RlCiAgICBvYmplY3QuICBUaGUgc3RhcnQgdG9rZW4gaXMgZ2l2ZW4gYnkgKnN0YXJ0KjsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gdGhlCiAgICBjb2RlIHdoaWNoIGNhbiBiZSBjb21waWxlZCBhbmQgc2hvdWxkIGJlIDpjb25zdDpgUHlfZXZhbF9pbnB1dGAsCiAgICA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBvciA6Y29uc3Q6YFB5X3NpbmdsZV9pbnB1dGAuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5CiAgICAqZmlsZW5hbWUqIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjb2RlIG9iamVjdCBhbmQgbWF5IGFwcGVhciBpbiB0cmFjZWJhY2tzIG9yCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKLSAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKyAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZSBjb2RlCisgICBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgogCiAgICBUaGUgaW50ZWdlciAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBjb21waWxlcjsgYQogICAgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMgZ2l2ZW4gYnkKQEAgLTI1Miw5ICsyODIsMTYgQEAKICAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQogICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzYCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUV2YWxfRXZhbENvZGVFeGAsIHdpdGgganVzdApAQCAtMzM4LDQgKzM3NSwzIEBACiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgotCmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCBhNDI1ODRjLi44MTRjM2IwIDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIFB5RGljdF9HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpwOjA6CiBQeURpY3RfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6OjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6cDowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmtleTowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmRlZmF1bHQ6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKKwogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOnA6MDoKIApAQCAtNTAzLDEzICs1MDgsMTMgQEAKIFB5SW1wb3J0X0NsZWFudXA6dm9pZDo6OgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOmNvOjA6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOnBhdGhuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6cGF0aG5hbWU6OgogCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKQEAgLTUxOSw3ICs1MjQsNyBAQAogUHlJbXBvcnRfSW1wb3J0OlB5T2JqZWN0KjpuYW1lOjA6CiAKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTppbnQ6OjoKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjaGFyKjo6OgorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNvbnN0IGNoYXIqOjo6CiAKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgpAQCAtNjY4LDcgKzY3Myw3IEBACiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKK1B5TG9uZ19Gcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CiBQeUxvbmdfRnJvbVN0cmluZzppbnQ6YmFzZTo6CiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSGFzS2V5OmludDo6OgogUHlNYXBwaW5nX0hhc0tleTpQeU9iamVjdCo6bzowOgpAQCAtNzA0LDcgKzcwOSw3IEBACiAKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0KjpvOjA6CkBAIC03MTcsNyArNzIyLDcgQEAKIAogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6djorMToKIAogUHlNYXBwaW5nX1ZhbHVlczpQeU9iamVjdCo6OisxOgpAQCAtNzMwLDcgKzczNSw3IEBACiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlOkZJTEUqOmZpbGU6OgogCiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjaGFyKjpzdHJpbmc6OgorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cmluZzo6CiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6aW50Omxlbjo6CiAKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CkBAIC05MTIsNyArOTE3LDcgQEAKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOmNhbGxhYmxlX29iamVjdDowOgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsRnVuY3Rpb246Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnczpQeU9iamVjdCo6OisxOgpAQCAtOTIxLDggKzkyNiw4IEBACiAKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOm86MDoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6bTo6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOm06OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbE1ldGhvZDo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M6UHlPYmplY3QqOjorMToKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBkMWFiN2RiLi44M2M2OGFlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0yMzksNyArMjM5LDggQEAKIGNvbmZpZ3VyYXRpb24gZmlsZSwgOmZpbGU6YHNldHVwLmNmZ2BcIC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLWNvbmZpZ2AuICBJZgogeW91IGRpc3RyaWJ1dGUgb3IgcGFja2FnZSBtYW55IFB5dGhvbiBtb2R1bGUgZGlzdHJpYnV0aW9ucywgeW91IG1pZ2h0IHdhbnQgdG8KIHB1dCBvcHRpb25zIHRoYXQgYXBwbHkgdG8gYWxsIG9mIHRoZW0gaW4geW91ciBwZXJzb25hbCBEaXN0dXRpbHMgY29uZmlndXJhdGlvbgotZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLgorZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLiAgSWYgeW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQordGhpcyBmaWxlLCB5b3UgY2FuIHBhc3MgdGhlIDpvcHRpb246YC0tbm8tdXNlci1jZmdgIG9wdGlvbiB0byA6ZmlsZTpgc2V0dXAucHlgLgogCiBUaGVyZSBhcmUgdGhyZWUgc3RlcHMgdG8gYnVpbGRpbmcgYSBiaW5hcnkgUlBNIHBhY2thZ2UsIGFsbCBvZiB3aGljaCBhcmUKIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRGlzdHV0aWxzOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKaW5kZXggMTY2NjQzNi4uOWY3YTM4ZSAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CkBAIC0yNiwxNiArMjYsMTYgQEAKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSsKIHwgYGB6aXBgYCAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgfCAoMSksKDMpIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCAoMiksKDQpIHwKK3wgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCBcKDIpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmd6YCkgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCBcKDQpICAgIHwKK3wgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCAgICAgICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmJ6MmApICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGB6dGFyYGAgIHwgY29tcHJlc3NlZCB0YXIgZmlsZSAgICAgfCBcKDQpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLlpgKSAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCBcKDQpICAgIHwKK3wgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC01MSw4ICs1MSwxNiBAQAogICAgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAxLjYpCiAKICg0KQotICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKLSAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKKyAgIHJlcXVpcmVzIHRoZSA6cHJvZ3JhbTpgY29tcHJlc3NgIHByb2dyYW0uIE5vdGljZSB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdworICAgcGVuZGluZyBmb3IgZGVwcmVjYXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbi4KKworV2hlbiB1c2luZyBhbnkgYGB0YXJgYCBmb3JtYXQgKGBgZ3p0YXJgYCwgYGBienRhcmBgLCBgYHp0YXJgYCBvcgorYGB0YXJgYCksIHVuZGVyIFVuaXggeW91IGNhbiBzcGVjaWZ5IHRoZSBgYG93bmVyYGAgYW5kIGBgZ3JvdXBgYCBuYW1lcwordGhhdCB3aWxsIGJlIHNldCBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGFyY2hpdmUuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBhbGwgZmlsZXMgb2YgdGhlIGFyY2hpdmUgdG8gYmUgb3duZWQgYnkgcm9vdDo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdAogCiAKIC4uIF9tYW5pZmVzdDoKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBmNDg0YmE0Li40NWI1NzIxIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAvKiB0cF9mbGFncyAqLwogCiBBbGwgdHlwZXMgc2hvdWxkIGluY2x1ZGUgdGhpcyBjb25zdGFudCBpbiB0aGVpciBmbGFncy4gIEl0IGVuYWJsZXMgYWxsIG9mIHRoZQotbWVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uLgorbWVtYmVycyBkZWZpbmVkIHVudGlsIGF0IGxlYXN0IFB5dGhvbiAzLjMuICBJZiB5b3UgbmVlZCBmdXJ0aGVyIG1lbWJlcnMsCit5b3Ugd2lsbCBuZWVkIHRvIE9SIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLgogCiBXZSBwcm92aWRlIGEgZG9jIHN0cmluZyBmb3IgdGhlIHR5cGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RvY2AuIDo6CiAKQEAgLTkyOCw4ICs5MjksOSBAQAogCiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGluc3RhbmNlIG9mIHlvdXIgdHlwZSBpcwogcmVkdWNlZCB0byB6ZXJvIGFuZCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhbnRzIHRvIHJlY2xhaW0gaXQuICBJZiB5b3VyIHR5cGUKLWhhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCBwdXQgaXQgaGVyZS4gIFRoZSBvYmplY3QgaXRzZWxmCi1uZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBmdW5jdGlvbjo6CitoYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgeW91IGNhbiBwdXQgaXQgaGVyZS4gIFRoZQorb2JqZWN0IGl0c2VsZiBuZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcworZnVuY3Rpb246OgogCiAgICBzdGF0aWMgdm9pZAogICAgbmV3ZGF0YXR5cGVfZGVhbGxvYyhuZXdkYXRhdHlwZW9iamVjdCAqIG9iaikKQEAgLTk4MCw2ICs5ODIsMjIgQEAKICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKICAgIH0KIAorLi4gbm90ZTo6CisgICBUaGVyZSBhcmUgbGltaXRhdGlvbnMgdG8gd2hhdCB5b3UgY2FuIHNhZmVseSBkbyBpbiBhIGRlYWxsb2NhdG9yIGZ1bmN0aW9uLgorICAgRmlyc3QsIGlmIHlvdXIgdHlwZSBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gKHVzaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAKKyAgIGFuZC9vciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfY2xlYXJgKSwgc29tZSBvZiB0aGUgb2JqZWN0J3MgbWVtYmVycyBjYW4gaGF2ZSBiZWVuCisgICBjbGVhcmVkIG9yIGZpbmFsaXplZCBieSB0aGUgdGltZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgaXMgY2FsbGVkLiAgU2Vjb25kLCBpbgorICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCB5b3VyIG9iamVjdCBpcyBpbiBhbiB1bnN0YWJsZSBzdGF0ZTogaXRzIHJlZmVyZW5jZQorICAgY291bnQgaXMgZXF1YWwgdG8gemVyby4gIEFueSBjYWxsIHRvIGEgbm9uLXRyaXZpYWwgb2JqZWN0IG9yIEFQSSAoYXMgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlKSBtaWdodCBlbmQgdXAgY2FsbGluZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgYWdhaW4sIGNhdXNpbmcgYQorICAgZG91YmxlIGZyZWUgYW5kIGEgY3Jhc2guCisKKyAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHB1dCBhbnkgY29tcGxleAorICAgZmluYWxpemF0aW9uIGNvZGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCBhbmQgaW5zdGVhZCB1c2UgdGhlIG5ldworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCB0eXBlIG1ldGhvZC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6cGVwOmA0NDJgIGV4cGxhaW5zIHRoZSBuZXcgZmluYWxpemF0aW9uIHNjaGVtZS4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdHJpbmc7IG9iamVjdCByZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggYzhlZjllNy4uOGJkNzc0YiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDg4N2YwYjQuLmFjMTJkYTMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0xNzQxLDEyICsxNzQxLDEyIEBACiBGb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5IGFzIHdlbGwgYXMgY29uc2lzdGVuY3ksIFB5dGhvbiBvbmx5IHJlYWRzIHRoZSBtb2R1bGUKIGZpbGUgb24gdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuICBJZiBpdCBkaWRuJ3QsIGluIGEgcHJvZ3JhbQogY29uc2lzdGluZyBvZiBtYW55IG1vZHVsZXMgd2hlcmUgZWFjaCBvbmUgaW1wb3J0cyB0aGUgc2FtZSBiYXNpYyBtb2R1bGUsIHRoZQotYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZXJlYWRpbmcgb2YgYQorYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZS1yZWFkaW5nIG9mIGEKIGNoYW5nZWQgbW9kdWxlLCBkbyB0aGlzOjoKIAotICAgaW1wb3J0IGltcAorICAgaW1wb3J0IGltcG9ydGxpYgogICAgaW1wb3J0IG1vZG5hbWUKLSAgIGltcC5yZWxvYWQobW9kbmFtZSkKKyAgIGltcG9ydGxpYi5yZWxvYWQobW9kbmFtZSkKIAogV2FybmluZzogdGhpcyB0ZWNobmlxdWUgaXMgbm90IDEwMCUgZm9vbC1wcm9vZi4gIEluIHBhcnRpY3VsYXIsIG1vZHVsZXMKIGNvbnRhaW5pbmcgc3RhdGVtZW50cyBsaWtlIDo6CkBAIC0xNzU4LDEwICsxNzU4LDEwIEBACiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24uICBUaGlzIGNhbiByZXN1bHQgaW4gdGhlIGZvbGxvd2luZwogcGFyYWRveGljYWwgYmVoYXZpb3VyOgogCi0gICA+Pj4gaW1wb3J0IGltcAorICAgPj4+IGltcG9ydCBpbXBvcnRsaWIKICAgID4+PiBpbXBvcnQgY2xzCiAgICA+Pj4gYyA9IGNscy5DKCkgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQwotICAgPj4+IGltcC5yZWxvYWQoY2xzKQorICAgPj4+IGltcG9ydGxpYi5yZWxvYWQoY2xzKQogICAgPG1vZHVsZSAnY2xzJyBmcm9tICdjbHMucHknPgogICAgPj4+IGlzaW5zdGFuY2UoYywgY2xzLkMpICAgICAgICMgaXNpbnN0YW5jZSBpcyBmYWxzZT8hPwogICAgRmFsc2UKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IDcxZTQ2ODYuLmRmNDcwNTEgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtMzAyLDYgKzMwMiwxNSBAQAogICAgICAgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTApKSAgICAgICAgICMgc3VtIG9mIHNxdWFyZXMgMCwgMSwgNCwgLi4uIDgxCiAgICAgICAgICAyODUKIAorICAgZ2VuZXJpYyBmdW5jdGlvbgorICAgICAgQSBmdW5jdGlvbiBjb21wb3NlZCBvZiBtdWx0aXBsZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBzYW1lIG9wZXJhdGlvbgorICAgICAgZm9yIGRpZmZlcmVudCB0eXBlcy4gV2hpY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGEgY2FsbCBpcworICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtLgorCisgICAgICBTZWUgYWxzbyB0aGUgOnRlcm06YHNpbmdsZSBkaXNwYXRjaGAgZ2xvc3NhcnkgZW50cnksIHRoZQorICAgICAgOmZ1bmM6YGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yLCBhbmQgOnBlcDpgNDQzYC4KKworCiAgICBHSUwKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCkBAIC02NjMsMjAgKzY3MiwyNyBAQAogICAgcG9zaXRpb25hbCBhcmd1bWVudAogICAgICAgU2VlIDp0ZXJtOmBhcmd1bWVudGAuCiAKLSAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKLSAgICAgIEEgcHJvdmlzaW9uYWwgcGFja2FnZSBpcyBvbmUgd2hpY2ggaGFzIGJlZW4gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkIGZyb20KKyAgIHByb3Zpc2lvbmFsIEFQSQorICAgICAgQSBwcm92aXNpb25hbCBBUEkgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCiAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBXaGlsZSBtYWpvcgotICAgICAgY2hhbmdlcyB0byBzdWNoIHBhY2thZ2VzIGFyZSBub3QgZXhwZWN0ZWQsIGFzIGxvbmcgYXMgdGhleSBhcmUgbWFya2VkCisgICAgICBjaGFuZ2VzIHRvIHN1Y2ggaW50ZXJmYWNlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAogICAgICAgcHJvdmlzaW9uYWwsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsCi0gICAgICBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAorICAgICAgb2YgdGhlIGludGVyZmFjZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAogICAgICAgY2hhbmdlcyB3aWxsIG5vdCBiZSBtYWRlIGdyYXR1aXRvdXNseSAtLSB0aGV5IHdpbGwgb2NjdXIgb25seSBpZiBzZXJpb3VzCi0gICAgICBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGUKLSAgICAgIHBhY2thZ2UuCisgICAgICBmdW5kYW1lbnRhbCBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbgorICAgICAgb2YgdGhlIEFQSS4KKworICAgICAgRXZlbiBmb3IgcHJvdmlzaW9uYWwgQVBJcywgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBzZWVuIGFzCisgICAgICBhICJzb2x1dGlvbiBvZiBsYXN0IHJlc29ydCIgLSBldmVyeSBhdHRlbXB0IHdpbGwgc3RpbGwgYmUgbWFkZSB0byBmaW5kCisgICAgICBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHJlc29sdXRpb24gdG8gYW55IGlkZW50aWZpZWQgcHJvYmxlbXMuCiAKICAgICAgIFRoaXMgcHJvY2VzcyBhbGxvd3MgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdG8gY29udGludWUgdG8gZXZvbHZlIG92ZXIKICAgICAgIHRpbWUsIHdpdGhvdXQgbG9ja2luZyBpbiBwcm9ibGVtYXRpYyBkZXNpZ24gZXJyb3JzIGZvciBleHRlbmRlZCBwZXJpb2RzCiAgICAgICBvZiB0aW1lLiAgU2VlIDpwZXA6YDQxMWAgZm9yIG1vcmUgZGV0YWlscy4KIAorICAgcHJvdmlzaW9uYWwgcGFja2FnZQorICAgICAgU2VlIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCiAgICBQeXRob24gMzAwMAogICAgICAgTmlja25hbWUgZm9yIHRoZSBQeXRob24gMy54IHJlbGVhc2UgbGluZSAoY29pbmVkIGxvbmcgYWdvIHdoZW4gdGhlCiAgICAgICByZWxlYXNlIG9mIHZlcnNpb24gMyB3YXMgc29tZXRoaW5nIGluIHRoZSBkaXN0YW50IGZ1dHVyZS4pICBUaGlzIGlzIGFsc28KQEAgLTc1NSw2ICs3NzEsMTAgQEAKICAgICAgIG1hcHBpbmcgcmF0aGVyIHRoYW4gYSBzZXF1ZW5jZSBiZWNhdXNlIHRoZSBsb29rdXBzIHVzZSBhcmJpdHJhcnkKICAgICAgIDp0ZXJtOmBpbW11dGFibGVgIGtleXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCiAKKyAgIHNpbmdsZSBkaXNwYXRjaAorICAgICAgQSBmb3JtIG9mIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYCBkaXNwYXRjaCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgIGNob3NlbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhIHNpbmdsZSBhcmd1bWVudC4KKwogICAgc2xpY2UKICAgICAgIEFuIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5pbmcgYSBwb3J0aW9uIG9mIGEgOnRlcm06YHNlcXVlbmNlYC4gIEEgc2xpY2UgaXMKICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhlIHN1YnNjcmlwdCBub3RhdGlvbiwgYGBbXWBgIHdpdGggY29sb25zIGJldHdlZW4gbnVtYmVycwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0IGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CmluZGV4IDcxODljNjUuLjk3YzkwYzcgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAorKysgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLiBNLiBLdWNobGluZwotOlJlbGVhc2U6IDAuMzEKKzpSZWxlYXNlOiAwLjMyCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKQEAgLTE1LDkgKzE1LDkgQEAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKLVRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgYmFzaWMgY29uY2VwdCBvZiBmdW5jdGlvbmFsIHByb2dyYW1taW5nOyBpZiB5b3UncmUKLWp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZXMsIHNraXAgdG8gdGhlIG5leHQKLXNlY3Rpb24uCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uIG9uIDpyZWY6YGZ1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzYC4KIAogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQgZGVjb21wb3NpbmcgcHJvYmxlbXMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKIApAQCAtMTczLDYgKzE3Myw4IEBACiBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCiAKIAorLi4gX2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzOgorCiBJdGVyYXRvcnMKID09PT09PT09PQogCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggM2YyNTZlMS4uZmViOWI2YyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNzA0LDkgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdHJhY2ViYWNrCiAgICAgICAgICAgICAgICAgcHJpbnQoJ1dob29wcyEgUHJvYmxlbTonLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKaW5kZXggMTY1NDg2YS4uYzdhODAyYSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtOTAwLDEwICs5MDAsMTAgQEAKICAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCi0gICBzb2NrZXRzLgorICAgc29ja2V0cy4gU2luY2UgMy40LCBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5TTVRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBkZXNpZ25hdGVkCiAgICBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggNTIwM2U1My4uZmJlNzYzYiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC0yNzEsOCArMjcxLDggQEAKIAogICAgPj4+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+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA3KSwgbWF0Y2g9J1x4MDhjbGFzc1x4MDgnPgogCiAgICBTZWNvbmQsIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgd2hlcmUgdGhlcmUncyBubyB1c2UgZm9yIHRoaXMgYXNzZXJ0aW9uLAogICAgYGBcYmBgIHJlcHJlc2VudHMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uJ3MKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAppbmRleCA3NGVlZWUwLi43YjIxN2VhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAtLSBgYFByb3h5SGFuZGxlcmBgIChpZiBhIHByb3h5IHNldHRpbmcgc3VjaCBhcyBhbiA6ZW52dmFyOmBodHRwX3Byb3h5YAogICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIGBgVW5rbm93bkhhbmRsZXJgYCwgYGBIVFRQSGFuZGxlcmBgLAogICAgIGBgSFRUUERlZmF1bHRFcnJvckhhbmRsZXJgYCwgYGBIVFRQUmVkaXJlY3RIYW5kbGVyYGAsIGBgRlRQSGFuZGxlcmBgLAotICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KKyAgICBgYEZpbGVIYW5kbGVyYGAsIGBgRGF0YUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KIAogYGB0b3BfbGV2ZWxfdXJsYGAgaXMgaW4gZmFjdCAqZWl0aGVyKiBhIGZ1bGwgVVJMIChpbmNsdWRpbmcgdGhlICdodHRwOicgc2NoZW1lCiBjb21wb25lbnQgYW5kIHRoZSBob3N0bmFtZSBhbmQgb3B0aW9uYWxseSB0aGUgcG9ydCBudW1iZXIpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQppbmRleCBjYzU1MjllLi4zYzdjNzcwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKQEAgLTgsNyArOCw3IEBACiAjIEZvciBndWVzc2luZyBNSU1FIHR5cGUgYmFzZWQgb24gZmlsZSBuYW1lIGV4dGVuc2lvbgogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIGZyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIyLDQ0ICsyMiwzNiBAQAogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBTZW5kIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhcyBhIE1JTUUgbWVzc2FnZS4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXQotCiBVbmxlc3MgdGhlIC1vIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGVtYWlsIGlzIHNlbnQgYnkgZm9yd2FyZGluZyB0byB5b3VyIGxvY2FsCiBTTVRQIHNlcnZlciwgd2hpY2ggdGhlbiBkb2VzIHRoZSBub3JtYWwgZGVsaXZlcnkgcHJvY2Vzcy4gIFlvdXIgbG9jYWwgbWFjaGluZQogbXVzdCBiZSBydW5uaW5nIGFuIFNNVFAgc2VydmVyLgogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bwotICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZW5kZXInLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdTRU5ERVInLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY2lwaWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5zZW5kZXIgb3Igbm90IG9wdHMucmVjaXBpZW50czoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZW5kZXInLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGllbnQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGlyZWN0b3J5ID0gYXJncy5kaXJlY3RvcnkKICAgICBpZiBub3QgZGlyZWN0b3J5OgogICAgICAgICBkaXJlY3RvcnkgPSAnLicKICAgICAjIENyZWF0ZSB0aGUgZW5jbG9zaW5nIChvdXRlcikgbWVzc2FnZQogICAgIG91dGVyID0gTUlNRU11bHRpcGFydCgpCiAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdDb250ZW50cyBvZiBkaXJlY3RvcnkgJXMnICUgb3MucGF0aC5hYnNwYXRoKGRpcmVjdG9yeSkKLSAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihvcHRzLnJlY2lwaWVudHMpCi0gICAgb3V0ZXJbJ0Zyb20nXSA9IG9wdHMuc2VuZGVyCisgICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4oYXJncy5yZWNpcGllbnRzKQorICAgIG91dGVyWydGcm9tJ10gPSBhcmdzLnNlbmRlcgogICAgIG91dGVyLnByZWFtYmxlID0gJ1lvdSB3aWxsIG5vdCBzZWUgdGhpcyBpbiBhIE1JTUUtYXdhcmUgbWFpbCByZWFkZXIuXG4nCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgpAQCAtNzYsMjMgKzY4LDE5IEBACiAgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCiAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQogICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKLSAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAotICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnaW1hZ2UnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2F1ZGlvJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKLSAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKICAgICAgICAgICAgICMgRW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIEJhc2U2NAogICAgICAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgICMgU2V0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIKQEAgLTEwMCwxNCArODgsMTIgQEAKICAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKICAgICAjIE5vdyBzZW5kIG9yIHN0b3JlIHRoZSBtZXNzYWdlCiAgICAgY29tcG9zZWQgPSBvdXRlci5hc19zdHJpbmcoKQotICAgIGlmIG9wdHMub3V0cHV0OgotICAgICAgICBmcCA9IG9wZW4ob3B0cy5vdXRwdXQsICd3JykKLSAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCiAgICAgZWxzZToKLSAgICAgICAgcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLSAgICAgICAgcy5zZW5kbWFpbChvcHRzLnNlbmRlciwgb3B0cy5yZWNpcGllbnRzLCBjb21wb3NlZCkKLSAgICAgICAgcy5xdWl0KCkKKyAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgICAgICAgICBzLnNlbmRtYWlsKGFyZ3Muc2VuZGVyLCBhcmdzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQppbmRleCAzNjUzNTQzLi41NzRhMGI2IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKQEAgLTgsNDEgKzgsMjcgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiIiXAorICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKIFVucGFjayBhIE1JTUUgbWVzc2FnZSBpbnRvIGEgZGlyZWN0b3J5IG9mIGZpbGVzLgotCi1Vc2FnZTogJXByb2cgW29wdGlvbnNdIG1zZ2ZpbGUKICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5kaXJlY3Rvcnk6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRpcmVjdG9yeScsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtc2dmaWxlJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgd2l0aCBvcGVuKGFyZ3MubXNnZmlsZSkgYXMgZnA6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQogCiAgICAgdHJ5OgotICAgICAgICBtc2dmaWxlID0gYXJnc1swXQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9zLm1rZGlyKG9wdHMuZGlyZWN0b3J5KQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICMgSWdub3JlIGRpcmVjdG9yeSBleGlzdHMgZXJyb3IKLSAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgZnAgPSBvcGVuKG1zZ2ZpbGUpCi0gICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCi0gICAgZnAuY2xvc2UoKQorICAgICAgICBvcy5ta2RpcihhcmdzLmRpcmVjdG9yeSkKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCiAKICAgICBjb3VudGVyID0gMQogICAgIGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CkBAIC01OSw5ICs0NSw4IEBACiAgICAgICAgICAgICAgICAgZXh0ID0gJy5iaW4nCiAgICAgICAgICAgICBmaWxlbmFtZSA9ICdwYXJ0LSUwM2QlcycgJSAoY291bnRlciwgZXh0KQogICAgICAgICBjb3VudGVyICs9IDEKLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihvcHRzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKQotICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyZ3MuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5IGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NjNlYTkuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotIwotIyBTaW1wbGUgYmVuY2htYXJrcyBmb3IgdGhlIG11bHRpcHJvY2Vzc2luZyBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBxdWV1ZQotaW1wb3J0IGdjCi0KLV90aW1lciA9IHRpbWUucGVyZl9jb3VudGVyCi0KLWRlbHRhID0gMQotCi0KLSMjIyMgVEVTVF9RVUVVRVNQRUVECi0KLWRlZiBxdWV1ZXNwZWVkX2Z1bmMocSwgYywgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotICAgIGMucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgcS5wdXQoYSkKLQotICAgIHEucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWVzcGVlZChQcm9jZXNzLCBxLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1xdWV1ZXNwZWVkX2Z1bmMsIGFyZ3M9KHEsIGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBxLmdldCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCB0aGUgcXVldWUgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1BJUEVTUEVFRAotCi1kZWYgcGlwZV9mdW5jKGMsIGNvbmQsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIGMuc2VuZChhKQotCi0gICAgYy5zZW5kKCdTVE9QJykKLQotZGVmIHRlc3RfcGlwZXNwZWVkKCk6Ci0gICAgYywgZCA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXBpcGVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGQsIGNvbmQsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjb25kLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgY29uZC53YWl0KCkKLSAgICAgICAgY29uZC5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBjLnJlY3YoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIGNvbm5lY3Rpb24gaW4nLGVsYXBzZWQsJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9TRVFTUEVFRAotCi1kZWYgdGVzdF9zZXFzcGVlZChzZXEpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBhID0gc2VxWzVdCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0xPQ0sKLQotZGVmIHRlc3RfbG9ja3NwZWVkKGwpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBsLmFjcXVpcmUoKQotICAgICAgICAgICAgbC5yZWxlYXNlKCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25zcGVlZF9mdW5jKGMsIE4pOgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMubm90aWZ5KCkKLQotICAgIGMucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbnNwZWVkKFByb2Nlc3MsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbnNwZWVkX2Z1bmMsIGFyZ3M9KGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYy5ub3RpZnkoKQotICAgICAgICAgICAgYy53YWl0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgYy5yZWxlYXNlKCkKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMgKiAyLCAnd2FpdHMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zICogMiAvIGVsYXBzZWQpCi0KLSMjIyMKLQotZGVmIHRlc3QoKToKLSAgICBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgZ2MuZGlzYWJsZSgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHF1ZXVlLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlBpcGVcbicpCi0gICAgdGVzdF9waXBlc3BlZWQoKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3RcbicpCi0gICAgdGVzdF9zZXFzcGVlZChsaXN0KHJhbmdlKDEwKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3QgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG1hbmFnZXIubGlzdChsaXN0KHJhbmdlKDEwKSkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1GYWxzZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9RmFsc2UpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1UcnVlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1UcnVlKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBybG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuUkxvY2soKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgY29uZGl0aW9uIG1hbmFnZWQgYnkgYSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLkNvbmRpdGlvbigpKQotCi0gICAgZ2MuZW5hYmxlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQppbmRleCA3MjkxNzQzLi4xYzc5NmE1IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQpAQCAtMSwxMSArMSwzIEBACi0jCi0jIFRoaXMgbW9kdWxlIHNob3dzIGhvdyB0byB1c2UgYXJiaXRyYXJ5IGNhbGxhYmxlcyB3aXRoIGEgc3ViY2xhc3Mgb2YKLSMgYEJhc2VNYW5hZ2VyYC4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZnJlZXplX3N1cHBvcnQKIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgQmFzZVByb3h5CiBpbXBvcnQgb3BlcmF0b3IKQEAgLTI3LDEyICsxOSwxMCBAQAogCiAjIFByb3h5IHR5cGUgZm9yIGdlbmVyYXRvciBvYmplY3RzCiBjbGFzcyBHZW5lcmF0b3JQcm94eShCYXNlUHJveHkpOgotICAgIF9leHBvc2VkXyA9ICgnbmV4dCcsICdfX25leHRfXycpCisgICAgX2V4cG9zZWRfID0gWydfX25leHRfXyddCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ25leHQnKQotICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ19fbmV4dF9fJykKIAogIyBGdW5jdGlvbiB0byByZXR1cm4gdGhlIG9wZXJhdG9yIG1vZHVsZQpAQCAtOTAsOCArODAsNiBAQAogICAgIG9wID0gbWFuYWdlci5vcGVyYXRvcigpCiAgICAgcHJpbnQoJ29wLmFkZCgyMywgNDUpID0nLCBvcC5hZGQoMjMsIDQ1KSkKICAgICBwcmludCgnb3AucG93KDIsIDk0KSA9Jywgb3AucG93KDIsIDk0KSkKLSAgICBwcmludCgnb3AuZ2V0c2xpY2UocmFuZ2UoMTApLCAyLCA2KSA9Jywgb3AuZ2V0c2xpY2UobGlzdChyYW5nZSgxMCkpLCAyLCA2KSkKLSAgICBwcmludCgnb3AucmVwZWF0KHJhbmdlKDUpLCAzKSA9Jywgb3AucmVwZWF0KGxpc3QocmFuZ2UoNSkpLCAzKSkKICAgICBwcmludCgnb3AuX2V4cG9zZWRfID0nLCBvcC5fZXhwb3NlZF8pCiAKICMjCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weSBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CmluZGV4IDE1Nzg0OTguLjExMTAxZTEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CkBAIC0xLDEwICsxLDMgQEAKLSMKLSMgQSB0ZXN0IG9mIGBtdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQpAQCAtNDYsMjY5ICszOSwxMTUgQEAKICMKIAogZGVmIHRlc3QoKToKLSAgICBwcmludCgnY3B1X2NvdW50KCkgPSAlZFxuJyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKLQotICAgICMKLSAgICAjIENyZWF0ZSBwb29sCi0gICAgIwotCiAgICAgUFJPQ0VTU0VTID0gNAogICAgIHByaW50KCdDcmVhdGluZyBwb29sIHdpdGggJWQgcHJvY2Vzc2VzXG4nICUgUFJPQ0VTU0VTKQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpCi0gICAgcHJpbnQoJ3Bvb2wgPSAlcycgJSBwb29sKQotICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFRlc3RzCi0gICAgIworICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKSBhcyBwb29sOgorICAgICAgICAjCisgICAgICAgICMgVGVzdHMKKyAgICAgICAgIwogCi0gICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAotICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAorICAgICAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCiAKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KLSAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCisgICAgICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCi0gICAgZm9yIHIgaW4gcmVzdWx0czoKLSAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQotICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCisgICAgICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFNpbXBsZSBiZW5jaG1hcmtzCi0gICAgIworICAgICAgICAjCisgICAgICAgICMgVGVzdCBlcnJvciBoYW5kbGluZworICAgICAgICAjCiAKLSAgICBOID0gMTAwMDAwCi0gICAgcHJpbnQoJ2RlZiBwb3czKHgpOiByZXR1cm4geCoqMycpCisgICAgICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCiAKLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAocG93MywgcmFuZ2UoTikpKQotICAgIHByaW50KCdcdG1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKHBvdzMsIHJhbmdlKE4pKQotICAgIHByaW50KCdcdHBvb2wubWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoTiksIGNodW5rc2l6ZT1OLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZSglZCksIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzJyBcCi0gICAgICAgICAgJyBzZWNvbmRzJyAlIChOLCBOLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBMID0gW05vbmVdICogMTAwMDAwMAotICAgIHByaW50KCdkZWYgbm9vcCh4KTogcGFzcycpCi0gICAgcHJpbnQoJ0wgPSBbTm9uZV0gKiAxMDAwMDAwJykKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChub29wLCBMKSkKLSAgICBwcmludCgnXHRtYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAobm9vcCwgTCkKLSAgICBwcmludCgnXHRwb29sLm1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9bGVuKEwpLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAobGVuKEwpLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBkZWwgQSwgQiwgQywgTAotCi0gICAgIwotICAgICMgVGVzdCBlcnJvciBoYW5kbGluZwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQotICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQogICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgYXNzZXJ0IGkgPT0gOQotICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQotICAgIHByaW50KCkKLQotICAgICMKLSAgICAjIFRlc3RpbmcgdGltZW91dHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICAjCi0gICAgIyBUZXN0aW5nIGNhbGxiYWNrCi0gICAgIworICAgICAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIGNhbGxiYWNrOicpCisgICAgICAgIGFzc2VydCBpID09IDkKKyAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCisgICAgICAgIHByaW50KCkKIAotICAgIEEgPSBbXQotICAgIEIgPSBbNTYsIDAsIDEsIDgsIDI3LCA2NCwgMTI1LCAyMTYsIDM0MywgNTEyLCA3MjldCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0aW5nIHRpbWVvdXRzCisgICAgICAgICMKIAotICAgIHIgPSBwb29sLmFwcGx5X2FzeW5jKG11bCwgKDcsIDgpLCBjYWxsYmFjaz1BLmFwcGVuZCkKLSAgICByLndhaXQoKQorICAgICAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAotICAgIHIgPSBwb29sLm1hcF9hc3luYyhwb3czLCBsaXN0KHJhbmdlKDEwKSksIGNhbGxiYWNrPUEuZXh0ZW5kKQotICAgIHIud2FpdCgpCi0KLSAgICBpZiBBID09IEI6Ci0gICAgICAgIHByaW50KCdcdGNhbGxiYWNrcyBzdWNjZWVkZWRcbicpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1x0KioqIGNhbGxiYWNrcyBmYWlsZWRcblx0XHQlcyAhPSAlc1xuJyAlIChBLCBCKSkKLQotICAgICMKLSAgICAjIENoZWNrIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyB0YXNrcwotICAgICMKLQotICAgIGFzc2VydCBub3QgcG9vbC5fY2FjaGUsICdjYWNoZSA9ICVyJyAlIHBvb2wuX2NhY2hlCi0KLSAgICAjCi0gICAgIyBDaGVjayBjbG9zZSgpIG1ldGhvZHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBjbG9zZSgpOicpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcmVzdWx0ID0gcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbMC41XSkKLSAgICBwb29sLmNsb3NlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgYXNzZXJ0IHJlc3VsdC5nZXQoKSBpcyBOb25lCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGNsb3NlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGVybWluYXRlKCkgbWV0aG9kCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgdGVybWluYXRlKCk6JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0gICAgcG9vbC50ZXJtaW5hdGUoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdHRlcm1pbmF0ZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbjonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBwcm9jZXNzZXMgPSBwb29sLl9wb29sCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0KLSAgICByZXN1bHRzID0gcG9vbCA9IE5vbmUKLQotICAgIHRpbWUuc2xlZXAoREVMVEEgKiAyKQotCi0gICAgZm9yIHdvcmtlciBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGdhcmJhZ2UgY29sbGVjdGlvbiBzdWNjZWVkZWRcbicpCisgICAgICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG11bHRpcHJvY2Vzc2luZwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KICAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFkYmMzOC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotIwotIyBBIHRlc3QgZmlsZSBmb3IgdGhlIGBtdWx0aXByb2Nlc3NpbmdgIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwotaW1wb3J0IHJhbmRvbQotZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKLQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZyAgICAgICAgICAgICAgICMgbWF5IGdldCBvdmVyd3JpdHRlbgotCi0KLSMjIyMgVEVTVF9WQUxVRQotCi1kZWYgdmFsdWVfZnVuYyhydW5uaW5nLCBtdXRleCk6Ci0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjQpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBwcmludCgnXG5cdFx0XHQnICsgc3RyKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkgKyAnIGhhcyBmaW5pc2hlZCcpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3ZhbHVlKCk6Ci0gICAgVEFTS1MgPSAxMAotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCBUQVNLUykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkKLQotICAgIGZvciBpIGluIHJhbmdlKFRBU0tTKToKLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD12YWx1ZV9mdW5jLCBhcmdzPShydW5uaW5nLCBtdXRleCkpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgd2hpbGUgcnVubmluZy52YWx1ZSA+IDA6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4wOCkKLSAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHByaW50KHJ1bm5pbmcudmFsdWUsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHByaW50KCkKLSAgICBwcmludCgnTm8gbW9yZSBydW5uaW5nIHByb2Nlc3NlcycpCi0KLQotIyMjIyBURVNUX1FVRVVFCi0KLWRlZiBxdWV1ZV9mdW5jKHF1ZXVlKToKLSAgICBmb3IgaSBpbiByYW5nZSgzMCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC41ICogcmFuZG9tLnJhbmRvbSgpKQotICAgICAgICBxdWV1ZS5wdXQoaSppKQotICAgIHF1ZXVlLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlKCk6Ci0gICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXF1ZXVlX2Z1bmMsIGFyZ3M9KHEsKSkKLSAgICBwLnN0YXJ0KCkKLQotICAgIG8gPSBOb25lCi0gICAgd2hpbGUgbyAhPSAnU1RPUCc6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG8gPSBxLmdldCh0aW1lb3V0PTAuMykKLSAgICAgICAgICAgIHByaW50KG8sIGVuZD0nICcpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IEVtcHR5OgotICAgICAgICAgICAgcHJpbnQoJ1RJTUVPVVQnKQotCi0gICAgcHJpbnQoKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbl9mdW5jKGNvbmQpOgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICB0aW1lLnNsZWVwKDIpCi0gICAgcHJpbnQoJ1x0Y2hpbGQgaXMgbm90aWZ5aW5nJykKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb24oKToKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbl9mdW5jLCBhcmdzPShjb25kLCkpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHdhaXRpbmcnKQotICAgIGNvbmQud2FpdCgpCi0gICAgcHJpbnQoJ21haW4gaGFzIHdva2VuIHVwJykKLQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBwLmpvaW4oKQotICAgIHByaW50KGNvbmQpCi0KLQotIyMjIyBURVNUX1NFTUFQSE9SRQotCi1kZWYgc2VtYXBob3JlX2Z1bmMoc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpOgotICAgIHNlbWEuYWNxdWlyZSgpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlICs9IDEKLSAgICBwcmludChydW5uaW5nLnZhbHVlLCAndGFza3MgYXJlIHJ1bm5pbmcnKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjIpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBwcmludCgnJXMgaGFzIGZpbmlzaGVkJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHNlbWEucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3NlbWFwaG9yZSgpOgotICAgIHNlbWEgPSBtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKDMpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCAwKQotCi0gICAgcHJvY2Vzc2VzID0gWwotICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VtYXBob3JlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbWEsIG11dGV4LCBydW5uaW5nKSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApCi0gICAgICAgIF0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX0pPSU5fVElNRU9VVAotCi1kZWYgam9pbl90aW1lb3V0X2Z1bmMoKToKLSAgICBwcmludCgnXHRjaGlsZCBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCg1LjUpCi0gICAgcHJpbnQoJ1xuXHRjaGlsZCB0ZXJtaW5hdGluZycpCi0KLWRlZiB0ZXN0X2pvaW5fdGltZW91dCgpOgotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9am9pbl90aW1lb3V0X2Z1bmMpCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnd2FpdGluZyBmb3IgcHJvY2VzcyB0byBmaW5pc2gnKQotCi0gICAgd2hpbGUgMToKLSAgICAgICAgcC5qb2luKHRpbWVvdXQ9MSkKLSAgICAgICAgaWYgbm90IHAuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHByaW50KCcuJywgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLQotIyMjIyBURVNUX0VWRU5UCi0KLWRlZiBldmVudF9mdW5jKGV2ZW50KToKLSAgICBwcmludCgnXHQlciBpcyB3YWl0aW5nJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBldmVudC53YWl0KCkKLSAgICBwcmludCgnXHQlciBoYXMgd29rZW4gdXAnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotCi1kZWYgdGVzdF9ldmVudCgpOgotICAgIGV2ZW50ID0gbXVsdGlwcm9jZXNzaW5nLkV2ZW50KCkKLQotICAgIHByb2Nlc3NlcyA9IFttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9ZXZlbnRfZnVuYywgYXJncz0oZXZlbnQsKSkKLSAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSldCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoMikKLQotICAgIHByaW50KCdtYWluIGlzIHNldHRpbmcgZXZlbnQnKQotICAgIGV2ZW50LnNldCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX1NIQVJFRFZBTFVFUwotCi1kZWYgc2hhcmVkdmFsdWVzX2Z1bmModmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpOgotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgdiA9IHZhbHVlc1tpXVsxXQotICAgICAgICBzdiA9IHNoYXJlZF92YWx1ZXNbaV0udmFsdWUKLSAgICAgICAgYXNzZXJ0IHYgPT0gc3YKLQotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgYSA9IGFycmF5c1tpXVsxXQotICAgICAgICBzYSA9IGxpc3Qoc2hhcmVkX2FycmF5c1tpXVs6XSkKLSAgICAgICAgYXNzZXJ0IGEgPT0gc2EKLQotICAgIHByaW50KCdUZXN0cyBwYXNzZWQnKQotCi1kZWYgdGVzdF9zaGFyZWR2YWx1ZXMoKToKLSAgICB2YWx1ZXMgPSBbCi0gICAgICAgICgnaScsIDEwKSwKLSAgICAgICAgKCdoJywgLTIpLAotICAgICAgICAoJ2QnLCAxLjI1KQotICAgICAgICBdCi0gICAgYXJyYXlzID0gWwotICAgICAgICAoJ2knLCBsaXN0KHJhbmdlKDEwMCkpKSwKLSAgICAgICAgKCdkJywgWzAuMjUgKiBpIGZvciBpIGluIHJhbmdlKDEwMCldKSwKLSAgICAgICAgKCdIJywgbGlzdChyYW5nZSgxMDAwKSkpCi0gICAgICAgIF0KLQotICAgIHNoYXJlZF92YWx1ZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlZhbHVlKGlkLCB2KSBmb3IgaWQsIHYgaW4gdmFsdWVzXQotICAgIHNoYXJlZF9hcnJheXMgPSBbbXVsdGlwcm9jZXNzaW5nLkFycmF5KGlkLCBhKSBmb3IgaWQsIGEgaW4gYXJyYXlzXQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICB0YXJnZXQ9c2hhcmVkdmFsdWVzX2Z1bmMsCi0gICAgICAgIGFyZ3M9KHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKQotICAgICAgICApCi0gICAgcC5zdGFydCgpCi0gICAgcC5qb2luKCkKLQotICAgIGFzc2VydCBwLmV4aXRjb2RlID09IDAKLQotCi0jIyMjCi0KLWRlZiB0ZXN0KG5hbWVzcGFjZT1tdWx0aXByb2Nlc3NpbmcpOgotICAgIGdsb2JhbCBtdWx0aXByb2Nlc3NpbmcKLQotICAgIG11bHRpcHJvY2Vzc2luZyA9IG5hbWVzcGFjZQotCi0gICAgZm9yIGZ1bmMgaW4gW3Rlc3RfdmFsdWUsIHRlc3RfcXVldWUsIHRlc3RfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICB0ZXN0X3NlbWFwaG9yZSwgdGVzdF9qb2luX3RpbWVvdXQsIHRlc3RfZXZlbnQsCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2hhcmVkdmFsdWVzXToKLQotICAgICAgICBwcmludCgnXG5cdCMjIyMjIyMjICVzXG4nICUgZnVuYy5fX25hbWVfXykKLSAgICAgICAgZnVuYygpCi0KLSAgICBpZ25vcmUgPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICAgICAjIGNsZWFudXAgYW55IG9sZCBwcm9jZXNzZXMKLSAgICBpZiBoYXNhdHRyKG11bHRpcHJvY2Vzc2luZywgJ19kZWJ1Z19pbmZvJyk6Ci0gICAgICAgIGluZm8gPSBtdWx0aXByb2Nlc3NpbmcuX2RlYnVnX2luZm8oKQotICAgICAgICBpZiBpbmZvOgotICAgICAgICAgICAgcHJpbnQoaW5mbykKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RoZXJlIHNob3VsZCBiZSBubyBwb3NpdGl2ZSByZWZjb3VudHMgbGVmdCcpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICdtYW5hZ2VyJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgYW5kIGEgbWFuYWdlciAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgICAgICBuYW1lc3BhY2UuUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5jdXJyZW50X3Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5hY3RpdmVfY2hpbGRyZW4gPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBuYW1lc3BhY2UKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCBtYW5hZ2VyIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQotICAgIHRlc3QobmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weSBiL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTAyNGQuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMKLSMgRXhhbXBsZSB3aGVyZSBhIHBvb2wgb2YgaHR0cCBzZXJ2ZXJzIHNoYXJlIGEgc2luZ2xlIGxpc3RlbmluZyBzb2NrZXQKLSMKLSMgT24gV2luZG93cyB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBhYmlsaXR5IHRvIHBpY2tsZSBhIHNvY2tldAotIyBvYmplY3Qgc28gdGhhdCB0aGUgd29ya2VyIHByb2Nlc3NlcyBjYW4gaW5oZXJpdCBhIGNvcHkgb2YgdGhlIHNlcnZlcgotIyBvYmplY3QuICAoV2UgaW1wb3J0IGBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uYCB0byBlbmFibGUgdGhpcyBwaWNrbGluZy4pCi0jCi0jIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci0jIHVzaW5nIGEgcHJvY2Vzcy1zaGFyZWQgbG9jayAtLSBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgZnJlZXplX3N1cHBvcnQKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiAgICAjIG1ha2Ugc29ja2V0cyBwaWNrYWJsZS9pbmhlcml0YWJsZQotCi0KLWRlZiBub3RlKGZvcm1hdCwgKmFyZ3MpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1slc11cdCVzXG4nICUgKGN1cnJlbnRfcHJvY2VzcygpLm5hbWUsIGZvcm1hdCAlIGFyZ3MpKQotCi0KLWNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgIyB3ZSBvdmVycmlkZSBsb2dfbWVzc2FnZSgpIHRvIHNob3cgd2hpY2ggcHJvY2VzcyBpcyBoYW5kbGluZyB0aGUgcmVxdWVzdAotICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgbm90ZShmb3JtYXQsICphcmdzKQotCi1kZWYgc2VydmVfZm9yZXZlcihzZXJ2ZXIpOgotICAgIG5vdGUoJ3N0YXJ0aW5nIHNlcnZlcicpCi0gICAgdHJ5OgotICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwYXNzCi0KLQotZGVmIHJ1bnBvb2woYWRkcmVzcywgbnVtYmVyX29mX3Byb2Nlc3Nlcyk6Ci0gICAgIyBjcmVhdGUgYSBzaW5nbGUgc2VydmVyIG9iamVjdCAtLSBjaGlsZHJlbiB3aWxsIGVhY2ggaW5oZXJpdCBhIGNvcHkKLSAgICBzZXJ2ZXIgPSBIVFRQU2VydmVyKGFkZHJlc3MsIFJlcXVlc3RIYW5kbGVyKQotCi0gICAgIyBjcmVhdGUgY2hpbGQgcHJvY2Vzc2VzIHRvIGFjdCBhcyB3b3JrZXJzCi0gICAgZm9yIGkgaW4gcmFuZ2UobnVtYmVyX29mX3Byb2Nlc3NlcyAtIDEpOgotICAgICAgICBQcm9jZXNzKHRhcmdldD1zZXJ2ZV9mb3JldmVyLCBhcmdzPShzZXJ2ZXIsKSkuc3RhcnQoKQotCi0gICAgIyBtYWluIHByb2Nlc3MgYWxzbyBhY3RzIGFzIGEgd29ya2VyCi0gICAgc2VydmVfZm9yZXZlcihzZXJ2ZXIpCi0KLQotZGVmIHRlc3QoKToKLSAgICBESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykKLSAgICBBRERSRVNTID0gKCdsb2NhbGhvc3QnLCA4MDAwKQotICAgIE5VTUJFUl9PRl9QUk9DRVNTRVMgPSA0Ci0KLSAgICBwcmludCgnU2VydmluZyBhdCBodHRwOi8vJXM6JWQgdXNpbmcgJWQgd29ya2VyIHByb2Nlc3NlcycgJSBcCi0gICAgICAgICAgKEFERFJFU1NbMF0sIEFERFJFU1NbMV0sIE5VTUJFUl9PRl9QUk9DRVNTRVMpKQotICAgIHByaW50KCdUbyBleGl0IHByZXNzIEN0cmwtJyArIFsnQycsICdCcmVhayddW3N5cy5wbGF0Zm9ybT09J3dpbjMyJ10pCi0KLSAgICBvcy5jaGRpcihESVIpCi0gICAgcnVucG9vbChBRERSRVNTLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQppbmRleCBlNjZkOTdiLi4zYjkyMjY5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQpAQCAtMSwxNiArMSwzIEBACi0jCi0jIFNpbXBsZSBleGFtcGxlIHdoaWNoIHVzZXMgYSBwb29sIG9mIHdvcmtlcnMgdG8gY2Fycnkgb3V0IHNvbWUgdGFza3MuCi0jCi0jIE5vdGljZSB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcHJvYmFibHkgbm90IGNvbWUgb3V0IG9mIHRoZSBvdXRwdXQKLSMgcXVldWUgaW4gdGhlIHNhbWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3Mgd2VyZQotIyBwdXQgb24gdGhlIGlucHV0IHF1ZXVlLiAgSWYgaXQgaXMgaW1wb3J0YW50IHRvIGdldCB0aGUgcmVzdWx0cyBiYWNrCi0jIGluIHRoZSBvcmlnaW5hbCBvcmRlciB0aGVuIGNvbnNpZGVyIHVzaW5nIGBQb29sLm1hcCgpYCBvcgotIyBgUG9vbC5pbWFwKClgICh3aGljaCB3aWxsIHNhdmUgb24gdGhlIGFtb3VudCBvZiBjb2RlIG5lZWRlZCBhbnl3YXkpLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCiAKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmggYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCmluZGV4IDMyNjQ3YzAuLmZjYjg0NmEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKKysrIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaApAQCAtNzAsNCArNzAsMTEgQEAKICAgICBQeU9iamVjdCAqdHBfc3ViY2xhc3NlczsKICAgICBQeU9iamVjdCAqdHBfd2Vha2xpc3Q7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2RlbDsKKworICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLworICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKKworICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKIH0gUHlUeXBlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCAxZTVmNDJkLi4xMDkyZTZiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtMTQyLDYgKzE0MiwzOSBAQAogICAgUmVtb3ZlcyB1c2FnZSBvZiA6ZnVuYzpgYXBwbHlgLiAgRm9yIGV4YW1wbGUgYGBhcHBseShmdW5jdGlvbiwgKmFyZ3MsCiAgICAqKmt3YXJncylgYCBpcyBjb252ZXJ0ZWQgdG8gYGBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpYGAuCiAKKy4uIDJ0bzNmaXhlcjo6IGFzc2VydHMKKworICAgUmVwbGFjZXMgZGVwcmVjYXRlZCA6bW9kOmB1bml0dGVzdGAgbWV0aG9kIG5hbWVzIHdpdGggdGhlIGNvcnJlY3Qgb25lcy4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYGZhaWxVbmxlc3NFcXVhbChhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgYXNzZXJ0RXF1YWxzKGEsIGIpYGAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBmYWlsSWZFcXVhbChhLCBiKWBgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEVxdWFscyhhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgZmFpbFVubGVzcyhhKWBgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgYXNzZXJ0XyhhKWBgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgZmFpbElmKGEpYGAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2U+YAorICAgYGBmYWlsVW5sZXNzUmFpc2VzKGV4YywgY2FsKWBgICAgIDptZXRoOmBhc3NlcnRSYWlzZXMoZXhjLCBjYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcz5gCisgICBgYGZhaWxVbmxlc3NBbG1vc3RFcXVhbChhLCBiKWBgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0QWxtb3N0RXF1YWxzKGEsIGIpYGAgICAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBmYWlsSWZBbG1vc3RFcXVhbChhLCBiKWBgICAgICAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEFsbW9zdEVxdWFscyhhLCBiKWBgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gMnRvM2ZpeGVyOjogYmFzZXN0cmluZwogCiAgICBDb252ZXJ0cyA6Y2xhc3M6YGJhc2VzdHJpbmdgIHRvIDpjbGFzczpgc3RyYC4KQEAgLTM0Miw2ICszNzUsMTAgQEAKIAogICAgSGFuZGxlcyB0aGUgbW92ZSBvZiA6ZnVuYzpgcmVkdWNlYCB0byA6ZnVuYzpgZnVuY3Rvb2xzLnJlZHVjZWAuCiAKKy4uIDJ0bzNmaXhlcjo6IHJlbG9hZAorCisgICBDb252ZXJ0cyA6ZnVuYzpgcmVsb2FkYCB0byA6ZnVuYzpgaW1wLnJlbG9hZGAuCisKIC4uIDJ0bzNmaXhlcjo6IHJlbmFtZXMKIAogICAgQ2hhbmdlcyA6ZGF0YTpgc3lzLm1heGludGAgdG8gOmRhdGE6YHN5cy5tYXhzaXplYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjc4NTNkMzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUKKyAgIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcworICAgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi45ZmZiNWEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLndyaXRlZnJhbWVzcmF3KGRhdGEpCiAKICAgIExpa2UgOm1ldGg6YHdyaXRlZnJhbWVzYCwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBvZiB0aGUgYXVkaW8gZmlsZSBpcyBub3QKICAgIHVwZGF0ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggMGIxOGM2ZC4uNWI3ZDAxNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTc3LDkgKzk3Nyw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xNjQ2LDE3ICsxNjQ2LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdAppbmRleCA1NWM2MWQ3Li43YjgxMDc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CkBAIC0xMCw2ICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIGJ1aWxkcyBvbiB0aGUgOm1vZDpgYXN5bmNvcmVgIGluZnJhc3RydWN0dXJlLCBzaW1wbGlmeWluZwogYXN5bmNocm9ub3VzIGNsaWVudHMgYW5kIHNlcnZlcnMgYW5kIG1ha2luZyBpdCBlYXNpZXIgdG8gaGFuZGxlIHByb3RvY29scwogd2hvc2UgZWxlbWVudHMgYXJlIHRlcm1pbmF0ZWQgYnkgYXJiaXRyYXJ5IHN0cmluZ3MsIG9yIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODE1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdApAQCAtMCwwICsxLDU4NiBAQAorOm1vZDpgYXN5bmNpb2AgLS0gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKyAgIDpzeW5vcHNpczogQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3luY2lvL2AKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgc2luZ2xlLXRocmVhZGVkIGNvbmN1cnJlbnQKK2NvZGUgdXNpbmcgY29yb3V0aW5lcywgbXVsdGlwbGV4aW5nIEkvTyBhY2Nlc3Mgb3ZlciBzb2NrZXRzIGFuZCBvdGhlcgorcmVzb3VyY2VzLCBydW5uaW5nIG5ldHdvcmsgY2xpZW50cyBhbmQgc2VydmVycywgYW5kIG90aGVyIHJlbGF0ZWQgcHJpbWl0aXZlcy4KKworSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiB0aGUgcGFja2FnZSBjb250ZW50czoKKworKiBhIHBsdWdnYWJsZSA6cmVmOmBldmVudCBsb29wIDxldmVudC1sb29wPmAgd2l0aCB2YXJpb3VzIHN5c3RlbS1zcGVjaWZpYworICBpbXBsZW1lbnRhdGlvbnM7CisKKyogOnJlZjpgdHJhbnNwb3J0IDx0cmFuc3BvcnQ+YCBhbmQgOnJlZjpgcHJvdG9jb2wgPHByb3RvY29sPmAgYWJzdHJhY3Rpb25zCisgIChzaW1pbGFyIHRvIHRob3NlIGluIGBUd2lzdGVkIDxodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vPmBfKTsKKworKiBjb25jcmV0ZSBzdXBwb3J0IGZvciBUQ1AsIFVEUCwgU1NMLCBzdWJwcm9jZXNzIHBpcGVzLCBkZWxheWVkIGNhbGxzLCBhbmQKKyAgb3RoZXJzIChzb21lIG1heSBiZSBzeXN0ZW0tZGVwZW5kZW50KTsKKworKiBhIEZ1dHVyZSBjbGFzcyB0aGF0IG1pbWlja3MgdGhlIG9uZSBpbiB0aGUgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBtb2R1bGUsCisgIGJ1dCBhZGFwdGVkIGZvciB1c2Ugd2l0aCB0aGUgZXZlbnQgbG9vcDsKKworKiBjb3JvdXRpbmVzIGFuZCB0YXNrcyBiYXNlZCBvbiBgYHlpZWxkIGZyb21gYCAoOlBFUDpgMzgwYCksIHRvIGhlbHAgd3JpdGUKKyAgY29uY3VycmVudCBjb2RlIGluIGEgc2VxdWVudGlhbCBmYXNoaW9uOworCisqIGNhbmNlbGxhdGlvbiBzdXBwb3J0IGZvciBGdXR1cmVzIGFuZCBjb3JvdXRpbmVzOworCisqIDpyZWY6YHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIDxzeW5jPmAgZm9yIHVzZSBiZXR3ZWVuIGNvcm91dGluZXMgaW4KKyAgYSBzaW5nbGUgdGhyZWFkLCBtaW1pY2tpbmcgdGhvc2UgaW4gdGhlIDptb2Q6YHRocmVhZGluZ2AgbW9kdWxlOworCisqIGFuIGludGVyZmFjZSBmb3IgcGFzc2luZyB3b3JrIG9mZiB0byBhIHRocmVhZHBvb2wsIGZvciB0aW1lcyB3aGVuCisgIHlvdSBhYnNvbHV0ZWx5LCBwb3NpdGl2ZWx5IGhhdmUgdG8gdXNlIGEgbGlicmFyeSB0aGF0IG1ha2VzIGJsb2NraW5nCisgIEkvTyBjYWxscy4KKworCitEaXNjbGFpbWVyCistLS0tLS0tLS0tCisKK0Z1bGwgZG9jdW1lbnRhdGlvbiBpcyBub3QgeWV0IHJlYWR5OyB3ZSBob3BlIHRvIGhhdmUgaXQgd3JpdHRlbgorYmVmb3JlIFB5dGhvbiAzLjQgbGVhdmVzIGJldGEuICBVbnRpbCB0aGVuLCB0aGUgYmVzdCByZWZlcmVuY2UgaXMKKzpQRVA6YDMxNTZgLiAgRm9yIGEgbW90aXZhdGlvbmFsIHByaW1lciBvbiB0cmFuc3BvcnRzIGFuZCBwcm90b2NvbHMsCitzZWUgOlBFUDpgMzE1M2AuCisKKworLi4gWFhYIHNob3VsZCB0aGUgYXN5bmNpbyBkb2N1bWVudGF0aW9uIGNvbWUgaW4gc2V2ZXJhbCBwYWdlcywgYXMgZm9yIGxvZ2dpbmc/CisKKworLi4gX2V2ZW50LWxvb3A6CisKK0V2ZW50IGxvb3BzCistLS0tLS0tLS0tLQorCitUaGUgZXZlbnQgbG9vcCBpcyB0aGUgY2VudHJhbCBleGVjdXRpb24gZGV2aWNlIHByb3ZpZGVkIGJ5IDptb2Q6YGFzeW5jaW9gLgorSXQgcHJvdmlkZXMgbXVsdGlwbGUgZmFjaWxpdGllcywgYW1vbmdzdCB3aGljaDoKKworKiBSZWdpc3RlcmluZywgZXhlY3V0aW5nIGFuZCBjYW5jZWxsaW5nIGRlbGF5ZWQgY2FsbHMgKHRpbWVvdXRzKQorCisqIENyZWF0aW5nIGNsaWVudCBhbmQgc2VydmVyIDpyZWY6YHRyYW5zcG9ydHMgPHRyYW5zcG9ydD5gIGZvciB2YXJpb3VzCisgIGtpbmRzIG9mIGNvbW11bmljYXRpb24KKworKiBMYXVuY2hpbmcgc3VicHJvY2Vzc2VzIGFuZCB0aGUgYXNzb2NpYXRlZCA6cmVmOmB0cmFuc3BvcnRzIDx0cmFuc3BvcnQ+YAorICBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGFuIGV4dGVybmFsIHByb2dyYW0KKworKiBEZWxlZ2F0aW5nIGNvc3RseSBmdW5jdGlvbiBjYWxscyB0byBhIHBvb2wgb2YgdGhyZWFkcworCitHZXR0aW5nIGFuIGV2ZW50IGxvb3AKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGFuIGV2ZW50IGxvb3AgaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGdldF9ldmVudF9sb29wYAorZnVuY3Rpb24uCisKKy4uIFhYWCBtb3JlIGRvY3MKKworRGVsYXllZCBjYWxscworXl5eXl5eXl5eXl5eXgorCitUaGUgZXZlbnQgbG9vcCBoYXMgaXRzIG93biBpbnRlcm5hbCBjbG9jayBmb3IgY29tcHV0aW5nIHRpbWVvdXRzLgorV2hpY2ggY2xvY2sgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSAocGxhdGZvcm0tc3BlY2lmaWMpIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9uOyBpZGVhbGx5IGl0IGlzIGEgbW9ub3RvbmljIGNsb2NrLiAgVGhpcyB3aWxsIGdlbmVyYWxseSBiZQorYSBkaWZmZXJlbnQgY2xvY2sgdGhhbiA6ZnVuYzpgdGltZS50aW1lYC4KKworLi4gbWV0aG9kOjogdGltZSgpCisKKyAgIFJldHVybiB0aGUgY3VycmVudCB0aW1lLCBhcyBhIDpjbGFzczpgZmxvYXRgIHZhbHVlLCBhY2NvcmRpbmcgdG8gdGhlCisgICBldmVudCBsb29wJ3MgaW50ZXJuYWwgY2xvY2suCisKKy4uIG1ldGhvZDo6IGNhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBnaXZlbiAqZGVsYXkqCisgICBzZWNvbmRzIChlaXRoZXIgYW4gaW50IG9yIGZsb2F0KS4KKworICAgQSAiaGFuZGxlIiBpcyByZXR1cm5lZDogYW4gb3BhcXVlIG9iamVjdCB3aXRoIGEgOm1ldGg6YGNhbmNlbGAgbWV0aG9kCisgICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbC4KKworICAgKmNhbGxiYWNrKiB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGNhbGwgdG8gOm1ldGg6YGNhbGxfbGF0ZXJgLgorICAgSWYgdHdvIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIGZvciBleGFjdGx5IHRoZSBzYW1lIHRpbWUsIGl0IGlzCisgICB1bmRlZmluZWQgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgIFRoZSBvcHRpb25hbCBwb3NpdGlvbmFsICphcmdzKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgd2hlbiBpdAorICAgaXMgY2FsbGVkLiBJZiB5b3Ugd2FudCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdpdGggc29tZSBuYW1lZAorICAgYXJndW1lbnRzLCB1c2UgYSBjbG9zdXJlIG9yIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAuCisKKy4uIG1ldGhvZDo6IGNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICBBcnJhbmdlIGZvciB0aGUgKmNhbGxiYWNrKiB0byBiZSBjYWxsZWQgYXQgdGhlIGdpdmVuIGFic29sdXRlIHRpbWVzdGFtcAorICAgKndoZW4qIChhbiBpbnQgb3IgZmxvYXQpLCB1c2luZyB0aGUgc2FtZSB0aW1lIHJlZmVyZW5jZSBhcyA6bWV0aDpgdGltZWAuCisKKyAgIFRoaXMgbWV0aG9kJ3MgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YGNhbGxfbGF0ZXJgLgorCitDcmVhdGluZyBjb25uZWN0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogY3JlYXRlX2Nvbm5lY3Rpb24ocHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICoqb3B0aW9ucykKKworICAgQ3JlYXRlIGEgc3RyZWFtaW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgKmhvc3QqIGFuZAorICAgKnBvcnQqLiAgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgYmUgYSBjYWxsYWJsZSByZXR1cm5pbmcgYQorICAgOnJlZjpgcHJvdG9jb2wgPHByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFRoZSBjaHJvbm9sb2dpY2FsIHN5bm9wc2lzIG9mIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOgorCisgICAjLiBUaGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIGEgOnJlZjpgdHJhbnNwb3J0IDx0cmFuc3BvcnQ+YAorICAgICAgaXMgY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisKKyAgICMuICpwcm90b2NvbF9mYWN0b3J5KiBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgYW5kIG11c3QgcmV0dXJuIGEKKyAgICAgIDpyZWY6YHByb3RvY29sIDxwcm90b2NvbD5gIGluc3RhbmNlLgorCisgICAjLiBUaGUgcHJvdG9jb2wgaW5zdGFuY2UgaXMgdGllZCB0byB0aGUgdHJhbnNwb3J0LCBhbmQgaXRzCisgICAgICA6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAjLiBUaGUgY29yb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5IHdpdGggdGhlIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAKKyAgICAgIHBhaXIuCisKKyAgIFRoZSBjcmVhdGVkIHRyYW5zcG9ydCBpcyBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYmlkaXJlY3Rpb25hbCBzdHJlYW0uCisKKyAgIC4uIG5vdGU6OgorICAgICAgKnByb3RvY29sX2ZhY3RvcnkqIGNhbiBiZSBhbnkga2luZCBvZiBjYWxsYWJsZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgICBhIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBhIHByZS1jcmVhdGVkCisgICAgICBwcm90b2NvbCBpbnN0YW5jZSwgeW91IGNhbiBwYXNzIGBgbGFtYmRhOiBteV9wcm90b2NvbGBgLgorCisgICAqb3B0aW9ucyogYXJlIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyBhbGxvd2luZyB0byBjaGFuZ2UgaG93IHRoZQorICAgY29ubmVjdGlvbiBpcyBjcmVhdGVkOgorCisgICAqICpzc2wqOiBpZiBnaXZlbiBhbmQgbm90IGZhbHNlLCBhIFNTTC9UTFMgdHJhbnNwb3J0IGlzIGNyZWF0ZWQKKyAgICAgKGJ5IGRlZmF1bHQgYSBwbGFpbiBUQ1AgdHJhbnNwb3J0IGlzIGNyZWF0ZWQpLiAgSWYgKnNzbCogaXMKKyAgICAgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QsIHRoaXMgY29udGV4dCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgICB0aGUgdHJhbnNwb3J0OyBpZiAqc3NsKiBpcyA6Y29uc3Q6YFRydWVgLCBhIGNvbnRleHQgd2l0aCBzb21lCisgICAgIHVuc3BlY2lmaWVkIGRlZmF1bHQgc2V0dGluZ3MgaXMgdXNlZC4KKworICAgKiAqc2VydmVyX2hvc3RuYW1lKiwgaXMgb25seSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggKnNzbCosCisgICAgIGFuZCBzZXRzIG9yIG92ZXJyaWRlcyB0aGUgaG9zdG5hbWUgdGhhdCB0aGUgdGFyZ2V0IHNlcnZlcidzIGNlcnRpZmljYXRlCisgICAgIHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0LiAgQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlICpob3N0KiBhcmd1bWVudAorICAgICBpcyB1c2VkLiAgSWYgKmhvc3QqIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBkZWZhdWx0IGFuZCB5b3UgbXVzdCBwYXNzIGEKKyAgICAgdmFsdWUgZm9yICpzZXJ2ZXJfaG9zdG5hbWUqLiAgSWYgKnNlcnZlcl9ob3N0bmFtZSogaXMgYW4gZW1wdHkKKyAgICAgc3RyaW5nLCBob3N0bmFtZSBtYXRjaGluZyBpcyBkaXNhYmxlZCAod2hpY2ggaXMgYSBzZXJpb3VzIHNlY3VyaXR5CisgICAgIHJpc2ssIGFsbG93aW5nIGZvciBtYW4taW4tdGhlLW1pZGRsZS1hdHRhY2tzKS4KKworICAgKiAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKiBhcmUgdGhlIG9wdGlvbmFsIGFkZHJlc3MgZmFtaWx5LCBwcm90b2NvbAorICAgICBhbmQgZmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gZ2V0YWRkcmluZm8oKSBmb3IgKmhvc3QqIHJlc29sdXRpb24uCisgICAgIElmIGdpdmVuLCB0aGVzZSBzaG91bGQgYWxsIGJlIGludGVnZXJzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgOm1vZDpgc29ja2V0YCBtb2R1bGUgY29uc3RhbnRzLgorCisgICAqICpzb2NrKiwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBhbiBleGlzdGluZywgYWxyZWFkeSBjb25uZWN0ZWQKKyAgICAgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorICAgICBJZiAqc29jayogaXMgZ2l2ZW4sIG5vbmUgb2YgKmhvc3QqLCAqcG9ydCosICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqCisgICAgIGFuZCAqbG9jYWxfYWRkciogc2hvdWxkIGJlIHNwZWNpZmllZC4KKworICAgKiAqbG9jYWxfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKGxvY2FsX2hvc3QsIGxvY2FsX3BvcnQpYGAgdHVwbGUgdXNlZAorICAgICB0byBiaW5kIHRoZSBzb2NrZXQgdG8gbG9jYWxseS4gIFRoZSAqbG9jYWxfaG9zdCogYW5kICpsb2NhbF9wb3J0KgorICAgICBhcmUgbG9va2VkIHVwIHVzaW5nIGdldGFkZHJpbmZvKCksIHNpbWlsYXJseSB0byAqaG9zdCogYW5kICpwb3J0Ki4KKworCisuLiBfcHJvdG9jb2w6CisKK1Byb3RvY29scworLS0tLS0tLS0tCisKKzptb2Q6YGFzeW5jaW9gIHByb3ZpZGVzIGJhc2UgY2xhc3NlcyB0aGF0IHlvdSBjYW4gc3ViY2xhc3MgdG8gaW1wbGVtZW50Cit5b3VyIG5ldHdvcmsgcHJvdG9jb2xzLiAgVGhvc2UgY2xhc3NlcyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCis6cmVmOmB0cmFuc3BvcnRzIDx0cmFuc3BvcnQ+YCAoc2VlIGJlbG93KTogdGhlIHByb3RvY29sIHBhcnNlcyBpbmNvbWluZworZGF0YSBhbmQgYXNrcyBmb3IgdGhlIHdyaXRpbmcgb2Ygb3V0Z29pbmcgZGF0YSwgd2hpbGUgdGhlIHRyYW5zcG9ydCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgSS9PIGFuZCBidWZmZXJpbmcuCisKK1doZW4gc3ViY2xhc3NpbmcgYSBwcm90b2NvbCBjbGFzcywgaXQgaXMgcmVjb21tZW5kZWQgeW91IG92ZXJyaWRlIGNlcnRhaW4KK21ldGhvZHMuICBUaG9zZSBtZXRob2RzIGFyZSBjYWxsYmFja3M6IHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydAorb24gY2VydGFpbiBldmVudHMgKGZvciBleGFtcGxlIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkKTsgeW91IHNob3VsZG4ndAorY2FsbCB0aGVtIHlvdXJzZWxmLCB1bmxlc3MgeW91IGFyZSBpbXBsZW1lbnRpbmcgYSB0cmFuc3BvcnQuCisKKy4uIG5vdGU6OgorICAgQWxsIGNhbGxiYWNrcyBoYXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgZW1wdHkuICBUaGVyZWZvcmUsCisgICB5b3Ugb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIGluIHdoaWNoIHlvdQorICAgYXJlIGludGVyZXN0ZWQuCisKKworUHJvdG9jb2wgY2xhc3NlcworXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc3RyZWFtaW5nIHByb3RvY29scyAoZm9yIHVzZSB3aXRoCisgICBlLmcuIFRDUCBhbmQgU1NMIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IERhdGFncmFtUHJvdG9jb2wKKworICAgVGhlIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBkYXRhZ3JhbSBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBVRFAgdHJhbnNwb3J0cykuCisKKy4uIGNsYXNzOjogU3VicHJvY2Vzc1Byb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgcHJvdG9jb2xzIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZAorICAgcHJvY2Vzc2VzICh0aHJvdWdoIGEgc2V0IG9mIHVuaWRpcmVjdGlvbmFsIHBpcGVzKS4KKworCitDb25uZWN0aW9uIGNhbGxiYWNrcworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBjb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorCisgICBDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFkZS4KKworICAgVGhlICp0cmFuc3BvcnQqIGFyZ3VtZW50IGlzIHRoZSB0cmFuc3BvcnQgcmVwcmVzZW50aW5nIHRoZQorICAgY29ubmVjdGlvbi4gIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgaXQgc29tZXdoZXJlCisgICAoZS5nLiBhcyBhbiBhdHRyaWJ1dGUpIGlmIHlvdSBuZWVkIHRvLgorCisuLiBtZXRob2Q6OiBjb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgVGhlIGFyZ3VtZW50IGlzIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIDpjb25zdDpgTm9uZWAuCisgICBUaGUgbGF0dGVyIG1lYW5zIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQsIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgYWJvcnRlZCBvciBjbG9zZWQgYnkgdGhpcyBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLgorCis6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBhbmQgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgYXJlIGNhbGxlZCBleGFjdGx5IG9uY2UKK3BlciBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBBbGwgb3RoZXIgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGJldHdlZW4gdGhvc2UKK3R3byBtZXRob2RzLCB3aGljaCBhbGxvd3MgZm9yIGVhc2llciByZXNvdXJjZSBtYW5hZ2VtZW50IGluIHlvdXIgcHJvdG9jb2wKK2ltcGxlbWVudGF0aW9uLgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9ubHkgb24gOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgCitpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IHBpcGVfZGF0YV9yZWNlaXZlZChmZCwgZGF0YSkKKworICAgQ2FsbGVkIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3Mgd3JpdGVzIGRhdGEgaW50byBpdHMgc3Rkb3V0IG9yIHN0ZGVyciBwaXBlLgorICAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHBpcGUuICAqZGF0YSogaXMgYSBub24tZW1wdHkKKyAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhLgorCisuLiBtZXRob2Q6OiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChmZCwgZXhjKQorCisgICBDYWxsZWQgd2hlbiBvbmUgb2YgdGhlIHBpcGVzIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgY2hpbGQgcHJvY2VzcworICAgaXMgY2xvc2VkLiAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkLgorCisuLiBtZXRob2Q6OiBwcm9jZXNzX2V4aXRlZCgpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBleGl0ZWQuCisKKworRGF0YSByZWNlcHRpb24gY2FsbGJhY2tzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU3RyZWFtaW5nIHByb3RvY29scworIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogZGF0YV9yZWNlaXZlZChkYXRhKQorCisgICBDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBub24tZW1wdHkgYnl0ZXMgb2JqZWN0CisgICBjb250YWluaW5nIHRoZSBpbmNvbWluZyBkYXRhLgorCisgICAuLiBub3RlOjoKKyAgICAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYnVmZmVyZWQsIGNodW5rZWQgb3IgcmVhc3NlbWJsZWQgZGVwZW5kcyBvbgorICAgICAgdGhlIHRyYW5zcG9ydC4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGRuJ3QgcmVseSBvbiBzcGVjaWZpYyBzZW1hbnRpY3MKKyAgICAgIGFuZCBpbnN0ZWFkIG1ha2UgeW91ciBwYXJzaW5nIGdlbmVyaWMgYW5kIGZsZXhpYmxlIGVub3VnaC4gIEhvd2V2ZXIsCisgICAgICBkYXRhIGlzIGFsd2F5cyByZWNlaXZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworLi4gbWV0aG9kOjogZW9mX3JlY2VpdmVkKCkKKworICAgQ2FsbHMgd2hlbiB0aGUgb3RoZXIgZW5kIHNpZ25hbHMgaXQgd29uJ3Qgc2VuZCBhbnkgbW9yZSBkYXRhCisgICAoZm9yIGV4YW1wbGUgYnkgY2FsbGluZyA6bWV0aDpgd3JpdGVfZW9mYCwgaWYgdGhlIG90aGVyIGVuZCBhbHNvIHVzZXMKKyAgIGFzeW5jaW8pLgorCisgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgaW4gd2hpY2ggY2FzZQorICAgdGhlIHRyYW5zcG9ydCB3aWxsIGNsb3NlIGl0c2VsZi4gIENvbnZlcnNlbHksIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4gIFNpbmNlIHRoZQorICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIE5vbmUsIGl0IGltcGxpY2l0bHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiBub3RlOjoKKyAgICAgIFNvbWUgdHJhbnNwb3J0cyBzdWNoIGFzIFNTTCBkb24ndCBzdXBwb3J0IGhhbGYtY2xvc2VkIGNvbm5lY3Rpb25zLAorICAgICAgaW4gd2hpY2ggY2FzZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByZXZlbnQgY2xvc2luZworICAgICAgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBkYXRhX3JlY2VpdmVkYCBjYW4gYmUgY2FsbGVkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGltZXMgZHVyaW5nCithIGNvbm5lY3Rpb24uICBIb3dldmVyLCA6bWV0aDpgZW9mX3JlY2VpdmVkYCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlCithbmQsIGlmIGNhbGxlZCwgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIHdvbid0IGJlIGNhbGxlZCBhZnRlciBpdC4KKworRGF0YWdyYW0gcHJvdG9jb2xzCisiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGluc3RhbmNlcy4KKworLi4gbWV0aG9kOjogZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKworICAgQ2FsbGVkIHdoZW4gYSBkYXRhZ3JhbSBpcyByZWNlaXZlZC4gICpkYXRhKiBpcyBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nCisgICB0aGUgaW5jb21pbmcgZGF0YS4gICphZGRyKiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcGVlciBzZW5kaW5nIHRoZSBkYXRhOworICAgdGhlIGV4YWN0IGZvcm1hdCBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQuCisKKy4uIG1ldGhvZDo6IGVycm9yX3JlY2VpdmVkKGV4YykKKworICAgQ2FsbGVkIHdoZW4gYSBwcmV2aW91cyBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbgorICAgOmNsYXNzOmBPU0Vycm9yYC4gICpleGMqIGlzIHRoZSA6Y2xhc3M6YE9TRXJyb3JgIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmFyZSBjb25kaXRpb25zLCB3aGVuIHRoZSB0cmFuc3BvcnQgKGUuZy4gVURQKQorICAgZGV0ZWN0cyB0aGF0IGEgZGF0YWdyYW0gY291bGRuJ3QgYmUgZGVsaXZlcmVkIHRvIGl0cyByZWNpcGllbnQuCisgICBJbiBtYW55IGNvbmRpdGlvbnMgdGhvdWdoLCB1bmRlbGl2ZXJhYmxlIGRhdGFncmFtcyB3aWxsIGJlIHNpbGVudGx5CisgICBkcm9wcGVkLgorCisKK0Zsb3cgY29udHJvbCBjYWxsYmFja3MKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBwYXVzZV93cml0aW5nKCkKKworICAgQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKworLi4gbWV0aG9kOjogcmVzdW1lX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKworOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIGNhbGxzIGFyZSBwYWlyZWQgLS0KKzptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyCit0aGUgaGlnaC13YXRlciBtYXJrIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUKK2V2ZW4gbW9yZSksIGFuZCBldmVudHVhbGx5IDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKK2J1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisuLiBub3RlOjoKKyAgIElmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgIENvbnZlcnNlbHksIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgbWFyayBpcyB6ZXJvLgorCisKKy4uIF90cmFuc3BvcnQ6CisKK1RyYW5zcG9ydHMKKy0tLS0tLS0tLS0KKworVHJhbnNwb3J0cyBhcmUgY2xhc3NlZCBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYCBpbiBvcmRlciB0byBhYnN0cmFjdAordmFyaW91cyBraW5kcyBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgWW91IGdlbmVyYWxseSB3b24ndCBpbnN0YW50aWF0ZQorYSB0cmFuc3BvcnQgeW91cnNlbGY7IGluc3RlYWQsIHlvdSB3aWxsIGNhbGwgYSA6Y2xhc3M6YEV2ZW50TG9vcGAgbWV0aG9kCit3aGljaCB3aWxsIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCB0cnkgdG8gaW5pdGlhdGUgdGhlIHVuZGVybHlpbmcKK2NvbW11bmljYXRpb24gY2hhbm5lbCwgY2FsbGluZyB5b3UgYmFjayB3aGVuIGl0IHN1Y2NlZWRzLgorCitPbmNlIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgZXN0YWJsaXNoZWQsIGEgdHJhbnNwb3J0IGlzIGFsd2F5cworcGFpcmVkIHdpdGggYSA6cmVmOmBwcm90b2NvbCA8cHJvdG9jb2w+YCBpbnN0YW5jZS4gIFRoZSBwcm90b2NvbCBjYW4KK3RoZW4gY2FsbCB0aGUgdHJhbnNwb3J0J3MgbWV0aG9kcyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KKworOm1vZDpgYXN5bmNpb2AgY3VycmVudGx5IGltcGxlbWVudHMgdHJhbnNwb3J0cyBmb3IgVENQLCBVRFAsIFNTTCwgYW5kCitzdWJwcm9jZXNzIHBpcGVzLiAgVGhlIG1ldGhvZHMgYXZhaWxhYmxlIG9uIGEgdHJhbnNwb3J0IGRlcGVuZCBvbgordGhlIHRyYW5zcG9ydCdzIGtpbmQuCisKK01ldGhvZHMgY29tbW9uIHRvIGFsbCB0cmFuc3BvcnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBjbG9zZShzZWxmKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0LiAgSWYgdGhlIHRyYW5zcG9ydCBoYXMgYSBidWZmZXIgZm9yIG91dGdvaW5nCisgICBkYXRhLCBidWZmZXJlZCBkYXRhIHdpbGwgYmUgZmx1c2hlZCBhc3luY2hyb25vdXNseS4gIE5vIG1vcmUgZGF0YQorICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgcHJvdG9jb2wncyA6bWV0aDpgY29ubmVjdGlvbl9sb3N0YCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aAorICAgOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKworLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiAgKm5hbWUqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZworICAgdGhlIHBpZWNlIG9mIHRyYW5zcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBnZXQsICpkZWZhdWx0KiBpcyB0aGUKKyAgIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgaW5mb3JtYXRpb24gZG9lc24ndCBleGlzdC4KKworICAgVGhpcyBtZXRob2QgYWxsb3dzIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbnMgdG8gZWFzaWx5IGV4cG9zZQorICAgY2hhbm5lbC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworTWV0aG9kcyBvZiByZWFkYWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBwYXVzZV9yZWFkaW5nKCkKKworICAgUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIHRyYW5zcG9ydC4gIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8KKyAgIHRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QgdW50aWwgbWV0aDpgcmVzdW1lX3JlYWRpbmdgCisgICBpcyBjYWxsZWQuCisKKy4uIG1ldGhvZDo6IHJlc3VtZV9yZWFkaW5nKCkKKworICAgUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLiAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIG1ldGhvZAorICAgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2FpbiBpZiBzb21lIGRhdGEgaXMgYXZhaWxhYmxlIGZvciByZWFkaW5nLgorCitNZXRob2RzIG9mIHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IHdyaXRlKGRhdGEpCisKKyAgIFdyaXRlIHNvbWUgKmRhdGEqIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorCisuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGxpc3Rfb2ZfZGF0YSkKKworICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKyAgIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGVhY2gKKyAgIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmFibGUsIGJ1dCBtYXkgYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworLi4gbWV0aG9kOjogd3JpdGVfZW9mKCkKKworICAgQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgdHJhbnNwb3J0IGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGEuCisgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKworICAgVGhpcyBtZXRob2QgY2FuIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSB0cmFuc3BvcnQKKyAgIChlLmcuIFNTTCkgZG9lc24ndCBzdXBwb3J0IGhhbGYtY2xvc2VzLgorCisuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4KKworLi4gbWV0aG9kOjogYWJvcnQoKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKy4uIG1ldGhvZDo6IHNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9Tm9uZSwgbG93PU5vbmUpCisKKyAgIFNldCB0aGUgKmhpZ2gqLSBhbmQgKmxvdyotd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgIFRoZXNlIHR3byB2YWx1ZXMgY29udHJvbCB3aGVuIGNhbGwgdGhlIHByb3RvY29sJ3MKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBhbmQgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBtZXRob2RzIGFyZSBjYWxsZWQuCisgICBJZiBzcGVjaWZpZWQsIHRoZSBsb3ctd2F0ZXIgbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciAqaGlnaCogbm9yICpsb3cqIGNhbiBiZSBuZWdhdGl2ZS4KKworICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nICpoaWdoKiB0byB6ZXJvIGZvcmNlcyAqbG93KiB0byB6ZXJvIGFzCisgICB3ZWxsLCBhbmQgY2F1c2VzIDptZXRoOmBwYXVzZV93cml0aW5nYCB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nICpsb3cqIHRvIHplcm8gY2F1c2VzCisgICA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgIGNvbmN1cnJlbnRseS4KKworLi4gbWV0aG9kOjogZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorCitNZXRob2RzIG9mIGRhdGFncmFtIHRyYW5zcG9ydHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBzZW5kdG8oZGF0YSwgYWRkcj1Ob25lKQorCisgICBTZW5kIHRoZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHJlbW90ZSBwZWVyIGdpdmVuIGJ5ICphZGRyKiAoYQorICAgdHJhbnNwb3J0LWRlcGVuZGVudCB0YXJnZXQgYWRkcmVzcykuICBJZiAqYWRkciogaXMgOmNvbnN0OmBOb25lYCwgdGhlCisgICBkYXRhIGlzIHNlbnQgdG8gdGhlIHRhcmdldCBhZGRyZXNzIGdpdmVuIG9uIHRyYW5zcG9ydCBjcmVhdGlvbi4KKworICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKy4uIG1ldGhvZDo6IGFib3J0KCkKKworICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCitNZXRob2RzIG9mIHN1YnByb2Nlc3MgdHJhbnNwb3J0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogZ2V0X3BpZCgpCisKKyAgIFJldHVybiB0aGUgc3VicHJvY2VzcyBwcm9jZXNzIGlkIGFzIGFuIGludGVnZXIuCisKKy4uIG1ldGhvZDo6IGdldF9yZXR1cm5jb2RlKCkKKworICAgUmV0dXJuIHRoZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgYXMgYW4gaW50ZWdlciBvciA6Y29uc3Q6YE5vbmVgCisgICBpZiBpdCBoYXNuJ3QgcmV0dXJuZWQsIHNpbWlsYXJseSB0byB0aGUKKyAgIDphdHRyOmBzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGVgIGF0dHJpYnV0ZS4KKworLi4gbWV0aG9kOjogZ2V0X3BpcGVfdHJhbnNwb3J0KGZkKQorCisgICBSZXR1cm4gdGhlIHRyYW5zcG9ydCBmb3IgdGhlIGNvbW11bmljYXRpb24gcGlwZSBjb3JyZXNwb25kb25nIHRvIHRoZQorICAgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgKmZkKi4gIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGEgcmVhZGFibGUgb3IKKyAgIHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnQsIGRlcGVuZGluZyBvbiB0aGUgKmZkKi4gIElmICpmZCogZG9lc24ndAorICAgY29ycmVzcG9uZCB0byBhIHBpcGUgYmVsb25naW5nIHRvIHRoaXMgdHJhbnNwb3J0LCA6Y29uc3Q6YE5vbmVgIGlzCisgICByZXR1cm5lZC4KKworLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICBTZW5kIHRoZSAqc2lnbmFsKiBudW1iZXIgdG8gdGhlIHN1YnByb2Nlc3MsIGFzIGluCisgICA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbGAuCisKKy4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVgLgorICAgVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZC4KKworICAgT24gUE9TSVggc3lzdGVtcywgdGhpcyBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgIE9uIFdpbmRvd3MsIHRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkgaXMgY2FsbGVkIHRvCisgICBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisuLiBtZXRob2Q6OiBraWxsKHNlbGYpCisKKyAgIEtpbGwgdGhlIHN1YnByb2Nlc3MsIGFzIGluIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLmtpbGxgCisKKyAgIE9uIFBPU0lYIHN5c3RlbXMsIHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdLSUxMIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgT24gV2luZG93cywgdGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIDptZXRoOmB0ZXJtaW5hdGVgLgorCisKKy4uIF9jb3JvdXRpbmU6CisKK0Nvcm91dGluZXMKKy0tLS0tLS0tLS0KKworCisuLiBfc3luYzoKKworU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK0EgOmNsYXNzOmBQcm90b2NvbGAgaW1wbGVtZW50aW5nIGFuIGVjaG8gc2VydmVyOjoKKworICAgY2xhc3MgRWNob1NlcnZlcihhc3luY2lvLlByb3RvY29sKToKKworICAgICAgIFRJTUVPVVQgPSA1LjAKKworICAgICAgIGRlZiB0aW1lb3V0KHNlbGYpOgorICAgICAgICAgICBwcmludCgnY29ubmVjdGlvbiB0aW1lb3V0LCBjbG9zaW5nLicpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gbWFkZScpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgICAgIyBzdGFydCA1IHNlY29uZHMgdGltZW91dCB0aW1lcgorICAgICAgICAgICBzZWxmLmhfdGltZW91dCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKS5jYWxsX2xhdGVyKAorICAgICAgICAgICAgICAgc2VsZi5USU1FT1VULCBzZWxmLnRpbWVvdXQpCisKKyAgICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgcHJpbnQoJ2RhdGEgcmVjZWl2ZWQ6ICcsIGRhdGEuZGVjb2RlKCkpCisgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LndyaXRlKGInUmU6ICcgKyBkYXRhKQorCisgICAgICAgICAgICMgcmVzdGFydCB0aW1lb3V0IHRpbWVyCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0LmNhbmNlbCgpCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0ID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLmNhbGxfbGF0ZXIoCisgICAgICAgICAgICAgICBzZWxmLlRJTUVPVVQsIHNlbGYudGltZW91dCkKKworICAgICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gbG9zdDonLCBleGMpCisgICAgICAgICAgIHNlbGYuaF90aW1lb3V0LmNhbmNlbCgpCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAppbmRleCA4ZjQ5NGQwLi42MTA3OWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CkBAIC0xMyw2ICsxMywxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBhc3luY2hyb25vdXMgIHNvY2tldAogc2VydmljZSBjbGllbnRzIGFuZCBzZXJ2ZXJzLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGVkYjM4NzAuLmZiYjdmYzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC02LDkgKzYsMTYgQEAKIAogCiBUaGUgOm1vZDpgYXVkaW9vcGAgbW9kdWxlIGNvbnRhaW5zIHNvbWUgdXNlZnVsIG9wZXJhdGlvbnMgb24gc291bmQgZnJhZ21lbnRzLgotSXQgb3BlcmF0ZXMgb24gc291bmQgZnJhZ21lbnRzIGNvbnNpc3Rpbmcgb2Ygc2lnbmVkIGludGVnZXIgc2FtcGxlcyA4LCAxNiBvciAzMgotYml0cyB3aWRlLCBzdG9yZWQgaW4gYnl0ZXMgb2JqZWN0cy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlIGludGVnZXJzLCB1bmxlc3MKLXNwZWNpZmllZCBvdGhlcndpc2UuCitJdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2LCAyNAorb3IgMzIgYml0cyB3aWRlLCBzdG9yZWQgaW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlCitpbnRlZ2VycywgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyB3YXMgYWRkZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkIGJ5IGFsbCBmdW5jdGlvbnMgaW4gdGhpcworICAgbW9kdWxlLiAgU3RyaW5ncyBubyBtb3JlIHN1cHBvcnRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbnRlbC9EVkkgQURQQ00KQEAgLTM1LDcgKzQyLDcgQEAKIC4uIGZ1bmN0aW9uOjogYWRkKGZyYWdtZW50MSwgZnJhZ21lbnQyLCB3aWR0aCkKIAogICAgUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4KLSAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCBvciBgYDRgYC4gIEJvdGgKKyAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCwgYGAzYGAgb3IgYGA0YGAuICBCb3RoCiAgICBmcmFnbWVudHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgU2FtcGxlcyBhcmUgdHJ1bmNhdGVkIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIApAQCAtNzAsNiArNzcsMTQgQEAKICAgIHNhbXBsZS4gIFNhbXBsZXMgd3JhcCBhcm91bmQgaW4gY2FzZSBvZiBvdmVyZmxvdy4KIAogCisuLiBmdW5jdGlvbjo6IGJ5dGVzd2FwKGZyYWdtZW50LCB3aWR0aCkKKworICAgIkJ5dGVzd2FwIiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4KKyAgIENvbnZlcnRzIGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY3Jvc3MoZnJhZ21lbnQsIHdpZHRoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgpAQCAtMTMzLDE5ICsxNDgsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBsaW4ybGluKGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpCiAKLSAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSBhbmQgNC1ieXRlIGZvcm1hdHMuCisgICBDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiBhbmQgMzIgYml0IHNhbXBsZXMgYXJlCisgICAgICBJbiBzb21lIGF1ZGlvIGZvcm1hdHMsIHN1Y2ggYXMgLldBViBmaWxlcywgMTYsIDI0IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKICAgICAgIHNpZ25lZCwgYnV0IDggYml0IHNhbXBsZXMgYXJlIHVuc2lnbmVkLiAgU28gd2hlbiBjb252ZXJ0aW5nIHRvIDggYml0IHdpZGUKICAgICAgIHNhbXBsZXMgZm9yIHRoZXNlIGZvcm1hdHMsIHlvdSBuZWVkIHRvIGFsc28gYWRkIDEyOCB0byB0aGUgcmVzdWx0OjoKIAogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AubGluMmxpbihmcmFtZXMsIG9sZF93aWR0aCwgMSkKICAgICAgICAgIG5ld19mcmFtZXMgPSBhdWRpb29wLmJpYXMobmV3X2ZyYW1lcywgMSwgMTI4KQogCi0gICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiBvciAzMgotICAgICAgYml0IHdpZHRoIHNhbXBsZXMuCisgICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiwgMjQKKyAgICAgIG9yIDMyIGJpdCB3aWR0aCBzYW1wbGVzLgogCiAKIC4uIGZ1bmN0aW9uOjogbGluMnVsYXcoZnJhZ21lbnQsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggM2IyM2U3OS4uYTdlZWQwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLgorCiBUaGUgbW9kZXJuIGludGVyZmFjZSBwcm92aWRlczoKIAogLi4gZnVuY3Rpb246OiBiNjRlbmNvZGUocywgYWx0Y2hhcnM9Tm9uZSkKQEAgLTEyOCw2ICsxMzIsNzYgQEAKICAgIHN0cmluZy4KIAogCisuLiBmdW5jdGlvbjo6IGE4NWVuY29kZShzLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpCisKKyAgIEVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICpzKiBpcyB0aGUgc3RyaW5nIHRvIGVuY29kZS4gVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgIGluc3RlYWQgb2YgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApIGFzIHN1cHBvcnRlZCBieSAnYnRvYScuIFRoaXMKKyAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqd3JhcGNvbCogY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcbicpCisgICBjaGFyYWN0ZXJzIGFkZGVkIHRvIGl0LiBJZiB0aGlzIGlzIG5vbi16ZXJvLCBlYWNoIG91dHB1dCBsaW5lIHdpbGwgYmUKKyAgIGF0IG1vc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgKnBhZCogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDQKKyAgIGJlZm9yZSBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBgYGJ0b2FgYCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcGFkcy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggYGA8fmBgCisgICBhbmQgYGB+PmBgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBhODVkZWNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFx0XG5cclx2JykKKworICAgRGVjb2RlIGFuIEFzY2lpODUgZW5jb2RlZCBieXRlIHN0cmluZy4KKworICAgKnMqIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlCisgICBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluIEFkb2JlIEFzY2lpODUgZm9ybWF0CisgICAoaS5lLiBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAqaWdub3JlY2hhcnMqIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBpZ25vcmUKKyAgIGZyb20gdGhlIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkKKyAgIGRlZmF1bHQgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVlbmNvZGUocywgcGFkPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBiYXNlODUsIGFzIHVzZWQgaW4gZS5nLiBnaXQtc3R5bGUgYmluYXJ5CisgICBkaWZmcy4KKworICAgSWYgKnBhZCogaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcXDAiIHNvIGl0cyBsZW5ndGggaXMgYQorICAgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVkZWNvZGUoYikKKworICAgRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgc3RyaW5nLiAgUGFkZGluZyBpcyBpbXBsaWNpdGx5IHJlbW92ZWQsIGlmCisgICBuZWNlc3NhcnkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG5vdGU6OgorICAgQm90aCBCYXNlODUgYW5kIEFzY2lpODUgaGF2ZSBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDUgdG8gNCAoNSBCYXNlODUgb3IKKyAgIEFzY2lpODUgY2hhcmFjdGVycyBjYW4gZW5jb2RlIDQgYmluYXJ5IGJ5dGVzKSwgd2hpbGUgdGhlIGJldHRlci1rbm93bgorICAgQmFzZTY0IGhhcyBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDYgdG8gNC4gIFRoZXkgYXJlIHRoZXJlZm9yZSBtb3JlCisgICBlZmZpY2llbnQgd2hlbiBzcGFjZSBleHBlbnNpdmUuICBUaGV5IGRpZmZlciBieSBkZXRhaWxzIHN1Y2ggYXMgdGhlCisgICBjaGFyYWN0ZXIgbWFwIHVzZWQgZm9yIGVuY29kaW5nLgorCisKIFRoZSBsZWdhY3kgaW50ZXJmYWNlOgogCiAuLiBmdW5jdGlvbjo6IGRlY29kZShpbnB1dCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnoyLnJzdCBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKaW5kZXggOTVhNWFiYi4uOTAyN2EzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnoyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iejIucnN0CkBAIC0zNyw4ICszNyw4IEBACiAgICBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAndydgYCwgYGAnd2InYGAsCi0gICBgYCdhJ2BgLCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCd3dCdgYCwgb3IgYGAnYXQnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAneCdgYCwgYGAneGInYGAsIGBgJ2EnYGAgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ3d0J2BgLCBgYCd4dCdgYCwgb3IgYGAnYXQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDEgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBCWjJGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTU0LDYgKzU0LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiAuLiBjbGFzczo6IEJaMkZpbGUoZmlsZW5hbWUsIG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KQogCkBAIC02NCw4ICs2Nyw5IEBACiAgICBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIGBgJ3InYGAgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCBgYCd3J2BgIGZvcgotICAgb3ZlcndyaXRpbmcsIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcwotICAgYGAncmInYGAsIGBgJ3diJ2BgLCBhbmQgYGAnYWInYGAgcmVzcGVjdGl2ZWx5LgorICAgb3ZlcndyaXRpbmcsIGBgJ3gnYGAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiwgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZQorICAgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyBgYCdyYidgYCwgYGAnd2InYGAsIGBgJ3hiJ2BgIGFuZCBgYCdhYidgYAorICAgcmVzcGVjdGl2ZWx5LgogCiAgICBJZiAqZmlsZW5hbWUqIGlzIGEgZmlsZSBvYmplY3QgKHJhdGhlciB0aGFuIGFuIGFjdHVhbCBmaWxlIG5hbWUpLCBhIG1vZGUgb2YKICAgIGBgJ3cnYGAgZG9lcyBub3QgdHJ1bmNhdGUgdGhlIGZpbGUsIGFuZCBpcyBpbnN0ZWFkIGVxdWl2YWxlbnQgdG8gYGAnYSdgYC4KQEAgLTEwOCw2ICsxMTIsOSBAQAogICAgICAgVGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZSB3YXMgYWRkZWQsIGFsb25nIHdpdGggc3VwcG9ydCBmb3IgcmVhZGluZwogICAgICAgbXVsdGktc3RyZWFtIGZpbGVzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogSW5jcmVtZW50YWwgKGRlKWNvbXByZXNzaW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGUucnN0IGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKaW5kZXggZTg2OTAwNC4uNWI1ZDdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdChiYW5uZXI9Tm9uZSkKIAotICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsIGJhbm5lciBhcmd1bWVudAorICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsICpiYW5uZXIqIGFyZ3VtZW50CiAgICBzcGVjaWZ5IHRoZSBiYW5uZXIgdG8gcHJpbnQgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbjsgYnkgZGVmYXVsdCBpdCBwcmludHMgYQogICAgYmFubmVyIHNpbWlsYXIgdG8gdGhlIG9uZSBwcmludGVkIGJ5IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIsIGZvbGxvd2VkCiAgICBieSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY29uc29sZSBvYmplY3QgaW4gcGFyZW50aGVzZXMgKHNvIGFzIG5vdCB0byBjb25mdXNlCiAgICB0aGlzIHdpdGggdGhlIHJlYWwgaW50ZXJwcmV0ZXIgLS0gc2luY2UgaXQncyBzbyBjbG9zZSEpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55IGJhbm5lciwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuCisKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLnB1c2gobGluZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggMDA5YWUyNi4uODQzZGUyNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC0zNjUsMTggKzM2NSwyMyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpwZXA6YDM4M2AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIGEgc2luZ2xlIGNvZGVjOgorSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIFVuaWNvZGUgZW5jb2RpbmcKK3NjaGVtZXM6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXxgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCAgIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAotfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlcyBpbiBVVEYtOC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3xgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCwgdXRmLTE2LCB1dGYtMzIsIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0xNi1iZSwgdXRmLTE2LWxlLCAgfCBjb2RlcyBpbiBhbGwgdGhlIFVuaWNvZGUgZW5jb2Rpbmcgc2NoZW1lcy58Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTMyLWJlLCB1dGYtMzItbGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgIFRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgYW5kIGBgJ3N1cnJvZ2F0ZXBhc3MnYGAgZXJyb3IgaGFuZGxlcnMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgorCiBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEgOm1ldGg6YHJlZ2lzdGVyX2Vycm9yYC4KIAogCkBAIC0xMDIyLDYgKzEwMjcsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMDI2ICAgICAgICAgIHwgaWJtMTAyNiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AxMTI1ICAgICAgICAgIHwgMTEyNSwgaWJtMTEyNSwgY3A4NjZ1LCBydXNjaWkgIHwgVWtyYWluaWFuICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMTQwICAgICAgICAgIHwgaWJtMTE0MCAgICAgICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMjUwICAgICAgICAgIHwgd2luZG93cy0xMjUwICAgICAgICAgICAgICAgICAgIHwgQ2VudHJhbCBhbmQgRWFzdGVybiBFdXJvcGUgICAgIHwKQEAgLTExNjcsNiArMTE3NiwxMiBAQAogfCB1dGZfOF9zaWcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUgcG9pbnRzCisgICAoVStEODAwLS1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyXCogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4KKworCiBQeXRob24gU3BlY2lmaWMgRW5jb2RpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExNzcsNiArMTE5Miw5IEBACiBhcmJpdHJhcnkgZGF0YSB0cmFuc2Zvcm1zIHJhdGhlciB0aGFuIGp1c3QgdGV4dCBlbmNvZGluZ3MpLiAgRm9yIGFzeW1tZXRyaWMKIGNvZGVjcywgdGhlIHN0YXRlZCBwdXJwb3NlIGRlc2NyaWJlcyB0aGUgZW5jb2RpbmcgZGlyZWN0aW9uLgogCitUZXh0IEVuY29kaW5ncworXl5eXl5eXl5eXl5eXl4KKwogVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBieXRlc2AgZW5jb2RpbmcgYW5kCiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHRvIDpjbGFzczpgc3RyYCBkZWNvZGluZywgc2ltaWxhciB0byB0aGUgVW5pY29kZSB0ZXh0CiBlbmNvZGluZ3MuCkBAIC0xMjIzLDU3ICsxMjQxLDgzIEBACiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAuLiBkZXByZWNhdGVkOjogMy4zICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBieXRlc2AKLW1hcHBpbmdzLgorLi4gX2JpbmFyeS10cmFuc2Zvcm1zOgorCitCaW5hcnkgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSBiaW5hcnkgdHJhbnNmb3JtczogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YAordG8gOmNsYXNzOmBieXRlc2AgbWFwcGluZ3MuCiAKIAotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfEx8CisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyL2RlY29kZXIgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBiYXNlNjQuYjY0ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYGAnXG4nYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYnoyX2NvZGVjICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AsICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8IDptZXRoOmBiejIuZGVjb21wcmVzc2AgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaGV4X2NvZGVjICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBxdW9wcmlfY29kZWMgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AsIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1dV9jb2RlYyAgICAgICAgICAgICB8IENvbnZlcnQgdGhlIG9wZXJhbmQgdXNpbmcgfCA6bWV0aDpgdXUuZW5jb2RlYCwgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB6bGliX2NvZGVjICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgemxpYi5jb21wcmVzc2AsICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgQWxpYXNlcyAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyIC8gZGVjb2RlciAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IGJhc2U2NCwgYmFzZV82NCAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgICAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgICAgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZXMgYSB0cmFpbGluZyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgYXMgaW5wdXQgZm9yIGVuY29kaW5nIGFuZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgICAgfCBiejIgICAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgIC8gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgICAgfCBoZXggICAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZW5jb2RlYCAvICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgcXVvcHJpLCAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AgL3wKK3wgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWRwcmludGFibGUsIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICAgICB8IDptZXRoOmBxdW9wcmkuZGVjb2Rlc3RyaW5nYCAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZF9wcmludGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdXVfY29kZWMgICAgICAgICAgICAgfCB1dSAgICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgemxpYl9jb2RlYyAgICAgICAgICAgfCB6aXAsIHpsaWIgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gWyNiNjRdIFJhdGhlciB0aGFuIGFjY2VwdGluZyBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwKLSAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhY2NlcHRzIG9ubHkgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IKLSAgIGVuY29kaW5nIGFuZCBvbmx5IDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGFuZCBBU0NJSS1vbmx5Ci0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvciBkZWNvZGluZwotCi0KLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KLQotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IHJvdF8xMyAgICAgICAgICAgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAotfCAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisuLiBbI2I2NF0gSW4gYWRkaXRpb24gdG8gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwKKyAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhbHNvIGFjY2VwdHMgQVNDSUktb25seSBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvcgorICAgZGVjb2RpbmcKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBieXRlcy10by1ieXRlcyBhbmQgc3RyLXRvLXN0ciBjb2RlY3MuCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYWxpYXNlcyBmb3IgdGhlIGJpbmFyeSB0cmFuc2Zvcm1zLgorCisKKy4uIF90ZXh0LXRyYW5zZm9ybXM6CisKK1RleHQgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWMgcHJvdmlkZXMgYSB0ZXh0IHRyYW5zZm9ybTogYSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgCittYXBwaW5nLgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfGx8THwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICB8IEFsaWFzZXMgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCByb3RfMTMgICAgICAgICAgICAgfCByb3QxMyAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBgYHJvdF8xM2BgIHRleHQgdHJhbnNmb3JtLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90MTNgYCBhbGlhcy4KIAogCiA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgLS0tIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IDRiMjE5MzIuLjM1NmY0NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMTUsNyArMTUsNyBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9hYmMucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNzY0NWYyYS4uODBjNmM3NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtNzYsMTQgKzc2LDE5IEBACiAgICAgICAgIGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB3aGljaCBtYXBwaW5ncyBhcmUgc2VhcmNoZWQuICBUaGUgbGlzdCBzaG91bGQKICAgICAgICAgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hcHBpbmcuCiAKLSAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQoKQorICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZChtPU5vbmUpCiAKLSAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IDpjbGFzczpgZGljdGAgZm9sbG93ZWQgYnkKLSAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgQSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgIGlzCi0gICAgICAgIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgbWFwIGZvbGxvd2VkIGJ5CisgICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIElmIGBgbWBgIGlzIHNwZWNpZmllZCwKKyAgICAgICAgaXQgYmVjb21lcyB0aGUgbmV3IG1hcCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YgbWFwcGluZ3M7IGlmIG5vdAorICAgICAgICBzcGVjaWZpZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZCwgc28gdGhhdCBhIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAKKyAgICAgICAgaXMgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCiAgICAgICAgIGNyZWF0aW5nIHN1YmNvbnRleHRzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBhbHRlcmluZyB2YWx1ZXMgaW4gYW55CiAgICAgICAgIG9mIHRoZSBwYXJlbnQgbWFwcGluZ3MuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIG9wdGlvbmFsIGBgbWBgIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKICAgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnRzCiAKICAgICAgICAgUHJvcGVydHkgcmV0dXJuaW5nIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtYXBzIGluCkBAIC0zNjksMTAgKzM3NCw2IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKLSAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgotCiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCkBAIC05MTUsMTEgKzkxNiw2IEBACiAgICAgPj4+IGNsYXNzIFN0YXR1czoKICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAotLi4gc2VlYWxzbzo6Ci0KLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODIsMTAgKzk3OCw2IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjBkZTI4MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIwLDcgKzIwLDYgQEAKICAgIHN1YnByb2Nlc3MucnN0CiAgICBzY2hlZC5yc3QKICAgIHF1ZXVlLnJzdAotICAgc2VsZWN0LnJzdAogCiAKIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnQgbW9kdWxlcyBmb3Igc29tZSBvZiB0aGUgYWJvdmUgc2VydmljZXM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCBjMmY5MmIzLi45MzUzOGU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTE2NCw2ICsxNjQsOSBAQAogYWxsb3dzIGl0IHRvIHNpZGUtc3RlcCB0aGUgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCBidXQgYWxzbyBtZWFucyB0aGF0CiBvbmx5IHBpY2tsYWJsZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZCBhbmQgcmV0dXJuZWQuCiAKK1RoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBieSB3b3JrZXIgc3VicHJvY2Vzc2VzLiBUaGlzIG1lYW5zCit0aGF0IDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCBub3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKIENhbGxpbmcgOmNsYXNzOmBFeGVjdXRvcmAgb3IgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgZnJvbSBhIGNhbGxhYmxlIHN1Ym1pdHRlZAogdG8gYSA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CmluZGV4IGZiYTQ4ZjQuLjgyZWZkMGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CkBAIC05NSw2ICs5NSw4MyBAQAogICAgYGBwYWdlLmNsb3NlKClgYCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgaXMgZXhpdGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogc3VwcHJlc3MoKmV4Y2VwdGlvbnMpCisKKyAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHN1cHByZXNzZXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9ucworICAgaWYgdGhleSBvY2N1ciBpbiB0aGUgYm9keSBvZiBhIHdpdGggc3RhdGVtZW50IGFuZCB0aGVuIHJlc3VtZXMgZXhlY3V0aW9uCisgICB3aXRoIHRoZSBmaXJzdCBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICBBcyB3aXRoIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBjb21wbGV0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucywgdGhpcworICAgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkIG9ubHkgdG8gY292ZXIgdmVyeSBzcGVjaWZpYyBlcnJvcnMgd2hlcmUKKyAgIHNpbGVudGx5IGNvbnRpbnVpbmcgd2l0aCBwcm9ncmFtIGV4ZWN1dGlvbiBpcyBrbm93biB0byBiZSB0aGUgcmlnaHQKKyAgIHRoaW5nIHRvIGRvLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHN1cHByZXNzCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorCisgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZW90aGVyZmlsZS50bXAnKQorCisgICBUaGlzIGNvZGUgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZWZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgIFRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIDpyZWY6YHJlZW50cmFudCA8cmVlbnRyYW50LWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHJlZGlyZWN0X3N0ZG91dChuZXdfdGFyZ2V0KQorCisgICBDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIDpkYXRhOmBzeXMuc3Rkb3V0YCB0bworICAgYW5vdGhlciBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QuCisKKyAgIFRoaXMgdG9vbCBhZGRzIGZsZXhpYmlsaXR5IHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBvciBjbGFzc2VzIHdob3NlIG91dHB1dAorICAgaXMgaGFyZHdpcmVkIHRvIHN0ZG91dC4KKworICAgRm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgOmZ1bmM6YGhlbHBgIG5vcm1hbGx5IGlzIHNlbnQgdG8gKnN5cy5zdGRvdXQqLgorICAgWW91IGNhbiBjYXB0dXJlIHRoYXQgb3V0cHV0IGluIGEgc3RyaW5nIGJ5IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gYQorICAgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0OjoKKworICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIGhlbHAocG93KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gYSBmaWxlIG9uIGRpc2ssIHJlZGlyZWN0IHRoZSBvdXRwdXQKKyAgIHRvIGEgcmVndWxhciBmaWxlOjoKKworICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gKnN5cy5zdGRlcnIqOjoKKworICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAocG93KQorCisgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzaWRlIGVmZmVjdCBvbiA6ZGF0YTpgc3lzLnN0ZG91dGAgbWVhbnMgdGhhdCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIGFuZCBtb3N0IHRocmVhZGVkCisgICBhcHBsaWNhdGlvbnMuIEl0IGFsc28gaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3V0cHV0IG9mIHN1YnByb2Nlc3Nlcy4KKyAgIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIGEgdXNlZnVsIGFwcHJvYWNoIGZvciBtYW55IHV0aWxpdHkgc2NyaXB0cy4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmV1c2FibGUgYnV0IG5vdCByZWVudHJhbnQgPHJldXNhYmxlLWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IENvbnRleHREZWNvcmF0b3IoKQogCiAgICBBIGJhc2UgY2xhc3MgdGhhdCBlbmFibGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvci4KQEAgLTUyMCwzICs1OTcsMTUzIEBACiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCisuLiBfc2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtczoKKworU2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjb250ZXh0IG1hbmFnZXJzIGFyZSB3cml0dGVuIGluIGEgd2F5IHRoYXQgbWVhbnMgdGhleSBjYW4gb25seSBiZQordXNlZCBlZmZlY3RpdmVseSBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgb25jZS4gVGhlc2Ugc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycyBtdXN0IGJlIGNyZWF0ZWQgYWZyZXNoIGVhY2ggdGltZSB0aGV5J3JlIHVzZWQgLQorYXR0ZW1wdGluZyB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24gb3IKK290aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkuCisKK1RoaXMgY29tbW9uIGxpbWl0YXRpb24gbWVhbnMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWR2aXNhYmxlIHRvIGNyZWF0ZQorY29udGV4dCBtYW5hZ2VycyBkaXJlY3RseSBpbiB0aGUgaGVhZGVyIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50Cit3aGVyZSB0aGV5IGFyZSB1c2VkIChhcyBzaG93biBpbiBhbGwgb2YgdGhlIHVzYWdlIGV4YW1wbGVzIGFib3ZlKS4KKworRmlsZXMgYXJlIGFuIGV4YW1wbGUgb2YgZWZmZWN0aXZlbHkgc2luZ2xlIHVzZSBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZQordGhlIGZpcnN0IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2lsbCBjbG9zZSB0aGUgZmlsZSwgcHJldmVudGluZyBhbnkKK2Z1cnRoZXIgSU8gb3BlcmF0aW9ucyB1c2luZyB0aGF0IGZpbGUgb2JqZWN0LgorCitDb250ZXh0IG1hbmFnZXJzIGNyZWF0ZWQgdXNpbmcgOmZ1bmM6YGNvbnRleHRtYW5hZ2VyYCBhcmUgYWxzbyBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzLCBhbmQgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZmFpbGluZwordG8geWllbGQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWU6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKyAgICA+Pj4gQGNvbnRleHRtYW5hZ2VyCisgICAgLi4uIGRlZiBzaW5nbGV1c2UoKToKKyAgICAuLi4gICAgIHByaW50KCJCZWZvcmUiKQorICAgIC4uLiAgICAgeWllbGQKKyAgICAuLi4gICAgIHByaW50KCJBZnRlciIpCisgICAgLi4uCisgICAgPj4+IGNtID0gc2luZ2xldXNlKCkKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICBCZWZvcmUKKyAgICBBZnRlcgorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICBwYXNzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBkaWRuJ3QgeWllbGQKKworCisuLiBfcmVlbnRyYW50LWNtczoKKworUmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vcmUgc29waGlzdGljYXRlZCBjb250ZXh0IG1hbmFnZXJzIG1heSBiZSAicmVlbnRyYW50Ii4gVGhlc2UgY29udGV4dAorbWFuYWdlcnMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgaW4gbXVsdGlwbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMsCitidXQgbWF5IGFsc28gYmUgdXNlZCAqaW5zaWRlKiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdGhhdCBpcyBhbHJlYWR5Cit1c2luZyB0aGUgc2FtZSBjb250ZXh0IG1hbmFnZXIuCisKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlciwgYXMgYXJlCis6ZnVuYzpgc3VwcHJlc3NgIGFuZCA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YC4gSGVyZSdzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZgorcmVlbnRyYW50IHVzZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gc3RyZWFtID0gU3RyaW5nSU8oKQorICAgID4+PiB3cml0ZV90b19zdHJlYW0gPSByZWRpcmVjdF9zdGRvdXQoc3RyZWFtKQorICAgID4+PiB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgIHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQiKQorICAgIC4uLiAgICAgd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICAgICAgcHJpbnQoIlRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0iKQorICAgIC4uLgorICAgID4+PiBwcmludCgiVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dCIpCisgICAgVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dAorICAgID4+PiBwcmludChzdHJlYW0uZ2V0dmFsdWUoKSkKKyAgICBUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQKKyAgICBUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtCisKK1JlYWwgd29ybGQgZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gaW52b2x2ZSBtdWx0aXBsZQorZnVuY3Rpb25zIGNhbGxpbmcgZWFjaCBvdGhlciBhbmQgaGVuY2UgYmUgZmFyIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzCitleGFtcGxlLgorCitOb3RlIGFsc28gdGhhdCBiZWluZyByZWVudHJhbnQgaXMgKm5vdCogdGhlIHNhbWUgdGhpbmcgYXMgYmVpbmcgdGhyZWFkIHNhZmUuCis6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YCwgZm9yIGV4YW1wbGUsIGlzIGRlZmluaXRlbHkgbm90IHRocmVhZCBzYWZlLCBhcyBpdAorbWFrZXMgYSBnbG9iYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBzeXN0ZW0gc3RhdGUgYnkgYmluZGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAKK3RvIGEgZGlmZmVyZW50IHN0cmVhbS4KKworCisuLiBfcmV1c2FibGUtY21zOgorCitSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Rpc3RpbmN0IGZyb20gYm90aCBzaW5nbGUgdXNlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgInJldXNhYmxlIgorY29udGV4dCBtYW5hZ2VycyAob3IsIHRvIGJlIGNvbXBsZXRlbHkgZXhwbGljaXQsICJyZXVzYWJsZSwgYnV0IG5vdAorcmVlbnRyYW50IiBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxzbworcmV1c2FibGUpLiBUaGVzZSBjb250ZXh0IG1hbmFnZXJzIHN1cHBvcnQgYmVpbmcgdXNlZCBtdWx0aXBsZSB0aW1lcywgYnV0Cit3aWxsIGZhaWwgKG9yIG90aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkpIGlmIHRoZSBzcGVjaWZpYyBjb250ZXh0IG1hbmFnZXIKK2luc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQuCisKKzpjbGFzczpgdGhyZWFkaW5nLkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsCitjb250ZXh0IG1hbmFnZXIgKGZvciBhIHJlZW50cmFudCBsb2NrLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaW5zdGVhZCkuCisKK0Fub3RoZXIgZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwgY29udGV4dCBtYW5hZ2VyIGlzCis6Y2xhc3M6YEV4aXRTdGFja2AsIGFzIGl0IGludm9rZXMgKmFsbCogY3VycmVudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCit3aGVuIGxlYXZpbmcgYW55IHdpdGggc3RhdGVtZW50LCByZWdhcmRsZXNzIG9mIHdoZXJlIHRob3NlIGNhbGxiYWNrcword2VyZSBhZGRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gc3RhY2sgPSBFeGl0U3RhY2soKQorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgZmlyc3QgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgc2Vjb25kIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggc3RhY2s6CisgICAgLi4uICAgICAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisKK0FzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZXhhbXBsZSBzaG93cywgcmV1c2luZyBhIHNpbmdsZSBzdGFjayBvYmplY3QgYWNyb3NzCittdWx0aXBsZSB3aXRoIHN0YXRlbWVudHMgd29ya3MgY29ycmVjdGx5LCBidXQgYXR0ZW1wdGluZyB0byBuZXN0IHRoZW0KK3dpbGwgY2F1c2UgdGhlIHN0YWNrIHRvIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IHdpdGgKK3N0YXRlbWVudCwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZGVzaXJhYmxlIGJlaGF2aW91ci4KKworVXNpbmcgc2VwYXJhdGUgOmNsYXNzOmBFeGl0U3RhY2tgIGluc3RhbmNlcyBpbnN0ZWFkIG9mIHJldXNpbmcgYSBzaW5nbGUKK2luc3RhbmNlIGF2b2lkcyB0aGF0IHByb2JsZW06OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHdpdGggRXhpdFN0YWNrKCkgYXMgb3V0ZXJfc3RhY2s6CisgICAgLi4uICAgICBvdXRlcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBpbm5lcl9zdGFjazoKKyAgICAuLi4gICAgICAgICBpbm5lcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CmluZGV4IGQwMzgyZTAuLjQ4YWYwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdApAQCAtMzAsMyArMzAsNCBAQAogICAgY29weS5yc3QKICAgIHBwcmludC5yc3QKICAgIHJlcHJsaWIucnN0CisgICBlbnVtLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDA2NWU4NTAuLmU0ZjFlYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTE3MCwxMCArMTcwLDEyIEBACiAgICAqIGBgMCA8PSBzZWNvbmRzIDwgMzYwMCoyNGBgICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gb25lIGRheSkKICAgICogYGAtOTk5OTk5OTk5IDw9IGRheXMgPD0gOTk5OTk5OTk5YGAKIAotICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywgdGhlIGZyYWN0aW9uYWwKLSAgIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZSBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQKLSAgIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlIGNvbnZlcnNpb24gYW5kCi0gICBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzIGxvc3QpLgorICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywKKyAgIHRoZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZQorICAgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4gdGllYnJlYWtlci4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZQorICAgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcworICAgbG9zdCkuCiAKICAgIElmIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIGRheXMgbGllcyBvdXRzaWRlIHRoZSBpbmRpY2F0ZWQgcmFuZ2UsCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYm0ucnN0IGIvRG9jL2xpYnJhcnkvZGJtLnJzdAppbmRleCA4MWEwNWM3Li5mNTQ5NmQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RibS5yc3QKQEAgLTczLDMzICs3MywzOSBAQAogc3RyaW5ncyBhcmUgdXNlZCB0aGV5IGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyBiZWZvcmUKIGJlaW5nIHN0b3JlZC4KIAorVGhlc2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgYmVpbmcgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHdoaWNoCit3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlbSB3aGVuIGRvbmUuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBZGRlZCBuYXRpdmUgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgb2JqZWN0cworICAgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYC4KKwogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJlY29yZHMgc29tZSBob3N0bmFtZXMgYW5kIGEgY29ycmVzcG9uZGluZyB0aXRsZSwgIGFuZAogdGhlbiBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2U6OgogCiAgICBpbXBvcnQgZGJtCiAKICAgICMgT3BlbiBkYXRhYmFzZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LgotICAgZGIgPSBkYm0ub3BlbignY2FjaGUnLCAnYycpCisgICB3aXRoIGRibS5vcGVuKCdjYWNoZScsICdjJykgYXMgZGI6CiAKLSAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCi0gICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJwotICAgZGJbJ3d3dy5weXRob24ub3JnJ10gPSAnUHl0aG9uIFdlYnNpdGUnCi0gICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBSZWNvcmQgc29tZSB2YWx1ZXMKKyAgICAgICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJworICAgICAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJworICAgICAgIGRiWyd3d3cuY25uLmNvbSddID0gJ0NhYmxlIE5ld3MgTmV0d29yaycKIAotICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgotICAgYXNzZXJ0IGRiW2Ind3d3LnB5dGhvbi5vcmcnXSA9PSBiJ1B5dGhvbiBXZWJzaXRlJwotICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCi0gICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgorICAgICAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKKyAgICAgICAjIE5vdGljZSBob3cgdGhlIHZhbHVlIGlzIG5vdyBpbiBieXRlcy4KKyAgICAgICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgT2Z0ZW4tdXNlZCBtZXRob2RzIG9mIHRoZSBkaWN0IGludGVyZmFjZSB3b3JrIHRvby4KLSAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKKyAgICAgICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCisgICAgICAgcHJpbnQoZGIuZ2V0KCdweXRob24ub3JnJywgYidub3QgcHJlc2VudCcpKQogCi0gICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAotICAgIyBsaWtlbHkgYSBUeXBlRXJyb3IpLgotICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKKyAgICAgICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAorICAgICAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KKyAgICAgICBkYlsnd3d3LnlhaG9vLmNvbSddID0gNAogCi0gICAjIENsb3NlIHdoZW4gZG9uZS4KLSAgIGRiLmNsb3NlKCkKKyAgICMgZGIgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiBsZWF2aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlYnVnLnJzdCBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdAppbmRleCBjNjlmYjFjLi44OGEyZmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVidWcucnN0CkBAIC0xNSwzICsxNSw0IEBACiAgICBwcm9maWxlLnJzdAogICAgdGltZWl0LnJzdAogICAgdHJhY2UucnN0CisgICB0cmFjZW1hbGxvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdCBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAppbmRleCAyMzY4NzY5Li4wNmU3MDQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CkBAIC0yMyw0ICsyMywzIEBACiAgICB1bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAogICAgMnRvMy5yc3QKICAgIHRlc3QucnN0Ci0gICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZWM3MTEyZC4uODI5M2Q0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAgICBkZWYgbXlmdW5jKGFsaXN0KToKICAgICAgICByZXR1cm4gbGVuKGFsaXN0KQogCi10aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBkaXNhc3NlbWJseSBvZiA6ZnVuYzpgbXlmdW5jYDo6Cit0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGlzYXNzZW1ibHkgb2YKKzpmdW5jOmBteWZ1bmNgOjoKIAogICAgPj4+IGRpcy5kaXMobXlmdW5jKQogICAgICAyICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChsZW4pCkBAIC0zNiw4ICszNyw3NSBAQAogCiAoVGhlICIyIiBpcyBhIGxpbmUgbnVtYmVyKS4KIAotVGhlIDptb2Q6YGRpc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50czoKK0J5dGVjb2RlIGFuYWx5c2lzCistLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgYnl0ZWNvZGUgYW5hbHlzaXMgQVBJIGFsbG93cyBwaWVjZXMgb2YgUHl0aG9uIGNvZGUgdG8gYmUgd3JhcHBlZCBpbiBhCis6Y2xhc3M6YEJ5dGVjb2RlYCBvYmplY3QgdGhhdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZQorY29tcGlsZWQgY29kZS4KKworLi4gY2xhc3M6OiBCeXRlY29kZSh4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YKKyAgIHNvdXJjZSBjb2RlLCBvciBhIGNvZGUgb2JqZWN0IChhcyByZXR1cm5lZCBieSA6ZnVuYzpgY29tcGlsZWApLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdywKKyAgIG1vc3Qgbm90YWJseSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AsIGFzIGl0ZXJhdGluZyBvdmVyIGEKKyAgIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIHlpZWxkcyB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhcworICAgOmNsYXNzOmBJbnN0cnVjdGlvbmAgaW5zdGFuY2VzLgorCisgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgT3RoZXJ3aXNlLCB0aGUgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbQorICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKworICAgSWYgKmN1cnJlbnRfb2Zmc2V0KiBpcyBub3QgTm9uZSwgaXQgcmVmZXJzIHRvIGFuIGluc3RydWN0aW9uIG9mZnNldAorICAgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLiBTZXR0aW5nIHRoaXMgbWVhbnMgOm1ldGg6YGRpc2Agd2lsbCBkaXNwbGF5CisgICBhICJjdXJyZW50IGluc3RydWN0aW9uIiBtYXJrZXIgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIG9wY29kZS4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBmcm9tX3RyYWNlYmFjayh0YikKKworICAgICAgQ29uc3RydWN0IGEgOmNsYXNzOmBCeXRlY29kZWAgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrLAorICAgICAgc2V0dGluZyAqY3VycmVudF9vZmZzZXQqIHRvIHRoZSBpbnN0cnVjdGlvbiByZXNwb25zaWJsZSBmb3IgdGhlCisgICAgICBleGNlcHRpb24uCisKKyAgIC4uIGRhdGE6OiBjb2Rlb2JqCisKKyAgICAgIFRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKworICAgLi4gZGF0YTo6IGZpcnN0X2xpbmUKKworICAgICAgVGhlIGZpcnN0IHNvdXJjZSBsaW5lIG9mIHRoZSBjb2RlIG9iamVjdCAoaWYgYXZhaWxhYmxlKQorCisgICAuLiBtZXRob2Q6OiBkaXMoKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgdmlldyBvZiB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyAodGhlIHNhbWUgYXMKKyAgICAgIHByaW50ZWQgYnkgOmZ1bmM6YGRpc2AsIGJ1dCByZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nKS4KKworICAgLi4gbWV0aG9kOjogaW5mbygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCBtdWx0aS1saW5lIHN0cmluZyB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgY29kZSBvYmplY3QsIGxpa2UgOmZ1bmM6YGNvZGVfaW5mb2AuCisKK0V4YW1wbGU6OgorCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKG15ZnVuYykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIC4uLgorICAgIExPQURfR0xPQkFMCisgICAgTE9BRF9GQVNUCisgICAgQ0FMTF9GVU5DVElPTgorICAgIFJFVFVSTl9WQUxVRQorCisKK0FuYWx5c2lzIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhbmFseXNpcyBmdW5jdGlvbnMgdGhhdAorY29udmVydCB0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LiBUaGV5IGNhbiBiZSB1c2VmdWwgaWYKK29ubHkgYSBzaW5nbGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgc28gdGhlIGludGVybWVkaWF0ZSBhbmFseXNpcworb2JqZWN0IGlzbid0IHVzZWZ1bDoKIAogLi4gZnVuY3Rpb246OiBjb2RlX2luZm8oeCkKIApAQCAtNTEsMTcgKzExOSwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKy4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgsICosIGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAotICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byAqZmlsZSogKG9yIGBgc3lzLnN0ZG91dGBgIGlmICpmaWxlKgorICAgaXMgbm90IHNwZWNpZmllZCkuCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCkpYGAsIGludGVuZGVkIGZvcgotICAgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCksIGZpbGU9ZmlsZSlgYCwKKyAgIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQogICAgbWV0aG9kLCBhIGZ1bmN0aW9uLCBhIGNvZGUgb2JqZWN0LCBhIHN0cmluZyBvZiBzb3VyY2UgY29kZSBvciBhIGJ5dGUgc2VxdWVuY2UKQEAgLTcyLDE2ICsxNDUsMjggQEAKICAgIGRpc2Fzc2VtYmxlZC4gIElmIG5vIG9iamVjdCBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBkaXNhc3NlbWJsZXMgdGhlIGxhc3QKICAgIHRyYWNlYmFjay4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgYGBmaWxlYGAgYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlIHRvcC1vZi1zdGFjayBmdW5jdGlvbiBvZiBhIHRyYWNlYmFjaywgdXNpbmcgdGhlIGxhc3QKICAgIHRyYWNlYmFjayBpZiBub25lIHdhcyBwYXNzZWQuICBUaGUgaW5zdHJ1Y3Rpb24gY2F1c2luZyB0aGUgZXhjZXB0aW9uIGlzCiAgICBpbmRpY2F0ZWQuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xKQotICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCisgICAgICAgICAgICAgIGRpc2NvKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QsIGluZGljYXRpbmcgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaWYgKmxhc3RpKiB3YXMKICAgIHByb3ZpZGVkLiAgVGhlIG91dHB1dCBpcyBkaXZpZGVkIGluIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKQEAgLTk3LDYgKzE4MiwyOCBAQAogICAgVGhlIHBhcmFtZXRlciBpbnRlcnByZXRhdGlvbiByZWNvZ25pemVzIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGUgbmFtZXMsCiAgICBjb25zdGFudCB2YWx1ZXMsIGJyYW5jaCB0YXJnZXRzLCBhbmQgY29tcGFyZSBvcGVyYXRvcnMuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSkKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdC4KKworICAgVGhlIGl0ZXJhdG9yIGdlbmVyYXRlcyBhIHNlcmllcyBvZiA6Y2xhc3M6YEluc3RydWN0aW9uYCBuYW1lZCB0dXBsZXMKKyAgIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkCisgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgIHRoZSBkaXNhc3NlbWJsZWQgY29kZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTExLDYxICsyMTgsNjcgQEAKICAgIHJldHVybiBhIGxpc3Qgb2YgdGhlc2Ugb2Zmc2V0cy4KIAogCi0uLiBkYXRhOjogb3BuYW1lCisuLiBmdW5jdGlvbjo6IHN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pCiAKLSAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKyAgIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiAqb3Bjb2RlKiB3aXRoIGFyZ3VtZW50ICpvcGFyZyouCiAKLQotLi4gZGF0YTo6IG9wbWFwCi0KLSAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgotCi0KLS4uIGRhdGE6OiBjbXBfb3AKLQotICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgotCi0KLS4uIGRhdGE6OiBoYXNjb25zdAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgotCi0KLS4uIGRhdGE6OiBoYXNmcmVlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc25hbWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgotCi0KLS4uIGRhdGE6OiBoYXNqcmVsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzamFicwotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNsb2NhbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzY29tcGFyZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgotCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gX2J5dGVjb2RlczoKIAogUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgIGZ1bmN0aW9uIGFuZCA6Y2xhc3M6YEJ5dGVjb2RlYCBjbGFzcyBwcm92aWRlCitkZXRhaWxzIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXM6CisKKy4uIGNsYXNzOjogSW5zdHJ1Y3Rpb24KKworICAgRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgLi4gZGF0YTo6IG9wY29kZQorCisgICAgICBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbiwgY29ycmVzcG9uZGluZyB0byB0aGUgb3Bjb2RlIHZhbHVlcyBsaXN0ZWQKKyAgICAgIGJlbG93IGFuZCB0aGUgYnl0ZWNvZGUgdmFsdWVzIGluIHRoZSA6cmVmOmBvcGNvZGVfY29sbGVjdGlvbnNgLgorCisKKyAgIC4uIGRhdGE6OiBvcG5hbWUKKworICAgICAgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisKKworICAgLi4gZGF0YTo6IGFyZworCisgICAgICBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogYXJndmFsCisKKyAgICAgIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKworCisgICAuLiBkYXRhOjogYXJncmVwcgorCisgICAgICBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKworCisgICAuLiBkYXRhOjogb2Zmc2V0CisKKyAgICAgIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKworCisgICAuLiBkYXRhOjogc3RhcnRzX2xpbmUKKworICAgICAgbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBpc19qdW1wX3RhcmdldAorCisgICAgICBgYFRydWVgYCBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBgYEZhbHNlYGAKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIFB5dGhvbiBjb21waWxlciBjdXJyZW50bHkgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogCiAKQEAgLTUwNiwxMiArNjE5LDYgQEAKICAgIC4uIFhYWCBleHBsYWluIHRoZSBXSFkgc3R1ZmYhCiAKIAotLi4gb3Bjb2RlOjogU1RPUkVfTE9DQUxTCi0KLSAgIFBvcHMgVE9TIGZyb20gdGhlIHN0YWNrIGFuZCBzdG9yZXMgaXQgYXMgdGhlIGN1cnJlbnQgZnJhbWUncyBgYGZfbG9jYWxzYGAuCi0gICBUaGlzIGlzIHVzZWQgaW4gY2xhc3MgY29uc3RydWN0aW9uLgotCi0KIEFsbCBvZiB0aGUgZm9sbG93aW5nIG9wY29kZXMgZXhwZWN0IGFyZ3VtZW50cy4gIEFuIGFyZ3VtZW50IGlzIHR3byBieXRlcywgd2l0aAogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBsYXN0LgogCkBAIC03MjIsNiArODI5LDEzIEBACiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGUgY2VsbCBjb250YWlucyBvbiB0aGUgc3RhY2suCiAKIAorLi4gb3Bjb2RlOjogTE9BRF9DTEFTU0RFUkVGIChpKQorCisgICBNdWNoIGxpa2UgOm9wY29kZTpgTE9BRF9ERVJFRmAgYnV0IGZpcnN0IGNoZWNrcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgYmVmb3JlCisgICBjb25zdWx0aW5nIHRoZSBjZWxsLiAgVGhpcyBpcyB1c2VkIGZvciBsb2FkaW5nIGZyZWUgdmFyaWFibGVzIGluIGNsYXNzCisgICBib2RpZXMuCisKKwogLi4gb3Bjb2RlOjogU1RPUkVfREVSRUYgKGkpCiAKICAgIFN0b3JlcyBUT1MgaW50byB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUKQEAgLTgyMCwzICs5MzQsNjIgQEAKICAgIHdoaWNoIGRvbid0IHRha2UgYXJndW1lbnRzIGBgPCBIQVZFX0FSR1VNRU5UYGAgYW5kIHRob3NlIHdoaWNoIGRvIGBgPj0KICAgIEhBVkVfQVJHVU1FTlRgYC4KIAorLi4gX29wY29kZV9jb2xsZWN0aW9uczoKKworT3Bjb2RlIGNvbGxlY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBhdXRvbWF0aWMgaW50cm9zcGVjdGlvbiBvZiBieXRlY29kZQoraW5zdHJ1Y3Rpb25zOgorCisuLiBkYXRhOjogb3BuYW1lCisKKyAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKworCisuLiBkYXRhOjogb3BtYXAKKworICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCisKKworLi4gZGF0YTo6IGNtcF9vcAorCisgICBTZXF1ZW5jZSBvZiBhbGwgY29tcGFyZSBvcGVyYXRpb24gbmFtZXMuCisKKworLi4gZGF0YTo6IGhhc2NvbnN0CisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSBjb25zdGFudCBwYXJhbWV0ZXIuCisKKworLi4gZGF0YTo6IGhhc2ZyZWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgZnJlZSB2YXJpYWJsZSAobm90ZSB0aGF0ICdmcmVlJyBpbgorICAgdGhpcyBjb250ZXh0IHJlZmVycyB0byBuYW1lcyBpbiB0aGUgY3VycmVudCBzY29wZSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5CisgICBpbm5lciBzY29wZXMgb3IgbmFtZXMgaW4gb3V0ZXIgc2NvcGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGlzIHNjb3BlLgorICAgSXQgZG9lcyAqbm90KiBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9yIGJ1aWx0aW4gc2NvcGVzKS4KKworCisuLiBkYXRhOjogaGFzbmFtZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCisKKworLi4gZGF0YTo6IGhhc2pyZWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNqYWJzCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2xvY2FsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgorCisKKy4uIGRhdGE6OiBoYXNjb21wYXJlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0IGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApAQCAtMCwwICsxLDE0IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZXNlIGxpYnJhcmllcyBoZWxwIHlvdSB3aXRoIHB1Ymxpc2hpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIHNvZnR3YXJlLgorV2hpbGUgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgdG8gd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZz5gX18sIHRoZXkgY2FuIGFsc28gYmUgdXNlZAord2l0aCBhIGxvY2FsIGluZGV4IHNlcnZlciwgb3Igd2l0aG91dCBhbnkgaW5kZXggc2VydmVyIGF0IGFsbC4KKworLi4gdG9jdHJlZTo6CisKKyAgIGRpc3R1dGlscy5yc3QKKyAgIGVuc3VyZXBpcC5yc3QKKyAgIHZlbnYucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CmluZGV4IDIyMmM3MTkuLjI4ZGY0OWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CkBAIC0yNzgsNiArMjc4LDEwIEBACiBBbnkgY2xhc3NlcyBmb3VuZCBhcmUgcmVjdXJzaXZlbHkgc2VhcmNoZWQgc2ltaWxhcmx5LCB0byB0ZXN0IGRvY3N0cmluZ3MgaW4KIHRoZWlyIGNvbnRhaW5lZCBtZXRob2RzIGFuZCBuZXN0ZWQgY2xhc3Nlcy4KIAorLi4gaW1wbC1kZXRhaWw6OgorICAgUHJpb3IgdG8gdmVyc2lvbiAzLjQsIGV4dGVuc2lvbiBtb2R1bGVzIHdyaXR0ZW4gaW4gQyB3ZXJlIG5vdCBmdWxseQorICAgc2VhcmNoZWQgYnkgZG9jdGVzdC4KKwogCiAuLiBfZG9jdGVzdC1maW5kaW5nLWV4YW1wbGVzOgogCkBAIC00OTUsNyArNDk5LDEwIEBACiBBIG51bWJlciBvZiBvcHRpb24gZmxhZ3MgY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgZG9jdGVzdCdzIGJlaGF2aW9yLgogU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFncyBhcmUgc3VwcGxpZWQgYXMgbW9kdWxlIGNvbnN0YW50cywgd2hpY2ggY2FuIGJlCiBvcidlZCB0b2dldGhlciBhbmQgcGFzc2VkIHRvIHZhcmlvdXMgZnVuY3Rpb25zLiAgVGhlIG5hbWVzIGNhbiBhbHNvIGJlIHVzZWQgaW4KLTpyZWY6YGRvY3Rlc3QgZGlyZWN0aXZlcyA8ZG9jdGVzdC1kaXJlY3RpdmVzPmAuCis6cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLCBhbmQgbWF5IGJlIHBhc3NlZCB0byB0aGUKK2RvY3Rlc3QgY29tbWFuZCBsaW5lIGludGVyZmFjZSB2aWEgdGhlIGBgLW9gYCBvcHRpb24uCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNCB0aGUgYGAtb2BgIGNvbW1hbmQgbGluZSBvcHRpb24KIAogVGhlIGZpcnN0IGdyb3VwIG9mIG9wdGlvbnMgZGVmaW5lIHRlc3Qgc2VtYW50aWNzLCBjb250cm9sbGluZyBhc3BlY3RzIG9mIGhvdwogZG9jdGVzdCBkZWNpZGVzIHdoZXRoZXIgYWN0dWFsIG91dHB1dCBtYXRjaGVzIGFuIGV4YW1wbGUncyBleHBlY3RlZCBvdXRwdXQ6CkBAIC02MzMsNiArNjQwLDE5IEBACiAgICB0aGUgb3V0cHV0IGlzIHN1cHByZXNzZWQuCiAKIAorLi4gZGF0YTo6IEZBSUxfRkFTVAorCisgICBXaGVuIHNwZWNpZmllZCwgZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlIGFuZCBkb24ndCBhdHRlbXB0IHRvIHJ1bgorICAgdGhlIHJlbWFpbmluZyBleGFtcGxlcy4gVGh1cywgdGhlIG51bWJlciBvZiBmYWlsdXJlcyByZXBvcnRlZCB3aWxsIGJlIGF0IG1vc3QKKyAgIDEuICBUaGlzIGZsYWcgbWF5IGJlIHVzZWZ1bCBkdXJpbmcgZGVidWdnaW5nLCBzaW5jZSBleGFtcGxlcyBhZnRlciB0aGUgZmlyc3QKKyAgIGZhaWx1cmUgd29uJ3QgZXZlbiBwcm9kdWNlIGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgIFRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBhY2NlcHRzIHRoZSBvcHRpb24gYGAtZmBgIGFzIGEgc2hvcnRoYW5kIGZvciBgYC1vCisgICBGQUlMX0ZBU1RgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJFUE9SVElOR19GTEFHUwogCiAgICBBIGJpdG1hc2sgb3InaW5nIHRvZ2V0aGVyIGFsbCB0aGUgcmVwb3J0aW5nIGZsYWdzIGFib3ZlLgpAQCAtMTI2OSw5ICsxMjg5LDggQEAKIAogICAgQSBwcm9jZXNzaW5nIGNsYXNzIHVzZWQgdG8gZXh0cmFjdCB0aGUgOmNsYXNzOmBEb2NUZXN0YFwgcyB0aGF0IGFyZSByZWxldmFudCB0bwogICAgYSBnaXZlbiBvYmplY3QsIGZyb20gaXRzIGRvY3N0cmluZyBhbmQgdGhlIGRvY3N0cmluZ3Mgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzLgotICAgOmNsYXNzOmBEb2NUZXN0YFwgcyBjYW4gY3VycmVudGx5IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBmb2xsb3dpbmcgb2JqZWN0IHR5cGVzOgotICAgbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzLCBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZAotICAgcHJvcGVydGllcy4KKyAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywKKyAgIG1ldGhvZHMsIHN0YXRpY21ldGhvZHMsIGNsYXNzbWV0aG9kcywgYW5kIHByb3BlcnRpZXMuCiAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqdmVyYm9zZSogY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgb2JqZWN0cyBzZWFyY2hlZCBieQogICAgdGhlIGZpbmRlci4gIEl0IGRlZmF1bHRzIHRvIGBgRmFsc2VgYCAobm8gb3V0cHV0KS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYyZGExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0CkBAIC0wLDAgKzEsNDI3IEBACis6bW9kOmBlbWFpbC5jb250ZW50bWFuYWdlcmA6IE1hbmFnaW5nIE1JTUUgQ29udGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbW9kdWxlOjogZW1haWwuY29udGVudG1hbmFnZXIKKyAgIDpzeW5vcHNpczogU3RvcmluZyBhbmQgUmV0cmlldmluZyBDb250ZW50IGZyb20gTUlNRSBQYXJ0cworCisuLiBtb2R1bGVhdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKy4uIHNlY3Rpb25hdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKworCisuLiBub3RlOjoKKworICAgVGhlIGNvbnRlbnRtYW5hZ2VyIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIGFzIGEgOnRlcm06YHByb3Zpc2lvbmFsIG1vZHVsZSA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLgorCitUaGUgOm1vZDpgfmVtYWlsLm1lc3NhZ2VgIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIHRoYXQgY2FuIHJlcHJlc2VudCBhbgorYXJiaXRyYXJ5IGVtYWlsIG1lc3NhZ2UuICBUaGF0IGJhc2ljIG1lc3NhZ2UgbW9kZWwgaGFzIGEgdXNlZnVsIGFuZCBmbGV4aWJsZQorQVBJLCBidXQgaXQgcHJvdmlkZXMgb25seSBhIGxvd2VyLWxldmVsIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2VuZXJpYworcGFydHMgb2YgYSBtZXNzYWdlICh0aGUgaGVhZGVycywgZ2VuZXJpYyBoZWFkZXIgcGFyYW1ldGVycywgYW5kIHRoZSBwYXlsb2FkLAord2hpY2ggbWF5IGJlIGEgbGlzdCBvZiBzdWItcGFydHMpLiAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgdG9vbHMKK3RoYXQgcHJvdmlkZSBhbiBlbmhhbmNlZCBhbmQgZXh0ZW5zaWJsZSBBUEkgZm9yIGRlYWxpbmcgd2l0aCB2YXJpb3VzIHNwZWNpZmljCit0eXBlcyBvZiBjb250ZW50LCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UKK2FzIGEgc3BlY2lhbGl6ZWQgb2JqZWN0IHR5cGUgcmF0aGVyIHRoYW4gYXMgYSBzaW1wbGUgYnl0ZXMgb2JqZWN0LiAgVGhlIG1vZHVsZQorYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mIHRoZSBSRkMtc3BlY2lmaWVkIE1JTUUgZGV0YWlscyAocmVxdWlyZWQgaGVhZGVycworYW5kIHBhcmFtZXRlcnMsIGV0Yy4pIGZvciB0aGUgY2VydGFpbiBjb21tb24gY29udGVudCB0eXBlcyBjb250ZW50IHByb3BlcnRpZXMsCithbmQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBjYW4gYmUgYWRkZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCitleHRlbnNpb24gbWVjaGFuaXNtcy4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZXBvbnltb3VzICJDb250ZW50IE1hbmFnZXIiIGNsYXNzZXMuICBUaGUgYmFzZQorOmNsYXNzOmAuQ29udGVudE1hbmFnZXJgIGNsYXNzIGRlZmluZXMgYW4gQVBJIGZvciByZWdpc3RlcmluZyBjb250ZW50CittYW5hZ2VtZW50IGZ1bmN0aW9ucyB3aGljaCBleHRyYWN0IGRhdGEgZnJvbSBgYE1lc3NhZ2VgYCBvYmplY3RzIG9yIGluc2VydCBkYXRhCithbmQgaGVhZGVycyBpbnRvIGBgTWVzc2FnZWBgIG9iamVjdHMsIHRodXMgcHJvdmlkaW5nIGEgd2F5IG9mIGNvbnZlcnRpbmcKK2JldHdlZW4gYGBNZXNzYWdlYGAgb2JqZWN0cyBjb250YWluaW5nIGRhdGEgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucyBvZiB0aGF0CitkYXRhIChQeXRob24gZGF0YSB0eXBlcywgc3BlY2lhbGl6ZWQgUHl0aG9uIG9iamVjdHMsIGV4dGVybmFsIGZpbGVzLCBldGMpLiAgVGhlCittb2R1bGUgYWxzbyBkZWZpbmVzIG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXI6IDpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYAorY29udmVydHMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgdHlwZXMgYW5kIGBgc3RyYGAgb3IgYGBieXRlc2BgIGRhdGEuICBJdCBhbHNvCitwcm92aWRlcyBhIGNvbnZlbmllbnQgQVBJIGZvciBtYW5hZ2luZyB0aGUgTUlNRSBwYXJhbWV0ZXJzIHdoZW4gaW5zZXJ0aW5nCitjb250ZW50IGludG8gYGBNZXNzYWdlYGBcIHMuICBJdCBhbHNvIGhhbmRsZXMgaW5zZXJ0aW5nIGFuZCBleHRyYWN0aW5nCitgYE1lc3NhZ2VgYCBvYmplY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgYG1lc3NhZ2UvcmZjODIyYGAgY29udGVudCB0eXBlLgorCitBbm90aGVyIHBhcnQgb2YgdGhlIGVuaGFuY2VkIGludGVyZmFjZSBpcyBzdWJjbGFzc2VzIG9mCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHRoYXQgcHJvdmlkZSBuZXcgY29udmVuaWVuY2UgQVBJIGZ1bmN0aW9ucywKK2luY2x1ZGluZyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBjYWxsaW5nIHRoZSBDb250ZW50IE1hbmFnZXJzIGRlcml2ZWQgZnJvbQordGhpcyBtb2R1bGUuCisKKy4uIG5vdGU6OgorCisgICBBbHRob3VnaCA6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGAgYXJlIGN1cnJlbnRseQorICAgZG9jdW1lbnRlZCBpbiB0aGlzIG1vZHVsZSBiZWNhdXNlIG9mIHRoZSBwcm92aXNpb25hbCBuYXR1cmUgb2YgdGhlIGNvZGUsIHRoZQorICAgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIDptb2Q6YGVtYWlsLm1lc3NhZ2VgIG1vZHVsZS4KKworCisuLiBjbGFzczo6IEVtYWlsTWVzc2FnZShwb2xpY3k9ZGVmYXVsdCkKKworICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZQorICAgOmNsYXNzOmB+ZW1haWwucG9saWN5LmRlZmF1bHRgIHBvbGljeSwgd2hpY2ggZm9sbG93cyB0aGUgcnVsZXMgb2YgdGhlIGVtYWlsCisgICBSRkNzIGV4Y2VwdCBmb3IgbGluZSBlbmRpbmdzIChpbnN0ZWFkIG9mIHRoZSBSRkMgbWFuZGF0ZWQgYGBcclxuYGAsIGl0IHVzZXMKKyAgIHRoZSBQeXRob24gc3RhbmRhcmQgYGBcbmBgIGxpbmUgZW5kaW5ncykuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYC4gIEl0IGFkZHMKKyAgIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworCisgICAuLiBhdHRyaWJ1dGU6OiBpc19hdHRhY2htZW50CisKKyAgICAgIFNldCB0byBgYFRydWVgYCBpZiB0aGVyZSBpcyBhIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIKKyAgICAgIGFuZCBpdHMgKGNhc2UgaW5zZW5zaXRpdmUpIHZhbHVlIGlzIGBgYXR0YWNobWVudGBgLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJykpCisKKyAgICAgIFJldHVybiB0aGUgTUlNRSBwYXJ0IHRoYXQgaXMgdGhlIGJlc3QgY2FuZGlkYXRlIHRvIGJlIHRoZSAiYm9keSIgb2YgdGhlCisgICAgICBtZXNzYWdlLgorCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGZyb20gdGhlIHNldCBgYHJlbGF0ZWRgYCwKKyAgICAgIGBgaHRtbGBgLCBhbmQgYGBwbGFpbmBgLCBhbmQgaW5kaWNhdGVzIHRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGZvciB0aGUKKyAgICAgIGNvbnRlbnQgdHlwZSBvZiB0aGUgcGFydCByZXR1cm5lZC4KKworICAgICAgU3RhcnQgbG9va2luZyBmb3IgY2FuZGlkYXRlIG1hdGNoZXMgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZQorICAgICAgYGBnZXRfYm9keWBgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgICAgIElmIGBgcmVsYXRlZGBgIGlzIG5vdCBpbmNsdWRlZCBpbiAqcHJlZmVyZW5jZWxpc3QqLCBjb25zaWRlciB0aGUgcm9vdAorICAgICAgcGFydCAob3Igc3VicGFydCBvZiB0aGUgcm9vdCBwYXJ0KSBvZiBhbnkgcmVsYXRlZCBlbmNvdW50ZXJlZCBhcyBhCisgICAgICBjYW5kaWRhdGUgaWYgdGhlIChzdWItKXBhcnQgbWF0Y2hlcyBhIHByZWZlcmVuY2UuCisKKyAgICAgIFdoZW4gZW5jb3VudGVyaW5nIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjaGVjayB0aGUgYGBzdGFydGBgIHBhcmFtZXRlcgorICAgICAgYW5kIGlmIGEgcGFydCB3aXRoIGEgbWF0Y2hpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIGlzIGZvdW5kLCBjb25zaWRlcgorICAgICAgb25seSBpdCB3aGVuIGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzLiAgT3RoZXJ3aXNlIGNvbnNpZGVyIG9ubHkgdGhlCisgICAgICBmaXJzdCAoZGVmYXVsdCByb290KSBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydC9yZWxhdGVkYGAuCisKKyAgICAgIElmIGEgcGFydCBoYXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBvbmx5IGNvbnNpZGVyCisgICAgICB0aGUgcGFydCBhIGNhbmRpZGF0ZSBtYXRjaCBpZiB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciBpcyBgYGlubGluZWBgLgorCisgICAgICBJZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIG1hdGNoZXMgYW55IG9mIHRoZSBwcmVmZXJlbmNlcyBpbgorICAgICAgKnByZWZlcm5lY2xpc3QqLCByZXR1cm4gYGBOb25lYGAuCisKKyAgICAgIE5vdGVzOiAoMSkgRm9yIG1vc3QgYXBwbGljYXRpb25zIHRoZSBvbmx5ICpwcmVmZXJlbmNlbGlzdCogY29tYmluYXRpb25zCisgICAgICB0aGF0IHJlYWxseSBtYWtlIHNlbnNlIGFyZSBgYCgncGxhaW4nLClgYCwgYGAoJ2h0bWwnLCAncGxhaW4nKWBgLCBhbmQgdGhlCisgICAgICBkZWZhdWx0LCBgYCgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJylgYC4gICgyKSBCZWNhdXNlIG1hdGNoaW5nIHN0YXJ0cworICAgICAgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIGBgZ2V0X2JvZHlgYCBpcyBjYWxsZWQsIGNhbGxpbmcgYGBnZXRfYm9keWBgIG9uCisgICAgICBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCB3aWxsIHJldHVybiB0aGUgb2JqZWN0IGl0c2VsZiB1bmxlc3MKKyAgICAgICpwcmVmZXJlbmNlbGlzdCogaGFzIGEgbm9uLWRlZmF1bHQgdmFsdWUuICgzKSBNZXNzYWdlcyAob3IgbWVzc2FnZSBwYXJ0cykKKyAgICAgIHRoYXQgZG8gbm90IHNwZWNpZnkgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBvciB3aG9zZQorICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyIGlzIGludmFsaWQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkKKyAgICAgIGFyZSBvZiB0eXBlIGBgdGV4dC9wbGFpbmBgLCB3aGljaCBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGBgZ2V0X2JvZHlgYCB0bworICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX2F0dGFjaG1lbnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBub3QKKyAgICAgIGNhbmRpZGF0ZSAiYm9keSIgcGFydHMuICBUaGF0IGlzLCBza2lwIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggb2YKKyAgICAgIGBgdGV4dC9wbGFpbmBgLCBgYHRleHQvaHRtbGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgICh1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBtYXJrZWQgYXMKKyAgICAgIGF0dGFjaG1lbnRzIHZpYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGApLCBhbmQKKyAgICAgIHJldHVybiBhbGwgcmVtYWluaW5nIHBhcnRzLiAgV2hlbiBhcHBsaWVkIGRpcmVjdGx5IHRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgcmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGFsbCB0aGUgcmVsYXRlZCBwYXJ0cworICAgICAgZXhjZXB0IHRoZSByb290IHBhcnQgKGllOiB0aGUgcGFydCBwb2ludGVkIHRvIGJ5IHRoZSBgYHN0YXJ0YGAgcGFyYW1ldGVyLAorICAgICAgb3IgdGhlIGZpcnN0IHBhcnQgaWYgdGhlcmUgaXMgbm8gYGBzdGFydGBgIHBhcmFtZXRlciBvciB0aGUgYGBzdGFydGBgCisgICAgICBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIG9mIGFueSBvZiB0aGUKKyAgICAgIHBhcnRzKS4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAgb3IgYQorICAgICAgbm9uLWBgbXVsdGlwYXJ0YGAsIHJldHVybiBhbiBlbXB0eSBpdGVyYXRvci4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX3BhcnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBpbW1lZGlhdGUgc3ViLXBhcnRzIG9mIHRoZSBtZXNzYWdlLAorICAgICAgd2hpY2ggd2lsbCBiZSBlbXB0eSBmb3IgYSBub24tYGBtdWx0aXBhcnRgYC4gIChTZWUgYWxzbworICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLndhbGtgLikKKworCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgZ2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgc2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX3JlbGF0ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgIG1lc3NhZ2UgaW50byBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBtZXNzYWdlLAorICAgICAgbW92aW5nIGFueSBleGlzdGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhCisgICAgICAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZQorICAgICAgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZyBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5CisgICAgICB0byBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZQorICAgICAgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX2FsdGVybmF0aXZlKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBvciBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBpbnRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYAorICAgICAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmCisgICAgICAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwKKyAgICAgIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMKKyAgICAgIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9taXhlZChib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvciBhCisgICAgICBgYG11bHRpcGFydC1hbHRlcm5hdGl2ZWBgIGludG8gYSBgYG11bHRpcGFydC9taXhlZGBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nCisgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlCisgICAgICBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nCisgICAgICBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkKKyAgICAgIGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9yZWxhdGVkKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICBvYmplY3QsIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLAorICAgICAgYW5kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgdGhlIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgY2FsbCA6bWV0aDpgbWFrZV9yZWxhdGVkYCBhbmQgdGhlbgorICAgICAgcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzIGFueSBvdGhlciB0eXBlIG9mIGBgbXVsdGlwYXJ0YGAsCisgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorICAgICAgSWYgdGhlIGFkZGVkIHBhcnQgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsCisgICAgICBhZGQgb25lIHdpdGggdGhlIHZhbHVlIGBgaW5saW5lYGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2FsdGVybmF0aXZlKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwgYW5kCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgdGhlCisgICAgICBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjYWxsCisgICAgICA6bWV0aDpgbWFrZV9hbHRlcm5hdGl2ZWAgYW5kIHRoZW4gcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzCisgICAgICBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmCisgICAgICAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkCisgICAgICBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfYXR0YWNobWVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0LAorICAgICAgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjYWxsIDptZXRoOmBtYWtlX21peGVkYCBhbmQgdGhlbiBwcm9jZWVkIGFzCisgICAgICBhYm92ZS4gSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgCisgICAgICBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuICBJZiB0aGUgYWRkZWQgcGFydAorICAgICAgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsIGFkZCBvbmUgd2l0aCB0aGUgdmFsdWUKKyAgICAgIGBgYXR0YWNobWVudGBgLiAgVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgYm90aCBmb3IgZXhwbGljaXQgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAgYW5kIGBgaW5saW5lYGAgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYCksIGJ5IHBhc3NpbmcgYXBwcm9wcmlhdGUKKyAgICAgIG9wdGlvbnMgdG8gdGhlIGBgY29udGVudF9tYW5hZ2VyYGAuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXIoKQorCisgICAgICBSZW1vdmUgdGhlIHBheWxvYWQgYW5kIGFsbCBvZiB0aGUgaGVhZGVycy4KKworCisgICAuLiBtZXRob2Q6OiBjbGVhcl9jb250ZW50KCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIDpleGM6YENvbnRlbnQtYCBoZWFkZXJzLCBsZWF2aW5nCisgICAgICBhbGwgb3RoZXIgaGVhZGVycyBpbnRhY3QgYW5kIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisKKy4uIGNsYXNzOjogQ29udGVudE1hbmFnZXIoKQorCisgICBCYXNlIGNsYXNzIGZvciBjb250ZW50IG1hbmFnZXJzLiAgUHJvdmlkZXMgdGhlIHN0YW5kYXJkIHJlZ2lzdHJ5IG1lY2hhbmlzbXMKKyAgIHRvIHJlZ2lzdGVyIGNvbnZlcnRlcnMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucywgYXMKKyAgIHdlbGwgYXMgdGhlIGBgZ2V0X2NvbnRlbnRgYCBhbmQgYGBzZXRfY29udGVudGBgIGRpc3BhdGNoIG1ldGhvZHMuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCAqYXJncywgKiprdykKKworICAgICAgTG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGBgbWltZXR5cGVgYCBvZiAqbXNnKiAoc2VlIG5leHQKKyAgICAgIHBhcmFncmFwaCksIGNhbGwgaXQsIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgIG9mIHRoZSBjYWxsLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGhhbmRsZXIgd2lsbCBleHRyYWN0IHRoZQorICAgICAgcGF5bG9hZCBmcm9tICptc2cqIGFuZCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgdGhlIGV4dHJhY3RlZCBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBsb29rIGZvciB0aGUgZm9sbG93aW5nIGtleXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lIGZvdW5kOgorCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmdWxsIE1JTUUgdHlwZSAoYGBtYWludHlwZS9zdWJ0eXBlYGApCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgYG1haW50eXBlYGAKKyAgICAgICAgICAgICogdGhlIGVtcHR5IHN0cmluZworCisgICAgICBJZiBub25lIG9mIHRoZXNlIGtleXMgcHJvZHVjZSBhIGhhbmRsZXIsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUKKyAgICAgIGZ1bGwgTUlNRSB0eXBlLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgICAgSWYgdGhlIGBgbWFpbnR5cGVgYCBpcyBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmA7IG90aGVyd2lzZQorICAgICAgbG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5cGUgb2YgKm9iaiogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIDptZXRoOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXJfY29udGVudGAgb24gdGhlCisgICAgICAqbXNnKiwgYW5kIGNhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLiAgVGhlCisgICAgICBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgdHJhbnNmb3JtIGFuZCBzdG9yZSAqb2JqKiBpbnRvCisgICAgICAqbXNnKiwgcG9zc2libHkgbWFraW5nIG90aGVyIGNoYW5nZXMgdG8gKm1zZyogYXMgd2VsbCwgc3VjaCBhcyBhZGRpbmcKKyAgICAgIHZhcmlvdXMgTUlNRSBoZWFkZXJzIHRvIGVuY29kZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBzdG9yZWQKKyAgICAgIGRhdGEuCisKKyAgICAgIFRvIGZpbmQgdGhlIGhhbmRsZXIsIG9idGFpbiB0aGUgdHlwZSBvZiAqb2JqKiAoYGB0eXAgPSB0eXBlKG9iailgYCksIGFuZAorICAgICAgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lCisgICAgICBmb3VuZDoKKworICAgICAgICAgICAqIHRoZSB0eXBlIGl0c2VsZiAoYGB0eXBgYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIChgYHR5cC5fX21vZHVsZV9fICsgJy4nICsKKyAgICAgICAgICAgICB0eXAuX19xdWFsbmFtZV9fYGApLgorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgcXVhbG5hbWUgKGBgdHlwLl9fcXVhbG5hbWVfX2BgKQorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgbmFtZSAoYGB0eXAuX19uYW1lX19gYCkuCisKKyAgICAgIElmIG5vbmUgb2YgdGhlIGFib3ZlIG1hdGNoLCByZXBlYXQgYWxsIG9mIHRoZSBjaGVja3MgYWJvdmUgZm9yIGVhY2ggb2YKKyAgICAgIHRoZSB0eXBlcyBpbiB0aGUgOnRlcm06YE1ST2AgKGBgdHlwLl9fbXJvX19gYCkuICBGaW5hbGx5LCBpZiBubyBvdGhlciBrZXkKKyAgICAgIHlpZWxkcyBhIGhhbmRsZXIsIGNoZWNrIGZvciBhIGhhbmRsZXIgZm9yIHRoZSBrZXkgYGBOb25lYGAuICBJZiB0aGVyZSBpcworICAgICAgbm8gaGFuZGxlciBmb3IgYGBOb25lYGAsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUgZnVsbHkKKyAgICAgIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlLgorCisgICAgICBBbHNvIGFkZCBhIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlciBpZiBvbmUgaXMgbm90IHByZXNlbnQgKHNlZQorICAgICAgYWxzbyA6Y2xhc3M6YC5NSU1FUGFydGApLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9nZXRfaGFuZGxlcihrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCB0aGUgZnVuY3Rpb24gKmhhbmRsZXIqIGFzIHRoZSBoYW5kbGVyIGZvciAqa2V5Ki4gIEZvciB0aGUgcG9zc2libGUKKyAgICAgIHZhbHVlcyBvZiAqa2V5Kiwgc2VlIDptZXRoOmBnZXRfY29udGVudGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3NldF9oYW5kbGVyKHR5cGVrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCAqaGFuZGxlciogYXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbiBvYmplY3Qgb2YgYSB0eXBlCisgICAgICBtYXRjaGluZyAqdHlwZWtleSogaXMgcGFzc2VkIHRvIDptZXRoOmBzZXRfY29udGVudGAuICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKnR5cGVrZXkqLCBzZWUgOm1ldGg6YHNldF9jb250ZW50YC4KKworCisuLiBjbGFzczo6IE1JTUVQYXJ0KHBvbGljeT1kZWZhdWx0KQorCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3VicGFydCBvZiBhIE1JTUUgbWVzc2FnZS4gIEl0IGlzIGlkZW50aWNhbCB0bworICAgIDpjbGFzczpgRW1haWxNZXNzYWdlYCwgZXhjZXB0IHRoYXQgbm8gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycyBhcmUKKyAgICBhZGRlZCB3aGVuIDptZXRoOmB+RW1haWxNZXNzYWdlLnNldF9jb250ZW50YCBpcyBjYWxsZWQsIHNpbmNlIHN1Yi1wYXJ0cyBkbworICAgIG5vdCBuZWVkIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLgorCisKK0NvbnRlbnQgTWFuYWdlciBJbnN0YW5jZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ3VycmVudGx5IHRoZSBlbWFpbCBwYWNrYWdlIHByb3ZpZGVzIG9ubHkgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlciwKKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCwgYWx0aG91Z2ggbW9yZSBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCBpcyB0aGUKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlcmAgcHJvdmlkZWQgYnkKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5YCBhbmQgaXRzIGRlcml2YXRpdmVzLgorCisKKy4uIGRhdGE6OiByYXdfZGF0YV9tYW5hZ2VyCisKKyAgIFRoaXMgY29udGVudCBtYW5hZ2VyIHByb3ZpZGVzIG9ubHkgYSBtaW5pbXVtIGludGVyZmFjZSBiZXlvbmQgdGhhdCBwcm92aWRlZAorICAgYnkgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpdHNlbGY6ICBpdCBkZWFscyBvbmx5IHdpdGggdGV4dCwgcmF3CisgICBieXRlIHN0cmluZ3MsIGFuZCA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMuICBOZXZlcnRoZWxlc3MsIGl0CisgICBwcm92aWRlcyBzaWduaWZpY2FudCBhZHZhbnRhZ2VzIGNvbXBhcmVkIHRvIHRoZSBiYXNlIEFQSTogYGBnZXRfY29udGVudGBgIG9uCisgICBhIHRleHQgcGFydCB3aWxsIHJldHVybiBhIHVuaWNvZGUgc3RyaW5nIHdpdGhvdXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRpbmcgdG8KKyAgIG1hbnVhbGx5IGRlY29kZSBpdCwgYGBzZXRfY29udGVudGBgIHByb3ZpZGVzIGEgcmljaCBzZXQgb2Ygb3B0aW9ucyBmb3IKKyAgIGNvbnRyb2xsaW5nIHRoZSBoZWFkZXJzIGFkZGVkIHRvIGEgcGFydCBhbmQgY29udHJvbGxpbmcgdGhlIGNvbnRlbnQgdHJhbnNmZXIKKyAgIGVuY29kaW5nLCBhbmQgaXQgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSB2YXJpb3VzIGBgYWRkX2BgIG1ldGhvZHMsIHRoZXJlYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBjcmVhdGlvbiBvZiBtdWx0aXBhcnQgbWVzc2FnZXMuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgZXJyb3JzPSdyZXBsYWNlJykKKworICAgICAgUmV0dXJuIHRoZSBwYXlsb2FkIG9mIHRoZSBwYXJ0IGFzIGVpdGhlciBhIHN0cmluZyAoZm9yIGBgdGV4dGBgIHBhcnRzKSwgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2VgIG9iamVjdCAoZm9yIGBgbWVzc2FnZS9yZmM4MjJgYAorICAgICAgcGFydHMpLCBvciBhIGBgYnl0ZXNgYCBvYmplY3QgKGZvciBhbGwgb3RoZXIgbm9uLW11bHRpcGFydCB0eXBlcykuICBSYWlzZQorICAgICAgYSA6ZXhjOmBLZXlFcnJvcmAgaWYgY2FsbGVkIG9uIGEgYGBtdWx0aXBhcnRgYC4gIElmIHRoZSBwYXJ0IGlzIGEKKyAgICAgIGBgdGV4dGBgIHBhcnQgYW5kICplcnJvcnMqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBlcnJvciBoYW5kbGVyIHdoZW4KKyAgICAgIGRlY29kaW5nIHRoZSBwYXlsb2FkIHRvIHVuaWNvZGUuICBUaGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzCisgICAgICBgYHJlcGxhY2VgYC4KKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQobXNnLCA8J3N0cic+LCBzdWJ0eXBlPSJwbGFpbiIsIGNoYXJzZXQ9J3V0Zi04JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnYnl0ZXMnPiwgbWFpbnR5cGUsIHN1YnR5cGUsIGN0ZT0iYmFzZTY0IiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnTWVzc2FnZSc+LCBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnbGlzdCc+LCBzdWJ0eXBlPSdtaXhlZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorCisgICAgICAgQWRkIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gKm1zZyo6CisKKyAgICAgICBBZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIgd2l0aCBhIGBgbWFpbnR5cGUvc3VidHlwZWBgCisgICAgICAgdmFsdWUuCisKKyAgICAgICAgICAgKiBGb3IgYGBzdHJgYCwgc2V0IHRoZSBNSU1FIGBgbWFpbnR5cGVgYCB0byBgYHRleHRgYCwgYW5kIHNldCB0aGUKKyAgICAgICAgICAgICBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQsIG9yIGBgcGxhaW5gYCBpZiBpdCBpcyBub3QuCisgICAgICAgICAgICogRm9yIGBgYnl0ZXNgYCwgdXNlIHRoZSBzcGVjaWZpZWQgKm1haW50eXBlKiBhbmQgKnN1YnR5cGUqLCBvcgorICAgICAgICAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgICAqIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMsIHNldCB0aGUgbWFpbnR5cGUgdG8KKyAgICAgICAgICAgICBgYG1lc3NhZ2VgYCwgYW5kIHNldCB0aGUgc3VidHlwZSB0byAqc3VidHlwZSogaWYgaXQgaXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgb3IgYGByZmM4MjJgYCBpZiBpdCBpcyBub3QuICBJZiAqc3VidHlwZSogaXMgYGBwYXJ0aWFsYGAsIHJhaXNlIGFuCisgICAgICAgICAgICAgZXJyb3IgKGBgYnl0ZXNgYCBvYmplY3RzIG11c3QgYmUgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgICAgICAgICBgYG1lc3NhZ2UvcGFydGlhbGBgIHBhcnRzKS4KKyAgICAgICAgICAgKiBGb3IgKjwnbGlzdCc+Kiwgd2hpY2ggc2hvdWxkIGJlIGEgbGlzdCBvZgorICAgICAgICAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBgYG1haW50eXBlYGAgdG8KKyAgICAgICAgICAgICBgYG11bHRpcGFydGBgLCBhbmQgdGhlIGBgc3VidHlwZWBgIHRvICpzdWJ0eXBlKiBpZiBpdCBpcworICAgICAgICAgICAgIHNwZWNpZmllZCwgYW5kIGBgbWl4ZWRgYCBpZiBpdCBpcyBub3QuICBJZiB0aGUgbWVzc2FnZSBwYXJ0cyBpbgorICAgICAgICAgICAgIHRoZSAqPCdsaXN0Jz4qIGhhdmUgOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycywgcmVtb3ZlCisgICAgICAgICAgICAgdGhlbS4KKworICAgICAgIElmICpjaGFyc2V0KiBpcyBwcm92aWRlZCAod2hpY2ggaXMgdmFsaWQgb25seSBmb3IgYGBzdHJgYCksIGVuY29kZSB0aGUKKyAgICAgICBzdHJpbmcgdG8gYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0LiAgVGhlIGRlZmF1bHQgaXMKKyAgICAgICBgYHV0Zi04YGAuICBJZiB0aGUgc3BlY2lmaWVkICpjaGFyc2V0KiBpcyBhIGtub3duIGFsaWFzIGZvciBhIHN0YW5kYXJkCisgICAgICAgTUlNRSBjaGFyc2V0IG5hbWUsIHVzZSB0aGUgc3RhbmRhcmQgY2hhcnNldCBpbnN0ZWFkLgorCisgICAgICAgSWYgKmN0ZSogaXMgc2V0LCBlbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IHRyYW5zZmVyCisgICAgICAgZW5jb2RpbmcsIGFuZCBzZXQgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuZGNvZGluZ2AgaGVhZGVyIHRvCisgICAgICAgdGhhdCB2YWx1ZS4gIEZvciBgYHN0cmBgIG9iamVjdHMsIGlmIGl0IGlzIG5vdCBzZXQgdXNlIGhldXJpc3RpY3MgdG8KKyAgICAgICBkZXRlcm1pbmUgdGhlIG1vc3QgY29tcGFjdCBlbmNvZGluZy4gIFBvc3NpYmxlIHZhbHVlcyBmb3IgKmN0ZSogYXJlCisgICAgICAgYGBxdW90ZWQtcHJpbnRhYmxlYGAsIGBgYmFzZTY0YGAsIGBgN2JpdGBgLCBgYDhiaXRgYCwgYW5kIGBgYmluYXJ5YGAuCisgICAgICAgSWYgdGhlIGlucHV0IGNhbm5vdCBiZSBlbmNvZGVkIGluIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgKGVnOiBgYDdiaXRgYCksCisgICAgICAgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYC4gIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgLCBwZXIKKyAgICAgICA6cmZjOmAyMDQ2YCwgcmFpc2UgYW4gZXJyb3IgaWYgYSAqY3RlKiBvZiBgYHF1b3RlZC1wcmludGFibGVgYCBvcgorICAgICAgIGBgYmFzZTY0YGAgaXMgcmVxdWVzdGVkIGZvciAqc3VidHlwZSogYGByZmM4MjJgYCwgYW5kIGZvciBhbnkgKmN0ZSoKKyAgICAgICBvdGhlciB0aGFuIGBgN2JpdGBgIGZvciAqc3VidHlwZSogYGBleHRlcm5hbC1ib2R5YGAuICBGb3IKKyAgICAgICBgYG1lc3NhZ2UvcmZjODIyYGAsIHVzZSBgYDhiaXRgYCBpZiAqY3RlKiBpcyBub3Qgc3BlY2lmaWVkLiAgRm9yIGFsbAorICAgICAgIG90aGVyIHZhbHVlcyBvZiAqc3VidHlwZSosIHVzZSBgYDdiaXRgYC4KKworICAgICAgIC4uIG5vdGU6OiBBICpjdGUqIG9mIGBgYmluYXJ5YGAgZG9lcyBub3QgYWN0dWFsbHkgd29yayBjb3JyZWN0bHkgeWV0LgorICAgICAgICAgIFRoZSBgYE1lc3NhZ2VgYCBvYmplY3QgYXMgbW9kaWZpZWQgYnkgYGBzZXRfY29udGVudGBgIGlzIGNvcnJlY3QsIGJ1dAorICAgICAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgZG9lcyBub3Qgc2VyaWFsaXplIGl0CisgICAgICAgICAgY29ycmVjdGx5LgorCisgICAgICAgSWYgKmRpc3Bvc2l0aW9uKiBpcyBzZXQsIHVzZSBpdCBhcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4gIElmIG5vdCBzcGVjaWZpZWQsIGFuZAorICAgICAgICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCBhZGQgdGhlIGhlYWRlciB3aXRoIHRoZSB2YWx1ZSBgYGF0dGFjaG1lbnRgYC4KKyAgICAgICBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGFuZCAqZmlsZW5hbWUqIGlzIGFsc28gbm90IHNwZWNpZmllZCwgZG8gbm90IGFkZAorICAgICAgIHRoZSBoZWFkZXIuICBUaGUgb25seSB2YWxpZCB2YWx1ZXMgZm9yICpkaXNwb3NpdGlvbiogYXJlIGBgYXR0YWNobWVudGBgCisgICAgICAgYW5kIGBgaW5saW5lYGAuCisKKyAgICAgICBJZiAqZmlsZW5hbWUqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGBmaWxlbmFtZWBgCisgICAgICAgcGFyYW1ldGVyIG9mIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgVGhlcmUgaXMgbm8KKyAgICAgICBkZWZhdWx0LgorCisgICAgICAgSWYgKmNpZCogaXMgc3BlY2lmaWVkLCBhZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgaGVhZGVyIHdpdGgKKyAgICAgICAqY2lkKiBhcyBpdHMgdmFsdWUuCisKKyAgICAgICBJZiAqcGFyYW1zKiBpcyBzcGVjaWZpZWQsIGl0ZXJhdGUgaXRzIGBgaXRlbXNgYCBtZXRob2QgYW5kIHVzZSB0aGUKKyAgICAgICByZXN1bHRpbmcgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycyB0byBzZXQgYWRkaXRpb25hbCBwYXJhbXRlcnMgb24gdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLgorCisgICAgICAgSWYgKmhlYWRlcnMqIGlzIHNwZWNpZmllZCBhbmQgaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAgICAgICBgYGhlYWRlcm5hbWU6IGhlYWRlcnZhbHVlYGAgb3IgYSBsaXN0IG9mIGBgaGVhZGVyYGAgb2JqZWN0cworICAgICAgIChkaXN0aW5ndWlzZWQgZnJvbSBzdHJpbmdzIGJ5IGhhdmluZyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSksIGFkZCB0aGUKKyAgICAgICBoZWFkZXJzIHRvICptc2cqLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAppbmRleCAzMDc1ZTg2Li44NGE1ZjUxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdApAQCAtMzMsMjMgKzMzLDMxIEBACiAKIC4uIGNsYXNzOjogTWVzc2FnZShwb2xpY3k9Y29tcGF0MzIpCiAKLSAgIFRoZSAqcG9saWN5KiBhcmd1bWVudCBkZXRlcm1pZW5zIHRoZSA6bW9kOmB+ZW1haWwucG9saWN5YCB0aGF0IHdpbGwgYmUgdXNlZAotICAgdG8gdXBkYXRlIHRoZSBtZXNzYWdlIG1vZGVsLiAgVGhlIGRlZmF1bHQgdmFsdWUsIDpjbGFzczpgY29tcGF0MzIKLSAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQogICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMgVGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAKLSAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTApCisgICAuLiBtZXRob2Q6OiBhc19zdHJpbmcodW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wLCBwb2xpY3k9Tm9uZSkKIAogICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBzdHJpbmcuICBXaGVuIG9wdGlvbmFsICp1bml4ZnJvbSoKLSAgICAgIGlzIGBgVHJ1ZWBgLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCi0gICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIKLSAgICAgIGNoYW5nZXMgdG8gdGhlIDpjbGFzczpgTWVzc2FnZWAgaWYgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8KLSAgICAgIGNvbXBsZXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byBhIHN0cmluZyAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkKLSAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCkuCisgICAgICBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCisgICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZvciBiYWNrd2FyZCBjb21wYWJpdGlsaXR5IHJlYXNvbnMsCisgICAgICAqbWF4aGVhZGVybGVuKiBkZWZhdWx0cyB0byBgYDBgYCwgc28gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgdmFsdWUgeW91CisgICAgICBtdXN0IG92ZXJyaWRlIGl0IGV4cGxpY2l0bHkgKHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yICptYXhfbGluZV9sZW5ndGgqIGluCisgICAgICB0aGUgcG9saWN5IHdpbGwgYmUgaWdub3JlZCBieSB0aGlzIG1ldGhvZCkuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBgR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KIAogICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCiAgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKQEAgLTY1LDEwICs3Myw1OCBAQAogICAgICAgICAgZy5mbGF0dGVuKG1zZykKICAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCiAKKyAgICAgIElmIHRoZSBtZXNzYWdlIG9iamVjdCBjb250YWlucyBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdCBlbmNvZGVkIGFjY29yZGluZworICAgICAgdG8gUkZDIHN0YW5kYXJkcywgdGhlIG5vbi1jb21wbGlhbnQgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVuaWNvZGUKKyAgICAgICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuICAoU2VlIGFsc28gOm1ldGg6YC5hc19ieXRlc2AgYW5kCisgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgLikKKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgdGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IF9fc3RyX18oKQogCi0gICAgICBFcXVpdmFsZW50IHRvIGBgYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpYGAuCisgICAgICBFcXVpdmFsZW50IHRvIDptZXRoOmAuYXNfc3RyaW5nKClgLiAgQWxsb3dzIGBgc3RyKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworCisgICAuLiBtZXRob2Q6OiBhc19ieXRlcyh1bml4ZnJvbT1GYWxzZSwgcG9saWN5PU5vbmUpCisKKyAgICAgIFJldHVybiB0aGUgZW50aXJlIG1lc3NhZ2UgZmxhdHRlbmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgV2hlbiBvcHRpb25hbAorICAgICAgKnVuaXhmcm9tKiBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZAorICAgICAgc3RyaW5nLiAgKnVuaXhmcm9tKiBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICAgICBgYEJ5dGVzR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKworICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCisgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKKyAgICAgIG5vdCBkbyB0aGUgbWFuZ2xpbmcgb2YgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGBgRnJvbWBgIHRoYXQgaXMKKyAgICAgIHJlcXVpcmVkIGJ5IHRoZSB1bml4IG1ib3ggZm9ybWF0LiAgRm9yIG1vcmUgZmxleGliaWxpdHksIGluc3RhbnRpYXRlIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgaW5zdGFuY2UgYW5kIHVzZSBpdHMKKyAgICAgIDptZXRoOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmZsYXR0ZW5gIG1ldGhvZCBkaXJlY3RseS4KKyAgICAgIEZvciBleGFtcGxlOjoKKworICAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworICAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEJ5dGVzR2VuZXJhdG9yCisgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89VHJ1ZSwgbWF4aGVhZGVybGVuPTYwKQorICAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIG1ldGhvZDo6IF9fYnl0ZXNfXygpCisKKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19ieXRlcygpYC4gIEFsbG93cyBgYGJ5dGVzKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAogICAgLi4gbWV0aG9kOjogaXNfbXVsdGlwYXJ0KCkKQEAgLTQxMCw3ICs0NjYsOCBAQAogICAgICAgdG8gYGBGYWxzZWBgLgogCiAKLSAgIC4uIG1ldGhvZDo6IHNldF9wYXJhbShwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLCBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnKQorICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSkKIAogICAgICAgU2V0IGEgcGFyYW1ldGVyIGluIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuICBJZiB0aGUKICAgICAgIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZSByZXBsYWNlZCB3aXRoCkBAIC00MjcsNiArNDg0LDEyIEBACiAgICAgICBsYW5ndWFnZSwgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgc3RyaW5nLiAgQm90aCAqY2hhcnNldCogYW5kICpsYW5ndWFnZSoKICAgICAgIHNob3VsZCBiZSBzdHJpbmdzLgogCisgICAgICBJZiAqcmVwbGFjZSogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCkgdGhlIGhlYWRlciBpcyBtb3ZlZCB0byB0aGUKKyAgICAgIGVuZCBvZiB0aGUgbGlzdCBvZiBoZWFkZXJzLiAgSWYgKnJlcGxhY2UqIGlzIGBgVHJ1ZWBgLCB0aGUgaGVhZGVyCisgICAgICB3aWxsIGJlIHVwZGF0ZWQgaW4gcGxhY2UuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOiAzLjQgYGByZXBsYWNlYGAga2V5d29yZCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogZGVsX3BhcmFtKHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKaW5kZXggY2IyMDIzYy4uYzJmOWU2YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CkBAIC05Nyw2ICs5NywxNyBAQAogYGBzZW5kbWFpbCdzYGAgYGBzdGRpbmBgLCB3aGVyZSB0aGUgZGVmYXVsdCBwb2xpY3kgd291bGQgdXNlIGBgXG5gYCBsaW5lCiBzZXBhcmF0b3JzLgogCitTb21lIGVtYWlsIHBhY2thZ2UgbWV0aG9kcyBhY2NlcHQgYSAqcG9saWN5KiBrZXl3b3JkIGFyZ3VtZW50LCBhbGxvd2luZyB0aGUKK3BvbGljeSB0byBiZSBvdmVycmlkZGVuIGZvciB0aGF0IG1ldGhvZC4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgdXNlcwordGhlIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2AgbWV0aG9kIG9mIHRoZSAqbXNnKiBvYmplY3QgZnJvbQordGhlIHByZXZpb3VzIGV4YW1wbGUgYW5kIHdyaXRlcyB0aGUgbWVzc2FnZSB0byBhIGZpbGUgdXNpbmcgdGhlIG5hdGl2ZSBsaW5lCitzZXBhcmF0b3JzIGZvciB0aGUgcGxhdGZvcm0gb24gd2hpY2ggaXQgaXMgcnVubmluZzo6CisKKyAgID4+PiBpbXBvcnQgb3MKKyAgID4+PiB3aXRoIG9wZW4oJ2NvbnZlcnRlZC50eHQnLCAnd2InKSBhcyBmOgorICAgLi4uICAgICBmLndyaXRlKG1zZy5hc19ieXRlcyhwb2xpY3k9bXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPW9zLmxpbmVzZXApKSkKKyAgIDE3CisKIFBvbGljeSBvYmplY3RzIGNhbiBhbHNvIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBhZGRpdGlvbiBvcGVyYXRvciwgcHJvZHVjaW5nIGEKIHBvbGljeSBvYmplY3Qgd2hvc2Ugc2V0dGluZ3MgYXJlIGEgY29tYmluYXRpb24gb2YgdGhlIG5vbi1kZWZhdWx0IHZhbHVlcyBvZiB0aGUKIHN1bW1lZCBvYmplY3RzOjoKQEAgLTM2MCw3ICszNzEsNyBAQAogICAgdG8pIDpyZmM6YDUzMjJgLCA6cmZjOmAyMDQ3YCwgYW5kIHRoZSBjdXJyZW50IE1JTUUgUkZDcy4KIAogICAgVGhpcyBwb2xpY3kgYWRkcyBuZXcgaGVhZGVyIHBhcnNpbmcgYW5kIGZvbGRpbmcgYWxnb3JpdGhtcy4gIEluc3RlYWQgb2YKLSAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBjdXN0b20gb2JqZWN0cyB3aXRoIGN1c3RvbSBhdHRyaWJ1dGVzIGRlcGVuZGluZworICAgc2ltcGxlIHN0cmluZ3MsIGhlYWRlcnMgYXJlIGBgc3RyYGAgc3ViY2xhc3NlcyB3aXRoIGF0dHJpYnV0ZXMgdGhhdCBkZXBlbmQKICAgIG9uIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4gIFRoZSBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobSBmdWxseSBpbXBsZW1lbnQKICAgIDpyZmM6YDIwNDdgIGFuZCA6cmZjOmA1MzIyYC4KIApAQCAtMzk3LDYgKzQwOCwyMCBAQAogICAgICAgZmllbGRzIGFyZSB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUKICAgICAgIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbnRlbnRfbWFuYWdlcgorCisgICAgICBBbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQgYW5kIHNldF9jb250ZW50LiAgV2hlbgorICAgICAgdGhlIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50YCBvcgorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NvbnRlbnRgIG1ldGhvZCBvZiBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBpcyBjYWxsZWQsIGl0IGNhbGxzIHRoZQorICAgICAgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cworICAgICAgZmlyc3QgYXJndW1lbnQsIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8gaXQgYXMKKyAgICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgQnkgZGVmYXVsdCBgYGNvbnRlbnRfbWFuYWdlcmBgIGlzIHNldCB0bworICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkIDMuNAorCisKICAgIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWJzdHJhY3QKICAgIG1ldGhvZHMgb2YgOmNsYXNzOmBQb2xpY3lgOgogCkBAIC00MTYsNyArNDQxLDcgQEAKICAgICAgIFRoZSBuYW1lIGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIElmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYSBgYG5hbWVgYAogICAgICAgYXR0cmlidXRlIGFuZCBpdCBtYXRjaGVzICpuYW1lKiBpZ25vcmluZyBjYXNlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKICAgICAgIHVuY2hhbmdlZC4gIE90aGVyd2lzZSB0aGUgKm5hbWUqIGFuZCAqdmFsdWUqIGFyZSBwYXNzZWQgdG8KLSAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQgYXMKKyAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcwogICAgICAgdGhlIHZhbHVlLiAgSW4gdGhpcyBjYXNlIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dCB2YWx1ZQogICAgICAgY29udGFpbnMgQ1Igb3IgTEYgY2hhcmFjdGVycy4KIApAQCAtNDI0LDcgKzQ0OSw3IEBACiAKICAgICAgIElmIHRoZSB2YWx1ZSBoYXMgYSBgYG5hbWVgYCBhdHRyaWJ1dGUsIGl0IGlzIHJldHVybmVkIHRvIHVubW9kaWZpZWQuCiAgICAgICBPdGhlcndpc2UgdGhlICpuYW1lKiwgYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIG9yIExGIGNoYXJhY3RlcnMKLSAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tCisgICAgICByZW1vdmVkLCBhcmUgcGFzc2VkIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nCiAgICAgICBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkLiAgQW55IHN1cnJvZ2F0ZWVzY2FwZWQgYnl0ZXMgZ2V0IHR1cm5lZCBpbnRvCiAgICAgICB0aGUgdW5pY29kZSB1bmtub3duLWNoYXJhY3RlciBnbHlwaC4KIApAQCAtNDM0LDkgKzQ1OSw5IEBACiAgICAgICBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSAnc291cmNlIHZhbHVlJyBpZiBhbmQgb25seSBpZiBpdCBkb2VzIG5vdAogICAgICAgaGF2ZSBhIGBgbmFtZWBgIGF0dHJpYnV0ZSAoaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlIG1lYW5zIGl0IGlzIGEKICAgICAgIGhlYWRlciBvYmplY3Qgb2Ygc29tZSBzb3J0KS4gIElmIGEgc291cmNlIHZhbHVlIG5lZWRzIHRvIGJlIHJlZm9sZGVkCi0gICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBjdXN0b20gaGVhZGVyIG9iamVjdCBieQorICAgICAgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3ksIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGEgaGVhZGVyIG9iamVjdCBieQogICAgICAgcGFzc2luZyB0aGUgKm5hbWUqIGFuZCB0aGUgKnZhbHVlKiB3aXRoIGFueSBDUiBhbmQgTEYgY2hhcmFjdGVycyByZW1vdmVkCi0gICAgICB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLiAgRm9sZGluZyBvZiBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKKyAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgaGVhZGVyIG9iamVjdCBpcyBkb25lIGJ5CiAgICAgICBjYWxsaW5nIGl0cyBgYGZvbGRgYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kuCiAKICAgICAgIFNvdXJjZSB2YWx1ZXMgYXJlIHNwbGl0IGludG8gbGluZXMgdXNpbmcgOm1ldGg6YH5zdHIuc3BsaXRsaW5lc2AuICBJZgpAQCAtNDkxLDIzICs1MTYsMjMgQEAKIHRoZSBlbWFpbCBwYWNrYWdlIGlzIGNoYW5nZWQgZnJvbSB0aGUgUHl0aG9uIDMuMiBBUEkgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogCiAgICAqIFNldHRpbmcgYSBoZWFkZXIgb24gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMgaW4gdGhhdAotICAgICBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCisgICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgaGVhZGVyIG9iamVjdCBjcmVhdGVkLgogCiAgICAqIEZldGNoaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMKLSAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCisgICAgIGluIHRoYXQgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCiAgICAgIHJldHVybmVkLgogCi0gICAqIEFueSBjdXN0b20gaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKKyAgICogQW55IGhlYWRlciBvYmplY3QsIG9yIGFueSBoZWFkZXIgdGhhdCBpcyByZWZvbGRlZCBkdWUgdG8gdGhlCiAgICAgIHBvbGljeSBzZXR0aW5ncywgaXMgZm9sZGVkIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IGZ1bGx5IGltcGxlbWVudHMgdGhlCiAgICAgIFJGQyBmb2xkaW5nIGFsZ29yaXRobXMsIGluY2x1ZGluZyBrbm93aW5nIHdoZXJlIGVuY29kZWQgd29yZHMgYXJlIHJlcXVpcmVkCiAgICAgIGFuZCBhbGxvd2VkLgogCiBGcm9tIHRoZSBhcHBsaWNhdGlvbiB2aWV3LCB0aGlzIG1lYW5zIHRoYXQgYW55IGhlYWRlciBvYnRhaW5lZCB0aHJvdWdoIHRoZQotOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpcyBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IHdpdGggY3VzdG9tCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgaGVhZGVyIG9iamVjdCB3aXRoIGV4dHJhCiBhdHRyaWJ1dGVzLCB3aG9zZSBzdHJpbmcgdmFsdWUgaXMgdGhlIGZ1bGx5IGRlY29kZWQgdW5pY29kZSB2YWx1ZSBvZiB0aGUKIGhlYWRlci4gIExpa2V3aXNlLCBhIGhlYWRlciBtYXkgYmUgYXNzaWduZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmV3IGhlYWRlcgogY3JlYXRlZCwgdXNpbmcgYSB1bmljb2RlIHN0cmluZywgYW5kIHRoZSBwb2xpY3kgd2lsbCB0YWtlIGNhcmUgb2YgY29udmVydGluZwogdGhlIHVuaWNvZGUgc3RyaW5nIGludG8gdGhlIGNvcnJlY3QgUkZDIGVuY29kZWQgZm9ybS4KIAotVGhlIGN1c3RvbSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCitUaGUgaGVhZGVyIG9iamVjdHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBpbgogOm1vZDpgfmVtYWlsLmhlYWRlcnJlZ2lzdHJ5YC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAppbmRleCBhNmNiYmNlLi4zMzFkMmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CkBAIC01Myw2ICs1Myw3IEBACiAgICBlbWFpbC5nZW5lcmF0b3IucnN0CiAgICBlbWFpbC5wb2xpY3kucnN0CiAgICBlbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QKKyAgIGVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdAogICAgZW1haWwubWltZS5yc3QKICAgIGVtYWlsLmhlYWRlci5yc3QKICAgIGVtYWlsLmNoYXJzZXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0IGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU2ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApAQCAtMCwwICsxLDEyNSBAQAorOm1vZDpgZW5zdXJlcGlwYCAtLS0gQm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYCBpbnN0YWxsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGVuc3VyZXBpcAorICAgOnN5bm9wc2lzOiBCb290c3RyYXBwaW5nIHRoZSBgYHBpcGBgIGluc3RhbGxlciBpbnRvIGFuIGV4aXN0aW5nIFB5dGhvbgorICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gb3IgdmlydHVhbCBlbnZpcm9ubWVudC4KKworVGhlIDptb2Q6YGVuc3VyZXBpcGAgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBib290c3RyYXBwaW5nIHRoZSBgYHBpcGBgCitpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoaXMKK2Jvb3RzdHJhcHBpbmcgYXBwcm9hY2ggcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBgYHBpcGBgIGlzIGFuIGluZGVwZW5kZW50Citwcm9qZWN0IHdpdGggaXRzIG93biByZWxlYXNlIGN5Y2xlLCBhbmQgdGhlIGxhdGVzdCBhdmFpbGFibGUgc3RhYmxlIHZlcnNpb24KK2lzIGJ1bmRsZWQgd2l0aCBtYWludGVuYW5jZSBhbmQgZmVhdHVyZSByZWxlYXNlcyBvZiB0aGUgQ1B5dGhvbiByZWZlcmVuY2UKK2ludGVycHJldGVyLgorCitJbiBtb3N0IGNhc2VzLCBlbmQgdXNlcnMgb2YgUHl0aG9uIHNob3VsZG4ndCBuZWVkIHRvIGludm9rZSB0aGlzIG1vZHVsZQorZGlyZWN0bHkgKGFzIGBgcGlwYGAgc2hvdWxkIGJlIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KSwgYnV0IGl0IG1heSBiZQorbmVlZGVkIGlmIGluc3RhbGxpbmcgYGBwaXBgYCB3YXMgc2tpcHBlZCB3aGVuIGluc3RhbGxpbmcgUHl0aG9uIChvcgord2hlbiBjcmVhdGluZyBhIHZpcnR1YWwgZW52aXJvbm1lbnQpIG9yIGFmdGVyIGV4cGxpY2l0bHkgdW5pbnN0YWxsaW5nCitgYHBpcGBgLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlICpkb2VzIG5vdCogYWNjZXNzIHRoZSBpbnRlcm5ldC4gQWxsIG9mIHRoZSBjb21wb25lbnRzCisgICBuZWVkZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgYXJlIGluY2x1ZGVkIGFzIGludGVybmFsIHBhcnRzIG9mIHRoZQorICAgcGFja2FnZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YGluc3RhbGwtaW5kZXhgCisgICAgICBUaGUgZW5kIHVzZXIgZ3VpZGUgZm9yIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzCisKKyAgIDpwZXA6YDQ1M2A6IEV4cGxpY2l0IGJvb3RzdHJhcHBpbmcgb2YgcGlwIGluIFB5dGhvbiBpbnN0YWxsYXRpb25zCisgICAgICBUaGUgb3JpZ2luYWwgcmF0aW9uYWxlIGFuZCBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIG1vZHVsZS4KKworCitDb21tYW5kIGxpbmUgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGlzIGludm9rZWQgdXNpbmcgdGhlIGludGVycHJldGVyJ3MgYGAtbWBgIHN3aXRjaC4KKworVGhlIHNpbXBsZXN0IHBvc3NpYmxlIGludm9jYXRpb24gaXM6OgorCisgICAgcHl0aG9uIC1tIGVuc3VyZXBpcAorCitUaGlzIGludm9jYXRpb24gd2lsbCBpbnN0YWxsIGBgcGlwYGAgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLAorYnV0IG90aGVyd2lzZSBkb2VzIG5vdGhpbmcuIFRvIGVuc3VyZSB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgYGBwaXBgYAoraXMgYXQgbGVhc3QgYXMgcmVjZW50IGFzIHRoZSBvbmUgYnVuZGxlZCB3aXRoIGBgZW5zdXJlcGlwYGAsIHBhc3MgdGhlCitgYC0tdXBncmFkZWBgIG9wdGlvbjo6CisKKyAgICBweXRob24gLW0gZW5zdXJlcGlwIC0tdXBncmFkZQorCitCeSBkZWZhdWx0LCBgYHBpcGBgIGlzIGluc3RhbGxlZCBpbnRvIHRoZSBjdXJyZW50IHZpcnR1YWwgZW52aXJvbm1lbnQKKyhpZiBvbmUgaXMgYWN0aXZlKSBvciBpbnRvIHRoZSBzeXN0ZW0gc2l0ZSBwYWNrYWdlcyAoaWYgdGhlcmUgaXMgbm8KK2FjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50KS4gVGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBjYW4gYmUgY29udHJvbGxlZAordGhyb3VnaCB0d28gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgb3B0aW9uczoKKworKiBgYC0tcm9vdCA8ZGlyPmBgOiBJbnN0YWxscyBgYHBpcGBgIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiByb290IGRpcmVjdG9yeQorICByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50IChpZiBhbnkpCisgIG9yIHRoZSBkZWZhdWx0IHJvb3QgZm9yIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24uCisqIGBgLS11c2VyYGA6IEluc3RhbGxzIGBgcGlwYGAgaW50byB0aGUgdXNlciBzaXRlIHBhY2thZ2VzIGRpcmVjdG9yeSByYXRoZXIKKyAgdGhhbiBnbG9iYWxseSBmb3IgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiAodGhpcyBvcHRpb24gaXMgbm90CisgIHBlcm1pdHRlZCBpbnNpZGUgYW4gYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQpLgorCitCeSBkZWZhdWx0LCB0aGUgc2NyaXB0cyBgYHBpcFhgYCBhbmQgYGBwaXBYLllgYCB3aWxsIGJlIGluc3RhbGxlZCAod2hlcmUKK1guWSBzdGFuZHMgZm9yIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB1c2VkIHRvIGludm9rZSBgYGVuc3VyZXBpcGBgKS4gVGhlCitzY3JpcHRzIGluc3RhbGxlZCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHR3byBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZQorb3B0aW9uczoKKworKiBgYC0tYWx0aW5zdGFsbGBgOiBpZiBhbiBhbHRlcm5hdGUgaW5zdGFsbGF0aW9uIGlzIHJlcXVlc3RlZCwgdGhlIGBgcGlwWGBgCisgIHNjcmlwdCB3aWxsICpub3QqIGJlIGluc3RhbGxlZC4KKworKiBgYC0tZGVmYXVsdC1waXBgYDogaWYgYSAiZGVmYXVsdCBwaXAiIGluc3RhbGxhdGlvbiBpcyByZXF1ZXN0ZWQsIHRoZQorICAgYGBwaXBgYCBzY3JpcHQgd2lsbCBiZSBpbnN0YWxsZWQgaW4gYWRkaXRpb24gdG8gdGhlIHR3byByZWd1bGFyIHNjcmlwdHMuCisKK1Byb3ZpZGluZyBib3RoIG9mIHRoZSBzY3JpcHQgc2VsZWN0aW9uIG9wdGlvbnMgd2lsbCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKworCitNb2R1bGUgQVBJCistLS0tLS0tLS0tCisKKzptb2Q6YGVuc3VyZXBpcGAgZXhwb3NlcyB0d28gZnVuY3Rpb25zIGZvciBwcm9ncmFtbWF0aWMgdXNlOgorCisuLiBmdW5jdGlvbjo6IHZlcnNpb24oKQorCisgICBSZXR1cm5zIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBwaXAgdGhhdCB3aWxsIGJlCisgICBpbnN0YWxsZWQgd2hlbiBib290c3RyYXBwaW5nIGFuIGVudmlyb25tZW50LgorCisuLiBmdW5jdGlvbjo6IGJvb3RzdHJhcChyb290PU5vbmUsIHVwZ3JhZGU9RmFsc2UsIHVzZXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdGluc3RhbGw9RmFsc2UsIGRlZmF1bHRfcGlwPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9MCkKKworICAgQm9vdHN0cmFwcyBgYHBpcGBgIGludG8gdGhlIGN1cnJlbnQgb3IgZGVzaWduYXRlZCBlbnZpcm9ubWVudC4KKworICAgKnJvb3QqIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSByb290IGRpcmVjdG9yeSB0byBpbnN0YWxsIHJlbGF0aXZlIHRvLgorICAgSWYgKnJvb3QqIGlzIE5vbmUsIHRoZW4gaW5zdGFsbGF0aW9uIHVzZXMgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbgorICAgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgorCisgICAqdXBncmFkZSogaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHVwZ3JhZGUgYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uCisgICBvZiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgYGBwaXBgYCB0byB0aGUgYnVuZGxlZCB2ZXJzaW9uLgorCisgICAqdXNlciogaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHRoZSB1c2VyIHNjaGVtZSByYXRoZXIgdGhhbiBpbnN0YWxsaW5nCisgICBnbG9iYWxseS4KKworICAgQnkgZGVmYXVsdCwgdGhlIHNjcmlwdHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgKHdoZXJlCisgICBYLlkgc3RhbmRzIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFB5dGhvbikuCisKKyAgIElmICphbHRpbnN0YWxsKiBpcyBzZXQsIHRoZW4gYGBwaXBYYGAgd2lsbCAqbm90KiBiZSBpbnN0YWxsZWQuCisKKyAgIElmICpkZWZhdWx0X3BpcCogaXMgc2V0LCB0aGVuIGBgcGlwYGAgd2lsbCBiZSBpbnN0YWxsZWQgaW4gYWRkaXRpb24gdG8KKyAgIHRoZSB0d28gcmVndWxhciBzY3JpcHRzLgorCisgICBTZXR0aW5nIGJvdGggKmFsdGluc3RhbGwqIGFuZCAqZGVmYXVsdF9waXAqIHdpbGwgdHJpZ2dlcgorICAgOmV4YzpgVmFsdWVFcnJvcmAuCisKKyAgICp2ZXJib3NpdHkqIGNvbnRyb2xzIHRoZSBsZXZlbCBvZiBvdXRwdXQgdG8gOmRhdGE6YHN5cy5zdGRvdXRgIGZyb20gdGhlCisgICBib290c3RyYXBwaW5nIG9wZXJhdGlvbi4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MgbWF5IGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHJlcXVpcmVkIGJ5CisgICAgICBgYHBpcGBgLCBidXQgb3RoZXIgc29mdHdhcmUgc2hvdWxkIG5vdCBhc3N1bWUgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwKKyAgICAgIGFsd2F5cyBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgKGFzIHRoZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHJlbW92ZWQgaW4gYQorICAgICAgZnV0dXJlIHZlcnNpb24gb2YgYGBwaXBgYCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDMwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApAQCAtMCwwICsxLDY4OCBAQAorOm1vZDpgZW51bWAgLS0tIFN1cHBvcnQgZm9yIGVudW1lcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnVtCisgICA6c3lub3BzaXM6IEltcGxlbWVudGF0aW9uIG9mIGFuIGVudW1lcmF0aW9uIGNsYXNzLgorCisuLiA6bW9kdWxlYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisuLiA6c2VjdGlvbmF1dGhvcjo6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4sCisuLiA6c2VjdGlvbmF1dGhvcjo6IEVsaSBCZW5kZXJza3kgPGVsaWJlbkBnbWFpbC5jb20+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFdGhhbiBGdXJtYW4gPGV0aGFuQHN0b25lbGVhZi51cz4KKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZW51bS5weWAKKworLS0tLS0tLS0tLS0tLS0tLQorCitBbiBlbnVtZXJhdGlvbiBpcyBhIHNldCBvZiBzeW1ib2xpYyBuYW1lcyAobWVtYmVycykgYm91bmQgdG8gdW5pcXVlLCBjb25zdGFudAordmFsdWVzLiAgV2l0aGluIGFuIGVudW1lcmF0aW9uLCB0aGUgbWVtYmVycyBjYW4gYmUgY29tcGFyZWQgYnkgaWRlbnRpdHksIGFuZAordGhlIGVudW1lcmF0aW9uIGl0c2VsZiBjYW4gYmUgaXRlcmF0ZWQgb3Zlci4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZW51bWVyYXRpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB1bmlxdWUKK3NldHMgb2YgbmFtZXMgYW5kIHZhbHVlczogOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYC4gIEl0IGFsc28gZGVmaW5lcworb25lIGRlY29yYXRvciwgOmZ1bmM6YHVuaXF1ZWAsIHRoYXQgZW5zdXJlcyBvbmx5IHVuaXF1ZSBtZW1iZXIgdmFsdWVzIGFyZQorcHJlc2VudCBpbiBhbiBlbnVtZXJhdGlvbi4KKworCitDcmVhdGluZyBhbiBFbnVtCistLS0tLS0tLS0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXgsIHdoaWNoIG1ha2VzIHRoZW0KK2Vhc3kgdG8gcmVhZCBhbmQgd3JpdGUuICBBbiBhbHRlcm5hdGl2ZSBjcmVhdGlvbiBtZXRob2QgaXMgZGVzY3JpYmVkIGluCitgRnVuY3Rpb25hbCBBUElgXy4gIFRvIGRlZmluZSBhbiBlbnVtZXJhdGlvbiwgc3ViY2xhc3MgOmNsYXNzOmBFbnVtYCBhcworZm9sbG93czo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLgorCisuLiBub3RlOjogTm9tZW5jbGF0dXJlCisKKyAgLSBUaGUgY2xhc3MgOmNsYXNzOmBDb2xvcmAgaXMgYW4gKmVudW1lcmF0aW9uKiAob3IgKmVudW0qKQorICAtIFRoZSBhdHRyaWJ1dGVzIDphdHRyOmBDb2xvci5yZWRgLCA6YXR0cjpgQ29sb3IuZ3JlZW5gLCBldGMuLCBhcmUKKyAgICAqZW51bWVyYXRpb24gbWVtYmVycyogKG9yICplbnVtIG1lbWJlcnMqKS4KKyAgLSBUaGUgZW51bSBtZW1iZXJzIGhhdmUgKm5hbWVzKiBhbmQgKnZhbHVlcyogKHRoZSBuYW1lIG9mCisgICAgOmF0dHI6YENvbG9yLnJlZGAgaXMgYGByZWRgYCwgdGhlIHZhbHVlIG9mIDphdHRyOmBDb2xvci5ibHVlYCBpcworICAgIGBgM2BgLCBldGMuKQorCisuLiBub3RlOjoKKworICAgIEV2ZW4gdGhvdWdoIHdlIHVzZSB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXggdG8gY3JlYXRlIEVudW1zLCBFbnVtcworICAgIGFyZSBub3Qgbm9ybWFsIFB5dGhvbiBjbGFzc2VzLiAgU2VlIGBIb3cgYXJlIEVudW1zIGRpZmZlcmVudD9gXyBmb3IKKyAgICBtb3JlIGRldGFpbHMuCisKK0VudW1lcmF0aW9uIG1lbWJlcnMgaGF2ZSBodW1hbiByZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zOjoKKworICAgID4+PiBwcmludChDb2xvci5yZWQpCisgICAgQ29sb3IucmVkCisKKy4uLndoaWxlIHRoZWlyIGBgcmVwcmBgIGhhcyBtb3JlIGluZm9ybWF0aW9uOjoKKworICAgID4+PiBwcmludChyZXByKENvbG9yLnJlZCkpCisgICAgPENvbG9yLnJlZDogMT4KKworVGhlICp0eXBlKiBvZiBhbiBlbnVtZXJhdGlvbiBtZW1iZXIgaXMgdGhlIGVudW1lcmF0aW9uIGl0IGJlbG9uZ3MgdG86OgorCisgICAgPj4+IHR5cGUoQ29sb3IucmVkKQorICAgIDxlbnVtICdDb2xvcic+CisgICAgPj4+IGlzaW5zdGFuY2UoQ29sb3IuZ3JlZW4sIENvbG9yKQorICAgIFRydWUKKyAgICA+Pj4KKworRW51bSBtZW1iZXJzIGFsc28gaGF2ZSBhIHByb3BlcnR5IHRoYXQgY29udGFpbnMganVzdCB0aGVpciBpdGVtIG5hbWU6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZC5uYW1lKQorICAgIHJlZAorCitFbnVtZXJhdGlvbnMgc3VwcG9ydCBpdGVyYXRpb24sIGluIGRlZmluaXRpb24gb3JkZXI6OgorCisgICAgPj4+IGNsYXNzIFNoYWtlKEVudW0pOgorICAgIC4uLiAgICAgdmFuaWxsYSA9IDcKKyAgICAuLi4gICAgIGNob2NvbGF0ZSA9IDQKKyAgICAuLi4gICAgIGNvb2tpZXMgPSA5CisgICAgLi4uICAgICBtaW50ID0gMworICAgIC4uLgorICAgID4+PiBmb3Igc2hha2UgaW4gU2hha2U6CisgICAgLi4uICAgICBwcmludChzaGFrZSkKKyAgICAuLi4KKyAgICBTaGFrZS52YW5pbGxhCisgICAgU2hha2UuY2hvY29sYXRlCisgICAgU2hha2UuY29va2llcworICAgIFNoYWtlLm1pbnQKKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgaGFzaGFibGUsIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gZGljdGlvbmFyaWVzIGFuZCBzZXRzOjoKKworICAgID4+PiBhcHBsZXMgPSB7fQorICAgID4+PiBhcHBsZXNbQ29sb3IucmVkXSA9ICdyZWQgZGVsaWNpb3VzJworICAgID4+PiBhcHBsZXNbQ29sb3IuZ3JlZW5dID0gJ2dyYW5ueSBzbWl0aCcKKyAgICA+Pj4gYXBwbGVzID09IHtDb2xvci5yZWQ6ICdyZWQgZGVsaWNpb3VzJywgQ29sb3IuZ3JlZW46ICdncmFubnkgc21pdGgnfQorICAgIFRydWUKKworCitQcm9ncmFtbWF0aWMgYWNjZXNzIHRvIGVudW1lcmF0aW9uIG1lbWJlcnMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQncyB1c2VmdWwgdG8gYWNjZXNzIG1lbWJlcnMgaW4gZW51bWVyYXRpb25zIHByb2dyYW1tYXRpY2FsbHkgKGkuZS4KK3NpdHVhdGlvbnMgd2hlcmUgYGBDb2xvci5yZWRgYCB3b24ndCBkbyBiZWNhdXNlIHRoZSBleGFjdCBjb2xvciBpcyBub3Qga25vd24KK2F0IHByb2dyYW0td3JpdGluZyB0aW1lKS4gIGBgRW51bWBgIGFsbG93cyBzdWNoIGFjY2Vzczo6CisKKyAgICA+Pj4gQ29sb3IoMSkKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvcigzKQorICAgIDxDb2xvci5ibHVlOiAzPgorCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZW51bSBtZW1iZXJzIGJ5ICpuYW1lKiwgdXNlIGl0ZW0gYWNjZXNzOjoKKworICAgID4+PiBDb2xvclsncmVkJ10KKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvclsnZ3JlZW4nXQorICAgIDxDb2xvci5ncmVlbjogMj4KKworSWYgaGF2ZSBhbiBlbnVtIG1lbWJlciBhbmQgbmVlZCBpdHMgOmF0dHI6YG5hbWVgIG9yIDphdHRyOmB2YWx1ZWA6OgorCisgICAgPj4+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+IEZydWl0LnRvbWF0byBpcyBsb2FkcyhkdW1wcyhGcnVpdC50b21hdG8pKQorICAgIFRydWUKKworVGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgcGlja2xpbmcgYXBwbHk6IHBpY2tsYWJsZSBlbnVtcyBtdXN0IGJlIGRlZmluZWQgaW4KK3RoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIHNpbmNlIHVucGlja2xpbmcgcmVxdWlyZXMgdGhlbSB0byBiZSBpbXBvcnRhYmxlCitmcm9tIHRoYXQgbW9kdWxlLgorCisuLiB3YXJuaW5nOjoKKworICAgIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIHNpbmdsZXRvbiBuYXR1cmUgb2YgZW51bWVyYXRpb24gbWVtYmVycywgcGlja2xlCisgICAgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGhpZ2hlciBtdXN0IGJlIHVzZWQuCisKKworRnVuY3Rpb25hbCBBUEkKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEVudW1gIGNsYXNzIGlzIGNhbGxhYmxlLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIEFQSTo6CisKKyAgICA+Pj4gQW5pbWFsID0gRW51bSgnQW5pbWFsJywgJ2FudCBiZWUgY2F0IGRvZycpCisgICAgPj4+IEFuaW1hbAorICAgIDxlbnVtICdBbmltYWwnPgorICAgID4+PiBBbmltYWwuYW50CisgICAgPEFuaW1hbC5hbnQ6IDE+CisgICAgPj4+IEFuaW1hbC5hbnQudmFsdWUKKyAgICAxCisgICAgPj4+IGxpc3QoQW5pbWFsKQorICAgIFs8QW5pbWFsLmFudDogMT4sIDxBbmltYWwuYmVlOiAyPiwgPEFuaW1hbC5jYXQ6IDM+LCA8QW5pbWFsLmRvZzogND5dCisKK1RoZSBzZW1hbnRpY3Mgb2YgdGhpcyBBUEkgcmVzZW1ibGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAuIFRoZSBmaXJzdAorYXJndW1lbnQgb2YgdGhlIGNhbGwgdG8gOmNsYXNzOmBFbnVtYCBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRpb24uCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlICpzb3VyY2UqIG9mIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4gIEl0IGNhbiBiZSBhCit3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YKKzItdHVwbGVzIHdpdGgga2V5L3ZhbHVlIHBhaXJzLCBvciBhIG1hcHBpbmcgKGUuZy4gZGljdGlvbmFyeSkgb2YgbmFtZXMgdG8KK3ZhbHVlcy4gIFRoZSBsYXN0IHR3byBvcHRpb25zIGVuYWJsZSBhc3NpZ25pbmcgYXJiaXRyYXJ5IHZhbHVlcyB0bworZW51bWVyYXRpb25zOyB0aGUgb3RoZXJzIGF1dG8tYXNzaWduIGluY3JlYXNpbmcgaW50ZWdlcnMgc3RhcnRpbmcgd2l0aCAxLiAgQQorbmV3IGNsYXNzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YEVudW1gIGlzIHJldHVybmVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBhYm92ZQorYXNzaWdubWVudCB0byA6Y2xhc3M6YEFuaW1hbGAgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICA+Pj4gY2xhc3MgQW5pbWFscyhFbnVtKToKKyAgICAuLi4gICAgIGFudCA9IDEKKyAgICAuLi4gICAgIGJlZSA9IDIKKyAgICAuLi4gICAgIGNhdCA9IDMKKyAgICAuLi4gICAgIGRvZyA9IDQKKyAgICAuLi4KKworVGhlIHJlYXNvbiBmb3IgZGVmYXVsdGluZyB0byBgYDFgYCBhcyB0aGUgc3RhcnRpbmcgbnVtYmVyIGFuZCBub3QgYGAwYGAgaXMKK3RoYXQgYGAwYGAgaXMgYGBGYWxzZWBgIGluIGEgYm9vbGVhbiBzZW5zZSwgYnV0IGVudW0gbWVtYmVycyBhbGwgZXZhbHVhdGUKK3RvIGBgVHJ1ZWBgLgorCitQaWNrbGluZyBlbnVtcyBjcmVhdGVkIHdpdGggdGhlIGZ1bmN0aW9uYWwgQVBJIGNhbiBiZSB0cmlja3kgYXMgZnJhbWUgc3RhY2sKK2ltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHVzZWQgdG8gdHJ5IGFuZCBmaWd1cmUgb3V0IHdoaWNoIG1vZHVsZSB0aGUKK2VudW1lcmF0aW9uIGlzIGJlaW5nIGNyZWF0ZWQgaW4gKGUuZy4gaXQgd2lsbCBmYWlsIGlmIHlvdSB1c2UgYSB1dGlsaXR5CitmdW5jdGlvbiBpbiBzZXBhcmF0ZSBtb2R1bGUsIGFuZCBhbHNvIG1heSBub3Qgd29yayBvbiBJcm9uUHl0aG9uIG9yIEp5dGhvbikuCitUaGUgc29sdXRpb24gaXMgdG8gc3BlY2lmeSB0aGUgbW9kdWxlIG5hbWUgZXhwbGljaXRseSBhcyBmb2xsb3dzOjoKKworICAgID4+PiBBbmltYWxzID0gRW51bSgnQW5pbWFscycsICdhbnQgYmVlIGNhdCBkb2cnLCBtb2R1bGU9X19uYW1lX18pCisKK0Rlcml2ZWQgRW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRFbnVtCiteXl5eXl5eCisKK0EgdmFyaWF0aW9uIG9mIDpjbGFzczpgRW51bWAgaXMgcHJvdmlkZWQgd2hpY2ggaXMgYWxzbyBhIHN1YmNsYXNzIG9mCis6Y2xhc3M6YGludGAuICBNZW1iZXJzIG9mIGFuIDpjbGFzczpgSW50RW51bWAgY2FuIGJlIGNvbXBhcmVkIHRvIGludGVnZXJzOworYnkgZXh0ZW5zaW9uLCBpbnRlZ2VyIGVudW1lcmF0aW9ucyBvZiBkaWZmZXJlbnQgdHlwZXMgY2FuIGFsc28gYmUgY29tcGFyZWQKK3RvIGVhY2ggb3RoZXI6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgSW50RW51bQorICAgID4+PiBjbGFzcyBTaGFwZShJbnRFbnVtKToKKyAgICAuLi4gICAgIGNpcmNsZSA9IDEKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgUmVxdWVzdChJbnRFbnVtKToKKyAgICAuLi4gICAgIHBvc3QgPSAxCisgICAgLi4uICAgICBnZXQgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlID09IDEKKyAgICBGYWxzZQorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gMQorICAgIFRydWUKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IFJlcXVlc3QucG9zdAorICAgIFRydWUKKworSG93ZXZlciwgdGhleSBzdGlsbCBjYW4ndCBiZSBjb21wYXJlZCB0byBzdGFuZGFyZCA6Y2xhc3M6YEVudW1gIGVudW1lcmF0aW9uczo6CisKKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBDb2xvci5yZWQKKyAgICBGYWxzZQorCis6Y2xhc3M6YEludEVudW1gIHZhbHVlcyBiZWhhdmUgbGlrZSBpbnRlZ2VycyBpbiBvdGhlciB3YXlzIHlvdSdkIGV4cGVjdDo6CisKKyAgICA+Pj4gaW50KFNoYXBlLmNpcmNsZSkKKyAgICAxCisgICAgPj4+IFsnYScsICdiJywgJ2MnXVtTaGFwZS5jaXJjbGVdCisgICAgJ2InCisgICAgPj4+IFtpIGZvciBpIGluIHJhbmdlKFNoYXBlLnNxdWFyZSldCisgICAgWzAsIDFdCisKK0ZvciB0aGUgdmFzdCBtYWpvcml0eSBvZiBjb2RlLCA6Y2xhc3M6YEVudW1gIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLAorc2luY2UgOmNsYXNzOmBJbnRFbnVtYCBicmVha3Mgc29tZSBzZW1hbnRpYyBwcm9taXNlcyBvZiBhbiBlbnVtZXJhdGlvbiAoYnkKK2JlaW5nIGNvbXBhcmFibGUgdG8gaW50ZWdlcnMsIGFuZCB0aHVzIGJ5IHRyYW5zaXRpdml0eSB0byBvdGhlcgordW5yZWxhdGVkIGVudW1lcmF0aW9ucykuICBJdCBzaG91bGQgYmUgdXNlZCBvbmx5IGluIHNwZWNpYWwgY2FzZXMgd2hlcmUKK3RoZXJlJ3Mgbm8gb3RoZXIgY2hvaWNlOyBmb3IgZXhhbXBsZSwgd2hlbiBpbnRlZ2VyIGNvbnN0YW50cyBhcmUKK3JlcGxhY2VkIHdpdGggZW51bWVyYXRpb25zIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoIGNvZGUKK3RoYXQgc3RpbGwgZXhwZWN0cyBpbnRlZ2Vycy4KKworCitPdGhlcnMKK15eXl5eXgorCitXaGlsZSA6Y2xhc3M6YEludEVudW1gIGlzIHBhcnQgb2YgdGhlIDptb2Q6YGVudW1gIG1vZHVsZSwgaXQgd291bGQgYmUgdmVyeQorc2ltcGxlIHRvIGltcGxlbWVudCBpbmRlcGVuZGVudGx5OjoKKworICAgIGNsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgcGFzcworCitUaGlzIGRlbW9uc3RyYXRlcyBob3cgc2ltaWxhciBkZXJpdmVkIGVudW1lcmF0aW9ucyBjYW4gYmUgZGVmaW5lZDsgZm9yIGV4YW1wbGUKK2EgOmNsYXNzOmBTdHJFbnVtYCB0aGF0IG1peGVzIGluIDpjbGFzczpgc3RyYCBpbnN0ZWFkIG9mIDpjbGFzczpgaW50YC4KKworU29tZSBydWxlczoKKworMS4gV2hlbiBzdWJjbGFzc2luZyA6Y2xhc3M6YEVudW1gLCBtaXgtaW4gdHlwZXMgbXVzdCBhcHBlYXIgYmVmb3JlCisgICA6Y2xhc3M6YEVudW1gIGl0c2VsZiBpbiB0aGUgc2VxdWVuY2Ugb2YgYmFzZXMsIGFzIGluIHRoZSA6Y2xhc3M6YEludEVudW1gCisgICBleGFtcGxlIGFib3ZlLgorMi4gV2hpbGUgOmNsYXNzOmBFbnVtYCBjYW4gaGF2ZSBtZW1iZXJzIG9mIGFueSB0eXBlLCBvbmNlIHlvdSBtaXggaW4gYW4KKyAgIGFkZGl0aW9uYWwgdHlwZSwgYWxsIHRoZSBtZW1iZXJzIG11c3QgaGF2ZSB2YWx1ZXMgb2YgdGhhdCB0eXBlLCBlLmcuCisgICA6Y2xhc3M6YGludGAgYWJvdmUuICBUaGlzIHJlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIG1peC1pbnMgd2hpY2ggb25seQorICAgYWRkIG1ldGhvZHMgYW5kIGRvbid0IHNwZWNpZnkgYW5vdGhlciBkYXRhIHR5cGUgc3VjaCBhcyA6Y2xhc3M6YGludGAgb3IKKyAgIDpjbGFzczpgc3RyYC4KKzMuIFdoZW4gYW5vdGhlciBkYXRhIHR5cGUgaXMgbWl4ZWQgaW4sIHRoZSA6YXR0cjpgdmFsdWVgIGF0dHJpYnV0ZSBpcyAqbm90IHRoZQorICAgc2FtZSogYXMgdGhlIGVudW0gbWVtYmVyIGl0c2VsZiwgYWx0aG91Z2ggaXQgaXMgZXF1aXZhbGFudCBhbmQgd2lsbCBjb21wYXJlCisgICBlcXVhbC4KKzQuICUtc3R5bGUgZm9ybWF0dGluZzogIGAlc2AgYW5kIGAlcmAgY2FsbCA6Y2xhc3M6YEVudW1gJ3MgOm1ldGg6YF9fc3RyX19gIGFuZAorICAgOm1ldGg6YF9fcmVwcl9fYCByZXNwZWN0aXZlbHk7IG90aGVyIGNvZGVzIChzdWNoIGFzIGAlaWAgb3IgYCVoYCBmb3IKKyAgIEludEVudW0pIHRyZWF0IHRoZSBlbnVtIG1lbWJlciBhcyBpdHMgbWl4ZWQtaW4gdHlwZS4KKzUuIDptZXRoOmBzdHIuX19mb3JtYXRfX2AgKG9yIDpmdW5jOmBmb3JtYXRgKSB3aWxsIHVzZSB0aGUgbWl4ZWQtaW4KKyAgIHR5cGUncyA6bWV0aDpgX19mb3JtYXRfX2AuICBJZiB0aGUgOmNsYXNzOmBFbnVtYCdzIDpmdW5jOmBzdHJgIG9yCisgICA6ZnVuYzpgcmVwcmAgaXMgZGVzaXJlZCB1c2UgdGhlIGAhc2Agb3IgYCFyYCA6Y2xhc3M6YHN0cmAgZm9ybWF0IGNvZGVzLgorCisKK0ludGVyZXN0aW5nIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSA6Y2xhc3M6YEVudW1gIGFuZCA6Y2xhc3M6YEludEVudW1gIGFyZSBleHBlY3RlZCB0byBjb3ZlciB0aGUgbWFqb3JpdHkgb2YKK3VzZS1jYXNlcywgdGhleSBjYW5ub3QgY292ZXIgdGhlbSBhbGwuICBIZXJlIGFyZSByZWNpcGVzIGZvciBzb21lIGRpZmZlcmVudAordHlwZXMgb2YgZW51bWVyYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHksIG9yIGFzIGV4YW1wbGVzIGZvciBjcmVhdGluZworb25lJ3Mgb3duLgorCisKK0F1dG9OdW1iZXIKK15eXl5eXl5eXl4KKworQXZvaWRzIGhhdmluZyB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgZWFjaCBlbnVtZXJhdGlvbiBtZW1iZXI6OgorCisgICAgPj4+IGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgLi4uICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgIC4uLiAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgLi4uICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgIC4uLiAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gb2JqCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEF1dG9OdW1iZXIpOgorICAgIC4uLiAgICAgcmVkID0gKCkKKyAgICAuLi4gICAgIGdyZWVuID0gKCkKKyAgICAuLi4gICAgIGJsdWUgPSAoKQorICAgIC4uLgorICAgID4+PiBDb2xvci5ncmVlbi52YWx1ZSA9PSAyCisgICAgVHJ1ZQorCisuLiBub3RlOjoKKworICAgIFRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kLCBpZiBkZWZpbmVkLCBpcyB1c2VkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgRW51bQorICAgIG1lbWJlcnM7IGl0IGlzIHRoZW4gcmVwbGFjZWQgYnkgRW51bSdzIDptZXRoOmBfX25ld19fYCB3aGljaCBpcyB1c2VkIGFmdGVyCisgICAgY2xhc3MgY3JlYXRpb24gZm9yIGxvb2t1cCBvZiBleGlzdGluZyBtZW1iZXJzLiAgRHVlIHRvIHRoZSB3YXkgRW51bXMgYXJlCisgICAgc3VwcG9zZWQgdG8gYmVoYXZlLCB0aGVyZSBpcyBubyB3YXkgdG8gY3VzdG9taXplIEVudW0ncyA6bWV0aDpgX19uZXdfX2AuCisKKworT3JkZXJlZEVudW0KK15eXl5eXl5eXl5eCisKK0FuIG9yZGVyZWQgZW51bWVyYXRpb24gdGhhdCBpcyBub3QgYmFzZWQgb24gOmNsYXNzOmBJbnRFbnVtYCBhbmQgc28gbWFpbnRhaW5zCit0aGUgbm9ybWFsIDpjbGFzczpgRW51bWAgaW52YXJpYW50cyAoc3VjaCBhcyBub3QgYmVpbmcgY29tcGFyYWJsZSB0byBvdGhlcgorZW51bWVyYXRpb25zKTo6CisKKyAgICA+Pj4gY2xhc3MgT3JkZXJlZEVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLgorICAgID4+PiBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgLi4uICAgICBBID0gNQorICAgIC4uLiAgICAgQiA9IDQKKyAgICAuLi4gICAgIEMgPSAzCisgICAgLi4uICAgICBEID0gMgorICAgIC4uLiAgICAgRiA9IDEKKyAgICAuLi4KKyAgICA+Pj4gR3JhZGUuQyA8IEdyYWRlLkEKKyAgICBUcnVlCisKKworRHVwbGljYXRlRnJlZUVudW0KK15eXl5eXl5eXl5eXl5eXl5eCisKK1JhaXNlcyBhbiBlcnJvciBpZiBhIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZSBpcyBmb3VuZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFuCithbGlhczo6CisKKyAgICA+Pj4gY2xhc3MgRHVwbGljYXRlRnJlZUVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgIC4uLiAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgLi4uICAgICAgICAgaWYgYW55KHNlbGYudmFsdWUgPT0gZS52YWx1ZSBmb3IgZSBpbiBjbHMpOgorICAgIC4uLiAgICAgICAgICAgICBhID0gc2VsZi5uYW1lCisgICAgLi4uICAgICAgICAgICAgIGUgPSBjbHMoc2VsZi52YWx1ZSkubmFtZQorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgIC4uLiAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAlciAtLT4gJXIiCisgICAgLi4uICAgICAgICAgICAgICAgICAlIChhLCBlKSkKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRHVwbGljYXRlRnJlZUVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLiAgICAgZ3JlbmUgPSAyCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAnZ3JlbmUnIC0tPiAnZ3JlZW4nCisKKy4uIG5vdGU6OgorCisgICAgVGhpcyBpcyBhIHVzZWZ1bCBleGFtcGxlIGZvciBzdWJjbGFzc2luZyBFbnVtIHRvIGFkZCBvciBjaGFuZ2Ugb3RoZXIKKyAgICBiZWhhdmlvcnMgYXMgd2VsbCBhcyBkaXNhbGxvd2luZyBhbGlhc2VzLiAgSWYgdGhlIG9ubHkgZGVzaXJlZCBjaGFuZ2UgaXMKKyAgICBkaXNhbGxvd2luZyBhbGlhc2VzLCB0aGUgOmZ1bmM6YHVuaXF1ZWAgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKworUGxhbmV0CiteXl5eXl4KKworSWYgOm1ldGg6YF9fbmV3X19gIG9yIDptZXRoOmBfX2luaXRfX2AgaXMgZGVmaW5lZCB0aGUgdmFsdWUgb2YgdGhlIGVudW0gbWVtYmVyCit3aWxsIGJlIHBhc3NlZCB0byB0aG9zZSBtZXRob2RzOjoKKworICAgID4+PiBjbGFzcyBQbGFuZXQoRW51bSk6CisgICAgLi4uICAgICBNRVJDVVJZID0gKDMuMzAzZSsyMywgMi40Mzk3ZTYpCisgICAgLi4uICAgICBWRU5VUyAgID0gKDQuODY5ZSsyNCwgNi4wNTE4ZTYpCisgICAgLi4uICAgICBFQVJUSCAgID0gKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KQorICAgIC4uLiAgICAgTUFSUyAgICA9ICg2LjQyMWUrMjMsIDMuMzk3MmU2KQorICAgIC4uLiAgICAgSlVQSVRFUiA9ICgxLjllKzI3LCAgIDcuMTQ5MmU3KQorICAgIC4uLiAgICAgU0FUVVJOICA9ICg1LjY4OGUrMjYsIDYuMDI2OGU3KQorICAgIC4uLiAgICAgVVJBTlVTICA9ICg4LjY4NmUrMjUsIDIuNTU1OWU3KQorICAgIC4uLiAgICAgTkVQVFVORSA9ICgxLjAyNGUrMjYsIDIuNDc0NmU3KQorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3MsIHJhZGl1cyk6CisgICAgLi4uICAgICAgICAgc2VsZi5tYXNzID0gbWFzcyAgICAgICAjIGluIGtpbG9ncmFtcworICAgIC4uLiAgICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzICAgIyBpbiBtZXRlcnMKKyAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgIC4uLiAgICAgZGVmIHN1cmZhY2VfZ3Jhdml0eShzZWxmKToKKyAgICAuLi4gICAgICAgICAjIHVuaXZlcnNhbCBncmF2aXRhdGlvbmFsIGNvbnN0YW50ICAobTMga2ctMSBzLTIpCisgICAgLi4uICAgICAgICAgRyA9IDYuNjczMDBFLTExCisgICAgLi4uICAgICAgICAgcmV0dXJuIEcgKiBzZWxmLm1hc3MgLyAoc2VsZi5yYWRpdXMgKiBzZWxmLnJhZGl1cykKKyAgICAuLi4KKyAgICA+Pj4gUGxhbmV0LkVBUlRILnZhbHVlCisgICAgKDUuOTc2ZSsyNCwgNjM3ODE0MC4wKQorICAgID4+PiBQbGFuZXQuRUFSVEguc3VyZmFjZV9ncmF2aXR5CisgICAgOS44MDI2NTI3NDMzMzcxMjkKKworCitIb3cgYXJlIEVudW1zIGRpZmZlcmVudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbnVtcyBoYXZlIGEgY3VzdG9tIG1ldGFjbGFzcyB0aGF0IGFmZmVjdHMgbWFueSBhc3BlY3RzIG9mIGJvdGggZGVyaXZlZCBFbnVtCitjbGFzc2VzIGFuZCB0aGVpciBpbnN0YW5jZXMgKG1lbWJlcnMpLgorCisKK0VudW0gQ2xhc3NlcworXl5eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YEVudW1NZXRhYCBtZXRhY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUKKzptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19kaXJfX2AsIDptZXRoOmBfX2l0ZXJfX2AgYW5kIG90aGVyIG1ldGhvZHMgdGhhdAorYWxsb3cgb25lIHRvIGRvIHRoaW5ncyB3aXRoIGFuIDpjbGFzczpgRW51bWAgY2xhc3MgdGhhdCBmYWlsIG9uIGEgdHlwaWNhbAorY2xhc3MsIHN1Y2ggYXMgYGxpc3QoQ29sb3IpYCBvciBgc29tZV92YXIgaW4gQ29sb3JgLiAgOmNsYXNzOmBFbnVtTWV0YWAgaXMKK3Jlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHZhcmlvdXMgb3RoZXIgbWV0aG9kcyBvbiB0aGUgZmluYWwgOmNsYXNzOmBFbnVtYAorY2xhc3MgYXJlIGNvcnJlY3QgKHN1Y2ggYXMgOm1ldGg6YF9fbmV3X19gLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLAorOm1ldGg6YF9fc3RyX19gIGFuZCA6bWV0aDpgX19yZXByX19gKQorCisKK0VudW0gTWVtYmVycyAoYWthIGluc3RhbmNlcykKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgRW51bSBtZW1iZXJzIGlzIHRoYXQgdGhleSBhcmUgc2luZ2xldG9ucy4KKzpjbGFzczpgRW51bU1ldGFgIGNyZWF0ZXMgdGhlbSBhbGwgd2hpbGUgaXQgaXMgY3JlYXRpbmcgdGhlIDpjbGFzczpgRW51bWAKK2NsYXNzIGl0c2VsZiwgYW5kIHRoZW4gcHV0cyBhIGN1c3RvbSA6bWV0aDpgX19uZXdfX2AgaW4gcGxhY2UgdG8gZW5zdXJlCit0aGF0IG5vIG5ldyBvbmVzIGFyZSBldmVyIGluc3RhbnRpYXRlZCBieSByZXR1cm5pbmcgb25seSB0aGUgZXhpc3RpbmcKK21lbWJlciBpbnN0YW5jZXMuCisKKworRmluZXIgUG9pbnRzCiteXl5eXl5eXl5eXl4KKworRW51bSBtZW1iZXJzIGFyZSBpbnN0YW5jZXMgb2YgYW4gRW51bSBjbGFzcywgYW5kIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCithY2Nlc3NpYmxlIGFzIGBFbnVtQ2xhc3MubWVtYmVyYCwgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbQordGhlIG1lbWJlcjo6CisKKyAgICA+Pj4gQ29sb3IucmVkCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3IucmVkLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgQXR0cmlidXRlRXJyb3I6ICdDb2xvcicgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2JsdWUnCisKK0xpa2V3aXNlLCB0aGUgOmF0dHI6YF9fbWVtYmVyc19fYCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MuCisKK0lmIHlvdSBnaXZlIHlvdXIgOmNsYXNzOmBFbnVtYCBzdWJjbGFzcyBleHRyYSBtZXRob2RzLCBsaWtlIHRoZSBgUGxhbmV0YF8KK2NsYXNzIGFib3ZlLCB0aG9zZSBtZXRob2RzIHdpbGwgc2hvdyB1cCBpbiBhIDpmdW5jOmBkaXJgIG9mIHRoZSBtZW1iZXIsCitidXQgbm90IG9mIHRoZSBjbGFzczo6CisKKyAgICA+Pj4gZGlyKFBsYW5ldCkKKyAgICBbJ0VBUlRIJywgJ0pVUElURVInLCAnTUFSUycsICdNRVJDVVJZJywgJ05FUFRVTkUnLCAnU0FUVVJOJywgJ1VSQU5VUycsICdWRU5VUycsICdfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10KKyAgICA+Pj4gZGlyKFBsYW5ldC5FQVJUSCkKKyAgICBbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICdzdXJmYWNlX2dyYXZpdHknLCAndmFsdWUnXQorCitBIDptZXRoOmBfX25ld19fYCBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUKKzpjbGFzczpgRW51bWAgbWVtYmVycyAtLSBhZnRlciB0aGF0IGl0IGlzIHJlcGxhY2VkLiAgVGhpcyBtZWFucyBpZiB5b3Ugd2lzaCB0bworY2hhbmdlIGhvdyA6Y2xhc3M6YEVudW1gIG1lbWJlcnMgYXJlIGxvb2tlZCB1cCB5b3UgZWl0aGVyIGhhdmUgdG8gd3JpdGUgYQoraGVscGVyIGZ1bmN0aW9uIG9yIGEgOmZ1bmM6YGNsYXNzbWV0aG9kYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggNmU0NTU5Yy4uNzA0YWJiYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTI1OSw2ICsyNTksMTIgQEAKICAgICAgIDpleGM6YFZNU0Vycm9yYCwgOmV4Yzpgc29ja2V0LmVycm9yYCwgOmV4Yzpgc2VsZWN0LmVycm9yYCBhbmQKICAgICAgIDpleGM6YG1tYXAuZXJyb3JgIGhhdmUgYmVlbiBtZXJnZWQgaW50byA6ZXhjOmBPU0Vycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgICAgVGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIGlzIG5vdyB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHBhc3NlZCB0bworICAgICAgdGhlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGVuY29kZWQgdG8gb3IgZGVjb2RlZCBmcm9tIHRoZQorICAgICAgZmlsZXN5c3RlbSBlbmNvZGluZy4KKwogCiAuLiBleGNlcHRpb246OiBPdmVyZmxvd0Vycm9yCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CmluZGV4IDNjMzM2MjEuLjYxYmM1MDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdApAQCAtMjcsNiArMjcsNyBAQAogKiBPbmx5IHRoZSBmaWxlbmFtZSwgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBsaW5lIG51bWJlciBhcmUKICAgZGlzcGxheWVkLiAobm8gc291cmNlIGNvZGUpCiAqIEl0IGlzIGxpbWl0ZWQgdG8gMTAwIGZyYW1lcyBhbmQgMTAwIHRocmVhZHMuCisqIFRoZSBvcmRlciBpcyByZXZlcnNlZDogdGhlIG1vc3QgcmVjZW50IGNhbGwgaXMgc2hvd24gZmlyc3QuCiAKIEJ5IGRlZmF1bHQsIHRoZSBQeXRob24gdHJhY2ViYWNrIGlzIHdyaXR0ZW4gdG8gOmRhdGE6YHN5cy5zdGRlcnJgLiBUbyBzZWUKIHRyYWNlYmFja3MsIGFwcGxpY2F0aW9ucyBtdXN0IGJlIHJ1biBpbiB0aGUgdGVybWluYWwuIEEgbG9nIGZpbGUgY2FuCkBAIC0xMjksNyArMTMwLDcgQEAKICAgICA+Pj4gY3R5cGVzLnN0cmluZ19hdCgwKQogICAgIEZhdGFsIFB5dGhvbiBlcnJvcjogU2VnbWVudGF0aW9uIGZhdWx0CiAKLSAgICBDdXJyZW50IHRocmVhZCAweDAwMDA3ZmI4OTlmMzk3MDA6CisgICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToKICAgICAgIEZpbGUgIi9ob21lL3B5dGhvbi9jcHl0aG9uL0xpYi9jdHlwZXMvX19pbml0X18ucHkiLCBsaW5lIDQ4NiBpbiBzdHJpbmdfYXQKICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEgaW4gPG1vZHVsZT4KICAgICBTZWdtZW50YXRpb24gZmF1bHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKaW5kZXggOGE4OGY4Yy4uODQ3MWE3MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKQEAgLTI3LDYgKzI3LDEwIEBACiAgICBOb3RlIHRoYXQgbm8gZXh0ZXJuYWwgcHJvZ3JhbXMgYXJlIGNhbGxlZCBmcm9tIHRoaXMgZnVuY3Rpb24sIGdpdmluZyBpdAogICAgcG9ydGFiaWxpdHkgYW5kIGVmZmljaWVuY3kuCiAKKyAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKKyAgIHdpdGggYSBjYWNoZSBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHJlbHlpbmcgb24gc3RhbGUgc2lnbmF0dXJlcworICAgb3IgYnkgZXhwbGljaXRseSBjYWxsaW5nIDpmdW5jOmBjbGVhcl9jYWNoZWAuCisKIAogLi4gZnVuY3Rpb246OiBjbXBmaWxlcyhkaXIxLCBkaXIyLCBjb21tb24sIHNoYWxsb3c9VHJ1ZSkKIApAQCAtNDgsNiArNTIsMTUgQEAKICAgIG9uZSBvZiB0aGUgdGhyZWUgcmV0dXJuZWQgbGlzdHMuCiAKIAorLi4gZnVuY3Rpb246OiBjbGVhcl9jYWNoZSgpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICBDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGEgZmlsZSBpcyBjb21wYXJlZCBzbyBxdWlja2x5CisgICBhZnRlciBpdCBpcyBtb2RpZmllZCB0aGF0IGl0IGlzIHdpdGhpbiB0aGUgbXRpbWUgcmVzb2x1dGlvbiBvZgorICAgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4KKworCiAuLiBfZGlyY21wLW9iamVjdHM6CiAKIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MKQEAgLTU1LDI4ICs2OCwyNSBAQAogCiAuLiBjbGFzczo6IGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogCi0gICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSogYW5kCi0gICAqYiouICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0byBgYFsnUkNTJywgJ0NWUycsCi0gICAndGFncyddYGAuICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kIGRlZmF1bHRzIHRvIGBgW29zLmN1cmRpciwKLSAgIG9zLnBhcmRpcl1gYC4KKyAgIENvbnN0cnVjdCBhIG5ldyBkaXJlY3RvcnkgY29tcGFyaXNvbiBvYmplY3QsIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yaWVzICphKgorICAgYW5kICpiKi4gICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0bworICAgOmF0dHI6YGZpbGVjbXAuREVGQVVMVF9JR05PUkVTYC4gICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kCisgICBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsIG9zLnBhcmRpcl1gYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBjb21wYXJlcyBmaWxlcyBieSBkb2luZyAqc2hhbGxvdyogY29tcGFyaXNvbnMKICAgIGFzIGRlc2NyaWJlZCBmb3IgOmZ1bmM6YGZpbGVjbXAuY21wYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0KCkKIAogICAgICAgUHJpbnQgKHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCkgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiouCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X3BhcnRpYWxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gaW1tZWRpYXRlCiAgICAgICBzdWJkaXJlY3Rvcmllcy4KIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnRfZnVsbF9jbG9zdXJlKCkKIAogICAgICAgUHJpbnQgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiogYW5kIGNvbW1vbiBzdWJkaXJlY3RvcmllcwpAQCAtMTMzLDcgKzE0Myw3IEBACiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9maWxlcwogCi0gICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqCisgICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqLgogCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9mdW5ueQpAQCAtMTY0LDYgKzE3NCwxMiBAQAogICAgICAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMgaW4gOmF0dHI6YGNvbW1vbl9kaXJzYCB0byA6Y2xhc3M6YGRpcmNtcGAKICAgICAgIG9iamVjdHMuCiAKKy4uIGF0dHJpYnV0ZTo6IERFRkFVTFRfSUdOT1JFUworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgTGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5IDpjbGFzczpgZGlyY21wYCBieSBkZWZhdWx0LgorCiAKIEhlcmUgaXMgYSBzaW1wbGlmaWVkIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgc3ViZGlyc2BgIGF0dHJpYnV0ZSB0byBzZWFyY2gKIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdHdvIGRpcmVjdG9yaWVzIHRvIHNob3cgY29tbW9uIGRpZmZlcmVudCBmaWxlczo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAppbmRleCBkNWE0ODc1Li5lZTA2ODMwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKQEAgLTE2MCw2ICsxNjAsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIENhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgIFRoZSBgYCdyVSdgYCBhbmQgYGAnVSdgYCBtb2Rlcy4KKwogCiAqKk9wdGlvbmFsIGluLXBsYWNlIGZpbHRlcmluZzoqKiBpZiB0aGUga2V5d29yZCBhcmd1bWVudCBgYGlucGxhY2U9VHJ1ZWBgIGlzCiBwYXNzZWQgdG8gOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGAgb3IgdG8gdGhlIDpjbGFzczpgRmlsZUlucHV0YCBjb25zdHJ1Y3RvciwgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CmluZGV4IDU4OTk4YTguLjAzZTA4NWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CkBAIC0xMiw2ICsxMiw3IEBACiAKIC4uIHRvY3RyZWU6OgogCisgICBwYXRobGliLnJzdAogICAgb3MucGF0aC5yc3QKICAgIGZpbGVpbnB1dC5yc3QKICAgIHN0YXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdCBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CmluZGV4IGUwNDM0YjAuLmVmOTNmMDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAnLipcXC50eHQkJwogICAgICAgPj4+IHJlb2JqID0gcmUuY29tcGlsZShyZWdleCkKICAgICAgID4+PiByZW9iai5tYXRjaCgnZm9vYmFyLnR4dCcpCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMTApLCBtYXRjaD0nZm9vYmFyLnR4dCc+CiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0IGIvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAppbmRleCA4OGJlMTFjLi5iZGM5ZTdiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKQEAgLTQsNiArNCwxMCBAQAogLi4gbW9kdWxlOjogZm9ybWF0dGVyCiAgICA6c3lub3BzaXM6IEdlbmVyaWMgb3V0cHV0IGZvcm1hdHRlciBhbmQgZGV2aWNlIGludGVyZmFjZS4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgRHVlIHRvIGxhY2sgb2YgdXNhZ2UsIHRoZSBmb3JtYXR0ZXIgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGlzIHNsYXRlZAorICAgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNi4KKwogCiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0d28gaW50ZXJmYWNlIGRlZmluaXRpb25zLCBlYWNoIHdpdGggbXVsdGlwbGUKIGltcGxlbWVudGF0aW9uczogVGhlICpmb3JtYXR0ZXIqIGludGVyZmFjZSwgYW5kIHRoZSAqd3JpdGVyKiBpbnRlcmZhY2Ugd2hpY2ggaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IGIxMjVhNzguLmZiNGZjN2YgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtNTQzLDYgKzU0MywxMCBAQAogICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBtZXRob2QgaXMgbm90IGZvdW5kIG9yIGlmIGVpdGhlcgogICAgdGhlICpmb3JtYXRfc3BlYyogb3IgdGhlIHJldHVybiB2YWx1ZSBhcmUgbm90IHN0cmluZ3MuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgYGBvYmplY3QoKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKWBgIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICAgICBpZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBlbXB0eSBzdHJpbmcuCisKIAogLi4gX2Z1bmMtZnJvemVuc2V0OgogLi4gZnVuY3Rpb246OiBmcm96ZW5zZXQoW2l0ZXJhYmxlXSkKQEAgLTY2Niw2ICs2NzAsMTIgQEAKIAogICAgVGhlIGludGVnZXIgdHlwZSBpcyBkZXNjcmliZWQgaW4gOnJlZjpgdHlwZXNudW1lcmljYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmICpiYXNlKiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBpbnRgIGFuZCB0aGUgKmJhc2UqIG9iamVjdCBoYXMgYQorICAgICAgOm1ldGg6YGJhc2UuX19pbmRleF9fIDxvYmplY3QuX19pbmRleF9fPmAgbWV0aG9kLCB0aGF0IG1ldGhvZCBpcyBjYWxsZWQKKyAgICAgIHRvIG9idGFpbiBhbiBpbnRlZ2VyIGZvciB0aGUgYmFzZS4gIFByZXZpb3VzIHZlcnNpb25zIHVzZWQKKyAgICAgIDptZXRoOmBiYXNlLl9faW50X18gPG9iamVjdC5fX2ludF9fPmAgaW5zdGVhZCBvZiA6bWV0aDpgYmFzZS5fX2luZGV4X18KKyAgICAgIDxvYmplY3QuX19pbmRleF9fPmAuCiAKIC4uIGZ1bmN0aW9uOjogaXNpbnN0YW5jZShvYmplY3QsIGNsYXNzaW5mbykKIApAQCAtNzQ4LDE5ICs3NTgsMjIgQEAKICAgIGFscmVhZHkgYXJyYW5nZWQgaW50byBhcmd1bWVudCB0dXBsZXMsIHNlZSA6ZnVuYzpgaXRlcnRvb2xzLnN0YXJtYXBgXC4KIAogCi0uLiBmdW5jdGlvbjo6IG1heChpdGVyYWJsZSwgKlssIGtleV0pCisuLiBmdW5jdGlvbjo6IG1heChpdGVyYWJsZSwgKlssIGRlZmF1bHQsIGtleV0pCiAgICAgICAgICAgICAgIG1heChhcmcxLCBhcmcyLCAqYXJnc1ssIGtleV0pCiAKICAgIFJldHVybiB0aGUgbGFyZ2VzdCBpdGVtIGluIGFuIGl0ZXJhYmxlIG9yIHRoZSBsYXJnZXN0IG9mIHR3byBvciBtb3JlCiAgICBhcmd1bWVudHMuCiAKLSAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCAqaXRlcmFibGUqIG11c3QgYmUgYSBub24tZW1wdHkKLSAgIGl0ZXJhYmxlIChzdWNoIGFzIGEgbm9uLWVtcHR5IHN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBUaGUgbGFyZ2VzdCBpdGVtCi0gICBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUKLSAgIHByb3ZpZGVkLCB0aGUgbGFyZ2VzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgcmV0dXJuZWQuCisgICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGJlIGFuIDp0ZXJtOmBpdGVyYWJsZWAuCisgICBUaGUgbGFyZ2VzdCBpdGVtIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwotICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgorICAgVGhlcmUgYXJlIHR3byBvcHRpb25hbCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiBUaGUgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzCisgICBhIG9uZS1hcmd1bWVudCBvcmRlcmluZyBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuIFRoZQorICAgKmRlZmF1bHQqIGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRlZCBpdGVyYWJsZSBpcworICAgZW1wdHkuIElmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSBhbmQgKmRlZmF1bHQqIGlzIG5vdCBwcm92aWRlZCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWF4aW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQogICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCkBAIC03NzYsMTkgKzc4OSwyMiBAQAogICAgOnJlZjpgdHlwZW1lbW9yeXZpZXdgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKLS4uIGZ1bmN0aW9uOjogbWluKGl0ZXJhYmxlLCAqWywga2V5XSkKKy4uIGZ1bmN0aW9uOjogbWluKGl0ZXJhYmxlLCAqWywgZGVmYXVsdCwga2V5XSkKICAgICAgICAgICAgICAgbWluKGFyZzEsIGFyZzIsICphcmdzWywga2V5XSkKIAogICAgUmV0dXJuIHRoZSBzbWFsbGVzdCBpdGVtIGluIGFuIGl0ZXJhYmxlIG9yIHRoZSBzbWFsbGVzdCBvZiB0d28gb3IgbW9yZQogICAgYXJndW1lbnRzLgogCi0gICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgKml0ZXJhYmxlKiBtdXN0IGJlIGEgbm9uLWVtcHR5Ci0gICBpdGVyYWJsZSAoc3VjaCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgVGhlIHNtYWxsZXN0IGl0ZW0KLSAgIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZQotICAgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgcmV0dXJuZWQuCisgICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGJlIGFuIDp0ZXJtOmBpdGVyYWJsZWAuCisgICBUaGUgc21hbGxlc3QgaXRlbSBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzCisgICByZXR1cm5lZC4KIAotICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKLSAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KKyAgIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gVGhlICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcworICAgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLiBUaGUKKyAgICpkZWZhdWx0KiBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMKKyAgIGVtcHR5LiBJZiB0aGUgaXRlcmFibGUgaXMgZW1wdHkgYW5kICpkZWZhdWx0KiBpcyBub3QgcHJvdmlkZWQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1pbmltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKICAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scwpAQCAtODU2LDggKzg3Miw3IEBACiAgICBgYCdiJ2BgICAgYmluYXJ5IG1vZGUKICAgIGBgJ3QnYGAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpCiAgICBgYCcrJ2BgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICBgYCdVJ2BgICAgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgc2hvdWxkCi0gICAgICAgICAgICAgbm90IGJlIHVzZWQgaW4gbmV3IGNvZGUpCisgICBgYCdVJ2BgICAgOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgbW9kZSAoZGVwcmVjYXRlZCkKICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgVGhlIGRlZmF1bHQgbW9kZSBpcyBgYCdyJ2BgIChvcGVuIGZvciByZWFkaW5nIHRleHQsIHN5bm9ueW0gb2YgYGAncnQnYGApLgpAQCAtOTYzLDYgKzk3OCw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyB0aGUgOnJlZjpgZGlyX2ZkIDxkaXJfZmQ+YCBwYXJhbWV0ZXIgb2YgdGhlCiAgICA6ZnVuYzpgb3Mub3BlbmAgZnVuY3Rpb24gdG8gb3BlbiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBnaXZlbiBkaXJlY3Rvcnk6OgogCkBAIC05NzYsMTAgKzk5Myw2IEBACiAgICAgICAuLi4KICAgICAgID4+PiBvcy5jbG9zZShkaXJfZmQpICAjIGRvbid0IGxlYWsgYSBmaWxlIGRlc2NyaXB0b3IKIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgotICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCi0KICAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBmaWxlIG9iamVjdGAgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbgogICAgZGVwZW5kcyBvbiB0aGUgbW9kZS4gIFdoZW4gOmZ1bmM6YG9wZW5gIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0CiAgICBtb2RlIChgYCd3J2BgLCBgYCdyJ2BgLCBgYCd3dCdgYCwgYGAncnQnYGAsIGV0Yy4pLCBpdCByZXR1cm5zIGEgc3ViY2xhc3Mgb2YKQEAgLTEwMDYsMTAgKzEwMTksMTggQEAKICAgIGFuZCA6bW9kOmBzaHV0aWxgLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCisgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KICAgICAgIDpleGM6YElPRXJyb3JgIHVzZWQgdG8gYmUgcmFpc2VkLCBpdCBpcyBub3cgYW4gYWxpYXMgb2YgOmV4YzpgT1NFcnJvcmAuCiAgICAgICA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIG5vdyByYWlzZWQgaWYgdGhlIGZpbGUgb3BlbmVkIGluIGV4Y2x1c2l2ZQogICAgICAgY3JlYXRpb24gbW9kZSAoYGAneCdgYCkgYWxyZWFkeSBleGlzdHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgZmlsZSBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisgICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjQgNC4wCisgICAgICBUaGUgYGAnVSdgYCBtb2RlLgorCiAKIC4uIFhYWCB3b3JrcyBmb3IgYnl0ZXMgdG9vLCBidXQgc2hvdWxkIGl0PwogLi4gZnVuY3Rpb246OiBvcmQoYykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CmluZGV4IDNjOTQ2ZTMuLjc3Y2Q4MzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdApAQCAtNiw2ICs2LDcgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IFBldGVyIEhhcnJpcyA8c2NhdkBibHVleW9uZGVyLmNvLnVrPgogLi4gbW9kdWxlYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgogLi4gbW9kdWxlYXV0aG9yOjogTmljayBDb2dobGFuIDxuY29naGxhbkBnbWFpbC5jb20+CisuLiBtb2R1bGVhdXRob3I6OiDFgXVrYXN6IExhbmdhIDxsdWthc3pAbGFuZ2EucGw+CiAuLiBzZWN0aW9uYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Z1bmN0b29scy5weWAKQEAgLTEzMywxNSArMTM0LDM0IEBACiAKICAgICAgICBAdG90YWxfb3JkZXJpbmcKICAgICAgICBjbGFzcyBTdHVkZW50OgorICAgICAgICAgICBkZWYgX2lzX3ZhbGlkX29wZXJhbmQoc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuIChoYXNhdHRyKG90aGVyLCAibGFzdG5hbWUiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihvdGhlciwgImZpcnN0bmFtZSIpKQogICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc192YWxpZF9vcGVyYW5kKG90aGVyKToKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpIDwKICAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKIAorICAgLi4gbm90ZTo6CisKKyAgICAgIFdoaWxlIHRoaXMgZGVjb3JhdG9yIG1ha2VzIGl0IGVhc3kgdG8gY3JlYXRlIHdlbGwgYmVoYXZlZCB0b3RhbGx5CisgICAgICBvcmRlcmVkIHR5cGVzLCBpdCAqZG9lcyogY29tZSBhdCB0aGUgY29zdCBvZiBzbG93ZXIgZXhlY3V0aW9uIGFuZAorICAgICAgbW9yZSBjb21wbGV4IHN0YWNrIHRyYWNlcyBmb3IgdGhlIGRlcml2ZWQgY29tcGFyaXNvbiBtZXRob2RzLiBJZgorICAgICAgcGVyZm9ybWFuY2UgYmVuY2htYXJraW5nIGluZGljYXRlcyB0aGlzIGlzIGEgYm90dGxlbmVjayBmb3IgYSBnaXZlbgorICAgICAgYXBwbGljYXRpb24sIGltcGxlbWVudGluZyBhbGwgc2l4IHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGluc3RlYWQgaXMKKyAgICAgIGxpa2VseSB0byBwcm92aWRlIGFuIGVhc3kgc3BlZWQgYm9vc3QuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUmV0dXJuaW5nIE5vdEltcGxlbWVudGVkIGZyb20gdGhlIHVuZGVybHlpbmcgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IKKyAgICAgIHVucmVjb2duaXNlZCB0eXBlcyBpcyBub3cgc3VwcG9ydGVkLgogCiAuLiBmdW5jdGlvbjo6IHBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpCiAKQEAgLTE3NCw2ICsxOTQsNDggQEAKICAgICAgIDE4CiAKIAorLi4gY2xhc3M6OiBwYXJ0aWFsbWV0aG9kKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQorCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCBkZXNjcmlwdG9yIHdoaWNoIGJlaGF2ZXMKKyAgIGxpa2UgOmNsYXNzOmBwYXJ0aWFsYCBleGNlcHQgdGhhdCBpdCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgbWV0aG9kCisgICBkZWZpbml0aW9uIHJhdGhlciB0aGFuIGJlaW5nIGRpcmVjdGx5IGNhbGxhYmxlLgorCisgICAqZnVuYyogbXVzdCBiZSBhIDp0ZXJtOmBkZXNjcmlwdG9yYCBvciBhIGNhbGxhYmxlIChvYmplY3RzIHdoaWNoIGFyZSBib3RoLAorICAgbGlrZSBub3JtYWwgZnVuY3Rpb25zLCBhcmUgaGFuZGxlZCBhcyBkZXNjcmlwdG9ycykuCisKKyAgIFdoZW4gKmZ1bmMqIGlzIGEgZGVzY3JpcHRvciAoc3VjaCBhcyBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24sCisgICA6ZnVuYzpgY2xhc3NtZXRob2RgLCA6ZnVuYzpgc3RhdGljbWV0aG9kYCwgOmZ1bmM6YGFic3RyYWN0bWV0aG9kYCBvcgorICAgYW5vdGhlciBpbnN0YW5jZSBvZiA6Y2xhc3M6YHBhcnRpYWxtZXRob2RgKSwgY2FsbHMgdG8gYGBfX2dldF9fYGAgYXJlCisgICBkZWxlZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGVzY3JpcHRvciwgYW5kIGFuIGFwcHJvcHJpYXRlCisgICA6Y2xhc3M6YHBhcnRpYWxgIG9iamVjdCByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LgorCisgICBXaGVuICpmdW5jKiBpcyBhIG5vbi1kZXNjcmlwdG9yIGNhbGxhYmxlLCBhbiBhcHByb3ByaWF0ZSBib3VuZCBtZXRob2QgaXMKKyAgIGNyZWF0ZWQgZHluYW1pY2FsbHkuIFRoaXMgYmVoYXZlcyBsaWtlIGEgbm9ybWFsIFB5dGhvbiBmdW5jdGlvbiB3aGVuCisgICB1c2VkIGFzIGEgbWV0aG9kOiB0aGUgKnNlbGYqIGFyZ3VtZW50IHdpbGwgYmUgaW5zZXJ0ZWQgYXMgdGhlIGZpcnN0CisgICBwb3NpdGlvbmFsIGFyZ3VtZW50LCBldmVuIGJlZm9yZSB0aGUgKmFyZ3MqIGFuZCAqa2V5d29yZHMqIHN1cHBsaWVkIHRvCisgICB0aGUgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCBjb25zdHJ1Y3Rvci4KKworICAgRXhhbXBsZTo6CisKKyAgICAgID4+PiBjbGFzcyBDZWxsKG9iamVjdCk6CisgICAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgICAgLi4uICAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKyAgICAgIC4uLiAgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IGJvb2woc3RhdGUpCisgICAgICAuLi4gICAgIHNldF9hbGl2ZSA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBUcnVlKQorICAgICAgLi4uICAgICBzZXRfZGVhZCA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBGYWxzZSkKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDZWxsKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBGYWxzZQorICAgICAgPj4+IGMuc2V0X2FsaXZlKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogcmVkdWNlKGZ1bmN0aW9uLCBpdGVyYWJsZVssIGluaXRpYWxpemVyXSkKIAogICAgQXBwbHkgKmZ1bmN0aW9uKiBvZiB0d28gYXJndW1lbnRzIGN1bXVsYXRpdmVseSB0byB0aGUgaXRlbXMgb2YgKnNlcXVlbmNlKiwgZnJvbQpAQCAtMTk4LDYgKzI2MCwxMTEgQEAKICAgICAgICAgICByZXR1cm4gdmFsdWUKIAogCisuLiBkZWNvcmF0b3I6OiBzaW5nbGVkaXNwYXRjaChkZWZhdWx0KQorCisgICBUcmFuc2Zvcm1zIGEgZnVuY3Rpb24gaW50byBhIDp0ZXJtOmBzaW5nbGUtZGlzcGF0Y2ggPHNpbmdsZQorICAgZGlzcGF0Y2g+YCA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAuCisKKyAgIFRvIGRlZmluZSBhIGdlbmVyaWMgZnVuY3Rpb24sIGRlY29yYXRlIGl0IHdpdGggdGhlIGBgQHNpbmdsZWRpc3BhdGNoYGAKKyAgIGRlY29yYXRvci4gTm90ZSB0aGF0IHRoZSBkaXNwYXRjaCBoYXBwZW5zIG9uIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgIGNyZWF0ZSB5b3VyIGZ1bmN0aW9uIGFjY29yZGluZ2x5OjoKKworICAgICA+Pj4gZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHNpbmdsZWRpc3BhdGNoCisgICAgID4+PiBAc2luZ2xlZGlzcGF0Y2gKKyAgICAgLi4uIGRlZiBmdW4oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiTGV0IG1lIGp1c3Qgc2F5LCIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorCisgICBUbyBhZGQgb3ZlcmxvYWRlZCBpbXBsZW1lbnRhdGlvbnMgdG8gdGhlIGZ1bmN0aW9uLCB1c2UgdGhlIDpmdW5jOmByZWdpc3RlcmAKKyAgIGF0dHJpYnV0ZSBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbi4gIEl0IGlzIGEgZGVjb3JhdG9yLCB0YWtpbmcgYSB0eXBlCisgICBwYXJhbWV0ZXIgYW5kIGRlY29yYXRpbmcgYSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG9wZXJhdGlvbiBmb3IgdGhhdAorICAgdHlwZTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoaW50KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiU3RyZW5ndGggaW4gbnVtYmVycywgZWg/IiwgZW5kPSIgIikKKyAgICAgLi4uICAgICBwcmludChhcmcpCisgICAgIC4uLgorICAgICA+Pj4gQGZ1bi5yZWdpc3RlcihsaXN0KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiRW51bWVyYXRlIHRoaXM6IikKKyAgICAgLi4uICAgICBmb3IgaSwgZWxlbSBpbiBlbnVtZXJhdGUoYXJnKToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoaSwgZWxlbSkKKworICAgVG8gZW5hYmxlIHJlZ2lzdGVyaW5nIGxhbWJkYXMgYW5kIHByZS1leGlzdGluZyBmdW5jdGlvbnMsIHRoZQorICAgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgaW4gYSBmdW5jdGlvbmFsIGZvcm06OgorCisgICAgID4+PiBkZWYgbm90aGluZyhhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIHByaW50KCJOb3RoaW5nLiIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuLnJlZ2lzdGVyKHR5cGUoTm9uZSksIG5vdGhpbmcpCisKKyAgIFRoZSA6ZnVuYzpgcmVnaXN0ZXJgIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB1bmRlY29yYXRlZCBmdW5jdGlvbiB3aGljaAorICAgZW5hYmxlcyBkZWNvcmF0b3Igc3RhY2tpbmcsIHBpY2tsaW5nLCBhcyB3ZWxsIGFzIGNyZWF0aW5nIHVuaXQgdGVzdHMgZm9yCisgICBlYWNoIHZhcmlhbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoZmxvYXQpCisgICAgIC4uLiBAZnVuLnJlZ2lzdGVyKERlY2ltYWwpCisgICAgIC4uLiBkZWYgZnVuX251bShhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJIYWxmIG9mIHlvdXIgbnVtYmVyOiIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnIC8gMikKKyAgICAgLi4uCisgICAgID4+PiBmdW5fbnVtIGlzIGZ1bgorICAgICBGYWxzZQorCisgICBXaGVuIGNhbGxlZCwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gZGlzcGF0Y2hlcyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QKKyAgIGFyZ3VtZW50OjoKKworICAgICA+Pj4gZnVuKCJIZWxsbywgd29ybGQuIikKKyAgICAgSGVsbG8sIHdvcmxkLgorICAgICA+Pj4gZnVuKCJ0ZXN0LiIsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgTGV0IG1lIGp1c3Qgc2F5LCB0ZXN0LgorICAgICA+Pj4gZnVuKDQyLCB2ZXJib3NlPVRydWUpCisgICAgIFN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyA0MgorICAgICA+Pj4gZnVuKFsnc3BhbScsICdzcGFtJywgJ2VnZ3MnLCAnc3BhbSddLCB2ZXJib3NlPVRydWUpCisgICAgIEVudW1lcmF0ZSB0aGlzOgorICAgICAwIHNwYW0KKyAgICAgMSBzcGFtCisgICAgIDIgZWdncworICAgICAzIHNwYW0KKyAgICAgPj4+IGZ1bihOb25lKQorICAgICBOb3RoaW5nLgorICAgICA+Pj4gZnVuKDEuMjMpCisgICAgIDAuNjE1CisKKyAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzCisgICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBpcyB1c2VkIHRvIGZpbmQgYSBtb3JlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uCisgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHdpdGggYGBAc2luZ2xlZGlzcGF0Y2hgYCBpcyByZWdpc3RlcmVkCisgICBmb3IgdGhlIGJhc2UgYGBvYmplY3RgYCB0eXBlLCB3aGljaCBtZWFucyBpdCBpcyB1c2VkIGlmIG5vIGJldHRlcgorICAgaW1wbGVtZW50YXRpb24gaXMgZm91bmQuCisKKyAgIFRvIGNoZWNrIHdoaWNoIGltcGxlbWVudGF0aW9uIHdpbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gY2hvb3NlIGZvcgorICAgYSBnaXZlbiB0eXBlLCB1c2UgdGhlIGBgZGlzcGF0Y2goKWBgIGF0dHJpYnV0ZTo6CisKKyAgICAgPj4+IGZ1bi5kaXNwYXRjaChmbG9hdCkKKyAgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgID4+PiBmdW4uZGlzcGF0Y2goZGljdCkgICAgIyBub3RlOiBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIFRvIGFjY2VzcyBhbGwgcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbnMsIHVzZSB0aGUgcmVhZC1vbmx5IGBgcmVnaXN0cnlgYAorICAgYXR0cmlidXRlOjoKKworICAgID4+PiBmdW4ucmVnaXN0cnkua2V5cygpCisgICAgZGljdF9rZXlzKFs8Y2xhc3MgJ05vbmVUeXBlJz4sIDxjbGFzcyAnaW50Jz4sIDxjbGFzcyAnb2JqZWN0Jz4sCisgICAgICAgICAgICAgIDxjbGFzcyAnZGVjaW1hbC5EZWNpbWFsJz4sIDxjbGFzcyAnbGlzdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2Zsb2F0Jz5dKQorICAgID4+PiBmdW4ucmVnaXN0cnlbZmxvYXRdCisgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgPj4+IGZ1bi5yZWdpc3RyeVtvYmplY3RdCisgICAgPGZ1bmN0aW9uIGZ1biBhdCAweDEwM2ZlMDAwMD4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIAogICAgVXBkYXRlIGEgKndyYXBwZXIqIGZ1bmN0aW9uIHRvIGxvb2sgbGlrZSB0aGUgKndyYXBwZWQqIGZ1bmN0aW9uLiBUaGUgb3B0aW9uYWwKQEAgLTIxMiw4ICszNzksOCBAQAogCiAgICBUbyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGZvciBpbnRyb3NwZWN0aW9uIGFuZCBvdGhlciBwdXJwb3NlcwogICAgKGUuZy4gYnlwYXNzaW5nIGEgY2FjaGluZyBkZWNvcmF0b3Igc3VjaCBhcyA6ZnVuYzpgbHJ1X2NhY2hlYCksIHRoaXMgZnVuY3Rpb24KLSAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bwotICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgorICAgYXV0b21hdGljYWxseSBhZGRzIGEgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bworICAgdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuCiAKICAgIFRoZSBtYWluIGludGVuZGVkIHVzZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBpbiA6dGVybTpgZGVjb3JhdG9yYCBmdW5jdGlvbnMgd2hpY2gKICAgIHdyYXAgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBhbmQgcmV0dXJuIHRoZSB3cmFwcGVyLiBJZiB0aGUgd3JhcHBlciBmdW5jdGlvbiBpcwpAQCAtMjM2LDYgKzQwMywxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIE1pc3NpbmcgYXR0cmlidXRlcyBubyBsb25nZXIgdHJpZ2dlciBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBub3cgYWx3YXlzIHJlZmVycyB0byB0aGUgd3JhcHBlZAorICAgICAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhhdCBmdW5jdGlvbiBkZWZpbmVkIGEgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZS4KKyAgICAgIChzZWUgOmlzc3VlOmAxNzQ4MmApCisKIAogLi4gZGVjb3JhdG9yOjogd3JhcHMod3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKQEAgLTMwMSw0ICs0NzMsMyBAQAogYXJlIG5vdCBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuICBBbHNvLCA6Y2xhc3M6YHBhcnRpYWxgIG9iamVjdHMgZGVmaW5lZCBpbgogY2xhc3NlcyBiZWhhdmUgbGlrZSBzdGF0aWMgbWV0aG9kcyBhbmQgZG8gbm90IHRyYW5zZm9ybSBpbnRvIGJvdW5kIG1ldGhvZHMKIGR1cmluZyBpbnN0YW5jZSBhdHRyaWJ1dGUgbG9vay11cC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2MucnN0IGIvRG9jL2xpYnJhcnkvZ2MucnN0CmluZGV4IDcxNDQ5YTMuLjZiOTVkYzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2djLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nYy5yc3QKQEAgLTY3LDYgKzY3LDI0IEBACiAgICByZXR1cm5lZC4KIAogCisuLiBmdW5jdGlvbjo6IGdldF9zdGF0cygpCisKKyAgIFJldHVybiBhIGxpc3Qgb2YgMyBwZXItZ2VuZXJhdGlvbiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBjb2xsZWN0aW9uCisgICBzdGF0aXN0aWNzIHNpbmNlIGludGVycHJldGVyIHN0YXJ0LiAgQXQgdGhpcyBtb21lbnQsIGVhY2ggZGljdGlvbmFyeSB3aWxsCisgICBjb250YWluIHRoZSBmb2xsb3dpbmcgaXRlbXM6CisKKyAgICogYGBjb2xsZWN0aW9uc2BgIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBnZW5lcmF0aW9uIHdhcyBjb2xsZWN0ZWQ7CisKKyAgICogYGBjb2xsZWN0ZWRgYCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgY29sbGVjdGVkIGluc2lkZSB0aGlzCisgICAgIGdlbmVyYXRpb247CisKKyAgICogYGB1bmNvbGxlY3RhYmxlYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIHdoaWNoIHdlcmUgZm91bmQKKyAgICAgdG8gYmUgdW5jb2xsZWN0YWJsZSAoYW5kIHdlcmUgdGhlcmVmb3JlIG1vdmVkIHRvIHRoZSA6ZGF0YTpgZ2FyYmFnZWAKKyAgICAgbGlzdCkgaW5zaWRlIHRoaXMgZ2VuZXJhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzZXRfdGhyZXNob2xkKHRocmVzaG9sZDBbLCB0aHJlc2hvbGQxWywgdGhyZXNob2xkMl1dKQogCiAgICBTZXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0aHJlc2hvbGRzICh0aGUgY29sbGVjdGlvbiBmcmVxdWVuY3kpLiBTZXR0aW5nCkBAIC0xNTgsMjQgKzE3NiwxMyBAQAogCiAuLiBkYXRhOjogZ2FyYmFnZQogCi0gICBBIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCB0aGUgY29sbGVjdG9yIGZvdW5kIHRvIGJlIHVucmVhY2hhYmxlIGJ1dCBjb3VsZCBub3QgYmUKLSAgIGZyZWVkICh1bmNvbGxlY3RhYmxlIG9iamVjdHMpLiAgQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGNvbnRhaW5zIG9ubHkgb2JqZWN0cyB3aXRoCi0gICA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcy4gT2JqZWN0cyB0aGF0IGhhdmUgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgYW5kIGFyZQotICAgcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZSBjYXVzZSB0aGUgZW50aXJlIHJlZmVyZW5jZSBjeWNsZSB0byBiZSB1bmNvbGxlY3RhYmxlLAotICAgaW5jbHVkaW5nIG9iamVjdHMgbm90IG5lY2Vzc2FyaWx5IGluIHRoZSBjeWNsZSBidXQgcmVhY2hhYmxlIG9ubHkgZnJvbSBpdC4KLSAgIFB5dGhvbiBkb2Vzbid0IGNvbGxlY3Qgc3VjaCBjeWNsZXMgYXV0b21hdGljYWxseSBiZWNhdXNlLCBpbiBnZW5lcmFsLCBpdCBpc24ndAotICAgcG9zc2libGUgZm9yIFB5dGhvbiB0byBndWVzcyBhIHNhZmUgb3JkZXIgaW4gd2hpY2ggdG8gcnVuIHRoZSA6bWV0aDpgX19kZWxfX2AKLSAgIG1ldGhvZHMuICBJZiB5b3Uga25vdyBhIHNhZmUgb3JkZXIsIHlvdSBjYW4gZm9yY2UgdGhlIGlzc3VlIGJ5IGV4YW1pbmluZyB0aGUKLSAgICpnYXJiYWdlKiBsaXN0LCBhbmQgZXhwbGljaXRseSBicmVha2luZyBjeWNsZXMgZHVlIHRvIHlvdXIgb2JqZWN0cyB3aXRoaW4gdGhlCi0gICBsaXN0LiAgTm90ZSB0aGF0IHRoZXNlIG9iamVjdHMgYXJlIGtlcHQgYWxpdmUgZXZlbiBzbyBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgc28gdGhleSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tICpnYXJiYWdlKiB0b28uICBGb3IgZXhhbXBsZSwKLSAgIGFmdGVyIGJyZWFraW5nIGN5Y2xlcywgZG8gYGBkZWwgZ2MuZ2FyYmFnZVs6XWBgIHRvIGVtcHR5IHRoZSBsaXN0LiAgSXQncwotICAgZ2VuZXJhbGx5IGJldHRlciB0byBhdm9pZCB0aGUgaXNzdWUgYnkgbm90IGNyZWF0aW5nIGN5Y2xlcyBjb250YWluaW5nIG9iamVjdHMKLSAgIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFuZCAqZ2FyYmFnZSogY2FuIGJlIGV4YW1pbmVkIGluIHRoYXQgY2FzZSB0bwotICAgdmVyaWZ5IHRoYXQgbm8gc3VjaCBjeWNsZXMgYXJlIGJlaW5nIGNyZWF0ZWQuCisgICBBIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCB0aGUgY29sbGVjdG9yIGZvdW5kIHRvIGJlIHVucmVhY2hhYmxlIGJ1dCBjb3VsZAorICAgbm90IGJlIGZyZWVkICh1bmNvbGxlY3RhYmxlIG9iamVjdHMpLiAgU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCB0aGlzCisgICBsaXN0IHNob3VsZCBiZSBlbXB0eSBtb3N0IG9mIHRoZSB0aW1lLCBleGNlcHQgd2hlbiB1c2luZyBpbnN0YW5jZXMgb2YKKyAgIEMgZXh0ZW5zaW9uIHR5cGVzIHdpdGggYSBub24tTlVMTCBgYHRwX2RlbGBgIHNsb3QuCiAKLSAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUgYWRkZWQKLSAgIHRvIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KKyAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUKKyAgIGFkZGVkIHRvIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIElmIHRoaXMgbGlzdCBpcyBub24tZW1wdHkgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24sIGEKQEAgLTE4Myw2ICsxOTAsMTAgQEAKICAgICAgIDpjb25zdDpgREVCVUdfVU5DT0xMRUNUQUJMRWAgaXMgc2V0LCBpbiBhZGRpdGlvbiBhbGwgdW5jb2xsZWN0YWJsZSBvYmplY3RzCiAgICAgICBhcmUgcHJpbnRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEZvbGxvd2luZyA6cGVwOmA0NDJgLCBvYmplY3RzIHdpdGggYSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIGRvbid0IGVuZAorICAgICAgdXAgaW4gOmF0dHI6YGdjLmdhcmJhZ2VgIGFueW1vcmUuCisKIC4uIGRhdGE6OiBjYWxsYmFja3MKIAogICAgQSBsaXN0IG9mIGNhbGxiYWNrcyB0aGF0IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYmVmb3JlIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdAppbmRleCBlZmYxMzhiLi5hYmNiZjM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nbG9iLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdApAQCAtMjUsNiArMjUsMTAgQEAKIEZvciBleGFtcGxlLCBgYCdbP10nYGAgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyIGBgJz8nYGAuCiAKIAorLi4gc2VlYWxzbzo6CisgICBUaGUgOm1vZDpgcGF0aGxpYmAgbW9kdWxlIG9mZmVycyBoaWdoLWxldmVsIHBhdGggb2JqZWN0cy4KKworCiAuLiBmdW5jdGlvbjo6IGdsb2IocGF0aG5hbWUpCiAKICAgIFJldHVybiBhIHBvc3NpYmx5LWVtcHR5IGxpc3Qgb2YgcGF0aCBuYW1lcyB0aGF0IG1hdGNoICpwYXRobmFtZSosIHdoaWNoIG11c3QgYmUKQEAgLTQwLDYgKzQ0LDE3IEBACiAgICB3aXRob3V0IGFjdHVhbGx5IHN0b3JpbmcgdGhlbSBhbGwgc2ltdWx0YW5lb3VzbHkuCiAKIAorLi4gZnVuY3Rpb246OiBlc2NhcGUocGF0aG5hbWUpCisKKyAgIEVzY2FwZSBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIChgYCc/J2BgLCBgYCcqJ2BgIGFuZCBgYCdbJ2BgKS4KKyAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hdGNoIGFuIGFyYml0cmFyeSBsaXRlcmFsIHN0cmluZyB0aGF0IG1heQorICAgaGF2ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaXQuICBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gZHJpdmUvVU5DCisgICBzaGFyZXBvaW50cyBhcmUgbm90IGVzY2FwZWQsIGUuZy4gb24gV2luZG93cworICAgYGBlc2NhcGUoJy8vPy9jOi9RdW8gdmFkaXM/LnR4dCcpYGAgcmV0dXJucyBgYCcvLz8vYzovUXVvIHZhZGlzWz9dLnR4dCdgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb25seSB0aGUgZm9sbG93aW5nIGZpbGVzOgogOmZpbGU6YDEuZ2lmYCwgOmZpbGU6YDIudHh0YCwgYW5kIDpmaWxlOmBjYXJkLmdpZmAuICA6ZnVuYzpgZ2xvYmAgd2lsbCBwcm9kdWNlCiB0aGUgZm9sbG93aW5nIHJlc3VsdHMuICBOb3RpY2UgaG93IGFueSBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIHBhdGggYXJlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nemlwLnJzdCBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CmluZGV4IGVjMTZmNmEuLmRlNTA2M2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2d6aXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CkBAIC0zNSw4ICszNSw4IEBACiAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QpLCBvciBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsCi0gICBgYCd3J2BgLCBvciBgYCd3YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCdhdCdgYCwgb3IgYGAnd3QnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAndydgYCwgYGAnd2InYGAsIGBgJ3gnYGAgb3IgYGAneGInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ2F0J2BgLCBgYCd3dCdgYCwgb3IgYGAneHQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDAgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBHemlwRmlsZWAgY29uc3RydWN0b3IuCkBAIC01Myw2ICs1Myw5IEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciAqZmlsZW5hbWUqIGJlaW5nIGEgZmlsZSBvYmplY3QsIHN1cHBvcnQgZm9yIHRleHQgbW9kZSwKICAgICAgIGFuZCB0aGUgKmVuY29kaW5nKiwgKmVycm9ycyogYW5kICpuZXdsaW5lKiBhcmd1bWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCwgYGAneGInYGAgYW5kIGBgJ3h0J2BgIG1vZGVzLgorCiAKIC4uIGNsYXNzOjogR3ppcEZpbGUoZmlsZW5hbWU9Tm9uZSwgbW9kZT1Ob25lLCBjb21wcmVzc2xldmVsPTksIGZpbGVvYmo9Tm9uZSwgbXRpbWU9Tm9uZSkKIApAQCAtNzMsOCArNzYsOSBAQAogICAgb3JpZ2luYWwgZmlsZW5hbWUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBoZWFkZXIuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsIGBgJ3cnYGAsCi0gICBvciBgYCd3YidgYCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAotICAgaXMgdGhlIG1vZGUgb2YgKmZpbGVvYmoqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAnd2InYGAsIGBgJ3gnYGAsIG9yIGBgJ3hiJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3IKKyAgIHdyaXR0ZW4uICBUaGUgZGVmYXVsdCBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlCisgICBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBOb3RlIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4gVG8gb3BlbiBhIGNvbXByZXNzZWQgZmlsZQogICAgaW4gdGV4dCBtb2RlLCB1c2UgOmZ1bmM6YC5vcGVuYCAob3Igd3JhcCB5b3VyIDpjbGFzczpgR3ppcEZpbGVgIHdpdGggYW4KQEAgLTEyNSw2ICsxMjksOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSA6bWV0aDpgaW8uQnVmZmVyZWRJT0Jhc2UucmVhZDFgIG1ldGhvZCBpcyBub3cgaW1wbGVtZW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCBhbmQgYGAneGInYGAgbW9kZXMuCisKIAogLi4gZnVuY3Rpb246OiBjb21wcmVzcyhkYXRhLCBjb21wcmVzc2xldmVsPTkpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0IGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKaW5kZXggNDlmZWRlYy4uYjFkYWJhMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKQEAgLTMyLDYgKzMyLDEwIEBACiAgICBTb21lIGFsZ29yaXRobXMgaGF2ZSBrbm93biBoYXNoIGNvbGxpc2lvbiB3ZWFrbmVzc2VzLCByZWZlciB0byB0aGUgIlNlZQogICAgYWxzbyIgc2VjdGlvbiBhdCB0aGUgZW5kLgogCisKK0hhc2ggYWxnb3JpdGhtcworLS0tLS0tLS0tLS0tLS0tCisKIFRoZXJlIGlzIG9uZSBjb25zdHJ1Y3RvciBtZXRob2QgbmFtZWQgZm9yIGVhY2ggdHlwZSBvZiA6ZGZuOmBoYXNoYC4gIEFsbCByZXR1cm4KIGEgaGFzaCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaW1wbGUgaW50ZXJmYWNlLiBGb3IgZXhhbXBsZTogdXNlIDpmdW5jOmBzaGExYCB0bwogY3JlYXRlIGEgU0hBMSBoYXNoIG9iamVjdC4gWW91IGNhbiBub3cgZmVlZCB0aGlzIG9iamVjdCB3aXRoIDp0ZXJtOmBieXRlcy1saWtlCkBAIC01Myw5ICs1NywxMyBAQAogLi4gaW5kZXg6OiBzaW5nbGU6IE9wZW5TU0w7ICh1c2UgaW4gbW9kdWxlIGhhc2hsaWIpCiAKIENvbnN0cnVjdG9ycyBmb3IgaGFzaCBhbGdvcml0aG1zIHRoYXQgYXJlIGFsd2F5cyBwcmVzZW50IGluIHRoaXMgbW9kdWxlIGFyZQotOmZ1bmM6YG1kNWAsIDpmdW5jOmBzaGExYCwgOmZ1bmM6YHNoYTIyNGAsIDpmdW5jOmBzaGEyNTZgLCA6ZnVuYzpgc2hhMzg0YCwgYW5kCi06ZnVuYzpgc2hhNTEyYC4gIEFkZGl0aW9uYWwgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIHVwb24gdGhlCi1PcGVuU1NMIGxpYnJhcnkgdGhhdCBQeXRob24gdXNlcyBvbiB5b3VyIHBsYXRmb3JtLgorOmZ1bmM6YG1kNWAsIDpmdW5jOmBzaGExYCwgOmZ1bmM6YHNoYTIyNGAsIDpmdW5jOmBzaGEyNTZgLCA6ZnVuYzpgc2hhMzg0YCwKKzpmdW5jOmBzaGE1MTJgLCA6ZnVuYzpgc2hhM18yMjRgLCA6ZnVuYzpgc2hhM18yNTZgLCA6ZnVuYzpgc2hhM18zODRgLCBhbmQKKzpmdW5jOmBzaGEzXzUxMmAuIEFkZGl0aW9uYWwgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIHVwb24KK3RoZSBPcGVuU1NMIGxpYnJhcnkgdGhhdCBQeXRob24gdXNlcyBvbiB5b3VyIHBsYXRmb3JtLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkIHNoYTMgZmFtaWx5IG9mIGhhc2ggYWxnb3JpdGhtcy4KIAogRm9yIGV4YW1wbGUsIHRvIG9idGFpbiB0aGUgZGlnZXN0IG9mIHRoZSBieXRlIHN0cmluZyBgYGInTm9ib2R5IGluc3BlY3RzIHRoZQogc3BhbW1pc2ggcmVwZXRpdGlvbidgYDo6CkBAIC0xMjIsNiArMTMwLDE4IEBACiAKICAgIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSBpbiBieXRlcy4KIAorQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisuLiBhdHRyaWJ1dGU6OiBoYXNoLm5hbWUKKworICAgVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoaXMgaGFzaCwgYWx3YXlzIGxvd2VyY2FzZSBhbmQgYWx3YXlzIHN1aXRhYmxlIGFzIGEKKyAgIHBhcmFtZXRlciB0byA6ZnVuYzpgbmV3YCB0byBjcmVhdGUgYW5vdGhlciBoYXNoIG9mIHRoaXMgdHlwZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSBoYXMgYmVlbiBwcmVzZW50IGluIENQeXRob24gc2luY2UgaXRzIGluY2VwdGlvbiwgYnV0CisgICAgICB1bnRpbCBQeXRob24gMy40IHdhcyBub3QgZm9ybWFsbHkgc3BlY2lmaWVkLCBzbyBtYXkgbm90IGV4aXN0IG9uIHNvbWUKKyAgICAgIHBsYXRmb3Jtcy4KKwogQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAKQEAgLTE1OCw2ICsxNzgsNDUgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2YgZGF0YSBzaGFyaW5nIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0tleSBEZXJpdmF0aW9uIEZ1bmN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZXkgZGVyaXZhdGlvbiBhbmQga2V5IHN0cmV0Y2hpbmcgYWxnb3JpdGhtcyBhcmUgZGVzaWduZWQgZm9yIHNlY3VyZSBwYXNzd29yZAoraGFzaGluZy4gTmFpdmUgYWxnb3JpdGhtcyBzdWNoIGFzIGBgc2hhMShwYXNzd29yZClgYCBhcmUgbm90IHJlc2lzdGFudAorYWdhaW5zdCBicnV0ZS1mb3JjZSBhdHRhY2tzLiBBIGdvb2QgcGFzc3dvcmQgaGFzaGluZyBmdW5jdGlvbiBtdXN0IGJlIHR1bmFibGUsCitzbG93IGFuZCBpbmNsdWRlIGEgc2FsdC4KKworCisuLiBmdW5jdGlvbjo6IHBia2RmMl9obWFjKG5hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuPU5vbmUpCisKKyAgIFRoZSBmdW5jdGlvbiBwcm92aWRlcyBQS0NTIzUgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMi4gSXQKKyAgIHVzZXMgSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCisKKyAgIFRoZSBzdHJpbmcgKm5hbWUqIGlzIHRoZSBkZXNpcmVkIG5hbWUgb2YgdGhlIGhhc2ggZGlnZXN0IGFsZ29yaXRobSBmb3IKKyAgIEhNQUMsIGUuZy4gJ3NoYTEnIG9yICdzaGEyNTYnLiAqcGFzc3dvcmQqIGFuZCAqc2FsdCogYXJlIGludGVycHJldGVkIGFzCisgICBidWZmZXJzIG9mIGJ5dGVzLiBBcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBzaG91bGQgbGltaXQgKnBhc3N3b3JkKiB0bworICAgYSBzZW5zaWJsZSB2YWx1ZSAoZS5nLiAxMDI0KS4gKnNhbHQqIHNob3VsZCBiZSBhYm91dCAxNiBvciBtb3JlIGJ5dGVzIGZyb20KKyAgIGEgcHJvcGVyIHNvdXJjZSwgZS5nLiA6ZnVuYzpgb3MudXJhbmRvbWAuCisKKyAgIFRoZSBudW1iZXIgb2YgKnJvdW5kcyogc2hvdWxkIGJlIGNob3NlbiBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0gYW5kCisgICBjb21wdXRpbmcgcG93ZXIuIEFzIG9mIDIwMTMgYSB2YWx1ZSBvZiBhdCBsZWFzdCAxMDAsMDAwIHJvdW5kcyBvZiBTSEEtMjU2CisgICBoYXZlIGJlZW4gc3VnZ2VzdGVkLgorCisgICAqZGtsZW4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRlcml2ZWQga2V5LiBJZiAqZGtsZW4qIGlzIGBgTm9uZWBgIHRoZW4gdGhlCisgICBkaWdlc3Qgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gKm5hbWUqIGlzIHVzZWQsIGUuZy4gNjQgZm9yIFNIQS01MTIuCisKKyAgID4+PiBpbXBvcnQgaGFzaGxpYiwgYmluYXNjaWkKKyAgID4+PiBkayA9IGhhc2hsaWIucGJrZGYyX2htYWMoJ3NoYTI1NicsIGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxMDAwMDApCisgICA+Pj4gYmluYXNjaWkuaGV4bGlmeShkaykKKyAgIGInMDM5NGEyZWRlMzMyYzlhMTNlYjgyZTliMjQ2MzE2MDRjMzFkZjk3OGI0ZTJmMGZiZDJjNTQ5OTQ0ZjlkNzlhNScKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIG5vdGU6OiBBIGZhc3QgaW1wbGVtZW50YXRpb24gb2YgKnBia2RmMl9obWFjKiBpcyBhdmFpbGFibGUgd2l0aCBPcGVuU1NMLgorICAgICAgVGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiB1c2VzIGFuIGlubGluZSB2ZXJzaW9uIG9mIDptb2Q6YGhtYWNgLiBJdCBpcworICAgICAgYWJvdXQgdGhyZWUgdGltZXMgc2xvd2VyIGFuZCBkb2Vzbid0IHJlbGVhc2UgdGhlIEdJTC4KKworCiAuLiBzZWVhbHNvOjoKIAogICAgTW9kdWxlIDptb2Q6YGhtYWNgCkBAIC0xNzMsMyArMjMyLDUgQEAKICAgICAgIFdpa2lwZWRpYSBhcnRpY2xlIHdpdGggaW5mb3JtYXRpb24gb24gd2hpY2ggYWxnb3JpdGhtcyBoYXZlIGtub3duIGlzc3VlcyBhbmQKICAgICAgIHdoYXQgdGhhdCBtZWFucyByZWdhcmRpbmcgdGhlaXIgdXNlLgogCisgICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODk4LnR4dAorICAgICAgUEtDUyAjNTogUGFzc3dvcmQtQmFzZWQgQ3J5cHRvZ3JhcGh5IFNwZWNpZmljYXRpb24gVmVyc2lvbiAyLjAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2htYWMucnN0IGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKaW5kZXggOTU3NTY5My4uMmU5YjBiMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKQEAgLTE2LDIwICsxNiwzMyBAQAogCiAuLiBmdW5jdGlvbjo6IG5ldyhrZXksIG1zZz1Ob25lLCBkaWdlc3Rtb2Q9Tm9uZSkKIAotICAgUmV0dXJuIGEgbmV3IGhtYWMgb2JqZWN0LiAgKmtleSogaXMgYSBieXRlcyBvYmplY3QgZ2l2aW5nIHRoZSBzZWNyZXQga2V5LiAgSWYKLSAgICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4gICpkaWdlc3Rtb2QqIGlzCi0gICB0aGUgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMgb2JqZWN0IHRvIHVzZS4gSXQgZGVmYXVsdHMgdG8KLSAgIHRoZSA6ZGF0YTpgaGFzaGxpYi5tZDVgIGNvbnN0cnVjdG9yLgorICAgUmV0dXJuIGEgbmV3IGhtYWMgb2JqZWN0LiAgKmtleSogaXMgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IGdpdmluZyB0aGUKKyAgIHNlY3JldCBrZXkuICBJZiAqbXNnKiBpcyBwcmVzZW50LCB0aGUgbWV0aG9kIGNhbGwgYGB1cGRhdGUobXNnKWBgIGlzIG1hZGUuCisgICAqZGlnZXN0bW9kKiBpcyB0aGUgZGlnZXN0IG5hbWUsIGRpZ2VzdCBjb25zdHJ1Y3RvciBvciBtb2R1bGUgZm9yIHRoZSBITUFDCisgICBvYmplY3QgdG8gdXNlLiBJdCBzdXBwb3J0cyBhbnkgbmFtZSBzdWl0YWJsZSB0byA6ZnVuYzpgaGFzaGxpYi5uZXdgIGFuZAorICAgZGVmYXVsdHMgdG8gdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBQYXJhbWV0ZXIgKmtleSogY2FuIGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4gUGFyYW1ldGVyICptc2cqIGNhbgorICAgICAgYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCisgICAgICBQYXJhbXRlciAqZGlnZXN0bW9kKiBjYW4gYmUgdGhlIG5hbWUgb2YgYSBoYXNoIGFsZ29yaXRobS4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgTUQ1IGFzIGltcGxpY2l0IGRlZmF1bHQgZGlnZXN0IGZvciAqZGlnZXN0bW9kKiBpcyBkZXByZWNhdGVkLgogCiAKIEFuIEhNQUMgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIC4uIG1ldGhvZDo6IEhNQUMudXBkYXRlKG1zZykKIAotICAgVXBkYXRlIHRoZSBobWFjIG9iamVjdCB3aXRoIHRoZSBieXRlcyBvYmplY3QgKm1zZyouICBSZXBlYXRlZCBjYWxscyBhcmUKLSAgIGVxdWl2YWxlbnQgdG8gYSBzaW5nbGUgY2FsbCB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgYXJndW1lbnRzOgorICAgVXBkYXRlIHRoZSBobWFjIG9iamVjdCB3aXRoICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlIGVxdWl2YWxlbnQgdG8gYQorICAgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKICAgIGBgbS51cGRhdGUoYSk7IG0udXBkYXRlKGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYG0udXBkYXRlKGEgKyBiKWBgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUGFyYW1ldGVyICptc2cqIGNhbiBiZSBvZiBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgOm1vZDpgaGFzaGxpYmAuCisKIAogLi4gbWV0aG9kOjogSE1BQy5kaWdlc3QoKQogCkBAIC02Niw2ICs3OSwyNSBAQAogICAgY29tcHV0ZSB0aGUgZGlnZXN0cyBvZiBzdHJpbmdzIHRoYXQgc2hhcmUgYSBjb21tb24gaW5pdGlhbCBzdWJzdHJpbmcuCiAKIAorQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisuLiBhdHRyaWJ1dGU6OiBITUFDLmRpZ2VzdF9zaXplCisKKyAgIFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgSE1BQyBkaWdlc3QgaW4gYnl0ZXMuCisKKy4uIGF0dHJpYnV0ZTo6IEhNQUMuYmxvY2tfc2l6ZQorCisgICBUaGUgaW50ZXJuYWwgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gaW4gYnl0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBhdHRyaWJ1dGU6OiBITUFDLm5hbWUKKworICAgVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoaXMgSE1BQywgYWx3YXlzIGxvd2VyY2FzZSwgZS5nLiBgYGhtYWMtbWQ1YGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb246CiAKIC4uIGZ1bmN0aW9uOjogY29tcGFyZV9kaWdlc3QoYSwgYikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0IGIvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKaW5kZXggMGFhYmJhZC4uMDliMGFiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKQEAgLTIwLDYgKzIwLDcgQEAKICAgIE5vdGUgdGhhdCB0aGUgdHJhaWxpbmcgc2VtaWNvbG9uIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lIChlLmcuIGBgJ2d0OydgYCksCiAgICBob3dldmVyIHNvbWUgb2YgdGhlIG5hbWVzIGFyZSBhY2NlcHRlZCBieSB0aGUgc3RhbmRhcmQgZXZlbiB3aXRob3V0IHRoZQogICAgc2VtaWNvbG9uOiBpbiB0aGlzIGNhc2UgdGhlIG5hbWUgaXMgcHJlc2VudCB3aXRoIGFuZCB3aXRob3V0IHRoZSBgYCc7J2BgLgorICAgU2VlIGFsc28gOmZ1bmM6YGh0bWwudW5lc2NhcGVgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CmluZGV4IGU0MTU0ZWYuLjQ0YjdkNmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKQEAgLTE2LDE0ICsxNiwyMSBAQAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzIDpjbGFzczpgSFRNTFBhcnNlcmAgd2hpY2ggc2VydmVzIGFzIHRoZSBiYXNpcyBmb3IKIHBhcnNpbmcgdGV4dCBmaWxlcyBmb3JtYXR0ZWQgaW4gSFRNTCAoSHlwZXJUZXh0IE1hcmstdXAgTGFuZ3VhZ2UpIGFuZCBYSFRNTC4KIAotLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKy4uIGNsYXNzOjogSFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UsICosIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKLSAgIENyZWF0ZSBhIHBhcnNlciBpbnN0YW5jZS4gIElmICpzdHJpY3QqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCB0aGUgcGFyc2VyCi0gICB3aWxsIGFjY2VwdCBhbmQgcGFyc2UgaW52YWxpZCBtYXJrdXAuICBJZiAqc3RyaWN0KiBpcyBgYFRydWVgYCB0aGUgcGFyc2VyCi0gICB3aWxsIHJhaXNlIGFuIDpleGM6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcmAgZXhjZXB0aW9uIGluc3RlYWQgWyNdXyB3aGVuCi0gICBpdCdzIG5vdCBhYmxlIHRvIHBhcnNlIHRoZSBtYXJrdXAuCi0gICBUaGUgdXNlIG9mIGBgc3RyaWN0PVRydWVgYCBpcyBkaXNjb3VyYWdlZCBhbmQgdGhlICpzdHJpY3QqIGFyZ3VtZW50IGlzCi0gICBkZXByZWNhdGVkLgorICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLgorCisgICBJZiAqY29udmVydF9jaGFycmVmcyogaXMgYGBUcnVlYGAgKGRlZmF1bHQ6IGBgRmFsc2VgYCksIGFsbCBjaGFyYWN0ZXIKKyAgIHJlZmVyZW5jZXMgKGV4Y2VwdCB0aGUgb25lcyBpbiBgYHNjcmlwdGBgL2Bgc3R5bGVgYCBlbGVtZW50cykgYXJlCisgICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuCisgICBUaGUgdXNlIG9mIGBgY29udmVydF9jaGFycmVmcz1UcnVlYGAgaXMgZW5jb3VyYWdlZCBhbmQgd2lsbCBiZWNvbWUKKyAgIHRoZSBkZWZhdWx0IGluIFB5dGhvbiAzLjUuCisKKyAgIElmICpzdHJpY3QqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCB0aGUgcGFyc2VyIHdpbGwgYWNjZXB0IGFuZCBwYXJzZQorICAgaW52YWxpZCBtYXJrdXAuICBJZiAqc3RyaWN0KiBpcyBgYFRydWVgYCB0aGUgcGFyc2VyIHdpbGwgcmFpc2UgYW4KKyAgIDpleGM6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcmAgZXhjZXB0aW9uIGluc3RlYWQgWyNdXyB3aGVuIGl0J3Mgbm90CisgICBhYmxlIHRvIHBhcnNlIHRoZSBtYXJrdXAuICBUaGUgdXNlIG9mIGBgc3RyaWN0PVRydWVgYCBpcyBkaXNjb3VyYWdlZCBhbmQKKyAgIHRoZSAqc3RyaWN0KiBhcmd1bWVudCBpcyBkZXByZWNhdGVkLgogCiAgICBBbiA6Y2xhc3M6YC5IVE1MUGFyc2VyYCBpbnN0YW5jZSBpcyBmZWQgSFRNTCBkYXRhIGFuZCBjYWxscyBoYW5kbGVyIG1ldGhvZHMKICAgIHdoZW4gc3RhcnQgdGFncywgZW5kIHRhZ3MsIHRleHQsIGNvbW1lbnRzLCBhbmQgb3RoZXIgbWFya3VwIGVsZW1lbnRzIGFyZQpAQCAtMzQsMTIgKzQxLDE1IEBACiAgICBoYW5kbGVyIGZvciBlbGVtZW50cyB3aGljaCBhcmUgY2xvc2VkIGltcGxpY2l0bHkgYnkgY2xvc2luZyBhbiBvdXRlciBlbGVtZW50LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgKnN0cmljdCoga2V5d29yZCBhZGRlZC4KKyAgICAgICpzdHJpY3QqIGFyZ3VtZW50IGFkZGVkLgogCiAgICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy41CiAgICAgICBUaGUgKnN0cmljdCogYXJndW1lbnQgYW5kIHRoZSBzdHJpY3QgbW9kZSBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KICAgICAgIFRoZSBwYXJzZXIgaXMgbm93IGFibGUgdG8gYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cCB0b28uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAqY29udmVydF9jaGFycmVmcyoga2V5d29yZCBhcmd1bWVudCBhZGRlZC4KKwogQW4gZXhjZXB0aW9uIGlzIGRlZmluZWQgYXMgd2VsbDoKIAogCkBAIC03NCw3ICs4NCw3IEBACiAgICAgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBwcmludCgiRW5jb3VudGVyZWQgc29tZSBkYXRhICA6IiwgZGF0YSkKIAotICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKyAgIHBhcnNlciA9IE15SFRNTFBhcnNlcigpCiAgICBwYXJzZXIuZmVlZCgnPGh0bWw+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD4nCiAgICAgICAgICAgICAgICAnPGJvZHk+PGgxPlBhcnNlIG1lITwvaDE+PC9ib2R5PjwvaHRtbD4nKQogCkBAIC0xODEsNyArMTkxLDggQEAKIAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHByb2Nlc3MgYSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIG9mIHRoZSBmb3JtCiAgICBgYCZuYW1lO2BgIChlLmcuIGBgJmd0O2BgKSwgd2hlcmUgKm5hbWUqIGlzIGEgZ2VuZXJhbCBlbnRpdHkgcmVmZXJlbmNlCi0gICAoZS5nLiBgYCdndCdgYCkuCisgICAoZS5nLiBgYCdndCdgYCkuICBUaGlzIG1ldGhvZCBpcyBuZXZlciBjYWxsZWQgaWYgKmNvbnZlcnRfY2hhcnJlZnMqIGlzCisgICBgYFRydWVgYC4KIAogCiAuLiBtZXRob2Q6OiBIVE1MUGFyc2VyLmhhbmRsZV9jaGFycmVmKG5hbWUpCkBAIC0xODksNyArMjAwLDggQEAKICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwcm9jZXNzIGRlY2ltYWwgYW5kIGhleGFkZWNpbWFsIG51bWVyaWMgY2hhcmFjdGVyCiAgICByZWZlcmVuY2VzIG9mIHRoZSBmb3JtIGBgJiNOTk47YGAgYW5kIGBgJiN4Tk5OO2BgLiAgRm9yIGV4YW1wbGUsIHRoZSBkZWNpbWFsCiAgICBlcXVpdmFsZW50IGZvciBgYCZndDtgYCBpcyBgYCYjNjI7YGAsIHdoZXJlYXMgdGhlIGhleGFkZWNpbWFsIGlzIGBgJiN4M0U7YGA7Ci0gICBpbiB0aGlzIGNhc2UgdGhlIG1ldGhvZCB3aWxsIHJlY2VpdmUgYGAnNjInYGAgb3IgYGAneDNFJ2BgLgorICAgaW4gdGhpcyBjYXNlIHRoZSBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJzYyJ2BgIG9yIGBgJ3gzRSdgYC4gIFRoaXMgbWV0aG9kCisgICBpcyBuZXZlciBjYWxsZWQgaWYgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIGBgVHJ1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEhUTUxQYXJzZXIuaGFuZGxlX2NvbW1lbnQoZGF0YSkKQEAgLTI3Miw3ICsyODQsNyBAQAogICAgICAgIGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKICAgICAgICAgICAgcHJpbnQoIkRlY2wgICAgIDoiLCBkYXRhKQogCi0gICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKCkKIAogUGFyc2luZyBhIGRvY3R5cGU6OgogCkBAIC0zMjQsNyArMzM2LDggQEAKICAgIE51bSBlbnQgIDogPgogCiBGZWVkaW5nIGluY29tcGxldGUgY2h1bmtzIHRvIDptZXRoOmB+SFRNTFBhcnNlci5mZWVkYCB3b3JrcywgYnV0Ci06bWV0aDpgfkhUTUxQYXJzZXIuaGFuZGxlX2RhdGFgIG1pZ2h0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZTo6Cis6bWV0aDpgfkhUTUxQYXJzZXIuaGFuZGxlX2RhdGFgIG1pZ2h0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorKHVubGVzcyAqY29udmVydF9jaGFycmVmcyogaXMgc2V0IHRvIGBgVHJ1ZWBgKTo6CiAKICAgID4+PiBmb3IgY2h1bmsgaW4gWyc8c3AnLCAnYW4+YnVmZicsICdlcmVkICcsICd0ZXh0PC9zJywgJ3Bhbj4nXToKICAgIC4uLiAgICAgcGFyc2VyLmZlZWQoY2h1bmspCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwucnN0CmluZGV4IDExMDdjYTkuLmQwNzA2YmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucnN0CkBAIC0yMCw2ICsyMCwxNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorCisuLiBmdW5jdGlvbjo6IHVuZXNjYXBlKHMpCisKKyAgIENvbnZlcnQgYWxsIG5hbWVkIGFuZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChlLmcuIGBgJmd0O2BgLAorICAgYGAmIzYyO2BgLCBgYCZ4M2U7YGApIGluIHRoZSBzdHJpbmcgKnMqIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVuaWNvZGUKKyAgIGNoYXJhY3RlcnMuICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHJ1bGVzIGRlZmluZWQgYnkgdGhlIEhUTUwgNSBzdGFuZGFyZAorICAgZm9yIGJvdGggdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMsIGFuZCB0aGUgOmRhdGE6YGxpc3Qgb2YKKyAgIEhUTUwgNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyA8aHRtbC5lbnRpdGllcy5odG1sNT5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLS0tLS0tLS0tLS0tLS0KIAogU3VibW9kdWxlcyBpbiB0aGUgYGBodG1sYGAgcGFja2FnZSBhcmU6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKaW5kZXggNzgzYTU5Ni4uMmRiZmEyMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdApAQCAtMjcsNyArMjcsNyBAQAogVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CiAKIAotLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKy4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSkKIAogICAgQW4gOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUgdHJhbnNhY3Rpb24gd2l0aCBhbiBIVFRQCkBAIC01MSwxMyArNTEsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAqc291cmNlX2FkZHJlc3MqIHdhcyBhZGRlZC4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAgKnN0cmljdCogcGFyYW1ldGVyIGlzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vdCBzdXBwb3J0ZWQuCiAKIAogLi4gY2xhc3M6OiBIVFRQU0Nvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lLCBrZXlfZmlsZT1Ob25lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGU9Tm9uZVssIHN0cmljdF1bLCB0aW1lb3V0XSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCB0aW1lb3V0XSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1Ob25lKQogCkBAIC04OSwxOSArODksMTkgQEAKICAgICAgIFRoaXMgY2xhc3Mgbm93IHN1cHBvcnRzIEhUVFBTIHZpcnR1YWwgaG9zdHMgaWYgcG9zc2libGUgKHRoYXQgaXMsCiAgICAgICBpZiA6ZGF0YTpgc3NsLkhBU19TTklgIGlzIHRydWUpLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCiAKIAotLi4gY2xhc3M6OiBIVFRQUmVzcG9uc2Uoc29jaywgZGVidWdsZXZlbD0wWywgc3RyaWN0XSwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKQorLi4gY2xhc3M6OiBIVFRQUmVzcG9uc2Uoc29jaywgZGVidWdsZXZlbD0wLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpCiAKICAgIENsYXNzIHdob3NlIGluc3RhbmNlcyBhcmUgcmV0dXJuZWQgdXBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBOb3QKICAgIGluc3RhbnRpYXRlZCBkaXJlY3RseSBieSB1c2VyLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyByZW1vdmVkLiBIVFRQIDAuOSBzdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCiAKIAogVGhlIGZvbGxvd2luZyBleGNlcHRpb25zIGFyZSByYWlzZWQgYXMgYXBwcm9wcmlhdGU6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKaW5kZXggNWFlYjcxOS4uMTEzYWM0NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdApAQCAtMTcwLDEyICsxNzAsMTkgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lKQorICAgLi4gbWV0aG9kOjogc2VuZF9lcnJvcihjb2RlLCBtZXNzYWdlPU5vbmUsIGV4cGxhaW49Tm9uZSkKIAogICAgICAgU2VuZHMgYW5kIGxvZ3MgYSBjb21wbGV0ZSBlcnJvciByZXBseSB0byB0aGUgY2xpZW50LiBUaGUgbnVtZXJpYyAqY29kZSoKLSAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBvcHRpb25hbCwgbW9yZSBzcGVjaWZpYyB0ZXh0LiBBCi0gICAgICBjb21wbGV0ZSBzZXQgb2YgaGVhZGVycyBpcyBzZW50LCBmb2xsb3dlZCBieSB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZQotICAgICAgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBvcHRpb25hbCwgbW9yZSBzcGVjaWZpYworICAgICAgdGV4dCwgdXN1YWxseSByZWZlcnJpbmcgdG8gc2hvcnQgbWVzc2FnZSByZXNwb25zZS4gIFRoZSAqZXhwbGFpbioKKyAgICAgIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNlbmQgYSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgaW4KKyAgICAgIHJlc3BvbnNlIGNvbnRlbnQgYm9keS4gIEEgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMgaXMgc2VudCwgZm9sbG93ZWQgYnkKKyAgICAgIHRleHQgY29tcG9zZWQgdXNpbmcgdGhlIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUaGUgZXJyb3IgcmVzcG9uc2UgaW5jbHVkZXMgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIuCisgICAgICAgICBBZGRlZCB0aGUgKmV4cGxhaW4qIGFyZ3VtZW50LgorCiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2UoY29kZSwgbWVzc2FnZT1Ob25lKQogCkBAIC0zNjEsNiArMzY4LDE1IEBACiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAKIAorQnkgZGVmYXVsdCwgc2VydmVyIGJpbmRzIGl0c2VsZiB0byBhbGwgaW50ZXJmYWNlcy4gVG8gcmVzdHJpY3QgaXQgdG8gYmluZCB0byBhCitwYXJ0aWN1bGFyIGludGVyZmFjZSBvbmx5LCBgYC0tYmluZCBBRERSRVNTYGAgYXJndW1lbnQgY2FuIGJlIHVzZWQuIEZvciBlLmcsIHRvCityZXN0cmljdCB0aGUgc2VydmVyIHRvIGJpbmQgb25seSB0byBsb2NhbGhvc3QuIDo6CisKKyAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAgLS1iaW5kIDEyNy4wLjAuMQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICBgYC0tYmluZGBgIGFyZ3VtZW50IHdhcyBpbnRyb2R1Y2VkLgorCiAKIC4uIGNsYXNzOjogQ0dJSFRUUFJlcXVlc3RIYW5kbGVyKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lkbGUucnN0IGIvRG9jL2xpYnJhcnkvaWRsZS5yc3QKaW5kZXggMzZkNzhiMC4uMjcxOGNlZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaWRsZS5yc3QKQEAgLTE2LDcwICsxNiw4MiBAQAogCiAqIGNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSA6bW9kOmB0a2ludGVyYCBHVUkgdG9vbGtpdAogCi0qIGNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzIGFuZCBVbml4CisqIGNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzLCBVbml4LCBhbmQgTWFjIE9TIFgKIAotKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZyBhbmQgbWFueSBvdGhlcgotICBmZWF0dXJlcywgZS5nLiBzbWFydCBpbmRlbnQgYW5kIGNhbGwgdGlwcworKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZywKKyAgc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzCiAKICogUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEuIGludGVyYWN0aXZlIGludGVycHJldGVyKQogCi0qIGRlYnVnZ2VyIChub3QgY29tcGxldGUsIGJ1dCB5b3UgY2FuIHNldCBicmVha3BvaW50cywgdmlldyAgYW5kIHN0ZXApCisqIGRlYnVnZ2VyIChub3QgY29tcGxldGUsIGJ1dCB5b3UgY2FuIHNldCBicmVha3BvaW50cywgdmlldyBhbmQgc3RlcCkKIAogCiBNZW51cwogLS0tLS0KIAorSURMRSBoYXMgdHdvIHdpbmRvdyB0eXBlcywgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gQ2xpY2sgb24KK3RoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhIHNlcGFyYXRlIHdpbmRvdworY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkIChmb3IgVW5peCBhbmQgV2luZG93cyBvbmx5KS4KIAotRmlsZSBtZW51Ci1eXl5eXl5eXl4KK0ZpbGUgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogTmV3IGZpbGUKLSAgIGNyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93CisgICBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdwogCiBPcGVuLi4uCi0gICBvcGVuIGFuIGV4aXN0aW5nIGZpbGUKKyAgIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQogCiBPcGVuIG1vZHVsZS4uLgotICAgb3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorICAgT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorCitSZWNlbnQgRmlsZXMKKyAgIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwogCiBDbGFzcyBicm93c2VyCi0gICBzaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCiAKIFBhdGggYnJvd3NlcgotICAgc2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcyBhbmQgbWV0aG9kcworICAgU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcyBhbmQgbWV0aG9kcwogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IENsYXNzIGJyb3dzZXIKICAgIHNpbmdsZTogUGF0aCBicm93c2VyCiAKIFNhdmUKLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYSBcKiBiZWZvcmUgYW5kCi0gICBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkIHdpbmRvd3MgaGF2ZSBhCisgICBcKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCiAKIFNhdmUgQXMuLi4KLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcyB0aGUgYXNzb2NpYXRlZCBmaWxlCiAKIFNhdmUgQ29weSBBcy4uLgotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byBkaWZmZXJlbnQgZmlsZSB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisKK1ByaW50IFdpbmRvdworICAgUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93CiAKIENsb3NlCi0gICBjbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKIEV4aXQKLSAgIGNsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgYWxsIHdpbmRvd3MgYW5kIHF1aXQgSURMRSAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKIAotRWRpdCBtZW51Ci1eXl5eXl5eXl4KK0VkaXQgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogVW5kbwotICAgVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdyAobWF4IDEwMDAgY2hhbmdlcykKKyAgIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cgKGEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKIAogUmVkbwogICAgUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKIAogQ3V0Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgc2VsZWN0aW9uCisgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgogCiBDb3B5CiAgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZApAQCAtMTA4LDExICsxMjAsMzAgQEAKIEdvIHRvIGxpbmUKICAgIEFzayBmb3IgYSBsaW5lIG51bWJlciBhbmQgc2hvdyB0aGF0IGxpbmUKIAorRXhwYW5kIHdvcmQKKyAgIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyIHdvcmQgaW4gdGhlIHNhbWUgYnVmZmVyOworICAgcmVwZWF0IHRvIGdldCBhIGRpZmZlcmVudCBleHBhbnNpb24KKworU2hvdyBjYWxsIHRpcAorICAgQWZ0ZXIgYW4gdW5jbG9zZWQgcGFyZW50aGVzaXMgZm9yIGEgZnVuY3Rpb24sIG9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aAorICAgZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisKK1Nob3cgc3Vycm91bmRpbmcgcGFyZW5zCisgICBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCisKK1Nob3cgQ29tcGxldGlvbnMKKyAgIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcyBhbmQgYXR0cmlidXRlcy4gU2VlCisgICBDb21wbGV0aW9ucyBiZWxvdy4KKworCitGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogSW5kZW50IHJlZ2lvbgotICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgNCBzcGFjZXMKKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpCiAKIERlZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aCAoZGVmYXVsdCA0IHNwYWNlcykKIAogQ29tbWVudCBvdXQgcmVnaW9uCiAgICBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKQEAgLTEyMSw2NyArMTUyLDEyMSBAQAogICAgUmVtb3ZlIGxlYWRpbmcgIyBvciAjIyBmcm9tIHNlbGVjdGVkIGxpbmVzCiAKIFRhYmlmeSByZWdpb24KLSAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicworICAgVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzLiAoTm90ZTogV2UgcmVjb21tZW5kIHVzaW5nCisgICA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQogCiBVbnRhYmlmeSByZWdpb24KLSAgIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCisgICBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgY29ycmVjdCBudW1iZXIgb2Ygc3BhY2VzCiAKLUV4cGFuZCB3b3JkCi0gICBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlciB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0Ci0gICB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uCitUb2dnbGUgdGFicworICAgT3BlbiBhIGRpYWxvZyB0byBzd2l0Y2ggYmV0d2VlbiBpbmRlbnRpbmcgd2l0aCBzcGFjZXMgYW5kIHRhYnMuCisKK05ldyBJbmRlbnQgV2lkdGgKKyAgIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gVGhlIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbgorICAgY29tbXVuaXR5IGlzIDQgc3BhY2VzLgogCiBGb3JtYXQgUGFyYWdyYXBoCi0gICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZCBwYXJhZ3JhcGgKKyAgIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZQorICAgcGFyYWdyYXBoIHdpbGwgYmUgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiA4MCBjb2x1bW5zLgogCi1JbXBvcnQgbW9kdWxlCi0gICBJbXBvcnQgb3IgcmVsb2FkIHRoZSBjdXJyZW50IG1vZHVsZQotCi1SdW4gc2NyaXB0Ci0gICBFeGVjdXRlIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIF9fbWFpbl9fIG5hbWVzcGFjZQorU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgUmVtb3ZlcyBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kIG9mIHRoZSBsYXN0IG5vbi1zcGFjZSBjaGFyYWN0ZXIKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbXBvcnQgbW9kdWxlCiAgICBzaW5nbGU6IFJ1biBzY3JpcHQKIAogCi1XaW5kb3dzIG1lbnUKLV5eXl5eXl5eXl5eXgorUnVuIG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVpvb20gSGVpZ2h0Ci0gICB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoMjR4ODApIGFuZCBtYXhpbXVtIGhlaWdodC4KK1B5dGhvbiBTaGVsbAorICAgT3BlbiBvciB3YWtlIHVwIHRoZSBQeXRob24gU2hlbGwgd2luZG93CiAKLVRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsgc2VsZWN0IG9uZSB0byBicmluZwotaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZiBuZWNlc3NhcnkpLgorQ2hlY2sgbW9kdWxlCisgICBDaGVjayB0aGUgc3ludGF4IG9mIHRoZSBtb2R1bGUgY3VycmVudGx5IG9wZW4gaW4gdGhlIEVkaXRvciB3aW5kb3cuIElmIHRoZQorICAgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlIGNvZGUuCiAKK1J1biBtb2R1bGUKKyAgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudCwgdGhlbiBleGVjdXRlIHRoZSBjdXJyZW50bHkKKyAgIG9wZW4gbW9kdWxlLiAgSWYgdGhlIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlcgorICAgdG8gc2F2ZSB0aGUgY29kZS4KIAotRGVidWcgbWVudQotXl5eXl5eXl5eXgorU2hlbGwgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotKiBpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmx5CitWaWV3IExhc3QgUmVzdGFydAorICBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0CisKK1Jlc3RhcnQgU2hlbGwKKyAgUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CisKK0RlYnVnIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIEdvIHRvIGZpbGUvbGluZQogICAgTG9vayBhcm91bmQgdGhlIGluc2VydCBwb2ludCBmb3IgYSBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIsIG9wZW4gdGhlIGZpbGUsCiAgICBhbmQgc2hvdyB0aGUgbGluZS4gIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgotICAgZXhjZXB0aW9uIHRyYWNlYmFjay4KKyAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suIEF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mIHRoZSBTaGVsbCB3aW5kb3cuCiAKLURlYnVnZ2VyCi0gICBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlci4KK0RlYnVnZ2VyICh0b2dnbGUpCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IGNvbXBsZXRlIGFuZCBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbC4gUnVuIGNvbW1hbmRzIGluCisgICB0aGUgc2hlbGwgdW5kZXIgdGhlIGRlYnVnZ2VyCiAKIFN0YWNrIHZpZXdlcgotICAgU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbi4KKyAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KIAogQXV0by1vcGVuIFN0YWNrIFZpZXdlcgotICAgT3BlbiBzdGFjayB2aWV3ZXIgb24gdHJhY2ViYWNrLgorICAgVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUgc3RhY2sgdmlld2VyIG9uIHVuaGFuZGxlZCBleGNlcHRpb24KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKICAgIHNpbmdsZTogZGVidWdnZXIKIAorT3B0aW9ucyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1FZGl0IGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl4KK0NvbmZpZ3VyZSBJRExFCisgICBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sIGtleWJpbmRpbmdzLCBhbmQgY29sb3IKKyAgIHRoZW1lcyBtYXkgYmUgYWx0ZXJlZC4gIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwKKyAgIGhlbHAgc291cmNlcyBjYW4gYmUgc3BlY2lmaWVkLgogCi0qIFJpZ2h0LWNsaWNrIGluIEVkaXQgd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpCitDb2RlIENvbnRleHQgKHRvZ2dsZSkoRWRpdG9yIFdpbmRvdyBvbmx5KQorICAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQKKyAgIG9mIHRoZSBzZWN0aW9uIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuCisKK1dpbmRvd3MgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworWm9vbSBIZWlnaHQKKyAgIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICg0MHg4MCBpbml0aWFsIHNldHRpbmcpIGFuZCBtYXhpbXVtCisgICBoZWlnaHQuIFRoZSBpbml0aWFsIHNpemUgaXMgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlciB0aGUgZ2VuZXJhbAorICAgdGFiLgorCitUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7IHNlbGVjdCBvbmUgdG8gYnJpbmcKK2l0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYgbmVjZXNzYXJ5KS4KKworSGVscCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitBYm91dCBJRExFCisgICBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKKworSURMRSBIZWxwCisgICBEaXNwbGF5IGEgaGVscCBmaWxlIGZvciBJRExFIGRldGFpbGluZyB0aGUgbWVudSBvcHRpb25zLCBiYXNpYyBlZGl0aW5nIGFuZAorICAgbmF2aWdhdGlvbiwgYW5kIG90aGVyIHRpcHMuCisKK1B5dGhvbiBEb2NzCisgICBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmIGluc3RhbGxlZC4gT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyCisgICBhbmQgb3BlbiBkb2NzLnB5dGhvbi5vcmcgc2hvd2luZyB0aGUgbGF0ZXN0IFB5dGhvbiBkb2N1bWVudGF0aW9uLgorCitBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cgdW5kZXIKK3RoZSBHZW5lcmFsIHRhYi4KKworRWRpdG9yIFdpbmRvdyBjb250ZXh0IG1lbnUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKyogUmlnaHQtY2xpY2sgaW4gRWRpdG9yIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQogCiBDdXQKICAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSBzZWxlY3Rpb24KQEAgLTIwNyw4ICsyOTIsOCBAQAogICAgc2luZ2xlOiBicmVha3BvaW50cwogCiAKLVNoZWxsIGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl5eCitTaGVsbCBXaW5kb3cgY29udGV4dCBtZW51CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKICogUmlnaHQtY2xpY2sgaW4gUHl0aG9uIFNoZWxsIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQogCkBAIC0yMjUsMTkgKzMxMCw0NCBAQAogICAgU2FtZSBhcyBpbiBEZWJ1ZyBtZW51LgogCiAKLUJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VkaXRpbmcgYW5kIG5hdmlnYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogKiA6a2JkOmBCYWNrc3BhY2VgIGRlbGV0ZXMgdG8gdGhlIGxlZnQ7IDprYmQ6YERlbGAgZGVsZXRlcyB0byB0aGUgcmlnaHQKIAorKiA6a2JkOmBDLUJhY2tzcGFjZWAgZGVsZXRlIHdvcmQgbGVmdDsgOmtiZDpgQy1EZWxgIGRlbGV0ZSB3b3JkIHRvIHRoZSByaWdodAorCiAqIEFycm93IGtleXMgYW5kIDprYmQ6YFBhZ2UgVXBgLzprYmQ6YFBhZ2UgRG93bmAgdG8gbW92ZSBhcm91bmQKIAorKiA6a2JkOmBDLUxlZnRBcnJvd2AgYW5kIDprYmQ6YEMtUmlnaHRBcnJvd2AgbW92ZXMgYnkgd29yZHMKKwogKiA6a2JkOmBIb21lYC86a2JkOmBFbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBsaW5lCiAKICogOmtiZDpgQy1Ib21lYC86a2JkOmBDLUVuZGAgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUKIAotKiBTb21lIDpwcm9ncmFtOmBFbWFjc2AgYmluZGluZ3MgbWF5IGFsc28gd29yaywgaW5jbHVkaW5nIDprYmQ6YEMtQmAsCi0gIDprYmQ6YEMtUGAsIDprYmQ6YEMtQWAsIDprYmQ6YEMtRWAsIDprYmQ6YEMtRGAsIDprYmQ6YEMtTGAKKyogU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKworICAgKiA6a2JkOmBDLWFgIGJlZ2lubmluZyBvZiBsaW5lCisKKyAgICogOmtiZDpgQy1lYCBlbmQgb2YgbGluZQorCisgICAqIDprYmQ6YEMta2Aga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorCisgICAqIDprYmQ6YEMtbGAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorCisgICAqIDprYmQ6YEMtYmAgZ28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCisgICAgIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvciB0aGlzKQorCisgICAqIDprYmQ6YEMtZmAgZ28gZm9yd2FyZCBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLXBgIGdvIHVwIG9uZSBsaW5lICh1c3VhbGx5IHlvdSBjYW4gYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yCisgICAgIHRoaXMpCisKKyAgICogOmtiZDpgQy1kYCBkZWxldGUgbmV4dCBjaGFyYWN0ZXIKKworU3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgOmtiZDpgQy1jYCB0byBjb3B5IGFuZCA6a2JkOmBDLXZgIHRvIHBhc3RlKQorbWF5IHdvcmsuICBLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZy4KIAogCiBBdXRvbWF0aWMgaW5kZW50YXRpb24KQEAgLTI0NiwyNyArMzU2LDc2IEBACiBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzIChpbiB0aGUKIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzIChicmVhaywgcmV0dXJuIGV0Yy4pCiB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZyBpbmRlbnRhdGlvbiwgOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHVwCi10byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gOmtiZDpgVGFiYCBpbnNlcnRzIDEtNCBzcGFjZXMgKGluIHRoZSBQeXRob24KLVNoZWxsIHdpbmRvdyBvbmUgdGFiKS4gU2VlIGFsc28gdGhlIGluZGVudC9kZWRlbnQgcmVnaW9uIGNvbW1hbmRzIGluIHRoZSBlZGl0Ci1tZW51LgordG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuIDprYmQ6YFRhYmAgaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24KK1NoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24gSW5kZW50IHdpZHRoLiBDdXJyZW50bHkgdGFicworYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlIHRvIFRjbC9UayBsaW1pdGF0aW9ucy4KIAorU2VlIGFsc28gdGhlIGluZGVudC9kZWRlbnQgcmVnaW9uIGNvbW1hbmRzIGluIHRoZSBlZGl0IG1lbnUuCisKK0NvbXBsZXRpb25zCiteXl5eXl5eXl5eXgorCitDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YgY2xhc3NlcywKK2JvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gQ29tcGxldGlvbnMgYXJlIGFsc28gcHJvdmlkZWQgZm9yCitmaWxlbmFtZXMuCisKK1RoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheSAoZGVmYXVsdCBpcwordHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzIHR5cGVkLiBJZiBhZnRlciBvbmUKK29mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkCit0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlIGNvbnRpbnVhdGlvbiBpcyBmb3VuZC4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorOmtiZDpgVGFiYCB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCisKKydTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3csIGJ5IGRlZmF1bHQgdGhlCis6a2JkOmBDLXNwYWNlYCB3aWxsIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuIEluIGFuIGVtcHR5CitzdHJpbmcsIHRoaXMgd2lsbCBjb250YWluIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIE9uIGEKK2JsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCitjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiBJZiBzb21lCitjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorCitJZiBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCitlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gIEVudGVyaW5nIGEgOmtiZDpgdGFiYCB3aWxsCitjYXVzZSB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXRvciB3aW5kb3cgb3IKK1NoZWxsLiAgVHdvIDprYmQ6YHRhYmAgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKK3dpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2Ugc2VsZWN0aW9uLAorYW5kIHRoZSBzY3JvbGwgd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KKworIkhpZGRlbiIgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCituYW1lIGFmdGVyIGEgJy4nLCBlLmcuICdfJy4gVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorYGBfX2FsbF9fYGAgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCisKK0NvbXBsZXRpb25zIGFuZCB0aGUgJ0V4cGFuZCBXb3JkJyBmYWNpbGl0eSBjYW4gc2F2ZSBhIGxvdCBvZiB0eXBpbmchCisKK0NvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gTmFtZXMgaW4KK2FuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgYGBfX21haW5fX2BgIGFuZCA6ZGF0YTpgc3lzLm1vZHVsZXNgIHdpbGwKK25vdCBiZSBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzIHNpdHVhdGlvbi4KK05vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbiBzeXMubW9kdWxlcywgc28KK211Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KKworSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKK2xvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKK2JlIHNldCB0byB6ZXJvLiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIHByZXZlbnRpbmcgQUNXIHBvcHVwcyBpcyB0bworZGlzYWJsZSB0aGUgY2FsbCB0aXBzIGV4dGVuc2lvbi4KIAogUHl0aG9uIFNoZWxsIHdpbmRvdwogXl5eXl5eXl5eXl5eXl5eXl5eXgogCi0qIDprYmQ6YEMtQ2AgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZAorKiA6a2JkOmBDLWNgIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQKIAotKiA6a2JkOmBDLURgIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0IGEgYGA+Pj5gYCBwcm9tcHQKKyogOmtiZDpgQy1kYCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIGBgPj4+YGAgcHJvbXB0CisgICh0aGlzIGlzIDprYmQ6YEMtemAgb24gV2luZG93cykuCiAKLSogOmtiZDpgQWx0LXBgIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQKKyogOmtiZDpgQWx0LS9gIChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZwogCi0qIDprYmQ6YEFsdC1uYCByZXRyaWV2ZXMgbmV4dAorICBDb21tYW5kIGhpc3RvcnkKIAotKiA6a2JkOmBSZXR1cm5gIHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQKKyAgKiA6a2JkOmBBbHQtcGAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24KKyAgICBPUyBYIHVzZSA6a2JkOmBDLXBgLgogCi0qIDprYmQ6YEFsdC0vYCAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIGhlcmUKKyAgKiA6a2JkOmBBbHQtbmAgcmV0cmlldmVzIG5leHQuIE9uIE9TIFggdXNlIDprYmQ6YEMtbmAuCiAKLS4uIGluZGV4Ojogc2luZ2xlOiBpbmRlbnRhdGlvbgorICAqIDprYmQ6YFJldHVybmAgd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZAogCiAKIFN5bnRheCBjb2xvcnMKQEAgLTMwOCwxNyArNDY3LDE3IEBACiAKIFVwb24gc3RhcnR1cCB3aXRoIHRoZSBgYC1zYGAgb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5CiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDplbnZ2YXI6YElETEVTVEFSVFVQYCBvciA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYC4KLUlkbGUgZmlyc3QgY2hlY2tzIGZvciBgYElETEVTVEFSVFVQYGA7IGlmIGBgSURMRVNUQVJUVVBgYCBpcyBwcmVzZW50IHRoZSBmaWxlCi1yZWZlcmVuY2VkIGlzIHJ1bi4gIElmIGBgSURMRVNUQVJUVVBgYCBpcyBub3QgcHJlc2VudCwgSWRsZSBjaGVja3MgZm9yCitJRExFIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQorcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElETEUgY2hlY2tzIGZvcgogYGBQWVRIT05TVEFSVFVQYGAuICBGaWxlcyByZWZlcmVuY2VkIGJ5IHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKLWNvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSWRsZQorY29udmVuaWVudCBwbGFjZXMgdG8gc3RvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZnJlcXVlbnRseSBmcm9tIHRoZSBJRExFCiBzaGVsbCwgb3IgZm9yIGV4ZWN1dGluZyBpbXBvcnQgc3RhdGVtZW50cyB0byBpbXBvcnQgY29tbW9uIG1vZHVsZXMuCiAKIEluIGFkZGl0aW9uLCBgYFRrYGAgYWxzbyBsb2FkcyBhIHN0YXJ0dXAgZmlsZSBpZiBpdCBpcyBwcmVzZW50LiAgTm90ZSB0aGF0IHRoZQogVGsgZmlsZSBpcyBsb2FkZWQgdW5jb25kaXRpb25hbGx5LiAgVGhpcyBhZGRpdGlvbmFsIGZpbGUgaXMgYGAuSWRsZS5weWBgIGFuZCBpcwogbG9va2VkIGZvciBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgU3RhdGVtZW50cyBpbiB0aGlzIGZpbGUgd2lsbCBiZQogZXhlY3V0ZWQgaW4gdGhlIFRrIG5hbWVzcGFjZSwgc28gdGhpcyBmaWxlIGlzIG5vdCB1c2VmdWwgZm9yIGltcG9ydGluZyBmdW5jdGlvbnMKLXRvIGJlIHVzZWQgZnJvbSBJZGxlJ3MgUHl0aG9uIHNoZWxsLgordG8gYmUgdXNlZCBmcm9tIElETEUncyBQeXRob24gc2hlbGwuCiAKIAogQ29tbWFuZCBsaW5lIHVzYWdlCkBAIC0zNDksMyArNTA4LDQ1IEBACiAgICB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gYGBzeXMuYXJndmBgLgogCiAKK0FkZGl0aW9uYWwgaGVscCBzb3VyY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJRExFIGluY2x1ZGVzIGEgaGVscCBtZW51IGVudHJ5IGNhbGxlZCAiUHl0aG9uIERvY3MiIHRoYXQgd2lsbCBvcGVuIHRoZQorZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4KK1NlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgaGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIHRoZQorQ29uZmlndXJlIElETEUgZGlhbG9nLiBTZWUgdGhlIElETEUgaGVscCBvcHRpb24gaW4gdGhlIGhlbHAgbWVudSBvZiBJRExFIGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworCitPdGhlciBwcmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGhpZ2hsaWdodGluZywga2V5cywgYW5kIGdlbmVyYWwgcHJlZmVyZW5jZXMgY2FuIGJlCitjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAora2V5cyBjYW4gYmUgdXNlciBkZWZpbmVkLCBJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4KK2FkZGl0aW9uIGEgdXNlciBjYW4gY3JlYXRlIGEgY3VzdG9tIGtleSBzZXQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZwordW5kZXIgdGhlIGtleXMgdGFiLgorCitFeHRlbnNpb25zCistLS0tLS0tLS0tCisKK0lETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKK2NvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uICBUaGUKK2RlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorCisqIEZvcm1hdFBhcmFncmFwaAorCisqIEF1dG9FeHBhbmQKKworKiBab29tSGVpZ2h0CisKKyogU2NyaXB0QmluZGluZworCisqIENhbGxUaXBzCisKKyogUGFyZW5NYXRjaAorCisqIEF1dG9Db21wbGV0ZQorCisqIENvZGVDb250ZXh0CisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcC5yc3QgYi9Eb2MvbGlicmFyeS9pbXAucnN0CmluZGV4IDM2NGQ4MWUuLmVlMDJjM2YgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wLnJzdApAQCAtMSw2ICsxLDkgQEAKIDptb2Q6YGltcGAgLS0tIEFjY2VzcyB0aGUgOnJlZjpgaW1wb3J0IDxpbXBvcnRzeXN0ZW0+YCBpbnRlcm5hbHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgVGhlIDptb2Q6YGltcGAgcGFja2FnZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGluIGZhdm9yIG9mIDptb2Q6YGltcG9ydGxpYmAuCisKIC4uIG1vZHVsZTo6IGltcAogICAgOnN5bm9wc2lzOiBBY2Nlc3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50LgogCkBAIC0xMSwxMCArMTQsNiBAQAogOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50LiAgSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zOgogCiAKLS4uIG5vdGU6OgotICAgTmV3IHByb2dyYW1zIHNob3VsZCB1c2UgOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiB0aGlzIG1vZHVsZS4KLQotCiAuLiBmdW5jdGlvbjo6IGdldF9tYWdpYygpCiAKICAgIC4uIGluZGV4OjogcGFpcjogZmlsZTsgYnl0ZS1jb2RlCkBAIC0yMiw2ICsyMSw5IEBACiAgICBSZXR1cm4gdGhlIG1hZ2ljIHN0cmluZyB2YWx1ZSB1c2VkIHRvIHJlY29nbml6ZSBieXRlLWNvbXBpbGVkIGNvZGUgZmlsZXMKICAgICg6ZmlsZTpgLnB5Y2AgZmlsZXMpLiAgKFRoaXMgdmFsdWUgbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaCBQeXRob24gdmVyc2lvbi4pCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICBVc2UgOmF0dHI6YGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUmAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IGdldF9zdWZmaXhlcygpCiAKQEAgLTEwMSw4ICsxMDMsMTAgQEAKICAgIHVzaW5nIGEgOmtleXdvcmQ6YHRyeWAgLi4uIDprZXl3b3JkOmBmaW5hbGx5YCBzdGF0ZW1lbnQuCiAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLSAgICAgIFVubmVlZGVkIGFzIGxvYWRlcnMgc2hvdWxkIGJlIHVzZWQgdG8gbG9hZCBtb2R1bGVzIGFuZAotICAgICAgOmZ1bmM6YGZpbmRfbW9kdWxlYCBpcyBkZXByZWNhdGVkLgorICAgICAgSWYgcHJldmlvdXNseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggOmZ1bmM6YGltcC5maW5kX21vZHVsZWAgdGhlbgorICAgICAgY2FsbCBgYGxvYWRfbW9kdWxlKClgYCBvbiB0aGUgcmV0dXJuZWQgbG9hZGVyLiBJZiB5b3Ugd2lzaCB0byBsb2FkIGEKKyAgICAgIG1vZHVsZSBmcm9tIGEgc3BlY2lmaWMgZmlsZSwgdGhlbiB1c2Ugb25lIG9mIHRoZSBmaWxlLWJhc2VkIGxvYWRlcnMgZm91bmQKKyAgICAgIGluIDptb2Q6YGltcG9ydGxpYi5tYWNoaW5lcnlgLgogCiAKIC4uIGZ1bmN0aW9uOjogbmV3X21vZHVsZShuYW1lKQpAQCAtMTEwLDYgKzExNCw5IEBACiAgICBSZXR1cm4gYSBuZXcgZW1wdHkgbW9kdWxlIG9iamVjdCBjYWxsZWQgKm5hbWUqLiAgVGhpcyBvYmplY3QgaXMgKm5vdCogaW5zZXJ0ZWQKICAgIGluIGBgc3lzLm1vZHVsZXNgYC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpjbGFzczpgdHlwZXMuTW9kdWxlVHlwZWAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCiAKQEAgLTE3Niw2ICsxODMsOSBAQAogICAgICAgUmVsaWVzIG9uIGJvdGggYGBfX25hbWVfX2BgIGFuZCBgYF9fbG9hZGVyX19gYCBiZWluZyBkZWZpbmVkIG9uIHRoZSBtb2R1bGUKICAgICAgIGJlaW5nIHJlbG9hZGVkIGluc3RlYWQgb2YganVzdCBgYF9fbmFtZV9fYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnJlbG9hZGAgaW5zdGVhZC4KKwogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgY29udmVuaWVuY2VzIGZvciBoYW5kbGluZyA6cGVwOmAzMTQ3YCBieXRlLWNvbXBpbGVkCiBmaWxlIHBhdGhzLgpAQCAtMjAxLDYgKzIxMSw5IEBACiAgICAgICBJZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgYGBOb25lYGAsIHRoZW4KICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlzIHJhaXNlZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZWAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCiAKQEAgLTIxNiwxNCArMjI5LDE3IEBACiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuCiAgICAgICA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc291cmNlX2Zyb21fY2FjaGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfdGFnKCkKIAogICAgUmV0dXJuIHRoZSA6cGVwOmAzMTQ3YCBtYWdpYyB0YWcgc3RyaW5nIG1hdGNoaW5nIHRoaXMgdmVyc2lvbiBvZiBQeXRob24ncwogICAgbWFnaWMgbnVtYmVyLCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgZ2V0X21hZ2ljYC4KIAotICAgLi4gbm90ZTo6Ci0gICAgICBZb3UgbWF5IHVzZSA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgZGlyZWN0bHkgc3RhcnRpbmcKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgZGlyZWN0bHkgc3RhcnRpbmcKICAgICAgIGluIFB5dGhvbiAzLjMuCiAKIApAQCAtMjUxLDYgKzI2Nyw4IEBACiAgICB0aGUgbW9zdCBwYXJ0LiAgQSBnbG9iYWwgaW1wb3J0IGxvY2sgaXMga2VwdCBmb3Igc29tZSBjcml0aWNhbCB0YXNrcywKICAgIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZSBwZXItbW9kdWxlIGxvY2tzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiBhY3F1aXJlX2xvY2soKQogCkBAIC0yNjksNiArMjg3LDggQEAKICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAogICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IHJlbGVhc2VfbG9jaygpCiAKQEAgLTI4MCw2ICszMDAsOCBAQAogICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCiAgICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorCiAKIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHdpdGggaW50ZWdlciB2YWx1ZXMsIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUsIGFyZSB1c2VkCiB0byBpbmRpY2F0ZSB0aGUgc2VhcmNoIHJlc3VsdCBvZiA6ZnVuYzpgZmluZF9tb2R1bGVgLgpAQCAtMzQ1LDYgKzM2Nyw5IEBACiAgICAgICBgYE5vbmVgYCBpcyBpbnNlcnRlZCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkIG9mIGFuCiAgICAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YE51bGxJbXBvcnRlcmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIEluc2VydCBgYE5vbmVgYCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkLgorCiAKIC4uIF9leGFtcGxlcy1pbXA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CmluZGV4IGU1MWIzMTUuLjE3N2YxNWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtOTAsNyArOTAsNyBAQAogCiAgICBGaW5kIHRoZSBsb2FkZXIgZm9yIGEgbW9kdWxlLCBvcHRpb25hbGx5IHdpdGhpbiB0aGUgc3BlY2lmaWVkICpwYXRoKi4gSWYgdGhlCiAgICBtb2R1bGUgaXMgaW4gOmF0dHI6YHN5cy5tb2R1bGVzYCwgdGhlbiBgYHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX19gYCBpcwotICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlCisgICByZXR1cm5lZCAodW5sZXNzIHRoZSBsb2FkZXIgd291bGQgYmUgYGBOb25lYGAgb3IgaXMgbm90IHNldCwgaW4gd2hpY2ggY2FzZQogICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkKS4gT3RoZXJ3aXNlIGEgc2VhcmNoIHVzaW5nIDphdHRyOmBzeXMubWV0YV9wYXRoYAogICAgaXMgZG9uZS4gYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgbm8gbG9hZGVyIGlzIGZvdW5kLgogCkBAIC05OSw2ICs5OSwxMiBAQAogICAgd2lsbCBuZWVkIHRvIGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIG9mIHRoZSBzdWJtb2R1bGUgYW5kIHVzZSB0aGUgY29ycmVjdAogICAgYXJndW1lbnQgdG8gKnBhdGgqLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgX19sb2FkZXJfX2BgIGlzIG5vdCBzZXQsIHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgLCBqdXN0IGxpa2Ugd2hlbiB0aGUKKyAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYGBOb25lYGAuCisKIC4uIGZ1bmN0aW9uOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICBJbnZhbGlkYXRlIHRoZSBpbnRlcm5hbCBjYWNoZXMgb2YgZmluZGVycyBzdG9yZWQgYXQKQEAgLTEwOSw2ICsxMTUsNzQgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGZ1bmN0aW9uOjogcmVsb2FkKG1vZHVsZSkKKworICAgUmVsb2FkIGEgcHJldmlvdXNseSBpbXBvcnRlZCAqbW9kdWxlKi4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgbW9kdWxlIG9iamVjdCwKKyAgIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UKKyAgIGhhdmUgZWRpdGVkIHRoZSBtb2R1bGUgc291cmNlIGZpbGUgdXNpbmcgYW4gZXh0ZXJuYWwgZWRpdG9yIGFuZCB3YW50IHRvIHRyeQorICAgb3V0IHRoZSBuZXcgdmVyc2lvbiB3aXRob3V0IGxlYXZpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoZSByZXR1cm4gdmFsdWUKKyAgIGlzIHRoZSBtb2R1bGUgb2JqZWN0ICh3aGljaCBjYW4gYmUgZGlmZmVyZW50IGlmIHJlLWltcG9ydGluZyBjYXVzZXMgYQorICAgZGlmZmVyZW50IG9iamVjdCB0byBiZSBwbGFjZWQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCkuCisKKyAgIFdoZW4gOmZ1bmM6YHJlbG9hZGAgaXMgZXhlY3V0ZWQ6CisKKyAgICogUHl0aG9uIG1vZHVsZXMnIGNvZGUgaXMgcmVjb21waWxlZCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBjb2RlIHJlLWV4ZWN1dGVkLAorICAgICBkZWZpbmluZyBhIG5ldyBzZXQgb2Ygb2JqZWN0cyB3aGljaCBhcmUgYm91bmQgdG8gbmFtZXMgaW4gdGhlIG1vZHVsZSdzCisgICAgIGRpY3Rpb25hcnkgYnkgcmV1c2luZyB0aGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggb3JpZ2luYWxseSBsb2FkZWQgdGhlCisgICAgIG1vZHVsZS4gIFRoZSBgYGluaXRgYCBmdW5jdGlvbiBvZiBleHRlbnNpb24gbW9kdWxlcyBpcyBub3QgY2FsbGVkIGEgc2Vjb25kCisgICAgIHRpbWUuCisKKyAgICogQXMgd2l0aCBhbGwgb3RoZXIgb2JqZWN0cyBpbiBQeXRob24gdGhlIG9sZCBvYmplY3RzIGFyZSBvbmx5IHJlY2xhaW1lZAorICAgICBhZnRlciB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3AgdG8gemVyby4KKworICAgKiBUaGUgbmFtZXMgaW4gdGhlIG1vZHVsZSBuYW1lc3BhY2UgYXJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gYW55IG5ldyBvcgorICAgICBjaGFuZ2VkIG9iamVjdHMuCisKKyAgICogT3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgb2xkIG9iamVjdHMgKHN1Y2ggYXMgbmFtZXMgZXh0ZXJuYWwgdG8gdGhlIG1vZHVsZSkgYXJlCisgICAgIG5vdCByZWJvdW5kIHRvIHJlZmVyIHRvIHRoZSBuZXcgb2JqZWN0cyBhbmQgbXVzdCBiZSB1cGRhdGVkIGluIGVhY2ggbmFtZXNwYWNlCisgICAgIHdoZXJlIHRoZXkgb2NjdXIgaWYgdGhhdCBpcyBkZXNpcmVkLgorCisgICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3RoZXIgY2F2ZWF0czoKKworICAgSWYgYSBtb2R1bGUgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0IGJ1dCBpdHMgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBmaXJzdAorICAgOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50IGZvciBpdCBkb2VzIG5vdCBiaW5kIGl0cyBuYW1lIGxvY2FsbHksIGJ1dCBkb2VzCisgICBzdG9yZSBhIChwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQpIG1vZHVsZSBvYmplY3QgaW4gYGBzeXMubW9kdWxlc2BgLiAgVG8gcmVsb2FkCisgICB0aGUgbW9kdWxlIHlvdSBtdXN0IGZpcnN0IDprZXl3b3JkOmBpbXBvcnRgIGl0IGFnYWluICh0aGlzIHdpbGwgYmluZCB0aGUgbmFtZQorICAgdG8gdGhlIHBhcnRpYWxseSBpbml0aWFsaXplZCBtb2R1bGUgb2JqZWN0KSBiZWZvcmUgeW91IGNhbiA6ZnVuYzpgcmVsb2FkYCBpdC4KKworICAgV2hlbiBhIG1vZHVsZSBpcyByZWxvYWRlZCwgaXRzIGRpY3Rpb25hcnkgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIGdsb2JhbAorICAgdmFyaWFibGVzKSBpcyByZXRhaW5lZC4gIFJlZGVmaW5pdGlvbnMgb2YgbmFtZXMgd2lsbCBvdmVycmlkZSB0aGUgb2xkCisgICBkZWZpbml0aW9ucywgc28gdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgcHJvYmxlbS4gIElmIHRoZSBuZXcgdmVyc2lvbiBvZiBhCisgICBtb2R1bGUgZG9lcyBub3QgZGVmaW5lIGEgbmFtZSB0aGF0IHdhcyBkZWZpbmVkIGJ5IHRoZSBvbGQgdmVyc2lvbiwgdGhlIG9sZAorICAgZGVmaW5pdGlvbiByZW1haW5zLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIHRoZSBtb2R1bGUncyBhZHZhbnRhZ2UgaWYgaXQKKyAgIG1haW50YWlucyBhIGdsb2JhbCB0YWJsZSBvciBjYWNoZSBvZiBvYmplY3RzIC0tLSB3aXRoIGEgOmtleXdvcmQ6YHRyeWAKKyAgIHN0YXRlbWVudCBpdCBjYW4gdGVzdCBmb3IgdGhlIHRhYmxlJ3MgcHJlc2VuY2UgYW5kIHNraXAgaXRzIGluaXRpYWxpemF0aW9uIGlmCisgICBkZXNpcmVkOjoKKworICAgICAgdHJ5OgorICAgICAgICAgIGNhY2hlCisgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgIGNhY2hlID0ge30KKworICAgSXQgaXMgbGVnYWwgdGhvdWdoIGdlbmVyYWxseSBub3QgdmVyeSB1c2VmdWwgdG8gcmVsb2FkIGJ1aWx0LWluIG9yCisgICBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyAodGhpcyBpcyBub3QgdHJ1ZSBmb3IgZS5nLiA6bW9kOmBzeXNgLAorICAgOm1vZDpgX19tYWluX19gLCA6bW9kOmBidWlsdGluc2AgYW5kIG90aGVyIGtleSBtb2R1bGVzIHdoZXJlIHJlbG9hZGluZyBpcworICAgZnJvd25lZCB1cG9uKS4gSW4gbWFueSBjYXNlcywgaG93ZXZlciwgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdCBkZXNpZ25lZCB0bworICAgYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCBtYXkgZmFpbCBpbiBhcmJpdHJhcnkgd2F5cyB3aGVuIHJlbG9hZGVkLgorCisgICBJZiBhIG1vZHVsZSBpbXBvcnRzIG9iamVjdHMgZnJvbSBhbm90aGVyIG1vZHVsZSB1c2luZyA6a2V5d29yZDpgZnJvbWAgLi4uCisgICA6a2V5d29yZDpgaW1wb3J0YCAuLi4sIGNhbGxpbmcgOmZ1bmM6YHJlbG9hZGAgZm9yIHRoZSBvdGhlciBtb2R1bGUgZG9lcyBub3QKKyAgIHJlZGVmaW5lIHRoZSBvYmplY3RzIGltcG9ydGVkIGZyb20gaXQgLS0tIG9uZSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8KKyAgIHJlLWV4ZWN1dGUgdGhlIDprZXl3b3JkOmBmcm9tYCBzdGF0ZW1lbnQsIGFub3RoZXIgaXMgdG8gdXNlIDprZXl3b3JkOmBpbXBvcnRgCisgICBhbmQgcXVhbGlmaWVkIG5hbWVzICgqbW9kdWxlLm5hbWUqKSBpbnN0ZWFkLgorCisgICBJZiBhIG1vZHVsZSBpbnN0YW50aWF0ZXMgaW5zdGFuY2VzIG9mIGEgY2xhc3MsIHJlbG9hZGluZyB0aGUgbW9kdWxlIHRoYXQKKyAgIGRlZmluZXMgdGhlIGNsYXNzIGRvZXMgbm90IGFmZmVjdCB0aGUgbWV0aG9kIGRlZmluaXRpb25zIG9mIHRoZSBpbnN0YW5jZXMgLS0tCisgICB0aGV5IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkIGNsYXNzIGRlZmluaXRpb24uICBUaGUgc2FtZSBpcyB0cnVlIGZvciBkZXJpdmVkCisgICBjbGFzc2VzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiA6bW9kOmBpbXBvcnRsaWIuYWJjYCAtLSBBYnN0cmFjdCBiYXNlIGNsYXNzZXMgcmVsYXRlZCB0byBpbXBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMyLDggKzIwNiw2IEBACiAgICAgICAgICAgICAgICArLS0gRXhlY3V0aW9uTG9hZGVyIC0tKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBGaWxlTG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFNvdXJjZUxvYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5TG9hZGVyIChkZXByZWNhdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5UHljTG9hZGVyIChkZXByZWNhdGVkKQogCiAKIC4uIGNsYXNzOjogRmluZGVyCkBAIC0xNDksNiArMjIxLDEwIEBACiAgICAgICBtb2R1bGUuICBPcmlnaW5hbGx5IHNwZWNpZmllZCBpbiA6cGVwOmAzMDJgLCB0aGlzIG1ldGhvZCB3YXMgbWVhbnQKICAgICAgIGZvciB1c2UgaW4gOmRhdGE6YHN5cy5tZXRhX3BhdGhgIGFuZCBpbiB0aGUgcGF0aC1iYXNlZCBpbXBvcnQgc3Vic3lzdGVtLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogTWV0YVBhdGhGaW5kZXIKIApAQCAtMTY1LDEyICsyNDEsMTkgQEAKICAgICAgIHdpbGwgYmUgdGhlIHZhbHVlIG9mIDphdHRyOmBfX3BhdGhfX2AgZnJvbSB0aGUgcGFyZW50CiAgICAgICBwYWNrYWdlLiBJZiBhIGxvYWRlciBjYW5ub3QgYmUgZm91bmQsIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAgICAuLiBtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCwgd2hlbiBjYWxsZWQsIHNob3VsZCBpbnZhbGlkYXRlIGFueSBpbnRlcm5hbAogICAgICAgY2FjaGUgdXNlZCBieSB0aGUgZmluZGVyLiBVc2VkIGJ5IDpmdW5jOmBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXNgCiAgICAgICB3aGVuIGludmFsaWRhdGluZyB0aGUgY2FjaGVzIG9mIGFsbCBmaW5kZXJzIG9uIDpkYXRhOmBzeXMubWV0YV9wYXRoYC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiBgYE5vdEltcGxlbWVudGVkYGAuCisKIAogLi4gY2xhc3M6OiBQYXRoRW50cnlGaW5kZXIKIApAQCAtMTc4LDcgKzI2MSw3IEBACiAgICBpdCBiZWFycyBzb21lIHNpbWlsYXJpdGllcyB0byA6Y2xhc3M6YE1ldGFQYXRoRmluZGVyYCwgYGBQYXRoRW50cnlGaW5kZXJgYAogICAgaXMgbWVhbnQgZm9yIHVzZSBvbmx5IHdpdGhpbiB0aGUgcGF0aC1iYXNlZCBpbXBvcnQgc3Vic3lzdGVtIHByb3ZpZGVkCiAgICBieSA6Y2xhc3M6YFBhdGhGaW5kZXJgLiBUaGlzIEFCQyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgRmluZGVyYCBmb3IKLSAgIGNvbXBhdGliaWxpdHkuCisgICBjb21wYXRpYmlsaXR5IHJlYXNvbnMgb25seS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTE5MCw5ICsyNzMsMTIgQEAKICAgICAgIHBhY2thZ2UuIFRoZSBsb2FkZXIgbWF5IGJlIGBgTm9uZWBgIHdoaWxlIHNwZWNpZnlpbmcgYGBwb3J0aW9uYGAgdG8KICAgICAgIHNpZ25pZnkgdGhlIGNvbnRyaWJ1dGlvbiBvZiB0aGUgZmlsZSBzeXN0ZW0gbG9jYXRpb25zIHRvIGEgbmFtZXNwYWNlCiAgICAgICBwYWNrYWdlLiBBbiBlbXB0eSBsaXN0IGNhbiBiZSB1c2VkIGZvciBgYHBvcnRpb25gYCB0byBzaWduaWZ5IHRoZSBsb2FkZXIKLSAgICAgIGlzIG5vdCBwYXJ0IG9mIGEgcGFja2FnZS4gSWYgYGBsb2FkZXJgYCBpcyBgYE5vbmVgYCBhbmQgYGBwb3J0aW9uYGAgaXMKLSAgICAgIHRoZSBlbXB0eSBsaXN0IHRoZW4gbm8gbG9hZGVyIG9yIGxvY2F0aW9uIGZvciBhIG5hbWVzcGFjZSBwYWNrYWdlIHdlcmUKLSAgICAgIGZvdW5kIChpLmUuIGZhaWx1cmUgdG8gZmluZCBhbnl0aGluZyBmb3IgdGhlIG1vZHVsZSkuCisgICAgICBpcyBub3QgcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLiBJZiBgYGxvYWRlcmBgIGlzIGBgTm9uZWBgIGFuZAorICAgICAgYGBwb3J0aW9uYGAgaXMgdGhlIGVtcHR5IGxpc3QgdGhlbiBubyBsb2FkZXIgb3IgbG9jYXRpb24gZm9yIGEgbmFtZXNwYWNlCisgICAgICBwYWNrYWdlIHdlcmUgZm91bmQgKGkuZS4gZmFpbHVyZSB0byBmaW5kIGFueXRoaW5nIGZvciB0aGUgbW9kdWxlKS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGAoTm9uZSwgW10pYGAgaW5zdGVhZCBvZiByYWlzaW5nIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAuLiBtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSkKIApAQCAtMjI0LDEyICszMTAsMTEgQEAKICAgICAgICAgZnJvbSB0aGUgaW1wb3J0LiBJZiB0aGUgbG9hZGVyIGluc2VydGVkIGEgbW9kdWxlIGFuZCB0aGUgbG9hZCBmYWlscywgaXQKICAgICAgICAgbXVzdCBiZSByZW1vdmVkIGJ5IHRoZSBsb2FkZXIgZnJvbSA6ZGF0YTpgc3lzLm1vZHVsZXNgOyBtb2R1bGVzIGFscmVhZHkKICAgICAgICAgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlciBiZWdhbiBleGVjdXRpb24gc2hvdWxkIGJlIGxlZnQKLSAgICAgICAgYWxvbmUuIFRoZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIGRlY29yYXRvciBoYW5kbGVzCi0gICAgICAgIGFsbCBvZiB0aGVzZSBkZXRhaWxzLgorICAgICAgICBhbG9uZSAoc2VlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmApLgogCiAgICAgICAgIFRoZSBsb2FkZXIgc2hvdWxkIHNldCBzZXZlcmFsIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZS4KICAgICAgICAgKE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGNoYW5nZSB3aGVuIGEgbW9kdWxlIGlzCi0gICAgICAgIHJlbG9hZGVkLikKKyAgICAgICAgcmVsb2FkZWQpOgogCiAgICAgICAgIC0gOmF0dHI6YF9fbmFtZV9fYAogICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KQEAgLTI0OSwyMCArMzM0LDI4IEBACiAgICAgICAgIC0gOmF0dHI6YF9fcGFja2FnZV9fYAogICAgICAgICAgICAgVGhlIHBhcmVudCBwYWNrYWdlIGZvciB0aGUgbW9kdWxlL3BhY2thZ2UuIElmIHRoZSBtb2R1bGUgaXMKICAgICAgICAgICAgIHRvcC1sZXZlbCB0aGVuIGl0IGhhcyBhIHZhbHVlIG9mIHRoZSBlbXB0eSBzdHJpbmcuIFRoZQotICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdlYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUgZGV0YWlscwotICAgICAgICAgICAgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCisgICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZQorICAgICAgICAgICAgZGV0YWlscyBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KIAogICAgICAgICAtIDphdHRyOmBfX2xvYWRlcl9fYAotICAgICAgICAgICAgVGhlIGxvYWRlciB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4KLSAgICAgICAgICAgIChUaGlzIGlzIG5vdCBzZXQgYnkgdGhlIGJ1aWx0LWluIGltcG9ydCBtYWNoaW5lcnksCi0gICAgICAgICAgICBidXQgaXQgc2hvdWxkIGJlIHNldCB3aGVuZXZlciBhIDp0ZXJtOmBsb2FkZXJgIGlzIHVzZWQuKQorICAgICAgICAgICAgVGhlIGxvYWRlciB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4gVGhlCisgICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZQorICAgICAgICAgICAgZGV0YWlscyBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZgorICAgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAogICAgIC4uIG1ldGhvZDo6IG1vZHVsZV9yZXByKG1vZHVsZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQotICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLCBhcyBhIHN0cmluZy4KKyAgICAgICAgQW4gb3B0aW9uYWwgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKKyAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuIFRoZSBtb2R1bGUgdHlwZSdzIGRlZmF1bHQgcmVwcigpIHdpbGwKKyAgICAgICAgdXNlIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgYXMgYXBwcm9wcmlhdGUuCiAKLSAgICAgICAgLi4gdmVyc2lvbmFkZGVkOiAzLjMKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTWFkZSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuIGFic3RyYWN0bWV0aG9kLgogCiAKIC4uIGNsYXNzOjogUmVzb3VyY2VMb2FkZXIKQEAgLTI4MSw2ICszNzQsOSBAQAogICAgICAgICBiZSBmb3VuZC4gVGhlICpwYXRoKiBpcyBleHBlY3RlZCB0byBiZSBjb25zdHJ1Y3RlZCB1c2luZyBhIG1vZHVsZSdzCiAgICAgICAgIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9yIGFuIGl0ZW0gZnJvbSBhIHBhY2thZ2UncyA6YXR0cjpgX19wYXRoX19gLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJT0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogSW5zcGVjdExvYWRlcgogCkBAIC0yODksMTQgKzM4NSwyMSBAQAogCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiB0aGUgOmNsYXNzOmBjb2RlYCBvYmplY3QgZm9yIGEgbW9kdWxlLgotICAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAorICAgICAgICBSZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBhIG1vZHVsZS4KKyAgICAgICAgYGBOb25lYGAgc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGNvZGUgb2JqZWN0CiAgICAgICAgIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuICA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkIGlmIGxvYWRlciBjYW5ub3QKICAgICAgICAgZmluZCB0aGUgcmVxdWVzdGVkIG1vZHVsZS4KIAorICAgICAgICAuLiBub3RlOjoKKyAgICAgICAgICAgV2hpbGUgdGhlIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdAorICAgICAgICAgICBpdCBiZSBvdmVycmlkZGVuIGlmIHBvc3NpYmxlIGZvciBwZXJmb3JtYW5jZS4KKwogICAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZSBtZXRob2QKIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgYWJzdHJhY3QgYW5kIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCisKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZS4gSXQgaXMgcmV0dXJuZWQgYXMKQEAgLTMwNSwxMiArNDA4LDMzIEBACiAgICAgICAgIGlmIG5vIHNvdXJjZSBpcyBhdmFpbGFibGUgKGUuZy4gYSBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMKICAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlmIHRoZSBsb2FkZXIgY2Fubm90IGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAgICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIGEgdHJ1ZSB2YWx1ZSBpZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgYQogICAgICAgICBmYWxzZSB2YWx1ZSBvdGhlcndpc2UuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgdGhlCiAgICAgICAgIDp0ZXJtOmBsb2FkZXJgIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCisgICAgLi4gbWV0aG9kOjogc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aD0nPHN0cmluZz4nKQorCisgICAgICAgIENyZWF0ZSBhIGNvZGUgb2JqZWN0IGZyb20gUHl0aG9uIHNvdXJjZS4KKworICAgICAgICBUaGUgKmRhdGEqIGFyZ3VtZW50IGNhbiBiZSB3aGF0ZXZlciB0aGUgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uCisgICAgICAgIHN1cHBvcnRzIChpLmUuIHN0cmluZyBvciBieXRlcykuIFRoZSAqcGF0aCogYXJndW1lbnQgc2hvdWxkIGJlCisgICAgICAgIHRoZSAicGF0aCIgdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIG9yaWdpbmF0ZWQgZnJvbSwgd2hpY2ggY2FuIGJlIGFuCisgICAgICAgIGFic3RyYWN0IGNvbmNlcHQgKGUuZy4gbG9jYXRpb24gaW4gYSB6aXAgZmlsZSkuCisKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShmdWxsbmFtZSkKKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgTG9hZGVyLmxvYWRfbW9kdWxlYC4KKwogCiAuLiBjbGFzczo6IEV4ZWN1dGlvbkxvYWRlcgogCkBAIC0zMjgsNiArNDUyLDkgQEAKICAgICAgICAgdGhlIHNvdXJjZSBmaWxlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBieXRlY29kZSB3YXMgdXNlZCB0byBsb2FkIHRoZQogICAgICAgICBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIApAQCAtMzU4LDcgKzQ4NSw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCiAKLSAgICAgIFJldHVybnMgdGhlIG9wZW4sIGJpbmFyeSBmaWxlIGZvciAqcGF0aCouCisgICAgICBSZWFkcyAqcGF0aCogYXMgYSBiaW5hcnkgZmlsZSBhbmQgcmV0dXJucyB0aGUgYnl0ZXMgZnJvbSBpdC4KIAogCiAuLiBjbGFzczo6IFNvdXJjZUxvYWRlcgpAQCAtMzczLDcgKzUwMCw4IEBACiAgICAgICAgICAgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgVGhlIGFic3RyYWN0IG1ldGhvZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGFyZSB0byBhZGQgb3B0aW9uYWwgYnl0ZWNvZGUKLSAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyBjYXVzZXMgdGhlIGxvYWRlciB0bworICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIChvciBjYXVzaW5nIHRoZW0gdG8KKyAgICByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCkgY2F1c2VzIHRoZSBsb2FkZXIgdG8KICAgICBvbmx5IHdvcmsgd2l0aCBzb3VyY2UgY29kZS4gSW1wbGVtZW50aW5nIHRoZSBtZXRob2RzIGFsbG93cyB0aGUgbG9hZGVyIHRvCiAgICAgd29yayB3aXRoIHNvdXJjZSAqYW5kKiBieXRlY29kZSBmaWxlczsgaXQgZG9lcyBub3QgYWxsb3cgZm9yICpzb3VyY2VsZXNzKgogICAgIGxvYWRpbmcgd2hlcmUgb25seSBieXRlY29kZSBpcyBwcm92aWRlZC4gIEJ5dGVjb2RlIGZpbGVzIGFyZSBhbgpAQCAtMzkwLDEwICs1MTgsMTMgQEAKICAgICAgICAgLSBgYCdzaXplJ2BgIChvcHRpb25hbCk6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBBbnkgb3RoZXIga2V5cyBpbiB0aGUgZGljdGlvbmFyeSBhcmUgaWdub3JlZCwgdG8gYWxsb3cgZm9yIGZ1dHVyZQotICAgICAgICBleHRlbnNpb25zLgorICAgICAgICBleHRlbnNpb25zLiBJZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZCwgOmV4YzpgSU9FcnJvcmAgaXMgcmFpc2VkLgogCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YElPRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBwYXRoX210aW1lKHBhdGgpCiAKICAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUKQEAgLTQwMiw3ICs1MzMsMTAgQEAKICAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMwogICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiA6bWV0aDpgcGF0aF9zdGF0c2AuICBZb3UgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgaXQsIGJ1dCBpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgcHVycG9zZXMuCisgICAgICAgICAgIHB1cnBvc2VzLiBSYWlzZSA6ZXhjOmBJT0Vycm9yYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KKworICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgICAgUmFpc2UgOmV4YzpgSU9FcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAogICAgIC4uIG1ldGhvZDo6IHNldF9kYXRhKHBhdGgsIGRhdGEpCiAKQEAgLTQxNCw2ICs1NDgsOSBAQAogICAgICAgICAoOmF0dHI6YGVycm5vLkVBQ0NFU2AvOmV4YzpgUGVybWlzc2lvbkVycm9yYCksIGRvIG5vdCBwcm9wYWdhdGUgdGhlCiAgICAgICAgIGV4Y2VwdGlvbi4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgcmFpc2VzIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdoZW4gY2FsbGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKICAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgLgpAQCAtNDM1LDE0MiArNTcyLDYgQEAKICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGVuZCBpbiBgYF9faW5pdF9fYGAuCiAKIAotLi4gY2xhc3M6OiBQeUxvYWRlcgotCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20KLSAgICA6Y2xhc3M6YEV4ZWN1dGlvbkxvYWRlcmAgYW5kCi0gICAgOmNsYXNzOmBSZXNvdXJjZUxvYWRlcmAgZGVzaWduZWQgdG8gZWFzZSB0aGUgbG9hZGluZyBvZgotICAgIFB5dGhvbiBzb3VyY2UgbW9kdWxlcyAoYnl0ZWNvZGUgaXMgbm90IGhhbmRsZWQ7IHNlZQotICAgIDpjbGFzczpgU291cmNlTG9hZGVyYCBmb3IgYSBzb3VyY2UvYnl0ZWNvZGUgQUJDKS4gQSBzdWJjbGFzcwotICAgIGltcGxlbWVudGluZyB0aGlzIEFCQyB3aWxsIG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBleHBvc2luZyBob3cgdGhlIHNvdXJjZQotICAgIGNvZGUgaXMgc3RvcmVkOyBhbGwgb3RoZXIgZGV0YWlscyBmb3IgbG9hZGluZyBQeXRob24gc291cmNlIGNvZGUgd2lsbCBiZQotICAgIGhhbmRsZWQgYnkgdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiBrZXkgbWV0aG9kcy4KLQotICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgICAgICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgaXMKLSAgICAgICAgc2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQuIFNlZSBiZWxvdyBmb3IgaG93IHRvIGNyZWF0ZSBhCi0gICAgICAgIHN1YmNsYXNzIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkcy4KLQotICAgIElmIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4xIGlzIHJlcXVpcmVkLCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tCi0gICAgdG8gaW1wbGVtZW50IGEgc3ViY2xhc3MgdGhhdCB3aWxsIHdvcmsgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMgKG1ha2Ugc3VyZQotICAgIHRvIGltcGxlbWVudCA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWApOjoKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcm9tIGltcG9ydGxpYi5hYmMgaW1wb3J0IFNvdXJjZUxvYWRlcgotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBmcm9tIGltcG9ydGxpYi5hYmMgaW1wb3J0IFB5TG9hZGVyIGFzIFNvdXJjZUxvYWRlcgotCi0KLSAgICAgICAgY2xhc3MgQ3VzdG9tTG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0gICAgICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLiIiIgotICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IC4uLgotCi0gICAgICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIkltcGxlbWVudCBzb3VyY2VfcGF0aCBpbiB0ZXJtcyBvZiBnZXRfZmlsZW5hbWUuIiIiCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IGlzX3BhY2thZ2UgYnkgbG9va2luZyBmb3IgYW4gX19pbml0X18gZmlsZQotICAgICAgICAgICAgICAgIG5hbWUgYXMgcmV0dXJuZWQgYnkgZ2V0X2ZpbGVuYW1lLiIiIgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotCi0gICAgLi4gbWV0aG9kOjogc291cmNlX3BhdGgoZnVsbG5hbWUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUgc291cmNlIGNvZGUgZm9yIGEKLSAgICAgICAgbW9kdWxlLiBTaG91bGQgcmV0dXJuIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLgotICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGlmIHRoZSBsb2FkZXIga25vd3MgaXQgY2Fubm90IGhhbmRsZSB0aGUKLSAgICAgICAgbW9kdWxlLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAgdGhhdAotICAgICAgICByZWxpZXMgb24gOm1ldGg6YHNvdXJjZV9wYXRoYC4gSWYgOm1ldGg6YHNvdXJjZV9wYXRoYCByZXR1cm5zCi0gICAgICAgIGBgTm9uZWBgLCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKLSAgICAgICAgdGhhdCBsb2FkcyBQeXRob24gc291cmNlIGNvZGUuIEFsbCBuZWVkZWQgaW5mb3JtYXRpb24gY29tZXMgZnJvbSB0aGUKLSAgICAgICAgYWJzdHJhY3QgbWV0aG9kcyByZXF1aXJlZCBieSB0aGlzIEFCQy4gVGhlIG9ubHkgcGVydGluZW50IGFzc3VtcHRpb24KLSAgICAgICAgbWFkZSBieSB0aGlzIG1ldGhvZCBpcyB0aGF0IHdoZW4gbG9hZGluZyBhIHBhY2thZ2UKLSAgICAgICAgOmF0dHI6YF9fcGF0aF9fYCBpcyBzZXQgdG8gYGBbb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKV1gYC4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZWAgdGhhdCBjcmVhdGVzIGNvZGUgb2JqZWN0cwotICAgICAgICBmcm9tIFB5dGhvbiBzb3VyY2UgY29kZSwgYnkgcmVxdWVzdGluZyB0aGUgc291cmNlIGNvZGUgKHVzaW5nCi0gICAgICAgIDptZXRoOmBzb3VyY2VfcGF0aGAgYW5kIDptZXRoOmBnZXRfZGF0YWApIGFuZCBjb21waWxpbmcgaXQgd2l0aCB0aGUKLSAgICAgICAgYnVpbHQtaW4gOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X3NvdXJjZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZWAuIFVzZXMKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGFgIGFuZCA6bWV0aDpgc291cmNlX3BhdGhgCi0gICAgICAgIHRvIGdldCB0aGUgc291cmNlIGNvZGUuICBJdCB0cmllcyB0byBndWVzcyB0aGUgc291cmNlIGVuY29kaW5nIHVzaW5nCi0gICAgICAgIDpmdW5jOmB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmdgLgotCi0KLS4uIGNsYXNzOjogUHlQeWNMb2FkZXIKLQotICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tIDpjbGFzczpgUHlMb2FkZXJgLgotICAgIFRoaXMgQUJDIGlzIG1lYW50IHRvIGhlbHAgaW4gY3JlYXRpbmcgbG9hZGVycyB0aGF0IHN1cHBvcnQgYm90aCBQeXRob24KLSAgICBzb3VyY2UgYW5kIGJ5dGVjb2RlLgotCi0gICAgLi4gZGVwcmVjYXRlZDo6IDMuMgotICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCB0bwotICAgICAgICBwcm9wZXJseSBzdXBwb3J0IDpwZXA6YDMxNDdgLiBJZiBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkIHdpdGgKLSAgICAgICAgUHl0aG9uIDMuMSwgaW1wbGVtZW50IGJvdGggOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCA6Y2xhc3M6YFB5TG9hZGVyYDsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBkbyBzbyBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yCi0gICAgICAgIDpjbGFzczpgUHlMb2FkZXJgLiBEbyBub3RlIHRoYXQgdGhpcyBzb2x1dGlvbiB3aWxsIG5vdCBzdXBwb3J0Ci0gICAgICAgIHNvdXJjZWxlc3MvYnl0ZWNvZGUtb25seSBsb2FkaW5nOyBvbmx5IHNvdXJjZSAqYW5kKiBieXRlY29kZSBsb2FkaW5nLgotCi0gICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgICBVcGRhdGVkIHRvIHBhcnNlIChidXQgbm90IHVzZSkgdGhlIG5ldyBzb3VyY2Ugc2l6ZSBmaWVsZCBpbiBieXRlY29kZQotICAgICAgIGZpbGVzIHdoZW4gcmVhZGluZyBhbmQgdG8gd3JpdGUgb3V0IHRoZSBmaWVsZCBwcm9wZXJseSB3aGVuIHdyaXRpbmcuCi0KLSAgICAuLiBtZXRob2Q6OiBzb3VyY2VfbXRpbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgc291cmNlCi0gICAgICAgIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUuIFRoZSBtb2RpZmljYXRpb24gdGltZSBzaG91bGQgYmUgYW4KLSAgICAgICAgaW50ZWdlci4gSWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUsIHJldHVybiBgYE5vbmVgYC4gSWYgdGhlCi0gICAgICAgIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQgdGhlbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotCi0gICAgLi4gbWV0aG9kOjogYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgcGF0aCB0byB0aGUgYnl0ZWNvZGUgZm9yIHRoZQotICAgICAgICBzcGVjaWZpZWQgbW9kdWxlLCBpZiBpdCBleGlzdHMuIEl0IHJldHVybnMgYGBOb25lYGAKLSAgICAgICAgaWYgbm8gYnl0ZWNvZGUgZXhpc3RzICh5ZXQpLgotICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGlmIHRoZSBsb2FkZXIga25vd3MgaXQgY2Fubm90IGhhbmRsZSB0aGUKLSAgICAgICAgbW9kdWxlLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgIHRoYXQgcmVsaWVzIG9uCi0gICAgICAgIDptZXRoOmBQeUxvYWRlci5zb3VyY2VfcGF0aGAgYW5kIDptZXRoOmBieXRlY29kZV9wYXRoYC4KLSAgICAgICAgSWYgOm1ldGg6YHNvdXJjZV9wYXRoYCByZXR1cm5zIGEgcGF0aCwgdGhlbiB0aGF0IHZhbHVlIGlzIHJldHVybmVkLgotICAgICAgICBFbHNlIGlmIDptZXRoOmBieXRlY29kZV9wYXRoYCByZXR1cm5zIGEgcGF0aCwgdGhhdCBwYXRoIHdpbGwgYmUKLSAgICAgICAgcmV0dXJuZWQuIElmIGEgcGF0aCBpcyBub3QgYXZhaWxhYmxlIGZyb20gYm90aCBtZXRob2RzLAotICAgICAgICA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotCi0gICAgLi4gbWV0aG9kOjogd3JpdGVfYnl0ZWNvZGUoZnVsbG5hbWUsIGJ5dGVjb2RlKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCBoYXMgdGhlIGxvYWRlciB3cml0ZSAqYnl0ZWNvZGUqIGZvciBmdXR1cmUKLSAgICAgICAgdXNlLiBJZiB0aGUgYnl0ZWNvZGUgaXMgd3JpdHRlbiwgcmV0dXJuIGBgVHJ1ZWBgLiBSZXR1cm4KLSAgICAgICAgYGBGYWxzZWBgIGlmIHRoZSBieXRlY29kZSBjb3VsZCBub3QgYmUgd3JpdHRlbi4gVGhpcyBtZXRob2QKLSAgICAgICAgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgOmRhdGE6YHN5cy5kb250X3dyaXRlX2J5dGVjb2RlYCBpcyB0cnVlLgotICAgICAgICBUaGUgKmJ5dGVjb2RlKiBhcmd1bWVudCBzaG91bGQgYmUgYSBieXRlcyBzdHJpbmcgb3IgYnl0ZXMgYXJyYXkuCi0KLQogOm1vZDpgaW1wb3J0bGliLm1hY2hpbmVyeWAgLS0gSW1wb3J0ZXJzIGFuZCBwYXRoIGhvb2tzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjg2LDYgKzY4NywxMCBAQAogICAgICBDYWxscyA6bWV0aDpgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXNgIG9uIGFsbAogICAgICBmaW5kZXJzIHN0b3JlZCBpbiA6YXR0cjpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLgogCisgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgIENhbGxzIG9iamVjdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgIGZvciBgYCcnYGAgKGkuZS4gdGhlIGVtcHR5IHN0cmluZykuCisKIAogLi4gY2xhc3M6OiBGaWxlRmluZGVyKHBhdGgsIFwqbG9hZGVyX2RldGFpbHMpCiAKQEAgLTgwMCw3ICs4MDUsNyBAQAogCiAuLiBjbGFzczo6IEV4dGVuc2lvbkZpbGVMb2FkZXIoZnVsbG5hbWUsIHBhdGgpCiAKLSAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXJgIGZvcgorICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuRXhlY3V0aW9uTG9hZGVyYCBmb3IKICAgIGV4dGVuc2lvbiBtb2R1bGVzLgogCiAgICBUaGUgKmZ1bGxuYW1lKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbG9hZGVyIGlzIHRvCkBAIC04MzQsNiArODM5LDcwIEBACiAKICAgICAgIFJldHVybnMgYGBOb25lYGAgYXMgZXh0ZW5zaW9uIG1vZHVsZXMgZG8gbm90IGhhdmUgc291cmNlIGNvZGUuCiAKKyAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgUmV0dXJucyA6YXR0cjpgcGF0aGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGNsYXNzOjogTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBsb2FkZXJfc3RhdGU9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKQorCisgICBBIHNwZWNpZmljYXRpb24gZm9yIGEgbW9kdWxlJ3MgaW1wb3J0LXN5c3RlbS1yZWxhdGVkIHN0YXRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gYXR0cmlidXRlOjogbmFtZQorCisgICAoYGBfX25hbWVfX2BgKQorCisgICBBIHN0cmluZyBmb3IgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvYWRlcgorCisgICAoYGBfX2xvYWRlcl9fYGApCisKKyAgIFRoZSBsb2FkZXIgdG8gdXNlIGZvciBsb2FkaW5nLiAgRm9yIG5hbWVzcGFjZSBwYWNrYWdlcyB0aGlzIHNob3VsZCBiZQorICAgc2V0IHRvIE5vbmUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG9yaWdpbgorCisgICAoYGBfX2ZpbGVfX2BgKQorCisgICBOYW1lIG9mIHRoZSBwbGFjZSBmcm9tIHdoaWNoIHRoZSBtb2R1bGUgaXMgbG9hZGVkLCBlLmcuICJidWlsdGluIiBmb3IKKyAgIGJ1aWx0LWluIG1vZHVsZXMgYW5kIHRoZSBmaWxlbmFtZSBmb3IgbW9kdWxlcyBsb2FkZWQgZnJvbSBzb3VyY2UuCisgICBOb3JtYWxseSAib3JpZ2luIiBzaG91bGQgYmUgc2V0LCBidXQgaXQgbWF5IGJlIE5vbmUgKHRoZSBkZWZhdWx0KQorICAgd2hpY2ggaW5kaWNhdGVzIGl0IGlzIHVuc3BlY2lmaWVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworCisgICAoYGBfX3BhdGhfX2BgKQorCisgICBMaXN0IG9mIHN0cmluZ3MgZm9yIHdoZXJlIHRvIGZpbmQgc3VibW9kdWxlcywgaWYgYSBwYWNrYWdlIChOb25lCisgICBvdGhlcndpc2UpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsb2FkZXJfc3RhdGUKKworICAgQ29udGFpbmVyIG9mIGV4dHJhIG1vZHVsZS1zcGVjaWZpYyBkYXRhIGZvciB1c2UgZHVyaW5nIGxvYWRpbmcgKG9yCisgICBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogY2FjaGVkCisKKyAgIChgYF9fY2FjaGVkX19gYCkKKworICAgU3RyaW5nIGZvciB3aGVyZSB0aGUgY29tcGlsZWQgbW9kdWxlIHNob3VsZCBiZSBzdG9yZWQgKG9yIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnQKKworICAgKGBgX19wYWNrYWdlX19gYCkKKworICAgKFJlYWQtb25seSkgRnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gd2hpY2ggdGhlIG1vZHVsZQorICAgYmVsb25ncyBhcyBhIHN1Ym1vZHVsZSAob3IgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGhhc19sb2NhdGlvbgorCisgICAoUmVhZC1vbmx5KSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIG1vZHVsZSdzICJvcmlnaW4iCisgICBhdHRyaWJ1dGUgcmVmZXJzIHRvIGEgbG9hZGFibGUgbG9jYXRpb24uCiAKIDptb2Q6YGltcG9ydGxpYi51dGlsYCAtLSBVdGlsaXR5IGNvZGUgZm9yIGltcG9ydGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NDQsNiArOTEzLDUxIEBACiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCBpbiB0aGUgY29uc3RydWN0aW9uIG9mCiBhbiA6dGVybTpgaW1wb3J0ZXJgLgogCisuLiBhdHRyaWJ1dGU6OiBNQUdJQ19OVU1CRVIKKworICAgVGhlIGJ5dGVzIHdoaWNoIHJlcHJlc2VudCB0aGUgYnl0ZWNvZGUgdmVyc2lvbiBudW1iZXIuIElmIHlvdSBuZWVkIGhlbHAgd2l0aAorICAgbG9hZGluZy93cml0aW5nIGJ5dGVjb2RlIHRoZW4gY29uc2lkZXIgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpCisKKyAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgcGF0aCB0byB0aGUgYnl0ZS1jb21waWxlZCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgIHNvdXJjZSAqcGF0aCouICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzIGBgL2Zvby9iYXIvYmF6LnB5YGAgdGhlIHJldHVybgorICAgdmFsdWUgd291bGQgYmUgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4KKyAgIFRoZSBgYGNweXRob24tMzJgYCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY3VycmVudCBtYWdpYyB0YWcgKHNlZQorICAgOmZ1bmM6YGdldF90YWdgOyBpZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQgdGhlbgorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgVGhlIHJldHVybmVkIHBhdGggd2lsbCBlbmQgaW4KKyAgIGBgLnB5Y2BgIHdoZW4gYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgorICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBgYEZhbHNlYGApLiAgQnkgcGFzc2luZyBpbiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZm9yCisgICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgorICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKworICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLiBJZgorICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLAorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgRGVjb2RlIHRoZSBnaXZlbiBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZworICAgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKGFzIHJlcXVpcmVkIGJ5CisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpCiAKICAgIFJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuCkBAIC04NjIsNyArOTc2LDcgQEAKIAogLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAorICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKICAgICB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIKICAgICBtb2R1bGUgb2JqZWN0IHRvIGxvYWQgd2l0aC4gVGhlIGRlY29yYXRlZCBtZXRob2QgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGNhbGwKICAgICBzaWduYXR1cmUgdGFraW5nIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwpAQCAtODczLDY1ICs5ODcsNjIgQEAKIAogICAgIFRoZSBkZWNvcmF0ZWQgbWV0aG9kIHdpbGwgdGFrZSBpbiB0aGUgKipuYW1lKiogb2YgdGhlIG1vZHVsZSB0byBiZSBsb2FkZWQKICAgICBhcyBleHBlY3RlZCBmb3IgYSA6dGVybTpgbG9hZGVyYC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4KLSAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkIHdpdGggaXRzCi0gICAgOmF0dHI6YF9fbmFtZV9fYCBhdHRyaWJ1dGUgc2V0IHRvICoqbmFtZSoqLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvCi0gICAgKipzZWxmKiosIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIHNldCBpZgotICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAgaXMgZGVmaW5lZCBmb3IgKipzZWxmKiogYW5kCi0gICAgZG9lcyBub3QgcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGZvciAqKm5hbWUqKi4gSWYgYSBuZXcgbW9kdWxlIGlzIG5vdAotICAgIG5lZWRlZCB0aGVuIHRoZSBtb2R1bGUgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZQotICAgIG1ldGhvZC4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkLiBSZWdhcmRsZXNzIG9mIHdoZXJlIHRoZQorICAgIG1vZHVsZSBjYW1lIGZyb20sIDphdHRyOmBfX2xvYWRlcl9fYCBzZXQgdG8gKipzZWxmKiogYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICBpcyBzZXQgYmFzZWQgb24gd2hhdCA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIHJldHVybnMKKyAgICAoaWYgYXZhaWxhYmxlKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseSB0byBzdXBwb3J0CisgICAgcmVsb2FkaW5nLgogCiAgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgZGVjb3JhdGVkIG1ldGhvZCBhbmQgYSBtb2R1bGUgd2FzIGFkZGVkIHRvCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCBpdCB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseSBpbml0aWFsaXplZAotICAgIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeQotICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgotCi0gICAgVXNlIG9mIHRoaXMgZGVjb3JhdG9yIGhhbmRsZXMgYWxsIHRoZSBkZXRhaWxzIG9mIHdoaWNoIG1vZHVsZSBvYmplY3QgYQotICAgIGxvYWRlciBzaG91bGQgaW5pdGlhbGl6ZSBhcyBzcGVjaWZpZWQgYnkgOnBlcDpgMzAyYCBhcyBiZXN0IGFzIHBvc3NpYmxlLgorICAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gdGhlIG1vZHVsZSB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseQorICAgIGluaXRpYWxpemVkIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZQorICAgIHdhcyBhbHJlYWR5IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgogCiAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICA6YXR0cjpgX19sb2FkZXJfX2AgYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AgYXJlIGF1dG9tYXRpY2FsbHkgc2V0CiAgICAgICAgKHdoZW4gcG9zc2libGUpLgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBTZXQgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fbG9hZGVyX19gIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICAgICB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydCByZWxvYWRpbmcuCisKKyAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgbm93IGRpcmVjdGx5IHBlcmZvcm1zIGFsbCB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgIHByb3ZpZGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisKIC4uIGRlY29yYXRvcjo6IHNldF9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAotICAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgYXR0cmlidXRlIG9uIGxvYWRlZCBtb2R1bGVzLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZSBkZWNvcmF0b3IKLSAgICBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0byB0aGUKLSAgICB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldCB0by4KKyAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKKyAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCisgICBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUKKyAgIGRlY29yYXRvciBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0bworICAgdGhlIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0CisgICB0by4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgOmZ1bmM6YG1vZHVsZV9mb3JfbG9hZGVyYCBiZSB1c2VkIG92ZXIgdGhpcwotICAgICAgZGVjb3JhdG9yIGFzIGl0IHN1YnN1bWVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KLQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNldCBgYF9fbG9hZGVyX19gYCBpZiBzZXQgdG8gYGBOb25lYGAsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKKyAgICAgIGV4aXN0LgogCiAuLiBkZWNvcmF0b3I6OiBzZXRfcGFja2FnZQogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AKLSAgICBhdHRyaWJ1dGUgb24gdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyLiBJZiA6YXR0cjpgX19wYWNrYWdlX19gIGlzCi0gICAgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCi0gICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlciBpcyB3aGF0IGhhcyB0aGUgYXR0cmlidXRlCi0gICAgc2V0IG9uIGFuZCBub3QgdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgIGlzIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogCi0gICAgUmVsaWFuY2Ugb24gdGhpcyBkZWNvcmF0b3IgaXMgZGlzY291cmFnZWQgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byBzZXQKLSAgICA6YXR0cjpgX19wYWNrYWdlX19gIGJlZm9yZSBpbXBvcnRpbmcuIEJ5Ci0gICAgc2V0dGluZyBpdCBiZWZvcmVoYW5kIHRoZSBjb2RlIGZvciB0aGUgbW9kdWxlIGlzIGV4ZWN1dGVkIHdpdGggdGhlCi08PDw8PDw8Ci0gICAgYXR0cmlidXRlIHNldCBhbmQgdGh1cyBjYW4gYmUgdXNlZCBieSBnbG9iYWwgbGV2ZWwgY29kZSBkdXJpbmcKLSAgICBpbml0aWFsaXphdGlvbi4KLT09PT09PT0KLSAgIFRoZSBgYGNweXRob24tMzJgYCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY3VycmVudCBtYWdpYyB0YWcgKHNlZQotICAgOmZ1bmM6YGdldF90YWdgOyBpZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQgdGhlbgotICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgVGhlIHJldHVybmVkIHBhdGggd2lsbCBlbmQgaW4KLSAgIGBgLnB5Y2BgIHdoZW4gYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgotICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBgYEZhbHNlYGApLiAgQnkgcGFzc2luZyBpbiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZm9yCi0gICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgotICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KLT4+Pj4+Pj4KKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCiAKLSAgIC4uIG5vdGU6OgorICAgQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIDpjbGFzczpgTW9kdWxlU3BlY2AgaW5zdGFuY2UgYmFzZWQKKyAgIG9uIGEgbG9hZGVyLiAgVGhlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZXkgZG8gZm9yCisgICBNb2R1bGVTcGVjLiAgVGhlIGZ1bmN0aW9uIHVzZXMgYXZhaWxhYmxlIDp0ZXJtOmBsb2FkZXJgIEFQSXMsIHN1Y2ggYXMKKyAgIDptZXRoOmBJbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgLCB0byBmaWxsIGluIGFueSBtaXNzaW5nCisgICBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlYy4KIAotICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCA6ZnVuYzpgbW9kdWxlX2Zvcl9sb2FkZXJgIGJlIHVzZWQgb3ZlciB0aGlzCi0gICAgICBkZWNvcmF0b3IgYXMgaXQgc3Vic3VtZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb24sICosIGxvYWRlcj1Ob25lLCBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lKQorCisgICBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgOmNsYXNzOmBNb2R1bGVTcGVjYCBpbnN0YW5jZSBiYXNlZAorICAgb24gdGhlIHBhdGggdG8gYSBmaWxlLiAgTWlzc2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGZpbGxlZCBpbiBvbiB0aGUKKyAgIHNwZWMgYnkgbWFraW5nIHVzZSBvZiBsb2FkZXIgQVBJcyBhbmQgYnkgdGhlIGltcGxpY2F0aW9uIHRoYXQgdGhlCisgICBtb2R1bGUgd2lsbCBiZSBmaWxlLWJhc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdCBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdAppbmRleCAxYjI1YzZlLi44MTI4OWE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CkBAIC02NSw2ICs2NSw3IEBACiAgICB0ay5yc3QKICAgIGRldmVsb3BtZW50LnJzdAogICAgZGVidWcucnN0CisgICBkaXN0cmlidXRpb24ucnN0CiAgICBweXRob24ucnN0CiAgICBjdXN0b21pbnRlcnAucnN0CiAgICBtb2R1bGVzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAppbmRleCA2MjVlYTZlLi40MWM2MWI3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdApAQCAtMTczLDggKzE3Myw5IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICA6ZnVuYzpgZ2V0bWVtYmVyc2AgZG9lcyBub3QgcmV0dXJuIG1ldGFjbGFzcyBhdHRyaWJ1dGVzIHdoZW4gdGhlIGFyZ3VtZW50Ci0gICAgICBpcyBhIGNsYXNzICh0aGlzIGJlaGF2aW9yIGlzIGluaGVyaXRlZCBmcm9tIHRoZSA6ZnVuYzpgZGlyYCBmdW5jdGlvbikuCisgICAgICA6ZnVuYzpgZ2V0bWVtYmVyc2Agd2lsbCBvbmx5IHJldHVybiBjbGFzcyBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlCisgICAgICBtZXRhY2xhc3Mgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBjbGFzcyBhbmQgdGhvc2UgYXR0cmlidXRlcyBoYXZlIGJlZW4KKyAgICAgIGxpc3RlZCBpbiB0aGUgbWV0YWNsYXNzJyBjdXN0b20gOm1ldGg6YF9fZGlyX19gLgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0bW9kdWxlaW5mbyhwYXRoKQpAQCAtNzk3LDYgKzc5OCwyMyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZnVuY3Rpb246OiB1bndyYXAoZnVuYywgKiwgc3RvcD1Ob25lKQorCisgICBHZXQgdGhlIG9iamVjdCB3cmFwcGVkIGJ5ICpmdW5jKi4gSXQgZm9sbG93cyB0aGUgY2hhaW4gb2YgOmF0dHI6YF9fd3JhcHBlZF9fYAorICAgYXR0cmlidXRlcyByZXR1cm5pbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbi4KKworICAgKnN0b3AqIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGFjY2VwdGluZyBhbiBvYmplY3QgaW4gdGhlIHdyYXBwZXIgY2hhaW4KKyAgIGFzIGl0cyBzb2xlIGFyZ3VtZW50IHRoYXQgYWxsb3dzIHRoZSB1bndyYXBwaW5nIHRvIGJlIHRlcm1pbmF0ZWQgZWFybHkgaWYKKyAgIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdHJ1ZSB2YWx1ZS4gSWYgdGhlIGNhbGxiYWNrIG5ldmVyIHJldHVybnMgYSB0cnVlCisgICB2YWx1ZSwgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbiBpcyByZXR1cm5lZCBhcyB1c3VhbC4gRm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgc2lnbmF0dXJlYCB1c2VzIHRoaXMgdG8gc3RvcCB1bndyYXBwaW5nIGlmIGFueSBvYmplY3QgaW4gdGhlCisgICBjaGFpbiBoYXMgYSBgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGUgZGVmaW5lZC4KKworICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIF9pbnNwZWN0LXN0YWNrOgogCiBUaGUgaW50ZXJwcmV0ZXIgc3RhY2sKQEAgLTgyOSw2ICs4NDcsMTAgQEAKICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICBkZWwgZnJhbWUKIAorICAgSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgZnJhbWUgYXJvdW5kIChmb3IgZXhhbXBsZSB0byBwcmludCBhIHRyYWNlYmFjaworICAgbGF0ZXIpLCB5b3UgY2FuIGFsc28gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSB1c2luZyB0aGUKKyAgIDptZXRoOmBmcmFtZS5jbGVhcmAgbWV0aG9kLgorCiBUaGUgb3B0aW9uYWwgKmNvbnRleHQqIGFyZ3VtZW50IHN1cHBvcnRlZCBieSBtb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpZXMKIHRoZSBudW1iZXIgb2YgbGluZXMgb2YgY29udGV4dCB0byByZXR1cm4sIHdoaWNoIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGN1cnJlbnQKIGxpbmUuCkBAIC05ODUsMyArMTAwNywyMiBAQAogICAgICAgcmV0dXJuIGFuIGVtcHR5IGRpY3Rpb25hcnkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKKy4uIF9pbnNwZWN0LW1vZHVsZS1jbGk6CisKK0NvbW1hbmQgTGluZSBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgYmFzaWMgaW50cm9zcGVjdGlvbiBjYXBhYmlsaXR5Citmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKy4uIHByb2dyYW06OiBpbnNwZWN0CisKK0J5IGRlZmF1bHQsIGFjY2VwdHMgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYW5kIHByaW50cyB0aGUgc291cmNlIG9mIHRoYXQKK21vZHVsZS4gQSBjbGFzcyBvciBmdW5jdGlvbiB3aXRoaW4gdGhlIG1vZHVsZSBjYW4gYmUgcHJpbnRlZCBpbnN0ZWFkIGJ5CithcHBlbmRlZCBhIGNvbG9uIGFuZCB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3QuCisKKy4uIGNtZG9wdGlvbjo6IC0tZGV0YWlscworCisgICBQcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgc291cmNlIGNvZGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lvLnJzdCBiL0RvYy9saWJyYXJ5L2lvLnJzdAppbmRleCBiZDBjZTY3Li4yYjU1MDE4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW8ucnN0CkBAIC0yODMsMTAgKzI4MywxMCBAQAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHJlYWQgZnJvbS4gIElmIGBgRmFsc2VgYCwgOm1ldGg6YHJlYWRgCiAgICAgICB3aWxsIHJhaXNlIDpleGM6YE9TRXJyb3JgLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQKLSAgICAgIG1vc3QgKmxpbWl0KiBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQKKyAgICAgIG1vc3QgKnNpemUqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KIAogICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYGBiJ1xuJ2BgIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0IGZpbGVzLAogICAgICAgdGhlICpuZXdsaW5lcyogYXJndW1lbnQgdG8gOmZ1bmM6YG9wZW5gIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQpAQCAtMzY2LDE0ICszNjYsMTQgQEAKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgLAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAotICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplPS0xKQogCi0gICAgICBSZWFkIHVwIHRvICpuKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKLSAgICAgIGlmICpuKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKLSAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKm4qIGJ5dGVzIG1heSBiZQotICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKm4qIGJ5dGVzLgorICAgICAgUmVhZCB1cCB0byAqc2l6ZSogYnl0ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlbS4gIEFzIGEgY29udmVuaWVuY2UsCisgICAgICBpZiAqc2l6ZSogaXMgdW5zcGVjaWZpZWQgb3IgLTEsIDptZXRoOmByZWFkYWxsYCBpcyBjYWxsZWQuICBPdGhlcndpc2UsCisgICAgICBvbmx5IG9uZSBzeXN0ZW0gY2FsbCBpcyBldmVyIG1hZGUuICBGZXdlciB0aGFuICpzaXplKiBieXRlcyBtYXkgYmUKKyAgICAgIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGwgcmV0dXJucyBmZXdlciB0aGFuICpzaXplKiBieXRlcy4KIAotICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqbiogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KKyAgICAgIElmIDAgYnl0ZXMgYXJlIHJldHVybmVkLCBhbmQgKnNpemUqIHdhcyBub3QgMCwgdGhpcyBpbmRpY2F0ZXMgZW5kIG9mIGZpbGUuCiAgICAgICBJZiB0aGUgb2JqZWN0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlIGFuZCBubyBieXRlcyBhcmUgYXZhaWxhYmxlLAogICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKQEAgLTQ0MiwxMCArNDQyLDEwIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsIG9yCi0gICAgICBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGBgTm9uZWBgLAorICAgICAgb3IgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBBbiBlbXB0eQogICAgICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGlzIHJldHVybmVkIGlmIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBhdCBFT0YuCiAKICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSwgYW5kIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgbm90CkBAIC00NTcsOSArNDU3LDkgQEAKICAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbgogICAgICAgbm9uIGJsb2NraW5nLW1vZGUsIGFuZCBoYXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KIAotICAgLi4gbWV0aG9kOjogcmVhZDEobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQxKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgY2FsbCB0byB0aGUgdW5kZXJseWluZworICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICByYXcgc3RyZWFtJ3MgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGAgbWV0aG9kLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdQogICAgICAgYXJlIGltcGxlbWVudGluZyB5b3VyIG93biBidWZmZXJpbmcgb24gdG9wIG9mIGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAKICAgICAgIG9iamVjdC4KQEAgLTUyMiw2ICs1MjIsOCBAQAogICAgOm1vZDpgb3Mub3BlbmAgYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gcGFzc2luZwogICAgYGBOb25lYGApLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgU2VlIHRoZSA6ZnVuYzpgb3BlbmAgYnVpbHQtaW4gZnVuY3Rpb24gZm9yIGV4YW1wbGVzIG9uIHVzaW5nIHRoZSAqb3BlbmVyKgogICAgcGFyYW1ldGVyLgogCkBAIC01MjksNiArNTMxLDkgQEAKICAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgZmlsZSBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCBhbmQKICAgIDpjbGFzczpgUmF3SU9CYXNlYCwgOmNsYXNzOmBGaWxlSU9gIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGF0YQogICAgYXR0cmlidXRlczoKQEAgLTYwMSwyMSArNjA2LDIxIEBACiAgICA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCBwcm92aWRlcyBvciBvdmVycmlkZXMgdGhlc2UgbWV0aG9kcyBpbiBhZGRpdGlvbiB0bwogICAgdGhvc2UgZnJvbSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBhbmQgOmNsYXNzOmBJT0Jhc2VgOgogCi0gICAuLiBtZXRob2Q6OiBwZWVrKFtuXSkKKyAgIC4uIG1ldGhvZDo6IHBlZWsoW3NpemVdKQogCiAgICAgICBSZXR1cm4gYnl0ZXMgZnJvbSB0aGUgc3RyZWFtIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4gIEF0IG1vc3Qgb25lCiAgICAgICBzaW5nbGUgcmVhZCBvbiB0aGUgcmF3IHN0cmVhbSBpcyBkb25lIHRvIHNhdGlzZnkgdGhlIGNhbGwuIFRoZSBudW1iZXIgb2YKICAgICAgIGJ5dGVzIHJldHVybmVkIG1heSBiZSBsZXNzIG9yIG1vcmUgdGhhbiByZXF1ZXN0ZWQuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQoW25dKQorICAgLi4gbWV0aG9kOjogcmVhZChbc2l6ZV0pCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiAqbiogYnl0ZXMsIG9yIGlmICpuKiBpcyBub3QgZ2l2ZW4gb3IgbmVnYXRpdmUsIHVudGlsIEVPRgotICAgICAgb3IgaWYgdGhlIHJlYWQgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcgbW9kZS4KKyAgICAgIFJlYWQgYW5kIHJldHVybiAqc2l6ZSogYnl0ZXMsIG9yIGlmICpzaXplKiBpcyBub3QgZ2l2ZW4gb3IgbmVnYXRpdmUsIHVudGlsCisgICAgICBFT0Ygb3IgaWYgdGhlIHJlYWQgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcgbW9kZS4KIAotICAgLi4gbWV0aG9kOjogcmVhZDEobikKKyAgIC4uIG1ldGhvZDo6IHJlYWQxKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMgd2l0aCBvbmx5IG9uZSBjYWxsIG9uIHRoZSByYXcgc3RyZWFtLiAgSWYKLSAgICAgIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCBvbmx5IGJ1ZmZlcmVkIGJ5dGVzIGFyZSByZXR1cm5lZC4KKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMgd2l0aCBvbmx5IG9uZSBjYWxsIG9uIHRoZSByYXcgc3RyZWFtLgorICAgICAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgogICAgICAgT3RoZXJ3aXNlLCBvbmUgcmF3IHN0cmVhbSByZWFkIGNhbGwgaXMgbWFkZS4KIAogCkBAIC03MzQsMTcgKzczOSwxNyBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAotICAgLi4gbWV0aG9kOjogcmVhZChuKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqbiogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKLSAgICAgIDpjbGFzczpgc3RyYC4gIElmICpuKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtIGFzIGEgc2luZ2xlCisgICAgICA6Y2xhc3M6YHN0cmAuICBJZiAqc2l6ZSogaXMgbmVnYXRpdmUgb3IgYGBOb25lYGAsIHJlYWRzIHVudGlsIEVPRi4KIAotICAgLi4gbWV0aG9kOjogcmVhZGxpbmUobGltaXQ9LTEpCisgICAuLiBtZXRob2Q6OiByZWFkbGluZShzaXplPS0xKQogCiAgICAgICBSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GIGFuZCByZXR1cm4gYSBzaW5nbGUgYGBzdHJgYC4gIElmIHRoZSBzdHJlYW0gaXMKICAgICAgIGFscmVhZHkgYXQgRU9GLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAKLSAgICAgIElmICpsaW1pdCogaXMgc3BlY2lmaWVkLCBhdCBtb3N0ICpsaW1pdCogY2hhcmFjdGVycyB3aWxsIGJlIHJlYWQuCisgICAgICBJZiAqc2l6ZSogaXMgc3BlY2lmaWVkLCBhdCBtb3N0ICpzaXplKiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KIAogICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXQsIHdoZW5jZT1TRUVLX1NFVCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdCBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKaW5kZXggNzY5YWY3Mi4uODI2ZTRhYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CkBAIC0xNjEsNyArMTYxLDE2IEBACiAgICAuLiBhdHRyaWJ1dGU6OiBpc19wcml2YXRlCiAKICAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4gIFNlZQotICAgICAgOlJGQzpgMTkxOGAgKGZvciBJUHY0KSBvciA6UkZDOmA0MTkzYCAoZm9yIElQdjYpLgorICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeQorICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gYXR0cmlidXRlOjogaXNfZ2xvYmFsCisKKyAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLiAgU2VlCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5CisgICAgICAoZm9yIElQdjYpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogICAgLi4gYXR0cmlidXRlOjogaXNfdW5zcGVjaWZpZWQKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBjLnJzdCBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKaW5kZXggOTFlYzY5My4uMjQ0MGJkNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGMucnN0CkBAIC0xOCw2ICsxOCw5IEBACiAKICAgIHNvY2tldC5yc3QKICAgIHNzbC5yc3QKKyAgIHNlbGVjdC5yc3QKKyAgIHNlbGVjdG9ycy5yc3QKKyAgIGFzeW5jaW8ucnN0CiAgICBhc3luY29yZS5yc3QKICAgIGFzeW5jaGF0LnJzdAogICAgc2lnbmFsLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvanNvbi5yc3QgYi9Eb2MvbGlicmFyeS9qc29uLnJzdAppbmRleCBmNjUyMDM5Li41ZDk3ZWU4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9qc29uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9qc29uLnJzdApAQCAtNDIsOCArNDIsNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE1OCwxNSArMTU3LDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWxsb3cgc3RyaW5ncyBmb3IgKmluZGVudCogaW4gYWRkaXRpb24gdG8gaW50ZWdlcnMuCiAKLSAgIC4uIG5vdGU6OgorICAgSWYgc3BlY2lmaWVkLCAqc2VwYXJhdG9ycyogc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAotICAgICAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUKLSAgICAgIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiAqaW5kZW50KiBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KLQotICAgSWYgKnNlcGFyYXRvcnMqIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZSwgdGhlbiBpdAotICAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLiAgYGAoJywnLAotICAgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVc2UgYGAoJywnLCAnOiAnKWBgIGFzIGRlZmF1bHQgaWYgKmluZGVudCogaXMgbm90IGBgTm9uZWBgLgogCiAgICAqZGVmYXVsdChvYmopKiBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uIG9mCiAgICAqb2JqKiBvciByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgLiAgVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgpAQCAtMjQ4LDYgKzI0NSw4IEBACiAgICBrd2FyZzsgb3RoZXJ3aXNlIDpjbGFzczpgSlNPTkRlY29kZXJgIGlzIHVzZWQuICBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzCiAgICB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGNsYXNzLgogCisgICBJZiB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgaXMgbm90IGEgdmFsaWQgSlNPTiBkb2N1bWVudCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLCAqKmt3KQogCkBAIC0yNTcsNiArMjU2LDggQEAKICAgIFRoZSBvdGhlciBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBsb2FkYCwgZXhjZXB0CiAgICAqZW5jb2RpbmcqIHdoaWNoIGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogRW5jb2RlcnMgYW5kIERlY29kZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1NCwyMyArMzU1LDI2IEBACiAKICAgIC4uIF9weS10by1qc29uLXRhYmxlOgogCi0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IFB5dGhvbiAgICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8Ci0gICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCi0gICB8IGRpY3QgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IGxpc3QsIHR1cGxlICAgICAgIHwgYXJyYXkgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IHN0ciAgICAgICAgICAgICAgIHwgc3RyaW5nICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IGludCwgZmxvYXQgICAgICAgIHwgbnVtYmVyICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IFRydWUgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IEZhbHNlICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IE5vbmUgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IFB5dGhvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCisgICB8IGRpY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IGxpc3QsIHR1cGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJyYXkgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IHN0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IGludCwgZmxvYXQsIGludC0gJiBmbG9hdC1kZXJpdmVkIEVudW1zIHwgbnVtYmVyICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IFRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBpbnQtIGFuZCBmbG9hdC1kZXJpdmVkIEVudW0gY2xhc3Nlcy4KIAogICAgVG8gZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXplIG90aGVyIG9iamVjdHMsIHN1YmNsYXNzIGFuZCBpbXBsZW1lbnQgYQogICAgOm1ldGg6YGRlZmF1bHRgIG1ldGhvZCB3aXRoIGFub3RoZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZSBvYmplY3QKQEAgLTQxMCwxNSArNDE0LDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWxsb3cgc3RyaW5ncyBmb3IgKmluZGVudCogaW4gYWRkaXRpb24gdG8gaW50ZWdlcnMuCiAKLSAgIC4uIG5vdGU6OgotCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCiAgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKLSAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYC4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04KLSAgIHJlcHJlc2VudGF0aW9uLCB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgIElmIHNwZWNpZmllZCwgKmRlZmF1bHQqIGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IGNhbid0CiAgICBvdGhlcndpc2UgYmUgc2VyaWFsaXplZC4gIEl0IHNob3VsZCByZXR1cm4gYSBKU09OIGVuY29kYWJsZSB2ZXJzaW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0IGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CmluZGV4IGMwMGI1MzIuLjhjMTVlZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKQEAgLTgwLDExICs4MCwyMyBAQAogCiAuLiBmdW5jdGlvbjo6IGZpbGVDb25maWcoZm5hbWUsIGRlZmF1bHRzPU5vbmUsIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycz1UcnVlKQogCi0gICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSA6bW9kOmBjb25maWdwYXJzZXJgXC1mb3JtYXQgZmlsZQotICAgbmFtZWQgKmZuYW1lKi4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbgotICAgYXBwbGljYXRpb24sIGFsbG93aW5nIGFuIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZAotICAgY29uZmlndXJhdGlvbnMgKGlmIHRoZSBkZXZlbG9wZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcwotICAgYW5kIGxvYWQgdGhlIGNob3NlbiBjb25maWd1cmF0aW9uKS4KKyAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4KKyAgIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZCBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlcgorICAgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcyBhbmQgbG9hZCB0aGUgY2hvc2VuCisgICBjb25maWd1cmF0aW9uKS4KKworICAgOnBhcmFtIGZuYW1lOiBBIGZpbGVuYW1lLCBvciBhIGZpbGUtbGlrZSBvYmplY3QsIG9yIGFuIGluc3RhbmNlIGRlcml2ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyYC4gSWYgYQorICAgICAgICAgICAgICAgICBgYFJhd0NvbmZpZ1BhcnNlcmBgLWRlcml2ZWQgaW5zdGFuY2UgaXMgcGFzc2VkLCBpdCBpcyB1c2VkIGFzCisgICAgICAgICAgICAgICAgIGlzLiBPdGhlcndpc2UsIGEgOmNsYXNzOmB+Y29uZmlncGFyc2VyLkNvbmZpZ3BhcnNlcmAgaXMKKyAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVhZCBieSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkIGluIGBgZm5hbWVgYC4gSWYgdGhhdCBoYXMgYSA6bWV0aDpgcmVhZGxpbmVgCisgICAgICAgICAgICAgICAgIG1ldGhvZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGUtbGlrZSBvYmplY3QgYW5kIHJlYWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZmlsZWA7IG90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGVuYW1lIGFuZCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRgLgorCiAKICAgIDpwYXJhbSBkZWZhdWx0czogRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGFyZ3VtZW50LgpAQCAtOTgsOCArMTEwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBhbmNlc3RvcnMgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIGlzCisgICAgICBub3cgYWNjZXB0ZWQgYXMgYSB2YWx1ZSBmb3IgYGBmbmFtZWBgLiBUaGlzIGZhY2lsaXRhdGVzOgogCi0uLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCkKKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlIHdoZXJlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBqdXN0IHBhcnQKKyAgICAgICAgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi4KKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiByZWFkIGZyb20gYSBmaWxlLCBhbmQgdGhlbiBtb2RpZmllZCBieSB0aGUgdXNpbmcKKyAgICAgICAgYXBwbGljYXRpb24gKGUuZy4gYmFzZWQgb24gY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgb3Igb3RoZXIgYXNwZWN0cworICAgICAgICBvZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgYGZpbGVDb25maWdgYC4KKworLi4gZnVuY3Rpb246OiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsIHZlcmlmeT1Ob25lKQogCiAgICBTdGFydHMgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbnMgZm9yIG5ldwogICAgY29uZmlndXJhdGlvbnMuIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCB0aGUgbW9kdWxlJ3MgZGVmYXVsdApAQCAtMTEwLDYgKzEzMSwxNyBAQAogICAgOm1ldGg6YH50aHJlYWRpbmcuVGhyZWFkLmpvaW5gIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwKICAgIGNhbGwgOmZ1bmM6YHN0b3BMaXN0ZW5pbmdgLgogCisgICBUaGUgYGB2ZXJpZnlgYCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCBzaG91bGQKKyAgIHZlcmlmeSB3aGV0aGVyIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IGFyZSB2YWxpZCBhbmQgc2hvdWxkIGJlCisgICBwcm9jZXNzZWQuIFRoaXMgY291bGQgYmUgZG9uZSBieSBlbmNyeXB0aW5nIGFuZC9vciBzaWduaW5nIHdoYXQgaXMgc2VudAorICAgYWNyb3NzIHRoZSBzb2NrZXQsIHN1Y2ggdGhhdCB0aGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBjYW4gcGVyZm9ybQorICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQvb3IgZGVjcnlwdGlvbi4gVGhlIGBgdmVyaWZ5YGAgY2FsbGFibGUgaXMgY2FsbGVkCisgICB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IC0gYW5kIHNob3VsZAorICAgcmV0dXJuIHRoZSBieXRlcyB0byBiZSBwcm9jZXNzZWQsIG9yIE5vbmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYnl0ZXMgc2hvdWxkCisgICBiZSBkaXNjYXJkZWQuIFRoZSByZXR1cm5lZCBieXRlcyBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFzc2VkIGluIGJ5dGVzCisgICAoZS5nLiB3aGVuIG9ubHkgdmVyaWZpY2F0aW9uIGlzIGRvbmUpLCBvciB0aGV5IGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50CisgICAocGVyaGFwcyBpZiBkZWNyeXB0aW9uIHdlcmUgcGVyZm9ybWVkKS4KKwogICAgVG8gc2VuZCBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHNvY2tldCwgcmVhZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAogICAgc2VuZCBpdCB0byB0aGUgc29ja2V0IGFzIGEgc3RyaW5nIG9mIGJ5dGVzIHByZWNlZGVkIGJ5IGEgZm91ci1ieXRlIGxlbmd0aAogICAgc3RyaW5nIHBhY2tlZCBpbiBiaW5hcnkgdXNpbmcgYGBzdHJ1Y3QucGFjaygnPkwnLCBuKWBgLgpAQCAtMTI2LDcgKzE1OCwxMiBAQAogICAgICAgOmZ1bmM6YGxpc3RlbmAgc29ja2V0IGFuZCBzZW5kaW5nIGEgY29uZmlndXJhdGlvbiB3aGljaCBydW5zIHdoYXRldmVyCiAgICAgICBjb2RlIHRoZSBhdHRhY2tlciB3YW50cyB0byBoYXZlIGV4ZWN1dGVkIGluIHRoZSB2aWN0aW0ncyBwcm9jZXNzLiBUaGlzIGlzCiAgICAgICBlc3BlY2lhbGx5IGVhc3kgdG8gZG8gaWYgdGhlIGRlZmF1bHQgcG9ydCBpcyB1c2VkLCBidXQgbm90IGhhcmQgZXZlbiBpZiBhCi0gICAgICBkaWZmZXJlbnQgcG9ydCBpcyB1c2VkKS4KKyAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLiBUbyBhdm9pZCB0aGUgcmlzayBvZiB0aGlzIGhhcHBlbmluZywgdXNlIHRoZQorICAgICAgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byA6ZnVuYzpgbGlzdGVuYCB0byBwcmV2ZW50IHVucmVjb2duaXNlZAorICAgICAgY29uZmlndXJhdGlvbnMgZnJvbSBiZWluZyBhcHBsaWVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4KKyAgICAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAogLi4gZnVuY3Rpb246OiBzdG9wTGlzdGVuaW5nKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdAppbmRleCA0MTVlMzk3Li4zMTVjMTY4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdApAQCAtMzAwLDcgKzMwMCw3IEBACiB0aW1lZCBpbnRlcnZhbHMuCiAKIAotLi4gY2xhc3M6OiBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlKQorLi4gY2xhc3M6OiBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlLCBhdFRpbWU9Tm9uZSkKIAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJgIGNsYXNzLiBUaGUKICAgIHNwZWNpZmllZCBmaWxlIGlzIG9wZW5lZCBhbmQgdXNlZCBhcyB0aGUgc3RyZWFtIGZvciBsb2dnaW5nLiBPbiByb3RhdGluZyBpdCBhbHNvCkBAIC0zNTAsNiArMzUwLDEyIEBACiAgICBJZiAqZGVsYXkqIGlzIHRydWUsIHRoZW4gZmlsZSBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHRoZSBmaXJzdCBjYWxsIHRvCiAgICA6bWV0aDpgZW1pdGAuCiAKKyAgIElmICphdFRpbWUqIGlzIG5vdCBgYE5vbmVgYCwgaXQgbXVzdCBiZSBhIGBgZGF0ZXRpbWUudGltZWBgIGluc3RhbmNlIHdoaWNoCisgICBzcGVjaWZpZXMgdGhlIHRpbWUgb2YgZGF5IHdoZW4gcm9sbG92ZXIgb2NjdXJzLCBmb3IgdGhlIGNhc2VzIHdoZXJlIHJvbGxvdmVyCisgICBpcyBzZXQgdG8gaGFwcGVuICJhdCBtaWRuaWdodCIgb3IgIm9uIGEgcGFydGljdWxhciB3ZWVrZGF5Ii4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICphdFRpbWUqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAKICAgIC4uIG1ldGhvZDo6IGRvUm9sbG92ZXIoKQogCkBAIC0zNzUsNiArMzgxLDkgQEAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTQ2MCw2ICs0NjksOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBEYXRhZ3JhbUhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCiAgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgcG9ydGBgIGlzIHNwZWNpZmllZCBhcyBgYE5vbmVgYCwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgY3JlYXRlZAorICAgICAgdXNpbmcgdGhlIHZhbHVlIGluIGBgaG9zdGBgIC0gb3RoZXJ3aXNlLCBhIFRDUCBzb2NrZXQgaXMgY3JlYXRlZC4KIAogICAgLi4gbWV0aG9kOjogZW1pdCgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2x6bWEucnN0IGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKaW5kZXggZGE0NjU3NS4uNTNmYmE4OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbHptYS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKQEAgLTM5LDggKzM5LDggQEAKICAgIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgInIiYGAsIGBgInJiImBgLCBgYCJ3ImBgLCBgYCJ3YiJgYCwKLSAgIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwgYGAid3QiYGAsIG9yIGBgImF0ImBgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCJyYiJgYC4KKyAgIGBgIngiYGAsIGBgInhiImBgLCBgYCJhImBgIG9yIGBgImFiImBgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAicnQiYGAsCisgICBgYCJ3dCJgYCwgYGAieHQiYGAsIG9yIGBgImF0ImBgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgogCiAgICBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nLCB0aGUgKmZvcm1hdCogYW5kICpmaWx0ZXJzKiBhcmd1bWVudHMgaGF2ZQogICAgdGhlIHNhbWUgbWVhbmluZ3MgYXMgZm9yIDpjbGFzczpgTFpNQURlY29tcHJlc3NvcmAuIEluIHRoaXMgY2FzZSwgdGhlICpjaGVjayoKQEAgLTU3LDYgKzU3LDkgQEAKICAgIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgogICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCJ4ImBgLCBgYCJ4YiJgYCBhbmQgYGAieHQiYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBMWk1BRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPSJyIiwgXCosIGZvcm1hdD1Ob25lLCBjaGVjaz0tMSwgcHJlc2V0PU5vbmUsIGZpbHRlcnM9Tm9uZSkKIApAQCAtNjksOCArNzIsOSBAQAogICAgZmlsZSB3aWxsIG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgOmNsYXNzOmBMWk1BRmlsZWAgaXMgY2xvc2VkLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYGAiciJgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIGBgInciYGAgZm9yCi0gICBvdmVyd3JpdGluZywgb3IgYGAiYSJgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzCi0gICBgYCJyYiJgYCwgYGAid2IiYGAsIGFuZCBgYCJhYiJgYCByZXNwZWN0aXZlbHkuCisgICBvdmVyd3JpdGluZywgYGAieCJgYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlCisgICBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzIGBgInJiImBgLCBgYCJ3YiJgYCwgYGAieGIiYGAgYW5kIGBgImFiImBgCisgICByZXNwZWN0aXZlbHkuCiAKICAgIElmICpmaWxlbmFtZSogaXMgYSBmaWxlIG9iamVjdCAocmF0aGVyIHRoYW4gYW4gYWN0dWFsIGZpbGUgbmFtZSksIGEgbW9kZSBvZgogICAgYGAidyJgYCBkb2VzIG5vdCB0cnVuY2F0ZSB0aGUgZmlsZSwgYW5kIGlzIGluc3RlYWQgZXF1aXZhbGVudCB0byBgYCJhImBgLgpAQCAtOTgsNiArMTAyLDkgQEAKICAgICAgIGJ5dGUgb2YgZGF0YSB3aWxsIGJlIHJldHVybmVkLCB1bmxlc3MgRU9GIGhhcyBiZWVuIHJlYWNoZWQuIFRoZSBleGFjdAogICAgICAgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkICh0aGUgKnNpemUqIGFyZ3VtZW50IGlzIGlnbm9yZWQpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAgYW5kIGBgInhiImBgIG1vZGVzLgorCiAKIENvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gbWVtb3J5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAppbmRleCAzYjllM2QyLi4xMjRlYjYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdApAQCAtNDAsMTAgKzQwLDExIEBACiBwb2ludCBudW1iZXJzLCBjb21wbGV4IG51bWJlcnMsIHN0cmluZ3MsIGJ5dGVzLCBieXRlYXJyYXlzLCB0dXBsZXMsIGxpc3RzLCBzZXRzLAogZnJvemVuc2V0cywgZGljdGlvbmFyaWVzLCBhbmQgY29kZSBvYmplY3RzLCB3aGVyZSBpdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0aGF0CiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0aW9uYXJpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGFzIGxvbmcgYXMKLXRoZSB2YWx1ZXMgY29udGFpbmVkIHRoZXJlaW4gYXJlIHRoZW1zZWx2ZXMgc3VwcG9ydGVkOyBhbmQgcmVjdXJzaXZlIGxpc3RzLCBzZXRzCi1hbmQgZGljdGlvbmFyaWVzIHNob3VsZCBub3QgYmUgd3JpdHRlbiAodGhleSB3aWxsIGNhdXNlIGluZmluaXRlIGxvb3BzKS4gIFRoZQordGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQuCiBzaW5nbGV0b25zIDpjb25zdDpgTm9uZWAsIDpjb25zdDpgRWxsaXBzaXNgIGFuZCA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBjYW4gYWxzbyBiZQogbWFyc2hhbGxlZCBhbmQgdW5tYXJzaGFsbGVkLgorRm9yIGZvcm1hdCAqdmVyc2lvbiogbG93ZXIgdGhhbiAzLCByZWN1cnNpdmUgbGlzdHMsIHNldHMgYW5kIGRpY3Rpb25hcmllcyBjYW5ub3QKK2JlIHdyaXR0ZW4gKHNlZSBiZWxvdykuCiAKIFRoZXJlIGFyZSBmdW5jdGlvbnMgdGhhdCByZWFkL3dyaXRlIGZpbGVzIGFzIHdlbGwgYXMgZnVuY3Rpb25zIG9wZXJhdGluZyBvbgogc3RyaW5ncy4KQEAgLTEwMyw3ICsxMDQsOSBAQAogCiAgICBJbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZSBoaXN0b3JpY2FsCiAgICBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyIHVzZXMgYSBiaW5hcnkgZm9ybWF0Ci0gICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAyLgorICAgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisgICBWZXJzaW9uIDMgYWRkcyBzdXBwb3J0IGZvciBvYmplY3QgaW5zdGFuY2luZyBhbmQgcmVjdXJzaW9uLgorICAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAzLgogCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdCBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKaW5kZXggM2QxYzIwOS4uMmM0NGRjOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CkBAIC05MywxMSArOTMsMTA4IEBACiAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICBwLmpvaW4oKQogCi1Gb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IChvbiBXaW5kb3dzKSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcworRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcwogbmVjZXNzYXJ5LCBzZWUgOnJlZjpgbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5nYC4KIAogCiAKK0NvbnRleHRzIGFuZCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHN1cHBvcnRzIHRocmVlIHdheXMKK3RvIHN0YXJ0IGEgcHJvY2Vzcy4gIFRoZXNlICpzdGFydCBtZXRob2RzKiBhcmUKKworICAqc3Bhd24qCisgICAgVGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIGZyZXNoIHB5dGhvbiBpbnRlcnByZXRlciBwcm9jZXNzLiAgVGhlCisgICAgY2hpbGQgcHJvY2VzcyB3aWxsIG9ubHkgaW5oZXJpdCB0aG9zZSByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIHJ1bgorICAgIHRoZSBwcm9jZXNzIG9iamVjdHMgOm1ldGg6YH5Qcm9jZXNzLnJ1bmAgbWV0aG9kLiAgSW4gcGFydGljdWxhciwKKyAgICB1bm5lY2Vzc2FyeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgd2lsbCBub3QgYmUgaW5oZXJpdGVkLiAgU3RhcnRpbmcgYSBwcm9jZXNzIHVzaW5nIHRoaXMgbWV0aG9kIGlzCisgICAgcmF0aGVyIHNsb3cgY29tcGFyZWQgdG8gdXNpbmcgKmZvcmsqIG9yICpmb3Jrc2VydmVyKi4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLiAgVGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAqZm9yayoKKyAgICBUaGUgcGFyZW50IHByb2Nlc3MgdXNlcyA6ZnVuYzpgb3MuZm9ya2AgdG8gZm9yayB0aGUgUHl0aG9uCisgICAgaW50ZXJwcmV0ZXIuICBUaGUgY2hpbGQgcHJvY2Vzcywgd2hlbiBpdCBiZWdpbnMsIGlzIGVmZmVjdGl2ZWx5CisgICAgaWRlbnRpY2FsIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIEFsbCByZXNvdXJjZXMgb2YgdGhlIHBhcmVudCBhcmUKKyAgICBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MuICBOb3RlIHRoYXQgc2FmZWx5IGZvcmtpbmcgYQorICAgIG11bHRpdGhyZWFkZWQgcHJvY2VzcyBpcyBwcm9ibGVtYXRpYy4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IG9ubHkuICBUaGUgZGVmYXVsdCBvbiBVbml4LgorCisgICpmb3Jrc2VydmVyKgorICAgIFdoZW4gdGhlIHByb2dyYW0gc3RhcnRzIGFuZCBzZWxlY3RzIHRoZSAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kLAorICAgIGEgc2VydmVyIHByb2Nlc3MgaXMgc3RhcnRlZC4gIEZyb20gdGhlbiBvbiwgd2hlbmV2ZXIgYSBuZXcgcHJvY2VzcworICAgIGlzIG5lZWRlZCwgdGhlIHBhcmVudCBwcm9jZXNzIGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgYW5kIHJlcXVlc3RzCisgICAgdGhhdCBpdCBmb3JrIGEgbmV3IHByb2Nlc3MuICBUaGUgZm9yayBzZXJ2ZXIgcHJvY2VzcyBpcyBzaW5nbGUKKyAgICB0aHJlYWRlZCBzbyBpdCBpcyBzYWZlIGZvciBpdCB0byB1c2UgOmZ1bmM6YG9zLmZvcmtgLiAgTm8KKyAgICB1bm5lY2Vzc2FyeSByZXNvdXJjZXMgYXJlIGluaGVyaXRlZC4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycworICAgIG92ZXIgVW5peCBwaXBlcy4KKworQmVmb3JlIFB5dGhvbiAzLjQgKmZvcmsqIHdhcyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIG9uIFVuaXguICBBbHNvLAorcHJpb3IgdG8gUHl0aG9uIDMuNCwgY2hpbGQgcHJvY2Vzc2VzIHdvdWxkIGluaGVyaXQgYWxsIHRoZSBwYXJlbnRzCitpbmhlcml0YWJsZSBoYW5kbGVzIG9uIFdpbmRvd3MuCisKK09uIFVuaXggdXNpbmcgdGhlICpzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMgd2lsbCBhbHNvCitzdGFydCBhICpzZW1hcGhvcmUgdHJhY2tlciogcHJvY2VzcyB3aGljaCB0cmFja3MgdGhlIHVubGlua2VkIG5hbWVkCitzZW1hcGhvcmVzIGNyZWF0ZWQgYnkgcHJvY2Vzc2VzIG9mIHRoZSBwcm9ncmFtLiAgV2hlbiBhbGwgcHJvY2Vzc2VzCitoYXZlIGV4aXRlZCB0aGUgc2VtYXBob3JlIHRyYWNrZXIgdW5saW5rcyBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMuCitVc3VhbGx5IHRoZXJlIHNob3VsZCBiZSBub25lLCBidXQgaWYgYSBwcm9jZXNzIHdhcyBraWxsZWQgYnkgYSBzaWduYWwKK3RoZXJlIG1heSBzb21lICJsZWFrZWQiIHNlbWFwaG9yZXMuICAoVW5saW5raW5nIHRoZSBuYW1lZCBzZW1hcGhvcmVzCitpcyBhIHNlcmlvdXMgbWF0dGVyIHNpbmNlIHRoZSBzeXN0ZW0gYWxsb3dzIG9ubHkgYSBsaW1pdGVkIG51bWJlciwgYW5kCit0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgdW5saW5rZWQgdW50aWwgdGhlIG5leHQgcmVib290LikKKworVG8gc2VsZWN0IHRoZSBhIHN0YXJ0IG1ldGhvZCB5b3UgdXNlIHRoZSA6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgaW4KK3RoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlIG1haW4gbW9kdWxlLiAgRm9yCitleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisgICAgICAgICAgIHEgPSBtcC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBtcC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKKzpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCitwcm9ncmFtLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIG9idGFpbiBhIGNvbnRleHQKK29iamVjdC4gIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIEFQSSBhcyB0aGUgbXVsdGlwcm9jZXNzaW5nCittb2R1bGUsIGFuZCBhbGxvdyBvbmUgdG8gdXNlIG11bHRpcGxlIHN0YXJ0IG1ldGhvZHMgaW4gdGhlIHNhbWUKK3Byb2dyYW0uIDo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgY3R4ID0gbXAuZ2V0X2NvbnRleHQoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IGN0eC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCitOb3RlIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIG9uZSBjb250ZXh0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoCitwcm9jZXNzZXMgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQuICBJbiBwYXJ0aWN1bGFyLCBsb2NrcyBjcmVhdGVkIHVzaW5nCit0aGUgKmZvcmsqIGNvbnRleHQgY2Fubm90IGJlIHBhc3NlZCB0byBhIHByb2Nlc3NlcyBzdGFydGVkIHVzaW5nIHRoZQorKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcy4KKworQSBsaWJyYXJ5IHdoaWNoIHdhbnRzIHRvIHVzZSBhIHBhcnRpY3VsYXIgc3RhcnQgbWV0aG9kIHNob3VsZCBwcm9iYWJseQordXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2hvaWNlIG9mIHRoZQorbGlicmFyeSB1c2VyLgorCisKIEV4Y2hhbmdpbmcgb2JqZWN0cyBiZXR3ZWVuIHByb2Nlc3Nlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTI3NCwxNSArMzcxLDMxIEBACiBGb3IgZXhhbXBsZTo6CiAKICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6ICAgICAgICAjIHN0YXJ0IDQgd29ya2VyIHByb2Nlc3NlcwotICAgICAgICAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQotICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICMgcHJpbnRzICIxMDAiIHVubGVzcyB5b3VyIGNvbXB1dGVyIGlzICp2ZXJ5KiBzbG93Ci0gICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpICAgICAgIyBwcmludHMgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCisgICAgICAgd2l0aCBQb29sKHByb2Nlc3Nlcz00KSBhcyBwb29sOgorCisgICAgICAgICAgICMgcHJpbnQgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICAgICBwcmludChwb29sLm1hcChmLCByYW5nZSgxMCkpKQorCisgICAgICAgICAgICMgcHJpbnQgc2FtZSBudW1iZXJzIGluIGFyYml0cmFyeSBvcmRlcgorICAgICAgICAgICBmb3IgaSBpbiBwb29sLmltYXBfdW5vcmRlcmVkKGYsIHJhbmdlKDEwKSk6CisgICAgICAgICAgICAgICBwcmludChpKQorCisgICAgICAgICAgICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQorICAgICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgIjEwMCIKKworICAgICAgICAgICAjIG1ha2Ugd29ya2VyIHNsZWVwIGZvciAxMCBzZWNzCisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoc2xlZXAsIDEwKQorICAgICAgICAgICBwcmludChyZXMuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICAgICAgICMgcmFpc2VzIG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3IKKworICAgICAgICMgZXhpdGluZyB0aGUgJ3dpdGgnLWJsb2NrIGhhcyBzdG9wcGVkIHRoZSBwb29sCiAKIE5vdGUgdGhhdCB0aGUgbWV0aG9kcyBvZiBhIHBvb2wgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGJ5IHRoZQogcHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LgpAQCAtNzMxLDYgKzg0NCw5IEBACiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uICBNYXkgcmFpc2UKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBvcy5jcHVfY291bnRgCisKIC4uIGZ1bmN0aW9uOjogY3VycmVudF9wcm9jZXNzKCkKIAogICAgUmV0dXJuIHRoZSA6Y2xhc3M6YFByb2Nlc3NgIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC03NjEsNiArODc3LDQzIEBACiAgICBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJ1biBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRoZW4KICAgIDpmdW5jOmBmcmVlemVfc3VwcG9ydGAgaGFzIG5vIGVmZmVjdC4KIAorLi4gZnVuY3Rpb246OiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMsIHRoZSBmaXJzdCBvZiB3aGljaAorICAgaXMgdGhlIGRlZmF1bHQuICBUaGUgcG9zc2libGUgc3RhcnQgbWV0aG9kcyBhcmUgYGAnZm9yaydgYCwKKyAgIGBgJ3NwYXduJ2BgIGFuZCBgYCdmb3Jrc2VydmVyJ2BgLiAgT24gV2luZG93cyBvbmx5IGBgJ3NwYXduJ2BgIGlzCisgICBhdmFpbGFibGUuICBPbiBVbml4IGBgJ2ZvcmsnYGAgYW5kIGBgJ3NwYXduJ2BgIGFyZSBhbHdheXMKKyAgIHN1cHBvcnRlZCwgd2l0aCBgYCdmb3JrJ2BgIGJlaW5nIHRoZSBkZWZhdWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfY29udGV4dChtZXRob2Q9Tm9uZSkKKworICAgUmV0dXJuIGEgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlCisgICA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZS4KKworICAgSWYgKm1ldGhvZCogaXMgKk5vbmUqIHRoZW4gdGhlIGRlZmF1bHQgY29udGV4dCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSAqbWV0aG9kKiBzaG91bGQgYmUgYGAnZm9yaydgYCwgYGAnc3Bhd24nYGAsCisgICBgYCdmb3Jrc2VydmVyJ2BgLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQKKyAgIHN0YXJ0IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9RmFsc2UpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiBzdGFydCBtZXRob2QgdXNlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzLgorCisgICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqIGlzIGZhbHNlLAorICAgdGhlbiB0aGUgc3RhcnQgbWV0aG9kIGlzIGZpeGVkIHRvIHRoZSBkZWZhdWx0IGFuZCB0aGUgbmFtZSBpcworICAgcmV0dXJuZWQuICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqCisgICBpcyB0cnVlIHRoZW4gKk5vbmUqIGlzIHJldHVybmVkLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwgYGAnZm9ya3NlcnZlcidgYAorICAgb3IgKk5vbmUqLiAgYGAnZm9yaydgYCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4LCB3aGlsZSBgYCdzcGF3bidgYCBpcworICAgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogc2V0X2V4ZWN1dGFibGUoKQogCiAgICBTZXRzIHRoZSBwYXRoIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHdoZW4gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzLgpAQCAtNzY5LDggKzkyMiwyMSBAQAogCiAgICAgICBzZXRfZXhlY3V0YWJsZShvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9udy5leGUnKSkKIAotICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuICAoV2luZG93cyBvbmx5KQorICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBOb3cgc3VwcG9ydGVkIG9uIFVuaXggd2hlbiB0aGUgYGAnc3Bhd24nYGAgc3RhcnQgbWV0aG9kIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0X21ldGhvZChtZXRob2QpCisKKyAgIFNldCB0aGUgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IGNoaWxkIHByb2Nlc3Nlcy4KKyAgICptZXRob2QqIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCBvciBgYCdmb3Jrc2VydmVyJ2BgLgorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSwgYW5kIGl0IHNob3VsZCBiZQorICAgcHJvdGVjdGVkIGluc2lkZSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZQorICAgbWFpbiBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBub3RlOjoKIApAQCAtMTY3OCwxNCArMTg0NCwxNCBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGRdXV1dKQorLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZCBbLCBjb250ZXh0XV1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKICAgIGNhbGxiYWNrcyBhbmQgaGFzIGEgcGFyYWxsZWwgbWFwIGltcGxlbWVudGF0aW9uLgogCiAgICAqcHJvY2Vzc2VzKiBpcyB0aGUgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gdXNlLiAgSWYgKnByb2Nlc3NlcyogaXMKLSAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKKyAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgb3MuY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKICAgICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgIHRoZW4gZWFjaCB3b3JrZXIgcHJvY2VzcyB3aWxsIGNhbGwKICAgIGBgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKWBgIHdoZW4gaXQgc3RhcnRzLgogCkBAIC0xNjk4LDYgKzE4NjQsMTMgQEAKICAgICAgIHVudXNlZCByZXNvdXJjZXMgdG8gYmUgZnJlZWQuIFRoZSBkZWZhdWx0ICptYXh0YXNrc3BlcmNoaWxkKiBpcyBOb25lLCB3aGljaAogICAgICAgbWVhbnMgd29ya2VyIHByb2Nlc3NlcyB3aWxsIGxpdmUgYXMgbG9uZyBhcyB0aGUgcG9vbC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAqY29udGV4dCogY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCB1c2VkIGZvciBzdGFydGluZworICAgICAgdGhlIHdvcmtlciBwcm9jZXNzZXMuICBVc3VhbGx5IGEgcG9vbCBpcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgZnVuY3Rpb24gOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5Qb29sYCBvciB0aGUgOm1ldGg6YFBvb2xgIG1ldGhvZAorICAgICAgb2YgYSBjb250ZXh0IG9iamVjdC4gIEluIGJvdGggY2FzZXMgKmNvbnRleHQqIGlzIHNldAorICAgICAgYXBwcm9wcmlhdGVseS4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFdvcmtlciBwcm9jZXNzZXMgd2l0aGluIGEgOmNsYXNzOmBQb29sYCB0eXBpY2FsbHkgbGl2ZSBmb3IgdGhlIGNvbXBsZXRlCkBAIC0yMTg5LDQzICsyMzYyLDggQEAKICAgICBbSU5GTy9NYWluUHJvY2Vzc10gc2VuZGluZyBzaHV0ZG93biBtZXNzYWdlIHRvIG1hbmFnZXIKICAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAotSW4gYWRkaXRpb24gdG8gaGF2aW5nIHRoZXNlIHR3byBsb2dnaW5nIGZ1bmN0aW9ucywgdGhlIG11bHRpcHJvY2Vzc2luZyBhbHNvCi1leHBvc2VzIHR3byBhZGRpdGlvbmFsIGxvZ2dpbmcgbGV2ZWwgYXR0cmlidXRlcy4gVGhlc2UgYXJlICA6Y29uc3Q6YFNVQldBUk5JTkdgCi1hbmQgOmNvbnN0OmBTVUJERUJVR2AuIFRoZSB0YWJsZSBiZWxvdyBpbGx1c3RyYXRlcyB3aGVyZSB0aGVzZXMgZml0IGluIHRoZQotbm9ybWFsIGxldmVsIGhpZXJhcmNoeS4KLQotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgTGV2ZWwgICAgICAgICAgfCBOdW1lcmljIHZhbHVlICB8Ci0rPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09KwotfCBgYFNVQldBUk5JTkdgYCB8IDI1ICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi18IGBgU1VCREVCVUdgYCAgIHwgNSAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLQogRm9yIGEgZnVsbCB0YWJsZSBvZiBsb2dnaW5nIGxldmVscywgc2VlIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUuCiAKLVRoZXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbHMgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBjZXJ0YWluIGRlYnVnIG1lc3NhZ2VzCi13aXRoaW4gdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUuIEJlbG93IGlzIHRoZSBzYW1lIGV4YW1wbGUgYXMgYWJvdmUsIGV4Y2VwdAotd2l0aCA6Y29uc3Q6YFNVQkRFQlVHYCBlbmFibGVkOjoKLQotICAgID4+PiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLCBsb2dnaW5nCi0gICAgPj4+IGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJyKCkKLSAgICA+Pj4gbG9nZ2VyLnNldExldmVsKG11bHRpcHJvY2Vzc2luZy5TVUJERUJVRykKLSAgICA+Pj4gbG9nZ2VyLndhcm5pbmcoJ2Rvb21lZCcpCi0gICAgW1dBUk5JTkcvTWFpblByb2Nlc3NdIGRvb21lZAotICAgID4+PiBtID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY2hpbGQgcHJvY2VzcyBjYWxsaW5nIHNlbGYucnVuKCkKLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIGNyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgLy4uLi9weW1wLS4uLgotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBzZXJ2aW5nIGF0ICcvLi4uL3B5bXAtZGpHQlhOL2xpc3RlbmVyLS4uLicKLSAgICA+Pj4gZGVsIG0KLSAgICBbU1VCREVCVUcvTWFpblByb2Nlc3NdIGZpbmFsaXplciBjYWxsaW5nIC4uLgotICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgotICAgIFtERUJVRy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZQotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgY2FsbGJhY2s9dW5saW5rLCAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8YnVpbHQtaW4gZnVuY3Rpb24gdW5saW5rPiAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGRlYWQ+Ci0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gZmluYWxpemVyIGNhbGxpbmcgPGZ1bmN0aW9uIHJtdHJlZSBhdCAweDVhYTczMD4gLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIGV4aXRpbmcgd2l0aCBleGl0Y29kZSAwCiAKIFRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmcuZHVtbXlgIG1vZHVsZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0yMjQ2LDggKzIzODQsMTAgQEAKIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuCiAKIAotQWxsIHBsYXRmb3Jtcwotfn5+fn5+fn5+fn5+fgorQWxsIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmb2xsb3dpbmcgYXBwbGllcyB0byBhbGwgc3RhcnQgbWV0aG9kcy4KIAogQXZvaWQgc2hhcmVkIHN0YXRlCiAKQEAgLTIyODEsMTEgKzI0MjEsMTMgQEAKIAogQmV0dGVyIHRvIGluaGVyaXQgdGhhbiBwaWNrbGUvdW5waWNrbGUKIAotICAgIE9uIFdpbmRvd3MgbWFueSB0eXBlcyBmcm9tIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbmVlZCB0byBiZSBwaWNrbGFibGUgc28KLSAgICB0aGF0IGNoaWxkIHByb2Nlc3NlcyBjYW4gdXNlIHRoZW0uICBIb3dldmVyLCBvbmUgc2hvdWxkIGdlbmVyYWxseSBhdm9pZAotICAgIHNlbmRpbmcgc2hhcmVkIG9iamVjdHMgdG8gb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHBpcGVzIG9yIHF1ZXVlcy4gIEluc3RlYWQKLSAgICB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2ggbmVlZHMgYWNjZXNzIHRvIGEKLSAgICBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgorICAgIFdoZW4gdXNpbmcgdGhlICpzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMgbWFueSB0eXBlcworICAgIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbyB0aGF0IGNoaWxkCisgICAgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCisgICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLgorICAgIEluc3RlYWQgeW91IHNob3VsZCBhcnJhbmdlIHRoZSBwcm9ncmFtIHNvIHRoYXQgYSBwcm9jZXNzIHdoaWNoCisgICAgbmVlZHMgYWNjZXNzIHRvIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgZWxzZXdoZXJlIGNhbiBpbmhlcml0IGl0CisgICAgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgogCiBBdm9pZCB0ZXJtaW5hdGluZyBwcm9jZXNzZXMKIApAQCAtMjMzMiwxNSArMjQ3NCwxNyBAQAogCiBFeHBsaWNpdGx5IHBhc3MgcmVzb3VyY2VzIHRvIGNoaWxkIHByb2Nlc3NlcwogCi0gICAgT24gVW5peCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYQotICAgIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlCi0gICAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgT24gVW5peCB1c2luZyB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgYSBjaGlsZCBwcm9jZXNzIGNhbiBtYWtlCisgICAgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYSBwYXJlbnQgcHJvY2VzcyB1c2luZyBhCisgICAgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIG9iamVjdCBhcyBhbgorICAgIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCiAKLSAgICBBcGFydCBmcm9tIG1ha2luZyB0aGUgY29kZSAocG90ZW50aWFsbHkpIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIHRoaXMgYWxzbwotICAgIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIHRoZSBvYmplY3Qgd2lsbCBub3QKLSAgICBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBpZiBzb21lCi0gICAgcmVzb3VyY2UgaXMgZnJlZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQKLSAgICBwcm9jZXNzLgorICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MKKyAgICBhbmQgdGhlIG90aGVyIHN0YXJ0IG1ldGhvZHMgdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZQorICAgIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBnYXJiYWdlCisgICAgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKKyAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlCisgICAgcGFyZW50IHByb2Nlc3MuCiAKICAgICBTbyBmb3IgaW5zdGFuY2UgOjoKIApAQCAtMjM5OSwxNyArMjU0MywxOSBAQAogCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA6aXNzdWU6YDUxNTVgLCA6aXNzdWU6YDUzMTNgIGFuZCA6aXNzdWU6YDUzMzFgCiAKLVdpbmRvd3MKLX5+fn5+fn4KK1RoZSAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVNpbmNlIFdpbmRvd3MgbGFja3MgOmZ1bmM6YG9zLmZvcmtgIGl0IGhhcyBhIGZldyBleHRyYSByZXN0cmljdGlvbnM6CitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgcmVzdHJpY3Rpb24gd2hpY2ggZG9uJ3QgYXBwbHkgdG8gdGhlICpmb3JrKgorc3RhcnQgbWV0aG9kLgogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4gIFRoaXMKLSAgICBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkKLSAgICBhcyB0aGUgYGB0YXJnZXRgYCBhcmd1bWVudCBvbiBXaW5kb3dzIC0tLSBqdXN0IGRlZmluZSBhIGZ1bmN0aW9uIGFuZCB1c2UKLSAgICB0aGF0IGluc3RlYWQuCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCisgICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCisgICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKKyAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0CisgICAgaW5zdGVhZC4KIAogICAgIEFsc28sIGlmIHlvdSBzdWJjbGFzcyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2AgdGhlbiBtYWtlIHN1cmUgdGhhdAogICAgIGluc3RhbmNlcyB3aWxsIGJlIHBpY2tsYWJsZSB3aGVuIHRoZSA6bWV0aDpgUHJvY2Vzcy5zdGFydApAQCAtMjQzMSw3ICsyNTc3LDggQEAKICAgICBpbnRlcnByZXRlciB3aXRob3V0IGNhdXNpbmcgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYSBzdGFydGluZyBhIG5ldwogICAgIHByb2Nlc3MpLgogCi0gICAgRm9yIGV4YW1wbGUsIHVuZGVyIFdpbmRvd3MgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQorICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kCisgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQogICAgIDpleGM6YFJ1bnRpbWVFcnJvcmA6OgogCiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCkBAIC0yNDQ1LDEzICsyNTkyLDE0IEBACiAgICAgSW5zdGVhZCBvbmUgc2hvdWxkIHByb3RlY3QgdGhlICJlbnRyeSBwb2ludCIgb2YgdGhlIHByb2dyYW0gYnkgdXNpbmcgYGBpZgogICAgIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgYXMgZm9sbG93czo6CiAKLSAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQKKyAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQsIHNldF9zdGFydF9tZXRob2QKIAogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcHJpbnQoJ2hlbGxvJykKIAogICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogICAgICAgICAgICBwLnN0YXJ0KCkKIApAQCAtMjQ4MiwyNiArMjYzMCw3IEBACiAgICA6bGFuZ3VhZ2U6IHB5dGhvbjMKIAogCi1TeW5jaHJvbml6YXRpb24gdHlwZXMgbGlrZSBsb2NrcywgY29uZGl0aW9ucyBhbmQgcXVldWVzOgotCi0uLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5Ci0gICA6bGFuZ3VhZ2U6IHB5dGhvbjMKLQotCiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCiBwcm9jZXNzZXMgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQotCi0KLUFuIGV4YW1wbGUgb2YgaG93IGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBlYWNoIHJ1biBhCi06Y2xhc3M6YH5odHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGluc3RhbmNlIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUKLWxpc3RlbmluZyBzb2NrZXQuCi0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5Ci0KLQotU29tZSBzaW1wbGUgYmVuY2htYXJrcyBjb21wYXJpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCB3aXRoIDptb2Q6YHRocmVhZGluZ2A6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggNTY0ZjEwMS4uMjNmZmVkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgVGhpcyBpbXBsZW1lbnRzIHNlY3VyaXR5IGJlaGF2aW9yIGVxdWl2YWxlbnQgdG8gdGhhdCBvZiBmdHAgYW5kIG90aGVyCiAgICBwcm9ncmFtcyB0aGF0IHVzZSA6ZmlsZTpgLm5ldHJjYC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMyBBZGRlZCB0aGUgUE9TSVggcGVybWlzc2lvbiBjaGVjay4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5ldHJjUGFyc2VFcnJvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCBhMTVkN2Y3Li4wMDk4MDQxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgbm50cGxpYmAgLS0tIE5OVFAgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNzEsNyArNzAsNyBAQAogICAgcmVhZGVyLXNwZWNpZmljIGNvbW1hbmRzLCBzdWNoIGFzIGBgZ3JvdXBgYC4gIElmIHlvdSBnZXQgdW5leHBlY3RlZAogICAgOmV4YzpgTk5UUFBlcm1hbmVudEVycm9yYFwgcywgeW91IG1pZ2h0IG5lZWQgdG8gc2V0ICpyZWFkZXJtb2RlKi4KICAgIDpjbGFzczpgTk5UUGAgY2xhc3Mgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KLSAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YHNvY2tldC5lcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKKyAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCiAgICBjb25uZWN0aW9uIHdoZW4gZG9uZS4gSGVyZSBpcyBhIHNhbXBsZSBvbiBob3cgdXNpbmcgaXQ6CiAKICAgICA+Pj4gZnJvbSBubnRwbGliIGltcG9ydCBOTlRQCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdCBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CmluZGV4IDI3MzJhODQuLjdjNzZhNDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CkBAIC0yMywzICsyMyw0IEBACiAgICBkZWNpbWFsLnJzdAogICAgZnJhY3Rpb25zLnJzdAogICAgcmFuZG9tLnJzdAorICAgc3RhdGlzdGljcy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdCBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAppbmRleCAwMzU0N2NhLi44MGJhZDcxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CkBAIC0xMSw2ICsxMSw5IEBACiAgICBpbXBvcnQgb3BlcmF0b3IKICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIsIGlhZGQKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3BlcmF0b3IucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZWZmaWNpZW50IGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvCiB0aGUgaW50cmluc2ljIG9wZXJhdG9ycyBvZiBQeXRob24uICBGb3IgZXhhbXBsZSwgYGBvcGVyYXRvci5hZGQoeCwgeSlgYCBpcwpAQCAtMjM1LDYgKzIzOCwxNCBAQAogCiAuLiBYWFg6IGZpbmQgYSBiZXR0ZXIsIHJlYWRhYmxlLCBleGFtcGxlCiAKKy4uIGZ1bmN0aW9uOjogbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApCisKKyAgIFJldHVybiBhbiBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICpvKi4gRmlyc3QgdHJ5aW5nIHRvIHJldHVybiBpdHMKKyAgIGFjdHVhbCBsZW5ndGgsIHRoZW4gYW4gZXN0aW1hdGUgdXNpbmcgOm1ldGg6YG9iamVjdC5fX2xlbmd0aF9oaW50X19gLCBhbmQKKyAgIGZpbmFsbHkgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRvb2xzIGZvciBnZW5lcmFsaXplZCBhdHRyaWJ1dGUgYW5kIGl0ZW0KIGxvb2t1cHMuICBUaGVzZSBhcmUgdXNlZnVsIGZvciBtYWtpbmcgZmFzdCBmaWVsZCBleHRyYWN0b3JzIGFzIGFyZ3VtZW50cyBmb3IKIDpmdW5jOmBtYXBgLCA6ZnVuYzpgc29ydGVkYCwgOm1ldGg6YGl0ZXJ0b29scy5ncm91cGJ5YCwgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggNTdhNmJjYS4uMjY5ODU2YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTIyLDYgKzIyLDExIEBACiBleHBsaWNpdGx5IHdoZW4gYW4gYXBwbGljYXRpb24gZGVzaXJlcyBzaGVsbC1saWtlIHBhdGggZXhwYW5zaW9uLiAgKFNlZSBhbHNvCiB0aGUgOm1vZDpgZ2xvYmAgbW9kdWxlLikKIAorCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIG5vdGU6OgogCiAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBlaXRoZXIgb25seSBieXRlcyBvciBvbmx5IHN0cmluZyBvYmplY3RzIGFzCkBAIC00Miw3ICs0Nyw2IEBACiAgICAqIDptb2Q6YHBvc2l4cGF0aGAgZm9yIFVOSVgtc3R5bGUgcGF0aHMKICAgICogOm1vZDpgbnRwYXRoYCBmb3IgV2luZG93cyBwYXRocwogICAgKiA6bW9kOmBtYWNwYXRoYCBmb3Igb2xkLXN0eWxlIE1hY09TIHBhdGhzCi0gICAqIDptb2Q6YG9zMmVteHBhdGhgIGZvciBPUy8yIEVNWCBwYXRocwogCiAKIC4uIGZ1bmN0aW9uOjogYWJzcGF0aChwYXRoKQpAQCAtMjUwLDE1ICsyNTQsMTQgQEAKICAgIE9uIFVuaXgsIHRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGV2aWNlIG51bWJlciBhbmQgaS1ub2RlIG51bWJlciBhbmQgcmFpc2VzIGFuCiAgICBleGNlcHRpb24gaWYgYSA6ZnVuYzpgb3Muc3RhdGAgY2FsbCBvbiBlaXRoZXIgcGF0aG5hbWUgZmFpbHMuCiAKLSAgIE9uIFdpbmRvd3MsIHR3byBmaWxlcyBhcmUgdGhlIHNhbWUgaWYgdGhleSByZXNvbHZlIHRvIHRoZSBzYW1lIGZpbmFsIHBhdGgKLSAgIG5hbWUgdXNpbmcgdGhlIFdpbmRvd3MgQVBJIGNhbGwgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLiBUaGlzIGZ1bmN0aW9uCi0gICByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIGhhbmRsZXMgY2Fubm90IGJlIG9idGFpbmVkIHRvIGVpdGhlciBmaWxlLgotCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBZGRlZCBXaW5kb3dzIHN1cHBvcnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBXaW5kb3dzIG5vdyB1c2VzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKIAogLi4gZnVuY3Rpb246OiBzYW1lb3BlbmZpbGUoZnAxLCBmcDIpCiAKQEAgLTI3Nyw3ICsyODAsMTAgQEAKICAgIDpmdW5jOmBvcy5sc3RhdGAsIG9yIDpmdW5jOmBvcy5zdGF0YC4gIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUKICAgIHVuZGVybHlpbmcgY29tcGFyaXNvbiB1c2VkIGJ5IDpmdW5jOmBzYW1lZmlsZWAgYW5kIDpmdW5jOmBzYW1lb3BlbmZpbGVgLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBXaW5kb3dzIHN1cHBvcnQuCiAKIAogLi4gZnVuY3Rpb246OiBzcGxpdChwYXRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucnN0IGIvRG9jL2xpYnJhcnkvb3MucnN0CmluZGV4IDIwZjNlODcuLmY1ZjJlMTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5yc3QKQEAgLTU0LDcgKzU0LDcgQEAKIAogICAgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50IG1vZHVsZSBpbXBvcnRlZC4gIFRoZSBmb2xsb3dpbmcKICAgIG5hbWVzIGhhdmUgY3VycmVudGx5IGJlZW4gcmVnaXN0ZXJlZDogYGAncG9zaXgnYGAsIGBgJ250J2BgLCBgYCdtYWMnYGAsCi0gICBgYCdvczInYGAsIGBgJ2NlJ2BgLCBgYCdqYXZhJ2BgLgorICAgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCiAKICAgIC4uIHNlZWFsc286OgogICAgICAgOmF0dHI6YHN5cy5wbGF0Zm9ybWAgaGFzIGEgZmluZXIgZ3JhbnVsYXJpdHkuICA6ZnVuYzpgb3MudW5hbWVgIGdpdmVzCkBAIC02ODUsMTcgKzY4NSwzMCBAQAogCiAuLiBmdW5jdGlvbjo6IGR1cChmZCkKIAotICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLgorICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICBPbiBXaW5kb3dzLCB3aGVuIGR1cGxpY2F0aW5nIGEgc3RhbmRhcmQgc3RyZWFtICgwOiBzdGRpbiwgMTogc3Rkb3V0LAorICAgMjogc3RkZXJyKSwgdGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgaW5oZXJpdGFibGUKKyAgIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgogCi0uLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMikKKworLi4gZnVuY3Rpb246OiBkdXAyKGZkLCBmZDIsIGluaGVyaXRhYmxlPVRydWUpCiAKICAgIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiB0byAqZmQyKiwgY2xvc2luZyB0aGUgbGF0dGVyIGZpcnN0IGlmIG5lY2Vzc2FyeS4KKyAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkMiogaXMgOnJlZjpgaW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAgYnkgZGVmYXVsdCwKKyAgIG9yIG5vbi1pbmhlcml0YWJsZSBpZiAqaW5oZXJpdGFibGUqIGlzIGBgRmFsc2VgYC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkIHRoZSBvcHRpb25hbCAqaW5oZXJpdGFibGUqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IGZjaG1vZChmZCwgbW9kZSkKIApAQCAtODQ2LDE3ICs4NTksMjEgQEAKICAgIE9wZW4gdGhlIGZpbGUgKmZpbGUqIGFuZCBzZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gKmZsYWdzKiBhbmQgcG9zc2libHkKICAgIGl0cyBtb2RlIGFjY29yZGluZyB0byAqbW9kZSouICBXaGVuIGNvbXB1dGluZyAqbW9kZSosIHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlCiAgICBpcyBmaXJzdCBtYXNrZWQgb3V0LiAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXdseSBvcGVuZWQgZmlsZS4KKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZsYWcgYW5kIG1vZGUgdmFsdWVzLCBzZWUgdGhlIEMgcnVuLXRpbWUgZG9jdW1lbnRhdGlvbjsKICAgIGZsYWcgY29uc3RhbnRzIChsaWtlIDpjb25zdDpgT19SRE9OTFlgIGFuZCA6Y29uc3Q6YE9fV1JPTkxZYCkgYXJlIGRlZmluZWQgaW4KLSAgIHRoaXMgbW9kdWxlIHRvbyAoc2VlIDpyZWY6YG9wZW4tY29uc3RhbnRzYCkuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZworICAgdGhlIDptb2Q6YG9zYCBtb2R1bGUuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZwogICAgOmNvbnN0OmBPX0JJTkFSWWAgaXMgbmVlZGVkIHRvIG9wZW4gZmlsZXMgaW4gYmluYXJ5IG1vZGUuCiAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCi0gICA8ZGlyX2ZkPmAuCisgICA8ZGlyX2ZkPmAgd2l0aCB0aGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgbG93LWxldmVsIEkvTy4gIEZvciBub3JtYWwgdXNhZ2UsIHVzZSB0aGUKQEAgLTg2NywyNSArODg0LDkyIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSAqZGlyX2ZkKiBhcmd1bWVudC4KIAorVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKKzpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgorYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKK3RoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAorb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX1JET05MWQorICAgICAgICAgIE9fV1JPTkxZCisgICAgICAgICAgT19SRFdSCisgICAgICAgICAgT19BUFBFTkQKKyAgICAgICAgICBPX0NSRUFUCisgICAgICAgICAgT19FWENMCisgICAgICAgICAgT19UUlVOQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0RTWU5DCisgICAgICAgICAgT19SU1lOQworICAgICAgICAgIE9fU1lOQworICAgICAgICAgIE9fTkRFTEFZCisgICAgICAgICAgT19OT05CTE9DSworICAgICAgICAgIE9fTk9DVFRZCisgICAgICAgICAgT19TSExPQ0sKKyAgICAgICAgICBPX0VYTE9DSworICAgICAgICAgIE9fQ0xPRVhFQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCisKKy4uIGRhdGE6OiBPX0JJTkFSWQorICAgICAgICAgIE9fTk9JTkhFUklUCisgICAgICAgICAgT19TSE9SVF9MSVZFRAorICAgICAgICAgIE9fVEVNUE9SQVJZCisgICAgICAgICAgT19SQU5ET00KKyAgICAgICAgICBPX1NFUVVFTlRJQUwKKyAgICAgICAgICBPX1RFWFQKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0FTWU5DCisgICAgICAgICAgT19ESVJFQ1QKKyAgICAgICAgICBPX0RJUkVDVE9SWQorICAgICAgICAgIE9fTk9GT0xMT1cKKyAgICAgICAgICBPX05PQVRJTUUKKyAgICAgICAgICBPX1BBVEgKKyAgICAgICAgICBPX1RNUEZJTEUKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKKyAgIHRoZSBDIGxpYnJhcnkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgOmRhdGE6YE9fVE1QRklMRWAgY29uc3RhbnQuIEl0J3Mgb25seSBhdmFpbGFibGUgb24gTGludXggS2VybmVsIDMuMTEKKyAgICAgIG9yIG5ld2VyLgorCiAKIC4uIGZ1bmN0aW9uOjogb3BlbnB0eSgpCiAKICAgIC4uIGluZGV4OjogbW9kdWxlOiBwdHkKIAotICAgT3BlbiBhIG5ldyBwc2V1ZG8tdGVybWluYWwgcGFpci4gUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKG1hc3RlciwKLSAgIHNsYXZlKWBgIGZvciB0aGUgcHR5IGFuZCB0aGUgdHR5LCByZXNwZWN0aXZlbHkuIEZvciBhIChzbGlnaHRseSkgbW9yZSBwb3J0YWJsZQotICAgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCisgICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMKKyAgIGBgKG1hc3Rlciwgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBmaWxlCisgICBkZXNjcmlwdG9ycyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLiBGb3IgYSAoc2xpZ2h0bHkpIG1vcmUKKyAgIHBvcnRhYmxlIGFwcHJvYWNoLCB1c2UgdGhlIDptb2Q6YHB0eWAgbW9kdWxlLgogCiAgICBBdmFpbGFiaWxpdHk6IHNvbWUgZmxhdm9ycyBvZiBVbml4LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogcGlwZSgpCiAKLSAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuCisgICBDcmVhdGUgYSBwaXBlLiAgUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKHIsIHcpYGAgdXNhYmxlIGZvcgorICAgcmVhZGluZyBhbmQgd3JpdGluZywgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlMihmbGFncykKIApAQCAtMTA4MCw3OCArMTE2NCw2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBfb3Blbi1jb25zdGFudHM6Ci0KLWBgb3BlbigpYGAgZmxhZyBjb25zdGFudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKLTpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgotYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKLXRoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAotb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX1JET05MWQotICAgICAgICAgIE9fV1JPTkxZCi0gICAgICAgICAgT19SRFdSCi0gICAgICAgICAgT19BUFBFTkQKLSAgICAgICAgICBPX0NSRUFUCi0gICAgICAgICAgT19FWENMCi0gICAgICAgICAgT19UUlVOQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0RTWU5DCi0gICAgICAgICAgT19SU1lOQwotICAgICAgICAgIE9fU1lOQwotICAgICAgICAgIE9fTkRFTEFZCi0gICAgICAgICAgT19OT05CTE9DSwotICAgICAgICAgIE9fTk9DVFRZCi0gICAgICAgICAgT19TSExPQ0sKLSAgICAgICAgICBPX0VYTE9DSwotICAgICAgICAgIE9fQ0xPRVhFQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCi0KLS4uIGRhdGE6OiBPX0JJTkFSWQotICAgICAgICAgIE9fTk9JTkhFUklUCi0gICAgICAgICAgT19TSE9SVF9MSVZFRAotICAgICAgICAgIE9fVEVNUE9SQVJZCi0gICAgICAgICAgT19SQU5ET00KLSAgICAgICAgICBPX1NFUVVFTlRJQUwKLSAgICAgICAgICBPX1RFWFQKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0FTWU5DCi0gICAgICAgICAgT19ESVJFQ1QKLSAgICAgICAgICBPX0RJUkVDVE9SWQotICAgICAgICAgIE9fTk9GT0xMT1cKLSAgICAgICAgICBPX05PQVRJTUUKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKLSAgIHRoZSBDIGxpYnJhcnkuCi0KLQotLi4gZGF0YTo6IFJUTERfTEFaWQotICAgICAgICAgIFJUTERfTk9XCi0gICAgICAgICAgUlRMRF9HTE9CQUwKLSAgICAgICAgICBSVExEX0xPQ0FMCi0gICAgICAgICAgUlRMRF9OT0RFTEVURQotICAgICAgICAgIFJUTERfTk9MT0FECi0gICAgICAgICAgUlRMRF9ERUVQQklORAotCi0gICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UgOm1hbnBhZ2U6YGRsb3BlbigzKWAuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotCi0KIC4uIF90ZXJtaW5hbC1zaXplOgogCiBRdWVyeWluZyB0aGUgc2l6ZSBvZiBhIHRlcm1pbmFsCkBAIC0xMTg5LDYgKzEyMDEsNDkgQEAKICAgICAgIEhlaWdodCBvZiB0aGUgdGVybWluYWwgd2luZG93IGluIGNoYXJhY3RlcnMuCiAKIAorLi4gX2ZkX2luaGVyaXRhbmNlOgorCitJbmhlcml0YW5jZSBvZiBGaWxlIERlc2NyaXB0b3JzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitBIGZpbGUgZGVzY3JpcHRvciBoYXMgYW4gImluaGVyaXRhYmxlIiBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCitjYW4gYmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3Nlcy4gIFNpbmNlIFB5dGhvbiAzLjQsIGZpbGUgZGVzY3JpcHRvcnMKK2NyZWF0ZWQgYnkgUHl0aG9uIGFyZSBub24taW5oZXJpdGFibGUgYnkgZGVmYXVsdC4KKworT24gVU5JWCwgbm9uLWluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpbiBjaGlsZCBwcm9jZXNzZXMgYXQgdGhlCitleGVjdXRpb24gb2YgYSBuZXcgcHJvZ3JhbSwgb3RoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaW5oZXJpdGVkLgorCitPbiBXaW5kb3dzLCBub24taW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkCitwcm9jZXNzZXMsIGV4Y2VwdCBmb3Igc3RhbmRhcmQgc3RyZWFtcyAoZmlsZSBkZXNjcmlwdG9ycyAwLCAxIGFuZCAyOiBzdGRpbiwgc3Rkb3V0CithbmQgc3RkZXJyKSwgd2hpY2ggYXJlIGFsd2F5cyBpbmhlcml0ZWQuICBVc2luZyA6ZnVuYzpgc3Bhd25cKiA8c3Bhd25sPmAgZnVuY3Rpb25zLAorYWxsIGluaGVyaXRhYmxlIGhhbmRsZXMgYW5kIGFsbCBpbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCitVc2luZyB0aGUgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlLCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgc3RhbmRhcmQKK3N0cmVhbXMgYXJlIGNsb3NlZCwgYW5kIGluaGVyaXRhYmxlIGhhbmRsZXMgYXJlIG9ubHkgaW5oZXJpdGVkIGlmIHRoZQorKmNsb3NlX2ZkcyogcGFyYW1ldGVyIGlzIGBgRmFsc2VgYC4KKworLi4gZnVuY3Rpb246OiBnZXRfaW5oZXJpdGFibGUoZmQpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yIChhIGJvb2xlYW4pLgorCisuLiBmdW5jdGlvbjo6IHNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpCisKKyAgIFNldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorCisuLiBmdW5jdGlvbjo6IGdldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlKQorCisgICBHZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZSAoYSBib29sZWFuKS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisuLiBmdW5jdGlvbjo6IHNldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworCiAuLiBfb3MtZmlsZS1kaXI6CiAKIEZpbGVzIGFuZCBEaXJlY3RvcmllcwpAQCAtMzA0Nyw3ICszMTAyLDcgQEAKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLVRoZSBmb2xsb3dpbmcgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgZXhwb3NlZCBpZiB0aGV5IGFyZSBhIHN1cHBvcnRlZCBieSB0aGUKK1RoZSBmb2xsb3dpbmcgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgZXhwb3NlZCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgYnkgdGhlCiBvcGVyYXRpbmcgc3lzdGVtLgogCiAuLiBkYXRhOjogU0NIRURfT1RIRVIKQEAgLTMxNTYsMTAgKzMyMTEsNiBAQAogICAgUmV0dXJuIHRoZSBzZXQgb2YgQ1BVcyB0aGUgcHJvY2VzcyB3aXRoIFBJRCAqcGlkKiAob3IgdGhlIGN1cnJlbnQgcHJvY2VzcwogICAgaWYgemVybykgaXMgcmVzdHJpY3RlZCB0by4KIAotICAgLi4gc2VlYWxzbzo6Ci0gICAgICA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlCi0gICAgICBzeXN0ZW0uCi0KIAogLi4gX29zLXBhdGg6CiAKQEAgLTMxOTcsNiArMzI0OCwxMyBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKKy4uIGZ1bmN0aW9uOjogY3B1X2NvdW50KCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLiBSZXR1cm5zIE5vbmUgaWYgdW5kZXRlcm1pbmVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGdldGxvYWRhdmcoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdGhlIHN5c3RlbSBydW4gcXVldWUgYXZlcmFnZWQgb3ZlciB0aGUgbGFzdApAQCAtMzI5NSw2ICszMzUzLDE5IEBACiAgICBUaGUgZmlsZSBwYXRoIG9mIHRoZSBudWxsIGRldmljZS4gRm9yIGV4YW1wbGU6IGBgJy9kZXYvbnVsbCdgYCBmb3IKICAgIFBPU0lYLCBgYCdudWwnYGAgZm9yIFdpbmRvd3MuICBBbHNvIGF2YWlsYWJsZSB2aWEgOm1vZDpgb3MucGF0aGAuCiAKKy4uIGRhdGE6OiBSVExEX0xBWlkKKyAgICAgICAgICBSVExEX05PVworICAgICAgICAgIFJUTERfR0xPQkFMCisgICAgICAgICAgUlRMRF9MT0NBTAorICAgICAgICAgIFJUTERfTk9ERUxFVEUKKyAgICAgICAgICBSVExEX05PTE9BRAorICAgICAgICAgIFJUTERfREVFUEJJTkQKKworICAgRmxhZ3MgZm9yIHVzZSB3aXRoIHRoZSA6ZnVuYzpgfnN5cy5zZXRkbG9wZW5mbGFnc2AgYW5kCisgICA6ZnVuYzpgfnN5cy5nZXRkbG9wZW5mbGFnc2AgZnVuY3Rpb25zLiAgU2VlIHRoZSBVbml4IG1hbnVhbCBwYWdlCisgICA6bWFucGFnZTpgZGxvcGVuKDMpYCBmb3Igd2hhdCB0aGUgZGlmZmVyZW50IGZsYWdzIG1lYW4uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAuLiBfb3MtbWlzY2Z1bmM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0IGIvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMWRjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0CkBAIC0wLDAgKzEsODg1IEBACisKKzptb2Q6YHBhdGhsaWJgIC0tLSBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHBhdGhsaWIKKyAgIDpzeW5vcHNpczogT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKKworLi4gaW5kZXg6OiBzaW5nbGU6IHBhdGg7IG9wZXJhdGlvbnMKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoaXMgbW9kdWxlIG9mZmVycyBjbGFzc2VzIHJlcHJlc2VudGluZyBmaWxlc3lzdGVtIHBhdGhzIHdpdGggc2VtYW50aWNzCithcHByb3ByaWF0ZSBmb3IgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zLiAgUGF0aCBjbGFzc2VzIGFyZSBkaXZpZGVkCitiZXR3ZWVuIDpyZWY6YHB1cmUgcGF0aHMgPHB1cmUtcGF0aHM+YCwgd2hpY2ggcHJvdmlkZSBwdXJlbHkgY29tcHV0YXRpb25hbAorb3BlcmF0aW9ucyB3aXRob3V0IEkvTywgYW5kIDpyZWY6YGNvbmNyZXRlIHBhdGhzIDxjb25jcmV0ZS1wYXRocz5gLCB3aGljaAoraW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28gcHJvdmlkZSBJL08gb3BlcmF0aW9ucy4KKworLi4gaW1hZ2U6OiBwYXRobGliLWluaGVyaXRhbmNlLnBuZworICAgOmFsaWduOiBjZW50ZXIKKworSWYgeW91J3ZlIG5ldmVyIHVzZWQgdGhpcyBtb2R1bGUgYmVmb3JlIG9yIGp1c3QgYXJlbid0IHN1cmUgd2hpY2ggY2xhc3MgaXMKK3JpZ2h0IGZvciB5b3VyIHRhc2ssIDpjbGFzczpgUGF0aGAgaXMgbW9zdCBsaWtlbHkgd2hhdCB5b3UgbmVlZC4gSXQgaW5zdGFudGlhdGVzCithIDpyZWY6YGNvbmNyZXRlIHBhdGggPGNvbmNyZXRlLXBhdGhzPmAgZm9yIHRoZSBwbGF0Zm9ybSB0aGUgY29kZSBpcyBydW5uaW5nIG9uLgorCitQdXJlIHBhdGhzIGFyZSB1c2VmdWwgaW4gc29tZSBzcGVjaWFsIGNhc2VzOyBmb3IgZXhhbXBsZToKKworIy4gSWYgeW91IHdhbnQgdG8gbWFuaXB1bGF0ZSBXaW5kb3dzIHBhdGhzIG9uIGEgVW5peCBtYWNoaW5lIChvciB2aWNlIHZlcnNhKS4KKyAgIFlvdSBjYW5ub3QgaW5zdGFudGlhdGUgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCB3aGVuIHJ1bm5pbmcgb24gVW5peCwgYnV0IHlvdQorICAgY2FuIGluc3RhbnRpYXRlIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYC4KKyMuIFlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgY29kZSBvbmx5IG1hbmlwdWxhdGVzIHBhdGhzIHdpdGhvdXQgYWN0dWFsbHkKKyAgIGFjY2Vzc2luZyB0aGUgT1MuIEluIHRoaXMgY2FzZSwgaW5zdGFudGlhdGluZyBvbmUgb2YgdGhlIHB1cmUgY2xhc3NlcyBtYXkgYmUKKyAgIHVzZWZ1bCBzaW5jZSB0aG9zZSBzaW1wbHkgZG9uJ3QgaGF2ZSBhbnkgT1MtYWNjZXNzaW5nIG9wZXJhdGlvbnMuCisKKy4uIG5vdGU6OgorICAgVGhpcyBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb24gYQorICAgOnRlcm06YHByb3Zpc2lvbmFsIGJhc2lzIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbCBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHNlZWFsc286OgorICAgOnBlcDpgNDI4YDogVGhlIHBhdGhsaWIgbW9kdWxlIC0tIG9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzLgorCisuLiBzZWVhbHNvOjoKKyAgIEZvciBsb3ctbGV2ZWwgcGF0aCBtYW5pcHVsYXRpb24gb24gc3RyaW5ncywgeW91IGNhbiBhbHNvIHVzZSB0aGUKKyAgIDptb2Q6YG9zLnBhdGhgIG1vZHVsZS4KKworCitCYXNpYyB1c2UKKy0tLS0tLS0tLQorCitJbXBvcnRpbmcgdGhlIG1haW4gY2xhc3M6OgorCisgICA+Pj4gZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCisKK0xpc3Rpbmcgc3ViZGlyZWN0b3JpZXM6OgorCisgICA+Pj4gcCA9IFBhdGgoJy4nKQorICAgPj4+IFt4IGZvciB4IGluIHAuaXRlcmRpcigpIGlmIHguaXNfZGlyKCldCisgICBbUG9zaXhQYXRoKCcuaGcnKSwgUG9zaXhQYXRoKCdkb2NzJyksIFBvc2l4UGF0aCgnZGlzdCcpLAorICAgIFBvc2l4UGF0aCgnX19weWNhY2hlX18nKSwgUG9zaXhQYXRoKCdidWlsZCcpXQorCitMaXN0aW5nIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZTo6CisKKyAgID4+PiBsaXN0KHAuZ2xvYignKiovKi5weScpKQorICAgW1Bvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyksIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICBQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKSwKKyAgICBQb3NpeFBhdGgoJ2J1aWxkL2xpYi9wYXRobGliLnB5JyldCisKK05hdmlnYXRpbmcgaW5zaWRlIGEgZGlyZWN0b3J5IHRyZWU6OgorCisgICA+Pj4gcCA9IFBhdGgoJy9ldGMnKQorICAgPj4+IHEgPSBwIC8gJ2luaXQuZCcgLyAncmVib290JworICAgPj4+IHEKKyAgIFBvc2l4UGF0aCgnL2V0Yy9pbml0LmQvcmVib290JykKKyAgID4+PiBxLnJlc29sdmUoKQorICAgUG9zaXhQYXRoKCcvZXRjL3JjLmQvaW5pdC5kL2hhbHQnKQorCitRdWVyeWluZyBwYXRoIHByb3BlcnRpZXM6OgorCisgICA+Pj4gcS5leGlzdHMoKQorICAgVHJ1ZQorICAgPj4+IHEuaXNfZGlyKCkKKyAgIEZhbHNlCisKK09wZW5pbmcgYSBmaWxlOjoKKworICAgPj4+IHdpdGggcS5vcGVuKCkgYXMgZjogZi5yZWFkbGluZSgpCisgICAuLi4KKyAgICcjIS9iaW4vYmFzaFxuJworCisKKy4uIF9wdXJlLXBhdGhzOgorCitQdXJlIHBhdGhzCistLS0tLS0tLS0tCisKK1B1cmUgcGF0aCBvYmplY3RzIHByb3ZpZGUgcGF0aC1oYW5kbGluZyBvcGVyYXRpb25zIHdoaWNoIGRvbid0IGFjdHVhbGx5CithY2Nlc3MgYSBmaWxlc3lzdGVtLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gYWNjZXNzIHRoZXNlIGNsYXNzZXMsIHdoaWNoCit3ZSBhbHNvIGNhbGwgKmZsYXZvdXJzKjoKKworLi4gY2xhc3M6OiBQdXJlUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIGdlbmVyaWMgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBzeXN0ZW0ncyBwYXRoIGZsYXZvdXIgKGluc3RhbnRpYXRpbmcKKyAgIGl0IGNyZWF0ZXMgZWl0aGVyIGEgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCBvciBhIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ3NldHVwLnB5JykgICAgICAjIFJ1bm5pbmcgb24gYSBVbml4IG1hY2hpbmUKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3NldHVwLnB5JykKKworICAgRWFjaCBlbGVtZW50IG9mICpwYXRoc2VnbWVudHMqIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0CisgICByZXByZXNlbnRpbmcgYSBwYXRoIHNlZ21lbnQ7IGl0IGNhbiBhbHNvIGJlIGFub3RoZXIgcGF0aCBvYmplY3Q6OgorCisgICAgICA+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+CisgICAgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDY5NCwgaW4gcmVsYXRpdmVfdG8KKyAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgVmFsdWVFcnJvcjogJy9ldGMvcGFzc3dkJyBkb2VzIG5vdCBzdGFydCB3aXRoICcvdXNyJworCisKKy4uIF9jb25jcmV0ZS1wYXRoczoKKworCitDb25jcmV0ZSBwYXRocworLS0tLS0tLS0tLS0tLS0KKworQ29uY3JldGUgcGF0aHMgYXJlIHN1YmNsYXNzZXMgb2YgdGhlIHB1cmUgcGF0aCBjbGFzc2VzLiAgSW4gYWRkaXRpb24gdG8KK29wZXJhdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGxhdHRlciwgdGhleSBhbHNvIHByb3ZpZGUgbWV0aG9kcyB0byBkbyBzeXN0ZW0KK2NhbGxzIG9uIHBhdGggb2JqZWN0cy4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGluc3RhbnRpYXRlIGNvbmNyZXRlIHBhdGhzOgorCisuLiBjbGFzczo6IFBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBjbGFzcyByZXByZXNlbnRzIGNvbmNyZXRlIHBhdGhzIG9mCisgICB0aGUgc3lzdGVtJ3MgcGF0aCBmbGF2b3VyIChpbnN0YW50aWF0aW5nIGl0IGNyZWF0ZXMgZWl0aGVyIGEKKyAgIDpjbGFzczpgUG9zaXhQYXRoYCBvciBhIDpjbGFzczpgV2luZG93c1BhdGhgKTo6CisKKyAgICAgID4+PiBQYXRoKCdzZXR1cC5weScpCisgICAgICBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBQb3NpeFBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFBhdGhgIGFuZCA6Y2xhc3M6YFB1cmVQb3NpeFBhdGhgLCB0aGlzIGNsYXNzCisgICByZXByZXNlbnRzIGNvbmNyZXRlIG5vbi1XaW5kb3dzIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUG9zaXhQYXRoKCcvZXRjJykKKyAgICAgIFBvc2l4UGF0aCgnL2V0YycpCisKKyAgICpwYXRoc2VnbWVudHMqIGlzIHNwZWNpZmllZCBzaW1pbGFybHkgdG8gOmNsYXNzOmBQdXJlUGF0aGAuCisKKy4uIGNsYXNzOjogV2luZG93c1BhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFBhdGhgIGFuZCA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGAsIHRoaXMgY2xhc3MKKyAgIHJlcHJlc2VudHMgY29uY3JldGUgV2luZG93cyBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpCisgICAgICBXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKyAgICpwYXRoc2VnbWVudHMqIGlzIHNwZWNpZmllZCBzaW1pbGFybHkgdG8gOmNsYXNzOmBQdXJlUGF0aGAuCisKK1lvdSBjYW4gb25seSBpbnN0YW50aWF0ZSB0aGUgY2xhc3MgZmxhdm91ciB0aGF0IGNvcnJlc3BvbmRzIHRvIHlvdXIgc3lzdGVtCisoYWxsb3dpbmcgc3lzdGVtIGNhbGxzIG9uIG5vbi1jb21wYXRpYmxlIHBhdGggZmxhdm91cnMgY291bGQgbGVhZCB0bworYnVncyBvciBmYWlsdXJlcyBpbiB5b3VyIGFwcGxpY2F0aW9uKTo6CisKKyAgID4+PiBpbXBvcnQgb3MKKyAgID4+PiBvcy5uYW1lCisgICAncG9zaXgnCisgICA+Pj4gUGF0aCgnc2V0dXAucHknKQorICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisgICA+Pj4gUG9zaXhQYXRoKCdzZXR1cC5weScpCisgICBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgID4+PiBXaW5kb3dzUGF0aCgnc2V0dXAucHknKQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICBGaWxlICJwYXRobGliLnB5IiwgbGluZSA3OTgsIGluIF9fbmV3X18KKyAgICAgICAlIChjbHMuX19uYW1lX18sKSkKKyAgIE5vdEltcGxlbWVudGVkRXJyb3I6IGNhbm5vdCBpbnN0YW50aWF0ZSAnV2luZG93c1BhdGgnIG9uIHlvdXIgc3lzdGVtCisKKworTWV0aG9kcworXl5eXl5eXgorCitDb25jcmV0ZSBwYXRocyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbiBhZGRpdGlvbiB0byBwdXJlIHBhdGhzCittZXRob2RzLiAgTWFueSBvZiB0aGVzZSBtZXRob2RzIGNhbiByYWlzZSBhbiA6ZXhjOmBPU0Vycm9yYCBpZiBhIHN5c3RlbQorY2FsbCBmYWlscyAoZm9yIGV4YW1wbGUgYmVjYXVzZSB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0KToKKworLi4gY2xhc3NtZXRob2Q6OiBQYXRoLmN3ZCgpCisKKyAgIFJldHVybiBhIG5ldyBwYXRoIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IChhcyByZXR1cm5lZAorICAgYnkgOmZ1bmM6YG9zLmdldGN3ZGApOjoKKworICAgICAgPj4+IFBhdGguY3dkKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliJykKKworCisuLiBtZXRob2Q6OiBQYXRoLnN0YXQoKQorCisgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwYXRoIChzaW1pbGFybHkgdG8gOmZ1bmM6YG9zLnN0YXRgKS4KKyAgIFRoZSByZXN1bHQgaXMgbG9va2VkIHVwIGF0IGVhY2ggY2FsbCB0byB0aGlzIG1ldGhvZC4KKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgOTU2CisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbXRpbWUKKyAgICAgIDEzMjc4ODM1NDcuODUyNTU0CisKKworLi4gbWV0aG9kOjogUGF0aC5jaG1vZChtb2RlKQorCisgICBDaGFuZ2UgdGhlIGZpbGUgbW9kZSBhbmQgcGVybWlzc2lvbnMsIGxpa2UgOmZ1bmM6YG9zLmNobW9kYDo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgIDMzMjc3CisgICAgICA+Pj4gcC5jaG1vZCgwbzQ0NCkKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAzMzA2MAorCisKKy4uIG1ldGhvZDo6IFBhdGguZXhpc3RzKCkKKworICAgV2hldGhlciB0aGUgcGF0aCBwb2ludHMgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3Rvcnk6OgorCisgICAgICA+Pj4gUGF0aCgnLicpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnc2V0dXAucHknKS5leGlzdHMoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFBhdGgoJy9ldGMnKS5leGlzdHMoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFBhdGgoJ25vbmV4aXN0ZW50ZmlsZScpLmV4aXN0cygpCisgICAgICBGYWxzZQorCisgICAuLiBub3RlOjoKKyAgICAgIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIDptZXRoOmBleGlzdHNgIHJldHVybnMgd2hldGhlciB0aGUKKyAgICAgIHN5bWxpbmsgKnBvaW50cyB0byogYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkuCisKKworLi4gbWV0aG9kOjogUGF0aC5nbG9iKHBhdHRlcm4pCisKKyAgIEdsb2IgdGhlIGdpdmVuICpwYXR0ZXJuKiBpbiB0aGUgZGlyZWN0b3J5IHJlcHJlc2VudGVkIGJ5IHRoaXMgcGF0aCwKKyAgIHlpZWxkaW5nIGFsbCBtYXRjaGluZyBmaWxlcyAob2YgYW55IGtpbmQpOjoKKworICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgncGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ3NldHVwLnB5JyksIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqLyoucHknKSkKKyAgICAgIFtQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpXQorCisgICBUaGUgImBgKipgYCIgcGF0dGVybiBtZWFucyAidGhpcyBkaXJlY3RvcnkgYW5kIGFsbCBzdWJkaXJlY3RvcmllcywKKyAgIHJlY3Vyc2l2ZWx5Ii4gIEluIG90aGVyIHdvcmRzLCBpdCBlbmFibGVzIHJlY3Vyc2l2ZSBnbG9iYmluZzo6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyoqLyoucHknKSkKKyAgICAgIFtQb3NpeFBhdGgoJ2J1aWxkL2xpYi9wYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3NldHVwLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKV0KKworICAgLi4gbm90ZTo6CisgICAgICBVc2luZyB0aGUgImBgKipgYCIgcGF0dGVybiBpbiBsYXJnZSBkaXJlY3RvcnkgdHJlZXMgbWF5IGNvbnN1bWUKKyAgICAgIGFuIGlub3JkaW5hdGUgYW1vdW50IG9mIHRpbWUuCisKKworLi4gbWV0aG9kOjogUGF0aC5ncm91cCgpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAgb3duaW5nIHRoZSBmaWxlLiAgOmV4YzpgS2V5RXJyb3JgIGlzIHJhaXNlZAorICAgaWYgdGhlIGZpbGUncyBnaWQgaXNuJ3QgZm91bmQgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2RpcigpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBkaXJlY3RvcnkgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBkaXJlY3RvcnkpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZmlsZSgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSByZWd1bGFyIGZpbGUgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSByZWd1bGFyIGZpbGUpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfc3ltbGluaygpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0OyBvdGhlciBlcnJvcnMgKHN1Y2gKKyAgIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX3NvY2tldCgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBVbml4IHNvY2tldCAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIFVuaXggc29ja2V0KSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2ZpZm8oKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgRklGTyAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIEZJRk8pLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfYmxvY2tfZGV2aWNlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGJsb2NrIGRldmljZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGJsb2NrIGRldmljZSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19jaGFyX2RldmljZSgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBjaGFyYWN0ZXIgZGV2aWNlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgY2hhcmFjdGVyIGRldmljZSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pdGVyZGlyKCkKKworICAgV2hlbiB0aGUgcGF0aCBwb2ludHMgdG8gYSBkaXJlY3RvcnksIHlpZWxkIHBhdGggb2JqZWN0cyBvZiB0aGUgZGlyZWN0b3J5CisgICBjb250ZW50czo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZG9jcycpCisgICAgICA+Pj4gZm9yIGNoaWxkIGluIHAuaXRlcmRpcigpOiBjaGlsZAorICAgICAgLi4uCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvX3RlbXBsYXRlcycpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvbWFrZS5iYXQnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL2luZGV4LnJzdCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvX2J1aWxkJykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fc3RhdGljJykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9NYWtlZmlsZScpCisKKy4uIG1ldGhvZDo6IFBhdGgubGNobW9kKG1vZGUpCisKKyAgIExpa2UgOm1ldGg6YFBhdGguY2htb2RgIGJ1dCwgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgdGhlCisgICBzeW1ib2xpYyBsaW5rJ3MgbW9kZSBpcyBjaGFuZ2VkIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKworCisuLiBtZXRob2Q6OiBQYXRoLmxzdGF0KCkKKworICAgTGlrZSA6bWV0aDpgUGF0aC5zdGF0YCBidXQsIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIHJldHVybgorICAgdGhlIHN5bWJvbGljIGxpbmsncyBpbmZvcm1hdGlvbiByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisKKworLi4gbWV0aG9kOjogUGF0aC5ta2Rpcihtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlKQorCisgICBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGF0IHRoaXMgZ2l2ZW4gcGF0aC4gIElmICptb2RlKiBpcyBnaXZlbiwgaXQgaXMKKyAgIGNvbWJpbmVkIHdpdGggdGhlIHByb2Nlc3MnIGBgdW1hc2tgYCB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgbW9kZQorICAgYW5kIGFjY2VzcyBmbGFncy4gIElmIHRoZSBwYXRoIGFscmVhZHkgZXhpc3RzLCA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIElmICpwYXJlbnRzKiBpcyB0cnVlLCBhbnkgbWlzc2luZyBwYXJlbnRzIG9mIHRoaXMgcGF0aCBhcmUgY3JlYXRlZAorICAgYXMgbmVlZGVkLiAgSWYgKnBhcmVudHMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCksIGEgbWlzc2luZyBwYXJlbnQgcmFpc2VzCisgICA6ZXhjOmBPU0Vycm9yYC4KKworCisuLiBtZXRob2Q6OiBQYXRoLm9wZW4obW9kZT0ncicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSkKKworICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IHRoZSBwYXRoLCBsaWtlIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAKKyAgIGZ1bmN0aW9uIGRvZXM6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiB3aXRoIHAub3BlbigpIGFzIGY6CisgICAgICAuLi4gICAgIGYucmVhZGxpbmUoKQorICAgICAgLi4uCisgICAgICAnIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuJworCisKKy4uIG1ldGhvZDo6IFBhdGgub3duZXIoKQorCisgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHVzZXIgb3duaW5nIHRoZSBmaWxlLiAgOmV4YzpgS2V5RXJyb3JgIGlzIHJhaXNlZAorICAgaWYgdGhlIGZpbGUncyB1aWQgaXNuJ3QgZm91bmQgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZS4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJlbmFtZSh0YXJnZXQpCisKKyAgIFJlbmFtZSB0aGlzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiAqdGFyZ2V0Ki4gICp0YXJnZXQqIGNhbiBiZQorICAgZWl0aGVyIGEgc3RyaW5nIG9yIGFub3RoZXIgcGF0aCBvYmplY3Q6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ2ZvbycpCisgICAgICA+Pj4gcC5vcGVuKCd3Jykud3JpdGUoJ3NvbWUgdGV4dCcpCisgICAgICA5CisgICAgICA+Pj4gdGFyZ2V0ID0gUGF0aCgnYmFyJykKKyAgICAgID4+PiBwLnJlbmFtZSh0YXJnZXQpCisgICAgICA+Pj4gdGFyZ2V0Lm9wZW4oKS5yZWFkKCkKKyAgICAgICdzb21lIHRleHQnCisKKworLi4gbWV0aG9kOjogUGF0aC5yZXBsYWNlKHRhcmdldCkKKworICAgUmVuYW1lIHRoaXMgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIGdpdmVuICp0YXJnZXQqLiAgSWYgKnRhcmdldCogcG9pbnRzCisgICB0byBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB1bmNvbmRpdGlvbmFsbHkgcmVwbGFjZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5yZXNvbHZlKCkKKworICAgTWFrZSB0aGUgcGF0aCBhYnNvbHV0ZSwgcmVzb2x2aW5nIGFueSBzeW1saW5rcy4gIEEgbmV3IHBhdGggb2JqZWN0IGlzCisgICByZXR1cm5lZDo6CisKKyAgICAgID4+PiBwID0gUGF0aCgpCisgICAgICA+Pj4gcAorICAgICAgUG9zaXhQYXRoKCcuJykKKyAgICAgID4+PiBwLnJlc29sdmUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWInKQorCisgICBgIi4uImAgY29tcG9uZW50cyBhcmUgYWxzbyBlbGltaW5hdGVkICh0aGlzIGlzIHRoZSBvbmx5IG1ldGhvZCB0byBkbyBzbyk6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ2RvY3MvLi4vc2V0dXAucHknKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYi9zZXR1cC5weScpCisKKyAgIElmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QsIDpleGM6YEZpbGVOb3RGb3VuZEVycm9yYCBpcyByYWlzZWQuICBJZiBhbgorICAgaW5maW5pdGUgbG9vcCBpcyBlbmNvdW50ZXJlZCBhbG9uZyB0aGUgcmVzb2x1dGlvbiBwYXRoLAorICAgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5yZ2xvYihwYXR0ZXJuKQorCisgICBUaGlzIGlzIGxpa2UgY2FsbGluZyA6bWV0aDpgZ2xvYmAgd2l0aCAiYGAqKmBgIiBhZGRlZCBpbiBmcm9udCBvZiB0aGUKKyAgIGdpdmVuICpwYXR0ZXJuKjoKKworICAgICAgPj4+IHNvcnRlZChQYXRoKCkucmdsb2IoIioucHkiKSkKKyAgICAgIFtQb3NpeFBhdGgoJ2J1aWxkL2xpYi9wYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3NldHVwLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKV0KKworCisuLiBtZXRob2Q6OiBQYXRoLnJtZGlyKCkKKworICAgUmVtb3ZlIHRoaXMgZGlyZWN0b3J5LiAgVGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LgorCisKKy4uIG1ldGhvZDo6IFBhdGguc3ltbGlua190byh0YXJnZXQsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UpCisKKyAgIE1ha2UgdGhpcyBwYXRoIGEgc3ltYm9saWMgbGluayB0byAqdGFyZ2V0Ki4gIFVuZGVyIFdpbmRvd3MsCisgICAqdGFyZ2V0X2lzX2RpcmVjdG9yeSogbXVzdCBiZSB0cnVlIChkZWZhdWx0IGBgRmFsc2VgYCkgaWYgdGhlIGxpbmsncyB0YXJnZXQKKyAgIGlzIGEgZGlyZWN0b3J5LiAgVW5kZXIgUE9TSVgsICp0YXJnZXRfaXNfZGlyZWN0b3J5KidzIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAgICAgID4+PiBwID0gUGF0aCgnbXlsaW5rJykKKyAgICAgID4+PiBwLnN5bWxpbmtfdG8oJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnJlc29sdmUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWIvc2V0dXAucHknKQorICAgICAgPj4+IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgIDk1NgorICAgICAgPj4+IHAubHN0YXQoKS5zdF9zaXplCisgICAgICA4CisKKyAgIC4uIG5vdGU6OgorICAgICAgVGhlIG9yZGVyIG9mIGFyZ3VtZW50cyAobGluaywgdGFyZ2V0KSBpcyB0aGUgcmV2ZXJzZQorICAgICAgb2YgOmZ1bmM6YG9zLnN5bWxpbmtgJ3MuCisKKworLi4gbWV0aG9kOjogUGF0aC50b3VjaChtb2RlPTBvNzc3LCBleGlzdF9vaz1UcnVlKQorCisgICBDcmVhdGUgYSBmaWxlIGF0IHRoaXMgZ2l2ZW4gcGF0aC4gIElmICptb2RlKiBpcyBnaXZlbiwgaXQgaXMgY29tYmluZWQKKyAgIHdpdGggdGhlIHByb2Nlc3MnIGBgdW1hc2tgYCB2YWx1ZSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgbW9kZSBhbmQgYWNjZXNzCisgICBmbGFncy4gIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgaWYgKmV4aXN0X29rKgorICAgaXMgdHJ1ZSAoYW5kIGl0cyBtb2RpZmljYXRpb24gdGltZSBpcyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUpLAorICAgb3RoZXJ3aXNlIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnVubGluaygpCisKKyAgIFJlbW92ZSB0aGlzIGZpbGUgb3Igc3ltYm9saWMgbGluay4gIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwKKyAgIHVzZSA6ZnVuYzpgUGF0aC5ybWRpcmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IGY0ZTM3YWMuLjQ4YThhNmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtNDEsNyArNDEsNyBAQAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBpcyBhdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZAogICAgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcwotICAgYXJndW1lbnRzIG9mIHRoZSBgYHByaW50YGAgY29tbWFuZC4KKyAgIGFyZ3VtZW50cyBvZiB0aGUgYGBwYGAgY29tbWFuZC4KIAogOmZpbGU6YHBkYi5weWAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yCiBleGFtcGxlOjoKQEAgLTMwOSw3ICszMDksNyBAQAogICAgYGBlbmRgYCB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOjoKIAogICAgICAgKFBkYikgY29tbWFuZHMgMQotICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZQorICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlCiAgICAgICAoY29tKSBlbmQKICAgICAgIChQZGIpCiAKQEAgLTQwMywxMyArNDAzLDE5IEBACiAKICAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogCi0uLiBwZGJjb21tYW5kOjogcChyaW50KSBleHByZXNzaW9uCisuLiBwZGJjb21tYW5kOjogcCBleHByZXNzaW9uCiAKICAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzIHZhbHVlLgogCisgICAuLiBub3RlOjoKKworICAgICAgYGBwcmludCgpYGAgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tIHRoaXMgZXhlY3V0ZXMgdGhlCisgICAgICBQeXRob24gOmZ1bmM6YHByaW50YCBmdW5jdGlvbi4KKworCiAuLiBwZGJjb21tYW5kOjogcHAgZXhwcmVzc2lvbgogCi0gICBMaWtlIHRoZSA6cGRiY21kOmBwcmludGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcworICAgTGlrZSB0aGUgOnBkYmNtZDpgcGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcwogICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIDptb2Q6YHBwcmludGAgbW9kdWxlLgogCiAuLiBwZGJjb21tYW5kOjogd2hhdGlzIGV4cHJlc3Npb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CmluZGV4IDg2OTAyZWYuLjE0ZDUyMDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdApAQCAtMzg0LDcgKzM4NCw4IEBACiAKICogdHVwbGVzLCBsaXN0cywgc2V0cywgYW5kIGRpY3Rpb25hcmllcyBjb250YWluaW5nIG9ubHkgcGlja2xhYmxlIG9iamVjdHMKIAotKiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCisqIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUgKHVzaW5nIDprZXl3b3JkOmBkZWZgLCBub3QKKyAgOmtleXdvcmQ6YGxhbWJkYWApCiAKICogYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZQogCkBAIC00MDIsNyArNDAzLDcgQEAKIDpmdW5jOmBzeXMuc2V0cmVjdXJzaW9ubGltaXRgLgogCiBOb3RlIHRoYXQgZnVuY3Rpb25zIChidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkKSBhcmUgcGlja2xlZCBieSAiZnVsbHkgcXVhbGlmaWVkIgotbmFtZSByZWZlcmVuY2UsIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCituYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiBbI11fICBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpcwogcGlja2xlZCwgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluLiAgTmVpdGhlcgogdGhlIGZ1bmN0aW9uJ3MgY29kZSwgbm9yIGFueSBvZiBpdHMgZnVuY3Rpb24gYXR0cmlidXRlcyBhcmUgcGlja2xlZC4gIFRodXMgdGhlCiBkZWZpbmluZyBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGluIHRoZSB1bnBpY2tsaW5nIGVudmlyb25tZW50LCBhbmQgdGhlIG1vZHVsZQpAQCAtNDU4LDEyICs0NTksMjkgQEAKIENsYXNzZXMgY2FuIGFsdGVyIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSBwcm92aWRpbmcgb25lIG9yIHNldmVyYWwgc3BlY2lhbAogbWV0aG9kczoKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19leF9fKCkKKworICAgSW4gcHJvdG9jb2xzIDQgYW5kIG5ld2VyLCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50cyB0aGUKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgbWV0aG9kIGNhbiBkaWN0YXRlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZQorICAgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uIHVucGlja2xpbmcuICBUaGUgbWV0aG9kIG11c3QgcmV0dXJuIGEgcGFpcgorICAgYGAoYXJncywga3dhcmdzKWBgIHdoZXJlICphcmdzKiBpcyBhIHR1cGxlIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzCisgICBhbmQgKmt3YXJncyogYSBkaWN0aW9uYXJ5IG9mIG5hbWVkIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0aW5nIHRoZQorICAgb2JqZWN0LiAgVGhvc2Ugd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgorICAgdW5waWNrbGluZy4KKworICAgWW91IHNob3VsZCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgaWYgdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2Qgb2YgeW91cgorICAgY2xhc3MgcmVxdWlyZXMga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gIE90aGVyd2lzZSwgaXQgaXMgcmVjb21tZW5kZWQgZm9yCisgICBjb21wYXRpYmlsaXR5IHRvIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLgorCisKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2dldG5ld2FyZ3NfXygpCiAKLSAgIEluIHByb3RvY29sIDIgYW5kIG5ld2VyLCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50cyB0aGUgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYAotICAgbWV0aG9kIGNhbiBkaWN0YXRlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24KLSAgIHVucGlja2xpbmcuICBUaGlzIGlzIG9mdGVuIG5lZWRlZCBmb3IgY2xhc3NlcyB3aG9zZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kCi0gICByZXF1aXJlcyBhcmd1bWVudHMuCisgICBUaGlzIG1ldGhvZCBzZXJ2ZSBhIHNpbWlsYXIgcHVycG9zZSBhcyA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIGJ1dAorICAgZm9yIHByb3RvY29scyAyIGFuZCBuZXdlci4gIEl0IG11c3QgcmV0dXJuIGEgdHVwbGUgb2YgYXJndW1lbnRzIGBhcmdzYAorICAgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbiB1bnBpY2tsaW5nLgorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIDptZXRoOmBfX2dldG5ld2FyZ3NfX2Agd2lsbCBub3QgYmUgY2FsbGVkIGlmCisgICA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIGlzIGRlZmluZWQuCiAKIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0c3RhdGVfXygpCkBAIC00OTUsMTAgKzUxMywxMCBAQAogCiAgICBBdCB1bnBpY2tsaW5nIHRpbWUsIHNvbWUgbWV0aG9kcyBsaWtlIDptZXRoOmBfX2dldGF0dHJfX2AsCiAgICA6bWV0aDpgX19nZXRhdHRyaWJ1dGVfX2AsIG9yIDptZXRoOmBfX3NldGF0dHJfX2AgbWF5IGJlIGNhbGxlZCB1cG9uIHRoZQotICAgaW5zdGFuY2UuICBJbiBjYXNlIHRob3NlIG1ldGhvZHMgcmVseSBvbiBzb21lIGludGVybmFsIGludmFyaWFudCBiZWluZyB0cnVlLAotICAgdGhlIHR5cGUgc2hvdWxkIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIHRvIGVzdGFibGlzaCBzdWNoIGFuCi0gICBpbnZhcmlhbnQ7IG90aGVyd2lzZSwgbmVpdGhlciA6bWV0aDpgX19uZXdfX2Agbm9yIDptZXRoOmBfX2luaXRfX2Agd2lsbCBiZQotICAgY2FsbGVkLgorICAgaW5zdGFuY2UuICBJbiBjYXNlIHRob3NlIG1ldGhvZHMgcmVseSBvbiBzb21lIGludGVybmFsIGludmFyaWFudCBiZWluZworICAgdHJ1ZSwgdGhlIHR5cGUgc2hvdWxkIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIG9yCisgICA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIHRvIGVzdGFibGlzaCBzdWNoIGFuIGludmFyaWFudDsgb3RoZXJ3aXNlLAorICAgbmVpdGhlciA6bWV0aDpgX19uZXdfX2Agbm9yIDptZXRoOmBfX2luaXRfX2Agd2lsbCBiZSBjYWxsZWQuCiAKIC4uIGluZGV4OjogcGFpcjogY29weTsgcHJvdG9jb2wKIApAQCAtNTEwLDcgKzUyOCw3IEBACiAKIEFsdGhvdWdoIHBvd2VyZnVsLCBpbXBsZW1lbnRpbmcgOm1ldGg6YF9fcmVkdWNlX19gIGRpcmVjdGx5IGluIHlvdXIgY2xhc3NlcyBpcwogZXJyb3IgcHJvbmUuICBGb3IgdGhpcyByZWFzb24sIGNsYXNzIGRlc2lnbmVycyBzaG91bGQgdXNlIHRoZSBoaWdoLWxldmVsCi1pbnRlcmZhY2UgKGkuZS4sIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AsIDptZXRoOmBfX2dldHN0YXRlX19gIGFuZAoraW50ZXJmYWNlIChpLmUuLCA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gLCA6bWV0aDpgX19nZXRzdGF0ZV9fYCBhbmQKIDptZXRoOmBfX3NldHN0YXRlX19gKSB3aGVuZXZlciBwb3NzaWJsZS4gIFdlIHdpbGwgc2hvdywgaG93ZXZlciwgY2FzZXMgd2hlcmUKIHVzaW5nIDptZXRoOmBfX3JlZHVjZV9fYCBpcyB0aGUgb25seSBvcHRpb24gb3IgbGVhZHMgdG8gbW9yZSBlZmZpY2llbnQgcGlja2xpbmcKIG9yIGJvdGguCkBAIC04NTAsNiArODY4LDkgQEAKIAogLi4gWyNdIERvbid0IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSA6bW9kOmBtYXJzaGFsYCBtb2R1bGUKIAorLi4gWyNdIFRoaXMgaXMgd2h5IDprZXl3b3JkOmBsYW1iZGFgIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcGlja2xlZDogIGFsbAorICAgIDprZXl3b3JkOmBsYW1iZGFgIGZ1bmN0aW9ucyBzaGFyZSB0aGUgc2FtZSBuYW1lOiAgYGA8bGFtYmRhPmBgLgorCiAuLiBbI10gVGhlIGV4Y2VwdGlvbiByYWlzZWQgd2lsbCBsaWtlbHkgYmUgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIG9yIGFuCiAgICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgYnV0IGl0IGNvdWxkIGJlIHNvbWV0aGluZyBlbHNlLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKaW5kZXggYTI2NzM2OC4uM2NmODA4NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdApAQCAtMTYsMjYgKzE2LDIxIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlICJwcm9wZXJ0eSBsaXN0IgotWE1MIGZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYLgorZmlsZXMgdXNlZCBtYWlubHkgYnkgTWFjIE9TIFggYW5kIHN1cHBvcnRzIGJvdGggYmluYXJ5IGFuZCBYTUwgcGxpc3QgZmlsZXMuCiAKLVRoZSBwcm9wZXJ0eSBsaXN0IChgYC5wbGlzdGBgKSBmaWxlIGZvcm1hdCBpcyBhIHNpbXBsZSBYTUwgcGlja2xlIHN1cHBvcnRpbmcKK1RoZSBwcm9wZXJ0eSBsaXN0IChgYC5wbGlzdGBgKSBmaWxlIGZvcm1hdCBpcyBhIHNpbXBsZSBzZXJpYWxpemF0aW9uIHN1cHBvcnRpbmcKIGJhc2ljIG9iamVjdCB0eXBlcywgbGlrZSBkaWN0aW9uYXJpZXMsIGxpc3RzLCBudW1iZXJzIGFuZCBzdHJpbmdzLiAgVXN1YWxseSB0aGUKIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYW5kIHRvIHBhcnNlIGEgcGxpc3QgZmlsZSwgdXNlIHRoZSA6ZnVuYzpgd3JpdGVQbGlzdGAgYW5kCi06ZnVuYzpgcmVhZFBsaXN0YCBmdW5jdGlvbnMuCitUbyB3cml0ZSBvdXQgYW5kIHRvIHBhcnNlIGEgcGxpc3QgZmlsZSwgdXNlIHRoZSA6ZnVuYzpgZHVtcGAgYW5kCis6ZnVuYzpgbG9hZGAgZnVuY3Rpb25zLgogCi1UbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB1c2UgOmZ1bmM6YHdyaXRlUGxpc3RUb0J5dGVzYAotYW5kIDpmdW5jOmByZWFkUGxpc3RGcm9tQnl0ZXNgLgorVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmBkdW1wc2AKK2FuZCA6ZnVuYzpgbG9hZHNgLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLCBkaWN0aW9uYXJpZXMKLShidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgOmNsYXNzOmBEYXRhYCBvciA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYAotb2JqZWN0cy4gIFN0cmluZyB2YWx1ZXMgKGluY2x1ZGluZyBkaWN0aW9uYXJ5IGtleXMpIGhhdmUgdG8gYmUgdW5pY29kZSBzdHJpbmdzIC0tCi10aGV5IHdpbGwgYmUgd3JpdHRlbiBvdXQgYXMgVVRGLTguCi0KLVRoZSBgYDxkYXRhPmBgIHBsaXN0IHR5cGUgaXMgc3VwcG9ydGVkIHRocm91Z2ggdGhlIDpjbGFzczpgRGF0YWAgY2xhc3MuICBUaGlzIGlzCi1hIHRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiAgVXNlIDpjbGFzczpgRGF0YWAgaWYgeW91ciBzdHJpbmdzCi1jb250YWluIGNvbnRyb2wgY2hhcmFjdGVycy4KKyhidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgOmNsYXNzOmBEYXRhYCwgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZXNhcnJheWAKK29yIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgIG9iamVjdHMuCiAKIC4uIHNlZWFsc286OgogCkBAIC00NSwzNyArNDAsMTQ1IEBACiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcmVhZFBsaXN0KHBhdGhPckZpbGUpCisuLiBmdW5jdGlvbjo6IGxvYWQoZnAsIFwqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpCiAKLSAgIFJlYWQgYSBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSBhbmQKLSAgIGJpbmFyeSkgZmlsZSBvYmplY3QuICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEKKyAgIFJlYWQgYSBwbGlzdCBmaWxlLiAqZnAqIHNob3VsZCBiZSBhIHJlYWRhYmxlIGFuZCBiaW5hcnkgZmlsZSBvYmplY3QuCisgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEKICAgIGRpY3Rpb25hcnkpLgogCi0gICBUaGUgWE1MIGRhdGEgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIgZnJvbSA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAKLSAgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUgZXhjZXB0aW9ucyBvbiBpbGwtZm9ybWVkIFhNTC4KLSAgIFVua25vd24gZWxlbWVudHMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZCBieSB0aGUgcGxpc3QgcGFyc2VyLgorICAgVGhlICpmbXQqIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgYW5kIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB2YWxpZDoKKworICAgKiA6ZGF0YTpgTm9uZWA6IEF1dG9kZXRlY3QgdGhlIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9YTUxgOiBYTUwgZmlsZSBmb3JtYXQKKworICAgKiA6ZGF0YTpgRk1UX0JJTkFSWWA6IEJpbmFyeSBwbGlzdCBmb3JtYXQKKworICAgSWYgKnVzZV9idWlsdGluX3R5cGVzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgYmluYXJ5IGRhdGEgd2lsbCBiZSByZXR1cm5lZAorICAgYXMgaW5zdGFuY2VzIG9mIDpjbGFzczpgYnl0ZXNgLCBvdGhlcndpc2UgaXQgaXMgcmV0dXJuZWQgYXMgaW5zdGFuY2VzIG9mCisgICA6Y2xhc3M6YERhdGFgLgorCisgICBUaGUgKmRpY3RfdHlwZSogaXMgdGhlIHR5cGUgdXNlZCBmb3IgZGljdGlvbmFyaWVzIHRoYXQgYXJlIHJlYWQgZnJvbSB0aGUKKyAgIHBsaXN0IGZpbGUuIFRoZSBleGFjdCBzdHJ1Y3R1cmUgb2YgdGhlIHBsaXN0IGNhbiBiZSByZWNvdmVyZWQgYnkgdXNpbmcKKyAgIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIChhbHRob3VnaCB0aGUgb3JkZXIgb2Yga2V5cyBzaG91bGRuJ3QgYmUKKyAgIGltcG9ydGFudCBpbiBwbGlzdCBmaWxlcykuCisKKyAgIFhNTCBkYXRhIGZvciB0aGUgOmRhdGE6YEZNVF9YTUxgIGZvcm1hdCBpcyBwYXJzZWQgdXNpbmcgdGhlIEV4cGF0IHBhcnNlcgorICAgZnJvbSA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgLS0gc2VlIGl0cyBkb2N1bWVudGF0aW9uIGZvciBwb3NzaWJsZQorICAgZXhjZXB0aW9ucyBvbiBpbGwtZm9ybWVkIFhNTC4gIFVua25vd24gZWxlbWVudHMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZAorICAgYnkgdGhlIHBsaXN0IHBhcnNlci4KKworICAgVGhlIHBhcnNlciBmb3IgdGhlIGJpbmFyeSBmb3JtYXQgcmFpc2VzIDpleGM6YEludmFsaWRGaWxlRXhjZXB0aW9uYAorICAgd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgcGFyc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGxvYWRzKGRhdGEsIFwqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpCisKKyAgIExvYWQgYSBwbGlzdCBmcm9tIGEgYnl0ZXMgb2JqZWN0LiBTZWUgOmZ1bmM6YGxvYWRgIGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisKKy4uIGZ1bmN0aW9uOjogZHVtcCh2YWx1ZSwgZnAsIFwqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisgICBXcml0ZSAqdmFsdWUqIHRvIGEgcGxpc3QgZmlsZS4gKkZwKiBzaG91bGQgYmUgYSB3cml0YWJsZSwgYmluYXJ5CisgICBmaWxlIG9iamVjdC4KKworICAgVGhlICpmbXQqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBwbGlzdCBmaWxlIGFuZCBjYW4gYmUKKyAgIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgKiA6ZGF0YTpgRk1UX1hNTGA6IFhNTCBmb3JtYXR0ZWQgcGxpc3QgZmlsZQorCisgICAqIDpkYXRhOmBGTVRfQklOQVJZYDogQmluYXJ5IGZvcm1hdHRlZCBwbGlzdCBmaWxlCisKKyAgIFdoZW4gKnNvcnRfa2V5cyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIHRoZSBrZXlzIGZvciBkaWN0aW9uYXJpZXMgd2lsbCBiZQorICAgd3JpdHRlbiB0byB0aGUgcGxpc3QgaW4gc29ydGVkIG9yZGVyLCBvdGhlcndpc2UgdGhleSB3aWxsIGJlIHdyaXR0ZW4gaW4KKyAgIHRoZSBpdGVyYXRpb24gb3JkZXIgb2YgdGhlIGRpY3Rpb25hcnkuCisKKyAgIFdoZW4gKnNraXBrZXlzKiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpIHRoZSBmdW5jdGlvbiByYWlzZXMgOmV4YzpgVHlwZUVycm9yYAorICAgd2hlbiBhIGtleSBvZiBhIGRpY3Rpb25hcnkgaXMgbm90IGEgc3RyaW5nLCBvdGhlcndpc2Ugc3VjaCBrZXlzIGFyZSBza2lwcGVkLgorCisgICBBIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9iamVjdCBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIG9yCisgICBhIGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIG9iamVjdHMgb2YgdW5zdXBwb3J0ZWQgdHlwZXMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmZtdCosICpzb3J0X2tleXMqIGFuZCAqc2tpcGtleXMqIGFyZ3VtZW50cy4KKworCisuLiBmdW5jdGlvbjo6IGR1bXBzKHZhbHVlLCBcKiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKworICAgUmV0dXJuICp2YWx1ZSogYXMgYSBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LiBTZWUKKyAgIHRoZSBkb2N1bWVudGF0aW9uIGZvciA6ZnVuYzpgZHVtcGAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBrZXl3b3JkCisgICBhcmd1bWVudHMgb2YgdGhpcyBmdW5jdGlvbi4KKworCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDoKKworLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKworICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlCisgICBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4gUmV0dXJucyB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkKKyAgIGlzIGEgZGljdGlvbmFyeSkuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgOmZ1bmM6YGxvYWRgIHRvIGRvIHRoZSBhY3R1YWwgd29yaywgdGhlIHRoZSBkb2N1bWVudGF0aW9uCisgICBvZiA6ZnVuYzpgdGhhdCBmdW5jdGlvbiA8bG9hZD5gIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6IDMuNCBVc2UgOmZ1bmM6YGxvYWRgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpCiAKLSAgICBXcml0ZSAqcm9vdE9iamVjdCogdG8gYSBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZQotICAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0LgorICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGFuIFhNTCBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGJlIGVpdGhlciBhIGZpbGUgbmFtZQorICAgb3IgYSAod3JpdGFibGUgYW5kIGJpbmFyeSkgZmlsZSBvYmplY3QKIAotICAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKLSAgICBhIGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIG9iamVjdHMgb2YgdW5zdXBwb3J0ZWQgdHlwZXMuCisgICAuLiBkZXByZWNhdGVkOiAzLjQgVXNlIDpmdW5jOmBkdW1wYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCiAKICAgIFJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuICBSZXR1cm4gdGhlIHJvb3Qgb2JqZWN0LgogCisgICBTZWUgOmZ1bmM6YGxvYWRgIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIERpY3QgdmFsdWVzIGluIHRoZSByZXN1bHQgaGF2ZSBhIGBgX19nZXRhdHRyX19gYCBtZXRob2QgdGhhdCBkZWZlcnMKKyAgICAgIHRvIGBgX19nZXRpdGVtX2BgLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgYXR0cmlidXRlIGFjY2VzcyB0bworICAgICAgYWNjZXNzIGl0ZW1zIG9mIHRoZXNlIGRpY3Rpb25hcmllcy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGxvYWRzYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdFRvQnl0ZXMocm9vdE9iamVjdCkKIAotICAgUmV0dXJuICpyb290T2JqZWN0KiBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisgICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGFuIFhNTCBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgZHVtcHNgIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmZtdCosICpzb3J0X2tleXMqIGFuZCAqc2tpcGtleXMqIGFyZ3VtZW50cy4KIAogCi1UaGUgZm9sbG93aW5nIGNsYXNzIGlzIGF2YWlsYWJsZToKK1RoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgYXZhaWxhYmxlOgorCisuLiBjbGFzczo6IERpY3QoW2RpY3RdKToKKworICAgUmV0dXJuIGFuIGV4dGVuZGVkIG1hcHBpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgZGljdGlvbmFyeQorICAgKmRpY3QqLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBkaWN0YCB3aGVyZSBhdHRyaWJ1dGUgYWNjZXNzIGNhbgorICAgYmUgdXNlZCB0byBhY2Nlc3MgaXRlbXMuIFRoYXQgaXMsIGBgYURpY3Qua2V5YGAgaXMgdGhlIHNhbWUgYXMKKyAgIGBgYURpY3RbJ2tleSddYGAgZm9yIGdldHRpbmcsIHNldHRpbmcgYW5kIGRlbGV0aW5nIGl0ZW1zIGluIHRoZSBtYXBwaW5nLgorCisgICAuLiBkZXByZWNhdGVkOjogMy4wCisKIAogLi4gY2xhc3M6OiBEYXRhKGRhdGEpCiAKQEAgLTg2LDYgKzE4OSwyNCBAQAogICAgSXQgaGFzIG9uZSBhdHRyaWJ1dGUsIDphdHRyOmBkYXRhYCwgdGhhdCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgUHl0aG9uCiAgICBieXRlcyBvYmplY3Qgc3RvcmVkIGluIGl0LgogCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpbnN0ZWFkCisKKworVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGF2YWlhYmxlOgorCisuLiBkYXRhOjogRk1UX1hNTAorCisgICBUaGUgWE1MIGZvcm1hdCBmb3IgcGxpc3QgZmlsZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBGTVRfQklOQVJZCisKKyAgIFRoZSBiaW5hcnkgZm9ybWF0IGZvciBwbGlzdCBmaWxlcworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiBFeGFtcGxlcwogLS0tLS0tLS0KQEAgLTEwMywxMyArMjI0LDE1IEBACiAgICAgICAgICAgICBhVHJ1ZVZhbHVlID0gVHJ1ZSwKICAgICAgICAgICAgIGFGYWxzZVZhbHVlID0gRmFsc2UsCiAgICAgICAgICksCi0gICAgICAgIHNvbWVEYXRhID0gRGF0YShiIjxiaW5hcnkgZ3Vuaz4iKSwKLSAgICAgICAgc29tZU1vcmVEYXRhID0gRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCksCisgICAgICAgIHNvbWVEYXRhID0gYiI8YmluYXJ5IGd1bms+IiwKKyAgICAgICAgc29tZU1vcmVEYXRhID0gYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTAsCiAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lLm1rdGltZSh0aW1lLmdtdGltZSgpKSksCiAgICAgKQotICAgIHdyaXRlUGxpc3QocGwsIGZpbGVOYW1lKQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAocGwsIGZwKQogCiBQYXJzaW5nIGEgcGxpc3Q6OgogCi0gICAgcGwgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICdyYicpIGFzIGZwOgorICAgICAgICBwbCA9IGxvYWQoZnApCiAgICAgcHJpbnQocGxbImFLZXkiXSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CmluZGV4IGI0MDgwZDYuLmUyNDhkNmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdApAQCAtMTMsOCArMTMsMTEgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjbGFzcywgOmNsYXNzOmBQT1AzYCwgd2hpY2ggZW5jYXBzdWxhdGVzIGEgY29ubmVjdGlvbiB0byBhCi1QT1AzIHNlcnZlciBhbmQgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wgYXMgZGVmaW5lZCBpbiA6cmZjOmAxNzI1YC4gIFRoZQotOmNsYXNzOmBQT1AzYCBjbGFzcyBzdXBwb3J0cyBib3RoIHRoZSBtaW5pbWFsIGFuZCBvcHRpb25hbCBjb21tYW5kIHNldHMuCitQT1AzIHNlcnZlciBhbmQgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wgYXMgZGVmaW5lZCBpbiA6cmZjOmAxOTM5YC4gVGhlCis6Y2xhc3M6YFBPUDNgIGNsYXNzIHN1cHBvcnRzIGJvdGggdGhlIG1pbmltYWwgYW5kIG9wdGlvbmFsIGNvbW1hbmQgc2V0cyBmcm9tCis6cmZjOmAxOTM5YC4gVGhlIDpjbGFzczpgUE9QM2AgY2xhc3MgYWxzbyBzdXBwb3J0cyB0aGUgYFNUTFNgIGNvbW1hbmQgaW50cm9kdWNlZAoraW4gOnJmYzpgMjU5NWAgdG8gZW5hYmxlIGVuY3J5cHRlZCBjb21tdW5pY2F0aW9uIG9uIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgY29ubmVjdGlvbi4KKwogQWRkaXRpb25hbGx5LCB0aGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIDpjbGFzczpgUE9QM19TU0xgLCB3aGljaCBwcm92aWRlcwogc3VwcG9ydCBmb3IgY29ubmVjdGluZyB0byBQT1AzIHNlcnZlcnMgdGhhdCB1c2UgU1NMIGFzIGFuIHVuZGVybHlpbmcgcHJvdG9jb2wKIGxheWVyLgpAQCAtOTcsNiArMTAwLDE0IEBACiAgICBSZXR1cm5zIHRoZSBncmVldGluZyBzdHJpbmcgc2VudCBieSB0aGUgUE9QMyBzZXJ2ZXIuCiAKIAorLi4gbWV0aG9kOjogUE9QMy5jYXBhKCkKKworICAgUXVlcnkgdGhlIHNlcnZlcidzIGNhcGFiaWxpdGllcyBhcyBzcGVjaWZpZWQgaW4gOnJmYzpgMjQ0OWAuCisgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBpbiB0aGUgZm9ybSBgYHsnbmFtZSc6IFsncGFyYW0nLi4uXX1gYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogUE9QMy51c2VyKHVzZXJuYW1lKQogCiAgICBTZW5kIHVzZXIgY29tbWFuZCwgcmVzcG9uc2Ugc2hvdWxkIGluZGljYXRlIHRoYXQgYSBwYXNzd29yZCBpcyByZXF1aXJlZC4KQEAgLTE3Niw2ICsxODcsMTggQEAKICAgIHRoZSB1bmlxdWUgaWQgZm9yIHRoYXQgbWVzc2FnZSBpbiB0aGUgZm9ybSBgYCdyZXNwb25zZSBtZXNnbnVtIHVpZGBgLCBvdGhlcndpc2UKICAgIHJlc3VsdCBpcyBsaXN0IGBgKHJlc3BvbnNlLCBbJ21lc2dudW0gdWlkJywgLi4uXSwgb2N0ZXRzKWBgLgogCisuLiBtZXRob2Q6OiBQT1AzLnN0bHMoY29udGV4dD1Ob25lKQorCisgICBTdGFydCBhIFRMUyBzZXNzaW9uIG9uIHRoZSBhY3RpdmUgY29ubmVjdGlvbiBhcyBzcGVjaWZpZWQgaW4gOnJmYzpgMjU5NWAuCisgICBUaGlzIGlzIG9ubHkgYWxsb3dlZCBiZWZvcmUgdXNlciBhdXRoZW50aWNhdGlvbgorCisgICAqY29udGV4dCogcGFyYW1ldGVyIGlzIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cworICAgYnVuZGxpbmcgU1NMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50bworICAgYSBzaW5nbGUgKHBvdGVudGlhbGx5IGxvbmctbGl2ZWQpIHN0cnVjdHVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogSW5zdGFuY2VzIG9mIDpjbGFzczpgUE9QM19TU0xgIGhhdmUgbm8gYWRkaXRpb25hbCBtZXRob2RzLiBUaGUgaW50ZXJmYWNlIG9mIHRoaXMKIHN1YmNsYXNzIGlzIGlkZW50aWNhbCB0byBpdHMgcGFyZW50LgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0IGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdAppbmRleCAzYTg2MzMxLi40NDdmOGY3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKQEAgLTE0LDggKzE0LDggQEAKIFB5dGhvbiBkYXRhIHN0cnVjdHVyZXMgaW4gYSBmb3JtIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlci4KIElmIHRoZSBmb3JtYXR0ZWQgc3RydWN0dXJlcyBpbmNsdWRlIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBmdW5kYW1lbnRhbCBQeXRob24KIHR5cGVzLCB0aGUgcmVwcmVzZW50YXRpb24gbWF5IG5vdCBiZSBsb2FkYWJsZS4gIFRoaXMgbWF5IGJlIHRoZSBjYXNlIGlmIG9iamVjdHMKLXN1Y2ggYXMgZmlsZXMsIHNvY2tldHMsIGNsYXNzZXMsIG9yIGluc3RhbmNlcyBhcmUgaW5jbHVkZWQsIGFzIHdlbGwgYXMgbWFueQotb3RoZXIgYnVpbHQtaW4gb2JqZWN0cyB3aGljaCBhcmUgbm90IHJlcHJlc2VudGFibGUgYXMgUHl0aG9uIGNvbnN0YW50cy4KK3N1Y2ggYXMgZmlsZXMsIHNvY2tldHMgb3IgY2xhc3NlcyBhcmUgaW5jbHVkZWQsIGFzIHdlbGwgYXMgbWFueSBvdGhlcgorb2JqZWN0cyB3aGljaCBhcmUgbm90IHJlcHJlc2VudGFibGUgYXMgUHl0aG9uIGxpdGVyYWxzLgogCiBUaGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIGtlZXBzIG9iamVjdHMgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBjYW4sIGFuZAogYnJlYWtzIHRoZW0gb250byBtdWx0aXBsZSBsaW5lcyBpZiB0aGV5IGRvbid0IGZpdCB3aXRoaW4gdGhlIGFsbG93ZWQgd2lkdGguCkBAIC0yOSwxNCArMjksMTQgQEAKIC4uIEZpcnN0IHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzczoKIAogCi0uLiBjbGFzczo6IFByZXR0eVByaW50ZXIoaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSkKKy4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgQ29uc3RydWN0IGEgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBpbnN0YW5jZS4gIFRoaXMgY29uc3RydWN0b3IgdW5kZXJzdGFuZHMKICAgIHNldmVyYWwga2V5d29yZCBwYXJhbWV0ZXJzLiAgQW4gb3V0cHV0IHN0cmVhbSBtYXkgYmUgc2V0IHVzaW5nIHRoZSAqc3RyZWFtKgogICAga2V5d29yZDsgdGhlIG9ubHkgbWV0aG9kIHVzZWQgb24gdGhlIHN0cmVhbSBvYmplY3QgaXMgdGhlIGZpbGUgcHJvdG9jb2wncwogICAgOm1ldGg6YHdyaXRlYCBtZXRob2QuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBhZG9wdHMKLSAgIGBgc3lzLnN0ZG91dGBgLiAgVGhyZWUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlCi0gICBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24uICBUaGUga2V5d29yZHMgYXJlICppbmRlbnQqLCAqZGVwdGgqLCBhbmQgKndpZHRoKi4gIFRoZQorICAgYGBzeXMuc3Rkb3V0YGAuICBUaGUKICAgIGFtb3VudCBvZiBpbmRlbnRhdGlvbiBhZGRlZCBmb3IgZWFjaCByZWN1cnNpdmUgbGV2ZWwgaXMgc3BlY2lmaWVkIGJ5ICppbmRlbnQqOwogICAgdGhlIGRlZmF1bHQgaXMgb25lLiAgT3RoZXIgdmFsdWVzIGNhbiBjYXVzZSBvdXRwdXQgdG8gbG9vayBhIGxpdHRsZSBvZGQsIGJ1dCBjYW4KICAgIG1ha2UgbmVzdGluZyBlYXNpZXIgdG8gc3BvdC4gIFRoZSBudW1iZXIgb2YgbGV2ZWxzIHdoaWNoIG1heSBiZSBwcmludGVkIGlzCkBAIC00NSw3ICs0NSwxMiBAQAogICAgdGhlIGRlcHRoIG9mIHRoZSBvYmplY3RzIGJlaW5nIGZvcm1hdHRlZC4gIFRoZSBkZXNpcmVkIG91dHB1dCB3aWR0aCBpcwogICAgY29uc3RyYWluZWQgdXNpbmcgdGhlICp3aWR0aCogcGFyYW1ldGVyOyB0aGUgZGVmYXVsdCBpcyA4MCBjaGFyYWN0ZXJzLiAgSWYgYQogICAgc3RydWN0dXJlIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2l0aGluIHRoZSBjb25zdHJhaW5lZCB3aWR0aCwgYSBiZXN0IGVmZm9ydCB3aWxsCi0gICBiZSBtYWRlLgorICAgYmUgbWFkZS4gIElmICpjb21wYWN0KiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpIGVhY2ggaXRlbSBvZiBhIGxvbmcgc2VxdWVuY2UKKyAgIHdpbGwgYmUgZm9ybWF0dGVkIG9uIGEgc2VwYXJhdGUgbGluZS4gIElmICpjb21wYWN0KiBpcyB0cnVlLCBhcyBtYW55IGl0ZW1zCisgICBhcyB3aWxsIGZpdCB3aXRoaW4gdGhlICp3aWR0aCogd2lsbCBiZSBmb3JtYXR0ZWQgb24gZWFjaCBvdXRwdXQgbGluZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAgICAgICA+Pj4gaW1wb3J0IHBwcmludAogICAgICAgPj4+IHN0dWZmID0gWydzcGFtJywgJ2VnZ3MnLCAnbHVtYmVyamFjaycsICdrbmlnaHRzJywgJ25pJ10KQEAgLTU4LDYgKzYzLDEyIEBACiAgICAgICAgICAgJ2x1bWJlcmphY2snLAogICAgICAgICAgICdrbmlnaHRzJywKICAgICAgICAgICAnbmknXQorICAgICAgPj4+IHBwID0gcHByaW50LlByZXR0eVByaW50ZXIod2lkdGg9NDEsIGNvbXBhY3Q9VHJ1ZSkKKyAgICAgID4+PiBwcC5wcHJpbnQoc3R1ZmYpCisgICAgICBbWydzcGFtJywgJ2VnZ3MnLCAnbHVtYmVyamFjaycsCisgICAgICAgICdrbmlnaHRzJywgJ25pJ10sCisgICAgICAgJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLAorICAgICAgICduaSddCiAgICAgICA+Pj4gdHVwID0gKCdzcGFtJywgKCdlZ2dzJywgKCdsdW1iZXJqYWNrJywgKCdrbmlnaHRzJywgKCduaScsICgnZGVhZCcsCiAgICAgICAuLi4gKCdwYXJyb3QnLCAoJ2ZyZXNoIGZydWl0JywpKSkpKSkpKQogICAgICAgPj4+IHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoZGVwdGg9NikKQEAgLTY1LDIzICs3NiwzMCBAQAogICAgICAgKCdzcGFtJywgKCdlZ2dzJywgKCdsdW1iZXJqYWNrJywgKCdrbmlnaHRzJywgKCduaScsICgnZGVhZCcsICguLi4pKSkpKSkpCiAKIAotVGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY2xhc3Mgc3VwcG9ydHMgc2V2ZXJhbCBkZXJpdmF0aXZlIGZ1bmN0aW9uczoKK1RoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHNldmVyYWwgc2hvcnRjdXQgZnVuY3Rpb25zOgogCi0uLiBmdW5jdGlvbjo6IHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpCisuLiBmdW5jdGlvbjo6IHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpCiAKLSAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosICp3aWR0aCoKLSAgIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGNvbnN0cnVjdG9yIGFzCi0gICBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICBSZXR1cm4gdGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqZWN0KiBhcyBhIHN0cmluZy4gICppbmRlbnQqLAorICAgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgCisgICBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogCi0uLiBmdW5jdGlvbjo6IHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpCisuLiBmdW5jdGlvbjo6IHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpCiAKICAgIFByaW50cyB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIG9uICpzdHJlYW0qLCBmb2xsb3dlZCBieSBhCiAgICBuZXdsaW5lLiAgSWYgKnN0cmVhbSogaXMgYGBOb25lYGAsIGBgc3lzLnN0ZG91dGBgIGlzIHVzZWQuICBUaGlzIG1heSBiZSB1c2VkCiAgICBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgaW5zdGVhZCBvZiB0aGUgOmZ1bmM6YHByaW50YCBmdW5jdGlvbiBmb3IKICAgIGluc3BlY3RpbmcgdmFsdWVzICh5b3UgY2FuIGV2ZW4gcmVhc3NpZ24gYGBwcmludCA9IHBwcmludC5wcHJpbnRgYCBmb3IgdXNlCi0gICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiBhbmQgKmRlcHRoKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKLSAgIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorICAgd2l0aGluIGEgc2NvcGUpLiAgKmluZGVudCosICp3aWR0aCosICpkZXB0aCogYW5kICpjb21wYWN0KiB3aWxsIGJlIHBhc3NlZAorICAgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtMTkzLDEwMSArMjExLDE0MSBAQAogLS0tLS0tLQogCiBUbyBkZW1vbnN0cmF0ZSBzZXZlcmFsIHVzZXMgb2YgdGhlIDpmdW5jOmBwcHJpbnRgIGZ1bmN0aW9uIGFuZCBpdHMgcGFyYW1ldGVycywKLWxldCdzIGZldGNoIGluZm9ybWF0aW9uIGFib3V0IGEgcHJvamVjdCBmcm9tIFB5UEk6OgorbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gYFB5UEkgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnPmBfOjoKIAogICAgPj4+IGltcG9ydCBqc29uCiAgICA+Pj4gaW1wb3J0IHBwcmludAogICAgPj4+IGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KLSAgID4+PiB3aXRoIHVybG9wZW4oJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvanNvbicpIGFzIHVybDoKKyAgID4+PiB3aXRoIHVybG9wZW4oJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkL2pzb24nKSBhcyB1cmw6CiAgICAuLi4gICAgIGh0dHBfaW5mbyA9IHVybC5pbmZvKCkKICAgIC4uLiAgICAgcmF3X2RhdGEgPSB1cmwucmVhZCgpLmRlY29kZShodHRwX2luZm8uZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQogICAgPj4+IHByb2plY3RfaW5mbyA9IGpzb24ubG9hZHMocmF3X2RhdGEpCi0gICA+Pj4gcmVzdWx0ID0geydoZWFkZXJzJzogaHR0cF9pbmZvLml0ZW1zKCksICdib2R5JzogcHJvamVjdF9pbmZvfQogCiBJbiBpdHMgYmFzaWMgZm9ybSwgOmZ1bmM6YHBwcmludGAgc2hvd3MgdGhlIHdob2xlIG9iamVjdDo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdCkKLSAgIHsnYm9keSc6IHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWydEZXZlbG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOYXR1cmFsIExhbmd1YWdlIDo6IEVuZ2xpc2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAotICAgICAgICAgICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9weTNrL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICdjb25maWdwYXJzZXIgaW5pIHBhcnNpbmcgY29uZiBjZmcgY29uZmlndXJhdGlvbiBmaWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAotICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdhbnknLAotICAgICAgICAgICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyLzMuMi4wcjMnLAotICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N1bW1hcnknOiAnVGhpcyBsaWJyYXJ5IGJyaW5ncyB0aGUgdXBkYXRlZCBjb25maWdwYXJzZXIgZnJvbSBQeXRob24gMy4yKyB0byBQeXRob24gMi42LTIuNy4nLAotICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogJzMuMi4wcjMnfSwKLSAgICAgICAgICAgJ3VybHMnOiBbeydjb21tZW50X3RleHQnOiAnJywKLSAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA0NywKLSAgICAgICAgICAgICAgICAgICAgICdmaWxlbmFtZSc6ICdjb25maWdwYXJzZXItMy4yLjByMy50YXIuZ3onLAotICAgICAgICAgICAgICAgICAgICAgJ2hhc19zaWcnOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzg1MDBmZDg3YzYxYWMwZGUzMjhmYzk5NmZjZTY5Yjk2JywKLSAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdzZGlzdCcsCi0gICAgICAgICAgICAgICAgICAgICAncHl0aG9uX3ZlcnNpb24nOiAnc291cmNlJywKLSAgICAgICAgICAgICAgICAgICAgICdzaXplJzogMzIyODEsCi0gICAgICAgICAgICAgICAgICAgICAndXBsb2FkX3RpbWUnOiAnMjAxMS0wNS0xMFQxNjoyODo1MCcsCi0gICAgICAgICAgICAgICAgICAgICAndXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2MvY29uZmlncGFyc2VyL2NvbmZpZ3BhcnNlci0zLjIuMHIzLnRhci5neid9XX0sCi0gICAnaGVhZGVycyc6IFsoJ0RhdGUnLCAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAgICAgICAgICAgICgnU2VydmVyJywgJ0FwYWNoZS8yLjIuMTYgKERlYmlhbiknKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnKSwKLSAgICAgICAgICAgICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICAgICAgICAgICAgKCdUcmFuc2Zlci1FbmNvZGluZycsICdjaHVua2VkJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV19CisgICA+Pj4gcHByaW50LnBwcmludChwcm9qZWN0X2luZm8pCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5J10sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsIGZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgbmV0d29yayBwcm9ncmFtbWluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXByb3RvY29sIGludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgZnJhbWV3b3JrIHdyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7J2NvbW1lbnRfdGV4dCc6ICcnLAorICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNzE4NDQsCisgICAgICAgICAgICAgICdmaWxlbmFtZSc6ICdUd2lzdGVkLTEyLjMuMC50YXIuYnoyJywKKyAgICAgICAgICAgICAgJ2hhc19zaWcnOiBGYWxzZSwKKyAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnNmUyODk4MjVmM2JmNTU5MWNmZDY3MDg3NGNjMDg2MmQnLAorICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnc2Rpc3QnLAorICAgICAgICAgICAgICAncHl0aG9uX3ZlcnNpb24nOiAnc291cmNlJywKKyAgICAgICAgICAgICAgJ3NpemUnOiAyNjE1NzMzLAorICAgICAgICAgICAgICAndXBsb2FkX3RpbWUnOiAnMjAxMi0xMi0yNlQxMjo0NzowMycsCisgICAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL1QvVHdpc3RlZC9Ud2lzdGVkLTEyLjMuMC50YXIuYnoyJ30sCisgICAgICAgICAgICAgeydjb21tZW50X3RleHQnOiAnJywKKyAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDUyMjQsCisgICAgICAgICAgICAgICdmaWxlbmFtZSc6ICdUd2lzdGVkLTEyLjMuMC53aW4zMi1weTIuNy5tc2knLAorICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAorICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc2Yjc3OGY1MjAxYjYyMmE1NTE5YTJhY2ExYTJmZTUxMicsCisgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdiZGlzdF9tc2knLAorICAgICAgICAgICAgICAncHl0aG9uX3ZlcnNpb24nOiAnMi43JywKKyAgICAgICAgICAgICAgJ3NpemUnOiAyOTE2MzUyLAorICAgICAgICAgICAgICAndXBsb2FkX3RpbWUnOiAnMjAxMi0xMi0yNlQxMjo0ODoxNScsCisgICAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvMi43L1QvVHdpc3RlZC9Ud2lzdGVkLTEyLjMuMC53aW4zMi1weTIuNy5tc2knfV19CiAKIFRoZSByZXN1bHQgY2FuIGJlIGxpbWl0ZWQgdG8gYSBjZXJ0YWluICpkZXB0aCogKGVsbGlwc2lzIGlzIHVzZWQgZm9yIGRlZXBlcgogY29udGVudHMpOjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0LCBkZXB0aD0zKQotICAgeydib2R5JzogeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKLSAgICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAotICAgICAgICAgICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9weTNrL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICdjb25maWdwYXJzZXIgaW5pIHBhcnNpbmcgY29uZiBjZmcgY29uZmlndXJhdGlvbiBmaWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAotICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdhbnknLAotICAgICAgICAgICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyLzMuMi4wcjMnLAotICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N1bW1hcnknOiAnVGhpcyBsaWJyYXJ5IGJyaW5ncyB0aGUgdXBkYXRlZCBjb25maWdwYXJzZXIgZnJvbSBQeXRob24gMy4yKyB0byBQeXRob24gMi42LTIuNy4nLAotICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogJzMuMi4wcjMnfSwKLSAgICAgICAgICAgJ3VybHMnOiBbey4uLn1dfSwKLSAgICdoZWFkZXJzJzogWygnRGF0ZScsICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICAgICAgICAgICAgKCdTZXJ2ZXInLCAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2lubGluZScpLAotICAgICAgICAgICAgICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgICAgICAgICAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywgJ2NodW5rZWQnKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXX0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbywgZGVwdGg9MikKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAorICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKKyAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKKyAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAorICAgICAgICAgICAgICdtYWludGFpbmVyJzogJycsCisgICAgICAgICAgICAgJ21haW50YWluZXJfZW1haWwnOiAnJywKKyAgICAgICAgICAgICAnbmFtZSc6ICdUd2lzdGVkJywKKyAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvMTIuMy4wJywKKyAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGZyYW1ld29yayB3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbey4uLn0sIHsuLi59XX0KIAotQWRkaXRpb25hbGx5LCBtYXhpbXVtICp3aWR0aCogY2FuIGJlIHN1Z2dlc3RlZC4gSWYgYSBsb25nIG9iamVjdCBjYW5ub3QgYmUKLXNwbGl0LCB0aGUgc3BlY2lmaWVkIHdpZHRoIHdpbGwgYmUgZXhjZWVkZWQ6OgorQWRkaXRpb25hbGx5LCBtYXhpbXVtIGNoYXJhY3RlciAqd2lkdGgqIGNhbiBiZSBzdWdnZXN0ZWQuIElmIGEgbG9uZyBvYmplY3QKK2Nhbm5vdCBiZSBzcGxpdCwgdGhlIHNwZWNpZmllZCB3aWR0aCB3aWxsIGJlIGV4Y2VlZGVkOjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0WydoZWFkZXJzJ10sIHdpZHRoPTMwKQotICAgWygnRGF0ZScsCi0gICAgICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICgnU2VydmVyJywKLSAgICAgJ0FwYWNoZS8yLjIuMTYgKERlYmlhbiknKSwKLSAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLAotICAgICAnaW5saW5lJyksCi0gICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgKCdUcmFuc2Zlci1FbmNvZGluZycsCi0gICAgICdjaHVua2VkJyksCi0gICAgKCdDb250ZW50LVR5cGUnLAotICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldCisgICA+Pj4gcHByaW50LnBwcmludChwcm9qZWN0X2luZm8sIGRlcHRoPTIsIHdpZHRoPTUwKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcmFtZXdvcmsgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uIHByb2dyYW1taW5nLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JrIHByb2dyYW1taW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIG11bHRpcHJvdG9jb2wgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAorICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKKyAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKKyAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAorICAgICAgICAgICAgICdtYWludGFpbmVyJzogJycsCisgICAgICAgICAgICAgJ21haW50YWluZXJfZW1haWwnOiAnJywKKyAgICAgICAgICAgICAnbmFtZSc6ICdUd2lzdGVkJywKKyAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvMTIuMy4wJywKKyAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29ya2luZyBmcmFtZXdvcmsgJworICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHR5LnJzdCBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKaW5kZXggMmI5Mzg1Yi4uOTBiYWVjNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHR5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9wdHkucnN0CkBAIC00NSw2ICs0NSw5IEBACiAgICBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIGRlZmF1bHRzIHRyeSB0byByZWFkIDEwMjQgYnl0ZXMgZWFjaCB0aW1lIHRoZXkgYXJlCiAgICBjYWxsZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6ZnVuYzpgc3Bhd25gIG5vdyByZXR1cm5zIHRoZSBzdGF0dXMgdmFsdWUgZnJvbSA6ZnVuYzpgb3Mud2FpdHBpZGAKKyAgICAgIG9uIHRoZSBjaGlsZCBwcm9jZXNzLgogCiBFeGFtcGxlCiAtLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdCBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CmluZGV4IDA3ZGRjMjUuLmJhZTg0NTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CkBAIC0yOCw3ICsyOCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSkKIAotICAgQ29tcGlsZSBhIHNvdXJjZSBmaWxlIHRvIGJ5dGUtY29kZSBhbmQgd3JpdGUgb3V0IHRoZSBieXRlLWNvZGUgY2FjaGUgIGZpbGUuCisgICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlLgogICAgVGhlIHNvdXJjZSBjb2RlIGlzIGxvYWRlZCBmcm9tIHRoZSBmaWxlIG5hbWUgKmZpbGUqLiAgVGhlICBieXRlLWNvZGUgaXMKICAgIHdyaXR0ZW4gdG8gKmNmaWxlKiwgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIDpQRVA6YDMxNDdgIHBhdGgsIGVuZGluZyBpbgogICAgYGAucHljYGAgKGBgLnB5b2BgIGlmIG9wdGltaXphdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjdXJyZW50IGludGVycHJldGVyKS4KQEAgLTQxLDYgKzQxLDEzIEBACiAgICBpcyByYWlzZWQuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBhdGggdG8gYnl0ZS1jb21waWxlZCBmaWxlLCBpLmUuCiAgICB3aGF0ZXZlciAqY2ZpbGUqIHZhbHVlIHdhcyB1c2VkLgogCisgICBJZiB0aGUgcGF0aCB0aGF0ICpjZmlsZSogYmVjb21lcyAoZWl0aGVyIGV4cGxpY2l0bHkgc3BlY2lmaWVkIG9yIGNvbXB1dGVkKQorICAgaXMgYSBzeW1saW5rIG9yIG5vbi1yZWd1bGFyIGZpbGUsIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisgICBUaGlzIGlzIHRvIGFjdCBhcyBhIHdhcm5pbmcgdGhhdCBpbXBvcnQgd2lsbCB0dXJuIHRob3NlIHBhdGhzIGludG8gcmVndWxhcgorICAgZmlsZXMgaWYgaXQgaXMgYWxsb3dlZCB0byB3cml0ZSBieXRlLWNvbXBpbGVkIGZpbGVzIHRvIHRob3NlIHBhdGhzLiBUaGlzIGlzCisgICBhIHNpZGUtZWZmZWN0IG9mIGltcG9ydCB1c2luZyBmaWxlIHJlbmFtaW5nIHRvIHBsYWNlIHRoZSBmaW5hbCBieXRlLWNvbXBpbGVkCisgICBmaWxlIGludG8gcGxhY2UgdG8gcHJldmVudCBjb25jdXJyZW50IGZpbGUgd3JpdGluZyBpc3N1ZXMuCisKICAgICpvcHRpbWl6ZSogY29udHJvbHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBhbmQgaXMgcGFzc2VkIHRvIHRoZSBidWlsdC1pbgogICAgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLiAgVGhlIGRlZmF1bHQgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbgogICAgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIuCkBAIC01MCw2ICs1NywxMyBAQAogICAgICAgZGVmYXVsdCB3YXMgKmZpbGUqICsgYGAnYydgYCAoYGAnbydgYCBpZiBvcHRpbWl6YXRpb24gd2FzIGVuYWJsZWQpLgogICAgICAgQWxzbyBhZGRlZCB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDaGFuZ2VkIGNvZGUgdG8gdXNlIDptb2Q6YGltcG9ydGxpYmAgZm9yIHRoZSBieXRlLWNvZGUgY2FjaGUgZmlsZSB3cml0aW5nLgorICAgICAgVGhpcyBtZWFucyBmaWxlIGNyZWF0aW9uL3dyaXRpbmcgc2VtYW50aWNzIG5vdyBtYXRjaCB3aGF0IDptb2Q6YGltcG9ydGxpYmAKKyAgICAgIGRvZXMsIGUuZy4gcGVybWlzc2lvbnMsIHdyaXRlLWFuZC1tb3ZlIHNlbWFudGljcywgZXRjLiBBbHNvIGFkZGVkIHRoZQorICAgICAgY2F2ZWF0IHRoYXQgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpcyByYWlzZWQgaWYgKmNmaWxlKiBpcyBhIHN5bWxpbmsgb3IKKyAgICAgIG5vbi1yZWd1bGFyIGZpbGUuCisKIAogLi4gZnVuY3Rpb246OiBtYWluKGFyZ3M9Tm9uZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdCBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKaW5kZXggYjY3ZmJmYy4uZjMwN2Q3ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CkBAIC0yNSw0ICsyNSwzIEBACiAgICBpbnNwZWN0LnJzdAogICAgc2l0ZS5yc3QKICAgIGZwZWN0bC5yc3QKLSAgIGRpc3R1dGlscy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCA3NjJjYTQ5Li5mYTZhOWNlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC00ODEsNyArNDgxLDcgQEAKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGUgY29tcGlsZWQgdmVyc2lvbnMgb2YgdGhlIG1vc3QgcmVjZW50IHBhdHRlcm5zIHBhc3NlZCB0bwotICAgICAgOmZ1bmM6YHJlLm1hdGNoYCwgOmZ1bmM6YHJlLnNlYXJjaGAgb3IgOmZ1bmM6YHJlLmNvbXBpbGVgIGFyZSBjYWNoZWQsIHNvCisgICAgICA6ZnVuYzpgcmUuY29tcGlsZWAgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgbWF0Y2hpbmcgZnVuY3Rpb25zIGFyZSBjYWNoZWQsIHNvCiAgICAgICBwcm9ncmFtcyB0aGF0IHVzZSBvbmx5IGEgZmV3IHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXQgYSB0aW1lIG5lZWRuJ3Qgd29ycnkKICAgICAgIGFib3V0IGNvbXBpbGluZyByZWd1bGFyIGV4cHJlc3Npb25zLgogCkBAIC01ODQsNiArNTg0LDE2IEBACiAgICBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBmdW5jdGlvbjo6IGZ1bGxtYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKnBhdHRlcm4qLCByZXR1cm4gYQorICAgY29ycmVzcG9uZGluZyA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUKKyAgIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYQorICAgemVyby1sZW5ndGggbWF0Y2guCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc3BsaXQocGF0dGVybiwgc3RyaW5nLCBtYXhzcGxpdD0wLCBmbGFncz0wKQogCiAgICBTcGxpdCAqc3RyaW5nKiBieSB0aGUgb2NjdXJyZW5jZXMgb2YgKnBhdHRlcm4qLiAgSWYgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZQpAQCAtNzU1LDcgKzc2NSw3IEBACiAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgiZCIpCiAgICA+Pj4gcGF0dGVybi5zZWFyY2goImRvZyIpICAgICAjIE1hdGNoIGF0IGluZGV4IDAKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdkJz4KICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIiwgMSkgICMgTm8gbWF0Y2g7IHNlYXJjaCBkb2Vzbid0IGluY2x1ZGUgdGhlICJkIgogCiAKQEAgLTc3MiwxMiArNzgyLDMwIEBACiAgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm8iKQogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIpICAgICAgIyBObyBtYXRjaCBhcyAibyIgaXMgbm90IGF0IHRoZSBzdGFydCBvZiAiZG9nIi4KICAgID4+PiBwYXR0ZXJuLm1hdGNoKCJkb2ciLCAxKSAgICMgTWF0Y2ggYXMgIm8iIGlzIHRoZSAybmQgY2hhcmFjdGVyIG9mICJkb2ciLgotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgxLCAyKSwgbWF0Y2g9J28nPgogCiAgICBJZiB5b3Ugd2FudCB0byBsb2NhdGUgYSBtYXRjaCBhbnl3aGVyZSBpbiAqc3RyaW5nKiwgdXNlCiAgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgaW5zdGVhZCAoc2VlIGFsc28gOnJlZjpgc2VhcmNoLXZzLW1hdGNoYCkuCiAKIAorLi4gbWV0aG9kOjogcmVnZXguZnVsbG1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKQorCisgICBJZiB0aGUgd2hvbGUgKnN0cmluZyogbWF0Y2hlcyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiwgcmV0dXJuIGEgY29ycmVzcG9uZGluZworICAgOnJlZjpgbWF0Y2ggb2JqZWN0IDxtYXRjaC1vYmplY3RzPmAuICBSZXR1cm4gYGBOb25lYGAgaWYgdGhlIHN0cmluZyBkb2VzIG5vdAorICAgbWF0Y2ggdGhlIHBhdHRlcm47IG5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgemVyby1sZW5ndGggbWF0Y2guCisKKyAgIFRoZSBvcHRpb25hbCAqcG9zKiBhbmQgKmVuZHBvcyogcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHRoZQorICAgOm1ldGg6YH5yZWdleC5zZWFyY2hgIG1ldGhvZC4KKworICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJvW2doXSIpCisgICA+Pj4gcGF0dGVybi5mdWxsbWF0Y2goImRvZyIpICAgICAgIyBObyBtYXRjaCBhcyAibyIgaXMgbm90IGF0IHRoZSBzdGFydCBvZiAiZG9nIi4KKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgib2dyZSIpICAgICAjIE5vIG1hdGNoIGFzIG5vdCB0aGUgZnVsbCBzdHJpbmcgbWF0Y2hlcy4KKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nZ2llIiwgMSwgMykgICAjIE1hdGNoZXMgd2l0aGluIGdpdmVuIGxpbWl0cy4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiByZWdleC5zcGxpdChzdHJpbmcsIG1heHNwbGl0PTApCiAKICAgIElkZW50aWNhbCB0byB0aGUgOmZ1bmM6YHNwbGl0YCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4uCkBAIC0xMTM5LDcgKzExNjcsNyBAQAogCiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goImMiLCAiYWJjZGVmIikgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgyLCAzKSwgbWF0Y2g9J2MnPgogCiBSZWd1bGFyIGV4cHJlc3Npb25zIGJlZ2lubmluZyB3aXRoIGBgJ14nYGAgY2FuIGJlIHVzZWQgd2l0aCA6ZnVuYzpgc2VhcmNoYCB0bwogcmVzdHJpY3QgdGhlIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZzo6CkBAIC0xMTQ3LDcgKzExNzUsNyBAQAogICAgPj4+IHJlLm1hdGNoKCJjIiwgImFiY2RlZiIpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCJeYyIsICJhYmNkZWYiKSAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCJeYSIsICJhYmNkZWYiKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2EnPgogCiBOb3RlIGhvd2V2ZXIgdGhhdCBpbiA6Y29uc3Q6YE1VTFRJTElORWAgbW9kZSA6ZnVuYzpgbWF0Y2hgIG9ubHkgbWF0Y2hlcyBhdCB0aGUKIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCB3aGVyZWFzIHVzaW5nIDpmdW5jOmBzZWFyY2hgIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24KQEAgLTExNTUsNyArMTE4Myw3IEBACiAKICAgID4+PiByZS5tYXRjaCgnWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgnXlgnLCAnQVxuQlxuWCcsIHJlLk1VTFRJTElORSkgICMgTWF0Y2gKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNCwgNSksIG1hdGNoPSdYJz4KIAogCiBNYWtpbmcgYSBQaG9uZWJvb2sKQEAgLTEyNzQsOSArMTMwMiw5IEBACiBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsOgogCiAgICA+Pj4gcmUubWF0Y2gociJcVyguKVwxXFciLCAiIGZmICIpCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDQpLCBtYXRjaD0nIGZmICc+CiAgICA+Pj4gcmUubWF0Y2goIlxcVyguKVxcMVxcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KIAogV2hlbiBvbmUgd2FudHMgdG8gbWF0Y2ggYSBsaXRlcmFsIGJhY2tzbGFzaCwgaXQgbXVzdCBiZSBlc2NhcGVkIGluIHRoZSByZWd1bGFyCiBleHByZXNzaW9uLiAgV2l0aCByYXcgc3RyaW5nIG5vdGF0aW9uLCB0aGlzIG1lYW5zIGBgciJcXCJgYC4gIFdpdGhvdXQgcmF3IHN0cmluZwpAQCAtMTI4NCw5ICsxMzEyLDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxcIiwgciJcXCIpCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nXFwnPgogICAgPj4+IHJlLm1hdGNoKCJcXFxcIiwgciJcXCIpCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nXFwnPgogCiAKIFdyaXRpbmcgYSBUb2tlbml6ZXIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdCBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAppbmRleCAxMTM0NjE5Li42OTIzMTBiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CkBAIC0xOTAsMjggKzE5MCwzMiBAQAogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIDptb2Q6YHJlYWRsaW5lYCBtb2R1bGUncwogaGlzdG9yeSByZWFkaW5nIGFuZCB3cml0aW5nIGZ1bmN0aW9ucyB0byBhdXRvbWF0aWNhbGx5IGxvYWQgYW5kIHNhdmUgYSBoaXN0b3J5Ci1maWxlIG5hbWVkIDpmaWxlOmAucHloaXN0YCBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBUaGUgY29kZSBiZWxvdyB3b3VsZAotbm9ybWFsbHkgYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgZnJvbSB0aGUgdXNlcidzCi06ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlLiA6OgorZmlsZSBuYW1lZCA6ZmlsZTpgLnB5dGhvbl9oaXN0b3J5YCBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBUaGUgY29kZQorYmVsb3cgd291bGQgbm9ybWFsbHkgYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgaW50ZXJhY3RpdmUgc2Vzc2lvbnMKK2Zyb20gdGhlIHVzZXIncyA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlLiA6OgogCisgICBpbXBvcnQgYXRleGl0CiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCByZWFkbGluZQotICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIucHloaXN0IikKKworICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIucHl0aG9uX2hpc3RvcnkiKQogICAgdHJ5OgogICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RmaWxlKQogICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgogICAgICAgIHBhc3MKLSAgIGltcG9ydCBhdGV4aXQKKwogICAgYXRleGl0LnJlZ2lzdGVyKHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSwgaGlzdGZpbGUpCi0gICBkZWwgb3MsIGhpc3RmaWxlCisKK1RoaXMgY29kZSBpcyBhY3R1YWxseSBhdXRvbWF0aWNhbGx5IHJ1biB3aGVuIFB5dGhvbiBpcyBydW4gaW4KKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gIChzZWUgOnJlZjpgcmxjb21wbGV0ZXItY29uZmlnYCkuCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBleHRlbmRzIHRoZSA6Y2xhc3M6YGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlYCBjbGFzcyB0bwogc3VwcG9ydCBoaXN0b3J5IHNhdmUvcmVzdG9yZS4gOjoKIAotICAgaW1wb3J0IGNvZGUKLSAgIGltcG9ydCByZWFkbGluZQogICAgaW1wb3J0IGF0ZXhpdAorICAgaW1wb3J0IGNvZGUKICAgIGltcG9ydCBvcworICAgaW1wb3J0IHJlYWRsaW5lCiAKICAgIGNsYXNzIEhpc3RvcnlDb25zb2xlKGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlKToKICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWxzPU5vbmUsIGZpbGVuYW1lPSI8Y29uc29sZT4iLApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0IGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CmluZGV4IGVkODU4NTAuLjliYjU4NDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKQEAgLTc0LDYgKzc0LDI3IEBACiAgICBgYHNldHJsaW1pdGBgIG1heSBhbHNvIHJhaXNlIDpleGM6YGVycm9yYCBpZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY2FsbAogICAgZmFpbHMuCiAKKy4uIGZ1bmN0aW9uOjogcHJsaW1pdChwaWQsIHJlc291cmNlWywgbGltaXRzXSkKKworICAgQ29tYmluZXMgOmZ1bmM6YHNldHJsaW1pdGAgYW5kIDpmdW5jOmBnZXRybGltaXRgIGluIG9uZSBmdW5jdGlvbiBhbmQKKyAgIHN1cHBvcnRzIHRvIGdldCBhbmQgc2V0IHRoZSByZXNvdXJjZXMgbGltaXRzIG9mIGFuIGFyYml0cmFyeSBwcm9jZXNzLiBJZgorICAgKnBpZCogaXMgMCwgdGhlbiB0aGUgY2FsbCBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuICpyZXNvdXJjZSogYW5kCisgICAqbGltaXRzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YHNldHJsaW1pdGAsIGV4Y2VwdCB0aGF0CisgICAqbGltaXRzKiBpcyBvcHRpb25hbC4KKworICAgV2hlbiAqbGltaXRzKiBpcyBub3QgZ2l2ZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlICpyZXNvdXJjZSogbGltaXQgb2YgdGhlCisgICBwcm9jZXNzICpwaWQqLiBXaGVuICpsaW1pdHMqIGlzIGdpdmVuIHRoZSAqcmVzb3VyY2UqIGxpbWl0IG9mIHRoZSBwcm9jZXNzIGlzCisgICBzZXQgYW5kIHRoZSBmb3JtZXIgcmVzb3VyY2UgbGltaXQgaXMgcmV0dXJuZWQuCisKKyAgIFJhaXNlcyA6ZXhjOmBQcm9jZXNzTG9va3VwRXJyb3JgIHdoZW4gKnBpZCogY2FuJ3QgYmUgZm91bmQgYW5kCisgICA6ZXhjOmBQZXJtaXNzaW9uRXJyb3JgIHdoZW4gdGhlIHVzZXIgZG9lc24ndCBoYXZlIGBgQ0FQX1NZU19SRVNPVVJDRWBgIGZvcgorICAgdGhlIHByb2Nlc3MuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjM2IG9yIGxhdGVyIHdpdGggZ2xpYmMgMi4xMyBvciBsYXRlcgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGVzZSBzeW1ib2xzIGRlZmluZSByZXNvdXJjZXMgd2hvc2UgY29uc3VtcHRpb24gY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdGhlCiA6ZnVuYzpgc2V0cmxpbWl0YCBhbmQgOmZ1bmM6YGdldHJsaW1pdGAgZnVuY3Rpb25zIGRlc2NyaWJlZCBiZWxvdy4gVGhlIHZhbHVlcyBvZgogdGhlc2Ugc3ltYm9scyBhcmUgZXhhY3RseSB0aGUgY29uc3RhbnRzIHVzZWQgYnkgQyBwcm9ncmFtcy4KQEAgLTE1MSw2ICsxNzIsNTIgQEAKICAgIFRoZSBtYXhpbXVtIGFyZWEgKGluIGJ5dGVzKSBvZiBhZGRyZXNzIHNwYWNlIHdoaWNoIG1heSBiZSB0YWtlbiBieSB0aGUgcHJvY2Vzcy4KIAogCisuLiBkYXRhOjogUkxJTUlUX01TR1FVRVVFCisKKyAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGZvciBQT1NJWCBtZXNzYWdlIHF1ZXVlcy4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuOCBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9OSUNFCisKKyAgIFRoZSBjZWlsaW5nIGZvciB0aGUgcHJvY2VzcydzIG5pY2UgbGV2ZWwgKGNhbGN1bGF0ZWQgYXMgMjAgLSBybGltX2N1cikuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjEyIG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1JUUFJJTworCisgICBUaGUgY2VpbGluZyBvZiB0aGUgcmVhbC10aW1lIHByaW9yaXR5LgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4xMiBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9SVFRJTUUKKworICAgVGhlIHRpbWUgbGltaXQgKGluIG1pY3Jvc2Vjb25kcykgb24gQ1BVIHRpbWUgdGhhdCBhIHByb2Nlc3MgY2FuIHNwZW5kCisgICB1bmRlciByZWFsLXRpbWUgc2NoZWR1bGluZyB3aXRob3V0IG1ha2luZyBhIGJsb2NraW5nIHN5c2NhbGwuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjI1IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1NJR1BFTkRJTkcKKworICAgVGhlIG51bWJlciBvZiBzaWduYWxzIHdoaWNoIHRoZSBwcm9jZXNzIG1heSBxdWV1ZS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuOCBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogUmVzb3VyY2UgVXNhZ2UKIC0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdCBiL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAppbmRleCA2MzMwODhkLi45ZWQwMWM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CkBAIC0yNywxOCArMjcsMTAgQEAKICAgIHJlYWRsaW5lLl9fbmFtZV9fICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoCiAgICA+Pj4gcmVhZGxpbmUuCiAKLVRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBQeXRob24ncyBpbnRlcmFjdGl2ZQotbW9kZS4gIEEgdXNlciBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gaGlzIG9yIGhlciBpbml0aWFsaXphdGlvbiBmaWxlCi0oaWRlbnRpZmllZCBieSB0aGUgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZW52aXJvbm1lbnQgdmFyaWFibGUpIHRvIGdldAotYXV0b21hdGljIDprYmQ6YFRhYmAgY29tcGxldGlvbjo6Ci0KLSAgIHRyeToKLSAgICAgICBpbXBvcnQgcmVhZGxpbmUKLSAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICBwcmludCgiTW9kdWxlIHJlYWRsaW5lIG5vdCBhdmFpbGFibGUuIikKLSAgIGVsc2U6Ci0gICAgICAgaW1wb3J0IHJsY29tcGxldGVyCi0gICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoInRhYjogY29tcGxldGUiKQorVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YC4gIFVubGVzcyBQeXRob24gaXMgcnVuIHdpdGggdGhlCis6b3B0aW9uOmAtU2Agb3B0aW9uLCB0aGUgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgYW5kIGNvbmZpZ3VyZWQKKyhzZWUgOnJlZjpgcmxjb21wbGV0ZXItY29uZmlnYCkuCiAKIE9uIHBsYXRmb3JtcyB3aXRob3V0IDptb2Q6YHJlYWRsaW5lYCwgdGhlIDpjbGFzczpgQ29tcGxldGVyYCBjbGFzcyBkZWZpbmVkIGJ5CiB0aGlzIG1vZHVsZSBjYW4gc3RpbGwgYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdCBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKaW5kZXggYjFmZDNhOC4uNTI0ZTQxMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CkBAIC0xNCw2ICsxNCwxNCBAQAogSXQgY2Fubm90IGJlIHVzZWQgb24gcmVndWxhciBmaWxlcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUgaGFzIGdyb3duIHNpbmNlCiBpdCB3YXMgbGFzdCByZWFkLgogCisuLiBub3RlOjoKKworICAgVGhlIDptb2Q6YHNlbGVjdG9yc2AgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PCisgICBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlIDptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZQorICAgZW5jb3VyYWdlZCB0byB1c2UgdGhlIDptb2Q6YHNlbGVjdG9yc2AgbW9kdWxlIGluc3RlYWQsIHVubGVzcyB0aGV5IHdhbnQKKyAgIHByZWNpc2UgY29udHJvbCBvdmVyIHRoZSBPUy1sZXZlbCBwcmltaXRpdmVzIHVzZWQuCisKKwogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmc6CiAKIApAQCAtMzcsOCArNDUsMTMgQEAKICAgIGluY3JlYXNlcyB0aGlzIHZhbHVlLCA6YzpmdW5jOmBkZXZwb2xsYCBtYXkgcmV0dXJuIGFuCiAgICBpbmNvbXBsZXRlIGxpc3Qgb2YgYWN0aXZlIGZpbGUgZGVzY3JpcHRvcnMuCiAKKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAuLiBmdW5jdGlvbjo6IGVwb2xsKHNpemVoaW50PS0xLCBmbGFncz0wKQogCiAgICAoT25seSBzdXBwb3J0ZWQgb24gTGludXggMi41LjQ0IGFuZCBuZXdlci4pIFJldHVybiBhbiBlZGdlIHBvbGxpbmcgb2JqZWN0LApAQCAtNDcsMTEgKzYwLDE3IEBACiAgICB0byA6Y29uc3Q6YEVQT0xMX0NMT0VYRUNgLCB3aGljaCBjYXVzZXMgdGhlIGVwb2xsIGRlc2NyaXB0b3IgdG8gYmUgY2xvc2VkCiAgICBhdXRvbWF0aWNhbGx5IHdoZW4gOmZ1bmM6YG9zLmV4ZWN2ZWAgaXMgY2FsbGVkLiBTZWUgc2VjdGlvbgogICAgOnJlZjpgZXBvbGwtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBlcG9sbGluZyBvYmplY3RzLgorICAgVGhleSBhbHNvIHN1cHBvcnQgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCiAKKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHRoZSAqZmxhZ3MqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwb2xsKCkKIApAQCAtNjYsNiArODUsMTEgQEAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBCU0QuKSAgUmV0dXJucyBhIGtlcm5lbCBxdWV1ZSBvYmplY3Q7IHNlZSBzZWN0aW9uCiAgICA6cmVmOmBrcXVldWUtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBrcXVldWUgb2JqZWN0cy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IGtldmVudChpZGVudCwgZmlsdGVyPUtRX0ZJTFRFUl9SRUFELCBmbGFncz1LUV9FVl9BREQsIGZmbGFncz0wLCBkYXRhPTAsIHVkYXRhPTApCiAKQEAgLTE0NCw2ICsxNjgsMjcgQEAKIG9iamVjdC4KIAogCisuLiBtZXRob2Q6OiBkZXZwb2xsLmNsb3NlKCkKKworICAgQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcG9sbGluZyBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGF0dHJpYnV0ZTo6IGRldnBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBwb2xsaW5nIG9iamVjdCBpcyBjbG9zZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG1ldGhvZDo6IGRldnBvbGwuZmlsZW5vKCkKKworICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogZGV2cG9sbC5yZWdpc3RlcihmZFssIGV2ZW50bWFza10pCiAKICAgIFJlZ2lzdGVyIGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggdGhlIHBvbGxpbmcgb2JqZWN0LiAgRnV0dXJlIGNhbGxzIHRvIHRoZQpAQCAtMjQxLDYgKzI4NiwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBlcG9sbCBvYmplY3QuCiAKIAorLi4gYXR0cmlidXRlOjogZXBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBlcG9sbCBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGVwb2xsLmZpbGVubygpCiAKICAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiB0aGUgY29udHJvbCBmZC4KQEAgLTM2MCw2ICs0MTAsMTEgQEAKICAgIENsb3NlIHRoZSBjb250cm9sIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUga3F1ZXVlIG9iamVjdC4KIAogCisuLiBhdHRyaWJ1dGU6OiBrcXVldWUuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBrcXVldWUgb2JqZWN0IGlzIGNsb3NlZC4KKworCiAuLiBtZXRob2Q6OiBrcXVldWUuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBjb250cm9sIGZkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdCBiL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjYTRkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QKQEAgLTAsMCArMSwyMzkgQEAKKzptb2Q6YHNlbGVjdG9yc2AgLS0gSGlnaC1sZXZlbCBJL08gbXVsdGlwbGV4aW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBzZWxlY3RvcnMKKyAgIDpzeW5vcHNpczogSGlnaC1sZXZlbCBJL08gbXVsdGlwbGV4aW5nLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCis6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLiBVc2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhpcyBtb2R1bGUKK2luc3RlYWQsIHVubGVzcyB0aGV5IHdhbnQgcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIE9TLWxldmVsIHByaW1pdGl2ZXMgdXNlZC4KKworSXQgZGVmaW5lcyBhIDpjbGFzczpgQmFzZVNlbGVjdG9yYCBhYnN0cmFjdCBiYXNlIGNsYXNzLCBhbG9uZyB3aXRoIHNldmVyYWwKK2NvbmNyZXRlIGltcGxlbWVudGF0aW9ucyAoOmNsYXNzOmBLcXVldWVTZWxlY3RvcmAsIDpjbGFzczpgRXBvbGxTZWxlY3RvcmAuLi4pLAordGhhdCBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBJL08gcmVhZGluZXNzIG5vdGlmaWNhdGlvbiBvbiBtdWx0aXBsZSBmaWxlCitvYmplY3RzLiBJbiB0aGUgZm9sbG93aW5nLCAiZmlsZSBvYmplY3QiIHJlZmVycyB0byBhbnkgb2JqZWN0IHdpdGggYQorOm1ldGg6YGZpbGVubygpYCBtZXRob2QsIG9yIGEgcmF3IGZpbGUgZGVzY3JpcHRvci4gU2VlIDp0ZXJtOmBmaWxlIG9iamVjdGAuCisKKzpjbGFzczpgRGVmYXVsdFNlbGVjdG9yYCBpcyBhbiBhbGlhcyB0byB0aGUgbW9zdCBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24KK2F2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybTogdGhpcyBzaG91bGQgYmUgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciBtb3N0Cit1c2Vycy4KKworLi4gbm90ZTo6CisgICBUaGUgdHlwZSBvZiBmaWxlIG9iamVjdHMgc3VwcG9ydGVkIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtOiBvbiBXaW5kb3dzLAorICAgc29ja2V0cyBhcmUgc3VwcG9ydGVkLCBidXQgbm90IHBpcGVzLCB3aGVyZWFzIG9uIFVuaXgsIGJvdGggYXJlIHN1cHBvcnRlZAorICAgKHNvbWUgb3RoZXIgdHlwZXMgbWF5IGJlIHN1cHBvcnRlZCBhcyB3ZWxsLCBzdWNoIGFzIGZpZm9zIG9yIHNwZWNpYWwgZmlsZQorICAgZGV2aWNlcykuCisKKy4uIHNlZWFsc286OgorCisgICA6bW9kOmBzZWxlY3RgCisgICAgICBMb3ctbGV2ZWwgSS9PIG11bHRpcGxleGluZyBtb2R1bGUuCisKKworQ2xhc3NlcworLS0tLS0tLQorCitDbGFzc2VzIGhpZXJhcmNoeTo6CisKKyAgIEJhc2VTZWxlY3RvcgorICAgKy0tIFNlbGVjdFNlbGVjdG9yCisgICArLS0gUG9sbFNlbGVjdG9yCisgICArLS0gRXBvbGxTZWxlY3RvcgorICAgKy0tIEtxdWV1ZVNlbGVjdG9yCisKKworSW4gdGhlIGZvbGxvd2luZywgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgaW5kaWNhdGluZyB3aGljaCBJL08gZXZlbnRzIHNob3VsZAorYmUgd2FpdGVkIGZvciBvbiBhIGdpdmVuIGZpbGUgb2JqZWN0LiBJdCBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzCitiZWxvdzoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBDb25zdGFudCAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA6Y29uc3Q6YEVWRU5UX1JFQURgICAgfCBBdmFpbGFibGUgZm9yIHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YEVWRU5UX1dSSVRFYCAgfCBBdmFpbGFibGUgZm9yIHdyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKy4uIGNsYXNzOjogU2VsZWN0b3JLZXkKKworICAgQSA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpcyBhIDpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIHVzZWQgdG8KKyAgIGFzc29jaWF0ZSBhIGZpbGUgb2JqZWN0IHRvIGl0cyB1bmRlcmx5aW5nIGZpbGUgZGVjcmlwdG9yLCBzZWxlY3RlZCBldmVudAorICAgbWFzayBhbmQgYXR0YWNoZWQgZGF0YS4gSXQgaXMgcmV0dXJuZWQgYnkgc2V2ZXJhbCA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAKKyAgIG1ldGhvZHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVvYmoKKworICAgICAgRmlsZSBvYmplY3QgcmVnaXN0ZXJlZC4KKworICAgLi4gYXR0cmlidXRlOjogZmQKKworICAgICAgVW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGV2ZW50cworCisgICAgICBFdmVudHMgdGhhdCBtdXN0IGJlIHdhaXRlZCBmb3Igb24gdGhpcyBmaWxlIG9iamVjdC4KKworICAgLi4gYXR0cmlidXRlOjogZGF0YQorCisgICAgICBPcHRpb25hbCBvcGFxdWUgZGF0YSBhc3NvY2lhdGVkIHRvIHRoaXMgZmlsZSBvYmplY3Q6IGZvciBleGFtcGxlLCB0aGlzCisgICAgICBjb3VsZCBiZSB1c2VkIHRvIHN0b3JlIGEgcGVyLWNsaWVudCBzZXNzaW9uIElELgorCisKKy4uIGNsYXNzOjogQmFzZVNlbGVjdG9yCisKKyAgIEEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGlzIHVzZWQgdG8gd2FpdCBmb3IgSS9PIGV2ZW50IHJlYWRpbmVzcyBvbiBtdWx0aXBsZQorICAgZmlsZSBvYmplY3RzLiBJdCBzdXBwb3J0cyBmaWxlIHN0cmVhbSByZWdpc3RyYXRpb24sIHVucmVnaXN0cmF0aW9uLCBhbmQgYQorICAgbWV0aG9kIHRvIHdhaXQgZm9yIEkvTyBldmVudHMgb24gdGhvc2Ugc3RyZWFtcywgd2l0aCBhbiBvcHRpb25hbCB0aW1lb3V0LgorICAgSXQncyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLCBzbyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLiBVc2UKKyAgIDpjbGFzczpgRGVmYXVsdFNlbGVjdG9yYCBpbnN0ZWFkLCBvciBvbmUgb2YgOmNsYXNzOmBTZWxlY3RTZWxlY3RvcmAsCisgICA6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCBldGMuIGlmIHlvdSB3YW50IHRvIHNwZWNpZmljYWxseSB1c2UgYW4KKyAgIGltcGxlbWVudGF0aW9uLCBhbmQgeW91ciBwbGF0Zm9ybSBzdXBwb3J0cyBpdC4KKyAgIDpjbGFzczpgQmFzZVNlbGVjdG9yYCBhbmQgaXRzIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IHRoZQorICAgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wuCisKKyAgIC4uIG1ldGhvZDo6IHJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKQorCisgICAgICBSZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZvciBzZWxlY3Rpb24sIG1vbml0b3JpbmcgaXQgZm9yIEkvTyBldmVudHMuCisKKyAgICAgICpmaWxlb2JqKiBpcyB0aGUgZmlsZSBvYmplY3QgdG8gbW9uaXRvci4KKyAgICAgICpldmVudHMqIGlzIGEgYml0d2lzZSBtYXNrIG9mIGV2ZW50cyB0byBtb25pdG9yLgorICAgICAgKmRhdGEqIGlzIGFuIG9wYXF1ZSBvYmplY3QuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSwgb3IgcmFpc2VzIGEKKyAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGluIGNhc2Ugb2YgaW52YWxpZCBldmVudCBtYXNrIG9yIGZpbGUgZGVzY3JpcHRvciwgb3IKKyAgICAgIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiB1bnJlZ2lzdGVyKGZpbGVvYmopCisKKyAgICAgIFVucmVnaXN0ZXIgYSBmaWxlIG9iamVjdCBmcm9tIHNlbGVjdGlvbiwgcmVtb3ZpbmcgaXQgZnJvbSBtb25pdG9yaW5nLiBBCisgICAgICBmaWxlIG9iamVjdCBzaGFsbCBiZSB1bnJlZ2lzdGVyZWQgcHJpb3IgdG8gYmVpbmcgY2xvc2VkLgorCisgICAgICAqZmlsZW9iaiogbXVzdCBiZSBhIGZpbGUgb2JqZWN0IHByZXZpb3VzbHkgcmVnaXN0ZXJlZC4KKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogbW9kaWZ5KGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKQorCisgICAgICBDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0J3MgbW9uaXRvcmVkIGV2ZW50cyBvciBhdHRhY2hlZCBkYXRhLgorCisgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm1ldGg6YEJhc2VTZWxlY3Rvci51bnJlZ2lzdGVyKGZpbGVvYmopYCBmb2xsb3dlZAorICAgICAgYnkgOm1ldGg6YEJhc2VTZWxlY3Rvci5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpYCwgZXhjZXB0IHRoYXQgaXQKKyAgICAgIGNhbiBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5LgorCisgICAgICBUaGlzIHJldHVybnMgYSBuZXcgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpbiBjYXNlIG9mIGludmFsaWQgZXZlbnQgbWFzayBvciBmaWxlIGRlc2NyaXB0b3IsIG9yCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBzZWxlY3QodGltZW91dD1Ob25lKQorCisgICAgICBXYWl0IHVudGlsIHNvbWUgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdHMgYmVjb21lIHJlYWR5LCBvciB0aGUgdGltZW91dAorICAgICAgZXhwaXJlcy4KKworICAgICAgSWYgYGB0aW1lb3V0ID4gMGBgLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluIHNlY29uZHMuCisgICAgICBJZiBgYHRpbWVvdXQgPD0gMGBgLCB0aGUgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwgcmVwb3J0IHRoZSBjdXJyZW50bHkKKyAgICAgIHJlYWR5IGZpbGUgb2JqZWN0cy4KKyAgICAgIElmICp0aW1lb3V0KiBpcyBgYE5vbmVgYCwgdGhlIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIG1vbml0b3JlZCBmaWxlIG9iamVjdAorICAgICAgYmVjb21lcyByZWFkeS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbGlzdCBvZiBgYChrZXksIGV2ZW50cylgYCB0dXBsZXMsIG9uZSBmb3IgZWFjaCByZWFkeSBmaWxlCisgICAgICBvYmplY3QuCisKKyAgICAgICprZXkqIGlzIHRoZSA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIGEgcmVhZHkgZmlsZQorICAgICAgb2JqZWN0LgorICAgICAgKmV2ZW50cyogaXMgYSBiaXRtYXNrIG9mIGV2ZW50cyByZWFkeSBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlIHRoZSBzZWxlY3Rvci4KKworICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgIFRoZSBzZWxlY3RvciBzaGFsbCBub3QgYmUgdXNlZCBvbmNlIGl0IGhhcyBiZWVuIGNsb3NlZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2tleShmaWxlb2JqKQorCisgICAgICBSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlCisgICAgICBvYmplY3QsIG9yIHJhaXNlcyA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfbWFwKCkKKworICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KKworICAgICAgVGhpcyByZXR1cm5zIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgIGluc3RhbmNlIG1hcHBpbmcKKyAgICAgIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIHRvIHRoZWlyIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAKKyAgICAgIGluc3RhbmNlLgorCisKKy4uIGNsYXNzOjogRGVmYXVsdFNlbGVjdG9yKCkKKworICAgVGhlIGRlZmF1bHQgc2VsZWN0b3IgY2xhc3MsIHVzaW5nIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorICAgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yCisgICBtb3N0IHVzZXJzLgorCisKKy4uIGNsYXNzOjogU2VsZWN0U2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBQb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogRXBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYCBvYmplY3QuCisKKworLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgIG9iamVjdC4KKworCitFeGFtcGxlcyBvZiBzZWxlY3RvciB1c2FnZTo6CisKKyAgID4+PiBpbXBvcnQgc2VsZWN0b3JzCisgICA+Pj4gaW1wb3J0IHNvY2tldAorICAgPj4+CisgICA+Pj4gcyA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorICAgPj4+IHIsIHcgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICA+Pj4KKyAgID4+PiBzLnJlZ2lzdGVyKHIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgU2VsZWN0b3JLZXkoZmlsZW9iaj08c29ja2V0LnNvY2tldCBmZD00LCBmYW1pbHk9MSwgdHlwZT0xLCBwcm90bz0wPiwgZmQ9NCwgZXZlbnRzPTEsIGRhdGE9Tm9uZSkKKyAgID4+PiBzLnJlZ2lzdGVyKHcsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgIFNlbGVjdG9yS2V5KGZpbGVvYmo9PHNvY2tldC5zb2NrZXQgZmQ9NSwgZmFtaWx5PTEsIHR5cGU9MSwgcHJvdG89MD4sIGZkPTUsIGV2ZW50cz0yLCBkYXRhPU5vbmUpCisgICA+Pj4KKyAgID4+PiBwcmludChzLnNlbGVjdCgpKQorICAgWyhTZWxlY3RvcktleShmaWxlb2JqPTxzb2NrZXQuc29ja2V0IGZkPTUsIGZhbWlseT0xLCB0eXBlPTEsIHByb3RvPTA+LCBmZD01LCBldmVudHM9MiwgZGF0YT1Ob25lKSwgMildCisgICA+Pj4KKyAgID4+PiBmb3Iga2V5LCBldmVudHMgaW4gcy5zZWxlY3QoKToKKyAgIC4uLiAgICAgaWYgZXZlbnRzICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFOgorICAgLi4uICAgICAgICAga2V5LmZpbGVvYmouc2VuZChiJ3NwYW0nKQorICAgLi4uCisgICA0CisgICA+Pj4gZm9yIGtleSwgZXZlbnRzIGluIHMuc2VsZWN0KCk6CisgICAuLi4gICAgIGlmIGV2ZW50cyAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEOgorICAgLi4uICAgICAgICAgcHJpbnQoa2V5LmZpbGVvYmoucmVjdigxMDI0KSkKKyAgIC4uLgorICAgYidzcGFtJworICAgPj4+IHMuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdCBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKaW5kZXggMDQ4ZjgwYS4uNGJhOWRkYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CkBAIC00NCw4ICs0NCwxMSBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIERvIG5vdCByZWx5IG9uIHRoZSBzaGVsZiBiZWluZyBjbG9zZWQgYXV0b21hdGljYWxseTsgYWx3YXlzIGNhbGwKLSAgICAgIDptZXRoOmBjbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvciB1c2UgYQotICAgICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aXRoIDpmdW5jOmBjb250ZXh0bGliLmNsb3NpbmdgLgorICAgICAgOm1ldGg6YH5TaGVsZi5jbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvcgorICAgICAgdXNlIDpmdW5jOmBzaGVsdmUub3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgICAgICAgd2l0aCBzaGVsdmUub3Blbignc3BhbScpIGFzIGRiOgorICAgICAgICAgICAgICBkYlsnZWdncyddID0gJ2VnZ3MnCiAKIC4uIHdhcm5pbmc6OgogCkBAIC0xMTgsMTAgKzEyMSwxNSBAQAogICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyIGlzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGVuY29kZSBrZXlzIGJlZm9yZSB0aGV5CiAgICBhcmUgdXNlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIGRpY3QuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KKyAgIDpjbGFzczpgU2hlbGZgIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KICAgICAgIFVURi04LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKIAogLi4gY2xhc3M6OiBCc2REYlNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYTE0NTdkMC4uZTRmMzQ4YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAqZHN0KiBhbmQgcmV0dXJuICpkc3QqLiAgKnNyYyogYW5kICpkc3QqIGFyZSBwYXRoIG5hbWVzIGdpdmVuIGFzIHN0cmluZ3MuCiAgICAqZHN0KiBtdXN0IGJlIHRoZSBjb21wbGV0ZSB0YXJnZXQgZmlsZSBuYW1lOyBsb29rIGF0IDpmdW5jOmBzaHV0aWwuY29weWAKICAgIGZvciBhIGNvcHkgdGhhdCBhY2NlcHRzIGEgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoLiAgSWYgKnNyYyogYW5kICpkc3QqCi0gICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YEVycm9yYCBpcyByYWlzZWQuCisgICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YFNhbWVGaWxlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIG11c3QgYmUgd3JpdGFibGU7IG90aGVyd2lzZSwgYW4gOmV4YzpgT1NFcnJvcmAKICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gSWYgKmRzdCogYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQuCkBAIC02OSw2ICs2OSwxOSBAQAogICAgICAgQWRkZWQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnQuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJhaXNlIDpleGM6YFNhbWVGaWxlRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgRXJyb3JgLiAgU2luY2UgdGhlIGZvcm1lciBpcworICAgICAgYSBzdWJjbGFzcyBvZiB0aGUgbGF0dGVyLCB0aGlzIGNoYW5nZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgorCisKKy4uIGV4Y2VwdGlvbjo6IFNhbWVGaWxlRXJyb3IKKworICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW4gOmZ1bmM6YGNvcHlmaWxlYAorICAgYXJlIHRoZSBzYW1lIGZpbGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCiAgICBDb3B5IHRoZSBwZXJtaXNzaW9uIGJpdHMgZnJvbSAqc3JjKiB0byAqZHN0Ki4gIFRoZSBmaWxlIGNvbnRlbnRzLCBvd25lciwgYW5kCkBAIC0zODAsMTEgKzM5MywxMCBAQAogICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQotICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6Ci0gICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCi0gICAgICAgICAgIHBhc3MKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6Ci0gICAgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCisgICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCisgICAgICAgICAgIGlmIHdoeS53aW5lcnJvciBpcyBOb25lOgorICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICAgICBpZiBlcnJvcnM6CiAgICAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdAppbmRleCAzNmI4MGMzLi5kOTNlOTM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaXRlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdApAQCAtMzgsNiArMzgsOSBAQAogaWYgaXQgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIGlmIHNvLCBhZGRzIGl0IHRvIGBgc3lzLnBhdGhgYCBhbmQKIGFsc28gaW5zcGVjdHMgdGhlIG5ld2x5IGFkZGVkIHBhdGggZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIHRoZSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB3aWxsIGJlIHJlbW92ZWQgaW4gMy41LgorCiBJZiBhIGZpbGUgbmFtZWQgInB5dmVudi5jZmciIGV4aXN0cyBvbmUgZGlyZWN0b3J5IGFib3ZlIHN5cy5leGVjdXRhYmxlLAogc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IGFyZSBzZXQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kCiBpdCBpcyBhbHNvIGNoZWNrZWQgZm9yIHNpdGUtcGFja2FnZXMgYW5kIHNpdGUtcHl0aG9uIChzeXMuYmFzZV9wcmVmaXggYW5kCkBAIC0xMTEsNiArMTE0LDIzIEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCBhbmQgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgaXMgc3RpbGwgYXR0ZW1wdGVkLgogCiAKKy4uIF9ybGNvbXBsZXRlci1jb25maWc6CisKK1JlYWRsaW5lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gaW1wb3J0IGFuZAorY29uZmlndXJlIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCBpZiBQeXRob24gaXMgc3RhcnRlZCBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgYW5kIHdpdGhvdXQgdGhlIDpvcHRpb246YC1TYCBvcHRpb24uCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbmFibGUgdGFiLWNvbXBsZXRpb24gYW5kIHRvIHVzZQorOmZpbGU6YH4vLnB5dGhvbl9oaXN0b3J5YCBhcyB0aGUgaGlzdG9yeSBzYXZlIGZpbGUuICBUbyBkaXNhYmxlIGl0LCBvdmVycmlkZQordGhlIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgYXR0cmlidXRlIGluIHlvdXIgOm1vZDpgc2l0ZWN1c3RvbWl6ZWAKK29yIDptb2Q6YHVzZXJjdXN0b21pemVgIG1vZHVsZSBvciB5b3VyIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuCisKKworTW9kdWxlIGNvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKwogLi4gZGF0YTo6IFBSRUZJWEVTCiAKICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlcyBkaXJlY3Rvcmllcy4KQEAgLTE1Myw4ICsxNzMsNyBAQAogCiAgICBBZGRzIGFsbCB0aGUgc3RhbmRhcmQgc2l0ZS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgbW9kdWxlIHNlYXJjaAogICAgcGF0aC4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGlzIG1vZHVsZSBpcyBpbXBvcnRlZCwKLSAgIHVubGVzcyB0aGUgOnByb2dyYW06YHB5dGhvbmAgaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgCi0gICBmbGFnLgorICAgdW5sZXNzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgIGZsYWcuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYmUgY2FsbGVkIHVuY29uZGl0aW9ubmFsbHkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKaW5kZXggZjMwNTgxOC4uM2ViZWQwNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdApAQCAtMjcsNyArMjcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyKQorLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUFNlcnZlcmAgb2JqZWN0LCB3aGljaCBiaW5kcyB0byBsb2NhbCBhZGRyZXNzCiAgICAqbG9jYWxhZGRyKi4gIEl0IHdpbGwgdHJlYXQgKnJlbW90ZWFkZHIqIGFzIGFuIHVwc3RyZWFtIFNNVFAgcmVsYXllci4gIEl0CkBAIC0zOCw2ICszOSw4IEBACiAgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCiAgICBsaW1pdC4KIAorICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgLi4gbWV0aG9kOjogcHJvY2Vzc19tZXNzYWdlKHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKQogCiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBleGNlcHRpb24uIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0bwpAQCAtNTMsNiArNTYsOSBAQAogICAgICAgT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvIHVzZSBhIGN1c3RvbSA6Y2xhc3M6YFNNVFBDaGFubmVsYCBmb3IKICAgICAgIG1hbmFnaW5nIFNNVFAgY2xpZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqbWFwKiBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogRGVidWdnaW5nU2VydmVyIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MCwxMSArOTYsMjAgQEAKIFNNVFBDaGFubmVsIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIpCisuLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpKQogCiAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTTVRQQ2hhbm5lbGAgb2JqZWN0IHdoaWNoIG1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24KICAgIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgYSBzaW5nbGUgU01UUCBjbGllbnQuCiAKKyAgICpjb25uKiBhbmQgKmFkZHIqIGFyZSBhcyBwZXIgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cuCisKKyAgICpkYXRhX3NpemVfbGltaXQqIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlCisgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCisgICBsaW1pdC4KKworICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgVG8gdXNlIGEgY3VzdG9tIFNNVFBDaGFubmVsIGltcGxlbWVudGF0aW9uIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZQogICAgOmF0dHI6YFNNVFBTZXJ2ZXIuY2hhbm5lbF9jbGFzc2Agb2YgeW91ciA6Y2xhc3M6YFNNVFBTZXJ2ZXJgLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CmluZGV4IGFkZGM2YmUuLmE3ZDE1MzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CkBAIC0xMTAsOCArMTEwLDggQEAKIAogLi4gZXhjZXB0aW9uOjogU01UUEV4Y2VwdGlvbgogCi0gICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzCi0gICBtb2R1bGUuCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCB0aGF0IGlzIHRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsCisgICB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KIAogCiAuLiBleGNlcHRpb246OiBTTVRQU2VydmVyRGlzY29ubmVjdGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0IGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAppbmRleCBhYTE4YWU0Li5iMDEyMzhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKQEAgLTEwNyw4ICsxMDcsOCBAQAogCiAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCi0tIENlcnRhaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcyAoOmNvbnN0OmBBRl9CTFVFVE9PVEhgLCA6Y29uc3Q6YEFGX1BBQ0tFVGApCi0gIHN1cHBvcnQgc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zLgorLSBDZXJ0YWluIG90aGVyIGFkZHJlc3MgZmFtaWxpZXMgKDpjb25zdDpgQUZfQkxVRVRPT1RIYCwgOmNvbnN0OmBBRl9QQUNLRVRgLAorICA6Y29uc3Q6YEFGX0NBTmApIHN1cHBvcnQgc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zLgogCiAgIC4uIFhYWCBkb2N1bWVudCB0aGVtIQogCkBAIC0yNTcsNiArMjU3LDE2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBkYXRhOjogQ0FOX0JDTQorICAgICAgICAgIENBTl9CQ01fKgorCisgICBDQU5fQkNNLCBpbiB0aGUgQ0FOIHByb3RvY29sIGZhbWlseSwgaXMgdGhlIGJyb2FkY2FzdCBtYW5hZ2VyIChCQ00pIHByb3RvY29sLgorICAgQnJvYWRjYXN0IG1hbmFnZXIgY29uc3RhbnRzLCBkb2N1bWVudGVkIGluIHRoZSBMaW51eCBkb2N1bWVudGF0aW9uLCBhcmUgYWxzbworICAgZGVmaW5lZCBpbiB0aGUgc29ja2V0IG1vZHVsZS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCA+PSAyLjYuMjUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogQUZfUkRTCiAgICAgICAgICAgUEZfUkRTCkBAIC0yODMsNiArMjkzLDExIEBACiAgICBUSVBDIHJlbGF0ZWQgY29uc3RhbnRzLCBtYXRjaGluZyB0aGUgb25lcyBleHBvcnRlZCBieSB0aGUgQyBzb2NrZXQgQVBJLiBTZWUKICAgIHRoZSBUSVBDIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKKy4uIGRhdGE6OiBBRl9MSU5LCisKKyAgQXZhaWxhYmlsaXR5OiBCU0QsIE9TWC4KKworICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IGhhc19pcHY2CiAKQEAgLTQ0NSwyMCArNDYwLDI5IEBACiAgICBgYCd1ZHAnYGAsIG90aGVyd2lzZSBhbnkgcHJvdG9jb2wgd2lsbCBtYXRjaC4KIAogCi0uLiBmdW5jdGlvbjo6IHNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQorLi4gZnVuY3Rpb246OiBzb2NrZXQoZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKQogCiAgICBDcmVhdGUgYSBuZXcgc29ja2V0IHVzaW5nIHRoZSBnaXZlbiBhZGRyZXNzIGZhbWlseSwgc29ja2V0IHR5cGUgYW5kIHByb3RvY29sCiAgICBudW1iZXIuICBUaGUgYWRkcmVzcyBmYW1pbHkgc2hvdWxkIGJlIDpjb25zdDpgQUZfSU5FVGAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgQUZfSU5FVDZgLCA6Y29uc3Q6YEFGX1VOSVhgLCA6Y29uc3Q6YEFGX0NBTmAgb3IgOmNvbnN0OmBBRl9SRFNgLiBUaGUKICAgIHNvY2tldCB0eXBlIHNob3VsZCBiZSA6Y29uc3Q6YFNPQ0tfU1RSRUFNYCAodGhlIGRlZmF1bHQpLAogICAgOmNvbnN0OmBTT0NLX0RHUkFNYCwgOmNvbnN0OmBTT0NLX1JBV2Agb3IgcGVyaGFwcyBvbmUgb2YgdGhlIG90aGVyIGBgU09DS19gYAotICAgY29uc3RhbnRzLiBUaGUgcHJvdG9jb2wgbnVtYmVyIGlzIHVzdWFsbHkgemVybyBhbmQgbWF5IGJlIG9taXR0ZWQgaW4gdGhhdAotICAgY2FzZSBvciA6Y29uc3Q6YENBTl9SQVdgIGluIGNhc2UgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYC4KKyAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIG9yIGluIHRoZQorICAgY2FzZSB3aGVyZSB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgOmNvbnN0OmBBRl9DQU5gIHRoZSBwcm90b2NvbCBzaG91bGQgYmUgb25lCisgICBvZiA6Y29uc3Q6YENBTl9SQVdgIG9yIDpjb25zdDpgQ0FOX0JDTWAuCisKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgQUZfQ0FOIGZhbWlseSB3YXMgYWRkZWQuCiAgICAgICBUaGUgQUZfUkRTIGZhbWlseSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgVGhlIENBTl9CQ00gcHJvdG9jb2wgd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogc29ja2V0cGFpcihbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQogCkBAIC00NjgsMTIgKzQ5MiwxNyBAQAogICAgaWYgZGVmaW5lZCBvbiB0aGUgcGxhdGZvcm07IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBBRl9JTkVUYC4KICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0cyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSB3aG9sZSBzb2NrZXQgQVBJLCByYXRoZXIKICAgICAgIHRoYW4gYSBzdWJzZXQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0cyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KIAotLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkKKworLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG89MCkKIAogICAgRHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoYW4gaW50ZWdlciBhcyByZXR1cm5lZCBieSBhIGZpbGUgb2JqZWN0J3MKICAgIDptZXRoOmBmaWxlbm9gIG1ldGhvZCkgYW5kIGJ1aWxkIGEgc29ja2V0IG9iamVjdCBmcm9tIHRoZSByZXN1bHQuICBBZGRyZXNzCkBAIC00ODQsNiArNTEzLDExIEBACiAgICBhIHNvY2tldCBwYXNzZWQgdG8gYSBwcm9ncmFtIGFzIHN0YW5kYXJkIGlucHV0IG9yIG91dHB1dCAoc3VjaCBhcyBhIHNlcnZlcgogICAgc3RhcnRlZCBieSB0aGUgVW5peCBpbmV0IGRhZW1vbikuICBUaGUgc29ja2V0IGlzIGFzc3VtZWQgdG8gYmUgaW4gYmxvY2tpbmcgbW9kZS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG50b2hsKHgpCiAKQEAgLTU2MCw3ICs1OTQsNyBAQAogICAgYm90aCB0aGUgdmFsdWUgb2YgKmFkZHJlc3NfZmFtaWx5KiBhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YKICAgIDpjOmZ1bmM6YGluZXRfcHRvbmAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLgorICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcyksIFdpbmRvd3MuCiAKIAogLi4gZnVuY3Rpb246OiBpbmV0X250b3AoYWRkcmVzc19mYW1pbHksIHBhY2tlZF9pcCkKQEAgLTU3Niw3ICs2MTAsNyBAQAogICAgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5LCA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIEEKICAgIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZCBmb3IgZXJyb3JzIGZyb20gdGhlIGNhbGwgdG8gOmZ1bmM6YGluZXRfbnRvcGAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLgorICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcyksIFdpbmRvd3MuCiAKIAogLi4KQEAgLTcxMiw2ICs3NDYsMTEgQEAKICAgICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kCiAgICAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5iaW5kKGFkZHJlc3MpCiAKQEAgLTc1Nyw2ICs3OTYsMTYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKKy4uIG1ldGhvZDo6IHNvY2tldC5kdXAoKQorCisgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuICBUaGlzIGlzIHVzZWZ1bCB3aXRoCkBAIC03NjcsNiArODE2LDE1IEBACiAgICB0aGlzIGxpbWl0YXRpb24uCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmdldF9pbmhlcml0YWJsZSgpCisKKyAgIEdldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiB0aGUgc29ja2V0J3MgZmlsZQorICAgZGVzY3JpcHRvciBvciBzb2NrZXQncyBoYW5kbGU6IGBgVHJ1ZWBgIGlmIHRoZSBzb2NrZXQgY2FuIGJlIGluaGVyaXRlZCBpbgorICAgY2hpbGQgcHJvY2Vzc2VzLCBgYEZhbHNlYGAgaWYgaXQgY2Fubm90LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0cGVlcm5hbWUoKQogCiAgICBSZXR1cm4gdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLiAgVGhpcyBpcyB1c2VmdWwgdG8KQEAgLTEwNTAsNiArMTEwOCwxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTMzMSw3ICsxMzk3LDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Nwd2QucnN0IGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKaW5kZXggYWRkNjExZi4uNThiZTc4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKQEAgLTE5LDkgKzE5LDkgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IEluZGV4IHwgQXR0cmlidXRlICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT0rPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgMCAgICAgfCBgYHNwX25hbWBgICAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAgICAgIHwgYGBzcF9uYW1wYGAgICB8IExvZ2luIG5hbWUgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgMSAgICAgfCBgYHNwX3B3ZGBgICAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8Cit8IDEgICAgIHwgYGBzcF9wd2RwYGAgICB8IEVuY3J5cHRlZCBwYXNzd29yZCAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgMiAgICAgfCBgYHNwX2xzdGNoZ2BgIHwgRGF0ZSBvZiBsYXN0IGNoYW5nZSAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMzYsMTUgKzM2LDE1IEBACiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA2ICAgICB8IGBgc3BfaW5hY3RgYCAgfCBOdW1iZXIgb2YgZGF5cyBhZnRlciBwYXNzd29yZCAgIHwKIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzICAgICAgICB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IGJsb2NrZWQgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDcgICAgIHwgYGBzcF9leHBpcmVgYCB8IE51bWJlciBvZiBkYXlzIHNpbmNlIDE5NzAtMDEtMDEgfAotfCAgICAgICB8ICAgICAgICAgICAgICAgfCB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkICAgICAgIHwKK3wgICAgICAgfCAgICAgICAgICAgICAgIHwgd2hlbiBhY2NvdW50IGV4cGlyZXMgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA4ICAgICB8IGBgc3BfZmxhZ2BgICAgfCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLVRoZSBzcF9uYW0gYW5kIHNwX3B3ZCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCitUaGUgc3BfbmFtcCBhbmQgc3BfcHdkcCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCiA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBlbnRyeSBhc2tlZCBmb3IgY2Fubm90IGJlIGZvdW5kLgogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggMGRjOGI4OS4uYmI0YWFiNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKQogCiAgICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlCiAgICBgYCI6bWVtb3J5OiJgYCB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpbiBSQU0KQEAgLTE5NSw2ICsxOTUsMTggQEAKICAgIGZvciB0aGUgY29ubmVjdGlvbiwgeW91IGNhbiBzZXQgdGhlICpjYWNoZWRfc3RhdGVtZW50cyogcGFyYW1ldGVyLiBUaGUgY3VycmVudGx5CiAgICBpbXBsZW1lbnRlZCBkZWZhdWx0IGlzIHRvIGNhY2hlIDEwMCBzdGF0ZW1lbnRzLgogCisgICBJZiAqdXJpKiBpcyB0cnVlLCAqZGF0YWJhc2UqIGlzIGludGVycHJldGVkIGFzIGEgVVJJLiBUaGlzIGFsbG93cyB5b3UKKyAgIHRvIHNwZWNpZnkgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBkYXRhYmFzZSBpbiByZWFkLW9ubHkgbW9kZQorICAgeW91IGNhbiB1c2U6OgorCisgICAgICAgZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIHJlY29nbml6ZWQgb3B0aW9ucywgY2FuCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cDovL3d3dy5zcWxpdGUub3JnL3VyaS5odG1sPmBfLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICp1cmkqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2NvbnZlcnRlcih0eXBlbmFtZSwgY2FsbGFibGUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGIxMzg2MWQuLmYxNGVmMDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogICAgRG9uJ3QgdXNlIHRoaXMgbW9kdWxlIHdpdGhvdXQgcmVhZGluZyB0aGUgOnJlZjpgc3NsLXNlY3VyaXR5YC4gIERvaW5nIHNvCkBAIC0xODMsMTQgKzE4NCwxNiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjEqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICBubworICAgICAgICAqVExTdjEuMiogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcworICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09CiAKICAgIC4uIG5vdGU6OgogCkBAIC0yMjQsNiArMjI3LDQ1IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjaXBoZXJzKi4KIAorCitDb250ZXh0IGNyZWF0aW9uCiteXl5eXl5eXl5eXl5eXl5eCisKK0EgY29udmVuaWVuY2UgZnVuY3Rpb24gaGVscHMgY3JlYXRlIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBmb3IgY29tbW9uCitwdXJwb3Nlcy4KKworLi4gZnVuY3Rpb246OiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncyBmb3IKKyAgIHRoZSBnaXZlbiAqcHVycG9zZSouICBUaGUgc2V0dGluZ3MgYXJlIGNob3NlbiBieSB0aGUgOm1vZDpgc3NsYCBtb2R1bGUsCisgICBhbmQgdXN1YWxseSByZXByZXNlbnQgYSBoaWdoZXIgc2VjdXJpdHkgbGV2ZWwgdGhhbiB3aGVuIGNhbGxpbmcgdGhlCisgICA6Y2xhc3M6YFNTTENvbnRleHRgIGNvbnN0cnVjdG9yIGRpcmVjdGx5LgorCisgICAqY2FmaWxlKiwgKmNhcGF0aCosICpjYWRhdGEqIHJlcHJlc2VudCBvcHRpb25hbCBDQSBjZXJ0aWZpY2F0ZXMgdG8KKyAgIHRydXN0IGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24sIGFzIGluCisgICA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLiAgSWYgYWxsIHRocmVlIGFyZQorICAgOmNvbnN0OmBOb25lYCwgdGhpcyBmdW5jdGlvbiBjYW4gY2hvb3NlIHRvIHRydXN0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0CisgICBDQSBjZXJ0aWZpY2F0ZXMgaW5zdGVhZC4KKworICAgVGhlIHNldHRpbmdzIGluIFB5dGhvbiAzLjQgYXJlOiA6ZGF0YTpgUFJPVE9DT0xfVExTdjFgIHdpdGggaGlnaCBlbmNyeXB0aW9uCisgICBjaXBoZXIgc3VpdGVzIHdpdGhvdXQgUkM0IGFuZCB3aXRob3V0IHVuYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzLgorICAgUGFzc2luZyA6ZGF0YTpgflB1cnBvc2UuU0VSVkVSX0FVVEhgIGFzICpwdXJwb3NlKiBzZXRzCisgICA6ZGF0YTpgflNTTENvbnRleHQudmVyaWZ5X21vZGVgIHRvIDpkYXRhOmBDRVJUX1JFUVVJUkVEYCBhbmQgZWl0aGVyCisgICBsb2FkcyBDQSBjZXJ0aWZpY2F0ZXMgKHdoZW4gYXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqLCAqY2FwYXRoKiBvciAqY2FkYXRhKgorICAgaXMgZ2l2ZW4pIG9yIHVzZXMgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYCB0byBsb2FkIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcy4KKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgcHJvdG9jb2wsIG9wdGlvbnMsIGNpcGhlciBhbmQgb3RoZXIgc2V0dGluZ3MgbWF5IGNoYW5nZSB0byBtb3JlCisgICAgICByZXN0cmljdGl2ZSB2YWx1ZXMgYW55dGltZSB3aXRob3V0IHByaW9yIGRlcHJlY2F0aW9uLiAgVGhlIHZhbHVlcworICAgICAgcmVwcmVzZW50IGEgZmFpciBiYWxhbmNlIGJldHdlZW4gY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuCisKKyAgICAgIElmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgc3BlY2lmaWMgc2V0dGluZ3MsIHlvdSBzaG91bGQgY3JlYXRlIGEKKyAgICAgIDpjbGFzczpgU1NMQ29udGV4dGAgYW5kIGFwcGx5IHRoZSBzZXR0aW5ncyB5b3Vyc2VsZi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogUmFuZG9tIGdlbmVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTM1Myw2ICszOTUsNjEgQEAKICAgIEdpdmVuIGEgY2VydGlmaWNhdGUgYXMgYW4gQVNDSUkgUEVNIHN0cmluZywgcmV0dXJucyBhIERFUi1lbmNvZGVkIHNlcXVlbmNlIG9mCiAgICBieXRlcyBmb3IgdGhhdCBzYW1lIGNlcnRpZmljYXRlLgogCisuLiBmdW5jdGlvbjo6IGdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgIFJldHVybnMgYSBuYW1lZCB0dXBsZSB3aXRoIHBhdGhzIHRvIE9wZW5TU0wncyBkZWZhdWx0IGNhZmlsZSBhbmQgY2FwYXRoLgorICAgVGhlIHBhdGhzIGFyZSB0aGUgc2FtZSBhcyB1c2VkIGJ5CisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEKKyAgIDp0ZXJtOmBuYW1lZCB0dXBsZWAgYGBEZWZhdWx0VmVyaWZ5UGF0aHNgYDoKKworICAgKiA6YXR0cjpgY2FmaWxlYCAtIHJlc29sdmVkIHBhdGggdG8gY2FmaWxlIG9yIE5vbmUgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwKKyAgICogOmF0dHI6YGNhcGF0aGAgLSByZXNvbHZlZCBwYXRoIHRvIGNhcGF0aCBvciBOb25lIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FmaWxlLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYWZpbGVgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FmaWxlLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhfZW52YCAtIE9wZW5TU0wncyBlbnZpcm9ubWVudCBrZXkgdGhhdCBwb2ludHMgdG8gYSBjYXBhdGgsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhcGF0aGAgLSBoYXJkIGNvZGVkIHBhdGggdG8gYSBjYXBhdGggZGlyZWN0b3J5CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpCisKKyAgIFJldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIHN5c3RlbSBjZXJ0IHN0b3JlLiAqc3RvcmVfbmFtZSogbWF5IGJlCisgICBvbmUgb2YgYGBDQWBgLCBgYFJPT1RgYCBvciBgYE1ZYGAuIFdpbmRvd3MgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBjZXJ0CisgICBzdG9yZXMsIHRvby4KKworICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChjZXJ0X2J5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLgorICAgVGhlIGVuY29kaW5nX3R5cGUgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyBvZiBjZXJ0X2J5dGVzLiBJdCBpcyBlaXRoZXIKKyAgIDpjb25zdDpgeDUwOV9hc25gIGZvciBYLjUwOSBBU04uMSBkYXRhIG9yIDpjb25zdDpgcGtjc183X2FzbmAgZm9yCisgICBQS0NTIzcgQVNOLjEgZGF0YS4gVHJ1c3Qgc3BlY2lmaWVzIHRoZSBwdXJwb3NlIG9mIHRoZSBjZXJ0aWZpY2F0ZSBhcyBhIHNldAorICAgb2YgT0lEUyBvciBleGFjdGx5IGBgVHJ1ZWBgIGlmIHRoZSBjZXJ0aWZpY2F0ZSBpcyB0cnVzdHdvcnRoeSBmb3IgYWxsCisgICBwdXJwb3Nlcy4KKworICAgRXhhbXBsZTo6CisKKyAgICAgID4+PiBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMoIkNBIikKKyAgICAgIFsoYidkYXRhLi4uJywgJ3g1MDlfYXNuJywgeycxLjMuNi4xLjUuNS43LjMuMScsICcxLjMuNi4xLjUuNS43LjMuMid9KSwKKyAgICAgICAoYidkYXRhLi4uJywgJ3g1MDlfYXNuJywgVHJ1ZSldCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogZW51bV9jcmxzKHN0b3JlX25hbWUpCisKKyAgIFJldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBzeXN0ZW0gY2VydCBzdG9yZS4gKnN0b3JlX25hbWUqIG1heSBiZQorICAgb25lIG9mIGBgQ0FgYCwgYGBST09UYGAgb3IgYGBNWWBgLiBXaW5kb3dzIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgY2VydAorICAgc3RvcmVzLCB0b28uCisKKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoY2VydF9ieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4KKyAgIFRoZSBlbmNvZGluZ190eXBlIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgb2YgY2VydF9ieXRlcy4gSXQgaXMgZWl0aGVyCisgICA6Y29uc3Q6YHg1MDlfYXNuYCBmb3IgWC41MDkgQVNOLjEgZGF0YSBvciA6Y29uc3Q6YHBrY3NfN19hc25gIGZvcgorICAgUEtDUyM3IEFTTi4xIGRhdGEuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogQ29uc3RhbnRzCiBeXl5eXl5eXl4KIApAQCAtMzg5LDYgKzQ4NiwzOCBAQAogICAgYmUgcGFzc2VkLCBlaXRoZXIgdG8gOm1ldGg6YFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCBvciBhcyBhCiAgICB2YWx1ZSBvZiB0aGUgYGBjYV9jZXJ0c2BgIHBhcmFtZXRlciB0byA6ZnVuYzpgd3JhcF9zb2NrZXRgLgogCisuLiBkYXRhOjogVkVSSUZZX0RFRkFVTFQKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwKKyAgIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgKENSTHMpIGFyZSBub3QgY2hlY2tlZC4gQnkgZGVmYXVsdCBPcGVuU1NMCisgICBkb2VzIG5laXRoZXIgcmVxdWlyZSBub3IgdmVyaWZ5IENSTHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX0NSTF9DSEVDS19MRUFGCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIG9ubHkgdGhlCisgICBwZWVyIGNlcnQgaXMgY2hlY2sgYnV0IG5vbiBvZiB0aGUgaW50ZXJtZWRpYXRlIENBIGNlcnRpZmljYXRlcy4gVGhlIG1vZGUKKyAgIHJlcXVpcmVzIGEgdmFsaWQgQ1JMIHRoYXQgaXMgc2lnbmVkIGJ5IHRoZSBwZWVyIGNlcnQncyBpc3N1ZXIgKGl0cyBkaXJlY3QKKyAgIGFuY2VzdG9yIENBKS4gSWYgbm8gcHJvcGVyIGhhcyBiZWVuIGxvYWRlZAorICAgOmF0dHI6YFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCwgdmFsaWRhdGlvbiB3aWxsIGZhaWwuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX0NSTF9DSEVDS19DSEFJTgorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLCBDUkxzIG9mCisgICBhbGwgY2VydGlmaWNhdGVzIGluIHRoZSBwZWVyIGNlcnQgY2hhaW4gYXJlIGNoZWNrZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX1g1MDlfU1RSSUNUCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgIHRvIGRpc2FibGUgd29ya2Fyb3VuZHMKKyAgIGZvciBicm9rZW4gWC41MDkgY2VydGlmaWNhdGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyCiAKICAgIFNlbGVjdHMgU1NMIHZlcnNpb24gMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgpAQCAtNDE0LDkgKzU0MywyNSBAQAogCiAuLiBkYXRhOjogUFJPVE9DT0xfVExTdjEKIAotICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuICBUaGlzIGlzIHRoZSBtb3N0CisgICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEuMCBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgorCisuLiBkYXRhOjogUFJPVE9DT0xfVExTdjFfMQorCisKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4xIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisgICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUFJPVE9DT0xfVExTdjFfMgorCisKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4yIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuIFRoaXMgaXMgdGhlIG1vc3QKICAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKICAgIHNpZGVzIGNhbiBzcGVhayBpdC4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBPUF9BTEwKIApAQCAtNDUwLDYgKzU5NSwyMiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorLi4gZGF0YTo6IE9QX05PX1RMU3YxXzEKKworICAgUHJldmVudHMgYSBUTFN2MS4xIGNvbm5lY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbiBjb25qdW5jdGlvbgorICAgd2l0aCA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AuIEl0IHByZXZlbnRzIHRoZSBwZWVycyBmcm9tIGNob29zaW5nIFRMU3YxLjEgYXMKKyAgIHRoZSBwcm90b2NvbCB2ZXJzaW9uLiBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMgorCisgICBQcmV2ZW50cyBhIFRMU3YxLjIgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMiBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGRhdGE6OiBPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UKIAogICAgVXNlIHRoZSBzZXJ2ZXIncyBjaXBoZXIgb3JkZXJpbmcgcHJlZmVyZW5jZSwgcmF0aGVyIHRoYW4gdGhlIGNsaWVudCdzLgpAQCAtNTQ2LDYgKzcwNywzNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorLi4gZGF0YTo6IEFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFCisgICAgICAgICAgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1IKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl8qCisKKyAgIEFsZXJ0IERlc2NyaXB0aW9ucyBmcm9tIDpyZmM6YDUyNDZgIGFuZCBvdGhlcnMuIFRoZSBgSUFOQSBUTFMgQWxlcnQgUmVnaXN0cnkKKyAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbCN0bHMtcGFyYW1ldGVycy02PmBfCisgICBjb250YWlucyB0aGlzIGxpc3QgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFJGQ3Mgd2hlcmUgdGhlaXIgbWVhbmluZyBpcyBkZWZpbmVkLgorCisgICBVc2VkIGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGluCisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUHVycG9zZS5TRVJWRVJfQVVUSAorCisgICBPcHRpb24gZm9yIDpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBhbmQKKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c2AuICBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZQorICAgY29udGV4dCBtYXkgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgV2ViIHNlcnZlcnMgKHRoZXJlZm9yZSwgaXQgd2lsbAorICAgYmUgdXNlZCB0byBjcmVhdGUgY2xpZW50LXNpZGUgc29ja2V0cykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUHVycG9zZS5DTElFTlRfQVVUSAorCisgICBPcHRpb24gZm9yIDpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBhbmQKKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c2AuICBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZQorICAgY29udGV4dCBtYXkgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgV2ViIGNsaWVudHMgKHRoZXJlZm9yZSwgaXQgd2lsbAorICAgYmUgdXNlZCB0byBjcmVhdGUgc2VydmVyLXNpZGUgc29ja2V0cykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIFNTTCBTb2NrZXRzCiAtLS0tLS0tLS0tLQpAQCAtNTg0LDcgKzc3Niw4IEBACiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLAotICAgcmV0dXJucyBgYE5vbmVgYC4KKyAgIHJldHVybiBgYE5vbmVgYC4gIElmIHRoZSBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUgeWV0LCByYWlzZQorICAgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgIElmIHRoZSBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgLCBhbmQgYSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGluc3RhbmNlLiAgSWYgdGhlCkBAIC02NDEsNiArODM0LDEzIEBACiAgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIGl0ZW1zIHN1Y2ggYXMgYGBpc3N1ZXJgYAogICAgICAgYW5kIGBgbm90QmVmb3JlYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgd2hlbiB0aGUgaGFuZHNoYWtlIGlzbid0IGRvbmUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIFg1MDl2MyBleHRlbnNpb24gaXRlbXMKKyAgICAgIHN1Y2ggYXMgYGBjcmxEaXN0cmlidXRpb25Qb2ludHNgYCwgYGBjYUlzc3VlcnNgYCBhbmQgYGBPQ1NQYGAgVVJJcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC03MTEsMTEgKzkxMSwzMCBAQAogCiAgICBDcmVhdGUgYSBuZXcgU1NMIGNvbnRleHQuICBZb3UgbXVzdCBwYXNzICpwcm90b2NvbCogd2hpY2ggbXVzdCBiZSBvbmUKICAgIG9mIHRoZSBgYFBST1RPQ09MXypgYCBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KLSAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIHJlY29tbWVuZGVkIGZvciBtYXhpbXVtIGludGVyb3BlcmFiaWxpdHkuCisgICA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCBpcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIG1heGltdW0KKyAgIGludGVyb3BlcmFiaWxpdHkuCisKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGxldHMgdGhlIDptb2Q6YHNzbGAgbW9kdWxlIGNob29zZQorICAgICAgc2VjdXJpdHkgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHVycG9zZS4KIAogCiA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisKKyAgIEdldCBzdGF0aXN0aWNzIGFib3V0IHF1YW50aXRpZXMgb2YgbG9hZGVkIFguNTA5IGNlcnRpZmljYXRlcywgY291bnQgb2YKKyAgIFguNTA5IGNlcnRpZmljYXRlcyBmbGFnZ2VkIGFzIENBIGNlcnRpZmljYXRlcyBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbgorICAgbGlzdHMgYXMgZGljdGlvbmFyeS4KKworICAgRXhhbXBsZSBmb3IgYSBjb250ZXh0IHdpdGggb25lIENBIGNlcnQgYW5kIG9uZSBvdGhlciBjZXJ0OjoKKworICAgICAgPj4+IGNvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisgICAgICB7J2NybCc6IDAsICd4NTA5X2NhJzogMSwgJ3g1MDknOiAyfQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lLCBwYXNzd29yZD1Ob25lKQogCiAgICBMb2FkIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlcnRpZmljYXRlLiAgVGhlICpjZXJ0ZmlsZSoKQEAgLTc0NiwxMiArOTY1LDMyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpwYXNzd29yZCouCiAKLS4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCkKKworICAgTG9hZCBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbQorICAgZGVmYXVsdCBsb2NhdGlvbnMuIE9uIFdpbmRvd3MgaXQgbG9hZHMgQ0EgY2VydHMgZnJvbSB0aGUgYGBDQWBgIGFuZAorICAgYGBST09UYGAgc3lzdGVtIHN0b3Jlcy4gT24gb3RoZXIgc3lzdGVtcyBpdCBjYWxscworICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gSW4gdGhlIGZ1dHVyZSB0aGUgbWV0aG9kIG1heQorICAgbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHRvby4KKworICAgVGhlICpwdXJwb3NlKiBmbGFnIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgQ0EgY2VydGlmaWNhdGVzIGFyZSBsb2FkZWQuIFRoZQorICAgZGVmYXVsdCBzZXR0aW5ncyA6ZGF0YTpgUHVycG9zZS5TRVJWRVJfQVVUSGAgbG9hZHMgY2VydGlmaWNhdGVzLCB0aGF0IGFyZQorICAgZmxhZ2dlZCBhbmQgdHJ1c3RlZCBmb3IgVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGNsaWVudCBzaWRlCisgICBzb2NrZXRzKS4gOmRhdGE6YFB1cnBvc2UuQ0xJRU5UX0FVVEhgIGxvYWRzIENBIGNlcnRpZmljYXRlcyBmb3IgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb24gdGhlIHNlcnZlciBzaWRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKIAogICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKICAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KICAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgogCisgICBUaGlzIG1ldGhvZCBjYW4gYWxzbyBsb2FkIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgaW4gUEVNIG9yCisgICBvciBERVIgZm9ybWF0LiBJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBDUkxzLCA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgCisgICBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKICAgIFRoZSAqY2FmaWxlKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBvZiBjb25jYXRlbmF0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhcnJhbmdlIHRoZQpAQCAtNzYyLDYgKzEwMDEsMjUgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKyAgIFRoZSAqY2FkYXRhKiBvYmplY3QsIGlmIHByZXNlbnQsIGlzIGVpdGhlciBhbiBBU0NJSSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKKyAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBvciBhIGJ5dGVzLWxpa2Ugb2JqZWN0IG9mIERFUi1lbmNvZGVkCisgICBjZXJ0aWZpY2F0ZXMuIExpa2Ugd2l0aCAqY2FwYXRoKiBleHRyYSBsaW5lcyBhcm91bmQgUEVNLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcyBhcmUgaWdub3JlZCBidXQgYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlIG11c3QgYmUgcHJlc2VudC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2FkYXRhKgorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkKKworICAgR2V0IGEgbGlzdCBvZiBsb2FkZWQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcy4gSWYgdGhlCisgICBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgIGVhY2ggbGlzdAorICAgZW50cnkgaXMgYSBkaWN0IGxpa2UgdGhlIG91dHB1dCBvZiA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YC4gT3RoZXJ3aXNlCisgICB0aGUgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIERFUi1lbmNvZGVkIGNlcnRpZmljYXRlcy4gVGhlIHJldHVybmVkIGxpc3QKKyAgIGRvZXMgbm90IGNvbnRhaW4gY2VydGlmaWNhdGVzIGZyb20gKmNhcGF0aCogdW5sZXNzIGEgY2VydGlmaWNhdGUgd2FzCisgICByZXF1ZXN0ZWQgYW5kIGxvYWRlZCBieSBhIFNTTCBjb25uZWN0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQogCiAgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCkBAIC03OTksNiArMTA1Nyw1NiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJfbmFtZV9jYWxsYmFjaykKKworICAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBUTFMgQ2xpZW50IEhlbGxvCisgICBoYW5kc2hha2UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgU1NML1RMUyBzZXJ2ZXIgd2hlbiB0aGUgVExTIGNsaWVudAorICAgc3BlY2lmaWVzIGEgc2VydmVyIG5hbWUgaW5kaWNhdGlvbi4gVGhlIHNlcnZlciBuYW1lIGluZGljYXRpb24gbWVjaGFuaXNtCisgICBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgNjA2NmAgc2VjdGlvbiAzIC0gU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4KKworICAgT25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIHNldCBwZXIgYGBTU0xDb250ZXh0YGAuICBJZiAqc2VydmVyX25hbWVfY2FsbGJhY2sqCisgICBpcyBgYE5vbmVgYCB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGEKKyAgIHN1YnNlcXVlbnQgdGltZSB3aWxsIGRpc2FibGUgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KKworICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCAqc2VydmVyX25hbWVfY2FsbGJhY2sqLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRocmVlCisgICBhcmd1bWVudHM7IHRoZSBmaXJzdCBiZWluZyB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgdGhlIHNlY29uZCBpcyBhIHN0cmluZworICAgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJ2ZXIgbmFtZSB0aGF0IHRoZSBjbGllbnQgaXMgaW50ZW5kaW5nIHRvIGNvbW11bmljYXRlCisgICAob3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgVExTIENsaWVudCBIZWxsbyBkb2VzIG5vdCBjb250YWluIGEgc2VydmVyIG5hbWUpCisgICBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFNTTENvbnRleHRgLiBUaGUgc2VydmVyIG5hbWUKKyAgIGFyZ3VtZW50IGlzIHRoZSBJRE5BIGRlY29kZWQgc2VydmVyIG5hbWUuCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBjYWxsYmFjayBpcyB0byBjaGFuZ2UgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAncworICAgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YCBhdHRyaWJ1dGUgdG8gYSBuZXcgb2JqZWN0IG9mIHR5cGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgcmVwcmVzZW50aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4gdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIKKyAgIG5hbWUuCisKKyAgIER1ZSB0byB0aGUgZWFybHkgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIFRMUyBjb25uZWN0aW9uLCBvbmx5IGxpbWl0ZWQKKyAgIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHVzYWJsZSBsaWtlCisgICA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCisgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCisgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CisgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKKyAgIHdpbGwgbm90IGNvbnRhaW4gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzIG5vciBjYW4gdGhleSBiZSBjYWxsZWQgc2FmZWx5LgorCisgICBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYCB0byBhbGxvdyB0aGUKKyAgIFRMUyBuZWdvdGlhdGlvbiB0byBjb250aW51ZS4gIElmIGEgVExTIGZhaWx1cmUgaXMgcmVxdWlyZWQsIGEgY29uc3RhbnQKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fKiA8QUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1I+YCBjYW4gYmUKKyAgIHJldHVybmVkLiAgT3RoZXIgcmV0dXJuIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBhIFRMUyBmYXRhbCBlcnJvciB3aXRoCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYC4KKworICAgSWYgdGhlcmUgaXMgYSBJRE5BIGRlY29kaW5nIGVycm9yIG9uIHRoZSBzZXJ2ZXIgbmFtZSwgdGhlIFRMUyBjb25uZWN0aW9uCisgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgIGZhdGFsIFRMUworICAgYWxlcnQgbWVzc2FnZSB0byB0aGUgY2xpZW50LgorCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGZyb20gdGhlICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayogZnVuY3Rpb24gdGhlIFRMUworICAgY29ubmVjdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmF0YWwgVExTIGFsZXJ0IG1lc3NhZ2UKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVgLgorCisgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSBPcGVuU1NMIGxpYnJhcnkKKyAgIGhhZCBPUEVOU1NMX05PX1RMU0VYVCBkZWZpbmVkIHdoZW4gaXQgd2FzIGJ1aWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcyhkaGZpbGUpCiAKICAgIExvYWQgdGhlIGtleSBnZW5lcmF0aW9uIHBhcmFtZXRlcnMgZm9yIERpZmZpZS1IZWxtYW4gKERIKSBrZXkgZXhjaGFuZ2UuCkBAIC04NjIsNiArMTE3MCwxOCBAQAogICAgICAgPj4+IHN0YXRzWydoaXRzJ10sIHN0YXRzWydtaXNzZXMnXQogICAgICAgKDAsIDApCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlCisgICBvcHRpb25hbCBhcmd1bWVudCBpcyB0cnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EKKyAgIGNlcnRpZmljYXRlLgorCisgICAuLiBub3RlOjoKKyAgICAgIENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlCisgICAgICBiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQub3B0aW9ucwogCiAgICBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIFNTTCBvcHRpb25zIGVuYWJsZWQgb24gdGhpcyBjb250ZXh0LgpAQCAtODc4LDYgKzExOTgsMTUgQEAKICAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIGNob3NlbiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgY29udGV4dC4gIFRoaXMgYXR0cmlidXRlCiAgICBpcyByZWFkLW9ubHkuCiAKKy4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzCisKKyAgIFRoZSBmbGFncyBmb3IgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbnMuIFlvdSBjYW4gc2V0IGZsYWdzIGxpa2UKKyAgIDpkYXRhOmBWRVJJRllfQ1JMX0NIRUNLX0xFQUZgIGJ5IE9SaW5nIHRoZW0gdG9nZXRoZXIuIEJ5IGRlZmF1bHQgT3BlblNTTAorICAgZG9lcyBuZWl0aGVyIHJlcXVpcmUgbm9yIHZlcmlmeSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkxzKS4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDAuOS44Ky4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQudmVyaWZ5X21vZGUKIAogICAgV2hldGhlciB0byB0cnkgdG8gdmVyaWZ5IG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgYW5kIGhvdyB0byBiZWhhdmUKQEAgLTEzNDMsMyArMTY3MiwxMiBAQAogCiAgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCiAgICAgICAgQmxha2UtV2lsc29uIGV0LiBhbC4KKworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MjQ2PmBfCisgICAgICAgVC4gRGllcmtzIGV0LiBhbC4KKworICAgYFJGQyA2MDY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNjA2Nj5gXworICAgICAgIEQuIEVhc3RsYWtlCisKKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sPmBfCisgICAgICAgSUFOQQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCA2YzIwYWEyLi4yNDc2OWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiw3ICs2LDggQEAKICAgICAgICAgICAgICAgb3MubHN0YXQoKSBhbmQgb3MuZnN0YXQoKS4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBhdXRvbWF0cml4LmNvbT4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAorICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUsNiArMTYsOSBAQAogZXhpc3QpLiAgRm9yIGNvbXBsZXRlIGRldGFpbHMgYWJvdXQgdGhlIDpjOmZ1bmM6YHN0YXRgLCA6YzpmdW5jOmBmc3RhdGAgYW5kCiA6YzpmdW5jOmBsc3RhdGAgY2FsbHMsIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgc3lzdGVtLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHN0YXQgbW9kdWxlIGlzIGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24uCisKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKIApAQCAtNTMsNiArNTcsMjQgQEAKIAogICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBzb2NrZXQuCiAKKy4uIGZ1bmN0aW9uOjogU19JU0RPT1IobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBkb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTUE9SVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTV0hUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUd28gYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIG1vcmUgZ2VuZXJhbCBtYW5pcHVsYXRpb24gb2YgdGhlIGZpbGUncwogbW9kZToKIApAQCAtMTEzLDYgKzEzNSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIGFuZAorICAgICAgOmRhdGE6YFNfSUZXSFRgLgorCiAKIEFsbCB0aGUgdmFyaWFibGVzIGJlbG93IGFyZSBzaW1wbHkgc3ltYm9saWMgaW5kZXhlcyBpbnRvIHRoZSAxMC10dXBsZSByZXR1cm5lZAogYnkgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIG9yIDpmdW5jOmBvcy5sc3RhdGAuCkBAIC0yMTAsNiArMjM2LDI5IEBACiAKICAgIEZJRk8uCiAKKy4uIGRhdGE6OiBTX0lGRE9PUgorCisgICBEb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZQT1JUCisKKyAgIEV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRldIVAorCisgICBXaGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIG9yIDpkYXRhOmBTX0lGV0hUYCBhcmUgZGVmaW5lZCBhcworICAgMCB3aGVuIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBmaWxlIHR5cGVzLgorCiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCBvZiA6ZnVuYzpgb3MuY2htb2RgOgogCiAuLiBkYXRhOjogU19JU1VJRApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM1OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKQEAgLTAsMCArMSw0MDggQEAKKzptb2Q6YHN0YXRpc3RpY3NgIC0tLSBNYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc3RhdGlzdGljcworICAgOnN5bm9wc2lzOiBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIHRlc3RzZXR1cDo6ICoKKworICAgZnJvbSBzdGF0aXN0aWNzIGltcG9ydCAqCisgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXRpc3RpY3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3Mgb2YKK251bWVyaWMgKDpjbGFzczpgUmVhbGAtdmFsdWVkKSBkYXRhLgorCitBdmVyYWdlcyBhbmQgbWVhc3VyZXMgb2YgY2VudHJhbCBsb2NhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSBhbiBhdmVyYWdlIG9yIHR5cGljYWwgdmFsdWUgZnJvbSBhIHBvcHVsYXRpb24KK29yIHNhbXBsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YG1lYW5gICAgICAgICAgICAgIEFyaXRobWV0aWMgbWVhbiAoImF2ZXJhZ2UiKSBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbmAgICAgICAgICAgIE1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9sb3dgICAgICAgIExvdyBtZWRpYW4gb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5faGlnaGAgICAgICBIaWdoIG1lZGlhbiBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9ncm91cGVkYCAgIE1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBncm91cGVkIGRhdGEuCis6ZnVuYzpgbW9kZWAgICAgICAgICAgICAgTW9kZSAobW9zdCBjb21tb24gdmFsdWUpIG9mIGRpc2NyZXRlIGRhdGEuCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01lYXN1cmVzIG9mIHNwcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRoZSBwb3B1bGF0aW9uIG9yIHNhbXBsZQordGVuZHMgdG8gZGV2aWF0ZSBmcm9tIHRoZSB0eXBpY2FsIG9yIGF2ZXJhZ2UgdmFsdWVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgcHN0ZGV2YCAgICAgICAgICAgUG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKzpmdW5jOmBwdmFyaWFuY2VgICAgICAgICBQb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGRhdGEuCis6ZnVuYzpgc3RkZXZgICAgICAgICAgICAgU2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorOmZ1bmM6YHZhcmlhbmNlYCAgICAgICAgIFNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0Z1bmN0aW9uIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogVGhlIGZ1bmN0aW9ucyBkbyBub3QgcmVxdWlyZSB0aGUgZGF0YSBnaXZlbiB0byB0aGVtIHRvIGJlIHNvcnRlZC4KK0hvd2V2ZXIsIGZvciByZWFkaW5nIGNvbnZlbmllbmNlLCBtb3N0IG9mIHRoZSBleGFtcGxlcyBzaG93IHNvcnRlZCBzZXF1ZW5jZXMuCisKKy4uIGZ1bmN0aW9uOjogbWVhbihkYXRhKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSBhcml0aG1ldGljIG1lYW4gb2YgKmRhdGEqLCBhIHNlcXVlbmNlIG9yIGl0ZXJhdG9yIG9mCisgICByZWFsLXZhbHVlZCBudW1iZXJzLgorCisgICBUaGUgYXJpdGhtZXRpYyBtZWFuIGlzIHRoZSBzdW0gb2YgdGhlIGRhdGEgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cy4gIEl0IGlzIGNvbW1vbmx5IGNhbGxlZCAidGhlIGF2ZXJhZ2UiLCBhbHRob3VnaCBpdCBpcyBvbmx5IG9uZSBvZiBtYW55CisgICBkaWZmZXJlbnQgbWF0aGVtYXRpY2FsIGF2ZXJhZ2VzLiAgSXQgaXMgYSBtZWFzdXJlIG9mIHRoZSBjZW50cmFsIGxvY2F0aW9uIG9mCisgICB0aGUgZGF0YS4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICBTb21lIGV4YW1wbGVzIG9mIHVzZToKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWFuKFsxLCAyLCAzLCA0LCA0XSkKKyAgICAgIDIuOAorICAgICAgPj4+IG1lYW4oWy0xLjAsIDIuNSwgMy4yNSwgNS43NV0pCisgICAgICAyLjYyNQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiBtZWFuKFtGKDMsIDcpLCBGKDEsIDIxKSwgRig1LCAzKSwgRigxLCAzKV0pCisgICAgICBGcmFjdGlvbigxMywgMjEpCisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IG1lYW4oW0QoIjAuNSIpLCBEKCIwLjc1IiksIEQoIjAuNjI1IiksIEQoIjAuMzc1IildKQorICAgICAgRGVjaW1hbCgnMC41NjI1JykKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBtZWFuIGlzIHN0cm9uZ2x5IGFmZmVjdGVkIGJ5IG91dGxpZXJzIGFuZCBpcyBub3QgYSByb2J1c3QgZXN0aW1hdG9yCisgICAgICBmb3IgY2VudHJhbCBsb2NhdGlvbjogdGhlIG1lYW4gaXMgbm90IG5lY2Vzc2FyaWx5IGEgdHlwaWNhbCBleGFtcGxlIG9mIHRoZQorICAgICAgZGF0YSBwb2ludHMuICBGb3IgbW9yZSByb2J1c3QsIGFsdGhvdWdoIGxlc3MgZWZmaWNpZW50LCBtZWFzdXJlcyBvZgorICAgICAgY2VudHJhbCBsb2NhdGlvbiwgc2VlIDpmdW5jOmBtZWRpYW5gIGFuZCA6ZnVuYzpgbW9kZWAuICAoSW4gdGhpcyBjYXNlLAorICAgICAgImVmZmljaWVudCIgcmVmZXJzIHRvIHN0YXRpc3RpY2FsIGVmZmljaWVuY3kgcmF0aGVyIHRoYW4gY29tcHV0YXRpb25hbAorICAgICAgZWZmaWNpZW5jeS4pCisKKyAgICAgIFRoZSBzYW1wbGUgbWVhbiBnaXZlcyBhbiB1bmJpYXNlZCBlc3RpbWF0ZSBvZiB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4sCisgICAgICB3aGljaCBtZWFucyB0aGF0LCB0YWtlbiBvbiBhdmVyYWdlIG92ZXIgYWxsIHRoZSBwb3NzaWJsZSBzYW1wbGVzLAorICAgICAgYGBtZWFuKHNhbXBsZSlgYCBjb252ZXJnZXMgb24gdGhlIHRydWUgbWVhbiBvZiB0aGUgZW50aXJlIHBvcHVsYXRpb24uICBJZgorICAgICAgKmRhdGEqIHJlcHJlc2VudHMgdGhlIGVudGlyZSBwb3B1bGF0aW9uIHJhdGhlciB0aGFuIGEgc2FtcGxlLCB0aGVuCisgICAgICBgYG1lYW4oZGF0YSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiDOvC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbihkYXRhKQorCisgICBSZXR1cm4gdGhlIG1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBudW1lcmljIGRhdGEsIHVzaW5nIHRoZSBjb21tb24gIm1lYW4gb2YKKyAgIG1pZGRsZSB0d28iIG1ldGhvZC4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIFRoZSBtZWRpYW4gaXMgYSByb2J1c3QgbWVhc3VyZSBvZiBjZW50cmFsIGxvY2F0aW9uLCBhbmQgaXMgbGVzcyBhZmZlY3RlZCBieQorICAgdGhlIHByZXNlbmNlIG9mIG91dGxpZXJzIGluIHlvdXIgZGF0YS4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcworICAgb2RkLCB0aGUgbWlkZGxlIGRhdGEgcG9pbnQgaXMgcmV0dXJuZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1XSkKKyAgICAgIDMKKworICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIGV2ZW4sIHRoZSBtZWRpYW4gaXMgaW50ZXJwb2xhdGVkIGJ5IHRha2luZworICAgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbihbMSwgMywgNSwgN10pCisgICAgICA0LjAKKworICAgVGhpcyBpcyBzdWl0ZWQgZm9yIHdoZW4geW91ciBkYXRhIGlzIGRpc2NyZXRlLCBhbmQgeW91IGRvbid0IG1pbmQgdGhhdCB0aGUKKyAgIG1lZGlhbiBtYXkgbm90IGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50LgorCisgICAuLiBzZWVhbHNvOjogOmZ1bmM6YG1lZGlhbl9sb3dgLCA6ZnVuYzpgbWVkaWFuX2hpZ2hgLCA6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5fbG93KGRhdGEpCisKKyAgIFJldHVybiB0aGUgbG93IG1lZGlhbiBvZiBudW1lcmljIGRhdGEuICBJZiAqZGF0YSogaXMgZW1wdHksCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgVGhlIGxvdyBtZWRpYW4gaXMgYWx3YXlzIGEgbWVtYmVyIG9mIHRoZSBkYXRhIHNldC4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiAgV2hlbiBpdCBpcyBldmVuLCB0aGUgc21hbGxlciBvZgorICAgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDVdKQorICAgICAgMworICAgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDUsIDddKQorICAgICAgMworCisgICBVc2UgdGhlIGxvdyBtZWRpYW4gd2hlbiB5b3VyIGRhdGEgYXJlIGRpc2NyZXRlIGFuZCB5b3UgcHJlZmVyIHRoZSBtZWRpYW4gdG8KKyAgIGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50IHJhdGhlciB0aGFuIGludGVycG9sYXRlZC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9oaWdoKGRhdGEpCisKKyAgIFJldHVybiB0aGUgaGlnaCBtZWRpYW4gb2YgZGF0YS4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICBUaGUgaGlnaCBtZWRpYW4gaXMgYWx3YXlzIGEgbWVtYmVyIG9mIHRoZSBkYXRhIHNldC4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiAgV2hlbiBpdCBpcyBldmVuLCB0aGUgbGFyZ2VyIG9mCisgICB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDVdKQorICAgICAgMworICAgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1LCA3XSkKKyAgICAgIDUKKworICAgVXNlIHRoZSBoaWdoIG1lZGlhbiB3aGVuIHlvdXIgZGF0YSBhcmUgZGlzY3JldGUgYW5kIHlvdSBwcmVmZXIgdGhlIG1lZGlhbiB0bworICAgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGVkLgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2dyb3VwZWQoZGF0YSwgaW50ZXJ2YWw9MSkKKworICAgUmV0dXJuIHRoZSBtZWRpYW4gb2YgZ3JvdXBlZCBjb250aW51b3VzIGRhdGEsIGNhbGN1bGF0ZWQgYXMgdGhlIDUwdGgKKyAgIHBlcmNlbnRpbGUsIHVzaW5nIGludGVycG9sYXRpb24uICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbNTIsIDUyLCA1MywgNTRdKQorICAgICAgNTIuNQorCisgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBkYXRhIGFyZSByb3VuZGVkLCBzbyB0aGF0IGVhY2ggdmFsdWUgcmVwcmVzZW50cworICAgdGhlIG1pZHBvaW50IG9mIGRhdGEgY2xhc3NlcywgZS5nLiAxIGlzIHRoZSBtaWRwb2ludCBvZiB0aGUgY2xhc3MgMC41LTEuNSwgMgorICAgaXMgdGhlIG1pZHBvaW50IG9mIDEuNS0yLjUsIDMgaXMgdGhlIG1pZHBvaW50IG9mIDIuNS0zLjUsIGV0Yy4gIFdpdGggdGhlIGRhdGEKKyAgIGdpdmVuLCB0aGUgbWlkZGxlIHZhbHVlIGZhbGxzIHNvbWV3aGVyZSBpbiB0aGUgY2xhc3MgMy41LTQuNSwgYW5kCisgICBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgdG8gZXN0aW1hdGUgaXQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIDVdKQorICAgICAgMy43CisKKyAgIE9wdGlvbmFsIGFyZ3VtZW50ICppbnRlcnZhbCogcmVwcmVzZW50cyB0aGUgY2xhc3MgaW50ZXJ2YWwsIGFuZCBkZWZhdWx0cworICAgdG8gMS4gIENoYW5naW5nIHRoZSBjbGFzcyBpbnRlcnZhbCBuYXR1cmFsbHkgd2lsbCBjaGFuZ2UgdGhlIGludGVycG9sYXRpb246CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0xKQorICAgICAgMy4yNQorICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MikKKyAgICAgIDMuNQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgcG9pbnRzIGFyZSBhdCBsZWFzdAorICAgKmludGVydmFsKiBhcGFydC4KKworICAgLi4gaW1wbC1kZXRhaWw6OgorCisgICAgICBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIDpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAgbWF5IGNvZXJjZSBkYXRhIHBvaW50cyB0bworICAgICAgZmxvYXRzLiAgVGhpcyBiZWhhdmlvdXIgaXMgbGlrZWx5IHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgKiAiU3RhdGlzdGljcyBmb3IgdGhlIEJlaGF2aW9yYWwgU2NpZW5jZXMiLCBGcmVkZXJpY2sgSiBHcmF2ZXR0ZXIgYW5kCisgICAgICAgIExhcnJ5IEIgV2FsbG5hdSAoOHRoIEVkaXRpb24pLgorCisgICAgICAqIENhbGN1bGF0aW5nIHRoZSBgbWVkaWFuIDxodHRwOi8vd3d3LnVhbGJlcnRhLmNhL35vcHNjYW4vbWVkaWFuLmh0bWw+YF8uCisKKyAgICAgICogVGhlIGBTU01FRElBTgorICAgICAgICA8aHR0cHM6Ly9wcm9qZWN0cy5nbm9tZS5vcmcvZ251bWVyaWMvZG9jL2dudW1lcmljLWZ1bmN0aW9uLVNTTUVESUFOLnNodG1sPmBfCisgICAgICAgIGZ1bmN0aW9uIGluIHRoZSBHbm9tZSBHbnVtZXJpYyBzcHJlYWRzaGVldCwgaW5jbHVkaW5nIGB0aGlzIGRpc2N1c3Npb24KKyAgICAgICAgPGh0dHBzOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMvZ251bWVyaWMtbGlzdC8yMDExLUFwcmlsL21zZzAwMDE4Lmh0bWw+YF8uCisKKworLi4gZnVuY3Rpb246OiBtb2RlKGRhdGEpCisKKyAgIFJldHVybiB0aGUgbW9zdCBjb21tb24gZGF0YSBwb2ludCBmcm9tIGRpc2NyZXRlIG9yIG5vbWluYWwgKmRhdGEqLiAgVGhlIG1vZGUKKyAgICh3aGVuIGl0IGV4aXN0cykgaXMgdGhlIG1vc3QgdHlwaWNhbCB2YWx1ZSwgYW5kIGlzIGEgcm9idXN0IG1lYXN1cmUgb2YKKyAgIGNlbnRyYWwgbG9jYXRpb24uCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgb3IgaWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIG1vc3QgY29tbW9uIHZhbHVlLAorICAgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIGBgbW9kZWBgIGFzc3VtZXMgZGlzY3JldGUgZGF0YSwgYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUuIFRoaXMgaXMgdGhlCisgICBzdGFuZGFyZCB0cmVhdG1lbnQgb2YgdGhlIG1vZGUgYXMgY29tbW9ubHkgdGF1Z2h0IGluIHNjaG9vbHM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbMSwgMSwgMiwgMywgMywgMywgMywgNF0pCisgICAgICAzCisKKyAgIFRoZSBtb2RlIGlzIHVuaXF1ZSBpbiB0aGF0IGl0IGlzIHRoZSBvbmx5IHN0YXRpc3RpYyB3aGljaCBhbHNvIGFwcGxpZXMKKyAgIHRvIG5vbWluYWwgKG5vbi1udW1lcmljKSBkYXRhOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1vZGUoWyJyZWQiLCAiYmx1ZSIsICJibHVlIiwgInJlZCIsICJncmVlbiIsICJyZWQiLCAicmVkIl0pCisgICAgICAncmVkJworCisKKy4uIGZ1bmN0aW9uOjogcHN0ZGV2KGRhdGEsIG11PU5vbmUpCisKKyAgIFJldHVybiB0aGUgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gKHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9wdWxhdGlvbgorICAgdmFyaWFuY2UpLiAgU2VlIDpmdW5jOmBwdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gcHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAgIDAuOTg2ODkzMjczNTI3MjUxCisKKworLi4gZnVuY3Rpb246OiBwdmFyaWFuY2UoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIG9mICpkYXRhKiwgYSBub24tZW1wdHkgaXRlcmFibGUgb2YgcmVhbC12YWx1ZWQKKyAgIG51bWJlcnMuICBWYXJpYW5jZSwgb3Igc2Vjb25kIG1vbWVudCBhYm91dCB0aGUgbWVhbiwgaXMgYSBtZWFzdXJlIG9mIHRoZQorICAgdmFyaWFiaWxpdHkgKHNwcmVhZCBvciBkaXNwZXJzaW9uKSBvZiBkYXRhLiAgQSBsYXJnZSB2YXJpYW5jZSBpbmRpY2F0ZXMgdGhhdAorICAgdGhlIGRhdGEgaXMgc3ByZWFkIG91dDsgYSBzbWFsbCB2YXJpYW5jZSBpbmRpY2F0ZXMgaXQgaXMgY2x1c3RlcmVkIGNsb3NlbHkKKyAgIGFyb3VuZCB0aGUgbWVhbi4KKworICAgSWYgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqbXUqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4gIFRvCisgICBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgZnJvbSBhIHNhbXBsZSwgdGhlIDpmdW5jOmB2YXJpYW5jZWAgZnVuY3Rpb24gaXMgdXN1YWxseQorICAgYSBiZXR0ZXIgY2hvaWNlLgorCisgICBSYWlzZXMgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpZiAqZGF0YSogaXMgZW1wdHkuCisKKyAgIEV4YW1wbGVzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGRhdGEgPSBbMC4wLCAwLjI1LCAwLjI1LCAxLjI1LCAxLjUsIDEuNzUsIDIuNzUsIDMuMjVdCisgICAgICA+Pj4gcHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjI1CisKKyAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUKKyAgIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqbXUqIHRvIGF2b2lkIHJlY2FsY3VsYXRpb246CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbXUgPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgICAgMS4yNQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKm11Ki4gIFVzaW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yICptdSogbWF5IGxlYWQgdG8gaW52YWxpZCBvciBpbXBvc3NpYmxlCisgICByZXN1bHRzLgorCisgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiBwdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICAgIERlY2ltYWwoJzI0LjgxNScpCisKKyAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgICAgPj4+IHB2YXJpYW5jZShbRigxLCA0KSwgRig1LCA0KSwgRigxLCAyKV0pCisgICAgICBGcmFjdGlvbigxMywgNzIpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGVuIGNhbGxlZCB3aXRoIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgdGhpcyBnaXZlcyB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZQorICAgICAgz4PCsi4gIFdoZW4gY2FsbGVkIG9uIGEgc2FtcGxlIGluc3RlYWQsIHRoaXMgaXMgdGhlIGJpYXNlZCBzYW1wbGUgdmFyaWFuY2UKKyAgICAgIHPCsiwgYWxzbyBrbm93biBhcyB2YXJpYW5jZSB3aXRoIE4gZGVncmVlcyBvZiBmcmVlZG9tLgorCisgICAgICBJZiB5b3Ugc29tZWhvdyBrbm93IHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiDOvCwgeW91IG1heSB1c2UgdGhpcyBmdW5jdGlvbgorICAgICAgdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBvZiBhIHNhbXBsZSwgZ2l2aW5nIHRoZSBrbm93biBwb3B1bGF0aW9uIG1lYW4gYXMKKyAgICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuICBQcm92aWRlZCB0aGUgZGF0YSBwb2ludHMgYXJlIHJlcHJlc2VudGF0aXZlCisgICAgICAoZS5nLiBpbmRlcGVuZGVudCBhbmQgaWRlbnRpY2FsbHkgZGlzdHJpYnV0ZWQpLCB0aGUgcmVzdWx0IHdpbGwgYmUgYW4KKyAgICAgIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisKKy4uIGZ1bmN0aW9uOjogc3RkZXYoZGF0YSwgeGJhcj1Ob25lKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gKHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHZhcmlhbmNlYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAgIDEuMDgxMDg3NDE1NTIxOTgyNworCisKKy4uIGZ1bmN0aW9uOjogdmFyaWFuY2UoZGF0YSwgeGJhcj1Ob25lKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSB2YXJpYW5jZSBvZiAqZGF0YSosIGFuIGl0ZXJhYmxlIG9mIGF0IGxlYXN0IHR3byByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiBpcyBnaXZlbiwgaXQgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAqZGF0YSouICBJZiBpdCBpcyBtaXNzaW5nIG9yIGBgTm9uZWBgICh0aGUgZGVmYXVsdCksIHRoZSBtZWFuIGlzCisgICBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91ciBkYXRhIGlzIGEgc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUbyBjYWxjdWxhdGUKKyAgIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgc2VlIDpmdW5jOmBwdmFyaWFuY2VgLgorCisgICBSYWlzZXMgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpZiAqZGF0YSogaGFzIGZld2VyIHRoYW4gdHdvIHZhbHVlcy4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFsyLjc1LCAxLjc1LCAxLjI1LCAwLjI1LCAwLjUsIDEuMjUsIDMuNV0KKyAgICAgID4+PiB2YXJpYW5jZShkYXRhKQorICAgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUKKyAgIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqeGJhciogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtID0gbWVhbihkYXRhKQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEsIG0pCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHBhc3NlZCB0aGUgYWN0dWFsIG1lYW4KKyAgIGFzICp4YmFyKi4gIFVzaW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yICp4YmFyKiBjYW4gbGVhZCB0byBpbnZhbGlkIG9yCisgICBpbXBvc3NpYmxlIHJlc3VsdHMuCisKKyAgIERlY2ltYWwgYW5kIEZyYWN0aW9uIHZhbHVlcyBhcmUgc3VwcG9ydGVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgICA+Pj4gdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICAgIERlY2ltYWwoJzMxLjAxODc1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gdmFyaWFuY2UoW0YoMSwgNiksIEYoMSwgMiksIEYoNSwgMyldKQorICAgICAgRnJhY3Rpb24oNjcsIDEwOCkKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgaXMgdGhlIHNhbXBsZSB2YXJpYW5jZSBzwrIgd2l0aCBCZXNzZWwncyBjb3JyZWN0aW9uLCBhbHNvIGtub3duIGFzCisgICAgICB2YXJpYW5jZSB3aXRoIE4tMSBkZWdyZWVzIG9mIGZyZWVkb20uICBQcm92aWRlZCB0aGF0IHRoZSBkYXRhIHBvaW50cyBhcmUKKyAgICAgIHJlcHJlc2VudGF0aXZlIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQKKyAgICAgIHNob3VsZCBiZSBhbiB1bmJpYXNlZCBlc3RpbWF0ZSBvZiB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisgICAgICBJZiB5b3Ugc29tZWhvdyBrbm93IHRoZSBhY3R1YWwgcG9wdWxhdGlvbiBtZWFuIM68IHlvdSBzaG91bGQgcGFzcyBpdCB0byB0aGUKKyAgICAgIDpmdW5jOmBwdmFyaWFuY2VgIGZ1bmN0aW9uIGFzIHRoZSAqbXUqIHBhcmFtZXRlciB0byBnZXQgdGhlIHZhcmlhbmNlIG9mIGEKKyAgICAgIHNhbXBsZS4KKworRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCitBIHNpbmdsZSBleGNlcHRpb24gaXMgZGVmaW5lZDoKKworLi4gZXhjZXB0aW9uOjogU3RhdGlzdGljc0Vycm9yCisKKyAgIFN1YmNsYXNzIG9mIDpleGM6YFZhbHVlRXJyb3JgIGZvciBzdGF0aXN0aWNzLXJlbGF0ZWQgZXhjZXB0aW9ucy4KKworLi4KKyAgICMgVGhpcyBtb2RlbGluZXMgbXVzdCBhcHBlYXIgd2l0aGluIHRoZSBsYXN0IHRlbiBsaW5lcyBvZiB0aGUgZmlsZS4KKyAgIGthdGU6IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdGFicyBvbjsgZW5jb2RpbmcgdXRmLTg7CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKaW5kZXggZjBkMmY4MC4uMjRjOTE1NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdApAQCAtMTUyNiw3ICsxNTI2LDcgQEAKICAgIGF0IHRoYXQgcG9zaXRpb24uCiAKIAotLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKQorLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBvbmUgb3IKICAgIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4gdGFiIHNpemUuICBUYWIKQEAgLTI0NjIsNiArMjQ2MiwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyB3aXRoIGZvcm1hdHMgJ0InLCAnYicgb3IgJ2MnIGFyZSBub3cgaGFzaGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBtZW1vcnl2aWV3IGlzIG5vdyByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgd2l0aAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdCBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKaW5kZXggZGRlMzJiOS4uZWMyZTFiZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CkBAIC02Niw2ICs2NiwxOSBAQAogICAgZm9ybWF0IChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCBgYGNhbGNzaXplKGZtdClgYCkuCiAKIAorLi4gZnVuY3Rpb246OiBpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikKKworICAgSXRlcmF0aXZlbHkgdW5wYWNrIGZyb20gdGhlIGJ1ZmZlciAqYnVmZmVyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdAorICAgc3RyaW5nICpmbXQqLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yIHdoaWNoIHdpbGwgcmVhZAorICAgZXF1YWxseS1zaXplZCBjaHVua3MgZnJvbSB0aGUgYnVmZmVyIHVudGlsIGFsbCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCisgICBjb25zdW1lZC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYW1vdW50CisgICBvZiBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBmb3JtYXQsIGFzIHJlZmxlY3RlZCBieSA6ZnVuYzpgY2FsY3NpemVgLgorCisgICBFYWNoIGl0ZXJhdGlvbiB5aWVsZHMgYSB0dXBsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY2FsY3NpemUoZm10KQogCiAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHN0cnVjdCAoYW5kIGhlbmNlIG9mIHRoZSBieXRlcyBvYmplY3QgcHJvZHVjZWQgYnkKQEAgLTM4OCw2ICs0MDEsMTMgQEAKICAgICAgIChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCA6YXR0cjpgc2VsZi5zaXplYCkuCiAKIAorICAgLi4gbWV0aG9kOjogaXRlcl91bnBhY2soYnVmZmVyKQorCisgICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBpdGVyX3VucGFja2AgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBmb3JtYXQuCisgICAgICAoYGBsZW4oYnVmZmVyKWBgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA6YXR0cjpgc2VsZi5zaXplYCkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBhdHRyaWJ1dGU6OiBmb3JtYXQKIAogICAgICAgVGhlIGZvcm1hdCBzdHJpbmcgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBTdHJ1Y3Qgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAppbmRleCA5ZjJmODJkLi43ZmJlMzk4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBpbnB1dD1Ob25lLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQogCiAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCiAKQEAgLTEyOSwxNSArMTI5LDIxIEBACiAgICBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCAoaGVuY2UgdGhlIHVzZSBvZiBrZXl3b3JkLW9ubHkgbm90YXRpb24KICAgIGluIHRoZSBhYmJyZXZpYXRlZCBzaWduYXR1cmUpLiBUaGUgZnVsbCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbGFyZ2VseSB0aGUKICAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSB0aGlzIGZ1bmN0aW9ucyBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KLSAgIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcyBpdCBpcyB1c2VkCi0gICBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgorICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKmlucHV0KiBhbmQgKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8KKyAgIHRoYXQgaW50ZXJmYWNlLiAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzCisgICBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCiAKICAgIFRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi53YWl0YC4gSWYgdGhlIHRpbWVvdXQKICAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB0aGVuIHdhaXRlZCBmb3IgYWdhaW4uICBUaGUKICAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gd2lsbCBiZSByZS1yYWlzZWQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MKICAgIGhhcyB0ZXJtaW5hdGVkLgogCisgICBUaGUgKmlucHV0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYCBhbmQgdGh1cyB0byB0aGUKKyAgIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHVzZWQgaXQgbXVzdCBiZSBhIGJ5dGUgc2VxdWVuY2UsIG9yIGEgc3RyaW5nIGlmCisgICBgYHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlYGAuICBXaGVuIHVzZWQsIHRoZSBpbnRlcm5hbCA6Y2xhc3M6YFBvcGVuYCBvYmplY3QKKyAgIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoIGBgc3RkaW49UElQRWBgLCBhbmQgdGhlICpzdGRpbiogYXJndW1lbnQgbWF5CisgICBub3QgYmUgdXNlZCBhcyB3ZWxsLgorCiAgICBFeGFtcGxlczo6CiAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0pCkBAIC0xNDYsNiArMTUyLDEwIEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICdIZWxsbyBXb3JsZCFcbicKIAorICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImV4aXQgMSIsIHNoZWxsPVRydWUpCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAuLi4KQEAgLTE2NywxMCArMTc3LDYgQEAKICAgICAgIC4uLiAgICAgc2hlbGw9VHJ1ZSkKICAgICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCi0KLSAgIC4uCi0KICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCkBAIC0xODMsOSArMTg5LDEzIEBACiAgICAgICByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZCBwcm9jZXNzIG1heSBibG9jayBpZiBpdAogICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gdGhlIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICppbnB1dCogd2FzIGFkZGVkLgogCiAuLiBkYXRhOjogREVWTlVMTAogCkBAIC04MzMsOCArODQzLDYgQEAKICAgIFRoZSBuZXcgcHJvY2VzcyBoYXMgYSBuZXcgY29uc29sZSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGl0cyBwYXJlbnQncwogICAgY29uc29sZSAodGhlIGRlZmF1bHQpLgogCi0gICBUaGlzIGZsYWcgaXMgYWx3YXlzIHNldCB3aGVuIDpjbGFzczpgUG9wZW5gIGlzIGNyZWF0ZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KLQogLi4gZGF0YTo6IENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAogCiAgICBBIDpjbGFzczpgUG9wZW5gIGBgY3JlYXRpb25mbGFnc2BgIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoYXQgYSBuZXcgcHJvY2VzcwpAQCAtMTA0OSw5ICsxMDU3LDkgQEAKIAogICAgUmV0dXJuIGBgKHN0YXR1cywgb3V0cHV0KWBgIG9mIGV4ZWN1dGluZyAqY21kKiBpbiBhIHNoZWxsLgogCi0gICBFeGVjdXRlIHRoZSBzdHJpbmcgKmNtZCogaW4gYSBzaGVsbCB3aXRoIDpjbGFzczpgUG9wZW5gIGFuZCByZXR1cm4gYSAyLXR1cGxlCi0gICBgYChzdGF0dXMsIG91dHB1dClgYCB2aWEgOmZ1bmM6YFBvcGVuLmNvbW11bmljYXRlYC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUKLSAgIGlzIHVzZWQ7IHNlZSB0aGUgbm90ZXMgb24gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIG1vcmUgZGV0YWlscy4KKyAgIEV4ZWN1dGUgdGhlIHN0cmluZyAqY21kKiBpbiBhIHNoZWxsIHdpdGggOm1ldGg6YFBvcGVuLmNoZWNrX291dHB1dGAgYW5kCisgICByZXR1cm4gYSAyLXR1cGxlIGBgKHN0YXR1cywgb3V0cHV0KWBgLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkOworICAgc2VlIHRoZSBub3RlcyBvbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgogICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdCBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAppbmRleCA0YmRiOTliLi4xNWMwNmI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CkBAIC0xNTAsOCArMTUwLDkgQEAKIAogLi4gbWV0aG9kOjogQVVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IEFVX3JlYWQucmVhZGZyYW1lcyhuKQpAQCAtMjExLDYgKzIxMiw5IEBACiAKICAgIFNldCB0aGUgc2FtcGxlIHdpZHRoIChpbiBieXRlcy4pCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcy4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS5zZXRmcmFtZXJhdGUobikKIApAQCAtMjQ2LDExICsyNTAsMTcgQEAKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzLCB3aXRob3V0IGNvcnJlY3RpbmcgKm5mcmFtZXMqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXMucnN0IGIvRG9jL2xpYnJhcnkvc3lzLnJzdAppbmRleCA4ZWMxMTkwLi5mMzg2NDBiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKQEAgLTM4MCw2ICszODAsMjEgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkIGJ5IHRoZSBpbnRlcnByZXRlciwKKyAgIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc2l6ZS4gIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdHJhY2tpbmcKKyAgIGFuZCBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzLiAgQmVjYXVzZSBvZiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcm5hbAorICAgY2FjaGVzLCB0aGUgcmVzdWx0IGNhbiB2YXJ5IGZyb20gY2FsbCB0byBjYWxsOyB5b3UgbWF5IGhhdmUgdG8gY2FsbAorICAgOmZ1bmM6YF9jbGVhcl90eXBlX2NhY2hlKClgIGFuZCA6ZnVuYzpgZ2MuY29sbGVjdCgpYCB0byBnZXQgbW9yZQorICAgcHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgSWYgYSBQeXRob24gYnVpbGQgb3IgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlYXNvbmFibHkgY29tcHV0ZSB0aGlzCisgICBpbmZvcm1hdGlvbiwgOmZ1bmM6YGdldGFsbG9jYXRlZGJsb2NrcygpYCBpcyBhbGxvd2VkIHRvIHJldHVybiAwIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0Y2hlY2tpbnRlcnZhbCgpCiAKICAgIFJldHVybiB0aGUgaW50ZXJwcmV0ZXIncyAiY2hlY2sgaW50ZXJ2YWwiOyBzZWUgOmZ1bmM6YHNldGNoZWNraW50ZXJ2YWxgLgpAQCAtMzk2LDkgKzQxMSwxMCBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGRsb3BlbmZsYWdzKCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciA6YzpmdW5jOmBkbG9wZW5gIGNhbGxzLgotICAgVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSA6bW9kOmBjdHlwZXNgIGFuZCA6bW9kOmBETEZDTmAgbW9kdWxlcy4KLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IKKyAgIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgdmFsdWVzIGNhbiBiZQorICAgZm91bmQgaW4gdGhlIDptb2Q6YG9zYCBtb2R1bGUgKGBgUlRMRF94eHhgYCBjb25zdGFudHMsIGUuZy4KKyAgIDpkYXRhOmBvcy5SVExEX0xBWllgKS4gIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldGZpbGVzeXN0ZW1lbmNvZGluZygpCkBAIC01NzgsOSArNTk0LDIwIEBACiAgICB8IDpjb25zdDpgaW1hZ2AgICAgICAgfCBtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICAgIHwgY29tcGxleCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgYWxnb3JpdGhtYCAgfCBuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcywgfAorICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYW5kIG1lbW9yeXZpZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgaGFzaF9iaXRzYCAgfCBpbnRlcm5hbCBvdXRwdXQgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBzZWVkX2JpdHNgICB8IHNpemUgb2YgdGhlIHNlZWQga2V5IG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDogMy40CisgICAgICBBZGRlZCAqYWxnb3JpdGhtKiwgKmhhc2hfYml0cyogYW5kICpzZWVkX2JpdHMqCisKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KIApAQCAtNjY0LDYgKzY5MSwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZGF0YTo6IF9faW50ZXJhY3RpdmVob29rX18KKworICAgV2hlbiBwcmVzZW50LCB0aGlzIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkICh3aXRoIG5vIGFyZ3VtZW50cykKKyAgIHdoZW4gdGhlIGludGVycHJldGVyIGlzIGxhdW5jaGVkIGluIDpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLgorICAgVGhpcyBpcyBkb25lIGFmdGVyIHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlIGlzIHJlYWQsIHNvIHRoYXQgeW91CisgICBjYW4gc2V0IHRoaXMgaG9vayB0aGVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBpbnRlcm4oc3RyaW5nKQogCiAgICBFbnRlciAqc3RyaW5nKiBpbiB0aGUgdGFibGUgb2YgImludGVybmVkIiBzdHJpbmdzIGFuZCByZXR1cm4gdGhlIGludGVybmVkIHN0cmluZwpAQCAtODExLDggKzg0OCw2IEBACiAgICBXaW5kb3dzICAgICAgICAgIGBgJ3dpbjMyJ2BgCiAgICBXaW5kb3dzL0N5Z3dpbiAgIGBgJ2N5Z3dpbidgYAogICAgTWFjIE9TIFggICAgICAgICBgYCdkYXJ3aW4nYGAKLSAgIE9TLzIgICAgICAgICAgICAgYGAnb3MyJ2BgCi0gICBPUy8yIEVNWCAgICAgICAgIGBgJ29zMmVteCdgYAogICAgPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTg4Myw3ICs5MTgsNyBAQAogICAgdGhlIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEKICAgIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhcwogICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClgYC4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzCi0gICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzCisgICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMKICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgogICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLgogCkBAIC0xMDkzLDcgKzExMjgsNiBAQAogICAgfCA6Y29uc3Q6YG5hbWVgICAgIHwgTmFtZSBvZiB0aGUgdGhyZWFkIGltcGxlbWVudGF0aW9uOiAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ250J2BgOiBXaW5kb3dzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnb3MyJ2BgOiBPUy8yIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdwdGhyZWFkJ2BgOiBQT1NJWCB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ3NvbGFyaXMnYGA6IFNvbGFyaXMgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0IGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAppbmRleCBjNDdkY2NlLi41MzVhYzU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKQEAgLTgzLDggKzgzLDYgQEAKICAgbG9jYXRlZCB1bmRlciB0aGUgdXNlciBob21lIGRpcmVjdG9yeS4KIC0gKm50Kjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMgbGlrZSBXaW5kb3dzLgogLSAqbnRfdXNlcio6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCi0tICpvczIqOiBzY2hlbWUgZm9yIE9TLzIgcGxhdGZvcm1zLgotLSAqb3MyX2hvbWUqOiBzY2hlbWUgZm9yIE9TLzIgcGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KIAogRWFjaCBzY2hlbWUgaXMgaXRzZWxmIGNvbXBvc2VkIG9mIGEgc2VyaWVzIG9mIHBhdGhzIGFuZCBlYWNoIHBhdGggaGFzIGEgdW5pcXVlCiBpZGVudGlmaWVyLiAgUHl0aG9uIGN1cnJlbnRseSB1c2VzIGVpZ2h0IHBhdGhzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAppbmRleCAxZWFkNzFjLi41OTMzNmM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdApAQCAtNTkxLDYgKzU5MSw2NyBAQAogICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgaXQgaXMgb25lIG9mIGNoYXJhY3RlciBkZXZpY2UsIGJsb2NrIGRldmljZSBvciBGSUZPLgogCiAKKy4uIF90YXJmaWxlLWNvbW1hbmRsaW5lOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gaW50ZXJhY3QKK3dpdGggdGFyIGFyY2hpdmVzLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgdGFyIGFyY2hpdmUsIHNwZWNpZnkgaXRzIG5hbWUgYWZ0ZXIgdGhlIDpvcHRpb246YC1jYAorb3B0aW9uIGFuZCB0aGVuIGxpc3QgdGhlIGZpbGVuYW1lKHMpIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWMgbW9udHkudGFyICBzcGFtLnR4dCBlZ2dzLnR4dAorCitQYXNzaW5nIGEgZGlyZWN0b3J5IGlzIGFsc28gYWNjZXB0YWJsZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciBsaWZlLW9mLWJyaWFuXzE5NzkvCisKK0lmIHlvdSB3YW50IHRvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdXNlCit0aGUgOm9wdGlvbjpgLWVgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhcgorCitZb3UgY2FuIGFsc28gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGJ5IHBhc3NpbmcgdGhlCitkaXJlY3RvcnkncyBuYW1lOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWUgbW9udHkudGFyICBvdGhlci1kaXIvCisKK0ZvciBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIGEgdGFyIGFyY2hpdmUsIHVzZSB0aGUgOm9wdGlvbjpgLWxgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1sIG1vbnR5LnRhcgorCisKK0NvbW1hbmQgbGluZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBjbWRvcHRpb246OiAtbCA8dGFyZmlsZT4KKyAgICAgICAgICAgICAgIC0tbGlzdCA8dGFyZmlsZT4KKworICAgTGlzdCBmaWxlcyBpbiBhIHRhcmZpbGUuCisKKy4uIGNtZG9wdGlvbjo6IC1jIDx0YXJmaWxlPiA8c291cmNlMT4gPHNvdXJjZU4+CisgICAgICAgICAgICAgICAtLWNyZWF0ZSA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorCisgICBDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZSBmaWxlcy4KKworLi4gY21kb3B0aW9uOjogLWUgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisgICAgICAgICAgICAgICAtLWV4dHJhY3QgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisKKyAgIEV4dHJhY3QgdGFyZmlsZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiAqb3V0cHV0X2RpciogaXMgbm90IHNwZWNpZmllZC4KKworLi4gY21kb3B0aW9uOjogLXQgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLXRlc3QgPHRhcmZpbGU+CisKKyAgIFRlc3Qgd2hldGhlciB0aGUgdGFyZmlsZSBpcyB2YWxpZCBvciBub3QuCisKKy4uIGNtZG9wdGlvbjo6IC12LCAtLXZlcmJvc2UKKworICAgVmVyYm9zZSBvdXRwdXQKKwogLi4gX3Rhci1leGFtcGxlczoKIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKaW5kZXggYzEyNzBmNC4uMmM1MTU0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKQEAgLTQ0MiwxMyArNDQyLDYgQEAKICAgIEEgZGVjb3JhdG9yIGZvciBydW5uaW5nIHRlc3RzIHRoYXQgcmVxdWlyZSBzdXBwb3J0IGZvciBzeW1ib2xpYyBsaW5rcy4KIAogCi0uLiBmdW5jdGlvbjo6IHN1cHByZXNzX2NyYXNoX3BvcHVwKCkKLQotICAgQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCi0gICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4PmBfLgotICAgT24gb3RoZXIgcGxhdGZvcm1zIGl0J3MgYSBuby1vcC4KLQotCiAuLiBkZWNvcmF0b3I6OiBhbnRpY2lwYXRlX2ZhaWx1cmUoY29uZGl0aW9uKQogCiAgICBBIGRlY29yYXRvciB0byBjb25kaXRpb25hbGx5IG1hcmsgdGVzdHMgd2l0aApAQCAtNTkzLDYgKzU4NiwyMSBAQAogICAgVGVtcG9yYXJpbHkgdW5zZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgZW52dmFyYGAuCiAKIAorLi4gY2xhc3M6OiBTdXBwcmVzc0NyYXNoUmVwb3J0KCkKKworICAgQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byB0cnkgdG8gcHJldmVudCBjcmFzaCBkaWFsb2cgcG9wdXBzIG9uIHRlc3RzIHRoYXQKKyAgIGFyZSBleHBlY3RlZCB0byBjcmFzaCBhIHN1YnByb2Nlc3MuCisKKyAgIE9uIFdpbmRvd3MsIGl0IGRpc2FibGVzIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgIGBTZXRFcnJvck1vZGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweD5gXy4KKworICAgT24gVU5JWCwgOmZ1bmM6YHJlc291cmNlLnNldHJsaW1pdGAgaXMgdXNlZCB0byBzZXQKKyAgIDphdHRyOmByZXNvdXJjZS5STElNSVRfQ09SRWAncyBzb2Z0IGxpbWl0IHRvIDAgdG8gcHJldmVudCBjb3JlZHVtcCBmaWxlCisgICBjcmVhdGlvbi4KKworICAgT24gYm90aCBwbGF0Zm9ybXMsIHRoZSBvbGQgdmFsdWUgaXMgcmVzdG9yZWQgYnkgOm1ldGg6YF9fZXhpdF9fYC4KKworCiAuLiBjbGFzczo6IFdhcm5pbmdzUmVjb3JkZXIoKQogCiAgICBDbGFzcyB1c2VkIHRvIHJlY29yZCB3YXJuaW5ncyBmb3IgdW5pdCB0ZXN0cy4gU2VlIGRvY3VtZW50YXRpb24gb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdCBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAppbmRleCBjNjI1MjU0Li4xYmE0MmEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CkBAIC0xMCwxMSArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgdHdvIGNvbnZlbmllbmNlIGZ1bmN0aW9ucywgOmZ1bmM6YHdyYXBgIGFuZAotOmZ1bmM6YGZpbGxgLCBhcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yaywKLWFuZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMsIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YC4gIElmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lCi1vciB0d28gIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7Ci1vdGhlcndpc2UsICB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KK1RoZSA6bW9kOmB0ZXh0d3JhcGAgbW9kdWxlIHByb3ZpZGVzIHNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zLAorYXMgd2VsbCBhcyA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgdGhlIGNsYXNzIHRoYXQgZG9lcyBhbGwgdGhlIHdvcmsuCitJZiB5b3UncmUganVzdCB3cmFwcGluZyBvciBmaWxsaW5nIG9uZSBvciB0d28gdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UKK2Z1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7IG90aGVyd2lzZSwgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgogCiAuLiBmdW5jdGlvbjo6IHdyYXAodGV4dCwgd2lkdGg9NzAsICoqa3dhcmdzKQogCkBAIC0zOSwxOSArMzksMjQgQEAKICAgIEluIHBhcnRpY3VsYXIsIDpmdW5jOmBmaWxsYCBhY2NlcHRzIGV4YWN0bHkgdGhlIHNhbWUga2V5d29yZCBhcmd1bWVudHMgYXMKICAgIDpmdW5jOmB3cmFwYC4KIAotQm90aCA6ZnVuYzpgd3JhcGAgYW5kIDpmdW5jOmBmaWxsYCB3b3JrIGJ5IGNyZWF0aW5nIGEgOmNsYXNzOmBUZXh0V3JhcHBlcmAKLWluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQgaW5zdGFuY2UgaXMgbm90IHJldXNlZCwgc28gZm9yCi1hcHBsaWNhdGlvbnMgdGhhdCB3cmFwL2ZpbGwgbWFueSB0ZXh0IHN0cmluZ3MsIGl0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIHlvdQotdG8gY3JlYXRlIHlvdXIgb3duIDpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KIAotVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCi1oeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcwotOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KKy4uIGZ1bmN0aW9uOjogc2hvcnRlbih0ZXh0LCB3aWR0aD03MCwgKiwgcGxhY2Vob2xkZXI9IiBbLi4uXSIpCiAKLVR3byBhZGRpdGlvbmFsIHV0aWxpdHkgZnVuY3Rpb24sIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YCwgYXJlCi1wcm92aWRlZCB0byByZW1vdmUgaW5kZW50YXRpb24gZnJvbSBzdHJpbmdzIHRoYXQgaGF2ZSB1bndhbnRlZCB3aGl0ZXNwYWNlCi10byB0aGUgbGVmdCBvZiB0aGUgdGV4dCBhbmQgdG8gYWRkIGFuIGFyYml0cmFyeSBwcmVmaXggdG8gc2VsZWN0ZWQgbGluZXMKLWluIGEgYmxvY2sgb2YgdGV4dC4KKyAgIENvbGxhcHNlIGFuZCB0cnVuY2F0ZSB0aGUgZ2l2ZW4gdGV4dCB0byBmaXQgaW4gdGhlIGdpdmVuIHdpZHRoLgorCisgICBUaGUgdGV4dCBmaXJzdCBoYXMgaXRzIHdoaXRlc3BhY2UgY29sbGFwc2VkLiAgSWYgaXQgdGhlbiBmaXRzIGluCisgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlLCBhcyBtYW55IHdvcmRzCisgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSAqcGxhY2Vob2xkZXIqIGlzIGFwcGVuZGVkOjoKKworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICdIZWxsbyB3b3JsZCEnCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTExKQorICAgICAgJ0hlbGxvIFsuLi5dJworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvIHdvcmxkIiwgd2lkdGg9MTAsIHBsYWNlaG9sZGVyPSIuLi4iKQorICAgICAgJ0hlbGxvLi4uJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IGRlZGVudCh0ZXh0KQogCkBAIC0xMDIsNiArMTA3LDE2IEBACiAgICAgICArIHdvcmxkCiAKIAorOmZ1bmM6YHdyYXBgLCA6ZnVuYzpgZmlsbGAgYW5kIDpmdW5jOmBzaG9ydGVuYCB3b3JrIGJ5IGNyZWF0aW5nIGEKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQKK2luc3RhbmNlIGlzIG5vdCByZXVzZWQsIHNvIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzIG1hbnkgdGV4dAorc3RyaW5ncywgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGNyZWF0ZSB5b3VyIG93bgorOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgorCitUZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KK2h5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCis6YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgorCiAuLiBjbGFzczo6IFRleHRXcmFwcGVyKCoqa3dhcmdzKQogCiAgICBUaGUgOmNsYXNzOmBUZXh0V3JhcHBlcmAgY29uc3RydWN0b3IgYWNjZXB0cyBhIG51bWJlciBvZiBvcHRpb25hbCBrZXl3b3JkCkBAIC0yMzUsNyArMjUwLDIzIEBACiAgICAgICB3YXMgdG8gYWx3YXlzIGFsbG93IGJyZWFraW5nIGh5cGhlbmF0ZWQgd29yZHMuCiAKIAotICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyB0d28gcHVibGljIG1ldGhvZHMsIGFuYWxvZ291cyB0byB0aGUKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heF9saW5lcworCisgICAgICAoZGVmYXVsdDogYGBOb25lYGApIElmIG5vdCBgYE5vbmVgYCwgdGhlbiB0aGUgdGV4dCBiZSB3aWxsIHRydW5jYXRlZCB0bworICAgICAgKm1heF9saW5lcyogbGluZXMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBsYWNlaG9sZGVyCisKKyAgICAgIChkZWZhdWx0OiBgYCcgWy4uLl0nYGApIFN0cmluZyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGxhc3QgbGluZSBvZgorICAgICAgdGV4dCBpZiBpdCB3aWxsIGJlIHRydW5jYXRlZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyBzb21lIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCiAgICBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zOgogCiAgICAuLiBtZXRob2Q6OiB3cmFwKHRleHQpCkBAIC0yNTEsNCArMjgyLDMgQEAKIAogICAgICAgV3JhcHMgdGhlIHNpbmdsZSBwYXJhZ3JhcGggaW4gKnRleHQqLCBhbmQgcmV0dXJucyBhIHNpbmdsZSBzdHJpbmcKICAgICAgIGNvbnRhaW5pbmcgdGhlIHdyYXBwZWQgcGFyYWdyYXBoLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAppbmRleCA3YzMyNmQxLi40YTNiM2VhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKQEAgLTU3LDYgKzU3LDE1IEBACiAgICBhbmQgdGhyZWFkcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHN0YXJ0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBtYWluX3RocmVhZCgpCisKKyAgIFJldHVybiB0aGUgbWFpbiA6Y2xhc3M6YFRocmVhZGAgb2JqZWN0LiAgSW4gbm9ybWFsIGNvbmRpdGlvbnMsIHRoZQorICAgbWFpbiB0aHJlYWQgaXMgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzCisgICBzdGFydGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHNldHRyYWNlKGZ1bmMpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB0cmFjZSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggYTQ4NzkxNy4uMGNjMTU4NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgIHQgPSBUaW1lciguLi4pICAgICAgICMgb3V0c2lkZSB0aGUgdHJ5L2V4Y2VwdAogICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIHQudGltZWl0KC4uLikgICAgIyBvciB0LnJlcGVhdCguLi4pCi0gICAgICAgICBleGNlcHQ6CisgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgIHQucHJpbnRfZXhjKCkKIAogICAgICAgVGhlIGFkdmFudGFnZSBvdmVyIHRoZSBzdGFuZGFyZCB0cmFjZWJhY2sgaXMgdGhhdCBzb3VyY2UgbGluZXMgaW4gdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CmluZGV4IGFkMzdhN2IuLjgzZjBlZDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CkBAIC03NDcsMzIgKzc0Nyw2IEBACiAgICBkaXNwbGF5ZWQuICBZb3UgY2FuIHVzZSB0aGVzZSA6bW9kOmB0a2ludGVyYCBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZXNlIHNwZWNpYWwKICAgIHBvaW50cyBpbiB0ZXh0IHdpZGdldHM6CiAKLS4uIGZ1bmN0aW9uOjogQXRFbmQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSB0ZXh0Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdEluc2VydCgpCi0gICAgICByZWZlcnMgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSB0ZXh0IGN1cnNvciBpcwotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxGaXJzdCgpCi0gICAgICBpbmRpY2F0ZXMgdGhlIGJlZ2lubmluZyBwb2ludCBvZiB0aGUgc2VsZWN0ZWQgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxMYXN0KCkKLSAgICAgIGRlbm90ZXMgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQgYW5kIGZpbmFsbHkKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0KHhbLCB5XSkKLSAgICAgIHJlZmVycyB0byB0aGUgY2hhcmFjdGVyIGF0IHBpeGVsIGxvY2F0aW9uICp4KiwgKnkqICh3aXRoICp5KiBub3QgdXNlZCBpbiB0aGUKLSAgICAgIGNhc2Ugb2YgYSB0ZXh0IGVudHJ5IHdpZGdldCwgd2hpY2ggY29udGFpbnMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0KS4KLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCiBUZXh0IHdpZGdldCBpbmRleGVzCiAgICBUaGUgaW5kZXggbm90YXRpb24gZm9yIFRleHQgd2lkZ2V0cyBpcyB2ZXJ5IHJpY2ggYW5kIGlzIGJlc3QgZGVzY3JpYmVkIGluIHRoZSBUawogICAgbWFuIHBhZ2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKaW5kZXggMzJlNTczMy4uYjY4YThmMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdAorKysgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CkBAIC0xMjksNiArMTI5LDEzIEBACiAKICAgIEEgc2hvcnRoYW5kIGZvciBgYGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soZiwgbGltaXQpKWBgLgogCisuLiBmdW5jdGlvbjo6IGNsZWFyX2ZyYW1lcyh0YikKKworICAgQ2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgaW4gYSB0cmFjZWJhY2sgKnRiKgorICAgYnkgY2FsbGluZyB0aGUgOm1ldGg6YGNsZWFyYCBtZXRob2Qgb2YgZWFjaCBmcmFtZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIF90cmFjZWJhY2stZXhhbXBsZToKIApAQCAtMTQ2LDcgKzE1Myw3IEBACiAgICAgICAgc291cmNlID0gaW5wdXQoIj4+PiAiKQogICAgICAgIHRyeToKICAgICAgICAgICAgZXhlYyhzb3VyY2UsIGVudmRpcikKLSAgICAgICBleGNlcHQ6CisgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiB1c2VyIGNvZGU6IikKICAgICAgICAgICAgcHJpbnQoIi0iKjYwKQogICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZG91dCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA2NzgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0CkBAIC0wLDAgKzEsNjA1IEBACis6bW9kOmB0cmFjZW1hbGxvY2AgLS0tIFRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogdHJhY2VtYWxsb2MKKyAgIDpzeW5vcHNpczogVHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorCitUaGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGEgZGVidWcgdG9vbCB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieQorUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCitUbyB0cmFjZSBtb3N0IG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbiwgdGhlIG1vZHVsZSBzaG91bGQgYmUgc3RhcnRlZAorYXMgZWFybHkgYXMgcG9zc2libGUgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byBgYDFgYCwgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2NgYCBjb21tYW5kIGxpbmUKK29wdGlvbi4gVGhlIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBydW50aW1lIHRvCitzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKK0J5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKK2ZyYW1lICgxIGZyYW1lKS4gVG8gc3RvcmUgMjUgZnJhbWVzIGF0IHN0YXJ0dXA6IHNldCB0aGUKKzplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYDI1YGAsIG9yIHVzZSB0aGUKKzpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPTI1YGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworRXhhbXBsZXMKKz09PT09PT09CisKK0Rpc3BsYXkgdGhlIHRvcCAxMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Rpc3BsYXkgdGhlIDEwIGZpbGVzIGFsbG9jYXRpbmcgdGhlIG1vc3QgbWVtb3J5OjoKKworICAgIGltcG9ydCB0cmFjZW1hbGxvYworCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisKKyAgICBwcmludCgiWyBUb3AgMTAgXSIpCisgICAgZm9yIHN0YXQgaW4gdG9wX3N0YXRzWzoxMF06CisgICAgICAgIHByaW50KHN0YXQpCisKKworRXhhbXBsZSBvZiBvdXRwdXQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlOjoKKworICAgIFsgVG9wIDEwIF0KKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjo3MTY6IHNpemU9NDg1NSBLaUIsIGNvdW50PTM5MzI4LCBhdmVyYWdlPTEyNiBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46Mjg0OiBzaXplPTUyMSBLaUIsIGNvdW50PTMxOTksIGF2ZXJhZ2U9MTY3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvY29sbGVjdGlvbnMvX19pbml0X18ucHk6MzY4OiBzaXplPTI0NCBLaUIsIGNvdW50PTIzMTUsIGF2ZXJhZ2U9MTA4IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTozODE6IHNpemU9MTg1IEtpQiwgY291bnQ9Nzc5LCBhdmVyYWdlPTI0MyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6NDAyOiBzaXplPTE1NCBLaUIsIGNvdW50PTM3OCwgYXZlcmFnZT00MTYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9hYmMucHk6MTMzOiBzaXplPTg4LjcgS2lCLCBjb3VudD0zNDcsIGF2ZXJhZ2U9MjYyIEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoxNDQ2OiBzaXplPTcwLjQgS2lCLCBjb3VudD05MTEsIGF2ZXJhZ2U9NzkgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjE0NTQ6IHNpemU9NTIuMCBLaUIsIGNvdW50PTI1LCBhdmVyYWdlPTIxMzEgQgorICAgIDxzdHJpbmc+OjU6IHNpemU9NDkuNyBLaUIsIGNvdW50PTE0OCwgYXZlcmFnZT0zNDQgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9zeXNjb25maWcucHk6NDExOiBzaXplPTQ4LjAgS2lCLCBjb3VudD0xLCBhdmVyYWdlPTQ4LjAgS2lCCisKK1dlIGNhbiBzZWUgdGhhdCBQeXRob24gbG9hZGVkIGBgNC44IE1pQmBgIGRhdGEgKGJ5dGVjb2RlIGFuZCBjb25zdGFudHMpIGZyb20KK21vZHVsZXMgYW5kIHRoYXQgdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgYWxsb2NhdGVkIGBgMjQ0IEtpQmBgIHRvIGJ1aWxkCis6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCB0eXBlcy4KKworU2VlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBmb3IgbW9yZSBvcHRpb25zLgorCisKK0NvbXB1dGUgZGlmZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGFrZSB0d28gc25hcHNob3RzIGFuZCBkaXNwbGF5IHRoZSBkaWZmZXJlbmNlczo6CisKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisgICAgIyAuLi4gc3RhcnQgeW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90MSA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICMgLi4uIGNhbGwgdGhlIGZ1bmN0aW9uIGxlYWtpbmcgbWVtb3J5IC4uLgorICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorCisgICAgdG9wX3N0YXRzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QxLCAnbGluZW5vJykKKworICAgIHByaW50KCJbIFRvcCAxMCBkaWZmZXJlbmNlcyBdIikKKyAgICBmb3Igc3RhdCBpbiB0b3Bfc3RhdHNbOjEwXToKKyAgICAgICAgcHJpbnQoc3RhdCkKKworRXhhbXBsZSBvZiBvdXRwdXQgYmVmb3JlL2FmdGVyIHJ1bm5pbmcgc29tZSB0ZXN0cyBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgWyBUb3AgMTAgZGlmZmVyZW5jZXMgXQorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjcxNjogc2l6ZT04MTczIEtpQiAoKzQ0MjggS2lCKSwgY291bnQ9NzEzMzIgKCszOTM2OSksIGF2ZXJhZ2U9MTE3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvbGluZWNhY2hlLnB5OjEyNzogc2l6ZT05NDAgS2lCICgrOTQwIEtpQiksIGNvdW50PTgxMDYgKCs4MTA2KSwgYXZlcmFnZT0xMTkgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjU3MTogc2l6ZT0yOTggS2lCICgrMjk4IEtpQiksIGNvdW50PTU4OSAoKzU4OSksIGF2ZXJhZ2U9NTE5IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoyODQ6IHNpemU9MTAwNSBLaUIgKCsxNjYgS2lCKSwgY291bnQ9NzQyMyAoKzE1MjYpLCBhdmVyYWdlPTEzOSBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L21pbWV0eXBlcy5weToyMTc6IHNpemU9MTEyIEtpQiAoKzExMiBLaUIpLCBjb3VudD0xMzM0ICgrMTMzNCksIGF2ZXJhZ2U9ODYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9odHRwL3NlcnZlci5weTo4NDg6IHNpemU9OTYuMCBLaUIgKCs5Ni4wIEtpQiksIGNvdW50PTEgKCsxKSwgYXZlcmFnZT05Ni4wIEtpQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9pbnNwZWN0LnB5OjE0NjU6IHNpemU9ODMuNSBLaUIgKCs4My41IEtpQiksIGNvdW50PTEwOSAoKzEwOSksIGF2ZXJhZ2U9Nzg0IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvbW9jay5weTo0OTE6IHNpemU9NzcuNyBLaUIgKCs3Ny43IEtpQiksIGNvdW50PTE0MyAoKzE0MyksIGF2ZXJhZ2U9NTU3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdXJsbGliL3BhcnNlLnB5OjQ3Njogc2l6ZT03MS44IEtpQiAoKzcxLjggS2lCKSwgY291bnQ9OTY5ICgrOTY5KSwgYXZlcmFnZT03NiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2NvbnRleHRsaWIucHk6Mzg6IHNpemU9NjcuMiBLaUIgKCs2Ny4yIEtpQiksIGNvdW50PTEyNiAoKzEyNiksIGF2ZXJhZ2U9NTQ2IEIKKworV2UgY2FuIHNlZSB0aGF0IFB5dGhvbiBoYXMgbG9hZGVkIGBgOC4yIE1pQmBgIG9mIG1vZHVsZSBkYXRhIChieXRlY29kZSBhbmQKK2NvbnN0YW50cyksIGFuZCB0aGF0IHRoaXMgaXMgYGA0LjQgTWlCYGAgbW9yZSB0aGFuIGhhZCBiZWVuIGxvYWRlZCBiZWZvcmUgdGhlCit0ZXN0cywgd2hlbiB0aGUgcHJldmlvdXMgc25hcHNob3Qgd2FzIHRha2VuLiBTaW1pbGFybHksIHRoZSA6bW9kOmBsaW5lY2FjaGVgCittb2R1bGUgaGFzIGNhY2hlZCBgYDk0MCBLaUJgYCBvZiBQeXRob24gc291cmNlIGNvZGUgdG8gZm9ybWF0IHRyYWNlYmFja3MsIGFsbAorb2YgaXQgc2luY2UgdGhlIHByZXZpb3VzIHNuYXBzaG90LgorCitJZiB0aGUgc3lzdGVtIGhhcyBsaXR0bGUgZnJlZSBtZW1vcnksIHNuYXBzaG90cyBjYW4gYmUgd3JpdHRlbiBvbiBkaXNrIHVzaW5nCit0aGUgOm1ldGg6YFNuYXBzaG90LmR1bXBgIG1ldGhvZCB0byBhbmFseXplIHRoZSBzbmFwc2hvdCBvZmZsaW5lLiBUaGVuIHVzZSB0aGUKKzptZXRoOmBTbmFwc2hvdC5sb2FkYCBtZXRob2QgcmVsb2FkIHRoZSBzbmFwc2hvdC4KKworCitHZXQgdGhlIHRyYWNlYmFjayBvZiBhIG1lbW9yeSBibG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29kZSB0byBkaXNwbGF5IHRoZSB0cmFjZWJhY2sgb2YgdGhlIGJpZ2dlc3QgbWVtb3J5IGJsb2NrOjoKKworICAgIGltcG9ydCBsaW5lY2FjaGUKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgICMgU3RvcmUgMjUgZnJhbWVzCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoMjUpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKworICAgICMgcGljayB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2sKKyAgICBzdGF0ID0gdG9wX3N0YXRzWzBdCisgICAgcHJpbnQoIiVzIG1lbW9yeSBibG9ja3M6ICUuMWYgS2lCIiAlIChzdGF0LmNvdW50LCBzdGF0LnNpemUgLyAxMDI0KSkKKyAgICBmb3IgZnJhbWUgaW4gc3RhdC50cmFjZWJhY2s6CisgICAgICAgIHByaW50KCcgIEZpbGUgIiVzIiwgbGluZSAlcycgJSAoZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubykpCisgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBwcmludCgnICAgICcgKyBsaW5lKQorCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUgKHRyYWNlYmFjayBsaW1pdGVkIHRvIDI1IGZyYW1lcyk6OgorCisgICAgOTAzIG1lbW9yeSBibG9ja3M6IDg3MC4xIEtpQgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDcxNgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwMzYKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA5MzQKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDY4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNjE5CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTU4MQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE2MTQKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9kb2N0ZXN0LnB5IiwgbGluZSAxMDEKKyAgICAgICAgaW1wb3J0IHBkYgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDI4NAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDkzOAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwNjgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA2MTkKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNTgxCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTYxNAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSIsIGxpbmUgMTcyOAorICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvdGVzdF9waWNrbGV0b29scy5weSIsIGxpbmUgMjEKKyAgICAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGV0b29scykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSAxMjc2CisgICAgICAgIHRlc3RfcnVubmVyKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSA5NzYKKyAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDc2MQorICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSAxNTYzCisgICAgICAgIG1haW4oKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvX19tYWluX18ucHkiLCBsaW5lIDMKKyAgICAgICAgcmVncnRlc3QubWFpbl9pbl90ZW1wX2N3ZCgpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvcnVucHkucHkiLCBsaW5lIDczCisgICAgICAgIGV4ZWMoY29kZSwgcnVuX2dsb2JhbHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvcnVucHkucHkiLCBsaW5lIDE2MAorICAgICAgICAiX19tYWluX18iLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKworV2UgY2FuIHNlZSB0aGF0IHRoZSBtb3N0IG1lbW9yeSB3YXMgYWxsb2NhdGVkIGluIHRoZSA6bW9kOmBpbXBvcnRsaWJgIG1vZHVsZSB0bworbG9hZCBkYXRhIChieXRlY29kZSBhbmQgY29uc3RhbnRzKSBmcm9tIG1vZHVsZXM6IGBgODcwIEtpQmBgLiBUaGUgdHJhY2ViYWNrIGlzCit3aGVyZSB0aGUgOm1vZDpgaW1wb3J0bGliYCBsb2FkZWQgZGF0YSBtb3N0IHJlY2VudGx5OiBvbiB0aGUgYGBpbXBvcnQgcGRiYGAKK2xpbmUgb2YgdGhlIDptb2Q6YGRvY3Rlc3RgIG1vZHVsZS4gVGhlIHRyYWNlYmFjayBtYXkgY2hhbmdlIGlmIGEgbmV3IG1vZHVsZSBpcworbG9hZGVkLgorCisKK1ByZXR0eSB0b3AKKy0tLS0tLS0tLS0KKworQ29kZSB0byBkaXNwbGF5IHRoZSAxMCBsaW5lcyBhbGxvY2F0aW5nIHRoZSBtb3N0IG1lbW9yeSB3aXRoIGEgcHJldHR5IG91dHB1dCwKK2lnbm9yaW5nIGBgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD5gYCBhbmQgYGA8dW5rbm93bj5gYCBmaWxlczo6CisKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIGRlZiBkaXNwbGF5X3RvcChzbmFwc2hvdCwgZ3JvdXBfYnk9J2xpbmVubycsIGxpbWl0PTEwKToKKyAgICAgICAgc25hcHNob3QgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKSwKKyAgICAgICAgKSkKKyAgICAgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcyhncm91cF9ieSkKKworICAgICAgICBwcmludCgiVG9wICVzIGxpbmVzIiAlIGxpbWl0KQorICAgICAgICBmb3IgaW5kZXgsIHN0YXQgaW4gZW51bWVyYXRlKHRvcF9zdGF0c1s6bGltaXRdLCAxKToKKyAgICAgICAgICAgIGZyYW1lID0gc3RhdC50cmFjZWJhY2tbMF0KKyAgICAgICAgICAgICMgcmVwbGFjZSAiL3BhdGgvdG8vbW9kdWxlL2ZpbGUucHkiIHdpdGggIm1vZHVsZS9maWxlLnB5IgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5zZXAuam9pbihmcmFtZS5maWxlbmFtZS5zcGxpdChvcy5zZXApWy0yOl0pCisgICAgICAgICAgICBwcmludCgiIyVzOiAlczolczogJS4xZiBLaUIiCisgICAgICAgICAgICAgICAgICAlIChpbmRleCwgZmlsZW5hbWUsIGZyYW1lLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSAvIDEwMjQpKQorCisgICAgICAgIG90aGVyID0gdG9wX3N0YXRzW2xpbWl0Ol0KKyAgICAgICAgaWYgb3RoZXI6CisgICAgICAgICAgICBzaXplID0gc3VtKHN0YXQuc2l6ZSBmb3Igc3RhdCBpbiBvdGhlcikKKyAgICAgICAgICAgIHByaW50KCIlcyBvdGhlcjogJS4xZiBLaUIiICUgKGxlbihvdGhlciksIHNpemUgLyAxMDI0KSkKKyAgICAgICAgdG90YWwgPSBzdW0oc3RhdC5zaXplIGZvciBzdGF0IGluIHRvcF9zdGF0cykKKyAgICAgICAgcHJpbnQoIlRvdGFsIGFsbG9jYXRlZCBzaXplOiAlLjFmIEtpQiIgJSAodG90YWwgLyAxMDI0KSkKKworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKworICAgICMgLi4uIHJ1biB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICBkaXNwbGF5X3RvcChzbmFwc2hvdCwgMTApCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICAyMDEzLTExLTA4IDE0OjE2OjU4LjE0OTMyMDogVG9wIDEwIGxpbmVzCisgICAgIzE6IGNvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogMjkxLjkgS2lCCisgICAgIzI6IExpYi9kb2N0ZXN0LnB5OjEyOTE6IDIwMC4yIEtpQgorICAgICMzOiB1bml0dGVzdC9jYXNlLnB5OjU3MTogMTYwLjMgS2lCCisgICAgIzQ6IExpYi9hYmMucHk6MTMzOiA5OS44IEtpQgorICAgICM1OiB1cmxsaWIvcGFyc2UucHk6NDc2OiA3MS44IEtpQgorICAgICM2OiA8c3RyaW5nPjo1OiA2Mi43IEtpQgorICAgICM3OiBMaWIvYmFzZTY0LnB5OjE0MDogNTkuOCBLaUIKKyAgICAjODogTGliL193ZWFrcmVmc2V0LnB5OjM3OiA1MS44IEtpQgorICAgICM5OiBjb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjI6IDUwLjYgS2lCCisgICAgIzEwOiB0ZXN0L3Rlc3Rfc2l0ZS5weTo1NjogNDguMCBLaUIKKyAgICA3NDk2IG90aGVyOiA0MTYxLjkgS2lCCisgICAgVG90YWwgYWxsb2NhdGVkIHNpemU6IDUyNTguOCBLaUIKKworU2VlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBmb3IgbW9yZSBvcHRpb25zLgorCisKK0FQSQorPT09CisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogY2xlYXJfdHJhY2VzKCkKKworICAgQ2xlYXIgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorCisgICBHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCAqb2JqKiB3YXMgYWxsb2NhdGVkLgorICAgUmV0dXJuIGEgOmNsYXNzOmBUcmFjZWJhY2tgIGluc3RhbmNlLCBvciBgYE5vbmVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgCisgICBtb2R1bGUgaXMgbm90IHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGRpZCBub3QgdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YKKyAgIHRoZSBvYmplY3QuCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBnYy5nZXRfcmVmZXJyZXJzYCBhbmQgOmZ1bmM6YHN5cy5nZXRzaXplb2ZgIGZ1bmN0aW9ucy4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWJhY2tfbGltaXQoKQorCisgICBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiBhIHRyYWNlLgorCisgICBUaGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIHRvCisgICBnZXQgdGhlIGxpbWl0LCBvdGhlcndpc2UgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgVGhlIGxpbWl0IGlzIHNldCBieSB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbi4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWRfbWVtb3J5KCkKKworICAgR2V0IHRoZSBjdXJyZW50IHNpemUgYW5kIHBlYWsgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIHRyYWNlZCBieSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgYXMgYSB0dXBsZTogYGAoY3VycmVudDogaW50LCBwZWFrOiBpbnQpYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKworICAgR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgdXNlZCB0byBzdG9yZQorICAgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCisgICBSZXR1cm4gYW4gOmNsYXNzOmBpbnRgLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfdHJhY2luZygpCisKKyAgICBgYFRydWVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkKKyAgICBhbGxvY2F0aW9ucywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgIFNlZSBhbHNvIDpmdW5jOmBzdGFydGAgYW5kIDpmdW5jOmBzdG9wYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdGFydChuZnJhbWU6IGludD0xKQorCisgICBTdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IGluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQ29sbGVjdGVkIHRyYWNlYmFja3Mgb2YgdHJhY2VzIHdpbGwgYmUgbGltaXRlZCB0byAqbmZyYW1lKgorICAgZnJhbWVzLiBCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWU6IHRoZSBsaW1pdCBpcyBgYDFgYC4gKm5mcmFtZSogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGBgMWBgLgorCisgICBTdG9yaW5nIG1vcmUgdGhhbiBgYDFgYCBmcmFtZSBpcyBvbmx5IHVzZWZ1bCB0byBjb21wdXRlIHN0YXRpc3RpY3MgZ3JvdXBlZAorICAgYnkgYGAndHJhY2ViYWNrJ2BgIG9yIHRvIGNvbXB1dGUgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzOiBzZWUgdGhlCisgICA6bWV0aDpgU25hcHNob3QuY29tcGFyZV90b2AgYW5kIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBtZXRob2RzLgorCisgICBTdG9yaW5nIG1vcmUgZnJhbWVzIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBDUFUgb3ZlcmhlYWQgb2YgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBVc2UgdGhlIDpmdW5jOmBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5YCBmdW5jdGlvbgorICAgdG8gbWVhc3VyZSBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4KKworICAgVGhlIDplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgKGBgUFlUSE9OVFJBQ0VNQUxMT0M9TkZSQU1FYGApIGFuZCB0aGUgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9TkZSQU1FYGAKKyAgIGNvbW1hbmQgbGluZSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3RhcnQgdHJhY2luZyBhdCBzdGFydHVwLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RvcGAsIDpmdW5jOmBpc190cmFjaW5nYCBhbmQgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdG9wKCkKKworICAgU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IHVuaW5zdGFsbCBob29rcyBvbiBQeXRob24gbWVtb3J5CisgICBhbGxvY2F0b3JzLiBBbHNvIGNsZWFycyBhbGwgcHJldmlvdXNseSBjb2xsZWN0ZWQgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MKKyAgIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIENhbGwgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgYmVmb3JlCisgICBjbGVhcmluZyB0aGVtLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBjbGVhcl90cmFjZXNgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiB0YWtlX3NuYXBzaG90KCkKKworICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIFJldHVybiBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIFRoZSBzbmFwc2hvdCBkb2VzIG5vdCBpbmNsdWRlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJlZm9yZSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgc3RhcnRlZCB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIFRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmcmFtZXMuIFVzZQorICAgdGhlICpuZnJhbWUqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbiB0byBzdG9yZSBtb3JlIGZyYW1lcy4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEKKyAgIHNuYXBzaG90LCBzZWUgdGhlIHRoZSA6ZnVuYzpgc3RhcnRgIGZ1bmN0aW9uLgorCisgICBTZWUgYWxzbyB0aGUgOmZ1bmM6YGdldF9vYmplY3RfdHJhY2ViYWNrYCBmdW5jdGlvbi4KKworCitGaWx0ZXIKKy0tLS0tLQorCisuLiBjbGFzczo6IEZpbHRlcihpbmNsdXNpdmU6IGJvb2wsIGZpbGVuYW1lX3BhdHRlcm46IHN0ciwgbGluZW5vOiBpbnQ9Tm9uZSwgYWxsX2ZyYW1lczogYm9vbD1GYWxzZSkKKworICAgRmlsdGVyIG9uIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorCisgICBTZWUgdGhlIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9uIGZvciB0aGUgc3ludGF4IG9mCisgICAqZmlsZW5hbWVfcGF0dGVybiouIFRoZSBgYCcucHljJ2BgIGFuZCBgYCcucHlvJ2BgIGZpbGUgZXh0ZW5zaW9ucyBhcmUKKyAgIHJlcGxhY2VkIHdpdGggYGAnLnB5J2BgLgorCisgICBFeGFtcGxlczoKKworICAgKiBgYEZpbHRlcihUcnVlLCBzdWJwcm9jZXNzLl9fZmlsZV9fKWBgIG9ubHkgaW5jbHVkZXMgdHJhY2VzIG9mIHRoZQorICAgICA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsIHRyYWNlbWFsbG9jLl9fZmlsZV9fKWBgIGV4Y2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZQorICAgKiBgYEZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpYGAgZXhjbHVkZXMgZW1wdHkgdHJhY2ViYWNrcworCisgICAuLiBhdHRyaWJ1dGU6OiBpbmNsdXNpdmUKKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBUcnVlYGAgKGluY2x1ZGUpLCBvbmx5IHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkCisgICAgICBpbiBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBGYWxzZWBgIChleGNsdWRlKSwgaWdub3JlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGluCisgICAgICBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKSBvZiB0aGUgZmlsdGVyLiBJZiAqbGluZW5vKiBpcyBgYE5vbmVgYCwgdGhlIGZpbHRlcgorICAgICAgbWF0Y2hlcyBhbnkgbGluZSBudW1iZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lX3BhdHRlcm4KKworICAgICAgRmlsZW5hbWUgcGF0dGVybiBvZiB0aGUgZmlsdGVyIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogYWxsX2ZyYW1lcworCisgICAgICBJZiAqYWxsX2ZyYW1lcyogaXMgYGBUcnVlYGAsIGFsbCBmcmFtZXMgb2YgdGhlIHRyYWNlYmFjayBhcmUgY2hlY2tlZC4gSWYKKyAgICAgICphbGxfZnJhbWVzKiBpcyBgYEZhbHNlYGAsIG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lIGlzIGNoZWNrZWQuCisKKyAgICAgIFRoaXMgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRyYWNlYmFjayBsaW1pdCBpcyBgYDFgYC4gIFNlZSB0aGUKKyAgICAgIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmdW5jdGlvbiBhbmQgOmF0dHI6YFNuYXBzaG90LnRyYWNlYmFja19saW1pdGAKKyAgICAgIGF0dHJpYnV0ZS4KKworCitGcmFtZQorLS0tLS0KKworLi4gY2xhc3M6OiBGcmFtZQorCisgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKworICAgVGhlIDpjbGFzczpgVHJhY2ViYWNrYCBjbGFzcyBpcyBhIHNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW5hbWUKKworICAgICAgRmlsZW5hbWUgKGBgc3RyYGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgTGluZSBudW1iZXIgKGBgaW50YGApLgorCisKK1NuYXBzaG90CistLS0tLS0tLQorCisuLiBjbGFzczo6IFNuYXBzaG90CisKKyAgIFNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24gY3JlYXRlcyBhIHNuYXBzaG90IGluc3RhbmNlLgorCisgICAuLiBtZXRob2Q6OiBjb21wYXJlX3RvKG9sZF9zbmFwc2hvdDogU25hcHNob3QsIGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90LiBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZAorICAgICAgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGluc3RhbmNlcyBncm91cGVkIGJ5ICpncm91cF9ieSouCisKKyAgICAgIFNlZSB0aGUgOm1ldGg6YHN0YXRpc3RpY3NgIG1ldGhvZCBmb3IgKmdyb3VwX2J5KiBhbmQgKmN1bXVsYXRpdmUqCisgICAgICBwYXJhbWV0ZXJzLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieTogYWJzb2x1dGUgdmFsdWUKKyAgICAgIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVgLCBhYnNvbHV0ZQorICAgICAgdmFsdWUgb2YgOmF0dHI6YFN0YXRpc3RpY0RpZmYuY291bnRfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZAorICAgICAgdGhlbiBieSA6YXR0cjpgU3RhdGlzdGljRGlmZi50cmFjZWJhY2tgLgorCisKKyAgIC4uIG1ldGhvZDo6IGR1bXAoZmlsZW5hbWUpCisKKyAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKworICAgICAgVXNlIDptZXRoOmBsb2FkYCB0byByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKKyAgIC4uIG1ldGhvZDo6IGZpbHRlcl90cmFjZXMoZmlsdGVycykKKworICAgICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCA6YXR0cjpgdHJhY2VzYAorICAgICAgc2VxdWVuY2UsICpmaWx0ZXJzKiBpcyBhIGxpc3Qgb2YgOmNsYXNzOmBGaWx0ZXJgIGluc3RhbmNlcy4gIElmICpmaWx0ZXJzKgorICAgICAgaXMgYW4gZW1wdHkgbGlzdCwgcmV0dXJuIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBjb3B5IG9mCisgICAgICB0aGUgdHJhY2VzLgorCisgICAgICBBbGwgaW5jbHVzaXZlIGZpbHRlcnMgYXJlIGFwcGxpZWQgYXQgb25jZSwgYSB0cmFjZSBpcyBpZ25vcmVkIGlmIG5vCisgICAgICBpbmNsdXNpdmUgZmlsdGVycyBtYXRjaCBpdC4gQSB0cmFjZSBpcyBpZ25vcmVkIGlmIGF0IGxlYXN0IG9uZSBleGNsdXNpdmUKKyAgICAgIGZpbHRlciBtYXRjaHMgaXQuCisKKworICAgLi4gY2xhc3NtZXRob2Q6OiBsb2FkKGZpbGVuYW1lKQorCisgICAgICBMb2FkIGEgc25hcHNob3QgZnJvbSBhIGZpbGUuCisKKyAgICAgIFNlZSBhbHNvIDptZXRoOmBkdW1wYC4KKworCisgICAuLiBtZXRob2Q6OiBzdGF0aXN0aWNzKGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIEdldCBzdGF0aXN0aWNzIGFzIGEgc29ydGVkIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNgIGluc3RhbmNlcyBncm91cGVkCisgICAgICBieSAqZ3JvdXBfYnkqOgorCisgICAgICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgZ3JvdXBfYnkgICAgICAgICAgICAgICBkZXNjcmlwdGlvbgorICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgICAgICAgICAgZmlsZW5hbWUKKyAgICAgIGBgJ2xpbmVubydgYCAgICAgICAgICAgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyCisgICAgICBgYCd0cmFjZWJhY2snYGAgICAgICAgIHRyYWNlYmFjaworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgSWYgKmN1bXVsYXRpdmUqIGlzIGBgVHJ1ZWBgLCBjdW11bGF0ZSBzaXplIGFuZCBjb3VudCBvZiBtZW1vcnkgYmxvY2tzIG9mCisgICAgICBhbGwgZnJhbWVzIG9mIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSwgbm90IG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lLgorICAgICAgVGhlIGN1bXVsYXRpdmUgbW9kZSBjYW4gb25seSBiZSB1c2VkIHdpdGggKmdyb3VwX2J5KiBlcXVhbHMgdG8KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgIGFuZCBgYCdsaW5lbm8nYGAuCisKKyAgICAgIFRoZSByZXN1bHQgaXMgc29ydGVkIGZyb20gdGhlIGJpZ2dlc3QgdG8gdGhlIHNtYWxsZXN0IGJ5OgorICAgICAgOmF0dHI6YFN0YXRpc3RpYy5zaXplYCwgOmF0dHI6YFN0YXRpc3RpYy5jb3VudGAgYW5kIHRoZW4gYnkKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMudHJhY2ViYWNrYC4KKworCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2tfbGltaXQKKworICAgICAgTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrIG9mIDphdHRyOmB0cmFjZXNgOgorICAgICAgcmVzdWx0IG9mIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgd2hlbiB0aGUgc25hcHNob3Qgd2FzIHRha2VuLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZXMKKworICAgICAgVHJhY2VzIG9mIGFsbCBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob246IHNlcXVlbmNlIG9mCisgICAgICA6Y2xhc3M6YFRyYWNlYCBpbnN0YW5jZXMuCisKKyAgICAgIFRoZSBzZXF1ZW5jZSBoYXMgYW4gdW5kZWZpbmVkIG9yZGVyLiBVc2UgdGhlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYAorICAgICAgbWV0aG9kIHRvIGdldCBhIHNvcnRlZCBsaXN0IG9mIHN0YXRpc3RpY3MuCisKKworU3RhdGlzdGljCistLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdGF0aXN0aWMKKworICAgU3RhdGlzdGljIG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgOmZ1bmM6YFNuYXBzaG90LnN0YXRpc3RpY3NgIHJldHVybnMgYSBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMuCisKKyAgIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIChgYGludGBgKS4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrCisKKyAgICAgIFRyYWNlYmFjayB3aGVyZSB0aGUgbWVtb3J5IGJsb2NrIHdhcyBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworU3RhdGlzdGljRGlmZgorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFN0YXRpc3RpY0RpZmYKKworICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gYW4gb2xkIGFuZCBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5jb21wYXJlX3RvYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgCisgICBpbnN0YW5jZXMuIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY2AgY2xhc3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50CisKKyAgICAgIE51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOiBgYDBgYCBpZgorICAgICAgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50X2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBiZXR3ZWVuIHRoZSBvbGQgYW5kIHRoZSBuZXcKKyAgICAgIHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4KKyAgICAgIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOgorICAgICAgYGAwYGAgaWYgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemVfZGlmZgorCisgICAgICBEaWZmZXJlbmNlIG9mIHRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBiZXR3ZWVuIHRoZSBvbGQgYW5kCisgICAgICB0aGUgbmV3IHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbgorICAgICAgYWxsb2NhdGVkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9ja3Mgd2VyZSBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworVHJhY2UKKy0tLS0tCisKKy4uIGNsYXNzOjogVHJhY2UKKworICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisKKyAgIFRoZSA6YXR0cjpgU25hcHNob3QudHJhY2VzYCBhdHRyaWJ1dGUgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YFRyYWNlYAorICAgaW5zdGFuY2VzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlYmFjaworLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogVHJhY2ViYWNrCisKKyAgIFNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcyBzb3J0ZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgdG8KKyAgIHRoZSBvbGRlc3QgZnJhbWUuCisKKyAgIEEgdHJhY2ViYWNrIGNvbnRhaW5zIGF0IGxlYXN0IGBgMWBgIGZyYW1lLiBJZiB0aGUgYGB0cmFjZW1hbGxvY2BgIG1vZHVsZQorICAgZmFpbGVkIHRvIGdldCBhIGZyYW1lLCB0aGUgZmlsZW5hbWUgYGAiPHVua25vd24+ImBgIGF0IGxpbmUgbnVtYmVyIGBgMGBgIGlzCisgICB1c2VkLgorCisgICBXaGVuIGEgc25hcHNob3QgaXMgdGFrZW4sIHRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvCisgICA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBTZWUgdGhlIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbi4KKworICAgVGhlIDphdHRyOmBUcmFjZS50cmFjZWJhY2tgIGF0dHJpYnV0ZSBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgIGluc3RhbmNlLgorCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdAppbmRleCA2OTU0ODBmLi5jNGY1N2U0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHlwZXMucnN0CkBAIC0xMDcsOSArMTA3LDM1IEBACiAgICBDIi4pCiAKIAotLi4gZGF0YTo6IE1vZHVsZVR5cGUKKy4uIGNsYXNzOjogTW9kdWxlVHlwZShuYW1lLCBkb2M9Tm9uZSkKIAotICAgVGhlIHR5cGUgb2YgbW9kdWxlcy4KKyAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBtb2R1bGVzIDxtb2R1bGU+YC4gQ29uc3RydWN0b3IgdGFrZXMgdGhlIG5hbWUgb2YgdGhlCisgICBtb2R1bGUgdG8gYmUgY3JlYXRlZCBhbmQgb3B0aW9uYWxseSBpdHMgOnRlcm06YGRvY3N0cmluZ2AuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fZG9jX18KKworICAgICAgVGhlIDp0ZXJtOmBkb2NzdHJpbmdgIG9mIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2xvYWRlcl9fCisKKyAgICAgIFRoZSA6dGVybTpgbG9hZGVyYCB3aGljaCBsb2FkZWQgdGhlIG1vZHVsZS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KKworICAgLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgICAgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KKworICAgLi4gYXR0cmlidXRlOjogX19wYWNrYWdlX18KKworICAgICAgV2hpY2ggOnRlcm06YHBhY2thZ2VgIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIElmIHRoZSBtb2R1bGUgaXMgdG9wLWxldmVsCisgICAgICAoaS5lLiBub3QgYSBwYXJ0IG9mIGFueSBzcGVjaWZpYyBwYWNrYWdlKSB0aGVuIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldAorICAgICAgdG8gYGAnJ2BgLCBlbHNlIGl0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgKHdoaWNoIGNhbiBiZQorICAgICAgOmF0dHI6YF9fbmFtZV9fYCBpZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSBpdHNlbGYpLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIERlZmF1bHRzIHRvIGBgTm9uZWBgLiBQcmV2aW91c2x5IHRoZSBhdHRyaWJ1dGUgd2FzIG9wdGlvbmFsLgogCiAKIC4uIGRhdGE6OiBUcmFjZWJhY2tUeXBlCkBAIC0yMTIsNiArMjM4LDggQEAKICAgICAgICAgICAgICAgIGtleXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXykKICAgICAgICAgICAgICAgIGl0ZW1zID0gKCJ7fT17IXJ9Ii5mb3JtYXQoaywgc2VsZi5fX2RpY3RfX1trXSkgZm9yIGsgaW4ga2V5cykKICAgICAgICAgICAgICAgIHJldHVybiAie30oe30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywgIiwgIi5qb2luKGl0ZW1zKSkKKyAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiAgICBgYFNpbXBsZU5hbWVzcGFjZWBgIG1heSBiZSB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgYGBjbGFzcyBOUzogcGFzc2BgLgogICAgSG93ZXZlciwgZm9yIGEgc3RydWN0dXJlZCByZWNvcmQgdHlwZSB1c2UgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0IGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CmluZGV4IGFkNzBkZDkuLjNiM2QzYTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKQEAgLTE1LDggKzE1LDggQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSB3aGljaAogZGVmaW5lcyBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgY29udGFpbmVkIGluCi10aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjEuMAotPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZD5gXy4KK3RoaXMgZGF0YWJhc2UgaXMgY29tcGlsZWQgZnJvbSB0aGUgYFVDRCB2ZXJzaW9uIDYuMy4wCis8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkPmBfLgogCiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSBVbmljb2RlCiBTdGFuZGFyZCBBbm5leCAjNDQsIGAiVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UiCkBAIC0xNjYsNiArMTY2LDYgQEAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2QvTmFtZUFsaWFzZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVBbGlhc2VzLnR4dAogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVkU2VxdWVuY2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKaW5kZXggZDdkNjk3ZC4uNDQ0YzIwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKQEAgLTI3Nyw2ICsyNzcsMjAgQEAKICAgICAgICAuLi4KICAgICBBdHRyaWJ1dGVFcnJvcjogb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ29sZF9tZXRob2QnCiAKK1VzaW5nIGEgc3BlY2lmaWNhdGlvbiBhbHNvIGVuYWJsZXMgYSBzbWFydGVyIG1hdGNoaW5nIG9mIGNhbGxzIG1hZGUgdG8gdGhlCittb2NrLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgc29tZSBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIGFzIHBvc2l0aW9uYWwgb3IKK25hbWVkIGFyZ3VtZW50czo6CisKKyAgID4+PiBkZWYgZihhLCBiLCBjKTogcGFzcworICAgLi4uCisgICA+Pj4gbW9jayA9IE1vY2soc3BlYz1mKQorICAgPj4+IG1vY2soMSwgMiwgMykKKyAgIDxNb2NrIG5hbWU9J21vY2soKScgaWQ9JzE0MDE2MTU4MDQ1NjU3Nic+CisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworSWYgeW91IHdhbnQgdGhpcyBzbWFydGVyIG1hdGNoaW5nIHRvIGFsc28gd29yayB3aXRoIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jaywKK3lvdSBjYW4gdXNlIDpyZWY6YGF1dG8tc3BlY2NpbmcgPGF1dG8tc3BlY2Npbmc+YC4KKwogSWYgeW91IHdhbnQgYSBzdHJvbmdlciBmb3JtIG9mIHNwZWNpZmljYXRpb24gdGhhdCBwcmV2ZW50cyB0aGUgc2V0dGluZwogb2YgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUgZ2V0dGluZyBvZiB0aGVtIHRoZW4geW91IGNhbiB1c2UKIGBzcGVjX3NldGAgaW5zdGVhZCBvZiBgc3BlY2AuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CmluZGV4IDAyNDNkN2YuLjEzNWFiZWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CkBAIC0yNjQsNyArMjY0LDYgQEAKICAgICAgICAgICAgIDxNb2NrIG5hbWU9J21vY2subWV0aG9kKCknIGlkPScuLi4nPgogICAgICAgICAgICAgPj4+IG1vY2subWV0aG9kLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCB0ZXN0PSd3b3cnKQogCi0KICAgICAuLiBtZXRob2Q6OiBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgqYXJncywgKiprd2FyZ3MpCiAKICAgICAgICBBc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIGV4YWN0bHkgb25jZSBhbmQgd2l0aCB0aGUgc3BlY2lmaWVkCkBAIC02ODUsNiArNjg0LDI3IEBACiAgICAgICAuLi4KICAgICBLZXlFcnJvcgogCitBIGNhbGxhYmxlIG1vY2sgd2hpY2ggd2FzIGNyZWF0ZWQgd2l0aCBhICpzcGVjKiAob3IgYSAqc3BlY19zZXQqKSB3aWxsCitpbnRyb3NwZWN0IHRoZSBzcGVjaWZpY2F0aW9uIG9iamVjdCdzIHNpZ25hdHVyZSB3aGVuIG1hdGNoaW5nIGNhbGxzIHRvCit0aGUgbW9jay4gIFRoZXJlZm9yZSwgaXQgY2FuIG1hdGNoIHRoZSBhY3R1YWwgY2FsbCdzIGFyZ3VtZW50cyByZWdhcmRsZXNzCitvZiB3aGV0aGVyIHRoZXkgd2VyZSBwYXNzZWQgcG9zaXRpb25hbGx5IG9yIGJ5IG5hbWU6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIGM9MykKKyAgIDxNb2NrIG5hbWU9J21vY2soKScgaWQ9JzE0MDE2MTU4MDQ1NjU3Nic+CisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorCitUaGlzIGFwcGxpZXMgdG8gOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfd2l0aGAsCis6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgLCA6bWV0aDpgfk1vY2suYXNzZXJ0X2hhc19jYWxsc2AgYW5kCis6bWV0aDpgfk1vY2suYXNzZXJ0X2FueV9jYWxsYC4gIFdoZW4gOnJlZjpgYXV0by1zcGVjY2luZ2AsIGl0IHdpbGwgYWxzbworYXBwbHkgdG8gbWV0aG9kIGNhbGxzIG9uIHRoZSBtb2NrIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHNpZ25hdHVyZSBpbnRyb3NwZWN0aW9uIG9uIHNwZWNjZWQgYW5kIGF1dG9zcGVjY2VkIG1vY2sgb2JqZWN0cy4KKwogCiAuLiBjbGFzczo6IFByb3BlcnR5TW9jaygqYXJncywgKiprd2FyZ3MpCiAKQEAgLTE5NjksOCArMTk4OSwxMyBAQAogICAgIGRlZmF1bHQpIHRoZW4gYSBgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYH5pby5JT0Jhc2UucmVhZGAgbWV0aG9kIG9mIHRoZSBmaWxlIGhhbmRsZQotICAgIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYCwKKyAgICA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZWAsIGFuZCA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZXNgIG1ldGhvZHMKKyAgICBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgQ2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIHRha2UgZGF0YSBmcm9tCisgICAgYHJlYWRfZGF0YWAgdW50aWwgaXQgaXMgZGVwbGV0ZWQuICBUaGUgbW9jayBvZiB0aGVzZSBtZXRob2RzIGlzIHByZXR0eQorICAgIHNpbXBsaXN0aWMuICBJZiB5b3UgbmVlZCBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZGF0YSB0aGF0IHlvdSBhcmUgZmVlZGluZyB0bworICAgIHRoZSB0ZXN0ZWQgY29kZSB5b3Ugd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB0aGlzIG1vY2sgZm9yIHlvdXJzZWxmLgorICAgIGByZWFkX2RhdGFgIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgogCiBVc2luZyBgb3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXIgaXMgYSBncmVhdCB3YXkgdG8gZW5zdXJlIHlvdXIgZmlsZSBoYW5kbGVzCiBhcmUgY2xvc2VkIHByb3Blcmx5IGFuZCBpcyBiZWNvbWluZyBjb21tb246OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CmluZGV4IDUxNTdiMjYuLjYzMTA2MjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKQEAgLTU2Myw2ICs1NjMsNjggQEAKIFNraXBwZWQgY2xhc3NlcyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcENsYXNzYCBvciA6bWV0aDpgdGVhckRvd25DbGFzc2AgcnVuLgogCiAKKy4uIF9zdWJ0ZXN0czoKKworRGlzdGluZ3Vpc2hpbmcgdGVzdCBpdGVyYXRpb25zIHVzaW5nIHN1YnRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1doZW4gc29tZSBvZiB5b3VyIHRlc3RzIGRpZmZlciBvbmx5IGJ5IGEgc29tZSB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzLCBmb3IKK2luc3RhbmNlIHNvbWUgcGFyYW1ldGVycywgdW5pdHRlc3QgYWxsb3dzIHlvdSB0byBkaXN0aW5ndWlzaCB0aGVtIGluc2lkZQordGhlIGJvZHkgb2YgYSB0ZXN0IG1ldGhvZCB1c2luZyB0aGUgOm1ldGg6YH5UZXN0Q2FzZS5zdWJUZXN0YCBjb250ZXh0IG1hbmFnZXIuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRlc3Q6OgorCisgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICBkZWYgdGVzdF9ldmVuKHNlbGYpOgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgVGVzdCB0aGF0IG51bWJlcnMgYmV0d2VlbiAwIGFuZCA1IGFyZSBhbGwgZXZlbi4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDYpOgorICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0xKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTMpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9NSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCitXaXRob3V0IHVzaW5nIGEgc3VidGVzdCwgZXhlY3V0aW9uIHdvdWxkIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUsCithbmQgdGhlIGVycm9yIHdvdWxkIGJlIGxlc3MgZWFzeSB0byBkaWFnbm9zZSBiZWNhdXNlIHRoZSB2YWx1ZSBvZiBgYGlgYAord291bGRuJ3QgYmUgZGlzcGxheWVkOjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisKIC4uIF91bml0dGVzdC1jb250ZW50czoKIAogQ2xhc3NlcyBhbmQgZnVuY3Rpb25zCkBAIC02NzYsNiArNzM4LDIxIEBACiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisgICAuLiBtZXRob2Q6OiBzdWJUZXN0KG1zZz1Ob25lLCAqKnBhcmFtcykKKworICAgICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSBlbmNsb3NlZCBjb2RlIGJsb2NrIGFzIGEKKyAgICAgIHN1YnRlc3QuICAqbXNnKiBhbmQgKnBhcmFtcyogYXJlIG9wdGlvbmFsLCBhcmJpdHJhcnkgdmFsdWVzIHdoaWNoIGFyZQorICAgICAgZGlzcGxheWVkIHdoZW5ldmVyIGEgc3VidGVzdCBmYWlscywgYWxsb3dpbmcgeW91IHRvIGlkZW50aWZ5IHRoZW0KKyAgICAgIGNsZWFybHkuCisKKyAgICAgIEEgdGVzdCBjYXNlIGNhbiBjb250YWluIGFueSBudW1iZXIgb2Ygc3VidGVzdCBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgdGhleSBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLgorCisgICAgICBTZWUgOnJlZjpgc3VidGVzdHNgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAgICAuLiBtZXRob2Q6OiBkZWJ1ZygpCiAKICAgICAgIFJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkCkBAIC04MDYsOCArODgzLDggQEAKIAogCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhhdCBleGNlcHRpb25zIGFuZCB3YXJuaW5ncyBhcmUgcmFpc2VkIHVzaW5nCi0gICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBwcm9kdWN0aW9uIG9mIGV4Y2VwdGlvbnMsIHdhcm5pbmdzIGFuZAorICAgbG9nIG1lc3NhZ2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAgICB8IE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3MgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gICAgIHwKQEAgLTgyNCw2ICs5MDEsOSBAQAogICAgfCA6bWV0aDpgYXNzZXJ0V2FybnNSZWdleCh3YXJuLCByLCBmdW4sICphcmdzLCAqKmt3ZHMpICAgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgKndhcm4qIHwgMy4yICAgICAgICB8CiAgICB8IDxUZXN0Q2FzZS5hc3NlcnRXYXJuc1JlZ2V4PmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIG1lc3NhZ2UgbWF0Y2hlcyByZWdleCAqciogICAgfCAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGBgd2l0aGBgIGJsb2NrIGxvZ3Mgb24gKmxvZ2dlciogIHwgMy40ICAgICAgICB8CisgICB8IDxUZXN0Q2FzZS5hc3NlcnRMb2dzPmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIG1pbmltdW0gKmxldmVsKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgKmFyZ3MsICoqa3dkcykKICAgICAgICAgICAgICAgIGFzc2VydFJhaXNlcyhleGNlcHRpb24sIG1zZz1Ob25lKQpAQCAtOTU0LDYgKzEwMzQsNDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBBZGRlZCB0aGUgKm1zZyoga2V5d29yZCBhcmd1bWVudCB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGFzc2VydExvZ3MobG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpCisKKyAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHRlc3QgdGhhdCBhdCBsZWFzdCBvbmUgbWVzc2FnZSBpcyBsb2dnZWQgb24KKyAgICAgIHRoZSAqbG9nZ2VyKiBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLCB3aXRoIGF0IGxlYXN0IHRoZSBnaXZlbgorICAgICAgKmxldmVsKi4KKworICAgICAgSWYgZ2l2ZW4sICpsb2dnZXIqIHNob3VsZCBiZSBhIDpjbGFzczpgbG9nZ2luZy5Mb2dnZXJgIG9iamVjdCBvciBhCisgICAgICA6Y2xhc3M6YHN0cmAgZ2l2aW5nIHRoZSBuYW1lIG9mIGEgbG9nZ2VyLiAgVGhlIGRlZmF1bHQgaXMgdGhlIHJvb3QKKyAgICAgIGxvZ2dlciwgd2hpY2ggd2lsbCBjYXRjaCBhbGwgbWVzc2FnZXMuCisKKyAgICAgIElmIGdpdmVuLCAqbGV2ZWwqIHNob3VsZCBiZSBlaXRoZXIgYSBudW1lcmljIGxvZ2dpbmcgbGV2ZWwgb3IKKyAgICAgIGl0cyBzdHJpbmcgZXF1aXZhbGVudCAoZm9yIGV4YW1wbGUgZWl0aGVyIGBgIkVSUk9SImBgIG9yCisgICAgICA6YXR0cjpgbG9nZ2luZy5FUlJPUmApLiAgVGhlIGRlZmF1bHQgaXMgOmF0dHI6YGxvZ2dpbmcuSU5GT2AuCisKKyAgICAgIFRoZSB0ZXN0IHBhc3NlcyBpZiBhdCBsZWFzdCBvbmUgbWVzc2FnZSBlbWl0dGVkIGluc2lkZSB0aGUgYGB3aXRoYGAKKyAgICAgIGJsb2NrIG1hdGNoZXMgdGhlICpsb2dnZXIqIGFuZCAqbGV2ZWwqIGNvbmRpdGlvbnMsIG90aGVyd2lzZSBpdCBmYWlscy4KKworICAgICAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyIGlzIGEgcmVjb3JkaW5nIGhlbHBlcgorICAgICAgd2hpY2gga2VlcHMgdHJhY2tzIG9mIHRoZSBtYXRjaGluZyBsb2cgbWVzc2FnZXMuICBJdCBoYXMgdHdvCisgICAgICBhdHRyaWJ1dGVzOgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiByZWNvcmRzCisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YGxvZ2dpbmcuTG9nUmVjb3JkYCBvYmplY3RzIG9mIHRoZSBtYXRjaGluZworICAgICAgICAgbG9nIG1lc3NhZ2VzLgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiBvdXRwdXQKKworICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgc3RyYCBvYmplY3RzIHdpdGggdGhlIGZvcm1hdHRlZCBvdXRwdXQgb2YKKyAgICAgICAgIG1hdGNoaW5nIG1lc3NhZ2VzLgorCisgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycsIGxldmVsPSdJTkZPJykgYXMgY206CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogICAgVGhlcmUgYXJlIGFsc28gb3RoZXIgbWV0aG9kcyB1c2VkIHRvIHBlcmZvcm0gbW9yZSBzcGVjaWZpYyBjaGVja3MsIHN1Y2ggYXM6CiAKQEAgLTEzOTMsMTUgKzE1MTQsMjQgQEAKIAogICAgICAgVGVzdHMgZ3JvdXBlZCBieSBhIDpjbGFzczpgVGVzdFN1aXRlYCBhcmUgYWx3YXlzIGFjY2Vzc2VkIGJ5IGl0ZXJhdGlvbi4KICAgICAgIFN1YmNsYXNzZXMgY2FuIGxhemlseSBwcm92aWRlIHRlc3RzIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYC4gTm90ZQotICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXliZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBvbiBhIHNpbmdsZSBzdWl0ZQotICAgICAgKGZvciBleGFtcGxlIHdoZW4gY291bnRpbmcgdGVzdHMgb3IgY29tcGFyaW5nIGZvciBlcXVhbGl0eSkKLSAgICAgIHNvIHRoZSB0ZXN0cyByZXR1cm5lZCBtdXN0IGJlIHRoZSBzYW1lIGZvciByZXBlYXRlZCBpdGVyYXRpb25zLgorICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUgKGZvcgorICAgICAgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpIHNvIHRoZSB0ZXN0cworICAgICAgcmV0dXJuZWQgYnkgcmVwZWF0ZWQgaXRlcmF0aW9ucyBiZWZvcmUgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGZvciBlYWNoIGNhbGwgaXRlcmF0aW9uLiBBZnRlciA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAsIGNhbGxlcnMgc2hvdWxkCisgICAgICBub3QgcmVseSBvbiB0aGUgdGVzdHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgdW5sZXNzIHRoZSBjYWxsZXIgdXNlcyBhCisgICAgICBzdWJjbGFzcyB0aGF0IG92ZXJyaWRlcyA6bWV0aDpgVGVzdFN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleGAgdG8gcHJlc2VydmUKKyAgICAgIHRlc3QgcmVmZXJlbmNlcy4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBhY2Nlc3NlZCB0ZXN0cyBkaXJlY3RseSByYXRoZXIKICAgICAgICAgIHRoYW4gdGhyb3VnaCBpdGVyYXRpb24sIHNvIG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYCB3YXNuJ3Qgc3VmZmljaWVudAogICAgICAgICAgZm9yIHByb3ZpZGluZyB0ZXN0cy4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBoZWxkIHJlZmVyZW5jZXMgdG8gZWFjaAorICAgICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgYWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLiBTdWJjbGFzc2VzIGNhbiByZXN0b3JlCisgICAgICAgICB0aGF0IGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgLgorCiAgICBJbiB0aGUgdHlwaWNhbCB1c2FnZSBvZiBhIDpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3QsIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QKICAgIGlzIGludm9rZWQgYnkgYSA6Y2xhc3M6YFRlc3RSdW5uZXJgIHJhdGhlciB0aGFuIGJ5IHRoZSBlbmQtdXNlciB0ZXN0IGhhcm5lc3MuCiAKQEAgLTE1MDAsNyArMTYzMCw5IEBACiAgICAgICBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KIAogICAgICAgSWYgaW1wb3J0aW5nIGEgbW9kdWxlIGZhaWxzLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBzeW50YXggZXJyb3IsIHRoZW4gdGhpcwotICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuCisgICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4gIElmIHRoZQorICAgICAgaW1wb3J0IGZhaWx1cmUgaXMgZHVlIHRvIDpleGM6YFNraXBUZXN0YCBiZWluZyByYWlzZWQsIGl0IHdpbGwgYmUgcmVjb3JkZWQKKyAgICAgIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuIGVycm9yLgogCiAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQogICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYApAQCAtMTUxOSw2ICsxNjUxLDE1IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgTW9kdWxlcyB0aGF0IHJhaXNlIDpleGM6YFNraXBUZXN0YCBvbiBpbXBvcnQgYXJlIHJlY29yZGVkIGFzIHNraXBzLAorICAgICAgICAgbm90IGVycm9ycy4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSBleGVjdXRpb24gb3JkZXIgZm9yIGEKKyAgICAgICAgIGdpdmVuIHRlc3Qgc3VpdGUgaXMgdGhlIHNhbWUgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSdzIG9yZGVyaW5nCisgICAgICAgICBpcyBub3QgZGVwZW5kZW50IG9uIGZpbGUgbmFtZSBsaWtlIGluIGV4dDMvNC4KKwogCiAgICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgb2YgYSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBieQogICAgc3ViY2xhc3Npbmcgb3IgYXNzaWdubWVudCBvbiBhbiBpbnN0YW5jZToKQEAgLTE3MjgsNiArMTg2OSwyMiBAQAogICAgICAgOmF0dHI6YHVuZXhwZWN0ZWRTdWNjZXNzZXNgIGF0dHJpYnV0ZS4KIAogCisgICAuLiBtZXRob2Q6OiBhZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIG91dGNvbWUpCisKKyAgICAgIENhbGxlZCB3aGVuIGEgc3VidGVzdCBmaW5pc2hlcy4gICp0ZXN0KiBpcyB0aGUgdGVzdCBjYXNlCisgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXN0IG1ldGhvZC4gICpzdWJ0ZXN0KiBpcyBhIGN1c3RvbQorICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgc3VidGVzdC4KKworICAgICAgSWYgKm91dGNvbWUqIGlzIDpjb25zdDpgTm9uZWAsIHRoZSBzdWJ0ZXN0IHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwKKyAgICAgIGl0IGZhaWxlZCB3aXRoIGFuIGV4Y2VwdGlvbiB3aGVyZSAqb3V0Y29tZSogaXMgYSB0dXBsZSBvZiB0aGUgZm9ybQorICAgICAgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6IGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZyB3aGVuIHRoZSBvdXRjb21lIGlzIGEKKyAgICAgIHN1Y2Nlc3MsIGFuZCByZWNvcmRzIHN1YnRlc3QgZmFpbHVyZXMgYXMgbm9ybWFsIGZhaWx1cmVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IFRleHRUZXN0UmVzdWx0KHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpCiAKICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBUZXN0UmVzdWx0YCB1c2VkIGJ5IHRoZQpAQCAtMTgzNyw2ICsxOTk0LDEwIEBACiAgICAgICBUaGUgKnZlcmJvc2l0eSosICpmYWlsZmFzdCosICpjYXRjaGJyZWFrKiwgKmJ1ZmZlcioKICAgICAgIGFuZCAqd2FybmluZ3MqIHBhcmFtZXRlcnMgd2VyZSBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdFRlc3QqIHBhcmFtZXRlciB3YXMgY2hhbmdlZCB0byBhbHNvIGFjY2VwdCBhbiBpdGVyYWJsZSBvZgorICAgICAgdGVzdCBuYW1lcy4KKwogCiBsb2FkX3Rlc3RzIFByb3RvY29sCiAjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAppbmRleCAyNWMxM2JkLi45ZmI1OGY1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKQEAgLTQ2LDYgKzQ2LDEzIEBACiAKICAgICAgIFRoaXMgaXMgdXN1YWxseSBhIHN0cmluZyBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHRoaXMgZXJyb3IuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgICAgVGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBmb3IgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IGNhdXNlIHRoZQorICAgICAgOmV4YzpgSFRUUEVycm9yYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGV4Y2VwdGlvbjo6IENvbnRlbnRUb29TaG9ydEVycm9yKG1zZywgY29udGVudCkKIAogICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gdGhlIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QudXJscmV0cmlldmVgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKaW5kZXggMTBhYTI2MC4uYzRkZDdlMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdApAQCAtMjIwLDEwICsyMjAsMTUgQEAKICAgICptZXRob2QqIHNob3VsZCBiZSBhIHN0cmluZyB0aGF0IGluZGljYXRlcyB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZCB0aGF0CiAgICB3aWxsIGJlIHVzZWQgKGUuZy4gYGAnSEVBRCdgYCkuICBJdHMgdmFsdWUgaXMgc3RvcmVkIGluIHRoZQogICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGFuZCBpcyB1c2VkIGJ5IDptZXRoOmBnZXRfbWV0aG9kKClgLgorICAgU3ViY2xhc3NlcyBtYXkgaW5kaWNhdGUgYSBkZWZhdWx0IG1ldGhvZCBieSBzZXR0aW5nIHRoZQorICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGluIHRoZSBjbGFzcyBpdHNlbGYuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIGFyZ3VtZW50IGlzIGFkZGVkIHRvIHRoZSBSZXF1ZXN0IGNsYXNzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgRGVmYXVsdCA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIG1heSBiZSBpbmRpY2F0ZWQgYXQgdGhlIGNsYXNzIGxldmVsLgorCiAKIC4uIGNsYXNzOjogT3BlbmVyRGlyZWN0b3IoKQogCkBAIC0zNTYsNiArMzYxLDExIEBACiAKICAgIE9wZW4gbG9jYWwgZmlsZXMuCiAKKy4uIGNsYXNzOjogRGF0YUhhbmRsZXIoKQorCisgICBPcGVuIGRhdGEgVVJMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGNsYXNzOjogRlRQSGFuZGxlcigpCiAKQEAgLTM5MSw2ICs0MDEsMTIgQEAKIAogICAgVGhlIG9yaWdpbmFsIFVSTCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXF1ZXN0LmZ1bGxfdXJsIGlzIGEgcHJvcGVydHkgd2l0aCBzZXR0ZXIsIGdldHRlciBhbmQgYSBkZWxldGVyLiBHZXR0aW5nCisgICA6YXR0cjpgflJlcXVlc3QuZnVsbF91cmxgIHJldHVybnMgdGhlIG9yaWdpbmFsIHJlcXVlc3QgVVJMIHdpdGggdGhlCisgICBmcmFnbWVudCwgaWYgaXQgd2FzIHByZXNlbnQuCisKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QudHlwZQogCiAgICBUaGUgVVJJIHNjaGVtZS4KQEAgLTQxMyw2ICs0MjksMTAgQEAKIAogICAgVGhlIGVudGl0eSBib2R5IGZvciB0aGUgcmVxdWVzdCwgb3IgTm9uZSBpZiBub3Qgc3BlY2lmaWVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdpbmcgdmFsdWUgb2YgOmF0dHI6YFJlcXVlc3QuZGF0YWAgbm93IGRlbGV0ZXMgIkNvbnRlbnQtTGVuZ3RoIgorICAgICAgaGVhZGVyIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNldCBvciBjYWxjdWxhdGVkLgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnVudmVyaWZpYWJsZQogCiAgICBib29sZWFuLCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUgYXMgZGVmaW5lZApAQCAtNDYxLDEwICs0ODEsMjIgQEAKICAgIHVucmVkaXJlY3RlZCkuCiAKIAorLi4gbWV0aG9kOjogUmVxdWVzdC5yZW1vdmVfaGVhZGVyKGhlYWRlcikKKworICAgUmVtb3ZlIG5hbWVkIGhlYWRlciBmcm9tIHRoZSByZXF1ZXN0IGluc3RhbmNlIChib3RoIGZyb20gcmVndWxhciBhbmQKKyAgIHVucmVkaXJlY3RlZCBoZWFkZXJzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfZnVsbF91cmwoKQogCiAgICBSZXR1cm4gdGhlIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgIFJldHVybnMgOmF0dHI6YFJlcXVlc3QuZnVsbF91cmxgCisKIAogLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKIApAQCAtNDczLDU0ICs1MDUsNiBAQAogICAgVVJMIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAogCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmFkZF9kYXRhKGRhdGEpCi0KLSAgIFNldCB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBkYXRhIHRvICpkYXRhKi4gIFRoaXMgaXMgaWdub3JlZCBieSBhbGwgaGFuZGxlcnMgZXhjZXB0Ci0gICBIVFRQIGhhbmRsZXJzIC0tLSBhbmQgdGhlcmUgaXQgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcsIGFuZCB3aWxsIGNoYW5nZSB0aGUKLSAgIHJlcXVlc3QgdG8gYmUgYGBQT1NUYGAgcmF0aGVyIHRoYW4gYGBHRVRgYC4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5oYXNfZGF0YSgpCi0KLSAgIFJldHVybiB3aGV0aGVyIHRoZSBpbnN0YW5jZSBoYXMgYSBub24tXCBgYE5vbmVgYCBkYXRhLiBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2RhdGEoKQotCi0gICBSZXR1cm4gdGhlIGluc3RhbmNlJ3MgZGF0YS4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF90eXBlKCkKLQotICAgUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBVUkwgLS0tIGFsc28ga25vd24gYXMgdGhlIHNjaGVtZS4gIERlcHJlY2F0ZWQgaW4gMy4zLAotICAgdXNlIDphdHRyOmBSZXF1ZXN0LnR5cGVgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgaG9zdCB0byB3aGljaCBhIGNvbm5lY3Rpb24gd2lsbCBiZSBtYWRlLiBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X3NlbGVjdG9yKCkKLQotICAgUmV0dXJuIHRoZSBzZWxlY3RvciAtLS0gdGhlIHBhcnQgb2YgdGhlIFVSTCB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Quc2VsZWN0b3JgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hlYWRlcihoZWFkZXJfbmFtZSwgZGVmYXVsdD1Ob25lKQogCiAgICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBoZWFkZXIuIElmIHRoZSBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHJldHVybgpAQCAtNTMxLDI2ICs1MTUsMTAgQEAKIAogICAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgKGhlYWRlcl9uYW1lLCBoZWFkZXJfdmFsdWUpIG9mIHRoZSBSZXF1ZXN0IGhlYWRlcnMuCiAKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLQotICAgUmV0dXJuIHRoZSByZXF1ZXN0LWhvc3Qgb2YgdGhlIG9yaWdpbiB0cmFuc2FjdGlvbiwgYXMgZGVmaW5lZCBieQotICAgOnJmYzpgMjk2NWAuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLgotICAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5vcmlnaW5fcmVxX2hvc3RgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5pc191bnZlcmlmaWFibGUoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUsIGFzIGRlZmluZWQgYnkgUkZDIDI5NjUuIFNlZSB0aGUKLSAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QudW52ZXJpZmlhYmxlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICBSZXF1ZXN0IG1ldGhvZHMgYWRkX2RhdGEsIGhhc19kYXRhLCBnZXRfZGF0YSwgZ2V0X3R5cGUsIGdldF9ob3N0LAorICBnZXRfc2VsZWN0b3IsIGdldF9vcmlnaW5fcmVxX2hvc3QgYW5kIGlzX3VudmVyaWZpYWJsZSBkZXByZWNhdGVkIHNpbmNlIDMuMworICBoYXZlIGJlZW4gcmVtb3ZlZC4KIAogLi4gX29wZW5lci1kaXJlY3Rvci1vYmplY3RzOgogCkBAIC05ODMsNiArOTUxLDIxIEBACiAgICAgICBob3N0bmFtZSBpcyBnaXZlbiwgYW4gOmV4YzpgfnVybGxpYi5lcnJvci5VUkxFcnJvcmAgaXMgcmFpc2VkLgogCiAKKy4uIF9kYXRhLWhhbmRsZXItb2JqZWN0czoKKworRGF0YUhhbmRsZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBEYXRhSGFuZGxlci5kYXRhX29wZW4ocmVxKQorCisgICBSZWFkIGEgZGF0YSBVUkwuIFRoaXMga2luZCBvZiBVUkwgY29udGFpbnMgdGhlIGNvbnRlbnQgZW5jb2RlZCBpbiB0aGUgVVJMCisgICBpdHNlbGYuIFRoZSBkYXRhIFVSTCBzeW50YXggaXMgc3BlY2lmaWVkIGluIDpyZmM6YDIzOTdgLiBUaGlzIGltcGxlbWVudGF0aW9uCisgICBpZ25vcmVzIHdoaXRlIHNwYWNlcyBpbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgc28gdGhlIFVSTCBtYXkgYmUgd3JhcHBlZAorICAgaW4gd2hhdGV2ZXIgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gQnV0IGV2ZW4gdGhvdWdoIHNvbWUgYnJvd3NlcnMgZG9uJ3QKKyAgIG1pbmQgYWJvdXQgYSBtaXNzaW5nIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMLCB0aGlzCisgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHJhaXNlIGFuIDpleGM6YFZhbHVlRXJyb3JgIGluIHRoYXQgY2FzZS4KKworCiAuLiBfZnRwLWhhbmRsZXItb2JqZWN0czoKIAogRlRQSGFuZGxlciBPYmplY3RzCkBAIC0xMzk4LDcgKzEzODEsOSBAQAogICAgICBwYWlyOiBGVFA7IHByb3RvY29sCiAKICogQ3VycmVudGx5LCBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IEhUVFAgKHZlcnNpb25zIDAuOSBhbmQKLSAgMS4wKSwgRlRQLCBhbmQgbG9jYWwgZmlsZXMuCisgIDEuMCksIEZUUCwgbG9jYWwgZmlsZXMsIGFuZCBkYXRhIFVSTHMuCisKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBVUkxzLgogCiAqIFRoZSBjYWNoaW5nIGZlYXR1cmUgb2YgOmZ1bmM6YHVybHJldHJpZXZlYCBoYXMgYmVlbiBkaXNhYmxlZCB1bnRpbCBzb21lb25lCiAgIGZpbmRzIHRoZSB0aW1lIHRvIGhhY2sgcHJvcGVyIHByb2Nlc3Npbmcgb2YgRXhwaXJhdGlvbiB0aW1lIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS92ZW52LnJzdCBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CmluZGV4IDk2Y2EyZjUuLjQ2MWM5ZTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CkBAIC04NSw3ICs4NSw4IEBACiBtZWNoYW5pc21zIGZvciB0aGlyZC1wYXJ0eSB2aXJ0dWFsIGVudmlyb25tZW50IGNyZWF0b3JzIHRvIGN1c3RvbWl6ZSBlbnZpcm9ubWVudAogY3JlYXRpb24gYWNjb3JkaW5nIHRvIHRoZWlyIG5lZWRzLCB0aGUgOmNsYXNzOmBFbnZCdWlsZGVyYCBjbGFzcy4KIAotLi4gY2xhc3M6OiBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UpCisuLiBjbGFzczo6IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKQogCiAgICAgVGhlIDpjbGFzczpgRW52QnVpbGRlcmAgY2xhc3MgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGtleXdvcmQgYXJndW1lbnRzIG9uCiAgICAgaW5zdGFudGlhdGlvbjoKQEAgLTkzLDggKzk0LDggQEAKICAgICAqIGBgc3lzdGVtX3NpdGVfcGFja2FnZXNgYCAtLSBhIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBzeXN0ZW0gUHl0aG9uCiAgICAgICBzaXRlLXBhY2thZ2VzIHNob3VsZCBiZSBhdmFpbGFibGUgdG8gdGhlIGVudmlyb25tZW50IChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgogCi0gICAgKiBgYGNsZWFyYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiB0cnVlLCB3aWxsIGRlbGV0ZSBhbnkgZXhpc3RpbmcgdGFyZ2V0Ci0gICAgICBkaXJlY3RvcnkgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbiAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KKyAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIHdpbGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZgorICAgICAgYW55IGV4aXN0aW5nIHRhcmdldCBkaXJlY3RvcnksIGJlZm9yZSBjcmVhdGluZyB0aGUgZW52aXJvbm1lbnQuCiAKICAgICAqIGBgc3ltbGlua3NgYCAtLSBhIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGF0dGVtcHQgdG8gc3ltbGluayB0aGUKICAgICAgIFB5dGhvbiBiaW5hcnkgKGFuZCBhbnkgbmVjZXNzYXJ5IERMTHMgb3Igb3RoZXIgYmluYXJpZXMsCkBAIC0xMDUsNiArMTA2LDExIEBACiAgICAgICBlbnZpcm9ubWVudCB3aXRoIHRoZSBydW5uaW5nIFB5dGhvbiAtIGZvciB1c2Ugd2hlbiB0aGF0IFB5dGhvbiBoYXMgYmVlbgogICAgICAgdXBncmFkZWQgaW4tcGxhY2UgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKKyAgICAqIGBgd2l0aF9waXBgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIGVuc3VyZXMgcGlwIGlzCisgICAgICBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQKKworICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKIAogCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQpAQCAtMTg4LDYgKzE5NCw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKQEAgLTE5OSwxMSArMjA4LDE1IEBACiAKIFRoZXJlIGlzIGFsc28gYSBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIENyZWF0ZSBhbiA6Y2xhc3M6YEVudkJ1aWxkZXJgIHdpdGggdGhlIGdpdmVuIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgY2FsbCBpdHMKICAgICA6bWV0aDpgfkVudkJ1aWxkZXIuY3JlYXRlYCBtZXRob2Qgd2l0aCB0aGUgKmVudl9kaXIqIGFyZ3VtZW50LgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgorCiBBbiBleGFtcGxlIG9mIGV4dGVuZGluZyBgYEVudkJ1aWxkZXJgYAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhZmFmYjQ1Li5jMzJlMWZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMTksMjYgKzE5LDMyIEBACiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZSwgbW9kZT1Ob25lKQogCiAgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQotICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZToKIAotICAgYGAncidgYCwgYGAncmInYGAKKyAgIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KIAotICAgYGAndydgYCwgYGAnd2InYGAKKyAgIGBgJ3diJ2BgCiAgICAgICBXcml0ZSBvbmx5IG1vZGUuCiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAotICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYKLSAgICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYAotICAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1vZGUqICh0aGUgYGAnYidgYCBmbGFnIGlzIHN0aWxsIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkpLgorICAgQSAqbW9kZSogb2YgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEgKm1vZGUqIG9mCisgICBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZiAqbW9kZSogaXMgb21pdHRlZCBhbmQgYQorICAgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAgIHZhbHVlIGZvciAqbW9kZSouCiAKICAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCiAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQogICAgdGhlIGZpbGUgb2JqZWN0LgogCisgICBUaGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBXaGVuCisgICB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGNvbXBsZXRlcywgdGhlIDptZXRoOmBXYXZlX3JlYWQuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV9yZWFkLmNsb3NlPmAgb3IgOm1ldGg6YFdhdmVfd3JpdGUuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV93cml0ZS5jbG9zZSgpPmAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCiAKQEAgLTk4LDggKzEwNCw5IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0xNDksNyArMTU2LDggQEAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuY2xvc2UoKQogCiAgICBNYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QsIGFuZCBjbG9zZSB0aGUgZmlsZSBpZiBpdCB3YXMgb3BlbmVkIGJ5Ci0gICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLgorICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgKm5mcmFtZXMqIGlzIG5vdCBjb3JyZWN0IGFuZCBhIGZpbGUgaXMgbm90IHNlZWthYmxlLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0yMDAsMTAgKzIwOCwxNyBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUud3JpdGVmcmFtZXMoZGF0YSkKIAotICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCisgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgYSBmaWxlIGlzIG5vdCBzZWVrYWJsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCiAKIAogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCAyMjRmNDQyLi5lODRhYzJiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTEsMTAgKzUxLDE2IEBACiBidXQga2VlcHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50cywganVzdCBsaWtlIGEKIDpjbGFzczpgV2Vha0tleURpY3Rpb25hcnlgIGRvZXMuCiAKLU1vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMgaXMgYWxsCi10aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcwotZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSB1c2VkIGJ5IHRoZSB3ZWFrIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb25zCi1pcyBleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCis6Y2xhc3M6YGZpbmFsaXplYCBwcm92aWRlcyBhIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIHJlZ2lzdGVyIGEKK2NsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorVGhpcyBpcyBzaW1wbGVyIHRvIHVzZSB0aGFuIHNldHRpbmcgdXAgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBhIHJhdword2VhayByZWZlcmVuY2UsIHNpbmNlIHRoZSBtb2R1bGUgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGZpbmFsaXplcgorcmVtYWlucyBhbGl2ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGNvbGxlY3RlZC4KKworTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcworb3IgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgYWxsIHRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0bworY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcyBkaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IGlzCitleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCiAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLApAQCAtMTExLDYgKzExNywyNCBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3NhYmxlIHR5cGUgcmF0aGVyIHRoYW4gYSBmYWN0b3J5IGZ1bmN0aW9uLgogCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhbGxiYWNrX18KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHJldHVybnMgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICAgICAgd2Vha3JlZi4gIElmIHRoZXJlIGlzIG5vIGNhbGxiYWNrIG9yIGlmIHRoZSByZWZlcmVudCBvZiB0aGUgd2Vha3JlZiBpcworICAgICAgbm8gbG9uZ2VyIGFsaXZlIHRoZW4gdGhpcyBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGBgTm9uZWBgLgorCisgICAuLiBub3RlOjoKKworICAgICAgTGlrZSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcywgd2VhayByZWZlcmVuY2UgY2FsbGJhY2tzIGNhbiBiZQorICAgICAgY2FsbGVkIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGhhdmUgYmVlbgorICAgICAgb3ZlcndyaXR0ZW4gd2l0aCA6Y29uc3Q6YE5vbmVgLiAgVGhpcyBjYW4gbWFrZSB3cml0aW5nIHJvYnVzdAorICAgICAgd2VhayByZWZlcmVuY2UgY2FsbGJhY2tzIGEgY2hhbGxlbmdlLiAgQ2FsbGJhY2tzIHJlZ2lzdGVyZWQKKyAgICAgIHVzaW5nIDpjbGFzczpgZmluYWxpemVgIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgaXNzdWUKKyAgICAgIGJlY2F1c2UgdGhleSB3aWxsIG5vdCBiZSBydW4gYWZ0ZXIgbW9kdWxlIHRlYXJkb3duIGhhcyBiZWd1bi4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSA6YXR0cjpgX19jYWxsYmFja19fYCBhdHRyaWJ1dGUuCisKIAogLi4gZnVuY3Rpb246OiBwcm94eShvYmplY3RbLCBjYWxsYmFja10pCiAKQEAgLTE5Miw2ICsyMTYsOTggQEAKICAgIGRpc2NhcmRlZCB3aGVuIG5vIHN0cm9uZyByZWZlcmVuY2UgdG8gaXQgZXhpc3RzIGFueSBtb3JlLgogCiAKKy4uIGNsYXNzOjogV2Vha01ldGhvZChtZXRob2QpCisKKyAgIEEgY3VzdG9tIDpjbGFzczpgcmVmYCBzdWJjbGFzcyB3aGljaCBzaW11bGF0ZXMgYSB3ZWFrIHJlZmVyZW5jZSB0byBhIGJvdW5kCisgICBtZXRob2QgKGkuZS4sIGEgbWV0aG9kIGRlZmluZWQgb24gYSBjbGFzcyBhbmQgbG9va2VkIHVwIG9uIGFuIGluc3RhbmNlKS4KKyAgIFNpbmNlIGEgYm91bmQgbWV0aG9kIGlzIGVwaGVtZXJhbCwgYSBzdGFuZGFyZCB3ZWFrIHJlZmVyZW5jZSBjYW5ub3Qga2VlcAorICAgaG9sZCBvZiBpdC4gIDpjbGFzczpgV2Vha01ldGhvZGAgaGFzIHNwZWNpYWwgY29kZSB0byByZWNyZWF0ZSB0aGUgYm91bmQKKyAgIG1ldGhvZCB1bnRpbCBlaXRoZXIgdGhlIG9iamVjdCBvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGllczo6CisKKyAgICAgID4+PiBjbGFzcyBDOgorICAgICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgLi4uICAgICAgICAgcHJpbnQoIm1ldGhvZCBjYWxsZWQhIikKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDKCkKKyAgICAgID4+PiByID0gd2Vha3JlZi5yZWYoYy5tZXRob2QpCisgICAgICA+Pj4gcigpCisgICAgICA+Pj4gciA9IHdlYWtyZWYuV2Vha01ldGhvZChjLm1ldGhvZCkKKyAgICAgID4+PiByKCkKKyAgICAgIDxib3VuZCBtZXRob2QgQy5tZXRob2Qgb2YgPF9fbWFpbl9fLkMgb2JqZWN0IGF0IDB4N2ZjODU5ODMwMjIwPj4KKyAgICAgID4+PiByKCkoKQorICAgICAgbWV0aG9kIGNhbGxlZCEKKyAgICAgID4+PiBkZWwgYworICAgICAgPj4+IGdjLmNvbGxlY3QoKQorICAgICAgMAorICAgICAgPj4+IHIoKQorICAgICAgPj4+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjbGFzczo6IGZpbmFsaXplKG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKQorCisgICBSZXR1cm4gYSBjYWxsYWJsZSBmaW5hbGl6ZXIgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gKm9iaioKKyAgIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBVbmxpa2UgYW4gb3JkaW5hcnkgd2VhayByZWZlcmVuY2UsIGEgZmluYWxpemVyIGlzCisgICB3aWxsIGFsd2F5cyBzdXJ2aXZlIHVudGlsIHRoZSByZWZlcmVuY2Ugb2JqZWN0IGlzIGNvbGxlY3RlZCwgZ3JlYXRseQorICAgc2ltcGxpZnlpbmcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCisKKyAgIEEgZmluYWxpemVyIGlzIGNvbnNpZGVyZWQgKmFsaXZlKiB1bnRpbCBpdCBpcyBjYWxsZWQgKGVpdGhlciBleHBsaWNpdGx5CisgICBvciBhdCBnYXJiYWdlIGNvbGxlY3Rpb24pLCBhbmQgYWZ0ZXIgdGhhdCBpdCBpcyAqZGVhZCouICBDYWxsaW5nIGEgbGl2ZQorICAgZmluYWxpemVyIHJldHVybnMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGBgZnVuYygqYXJnLCAqKmt3YXJncylgYCwKKyAgIHdoZXJlYXMgY2FsbGluZyBhIGRlYWQgZmluYWxpemVyIHJldHVybnMgOmNvbnN0OmBOb25lYC4KKworICAgRXhjZXB0aW9ucyByYWlzZWQgYnkgZmluYWxpemVyIGNhbGxiYWNrcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICB3aWxsIGJlIHNob3duIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQsIGJ1dCBjYW5ub3QgYmUKKyAgIHByb3BhZ2F0ZWQuICBUaGV5IGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBleGNlcHRpb25zIHJhaXNlZAorICAgZnJvbSBhbiBvYmplY3QncyA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIG9yIGEgd2VhayByZWZlcmVuY2UncworICAgY2FsbGJhY2suCisKKyAgIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMsIGVhY2ggcmVtYWluaW5nIGxpdmUgZmluYWxpemVyIGlzIGNhbGxlZAorICAgdW5sZXNzIGl0cyA6YXR0cjpgYXRleGl0YCBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IHRvIGZhbHNlLiAgVGhleQorICAgYXJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgorCisgICBBIGZpbmFsaXplciB3aWxsIG5ldmVyIGludm9rZSBpdHMgY2FsbGJhY2sgZHVyaW5nIHRoZSBsYXRlciBwYXJ0IG9mCisgICB0aGUgaW50ZXJwcmV0ZXIgc2h1dGRvd24gd2hlbiBtb2R1bGUgZ2xvYmFscyBhcmUgbGlhYmxlIHRvIGhhdmUKKyAgIGJlZW4gcmVwbGFjZWQgYnkgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogX19jYWxsX18oKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiBtYXJrIGl0IGFzIGRlYWQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICBjYWxsaW5nIGBgZnVuYygqYXJncywgKiprd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybgorICAgICAgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogZGV0YWNoKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gbWFyayBpdCBhcyBkZWFkIGFuZCByZXR1cm4gdGhlIHR1cGxlCisgICAgICBgYChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBwZWVrKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gcmV0dXJuIHRoZSB0dXBsZSBgYChvYmosIGZ1bmMsIGFyZ3MsCisgICAgICBrd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybiA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhbGl2ZQorCisgICAgICBQcm9wZXJ0eSB3aGljaCBpcyB0cnVlIGlmIHRoZSBmaW5hbGl6ZXIgaXMgYWxpdmUsIGZhbHNlIG90aGVyd2lzZS4KKworICAgLi4gYXR0cmlidXRlOjogYXRleGl0CisKKyAgICAgIEEgd3JpdGFibGUgYm9vbGVhbiBwcm9wZXJ0eSB3aGljaCBieSBkZWZhdWx0IGlzIHRydWUuICBXaGVuIHRoZQorICAgICAgcHJvZ3JhbSBleGl0cywgaXQgY2FsbHMgYWxsIHJlbWFpbmluZyBsaXZlIGZpbmFsaXplcnMgZm9yIHdoaWNoCisgICAgICA6YXR0cjpgLmF0ZXhpdGAgaXMgdHJ1ZS4gIFRoZXkgYXJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyIG9mCisgICAgICBjcmVhdGlvbi4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIEl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCAqZnVuYyosICphcmdzKiBhbmQgKmt3YXJncyogZG8KKyAgICAgIG5vdCBvd24gYW55IHJlZmVyZW5jZXMgdG8gKm9iaiosIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorICAgICAgc2luY2Ugb3RoZXJ3aXNlICpvYmoqIHdpbGwgbmV2ZXIgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuICBJbgorICAgICAgcGFydGljdWxhciwgKmZ1bmMqIHNob3VsZCBub3QgYmUgYSBib3VuZCBtZXRob2Qgb2YgKm9iaiouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSZWZlcmVuY2VUeXBlCiAKICAgIFRoZSB0eXBlIG9iamVjdCBmb3Igd2VhayByZWZlcmVuY2VzIG9iamVjdHMuCkBAIC0yMzIsOCArMzQ4LDkgQEAKIFdlYWsgUmVmZXJlbmNlIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2VhayByZWZlcmVuY2Ugb2JqZWN0cyBoYXZlIG5vIGF0dHJpYnV0ZXMgb3IgbWV0aG9kcywgYnV0IGRvIGFsbG93IHRoZSByZWZlcmVudAotdG8gYmUgb2J0YWluZWQsIGlmIGl0IHN0aWxsIGV4aXN0cywgYnkgY2FsbGluZyBpdDoKK1dlYWsgcmVmZXJlbmNlIG9iamVjdHMgaGF2ZSBubyBtZXRob2RzIGFuZCBubyBhdHRyaWJ1dGVzIGJlc2lkZXMKKzphdHRyOmByZWYuX19jYWxsYmFja19fYC4gQSB3ZWFrIHJlZmVyZW5jZSBvYmplY3QgYWxsb3dzIHRoZSByZWZlcmVudCB0byBiZQorb2J0YWluZWQsIGlmIGl0IHN0aWxsIGV4aXN0cywgYnkgY2FsbGluZyBpdDoKIAogICAgPj4+IGltcG9ydCB3ZWFrcmVmCiAgICA+Pj4gY2xhc3MgT2JqZWN0OgpAQCAtMzI2LDMgKzQ0MywxNDAgQEAKICAgIGRlZiBpZDJvYmoob2lkKToKICAgICAgICByZXR1cm4gX2lkMm9ial9kaWN0W29pZF0KIAorCisuLiBfZmluYWxpemUtZXhhbXBsZXM6CisKK0ZpbmFsaXplciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFpbiBiZW5lZml0IG9mIHVzaW5nIDpjbGFzczpgZmluYWxpemVgIGlzIHRoYXQgaXQgbWFrZXMgaXQgc2ltcGxlCit0byByZWdpc3RlciBhIGNhbGxiYWNrIHdpdGhvdXQgbmVlZGluZyB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJuZWQgZmluYWxpemVyCitvYmplY3QuICBGb3IgaW5zdGFuY2UKKworICAgID4+PiBpbXBvcnQgd2Vha3JlZgorICAgID4+PiBjbGFzcyBPYmplY3Q6CisgICAgLi4uICAgICBwYXNzCisgICAgLi4uCisgICAgPj4+IGtlbm55ID0gT2JqZWN0KCkKKyAgICA+Pj4gd2Vha3JlZi5maW5hbGl6ZShrZW5ueSwgcHJpbnQsICJZb3Uga2lsbGVkIEtlbm55ISIpICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICA8ZmluYWxpemUgb2JqZWN0IGF0IC4uLjsgZm9yICdPYmplY3QnIGF0IC4uLj4KKyAgICA+Pj4gZGVsIGtlbm55CisgICAgWW91IGtpbGxlZCBLZW5ueSEKKworVGhlIGZpbmFsaXplciBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGFzIHdlbGwuICBIb3dldmVyIHRoZSBmaW5hbGl6ZXIKK3dpbGwgaW52b2tlIHRoZSBjYWxsYmFjayBhdCBtb3N0IG9uY2UuCisKKyAgICA+Pj4gZGVmIGNhbGxiYWNrKHgsIHksIHopOgorICAgIC4uLiAgICAgcHJpbnQoIkNBTExCQUNLIikKKyAgICAuLi4gICAgIHJldHVybiB4ICsgeSArIHoKKyAgICAuLi4KKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gZiA9IHdlYWtyZWYuZmluYWxpemUob2JqLCBjYWxsYmFjaywgMSwgMiwgej0zKQorICAgID4+PiBhc3NlcnQgZi5hbGl2ZQorICAgID4+PiBhc3NlcnQgZigpID09IDYKKyAgICBDQUxMQkFDSworICAgID4+PiBhc3NlcnQgbm90IGYuYWxpdmUKKyAgICA+Pj4gZigpICAgICAgICAgICAgICAgICAgICAgIyBjYWxsYmFjayBub3QgY2FsbGVkIGJlY2F1c2UgZmluYWxpemVyIGRlYWQKKyAgICA+Pj4gZGVsIG9iaiAgICAgICAgICAgICAgICAgIyBjYWxsYmFjayBub3QgY2FsbGVkIGJlY2F1c2UgZmluYWxpemVyIGRlYWQKKworWW91IGNhbiB1bnJlZ2lzdGVyIGEgZmluYWxpemVyIHVzaW5nIGl0cyA6bWV0aDpgfmZpbmFsaXplLmRldGFjaGAKK21ldGhvZC4gIFRoaXMga2lsbHMgdGhlIGZpbmFsaXplciBhbmQgcmV0dXJucyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0bwordGhlIGNvbnN0cnVjdG9yIHdoZW4gaXQgd2FzIGNyZWF0ZWQuCisKKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gZiA9IHdlYWtyZWYuZmluYWxpemUob2JqLCBjYWxsYmFjaywgMSwgMiwgej0zKQorICAgID4+PiBmLmRldGFjaCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkb2N0ZXN0OitFTExJUFNJUworICAgICg8X19tYWluX18uT2JqZWN0IG9iamVjdCAuLi4+LCA8ZnVuY3Rpb24gY2FsbGJhY2sgLi4uPiwgKDEsIDIpLCB7J3onOiAzfSkKKyAgICA+Pj4gbmV3b2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MgPSBfCisgICAgPj4+IGFzc2VydCBub3QgZi5hbGl2ZQorICAgID4+PiBhc3NlcnQgbmV3b2JqIGlzIG9iagorICAgID4+PiBhc3NlcnQgZnVuYygqYXJncywgKiprd2FyZ3MpID09IDYKKyAgICBDQUxMQkFDSworCitVbmxlc3MgeW91IHNldCB0aGUgOmF0dHI6YH5maW5hbGl6ZS5hdGV4aXRgIGF0dHJpYnV0ZSB0bworOmNvbnN0OmBGYWxzZWAsIGEgZmluYWxpemVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHByb2dyYW0gZXhpdHMgaWYgaXQKK2lzIHN0aWxsIGFsaXZlLiAgRm9yIGluc3RhbmNlCisKKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gd2Vha3JlZi5maW5hbGl6ZShvYmosIHByaW50LCAib2JqIGRlYWQgb3IgZXhpdGluZyIpICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICA8ZmluYWxpemUgb2JqZWN0IGF0IC4uLjsgZm9yICdPYmplY3QnIGF0IC4uLj4KKyAgICA+Pj4gZXhpdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZG9jdGVzdDorU0tJUAorICAgIG9iaiBkZWFkIG9yIGV4aXRpbmcKKworCitDb21wYXJpbmcgZmluYWxpemVycyB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2Ugd2Ugd2FudCB0byBjcmVhdGUgYSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgcmVwcmVzZW50IHRlbXBvcmFyeQorZGlyZWN0b3JpZXMuICBUaGUgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0aCB0aGVpciBjb250ZW50cword2hlbiB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyBldmVudHMgb2NjdXJzOgorCisqIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQsCisqIHRoZSBvYmplY3QncyA6bWV0aDpgcmVtb3ZlYCBtZXRob2QgaXMgY2FsbGVkLCBvcgorKiB0aGUgcHJvZ3JhbSBleGl0cy4KKworV2UgbWlnaHQgdHJ5IHRvIGltcGxlbWVudCB0aGUgY2xhc3MgdXNpbmcgYSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIGFzCitmb2xsb3dzOjoKKworICAgIGNsYXNzIFRlbXBEaXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLm5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lID0gTm9uZQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgcmVtb3ZlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUgaXMgTm9uZQorCisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoKQorCitTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIG5vIGxvbmdlciBwcmV2ZW50CityZWZlcmVuY2UgY3ljbGVzIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQsIGFuZCBtb2R1bGUgZ2xvYmFscyBhcmUKK25vIGxvbmdlciBmb3JjZWQgdG8gOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uIFNvIHRoaXMKK2NvZGUgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgaXNzdWVzIG9uIENQeXRob24uCisKK0hvd2V2ZXIsIGhhbmRsaW5nIG9mIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGlzIG5vdG9yaW91c2x5IGltcGxlbWVudGF0aW9uCitzcGVjaWZpYywgc2luY2UgaXQgZGVwZW5kcyBvbiBpbnRlcm5hbCBkZXRhaWxzIG9mIHRoZSBpbnRlcnByZXRlcidzIGdhcmJhZ2UKK2NvbGxlY3RvciBpbXBsZW1lbnRhdGlvbi4KKworQSBtb3JlIHJvYnVzdCBhbHRlcm5hdGl2ZSBjYW4gYmUgdG8gZGVmaW5lIGEgZmluYWxpemVyIHdoaWNoIG9ubHkgcmVmZXJlbmNlcwordGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgb2JqZWN0cyB0aGF0IGl0IG5lZWRzLCByYXRoZXIgdGhhbiBoYXZpbmcgYWNjZXNzCit0byB0aGUgZnVsbCBzdGF0ZSBvZiB0aGUgb2JqZWN0OjoKKworICAgIGNsYXNzIFRlbXBEaXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyID0gd2Vha3JlZi5maW5hbGl6ZShzZWxmLCBzaHV0aWwucm10cmVlLCBzZWxmLm5hbWUpCisKKyAgICAgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplcigpCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiByZW1vdmVkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9maW5hbGl6ZXIuYWxpdmUKKworRGVmaW5lZCBsaWtlIHRoaXMsIG91ciBmaW5hbGl6ZXIgb25seSByZWNlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZGV0YWlscworaXQgbmVlZHMgdG8gY2xlYW4gdXAgdGhlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZWx5LiBJZiB0aGUgb2JqZWN0IG5ldmVyIGdldHMKK2dhcmJhZ2UgY29sbGVjdGVkIHRoZSBmaW5hbGl6ZXIgd2lsbCBzdGlsbCBiZSBjYWxsZWQgYXQgZXhpdC4KKworVGhlIG90aGVyIGFkdmFudGFnZSBvZiB3ZWFrcmVmIGJhc2VkIGZpbmFsaXplcnMgaXMgdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHRvCityZWdpc3RlciBmaW5hbGl6ZXJzIGZvciBjbGFzc2VzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzIGNvbnRyb2xsZWQgYnkgYQordGhpcmQgcGFydHksIHN1Y2ggYXMgcnVubmluZyBjb2RlIHdoZW4gYSBtb2R1bGUgaXMgdW5sb2FkZWQ6OgorCisgICAgaW1wb3J0IHdlYWtyZWYsIHN5cworICAgIGRlZiB1bmxvYWRpbmdfbW9kdWxlKCk6CisgICAgICAgICMgaW1wbGljaXQgcmVmZXJlbmNlIHRvIHRoZSBtb2R1bGUgZ2xvYmFscyBmcm9tIHRoZSBmdW5jdGlvbiBib2R5CisgICAgd2Vha3JlZi5maW5hbGl6ZShzeXMubW9kdWxlc1tfX25hbWVfX10sIHVubG9hZGluZ19tb2R1bGUpCisKKworLi4gbm90ZTo6CisKKyAgIElmIHlvdSBjcmVhdGUgYSBmaW5hbGl6ZXIgb2JqZWN0IGluIGEgZGFlbW9uaWMgdGhyZWFkIGp1c3QgYXMgdGhlCisgICB0aGUgcHJvZ3JhbSBleGl0cyB0aGVuIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBmaW5hbGl6ZXIKKyAgIGRvZXMgbm90IGdldCBjYWxsZWQgYXQgZXhpdC4gIEhvd2V2ZXIsIGluIGEgZGFlbW9uaWMgdGhyZWFkCisgICA6ZnVuYzpgYXRleGl0LnJlZ2lzdGVyYCwgYGB0cnk6IC4uLiBmaW5hbGx5OiAuLi5gYCBhbmQgYGB3aXRoOiAuLi5gYAorICAgZG8gbm90IGd1YXJhbnRlZSB0aGF0IGNsZWFudXAgb2NjdXJzIGVpdGhlci4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CmluZGV4IGNmNjUyMTkuLjRjODlkYzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdApAQCAtMTA1LDYgKzEwNSw0MyBAQAogICAgPj4+IHJvb3RbMF1bMV0udGV4dAogICAgJzIwMDgnCiAKK1B1bGwgQVBJIGZvciBub24tYmxvY2tpbmcgcGFyc2luZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vc3QgcGFyc2luZyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgcmVxdWlyZSB0byByZWFkIHRoZSB3aG9sZQorZG9jdW1lbnQgYXQgb25jZSBiZWZvcmUgcmV0dXJuaW5nIGFueSByZXN1bHQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYQorOmNsYXNzOmBYTUxQYXJzZXJgIGFuZCBmZWVkIGRhdGEgaW50byBpdCBpbmNyZW1lbnRhbGx5LCBidXQgaXQncyBhIHB1c2ggQVBJIHRoYXQKK2NhbGxzIG1ldGhvZHMgb24gYSBjYWxsYmFjayB0YXJnZXQsIHdoaWNoIGlzIHRvbyBsb3ctbGV2ZWwgYW5kIGluY29udmVuaWVudCBmb3IKK21vc3QgbmVlZHMuICBTb21ldGltZXMgd2hhdCB0aGUgdXNlciByZWFsbHkgd2FudHMgaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBYTUwKK2luY3JlbWVudGFsbHksIHdpdGhvdXQgYmxvY2tpbmcgb3BlcmF0aW9ucywgd2hpbGUgZW5qb3lpbmcgdGhlIGNvbnZlbmllbmNlIG9mCitmdWxseSBjb25zdHJ1Y3RlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdHMuCisKK1RoZSBtb3N0IHBvd2VyZnVsIHRvb2wgZm9yIGRvaW5nIHRoaXMgaXMgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4gIEl0IGRvZXMgbm90CityZXF1aXJlIGEgYmxvY2tpbmcgcmVhZCB0byBvYnRhaW4gdGhlIFhNTCBkYXRhLCBhbmQgaXMgaW5zdGVhZCBmZWQgd2l0aCBkYXRhCitpbmNyZW1lbnRhbGx5IHdpdGggOm1ldGg6YFhNTFB1bGxQYXJzZXIuZmVlZGAgY2FsbHMuICBUbyBnZXQgdGhlIHBhcnNlZCBYTUwKK2VsZW1lbnRzLCBjYWxsIDptZXRoOmBYTUxQdWxsUGFyc2VyLnJlYWRfZXZlbnRzYC4gIEhlcmUncyBhbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoWydzdGFydCcsICdlbmQnXSkKKyAgID4+PiBwYXJzZXIuZmVlZCgnPG15dGFnPnNvbWV0ZXh0JykKKyAgID4+PiBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKQorICAgWygnc3RhcnQnLCA8RWxlbWVudCAnbXl0YWcnIGF0IDB4N2ZhNjZkYjJiZTU4PildCisgICA+Pj4gcGFyc2VyLmZlZWQoJyBtb3JlIHRleHQ8L215dGFnPicpCisgICA+Pj4gZm9yIGV2ZW50LCBlbGVtIGluIHBhcnNlci5yZWFkX2V2ZW50cygpOgorICAgLi4uICAgcHJpbnQoZXZlbnQpCisgICAuLi4gICBwcmludChlbGVtLnRhZywgJ3RleHQ9JywgZWxlbS50ZXh0KQorICAgLi4uCisgICBlbmQKKworVGhlIG9idmlvdXMgdXNlIGNhc2UgaXMgYXBwbGljYXRpb25zIHRoYXQgb3BlcmF0ZSBpbiBhIG5vbi1ibG9ja2luZyBmYXNoaW9uCit3aGVyZSB0aGUgWE1MIGRhdGEgaXMgYmVpbmcgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCBvciByZWFkIGluY3JlbWVudGFsbHkgZnJvbQorc29tZSBzdG9yYWdlIGRldmljZS4gIEluIHN1Y2ggY2FzZXMsIGJsb2NraW5nIHJlYWRzIGFyZSB1bmFjY2VwdGFibGUuCisKK0JlY2F1c2UgaXQncyBzbyBmbGV4aWJsZSwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIHVzZSBmb3IKK3NpbXBsZXIgdXNlLWNhc2VzLiAgSWYgeW91IGRvbid0IG1pbmQgeW91ciBhcHBsaWNhdGlvbiBibG9ja2luZyBvbiByZWFkaW5nIFhNTAorZGF0YSBidXQgd291bGQgc3RpbGwgbGlrZSB0byBoYXZlIGluY3JlbWVudGFsIHBhcnNpbmcgY2FwYWJpbGl0aWVzLCB0YWtlIGEgbG9vaworYXQgOmZ1bmM6YGl0ZXJwYXJzZWAuICBJdCBjYW4gYmUgdXNlZnVsIHdoZW4geW91J3JlIHJlYWRpbmcgYSBsYXJnZSBYTUwgZG9jdW1lbnQKK2FuZCBkb24ndCB3YW50IHRvIGhvbGQgaXQgd2hvbGx5IGluIG1lbW9yeS4KKwogRmluZGluZyBpbnRlcmVzdGluZyBlbGVtZW50cwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0zNzksMjUgKzQxNiwzMiBAQAogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseSwgYW5kIHJlcG9ydHMgd2hhdCdzCiAgICBnb2luZyBvbiB0byB0aGUgdXNlci4gICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgOnRlcm06YGZpbGUgb2JqZWN0YAotICAgY29udGFpbmluZyBYTUwgZGF0YS4gICpldmVudHMqIGlzIGEgdHVwbGUgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgVGhlCi0gICBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLCBgYCJzdGFydC1ucyJgYAotICAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKKyAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQorICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAgYW5kCisgICBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCiAgICBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5IGBgImVuZCJgYCBldmVudHMgYXJlIHJlcG9ydGVkLgogICAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIGNhbiBvbmx5IHVzZSB0aGUgZGVmYXVsdAotICAgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYSB0YXJnZXQuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nCi0gICBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIG11c3QgYmUgYSBzdWJjbGFzcyBvZgorICAgOmNsYXNzOmBYTUxQYXJzZXJgIGFuZCBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYQorICAgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZyBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKworICAgTm90ZSB0aGF0IHdoaWxlIDpmdW5jOmBpdGVycGFyc2VgIGJ1aWxkcyB0aGUgdHJlZSBpbmNyZW1lbnRhbGx5LCBpdCBpc3N1ZXMKKyAgIGJsb2NraW5nIHJlYWRzIG9uICpzb3VyY2UqIChvciB0aGUgZmlsZSBpdCBuYW1lcykuICBBcyBzdWNoLCBpdCdzIHVuc3VpdGFibGUKKyAgIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgYmxvY2tpbmcgcmVhZHMgY2FuJ3QgYmUgbWFkZS4gIEZvciBmdWxseSBub24tYmxvY2tpbmcKKyAgIHBhcnNpbmcsIHNlZSA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgOmZ1bmM6YGl0ZXJwYXJzZWAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgotICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKLSAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcwotICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKLSAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKyAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIgY2hhcmFjdGVyIG9mIGEKKyAgICAgIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsCisgICAgICBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgYXJlIHVuZGVmaW5lZCBhdCB0aGF0CisgICAgICBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47IHRoZXkgbWF5IG9yIG1heSBub3QgYmUKKyAgICAgIHByZXNlbnQuCiAKICAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgKnBhcnNlciogYXJndW1lbnQuCiAKIC4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIApAQCAtNDM4LDI5ICs0ODIsMzkgQEAKICAgIGFyZ3VtZW50cy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKy4uIGZ1bmN0aW9uOjogdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYSBsaXN0IG9mIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZ3MgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCiAgICBJdCBkb2VzIG5vdCBndWFyYW50ZWUgYW55IHNwZWNpZmljIHNlcXVlbmNlLCBleGNlcHQgdGhhdAogICAgYGAiIi5qb2luKHRvc3RyaW5nbGlzdChlbGVtZW50KSkgPT0gdG9zdHJpbmcoZWxlbWVudClgYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogWE1MKHRleHQsIHBhcnNlcj1Ob25lKQogCkBAIC03NTMsNyArODA3LDggQEAKIAogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlLCBlbmNvZGluZz0idXMtYXNjaWkiLCB4bWxfZGVjbGFyYXRpb249Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiKQorICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICAgICBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4gICpmaWxlKiBpcyBhIGZpbGUgbmFtZSwgb3IgYQogICAgICAgOnRlcm06YGZpbGUgb2JqZWN0YCBvcGVuZWQgZm9yIHdyaXRpbmcuICAqZW5jb2RpbmcqIFsxXV8gaXMgdGhlIG91dHB1dApAQCAtNzY0LDYgKzgxOSwxMCBAQAogICAgICAgKmRlZmF1bHRfbmFtZXNwYWNlKiBzZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKS4KICAgICAgICptZXRob2QqIGlzIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcwogICAgICAgYGAieG1sImBgKS4KKyAgICAgIFRoZSBrZXl3b3JkLW9ubHkgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGZvcm1hdHRpbmcKKyAgICAgIG9mIGVsZW1lbnRzIHRoYXQgY29udGFpbiBubyBjb250ZW50LiAgSWYgKlRydWUqICh0aGUgZGVmYXVsdCksIHRoZXkgYXJlCisgICAgICBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkIHRhZywgb3RoZXJ3aXNlIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyCisgICAgICBvZiBzdGFydC9lbmQgdGFncy4KIAogICAgICAgVGhlIG91dHB1dCBpcyBlaXRoZXIgYSBzdHJpbmcgKDpjbGFzczpgc3RyYCkgb3IgYmluYXJ5ICg6Y2xhc3M6YGJ5dGVzYCkuCiAgICAgICBUaGlzIGlzIGNvbnRyb2xsZWQgYnkgdGhlICplbmNvZGluZyogYXJndW1lbnQuICBJZiAqZW5jb2RpbmcqIGlzCkBAIC03NzIsNiArODMxLDkgQEAKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGA7IG1ha2Ugc3VyZSB5b3UgZG8gbm90IHRyeSB0byB3cml0ZSBhIHN0cmluZyB0byBhCiAgICAgICBiaW5hcnkgc3RyZWFtIGFuZCB2aWNlIHZlcnNhLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiBUaGlzIGlzIHRoZSBYTUwgZmlsZSB0aGF0IGlzIGdvaW5nIHRvIGJlIG1hbmlwdWxhdGVkOjoKIApAQCAtODE3LDYgKzg3OSw3IEBACiAgICA6Y2xhc3M6YFFOYW1lYCBpbnN0YW5jZXMgYXJlIG9wYXF1ZS4KIAogCisKIC4uIF9lbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzOgogCiBUcmVlQnVpbGRlciBPYmplY3RzCkBAIC04NzYsMTMgKzkzOSwxNyBAQAogCiAuLiBjbGFzczo6IFhNTFBhcnNlcihodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKQogCi0gICA6Y2xhc3M6YEVsZW1lbnRgIHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdAotICAgcGFyc2VyLiAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieQotICAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZQotICAgYnVpbGRlciB1c2VzIGFuIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBjbGFzcy4KLSAgICplbmNvZGluZyogWzFdXyBpcyBvcHRpb25hbC4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZworICAgVGhpcyBjbGFzcyBpcyB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBtb2R1bGUuICBJdCB1c2VzCisgICA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgZm9yIGVmZmljaWVudCwgZXZlbnQtYmFzZWQgcGFyc2luZyBvZiBYTUwuICBJdCBjYW4KKyAgIGJlIGZlZCBYTUwgZGF0YSBpbmNyZW1lbnRhbGwgd2l0aCB0aGUgOm1ldGg6YGZlZWRgIG1ldGhvZCwgYW5kIHBhcnNpbmcgZXZlbnRzCisgICBhcmUgdHJhbnNsYXRlZCB0byBhIHB1c2ggQVBJIC0gYnkgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSAqdGFyZ2V0KiBvYmplY3QuCisgICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4gIFRoZQorICAgKmh0bWwqIGFyZ3VtZW50IHdhcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGlzIG5vdworICAgZGVwcmVjYXRlZC4gIElmICplbmNvZGluZyogWzFdXyBpcyBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKICAgIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSAqaHRtbCogYXJndW1lbnQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtOTAyLDEyICs5NjksMTIgQEAKIAogICAgICAgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLiAgKmRhdGEqIGlzIGVuY29kZWQgZGF0YS4KIAotICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KClgYCBtZXRob2QKLSAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQoKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywKLSAgIGFuZCBkYXRhIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKClgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgCi0gICBjYWxscyAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuCi0gICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGggb2YgYW4gWE1MIGZpbGU6OgorICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KHRhZywgYXR0cnNfZGljdClgYCBtZXRob2QKKyAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQodGFnKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywgYW5kIGRhdGEKKyAgIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKGRhdGEpYGAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYCBjYWxscworICAgKnRhcmdldCpcJ3MgbWV0aG9kIGBgY2xvc2UoKWBgLiA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yCisgICBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGgKKyAgIG9mIGFuIFhNTCBmaWxlOjoKIAogICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MUGFyc2VyCiAgICAgPj4+IGNsYXNzIE1heERlcHRoOiAgICAgICAgICAgICAgICAgICAgICMgVGhlIHRhcmdldCBvYmplY3Qgb2YgdGhlIHBhcnNlcgpAQCAtOTQxLDYgKzEwMDgsNTggQEAKICAgICA+Pj4gcGFyc2VyLmNsb3NlKCkKICAgICA0CiAKKworLi4gX2VsZW1lbnR0cmVlLXhtbHB1bGxwYXJzZXItb2JqZWN0czoKKworWE1MUHVsbFBhcnNlciBPYmplY3RzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBYTUxQdWxsUGFyc2VyKGV2ZW50cz1Ob25lKQorCisgICBBIHB1bGwgcGFyc2VyIHN1aXRhYmxlIGZvciBub24tYmxvY2tpbmcgYXBwbGljYXRpb25zLiAgSXRzIGlucHV0LXNpZGUgQVBJIGlzCisgICBzaW1pbGFyIHRvIHRoYXQgb2YgOmNsYXNzOmBYTUxQYXJzZXJgLCBidXQgaW5zdGVhZCBvZiBwdXNoaW5nIGNhbGxzIHRvIGEKKyAgIGNhbGxiYWNrIHRhcmdldCwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjb2xsZWN0cyBhbiBpbnRlcm5hbCBsaXN0IG9mIHBhcnNpbmcKKyAgIGV2ZW50cyBhbmQgbGV0cyB0aGUgdXNlciByZWFkIGZyb20gaXQuICpldmVudHMqIGlzIGEgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvCisgICByZXBvcnQgYmFjay4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLAorICAgYGAic3RhcnQtbnMiYGAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZAorICAgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkgYGAiZW5kImBgIGV2ZW50cyBhcmUKKyAgIHJlcG9ydGVkLgorCisgICAuLiBtZXRob2Q6OiBmZWVkKGRhdGEpCisKKyAgICAgIEZlZWQgdGhlIGdpdmVuIGJ5dGVzIGRhdGEgdG8gdGhlIHBhcnNlci4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBTaWduYWwgdGhlIHBhcnNlciB0aGF0IHRoZSBkYXRhIHN0cmVhbSBpcyB0ZXJtaW5hdGVkLiBVbmxpa2UKKyAgICAgIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorICAgICAgQW55IGV2ZW50cyBub3QgeWV0IHJldHJpZXZlZCB3aGVuIHRoZSBwYXJzZXIgaXMgY2xvc2VkIGNhbiBzdGlsbCBiZQorICAgICAgcmVhZCB3aXRoIDptZXRoOmByZWFkX2V2ZW50c2AuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRfZXZlbnRzKCkKKworICAgICAgSXRlcmF0ZSBvdmVyIHRoZSBldmVudHMgd2hpY2ggaGF2ZSBiZWVuIGVuY291bnRlcmVkIGluIHRoZSBkYXRhIGZlZCB0byB0aGUKKyAgICAgIHBhcnNlci4gIFRoaXMgbWV0aG9kIHlpZWxkcyBgYChldmVudCwgZWxlbSlgYCBwYWlycywgd2hlcmUgKmV2ZW50KiBpcyBhCisgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGV2ZW50IChlLmcuIGBgImVuZCJgYCkgYW5kICplbGVtKiBpcyB0aGUKKyAgICAgIGVuY291bnRlcmVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0LgorCisgICAgICBFdmVudHMgcHJvdmlkZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIDptZXRoOmByZWFkX2V2ZW50c2Agd2lsbCBub3QgYmUKKyAgICAgIHlpZWxkZWQgYWdhaW4uIEFzIGV2ZW50cyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgaW50ZXJuYWwgcXVldWUgb25seSBhcworICAgICAgdGhleSBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLCBtdWx0aXBsZSByZWFkZXJzIGNhbGxpbmcKKyAgICAgIDptZXRoOmByZWFkX2V2ZW50c2AgaW4gcGFyYWxsZWwgd2lsbCBoYXZlIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgorICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKKyAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcworICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKKyAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKworICAgICAgSWYgeW91IG5lZWQgYSBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudCwgbG9vayBmb3IgImVuZCIgZXZlbnRzIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBFeGNlcHRpb25zCiBeXl5eXl5eXl5eCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKaW5kZXggN2E2NDgyYi4uOTY5YTUzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKQEAgLTEzMCw3ICsxMzAsNyBAQAogLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgIE9wZW4gYSBaSVAgZmlsZSwgd2hlcmUgKmZpbGUqIGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZSAoYSBzdHJpbmcpIG9yIGEKICAgIGZpbGUtbGlrZSBvYmplY3QuICBUaGUgKm1vZGUqIHBhcmFtZXRlciBzaG91bGQgYmUgYGAncidgYCB0byByZWFkIGFuIGV4aXN0aW5nCkBAIC0xNDQsMTUgKzE0NCwxMiBAQAogICAgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFpJUF9TVE9SRURgLCA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCiAgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWA7IHVucmVjb2duaXplZAogICAgdmFsdWVzIHdpbGwgY2F1c2UgOmV4YzpgUnVudGltZUVycm9yYCB0byBiZSByYWlzZWQuICBJZiA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCi0gICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ycmVzcG9uZGVkIG1vZHVsZQorICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlCiAgICAoOm1vZDpgemxpYmAsIDptb2Q6YGJ6MmAgb3IgOm1vZDpgbHptYWApIGlzIG5vdCBhdmFpbGFibGUsIDpleGM6YFJ1bnRpbWVFcnJvcmAKICAgIGlzIGFsc28gcmFpc2VkLiBUaGUgZGVmYXVsdCBpcyA6Y29uc3Q6YFpJUF9TVE9SRURgLiAgSWYgKmFsbG93WmlwNjQqIGlzCi0gICBgYFRydWVgYCB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQgZXh0ZW5zaW9ucyB3aGVuCi0gICB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdpQi4gSWYgaXQgaXMgIGZhbHNlICh0aGUgZGVmYXVsdCkgOm1vZDpgemlwZmlsZWAKKyAgIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCkgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0CisgICBleHRlbnNpb25zIHdoZW4gdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSA6bW9kOmB6aXBmaWxlYAogICAgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgWklQIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLgotICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHRoZSBkZWZhdWx0IDpwcm9ncmFtOmB6aXBgCi0gICBhbmQgOnByb2dyYW06YHVuemlwYCBjb21tYW5kcyBvbiBVbml4ICh0aGUgSW5mb1pJUCB1dGlsaXRpZXMpIGRvbid0IHN1cHBvcnQKLSAgIHRoZXNlIGV4dGVuc2lvbnMuCiAKICAgIElmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ2EnYGAgb3IgYGAndydgYCBhbmQgdGhlbgogICAgOm1ldGg6YGNsb3NlZCA8Y2xvc2U+YCB3aXRob3V0IGFkZGluZyBhbnkgZmlsZXMgdG8gdGhlIGFyY2hpdmUsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTcxLDYgKzE2OCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOm1vZDpgYnppcDIgPGJ6Mj5gIGFuZCA6bW9kOmBsem1hYCBjb21wcmVzc2lvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKwogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmNsb3NlKCkKIApAQCAtMjM0LDYgKzIzNCw5IEBACiAgICAgICBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LiAgWW91IHdpbGwgYXBwcmVjaWF0ZSB0aGlzIHdoZW4gdHJ5aW5nIHRvIHJlYWQgYQogICAgICAgWklQIGZpbGUgdGhhdCBjb250YWlucyBtZW1iZXJzIHdpdGggZHVwbGljYXRlIG5hbWVzLgogCisgICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjQgMy42CisgICAgICBUaGUgYGAnVSdgYCBvciAgYGAnclUnYGAgbW9kZS4gIFVzZSA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgIGZvciByZWFkaW5nCisgICAgICBjb21wcmVzc2VkIHRleHQgZmlsZXMgaW4gOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgbW9kZS4KIAogLi4gbWV0aG9kOjogWmlwRmlsZS5leHRyYWN0KG1lbWJlciwgcGF0aD1Ob25lLCBwd2Q9Tm9uZSkKIApAQCAtMjY2LDEwICsyNjksOCBAQAogICAgICAgTmV2ZXIgZXh0cmFjdCBhcmNoaXZlcyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgcHJpb3IgaW5zcGVjdGlvbi4KICAgICAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgZmlsZXMgYXJlIGNyZWF0ZWQgb3V0c2lkZSBvZiAqcGF0aCosIGUuZy4gbWVtYmVycwogICAgICAgdGhhdCBoYXZlIGFic29sdXRlIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGBgIi8iYGAgb3IgZmlsZW5hbWVzIHdpdGggdHdvCi0gICAgICBkb3RzIGBgIi4uImBgLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4xCi0gICAgICBUaGUgemlwZmlsZSBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LiAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgorICAgICAgZG90cyBgYCIuLiJgYC4gIFRoaXMgbW9kdWxlIGF0dGVtcHRzIHRvIHByZXZlbnQgdGhhdC4KKyAgICAgIFNlZSA6bWV0aDpgZXh0cmFjdGAgbm90ZS4KIAogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLnByaW50ZGlyKCkKQEAgLTM3NiwxNSArMzc3LDE4IEBACiBUaGUgOmNsYXNzOmBQeVppcEZpbGVgIGNvbnN0cnVjdG9yIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlCiA6Y2xhc3M6YFppcEZpbGVgIGNvbnN0cnVjdG9yLCBhbmQgb25lIGFkZGl0aW9uYWwgcGFyYW1ldGVyLCAqb3B0aW1pemUqLgogCi0uLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSwgXAorLi4gY2xhc3M6OiBQeVppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSwgXAogICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9LTEpCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgVGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAgICBJbnN0YW5jZXMgaGF2ZSBvbmUgbWV0aG9kIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIDpjbGFzczpgWmlwRmlsZWAgb2JqZWN0czoKIAotICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnKQorICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnLCBmaWx0ZXJmdW5jPU5vbmUpCiAKICAgICAgIFNlYXJjaCBmb3IgZmlsZXMgOmZpbGU6YFwqLnB5YCBhbmQgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdG8gdGhlCiAgICAgICBhcmNoaXZlLgpAQCAtNDA2LDcgKzQxMCwxMCBAQAogICAgICAgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIDpmaWxlOmBcKi5weVtjb11gIGFyZSBhZGRlZCB1bmRlciB0aGUgcGFja2FnZQogICAgICAgbmFtZSBhcyBhIGZpbGUgcGF0aCwgYW5kIGlmIGFueSBzdWJkaXJlY3RvcmllcyBhcmUgcGFja2FnZSBkaXJlY3RvcmllcywKICAgICAgIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuICAqYmFzZW5hbWUqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbAotICAgICAgdXNlIG9ubHkuICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQorICAgICAgdXNlIG9ubHkuICBXaGVuICpmaWx0ZXJmdW5jKHBhdGhuYW1lKSogaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgY2FsbGVkIGZvciBldmVyeQorICAgICAgaW52b2NhdGlvbi4gV2hlbiBpdCByZXR1cm5zIGEgZmFsc2UgdmFsdWUsIHRoYXQgcGF0aCBhbmQgaXRzIHN1YnBhdGhzIHdpbGwKKyAgICAgIGJlIGlnbm9yZWQuCisgICAgICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQogICAgICAgdGhpczo6CiAKICAgICAgICAgIHN0cmluZy5weWMgICAgICAgICAgICAgICAgICAgIyBUb3AgbGV2ZWwgbmFtZQpAQCAtNDE1LDYgKzQyMiw5IEBACiAgICAgICAgICB0ZXN0L2JvZ3VzL19faW5pdF9fLnB5YyAgICAgICMgU3VicGFja2FnZSBkaXJlY3RvcnkKICAgICAgICAgIHRlc3QvYm9ndXMvbXlmaWxlLnB5YyAgICAgICAgIyBTdWJtb2R1bGUgdGVzdC5ib2d1cy5teWZpbGUKIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAgICBUaGUgKmZpbHRlcmZ1bmMqIHBhcmFtZXRlci4KKwogCiAuLiBfemlwaW5mby1vYmplY3RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGljZW5zZS5yc3QgYi9Eb2MvbGljZW5zZS5yc3QKaW5kZXggM2U5M2EyNi4uZGRjNjliOCAxMDA2NDQKLS0tIGEvRG9jL2xpY2Vuc2UucnN0CisrKyBiL0RvYy9saWNlbnNlLnJzdApAQCAtNTkwLDYgKzU5MCw1NCBAQAogICBTVUNIIERBTUFHRS4KIAogCitTSEEtMworLS0tLS0KKworVGhlIG1vZHVsZSA6bW9kOmBfc2hhM2AgYW5kIDptb2Q6YGhhc2hsaWJgIGFyZSB1c2luZyB0aGUgcmVmZXJlbmNlCitpbXBsZW1lbnRhdGlvbiBvZiBLZWNjYWsuIFRoZSBmaWxlcyBhdCA6ZmlsZTpgTW9kdWxlcy9fc2hhMy9rZWNjYWsvYCBjb250YWluCit0aGUgZm9sbG93aW5nIG5vdGU6OgorCisgIFRoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKKyAgTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorICBxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworICBJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAorICBoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorICBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworCisKK1NpcEhhc2gyNAorLS0tLS0tLS0tCisKK1RoZSBmaWxlIDpmaWxlOmBQeXRob24vcHloYXNoLmNgIGNvbnRhaW5zIE1hcmVrIE1hamtvd3NraScgaW1wbGVtZW50YXRpb24gb2YKK0RhbiBCZXJuc3RlaW4ncyBTaXBIYXNoMjQgYWxnb3JpdGhtLiBUaGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBub3RlOjoKKworICA8TUlUIExpY2Vuc2U+CisgIENvcHlyaWdodCAoYykgMjAxMyAgTWFyZWsgTWFqa293c2tpIDxtYXJla0Bwb3Bjb3VudC5vcmc+CisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgIDwvTUlUIExpY2Vuc2U+CisKKyAgT3JpZ2luYWwgbG9jYXRpb246CisgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworICBTb2x1dGlvbiBpbnNwaXJlZCBieSBjb2RlIGZyb206CisgICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICAgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbiAoaHR0cHM6Ly8xMzEwMDIubmV0L3NpcGhhc2gvc2lwaGFzaDI0LmMpCisKKwogc3RydG9kIGFuZCBkdG9hCiAtLS0tLS0tLS0tLS0tLS0KIApAQCAtODQ1LDMgKzg5Myw0NCBAQAogICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCiAgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKIAorCitjZnVoYXNoCistLS0tLS0tCisKK1RoZSBpbXBsZW1lbnR0YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIGlzIGJhc2VkCitvbiB0aGUgY2Z1aGFzaCBwcm9qZWN0OjoKKworICAgQ29weXJpZ2h0IChjKSAyMDA1IERvbiBPd2VucworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggOGFmYzY5ZS4uZTM1YWE5ZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTQ5MywxNCArNDkzLDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCA0OGE0MmNjLi4wZTkzNmM2IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC05MzQsNiArOTM0LDIwIEBACiAgICAgICBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpCiAgICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLgogCisgICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDoKKworICAgICAgLi4gbWV0aG9kOjogZnJhbWUuY2xlYXIoKQorCisgICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnkgdGhlCisgICAgICAgICBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlIGdlbmVyYXRvcgorICAgICAgICAgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGludm9sdmluZyBmcmFtZQorICAgICAgICAgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhbiBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzCisgICAgICAgICB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuCisKKyAgICAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgVHJhY2ViYWNrIG9iamVjdHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogdHJhY2ViYWNrCkBAIC0xMTIxLDEyICsxMTM1LDEwIEBACiAgICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3Qgc2l0dWF0aW9uCiAgICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBsYXR0ZXIgdHdvCiAgICAgICBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCi0gICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUKLSAgICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmCi0gICAgICB0aGVyZSBhcmUgbm8gUHl0aG9uLSBsZXZlbCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cKLSAgICAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5Ci0gICAgICB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLgorICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbgorICAgICAgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkIChpdCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgICAgIHRvcGljLgogCiAgICAuLiB3YXJuaW5nOjoKIApAQCAtMTgzMCw2ICsxODQyLDE1IEBACiAgICBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LgogCiAKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZikKKworICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IubGVuZ3RoX2hpbnRgLiBTaG91bGQgcmV0dXJuIGFuIGVzdGltYXRlZAorICAgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gdGhlIGFjdHVhbCBsZW5ndGgpLgorICAgVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgYGA+PWBgIDAuIFRoaXMgbWV0aG9kIGlzIHB1cmVseSBhbgorICAgb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBub3RlOjoKIAogICAgU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQSBjYWxsIGxpa2UgOjoKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdCBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAppbmRleCBlYjQ5N2ExLi5iZTc5Yjk5IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CkBAIC0yMTAsNiArMjEwLDcgQEAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IGZpbmRlcgogICAgIHNpbmdsZTogbG9hZGVyCisgICAgc2luZ2xlOiBtb2R1bGUgc3BlYwogCiBJZiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIFB5dGhvbidzIGltcG9ydAogcHJvdG9jb2wgaXMgaW52b2tlZCB0byBmaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUuICBUaGlzIHByb3RvY29sIGNvbnNpc3RzIG9mCkBAIC0yMzAsMTMgKzIzMSwxNyBAQAogcmFuZ2UgYW5kIHNjb3BlIG9mIG1vZHVsZSBzZWFyY2hpbmcuCiAKIEZpbmRlcnMgZG8gbm90IGFjdHVhbGx5IGxvYWQgbW9kdWxlcy4gIElmIHRoZXkgY2FuIGZpbmQgdGhlIG5hbWVkIG1vZHVsZSwgdGhleQotcmV0dXJuIGEgOnRlcm06YGxvYWRlcmAsIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gaW52b2tlcyB0byBsb2FkIHRoZQotbW9kdWxlIGFuZCBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIG9iamVjdC4KK3JldHVybiBhIDpkZm46YG1vZHVsZSBzcGVjYCwgYW4gZW5jYXBzdWxhdGlvbiBvZiB0aGUgbW9kdWxlJ3MgaW1wb3J0LXJlbGF0ZWQKK2luZm9ybWF0aW9uLCB3aGljaCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGVuIHVzZXMgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIHByb3RvY29sIGZvciBmaW5kZXJzIGFuZCBsb2FkZXJzIGluIG1vcmUKIGRldGFpbCwgaW5jbHVkaW5nIGhvdyB5b3UgY2FuIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV3IG9uZXMgdG8gZXh0ZW5kIHRoZQogaW1wb3J0IG1hY2hpbmVyeS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbiwgZmluZGVycyByZXR1cm5lZCA6dGVybTpgbG9hZGVycyA8bG9hZGVyPmAKKyAgIGRpcmVjdGx5LCB3aGVyZWFzIG5vdyB0aGV5IHJldHVybiBtb2R1bGUgc3BlY3Mgd2hpY2ggKmNvbnRhaW4qIGxvYWRlcnMuCisgICBMb2FkZXJzIGFyZSBzdGlsbCB1c2VkIGR1cmluZyBpbXBvcnQgYnV0IGhhdmUgZmV3ZXIgcmVzcG9uc2liaWxpdGllcy4KIAogSW1wb3J0IGhvb2tzCiAtLS0tLS0tLS0tLS0KQEAgLTI3MCwyNCArMjc1LDIzIEBACiAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IHN5cy5tZXRhX3BhdGgKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbW9kdWxlCi0gICAgcGFpcjogZmluZGVyOyBmaW5kX2xvYWRlcgorICAgIHBhaXI6IGZpbmRlcjsgZmluZF9zcGVjCiAKIFdoZW4gdGhlIG5hbWVkIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgUHl0aG9uIG5leHQKIHNlYXJjaGVzIDpkYXRhOmBzeXMubWV0YV9wYXRoYCwgd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIG1ldGEgcGF0aCBmaW5kZXIKIG9iamVjdHMuICBUaGVzZSBmaW5kZXJzIGFyZSBxdWVyaWVkIGluIG9yZGVyIHRvIHNlZSBpZiB0aGV5IGtub3cgaG93IHRvIGhhbmRsZQogdGhlIG5hbWVkIG1vZHVsZS4gIE1ldGEgcGF0aCBmaW5kZXJzIG11c3QgaW1wbGVtZW50IGEgbWV0aG9kIGNhbGxlZAotOm1ldGg6YGZpbmRfbW9kdWxlKClgIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMsIGEgbmFtZSBhbmQgYW4gaW1wb3J0IHBhdGguCis6bWV0aDpgZmluZF9zcGVjKClgIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMsIGEgbmFtZSBhbmQgYW4gaW1wb3J0IHBhdGguCiBUaGUgbWV0YSBwYXRoIGZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4KIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KIAogSWYgdGhlIG1ldGEgcGF0aCBmaW5kZXIga25vd3MgaG93IHRvIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGEKLWxvYWRlciBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgorc3BlYyBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgogOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHByb2Nlc3NpbmcgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBsaXN0IHdpdGhvdXQgcmV0dXJuaW5nCi1hIGxvYWRlciwgdGhlbiBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkCithIHNwZWMsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAogYXJlIHNpbXBseSBwcm9wYWdhdGVkIHVwLCBhYm9ydGluZyB0aGUgaW1wb3J0IHByb2Nlc3MuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bworVGhlIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bwogYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nCiBpbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aAogZW50cmllcyB0byB1c2UgZm9yIHRoZSBtb2R1bGUgc2VhcmNoLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kCkBAIC0yOTksMTIgKzMwMywxMiBAQAogVGhlIG1ldGEgcGF0aCBtYXkgYmUgdHJhdmVyc2VkIG11bHRpcGxlIHRpbWVzIGZvciBhIHNpbmdsZSBpbXBvcnQgcmVxdWVzdC4KIEZvciBleGFtcGxlLCBhc3N1bWluZyBub25lIG9mIHRoZSBtb2R1bGVzIGludm9sdmVkIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLAogaW1wb3J0aW5nIGBgZm9vLmJhci5iYXpgYCB3aWxsIGZpcnN0IHBlcmZvcm0gYSB0b3AgbGV2ZWwgaW1wb3J0LCBjYWxsaW5nCi1gYG1wZi5maW5kX21vZHVsZSgiZm9vIiwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgorYGBtcGYuZmluZF9zcGVjKCJmb28iLCBOb25lKWBgIG9uIGVhY2ggbWV0YSBwYXRoIGZpbmRlciAoYGBtcGZgYCkuIEFmdGVyCiBgYGZvb2BgIGhhcyBiZWVuIGltcG9ydGVkLCBgYGZvby5iYXJgYCB3aWxsIGJlIGltcG9ydGVkIGJ5IHRyYXZlcnNpbmcgdGhlCiBtZXRhIHBhdGggYSBzZWNvbmQgdGltZSwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIiLCBmb28uX19wYXRoX18pYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhciIsIGZvby5fX3BhdGhfXylgYC4gT25jZSBgYGZvby5iYXJgYCBoYXMgYmVlbgogaW1wb3J0ZWQsIHRoZSBmaW5hbCB0cmF2ZXJzYWwgd2lsbCBjYWxsCi1gYG1wZi5maW5kX21vZHVsZSgiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fKWBgLgorYGBtcGYuZmluZF9zcGVjKCJmb28uYmFyLmJheiIsIGZvby5iYXIuX19wYXRoX18pYGAuCiAKIFNvbWUgbWV0YSBwYXRoIGZpbmRlcnMgb25seSBzdXBwb3J0IHRvcCBsZXZlbCBpbXBvcnRzLiBUaGVzZSBpbXBvcnRlcnMgd2lsbAogYWx3YXlzIHJldHVybiBgYE5vbmVgYCB3aGVuIGFueXRoaW5nIG90aGVyIHRoYW4gYGBOb25lYGAgaXMgcGFzc2VkIGFzIHRoZQpAQCAtMzE1LDEyOSArMzE5LDIzMSBAQAogbW9kdWxlcywgYW5kIG9uZSB0aGF0IGtub3dzIGhvdyB0byBpbXBvcnQgbW9kdWxlcyBmcm9tIGFuIDp0ZXJtOmBpbXBvcnQgcGF0aGAKIChpLmUuIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgKS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBmaW5kX3NwZWMoKSBtZXRob2Qgb2YgbWV0YSBwYXRoIGZpbmRlcnMgcmVwbGFjZWQgOm1ldGg6YGZpbmRfbW9kdWxlKClgLgorICAgd2hpY2ggaXMgbm93IGRlcHJlY2F0ZWQuICBXaGlsZSBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2UsCisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeSBpdCBvbmx5IGlmIHRoZSBmaW5kZXIgZG9lcyBub3QgaW1wbGVtZW50CisgICBmaW5kX3NwZWMoKS4KIAotTG9hZGVycworCitMb2FkaW5nCiA9PT09PT09CiAKLUlmIGFuZCB3aGVuIGEgbW9kdWxlIGxvYWRlciBpcyBmb3VuZCBpdHMKLTptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZCBpcyBjYWxsZWQsIHdpdGggYSBzaW5nbGUKLWFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZC4gIFRoaXMgbWV0aG9kCi1oYXMgc2V2ZXJhbCByZXNwb25zaWJpbGl0aWVzLCBhbmQgc2hvdWxkIHJldHVybiB0aGUgbW9kdWxlIG9iamVjdCBpdCBoYXMKLWxvYWRlZCBbI2ZubG9dXy4gIElmIGl0IGNhbm5vdCBsb2FkIHRoZSBtb2R1bGUsIGl0IHNob3VsZCByYWlzZSBhbgotOmV4YzpgSW1wb3J0RXJyb3JgLCBhbHRob3VnaCBhbnkgb3RoZXIgZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcKLTptZXRoOmBsb2FkX21vZHVsZSgpYCB3aWxsIGJlIHByb3BhZ2F0ZWQuCitJZiBhbmQgd2hlbiBhIG1vZHVsZSBzcGVjIGlzIGZvdW5kLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZSBpdCAoYW5kCit0aGUgbG9hZGVyIGl0IGNvbnRhaW5zKSB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4gIEhlcmUgaXMgYW4gYXBwcm94aW1hdGlvbgorb2Ygd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgbG9hZGluZyBwb3J0aW9uIG9mIGltcG9ydDo6CiAKLUluIG1hbnkgY2FzZXMsIHRoZSBmaW5kZXIgYW5kIGxvYWRlciBjYW4gYmUgdGhlIHNhbWUgb2JqZWN0OyBpbiBzdWNoIGNhc2VzIHRoZQotOm1ldGg6YGZpbmRlci5maW5kX21vZHVsZSgpYCB3b3VsZCBqdXN0IHJldHVybiBgYHNlbGZgYC4KKyAgICBtb2R1bGUgPSBOb25lCisgICAgaWYgc3BlYy5sb2FkZXIgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoc3BlYy5sb2FkZXIsICdjcmVhdGVfbW9kdWxlJyk6CisgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgbW9kdWxlID0gTW9kdWxlVHlwZShzcGVjLm5hbWUpCisgICAgIyBUaGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0IHNldCBoZXJlOgorICAgIF9pbml0X21vZHVsZV9hdHRycyhzcGVjLCBtb2R1bGUpCiAKLUxvYWRlcnMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgorICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICBzeXMubW9kdWxlc1tzcGVjLm5hbWVdID0gbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHVuc3VwcG9ydGVkCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgIGVsaWYgbm90IGhhc2F0dHIoc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5sb2FkX21vZHVsZShzcGVjLm5hbWUpCisgICAgZWxzZToKKyAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjLmxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmFpc2UKKyAgICBtb2R1bGVfdG9fcmV0dXJuID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorCitOb3RlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczoKIAogICogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbW9kdWxlIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyIG11c3QgdXNlIHRoYXQgZXhpc3RpbmcgbW9kdWxlLiAgKE90aGVyd2lzZSwKLSAgIDpmdW5jOmBpbXAucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUgbmFtZWQgbW9kdWxlIGRvZXMKLSAgIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyIG11c3QgY3JlYXRlIGEgbmV3IG1vZHVsZQotICAgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIGltcG9ydCB3aWxsIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBpdC4KIAotICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgKm11c3QqIGV4aXN0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIKKyAqIFRoZSBtb2R1bGUgd2lsbCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCiAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUuICBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgbW9kdWxlIGNvZGUgbWF5CiAgICAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgaW1wb3J0IGl0c2VsZjsgYWRkaW5nIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AKICAgIGJlZm9yZWhhbmQgcHJldmVudHMgdW5ib3VuZGVkIHJlY3Vyc2lvbiBpbiB0aGUgd29yc3QgY2FzZSBhbmQgbXVsdGlwbGUKICAgIGxvYWRpbmcgaW4gdGhlIGJlc3QuCiAKLSAgIElmIGxvYWRpbmcgZmFpbHMsIHRoZSBsb2FkZXIgbXVzdCByZW1vdmUgYW55IG1vZHVsZXMgaXQgaGFzIGluc2VydGVkIGludG8KLSAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIGJ1dCBpdCBtdXN0IHJlbW92ZSAqKm9ubHkqKiB0aGUgZmFpbGluZyBtb2R1bGUsIGFuZAotICAgb25seSBpZiB0aGUgbG9hZGVyIGl0c2VsZiBoYXMgbG9hZGVkIGl0IGV4cGxpY2l0bHkuICBBbnkgbW9kdWxlIGFscmVhZHkgaW4KLSAgIHRoZSA6ZGF0YTpgc3lzLm1vZHVsZXNgIGNhY2hlLCBhbmQgYW55IG1vZHVsZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkCi0gICBhcyBhIHNpZGUtZWZmZWN0LCBtdXN0IHJlbWFpbiBpbiB0aGUgY2FjaGUuCisgKiBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgZmFpbGluZyBtb2R1bGUgLS0gYW5kIG9ubHkgdGhlIGZhaWxpbmcgbW9kdWxlIC0tCisgICBnZXRzIHJlbW92ZWQgZnJvbSA6ZGF0YTpgc3lzLm1vZHVsZXNgLiAgQW55IG1vZHVsZSBhbHJlYWR5IGluIHRoZQorICAgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAorICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLiAgVGhpcyBjb250cmFzdHMgd2l0aAorICAgcmVsb2FkaW5nIHdoZXJlIGV2ZW4gdGhlIGZhaWxpbmcgbW9kdWxlIGlzIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBJZiBzZXQsIHRoaXMKLSAgIGF0dHJpYnV0ZSdzIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcuICBUaGUgbG9hZGVyIG1heSBvcHQgdG8gbGVhdmUKLSAgIGBgX19maWxlX19gYCB1bnNldCBpZiBpdCBoYXMgbm8gc2VtYW50aWMgbWVhbmluZyAoZS5nLiBhIG1vZHVsZSBsb2FkZWQgZnJvbQotICAgYSBkYXRhYmFzZSkuIElmIGBgX19maWxlX19gYCBpcyBzZXQsIGl0IG1heSBhbHNvIGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUKLSAgIGBgX19jYWNoZWRfX2BgIGF0dHJpYnV0ZSB3aGljaCBpcyB0aGUgcGF0aCB0byBhbnkgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGUKLSAgIGNvZGUgKGUuZy4gYnl0ZS1jb21waWxlZCBmaWxlKS4gVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdCB0byBzZXQgdGhpcwotICAgYXR0cmlidXRlOyB0aGUgcGF0aCBjYW4gc2ltcGx5IHBvaW50IHRvIHdoZXRoZXIgdGhlIGNvbXBpbGVkIGZpbGUgd291bGQKLSAgIGV4aXN0IChzZWUgOnBlcDpgMzE0N2ApLgorICogQWZ0ZXIgdGhlIG1vZHVsZSBpcyBjcmVhdGVkIGJ1dCBiZWZvcmUgZXhlY3V0aW9uLCB0aGUgaW1wb3J0IG1hY2hpbmVyeQorICAgc2V0cyB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgKCJpbml0X21vZHVsZV9hdHRycyIpLCBhcworICAgc3VtbWFyaXplZCBpbiBhIDpyZWY6YGxhdGVyIHNlY3Rpb24gPGltcG9ydC1tb2QtYXR0cnM+YC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBXaGlsZSBub3QKLSAgIHJlcXVpcmVkLCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBzbyB0aGF0IHRoZQotICAgOm1ldGg6YHJlcHIoKWAgb2YgdGhlIG1vZHVsZSBpcyBtb3JlIGluZm9ybWF0aXZlLgorICogTW9kdWxlIGV4ZWN1dGlvbiBpcyB0aGUga2V5IG1vbWVudCBvZiBsb2FkaW5nIGluIHdoaWNoIHRoZSBtb2R1bGUncworICAgbmFtZXNwYWNlIGdldHMgcG9wdWxhdGVkLiAgRXhlY3V0aW9uIGlzIGVudGlyZWx5IGRlbGVnYXRlZCB0byB0aGUKKyAgIGxvYWRlciwgd2hpY2ggZ2V0cyB0byBkZWNpZGUgd2hhdCBnZXRzIHBvcHVsYXRlZCBhbmQgaG93LgogCi0gKiBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIGxvYWRlciBtdXN0Ci0gICBzZXQgdGhlIG1vZHVsZSBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiAgVGhlIHZhbHVlIG11c3QgYmUKLSAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UKLSAgIHRvIHRoZSBsb2FkZXIuIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzCi0gICB3aGVuIGl0ZXJhdGVkIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUKLSAgIGdpdmVuIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKyAqIFRoZSBtb2R1bGUgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBhbmQgcGFzc2VkIHRvIGV4ZWNfbW9kdWxlKCkgbWF5CisgICBub3QgYmUgdGhlIG9uZSByZXR1cm5lZCBhdCB0aGUgZW5kIG9mIGltcG9ydCBbI2ZubG9dXy4KIAotICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAotICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKLSAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBpbXBvcnQgc3lzdGVtIGhhcyB0YWtlbiBvdmVyIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCisgICBsb2FkZXJzLiAgVGhlc2Ugd2VyZSBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGUgOm1ldGg6YGxvYWRfbW9kdWxlKClgCisgICBtZXRob2QuCiAKLSAqIFRoZSBtb2R1bGUncyBgYF9fcGFja2FnZV9fYGAgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQuICBJdHMgdmFsdWUgbXVzdCBiZSBhCi0gICBzdHJpbmcsIGJ1dCBpdCBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgaXRzIGBgX19uYW1lX19gYC4gIElmIHRoZSBhdHRyaWJ1dGUKLSAgIGlzIHNldCB0byBgYE5vbmVgYCBvciBpcyBtaXNzaW5nLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGZpbGwgaXQgaW4gd2l0aCBhCi0gICBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLiAgV2hlbiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgaXRzIGBgX19wYWNrYWdlX19gYAotICAgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbiB0aGUgbW9kdWxlIGlzIG5vdCBhIHBhY2thZ2UsCi0gICBgYF9fcGFja2FnZV9fYGAgc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGZvciB0b3AtbGV2ZWwgbW9kdWxlcywgb3IKLSAgIGZvciBzdWJtb2R1bGVzLCB0byB0aGUgcGFyZW50IHBhY2thZ2UncyBuYW1lLiAgU2VlIDpwZXA6YDM2NmAgZm9yIGZ1cnRoZXIKLSAgIGRldGFpbHMuCitMb2FkZXJzCistLS0tLS0tCiAKLSAgIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgaW5zdGVhZCBvZiBgYF9fbmFtZV9fYGAgdG8gY2FsY3VsYXRlIGV4cGxpY2l0Ci0gICByZWxhdGl2ZSBpbXBvcnRzIGZvciBtYWluIG1vZHVsZXMsIGFzIGRlZmluZWQgaW4gOnBlcDpgMzY2YC4KK01vZHVsZSBsb2FkZXJzIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIG9mIGxvYWRpbmc6IG1vZHVsZSBleGVjdXRpb24uCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBjYWxscyB0aGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZSgpYAorbWV0aG9kIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBtb2R1bGUgb2JqZWN0IHRvIGV4ZWN1dGUuICBBbnkgdmFsdWUKK3JldHVybmVkIGZyb20gZXhlY19tb2R1bGUoKSBpcyBpZ25vcmVkLgorCitMb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKIAogICogSWYgdGhlIG1vZHVsZSBpcyBhIFB5dGhvbiBtb2R1bGUgKGFzIG9wcG9zZWQgdG8gYSBidWlsdC1pbiBtb2R1bGUgb3IgYQogICAgZHluYW1pY2FsbHkgbG9hZGVkIGV4dGVuc2lvbiksIHRoZSBsb2FkZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIG1vZHVsZSdzIGNvZGUKICAgIGluIHRoZSBtb2R1bGUncyBnbG9iYWwgbmFtZSBzcGFjZSAoYGBtb2R1bGUuX19kaWN0X19gYCkuCiAKKyAqIElmIGxvYWRlciBjYW5ub3QgZXhlY3V0ZSB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KKyAgIDpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCisgICA6bWV0aDpgZXhlY19tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgogCi1Nb2R1bGUgcmVwcnMKLS0tLS0tLS0tLS0tLQorSW4gbWFueSBjYXNlcywgdGhlIGZpbmRlciBhbmQgbG9hZGVyIGNhbiBiZSB0aGUgc2FtZSBvYmplY3Q7IGluIHN1Y2ggY2FzZXMgdGhlCis6bWV0aDpgZmluZGVyLmZpbmRfc3BlYygpYCB3b3VsZCBqdXN0IHJldHVybiBhIHNwZWMgd2l0aCB0aGUgbG9hZGVyIHNldAordG8gYGBzZWxmYGAuCiAKLUJ5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCi1hdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGhvb2tzIGluIHRoZSBsb2FkZXIsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5IGNvbnRyb2wKLXRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorTW9kdWxlIGxvYWRlcnMgbWF5IG9wdCBpbiB0byBjcmVhdGluZyB0aGUgbW9kdWxlIG9iamVjdCBkdXJpbmcgbG9hZGluZworYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YGNyZWF0ZV9tb2R1bGUoKWAgbWV0aG9kLiAgSXQgdGFrZXMgb25lIGFyZ3VtZW50LAordGhlIG1vZHVsZSBzcGVjLCBhbmQgcmV0dXJucyB0aGUgbmV3IG1vZHVsZSBvYmplY3QgdG8gdXNlIGR1cmluZyBsb2FkaW5nLgorY3JlYXRlX21vZHVsZSgpIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUgb2JqZWN0LgorSWYgdGhlIGxvYWRlciBkb2VzIG5vdCBkZWZpbmUgY3JlYXRlX21vZHVsZSgpLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsCitjcmVhdGUgdGhlIG5ldyBtb2R1bGUgaXRzZWxmLgogCi1Mb2FkZXJzIG1heSBpbXBsZW1lbnQgYSA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kIHdoaWNoIHRha2VzIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIG1vZHVsZSBvYmplY3QuICBXaGVuIGBgcmVwcihtb2R1bGUpYGAgaXMgY2FsbGVkIGZvciBhIG1vZHVsZQotd2l0aCBhIGxvYWRlciBzdXBwb3J0aW5nIHRoaXMgcHJvdG9jb2wsIHdoYXRldmVyIGlzIHJldHVybmVkIGZyb20KLWBgbW9kdWxlLl9fbG9hZGVyX18ubW9kdWxlX3JlcHIobW9kdWxlKWBgIGlzIHJldHVybmVkIGFzIHRoZSBtb2R1bGUncyByZXByCi13aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gIFRoaXMgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIFRoZSBjcmVhdGVfbW9kdWxlKCkgbWV0aG9kIG9mIGxvYWRlcnMuCiAKLUlmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSwgb3IgdGhlIGxvYWRlciBoYXMgbm8KLTptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIHRoZW4gdGhlIG1vZHVsZSBvYmplY3QgaW1wbGVtZW50YXRpb24gaXRzZWxmCi13aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gIEl0IHdpbGwKLXRyeSB0byB1c2UgdGhlIGBgbW9kdWxlLl9fbmFtZV9fYGAsIGBgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZAotYGBtb2R1bGUuX19sb2FkZXJfX2BgIGFzIGlucHV0IGludG8gdGhlIHJlcHIsIHdpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyCi1pbmZvcm1hdGlvbiBpcyBtaXNzaW5nLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBsb2FkX21vZHVsZSgpIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkgZXhlY19tb2R1bGUoKSBhbmQgdGhlIGltcG9ydAorICAgbWFjaGluZXJ5IGFzc3VtZWQgYWxsIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mIGxvYWRpbmcuCiAKLUhlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBsb2FkZXJzLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZQorICAgdGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGUoKWAgbWV0aG9kIG9mIGxvYWRlcnMgaWYgaXQKKyAgIGV4aXN0cyBhbmQgdGhlIGxvYWRlciBkb2VzIG5vdCBhbHNvIGltcGxlbWVudCBleGVjX21vZHVsZSgpLiAgSG93ZXZlciwKKyAgIGxvYWRfbW9kdWxlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbG9hZGVycyBzaG91bGQgaW1wbGVtZW50CisgICBleGVjX21vZHVsZSgpIGluc3RlYWQuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2xvYWRlcl9fYGAgYW5kIHRoYXQgbG9hZGVyIGhhcyBhCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kLCBjYWxsIGl0IHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZQotICAgbW9kdWxlIG9iamVjdC4gIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB1c2VkIGFzIHRoZSBtb2R1bGUncyByZXByLgorICAgVGhlIGxvYWRfbW9kdWxlKCkgbWV0aG9kIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgYm9pbGVycGxhdGUgbG9hZGluZworICAgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgYWJvdmUgaW4gYWRkaXRpb24gdG8gZXhlY3V0aW5nIHRoZSBtb2R1bGUuICBBbGwKKyAgIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5LCB3aXRoIHNvbWUgYWRkaXRpb25hbCBjbGFyaWZpY2F0aW9uOgogCi0gKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIDptZXRoOmBtb2R1bGVfcmVwcigpYCwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQKLSAgIGFuZCBkaXNjYXJkZWQsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIHJlcHIgY29udGludWVzIGFzIGlmCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgZGlkIG5vdCBleGlzdC4KKyAgICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgorICAgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4KKyAgICAgIChPdGhlcndpc2UsIDpmdW5jOmBpbXAucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUKKyAgICAgIG5hbWVkIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyCisgICAgICBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKLSAgIG1vZHVsZSdzIHJlcHIuCisgICAgKiBUaGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgICAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUsIHRvIHByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiBvciBtdWx0aXBsZQorICAgICAgbG9hZGluZy4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCwgdGhlbiB0aGUKLSAgIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorICAgICogSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQKKyAgICAgIGludG8gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nCisgICAgICBtb2R1bGUsIGFuZCBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4KIAotICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorTW9kdWxlIHNwZWMKKy0tLS0tLS0tLS0tCiAKLVRoaXMgZXhhbXBsZSwgZnJvbSA6cGVwOmA0MjBgIHNob3dzIGhvdyBhIGxvYWRlciBjYW4gY3JhZnQgaXRzIG93biBtb2R1bGUKLXJlcHI6OgorVGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlcyBhIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBtb2R1bGUKK2R1cmluZyBpbXBvcnQsIGVzcGVjaWFsbHkgYmVmb3JlIGxvYWRpbmcuICBNb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcworY29tbW9uIHRvIGFsbCBtb2R1bGVzLiAgVGhlIHB1cnBvc2Ugb2YgYSBtb2R1bGUncyBzcGVjIGlzIHRvIGVuY2Fwc3VsYXRlCit0aGlzIGltcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIG9uIGEgcGVyLW1vZHVsZSBiYXNpcy4KIAotICAgIGNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCitVc2luZyBhIHNwZWMgZHVyaW5nIGltcG9ydCBhbGxvd3Mgc3RhdGUgdG8gYmUgdHJhbnNmZXJyZWQgYmV0d2VlbiBpbXBvcnQKK3N5c3RlbSBjb21wb25lbnRzLCBlLmcuIGJldHdlZW4gdGhlIGZpbmRlciB0aGF0IGNyZWF0ZXMgdGhlIG1vZHVsZSBzcGVjCithbmQgdGhlIGxvYWRlciB0aGF0IGV4ZWN1dGVzIGl0LiAgTW9zdCBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB0byBwZXJmb3JtIHRoZSBib2lsZXJwbGF0ZSBvcGVyYXRpb25zIG9mIGxvYWRpbmcsCit3aGVyZWFzIHdpdGhvdXQgYSBtb2R1bGUgc3BlYyB0aGUgbG9hZGVyIGhhZCB0aGF0IHJlc3BvbnNpYmlsaXR5LgogCitTZWUgOmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjYCBmb3IgbW9yZSBzcGVjaWZpY3Mgb24gd2hhdAoraW5mb3JtYXRpb24gYSBtb2R1bGUncyBzcGVjIG1heSBob2xkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gX2ltcG9ydC1tb2QtYXR0cnM6CisKK0ltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBmaWxscyBpbiB0aGVzZSBhdHRyaWJ1dGVzIG9uIGVhY2ggbW9kdWxlIG9iamVjdAorZHVyaW5nIGxvYWRpbmcsIGJhc2VkIG9uIHRoZSBtb2R1bGUncyBzcGVjLCBiZWZvcmUgdGhlIGxvYWRlciBleGVjdXRlcwordGhlIG1vZHVsZS4KKworLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCisgICB0aGUgbW9kdWxlLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIG1vZHVsZSBpbgorICAgdGhlIGltcG9ydCBzeXN0ZW0uCisKKy4uIGF0dHJpYnV0ZTo6IF9fbG9hZGVyX18KKworICAgVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0CisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB1c2VkIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyBtb3N0bHkKKyAgIGZvciBpbnRyb3NwZWN0aW9uLCBidXQgY2FuIGJlIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljCisgICBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorCisuLiBhdHRyaWJ1dGU6OiBfX3BhY2thZ2VfXworCisgICBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0CisgICBiZSBhIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbgorICAgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAgdmFsdWUgc2hvdWxkIGJlIHNldCB0bworICAgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLCBgYF9fcGFja2FnZV9fYGAKKyAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yIGZvcgorICAgc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAorICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCisKKy4uIGF0dHJpYnV0ZTo6IF9fc3BlY19fCisKKyAgIFRoZSBgYF9fc3BlY19fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBtb2R1bGUgc3BlYyB0aGF0IHdhcworICAgdXNlZCB3aGVuIGltcG9ydGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyB1c2VkIHByaW1hcmlseSBmb3IKKyAgIGludHJvc3BlY3Rpb24gYW5kIGR1cmluZyByZWxvYWRpbmcuCisKKy4uIGF0dHJpYnV0ZTo6IF9fcGF0aF9fCisKKyAgIElmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlIChlaXRoZXIgcmVndWxhciBvciBuYW1lc3BhY2UpLCB0aGUgbW9kdWxlCisgICBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0LiAgVGhlIHZhbHVlIG11c3QgYmUKKyAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UuCisgICBJZiBgYF9fcGF0aF9fYGAgaXMgbm90IGVtcHR5LCBpdCBtdXN0IHByb2R1Y2Ugc3RyaW5ncyB3aGVuIGl0ZXJhdGVkCisgICBvdmVyLiBNb3JlIGRldGFpbHMgb24gdGhlIHNlbWFudGljcyBvZiBgYF9fcGF0aF9fYGAgYXJlIGdpdmVuCisgICA6cmVmOmBiZWxvdyA8cGFja2FnZS1wYXRoLXJ1bGVzPmAuCisKKyAgIE5vbi1wYWNrYWdlIG1vZHVsZXMgc2hvdWxkIG5vdCBoYXZlIGEgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4KKworLi4gYXR0cmlidXRlOjogX19maWxlX18KKy4uIGF0dHJpYnV0ZTo6IF9fY2FjaGVkX18KKworICAgYGBfX2ZpbGVfX2BgIGlzIG9wdGlvbmFsLiBJZiBzZXQsIHRoaXMgYXR0cmlidXRlJ3MgdmFsdWUgbXVzdCBiZSBhCisgICBzdHJpbmcuICBUaGUgaW1wb3J0IHN5c3RlbSBtYXkgb3B0IHRvIGxlYXZlIGBgX19maWxlX19gYCB1bnNldCBpZiBpdAorICAgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20gYSBkYXRhYmFzZSkuCisKKyAgIElmIGBgX19maWxlX19gYCBpcyBzZXQsIGl0IG1heSBhbHNvIGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUKKyAgIGBgX19jYWNoZWRfX2BgIGF0dHJpYnV0ZSB3aGljaCBpcyB0aGUgcGF0aCB0byBhbnkgY29tcGlsZWQgdmVyc2lvbiBvZgorICAgdGhlIGNvZGUgKGUuZy4gYnl0ZS1jb21waWxlZCBmaWxlKS4gVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdAorICAgdG8gc2V0IHRoaXMgYXR0cmlidXRlOyB0aGUgcGF0aCBjYW4gc2ltcGx5IHBvaW50IHRvIHdoZXJlIHRoZQorICAgY29tcGlsZWQgZmlsZSB3b3VsZCBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKworICAgSXQgaXMgYWxzbyBhcHByb3ByaWF0ZSB0byBzZXQgYGBfX2NhY2hlZF9fYGAgd2hlbiBgYF9fZmlsZV9fYGAgaXMgbm90CisgICBzZXQuICBIb3dldmVyLCB0aGF0IHNjZW5hcmlvIGlzIHF1aXRlIGF0eXBpY2FsLiAgVWx0aW1hdGVseSwgdGhlCisgICBsb2FkZXIgaXMgd2hhdCBtYWtlcyB1c2Ugb2YgYGBfX2ZpbGVfX2BgIGFuZC9vciBgYF9fY2FjaGVkX19gYC4gIFNvCisgICBpZiBhIGxvYWRlciBjYW4gbG9hZCBmcm9tIGEgY2FjaGVkIG1vZHVsZSBidXQgb3RoZXJ3aXNlIGRvZXMgbm90IGxvYWQKKyAgIGZyb20gYSBmaWxlLCB0aGF0IGF0eXBpY2FsIHNjZW5hcmlvIG1heSBiZSBhcHByb3ByaWF0ZS4KIAogLi4gX3BhY2thZ2UtcGF0aC1ydWxlczoKIApAQCAtNDYyLDkgKzU2OCw0NiBAQAogYXR0cmlidXRlLCBhbmQgdGhpcyB3YXMgdHlwaWNhbGx5IHRoZSB3YXkgbmFtZXNwYWNlIHBhY2thZ2VzIHdlcmUgaW1wbGVtZW50ZWQKIHByaW9yIHRvIDpwZXA6YDQyMGAuICBXaXRoIHRoZSBhZG9wdGlvbiBvZiA6cGVwOmA0MjBgLCBuYW1lc3BhY2UgcGFja2FnZXMgbm8KIGxvbmdlciBuZWVkIHRvIHN1cHBseSBgYF9faW5pdF9fLnB5YGAgZmlsZXMgY29udGFpbmluZyBvbmx5IGBgX19wYXRoX19gYAotbWFuaXB1bGF0aW9uIGNvZGU7IHRoZSBuYW1lc3BhY2UgbG9hZGVyIGF1dG9tYXRpY2FsbHkgc2V0cyBgYF9fcGF0aF9fYGAKK21hbmlwdWxhdGlvbiBjb2RlOyB0aGUgaW1wb3J0IG1hY2hpbmVyeSBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCiBjb3JyZWN0bHkgZm9yIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KIAorTW9kdWxlIHJlcHJzCistLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgYWxsIG1vZHVsZXMgaGF2ZSBhIHVzYWJsZSByZXByLCBob3dldmVyIGRlcGVuZGluZyBvbiB0aGUKK2F0dHJpYnV0ZXMgc2V0IGFib3ZlLCBhbmQgaW4gdGhlIG1vZHVsZSdzIHNwZWMsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5Citjb250cm9sIHRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorCitJZiB0aGUgbW9kdWxlIGhhcyBhIHNwZWMgKGBgX19zcGVjX19gYCksIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdHJ5Cit0byBnZW5lcmF0ZSBhIHJlcHIgZnJvbSBpdC4gIElmIHRoYXQgZmFpbHMgb3IgdGhlcmUgaXMgbm8gc3BlYywgdGhlIGltcG9ydAorc3lzdGVtIHdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCitvbiB0aGUgbW9kdWxlLiAgSXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBgYG1vZHVsZS5fX25hbWVfX2BgLAorYGBtb2R1bGUuX19maWxlX19gYCwgYW5kIGBgbW9kdWxlLl9fbG9hZGVyX19gYCBhcyBpbnB1dCBpbnRvIHRoZSByZXByLAord2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgbWlzc2luZy4KKworSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX3NwZWNfX2BgIGF0dHJpYnV0ZSwgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjCisgICBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXByLiAgVGhlICJuYW1lIiwgImxvYWRlciIsICJvcmlnaW4iLCBhbmQKKyAgICJoYXNfbG9jYXRpb24iIGF0dHJpYnV0ZXMgYXJlIGNvbnN1bHRlZC4KKworICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKKyAgIG1vZHVsZSdzIHJlcHIuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19maWxlX19gYCBidXQgZG9lcyBoYXZlIGEgYGBfX2xvYWRlcl9fYGAgdGhhdCBpcyBub3QKKyAgIGBgTm9uZWBgLCB0aGVuIHRoZSBsb2FkZXIncyByZXByIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcmVwci4KKworICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVXNlIG9mIGxvYWRlci5tb2R1bGVfcmVwcigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRoZSBtb2R1bGUgc3BlYworICAgaXMgbm93IHVzZWQgYnkgdGhlIGltcG9ydCBtYWNoaW5lcnkgdG8gZ2VuZXJhdGUgYSBtb2R1bGUgcmVwci4KKworICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4zLCB0aGUgbW9kdWxlIHJlcHIgd2lsbCBiZQorICAgZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgdGhlIGxvYWRlcidzIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIGlmCisgICBkZWZpbmVkLCBiZWZvcmUgdHJ5aW5nIGVpdGhlciBhcHByb2FjaCBkZXNjcmliZWQgYWJvdmUuICBIb3dldmVyLCB0aGUKKyAgIG1ldGhvZCBpcyBkZXByZWNhdGVkLgorCiAKIFRoZSBQYXRoIEJhc2VkIEZpbmRlcgogPT09PT09PT09PT09PT09PT09PT09CkBAIC01MjksNyArNjcyLDcgQEAKIG5vdCBiZSBsaW1pdGVkIHRvIHRoaXMuCiAKIEFzIGEgbWV0YSBwYXRoIGZpbmRlciwgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaW1wbGVtZW50cyB0aGUKLTptZXRoOmBmaW5kX21vZHVsZSgpYCBwcm90b2NvbCBwcmV2aW91c2x5IGRlc2NyaWJlZCwgaG93ZXZlciBpdCBleHBvc2VzCis6bWV0aDpgZmluZF9zcGVjKClgIHByb3RvY29sIHByZXZpb3VzbHkgZGVzY3JpYmVkLCBob3dldmVyIGl0IGV4cG9zZXMKIGFkZGl0aW9uYWwgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IG1vZHVsZXMgYXJlIGZvdW5kIGFuZAogbG9hZGVkIGZyb20gdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAuCiAKQEAgLTU1MSw4ICs2OTQsOCBAQAogCiBUaGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpcyBhIDp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCwgc28gdGhlIGltcG9ydAogbWFjaGluZXJ5IGJlZ2lucyB0aGUgOnRlcm06YGltcG9ydCBwYXRoYCBzZWFyY2ggYnkgY2FsbGluZyB0aGUgcGF0aAotYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgcHJldmlvdXNseS4gIFdoZW4KLXRoZSBgYHBhdGhgYCBhcmd1bWVudCB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgYQorYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfc3BlYygpYCBtZXRob2QgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuCit0aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8gOm1ldGg6YGZpbmRfc3BlYygpYCBpcyBnaXZlbiwgaXQgd2lsbCBiZSBhCiBsaXN0IG9mIHN0cmluZyBwYXRocyB0byB0cmF2ZXJzZSAtIHR5cGljYWxseSBhIHBhY2thZ2UncyBgYF9fcGF0aF9fYGAKIGF0dHJpYnV0ZSBmb3IgYW4gaW1wb3J0IHdpdGhpbiB0aGF0IHBhY2thZ2UuICBJZiB0aGUgYGBwYXRoYGAgYXJndW1lbnQKIGlzIGBgTm9uZWBgLCB0aGlzIGluZGljYXRlcyBhIHRvcCBsZXZlbCBpbXBvcnQgYW5kIDpkYXRhOmBzeXMucGF0aGAgaXMgdXNlZC4KQEAgLTU4Myw1MSArNzI2LDcwIEBACiBhcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYC4KIAogSWYgOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpdGVyYXRpb24gZW5kcyB3aXRoIG5vIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAKLWJlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QKK2JlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kCiB3aWxsIHN0b3JlIGBgTm9uZWBgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgKHRvIGluZGljYXRlIHRoYXQKIHRoZXJlIGlzIG5vIGZpbmRlciBmb3IgdGhpcyBwYXRoIGVudHJ5KSBhbmQgcmV0dXJuIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoYXQKIHRoaXMgOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgIGNvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKIElmIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCAqaXMqIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgOnRlcm06YHBhdGggZW50cnkKIGhvb2tgIGNhbGxhYmxlcyBvbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgLCB0aGVuIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgaXMgdXNlZAotdG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIGxvYWRlciwgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4KLQordG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIHNwZWMsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aGVuIGxvYWRpbmcgdGhlCittb2R1bGUuCiAKIFBhdGggZW50cnkgZmluZGVyIHByb3RvY29sCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiBvcmRlciB0byBzdXBwb3J0IGltcG9ydHMgb2YgbW9kdWxlcyBhbmQgaW5pdGlhbGl6ZWQgcGFja2FnZXMgYW5kIGFsc28gdG8KIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8gbmFtZXNwYWNlIHBhY2thZ2VzLCBwYXRoIGVudHJ5IGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQKLXRoZSA6bWV0aDpgZmluZF9sb2FkZXIoKWAgbWV0aG9kLgordGhlIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kLgogCi06bWV0aDpgZmluZF9sb2FkZXIoKWAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCi1tb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIDItdHVwbGUgd2hlcmUgdGhlCi1maXJzdCBpdGVtIGlzIHRoZSBsb2FkZXIgYW5kIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG5hbWVzcGFjZSA6dGVybTpgcG9ydGlvbmAuCi1XaGVuIHRoZSBmaXJzdCBpdGVtIChpLmUuIHRoZSBsb2FkZXIpIGlzIGBgTm9uZWBgLCB0aGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlCi1wYXRoIGVudHJ5IGZpbmRlciBkb2VzIG5vdCBoYXZlIGEgbG9hZGVyIGZvciB0aGUgbmFtZWQgbW9kdWxlLCBpdCBrbm93cyB0aGF0IHRoZQotcGF0aCBlbnRyeSBjb250cmlidXRlcyB0byBhIG5hbWVzcGFjZSBwb3J0aW9uIGZvciB0aGUgbmFtZWQgbW9kdWxlLiAgVGhpcyB3aWxsCi1hbG1vc3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYSBuYW1lc3BhY2UgcGFja2FnZQotdGhhdCBoYXMgbm8gcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLiAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyCi1yZXR1cm5zIGBgTm9uZWBgIGZvciB0aGUgbG9hZGVyLCB0aGUgc2Vjb25kIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlCi1tdXN0IGJlIGEgc2VxdWVuY2UsIGFsdGhvdWdoIGl0IGNhbiBiZSBlbXB0eS4KKzptZXRoOmBmaW5kX3NwZWMoKWAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCittb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICA6bWV0aDpgZmluZF9zcGVjKClgIHJldHVybnMgYSBmdWxseSBwb3B1bGF0ZWQKK3NwZWMgZm9yIHRoZSBtb2R1bGUuICBUaGlzIHNwZWMgd2lsbCBhbHdheXMgaGF2ZSAibG9hZGVyIiBzZXQgKHdpdGggb25lCitleGNlcHRpb24pLgogCi1JZiA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIG5vbi1gYE5vbmVgYCBsb2FkZXIgdmFsdWUsIHRoZSBwb3J0aW9uIGlzCi1pZ25vcmVkIGFuZCB0aGUgbG9hZGVyIGlzIHJldHVybmVkIGZyb20gdGhlIHBhdGggYmFzZWQgZmluZGVyLCB0ZXJtaW5hdGluZwotdGhlIHNlYXJjaCB0aHJvdWdoIHRoZSBwYXRoIGVudHJpZXMuCitUbyBpbmRpY2F0ZSB0byB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGF0IHRoZSBzcGVjIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UKKzp0ZXJtOmBwb3J0aW9uYC4gdGhlIHBhdGggZW50cnkgZmluZGVyIHNldHMgImxvYWRlciIgb24gdGhlIHNwZWMgdG8KK2BgTm9uZWBgIGFuZCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiIHRvIGEgbGlzdCBjb250YWluaW5nIHRoZQorcG9ydGlvbi4KIAotRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbXBvcnQKLXByb3RvY29sLCBtYW55IHBhdGggZW50cnkgZmluZGVycyBhbHNvIHN1cHBvcnQgdGhlIHNhbWUsCi10cmFkaXRpb25hbCA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIHRoYXQgbWV0YSBwYXRoIGZpbmRlcnMgc3VwcG9ydC4KLUhvd2V2ZXIgcGF0aCBlbnRyeSBmaW5kZXIgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAotd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCi1wYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBmaW5kX3NwZWMoKSByZXBsYWNlZCBmaW5kX2xvYWRlcigpIGFuZCBmaW5kX21vZHVsZSgpLCBidXQgb2Ygd2hpY2gKKyAgIGFyZSBub3cgZGVwcmVjYXRlZCwgYnV0IHdpbGwgYmUgdXNlZCBpZiBmaW5kX3NwZWMoKSBpcyBub3QgZGVmaW5lZC4KIAotVGhlIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCi1hcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bwotbmFtZXNwYWNlIHBhY2thZ2VzLiBJbnN0ZWFkIHBhdGggZW50cnkgZmluZGVycyBzaG91bGQgaW1wbGVtZW50IHRoZQotOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIGl0IGV4aXN0cyBvbiB0aGUgcGF0aAotZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsIDptZXRoOmBmaW5kX2xvYWRlcigpYAotaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCisgICBPbGRlciBwYXRoIGVudHJ5IGZpbmRlcnMgbWF5IGltcGxlbWVudCBvbmUgb2YgdGhlc2UgdHdvIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgaW5zdGVhZCBvZiA6bWV0aDpgZmluZF9zcGVjKClgLiAgVGhlIG1ldGhvZHMgYXJlIHN0aWxsIHJlc3BlY3RlZCBmb3IgdGhlCisgICBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBIb3dldmV2ZXIsIGlmIGZpbmRfc3BlYygpIGlzIGltcGxlbWVudGVkCisgICBvbiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIsIHRoZSBsZWdhY3kgbWV0aG9kcyBhcmUgaWdub3JlZC4KKworICAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQorICAgbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZQorICAgZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLgorICAgV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcyBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZQorICAgcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdAorICAgdGhlIHBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8gYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4KKyAgIFRoaXMgd2lsbCBhbG1vc3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYQorICAgbmFtZXNwYWNlIHBhY2thZ2UgdGhhdCBoYXMgbm8gcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLgorICAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyIHJldHVybnMgYGBOb25lYGAgZm9yIHRoZSBsb2FkZXIsIHRoZSBzZWNvbmQKKyAgIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzZXF1ZW5jZSwgYWx0aG91Z2ggaXQgY2FuIGJlCisgICBlbXB0eS4KKworICAgSWYgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcworICAgaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKKyAgIHRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorCisgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAorICAgcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKKyAgIHRyYWRpdGlvbmFsIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgdGhhdCBtZXRhIHBhdGggZmluZGVycyBzdXBwb3J0LgorICAgSG93ZXZlciBwYXRoIGVudHJ5IGZpbmRlciA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kcyBhcmUgbmV2ZXIgY2FsbGVkCisgICB3aXRoIGEgYGBwYXRoYGAgYXJndW1lbnQgKHRoZXkgYXJlIGV4cGVjdGVkIHRvIHJlY29yZCB0aGUgYXBwcm9wcmlhdGUKKyAgIHBhdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbCBjYWxsIHRvIHRoZSBwYXRoIGhvb2spLgorCisgICBUaGUgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBvbiBwYXRoIGVudHJ5IGZpbmRlcnMgaXMgZGVwcmVjYXRlZCwKKyAgIGFzIGl0IGRvZXMgbm90IGFsbG93IHRoZSBwYXRoIGVudHJ5IGZpbmRlciB0byBjb250cmlidXRlIHBvcnRpb25zIHRvCisgICBuYW1lc3BhY2UgcGFja2FnZXMuICBJZiBib3RoIDptZXRoOmBmaW5kX2xvYWRlcigpYCBhbmQgOm1ldGg6YGZpbmRfbW9kdWxlKClgCisgICBleGlzdCBvbiBhIHBhdGggZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsCisgICA6bWV0aDpgZmluZF9sb2FkZXIoKWAgaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCiAKIAogUmVwbGFjaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtCkBAIC02NDYsNyArODA4LDcgQEAKIFRvIHNlbGVjdGl2ZWx5IHByZXZlbnQgaW1wb3J0IG9mIHNvbWUgbW9kdWxlcyBmcm9tIGEgaG9vayBlYXJseSBvbiB0aGUKIG1ldGEgcGF0aCAocmF0aGVyIHRoYW4gZGlzYWJsaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtIGVudGlyZWx5KSwKIGl0IGlzIHN1ZmZpY2llbnQgdG8gcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGRpcmVjdGx5IGZyb20KLTptZXRoOmBmaW5kX21vZHVsZWAgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGBOb25lYGAuIFRoZSBsYXR0ZXIgaW5kaWNhdGVzCis6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkIG9mIHJldHVybmluZyBgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMKIHRoYXQgdGhlIG1ldGEgcGF0aCBzZWFyY2ggc2hvdWxkIGNvbnRpbnVlLiB3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbgogdGVybWluYXRlcyBpdCBpbW1lZGlhdGVseS4KIApAQCAtNjg4LDYgKzg1MCwxMSBAQAogCiA6cGVwOmAzMzhgIGRlZmluZXMgZXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cy4KIAorOnBlcDpgNDUxYCBhZGRzIHRoZSBlbmNhcHN1bGF0aW9uIG9mIHBlci1tb2R1bGUgaW1wb3J0IHN0YXRlIGluIHNwZWMKK29iamVjdHMuICBJdCBhbHNvIG9mZi1sb2FkcyBtb3N0IG9mIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCitsb2FkZXJzIGJhY2sgb250byB0aGUgaW1wb3J0IG1hY2hpbmVyeS4gIFRoZXNlIGNoYW5nZXMgYWxsb3cgdGhlCitkZXByZWNhdGlvbiBvZiBzZXZlcmFsIEFQSXMgaW4gdGhlIGltcG9ydCBzeXN0ZW0gYW5kIGFsc28gYWRkaXRpb24gb2YgbmV3CittZXRob2RzIHRvIGZpbmRlcnMgYW5kIGxvYWRlcnMuCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAppbmRleCBhMGVjMzJmLi5lZDVkYTBjIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKQEAgLTMsNyArMyw3IEBACiAJICAgIDxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+CiAJICAgIDx1bD4KIAkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LyI+UHl0aG9uIDMuNCAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLyI+UHl0aG9uIDMuMyAoc3RhYmxlKTwvYT48L2xpPgogICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgogICAgICAgICAgICAgPC91bD4KIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CmluZGV4IDM4OGZlM2EuLjJiNWRlMTQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKQEAgLTEwLDcgKzEwLDcgQEAKICIiIgogCiBJU1NVRV9VUkkgPSAnaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSVzJwotU09VUkNFX1VSSSA9ICdodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvMy4zLyVzJworU09VUkNFX1VSSSA9ICdodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvZGVmYXVsdC8lcycKIAogZnJvbSBkb2N1dGlscyBpbXBvcnQgbm9kZXMsIHV0aWxzCiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdiBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgppbmRleCBmMTI0ZmYyLi42N2FkMDFmIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CkBAIC0xNDEsMTUgKzE0MSw4IEBACiBsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMsLDpwb3J0LGhvc3Q6cG9ydAogbGlicmFyeS9tbWFwLCw6aTIsb2JqW2kxOmkyXQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBZGQgbW9yZSB0YXNrcyB1c2luZyBgcHV0KClgCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgQmFzZU1hbmFnZXJgLgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRzbGljZV9fJywgKDIsIDcpKSAgICMgZXF1aXYgdG8gYGxbMjo3XWAiCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCw6cXVldWUsIj4+PiBRdWV1ZU1hbmFnZXIucmVnaXN0ZXIoJ2dldF9xdWV1ZScsIGNhbGxhYmxlPWxhbWJkYTpxdWV1ZSkiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGYoKWAgYW5kIGBnKClgIGFjY2Vzc2libGUgdmlhIHByb3h5CiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGcoKWAgYW5kIGBfaCgpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQpAQCAtMTU4LDIwICsxNTEsMTYgQEAKIGxpYnJhcnkvbm50cGxpYiwsOmxpbmVzLDpsaW5lcwogbGlicmFyeS9vcHRwYXJzZSwsOmxlbiwiZGVsIHBhcnNlci5yYXJnc1s6bGVuKHZhbHVlKV0iCiBsaWJyYXJ5L29zLnBhdGgsLDpmb28sYzpmb28KK2xpYnJhcnkvcGF0aGxpYiwsOmJhciwiPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICdkOmJhcicpIgorbGlicmFyeS9wYXRobGliLCw6YmFyLFB1cmVXaW5kb3dzUGF0aCgnZDpiYXInKQorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykuYW5jaG9yCiBsaWJyYXJ5L3BkYiwsOmxpbmVubyxmaWxlbmFtZTpsaW5lbm8KIGxpYnJhcnkvcGlja2xlLCw6bWVtb3J5LCJjb25uID0gc3FsaXRlMy5jb25uZWN0KCIiOm1lbW9yeToiIikiCiBsaWJyYXJ5L3Bvc2l4LCxgLCJDRkxBR1M9IiJgZ2V0Y29uZiBMRlNfQ0ZMQUdTYCIiIE9QVD0iIi1nIC1PMiAkQ0ZMQUdTIiIiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLCIKK2xpYnJhcnkvcHByaW50LCw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCiBsaWJyYXJ5L3Byb2ZpbGUsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vKGZ1bmN0aW9uKQogbGlicmFyeS9weWV4cGF0LCw6ZWxlbTEsPHB5OmVsZW0xIC8+CiBsaWJyYXJ5L3B5ZXhwYXQsLDpweSwieG1sbnM6cHkgPSAiImh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8iIj4iCkBAIC0xODMsNiArMTcyLDcgQEAKIGxpYnJhcnkvc3FsaXRlMywsOmFnZSwiY3VyLmV4ZWN1dGUoIiJzZWxlY3QgKiBmcm9tIHBlb3BsZSB3aGVyZSBuYW1lX2xhc3Q9OndobyBhbmQgYWdlPTphZ2UiIiwgeyIid2hvIiI6IHdobywgIiJhZ2UiIjogYWdlfSkiCiBsaWJyYXJ5L3NxbGl0ZTMsLDptZW1vcnksCiBsaWJyYXJ5L3NxbGl0ZTMsLDp3aG8sImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgorbGlicmFyeS9zcWxpdGUzLCw6cGF0aCwiZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uYWwgVW5pdCBOYW1lIChlZywgc2VjdGlvbikgW106TXkgR3JvdXAiCiBsaWJyYXJ5L3NzbCwsOk15LCJPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkpIFtJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGRdOk15IE9yZ2FuaXphdGlvbiwgSW5jLiIKIGxpYnJhcnkvc3NsLCw6bXlzZXJ2ZXIsIkNvbW1vbiBOYW1lIChlZywgWU9VUiBuYW1lKSBbXTpteXNlcnZlci5teWdyb3VwLm15b3JnYW5pemF0aW9uLmNvbSIKQEAgLTIwNyw3ICsxOTcsMTIgQEAKIGxpYnJhcnkvdGFyZmlsZSwsOnh6LCd3Onh6JwogbGlicmFyeS90aW1lLCw6bW0sCiBsaWJyYXJ5L3RpbWUsLDpzcywKK2xpYnJhcnkvdHJhY2VtYWxsb2MsLDpsaW1pdCwiZm9yIGluZGV4LCBzdGF0IGluIGVudW1lcmF0ZSh0b3Bfc3RhdHNbOmxpbWl0XSwgMSk6IgogbGlicmFyeS90dXJ0bGUsLDo6LEV4YW1wbGU6OgorbGlicmFyeS91bml0dGVzdCwxNDEyLDpmb28sInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zmlyc3QsInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zm9vLCdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOnNlY29uZCwnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpsYW5nLCJ4bWxucz0iImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIiB4bWw6bGFuZz0iImVuIiIgbGFuZz0iImVuIiI+XG5cbjxoZWFkPlxuIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOnBhc3N3b3JkLCIiImpvZTpwYXNzd29yZEBweXRob24ub3JnIiIiCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAppbmRleCAzNmFjYjA2Li5hYmYzMGYwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKQEAgLTcsMTQwICs3LDI3IEBACiBTb21lIHZlcnNpb25zIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3VwcG9ydCBlZGl0aW5nIG9mIHRoZSBjdXJyZW50IGlucHV0CiBsaW5lIGFuZCBoaXN0b3J5IHN1YnN0aXR1dGlvbiwgc2ltaWxhciB0byBmYWNpbGl0aWVzIGZvdW5kIGluIHRoZSBLb3JuIHNoZWxsIGFuZAogdGhlIEdOVSBCYXNoIHNoZWxsLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYEdOVSBSZWFkbGluZWBfIGxpYnJhcnksCi13aGljaCBzdXBwb3J0cyBFbWFjcy1zdHlsZSBhbmQgdmktc3R5bGUgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgotZG9jdW1lbnRhdGlvbiB3aGljaCBJIHdvbid0IGR1cGxpY2F0ZSBoZXJlOyBob3dldmVyLCB0aGUgYmFzaWNzIGFyZSBlYXNpbHkKLWV4cGxhaW5lZC4gIFRoZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGRlc2NyaWJlZCBoZXJlIGFyZSBvcHRpb25hbGx5Ci1hdmFpbGFibGUgaW4gdGhlIFVuaXggYW5kIEN5Z3dpbiB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCi0KLVRoaXMgY2hhcHRlciBkb2VzICpub3QqIGRvY3VtZW50IHRoZSBlZGl0aW5nIGZhY2lsaXRpZXMgb2YgTWFyayBIYW1tb25kJ3MKLVB5dGhvbldpbiBwYWNrYWdlIG9yIHRoZSBUay1iYXNlZCBlbnZpcm9ubWVudCwgSURMRSwgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24uCi1UaGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgcmVjYWxsIHdoaWNoIG9wZXJhdGVzIHdpdGhpbiBET1MgYm94ZXMgb24gTlQgYW5kIHNvbWUKLW90aGVyIERPUyBhbmQgV2luZG93cyBmbGF2b3JzICBpcyB5ZXQgYW5vdGhlciBiZWFzdC4KLQotCi0uLiBfdHV0LWxpbmVlZGl0aW5nOgotCi1MaW5lIEVkaXRpbmcKLT09PT09PT09PT09PQotCi1JZiBzdXBwb3J0ZWQsIGlucHV0IGxpbmUgZWRpdGluZyBpcyBhY3RpdmUgd2hlbmV2ZXIgdGhlIGludGVycHJldGVyIHByaW50cyBhCi1wcmltYXJ5IG9yIHNlY29uZGFyeSBwcm9tcHQuICBUaGUgY3VycmVudCBsaW5lIGNhbiBiZSBlZGl0ZWQgdXNpbmcgdGhlCi1jb252ZW50aW9uYWwgRW1hY3MgY29udHJvbCBjaGFyYWN0ZXJzLiAgVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGFyZToKLTprYmQ6YEMtQWAgKENvbnRyb2wtQSkgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCA6a2JkOmBDLUVgCi10byB0aGUgZW5kLCA6a2JkOmBDLUJgIG1vdmVzIGl0IG9uZSBwb3NpdGlvbiB0byB0aGUgbGVmdCwgOmtiZDpgQy1GYCB0byB0aGUKLXJpZ2h0LiAgQmFja3NwYWNlIGVyYXNlcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtRGAgdGhlCi1jaGFyYWN0ZXIgdG8gaXRzIHJpZ2h0LiA6a2JkOmBDLUtgIGtpbGxzIChlcmFzZXMpIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIHRoZQotcmlnaHQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1ZYCB5YW5rcyBiYWNrIHRoZSBsYXN0IGtpbGxlZCBzdHJpbmcuCi06a2JkOmBDLXVuZGVyc2NvcmVgIHVuZG9lcyB0aGUgbGFzdCBjaGFuZ2UgeW91IG1hZGU7IGl0IGNhbiBiZSByZXBlYXRlZCBmb3IKLWN1bXVsYXRpdmUgZWZmZWN0LgotCi0KLS4uIF90dXQtaGlzdG9yeToKLQotSGlzdG9yeSBTdWJzdGl0dXRpb24KLT09PT09PT09PT09PT09PT09PT09Ci0KLUhpc3Rvcnkgc3Vic3RpdHV0aW9uIHdvcmtzIGFzIGZvbGxvd3MuICBBbGwgbm9uLWVtcHR5IGlucHV0IGxpbmVzIGlzc3VlZCBhcmUKLXNhdmVkIGluIGEgaGlzdG9yeSBidWZmZXIsIGFuZCB3aGVuIGEgbmV3IHByb21wdCBpcyBnaXZlbiB5b3UgYXJlIHBvc2l0aW9uZWQgb24KLWEgbmV3IGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGJ1ZmZlci4gOmtiZDpgQy1QYCBtb3ZlcyBvbmUgbGluZSB1cCAoYmFjaykgaW4KLXRoZSBoaXN0b3J5IGJ1ZmZlciwgOmtiZDpgQy1OYCBtb3ZlcyBvbmUgZG93bi4gIEFueSBsaW5lIGluIHRoZSBoaXN0b3J5IGJ1ZmZlcgotY2FuIGJlIGVkaXRlZDsgYW4gYXN0ZXJpc2sgYXBwZWFycyBpbiBmcm9udCBvZiB0aGUgcHJvbXB0IHRvIG1hcmsgYSBsaW5lIGFzCi1tb2RpZmllZC4gIFByZXNzaW5nIHRoZSA6a2JkOmBSZXR1cm5gIGtleSBwYXNzZXMgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUKLWludGVycHJldGVyLiAgOmtiZDpgQy1SYCBzdGFydHMgYW4gaW5jcmVtZW50YWwgcmV2ZXJzZSBzZWFyY2g7IDprYmQ6YEMtU2Agc3RhcnRzCi1hIGZvcndhcmQgc2VhcmNoLgord2hpY2ggc3VwcG9ydHMgdmFyaW91cyBzdHlsZXMgb2YgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgorZG9jdW1lbnRhdGlvbiB3aGljaCB3ZSB3b24ndCBkdXBsaWNhdGUgaGVyZS4KIAogCiAuLiBfdHV0LWtleWJpbmRpbmdzOgogCi1LZXkgQmluZGluZ3MKLT09PT09PT09PT09PQorVGFiIENvbXBsZXRpb24gYW5kIEhpc3RvcnkgRWRpdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUga2V5IGJpbmRpbmdzIGFuZCBzb21lIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIFJlYWRsaW5lIGxpYnJhcnkgY2FuIGJlCi1jdXN0b21pemVkIGJ5IHBsYWNpbmcgY29tbWFuZHMgaW4gYW4gaW5pdGlhbGl6YXRpb24gZmlsZSBjYWxsZWQKLTpmaWxlOmB+Ly5pbnB1dHJjYC4gIEtleSBiaW5kaW5ncyBoYXZlIHRoZSBmb3JtIDo6Ci0KLSAgIGtleS1uYW1lOiBmdW5jdGlvbi1uYW1lCi0KLW9yIDo6Ci0KLSAgICJzdHJpbmciOiBmdW5jdGlvbi1uYW1lCi0KLWFuZCBvcHRpb25zIGNhbiBiZSBzZXQgd2l0aCA6OgotCi0gICBzZXQgb3B0aW9uLW5hbWUgdmFsdWUKLQotRm9yIGV4YW1wbGU6OgotCi0gICAjIEkgcHJlZmVyIHZpLXN0eWxlIGVkaXRpbmc6Ci0gICBzZXQgZWRpdGluZy1tb2RlIHZpCi0KLSAgICMgRWRpdCB1c2luZyBhIHNpbmdsZSBsaW5lOgotICAgc2V0IGhvcml6b250YWwtc2Nyb2xsLW1vZGUgT24KLQotICAgIyBSZWJpbmQgc29tZSBrZXlzOgotICAgTWV0YS1oOiBiYWNrd2FyZC1raWxsLXdvcmQKLSAgICJcQy11IjogdW5pdmVyc2FsLWFyZ3VtZW50Ci0gICAiXEMteFxDLXIiOiByZS1yZWFkLWluaXQtZmlsZQotCi1Ob3RlIHRoYXQgdGhlIGRlZmF1bHQgYmluZGluZyBmb3IgOmtiZDpgVGFiYCBpbiBQeXRob24gaXMgdG8gaW5zZXJ0IGEgOmtiZDpgVGFiYAotY2hhcmFjdGVyIGluc3RlYWQgb2YgUmVhZGxpbmUncyBkZWZhdWx0IGZpbGVuYW1lIGNvbXBsZXRpb24gZnVuY3Rpb24uICBJZiB5b3UKLWluc2lzdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHB1dHRpbmcgOjoKLQotICAgVGFiOiBjb21wbGV0ZQotCi1pbiB5b3VyIDpmaWxlOmB+Ly5pbnB1dHJjYC4gIChPZiBjb3Vyc2UsIHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHR5cGUgaW5kZW50ZWQKLWNvbnRpbnVhdGlvbiBsaW5lcyBpZiB5b3UncmUgYWNjdXN0b21lZCB0byB1c2luZyA6a2JkOmBUYWJgIGZvciB0aGF0IHB1cnBvc2UuKQotCi0uLiBpbmRleDo6Ci0gICBtb2R1bGU6IHJsY29tcGxldGVyCi0gICBtb2R1bGU6IHJlYWRsaW5lCi0KLUF1dG9tYXRpYyBjb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMgb3B0aW9uYWxseSBhdmFpbGFibGUuICBUbwotZW5hYmxlIGl0IGluIHRoZSBpbnRlcnByZXRlcidzIGludGVyYWN0aXZlIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKLXN0YXJ0dXAgZmlsZTogWyNdXyAgOjoKLQotICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQotICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQotCi1UaGlzIGJpbmRzIHRoZSA6a2JkOmBUYWJgIGtleSB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgc28gaGl0dGluZyB0aGUKLTprYmQ6YFRhYmAga2V5IHR3aWNlIHN1Z2dlc3RzIGNvbXBsZXRpb25zOyBpdCBsb29rcyBhdCBQeXRob24gc3RhdGVtZW50IG5hbWVzLAotdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZSBtb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkCi1leHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUKLWZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcKLW9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhCi06bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLgotCi1BIG1vcmUgY2FwYWJsZSBzdGFydHVwIGZpbGUgbWlnaHQgbG9vayBsaWtlIHRoaXMgZXhhbXBsZS4gIE5vdGUgdGhhdCB0aGlzCi1kZWxldGVzIHRoZSBuYW1lcyBpdCBjcmVhdGVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZDsgdGhpcyBpcyBkb25lIHNpbmNlCi10aGUgc3RhcnR1cCBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMsCi1hbmQgcmVtb3ZpbmcgdGhlIG5hbWVzIGF2b2lkcyBjcmVhdGluZyBzaWRlIGVmZmVjdHMgaW4gdGhlIGludGVyYWN0aXZlCi1lbnZpcm9ubWVudC4gIFlvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGtlZXAgc29tZSBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlcywKLXN1Y2ggYXMgOm1vZDpgb3NgLCB3aGljaCB0dXJuIG91dCB0byBiZSBuZWVkZWQgaW4gbW9zdCBzZXNzaW9ucyB3aXRoIHRoZQotaW50ZXJwcmV0ZXIuIDo6Ci0KLSAgICMgQWRkIGF1dG8tY29tcGxldGlvbiBhbmQgYSBzdG9yZWQgaGlzdG9yeSBmaWxlIG9mIGNvbW1hbmRzIHRvIHlvdXIgUHl0aG9uCi0gICAjIGludGVyYWN0aXZlIGludGVycHJldGVyLiBSZXF1aXJlcyBQeXRob24gMi4wKywgcmVhZGxpbmUuIEF1dG9jb21wbGV0ZSBpcwotICAgIyBib3VuZCB0byB0aGUgRXNjIGtleSBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCAtIHNlZSByZWFkbGluZSBkb2NzKS4KLSAgICMKLSAgICMgU3RvcmUgdGhlIGZpbGUgaW4gfi8ucHlzdGFydHVwLCBhbmQgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50Ci0gICAjIHRvIGl0OiAgImV4cG9ydCBQWVRIT05TVEFSVFVQPX4vLnB5c3RhcnR1cCIgaW4gYmFzaC4KLQotICAgaW1wb3J0IGF0ZXhpdAotICAgaW1wb3J0IG9zCi0gICBpbXBvcnQgcmVhZGxpbmUKLSAgIGltcG9ydCBybGNvbXBsZXRlcgotCi0gICBoaXN0b3J5UGF0aCA9IG9zLnBhdGguZXhwYW5kdXNlcigifi8ucHloaXN0b3J5IikKLQotICAgZGVmIHNhdmVfaGlzdG9yeShoaXN0b3J5UGF0aD1oaXN0b3J5UGF0aCk6Ci0gICAgICAgaW1wb3J0IHJlYWRsaW5lCi0gICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBpZiBvcy5wYXRoLmV4aXN0cyhoaXN0b3J5UGF0aCk6Ci0gICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGF0ZXhpdC5yZWdpc3RlcihzYXZlX2hpc3RvcnkpCi0gICBkZWwgb3MsIGF0ZXhpdCwgcmVhZGxpbmUsIHJsY29tcGxldGVyLCBzYXZlX2hpc3RvcnksIGhpc3RvcnlQYXRoCitDb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMKKzpyZWY6YGF1dG9tYXRpY2FsbHkgZW5hYmxlZCA8cmxjb21wbGV0ZXItY29uZmlnPmAgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cCBzbwordGhhdCB0aGUgOmtiZDpgVGFiYCBrZXkgaW52b2tlcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbjsgaXQgbG9va3MgYXQKK1B5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsIHRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUKK21vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQgZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUKK3RoZSBleHByZXNzaW9uIHVwIHRvIHRoZSBmaW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbQordGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZQorYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QKK2lzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uICBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGFsc28gc2F2ZXMgeW91cgoraGlzdG9yeSBpbnRvIGEgZmlsZSBuYW1lZCA6ZmlsZTpgLnB5dGhvbl9oaXN0b3J5YCBpbiB5b3VyIHVzZXIgZGlyZWN0b3J5LgorVGhlIGhpc3Rvcnkgd2lsbCBiZSBhdmFpbGFibGUgYWdhaW4gZHVyaW5nIHRoZSBuZXh0IGludGVyYWN0aXZlIGludGVycHJldGVyCitzZXNzaW9uLgogCiAKIC4uIF90dXQtY29tbWVudGFyeToKQEAgLTE2MiwxNCArNDksNiBAQAogYnB5dGhvbl8uCiAKIAotLi4gcnVicmljOjogRm9vdG5vdGVzCi0KLS4uIFsjXSBQeXRob24gd2lsbCBleGVjdXRlIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgaWRlbnRpZmllZCBieSB0aGUKLSAgIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4geW91IHN0YXJ0IGFuIGludGVyYWN0aXZlCi0gICBpbnRlcnByZXRlci4gIFRvIGN1c3RvbWl6ZSBQeXRob24gZXZlbiBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUsIHNlZQotICAgOnJlZjpgdHV0LWN1c3RvbWl6ZWAuCi0KLQogLi4gX0dOVSBSZWFkbGluZTogaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9yZWFkbGluZS9ybHRvcC5odG1sCiAuLiBfSVB5dGhvbjogaHR0cDovL2lweXRob24uc2NpcHkub3JnLwogLi4gX2JweXRob246IGh0dHA6Ly93d3cuYnB5dGhvbi1pbnRlcnByZXRlci5vcmcvCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCBjZGMyYmYyLi5jMTgyNTExIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTEwLDEzICsxMCwxMyBAQAogSW52b2tpbmcgdGhlIEludGVycHJldGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4zYAorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy40YAogb24gdGhvc2UgbWFjaGluZXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlOyBwdXR0aW5nIDpmaWxlOmAvdXNyL2xvY2FsL2JpbmAgaW4geW91cgogVW5peCBzaGVsbCdzIHNlYXJjaCBwYXRoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IGl0IGJ5IHR5cGluZyB0aGUgY29tbWFuZDoKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgcHl0aG9uMy4zCisgICBweXRob24zLjQKIAogdG8gdGhlIHNoZWxsLiBbI11fIFNpbmNlIHRoZSBjaG9pY2Ugb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgbGl2ZXMKIGlzIGFuIGluc3RhbGxhdGlvbiBvcHRpb24sIG90aGVyIHBsYWNlcyBhcmUgcG9zc2libGU7IGNoZWNrIHdpdGggeW91ciBsb2NhbApAQCAtMjQsMTEgKzI0LDExIEBACiBwb3B1bGFyIGFsdGVybmF0aXZlIGxvY2F0aW9uLikKIAogT24gV2luZG93cyBtYWNoaW5lcywgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgdXN1YWxseSBwbGFjZWQgaW4KLTpmaWxlOmBDOlxcUHl0aG9uMzNgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQorOmZpbGU6YEM6XFxQeXRob24zNGAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCiBpbnN0YWxsZXIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCAgeW91IGNhbiB0eXBlIHRoZSBmb2xsb3dpbmcKIGNvbW1hbmQgaW50byB0aGUgY29tbWFuZCBwcm9tcHQgaW4gYSBET1MgYm94OjoKIAotICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjMzCisgICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzQKIAogVHlwaW5nIGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciAoOmtiZDpgQ29udHJvbC1EYCBvbiBVbml4LCA6a2JkOmBDb250cm9sLVpgIG9uCiBXaW5kb3dzKSBhdCB0aGUgcHJpbWFyeSBwcm9tcHQgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IHdpdGggYSB6ZXJvIGV4aXQKQEAgLTk1LDggKzk1LDggQEAKIHByaW50cyBhIHdlbGNvbWUgbWVzc2FnZSBzdGF0aW5nIGl0cyB2ZXJzaW9uIG51bWJlciBhbmQgYSBjb3B5cmlnaHQgbm90aWNlCiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKLSAgICQgcHl0aG9uMy4zCi0gICBQeXRob24gMy4zIChkZWZhdWx0LCBTZXAgMjQgMjAxMiwgMDk6MjU6MDQpCisgICAkIHB5dGhvbjMuNAorICAgUHl0aG9uIDMuNCAoZGVmYXVsdCwgU2VwIDI0IDIwMTIsIDA5OjI1OjA0KQogICAgW0dDQyA0LjYuM10gb24gbGludXgyCiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KQEAgLTE0OSw3ICsxNDksNyBAQAogT24gQlNEJ2lzaCBVbml4IHN5c3RlbXMsIFB5dGhvbiBzY3JpcHRzIGNhbiBiZSBtYWRlIGRpcmVjdGx5IGV4ZWN1dGFibGUsIGxpa2UKIHNoZWxsIHNjcmlwdHMsIGJ5IHB1dHRpbmcgdGhlIGxpbmUgOjoKIAotICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuMworICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuNAogCiAoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwogb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCAxOTAyOTY0Li45NGE2NmFjIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0yNzgsMjQgKzI3OCwyMyBAQAogICAgPj4+IGRpcihmaWJvKQogICAgWydfX25hbWVfXycsICdmaWInLCAnZmliMiddCiAgICA+Pj4gZGlyKHN5cykgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCi0gICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZWdnaW5zZXJ0JywgJ19fZXhjZXB0aG9va19fJywKLSAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BsZW4nLCAnX19zdGRlcnJfXycsCi0gICAgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsCi0gICAgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsCi0gICAgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLCAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsCi0gICAgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywKLSAgICAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLAotICAgICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywKLSAgICAnZmxvYXRfcmVwcl9zdHlsZScsICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsCi0gICAgJ2dldGRsb3BlbmZsYWdzJywgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLAotICAgICdnZXRyZWN1cnNpb25saW1pdCcsICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLAotICAgICdnZXR0b3RhbHJlZmNvdW50JywgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywKLSAgICAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLCAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsCi0gICAgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLCAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywKLSAgICAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywKLSAgICAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsCi0gICAgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLCAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLAotICAgICd3YXJub3B0aW9ucyddCisgICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZXhjZXB0aG9va19fJywgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAorICAgICdfX3BhY2thZ2VfXycsICdfX3N0ZGVycl9fJywgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywKKyAgICAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsCisgICAgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLAorICAgICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsCisgICAgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLCAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywKKyAgICAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywKKyAgICAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLCAnZmxvYXRfcmVwcl9zdHlsZScsCisgICAgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywgJ2dldGRsb3BlbmZsYWdzJywKKyAgICAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsICdnZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsICdnZXR0b3RhbHJlZmNvdW50JywKKyAgICAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLCAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLAorICAgICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLAorICAgICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLCAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsCisgICAgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLCAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLAorICAgICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsICd3YXJub3B0aW9ucyddCiAKIFdpdGhvdXQgYXJndW1lbnRzLCA6ZnVuYzpgZGlyYCBsaXN0cyB0aGUgbmFtZXMgeW91IGhhdmUgZGVmaW5lZCBjdXJyZW50bHk6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CmluZGV4IDdlN2ExNTQuLjJlM2VkMTggMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgID4+PiBpbXBvcnQgb3MKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAnQzpcXFB5dGhvbjMzJworICAgJ0M6XFxQeXRob24zNCcKICAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAogICAgMApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMxZGQ2OWEuLmMwMTk3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzMvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNC9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0IGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CmluZGV4IDRlNzE2OGYuLmQxODIyZmIgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9jbWRsaW5lLnJzdAorKysgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKQEAgLTI0LDcgKzI0LDcgQEAKIAogV2hlbiBpbnZva2luZyBQeXRob24sIHlvdSBtYXkgc3BlY2lmeSBhbnkgb2YgdGhlc2Ugb3B0aW9uczo6CiAKLSAgICBweXRob24gWy1iQmRFaGlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQorICAgIHB5dGhvbiBbLWJCZEVoaUlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQogCiBUaGUgbW9zdCBjb21tb24gdXNlIGNhc2UgaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgaW52b2NhdGlvbiBvZiBhIHNjcmlwdDo6CiAKQEAgLTE0Nyw3ICsxNDcsMTIgQEAKIAogSWYgbm8gaW50ZXJmYWNlIG9wdGlvbiBpcyBnaXZlbiwgOm9wdGlvbjpgLWlgIGlzIGltcGxpZWQsIGBgc3lzLmFyZ3ZbMF1gYCBpcwogYW4gZW1wdHkgc3RyaW5nIChgYCIiYGApIGFuZCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBhZGRlZCB0byB0aGUKLXN0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuCitzdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLiAgQWxzbywgdGFiLWNvbXBsZXRpb24gYW5kIGhpc3RvcnkgZWRpdGluZyBpcworYXV0b21hdGljYWxseSBlbmFibGVkLCBpZiBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSAoc2VlCis6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIApAQCAtMTcwLDYgKzE3NSw4IEBACiAgICAgICAgUHl0aG9uIDMuMAogCiAKKy4uIF91c2luZy1vbi1taXNjLW9wdGlvbnM6CisKIE1pc2NlbGxhbmVvdXMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTIwOCw2ICsyMTUsMTcgQEAKICAgIHJhaXNlcyBhbiBleGNlcHRpb24uICBTZWUgYWxzbyA6ZW52dmFyOmBQWVRIT05JTlNQRUNUYC4KIAogCisuLiBjbWRvcHRpb246OiAtSQorCisgICBSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIC1FIGFuZCAtcy4KKyAgIEluIGlzb2xhdGVkIG1vZGUgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgICB0aGUgdXNlcidzIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgOmVudnZhcjpgUFlUSE9OKmAgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLiBGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50CisgICB0aGUgdXNlciBmcm9tIGluamVjdGluZyBtYWxpY2lvdXMgY29kZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY21kb3B0aW9uOjogLU8KIAogICAgVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgVGhpcyBjaGFuZ2VzIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gZm9yCkBAIC0zNTgsOSArMzc2LDE5IEBACiAuLiBjbWRvcHRpb246OiAtWAogCiAgICBSZXNlcnZlZCBmb3IgdmFyaW91cyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25zLiAgQ1B5dGhvbiBjdXJyZW50bHkKLSAgIGRlZmluZXMganVzdCBvbmUsIHlvdSBjYW4gdXNlIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlCi0gICA6bW9kOmBmYXVsdGhhbmRsZXJgLiBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlCi0gICB0aGVtIHRocm91Z2ggdGhlIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgorICAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIHZhbHVlczoKKworICAgKiBgYC1YIGZhdWx0aGFuZGxlcmBgIHRvIGVuYWJsZSA6bW9kOmBmYXVsdGhhbmRsZXJgOworICAgKiBgYC1YIHNob3dyZWZjb3VudGBgIHRvIGVuYWJsZSB0aGUgb3V0cHV0IG9mIHRoZSB0b3RhbCByZWZlcmVuY2UgY291bnQKKyAgICAgYW5kIG1lbW9yeSBibG9ja3MgKG9ubHkgd29ya3Mgb24gZGVidWcgYnVpbGRzKTsKKyAgICogYGAtWCB0cmFjZW1hbGxvY2BgIHRvIHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyB1c2luZyB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gQnkgZGVmYXVsdCwgb25seSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgaXMKKyAgICAgc3RvcmVkIGluIGEgdHJhY2ViYWNrIG9mIGEgdHJhY2UuIFVzZSBgYC1YIHRyYWNlbWFsbG9jPU5GUkFNRWBgIHRvIHN0YXJ0CisgICAgIHRyYWNpbmcgd2l0aCBhIHRyYWNlYmFjayBsaW1pdCBvZiAqTkZSQU1FKiBmcmFtZXMuIFNlZSB0aGUKKyAgICAgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgSXQgYWxzbyBhbGxvd3MgdG8gcGFzcyBhcmJpdHJhcnkgdmFsdWVzIGFuZCByZXRyaWV2ZSB0aGVtIHRocm91Z2ggdGhlCisgICA6ZGF0YTpgc3lzLl94b3B0aW9uc2AgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEl0IGlzIG5vdyBhbGxvd2VkIHRvIHBhc3MgOm9wdGlvbjpgLVhgIHdpdGggQ1B5dGhvbi4KQEAgLTM2OCw2ICszOTYsOSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgYGAtWCBmYXVsdGhhbmRsZXJgYCBvcHRpb24uCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlIGBgLVggc2hvd3JlZmNvdW50YGAgYW5kIGBgLVggdHJhY2VtYWxsb2NgYCBvcHRpb25zLgorCiAKIE9wdGlvbnMgeW91IHNob3VsZG4ndCB1c2UKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM4NSw3ICs0MTYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmZsdWVuY2UgUHl0aG9uJ3MgYmVoYXZpb3IsIHRoZXkgYXJlIHByb2Nlc3NlZAotYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CitiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FIG9yIC1JLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdmVycmlkZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aGVyZSB0aGVyZSBpcyBhCiBjb25mbGljdC4KIApAQCAtNDMwLDcgKzQ2MSw3IEBACiAgICBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugd2hlcmUgaW50ZXJhY3RpdmUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHNvCiAgICB0aGF0IG9iamVjdHMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiBpdCBjYW4gYmUgdXNlZCB3aXRob3V0IHF1YWxpZmljYXRpb24gaW4KICAgIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uLiAgWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyA6ZGF0YTpgc3lzLnBzMWAgYW5kCi0gICA6ZGF0YTpgc3lzLnBzMmAgaW4gdGhpcyBmaWxlLgorICAgOmRhdGE6YHN5cy5wczJgIGFuZCB0aGUgaG9vayA6ZGF0YTpgc3lzLl9faW50ZXJhY3RpdmVob29rX19gIGluIHRoaXMgZmlsZS4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ZMksKQEAgLTQ4NSw5ICs1MTYsOSBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQogCi0gICBJZiB0aGlzIGlzIHNldCwgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyBvbiB0aGUKLSAgIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvcgorICAgYGAucHlvYGAgZmlsZXMgb24gdGhlIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgIG9wdGlvbi4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05IQVNIU0VFRApAQCAtNTEyLDEzICs1NDMsMTYgQEAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAogICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKLSAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKLSAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCi0gICA6ZnVuYzpgc3RyLmVuY29kZWAuCisgICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIEJvdGgKKyAgIHRoZSBgYGVuY29kaW5nbmFtZWBgIGFuZCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydHMgYXJlIG9wdGlvbmFsIGFuZCBoYXZlCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KIAogICAgRm9yIHN0ZGVyciwgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUKICAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBlbmNvZGluZ25hbWVgYCBwYXJ0IGlzIG5vdyBvcHRpb25hbC4KKwogCiAuLiBlbnZ2YXI6OiBQWVRIT05OT1VTRVJTSVRFCiAKQEAgLTU1NiwxNSArNTkwLDI2IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkZBVUxUSEFORExFUgogCi0gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZAotICAgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKLSAgIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUKLSAgIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywKKyAgIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yCisgICA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQKKyAgIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZW52dmFyOjogUFlUSE9OVFJBQ0VNQUxMT0MKKworICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBzdGFydCB0cmFjaW5nCisgICBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBUaGUgdmFsdWUgb2YKKyAgIHRoZSB2YXJpYWJsZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhCisgICB0cmFjZS4gRm9yIGV4YW1wbGUsIGBgUFlUSE9OVFJBQ0VNQUxMT0M9MWBgIHN0b3JlcyBvbmx5IHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWUuIFNlZSB0aGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggM2UxYjc0ZC4uNWJlNDM5ZiAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTI1LDcgKzI1LDcgQEAKIAogV2hhdCB5b3UgZ2V0IGFmdGVyIGluc3RhbGxpbmcgaXMgYSBudW1iZXIgb2YgdGhpbmdzOgogCi0qIEEgOmZpbGU6YE1hY1B5dGhvbiAzLjNgIGZvbGRlciBpbiB5b3VyIDpmaWxlOmBBcHBsaWNhdGlvbnNgIGZvbGRlci4gSW4gaGVyZQorKiBBIDpmaWxlOmBNYWNQeXRob24gMy40YCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKICAgeW91IGZpbmQgSURMRSwgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRoYXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mIG9mZmljaWFsCiAgIFB5dGhvbiBkaXN0cmlidXRpb25zOyBQeXRob25MYXVuY2hlciwgd2hpY2ggaGFuZGxlcyBkb3VibGUtY2xpY2tpbmcgUHl0aG9uCiAgIHNjcmlwdHMgZnJvbSB0aGUgRmluZGVyOyBhbmQgdGhlICJCdWlsZCBBcHBsZXQiIHRvb2wsIHdoaWNoIGFsbG93cyB5b3UgdG8KQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy4zLCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTE1OCw3ICsxNTgsNyBAQAogRGlzdHJpYnV0aW5nIFB5dGhvbiBBcHBsaWNhdGlvbnMgb24gdGhlIE1hYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgIkJ1aWxkIEFwcGxldCIgdG9vbCB0aGF0IGlzIHBsYWNlZCBpbiB0aGUgTWFjUHl0aG9uIDMuMyBmb2xkZXIgaXMgZmluZSBmb3IKK1RoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy40IGZvbGRlciBpcyBmaW5lIGZvcgogcGFja2FnaW5nIHNtYWxsIFB5dGhvbiBzY3JpcHRzIG9uIHlvdXIgb3duIG1hY2hpbmUgdG8gcnVuIGFzIGEgc3RhbmRhcmQgTWFjCiBhcHBsaWNhdGlvbi4gVGhpcyB0b29sLCBob3dldmVyLCBpcyBub3Qgcm9idXN0IGVub3VnaCB0byBkaXN0cmlidXRlIFB5dGhvbgogYXBwbGljYXRpb25zIHRvIG90aGVyIHVzZXJzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKaW5kZXggNWZkYmM5Yi4uODY4YmJjOCAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYworKysgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCkBAIC0yNSw3ICsyNSw3IEBACiBUaGUgY29tbWFuZCwgaWYgcnVuIHdpdGggYGAtaGBgLCB3aWxsIHNob3cgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjoKIAogICAgIHVzYWdlOiBweXZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQotICAgICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCisgICAgICAgICAgICAgICAgICBbLS11cGdyYWRlXSBbLS13aXRob3V0LXBpcF0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCiAKICAgICBDcmVhdGVzIHZpcnR1YWwgUHl0aG9uIGVudmlyb25tZW50cyBpbiBvbmUgb3IgbW9yZSB0YXJnZXQgZGlyZWN0b3JpZXMuCiAKQEAgLTQzLDYgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgICAgIC0tdXBncmFkZSAgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCisgICAgICAtLXdpdGhvdXQtcGlwICAgICAgICAgIFNraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KQorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgSW5zdGFsbHMgcGlwIGJ5IGRlZmF1bHQsIGFkZGVkIHRoZSBgYC0td2l0aG91dC1waXBgYCBvcHRpb24KIAogSWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQsIHVubGVzcwogdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4KQEAgLTUxLDI1ICs1NiwyOSBAQAogYGBpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAga2V5LCBzZXQgdG8gYGB0cnVlYGAgaWYgYGB2ZW52YGAgaXMKIHJ1biB3aXRoIHRoZSBgYC0tc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBvcHRpb24sIGBgZmFsc2VgYCBvdGhlcndpc2UuCiAKK1VubGVzcyB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uIGlzIGdpdmVuLCA6bW9kOmBlbnN1cmVwaXBgIHdpbGwgYmUKK2ludm9rZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKwogTXVsdGlwbGUgcGF0aHMgY2FuIGJlIGdpdmVuIHRvIGBgcHl2ZW52YGAsIGluIHdoaWNoIGNhc2UgYW4gaWRlbnRpY2FsCiB2aXJ0dWFsZW52IHdpbGwgYmUgY3JlYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zLCBhdCBlYWNoCiBwcm92aWRlZCBwYXRoLgogCiBPbmNlIGEgdmVudiBoYXMgYmVlbiBjcmVhdGVkLCBpdCBjYW4gYmUgImFjdGl2YXRlZCIgdXNpbmcgYSBzY3JpcHQgaW4gdGhlCi12ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzogb24KLWEgUG9zaXggcGxhdGZvcm0sIHlvdSB3b3VsZCB0eXBpY2FsbHkgZG86OgordmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6CiAKLSAgICAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlCi0KLXdoZXJlYXMgb24gV2luZG93cywgeW91IG1pZ2h0IGRvOjoKLQotICAgIEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUKLQotaWYgeW91IGFyZSB1c2luZyB0aGUgYGBjbWQuZXhlYGAgc2hlbGwsIG9yIHBlcmhhcHM6OgotCi0gICAgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEKLQotaWYgeW91IHVzZSBQb3dlclNoZWxsLgorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBsYXRmb3JtICAgIHwgU2hlbGwgICAgICAgICAgIHwgQ29tbWFuZCB0byBhY3RpdmF0ZSB2aXJ0dWFsIGVudmlyb25tZW50IHwKKys9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBQb3NpeCAgICAgICB8IGJhc2gvenNoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBmaXNoICAgICAgICAgICAgfCAkIC4gPHZlbnY+L2Jpbi9hY3RpdmF0ZS5maXNoICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBQb3dlclNoZWxsICAgICAgfCBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMSAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFlvdSBkb24ndCBzcGVjaWZpY2FsbHkgKm5lZWQqIHRvIGFjdGl2YXRlIGFuIGVudmlyb25tZW50OyBhY3RpdmF0aW9uIGp1c3QKIHByZXBlbmRzIHRoZSB2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsIHNvIHRoYXQgInB5dGhvbiIgaW52b2tlcyB0aGUKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjQucnN0IGIvRG9jL3doYXRzbmV3LzMuNC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxYWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy93aGF0c25ldy8zLjQucnN0CkBAIC0wLDAgKzEsMTA3MCBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBXaGF0J3MgTmV3IEluIFB5dGhvbiAzLjQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLi4gOkF1dGhvcjogU29tZW9uZSA8ZW1haWw+CisgICAodW5jb21tZW50IGlmIHRoZXJlIGlzIGEgcHJpbmNpcGFsIGF1dGhvcikKKworLi4gUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudCwgYnV0IHRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZQorICAgcmlnaHQgdG8gcmV3cml0ZSBhbnkgYWRkaXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBmb3Igb2JzY3VyZSBvciBlc290ZXJpYworICAgZmVhdHVyZXMsIHRoZSBtYWludGFpbmVyIG1heSByZWR1Y2UgYW55IGFkZGl0aW9uIHRvIGEgc2ltcGxlIHJlZmVyZW5jZSB0bworICAgdGhlIG5ldyBkb2N1bWVudGF0aW9uIHJhdGhlciB0aGFuIGV4cGxhaW5pbmcgdGhlIGZlYXR1cmUgaW5saW5lLgorCisgICAqIFdoaWxlIHRoZSBtYWludGFpbmVyIHdpbGwgcGVyaW9kaWNhbGx5IGdvIHRocm91Z2ggTWlzYy9ORVdTCisgICBhbmQgYWRkIGNoYW5nZXMsIGl0J3MgYmVzdCBub3QgdG8gcmVseSBvbiB0aGlzLiBXZSBrbm93IGZyb20gZXhwZXJpZW5jZQorICAgdGhhdCBhbnkgY2hhbmdlcyB0aGF0IGFyZW4ndCBpbiB0aGUgV2hhdCdzIE5ldyBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGUKKyAgIHRpbWUgb2YgdGhlIG9yaWdpbmFsIHJlbGVhc2Ugd2lsbCByZW1haW4gbGFyZ2VseSB1bmtub3duIHRvIHRoZSBjb21tdW5pdHkKKyAgIGZvciB5ZWFycywgZXZlbiBpZiB0aGV5J3JlIGFkZGVkIGxhdGVyLiBXZSBhbHNvIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQKKyAgIG90aGVyIHByaW9yaXRpZXMgY2FuIGFyaXNlLCBhbmQgdGhlIG1haW50YWluZXIgd2lsbCBydW4gb3V0IG9mIHRpbWUgdG8gZG8KKyAgIHVwZGF0ZXMgLSBpbiBzdWNoIGNhc2VzLCBlbmQgdXNlcnMgd2lsbCBiZSBtdWNoIGJldHRlciBzZXJ2ZWQgYnkgcGFydGlhbAorICAgbm90aWZpY2F0aW9ucyB0aGF0IGF0IGxlYXN0IGdpdmUgYSBoaW50IGFib3V0IG5ldyBmZWF0dXJlcyB0bworICAgaW52ZXN0aWdhdGUuCisKKyAgICogVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBsaXN0IG9mIGV2ZXJ5IHNpbmdsZSBjaGFuZ2U7IGNvbXBsZXRlbmVzcworICAgaXMgdGhlIHB1cnBvc2Ugb2YgTWlzYy9ORVdTLiBUaGUgV2hhdCdzIE5ldyBzaG91bGQgZm9jdXMgb24gY2hhbmdlcyB0aGF0CisgICBhcmUgdmlzaWJsZSB0byBQeXRob24gKnVzZXJzKiBhbmQgdGhhdCAqcmVxdWlyZSogYSBmZWF0dXJlIHJlbGVhc2UgKGkuZS4KKyAgIG1vc3QgYnVnIGZpeGVzIHNob3VsZCBvbmx5IGJlIHJlY29yZGVkIGluIE1pc2MvTkVXUykKKworICAgKiBQRVBzIHNob3VsZCBub3QgYmUgbWFya2VkIEZpbmFsIHVudGlsIHRoZXkgaGF2ZSBhbiBlbnRyeSBpbiBXaGF0J3MgTmV3LgorICAgQSBwbGFjZWhvbGRlciBlbnRyeSB0aGF0IGlzIGp1c3QgYSBzZWN0aW9uIGhlYWRlciBhbmQgYSBsaW5rIHRvIHRoZSBQRVAKKyAgIChlLmcgIjpwZXA6YDM5N2AgaGFzIGJlZW4gaW1wbGVtZW50ZWQiKSBpcyBhY2NlcHRhYmxlLiBJZiBhIFBFUCBoYXMgYmVlbgorICAgaW1wbGVtZW50ZWQgYW5kIG5vdGVkIGluIFdoYXQncyBOZXcsIGRvbid0IGZvcmdldCB0byBtYXJrIGl0IGFzIEZpbmFsIQorCisgICAqIElmIHlvdSB3YW50IHRvIGRyYXcgeW91ciBuZXcgdGV4dCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoZQorICAgbWFpbnRhaW5lciwgYWRkICdYWFgnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFncmFwaCBvcgorICAgc2VjdGlvbi4KKworICAgKiBJdCdzIE9LIHRvIGFkZCBqdXN0IGEgdmVyeSBicmllZiBub3RlIGFib3V0IGEgY2hhbmdlLiAgRm9yCisgICBleGFtcGxlOiAiVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiIgIFRoZSBtYWludGFpbmVyIHdpbGwgcmVzZWFyY2ggdGhlIGNoYW5nZSBhbmQKKyAgIHdyaXRlIHRoZSBuZWNlc3NhcnkgdGV4dCAoaWYgYXBwcm9wcmlhdGUpLiBUaGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMKKyAgIGlzIHRoYXQgZXZlbiBpZiBubyBtb3JlIGRlc2NyaXB0aXZlIHRleHQgaXMgZXZlciBhZGRlZCwgcmVhZGVycyB3aWxsIGF0CisgICBsZWFzdCBoYXZlIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhlIG5ldyBmZWF0dXJlIGV4aXN0cyBhbmQgYSBsaW5rIHRvIHRoZQorICAgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4KKworICAgKiBZb3UgY2FuIGNvbW1lbnQgb3V0IHlvdXIgYWRkaXRpb25zIGlmIHlvdSBsaWtlLCBidXQgaXQncyBub3QKKyAgIG5lY2Vzc2FyeSAoZXNwZWNpYWxseSB3aGVuIGEgZmluYWwgcmVsZWFzZSBpcyBzb21lIG1vbnRocyBhd2F5KS4KKworICAgKiBDcmVkaXQgdGhlIGF1dGhvciBvZiBhIHBhdGNoIG9yIGJ1Z2ZpeC4gICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgYXMgYSBjb21tZW50OgorCisgICBUaGUgOnJlZjpgfnNvY2tldC50cmFuc21vZ3JpZnkoKWAgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZQorICAgOm1vZDpgc29ja2V0YCBtb2R1bGUuIChDb250cmlidXRlZCBieSBQLlkuIERldmVsb3BlciBpbiA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgdGhlIGVmZm9ydCBvZiBnb2luZyB0aHJvdWdoIHRoZSBNZXJjdXJpYWwgbG9nCisgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgorCisgICAqIENyb3NzIHJlZmVyZW5jaW5nIHRpcDogOnJlZjpgbW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYG1vZC5hdHRyYGAsCisgICB3aGlsZSA6cmVmOmB+bW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYGF0dHJgYC4KKworVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDMuNCwgY29tcGFyZWQgdG8gMy4zLgorCisuLiBQeXRob24gMy40IHdhcyByZWxlYXNlZCBvbiBUQkQuCisKK0ZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKK2BjaGFuZ2Vsb2cgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3L2NoYW5nZWxvZy5odG1sPmBfLgorCisuLiBub3RlOjogUHJlcmVsZWFzZSB1c2VycyBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGlzIGRvY3VtZW50IGlzIGN1cnJlbnRseSBpbgorICAgZHJhZnQgZm9ybS4gSXQgd2lsbCBiZSB1cGRhdGVkIHN1YnN0YW50aWFsbHkgYXMgUHl0aG9uIDMuNCBtb3ZlcyB0b3dhcmRzCisgICByZWxlYXNlLCBzbyBpdCdzIHdvcnRoIGNoZWNraW5nIGJhY2sgZXZlbiBhZnRlciByZWFkaW5nIGVhcmxpZXIgdmVyc2lvbnMuCisKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQyOWAgLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCitTdW1tYXJ5IC0tIFJlbGVhc2UgaGlnaGxpZ2h0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gVGhpcyBzZWN0aW9uIHNpbmdsZXMgb3V0IHRoZSBtb3N0IGltcG9ydGFudCBjaGFuZ2VzIGluIFB5dGhvbiAzLjQuCisgICBCcmV2aXR5IGlzIGtleS4KKworTmV3IHN5bnRheCBmZWF0dXJlczoKKworKiBObyBuZXcgc3ludGF4IGZlYXR1cmVzIGFyZSBwbGFubmVkIGZvciBQeXRob24gMy40LgorCitOZXcgbGlicmFyeSBtb2R1bGVzOgorCisqIDptb2Q6YGFzeW5jaW9gOiBOZXcgcHJvdmlzb25hbCBBUEkgZm9yIGFzeW5jaHJvbm91cyBJTyAoOnBlcDpgMzE1NmApLgorKiA6bW9kOmBlbnVtYDogU3VwcG9ydCBmb3IgZW51bWVyYXRpb24gdHlwZXMgKDpwZXA6YDQzNWApLgorKiA6bW9kOmBlbnN1cmVwaXBgOiBCb290c3RyYXBwaW5nIHRoZSBwaXAgaW5zdGFsbGVyICg6cGVwOmA0NTNgKS4KKyogOm1vZDpgcGF0aGxpYmA6IE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzICg6cGVwOmA0MjhgKS4KKyogOm1vZDpgc2VsZWN0b3JzYDogSGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCisgIDptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisqIDptb2Q6YHN0YXRpc3RpY3NgOiBBIGJhc2ljIG51bWVyaWNhbGx5IHN0YWJsZSBzdGF0aXN0aWNzIGxpYnJhcnkgKDpwZXA6YDQ1MGApLgorKiA6bW9kOmB0cmFjZW1hbGxvY2A6IFRyYWNlIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKDpwZXA6YDQ1NGApLgorCitOZXcgZXhwZWN0ZWQgZmVhdHVyZXMgZm9yIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnM6CisKKyogOnJlZjpgUEVQIDQ0NjogTWFrZSBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgbm9uLWluaGVyaXRhYmxlIDxwZXAtNDQ2PmAuCisqIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIDpyZWY6YGlzb2xhdGVkIG1vZGUgPHVzaW5nLW9uLW1pc2Mtb3B0aW9ucz5gLAorICAoOmlzc3VlOmAxNjQ5OWApLgorKiA6cmVmOmBpbXByb3ZlbWVudHMgPGNvZGVjLWhhbmRsaW5nLWltcHJvdmVtZW50cz5gIGluIHRoZSBoYW5kbGluZyBvZgorICBjb2RlY3MgdGhhdCBhcmUgbm90IHRleHQgZW5jb2RpbmdzCisKK1NpZ25pZmljYW50bHkgSW1wcm92ZWQgTGlicmFyeSBNb2R1bGVzOgorCisqIFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyBpbiA6bW9kOmBmdW5jdG9vb2xzYCAoOnBlcDpgNDQzYCkKKyogTmV3IDptb2Q6YHBpY2tsZWAgcHJvdG9jb2wgNCAoOnBlcDpgMzE1NGApCisqIFNIQS0zIChLZWNjYWspIHN1cHBvcnQgZm9yIDptb2Q6YGhhc2hsaWJgLgorKiBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgZm9yIDptb2Q6YHNzbGAuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IGhhcyBvcHRpb24gdG8gYXZvaWQgdXNpbmcgOmZ1bmM6YG9zLmZvcmtgCisgIG9uIFVuaXggKDppc3N1ZTpgODcxM2ApLgorCitDUHl0aG9uIGltcGxlbWVudGF0aW9uIGltcHJvdmVtZW50czoKKworKiA6cmVmOmBQRVAgNDQyOiBTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24gPHBlcC00NDI+YAorKiA6cmVmOmBQRVAgNDQ1OiBDb25maWd1cmFibGUgbWVtb3J5IGFsbG9jYXRvcnMgPHBlcC00NDU+YAorKiA6cGVwOmA0NTZgIFNlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtCisqIEltcHJvdmUgZmluYWxpemF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHRvIGF2b2lkIHNldHRpbmcgdGhlaXIgZ2xvYmFscworICB0byBOb25lLCBpbiBtb3N0IGNhc2VzICg6aXNzdWU6YDE4MjE0YCkuCisqIEEgbW9yZSBlZmZpY2llbnQgOm1vZDpgbWFyc2hhbGAgZm9ybWF0ICg6aXNzdWU6YDE2NDc1YCkuCisqICJBcmd1bWVudCBDbGluaWMiLCBhbiBpbml0aWFsIHN0ZXAgdG93YXJkcyBwcm92aWRpbmcgaW1wcm92ZWQgaW50cm9zcGVjdGlvbgorICBzdXBwb3J0IGZvciBidWlsdGluIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IGV4dGVuc2lvbiB0eXBlcyBpbXBsZW1lbnRlZCBpbiBDCisgICg6cGVwOmA0MzZgKQorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcy4KKworCitQRVAgNDUzOiBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG5ldyA6bW9kOmBlbnN1cmVwaXBgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTNgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitjcm9zcy1wbGF0Zm9ybSBtZWNoYW5pc20gdG8gYm9vc3RyYXAgdGhlIHBpcCBpbnN0YWxsZXIgaW50byBQeXRob24KK2luc3RhbGxhdGlvbnMgYW5kIHZpcnR1YWwgZW52aXJvbm1lbnRzLgorCitUaGUgOm1vZDpgdmVudmAgbW9kdWxlIGFuZCB0aGUgOmNvbW1hbmQ6YHB5dmVudmAgdXRpbGl0eSBtYWtlIHVzZSBvZiB0aGlzCittb2R1bGUgdG8gbWFrZSBgYHBpcGBgIHJlYWRpbHkgYXZhaWxhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBXaGVuCit1c2luZyB0aGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSwgYGBwaXBgYCBpcyBpbnN0YWxsZWQgYnkgZGVmYXVsdCwgd2hpbGUKK2ZvciB0aGUgbW9kdWxlIEFQSSBpbnN0YWxsYXRpb24gb2YgYGBwaXBgYCBtdXN0IGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5LgorCitGb3IgQ1B5dGhvbiBzb3VyY2UgYnVpbGRzIG9uIFBPU0lYIHN5c3RlbXMsIHRoZSBgYG1ha2UgaW5zdGFsbGBgIGFuZAorYGBtYWtlIGFsdGluc3RhbGxgYCBjb21tYW5kcyBib290c3RyYXAgYGBwaXBgYCBieSBkZWZhdWx0LiBUaGlzIGJlaGF2aW91cgorY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBjb25maWd1cmUgb3B0aW9ucywgYW5kIG92ZXJyaWRkZW4gdGhyb3VnaAorTWFrZWZpbGUgb3B0aW9ucy4KKworT24gV2luZG93cyBhbmQgTWFjIE9TIFgsIHRoZSBDUHl0aG9uIGluc3RhbGxlcnMgbm93IG9mZmVyIHRoZSBvcHRpb24gdG8KK2luc3RhbGwgYGBwaXBgYCBhbG9uZyB3aXRoIENQeXRob24gaXRzZWxmLgorCisuLiBub3RlOjoKKworICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIFBFUCA0NTMgaXMgc3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLiBSZWZlciB0bworICAgOmlzc3VlOmAxOTM0N2AgZm9yIHRoZSBwcm9ncmVzcyBvbiBhZGRpdGlvbmFsIHN0ZXBzOgorCisgICAqIEhhdmluZyB0aGUgYmluYXJ5IGluc3RhbGxlcnMgaW5zdGFsbCBgYHBpcGBgIGJ5IGRlZmF1bHQKKyAgICogUmVjb21tZW5kaW5nIHRoZSB1c2Ugb2YgYGBwaXBgYCBpbiB0aGUgIkluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZSIKKyAgICAgZG9jdW1lbnRhdGlvbi4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1M2AgLSBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYnkgRG9uYWxkIFN0dWZmdCBhbmQgTmljayBDb2dobGFuLCBpbXBsZW1lbnRlZCBieQorICAgICAgRG9uYWxkIFN0dWZmdCwgTmljayBDb2dobGFuLCBNYXJ0aW4gdm9uIEzDtndpcyBhbmQgTmVkIERlaWx5LgorCisKKy4uIF9wZXAtNDQ2OgorCitQRVAgNDQ2OiBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis6cGVwOmA0NDZgIG1ha2VzIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyA6cmVmOmBub24taW5oZXJpdGFibGUKKzxmZF9pbmhlcml0YW5jZT5gLiAgTmV3IGZ1bmN0aW9ucyBhbmQgbWV0aG9kczoKKworKiA6ZnVuYzpgb3MuZ2V0X2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9pbmhlcml0YWJsZWAKKyogOmZ1bmM6YG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZWAKKyogOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCwgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2V0X2luaGVyaXRhYmxlYAorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ2YCAtIE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF9jb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM6CisKK0ltcHJvdmVtZW50cyB0byBjb2RlYyBoYW5kbGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmNlIGl0IHdhcyBmaXJzdCBpbnRyb2R1Y2VkLCB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgaGFzIGFsd2F5cyBiZWVuCitpbnRlbmRlZCB0byBvcGVyYXRlIGFzIGEgdHlwZS1uZXV0cmFsIGR5bmFtaWMgZW5jb2RpbmcgYW5kIGRlY29kaW5nCitzeXN0ZW0uIEhvd2V2ZXIsIGl0cyBjbG9zZSBjb3VwbGluZyB3aXRoIHRoZSBQeXRob24gdGV4dCBtb2RlbCwgZXNwZWNpYWxseQordGhlIHR5cGUgcmVzdHJpY3RlZCBjb252ZW5pZW5jZSBtZXRob2RzIG9uIHRoZSBidWlsdGluIDpjbGFzczpgc3RyYCwKKzpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgdHlwZXMsIGhhcyBoaXN0b3JpY2FsbHkgb2JzY3VyZWQgdGhhdAorZmFjdC4KKworQXMgYSBrZXkgc3RlcCBpbiBjbGFyaWZ5aW5nIHRoZSBzaXR1YXRpb24sIHRoZSA6bWV0aDpgY29kZWNzLmVuY29kZWAgYW5kCis6bWV0aDpgY29kZWNzLmRlY29kZWAgY29udmVuaWVuY2UgZnVuY3Rpb25zIGFyZSBub3cgcHJvcGVybHkgZG9jdW1lbnRlZCBpbgorUHl0aG9uIDIuNywgMy4zIGFuZCAzLjQuIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGV4aXN0ZWQgaW4gdGhlIDptb2Q6YGNvZGVjc2AKK21vZHVsZSAoYW5kIGhhdmUgYmVlbiBjb3ZlcmVkIGJ5IHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUpIHNpbmNlIFB5dGhvbiAyLjQsCitidXQgd2VyZSBwcmV2aW91c2x5IG9ubHkgZGlzY292ZXJhYmxlIHRocm91Z2ggcnVudGltZSBpbnRyb3NwZWN0aW9uLgorCitVbmxpa2UgdGhlIGNvbnZlbmllbmNlIG1ldGhvZHMgb24gOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBhbmQKKzpjbGFzczpgYnl0ZWFycmF5YCwgdGhlc2UgY29udmVuaWVuY2UgZnVuY3Rpb25zIHN1cHBvcnQgYXJiaXRyYXJ5IGNvZGVjcworaW4gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMsIHJhdGhlciB0aGFuIGJlaW5nIGxpbWl0ZWQgdG8gVW5pY29kZSB0ZXh0CitlbmNvZGluZ3MgKGluIFB5dGhvbiAzKSBvciBgYGJhc2VzdHJpbmdgYCA8LT4gYGBiYXNlc3RyaW5nYGAgY29udmVyc2lvbnMKKyhpbiBQeXRob24gMikuCisKK0luIFB5dGhvbiAzLjQsIHRoZSBpbnRlcnByZXRlciBpcyBhYmxlIHRvIGlkZW50aWZ5IHRoZSBrbm93biBub24tdGV4dAorZW5jb2RpbmdzIHByb3ZpZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBkaXJlY3QgdXNlcnMgdG93YXJkcyB0aGVzZQorZ2VuZXJhbCBwdXJwb3NlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aGVuIGFwcHJvcHJpYXRlOjoKKworICAgID4+PiBiImFiY2RlZiIuZGVjb2RlKCJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgTG9va3VwRXJyb3I6ICdoZXgnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworICAgID4+PiAiaGVsbG8iLmVuY29kZSgicm90MTMiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgTG9va3VwRXJyb3I6ICdyb3QxMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgdXNlIGNvZGVjcy5lbmNvZGUoKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcworCitJbiBhIHJlbGF0ZWQgY2hhbmdlLCB3aGVuZXZlciBpdCBpcyBmZWFzaWJsZSB3aXRob3V0IGJyZWFraW5nIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eSwgZXhjZXB0aW9ucyByYWlzZWQgZHVyaW5nIGVuY29kaW5nIGFuZCBkZWNvZGluZyBvcGVyYXRpb25zCit3aWxsIGJlIHdyYXBwZWQgaW4gYSBjaGFpbmVkIGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgbWVudGlvbnMgdGhlCituYW1lIG9mIHRoZSBjb2RlYyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSBlcnJvcjo6CisKKyAgICA+Pj4gaW1wb3J0IGNvZGVjcworCisgICAgPj4+IGNvZGVjcy5kZWNvZGUoYiJhYmNkZWZnaCIsICJoZXgiKQorICAgIGJpbmFzY2lpLkVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIGJpbmFzY2lpLkVycm9yOiBkZWNvZGluZyB3aXRoICdoZXgnIGNvZGVjIGZhaWxlZCAoRXJyb3I6IE5vbi1oZXhhZGVjaW1hbCBkaWdpdCBmb3VuZCkKKworICAgID4+PiBjb2RlY3MuZW5jb2RlKCJoZWxsbyIsICJiejIiKQorICAgIFR5cGVFcnJvcjogJ3N0cicgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZQorCisgICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjoKKworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiBlbmNvZGluZyB3aXRoICdiejInIGNvZGVjIGZhaWxlZCAoVHlwZUVycm9yOiAnc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlKQorCitGaW5hbGx5LCBhcyB0aGUgZXhhbXBsZXMgYWJvdmUgc2hvdywgdGhlc2UgaW1wcm92ZW1lbnRzIGhhdmUgcGVybWl0dGVkCit0aGUgcmVzdG9yYXRpb24gb2YgdGhlIGNvbnZlbmllbmNlIGFsaWFzZXMgZm9yIHRoZSBub24tVW5pY29kZSBjb2RlY3MgdGhhdAord2VyZSB0aGVtc2VsdmVzIHJlc3RvcmVkIGluIFB5dGhvbiAzLjIuIFRoaXMgbWVhbnMgdGhhdCBlbmNvZGluZyBiaW5hcnkgZGF0YQordG8gYW5kIGZyb20gaXRzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChmb3IgZXhhbXBsZSkgY2FuIG5vdyBiZSB3cml0dGVuCithczo6CisKKyAgICA+Pj4gZnJvbSBjb2RlY3MgaW1wb3J0IGVuY29kZSwgZGVjb2RlCisgICAgPj4+IGVuY29kZShiImhlbGxvIiwgImhleCIpCisgICAgYic2ODY1NmM2YzZmJworICAgID4+PiBkZWNvZGUoYiI2ODY1NmM2YzZmIiwgImhleCIpCisgICAgYidoZWxsbycKKworVGhlIGJpbmFyeSBhbmQgdGV4dCB0cmFuc2Zvcm1zIHByb3ZpZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBkZXRhaWxlZAoraW4gOnJlZjpgYmluYXJ5LXRyYW5zZm9ybXNgIGFuZCA6cmVmOmB0ZXh0LXRyYW5zZm9ybXNgLgorCisoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluIDppc3N1ZTpgNzQ3NWAsICwgOmlzc3VlOmAxNzgyN2AsCis6aXNzdWU6YDE3ODI4YCBhbmQgOmlzc3VlOmAxOTYxOWApCisKKy4uIF9wZXAtNDUxOgorCitQRVAgNDUxOiBBIE1vZHVsZVNwZWMgVHlwZSBmb3IgdGhlIEltcG9ydCBTeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis6cGVwOmA0NTFgIHByb3ZpZGVzIGFuIGVuY2Fwc3VsYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kdWxlCit0aGF0IHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlIHRvIGxvYWQgaXQsIChpLmUuIGEgbW9kdWxlIHNwZWMpLgorVGhpcyBoZWxwcyBzaW1wbGlmeSBib3RoIHRoZSBpbXBvcnQgaW1wbGVtZW50YXRpb24gYW5kIHNldmVyYWwKK2ltcG9ydC1yZWxhdGVkIEFQSXMuICBUaGUgY2hhbmdlIGlzIGFsc28gYSBzdGVwcGluZyBzdG9uZSBmb3Igc2V2ZXJhbAorZnV0dXJlIGltcG9ydC1yZWxhdGVkIGltcHJvdmVtZW50cy4KKworaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1Ob3ZlbWJlci8xMzAxMTEuaHRtbAorCitUaGUgcHVibGljLWZhY2luZyBjaGFuZ2VzIGZyb20gdGhlIFBFUCBhcmUgZW50aXJlbHkgYmFja3dhcmQtY29tcGF0aWJsZS4KK0Z1cnRoZXJtb3JlLCB0aGV5IHNob3VsZCBiZSB0cmFuc3BhcmVudCB0byBldmVyeW9uZSBidXQgaW1wb3J0ZXIKK2F1dGhvcnMuICBLZXkgZmluZGVyIGFuZCBsb2FkZXIgbWV0aG9kcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgYnV0IHRoZXkKK3dpbGwgY29udGludWUgd29ya2luZy4gIE5ldyBpbXBvcnRlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IG1ldGhvZHMKK2Rlc2NyaWJlZCBpbiB0aGUgUEVQLiAgRXhpc3RpbmcgaW1wb3J0ZXJzIHNob3VsZCBiZSB1cGRhdGVkIHRvIGltcGxlbWVudAordGhlIG5ldyBtZXRob2RzLgorCisKK1BpY2tsZSBwcm90b2NvbCA0Cis9PT09PT09PT09PT09PT09PQorCitUaGUgbmV3IDptb2Q6YHBpY2tsZWAgcHJvdG9jb2wgYWRkcmVzc2VzIGEgbnVtYmVyIG9mIGlzc3VlcyB0aGF0IHdlcmUgcHJlc2VudAoraW4gcHJldmlvdXMgcHJvdG9jb2xzLCBzdWNoIGFzIHRoZSBzZXJpYWxpemF0aW9uIG9mIG5lc3RlZCBjbGFzc2VzLCB2ZXJ5CitsYXJnZSBzdHJpbmdzIGFuZCBjb250YWluZXJzLCBvciBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdGFrZXMKK2tleXdvcmQtb25seSBhcmd1bWVudHMuICBJdCBhbHNvIGJyaW5ncyBhIGNvdXBsZSBlZmZpY2llbmN5IGltcHJvdmVtZW50cy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNTRgIC0gUGlja2xlIHByb3RvY29sIDQKKyAgICAgIFBFUCB3cml0dGVuIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBpbXBsZW1lbnRlZCBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aS4KKworCitPdGhlciBMYW5ndWFnZSBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgc21hbGxlciBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvcmUgUHl0aG9uIGxhbmd1YWdlIGFyZToKKworKiBVbmljb2RlIGRhdGFiYXNlIHVwZGF0ZWQgdG8gVUNEIHZlcnNpb24gNi4zLgorCisqIDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCBub3cgYWNjZXB0IGEgKmRlZmF1bHQqIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHVzZWQKKyAgdG8gc3BlY2lmeSB0aGUgdmFsdWUgdGhleSByZXR1cm4gaWYgdGhlIGl0ZXJhYmxlIHRoZXkgYXJlIGV2YWx1YXRpbmcgaGFzIG5vCisgIGVsZW1lbnRzLiAgQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbiBpbiA6aXNzdWU6YDE4MTExYC4KKworKiBNb2R1bGUgb2JqZWN0cyBhcmUgbm93IDptb2Q6YHdlYWtyZWZgJ2FibGUuCisKKyogTW9kdWxlIGBgX19maWxlX19gYCBhdHRyaWJ1dGVzIChhbmQgcmVsYXRlZCB2YWx1ZXMpIHNob3VsZCBub3cgYWx3YXlzCisgIGNvbnRhaW4gYWJzb2x1dGUgcGF0aHMgYnkgZGVmYXVsdCwgd2l0aCB0aGUgc29sZSBleGNlcHRpb24gb2YKKyAgYGBfX21haW5fXy5fX2ZpbGVfX2BgIHdoZW4gYSBzY3JpcHQgaGFzIGJlZW4gZXhlY3V0ZWQgZGlyZWN0bHkgdXNpbmcKKyAgYSByZWxhdGl2ZSBwYXRoIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODQxNmApLgorCisqIE5vdyBhbGwgdGhlIFVURi1cKiBjb2RlY3MgKGV4Y2VwdCBVVEYtNykgcmVqZWN0IHN1cnJvZ2F0ZXMgZHVyaW5nIGJvdGgKKyAgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHVubGVzcyB0aGUgYGBzdXJyb2dhdGVwYXNzYGAgZXJyb3IgaGFuZGxlciBpcyB1c2VkLAorICB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIFVURi0xNiBkZWNvZGVyIHRoYXQgYWNjZXB0cyB2YWxpZCBzdXJyb2dhdGUgcGFpcnMsCisgIGFuZCB0aGUgVVRGLTE2IGVuY29kZXIgdGhhdCBwcm9kdWNlcyB0aGVtIHdoaWxlIGVuY29kaW5nIG5vbi1CTVAgY2hhcmFjdGVycy4KKyAgQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIsIEthbmctSGFvIChLZW5ueSkgTHUgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4KKyAgOmlzc3VlOmAxMjg5MmAuCisKKworTmV3IE1vZHVsZXMKKz09PT09PT09PT09CisKKworYXN5bmNpbworLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YGFzeW5jaW9gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmAzMTU2YCkgcHJvdmlkZXMgYSBzdGFuZGFyZAorcGx1Z2dhYmxlIGV2ZW50IGxvb3AgbW9kZWwgZm9yIFB5dGhvbiwgcHJvdmlkaW5nIHNvbGlkIGFzeW5jaHJvbm91cyBJTworc3VwcG9ydCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgYW5kIG1ha2luZyBpdCBlYXNpZXIgZm9yIG90aGVyIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9ucyB0byBpbnRlcm9wZXJhdGUgd2l0aCB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZWFjaCBvdGhlci4KKworRm9yIFB5dGhvbiAzLjQsIHRoaXMgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNTZgIC0gQXN5bmNocm9ub3VzIElPIFN1cHBvcnQgUmVib290ZWQ6IHRoZSAiYXN5bmNpbyIgTW9kdWxlCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50YXRpb24gbGVkIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCisKK2VudW0KKy0tLS0KKworVGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDM1YCkgcHJvdmlkZXMgYSBzdGFuZGFyZAoraW1wbGVtZW50YXRpb24gb2YgZW51bWVyYXRpb24gdHlwZXMsIGFsbG93aW5nIG90aGVyIG1vZHVsZXMgKHN1Y2ggYXMKKzptb2Q6YHNvY2tldGApIHRvIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcyBhbmQgYmV0dGVyCitkZWJ1Z2dpbmcgc3VwcG9ydCBieSByZXBsYWNpbmcgb3BhcXVlIGludGVnZXIgY29uc3RhbnRzIHdpdGggYmFja3dhcmRzCitjb21wYXRpYmxlIGVudW1lcmF0aW9uIHZhbHVlcy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQzNWAgLSBBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeQorICAgICAgUEVQIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LCBFbGkgQmVuZGVyc2t5IGFuZCBFdGhhbiBGdXJtYW4sCisgICAgICBpbXBsZW1lbnRlZCBieSBFdGhhbiBGdXJtYW4uCisKKworcGF0aGxpYgorLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgY2xhc3NlcyByZXByZXNlbnRpbmcgZmlsZXN5c3RlbSBwYXRocword2l0aCBzZW1hbnRpY3MgYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gIFBhdGggY2xhc3NlcyBhcmUKK2RpdmlkZWQgYmV0d2VlbiAqcHVyZSBwYXRocyosIHdoaWNoIHByb3ZpZGUgcHVyZWx5IGNvbXB1dGF0aW9uYWwgb3BlcmF0aW9ucword2l0aG91dCBJL08sIGFuZCAqY29uY3JldGUgcGF0aHMqLCB3aGljaCBpbmhlcml0IGZyb20gcHVyZSBwYXRocyBidXQgYWxzbworcHJvdmlkZSBJL08gb3BlcmF0aW9ucy4KKworRm9yIFB5dGhvbiAzLjQsIHRoaXMgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQyOGAgLSBUaGUgcGF0aGxpYiBtb2R1bGUgLS0gb2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBBbnRvaW5lIFBpdHJvdS4KKworCitzZWxlY3RvcnMKKy0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHNlbGVjdG9yc2AgbW9kdWxlIChjcmVhdGVkIGFzIHBhcnQgb2YgaW1wbGVtZW50aW5nIDpwZXA6YDMxNTZgKQorYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKworCitzdGF0aXN0aWNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1MGApIG9mZmVycyBzb21lIGNvcmUKK3N0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBtb2R1bGUKK3N1cHBvcnRzIGNhbGN1bGF0aW9uIG9mIHRoZSBtZWFuLCBtZWRpYW4sIG1vZGUsIHZhcmlhbmNlIGFuZCBzdGFuZGFyZAorZGV2aWF0aW9uIG9mIGEgZGF0YSBzZXJpZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTBgIC0gQWRkaW5nIEEgU3RhdGlzdGljcyBNb2R1bGUgVG8gVGhlIFN0YW5kYXJkIExpYnJhcnkKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBTdGV2ZW4gRCdBcHJhbm8KKworCit0cmFjZW1hbGxvYworLS0tLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1NGApIGlzIGEgZGVidWcgdG9vbCB0bwordHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDU0YCAtIEFkZCBhIG5ldyB0cmFjZW1hbGxvYyBtb2R1bGUgdG8gdHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyCisKKworSW1wcm92ZWQgTW9kdWxlcworPT09PT09PT09PT09PT09PQorCithaWZjCistLS0tCisKK1RoZSA6bWV0aDpgfmFpZmMuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3ODE4YC4pCisKKworYXVkaW9vcAorLS0tLS0tLQorCitBZGRlZCBzdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyAoOmlzc3VlOmAxMjg2NmApLgorCitBZGRlZCB0aGUgOmZ1bmM6YH5hdWRpb29wLmJ5dGVzd2FwYCBmdW5jdGlvbiB0byBjb252ZXJ0IGJpZy1lbmRpYW4gc2FtcGxlcwordG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYSAoOmlzc3VlOmAxOTY0MWApLgorCisKK2Jhc2U2NAorLS0tLS0tCisKK1RoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIDptb2Q6YGJhc2U2NGAgbm93IGFjY2VwdCBhbnkKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaW4gY2FzZXMgd2hlcmUgaXQgcHJldmlvdXNseSByZXF1aXJlZCBhCis6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UgKDppc3N1ZTpgMTc4MzlgKS4KKworCitjb2xvcnN5cworLS0tLS0tLS0KKworVGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIFJHQiAtLS0gWUlRIGNvbnZlcnNpb25zIGhhdmUKK2JlZW4gZXhwYW5kZWQgc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBGQ0MgTlRTQyB2ZXJzaW9ucy4gIFRoZSBjaGFuZ2UgaW4KK3Jlc3VsdHMgc2hvdWxkIGJlIGxlc3MgdGhhbiAxJSBhbmQgbWF5IGJldHRlciBtYXRjaCByZXN1bHRzIGZvdW5kIGVsc2V3aGVyZS4KKworCitjb250ZXh0bGliCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOmNsYXNzOmBjb250ZXh0bGliLnN1cHByZXNzYCBjb250ZXh0IG1hbmFnZXIgaGVscHMgdG8gY2xhcmlmeSB0aGUKK2ludGVudCBvZiBjb2RlIHRoYXQgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucyBmcm9tIGEgc2luZ2xlCitzdGF0ZW1lbnQuIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE1ODA2YCBhbmQKK1plcm8gUGlyYWV1cyBpbiA6aXNzdWU6YDE5MjY2YCkKKworVGhlIG5ldyA6ZnVuYzpgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXRgIGNvbnRleHQgbWFuYWdlciBtYWtlcyBpdCBlYXNpZXIKK2ZvciB1dGlsaXR5IHNjcmlwdHMgdG8gaGFuZGxlIGluZmxleGlibGUgQVBJcyB0aGF0IGRvbid0IHByb3ZpZGUgYW55CitvcHRpb25zIHRvIHJldHJpZXZlIHRoZWlyIG91dHB1dCBhcyBhIHN0cmluZyBvciBkaXJlY3QgaXQgdG8gc29tZXdoZXJlCitvdGhlciB0aGFuIDpkYXRhOmBzeXMuc3Rkb3V0YC4gSW4gY29uanVuY3Rpb24gd2l0aCA6Y2xhc3M6YGlvLlN0cmluZ0lPYCwKK3RoaXMgY29udGV4dCBtYW5hZ2VyIGlzIGFsc28gdXNlZnVsIGZvciBjaGVja2luZyBleHBlY3RlZCBvdXRwdXQgZnJvbQorY29tbWFuZCBsaW5lIHV0aWxpdGllcy4gKENvbnRyaWJ1dGUgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxNTgwNWApCisKK1RoZSA6bW9kOmBjb250ZXh0bGliYCBkb2N1bWVudGF0aW9uIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBpbmNsdWRlIGEKKzpyZWY6YGRpc2N1c3Npb24gPHNpbmdsZS11c2UtcmV1c2FibGUtYW5kLXJlZW50cmFudC1jbXM+YCBvZiB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gc2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzLgorCisKK2RpcworLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBpcyBub3cgYnVpbHQgYXJvdW5kIGFuIDpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgY2xhc3MKK3RoYXQgcHJvdmlkZXMgZGV0YWlscyBvZiBpbmRpdmlkdWFsIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYW5kIGEKKzpmdW5jOmB+ZGlzLmdldF9pbnN0cnVjdGlvbnNgIGl0ZXJhdG9yIHRoYXQgZW1pdHMgdGhlIEluc3RydWN0aW9uIHN0cmVhbSBmb3IgYQorZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuIFRoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AKK21vZHVsZSBoYXZlIGJlZW4gdXBkYXRlZCB0byBiZSBiYXNlZCBvbiB0aGVzZSBuZXcgY29tcG9uZW50cy4KKworVGhlIG5ldyA6Y2xhc3M6YGRpcy5CeXRlY29kZWAgY2xhc3MgcHJvdmlkZXMgYW4gb2JqZWN0LW9yaWVudGVkIEFQSSBmb3IKK2luc3BlY3RpbmcgYnl0ZWNvZGUsIGJvdGggaW4gaHVtYW4tcmVhZGFibGUgZm9ybSBhbmQgZm9yIGl0ZXJhdGluZyBvdmVyCitpbnN0cnVjdGlvbnMuCisKKyhDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4sIFJ5YW4gS2VsbHkgYW5kIFRob21hcyBLbHV5dmVyIGluIDppc3N1ZTpgMTE4MTZgCithbmQgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc5MTZgKQorCisKK2RvY3Rlc3QKKy0tLS0tLS0KKworQWRkZWQgOmRhdGE6YH5kb2N0ZXN0LkZBSUxfRkFTVGAgZmxhZyB0byBoYWx0IHRlc3QgcnVubmluZyBhcyBzb29uIGFzIHRoZSBmaXJzdAorZmFpbHVyZSBpcyBkZXRlY3RlZC4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgYW5kIERhbmllbCBVcmJhbiBpbgorOmlzc3VlOmAxNjUyMmAuKQorCitVcGRhdGVkIHRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gdXNlIDptb2Q6YGFyZ3BhcnNlYCwgYW5kIGFkZGVkCitgYC1vYGAgYW5kIGBgLWZgYCBvcHRpb25zIHRvIHRoZSBpbnRlcmZhY2UuICBgYC1vYGAgYWxsb3dzIGRvY3Rlc3Qgb3B0aW9ucyB0bworYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBgYC1mYGAgaXMgYSBzaG9ydGhhbmQgZm9yIGBgLW8KK0ZBSUxfRkFTVGBgICh0byBwYXJhbGxlbCB0aGUgc2ltaWxhciBvcHRpb24gc3VwcG9ydGVkIGJ5IHRoZSA6bW9kOmB1bml0dGVzdGAKK0NMSSkuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTEzOTBgLikKKworCitlbWFpbAorLS0tLS0KKworOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBub3cgYWNjZXB0cyBhICpwb2xpY3kqIGFyZ3VtZW50IHRvCitvdmVycmlkZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2YgdGhlIG1lc3NhZ2Ugd2hlbiBnZW5lcmF0aW5nIGEgc3RyaW5nCityZXByZXNlbnRhdGlvbiBvZiBpdC4gIFRoaXMgbWVhbnMgdGhhdCBgYGFzX3N0cmluZ2BgIGNhbiBub3cgYmUgdXNlZCBpbiBtb3JlCitjaXJjdW1zdGFuY2VzLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBjcmVhdGUgYW5kIHVzZSBhIDptb2Q6YH5lbWFpbC5nZW5lcmF0b3JgIGluCitvcmRlciB0byBwYXNzIGZvcm1hdHRpbmcgcGFyYW1ldGVycyB0byBpdHMgYGBmbGF0dGVuYGAgbWV0aG9kLgorCitOZXcgbWV0aG9kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX2J5dGVzYCBhZGRlZCB0byBwcm9kdWNlIGEgYnl0ZXMKK3JlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGluIGEgZmFzaGlvbiBzaW1pbGFyIHRvIGhvdyBgYGFzX3N0cmluZ2BgCitwcm9kdWNlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gIEl0IGRvZXMgbm90IGFjY2VwdCB0aGUgKm1heGhlYWRlcmxlbioKK2FyZ3VtZW50LCBidXQgZG9lcyBhY2NlcHQgdGhlICp1bml4ZnJvbSogYW5kICpwb2xpY3kqIGFyZ3VtZW50cy4gVGhlCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fYnl0ZXNfX2AgbWV0aG9kCitjYWxscyBpdCwgbWVhbmluZyB0aGF0IGBgYnl0ZXMobXltc2cpYGAgd2lsbCBub3cgcHJvZHVjZSB0aGUgaW50dWl0aXZlCityZXN1bHQ6ICBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmdWxseSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4NjAwYC4pCisKK0EgcGFpciBvZiBuZXcgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGhhdmUgYmVlbiBhZGRlZCwKK2Fsb25nIHdpdGggYSBuZXcgc3ViLW1vZHVsZSwgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYC4gIEFsbCBkb2N1bWVudGF0aW9uCitpcyBjdXJyZW50bHkgaW4gdGhlIG5ldyBtb2R1bGUsIHdoaWNoIGlzIGJlaW5nIGFkZGVkIGFzIHBhcnQgb2YgdGhlIG5ldworOnRlcm06YHByb3Zpc2lvbmFsIDxwcm92aXNpb25hbCBwYWNrYWdlPmAgZW1haWwgQVBJLiAgVGhlc2UgY2xhc3NlcyBwcm92aWRlIGEKK251bWJlciBvZiBuZXcgbWV0aG9kcyB0aGF0IG1ha2UgZXh0cmFjdGluZyBjb250ZW50IGZyb20gYW5kIGluc2VydGluZyBjb250ZW50CitpbnRvIGVtYWlsIG1lc3NhZ2VzIG11Y2ggZWFzaWVyLiAgU2VlIHRoZSA6bW9kOmB+ZW1haWwuY29udGVudG1hbmFnZXJgCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitUaGVzZSBBUEkgYWRkaXRpb25zIGNvbXBsZXRlIHRoZSBidWxrIG9mIHRoZSB3b3JrIHRoYXQgd2FzIHBsYW5uZWQgYXMgcGFydCBvZgordGhlIGVtYWlsNiBwcm9qZWN0LiAgVGhlIGN1cnJlbnRseSBwcm92aXNpb25hbCBBUEkgaXMgc2NoZWR1bGVkIHRvIGJlY29tZSBmaW5hbAoraW4gUHl0aG9uIDMuNSAocG9zc2libHkgd2l0aCBhIGZldyBtaW5vciBhZGRpdGlvbnMgaW4gdGhlIGFyZWEgb2YgZXJyb3IKK2hhbmRsaW5nKS4KKworKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kYCBkZXNjcmlwdG9yIGJyaW5nIHBhcnRpYWwgYXJndW1lbnQKK2FwcGxpY2F0aW9uIHRvIGRlc2NyaXB0b3JzLCBqdXN0IGFzIDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxgIHByb3ZpZGVzCitmb3Igbm9ybWFsIGNhbGxhYmxlcy4gVGhlIG5ldyBkZXNjcmlwdG9yIGFsc28gbWFrZXMgaXQgZWFzaWVyIHRvIGdldAorYXJiaXRyYXJ5IGNhbGxhYmxlcyAoaW5jbHVkaW5nIDpmdW5jOmB+ZnVuY3Rvb2xzLnBhcnRpYWxgIGluc3RhbmNlcykKK3RvIGJlaGF2ZSBsaWtlIG5vcm1hbCBpbnN0YW5jZSBtZXRob2RzIHdoZW4gaW5jbHVkZWQgaW4gYSBjbGFzcyBkZWZpbml0aW9uLgorCisoQ29udHJpYnV0ZWQgYnkgQWxvbiBIb3JldiBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgNDMzMWApCisKK1RoZSBuZXcgOmZ1bmM6YH5mdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2hgIGRlY29yYXRvciBicmluZ3Mgc3VwcG9ydCBmb3IKK3NpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkuIFdoZXJlCitvYmplY3Qgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgZm9jdXNlcyBvbiBncm91cGluZyBtdWx0aXBsZSBvcGVyYXRpb25zIG9uIGEKK2NvbW1vbiBzZXQgb2YgZGF0YSBpbnRvIGEgY2xhc3MsIGEgZ2VuZXJpYyBmdW5jdGlvbiBmb2N1c2VzIG9uIGdyb3VwaW5nCittdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgb2YgYW4gb3BlcmF0aW9uIHRoYXQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aAorKmRpZmZlcmVudCoga2luZHMgb2YgZGF0YS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0M2AgLSBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSDFgXVrYXN6IExhbmdhLgorCisKK2hhc2hsaWIKKy0tLS0tLS0KKworTmV3IDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCBmdW5jdGlvbi4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODU4MmApCisKKworaHRtbAorLS0tLQorCitBZGRlZCBhIG5ldyA6ZnVuYzpgaHRtbC51bmVzY2FwZWAgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBIVE1MNSBjaGFyYWN0ZXIKK3JlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgorCisoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMjkyN2ApCisKK0FkZGVkIGEgbmV3ICpjb252ZXJ0X2NoYXJyZWZzKiBrZXl3b3JkIGFyZ3VtZW50IHRvCis6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCB0aGF0LCB3aGVuIGBgVHJ1ZWBgLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzCithbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuICBGb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSwgaXRzIHZhbHVlIGRlZmF1bHRzCit0byBgYEZhbHNlYGAsIGJ1dCBpdCB3aWxsIGNoYW5nZSB0byBgYFRydWVgYCBpbiBmdXR1cmUgdmVyc2lvbnMsIHNvIHlvdQorYXJlIGludml0ZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgYW5kIHVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlIHRoaXMgbmV3IGZlYXR1cmUuCisKKyhDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxMzYzM2ApCisKK1RoZSAqc3RyaWN0KiBhcmd1bWVudCBvZiA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBpcyBub3cgZGVwcmVjYXRlZC4KKworKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE1MTE0YCkKKworCitpbnNwZWN0CistLS0tLS0tCisKKworVGhlIGluc3BlY3QgbW9kdWxlIG5vdyBvZmZlcnMgYSBiYXNpYyA6cmVmOmBjb21tYW5kIGxpbmUgaW50ZXJmYWNlCis8aW5zcGVjdC1tb2R1bGUtY2xpPmAgdG8gcXVpY2tseSBkaXNwbGF5IHNvdXJjZSBjb2RlIGFuZCBvdGhlcgoraW5mb3JtYXRpb24gZm9yIG1vZHVsZXMsIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYQorYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE4NjI2YCkKKworOmZ1bmM6YH5pbnNwZWN0LnVud3JhcGAgbWFrZXMgaXQgZWFzeSB0byB1bnJhdmVsIHdyYXBwZXIgZnVuY3Rpb24gY2hhaW5zCitjcmVhdGVkIGJ5IDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIChhbmQgYW55IG90aGVyIEFQSSB0aGF0IHNldHMgdGhlCitgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG9uIGEgd3JhcHBlciBmdW5jdGlvbikuIChDb250cmlidXRlZCBieQorRGFuaWVsIFVyYmFuLCBBYXJvbiBJbGVzIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxMzI2NmApCisKK0FzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlLCB0aGUKKzptb2Q6YGluc3BlY3RgIG1vZHVsZSBub3cgaGFzIHN1YnN0YW50aWFsbHkgYmV0dGVyIHN1cHBvcnQgZm9yIGN1c3RvbQorYGBfX2Rpcl9fYGAgbWV0aG9kcyBhbmQgZHluYW1pYyBjbGFzcyBhdHRyaWJ1dGVzIHByb3ZpZGVkIHRocm91Z2gKK21ldGFjbGFzc2VzIChDb250cmlidXRlZCBieSBFdGhhbiBGdXJtYW4gaW4gOmlzc3VlOmAxODkyOWAgYW5kCis6aXNzdWU6YDE5MDMwYCkKKworCittbWFwCistLS0tCisKK21tYXAgb2JqZWN0cyBjYW4gbm93IGJlIHdlYWtyZWYnZWQuCisKKyhDb250cmlidXRlZCBieSBWYWxlcmllIExhbWJlcnQgaW4gOmlzc3VlOmA0ODg1YC4pCisKKworbXVsdGlwcm9jZXNzaW5nCistLS0tLS0tLS0tLS0tLS0KKworT24gVW5peCB0d28gbmV3ICpzdGFydCBtZXRob2RzKiBoYXZlIGJlZW4gYWRkZWQgZm9yIHN0YXJ0aW5nIHByb2Nlc3NlcwordXNpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gIFRoZXNlIG1ha2UgdGhlIG1peGluZyBvZiBwcm9jZXNzZXMgd2l0aAordGhyZWFkcyBtb3JlIHJvYnVzdC4gIFNlZSA6aXNzdWU6YDg3MTNgLgorCitBbHNvLCBleGNlcHQgd2hlbiB1c2luZyB0aGUgb2xkICpmb3JrKiBzdGFydCBtZXRob2QsIGNoaWxkIHByb2Nlc3Nlcword2lsbCBubyBsb25nZXIgaW5oZXJpdCB1bm5lZWRlZCBoYW5kbGVzL2ZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGVpciBwYXJlbnRzLgorCisKK29zCistLQorCitOZXcgZnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIGEgZmlsZQorZGVzY3JpcHRvcnMgb3IgYSBXaW5kb3dzIGhhbmRsZToKKworKiA6ZnVuYzpgb3MuZ2V0X2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9pbmhlcml0YWJsZWAKKyogOmZ1bmM6YG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZWAKKworCitwZGIKKy0tLQorCitUaGUgYGBwcmludGBgIGNvbW1hbmQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIDptb2Q6YHBkYmAsIHJlc3RvcmluZyBhY2Nlc3MgdG8gdGhlCitgYHByaW50YGAgZnVuY3Rpb24uCisKK1JhdGlvbmFsZTogUHl0aG9uMidzIGBgcGRiYGAgZGlkIG5vdCBoYXZlIGEgYGBwcmludGBgIGNvbW1hbmQ7IGluc3RlYWQsCitlbnRlcmluZyBgYHByaW50YGAgZXhlY3V0ZWQgdGhlIGBgcHJpbnRgYCBzdGF0ZW1lbnQuICBJbiBQeXRob24zIGBgcHJpbnRgYCB3YXMKK21pc3Rha2VubHkgbWFkZSBhbiBhbGlhcyBmb3IgdGhlIHBkYiA6cGRiY21kOmBwYCBjb21tYW5kLiAgYGBwYGAsIGhvd2V2ZXIsCitwcmludHMgdGhlIGBgcmVwcmBgIG9mIGl0cyBhcmd1bWVudCwgbm90IHRoZSBgYHN0cmBgIGxpa2UgdGhlIFB5dGhvbjIgYGBwcmludGBgCitjb21tYW5kIGRpZC4gIFdvcnNlLCB0aGUgUHl0aG9uMyBgYHBkYiBwcmludGBgIGNvbW1hbmQgc2hhZG93ZWQgdGhlIFB5dGhvbjMKK2BgcHJpbnRgYCBmdW5jdGlvbiwgbWFraW5nIGl0IGluYWNjZXNzaWJsZSBhdCB0aGUgYGBwZGJgYCBwcm9tcHQuCisKKyhDb250cmlidXRlZCBieSBDb25ub3IgT3Nib3JuIGluIDppc3N1ZTpgMTg3NjRgLikKKworCitwb3BsaWIKKy0tLS0tLQorCitOZXcgOm1ldGg6YH5wb3BsaWIuUE9QMy5zdGxzYCBtZXRob2QgdG8gc3dpdGNoIGEgY2xlYXItdGV4dCBQT1AzIHNlc3Npb24gaW50bworYW4gZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbi4KKworTmV3IDptZXRoOmB+cG9wbGliLlBPUDMuY2FwYWAgbWV0aG9kIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZCBieSB0aGUKK1BPUDMgc2VydmVyLgorCisoQ29udHJpYnV0ZWQgYnkgTG9yZW56byBDYXR1Y2NpIGluIDppc3N1ZTpgNDQ3M2AuKQorCisKK3BwcmludAorLS0tLS0tCisKK1RoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZSBub3cgc3VwcG9ydHMgKmNvbXBhY3QqIG1vZGUgZm9yIGZvcm1hdHRpbmcgbG9uZworc2VxdWVuY2VzICg6aXNzdWU6YDE5MTMyYCkuCisKKworcHlkb2MKKy0tLS0tCisKK1doaWxlIHNpZ25pZmljYW50IGNoYW5nZXMgaGF2ZSBub3QgYmVlbiBtYWRlIHRvIDptb2Q6YHB5ZG9jYCBkaXJlY3RseSwKK2l0cyBoYW5kbGluZyBvZiBjdXN0b20gYGBfX2Rpcl9fYGAgbWV0aG9kcyBhbmQgdmFyaW91cyBkZXNjcmlwdG9yCitiZWhhdmlvdXJzIGhhcyBiZWVuIGltcHJvdmVkIHN1YnN0YW50aWFsbHkgYnkgdGhlIHVuZGVybHlpbmcgY2hhbmdlcyBpbgordGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZS4KKworCityZQorLS0KKworQWRkZWQgOmZ1bmM6YHJlLmZ1bGxtYXRjaGAgZnVuY3Rpb24gYW5kIDptZXRoOmByZWdleC5mdWxsbWF0Y2hgIG1ldGhvZCwKK3doaWNoIGFuY2hvciB0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4KKyhDb250cmlidXRlZCBieSBNYXR0aGV3IEJhcm5ldHQgaW4gOmlzc3VlOmAxNjIwM2AuKQorCitUaGUgcmVwciBvZiA6cmVmOmByZWdleCBvYmplY3RzIDxyZS1vYmplY3RzPmAgbm93IGluY2x1ZGVzIHRoZSBwYXR0ZXJuCithbmQgdGhlIGZsYWdzOyB0aGUgcmVwciBvZiA6cmVmOmBtYXRjaCBvYmplY3RzIDxtYXRjaC1vYmplY3RzPmAgbm93CitpbmNsdWRlcyB0aGUgc3RhcnQsIGVuZCwgYW5kIHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkLgorCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEzNTkyYCBhbmQgOmlzc3VlOmAxNzA4N2AuKQorCisKK3Jlc291cmNlCistLS0tLS0tLQorCitOZXcgOmZ1bmM6YHJlc291cmNlLnBybGltaXRgIGZ1bmN0aW9uIGFuZCBMaW51eCBzcGVjaWZpYyBjb25zdGFudHMuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE2NTk1YCBhbmQgOmlzc3VlOmAxOTMyNGAuKQorCitzbXRwbGliCistLS0tLS0tCisKKzpleGM6YH5zbXRwbGliLlNNVFBFeGNlcHRpb25gIGlzIG5vdyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCB3aGljaCBhbGxvd3MKK2JvdGggc29ja2V0IGxldmVsIGVycm9ycyBhbmQgU01UUCBwcm90b2NvbCBsZXZlbCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGluIG9uZQordHJ5L2V4Y2VwdCBzdGF0ZW1lbnQgYnkgY29kZSB0aGF0IG9ubHkgY2FyZXMgd2hldGhlciBvciBub3QgYW4gZXJyb3Igb2NjdXJyZWQuCisoOmlzc3VlOmAyMTE4YCkuCisKKworc29ja2V0CistLS0tLS0KKworU29ja2V0IG9iamVjdHMgaGF2ZSBuZXcgbWV0aG9kcyB0byBnZXQgb3Igc2V0IHRoZWlyIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcKKzxmZF9pbmhlcml0YW5jZT5gOgorCisqIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldF9pbmhlcml0YWJsZWAsIDptZXRoOmBzb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZWAKKworVGhlIGBgc29ja2V0LkFGXypgYCBhbmQgYGBzb2NrZXQuU09DS18qYGAgY29uc3RhbnRzIGFyZSBlbnVtZXJhdGlvbiB2YWx1ZXMsCit1c2luZyB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZS4gVGhpcyBhbGxvd3MgZGVzY3JpcHRpdmUgcmVwb3J0aW5nIGR1cmluZworZGVidWdnaW5nLCBpbnN0ZWFkIG9mIHNlZWluZyBpbnRlZ2VyICJtYWdpYyBudW1iZXJzIi4KKworc3NsCistLS0KKworVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0LgorCisoQ29udHJpYnV0ZWQgYnkgTWljaGVsZSBPcnLDuSBhbmQgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjY5MmApCisKKyogTmV3IGRpYWdub3N0aWMgZnVuY3Rpb25zIDpmdW5jOmB+c3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc2AsCisgIDptZXRoOmB+c3NsLlNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0c2AgYW5kCisgIDptZXRoOmB+c3NsLlNTTENvbnRleHQuZ2V0X2NhX2NlcnRzYAorCisqIEFkZCA6ZnVuYzpgc3NsLmVudW1fY2VydF9zdG9yZWAgdG8gcmV0cmlldmUgY2VydGlmaWNhdGVzIGFuZCBDUkwgZnJvbSBXaW5kb3dzJworICBjZXJ0IHN0b3JlLgorCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE4MTQzYCwgOmlzc3VlOmAxODE0N2AgYW5kCisgOmlzc3VlOmAxNzEzNGAuKQorCitTdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkkgdXNpbmcgdGhlIG5ldworOm1ldGg6YHNzbC5TU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuCisKKyhDb250cmlidXRlZCBieSBEYW5pZWwgQmxhY2sgaW4gOmlzc3VlOmA4MTA5YC4pCisKKworc3RhdAorLS0tLQorCitUaGUgOm1vZDpgc3RhdGAgbW9kdWxlIGlzIG5vdyBiYWNrZWQgYnkgYSBDIGltcGxlbWVudGF0aW9uIGluIDptb2Q6YF9zdGF0YC4gQSBDCitpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZCBhcyBtb3N0IG9mIHRoZSB2YWx1ZXMgYXJlbid0IHN0YW5kYXJkaXplZCBhbmQKK3BsYXRmb3JtLWRlcGVuZGVudC4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTEwMTZgLikKKworVGhlIG1vZHVsZSBzdXBwb3J0cyBuZXcgZmlsZSB0eXBlczogZG9vciwgZXZlbnQgcG9ydCBhbmQgd2hpdGVvdXQuCisKKworc3RydWN0CistLS0tLS0KKworU3RyZWFtaW5nIHN0cnVjdCB1bnBhY2tpbmcgdXNpbmcgOmZ1bmM6YHN0cnVjdC5pdGVyX3VucGFja2AuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3ODA0YC4pCisKKworc3VuYXUKKy0tLS0tCisKK1RoZSA6bWV0aDpgfnN1bmF1LmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxODkwMWAuKQorCis6bWV0aDpgc3VuYXUub3BlbmAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgKDppc3N1ZTpgMTg4NzhgKS4KKworCit0cmFjZWJhY2sKKy0tLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2AgZnVuY3Rpb24gdGFrZXMgYSB0cmFjZWJhY2sgb2JqZWN0CithbmQgY2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgaW4gYWxsIG9mIHRoZSBmcmFtZXMgaXQgcmVmZXJlbmNlcywKK3JlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbnN1bWVkICg6aXNzdWU6YDE1NjU1MjVgKS4KKworCit1cmxsaWIKKy0tLS0tLQorCitBZGQgc3VwcG9ydC5mb3IgYGBkYXRhOmBgIFVSTHMgaW4gOm1vZDpgdXJsbGliLnJlcXVlc3RgLgorCisoQ29udHJpYnV0ZWQgYnkgTWF0aGlhcyBQYW56ZW5iw7ZjayBpbiA6aXNzdWU6YDE2NDIzYC4pCisKKwordW5pdHRlc3QKKy0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIGVhc3kgZHluYW1pY2FsbHktZ2VuZXJhdGVkIHN1YnRlc3RzIHVzaW5nIHRoZQorOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zdWJUZXN0YCBjb250ZXh0IG1hbmFnZXIuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2OTk3YC4pCisKKword2F2ZQorLS0tLQorCitUaGUgOm1ldGg6YH53YXZlLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzQ4N2AuKQorCis6bWV0aDpgd2F2ZS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIChDb250cmlidXRlZAorYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc2MTZgLikKKworCit3ZWFrcmVmCistLS0tLS0tCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLldlYWtNZXRob2RgIGNsYXNzIHNpbXVsYXRlcyB3ZWFrIHJlZmVyZW5jZXMgdG8gYm91bmQKK21ldGhvZHMuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0NjMxYC4pCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLmZpbmFsaXplYCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBhIGNhbGxiYWNrCit0byBiZSBpbnZva2VkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB3aXRob3V0IG5lZWRpbmcgdG8KK2NhcmVmdWxseSBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGUgd2VhayByZWZlcmVuY2UgaXRzZWxmLiAoQ29udHJpYnV0ZWQgYnkKK1JpY2hhcmQgT3Vka2VyayBpbiA6aXNzdWU6YDE1NTI4YCkKKworCit4bWwuZXRyZWUKKy0tLS0tLS0tLQorCitBZGQgYW4gZXZlbnQtZHJpdmVuIHBhcnNlciBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucywKKzpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyYC4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTc3NDFgLikKKworCit6aXBmaWxlLlB5WmlwZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIGEgZmlsdGVyIGZ1bmN0aW9uIHRvIGlnbm9yZSBzb21lIHBhY2thZ2VzICh0ZXN0cyBmb3IgaW5zdGFuY2UpLAorOm1ldGg6YH56aXBmaWxlLlB5WmlwRmlsZS53cml0ZXB5YC4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBUaXNtZXIgaW4gOmlzc3VlOmAxOTI3NGAuKQorCisKK090aGVyIGltcHJvdmVtZW50cworPT09PT09PT09PT09PT09PT09CisKK1RhYi1jb21wbGV0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgYW5kIMOJcmljIEFyYXVqbyBpbiA6aXNzdWU6YDU4NDVgLikKKworUHl0aG9uIGludm9jYXRpb24gY2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnZva2luZyB0aGUgUHl0aG9uIGludGVycHJldGVyIHdpdGggYGAtLXZlcnNpb25gYCBub3cgb3V0cHV0cyB0aGUgdmVyc2lvbiB0bworc3RhbmRhcmQgb3V0cHV0IGluc3RlYWQgb2Ygc3RhbmRhcmQgZXJyb3IgKDppc3N1ZTpgMTgzMzhgKS4gU2ltaWxhciBjaGFuZ2VzCit3ZXJlIG1hZGUgdG8gOm1vZDpgYXJncGFyc2VgICg6aXNzdWU6YDE4OTIwYCkgYW5kIG90aGVyIG1vZHVsZXMgdGhhdCBoYXZlCitzY3JpcHQtbGlrZSBpbnZvY2F0aW9uIGNhcGFiaWxpdGllcyAoOmlzc3VlOmAxODkyMmApLgorCitPcHRpbWl6YXRpb25zCis9PT09PT09PT09PT09CisKK01ham9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CisKKyogVGhlIFVURi0zMiBkZWNvZGVyIGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIuCisKKyogVGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGZvciBzZXRzIGlzIG5vdyByZWR1Y2VkLiAgRWFjaCBoYXNoIHRhYmxlCisgIHByb2JlIG5vdyBjaGVja3MgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUsIGFkamFjZW50IGtleS9oYXNoIHBhaXJzIGJlZm9yZQorICBjb250aW51aW5nIHRvIG1ha2UgcmFuZG9tIHByb2JlcyB0aHJvdWdoIHRoZSBoYXNoIHRhYmxlLiAgVGhpcyBleHBsb2l0cworICBjYWNoZSBsb2NhbGl0eSB0byBtYWtlIGNvbGxpc2lvbiByZXNvbHV0aW9uIGxlc3MgZXhwZW5zaXZlLgorCisgIFRoZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBzY2hlbWUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGh5YnJpZCBvZiBsaW5lYXIKKyAgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVhciBwcm9iZXMKKyAgZGVmYXVsdHMgdG8gbmluZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZS10aW1lIGJ5IGRlZmluaW5nCisgIExJTkVBUl9QUk9CRVMgdG8gYmUgYW55IHZhbHVlLiAgU2V0IExJTkVBUl9QUk9CRVM9MCB0byB0dXJuLW9mZgorICBsaW5lYXIgcHJvYmluZyBlbnRpcmVseS4KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxODc3MWAuKQorCisqIFRoZSBpbnRlcnByZXRlciBzdGFydHMgYWJvdXQgMzAlIGZhc3Rlci4gQSBjb3VwbGUgb2YgbWVhc3VyZXMgbGVhZCB0byB0aGUKKyAgc3BlZWR1cC4gVGhlIGludGVycHJldGVyIGxvYWRzIGZld2VyIG1vZHVsZXMgb24gc3RhcnR1cCwgZS5nLiB0aGUgOm1vZDpgcmVgLAorICA6bW9kOmBjb2xsZWN0aW9uc2AgYW5kIDptb2Q6YGxvY2FsZWAgbW9kdWxlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBubworICBsb25nZXIgaW1wb3J0ZWQgYnkgZGVmYXVsdC4gVGhlIG1hcnNoYWwgbW9kdWxlIGhhcyBiZWVuIGltcHJvdmVkIHRvIGxvYWQKKyAgY29tcGlsZWQgUHl0aG9uIGNvZGUgZmFzdGVyLgorCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSwgQ2hyaXN0aWFuIEhlaW1lcyBhbmQgVmljdG9yIFN0aW5uZXIgaW4KKyAgOmlzc3VlOmAxOTIxOWAsIDppc3N1ZTpgMTkyMThgLCA6aXNzdWU6YDE5MjA5YCwgOmlzc3VlOmAxOTIwNWAgYW5kCisgIDppc3N1ZTpgOTU0OGApCisKKworQ1B5dGhvbiBJbXBsZW1lbnRhdGlvbiBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBfcGVwLTQ0NToKKworUEVQIDQ0NTogQ3VzdG9taXphdGlvbiBvZiBDUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ1YCBhZGRzIG5ldyBDIGxldmVsIGludGVyZmFjZXMgdG8gY3VzdG9taXplIG1lbW9yeSBhbGxvY2F0aW9uIGluCit0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NWAgLSBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF9wZXAtNDQyOgorCitQRVAgNDQyOiBTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDJgIHJlbW92ZXMgdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMgYW5kIHF1aXJrcyBvZiBvYmplY3QgZmluYWxpemF0aW9uCitpbiBDUHl0aG9uLiBXaXRoIGl0LCBvYmplY3RzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFzIHdlbGwgYXMKK2dlbmVyYXRvcnMgd2l0aCA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcywgY2FuIGJlIGZpbmFsaXplZCB3aGVuIHRoZXkgYXJlCitwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBtb2R1bGUgZ2xvYmFscyBhcmUgbm8gbG9uZ2VyIGZvcmNpYmx5IHNldCB0bworOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaW4gbW9zdCBjYXNlcywgaW5zdGVhZCByZWx5aW5nCitvbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQyYCAtIFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKK090aGVyIGJ1aWxkIGFuZCBDIEFQSSBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzIHRvIFB5dGhvbidzIGJ1aWxkIHByb2Nlc3MgYW5kIHRvIHRoZSBDIEFQSSBpbmNsdWRlOgorCisqIFRoZSBuZXcgOmM6ZnVuYzpgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ2AgcHJlLWluaXRpYWxpemF0aW9uIEFQSQorICBhbGxvd3MgYXBwbGljYXRpb25zIGVtYmVkZGluZyB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlciB0byByZWxpYWJseSBmb3JjZQorICBhIHBhcnRpY3VsYXIgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzdGFuZGFyZCBzdHJlYW1zCisgIChDb250cmlidXRlZCBieSBCYXN0aWVuIE1vbnRhZ25lIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxNjEyOWApCisKKyogTW9zdCBQeXRob24gQyBBUElzIHRoYXQgZG9uJ3QgbXV0YXRlIHN0cmluZyBhcmd1bWVudHMgYXJlIG5vdyBjb3JyZWN0bHkKKyAgbWFya2VkIGFzIGFjY2VwdGluZyBgYGNvbnN0IGNoYXIgKmBgIHJhdGhlciB0aGFuIGBgY2hhciAqYGAgKENvbnRyaWJ1dGVkCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNzcyNjczYCkuCisKKyogIkFyZ3VtZW50IENsaW5pYyIgKDpwZXA6YDQzNmApIGlzIG5vdyBwYXJ0IG9mIHRoZSBDUHl0aG9uIGJ1aWxkIHByb2Nlc3MKKyAgYW5kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGFuZCBtYWludGFpbmluZworICBhY2N1cmF0ZSBzaWduYXR1cmVzIGZvciBidWlsdGlucyBhbmQgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcworICBpbXBsZW1lbnRlZCBpbiBDLgorCisgIC4uIG5vdGU6OgorICAgICBUaGUgQXJndW1lbnQgQ2xpbmljIFBFUCBpcyBub3QgZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgaW1wbGVtZW50YXRpb24uIFRoaXMgaGFzIGJlZW4gZGVlbWVkIGFjY2VwdGFibGUgYnkgdGhlIHJlbGVhc2UgbWFuYWdlcgorICAgICBhbmQgY29yZSBkZXZlbG9wbWVudCB0ZWFtIGluIHRoaXMgY2FzZSwgYXMgQXJndW1lbnQgQ2xpbmljIHdpbGwgbm90CisgICAgIGJlIG1hZGUgYXZhaWxhYmxlIGFzIGEgcHVibGljIEFQSSBmb3IgdGhpcmQgcGFydHkgdXNlIGluIFB5dGhvbiAzLjQuCisKKworRGVwcmVjYXRlZAorPT09PT09PT09PQorCitVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBPUy8yCisqIFdpbmRvd3MgMjAwMAorCisKK0RlcHJlY2F0ZWQgUHl0aG9uIG1vZHVsZXMsIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYmp1bmtgIGFuZAorICA6bWV0aDpgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuaXNicG9wdWxhcmAgd2VyZSByZW1vdmVkOiB1c2UgYGB4IGluIHNtLmJqdW5rYGAgYW5kCisgIGBgeCBpbiBzbS5icG9wdWxhcmBgLCB3aGVyZSAqc20qIGlzIGEgOmNsYXNzOmB+ZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXJgIG9iamVjdC4KKworKiA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uIFVzaW5nCisgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZGAgYW5kCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5pbml0X21vZHVsZV9hdHRyc2AgYWxsb3dzIHN1YmNsYXNzZXMgb2YgYSBsb2FkZXIKKyAgdG8gbW9yZSBlYXNpbHkgY3VzdG9taXplIG1vZHVsZSBsb2FkaW5nLgorCisqIFRoZSA6bW9kOmBpbXBgIG1vZHVsZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uLiBUbyBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aAorICBQeXRob24gMi8zIGNvZGUgYmFzZXMsIHRoZSBtb2R1bGUncyByZW1vdmFsIGlzIGN1cnJlbnRseSBub3Qgc2NoZWR1bGVkLgorCisqIFRoZSA6bW9kOmBmb3JtYXR0ZXJgIG1vZHVsZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGFuZCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwKKyAgaW4gUHl0aG9uIDMuNi4KKworKiBNRDUgYXMgZGVmYXVsdCBkaWdlc3Rtb2QgZm9yIDptb2Q6YGhtYWNgIGlzIGRlcHJlY2F0ZWQuIFB5dGhvbiAzLjYgd2lsbAorICByZXF1aXJlIGFuIGV4cGxpY2l0IGRpZ2VzdCBuYW1lIG9yIGNvbnN0cnVjdG9yIGFzICpkaWdlc3Rtb2QqIGFyZ3VtZW50LgorCisKK0RlcHJlY2F0ZWQgZnVuY3Rpb25zIGFuZCB0eXBlcyBvZiB0aGUgQyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgYGBQeVRocmVhZFN0YXRlLnRpY2tfY291bnRlcmBgIGZpZWxkIGhhcyBiZWVuIHJlbW92ZWQ6IGl0cyB2YWx1ZSB3YXMKKyAgbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiAoIm5ldyBHSUwiKS4KKworCitEZXByZWNhdGVkIGZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLCBpZiBpdAorICBleGlzdHMsIGlzIGRlcHJlY2F0ZWQgKDppc3N1ZTpgMTkzNzVgKS4KKworCitQb3J0aW5nIHRvIFB5dGhvbiAzLjQKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMKK3RoYXQgbWF5IHJlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGUuCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLgorCisqIDptZXRoOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgbm93IHNldHMgYGBfX2xvYWRlcl9fYGAgYW5kCisgIGBgX19wYWNrYWdlX19gYCB1bmNvbmRpdGlvbmFsbHkgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuIElmIHRoaXMgaXMgbm90CisgIGRlc2lyZWQgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVzZSBhdHRyaWJ1dGVzIG1hbnVhbGx5LiBZb3UgY2FuIHVzZQorICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGZvciBtb2R1bGUgbWFuYWdlbWVudC4KKworKiBJbXBvcnQgbm93IHJlc2V0cyByZWxldmFudCBhdHRyaWJ1dGVzIChlLmcuIGBgX19uYW1lX19gYCwgYGBfX2xvYWRlcl9fYGAsCisgIGBgX19wYWNrYWdlX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCkgdW5jb25kaXRpb25hbGx5IHdoZW4gcmVsb2FkaW5nLgorCisqIEZyb3plbiBwYWNrYWdlcyBubyBsb25nZXIgc2V0IGBgX19wYXRoX19gYCB0byBhIGxpc3QgY29udGFpbmluZyB0aGUgcGFja2FnZQorICBuYW1lIGJ1dCBhbiBlbXB0eSBsaXN0IGluc3RlYWQuIERldGVybWluZyBpZiBhIG1vZHVsZSBpcyBhIHBhY2thZ2Ugc2hvdWxkIGJlCisgIGRvbmUgdXNpbmcgYGBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJylgYC4KKworKiA6YzpmdW5jOmBQeUVycl9TZXRJbXBvcnRFcnJvcmAgbm93IHNldHMgOmV4YzpgVHlwZUVycm9yYCB3aGVuIGl0cyAqKm1zZyoqCisgIGFyZ3VtZW50IGlzIG5vdCBzZXQuIFByZXZpb3VzbHkgb25seSBgYE5VTExgYCB3YXMgcmV0dXJuZWQgd2l0aCBubyBleGNlcHRpb24KKyAgc2V0LgorCisqIDpmdW5jOmBweV9jb21waWxlLmNvbXBpbGVgIG5vdyByYWlzZXMgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZSBwYXRoCisgIGl0IHdvdWxkIHdyaXRlIHRvIGlzIGEgc3ltbGluayBvciBhIG5vbi1yZWd1bGFyIGZpbGUuIFRoaXMgaXMgdG8gYWN0IGFzIGEKKyAgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBmaWxlcyB3aXRoIGEgcmVndWxhciBmaWxlIHJlZ2FyZGxlc3MKKyAgb2Ygd2hhdCB0eXBlIG9mIGZpbGUgcGF0aCB0aGV5IHdlcmUgb3JpZ2luYWxseS4KKworKiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZWAgbm8gbG9uZ2VyIHJhaXNlcworICA6ZXhjOmBJbXBvcnRFcnJvcmAgd2hlbiB0aGUgc291cmNlIGNvZGUgYmVpbmcgbG9hZGVkIHRyaWdnZXJzIGEKKyAgOmV4YzpgU3ludGF4RXJyb3JgIG9yIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAuIEFzIDpleGM6YEltcG9ydEVycm9yYCBpcworICBtZWFudCB0byBiZSByYWlzZWQgb25seSB3aGVuIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSBmb3VuZCBidXQgaXQgc2hvdWxkLCBpdCB3YXMKKyAgZmVsdCB0byBiZSBvdmVyLXJlYWNoaW5nL292ZXJsb2FkaW5nIG9mIHRoYXQgbWVhbmluZyB3aGVuIHRoZSBzb3VyY2UgY29kZSBpcworICBmb3VuZCBidXQgaW1wcm9wZXJseSBzdHJ1Y3R1cmVkLiBJZiB5b3Ugd2VyZSBjYXRjaGluZyBJbXBvcnRFcnJvciBiZWZvcmUgYW5kCisgIHdpc2ggdG8gY29udGludWUgdG8gaWdub3JlIHN5bnRheCBvciBkZWNvZGluZyBpc3N1ZXMsIGNhdGNoIGFsbCB0aHJlZQorICBleGNlcHRpb25zIG5vdy4KKworKiA6ZnVuYzpgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyYCBhbmQgOmZ1bmM6YGZ1bmN0b29scy53cmFwc2Agbm93IGNvcnJlY3RseQorICBzZXQgdGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZXIsIGV2ZW4gaWYKKyAgdGhhdCBmdW5jdGlvbiBhbHNvIGhhZCBpdHMgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBzZXQuIFRoaXMgbWVhbnMKKyAgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZXMgbm93IGNvcnJlY3RseSBsaW5rIGEgc3RhY2sgb2YgZGVjb3JhdGVkCisgIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBldmVyeSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIGluIHRoZSBjaGFpbgorICByZWZlcnJpbmcgdG8gdGhlIGlubmVybW9zdCBmdW5jdGlvbi4gSW50cm9zcGVjdGlvbiBsaWJyYXJpZXMgdGhhdAorICBhc3N1bWVkIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd2FzIGludGVudGlvbmFsIGNhbiB1c2UKKyAgOmZ1bmM6YGluc3BlY3QudW53cmFwYCB0byBhY2Nlc3MgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGhhcworICBubyBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorCisqIChDIEFQSSkgVGhlIHJlc3VsdCBvZiB0aGUgOmM6ZGF0YTpgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcmAgY2FsbGJhY2sgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZCwgaW5zdGVhZCBvZiBhCisgIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworKiA6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlcmAgbm93IHBhc3NlcyBvbiB0aGUgY3VycmVudCB3b3JraW5nCisgIGRpcmVjdG9yeSB0byBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgZm9yIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMKKyAgcmVzdWx0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIG5ldmVyIGNvbnRhaW5pbmcgYGAnJ2BgLCB0aHVzCisgIGl0ZXJhdGluZyB0aHJvdWdoIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYmFzZWQgb24gOmRhdGE6YHN5cy5wYXRoYAorICB3aWxsIG5vdCBmaW5kIGFsbCBrZXlzLiBBIG1vZHVsZSdzIGBgX19maWxlX19gYCB3aGVuIGltcG9ydGVkIGluIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYWxzbyBub3cgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoLCBpbmNsdWRpbmcgd2hlbiB1c2luZworICBgYC1tYGAgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKHRoaXMgZG9lcyBub3QgaW5mbHVlbmNlIHdoZW4gdGhlIHBhdGggdG8gYSBmaWxlCisgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lKS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGJjMTIwNmIuLjI5OTAyZTQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdAogICAgMy4xLnJzdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAwMGU5MmQwLi42N2Q2NzdiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTgyLDggKzE4Miw5IEBACiAgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCiAgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBZaWVsZEZyb21fa2luZD0xMywgQ29tcGFyZV9raW5kPTE0LAogICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTE1LCBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEJ5dGVzX2tpbmQ9MTgsCi0gICAgICAgICAgICAgICAgICBFbGxpcHNpc19raW5kPTE5LCBBdHRyaWJ1dGVfa2luZD0yMCwgU3Vic2NyaXB0X2tpbmQ9MjEsCi0gICAgICAgICAgICAgICAgICBTdGFycmVkX2tpbmQ9MjIsIE5hbWVfa2luZD0yMywgTGlzdF9raW5kPTI0LCBUdXBsZV9raW5kPTI1fTsKKyAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKKyAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CiBzdHJ1Y3QgX2V4cHIgewogICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgIHVuaW9uIHsKQEAgLTI3OSw2ICsyODAsMTAgQEAKICAgICAgICAgfSBCeXRlczsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisgICAgICAgIH0gTmFtZUNvbnN0YW50OworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAgICAgICAgICAgICBpZGVudGlmaWVyIGF0dHI7CiAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkgY3R4OwpAQCAtMzU5LDE4ICszNjQsMTggQEAKIAogc3RydWN0IF9hcmd1bWVudHMgewogICAgIGFzZGxfc2VxICphcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxICprd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogICAgIGFzZGxfc2VxICprd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogfTsKIAogc3RydWN0IF9hcmcgewogICAgIGlkZW50aWZpZXIgYXJnOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbjsKKyAgICBpbnQgbGluZW5vOworICAgIGludCBjb2xfb2Zmc2V0OwogfTsKIAogc3RydWN0IF9rZXl3b3JkIHsKQEAgLTUwOSw2ICs1MTQsOSBAQAogZXhwcl90eSBfUHlfU3RyKHN0cmluZyBzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBCeXRlcyhhMCwgYTEsIGEyLCBhMykgX1B5X0J5dGVzKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfQnl0ZXMoYnl0ZXMgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKSBfUHlfTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwogI2RlZmluZSBFbGxpcHNpcyhhMCwgYTEsIGEyKSBfUHlfRWxsaXBzaXMoYTAsIGExLCBhMikKIGV4cHJfdHkgX1B5X0VsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEF0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQXR0cmlidXRlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCkBAIC01NDIsMTEgKzU1MCwxMCBAQAogZXhjZXB0aGFuZGxlcl90eSBfUHlfRXhjZXB0SGFuZGxlcihleHByX3R5IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwotI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotYXJndW1lbnRzX3R5IF9QeV9hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiwgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sIGFzZGxfc2VxICogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIGFyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK2FyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQogYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL1B5dGhvbi5oIGIvSW5jbHVkZS9QeXRob24uaAppbmRleCBhNzhhNzIxLi4yZGQ4MjkwIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi5oCisrKyBiL0luY2x1ZGUvUHl0aG9uLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJvYmppbXBsLmgiCiAjaW5jbHVkZSAidHlwZXNsb3RzLmgiCisjaW5jbHVkZSAicHloYXNoLmgiCiAKICNpbmNsdWRlICJweWRlYnVnLmgiCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBjOTYyNGYzLi5kMjU4YWQ1IDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIFJldHVybnMgMSBpZiBvIGhhcyB0aGUgYXR0cmlidXRlIGF0dHJfbmFtZSwgYW5kIDAgb3RoZXJ3aXNlLgogICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uOgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXRyaWV2ZSBhbiBhdHRyaWJ1dGVkIG5hbWVkIGF0dHJfbmFtZSBmb3JtIG9iamVjdCBvLgogICAgICBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMTg5LDcgKzE4OSw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKKyAgICAgaW50IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpOwogCiAgICAgIFNldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3QgbywKICAgICAgdG8gdGhlIHZhbHVlLCB2LiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzCkBAIC0yMDksNyArMjA5LDcgQEAKIAogICAgICAvKiBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOgogCi0gICAgIGludCBQeU9iamVjdF9EZWxBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBEZWxldGUgYXR0cmlidXRlIG5hbWVkIGF0dHJfbmFtZSwgZm9yIG9iamVjdCBvLiBSZXR1cm5zCiAgICAgIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24KQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlX29iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCwgY2FsbGFibGVfb2JqZWN0LCB3aXRoIGEKQEAgLTI5Niw4ICsyOTYsOSBAQAogICAgICAgICovCiAKIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgpAQCAtMzA4LDggKzMwOSw5IEBACiAgICAgIFB5dGhvbiBleHByZXNzaW9uOiBvLm1ldGhvZChhcmdzKS4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgICAgIExpa2UgUHlPYmplY3RfQ2FsbE1ldGhvZCwgYnV0IGV4cGVjdCBhIF9QeV9JZGVudGlmaWVyKiBhcyB0aGUKQEAgLTMxNywxMyArMzE5LDE2IEBACiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVChQeU9iamVjdCAqbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRfU2l6ZVQoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwpAQCAtMzM5LDExICszNDQsMTAgQEAKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptZXRob2QsIC4uLik7Ci0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoUHlPYmplY3QgKm8sCisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCi0KICAgICAgICAvKgogICAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgbSBvZiBvYmplY3QgbyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCiAgICAgIEMgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBwcm92aWRlZCBhcyBQeU9iamVjdCAqCkBAIC00MDQsOCArNDA4LDkgQEAKICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotICAgICBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIF9QeU9iamVjdF9IYXNMZW4oUHlPYmplY3QgKm8pOwogI2VuZGlmCitQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOwogCiAgICAgICAgLyoKICAgICAgR3Vlc3MgdGhlIHNpemUgb2Ygb2JqZWN0IG8gdXNpbmcgbGVuKG8pIG9yIG8uX19sZW5ndGhfaGludF9fKCkuCkBAIC00MjksNyArNDM0LDcgQEAKICAgICAgc3RhdGVtZW50OiBvW2tleV09di4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KQEAgLTExNTEsNyArMTE1Niw3IEBACiAKICAgICAgLyogaW1wbGVtZW50ZWQgYXMgYSBtYWNybzoKIAotICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCwga2V5LCBmcm9tIHRoZSBvYmplY3QgKm8uCiAgICAgIFJldHVybnMgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bwpAQCAtMTE2OSw3ICsxMTc0LDcgQEAKICAgICAgICAqLwogI2RlZmluZSBQeU1hcHBpbmdfRGVsSXRlbShPLEspIFB5T2JqZWN0X0RlbEl0ZW0oKE8pLChLKSkKIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBPbiBzdWNjZXNzLCByZXR1cm4gMSBpZiB0aGUgbWFwcGluZyBvYmplY3QgaGFzIHRoZSBrZXksIGtleSwKQEAgLTEyMTMsNyArMTIxOCw4IEBACiAKICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJldHVybiBlbGVtZW50IG9mIG8gY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0LCBrZXksIG9yIE5VTEwKQEAgLTEyMjEsNyArMTIyNyw3IEBACiAgICAgIG9ba2V5XS4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5LAorICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlKTsKIAogICAgICAgIC8qCmRpZmYgLS1naXQgYS9JbmNsdWRlL2FzZGwuaCBiL0luY2x1ZGUvYXNkbC5oCmluZGV4IDZiZjYxOGYuLjQ5NTE1M2MgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYXNkbC5oCisrKyBiL0luY2x1ZGUvYXNkbC5oCkBAIC01LDYgKzUsNyBAQAogdHlwZWRlZiBQeU9iamVjdCAqIHN0cmluZzsKIHR5cGVkZWYgUHlPYmplY3QgKiBieXRlczsKIHR5cGVkZWYgUHlPYmplY3QgKiBvYmplY3Q7Cit0eXBlZGVmIFB5T2JqZWN0ICogc2luZ2xldG9uOwogCiAvKiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBhc2RsX2MucHkgd2FzIGNvbXBsZXRlbHkKICAgIGluZGVwZW5kZW50IG9mIFB5dGhvbiwgYnV0IGl0IGlzIGEgZ29hbCB0aGUgcmVxdWlyZXMgdG9vIG11Y2ggd29yawpAQCAtMjQsMTcgKzI1LDE5IEBACiAgICAgaW50IGVsZW1lbnRzWzFdOwogfSBhc2RsX2ludF9zZXE7CiAKLWFzZGxfc2VxICphc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Ci1hc2RsX2ludF9zZXEgKmFzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Cithc2RsX3NlcSAqX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKK2FzZGxfaW50X3NlcSAqX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7CiAKICNkZWZpbmUgYXNkbF9zZXFfR0VUKFMsIEkpIChTKS0+ZWxlbWVudHNbKEkpXQogI2RlZmluZSBhc2RsX3NlcV9MRU4oUykgKChTKSA9PSBOVUxMID8gMCA6IChTKS0+c2l6ZSkKICNpZmRlZiBQeV9ERUJVRwotI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgeyBcCi0gICAgICAgIGludCBfYXNkbF9pID0gKEkpOyBcCi0gICAgICAgIGFzc2VydCgoUykgJiYgX2FzZGxfaSA8IChTKS0+c2l6ZSk7IFwKKyNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgUHlfc3NpemVfdCBfYXNkbF9pID0gKEkpOyBcCisgICAgICAgIGFzc2VydCgoUykgIT0gTlVMTCk7IFwKKyAgICAgICAgYXNzZXJ0KF9hc2RsX2kgPCAoUyktPnNpemUpOyBcCiAgICAgICAgIChTKS0+ZWxlbWVudHNbX2FzZGxfaV0gPSAoVik7IFwKLX0KKyAgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIChTKS0+ZWxlbWVudHNbSV0gPSAoVikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc3QuaCBiL0luY2x1ZGUvYXN0LmgKaW5kZXggMDU1ZThkYy4uNmE4YzgxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc3QuaAorKysgYi9JbmNsdWRlL2FzdC5oCkBAIC0xMCw2ICsxMCwxMSBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMobW9kX3R5KSBQeUFTVF9Gcm9tTm9kZU9iamVjdCgKKyAgICBjb25zdCBub2RlICpuLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oIGIvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAppbmRleCBlY2NkNDRjLi5hNzU3Yjg4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKQEAgLTIyLDEwICsyMiwxMSBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X1ZBUl9IRUFECisgICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkIGluIG9iX2J5dGVzICovCisgICAgY2hhciAqb2JfYnl0ZXM7ICAgICAgLyogUGh5c2ljYWwgYmFja2luZyBidWZmZXIgKi8KKyAgICBjaGFyICpvYl9zdGFydDsgICAgICAvKiBMb2dpY2FsIHN0YXJ0IGluc2lkZSBvYl9ieXRlcyAqLwogICAgIC8qIFhYWChubm9yd2l0eik6IHNob3VsZCBvYl9leHBvcnRzIGJlIFB5X3NzaXplX3Q/ICovCi0gICAgaW50IG9iX2V4cG9ydHM7IC8qIGhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCi0gICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkICovCi0gICAgY2hhciAqb2JfYnl0ZXM7CisgICAgaW50IG9iX2V4cG9ydHM7ICAgICAgLyogSG93IG1hbnkgYnVmZmVyIGV4cG9ydHMgKi8KIH0gUHlCeXRlQXJyYXlPYmplY3Q7CiAjZW5kaWYKIApAQCAtNDksOCArNTAsOCBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgXAogICAgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBcCi0gICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2JfYnl0ZXMgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQotI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksUHlfU0laRShzZWxmKSkKKyAgICAgUHlfU0laRShzZWxmKSA/ICgoUHlCeXRlQXJyYXlPYmplY3QgKikoc2VsZikpLT5vYl9zdGFydCA6IF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmcpCisjZGVmaW5lIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBQeV9TSVpFKHNlbGYpKQogCiBQeUFQSV9EQVRBKGNoYXIpIF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmdbXTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlc29iamVjdC5oIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCmluZGV4IGQ3YzdmZmQuLjBlZThkMzYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKQEAgLTg2LDExICs4NiwxMSBAQAogICAgMC10ZXJtaW5hdGVkIChwYXNzaW5nIGEgc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMTCBjaGFyYWN0ZXJzIHdpbGwKICAgIGNhdXNlIGFuIGV4Y2VwdGlvbikuICAqLwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCS8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKipzLAkJLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KLSAgICByZWdpc3RlciBQeV9zc2l6ZV90ICpsZW4JLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAotCQkJCSAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKLQkJCQkgICBzdHJpbmdzKSAqLworICAgIFB5T2JqZWN0ICpvYmosICAgICAgLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCisgICAgY2hhciAqKnMsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLworICAgIFB5X3NzaXplX3QgKmxlbiAgICAgLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncykgKi8KICAgICApOwogCiAvKiBVc2luZyB0aGUgY3VycmVudCBsb2NhbGUsIGluc2VydCB0aGUgdGhvdXNhbmRzIGdyb3VwaW5nCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvZGVjcy5oIGIvSW5jbHVkZS9jb2RlY3MuaAppbmRleCAwZDllOWI0Li41Y2E1MDVmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvZGVjcy5oCisrKyBiL0luY2x1ZGUvY29kZWNzLmgKQEAgLTk0LDYgKzk0LDMzIEBACiAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCiAgICAgICAgKTsKIAorI2lmbmRlZiBQWV9MSU1JVEVEX0FQSQorLyogVGV4dCBjb2RlYyBzcGVjaWZpYyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgQVBJLgorCisgICBDaGVja3MgdGhlIGVuY29kaW5nIGFnYWluc3QgYSBsaXN0IG9mIGNvZGVjcyB3aGljaCBkbyBub3QKKyAgIGltcGxlbWVudCBhIHN0cjwtPmJ5dGVzIGVuY29kaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRoZQorICAgb3BlcmF0aW9uLgorCisgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFQSXMgYXJlIGludGVybmFsIGFuZCBzaG91bGQgbm90CisgICBiZSB1c2VkIGluIFB5dGhvbiBDIGV4dGVuc2lvbnMuCisKKyAqLworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvZGVjX0VuY29kZVRleHQoCisgICAgICAgUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICBjb25zdCBjaGFyICplcnJvcnMKKyAgICAgICApOworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvZGVjX0RlY29kZVRleHQoCisgICAgICAgUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICBjb25zdCBjaGFyICplcnJvcnMKKyAgICAgICApOworI2VuZGlmCisKKworCiAvKiAtLS0gQ29kZWMgTG9va3VwIEFQSXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAKICAgIEFsbCBBUElzIHJldHVybiBhIGNvZGVjIG9iamVjdCB3aXRoIGluY3JlbWVudGVkIHJlZmNvdW50IGFuZCBhcmUKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggYWMyNjM2ZC4uYzY2NTBkNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTM2LDExICszNiwyNyBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKLVB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICptb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1RPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lCisgICAgKTsKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKIAorI2RlZmluZSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCBJTlRfTUFYCitQeUFQSV9GVU5DKGludCkgUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvZGljdG9iamVjdC5oCmluZGV4IGQ4OWFhYzguLjI4NTk2NjkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZGljdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGljdG9iamVjdC5oCkBAIC01Myw2ICs1Myw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKFB5T2JqZWN0ICpkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfU2V0RGVmYXVsdCgKKyAgICBQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfQ2xlYXIoUHlPYmplY3QgKm1wKTsKQEAgLTEwOSw5ICsxMTEsMTEgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqbXAsIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CisKIGludCBfUHlPYmplY3REaWN0X1NldEl0ZW0oUHlUeXBlT2JqZWN0ICp0cCwgUHlPYmplY3QgKipkaWN0cHRyLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKTsKIFB5T2JqZWN0ICpfUHlEaWN0X0xvYWRHbG9iYWwoUHlEaWN0T2JqZWN0ICosIFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGVvYmplY3QuaCBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCmluZGV4IGE5OWM5NGQuLjA5Mzk3NDQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCkBAIC04LDggKzgsOSBAQAogCiAjZGVmaW5lIFBZX1NURElPVEVYVE1PREUgImIiCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNoYXIgKiwgY2hhciAqLCBpbnQsIGNoYXIgKiwgY2hhciAqLAotCQkJCSAgICAgY2hhciAqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfRnJvbUZkKGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9HZXRMaW5lKFB5T2JqZWN0ICosIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlT2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlU3RyaW5nKGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGV1dGlscy5oIGIvSW5jbHVkZS9maWxldXRpbHMuaAppbmRleCA3YzE4Y2YyLi41NDY2ZTNjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGV1dGlscy5oCisrKyBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKQEAgLTI3LDExICsyNywxOSBAQAogICAgIHN0cnVjdCBzdGF0ICpzdGF0YnVmKTsKICNlbmRpZgogCitQeUFQSV9GVU5DKGludCkgX1B5X29wZW4oCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsCisgICAgaW50IGZsYWdzKTsKKwogUHlBUElfRlVOQyhGSUxFICopIF9QeV93Zm9wZW4oCiAgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKICAgICBjb25zdCB3Y2hhcl90ICptb2RlKTsKIAogUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGNvbnN0IGNoYXIgKm1vZGUpOworCitQeUFQSV9GVU5DKEZJTEUqKSBfUHlfZm9wZW5fb2JqKAogICAgIFB5T2JqZWN0ICpwYXRoLAogICAgIGNvbnN0IGNoYXIgKm1vZGUpOwogCkBAIC01Myw2ICs2MSwxMyBAQAogICAgIHdjaGFyX3QgKmJ1ZiwKICAgICBzaXplX3Qgc2l6ZSk7CiAKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphdG9taWNfZmxhZ193b3Jrcyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZHVwKGludCBmZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggMzNmNzNhZi4uYjQxYmVhNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogICAgICAgICAgICBub24tZ2VuZXJhdG9yIGZyYW1lcy4gU2VlIHRoZSBzYXZlX2V4Y19zdGF0ZSBhbmQgc3dhcF9leGNfc3RhdGUKICAgICAgICAgICAgZnVuY3Rpb25zIGluIGNldmFsLmMgZm9yIGRldGFpbHMgb2YgdGhlaXIgdXNlLiAqLwogICAgIFB5T2JqZWN0ICpmX2V4Y190eXBlLCAqZl9leGNfdmFsdWUsICpmX2V4Y190cmFjZWJhY2s7CisgICAgLyogQm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgZ2VuZXJhdG9yLCBvciBOVUxMICovCisgICAgUHlPYmplY3QgKmZfZ2VuOwogCiAgICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7ICAgICAgICAgICAgICAgIC8qIExhc3QgaW5zdHJ1Y3Rpb24gaWYgY2FsbGVkICovCkBAIC00Niw2ICs0OCw3IEBACiAgICAgICAgYnl0ZWNvZGUgaW5kZXguICovCiAgICAgaW50IGZfbGluZW5vOyAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgZl9pYmxvY2s7ICAgICAgICAgICAgICAgLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCisgICAgY2hhciBmX2V4ZWN1dGluZzsgICAgICAgICAgIC8qIHdoZXRoZXIgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZyAqLwogICAgIFB5VHJ5QmxvY2sgZl9ibG9ja3N0YWNrW0NPX01BWEJMT0NLU107IC8qIGZvciB0cnkgYW5kIGxvb3AgYmxvY2tzICovCiAgICAgUHlPYmplY3QgKmZfbG9jYWxzcGx1c1sxXTsgIC8qIGxvY2FscytzdGFjaywgZHluYW1pY2FsbHkgc2l6ZWQgKi8KIH0gUHlGcmFtZU9iamVjdDsKQEAgLTc1LDYgKzc4LDggQEAKIC8qIENvbnZlcnNpb25zIGJldHdlZW4gImZhc3QgbG9jYWxzIiBhbmQgbG9jYWxzIGluIGRpY3Rpb25hcnkgKi8KIAogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0xvY2Fsc1RvRmFzdChQeUZyYW1lT2JqZWN0ICosIGludCk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoUHlGcmFtZU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ2Vub2JqZWN0LmggYi9JbmNsdWRlL2dlbm9iamVjdC5oCmluZGV4IGVkNDUxYmEuLjY1ZjFlY2YgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ2Vub2JqZWN0LmgKKysrIGIvSW5jbHVkZS9nZW5vYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogUHlBUElfRlVOQyhpbnQpIFB5R2VuX05lZWRzRmluYWxpemluZyhQeUdlbk9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoUHlPYmplY3QgKiopOwogUHlPYmplY3QgKl9QeUdlbl9TZW5kKFB5R2VuT2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlHZW5fRmluYWxpemUoUHlPYmplY3QgKnNlbGYpOworCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtbWFyLmggYi9JbmNsdWRlL2dyYW1tYXIuaAppbmRleCA4NDI2ZGEzLi5iYTdkMTlkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dyYW1tYXIuaAorKysgYi9JbmNsdWRlL2dyYW1tYXIuaApAQCAtNjksMTQgKzY5LDE0IEBACiAvKiBGVU5DVElPTlMgKi8KIAogZ3JhbW1hciAqbmV3Z3JhbW1hcihpbnQgc3RhcnQpOwotZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpOworZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGFkZHN0YXRlKGRmYSAqZCk7CiB2b2lkIGFkZGFyYyhkZmEgKmQsIGludCBmcm9tLCBpbnQgdG8sIGludCBsYmwpOwogZGZhICpQeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCBpbnQgdHlwZSk7CiAKLWludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1jaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CitpbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7CitpbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworY29uc3QgY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOwogdm9pZCB0cmFuc2xhdGVsYWJlbHMoZ3JhbW1hciAqZyk7CiAKIHZvaWQgYWRkZmlyc3RzZXRzKGdyYW1tYXIgKmcpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9pbXBvcnQuaCBiL0luY2x1ZGUvaW1wb3J0LmgKaW5kZXggZmRjMjczMy4uNGE1MTVkNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9pbXBvcnQuaAorKysgYi9JbmNsdWRlL2ltcG9ydC5oCkBAIC0xMywxOSArMTMsMTkgQEAKIFB5QVBJX0ZVTkMobG9uZykgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIodm9pZCk7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlJbXBvcnRfR2V0TWFnaWNUYWcodm9pZCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lICAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSwgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCi0gICAgY2hhciAqY3BhdGhuYW1lICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoCiAgICAgUHlPYmplY3QgKm5hbWUsCkBAIC03Miw3ICs3Miw3IEBACiAgICAgUHlPYmplY3QgKm5hbWUKICAgICApOwogUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSgKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC05MiwxMiArOTIsMTIgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKilfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oCiAgICAgUHlPYmplY3QgKm1vZCwKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhpbnQpX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0KiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKIHN0cnVjdCBfaW5pdHRhYiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QqICgqaW5pdGZ1bmMpKHZvaWQpOwogfTsKIFB5QVBJX0RBVEEoc3RydWN0IF9pbml0dGFiICopIFB5SW1wb3J0X0luaXR0YWI7CkBAIC0xMTMsMTUgKzExMywxNSBAQAogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBzdHJ1Y3QgX2Zyb3plbiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCi0gICAgdW5zaWduZWQgY2hhciAqY29kZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2RlOwogICAgIGludCBzaXplOwogfTsKIAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLVB5QVBJX0RBVEEoc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK1B5QVBJX0RBVEEoY29uc3Qgc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ29iamVjdC5oIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKaW5kZXggZmJlNzM4Yy4uN2MzZjZkMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25nb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKQEAgLTUyLDYgKzUyLDE5IEBACiAjZXJyb3IgInNpemVvZihwaWRfdCkgaXMgbmVpdGhlciBzaXplb2YoaW50KSwgc2l6ZW9mKGxvbmcpIG9yIHNpemVvZihsb25nIGxvbmcpIgogI2VuZGlmIC8qIFNJWkVPRl9QSURfVCAqLwogCisjaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfSU5UCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiaSIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSSIKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJsIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJrIgorI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJMIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJLIgorI2Vsc2UKKyMgIGVycm9yICJ2b2lkKiBkaWZmZXJlbnQgaW4gc2l6ZSBmcm9tIGludCwgbG9uZyBhbmQgbG9uZyBsb25nIgorI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgKi8KKwogLyogVXNlZCBieSBQeXRob24vbXlzdHJ0b3VsLmMuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKHVuc2lnbmVkIGNoYXIpIF9QeUxvbmdfRGlnaXRWYWx1ZVsyNTZdOwpAQCAtODAsNyArOTMsNyBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFKiwgUHlfc3NpemVfdCwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSk7CkBAIC0xNzYsOCArMTg5LDggQEAKIC8qIFRoZXNlIGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgaW50IG9iamVjdCwgYnV0IHRoZXkncmUgaGFuZHkuIFRoZQogICAgZnVuY3Rpb25zIGFyZSBpbiBQeXRob24vbXlzdHJ0b3VsLmMuCiAgKi8KLVB5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKLVB5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tYXJzaGFsLmggYi9JbmNsdWRlL21hcnNoYWwuaAppbmRleCBlOTZkMDYyLi4wOWQ5MzM3IDEwMDY0NAotLS0gYS9JbmNsdWRlL21hcnNoYWwuaAorKysgYi9JbmNsdWRlL21hcnNoYWwuaApAQCAtNyw3ICs3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDIKKyNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDQKIAogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKGxvbmcsIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKQEAgLTE5LDcgKzE5LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShGSUxFICopOwogI2VuZGlmCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICosIFB5X3NzaXplX3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2RzdXBwb3J0LmggYi9JbmNsdWRlL21vZHN1cHBvcnQuaAppbmRleCBlY2YxZGNjLi5hYjcyNWY2IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHN1cHBvcnQuaAorKysgYi9JbmNsdWRlL21vZHN1cHBvcnQuaApAQCAtMjYsNyArMjYsNyBAQAogLyogRHVlIHRvIGEgZ2xpdGNoIGluIDMuMiwgdGhlIF9TaXplVCB2ZXJzaW9ucyB3ZXJlbid0IGV4cG9ydGVkIGZyb20gdGhlIERMTC4gKi8KICNpZiAhZGVmaW5lZChQWV9TU0laRV9UX0NMRUFOKSB8fCAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDMwMDAwCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOworUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmplY3QuaCBiL0luY2x1ZGUvb2JqZWN0LmgKaW5kZXggMjBjNDc4MC4uOGRlMjIwOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vYmplY3QuaAorKysgYi9JbmNsdWRlL29iamVjdC5oCkBAIC0xNDMsNyArMTQzLDggQEAKICAgICBQeU9iamVjdCAqb2JqZWN0OwogfSBfUHlfSWRlbnRpZmllcjsKIAotI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZyh2YXJuYW1lLCB2YWx1ZSkgIHN0YXRpYyBfUHlfSWRlbnRpZmllciB2YXJuYW1lID0geyAwLCB2YWx1ZSwgMCB9CisjZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nX2luaXQodmFsdWUpIHsgMCwgdmFsdWUsIDAgfQorI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZyh2YXJuYW1lLCB2YWx1ZSkgIHN0YXRpYyBfUHlfSWRlbnRpZmllciB2YXJuYW1lID0gX1B5X3N0YXRpY19zdHJpbmdfaW5pdCh2YWx1ZSkKICNkZWZpbmUgX1B5X0lERU5USUZJRVIodmFybmFtZSkgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF8jI3Zhcm5hbWUsICN2YXJuYW1lKQogCiAvKgpAQCAtMzYyLDcgKzM2Myw3IEBACiAgICAgUHlCdWZmZXJQcm9jcyAqdHBfYXNfYnVmZmVyOwogCiAgICAgLyogRmxhZ3MgdG8gZGVmaW5lIHByZXNlbmNlIG9mIG9wdGlvbmFsL2V4cGFuZGVkIGZlYXR1cmVzICovCi0gICAgbG9uZyB0cF9mbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIHRwX2ZsYWdzOwogCiAgICAgY29uc3QgY2hhciAqdHBfZG9jOyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwogCkBAIC00MDgsNiArNDA5LDggQEAKICAgICAvKiBUeXBlIGF0dHJpYnV0ZSBjYWNoZSB2ZXJzaW9uIHRhZy4gQWRkZWQgaW4gdmVyc2lvbiAyLjYgKi8KICAgICB1bnNpZ25lZCBpbnQgdHBfdmVyc2lvbl90YWc7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2ZpbmFsaXplOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgLyogdGhlc2UgbXVzdCBiZSBsYXN0IGFuZCBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkICovCiAgICAgUHlfc3NpemVfdCB0cF9hbGxvY3M7CkBAIC00MjgsNyArNDMxLDcgQEAKICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIGludCBiYXNpY3NpemU7CiAgICAgaW50IGl0ZW1zaXplOwotICAgIGludCBmbGFnczsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3RzOyAvKiB0ZXJtaW5hdGVkIGJ5IHNsb3Q9PTAuICovCiB9IFB5VHlwZV9TcGVjOwogCkBAIC00NzAsNyArNDczLDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJhc2VPYmplY3RfVHlwZTsgLyogYnVpbHQtaW4gJ29iamVjdCcgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN1cGVyX1R5cGU7IC8qIGJ1aWx0LWluICdzdXBlcicgKi8KIAotUHlBUElfRlVOQyhsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKIAogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCkBAIC01MzAsNiArNTMzLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICopOwogCiAvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcwogICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCkBAIC01NTcsMjMgKzU2Miw2IEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9oYXNoX3QgcHJlZml4OwotICAgIFB5X2hhc2hfdCBzdWZmaXg7Ci19IF9QeV9IYXNoU2VjcmV0X3Q7Ci1QeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OwotCi0jaWZkZWYgUHlfREVCVUcKLVB5QVBJX0RBVEEoaW50KSBfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZDsKLSNlbmRpZgotCiAvKiBIZWxwZXIgZm9yIHBhc3Npbmcgb2JqZWN0cyB0byBwcmludGYgYW5kIHRoZSBsaWtlICovCiAjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5T2JqZWN0X1JlcHIob2JqKSkKIApAQCAtNjA0LDUwICs1OTIsNTUgQEAKICovCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBvYmplY3QgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFMPDw5KQorI2RlZmluZSBQeV9UUEZMQUdTX0hFQVBUWVBFICgxVUwgPDwgOSkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGFsbG93cyBzdWJjbGFzc2luZyAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VUWVBFICgxTDw8MTApCisjZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFVTCA8PCAxMCkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGlzICdyZWFkeScgLS0gZnVsbHkgaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWSAoMUw8PDEyKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxVUwgPDwgMTIpCiAKIC8qIFNldCB3aGlsZSB0aGUgdHlwZSBpcyBiZWluZyAncmVhZGllZCcsIHRvIHByZXZlbnQgcmVjdXJzaXZlIHJlYWR5IGNhbGxzICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFlJTkcgKDFMPDwxMykKKyNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMVVMIDw8IDEzKQogCiAvKiBPYmplY3RzIHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uIChzZWUgb2JqaW1wLmgpICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMUw8PDE0KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0MgKDFVTCA8PCAxNCkKIAogLyogVGhlc2UgdHdvIGJpdHMgYXJlIHByZXNlcnZlZCBmb3IgU3RhY2tsZXNzIFB5dGhvbiwgbmV4dCBhZnRlciB0aGlzIGlzIDE3ICovCiAjaWZkZWYgU1RBQ0tMRVNTCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzTDw8MTUpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzVUwgPDwgMTUpCiAjZWxzZQogI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAwCiAjZW5kaWYKIAogLyogT2JqZWN0cyBzdXBwb3J0IHR5cGUgYXR0cmlidXRlIGNhY2hlICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxTDw8MTgpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxTDw8MTkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxVUwgPDwgMTgpCisjZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxVUwgPDwgMTkpCiAKIC8qIFR5cGUgaXMgYWJzdHJhY3QgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JU19BQlNUUkFDVCAoMUw8PDIwKQorI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxVUwgPDwgMjApCiAKIC8qIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHR5cGUgaXMgYSBzdWJjbGFzcy4gKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JTlRfU1VCQ0xBU1MgICAgICAgICAoMUw8PDIzKQotI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxTDw8MjQpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFMPDwyNSkKLSNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMUw8PDI2KQotI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxTDw8MjcpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFMPDwyOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI5KQotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxTDw8MzApCi0jZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFMPDwzMSkKKyNkZWZpbmUgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI0KQorI2RlZmluZSBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjUpCisjZGVmaW5lIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgICAgKDFVTCA8PCAyNikKKyNkZWZpbmUgUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI3KQorI2RlZmluZSBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgICAgICgxVUwgPDwgMjgpCisjZGVmaW5lIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyAgICAoMVVMIDw8IDMwKQorI2RlZmluZSBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMzEpCiAKICNkZWZpbmUgUHlfVFBGTEFHU19ERUZBVUxUICAoIFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gfCBcCiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyB8IFwKICAgICAgICAgICAgICAgICAwKQogCisvKiBOT1RFOiBUaGUgZm9sbG93aW5nIGZsYWdzIHJldXNlIGxvd2VyIGJpdHMgKHJlbW92ZWQgYXMgcGFydCBvZiB0aGUKKyAqIFB5dGhvbiAzLjAgdHJhbnNpdGlvbikuICovCisKKy8qIFR5cGUgc3RydWN0dXJlIGhhcyB0cF9maW5hbGl6ZSBtZW1iZXIgKDMuNCkgKi8KKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFICgxVUwgPDwgMCkKKwogI2lmZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5VHlwZV9IYXNGZWF0dXJlKHQsZikgICgoUHlUeXBlX0dldEZsYWdzKHQpICYgKGYpKSAhPSAwKQogI2Vsc2UKQEAgLTY4MiwxMiArNjc1LDYgQEAKIGNvbXBsaWNhdGlvbnMgaW4gdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gIChUaGlzIGlzIGFjdHVhbGx5IGEKIGRlY2lzaW9uIHRoYXQncyB1cCB0byB0aGUgaW1wbGVtZW50ZXIgb2YgZWFjaCBuZXcgdHlwZSBzbyBpZiB5b3Ugd2FudCwKIHlvdSBjYW4gY291bnQgc3VjaCByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIG9iamVjdC4pCi0KLSoqKiBXQVJOSU5HKioqIFRoZSBQeV9ERUNSRUYgbWFjcm8gbXVzdCBoYXZlIGEgc2lkZS1lZmZlY3QtZnJlZSBhcmd1bWVudAotc2luY2UgaXQgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gIChUaGUgYWx0ZXJuYXRpdmUKLXdvdWxkIGJlIHRvIG1hY2UgaXQgYSBwcm9wZXIgZnVuY3Rpb24gb3IgYXNzaWduIGl0IHRvIGEgZ2xvYmFsIHRlbXBvcmFyeQotdmFyaWFibGUgZmlyc3QsIGJvdGggb2Ygd2hpY2ggYXJlIHNsb3dlcjsgYW5kIGluIGEgbXVsdGktdGhyZWFkZWQKLWVudmlyb25tZW50IHRoZSBnbG9iYWwgdmFyaWFibGUgdHJpY2sgaXMgbm90IHNhZmUuKQogKi8KIAogLyogRmlyc3QgZGVmaW5lIGEgcGlsZSBvZiBzaW1wbGUgaGVscGVyIG1hY3Jvcywgb25lIHNldCBwZXIgc3BlY2lhbApAQCAtNzA0LDcgKzY5MSw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeV9OZWdhdGl2ZVJlZmNvdW50KGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0R1bW15KHZvaWQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXkodm9pZCk7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeV9HZXRSZWZUb3RhbCh2b2lkKTsKICNkZWZpbmUgX1B5X0lOQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsKysKICNkZWZpbmUgX1B5X0RFQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsLS0KQEAgLTc2NiwxNSArNzUyLDE2IEBACiAKICNkZWZpbmUgUHlfSU5DUkVGKG9wKSAoICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfUHlfSU5DX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAoKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250KyspCisgICAgKChQeU9iamVjdCAqKShvcCkpLT5vYl9yZWZjbnQrKykKIAogI2RlZmluZSBQeV9ERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV9kZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICAgXAogICAgICAgICBpZiAoX1B5X0RFQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCi0gICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLShfcHlfZGVjcmVmX3RtcCktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKF9weV9kZWNyZWZfdG1wKSAgICAgICAgICAgIFwKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfRGVhbGxvYygoUHlPYmplY3QgKikob3ApKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9QeV9EZWFsbG9jKF9weV9kZWNyZWZfdG1wKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAvKiBTYWZlbHkgZGVjcmVmIGBvcGAgYW5kIHNldCBgb3BgIHRvIE5VTEwsIGVzcGVjaWFsbHkgdXNlZnVsIGluIHRwX2NsZWFyCkBAIC04MTMsMTYgKzgwMCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li45YTI3ZWMzIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICh2IDw8IF9QeUdDX1JFRlNfU0hJRlQpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggMDU0YjllYi4uZTZjOThlNCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgkzCi0jZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9GSU5BTAotI2RlZmluZSBQWV9SRUxFQVNFX1NFUklBTAkwCisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTAKKyNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0JFVEEKKyNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJMQogCiAvKiBWZXJzaW9uIGFzIGEgc3RyaW5nICovCi0jZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuMy4zKyIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy40LjBiMSIKIC8qLS1lbmQgY29uc3RhbnRzLS0qLwogCiAvKiBWZXJzaW9uIGFzIGEgc2luZ2xlIDQtYnl0ZSBoZXggbnVtYmVyLCBlLmcuIDB4MDEwNTAyQjIgPT0gMS41LjJiMi4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlkZWJ1Zy5oIGIvSW5jbHVkZS9weWRlYnVnLmgKaW5kZXggOTdjMmY4Yy4uOGZlOTgxOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWRlYnVnLmgKKysrIGIvSW5jbHVkZS9weWRlYnVnLmgKQEAgLTIwLDYgKzIwLDcgQEAKIFB5QVBJX0RBVEEoaW50KSBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5OwogUHlBUElfREFUQShpbnQpIFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnOworUHlBUElfREFUQShpbnQpIFB5X0lzb2xhdGVkRmxhZzsKIAogLyogdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGVudigpIHRoYXQgcGF5cyBhdHRlbnRpb24gdG8KICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZy4gIEl0IHNob3VsZCBiZSB1c2VkIGZvciBnZXR0aW5nIHZhcmlhYmxlcyBsaWtlCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTM4NTEyMy4uNmE4ZTBlOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtNzUsNiArNzUsNyBAQAogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCiAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKICAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KQEAgLTI4NCw2ICsyODUsMjggQEAKICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqKTsKIAorLyogSW4gZXhjZXB0aW9ucy5jICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBIZWxwZXIgdGhhdCBhdHRlbXB0cyB0byByZXBsYWNlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiB3aXRoIG9uZSBvZiB0aGUKKyAqIHNhbWUgdHlwZSBidXQgd2l0aCBhIHByZWZpeCBhZGRlZCB0byB0aGUgZXhjZXB0aW9uIHRleHQuIFRoZSByZXN1bHRpbmcKKyAqIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbiBsb29rcyBsaWtlOgorICoKKyAqICAgICBwcmVmaXggKGV4Y190eXBlOiBvcmlnaW5hbF9leGNfc3RyKQorICoKKyAqIE9ubHkgc29tZSBleGNlcHRpb25zIGNhbiBiZSBzYWZlbHkgcmVwbGFjZWQuIElmIHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzCisgKiBpdCBpc24ndCBzYWZlIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50LCBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICogdW5tb2RpZmllZCBleGNlcHRpb24gaW4gcGxhY2UuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKAorICAgIGNvbnN0IGNoYXIgKnByZWZpeF9mb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCisgICAgLi4uCisgICAgKTsKKyNlbmRpZgorCisKIC8qIEluIHNpZ2NoZWNrLmMgb3Igc2lnbmFsbW9kdWxlLmMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9DaGVja1NpZ25hbHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldEludGVycnVwdCh2b2lkKTsKQEAgLTMwMSw5ICszMjQsMTYgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubywKICAgICBpbnQgY29sX29mZnNldCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vLAorICAgIGludCBjb2xfb2Zmc2V0KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHQoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBsaW5lbm8pOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdCgKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubyk7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IHVuaWNvZGUKICAgIGV4Y2VwdGlvbnMgZnJvbSBDICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5aGFzaC5oIGIvSW5jbHVkZS9weWhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M5MjgxCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWhhc2guaApAQCAtMCwwICsxLDE0NyBAQAorI2lmbmRlZiBQeV9IQVNIX0gKKworI2RlZmluZSBQeV9IQVNIX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSGVscGVycyBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaERvdWJsZShkb3VibGUpOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoUG9pbnRlcih2b2lkKik7CitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkKiwgUHlfc3NpemVfdCk7CisjZW5kaWYKKworLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCisjZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KKworLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgorICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgorICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KKworI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAorIyAgZGVmaW5lIF9QeUhBU0hfQklUUyA2MQorI2Vsc2UKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgMzEKKyNlbmRpZgorCisjZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKKyNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5CisjZGVmaW5lIF9QeUhBU0hfTkFOIDAKKyNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgorCisKKy8qIGhhc2ggc2VjcmV0CisgKgorICogbWVtb3J5IGxheW91dCBvbiA2NCBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMgLS0gdW5zaWduZWQgY2hhclsyNF0KKyAqICAgcHBwcHBwcHAgc3Nzc3Nzc3MgLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBzc3Nzc3NzcyAgZGpieDMzYSAtLSAxNiBieXRlcyBwYWRkaW5nICsgb25lIFB5X2hhc2hfdAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBlZWVlZWVlZSAgcHlleHBhdCBYTUwgaGFzaCBzYWx0CisgKgorICogbWVtb3J5IGxheW91dCBvbiAzMiBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMKKyAqICAgcHBwcHNzc3MgLi4uLi4uLi4gLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVCAoKikKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzcy4uLi4gIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZS4uLi4gIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqICgqKSBUaGUgc2lwaGFzaCBtZW1iZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gMzIgYml0IHBsYXRmb3JtcyB3aXRob3V0CisgKiAgICAgYW4gdW5zaWduZWQgaW50NjQgZGF0YSB0eXBlLgorICovCit0eXBlZGVmIHVuaW9uIHsKKyAgICAvKiBlbnN1cmUgMjQgYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVjWzI0XTsKKyAgICAvKiB0d28gUHlfaGFzaF90IGZvciBGTlYgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBQeV9oYXNoX3QgcHJlZml4OworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZm52OworI2lmZGVmIFBZX1VJTlQ2NF9UCisgICAgLyogdHdvIHVpbnQ2NCBmb3IgU2lwSGFzaDI0ICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUFlfVUlOVDY0X1QgazA7CisgICAgICAgIFBZX1VJTlQ2NF9UIGsxOworICAgIH0gc2lwaGFzaDsKKyNlbmRpZgorICAgIC8qIGEgZGlmZmVyZW50ICghKSBQeV9oYXNoX3QgZm9yIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24gKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZGpieDMzYTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3QgaGFzaHNhbHQ7CisgICAgfSBleHBhdDsKK30gX1B5X0hhc2hTZWNyZXRfdDsKK1B5QVBJX0RBVEEoX1B5X0hhc2hTZWNyZXRfdCkgX1B5X0hhc2hTZWNyZXQ7CisKKyNpZmRlZiBQeV9ERUJVRworUHlBUElfREFUQShpbnQpIF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkOworI2VuZGlmCisKKworLyogaGFzaCBmdW5jdGlvbiBkZWZpbml0aW9uICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfaGFzaF90ICgqY29uc3QgaGFzaCkoY29uc3Qgdm9pZCAqLCBQeV9zc2l6ZV90KTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGludCBoYXNoX2JpdHM7CisgICAgY29uc3QgaW50IHNlZWRfYml0czsKK30gUHlIYXNoX0Z1bmNEZWY7CisKK1B5QVBJX0ZVTkMoUHlIYXNoX0Z1bmNEZWYqKSBQeUhhc2hfR2V0RnVuY0RlZih2b2lkKTsKKyNlbmRpZgorCisKKy8qIGN1dG9mZiBmb3Igc21hbGwgc3RyaW5nIERKQlgzM0Egb3B0aW1pemF0aW9uIGluIHJhbmdlIFsxLCBjdXRvZmYpLgorICoKKyAqIEFib3V0IDUwJSBvZiB0aGUgc3RyaW5ncyBpbiBhIHR5cGljYWwgUHl0aG9uIGFwcGxpY2F0aW9uIGFyZSBzbWFsbGVyIHRoYW4KKyAqIDYgdG8gNyBjaGFycy4gSG93ZXZlciBESkJYMzNBIGlzIHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb24gYXR0YWNrcy4KKyAqIE5FVkVSIHVzZSBESkJYMzNBIGZvciBsb25nIHN0cmluZ3MhCisgKgorICogQSBQeV9IQVNIX0NVVE9GRiBvZiAwIGRpc2FibGVzIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24uIDMyIGJpdCBwbGF0Zm9ybXMKKyAqIHNob3VsZCB1c2UgYSBzbWFsbGVyIGN1dG9mZiBiZWNhdXNlIGl0IGlzIGVhc2llciB0byBjcmVhdGUgY29sbGlkaW5nCisgKiBzdHJpbmdzLiBBIGN1dG9mZiBvZiA3IG9uIDY0Yml0IHBsYXRmb3JtcyBhbmQgNSBvbiAzMmJpdCBwbGF0Zm9ybXMgc2hvdWxkCisgKiBwcm92aWRlIGEgZGVjZW50IHNhZmV0eSBtYXJnaW4uCisgKi8KKyNpZm5kZWYgUHlfSEFTSF9DVVRPRkYKKyMgIGRlZmluZSBQeV9IQVNIX0NVVE9GRiAwCisjZWxpZiAoUHlfSEFTSF9DVVRPRkYgPiA3IHx8IFB5X0hBU0hfQ1VUT0ZGIDwgMCkKKyMgIGVycm9yIFB5X0hBU0hfQ1VUT0ZGIG11c3QgaW4gcmFuZ2UgMC4uLjcuCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKworCisvKiBoYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24KKyAqCisgKiBUaGUgdmFsdWVzIGZvciBQeV9IQVNIX1NJUEhBU0gyNCBhbmQgUHlfSEFTSF9GTlYgYXJlIGhhcmQtY29kZWQgaW4gdGhlCisgKiBjb25maWd1cmUgc2NyaXB0LgorICoKKyAqIC0gRk5WIGlzIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zIGFuZCBhcmNoaXRlY3R1cmVzLgorICogLSBTSVBIQVNIMjQgb25seSB3b3JrcyBvbiBwbGFmb3JtcyB0aGF0IHByb3ZpZGUgUFlfVUlOVDY0X1QgYW5kIGRvZXNuJ3QKKyAqICAgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBmb3IgaW50ZWdlcnMuCisgKiAtIFdpdGggRVhURVJOQUwgZW1iZWRkZXJzIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHdpdGg6OgorICoKKyAqICAgICBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHsuLi59OworICoKKyAqIFhYWDogRmlndXJlIG91dCBfX2RlY2xzcGVjKCkgZm9yIGV4dGVybiBQeUhhc2hfRnVuY0RlZi4KKyAqLworI2RlZmluZSBQeV9IQVNIX0VYVEVSTkFMIDAKKyNkZWZpbmUgUHlfSEFTSF9TSVBIQVNIMjQgMQorI2RlZmluZSBQeV9IQVNIX0ZOViAyCisKKyNpZm5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKyMgIGlmIChkZWZpbmVkKFBZX1VJTlQ2NF9UKSAmJiBkZWZpbmVkKFBZX1VJTlQzMl9UKSBcCisgICAgICAgJiYgIWRlZmluZWQoSEFWRV9BTElHTkVEX1JFUVVJUkVEKSkKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfU0lQSEFTSDI0CisjICBlbHNlCisjICAgIGRlZmluZSBQeV9IQVNIX0FMR09SSVRITSBQeV9IQVNIX0ZOVgorIyAgZW5kaWYgLyogdWludDY0X3QgJiYgdWludDMyX3QgJiYgYWxpZ25lZCAqLworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfSEFTSF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uODNmMTUzNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisKKwogLyogQkVXQVJFOgogCiAgICBFYWNoIGludGVyZmFjZSBleHBvcnRzIGJvdGggZnVuY3Rpb25zIGFuZCBtYWNyb3MuICBFeHRlbnNpb24gbW9kdWxlcyBzaG91bGQKQEAgLTQ5LDIxICs1NCwxNCBAQAogICAgcGVyZm9ybWVkIG9uIGZhaWx1cmUgKG5vIGV4Y2VwdGlvbiBpcyBzZXQsIG5vIHdhcm5pbmcgaXMgcHJpbnRlZCwgZXRjKS4KICovCiAKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX0ZyZWUodm9pZCAqcHRyKTsKIAotLyogU3RhcnRpbmcgZnJvbSBQeXRob24gMS42LCB0aGUgd3JhcHBlcnMgUHlfe01hbGxvYyxSZWFsbG9jLEZyZWV9IGFyZQotICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVGhleSB1c2VkIHRvIGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBmYWlsdXJlLiAqLworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CiAKIC8qIE1hY3Jvcy4gKi8KLSNpZmRlZiBQWU1BTExPQ19ERUJVRwotLyogUmVkaXJlY3QgYWxsIG1lbW9yeSBvcGVyYXRpb25zIHRvIFB5dGhvbidzIGRlYnVnZ2luZyBhbGxvY2F0b3IuICovCi0jZGVmaW5lIFB5TWVtX01BTExPQwkJX1B5TWVtX0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MJCV9QeU1lbV9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlNZW1fRlJFRQkJX1B5TWVtX0RlYnVnRnJlZQotCi0jZWxzZQkvKiAhIFBZTUFMTE9DX0RFQlVHICovCiAKIC8qIFB5TWVtX01BTExPQygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAogICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMKQEAgLTcxLDEzICs2OSw5IEBACiAgICBweW1hbGxvYy4gVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCiAvKiBSZXR1cm5zIE5VTEwgdG8gaW5kaWNhdGUgZXJyb3IgaWYgYSBuZWdhdGl2ZSBzaXplIG9yIHNpemUgbGFyZ2VyIHRoYW4KICAgIFB5X3NzaXplX3QgY2FuIHJlcHJlc2VudCBpcyBzdXBwbGllZC4gIEhlbHBzIHByZXZlbnRzIHNlY3VyaXR5IGhvbGVzLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MobikJCSgoc2l6ZV90KShuKSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggPyBOVUxMIFwKLQkJCQk6IG1hbGxvYygobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYICA/IE5VTEwgXAotCQkJCTogcmVhbGxvYygocCksIChuKSA/IChuKSA6IDEpKQotI2RlZmluZSBQeU1lbV9GUkVFCQlmcmVlCi0KLSNlbmRpZgkvKiBQWU1BTExPQ19ERUJVRyAqLworI2RlZmluZSBQeU1lbV9NQUxMT0MobikgICAgICAgICBQeU1lbV9NYWxsb2MobikKKyNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKSAgICAgUHlNZW1fUmVhbGxvYyhwLCBuKQorI2RlZmluZSBQeU1lbV9GUkVFKHApICAgICAgICAgICBQeU1lbV9GcmVlKHApCiAKIC8qCiAgKiBUeXBlLW9yaWVudGVkIG1lbW9yeSBpbnRlcmZhY2UKQEAgLTExNSw2ICsxMDksNjkgQEAKICNkZWZpbmUgUHlNZW1fRGVsCQlQeU1lbV9GcmVlCiAjZGVmaW5lIFB5TWVtX0RFTAkJUHlNZW1fRlJFRQogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIGVudW0geworICAgIC8qIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9SQVcsCisKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpIGFuZCBQeU1lbV9GcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fTUVNLAorCisgICAgLyogUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX09CSgorfSBQeU1lbUFsbG9jYXRvckRvbWFpbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAzIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpICh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKKworICAgIC8qIGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqcmVhbGxvYykgKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworCisgICAgLyogcmVsZWFzZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqY3R4LCB2b2lkICpwdHIpOworfSBQeU1lbUFsbG9jYXRvcjsKKworLyogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcik7CisKKy8qIFNldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KKworICAgVGhlIG5ldyBhbGxvY2F0b3IgbXVzdCByZXR1cm4gYSBkaXN0aW5jdCBub24tTlVMTCBwb2ludGVyIHdoZW4gcmVxdWVzdGluZworICAgemVybyBieXRlcy4KKworICAgRm9yIHRoZSBQWU1FTV9ET01BSU5fUkFXIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlIHRocmVhZC1zYWZlOiB0aGUgR0lMCisgICBpcyBub3QgaGVsZCB3aGVuIHRoZSBhbGxvY2F0b3IgaXMgY2FsbGVkLgorCisgICBJZiB0aGUgbmV3IGFsbG9jYXRvciBpcyBub3QgYSBob29rIChkb24ndCBjYWxsIHRoZSBwcmV2aW91cyBhbGxvY2F0b3IpLCB0aGUKKyAgIFB5TWVtX1NldHVwRGVidWdIb29rcygpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHJlaW5zdGFsbCB0aGUgZGVidWcgaG9va3MKKyAgIG9uIHRvcCBvbiB0aGUgbmV3IGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXR1cCBob29rcyB0byBkZXRlY3QgYnVncyBpbiB0aGUgZm9sbG93aW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9yCisgICBmdW5jdGlvbnM6CisKKyAgIC0gUHlNZW1fUmF3TWFsbG9jKCksIFB5TWVtX1Jhd1JlYWxsb2MoKSwgUHlNZW1fUmF3RnJlZSgpCisgICAtIFB5TWVtX01hbGxvYygpLCBQeU1lbV9SZWFsbG9jKCksIFB5TWVtX0ZyZWUoKQorICAgLSBQeU9iamVjdF9NYWxsb2MoKSwgUHlPYmplY3RfUmVhbGxvYygpIGFuZCBQeU9iamVjdF9GcmVlKCkKKworICAgTmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB0aGUgYnl0ZSAweENCLCBmcmVlZCBtZW1vcnkgaXMgZmlsbGVkCisgICB3aXRoIHRoZSBieXRlIDB4REIuIEFkZGl0aW9ubmFsIGNoZWNrczoKKworICAgLSBkZXRlY3QgQVBJIHZpb2xhdGlvbnMsIGV4OiBQeU9iamVjdF9GcmVlKCkgY2FsbGVkIG9uIGEgYnVmZmVyIGFsbG9jYXRlZAorICAgICBieSBQeU1lbV9NYWxsb2MoKQorICAgLSBkZXRlY3Qgd3JpdGUgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIChidWZmZXIgdW5kZXJmbG93KQorICAgLSBkZXRlY3Qgd3JpdGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChidWZmZXIgb3ZlcmZsb3cpCisKKyAgIFRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgUHl0aG9uIGlzIG5vdCBjb21waWxlZCBpcyBkZWJ1ZyBtb2RlLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlwb3J0LmggYi9JbmNsdWRlL3B5cG9ydC5oCmluZGV4IGE1ZWRlYTkuLmM3MDYyMTMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlwb3J0LmgKKysrIGIvSW5jbHVkZS9weXBvcnQuaApAQCAtMTQ0LDIzICsxNDQsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCi0jZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KLQotLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgotICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgotICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KLQotI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAotI2RlZmluZSBfUHlIQVNIX0JJVFMgNjEKLSNlbHNlCi0jZGVmaW5lIF9QeUhBU0hfQklUUyAzMQotI2VuZGlmCi0jZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKLSNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5Ci0jZGVmaW5lIF9QeUhBU0hfTkFOIDAKLSNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgotCiAvKiB1aW50cHRyX3QgaXMgdGhlIEM5WCBuYW1lIGZvciBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHN1Y2ggdGhhdCBhCiAgKiBsZWdpdGltYXRlIHZvaWQqIGNhbiBiZSBjYXN0IHRvIHVpbnRwdHJfdCBhbmQgdGhlbiBiYWNrIHRvIHZvaWQqIGFnYWluCiAgKiB3aXRob3V0IGxvc3Mgb2YgaW5mb3JtYXRpb24uICBTaW1pbGFybHkgZm9yIGludHB0cl90LCB3cnQgYSBzaWduZWQKQEAgLTE5OSwxMCArMTgyLDE5IEBACiAjZW5kaWYKIAogLyogUHlfaGFzaF90IGlzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyLiAqLworI2RlZmluZSBTSVpFT0ZfUFlfSEFTSF9UIFNJWkVPRl9TSVpFX1QKIHR5cGVkZWYgUHlfc3NpemVfdCBQeV9oYXNoX3Q7CiAvKiBQeV91aGFzaF90IGlzIHRoZSB1bnNpZ25lZCBlcXVpdmFsZW50IG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtZXJpYyBoYXNoLiAqLworI2RlZmluZSBTSVpFT0ZfUFlfVUhBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIHNpemVfdCBQeV91aGFzaF90OwogCisvKiBPbmx5IHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgbWF5IG5vdCBiZSBQWV9TU0laRV9UX0NMRUFOLiAqLworI2lmZGVmIFBZX1NTSVpFX1RfQ0xFQU4KK3R5cGVkZWYgUHlfc3NpemVfdCBQeV9zc2l6ZV9jbGVhbl90OworI2Vsc2UKK3R5cGVkZWYgaW50IFB5X3NzaXplX2NsZWFuX3Q7CisjZW5kaWYKKwogLyogTGFyZ2VzdCBwb3NzaWJsZSB2YWx1ZSBvZiBzaXplX3QuCiAgICBTSVpFX01BWCBpcyBwYXJ0IG9mIEM5OSwgc28gaXQgbWlnaHQgYmUgZGVmaW5lZCBvbiBzb21lCiAgICBwbGF0Zm9ybXMuIElmIGl0IGlzIG5vdCBkZWZpbmVkLCAoc2l6ZV90KS0xIGlzIGEgcG9ydGFibGUKQEAgLTIxOSwxMCArMjExLDYgQEAKIC8qIFNtYWxsZXN0IG5lZ2F0aXZlIHZhbHVlIG9mIHR5cGUgUHlfc3NpemVfdC4gKi8KICNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gKC1QWV9TU0laRV9UX01BWC0xKQogCi0jaWYgU0laRU9GX1BJRF9UID4gU0laRU9GX0xPTkcKLSMgICBlcnJvciAiUHl0aG9uIGRvZXNuJ3Qgc3VwcG9ydCBzaXplb2YocGlkX3QpID4gc2l6ZW9mKGxvbmcpIgotI2VuZGlmCi0KIC8qIFBZX0ZPUk1BVF9TSVpFX1QgaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBtb2RpZmllciBmb3IgdXNlIGluIGEgcHJpbnRmCiAgKiBmb3JtYXQgdG8gY29udmVydCBhbiBhcmd1bWVudCB3aXRoIHRoZSB3aWR0aCBvZiBhIHNpemVfdCBvciBQeV9zc2l6ZV90LgogICogQzk5IGludHJvZHVjZWQgInoiIGZvciB0aGlzIHB1cnBvc2UsIGJ1dCBub3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IHRoYXQ7CkBAIC0yNjcsNyArMjU1LDcgQEAKICAqLwogI2lmZGVmIEhBVkVfTE9OR19MT05HCiAjICAgaWZuZGVmIFBZX0ZPUk1BVF9MT05HX0xPTkcKLSMgICAgICAgaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorIyAgICAgICBpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgICAgICBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyAiSTY0IgogIyAgICAgICBlbHNlCiAjICAgICAgICAgICBlcnJvciAiVGhpcyBwbGF0Zm9ybSdzIHB5Y29uZmlnLmggbmVlZHMgdG8gZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkciCkBAIC0zOTIsMTcgKzM4MCwyMCBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX0gpCiAjaW5jbHVkZSA8c3RhdC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCisjaWZuZGVmIFNfSUZNVAogLyogVmlzdWFsQWdlIEMvQysrIEZhaWxlZCB0byBEZWZpbmUgTW91bnRUeXBlIEZpZWxkIGluIHN5cy9zdGF0LmggKi8KLSNkZWZpbmUgU19JRk1UIChTX0lGRElSfFNfSUZDSFJ8U19JRlJFRykKKyNkZWZpbmUgU19JRk1UIDAxNzAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZMTksKKy8qIFdpbmRvd3MgZG9lc24ndCBkZWZpbmUgU19JRkxOSyBidXQgcG9zaXhtb2R1bGUuYyBtYXBzCisgKiBJT19SRVBBUlNFX1RBR19TWU1MSU5LIHRvIFNfSUZMTksgKi8KKyMgIGRlZmluZSBTX0lGTE5LIDAxMjAwMDAKICNlbmRpZgogCiAjaWZuZGVmIFNfSVNSRUcKQEAgLTQxMyw2ICs0MDQsOSBAQAogI2RlZmluZSBTX0lTRElSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGRElSKQogI2VuZGlmCiAKKyNpZm5kZWYgU19JU0NIUgorI2RlZmluZSBTX0lTQ0hSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogLyogTW92ZSB0aGlzIGRvd24gaGVyZSBzaW5jZSBzb21lIEMrKyAjaW5jbHVkZSdzIGRvbid0IGxpa2UgdG8gYmUgaW5jbHVkZWQKQEAgLTgzNSwxNSArODI5LDYgQEAKICNlbmRpZgogCiAvKgotICogQWRkIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0IHdoZXJlIGF2YWlsYWJsZS4KLSAqLwotI2lmZGVmIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFCi0jZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChmdW5jLHAxLHAyKSkpCi0jZWxzZQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKQotI2VuZGlmCi0KLS8qCiAgKiBTcGVjaWZ5IGFsaWdubWVudCBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0LgogICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwpAQCAtODgxLDQgKzg2NiwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIENvbnZlbmllbnQgbWFjcm9zIHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBwbGF0Zm9ybS4gV09SRFNfQklHRU5ESUFOIGlzCisgKiBkZXRlY3RlZCBieSBjb25maWd1cmUgYW5kIGRlZmluZWQgaW4gcHljb25maWcuaC4gVGhlIGNvZGUgaW4gcHljb25maWcuaAorICogYWxzbyB0YWtlcyBjYXJlIG9mIEFwcGxlJ3MgdW5pdmVyc2FsIGJ1aWxkcy4KKyAqLworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMQorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDAKKyNlbHNlCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMAorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDEKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlzdGF0ZS5oIGIvSW5jbHVkZS9weXN0YXRlLmgKaW5kZXggMjAxN2IwMi4uMDZhZjgwOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXN0YXRlLmgKKysrIGIvSW5jbHVkZS9weXN0YXRlLmgKQEAgLTY5LDYgKzY5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF90cyB7CiAgICAgLyogU2VlIFB5dGhvbi9jZXZhbC5jIGZvciBjb21tZW50cyBleHBsYWluaW5nIG1vc3QgZmllbGRzICovCiAKKyAgICBzdHJ1Y3QgX3RzICpwcmV2OwogICAgIHN0cnVjdCBfdHMgKm5leHQ7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAKQEAgLTk5LDE2ICsxMDAsNiBAQAogCiAgICAgUHlPYmplY3QgKmRpY3Q7ICAvKiBTdG9yZXMgcGVyLXRocmVhZCBzdGF0ZSAqLwogCi0gICAgLyogWFhYIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBhbnltb3JlICh0aGUgY29tbWVudCBiZWxvdyBpcyBvYnNvbGV0ZSkKLSAgICAgICA9PiBkZXByZWNhdGUgb3IgcmVtb3ZlPyAqLwotICAgIC8qIHRpY2tfY291bnRlciBpcyBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgY2hlY2tfaW50ZXJ2YWwgdGlja2VyCi0gICAgICogcmVhY2hlcyB6ZXJvLiBUaGUgcHVycG9zZSBpcyB0byBnaXZlIGEgdXNlZnVsIG1lYXN1cmUgb2YgdGhlIG51bWJlcgotICAgICAqIG9mIGludGVycHJldGVkIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbiBhIGdpdmVuIHRocmVhZC4gIFRoaXMKLSAgICAgKiBleHRyZW1lbHkgbGlnaHR3ZWlnaHQgc3RhdGlzdGljIGNvbGxlY3RvciBtYXkgYmUgb2YgaW50ZXJlc3QgdG8KLSAgICAgKiBwcm9maWxlcnMgKGxpa2UgcHN5Y28uaml0KCkpLCBhbHRob3VnaCBub3RoaW5nIGluIHRoZSBjb3JlIHVzZXMgaXQuCi0gICAgICovCi0gICAgaW50IHRpY2tfY291bnRlcjsKLQogICAgIGludCBnaWxzdGF0ZV9jb3VudGVyOwogCiAgICAgUHlPYmplY3QgKmFzeW5jX2V4YzsgLyogQXN5bmNocm9ub3VzIGV4Y2VwdGlvbiB0byByYWlzZSAqLwpAQCAtMTE3LDYgKzEwOCwzMiBAQAogICAgIGludCB0cmFzaF9kZWxldGVfbmVzdGluZzsKICAgICBQeU9iamVjdCAqdHJhc2hfZGVsZXRlX2xhdGVyOwogCisgICAgLyogQ2FsbGVkIHdoZW4gYSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZCBub3JtYWxseSwgYnV0IG5vdCB3aGVuIGl0CisgICAgICogaXMgZGVzdHJveWVkIGFmdGVyIGZvcmsoKS4KKyAgICAgKiBQYWluOiAgdG8gcHJldmVudCByYXJlIGJ1dCBmYXRhbCBzaHV0ZG93biBlcnJvcnMgKGlzc3VlIDE4ODA4KSwKKyAgICAgKiBUaHJlYWQuam9pbigpIG11c3Qgd2FpdCBmb3IgdGhlIGpvaW4nZWQgdGhyZWFkJ3MgdHN0YXRlIHRvIGJlIHVubGlua2VkCisgICAgICogZnJvbSB0aGUgdHN0YXRlIGNoYWluLiAgVGhhdCBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYSB0aHJlYWQncyBsaWZlLAorICAgICAqIGluIHB5c3RhdGUuYy4KKyAgICAgKiBUaGUgb2J2aW91cyB3YXkgZG9lc24ndCBxdWl0ZSB3b3JrOiAgY3JlYXRlIGEgbG9jayB3aGljaCB0aGUgdHN0YXRlCisgICAgICogdW5saW5raW5nIGNvZGUgcmVsZWFzZXMsIGFuZCBoYXZlIFRocmVhZC5qb2luKCkgd2FpdCB0byBhY3F1aXJlIHRoYXQKKyAgICAgKiBsb2NrLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfYXJlXyBhdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlOgorICAgICAqIGlmIHRoZSB0aHJlYWQgaG9sZHMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBsb2NrLCBkZWNyZWYnaW5nIHRoZQorICAgICAqIGxvY2sgd2lsbCBkZWxldGUgdGhlIGxvY2ssIGFuZCB0aGF0IG1heSB0cmlnZ2VyIGFyYml0cmFyeSBQeXRob24gY29kZQorICAgICAqIGlmIHRoZXJlJ3MgYSB3ZWFrcmVmLCB3aXRoIGEgY2FsbGJhY2ssIHRvIHRoZSBsb2NrLiAgQnV0IGJ5IHRoaXMgdGltZQorICAgICAqIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgaXMgYWxyZWFkeSBOVUxMLCBzbyBvbmx5IHRoZSBzaW1wbGVzdCBvZiBDIGNvZGUKKyAgICAgKiBjYW4gYmUgYWxsb3dlZCB0byBydW4gKGluIHBhcnRpY3VsYXIgaXQgbXVzdCBub3QgYmUgcG9zc2libGUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwpLgorICAgICAqIFNvIGluc3RlYWQgb2YgaG9sZGluZyB0aGUgbG9jayBkaXJlY3RseSwgdGhlIHRzdGF0ZSBob2xkcyBhIHdlYWtyZWYgdG8KKyAgICAgKiB0aGUgbG9jazogIHRoYXQncyB0aGUgdmFsdWUgb2Ygb25fZGVsZXRlX2RhdGEgYmVsb3cuICBEZWNyZWYnaW5nIGEKKyAgICAgKiB3ZWFrcmVmIGlzIGhhcm1sZXNzLgorICAgICAqIG9uX2RlbGV0ZSBwb2ludHMgdG8gX3RocmVhZG1vZHVsZS5jJ3Mgc3RhdGljIHJlbGVhc2Vfc2VudGluZWwoKSBmdW5jdGlvbi4KKyAgICAgKiBBZnRlciB0aGUgdHN0YXRlIGlzIHVubGlua2VkLCByZWxlYXNlX3NlbnRpbmVsIGlzIGNhbGxlZCB3aXRoIHRoZQorICAgICAqIHdlYWtyZWYtdG8tbG9jayAob25fZGVsZXRlX2RhdGEpIGFyZ3VtZW50LCBhbmQgcmVsZWFzZV9zZW50aW5lbCByZWxlYXNlcworICAgICAqIHRoZSBpbmRpcmVjdGx5IGhlbGQgbG9jay4KKyAgICAgKi8KKyAgICB2b2lkICgqb25fZGVsZXRlKSh2b2lkICopOworICAgIHZvaWQgKm9uX2RlbGV0ZV9kYXRhOworCiAgICAgLyogWFhYIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgYWxzbyBiZSBoZXJlICovCiAKIH0gUHlUaHJlYWRTdGF0ZTsKQEAgLTEzMywxMiArMTUwLDE2IEBACiBQeUFQSV9GVU5DKGludCkgUHlTdGF0ZV9SZW1vdmVNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0YXRlX0ZpbmRNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VGhyZWFkU3RhdGVfSW5pdChQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlKFB5VGhyZWFkU3RhdGUgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpOwogI2lmZGVmIFdJVEhfVEhSRUFECiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0lMU3RhdGVfUmVpbml0KHZvaWQpOwpAQCAtMjEyLDYgKzIzMywxMSBAQAogKi8KIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSh2b2lkKTsKIAorLyogSGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24gLSByZXR1cm4gMSBpZiB0aGUgY3VycmVudCB0aHJlYWQKKyAqIGN1cnJlbnRseSBob2xkcyB0aGUgR0lMLCAwIG90aGVyd2lzZQorICovCitQeUFQSV9GVU5DKGludCkgUHlHSUxTdGF0ZV9DaGVjayh2b2lkKTsKKwogI2VuZGlmICAgLyogI2lmZGVmIFdJVEhfVEhSRUFEICovCiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgIFJldHVybnMgYSBkaWN0IG1hcHBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IGU4YTU4MmQuLmMzNjQ5NDcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtMjgsNiArMjgsMTQgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICopOwogUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFB5dGhvbkhvbWUodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIE9ubHkgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCB0aGUgaW50ZXJwcmV0ZXIgYW5kIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlbmNvZGluZyBkZXRlcm1pbmF0aW9uIG1lY2hhbmlzbQorICovCitQeUFQSV9GVU5DKGludCkgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplRXgoaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTU1LDYgKzYzLDEwIEBACiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncygKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC02Niw2ICs3OCwxMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeUFyZW5hICphcmVuYSk7CiBQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTc2LDYgKzk0LDE2IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgKmVycmNvZGUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgY29uc3QgY2hhciogZW5jLAorICAgIGludCBzdGFydCwKKyAgICBjaGFyICpwczEsCisgICAgY2hhciAqcHMyLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50ICplcnJjb2RlLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKICNlbmRpZgogCiAjaWZuZGVmIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCkBAIC0xMTcsMTEgKzE0NSwyMCBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCBvcHRpbWl6ZSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmcoCiAgICAgY29uc3QgY2hhciAqc3RyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgc3RhcnQpOworUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQpOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1ByaW50KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludEV4KGludCk7CkBAIC0xOTcsNyArMjM0LDcgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5RXhjX0luaXQoUHlPYmplY3QgKiBibHRpbm1vZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUltcG9ydEhvb2tzX0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgX1B5RnJhbWVfSW5pdCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlGbG9hdF9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZUFycmF5X0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9Jbml0KHZvaWQpOwogI2VuZGlmCkBAIC0yMTcsMTkgKzI1NCwyMSBAQAogUHlBUElfRlVOQyh2b2lkKSBQeUJ5dGVBcnJheV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUZsb2F0X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5T1NfRmluaUludGVycnVwdHModm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0R1bXBTaHV0ZG93blN0YXRzKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVNsaWNlX0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVR5cGVfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0Zpbmkodm9pZCk7CiAKIFB5QVBJX0RBVEEoUHlUaHJlYWRTdGF0ZSAqKSBfUHlfRmluYWxpemluZzsKICNlbmRpZgogCiAvKiBTdHVmZiB3aXRoIG5vIHByb3BlciBob21lICh5ZXQpICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogI2VuZGlmCiBQeUFQSV9EQVRBKGludCkgKCpQeU9TX0lucHV0SG9vaykodm9pZCk7Ci1QeUFQSV9EQVRBKGNoYXIpICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0RBVEEoUHlUaHJlYWRTdGF0ZSopIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NldG9iamVjdC5oIGIvSW5jbHVkZS9zZXRvYmplY3QuaAppbmRleCBhMTQ4NzRiLi5hZTNmNTU2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3NldG9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKQEAgLTIzLDggKzIzLDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgdGhlIGtleS4gKi8KLSAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeU9iamVjdCAqa2V5OworICAgIFB5X2hhc2hfdCBoYXNoOwogfSBzZXRlbnRyeTsKIAogCkBAIC01MSw5ICs1MSw5IEBACiAgICAgICovCiAgICAgc2V0ZW50cnkgKnRhYmxlOwogICAgIHNldGVudHJ5ICooKmxvb2t1cCkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7CisgICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLwogICAgIHNldGVudHJ5IHNtYWxsdGFibGVbUHlTZXRfTUlOU0laRV07CiAKLSAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7ICAgICAgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH07CiAjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KQEAgLTYxLDYgKzYxLDEwIEBACiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUZyb3plblNldF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0SXRlcl9UeXBlOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfREFUQShQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXk7CisjZW5kaWYKKwogCiAvKiBJbnZhcmlhbnRzIGZvciBmcm96ZW5zZXRzOgogICogICAgIGRhdGEgaXMgaW1tdXRhYmxlLgpAQCAtMTAxLDcgKzEwNSw2IEBACiBQeUFQSV9GVU5DKGludCkgX1B5U2V0X1VwZGF0ZShQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqaXRlcmFibGUpOwogCiBQeUFQSV9GVU5DKGludCkgUHlTZXRfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2xpY2VvYmplY3QuaCBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaAppbmRleCA4YmVjMTc5Li5mN2VlOTBjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zbGljZW9iamVjdC5oCkBAIC0zNCw2ICszNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIHN0ZXApOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTbGljZV9Gcm9tSW5kaWNlcyhQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IHN0b3ApOworUHlBUElfRlVOQyhpbnQpIF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKFB5U2xpY2VPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0X3B0ciwgUHlPYmplY3QgKipzdG9wX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RlcF9wdHIpOwogI2VuZGlmCiBQeUFQSV9GVU5DKGludCkgUHlTbGljZV9HZXRJbmRpY2VzKFB5T2JqZWN0ICpyLCBQeV9zc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqc3RvcCwgUHlfc3NpemVfdCAqc3RlcCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N0cnVjdHNlcS5oIGIvSW5jbHVkZS9zdHJ1Y3RzZXEuaAppbmRleCAzMGM1MmFjLi5hZjIyNzE2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N0cnVjdHNlcS5oCisrKyBiL0luY2x1ZGUvc3RydWN0c2VxLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKICNlbmRpZgogUHlBUElfRlVOQyhQeVR5cGVPYmplY3QqKSBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUoUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeW10YWJsZS5oIGIvSW5jbHVkZS9zeW10YWJsZS5oCmluZGV4IDZlZDNhMmIuLjFjZmQ4ODQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3ltdGFibGUuaAorKysgYi9JbmNsdWRlL3N5bXRhYmxlLmgKQEAgLTE2LDcgKzE2LDcgQEAKIHN0cnVjdCBfc3ltdGFibGVfZW50cnk7CiAKIHN0cnVjdCBzeW10YWJsZSB7Ci0gICAgY29uc3QgY2hhciAqc3RfZmlsZW5hbWU7ICAgICAgICAvKiBuYW1lIG9mIGZpbGUgYmVpbmcgY29tcGlsZWQsCisgICAgUHlPYmplY3QgKnN0X2ZpbGVuYW1lOyAgICAgICAgICAvKiBuYW1lIG9mIGZpbGUgYmVpbmcgY29tcGlsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5ICpzdF9jdXI7IC8qIGN1cnJlbnQgc3ltYm9sIHRhYmxlIGVudHJ5ICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfdG9wOyAvKiBzeW1ib2wgdGFibGUgZW50cnkgZm9yIG1vZHVsZSAqLwpAQCAtNDEsNiArNDEsNyBAQAogICAgIFB5T2JqZWN0ICpzdGVfbmFtZTsgICAgICAvKiBzdHJpbmc6IG5hbWUgb2YgY3VycmVudCBibG9jayAqLwogICAgIFB5T2JqZWN0ICpzdGVfdmFybmFtZXM7ICAvKiBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMgKi8KICAgICBQeU9iamVjdCAqc3RlX2NoaWxkcmVuOyAgLyogbGlzdCBvZiBjaGlsZCBibG9ja3MgKi8KKyAgICBQeU9iamVjdCAqc3RlX2RpcmVjdGl2ZXM7LyogbG9jYXRpb25zIG9mIGdsb2JhbCBhbmQgbm9ubG9jYWwgc3RhdGVtZW50cyAqLwogICAgIF9QeV9ibG9ja190eSBzdGVfdHlwZTsgICAvKiBtb2R1bGUsIGNsYXNzLCBvciBmdW5jdGlvbiAqLwogICAgIGludCBzdGVfdW5vcHRpbWl6ZWQ7ICAgICAvKiBmYWxzZSBpZiBuYW1lc3BhY2UgaXMgb3B0aW1pemVkICovCiAgICAgaW50IHN0ZV9uZXN0ZWQ7ICAgICAgLyogdHJ1ZSBpZiBibG9jayBpcyBuZXN0ZWQgKi8KQEAgLTUyLDYgKzUzLDkgQEAKICAgICB1bnNpZ25lZCBzdGVfdmFya2V5d29yZHMgOiAxOyAvKiB0cnVlIGlmIGJsb2NrIGhhcyB2YXJrZXl3b3JkcyAqLwogICAgIHVuc2lnbmVkIHN0ZV9yZXR1cm5zX3ZhbHVlIDogMTsgIC8qIHRydWUgaWYgbmFtZXNwYWNlIHVzZXMgcmV0dXJuIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcmd1bWVudCAqLworICAgIHVuc2lnbmVkIHN0ZV9uZWVkc19jbGFzc19jbG9zdXJlIDogMTsgLyogZm9yIGNsYXNzIHNjb3BlcywgdHJ1ZSBpZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zdXJlIG92ZXIgX19jbGFzc19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgY3JlYXRlZCAqLwogICAgIGludCBzdGVfbGluZW5vOyAgICAgICAgICAvKiBmaXJzdCBsaW5lIG9mIGJsb2NrICovCiAgICAgaW50IHN0ZV9jb2xfb2Zmc2V0OyAgICAgIC8qIG9mZnNldCBvZiBmaXJzdCBsaW5lIG9mIGJsb2NrICovCiAgICAgaW50IHN0ZV9vcHRfbGluZW5vOyAgICAgIC8qIGxpbmVubyBvZiBsYXN0IGV4ZWMgb3IgaW1wb3J0ICogKi8KQEAgLTcwLDYgKzc0LDEwIEBACiAgICAgbW9kX3R5IG1vZCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKTsKK1B5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5U3ltdGFibGVfQnVpbGRPYmplY3QoCisgICAgbW9kX3R5IG1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKTsKIFB5QVBJX0ZVTkMoUHlTVEVudHJ5T2JqZWN0ICopIFB5U3ltdGFibGVfTG9va3VwKHN0cnVjdCBzeW10YWJsZSAqLCB2b2lkICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3ltdGFibGVfRnJlZShzdHJ1Y3Qgc3ltdGFibGUgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5c21vZHVsZS5oIGIvSW5jbHVkZS9zeXNtb2R1bGUuaAppbmRleCAwY2FiZjZmLi45MjVjMmEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5c21vZHVsZS5oCisrKyBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKQEAgLTgsNyArOCwxMCBAQAogI2VuZGlmCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKik7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndihpbnQsIHdjaGFyX3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRBcmd2RXgoaW50LCB3Y2hhcl90ICoqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3Rva2VuLmggYi9JbmNsdWRlL3Rva2VuLmgKaW5kZXggZjdmNjUwNC4uOTA1MDIyYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS90b2tlbi5oCisrKyBiL0luY2x1ZGUvdG9rZW4uaApAQCAtNzUsNyArNzUsNyBAQAogI2RlZmluZSBJU0VPRih4KQkJKCh4KSA9PSBFTkRNQVJLRVIpCiAKIAotUHlBUElfREFUQShjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCitQeUFQSV9EQVRBKGNvbnN0IGNoYXIgKikgX1B5UGFyc2VyX1Rva2VuTmFtZXNbXTsgLyogVG9rZW4gbmFtZXMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX09uZUNoYXIoaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX1R3b0NoYXJzKGludCwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX1RocmVlQ2hhcnMoaW50LCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaCBiL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCmluZGV4IGE4ZjViNWQuLmI2ZDMzMWIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCkBAIC0xODAsOSArMTgwLDkgQEAKICAgICB9IHdoaWxlICgwKQogCiAvKiBtYWNyb3MgdG8gd29yayB3aXRoIHN1cnJvZ2F0ZXMgKi8KLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gY2ggJiYgY2ggPD0gMHhERkZGKQotI2RlZmluZSBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REJGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REZGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSAoY2gpICYmIChjaCkgPD0gMHhEQkZGKQorI2RlZmluZSBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUoY2gpICgweERDMDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REZGRikKIC8qIEpvaW4gdHdvIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCByZXR1cm4gYSBzaW5nbGUgUHlfVUNTNCB2YWx1ZS4gKi8KICNkZWZpbmUgUHlfVU5JQ09ERV9KT0lOX1NVUlJPR0FURVMoaGlnaCwgbG93KSAgXAogICAgICgoKCgoUHlfVUNTNCkoaGlnaCkgJiAweDAzRkYpIDw8IDEwKSB8ICAgICAgXApAQCAtODU5LDcgKzg1OSw3IEBACiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgICAgICAgICAgLyogT2JqZWN0ICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKQEAgLTg3OCw3ICs4NzgsNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoCkBAIC04OTgsMjIgKzg5OCwyOCBAQAogICAgIFB5X1VDUzQgbWF4Y2hhcjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgLyogbWluaW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB3aGVuIG92ZXJhbGxvY2F0aW9uIGlzIGVuYWJsZWQsCi0gICAgICAgc2VlIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgpICovCisKKyAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgY2hhcmFjdGVycyAoZGVmYXVsdDogMCkgKi8KICAgICBQeV9zc2l6ZV90IG1pbl9sZW5ndGg7CisKKyAgICAvKiBtaW5pbXVtIGNoYXJhY3RlciAoZGVmYXVsdDogMTI3LCBBU0NJSSkgKi8KKyAgICBQeV9VQ1M0IG1pbl9jaGFyOworCisgICAgLyogSWYgbm9uLXplcm8sIG92ZXJhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5IDI1JSAoZGVmYXVsdDogMCkuICovCiAgICAgdW5zaWduZWQgY2hhciBvdmVyYWxsb2NhdGU7CisKICAgICAvKiBJZiByZWFkb25seSBpcyAxLCBidWZmZXIgaXMgYSBzaGFyZWQgc3RyaW5nIChjYW5ub3QgYmUgbW9kaWZpZWQpCiAgICAgICAgYW5kIHNpemUgaXMgc2V0IHRvIDAuICovCiAgICAgdW5zaWduZWQgY2hhciByZWFkb25seTsKIH0gX1B5VW5pY29kZVdyaXRlciA7CiAKIC8qIEluaXRpYWxpemUgYSBVbmljb2RlIHdyaXRlci4KLQotICAgSWYgbWluX2xlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkKLSAgIG92ZXJhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhbmQgbWluX2xlbmd0aCBpcyB0aGUgbWluaW11bSBsZW5ndGggaW4gY2hhcmFjdGVycwotICAgb2YgdGhlIGJ1ZmZlci4gKi8KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyAwIGNoYXJhY3RlciBhbmQgb3ZlcmFsbG9jYXRpb24gaXMKKyAqIGRpc2FibGVkLiBTZXQgbWluX2xlbmd0aCwgbWluX2NoYXIgYW5kIG92ZXJhbGxvY2F0ZSBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wKKyAqIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuICovCiBQeUFQSV9GVU5DKHZvaWQpCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpOworX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKIC8qIFByZXBhcmUgdGhlIGJ1ZmZlciB0byB3cml0ZSAnbGVuZ3RoJyBjaGFyYWN0ZXJzCiAgICB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjaGFyYWN0ZXIuCkBAIC05MzMsMTIgKzkzOSw1MiBAQAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcik7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKGludCkKLV9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKTsKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBQeV9VQ1M0IGNoCisgICAgKTsKIAorLyogQXBwZW5kIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgKTsKKworLyogQXBwZW5kIGEgc3Vic3RyaW5nIG9mIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzdGFydCwKKyAgICBQeV9zc2l6ZV90IGVuZAorICAgICk7CisKKy8qIEFwcGVuZCBhIEFTQ0lJLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBjb25zdCBjaGFyICpzdHIsICAgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzLCBvciAtMSBpZiB1bmtub3duICovCisgICAgKTsKKworLyogQXBwZW5kIGEgbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGxlbiAgICAgICAgICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApOworCisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSB3cml0ZXIgYXMgYW4gVW5pY29kZSBzdHJpbmcuIENsZWFyIHRoZQorICAgYnVmZmVyIG9mIHRoZSB3cml0ZXIuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwKKyAgIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKQogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKIAorLyogRGVhbGxvY2F0ZSBtZW1vcnkgb2YgYSB3cml0ZXIgKGNsZWFyIGl0cyBpbnRlcm5hbCBidWZmZXIpLiAqLwogUHlBUElfRlVOQyh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAjZW5kaWYKQEAgLTk3Nyw3ICsxMDIzLDcgQEAKICAgIFRoZSBidWZmZXIgaXMgY29waWVkIGludG8gdGhlIG5ldyBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAotICAgIHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsICAvKiB3Y2hhcl90IGJ1ZmZlciAqLworICAgIGNvbnN0IHdjaGFyX3QgKncsICAgICAgICAgICAvKiB3Y2hhcl90IGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3Qgc2l6ZSAgICAgICAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciAqLwogICAgICk7CiAKQEAgLTk5NSw3ICsxMDQxLDcgQEAKIAogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigKICAgICBQeU9iamVjdCAqdW5pY29kZSwgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciB3Y2hhcl90ICp3LCAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICB3Y2hhcl90ICp3LCAgICAgICAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC0xNzI2LDcgKzE3NzIsNyBAQAogLyogRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLiBUaGUgZW5jb2RlciBpcwogICAgc3RyaWN0IGlzICpzdXJyb2dhdGVlc2NhcGUqIGlzIGVxdWFsIHRvIHplcm8sIG90aGVyd2lzZSB0aGUKICAgICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgaXMgdXNlZC4gUmV0dXJuIGEgYnl0ZXMgb2JqZWN0LiBUaGUgc3RyaW5nCi0gICBjYW5ub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuLiAqLworICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgKICAgICBQeU9iamVjdCAqdW5pY29kZSwKQEAgLTE5NTAsMTMgKzE5OTYsMTkgQEAKICAgICApOwogCiAvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MgdGhhbiwgZXF1YWwsCi0gICBncmVhdGVyIHRoYW4gcmVzcC4gKi8KKyAgIGdyZWF0ZXIgdGhhbiByZXNwLgorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZSgKICAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmlnaHQgICAgICAgICAgICAgLyogUmlnaHQgc3RyaW5nICovCiAgICAgKTsKIAorUHlBUElfRlVOQyhpbnQpIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZCgKKyAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KKyAgICBfUHlfSWRlbnRpZmllciAqcmlnaHQgICAgICAgLyogUmlnaHQgaWRlbnRpZmllciAqLworICAgICk7CisKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICBQeU9iamVjdCAqbGVmdCwKICAgICBjb25zdCBjaGFyICpyaWdodCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvd2FybmluZ3MuaCBiL0luY2x1ZGUvd2FybmluZ3MuaAppbmRleCBiN2RiNjgxLi4yMTdjMDZhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxMyBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CiBQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0KAogICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKICAgICBjb25zdCBjaGFyICptZXNzYWdlLCAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTI1LDYgKzMyLDEyIEBACiAgICAgY29uc3QgY2hhciAqbW9kdWxlLCAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5KTsKIAorUHlBUElfRlVOQyhpbnQpCitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwogLyogREVQUkVDQVRFRDogVXNlIFB5RXJyX1dhcm5FeCgpIGluc3RlYWQuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5RXJyX1dhcm4oY2F0ZWdvcnksIG1zZykgUHlFcnJfV2FybkV4KGNhdGVnb3J5LCBtc2csIDEpCmRpZmYgLS1naXQgYS9MaWIvX2Jvb3Rsb2NhbGUucHkgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjY2FjMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fYm9vdGxvY2FsZS5weQpAQCAtMCwwICsxLDM0IEBACisiIiJBIG1pbmltYWwgc3Vic2V0IG9mIHRoZSBsb2NhbGUgbW9kdWxlIHVzZWQgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cAorKGltcG9ydGVkIGJ5IHRoZSBfaW8gbW9kdWxlKSwgaW4gb3JkZXIgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KKworRG9uJ3QgaW1wb3J0IGRpcmVjdGx5IGZyb20gdGhpcmQtcGFydHkgY29kZTsgdXNlIHRoZSBgbG9jYWxlYCBtb2R1bGUgaW5zdGVhZCEKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgX2xvY2FsZQorCitpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorZWxzZToKKyAgICB0cnk6CisgICAgICAgIF9sb2NhbGUuQ09ERVNFVAorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgICMgVGhpcyBwYXRoIGZvciBsZWdhY3kgc3lzdGVtcyBuZWVkcyB0aGUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAjIGdldGRlZmF1bHRsb2NhbGUoKSBmdW5jdGlvbiwgaW1wb3J0IHRoZSBmdWxsIGxvY2FsZSBtb2R1bGUuCisgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgICAgICByZXR1cm4gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZSkKKyAgICBlbHNlOgorICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlPVRydWUpOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBkb19zZXRsb2NhbGUKKyAgICAgICAgICAgIHJlc3VsdCA9IF9sb2NhbGUubmxfbGFuZ2luZm8oX2xvY2FsZS5DT0RFU0VUKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgbmxfbGFuZ2luZm8gY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBVVEYtOCBpcyB0aGUgZGVmYXVsdCBjaGFyc2V0IG9uIE9TWCBhbmQKKyAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCisgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnVVRGLTgnCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weSBiL0xpYi9fY29sbGVjdGlvbnNfYWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTFmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpAQCAtMCwwICsxLDczNCBAQAorIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorCisiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgorCitVbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgorIiIiCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IHN5cworCitfX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCisgICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAorICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAorICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCisgICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCisgICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAorICAgICAgICAgICAiQnl0ZVN0cmluZyIsCisgICAgICAgICAgIF0KKworIyBUaGlzIG1vZHVsZSBoYXMgYmVlbiByZW5hbWVkIGZyb20gY29sbGVjdGlvbnMuYWJjIHRvIF9jb2xsZWN0aW9uc19hYmMgdG8KKyMgc3BlZWQgdXAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gU29tZSBvZiB0aGUgdHlwZXMgc3VjaCBhcyBNdXRhYmxlTWFwcGluZyBhcmUKKyMgcmVxdWlyZWQgZWFybHkgYnV0IGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBvcnRzIGEgbG90IG9mIG90aGVyIG1vZHVsZXMuCisjIFNlZSBpc3N1ZSAjMTkyMTgKK19fbmFtZV9fID0gImNvbGxlY3Rpb25zLmFiYyIKKworIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcworIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6CisjICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQorIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCisjIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0CisjIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAorIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KK2J5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCitieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQorI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/CitkaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCitkaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQorZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCitsaXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKK2xpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCityYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCitzZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQorc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKK3R1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKK3ppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCisjIyB2aWV3cyAjIworZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCitkaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCitkaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQorIyMgbWlzYyAjIworbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQorCisKKyMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIworCitjbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgorICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgorICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHdoaWxlIEZhbHNlOgorICAgICAgICAgICAgeWllbGQgTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKKyAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCisgICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCisjSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQorCitjbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6CisgICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKKyAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6CisgICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworIyMjIFNFVFMgIyMjCisKKworY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKKyAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KKworICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKKyAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBjbHMoaXQpCisKKyAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCisKKyAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6CisgICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJworICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQorCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKKworICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQorCisgICAgZGVmIF9oYXNoKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCisgICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKKyAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KKworICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQorICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAorICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKKyAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCisgICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCisgICAgICAgIE1BU0sgPSAyICogTUFYICsgMQorICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQorICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgZm9yIHggaW4gc2VsZjoKKyAgICAgICAgICAgIGh4ID0gaGFzaCh4KQorICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKKyAgICAgICAgICAgIGggJj0gTUFTSworICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBpZiBoID4gTUFYOgorICAgICAgICAgICAgaCAtPSBNQVNLICsgMQorICAgICAgICBpZiBoID09IC0xOgorICAgICAgICAgICAgaCA9IDU5MDkyMzcxMworICAgICAgICByZXR1cm4gaAorCitTZXQucmVnaXN0ZXIoZnJvemVuc2V0KQorCisKK2NsYXNzIE11dGFibGVTZXQoU2V0KToKKyAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAorICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgorICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQorICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisKKyAgICBkZWYgcG9wKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgorICAgICAgICBpdCA9IGl0ZXIoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgorICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKKyAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgorICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKKworCisjIyMgTUFQUElOR1MgIyMjCisKKworY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQorICAgIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgorICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKKyAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKKyAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgorICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCisKKworY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9tYXBwaW5nCisKK0tleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKKworCitjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKKworSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCisKKworY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KKworVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKKworCitjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKKyAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgX19tYXJrZXIgPSBvYmplY3QoKQorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgorICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKyAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCisgICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2CisgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgorICAgICAgICAnJycKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCisgICAgICAgIGVsaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6CisgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKK011dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCisKKworIyMjIFNFUVVFTkNFUyAjIyMKKworCitjbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCisgICAgICAgICAgICAgICAgeWllbGQgdgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGZvciB2IGluIHNlbGY6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6CisgICAgICAgICAgICB5aWVsZCBzZWxmW2ldCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgorICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJworICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQorCitTZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKK1NlcXVlbmNlLnJlZ2lzdGVyKHN0cikKK1NlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQorU2VxdWVuY2UucmVnaXN0ZXIobWVtb3J5dmlldykKKworCitjbGFzcyBCeXRlU3RyaW5nKFNlcXVlbmNlKToKKworICAgICIiIlRoaXMgdW5pZmllcyBieXRlcyBhbmQgYnl0ZWFycmF5LgorCisgICAgWFhYIFNob3VsZCBhZGQgYWxsIHRoZWlyIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVzKQorQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlYXJyYXkpCisKKworY2xhc3MgTXV0YWJsZVNlcXVlbmNlKFNlcXVlbmNlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLXdyaXRlIHNlcXVlbmNlLgorCisgICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IHByb3ZpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLCBfX2xlbl9fLCBhbmQgaW5zZXJ0KCkuCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgICdTLmluc2VydChpbmRleCwgdmFsdWUpIC0tIGluc2VydCB2YWx1ZSBiZWZvcmUgaW5kZXgnCisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5hcHBlbmQodmFsdWUpIC0tIGFwcGVuZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZScKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYpLCB2YWx1ZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ1MuY2xlYXIoKSAtPiBOb25lIC0tIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBTJworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgcmV2ZXJzZShzZWxmKToKKyAgICAgICAgJ1MucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKicKKyAgICAgICAgbiA9IGxlbihzZWxmKQorICAgICAgICBmb3IgaSBpbiByYW5nZShuLy8yKToKKyAgICAgICAgICAgIHNlbGZbaV0sIHNlbGZbbi1pLTFdID0gc2VsZltuLWktMV0sIHNlbGZbaV0KKworICAgIGRlZiBleHRlbmQoc2VsZiwgdmFsdWVzKToKKyAgICAgICAgJ1MuZXh0ZW5kKGl0ZXJhYmxlKSAtLSBleHRlbmQgc2VxdWVuY2UgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlJworICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFwcGVuZCh2KQorCisgICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6CisgICAgICAgICcnJ1MucG9wKFtpbmRleF0pIC0+IGl0ZW0gLS0gcmVtb3ZlIGFuZCByZXR1cm4gaXRlbSBhdCBpbmRleCAoZGVmYXVsdCBsYXN0KS4KKyAgICAgICAgICAgUmFpc2UgSW5kZXhFcnJvciBpZiBsaXN0IGlzIGVtcHR5IG9yIGluZGV4IGlzIG91dCBvZiByYW5nZS4KKyAgICAgICAgJycnCisgICAgICAgIHYgPSBzZWxmW2luZGV4XQorICAgICAgICBkZWwgc2VsZltpbmRleF0KKyAgICAgICAgcmV0dXJuIHYKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLnJlbW92ZSh2YWx1ZSkgLS0gcmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdmFsdWUuCisgICAgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZGVsIHNlbGZbc2VsZi5pbmRleCh2YWx1ZSldCisKKyAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsdWVzKToKKyAgICAgICAgc2VsZi5leHRlbmQodmFsdWVzKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIobGlzdCkKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihieXRlYXJyYXkpICAjIE11bHRpcGx5IGluaGVyaXRpbmcsIHNlZSBCeXRlU3RyaW5nCmRpZmYgLS1naXQgYS9MaWIvX2R1bW15X3RocmVhZC5weSBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CmluZGV4IDEzYjFmMjYuLmI2N2NmYjkgMTAwNjQ0Ci0tLSBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5CisrKyBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CkBAIC04MSw2ICs4MSwxMCBAQAogICAgICAgICByYWlzZSBlcnJvcigic2V0dGluZyB0aHJlYWQgc3RhY2sgc2l6ZSBub3Qgc3VwcG9ydGVkIikKICAgICByZXR1cm4gMAogCitkZWYgX3NldF9zZW50aW5lbCgpOgorICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuX3NldF9zZW50aW5lbCgpLiIiIgorICAgIHJldHVybiBMb2NrVHlwZSgpCisKIGNsYXNzIExvY2tUeXBlKG9iamVjdCk6CiAgICAgIiIiQ2xhc3MgaW1wbGVtZW50aW5nIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuTG9ja1R5cGUuCiAKZGlmZiAtLWdpdCBhL0xpYi9fb3N4X3N1cHBvcnQucHkgYi9MaWIvX29zeF9zdXBwb3J0LnB5CmluZGV4IDUwYjJkMTcuLjQwZmM3OGIgMTAwNjQ0Ci0tLSBhL0xpYi9fb3N4X3N1cHBvcnQucHkKKysrIGIvTGliL19vc3hfc3VwcG9ydC5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHBhdGhzID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQogICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKIAotICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBvcy5uYW1lID09ICdvczInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgorICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgX1NZU1RFTV9WRVJTSU9OID0gJycKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgV2UncmUgb24gYSBwbGFpbiBkYXJ3aW4gYm94LCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICMgYmVoYXZpb3VyLgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5CmluZGV4IGFhYjYwZGIuLmQ2ZWVlNzkgMTAwNjQ0Ci0tLSBhL0xpYi9fcHlpby5weQorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC02Miw4ICs2Miw3IEBACiAgICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCiAgICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKQogICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KQEAgLTc5LDYgKzc4LDEwIEBACiAgICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQogICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgogCisgICAgJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zCisgICAgb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKKyAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4KKwogICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKICAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCkBAIC0xMjksNiArMTMyLDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0xNzIsNiArMTc3LDkgQEAKICAgICBpZiAiVSIgaW4gbW9kZXM6CiAgICAgICAgIGlmIGNyZWF0aW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmVhZGluZyA9IFRydWUKICAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCkBAIC0yMDAsNyArMjA4LDcgQEAKICAgICAgICAgYnVmZmVyaW5nID0gREVGQVVMVF9CVUZGRVJfU0laRQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBicyA9IG9zLmZzdGF0KHJhdy5maWxlbm8oKSkuc3RfYmxrc2l6ZQotICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgYnMgPiAxOgpAQCAtMjU0LDcgKzI2Miw3IEBACiB0cnk6CiAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIElPRXJyb3IpOgorICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICBwYXNzCiAKIApAQCAtMjc4LDcgKzI4Niw3IEBACiAgICAgcmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuCiAKICAgICBOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzCi0gICAgdW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIElPRXJyb3IgaW4gdGhpcyBjYXNlLgorICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBPU0Vycm9yIGluIHRoaXMgY2FzZS4KIAogICAgIElPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZwogICAgIHRoYXQgYW4gSU9CYXNlIG9iamVjdCBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB5aWVsZGluZyB0aGUgbGluZXMgaW4gYQpAQCAtMjk0LDcgKzMwMiw3IEBACiAgICAgIyMjIEludGVybmFsICMjIwogCiAgICAgZGVmIF91bnN1cHBvcnRlZChzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCiAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCIlcy4lcygpIG5vdCBzdXBwb3J0ZWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKSkKIApAQCAtNDQxLDcgKzQ0OSw3IEBACiAgICAgZGVmIGZpbGVubyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50KSBpZiBvbmUgZXhpc3RzLgogCi0gICAgICAgIEFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICBBbiBPU0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJmaWxlbm8iKQogCkBAIC00NTUsMTEgKzQ2MywxMSBAQAogCiAgICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIwogCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgIHIiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIG9mIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4KIAotICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgotICAgICAgICBMaW1pdCBzaG91bGQgYmUgYW4gaW50LgorICAgICAgICBJZiBzaXplIGlzIHNwZWNpZmllZCwgYXQgbW9zdCBzaXplIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgICAgU2l6ZSBzaG91bGQgYmUgYW4gaW50LgogCiAgICAgICAgIFRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0CiAgICAgICAgIGZpbGVzLCB0aGUgbmV3bGluZXMgYXJndW1lbnQgdG8gb3BlbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKQEAgLTQ3MiwxOCArNDgwLDE4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRhaGVhZDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgICAgICBuID0gKHJlYWRhaGVhZC5maW5kKGIiXG4iKSArIDEpIG9yIGxlbihyZWFkYWhlYWQpCi0gICAgICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBsaW1pdCkKKyAgICAgICAgICAgICAgICBpZiBzaXplID49IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4ocmVzKSA8IGxpbWl0OgorICAgICAgICB3aGlsZSBzaXplIDwgMCBvciBsZW4ocmVzKSA8IHNpemU6CiAgICAgICAgICAgICBiID0gc2VsZi5yZWFkKG5yZWFkYWhlYWQoKSkKICAgICAgICAgICAgIGlmIG5vdCBiOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC01NDIsMTcgKzU1MCwxNyBAQAogICAgICMgcHJpbWl0aXZlIG9wZXJhdGlvbiwgYnV0IHRoYXQgd291bGQgbGVhZCB0byBuYXN0eSByZWN1cnNpb24gaW4gY2FzZQogICAgICMgYSBzdWJjbGFzcyBkb2Vzbid0IGltcGxlbWVudCBlaXRoZXIuKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IG9uIEVPRiwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0IGlzCiAgICAgICAgIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQotICAgICAgICBiID0gYnl0ZWFycmF5KG4uX19pbmRleF9fKCkpCisgICAgICAgIGIgPSBieXRlYXJyYXkoc2l6ZS5fX2luZGV4X18oKSkKICAgICAgICAgbiA9IHNlbGYucmVhZGludG8oYikKICAgICAgICAgaWYgbiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTYxMCw4ICs2MTgsOCBAQAogICAgIGltcGxlbWVudGF0aW9uLCBidXQgd3JhcCBvbmUuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kCiAgICAgICAgIHJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLgpAQCAtNjMwLDkgKzYzOCw5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAotICAgICAgICB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBzaXplIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAorICAgICAgICB3aGVyZSBzaXplIGlzIGFuIGludC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkMSIpCiAKQEAgLTY5OSwxMyArNzA3LDEzIEBACiAgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CiAgICAgICAgIG5ld19wb3NpdGlvbiA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCiAgICAgICAgIGlmIG5ld19wb3NpdGlvbiA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBuZXdfcG9zaXRpb24KIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICBwb3MgPSBzZWxmLnJhdy50ZWxsKCkKICAgICAgICAgaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIHBvcwogCiAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKQEAgLTgyMCwyNCArODI4LDI0IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzZWxmLl9idWZmZXIpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgbiA9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIHNpemUgPSBsZW4oc2VsZi5fYnVmZmVyKQogICAgICAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9wb3M6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgbikKKyAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBzaXplKQogICAgICAgICBiID0gc2VsZi5fYnVmZmVyW3NlbGYuX3BvcyA6IG5ld3Bvc10KICAgICAgICAgc2VsZi5fcG9zID0gbmV3cG9zCiAgICAgICAgIHJldHVybiBieXRlcyhiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKICAgICAgICAgIiIiVGhpcyBpcyB0aGUgc2FtZSBhcyByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZChuKQorICAgICAgICByZXR1cm4gc2VsZi5yZWFkKHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgpAQCAtOTI3LDcgKzkzNSw3IEBACiAgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmF3LnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCiAgICAgICAgIGlmIGJ1ZmZlcl9zaXplIDw9IDA6CkBAIC05NDAsMTggKzk0OCwxOCBAQAogICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IGIiIgogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgbiBieXRlcy4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMuCiAKLSAgICAgICAgUmV0dXJucyBleGFjdGx5IG4gYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCisgICAgICAgIFJldHVybnMgZXhhY3RseSBzaXplIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTwogICAgICAgICBzdHJlYW0gcmVhY2hlcyBFT0Ygb3IgaWYgdGhlIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nCi0gICAgICAgIG1vZGUuIElmIG4gaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZAorICAgICAgICBtb2RlLiBJZiBzaXplIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKICAgICAgICAgYmxvY2suCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuIDwgLTE6CisgICAgICAgIGlmIHNpemUgaXMgbm90IE5vbmUgYW5kIHNpemUgPCAtMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQiKQogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKG4pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChzaXplKQogCiAgICAgZGVmIF9yZWFkX3VubG9ja2VkKHNlbGYsIG49Tm9uZSk6CiAgICAgICAgIG5vZGF0YV92YWwgPSBiIiIKQEAgLTEwMTEsNyArMTAxOSw3IEBACiAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gb3V0WzpuXSBpZiBvdXQgZWxzZSBub2RhdGFfdmFsCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CiAgICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLgogCiAgICAgICAgIFRoZSBhcmd1bWVudCBpbmRpY2F0ZXMgYSBkZXNpcmVkIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzOyB3ZQpAQCAtMTAxOSw3ICsxMDI3LDcgQEAKICAgICAgICAgdGhhbiBzZWxmLmJ1ZmZlcl9zaXplLgogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGVla191bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcGVla191bmxvY2tlZChzZWxmLCBuPTApOgogICAgICAgICB3YW50ID0gbWluKG4sIHNlbGYuYnVmZmVyX3NpemUpCkBAIC0xMDM3LDE4ICsxMDQ1LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgICIiIlJlYWRzIHVwIHRvIG4gYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgotICAgICAgICAjIFJldHVybnMgdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgIiIiUmVhZHMgdXAgdG8gc2l6ZSBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwuIiIiCisgICAgICAgICMgUmV0dXJucyB1cCB0byBzaXplIGJ5dGVzLiAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIHdlCiAgICAgICAgICMgb25seSByZXR1cm4gYnVmZmVyZWQgYnl0ZXMuICBPdGhlcndpc2UsIHdlIGRvIG9uZSByYXcgcmVhZC4KLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgbXVzdCBiZSBwb3NpdGl2ZSIpCi0gICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgaWYgc2l6ZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGIiIgogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKICAgICAgICAgICAgIHNlbGYuX3BlZWtfdW5sb2NrZWQoMSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKAotICAgICAgICAgICAgICAgIG1pbihuLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQorICAgICAgICAgICAgICAgIG1pbihzaXplLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBfQnVmZmVyZWRJT01peGluLnRlbGwoc2VsZikgLSBsZW4oc2VsZi5fcmVhZF9idWYpICsgc2VsZi5fcmVhZF9wb3MKQEAgLTEwNzQsNyArMTA4Miw3IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKToKICAgICAgICAgaWYgbm90IHJhdy53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtMTEzOCw3ICsxMTQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXJybm8uRUFHQUlOLAogICAgICAgICAgICAgICAgICAgICAid3JpdGUgY291bGQgbm90IGNvbXBsZXRlIHdpdGhvdXQgYmxvY2tpbmciLCAwKQogICAgICAgICAgICAgaWYgbiA+IGxlbihzZWxmLl93cml0ZV9idWYpIG9yIG4gPCAwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigid3JpdGUoKSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIikKICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTExNzQsMTggKzExODIsMTggQEAKICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdHdvIFJhd0lPIGluc3RhbmNlcy4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCByZWFkZXIucmVhZGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKIAogICAgICAgICBpZiBub3Qgd3JpdGVyLndyaXRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSBCdWZmZXJlZFJlYWRlcihyZWFkZXIsIGJ1ZmZlcl9zaXplKQogICAgICAgICBzZWxmLndyaXRlciA9IEJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgYnVmZmVyX3NpemUpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQobikKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQoc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvKGIpCkBAIC0xMTkzLDExICsxMjAxLDExIEBACiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIud3JpdGUoYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKG4pCisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsoc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKG4pCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEoc2l6ZSkKIAogICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRhYmxlKCkKQEAgLTEyNDgsNyArMTI1Niw3IEBACiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgogICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQogICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gcG9zCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTEyNjMsMjMgKzEyNzEsMjMgQEAKICAgICAgICAgIyBVc2Ugc2VlayB0byBmbHVzaCB0aGUgcmVhZCBidWZmZXIuCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci50cnVuY2F0ZShzZWxmLCBwb3MpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZGludG8oc2VsZiwgYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6CisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZjoKQEAgLTEyOTksMTEgKzEzMDcsMTEgQEAKICAgICBhcmUgaW1tdXRhYmxlLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgIiIiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYXQgbW9zdCBzaXplIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0sIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCi0gICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgotICAgICAgICBJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgorICAgICAgICBSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBzaXplIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi4KKyAgICAgICAgSWYgc2l6ZSBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi4KIAogICAgICAgICBSZXR1cm5zIGEgc3RyaW5nLgogICAgICAgICAiIiIKQEAgLTE3MjcsNyArMTczNSw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpCiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlcgpAQCAtMTgxNCw3ICsxODIyLDcgQEAKICAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShiJycsIGZpbmFsPVRydWUpKQogICAgICAgICAgICAgICAgIG5lZWRfZW9mID0gMQogICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogCiAgICAgICAgICAgICAjIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4KICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZSgKQEAgLTE4OTEsNyArMTg5OSw3IEBACiAKICAgICAgICAgICAgICMgU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZGVjb2RlZF9jaGFycykgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCiAgICAgICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSBjaGFyc190b19za2lwCiAKICAgICAgICAgIyBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykKQEAgLTE5MDcsMTYgKzE5MTUsMTYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjQsMTIgKzE5MzIsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDEsMTMgKzE5NDksMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDA2LDggKzIwMTQsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDIyLDggKzIwMzAsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU0LDcgKzIwNjIsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjIxMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiCitUaGUgb2JqZWN0cyB1c2VkIGJ5IHRoZSBzaXRlIG1vZHVsZSB0byBhZGQgY3VzdG9tIGJ1aWx0aW5zLgorIiIiCisKKyMgVGhvc2Ugb2JqZWN0cyBhcmUgYWxtb3N0IGltbW9ydGFsIGFuZCB0aGV5IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgbW9kdWxlCisjIGdsb2JhbHMuICBEZWZpbmluZyB0aGVtIGluIHRoZSBzaXRlIG1vZHVsZSB3b3VsZCBrZWVwIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMgYWxpdmUuCisjIE5vdGUgdGhpcyBtZWFucyB0aGlzIG1vZHVsZSBzaG91bGQgYWxzbyBhdm9pZCBrZWVwIHRoaW5ncyBhbGl2ZSBpbiBpdHMKKyMgZ2xvYmFscy4KKworaW1wb3J0IHN5cworCitjbGFzcyBRdWl0dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVvZik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lb2YgPSBlb2YKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBzZWxmLmVvZikKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKKyAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKKyAgICAgICAgIyBzdGRpbiB3cmFwcGVyIGlzIGNsb3NlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCisKKworY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKKyAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCisgICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKKworICAgIE1BWExJTkVTID0gMjMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2ZpbGVuYW1lcyA9IFtvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXNdCisKKyAgICBkZWYgX19zZXR1cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19kYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5fX2xpbmVjbnQgPSBsZW4oc2VsZi5fX2xpbmVzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fc2V0dXAoKQorICAgICAgICBpZiBsZW4oc2VsZi5fX2xpbmVzKSA8PSBzZWxmLk1BWExJTkVTOgorICAgICAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLl9fbGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlR5cGUgJXMoKSB0byBzZWUgdGhlIGZ1bGwgJXMgdGV4dCIgJSAoKHNlbGYuX19uYW1lLCkqMikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgcHJvbXB0ID0gJ0hpdCBSZXR1cm4gZm9yIG1vcmUsIG9yIHEgKGFuZCBSZXR1cm4pIHRvIHF1aXQ6ICcKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxpbmVubywgbGluZW5vICsgc2VsZi5NQVhMSU5FUyk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuX19saW5lc1tpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSBzZWxmLk1BWExJTkVTCisgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBpbnB1dChwcm9tcHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKCcnLCAncScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAncSc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgX0hlbHBlcihvYmplY3QpOgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCisKKyAgICAiIiIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCisgICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpbXBvcnQgcHlkb2MKKyAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IDkwNThhNjkuLmQxMDFjNmQgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggMDk3NzhlOC4uMjY0YzYwYyAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC01LDYgKzUsNyBAQAogCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiAKKwogZGVmIGFic3RyYWN0bWV0aG9kKGZ1bmNvYmopOgogICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgbWV0aG9kcy4KIApAQCAtMTI0LDYgKzEyNSw4IEBACiAgICAgIyBBIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY2xhc3MgaXMKICAgICAjIHJlZ2lzdGVyZWQgYXMgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFueXRoaW5nLiAgSXQgZm9yY2VzIHRoZQogICAgICMgbmVnYXRpdmUgY2FjaGUgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXRzIG5leHQgdXNlLgorICAgICMgTm90ZTogdGhpcyBjb3VudGVyIGlzIHByaXZhdGUuIFVzZSBgYWJjLmdldF9jYWNoZV90b2tlbigpYCBmb3IKKyAgICAjICAgICAgIGV4dGVybmFsIGNvZGUuCiAgICAgX2FiY19pbnZhbGlkYXRpb25fY291bnRlciA9IDAKIAogICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgpAQCAtMjI2LDMgKzIyOSwyMCBAQAogICAgICAgICAjIE5vIGRpY2U7IHVwZGF0ZSBuZWdhdGl2ZSBjYWNoZQogICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFCQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRoYXQgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gY3JlYXRlIGFuIEFCQyB1c2luZworICAgIGluaGVyaXRhbmNlLgorICAgICIiIgorICAgIHBhc3MKKworCitkZWYgZ2V0X2NhY2hlX3Rva2VuKCk6CisgICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCBBQkMgY2FjaGUgdG9rZW4uCisKKyAgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZgorICAgIHRoZSBBQkMgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcyB3aXRoCisgICAgZXZlcnkgY2FsbCB0byBgYHJlZ2lzdGVyKClgYCBvbiBhbnkgQUJDLgorICAgICIiIgorICAgIHJldHVybiBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggODZhNWVkYy4uYzFjOGVhNyAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTY5LDcgKzY5LDcgQEAKICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBBSUZGIGZpbGVzKQogICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBmb3IgQUlGRiBmaWxlcykKLSAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgZ2V0bWFya2VycygpICAgIC0tIGdldCB0aGUgbGlzdCBvZiBtYXJrcyBpbiB0aGUgYXVkaW8gZmlsZSBvciBOb25lCiAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIG5vIG1hcmtzCkBAIC0yNTIsNiArMjUyLDExIEBACiAgICAgX3dyaXRlX3Vsb25nKGYsIGxvbWFudCkKIAogZnJvbSBjaHVuayBpbXBvcnQgQ2h1bmsKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX2FpZmNfcGFyYW1zID0gbmFtZWR0dXBsZSgnX2FpZmNfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAKIGNsYXNzIEFpZmNfcmVhZDoKICAgICAjIFZhcmlhYmxlcyB1c2VkIGluIHRoaXMgY2xhc3M6CkBAIC0zMzQsNiArMzM5LDEyIEBACiAgICAgICAgICMgZWxzZSwgYXNzdW1lIGl0IGlzIGFuIG9wZW4gZmlsZSBvYmplY3QgYWxyZWFkeQogICAgICAgICBzZWxmLmluaXRmcChmKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMzcyLDkgKzM4Myw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTYyLDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2MSw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC02NzUsNiArNjkyLDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgpAQCAtODczLDggKzg5Miw3IEBACiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCcvdXNyL2RlbW9zL2RhdGEvYXVkaW8vYmFjaC5haWZmJykKICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgZiA9IG9wZW4oZm4sICdyJykKLSAgICB0cnk6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CiAgICAgICAgIHByaW50KCJSZWFkaW5nIiwgZm4pCiAgICAgICAgIHByaW50KCJuY2hhbm5lbHMgPSIsIGYuZ2V0bmNoYW5uZWxzKCkpCiAgICAgICAgIHByaW50KCJuZnJhbWVzICAgPSIsIGYuZ2V0bmZyYW1lcygpKQpAQCAtODg1LDE2ICs5MDMsMTEgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICAgICAgZ24gPSBzeXMuYXJndlsyXQogICAgICAgICAgICAgcHJpbnQoIldyaXRpbmciLCBnbikKLSAgICAgICAgICAgIGcgPSBvcGVuKGduLCAndycpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZ24sICd3JykgYXMgZzoKICAgICAgICAgICAgICAgICBnLnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQogICAgICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWRmcmFtZXMoMTAyNCkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnLndyaXRlZnJhbWVzKGRhdGEpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGcuY2xvc2UoKQogICAgICAgICAgICAgcHJpbnQoIkRvbmUuIikKLSAgICBmaW5hbGx5OgotICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQppbmRleCBmMjViMWI2Li45NTIwZTBlIDEwMDY0NAotLS0gYS9MaWIvYXJncGFyc2UucHkKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC02MDYsOCArNjA2LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2luZGVudCgpCi0gICAgICAgICAgICBmb3Igc3ViYWN0aW9uIGluIGdldF9zdWJhY3Rpb25zKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3ViYWN0aW9uCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdldF9zdWJhY3Rpb25zKCkKICAgICAgICAgICAgIHNlbGYuX2RlZGVudCgpCiAKICAgICBkZWYgX3NwbGl0X2xpbmVzKHNlbGYsIHRleHQsIHdpZHRoKToKQEAgLTEwMzgsNyArMTAzNyw4IEBACiAgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VyLnZlcnNpb24KICAgICAgICAgZm9ybWF0dGVyID0gcGFyc2VyLl9nZXRfZm9ybWF0dGVyKCkKICAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHZlcnNpb24pCi0gICAgICAgIHBhcnNlci5leGl0KG1lc3NhZ2U9Zm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgIHBhcnNlci5fcHJpbnRfbWVzc2FnZShmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSwgX3N5cy5zdGRvdXQpCisgICAgICAgIHBhcnNlci5leGl0KCkKIAogCiBjbGFzcyBfU3ViUGFyc2Vyc0FjdGlvbihBY3Rpb24pOgpAQCAtMTE0MSwxMSArMTE0MSwxNyBAQAogICAgICAgICAgICAgc2FtZSB2YWx1ZXMgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICAgICAtIGJ1ZnNpemUgLS0gVGhlIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcwogICAgICAgICAgICAgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGVuY29kaW5nIC0tIFRoZSBmaWxlJ3MgZW5jb2RpbmcuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQorICAgICAgICAgICAgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZXJyb3JzIC0tIEEgc3RyaW5nIGluZGljYXRpbmcgaG93IGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvcnMgYXJlIHRvCisgICAgICAgICAgICBiZSBoYW5kbGVkLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYuX2J1ZnNpemUgPSBidWZzaXplCisgICAgICAgIHNlbGYuX2VuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5fZXJyb3JzID0gZXJyb3JzCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgIyB0aGUgc3BlY2lhbCBhcmd1bWVudCAiLSIgbWVhbnMgc3lzLnN0ZHtpbixvdXR9CkBAIC0xMTYwLDE0ICsxMTY2LDE4IEBACiAKICAgICAgICAgIyBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIGFzIGZpbGUgbmFtZXMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplLCBzZWxmLl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9ycykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBfKCJjYW4ndCBvcGVuICclcyc6ICVzIikKICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKG1lc3NhZ2UgJSAoc3RyaW5nLCBlKSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgYXJncyA9IHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUKLSAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4ocmVwcihhcmcpIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgIT0gLTEpCisgICAgICAgIGt3YXJncyA9IFsoJ2VuY29kaW5nJywgc2VsZi5fZW5jb2RpbmcpLCAoJ2Vycm9ycycsIHNlbGYuX2Vycm9ycyldCisgICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKFtyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyVzPSVyJyAlIChrdywgYXJnKSBmb3Iga3csIGFyZyBpbiBrd2FyZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZyBpcyBub3QgTm9uZV0pCiAgICAgICAgIHJldHVybiAnJXMoJXMpJyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBhcmdzX3N0cikKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwMDEsMTcgKzIwMTEsMTQgQEAKICAgICAgICAgICAgICMgcmVwbGFjZSBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlID0gb3Blbihhcmdfc3RyaW5nWzE6XSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYXJnX3N0cmluZ1sxOl0pIGFzIGFyZ3NfZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3QucHkgYi9MaWIvYXN0LnB5CmluZGV4IDEzZjU5ZjkuLjAyYzNiMjggMTAwNjQ0Ci0tLSBhL0xpYi9hc3QucHkKKysrIGIvTGliL2FzdC5weQpAQCAtNDIsNyArNDIsNiBAQAogICAgIFB5dGhvbiBsaXRlcmFsIHN0cnVjdHVyZXM6IHN0cmluZ3MsIGJ5dGVzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywKICAgICBzZXRzLCBib29sZWFucywgYW5kIE5vbmUuCiAgICAgIiIiCi0gICAgX3NhZmVfbmFtZXMgPSB7J05vbmUnOiBOb25lLCAnVHJ1ZSc6IFRydWUsICdGYWxzZSc6IEZhbHNlfQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIHN0cik6CiAgICAgICAgIG5vZGVfb3Jfc3RyaW5nID0gcGFyc2Uobm9kZV9vcl9zdHJpbmcsIG1vZGU9J2V2YWwnKQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIEV4cHJlc3Npb24pOgpAQCAtNjEsOSArNjAsOCBAQAogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgRGljdCk6CiAgICAgICAgICAgICByZXR1cm4gZGljdCgoX2NvbnZlcnQoayksIF9jb252ZXJ0KHYpKSBmb3IgaywgdgogICAgICAgICAgICAgICAgICAgICAgICAgaW4gemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZSk6Ci0gICAgICAgICAgICBpZiBub2RlLmlkIGluIF9zYWZlX25hbWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2FmZV9uYW1lc1tub2RlLmlkXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZUNvbnN0YW50KToKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBVbmFyeU9wKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKFVBZGQsIFVTdWIpKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcGVyYW5kLCAoTnVtLCBVbmFyeU9wLCBCaW5PcCkpOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaGF0LnB5IGIvTGliL2FzeW5jaGF0LnB5CmluZGV4IGVlYTM0MTguLjAzNzhmYTcgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2hhdC5weQorKysgYi9MaWIvYXN5bmNoYXQucHkKQEAgLTU2LDggKzU2LDggQEAKIAogICAgICMgdGhlc2UgYXJlIG92ZXJyaWRhYmxlIGRlZmF1bHRzCiAKLSAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDQwOTYKLSAgICBhY19vdXRfYnVmZmVyX3NpemUgICAgICA9IDQwOTYKKyAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDY1NTM2CisgICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA2NTUzNgogCiAgICAgIyB3ZSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGUgdXNlIG9mIGVuY29kaW5nIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhhdCBpcyBhCiAgICAgIyBzaWduIG9mIGFuIGFwcGxpY2F0aW9uIGJ1ZyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcGFzcyBzaWxlbnRseQpAQCAtMTExLDcgKzExMSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdiAoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICMgc2VuZCB0aGUgZGF0YQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG51bV9zZW50ID0gc2VsZi5zZW5kKGRhdGEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjg4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQxIEBACisiIiJUaGUgYXN5bmNpbyBwYWNrYWdlLCB0cmFja2luZyBQRVAgMzE1Ni4iIiIKKworaW1wb3J0IHN5cworCisjIFRoZSBzZWxlY3RvcnMgbW9kdWxlIGlzIGluIHRoZSBzdGRsaWIgaW4gUHl0aG9uIDMuNCBidXQgbm90IGluIDMuMy4KKyMgRG8gdGhpcyBmaXJzdCwgc28gdGhlIG90aGVyIHN1Ym1vZHVsZXMgY2FuIHVzZSAiZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMiLgorIyBQcmVmZXIgYXN5bmNpby9zZWxlY3RvcnMucHkgb3ZlciB0aGUgc3RkbGliIG9uZSwgYXMgb3VycyBtYXkgYmUgbmV3ZXIuCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2VsZWN0b3JzICAjIFdpbGwgYWxzbyBiZSBleHBvcnRlZC4KKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIyBTaW1pbGFyIHRoaW5nIGZvciBfb3ZlcmxhcHBlZC4KKyAgICB0cnk6CisgICAgICAgIGZyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBfb3ZlcmxhcHBlZCAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKKyMgVGhpcyByZWxpZXMgb24gZWFjaCBvZiB0aGUgc3VibW9kdWxlcyBoYXZpbmcgYW4gX19hbGxfXyB2YXJpYWJsZS4KK2Zyb20gLmZ1dHVyZXMgaW1wb3J0ICoKK2Zyb20gLmV2ZW50cyBpbXBvcnQgKgorZnJvbSAubG9ja3MgaW1wb3J0ICoKK2Zyb20gLnRyYW5zcG9ydHMgaW1wb3J0ICoKK2Zyb20gLnByb3RvY29scyBpbXBvcnQgKgorZnJvbSAuc3RyZWFtcyBpbXBvcnQgKgorZnJvbSAudGFza3MgaW1wb3J0ICoKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBmcm9tIC53aW5kb3dzX2V2ZW50cyBpbXBvcnQgKgorZWxzZToKKyAgICBmcm9tIC51bml4X2V2ZW50cyBpbXBvcnQgKiAgIyBwcmFnbWE6IG5vIGNvdmVyCisKKworX19hbGxfXyA9IChmdXR1cmVzLl9fYWxsX18gKworICAgICAgICAgICBldmVudHMuX19hbGxfXyArCisgICAgICAgICAgIGxvY2tzLl9fYWxsX18gKworICAgICAgICAgICB0cmFuc3BvcnRzLl9fYWxsX18gKworICAgICAgICAgICBwcm90b2NvbHMuX19hbGxfXyArCisgICAgICAgICAgIHN0cmVhbXMuX19hbGxfXyArCisgICAgICAgICAgIHRhc2tzLl9fYWxsX18pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDExN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weQpAQCAtMCwwICsxLDY0NCBAQAorIiIiQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBldmVudCBsb29wLgorCitUaGUgZXZlbnQgbG9vcCBjYW4gYmUgYnJva2VuIHVwIGludG8gYSBtdWx0aXBsZXhlciAodGhlIHBhcnQKK3Jlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdXMgb2YgSU8gZXZlbnRzKSBhbmQgdGhlIGV2ZW50IGxvb3AgcHJvcGVyLAord2hpY2ggd3JhcHMgYSBtdWx0aXBsZXhlciB3aXRoIGZ1bmN0aW9uYWxpdHkgZm9yIHNjaGVkdWxpbmcgY2FsbGJhY2tzLAoraW1tZWRpYXRlbHkgb3IgYXQgYSBnaXZlbiB0aW1lIGluIHRoZSBmdXR1cmUuCisKK1doZW5ldmVyIGEgcHVibGljIEFQSSB0YWtlcyBhIGNhbGxiYWNrLCBzdWJzZXF1ZW50IHBvc2l0aW9uYWwKK2FyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgaWYvd2hlbiBpdCBpcyBjYWxsZWQuICBUaGlzCithdm9pZHMgdGhlIHByb2xpZmVyYXRpb24gb2YgdHJpdmlhbCBsYW1iZGFzIGltcGxlbWVudGluZyBjbG9zdXJlcy4KK0tleXdvcmQgYXJndW1lbnRzIGZvciB0aGUgY2FsbGJhY2sgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoaXMgaXMgYQorY29uc2Npb3VzIGRlc2lnbiBkZWNpc2lvbiwgbGVhdmluZyB0aGUgZG9vciBvcGVuIGZvciBrZXl3b3JkIGFyZ3VtZW50cwordG8gbW9kaWZ5IHRoZSBtZWFuaW5nIG9mIHRoZSBBUEkgY2FsbCBpdHNlbGYuCisiIiIKKworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBoZWFwcQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnQmFzZUV2ZW50TG9vcCcsICdTZXJ2ZXInXQorCisKKyMgQXJndW1lbnQgZm9yIGRlZmF1bHQgdGhyZWFkIHBvb2wgZXhlY3V0b3IgY3JlYXRpb24uCitfTUFYX1dPUktFUlMgPSA1CisKKworY2xhc3MgX1N0b3BFcnJvcihCYXNlRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgdG8gc3RvcCB0aGUgZXZlbnQgbG9vcC4iIiIKKworCitkZWYgX3JhaXNlX3N0b3BfZXJyb3IoKmFyZ3MpOgorICAgIHJhaXNlIF9TdG9wRXJyb3IKKworCitjbGFzcyBTZXJ2ZXIoZXZlbnRzLkFic3RyYWN0U2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrZXRzKToKKyAgICAgICAgc2VsZi5sb29wID0gbG9vcAorICAgICAgICBzZWxmLnNvY2tldHMgPSBzb2NrZXRzCisgICAgICAgIHNlbGYuYWN0aXZlX2NvdW50ID0gMAorICAgICAgICBzZWxmLndhaXRlcnMgPSBbXQorCisgICAgZGVmIGF0dGFjaChzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBhc3NlcnQgc2VsZi5zb2NrZXRzIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuYWN0aXZlX2NvdW50ICs9IDEKKworICAgIGRlZiBkZXRhY2goc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYWN0aXZlX2NvdW50ID4gMAorICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCAtPSAxCisgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NvdW50ID09IDAgYW5kIHNlbGYuc29ja2V0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc29ja2V0cyA9IHNlbGYuc29ja2V0cworICAgICAgICBpZiBzb2NrZXRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zb2NrZXRzID0gTm9uZQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICAgICAgaWYgc2VsZi5hY3RpdmVfY291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWtldXAoKQorCisgICAgZGVmIF93YWtldXAoc2VsZik6CisgICAgICAgIHdhaXRlcnMgPSBzZWxmLndhaXRlcnMKKyAgICAgICAgc2VsZi53YWl0ZXJzID0gTm9uZQorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh3YWl0ZXIpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNvY2tldHMgaXMgTm9uZSBvciBzZWxmLndhaXRlcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi53YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcChldmVudHMuQWJzdHJhY3RFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFkeSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVkID0gW10KKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzID0gMAorICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBzb2NrZXQgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBTU0wgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgcmVhZCBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB3cml0ZSBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgc3VicHJvY2VzcyB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcmVhZF9mcm9tX3NlbGYoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICAiIiJQcm9jZXNzIHNlbGVjdG9yIGV2ZW50cy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiJSdW4gdW50aWwgc3RvcCgpIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgaWYgc2VsZi5fcnVubmluZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBydW5uaW5nLicpCisgICAgICAgIHNlbGYuX3J1bm5pbmcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fb25jZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9TdG9wRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBydW5fdW50aWxfY29tcGxldGUoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgIiIiUnVuIHVudGlsIHRoZSBGdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb3JvdXRpbmUsIGl0IGlzIHdyYXBwZWQgaW4gYSBUYXNrLgorCisgICAgICAgIFhYWCBUQkQ6IEl0IHdvdWxkIGJlIGRpc2FzdHJvdXMgdG8gY2FsbCBydW5fdW50aWxfY29tcGxldGUoKQorICAgICAgICB3aXRoIHRoZSBzYW1lIGNvcm91dGluZSB0d2ljZSAtLSBpdCB3b3VsZCB3cmFwIGl0IGluIHR3bworICAgICAgICBkaWZmZXJlbnQgVGFza3MgYW5kIHRoYXQgY2FuJ3QgYmUgZ29vZC4KKworICAgICAgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGZ1dHVyZSA9IHRhc2tzLmFzeW5jKGZ1dHVyZSwgbG9vcD1zZWxmKQorICAgICAgICBmdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2soX3JhaXNlX3N0b3BfZXJyb3IpCisgICAgICAgIHNlbGYucnVuX2ZvcmV2ZXIoKQorICAgICAgICBmdXR1cmUucmVtb3ZlX2RvbmVfY2FsbGJhY2soX3JhaXNlX3N0b3BfZXJyb3IpCisgICAgICAgIGlmIG5vdCBmdXR1cmUuZG9uZSgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFdmVudCBsb29wIHN0b3BwZWQgYmVmb3JlIEZ1dHVyZSBjb21wbGV0ZWQuJykKKworICAgICAgICByZXR1cm4gZnV0dXJlLnJlc3VsdCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCBydW5uaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIEV2ZXJ5IGNhbGxiYWNrIHNjaGVkdWxlZCBiZWZvcmUgc3RvcCgpIGlzIGNhbGxlZCB3aWxsIHJ1bi4KKyAgICAgICAgQ2FsbGJhY2sgc2NoZWR1bGVkIGFmdGVyIHN0b3AoKSBpcyBjYWxsZWQgd29uJ3QuICBIb3dldmVyLAorICAgICAgICB0aG9zZSBjYWxsYmFja3Mgd2lsbCBydW4gaWYgcnVuKCkgaXMgY2FsbGVkIGFnYWluIGxhdGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24oX3JhaXNlX3N0b3BfZXJyb3IpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2xlYXJzIHRoZSBxdWV1ZXMgYW5kIHNodXRzIGRvd24gdGhlIGV4ZWN1dG9yLAorICAgICAgICBidXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGV4ZWN1dG9yIHRvIGZpbmlzaC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlYWR5LmNsZWFyKCkKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVkLmNsZWFyKCkKKyAgICAgICAgZXhlY3V0b3IgPSBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yCisgICAgICAgIGlmIGV4ZWN1dG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IE5vbmUKKyAgICAgICAgICAgIGV4ZWN1dG9yLnNodXRkb3duKHdhaXQ9RmFsc2UpCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBydW5uaW5nIHN0YXR1cyBvZiBldmVudCBsb29wLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVubmluZworCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSBhY2NvcmRpbmcgdG8gdGhlIGV2ZW50IGxvb3AncyBjbG9jay4iIiIKKyAgICAgICAgcmV0dXJuIHRpbWUubW9ub3RvbmljKCkKKworICAgIGRlZiBjYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhdCBhIGdpdmVuIHRpbWUuCisKKyAgICAgICAgUmV0dXJuIGEgSGFuZGxlOiBhbiBvcGFxdWUgb2JqZWN0IHdpdGggYSBjYW5jZWwoKSBtZXRob2QgdGhhdAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGwuCisKKyAgICAgICAgVGhlIGRlbGF5IGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLiAgSXQgaXMKKyAgICAgICAgYWx3YXlzIGEgcmVsYXRpdmUgdGltZS4KKworICAgICAgICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4gIElmIHR3byBjYWxsYmFja3MKKyAgICAgICAgYXJlIHNjaGVkdWxlZCBmb3IgZXhhY3RseSB0aGUgc2FtZSB0aW1lLCBpdCB1bmRlZmluZWQgd2hpY2gKKyAgICAgICAgd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jYWxsX2F0KHNlbGYudGltZSgpICsgZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkxpa2UgY2FsbF9sYXRlcigpLCBidXQgdXNlcyBhbiBhYnNvbHV0ZSB0aW1lLiIiIgorICAgICAgICB0aW1lciA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCB0aW1lcikKKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgICAgICAgVGhpcyBvcGVyYXRlcyBhcyBhIEZJRk8gcXVldWUsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZQorICAgICAgICBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlCisgICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBoYW5kbGUgPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaGFuZGxlID0gc2VsZi5jYWxsX3Nvb24oY2FsbGJhY2ssICphcmdzKQorICAgICAgICBzZWxmLl93cml0ZV90b19zZWxmKCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIHJ1bl9pbl9leGVjdXRvcihzZWxmLCBleGVjdXRvciwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLkhhbmRsZSk6CisgICAgICAgICAgICBhc3NlcnQgbm90IGFyZ3MKKyAgICAgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLlRpbWVySGFuZGxlKQorICAgICAgICAgICAgaWYgY2FsbGJhY2suX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IGNhbGxiYWNrLl9jYWxsYmFjaywgY2FsbGJhY2suX2FyZ3MKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVjdXRvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoX01BWF9XT1JLRVJTKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorICAgICAgICByZXR1cm4gZnV0dXJlcy53cmFwX2Z1dHVyZShleGVjdXRvci5zdWJtaXQoY2FsbGJhY2ssICphcmdzKSwgbG9vcD1zZWxmKQorCisgICAgZGVmIHNldF9kZWZhdWx0X2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IGV4ZWN1dG9yCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0YWRkcmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0bmFtZWluZm8sIHNvY2thZGRyLCBmbGFncykKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIGFuZCBzc2w6CisgICAgICAgICAgICAjIFVzZSBob3N0IGFzIGRlZmF1bHQgZm9yIHNlcnZlcl9ob3N0bmFtZS4gIEl0IGlzIGFuIGVycm9yCisgICAgICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgb3Igbm90IHNldCwgZS5nLiB3aGVuIGFuCisgICAgICAgICAgICAjIGFscmVhZHktY29ubmVjdGVkIHNvY2tldCB3YXMgcGFzc2VkIG9yIHdoZW4gb25seSBhIHBvcnQKKyAgICAgICAgICAgICMgaXMgZ2l2ZW4uICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgY2FuIHBhc3MKKyAgICAgICAgICAgICMgc2VydmVyX2hvc3RuYW1lPScnIC0tIHRoaXMgd2lsbCBieXBhc3MgdGhlIGhvc3RuYW1lCisgICAgICAgICAgICAjIGNoZWNrLiAgKFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGhvc3QgaXMgYSBudW1lcmljCisgICAgICAgICAgICAjIElQL0lQdjYgYWRkcmVzcywgd2Ugd2lsbCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IGV4YWN0CisgICAgICAgICAgICAjIGFkZHJlc3M7IHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcywgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QganVkZ2UgaXQgaGVyZS4pCisgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdZb3UgbXVzdCBzZXQgc2VydmVyX2hvc3RuYW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHVzaW5nIHNzbCB3aXRob3V0IGEgaG9zdCcpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBob3N0CisKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZnMgPSBbZjFdCisgICAgICAgICAgICBpZiBsb2NhbF9hZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2FkZHIsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmMiA9IE5vbmUKKworICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy53YWl0KGZzLCBsb29wPXNlbGYpCisKKyAgICAgICAgICAgIGluZm9zID0gZjEucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGFkZHJfaW5mb3MgPSBmMi5yZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfLCBfLCBfLCBfLCBsYWRkciBpbiBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YyA9IE9TRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8sICdlcnJvciB3aGlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0ZW1wdGluZyB0byBiaW5kIG9uIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn06IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIsIGV4Yy5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxlbihleGNlcHRpb25zKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0cigpLCByYWlzZSBvbmUuCisgICAgICAgICAgICAgICAgICAgIG1vZGVsID0gc3RyKGV4Y2VwdGlvbnNbMF0pCisgICAgICAgICAgICAgICAgICAgIGlmIGFsbChzdHIoZXhjKSA9PSBtb2RlbCBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorICAgICAgICAgICAgICAgICAgICAjIFJhaXNlIGEgY29tYmluZWQgZXhjZXB0aW9uIHNvIHRoZSB1c2VyIGNhbiBzZWUgYWxsCisgICAgICAgICAgICAgICAgICAgICMgdGhlIHZhcmlvdXMgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ011bHRpcGxlIGV4Y2VwdGlvbnM6IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oc3RyKGV4YykgZm9yIGV4YyBpbiBleGNlcHRpb25zKSkpCisKKyAgICAgICAgZWxpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICdob3N0IGFuZCBwb3J0IHdhcyBub3Qgc3BlY2lmaWVkIGFuZCBubyBzb2NrIHNwZWNpZmllZCcpCisKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBOb25lIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKSBlbHNlIHNzbAorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIGNvbm5lY3Rpb24uIiIiCisgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICBpZiBmYW1pbHkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGFkZHJlc3MgZmFtaWx5JykKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgam9pbiBhZGRyZXNzcyBieSAoZmFtaWx5LCBwcm90b2NvbCkKKyAgICAgICAgICAgIGFkZHJfaW5mb3MgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgICAgICBmb3IgaWR4LCBhZGRyIGluICgoMCwgbG9jYWxfYWRkciksICgxLCByZW1vdGVfYWRkcikpOgorICAgICAgICAgICAgICAgIGlmIGFkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFkZHIsIHR1cGxlKSBhbmQgbGVuKGFkZHIpID09IDIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICcyLXR1cGxlIGlzIGV4cGVjdGVkJykKKworICAgICAgICAgICAgICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICphZGRyLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBmYW0sIF8sIHBybywgXywgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IChmYW0sIHBybykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV0gPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaW5mb3Nba2V5XVtpZHhdID0gYWRkcmVzcworCisgICAgICAgICAgICAjIGVhY2ggYWRkciBoYXMgdG8gaGF2ZSBpbmZvIGZvciBlYWNoIChmYW1pbHksIHByb3RvKSBwYWlyCisgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSBbCisgICAgICAgICAgICAgICAgKGtleSwgYWRkcl9wYWlyKSBmb3Iga2V5LCBhZGRyX3BhaXIgaW4gYWRkcl9pbmZvcy5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgbm90ICgobG9jYWxfYWRkciBhbmQgYWRkcl9wYWlyWzBdIGlzIE5vbmUpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlX2FkZHIgYW5kIGFkZHJfcGFpclsxXSBpcyBOb25lKSldCisKKyAgICAgICAgICAgIGlmIG5vdCBhZGRyX3BhaXJzX2luZm86CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FuIG5vdCBnZXQgYWRkcmVzcyBpbmZvcm1hdGlvbicpCisKKyAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yICgoZmFtaWx5LCBwcm90byksCisgICAgICAgICAgICAgKGxvY2FsX2FkZHJlc3MsIHJlbW90ZV9hZGRyZXNzKSkgaW4gYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgICAgICAgICBpZiBsb2NhbF9hZGRyOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQobG9jYWxfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiByZW1vdGVfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCByZW1vdGVfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgcl9hZGRyID0gcmVtb3RlX2FkZHJlc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHJfYWRkcikKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLAorICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBiYWNrbG9nPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdCA9IE5vbmUKKworICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgY29tcGxldGVkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgcmVzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFzc3VtZSBpdCdzIGEgYmFkIGZhbWlseS90eXBlL3Byb3RvY29sIGNvbWJpbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0cy5hcHBlbmQoc29jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV1c2VfYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICAjIERpc2FibGUgSVB2NC9JUHY2IGR1YWwgc3RhY2sgc3VwcG9ydCAoZW5hYmxlZCBieQorICAgICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgb24gTGludXgpIHdoaWNoIG1ha2VzIGEgc2luZ2xlIHNvY2tldAorICAgICAgICAgICAgICAgICAgICAjIGxpc3RlbiBvbiBib3RoIGFkZHJlc3MgZmFtaWxpZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIGFmID09IEFGX0lORVQ2IGFuZCBoYXNhdHRyKHNvY2tldCwgJ0lQUFJPVE9fSVBWNicpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQVjZfVjZPTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIuZXJybm8sICdlcnJvciB3aGlsZSBhdHRlbXB0aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJpbmQgb24gYWRkcmVzcyAlcjogJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNhLCBlcnIuc3RyZXJyb3IubG93ZXIoKSkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkID0gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgYXNzZXJ0IG5vdCB1bml2ZXJzYWxfbmV3bGluZXMsICJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIKKyAgICAgICAgYXNzZXJ0IHNoZWxsLCAic2hlbGwgbXVzdCBiZSBUcnVlIgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjbWQsIHN0ciksIGNtZAorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgY21kLCBUcnVlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBzdWJwcm9jZXNzX2V4ZWMoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgKmFyZ3MsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHNoZWxsPUZhbHNlLCBidWZzaXplPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgIGFzc2VydCBub3QgdW5pdmVyc2FsX25ld2xpbmVzLCAidW5pdmVyc2FsX25ld2xpbmVzIG11c3QgYmUgRmFsc2UiCisgICAgICAgIGFzc2VydCBub3Qgc2hlbGwsICJzaGVsbCBtdXN0IGJlIEZhbHNlIgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgYXJncywgRmFsc2UsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBkZWYgX2FkZF9jYWxsYmFjayhzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJBZGQgYSBIYW5kbGUgdG8gcmVhZHkgb3Igc2NoZWR1bGVkLiIiIgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5IYW5kbGUpLCAnQSBIYW5kbGUgaXMgcmVxdWlyZWQgaGVyZScKKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5UaW1lckhhbmRsZSk6CisgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9zY2hlZHVsZWQsIGhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisKKyAgICBkZWYgX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIkxpa2UgX2FkZF9jYWxsYmFjaygpIGJ1dCBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2soaGFuZGxlKQorICAgICAgICBzZWxmLl93cml0ZV90b19zZWxmKCkKKworICAgIGRlZiBfcnVuX29uY2Uoc2VsZik6CisgICAgICAgICIiIlJ1biBvbmUgZnVsbCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBjYWxscyBhbGwgY3VycmVudGx5IHJlYWR5IGNhbGxiYWNrcywgcG9sbHMgZm9yIEkvTywKKyAgICAgICAgc2NoZWR1bGVzIHRoZSByZXN1bHRpbmcgY2FsbGJhY2tzLCBhbmQgZmluYWxseSBzY2hlZHVsZXMKKyAgICAgICAgJ2NhbGxfbGF0ZXInIGNhbGxiYWNrcy4KKyAgICAgICAgIiIiCisgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBmcm9tIGhlYWQgb2YgcXVldWUuCisgICAgICAgIHdoaWxlIHNlbGYuX3NjaGVkdWxlZCBhbmQgc2VsZi5fc2NoZWR1bGVkWzBdLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBoZWFwcS5oZWFwcG9wKHNlbGYuX3NjaGVkdWxlZCkKKworICAgICAgICB0aW1lb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9yZWFkeToKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIGVsaWYgc2VsZi5fc2NoZWR1bGVkOgorICAgICAgICAgICAgIyBDb21wdXRlIHRoZSBkZXNpcmVkIHRpbWVvdXQuCisgICAgICAgICAgICB3aGVuID0gc2VsZi5fc2NoZWR1bGVkWzBdLl93aGVuCisgICAgICAgICAgICBkZWFkbGluZSA9IG1heCgwLCB3aGVuIC0gc2VsZi50aW1lKCkpCisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtaW4odGltZW91dCwgZGVhZGxpbmUpCisKKyAgICAgICAgIyBUT0RPOiBJbnN0cnVtZW50YXRpb24gb25seSBpbiBkZWJ1ZyBtb2RlPworICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgIGV2ZW50X2xpc3QgPSBzZWxmLl9zZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgdDEgPSBzZWxmLnRpbWUoKQorICAgICAgICBhcmdzdHIgPSAnJyBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSAnezouM2Z9Jy5mb3JtYXQodGltZW91dCkKKyAgICAgICAgaWYgdDEtdDAgPj0gMToKKyAgICAgICAgICAgIGxldmVsID0gbG9nZ2luZy5JTkZPCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgJ3BvbGwlcyB0b29rICUuM2Ygc2Vjb25kcycsIGFyZ3N0ciwgdDEtdDApCisgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXZlbnRzKGV2ZW50X2xpc3QpCisKKyAgICAgICAgIyBIYW5kbGUgJ2xhdGVyJyBjYWxsYmFja3MgdGhhdCBhcmUgcmVhZHkuCisgICAgICAgIG5vdyA9IHNlbGYudGltZSgpCisgICAgICAgIHdoaWxlIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYuX3NjaGVkdWxlZFswXQorICAgICAgICAgICAgaWYgaGFuZGxlLl93aGVuID4gbm93OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBoYW5kbGUgPSBoZWFwcS5oZWFwcG9wKHNlbGYuX3NjaGVkdWxlZCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGNhbGxiYWNrcyBhcmUgYWN0dWFsbHkgKmNhbGxlZCouCisgICAgICAgICMgQWxsIG90aGVyIHBsYWNlcyBqdXN0IGFkZCB0aGVtIHRvIHJlYWR5LgorICAgICAgICAjIE5vdGU6IFdlIHJ1biBhbGwgY3VycmVudGx5IHNjaGVkdWxlZCBjYWxsYmFja3MsIGJ1dCBub3QgYW55CisgICAgICAgICMgY2FsbGJhY2tzIHNjaGVkdWxlZCBieSBjYWxsYmFja3MgcnVuIHRoaXMgdGltZSBhcm91bmQgLS0KKyAgICAgICAgIyB0aGV5IHdpbGwgYmUgcnVuIHRoZSBuZXh0IHRpbWUgKGFmdGVyIGFub3RoZXIgSS9PIHBvbGwpLgorICAgICAgICAjIFVzZSBhbiBpZGlvbSB0aGF0IGlzIHRocmVhZHNhZmUgd2l0aG91dCB1c2luZyBsb2Nrcy4KKyAgICAgICAgbnRvZG8gPSBsZW4oc2VsZi5fcmVhZHkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG50b2RvKToKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYuX3JlYWR5LnBvcGxlZnQoKQorICAgICAgICAgICAgaWYgbm90IGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgaGFuZGxlID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weSBiL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTVmYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTY2IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKKworCitTVERJTiA9IDAKK1NURE9VVCA9IDEKK1NUREVSUiA9IDIKKworCitjbGFzcyBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCh0cmFuc3BvcnRzLlN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgICAgICBzZWxmLl9waXBlcyA9IHt9CisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzW1NURElOXSA9IE5vbmUKKyAgICAgICAgaWYgc3Rkb3V0ID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzW1NURE9VVF0gPSBOb25lCisgICAgICAgIGlmIHN0ZGVyciA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1tTVERFUlJdID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX2NhbGxzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX3N0YXJ0KGFyZ3M9YXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9leHRyYVsnc3VicHJvY2VzcyddID0gc2VsZi5fcHJvYworCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfcmVhZF9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb3RvLnBpcGUuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucGlkCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5jb2RlCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5fcGlwZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGlwZXNbZmRdLnBpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYy5raWxsKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX3Bvc3RfaW5pdChzZWxmKToKKyAgICAgICAgcHJvYyA9IHNlbGYuX3Byb2MKKyAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKyAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF93cml0ZV9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIFNURElOKSwKKyAgICAgICAgICAgICAgICBwcm9jLnN0ZGluKQorICAgICAgICBpZiBwcm9jLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhzZWxmLCBTVERPVVQpLAorICAgICAgICAgICAgICAgIHByb2Muc3Rkb3V0KQorICAgICAgICBpZiBwcm9jLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhzZWxmLCBTVERFUlIpLAorICAgICAgICAgICAgICAgIHByb2Muc3RkZXJyKQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlwZXM6CisgICAgICAgICAgICBzZWxmLl90cnlfY29ubmVjdGVkKCkKKworICAgIGRlZiBfY2FsbChzZWxmLCBjYiwgKmRhdGEpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX2NhbGxzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscy5hcHBlbmQoKGNiLCBkYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNiLCAqZGF0YSkKKworICAgIGRlZiBfdHJ5X2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfY2FsbHMgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgYWxsKHAgaXMgbm90IE5vbmUgYW5kIHAuY29ubmVjdGVkIGZvciBwIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgICAgIGZvciBjYWxsYmFjaywgZGF0YSBpbiBzZWxmLl9wZW5kaW5nX2NhbGxzOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAqZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBOb25lCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9yZXR1cm5jb2RlID0gcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9sb29wLl9zdWJwcm9jZXNzX2Nsb3NlZChzZWxmKQorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnByb2Nlc3NfZXhpdGVkKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfdHJ5X2ZpbmlzaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5pc2hlZAorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgYWxsKHAgaXMgbm90IE5vbmUgYW5kIHAuZGlzY29ubmVjdGVkCisgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisgICAgcGlwZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jLCBmZCk6CisgICAgICAgIHNlbGYucHJvYyA9IHByb2MKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBwcm9jLl9waXBlc1tmZF0gPSBzZWxmCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnBpcGUgPSB0cmFuc3BvcnQKKyAgICAgICAgc2VsZi5wcm9jLl90cnlfY29ubmVjdGVkKCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZi5mZCwgZXhjKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKFdyaXRlU3VicHJvY2Vzc1BpcGVQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCk6CisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5wcm9jLl9waXBlX2RhdGFfcmVjZWl2ZWQoc2VsZi5mZCwgZGF0YSkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weSBiL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWUxMjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiQ29uc3RhbnRzLiIiIgorCisjIEFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QsIGxvZyB3YXJuaW5ncyBhZnRlciB0aGlzIG1hbnkgd3JpdGUoKXMuCitMT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVMgPSA1CisKKyMgU2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBhY2NlcHQoKS4KK0FDQ0VQVF9SRVRSWV9ERUxBWSA9IDEKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI5Njg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDM4IEBACisiIiJFdmVudCBsb29wIGFuZCBldmVudCBsb29wIHBvbGljeS4iIiIKKworX19hbGxfXyA9IFsnQWJzdHJhY3RFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICAnQWJzdHJhY3RFdmVudExvb3AnLCAnQWJzdHJhY3RTZXJ2ZXInLAorICAgICAgICAgICAnSGFuZGxlJywgJ1RpbWVySGFuZGxlJywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wX3BvbGljeScsICdzZXRfZXZlbnRfbG9vcF9wb2xpY3knLAorICAgICAgICAgICAnZ2V0X2V2ZW50X2xvb3AnLCAnc2V0X2V2ZW50X2xvb3AnLCAnbmV3X2V2ZW50X2xvb3AnLAorICAgICAgICAgICAnZ2V0X2NoaWxkX3dhdGNoZXInLCAnc2V0X2NoaWxkX3dhdGNoZXInLAorICAgICAgICAgICBdCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgc29ja2V0CisKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgSGFuZGxlOgorICAgICIiIk9iamVjdCByZXR1cm5lZCBieSBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gJ0hhbmRsZSh7fSwge30pJy5mb3JtYXQoc2VsZi5fY2FsbGJhY2ssIHNlbGYuX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJlcyArPSAnPGNhbmNlbGxlZD4nCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBfcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaygqc2VsZi5fYXJncykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjayAlcyAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCitkZWYgbWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpOgorICAgICMgVE9ETzogSW5saW5lIHRoaXM/ICBPciBtYWtlIGl0IGEgcHJpdmF0ZSBFdmVudExvb3AgbWV0aG9kPworICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIG5vdCBhIGNhbGxiYWNrJworICAgIHJldHVybiBIYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisKKworY2xhc3MgVGltZXJIYW5kbGUoSGFuZGxlKToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgdGltZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hlbiwgY2FsbGJhY2ssIGFyZ3MpOgorICAgICAgICBhc3NlcnQgd2hlbiBpcyBub3QgTm9uZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxiYWNrLCBhcmdzKQorCisgICAgICAgIHNlbGYuX3doZW4gPSB3aGVuCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9ICdUaW1lckhhbmRsZSh7fSwge30sIHt9KScuZm9ybWF0KHNlbGYuX3doZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdzKQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXMgKz0gJzxjYW5jZWxsZWQ+JworCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fd2hlbikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW4KKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl93aGVuID09IG90aGVyLl93aGVuIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjayA9PSBvdGhlci5fY2FsbGJhY2sgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPT0gb3RoZXIuX2FyZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9PSBvdGhlci5fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBlcXVhbCA9IHNlbGYuX19lcV9fKG90aGVyKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQgaWYgZXF1YWwgaXMgTm90SW1wbGVtZW50ZWQgZWxzZSBub3QgZXF1YWwKKworCitjbGFzcyBBYnN0cmFjdFNlcnZlcjoKKyAgICAiIiJBYnN0cmFjdCBzZXJ2ZXIgcmV0dXJuZWQgYnkgY3JlYXRlX3NlcnZpY2UoKS4iIiIKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCBzZXJ2aW5nLiAgVGhpcyBsZWF2ZXMgZXhpc3RpbmcgY29ubmVjdGlvbnMgb3Blbi4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgd2FpdF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIkNvcm91dGluZSB0byB3YWl0IHVudGlsIHNlcnZpY2UgaXMgY2xvc2VkLiIiIgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcDoKKyAgICAiIiJBYnN0cmFjdCBldmVudCBsb29wLiIiIgorCisgICAgIyBSdW5uaW5nIGFuZCBzdG9wcGluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgIGRlZiBydW5fZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiUnVuIHRoZSBldmVudCBsb29wIHVudGlsIHN0b3AoKSBpcyBjYWxsZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW5fdW50aWxfY29tcGxldGUoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgIiIiUnVuIHRoZSBldmVudCBsb29wIHVudGlsIGEgRnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgZXZlbnQgbG9vcCBhcyBzb29uIGFzIHJlYXNvbmFibGUuCisKKyAgICAgICAgRXhhY3RseSBob3cgc29vbiB0aGF0IGlzIG1heSBkZXBlbmQgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQKKyAgICAgICAgbm8gbW9yZSBJL08gY2FsbGJhY2tzIHNob3VsZCBiZSBzY2hlZHVsZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhlIGV2ZW50IGxvb3AgaXMgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIGxvb3AuCisKKyAgICAgICAgVGhlIGxvb3Agc2hvdWxkIG5vdCBiZSBydW5uaW5nLgorCisgICAgICAgIFRoaXMgaXMgaWRlbXBvdGVudCBhbmQgaXJyZXZlcnNpYmxlLgorCisgICAgICAgIE5vIG90aGVyIG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTWV0aG9kcyBzY2hlZHVsaW5nIGNhbGxiYWNrcy4gIEFsbCB0aGVzZSByZXR1cm4gSGFuZGxlcy4KKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbF9sYXRlcigwLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbGxfYXQoc2VsZiwgd2hlbiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTWV0aG9kcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aHJlYWRzLgorCisgICAgZGVmIGNhbGxfc29vbl90aHJlYWRzYWZlKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW5faW5fZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmLCBleGVjdXRvcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTmV0d29yayBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBnZXRhZGRyaW5mbyhzZWxmLCBob3N0LCBwb3J0LCAqLCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldG5hbWVpbmZvKHNlbGYsIHNvY2thZGRyLCBmbGFncz0wKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfc2VydmVyKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLCBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwKKyAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSwgcmV1c2VfYWRkcmVzcz1Ob25lKToKKyAgICAgICAgIiIiQSBjb3JvdXRpbmUgd2hpY2ggY3JlYXRlcyBhIFRDUCBzZXJ2ZXIgYm91bmQgdG8gaG9zdCBhbmQgcG9ydC4KKworICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wCisgICAgICAgIHRoZSBzZXJ2aWNlLgorCisgICAgICAgIElmIGhvc3QgaXMgYW4gZW1wdHkgc3RyaW5nIG9yIE5vbmUgYWxsIGludGVyZmFjZXMgYXJlIGFzc3VtZWQKKyAgICAgICAgYW5kIGEgbGlzdCBvZiBtdWx0aXBsZSBzb2NrZXRzIHdpbGwgYmUgcmV0dXJuZWQgKG1vc3QgbGlrZWx5CisgICAgICAgIG9uZSBmb3IgSVB2NCBhbmQgYW5vdGhlciBvbmUgZm9yIElQdjYpLgorCisgICAgICAgIGZhbWlseSBjYW4gYmUgc2V0IHRvIGVpdGhlciBBRl9JTkVUIG9yIEFGX0lORVQ2IHRvIGZvcmNlIHRoZQorICAgICAgICBzb2NrZXQgdG8gdXNlIElQdjQgb3IgSVB2Ni4gSWYgbm90IHNldCBpdCB3aWxsIGJlIGRldGVybWluZWQKKyAgICAgICAgZnJvbSBob3N0IChkZWZhdWx0cyB0byBBRl9VTlNQRUMpLgorCisgICAgICAgIGZsYWdzIGlzIGEgYml0bWFzayBmb3IgZ2V0YWRkcmluZm8oKS4KKworICAgICAgICBzb2NrIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZworICAgICAgICBzb2NrZXQgb2JqZWN0LgorCisgICAgICAgIGJhY2tsb2cgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBwYXNzZWQgdG8KKyAgICAgICAgbGlzdGVuKCkgKGRlZmF1bHRzIHRvIDEwMCkuCisKKyAgICAgICAgc3NsIGNhbiBiZSBzZXQgdG8gYW4gU1NMQ29udGV4dCB0byBlbmFibGUgU1NMIG92ZXIgdGhlCisgICAgICAgIGFjY2VwdGVkIGNvbm5lY3Rpb25zLgorCisgICAgICAgIHJldXNlX2FkZHJlc3MgdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgICAgICBUSU1FX1dBSVQgc3RhdGUsIHdpdGhvdXQgd2FpdGluZyBmb3IgaXRzIG5hdHVyYWwgdGltZW91dCB0bworICAgICAgICBleHBpcmUuIElmIG5vdCBzcGVjaWZpZWQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byBUcnVlIG9uCisgICAgICAgIFVOSVguCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgUGlwZXMgYW5kIHN1YnByb2Nlc3Nlcy4KKworICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgcmVhZCBwaXBlIGluIGV2ZW50bG9vcC4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCBQcm90b2NvbCBpbnRlcmZhY2UuCisgICAgICAgIHBpcGUgaXMgZmlsZS1saWtlIG9iamVjdCBhbHJlYWR5IHN3aXRjaGVkIHRvIG5vbmJsb2NraW5nLgorICAgICAgICBSZXR1cm4gcGFpciAodHJhbnNwb3J0LCBwcm90b2NvbCksIHdoZXJlIHRyYW5zcG9ydCBzdXBwb3J0CisgICAgICAgIFJlYWRUcmFuc3BvcnQgQUJDIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICAiIiJSZWdpc3RlciB3cml0ZSBwaXBlIGluIGV2ZW50bG9vcC4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCBCYXNlUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBQaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBXcml0ZVRyYW5zcG9ydCBBQkMiIiIKKyAgICAgICAgIyBUaGUgcmVhc29uIHRvIGFjY2VwdCBmaWxlLWxpa2Ugb2JqZWN0IGluc3RlYWQgb2YganVzdCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgIyBpczogd2UgbmVlZCB0byBvd24gcGlwZSBhbmQgY2xvc2UgaXQgYXQgdHJhbnNwb3J0IGZpbmlzaGluZworICAgICAgICAjIENhbiBnb3QgY29tcGxpY2F0ZWQgZXJyb3JzIGlmIHBhc3MgZi5maWxlbm8oKSwKKyAgICAgICAgIyBjbG9zZSBmZCBpbiBwaXBlIHRyYW5zcG9ydCB0aGVuIGNsb3NlIGYgYW5kIHZpc2UgdmVyc2EuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdWJwcm9jZXNzX3NoZWxsKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNtZCwgKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksICphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFJlYWR5LWJhc2VkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLgorICAgICMgVGhlIGFkZF8qKCkgbWV0aG9kcyByZXR1cm4gTm9uZS4KKyAgICAjIFRoZSByZW1vdmVfKigpIG1ldGhvZHMgcmV0dXJuIFRydWUgaWYgc29tZXRoaW5nIHdhcyByZW1vdmVkLAorICAgICMgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZGVsZXRlLgorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDb21wbGV0aW9uIGJhc2VkIEkvTyBtZXRob2RzIHJldHVybmluZyBGdXR1cmVzLgorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuYnl0ZXMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgU2lnbmFsIGhhbmRsaW5nLgorCisgICAgZGVmIGFkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wUG9saWN5OgorICAgICIiIkFic3RyYWN0IHBvbGljeSBmb3IgYWNjZXNzaW5nIHRoZSBldmVudCBsb29wLiIiIgorCisgICAgZGVmIGdldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDaGlsZCBwcm9jZXNzZXMgaGFuZGxpbmcgKFVuaXggb25seSkuCisKKyAgICBkZWYgZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3koQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpOgorICAgICIiIkRlZmF1bHQgcG9saWN5IGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBJbiB0aGlzIHBvbGljeSwgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gZXZlbnQgbG9vcC4gIEhvd2V2ZXIsIHdlCisgICAgb25seSBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbiBldmVudCBsb29wIGJ5IGRlZmF1bHQgZm9yIHRoZSBtYWluCisgICAgdGhyZWFkOyBvdGhlciB0aHJlYWRzIGJ5IGRlZmF1bHQgaGF2ZSBubyBldmVudCBsb29wLgorCisgICAgT3RoZXIgcG9saWNpZXMgbWF5IGhhdmUgZGlmZmVyZW50IHJ1bGVzIChlLmcuIGEgc2luZ2xlIGdsb2JhbAorICAgIGV2ZW50IGxvb3AsIG9yIGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkLCBvcgorICAgIHVzaW5nIHNvbWUgb3RoZXIgbm90aW9uIG9mIGNvbnRleHQgdG8gd2hpY2ggYW4gZXZlbnQgbG9vcCBpcworICAgIGFzc29jaWF0ZWQpLgorICAgICIiIgorCisgICAgX2xvb3BfZmFjdG9yeSA9IE5vbmUKKworICAgIGNsYXNzIF9Mb2NhbCh0aHJlYWRpbmcubG9jYWwpOgorICAgICAgICBfbG9vcCA9IE5vbmUKKyAgICAgICAgX3NldF9jYWxsZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NhbCA9IHNlbGYuX0xvY2FsKCkKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgbWF5IGJlIE5vbmUgb3IgYW4gaW5zdGFuY2Ugb2YgRXZlbnRMb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuX2xvY2FsLl9sb29wIGlzIE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpKToKKyAgICAgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5uZXdfZXZlbnRfbG9vcCgpKQorICAgICAgICBhc3NlcnQgc2VsZi5fbG9jYWwuX2xvb3AgaXMgbm90IE5vbmUsIFwKKyAgICAgICAgICAgICAgICgnVGhlcmUgaXMgbm8gY3VycmVudCBldmVudCBsb29wIGluIHRocmVhZCAlci4nICUKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbG9jYWwuX2xvb3AKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLiIiIgorICAgICAgICBzZWxmLl9sb2NhbC5fc2V0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgYXNzZXJ0IGxvb3AgaXMgTm9uZSBvciBpc2luc3RhbmNlKGxvb3AsIEFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBzZWxmLl9sb2NhbC5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGV2ZW50IGxvb3AuCisKKyAgICAgICAgWW91IG11c3QgY2FsbCBzZXRfZXZlbnRfbG9vcCgpIHRvIG1ha2UgdGhpcyB0aGUgY3VycmVudCBldmVudAorICAgICAgICBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfZmFjdG9yeSgpCisKKworIyBFdmVudCBsb29wIHBvbGljeS4gIFRoZSBwb2xpY3kgaXRzZWxmIGlzIGFsd2F5cyBnbG9iYWwsIGV2ZW4gaWYgdGhlCisjIHBvbGljeSdzIHJ1bGVzIHNheSB0aGF0IHRoZXJlIGlzIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCAob3Igb3RoZXIKKyMgbm90aW9uIG9mIGNvbnRleHQpLiAgVGhlIGRlZmF1bHQgcG9saWN5IGlzIGluc3RhbGxlZCBieSB0aGUgZmlyc3QKKyMgY2FsbCB0byBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS4KK19ldmVudF9sb29wX3BvbGljeSA9IE5vbmUKKworIyBMb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBvbi10aGUtZmx5IGNyZWF0aW9uIG9mIHRoZSBldmVudCBsb29wIHBvbGljeS4KK19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisKK2RlZiBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICB3aXRoIF9sb2NrOgorICAgICAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgRGVmYXVsdEV2ZW50TG9vcFBvbGljeQorICAgICAgICAgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKworZGVmIGdldF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgICIiIlhYWCIiIgorICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOgorICAgICAgICBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgcmV0dXJuIF9ldmVudF9sb29wX3BvbGljeQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KToKKyAgICAiIiJYWFgiIiIKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgYXNzZXJ0IHBvbGljeSBpcyBOb25lIG9yIGlzaW5zdGFuY2UocG9saWN5LCBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBwb2xpY3kKKworCitkZWYgZ2V0X2V2ZW50X2xvb3AoKToKKyAgICAiIiJYWFgiIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcChsb29wKToKKyAgICAiIiJYWFgiIiIKKyAgICBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKQorCisKK2RlZiBuZXdfZXZlbnRfbG9vcCgpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpCisKKworZGVmIGdldF9jaGlsZF93YXRjaGVyKCk6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9jaGlsZF93YXRjaGVyKCkKKworCitkZWYgc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcik6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9mdXR1cmVzLnB5IGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDNlNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpAQCAtMCwwICsxLDM0MyBAQAorIiIiQSBGdXR1cmUgY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGluIFBFUCAzMTQ4LiIiIgorCitfX2FsbF9fID0gWydDYW5jZWxsZWRFcnJvcicsICdUaW1lb3V0RXJyb3InLAorICAgICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLAorICAgICAgICAgICAnRnV0dXJlJywgJ3dyYXBfZnV0dXJlJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzLl9iYXNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworIyBTdGF0ZXMgZm9yIEZ1dHVyZS4KK19QRU5ESU5HID0gJ1BFTkRJTkcnCitfQ0FOQ0VMTEVEID0gJ0NBTkNFTExFRCcKK19GSU5JU0hFRCA9ICdGSU5JU0hFRCcKKworIyBUT0RPOiBEbyB3ZSByZWFsbHkgd2FudCB0byBkZXBlbmQgb24gY29uY3VycmVudC5mdXR1cmVzIGludGVybmFscz8KK0Vycm9yID0gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlLkVycm9yCitDYW5jZWxsZWRFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcgorVGltZW91dEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLlRpbWVvdXRFcnJvcgorCitTVEFDS19ERUJVRyA9IGxvZ2dpbmcuREVCVUcgLSAxICAjIGhlYXZ5LWR1dHkgZGVidWdnaW5nCisKKworY2xhc3MgSW52YWxpZFN0YXRlRXJyb3IoRXJyb3IpOgorICAgICIiIlRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzdGF0ZS4iIiIKKyAgICAjIFRPRE86IFNob3cgdGhlIGZ1dHVyZSwgaXRzIHN0YXRlLCB0aGUgbWV0aG9kLCBhbmQgdGhlIHJlcXVpcmVkIHN0YXRlLgorCisKK2NsYXNzIF9UcmFjZWJhY2tMb2dnZXI6CisgICAgIiIiSGVscGVyIHRvIGxvZyBhIHRyYWNlYmFjayB1cG9uIGRlc3RydWN0aW9uIGlmIG5vdCBjbGVhcmVkLgorCisgICAgVGhpcyBzb2x2ZXMgYSBuYXN0eSBwcm9ibGVtIHdpdGggRnV0dXJlcyBhbmQgVGFza3MgdGhhdCBoYXZlIGFuCisgICAgZXhjZXB0aW9uIHNldDogaWYgbm9ib2R5IGFza3MgZm9yIHRoZSBleGNlcHRpb24sIHRoZSBleGNlcHRpb24gaXMKKyAgICBuZXZlciBsb2dnZWQuICBUaGlzIHZpb2xhdGVzIHRoZSBaZW4gb2YgUHl0aG9uOiAnRXJyb3JzIHNob3VsZAorICAgIG5ldmVyIHBhc3Mgc2lsZW50bHkuICBVbmxlc3MgZXhwbGljaXRseSBzaWxlbmNlZC4nCisKKyAgICBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGxvZyB0aGUgZXhjZXB0aW9uIGFzIHNvb24gYXMKKyAgICBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkOiBpZiB0aGUgY2FsbGluZyBjb2RlIGlzIHdyaXR0ZW4KKyAgICBwcm9wZXJseSwgaXQgd2lsbCBnZXQgdGhlIGV4Y2VwdGlvbiBhbmQgaGFuZGxlIGl0IHByb3Blcmx5LiAgQnV0CisgICAgd2UgKmRvKiB3YW50IHRvIGxvZyBpdCBpZiByZXN1bHQoKSBvciBleGNlcHRpb24oKSB3YXMgbmV2ZXIgY2FsbGVkCisgICAgLS0gb3RoZXJ3aXNlIGRldmVsb3BlcnMgd2FzdGUgYSBsb3Qgb2YgdGltZSB3b25kZXJpbmcgd2h5IHRoZWlyCisgICAgYnVnZ3kgY29kZSBmYWlscyBzaWxlbnRseS4KKworICAgIEFuIGVhcmxpZXIgYXR0ZW1wdCBhZGRlZCBhIF9fZGVsX18oKSBtZXRob2QgdG8gdGhlIEZ1dHVyZSBjbGFzcworICAgIGl0c2VsZiwgYnV0IHRoaXMgYmFja2ZpcmVkIGJlY2F1c2UgdGhlIHByZXNlbmNlIG9mIF9fZGVsX18oKQorICAgIHByZXZlbnRzIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGJyZWFraW5nIGN5Y2xlcy4gIEEgd2F5IG91dCBvZgorICAgIHRoaXMgY2F0Y2gtMjIgaXMgdG8gYXZvaWQgaGF2aW5nIGEgX19kZWxfXygpIG1ldGhvZCBvbiB0aGUgRnV0dXJlCisgICAgY2xhc3MgaXRzZWxmLCBidXQgaW5zdGVhZCB0byBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgaGVscGVyIG9iamVjdAorICAgIHdpdGggYSBfX2RlbF9fKCkgbWV0aG9kIHRoYXQgbG9ncyB0aGUgdHJhY2ViYWNrLCB3aGVyZSB3ZSBlbnN1cmUKKyAgICB0aGF0IHRoZSBoZWxwZXIgb2JqZWN0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gY3ljbGVzLCBhbmQgb25seSB0aGUKKyAgICBGdXR1cmUgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgorCisgICAgVGhlIGhlbHBlciBvYmplY3QgaXMgYWRkZWQgd2hlbiBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkLiAgV2hlbgorICAgIHRoZSBGdXR1cmUgaXMgY29sbGVjdGVkLCBhbmQgdGhlIGhlbHBlciBpcyBwcmVzZW50LCB0aGUgaGVscGVyCisgICAgb2JqZWN0IGlzIGFsc28gY29sbGVjdGVkLCBhbmQgaXRzIF9fZGVsX18oKSBtZXRob2Qgd2lsbCBsb2cgdGhlCisgICAgdHJhY2ViYWNrLiAgV2hlbiB0aGUgRnV0dXJlJ3MgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgbWV0aG9kIGlzCisgICAgY2FsbGVkIChhbmQgYSBoZWxwZXIgb2JqZWN0IGlzIHByZXNlbnQpLCBpdCByZW1vdmVzIHRoZSB0aGUgaGVscGVyCisgICAgb2JqZWN0LCBhZnRlciBjYWxsaW5nIGl0cyBjbGVhcigpIG1ldGhvZCB0byBwcmV2ZW50IGl0IGZyb20KKyAgICBsb2dnaW5nLgorCisgICAgT25lIGRvd25zaWRlIGlzIHRoYXQgd2UgZG8gYSBmYWlyIGFtb3VudCBvZiB3b3JrIHRvIGV4dHJhY3QgdGhlCisgICAgdHJhY2ViYWNrIGZyb20gdGhlIGV4Y2VwdGlvbiwgZXZlbiB3aGVuIGl0IGlzIG5ldmVyIGxvZ2dlZC4gIEl0CisgICAgd291bGQgc2VlbSBjaGVhcGVyIHRvIGp1c3Qgc3RvcmUgdGhlIGV4Y2VwdGlvbiBvYmplY3QsIGJ1dCB0aGF0CisgICAgcmVmZXJlbmNlcyB0aGUgdHJhY2ViYWNrLCB3aGljaCByZWZlcmVuY2VzIHN0YWNrIGZyYW1lcywgd2hpY2ggbWF5CisgICAgcmVmZXJlbmNlIHRoZSBGdXR1cmUsIHdoaWNoIHJlZmVyZW5jZXMgdGhlIF9UcmFjZWJhY2tMb2dnZXIsIGFuZAorICAgIHRoZW4gdGhlIF9UcmFjZWJhY2tMb2dnZXIgd291bGQgYmUgaW5jbHVkZWQgaW4gYSBjeWNsZSwgd2hpY2ggaXMKKyAgICB3aGF0IHdlJ3JlIHRyeWluZyB0byBhdm9pZCEgIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgZG9uJ3QKKyAgICBpbW1lZGlhdGVseSBmb3JtYXQgdGhlIGV4Y2VwdGlvbjsgd2Ugb25seSBkbyB0aGUgd29yayB3aGVuCisgICAgYWN0aXZhdGUoKSBpcyBjYWxsZWQsIHdoaWNoIGNhbGwgaXMgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwgdGhlCisgICAgRnV0dXJlJ3MgY2FsbGJhY2tzIGhhdmUgcnVuLiAgU2luY2UgdXN1YWxseSBhIEZ1dHVyZSBoYXMgYXQgbGVhc3QKKyAgICBvbmUgY2FsbGJhY2sgKHR5cGljYWxseSBzZXQgYnkgJ3lpZWxkIGZyb20nKSBhbmQgdXN1YWxseSB0aGF0CisgICAgY2FsbGJhY2sgZXh0cmFjdHMgdGhlIGNhbGxiYWNrLCB0aGVyZWJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvCisgICAgZm9ybWF0IHRoZSBleGNlcHRpb24uCisKKyAgICBQUy4gSSBkb24ndCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgc29sdXRpb24uICBJIGZpcnN0IGhlYXJkIG9mIGl0CisgICAgaW4gYSBkaXNjdXNzaW9uIGFib3V0IGNsb3NpbmcgZmlsZXMgd2hlbiB0aGV5IGFyZSBjb2xsZWN0ZWQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ2V4YycsICd0YiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9IE5vbmUKKworICAgIGRlZiBhY3RpdmF0ZShzZWxmKToKKyAgICAgICAgZXhjID0gc2VsZi5leGMKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5leGMgPSBOb25lCisgICAgICAgICAgICBzZWxmLnRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oZXhjLl9fY2xhc3NfXywgZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy5fX3RyYWNlYmFja19fKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgc2VsZi50YiA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRiOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGdXR1cmUvVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZDpcbiVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHNlbGYudGIpKQorCisKK2NsYXNzIEZ1dHVyZToKKyAgICAiIiJUaGlzIGNsYXNzIGlzICphbG1vc3QqIGNvbXBhdGlibGUgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorCisgICAgRGlmZmVyZW5jZXM6CisKKyAgICAtIHJlc3VsdCgpIGFuZCBleGNlcHRpb24oKSBkbyBub3QgdGFrZSBhIHRpbWVvdXQgYXJndW1lbnQgYW5kCisgICAgICByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LgorCisgICAgLSBDYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGFkZF9kb25lX2NhbGxiYWNrKCkgYXJlIGFsd2F5cyBjYWxsZWQKKyAgICAgIHZpYSB0aGUgZXZlbnQgbG9vcCdzIGNhbGxfc29vbl90aHJlYWRzYWZlKCkuCisKKyAgICAtIFRoaXMgY2xhc3MgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgd2FpdCgpIGFuZCBhc19jb21wbGV0ZWQoKQorICAgICAgbWV0aG9kcyBpbiB0aGUgY29uY3VycmVudC5mdXR1cmVzIHBhY2thZ2UuCisKKyAgICAoSW4gUHl0aG9uIDMuNCBvciBsYXRlciB3ZSBtYXkgYmUgYWJsZSB0byB1bmlmeSB0aGUgaW1wbGVtZW50YXRpb25zLikKKyAgICAiIiIKKworICAgICMgQ2xhc3MgdmFyaWFibGVzIHNlcnZpbmcgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIHZhcmlhYmxlcy4KKyAgICBfc3RhdGUgPSBfUEVORElORworICAgIF9yZXN1bHQgPSBOb25lCisgICAgX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICBfbG9vcCA9IE5vbmUKKworICAgIF9ibG9ja2luZyA9IEZhbHNlICAjIHByb3BlciB1c2Ugb2YgZnV0dXJlICh5aWVsZCB2cyB5aWVsZCBmcm9tKQorCisgICAgX3RiX2xvZ2dlciA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJJbml0aWFsaXplIHRoZSBmdXR1cmUuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGV2ZW50X2xvb3AgYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBldmVudAorICAgICAgICBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSBmdXR1cmUuIElmIGl0J3Mgbm90IHByb3ZpZGVkLCB0aGUgZnV0dXJlIHVzZXMKKyAgICAgICAgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlcyArPSAnPGV4Y2VwdGlvbj17IXJ9PicuZm9ybWF0KHNlbGYuX2V4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8cmVzdWx0PXshcn0+Jy5mb3JtYXQoc2VsZi5fcmVzdWx0KQorICAgICAgICBlbGlmIHNlbGYuX2NhbGxiYWNrczoKKyAgICAgICAgICAgIHNpemUgPSBsZW4oc2VsZi5fY2FsbGJhY2tzKQorICAgICAgICAgICAgaWYgc2l6ZSA+IDI6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8e30sIFt7fSwgPHt9IG1vcmU+LCB7fV0+Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlLCBzZWxmLl9jYWxsYmFja3NbMF0sCisgICAgICAgICAgICAgICAgICAgIHNpemUtMiwgc2VsZi5fY2FsbGJhY2tzWy0xXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8e30sIHt9PicuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmLl9jYWxsYmFja3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgKz0gJzx7fT4nLmZvcm1hdChzZWxmLl9zdGF0ZSkKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBGYWxzZS4gIE90aGVyd2lzZSwKKyAgICAgICAgY2hhbmdlIHRoZSBmdXR1cmUncyBzdGF0ZSB0byBjYW5jZWxsZWQsIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kCisgICAgICAgIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfQ0FOQ0VMTEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IEFzayB0aGUgZXZlbnQgbG9vcCB0byBjYWxsIGFsbCBjYWxsYmFja3MuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBBbHNvCisgICAgICAgIGNsZWFycyB0aGUgY2FsbGJhY2sgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGNhbGxiYWNrcyA9IHNlbGYuX2NhbGxiYWNrc1s6XQorICAgICAgICBpZiBub3QgY2FsbGJhY2tzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gW10KKyAgICAgICAgZm9yIGNhbGxiYWNrIGluIGNhbGxiYWNrczoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCBzZWxmKQorCisgICAgZGVmIGNhbmNlbGxlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRAorCisgICAgIyBEb24ndCBpbXBsZW1lbnQgcnVubmluZygpOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4Njk5CisKKyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIERvbmUgbWVhbnMgZWl0aGVyIHRoYXQgYSByZXN1bHQgLyBleGNlcHRpb24gYXJlIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUKKyAgICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkcKKworICAgIGRlZiByZXN1bHQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyBDYW5jZWxsZWRFcnJvci4gIElmIHRoZQorICAgICAgICBmdXR1cmUncyByZXN1bHQgaXNuJ3QgeWV0IGF2YWlsYWJsZSwgcmFpc2VzIEludmFsaWRTdGF0ZUVycm9yLiAgSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdSZXN1bHQgaXMgbm90IHJlYWR5LicpCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0CisKKyAgICBkZWYgZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgTm9uZSBpZiBubyBleGNlcHRpb24gd2FzIHNldCkgaXMgcmV0dXJuZWQgb25seSBpZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzCisgICAgICAgIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdFeGNlcHRpb24gaXMgbm90IHNldC4nKQorICAgICAgICBpZiBzZWxmLl90Yl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uCisKKyAgICBkZWYgYWRkX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAiIiJBZGQgYSBjYWxsYmFjayB0byBiZSBydW4gd2hlbiB0aGUgZnV0dXJlIGJlY29tZXMgZG9uZS4KKworICAgICAgICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgZnV0dXJlIG9iamVjdC4gSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIGlzIGNhbGxlZCwgdGhlIGNhbGxiYWNrIGlzCisgICAgICAgIHNjaGVkdWxlZCB3aXRoIGNhbGxfc29vbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oZm4sIHNlbGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3MuYXBwZW5kKGZuKQorCisgICAgIyBOZXcgbWV0aG9kIG5vdCBpbiBQRVAgMzE0OC4KKworICAgIGRlZiByZW1vdmVfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIlJlbW92ZSBhbGwgaW5zdGFuY2VzIG9mIGEgY2FsbGJhY2sgZnJvbSB0aGUgImNhbGwgd2hlbiBkb25lIiBsaXN0LgorCisgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbHRlcmVkX2NhbGxiYWNrcyA9IFtmIGZvciBmIGluIHNlbGYuX2NhbGxiYWNrcyBpZiBmICE9IGZuXQorICAgICAgICByZW1vdmVkX2NvdW50ID0gbGVuKHNlbGYuX2NhbGxiYWNrcykgLSBsZW4oZmlsdGVyZWRfY2FsbGJhY2tzKQorICAgICAgICBpZiByZW1vdmVkX2NvdW50OgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gZmlsdGVyZWRfY2FsbGJhY2tzCisgICAgICAgIHJldHVybiByZW1vdmVkX2NvdW50CisKKyAgICAjIFNvLWNhbGxlZCBpbnRlcm5hbCBtZXRob2RzIChub3RlOiBubyBzZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKCkpLgorCisgICAgZGVmIHNldF9yZXN1bHQoc2VsZiwgcmVzdWx0KToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBpdHMgcmVzdWx0LgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCd7fTogeyFyfScuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmKSkKKyAgICAgICAgc2VsZi5fcmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYuX3N0YXRlID0gX0ZJTklTSEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGFuIGV4Y2VwdGlvbi4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBfVHJhY2ViYWNrTG9nZ2VyKGV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgIyBBcnJhbmdlIGZvciB0aGUgbG9nZ2VyIHRvIGJlIGFjdGl2YXRlZCBhZnRlciBhbGwgY2FsbGJhY2tzCisgICAgICAgICMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gY2FsbCByZXN1bHQoKSBvciBleGNlcHRpb24oKS4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fdGJfbG9nZ2VyLmFjdGl2YXRlKQorCisgICAgIyBUcnVseSBpbnRlcm5hbCBtZXRob2RzLgorCisgICAgZGVmIF9jb3B5X3N0YXRlKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIGNvcHkgc3RhdGUgZnJvbSBhbm90aGVyIEZ1dHVyZS4KKworICAgICAgICBUaGUgb3RoZXIgRnV0dXJlIG1heSBiZSBhIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgb3RoZXIuZG9uZSgpCisgICAgICAgIGlmIHNlbGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKQorICAgICAgICBpZiBvdGhlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG90aGVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3RoZXIucmVzdWx0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9ibG9ja2luZyA9IFRydWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYgICMgVGhpcyB0ZWxscyBUYXNrIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24uCisgICAgICAgIGFzc2VydCBzZWxmLmRvbmUoKSwgInlpZWxkIGZyb20gd2Fzbid0IHVzZWQgd2l0aCBmdXR1cmUiCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdCgpICAjIE1heSByYWlzZSB0b28uCisKKworZGVmIHdyYXBfZnV0dXJlKGZ1dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgb2JqZWN0LiIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnV0LCBGdXR1cmUpOgorICAgICAgICByZXR1cm4gZnV0CisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnV0LCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKSwgXAorICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSBpcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChmdXQpCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBuZXdfZnV0dXJlID0gRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfY2hlY2tfY2FuY2VsX290aGVyKGYpOgorICAgICAgICBpZiBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBuZXdfZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9jaGVja19jYW5jZWxfb3RoZXIpCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKAorICAgICAgICBsYW1iZGEgZnV0dXJlOiBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKAorICAgICAgICAgICAgbmV3X2Z1dHVyZS5fY29weV9zdGF0ZSwgZnV0KSkKKyAgICByZXR1cm4gbmV3X2Z1dHVyZQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9ja3MucHkgYi9MaWIvYXN5bmNpby9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9ja3MucHkKQEAgLTAsMCArMSw0MzMgQEAKKyIiIlN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiIiIgorCitfX2FsbF9fID0gWydMb2NrJywgJ0V2ZW50JywgJ0NvbmRpdGlvbicsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCisKKworY2xhc3MgTG9jazoKKyAgICAiIiJQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQKKyAgICBieSBhIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUKKyAgICBvZiB0d28gc3RhdGVzLCAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsCisgICAgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpCisgICAgY2hhbmdlcyB0aGUgc3RhdGUgdG8gbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUKKyAgICBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbgorICAgIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4gdGhlIGFjcXVpcmUoKSBjYWxsCisgICAgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kIHNob3VsZCBvbmx5CisgICAgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbgorICAgIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIHdpbGwgYmUgcmFpc2VkLgorCisgICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvcgorICAgIHRoZSBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhCisgICAgcmVsZWFzZSgpIGNhbGwgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoCisgICAgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgYWNxdWlyZSgpIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggJ3lpZWxkIGZyb20nLgorCisgICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICAnKHlpZWxkIGZyb20gbG9jayknCisgICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgICBVc2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgLi4uCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAgLi4uCisKKyAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZToKKworICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBsb2NrIGlzIGFjcXVpcmVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9ja2VkCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBsb2NrLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvCisgICAgICAgIGxvY2tlZCBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIG5vdCBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgbG9jay4KKworICAgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uCisgICAgICAgIElmIGFueSBvdGhlciBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZQorICAgICAgICB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgICAgICMgV2FrZSB1cCB0aGUgZmlyc3Qgd2FpdGVyIHdobyBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xvY2sgaXMgbm90IGFjcXVpcmVkLicpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgorCisKK2NsYXNzIEV2ZW50OgorICAgICIiIkFuIEV2ZW50IGltcGxlbWVudGF0aW9uLCBvdXIgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuRXZlbnQuCisKKyAgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0CisgICAgdG8gdHJ1ZSB3aXRoIHRoZSBzZXQoKSBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIGNsZWFyKCkgbWV0aG9kLgorICAgIFRoZSB3YWl0KCkgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcyBpbml0aWFsbHkKKyAgICBmYWxzZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdzZXQnIGlmIHNlbGYuX3ZhbHVlIGVsc2UgJ3Vuc2V0JworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBpc19zZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgZGVmIHNldChzZWxmKToKKyAgICAgICAgIiIiU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSB0cnVlIGFyZSBhd2FrZW5lZC4gQ29yb3V0aW5lIHRoYXQgY2FsbCB3YWl0KCkgb25jZSB0aGUgZmxhZyBpcworICAgICAgICB0cnVlIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgICB3YWl0KCkgd2lsbCBibG9jayB1bnRpbCBzZXQoKSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbCBmbGFnCisgICAgICAgIHRvIHRydWUgYWdhaW4uIiIiCisgICAgICAgIHNlbGYuX3ZhbHVlID0gRmFsc2UKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlIG9uIGVudHJ5LCByZXR1cm4gVHJ1ZQorICAgICAgICBpbW1lZGlhdGVseS4gIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMKKyAgICAgICAgc2V0KCkgdG8gc2V0IHRoZSBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisKK2NsYXNzIENvbmRpdGlvbjoKKyAgICAiIiJBIENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbiwgb3VyIGVxdWl2YWxlbnQgdG8gdGhyZWFkaW5nLkNvbmRpdGlvbi4KKworICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgICBhbGxvd3Mgb25lIG9yIG1vcmUgY29yb3V0aW5lcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKKyAgICBjb3JvdXRpbmUuCisKKyAgICBBIG5ldyBMb2NrIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgICAgICAjIExvY2sgYXMgYW4gYXR0cmlidXRlIGFzIGluIHRocmVhZGluZy5Db25kaXRpb24uCisgICAgICAgIGxvY2sgPSBMb2NrKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKyAgICAgICAgIyBFeHBvcnQgdGhlIGxvY2sncyBsb2NrZWQoKSwgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkgbWV0aG9kcy4KKyAgICAgICAgc2VsZi5sb2NrZWQgPSBsb2NrLmxvY2tlZAorICAgICAgICBzZWxmLmFjcXVpcmUgPSBsb2NrLmFjcXVpcmUKKyAgICAgICAgc2VsZi5yZWxlYXNlID0gbG9jay5yZWxlYXNlCisKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5sb2NrZWQoKSBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgbm90aWZpZWQuCisKKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzCisgICAgICAgIG1ldGhvZCBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCByZWxlYXNlcyB0aGUgdW5kZXJseWluZyBsb2NrLCBhbmQgdGhlbiBibG9ja3MKKyAgICAgICAgdW50aWwgaXQgaXMgYXdha2VuZWQgYnkgYSBub3RpZnkoKSBvciBub3RpZnlfYWxsKCkgY2FsbCBmb3IKKyAgICAgICAgdGhlIHNhbWUgY29uZGl0aW9uIHZhcmlhYmxlIGluIGFub3RoZXIgY29yb3V0aW5lLiAgT25jZQorICAgICAgICBhd2FrZW5lZCwgaXQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgd2FpdCBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBrZWVwX2xvY2sgPSBUcnVlCisgICAgICAgIHNlbGYucmVsZWFzZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKKyAgICAgICAgICAgIGtlZXBfbG9jayA9IEZhbHNlICAjIFByZXZlbnQgeWllbGQgaW4gZmluYWxseSBjbGF1c2UuCisgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYga2VlcF9sb2NrOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdF9mb3Ioc2VsZiwgcHJlZGljYXRlKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCBhIHByZWRpY2F0ZSBiZWNvbWVzIHRydWUuCisKKyAgICAgICAgVGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZXN1bHQgd2lsbCBiZQorICAgICAgICBpbnRlcnByZXRlZCBhcyBhIGJvb2xlYW4gdmFsdWUuICBUaGUgZmluYWwgcHJlZGljYXRlIHZhbHVlIGlzCisgICAgICAgIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICB3aGlsZSBub3QgcmVzdWx0OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIG5vdGlmeShzZWxmLCBuPTEpOgorICAgICAgICAiIiJCeSBkZWZhdWx0LCB3YWtlIHVwIG9uZSBjb3JvdXRpbmUgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbiwgaWYgYW55LgorICAgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kCisgICAgICAgIGlzIGNhbGxlZCwgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHdha2VzIHVwIGF0IG1vc3QgbiBvZiB0aGUgY29yb3V0aW5lcyB3YWl0aW5nIGZvciB0aGUKKyAgICAgICAgY29uZGl0aW9uIHZhcmlhYmxlOyBpdCBpcyBhIG5vLW9wIGlmIG5vIGNvcm91dGluZXMgYXJlIHdhaXRpbmcuCisKKyAgICAgICAgTm90ZTogYW4gYXdha2VuZWQgY29yb3V0aW5lIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBmcm9tIGl0cworICAgICAgICB3YWl0KCkgY2FsbCB1bnRpbCBpdCBjYW4gcmVhY3F1aXJlIHRoZSBsb2NrLiBTaW5jZSBub3RpZnkoKSBkb2VzCisgICAgICAgIG5vdCByZWxlYXNlIHRoZSBsb2NrLCBpdHMgY2FsbGVyIHNob3VsZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2snKQorCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgaWYgaWR4ID49IG46CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgIGRlZiBub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICAiIiJXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uIFRoaXMgbWV0aG9kIGFjdHMKKyAgICAgICAgbGlrZSBub3RpZnkoKSwgYnV0IHdha2VzIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMgaW5zdGVhZCBvZiBvbmUuIElmIHRoZQorICAgICAgICBjYWxsaW5nIHRocmVhZCBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLAorICAgICAgICBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLm5vdGlmeShsZW4oc2VsZi5fd2FpdGVycykpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19leGl0X18oKmFyZ3MpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBTZW1hcGhvcmU6CisgICAgIiIiQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBBIHNlbWFwaG9yZSBtYW5hZ2VzIGFuIGludGVybmFsIGNvdW50ZXIgd2hpY2ggaXMgZGVjcmVtZW50ZWQgYnkgZWFjaAorICAgIGFjcXVpcmUoKSBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIHJlbGVhc2UoKSBjYWxsLiBUaGUgY291bnRlcgorICAgIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIGFjcXVpcmUoKSBmaW5kcyB0aGF0IGl0IGlzIHplcm8sIGl0IGJsb2NrcywKKyAgICB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzIHJlbGVhc2UoKS4KKworICAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKKyAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbAorICAgIGNvdW50ZXI7IGl0IGRlZmF1bHRzIHRvIDEuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gMCwKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTZW1hcGhvcmUgaW5pdGlhbCB2YWx1ZSBtdXN0IGJlID49IDAiKQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9ICh2YWx1ZSA9PSAwKQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLl9sb2NrZWQgZWxzZSAndW5sb2NrZWQsdmFsdWU6e30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlKQorICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2tlZAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBhY3F1aXJlKHNlbGYpOgorICAgICAgICAiIiJBY3F1aXJlIGEgc2VtYXBob3JlLgorCisgICAgICAgIElmIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIGxhcmdlciB0aGFuIHplcm8gb24gZW50cnksCisgICAgICAgIGRlY3JlbWVudCBpdCBieSBvbmUgYW5kIHJldHVybiBUcnVlIGltbWVkaWF0ZWx5LiAgSWYgaXQgaXMKKyAgICAgICAgemVybyBvbiBlbnRyeSwgYmxvY2ssIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgaGFzCisgICAgICAgIGNhbGxlZCByZWxlYXNlKCkgdG8gbWFrZSBpdCBsYXJnZXIgdGhhbiAwLCBhbmQgdGhlbiByZXR1cm4KKyAgICAgICAgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXJzIGFuZCBzZWxmLl92YWx1ZSA+IDA6CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4KKyAgICAgICAgV2hlbiBpdCB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl92YWx1ZSArPSAxCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVE9ETzogVGhpcyBpcyBxdWVzdGlvbmFibGUuICBIb3cgZG8gd2Uga25vdyB0aGUgdXNlciBhY3R1YWxseQorICAgICAgICAjIHdyb3RlICJ3aXRoICh5aWVsZCBmcm9tIHNlbWEpIiBpbnN0ZWFkIG9mICJ3aXRoIHNlbWEiPworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgorCisKK2NsYXNzIEJvdW5kZWRTZW1hcGhvcmUoU2VtYXBob3JlKToKKyAgICAiIiJBIGJvdW5kZWQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhpcyByYWlzZXMgVmFsdWVFcnJvciBpbiByZWxlYXNlKCkgaWYgaXQgd291bGQgaW5jcmVhc2UgdGhlIHZhbHVlCisgICAgYWJvdmUgdGhlIGluaXRpYWwgdmFsdWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fYm91bmRfdmFsdWUgPSB2YWx1ZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHZhbHVlLCBsb29wPWxvb3ApCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdmFsdWUgPj0gc2VsZi5fYm91bmRfdmFsdWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCb3VuZGVkU2VtYXBob3JlIHJlbGVhc2VkIHRvbyBtYW55IHRpbWVzJykKKyAgICAgICAgc3VwZXIoKS5yZWxlYXNlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvZy5weSBiL0xpYi9hc3luY2lvL2xvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E3MDc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vbG9nLnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiTG9nZ2luZyBjb25maWd1cmF0aW9uLiIiIgorCitpbXBvcnQgbG9nZ2luZworCisKKyMgTmFtZSB0aGUgbG9nZ2VyIGFmdGVyIHRoZSBwYWNrYWdlLgorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19wYWNrYWdlX18pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMjZiOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDM2MCBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHByb2FjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0EgcHJvYWN0b3IgaXMgYSAibm90aWZ5LW9uLWNvbXBsZXRpb24iIG11bHRpcGxleGVyLiAgQ3VycmVudGx5IGEKK3Byb2FjdG9yIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gV2luZG93cyB3aXRoIElPQ1AuCisiIiIKKworaW1wb3J0IHNvY2tldAorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQodHJhbnNwb3J0cy5CYXNlVHJhbnNwb3J0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBwaXBlIGFuZCBzb2NrZXQgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fc2V0X2V4dHJhKHNvY2spCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgY2FsbGVkLgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5hdHRhY2goc2VsZikKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gc29jaworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5jYW5jZWwoKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBYWFggSWYgdGhlcmUgaXMgYSBwZW5kaW5nIG92ZXJsYXBwZWQgcmVhZCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICMgZW5kIHRoZW4gaXQgbWF5IGZhaWwgd2l0aCBFUlJPUl9ORVROQU1FX0RFTEVURUQgaWYgd2UKKyAgICAgICAgICAgICMganVzdCBjbG9zZSBvdXIgZW5kLiAgRmlyc3QgY2FsbGluZyBzaHV0ZG93bigpIHNlZW1zIHRvCisgICAgICAgICAgICAjIGN1cmUgaXQsIGJ1dCBtYXliZSB1c2luZyBEaXNjb25uZWN0RXgoKSB3b3VsZCBiZSBiZXR0ZXIuCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3NvY2ssICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLmRldGFjaChzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworCitjbGFzcyBfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciByZWFkIHBpcGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhLCBzZXJ2ZXIpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wX3JlYWRpbmcpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9jbG9zaW5nLCAnQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF1c2VkLCAnQWxyZWFkeSBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BhdXNlZCwgJ05vdCBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcF9yZWFkaW5nLCBzZWxmLl9yZWFkX2Z1dCkKKworICAgIGRlZiBfbG9vcF9yZWFkaW5nKHNlbGYsIGZ1dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBmdXQgb3IgKHNlbGYuX3JlYWRfZnV0IGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZykKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgICAgICBkYXRhID0gZnV0LnJlc3VsdCgpICAjIGRlbGl2ZXIgZGF0YSBsYXRlciBpbiAiZmluYWxseSIgY2xhdXNlCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgIyBzaW5jZSBjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCB3ZSBpZ25vcmUgYW55IHJlYWQgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGRhdGEgPT0gYicnOgorICAgICAgICAgICAgICAgICMgd2UgZ290IGVuZC1vZi1maWxlIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3BfcmVhZGluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3Igd3JpdGUgcGlwZXMuIiIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ3dyaXRlX2VvZigpIGFscmVhZHkgY2FsbGVkJykKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3Bfd3JpdGluZygpCisKKyAgICBkZWYgX2xvb3Bfd3JpdGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgZiBpcyBzZWxmLl93cml0ZV9mdXQKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZi5yZXN1bHQoKQorICAgICAgICAgICAgZGF0YSA9IGInJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnNlbmQoc2VsZi5fc29jaywgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3dyaXRpbmcpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVzZXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKworY2xhc3MgX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBkdXBsZXggcGlwZXMuIiIiCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBjb25uZWN0ZWQgc29ja2V0cy4iIiIKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZyBvciBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisKK2NsYXNzIEJhc2VQcm9hY3RvckV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9hY3Rvcik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHByb2FjdG9yOiAlcycsIHByb2FjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBwcm9hY3RvcgorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHByb2FjdG9yICAgIyBjb252ZW5pZW50IGFsaWFzCisgICAgICAgIHByb2FjdG9yLnNldF9sb29wKHNlbGYpCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIGNoZWNrX2Zvcl9oYW5ndXA9VHJ1ZSk6CisgICAgICAgIGlmIGNoZWNrX2Zvcl9oYW5ndXA6CisgICAgICAgICAgICAjIFdlIHdhbnQgY29ubmVjdGlvbl9sb3N0KCkgdG8gYmUgY2FsbGVkIHdoZW4gb3RoZXIgZW5kIGNsb3NlcworICAgICAgICAgICAgcmV0dXJuIF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBvdGhlciBlbmQgY2xvc2VzIHdlIG1heSBub3Qgbm90aWNlIGZvciBhIGxvbmcgdGltZQorICAgICAgICAgICAgcmV0dXJuIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICAgICAgc2VsZi5fcHJvYWN0b3IuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnJlY3Yoc29jaywgbikKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5zZW5kKHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmNhbGxfc29vbihzZWxmLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiBfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZiwgZj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmLnJlc3VsdCgpICAjIG1heSByYWlzZQorICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYid4JykKKworICAgIGRlZiBfc3RhcnRfc2VydmluZyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2w9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90IHNzbCwgJ0lvY3BFdmVudExvb3AgaXMgaW5jb21wYXRpYmxlIHdpdGggU1NMLicKKworICAgICAgICBkZWYgbG9vcChmPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBmLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNvY2suZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0FjY2VwdCBmYWlsZWQnKQorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3ApCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcCkKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgIHBhc3MgICAgIyBYWFggaGFyZCB3b3JrIGN1cnJlbnRseSBkb25lIGluIHBvbGwKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9wcm9hY3Rvci5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIHNvY2suY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5IGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTRmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkKQEAgLTAsMCArMSwxMjggQEAKKyIiIkFic3RyYWN0IFByb3RvY29sIGNsYXNzLiIiIgorCitfX2FsbF9fID0gWydQcm90b2NvbCcsICdEYXRhZ3JhbVByb3RvY29sJ10KKworCitjbGFzcyBCYXNlUHJvdG9jb2w6CisgICAgIiIiQUJDIGZvciBiYXNlIHByb3RvY29sIGNsYXNzLgorCisgICAgVXN1YWxseSB1c2VyIGltcGxlbWVudHMgcHJvdG9jb2xzIHRoYXQgZGVyaXZlZCBmcm9tIEJhc2VQcm90b2NvbAorICAgIGxpa2UgUHJvdG9jb2wgb3IgUHJvY2Vzc1Byb3RvY29sLgorCisgICAgVGhlIG9ubHkgY2FzZSB3aGVuIEJhc2VQcm90b2NvbCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaXMKKyAgICB3cml0ZS1vbmx5IHRyYW5zcG9ydCBsaWtlIHdyaXRlIHBpcGUKKyAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSB0cmFuc3BvcnQgcmVwcmVzZW50aW5nIHRoZSBwaXBlIGNvbm5lY3Rpb24uCisgICAgICAgIFRvIHJlY2VpdmUgZGF0YSwgd2FpdCBmb3IgZGF0YV9yZWNlaXZlZCgpIGNhbGxzLgorICAgICAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCwgY29ubmVjdGlvbl9sb3N0KCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCBvciBjbG9zZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgTm9uZSAodGhlIGxhdHRlcgorICAgICAgICBtZWFuaW5nIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICAgICAgIGFib3J0ZWQgb3IgY2xvc2VkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKworICAgICAgICBQYXVzZSBhbmQgcmVzdW1lIGNhbGxzIGFyZSBwYWlyZWQgLS0gcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZAorICAgICAgICBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBnb2VzIHN0cmljdGx5IG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyaworICAgICAgICAoZXZlbiBpZiBzdWJzZXF1ZW50IHdyaXRlcyBpbmNyZWFzZXMgdGhlIGJ1ZmZlciBzaXplIGV2ZW4KKyAgICAgICAgbW9yZSksIGFuZCBldmVudHVhbGx5IHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKKyAgICAgICAgYnVmZmVyIHNpemUgcmVhY2hlcyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgICAgICAgcGF1c2Vfd3JpdGluZygpIGlzIG5vdCBjYWxsZWQgLS0gaXQgbXVzdCBnbyBzdHJpY3RseSBvdmVyLgorICAgICAgICBDb252ZXJzZWx5LCByZXN1bWVfd3JpdGluZygpIGlzIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgc2l6ZSBpcworICAgICAgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICAgICAgIGFyZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGdvIGFzIGV4cGVjdGVkIHdoZW4gZWl0aGVyCisgICAgICAgIG1hcmsgaXMgemVyby4KKworICAgICAgICBOT1RFOiBUaGlzIGlzIHRoZSBvbmx5IFByb3RvY29sIGNhbGxiYWNrIHRoYXQgaXMgbm90IGNhbGxlZAorICAgICAgICB0aHJvdWdoIEV2ZW50TG9vcC5jYWxsX3Nvb24oKSAtLSBpZiBpdCB3ZXJlLCBpdCB3b3VsZCBoYXZlIG5vCisgICAgICAgIGVmZmVjdCB3aGVuIGl0J3MgbW9zdCBuZWVkZWQgKHdoZW4gdGhlIGFwcCBrZWVwcyB3cml0aW5nCisgICAgICAgIHdpdGhvdXQgeWllbGRpbmcgdW50aWwgcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZCkuCisgICAgICAgICIiIgorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgU2VlIHBhdXNlX3dyaXRpbmcoKSBmb3IgZGV0YWlscy4KKyAgICAgICAgIiIiCisKKworY2xhc3MgUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJBQkMgcmVwcmVzZW50aW5nIGEgcHJvdG9jb2wuCisKKyAgICBUaGUgdXNlciBzaG91bGQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiAgVGhleSBjYW4gaW5oZXJpdCBmcm9tCisgICAgdGhpcyBjbGFzcyBidXQgZG9uJ3QgbmVlZCB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbnMgaGVyZSBkbworICAgIG5vdGhpbmcgKHRoZXkgZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucykuCisKKyAgICBXaGVuIHRoZSB1c2VyIHdhbnRzIHRvIHJlcXVlc3RzIGEgdHJhbnNwb3J0LCB0aGV5IHBhc3MgYSBwcm90b2NvbAorICAgIGZhY3RvcnkgdG8gYSB1dGlsaXR5IGZ1bmN0aW9uIChlLmcuLCBFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKSkuCisKKyAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUgc3VjY2Vzc2Z1bGx5LCBjb25uZWN0aW9uX21hZGUoKSBpcworICAgIGNhbGxlZCB3aXRoIGEgc3VpdGFibGUgdHJhbnNwb3J0IG9iamVjdC4gIFRoZW4gZGF0YV9yZWNlaXZlZCgpCisgICAgd2lsbCBiZSBjYWxsZWQgMCBvciBtb3JlIHRpbWVzIHdpdGggZGF0YSAoYnl0ZXMpIHJlY2VpdmVkIGZyb20gdGhlCisgICAgdHJhbnNwb3J0OyBmaW5hbGx5LCBjb25uZWN0aW9uX2xvc3QoKSB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UKKyAgICB3aXRoIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgYXMgYW4gYXJndW1lbnQuCisKKyAgICBTdGF0ZSBtYWNoaW5lIG9mIGNhbGxzOgorCisgICAgICBzdGFydCAtPiBDTSBbLT4gRFIqXSBbLT4gRVI/XSAtPiBDTCAtPiBlbmQKKyAgICAiIiIKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2FsbHMgd3JpdGVfZW9mKCkgb3IgZXF1aXZhbGVudC4KKworICAgICAgICBJZiB0aGlzIHJldHVybnMgYSBmYWxzZSB2YWx1ZSAoaW5jbHVkaW5nIE5vbmUpLCB0aGUgdHJhbnNwb3J0CisgICAgICAgIHdpbGwgY2xvc2UgaXRzZWxmLiAgSWYgaXQgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNsb3NpbmcgdGhlCisgICAgICAgIHRyYW5zcG9ydCBpcyB1cCB0byB0aGUgcHJvdG9jb2wuCisgICAgICAgICIiIgorCisKK2NsYXNzIERhdGFncmFtUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJBQkMgcmVwcmVzZW50aW5nIGEgZGF0YWdyYW0gcHJvdG9jb2wuIiIiCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuIiIiCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbiBPU0Vycm9yLgorCisgICAgICAgIChPdGhlciB0aGFuIEJsb2NraW5nSU9FcnJvciBvciBJbnRlcnJ1cHRlZEVycm9yLikKKyAgICAgICAgIiIiCisKKworY2xhc3MgU3VicHJvY2Vzc1Byb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiQUJDIHJlcHJlc2VudGluZyBhIHByb3RvY29sIGZvciBzdWJwcm9jZXNzIGNhbGxzLiIiIgorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBzdWJwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gc3Rkb3V0L3N0ZGVyciBwaXBlLgorCisgICAgICAgIGZkIGlzIGludCBmaWxlIGRhc2NyaXB0b3IuCisgICAgICAgIGRhdGEgaXMgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgIGNsb3NlZC4KKworICAgICAgICBmZCBpcyB0aGUgaW50IGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzdWJwcm9jZXNzIGhhcyBleGl0ZWQuIiIiCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9xdWV1ZXMucHkgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YmY0NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpAQCAtMCwwICsxLDI4NCBAQAorIiIiUXVldWVzIiIiCisKK19fYWxsX18gPSBbJ1F1ZXVlJywgJ1ByaW9yaXR5UXVldWUnLCAnTGlmb1F1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLAorICAgICAgICAgICAnRnVsbCcsICdFbXB0eSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGhlYXBxCitpbXBvcnQgcXVldWUKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBsb2NrcworZnJvbSAudGFza3MgaW1wb3J0IGNvcm91dGluZQorCisKKyMgUmUtZXhwb3J0IHF1ZXVlLkZ1bGwgYW5kIC5FbXB0eSBleGNlcHRpb25zLgorRnVsbCA9IHF1ZXVlLkZ1bGwKK0VtcHR5ID0gcXVldWUuRW1wdHkKKworCitjbGFzcyBRdWV1ZToKKyAgICAiIiJBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgIElmIG1heHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZiBpdAorICAgIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHRoZW4gInlpZWxkIGZyb20gcHV0KCkiIHdpbGwgYmxvY2sgd2hlbiB0aGUKKyAgICBxdWV1ZSByZWFjaGVzIG1heHNpemUsIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSBnZXQoKS4KKworICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBRdWV1ZSwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncyBzaXplCisgICAgd2l0aCBxc2l6ZSgpLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBUdWxpcCBhcHBsaWNhdGlvbiB3b24ndCBiZQorICAgIGludGVycnVwdGVkIGJldHdlZW4gY2FsbGluZyBxc2l6ZSgpIGFuZCBkb2luZyBhbiBvcGVyYXRpb24gb24gdGhlIFF1ZXVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9tYXhzaXplID0gbWF4c2l6ZQorCisgICAgICAgICMgRnV0dXJlcy4KKyAgICAgICAgc2VsZi5fZ2V0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgIyBQYWlycyBvZiAoaXRlbSwgRnV0dXJlKS4KKyAgICAgICAgc2VsZi5fcHV0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5faW5pdChtYXhzaXplKQorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wbGVmdCgpCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHt9PicuZm9ybWF0KAorICAgICAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IHt9PicuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICdtYXhzaXplPXshcn0nLmZvcm1hdChzZWxmLl9tYXhzaXplKQorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcXVldWUnLCBOb25lKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9xdWV1ZT17IXJ9Jy5mb3JtYXQobGlzdChzZWxmLl9xdWV1ZSkpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfZ2V0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fZ2V0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcHV0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fcHV0dGVycykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY29uc3VtZV9kb25lX2dldHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIGdldCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX2dldHRlcnMgYW5kIHNlbGYuX2dldHRlcnNbMF0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBfY29uc3VtZV9kb25lX3B1dHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHB1dCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX3B1dHRlcnMgYW5kIHNlbGYuX3B1dHRlcnNbMF1bMV0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBxc2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9xdWV1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXhzaXplCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3F1ZXVlCisKKyAgICBkZWYgZnVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAgIE5vdGU6IGlmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBtYXhzaXplPTAgKHRoZSBkZWZhdWx0KSwKKyAgICAgICAgdGhlbiBmdWxsKCkgaXMgbmV2ZXIgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX21heHNpemUgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucXNpemUoKSA9PSBzZWxmLl9tYXhzaXplCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHB1dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgICAgSWYgeW91IHlpZWxkIGZyb20gcHV0KCksIHdhaXQgdW50aWwgYSBmcmVlIHNsb3QgaXMgYXZhaWxhYmxlCisgICAgICAgIGJlZm9yZSBhZGRpbmcgaXRlbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcXVldWUsICgKKyAgICAgICAgICAgICAgICAncXVldWUgbm9uLWVtcHR5LCB3aHkgYXJlIGdldHRlcnMgd2FpdGluZz8nKQorCisgICAgICAgICAgICBnZXR0ZXIgPSBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgICAgICAgICAjIFVzZSBfcHV0IGFuZCBfZ2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdGVtIHN0cmFpZ2h0IHRvIGdldHRlciwgaW4KKyAgICAgICAgICAgICMgY2FzZSBhIHN1YmNsYXNzIGhhcyBsb2dpYyB0aGF0IG11c3QgcnVuIChlLmcuIEpvaW5hYmxlUXVldWUpLgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICBnZXR0ZXIuc2V0X3Jlc3VsdChzZWxmLl9nZXQoKSkKKworICAgICAgICBlbGlmIHNlbGYuX21heHNpemUgPiAwIGFuZCBzZWxmLl9tYXhzaXplID09IHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5hcHBlbmQoKGl0ZW0sIHdhaXRlcikpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIGRlZiBwdXRfbm93YWl0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIEZ1bGwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfZ2V0dGVycygpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3F1ZXVlLCAoCisgICAgICAgICAgICAgICAgJ3F1ZXVlIG5vbi1lbXB0eSwgd2h5IGFyZSBnZXR0ZXJzIHdhaXRpbmc/JykKKworICAgICAgICAgICAgZ2V0dGVyID0gc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgICAgICAgICAgIyBVc2UgX3B1dCBhbmQgX2dldCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXRlbSBzdHJhaWdodCB0byBnZXR0ZXIsIGluCisgICAgICAgICAgICAjIGNhc2UgYSBzdWJjbGFzcyBoYXMgbG9naWMgdGhhdCBtdXN0IHJ1biAoZS5nLiBKb2luYWJsZVF1ZXVlKS4KKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICAgICAgZ2V0dGVyLnNldF9yZXN1bHQoc2VsZi5fZ2V0KCkpCisKKyAgICAgICAgZWxpZiBzZWxmLl9tYXhzaXplID4gMCBhbmQgc2VsZi5fbWF4c2l6ZSA9PSBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByYWlzZSBGdWxsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGdldCgpLCB3YWl0IHVudGlsIGEgaXRlbSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfcHV0dGVycygpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5mdWxsKCksICdxdWV1ZSBub3QgZnVsbCwgd2h5IGFyZSBwdXR0ZXJzIHdhaXRpbmc/JworICAgICAgICAgICAgaXRlbSwgcHV0dGVyID0gc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorCisgICAgICAgICAgICAjIFdoZW4gYSBnZXR0ZXIgcnVucyBhbmQgZnJlZXMgdXAgYSBzbG90IHNvIHRoaXMgcHV0dGVyIGNhbgorICAgICAgICAgICAgIyBydW4sIHdlIG5lZWQgdG8gZGVmZXIgdGhlIHB1dCBmb3IgYSB0aWNrIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAjIGdldHRlcnMgYW5kIHB1dHRlcnMgYWx0ZXJuYXRlIHBlcmZlY3RseS4gU2VlCisgICAgICAgICAgICAjIENoYW5uZWxUZXN0LnRlc3Rfd2FpdC4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHB1dHRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKworICAgICAgICBlbGlmIHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gd2FpdGVyKQorCisgICAgZGVmIGdldF9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZW0gaWYgb25lIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgZWxzZSByYWlzZSBFbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9wdXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fcHV0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmZ1bGwoKSwgJ3F1ZXVlIG5vdCBmdWxsLCB3aHkgYXJlIHB1dHRlcnMgd2FpdGluZz8nCisgICAgICAgICAgICBpdGVtLCBwdXR0ZXIgPSBzZWxmLl9wdXR0ZXJzLnBvcGxlZnQoKQorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICAjIFdha2UgcHV0dGVyIG9uIG5leHQgdGljay4KKyAgICAgICAgICAgIHB1dHRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorCisgICAgICAgIGVsaWYgc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFbXB0eQorCisKK2NsYXNzIFByaW9yaXR5UXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWU7IHJldHJpZXZlcyBlbnRyaWVzIGluIHByaW9yaXR5IG9yZGVyIChsb3dlc3QgZmlyc3QpLgorCisgICAgRW50cmllcyBhcmUgdHlwaWNhbGx5IHR1cGxlcyBvZiB0aGUgZm9ybTogKHByaW9yaXR5IG51bWJlciwgZGF0YSkuCisgICAgIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0sIGhlYXBwdXNoPWhlYXBxLmhlYXBwdXNoKToKKyAgICAgICAgaGVhcHB1c2goc2VsZi5fcXVldWUsIGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmLCBoZWFwcG9wPWhlYXBxLmhlYXBwb3ApOgorICAgICAgICByZXR1cm4gaGVhcHBvcChzZWxmLl9xdWV1ZSkKKworCitjbGFzcyBMaWZvUXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWUgdGhhdCByZXRyaWV2ZXMgbW9zdCByZWNlbnRseSBhZGRlZCBlbnRyaWVzIGZpcnN0LiIiIgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLnBvcCgpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZSB3aXRoIHRhc2tfZG9uZSgpIGFuZCBqb2luKCkgbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obWF4c2l6ZT1tYXhzaXplLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSAwCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFF1ZXVlLl9mb3JtYXQoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIHRhc2tzPXt9Jy5mb3JtYXQoc2VsZi5fdW5maW5pc2hlZF90YXNrcykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIHN1cGVyKCkuX3B1dChpdGVtKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzICs9IDEKKyAgICAgICAgc2VsZi5fZmluaXNoZWQuY2xlYXIoKQorCisgICAgZGVmIHRhc2tfZG9uZShzZWxmKToKKyAgICAgICAgIiIiSW5kaWNhdGUgdGhhdCBhIGZvcm1lcmx5IGVucXVldWVkIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgICAgVXNlZCBieSBxdWV1ZSBjb25zdW1lcnMuIEZvciBlYWNoIGdldCgpIHVzZWQgdG8gZmV0Y2ggYSB0YXNrLAorICAgICAgICBhIHN1YnNlcXVlbnQgY2FsbCB0byB0YXNrX2RvbmUoKSB0ZWxscyB0aGUgcXVldWUgdGhhdCB0aGUgcHJvY2Vzc2luZworICAgICAgICBvbiB0aGUgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgICBJZiBhIGpvaW4oKSBpcyBjdXJyZW50bHkgYmxvY2tpbmcsIGl0IHdpbGwgcmVzdW1lIHdoZW4gYWxsIGl0ZW1zIGhhdmUKKyAgICAgICAgYmVlbiBwcm9jZXNzZWQgKG1lYW5pbmcgdGhhdCBhIHRhc2tfZG9uZSgpIGNhbGwgd2FzIHJlY2VpdmVkIGZvciBldmVyeQorICAgICAgICBpdGVtIHRoYXQgaGFkIGJlZW4gcHV0KCkgaW50byB0aGUgcXVldWUpLgorCisgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIGNhbGxlZCBtb3JlIHRpbWVzIHRoYW4gdGhlcmUgd2VyZSBpdGVtcyBwbGFjZWQgaW4KKyAgICAgICAgdGhlIHF1ZXVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGFza19kb25lKCkgY2FsbGVkIHRvbyBtYW55IHRpbWVzJykKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyAtPSAxCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkLnNldCgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGpvaW4oc2VsZik6CisgICAgICAgICIiIkJsb2NrIHVudGlsIGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIGdvdHRlbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgICAgIFRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGdvZXMgdXAgd2hlbmV2ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUKKyAgICAgICAgcXVldWUuIFRoZSBjb3VudCBnb2VzIGRvd24gd2hlbmV2ZXIgYSBjb25zdW1lciB0aHJlYWQgY2FsbHMgdGFza19kb25lKCkKKyAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbiBpdCBpcyBjb21wbGV0ZS4KKyAgICAgICAgV2hlbiB0aGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBkcm9wcyB0byB6ZXJvLCBqb2luKCkgdW5ibG9ja3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID4gMDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluaXNoZWQud2FpdCgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlZmRkYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDg2MiBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHNlbGVjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0Egc2VsZWN0b3IgaXMgYSAibm90aWZ5LXdoZW4tcmVhZHkiIG11bHRpcGxleGVyLiAgRm9yIGEgc3ViY2xhc3Mgd2hpY2gKK2Fsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2lnbmFsIGhhbmRsaW5nLCBzZWUgdGhlIHVuaXhfZXZlbnRzIHN1Yi1tb2R1bGUuCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEJhc2VTZWxlY3RvckV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJTZWxlY3RvciBldmVudCBsb29wLgorCisgICAgU2VlIGV2ZW50cy5FdmVudExvb3AgZm9yIEFQSSBzcGVjaWZpY2F0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBzZWxlY3RvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzZWxlY3RvcjogJXMnLCBzZWxlY3Rvci5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKyAgICAgICAgc2VsZi5fbWFrZV9zZWxmX3BpcGUoKQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgc2VydmVyX3NpZGUsIHNlcnZlcl9ob3N0bmFtZSwgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIGFkZHJlc3MsIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zZWxlY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNlbGYuX3Nzb2NrLmZpbGVubygpKQorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCksIHNlbGYuX3JlYWRfZnJvbV9zZWxmKQorCisgICAgZGVmIF9yZWFkX2Zyb21fc2VsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc3NvY2sucmVjdigxKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYid4JykKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc29jay5maWxlbm8oKSwgc2VsZi5fYWNjZXB0X2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2xjb250ZXh0LCBzZXJ2ZXIpCisKKyAgICBkZWYgX2FjY2VwdF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yLCBDb25uZWN0aW9uQWJvcnRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MgICMgRmFsc2UgYWxhcm0uCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICMgVGhlcmUncyBub3doZXJlIHRvIHNlbmQgdGhlIGVycm9yLCBzbyBqdXN0IGxvZyBpdC4KKyAgICAgICAgICAgICMgVE9ETzogU29tZW9uZSB3aWxsIHdhbnQgYW4gZXJyb3IgaGFuZGxlciBmb3IgdGhpcy4KKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyBpbiAoZXJybm8uRU1GSUxFLCBlcnJuby5FTkZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0JVRlMsIGVycm5vLkVOT01FTSk6CisgICAgICAgICAgICAgICAgIyBTb21lIHBsYXRmb3JtcyAoZS5nLiBMaW51eCBrZWVwIHJlcG9ydGluZyB0aGUgRkQgYXMKKyAgICAgICAgICAgICAgICAjIHJlYWR5LCBzbyB3ZSByZW1vdmUgdGhlIHJlYWQgaGFuZGxlciB0ZW1wb3JhcmlseS4KKyAgICAgICAgICAgICAgICAjIFdlJ2xsIHRyeSBhZ2FpbiBpbiBhIHdoaWxlLgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0FjY2VwdCBvdXQgb2Ygc3lzdGVtIHJlc291cmNlICglcyknLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2xhdGVyKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgICMgVGhlIGV2ZW50IGxvb3Agd2lsbCBjYXRjaCwgbG9nIGFuZCBpZ25vcmUgaXQuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2xfZmFjdG9yeSgpLCBzc2xjb250ZXh0LCBOb25lLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLCBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2xfZmFjdG9yeSgpLCBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICMgSXQncyBub3cgdXAgdG8gdGhlIHByb3RvY29sIHRvIGhhbmRsZSB0aGUgY29ubmVjdGlvbi4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSByZWFkZXIgY2FsbGJhY2suIiIiCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgTm9uZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIHdyaXRlcikpCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9SRUFECisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChOb25lLCB3cml0ZXIpKQorCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgd3JpdGVyIGNhbGxiYWNrLi4iIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5yZWdpc3RlcihmZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIGhhbmRsZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZGVyLCBoYW5kbGUpKQorICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorCisgICAgZGVmIHJlbW92ZV93cml0ZXIoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZW1vdmUgYSB3cml0ZXIgY2FsbGJhY2suIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICAjIFJlbW92ZSBib3RoIHdyaXRlciBhbmQgY29ubmVjdG9yLgorICAgICAgICAgICAgbWFzayAmPSB+c2VsZWN0b3JzLkVWRU5UX1dSSVRFCisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChyZWFkZXIsIE5vbmUpKQorCisgICAgICAgICAgICBpZiB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd3JpdGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX3JlY3YoZnV0LCBGYWxzZSwgc29jaywgbikKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX3JlY3Yoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrLCBuKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgY2FsbGJhY2sgZWFybHkuICBJdCBzaG91bGQgYmUgcmFyZSB0aGF0IHRoZQorICAgICAgICAgICAgIyBzZWxlY3RvciBzYXlzIHRoZSBmZCBpcyByZWFkeSBidXQgdGhlIGNhbGwgc3RpbGwgcmV0dXJucworICAgICAgICAgICAgIyBFQUdBSU4sIGFuZCBJIGFtIHdpbGxpbmcgdG8gdGFrZSBhIGhpdCBpbiB0aGF0IGNhc2UgaW4KKyAgICAgICAgICAgICMgb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNvY2sucmVjdihuKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfcmVjdiwgZnV0LCBUcnVlLCBzb2NrLCBuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KGRhdGEpCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgc2VsZi5fc29ja19zZW5kYWxsKGZ1dCwgRmFsc2UsIHNvY2ssIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfc2VuZGFsbChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIGRhdGEpOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKworICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc29jay5zZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKyAgICAgICAgICAgIHNlbGYuYWRkX3dyaXRlcihmZCwgc2VsZi5fc29ja19zZW5kYWxsLCBmdXQsIFRydWUsIHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgIyBUaGF0IGFkZHJlc3MgYmV0dGVyIG5vdCByZXF1aXJlIGEgbG9va3VwISAgV2UncmUgbm90IGNhbGxpbmcKKyAgICAgICAgIyBzZWxmLmdldGFkZHJpbmZvKCkgZm9yIHlvdSBoZXJlLiAgQnV0IHZlcmlmeWluZyB0aGlzIGlzCisgICAgICAgICMgY29tcGxpY2F0ZWQ7IHRoZSBzb2NrZXQgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBhIHBhdHRlcm4gZm9yCisgICAgICAgICMgSVB2NiBhZGRyZXNzZXMgKHRoZXJlIGFyZSB0b28gbWFueSBmb3JtcywgYXBwYXJlbnRseSkuCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgRmFsc2UsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19jb25uZWN0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgYWRkcmVzcyk6CisgICAgICAgICMgVE9ETzogVXNlIGdldGFkZHJpbmZvKCkgdG8gbG9vayB1cCB0aGUgYWRkcmVzcywgdG8gYXZvaWQgdGhlCisgICAgICAgICMgdHJhcCBvZiBoYW5naW5nIHRoZSBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzCisgICAgICAgICMgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiAgKE9UT0gsIHRoZSBjYWxsZXIgc2hvdWxkCisgICAgICAgICMgYWxyZWFkeSBoYXZlIGRvbmUgdGhpcywgc28gaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZAorICAgICAgICAjIGVhc2lseSB0ZWxsIHdoZXRoZXIgdGhlIGFkZHJlc3MgbmVlZHMgbG9va2luZyB1cCBvciBub3QuICBJCisgICAgICAgICMga25vdyBob3cgdG8gZG8gdGhpcyBmb3IgSVB2NCwgYnV0IElQdjYgYWRkcmVzc2VzIGhhdmUgbWFueQorICAgICAgICAjIHN5bnRheGVzLikKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgICAgICAjIEZpcnN0IHRpbWUgYXJvdW5kLgorICAgICAgICAgICAgICAgIHNvY2suY29ubmVjdChhZGRyZXNzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnIgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKKyAgICAgICAgICAgICAgICBpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBKdW1wIHRvIHRoZSBleGNlcHQgY2xhdXNlIGJlbG93LgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgJ0Nvbm5lY3QgY2FsbCBmYWlsZWQgJXMnICUgKGFkZHJlc3MsKSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX2Nvbm5lY3QsIGZ1dCwgVHJ1ZSwgc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX2FjY2VwdChmdXQsIEZhbHNlLCBzb2NrKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfYWNjZXB0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jayk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkcmVzcyA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19hY2NlcHQsIGZ1dCwgVHJ1ZSwgc29jaykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgoY29ubiwgYWRkcmVzcykpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50X2xpc3Q6CisgICAgICAgICAgICBmaWxlb2JqLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmZpbGVvYmosIGtleS5kYXRhCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQgYW5kIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHJlYWRlcikKKyAgICAgICAgICAgIGlmIG1hc2sgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEUgYW5kIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB3cml0ZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHdyaXRlcikKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKworY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0KHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgIyBCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gcmVjdigpLgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gYnl0ZWFycmF5ICAjIENvbnN0cnVjdHMgaW5pdGlhbCB2YWx1ZSBmb3Igc2VsZi5fYnVmZmVyLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gTm9uZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9zb2NrX2ZkID0gc29jay5maWxlbm8oKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJfZmFjdG9yeSgpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAgICMgU2V0IHdoZW4gY2FsbCB0byBjb25uZWN0aW9uX2xvc3Qgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKQorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuYXR0YWNoKHNlbGYpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkuCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgKEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvblJlc2V0RXJyb3IpKToKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKworICAgIGRlZiBfZm9yY2VfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2sgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zZXJ2ZXIKKyAgICAgICAgICAgIGlmIHNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuZGV0YWNoKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyID0gTm9uZQorCisgICAgZGVmIF9tYXliZV9wYXVzZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgc2l6ZSA9IHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgaWYgc2l6ZSA8PSBzZWxmLl9oaWdoX3dhdGVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm90b2NvbF9wYXVzZWQ6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3BhdXNlX3dyaXRpbmcoKSBmYWlsZWQnKQorCisgICAgZGVmIF9tYXliZV9yZXN1bWVfcHJvdG9jb2woc2VsZik6CisgICAgICAgIGlmIChzZWxmLl9wcm90b2NvbF9wYXVzZWQgYW5kCisgICAgICAgICAgICBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpIDw9IHNlbGYuX2xvd193YXRlcik6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLnJlc3VtZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigncmVzdW1lX3dyaXRpbmcoKSBmYWlsZWQnKQorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICBpZiBoaWdoIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNjQqMTAyNAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoaWdoID0gNCpsb3cKKyAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICBsb3cgPSBoaWdoIC8vIDQKKyAgICAgICAgaWYgbm90IGhpZ2ggPj0gbG93ID49IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdoaWdoICglcikgbXVzdCBiZSA+PSBsb3cgKCVyKSBtdXN0IGJlID49IDAnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZ2gsIGxvdykpCisgICAgICAgIHNlbGYuX2hpZ2hfd2F0ZXIgPSBoaWdoCisgICAgICAgIHNlbGYuX2xvd193YXRlciA9IGxvdworCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9idWZmZXIpCisKKworY2xhc3MgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KF9TZWxlY3RvclRyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXIpCisgICAgICAgIHNlbGYuX2VvZiA9IEZhbHNlCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnKQorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0FscmVhZHkgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSdyZSBrZWVwaW5nIHRoZSBjb25uZWN0aW9uIG9wZW4gc28gdGhlCisgICAgICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgY2FuIHdyaXRlIG1vcmUsIGJ1dCB3ZSBzdGlsbCBjYW4ndAorICAgICAgICAgICAgICAgICAgICAjIHJlY2VpdmUgbW9yZSwgc28gcmVtb3ZlIHRoZSByZWFkZXIgY2FsbGJhY2suCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgY2FsbCB3cml0ZSgpIGFmdGVyIHdyaXRlX2VvZigpJykKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgT3B0aW1pemF0aW9uOiB0cnkgdG8gc2VuZCBub3cuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBOb3QgYWxsIHdhcyB3cml0dGVuOyByZWdpc3RlciB3cml0ZSBoYW5kbGVyLgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgICMgQWRkIGl0IHRvIHRoZSBidWZmZXIuCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2J1ZmZlciwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6bl0KKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGJ5dGVhcnJheQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGRsaWIgc3NsIG1vZHVsZSBub3QgYXZhaWxhYmxlJykKKworICAgICAgICBpZiBzZXJ2ZXJfc2lkZToKKyAgICAgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZlciBzaWRlIHNzbCBuZWVkcyBhIHZhbGlkIFNTTENvbnRleHQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgIyBDbGllbnQgc2lkZSBtYXkgcGFzcyBzc2w9VHJ1ZSB0byB1c2UgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgIyBjb250ZXh0OyBpbiB0aGF0IGNhc2UgdGhlIHNzbGNvbnRleHQgcGFzc2VkIGlzIE5vbmUuCisgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyB1c2VkIGJ5IHVybGxpYiB3aXRoCisgICAgICAgICAgICAgICAgIyBjYWRlZmF1bHQ9VHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ19jcmVhdGVfc3RkbGliX2NvbnRleHQnKToKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgZm9yIFB5dGhvbiAzLjMuCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisKKyAgICAgICAgd3JhcF9rd2FyZ3MgPSB7CisgICAgICAgICAgICAnc2VydmVyX3NpZGUnOiBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICdkb19oYW5kc2hha2Vfb25fY29ubmVjdCc6IEZhbHNlLAorICAgICAgICB9CisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBhbmQgbm90IHNlcnZlcl9zaWRlIGFuZCBzc2wuSEFTX1NOSToKKyAgICAgICAgICAgIHdyYXBfa3dhcmdzWydzZXJ2ZXJfaG9zdG5hbWUnXSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzc2xzb2NrID0gc3NsY29udGV4dC53cmFwX3NvY2tldChyYXdzb2NrLCAqKndyYXBfa3dhcmdzKQorCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc3Nsc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICAgICAgc2VsZi5fc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCisgICAgICAgIHNlbGYuX3dhaXRlciA9IHdhaXRlcgorICAgICAgICBzZWxmLl9yYXdzb2NrID0gcmF3c29jaworICAgICAgICBzZWxmLl9zc2xjb250ZXh0ID0gc3NsY29udGV4dAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgICMgU1NMLXNwZWNpZmljIGV4dHJhIGluZm8uICAocGVlcmNlcnQgaXMgc2V0IGxhdGVyKQorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUoc3NsY29udGV4dD1zc2xjb250ZXh0KQorCisgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZSgpCisKKyAgICBkZWYgX29uX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRSZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fb25faGFuZHNoYWtlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFdyaXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fb25faGFuZHNoYWtlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICAgICAgIyBWZXJpZnkgaG9zdG5hbWUgaWYgcmVxdWVzdGVkLgorICAgICAgICBwZWVyY2VydCA9IHNlbGYuX3NvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICBpZiAoc2VsZi5fc2VydmVyX2hvc3RuYW1lIGFuZAorICAgICAgICAgICAgc2VsZi5fc3NsY29udGV4dC52ZXJpZnlfbW9kZSAhPSBzc2wuQ0VSVF9OT05FKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUocGVlcmNlcnQsIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQWRkIGV4dHJhIGluZm8gdGhhdCBiZWNvbWVzIGF2YWlsYWJsZSBhZnRlciBoYW5kc2hha2UuCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShwZWVyY2VydD1wZWVyY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcj1zZWxmLl9zb2NrLmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249c2VsZi5fc29jay5jb21wcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBGYWxzZQorICAgICAgICBzZWxmLl93cml0ZV93YW50c19yZWFkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fd2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIyBYWFggVGhpcyBpcyBhIGJpdCBpY2t5LCBnaXZlbiB0aGUgY29tbWVudCBhdCB0aGUgdG9wIG9mCisgICAgICAgICMgX3JlYWRfcmVhZHkoKS4gIElzIGl0IHBvc3NpYmxlIHRvIGV2b2tlIGEgZGVhZGxvY2s/ICBJIGRvbid0CisgICAgICAgICMga25vdywgYWx0aG91Z2ggaXQgZG9lc24ndCBsb29rIGxpa2UgaXQ7IHdyaXRlKCkgd2lsbCBzdGlsbAorICAgICAgICAjIGFjY2VwdCBtb3JlIGRhdGEgZm9yIHRoZSBidWZmZXIgYW5kIGV2ZW50dWFsbHkgdGhlIGFwcCB3aWxsCisgICAgICAgICMgY2FsbCByZXN1bWVfcmVhZGluZygpIGFnYWluLCBhbmQgdGhpbmdzIHdpbGwgZmxvdyBhZ2Fpbi4KKworICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgKCdOb3QgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfd2FudHNfcmVhZDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIHNzbC5TU0xXYW50UmVhZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncmV0dXJuaW5nIHRydWUgZnJvbSBlb2ZfcmVjZWl2ZWQoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIG5vIGVmZmVjdCB3aGVuIHVzaW5nIHNzbCcpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9yZWFkX3JlYWR5KCkKKworICAgICAgICAgICAgaWYgbm90IChzZWxmLl9wYXVzZWQgb3Igc2VsZi5fY2xvc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xXYW50V3JpdGVFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFJlYWRFcnJvcjoKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGNvbGxlY3Rpb25zLmRlcXVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhKQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1bShsZW4oZGF0YSkgZm9yIGRhdGEsIF8gaW4gc2VsZi5fYnVmZmVyKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fc29jay5yZWN2ZnJvbShzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGFuZCBhZGRyIG5vdCBpbiAoTm9uZSwgc2VsZi5fYWRkcmVzcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3M6IG11c3QgYmUgTm9uZSBvciAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fYWRkcmVzcywpKQorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBhbmQgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNlbmQgaXQgcmlnaHQgYXdheSBmaXJzdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBhZGRyKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9zZW5kdG9fcmVhZHkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgRW5zdXJlIHRoYXQgd2hhdCB3ZSBidWZmZXIgaXMgaW1tdXRhYmxlLgorICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKChieXRlcyhkYXRhKSwgYWRkcikpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZGxlZnQoKGRhdGEsIGFkZHIpKSAgIyBUcnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N0cmVhbXMucHkgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzRjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5CkBAIC0wLDAgKzEsMzk4IEBACisiIiJTdHJlYW0tcmVsYXRlZCB0aGluZ3MuIiIiCisKK19fYWxsX18gPSBbJ1N0cmVhbVJlYWRlcicsICdTdHJlYW1Xcml0ZXInLCAnU3RyZWFtUmVhZGVyUHJvdG9jb2wnLAorICAgICAgICAgICAnb3Blbl9jb25uZWN0aW9uJywgJ3N0YXJ0X3NlcnZlcicsCisgICAgICAgICAgIF0KKworaW1wb3J0IGNvbGxlY3Rpb25zCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHRhc2tzCisKKworX0RFRkFVTFRfTElNSVQgPSAyKioxNgorCisKK0B0YXNrcy5jb3JvdXRpbmUKK2RlZiBvcGVuX2Nvbm5lY3Rpb24oaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgIiIiQSB3cmFwcGVyIGZvciBjcmVhdGVfY29ubmVjdGlvbigpIHJldHVybmluZyBhIChyZWFkZXIsIHdyaXRlcikgcGFpci4KKworICAgIFRoZSByZWFkZXIgcmV0dXJuZWQgaXMgYSBTdHJlYW1SZWFkZXIgaW5zdGFuY2U7IHRoZSB3cml0ZXIgaXMgYQorICAgIFRyYW5zcG9ydC4KKworICAgIFRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvIGNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlIHBvc2l0aW9uYWwgaG9zdCBhbmQgcG9ydCwKKyAgICB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgZm9sbG93aW5nLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgKElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgU3RyZWFtUmVhZGVyIGFuZC9vcgorICAgIFN0cmVhbVJlYWRlclByb3RvY29sIGNsYXNzZXMsIGp1c3QgY29weSB0aGUgY29kZSAtLSB0aGVyZSdzCisgICAgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCBoZXJlIGV4Y2VwdCBzb21lIGNvbnZlbmllbmNlLikKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgIHByb3RvY29sID0gU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyKQorICAgIHRyYW5zcG9ydCwgXyA9IHlpZWxkIGZyb20gbG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgaG9zdCwgcG9ydCwgKiprd2RzKQorICAgIHdyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisgICAgcmV0dXJuIHJlYWRlciwgd3JpdGVyCisKKworQHRhc2tzLmNvcm91dGluZQorZGVmIHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAiIiJTdGFydCBhIHNvY2tldCBzZXJ2ZXIsIGNhbGwgYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLgorCisgICAgVGhlIGZpcnN0IHBhcmFtZXRlciwgYGNsaWVudF9jb25uZWN0ZWRfY2JgLCB0YWtlcyB0d28gcGFyYW1ldGVyczoKKyAgICBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyLiAgY2xpZW50X3JlYWRlciBpcyBhIFN0cmVhbVJlYWRlcgorICAgIG9iamVjdCwgd2hpbGUgY2xpZW50X3dyaXRlciBpcyBhIFN0cmVhbVdyaXRlciBvYmplY3QuICBUaGlzCisgICAgcGFyYW1ldGVyIGNhbiBlaXRoZXIgYmUgYSBwbGFpbiBjYWxsYmFjayBmdW5jdGlvbiBvciBhIGNvcm91dGluZTsKKyAgICBpZiBpdCBpcyBhIGNvcm91dGluZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBpbnRvIGEKKyAgICBUYXNrLgorCisgICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8KKyAgICBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlCisgICAgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgICBmb2xsb3dpbmcuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSwgaS5lLiBhCisgICAgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICByZXR1cm4gcHJvdG9jb2wKKworICAgIHJldHVybiAoeWllbGQgZnJvbSBsb29wLmNyZWF0ZV9zZXJ2ZXIoZmFjdG9yeSwgaG9zdCwgcG9ydCwgKiprd2RzKSkKKworCitjbGFzcyBTdHJlYW1SZWFkZXJQcm90b2NvbChwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICIiIlRyaXZpYWwgaGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gUHJvdG9jb2wgYW5kIFN0cmVhbVJlYWRlci4KKworICAgIChUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgbWFraW5nIFN0cmVhbVJlYWRlciBpdHNlbGYgYQorICAgIFByb3RvY29sIHN1YmNsYXNzLCBiZWNhdXNlIHRoZSBTdHJlYW1SZWFkZXIgaGFzIG90aGVyIHBvdGVudGlhbAorICAgIHVzZXMsIGFuZCB0byBwcmV2ZW50IHRoZSB1c2VyIG9mIHRoZSBTdHJlYW1SZWFkZXIgdG8gYWNjaWRlbnRhbGx5CisgICAgY2FsbCBpbmFwcHJvcHJpYXRlIG1ldGhvZHMgb2YgdGhlIHByb3RvY29sLikKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIgPSBzdHJlYW1fcmVhZGVyCisgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2xpZW50X2Nvbm5lY3RlZF9jYiA9IGNsaWVudF9jb25uZWN0ZWRfY2IKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AgICMgTWF5IGJlIE5vbmU7IHdlIG1heSBuZXZlciBuZWVkIGl0LgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF90cmFuc3BvcnQodHJhbnNwb3J0KQorICAgICAgICBpZiBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3ApCisgICAgICAgICAgICByZXMgPSBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiKHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIpCisgICAgICAgICAgICBpZiB0YXNrcy5pc2Nvcm91dGluZShyZXMpOgorICAgICAgICAgICAgICAgIHRhc2tzLlRhc2socmVzLCBsb29wPXNlbGYuX2xvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAjIEFsc28gd2FrZSB1cCB0aGUgd3JpdGluZyBzaWRlLgorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGF1c2VkCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIFN0cmVhbVdyaXRlcjoKKyAgICAiIiJXcmFwcyBhIFRyYW5zcG9ydC4KKworICAgIFRoaXMgZXhwb3NlcyB3cml0ZSgpLCB3cml0ZWxpbmVzKCksIFtjYW5fXXdyaXRlX2VvZigpLAorICAgIGdldF9leHRyYV9pbmZvKCkgYW5kIGNsb3NlKCkuICBJdCBhZGRzIGRyYWluKCkgd2hpY2ggcmV0dXJucyBhbgorICAgIG9wdGlvbmFsIEZ1dHVyZSBvbiB3aGljaCB5b3UgY2FuIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28KKyAgICBhZGRzIGEgdHJhbnNwb3J0IGF0dHJpYnV0ZSB3aGljaCByZWZlcmVuY2VzIHRoZSBUcmFuc3BvcnQKKyAgICBkaXJlY3RseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9yZWFkZXIgPSByZWFkZXIKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlbGluZXMoZGF0YSkKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQud3JpdGVfZW9mKCkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKG5hbWUsIGRlZmF1bHQpCisKKyAgICBkZWYgZHJhaW4oc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGhhcyBhbiB1bnVzdWFsIHJldHVybiB2YWx1ZS4KKworICAgICAgICBUaGUgaW50ZW5kZWQgdXNlIGlzIHRvIHdyaXRlCisKKyAgICAgICAgICB3LndyaXRlKGRhdGEpCisgICAgICAgICAgeWllbGQgZnJvbSB3LmRyYWluKCkKKworICAgICAgICBXaGVuIHRoZXJlJ3Mgbm90aGluZyB0byB3YWl0IGZvciwgZHJhaW4oKSByZXR1cm5zICgpLCBhbmQgdGhlCisgICAgICAgIHlpZWxkLWZyb20gY29udGludWVzIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUgdHJhbnNwb3J0IGJ1ZmZlcgorICAgICAgICBpcyBmdWxsICh0aGUgcHJvdG9jb2wgaXMgcGF1c2VkKSwgZHJhaW4oKSBjcmVhdGVzIGFuZCByZXR1cm5zCisgICAgICAgIGEgRnV0dXJlIGFuZCB0aGUgeWllbGQtZnJvbSB3aWxsIGJsb2NrIHVudGlsIHRoYXQgRnV0dXJlIGlzCisgICAgICAgIGNvbXBsZXRlZCwgd2hpY2ggd2lsbCBoYXBwZW4gd2hlbiB0aGUgYnVmZmVyIGlzIChwYXJ0aWFsbHkpCisgICAgICAgIGRyYWluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyByZXN1bWVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fcmVhZGVyLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl93cml0ZXIuX2V4Y2VwdGlvbgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQuX2Nvbm5fbG9zdDogICMgVXNlcyBwcml2YXRlIHZhcmlhYmxlLgorICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoJ0Nvbm5lY3Rpb24gbG9zdCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm90b2NvbC5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuICgpCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3Byb3RvY29sLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3Byb3RvY29sLl9kcmFpbl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHdhaXRlcgorCisKK2NsYXNzIFN0cmVhbVJlYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgbG9vcD1Ob25lKToKKyAgICAgICAgIyBUaGUgbGluZSBsZW5ndGggbGltaXQgaXMgIGEgc2VjdXJpdHkgZmVhdHVyZTsKKyAgICAgICAgIyBpdCBhbHNvIGRvdWJsZXMgYXMgaGFsZiB0aGUgYnVmZmVyIGxpbWl0LgorICAgICAgICBzZWxmLl9saW1pdCA9IGxpbWl0CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpICAjIERlcXVlIG9mIGJ5dGVzIG9iamVjdHMuCisgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPSAwICAjIEJ5dGVzIGluIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fZW9mID0gRmFsc2UgICMgV2hldGhlciB3ZSdyZSBkb25lLgorICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lICAjIEEgZnV0dXJlLgorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4YworCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBzZXRfdHJhbnNwb3J0KHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLl90cmFuc3BvcnQgaXMgTm9uZSwgJ1RyYW5zcG9ydCBhbHJlYWR5IHNldCcKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZCBhbmQgc2VsZi5fYnl0ZV9jb3VudCA8PSBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgZmVlZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCArPSBsZW4oZGF0YSkKKworICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgICAgICBpZiAoc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPiAyKnNlbGYuX2xpbWl0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucGF1c2VfcmVhZGluZygpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSB0cmFuc3BvcnQgY2FuJ3QgYmUgcGF1c2VkLgorICAgICAgICAgICAgICAgICMgV2UnbGwganVzdCBoYXZlIHRvIGJ1ZmZlciBhbGwgZGF0YS4KKyAgICAgICAgICAgICAgICAjIEZvcmdldCB0aGUgdHJhbnNwb3J0IHNvIHdlIGRvbid0IGtlZXAgdHJ5aW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBwYXJ0c19zaXplID0gMAorICAgICAgICBub3RfZW5vdWdoID0gVHJ1ZQorCisgICAgICAgIHdoaWxlIG5vdF9lbm91Z2g6CisgICAgICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXIgYW5kIG5vdF9lbm91Z2g6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlci5wb3BsZWZ0KCkKKyAgICAgICAgICAgICAgICBpY2hhciA9IGRhdGEuZmluZChiJ1xuJykKKyAgICAgICAgICAgICAgICBpZiBpY2hhciA8IDA6CisgICAgICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBwYXJ0c19zaXplICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGljaGFyICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaGVhZCwgdGFpbCA9IGRhdGFbOmljaGFyXSwgZGF0YVtpY2hhcjpdCisgICAgICAgICAgICAgICAgICAgIGlmIHRhaWw6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kbGVmdCh0YWlsKQorICAgICAgICAgICAgICAgICAgICBub3RfZW5vdWdoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKGhlYWQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzX3NpemUgKz0gbGVuKGhlYWQpCisKKyAgICAgICAgICAgICAgICBpZiBwYXJ0c19zaXplID4gc2VsZi5fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgLT0gcGFydHNfc2l6ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTGluZSBpcyB0b28gbG9uZycpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3RfZW5vdWdoOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl93YWl0ZXIgaXMgTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIGxpbmUgPSBiJycuam9pbihwYXJ0cykKKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBwYXJ0c19zaXplCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgIGlmIG5vdCBuOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J5dGVfY291bnQgYW5kIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgICAgICBpZiBuIDwgMCBvciBzZWxmLl9ieXRlX2NvdW50IDw9IG46CisgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPSAwCisgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBwYXJ0c19ieXRlcyA9IDAKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyIGFuZCBwYXJ0c19ieXRlcyA8IG46CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgZGF0YV9ieXRlcyA9IGxlbihkYXRhKQorICAgICAgICAgICAgaWYgbiA8IHBhcnRzX2J5dGVzICsgZGF0YV9ieXRlczoKKyAgICAgICAgICAgICAgICBkYXRhX2J5dGVzID0gbiAtIHBhcnRzX2J5dGVzCisgICAgICAgICAgICAgICAgZGF0YSwgcmVzdCA9IGRhdGFbOmRhdGFfYnl0ZXNdLCBkYXRhW2RhdGFfYnl0ZXM6XQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KHJlc3QpCisKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgcGFydHNfYnl0ZXMgKz0gZGF0YV9ieXRlcworICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBkYXRhX2J5dGVzCisgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKworICAgICAgICByZXR1cm4gYicnLmpvaW4ocGFydHMpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWRleGFjdGx5KHNlbGYsIG4pOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBpZiBuIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgd2hpbGUgc2VsZi5fYnl0ZV9jb3VudCA8IG4gYW5kIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VsZi5yZWFkKG4pKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGFza3MucHkgYi9MaWIvYXN5bmNpby90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTIxYTRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdGFza3MucHkKQEAgLTAsMCArMSw2MzcgQEAKKyIiIlN1cHBvcnQgZm9yIHRhc2tzLCBjb3JvdXRpbmVzIGFuZCB0aGUgc2NoZWR1bGVyLiIiIgorCitfX2FsbF9fID0gWydjb3JvdXRpbmUnLCAnVGFzaycsCisgICAgICAgICAgICdGSVJTVF9DT01QTEVURUQnLCAnRklSU1RfRVhDRVBUSU9OJywgJ0FMTF9DT01QTEVURUQnLAorICAgICAgICAgICAnd2FpdCcsICd3YWl0X2ZvcicsICdhc19jb21wbGV0ZWQnLCAnc2xlZXAnLCAnYXN5bmMnLAorICAgICAgICAgICAnZ2F0aGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2Vha3JlZgorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisjIElmIHlvdSBzZXQgX0RFQlVHIHRvIHRydWUsIEBjb3JvdXRpbmUgd2lsbCB3cmFwIHRoZSByZXN1bHRpbmcKKyMgZ2VuZXJhdG9yIG9iamVjdHMgaW4gYSBDb3JvV3JhcHBlciBpbnN0YW5jZSAoZGVmaW5lZCBiZWxvdykuICBUaGF0CisjIGluc3RhbmNlIHdpbGwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgbmV2ZXIgaXRlcmF0ZWQKKyMgb3Zlciwgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHlvdSBmb3JnZXQgdG8gdXNlICJ5aWVsZCBmcm9tIiB3aXRoIGEKKyMgY29yb3V0aW5lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBfREVCVUcgZmxhZyBpcyB0YWtlbgorIyB3aGVuIHRoZSBkZWNvcmF0b3IgaXMgdXNlZCwgc28gdG8gYmUgb2YgYW55IHVzZSBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgeW91IGRlZmluZSB5b3VyIGNvcm91dGluZXMuICBBIGRvd25zaWRlIG9mIHVzaW5nIHRoaXMgZmVhdHVyZQorIyBpcyB0aGF0IHRyYWNlYmFja3Mgc2hvdyBlbnRyaWVzIGZvciB0aGUgQ29yb1dyYXBwZXIuX19uZXh0X18gbWV0aG9kCisjIHdoZW4gX0RFQlVHIGlzIHRydWUuCitfREVCVUcgPSBGYWxzZQorCisKK2NsYXNzIENvcm9XcmFwcGVyOgorICAgICIiIldyYXBwZXIgZm9yIGNvcm91dGluZSBpbiBfREVCVUcgbW9kZS4iIiIKKworICAgIF9fc2xvdF9fID0gWydnZW4nLCAnZnVuYyddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBmdW5jKToKKyAgICAgICAgYXNzZXJ0IGluc3BlY3QuaXNnZW5lcmF0b3IoZ2VuKSwgZ2VuCisgICAgICAgIHNlbGYuZ2VuID0gZ2VuCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5nZW4pCisKKyAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorCisgICAgZGVmIHRocm93KHNlbGYsIGV4Yyk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi50aHJvdyhleGMpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5jbG9zZSgpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZnJhbWUgPSBzZWxmLmdlbi5naV9mcmFtZQorICAgICAgICBpZiBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgICAgIGZ1bmMgPSBzZWxmLmZ1bmMKKyAgICAgICAgICAgIGNvZGUgPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvZGUuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIGxpbmVubyA9IGNvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAnQ29yb3V0aW5lICVyIGRlZmluZWQgYXQgJXM6JXMgd2FzIG5ldmVyIHlpZWxkZWQgZnJvbScsCisgICAgICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKworCitkZWYgY29yb3V0aW5lKGZ1bmMpOgorICAgICIiIkRlY29yYXRvciB0byBtYXJrIGNvcm91dGluZXMuCisKKyAgICBJZiB0aGUgY29yb3V0aW5lIGlzIG5vdCB5aWVsZGVkIGZyb20gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCwKKyAgICBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgIGNvcm8gPSBmdW5jCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgY29ybygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXMsIGZ1dHVyZXMuRnV0dXJlKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlcyk6CisgICAgICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSByZXMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIGlmIG5vdCBfREVCVUc6CisgICAgICAgIHdyYXBwZXIgPSBjb3JvCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHcgPSBDb3JvV3JhcHBlcihjb3JvKCphcmdzLCAqKmt3ZHMpLCBmdW5jKQorICAgICAgICAgICAgdy5fX25hbWVfXyA9IGNvcm8uX19uYW1lX18KKyAgICAgICAgICAgIHcuX19kb2NfXyA9IGNvcm8uX19kb2NfXworICAgICAgICAgICAgcmV0dXJuIHcKKworICAgIHdyYXBwZXIuX2lzX2Nvcm91dGluZSA9IFRydWUgICMgRm9yIGlzY29yb3V0aW5lZnVuY3Rpb24oKS4KKyAgICByZXR1cm4gd3JhcHBlcgorCisKK2RlZiBpc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGZ1bmMgaXMgYSBkZWNvcmF0ZWQgY29yb3V0aW5lIGZ1bmN0aW9uLiIiIgorICAgIHJldHVybiBnZXRhdHRyKGZ1bmMsICdfaXNfY29yb3V0aW5lJywgRmFsc2UpCisKKworZGVmIGlzY29yb3V0aW5lKG9iaik6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgb2JqIGlzIGEgY29yb3V0aW5lIG9iamVjdC4iIiIKKyAgICByZXR1cm4gaXNpbnN0YW5jZShvYmosIENvcm9XcmFwcGVyKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKG9iaikKKworCitjbGFzcyBUYXNrKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJBIGNvcm91dGluZSB3cmFwcGVkIGluIGEgRnV0dXJlLiIiIgorCisgICAgIyBBbiBpbXBvcnRhbnQgaW52YXJpYW50IG1haW50YWluZWQgd2hpbGUgYSBUYXNrIG5vdCBkb25lOgorICAgICMKKyAgICAjIC0gRWl0aGVyIF9mdXRfd2FpdGVyIGlzIE5vbmUsIGFuZCBfc3RlcCgpIGlzIHNjaGVkdWxlZDsKKyAgICAjIC0gb3IgX2Z1dF93YWl0ZXIgaXMgc29tZSBGdXR1cmUsIGFuZCBfc3RlcCgpIGlzICpub3QqIHNjaGVkdWxlZC4KKyAgICAjCisgICAgIyBUaGUgb25seSB0cmFuc2l0aW9uIGZyb20gdGhlIGxhdHRlciB0byB0aGUgZm9ybWVyIGlzIHRocm91Z2gKKyAgICAjIF93YWtldXAoKS4gIFdoZW4gX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmUsIG9uZSBvZiBpdHMgY2FsbGJhY2tzCisgICAgIyBtdXN0IGJlIF93YWtldXAoKS4KKworICAgICMgV2VhayBzZXQgY29udGFpbmluZyBhbGwgdGFza3MgYWxpdmUuCisgICAgX2FsbF90YXNrcyA9IHdlYWtyZWYuV2Vha1NldCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWxsX3Rhc2tzKGNscywgbG9vcD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc2V0IG9mIGFsbCB0YXNrcyBmb3IgYW4gZXZlbnQgbG9vcC4KKworICAgICAgICBCeSBkZWZhdWx0IGFsbCB0YXNrcyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBhcmUgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmV0dXJuIHt0IGZvciB0IGluIGNscy5fYWxsX3Rhc2tzIGlmIHQuX2xvb3AgaXMgbG9vcH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JvLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNjb3JvdXRpbmUoY29ybyksIHJlcHIoY29ybykgICMgTm90IGEgY29yb3V0aW5lIGZ1bmN0aW9uIQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fY29ybyA9IGl0ZXIoY29ybykgICMgVXNlIHRoZSBpdGVyYXRvciBqdXN0IGluIGNhc2UuCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fc3RlcCkKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uX2FsbF90YXNrcy5hZGQoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGlmIChzZWxmLl9tdXN0X2NhbmNlbCBhbmQKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID09IGZ1dHVyZXMuX1BFTkRJTkcgYW5kCisgICAgICAgICAgICAnPFBFTkRJTkcnIGluIHJlcyk6CisgICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgnPFBFTkRJTkcnLCAnPENBTkNFTExJTkcnLCAxKQorICAgICAgICBpID0gcmVzLmZpbmQoJzwnKQorICAgICAgICBpZiBpIDwgMDoKKyAgICAgICAgICAgIGkgPSBsZW4ocmVzKQorICAgICAgICByZXMgPSByZXNbOmldICsgJyg8e30+KScuZm9ybWF0KHNlbGYuX2Nvcm8uX19uYW1lX18pICsgcmVzW2k6XQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgZ2V0X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgSWYgdGhlIGNvcm91dGluZSBpcyBhY3RpdmUsIHRoaXMgcmV0dXJucyB0aGUgc3RhY2sgd2hlcmUgaXQgaXMKKyAgICAgICAgc3VzcGVuZGVkLiAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMKKyAgICAgICAgY2FuY2VsbGVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzCisgICAgICAgIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLCB0aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgdHJhY2ViYWNrCisgICAgICAgIGZyYW1lcy4KKworICAgICAgICBUaGUgZnJhbWVzIGFyZSBhbHdheXMgb3JkZXJlZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bW1iZXIgb2YgZnJhbWVzIHRvCisgICAgICAgIHJldHVybjsgYnkgZGVmYXVsdCBhbGwgYXZhaWxhYmxlIGZyYW1lcyBhcmUgcmV0dXJuZWQuICBJdHMKKyAgICAgICAgbWVhbmluZyBkaWZmZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgc3RhY2sgb3IgYSB0cmFjZWJhY2sgaXMKKyAgICAgICAgcmV0dXJuZWQ6IHRoZSBuZXdlc3QgZnJhbWVzIG9mIGEgc3RhY2sgYXJlIHJldHVybmVkLCBidXQgdGhlCisgICAgICAgIG9sZGVzdCBmcmFtZXMgb2YgYSB0cmFjZWJhY2sgYXJlIHJldHVybmVkLiAgKFRoaXMgbWF0Y2hlcyB0aGUKKyAgICAgICAgYmVoYXZpb3Igb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUuKQorCisgICAgICAgIEZvciByZWFzb25zIGJleW9uZCBvdXIgY29udHJvbCwgb25seSBvbmUgc3RhY2sgZnJhbWUgaXMKKyAgICAgICAgcmV0dXJuZWQgZm9yIGEgc3VzcGVuZGVkIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGZyYW1lcyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9jb3JvLmdpX2ZyYW1lCisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBmID0gZi5mX2JhY2sKKyAgICAgICAgICAgIGZyYW1lcy5yZXZlcnNlKCkKKyAgICAgICAgZWxpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YiA9IHNlbGYuX2V4Y2VwdGlvbi5fX3RyYWNlYmFja19fCisgICAgICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKHRiLnRiX2ZyYW1lKQorICAgICAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gZnJhbWVzCisKKyAgICBkZWYgcHJpbnRfc3RhY2soc2VsZiwgKiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIHN0YWNrIG9yIHRyYWNlYmFjayBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICAgIFRoaXMgcHJvZHVjZXMgb3V0cHV0IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZSwKKyAgICAgICAgZm9yIHRoZSBmcmFtZXMgcmV0cmlldmVkIGJ5IGdldF9zdGFjaygpLiAgVGhlIGxpbWl0IGFyZ3VtZW50CisgICAgICAgIGlzIHBhc3NlZCB0byBnZXRfc3RhY2soKS4gIFRoZSBmaWxlIGFyZ3VtZW50IGlzIGFuIEkvTyBzdHJlYW0KKyAgICAgICAgdG8gd2hpY2ggdGhlIG91dHB1dCBnb2VzOyBieSBkZWZhdWx0IGl0IGdvZXMgdG8gc3lzLnN0ZGVyci4KKyAgICAgICAgIiIiCisgICAgICAgIGV4dHJhY3RlZF9saXN0ID0gW10KKyAgICAgICAgY2hlY2tlZCA9IHNldCgpCisgICAgICAgIGZvciBmIGluIHNlbGYuZ2V0X3N0YWNrKGxpbWl0PWxpbWl0KToKKyAgICAgICAgICAgIGxpbmVubyA9IGYuZl9saW5lbm8KKyAgICAgICAgICAgIGNvID0gZi5mX2NvZGUKKyAgICAgICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gY2hlY2tlZDoKKyAgICAgICAgICAgICAgICBjaGVja2VkLmFkZChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKKyAgICAgICAgICAgIGV4dHJhY3RlZF9saXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCisgICAgICAgIGV4YyA9IHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICBpZiBub3QgZXh0cmFjdGVkX2xpc3Q6CisgICAgICAgICAgICBwcmludCgnTm8gc3RhY2sgZm9yICVyJyAlIHNlbGYsIGZpbGU9ZmlsZSkKKyAgICAgICAgZWxpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmludCgnVHJhY2ViYWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCdTdGFjayBmb3IgJXIgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JyAlIHNlbGYsCisgICAgICAgICAgICAgICAgICBmaWxlPWZpbGUpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPWZpbGUpCisgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjLl9fY2xhc3NfXywgZXhjKToKKyAgICAgICAgICAgICAgICBwcmludChsaW5lLCBmaWxlPWZpbGUsIGVuZD0nJykKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyLmNhbmNlbCgpOgorICAgICAgICAgICAgICAgICMgTGVhdmUgc2VsZi5fZnV0X3dhaXRlcjsgaXQgbWF5IGJlIGEgVGFzayB0aGF0CisgICAgICAgICAgICAgICAgIyBjYXRjaGVzIGFuZCBpZ25vcmVzIHRoZSBjYW5jZWxsYXRpb24gc28gd2UgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIGNhbmNlbCBpdCBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIEl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCBzZWxmLl9zdGVwIGlzIGFscmVhZHkgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc3RlcChzZWxmLCB2YWx1ZT1Ob25lLCBleGM9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5kb25lKCksIFwKKyAgICAgICAgICAgICdfc3RlcCgpOiBhbHJlYWR5IGRvbmU6IHshcn0sIHshcn0sIHshcn0nLmZvcm1hdChzZWxmLCB2YWx1ZSwgZXhjKQorICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjID0gZnV0dXJlcy5DYW5jZWxsZWRFcnJvcigpCisgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgIGNvcm8gPSBzZWxmLl9jb3JvCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgICMgQ2FsbCBlaXRoZXIgY29yby50aHJvdyhleGMpIG9yIGNvcm8uc2VuZCh2YWx1ZSkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnRocm93KGV4YykKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yby5zZW5kKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXh0KGNvcm8pCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X3Jlc3VsdChleGMudmFsdWUpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHN1cGVyKCkuY2FuY2VsKCkgICMgSS5lLiwgRnV0dXJlLmNhbmNlbChzZWxmKS4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGVkIEZ1dHVyZSBtdXN0IGNvbWUgZnJvbSBGdXR1cmUuX19pdGVyX18oKS4KKyAgICAgICAgICAgICAgICBpZiByZXN1bHQuX2Jsb2NraW5nOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX2Jsb2NraW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX3dha2V1cCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGFzayB7IXJ9IHdpdGggeyFyfScuZm9ybWF0KHNlbGYsIHJlc3VsdCkpKQorICAgICAgICAgICAgZWxpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJhcmUgeWllbGQgcmVsaW5xdWlzaGVzIGNvbnRyb2wgZm9yIG9uZSBldmVudCBsb29wIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlc3VsdCk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBhIGdlbmVyYXRvciBpcyBqdXN0IHdyb25nLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZ2VuZXJhdG9yIGluIHRhc2sgeyFyfSB3aXRoIHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgc29tZXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICdUYXNrIGdvdCBiYWQgeWllbGQ6IHshcn0nLmZvcm1hdChyZXN1bHQpKSkKKyAgICAgICAgc2VsZiA9IE5vbmUKKworICAgIGRlZiBfd2FrZXVwKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZnV0dXJlLnJlc3VsdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBUaGlzIG1heSBhbHNvIGJlIGEgY2FuY2VsbGF0aW9uLgorICAgICAgICAgICAgc2VsZi5fc3RlcChOb25lLCBleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdGVwKHZhbHVlLCBOb25lKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCisjIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgc2ltaWxhciB0byB0aG9zZSBpbiBQRVAgMzE0OC4KKworRklSU1RfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRAorRklSU1RfRVhDRVBUSU9OID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTgorQUxMX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5BTExfQ09NUExFVEVECisKKworQGNvcm91dGluZQorZGVmIHdhaXQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKToKKyAgICAiIiJXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lcyBnaXZlbiBieSBmcyB0byBjb21wbGV0ZS4KKworICAgIENvcm91dGluZXMgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2tzLgorCisgICAgUmV0dXJucyB0d28gc2V0cyBvZiBGdXR1cmU6IChkb25lLCBwZW5kaW5nKS4KKworICAgIFVzYWdlOgorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChmcykKKworICAgIE5vdGU6IFRoaXMgZG9lcyBub3QgcmFpc2UgVGltZW91dEVycm9yISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUKKyAgICB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNlY29uZCBzZXQuCisgICAgIiIiCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZnMgPSBzZXQoYXN5bmMoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBmcykKKworICAgIGlmIHJldHVybl93aGVuIG5vdCBpbiAoRklSU1RfQ09NUExFVEVELCBGSVJTVF9FWENFUFRJT04sIEFMTF9DT01QTEVURUQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHJldHVybl93aGVuIHZhbHVlOiB7fScuZm9ybWF0KHJldHVybl93aGVuKSkKKyAgICByZXR1cm4gKHlpZWxkIGZyb20gX3dhaXQoZnMsIHRpbWVvdXQsIHJldHVybl93aGVuLCBsb29wKSkKKworCitkZWYgX3JlbGVhc2Vfd2FpdGVyKHdhaXRlciwgdmFsdWU9VHJ1ZSwgKmFyZ3MpOgorICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh2YWx1ZSkKKworCitAY29yb3V0aW5lCitkZWYgd2FpdF9mb3IoZnV0LCB0aW1lb3V0LCAqLCBsb29wPU5vbmUpOgorICAgICIiIldhaXQgZm9yIHRoZSBzaW5nbGUgRnV0dXJlIG9yIGNvcm91dGluZSB0byBjb21wbGV0ZSwgd2l0aCB0aW1lb3V0LgorCisgICAgQ29yb3V0aW5lIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrLgorCisgICAgUmV0dXJucyByZXN1bHQgb2YgdGhlIEZ1dHVyZSBvciBjb3JvdXRpbmUuICBSYWlzZXMgVGltZW91dEVycm9yIHdoZW4KKyAgICB0aW1lb3V0IG9jY3Vycy4KKworICAgIFVzYWdlOgorCisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDEwLjApCisKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBGYWxzZSkKKyAgICBjYiA9IGZ1bmN0b29scy5wYXJ0aWFsKF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBUcnVlKQorCisgICAgZnV0ID0gYXN5bmMoZnV0LCBsb29wPWxvb3ApCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorCisgICAgdHJ5OgorICAgICAgICBpZiAoeWllbGQgZnJvbSB3YWl0ZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dC5yZXN1bHQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKworQGNvcm91dGluZQorZGVmIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIGZvciB3YWl0KCkgYW5kIF93YWl0X2ZvcigpLgorCisgICAgVGhlIGZzIGFyZ3VtZW50IG11c3QgYmUgYSBjb2xsZWN0aW9uIG9mIEZ1dHVyZXMuCisgICAgIiIiCisgICAgYXNzZXJ0IGZzLCAnU2V0IG9mIEZ1dHVyZXMgaXMgZW1wdHkuJworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjb3VudGVyID0gbGVuKGZzKQorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBub25sb2NhbCBjb3VudGVyCisgICAgICAgIGNvdW50ZXIgLT0gMQorICAgICAgICBpZiAoY291bnRlciA8PSAwIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9DT01QTEVURUQgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTiBhbmQgKG5vdCBmLmNhbmNlbGxlZCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkpOgorICAgICAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgZG9uZSwgcGVuZGluZyA9IHNldCgpLCBzZXQoKQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICBpZiBmLmRvbmUoKToKKyAgICAgICAgICAgIGRvbmUuYWRkKGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZW5kaW5nLmFkZChmKQorICAgIHJldHVybiBkb25lLCBwZW5kaW5nCisKKworIyBUaGlzIGlzICpub3QqIGEgQGNvcm91dGluZSEgIEl0IGlzIGp1c3QgYW4gaXRlcmF0b3IgKHlpZWxkaW5nIEZ1dHVyZXMpLgorZGVmIGFzX2NvbXBsZXRlZChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMsIHdoZW4gd2FpdGVkIGZvciwgYXJlIEZ1dHVyZXMuCisKKyAgICBUaGlzIGRpZmZlcnMgZnJvbSBQRVAgMzE0ODsgdGhlIHByb3BlciB3YXkgdG8gdXNlIHRoaXMgaXM6CisKKyAgICAgICAgZm9yIGYgaW4gYXNfY29tcGxldGVkKGZzKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZS4KKyAgICAgICAgICAgICMgVXNlIHJlc3VsdC4KKworICAgIFJhaXNlcyBUaW1lb3V0RXJyb3IgaWYgdGhlIHRpbWVvdXQgb2NjdXJzIGJlZm9yZSBhbGwgRnV0dXJlcyBhcmUKKyAgICBkb25lLgorCisgICAgTm90ZTogVGhlIGZ1dHVyZXMgJ2YnIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKyAgICAiIiIKKyAgICBsb29wID0gbG9vcCBpZiBsb29wIGlzIG5vdCBOb25lIGVsc2UgZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBkZWFkbGluZSA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbG9vcC50aW1lKCkgKyB0aW1lb3V0CisgICAgdG9kbyA9IHNldChhc3luYyhmLCBsb29wPWxvb3ApIGZvciBmIGluIGZzKQorICAgIGNvbXBsZXRlZCA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3dhaXRfZm9yX29uZSgpOgorICAgICAgICB3aGlsZSBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGRlYWRsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIGxvb3AudGltZSgpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yKCkKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIF93YWl0KAorICAgICAgICAgICAgICAgIHRvZG8sIHRpbWVvdXQsIEZJUlNUX0NPTVBMRVRFRCwgbG9vcCkKKyAgICAgICAgICAgICMgTXVsdGlwbGUgY2FsbGVycyBtaWdodCBiZSB3YWl0aW5nIGZvciB0aGUgc2FtZSBldmVudHMKKyAgICAgICAgICAgICMgYW5kIGdldHRpbmcgdGhlIHNhbWUgb3V0Y29tZS4gIERlZHVwZSBieSB1cGRhdGluZyB0b2RvLgorICAgICAgICAgICAgZm9yIGYgaW4gZG9uZToKKyAgICAgICAgICAgICAgICBpZiBmIGluIHRvZG86CisgICAgICAgICAgICAgICAgICAgIHRvZG8ucmVtb3ZlKGYpCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC5hcHBlbmQoZikKKyAgICAgICAgZiA9IGNvbXBsZXRlZC5wb3BsZWZ0KCkKKyAgICAgICAgcmV0dXJuIGYucmVzdWx0KCkgICMgTWF5IHJhaXNlLgorCisgICAgZm9yIF8gaW4gcmFuZ2UobGVuKHRvZG8pKToKKyAgICAgICAgeWllbGQgX3dhaXRfZm9yX29uZSgpCisKKworQGNvcm91dGluZQorZGVmIHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJDb3JvdXRpbmUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbiB0aW1lIChpbiBzZWNvbmRzKS4iIiIKKyAgICBmdXR1cmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgaCA9IGZ1dHVyZS5fbG9vcC5jYWxsX2xhdGVyKGRlbGF5LCBmdXR1cmUuc2V0X3Jlc3VsdCwgcmVzdWx0KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dHVyZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBoLmNhbmNlbCgpCisKKworZGVmIGFzeW5jKGNvcm9fb3JfZnV0dXJlLCAqLCBsb29wPU5vbmUpOgorICAgICIiIldyYXAgYSBjb3JvdXRpbmUgaW4gYSBmdXR1cmUuCisKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBGdXR1cmUsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY29yb19vcl9mdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZSBhbmQgbG9vcCBpcyBub3QgY29yb19vcl9mdXR1cmUuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBGdXR1cmUnKQorICAgICAgICByZXR1cm4gY29yb19vcl9mdXR1cmUKKyAgICBlbGlmIGlzY29yb3V0aW5lKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgcmV0dXJuIFRhc2soY29yb19vcl9mdXR1cmUsIGxvb3A9bG9vcCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgRnV0dXJlIG9yIGNvcm91dGluZSBpcyByZXF1aXJlZCcpCisKKworY2xhc3MgX0dhdGhlcmluZ0Z1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiSGVscGVyIGZvciBnYXRoZXIoKS4KKworICAgIFRoaXMgb3ZlcnJpZGVzIGNhbmNlbCgpIHRvIGNhbmNlbCBhbGwgdGhlIGNoaWxkcmVuIGFuZCBhY3QgbW9yZQorICAgIGxpa2UgVGFzay5jYW5jZWwoKSwgd2hpY2ggZG9lc24ndCBpbW1lZGlhdGVseSBtYXJrIGl0c2VsZiBhcworICAgIGNhbmNlbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZHJlbiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gY2hpbGRyZW4KKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgIGNoaWxkLmNhbmNlbCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdhdGhlcigqY29yb3Nfb3JfZnV0dXJlcywgbG9vcD1Ob25lLCByZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgZnV0dXJlIGFnZ3JlZ2F0aW5nIHJlc3VsdHMgZnJvbSB0aGUgZ2l2ZW4gY29yb3V0aW5lcworICAgIG9yIGZ1dHVyZXMuCisKKyAgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZQorICAgIGRvbmUgc3VjY2Vzc2Z1bGx5LCB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgcmVzdWx0IGlzIHRoZSBsaXN0IG9mCisgICAgcmVzdWx0cyAoaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgdGhlIG9yZGVyIG9mIHJlc3VsdHMgYXJyaXZhbCkuICBJZiAqcmVzdWx0X2V4Y2VwdGlvbiogaXMgVHJ1ZSwKKyAgICBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsCisgICAgcmVzdWx0cywgYW5kIGdhdGhlcmVkIGluIHRoZSByZXN1bHQgbGlzdDsgb3RoZXJ3aXNlLCB0aGUgZmlyc3QKKyAgICByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUgcmV0dXJuZWQKKyAgICBmdXR1cmUuCisKKyAgICBDYW5jZWxsYXRpb246IGlmIHRoZSBvdXRlciBGdXR1cmUgaXMgY2FuY2VsbGVkLCBhbGwgY2hpbGRyZW4gKHRoYXQKKyAgICBoYXZlIG5vdCBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMKKyAgICBjYW5jZWxsZWQsIHRoaXMgaXMgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgQ2FuY2VsbGVkRXJyb3IgLS0KKyAgICB0aGUgb3V0ZXIgRnV0dXJlIGlzICpub3QqIGNhbmNlbGxlZCBpbiB0aGlzIGNhc2UuICAoVGhpcyBpcyB0bworICAgIHByZXZlbnQgdGhlIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8KKyAgICBiZSBjYW5jZWxsZWQuKQorICAgICIiIgorICAgIGNoaWxkcmVuID0gW2FzeW5jKGZ1dCwgbG9vcD1sb29wKSBmb3IgZnV0IGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbiA9IGxlbihjaGlsZHJlbikKKyAgICBpZiBuID09IDA6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBjaGlsZHJlblswXS5fbG9vcAorICAgIGZvciBmdXQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGZ1dC5fbG9vcCBpcyBub3QgbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZ1dHVyZXMgYXJlIHRpZWQgdG8gZGlmZmVyZW50IGV2ZW50IGxvb3BzIikKKyAgICBvdXRlciA9IF9HYXRoZXJpbmdGdXR1cmUoY2hpbGRyZW4sIGxvb3A9bG9vcCkKKyAgICBuZmluaXNoZWQgPSAwCisgICAgcmVzdWx0cyA9IFtOb25lXSAqIG4KKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpLCBmdXQpOgorICAgICAgICBub25sb2NhbCBuZmluaXNoZWQKKyAgICAgICAgaWYgb3V0ZXIuX3N0YXRlICE9IGZ1dHVyZXMuX1BFTkRJTkc6CisgICAgICAgICAgICBpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBmdXQuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBmdXQuX3N0YXRlID09IGZ1dHVyZXMuX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJlcyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gZnV0LmV4Y2VwdGlvbigpICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5fcmVzdWx0CisgICAgICAgIHJlc3VsdHNbaV0gPSByZXMKKyAgICAgICAgbmZpbmlzaGVkICs9IDEKKyAgICAgICAgaWYgbmZpbmlzaGVkID09IG46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gYXN5bmMoYXJnLCBsb29wPWxvb3ApCisgICAgaWYgaW5uZXIuZG9uZSgpOgorICAgICAgICAjIFNob3J0Y3V0LgorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBsb29wID0gaW5uZXIuX2xvb3AKKyAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CisgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlubmVyLmNhbmNlbGxlZCgpIG9yIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3OGRkMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSwyNjIgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBtYWtlX3NlcnZlciwgV1NHSVJlcXVlc3RIYW5kbGVyLCBXU0dJU2VydmVyCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKK2Vsc2U6CisgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIgICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK2RlZiBkdW1teV9zc2xfY29udGV4dCgpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorCisKK2RlZiBydW5fYnJpZWZseShsb29wKToKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIG9uY2UoKToKKyAgICAgICAgcGFzcworICAgIGdlbiA9IG9uY2UoKQorICAgIHQgPSB0YXNrcy5UYXNrKGdlbiwgbG9vcD1sb29wKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICBmaW5hbGx5OgorICAgICAgICBnZW4uY2xvc2UoKQorCisKK2RlZiBydW5fdW50aWwobG9vcCwgcHJlZCwgdGltZW91dD1Ob25lKToKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorICAgIHdoaWxlIG5vdCBwcmVkKCk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2xlZXAodGltZW91dCwgbG9vcD1sb29wKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ1bl9icmllZmx5KGxvb3ApCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgcnVuX29uY2UobG9vcCk6CisgICAgIiIibG9vcC5zdG9wKCkgc2NoZWR1bGVzIF9yYWlzZV9zdG9wX2Vycm9yKCkKKyAgICBhbmQgcnVuX2ZvcmV2ZXIoKSBydW5zIHVudGlsIF9yYWlzZV9zdG9wX2Vycm9yKCkgY2FsbGJhY2suCisgICAgdGhpcyB3b250IHdvcmsgaWYgdGVzdCB3YWl0cyBmb3Igc29tZSBJTyBldmVudHMsIGJlY2F1c2UKKyAgICBfcmFpc2Vfc3RvcF9lcnJvcigpIHJ1bnMgYmVmb3JlIGFueSBvZiBpbyBldmVudHMgY2FsbGJhY2tzLgorICAgICIiIgorICAgIGxvb3Auc3RvcCgpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5fdGVzdF9zZXJ2ZXIoKiwgaG9zdD0nMTI3LjAuMC4xJywgcG9ydD0wLCB1c2Vfc3NsPUZhbHNlKToKKworICAgIGNsYXNzIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBkZWYgZ2V0X3N0ZGVycihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBpby5TdHJpbmdJTygpCisKKyAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgY2xhc3MgU2lsZW50V1NHSVNlcnZlcihXU0dJU2VydmVyKToKKyAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTU0xXU0dJU2VydmVyKFNpbGVudFdTR0lTZXJ2ZXIpOgorICAgICAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgIyBUaGUgcmVsYXRpdmUgbG9jYXRpb24gb2Ygb3VyIHRlc3QgZGlyZWN0b3J5ICh3aGljaAorICAgICAgICAgICAgIyBjb250YWlucyB0aGUgc2FtcGxlIGtleSBhbmQgY2VydGlmaWNhdGUgZmlsZXMpIGRpZmZlcnMKKyAgICAgICAgICAgICMgYmV0d2VlbiB0aGUgc3RkbGliIGFuZCBzdGFuZC1hbG9uZSBUdWxpcC9hc3luY2lvLgorICAgICAgICAgICAgIyBQcmVmZXIgb3VyIG93biBpZiB3ZSBjYW4gZmluZCBpdC4KKyAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJ3Rlc3RzJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGhlcmUpOgorICAgICAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0JywgJ3Rlc3RfYXN5bmNpbycpCisgICAgICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUua2V5JykKKyAgICAgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUuY3J0JykKKyAgICAgICAgICAgIHNzb2NrID0gc3NsLndyYXBfc29ja2V0KHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzKHNzb2NrLCBjbGllbnRfYWRkcmVzcywgc2VsZikKKyAgICAgICAgICAgICAgICBzc29jay5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIG1heWJlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgcGVlcgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBhcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJworICAgICAgICBoZWFkZXJzID0gWygnQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKV0KKyAgICAgICAgc3RhcnRfcmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gW2InVGVzdCBtZXNzYWdlJ10KKworICAgICMgUnVuIHRoZSB0ZXN0IFdTR0kgc2VydmVyIGluIGEgc2VwYXJhdGUgdGhyZWFkIGluIG9yZGVyIG5vdCB0bworICAgICMgaW50ZXJmZXJlIHdpdGggZXZlbnQgaGFuZGxpbmcgaW4gdGhlIG1haW4gdGhyZWFkCisgICAgc2VydmVyX2NsYXNzID0gU1NMV1NHSVNlcnZlciBpZiB1c2Vfc3NsIGVsc2UgU2lsZW50V1NHSVNlcnZlcgorICAgIGh0dHBkID0gbWFrZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgYXBwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2NsYXNzLCBTaWxlbnRXU0dJUmVxdWVzdEhhbmRsZXIpCisgICAgaHR0cGQuYWRkcmVzcyA9IGh0dHBkLnNlcnZlcl9hZGRyZXNzCisgICAgc2VydmVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBkLnNlcnZlX2ZvcmV2ZXIpCisgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBodHRwZAorICAgIGZpbmFsbHk6CisgICAgICAgIGh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgaHR0cGQuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VydmVyX3RocmVhZC5qb2luKCkKKworCitkZWYgbWFrZV90ZXN0X3Byb3RvY29sKGJhc2UpOgorICAgIGRjdCA9IHt9CisgICAgZm9yIG5hbWUgaW4gZGlyKGJhc2UpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19fJykgYW5kIG5hbWUuZW5kc3dpdGgoJ19fJyk6CisgICAgICAgICAgICAjIHNraXAgbWFnaWMgbmFtZXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGRjdFtuYW1lXSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKKyAgICByZXR1cm4gdHlwZSgnVGVzdFByb3RvY29sJywgKGJhc2UsKSArIGJhc2UuX19iYXNlc19fLCBkY3QpKCkKKworCitjbGFzcyBUZXN0U2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByZXR1cm4gW10KKworCitjbGFzcyBUZXN0TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJMb29wIGZvciB1bml0dGVzdHMuCisKKyAgICBJdCBtYW5hZ2VzIHNlbGYgdGltZSBkaXJlY3RseS4KKyAgICBJZiBzb21ldGhpbmcgc2NoZWR1bGVkIHRvIGJlIGV4ZWN1dGVkIGxhdGVyIHRoZW4KKyAgICBvbiBuZXh0IGxvb3AgaXRlcmF0aW9uIGFmdGVyIGFsbCByZWFkeSBoYW5kbGVycyBkb25lCisgICAgZ2VuZXJhdG9yIHBhc3NlZCB0byBfX2luaXRfXyBpcyBjYWxsaW5nLgorCisgICAgR2VuZXJhdG9yIHNob3VsZCBiZSBsaWtlIHRoaXM6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICB3aGVuID0geWllbGQgLi4uCisgICAgICAgICAgICAuLi4gPSB5aWVsZCB0aW1lX2FkdmFuY2UKKworICAgIFZhbHVlIHJldHVuZWQgYnkgeWllbGQgaXMgYWJzb2x1dGUgdGltZSBvZiBuZXh0IHNjaGVkdWxlZCBoYW5kbGVyLgorICAgIFZhbHVlIHBhc3NlZCB0byB5aWVsZCBpcyB0aW1lIGFkdmFuY2UgdG8gbW92ZSBsb29wJ3MgdGltZSBmb3J3YXJkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX2dlbiA9IGdlbigpCisgICAgICAgIG5leHQoc2VsZi5fZ2VuKQorICAgICAgICBzZWxmLl90aW1lID0gMAorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IFRlc3RTZWxlY3RvcigpCisKKyAgICAgICAgc2VsZi5yZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi53cml0ZXJzID0ge30KKyAgICAgICAgc2VsZi5yZXNldF9jb3VudGVycygpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWUKKworICAgIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZSk6CisgICAgICAgICIiIk1vdmUgdGVzdCB0aW1lIGZvcndhcmQuIiIiCisgICAgICAgIGlmIGFkdmFuY2U6CisgICAgICAgICAgICBzZWxmLl90aW1lICs9IGFkdmFuY2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2hlY2tfb25fY2xvc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZ2VuLnNlbmQoMCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGltZSBnZW5lcmF0b3IgaXMgbm90IGZpbmlzaGVkIikKKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLnJlYWRlcnNbZmRdID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorCisgICAgZGVmIHJlbW92ZV9yZWFkZXIoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXJfY291bnRbZmRdICs9IDEKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5yZWFkZXJzOgorICAgICAgICAgICAgZGVsIHNlbGYucmVhZGVyc1tmZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhc3NlcnRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgZmQgaW4gc2VsZi5yZWFkZXJzLCAnZmQge30gaXMgbm90IHJlZ2lzdGVyZWQnLmZvcm1hdChmZCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9jYWxsYmFjayA9PSBjYWxsYmFjaywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2FyZ3MgPT0gYXJncywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9hcmdzLCBhcmdzKQorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYud3JpdGVyc1tmZF0gPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLndyaXRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLndyaXRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgcmVzZXRfY291bnRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fcnVuX29uY2UoKQorICAgICAgICBmb3Igd2hlbiBpbiBzZWxmLl90aW1lcnM6CisgICAgICAgICAgICBhZHZhbmNlID0gc2VsZi5fZ2VuLnNlbmQod2hlbikKKyAgICAgICAgICAgIHNlbGYuYWR2YW5jZV90aW1lKGFkdmFuY2UpCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl90aW1lcnMuYXBwZW5kKHdoZW4pCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjkyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsMjExIEBACisiIiJBYnN0cmFjdCBUcmFuc3BvcnQgY2xhc3MuIiIiCisKK19fYWxsX18gPSBbJ1JlYWRUcmFuc3BvcnQnLCAnV3JpdGVUcmFuc3BvcnQnLCAnVHJhbnNwb3J0J10KKworCitjbGFzcyBCYXNlVHJhbnNwb3J0OgorICAgICIiIkJhc2UgQUJDIGZvciB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhPU5vbmUpOgorICAgICAgICBpZiBleHRyYSBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmEgPSB7fQorICAgICAgICBzZWxmLl9leHRyYSA9IGV4dHJhCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhLmdldChuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBmbHVzaGVkIGFzeW5jaHJvbm91c2x5LiAgTm8gbW9yZSBkYXRhCisgICAgICAgIHdpbGwgYmUgcmVjZWl2ZWQuICBBZnRlciBhbGwgYnVmZmVyZWQgZGF0YSBpcyBmbHVzaGVkLCB0aGUKKyAgICAgICAgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgY2FsbGVkCisgICAgICAgIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgUmVhZFRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJBQkMgZm9yIHJlYWQtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICIiIlBhdXNlIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHByb3RvY29sJ3MgZGF0YV9yZWNlaXZlZCgpCisgICAgICAgIG1ldGhvZCB1bnRpbCByZXN1bWVfcmVhZGluZygpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIERhdGEgcmVjZWl2ZWQgd2lsbCBvbmNlIGFnYWluIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncworICAgICAgICBkYXRhX3JlY2VpdmVkKCkgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFdyaXRlVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkFCQyBmb3Igd3JpdGUtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICAiIiJTZXQgdGhlIGhpZ2gtIGFuZCBsb3ctd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gdG8gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgICBwYXVzZV93cml0aW5nKCkgYW5kIHJlc3VtZV93cml0aW5nKCkgbWV0aG9kcy4gIElmIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIE5laXRoZXIgdmFsdWUgY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICAgIFRoZSBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBJZiBvbmx5IHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpc3Rfb2ZfZGF0YSk6CisgICAgICAgICIiIldyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCBjYWxscyB3cml0ZSgpIGZvciBlYWNoIGl0ZW0gaW4KKyAgICAgICAgdGhlIGxpc3QvaXRlcmFibGUuCisgICAgICAgICIiIgorICAgICAgICBmb3IgZGF0YSBpbiBsaXN0X29mX2RhdGE6CisgICAgICAgICAgICBzZWxmLndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgd3JpdGUgZW5kIGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGEuCisKKyAgICAgICAgKFRoaXMgaXMgbGlrZSB0eXBpbmcgXkQgaW50byBhIFVOSVggcHJvZ3JhbSByZWFkaW5nIGZyb20gc3RkaW4uKQorCisgICAgICAgIERhdGEgbWF5IHN0aWxsIGJlIHJlY2VpdmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIHdyaXRlX2VvZigpLCBGYWxzZSBpZiBub3QuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseS4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgICBUaGUgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgYmUKKyAgICAgICAgY2FsbGVkIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgVHJhbnNwb3J0KFJlYWRUcmFuc3BvcnQsIFdyaXRlVHJhbnNwb3J0KToKKyAgICAiIiJBQkMgcmVwcmVzZW50aW5nIGEgYmlkaXJlY3Rpb25hbCB0cmFuc3BvcnQuCisKKyAgICBUaGVyZSBtYXkgYmUgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbnMsIGJ1dCB0eXBpY2FsbHksIHRoZSB1c2VyIGRvZXMKKyAgICBub3QgaW1wbGVtZW50IG5ldyB0cmFuc3BvcnRzOyByYXRoZXIsIHRoZSBwbGF0Zm9ybSBwcm92aWRlcyBzb21lCisgICAgdXNlZnVsIHRyYW5zcG9ydHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgYmVzdAorICAgIHByYWN0aWNlcy4KKworICAgIFRoZSB1c2VyIG5ldmVyIGluc3RhbnRpYXRlcyBhIHRyYW5zcG9ydCBkaXJlY3RseTsgdGhleSBjYWxsIGEKKyAgICB1dGlsaXR5IGZ1bmN0aW9uLCBwYXNzaW5nIGl0IGEgcHJvdG9jb2wgZmFjdG9yeSBhbmQgb3RoZXIKKyAgICBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoZSB0cmFuc3BvcnQgYW5kIHByb3RvY29sLiAgKEUuZy4KKyAgICBFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKSBvciBFdmVudExvb3AuY3JlYXRlX3NlcnZlcigpLikKKworICAgIFRoZSB1dGlsaXR5IGZ1bmN0aW9uIHdpbGwgYXN5bmNocm9ub3VzbHkgY3JlYXRlIGEgdHJhbnNwb3J0IGFuZCBhCisgICAgcHJvdG9jb2wgYW5kIGhvb2sgdGhlbSB1cCBieSBjYWxsaW5nIHRoZSBwcm90b2NvbCdzCisgICAgY29ubmVjdGlvbl9tYWRlKCkgbWV0aG9kLCBwYXNzaW5nIGl0IHRoZSB0cmFuc3BvcnQuCisKKyAgICBUaGUgaW1wbGVtZW50YXRpb24gaGVyZSByYWlzZXMgTm90SW1wbGVtZW50ZWQgZm9yIGV2ZXJ5IG1ldGhvZAorICAgIGV4Y2VwdCB3cml0ZWxpbmVzKCksIHdoaWNoIGNhbGxzIHdyaXRlKCkgaW4gYSBsb29wLgorICAgICIiIgorCisKK2NsYXNzIERhdGFncmFtVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkFCQyBmb3IgZGF0YWdyYW0gKFVEUCkgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBzZW5kdG8oc2VsZiwgZGF0YSwgYWRkcj1Ob25lKToKKyAgICAgICAgIiIiU2VuZCBkYXRhIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhpcyBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorICAgICAgICBhZGRyIGlzIHRhcmdldCBzb2NrZXQgYWRkcmVzcy4KKyAgICAgICAgSWYgYWRkciBpcyBOb25lIHVzZSB0YXJnZXQgYWRkcmVzcyBwb2ludGVkIG9uIHRyYW5zcG9ydCBjcmVhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseS4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgICBUaGUgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgYmUKKyAgICAgICAgY2FsbGVkIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgU3VicHJvY2Vzc1RyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKworICAgIGRlZiBnZXRfcGlkKHNlbGYpOgorICAgICAgICAiIiJHZXQgc3VicHJvY2VzcyBpZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAiIiJHZXQgc3VicHJvY2VzcyByZXR1cm5jb2RlLgorCisgICAgICAgIFNlZSBhbHNvCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgIiIiR2V0IHRyYW5zcG9ydCBmb3IgcGlwZSB3aXRoIG51bWJlciBmZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZ25hbCk6CisgICAgICAgICIiIlNlbmQgc2lnbmFsIHRvIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGRvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnNlbmRfc2lnbmFsCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIEFsaWFzIGZvciBjbG9zZSgpIG1ldGhvZC4KKworICAgICAgICBPbiBQb3NpeCBPU3MgdGhlIG1ldGhvZCBzZW5kcyBTSUdURVJNIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgICBPbiBXaW5kb3dzIHRoZSBXaW4zMiBBUEkgZnVuY3Rpb24gVGVybWluYXRlUHJvY2VzcygpCisgICAgICAgICBpcyBjYWxsZWQgdG8gc3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgICIiIktpbGwgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdLSUxMIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgICBPbiBXaW5kb3dzIGtpbGwoKSBpcyBhbiBhbGlhcyBmb3IgdGVybWluYXRlKCkuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5raWxsCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MTFlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDc0NCBAQAorIiIiU2VsZWN0b3IgZXZlbnRsb29wIGZvciBVbml4IHdpdGggc2lnbmFsIGhhbmRsaW5nLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmY250bAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfX2FsbF9fID0gWydTZWxlY3RvckV2ZW50TG9vcCcsICdTVERJTicsICdTVERPVVQnLCAnU1RERVJSJywKKyAgICAgICAgICAgJ0Fic3RyYWN0Q2hpbGRXYXRjaGVyJywgJ1NhZmVDaGlsZFdhdGNoZXInLAorICAgICAgICAgICAnRmFzdENoaWxkV2F0Y2hlcicsICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCitTVERJTiA9IDAKK1NURE9VVCA9IDEKK1NUREVSUiA9IDIKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdTaWduYWxzIGFyZSBub3QgcmVhbGx5IHN1cHBvcnRlZCBvbiBXaW5kb3dzJykKKworCitjbGFzcyBfVW5peFNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIlVuaXggZXZlbnQgbG9vcAorCisgICAgQWRkcyBzaWduYWwgaGFuZGxpbmcgdG8gU2VsZWN0b3JFdmVudExvb3AKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxlY3RvcikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzID0ge30KKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXRwYWlyKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNpZyBpbiBsaXN0KHNlbGYuX3NpZ25hbF9oYW5kbGVycyk6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIGFkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLiAgVU5JWCBvbmx5LgorCisgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHNpZ25hbCBudW1iZXIgaXMgaW52YWxpZCBvciB1bmNhdGNoYWJsZS4KKyAgICAgICAgUmFpc2UgUnVudGltZUVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBzZXRfd2FrZXVwX2ZkKCkgcmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhpcyBpcyBub3QgdGhlCisgICAgICAgICAgICAjIG1haW4gdGhyZWFkLiAgQnkgY2FsbGluZyBpdCBlYXJseSB3ZSBlbnN1cmUgdGhhdCBhbgorICAgICAgICAgICAgIyBldmVudCBsb29wIHJ1bm5pbmcgaW4gYW5vdGhlciB0aHJlYWQgY2Fubm90IGFkZCBhIHNpZ25hbAorICAgICAgICAgICAgIyBoYW5kbGVyLgorICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoc2VsZi5fY3NvY2suZmlsZW5vKCkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzdHIoZXhjKSkKKworICAgICAgICBoYW5kbGUgPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddID0gaGFuZGxlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWcsIHNlbGYuX2hhbmRsZV9zaWduYWwpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGRlbCBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3NpZ25hbF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKC0xKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG5leGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdzZXRfd2FrZXVwX2ZkKC0xKSBmYWlsZWQ6ICVzJywgbmV4YykKKworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfaGFuZGxlX3NpZ25hbChzZWxmLCBzaWcsIGFyZyk6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0aGF0IGlzIHRoZSBhY3R1YWwgc2lnbmFsIGhhbmRsZXIuIiIiCisgICAgICAgIGhhbmRsZSA9IHNlbGYuX3NpZ25hbF9oYW5kbGVycy5nZXQoc2lnKQorICAgICAgICBpZiBoYW5kbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAgIyBBc3N1bWUgaXQncyBzb21lIHJhY2UgY29uZGl0aW9uLgorICAgICAgICBpZiBoYW5kbGUuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZykgICMgUmVtb3ZlIGl0IHByb3Blcmx5LgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrX3NpZ25hbHNhZmUoaGFuZGxlKQorCisgICAgZGVmIHJlbW92ZV9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcpOgorICAgICAgICAiIiJSZW1vdmUgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4gIFVOSVggb25seS4KKworICAgICAgICBSZXR1cm4gVHJ1ZSBpZiBhIHNpZ25hbCBoYW5kbGVyIHdhcyByZW1vdmVkLCBGYWxzZSBpZiBub3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19zaWduYWwoc2lnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2lnID09IHNpZ25hbC5TSUdJTlQ6CisgICAgICAgICAgICBoYW5kbGVyID0gc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuU0lHX0RGTAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBoYW5kbGVyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2lnIHt9IGNhbm5vdCBiZSBjYXVnaHQnLmZvcm1hdChzaWcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoLTEpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBleGMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfc2lnbmFsKHNlbGYsIHNpZyk6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byB2YWxpZGF0ZSBhIHNpZ25hbC4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc2lnIG11c3QgYmUgYW4gaW50LCBub3QgeyFyfScuZm9ybWF0KHNpZykpCisKKyAgICAgICAgaWYgbm90ICgxIDw9IHNpZyA8IHNpZ25hbC5OU0lHKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ3NpZyB7fSBvdXQgb2YgcmFuZ2UoMSwge30pJy5mb3JtYXQoc2lnLCBzaWduYWwuTlNJRykpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBldmVudHMuZ2V0X2NoaWxkX3dhdGNoZXIoKSBhcyB3YXRjaGVyOgorICAgICAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpCisgICAgICAgICAgICB3YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKHRyYW5zcC5nZXRfcGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoaWxkX3dhdGNoZXJfY2FsbGJhY2ssIHRyYW5zcCkKKyAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgIHJldHVybiB0cmFuc3AKKworICAgIGRlZiBfY2hpbGRfd2F0Y2hlcl9jYWxsYmFjayhzZWxmLCBwaWQsIHJldHVybmNvZGUsIHRyYW5zcCk6CisgICAgICAgIHNlbGYuY2FsbF9zb29uX3RocmVhZHNhZmUodHJhbnNwLl9wcm9jZXNzX2V4aXRlZCwgcmV0dXJuY29kZSkKKworICAgIGRlZiBfc3VicHJvY2Vzc19jbG9zZWQoc2VsZiwgdHJhbnNwKToKKyAgICAgICAgcGFzcworCisKK2RlZiBfc2V0X25vbmJsb2NraW5nKGZkKToKKyAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgIGZsYWdzID0gZmxhZ3MgfCBvcy5PX05PTkJMT0NLCisgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsYWdzKQorCisKK2NsYXNzIF9Vbml4UmVhZFBpcGVUcmFuc3BvcnQodHJhbnNwb3J0cy5SZWFkVHJhbnNwb3J0KToKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgIyBtYXggYnl0ZXMgd2UgcmVhZCBpbiBvbmUgZXZlbnRsb29wIGl0ZXJhdGlvbgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX2V4dHJhWydwaXBlJ10gPSBwaXBlCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3BpcGUgPSBwaXBlCisgICAgICAgIHNlbGYuX2ZpbGVubyA9IHBpcGUuZmlsZW5vKCkKKyAgICAgICAgbW9kZSA9IG9zLmZzdGF0KHNlbGYuX2ZpbGVubykuc3RfbW9kZQorICAgICAgICBpZiBub3QgKHN0YXQuU19JU0ZJRk8obW9kZSkgb3Igc3RhdC5TX0lTU09DSyhtb2RlKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQaXBlIHRyYW5zcG9ydCBpcyBmb3IgcGlwZXMvc29ja2V0cyBvbmx5LiIpCisgICAgICAgIF9zZXRfbm9uYmxvY2tpbmcoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLl9maWxlbm8sIHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICAjIHNob3VsZCBiZSBjYWxsZWQgYnkgZXhjZXB0aW9uIGhhbmRsZXIgb25seQorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9jbG9zZShleGMpCisKKyAgICBkZWYgX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworY2xhc3MgX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQodHJhbnNwb3J0cy5Xcml0ZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlzX3NvY2tldCA9IHN0YXQuU19JU1NPQ0sobW9kZSkKKyAgICAgICAgaXNfcGlwZSA9IHN0YXQuU19JU0ZJRk8obW9kZSkKKyAgICAgICAgaWYgbm90IChpc19zb2NrZXQgb3IgaXNfcGlwZSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQaXBlIHRyYW5zcG9ydCBpcyBmb3IgcGlwZXMvc29ja2V0cyBvbmx5LiIpCisgICAgICAgIF9zZXRfbm9uYmxvY2tpbmcoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgb3Igd3JpdGVfZW9mKCkgY2FsbGVkLgorCisgICAgICAgICMgT24gQUlYLCB0aGUgcmVhZGVyIHRyaWNrIG9ubHkgd29ya3MgZm9yIHNvY2tldHMuCisgICAgICAgICMgT24gb3RoZXIgcGxhdGZvcm1zIGl0IHdvcmtzIGZvciBwaXBlcyBhbmQgc29ja2V0cy4KKyAgICAgICAgIyAoRXhjZXB0aW9uOiBPUyBYIDEwLjQ/ICBJc3N1ZSAjMTkyOTQuKQorICAgICAgICBpZiBpc19zb2NrZXQgb3Igbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJhaXgiKToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgIyBQaXBlIHdhcyBjbG9zZWQgYnkgcGVlci4KKyAgICAgICAgc2VsZi5fY2xvc2UoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBieXRlcyksIHJlcHIoZGF0YSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Qgb3Igc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdwaXBlIGNsb3NlZCBieSBwZWVyIG9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorCisgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgYXNzZXJ0IGRhdGEsICdEYXRhIHNob3VsZCBub3QgYmUgZW1wdHknCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IG9zLndyaXRlKHNlbGYuX2ZpbGVubywgZGF0YSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICAjIFJlbW92ZSB3cml0ZXIgaGVyZSwgX2ZhdGFsX2Vycm9yKCkgZG9lc24ndCBpdAorICAgICAgICAgICAgIyBiZWNhdXNlIF9idWZmZXIgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiBuID4gMDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKworICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKSAgIyBUcnkgYWdhaW4gbGF0ZXIuCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgVE9ETzogTWFrZSB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHdyaXRlX2VvZigpLCBjbG9zZSgpLAorICAgICMgYWJvcnQoKSwgX2ZhdGFsX2Vycm9yKCkgYW5kIF9jbG9zZSgpIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhc3NlcnQgc2VsZi5fcGlwZQorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICMgd3JpdGVfZW9mIGlzIGFsbCB3aGF0IHdlIG5lZWRlZCB0byBjbG9zZSB0aGUgd3JpdGUgcGlwZQorICAgICAgICAgICAgc2VsZi53cml0ZV9lb2YoKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICAjIHNob3VsZCBiZSBjYWxsZWQgYnkgZXhjZXB0aW9uIGhhbmRsZXIgb25seQorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9jbG9zZShleGMpCisKKyAgICBkZWYgX2Nsb3NlKHNlbGYsIGV4Yz1Ob25lKToKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBfVW5peFN1YnByb2Nlc3NUcmFuc3BvcnQoYmFzZV9zdWJwcm9jZXNzLkJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgYXJncywgc2hlbGwsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGRpbl93ID0gTm9uZQorICAgICAgICBpZiBzdGRpbiA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICAjIFVzZSBhIHNvY2tldCBwYWlyIGZvciBzdGRpbiwgc2luY2Ugbm90IGFsbCBwbGF0Zm9ybXMKKyAgICAgICAgICAgICMgc3VwcG9ydCBzZWxlY3RpbmcgcmVhZCBldmVudHMgb24gdGhlIHdyaXRlIGVuZCBvZiBhCisgICAgICAgICAgICAjIHNvY2tldCAod2hpY2ggd2UgdXNlIGluIG9yZGVyIHRvIGRldGVjdCBjbG9zaW5nIG9mIHRoZQorICAgICAgICAgICAgIyBvdGhlciBlbmQpLiAgTm90YWJseSB0aGlzIGlzIG5lZWRlZCBvbiBBSVgsIGFuZCB3b3JrcworICAgICAgICAgICAgIyBqdXN0IGZpbmUgb24gb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICAgICAgc3RkaW4sIHN0ZGluX3cgPSBzZWxmLl9sb29wLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHN0ZGluX3cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gb3BlbihzdGRpbl93LmRldGFjaCgpLCAncmInLCBidWZmZXJpbmc9YnVmc2l6ZSkKKworCitjbGFzcyBBYnN0cmFjdENoaWxkV2F0Y2hlcjoKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBtb25pdG9yaW5nIGNoaWxkIHByb2Nlc3Nlcy4KKworICAgIE9iamVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MgbW9uaXRvciBhIGNvbGxlY3Rpb24gb2Ygc3VicHJvY2Vzc2VzIGFuZAorICAgIHJlcG9ydCB0aGVpciB0ZXJtaW5hdGlvbiBvciBpbnRlcnJ1cHRpb24gYnkgYSBzaWduYWwuCisKKyAgICBOZXcgY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkIHdpdGggLmFkZF9jaGlsZF9oYW5kbGVyKCkuIFN0YXJ0aW5nIGEgbmV3CisgICAgcHJvY2VzcyBtdXN0IGJlIGRvbmUgd2l0aGluIGEgJ3dpdGgnIGJsb2NrIHRvIGFsbG93IHRoZSB3YXRjaGVyIHRvIHN1c3BlbmQKKyAgICBpdHMgYWN0aXZpdHkgdW50aWwgdGhlIG5ldyBwcm9jZXNzIGlmIGZ1bGx5IHJlZ2lzdGVyZWQgKHRoaXMgaXMgbmVlZGVkIHRvCisgICAgcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIHNvbWUgaW1wbGVtZW50YXRpb25zKS4KKworICAgIEV4YW1wbGU6CisgICAgICAgIHdpdGggd2F0Y2hlcjoKKyAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCJzbGVlcCAxIikKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIocHJvYy5waWQsIGNhbGxiYWNrKQorCisgICAgTm90ZXM6CisgICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGNsYXNzIG11c3QgYmUgdGhyZWFkLXNhZmUuCisKKyAgICAgICAgU2luY2UgY2hpbGQgd2F0Y2hlciBvYmplY3RzIG1heSBjYXRjaCB0aGUgU0lHQ0hMRCBzaWduYWwgYW5kIGNhbGwKKyAgICAgICAgd2FpdHBpZCgtMSksIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBhY3RpdmUgb2JqZWN0IHBlciBwcm9jZXNzLgorICAgICIiIgorCisgICAgZGVmIGFkZF9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBuZXcgY2hpbGQgaGFuZGxlci4KKworICAgICAgICBBcnJhbmdlIGZvciBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKSB0byBiZSBjYWxsZWQgd2hlbgorICAgICAgICBwcm9jZXNzICdwaWQnIHRlcm1pbmF0ZXMuIFNwZWNpZnlpbmcgYW5vdGhlciBjYWxsYmFjayBmb3IgdGhlIHNhbWUKKyAgICAgICAgcHJvY2VzcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgaGFuZGxlci4KKworICAgICAgICBOb3RlOiBjYWxsYmFjaygpIG11c3QgYmUgdGhyZWFkLXNhZmUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgICIiIlJlbW92ZXMgdGhlIGhhbmRsZXIgZm9yIHByb2Nlc3MgJ3BpZCcuCisKKyAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSBpZiB0aGUgaGFuZGxlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsCisgICAgICAgIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHJlbW92ZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBhdHRhY2hfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiQXR0YWNoIHRoZSB3YXRjaGVyIHRvIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgICAgSWYgdGhlIHdhdGNoZXIgd2FzIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYW4gZXZlbnQgbG9vcCwgdGhlbiBpdCBpcworICAgICAgICBmaXJzdCBkZXRhY2hlZCBiZWZvcmUgYXR0YWNoaW5nIHRvIHRoZSBuZXcgbG9vcC4KKworICAgICAgICBOb3RlOiBsb29wIG1heSBiZSBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB3YXRjaGVyLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIkVudGVyIHRoZSB3YXRjaGVyJ3MgY29udGV4dCBhbmQgYWxsb3cgc3RhcnRpbmcgbmV3IHByb2Nlc3NlcworCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gc2VsZiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIiIiRXhpdCB0aGUgd2F0Y2hlcidzIGNvbnRleHQiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKworY2xhc3MgQmFzZUNoaWxkV2F0Y2hlcihBYnN0cmFjdENoaWxkV2F0Y2hlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXR0YWNoX2xvb3AoTm9uZSkKKworICAgIGRlZiBfZG9fd2FpdHBpZChzZWxmLCBleHBlY3RlZF9waWQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBhc3NlcnQgbG9vcCBpcyBOb25lIG9yIGlzaW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCkKKworICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQsIHNlbGYuX3NpZ19jaGxkKQorCisgICAgICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIGEgY2hpbGQgdGVybWluYXRlZAorICAgICAgICAgICAgIyBkdXJpbmcgdGhlIHN3aXRjaC4KKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKworICAgIGRlZiBfc2lnX2NobGQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1Vua25vd24gZXhjZXB0aW9uIGluIFNJR0NITEQgaGFuZGxlcicpCisKKyAgICBkZWYgX2NvbXB1dGVfcmV0dXJuY29kZShzZWxmLCBzdGF0dXMpOgorICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBkaWVkIGJlY2F1c2Ugb2YgYSBzaWduYWwuCisgICAgICAgICAgICByZXR1cm4gLW9zLldURVJNU0lHKHN0YXR1cykKKyAgICAgICAgZWxpZiBvcy5XSUZFWElURUQoc3RhdHVzKToKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgZXhpdGVkIChlLmcgc3lzLmV4aXQoKSkuCisgICAgICAgICAgICByZXR1cm4gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgZXhpdGVkLCBidXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCBpdHMgc3RhdHVzLgorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCBsZXQncyBqdXN0CisgICAgICAgICAgICAjIHJldHVybiB0aGF0IHN0YXR1czsgcGVyaGFwcyB0aGF0IGhlbHBzIGRlYnVnIGl0LgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworCisKK2NsYXNzIFNhZmVDaGlsZFdhdGNoZXIoQmFzZUNoaWxkV2F0Y2hlcik6CisgICAgIiIiJ1NhZmUnIGNoaWxkIHdhdGNoZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGF2b2lkcyBkaXNydXB0aW5nIG90aGVyIGNvZGUgc3Bhd25pbmcgcHJvY2Vzc2VzIGJ5CisgICAgcG9sbGluZyBleHBsaWNpdGx5IGVhY2ggcHJvY2VzcyBpbiB0aGUgU0lHQ0hMRCBoYW5kbGVyIGluc3RlYWQgb2YgY2FsbGluZworICAgIG9zLndhaXRwaWQoLTEpLgorCisgICAgVGhpcyBpcyBhIHNhZmUgc29sdXRpb24gYnV0IGl0IGhhcyBhIHNpZ25pZmljYW50IG92ZXJoZWFkIHdoZW4gaGFuZGxpbmcgYQorICAgIGJpZyBudW1iZXIgb2YgY2hpbGRyZW4gKE8obikgZWFjaCB0aW1lIFNJR0NITEQgaXMgcmFpc2VkKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0ge30KKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3NbcGlkXSA9IGNhbGxiYWNrLCBhcmdzCisKKyAgICAgICAgIyBQcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxyZWFkeSB0ZXJtaW5hdGVkLgorICAgICAgICBzZWxmLl9kb193YWl0cGlkKHBpZCkKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKworICAgICAgICBmb3IgcGlkIGluIGxpc3Qoc2VsZi5fY2FsbGJhY2tzKToKKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWQocGlkKQorCisgICAgZGVmIF9kb193YWl0cGlkKHNlbGYsIGV4cGVjdGVkX3BpZCk6CisgICAgICAgIGFzc2VydCBleHBlY3RlZF9waWQgPiAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKGV4cGVjdGVkX3BpZCwgb3MuV05PSEFORykKKyAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBpcyBhbHJlYWR5IHJlYXBlZAorICAgICAgICAgICAgIyAobWF5IGhhcHBlbiBpZiB3YWl0cGlkKCkgaXMgY2FsbGVkIGVsc2V3aGVyZSkuCisgICAgICAgICAgICBwaWQgPSBleHBlY3RlZF9waWQKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSAyNTUKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgICAgICJVbmtub3duIGNoaWxkIHByb2Nlc3MgcGlkICVkLCB3aWxsIHJlcG9ydCByZXR1cm5jb2RlIDI1NSIsCisgICAgICAgICAgICAgICAgcGlkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX2NvbXB1dGVfcmV0dXJuY29kZShzdGF0dXMpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FsbGJhY2ssIGFyZ3MgPSBzZWxmLl9jYWxsYmFja3MucG9wKHBpZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAjIE1heSBoYXBwZW4gaWYgLnJlbW92ZV9jaGlsZF9oYW5kbGVyKCkgaXMgY2FsbGVkCisgICAgICAgICAgICAjIGFmdGVyIG9zLndhaXRwaWQoKSByZXR1cm5zLgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyKEJhc2VDaGlsZFdhdGNoZXIpOgorICAgICIiIidGYXN0JyBjaGlsZCB3YXRjaGVyIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZWFwcyBldmVyeSB0ZXJtaW5hdGVkIHByb2Nlc3NlcyBieSBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkgZGlyZWN0bHksIHBvc3NpYmx5IGJyZWFraW5nIG90aGVyIGNvZGUgc3Bhd25pbmcgcHJvY2Vzc2VzCisgICAgYW5kIHdhaXRpbmcgZm9yIHRoZWlyIHRlcm1pbmF0aW9uLgorCisgICAgVGhlcmUgaXMgbm8gbm90aWNlYWJsZSBvdmVyaGVhZCB3aGVuIGhhbmRsaW5nIGEgYmlnIG51bWJlciBvZiBjaGlsZHJlbgorICAgIChPKDEpIGVhY2ggdGltZSBhIGNoaWxkIHRlcm1pbmF0ZXMpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IHt9CisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3pvbWJpZXMgPSB7fQorICAgICAgICBzZWxmLl9mb3JrcyA9IDAKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmNsZWFyKCkKKyAgICAgICAgc2VsZi5fem9tYmllcy5jbGVhcigpCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZm9ya3MgKz0gMQorCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mb3JrcyAtPSAxCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZvcmtzIG9yIG5vdCBzZWxmLl96b21iaWVzOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjb2xsYXRlcmFsX3ZpY3RpbXMgPSBzdHIoc2VsZi5fem9tYmllcykKKyAgICAgICAgICAgIHNlbGYuX3pvbWJpZXMuY2xlYXIoKQorCisgICAgICAgIGxvZ2dlci53YXJuaW5nKAorICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzZXMgdGVybWluYXRpb24gZnJvbSB1bmtub3duIHBpZHM6ICVzIiwKKyAgICAgICAgICAgIGNvbGxhdGVyYWxfdmljdGltcykKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBzZWxmLl9mb3JrcywgIk11c3QgdXNlIHRoZSBjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzW3BpZF0gPSBjYWxsYmFjaywgYXJncworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIG5vdCBhbHJlYWR5IHRlcm1pbmF0ZWQuCisgICAgICAgICAgICAjIChyYWlzZSBLZXlFcnJvciBpZiBzdGlsbCBhbGl2ZSkKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl96b21iaWVzLnBvcChwaWQpCisKKyAgICAgICAgICAgICMgQ2hpbGQgaXMgZGVhZCwgdGhlcmVmb3JlIHdlIGNhbiBmaXJlIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICMgRmlyc3Qgd2UgcmVtb3ZlIGl0IGZyb20gdGhlIGRpY3QuCisgICAgICAgICAgICAjIChyYWlzZSBLZXlFcnJvciBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSB3YXMgY2FsbGVkIGluLWJldHdlZW4pCisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgIyBCZWNhdXNlIG9mIHNpZ25hbCBjb2FsZXNjaW5nLCB3ZSBtdXN0IGtlZXAgY2FsbGluZyB3YWl0cGlkKCkgYXMKKyAgICAgICAgIyBsb25nIGFzIHdlJ3JlIGFibGUgdG8gcmVhcCBhIGNoaWxkLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgtMSwgb3MuV05PSEFORykKKyAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIE5vIG1vcmUgY2hpbGQgcHJvY2Vzc2VzIGV4aXN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBBIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX2NvbXB1dGVfcmV0dXJuY29kZShzdGF0dXMpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICMgdW5rbm93biBjaGlsZAorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3M6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEl0IG1heSBub3QgYmUgcmVnaXN0ZXJlZCB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl96b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICJDYXVnaHQgc3VicHJvY2VzcyB0ZXJtaW5hdGlvbiBmcm9tIHVua25vd24gcGlkOiAiCisgICAgICAgICAgICAgICAgICAgICIlZCAtPiAlZCIsIHBpZCwgcmV0dXJuY29kZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworCitjbGFzcyBfVW5peERlZmF1bHRFdmVudExvb3BQb2xpY3koZXZlbnRzLkJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KToKKyAgICAiIiJYWFgiIiIKKyAgICBfbG9vcF9mYWN0b3J5ID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IE5vbmUKKworICAgIGRlZiBfaW5pdF93YXRjaGVyKHNlbGYpOgorICAgICAgICB3aXRoIGV2ZW50cy5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgICAgICBzZWxmLl93YXRjaGVyID0gU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fTWFpblRocmVhZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5fbG9jYWwuX2xvb3ApCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCBpZiBhIGNoaWxkIHdhdGNoZXIgd2FzIHNldCBiZWZvcmUsIHRoZW4gY2FsbGluZworICAgICAgICAuc2V0X2V2ZW50X2xvb3AoKSBmcm9tIHRoZSBtYWluIHRocmVhZCB3aWxsIGNhbGwgLmF0dGFjaF9sb29wKGxvb3ApIG9uCisgICAgICAgIHRoZSBjaGlsZCB3YXRjaGVyLgorICAgICAgICAiIiIKKworICAgICAgICBzdXBlcigpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3AobG9vcCkKKworICAgIGRlZiBnZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBjaGlsZCB3YXRjaGVyCisKKyAgICAgICAgSWYgbm90IHlldCBzZXQsIGEgU2FmZUNoaWxkV2F0Y2hlciBvYmplY3QgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdF93YXRjaGVyKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fd2F0Y2hlcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJTZXQgdGhlIGNoaWxkIHdhdGNoZXIiIiIKKworICAgICAgICBhc3NlcnQgd2F0Y2hlciBpcyBOb25lIG9yIGlzaW5zdGFuY2Uod2F0Y2hlciwgQWJzdHJhY3RDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuX3dhdGNoZXIgPSB3YXRjaGVyCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorRGVmYXVsdEV2ZW50TG9vcFBvbGljeSA9IF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmVkMjQxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSw0NzUgQEAKKyIiIlNlbGVjdG9yIGFuZCBwcm9hY3RvciBldmVudGxvb3BzIGZvciBXaW5kb3dzLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IHN0cnVjdAoraW1wb3J0IF93aW5hcGkKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgYmFzZV9zdWJwcm9jZXNzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgcHJvYWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAuIGltcG9ydCB3aW5kb3dzX3V0aWxzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorZnJvbSAuIGltcG9ydCBfb3ZlcmxhcHBlZAorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywgJ1Byb2FjdG9yRXZlbnRMb29wJywgJ0lvY3BQcm9hY3RvcicsCisgICAgICAgICAgICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCisKK05VTEwgPSAwCitJTkZJTklURSA9IDB4ZmZmZmZmZmYKK0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCA9IDEyMjUKK0VSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRCA9IDEyMzYKKworCitjbGFzcyBfT3ZlcmxhcHBlZEZ1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiU3ViY2xhc3Mgb2YgRnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgYW4gb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisKKyAgICBDYW5jZWxsaW5nIGl0IHdpbGwgaW1tZWRpYXRlbHkgY2FuY2VsIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYub3YgPSBvdgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5vdi5jYW5jZWwoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuY2FuY2VsKCkKKworCitjbGFzcyBfV2FpdEhhbmRsZUZ1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiU3ViY2xhc3Mgb2YgRnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgYSB3YWl0IGhhbmRsZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YWl0X2hhbmRsZSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3dhaXRfaGFuZGxlID0gd2FpdF9oYW5kbGUKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2FuY2VsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQoc2VsZi5fd2FpdF9oYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICAgICAgcmFpc2UKKworCitjbGFzcyBQaXBlU2VydmVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSBzZXJ2ZXIuCisKKyAgICBUaGlzIGlzIG11Y2ggbGlrZSBhIGJvdW5kLCBsaXN0ZW5pbmcgc29ja2V0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9waXBlID0gc2VsZi5fc2VydmVyX3BpcGVfaGFuZGxlKFRydWUpCisKKyAgICBkZWYgX2dldF91bmNvbm5lY3RlZF9waXBlKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBuZXcgaW5zdGFuY2UgYW5kIHJldHVybiBwcmV2aW91cyBvbmUuICBUaGlzIGVuc3VyZXMKKyAgICAgICAgIyB0aGF0ICh1bnRpbCB0aGUgc2VydmVyIGlzIGNsb3NlZCkgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0CisgICAgICAgICMgb25lIHBpcGUgaGFuZGxlIGZvciBhZGRyZXNzLiAgVGhlcmVmb3JlIGlmIGEgY2xpZW50IGF0dGVtcHQKKyAgICAgICAgIyB0byBjb25uZWN0IGl0IHdpbGwgbm90IGZhaWwgd2l0aCBGaWxlTm90Rm91bmRFcnJvci4KKyAgICAgICAgdG1wLCBzZWxmLl9waXBlID0gc2VsZi5fcGlwZSwgc2VsZi5fc2VydmVyX3BpcGVfaGFuZGxlKEZhbHNlKQorICAgICAgICByZXR1cm4gdG1wCisKKyAgICBkZWYgX3NlcnZlcl9waXBlX2hhbmRsZShzZWxmLCBmaXJzdCk6CisgICAgICAgICMgUmV0dXJuIGEgd3JhcHBlciBmb3IgYSBuZXcgcGlwZSBoYW5kbGUuCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19EVVBMRVggfCBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgZmxhZ3MgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRQorICAgICAgICBoID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBzZWxmLl9hZGRyZXNzLCBmbGFncywKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CisgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLAorICAgICAgICAgICAgd2luZG93c191dGlscy5CVUZTSVpFLCB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsCisgICAgICAgICAgICBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwpCisgICAgICAgIHBpcGUgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMuYWRkKHBpcGUpCisgICAgICAgIHJldHVybiBwaXBlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2xvc2UgYWxsIGluc3RhbmNlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGNvbm5lY3RlZCB0byBieSBhIGNsaWVudC4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuX2ZyZWVfaW5zdGFuY2VzOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5jbGVhcigpCisKKyAgICBfX2RlbF9fID0gY2xvc2UKKworCitjbGFzcyBfV2luZG93c1NlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBzZWxlY3RvciBldmVudCBsb29wLiIiIgorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworCitjbGFzcyBQcm9hY3RvckV2ZW50TG9vcChwcm9hY3Rvcl9ldmVudHMuQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAiIiJXaW5kb3dzIHZlcnNpb24gb2YgcHJvYWN0b3IgZXZlbnQgbG9vcCB1c2luZyBJT0NQLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yPU5vbmUpOgorICAgICAgICBpZiBwcm9hY3RvciBpcyBOb25lOgorICAgICAgICAgICAgcHJvYWN0b3IgPSBJb2NwUHJvYWN0b3IoKQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2FjdG9yKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3BpcGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBhZGRyZXNzKToKKyAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmNvbm5lY3RfcGlwZShhZGRyZXNzKQorICAgICAgICBwaXBlID0geWllbGQgZnJvbSBmCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zID0gc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgIHJldHVybiB0cmFucywgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3RhcnRfc2VydmluZ19waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBzZXJ2ZXIgPSBQaXBlU2VydmVyKGFkZHJlc3MpCisKKyAgICAgICAgZGVmIGxvb3AoZj1Ob25lKToKKyAgICAgICAgICAgIHBpcGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICAgICAgcGlwZSA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyLl9mcmVlX2luc3RhbmNlcy5kaXNjYXJkKHBpcGUpCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgcGlwZSwgcHJvdG9jb2wsIGV4dHJhPXsnYWRkcic6IGFkZHJlc3N9KQorICAgICAgICAgICAgICAgIHBpcGUgPSBzZXJ2ZXIuX2dldF91bmNvbm5lY3RlZF9waXBlKCkKKyAgICAgICAgICAgICAgICBpZiBwaXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHRfcGlwZShwaXBlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgcGlwZSBhbmQgcGlwZS5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignUGlwZSBhY2NlcHQgZmFpbGVkJykKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwaXBlOgorICAgICAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhsb29wKQorCisgICAgICAgIHNlbGYuY2FsbF9zb29uKGxvb3ApCisgICAgICAgIHJldHVybiBbc2VydmVyXQorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc2VydmVyKToKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgdHJhbnNwID0gX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKQorICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fcG9zdF9pbml0KCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcAorCisgICAgZGVmIF9zdWJwcm9jZXNzX2Nsb3NlZChzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgSW9jcFByb2FjdG9yOgorICAgICIiIlByb2FjdG9yIGltcGxlbWVudGF0aW9uIHVzaW5nIElPQ1AuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uY3VycmVuY3k9MHhmZmZmZmZmZik6CisgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9pb2NwID0gX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCgKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLklOVkFMSURfSEFORExFX1ZBTFVFLCBOVUxMLCAwLCBjb25jdXJyZW5jeSkKKyAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl9yZWdpc3RlcmVkID0gd2Vha3JlZi5XZWFrU2V0KCkKKyAgICAgICAgc2VsZi5fc3RvcHBlZF9zZXJ2aW5nID0gd2Vha3JlZi5XZWFrU2V0KCkKKworICAgIGRlZiBzZXRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLl9wb2xsKHRpbWVvdXQpCisgICAgICAgIHRtcCA9IHNlbGYuX3Jlc3VsdHMKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiByZWN2KHNlbGYsIGNvbm4sIG5ieXRlcywgZmxhZ3M9MCk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzb2NrZXQuc29ja2V0KToKKyAgICAgICAgICAgIG92LldTQVJlY3YoY29ubi5maWxlbm8oKSwgbmJ5dGVzLCBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG92LlJlYWRGaWxlKGNvbm4uZmlsZW5vKCksIG5ieXRlcykKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGNvbm4sIGJ1ZiwgZmxhZ3M9MCk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzb2NrZXQuc29ja2V0KToKKyAgICAgICAgICAgIG92LldTQVNlbmQoY29ubi5maWxlbm8oKSwgYnVmLCBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG92LldyaXRlRmlsZShjb25uLmZpbGVubygpLCBidWYpCisKKyAgICAgICAgZGVmIGZpbmlzaCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLndpbmVycm9yID09IF9vdmVybGFwcGVkLkVSUk9SX05FVE5BTUVfREVMRVRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoKmV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBjb25uLCBmaW5pc2gpCisKKyAgICBkZWYgYWNjZXB0KHNlbGYsIGxpc3RlbmVyKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGxpc3RlbmVyKQorICAgICAgICBjb25uID0gc2VsZi5fZ2V0X2FjY2VwdF9zb2NrZXQobGlzdGVuZXIuZmFtaWx5KQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQWNjZXB0RXgobGlzdGVuZXIuZmlsZW5vKCksIGNvbm4uZmlsZW5vKCkpCisKKyAgICAgICAgZGVmIGZpbmlzaF9hY2NlcHQodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgICMgVXNlIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgYnVmID0gc3RydWN0LnBhY2soJ0BQJywgbGlzdGVuZXIuZmlsZW5vKCkpCisgICAgICAgICAgICBjb25uLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuU09fVVBEQVRFX0FDQ0VQVF9DT05URVhULCBidWYpCisgICAgICAgICAgICBjb25uLnNldHRpbWVvdXQobGlzdGVuZXIuZ2V0dGltZW91dCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4sIGNvbm4uZ2V0cGVlcm5hbWUoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgbGlzdGVuZXIsIGZpbmlzaF9hY2NlcHQpCisKKyAgICBkZWYgY29ubmVjdChzZWxmLCBjb25uLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgICMgVGhlIHNvY2tldCBuZWVkcyB0byBiZSBsb2NhbGx5IGJvdW5kIGJlZm9yZSB3ZSBjYWxsIENvbm5lY3RFeCgpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfb3ZlcmxhcHBlZC5CaW5kTG9jYWwoY29ubi5maWxlbm8oKSwgY29ubi5mYW1pbHkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IGVycm5vLldTQUVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQcm9iYWJseSBhbHJlYWR5IGxvY2FsbHkgYm91bmQ7IGNoZWNrIHVzaW5nIGdldHNvY2tuYW1lKCkuCisgICAgICAgICAgICBpZiBjb25uLmdldHNvY2tuYW1lKClbMV0gPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQ29ubmVjdEV4KGNvbm4uZmlsZW5vKCksIGFkZHJlc3MpCisKKyAgICAgICAgZGVmIGZpbmlzaF9jb25uZWN0KHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICAjIFVzZSBTT19VUERBVEVfQ09OTkVDVF9DT05URVhUIHNvIGdldHNvY2tuYW1lKCkgZXRjIHdvcmsuCisgICAgICAgICAgICBjb25uLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCwgMCkKKyAgICAgICAgICAgIHJldHVybiBjb25uCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBjb25uLCBmaW5pc2hfY29ubmVjdCkKKworICAgIGRlZiBhY2NlcHRfcGlwZShzZWxmLCBwaXBlKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKHBpcGUpCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5Db25uZWN0TmFtZWRQaXBlKHBpcGUuZmlsZW5vKCkpCisKKyAgICAgICAgZGVmIGZpbmlzaCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgcmV0dXJuIHBpcGUKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIHBpcGUsIGZpbmlzaCkKKworICAgIGRlZiBjb25uZWN0X3BpcGUoc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdChhZGRyZXNzLCBzZWxmLl9pb2NwLCBvdi5hZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2goZXJyLCBoYW5kbGUsIG92KToKKyAgICAgICAgICAgICMgZXJyLCBoYW5kbGUgd2VyZSBhcmd1bWVudHMgcGFzc2VkIHRvIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkKKyAgICAgICAgICAgICMgaW4gYSBmdW5jdGlvbiBydW4gaW4gYSB0aHJlYWQgcG9vbC4KKyAgICAgICAgICAgIGlmIGVyciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9TRU1fVElNRU9VVDoKKyAgICAgICAgICAgICAgICAjIENvbm5lY3Rpb24gZGlkIG5vdCBzdWNjZWVkIHdpdGhpbiB0aW1lIGxpbWl0LgorICAgICAgICAgICAgICAgIG1zZyA9IF9vdmVybGFwcGVkLkZvcm1hdE1lc3NhZ2UoZXJyKQorICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IoMCwgbXNnLCBOb25lLCBlcnIpCisgICAgICAgICAgICBlbGlmIGVyciAhPSAwOgorICAgICAgICAgICAgICAgIG1zZyA9IF9vdmVybGFwcGVkLkZvcm1hdE1lc3NhZ2UoZXJyKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgbXNnLCBOb25lLCBlcnIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaGFuZGxlKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgTm9uZSwgZmluaXNoLCB3YWl0X2Zvcl9wb3N0PVRydWUpCisKKyAgICBkZWYgd2FpdF9mb3JfaGFuZGxlKHNlbGYsIGhhbmRsZSwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgbXMgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtcyA9IGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkKKworICAgICAgICAjIFdlIG9ubHkgY3JlYXRlIG92IHNvIHdlIGNhbiB1c2Ugb3YuYWRkcmVzcyBhcyBhIGtleSBmb3IgdGhlIGNhY2hlLgorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgd2ggPSBfb3ZlcmxhcHBlZC5SZWdpc3RlcldhaXRXaXRoUXVldWUoCisgICAgICAgICAgICBoYW5kbGUsIHNlbGYuX2lvY3AsIG92LmFkZHJlc3MsIG1zKQorICAgICAgICBmID0gX1dhaXRIYW5kbGVGdXR1cmUod2gsIGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQod2gpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgc2Vjb25kIHdhaXQgbWVhbnMgdGhhdCB3ZSBzaG91bGQgb25seSB1c2UKKyAgICAgICAgICAgICMgdGhpcyB3aXRoIGhhbmRsZXMgdHlwZXMgd2hlcmUgYSBzdWNjZXNzZnVsIHdhaXQgaGFzIG5vCisgICAgICAgICAgICAjIGVmZmVjdC4gIFNvIGV2ZW50cyBvciBwcm9jZXNzZXMgYXJlIGFsbCByaWdodCwgYnV0IGxvY2tzCisgICAgICAgICAgICAjIG9yIHNlbWFwaG9yZXMgYXJlIG5vdC4gIEFsc28gbm90ZSBpZiB0aGUgaGFuZGxlIGlzCisgICAgICAgICAgICAjIHNpZ25hbGxlZCBhbmQgdGhlbiBxdWlja2x5IHJlc2V0LCB0aGVuIHdlIG1heSByZXR1cm4KKyAgICAgICAgICAgICMgRmFsc2UgZXZlbiB0aG91Z2ggd2UgaGF2ZSBub3QgdGltZWQgb3V0LgorICAgICAgICAgICAgcmV0dXJuIChfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCAwKSA9PQorICAgICAgICAgICAgICAgICAgICBfd2luYXBpLldBSVRfT0JKRUNUXzApCisKKyAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIE5vbmUsIGZpbmlzaCkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfcmVnaXN0ZXJfd2l0aF9pb2NwKHNlbGYsIG9iaik6CisgICAgICAgICMgVG8gZ2V0IG5vdGlmaWNhdGlvbnMgb2YgZmluaXNoZWQgb3BzIG9uIHRoaXMgb2JqZWN0cyBzZW50IHRvIHRoZQorICAgICAgICAjIGNvbXBsZXRpb24gcG9ydCwgd2VyZSBtdXN0IHJlZ2lzdGVyIHRoZSBoYW5kbGUuCisgICAgICAgIGlmIG9iaiBub3QgaW4gc2VsZi5fcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQuYWRkKG9iaikKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLkNyZWF0ZUlvQ29tcGxldGlvblBvcnQob2JqLmZpbGVubygpLCBzZWxmLl9pb2NwLCAwLCAwKQorICAgICAgICAgICAgIyBYWFggV2UgY291bGQgYWxzbyB1c2UgU2V0RmlsZUNvbXBsZXRpb25Ob3RpZmljYXRpb25Nb2RlcygpCisgICAgICAgICAgICAjIHRvIGF2b2lkIHNlbmRpbmcgbm90aWZpY2F0aW9ucyB0byBjb21wbGV0aW9uIHBvcnQgb2Ygb3BzCisgICAgICAgICAgICAjIHRoYXQgc3VjY2VlZCBpbW1lZGlhdGVseS4KKworICAgIGRlZiBfcmVnaXN0ZXIoc2VsZiwgb3YsIG9iaiwgY2FsbGJhY2ssIHdhaXRfZm9yX3Bvc3Q9RmFsc2UpOgorICAgICAgICAjIFJldHVybiBhIGZ1dHVyZSB3aGljaCB3aWxsIGJlIHNldCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisgICAgICAgICMgb3BlcmF0aW9uIHdoZW4gaXQgY29tcGxldGVzLiAgVGhlIGZ1dHVyZSdzIHZhbHVlIGlzIGFjdHVhbGx5CisgICAgICAgICMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNhbGxiYWNrKCkuCisgICAgICAgIGYgPSBfT3ZlcmxhcHBlZEZ1dHVyZShvdiwgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBpZiBvdi5wZW5kaW5nIG9yIHdhaXRfZm9yX3Bvc3Q6CisgICAgICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbiBmb3IgbGF0ZXIuICBOb3RlIHRoYXQKKyAgICAgICAgICAgICMgd2Ugb25seSBzdG9yZSBvYmogdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGdhcmJhZ2UKKyAgICAgICAgICAgICMgY29sbGVjdGVkIHRvbyBlYXJseS4KKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCBvYmosIGNhbGxiYWNrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHNvIG5vIG5lZWQgdG8gcG9zdHBvbmUgdGhlCisgICAgICAgICAgICAjIHdvcmsuICBXZSBjYW5ub3QgdGFrZSB0aGlzIHNob3J0IGN1dCBpZiB3ZSBuZWVkIHRoZQorICAgICAgICAgICAgIyBOdW1iZXJPZkJ5dGVzLCBDb21wbGV0aW9uS2V5IHZhbHVlcyByZXR1cm5lZCBieQorICAgICAgICAgICAgIyBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soTm9uZSwgTm9uZSwgb3YpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgIHJldHVybiBmCisKKyAgICBkZWYgX2dldF9hY2NlcHRfc29ja2V0KHNlbGYsIGZhbWlseSk6CisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSkKKyAgICAgICAgcy5zZXR0aW1lb3V0KDApCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX3BvbGwoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgbXMgPSBJTkZJTklURQorICAgICAgICBlbGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgdGltZW91dCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtcyA9IGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkKKyAgICAgICAgICAgIGlmIG1zID49IElORklOSVRFOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWVvdXQgdG9vIGJpZyIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMgPSBfb3ZlcmxhcHBlZC5HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHNlbGYuX2lvY3AsIG1zKQorICAgICAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlcnIsIHRyYW5zZmVycmVkLCBrZXksIGFkZHJlc3MgPSBzdGF0dXMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLCBvdiwgb2JqLCBjYWxsYmFjayA9IHNlbGYuX2NhY2hlLnBvcChhZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICMga2V5IGlzIGVpdGhlciB6ZXJvLCBvciBpdCBpcyB1c2VkIHRvIHJldHVybiBhIHBpcGUKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSB3aGljaCBzaG91bGQgYmUgY2xvc2VkIHRvIGF2b2lkIGEgbGVhay4KKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgwLCBfb3ZlcmxhcHBlZC5JTlZBTElEX0hBTkRMRV9WQUxVRSk6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoa2V5KQorICAgICAgICAgICAgICAgIG1zID0gMAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBvYmogaW4gc2VsZi5fc3RvcHBlZF9zZXJ2aW5nOgorICAgICAgICAgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgICAgIGVsaWYgbm90IGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKHRyYW5zZmVycmVkLCBrZXksIG92KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKyAgICAgICAgICAgIG1zID0gMAorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgb2JqKToKKyAgICAgICAgIyBvYmogaXMgYSBzb2NrZXQgb3IgcGlwZSBoYW5kbGUuICBJdCB3aWxsIGJlIGNsb3NlZCBpbgorICAgICAgICAjIEJhc2VQcm9hY3RvckV2ZW50TG9vcC5fc3RvcF9zZXJ2aW5nKCkgd2hpY2ggd2lsbCBtYWtlIGFueQorICAgICAgICAjIHBlbmRpbmcgb3BlcmF0aW9ucyBmYWlsIHF1aWNrbHkuCisgICAgICAgIHNlbGYuX3N0b3BwZWRfc2VydmluZy5hZGQob2JqKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAjIENhbmNlbCByZW1haW5pbmcgcmVnaXN0ZXJlZCBvcGVyYXRpb25zLgorICAgICAgICBmb3IgYWRkcmVzcywgKGYsIG92LCBvYmosIGNhbGxiYWNrKSBpbiBsaXN0KHNlbGYuX2NhY2hlLml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIHdhcyBzdGFydGVkIHdpdGggY29ubmVjdF9waXBlKCkgd2hpY2gKKyAgICAgICAgICAgICAgICAjIHF1ZXVlcyBhIHRhc2sgdG8gV2luZG93cycgdGhyZWFkIHBvb2wuICBUaGlzIGNhbm5vdAorICAgICAgICAgICAgICAgICMgYmUgY2FuY2VsbGVkLCBzbyBqdXN0IGZvcmdldCBpdC4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fY2FjaGVbYWRkcmVzc10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdi5jYW5jZWwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2hpbGUgc2VsZi5fY2FjaGU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcG9sbCgxKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Rha2luZyBsb25nIHRpbWUgdG8gY2xvc2UgcHJvYWN0b3InKQorCisgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9pb2NwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzZWxmLl9pb2NwKQorICAgICAgICAgICAgc2VsZi5faW9jcCA9IE5vbmUKKworCitjbGFzcyBfV2luZG93c1N1YnByb2Nlc3NUcmFuc3BvcnQoYmFzZV9zdWJwcm9jZXNzLkJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgYXJncywgc2hlbGwsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9wcm9jID0gd2luZG93c191dGlscy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGYpOgorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2V4aXRlZChyZXR1cm5jb2RlKQorCisgICAgICAgIGYgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoaW50KHNlbGYuX3Byb2MuX2hhbmRsZSkpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2FsbGJhY2spCisKKworU2VsZWN0b3JFdmVudExvb3AgPSBfV2luZG93c1NlbGVjdG9yRXZlbnRMb29wCisKKworY2xhc3MgX1dpbmRvd3NEZWZhdWx0RXZlbnRMb29wUG9saWN5KGV2ZW50cy5CYXNlRGVmYXVsdEV2ZW50TG9vcFBvbGljeSk6CisgICAgX2xvb3BfZmFjdG9yeSA9IFNlbGVjdG9yRXZlbnRMb29wCisKKworRGVmYXVsdEV2ZW50TG9vcFBvbGljeSA9IF9XaW5kb3dzRGVmYXVsdEV2ZW50TG9vcFBvbGljeQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weSBiL0xpYi9hc3luY2lvL3dpbmRvd3NfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExYzA2NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3dpbmRvd3NfdXRpbHMucHkKQEAgLTAsMCArMSwxOTIgQEAKKyIiIgorVmFyaW91cyBXaW5kb3dzIHNwZWNpZmljIGJpdHMgYW5kIHBpZWNlcworIiIiCisKK2ltcG9ydCBzeXMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICByYWlzZSBJbXBvcnRFcnJvcignd2luMzIgb25seScpCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBtc3ZjcnQKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IF93aW5hcGkKKworCitfX2FsbF9fID0gWydzb2NrZXRwYWlyJywgJ3BpcGUnLCAnUG9wZW4nLCAnUElQRScsICdQaXBlSGFuZGxlJ10KKworCisjIENvbnN0YW50cy9nbG9iYWxzCisKKworQlVGU0laRSA9IDgxOTIKK1BJUEUgPSBzdWJwcm9jZXNzLlBJUEUKK1NURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCitfbW1hcF9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKworCisjIFJlcGxhY2VtZW50IGZvciBzb2NrZXQuc29ja2V0cGFpcigpCisKKworZGVmIHNvY2tldHBhaXIoZmFtaWx5PXNvY2tldC5BRl9JTkVULCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCk6CisgICAgIiIiQSBzb2NrZXQgcGFpciB1c2FibGUgYXMgYSBzZWxmLXBpcGUsIGZvciBXaW5kb3dzLgorCisgICAgT3JpZ2luOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS80MzI1NzgzLCBieSBHZWVydCBKYW5zZW4uICBQdWJsaWMgZG9tYWluLgorICAgICIiIgorICAgICMgV2UgY3JlYXRlIGEgY29ubmVjdGVkIFRDUCBzb2NrZXQuIE5vdGUgdGhlIHRyaWNrIHdpdGggc2V0YmxvY2tpbmcoMCkKKyAgICAjIHRoYXQgcHJldmVudHMgdXMgZnJvbSBoYXZpbmcgdG8gY3JlYXRlIGEgdGhyZWFkLgorICAgIGxzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgIGxzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCAwKSkKKyAgICBsc29jay5saXN0ZW4oMSkKKyAgICBhZGRyLCBwb3J0ID0gbHNvY2suZ2V0c29ja25hbWUoKQorICAgIGNzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgIGNzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgIHRyeToKKyAgICAgICAgY3NvY2suY29ubmVjdCgoYWRkciwgcG9ydCkpCisgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgbHNvY2suY2xvc2UoKQorICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgIHJhaXNlCisgICAgc3NvY2ssIF8gPSBsc29jay5hY2NlcHQoKQorICAgIGNzb2NrLnNldGJsb2NraW5nKFRydWUpCisgICAgbHNvY2suY2xvc2UoKQorICAgIHJldHVybiAoc3NvY2ssIGNzb2NrKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIG9zLnBpcGUoKSB1c2luZyBoYW5kbGVzIGluc3RlYWQgb2YgZmRzCisKKworZGVmIHBpcGUoKiwgZHVwbGV4PUZhbHNlLCBvdmVybGFwcGVkPShUcnVlLCBUcnVlKSwgYnVmc2l6ZT1CVUZTSVpFKToKKyAgICAiIiJMaWtlIG9zLnBpcGUoKSBidXQgd2l0aCBvdmVybGFwcGVkIHN1cHBvcnQgYW5kIHVzaW5nIGhhbmRsZXMgbm90IGZkcy4iIiIKKyAgICBhZGRyZXNzID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5dGhvbi1waXBlLSVkLSVkLScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSkKKworICAgIGlmIGR1cGxleDoKKyAgICAgICAgb3Blbm1vZGUgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfUkVBRCB8IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IGJ1ZnNpemUsIGJ1ZnNpemUKKyAgICBlbHNlOgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfSU5CT1VORAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfV1JJVEUKKyAgICAgICAgb2JzaXplLCBpYnNpemUgPSAwLCBidWZzaXplCisKKyAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisKKyAgICBpZiBvdmVybGFwcGVkWzBdOgorICAgICAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisKKyAgICBpZiBvdmVybGFwcGVkWzFdOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICBlbHNlOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IDAKKworICAgIGgxID0gaDIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBoMSA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgYWRkcmVzcywgb3Blbm1vZGUsIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKworICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKKyAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICBmbGFnc19hbmRfYXR0cmlicywgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIG92ID0gX3dpbmFwaS5Db25uZWN0TmFtZWRQaXBlKGgxLCBvdmVybGFwcGVkPVRydWUpCisgICAgICAgIG92LkdldE92ZXJsYXBwZWRSZXN1bHQoVHJ1ZSkKKyAgICAgICAgcmV0dXJuIGgxLCBoMgorICAgIGV4Y2VwdDoKKyAgICAgICAgaWYgaDEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICBpZiBoMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisgICAgICAgIHJhaXNlCisKKworIyBXcmFwcGVyIGZvciBhIHBpcGUgaGFuZGxlCisKKworY2xhc3MgUGlwZUhhbmRsZToKKyAgICAiIiJXcmFwcGVyIGZvciBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIHdoaWNoIGlzIHZhZ3VlbHkgZmlsZS1vYmplY3QgbGlrZS4KKworICAgIFRoZSBJT0NQIGV2ZW50IGxvb3AgY2FuIHVzZSB0aGVzZSBpbnN0ZWFkIG9mIHNvY2tldCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUpOgorICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBjbG9zZShzZWxmLCAqLCBDbG9zZUhhbmRsZT1fd2luYXBpLkNsb3NlSGFuZGxlKToKKyAgICAgICAgaWYgc2VsZi5faGFuZGxlICE9IC0xOgorICAgICAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi5faGFuZGxlKQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gLTEKKworICAgIF9fZGVsX18gPSBjbG9zZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHN1YnByb2Nlc3MuUG9wZW4gdXNpbmcgb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZXMKKworCitjbGFzcyBQb3BlbihzdWJwcm9jZXNzLlBvcGVuKToKKyAgICAiIiJSZXBsYWNlbWVudCBmb3Igc3VicHJvY2Vzcy5Qb3BlbiB1c2luZyBvdmVybGFwcGVkIHBpcGUgaGFuZGxlcy4KKworICAgIFRoZSBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgYXJlIE5vbmUgb3IgaW5zdGFuY2VzIG9mIFBpcGVIYW5kbGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgKiprd2RzKToKKyAgICAgICAgYXNzZXJ0IG5vdCBrd2RzLmdldCgndW5pdmVyc2FsX25ld2xpbmVzJykKKyAgICAgICAgYXNzZXJ0IGt3ZHMuZ2V0KCdidWZzaXplJywgMCkgPT0gMAorICAgICAgICBzdGRpbl9yZmQgPSBzdGRvdXRfd2ZkID0gc3RkZXJyX3dmZCA9IE5vbmUKKyAgICAgICAgc3RkaW5fd2ggPSBzdGRvdXRfcmggPSBzdGRlcnJfcmggPSBOb25lCisgICAgICAgIGlmIHN0ZGluID09IFBJUEU6CisgICAgICAgICAgICBzdGRpbl9yaCwgc3RkaW5fd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KEZhbHNlLCBUcnVlKSwgZHVwbGV4PVRydWUpCisgICAgICAgICAgICBzdGRpbl9yZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3RkaW5fcmgsIG9zLk9fUkRPTkxZKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkaW5fcmZkID0gc3RkaW4KKyAgICAgICAgaWYgc3Rkb3V0ID09IFBJUEU6CisgICAgICAgICAgICBzdGRvdXRfcmgsIHN0ZG91dF93aCA9IHBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgRmFsc2UpKQorICAgICAgICAgICAgc3Rkb3V0X3dmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRvdXRfd2gsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXRfd2ZkID0gc3Rkb3V0CisgICAgICAgIGlmIHN0ZGVyciA9PSBQSVBFOgorICAgICAgICAgICAgc3RkZXJyX3JoLCBzdGRlcnJfd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3RkZXJyX3doLCAwKQorICAgICAgICBlbGlmIHN0ZGVyciA9PSBTVERPVVQ6CisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gc3Rkb3V0X3dmZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IHN0ZGVycgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKGFyZ3MsIHN0ZGluPXN0ZGluX3JmZCwgc3Rkb3V0PXN0ZG91dF93ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnJfd2ZkLCAqKmt3ZHMpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGZvciBoIGluIChzdGRpbl93aCwgc3Rkb3V0X3JoLCBzdGRlcnJfcmgpOgorICAgICAgICAgICAgICAgIGlmIGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzdGRpbl93aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGluID0gUGlwZUhhbmRsZShzdGRpbl93aCkKKyAgICAgICAgICAgIGlmIHN0ZG91dF9yaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IFBpcGVIYW5kbGUoc3Rkb3V0X3JoKQorICAgICAgICAgICAgaWYgc3RkZXJyX3JoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gUGlwZUhhbmRsZShzdGRlcnJfcmgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzdGRpbiA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZGluX3JmZCkKKyAgICAgICAgICAgIGlmIHN0ZG91dCA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZG91dF93ZmQpCisgICAgICAgICAgICBpZiBzdGRlcnIgPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRlcnJfd2ZkKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jb3JlLnB5IGIvTGliL2FzeW5jb3JlLnB5CmluZGV4IDkwOWQ5ZjYuLjc1NDgxZGQgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY29yZS5weQorKysgYi9MaWIvYXN5bmNvcmUucHkKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICAgICAgb2JqLmhhbmRsZV9leHB0X2V2ZW50KCkKICAgICAgICAgaWYgZmxhZ3MgJiAoc2VsZWN0LlBPTExIVVAgfCBzZWxlY3QuUE9MTEVSUiB8IHNlbGVjdC5QT0xMTlZBTCk6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Nsb3NlKCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgaWYgZS5hcmdzWzBdIG5vdCBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9lcnJvcigpCiAgICAgICAgIGVsc2U6CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICMgcGFzc2VkIGJlIGNvbm5lY3RlZC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmFkZHIgPSBzb2NrLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChFTk9UQ09OTiwgRUlOVkFMKToKICAgICAgICAgICAgICAgICAgICAgIyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZ290IGFuIHVuY29ubmVjdGVkCiAgICAgICAgICAgICAgICAgICAgICMgc29ja2V0LgpAQCAtMzA0LDcgKzMwNCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIpIHwgMQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHJlc3MKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3RfZXZlbnQoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVyciwgZXJyb3Jjb2RlW2Vycl0pCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgZXJyb3Jjb2RlW2Vycl0pCiAKICAgICBkZWYgYWNjZXB0KHNlbGYpOgogICAgICAgICAjIFhYWCBjYW4gcmV0dXJuIGVpdGhlciBhbiBhZGRyZXNzIHBhaXIgb3IgTm9uZQpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiAoRVdPVUxEQkxPQ0ssIEVDT05OQUJPUlRFRCwgRUFHQUlOKToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgZWxzZToKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnNvY2tldC5zZW5kKGRhdGEpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSA9PSBFV09VTERCTE9DSzoKICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgZWxpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgpAQCAtMzg0LDcgKzM4NCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgIyB3aW5zb2NrIHNvbWV0aW1lcyByYWlzZXMgRU5PVENPTk4KICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQpAQCAtMzk3LDExICszOTcsMTIgQEAKICAgICAgICAgc2VsZi5hY2NlcHRpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLmNvbm5lY3RpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKLSAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBpZiBzZWxmLnNvY2tldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gbm90IGluIChFTk9UQ09OTiwgRUJBREYpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgIyBjaGVhcCBpbmhlcml0YW5jZSwgdXNlZCB0byBwYXNzIGFsbCBvdGhlciBhdHRyaWJ1dGUKICAgICAjIHJlZmVyZW5jZXMgdG8gdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KQEAgLTQ0Myw3ICs0NDQsNyBAQAogICAgIGRlZiBoYW5kbGVfY29ubmVjdF9ldmVudChzZWxmKToKICAgICAgICAgZXJyID0gc2VsZi5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0VSUk9SKQogICAgICAgICBpZiBlcnIgIT0gMDoKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIF9zdHJlcnJvcihlcnIpKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsIF9zdHJlcnJvcihlcnIpKQogICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0KCkKICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuY29ubmVjdGluZyA9IEZhbHNlCkBAIC01MzIsNyArNTMzLDcgQEAKIAogICAgIGRlZiBpbml0aWF0ZV9zZW5kKHNlbGYpOgogICAgICAgICBudW1fc2VudCA9IDAKLSAgICAgICAgbnVtX3NlbnQgPSBkaXNwYXRjaGVyLnNlbmQoc2VsZiwgc2VsZi5vdXRfYnVmZmVyWzo1MTJdKQorICAgICAgICBudW1fc2VudCA9IGRpc3BhdGNoZXIuc2VuZChzZWxmLCBzZWxmLm91dF9idWZmZXJbOjY1NTM2XSkKICAgICAgICAgc2VsZi5vdXRfYnVmZmVyID0gc2VsZi5vdXRfYnVmZmVyW251bV9zZW50Ol0KIAogICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvYmFzZTY0LnB5IGIvTGliL2Jhc2U2NC5weQppbmRleCBiNmU4MmI2Li44NDgxOGNmIDEwMDc1NQotLS0gYS9MaWIvYmFzZTY0LnB5CisrKyBiL0xpYi9iYXNlNjQucHkKQEAgLTEsNiArMSw2IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0iIiJSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncyIiIgorIiIiQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCAoUkZDIDM1NDgpLCBCYXNlODUgYW5kIEFzY2lpODUgZGF0YSBlbmNvZGluZ3MiIiIKIAogIyBNb2RpZmllZCAwNC1PY3QtMTk5NSBieSBKYWNrIEphbnNlbiB0byB1c2UgYmluYXNjaWkgbW9kdWxlCiAjIE1vZGlmaWVkIDMwLURlYy0yMDAzIGJ5IEJhcnJ5IFdhcnNhdyB0byBhZGQgZnVsbCBSRkMgMzU0OCBzdXBwb3J0CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBpdGVydG9vbHMKIAogCiBfX2FsbF9fID0gWwpAQCAtMTcsNiArMTgsOCBAQAogICAgICMgR2VuZXJhbGl6ZWQgaW50ZXJmYWNlIGZvciBvdGhlciBlbmNvZGluZ3MKICAgICAnYjY0ZW5jb2RlJywgJ2I2NGRlY29kZScsICdiMzJlbmNvZGUnLCAnYjMyZGVjb2RlJywKICAgICAnYjE2ZW5jb2RlJywgJ2IxNmRlY29kZScsCisgICAgIyBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmdzCisgICAgJ2I4NWVuY29kZScsICdiODVkZWNvZGUnLCAnYTg1ZW5jb2RlJywgJ2E4NWRlY29kZScsCiAgICAgIyBTdGFuZGFyZCBCYXNlNjQgZW5jb2RpbmcKICAgICAnc3RhbmRhcmRfYjY0ZW5jb2RlJywgJ3N0YW5kYXJkX2I2NGRlY29kZScsCiAgICAgIyBTb21lIGNvbW1vbiBCYXNlNjQgYWx0ZXJuYXRpdmVzLiAgQXMgcmVmZXJlbmNlZCBieSBSRkMgMzQ1OCwgc2VlIHRocmVhZApAQCAtMzUsMTEgKzM4LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gcy5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0cmluZyBhcmd1bWVudCBzaG91bGQgY29udGFpbiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMnKQotICAgIGVsaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CisgICAgaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CiAgICAgICAgIHJldHVybiBzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYnl0ZXMgb3IgQVNDSUkgc3RyaW5nLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0KKyAgICB0cnk6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgbm90ICVyIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKSBmcm9tIE5vbmUKIAogCiAjIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB1c2VzIGJpbmFzY2lpCkBAIC01NCwxNCArNTksOSBAQAogCiAgICAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgIyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIG5ld2xpbmUKICAgICBlbmNvZGVkID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzKVs6LTFdCiAgICAgaWYgYWx0Y2hhcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFsdGNoYXJzLCBieXRlc190eXBlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbHRjaGFycy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGFzc2VydCBsZW4oYWx0Y2hhcnMpID09IDIsIHJlcHIoYWx0Y2hhcnMpCiAgICAgICAgIHJldHVybiBlbmNvZGVkLnRyYW5zbGF0ZShieXRlcy5tYWtldHJhbnMoYicrLycsIGFsdGNoYXJzKSkKICAgICByZXR1cm4gZW5jb2RlZApAQCAtMTM4LDIxICsxMzgsMTAgQEAKIAogCiAjIEJhc2UzMiBlbmNvZGluZy9kZWNvZGluZyBtdXN0IGJlIGRvbmUgaW4gUHl0aG9uCi1fYjMyYWxwaGFiZXQgPSB7Ci0gICAgMDogYidBJywgIDk6IGInSicsIDE4OiBiJ1MnLCAyNzogYiczJywKLSAgICAxOiBiJ0InLCAxMDogYidLJywgMTk6IGInVCcsIDI4OiBiJzQnLAotICAgIDI6IGInQycsIDExOiBiJ0wnLCAyMDogYidVJywgMjk6IGInNScsCi0gICAgMzogYidEJywgMTI6IGInTScsIDIxOiBiJ1YnLCAzMDogYic2JywKLSAgICA0OiBiJ0UnLCAxMzogYidOJywgMjI6IGInVycsIDMxOiBiJzcnLAotICAgIDU6IGInRicsIDE0OiBiJ08nLCAyMzogYidYJywKLSAgICA2OiBiJ0cnLCAxNTogYidQJywgMjQ6IGInWScsCi0gICAgNzogYidIJywgMTY6IGInUScsIDI1OiBiJ1onLAotICAgIDg6IGInSScsIDE3OiBiJ1InLCAyNjogYicyJywKLSAgICB9Ci0KLV9iMzJ0YWIgPSBbdlswXSBmb3IgaywgdiBpbiBzb3J0ZWQoX2IzMmFscGhhYmV0Lml0ZW1zKCkpXQotX2IzMnJldiA9IGRpY3QoWyh2WzBdLCBrKSBmb3IgaywgdiBpbiBfYjMyYWxwaGFiZXQuaXRlbXMoKV0pCi0KK19iMzJhbHBoYWJldCA9IGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnCitfYjMydGFiID0gW2J5dGVzKFtpXSkgZm9yIGkgaW4gX2IzMmFscGhhYmV0XQorX2IzMnRhYjIgPSBbYSArIGIgZm9yIGEgaW4gX2IzMnRhYiBmb3IgYiBpbiBfYjMydGFiXQorX2IzMnJldiA9IHt2OiBrIGZvciBrLCB2IGluIGVudW1lcmF0ZShfYjMyYWxwaGFiZXQpfQogCiBkZWYgYjMyZW5jb2RlKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEJhc2UzMi4KQEAgLTE2MCwzMSArMTQ5LDIxIEBACiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0gICAgcXVhbnRhLCBsZWZ0b3ZlciA9IGRpdm1vZChsZW4ocyksIDUpCisgICAgICAgIHMgPSBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGxlZnRvdmVyID0gbGVuKHMpICUgNQogICAgICMgUGFkIHRoZSBsYXN0IHF1YW50dW0gd2l0aCB6ZXJvIGJpdHMgaWYgbmVjZXNzYXJ5CiAgICAgaWYgbGVmdG92ZXI6CiAgICAgICAgIHMgPSBzICsgYnl0ZXMoNSAtIGxlZnRvdmVyKSAgIyBEb24ndCB1c2UgKz0gIQotICAgICAgICBxdWFudGEgKz0gMQogICAgIGVuY29kZWQgPSBieXRlYXJyYXkoKQotICAgIGZvciBpIGluIHJhbmdlKHF1YW50YSk6Ci0gICAgICAgICMgYzEgYW5kIGMyIGFyZSAxNiBiaXRzIHdpZGUsIGMzIGlzIDggYml0cyB3aWRlLiAgVGhlIGludGVudCBvZiB0aGlzCi0gICAgICAgICMgY29kZSBpcyB0byBwcm9jZXNzIHRoZSA0MCBiaXRzIGluIHVuaXRzIG9mIDUgYml0cy4gIFNvIHdlIHRha2UgdGhlIDEKLSAgICAgICAgIyBsZWZ0b3ZlciBiaXQgb2YgYzEgYW5kIHRhY2sgaXQgb250byBjMi4gIFRoZW4gd2UgdGFrZSB0aGUgMiBsZWZ0b3ZlcgotICAgICAgICAjIGJpdHMgb2YgYzIgYW5kIHRhY2sgdGhlbSBvbnRvIGMzLiAgVGhlIHNoaWZ0cyBhbmQgbWFza3MgYXJlIGludGVuZGVkCi0gICAgICAgICMgdG8gZ2l2ZSB1cyB2YWx1ZXMgb2YgZXhhY3RseSA1IGJpdHMgaW4gd2lkdGguCi0gICAgICAgIGMxLCBjMiwgYzMgPSBzdHJ1Y3QudW5wYWNrKCchSEhCJywgc1tpKjU6KGkrMSkqNV0pCi0gICAgICAgIGMyICs9IChjMSAmIDEpIDw8IDE2ICMgMTcgYml0cyB3aWRlCi0gICAgICAgIGMzICs9IChjMiAmIDMpIDw8IDggICMgMTAgYml0cyB3aWRlCi0gICAgICAgIGVuY29kZWQgKz0gYnl0ZXMoW19iMzJ0YWJbYzEgPj4gMTFdLCAgICAgICAgICMgYml0cyAxIC0gNQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMSA+PiA2KSAmIDB4MWZdLCAjIGJpdHMgNiAtIDEwCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDEpICYgMHgxZl0sICMgYml0cyAxMSAtIDE1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzIgPj4gMTJdLCAgICAgICAgICMgYml0cyAxNiAtIDIwICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzIgPj4gNykgJiAweDFmXSwgIyBiaXRzIDIxIC0gMjUgKDYgLSAxMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzIgPj4gMikgJiAweDFmXSwgIyBiaXRzIDI2IC0gMzAgKDExIC0gMTUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzMgPj4gNV0sICAgICAgICAgICMgYml0cyAzMSAtIDM1ICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyAmIDB4MWZdLCAgICAgICAgIyBiaXRzIDM2IC0gNDAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgIGZyb21fYnl0ZXMgPSBpbnQuZnJvbV9ieXRlcworICAgIGIzMnRhYjIgPSBfYjMydGFiMgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgNSk6CisgICAgICAgIGMgPSBmcm9tX2J5dGVzKHNbaTogaSArIDVdLCAnYmlnJykKKyAgICAgICAgZW5jb2RlZCArPSAoYjMydGFiMltjID4+IDMwXSArICAgICAgICAgICAjIGJpdHMgMSAtIDEwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbKGMgPj4gMjApICYgMHgzZmZdICsgIyBiaXRzIDExIC0gMjAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAxMCkgJiAweDNmZl0gKyAjIGJpdHMgMjEgLSAzMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyW2MgJiAweDNmZl0gICAgICAgICAgICMgYml0cyAzMSAtIDQwCisgICAgICAgICAgICAgICAgICAgKQogICAgICMgQWRqdXN0IGZvciBhbnkgbGVmdG92ZXIgcGFydGlhbCBxdWFudGEKICAgICBpZiBsZWZ0b3ZlciA9PSAxOgogICAgICAgICBlbmNvZGVkWy02Ol0gPSBiJz09PT09PScKQEAgLTE5Niw3ICsxNzUsNiBAQAogICAgICAgICBlbmNvZGVkWy0xOl0gPSBiJz0nCiAgICAgcmV0dXJuIGJ5dGVzKGVuY29kZWQpCiAKLQogZGVmIGIzMmRlY29kZShzLCBjYXNlZm9sZD1GYWxzZSwgbWFwMDE9Tm9uZSk6CiAgICAgIiIiRGVjb2RlIGEgQmFzZTMyIGVuY29kZWQgYnl0ZSBzdHJpbmcuCiAKQEAgLTIxNyw4ICsxOTUsNyBAQAogICAgIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQuCiAgICAgIiIiCiAgICAgcyA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKHMpCi0gICAgcXVhbnRhLCBsZWZ0b3ZlciA9IGRpdm1vZChsZW4ocyksIDgpCi0gICAgaWYgbGVmdG92ZXI6CisgICAgaWYgbGVuKHMpICUgODoKICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKICAgICAjIEhhbmRsZSBzZWN0aW9uIDIuNCB6ZXJvIGFuZCBvbmUgbWFwcGluZy4gIFRoZSBmbGFnIG1hcDAxIHdpbGwgYmUgZWl0aGVyCiAgICAgIyBGYWxzZSwgb3IgdGhlIGNoYXJhY3RlciB0byBtYXAgdGhlIGRpZ2l0IDEgKG9uZSkgdG8uICBJdCBzaG91bGQgYmUKQEAgLTIzMiw0MiArMjA5LDM2IEBACiAgICAgIyBTdHJpcCBvZmYgcGFkIGNoYXJhY3RlcnMgZnJvbSB0aGUgcmlnaHQuICBXZSBuZWVkIHRvIGNvdW50IHRoZSBwYWQKICAgICAjIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGlzIHdpbGwgdGVsbCB1cyBob3cgbWFueSBudWxsIGJ5dGVzIHRvIHJlbW92ZSBmcm9tCiAgICAgIyB0aGUgZW5kIG9mIHRoZSBkZWNvZGVkIHN0cmluZy4KLSAgICBwYWRjaGFycyA9IDAKLSAgICBtbyA9IHJlLnNlYXJjaChiJyg/UDxwYWQ+Wz1dKikkJywgcykKLSAgICBpZiBtbzoKLSAgICAgICAgcGFkY2hhcnMgPSBsZW4obW8uZ3JvdXAoJ3BhZCcpKQotICAgICAgICBpZiBwYWRjaGFycyA+IDA6Ci0gICAgICAgICAgICBzID0gc1s6LXBhZGNoYXJzXQorICAgIGwgPSBsZW4ocykKKyAgICBzID0gcy5yc3RyaXAoYic9JykKKyAgICBwYWRjaGFycyA9IGwgLSBsZW4ocykKICAgICAjIE5vdyBkZWNvZGUgdGhlIGZ1bGwgcXVhbnRhCi0gICAgcGFydHMgPSBbXQotICAgIGFjYyA9IDAKLSAgICBzaGlmdCA9IDM1Ci0gICAgZm9yIGMgaW4gczoKLSAgICAgICAgdmFsID0gX2IzMnJldi5nZXQoYykKLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UzMiBkaWdpdCBmb3VuZCcpCi0gICAgICAgIGFjYyArPSBfYjMycmV2W2NdIDw8IHNoaWZ0Ci0gICAgICAgIHNoaWZ0IC09IDUKLSAgICAgICAgaWYgc2hpZnQgPCAwOgotICAgICAgICAgICAgcGFydHMuYXBwZW5kKGJpbmFzY2lpLnVuaGV4bGlmeShieXRlcygnJTAxMHgnICUgYWNjLCAiYXNjaWkiKSkpCi0gICAgICAgICAgICBhY2MgPSAwCi0gICAgICAgICAgICBzaGlmdCA9IDM1CisgICAgZGVjb2RlZCA9IGJ5dGVhcnJheSgpCisgICAgYjMycmV2ID0gX2IzMnJldgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgOCk6CisgICAgICAgIHF1YW50YSA9IHNbaTogaSArIDhdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gcXVhbnRhOgorICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNSkgKyBiMzJyZXZbY10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKSBmcm9tIE5vbmUKKyAgICAgICAgZGVjb2RlZCArPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCiAgICAgIyBQcm9jZXNzIHRoZSBsYXN0LCBwYXJ0aWFsIHF1YW50YQotICAgIGxhc3QgPSBiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpCi0gICAgaWYgcGFkY2hhcnMgPT0gMDoKLSAgICAgICAgbGFzdCA9IGInJyAgICAgICAgICAgICAgICAgICAgICAjIE5vIGNoYXJhY3RlcnMKLSAgICBlbGlmIHBhZGNoYXJzID09IDE6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMV0KLSAgICBlbGlmIHBhZGNoYXJzID09IDM6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMl0KLSAgICBlbGlmIHBhZGNoYXJzID09IDQ6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotM10KLSAgICBlbGlmIHBhZGNoYXJzID09IDY6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotNF0KLSAgICBlbHNlOgotICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQotICAgIHBhcnRzLmFwcGVuZChsYXN0KQotICAgIHJldHVybiBiJycuam9pbihwYXJ0cykKKyAgICBpZiBwYWRjaGFyczoKKyAgICAgICAgYWNjIDw8PSA1ICogcGFkY2hhcnMKKyAgICAgICAgbGFzdCA9IGFjYy50b19ieXRlcyg1LCAnYmlnJykKKyAgICAgICAgaWYgcGFkY2hhcnMgPT0gMToKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0xXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDM6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMl0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSA0OgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTNdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNjoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi00XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKKyAgICByZXR1cm4gYnl0ZXMoZGVjb2RlZCkKIAogCiAKQEAgLTI3OSw4ICsyNTAsNiBAQAogCiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgcmV0dXJuIGJpbmFzY2lpLmhleGxpZnkocykudXBwZXIoKQogCiAKQEAgLTMwMiw3ICsyNzEsMTkzIEBACiAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTE2IGRpZ2l0IGZvdW5kJykKICAgICByZXR1cm4gYmluYXNjaWkudW5oZXhsaWZ5KHMpCiAKKyMKKyMgQXNjaWk4NSBlbmNvZGluZy9kZWNvZGluZworIwogCitkZWYgXzg1ZW5jb2RlKGIsIGNoYXJzLCBjaGFyczIsIHBhZD1GYWxzZSwgZm9sZG51bHM9RmFsc2UsIGZvbGRzcGFjZXM9RmFsc2UpOgorICAgICMgSGVscGVyIGZ1bmN0aW9uIGZvciBhODVlbmNvZGUgYW5kIGI4NWVuY29kZQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGJ5dGVzX3R5cGVzKToKKyAgICAgICAgYiA9IG1lbW9yeXZpZXcoYikudG9ieXRlcygpCisKKyAgICBwYWRkaW5nID0gKC1sZW4oYikpICUgNAorICAgIGlmIHBhZGRpbmc6CisgICAgICAgIGIgPSBiICsgYidcMCcgKiBwYWRkaW5nCisgICAgd29yZHMgPSBzdHJ1Y3QuU3RydWN0KCchJWRJJyAlIChsZW4oYikgLy8gNCkpLnVucGFjayhiKQorCisgICAgYTg1Y2hhcnMyID0gX2E4NWNoYXJzMgorICAgIGE4NWNoYXJzID0gX2E4NWNoYXJzCisgICAgY2h1bmtzID0gW2IneicgaWYgZm9sZG51bHMgYW5kIG5vdCB3b3JkIGVsc2UKKyAgICAgICAgICAgICAgYid5JyBpZiBmb2xkc3BhY2VzIGFuZCB3b3JkID09IDB4MjAyMDIwMjAgZWxzZQorICAgICAgICAgICAgICAoY2hhcnMyW3dvcmQgLy8gNjE0MTI1XSArCisgICAgICAgICAgICAgICBjaGFyczJbd29yZCAvLyA4NSAlIDcyMjVdICsKKyAgICAgICAgICAgICAgIGNoYXJzW3dvcmQgJSA4NV0pCisgICAgICAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzXQorCisgICAgaWYgcGFkZGluZyBhbmQgbm90IHBhZDoKKyAgICAgICAgaWYgY2h1bmtzWy0xXSA9PSBiJ3onOgorICAgICAgICAgICAgY2h1bmtzWy0xXSA9IGNoYXJzWzBdICogNQorICAgICAgICBjaHVua3NbLTFdID0gY2h1bmtzWy0xXVs6LXBhZGRpbmddCisKKyAgICByZXR1cm4gYicnLmpvaW4oY2h1bmtzKQorCitfQTg1U1RBUlQgPSBiIjx+IgorX0E4NUVORCA9IGIifj4iCitfYTg1Y2hhcnMgPSBbYnl0ZXMoW2ldKSBmb3IgaSBpbiByYW5nZSgzMywgMTE4KV0KK19hODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYTg1Y2hhcnMgZm9yIGIgaW4gX2E4NWNoYXJzXQorCitkZWYgYTg1ZW5jb2RlKGIsICosIGZvbGRzcGFjZXM9RmFsc2UsIHdyYXBjb2w9MCwgcGFkPUZhbHNlLCBhZG9iZT1GYWxzZSk6CisgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQXNjaWk4NS4KKworICAgIGIgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICBmb2xkc3BhY2VzIGlzIGFuIG9wdGlvbmFsIGZsYWcgdGhhdCB1c2VzIHRoZSBzcGVjaWFsIHNob3J0IHNlcXVlbmNlICd5JworICAgIGluc3RlYWQgb2YgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApIGFzIHN1cHBvcnRlZCBieSAnYnRvYScuIFRoaXMKKyAgICBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQWRvYmUgZW5jb2RpbmcuCisKKyAgICB3cmFwY29sIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG91dHB1dCBzaG91bGQgaGF2ZSBuZXdsaW5lICgnXG4nKSBjaGFyYWN0ZXJzCisgICAgYWRkZWQgdG8gaXQuIElmIHRoaXMgaXMgbm9uLXplcm8sIGVhY2ggb3V0cHV0IGxpbmUgd2lsbCBiZSBhdCBtb3N0IHRoaXMKKyAgICBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgIHBhZCBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNCBiZWZvcmUKKyAgICBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBidG9hIGltcGxlbWVudGF0aW9uIGFsd2F5cyBwYWRzLgorCisgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgZW5jb2RlZCBieXRlIHNlcXVlbmNlIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PiwKKyAgICB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAiIiIKKyAgICByZXN1bHQgPSBfODVlbmNvZGUoYiwgX2E4NWNoYXJzLCBfYTg1Y2hhcnMyLCBwYWQsIFRydWUsIGZvbGRzcGFjZXMpCisKKyAgICBpZiBhZG9iZToKKyAgICAgICAgcmVzdWx0ID0gX0E4NVNUQVJUICsgcmVzdWx0CisgICAgaWYgd3JhcGNvbDoKKyAgICAgICAgd3JhcGNvbCA9IG1heCgyIGlmIGFkb2JlIGVsc2UgMSwgd3JhcGNvbCkKKyAgICAgICAgY2h1bmtzID0gW3Jlc3VsdFtpOiBpICsgd3JhcGNvbF0KKyAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihyZXN1bHQpLCB3cmFwY29sKV0KKyAgICAgICAgaWYgYWRvYmU6CisgICAgICAgICAgICBpZiBsZW4oY2h1bmtzWy0xXSkgKyAyID4gd3JhcGNvbDoKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGInJykKKyAgICAgICAgcmVzdWx0ID0gYidcbicuam9pbihjaHVua3MpCisgICAgaWYgYWRvYmU6CisgICAgICAgIHJlc3VsdCArPSBfQTg1RU5ECisKKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBhODVkZWNvZGUoYiwgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFx0XG5cclx2Jyk6CisgICAgIiIiRGVjb2RlIGFuIEFzY2lpODUgZW5jb2RlZCBieXRlIHN0cmluZy4KKworICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4KKworICAgIGZvbGRzcGFjZXMgaXMgYSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlICd5JyBzaG9ydCBzZXF1ZW5jZSBzaG91bGQgYmUKKyAgICBhY2NlcHRlZCBhcyBzaG9ydGhhbmQgZm9yIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKS4gVGhpcyBmZWF0dXJlIGlzCisgICAgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBZG9iZSBlbmNvZGluZy4KKworICAgIGFkb2JlIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluIEFkb2JlIEFzY2lpODUgZm9ybWF0IChpLmUuCisgICAgaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+KS4KKworICAgIGlnbm9yZWNoYXJzIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBpZ25vcmUgZnJvbSB0aGUKKyAgICBpbnB1dC4gVGhpcyBzaG91bGQgb25seSBjb250YWluIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgYW5kIGJ5IGRlZmF1bHQKKyAgICBjb250YWlucyBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIEFTQ0lJLgorICAgICIiIgorICAgIGIgPSBfYnl0ZXNfZnJvbV9kZWNvZGVfZGF0YShiKQorICAgIGlmIGFkb2JlOgorICAgICAgICBpZiBub3QgKGIuc3RhcnRzd2l0aChfQTg1U1RBUlQpIGFuZCBiLmVuZHN3aXRoKF9BODVFTkQpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFzY2lpODUgZW5jb2RlZCBieXRlIHNlcXVlbmNlcyBtdXN0IGJlIGJyYWNrZXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieSB7fSBhbmQge30iLmZvcm1hdChfQTg1U1RBUlQsIF9BODVFTkQpKQorICAgICAgICBiID0gYlsyOi0yXSAjIFN0cmlwIG9mZiBzdGFydC9lbmQgbWFya2VycworICAgICMKKyAgICAjIFdlIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGlzIHN0ZXB3aXNlLCBzbyBhcyB0byBpZ25vcmUgc3BhY2VzIGFuZCBoYW5kbGUKKyAgICAjIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2VzCisgICAgIworICAgIHBhY2tJID0gc3RydWN0LlN0cnVjdCgnIUknKS5wYWNrCisgICAgZGVjb2RlZCA9IFtdCisgICAgZGVjb2RlZF9hcHBlbmQgPSBkZWNvZGVkLmFwcGVuZAorICAgIGN1cnIgPSBbXQorICAgIGN1cnJfYXBwZW5kID0gY3Vyci5hcHBlbmQKKyAgICBjdXJyX2NsZWFyID0gY3Vyci5jbGVhcgorICAgIGZvciB4IGluIGIgKyBiJ3UnICogNDoKKyAgICAgICAgaWYgYichJ1swXSA8PSB4IDw9IGIndSdbMF06CisgICAgICAgICAgICBjdXJyX2FwcGVuZCh4KQorICAgICAgICAgICAgaWYgbGVuKGN1cnIpID09IDU6CisgICAgICAgICAgICAgICAgYWNjID0gMAorICAgICAgICAgICAgICAgIGZvciB4IGluIGN1cnI6CisgICAgICAgICAgICAgICAgICAgIGFjYyA9IDg1ICogYWNjICsgKHggLSAzMykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKHBhY2tJKGFjYykpCisgICAgICAgICAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXNjaWk4NSBvdmVyZmxvdycpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgIGN1cnJfY2xlYXIoKQorICAgICAgICBlbGlmIHggPT0gYid6J1swXToKKyAgICAgICAgICAgIGlmIGN1cnI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneiBpbnNpZGUgQXNjaWk4NSA1LXR1cGxlJykKKyAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKGInXDBcMFwwXDAnKQorICAgICAgICBlbGlmIGZvbGRzcGFjZXMgYW5kIHggPT0gYid5J1swXToKKyAgICAgICAgICAgIGlmIGN1cnI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneSBpbnNpZGUgQXNjaWk4NSA1LXR1cGxlJykKKyAgICAgICAgICAgIGRlY29kZWRfYXBwZW5kKGInXHgyMFx4MjBceDIwXHgyMCcpCisgICAgICAgIGVsaWYgeCBpbiBpZ25vcmVjaGFyczoKKyAgICAgICAgICAgICMgU2tpcCB3aGl0ZXNwYWNlCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm9uLUFzY2lpODUgZGlnaXQgZm91bmQ6ICVjJyAlIHgpCisKKyAgICByZXN1bHQgPSBiJycuam9pbihkZWNvZGVkKQorICAgIHBhZGRpbmcgPSA0IC0gbGVuKGN1cnIpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgIyBUaHJvdyBhd2F5IHRoZSBleHRyYSBwYWRkaW5nCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LXBhZGRpbmddCisgICAgcmV0dXJuIHJlc3VsdAorCisjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBvcmlnaW5hbGx5IHRha2VuICh3aXRoIHBlcm1pc3Npb24pIGZyb20gTWVyY3VyaWFsCisKK19iODVjaGFycyA9IGIiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiBcCisgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ISMkJSYoKSorLTs8PT4/QF5fYHt8fX4iCitfYjg1Y2hhcnMgPSBbYnl0ZXMoW2ldKSBmb3IgaSBpbiBfYjg1Y2hhcnNdCitfYjg1Y2hhcnMyID0gWyhhICsgYikgZm9yIGEgaW4gX2I4NWNoYXJzIGZvciBiIGluIF9iODVjaGFyc10KK19iODVkZWMgPSBOb25lCisKK2RlZiBiODVlbmNvZGUoYiwgcGFkPUZhbHNlKToKKyAgICAiIiJFbmNvZGUgYW4gQVNDSUktZW5jb2RlZCBieXRlIGFycmF5IGluIGJhc2U4NSBmb3JtYXQuCisKKyAgICBJZiBwYWQgaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcMCIgc28gaXRzIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mCisgICAgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKyAgICAiIiIKKyAgICByZXR1cm4gXzg1ZW5jb2RlKGIsIF9iODVjaGFycywgX2I4NWNoYXJzMiwgcGFkKQorCitkZWYgYjg1ZGVjb2RlKGIpOgorICAgICIiIkRlY29kZSBiYXNlODUtZW5jb2RlZCBieXRlIGFycmF5IiIiCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgZ2xvYmFsIF9iODVkZWMKKyAgICBpZiBfYjg1ZGVjIGlzIE5vbmU6CisgICAgICAgIF9iODVkZWMgPSBbTm9uZV0gKiAyNTYKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKF9iODVjaGFycyk6CisgICAgICAgICAgICBfYjg1ZGVjW2NbMF1dID0gaQorCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDUKKyAgICBiID0gYiArIGInficgKiBwYWRkaW5nCisgICAgb3V0ID0gW10KKyAgICBwYWNrSSA9IHN0cnVjdC5TdHJ1Y3QoJyFJJykucGFjaworICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiKSwgNSk6CisgICAgICAgIGNodW5rID0gYltpOmkgKyA1XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIGNodW5rOgorICAgICAgICAgICAgICAgIGFjYyA9IGFjYyAqIDg1ICsgX2I4NWRlY1tjXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgZm9yIGosIGMgaW4gZW51bWVyYXRlKGNodW5rKToKKyAgICAgICAgICAgICAgICBpZiBfYjg1ZGVjW2NdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2JhZCBiYXNlODUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uICVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaSArIGopKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dC5hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Jhc2U4NSBvdmVyZmxvdyBpbiBodW5rIHN0YXJ0aW5nIGF0IGJ5dGUgJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaSkgZnJvbSBOb25lCisKKyAgICByZXN1bHQgPSBiJycuam9pbihvdXQpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CiAKICMgTGVnYWN5IGludGVyZmFjZS4gIFRoaXMgY29kZSBjb3VsZCBiZSBjbGVhbmVkIHVwIHNpbmNlIEkgZG9uJ3QgYmVsaWV2ZQogIyBiaW5hc2NpaSBoYXMgYW55IGxpbmUgbGVuZ3RoIGxpbWl0YXRpb25zLiAgSXQganVzdCBkb2Vzbid0IHNlZW0gd29ydGggaXQKQEAgLTMzNSwxMiArNDkwLDI2IEBACiAgICAgICAgIHMgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgICAgIG91dHB1dC53cml0ZShzKQogCitkZWYgX2lucHV0X3R5cGVfY2hlY2socyk6CisgICAgdHJ5OgorICAgICAgICBtID0gbWVtb3J5dmlldyhzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICBtc2cgPSAiZXhwZWN0ZWQgYnl0ZXMtbGlrZSBvYmplY3QsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKSBmcm9tIGVycgorICAgIGlmIG0uZm9ybWF0IG5vdCBpbiAoJ2MnLCAnYicsICdCJyk6CisgICAgICAgIG1zZyA9ICgiZXhwZWN0ZWQgc2luZ2xlIGJ5dGUgZWxlbWVudHMsIG5vdCAlciBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5mb3JtYXQsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiBtLm5kaW0gIT0gMToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCAxLUQgZGF0YSwgbm90ICVkLUQgZGF0YSBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5uZGltLCBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKIAogZGVmIGVuY29kZWJ5dGVzKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGVzdHJpbmcgaW50byBhIGJ5dGVzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBNQVhCSU5TSVpFKToKICAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgTUFYQklOU0laRV0KQEAgLTM1Nyw4ICs1MjYsNyBAQAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6CiAgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgX2lucHV0X3R5cGVfY2hlY2socykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiBkZWYgZGVjb2Rlc3RyaW5nKHMpOgpkaWZmIC0tZ2l0IGEvTGliL2JkYi5weSBiL0xpYi9iZGIucHkKaW5kZXggZGQxZjQyOC4uNjdhMDg0NiAxMDA2NDQKLS0tIGEvTGliL2JkYi5weQorKysgYi9MaWIvYmRiLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBzeXMKIGltcG9ydCBvcworZnJvbSBpbnNwZWN0IGltcG9ydCBDT19HRU5FUkFUT1IKIAogX19hbGxfXyA9IFsiQmRiUXVpdCIsICJCZGIiLCAiQnJlYWtwb2ludCJdCiAKQEAgLTc1LDI0ICs3Niw0OCBAQAogICAgICAgICBpZiBub3QgKHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBzZWxmLmJyZWFrX2FueXdoZXJlKGZyYW1lKSk6CiAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbgogICAgICAgICAgICAgcmV0dXJuICMgTm9uZQorICAgICAgICAjIElnbm9yZSBjYWxsIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgIGlmIHNlbGYuc3RvcGZyYW1lIGFuZCBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICBzZWxmLnVzZXJfY2FsbChmcmFtZSwgYXJnKQogICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CiAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAKICAgICBkZWYgZGlzcGF0Y2hfcmV0dXJuKHNlbGYsIGZyYW1lLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnN0b3BfaGVyZShmcmFtZSkgb3IgZnJhbWUgPT0gc2VsZi5yZXR1cm5mcmFtZToKKyAgICAgICAgICAgICMgSWdub3JlIHJldHVybiBldmVudHMgaW4gZ2VuZXJhdG9yIGV4Y2VwdCB3aGVuIHN0ZXBwaW5nLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gZnJhbWUKICAgICAgICAgICAgICAgICBzZWxmLnVzZXJfcmV0dXJuKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gTm9uZQogICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAgICAgIyBUaGUgdXNlciBpc3N1ZWQgYSAnbmV4dCcgb3IgJ3VudGlsJyBjb21tYW5kLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgaXMgZnJhbWUgYW5kIHNlbGYuc3RvcGxpbmVubyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oTm9uZSwgTm9uZSkKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9leGNlcHRpb24oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKToKKyAgICAgICAgICAgICMgV2hlbiBzdGVwcGluZyB3aXRoIG5leHQvdW50aWwvcmV0dXJuIGluIGEgZ2VuZXJhdG9yIGZyYW1lLCBza2lwCisgICAgICAgICAgICAjIHRoZSBpbnRlcm5hbCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbiAod2l0aCBubyB0cmFjZWJhY2spCisgICAgICAgICAgICAjIHRyaWdnZXJlZCBieSBhIHN1Yml0ZXJhdG9yIHJ1biB3aXRoIHRoZSAneWllbGQgZnJvbScgc3RhdGVtZW50LgorICAgICAgICAgICAgaWYgbm90IChmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgYW5kIGFyZ1swXSBpcyBTdG9wSXRlcmF0aW9uIGFuZCBhcmdbMl0gaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyX2V4Y2VwdGlvbihmcmFtZSwgYXJnKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKyAgICAgICAgIyBTdG9wIGF0IHRoZSBTdG9wSXRlcmF0aW9uIG9yIEdlbmVyYXRvckV4aXQgZXhjZXB0aW9uIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgIyBoYXMgc2V0IHN0b3BmcmFtZSBpbiBhIGdlbmVyYXRvciBieSBpc3N1aW5nIGEgcmV0dXJuIGNvbW1hbmQsIG9yIGEKKyAgICAgICAgIyBuZXh0L3VudGlsIGNvbW1hbmQgYXQgdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSBnZW5lcmF0b3IgYmVmb3JlIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgZWxpZiAoc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnN0b3BmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGluIChTdG9wSXRlcmF0aW9uLCBHZW5lcmF0b3JFeGl0KSk6CiAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgICMgTm9ybWFsbHkgZGVyaXZlZCBjbGFzc2VzIGRvbid0IG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcKQEAgLTExNSwxMCArMTQwLDggQEAKICAgICAgICAgICAgIGlmIHNlbGYuc3RvcGxpbmVubyA9PSAtMToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBmcmFtZS5mX2xpbmVubyA+PSBzZWxmLnN0b3BsaW5lbm8KLSAgICAgICAgd2hpbGUgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZToKLSAgICAgICAgICAgIGlmIGZyYW1lIGlzIHNlbGYuYm90ZnJhbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BmcmFtZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIGJyZWFrX2hlcmUoc2VsZiwgZnJhbWUpOgpAQCAtMjA3LDcgKzIzMCwxMCBAQAogCiAgICAgZGVmIHNldF9yZXR1cm4oc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJTdG9wIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIGdpdmVuIGZyYW1lLiIiIgotICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUuZl9iYWNrLCBmcmFtZSkKKyAgICAgICAgaWYgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLCBOb25lLCAtMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQogCiAgICAgZGVmIHNldF90cmFjZShzZWxmLCBmcmFtZT1Ob25lKToKICAgICAgICAgIiIiU3RhcnQgZGVidWdnaW5nIGZyb20gYGZyYW1lYC4KZGlmZiAtLWdpdCBhL0xpYi9iejIucHkgYi9MaWIvYnoyLnB5CmluZGV4IGMzMDc1MDcuLjZiYzYxMWUgMTAwNjQ0Ci0tLSBhL0xpYi9iejIucHkKKysrIGIvTGliL2J6Mi5weQpAQCAtOSw3ICs5LDYgQEAKIAogX19hdXRob3JfXyA9ICJOYWRlZW0gVmF3ZGEgPG5hZGVlbS52YXdkYUBnbWFpbC5jb20+IgogCi1pbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBpbwogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTI4LDYgKzI3LDggQEAKIAogX0JVRkZFUl9TSVpFID0gODE5MgogCitfYnVpbHRpbl9vcGVuID0gb3BlbgorCiAKIGNsYXNzIEJaMkZpbGUoaW8uQnVmZmVyZWRJT0Jhc2UpOgogCkBAIC00MywxNiArNDQsMTcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1vZGU9InIiLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KToKICAgICAgICAgIiIiT3BlbiBhIGJ6aXAyLWNvbXByZXNzZWQgZmlsZS4KIAotICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGlzIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvCi0gICAgICAgIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvCi0gICAgICAgIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgSWYgZmlsZW5hbWUgaXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0LCBpdCBnaXZlcyB0aGUgbmFtZQorICAgICAgICBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQuIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBvYmplY3QsCisgICAgICAgIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZWFkIG9yIHdyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAKLSAgICAgICAgbW9kZSBjYW4gYmUgJ3InIGZvciByZWFkaW5nIChkZWZhdWx0KSwgJ3cnIGZvciAob3Zlcil3cml0aW5nLCBvciAnYScgZm9yCi0gICAgICAgIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAncmInLCAnd2InLCBhbmQgJ2FiJy4KKyAgICAgICAgbW9kZSBjYW4gYmUgJ3InIGZvciByZWFkaW5nIChkZWZhdWx0KSwgJ3cnIGZvciAob3Zlcil3cml0aW5nLAorICAgICAgICAneCcgZm9yIGNyZWF0aW5nIGV4Y2x1c2l2ZWx5LCBvciAnYScgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuCisgICAgICAgIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAncmInLCAnd2InLCAneGInLCBhbmQgJ2FiJy4KIAogICAgICAgICBidWZmZXJpbmcgaXMgaWdub3JlZC4gSXRzIHVzZSBpcyBkZXByZWNhdGVkLgogCi0gICAgICAgIElmIG1vZGUgaXMgJ3cnIG9yICdhJywgY29tcHJlc3NsZXZlbCBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAxCisgICAgICAgIElmIG1vZGUgaXMgJ3cnLCAneCcgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKICAgICAgICAgYW5kIDkgc3BlY2lmeWluZyB0aGUgbGV2ZWwgb2YgY29tcHJlc3Npb246IDEgcHJvZHVjZXMgdGhlIGxlYXN0CiAgICAgICAgIGNvbXByZXNzaW9uLCBhbmQgOSAoZGVmYXVsdCkgcHJvZHVjZXMgdGhlIG1vc3QgY29tcHJlc3Npb24uCiAKQEAgLTg1LDE1ICs4NywxOSBAQAogICAgICAgICAgICAgbW9kZSA9ICJ3YiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ4IiwgInhiIik6CisgICAgICAgICAgICBtb2RlID0gInhiIgorICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCiAgICAgICAgIGVsaWYgbW9kZSBpbiAoImEiLCAiYWIiKToKICAgICAgICAgICAgIG1vZGUgPSAiYWIiCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQogICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbW9kZTogeyFyfSIuZm9ybWF0KG1vZGUpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiAlciIgJSAobW9kZSwpKQogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW5hbWUsIChzdHIsIGJ5dGVzKSk6Ci0gICAgICAgICAgICBzZWxmLl9mcCA9IGJ1aWx0aW5zLm9wZW4oZmlsZW5hbWUsIG1vZGUpCisgICAgICAgICAgICBzZWxmLl9mcCA9IF9idWlsdGluX29wZW4oZmlsZW5hbWUsIG1vZGUpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWZwID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGVfY29kZQogICAgICAgICBlbGlmIGhhc2F0dHIoZmlsZW5hbWUsICJyZWFkIikgb3IgaGFzYXR0cihmaWxlbmFtZSwgIndyaXRlIik6CkBAIC0xODksMTUgKzE5NSwxNyBAQAogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKKyAgICAgICAgICAgICAgICAgICAgIyBFbmQtb2Ytc3RyZWFtIG1hcmtlciBhbmQgZW5kIG9mIGZpbGUuIFdlJ3JlIGdvb2QuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFEX0VPRgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaXplID0gc2VsZi5fcG9zCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgUHJvYmxlbSAtIHdlIHdlcmUgZXhwZWN0aW5nIG1vcmUgY29tcHJlc3NlZCBkYXRhLgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQogCi0gICAgICAgICAgICAjIENvbnRpbnVlIHRvIG5leHQgc3RyZWFtLgogICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKKyAgICAgICAgICAgICAgICAjIENvbnRpbnVlIHRvIG5leHQgc3RyZWFtLgogICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IEJaMkRlY29tcHJlc3NvcigpCiAKICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQpAQCAtNDEyLDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYWxsKHJldHVybl9kYXRhPUZhbHNlKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3NpemUgKyBvZmZzZXQKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiB7fSIuZm9ybWF0KHdoZW5jZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiAlcyIgJSAod2hlbmNlLCkpCiAKICAgICAgICAgICAgICMgTWFrZSBpdCBzbyB0aGF0IG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yd2FyZC4KICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKQEAgLTQzNiwyMCArNDQ0LDIwIEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKLSAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAiYSIgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsCi0gICAgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZQotICAgIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgIngiLCAieGIiLCAiYSIgb3IKKyAgICAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUgY29uc3RydWN0b3I6Ci0gICAgQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKLSAgICBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUKKyAgICBjb25zdHJ1Y3RvcjogQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwKKyAgICB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIEJaMkZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggYzI0ZDQ1Yi4uMTE4NDM4NSAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtNyw1NCArNywyMCBAQAogX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogaW1wb3J0IF9sc3Byb2YKK2ltcG9ydCBwcm9maWxlIGFzIF9weXByb2ZpbGUKIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICMgU2ltcGxlIGludGVyZmFjZQogCiBkZWYgcnVuKHN0YXRlbWVudCwgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUKLSAgICAiZXhlYyIgc3RhdGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgZmlsZSBuYW1lLiAgSW4gYWxsIGNhc2VzIHRoaXMKLSAgICByb3V0aW5lIGF0dGVtcHRzIHRvICJleGVjIiBpdHMgZmlyc3QgYXJndW1lbnQgYW5kIGdhdGhlciBwcm9maWxpbmcKLSAgICBzdGF0aXN0aWNzIGZyb20gdGhlIGV4ZWN1dGlvbi4gSWYgbm8gZmlsZSBuYW1lIGlzIHByZXNlbnQsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcHJpbnRzIGEgc2ltcGxlIHByb2ZpbGluZyByZXBvcnQsIHNvcnRlZCBieSB0aGUKLSAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCi0gICAgZWFjaCBsaW5lLgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLAotICAgIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUuCisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKK3J1bi5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW4uX19kb2NfXworcnVuY3R4Ll9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bmN0eC5fX2RvY19fCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKQEAgLTc3LDEwICs0Myw5IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKICAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc2FibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2NnaS5weSBiL0xpYi9jZ2kucHkKaW5kZXggMDZlMDNiNS4uMWQ4MDQwYyAxMDA3NTUKLS0tIGEvTGliL2NnaS5weQorKysgYi9MaWIvY2dpLnB5CkBAIC04MCw3ICs4MCw3IEBACiAgICAgaWYgbG9nZmlsZSBhbmQgbm90IGxvZ2ZwOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsb2dmcCA9IG9wZW4obG9nZmlsZSwgImEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgaWYgbm90IGxvZ2ZwOgogICAgICAgICBsb2cgPSBub2xvZwpAQCAtNTUyLDYgKzU1MiwxMiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5yZWFkX3NpbmdsZSgpCiAKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24uIiIiCiAgICAgICAgIHJldHVybiAiRmllbGRTdG9yYWdlKCVyLCAlciwgJXIpIiAlICgKQEAgLTY3MCw3ICs2NzYsNiBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcsIGVycm9ycz1zZWxmLmVycm9ycykKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHF1ZXJ5OgogICAgICAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQoTWluaUZpZWxkU3RvcmFnZShrZXksIHZhbHVlKSkKLSAgICAgICAgICAgIEZpZWxkU3RvcmFnZUNsYXNzID0gTm9uZQogCiAgICAgICAgIGtsYXNzID0gc2VsZi5GaWVsZFN0b3JhZ2VDbGFzcyBvciBzZWxmLl9fY2xhc3NfXwogICAgICAgICBmaXJzdF9saW5lID0gc2VsZi5mcC5yZWFkbGluZSgpICMgYnl0ZXMKQEAgLTk1OCw4ICs5NjMsOCBAQAogICAgIHByaW50KCI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIpCiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICBwcmludCgiT1NFcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoaHRtbC5lc2NhcGUocHdkKSkKICAgICBwcmludCgpCmRpZmYgLS1naXQgYS9MaWIvY2h1bmsucHkgYi9MaWIvY2h1bmsucHkKaW5kZXggNTg2M2VkMC4uZGM5MGE3NSAxMDA2NDQKLS0tIGEvTGliL2NodW5rLnB5CisrKyBiL0xpYi9jaHVuay5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWxmLnNpemVfcmVhZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSBzZWxmLmZpbGUudGVsbCgpCi0gICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IFRydWUKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLnNlZWsobiwgMSkKICAgICAgICAgICAgICAgICBzZWxmLnNpemVfcmVhZCA9IHNlbGYuc2l6ZV9yZWFkICsgbgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdoaWxlIHNlbGYuc2l6ZV9yZWFkIDwgc2VsZi5jaHVua3NpemU6CiAgICAgICAgICAgICBuID0gbWluKDgxOTIsIHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQpCmRpZmYgLS1naXQgYS9MaWIvY29kZS5weSBiL0xpYi9jb2RlLnB5CmluZGV4IDkwMjBhYWIuLmY4MTg0YjYgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlLnB5CisrKyBiL0xpYi9jb2RlLnB5CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiglcylcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgY3BydCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBiYW5uZXI6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIlc1xuIiAlIHN0cihiYW5uZXIpKQogICAgICAgICBtb3JlID0gMAogICAgICAgICB3aGlsZSAxOgpkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggNmE2ZWI5MC4uMmUyZTc1NSAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC03Myw5ICs3MywxOSBAQAogIyMjIENvZGVjIGJhc2UgY2xhc3NlcyAoZGVmaW5pbmcgdGhlIEFQSSkKIAogY2xhc3MgQ29kZWNJbmZvKHR1cGxlKToKKyAgICAiIiJDb2RlYyBkZXRhaWxzIHdoZW4gbG9va2luZyB1cCB0aGUgY29kZWMgcmVnaXN0cnkiIiIKKworICAgICMgUHJpdmF0ZSBBUEkgdG8gYWxsb3cgUHl0aG9uIDMuNCB0byBibGFja2xpc3QgdGhlIGtub3duIG5vbi1Vbmljb2RlCisgICAgIyBjb2RlY3MgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIEEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSB0bworICAgICMgcmVsaWFibHkgZGlzdGluZ3Vpc2ggdGVzdCBlbmNvZGluZ3MgZnJvbSBvdGhlciBjb2RlY3Mgd2lsbCBob3BlZnVsbHkKKyAgICAjIGJlIGRlZmluZWQgZm9yIFB5dGhvbiAzLjUKKyAgICAjCisgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjE5CisgICAgX2lzX3RleHRfZW5jb2RpbmcgPSBUcnVlICMgQXNzdW1lIGNvZGVjcyBhcmUgdGV4dCBlbmNvZGluZ3MgYnkgZGVmYXVsdAogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBlbmNvZGUsIGRlY29kZSwgc3RyZWFtcmVhZGVyPU5vbmUsIHN0cmVhbXdyaXRlcj1Ob25lLAotICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9Tm9uZSwgaW5jcmVtZW50YWxkZWNvZGVyPU5vbmUsIG5hbWU9Tm9uZSk6CisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1Ob25lLCBpbmNyZW1lbnRhbGRlY29kZXI9Tm9uZSwgbmFtZT1Ob25lLAorICAgICAgICAqLCBfaXNfdGV4dF9lbmNvZGluZz1Ob25lKToKICAgICAgICAgc2VsZiA9IHR1cGxlLl9fbmV3X18oY2xzLCAoZW5jb2RlLCBkZWNvZGUsIHN0cmVhbXJlYWRlciwgc3RyZWFtd3JpdGVyKSkKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLmVuY29kZSA9IGVuY29kZQpAQCAtODQsNiArOTQsOCBAQAogICAgICAgICBzZWxmLmluY3JlbWVudGFsZGVjb2RlciA9IGluY3JlbWVudGFsZGVjb2RlcgogICAgICAgICBzZWxmLnN0cmVhbXdyaXRlciA9IHN0cmVhbXdyaXRlcgogICAgICAgICBzZWxmLnN0cmVhbXJlYWRlciA9IHN0cmVhbXJlYWRlcgorICAgICAgICBpZiBfaXNfdGV4dF9lbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2lzX3RleHRfZW5jb2RpbmcgPSBfaXNfdGV4dF9lbmNvZGluZwogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLjAyYmRjNTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTE5OSwxMyArMTk5LDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtODIyLDkgKzgxOSwxNCBAQAogCiAgICAgX19jb3B5X18gPSBjb3B5CiAKLSAgICBkZWYgbmV3X2NoaWxkKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQotICAgICAgICAnTmV3IENoYWluTWFwIHdpdGggYSBuZXcgZGljdCBmb2xsb3dlZCBieSBhbGwgcHJldmlvdXMgbWFwcy4nCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh7fSwgKnNlbGYubWFwcykKKyAgICBkZWYgbmV3X2NoaWxkKHNlbGYsIG09Tm9uZSk6ICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQorICAgICAgICAnJycKKyAgICAgICAgTmV3IENoYWluTWFwIHdpdGggYSBuZXcgbWFwIGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLiBJZiBubworICAgICAgICBtYXAgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIG0gPSB7fQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18obSwgKnNlbGYubWFwcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJlbnRzKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucG9wKCkKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CmluZGV4IDc5MzkyNjguLjg5MTYwMGQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQpAQCAtMSw3MjggKzEsMiBAQAotIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotCi0iIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgotCi1Vbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgotIiIiCi0KLWZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAotaW1wb3J0IHN5cwotCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCi0gICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAotICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAotICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCi0gICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCi0gICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAotICAgICAgICAgICAiQnl0ZVN0cmluZyIsCi0gICAgICAgICAgIF0KLQotIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcwotIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6Ci0jICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQotIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCi0jIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0Ci0jIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAotIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KLWJ5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCi1ieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQotI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/Ci1kaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCi1kaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQotZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCi1saXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKLWxpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCi1yYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCi1zZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQotc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKLXR1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKLXppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCi0jIyB2aWV3cyAjIwotZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCi1kaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCi1kaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQotIyMgbWlzYyAjIwotbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQotCi0KLSMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIwotCi1jbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgotICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgotICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHdoaWxlIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCi0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCi0gICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCi0jSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQotCi1jbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIFNFVFMgIyMjCi0KLQotY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCi0KLSAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKLSAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KLQotICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKLSAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KLSAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBjbHMoaXQpCi0KLSAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCi0KLSAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6Ci0gICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJwotICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQotCi0gICAgZGVmIF9oYXNoKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCi0gICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKLSAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgotCi0gICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KLQotICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQotICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAotICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKLSAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCi0gICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KLSAgICAgICAgIiIiCi0gICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCi0gICAgICAgIE1BU0sgPSAyICogTUFYICsgMQotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgZm9yIHggaW4gc2VsZjoKLSAgICAgICAgICAgIGh4ID0gaGFzaCh4KQotICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKLSAgICAgICAgICAgIGggJj0gTUFTSwotICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBpZiBoID4gTUFYOgotICAgICAgICAgICAgaCAtPSBNQVNLICsgMQotICAgICAgICBpZiBoID09IC0xOgotICAgICAgICAgICAgaCA9IDU5MDkyMzcxMwotICAgICAgICByZXR1cm4gaAotCi1TZXQucmVnaXN0ZXIoZnJvemVuc2V0KQotCi0KLWNsYXNzIE11dGFibGVTZXQoU2V0KToKLSAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAotICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0KLSAgICBkZWYgcG9wKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgotICAgICAgICBpdCA9IGl0ZXIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKLSAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKLQotCi0jIyMgTUFQUElOR1MgIyMjCi0KLQotY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQotICAgIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgotICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKLSAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKLSAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCi0KLQotY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgotICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCi0KLQotY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQga2V5Ci0KLUtleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKLQotCi1jbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKLQotSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCi0KLQotY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KLQotVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKLQotCi1jbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCi0gICAga2V5L3ZhbHVlIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKLSAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KLSAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCi0gICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKLSAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2Ci0gICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCi0gICAgICAgIGVsaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKLSAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLU11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCi0KLQotIyMjIFNFUVVFTkNFUyAjIyMKLQotCi1jbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBpID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCi0gICAgICAgICAgICAgICAgeWllbGQgdgotICAgICAgICAgICAgICAgIGkgKz0gMQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciB2IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmW2ldCi0KLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJwotICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQotCi1TZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKLVNlcXVlbmNlLnJlZ2lzdGVyKHN0cikKLVNlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQotCi0KLWNsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgotCi0gICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCi0KLSAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKLQotCi1jbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JwotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJldmVyc2Uoc2VsZik6Ci0gICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6Ci0gICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCi0KLSAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKLSAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKLQotICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgotICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCi0gICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAgICAgICcnJwotICAgICAgICB2ID0gc2VsZltpbmRleF0KLSAgICAgICAgZGVsIHNlbGZbaW5kZXhdCi0gICAgICAgIHJldHVybiB2Ci0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0gICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCAqCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCBhNmMwY2Y2Li5iOTNlMzg0IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0zMywxNyArMzMsMjUgQEAKICMgWUlROiB1c2VkIGJ5IGNvbXBvc2l0ZSB2aWRlbyBzaWduYWxzIChsaW5lYXIgY29tYmluYXRpb25zIG9mIFJHQikKICMgWTogcGVyY2VpdmVkIGdyZXkgbGV2ZWwgKDAuMCA9PSBibGFjaywgMS4wID09IHdoaXRlKQogIyBJLCBROiBjb2xvciBjb21wb25lbnRzCisjCisjIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgdmVyc2lvbnMgb2YgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoZXNlIGZvcm11bGFlLgorIyBUaGUgb25lcyBpbiB0aGlzIGxpYnJhcnkgdXNlcyBjb25zdGFudHMgZnJvbSB0aGUgRkNDIHZlcnNpb24gb2YgTlRTQy4KIAogZGVmIHJnYl90b195aXEociwgZywgYik6CiAgICAgeSA9IDAuMzAqciArIDAuNTkqZyArIDAuMTEqYgotICAgIGkgPSAwLjYwKnIgLSAwLjI4KmcgLSAwLjMyKmIKLSAgICBxID0gMC4yMSpyIC0gMC41MipnICsgMC4zMSpiCisgICAgaSA9IDAuNzQqKHIteSkgLSAwLjI3KihiLXkpCisgICAgcSA9IDAuNDgqKHIteSkgKyAwLjQxKihiLXkpCiAgICAgcmV0dXJuICh5LCBpLCBxKQogCiBkZWYgeWlxX3RvX3JnYih5LCBpLCBxKToKLSAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCi0gICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQotICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKKyAgICAjIHIgPSB5ICsgKDAuMjcqcSArIDAuNDEqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgYiA9IHkgKyAoMC43NCpxIC0gMC40OCppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBnID0geSAtICgwLjMwKihyLXkpICsgMC4xMSooYi15KSkgLyAwLjU5CisKKyAgICByID0geSArIDAuOTQ2ODgyMjE3MDkwMDY5MyppICsgMC42MjM1NTY1ODE5ODYxNDMzKnEKKyAgICBnID0geSAtIDAuMjc0Nzg3NjQ2Mjk4OTc4MzQqaSAtIDAuNjM1NjkxMDc5MTg3MzgwMSpxCisgICAgYiA9IHkgLSAxLjEwODU0NTAzNDY0MjAzMjIqaSArIDEuNzA5MDA2OTI4NDA2NDY2NipxCisKICAgICBpZiByIDwgMC4wOgogICAgICAgICByID0gMC4wCiAgICAgaWYgZyA8IDAuMDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggZDNjZmY2YS4uNDc1ZGMxYyAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEzLDcgKzEzLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RydWN0CiAKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcHJpbnQoJ0xpc3RpbmcgeyFyfS4uLicuZm9ybWF0KGRpcikpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcHJpbnQoIkNhbid0IGxpc3QgeyFyfSIuZm9ybWF0KGRpcikpCiAgICAgICAgIG5hbWVzID0gW10KICAgICBuYW1lcy5zb3J0KCkKQEAgLTkxLDIyICs5MSwyMyBAQAogICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKICAgICAgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCiAgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CiAgICAgICAgICAgICBpZiBub3QgZm9yY2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUpCiAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNoYW5kbGUucmVhZCg4KQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3QgPT0gYWN0dWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgIHByaW50KCdDb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKQEAgLTEyNCw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoc3lzLnN0ZG91dC5lbmNvZGluZykKICAgICAgICAgICAgICAgICBwcmludChtc2cpCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBxdWlldDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBjb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjA5LDcgKzIxMCw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGNhM2FlYmQuLjNkMDMyODAgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMTk4LDggKzE5OCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQppbmRleCBhZGYyYWI0Li4wN2I1MjI1IDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CkBAIC00MCw3ICs0MCw3IEBACiAKIFByb2Nlc3MgIzEuLm46CiAtIHJlYWRzIF9DYWxsSXRlbXMgZnJvbSAiQ2FsbCBRIiwgZXhlY3V0ZXMgdGhlIGNhbGxzLCBhbmQgcHV0cyB0aGUgcmVzdWx0aW5nCi0gIF9SZXN1bHRJdGVtcyBpbiAiUmVxdWVzdCBRIgorICBfUmVzdWx0SXRlbXMgaW4gIlJlc3VsdCBRIgogIiIiCiAKIF9fYXV0aG9yX18gPSAnQnJpYW4gUXVpbmxhbiAoYnJpYW5Ac3dlZXRhcHAuY29tKScKQEAgLTQ5LDggKzQ5LDkgQEAKIGltcG9ydCBvcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IF9iYXNlCiBpbXBvcnQgcXVldWUKK2Zyb20gcXVldWUgaW1wb3J0IEZ1bGwKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUsIEZ1bGwKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTaW1wbGVRdWV1ZQogZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHdlYWtyZWYKQEAgLTI0MCw2ICsyNDEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInRlcm1pbmF0ZWQgYWJydXB0bHkgd2hpbGUgdGhlIGZ1dHVyZSB3YXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJ1bm5pbmcgb3IgcGVuZGluZy4iCiAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgIyBEZWxldGUgcmVmZXJlbmNlcyB0byBvYmplY3QuIFNlZSBpc3N1ZTE2Mjg0CisgICAgICAgICAgICAgICAgZGVsIHdvcmtfaXRlbQogICAgICAgICAgICAgcGVuZGluZ193b3JrX2l0ZW1zLmNsZWFyKCkKICAgICAgICAgICAgICMgVGVybWluYXRlIHJlbWFpbmluZyB3b3JrZXJzIGZvcmNpYmx5OiB0aGUgcXVldWVzIG9yIHRoZWlyCiAgICAgICAgICAgICAjIGxvY2tzIG1heSBiZSBpbiBhIGRpcnR5IHN0YXRlIGFuZCBibG9jayBmb3JldmVyLgpAQCAtMjY0LDYgKzI2Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIHdvcmtfaXRlbS5mdXR1cmUuc2V0X2V4Y2VwdGlvbihyZXN1bHRfaXRlbS5leGNlcHRpb24pCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfcmVzdWx0KHJlc3VsdF9pdGVtLnJlc3VsdCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgc3RhcnQgc2h1dHRpbmcgZG93bi4KICAgICAgICAgZXhlY3V0b3IgPSBleGVjdXRvcl9yZWZlcmVuY2UoKQogICAgICAgICAjIE5vIG1vcmUgd29yayBpdGVtcyBjYW4gYmUgYWRkZWQgaWY6CkBAIC0zMjcsNyArMzMyLDcgQEAKICAgICAgICAgX2NoZWNrX3N5c3RlbV9saW1pdHMoKQogCiAgICAgICAgIGlmIG1heF93b3JrZXJzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBvcy5jcHVfY291bnQoKSBvciAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG1heF93b3JrZXJzCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKaW5kZXggOTViYjY4Mi4uZjliZWIwZiAxMDA2NDQKLS0tIGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKQEAgLTYzLDYgKzYzLDggQEAKICAgICAgICAgICAgIHdvcmtfaXRlbSA9IHdvcmtfcXVldWUuZ2V0KGJsb2NrPVRydWUpCiAgICAgICAgICAgICBpZiB3b3JrX2l0ZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgd29ya19pdGVtLnJ1bigpCisgICAgICAgICAgICAgICAgIyBEZWxldGUgcmVmZXJlbmNlcyB0byBvYmplY3QuIFNlZSBpc3N1ZTE2Mjg0CisgICAgICAgICAgICAgICAgZGVsIHdvcmtfaXRlbQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICAgICAjIEV4aXQgaWY6CmRpZmYgLS1naXQgYS9MaWIvY29uZmlncGFyc2VyLnB5IGIvTGliL2NvbmZpZ3BhcnNlci5weQppbmRleCBmZGUxYzEyLi43OTRmODU3IDEwMDY0NAotLS0gYS9MaWIvY29uZmlncGFyc2VyLnB5CisrKyBiL0xpYi9jb25maWdwYXJzZXIucHkKQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKGZwLCBmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJlYWRfb2suYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gcmVhZF9vawpkaWZmIC0tZ2l0IGEvTGliL2NvbnRleHRsaWIucHkgYi9MaWIvY29udGV4dGxpYi5weQppbmRleCBmOGUwMjZiLi5kMzIxOWY2IDEwMDY0NAotLS0gYS9MaWIvY29udGV4dGxpYi5weQorKysgYi9MaWIvY29udGV4dGxpYi5weQpAQCAtNCw3ICs0LDggQEAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKIAotX19hbGxfXyA9IFsiY29udGV4dG1hbmFnZXIiLCAiY2xvc2luZyIsICJDb250ZXh0RGVjb3JhdG9yIiwgIkV4aXRTdGFjayJdCitfX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIiwKKyAgICAgICAgICAgInJlZGlyZWN0X3N0ZG91dCIsICJzdXBwcmVzcyJdCiAKIAogY2xhc3MgQ29udGV4dERlY29yYXRvcihvYmplY3QpOgpAQCAtMzYsNiArMzcsMTYgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHNlbGYuZ2VuID0gZnVuYygqYXJncywgKiprd2RzKQogICAgICAgICBzZWxmLmZ1bmMsIHNlbGYuYXJncywgc2VsZi5rd2RzID0gZnVuYywgYXJncywga3dkcworICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBkb2MgPSBnZXRhdHRyKGZ1bmMsICJfX2RvY19fIiwgTm9uZSkKKyAgICAgICAgaWYgZG9jIGlzIE5vbmU6CisgICAgICAgICAgICBkb2MgPSB0eXBlKHNlbGYpLl9fZG9jX18KKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jCisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgdGhpcyBzdGlsbCBkb2Vzbid0IHByb3ZpZGUgZ29vZCBoZWxwIG91dHB1dCB3aGVuCisgICAgICAgICMgaW5zcGVjdGluZyB0aGUgY3JlYXRlZCBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzLCBzaW5jZSBweWRvYworICAgICAgICAjIGN1cnJlbnRseSBieXBhc3NlcyB0aGUgaW5zdGFuY2UgZG9jc3RyaW5nIGFuZCBzaG93cyB0aGUgZG9jc3RyaW5nCisgICAgICAgICMgZm9yIHRoZSBjbGFzcyBpbnN0ZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk0MDQgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgIGRlZiBfcmVjcmVhdGVfY20oc2VsZik6CiAgICAgICAgICMgX0dDTSBpbnN0YW5jZXMgYXJlIG9uZS1zaG90IGNvbnRleHQgbWFuYWdlcnMsIHNvIHRoZQpAQCAtNDcsNyArNTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJnZW5lcmF0b3IgZGlkbid0IHlpZWxkIikgZnJvbSBOb25lCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKQEAgLTE0MCw2ICsxNTEsNjIgQEAKICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKICAgICAgICAgc2VsZi50aGluZy5jbG9zZSgpCiAKK2NsYXNzIHJlZGlyZWN0X3N0ZG91dDoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIHN0ZG91dCB0byBhbm90aGVyIGZpbGUKKworICAgICAgICAjIEhvdyB0byBzZW5kIGhlbHAoKSB0byBzdGRlcnIKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoc3lzLnN0ZGVycik6CisgICAgICAgICAgICBoZWxwKGRpcikKKworICAgICAgICAjIEhvdyB0byB3cml0ZSBoZWxwKCkgdG8gYSBmaWxlCisgICAgICAgIHdpdGggb3BlbignaGVscC50eHQnLCAndycpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgICAgICBoZWxwKHBvdykKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdfdGFyZ2V0KToKKyAgICAgICAgc2VsZi5fbmV3X3RhcmdldCA9IG5ld190YXJnZXQKKyAgICAgICAgIyBXZSB1c2UgYSBsaXN0IG9mIG9sZCB0YXJnZXRzIHRvIG1ha2UgdGhpcyBDTSByZS1lbnRyYW50CisgICAgICAgIHNlbGYuX29sZF90YXJnZXRzID0gW10KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX29sZF90YXJnZXRzLmFwcGVuZChzeXMuc3Rkb3V0KQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fbmV3X3RhcmdldAorICAgICAgICByZXR1cm4gc2VsZi5fbmV3X3RhcmdldAorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y3R5cGUsIGV4Y2luc3QsIGV4Y3RiKToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX29sZF90YXJnZXRzLnBvcCgpCisKKworY2xhc3Mgc3VwcHJlc3M6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHNwZWNpZmllZCBleGNlcHRpb25zCisKKyAgICBBZnRlciB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGV4ZWN1dGlvbiBwcm9jZWVkcyB3aXRoIHRoZSBuZXh0CisgICAgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgd2l0aCBzdGF0ZW1lbnQuCisKKyAgICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICAgIG9zLnJlbW92ZShzb21lZmlsZSkKKyAgICAgICAgICMgRXhlY3V0aW9uIHN0aWxsIHJlc3VtZXMgaGVyZSBpZiB0aGUgZmlsZSB3YXMgYWxyZWFkeSByZW1vdmVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmV4Y2VwdGlvbnMpOgorICAgICAgICBzZWxmLl9leGNlcHRpb25zID0gZXhjZXB0aW9ucworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y3R5cGUsIGV4Y2luc3QsIGV4Y3RiKToKKyAgICAgICAgIyBVbmxpa2UgaXNpbnN0YW5jZSBhbmQgaXNzdWJjbGFzcywgQ1B5dGhvbiBleGNlcHRpb24gaGFuZGxpbmcKKyAgICAgICAgIyBjdXJyZW50bHkgb25seSBsb29rcyBhdCB0aGUgY29uY3JldGUgdHlwZSBoaWVyYXJjaHkgKGlnbm9yaW5nCisgICAgICAgICMgdGhlIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja2luZyBob29rcykuIFdoaWxlIEd1aWRvIGNvbnNpZGVycworICAgICAgICAjIHRoYXQgYSBidWcgcmF0aGVyIHRoYW4gYSBmZWF0dXJlLCBpdCdzIGEgZmFpcmx5IGhhcmQgb25lIHRvIGZpeAorICAgICAgICAjIGR1ZSB0byB2YXJpb3VzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIHN1cHByZXNzIHByb3ZpZGVzCisgICAgICAgICMgdGhlIHNpbXBsZXIgaXNzdWJjbGFzcyBiYXNlZCBzZW1hbnRpY3MsIHJhdGhlciB0aGFuIHRyeWluZyB0bworICAgICAgICAjIGV4YWN0bHkgcmVwcm9kdWNlIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4KKyAgICAgICAgIworICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIwMjkgZm9yIG1vcmUgZGV0YWlscworICAgICAgICByZXR1cm4gZXhjdHlwZSBpcyBub3QgTm9uZSBhbmQgaXNzdWJjbGFzcyhleGN0eXBlLCBzZWxmLl9leGNlcHRpb25zKQorCiAKICMgSW5zcGlyZWQgYnkgZGlzY3Vzc2lvbnMgb24gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNTg1CiBjbGFzcyBFeGl0U3RhY2sob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi9jb3B5cmVnLnB5IGIvTGliL2NvcHlyZWcucHkKaW5kZXggNjZjMGY4YS4uNjdmNWJiMCAxMDA2NDQKLS0tIGEvTGliL2NvcHlyZWcucHkKKysrIGIvTGliL2NvcHlyZWcucHkKQEAgLTg3LDYgKzg3LDEyIEBACiBkZWYgX19uZXdvYmpfXyhjbHMsICphcmdzKToKICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCAqYXJncykKIAorZGVmIF9fbmV3b2JqX2V4X18oY2xzLCBhcmdzLCBrd2FyZ3MpOgorICAgICIiIlVzZWQgYnkgcGlja2xlIHByb3RvY29sIDQsIGluc3RlYWQgb2YgX19uZXdvYmpfXyB0byBhbGxvdyBjbGFzc2VzIHdpdGgKKyAgICBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIHRvIGJlIHBpY2tsZWQgY29ycmVjdGx5LgorICAgICIiIgorICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKwogZGVmIF9zbG90bmFtZXMoY2xzKToKICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHNsb3QgbmFtZXMgZm9yIGEgZ2l2ZW4gY2xhc3MuCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CmluZGV4IGM5MmUxMzAuLmUzNGM2NDYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQpAQCAtMzQsMTcgKzM0LDE1IEBACiAgICAgIEZVTkNGTEFHX1VTRV9FUlJOTyBhcyBfRlVOQ0ZMQUdfVVNFX0VSUk5PLCBcCiAgICAgIEZVTkNGTEFHX1VTRV9MQVNURVJST1IgYXMgX0ZVTkNGTEFHX1VTRV9MQVNURVJST1IKIAotIiIiCi1XSU5PTEVBUEkgLT4gSFJFU1VMVAotV0lOT0xFQVBJXyh0eXBlKQotCi1TVERNRVRIT0RDQUxMVFlQRQotCi1TVERNRVRIT0QobmFtZSkKLVNURE1FVEhPRF8odHlwZSwgbmFtZSkKLQotU1REQVBJQ0FMTFRZUEUKLSIiIgorIyBXSU5PTEVBUEkgLT4gSFJFU1VMVAorIyBXSU5PTEVBUElfKHR5cGUpCisjCisjIFNURE1FVEhPRENBTExUWVBFCisjCisjIFNURE1FVEhPRChuYW1lKQorIyBTVERNRVRIT0RfKHR5cGUsIG5hbWUpCisjCisjIFNUREFQSUNBTExUWVBFCiAKIGRlZiBjcmVhdGVfc3RyaW5nX2J1ZmZlcihpbml0LCBzaXplPU5vbmUpOgogICAgICIiImNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFCeXRlcykgLT4gY2hhcmFjdGVyIGFycmF5CkBAIC0zOTUsNyArMzkzLDcgQEAKICAgICAgICAgX3R5cGVfID0gImwiCiAgICAgICAgICMgX2NoZWNrX3JldHZhbF8gaXMgY2FsbGVkIHdpdGggdGhlIGZ1bmN0aW9uJ3MgcmVzdWx0IHdoZW4gaXQKICAgICAgICAgIyBpcyB1c2VkIGFzIHJlc3R5cGUuICBJdCBjaGVja3MgZm9yIHRoZSBGQUlMRUQgYml0LCBhbmQKLSAgICAgICAgIyByYWlzZXMgYSBXaW5kb3dzRXJyb3IgaWYgaXQgaXMgc2V0LgorICAgICAgICAjIHJhaXNlcyBhbiBPU0Vycm9yIGlmIGl0IGlzIHNldC4KICAgICAgICAgIwogICAgICAgICAjIFRoZSBfY2hlY2tfcmV0dmFsXyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgaW4gQywgc28gdGhhdCB0aGUKICAgICAgICAgIyBtZXRob2QgZGVmaW5pdGlvbiBpdHNlbGYgaXMgbm90IGluY2x1ZGVkIGluIHRoZSB0cmFjZWJhY2sKQEAgLTQwNyw3ICs0MDUsNyBAQAogICAgIGNsYXNzIE9sZURMTChDRExMKToKICAgICAgICAgIiIiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgZGxsIGV4cG9ydGluZyBmdW5jdGlvbnMgdXNpbmcgdGhlCiAgICAgICAgIFdpbmRvd3Mgc3RkY2FsbCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCByZXR1cm5pbmcgSFJFU1VMVC4KLSAgICAgICAgSFJFU1VMVCBlcnJvciB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmFpc2VkIGFzIFdpbmRvd3NFcnJvcgorICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgT1NFcnJvcgogICAgICAgICBleGNlcHRpb25zLgogICAgICAgICAiIiIKICAgICAgICAgX2Z1bmNfZmxhZ3NfID0gX0ZVTkNGTEFHX1NURENBTEwKQEAgLTQ1Niw3ICs0NTQsNyBAQAogICAgICAgICAgICAgY29kZSA9IEdldExhc3RFcnJvcigpCiAgICAgICAgIGlmIGRlc2NyIGlzIE5vbmU6CiAgICAgICAgICAgICBkZXNjciA9IEZvcm1hdEVycm9yKGNvZGUpLnN0cmlwKCkKLSAgICAgICAgcmV0dXJuIFdpbmRvd3NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKKyAgICAgICAgcmV0dXJuIE9TRXJyb3IoTm9uZSwgZGVzY3IsIE5vbmUsIGNvZGUpCiAKIGlmIHNpemVvZihjX3VpbnQpID09IHNpemVvZihjX3ZvaWRfcCk6CiAgICAgY19zaXplX3QgPSBjX3VpbnQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQppbmRleCBjYzVmZTAyLi43YzcyMjEwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CkBAIC0zNyw3ICszNyw3IEBACiAKIGRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhwYWNrYWdlLCBtYXNrKToKICAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCisgICAgaWYgKHBhY2thZ2UuX19sb2FkZXJfXyBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgIGhhc2F0dHIocGFja2FnZS5fX2xvYWRlcl9fLCAnX2ZpbGVzJykpOgogICAgICAgICBwYXRoID0gcGFja2FnZS5fX25hbWVfXy5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApCiAgICAgICAgIG1hc2sgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbWFzaykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NoZWNrcmV0dmFsLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKaW5kZXggMDFjY2M1Ny4uMTliYjgxMyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQppbmRleCBjYmYyZTA1Li4yNzFlM2Y1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CkBAIC01LDE3ICs1LDE0IEBACiAKICMgWFhYIFRoaXMgdGVzdCBtdXN0IGJlIHJldmlld2VkIGZvciBjb3JyZWN0bmVzcyEhIQogCi0iIiIKLWN0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KLQotVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAotYnV0IGl0IGhhcyB0byBrZWVwIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyBhcyB3ZWxsLiBUaGlzIGlzIG5vdAotcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKLWZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCi0KLVdoYXQgYWJvdXQgcG9pbnRlcnM/Ci0KLSIiIgorIyBjdHlwZXMnIHR5cGVzIGFyZSBjb250YWluZXIgdHlwZXMuCisjCisjIFRoZXkgaGF2ZSBhbiBpbnRlcm5hbCBtZW1vcnkgYmxvY2ssIHdoaWNoIG9ubHkgY29uc2lzdHMgb2Ygc29tZSBieXRlcywKKyMgYnV0IGl0IGhhcyB0byBrZWVwIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyBhcyB3ZWxsLiBUaGlzIGlzIG5vdAorIyByZWFsbHkgbmVlZGVkIGZvciB0cml2aWFsIEMgdHlwZXMgbGlrZSBpbnQgb3IgY2hhciwgYnV0IGl0IGlzIGltcG9ydGFudAorIyBmb3IgYWdncmVnYXRlIHR5cGVzIGxpa2Ugc3RyaW5ncyBvciBwb2ludGVycyBpbiBwYXJ0aWN1bGFyLgorIworIyBXaGF0IGFib3V0IHBvaW50ZXJzPwogCiBjbGFzcyBPYmplY3RzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIGEsIGIpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBlZGE4NDZkLi5mZDI2ODM3IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtMywzNSArMywzMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgQm9iIElwcG9saXRvOgotIiIiCi1Pay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vawotc29tZXRoaW5nIGxpa2U6Ci0KLWltcG9ydCBvcwotZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKLQotZGVmIGZpbmRfbGliKG5hbWUpOgotICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAotICAgICBuYW1lKycuZnJhbWV3b3JrLycrbmFtZV0KLSAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgotICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKGR5bGRfZmluZChkeWxpYikpCi0gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICBwYXNzCi0gICAgIHJhaXNlIFZhbHVlRXJyb3IsICIlcyBub3QgZm91bmQiICUgKG5hbWUsKQotCi1JdCdsbCBoYXZlIG91dHB1dCBsaWtlIHRoaXM6Ci0KLSA+Pj4gZmluZF9saWIoJ3B0aHJlYWQnKQotJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJwotID4+PiBmaW5kX2xpYigneicpCi0nL3Vzci9saWIvbGliei4xLmR5bGliJwotID4+PiBmaW5kX2xpYignSU9LaXQnKQotJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JwotCi0tYm9iCi0KLSIiIgorIworIyBPay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vaworIyBzb21ldGhpbmcgbGlrZToKKyMKKyMgaW1wb3J0IG9zCisjIGZyb20gbWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCisjCisjIGRlZiBmaW5kX2xpYihuYW1lKToKKyMgICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAorIyAgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorIyAgICAgIGZvciBkeWxpYiBpbiBwb3NzaWJsZToKKyMgICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyMgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisjICAgICAgICAgICAgICBwYXNzCisjICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisjCisjIEl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKyMKKyMgID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisjICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicKKyMgID4+PiBmaW5kX2xpYigneicpCisjICcvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisjICA+Pj4gZmluZF9saWIoJ0lPS2l0JykKKyMgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JworIworIyAtYm9iCiAKIGZyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CmluZGV4IGRhMjEzMzYuLjkxYWQzMTQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgIyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGludmFsaWQgYXJndW1lbnRzLCBhbmQgbWFrZSBzdXJlCiAgICAgICAgICAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgogICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLCAzMikKIAogICAgICAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6CiAgICAgICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3V0aWwucHkgYi9MaWIvY3R5cGVzL3V0aWwucHkKaW5kZXggMDU0YzUxMS4uMGNmMjA3NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy91dGlsLnB5CisrKyBiL0xpYi9jdHlwZXMvdXRpbC5weQpAQCAtMTAyLDkgKzEwMiw4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIHJ2ID09IDEwOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2NjIG9yIGNjIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIHRyYWNlKQpAQCAtMTMzLDggKzEzMiwxMCBAQAogICAgICAgICAgICAgY21kID0gJ2lmICEgdHlwZSBvYmpkdW1wID4vZGV2L251bGwgMj4mMTsgdGhlbiBleGl0IDEwOyBmaTsnIFwKICAgICAgICAgICAgICAgICAgICJvYmpkdW1wIC1wIC1qIC5keW5hbWljIDI+L2Rldi9udWxsICIgKyBmCiAgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQotICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCi0gICAgICAgICAgICBydiA9IGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGR1bXAgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQogICAgICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignb2JqZHVtcCBjb21tYW5kIG5vdCBmb3VuZCcpCiAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcc1NPTkFNRVxzKyhbXlxzXSspJywgZHVtcCkKQEAgLTE3NywxMCArMTc4LDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNtZCA9ICdlbnYgTENfQUxMPUMgL3Vzci9iaW4vY3JsZSAyPi9kZXYvbnVsbCcKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3MucG9wZW4oY21kKS5yZWFkbGluZXMoKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEZWZhdWx0IExpYnJhcnkgUGF0aCAoRUxGKTonKToKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKGNtZCkpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KIAogICAgICAgICAgICAgaWYgbm90IHBhdGhzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGF0ZXRpbWUucHkgYi9MaWIvZGF0ZXRpbWUucHkKaW5kZXggZDFmMzUzYi4uMTc4OTcxNCAxMDA2NDQKLS0tIGEvTGliL2RhdGV0aW1lLnB5CisrKyBiL0xpYi9kYXRldGltZS5weQpAQCAtMjMsOSArMjMsMTAgQEAKICMgZm9yIGFsbCBjb21wdXRhdGlvbnMuICBTZWUgdGhlIGJvb2sgZm9yIGFsZ29yaXRobXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbgogIyBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWxzIGFuZCBtYW55IG90aGVyIGNhbGVuZGFyIHN5c3RlbXMuCiAKLV9EQVlTX0lOX01PTlRIID0gW05vbmUsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCisjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgorX0RBWVNfSU5fTU9OVEggPSBbLTEsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCiAKLV9EQVlTX0JFRk9SRV9NT05USCA9IFtOb25lXQorX0RBWVNfQkVGT1JFX01PTlRIID0gWy0xXSAjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgogZGJtID0gMAogZm9yIGRpbSBpbiBfREFZU19JTl9NT05USFsxOl06CiAgICAgX0RBWVNfQkVGT1JFX01PTlRILmFwcGVuZChkYm0pCkBAIC0xOTE3LDIwMyArMTkxOCwyMDMgQEAKIHRpbWV6b25lLm1pbiA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21pbm9mZnNldCkKIHRpbWV6b25lLm1heCA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21heG9mZnNldCkKIF9FUE9DSCA9IGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpCi0iIiIKLVNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKLSAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KLSAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAogCi1Ob3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjIFNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKKyMgICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgorIyAgICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAorIworIyBOb3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjCisjIDEuIHgubyA9IHgucyArIHguZAorIyAgICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCisjCisjIDIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCisjICAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKKyMgICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KKyMKKyMgMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCisjICAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KKyMKKyMgNC4gKHgraykucyA9IHgucworIyAgICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgorIworIyA1LiAoeCtrKS5uID0geC5uICsgaworIyAgICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KKyMKKyMgTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCisjIChtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgorIyBOb25lIHdoZW4gY2FsbGVkKS4KKyMKKyMgVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgorIyB4IGlzIGFscmVhZHkgaW4gVVRDLgorIworIyBCeSAjMywgd2Ugd2FudAorIworIyAgICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KKyMKKyMgVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KKyMgeC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQorIyBiZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6CisjCisjICAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQorIworIyBCeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcworIworIyAgICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KKyMKKyMgQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgorIyBTdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKKyMKKyMgICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZworIyAgICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKKyMgICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCisjICAgIGsgPSB5LnMgLSAoeStrKS5kCisjCisjIE9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKKyMgYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKKyMgdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKKyMgbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0CisjIGJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgorIworIyBJbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcworIworIyAgICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KKyMKKyMgSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKKyMgbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCisjCisjIEF0IHRoaXMgcG9pbnQsIGlmCisjCisjICAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQorIworIyB3ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKKyMgYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCisjIHRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCisjIHNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bworIyBiZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAorIyBvbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKKyMgdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KKyMKKyMgSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCisjIGJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCisjIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0CisjCisjICAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQorIworIyBOb3cKKyMgICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KKyMgICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQorIyAgICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgorIyAgICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCisjICAgICB4Lm4gKyB6LnMKKyMKKyMgUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCisjCisjICAgICBkaWZmID0KKyMgICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCisjICAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKKyMgICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKKyMgICAgIHouZAorIworIyBTbyBkaWZmID0gei5kLgorIworIyBJZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKKyMgc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAorIyBpZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCisjCisjIElmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KKyMgYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQorIyBsb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCisjCisjIExldAorIworIyAgICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KKyMKKyMgYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgorIworIyAgICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KKyMKKyMgSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCisjIGFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCisjIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgorIyB0aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcworIyBhbHJlYWR5KToKKyMKKyMgICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCisjICAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQorIyAgICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9CisjICAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCisjICAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCisjICAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCisjICAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KKyMgICAgICAgICAgICAgeicuZCAtIHouZAorIworIyBTbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKKyMgd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKKyMgcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KKyMKKyMgSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKKyMgYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKKyMgd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCisjIGEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgorIworIyBUaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0CisjIHRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKKyMgdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZworIyB0aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCisjIFVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKKyMgdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCisjIGNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KKyMgc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKKyMgVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKKyMgaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KKyMKKyMgV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKKyMgc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgorIyB6JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCisjIChjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgorIworIyBCZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAorIyB3ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKKyMgYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgorIyByZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKKyMgYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZworIyB0d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCisjIHonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KKyMKKyMgTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKKyMgY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCisjIGRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCisjIGNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KKyMgdHouCisjCisjIFdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKKyMgdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgorIworIyBTbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KKyMgcG9zc2liaWxpdGllczoKKyMKKyMgMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgorIyAgICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKKyMgICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgorIworIyAyKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKKyMgICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0CisjICAgIGVub3VnaCB0byBzYXkuCisjCisjIEluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCisjICJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKKyMgZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCisjIGlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKKyMgc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQorIyBwZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCisjIHByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KIAotMS4geC5vID0geC5zICsgeC5kCi0gICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCi0KLTIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCi0gICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0Ci0gICBzYW5lIHR6aW5mbyBjbGFzc2VzLgotCi0zLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KLSAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KLQotNC4gKHgraykucyA9IHgucwotICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KLQotNS4gKHgraykubiA9IHgubiArIGsKLSAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgotCi1Ob3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKLShtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgotTm9uZSB3aGVuIGNhbGxlZCkuCi0KLVRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KLXggaXMgYWxyZWFkeSBpbiBVVEMuCi0KLUJ5ICMzLCB3ZSB3YW50Ci0KLSAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQotCi1UaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbwoteC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQotYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgotCi0gICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KLQotQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKLQotICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCi0KLUJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KLVN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAotCi0gICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCi0gICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKLSAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbwotICAgayA9IHkucyAtICh5K2spLmQKLQotT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQotYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKLXZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCi1sZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKLWJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgotCi1JbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcwotCi0gICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KLQotSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKLW1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgotCi1BdCB0aGlzIHBvaW50LCBpZgotCi0gICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KLQotd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCi1hdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKLXRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCi1zZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KLWJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCi1vbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKLXRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCi0KLUluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAotYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKLWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0Ci0KLSAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQotCi1Ob3cKLSAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCi0gICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1Ci0gICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgotICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKLSAgICB4Lm4gKyB6LnMKLQotUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCi0KLSAgICBkaWZmID0KLSAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZwotICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZwotICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKLSAgICB6LmQKLQotU28gZGlmZiA9IHouZC4KLQotSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCi1zcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCi1pZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCi0KLUlmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KLWFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKLWxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KLQotTGV0Ci0KLSAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQotCi1hbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCi0KLSAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQotCi1JZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKLWFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCi1jb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKLXRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCi1hbHJlYWR5KToKLQotICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCi0gICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KLSAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KLSAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCi0gICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgotICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKLSAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KLSAgICAgICAgICAgIHonLmQgLSB6LmQKLQotU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCi13ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAotcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KLQotSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKLWEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCi13b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKLWEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgotCi1UaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0Ci10aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCi10emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCi10aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCi1VVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0Ci10aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKLWNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KLXN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCi1VVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cwotaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KLQotV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKLXNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KLXonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KLShjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgotCi1CZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAotd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCi1hbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCi1yZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKLWJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKLXR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKLXonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KLQotTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKLWNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQotZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKLWNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KLXR6LgotCi1XaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCi10aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCi0KLVNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bwotcG9zc2liaWxpdGllczoKLQotMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgotICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCi0gICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCi0KLTIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgotICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0Ci0gICBlbm91Z2ggdG8gc2F5LgotCi1JbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQotImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAotZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCi1pZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCi1zbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCi1wZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCi1wcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCi0iIiIKIHRyeToKICAgICBmcm9tIF9kYXRldGltZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL2RibS9fX2luaXRfXy5weSBiL0xpYi9kYm0vX19pbml0X18ucHkKaW5kZXggYTc4M2ZkZS4uNWY0NjY0YSAxMDA2NDQKLS0tIGEvTGliL2RibS9fX2luaXRfXy5weQorKysgYi9MaWIvZGJtL19faW5pdF9fLnB5CkBAIC00Miw3ICs0Miw3IEBACiBfZGVmYXVsdG1vZCA9IE5vbmUKIF9tb2R1bGVzID0ge30KIAotZXJyb3IgPSAoZXJyb3IsIElPRXJyb3IpCitlcnJvciA9IChlcnJvciwgT1NFcnJvcikKIAogdHJ5OgogICAgIGZyb20gZGJtIGltcG9ydCBuZGJtCkBAIC0xMTEsMTIgKzExMSwxMCBAQAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLnBhZyIsICJyYiIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAjIGRibSBsaW5rZWQgd2l0aCBnZGJtIG9uIE9TLzIgZG9lc24ndCBoYXZlIC5kaXIgZmlsZQotICAgICAgICBpZiBub3QgKG5kYm0ubGlicmFyeSA9PSAiR05VIGdkYm0iIGFuZCBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCIpOgotICAgICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQogICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIHNvbWUgZGJtIGVtdWxhdGlvbnMgYmFzZWQgb24gQmVya2VsZXkgREIgZ2VuZXJhdGUgYSAuZGIgZmlsZQogICAgICAgICAjIHNvbWUgZG8gbm90LCBidXQgdGhleSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSBic2QgY2hlY2tzCiAgICAgICAgIHRyeToKQEAgLTEyOSw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBuZGJtLm9wZW4oZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyBDaGVjayBmb3IgZHVtYmRibSBuZXh0IC0tIHRoaXMgaGFzIGEgLmRpciBhbmQgYSAuZGF0IGZpbGUKQEAgLTE0NiwxMyArMTQ0LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0uZHVtYiIKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKIAogICAgICMgU2VlIGlmIHRoZSBmaWxlIGV4aXN0cywgcmV0dXJuIE5vbmUgaWYgbm90CiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICMgUmVhZCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgLS0gdGhlIG1hZ2ljIG51bWJlcgpkaWZmIC0tZ2l0IGEvTGliL2RibS9kdW1iLnB5IGIvTGliL2RibS9kdW1iLnB5CmluZGV4IGNmYjkxMjMuLmJhNmEyMGQgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vZHVtYi5weQorKysgYi9MaWIvZGJtL2R1bWIucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogX0JMT0NLU0laRSA9IDUxMgogCi1lcnJvciA9IElPRXJyb3IKK2Vycm9yID0gT1NFcnJvcgogCiBjbGFzcyBfRGF0YWJhc2UoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICMgTW9kIGJ5IEphY2s6IGNyZWF0ZSBkYXRhIGZpbGUgaWYgbmVlZGVkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAncicsIGVuY29kaW5nPSJMYXRpbi0xIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQogICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHNlbGYuX2luZGV4ID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgpAQCAtMTAwLDEyICsxMDAsMTIgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy51bmxpbmsoc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy5yZW5hbWUoc2VsZi5fZGlyZmlsZSwgc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBmID0gc2VsZi5faW8ub3BlbihzZWxmLl9kaXJmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikKQEAgLTIzNiw2ICsyMzYsMTIgQEAKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9vcywgJ2NobW9kJyk6CiAgICAgICAgICAgICBzZWxmLl9vcy5jaG1vZChmaWxlLCBzZWxmLl9tb2RlKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAKIGRlZiBvcGVuKGZpbGUsIGZsYWc9Tm9uZSwgbW9kZT0wbzY2Nik6CiAgICAgIiIiT3BlbiB0aGUgZGF0YWJhc2UgZmlsZSwgZmlsZW5hbWUsIGFuZCByZXR1cm4gY29ycmVzcG9uZGluZyBvYmplY3QuCmRpZmYgLS1naXQgYS9MaWIvZGVjaW1hbC5weSBiL0xpYi9kZWNpbWFsLnB5CmluZGV4IDlmMzdlNGYuLjdiYzFjOTQgMTAwNjQ0Ci0tLSBhL0xpYi9kZWNpbWFsLnB5CisrKyBiL0xpYi9kZWNpbWFsLnB5CkBAIC03MDQsOCArNzA0LDcgQEAKIAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvIERlY2ltYWwiICUgdmFsdWUpCiAKLSAgICAjIEBjbGFzc21ldGhvZCwgYnV0IEBkZWNvcmF0b3IgaXMgbm90IHZhbGlkIFB5dGhvbiAyLjMgc3ludGF4LCBzbwotICAgICMgZG9uJ3QgdXNlIGl0IChzZWUgbm90ZXMgb24gUHkyLjMgY29tcGF0aWJpbGl0eSBhdCB0b3Agb2YgZmlsZSkKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbV9mbG9hdChjbHMsIGYpOgogICAgICAgICAiIiJDb252ZXJ0cyBhIGZsb2F0IHRvIGEgZGVjaW1hbCBudW1iZXIsIGV4YWN0bHkuCiAKQEAgLTc0NCw3ICs3NDMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGNscyhyZXN1bHQpCi0gICAgZnJvbV9mbG9hdCA9IGNsYXNzbWV0aG9kKGZyb21fZmxvYXQpCiAKICAgICBkZWYgX2lzbmFuKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIG51bWJlciBpcyBub3QgYWN0dWFsbHkgb25lLgpkaWZmIC0tZ2l0IGEvTGliL2RpZmZsaWIucHkgYi9MaWIvZGlmZmxpYi5weQppbmRleCBmZTk0Y2M0Li4xNTljYmU0IDEwMDY0NAotLS0gYS9MaWIvZGlmZmxpYi5weQorKysgYi9MaWIvZGlmZmxpYi5weQpAQCAtMzM2LDIwICszMzYsNiBAQAogICAgICAgICAgICAgZm9yIGVsdCBpbiBwb3B1bGFyOiAjIGRpdHRvOyBhcyBmYXN0IGZvciAxJSBkZWxldGlvbgogICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQogCi0gICAgZGVmIGlzYmp1bmsoc2VsZiwgaXRlbSk6Ci0gICAgICAgICJEZXByZWNhdGVkOyB1c2UgJ2l0ZW0gaW4gU2VxdWVuY2VNYXRjaGVyKCkuYmp1bmsnLiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiJ1NlcXVlbmNlTWF0Y2hlcigpLmlzYmp1bmsoaXRlbSknIGlzIGRlcHJlY2F0ZWQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgInVzZSAnaXRlbSBpbiBTTWluc3RhbmNlLmJqdW5rJyBpbnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLmJqdW5rCi0KLSAgICBkZWYgaXNicG9wdWxhcihzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5icG9wdWxhcicuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNicG9wdWxhcihpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYnBvcHVsYXInIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYnBvcHVsYXIKLQogICAgIGRlZiBmaW5kX2xvbmdlc3RfbWF0Y2goc2VsZiwgYWxvLCBhaGksIGJsbywgYmhpKToKICAgICAgICAgIiIiRmluZCBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGluIGFbYWxvOmFoaV0gYW5kIGJbYmxvOmJoaV0uCiAKQEAgLTkyMiw4ICs5MDgsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIHRhZyAlcicgJSAodGFnLCkpCiAKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX2R1bXAoc2VsZiwgdGFnLCB4LCBsbywgaGkpOgogICAgICAgICAiIiJHZW5lcmF0ZSBjb21wYXJpc29uIHJlc3VsdHMgZm9yIGEgc2FtZS10YWdnZWQgcmFuZ2UuIiIiCkBAIC05NDIsOCArOTI3LDcgQEAKICAgICAgICAgICAgIHNlY29uZCA9IHNlbGYuX2R1bXAoJysnLCBiLCBibG8sIGJoaSkKIAogICAgICAgICBmb3IgZyBpbiBmaXJzdCwgc2Vjb25kOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZmFuY3lfcmVwbGFjZShzZWxmLCBhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgogICAgICAgICByIiIiCkBAIC05OTcsOCArOTgxLDcgQEAKICAgICAgICAgICAgICMgbm8gbm9uLWlkZW50aWNhbCAicHJldHR5IGNsb3NlIiBwYWlyCiAgICAgICAgICAgICBpZiBlcWkgaXMgTm9uZToKICAgICAgICAgICAgICAgICAjIG5vIGlkZW50aWNhbCBwYWlyIGVpdGhlciAtLSB0cmVhdCBpdCBhcyBhIHN0cmFpZ2h0IHJlcGxhY2UKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9wbGFpbl9yZXBsYWNlKGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIyBubyBjbG9zZSBwYWlyLCBidXQgYW4gaWRlbnRpY2FsIHBhaXIgLS0gc3luY2ggdXAgb24gdGhhdAogICAgICAgICAgICAgYmVzdF9pLCBiZXN0X2osIGJlc3RfcmF0aW8gPSBlcWksIGVxaiwgMS4wCkBAIC0xMDEwLDggKzk5Myw3IEBACiAgICAgICAgICMgaWRlbnRpY2FsCiAKICAgICAgICAgIyBwdW1wIG91dCBkaWZmcyBmcm9tIGJlZm9yZSB0aGUgc3luY2ggcG9pbnQKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGFsbywgYmVzdF9pLCBiLCBibG8sIGJlc3Rfaik6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGFsbywgYmVzdF9pLCBiLCBibG8sIGJlc3RfaikKIAogICAgICAgICAjIGRvIGludHJhbGluZSBtYXJraW5nIG9uIHRoZSBzeW5jaCBwYWlyCiAgICAgICAgIGFlbHQsIGJlbHQgPSBhW2Jlc3RfaV0sIGJbYmVzdF9qXQpAQCAtMTAzMywxNSArMTAxNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICBidGFncyArPSAnICcgKiBsYgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3Fmb3JtYXQoYWVsdCwgYmVsdCwgYXRhZ3MsIGJ0YWdzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3Fmb3JtYXQoYWVsdCwgYmVsdCwgYXRhZ3MsIGJ0YWdzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyB0aGUgc3luY2ggcGFpciBpcyBpZGVudGljYWwKICAgICAgICAgICAgIHlpZWxkICcgICcgKyBhZWx0CiAKICAgICAgICAgIyBwdW1wIG91dCBkaWZmcyBmcm9tIGFmdGVyIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSk6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGJlc3RfaSsxLCBhaGksIGIsIGJlc3RfaisxLCBiaGkpCiAKICAgICBkZWYgX2ZhbmN5X2hlbHBlcihzZWxmLCBhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgogICAgICAgICBnID0gW10KQEAgLTEwNTMsOCArMTAzMyw3IEBACiAgICAgICAgIGVsaWYgYmxvIDwgYmhpOgogICAgICAgICAgICAgZyA9IHNlbGYuX2R1bXAoJysnLCBiLCBibG8sIGJoaSkKIAotICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfcWZvcm1hdChzZWxmLCBhbGluZSwgYmxpbmUsIGF0YWdzLCBidGFncyk6CiAgICAgICAgIHIiIiIKZGlmZiAtLWdpdCBhL0xpYi9kaXMucHkgYi9MaWIvZGlzLnB5CmluZGV4IDU0M2ZkYzcuLjgxY2JlN2YgMTAwNjQ0Ci0tLSBhL0xpYi9kaXMucHkKKysrIGIvTGliL2Rpcy5weQpAQCAtMiwxMiArMiwxNSBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCiAKIGZyb20gb3Bjb2RlIGltcG9ydCAqCiBmcm9tIG9wY29kZSBpbXBvcnQgX19hbGxfXyBhcyBfb3Bjb2Rlc19hbGwKIAogX19hbGxfXyA9IFsiY29kZV9pbmZvIiwgImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSJdICsgX29wY29kZXNfYWxsCisgICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSIsCisgICAgICAgICAgICJnZXRfaW5zdHJ1Y3Rpb25zIiwgIkluc3RydWN0aW9uIiwgIkJ5dGVjb2RlIl0gKyBfb3Bjb2Rlc19hbGwKIGRlbCBfb3Bjb2Rlc19hbGwKIAogX2hhdmVfY29kZSA9ICh0eXBlcy5NZXRob2RUeXBlLCB0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLkNvZGVUeXBlLCB0eXBlKQpAQCAtMjUsMTQgKzI4LDE0IEBACiAgICAgICAgIGMgPSBjb21waWxlKHNvdXJjZSwgbmFtZSwgJ2V4ZWMnKQogICAgIHJldHVybiBjCiAKLWRlZiBkaXMoeD1Ob25lKToKK2RlZiBkaXMoeD1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4KIAogICAgIFdpdGggbm8gYXJndW1lbnQsIGRpc2Fzc2VtYmxlIHRoZSBsYXN0IHRyYWNlYmFjay4KIAogICAgICIiIgogICAgIGlmIHggaXMgTm9uZToKLSAgICAgICAgZGlzdGIoKQorICAgICAgICBkaXN0YihmaWxlPWZpbGUpCiAgICAgICAgIHJldHVybgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwpAQCAtNDIsMjMgKzQ1LDIzIEBACiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHguX19kaWN0X18uaXRlbXMoKSkKICAgICAgICAgZm9yIG5hbWUsIHgxIGluIGl0ZW1zOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgX2hhdmVfY29kZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHByaW50KCJEaXNhc3NlbWJseSBvZiAlczoiICUgbmFtZSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGlzKHgxKQorICAgICAgICAgICAgICAgICAgICBkaXMoeDEsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZykKLSAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJTb3JyeToiLCBtc2csIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCiAgICAgZWxpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICMgQ29kZSBvYmplY3QKLSAgICAgICAgZGlzYXNzZW1ibGUoeCkKKyAgICAgICAgZGlzYXNzZW1ibGUoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOiAjIFJhdyBieXRlY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgsIGZpbGU9ZmlsZSkKICAgICBlbGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgIyBTb3VyY2UgY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfc3RyKHgpCisgICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCwgZmlsZT1maWxlKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKIAotZGVmIGRpc3RiKHRiPU5vbmUpOgorZGVmIGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgYSB0cmFjZWJhY2sgKGRlZmF1bHQ6IGxhc3QgdHJhY2ViYWNrKS4iIiIKICAgICBpZiB0YiBpcyBOb25lOgogICAgICAgICB0cnk6CkBAIC02Niw3ICs2OSw3IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigibm8gbGFzdCB0cmFjZWJhY2sgdG8gZGlzYXNzZW1ibGUiKQogICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKLSAgICBkaXNhc3NlbWJsZSh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpKQorICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGksIGZpbGU9ZmlsZSkKIAogIyBUaGUgaW5zcGVjdCBtb2R1bGUgaW50ZXJyb2dhdGVzIHRoaXMgZGljdGlvbmFyeSB0byBidWlsZCBpdHMKICMgbGlzdCBvZiBDT18qIGNvbnN0YW50cy4gSXQgaXMgYWxzbyB1c2VkIGJ5IHByZXR0eV9mbGFncyB0bwpAQCAtOTUsMTkgKzk4LDIyIEBACiAgICAgICAgIG5hbWVzLmFwcGVuZChoZXgoZmxhZ3MpKQogICAgIHJldHVybiAiLCAiLmpvaW4obmFtZXMpCiAKLWRlZiBjb2RlX2luZm8oeCk6Ci0gICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorZGVmIF9nZXRfY29kZV9vYmplY3QoeCk6CisgICAgIiIiSGVscGVyIHRvIGhhbmRsZSBtZXRob2RzLCBmdW5jdGlvbnMsIHN0cmluZ3MgYW5kIHJhdyBjb2RlIG9iamVjdHMiIiIKICAgICBpZiBoYXNhdHRyKHgsICdfX2Z1bmNfXycpOiAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwogICAgIGlmIGhhc2F0dHIoeCwgJ19fY29kZV9fJyk6ICMgRnVuY3Rpb24KICAgICAgICAgeCA9IHguX19jb2RlX18KICAgICBpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIHggPSBfdHJ5X2NvbXBpbGUoeCwgIjxjb2RlX2luZm8+IikKKyAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGRpc2Fzc2VtYmx5PiIpCiAgICAgaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAgIyBDb2RlIG9iamVjdAotICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oeCkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisgICAgICAgIHJldHVybiB4CisgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCisgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisKK2RlZiBjb2RlX2luZm8oeCk6CisgICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyhfZ2V0X2NvZGVfb2JqZWN0KHgpKQogCiBkZWYgX2Zvcm1hdF9jb2RlX2luZm8oY28pOgogICAgIGxpbmVzID0gW10KQEAgLTE0MCwxMDYgKzE0NiwyMDYgQEAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJTRkOiAlcyIgJSBpX24pCiAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAotZGVmIHNob3dfY29kZShjbyk6Ci0gICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gc3Rkb3V0LiIiIgotICAgIHByaW50KGNvZGVfaW5mbyhjbykpCitkZWYgc2hvd19jb2RlKGNvLCAqLCBmaWxlPU5vbmUpOgorICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvICpmaWxlKi4KIAotZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSk6Ci0gICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKLSAgICBjb2RlID0gY28uY29fY29kZQotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBJZiAqZmlsZSogaXMgbm90IHByb3ZpZGVkLCB0aGUgb3V0cHV0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorICAgICIiIgorICAgIHByaW50KGNvZGVfaW5mbyhjbyksIGZpbGU9ZmlsZSkKKworX0luc3RydWN0aW9uID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0luc3RydWN0aW9uIiwKKyAgICAgIm9wbmFtZSBvcGNvZGUgYXJnIGFyZ3ZhbCBhcmdyZXByIG9mZnNldCBzdGFydHNfbGluZSBpc19qdW1wX3RhcmdldCIpCisKK2NsYXNzIEluc3RydWN0aW9uKF9JbnN0cnVjdGlvbik6CisgICAgIiIiRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgICAgIERlZmluZWQgZmllbGRzOgorICAgICAgICAgb3BuYW1lIC0gaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBvcGNvZGUgLSBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbgorICAgICAgICAgYXJnIC0gbnVtZXJpYyBhcmd1bWVudCB0byBvcGVyYXRpb24gKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisgICAgICAgICBhcmd2YWwgLSByZXNvbHZlZCBhcmcgdmFsdWUgKGlmIGtub3duKSwgb3RoZXJ3aXNlIHNhbWUgYXMgYXJnCisgICAgICAgICBhcmdyZXByIC0gaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygb3BlcmF0aW9uIGFyZ3VtZW50CisgICAgICAgICBvZmZzZXQgLSBzdGFydCBpbmRleCBvZiBvcGVyYXRpb24gd2l0aGluIGJ5dGVjb2RlIHNlcXVlbmNlCisgICAgICAgICBzdGFydHNfbGluZSAtIGxpbmUgc3RhcnRlZCBieSB0aGlzIG9wY29kZSAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGlzX2p1bXBfdGFyZ2V0IC0gVHJ1ZSBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBGYWxzZQorICAgICIiIgorCisgICAgZGVmIF9kaXNhc3NlbWJsZShzZWxmLCBsaW5lbm9fd2lkdGg9MywgbWFya19hc19jdXJyZW50PUZhbHNlKToKKyAgICAgICAgIiIiRm9ybWF0IGluc3RydWN0aW9uIGRldGFpbHMgZm9yIGluY2x1c2lvbiBpbiBkaXNhc3NlbWJseSBvdXRwdXQKKworICAgICAgICAqbGluZW5vX3dpZHRoKiBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgbGluZSBudW1iZXIgZmllbGQgKDAgb21pdHMgaXQpCisgICAgICAgICptYXJrX2FzX2N1cnJlbnQqIGluc2VydHMgYSAnLS0+JyBtYXJrZXIgYXJyb3cgYXMgcGFydCBvZiB0aGUgbGluZQorICAgICAgICAiIiIKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgIyBDb2x1bW46IFNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIGlmIGxpbmVub193aWR0aDoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZW5vX2ZtdCA9ICIlJSVkZCIgJSBsaW5lbm9fd2lkdGgKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKGxpbmVub19mbXQgJSBzZWxmLnN0YXJ0c19saW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgJyAqIGxpbmVub193aWR0aCkKKyAgICAgICAgIyBDb2x1bW46IEN1cnJlbnQgaW5zdHJ1Y3Rpb24gaW5kaWNhdG9yCisgICAgICAgIGlmIG1hcmtfYXNfY3VycmVudDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJy0tPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICAnKQorICAgICAgICAjIENvbHVtbjogSnVtcCB0YXJnZXQgbWFya2VyCisgICAgICAgIGlmIHNlbGYuaXNfanVtcF90YXJnZXQ6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCc+PicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICcpCisgICAgICAgICMgQ29sdW1uOiBJbnN0cnVjdGlvbiBvZmZzZXQgZnJvbSBzdGFydCBvZiBjb2RlIHNlcXVlbmNlCisgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLm9mZnNldCkucmp1c3QoNCkpCisgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgbmFtZQorICAgICAgICBmaWVsZHMuYXBwZW5kKHNlbGYub3BuYW1lLmxqdXN0KDIwKSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBhcmd1bWVudAorICAgICAgICBpZiBzZWxmLmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLmFyZykucmp1c3QoNSkpCisgICAgICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50IGRldGFpbHMKKyAgICAgICAgICAgIGlmIHNlbGYuYXJncmVwcjoKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcoJyArIHNlbGYuYXJncmVwciArICcpJykKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKGZpZWxkcykucnN0cmlwKCkKKworCitkZWYgZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpOgorICAgICIiIkl0ZXJhdG9yIGZvciB0aGUgb3Bjb2RlcyBpbiBtZXRob2RzLCBmdW5jdGlvbnMgb3IgY29kZQorCisgICAgR2VuZXJhdGVzIGEgc2VyaWVzIG9mIEluc3RydWN0aW9uIG5hbWVkIHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YKKyAgICBlYWNoIG9wZXJhdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgICBPdGhlcndpc2UsIHRoZSBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tCisgICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKyAgICAiIiIKKyAgICBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwogICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBpZiBmaXJzdF9saW5lIGlzIG5vdCBOb25lOgorICAgICAgICBsaW5lX29mZnNldCA9IGZpcnN0X2xpbmUgLSBjby5jb19maXJzdGxpbmVubworICAgIGVsc2U6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIHJldHVybiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjby5jb19jb2RlLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgY2VsbF9uYW1lcywgbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQpCisKK2RlZiBfZ2V0X2NvbnN0X2luZm8oY29uc3RfaW5kZXgsIGNvbnN0X2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBjb25zdCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgY29uc3RhbnQgYW5kIGl0cyByZXByIGlmIHRoZSBjb25zdGFudAorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgY29uc3RhbnQgaW5kZXggYW5kIGl0cyByZXByKCkuCisgICAgIiIiCisgICAgYXJndmFsID0gY29uc3RfaW5kZXgKKyAgICBpZiBjb25zdF9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBjb25zdF9saXN0W2NvbnN0X2luZGV4XQorICAgIHJldHVybiBhcmd2YWwsIHJlcHIoYXJndmFsKQorCitkZWYgX2dldF9uYW1lX2luZm8obmFtZV9pbmRleCwgbmFtZV9saXN0KToKKyAgICAiIiJIZWxwZXIgdG8gZ2V0IG9wdGlvbmFsIGRldGFpbHMgYWJvdXQgbmFtZWQgcmVmZXJlbmNlcworCisgICAgICAgUmV0dXJucyB0aGUgZGVyZWZlcmVuY2VkIG5hbWUgYXMgYm90aCB2YWx1ZSBhbmQgcmVwciBpZiB0aGUgbmFtZQorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBuYW1lX2luZGV4CisgICAgaWYgbmFtZV9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBuYW1lX2xpc3RbbmFtZV9pbmRleF0KKyAgICAgICAgYXJncmVwciA9IGFyZ3ZhbAorICAgIGVsc2U6CisgICAgICAgIGFyZ3JlcHIgPSByZXByKGFyZ3ZhbCkKKyAgICByZXR1cm4gYXJndmFsLCBhcmdyZXByCisKKworZGVmIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvZGUsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsIGNvbnN0YW50cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gYSBieXRlY29kZSBzdHJpbmcuCisKKyAgICBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiBJbnN0cnVjdGlvbiBuYW1lZHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YgZWFjaAorICAgIG9wY29kZS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUncyBydW50aW1lIGVudmlyb25tZW50CisgICAgKGUuZy4gdmFyaWFibGUgbmFtZXMsIGNvbnN0YW50cykgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBvcHRpb25hbAorICAgIGFyZ3VtZW50cy4KKworICAgICIiIgorICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBleHRlbmRlZF9hcmcgPSAwCisgICAgc3RhcnRzX2xpbmUgPSBOb25lCisgICAgZnJlZSA9IE5vbmUKKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKLSAgICBleHRlbmRlZF9hcmcgPSAwCi0gICAgZnJlZSA9IE5vbmUKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgaW4gbGluZXN0YXJ0czoKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCIlM2QiICUgbGluZXN0YXJ0c1tpXSwgZW5kPScgJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCcgICAnLCBlbmQ9JyAnKQotCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMjApLCBlbmQ9JyAnKQorICAgICAgICBvZmZzZXQgPSBpCisgICAgICAgIGlmIGxpbmVzdGFydHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFydHNfbGluZSA9IGxpbmVzdGFydHMuZ2V0KGksIE5vbmUpCisgICAgICAgICAgICBpZiBzdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydHNfbGluZSArPSBsaW5lX29mZnNldAorICAgICAgICBpc19qdW1wX3RhcmdldCA9IGkgaW4gbGFiZWxzCiAgICAgICAgIGkgPSBpKzEKKyAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBhcmd2YWwgPSBOb25lCisgICAgICAgIGFyZ3JlcHIgPSAnJwogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZworICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IDAKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGlmIG9wID09IEVYVEVOREVEX0FSRzoKLSAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBvcGFyZyo2NTUzNgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCisgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnKjY1NTM2CisgICAgICAgICAgICAjICBTZXQgYXJndmFsIHRvIHRoZSBkZXJlZmVyZW5jZWQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHdoZW4KKyAgICAgICAgICAgICMgIGF2YWlsYWJlLCBhbmQgYXJncmVwciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3ZhbC4KKyAgICAgICAgICAgICMgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzIG5lZWRzIHRoZSBzdHJpbmcgcmVwciBvZiB0aGUKKyAgICAgICAgICAgICMgICAgcmF3IG5hbWUgaW5kZXggZm9yIExPQURfR0xPQkFMLCBMT0FEX0NPTlNULCBldGMuCisgICAgICAgICAgICBhcmd2YWwgPSBhcmcKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY28uY29fY29uc3RzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9jb25zdF9pbmZvKGFyZywgY29uc3RhbnRzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIG5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBpICsgYXJnCisgICAgICAgICAgICAgICAgYXJncmVwciA9ICJ0byAiICsgcmVwcihhcmd2YWwpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2xvY2FsOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX3Zhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIHZhcm5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsID0gY21wX29wW2FyZ10KKyAgICAgICAgICAgICAgICBhcmdyZXByID0gYXJndmFsCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2ZyZWU6Ci0gICAgICAgICAgICAgICAgaWYgZnJlZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcmVlID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGZyZWVbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgY2VsbHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gIiVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciIgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pCisgICAgICAgIHlpZWxkIEluc3RydWN0aW9uKG9wbmFtZVtvcF0sIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ3ZhbCwgYXJncmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdGFydHNfbGluZSwgaXNfanVtcF90YXJnZXQpCisKK2RlZiBkaXNhc3NlbWJsZShjbywgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSk6CisgICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycworICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoY28uY29fY29kZSwgbGFzdGksIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLCBmaWxlPWZpbGUpCiAKIGRlZiBfZGlzYXNzZW1ibGVfYnl0ZXMoY29kZSwgbGFzdGk9LTEsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lKToKLSAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCi0gICAgbiA9IGxlbihjb2RlKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpZiBpID09IGxhc3RpOiBwcmludCgnLS0+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgICcsIGVuZD0nICcpCi0gICAgICAgIGlmIGkgaW4gbGFiZWxzOiBwcmludCgnPj4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAnLCBlbmQ9JyAnKQotICAgICAgICBwcmludChyZXByKGkpLnJqdXN0KDQpLCBlbmQ9JyAnKQotICAgICAgICBwcmludChvcG5hbWVbb3BdLmxqdXN0KDE1KSwgZW5kPScgJykKLSAgICAgICAgaSA9IGkrMQotICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgotICAgICAgICAgICAgaSA9IGkrMgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCi0gICAgICAgICAgICBpZiBvcCBpbiBoYXNjb25zdDoKLSAgICAgICAgICAgICAgICBpZiBjb25zdGFudHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY29uc3RhbnRzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgdmFybmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHZhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKScgJSBvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzY29tcGFyZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjbXBfb3Bbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYXJnczoKLSAgICAgICAgICAgICAgICBwcmludCgnKCVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciknCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lLCBjZWxscz1Ob25lLCBsaW5lc3RhcnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICosIGZpbGU9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIyBPbWl0IHRoZSBsaW5lIG51bWJlciBjb2x1bW4gZW50aXJlbHkgaWYgd2UgaGF2ZSBubyBsaW5lIG51bWJlciBpbmZvCisgICAgc2hvd19saW5lbm8gPSBsaW5lc3RhcnRzIGlzIG5vdCBOb25lCisgICAgIyBUT0RPPzogQWRqdXN0IHdpZHRoIHVwd2FyZHMgaWYgbWF4KGxpbmVzdGFydHMudmFsdWVzKCkpID49IDEwMDA/CisgICAgbGluZW5vX3dpZHRoID0gMyBpZiBzaG93X2xpbmVubyBlbHNlIDAKKyAgICBmb3IgaW5zdHIgaW4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXMsIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIGNlbGxzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1saW5lX29mZnNldCk6CisgICAgICAgIG5ld19zb3VyY2VfbGluZSA9IChzaG93X2xpbmVubyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIub2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgbmV3X3NvdXJjZV9saW5lOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQorICAgICAgICBpc19jdXJyZW50X2luc3RyID0gaW5zdHIub2Zmc2V0ID09IGxhc3RpCisgICAgICAgIHByaW50KGluc3RyLl9kaXNhc3NlbWJsZShsaW5lbm9fd2lkdGgsIGlzX2N1cnJlbnRfaW5zdHIpLCBmaWxlPWZpbGUpCiAKLWRlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSk6CitkZWYgX2Rpc2Fzc2VtYmxlX3N0cihzb3VyY2UsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSB0aGUgc291cmNlIHN0cmluZywgdGhlbiBkaXNhc3NlbWJsZSB0aGUgY29kZSBvYmplY3QuIiIiCi0gICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JykpCisgICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JyksIGZpbGU9ZmlsZSkKIAogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCkBAIC0yNTAsMTkgKzM1NiwyMSBAQAogCiAgICAgIiIiCiAgICAgbGFiZWxzID0gW10KKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCiAgICAgICAgIGkgPSBpKzEKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2CiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBsYWJlbCA9IC0xCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIGxhYmVsID0gaStvcGFyZworICAgICAgICAgICAgICAgIGxhYmVsID0gaSthcmcKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzamFiczoKLSAgICAgICAgICAgICAgICBsYWJlbCA9IG9wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBhcmcKICAgICAgICAgICAgIGlmIGxhYmVsID49IDA6CiAgICAgICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIGxhYmVsczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKQEAgLTI5MCwyNyArMzk4LDc3IEBACiAgICAgaWYgbGluZW5vICE9IGxhc3RsaW5lbm86CiAgICAgICAgIHlpZWxkIChhZGRyLCBsaW5lbm8pCiAKK2NsYXNzIEJ5dGVjb2RlOgorICAgICIiIlRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICAgSW5zdGFudGlhdGUgdGhpcyB3aXRoIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mIGNvZGUsIG9yIGEgY29kZSBvYmplY3QKKyAgICAoYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpKS4KKworICAgIEl0ZXJhdGluZyBvdmVyIHRoaXMgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIEluc3RydWN0aW9uIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgKiwgZmlyc3RfbGluZT1Ob25lLCBjdXJyZW50X29mZnNldD1Ob25lKToKKyAgICAgICAgc2VsZi5jb2Rlb2JqID0gY28gPSBfZ2V0X2NvZGVfb2JqZWN0KHgpCisgICAgICAgIGlmIGZpcnN0X2xpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBzZWxmLl9saW5lX29mZnNldCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGZpcnN0X2xpbmUKKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIHNlbGYuX2NlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgICAgIHNlbGYuX2xpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0ID0geAorICAgICAgICBzZWxmLmN1cnJlbnRfb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgY28gPSBzZWxmLmNvZGVvYmoKKyAgICAgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgc2VsZi5fY2VsbF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSh7IXJ9KSIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdHJhY2ViYWNrKGNscywgdGIpOgorICAgICAgICAiIiIgQ29uc3RydWN0IGEgQnl0ZWNvZGUgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrICIiIgorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBjbHModGIudGJfZnJhbWUuZl9jb2RlLCBjdXJyZW50X29mZnNldD10Yi50Yl9sYXN0aSkKKworICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gZm9ybWF0dGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHNlbGYuY29kZW9iaikKKworICAgIGRlZiBkaXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLiIiIgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfb2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5jdXJyZW50X29mZnNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gLTEKKyAgICAgICAgd2l0aCBpby5TdHJpbmdJTygpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCB2YXJuYW1lcz1jby5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcz1jby5jb19uYW1lcywgY29uc3RhbnRzPWNvLmNvX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscz1zZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzdGFydHM9c2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPW91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aT1vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCiBkZWYgX3Rlc3QoKToKICAgICAiIiJTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIGRpc2Fzc2VtYmxlIGEgZmlsZS4iIiIKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIHN5cy5hcmd2WzI6XToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVzYWdlOiBweXRob24gZGlzLnB5IFstfGZpbGVdXG4iKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgICAgICBpZiBub3QgZm4gb3IgZm4gPT0gIi0iOgotICAgICAgICAgICAgZm4gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSBOb25lCi0gICAgaWYgZm4gaXMgTm9uZToKLSAgICAgICAgZiA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgIHNvdXJjZSA9IGYucmVhZCgpCi0gICAgaWYgZm4gaXMgbm90IE5vbmU6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gIjxzdGRpbj4iCi0gICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBmbiwgImV4ZWMiKQorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSwgbmFyZ3M9Jz8nLCBkZWZhdWx0PSctJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdpdGggYXJncy5pbmZpbGUgYXMgaW5maWxlOgorICAgICAgICBzb3VyY2UgPSBpbmZpbGUucmVhZCgpCisgICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBhcmdzLmluZmlsZS5uYW1lLCAiZXhlYyIpCiAgICAgZGlzKGNvZGUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5IGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQppbmRleCA2NzQ3YWI4Li4zOGE1MDg2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKQEAgLTEzLDUgKzEzLDUgQEAKICMgVXBkYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBQeXRob24gcmVsZWFzZSBwcm9jZXNzLgogIwogIy0tc3RhcnQgY29uc3RhbnRzLS0KLV9fdmVyc2lvbl9fID0gIjMuMy4zIgorX192ZXJzaW9uX18gPSAiMy40LjBiMSIKICMtLWVuZCBjb25zdGFudHMtLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQppbmRleCBmY2RhMDhlLi40NDcwYmIwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQpAQCAtMTgsMTUgKzE4LDU1IEBACiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Cit0cnk6CisgICAgZnJvbSBwd2QgaW1wb3J0IGdldHB3bmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0cHduYW0gPSBOb25lCisKK3RyeToKKyAgICBmcm9tIGdycCBpbXBvcnQgZ2V0Z3JuYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRncm5hbSA9IE5vbmUKKworZGVmIF9nZXRfZ2lkKG5hbWUpOgorICAgICIiIlJldHVybnMgYSBnaWQsIGdpdmVuIGEgZ3JvdXAgbmFtZS4iIiIKKyAgICBpZiBnZXRncm5hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldGdybmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9nZXRfdWlkKG5hbWUpOgorICAgICIiIlJldHVybnMgYW4gdWlkLCBnaXZlbiBhIHVzZXIgbmFtZS4iIiIKKyAgICBpZiBnZXRwd25hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldHB3bmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLAorICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAogICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwgImJ6aXAyIiwgb3IgTm9uZS4KLSAgICBCb3RoICJ0YXIiIGFuZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZCBieSAnY29tcHJlc3MnIG11c3QgYmUgb24KLSAgICB0aGUgZGVmYXVsdCBwcm9ncmFtIHNlYXJjaCBwYXRoLCBzbyB0aGlzIGlzIHByb2JhYmx5IFVuaXgtc3BlY2lmaWMuCisgICAgKGNvbXByZXNzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yKQorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3duZXIgYW5kIGEgZ3JvdXAgZm9yIHRoZQorICAgIGFyY2hpdmUgdGhhdCBpcyBiZWluZyBidWlsdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAKKyAgICB3aWxsIGJlIHVzZWQuCisKICAgICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKICAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiIG9yICIuWiIpLgorCiAgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgogICAgICIiIgogICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJywgJ2NvbXByZXNzJzogJyd9CkBAIC00OCwxMCArODgsMjMgQEAKICAgICBpbXBvcnQgdGFyZmlsZSAgIyBsYXRlIGltcG9ydCBzbyBQeXRob24gYnVpbGQgaXRzZWxmIGRvZXNuJ3QgYnJlYWsKIAogICAgIGxvZy5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIpCisgICAgICAgICAgICB0YXIuYWRkKGJhc2VfZGlyLCBmaWx0ZXI9X3NldF91aWRfZ2lkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtMTQwLDcgKzE5Myw3IEBACiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgorICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4KIAogICAgICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYwpAQCAtMTUzLDYgKzIwNiw5IEBACiAgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCiAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAogICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogICAgICIiIgogICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKQEAgLTE3NCw2ICsyMzAsMTEgQEAKICAgICBmdW5jID0gZm9ybWF0X2luZm9bMF0KICAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CiAgICAgICAgIGt3YXJnc1thcmddID0gdmFsCisKKyAgICBpZiBmb3JtYXQgIT0gJ3ppcCc6CisgICAgICAgIGt3YXJnc1snb3duZXInXSA9IG93bmVyCisgICAgICAgIGt3YXJnc1snZ3JvdXAnXSA9IGdyb3VwCisKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQppbmRleCBjNzk1Yzk1Li45MTFlODRkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgIHJldHVybiBtYWNyb3MsIG9iamVjdHMsIGV4dHJhLCBwcF9vcHRzLCBidWlsZAogCiAgICAgZGVmIF9nZXRfY2NfYXJncyhzZWxmLCBwcF9vcHRzLCBkZWJ1ZywgYmVmb3JlKToKLSAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgZW14Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKKyAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgY3lnd2luY2NvbXBpbGVyCiAgICAgICAgIGNjX2FyZ3MgPSBwcF9vcHRzICsgWyctYyddCiAgICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICAgY2NfYXJnc1s6MF0gPSBbJy1nJ10KQEAgLTkyNiw3ICs5MjYsNiBAQAogICAgICMgb24gYSBjeWd3aW4gYnVpbHQgcHl0aG9uIHdlIGNhbiB1c2UgZ2NjIGxpa2UgYW4gb3JkaW5hcnkgVU5JWGlzaAogICAgICMgY29tcGlsZXIKICAgICAoJ2N5Z3dpbi4qJywgJ3VuaXgnKSwKLSAgICAoJ29zMmVteCcsICdlbXgnKSwKIAogICAgICMgT1MgbmFtZSBtYXBwaW5ncwogICAgICgncG9zaXgnLCAndW5peCcpLApAQCAtOTY4LDggKzk2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmd3MzIgcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgV2luMzIiKSwKICAgICAgICAgICAgICAgICAgICAnYmNwcCc6ICAgICgnYmNwcGNvbXBpbGVyJywgJ0JDUFBDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvcmxhbmQgQysrIENvbXBpbGVyIiksCi0gICAgICAgICAgICAgICAgICAgJ2VteCc6ICAgICAoJ2VteGNjb21waWxlcicsICdFTVhDQ29tcGlsZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTVggcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgT1MvMiIpLAogICAgICAgICAgICAgICAgICB9CiAKIGRlZiBzaG93X2NvbXBpbGVycygpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jbWQucHkgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQppbmRleCAzZWEwODEwLi5jODlkNWVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NtZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQpAQCAtMzY1LDkgKzM2NSwxMSBAQAogICAgICAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KICAgICAgICAgc3Bhd24oY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lKToKKyAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgICAgIHJldHVybiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQogCiAgICAgZGVmIG1ha2VfZmlsZShzZWxmLCBpbmZpbGVzLCBvdXRmaWxlLCBmdW5jLCBhcmdzLAogICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggYzUxODhlYi4uNjgxNGExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtMzcsNiArMzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKICAgICAgICAgICAgICAgICAgICAgKCdza2lwLWJ1aWxkJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJza2lwIHJlYnVpbGRpbmcgZXZlcnl0aGluZyAoZm9yIHRlc3RpbmcvZGVidWdnaW5nKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3NraXAtYnVpbGQnXQpAQCAtNTIsOCArNTgsNyBAQAogICAgICMgVGhpcyB3b24ndCBkbyBpbiByZWFsaXR5OiB3aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggUlBNLWlzaCBMaW51eCwKICAgICAjIERlYmlhbi1pc2ggTGludXgsIFNvbGFyaXMsIEZyZWVCU0QsIC4uLiwgV2luZG93cywgTWFjIE9TLgogICAgIGRlZmF1bHRfZm9ybWF0ID0geydwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnfQorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnfQogCiAgICAgIyBFc3RhYmxpc2ggdGhlIHByZWZlcnJlZCBvcmRlciAoZm9yIHRoZSAtLWhlbHAtZm9ybWF0cyBvcHRpb24pLgogICAgIGZvcm1hdF9jb21tYW5kcyA9IFsncnBtJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3p0YXInLCAndGFyJywKQEAgLTc4LDYgKzgzLDggQEAKICAgICAgICAgc2VsZi5mb3JtYXRzID0gTm9uZQogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBoYXZlIHRvIGZpbmFsaXplICdwbGF0X25hbWUnIGJlZm9yZSAnYmRpc3RfYmFzZScKQEAgLTEyMyw2ICsxMzAsMTEgQEAKICAgICAgICAgICAgIGlmIGNtZF9uYW1lIG5vdCBpbiBzZWxmLm5vX2Zvcm1hdF9vcHRpb246CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5mb3JtYXQgPSBzZWxmLmZvcm1hdHNbaV0KIAorICAgICAgICAgICAgIyBwYXNzaW5nIHRoZSBvd25lciBhbmQgZ3JvdXAgbmFtZXMgZm9yIHRhciBhcmNoaXZpbmcKKyAgICAgICAgICAgIGlmIGNtZF9uYW1lID09ICdiZGlzdF9kdW1iJzoKKyAgICAgICAgICAgICAgICBzdWJfY21kLm93bmVyID0gc2VsZi5vd25lcgorICAgICAgICAgICAgICAgIHN1Yl9jbWQuZ3JvdXAgPSBzZWxmLmdyb3VwCisKICAgICAgICAgICAgICMgSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGFnYWluLCB0ZWxsIGl0IHRvCiAgICAgICAgICAgICAjIGtlZXAgaXRzIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQgc28gc3Vic2VxdWVudCBydW5zIGdvIGZhc3Rlci4KICAgICAgICAgICAgIGlmIGNtZF9uYW1lIGluIGNvbW1hbmRzW2krMTpdOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCAxYWIwOWQxLi40NDA1ZDEyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtMzMsMTMgKzMzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICgncmVsYXRpdmUnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHRoZSBhcmNoaXZlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIgogICAgICAgICAgICAgICAgICAgICAgIihkZWZhdWx0OiBmYWxzZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnc2tpcC1idWlsZCcsICdyZWxhdGl2ZSddCiAKICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsgJ3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJyB9CisgICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KIAogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gTm9uZQpAQCAtNDksNiArNTQsOCBAQAogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSBOb25lCiAgICAgICAgIHNlbGYucmVsYXRpdmUgPSAwCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKQEAgLTg1LDExICs5Miw2IEBACiAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSAiJXMuJXMiICUgKHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSkKIAotICAgICAgICAjIE9TLzIgb2JqZWN0cyB0byBhbnkgIjoiIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoc3VjaCBhcyB3aGVuCi0gICAgICAgICMgYSB0aW1lc3RhbXAgaXMgdXNlZCBpbiBhIHZlcnNpb24pIHNvIGNoYW5nZSB0aGVtIHRvIGh5cGhlbnMuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gYXJjaGl2ZV9iYXNlbmFtZS5yZXBsYWNlKCI6IiwgIi0iKQotCiAgICAgICAgIHBzZXVkb2luc3RhbGxfcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLmRpc3RfZGlyLCBhcmNoaXZlX2Jhc2VuYW1lKQogICAgICAgICBpZiBub3Qgc2VsZi5yZWxhdGl2ZToKICAgICAgICAgICAgIGFyY2hpdmVfcm9vdCA9IHNlbGYuYmRpc3RfZGlyCkBAIC0xMDcsNyArMTA5LDggQEAKIAogICAgICAgICAjIE1ha2UgdGhlIGFyY2hpdmUKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm1ha2VfYXJjaGl2ZShwc2V1ZG9pbnN0YWxsX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgcHl2ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CmluZGV4IGJjNmEyM2YuLjgwNjg5YjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQpAQCAtMjMwLDExICsyMzAsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEMnLCAnVkM2JykpCiAKLSAgICAgICAgIyBPUy8yIChFTVgpIGRvZXNuJ3Qgc3VwcG9ydCBEZWJ1ZyB2cyBSZWxlYXNlIGJ1aWxkcywgYnV0IGhhcyB0aGUKLSAgICAgICAgIyBpbXBvcnQgbGlicmFyaWVzIGluIGl0cyAiQ29uZmlnIiBzdWJkaXJlY3RvcnkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAnQ29uZmlnJykpCi0KICAgICAgICAgIyBmb3IgZXh0ZW5zaW9ucyB1bmRlciBDeWd3aW4gYW5kIEF0aGVPUyBQeXRob24ncyBsaWJyYXJ5IGRpcmVjdG9yeSBtdXN0IGJlCiAgICAgICAgICMgYXBwZW5kZWQgdG8gbGlicmFyeV9kaXJzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2N5Z3dpbicgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJzoKQEAgLTYxOSw5ICs2MTQsNiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgIyBhc3N1bWUgc3dpZyBhdmFpbGFibGUgaW4gdGhlIFBBVEguCi0gICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgICAgICJJIGRvbid0IGtub3cgaG93IHRvIGZpbmQgKG11Y2ggbGVzcyBydW4pIFNXSUcgIgpAQCAtNjcyLDkgKzY2NCw2IEBACiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCiAgICAgICAgIGV4dF9wYXRoID0gZXh0X25hbWUuc3BsaXQoJy4nKQotICAgICAgICAjIE9TLzIgaGFzIGFuIDggY2hhcmFjdGVyIG1vZHVsZSAoZXh0ZW5zaW9uKSBsaW1pdCA6LSgKLSAgICAgICAgaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgIGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXSA9IGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXVs6OF0KICAgICAgICAgIyBleHRlbnNpb25zIGluIGRlYnVnX21vZGUgYXJlIG5hbWVkICdtb2R1bGVfZC5weWQnIHVuZGVyIHdpbmRvd3MKICAgICAgICAgZXh0X3N1ZmZpeCA9IGdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBzZWxmLmRlYnVnOgpAQCAtNjk1LDcgKzY4NCw3IEBACiAgICAgZGVmIGdldF9saWJyYXJpZXMoc2VsZiwgZXh0KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3Qgd2hlbiBidWlsZGluZyBhCiAgICAgICAgIHNoYXJlZCBleHRlbnNpb24uICBPbiBtb3N0IHBsYXRmb3JtcywgdGhpcyBpcyBqdXN0ICdleHQubGlicmFyaWVzJzsKLSAgICAgICAgb24gV2luZG93cyBhbmQgT1MvMiwgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCisgICAgICAgIG9uIFdpbmRvd3MsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgogICAgICAgICAiIiIKICAgICAgICAgIyBUaGUgcHl0aG9uIGxpYnJhcnkgaXMgYWx3YXlzIG5lZWRlZCBvbiBXaW5kb3dzLiAgRm9yIE1TVkMsIHRoaXMKICAgICAgICAgIyBpcyByZWR1bmRhbnQsIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIG1lbnRpb25lZCBpbiBhIHByYWdtYSBpbgpAQCAtNzE1LDE5ICs3MDQsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKLSAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAjIEVNWC9HQ0MgcmVxdWlyZXMgdGhlIHB5dGhvbiBsaWJyYXJ5IGV4cGxpY2l0bHksIGFuZCBJCi0gICAgICAgICAgICAjIGJlbGlldmUgVkFDUFAgZG9lcyBhcyB3ZWxsICh0aG91Z2ggbm90IGNvbmZpcm1lZCkgLSBBSU0gQXByMDEKLSAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkJWQiCi0gICAgICAgICAgICAjIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBtYWluIERMTCBhcmVuJ3Qgc3VwcG9ydGVkLCBhdCBsZWFzdAotICAgICAgICAgICAgIyBub3QgYXQgdGhpcyB0aW1lIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICAjaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICMgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICdfZCcKLSAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCi0gICAgICAgICAgICAgICAgICAgKHN5cy5oZXh2ZXJzaW9uID4+IDI0LCAoc3lzLmhleHZlcnNpb24gPj4gMTYpICYgMHhmZikpCi0gICAgICAgICAgICAjIGRvbid0IGV4dGVuZCBleHQubGlicmFyaWVzLCBpdCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIKLSAgICAgICAgICAgICMgZXh0ZW5zaW9ucywgaXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGxpc3QKLSAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjZdID09ICJjeWd3aW4iOgogICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQuJWQiCiAgICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CmluZGV4IGQ0OGViNjkuLjkxMDBiOTYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKQEAgLTMsNyArMyw3IEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2J1aWxkX3B5JyBjb21tYW5kLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogZnJvbSBnbG9iIGltcG9ydCBnbG9iCiAKQEAgLTMxMywxMSArMzEzLDExIEBACiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIGluY2x1ZGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIG91dHB1dHMgKz0gWwogICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CmluZGV4IDRiNWIyMmUuLjkwYTgzODAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAjIHNjcmlwdC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gb3BlbihzY3JpcHQsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZiA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKaW5kZXggM2M2NzVkMS4uNDU2NTExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKQEAgLTU4LDEzICs1OCw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKICAgICAgICAgfSwKICAgICAnbnQnOiBXSU5ET1dTX1NDSEVNRSwKLSAgICAnb3MyJzogewotICAgICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvSW5jbHVkZS8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLSAgICAgICAgfSwKICAgICB9CiAKICMgdXNlciBzaXRlIHNjaGVtZXMKQEAgLTg2LDE0ICs3OSw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCiAgICAgICAgIH0KIAotICAgIElOU1RBTExfU0NIRU1FU1snb3MyX2hvbWUnXSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9Ci0KICMgVGhlIGtleXMgdG8gYW4gaW5zdGFsbGF0aW9uIHNjaGVtZTsgaWYgYW55IG5ldyB0eXBlcyBvZiBmaWxlcyBhcmUgdG8gYmUKICMgaW5zdGFsbGVkLCBiZSBzdXJlIHRvIGFkZCBhbiBlbnRyeSB0byBldmVyeSBpbnN0YWxsYXRpb24gc2NoZW1lIGFib3ZlLAogIyBhbmQgdG8gU0NIRU1FX0tFWVMgaGVyZS4KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCAxNWMwOGYxLi4yMTU4MTNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC00LDcgKzQsNyBAQAogKGluc3RhbGwgYWxsIFB5dGhvbiBtb2R1bGVzKS4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZApAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAgICAgICAgICAgIGlmIGV4dCAhPSBQWVRIT05fU09VUkNFX0VYVEVOU0lPTjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX2ZpbGVzCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKaW5kZXggMTE2ZjY3ZS4uN2VhM2Q1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQpAQCAtNzQsNiArNzQsMTAgQEAKICAgICAgICAgKCdtZXRhZGF0YS1jaGVjaycsIE5vbmUsCiAgICAgICAgICAiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAiCiAgICAgICAgICAiYXJlIHN1cHBsaWVkLiBXYXJuIGlmIGFueSBtaXNzaW5nLiBbZGVmYXVsdF0iKSwKKyAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3VzZS1kZWZhdWx0cycsICdwcnVuZScsCkBAIC0xMTMsNiArMTE3LDggQEAKIAogICAgICAgICBzZWxmLmFyY2hpdmVfZmlsZXMgPSBOb25lCiAgICAgICAgIHNlbGYubWV0YWRhdGFfY2hlY2sgPSAxCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYW5pZmVzdCBpcyBOb25lOgpAQCAtNDQ0LDcgKzQ1MCw4IEBACiAgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKHNlbGYuZm9ybWF0cy5wb3Aoc2VsZi5mb3JtYXRzLmluZGV4KCd0YXInKSkpCiAKICAgICAgICAgZm9yIGZtdCBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKCgnc2Rpc3QnLCAnJywgZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IGQyYmM4MmMuLjI4NzE1ODMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSB1cmxvcGVuKHJlcXVlc3QpCiAgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuZ2V0Y29kZSgpCiAgICAgICAgICAgICByZWFzb24gPSByZXN1bHQubXNnCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2Uoc3RyKGUpLCBsb2cuRVJST1IpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBlOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQppbmRleCAxZmQ1MzM0Li43NDM5YTgzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQpAQCAtMjEsNyArMjEsNyBAQAogY2xhc3MgUHlQSVJDQ29tbWFuZChDb21tYW5kKToKICAgICAiIiJCYXNlIGNvbW1hbmQgdGhhdCBrbm93cyBob3cgdG8gaGFuZGxlIHRoZSAucHlwaXJjIGZpbGUKICAgICAiIiIKLSAgICBERUZBVUxUX1JFUE9TSVRPUlkgPSAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJworICAgIERFRkFVTFRfUkVQT1NJVE9SWSA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJwogICAgIERFRkFVTFRfUkVBTE0gPSAncHlwaScKICAgICByZXBvc2l0b3J5ID0gTm9uZQogICAgIHJlYWxtID0gTm9uZQpAQCAtODMsNiArODMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBjb25maWcuZ2V0KHNlcnZlciwga2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBkZWZhdWx0CisKKyAgICAgICAgICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBwZW9wbGUgaGF2aW5nICJyZXBvc2l0b3J5IiBmb3IgdGhlICJweXBpIgorICAgICAgICAgICAgICAgICAgICAjIHNlY3Rpb24gb2YgdGhlaXIgY29uZmlnIHNldCB0byB0aGUgSFRUUCAocmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgIyBIVFRQUykgVVJMCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXIgPT0gJ3B5cGknIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbiAoc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlksICdweXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID0gc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CisKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbJ3NlcnZlciddID09IHJlcG9zaXRvcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3JlcG9zaXRvcnknXSA9PSByZXBvc2l0b3J5KToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKaW5kZXggMjYwMzMyYS4uYzgxMWQ1YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQpAQCAtMTI4LDggKzEyOCw5IEBACiAgICAgaWYgX3NldHVwX3N0b3BfYWZ0ZXIgPT0gImNvbmZpZyI6CiAgICAgICAgIHJldHVybiBkaXN0CiAKLSAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmU7IGFueSBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncwotICAgICMgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KKyAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYW5kIG92ZXJyaWRlIGNvbmZpZyBmaWxlczsgYW55CisgICAgIyBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8KKyAgICAjIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KICAgICB0cnk6CiAgICAgICAgIG9rID0gZGlzdC5wYXJzZV9jb21tYW5kX2xpbmUoKQogICAgIGV4Y2VwdCBEaXN0dXRpbHNBcmdFcnJvciBhcyBtc2c6CkBAIC0xNDgsNyArMTQ5LDcgQEAKICAgICAgICAgICAgIGRpc3QucnVuX2NvbW1hbmRzKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiaW50ZXJydXB0ZWQiKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGVycm9yID0gZ3Jva19lbnZpcm9ubWVudF9lcnJvcihleGMpCiAKICAgICAgICAgICAgIGlmIERFQlVHOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQppbmRleCBlMDA3NGExLi5kMjhiMWIzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggMjgyNmZmOC4uMmIzNWFhMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgImNhbm5vdCBjb3B5IHRyZWUgJyVzJzogbm90IGEgZGlyZWN0b3J5IiAlIHNyYykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICBpZiBkcnlfcnVuOgogICAgICAgICAgICAgbmFtZXMgPSBbXQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGNtZFsxXSkKICAgICAgICAgICAgIGlmIGFic3BhdGggaW4gX3BhdGhfY3JlYXRlZDoKICAgICAgICAgICAgICAgICBkZWwgX3BhdGhfY3JlYXRlZFthYnNwYXRoXQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgbG9nLndhcm4oZ3Jva19lbnZpcm9ubWVudF9lcnJvcigKICAgICAgICAgICAgICAgICAgICAgZXhjLCAiZXJyb3IgcmVtb3ZpbmcgJXM6ICIgJSBkaXJlY3RvcnkpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKaW5kZXggMTFhMjEwMi4uN2ViMDRiYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQpAQCAtNTIsNyArNTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICgncXVpZXQnLCAncScsICJydW4gcXVpZXRseSAodHVybnMgdmVyYm9zaXR5IG9mZikiKSwKICAgICAgICAgICAgICAgICAgICAgICAoJ2RyeS1ydW4nLCAnbicsICJkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyIpLAogICAgICAgICAgICAgICAgICAgICAgICgnaGVscCcsICdoJywgInNob3cgZGV0YWlsZWQgaGVscCBtZXNzYWdlIiksCi0gICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgKCduby11c2VyLWNmZycsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUgcHlkaXN0dXRpbHMuY2ZnIGluIHlvdXIgaG9tZSBkaXJlY3RvcnknKSwKKyAgICBdCiAKICAgICAjICdjb21tb25fdXNhZ2UnIGlzIGEgc2hvcnQgKDItMyBsaW5lKSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29tbW9uCiAgICAgIyB1c2FnZSBvZiB0aGUgc2V0dXAgc2NyaXB0LgpAQCAtMjU5LDYgKzI2MSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cgKyAiXG4iKQogCisgICAgICAgICMgbm8tdXNlci1jZmcgaXMgaGFuZGxlZCBiZWZvcmUgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgIyBiZWNhdXNlIG90aGVyIGFyZ3Mgb3ZlcnJpZGUgdGhlIGNvbmZpZyBmaWxlcywgYW5kIHRoaXMKKyAgICAgICAgIyBvbmUgaXMgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gbG9hZCB0aGUgY29uZmlnIGZpbGVzLgorICAgICAgICAjIElmIGF0dHJzWydzY3JpcHRfYXJncyddIHdhc24ndCBwYXNzZWQsIGFzc3VtZSBmYWxzZS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgYWxzbyBtYWtlIHN1cmUgd2UganVzdCBsb29rIGF0IHRoZSBnbG9iYWwgb3B0aW9ucworICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zY3JpcHRfYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5zY3JpcHRfYXJnczoKKyAgICAgICAgICAgICAgICBpZiBub3QgYXJnLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBhcmcgPT0gJy0tbm8tdXNlci1jZmcnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCiAKICAgICBkZWYgZ2V0X29wdGlvbl9kaWN0KHNlbGYsIGNvbW1hbmQpOgpAQCAtMzEwLDcgKzMyOCwxMCBAQAogICAgICAgICBEaXN0dXRpbHMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSAoaWUuIHdoZXJlIHRoZSB0b3AtbGV2ZWwKICAgICAgICAgRGlzdHV0aWxzIF9faW5zdF9fLnB5IGZpbGUgbGl2ZXMpLCBhIGZpbGUgaW4gdGhlIHVzZXIncyBob21lCiAgICAgICAgIGRpcmVjdG9yeSBuYW1lZCAucHlkaXN0dXRpbHMuY2ZnIG9uIFVuaXggYW5kIHB5ZGlzdHV0aWxzLmNmZwotICAgICAgICBvbiBXaW5kb3dzL01hYywgYW5kIHNldHVwLmNmZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgIG9uIFdpbmRvd3MvTWFjOyBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZQorICAgICAgICAtLW5vLXVzZXItY2ZnIG9wdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAgIGZpbGVzID0gW10KICAgICAgICAgY2hlY2tfZW52aXJvbigpCkBAIC0zMzAsMTUgKzM1MSwxOSBAQAogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICJweWRpc3R1dGlscy5jZmciCiAKICAgICAgICAgIyBBbmQgbG9vayBmb3IgdGhlIHVzZXIgY29uZmlnIGZpbGUKLSAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHVzZXJfZmlsZSkKKyAgICAgICAgaWYgc2VsZi53YW50X3VzZXJfY2ZnOgorICAgICAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodXNlcl9maWxlKToKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQogCiAgICAgICAgICMgQWxsIHBsYXRmb3JtcyBzdXBwb3J0IGxvY2FsIHNldHVwLmNmZwogICAgICAgICBsb2NhbF9maWxlID0gInNldHVwLmNmZyIKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobG9jYWxfZmlsZSk6CiAgICAgICAgICAgICBmaWxlcy5hcHBlbmQobG9jYWxfZmlsZSkKIAorICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoInVzaW5nIGNvbmZpZyBmaWxlczogJXMiICUgJywgJy5qb2luKGZpbGVzKSkKKwogICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIGRlZiBwYXJzZV9jb25maWdfZmlsZXMoc2VsZiwgZmlsZW5hbWVzPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NWY4ZC4uMDAwMDAwMAotLS0gYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0iIiJkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCi0KLVByb3ZpZGVzIHRoZSBFTVhDQ29tcGlsZXIgY2xhc3MsIGEgc3ViY2xhc3Mgb2YgVW5peENDb21waWxlciB0aGF0Ci1oYW5kbGVzIHRoZSBFTVggcG9ydCBvZiB0aGUgR05VIEMgY29tcGlsZXIgdG8gT1MvMi4KLSIiIgotCi0jIGlzc3VlczoKLSMKLSMgKiBPUy8yIGluc2lzdHMgdGhhdCBETExzIGNhbiBoYXZlIG5hbWVzIG5vIGxvbmdlciB0aGFuIDggY2hhcmFjdGVycwotIyAgIFdlIHB1dCBleHBvcnRfc3ltYm9scyBpbiBhIGRlZi1maWxlLCBhcyB0aG91Z2ggdGhlIERMTCBjYW4gaGF2ZQotIyAgIGFuIGFyYml0cmFyeSBsZW5ndGggbmFtZSwgYnV0IHRydW5jYXRlIHRoZSBvdXRwdXQgZmlsZW5hbWUuCi0jCi0jICogb25seSB1c2UgT01GIG9iamVjdHMgYW5kIHVzZSBMSU5LMzg2IGFzIHRoZSBsaW5rZXIgKC1ab21mKQotIwotIyAqIGFsd2F5cyBidWlsZCBmb3IgbXVsdGl0aHJlYWRpbmcgKC1abXQpIGFzIHRoZSBhY2NvbXBhbnlpbmcgT1MvMiBwb3J0Ci0jICAgb2YgUHl0aG9uIGlzIG9ubHkgZGlzdHJpYnV0ZWQgd2l0aCB0aHJlYWRzIGVuYWJsZWQuCi0jCi0jIHRlc3RlZCBjb25maWd1cmF0aW9uczoKLSMKLSMgKiBFTVggZ2NjIDIuODEvRU1YIDAuOWQgZml4MDMKLQotaW1wb3J0IG9zLHN5cyxjb3B5Ci1mcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucwotZnJvbSBkaXN0dXRpbHMudW5peGNjb21waWxlciBpbXBvcnQgVW5peENDb21waWxlcgotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCB3cml0ZV9maWxlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvciwgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi0KLWNsYXNzIEVNWENDb21waWxlciAoVW5peENDb21waWxlcik6Ci0KLSAgICBjb21waWxlcl90eXBlID0gJ2VteCcKLSAgICBvYmpfZXh0ZW5zaW9uID0gIi5vYmoiCi0gICAgc3RhdGljX2xpYl9leHRlbnNpb24gPSAiLmxpYiIKLSAgICBzaGFyZWRfbGliX2V4dGVuc2lvbiA9ICIuZGxsIgotICAgIHN0YXRpY19saWJfZm9ybWF0ID0gIiVzJXMiCi0gICAgc2hhcmVkX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICByZXNfZXh0ZW5zaW9uID0gIi5yZXMiICAgICAgIyBjb21waWxlZCByZXNvdXJjZSBmaWxlCi0gICAgZXhlX2V4dGVuc2lvbiA9ICIuZXhlIgotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLAotICAgICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wLAotICAgICAgICAgICAgICAgICAgZm9yY2U9MCk6Ci0KLSAgICAgICAgVW5peENDb21waWxlci5fX2luaXRfXyAoc2VsZiwgdmVyYm9zZSwgZHJ5X3J1biwgZm9yY2UpCi0KLSAgICAgICAgKHN0YXR1cywgZGV0YWlscykgPSBjaGVja19jb25maWdfaCgpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoIlB5dGhvbidzIEdDQyBzdGF0dXM6ICVzIChkZXRhaWxzOiAlcykiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSkKLSAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBDT05GSUdfSF9PSzoKLSAgICAgICAgICAgIHNlbGYud2FybigKLSAgICAgICAgICAgICAgICAiUHl0aG9uJ3MgcHljb25maWcuaCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB5b3VyIGNvbXBpbGVyLiAgIiArCi0gICAgICAgICAgICAgICAgKCJSZWFzb246ICVzLiIgJSBkZXRhaWxzKSArCi0gICAgICAgICAgICAgICAgIkNvbXBpbGluZyBtYXkgZmFpbCBiZWNhdXNlIG9mIHVuZGVmaW5lZCBwcmVwcm9jZXNzb3IgbWFjcm9zLiIpCi0KLSAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sIHNlbGYubGRfdmVyc2lvbikgPSBcCi0gICAgICAgICAgICBnZXRfdmVyc2lvbnMoKQotICAgICAgICBzZWxmLmRlYnVnX3ByaW50KHNlbGYuY29tcGlsZXJfdHlwZSArICI6IGdjYyAlcywgbGQgJXNcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmdjY192ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxkX3ZlcnNpb24pICkKLQotICAgICAgICAjIEhhcmQtY29kZSBHQ0MgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGlzIGlzIGFsbCBhYm91dC4KLSAgICAgICAgIyBYWFggb3B0aW1pemF0aW9uLCB3YXJuaW5ncyBldGMuIHNob3VsZCBiZSBjdXN0b21pemFibGUuCi0gICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLVpvbWYgLVptdCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSAtV2FsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyX3NvPSdnY2MgLVpvbWYgLVptdCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSAtV2FsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSdnY2MgLVpvbWYgLVptdCAtWmNydGRsbCAtWmRsbCcpCi0KLSAgICAgICAgIyB3YW50IHRoZSBnY2MgbGlicmFyeSBzdGF0aWNhbGx5IGxpbmtlZCAoc28gdGhhdCB3ZSBkb24ndCBoYXZlCi0gICAgICAgICMgdG8gZGlzdHJpYnV0ZSBhIHZlcnNpb24gZGVwZW5kZW50IG9uIHRoZSBjb21waWxlciB3ZSBoYXZlKQotICAgICAgICBzZWxmLmRsbF9saWJyYXJpZXM9WyJnY2MiXQotCi0gICAgIyBfX2luaXRfXyAoKQotCi0gICAgZGVmIF9jb21waWxlKHNlbGYsIG9iaiwgc3JjLCBleHQsIGNjX2FyZ3MsIGV4dHJhX3Bvc3RhcmdzLCBwcF9vcHRzKToKLSAgICAgICAgaWYgZXh0ID09ICcucmMnOgotICAgICAgICAgICAgIyBnY2MgcmVxdWlyZXMgJy5yYycgY29tcGlsZWQgdG8gYmluYXJ5ICgnLnJlcycpIGZpbGVzICEhIQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oWyJyYyIsICItciIsIHNyY10pCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQotICAgICAgICBlbHNlOiAjIGZvciBvdGhlciBmaWxlcyB1c2UgdGhlIEMtY29tcGlsZXIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnNwYXduKHNlbGYuY29tcGlsZXJfc28gKyBjY19hcmdzICsgW3NyYywgJy1vJywgb2JqXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0KLSAgICBkZWYgbGluayAoc2VsZiwKLSAgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCi0gICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPU5vbmUsCi0gICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKLQotICAgICAgICAjIHVzZSBzZXBhcmF0ZSBjb3BpZXMsIHNvIHdlIGNhbiBtb2RpZnkgdGhlIGxpc3RzCi0gICAgICAgIGV4dHJhX3ByZWFyZ3MgPSBjb3B5LmNvcHkoZXh0cmFfcHJlYXJncyBvciBbXSkKLSAgICAgICAgbGlicmFyaWVzID0gY29weS5jb3B5KGxpYnJhcmllcyBvciBbXSkKLSAgICAgICAgb2JqZWN0cyA9IGNvcHkuY29weShvYmplY3RzIG9yIFtdKQotCi0gICAgICAgICMgQWRkaXRpb25hbCBsaWJyYXJpZXMKLSAgICAgICAgbGlicmFyaWVzLmV4dGVuZChzZWxmLmRsbF9saWJyYXJpZXMpCi0KLSAgICAgICAgIyBoYW5kbGUgZXhwb3J0IHN5bWJvbHMgYnkgY3JlYXRpbmcgYSBkZWYtZmlsZQotICAgICAgICAjIHdpdGggZXhlY3V0YWJsZXMgdGhpcyBvbmx5IHdvcmtzIHdpdGggZ2NjL2xkIGFzIGxpbmtlcgotICAgICAgICBpZiAoKGV4cG9ydF9zeW1ib2xzIGlzIG5vdCBOb25lKSBhbmQKLSAgICAgICAgICAgICh0YXJnZXRfZGVzYyAhPSBzZWxmLkVYRUNVVEFCTEUpKToKLSAgICAgICAgICAgICMgKFRoZSBsaW5rZXIgZG9lc24ndCBkbyBhbnl0aGluZyBpZiBvdXRwdXQgaXMgdXAtdG8tZGF0ZS4KLSAgICAgICAgICAgICMgU28gaXQgd291bGQgcHJvYmFibHkgYmV0dGVyIHRvIGNoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRoaXMsCi0gICAgICAgICAgICAjIGJ1dCBmb3IgdGhpcyB3ZSBoYWQgdG8gaW5zZXJ0IHNvbWUgdW5jaGFuZ2VkIHBhcnRzIG9mCi0gICAgICAgICAgICAjIFVuaXhDQ29tcGlsZXIsIGFuZCB0aGlzIGlzIG5vdCB3aGF0IHdlIHdhbnQuKQotCi0gICAgICAgICAgICAjIHdlIHdhbnQgdG8gcHV0IHNvbWUgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQotICAgICAgICAgICAgIyBvYmplY3QgZmlsZXMgYXJlLCBidWlsZF90ZW1wIGRvZXNuJ3QgaGVscCBtdWNoCi0gICAgICAgICAgICAjIHdoZXJlIGFyZSB0aGUgb2JqZWN0IGZpbGVzCi0gICAgICAgICAgICB0ZW1wX2RpciA9IG9zLnBhdGguZGlybmFtZShvYmplY3RzWzBdKQotICAgICAgICAgICAgIyBuYW1lIG9mIGRsbCB0byBnaXZlIHRoZSBoZWxwZXIgZmlsZXMgdGhlIHNhbWUgYmFzZSBuYW1lCi0gICAgICAgICAgICAoZGxsX25hbWUsIGRsbF9leHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dCgKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpCi0KLSAgICAgICAgICAgICMgZ2VuZXJhdGUgdGhlIGZpbGVuYW1lcyBmb3IgdGhlc2UgZmlsZXMKLSAgICAgICAgICAgIGRlZl9maWxlID0gb3MucGF0aC5qb2luKHRlbXBfZGlyLCBkbGxfbmFtZSArICIuZGVmIikKLQotICAgICAgICAgICAgIyBHZW5lcmF0ZSAuZGVmIGZpbGUKLSAgICAgICAgICAgIGNvbnRlbnRzID0gWwotICAgICAgICAgICAgICAgICJMSUJSQVJZICVzIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiICUgXAotICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShvdXRwdXRfZmlsZW5hbWUpKVswXSwKLSAgICAgICAgICAgICAgICAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiLAotICAgICAgICAgICAgICAgICJFWFBPUlRTIl0KLSAgICAgICAgICAgIGZvciBzeW0gaW4gZXhwb3J0X3N5bWJvbHM6Ci0gICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKCcgICIlcyInICUgc3ltKQotICAgICAgICAgICAgc2VsZi5leGVjdXRlKHdyaXRlX2ZpbGUsIChkZWZfZmlsZSwgY29udGVudHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0aW5nICVzIiAlIGRlZl9maWxlKQotCi0gICAgICAgICAgICAjIG5leHQgYWRkIG9wdGlvbnMgZm9yIGRlZi1maWxlIGFuZCB0byBjcmVhdGluZyBpbXBvcnQgbGlicmFyaWVzCi0gICAgICAgICAgICAjIGZvciBnY2MvbGQgdGhlIGRlZi1maWxlIGlzIHNwZWNpZmllZCBhcyBhbnkgb3RoZXIgb2JqZWN0IGZpbGVzCi0gICAgICAgICAgICBvYmplY3RzLmFwcGVuZChkZWZfZmlsZSkKLQotICAgICAgICAjZW5kOiBpZiAoKGV4cG9ydF9zeW1ib2xzIGlzIG5vdCBOb25lKSBhbmQKLSAgICAgICAgIyAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSBvciBzZWxmLmxpbmtlcl9kbGwgPT0gImdjYyIpKToKLQotICAgICAgICAjIHdobyB3YW50cyBzeW1ib2xzIGFuZCBhIG1hbnkgdGltZXMgbGFyZ2VyIG91dHB1dCBmaWxlCi0gICAgICAgICMgc2hvdWxkIGV4cGxpY2l0bHkgc3dpdGNoIHRoZSBkZWJ1ZyBtb2RlIG9uCi0gICAgICAgICMgb3RoZXJ3aXNlIHdlIGxldCBkbGx3cmFwL2xkIHN0cmlwIHRoZSBvdXRwdXQgZmlsZQotICAgICAgICAjIChPbiBteSBtYWNoaW5lOiAxMEtCIDwgc3RyaXBwZWRfZmlsZSA8ID8/MTAwS0IKLSAgICAgICAgIyAgIHVuc3RyaXBwZWRfZmlsZSA9IHN0cmlwcGVkX2ZpbGUgKyBYWFggS0IKLSAgICAgICAgIyAgKCBYWFg9MjU0IGZvciBhIHR5cGljYWwgcHl0aG9uIGV4dGVuc2lvbikpCi0gICAgICAgIGlmIG5vdCBkZWJ1ZzoKLSAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MuYXBwZW5kKCItcyIpCi0KLSAgICAgICAgVW5peENDb21waWxlci5saW5rKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAjIGV4cG9ydF9zeW1ib2xzLCB3ZSBkbyB0aGlzIGluIG91ciBkZWYtZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2xhbmcpCi0KLSAgICAjIGxpbmsgKCkKLQotICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAjIG92ZXJyaWRlIHRoZSBvYmplY3RfZmlsZW5hbWVzIG1ldGhvZCBmcm9tIENDb21waWxlciB0bwotICAgICMgc3VwcG9ydCByYyBhbmQgcmVzLWZpbGVzCi0gICAgZGVmIG9iamVjdF9maWxlbmFtZXMgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX2Rpcj0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPScnKToKLSAgICAgICAgaWYgb3V0cHV0X2RpciBpcyBOb25lOiBvdXRwdXRfZGlyID0gJycKLSAgICAgICAgb2JqX25hbWVzID0gW10KLSAgICAgICAgZm9yIHNyY19uYW1lIGluIHNvdXJjZV9maWxlbmFtZXM6Ci0gICAgICAgICAgICAjIHVzZSBub3JtY2FzZSB0byBtYWtlIHN1cmUgJy5yYycgaXMgcmVhbGx5ICcucmMnIGFuZCBub3QgJy5SQycKLSAgICAgICAgICAgIChiYXNlLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dCAob3MucGF0aC5ub3JtY2FzZShzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBleHQgbm90IGluIChzZWxmLnNyY19leHRlbnNpb25zICsgWycucmMnXSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVW5rbm93bkZpbGVFcnJvcigidW5rbm93biBmaWxlIHR5cGUgJyVzJyAoZnJvbSAnJXMnKSIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgKGV4dCwgc3JjX25hbWUpKQotICAgICAgICAgICAgaWYgc3RyaXBfZGlyOgotICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lIChiYXNlKQotICAgICAgICAgICAgaWYgZXh0ID09ICcucmMnOgotICAgICAgICAgICAgICAgICMgdGhlc2UgbmVlZCB0byBiZSBjb21waWxlZCB0byBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgICAgICBvYmpfbmFtZXMuYXBwZW5kIChvcy5wYXRoLmpvaW4gKG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBzZWxmLnJlc19leHRlbnNpb24pKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvYmpfbmFtZXMuYXBwZW5kIChvcy5wYXRoLmpvaW4gKG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBzZWxmLm9ial9leHRlbnNpb24pKQotICAgICAgICByZXR1cm4gb2JqX25hbWVzCi0KLSAgICAjIG9iamVjdF9maWxlbmFtZXMgKCkKLQotICAgICMgb3ZlcnJpZGUgdGhlIGZpbmRfbGlicmFyeV9maWxlIG1ldGhvZCBmcm9tIFVuaXhDQ29tcGlsZXIKLSAgICAjIHRvIGRlYWwgd2l0aCBmaWxlIG5hbWluZy9zZWFyY2hpbmcgZGlmZmVyZW5jZXMKLSAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgZGlycywgbGliLCBkZWJ1Zz0wKToKLSAgICAgICAgc2hvcnRsaWIgPSAnJXMubGliJyAlIGxpYgotICAgICAgICBsb25nbGliID0gJ2xpYiVzLmxpYicgJSBsaWIgICAgIyB0aGlzIGZvcm0gdmVyeSByYXJlCi0KLSAgICAgICAgIyBnZXQgRU1YJ3MgZGVmYXVsdCBsaWJyYXJ5IGRpcmVjdG9yeSBzZWFyY2ggcGF0aAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IG9zLmVudmlyb25bJ0xJQlJBUllfUEFUSCddLnNwbGl0KCc7JykKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgZW14X2RpcnMgPSBbXQotCi0gICAgICAgIGZvciBkaXIgaW4gZGlycyArIGVteF9kaXJzOgotICAgICAgICAgICAgc2hvcnRsaWJwID0gb3MucGF0aC5qb2luKGRpciwgc2hvcnRsaWIpCi0gICAgICAgICAgICBsb25nbGlicCA9IG9zLnBhdGguam9pbihkaXIsIGxvbmdsaWIpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzaG9ydGxpYnApOgotICAgICAgICAgICAgICAgIHJldHVybiBzaG9ydGxpYnAKLSAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMobG9uZ2xpYnApOgotICAgICAgICAgICAgICAgIHJldHVybiBsb25nbGlicAotCi0gICAgICAgICMgT29wcywgZGlkbid0IGZpbmQgaXQgaW4gKmFueSogb2YgJ2RpcnMnCi0gICAgICAgIHJldHVybiBOb25lCi0KLSMgY2xhc3MgRU1YQ0NvbXBpbGVyCi0KLQotIyBCZWNhdXNlIHRoZXNlIGNvbXBpbGVycyBhcmVuJ3QgY29uZmlndXJlZCBpbiBQeXRob24ncyBweWNvbmZpZy5oIGZpbGUgYnkKLSMgZGVmYXVsdCwgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhcm4gdGhlIHVzZXIgaWYgaGUgaXMgdXNpbmcgYSB1bm1vZGlmaWVkCi0jIHZlcnNpb24uCi0KLUNPTkZJR19IX09LID0gIm9rIgotQ09ORklHX0hfTk9UT0sgPSAibm90IG9rIgotQ09ORklHX0hfVU5DRVJUQUlOID0gInVuY2VydGFpbiIKLQotZGVmIGNoZWNrX2NvbmZpZ19oKCk6Ci0KLSAgICAiIiJDaGVjayBpZiB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChzcGVjaWZpY2FsbHksIHB5Y29uZmlnLmgpCi0gICAgYXBwZWFycyBhbWVuYWJsZSB0byBidWlsZGluZyBleHRlbnNpb25zIHdpdGggR0NDLiAgUmV0dXJucyBhIHR1cGxlCi0gICAgKHN0YXR1cywgZGV0YWlscyksIHdoZXJlICdzdGF0dXMnIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKLSAgICAgIENPTkZJR19IX09LCi0gICAgICAgIGFsbCBpcyB3ZWxsLCBnbyBhaGVhZCBhbmQgY29tcGlsZQotICAgICAgQ09ORklHX0hfTk9UT0sKLSAgICAgICAgZG9lc24ndCBsb29rIGdvb2QKLSAgICAgIENPTkZJR19IX1VOQ0VSVEFJTgotICAgICAgICBub3Qgc3VyZSAtLSB1bmFibGUgdG8gcmVhZCBweWNvbmZpZy5oCi0gICAgJ2RldGFpbHMnIGlzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGV4cGxhaW5pbmcgdGhlIHNpdHVhdGlvbi4KLQotICAgIE5vdGUgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbmNsdWRlICJPSyI6IGVpdGhlciAnc3lzLnZlcnNpb24nIGNvbnRhaW5zCi0gICAgdGhlIHN0cmluZyAiR0NDIiAoaW1wbHlpbmcgdGhhdCB0aGlzIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCBHQ0MpLCBvciB0aGUKLSAgICBpbnN0YWxsZWQgInB5Y29uZmlnLmgiIGNvbnRhaW5zIHRoZSBzdHJpbmcgIl9fR05VQ19fIi4KLSAgICAiIiIKLQotICAgICMgWFhYIHNpbmNlIHRoaXMgZnVuY3Rpb24gYWxzbyBjaGVja3Mgc3lzLnZlcnNpb24sIGl0J3Mgbm90IHN0cmljdGx5IGEKLSAgICAjICJweWNvbmZpZy5oIiBjaGVjayAtLSBzaG91bGQgcHJvYmFibHkgYmUgcmVuYW1lZC4uLgotCi0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgICMgaWYgc3lzLnZlcnNpb24gY29udGFpbnMgR0NDIHRoZW4gcHl0aG9uIHdhcyBjb21waWxlZCB3aXRoCi0gICAgIyBHQ0MsIGFuZCB0aGUgcHljb25maWcuaCBmaWxlIHNob3VsZCBiZSBPSwotICAgIGlmIHN5cy52ZXJzaW9uLmZpbmQoIkdDQyIpID49IDA6Ci0gICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICJzeXMudmVyc2lvbiBtZW50aW9ucyAnR0NDJyIpCi0KLSAgICBmbiA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKQotICAgIHRyeToKLSAgICAgICAgIyBJdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gcmVhZCBzaW5nbGUgbGluZXMgdG8gc2VhcmNoLgotICAgICAgICAjIEJ1dCB3ZSBkbyB0aGlzIG9ubHkgb25jZSwgYW5kIGl0IGlzIGZhc3QgZW5vdWdoCi0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzID0gZi5yZWFkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgotICAgICAgICAjIGlmIHdlIGNhbid0IHJlYWQgdGhpcyBmaWxlLCB3ZSBjYW5ub3Qgc2F5IGl0IGlzIHdyb25nCi0gICAgICAgICMgdGhlIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gbGF0ZXIgYWJvdXQgdGhpcyBmaWxlIGFzIG1pc3NpbmcKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCi0gICAgICAgICAgICAgICAgImNvdWxkbid0IHJlYWQgJyVzJzogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpKQotCi0gICAgZWxzZToKLSAgICAgICAgIyAicHljb25maWcuaCIgY29udGFpbnMgYW4gIiNpZmRlZiBfX0dOVUNfXyIgb3Igc29tZXRoaW5nIHNpbWlsYXIKLSAgICAgICAgaWYgcy5maW5kKCJfX0dOVUNfXyIpID49IDA6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX09LLCAiJyVzJyBtZW50aW9ucyAnX19HTlVDX18nIiAlIGZuKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9OT1RPSywgIiclcycgZG9lcyBub3QgbWVudGlvbiAnX19HTlVDX18nIiAlIGZuKQotCi0KLWRlZiBnZXRfdmVyc2lvbnMoKToKLSAgICAiIiIgVHJ5IHRvIGZpbmQgb3V0IHRoZSB2ZXJzaW9ucyBvZiBnY2MgYW5kIGxkLgotICAgICAgICBJZiBub3QgcG9zc2libGUgaXQgcmV0dXJucyBOb25lIGZvciBpdC4KLSAgICAiIiIKLSAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBTdHJpY3RWZXJzaW9uCi0gICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQotICAgIGltcG9ydCByZQotCi0gICAgZ2NjX2V4ZSA9IGZpbmRfZXhlY3V0YWJsZSgnZ2NjJykKLSAgICBpZiBnY2NfZXhlOgotICAgICAgICBvdXQgPSBvcy5wb3BlbihnY2NfZXhlICsgJyAtZHVtcHZlcnNpb24nLCdyJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0X3N0cmluZyA9IG91dC5yZWFkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG91dC5jbG9zZSgpCi0gICAgICAgIHJlc3VsdCA9IHJlLnNlYXJjaCgnKFxkK1wuXGQrXC5cZCspJywgb3V0X3N0cmluZywgcmUuQVNDSUkpCi0gICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gU3RyaWN0VmVyc2lvbihyZXN1bHQuZ3JvdXAoMSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBnY2NfdmVyc2lvbiA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBnY2NfdmVyc2lvbiA9IE5vbmUKLSAgICAjIEVNWCBsZCBoYXMgbm8gd2F5IG9mIHJlcG9ydGluZyB2ZXJzaW9uIG51bWJlciwgYW5kIHdlIHVzZSBHQ0MKLSAgICAjIGFueXdheSAtIHNvIHdlIGNhbiBsaW5rIE9NRiBETExzCi0gICAgbGRfdmVyc2lvbiA9IE5vbmUKLSAgICByZXR1cm4gKGdjY192ZXJzaW9uLCBsZF92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkgYi9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQppbmRleCBlYjEzYzk4Li44YjkzMDU5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQpAQCAtMzUsOCArMzUsOCBAQAogCiBjbGFzcyBEaXN0dXRpbHNGaWxlRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJBbnkgcHJvYmxlbXMgaW4gdGhlIGZpbGVzeXN0ZW06IGV4cGVjdGVkIGZpbGUgbm90IGZvdW5kLCBldGMuCi0gICAgVHlwaWNhbGx5IHRoaXMgaXMgZm9yIHByb2JsZW1zIHRoYXQgd2UgZGV0ZWN0IGJlZm9yZSBJT0Vycm9yIG9yCi0gICAgT1NFcnJvciBjb3VsZCBiZSByYWlzZWQuIiIiCisgICAgVHlwaWNhbGx5IHRoaXMgaXMgZm9yIHByb2JsZW1zIHRoYXQgd2UgZGV0ZWN0IGJlZm9yZSBPU0Vycm9yCisgICAgY291bGQgYmUgcmFpc2VkLiIiIgogICAgIHBhc3MKIAogY2xhc3MgRGlzdHV0aWxzT3B0aW9uRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKaW5kZXggOWJkZDE0ZS4uZjZlZDI5MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKQEAgLTI3LDI2ICsyNywyNiBAQAogICAgIHRyeToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnNyYyA9IG9wZW4oc3JjLCAncmInKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigiY291bGQgbm90IG9wZW4gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGRlbGV0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZHN0ID0gb3Blbihkc3QsICd3YicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGRzdCwgZS5zdHJlcnJvcikpCiAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBidWYgPSBmc3JjLnJlYWQoYnVmZmVyX3NpemUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmVhZCBmcm9tICclcyc6ICVzIiAlIChzcmMsIGUuc3RyZXJyb3IpKQogCkBAIC01NSw3ICs1NSw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZHN0LndyaXRlKGJ1ZikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKICAgICBmaW5hbGx5OgpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgY29weV9pdCA9IEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoc3JjLCBkc3QpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgaWYgbnVtID09IGVycm5vLkVYREVWOgogICAgICAgICAgICAgY29weV9pdCA9IFRydWUKQEAgLTIwNSwxMSArMjA1LDExIEBACiAgICAgICAgIGNvcHlfZmlsZShzcmMsIGRzdCwgdmVyYm9zZT12ZXJib3NlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIChudW0sIG1zZykgPSBlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJyBieSBjb3B5L2RlbGV0ZTogIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IGIzZjZjZTEuLjk2ODhmMjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKQEAgLTcyOSw3ICs3MjksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdF9maWxlCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjIC0tIE1pc2NlbGxhbmVvdXMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weSBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKaW5kZXggZjU4YzU1Zi4uYjFjNWE0NCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CkBAIC0zMiw4ICszMiw2IEBACiAgICAgICAgIF9zcGF3bl9wb3NpeChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCiAgICAgZWxpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgIF9zcGF3bl9udChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCi0gICAgZWxpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gc3Bhd24gcHJvZ3JhbXMgb24gcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lKQpAQCAtNzQsMjYgKzcyLDYgQEAKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQogCi1kZWYgX3NwYXduX29zMihjbWQsIHNlYXJjaF9wYXRoPTEsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICBleGVjdXRhYmxlID0gY21kWzBdCi0gICAgaWYgc2VhcmNoX3BhdGg6Ci0gICAgICAgICMgZWl0aGVyIHdlIGZpbmQgb25lIG9yIGl0IHN0YXlzIHRoZSBzYW1lCi0gICAgICAgIGV4ZWN1dGFibGUgPSBmaW5kX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkgb3IgZXhlY3V0YWJsZQotICAgIGxvZy5pbmZvKCcgJy5qb2luKFtleGVjdXRhYmxlXSArIGNtZFsxOl0pKQotICAgIGlmIG5vdCBkcnlfcnVuOgotICAgICAgICAjIHNwYXdudiBmb3IgT1MvMiBFTVggcmVxdWlyZXMgYSBmdWxsIHBhdGggdG8gdGhlIC5leGUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmMgPSBvcy5zcGF3bnYob3MuUF9XQUlULCBleGVjdXRhYmxlLCBjbWQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICMgdGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiB0aGUgY29tbWFuZCBpc24ndCBmb3VuZAotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQ6ICVzIiAlIChjbWRbMF0sIGV4Yy5hcmdzWy0xXSkpCi0gICAgICAgIGlmIHJjICE9IDA6Ci0gICAgICAgICAgICAjIGFuZCB0aGlzIHJlZmxlY3RzIHRoZSBjb21tYW5kIHJ1bm5pbmcgYnV0IGZhaWxpbmcKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKSkKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKLSAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQotCiBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogICAgIF9jZmdfdGFyZ2V0ID0gTm9uZQpAQCAtMTgwLDcgKzE1OCw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCBiOTQ3OTg4Li43NTUzN2RiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtMTE0LDggKzExNCw2IEBACiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIsIHB5dGhvbl9kaXIpCiAgICAgZWxpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkluY2x1ZGUiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgQyBoZWFkZXIgZmlsZXMgIgpAQCAtMTU3LDExICsxNTUsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXgKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyB3aGVyZSBQeXRob24gaW5zdGFsbHMgaXRzIGxpYnJhcnkgIgpAQCAtNDQyLDcgKzQzNSw3IEBACiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKQEAgLTQ1NCw3ICs0NDcsNyBAQAogICAgICAgICBmaWxlbmFtZSA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZmlsZToKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDkyLDcgKzQ4NSw2IEBACiAgICAgIyBYWFggaG1tbS4uIGEgbm9ybWFsIGluc3RhbGwgcHV0cyBpbmNsdWRlIGZpbGVzIGhlcmUKICAgICBnWydJTkNMVURFUFknXSA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCkKIAotICAgIGdbJ1NPJ10gPSAnLnB5ZCcKICAgICBnWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICBnWydFWEUnXSA9ICIuZXhlIgogICAgIGdbJ1ZFUlNJT04nXSA9IGdldF9weXRob25fdmVyc2lvbigpLnJlcGxhY2UoIi4iLCAiIikKQEAgLTUwMiwyNCArNDk0LDYgQEAKICAgICBfY29uZmlnX3ZhcnMgPSBnCiAKIAotZGVmIF9pbml0X29zMigpOgotICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgT1MvMiIiIgotICAgIGcgPSB7fQotICAgICMgc2V0IGJhc2ljIGluc3RhbGwgZGlyZWN0b3JpZXMKLSAgICBnWydMSUJERVNUJ10gPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0xKQotICAgIGdbJ0JJTkxJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCi0KLSAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQotICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQotCi0gICAgZ1snU08nXSA9ICcucHlkJwotICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwotICAgIGdbJ0VYRSddID0gIi5leGUiCi0KLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCi0gICAgX2NvbmZpZ192YXJzID0gZwotCi0KIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgogICAgICIiIldpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGFsbCBjb25maWd1cmF0aW9uCiAgICAgdmFyaWFibGVzIHJlbGV2YW50IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4gIEdlbmVyYWxseSB0aGlzIGluY2x1ZGVzCkBAIC01NDQsNiArNTE4LDExIEBACiAgICAgICAgIF9jb25maWdfdmFyc1sncHJlZml4J10gPSBQUkVGSVgKICAgICAgICAgX2NvbmZpZ192YXJzWydleGVjX3ByZWZpeCddID0gRVhFQ19QUkVGSVgKIAorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzZWUgaXNzdWUxOTU1NQorICAgICAgICBTTyA9IF9jb25maWdfdmFycy5nZXQoJ0VYVF9TVUZGSVgnKQorICAgICAgICBpZiBTTyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jb25maWdfdmFyc1snU08nXSA9IFNPCisKICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAogICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKQEAgLTU5NCw0ICs1NzMsNyBAQAogICAgIHJldHVybmVkIGJ5ICdnZXRfY29uZmlnX3ZhcnMoKScuICBFcXVpdmFsZW50IHRvCiAgICAgZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAgICAgIiIiCisgICAgaWYgbmFtZSA9PSAnU08nOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybignU08gaXMgZGVwcmVjYXRlZCwgdXNlIEVYVF9TVUZGSVgnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKaW5kZXggZDNmYjI0YS4uNmI0MmM1YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CkBAIC0xNiw2ICsxNiwxMyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIHBhdGNoCiAKIHRyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQorCit0cnk6CiAgICAgaW1wb3J0IHppcGZpbGUKICAgICBaSVBfU1VQUE9SVCA9IFRydWUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTc3LDcgKzg0LDcgQEAKIAogICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgdW5pdHRlc3Quc2tpcFVubGVzcyhzcGxpdGRyaXZlKHRtcGRpcilbMF0gPT0gc3BsaXRkcml2ZSh0bXBkaXIyKVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCiAKICAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsIHRhcmdldF9uYW1lKQogCkBAIC0yNzUsNiArMjgyLDU4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgQVJDSElWRV9GT1JNQVRTWyd4eHgnXQogCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydAorICAgICAgICBpZiBVSURfR0lEX1NVUFBPUlQ6CisgICAgICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyb3VwID0gb3duZXIgPSAncm9vdCcKKworICAgICAgICBiYXNlX2Rpciwgcm9vdF9kaXIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IG1ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXJjaGl2ZV9uYW1lKSkKKworICAgICAgICAjIG5vdyBjaGVja3MgdGhlIHJpZ2h0cworICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShBcmNoaXZlVXRpbFRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CmluZGV4IDBhZDMyZDQuLmM4Y2NkYzIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWIuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHppcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtNzUsOCArNzQsNiBAQAogICAgICAgICAjIHNlZSB3aGF0IHdlIGhhdmUKICAgICAgICAgZGlzdF9jcmVhdGVkID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Rpc3QnKSkKICAgICAgICAgYmFzZSA9ICIlcy4lcy56aXAiICUgKGRpc3QuZ2V0X2Z1bGxuYW1lKCksIGNtZC5wbGF0X25hbWUpCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKCc6JywgJy0nKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdF9jcmVhdGVkLCBbYmFzZV0pCiAKQEAgLTkwLDcgKzg3LDcgQEAKICAgICAgICAgY29udGVudHMgPSBzb3J0ZWQob3MucGF0aC5iYXNlbmFtZShmbikgZm9yIGZuIGluIGNvbnRlbnRzKQogICAgICAgICB3YW50ZWQgPSBbJ2Zvby0wLjEtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ2Zvby5weSddCiAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKLSAgICAgICAgICAgIHdhbnRlZC5hcHBlbmQoJ2Zvby4lcy5weWMnICUgaW1wLmdldF90YWcoKSkKKyAgICAgICAgICAgIHdhbnRlZC5hcHBlbmQoJ2Zvby4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgc29ydGVkKHdhbnRlZCkpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKaW5kZXggMmNlOWQ0NC4uYzhmNmI4OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQpAQCAtMiw3ICsyLDYgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHkKQEAgLTYzLDcgKzYyLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocHljYWNoZV9kaXIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcHljX2ZpbGVzID0gb3MubGlzdGRpcihweWNhY2hlX2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBpbXAuZ2V0X3RhZygpLCBweWNfZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX2luaXRfXy4lcy5weWMiICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHljX2ZpbGVzKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfcGFja2FnZV9kaXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1Z3MgIzE2Njg1OTYvIzE3MjA4OTcKQEAgLTEwMiw3ICsxMDIsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgWydib2lsZWRlZ2dzLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgJ2J5dGUtY29tcGlsZSBkaXNhYmxlZCcpCiAgICAgZGVmIHRlc3RfYnl0ZV9jb21waWxlX29wdGltaXplZChzZWxmKToKQEAgLTExOSw3ICsxMjAsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydib2lsZWRlZ2dzLiVzLnB5bycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnXSkKIAogICAgIGRlZiB0ZXN0X2Rpcl9pbl9wYWNrYWdlX2RhdGEoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKaW5kZXggMGU4ZDY1ZS4uNGRlODI1YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgICAgICAgY29uZmlnID0gbGlzdChzb3J0ZWQoY29uZmlnLml0ZW1zKCkpKQogICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICdzZWNyZXQnKSwgKCdyZWFsbScsICdweXBpJyksCi0gICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCisgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyMScpLCAoJ3VzZXJuYW1lJywgJ21lJyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCiAgICAgICAgIGNvbmZpZyA9IGxpc3Qoc29ydGVkKGNvbmZpZy5pdGVtcygpKSkKICAgICAgICAgd2FpdGVkID0gWygncGFzc3dvcmQnLCAnc2VjcmV0JyksICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAorICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKICAgICAgICAgICAgICAgICAgICgnc2VydmVyJywgJ3NlcnZlci1sb2dpbicpLCAoJ3VzZXJuYW1lJywgJ3RhcmVrJyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkKaW5kZXggOWE4Y2ExOS4uYjdmZDNmYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkKQEAgLTM5LDYgKzM5LDcgQEAKIAogCiBjbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZShzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjEzLDYgKzIxNCwzNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkaXN0LmFubm91bmNlLCBhcmdzLCBrd2FyZ3MpCiAKIAorICAgIGRlZiB0ZXN0X2ZpbmRfY29uZmlnX2ZpbGVzX2Rpc2FibGUoc2VsZik6CisgICAgICAgICMgVGlja2V0ICMxMTgwOiBBbGxvdyB1c2VyIHRvIGRpc2FibGUgdGhlaXIgaG9tZSBjb25maWcgZmlsZS4KKyAgICAgICAgdGVtcF9ob21lID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICIucHlkaXN0dXRpbHMuY2ZnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAicHlkaXN0dXRpbHMuY2ZnIikKKworICAgICAgICB3aXRoIG9wZW4odXNlcl9maWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnW2Rpc3R1dGlsc11cbicpCisKKyAgICAgICAgZGVmIF9leHBhbmRlcihwYXRoKToKKyAgICAgICAgICAgIHJldHVybiB0ZW1wX2hvbWUKKworICAgICAgICBvbGRfZXhwYW5kZXIgPSBvcy5wYXRoLmV4cGFuZHVzZXIKKyAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gX2V4cGFuZGVyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQgPSBEaXN0cmlidXRpb24oKQorICAgICAgICAgICAgYWxsX2ZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCisKKyAgICAgICAgICAgIGQgPSBEaXN0cmlidXRpb24oYXR0cnM9eydzY3JpcHRfYXJncyc6IFsnLS1uby11c2VyLWNmZyddfSkKKyAgICAgICAgICAgIGZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBvbGRfZXhwYW5kZXIKKworICAgICAgICAjIG1ha2Ugc3VyZSAtLW5vLXVzZXItY2ZnIGRpc2FibGVzIHRoZSB1c2VyIGNmZyBmaWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbF9maWxlcyktMSwgbGVuKGZpbGVzKSkKKwogY2xhc3MgTWV0YWRhdGFUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC00MDYsMTQgKzQzNSwxNCBAQAogICAgICAgICBQS0dfSU5GTy5zZWVrKDApCiAgICAgICAgIG1ldGFkYXRhLnJlYWRfcGtnX2ZpbGUoUEtHX0lORk8pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEubmFtZSwgInBhY2thZ2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS52ZXJzaW9uLCAiMS4wIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEuZGVzY3JpcHRpb24sICJ4eHgiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5kb3dubG9hZF91cmwsICdodHRwOi8vZXhhbXBsZS5jb20nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5rZXl3b3JkcywgWydvbmUnLCAndHdvJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLnBsYXRmb3JtcywgWydVTktOT1dOJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLm9ic29sZXRlcywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEucmVxdWlyZXMsIFsnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEubmFtZSwgInBhY2thZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnZlcnNpb24sICIxLjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmRlc2NyaXB0aW9uLCAieHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5kb3dubG9hZF91cmwsICdodHRwOi8vZXhhbXBsZS5jb20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5wbGF0Zm9ybXMsIFsnVU5LTk9XTiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLm9ic29sZXRlcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5yZXF1aXJlcywgWydmb28nXSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmluZGV4IGVkZTg4ZTUuLjE4ZTFlNTcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGwuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc2l0ZQpAQCAtOTQsNyArOTMsNyBAQAogCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCi0gICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicsICdvczJfaG9tZScpOgorICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBJTlNUQUxMX1NDSEVNRVMpCiAKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKQEAgLTE5Myw3ICsxOTIsOCBAQAogICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgZm91bmQgPSBbb3MucGF0aC5iYXNlbmFtZShsaW5lKSBmb3IgbGluZSBpbiBjb250ZW50LnNwbGl0bGluZXMoKV0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ2hlbGxvLnB5JywgJ2hlbGxvLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpLCAnc2F5aGknLAorICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsCisgICAgICAgICAgICAgICAgICAgICdzYXloaScsCiAgICAgICAgICAgICAgICAgICAgICdVTktOT1dOLTAuMC4wLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml1dCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIGV4cGVjdGVkKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKaW5kZXggZDBkZmNhMC4uNDBkZDFhOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCkBAIC00NCw4ICs0NCwxMCBAQAogICAgICAgICBmID0gb3MucGF0aC5qb2luKHByb2plY3RfZGlyLCAnZm9vLnB5JykKICAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKICAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1UcnVlKQotICAgICAgICBweW9fZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywgZGVidWdfb3ZlcnJpZGU9RmFsc2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgcHlvX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5b19maWxlKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CmluZGV4IGU2MzU5ZDYuLjE2NDU4NmIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKQEAgLTE0LDYgKzE0LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgWkxJQl9TVVBQT1JUID0gRmFsc2UKIAordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0LCBzaG93X2Zvcm1hdHMKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgpAQCAtNDI1LDYgKzQzMSw1NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmaWxlbmFtZXMpLCBbJ2Zha2UtMS4wJywgJ2Zha2UtMS4wL1BLRy1JTkZPJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlLTEuMC9SRUFETUUubWFudWFsJ10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfbWFrZV9kaXN0cmlidXRpb25fb3duZXJfZ3JvdXAoc2VsZik6CisKKyAgICAgICAgIyBjaGVjayBpZiB0YXIgYW5kIGd6aXAgYXJlIGluc3RhbGxlZAorICAgICAgICBpZiAoZmluZF9leGVjdXRhYmxlKCd0YXInKSBpcyBOb25lIG9yCisgICAgICAgICAgICAgICAgZmluZF9leGVjdXRhYmxlKCdnemlwJykgaXMgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyIGFuZCBzcGVjaWZ5aW5nIHRoZSBvd25lcitncm91cAorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQub3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgY21kLmdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCisgICAgICAgICMgYnVpbGRpbmcgYSBzZGlzdCBhZ2FpbgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhcgorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorCisgICAgICAgICMgbm90ZSB0aGF0IHdlIGFyZSBub3QgdGVzdGluZyB0aGUgZ3JvdXAgb3duZXJzaGlwIGhlcmUKKyAgICAgICAgIyBiZWNhdXNlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtcyBhbmQgdGhlIGNvbnRhaW5lcgorICAgICAgICAjIHJpZ2h0cyAoc2VlICM3NDA4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgb3MuZ2V0dWlkKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFNEaXN0VGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CmluZGV4IDA3ODEyZDguLmI1ZmRjOTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQpAQCAtMSwxNiArMSwxNCBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zeXNjb25maWcuIiIiCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZXRfZGVmYXVsdF9jb21waWxlcgogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogCi1jbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcihTeXNjb25maWdUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLm1ha2VmaWxlID0gTm9uZQpAQCAtMzIsNyArMzAsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9weXRob25fbGliKHNlbGYpOgotICAgICAgICBsaWJfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKCkKICAgICAgICAgIyBYWFggZG9lc24ndCB3b3JrIG9uIExpbnV4IHdoZW4gUHl0aG9uIHdhcyBuZXZlciBpbnN0YWxsZWQgYmVmb3JlCiAgICAgICAgICNzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihsaWJfZGlyKSwgbGliX2RpcikKICAgICAgICAgIyB0ZXN0IGZvciBweXRob254eC5saWI/CkBAIC02Nyw4ICs2NCw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoUHl0aG9uX2gpLCBQeXRob25faCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXNjb25maWcuX2lzX3B5dGhvbl9zb3VyY2VfZGlyKHNyY2RpcikpCiAgICAgICAgIGVsaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmRpcm5hbWUoc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAgICAgc3JjZGlyKQogCiAgICAgZGVmIHRlc3Rfc3JjZGlyX2luZGVwZW5kZW50X29mX2N3ZChzZWxmKToKICAgICAgICAgIyBzcmNkaXIgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CkBAIC0xMjksMTAgKzEyNywxMyBAQAogCiAgICAgZGVmIHRlc3Rfc3lzY29uZmlnX21vZHVsZShzZWxmKToKICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZyBhcyBnbG9iYWxfc3lzY29uZmlnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpLCdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwKKyAgICAgICAgICAgICAgICAgICAgICdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKICAgICBkZWYgdGVzdF9zeXNjb25maWdfY29tcGlsZXJfdmFycyhzZWxmKToKICAgICAgICAgIyBPbiBPUyBYLCBiaW5hcnkgaW5zdGFsbGVycyBzdXBwb3J0IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRpbmcgb24KICAgICAgICAgIyB2YXJpb3VzIGxldmVscyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIGRpZmZlcmluZyBYY29kZQpAQCAtMTUxLDkgKzE1MiwzMCBAQAogICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKIAogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKaW5kZXggYTQ3NDU5Ni4uMWZjYmE4OCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKICAgICAgICAgZm9yIGF0dHIsIHdhaXRlZCBpbiAoKCd1c2VybmFtZScsICdtZScpLCAoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIoY21kLCBhdHRyKSwgd2FpdGVkKQogCiAgICAgZGVmIHRlc3Rfc2F2ZWRfcGFzc3dvcmQoc2VsZik6CkBAIC0xMTQsMTEgKzExNCwxMiBAQAogICAgICAgICAgIyB3aGF0IGRpZCB3ZSBzZW5kID8KICAgICAgICAgaGVhZGVycyA9IGRpY3Qoc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIwODcnKQotICAgICAgICBzZWxmLmFzc2VydF8oaGVhZGVyc1snQ29udGVudC10eXBlJ10uc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfZnVsbF91cmwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiJ3h4eCcgaW4gc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCisgICAgICAgIGNvbnRlbnRfdHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50X3R5cGUuc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfbWV0aG9kKCksICdQT1NUJykKKyAgICAgICAgZXhwZWN0ZWRfdXJsID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLCBleHBlY3RlZF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ3h4eCcgaW4gc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZSh1cGxvYWRUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKaW5kZXggMDAyMTljZi4uNTQ4ODY1YyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKQEAgLTIzNiw3ICsyMzYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vfcm9vdCwgJ2M6XFxyb290JywgJ2l0c1xcaGVyZScpCiAKLSAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG9zMiwgbWFjCisgICAgICAgICMgWFhYIHBsYXRmb3JtcyB0byBiZSBjb3ZlcmVkOiBtYWMKIAogICAgIGRlZiB0ZXN0X2NoZWNrX2Vudmlyb24oc2VsZik6CiAgICAgICAgIHV0aWwuX2Vudmlyb25fY2hlY2tlZCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQppbmRleCA2N2Q4MTY2Li5lZmIzODM0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CkBAIC02LDcgKzYsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3RyaW5nCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKQEAgLTE1NCwxMiArMTU0LDYgQEAKICAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQogCi0gICAgZWxpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAoZHJpdmUsIHBhdGgpID0gb3MucGF0aC5zcGxpdGRyaXZlKHBhdGhuYW1lKQotICAgICAgICBpZiBwYXRoWzBdID09IG9zLnNlcDoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQotCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigibm90aGluZyBrbm93biBhYm91dCBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCiAKQEAgLTIxMyw4ICsyMDcsOCBAQAogCiAKIGRlZiBncm9rX2Vudmlyb25tZW50X2Vycm9yIChleGMsIHByZWZpeD0iZXJyb3I6ICIpOgotICAgICIiIkdlbmVyYXRlIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBFbnZpcm9ubWVudEVycm9yIChJT0Vycm9yIG9yCi0gICAgT1NFcnJvcikgZXhjZXB0aW9uIG9iamVjdC4gIEhhbmRsZXMgUHl0aG9uIDEuNS4xIGFuZCAxLjUuMiBzdHlsZXMsIGFuZAorICAgICIiIkdlbmVyYXRlIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBPU0Vycm9yCisgICAgZXhjZXB0aW9uIG9iamVjdC4gIEhhbmRsZXMgUHl0aG9uIDEuNS4xIGFuZCAxLjUuMiBzdHlsZXMsIGFuZAogICAgIGRvZXMgd2hhdCBpdCBjYW4gdG8gZGVhbCB3aXRoIGV4Y2VwdGlvbiBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBhCiAgICAgZmlsZW5hbWUgKHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgZXJyb3IgaXMgZHVlIHRvIGEgdHdvLWZpbGUgb3BlcmF0aW9uLAogICAgIHN1Y2ggYXMgJ3JlbmFtZSgpJyBvciAnbGluaygpJy4gIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgYXMgYSBzdHJpbmcKQEAgLTQ1OSw5ICs0NTMsMTAgQEAKICAgICAgICAgICAgICMgICBjZmlsZSAtIGJ5dGUtY29tcGlsZWQgZmlsZQogICAgICAgICAgICAgIyAgIGRmaWxlIC0gcHVycG9ydGVkIHNvdXJjZSBmaWxlbmFtZSAoc2FtZSBhcyAnZmlsZScgYnkgZGVmYXVsdCkKICAgICAgICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCiAgICAgICAgICAgICBkZmlsZSA9IGZpbGUKICAgICAgICAgICAgIGlmIHByZWZpeDoKICAgICAgICAgICAgICAgICBpZiBmaWxlWzpsZW4ocHJlZml4KV0gIT0gcHJlZml4OgpkaWZmIC0tZ2l0IGEvTGliL2RvY3Rlc3QucHkgYi9MaWIvZG9jdGVzdC5weQppbmRleCAwYjQ4NWYxLi5lZTRlMDY4IDEwMDY0NAotLS0gYS9MaWIvZG9jdGVzdC5weQorKysgYi9MaWIvZG9jdGVzdC5weQpAQCAtNjIsNiArNjIsNyBAQAogICAgICdSRVBPUlRfTkRJRkYnLAogICAgICdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJywKICAgICAnUkVQT1JUSU5HX0ZMQUdTJywKKyAgICAnRkFJTF9GQVNUJywKICAgICAjIDEuIFV0aWxpdHkgRnVuY3Rpb25zCiAgICAgIyAyLiBFeGFtcGxlICYgRG9jVGVzdAogICAgICdFeGFtcGxlJywKQEAgLTkyLDYgKzkzLDcgQEAKIF0KIAogaW1wb3J0IF9fZnV0dXJlX18KK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgbGluZWNhY2hlCkBAIC0xNTAsMTEgKzE1MiwxMyBAQAogUkVQT1JUX0NESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX0NESUZGJykKIFJFUE9SVF9ORElGRiA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ1JFUE9SVF9ORElGRicpCiBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRScpCitGQUlMX0ZBU1QgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdGQUlMX0ZBU1QnKQogCiBSRVBPUlRJTkdfRkxBR1MgPSAoUkVQT1JUX1VESUZGIHwKICAgICAgICAgICAgICAgICAgICBSRVBPUlRfQ0RJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9ORElGRiB8Ci0gICAgICAgICAgICAgICAgICAgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSkKKyAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIHwKKyAgICAgICAgICAgICAgICAgICBGQUlMX0ZBU1QpCiAKICMgU3BlY2lhbCBzdHJpbmcgbWFya2VycyBmb3IgdXNlIGluIGB3YW50YCBzdHJpbmdzOgogQkxBTktMSU5FX01BUktFUiA9ICc8QkxBTktMSU5FPicKQEAgLTIxMiw3ICsyMTYsNyBAQAogICAgIGlmIG1vZHVsZV9yZWxhdGl2ZToKICAgICAgICAgcGFja2FnZSA9IF9ub3JtYWxpemVfbW9kdWxlKHBhY2thZ2UsIDMpCiAgICAgICAgIGZpbGVuYW1lID0gX21vZHVsZV9yZWxhdGl2ZV9wYXRoKHBhY2thZ2UsIGZpbGVuYW1lKQotICAgICAgICBpZiBoYXNhdHRyKHBhY2thZ2UsICdfX2xvYWRlcl9fJyk6CisgICAgICAgIGlmIGdldGF0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIGhhc2F0dHIocGFja2FnZS5fX2xvYWRlcl9fLCAnZ2V0X2RhdGEnKToKICAgICAgICAgICAgICAgICBmaWxlX2NvbnRlbnRzID0gcGFja2FnZS5fX2xvYWRlcl9fLmdldF9kYXRhKGZpbGVuYW1lKQogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBmaWxlX2NvbnRlbnRzLmRlY29kZShlbmNvZGluZykKQEAgLTkxNCw2ICs5MTgsOCBAQAogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZSBpcyBpbnNwZWN0LmdldG1vZHVsZShvYmplY3QpCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fZGljdF9fIGlzIG9iamVjdC5fX2dsb2JhbHNfXworICAgICAgICBlbGlmIGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKG9iamVjdCk6CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9iamVjdC5fX29iamNsYXNzX18uX19tb2R1bGVfXwogICAgICAgICBlbGlmIGluc3BlY3QuaXNjbGFzcyhvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5fX25hbWVfXyA9PSBvYmplY3QuX19tb2R1bGVfXwogICAgICAgICBlbGlmIGhhc2F0dHIob2JqZWN0LCAnX19tb2R1bGVfXycpOgpAQCAtOTQ2LDcgKzk1Miw3IEBACiAgICAgICAgICAgICBmb3IgdmFsbmFtZSwgdmFsIGluIG9iai5fX2RpY3RfXy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHZhbG5hbWUgPSAnJXMuJXMnICUgKG5hbWUsIHZhbG5hbWUpCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIGZ1bmN0aW9ucyAmIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0LmlzZnVuY3Rpb24odmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSkgYW5kCisgICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnJvbV9tb2R1bGUobW9kdWxlLCB2YWwpKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluZCh0ZXN0cywgdmFsLCB2YWxuYW1lLCBtb2R1bGUsIHNvdXJjZV9saW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9icywgc2VlbikKQEAgLTk1OCw5ICs5NjQsOCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb2NUZXN0RmluZGVyLmZpbmQ6IF9fdGVzdF9fIGtleXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN0cmluZ3M6ICVyIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUodmFsbmFtZSksKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzbWV0aG9kKHZhbCkgb3IgaW5zcGVjdC5pc21vZHVsZSh2YWwpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IgaXNpbnN0YW5jZSh2YWwsIHN0cikpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb2NUZXN0RmluZGVyLmZpbmQ6IF9fdGVzdF9fIHZhbHVlcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5ncywgZnVuY3Rpb25zLCBtZXRob2RzLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzZXMsIG9yIG1vZHVsZXM6ICVyIiAlCkBAIC05NzksNyArOTg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0YXR0cihvYmosIHZhbG5hbWUpLl9fZnVuY19fCiAKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gbWV0aG9kcywgcHJvcGVydGllcywgYW5kIG5lc3RlZCBjbGFzc2VzLgotICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgcHJvcGVydHkpKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICB2YWxuYW1lID0gJyVzLiVzJyAlIChuYW1lLCB2YWxuYW1lKQpAQCAtMTM0Miw2ICsxMzQ3LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAoInVua25vd24gb3V0Y29tZSIsIG91dGNvbWUpCiAKKyAgICAgICAgICAgIGlmIGZhaWx1cmVzIGFuZCBzZWxmLm9wdGlvbmZsYWdzICYgRkFJTF9GQVNUOgorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgIyBSZXN0b3JlIHRoZSBvcHRpb24gZmxhZ3MgKGluIGNhc2UgdGhleSB3ZXJlIG1vZGlmaWVkKQogICAgICAgICBzZWxmLm9wdGlvbmZsYWdzID0gb3JpZ2luYWxfb3B0aW9uZmxhZ3MKIApAQCAtMjI4Myw2ICsyMjkxLDEyIEBACiAgICAgX19zdHJfXyA9IHNob3J0RGVzY3JpcHRpb24KIAogCitjbGFzcyBfRG9jVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisKKyAgICBkZWYgX3JlbW92ZVRlc3RBdEluZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgcGFzcworCisKIGRlZiBEb2NUZXN0U3VpdGUobW9kdWxlPU5vbmUsIGdsb2JzPU5vbmUsIGV4dHJhZ2xvYnM9Tm9uZSwgdGVzdF9maW5kZXI9Tm9uZSwKICAgICAgICAgICAgICAgICAgKipvcHRpb25zKToKICAgICAiIiIKQEAgLTIzMjgsNyArMjM0Miw3IEBACiAKICAgICBpZiBub3QgdGVzdHMgYW5kIHN5cy5mbGFncy5vcHRpbWl6ZSA+PTI6CiAgICAgICAgICMgU2tpcCBkb2N0ZXN0cyB3aGVuIHJ1bm5pbmcgd2l0aCAtTzIKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogICAgICAgICBzdWl0ZS5hZGRUZXN0KFNraXBEb2NUZXN0Q2FzZShtb2R1bGUpKQogICAgICAgICByZXR1cm4gc3VpdGUKICAgICBlbGlmIG5vdCB0ZXN0czoKQEAgLTIzNDIsNyArMjM1Niw3IEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobW9kdWxlLCAiaGFzIG5vIGRvY3N0cmluZ3MiKQogCiAgICAgdGVzdHMuc29ydCgpCi0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlID0gX0RvY1Rlc3RTdWl0ZSgpCiAKICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKICAgICAgICAgaWYgbGVuKHRlc3QuZXhhbXBsZXMpID09IDA6CkBAIC0yNDUyLDcgKzI0NjYsNyBAQAogICAgIGVuY29kaW5nCiAgICAgICBBbiBlbmNvZGluZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBmaWxlcyB0byB1bmljb2RlLgogICAgICIiIgotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgIyBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCBfbm9ybWFsaXplX21vZHVsZSBpcyBjYWxsZWQgYXQgdGhlIHJpZ2h0CiAgICAgIyBsZXZlbC4gIElmIGl0IHdlcmUgY2FsbGVkIGluIERvY0ZpbGVUZXN0LCB0aGVuIHRoaXMgZnVuY3Rpb24KQEAgLTI3MDIsMTMgKzI3MTYsMzAgQEAKIAogCiBkZWYgX3Rlc3QoKToKLSAgICB0ZXN0ZmlsZXMgPSBbYXJnIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdIGlmIGFyZyBhbmQgYXJnWzBdICE9ICctJ10KLSAgICBpZiBub3QgdGVzdGZpbGVzOgotICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKLSAgICAgICAgaWYgJ19fbG9hZGVyX18nIGluIGdsb2JhbHMoKTogICAgICAgICAgIyBweXRob24gLW0KLSAgICAgICAgICAgIG5hbWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCi0gICAgICAgIHByaW50KCJ1c2FnZTogezB9IFstdl0gZmlsZSAuLi4iLmZvcm1hdChuYW1lKSkKLSAgICAgICAgcmV0dXJuIDIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iZG9jdGVzdCBydW5uZXIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCB2ZXJ5IHZlcmJvc2Ugb3V0cHV0IGZvciBhbGwgdGVzdHMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3B0aW9uJywgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1PUFRJT05GTEFHU19CWV9OQU1FLmtleXMoKSwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzcGVjaWZ5IGEgZG9jdGVzdCBvcHRpb24gZmxhZyB0byBhcHBseScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdG8gdGhlIHRlc3QgcnVuOyBtYXkgYmUgc3BlY2lmaWVkIG1vcmUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRoYW4gb25jZSB0byBhcHBseSBtdWx0aXBsZSBvcHRpb25zJykpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mYWlsLWZhc3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ3N0b3AgcnVubmluZyB0ZXN0cyBhZnRlciBmaXJzdCBmYWlsdXJlICh0aGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyBhIHNob3J0aGFuZCBmb3IgLW8gRkFJTF9GQVNULCBhbmQgaXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciAtbyBvcHRpb25zKScpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGUnLCBuYXJncz0nKycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3RzIHRvIHJ1bicpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB0ZXN0ZmlsZXMgPSBhcmdzLmZpbGUKKyAgICAjIFZlcmJvc2UgdXNlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSAiaW5zcGVjdCBhcmd2IiBtYWdpYyBpbiBEb2NUZXN0UnVubmVyLAorICAgICMgYnV0IHNpbmNlIHdlIGFyZSB1c2luZyBhcmdwYXJzZSB3ZSBhcmUgcGFzc2luZyBpdCBtYW51YWxseSBub3cuCisgICAgdmVyYm9zZSA9IGFyZ3MudmVyYm9zZQorICAgIG9wdGlvbnMgPSAwCisgICAgZm9yIG9wdGlvbiBpbiBhcmdzLm9wdGlvbjoKKyAgICAgICAgb3B0aW9ucyB8PSBPUFRJT05GTEFHU19CWV9OQU1FW29wdGlvbl0KKyAgICBpZiBhcmdzLmZhaWxfZmFzdDoKKyAgICAgICAgb3B0aW9ucyB8PSBGQUlMX0ZBU1QKICAgICBmb3IgZmlsZW5hbWUgaW4gdGVzdGZpbGVzOgogICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6CiAgICAgICAgICAgICAjIEl0IGlzIGEgbW9kdWxlIC0tIGluc2VydCBpdHMgZGlyIGludG8gc3lzLnBhdGggYW5kIHRyeSB0bwpAQCAtMjcxOCw5ICsyNzQ5LDEwIEBACiAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlybmFtZSkKICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKGZpbGVuYW1lWzotM10pCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtKQorICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0bW9kKG0sIHZlcmJvc2U9dmVyYm9zZSwgb3B0aW9uZmxhZ3M9b3B0aW9ucykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgcmV0dXJuIDEKICAgICByZXR1cm4gMApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5IGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CmluZGV4IDI5MTQzN2MuLjAzOTIzNzkgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQorKysgYi9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKQEAgLTM2OCw4ICszNjgsNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIChpbmRlbnQgKyAnICAgICEhIGludmFsaWQgZWxlbWVudCBpbiB0b2tlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpc3Q6IHshcn0nLmZvcm1hdCh0b2tlbikpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdG9rZW4uX3BwKGluZGVudCsnICAgICcpCiAgICAgICAgIGlmIHNlbGYuZGVmZWN0czoKICAgICAgICAgICAgIGV4dHJhID0gJyBEZWZlY3RzOiB7fScuZm9ybWF0KHNlbGYuZGVmZWN0cykKICAgICAgICAgZWxzZToKQEAgLTEzMTUsMjQgKzEzMTQsMjIgQEAKICMgUGFyc2VyCiAjCiAKLSIiIlBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KLQotVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKLXJldHVybnMgZWl0aGVyIGEgVGVybWluYWwgb3IgYSBUb2tlbkxpc3QgcmVwcmVzZW50aW5nIHRoZSBSRkMgb2JqZWN0IG5hbWVkCi1ieSB0aGUgbWV0aG9kIGFuZCBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZW1haW5pbmcgdW5wYXJzZWQgY2hhcmFjdGVycwotZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0Ci1vZiBhIGdpdmVuIHR5cGUgYW5kIHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNvbnN0cnVjdCBwbHVzIHRoZQotdW5wYXJzZWQgcmVtYWluZGVyIG9mIHRoZSBpbnB1dCBzdHJpbmcuCi0KLUZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZWQgaGVhZGVyIGlzIGEgJ3BocmFzZScsCi10aGVuOgotCi0gICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCi0KLXJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQotY2hhcmFjdGVycyBsZWZ0IGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIHBocmFzZSBpcyByZW1vdmVkLgotCi0iIiIKKyMgUGFyc2Ugc3RyaW5ncyBhY2NvcmRpbmcgdG8gUkZDODIyLzIwNDcvMjgyMi81MzIyIHJ1bGVzLgorIworIyBUaGlzIGlzIGEgc3RhdGVsZXNzIHBhcnNlci4gIEVhY2ggZ2V0X1hYWCBmdW5jdGlvbiBhY2NlcHRzIGEgc3RyaW5nIGFuZAorIyByZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAorIyBieSB0aGUgbWV0aG9kIGFuZCBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZW1haW5pbmcgdW5wYXJzZWQgY2hhcmFjdGVycworIyBmcm9tIHRoZSBpbnB1dC4gIFRodXMgYSBwYXJzZXIgbWV0aG9kIGNvbnN1bWVzIHRoZSBuZXh0IHN5bnRhY3RpYyBjb25zdHJ1Y3QKKyMgb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKKyMgdW5wYXJzZWQgcmVtYWluZGVyIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisjCisjIEZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZWQgaGVhZGVyIGlzIGEgJ3BocmFzZScsCisjIHRoZW46CisjCisjICAgICBwaHJhc2UsIHZhbHVlID0gZ2V0X3BocmFzZSh2YWx1ZSkKKyMKKyMgcmV0dXJucyB0aGUgY29tcGxldGUgcGhyYXNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdmFsdWUsIHBsdXMgYW55CisjIGNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KIAogX3dzcF9zcGxpdHRlciA9IHJlLmNvbXBpbGUocicoW3t9XSspJy5mb3JtYXQoJycuam9pbihXU1ApKSkuc3BsaXQKIF9ub25fYXRvbV9lbmRfbWF0Y2hlciA9IHJlLmNvbXBpbGUociJbXnt9XSsiLmZvcm1hdCgKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weSBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYzNjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsMjQ5IEBACitpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBlbWFpbC5jaGFyc2V0CitpbXBvcnQgZW1haWwubWVzc2FnZQoraW1wb3J0IGVtYWlsLmVycm9ycworZnJvbSBlbWFpbCBpbXBvcnQgcXVvcHJpbWltZQorCitjbGFzcyBDb250ZW50TWFuYWdlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfaGFuZGxlcnMgPSB7fQorICAgICAgICBzZWxmLnNldF9oYW5kbGVycyA9IHt9CisKKyAgICBkZWYgYWRkX2dldF9oYW5kbGVyKHNlbGYsIGtleSwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzW2tleV0gPSBoYW5kbGVyCisKKyAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgIGNvbnRlbnRfdHlwZSA9IG1zZy5nZXRfY29udGVudF90eXBlKCkKKyAgICAgICAgaWYgY29udGVudF90eXBlIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzW2NvbnRlbnRfdHlwZV0obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgbWFpbnR5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKQorICAgICAgICBpZiBtYWludHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1ttYWludHlwZV0obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgaWYgJycgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbJyddKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIHJhaXNlIEtleUVycm9yKGNvbnRlbnRfdHlwZSkKKworICAgIGRlZiBhZGRfc2V0X2hhbmRsZXIoc2VsZiwgdHlwZWtleSwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuc2V0X2hhbmRsZXJzW3R5cGVrZXldID0gaGFuZGxlcgorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgb2JqLCAqYXJncywgKiprdyk6CisgICAgICAgIGlmIG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgIyBYWFg6IGlzIHRoaXMgZXJyb3IgYSBnb29kIGlkZWEgb3Igbm90PyAgV2UgY2FuIHJlbW92ZSBpdCBsYXRlciwKKyAgICAgICAgICAgICMgYnV0IHdlIGNhbid0IGFkZCBpdCBsYXRlciwgc28gZG8gaXQgZm9yIG5vdy4KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2V0X2NvbnRlbnQgbm90IHZhbGlkIG9uIG11bHRpcGFydCIpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLl9maW5kX3NldF9oYW5kbGVyKG1zZywgb2JqKQorICAgICAgICBtc2cuY2xlYXJfY29udGVudCgpCisgICAgICAgIGhhbmRsZXIobXNnLCBvYmosICphcmdzLCAqKmt3KQorCisgICAgZGVmIF9maW5kX3NldF9oYW5kbGVyKHNlbGYsIG1zZywgb2JqKToKKyAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IE5vbmUKKyAgICAgICAgZm9yIHR5cCBpbiB0eXBlKG9iaikuX19tcm9fXzoKKyAgICAgICAgICAgIGlmIHR5cCBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbdHlwXQorICAgICAgICAgICAgcW5hbWUgPSB0eXAuX19xdWFsbmFtZV9fCisgICAgICAgICAgICBtb2RuYW1lID0gZ2V0YXR0cih0eXAsICdfX21vZHVsZV9fJywgJycpCisgICAgICAgICAgICBmdWxsX3BhdGggPSAnLicuam9pbigobW9kbmFtZSwgcW5hbWUpKSBpZiBtb2RuYW1lIGVsc2UgcW5hbWUKKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0aF9mb3JfZXJyb3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGhfZm9yX2Vycm9yID0gZnVsbF9wYXRoCisgICAgICAgICAgICBpZiBmdWxsX3BhdGggaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW2Z1bGxfcGF0aF0KKyAgICAgICAgICAgIGlmIHFuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1txbmFtZV0KKyAgICAgICAgICAgIG5hbWUgPSB0eXAuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW25hbWVdCisgICAgICAgIGlmIE5vbmUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbTm9uZV0KKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoZnVsbF9wYXRoX2Zvcl9lcnJvcikKKworCityYXdfZGF0YV9tYW5hZ2VyID0gQ29udGVudE1hbmFnZXIoKQorCisKK2RlZiBnZXRfdGV4dF9jb250ZW50KG1zZywgZXJyb3JzPSdyZXBsYWNlJyk6CisgICAgY29udGVudCA9IG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkKKyAgICBjaGFyc2V0ID0gbXNnLmdldF9wYXJhbSgnY2hhcnNldCcsICdBU0NJSScpCisgICAgcmV0dXJuIGNvbnRlbnQuZGVjb2RlKGNoYXJzZXQsIGVycm9ycz1lcnJvcnMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcigndGV4dCcsIGdldF90ZXh0X2NvbnRlbnQpCisKKworZGVmIGdldF9ub25fdGV4dF9jb250ZW50KG1zZyk6CisgICAgcmV0dXJuIG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkKK2ZvciBtYWludHlwZSBpbiAnYXVkaW8gaW1hZ2UgdmlkZW8gYXBwbGljYXRpb24nLnNwbGl0KCk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIobWFpbnR5cGUsIGdldF9ub25fdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbWVzc2FnZV9jb250ZW50KG1zZyk6CisgICAgcmV0dXJuIG1zZy5nZXRfcGF5bG9hZCgwKQorZm9yIHN1YnR5cGUgaW4gJ3JmYzgyMiBleHRlcm5hbC1ib2R5Jy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCdtZXNzYWdlLycrc3VidHlwZSwgZ2V0X21lc3NhZ2VfY29udGVudCkKKworCitkZWYgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudChtc2cpOgorICAgICMgSWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCBhIG1lc3NhZ2Ugc3VidHlwZSwgd2UgYXJlIHN1cHBvc2VkIHRvIHRyZWF0IGl0IGFzCisgICAgIyBpZiBpdCB3ZXJlIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSwgcGVyCisgICAgIyB0b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuNC4gIEZlZWRwYXJzZXIgZG9lc24ndCBkbyB0aGF0LAorICAgICMgc28gZG8gb3VyIGJlc3QgdG8gZml4IHRoaW5ncyB1cC4gIE5vdGUgdGhhdCBpdCBpcyAqbm90KiBhcHByb3ByaWF0ZSB0bworICAgICMgbW9kZWwgbWVzc2FnZS9wYXJ0aWFsIGNvbnRlbnQgYXMgTWVzc2FnZSBvYmplY3RzLCBzbyB0aGV5IGFyZSBoYW5kbGVkCisgICAgIyBoZXJlIGFzIHdlbGwuICAoSG93IHRvIHJlYXNzZW1ibGUgdGhlbSBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgY29tbWVudCA6KQorICAgIHJldHVybiBieXRlcyhtc2cuZ2V0X3BheWxvYWQoMCkpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYW5kX2ZpeHVwX3Vua25vd25fbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBfcHJlcGFyZV9zZXQobXNnLCBtYWludHlwZSwgc3VidHlwZSwgaGVhZGVycyk6CisgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICcvJy5qb2luKChtYWludHlwZSwgc3VidHlwZSkpCisgICAgaWYgaGVhZGVyczoKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoaGVhZGVyc1swXSwgJ25hbWUnKToKKyAgICAgICAgICAgIG1wID0gbXNnLnBvbGljeQorICAgICAgICAgICAgaGVhZGVycyA9IFttcC5oZWFkZXJfZmFjdG9yeSgqbXAuaGVhZGVyX3NvdXJjZV9wYXJzZShbaGVhZGVyXSkpCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyc10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBoZWFkZXJzOgorICAgICAgICAgICAgICAgIGlmIGhlYWRlci5kZWZlY3RzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBoZWFkZXIuZGVmZWN0c1swXQorICAgICAgICAgICAgICAgIG1zZ1toZWFkZXIubmFtZV0gPSBoZWFkZXIKKyAgICAgICAgZXhjZXB0IGVtYWlsLmVycm9ycy5IZWFkZXJEZWZlY3QgYXMgZXhjOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBoZWFkZXI6IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5mb2xkKHBvbGljeT1tc2cucG9saWN5KSkpIGZyb20gZXhjCisKKworZGVmIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKToKKyAgICBpZiBkaXNwb3NpdGlvbiBpcyBOb25lIGFuZCBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZGlzcG9zaXRpb24gPSAnYXR0YWNobWVudCcKKyAgICBpZiBkaXNwb3NpdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBkaXNwb3NpdGlvbgorICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBtc2cuc2V0X3BhcmFtKCdmaWxlbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdDb250ZW50LURpc3Bvc2l0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgaWYgY2lkIGlzIG5vdCBOb25lOgorICAgICAgICBtc2dbJ0NvbnRlbnQtSUQnXSA9IGNpZAorICAgIGlmIHBhcmFtcyBpcyBub3QgTm9uZToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyYW1zLml0ZW1zKCk6CisgICAgICAgICAgICBtc2cuc2V0X3BhcmFtKGtleSwgdmFsdWUpCisKKworIyBYWFg6IFRoaXMgaXMgYSBjbGVhbmVkLXVwIHZlcnNpb24gb2YgYmFzZTY0bWltZS5ib2R5X2VuY29kZS4gIEl0IHdvdWxkCisjIGJlIG5pY2UgdG8gZHJvcCBib3RoIHRoaXMgYW5kIHF1b3ByaW1pbWUuYm9keV9lbmNvZGUgaW4gZmF2b3Igb2YKKyMgZW5oYW5jZWQgYmluYXNjaWkgcm91dGluZXMgdGhhdCBhY2NlcHRlZCBhIG1heF9saW5lX2xlbmd0aCBwYXJhbWV0ZXIuCitkZWYgX2VuY29kZV9iYXNlNjQoZGF0YSwgbWF4X2xpbmVfbGVuZ3RoKToKKyAgICBlbmNvZGVkX2xpbmVzID0gW10KKyAgICB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUgPSBtYXhfbGluZV9sZW5ndGggKiAzIC8vIDQKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIHVuZW5jb2RlZF9ieXRlc19wZXJfbGluZSk6CisgICAgICAgIHRoaXNsaW5lID0gZGF0YVtpOmkrdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lXQorICAgICAgICBlbmNvZGVkX2xpbmVzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KHRoaXNsaW5lKS5kZWNvZGUoJ2FzY2lpJykpCisgICAgcmV0dXJuICcnLmpvaW4oZW5jb2RlZF9saW5lcykKKworCitkZWYgX2VuY29kZV90ZXh0KHN0cmluZywgY2hhcnNldCwgY3RlLCBwb2xpY3kpOgorICAgIGxpbmVzID0gc3RyaW5nLmVuY29kZShjaGFyc2V0KS5zcGxpdGxpbmVzKCkKKyAgICBsaW5lc2VwID0gcG9saWN5LmxpbmVzZXAuZW5jb2RlKCdhc2NpaScpCisgICAgZGVmIGVtYmVkZWRfYm9keShsaW5lcyk6IHJldHVybiBsaW5lc2VwLmpvaW4obGluZXMpICsgbGluZXNlcAorICAgIGRlZiBub3JtYWxfYm9keShsaW5lcyk6IHJldHVybiBiJ1xuJy5qb2luKGxpbmVzKSArIGInXG4nCisgICAgaWYgY3RlPT1Ob25lOgorICAgICAgICAjIFVzZSBoZXVyaXN0aWNzIHRvIGRlY2lkZSBvbiB0aGUgImJlc3QiIGVuY29kaW5nLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gJzdiaXQnLCBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIChwb2xpY3kuY3RlX3R5cGUgPT0gJzhiaXQnIGFuZAorICAgICAgICAgICAgICAgIG1heChsZW4oeCkgZm9yIHggaW4gbGluZXMpIDw9IHBvbGljeS5tYXhfbGluZV9sZW5ndGgpOgorICAgICAgICAgICAgcmV0dXJuICc4Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgc25pZmYgPSBlbWJlZGVkX2JvZHkobGluZXNbOjEwXSkKKyAgICAgICAgc25pZmZfcXAgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKHNuaWZmLmRlY29kZSgnbGF0aW4tMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICAgICAgc25pZmZfYmFzZTY0ID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzbmlmZikKKyAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIHVuZmFpciB0byBxcDsgaXQgaW5jbHVkZXMgbGluZXNlcHMsIGJhc2U2NCBkb2Vzbid0LgorICAgICAgICBpZiBsZW4oc25pZmZfcXApID4gbGVuKHNuaWZmX2Jhc2U2NCk6CisgICAgICAgICAgICBjdGUgPSAnYmFzZTY0JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3RlID0gJ3F1b3RlZC1wcmludGFibGUnCisgICAgICAgICAgICBpZiBsZW4obGluZXMpIDw9IDEwOgorICAgICAgICAgICAgICAgIHJldHVybiBjdGUsIHNuaWZmX3FwCisgICAgaWYgY3RlID09ICc3Yml0JzoKKyAgICAgICAgZGF0YSA9IG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSA9PSAnOGJpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgIGVsaWYgY3RlID09ICdxdW90ZWQtcHJpbnRhYmxlJzoKKyAgICAgICAgZGF0YSA9IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUobm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnbGF0aW4tMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsaWYgY3RlID09ICdiYXNlNjQnOgorICAgICAgICBkYXRhID0gX2VuY29kZV9iYXNlNjQoZW1iZWRlZF9ib2R5KGxpbmVzKSwgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGNvbnRlbnQgdHJhbnNmZXIgZW5jb2Rpbmcge30iLmZvcm1hdChjdGUpKQorICAgIHJldHVybiBjdGUsIGRhdGEKKworCitkZWYgc2V0X3RleHRfY29udGVudChtc2csIHN0cmluZywgc3VidHlwZT0icGxhaW4iLCBjaGFyc2V0PSd1dGYtOCcsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAndGV4dCcsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgY3RlLCBwYXlsb2FkID0gX2VuY29kZV90ZXh0KHN0cmluZywgY2hhcnNldCwgY3RlLCBtc2cucG9saWN5KQorICAgIG1zZy5zZXRfcGF5bG9hZChwYXlsb2FkKQorICAgIG1zZy5zZXRfcGFyYW0oJ2NoYXJzZXQnLAorICAgICAgICAgICAgICAgICAgZW1haWwuY2hhcnNldC5BTElBU0VTLmdldChjaGFyc2V0LCBjaGFyc2V0KSwKKyAgICAgICAgICAgICAgICAgIHJlcGxhY2U9VHJ1ZSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoc3RyLCBzZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBzZXRfbWVzc2FnZV9jb250ZW50KG1zZywgbWVzc2FnZSwgc3VidHlwZT0icmZjODIyIiwgY3RlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBpZiBzdWJ0eXBlID09ICdwYXJ0aWFsJzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWVzc2FnZS9wYXJ0aWFsIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIE1lc3NhZ2Ugb2JqZWN0cyIpCisgICAgaWYgc3VidHlwZSA9PSAncmZjODIyJzoKKyAgICAgICAgaWYgY3RlIG5vdCBpbiAoTm9uZSwgJzdiaXQnLCAnOGJpdCcsICdiaW5hcnknKToKKyAgICAgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi4xIG1hbmRhdGUuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJtZXNzYWdlL3JmYzgyMiBwYXJ0cyBkbyBub3Qgc3VwcG9ydCBjdGU9e30iLmZvcm1hdChjdGUpKQorICAgICAgICAjIDhiaXQgd2lsbCBnZXQgY29lcmNlZCBvbiBzZXJpYWxpemF0aW9uIGlmIHBvbGljeS5jdGVfdHlwZT0nN2JpdCcuICBXZQorICAgICAgICAjIG1heSBlbmQgdXAgY2xhaW1pbmcgOGJpdCB3aGVuIGl0IGlzbid0IG5lZWRlZCwgYnV0IHRoZSBvbmx5IG5lZ2F0aXZlCisgICAgICAgICMgcmVzdWx0IG9mIHRoYXQgc2hvdWxkIGJlIGEgZ2F0ZXdheSB0aGF0IG5lZWRzIHRvIGNvZXJjZSB0byA3Yml0CisgICAgICAgICMgaGF2aW5nIHRvIGxvb2sgdGhyb3VnaCB0aGUgd2hvbGUgZW1iZWRkZWQgbWVzc2FnZSB0byBkaXNjb3ZlciB3aGV0aGVyCisgICAgICAgICMgb3Igbm90IGl0IGFjdHVhbGx5IGhhcyB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgY3RlID0gJzhiaXQnIGlmIGN0ZSBpcyBOb25lIGVsc2UgY3RlCisgICAgZWxpZiBzdWJ0eXBlID09ICdleHRlcm5hbC1ib2R5JzoKKyAgICAgICAgaWYgY3RlIG5vdCBpbiAoTm9uZSwgJzdiaXQnKToKKyAgICAgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi4zIG1hbmRhdGUuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJtZXNzYWdlL2V4dGVybmFsLWJvZHkgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgY3RlID0gJzdiaXQnCisgICAgZWxpZiBjdGUgaXMgTm9uZToKKyAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQgc2F5cyBhbGwgZnV0dXJlCisgICAgICAgICMgc3VidHlwZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gN2JpdCwgc28gYXNzdW1lIHRoYXQuCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIF9wcmVwYXJlX3NldChtc2csICdtZXNzYWdlJywgc3VidHlwZSwgaGVhZGVycykKKyAgICBtc2cuc2V0X3BheWxvYWQoW21lc3NhZ2VdKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcihlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsIHNldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIHNldF9ieXRlc19jb250ZW50KG1zZywgZGF0YSwgbWFpbnR5cGUsIHN1YnR5cGUsIGN0ZT0nYmFzZTY0JywKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgaWYgY3RlID09ICdiYXNlNjQnOgorICAgICAgICBkYXRhID0gX2VuY29kZV9iYXNlNjQoZGF0YSwgbWF4X2xpbmVfbGVuZ3RoPW1zZy5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsaWYgY3RlID09ICdxdW90ZWQtcHJpbnRhYmxlJzoKKyAgICAgICAgIyBYWFg6IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUgd29uJ3QgZW5jb2RlIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBkYXRhLAorICAgICAgICAjIHNvIHdlIGNhbid0IHVzZSBpdC4gIFRoaXMgbWVhbnMgbWF4X2xpbmVfbGVuZ3RoIGlzIGlnbm9yZWQuICBBbm90aGVyCisgICAgICAgICMgYnVnIHRvIGZpeCBsYXRlci4gIChOb3RlOiBlbmNvZGVycy5xdW9wcmkgaXMgYnJva2VuIG9uIGxpbmUgZW5kcy4pCisgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5iMmFfcXAoZGF0YSwgaXN0ZXh0PUZhbHNlLCBoZWFkZXI9RmFsc2UsIHF1b3RldGFicz1UcnVlKQorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgICMgTWFrZSBzdXJlIGl0IHJlYWxseSBpcyBvbmx5IEFTQ0lJLiAgVGhlIGVhcmx5IHdhcm5pbmcgaGVyZSBzZWVtcworICAgICAgICAjIHdvcnRoIHRoZSBvdmVyaGVhZC4uLmlmIHlvdSBjYXJlIHdyaXRlIHlvdXIgb3duIGNvbnRlbnQgbWFuYWdlciA6KS4KKyAgICAgICAgZGF0YS5lbmNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSBpbiAoJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBtc2cuc2V0X3BheWxvYWQoZGF0YSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorZm9yIHR5cCBpbiAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldyk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIodHlwLCBzZXRfYnl0ZXNfY29udGVudCkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5IGIvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKaW5kZXggZWE0MWU5NS4uZWI3NWZlMyAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkKQEAgLTk4LDI0ICs5OCwxNSBAQAogICAgICAgICAiIiJQdXNoIHNvbWUgbmV3IGRhdGEgaW50byB0aGlzIG9iamVjdC4iIiIKICAgICAgICAgIyBIYW5kbGUgYW55IHByZXZpb3VzIGxlZnRvdmVycwogICAgICAgICBkYXRhLCBzZWxmLl9wYXJ0aWFsID0gc2VsZi5fcGFydGlhbCArIGRhdGEsICcnCi0gICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBuZXdsaW5lcyBvbiB0aGUgZW5kIG9mIGVhY2gKLSAgICAgICAgcGFydHMgPSBOTENSRV9jcmFjay5zcGxpdChkYXRhKQotICAgICAgICAjIFRoZSAqYWhlbSogaW50ZXJlc3RpbmcgYmVoYXZpb3VyIG9mIHJlLnNwbGl0IHdoZW4gc3VwcGxpZWQgZ3JvdXBpbmcKLSAgICAgICAgIyBwYXJlbnRoZXNlcyBpcyB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHJlc3VsdGluZyBsaXN0IGlzIHRoZQotICAgICAgICAjIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIFJFLiAgSW4gdGhlIGNhc2Ugb2YgYSBOTC9DUiB0ZXJtaW5hdGVkIHN0cmluZywKLSAgICAgICAgIyB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoKQotICAgICAgICAjR0FOIDI5TWFyMDkgIGJ1Z3MgMTU1NTU3MCwgMTcyMTg2MiAgQ29uZnVzaW9uIGF0IDhLIGJvdW5kYXJ5IGVuZGluZyB3aXRoIFxyOgotICAgICAgICAjIGlzIHRoZXJlIGEgXG4gdG8gZm9sbG93IGxhdGVyPwotICAgICAgICBpZiBub3Qgc2VsZi5fcGFydGlhbCBhbmQgcGFydHMgYW5kIHBhcnRzWy0xXS5lbmRzd2l0aCgnXHInKToKLSAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoLTIpK3BhcnRzLnBvcCgpCi0gICAgICAgICMgcGFydHMgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIGFsdGVybmF0aW5nIGJldHdlZW4gdGhlIGxpbmUgY29udGVudHMKLSAgICAgICAgIyBhbmQgdGhlIGVvbCBjaGFyYWN0ZXIocykuICBHYXRoZXIgdXAgYSBsaXN0IG9mIGxpbmVzIGFmdGVyCi0gICAgICAgICMgcmUtYXR0YWNoaW5nIHRoZSBuZXdsaW5lcy4KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFydHMpIC8vIDIpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHBhcnRzW2kqMl0gKyBwYXJ0c1tpKjIrMV0pCi0gICAgICAgIHNlbGYucHVzaGxpbmVzKGxpbmVzKQorICAgICAgICAjIENyYWNrIGludG8gbGluZXMsIGJ1dCBwcmVzZXJ2ZSB0aGUgbGluZXNlcCBjaGFyYWN0ZXJzIG9uIHRoZSBlbmQgb2YgZWFjaAorICAgICAgICBwYXJ0cyA9IGRhdGEuc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAjIElmIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgZG9lcyBub3QgZW5kIGluIGEgbmV3bGluZSwgdGhlbiB0cmVhdAorICAgICAgICAjIGl0IGFzIGEgcGFydGlhbCBsaW5lLiAgV2Ugb25seSBjaGVjayBmb3IgJ1xuJyBoZXJlIGJlY2F1c2UgYSBsaW5lCisgICAgICAgICMgZW5kaW5nIHdpdGggJ1xyJyBtaWdodCBiZSBhIGxpbmUgdGhhdCB3YXMgc3BsaXQgaW4gdGhlIG1pZGRsZSBvZiBhCisgICAgICAgICMgJ1xyXG4nIHNlcXVlbmNlIChzZWUgYnVncyAxNTU1NTcwIGFuZCAxNzIxODYyKS4KKyAgICAgICAgaWYgcGFydHMgYW5kIG5vdCBwYXJ0c1stMV0uZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICBzZWxmLl9wYXJ0aWFsID0gcGFydHMucG9wKCkKKyAgICAgICAgc2VsZi5wdXNobGluZXMocGFydHMpCiAKICAgICBkZWYgcHVzaGxpbmVzKHNlbGYsIGxpbmVzKToKICAgICAgICAgIyBSZXZlcnNlIGFuZCBpbnNlcnQgYXQgdGhlIGZyb250IG9mIHRoZSBsaW5lcy4KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkgYi9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CmluZGV4IDNhZGM0YTAuLmI1NTAyZWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKKysrIGIvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQpAQCAtMjYsOCArMjYsNyBAQAogICAgIHlpZWxkIHNlbGYKICAgICBpZiBzZWxmLmlzX211bHRpcGFydCgpOgogICAgICAgICBmb3Igc3VicGFydCBpbiBzZWxmLmdldF9wYXlsb2FkKCk6Ci0gICAgICAgICAgICBmb3Igc3Vic3VicGFydCBpbiBzdWJwYXJ0LndhbGsoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJzdWJwYXJ0CisgICAgICAgICAgICB5aWVsZCBmcm9tIHN1YnBhcnQud2FsaygpCiAKIAogDApAQCAtNDAsOCArMzksNyBAQAogICAgIGZvciBzdWJwYXJ0IGluIG1zZy53YWxrKCk6CiAgICAgICAgIHBheWxvYWQgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1kZWNvZGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF5bG9hZCwgc3RyKToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIFN0cmluZ0lPKHBheWxvYWQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gU3RyaW5nSU8ocGF5bG9hZCkKIAogCiBkZWYgdHlwZWRfc3VicGFydF9pdGVyYXRvcihtc2csIG1haW50eXBlPSd0ZXh0Jywgc3VidHlwZT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5IGIvTGliL2VtYWlsL21lc3NhZ2UucHkKaW5kZXggZjQzYTM4MC4uY2U2NzNiMCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL21lc3NhZ2UucHkKKysrIGIvTGliL2VtYWlsL21lc3NhZ2UucHkKQEAgLTgsOCArOCw2IEBACiAKIGltcG9ydCByZQogaW1wb3J0IHV1Ci1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQgYmluYXNjaWkKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPCiAKICMgSW50cmFwYWNrYWdlIGltcG9ydHMKQEAgLTEzMiwyMiArMTMwLDUwIEBACiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIFRoaXMgaW5jbHVkZXMgdGhlIGhlYWRlcnMsIGJvZHksIGFuZCBlbnZlbG9wZSBoZWFkZXIuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hc19zdHJpbmcoKQogCi0gICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTApOgorICAgIGRlZiBhc19zdHJpbmcoc2VsZiwgdW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wLCBwb2xpY3k9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgc3RyaW5nLgotICAgICAgICBPcHRpb25hbCBgdW5peGZyb20nIHdoZW4gVHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQotICAgICAgICBoZWFkZXIuCiAKLSAgICAgICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBhbmQgbWF5IG5vdCBnZW5lcmF0ZSB0aGUgbWVzc2FnZSBleGFjdGx5Ci0gICAgICAgIGFzIHlvdSBpbnRlbmQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgdXNlIHRoZSBmbGF0dGVuKCkgbWV0aG9kIG9mIGEKLSAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlLgorICAgICAgICBPcHRpb25hbCAndW5peGZyb20nLCB3aGVuIHRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKKyAgICAgICAgaGVhZGVyLiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgaWYgbWF4aGVhZGVybGVuIGlzCisgICAgICAgIG5vdCBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gMCwgc28geW91IG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseQorICAgICAgICBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBtYXhoZWFkZXJsZW4uICAncG9saWN5JyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICAgIEdlbmVyYXRvciBpbnN0YW5jZSB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgbWVzYXNnZTsgaWYgaXQgaXMgbm90CisgICAgICAgIHNwZWNpZmllZCB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSBpbnN0YW5jZSBpcyB1c2VkLgorCisgICAgICAgIElmIHRoZSBtZXNzYWdlIG9iamVjdCBjb250YWlucyBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdCBlbmNvZGVkCisgICAgICAgIGFjY29yZGluZyB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkKKyAgICAgICAgdW5pY29kZSAidW5rbm93biBjaGFyYWN0ZXIiIGNvZGUgcG9pbnRzLgogICAgICAgICAiIiIKICAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQogICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgZyA9IEdlbmVyYXRvcihmcCwgbWFuZ2xlX2Zyb21fPUZhbHNlLCBtYXhoZWFkZXJsZW49bWF4aGVhZGVybGVuKQorICAgICAgICBnID0gR2VuZXJhdG9yKGZwLAorICAgICAgICAgICAgICAgICAgICAgIG1hbmdsZV9mcm9tXz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBtYXhoZWFkZXJsZW49bWF4aGVhZGVybGVuLAorICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihzZWxmLCB1bml4ZnJvbT11bml4ZnJvbSkKKyAgICAgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKKworICAgIGRlZiBfX2J5dGVzX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNfYnl0ZXMoKQorCisgICAgZGVmIGFzX2J5dGVzKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgYnl0ZXMgb2JqZWN0LgorCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICAncG9saWN5JyBpcyBwYXNzZWQgdG8gdGhlIEJ5dGVzR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8KKyAgICAgICAgc2VyaWFsaXplIHRoZSBtZXNzYWdlOyBpZiBub3Qgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICIiIgorICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kgaWYgcG9saWN5IGlzIE5vbmUgZWxzZSBwb2xpY3kKKyAgICAgICAgZnAgPSBCeXRlc0lPKCkKKyAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIHBvbGljeT1wb2xpY3kpCiAgICAgICAgIGcuZmxhdHRlbihzZWxmLCB1bml4ZnJvbT11bml4ZnJvbSkKICAgICAgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKIApAQCAtNjUxLDcgKzY3Nyw3IEBACiAgICAgICAgIHJldHVybiBmYWlsb2JqCiAKICAgICBkZWYgc2V0X3BhcmFtKHNlbGYsIHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsCi0gICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnKToKKyAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycsIHJlcGxhY2U9RmFsc2UpOgogICAgICAgICAiIiJTZXQgYSBwYXJhbWV0ZXIgaW4gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCiAKICAgICAgICAgSWYgdGhlIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZQpAQCAtNjk1LDggKzcyMSwxMSBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGN0eXBlID0gU0VNSVNQQUNFLmpvaW4oW2N0eXBlLCBhcHBlbmRfcGFyYW1dKQogICAgICAgICBpZiBjdHlwZSAhPSBzZWxmLmdldChoZWFkZXIpOgotICAgICAgICAgICAgZGVsIHNlbGZbaGVhZGVyXQotICAgICAgICAgICAgc2VsZltoZWFkZXJdID0gY3R5cGUKKyAgICAgICAgICAgIGlmIHJlcGxhY2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlX2hlYWRlcihoZWFkZXIsIGN0eXBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZltoZWFkZXJdCisgICAgICAgICAgICAgICAgc2VsZltoZWFkZXJdID0gY3R5cGUKIAogICAgIGRlZiBkZWxfcGFyYW0oc2VsZiwgcGFyYW0sIGhlYWRlcj0nY29udGVudC10eXBlJywgcmVxdW90ZT1UcnVlKToKICAgICAgICAgIiIiUmVtb3ZlIHRoZSBnaXZlbiBwYXJhbWV0ZXIgY29tcGxldGVseSBmcm9tIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgpAQCAtODc3LDMgKzkwNiwyMDggQEAKIAogICAgICMgSS5lLiBkZWYgd2FsayhzZWxmKTogLi4uCiAgICAgZnJvbSBlbWFpbC5pdGVyYXRvcnMgaW1wb3J0IHdhbGsKKworCitjbGFzcyBNSU1FUGFydChNZXNzYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSBlbWFpbC5wb2xpY3kgaW1wb3J0IGRlZmF1bHQKKyAgICAgICAgICAgIHBvbGljeSA9IGRlZmF1bHQKKyAgICAgICAgTWVzc2FnZS5fX2luaXRfXyhzZWxmLCBwb2xpY3kpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgY19kID0gc2VsZi5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKQorICAgICAgICBpZiBjX2QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gY19kLmxvd2VyKCkgPT0gJ2F0dGFjaG1lbnQnCisKKyAgICBkZWYgX2ZpbmRfYm9keShzZWxmLCBwYXJ0LCBwcmVmZXJlbmNlbGlzdCk6CisgICAgICAgIGlmIHBhcnQuaXNfYXR0YWNobWVudDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgaWYgc3VidHlwZSBpbiBwcmVmZXJlbmNlbGlzdDoKKyAgICAgICAgICAgICAgICB5aWVsZCAocHJlZmVyZW5jZWxpc3QuaW5kZXgoc3VidHlwZSksIHBhcnQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFpbnR5cGUgIT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSAhPSAncmVsYXRlZCc6CisgICAgICAgICAgICBmb3Igc3VicGFydCBpbiBwYXJ0Lml0ZXJfcGFydHMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmRfYm9keShzdWJwYXJ0LCBwcmVmZXJlbmNlbGlzdCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAncmVsYXRlZCcgaW4gcHJlZmVyZW5jZWxpc3Q6CisgICAgICAgICAgICB5aWVsZCAocHJlZmVyZW5jZWxpc3QuaW5kZXgoJ3JlbGF0ZWQnKSwgcGFydCkKKyAgICAgICAgY2FuZGlkYXRlID0gTm9uZQorICAgICAgICBzdGFydCA9IHBhcnQuZ2V0X3BhcmFtKCdzdGFydCcpCisgICAgICAgIGlmIHN0YXJ0OgorICAgICAgICAgICAgZm9yIHN1YnBhcnQgaW4gcGFydC5pdGVyX3BhcnRzKCk6CisgICAgICAgICAgICAgICAgaWYgc3VicGFydFsnY29udGVudC1pZCddID09IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBzdWJwYXJ0CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGNhbmRpZGF0ZSBpcyBOb25lOgorICAgICAgICAgICAgc3VicGFydHMgPSBwYXJ0LmdldF9wYXlsb2FkKCkKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHN1YnBhcnRzWzBdIGlmIHN1YnBhcnRzIGVsc2UgTm9uZQorICAgICAgICBpZiBjYW5kaWRhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmRfYm9keShjYW5kaWRhdGUsIHByZWZlcmVuY2VsaXN0KQorCisgICAgZGVmIGdldF9ib2R5KHNlbGYsIHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJykpOgorICAgICAgICAiIiJSZXR1cm4gYmVzdCBjYW5kaWRhdGUgbWltZSBwYXJ0IGZvciBkaXNwbGF5IGFzICdib2R5JyBvZiBtZXNzYWdlLgorCisgICAgICAgIERvIGEgZGVwdGggZmlyc3Qgc2VhcmNoLCBzdGFydGluZyB3aXRoIHNlbGYsIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBwYXJ0CisgICAgICAgIG1hdGNoaW5nIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHByZWZlcmVuY2VsaXN0LCBhbmQgcmV0dXJuIHRoZSBwYXJ0CisgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGl0ZW0gdGhhdCBoYXMgYSBtYXRjaCwgb3IgTm9uZSBpZiBubyBpdGVtcworICAgICAgICBoYXZlIGEgbWF0Y2guICBJZiAncmVsYXRlZCcgaXMgbm90IGluY2x1ZGVkIGluIHByZWZlcmVuY2VsaXN0LCBjb25zaWRlcgorICAgICAgICB0aGUgcm9vdCBwYXJ0IG9mIGFueSBtdWx0aXBhcnQvcmVsYXRlZCBlbmNvdW50ZXJlZCBhcyBhIGNhbmRpZGF0ZQorICAgICAgICBtYXRjaC4gIElnbm9yZSBwYXJ0cyB3aXRoICdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50Jy4KKyAgICAgICAgIiIiCisgICAgICAgIGJlc3RfcHJpbyA9IGxlbihwcmVmZXJlbmNlbGlzdCkKKyAgICAgICAgYm9keSA9IE5vbmUKKyAgICAgICAgZm9yIHByaW8sIHBhcnQgaW4gc2VsZi5fZmluZF9ib2R5KHNlbGYsIHByZWZlcmVuY2VsaXN0KToKKyAgICAgICAgICAgIGlmIHByaW8gPCBiZXN0X3ByaW86CisgICAgICAgICAgICAgICAgYmVzdF9wcmlvID0gcHJpbworICAgICAgICAgICAgICAgIGJvZHkgPSBwYXJ0CisgICAgICAgICAgICAgICAgaWYgcHJpbyA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gYm9keQorCisgICAgX2JvZHlfdHlwZXMgPSB7KCd0ZXh0JywgJ3BsYWluJyksCisgICAgICAgICAgICAgICAgICAgKCd0ZXh0JywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAoJ211bHRpcGFydCcsICdyZWxhdGVkJyksCisgICAgICAgICAgICAgICAgICAgKCdtdWx0aXBhcnQnLCAnYWx0ZXJuYXRpdmUnKX0KKyAgICBkZWYgaXRlcl9hdHRhY2htZW50cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIG5vbi1tYWluIHBhcnRzIG9mIGEgbXVsdGlwYXJ0LgorCisgICAgICAgIFNraXAgdGhlIGZpcnN0IG9mIGVhY2ggb2NjdXJyZW5jZSBvZiB0ZXh0L3BsYWluLCB0ZXh0L2h0bWwsCisgICAgICAgIG11bHRpcGFydC9yZWxhdGVkLCBvciBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgaW4gdGhlIG11bHRpcGFydCAodW5sZXNzCisgICAgICAgIHRoZXkgaGF2ZSBhICdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50JyBoZWFkZXIpIGFuZCBpbmNsdWRlIGFsbAorICAgICAgICByZW1haW5pbmcgc3VicGFydHMgaW4gdGhlIHJldHVybmVkIGl0ZXJhdG9yLiAgV2hlbiBhcHBsaWVkIHRvIGEKKyAgICAgICAgbXVsdGlwYXJ0L3JlbGF0ZWQsIHJldHVybiBhbGwgcGFydHMgZXhjZXB0IHRoZSByb290IHBhcnQuICBSZXR1cm4gYW4KKyAgICAgICAgZW1wdHkgaXRlcmF0b3Igd2hlbiBhcHBsaWVkIHRvIGEgbXVsdGlwYXJ0L2FsdGVybmF0aXZlIG9yIGEKKyAgICAgICAgbm9uLW11bHRpcGFydC4KKyAgICAgICAgIiIiCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gc2VsZi5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICBpZiBtYWludHlwZSAhPSAnbXVsdGlwYXJ0JyBvciBzdWJ0eXBlID09ICdhbHRlcm5hdGl2ZSc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcGFydHMgPSBzZWxmLmdldF9wYXlsb2FkKCkKKyAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ211bHRpcGFydCcgYW5kIHN1YnR5cGUgPT0gJ3JlbGF0ZWQnOgorICAgICAgICAgICAgIyBGb3IgcmVsYXRlZCwgd2UgdHJlYXQgZXZlcnl0aGluZyBidXQgdGhlIHJvb3QgYXMgYW4gYXR0YWNobWVudC4KKyAgICAgICAgICAgICMgVGhlIHJvb3QgbWF5IGJlIGluZGljYXRlZCBieSAnc3RhcnQnOyBpZiB0aGVyZSdzIG5vIHN0YXJ0IG9yIHdlCisgICAgICAgICAgICAjIGNhbid0IGZpbmQgdGhlIG5hbWVkIHN0YXJ0LCB0cmVhdCB0aGUgZmlyc3Qgc3VicGFydCBhcyB0aGUgcm9vdC4KKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5nZXRfcGFyYW0oJ3N0YXJ0JykKKyAgICAgICAgICAgIGlmIHN0YXJ0OgorICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50cyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcnQuZ2V0KCdjb250ZW50LWlkJykgPT0gc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGF0dGFjaG1lbnRzCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcGFydHMucG9wKDApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHBhcnRzCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBPdGhlcndpc2Ugd2UgbW9yZSBvciBsZXNzIGludmVydCB0aGUgcmVtYWluaW5nIGxvZ2ljIGluIGdldF9ib2R5LgorICAgICAgICAjIFRoaXMgb25seSByZWFsbHkgd29ya3MgaW4gZWRnZSBjYXNlcyAoZXg6IG5vbi10ZXh0IHJlbGF0ZWRzIG9yCisgICAgICAgICMgYWx0ZXJuYXRpdmVzKSBpZiB0aGUgc2VuZGluZyBhZ2VudCBzZXRzIGNvbnRlbnQtZGlzcG9zaXRpb24uCisgICAgICAgIHNlZW4gPSBbXSAgICMgT25seSBza2lwIHRoZSBmaXJzdCBleGFtcGxlIG9mIGVhY2ggY2FuZGlkYXRlIHR5cGUuCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBwYXJ0LmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgICAgICBpZiAoKG1haW50eXBlLCBzdWJ0eXBlKSBpbiBzZWxmLl9ib2R5X3R5cGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBub3QgcGFydC5pc19hdHRhY2htZW50IGFuZCBzdWJ0eXBlIG5vdCBpbiBzZWVuKToKKyAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChzdWJ0eXBlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBwYXJ0CisKKyAgICBkZWYgaXRlcl9wYXJ0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIGltbWVkaWF0ZSBzdWJwYXJ0cyBvZiBhIG11bHRpcGFydC4KKworICAgICAgICBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IgZm9yIGEgbm9uLW11bHRpcGFydC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5nZXRfcGF5bG9hZCgpCisKKyAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgY29udGVudF9tYW5hZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgPSBzZWxmLnBvbGljeS5jb250ZW50X21hbmFnZXIKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRfbWFuYWdlci5nZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCAqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpOgorICAgICAgICBpZiBjb250ZW50X21hbmFnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciA9IHNlbGYucG9saWN5LmNvbnRlbnRfbWFuYWdlcgorICAgICAgICBjb250ZW50X21hbmFnZXIuc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgX21ha2VfbXVsdGlwYXJ0KHNlbGYsIHN1YnR5cGUsIGRpc2FsbG93ZWRfc3VidHlwZXMsIGJvdW5kYXJ5KToKKyAgICAgICAgaWYgc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgZXhpc3Rpbmdfc3VidHlwZSA9IHNlbGYuZ2V0X2NvbnRlbnRfc3VidHlwZSgpCisgICAgICAgICAgICBkaXNhbGxvd2VkX3N1YnR5cGVzID0gZGlzYWxsb3dlZF9zdWJ0eXBlcyArIChzdWJ0eXBlLCkKKyAgICAgICAgICAgIGlmIGV4aXN0aW5nX3N1YnR5cGUgaW4gZGlzYWxsb3dlZF9zdWJ0eXBlczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCB7fSB0byB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19zdWJ0eXBlLCBzdWJ0eXBlKSkKKyAgICAgICAga2VlcF9oZWFkZXJzID0gW10KKyAgICAgICAgcGFydF9oZWFkZXJzID0gW10KKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuX2hlYWRlcnM6CisgICAgICAgICAgICBpZiBuYW1lLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKToKKyAgICAgICAgICAgICAgICBwYXJ0X2hlYWRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtlZXBfaGVhZGVycy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgaWYgcGFydF9oZWFkZXJzOgorICAgICAgICAgICAgIyBUaGVyZSBpcyBleGlzdGluZyBjb250ZW50LCBtb3ZlIGl0IHRvIHRoZSBmaXJzdCBzdWJwYXJ0LgorICAgICAgICAgICAgcGFydCA9IHR5cGUoc2VsZikocG9saWN5PXNlbGYucG9saWN5KQorICAgICAgICAgICAgcGFydC5faGVhZGVycyA9IHBhcnRfaGVhZGVycworICAgICAgICAgICAgcGFydC5fcGF5bG9hZCA9IHNlbGYuX3BheWxvYWQKKyAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbcGFydF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbXQorICAgICAgICBzZWxmLl9oZWFkZXJzID0ga2VlcF9oZWFkZXJzCisgICAgICAgIHNlbGZbJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBpZiBib3VuZGFyeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2V0X3BhcmFtKCdib3VuZGFyeScsIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfcmVsYXRlZChzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ3JlbGF0ZWQnLCAoJ2FsdGVybmF0aXZlJywgJ21peGVkJyksIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfYWx0ZXJuYXRpdmUoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScsICgnbWl4ZWQnLCksIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfbWl4ZWQoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdtaXhlZCcsICgpLCBib3VuZGFyeSkKKworICAgIGRlZiBfYWRkX211bHRpcGFydChzZWxmLCBfc3VidHlwZSwgKmFyZ3MsIF9kaXNwPU5vbmUsICoqa3cpOgorICAgICAgICBpZiAoc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpICE9ICdtdWx0aXBhcnQnIG9yCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfY29udGVudF9zdWJ0eXBlKCkgIT0gX3N1YnR5cGUpOgorICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnbWFrZV8nICsgX3N1YnR5cGUpKCkKKyAgICAgICAgcGFydCA9IHR5cGUoc2VsZikocG9saWN5PXNlbGYucG9saWN5KQorICAgICAgICBwYXJ0LnNldF9jb250ZW50KCphcmdzLCAqKmt3KQorICAgICAgICBpZiBfZGlzcCBhbmQgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIG5vdCBpbiBwYXJ0OgorICAgICAgICAgICAgcGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddID0gX2Rpc3AKKyAgICAgICAgc2VsZi5hdHRhY2gocGFydCkKKworICAgIGRlZiBhZGRfcmVsYXRlZChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ3JlbGF0ZWQnLCAqYXJncywgX2Rpc3A9J2lubGluZScsICoqa3cpCisKKyAgICBkZWYgYWRkX2FsdGVybmF0aXZlKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgnYWx0ZXJuYXRpdmUnLCAqYXJncywgKiprdykKKworICAgIGRlZiBhZGRfYXR0YWNobWVudChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ21peGVkJywgKmFyZ3MsIF9kaXNwPSdhdHRhY2htZW50JywgKiprdykKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5faGVhZGVycyA9IFtdCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBOb25lCisKKyAgICBkZWYgY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgc2VsZi5faGVhZGVycyA9IFsobiwgdikgZm9yIG4sIHYgaW4gc2VsZi5faGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKV0KKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IE5vbmUKKworCitjbGFzcyBFbWFpbE1lc3NhZ2UoTUlNRVBhcnQpOgorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc3VwZXIoKS5zZXRfY29udGVudCgqYXJncywgKiprdykKKyAgICAgICAgaWYgJ01JTUUtVmVyc2lvbicgbm90IGluIHNlbGY6CisgICAgICAgICAgICBzZWxmWydNSU1FLVZlcnNpb24nXSA9ICcxLjAnCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcGFyc2VyLnB5IGIvTGliL2VtYWlsL3BhcnNlci5weQppbmRleCA3NTJiZjM1Li5mNDlkMzFkIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9wYXJzZXIucHkKQEAgLTQsNyArNCw4IEBACiAKICIiIkEgcGFyc2VyIG9mIFJGQyAyODIyIGFuZCBNSU1FIGVtYWlsIG1lc3NhZ2VzLiIiIgogCi1fX2FsbF9fID0gWydQYXJzZXInLCAnSGVhZGVyUGFyc2VyJywgJ0J5dGVzUGFyc2VyJywgJ0J5dGVzSGVhZGVyUGFyc2VyJ10KK19fYWxsX18gPSBbJ1BhcnNlcicsICdIZWFkZXJQYXJzZXInLCAnQnl0ZXNQYXJzZXInLCAnQnl0ZXNIZWFkZXJQYXJzZXInLAorICAgICAgICAgICAnRmVlZFBhcnNlcicsICdCeXRlc0ZlZWRQYXJzZXInXQogCiBpbXBvcnQgd2FybmluZ3MKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBUZXh0SU9XcmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcG9saWN5LnB5IGIvTGliL2VtYWlsL3BvbGljeS5weQppbmRleCAzOGU4OGFmLi5mMGIyMGY0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcG9saWN5LnB5CisrKyBiL0xpYi9lbWFpbC9wb2xpY3kucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBQb2xpY3ksIENvbXBhdDMyLCBjb21wYXQzMiwgX2V4dGVuZF9kb2NzdHJpbmdzCiBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBfaGFzX3N1cnJvZ2F0ZXMKIGZyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEhlYWRlclJlZ2lzdHJ5IGFzIEhlYWRlclJlZ2lzdHJ5Citmcm9tIGVtYWlsLmNvbnRlbnRtYW5hZ2VyIGltcG9ydCByYXdfZGF0YV9tYW5hZ2VyCiAKIF9fYWxsX18gPSBbCiAgICAgJ0NvbXBhdDMyJywKQEAgLTU4LDEwICs1OSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB0cmVhdG1lbnQsIHdoaWxlIGFsbCBvdGhlciBmaWVsZHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCisKKyAgICBjb250ZW50X21hbmFnZXIgICAgIC0tIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNldF9jb250ZW50LiAgV2hlbiB0aGUgZ2V0X2NvbnRlbnQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250ZW50IG1ldGhvZCBvZiBhIE1lc3NhZ2Ugb2JqZWN0IGlzIGNhbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNhbGxzIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKwogICAgICIiIgogCiAgICAgcmVmb2xkX3NvdXJjZSA9ICdsb25nJwogICAgIGhlYWRlcl9mYWN0b3J5ID0gSGVhZGVyUmVnaXN0cnkoKQorICAgIGNvbnRlbnRfbWFuYWdlciA9IHJhd19kYXRhX21hbmFnZXIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKICAgICAgICAgIyBFbnN1cmUgdGhhdCBlYWNoIG5ldyBpbnN0YW5jZSBnZXRzIGEgdW5pcXVlIGhlYWRlciBmYWN0b3J5CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdXRpbHMucHkgYi9MaWIvZW1haWwvdXRpbHMucHkKaW5kZXggOTNhNjI1Yy4uMjViMGQ1NiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3V0aWxzLnB5CisrKyBiL0xpYi9lbWFpbC91dGlscy5weQpAQCAtNTQsMTcgKzU0LDI3IEBACiBzcGVjaWFsc3JlID0gcmUuY29tcGlsZShyJ1tdW1xcKCk8PkAsOjsiLl0nKQogZXNjYXBlc3JlID0gcmUuY29tcGlsZShyJ1tcXCJdJykKIAotIyBIb3cgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBzdHJpbmdzIHRoYXQgY29tZSBmcm9tIGEgYnl0ZQotIyBzb3VyY2Ugd2l0aCB1bmRlY29kYWJsZSBjaGFyYWN0ZXJzLgotX2hhc19zdXJyb2dhdGVzID0gcmUuY29tcGlsZSgKLSAgICAnKFteXHVkODAwLVx1ZGJmZl18XEEpW1x1ZGMwMC1cdWRmZmZdKFteXHVkYzAwLVx1ZGZmZl18XFopJykuc2VhcmNoCitkZWYgX2hhc19zdXJyb2dhdGVzKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgY29udGFpbnMgc3Vycm9nYXRlLWVzY2FwZWQgYmluYXJ5IGRhdGEuIiIiCisgICAgIyBUaGlzIGNoZWNrIGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdW5sZXNzIHRoZXJlIGFyZSBzdXJyb2dhdGVzLCB1dGY4CisgICAgIyAoUHl0aG9uJ3MgZGVmYXVsdCBlbmNvZGluZykgY2FuIGVuY29kZSBhbnkgc3RyaW5nLiAgVGhpcyBpcyB0aGUgZmFzdGVzdAorICAgICMgd2F5IHRvIGNoZWNrIGZvciBzdXJyb2dhdGVzLCBzZWUgaXNzdWUgMTE0NTQgZm9yIHRpbWluZ3MuCisgICAgdHJ5OgorICAgICAgICBzLmVuY29kZSgpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCiAKICMgSG93IHRvIGRlYWwgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGJ5dGVzIGJlZm9yZSBoYW5kaW5nIGl0IHRvIHRoZQogIyBhcHBsaWNhdGlvbiB0aHJvdWdoIHRoZSAnbm9ybWFsJyBpbnRlcmZhY2UuCiBkZWYgX3Nhbml0aXplKHN0cmluZyk6Ci0gICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4KLSAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpCisgICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4gIElmIHRoZSBlc2NhcGVkCisgICAgIyBieXRlcyBoYXBwZW4gdG8gYmUgdXRmLTggdGhleSB3aWxsIGluc3RlYWQgZ2V0IGRlY29kZWQsIGV2ZW4gaWYgdGhleQorICAgICMgd2VyZSBpbnZhbGlkIGluIHRoZSBjaGFyc2V0IHRoZSBzb3VyY2Ugd2FzIHN1cHBvc2VkIHRvIGJlIGluLiAgVGhpcworICAgICMgc2VlbXMgbGlrZSBpdCBpcyBub3QgYSBiYWQgdGhpbmc7IGEgZGVmZWN0IHdhcyBzdGlsbCByZWdpc3RlcmVkLgorICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICByZXR1cm4gb3JpZ2luYWxfYnl0ZXMuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKKwogCiAKICMgSGVscGVycwpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5IGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CmluZGV4IDIzNWRlYjUuLjU0NjFhYTAgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKQEAgLTMzLDkgKzMzLDkgQEAKICAgICAndXMnICAgICAgICAgICAgICAgICA6ICdhc2NpaScsCiAgICAgJ3VzX2FzY2lpJyAgICAgICAgICAgOiAnYXNjaWknLAogCi0gICAgIyMgYmFzZTY0X2NvZGVjIGNvZGVjCi0gICAgIydiYXNlNjQnICAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCi0gICAgIydiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCisgICAgIyBiYXNlNjRfY29kZWMgY29kZWMKKyAgICAnYmFzZTY0JyAgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAorICAgICdiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCiAKICAgICAjIGJpZzUgY29kZWMKICAgICAnYmlnNV90dycgICAgICAgICAgICA6ICdiaWc1JywKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAnYmlnNV9oa3NjcycgICAgICAgICA6ICdiaWc1aGtzY3MnLAogICAgICdoa3NjcycgICAgICAgICAgICAgIDogJ2JpZzVoa3NjcycsCiAKLSAgICAjIyBiejJfY29kZWMgY29kZWMKLSAgICAjJ2J6MicgICAgICAgICAgICAgICAgOiAnYnoyX2NvZGVjJywKKyAgICAjIGJ6Ml9jb2RlYyBjb2RlYworICAgICdiejInICAgICAgICAgICAgICAgIDogJ2J6Ml9jb2RlYycsCiAKICAgICAjIGNwMDM3IGNvZGVjCiAgICAgJzAzNycgICAgICAgICAgICAgICAgOiAnY3AwMzcnLApAQCAtNjMsNiArNjMsMTIgQEAKICAgICAnY3NpYm0xMDI2JyAgICAgICAgICA6ICdjcDEwMjYnLAogICAgICdpYm0xMDI2JyAgICAgICAgICAgIDogJ2NwMTAyNicsCiAKKyAgICAjIGNwMTEyNSBjb2RlYworICAgICcxMTI1JyAgICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdpYm0xMTI1JyAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdjcDg2NnUnICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdydXNjaWknICAgICAgICAgICAgICA6ICdjcDExMjUnLAorCiAgICAgIyBjcDExNDAgY29kZWMKICAgICAnMTE0MCcgICAgICAgICAgICAgICA6ICdjcDExNDAnLAogICAgICdpYm0xMTQwJyAgICAgICAgICAgIDogJ2NwMTE0MCcsCkBAIC0yNDgsOCArMjU0LDggQEAKICAgICAnY3A5MzYnICAgICAgICAgICAgICA6ICdnYmsnLAogICAgICdtczkzNicgICAgICAgICAgICAgIDogJ2diaycsCiAKLSAgICAjIyBoZXhfY29kZWMgY29kZWMKLSAgICAjJ2hleCcgICAgICAgICAgICAgICAgOiAnaGV4X2NvZGVjJywKKyAgICAjIGhleF9jb2RlYyBjb2RlYworICAgICdoZXgnICAgICAgICAgICAgICAgIDogJ2hleF9jb2RlYycsCiAKICAgICAjIGhwX3JvbWFuOCBjb2RlYwogICAgICdyb21hbjgnICAgICAgICAgICAgIDogJ2hwX3JvbWFuOCcsCkBAIC00NTAsMTMgKzQ1NiwxMyBAQAogICAgICdjcDE1NCcgICAgICAgICAgICAgIDogJ3B0Y3AxNTQnLAogICAgICdjeXJpbGxpY19hc2lhbicgICAgIDogJ3B0Y3AxNTQnLAogCi0gICAgIyMgcXVvcHJpX2NvZGVjIGNvZGVjCi0gICAgIydxdW9wcmknICAgICAgICAgICAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRwcmludGFibGUnICAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgIyBxdW9wcmlfY29kZWMgY29kZWMKKyAgICAncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICdxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgJ3F1b3RlZHByaW50YWJsZScgICAgOiAncXVvcHJpX2NvZGVjJywKIAotICAgICMjIHJvdF8xMyBjb2RlYwotICAgICMncm90MTMnICAgICAgICAgICAgICA6ICdyb3RfMTMnLAorICAgICMgcm90XzEzIGNvZGVjCisgICAgJ3JvdDEzJyAgICAgICAgICAgICAgOiAncm90XzEzJywKIAogICAgICMgc2hpZnRfamlzIGNvZGVjCiAgICAgJ2Nzc2hpZnRqaXMnICAgICAgICAgOiAnc2hpZnRfamlzJywKQEAgLTUxOCwxMiArNTI0LDEyIEBACiAgICAgJ3V0ZjhfdWNzMicgICAgICAgICAgOiAndXRmXzgnLAogICAgICd1dGY4X3VjczQnICAgICAgICAgIDogJ3V0Zl84JywKIAotICAgICMjIHV1X2NvZGVjIGNvZGVjCi0gICAgIyd1dScgICAgICAgICAgICAgICAgIDogJ3V1X2NvZGVjJywKKyAgICAjIHV1X2NvZGVjIGNvZGVjCisgICAgJ3V1JyAgICAgICAgICAgICAgICAgOiAndXVfY29kZWMnLAogCi0gICAgIyMgemxpYl9jb2RlYyBjb2RlYwotICAgICMnemlwJyAgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKLSAgICAjJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgIyB6bGliX2NvZGVjIGNvZGVjCisgICAgJ3ppcCcgICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCiAKICAgICAjIHRlbXBvcmFyeSBtYWMgQ0pLIGFsaWFzZXMsIHdpbGwgYmUgcmVwbGFjZWQgYnkgcHJvcGVyIGNvZGVjcyBpbiAzLjEKICAgICAneF9tYWNfamFwYW5lc2UnICAgICAgOiAnc2hpZnRfamlzJywKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvYmFzZTY0X2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKaW5kZXggMzIxYTk2MS4uODgxZDFiYSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKQEAgLTUyLDQgKzUyLDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQppbmRleCBlNjVkMjI2Li5mZDk0OTVlIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQpAQCAtNzQsNCArNzQsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5IGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQppbmRleCBiZmUyYzFlLi40ZWRkNzA4IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGQ5JyAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKICAgICAnXHhkYScgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCiAgICAgJ1x4OWYnICAgICAjICAweEZGIC0+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+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CmluZGV4IGUwMDNmYzMuLmYyZWQwYTcgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CkBAIC01Miw0ICs1Miw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5IGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKaW5kZXggZDljYzUxNi4uOGNmYzAxZiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKKysrIGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGZkJyAgICAgIyAgMHhGRCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCiAgICAgJ1x4ZmUnICAgICAjICAweEZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQogICAgICdceGZmJyAgICAgIyAgMHhGRiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUwotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQppbmRleCA5MjQzZmM0Li43MGY3MDgzIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQpAQCAtNTMsNCArNTMsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weSBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CmluZGV4IDMxNDBjMTQuLmZmZjkxNTMgMTAwNzU1Ci0tLSBhL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKIAogIyMjIE1hcApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKaW5kZXggNjljNmYxNy4uZTMyNjllNCAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CkBAIC05Niw0ICs5Niw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weQppbmRleCBlMGI5Y2RhLi40YzgxY2ExIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5CkBAIC03NCw0ICs3NCw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZGFjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOTIgQEAKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBwa2d1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKworIyBUT0RPOiBSZW1vdmUgdGhlIC0tcHJlIGZsYWcgd2hlbiBhIHBpcCAxLjUgZmluYWwgY29weSBpcyBhdmFpbGFibGUKKworCitfX2FsbF9fID0gWyJ2ZXJzaW9uIiwgImJvb3RzdHJhcCJdCisKKworX1NFVFVQVE9PTFNfVkVSU0lPTiA9ICIxLjMuMiIKKworX1BJUF9WRVJTSU9OID0gIjEuNS5yYzEiCisKK19QUk9KRUNUUyA9IFsKKyAgICAoInNldHVwdG9vbHMiLCBfU0VUVVBUT09MU19WRVJTSU9OKSwKKyAgICAoInBpcCIsIF9QSVBfVkVSU0lPTiksCitdCisKKworZGVmIF9ydW5fcGlwKGFyZ3MsIGFkZGl0aW9uYWxfcGF0aHMpOgorICAgICMgQWRkIG91ciBidW5kbGVkIHNvZnR3YXJlIHRvIHRoZSBzeXMucGF0aCBzbyB3ZSBjYW4gaW1wb3J0IGl0CisgICAgc3lzLnBhdGggPSBhZGRpdGlvbmFsX3BhdGhzICsgc3lzLnBhdGgKKworICAgICMgSW5zdGFsbCB0aGUgYnVuZGxlZCBzb2Z0d2FyZQorICAgIGltcG9ydCBwaXAKKyAgICBwaXAubWFpbihhcmdzKQorCisKK2RlZiB2ZXJzaW9uKCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgcGlwLgorICAgICIiIgorICAgIHJldHVybiBfUElQX1ZFUlNJT04KKworCitkZWYgYm9vdHN0cmFwKCosIHJvb3Q9Tm9uZSwgdXBncmFkZT1GYWxzZSwgdXNlcj1GYWxzZSwKKyAgICAgICAgICAgICAgYWx0aW5zdGFsbD1GYWxzZSwgZGVmYXVsdF9waXA9RmFsc2UsCisgICAgICAgICAgICAgIHZlcmJvc2l0eT0wKToKKyAgICAiIiIKKyAgICBCb290c3RyYXAgcGlwIGludG8gdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiAob3IgdGhlIGdpdmVuIHJvb3QKKyAgICBkaXJlY3RvcnkpLgorICAgICIiIgorICAgIGlmIGFsdGluc3RhbGwgYW5kIGRlZmF1bHRfcGlwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgdXNlIGFsdGluc3RhbGwgYW5kIGRlZmF1bHRfcGlwIHRvZ2V0aGVyIikKKworICAgICMgQnkgZGVmYXVsdCwgaW5zdGFsbGluZyBwaXAgYW5kIHNldHVwdG9vbHMgaW5zdGFsbHMgYWxsIG9mIHRoZQorICAgICMgZm9sbG93aW5nIHNjcmlwdHMgKFguWSA9PSBydW5uaW5nIFB5dGhvbiB2ZXJzaW9uKToKKyAgICAjCisgICAgIyAgIHBpcCwgcGlwWCwgcGlwWC5ZLCBlYXN5X2luc3RhbGwsIGVhc3lfaW5zdGFsbC1YLlkKKyAgICAjCisgICAgIyBwaXAgMS41KyBhbGxvd3MgZW5zdXJlcGlwIHRvIHJlcXVlc3QgdGhhdCBzb21lIG9mIHRob3NlIGJlIGxlZnQgb3V0CisgICAgaWYgYWx0aW5zdGFsbDoKKyAgICAgICAgIyBvbWl0IHBpcCwgcGlwWCBhbmQgZWFzeV9pbnN0YWxsCisgICAgICAgIG9zLmVudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0gPSAiYWx0aW5zdGFsbCIKKyAgICBlbGlmIG5vdCBkZWZhdWx0X3BpcDoKKyAgICAgICAgIyBvbWl0IHBpcCBhbmQgZWFzeV9pbnN0YWxsCisgICAgICAgIG9zLmVudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0gPSAiaW5zdGFsbCIKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgorICAgICAgICAjIFB1dCBvdXIgYnVuZGxlZCB3aGVlbHMgaW50byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgIyBhZGRpdGlvbmFsIHBhdGhzIHRoYXQgbmVlZCBhZGRlZCB0byBzeXMucGF0aAorICAgICAgICBhZGRpdGlvbmFsX3BhdGhzID0gW10KKyAgICAgICAgZm9yIHByb2plY3QsIHZlcnNpb24gaW4gX1BST0pFQ1RTOgorICAgICAgICAgICAgd2hlZWxfbmFtZSA9ICJ7fS17fS1weTIucHkzLW5vbmUtYW55LndobCIuZm9ybWF0KHByb2plY3QsIHZlcnNpb24pCisgICAgICAgICAgICB3aGwgPSBwa2d1dGlsLmdldF9kYXRhKAorICAgICAgICAgICAgICAgICJlbnN1cmVwaXAiLAorICAgICAgICAgICAgICAgICJfYnVuZGxlZC97fSIuZm9ybWF0KHdoZWVsX25hbWUpLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0bXBkaXIsIHdoZWVsX25hbWUpLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSh3aGwpCisKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbih0bXBkaXIsIHdoZWVsX25hbWUpKQorCisgICAgICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgICAgICBhcmdzID0gWworICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXIsCisgICAgICAgICAgICAjIFRlbXBvcmFyeSB1bnRpbCBwaXAgMS41IGlzIGZpbmFsCisgICAgICAgICAgICAiLS1wcmUiLAorICAgICAgICBdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTg0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNjYgQEAKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGVuc3VyZXBpcAorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0icHl0aG9uIC1tIGVuc3VyZXBpcCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpLAorICAgICAgICBoZWxwPSJTaG93IHRoZSB2ZXJzaW9uIG9mIHBpcCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIFB5dGhvbi4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLXYiLCAiLS12ZXJib3NlIiwKKyAgICAgICAgYWN0aW9uPSJjb3VudCIsCisgICAgICAgIGRlZmF1bHQ9MCwKKyAgICAgICAgZGVzdD0idmVyYm9zaXR5IiwKKyAgICAgICAgaGVscD0oIkdpdmUgbW9yZSBvdXRwdXQuIE9wdGlvbiBpcyBhZGRpdGl2ZSwgYW5kIGNhbiBiZSB1c2VkIHVwIHRvIDMgIgorICAgICAgICAgICAgICAidGltZXMuIiksCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItVSIsICItLXVwZ3JhZGUiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSJVcGdyYWRlIHBpcCBhbmQgZGVwZW5kZW5jaWVzLCBldmVuIGlmIGFscmVhZHkgaW5zdGFsbGVkLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXVzZXIiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSJJbnN0YWxsIHVzaW5nIHRoZSB1c2VyIHNjaGVtZS4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1yb290IiwKKyAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICBoZWxwPSJJbnN0YWxsIGV2ZXJ5dGhpbmcgcmVsYXRpdmUgdG8gdGhpcyBhbHRlcm5hdGUgcm9vdCBkaXJlY3RvcnkuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tYWx0aW5zdGFsbCIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KCJNYWtlIGFuIGFsdGVybmF0ZSBpbnN0YWxsLCBpbnN0YWxsaW5nIG9ubHkgdGhlIFguWSB2ZXJzaW9uZWQiCisgICAgICAgICAgICAgICJzY3JpcHRzIChEZWZhdWx0OiBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbC1YLlkpIiksCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWRlZmF1bHQtcGlwIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oIk1ha2UgYSBkZWZhdWx0IHBpcCBpbnN0YWxsLCBpbnN0YWxsaW5nIHRoZSB1bnF1YWxpZmllZCBwaXAgIgorICAgICAgICAgICAgICAiYW5kIGVhc3lfaW5zdGFsbCBpbiBhZGRpdGlvbiB0byB0aGUgdmVyc2lvbmVkIHNjcmlwdHMiKSwKKyAgICApCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgKKyAgICAgICAgcm9vdD1hcmdzLnJvb3QsCisgICAgICAgIHVwZ3JhZGU9YXJncy51cGdyYWRlLAorICAgICAgICB1c2VyPWFyZ3MudXNlciwKKyAgICAgICAgdmVyYm9zaXR5PWFyZ3MudmVyYm9zaXR5LAorICAgICAgICBhbHRpbnN0YWxsPWFyZ3MuYWx0aW5zdGFsbCwKKyAgICAgICAgZGVmYXVsdF9waXA9YXJncy5kZWZhdWx0X3BpcCwKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS5yYzEtcHkyLnB5My1ub25lLWFueS53aGwgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC0xLjUucmMxLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MTg4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC0xLjUucmMxLXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0xLjMuMi1weTIucHkzLW5vbmUtYW55LndobCBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0xLjMuMi1weTIucHkzLW5vbmUtYW55LndobApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTk2MmIxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9zZXR1cHRvb2xzLTEuMy4yLXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1OGY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnVtLnB5CkBAIC0wLDAgKzEsNTA0IEBACitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK19fYWxsX18gPSBbJ0VudW0nLCAnSW50RW51bScsICd1bmlxdWUnXQorCisKK2RlZiBfaXNfZGVzY3JpcHRvcihvYmopOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBvYmogaXMgYSBkZXNjcmlwdG9yLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19nZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fc2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2RlbGV0ZV9fJykpCisKKworZGVmIF9pc19kdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX19kdW5kZXJfXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzoyXSA9PSBuYW1lWy0yOl0gPT0gJ19fJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMjozXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0zOi0yXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiA0KQorCisKK2RlZiBfaXNfc3VuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9zdW5kZXJfIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gbmFtZVstMV0gPT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVsxOjJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTI6LTFdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDIpCisKKworZGVmIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGNscyk6CisgICAgIiIiTWFrZSB0aGUgZ2l2ZW4gY2xhc3MgdW4tcGlja2xhYmxlLiIiIgorICAgIGRlZiBfYnJlYWtfb25fY2FsbF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXIgY2Fubm90IGJlIHBpY2tsZWQnICUgc2VsZikKKyAgICBjbHMuX19yZWR1Y2VfXyA9IF9icmVha19vbl9jYWxsX3JlZHVjZQorICAgIGNscy5fX21vZHVsZV9fID0gJzx1bmtub3duPicKKworCitjbGFzcyBfRW51bURpY3QoZGljdCk6CisgICAgIiIiVHJhY2sgZW51bSBtZW1iZXIgb3JkZXIgYW5kIGVuc3VyZSBtZW1iZXIgbmFtZXMgYXJlIG5vdCByZXVzZWQuCisKKyAgICBFbnVtTWV0YSB3aWxsIHVzZSB0aGUgbmFtZXMgZm91bmQgaW4gc2VsZi5fbWVtYmVyX25hbWVzIGFzIHRoZQorICAgIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcyA9IFtdCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIkNoYW5nZXMgYW55dGhpbmcgbm90IGR1bmRlcmVkIG9yIG5vdCBhIGRlc2NyaXB0b3IuCisKKyAgICAgICAgSWYgYW4gZW51bSBtZW1iZXIgbmFtZSBpcyB1c2VkIHR3aWNlLCBhbiBlcnJvciBpcyByYWlzZWQ7IGR1cGxpY2F0ZQorICAgICAgICB2YWx1ZXMgYXJlIG5vdCBjaGVja2VkIGZvci4KKworICAgICAgICBTaW5nbGUgdW5kZXJzY29yZSAoc3VuZGVyKSBuYW1lcyBhcmUgcmVzZXJ2ZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIF9pc19zdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ19uYW1lc18gYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgRW51bSB1c2UnKQorICAgICAgICBlbGlmIF9pc19kdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBrZXkgaW4gc2VsZi5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgIyBkZXNjcmlwdG9yIG92ZXJ3cml0aW5nIGFuIGVudW0/CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byByZXVzZSBrZXk6ICVyJyAlIGtleSkKKyAgICAgICAgZWxpZiBub3QgX2lzX2Rlc2NyaXB0b3IodmFsdWUpOgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGY6CisgICAgICAgICAgICAgICAgIyBlbnVtIG92ZXJ3cml0aW5nIGEgZGVzY3JpcHRvcj8KKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0tleSBhbHJlYWR5IGRlZmluZWQgYXM6ICVyJyAlIHNlbGZba2V5XSkKKyAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcy5hcHBlbmQoa2V5KQorICAgICAgICBzdXBlcigpLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKworCisjIER1bW15IHZhbHVlIGZvciBFbnVtIGFzIEVudW1NZXRhIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBpdCwgYnV0IG9mIGNvdXJzZQorIyB1bnRpbCBFbnVtTWV0YSBmaW5pc2hlcyBydW5uaW5nIHRoZSBmaXJzdCB0aW1lIHRoZSBFbnVtIGNsYXNzIGRvZXNuJ3QgZXhpc3QuCisjIFRoaXMgaXMgYWxzbyB3aHkgdGhlcmUgYXJlIGNoZWNrcyBpbiBFbnVtTWV0YSBsaWtlIGBpZiBFbnVtIGlzIG5vdCBOb25lYAorRW51bSA9IE5vbmUKKworCitjbGFzcyBFbnVtTWV0YSh0eXBlKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIEVudW0iIiIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgY2xzLCBiYXNlcyk6CisgICAgICAgIHJldHVybiBfRW51bURpY3QoKQorCisgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgIyBhbiBFbnVtIGNsYXNzIGlzIGZpbmFsIG9uY2UgZW51bWVyYXRpb24gaXRlbXMgaGF2ZSBiZWVuIGRlZmluZWQ7IGl0CisgICAgICAgICMgY2Fubm90IGJlIG1peGVkIHdpdGggb3RoZXIgdHlwZXMgKGludCwgZmxvYXQsIGV0Yy4pIGlmIGl0IGhhcyBhbgorICAgICAgICAjIGluaGVyaXRlZCBfX25ld19fIHVubGVzcyBhIG5ldyBfX25ld19fIGlzIGRlZmluZWQgKG9yIHRoZSByZXN1bHRpbmcKKyAgICAgICAgIyBjbGFzcyB3aWxsIGZhaWwpLgorICAgICAgICBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSA9IG1ldGFjbHMuX2dldF9taXhpbnNfKGJhc2VzKQorICAgICAgICBfX25ld19fLCBzYXZlX25ldywgdXNlX2FyZ3MgPSBtZXRhY2xzLl9maW5kX25ld18oY2xhc3NkaWN0LCBtZW1iZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZW51bSkKKworICAgICAgICAjIHNhdmUgZW51bSBpdGVtcyBpbnRvIHNlcGFyYXRlIG1hcHBpbmcgc28gdGhleSBkb24ndCBnZXQgYmFrZWQgaW50bworICAgICAgICAjIHRoZSBuZXcgY2xhc3MKKyAgICAgICAgbWVtYmVycyA9IHtrOiBjbGFzc2RpY3Rba10gZm9yIGsgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXN9CisgICAgICAgIGZvciBuYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgZGVsIGNsYXNzZGljdFtuYW1lXQorCisgICAgICAgICMgY2hlY2sgZm9yIGlsbGVnYWwgZW51bSBuYW1lcyAoYW55IG90aGVycz8pCisgICAgICAgIGludmFsaWRfbmFtZXMgPSBzZXQobWVtYmVycykgJiB7J21ybycsIH0KKyAgICAgICAgaWYgaW52YWxpZF9uYW1lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZW51bSBtZW1iZXIgbmFtZTogezB9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgJywnLmpvaW4oaW52YWxpZF9uYW1lcykpKQorCisgICAgICAgICMgY3JlYXRlIG91ciBuZXcgRW51bSB0eXBlCisgICAgICAgIGVudW1fY2xhc3MgPSBzdXBlcigpLl9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KQorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfID0gW10gICAgICAgICAgICAgICAjIG5hbWVzIGluIGRlZmluaXRpb24gb3JkZXIKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF8gPSBPcmRlcmVkRGljdCgpICAgICAgIyBuYW1lLT52YWx1ZSBtYXAKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX3R5cGVfID0gbWVtYmVyX3R5cGUKKworICAgICAgICAjIFJldmVyc2UgdmFsdWUtPm5hbWUgbWFwIGZvciBoYXNoYWJsZSB2YWx1ZXMuCisgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfID0ge30KKworICAgICAgICAjIGNoZWNrIGZvciBhIF9fZ2V0bmV3YXJnc19fLCBhbmQgaWYgbm90IHByZXNlbnQgc2Fib3RhZ2UKKyAgICAgICAgIyBwaWNrbGluZywgc2luY2UgaXQgd29uJ3Qgd29yayBhbnl3YXkKKyAgICAgICAgaWYgKG1lbWJlcl90eXBlIGlzIG5vdCBvYmplY3QgYW5kCisgICAgICAgICAgICBtZW1iZXJfdHlwZS5fX2RpY3RfXy5nZXQoJ19fZ2V0bmV3YXJnc19fJykgaXMgTm9uZQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGVudW1fY2xhc3MpCisKKyAgICAgICAgIyBpbnN0YW50aWF0ZSB0aGVtLCBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBhcyB3ZSBnbworICAgICAgICAjIHdlIGluc3RhbnRpYXRlIGZpcnN0IGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMgZmlyc3QgaW4gY2FzZQorICAgICAgICAjIGEgY3VzdG9tIF9fbmV3X18gaXMgZG9pbmcgc29tZXRoaW5nIGZ1bmt5IHdpdGggdGhlIHZhbHVlcyAtLSBzdWNoIGFzCisgICAgICAgICMgYXV0by1udW1iZXJpbmcgOykKKyAgICAgICAgZm9yIG1lbWJlcl9uYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJzW21lbWJlcl9uYW1lXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBhcmdzID0gKHZhbHVlLCApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZQorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgdHVwbGU6ICAgIyBzcGVjaWFsIGNhc2UgZm9yIHR1cGxlIGVudW1zCisgICAgICAgICAgICAgICAgYXJncyA9IChhcmdzLCApICAgICAjIHdyYXAgaXQgb25lIG1vcmUgdGltZQorICAgICAgICAgICAgaWYgbm90IHVzZV9hcmdzOgorICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gX19uZXdfXyhlbnVtX2NsYXNzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MsICphcmdzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gbWVtYmVyX3R5cGUoKmFyZ3MpCisgICAgICAgICAgICB2YWx1ZSA9IGVudW1fbWVtYmVyLl92YWx1ZV8KKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9uYW1lXyA9IG1lbWJlcl9uYW1lCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX29iamNsYXNzX18gPSBlbnVtX2NsYXNzCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX2luaXRfXygqYXJncykKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciBtZW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSB3YXMgYWxyZWFkeSBkZWZpbmVkLCB0aGUKKyAgICAgICAgICAgICMgbmV3IG1lbWJlciBiZWNvbWVzIGFuIGFsaWFzIHRvIHRoZSBleGlzdGluZyBvbmUuCisgICAgICAgICAgICBmb3IgbmFtZSwgY2Fub25pY2FsX21lbWJlciBpbiBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNhbm9uaWNhbF9tZW1iZXIudmFsdWUgPT0gZW51bV9tZW1iZXIuX3ZhbHVlXzoKKyAgICAgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBjYW5vbmljYWxfbWVtYmVyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWxpYXNlcyBkb24ndCBhcHBlYXIgaW4gbWVtYmVyIG5hbWVzIChvbmx5IGluIF9fbWVtYmVyc19fKS4KKyAgICAgICAgICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfLmFwcGVuZChtZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfW21lbWJlcl9uYW1lXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBmYWlsIGlmIHZhbHVlIGlzIG5vdCBoYXNoYWJsZS4gV2UgY2FuJ3QgYWRkIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICMgdG8gdGhlIG1hcCwgYW5kIGJ5LXZhbHVlIGxvb2t1cHMgZm9yIHRoaXMgdmFsdWUgd2lsbCBiZQorICAgICAgICAgICAgICAgICMgbGluZWFyLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGRvdWJsZSBjaGVjayB0aGF0IHJlcHIgYW5kIGZyaWVuZHMgYXJlIG5vdCB0aGUgbWl4aW4ncyBvciB2YXJpb3VzCisgICAgICAgICMgdGhpbmdzIGJyZWFrIChzdWNoIGFzIHBpY2tsZSkKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdfX3JlcHJfXycsICdfX3N0cl9fJywgJ19fZm9ybWF0X18nLCAnX19nZXRuZXdhcmdzX18nKToKKyAgICAgICAgICAgIGNsYXNzX21ldGhvZCA9IGdldGF0dHIoZW51bV9jbGFzcywgbmFtZSkKKyAgICAgICAgICAgIG9ial9tZXRob2QgPSBnZXRhdHRyKG1lbWJlcl90eXBlLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgZW51bV9tZXRob2QgPSBnZXRhdHRyKGZpcnN0X2VudW0sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBvYmpfbWV0aG9kIGlzIG5vdCBOb25lIGFuZCBvYmpfbWV0aG9kIGlzIGNsYXNzX21ldGhvZDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUsIGVudW1fbWV0aG9kKQorCisgICAgICAgICMgcmVwbGFjZSBhbnkgb3RoZXIgX19uZXdfXyB3aXRoIG91ciBvd24gKGFzIGxvbmcgYXMgRW51bSBpcyBub3QgTm9uZSwKKyAgICAgICAgIyBhbnl3YXkpIC0tIGFnYWluLCB0aGlzIGlzIHRvIHN1cHBvcnQgcGlja2xlCisgICAgICAgIGlmIEVudW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGRlZmluZWQgdGhlaXIgb3duIF9fbmV3X18sIHNhdmUgaXQgYmVmb3JlIGl0IGdldHMKKyAgICAgICAgICAgICMgY2xvYmJlcmVkIGluIGNhc2UgdGhleSBzdWJjbGFzcyBsYXRlcgorICAgICAgICAgICAgaWYgc2F2ZV9uZXc6CisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fX25ld19tZW1iZXJfXyA9IF9fbmV3X18KKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfXyA9IEVudW0uX19uZXdfXworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgZGVmIF9fY2FsbF9fKGNscywgdmFsdWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJFaXRoZXIgcmV0dXJucyBhbiBleGlzdGluZyBtZW1iZXIsIG9yIGNyZWF0ZXMgYSBuZXcgZW51bSBjbGFzcy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJvdGggd2hlbiBhbiBlbnVtIGNsYXNzIGlzIGdpdmVuIGEgdmFsdWUgdG8gbWF0Y2gKKyAgICAgICAgdG8gYW4gZW51bWVyYXRpb24gbWVtYmVyIChpLmUuIENvbG9yKDMpKSBhbmQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSQorICAgICAgICAoaS5lLiBDb2xvciA9IEVudW0oJ0NvbG9yJywgbmFtZXM9J3JlZCBncmVlbiBibHVlJykpLgorCisgICAgICAgIFdoZW4gdXNlZCBmb3IgdGhlIGZ1bmN0aW9uYWwgQVBJOiBgbW9kdWxlYCwgaWYgc2V0LCB3aWxsIGJlIHN0b3JlZCBpbgorICAgICAgICB0aGUgbmV3IGNsYXNzJyBfX21vZHVsZV9fIGF0dHJpYnV0ZTsgYHR5cGVgLCBpZiBzZXQsIHdpbGwgYmUgbWl4ZWQgaW4KKyAgICAgICAgYXMgdGhlIGZpcnN0IGJhc2UgY2xhc3MuCisKKyAgICAgICAgTm90ZTogaWYgYG1vZHVsZWAgaXMgbm90IHNldCB0aGlzIHJvdXRpbmUgd2lsbCBhdHRlbXB0IHRvIGRpc2NvdmVyIHRoZQorICAgICAgICBjYWxsaW5nIG1vZHVsZSBieSB3YWxraW5nIHRoZSBmcmFtZSBzdGFjazsgaWYgdGhpcyBpcyB1bnN1Y2Nlc3NmdWwKKyAgICAgICAgdGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIG5vdCBiZSBwaWNrbGVhYmxlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lcyBpcyBOb25lOiAgIyBzaW1wbGUgdmFsdWUgbG9va3VwCisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgIyBvdGhlcndpc2UsIGZ1bmN0aW9uYWwgQVBJOiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlXyh2YWx1ZSwgbmFtZXMsIG1vZHVsZT1tb2R1bGUsIHR5cGU9dHlwZSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShtZW1iZXIsIGNscykgYW5kIG1lbWJlci5uYW1lIGluIGNscy5fbWVtYmVyX21hcF8KKworICAgIGRlZiBfX2RlbGF0dHJfXyhjbHMsIGF0dHIpOgorICAgICAgICAjIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzb21lb25lIHRyaWVzIHRvIGRlbGV0ZSBhbiBhdHRyaWJ1dGUKKyAgICAgICAgIyAoc2VlIGlzc3VlMTkwMjUpLgorICAgICAgICBpZiBhdHRyIGluIGNscy5fbWVtYmVyX21hcF86CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIEVudW0gbWVtYmVyLiIgJSBjbHMuX19uYW1lX18pCisgICAgICAgIHN1cGVyKCkuX19kZWxhdHRyX18oYXR0cikKKworICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddICsKKyAgICAgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW51bSBtZW1iZXIgbWF0Y2hpbmcgYG5hbWVgCisKKyAgICAgICAgV2UgdXNlIF9fZ2V0YXR0cl9fIGluc3RlYWQgb2YgZGVzY3JpcHRvcnMgb3IgaW5zZXJ0aW5nIGludG8gdGhlIGVudW0KKyAgICAgICAgY2xhc3MnIF9fZGljdF9fIGluIG9yZGVyIHRvIHN1cHBvcnQgYG5hbWVgIGFuZCBgdmFsdWVgIGJlaW5nIGJvdGgKKyAgICAgICAgcHJvcGVydGllcyBmb3IgZW51bSBtZW1iZXJzICh3aGljaCBsaXZlIGluIHRoZSBjbGFzcycgX19kaWN0X18pIGFuZAorICAgICAgICBlbnVtIG1lbWJlcnMgdGhlbXNlbHZlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpIGZyb20gTm9uZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgbmFtZSk6CisgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisKKyAgICBkZWYgX19pdGVyX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIGNscy5fbWVtYmVyX25hbWVzXykKKworICAgIGRlZiBfX2xlbl9fKGNscyk6CisgICAgICAgIHJldHVybiBsZW4oY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbWVtYmVyc19fKGNscyk6CisgICAgICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKworICAgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKGNscy5fbWVtYmVyX21hcF8pCisKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuICI8ZW51bSAlcj4iICUgY2xzLl9fbmFtZV9fCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKGNscyk6CisgICAgICAgIHJldHVybiAoY2xzLl9tZW1iZXJfbWFwX1tuYW1lXSBmb3IgbmFtZSBpbiByZXZlcnNlZChjbHMuX21lbWJlcl9uYW1lc18pKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKGNscywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJCbG9jayBhdHRlbXB0cyB0byByZWFzc2lnbiBFbnVtIG1lbWJlcnMuCisKKyAgICAgICAgQSBzaW1wbGUgYXNzaWdubWVudCB0byB0aGUgY2xhc3MgbmFtZXNwYWNlIG9ubHkgY2hhbmdlcyBvbmUgb2YgdGhlCisgICAgICAgIHNldmVyYWwgcG9zc2libGUgd2F5cyB0byBnZXQgYW4gRW51bSBtZW1iZXIgZnJvbSB0aGUgRW51bSBjbGFzcywKKyAgICAgICAgcmVzdWx0aW5nIGluIGFuIGluY29uc2lzdGVudCBFbnVtZXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbWVtYmVyX21hcCA9IGNscy5fX2RpY3RfXy5nZXQoJ19tZW1iZXJfbWFwXycsIHt9KQorICAgICAgICBpZiBuYW1lIGluIG1lbWJlcl9tYXA6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKKyAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCisKKyAgICAgICAgYG5hbWVzYCBjYW4gYmU6CisKKyAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgorICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCisgICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiAobWVtYmVyIG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAgICAgKiBBIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUgLT4gdmFsdWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFjbHMgPSBjbHMuX19jbGFzc19fCisgICAgICAgIGJhc2VzID0gKGNscywgKSBpZiB0eXBlIGlzIE5vbmUgZWxzZSAodHlwZSwgY2xzKQorICAgICAgICBjbGFzc2RpY3QgPSBtZXRhY2xzLl9fcHJlcGFyZV9fKGNsYXNzX25hbWUsIGJhc2VzKQorCisgICAgICAgICMgc3BlY2lhbCBwcm9jZXNzaW5nIG5lZWRlZCBmb3IgbmFtZXM/CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgKHR1cGxlLCBsaXN0KSkgYW5kIGlzaW5zdGFuY2UobmFtZXNbMF0sIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IFsoZSwgaSkgZm9yIChpLCBlKSBpbiBlbnVtZXJhdGUobmFtZXMsIDEpXQorCisgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgorICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbSwgbmFtZXNbaXRlbV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUsIG1lbWJlcl92YWx1ZSA9IGl0ZW0KKyAgICAgICAgICAgIGNsYXNzZGljdFttZW1iZXJfbmFtZV0gPSBtZW1iZXJfdmFsdWUKKyAgICAgICAgZW51bV9jbGFzcyA9IG1ldGFjbHMuX19uZXdfXyhtZXRhY2xzLCBjbGFzc19uYW1lLCBiYXNlcywgY2xhc3NkaWN0KQorCisgICAgICAgICMgVE9ETzogcmVwbGFjZSB0aGUgZnJhbWUgaGFjayBpZiBhIGJsZXNzZWQgd2F5IHRvIGtub3cgdGhlIGNhbGxpbmcKKyAgICAgICAgIyBtb2R1bGUgaXMgZXZlciBkZXZlbG9wZWQKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLl9nZXRmcmFtZSgyKS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19tb2R1bGVfXyA9IG1vZHVsZQorCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbWl4aW5zXyhiYXNlcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgZm9yIGNyZWF0aW5nIGVudW0gbWVtYmVycywgYW5kIHRoZSBmaXJzdCBpbmhlcml0ZWQKKyAgICAgICAgZW51bSBjbGFzcy4KKworICAgICAgICBiYXNlczogdGhlIHR1cGxlIG9mIGJhc2VzIHRoYXQgd2FzIGdpdmVuIHRvIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJhc2VzOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdCwgRW51bQorCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdWJjbGFzc2luZyBhIGNsYXNzIHdpdGggZXhpc3RpbmcKKyAgICAgICAgIyBlbnVtZXJhdGlvbiBtZW1iZXJzOyB3aGlsZSB3ZSdyZSBhdCBpdCwgc2VlIGlmIGFueSBvdGhlciBkYXRhCisgICAgICAgICMgdHlwZSBoYXMgYmVlbiBtaXhlZCBpbiBzbyB3ZSBjYW4gdXNlIHRoZSBjb3JyZWN0IF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGUgPSBmaXJzdF9lbnVtID0gTm9uZQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGlmICAoYmFzZSBpcyBub3QgRW51bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmFzZS5fbWVtYmVyX25hbWVzXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucyIpCisgICAgICAgICMgYmFzZSBpcyBub3cgdGhlIGxhc3QgYmFzZSBpbiBiYXNlcworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmV3IGVudW1lcmF0aW9ucyBtdXN0IGJlIGNyZWF0ZWQgYXMgIgorICAgICAgICAgICAgICAgICAgICAiYENsYXNzTmFtZShbbWl4aW5fdHlwZSxdIGVudW1fdHlwZSlgIikKKworICAgICAgICAjIGdldCBjb3JyZWN0IG1peC1pbiB0eXBlIChlaXRoZXIgbWl4LWluIHR5cGUgb2YgRW51bSBzdWJjbGFzcywgb3IKKyAgICAgICAgIyBmaXJzdCBiYXNlIGlmIGxhc3QgYmFzZSBpcyBFbnVtKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlc1swXSwgRW51bSk6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2VzWzBdICAgICAjIGZpcnN0IGRhdGEgdHlwZQorICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2VzWy0xXSAgIyBlbnVtIHR5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBiYXNlIGluIGJhc2VzWzBdLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBtb3N0IGNvbW1vbjogKEludEVudW0sIGludCwgRW51bSwgb2JqZWN0KQorICAgICAgICAgICAgICAgICMgcG9zc2libGU6ICAgICg8RW51bSAnQXV0b0ludEVudW0nPiwgPEVudW0gJ0ludEVudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdpbnQnPiwgPEVudW0gJ0VudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdvYmplY3QnPikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgICAgICAgICBpZiBmaXJzdF9lbnVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2UKKworICAgICAgICByZXR1cm4gbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgX19uZXdfXyB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgZW51bSBtZW1iZXJzLgorCisgICAgICAgIGNsYXNzZGljdDogdGhlIGNsYXNzIGRpY3Rpb25hcnkgZ2l2ZW4gdG8gX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZTogdGhlIGRhdGEgdHlwZSB3aG9zZSBfX25ld19fIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0CisgICAgICAgIGZpcnN0X2VudW06IGVudW1lcmF0aW9uIHRvIGNoZWNrIGZvciBhbiBvdmVycmlkaW5nIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgIyBub3cgZmluZCB0aGUgY29ycmVjdCBfX25ld19fLCBjaGVja2luZyB0byBzZWUgb2Ygb25lIHdhcyBkZWZpbmVkCisgICAgICAgICMgYnkgdGhlIHVzZXI7IGFsc28gY2hlY2sgZWFybGllciBlbnVtIGNsYXNzZXMgaW4gY2FzZSBhIF9fbmV3X18gd2FzCisgICAgICAgICMgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18KKyAgICAgICAgX19uZXdfXyA9IGNsYXNzZGljdC5nZXQoJ19fbmV3X18nLCBOb25lKQorCisgICAgICAgICMgc2hvdWxkIF9fbmV3X18gYmUgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18gbGF0ZXI/CisgICAgICAgIHNhdmVfbmV3ID0gX19uZXdfXyBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIF9fbmV3X18gaXMgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgYWxsIHBvc3NpYmxlcyBmb3IgX19uZXdfbWVtYmVyX18gYmVmb3JlIGZhbGxpbmcgYmFjayB0bworICAgICAgICAgICAgIyBfX25ld19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19uZXdfbWVtYmVyX18nLCAnX19uZXdfXycpOgorICAgICAgICAgICAgICAgIGZvciBwb3NzaWJsZSBpbiAobWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHBvc3NpYmxlLCBtZXRob2QsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldCBub3QgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW0uX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OgorICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfXyA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBfX25ld19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfX25ld19fID0gb2JqZWN0Ll9fbmV3X18KKworICAgICAgICAjIGlmIGEgbm9uLW9iamVjdC5fX25ld19fIGlzIHVzZWQgdGhlbiB3aGF0ZXZlciB2YWx1ZS90dXBsZSB3YXMKKyAgICAgICAgIyBhc3NpZ25lZCB0byB0aGUgZW51bSBtZW1iZXIgbmFtZSB3aWxsIGJlIHBhc3NlZCB0byBfX25ld19fIGFuZCB0byB0aGUKKyAgICAgICAgIyBuZXcgZW51bSBtZW1iZXIncyBfX2luaXRfXworICAgICAgICBpZiBfX25ld19fIGlzIG9iamVjdC5fX25ld19fOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncworCisKK2NsYXNzIEVudW0obWV0YWNsYXNzPUVudW1NZXRhKToKKyAgICAiIiJHZW5lcmljIGVudW1lcmF0aW9uLgorCisgICAgRGVyaXZlIGZyb20gdGhpcyBjbGFzcyB0byBkZWZpbmUgbmV3IGVudW1lcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAjIGFsbCBlbnVtIGluc3RhbmNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBkdXJpbmcgY2xhc3MgY29uc3RydWN0aW9uCisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIHRoaXMgbWV0aG9kOyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1ldGFjbGFzcycKKyAgICAgICAgIyBfX2NhbGxfXyAoaS5lLiBDb2xvcigzKSApLCBhbmQgYnkgcGlja2xlCisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIGNsczoKKyAgICAgICAgICAgICMgRm9yIGxvb2t1cHMgbGlrZSBDb2xvcihDb2xvci5yZWQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBieS12YWx1ZSBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgZW51bSBtZW1iZXIKKyAgICAgICAgIyBzZWUgaWYgaXQncyBpbiB0aGUgcmV2ZXJzZSBtYXBwaW5nIChmb3IgaGFzaGFibGUgdmFsdWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBub3QgdGhlcmUsIG5vdyBkbyBsb25nIHNlYXJjaCAtLSBPKG4pIGJlaGF2aW9yCisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNscy5fbWVtYmVyX21hcF8udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnZhbHVlID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gW20gZm9yIG0gaW4gc2VsZi5fX2NsYXNzX18uX19kaWN0X18gaWYgbVswXSAhPSAnXyddCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNhbiBnZXQgc3RyYW5nZSByZXN1bHRzIHdpdGggdGhlIEVudW0gbmFtZSBzaG93aW5nIHVwIGluc3RlYWQgb2YKKyAgICAgICAgIyB0aGUgdmFsdWUKKworICAgICAgICAjIHB1cmUgRW51bSBicmFuY2gKKyAgICAgICAgaWYgc2VsZi5fbWVtYmVyX3R5cGVfIGlzIG9iamVjdDoKKyAgICAgICAgICAgIGNscyA9IHN0cgorICAgICAgICAgICAgdmFsID0gc3RyKHNlbGYpCisgICAgICAgICMgbWl4LWluIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gc2VsZi5fbWVtYmVyX3R5cGVfCisgICAgICAgICAgICB2YWwgPSBzZWxmLnZhbHVlCisgICAgICAgIHJldHVybiBjbHMuX19mb3JtYXRfXyh2YWwsIGZvcm1hdF9zcGVjKQorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX3ZhbHVlXywgKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9uYW1lXykKKworICAgICMgRHluYW1pY0NsYXNzQXR0cmlidXRlIGlzIHVzZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGBuYW1lYCBhbmQKKyAgICAjIGB2YWx1ZWAgcHJvcGVydGllcyBvZiBlbnVtIG1lbWJlcnMgd2hpbGUga2VlcGluZyBzb21lIG1lYXN1cmUgb2YKKyAgICAjIHByb3RlY3Rpb24gZnJvbSBtb2RpZmljYXRpb24sIHdoaWxlIHN0aWxsIGFsbG93aW5nIGZvciBhbiBlbnVtZXJhdGlvbgorICAgICMgdG8gaGF2ZSBtZW1iZXJzIG5hbWVkIGBuYW1lYCBhbmQgYHZhbHVlYC4gIFRoaXMgd29ya3MgYmVjYXVzZSBlbnVtZXJhdGlvbgorICAgICMgbWVtYmVycyBhcmUgbm90IHNldCBkaXJlY3RseSBvbiB0aGUgZW51bSBjbGFzcyAtLSBfX2dldGF0dHJfXyBpcworICAgICMgdXNlZCB0byBsb29rIHRoZW0gdXAuCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfCisKKworY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICIiIkVudW0gd2hlcmUgbWVtYmVycyBhcmUgYWxzbyAoYW5kIG11c3QgYmUpIGludHMiIiIKKworCitkZWYgdW5pcXVlKGVudW1lcmF0aW9uKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgZm9yIGVudW1lcmF0aW9ucyBlbnN1cmluZyB1bmlxdWUgbWVtYmVyIHZhbHVlcy4iIiIKKyAgICBkdXBsaWNhdGVzID0gW10KKyAgICBmb3IgbmFtZSwgbWVtYmVyIGluIGVudW1lcmF0aW9uLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgIT0gbWVtYmVyLm5hbWU6CisgICAgICAgICAgICBkdXBsaWNhdGVzLmFwcGVuZCgobmFtZSwgbWVtYmVyLm5hbWUpKQorICAgIGlmIGR1cGxpY2F0ZXM6CisgICAgICAgIGFsaWFzX2RldGFpbHMgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgWyIlcyAtPiAlcyIgJSAoYWxpYXMsIG5hbWUpIGZvciAoYWxpYXMsIG5hbWUpIGluIGR1cGxpY2F0ZXNdKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluICVyOiAlcycgJQorICAgICAgICAgICAgICAgIChlbnVtZXJhdGlvbiwgYWxpYXNfZGV0YWlscykpCisgICAgcmV0dXJuIGVudW1lcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IGY1Y2VhMWQuLjMyODUyODggMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02LDYgKzYsNyBAQAogRnVuY3Rpb25zOgogICAgIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSkgLT4gaW50CiAgICAgY21wZmlsZXMoYSwgYiwgY29tbW9uKSAtPiAoW10sIFtdLCBbXSkKKyAgICBjbGVhcl9jYWNoZSgpCiAKICIiIgogCkBAIC0xMywxMSArMTQsMTggQEAKIGltcG9ydCBzdGF0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZmlsdGVyZmFsc2UKIAotX19hbGxfXyA9IFsiY21wIiwgImRpcmNtcCIsICJjbXBmaWxlcyJdCitfX2FsbF9fID0gWydjbGVhcl9jYWNoZScsICdjbXAnLCAnZGlyY21wJywgJ2NtcGZpbGVzJywgJ0RFRkFVTFRfSUdOT1JFUyddCiAKIF9jYWNoZSA9IHt9CiBCVUZTSVpFID0gOCoxMDI0CiAKK0RFRkFVTFRfSUdOT1JFUyA9IFsKKyAgICAnUkNTJywgJ0NWUycsICd0YWdzJywgJy5naXQnLCAnLmhnJywgJy5ienInLCAnX2RhcmNzJywgJ19fcHljYWNoZV9fJ10KKworZGVmIGNsZWFyX2NhY2hlKCk6CisgICAgIiIiQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIiIiCisgICAgX2NhY2hlLmNsZWFyKCkKKwogZGVmIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSk6CiAgICAgIiIiQ29tcGFyZSB0d28gZmlsZXMuCiAKQEAgLTM1LDcgKzQzLDggQEAKICAgICBUcnVlIGlmIHRoZSBmaWxlcyBhcmUgdGhlIHNhbWUsIEZhbHNlIG90aGVyd2lzZS4KIAogICAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKLSAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMuCisgICAgd2l0aCBhIGNhY2hlIGludmFsaWRhdGlvbiBtZWNoYW5pc20gcmVseWluZyBvbiBzdGFsZSBzaWduYXR1cmVzCisgICAgb3IgYnkgZXhwbGljaXRseSBjYWxsaW5nIGNsZWFyX2NhY2hlKCkuCiAKICAgICAiIiIKIApAQCAtNTIsNyArNjEsNyBAQAogICAgIGlmIG91dGNvbWUgaXMgTm9uZToKICAgICAgICAgb3V0Y29tZSA9IF9kb19jbXAoZjEsIGYyKQogICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDogICAgICAjIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNhY2hlCi0gICAgICAgICAgICBfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgY2xlYXJfY2FjaGUoKQogICAgICAgICBfY2FjaGVbZjEsIGYyLCBzMSwgczJdID0gb3V0Y29tZQogICAgIHJldHVybiBvdXRjb21lCiAKQEAgLTgwLDcgKzg5LDcgQEAKICAgICBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKICAgICAgIEEgYW5kIEIgYXJlIGRpcmVjdG9yaWVzLgogICAgICAgSUdOT1JFIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsCi0gICAgICAgIGRlZmF1bHRzIHRvIFsnUkNTJywgJ0NWUycsICd0YWdzJ10uCisgICAgICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfSUdOT1JFUy4KICAgICAgIEhJREUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsCiAgICAgICAgIGRlZmF1bHRzIHRvIFtvcy5jdXJkaXIsIG9zLnBhcmRpcl0uCiAKQEAgLTExNiw3ICsxMjUsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5oaWRlID0gaGlkZQogICAgICAgICBpZiBpZ25vcmUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaWdub3JlID0gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXSAjIE5hbWVzIGlnbm9yZWQgaW4gY29tcGFyaXNvbgorICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBERUZBVUxUX0lHTk9SRVMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuaWdub3JlID0gaWdub3JlCiAKQEAgLTE0NywxMiArMTU2LDEyIEBACiAgICAgICAgICAgICBvayA9IDEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhX3N0YXQgPSBvcy5zdGF0KGFfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBhX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYl9zdGF0ID0gb3Muc3RhdChiX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQoJ0NhblwndCBzdGF0JywgYl9wYXRoLCAnOicsIHdoeS5hcmdzWzFdKQogICAgICAgICAgICAgICAgIG9rID0gMAogCkBAIC0yNjgsNyArMjc3LDcgQEAKIGRlZiBfY21wKGEsIGIsIHNoLCBhYnM9YWJzLCBjbXA9Y21wKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBub3QgYWJzKGNtcChhLCBiLCBzaCkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gMgogCiAKZGlmZiAtLWdpdCBhL0xpYi9maWxlaW5wdXQucHkgYi9MaWIvZmlsZWlucHV0LnB5CmluZGV4IDg3OWEwZmQuLmRlMjk1MTggMTAwNjQ0Ci0tLSBhL0xpYi9maWxlaW5wdXQucHkKKysrIGIvTGliL2ZpbGVpbnB1dC5weQpAQCAtMzAsNyArMzAsNyBAQAogCiBBbGwgZmlsZXMgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYnkgZGVmYXVsdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5CiBzZXR0aW5nIHRoZSBtb2RlIHBhcmFtZXRlciB0byBpbnB1dCgpIG9yIEZpbGVJbnB1dC5fX2luaXRfXygpLgotSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIElPRXJyb3IKK0lmIGFuIEkvTyBlcnJvciBvY2N1cnMgZHVyaW5nIG9wZW5pbmcgb3IgcmVhZGluZyBhIGZpbGUsIHRoZSBPU0Vycm9yCiBleGNlcHRpb24gaXMgcmFpc2VkLgogCiBJZiBzeXMuc3RkaW4gaXMgdXNlZCBtb3JlIHRoYW4gb25jZSwgdGhlIHNlY29uZCBhbmQgZnVydGhlciB1c2Ugd2lsbApAQCAtMjIyLDYgKzIyMiwxMCBAQAogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoJ3InLCAnclUnLCAnVScsICdyYicpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZUlucHV0IG9wZW5pbmcgbW9kZSBtdXN0IGJlIG9uZSBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncicsICdyVScsICdVJyBhbmQgJ3JiJyIpCisgICAgICAgIGlmICdVJyBpbiBtb2RlOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBpZiBvcGVuaG9vazoKICAgICAgICAgICAgIGlmIGlucGxhY2U6CkBAIC0zMjIsOSArMzI2LDExIEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uZDhjY2E1MiAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZnJhY3Rpb25zLnB5IGIvTGliL2ZyYWN0aW9ucy5weQppbmRleCA4YmU1MmQyLi43OWU4M2ZmIDEwMDY0NAotLS0gYS9MaWIvZnJhY3Rpb25zLnB5CisrKyBiL0xpYi9mcmFjdGlvbnMucHkKQEAgLTE4Miw4ICsxODIsMTAgQEAKICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmLCBmbG9hdCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzLmZyb21fZmxvYXQoKSBvbmx5IHRha2VzIGZsb2F0cywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBmLCB0eXBlKGYpLl9fbmFtZV9fKSkKLSAgICAgICAgaWYgbWF0aC5pc25hbihmKSBvciBtYXRoLmlzaW5mKGYpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNuYW4oZik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNpbmYoZik6CisgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCiAgICAgICAgIHJldHVybiBjbHMoKmYuYXNfaW50ZWdlcl9yYXRpbygpKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xOTYsOSArMTk4LDExIEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVzLmZyb21fZGVjaW1hbCgpIG9ubHkgdGFrZXMgRGVjaW1hbHMsIG5vdCAlciAoJXMpIiAlCiAgICAgICAgICAgICAgICAgKGNscy5fX25hbWVfXywgZGVjLCB0eXBlKGRlYykuX19uYW1lX18pKQotICAgICAgICBpZiBub3QgZGVjLmlzX2Zpbml0ZSgpOgotICAgICAgICAgICAgIyBDYXRjaGVzIGluZmluaXRpZXMgYW5kIG5hbnMuCi0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfaW5maW5pdGUoKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfbmFuKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlcyB0byAlcy4iICUgKGRlYywgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkZWMuYXNfdHVwbGUoKQogICAgICAgICBkaWdpdHMgPSBpbnQoJycuam9pbihtYXAoc3RyLCBkaWdpdHMpKSkKICAgICAgICAgaWYgc2lnbjoKZGlmZiAtLWdpdCBhL0xpYi9mdHBsaWIucHkgYi9MaWIvZnRwbGliLnB5CmluZGV4IDVlNzVlNmQuLjFiMTZlMGEgMTAwNjQ0Ci0tLSBhL0xpYi9mdHBsaWIucHkKKysrIGIvTGliL2Z0cGxpYi5weQpAQCAtMzksOSArMzksMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAoraW1wb3J0IHdhcm5pbmdzCiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAotX19hbGxfXyA9IFsiRlRQIiwiTmV0cmMiXQorX19hbGxfXyA9IFsiRlRQIiwgIk5ldHJjIl0KIAogIyBNYWdpYyBudW1iZXIgZnJvbSA8c29ja2V0Lmg+CiBNU0dfT09CID0gMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9jZXNzIGRhdGEgb3V0IG9mIGJhbmQKQEAgLTYzLDcgKzY0LDcgQEAKIAogIyBBbGwgZXhjZXB0aW9ucyAoaG9wZWZ1bGx5KSB0aGF0IG1heSBiZSByYWlzZWQgaGVyZSBhbmQgdGhhdCBhcmVuJ3QKICMgKGFsd2F5cykgcHJvZ3JhbW1pbmcgZXJyb3JzIG9uIG91ciBzaWRlCi1hbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKK2FsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogCiAKICMgTGluZSB0ZXJtaW5hdG9ycyAod2UgYWx3YXlzIG91dHB1dCBDUkxGLCBidXQgYWNjZXB0IGFueSBvZiBDUkxGLCBDUiwgTEYpCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CkBAIC0xMzYsNiArMTM3LDcgQEAKICAgICAgICAgJycnQ29ubmVjdCB0byBob3N0LiAgQXJndW1lbnRzIGFyZToKICAgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgdG8gY29ubmVjdCB0byAoc3RyaW5nLCBkZWZhdWx0IHByZXZpb3VzIGhvc3QpCiAgICAgICAgICAtIHBvcnQ6IHBvcnQgdG8gY29ubmVjdCB0byAoaW50ZWdlciwgZGVmYXVsdCBwcmV2aW91cyBwb3J0KQorICAgICAgICAgLSB0aW1lb3V0OiB0aGUgdGltZW91dCB0byBzZXQgYWdhaW5zdCB0aGUgZnRwIHNvY2tldChzKQogICAgICAgICAgLSBzb3VyY2VfYWRkcmVzczogYSAyLXR1cGxlIChob3N0LCBwb3J0KSBmb3IgdGhlIHNvY2tldCB0byBiaW5kCiAgICAgICAgICAgIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4KICAgICAgICAgJycnCkBAIC0xODYsNyArMTg4LDggQEAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGCiAgICAgZGVmIHB1dGxpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgIGxpbmUgPSBsaW5lICsgQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMToKKyAgICAgICAgICAgIHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgIyBJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIHB1dGxpbmUoKSkKQEAgLTIwMiw5ICsyMDUsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgogICAgICAgICAgICAgcHJpbnQoJypnZXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKLSAgICAgICAgaWYgbm90IGxpbmU6IHJhaXNlIEVPRkVycm9yCi0gICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOiBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgIGVsaWYgbGluZVstMTpdIGluIENSTEY6IGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgcmV0dXJuIGxpbmUKIAogICAgICMgSW50ZXJuYWw6IGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggbWF5IHBvc3NpYmx5CkBAIC0yMjcsNyArMjMzLDggQEAKICAgICAjIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IKICAgICBkZWYgZ2V0cmVzcChzZWxmKToKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmc6IHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzoKKyAgICAgICAgICAgIHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQogICAgICAgICBzZWxmLmxhc3RyZXNwID0gcmVzcFs6M10KICAgICAgICAgYyA9IHJlc3BbOjFdCiAgICAgICAgIGlmIGMgaW4geycxJywgJzInLCAnMyd9OgpAQCAtMjUxLDcgKzI1OCw4IEBACiAgICAgICAgIElQIGFuZCBTeW5jaDsgdGhhdCBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIHRoZSBzZXJ2ZXJzIEkndmUKICAgICAgICAgdHJpZWQuICBJbnN0ZWFkLCBqdXN0IHNlbmQgdGhlIEFCT1IgY29tbWFuZCBhcyBPT0IgZGF0YS4nJycKICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOiBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQgdXJnZW50KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUsIE1TR19PT0IpCiAgICAgICAgIHJlc3AgPSBzZWxmLmdldG11bHRpbGluZSgpCiAgICAgICAgIGlmIHJlc3BbOjNdIG5vdCBpbiB7JzQyNicsICcyMjUnLCAnMjI2J306CkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw4IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICAgICBzb2NrLmxpc3RlbigxKQogICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdICMgR2V0IHByb3BlciBwb3J0CiAgICAgICAgIGhvc3QgPSBzZWxmLnNvY2suZ2V0c29ja25hbWUoKVswXSAjIEdldCBwcm9wZXIgaG9zdApAQCAtMzkyLDkgKzQwMCwxMiBAQAogCiAgICAgZGVmIGxvZ2luKHNlbGYsIHVzZXIgPSAnJywgcGFzc3dkID0gJycsIGFjY3QgPSAnJyk6CiAgICAgICAgICcnJ0xvZ2luLCBkZWZhdWx0IGFub255bW91cy4nJycKLSAgICAgICAgaWYgbm90IHVzZXI6IHVzZXIgPSAnYW5vbnltb3VzJwotICAgICAgICBpZiBub3QgcGFzc3dkOiBwYXNzd2QgPSAnJwotICAgICAgICBpZiBub3QgYWNjdDogYWNjdCA9ICcnCisgICAgICAgIGlmIG5vdCB1c2VyOgorICAgICAgICAgICAgdXNlciA9ICdhbm9ueW1vdXMnCisgICAgICAgIGlmIG5vdCBwYXNzd2Q6CisgICAgICAgICAgICBwYXNzd2QgPSAnJworICAgICAgICBpZiBub3QgYWNjdDoKKyAgICAgICAgICAgIGFjY3QgPSAnJwogICAgICAgICBpZiB1c2VyID09ICdhbm9ueW1vdXMnIGFuZCBwYXNzd2QgaW4geycnLCAnLSd9OgogICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBhbm9ueW1vdXMgZnRwIHBhc3N3b3JkIHNwZWNpZmllZAogICAgICAgICAgICAgIyB0aGVuIHdlJ2xsIGp1c3QgdXNlIGFub255bW91c0AKQEAgLTQwNSw4ICs0MTYsMTAgQEAKICAgICAgICAgICAgICMgICBob3N0IG9yIGNvdW50cnkuCiAgICAgICAgICAgICBwYXNzd2QgPSBwYXNzd2QgKyAnYW5vbnltb3VzQCcKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVVNFUiAnICsgdXNlcikKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCisgICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnUEFTUyAnICsgcGFzc3dkKQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCiAgICAgICAgIGlmIHJlc3BbMF0gIT0gJzInOgogICAgICAgICAgICAgcmFpc2UgZXJyb3JfcmVwbHkocmVzcCkKICAgICAgICAgcmV0dXJuIHJlc3AKQEAgLTQzMiw2ICs0NDUsOSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgpAQCAtNDQ2LDcgKzQ2Miw4IEBACiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgVGhlIHJlc3BvbnNlIGNvZGUuCiAgICAgICAgICIiIgotICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKKyAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJpbnRfbGluZQogICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQogICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kKSBhcyBjb25uLCBcCiAgICAgICAgICAgICAgICAgIGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSBhcyBmcDoKQEAgLTQ1NCw3ICs0NzEsOCBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKQEAgLTQ2Miw2ICs0ODAsOSBAQAogICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKQEAgLTQ4Myw5ICs1MDQsMTQgQEAKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgpAQCAtNTA2LDEyICs1MzIsMTcgQEAKICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihidWYpID4gc2VsZi5tYXhsaW5lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCiAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIEJfQ1JMRgogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgYWNjdChzZWxmLCBwYXNzd29yZCk6CkBAIC02NDYsOCArNjc3LDEwIEBACiB0cnk6CiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICBfU1NMU29ja2V0ID0gTm9uZQogZWxzZToKKyAgICBfU1NMU29ja2V0ID0gc3NsLlNTTFNvY2tldAorCiAgICAgY2xhc3MgRlRQX1RMUyhGVFApOgogICAgICAgICAnJydBIEZUUCBzdWJjbGFzcyB3aGljaCBhZGRzIFRMUyBzdXBwb3J0IHRvIEZUUCBhcyBkZXNjcmliZWQKICAgICAgICAgaW4gUkZDLTQyMTcuCkBAIC02OTQsNiArNzI3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzZWxmLnNzbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgc2VsZi5fcHJvdF9wID0gRmFsc2UKICAgICAgICAgICAgIEZUUC5fX2luaXRfXyhzZWxmLCBob3N0LCB1c2VyLCBwYXNzd2QsIGFjY3QsIHRpbWVvdXQsIHNvdXJjZV9hZGRyZXNzKQpAQCAtNzExLDEyICs3NDgsNyBAQAogICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggVExTJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBTU0wnKQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlbGYua2V5ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUobW9kZT0ncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCkBAIC03NTUsODAgKzc4Nyw5IEBACiAgICAgICAgIGRlZiBudHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0PU5vbmUpOgogICAgICAgICAgICAgY29ubiwgc2l6ZSA9IEZUUC5udHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0KQogICAgICAgICAgICAgaWYgc2VsZi5fcHJvdF9wOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoY29ubiwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uKQogICAgICAgICAgICAgcmV0dXJuIGNvbm4sIHNpemUKIAotICAgICAgICBkZWYgcmV0cmJpbmFyeShzZWxmLCBjbWQsIGNhbGxiYWNrLCBibG9ja3NpemU9ODE5MiwgcmVzdD1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKLSAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQotICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKLSAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKLSAgICAgICAgICAgIGZwID0gY29ubi5tYWtlZmlsZSgncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIGZwLCBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBzZWxmLm1heGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhawotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9ybGluZXMoc2VsZiwgY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kKSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihidWYpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBCX0NSTEY6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIEJfQ1JMRgotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCiAgICAgICAgIGRlZiBhYm9ydChzZWxmKToKICAgICAgICAgICAgICMgb3ZlcnJpZGRlbiBhcyB3ZSBjYW4ndCBwYXNzIE1TR19PT0IgZmxhZyB0byBzZW5kYWxsKCkKICAgICAgICAgICAgIGxpbmUgPSBiJ0FCT1InICsgQl9DUkxGCkBAIC04MzksNyArODAwLDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKICAgICBfX2FsbF9fLmFwcGVuZCgnRlRQX1RMUycpCi0gICAgYWxsX2Vycm9ycyA9IChFcnJvciwgSU9FcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKKyAgICBhbGxfZXJyb3JzID0gKEVycm9yLCBPU0Vycm9yLCBFT0ZFcnJvciwgc3NsLlNTTEVycm9yKQogCiAKIF8xNTBfcmUgPSBOb25lCkBAIC05MzYsNyArODk3LDggQEAKIAogZGVmIGZ0cGNwKHNvdXJjZSwgc291cmNlbmFtZSwgdGFyZ2V0LCB0YXJnZXRuYW1lID0gJycsIHR5cGUgPSAnSScpOgogICAgICcnJ0NvcHkgZmlsZSBmcm9tIG9uZSBGVFAtaW5zdGFuY2UgdG8gYW5vdGhlci4nJycKLSAgICBpZiBub3QgdGFyZ2V0bmFtZTogdGFyZ2V0bmFtZSA9IHNvdXJjZW5hbWUKKyAgICBpZiBub3QgdGFyZ2V0bmFtZToKKyAgICAgICAgdGFyZ2V0bmFtZSA9IHNvdXJjZW5hbWUKICAgICB0eXBlID0gJ1RZUEUgJyArIHR5cGUKICAgICBzb3VyY2Uudm9pZGNtZCh0eXBlKQogICAgIHRhcmdldC52b2lkY21kKHR5cGUpCkBAIC05NDYsOSArOTA4LDExIEBACiAgICAgIyB0cmFuc2ZlciByZXF1ZXN0LgogICAgICMgU286IFNUT1IgYmVmb3JlIFJFVFIsIGJlY2F1c2UgaGVyZSB0aGUgdGFyZ2V0IGlzIGEgInVzZXIiLgogICAgIHRyZXBseSA9IHRhcmdldC5zZW5kY21kKCdTVE9SICcgKyB0YXJnZXRuYW1lKQotICAgIGlmIHRyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzcmVwbHkgPSBzb3VyY2Uuc2VuZGNtZCgnUkVUUiAnICsgc291cmNlbmFtZSkKLSAgICBpZiBzcmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfTogcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQorICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OgorICAgICAgICByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CiAgICAgc291cmNlLnZvaWRyZXNwKCkKICAgICB0YXJnZXQudm9pZHJlc3AoKQogCkBAIC05NjYsMTkgKzkzMCwyMiBAQAogICAgIF9fZGVmYWNjdCA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIG5ldHJjIG1vZHVsZSBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBpZiAiSE9NRSIgaW4gb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJIT01FIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5uZXRyYyIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNwZWNpZnkgZmlsZSB0byBsb2FkIG9yIHNldCAkSE9NRSIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKICAgICAgICAgc2VsZi5fX2hvc3RzID0ge30KICAgICAgICAgc2VsZi5fX21hY3JvcyA9IHt9CiAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQogICAgICAgICBpbl9tYWNybyA9IDAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZiBpbl9tYWNybyBhbmQgbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgICAgIG1hY3JvX2xpbmVzLmFwcGVuZChsaW5lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0xMDg3LDcgKzEwNTQsNyBAQAogICAgIHVzZXJpZCA9IHBhc3N3ZCA9IGFjY3QgPSAnJwogICAgIHRyeToKICAgICAgICAgbmV0cmMgPSBOZXRyYyhyY2ZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIHJjZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNvdWxkIG5vdCBvcGVuIGFjY291bnQgZmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtLSB1c2luZyBhbm9ueW1vdXMgbG9naW4uIikKZGlmZiAtLWdpdCBhL0xpYi9mdW5jdG9vbHMucHkgYi9MaWIvZnVuY3Rvb2xzLnB5CmluZGV4IDA1M2U0NGUuLjFlNzliMzEgMTAwNjQ0Ci0tLSBhL0xpYi9mdW5jdG9vbHMucHkKKysrIGIvTGliL2Z1bmN0b29scy5weQpAQCAtMywxNiArMywyNCBAQAogIyBQeXRob24gbW9kdWxlIHdyYXBwZXIgZm9yIF9mdW5jdG9vbHMgQyBtb2R1bGUKICMgdG8gYWxsb3cgdXRpbGl0aWVzIHdyaXR0ZW4gaW4gUHl0aG9uIHRvIGJlIGFkZGVkCiAjIHRvIHRoZSBmdW5jdG9vbHMgbW9kdWxlLgotIyBXcml0dGVuIGJ5IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW4gYXQgZ21haWwuY29tPgotIyBhbmQgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgotIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBXcml0dGVuIGJ5IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW4gYXQgZ21haWwuY29tPiwKKyMgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPiwKKyMgYW5kIMWBdWthc3ogTGFuZ2EgPGx1a2FzeiBhdCBsYW5nYS5wbD4uCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAjIFNlZSBDIHNvdXJjZSBjb2RlIGZvciBfZnVuY3Rvb2xzIGNyZWRpdHMvY29weXJpZ2h0CiAKIF9fYWxsX18gPSBbJ3VwZGF0ZV93cmFwcGVyJywgJ3dyYXBzJywgJ1dSQVBQRVJfQVNTSUdOTUVOVFMnLCAnV1JBUFBFUl9VUERBVEVTJywKLSAgICAgICAgICAgJ3RvdGFsX29yZGVyaW5nJywgJ2NtcF90b19rZXknLCAnbHJ1X2NhY2hlJywgJ3JlZHVjZScsICdwYXJ0aWFsJ10KKyAgICAgICAgICAgJ3RvdGFsX29yZGVyaW5nJywgJ2NtcF90b19rZXknLCAnbHJ1X2NhY2hlJywgJ3JlZHVjZScsICdwYXJ0aWFsJywKKyAgICAgICAgICAgJ3BhcnRpYWxtZXRob2QnLCAnc2luZ2xlZGlzcGF0Y2gnXQogCi1mcm9tIF9mdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwsIHJlZHVjZQordHJ5OgorICAgIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcmVkdWNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZnJvbSBhYmMgaW1wb3J0IGdldF9jYWNoZV90b2tlbgogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgTWV0aG9kVHlwZQorZnJvbSB3ZWFrcmVmIGltcG9ydCBXZWFrS2V5RGljdGlvbmFyeQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgUkxvY2sKIGV4Y2VwdDoKQEAgLTQ3LDcgKzU1LDYgQEAKICAgICAgICBhcmUgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBmcm9tIHRoZSB3cmFwcGVkCiAgICAgICAgZnVuY3Rpb24gKGRlZmF1bHRzIHRvIGZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpCiAgICAgIiIiCi0gICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICBmb3IgYXR0ciBpbiBhc3NpZ25lZDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHdyYXBwZWQsIGF0dHIpCkBAIC01Nyw2ICs2NCw5IEBACiAgICAgICAgICAgICBzZXRhdHRyKHdyYXBwZXIsIGF0dHIsIHZhbHVlKQogICAgIGZvciBhdHRyIGluIHVwZGF0ZWQ6CiAgICAgICAgIGdldGF0dHIod3JhcHBlciwgYXR0cikudXBkYXRlKGdldGF0dHIod3JhcHBlZCwgYXR0ciwge30pKQorICAgICMgSXNzdWUgIzE3NDgyOiBzZXQgX193cmFwcGVkX18gbGFzdCBzbyB3ZSBkb24ndCBpbmFkdmVydGVudGx5IGNvcHkgaXQKKyAgICAjIGZyb20gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2hlbiB1cGRhdGluZyBfX2RpY3RfXworICAgIHdyYXBwZXIuX193cmFwcGVkX18gPSB3cmFwcGVkCiAgICAgIyBSZXR1cm4gdGhlIHdyYXBwZXIgc28gdGhpcyBjYW4gYmUgdXNlZCBhcyBhIGRlY29yYXRvciB2aWEgcGFydGlhbCgpCiAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtNzksMjEgKzg5LDkxIEBACiAjIyMgdG90YWxfb3JkZXJpbmcgY2xhc3MgZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCisjIFRoZSBjb3JyZWN0IHdheSB0byBpbmRpY2F0ZSB0aGF0IGEgY29tcGFyaXNvbiBvcGVyYXRpb24gZG9lc24ndAorIyByZWNvZ25pc2UgdGhlIG90aGVyIHR5cGUgaXMgdG8gcmV0dXJuIE5vdEltcGxlbWVudGVkIGFuZCBsZXQgdGhlCisjIGludGVycHJldGVyIGhhbmRsZSByYWlzaW5nIFR5cGVFcnJvciBpZiBib3RoIG9wZXJhbmRzIHJldHVybgorIyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgY29tcGFyaXNvbiBtZXRob2RzCisjCisjIFRoaXMgbWFrZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRvdGFsX29yZGVyaW5nIG1vcmUgY29tcGxpY2F0ZWQsIHNpbmNlCisjIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJpZ2dlciBpbmZpbml0ZSByZWN1cnNpb24gd2hlbiB0d28KKyMgZGlmZmVyZW50IHR5cGVzIHRoYXQgYm90aCB1c2UgdGhpcyBkZWNvcmF0b3IgZW5jb3VudGVyIGVhY2ggb3RoZXIuCisjCisjIEZvciBleGFtcGxlLCBpZiBhIHR5cGUgaW1wbGVtZW50cyBfX2x0X18sIGl0J3MgbmF0dXJhbCB0byBkZWZpbmUKKyMgX19ndF9fIGFzIHNvbWV0aGluZyBsaWtlOgorIworIyAgICBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyCisjCisjIEhvd2V2ZXIsIHVzaW5nIHRoZSBvcGVyYXRvciBzeW50YXggbGlrZSB0aGF0IGVuZHMgdXAgaW52b2tpbmcgdGhlIGZ1bGwKKyMgdHlwZSBjaGVja2luZyBtYWNoaW5lcnkgYWdhaW4gYW5kIG1lYW5zIHdlIGNhbiBlbmQgdXAgYm91bmNpbmcgYmFjayBhbmQKKyMgZm9ydGggYmV0d2VlbiB0aGUgdHdvIG9wZXJhbmRzIHVudGlsIHdlIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCisjCisjIFRoZSBzb2x1dGlvbiBpcyB0byBkZWZpbmUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGludm9rZSB0aGUgYXBwcm9wcmlhdGUKKyMgbWFnaWMgbWV0aG9kcyBkaXJlY3RseSwgZW5zdXJpbmcgd2Ugb25seSB0cnkgZWFjaCBvcGVyYW5kIG9uY2UsIGFuZAorIyByZXR1cm4gTm90SW1wbGVtZW50ZWQgaW1tZWRpYXRlbHkgaWYgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUKKyMgdW5kZXJseWluZyB1c2VyIHByb3ZpZGVkIG1ldGhvZC4gVXNpbmcgdGhpcyBzY2hlbWUsIHRoZSBfX2d0X18gZGVyaXZlZAorIyBmcm9tIGEgdXNlciBwcm92aWRlZCBfX2x0X18gYmVjb21lczoKKyMKKyMgICAgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2x0X18sIHNlbGYsIG90aGVyKSkKKworZGVmIF9ub3Rfb3Aob3AsIG90aGVyKToKKyAgICAjICJub3QgYSA8IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICAjICJub3QgYSA8PSBiIiBoYW5kbGVzICJhID4gYiIKKyAgICAjICJub3QgYSA+PSBiIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJub3QgYSA+IGIiIGhhbmRsZXMgImEgPD0gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfb3Bfb3JfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJhIDwgYiBvciBhID09IGIiIGhhbmRsZXMgImEgPD0gYiIKKyAgICAjICJhID4gYiBvciBhID09IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX25vdF9vcF9hbmRfbm90X2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAibm90IChhIDwgYiBvciBhID09IGIpIiBoYW5kbGVzICJhID4gYiIKKyAgICAjICJub3QgYSA8IGIgYW5kIGEgIT0gYiIgaXMgZXF1aXZhbGVudAorICAgICMgIm5vdCAoYSA+IGIgb3IgYSA9PSBiKSIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAibm90IGEgPiBiIGFuZCBhICE9IGIiIGlzIGVxdWl2YWxlbnQKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfbm90X29wX29yX2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAibm90IGEgPD0gYiBvciBhID09IGIiIGhhbmRsZXMgImEgPj0gYiIKKyAgICAjICJub3QgYSA+PSBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX29wX2FuZF9ub3RfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJhIDw9IGIgYW5kIG5vdCBhID09IGIiIGhhbmRsZXMgImEgPCBiIgorICAgICMgImEgPj0gYiBhbmQgbm90IGEgPT0gYiIgaGFuZGxlcyAiYSA+IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKIGRlZiB0b3RhbF9vcmRlcmluZyhjbHMpOgogICAgICIiIkNsYXNzIGRlY29yYXRvciB0aGF0IGZpbGxzIGluIG1pc3Npbmcgb3JkZXJpbmcgbWV0aG9kcyIiIgogICAgIGNvbnZlcnQgPSB7Ci0gICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCAoc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8IG90aGVyKV0sCi0gICAgICAgICdfX2xlX18nOiBbKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDw9IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDw9IG90aGVyIGFuZCBub3Qgc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDw9IG90aGVyKV0sCi0gICAgICAgICdfX2d0X18nOiBbKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCAoc2VsZiA+IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+IG90aGVyKV0sCi0gICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IChub3Qgc2VsZiA+PSBvdGhlcikgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPj0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPj0gb3RoZXIpXQorICAgICAgICAnX19sdF9fJzogWygnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2x0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9vcl9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fbHRfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2xlX18nOiBbKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Bfb3JfZXEoc2VsZi5fX2xlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9hbmRfbm90X2VxKHNlbGYuX19sZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19sZV9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9hbmRfbm90X2VxKHNlbGYuX19ndF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3Bfb3JfZXEoc2VsZi5fX2d0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2d0X18sIG90aGVyKSldLAorICAgICAgICAnX19nZV9fJzogWygnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX29yX2VxKHNlbGYuX19nZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3BfYW5kX25vdF9lcShzZWxmLl9fZ2VfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fZ2VfXywgb3RoZXIpKV0KICAgICB9CiAgICAgIyBGaW5kIHVzZXItZGVmaW5lZCBjb21wYXJpc29ucyAobm90IHRob3NlIGluaGVyaXRlZCBmcm9tIG9iamVjdCkuCiAgICAgcm9vdHMgPSBbb3AgZm9yIG9wIGluIGNvbnZlcnQgaWYgZ2V0YXR0cihjbHMsIG9wLCBOb25lKSBpcyBub3QgZ2V0YXR0cihvYmplY3QsIG9wLCBOb25lKV0KQEAgLTE0MCw2ICsyMjAsMTAzIEBACiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBwYXJ0aWFsKCkgYXJndW1lbnQgYXBwbGljYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHVyZWx5IGZ1bmN0aW9uYWwsIG5vIGRlc2NyaXB0b3IgYmVoYXZpb3VyCitkZWYgcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3Jkcyk6CisgICAgIiIiTmV3IGZ1bmN0aW9uIHdpdGggcGFydGlhbCBhcHBsaWNhdGlvbiBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgYW5kIGtleXdvcmRzLgorICAgICIiIgorICAgIGRlZiBuZXdmdW5jKCpmYXJncywgKipma2V5d29yZHMpOgorICAgICAgICBuZXdrZXl3b3JkcyA9IGtleXdvcmRzLmNvcHkoKQorICAgICAgICBuZXdrZXl3b3Jkcy51cGRhdGUoZmtleXdvcmRzKQorICAgICAgICByZXR1cm4gZnVuYygqKGFyZ3MgKyBmYXJncyksICoqbmV3a2V5d29yZHMpCisgICAgbmV3ZnVuYy5mdW5jID0gZnVuYworICAgIG5ld2Z1bmMuYXJncyA9IGFyZ3MKKyAgICBuZXdmdW5jLmtleXdvcmRzID0ga2V5d29yZHMKKyAgICByZXR1cm4gbmV3ZnVuYworCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCisjIERlc2NyaXB0b3IgdmVyc2lvbgorY2xhc3MgcGFydGlhbG1ldGhvZChvYmplY3QpOgorICAgICIiIk1ldGhvZCBkZXNjcmlwdG9yIHdpdGggcGFydGlhbCBhcHBsaWNhdGlvbiBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgYW5kIGtleXdvcmRzLgorCisgICAgU3VwcG9ydHMgd3JhcHBpbmcgZXhpc3RpbmcgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgbm9uLWRlc2NyaXB0b3IKKyAgICBjYWxsYWJsZXMgYXMgaW5zdGFuY2UgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprZXl3b3Jkcyk6CisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmdW5jKSBhbmQgbm90IGhhc2F0dHIoZnVuYywgIl9fZ2V0X18iKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigieyFyfSBpcyBub3QgY2FsbGFibGUgb3IgYSBkZXNjcmlwdG9yIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jKSkKKworICAgICAgICAjIGZ1bmMgY291bGQgYmUgYSBkZXNjcmlwdG9yIGxpa2UgY2xhc3NtZXRob2Qgd2hpY2ggaXNuJ3QgY2FsbGFibGUsCisgICAgICAgICMgc28gd2UgY2FuJ3QgaW5oZXJpdCBmcm9tIHBhcnRpYWwgKGl0IHZlcmlmaWVzIGZ1bmMgaXMgY2FsbGFibGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgcGFydGlhbG1ldGhvZCk6CisgICAgICAgICAgICAjIGZsYXR0ZW5pbmcgaXMgbWFuZGF0b3J5IGluIG9yZGVyIHRvIHBsYWNlIGNscy9zZWxmIGJlZm9yZSBhbGwKKyAgICAgICAgICAgICMgb3RoZXIgYXJndW1lbnRzCisgICAgICAgICAgICAjIGl0J3MgYWxzbyBtb3JlIGVmZmljaWVudCBzaW5jZSBvbmx5IG9uZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5mdW5jID0gZnVuYy5mdW5jCisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBmdW5jLmFyZ3MgKyBhcmdzCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzID0gZnVuYy5rZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGtleXdvcmRzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSAiLCAiLmpvaW4obWFwKHJlcHIsIHNlbGYuYXJncykpCisgICAgICAgIGtleXdvcmRzID0gIiwgIi5qb2luKCJ7fT17IXJ9Ii5mb3JtYXQoaywgdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlbXMoKSkKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICJ7bW9kdWxlfS57Y2xzfSh7ZnVuY30sIHthcmdzfSwge2tleXdvcmRzfSkiCisgICAgICAgIHJldHVybiBmb3JtYXRfc3RyaW5nLmZvcm1hdChtb2R1bGU9c2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1zZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmM9c2VsZi5mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM9a2V5d29yZHMpCisKKyAgICBkZWYgX21ha2VfdW5ib3VuZF9tZXRob2Qoc2VsZik6CisgICAgICAgIGRlZiBfbWV0aG9kKCphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgICAgIGNhbGxfa2V5d29yZHMgPSBzZWxmLmtleXdvcmRzLmNvcHkoKQorICAgICAgICAgICAgY2FsbF9rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisgICAgICAgICAgICBjbHNfb3Jfc2VsZiwgKnJlc3QgPSBhcmdzCisgICAgICAgICAgICBjYWxsX2FyZ3MgPSAoY2xzX29yX3NlbGYsKSArIHNlbGYuYXJncyArIHR1cGxlKHJlc3QpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5mdW5jKCpjYWxsX2FyZ3MsICoqY2FsbF9rZXl3b3JkcykKKyAgICAgICAgX21ldGhvZC5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX18KKyAgICAgICAgcmV0dXJuIF9tZXRob2QKKworICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgZ2V0ID0gZ2V0YXR0cihzZWxmLmZ1bmMsICJfX2dldF9fIiwgTm9uZSkKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBpZiBnZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXdfZnVuYyA9IGdldChvYmosIGNscykKKyAgICAgICAgICAgIGlmIG5ld19mdW5jIGlzIG5vdCBzZWxmLmZ1bmM6CisgICAgICAgICAgICAgICAgIyBBc3N1bWUgX19nZXRfXyByZXR1cm5pbmcgc29tZXRoaW5nIG5ldyBpbmRpY2F0ZXMgdGhlCisgICAgICAgICAgICAgICAgIyBjcmVhdGlvbiBvZiBhbiBhcHByb3ByaWF0ZSBjYWxsYWJsZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnRpYWwobmV3X2Z1bmMsICpzZWxmLmFyZ3MsICoqc2VsZi5rZXl3b3JkcykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fX3NlbGZfXyA9IG5ld19mdW5jLl9fc2VsZl9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgIyBJZiB0aGUgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRpZG4ndCBkbyBhbnl0aGluZywgdHJlYXQgdGhpcworICAgICAgICAgICAgIyBsaWtlIGFuIGluc3RhbmNlIG1ldGhvZAorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZV91bmJvdW5kX21ldGhvZCgpLl9fZ2V0X18ob2JqLCBjbHMpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfX2lzYWJzdHJhY3RtZXRob2RfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5mdW5jLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iLCBGYWxzZSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIExSVSBDYWNoZSBmdW5jdGlvbiBkZWNvcmF0b3IKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTIyMCw3ICszOTcsNiBAQAogICAgIFBSRVYsIE5FWFQsIEtFWSwgUkVTVUxUID0gMCwgMSwgMiwgMyAgICMgbmFtZXMgZm9yIHRoZSBsaW5rIGZpZWxkcwogCiAgICAgZGVmIGRlY29yYXRpbmdfZnVuY3Rpb24odXNlcl9mdW5jdGlvbik6Ci0KICAgICAgICAgY2FjaGUgPSB7fQogICAgICAgICBoaXRzID0gbWlzc2VzID0gMAogICAgICAgICBmdWxsID0gRmFsc2UKQEAgLTMyOSwzICs1MDUsMjEwIEBACiAgICAgICAgIHJldHVybiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB1c2VyX2Z1bmN0aW9uKQogCiAgICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIHNpbmdsZWRpc3BhdGNoKCkgLSBzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiBkZWNvcmF0b3IKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBfYzNfbWVyZ2Uoc2VxdWVuY2VzKToKKyAgICAiIiJNZXJnZXMgTVJPcyBpbiAqc2VxdWVuY2VzKiB0byBhIHNpbmdsZSBNUk8gdXNpbmcgdGhlIEMzIGFsZ29yaXRobS4KKworICAgIEFkYXB0ZWQgZnJvbSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uCisKKyAgICAiIiIKKyAgICByZXN1bHQgPSBbXQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHNlcXVlbmNlcyA9IFtzIGZvciBzIGluIHNlcXVlbmNlcyBpZiBzXSAgICMgcHVyZ2UgZW1wdHkgc2VxdWVuY2VzCisgICAgICAgIGlmIG5vdCBzZXF1ZW5jZXM6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGZvciBzMSBpbiBzZXF1ZW5jZXM6ICAgIyBmaW5kIG1lcmdlIGNhbmRpZGF0ZXMgYW1vbmcgc2VxIGhlYWRzCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBzMVswXQorICAgICAgICAgICAgZm9yIHMyIGluIHNlcXVlbmNlczoKKyAgICAgICAgICAgICAgICBpZiBjYW5kaWRhdGUgaW4gczJbMTpdOgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGJyZWFrICAgICAgIyByZWplY3QgdGhlIGN1cnJlbnQgaGVhZCwgaXQgYXBwZWFycyBsYXRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2FuZGlkYXRlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJJbmNvbnNpc3RlbnQgaGllcmFyY2h5IikKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjYW5kaWRhdGUpCisgICAgICAgICMgcmVtb3ZlIHRoZSBjaG9zZW4gY2FuZGlkYXRlCisgICAgICAgIGZvciBzZXEgaW4gc2VxdWVuY2VzOgorICAgICAgICAgICAgaWYgc2VxWzBdID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICBkZWwgc2VxWzBdCisKK2RlZiBfYzNfbXJvKGNscywgYWJjcz1Ob25lKToKKyAgICAiIiJDb21wdXRlcyB0aGUgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgdXNpbmcgZXh0ZW5kZWQgQzMgbGluZWFyaXphdGlvbi4KKworICAgIElmIG5vICphYmNzKiBhcmUgZ2l2ZW4sIHRoZSBhbGdvcml0aG0gd29ya3MgZXhhY3RseSBsaWtlIHRoZSBidWlsdC1pbiBDMworICAgIGxpbmVhcml6YXRpb24gdXNlZCBmb3IgbWV0aG9kIHJlc29sdXRpb24uCisKKyAgICBJZiBnaXZlbiwgKmFiY3MqIGlzIGEgbGlzdCBvZiBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgdGhhdCBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgTVJPLiBVbnJlbGF0ZWQgQUJDcyBhcmUgaWdub3JlZCBhbmQgZG9uJ3QgZW5kIHVwIGluIHRoZQorICAgIHJlc3VsdC4gVGhlIGFsZ29yaXRobSBpbnNlcnRzIEFCQ3Mgd2hlcmUgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBpbnRyb2R1Y2VkLAorICAgIGkuZS4gaXNzdWJjbGFzcyhjbHMsIGFiYykgcmV0dXJucyBUcnVlIGZvciB0aGUgY2xhc3MgaXRzZWxmIGJ1dCByZXR1cm5zCisgICAgRmFsc2UgZm9yIGFsbCBpdHMgZGlyZWN0IGJhc2UgY2xhc3Nlcy4gSW1wbGljaXQgQUJDcyBmb3IgYSBnaXZlbiBjbGFzcworICAgIChlaXRoZXIgcmVnaXN0ZXJlZCBvciBpbmZlcnJlZCBmcm9tIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpYWwgbWV0aG9kIGxpa2UKKyAgICBfX2xlbl9fKSBhcmUgaW5zZXJ0ZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGxhc3QgQUJDIGV4cGxpY2l0bHkgbGlzdGVkIGluIHRoZQorICAgIE1STyBvZiBzYWlkIGNsYXNzLiBJZiB0d28gaW1wbGljaXQgQUJDcyBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGluIHRoZQorICAgIHJlc3VsdGluZyBNUk8sIHRoZWlyIG9yZGVyaW5nIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHR5cGVzIGluICphYmNzKi4KKworICAgICIiIgorICAgIGZvciBpLCBiYXNlIGluIGVudW1lcmF0ZShyZXZlcnNlZChjbHMuX19iYXNlc19fKSk6CisgICAgICAgIGlmIGhhc2F0dHIoYmFzZSwgJ19fYWJzdHJhY3RtZXRob2RzX18nKToKKyAgICAgICAgICAgIGJvdW5kYXJ5ID0gbGVuKGNscy5fX2Jhc2VzX18pIC0gaQorICAgICAgICAgICAgYnJlYWsgICAjIEJhc2VzIHVwIHRvIHRoZSBsYXN0IGV4cGxpY2l0IEFCQyBhcmUgY29uc2lkZXJlZCBmaXJzdC4KKyAgICBlbHNlOgorICAgICAgICBib3VuZGFyeSA9IDAKKyAgICBhYmNzID0gbGlzdChhYmNzKSBpZiBhYmNzIGVsc2UgW10KKyAgICBleHBsaWNpdF9iYXNlcyA9IGxpc3QoY2xzLl9fYmFzZXNfX1s6Ym91bmRhcnldKQorICAgIGFic3RyYWN0X2Jhc2VzID0gW10KKyAgICBvdGhlcl9iYXNlcyA9IGxpc3QoY2xzLl9fYmFzZXNfX1tib3VuZGFyeTpdKQorICAgIGZvciBiYXNlIGluIGFiY3M6CisgICAgICAgIGlmIGlzc3ViY2xhc3MoY2xzLCBiYXNlKSBhbmQgbm90IGFueSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGIsIGJhc2UpIGZvciBiIGluIGNscy5fX2Jhc2VzX18KKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAjIElmICpjbHMqIGlzIHRoZSBjbGFzcyB0aGF0IGludHJvZHVjZXMgYmVoYXZpb3VyIGRlc2NyaWJlZCBieQorICAgICAgICAgICAgIyBhbiBBQkMgKmJhc2UqLCBpbnNlcnQgc2FpZCBBQkMgdG8gaXRzIE1STy4KKyAgICAgICAgICAgIGFic3RyYWN0X2Jhc2VzLmFwcGVuZChiYXNlKQorICAgIGZvciBiYXNlIGluIGFic3RyYWN0X2Jhc2VzOgorICAgICAgICBhYmNzLnJlbW92ZShiYXNlKQorICAgIGV4cGxpY2l0X2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIGV4cGxpY2l0X2Jhc2VzXQorICAgIGFic3RyYWN0X2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIGFic3RyYWN0X2Jhc2VzXQorICAgIG90aGVyX2MzX21yb3MgPSBbX2MzX21ybyhiYXNlLCBhYmNzPWFiY3MpIGZvciBiYXNlIGluIG90aGVyX2Jhc2VzXQorICAgIHJldHVybiBfYzNfbWVyZ2UoCisgICAgICAgIFtbY2xzXV0gKworICAgICAgICBleHBsaWNpdF9jM19tcm9zICsgYWJzdHJhY3RfYzNfbXJvcyArIG90aGVyX2MzX21yb3MgKworICAgICAgICBbZXhwbGljaXRfYmFzZXNdICsgW2Fic3RyYWN0X2Jhc2VzXSArIFtvdGhlcl9iYXNlc10KKyAgICApCisKK2RlZiBfY29tcG9zZV9tcm8oY2xzLCB0eXBlcyk6CisgICAgIiIiQ2FsY3VsYXRlcyB0aGUgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGEgZ2l2ZW4gY2xhc3MgKmNscyouCisKKyAgICBJbmNsdWRlcyByZWxldmFudCBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgKHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBiYXNlcykgZnJvbQorICAgIHRoZSAqdHlwZXMqIGl0ZXJhYmxlLiBVc2VzIGEgbW9kaWZpZWQgQzMgbGluZWFyaXphdGlvbiBhbGdvcml0aG0uCisKKyAgICAiIiIKKyAgICBiYXNlcyA9IHNldChjbHMuX19tcm9fXykKKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIF9fbXJvX18gb3IgdW5yZWxhdGVkLgorICAgIGRlZiBpc19yZWxhdGVkKHR5cCk6CisgICAgICAgIHJldHVybiAodHlwIG5vdCBpbiBiYXNlcyBhbmQgaGFzYXR0cih0eXAsICdfX21yb19fJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpc3N1YmNsYXNzKGNscywgdHlwKSkKKyAgICB0eXBlcyA9IFtuIGZvciBuIGluIHR5cGVzIGlmIGlzX3JlbGF0ZWQobildCisgICAgIyBSZW1vdmUgZW50cmllcyB3aGljaCBhcmUgc3RyaWN0IGJhc2VzIG9mIG90aGVyIGVudHJpZXMgKHRoZXkgd2lsbCBlbmQgdXAKKyAgICAjIGluIHRoZSBNUk8gYW55d2F5LgorICAgIGRlZiBpc19zdHJpY3RfYmFzZSh0eXApOgorICAgICAgICBmb3Igb3RoZXIgaW4gdHlwZXM6CisgICAgICAgICAgICBpZiB0eXAgIT0gb3RoZXIgYW5kIHR5cCBpbiBvdGhlci5fX21yb19fOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgbm90IGlzX3N0cmljdF9iYXNlKG4pXQorICAgICMgU3ViY2xhc3NlcyBvZiB0aGUgQUJDcyBpbiAqdHlwZXMqIHdoaWNoIGFyZSBhbHNvIGltcGxlbWVudGVkIGJ5CisgICAgIyAqY2xzKiBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgQUJDIG9yZGVyaW5nLgorICAgIHR5cGVfc2V0ID0gc2V0KHR5cGVzKQorICAgIG1ybyA9IFtdCisgICAgZm9yIHR5cCBpbiB0eXBlczoKKyAgICAgICAgZm91bmQgPSBbXQorICAgICAgICBmb3Igc3ViIGluIHR5cC5fX3N1YmNsYXNzZXNfXygpOgorICAgICAgICAgICAgaWYgc3ViIG5vdCBpbiBiYXNlcyBhbmQgaXNzdWJjbGFzcyhjbHMsIHN1Yik6CisgICAgICAgICAgICAgICAgZm91bmQuYXBwZW5kKFtzIGZvciBzIGluIHN1Yi5fX21yb19fIGlmIHMgaW4gdHlwZV9zZXRdKQorICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBtcm8uYXBwZW5kKHR5cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgRmF2b3Igc3ViY2xhc3NlcyB3aXRoIHRoZSBiaWdnZXN0IG51bWJlciBvZiB1c2VmdWwgYmFzZXMKKyAgICAgICAgZm91bmQuc29ydChrZXk9bGVuLCByZXZlcnNlPVRydWUpCisgICAgICAgIGZvciBzdWIgaW4gZm91bmQ6CisgICAgICAgICAgICBmb3Igc3ViY2xzIGluIHN1YjoKKyAgICAgICAgICAgICAgICBpZiBzdWJjbHMgbm90IGluIG1ybzoKKyAgICAgICAgICAgICAgICAgICAgbXJvLmFwcGVuZChzdWJjbHMpCisgICAgcmV0dXJuIF9jM19tcm8oY2xzLCBhYmNzPW1ybykKKworZGVmIF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSk6CisgICAgIiIiUmV0dXJucyB0aGUgYmVzdCBtYXRjaGluZyBpbXBsZW1lbnRhdGlvbiBmcm9tICpyZWdpc3RyeSogZm9yIHR5cGUgKmNscyouCisKKyAgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cyBtZXRob2QKKyAgICByZXNvbHV0aW9uIG9yZGVyIGlzIHVzZWQgdG8gZmluZCBhIG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKworICAgIE5vdGU6IGlmICpyZWdpc3RyeSogZG9lcyBub3QgY29udGFpbiBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGJhc2UKKyAgICAqb2JqZWN0KiB0eXBlLCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gTm9uZS4KKworICAgICIiIgorICAgIG1ybyA9IF9jb21wb3NlX21ybyhjbHMsIHJlZ2lzdHJ5LmtleXMoKSkKKyAgICBtYXRjaCA9IE5vbmUKKyAgICBmb3IgdCBpbiBtcm86CisgICAgICAgIGlmIG1hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBJZiAqbWF0Y2gqIGlzIGFuIGltcGxpY2l0IEFCQyBidXQgdGhlcmUgaXMgYW5vdGhlciB1bnJlbGF0ZWQsCisgICAgICAgICAgICAjIGVxdWFsbHkgbWF0Y2hpbmcgaW1wbGljaXQgQUJDLCByZWZ1c2UgdGhlIHRlbXB0YXRpb24gdG8gZ3Vlc3MuCisgICAgICAgICAgICBpZiAodCBpbiByZWdpc3RyeSBhbmQgdCBub3QgaW4gY2xzLl9fbXJvX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtYXRjaCBub3QgaW4gY2xzLl9fbXJvX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgaXNzdWJjbGFzcyhtYXRjaCwgdCkpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQW1iaWd1b3VzIGRpc3BhdGNoOiB7fSBvciB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBtYXRjaCwgdCkpCisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiB0IGluIHJlZ2lzdHJ5OgorICAgICAgICAgICAgbWF0Y2ggPSB0CisgICAgcmV0dXJuIHJlZ2lzdHJ5LmdldChtYXRjaCkKKworZGVmIHNpbmdsZWRpc3BhdGNoKGZ1bmMpOgorICAgICIiIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIGRlY29yYXRvci4KKworICAgIFRyYW5zZm9ybXMgYSBmdW5jdGlvbiBpbnRvIGEgZ2VuZXJpYyBmdW5jdGlvbiwgd2hpY2ggY2FuIGhhdmUgZGlmZmVyZW50CisgICAgYmVoYXZpb3VycyBkZXBlbmRpbmcgdXBvbiB0aGUgdHlwZSBvZiBpdHMgZmlyc3QgYXJndW1lbnQuIFRoZSBkZWNvcmF0ZWQKKyAgICBmdW5jdGlvbiBhY3RzIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBhbmQgYWRkaXRpb25hbAorICAgIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgcmVnaXN0ZXIoKSBhdHRyaWJ1dGUgb2YgdGhlCisgICAgZ2VuZXJpYyBmdW5jdGlvbi4KKworICAgICIiIgorICAgIHJlZ2lzdHJ5ID0ge30KKyAgICBkaXNwYXRjaF9jYWNoZSA9IFdlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICBjYWNoZV90b2tlbiA9IE5vbmUKKworICAgIGRlZiBkaXNwYXRjaChjbHMpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMuZGlzcGF0Y2goY2xzKSAtPiA8ZnVuY3Rpb24gaW1wbGVtZW50YXRpb24+CisKKyAgICAgICAgUnVucyB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtIHRvIHJldHVybiB0aGUgYmVzdCBhdmFpbGFibGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgZm9yIHRoZSBnaXZlbiAqY2xzKiByZWdpc3RlcmVkIG9uICpnZW5lcmljX2Z1bmMqLgorCisgICAgICAgICIiIgorICAgICAgICBub25sb2NhbCBjYWNoZV90b2tlbgorICAgICAgICBpZiBjYWNoZV90b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN1cnJlbnRfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICAgICAgaWYgY2FjaGVfdG9rZW4gIT0gY3VycmVudF90b2tlbjoKKyAgICAgICAgICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBjdXJyZW50X3Rva2VuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcGwgPSBkaXNwYXRjaF9jYWNoZVtjbHNdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBsID0gcmVnaXN0cnlbY2xzXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGltcGwgPSBfZmluZF9pbXBsKGNscywgcmVnaXN0cnkpCisgICAgICAgICAgICBkaXNwYXRjaF9jYWNoZVtjbHNdID0gaW1wbAorICAgICAgICByZXR1cm4gaW1wbAorCisgICAgZGVmIHJlZ2lzdGVyKGNscywgZnVuYz1Ob25lKToKKyAgICAgICAgIiIiZ2VuZXJpY19mdW5jLnJlZ2lzdGVyKGNscywgZnVuYykgLT4gZnVuYworCisgICAgICAgIFJlZ2lzdGVycyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdpdmVuICpjbHMqIG9uIGEgKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZjogcmVnaXN0ZXIoY2xzLCBmKQorICAgICAgICByZWdpc3RyeVtjbHNdID0gZnVuYworICAgICAgICBpZiBjYWNoZV90b2tlbiBpcyBOb25lIGFuZCBoYXNhdHRyKGNscywgJ19fYWJzdHJhY3RtZXRob2RzX18nKToKKyAgICAgICAgICAgIGNhY2hlX3Rva2VuID0gZ2V0X2NhY2hlX3Rva2VuKCkKKyAgICAgICAgZGlzcGF0Y2hfY2FjaGUuY2xlYXIoKQorICAgICAgICByZXR1cm4gZnVuYworCisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgorICAgICAgICByZXR1cm4gZGlzcGF0Y2goYXJnc1swXS5fX2NsYXNzX18pKCphcmdzLCAqKmt3KQorCisgICAgcmVnaXN0cnlbb2JqZWN0XSA9IGZ1bmMKKyAgICB3cmFwcGVyLnJlZ2lzdGVyID0gcmVnaXN0ZXIKKyAgICB3cmFwcGVyLmRpc3BhdGNoID0gZGlzcGF0Y2gKKyAgICB3cmFwcGVyLnJlZ2lzdHJ5ID0gTWFwcGluZ1Byb3h5VHlwZShyZWdpc3RyeSkKKyAgICB3cmFwcGVyLl9jbGVhcl9jYWNoZSA9IGRpc3BhdGNoX2NhY2hlLmNsZWFyCisgICAgdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZnVuYykKKyAgICByZXR1cm4gd3JhcHBlcgpkaWZmIC0tZ2l0IGEvTGliL2dlbmVyaWNwYXRoLnB5IGIvTGliL2dlbmVyaWNwYXRoLnB5CmluZGV4IDM0MGMwMDQuLmNhNGE1MTAgMTAwNjQ0Ci0tLSBhL0xpYi9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvZ2VuZXJpY3BhdGgucHkKQEAgLTcsNyArNyw4IEBACiBpbXBvcnQgc3RhdAogCiBfX2FsbF9fID0gWydjb21tb25wcmVmaXgnLCAnZXhpc3RzJywgJ2dldGF0aW1lJywgJ2dldGN0aW1lJywgJ2dldG10aW1lJywKLSAgICAgICAgICAgJ2dldHNpemUnLCAnaXNkaXInLCAnaXNmaWxlJ10KKyAgICAgICAgICAgJ2dldHNpemUnLCAnaXNkaXInLCAnaXNmaWxlJywgJ3NhbWVmaWxlJywgJ3NhbWVvcGVuZmlsZScsCisgICAgICAgICAgICdzYW1lc3RhdCddCiAKIAogIyBEb2VzIGEgcGF0aCBleGlzdD8KQEAgLTE2LDcgKzE3LDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApAQCAtMjcsNyArMjgsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSByZWd1bGFyIGZpbGUiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU1JFRyhzdC5zdF9tb2RlKQogCkBAIC0zOSw3ICs0MCw3IEBACiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLnN0YXQocykKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNESVIoc3Quc3RfbW9kZSkKIApAQCAtNzUsNiArNzYsMzEgQEAKICAgICAgICAgICAgIHJldHVybiBzMVs6aV0KICAgICByZXR1cm4gczEKIAorIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKKyMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPworZGVmIHNhbWVzdGF0KHMxLCBzMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBzdGF0IGJ1ZmZlcnMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKKyAgICByZXR1cm4gKHMxLnN0X2lubyA9PSBzMi5zdF9pbm8gYW5kCisgICAgICAgICAgICBzMS5zdF9kZXYgPT0gczIuc3RfZGV2KQorCisKKyMgQXJlIHR3byBmaWxlbmFtZXMgcmVhbGx5IHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZWZpbGUoZjEsIGYyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKKyAgICBzMSA9IG9zLnN0YXQoZjEpCisgICAgczIgPSBvcy5zdGF0KGYyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKworIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/CisjIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKK2RlZiBzYW1lb3BlbmZpbGUoZnAxLCBmcDIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gb3BlbiBmaWxlIG9iamVjdHMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKKyAgICBzMSA9IG9zLmZzdGF0KGZwMSkKKyAgICBzMiA9IG9zLmZzdGF0KGZwMikKKyAgICByZXR1cm4gc2FtZXN0YXQoczEsIHMyKQorCisKICMgU3BsaXQgYSBwYXRoIGluIHJvb3QgYW5kIGV4dGVuc2lvbi4KICMgVGhlIGV4dGVuc2lvbiBpcyBldmVyeXRoaW5nIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGRvdCBpbiB0aGUgbGFzdAogIyBwYXRobmFtZSBjb21wb25lbnQ7IHRoZSByb290IGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoYXQuCmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDAwNDQ3NDIuLjUzYzM4YjggMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC0xNSw3ICsxNSwxMSBAQAogIyAgICAgICAgICBHdWlkbyB2YW4gUm9zc3VtIChXaW5kb3dzIHN1cHBvcnQgYW5kIGNsZWFudXApCiAjICAgICAgICAgIEdyZWdvcnkgUC4gU21pdGggKHR0eSBzdXBwb3J0ICYgR2V0UGFzc1dhcm5pbmcpCiAKLWltcG9ydCBvcywgc3lzLCB3YXJuaW5ncworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKIAogX19hbGxfXyA9IFsiZ2V0cGFzcyIsImdldHVzZXIiLCJHZXRQYXNzV2FybmluZyJdCiAKQEAgLTM4LDUyICs0Miw1NyBAQAogCiAgICAgQWx3YXlzIHJlc3RvcmVzIHRlcm1pbmFsIHNldHRpbmdzIGJlZm9yZSByZXR1cm5pbmcuCiAgICAgIiIiCi0gICAgZmQgPSBOb25lCi0gICAgdHR5ID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgIyBBbHdheXMgdHJ5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZGlyZWN0bHkgb24gdGhlIHR0eSBmaXJzdC4KLSAgICAgICAgZmQgPSBvcy5vcGVuKCcvZGV2L3R0eScsIG9zLk9fUkRXUnxvcy5PX05PQ1RUWSkKLSAgICAgICAgdHR5ID0gb3MuZmRvcGVuKGZkLCAndysnLCAxKQotICAgICAgICBpbnB1dCA9IHR0eQotICAgICAgICBpZiBub3Qgc3RyZWFtOgotICAgICAgICAgICAgc3RyZWFtID0gdHR5Ci0gICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKLSAgICAgICAgIyBJZiB0aGF0IGZhaWxzLCBzZWUgaWYgc3RkaW4gY2FuIGJlIGNvbnRyb2xsZWQuCisgICAgcGFzc3dkID0gTm9uZQorICAgIHdpdGggY29udGV4dGxpYi5FeGl0U3RhY2soKSBhcyBzdGFjazoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKLSAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBwYXNzd2QgPSBmYWxsYmFja19nZXRwYXNzKHByb21wdCwgc3RyZWFtKQotICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgotICAgICAgICBpZiBub3Qgc3RyZWFtOgotICAgICAgICAgICAgc3RyZWFtID0gc3lzLnN0ZGVycgotCi0gICAgaWYgZmQgaXMgbm90IE5vbmU6Ci0gICAgICAgIHBhc3N3ZCA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpICAgICAjIGEgY29weSB0byBzYXZlCi0gICAgICAgICAgICBuZXcgPSBvbGRbOl0KLSAgICAgICAgICAgIG5ld1szXSAmPSB+dGVybWlvcy5FQ0hPICAjIDMgPT0gJ2xmbGFncycKLSAgICAgICAgICAgIHRjc2V0YXR0cl9mbGFncyA9IHRlcm1pb3MuVENTQUZMVVNICi0gICAgICAgICAgICBpZiBoYXNhdHRyKHRlcm1pb3MsICdUQ1NBU09GVCcpOgotICAgICAgICAgICAgICAgIHRjc2V0YXR0cl9mbGFncyB8PSB0ZXJtaW9zLlRDU0FTT0ZUCisgICAgICAgICAgICAjIEFsd2F5cyB0cnkgcmVhZGluZyBhbmQgd3JpdGluZyBkaXJlY3RseSBvbiB0aGUgdHR5IGZpcnN0LgorICAgICAgICAgICAgZmQgPSBvcy5vcGVuKCcvZGV2L3R0eScsIG9zLk9fUkRXUnxvcy5PX05PQ1RUWSkKKyAgICAgICAgICAgIHR0eSA9IGlvLkZpbGVJTyhmZCwgJ3crJykKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQodHR5KQorICAgICAgICAgICAgaW5wdXQgPSBpby5UZXh0SU9XcmFwcGVyKHR0eSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQoaW5wdXQpCisgICAgICAgICAgICBpZiBub3Qgc3RyZWFtOgorICAgICAgICAgICAgICAgIHN0cmVhbSA9IGlucHV0CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIElmIHRoYXQgZmFpbHMsIHNlZSBpZiBzdGRpbiBjYW4gYmUgY29udHJvbGxlZC4KKyAgICAgICAgICAgIHN0YWNrLmNsb3NlKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGNzZXRhdHRyX2ZsYWdzLCBuZXcpCi0gICAgICAgICAgICAgICAgcGFzc3dkID0gX3Jhd19pbnB1dChwcm9tcHQsIHN0cmVhbSwgaW5wdXQ9aW5wdXQpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG9sZCkKLSAgICAgICAgICAgICAgICBzdHJlYW0uZmx1c2goKSAgIyBpc3N1ZTcyMDgKLSAgICAgICAgZXhjZXB0IHRlcm1pb3MuZXJyb3I6Ci0gICAgICAgICAgICBpZiBwYXNzd2QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBfcmF3X2lucHV0IHN1Y2NlZWRlZC4gIFRoZSBmaW5hbCB0Y3NldGF0dHIgZmFpbGVkLiAgUmVyYWlzZQotICAgICAgICAgICAgICAgICMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSB0ZXJtaW5hbCBpbiBhbiB1bmtub3duIHN0YXRlLgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAjIFdlIGNhbid0IGNvbnRyb2wgdGhlIHR0eSBvciBzdGRpbi4gIEdpdmUgdXAgYW5kIHVzZSBub3JtYWwgSU8uCi0gICAgICAgICAgICAjIGZhbGxiYWNrX2dldHBhc3MoKSByYWlzZXMgYW4gYXBwcm9wcmlhdGUgd2FybmluZy4KLSAgICAgICAgICAgIGRlbCBpbnB1dCwgdHR5ICAjIGNsZWFuIHVwIHVudXNlZCBmaWxlIG9iamVjdHMgYmVmb3JlIGJsb2NraW5nCi0gICAgICAgICAgICBwYXNzd2QgPSBmYWxsYmFja19nZXRwYXNzKHByb21wdCwgc3RyZWFtKQorICAgICAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBmZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBwYXNzd2QgPSBmYWxsYmFja19nZXRwYXNzKHByb21wdCwgc3RyZWFtKQorICAgICAgICAgICAgaW5wdXQgPSBzeXMuc3RkaW4KKyAgICAgICAgICAgIGlmIG5vdCBzdHJlYW06CisgICAgICAgICAgICAgICAgc3RyZWFtID0gc3lzLnN0ZGVycgogCi0gICAgc3RyZWFtLndyaXRlKCdcbicpCi0gICAgcmV0dXJuIHBhc3N3ZAorICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkgICAgICMgYSBjb3B5IHRvIHNhdmUKKyAgICAgICAgICAgICAgICBuZXcgPSBvbGRbOl0KKyAgICAgICAgICAgICAgICBuZXdbM10gJj0gfnRlcm1pb3MuRUNITyAgIyAzID09ICdsZmxhZ3MnCisgICAgICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzID0gdGVybWlvcy5UQ1NBRkxVU0gKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHRlcm1pb3MsICdUQ1NBU09GVCcpOgorICAgICAgICAgICAgICAgICAgICB0Y3NldGF0dHJfZmxhZ3MgfD0gdGVybWlvcy5UQ1NBU09GVAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRjc2V0YXR0cl9mbGFncywgbmV3KQorICAgICAgICAgICAgICAgICAgICBwYXNzd2QgPSBfcmF3X2lucHV0KHByb21wdCwgc3RyZWFtLCBpbnB1dD1pbnB1dCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGNzZXRhdHRyX2ZsYWdzLCBvbGQpCisgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpICAjIGlzc3VlNzIwOAorICAgICAgICAgICAgZXhjZXB0IHRlcm1pb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgaWYgcGFzc3dkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIF9yYXdfaW5wdXQgc3VjY2VlZGVkLiAgVGhlIGZpbmFsIHRjc2V0YXR0ciBmYWlsZWQuICBSZXJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSB0ZXJtaW5hbCBpbiBhbiB1bmtub3duIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICMgV2UgY2FuJ3QgY29udHJvbCB0aGUgdHR5IG9yIHN0ZGluLiAgR2l2ZSB1cCBhbmQgdXNlIG5vcm1hbCBJTy4KKyAgICAgICAgICAgICAgICAjIGZhbGxiYWNrX2dldHBhc3MoKSByYWlzZXMgYW4gYXBwcm9wcmlhdGUgd2FybmluZy4KKyAgICAgICAgICAgICAgICBpZiBzdHJlYW0gaXMgbm90IGlucHV0OgorICAgICAgICAgICAgICAgICAgICAjIGNsZWFuIHVwIHVudXNlZCBmaWxlIG9iamVjdHMgYmVmb3JlIGJsb2NraW5nCisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBwYXNzd2QgPSBmYWxsYmFja19nZXRwYXNzKHByb21wdCwgc3RyZWFtKQorCisgICAgICAgIHN0cmVhbS53cml0ZSgnXG4nKQorICAgICAgICByZXR1cm4gcGFzc3dkCiAKIAogZGVmIHdpbl9nZXRwYXNzKHByb21wdD0nUGFzc3dvcmQ6ICcsIHN0cmVhbT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9nZXR0ZXh0LnB5IGIvTGliL2dldHRleHQucHkKaW5kZXggZTQzZjA0NC4uMDVkOWMxZSAxMDA2NDQKLS0tIGEvTGliL2dldHRleHQucHkKKysrIGIvTGliL2dldHRleHQucHkKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgICAgICAgICAgdmVyc2lvbiwgbXNnY291bnQsIG1hc3RlcmlkeCwgdHJhbnNpZHggPSB1bnBhY2soJz40SScsIGJ1Zls0OjIwXSkKICAgICAgICAgICAgIGlpID0gJz5JSScKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0JhZCBtYWdpYyBudW1iZXInLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgJ0JhZCBtYWdpYyBudW1iZXInLCBmaWxlbmFtZSkKICAgICAgICAgIyBOb3cgcHV0IGFsbCBtZXNzYWdlcyBmcm9tIHRoZSAubW8gZmlsZSBidWZmZXIgaW50byB0aGUgY2F0YWxvZwogICAgICAgICAjIGRpY3Rpb25hcnkuCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG1zZ2NvdW50KToKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IGJ1Zlttb2ZmOm1lbmRdCiAgICAgICAgICAgICAgICAgdG1zZyA9IGJ1Zlt0b2ZmOnRlbmRdCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0ZpbGUgaXMgY29ycnVwdCcsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoMCwgJ0ZpbGUgaXMgY29ycnVwdCcsIGZpbGVuYW1lKQogICAgICAgICAgICAgIyBTZWUgaWYgd2UncmUgbG9va2luZyBhdCBHTlUgLm1vIGNvbnZlbnRpb25zIGZvciBtZXRhZGF0YQogICAgICAgICAgICAgaWYgbWxlbiA9PSAwOgogICAgICAgICAgICAgICAgICMgQ2F0YWxvZyBkZXNjcmlwdGlvbgpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgaWYgbm90IG1vZmlsZXM6CiAgICAgICAgIGlmIGZhbGxiYWNrOgogICAgICAgICAgICAgcmV0dXJuIE51bGxUcmFuc2xhdGlvbnMoKQotICAgICAgICByYWlzZSBJT0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihFTk9FTlQsICdObyB0cmFuc2xhdGlvbiBmaWxlIGZvdW5kIGZvciBkb21haW4nLCBkb21haW4pCiAgICAgIyBBdm9pZCBvcGVuaW5nLCByZWFkaW5nLCBhbmQgcGFyc2luZyB0aGUgLm1vIGZpbGUgYWZ0ZXIgaXQncyBiZWVuIGRvbmUKICAgICAjIG9uY2UuCiAgICAgcmVzdWx0ID0gTm9uZQpAQCAtNDYwLDcgKzQ2MCw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gbWVzc2FnZQogICAgIHJldHVybiB0LmdldHRleHQobWVzc2FnZSkKIApAQCAtNDY4LDcgKzQ2OCw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gbWVzc2FnZQogICAgIHJldHVybiB0LmxnZXR0ZXh0KG1lc3NhZ2UpCiAKQEAgLTQ3Niw3ICs0NzYsNyBAQAogICAgIHRyeToKICAgICAgICAgdCA9IHRyYW5zbGF0aW9uKGRvbWFpbiwgX2xvY2FsZWRpcnMuZ2V0KGRvbWFpbiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc2V0PV9sb2NhbGVjb2Rlc2V0cy5nZXQoZG9tYWluKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgbiA9PSAxOgogICAgICAgICAgICAgcmV0dXJuIG1zZ2lkMQogICAgICAgICBlbHNlOgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZ2xvYi5weSBiL0xpYi9nbG9iLnB5CmluZGV4IDFmNjAyNjUuLmUzODhiNWYgMTAwNjQ0Ci0tLSBhL0xpYi9nbG9iLnB5CisrKyBiL0xpYi9nbG9iLnB5CkBAIC0zMiw4ICszMiw3IEBACiAgICAgICAgIHJldHVybgogICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdChwYXRobmFtZSkKICAgICBpZiBub3QgZGlybmFtZToKLSAgICAgICAgZm9yIG5hbWUgaW4gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpOgotICAgICAgICAgICAgeWllbGQgbmFtZQorICAgICAgICB5aWVsZCBmcm9tIGdsb2IxKE5vbmUsIGJhc2VuYW1lKQogICAgICAgICByZXR1cm4KICAgICAjIGBvcy5wYXRoLnNwbGl0KClgIHJldHVybnMgdGhlIGFyZ3VtZW50IGl0c2VsZiBhcyBhIGRpcm5hbWUgaWYgaXQgaXMgYQogICAgICMgZHJpdmUgb3IgVU5DIHBhdGguICBQcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIGRyaXZlIG9yIFVOQyBwYXRoCkBAIC02Miw3ICs2MSw3IEBACiAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBbXQogICAgIGlmIG5vdCBfaXNoaWRkZW4ocGF0dGVybik6CiAgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gbmFtZXMgaWYgbm90IF9pc2hpZGRlbih4KV0KQEAgLTgwLDggKzc5LDggQEAKICAgICByZXR1cm4gW10KIAogCi1tYWdpY19jaGVjayA9IHJlLmNvbXBpbGUoJ1sqP1tdJykKLW1hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJ1sqP1tdJykKK21hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnKFsqP1tdKScpCittYWdpY19jaGVja19ieXRlcyA9IHJlLmNvbXBpbGUoYicoWyo/W10pJykKIAogZGVmIGhhc19tYWdpYyhzKToKICAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzKToKQEAgLTkyLDMgKzkxLDE1IEBACiAKIGRlZiBfaXNoaWRkZW4ocGF0aCk6CiAgICAgcmV0dXJuIHBhdGhbMF0gaW4gKCcuJywgYicuJ1swXSkKKworZGVmIGVzY2FwZShwYXRobmFtZSk6CisgICAgIiIiRXNjYXBlIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICAgIiIiCisgICAgIyBFc2NhcGluZyBpcyBkb25lIGJ5IHdyYXBwaW5nIGFueSBvZiAiKj9bIiBiZXR3ZWVuIHNxdWFyZSBicmFja2V0cy4KKyAgICAjIE1ldGFjaGFyYWN0ZXJzIGRvIG5vdCB3b3JrIGluIHRoZSBkcml2ZSBwYXJ0IGFuZCBzaG91bGRuJ3QgYmUgZXNjYXBlZC4KKyAgICBkcml2ZSwgcGF0aG5hbWUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShwYXRobmFtZSwgYnl0ZXMpOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrX2J5dGVzLnN1YihicidbXDFdJywgcGF0aG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgcGF0aG5hbWUgPSBtYWdpY19jaGVjay5zdWIocidbXDFdJywgcGF0aG5hbWUpCisgICAgcmV0dXJuIGRyaXZlICsgcGF0aG5hbWUKZGlmZiAtLWdpdCBhL0xpYi9nemlwLnB5IGIvTGliL2d6aXAucHkKaW5kZXggMmZkMDNmYS4uOGQyMWZlNCAxMDA2NDQKLS0tIGEvTGliL2d6aXAucHkKKysrIGIvTGliL2d6aXAucHkKQEAgLTIzLDkgKzIzLDkgQEAKICAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKICAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJhIiBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwKLSAgICBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlCi0gICAgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAieCIsICJ4YiIsICJhIiBvciAiYWIiIGZvcgorICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcworICAgICJyYiIsIGFuZCB0aGUgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCiAKICAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgR3ppcEZpbGUgY29uc3RydWN0b3I6CiAgICAgR3ppcEZpbGUoZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwpLiBJbiB0aGlzIGNhc2UsIHRoZSBlbmNvZGluZywgZXJyb3JzCkBAIC02NSw5ICs2NSw2IEBACiAgICAgIyBvciB1bnNpZ25lZC4KICAgICBvdXRwdXQud3JpdGUoc3RydWN0LnBhY2soIjxMIiwgdmFsdWUpKQogCi1kZWYgcmVhZDMyKGlucHV0KToKLSAgICByZXR1cm4gc3RydWN0LnVucGFjaygiPEkiLCBpbnB1dC5yZWFkKDQpKVswXQotCiBjbGFzcyBfUGFkZGVkRmlsZToKICAgICAiIiJNaW5pbWFsIHJlYWQtb25seSBmaWxlIG9iamVjdCB0aGF0IHByZXBlbmRzIGEgc3RyaW5nIHRvIHRoZSBjb250ZW50cwogICAgIG9mIGFuIGFjdHVhbCBmaWxlLiBTaG91bGRuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGd6aXAucHksIGFzIGl0IGxhY2tzCkBAIC0xNTQsMTEgKzE1MSwxMSBAQAogICAgICAgICBmaWxlb2JqLCBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCBpdCBkZWZhdWx0cyB0byB0aGUgZW1wdHkgc3RyaW5nLAogICAgICAgICBhbmQgaW4gdGhpcyBjYXNlIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KIAotICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsIG9yICd3YicsCi0gICAgICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvciB3cml0dGVuLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIGFueSBvZiAncicsICdyYicsICdhJywgJ2FiJywgJ3cnLCAnd2InLCAneCcsIG9yCisgICAgICAgICd4YicgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAogICAgICAgICBpcyB0aGUgbW9kZSBvZiBmaWxlb2JqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzICdyYicuCiAgICAgICAgIEEgbW9kZSBvZiAncicgaXMgZXF1aXZhbGVudCB0byBvbmUgb2YgJ3JiJywgYW5kIHNpbWlsYXJseSBmb3IgJ3cnIGFuZAotICAgICAgICAnd2InLCBhbmQgJ2EnIGFuZCAnYWInLgorICAgICAgICAnd2InLCAnYScgYW5kICdhYicsIGFuZCAneCcgYW5kICd4YicuCiAKICAgICAgICAgVGhlIGNvbXByZXNzbGV2ZWwgYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDAgdG8gOSBjb250cm9sbGluZyB0aGUKICAgICAgICAgbGV2ZWwgb2YgY29tcHJlc3Npb247IDEgaXMgZmFzdGVzdCBhbmQgcHJvZHVjZXMgdGhlIGxlYXN0IGNvbXByZXNzaW9uLApAQCAtMjA0LDcgKzIwMSw3IEBACiAgICAgICAgICAgICBzZWxmLm1pbl9yZWFkc2l6ZSA9IDEwMAogICAgICAgICAgICAgZmlsZW9iaiA9IF9QYWRkZWRGaWxlKGZpbGVvYmopCiAKLSAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnKSk6CisgICAgICAgIGVsaWYgbW9kZS5zdGFydHN3aXRoKCgndycsICdhJywgJ3gnKSk6CiAgICAgICAgICAgICBzZWxmLm1vZGUgPSBXUklURQogICAgICAgICAgICAgc2VsZi5faW5pdF93cml0ZShmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYuY29tcHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKGNvbXByZXNzbGV2ZWwsCkBAIC0yODEsMjggKzI3OCwzMiBAQAogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoYiIiKSAmIDB4ZmZmZmZmZmYKICAgICAgICAgc2VsZi5zaXplID0gMAogCisgICAgZGVmIF9yZWFkX2V4YWN0KHNlbGYsIG4pOgorICAgICAgICBkYXRhID0gc2VsZi5maWxlb2JqLnJlYWQobikKKyAgICAgICAgd2hpbGUgbGVuKGRhdGEpIDwgbjoKKyAgICAgICAgICAgIGIgPSBzZWxmLmZpbGVvYmoucmVhZChuIC0gbGVuKGRhdGEpKQorICAgICAgICAgICAgaWYgbm90IGI6CisgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQorICAgICAgICAgICAgZGF0YSArPSBiCisgICAgICAgIHJldHVybiBkYXRhCisKICAgICBkZWYgX3JlYWRfZ3ppcF9oZWFkZXIoc2VsZik6CiAgICAgICAgIG1hZ2ljID0gc2VsZi5maWxlb2JqLnJlYWQoMikKICAgICAgICAgaWYgbWFnaWMgPT0gYicnOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIlJlYWNoZWQgRU9GIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIG1hZ2ljICE9IGInXDAzN1wyMTMnOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05vdCBhIGd6aXBwZWQgZmlsZScpCiAKLSAgICAgICAgbWV0aG9kID0gb3JkKCBzZWxmLmZpbGVvYmoucmVhZCgxKSApCisgICAgICAgIG1ldGhvZCwgZmxhZywgc2VsZi5tdGltZSA9IHN0cnVjdC51bnBhY2soIjxCQkl4eCIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIG1ldGhvZCAhPSA4OgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQotICAgICAgICBmbGFnID0gb3JkKCBzZWxmLmZpbGVvYmoucmVhZCgxKSApCi0gICAgICAgIHNlbGYubXRpbWUgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICAjIGV4dHJhZmxhZyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgICMgb3MgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQotICAgICAgICBzZWxmLmZpbGVvYmoucmVhZCgyKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQogCiAgICAgICAgIGlmIGZsYWcgJiBGRVhUUkE6CiAgICAgICAgICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSBleHRyYSBmaWVsZCwgaWYgcHJlc2VudAotICAgICAgICAgICAgeGxlbiA9IG9yZChzZWxmLmZpbGVvYmoucmVhZCgxKSkKLSAgICAgICAgICAgIHhsZW4gPSB4bGVuICsgMjU2Km9yZChzZWxmLmZpbGVvYmoucmVhZCgxKSkKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKHhsZW4pCisgICAgICAgICAgICBleHRyYV9sZW4sID0gc3RydWN0LnVucGFjaygiPEgiLCBzZWxmLl9yZWFkX2V4YWN0KDIpKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9leGFjdChleHRyYV9sZW4pCiAgICAgICAgIGlmIGZsYWcgJiBGTkFNRToKICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgIHdoaWxlIFRydWU6CkBAIC0zMTYsMTggKzMxNywxOSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBzIG9yIHM9PWInXDAwMCc6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGZsYWcgJiBGSENSQzoKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQworICAgICAgICAgICAgc2VsZi5fcmVhZF9leGFjdCgyKSAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgMTYtYml0IGhlYWRlciBDUkMKIAogICAgICAgICB1bnVzZWQgPSBzZWxmLmZpbGVvYmoudW51c2VkKCkKICAgICAgICAgaWYgdW51c2VkOgogICAgICAgICAgICAgdW5jb21wcmVzcyA9IHNlbGYuZGVjb21wcmVzcy5kZWNvbXByZXNzKHVudXNlZCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEodW5jb21wcmVzcykKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiB3cml0ZShzZWxmLGRhdGEpOgogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gV1JJVEU6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJ3cml0ZSgpIG9uIHJlYWQtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSgpIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3QiKQpAQCAtMzQ4LDI3ICszNTAsMjMgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJyZWFkKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKICAgICAgICAgcmVhZHNpemUgPSAxMDI0CiAgICAgICAgIGlmIHNpemUgPCAwOiAgICAgICAgIyBnZXQgdGhlIHdob2xlIHRoaW5nCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQorICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZChyZWFkc2l6ZSk6CisgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQorICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCiAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgIyBqdXN0IGdldCBzb21lIG1vcmUgb2YgaXQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQocmVhZHNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJlYWRzaXplID0gbWluKHNlbGYubWF4X3JlYWRfY2h1bmssIHJlYWRzaXplICogMikKLSAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQorICAgICAgICAgICAgd2hpbGUgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQogCiAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CiAgICAgICAgIGNodW5rID0gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IG9mZnNldCArIHNpemVdCkBAIC0zODEsMTcgKzM3OSwxNCBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQxKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInJlYWQxKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQogCiAgICAgICAgIGlmIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGInJwogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCi0gICAgICAgICAgICAjIGFueSBkYXRhLiBJbiB0aGlzIGNhc2UsIHJldHJ5IHVudGlsIHdlIGdldCBzb21lIGRhdGEgb3IgcmVhY2ggRU9GLgotICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPD0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKCkKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAjIEZvciBjZXJ0YWluIGlucHV0IGRhdGEsIGEgc2luZ2xlIGNhbGwgdG8gX3JlYWQoKSBtYXkgbm90IHJldHVybgorICAgICAgICAjIGFueSBkYXRhLiBJbiB0aGlzIGNhc2UsIHJldHJ5IHVudGlsIHdlIGdldCBzb21lIGRhdGEgb3IgcmVhY2ggRU9GLgorICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLl9yZWFkKCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIHNpemUgPCAwIG9yIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKICAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQpAQCAtNDA1LDcgKzQwMCw3IEBACiAgICAgZGVmIHBlZWsoc2VsZiwgbik6CiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicGVlaygpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQogCiAgICAgICAgICMgRG8gbm90IHJldHVybiByaWRpY3Vsb3VzbHkgc21hbGwgYnVmZmVycywgZm9yIG9uZSBjb21tb24gaWRpb20KICAgICAgICAgIyBpcyB0byBjYWxsIHBlZWsoMSkgYW5kIGV4cGVjdCBtb3JlIGJ5dGVzIGluIHJldHVybi4KQEAgLTQxNCwxMiArNDA5LDkgQEAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPT0gMDoKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGRvbid0IHJldHVybiBiIiIgaWYgd2UgaGF2ZW4ndCByZWFjaGVkIEVPRi4KLSAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA9PSAwOgotICAgICAgICAgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKG1heChuLCAxMDI0KSkKLSAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgorICAgICAgICAgICAgIyAxMDI0IGlzIHRoZSBzYW1lIGJ1ZmZlcmluZyBoZXVyaXN0aWMgdXNlZCBpbiByZWFkKCkKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDAgYW5kIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CiAgICAgICAgIHJlbWFpbmluZyA9IHNlbGYuZXh0cmFzaXplCkBAIC00MzIsMTMgKzQyNCwxNCBAQAogCiAgICAgZGVmIF9yZWFkKHNlbGYsIHNpemU9MTAyNCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIlJlYWNoZWQgRU9GIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIHNlbGYuX25ld19tZW1iZXI6CiAgICAgICAgICAgICAjIElmIHRoZSBfbmV3X21lbWJlciBmbGFnIGlzIHNldCwgd2UgaGF2ZSB0bwogICAgICAgICAgICAgIyBqdW1wIHRvIHRoZSBuZXh0IG1lbWJlciwgaWYgdGhlcmUgaXMgb25lLgogICAgICAgICAgICAgc2VsZi5faW5pdF9yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHNlbGYuZGVjb21wcmVzcyA9IHpsaWIuZGVjb21wcmVzc29iaigtemxpYi5NQVhfV0JJVFMpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gRmFsc2UKIApAQCAtNDU1LDcgKzQ0OCw3IEBACiAgICAgICAgICAgICBzZWxmLmZpbGVvYmoucHJlcGVuZChzZWxmLmRlY29tcHJlc3MudW51c2VkX2RhdGEsIFRydWUpCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKCB1bmNvbXByZXNzICkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCdSZWFjaGVkIEVPRicpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3MoYnVmKQogICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKCB1bmNvbXByZXNzICkKQEAgLTQ3MSw2ICs0NjQsNyBAQAogICAgICAgICAgICAgIyBhIG5ldyBtZW1iZXIgb24gdGhlIG5leHQgY2FsbAogICAgICAgICAgICAgc2VsZi5fcmVhZF9lb2YoKQogICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBfYWRkX3JlYWRfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmYKQEAgLTQ4NSwxMyArNDc5LDEyIEBACiAgICAgICAgICMgV2UgY2hlY2sgdGhlIHRoYXQgdGhlIGNvbXB1dGVkIENSQyBhbmQgc2l6ZSBvZiB0aGUKICAgICAgICAgIyB1bmNvbXByZXNzZWQgZGF0YSBtYXRjaGVzIHRoZSBzdG9yZWQgdmFsdWVzLiAgTm90ZSB0aGF0IHRoZSBzaXplCiAgICAgICAgICMgc3RvcmVkIGlzIHRoZSB0cnVlIGZpbGUgc2l6ZSBtb2QgMioqMzIuCi0gICAgICAgIGNyYzMyID0gcmVhZDMyKHNlbGYuZmlsZW9iaikKLSAgICAgICAgaXNpemUgPSByZWFkMzIoc2VsZi5maWxlb2JqKSAgIyBtYXkgZXhjZWVkIDJHQgorICAgICAgICBjcmMzMiwgaXNpemUgPSBzdHJ1Y3QudW5wYWNrKCI8SUkiLCBzZWxmLl9yZWFkX2V4YWN0KDgpKQogICAgICAgICBpZiBjcmMzMiAhPSBzZWxmLmNyYzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDUkMgY2hlY2sgZmFpbGVkICVzICE9ICVzIiAlIChoZXgoY3JjMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuY3JjKSkpCiAgICAgICAgIGVsaWYgaXNpemUgIT0gKHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkluY29ycmVjdCBsZW5ndGggb2YgZGF0YSBwcm9kdWNlZCIpCiAKICAgICAgICAgIyBHemlwIGZpbGVzIGNhbiBiZSBwYWRkZWQgd2l0aCB6ZXJvZXMgYW5kIHN0aWxsIGhhdmUgYXJjaGl2ZXMuCiAgICAgICAgICMgQ29uc3VtZSBhbGwgemVybyBieXRlcyBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdApAQCAtNTQwLDcgKzUzMyw3IEBACiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQogICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwKQogICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQogICAgICAgICBzZWxmLmV4dHJhYnVmID0gYiIiCkBAIC01NjUsNyArNTU4LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZWVrIGZyb20gZW5kIG5vdCBzdXBwb3J0ZWQnKQogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLm9mZnNldDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOZWdhdGl2ZSBzZWVrIGluIHdyaXRlIG1vZGUnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCiAgICAgICAgICAgICBjb3VudCA9IG9mZnNldCAtIHNlbGYub2Zmc2V0CiAgICAgICAgICAgICBjaHVuayA9IGJ5dGVzKDEwMjQpCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCAvLyAxMDI0KToKZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggMjE0NTRjNy4uNzc2NzNmMCAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTEsNCArMSw0IEBACi0jICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyMuICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIApAQCAtNTQsNDAgKzU0LDUyIEBACiAKICMgVGhpcyB0dXBsZSBhbmQgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcigpIG11c3QgYmUgbW9kaWZpZWQgaWYgYSBuZXcKICMgYWx3YXlzIGF2YWlsYWJsZSBhbGdvcml0aG0gaXMgYWRkZWQuCi1fX2Fsd2F5c19zdXBwb3J0ZWQgPSAoJ21kNScsICdzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicpCitfX2Fsd2F5c19zdXBwb3J0ZWQgPSAoJ21kNScsICdzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicsCisgICAgICAgICAgICAgICAgICAgICAgJ3NoYTNfMjI0JywgJ3NoYTNfMjU2JywgJ3NoYTNfMzg0JywgJ3NoYTNfNTEyJykKIAogYWxnb3JpdGhtc19ndWFyYW50ZWVkID0gc2V0KF9fYWx3YXlzX3N1cHBvcnRlZCkKIGFsZ29yaXRobXNfYXZhaWxhYmxlID0gc2V0KF9fYWx3YXlzX3N1cHBvcnRlZCkKIAogX19hbGxfXyA9IF9fYWx3YXlzX3N1cHBvcnRlZCArICgnbmV3JywgJ2FsZ29yaXRobXNfZ3VhcmFudGVlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGdvcml0aG1zX2F2YWlsYWJsZScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGdvcml0aG1zX2F2YWlsYWJsZScsICdwYmtkZjJfaG1hYycpCiAKIAorX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlID0ge30KKwogZGVmIF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CisgICAgY2FjaGUgPSBfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUKKyAgICBjb25zdHJ1Y3RvciA9IGNhY2hlLmdldChuYW1lKQorICAgIGlmIGNvbnN0cnVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gY29uc3RydWN0b3IKICAgICB0cnk6CiAgICAgICAgIGlmIG5hbWUgaW4gKCdTSEExJywgJ3NoYTEnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhMQotICAgICAgICAgICAgcmV0dXJuIF9zaGExLnNoYTEKKyAgICAgICAgICAgIGNhY2hlWydTSEExJ10gPSBjYWNoZVsnc2hhMSddID0gX3NoYTEuc2hhMQogICAgICAgICBlbGlmIG5hbWUgaW4gKCdNRDUnLCAnbWQ1Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQotICAgICAgICAgICAgcmV0dXJuIF9tZDUubWQ1CisgICAgICAgICAgICBjYWNoZVsnTUQ1J10gPSBjYWNoZVsnbWQ1J10gPSBfbWQ1Lm1kNQogICAgICAgICBlbGlmIG5hbWUgaW4gKCdTSEEyNTYnLCAnc2hhMjU2JywgJ1NIQTIyNCcsICdzaGEyMjQnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhMjU2Ci0gICAgICAgICAgICBicyA9IG5hbWVbMzpdCi0gICAgICAgICAgICBpZiBicyA9PSAnMjU2JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTI1Ni5zaGEyNTYKLSAgICAgICAgICAgIGVsaWYgYnMgPT0gJzIyNCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGEyNTYuc2hhMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBMjI0J10gPSBjYWNoZVsnc2hhMjI0J10gPSBfc2hhMjU2LnNoYTIyNAorICAgICAgICAgICAgY2FjaGVbJ1NIQTI1NiddID0gY2FjaGVbJ3NoYTI1NiddID0gX3NoYTI1Ni5zaGEyNTYKICAgICAgICAgZWxpZiBuYW1lIGluICgnU0hBNTEyJywgJ3NoYTUxMicsICdTSEEzODQnLCAnc2hhMzg0Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTUxMgotICAgICAgICAgICAgYnMgPSBuYW1lWzM6XQotICAgICAgICAgICAgaWYgYnMgPT0gJzUxMic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhNTEyCi0gICAgICAgICAgICBlbGlmIGJzID09ICczODQnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTM4NCddID0gY2FjaGVbJ3NoYTM4NCddID0gX3NoYTUxMi5zaGEzODQKKyAgICAgICAgICAgIGNhY2hlWydTSEE1MTInXSA9IGNhY2hlWydzaGE1MTInXSA9IF9zaGE1MTIuc2hhNTEyCisgICAgICAgIGVsaWYgbmFtZSBpbiB7J3NoYTNfMjI0JywgJ3NoYTNfMjU2JywgJ3NoYTNfMzg0JywgJ3NoYTNfNTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAnU0hBM18yMjQnLCAnU0hBM18yNTYnLCAnU0hBM18zODQnLCAnU0hBM181MTInfToKKyAgICAgICAgICAgIGltcG9ydCBfc2hhMworICAgICAgICAgICAgY2FjaGVbJ1NIQTNfMjI0J10gPSBjYWNoZVsnc2hhM18yMjQnXSA9IF9zaGEzLnNoYTNfMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBM18yNTYnXSA9IGNhY2hlWydzaGEzXzI1NiddID0gX3NoYTMuc2hhM18yNTYKKyAgICAgICAgICAgIGNhY2hlWydTSEEzXzM4NCddID0gY2FjaGVbJ3NoYTNfMzg0J10gPSBfc2hhMy5zaGEzXzM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTNfNTEyJ10gPSBjYWNoZVsnc2hhM181MTInXSA9IF9zaGEzLnNoYTNfNTEyCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICBwYXNzICAjIG5vIGV4dGVuc2lvbiBtb2R1bGUsIHRoaXMgaGFzaCBpcyB1bnN1cHBvcnRlZC4KIAorICAgIGNvbnN0cnVjdG9yID0gY2FjaGUuZ2V0KG5hbWUpCisgICAgaWYgY29uc3RydWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcgorCiAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgaGFzaCB0eXBlICcgKyBuYW1lKQogCiAKQEAgLTEzNCw2ICsxNDYsNzEgQEAKICAgICBuZXcgPSBfX3B5X25ldwogICAgIF9fZ2V0X2hhc2ggPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yCiAKK3RyeToKKyAgICAjIE9wZW5TU0wncyBQS0NTNV9QQktERjJfSE1BQyByZXF1aXJlcyBPcGVuU1NMIDEuMCsgd2l0aCBITUFDIGFuZCBTSEEKKyAgICBmcm9tIF9oYXNobGliIGltcG9ydCBwYmtkZjJfaG1hYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF90cmFuc181QyA9IGJ5dGVzKCh4IF4gMHg1QykgZm9yIHggaW4gcmFuZ2UoMjU2KSkKKyAgICBfdHJhbnNfMzYgPSBieXRlcygoeCBeIDB4MzYpIGZvciB4IGluIHJhbmdlKDI1NikpCisKKyAgICBkZWYgcGJrZGYyX2htYWMoaGFzaF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywgZGtsZW49Tm9uZSk6CisgICAgICAgICIiIlBhc3N3b3JkIGJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIgKFBLQ1MgIzUgdjIuMCkKKworICAgICAgICBUaGlzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gdGhlIGhtYWMgbW9kdWxlIGFib3V0IGFzIGZhc3QKKyAgICAgICAgYXMgT3BlblNTTCdzIFBLQ1M1X1BCS0RGMl9ITUFDIGZvciBzaG9ydCBwYXNzd29yZHMgYW5kIG11Y2ggZmFzdGVyCisgICAgICAgIGZvciBsb25nIHBhc3N3b3Jkcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGhhc2hfbmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihoYXNoX25hbWUpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFzc3dvcmQsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBwYXNzd29yZCA9IGJ5dGVzKG1lbW9yeXZpZXcocGFzc3dvcmQpKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzYWx0LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2FsdCA9IGJ5dGVzKG1lbW9yeXZpZXcoc2FsdCkpCisKKyAgICAgICAgIyBGYXN0IGlubGluZSBITUFDIGltcGxlbWVudGF0aW9uCisgICAgICAgIGlubmVyID0gbmV3KGhhc2hfbmFtZSkKKyAgICAgICAgb3V0ZXIgPSBuZXcoaGFzaF9uYW1lKQorICAgICAgICBibG9ja3NpemUgPSBnZXRhdHRyKGlubmVyLCAnYmxvY2tfc2l6ZScsIDY0KQorICAgICAgICBpZiBsZW4ocGFzc3dvcmQpID4gYmxvY2tzaXplOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBuZXcoaGFzaF9uYW1lLCBwYXNzd29yZCkuZGlnZXN0KCkKKyAgICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZCArIGInXHgwMCcgKiAoYmxvY2tzaXplIC0gbGVuKHBhc3N3b3JkKSkKKyAgICAgICAgaW5uZXIudXBkYXRlKHBhc3N3b3JkLnRyYW5zbGF0ZShfdHJhbnNfMzYpKQorICAgICAgICBvdXRlci51cGRhdGUocGFzc3dvcmQudHJhbnNsYXRlKF90cmFuc181QykpCisKKyAgICAgICAgZGVmIHByZihtc2csIGlubmVyPWlubmVyLCBvdXRlcj1vdXRlcik6CisgICAgICAgICAgICAjIFBCS0RGMl9ITUFDIHVzZXMgdGhlIHBhc3N3b3JkIGFzIGtleS4gV2UgY2FuIHJlLXVzZSB0aGUgc2FtZQorICAgICAgICAgICAgIyBkaWdlc3Qgb2JqZWN0cyBhbmQgYW5kIGp1c3QgdXBkYXRlIGNvcGllcyB0byBza2lwIGluaXRpYWxpemF0aW9uLgorICAgICAgICAgICAgaWNweSA9IGlubmVyLmNvcHkoKQorICAgICAgICAgICAgb2NweSA9IG91dGVyLmNvcHkoKQorICAgICAgICAgICAgaWNweS51cGRhdGUobXNnKQorICAgICAgICAgICAgb2NweS51cGRhdGUoaWNweS5kaWdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvY3B5LmRpZ2VzdCgpCisKKyAgICAgICAgaWYgaXRlcmF0aW9ucyA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGl0ZXJhdGlvbnMpCisgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICBka2xlbiA9IG91dGVyLmRpZ2VzdF9zaXplCisgICAgICAgIGlmIGRrbGVuIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZGtsZW4pCisKKyAgICAgICAgZGtleSA9IGInJworICAgICAgICBsb29wID0gMQorICAgICAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICAgICAgd2hpbGUgbGVuKGRrZXkpIDwgZGtsZW46CisgICAgICAgICAgICBwcmV2ID0gcHJmKHNhbHQgKyBsb29wLnRvX2J5dGVzKDQsICdiaWcnKSkKKyAgICAgICAgICAgICMgZW5kaWFuZXNzIGRvZXNuJ3QgbWF0dGVyIGhlcmUgYXMgbG9uZyB0byAvIGZyb20gdXNlIHRoZSBzYW1lCisgICAgICAgICAgICBya2V5ID0gaW50LmZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zIC0gMSk6CisgICAgICAgICAgICAgICAgcHJldiA9IHByZihwcmV2KQorICAgICAgICAgICAgICAgICMgcmtleSA9IHJrZXkgXiBwcmV2CisgICAgICAgICAgICAgICAgcmtleSBePSBmcm9tX2J5dGVzKHByZXYsICdiaWcnKQorICAgICAgICAgICAgbG9vcCArPSAxCisgICAgICAgICAgICBka2V5ICs9IHJrZXkudG9fYnl0ZXMoaW5uZXIuZGlnZXN0X3NpemUsICdiaWcnKQorCisgICAgICAgIHJldHVybiBka2V5Wzpka2xlbl0KKworCiBmb3IgX19mdW5jX25hbWUgaW4gX19hbHdheXNfc3VwcG9ydGVkOgogICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9MaWIvaG1hYy5weSBiL0xpYi9obWFjLnB5CmluZGV4IDQyOTdhNzEuLjc3Nzg1YTIgMTAwNjQ0Ci0tLSBhL0xpYi9obWFjLnB5CisrKyBiL0xpYi9obWFjLnB5CkBAIC00LDcgKzQsOCBAQAogIiIiCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKLWZyb20gb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAorZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAoraW1wb3J0IGhhc2hsaWIgYXMgX2hhc2hsaWIKIAogdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCiB0cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKQEAgLTI4LDIxICsyOSwyNyBAQAogICAgICAgICBrZXk6ICAgICAgIGtleSBmb3IgdGhlIGtleWVkIGhhc2ggb2JqZWN0LgogICAgICAgICBtc2c6ICAgICAgIEluaXRpYWwgaW5wdXQgZm9yIHRoZSBoYXNoLCBpZiBwcm92aWRlZC4KICAgICAgICAgZGlnZXN0bW9kOiBBIG1vZHVsZSBzdXBwb3J0aW5nIFBFUCAyNDcuICAqT1IqCi0gICAgICAgICAgICAgICAgICAgQSBoYXNobGliIGNvbnN0cnVjdG9yIHJldHVybmluZyBhIG5ldyBoYXNoIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LiAqT1IqCisgICAgICAgICAgICAgICAgICAgQSBoYXNoIG5hbWUgc3VpdGFibGUgZm9yIGhhc2hsaWIubmV3KCkuCiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gaGFzaGxpYi5tZDUuCisgICAgICAgICAgICAgICAgICAgSW1wbGljaXQgZGVmYXVsdCB0byBoYXNobGliLm1kNSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBpbiBQeXRob24gMy42LgogCi0gICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3RzLgogICAgICAgICAiIiIKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcyBvciBieXRlYXJyYXksIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCiAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgotICAgICAgICAgICAgaW1wb3J0IGhhc2hsaWIKLSAgICAgICAgICAgIGRpZ2VzdG1vZCA9IGhhc2hsaWIubWQ1CisgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSE1BQygpIHdpdGhvdXQgYW4gZXhwbGljaXQgZGlnZXN0bW9kIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBkaWdlc3Rtb2QgPSBfaGFzaGxpYi5tZDUKIAogICAgICAgICBpZiBjYWxsYWJsZShkaWdlc3Rtb2QpOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGRpZ2VzdG1vZAorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGlnZXN0bW9kLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogX2hhc2hsaWIubmV3KGRpZ2VzdG1vZCwgZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBsYW1iZGEgZD1iJyc6IGRpZ2VzdG1vZC5uZXcoZCkKIApAQCAtNjMsNiArNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQogICAgICAgICAgICAgYmxvY2tzaXplID0gc2VsZi5ibG9ja3NpemUKIAorICAgICAgICAjIHNlbGYuYmxvY2tzaXplIGlzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZS4gc2VsZi5ibG9ja19zaXplIGlzCisgICAgICAgICMgZWZmZWN0aXZlIGJsb2NrIHNpemUgYXMgd2VsbCBhcyB0aGUgcHVibGljIEFQSSBhdHRyaWJ1dGUuCisgICAgICAgIHNlbGYuYmxvY2tfc2l6ZSA9IGJsb2Nrc2l6ZQorCiAgICAgICAgIGlmIGxlbihrZXkpID4gYmxvY2tzaXplOgogICAgICAgICAgICAga2V5ID0gc2VsZi5kaWdlc3RfY29ucyhrZXkpLmRpZ2VzdCgpCiAKQEAgLTcyLDExICs4MywxMyBAQAogICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShtc2cpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJobWFjLSIgKyBzZWxmLmlubmVyLm5hbWUKKwogICAgIGRlZiB1cGRhdGUoc2VsZiwgbXNnKToKICAgICAgICAgIiIiVXBkYXRlIHRoaXMgaGFzaGluZyBvYmplY3Qgd2l0aCB0aGUgc3RyaW5nIG1zZy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1zZywgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKG1zZykuX19uYW1lX18pCiAgICAgICAgIHNlbGYuaW5uZXIudXBkYXRlKG1zZykKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvX19pbml0X18ucHkgYi9MaWIvaHRtbC9fX2luaXRfXy5weQppbmRleCAwMjY1MmVmLi5kYTBhMGEzIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9fX2luaXRfXy5weQorKysgYi9MaWIvaHRtbC9fX2luaXRfXy5weQpAQCAtMiwxMiArMiwxMiBAQAogR2VuZXJhbCBmdW5jdGlvbnMgZm9yIEhUTUwgbWFuaXB1bGF0aW9uLgogIiIiCiAKK2ltcG9ydCByZSBhcyBfcmUKK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUgYXMgX2h0bWw1CiAKLV9lc2NhcGVfbWFwID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnfQotX2VzY2FwZV9tYXBfZnVsbCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7JywKLSAgICAgICAgICAgICAgICAgICAgb3JkKCciJyk6ICcmcXVvdDsnLCBvcmQoJ1wnJyk6ICcmI3gyNzsnfQogCi0jIE5COiB0aGlzIGlzIGEgY2FuZGlkYXRlIGZvciBhIGJ5dGVzL3N0cmluZyBwb2x5bW9ycGhpYyBpbnRlcmZhY2UKK19fYWxsX18gPSBbJ2VzY2FwZScsICd1bmVzY2FwZSddCisKIAogZGVmIGVzY2FwZShzLCBxdW90ZT1UcnVlKToKICAgICAiIiIKQEAgLTE2LDYgKzE2LDExNyBAQAogICAgIGNoYXJhY3RlcnMsIGJvdGggZG91YmxlIHF1b3RlICgiKSBhbmQgc2luZ2xlIHF1b3RlICgnKSBjaGFyYWN0ZXJzIGFyZSBhbHNvCiAgICAgdHJhbnNsYXRlZC4KICAgICAiIiIKKyAgICBzID0gcy5yZXBsYWNlKCImIiwgIiZhbXA7IikgIyBNdXN0IGJlIGRvbmUgZmlyc3QhCisgICAgcyA9IHMucmVwbGFjZSgiPCIsICImbHQ7IikKKyAgICBzID0gcy5yZXBsYWNlKCI+IiwgIiZndDsiKQogICAgIGlmIHF1b3RlOgotICAgICAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXBfZnVsbCkKLSAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXApCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJyInLCAiJnF1b3Q7IikKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnXCcnLCAiJiN4Mjc7IikKKyAgICByZXR1cm4gcworCisKKyMgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI3Rva2VuaXppbmctY2hhcmFjdGVyLXJlZmVyZW5jZXMKKworX2ludmFsaWRfY2hhcnJlZnMgPSB7CisgICAgMHgwMDogJ1x1ZmZmZCcsICAjIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgorICAgIDB4MGQ6ICdccicsICAgICAgIyBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDgwOiAnXHUyMGFjJywgICMgRVVSTyBTSUdOCisgICAgMHg4MTogJ1x4ODEnLCAgICAjIDxjb250cm9sPgorICAgIDB4ODI6ICdcdTIwMWEnLCAgIyBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAweDgzOiAnXHUwMTkyJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHg4NDogJ1x1MjAxZScsICAjIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODU6ICdcdTIwMjYnLCAgIyBIT1JJWk9OVEFMIEVMTElQU0lTCisgICAgMHg4NjogJ1x1MjAyMCcsICAjIERBR0dFUgorICAgIDB4ODc6ICdcdTIwMjEnLCAgIyBET1VCTEUgREFHR0VSCisgICAgMHg4ODogJ1x1MDJjNicsICAjIE1PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4ODk6ICdcdTIwMzAnLCAgIyBQRVIgTUlMTEUgU0lHTgorICAgIDB4OGE6ICdcdTAxNjAnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDhiOiAnXHUyMDM5JywgICMgU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDhjOiAnXHUwMTUyJywgICMgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQorICAgIDB4OGQ6ICdceDhkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDhlOiAnXHUwMTdkJywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg4ZjogJ1x4OGYnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTA6ICdceDkwJywgICAgIyA8Y29udHJvbD4KKyAgICAweDkxOiAnXHUyMDE4JywgICMgTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkyOiAnXHUyMDE5JywgICMgUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5MzogJ1x1MjAxYycsICAjIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NDogJ1x1MjAxZCcsICAjIFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTU6ICdcdTIwMjInLCAgIyBCVUxMRVQKKyAgICAweDk2OiAnXHUyMDEzJywgICMgRU4gREFTSAorICAgIDB4OTc6ICdcdTIwMTQnLCAgIyBFTSBEQVNICisgICAgMHg5ODogJ1x1MDJkYycsICAjIFNNQUxMIFRJTERFCisgICAgMHg5OTogJ1x1MjEyMicsICAjIFRSQURFIE1BUksgU0lHTgorICAgIDB4OWE6ICdcdTAxNjEnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OCisgICAgMHg5YjogJ1x1MjAzYScsICAjIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OWM6ICdcdTAxNTMnLCAgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRQorICAgIDB4OWQ6ICdceDlkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDllOiAnXHUwMTdlJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorICAgIDB4OWY6ICdcdTAxNzgnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCit9CisKK19pbnZhbGlkX2NvZGVwb2ludHMgPSB7CisgICAgIyAweDAwMDEgdG8gMHgwMDA4CisgICAgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgsCisgICAgIyAweDAwMEUgdG8gMHgwMDFGCisgICAgMHhlLCAweGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgICAgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAjIDB4MDA3RiB0byAweDAwOUYKKyAgICAweDdmLCAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLAorICAgIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisgICAgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAjIDB4RkREMCB0byAweEZERUYKKyAgICAweGZkZDAsIDB4ZmRkMSwgMHhmZGQyLCAweGZkZDMsIDB4ZmRkNCwgMHhmZGQ1LCAweGZkZDYsIDB4ZmRkNywgMHhmZGQ4LAorICAgIDB4ZmRkOSwgMHhmZGRhLCAweGZkZGIsIDB4ZmRkYywgMHhmZGRkLCAweGZkZGUsIDB4ZmRkZiwgMHhmZGUwLCAweGZkZTEsCisgICAgMHhmZGUyLCAweGZkZTMsIDB4ZmRlNCwgMHhmZGU1LCAweGZkZTYsIDB4ZmRlNywgMHhmZGU4LCAweGZkZTksIDB4ZmRlYSwKKyAgICAweGZkZWIsIDB4ZmRlYywgMHhmZGVkLCAweGZkZWUsIDB4ZmRlZiwKKyAgICAjIG90aGVycworICAgIDB4YiwgMHhmZmZlLCAweGZmZmYsIDB4MWZmZmUsIDB4MWZmZmYsIDB4MmZmZmUsIDB4MmZmZmYsIDB4M2ZmZmUsIDB4M2ZmZmYsCisgICAgMHg0ZmZmZSwgMHg0ZmZmZiwgMHg1ZmZmZSwgMHg1ZmZmZiwgMHg2ZmZmZSwgMHg2ZmZmZiwgMHg3ZmZmZSwgMHg3ZmZmZiwKKyAgICAweDhmZmZlLCAweDhmZmZmLCAweDlmZmZlLCAweDlmZmZmLCAweGFmZmZlLCAweGFmZmZmLCAweGJmZmZlLCAweGJmZmZmLAorICAgIDB4Y2ZmZmUsIDB4Y2ZmZmYsIDB4ZGZmZmUsIDB4ZGZmZmYsIDB4ZWZmZmUsIDB4ZWZmZmYsIDB4ZmZmZmUsIDB4ZmZmZmYsCisgICAgMHgxMGZmZmUsIDB4MTBmZmZmCit9CisKKworZGVmIF9yZXBsYWNlX2NoYXJyZWYocyk6CisgICAgcyA9IHMuZ3JvdXAoMSkKKyAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgIyBudW1lcmljIGNoYXJyZWYKKyAgICAgICAgaWYgc1sxXSBpbiAneFgnOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMjpdLnJzdHJpcCgnOycpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG51bSA9IGludChzWzE6XS5yc3RyaXAoJzsnKSkKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NoYXJyZWZzOgorICAgICAgICAgICAgcmV0dXJuIF9pbnZhbGlkX2NoYXJyZWZzW251bV0KKyAgICAgICAgaWYgMHhEODAwIDw9IG51bSA8PSAweERGRkYgb3IgbnVtID4gMHgxMEZGRkY6CisgICAgICAgICAgICByZXR1cm4gJ1x1RkZGRCcKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NvZGVwb2ludHM6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIGNocihudW0pCisgICAgZWxzZToKKyAgICAgICAgIyBuYW1lZCBjaGFycmVmCisgICAgICAgIGlmIHMgaW4gX2h0bWw1OgorICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzXQorICAgICAgICAjIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgbmFtZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihzKS0xLCAxLCAtMSk6CisgICAgICAgICAgICBpZiBzWzp4XSBpbiBfaHRtbDU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzWzp4XV0gKyBzW3g6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKKworCitfY2hhcnJlZiA9IF9yZS5jb21waWxlKHInJigjWzAtOV0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfCNbeFhdWzAtOWEtZkEtRl0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfFteXHRcblxmIDwmIztdezEsMzJ9Oz8pJykKKworZGVmIHVuZXNjYXBlKHMpOgorICAgICIiIgorICAgIENvbnZlcnQgYWxsIG5hbWVkIGFuZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChlLmcuICZndDssICYjNjI7LAorICAgICZ4M2U7KSBpbiB0aGUgc3RyaW5nIHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLgorICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICAgZm9yIGJvdGggdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMsIGFuZCB0aGUgbGlzdCBvZgorICAgIEhUTUwgNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBkZWZpbmVkIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisgICAgIiIiCisgICAgaWYgJyYnIG5vdCBpbiBzOgorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiBfY2hhcnJlZi5zdWIoX3JlcGxhY2VfY2hhcnJlZiwgcykKZGlmZiAtLWdpdCBhL0xpYi9odG1sL3BhcnNlci5weSBiL0xpYi9odG1sL3BhcnNlci5weQppbmRleCAyZDNiZWYzLi4xMmMyOGI4IDEwMDY0NAotLS0gYS9MaWIvaHRtbC9wYXJzZXIucHkKKysrIGIvTGliL2h0bWwvcGFyc2VyLnB5CkBAIC04LDkgKzgsMTQgQEAKICMgYW5kIENEQVRBIChjaGFyYWN0ZXIgZGF0YSAtLSBvbmx5IGVuZCB0YWdzIGFyZSBzcGVjaWFsKS4KIAogCi1pbXBvcnQgX21hcmt1cGJhc2UKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX21hcmt1cGJhc2UKKworZnJvbSBodG1sIGltcG9ydCB1bmVzY2FwZQorCisKK19fYWxsX18gPSBbJ0hUTUxQYXJzZXInXQogCiAjIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCBmb3IgcGFyc2luZwogCkBAIC05Miw2ICs5Nyw4IEBACiAgICAgICAgIHJldHVybiByZXN1bHQKIAogCitfZGVmYXVsdF9zZW50aW5lbCA9IG9iamVjdCgpCisKIGNsYXNzIEhUTUxQYXJzZXIoX21hcmt1cGJhc2UuUGFyc2VyQmFzZSk6CiAgICAgIiIiRmluZCB0YWdzIGFuZCBvdGhlciBtYXJrdXAgYW5kIGNhbGwgaGFuZGxlciBmdW5jdGlvbnMuCiAKQEAgLTEwNSwyNiArMTEyLDM5IEBACiAgICAgc2VsZi5oYW5kbGVfc3RhcnRlbmR0YWcoKTsgZW5kIHRhZ3MgYnkgc2VsZi5oYW5kbGVfZW5kdGFnKCkuICBUaGUKICAgICBkYXRhIGJldHdlZW4gdGFncyBpcyBwYXNzZWQgZnJvbSB0aGUgcGFyc2VyIHRvIHRoZSBkZXJpdmVkIGNsYXNzCiAgICAgYnkgY2FsbGluZyBzZWxmLmhhbmRsZV9kYXRhKCkgd2l0aCB0aGUgZGF0YSBhcyBhcmd1bWVudCAodGhlIGRhdGEKLSAgICBtYXkgYmUgc3BsaXQgdXAgaW4gYXJiaXRyYXJ5IGNodW5rcykuICBFbnRpdHkgcmVmZXJlbmNlcyBhcmUKLSAgICBwYXNzZWQgYnkgY2FsbGluZyBzZWxmLmhhbmRsZV9lbnRpdHlyZWYoKSB3aXRoIHRoZSBlbnRpdHkKLSAgICByZWZlcmVuY2UgYXMgdGhlIGFyZ3VtZW50LiAgTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUKLSAgICBwYXNzZWQgdG8gc2VsZi5oYW5kbGVfY2hhcnJlZigpIHdpdGggdGhlIHN0cmluZyBjb250YWluaW5nIHRoZQotICAgIHJlZmVyZW5jZSBhcyB0aGUgYXJndW1lbnQuCisgICAgbWF5IGJlIHNwbGl0IHVwIGluIGFyYml0cmFyeSBjaHVua3MpLiAgSWYgY29udmVydF9jaGFycmVmcyBpcworICAgIFRydWUgdGhlIGNoYXJhY3RlciByZWZlcmVuY2VzIGFyZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byB0aGUKKyAgICBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVyIChhbmQgc2VsZi5oYW5kbGVfZGF0YSgpIGlzIG5vCisgICAgbG9uZ2VyIHNwbGl0IGluIGNodW5rcyksIG90aGVyd2lzZSB0aGV5IGFyZSBwYXNzZWQgYnkgY2FsbGluZworICAgIHNlbGYuaGFuZGxlX2VudGl0eXJlZigpIG9yIHNlbGYuaGFuZGxlX2NoYXJyZWYoKSB3aXRoIHRoZSBzdHJpbmcKKyAgICBjb250YWluaW5nIHJlc3BlY3RpdmVseSB0aGUgbmFtZWQgb3IgbnVtZXJpYyByZWZlcmVuY2UgYXMgdGhlCisgICAgYXJndW1lbnQuCiAgICAgIiIiCiAKICAgICBDREFUQV9DT05URU5UX0VMRU1FTlRTID0gKCJzY3JpcHQiLCAic3R5bGUiKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdD1fZGVmYXVsdF9zZW50aW5lbCwgKiwKKyAgICAgICAgICAgICAgICAgY29udmVydF9jaGFycmVmcz1fZGVmYXVsdF9zZW50aW5lbCk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYW5kIHJlc2V0IHRoaXMgaW5zdGFuY2UuCiAKKyAgICAgICAgSWYgY29udmVydF9jaGFycmVmcyBpcyBUcnVlIChkZWZhdWx0OiBGYWxzZSksIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcworICAgICAgICBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgogICAgICAgICBJZiBzdHJpY3QgaXMgc2V0IHRvIEZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIHBhcnNlciB3aWxsIHBhcnNlIGludmFsaWQKICAgICAgICAgbWFya3VwLCBvdGhlcndpc2UgaXQgd2lsbCByYWlzZSBhbiBlcnJvci4gIE5vdGUgdGhhdCB0aGUgc3RyaWN0IG1vZGUKLSAgICAgICAgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgYW5kIGFyZ3VtZW50IGFyZSBkZXByZWNhdGVkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc3RyaWN0OgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHN0cmljdCBtb2RlIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfZGVmYXVsdF9zZW50aW5lbDoKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgYXJndW1lbnQgYW5kIG1vZGUgYXJlIGRlcHJlY2F0ZWQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJpY3QgPSBGYWxzZSAgIyBkZWZhdWx0CiAgICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CisgICAgICAgIGlmIGNvbnZlcnRfY2hhcnJlZnMgaXMgX2RlZmF1bHRfc2VudGluZWw6CisgICAgICAgICAgICBjb252ZXJ0X2NoYXJyZWZzID0gRmFsc2UgICMgZGVmYXVsdAorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHZhbHVlIG9mIGNvbnZlcnRfY2hhcnJlZnMgd2lsbCBiZWNvbWUgVHJ1ZSBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIzLjUuIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzZXQgdGhlIHZhbHVlIGV4cGxpY2l0bHkuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIHNlbGYuY29udmVydF9jaGFycmVmcyA9IGNvbnZlcnRfY2hhcnJlZnMKICAgICAgICAgc2VsZi5yZXNldCgpCiAKICAgICBkZWYgcmVzZXQoc2VsZik6CkBAIC0xNDksNiArMTY5LDggQEAKICAgICAgICAgc2VsZi5nb2FoZWFkKDEpCiAKICAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSAnZXJyb3InIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgICAgIHJhaXNlIEhUTUxQYXJzZUVycm9yKG1lc3NhZ2UsIHNlbGYuZ2V0cG9zKCkpCiAKICAgICBfX3N0YXJ0dGFnX3RleHQgPSBOb25lCkBAIC0xNzMsMTQgKzE5NSwyNSBAQAogICAgICAgICBpID0gMAogICAgICAgICBuID0gbGVuKHJhd2RhdGEpCiAgICAgICAgIHdoaWxlIGkgPCBuOgotICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmludGVyZXN0aW5nLnNlYXJjaChyYXdkYXRhLCBpKSAjIDwgb3IgJgotICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgaiA9IG1hdGNoLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICBqID0gcmF3ZGF0YS5maW5kKCc8JywgaSkKKyAgICAgICAgICAgICAgICBpZiBqIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIHdhaXQgdGlsbCB3ZSBnZXQgYWxsIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgICAgIGogPSBuCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBqID0gbgotICAgICAgICAgICAgaWYgaSA8IGo6IHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgICMgPCBvciAmCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KKyAgICAgICAgICAgIGlmIGkgPCBqOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6al0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQogICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGopCiAgICAgICAgICAgICBpZiBpID09IG46IGJyZWFrCiAgICAgICAgICAgICBzdGFydHN3aXRoID0gcmF3ZGF0YS5zdGFydHN3aXRoCkBAIC0yMTUsNyArMjQ4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkgKyAxCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOmtdKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmtdKQogICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBrKQogICAgICAgICAgICAgZWxpZiBzdGFydHN3aXRoKCImIyIsIGkpOgogICAgICAgICAgICAgICAgIG1hdGNoID0gY2hhcnJlZi5tYXRjaChyYXdkYXRhLCBpKQpAQCAtMjY2LDcgKzMwMiwxMCBAQAogICAgICAgICAgICAgICAgIGFzc2VydCAwLCAiaW50ZXJlc3Rpbmcuc2VhcmNoKCkgbGllZCIKICAgICAgICAgIyBlbmQgd2hpbGUKICAgICAgICAgaWYgZW5kIGFuZCBpIDwgbiBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOm5dKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOm5dKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgbikKICAgICAgICAgc2VsZi5yYXdkYXRhID0gcmF3ZGF0YVtpOl0KIApAQCAtMzQ5LDcgKzM4OCw3IEBACiAgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgogICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQogICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgotICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHVuZXNjYXBlKGF0dHJ2YWx1ZSkKICAgICAgICAgICAgIGF0dHJzLmFwcGVuZCgoYXR0cm5hbWUubG93ZXIoKSwgYXR0cnZhbHVlKSkKICAgICAgICAgICAgIGsgPSBtLmVuZCgpCiAKQEAgLTUwNSwzMSArNTQ0LDcgQEAKIAogICAgICMgSW50ZXJuYWwgLS0gaGVscGVyIHRvIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlciBxdW90aW5nCiAgICAgZGVmIHVuZXNjYXBlKHNlbGYsIHMpOgotICAgICAgICBpZiAnJicgbm90IGluIHM6Ci0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBkZWYgcmVwbGFjZUVudGl0aWVzKHMpOgotICAgICAgICAgICAgcyA9IHMuZ3JvdXBzKClbMF0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKLSAgICAgICAgICAgICAgICAgICAgcyA9IHNbMTpdCi0gICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XS5yc3RyaXAoJzsnKSwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMucnN0cmlwKCc7JykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiAnJiMnICsgcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1Ci0gICAgICAgICAgICAgICAgaWYgcyBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw1W3NdCi0gICAgICAgICAgICAgICAgZWxpZiBzLmVuZHN3aXRoKCc7Jyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0gICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMiwgbGVuKHMpKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc1s6eF0gaW4gaHRtbDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc1s6eF1dICsgc1t4Ol0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnICsgcwotCi0gICAgICAgIHJldHVybiByZS5zdWIociImKCM/W3hYXT8oPzpbMC05YS1mQS1GXSs7fFx3ezEsMzJ9Oz8pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUVudGl0aWVzLCBzLCBmbGFncz1yZS5BU0NJSSkKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIHVuZXNjYXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgJworICAgICAgICAgICAgICAgICAgICAgICdpbiAzLjUsIHVzZSBodG1sLnVuZXNjYXBlKCkgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gdW5lc2NhcGUocykKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2NsaWVudC5weSBiL0xpYi9odHRwL2NsaWVudC5weQppbmRleCBjYzQ1MmUyLi41YzUyYmEzIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jbGllbnQucHkKKysrIGIvTGliL2h0dHAvY2xpZW50LnB5CkBAIC0yNzEsOCArMjcxLDYgQEAKICAgICByZXR1cm4gZW1haWwucGFyc2VyLlBhcnNlcihfY2xhc3M9X2NsYXNzKS5wYXJzZXN0cihoc3RyaW5nKQogCiAKLV9zdHJpY3Rfc2VudGluZWwgPSBvYmplY3QoKQotCiBjbGFzcyBIVFRQUmVzcG9uc2UoaW8uUmF3SU9CYXNlKToKIAogICAgICMgU2VlIFJGQyAyNjE2IHNlYyAxOS42IGFuZCBSRkMgMTk0NSBzZWMgNiBmb3IgZGV0YWlscy4KQEAgLTI4Miw3ICsyODAsNyBAQAogICAgICMgdGV4dCBmb2xsb3dpbmcgUkZDIDIwNDcuICBUaGUgYmFzaWMgc3RhdHVzIGxpbmUgcGFyc2luZyBvbmx5CiAgICAgIyBhY2NlcHRzIGlzby04ODU5LTEuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgogICAgICAgICAjIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciwgd2UgbmVlZCB0bwogICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBjbGllbnQgZG9lc24ndCByZWFkIG1vcmUgdGhhbiB0aGUKICAgICAgICAgIyBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgaXQgZG9lcywgaXQgd2lsbCBibG9jayB1bnRpbApAQCAtMjkyLDEwICsyOTAsNiBAQAogICAgICAgICAjIGNsaWVudHMgdW5sZXNzIHRoZXkga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nLgogICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgicmIiKQogICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsCi0gICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgotICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21ldGhvZCA9IG1ldGhvZAogCiAgICAgICAgICMgVGhlIEhUVFBSZXNwb25zZSBvYmplY3QgaXMgcmV0dXJuZWQgdmlhIHVybGxpYi4gIFRoZSBjbGllbnRzCkBAIC03MzIsMTMgKzcyNiwxNyBAQAogICAgIGRlZmF1bHRfcG9ydCA9IEhUVFBfUE9SVAogICAgIGF1dG9fb3BlbiA9IDEKICAgICBkZWJ1Z2xldmVsID0gMAorICAgICMgVENQIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGlzIGRldGVybWluZWQgYnkgdGhlIFRDUCBzdGFjayBvbgorICAgICMgYSBwZXItY29ubmVjdGlvbiBiYXNpcy4gIFRoZXJlIGlzIG5vIHNpbXBsZSBhbmQgZWZmaWNpZW50CisgICAgIyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nIHRoZSBNU1MsIHNvCisgICAgIyBpbnN0ZWFkIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBpcyBjaG9zZW4uICBUaGUgZ2V0c29ja29wdCgpCisgICAgIyBpbnRlcmZhY2UgdXNpbmcgdGhlIFRDUF9NQVhTRUcgcGFyYW1ldGVyIG1heSBiZSBhIHN1aXRhYmxlCisgICAgIyBhcHByb2FjaCBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLiBBIHZhbHVlIG9mIDE2S2lCIGlzIGNob3NlbgorICAgICMgYXMgYSByZWFzb25hYmxlIGVzdGltYXRlIG9mIHRoZSBtYXhpbXVtIE1TUy4KKyAgICBtc3MgPSAxNjM4NAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsCi0gICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULCBzb3VyY2VfYWRkcmVzcz1Ob25lKToKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcyA9IHNvdXJjZV9hZGRyZXNzCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKQEAgLTgwNCw4ICs4MDIsOCBAQAogCiAgICAgICAgIGlmIGNvZGUgIT0gMjAwOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSByZXNwb25zZS5mcC5yZWFkbGluZShfTUFYTElORSArIDEpCiAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKQEAgLTg5OSw4ICs4OTcsMTEgQEAKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQogICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAogICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgotICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcyk6CisgICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4gSG93ZXZlciwKKyAgICAgICAgIyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBnYWluIGlmIHRoZSBtZXNzYWdlIGlzIGxhcmdlcgorICAgICAgICAjIHRoYW4gTVNTIChhbmQgdGhlcmUgaXMgYSBtZW1vcnkgcGVuYWx0eSBmb3IgdGhlIG1lc3NhZ2UKKyAgICAgICAgIyBjb3B5KS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKSBhbmQgbGVuKG1lc3NhZ2VfYm9keSkgPCBzZWxmLm1zczoKICAgICAgICAgICAgIG1zZyArPSBtZXNzYWdlX2JvZHkKICAgICAgICAgICAgIG1lc3NhZ2VfYm9keSA9IE5vbmUKICAgICAgICAgc2VsZi5zZW5kKG1zZykKQEAgLTExNzAsMTYgKzExNzEsMTUgQEAKICAgICAgICAgIyBYWFggU2hvdWxkIGtleV9maWxlIGFuZCBjZXJ0X2ZpbGUgYmUgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgY29udGV4dD8KIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBrZXlfZmlsZT1Ob25lLCBjZXJ0X2ZpbGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6Ci0gICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHN0cmljdCwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgc2VsZi5rZXlfZmlsZSA9IGtleV9maWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfZmlsZSA9IGNlcnRfZmlsZQogICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgICMgU29tZSByZWFzb25hYmxlIGRlZmF1bHRzCi0gICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgICAgICB3aWxsX3ZlcmlmeSA9IGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORQogICAgICAgICAgICAgaWYgY2hlY2tfaG9zdG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZSA9IHdpbGxfdmVyaWZ5CmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jb29raWVqYXIucHkgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKaW5kZXggZGRiNzljNS4uYmU4MjhlYiAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY29va2llamFyLnB5CisrKyBiL0xpYi9odHRwL2Nvb2tpZWphci5weQpAQCAtMTE5Myw4ICsxMTkzLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmcgPSBUcnVlCi0gICAgICAgICAgICBmb3Igc3Vib2JqIGluIGRlZXB2YWx1ZXMob2JqKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJvYmoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZGVlcHZhbHVlcyhvYmopCiAgICAgICAgIGlmIG5vdCBtYXBwaW5nOgogICAgICAgICAgICAgeWllbGQgb2JqCiAKQEAgLTE3MzEsOCArMTczMCw4IEBACiAgICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLCAiLCAiLmpvaW4ocikpCiAKIAotIyBkZXJpdmVzIGZyb20gSU9FcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKLWNsYXNzIExvYWRFcnJvcihJT0Vycm9yKTogcGFzcworIyBkZXJpdmVzIGZyb20gT1NFcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKK2NsYXNzIExvYWRFcnJvcihPU0Vycm9yKTogcGFzcwogCiBjbGFzcyBGaWxlQ29va2llSmFyKENvb2tpZUphcik6CiAgICAgIiIiQ29va2llSmFyIHRoYXQgY2FuIGJlIGxvYWRlZCBmcm9tIGFuZCBzYXZlZCB0byBhIGZpbGUuIiIiCkBAIC0xNzYyLDE3ICsxNzYxLDE0IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuX3JlYWxseV9sb2FkKGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiByZXZlcnQoc2VsZiwgZmlsZW5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgIGlnbm9yZV9kaXNjYXJkPUZhbHNlLCBpZ25vcmVfZXhwaXJlcz1GYWxzZSk6CiAgICAgICAgICIiIkNsZWFyIGFsbCBjb29raWVzIGFuZCByZWxvYWQgY29va2llcyBmcm9tIGEgc2F2ZWQgZmlsZS4KIAotICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBJT0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQorICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBPU0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQogICAgICAgICBvYmplY3QncyBzdGF0ZSB3aWxsIG5vdCBiZSBhbHRlcmVkIGlmIHRoaXMgaGFwcGVucy4KIAogICAgICAgICAiIiIKQEAgLTE3ODcsNyArMTc4Myw3IEBACiAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0ge30KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmxvYWQoZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykKLSAgICAgICAgICAgIGV4Y2VwdCAoTG9hZEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuX2Nvb2tpZXMgPSBvbGRfc3RhdGUKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0xODU3LDE1ICsxODUzLDEyIEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAjIFRoZXJlIHJlYWxseSBpc24ndCBhbiBMV1AgQ29va2llcyAyLjAgZm9ybWF0LCBidXQgdGhpcyBpbmRpY2F0ZXMKICAgICAgICAgICAgICMgdGhhdCB0aGVyZSBpcyBleHRyYSBpbmZvcm1hdGlvbiBpbiBoZXJlIChkb21haW5fZG90IGFuZAogICAgICAgICAgICAgIyBwb3J0X3NwZWMpIHdoaWxlIHN0aWxsIGJlaW5nIGNvbXBhdGlibGUgd2l0aCBsaWJ3d3ctcGVybCwgSSBob3BlLgogICAgICAgICAgICAgZi53cml0ZSgiI0xXUC1Db29raWVzLTIuMFxuIikKICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hc19sd3Bfc3RyKGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBfcmVhbGx5X2xvYWQoc2VsZiwgZiwgZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcyk6CiAgICAgICAgIG1hZ2ljID0gZi5yZWFkbGluZSgpCkBAIC0xOTM4LDggKzE5MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBub3QgaWdub3JlX2V4cGlyZXMgYW5kIGMuaXNfZXhwaXJlZChub3cpOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfY29va2llKGMpCi0KLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIF93YXJuX3VuaGFuZGxlZF9leGNlcHRpb24oKQpAQCAtMjA0NSw3ICsyMDM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBzZWxmLnNldF9jb29raWUoYykKIAotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgX3dhcm5fdW5oYW5kbGVkX2V4Y2VwdGlvbigpCkBAIC0yMDU3LDggKzIwNDksNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShzZWxmLmhlYWRlcikKICAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBmb3IgY29va2llIGluIHNlbGY6CkBAIC0yMDg3LDUgKzIwNzgsMyBAQAogICAgICAgICAgICAgICAgICAgICAiXHQiLmpvaW4oW2Nvb2tpZS5kb21haW4sIGluaXRpYWxfZG90LCBjb29raWUucGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmUsIGV4cGlyZXMsIG5hbWUsIHZhbHVlXSkrCiAgICAgICAgICAgICAgICAgICAgICJcbiIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9odHRwL3NlcnZlci5weSBiL0xpYi9odHRwL3NlcnZlci5weQppbmRleCAyYmZkYTEyLi43YjU3N2I0IDEwMDY0NAotLS0gYS9MaWIvaHR0cC9zZXJ2ZXIucHkKKysrIGIvTGliL2h0dHAvc2VydmVyLnB5CkBAIC00MDEsMTIgKzQwMSwxNyBAQAogICAgICAgICB3aGlsZSBub3Qgc2VsZi5jbG9zZV9jb25uZWN0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVfb25lX3JlcXVlc3QoKQogCi0gICAgZGVmIHNlbmRfZXJyb3Ioc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKKyAgICBkZWYgc2VuZF9lcnJvcihzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUsIGV4cGxhaW49Tm9uZSk6CiAgICAgICAgICIiIlNlbmQgYW5kIGxvZyBhbiBlcnJvciByZXBseS4KIAotICAgICAgICBBcmd1bWVudHMgYXJlIHRoZSBlcnJvciBjb2RlLCBhbmQgYSBkZXRhaWxlZCBtZXNzYWdlLgotICAgICAgICBUaGUgZGV0YWlsZWQgbWVzc2FnZSBkZWZhdWx0cyB0byB0aGUgc2hvcnQgZW50cnkgbWF0Y2hpbmcgdGhlCi0gICAgICAgIHJlc3BvbnNlIGNvZGUuCisgICAgICAgIEFyZ3VtZW50cyBhcmUKKyAgICAgICAgKiBjb2RlOiAgICBhbiBIVFRQIGVycm9yIGNvZGUKKyAgICAgICAgICAgICAgICAgICAzIGRpZ2l0cworICAgICAgICAqIG1lc3NhZ2U6IGEgc2ltcGxlIG9wdGlvbmFsIDEgbGluZSByZWFzb24gcGhyYXNlLgorICAgICAgICAgICAgICAgICAgICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gJXg4MC1GRiApCisgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gc2hvcnQgZW50cnkgbWF0Y2hpbmcgdGhlIHJlc3BvbnNlIGNvZGUKKyAgICAgICAgKiBleHBsYWluOiBhIGRldGFpbGVkIG1lc3NhZ2UgZGVmYXVsdHMgdG8gdGhlIGxvbmcgZW50cnkKKyAgICAgICAgICAgICAgICAgICBtYXRjaGluZyB0aGUgcmVzcG9uc2UgY29kZS4KIAogICAgICAgICBUaGlzIHNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIChzbyBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55CiAgICAgICAgIG91dHB1dCBoYXMgYmVlbiBnZW5lcmF0ZWQpLCBsb2dzIHRoZSBlcnJvciwgYW5kIGZpbmFsbHkgc2VuZHMKQEAgLTQyMCwxNyArNDI1LDIwIEBACiAgICAgICAgICAgICBzaG9ydG1zZywgbG9uZ21zZyA9ICc/Pz8nLCAnPz8/JwogICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CiAgICAgICAgICAgICBtZXNzYWdlID0gc2hvcnRtc2cKLSAgICAgICAgZXhwbGFpbiA9IGxvbmdtc2cKKyAgICAgICAgaWYgZXhwbGFpbiBpcyBOb25lOgorICAgICAgICAgICAgZXhwbGFpbiA9IGxvbmdtc2cKICAgICAgICAgc2VsZi5sb2dfZXJyb3IoImNvZGUgJWQsIG1lc3NhZ2UgJXMiLCBjb2RlLCBtZXNzYWdlKQogICAgICAgICAjIHVzaW5nIF9xdW90ZV9odG1sIHRvIHByZXZlbnQgQ3Jvc3MgU2l0ZSBTY3JpcHRpbmcgYXR0YWNrcyAoc2VlIGJ1ZyAjMTEwMDIwMSkKICAgICAgICAgY29udGVudCA9IChzZWxmLmVycm9yX21lc3NhZ2VfZm9ybWF0ICUKLSAgICAgICAgICAgICAgICAgICB7J2NvZGUnOiBjb2RlLCAnbWVzc2FnZSc6IF9xdW90ZV9odG1sKG1lc3NhZ2UpLCAnZXhwbGFpbic6IGV4cGxhaW59KQorICAgICAgICAgICAgICAgICAgIHsnY29kZSc6IGNvZGUsICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksICdleHBsYWluJzogX3F1b3RlX2h0bWwoZXhwbGFpbil9KQorICAgICAgICBib2R5ID0gY29udGVudC5lbmNvZGUoJ1VURi04JywgJ3JlcGxhY2UnKQogICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoY29kZSwgbWVzc2FnZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1UeXBlIiwgc2VsZi5lcnJvcl9jb250ZW50X3R5cGUpCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGludChsZW4oYm9keSkpKQogICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgaWYgc2VsZi5jb21tYW5kICE9ICdIRUFEJyBhbmQgY29kZSA+PSAyMDAgYW5kIGNvZGUgbm90IGluICgyMDQsIDMwNCk6Ci0gICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGNvbnRlbnQuZW5jb2RlKCdVVEYtOCcsICdyZXBsYWNlJykpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGJvZHkpCiAKICAgICBkZWYgc2VuZF9yZXNwb25zZShzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUpOgogICAgICAgICAiIiJBZGQgdGhlIHJlc3BvbnNlIGhlYWRlciB0byB0aGUgaGVhZGVycyBidWZmZXIgYW5kIGxvZyB0aGUKQEAgLTcwOSw3ICs3MTcsNyBAQAogICAgICAgICBjdHlwZSA9IHNlbGYuZ3Vlc3NfdHlwZShwYXRoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiRmlsZSBub3QgZm91bmQiKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKQEAgLTczMCw3ICs3MzgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGlzdCA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJObyBwZXJtaXNzaW9uIHRvIGxpc3QgZGlyZWN0b3J5IikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGxpc3Quc29ydChrZXk9bGFtYmRhIGE6IGEubG93ZXIoKSkKQEAgLTExMjQsNyArMTEzMiw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5zZXR1aWQobm9ib2R5KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIG9zLmR1cDIoc2VsZi5yZmlsZS5maWxlbm8oKSwgMCkKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYud2ZpbGUuZmlsZW5vKCksIDEpCkBAIC0xMTc3LDE1ICsxMTg1LDE1IEBACiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ0dJIHNjcmlwdCBleGl0ZWQgT0siKQogCiAKLWRlZiB0ZXN0KEhhbmRsZXJDbGFzcyA9IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICBTZXJ2ZXJDbGFzcyA9IEhUVFBTZXJ2ZXIsIHByb3RvY29sPSJIVFRQLzEuMCIsIHBvcnQ9ODAwMCk6CitkZWYgdGVzdChIYW5kbGVyQ2xhc3M9QmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgIFNlcnZlckNsYXNzPUhUVFBTZXJ2ZXIsIHByb3RvY29sPSJIVFRQLzEuMCIsIHBvcnQ9ODAwMCwgYmluZD0iIik6CiAgICAgIiIiVGVzdCB0aGUgSFRUUCByZXF1ZXN0IGhhbmRsZXIgY2xhc3MuCiAKICAgICBUaGlzIHJ1bnMgYW4gSFRUUCBzZXJ2ZXIgb24gcG9ydCA4MDAwIChvciB0aGUgZmlyc3QgY29tbWFuZCBsaW5lCiAgICAgYXJndW1lbnQpLgogCiAgICAgIiIiCi0gICAgc2VydmVyX2FkZHJlc3MgPSAoJycsIHBvcnQpCisgICAgc2VydmVyX2FkZHJlc3MgPSAoYmluZCwgcG9ydCkKIAogICAgIEhhbmRsZXJDbGFzcy5wcm90b2NvbF92ZXJzaW9uID0gcHJvdG9jb2wKICAgICBodHRwZCA9IFNlcnZlckNsYXNzKHNlcnZlcl9hZGRyZXNzLCBIYW5kbGVyQ2xhc3MpCkBAIC0xMjAzLDEyICsxMjExLDE2IEBACiAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2dpJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGFzIENHSSBTZXJ2ZXInKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmluZCcsICctYicsIGRlZmF1bHQ9JycsIG1ldGF2YXI9J0FERFJFU1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBhbHRlcm5hdGUgYmluZCBhZGRyZXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tkZWZhdWx0OiBhbGwgaW50ZXJmYWNlc10nKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3BvcnQnLCBhY3Rpb249J3N0b3JlJywKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ODAwMCwgdHlwZT1pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz0nPycsCiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZ5IGFsdGVybmF0ZSBwb3J0IFtkZWZhdWx0OiA4MDAwXScpCiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgICBpZiBhcmdzLmNnaToKLSAgICAgICAgdGVzdChIYW5kbGVyQ2xhc3M9Q0dJSFRUUFJlcXVlc3RIYW5kbGVyLCBwb3J0PWFyZ3MucG9ydCkKKyAgICAgICAgaGFuZGxlcl9jbGFzcyA9IENHSUhUVFBSZXF1ZXN0SGFuZGxlcgogICAgIGVsc2U6Ci0gICAgICAgIHRlc3QoSGFuZGxlckNsYXNzPVNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlciwgcG9ydD1hcmdzLnBvcnQpCisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKKyAgICB0ZXN0KEhhbmRsZXJDbGFzcz1oYW5kbGVyX2NsYXNzLCBwb3J0PWFyZ3MucG9ydCwgYmluZD1hcmdzLmJpbmQpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggYzlhZDM2NC4uZWFmNjhjYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtNTQ4LDcgKzU0OCw3IEBACiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHNlbGYuaGVscF91cmwpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgZWxzZToKQEAgLTg3MSw3ICs4NzEsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weSBiL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CmluZGV4IDM3YTMzN2UuLmE5OTg5YTggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CisrKyBiL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZmlsZW5hbWUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHB3ZCwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQppbmRleCAyZTA3MzEyLi5jMDA3NGUyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKQEAgLTEyNSw0ICsxMjUsMyBAQAogICAgICMgSGVuY2UgSWRsZSBtdXN0IGJlIHJlc3RhcnRlZCBhZnRlciBlZGl0aW5nIHRoaXMgZmlsZSBmb3IgYSBsaXZlIHRlc3QuCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9ncmVwJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCi0KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weSBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQppbmRleCBjYmE4MDQ4Li43NTg5YWI4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKKysrIGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CkBAIC01MDMsNyArNTAzLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHdkID0gIiIKICAgICAgICAgICAgIHJldHVybiBwd2QsICIiCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL05FV1MudHh0IGIvTGliL2lkbGVsaWIvTkVXUy50eHQKaW5kZXggNTQ1MDcwMS4uNDc4YzE4MyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTkVXUy50eHQKKysrIGIvTGliL2lkbGVsaWIvTkVXUy50eHQKQEAgLTEsMTIgKzEsMTAgQEAKLVdoYXQncyBOZXcgaW4gSURMRSAzLjMuMj8KK1doYXQncyBOZXcgaW4gSURMRSAzLjQuMD8KID09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLSBJc3N1ZSAjMTczOTA6IERpc3BsYXkgUHl0aG9uIHZlcnNpb24gb24gSWRsZSB0aXRsZSBiYXIuCiAgIEluaXRpYWwgcGF0Y2ggYnkgRWRtb25kIEJ1cm5ldHQuCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy4xPwotPT09PT09PT09PT09PT09PT09PT09PT09PQorLSBJc3N1ZSAjNTA2NjogVXBkYXRlIElETEUgZG9jcy4gUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCiAKIC0gSXNzdWUgIzE3NjI1OiBDbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkgYi9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weQppbmRleCBiYTQwNzE5Li41ZTVjNmJlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weQorKysgYi9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5kaXIgb3Igb3MuY3VyZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHBhY2thZ2VzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5IGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQppbmRleCBiMmExZjU4Li4zNmFmZjkyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKQEAgLTQxOSw3ICs0MTksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucnBjY2x0ID0gTXlSUENDbGllbnQoYWRkcikKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5kaXNwbGF5X3BvcnRfYmluZGluZ19lcnJvcigpCkBAIC0xMDM0LDcgKzEwMzQsMTAgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5vc3ViID0gIj09PT0gTm8gU3VicHJvY2VzcyA9PT09IgorICAgICAgICAgICAgbm9zdWIgPSAoIj09PT0gTm8gU3VicHJvY2VzcyA9PT09XG5cbiIgKworICAgICAgICAgICAgICAgICAgICAiV0FSTklORzogUnVubmluZyBJRExFIHdpdGhvdXQgYSBTdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWRcbiIgKworICAgICAgICAgICAgICAgICAgICAiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHZlcnNpb24uIFNlZSBIZWxwL0lETEUgSGVscFxuIiArCisgICAgICAgICAgICAgICAgICAgICJmb3IgZGV0YWlscy5cblxuIikKICAgICAgICAgICAgIHN5cy5kaXNwbGF5aG9vayA9IHJwYy5kaXNwbGF5aG9vawogCiAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiVzIiAlCkBAIC0xMzkyLDcgKzEzOTUsOCBAQAogICAgICAgIGlkbGUgIFstZG5zXSBbLXQgdGl0bGVdIC0gW2FyZ10qCiAKICAgLWggICAgICAgICBwcmludCB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChzZWUgSGVscC9JRExFIEhlbHAgZm9yIGRldGFpbHMpCisgIC1uICAgICAgICAgcnVuIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgKERFUFJFQ0FURUQsCisgICAgICAgICAgICAgc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQogCiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aGUgSURMRSAnc2V0dGluZ3MnIGNvbmZpZ3VyYXRpb246CiAKQEAgLTE0NzAsNiArMTQ3NCw4IEBACiAgICAgICAgIGlmIG8gPT0gJy1pJzoKICAgICAgICAgICAgIGVuYWJsZV9zaGVsbCA9IFRydWUKICAgICAgICAgaWYgbyA9PSAnLW4nOgorICAgICAgICAgICAgcHJpbnQoIiBXYXJuaW5nOiBydW5uaW5nIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgdXNlX3N1YnByb2Nlc3MgPSBGYWxzZQogICAgICAgICBpZiBvID09ICctcic6CiAgICAgICAgICAgICBzY3JpcHQgPSBhCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5IGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQppbmRleCAyNWJhZTQ4Li4xZjQ4NTRkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CisrKyBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKQEAgLTM4MSw3ICszODEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5wYXRoLCBuZXdwYXRoKQogICAgICAgICAgICAgc2VsZi5wYXRoID0gbmV3cGF0aAotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIEdldEljb25OYW1lKHNlbGYpOgpAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzZWxmLnBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgbmFtZXMuc29ydChrZXkgPSBvcy5wYXRoLm5vcm1jYXNlKQogICAgICAgICBzdWJsaXN0ID0gW10KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CmluZGV4IGE5NzRkNTQuLmVhMjAxMGUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQpAQCAtMjcxLDggKzI3MSwxMCBAQAogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gZGVmYXVsdAorCiAgICAgZGVmIFNldE9wdGlvbihzZWxmLCBjb25maWdUeXBlLCBzZWN0aW9uLCBvcHRpb24sIHZhbHVlKToKICAgICAgICAgIiIiSW4gdXNlcidzIGNvbmZpZyBmaWxlLCBzZXQgc2VjdGlvbidzIG9wdGlvbiB0byB2YWx1ZS4KKwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlNldE9wdGlvbihzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQogCkBAIC02MzgsOCArNjQwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4ga2V5QmluZGluZ3MKKwogICAgIGRlZiBHZXRFeHRyYUhlbHBTb3VyY2VMaXN0KHNlbGYsY29uZmlnU2V0KToKICAgICAgICAgIiIiRmV0Y2ggbGlzdCBvZiBleHRyYSBoZWxwIHNvdXJjZXMgZnJvbSBhIGdpdmVuIGNvbmZpZ1NldC4KKwogICAgICAgICBWYWxpZCBjb25maWdTZXRzIGFyZSAndXNlcicgb3IgJ2RlZmF1bHQnLiAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgb2YKICAgICAgICAgdGhlIGZvcm0gKG1lbnVfaXRlbSAsIHBhdGhfdG9faGVscF9maWxlICwgb3B0aW9uKSwgb3IgcmV0dXJuIHRoZSBlbXB0eQogICAgICAgICBsaXN0LiAgJ29wdGlvbicgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgaGVscCByZXNvdXJjZS4gICdvcHRpb24nCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9oZWxwLnR4dCBiL0xpYi9pZGxlbGliL2hlbHAudHh0CmluZGV4IGZmNzg2YzUuLjYzNzhhMmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2hlbHAudHh0CisrKyBiL0xpYi9pZGxlbGliL2hlbHAudHh0CkBAIC0xLDE0MiArMSwxODUgQEAKIFtTZWUgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yICoqIFRJUFMgKiogb24gdXNpbmcgSURMRSAhIV0KIAotQ2xpY2sgb24gdGhlIGRvdHRlZCBsaW5lIGF0IHRoZSB0b3Agb2YgYSBtZW51IHRvICJ0ZWFyIGl0IG9mZiI6IGEKLXNlcGFyYXRlIHdpbmRvdyBjb250YWluaW5nIHRoZSBtZW51IGlzIGNyZWF0ZWQuCitJRExFIGlzIHRoZSBQeXRob24gSURFIGJ1aWx0IHdpdGggdGhlIHRraW50ZXIgR1VJIHRvb2xraXQuCiAKLUZpbGUgTWVudToKK0lETEUgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CistY29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIHRraW50ZXIgR1VJIHRvb2xraXQKKy1jcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cywgVW5peCwgYW5kIE9TIFgKKy1tdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZywgc21hcnQgaW5kZW50LAorY2FsbCB0aXBzLCBhbmQgbWFueSBvdGhlciBmZWF0dXJlcworLVB5dGhvbiBzaGVsbCB3aW5kb3cgKGEuay5hIGludGVyYWN0aXZlIGludGVycHJldGVyKQorLWRlYnVnZ2VyIChub3QgY29tcGxldGUsIGJ1dCB5b3UgY2FuIHNldCBicmVha3BvaW50cywgdmlldyBhbmQgc3RlcCkKIAotCU5ldyBGaWxlICAgICAgICAgLS0gQ3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKLQlPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQotCVJlY2VudCBGaWxlcy4uLiAgLS0gT3BlbiBhIGxpc3Qgb2YgcmVjZW50IGZpbGVzCi0JT3BlbiBNb2R1bGUuLi4gICAtLSBPcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpCi0JQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCi0JUGF0aCBCcm93c2VyICAgICAtLSBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBjbGFzc2VzCitNZW51czoKKworSURMRSBoYXMgdHdvIHdpbmRvdyB0eXBlcyB0aGUgU2hlbGwgd2luZG93IGFuZCB0aGUgRWRpdG9yIHdpbmRvdy4gSXQgaXMKK3Bvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgZWRpdG9yIHdpbmRvd3Mgc2ltdWx0YW5lb3VzbHkuIElETEUncworbWVudXMgZHluYW1pY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHdoaWNoIHdpbmRvdyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIEVhY2ggbWVudQorZG9jdW1lbnRlZCBiZWxvdyBpbmRpY2F0ZXMgd2hpY2ggd2luZG93IHR5cGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBDbGljayBvbgordGhlIGRvdHRlZCBsaW5lIGF0IHRoZSB0b3Agb2YgYSBtZW51IHRvICJ0ZWFyIGl0IG9mZiI6IGEgc2VwYXJhdGUgd2luZG93Citjb250YWluaW5nIHRoZSBtZW51IGlzIGNyZWF0ZWQgKGZvciBVbml4IGFuZCBXaW5kb3dzIG9ubHkpLgorCitGaWxlIE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgorCisgICAgICAgIE5ldyBGaWxlICAgICAgICAgLS0gQ3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKKyAgICAgICAgT3Blbi4uLiAgICAgICAgICAtLSBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKKyAgICAgICAgT3BlbiBNb2R1bGUuLi4gICAtLSBPcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpCisgICAgICAgIFJlY2VudCBGaWxlcy4uLiAgLS0gT3BlbiBhIGxpc3Qgb2YgcmVjZW50IGZpbGVzCisgICAgICAgIENsYXNzIEJyb3dzZXIgICAgLS0gU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQorICAgICAgICBQYXRoIEJyb3dzZXIgICAgIC0tIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1ldGhvZHMKLQktLS0KLQlTYXZlICAgICAgICAgICAgIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZAotCQkgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKKyAgICAgICAgLS0tCisgICAgICAgIFNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93cyBoYXZlIGEgKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCiAKLQlTYXZlIEFzLi4uICAgICAgIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMKLQkJICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZmlsZQotCVNhdmUgQ29weSBBcy4uLiAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBkaWZmZXJlbnQgZmlsZQotCQkgICAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKLQktLS0KLQlQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdwotCS0tLQotCUNsb3NlICAgICAgICAgICAgLS0gQ2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQotCUV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgICAgICBTYXZlIEFzLi4uICAgICAgIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIFNhdmUgQ29weSBBcy4uLiAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBkaWZmZXJlbnQgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgICAgICAtLS0KKyAgICAgICAgUHJpbnQgV2luZG93ICAgICAtLSBQcmludCB0aGUgY3VycmVudCB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIENsb3NlICAgICAgICAgICAgLS0gQ2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgICAgICBFeGl0ICAgICAgICAgICAgIC0tIENsb3NlIGFsbCB3aW5kb3dzLCBxdWl0IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKIAotRWRpdCBNZW51OgorRWRpdCBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKIAotCVVuZG8gICAgICAgICAgICAgLS0gVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCi0JUmVkbyAgICAgICAgICAgICAtLSBSZWRvIGxhc3QgdW5kb25lIGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdwotCS0tLQotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKKyAgICAgICAgUmVkbyAgICAgICAgICAgICAtLSBSZWRvIGxhc3QgdW5kb25lIGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JU2VsZWN0IEFsbCAgICAgICAtLSBTZWxlY3QgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWRpdCBidWZmZXIKLQktLS0KLQlGaW5kLi4uICAgICAgICAgIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCB3aXRoIG1hbnkgb3B0aW9ucwotCUZpbmQgQWdhaW4gICAgICAgLS0gUmVwZWF0IGxhc3Qgc2VhcmNoCi0JRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgotCUZpbmQgaW4gRmlsZXMuLi4gLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IGZvciBzZWFyY2hpbmcgZmlsZXMKLQlSZXBsYWNlLi4uICAgICAgIC0tIE9wZW4gYSBzZWFyY2gtYW5kLXJlcGxhY2UgZGlhbG9nIGJveAotCUdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQotCVNob3cgQ2FsbHRpcCAgICAgLS0gT3BlbiBhIHNtYWxsIHdpbmRvdyB3aXRoIGZ1bmN0aW9uIHBhcmFtIGhpbnRzCi0JU2hvdyBDb21wbGV0aW9ucyAtLSBPcGVuIGEgc2Nyb2xsIHdpbmRvdyBhbGxvd2luZyBzZWxlY3Rpb24ga2V5d29yZHMKLQkJCSAgICBhbmQgYXR0cmlidXRlcy4gKHNlZSAnKlRJUFMqJywgYmVsb3cpCi0JU2hvdyBQYXJlbnMJIC0tIEhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMKLQlFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCi0JCSAgICAgICAgICAgIHdvcmQgaW4gdGhlIHNhbWUgYnVmZmVyOyByZXBlYXQgdG8gZ2V0IGEKKyAgICAgICAgQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgICAgICBQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKKyAgICAgICAgU2VsZWN0IEFsbCAgICAgICAtLSBTZWxlY3QgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWRpdCBidWZmZXIKKyAgICAgICAgLS0tCisgICAgICAgIEZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCisgICAgICAgIEZpbmQgQWdhaW4gICAgICAgLS0gUmVwZWF0IGxhc3Qgc2VhcmNoCisgICAgICAgIEZpbmQgU2VsZWN0aW9uICAgLS0gU2VhcmNoIGZvciB0aGUgc3RyaW5nIGluIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcworICAgICAgICBSZXBsYWNlLi4uICAgICAgIC0tIE9wZW4gYSBzZWFyY2gtYW5kLXJlcGxhY2UgZGlhbG9nIGJveAorICAgICAgICBHbyB0byBMaW5lICAgICAgIC0tIEFzayBmb3IgYSBsaW5lIG51bWJlciBhbmQgc2hvdyB0aGF0IGxpbmUKKyAgICAgICAgRXhwYW5kIFdvcmQgICAgICAtLSBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgaW4gdGhlIHNhbWUgYnVmZmVyOyByZXBlYXQgdG8gZ2V0IGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZXhwYW5zaW9uCisgICAgICAgIFNob3cgQ2FsbHRpcCAgICAgLS0gQWZ0ZXIgYW4gdW5jbG9zZWQgcGFyZW50aGVzaXMgZm9yIGEgZnVuY3Rpb24sIG9wZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNtYWxsIHdpbmRvdyB3aXRoIGZ1bmN0aW9uIHBhcmFtZXRlciBoaW50cworICAgICAgICBTaG93IFBhcmVucyAgICAgIC0tIEhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMKKyAgICAgICAgU2hvdyBDb21wbGV0aW9ucyAtLSBPcGVuIGEgc2Nyb2xsIHdpbmRvdyBhbGxvd2luZyBzZWxlY3Rpb24ga2V5d29yZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXR0cmlidXRlcy4gKHNlZSAnKlRJUFMqJywgYmVsb3cpCiAKLUZvcm1hdCBNZW51IChvbmx5IGluIEVkaXQgd2luZG93KToKK0Zvcm1hdCBNZW51IChFZGl0b3Igd2luZG93IG9ubHkpOgogCi0JSW5kZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCA0IHNwYWNlcwotCURlZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCA0IHNwYWNlcwotCUNvbW1lbnQgT3V0IFJlZ2lvbiAgLS0gSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCi0JVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKLQlUYWJpZnkgUmVnaW9uICAgICAgIC0tIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicwotCQkoTm90ZTogV2UgcmVjb21tZW5kIHVzaW5nIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCi0JVW50YWJpZnkgUmVnaW9uICAgICAtLSBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgcmlnaHQgbnVtYmVyIG9mIHNwYWNlcwotCU5ldyBJbmRlbnQgV2lkdGguLi4gLS0gT3BlbiBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aAotCUZvcm1hdCBQYXJhZ3JhcGggICAgLS0gUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGgKKyAgICAgICAgSW5kZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgNCBzcGFjZXMpCisgICAgICAgIERlZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCBieSB0aGUgaW5kZW50IHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgNCBzcGFjZXMpCisgICAgICAgIENvbW1lbnQgT3V0IFJlZ2lvbiAgLS0gSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCisgICAgICAgIFVuY29tbWVudCBSZWdpb24gICAgLS0gUmVtb3ZlIGxlYWRpbmcgIyBvciAjIyBmcm9tIHNlbGVjdGVkIGxpbmVzCisgICAgICAgIFRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzLgorICAgICAgICAgICAgICAgIChOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKKyAgICAgICAgVW50YWJpZnkgUmVnaW9uICAgICAtLSBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgY29ycmVudCBudW1iZXIgb2Ygc3BhY2VzCisgICAgICAgIFRvZ2dsZSB0YWJzICAgICAgICAgLS0gT3BlbiBhIGRpYWxvZyB0byBzd2l0Y2ggYmV0d2VlbiBpbmRlbnRpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyBhbmQgdGFicy4KKyAgICAgICAgTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24gY29tbXVuaXR5IGlzIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZXMuCisgICAgICAgIEZvcm1hdCBQYXJhZ3JhcGggICAgLS0gUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGguIEFsbCBsaW5lcyBpbiB0aGUgcGFyYWdyYXBoIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgdG8gbGVzcyB0aGFuIDgwIGNvbHVtbnMuCisgICAgICAgIC0tLQorICAgICAgICBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlIC0tIFJlbW92ZWQgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXN0IG5vbi1zcGFjZSBjaGFyYWN0ZXIKIAotUnVuIE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorUnVuIE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlQeXRob24gU2hlbGwgLS0gT3BlbiBvciB3YWtlIHVwIHRoZSBQeXRob24gc2hlbGwgd2luZG93Ci0JLS0tCi0JQ2hlY2sgTW9kdWxlIC0tIFJ1biBhIHN5bnRheCBjaGVjayBvbiB0aGUgbW9kdWxlCi0JUnVuIE1vZHVsZSAgIC0tIEV4ZWN1dGUgdGhlIGN1cnJlbnQgZmlsZSBpbiB0aGUgX19tYWluX18gbmFtZXNwYWNlCisgICAgICAgIFB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIENoZWNrIE1vZHVsZSAtLSBDaGVjayB0aGUgc3ludGF4IG9mIHRoZSBtb2R1bGUgY3VycmVudGx5IG9wZW4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3Igd2luZG93LiAgSWYgdGhlIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRQorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSB0aGUgY29kZS4KKyAgICAgICAgUnVuIE1vZHVsZSAgIC0tIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudCwgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSB0aGUgY3VycmVudGx5IG9wZW4gbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29kZS4KIAotU2hlbGwgTWVudSAob25seSBpbiBTaGVsbCB3aW5kb3cpOgorU2hlbGwgTWVudSAoU2hlbGwgd2luZG93IG9ubHkpOgogCi0JVmlldyBMYXN0IFJlc3RhcnQgLS0gU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgcmVzdGFydAotCVJlc3RhcnQgU2hlbGwgICAgIC0tIFJlc3RhcnQgdGhlIGludGVycHJldGVyIHdpdGggYSBmcmVzaCBlbnZpcm9ubWVudAorICAgICAgICBWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0CisgICAgICAgIFJlc3RhcnQgU2hlbGwgICAgIC0tIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudAogCi1EZWJ1ZyBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitEZWJ1ZyBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlHbyB0byBGaWxlL0xpbmUgICAtLSBsb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCi0JCSAgICAgICAgICAgICBhbmQgbGluZSBudW1iZXIsIG9wZW4gdGhlIGZpbGUsIGFuZCBzaG93IHRoZSBsaW5lCi0JRGVidWdnZXIgKHRvZ2dsZSkgLS0gUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUgZGVidWdnZXIKLQlTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCi0JQXV0by1vcGVuIFN0YWNrIFZpZXdlciAodG9nZ2xlKSAtLSBPcGVuIHN0YWNrIHZpZXdlciBvbiB0cmFjZWJhY2sKKyAgICAgICAgR28gdG8gRmlsZS9MaW5lICAgLS0gTG9vayBhcm91bmQgdGhlIGluc2VydCBwb2ludCBmb3IgYSBmaWxlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGluZSBudW1iZXIsIG9wZW4gdGhlIGZpbGUsIGFuZCBzaG93IHRoZSBsaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uIHRyYWNlYmFjay4gIEF2YWlsYWJsZSBpbiB0aGUgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51IG9mIHRoZSBTaGVsbCB3aW5kb3cuCisgICAgICAgIERlYnVnZ2VyICh0b2dnbGUpIC0tIFRoaXMgZmVhdHVyZSBpcyBub3QgY29tcGxldGUgYW5kIGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsLiBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlci4KKyAgICAgICAgU3RhY2sgVmlld2VyICAgICAgLS0gU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbgorICAgICAgICBBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIFRvZ2dsZSBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sgdmlld2VyIG9uIHVuaGFuZGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbgogCi1PcHRpb25zIE1lbnU6CitPcHRpb25zIE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JQ29uZmlndXJlIElETEUgLS0gT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLAorICAgICAgICBDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWJpbmRpbmdzLCBhbmQgY29sb3IgdGhlbWVzIG1heSBiZSBhbHRlcmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydHVwIFByZWZlcmVuY2VzIG1heSBiZSBzZXQsIGFuZCBBZGRpdGlvbmFsIEhlbHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlcyBjYW4gYmUgc3BlY2lmaWVkLgotCQkJICAKLQkJCSAgT24gT1MgWCB0aGlzIG1lbnUgaXMgbm90IHByZXNlbnQsIHVzZQotCQkJICBtZW51ICdJRExFIC0+IFByZWZlcmVuY2VzLi4uJyBpbnN0ZWFkLgotCS0tLQotCUNvZGUgQ29udGV4dCAtLQkgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoCi0JCQkgIHNob3dzIHRoZSBibG9jayBjb250ZXh0IG9mIHRoZSBzZWN0aW9uIG9mIGNvZGUKLQkJCSAgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZSB3aW5kb3cuCi0JCQkgIChOb3QgcHJlc2VudCBpbiBTaGVsbCB3aW5kb3cuKQorICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydHVwIFByZWZlcmVuY2VzIG1heSBiZSBzZXQsIGFuZCBhZGRpdGlvbmFsIEhlbHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyBjYW4gYmUgc3BlY2lmaWVkLgogCi1XaW5kb3dzIE1lbnU6CisgICAgICAgIC0tLQorICAgICAgICBDb2RlIENvbnRleHQgKHRvZ2dsZSkgLS0gT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0IG9mIHRoZSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBjb2RlIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy4gVGhpcyBpcyBub3QgcHJlc2VudCBpbiB0aGUgU2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdyBvbmx5IHRoZSBFZGl0b3Igd2luZG93LgogCi0JWm9vbSBIZWlnaHQgLS0gdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gY29uZmlndXJlZCBzaXplCi0JYW5kIG1heGltdW0gaGVpZ2h0LgotCS0tLQotCVRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsKLQlzZWxlY3Qgb25lIHRvIGJyaW5nIGl0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYKLQluZWNlc3NhcnkpLgorV2luZG93cyBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKKworICAgICAgICBab29tIEhlaWdodCAtLSBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoNDB4ODAgaW5pdGlhbAorICAgICAgICBzZXR0aW5nKSBhbmQgbWF4aW11bSBoZWlnaHQuICBUaGUgaW5pdGlhbCBzaXplIGlzIGluIHRoZSBDb25maWd1cmUKKyAgICAgICAgSURMRSBkaWFsb2cgdW5kZXIgdGhlIGdlbmVyYWwgdGFiLgorICAgICAgICAtLS0KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOworICAgICAgICBzZWxlY3Qgb25lIHRvIGJyaW5nIGl0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYKKyAgICAgICAgbmVjZXNzYXJ5KS4KIAogSGVscCBNZW51OgogCi0JQWJvdXQgSURMRSAgLS0gVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCi0JSURMRSBSZWFkbWUgLS0gQmFja2dyb3VuZCBkaXNjdXNzaW9uIGFuZCBjaGFuZ2UgZGV0YWlscwotCS0tLQotCUlETEUgSGVscCAgIC0tIERpc3BsYXkgdGhpcyBmaWxlCi0JUHl0aG9uIERvY3MgLS0gQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZgotCQkgICAgICAgaW5zdGFsbGVkLiAgT3RoZXJ3aXNlLCBhY2Nlc3Mgd3d3LnB5dGhvbi5vcmcuCi0JLS0tCi0JKEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIG1heSBiZSBhZGRlZCBoZXJlKQorICAgICAgICBBYm91dCBJRExFICAtLSBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKKyAgICAgICAgLS0tCisgICAgICAgIElETEUgSGVscCAgIC0tIERpc3BsYXkgdGhpcyBmaWxlIHdoaWNoIGlzIGEgaGVscCBmaWxlIGZvciBJRExFCisgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbGluZyB0aGUgbWVudSBvcHRpb25zLCBiYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgdGlwcy4KKyAgICAgICAgUHl0aG9uIERvY3MgLS0gQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuICBPciB3aWxsIHN0YXJ0IGEgd2ViIGJyb3dzZXIgYW5kIG9wZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG9jcy5weXRob24ub3JnIHNob3dpbmcgdGhlIGxhdGVzdCBQeXRob24gZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgLS0tCisgICAgICAgIEFkZGl0aW9uYWwgaGVscCBzb3VyY2VzIG1heSBiZSBhZGRlZCBoZXJlIHdpdGggdGhlIENvbmZpZ3VyZSBJRExFCisgICAgICAgIGRpYWxvZyB1bmRlciB0aGUgR2VuZXJhbCB0YWIuCiAKLUVkaXQgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBFZGl0IHdpbmRvdyk6CitFZGl0b3IgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBFZGl0IHdpbmRvdyk6CiAKLQlDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCisgICAgICAgIEN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uCi0JQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAotCVBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdwotCVNldCBCcmVha3BvaW50ICAgLS0gU2V0cyBhIGJyZWFrcG9pbnQgKHdoZW4gZGVidWdnZXIgb3BlbikKLQlDbGVhciBCcmVha3BvaW50IC0tIENsZWFycyB0aGUgYnJlYWtwb2ludCBvbiB0aGF0IGxpbmUKKyAgICAgICAgQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgICAgICBQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKKyAgICAgICAgU2V0IEJyZWFrcG9pbnQgICAtLSBTZXRzIGEgYnJlYWtwb2ludC4gQnJlYWtwb2ludHMgYXJlIG9ubHkgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGRlYnVnZ2VyIGlzIG9wZW4uCisgICAgICAgIENsZWFyIEJyZWFrcG9pbnQgLS0gQ2xlYXJzIHRoZSBicmVha3BvaW50IG9uIHRoYXQgbGluZQogCiBTaGVsbCBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIFNoZWxsIHdpbmRvdyk6CiAKLQlDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCisgICAgICAgIEN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uCi0JQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAotCVBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdwotCS0tLQotCUdvIHRvIGZpbGUvbGluZSAgLS0gU2FtZSBhcyBpbiBEZWJ1ZyBtZW51CisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBHbyB0byBmaWxlL2xpbmUgIC0tIFNhbWUgYXMgaW4gRGVidWcgbWVudQogCiAKICoqIFRJUFMgKioKQEAgLTE0NCwxNTkgKzE4NywxODIgQEAKIAogQWRkaXRpb25hbCBIZWxwIFNvdXJjZXM6CiAKLQlXaW5kb3dzIHVzZXJzIGNhbiBHb29nbGUgb24gem9wZXNoZWxmLmNobSB0byBhY2Nlc3MgWm9wZSBoZWxwIGZpbGVzIGluCi0JdGhlIFdpbmRvd3MgaGVscCBmb3JtYXQuICBUaGUgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgZmVhdHVyZSBvZiB0aGUKLQljb25maWd1cmF0aW9uIEdVSSBzdXBwb3J0cyAuY2htLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxldHlwZXMKLQlzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLiAgU3VwcGx5IGEgTWVudSBJdGVtIHRpdGxlLCBhbmQgZW50ZXIgdGhlCi0JbG9jYXRpb24gaW4gdGhlIEhlbHAgRmlsZSBQYXRoIHNsb3Qgb2YgdGhlIE5ldyBIZWxwIFNvdXJjZSBkaWFsb2cuICBVc2UKLQlodHRwOi8vIGFuZC9vciB3d3cuIHRvIGlkZW50aWZ5IGV4dGVybmFsIFVSTHMsIG9yIGRvd25sb2FkIHRoZSBmaWxlIGFuZAotCWJyb3dzZSBmb3IgaXRzIHBhdGggb24geW91ciBtYWNoaW5lIHVzaW5nIHRoZSBCcm93c2UgYnV0dG9uLgorICAgICAgICBXaW5kb3dzIHVzZXJzIGNhbiBHb29nbGUgb24gem9wZXNoZWxmLmNobSB0byBhY2Nlc3MgWm9wZSBoZWxwIGZpbGVzIGluCisgICAgICAgIHRoZSBXaW5kb3dzIGhlbHAgZm9ybWF0LiAgVGhlIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIGZlYXR1cmUgb2YgdGhlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gR1VJIHN1cHBvcnRzIC5jaG0sIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGV0eXBlcworICAgICAgICBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLiAgU3VwcGx5IGEgTWVudSBJdGVtIHRpdGxlLCBhbmQgZW50ZXIgdGhlCisgICAgICAgIGxvY2F0aW9uIGluIHRoZSBIZWxwIEZpbGUgUGF0aCBzbG90IG9mIHRoZSBOZXcgSGVscCBTb3VyY2UgZGlhbG9nLiAgVXNlCisgICAgICAgIGh0dHA6Ly8gYW5kL29yIHd3dy4gdG8gaWRlbnRpZnkgZXh0ZXJuYWwgVVJMcywgb3IgZG93bmxvYWQgdGhlIGZpbGUgYW5kCisgICAgICAgIGJyb3dzZSBmb3IgaXRzIHBhdGggb24geW91ciBtYWNoaW5lIHVzaW5nIHRoZSBCcm93c2UgYnV0dG9uLgogCi0JQWxsIHVzZXJzIGNhbiBhY2Nlc3MgdGhlIGV4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZwotCXR1dG9yaWFscywgYXZhaWxhYmxlIGF0IHd3dy5weXRob24ub3JnL2RvYy4gIFNlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkCi0Jb3IgcmVtb3ZlZCBmcm9tIHRoZSBIZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgQ29uZmlndXJlIElETEUuCisgICAgICAgIEFsbCB1c2VycyBjYW4gYWNjZXNzIHRoZSBleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcKKyAgICAgICAgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLiAgU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQKKyAgICAgICAgb3IgcmVtb3ZlZCBmcm9tIHRoZSBIZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgQ29uZmlndXJlIElETEUuCiAKIEJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb246CiAKLQlCYWNrc3BhY2UgZGVsZXRlcyBjaGFyIHRvIHRoZSBsZWZ0OyBERUwgZGVsZXRlcyBjaGFyIHRvIHRoZSByaWdodC4KLQlDb250cm9sLWJhY2tzcGFjZSBkZWxldGVzIHdvcmQgbGVmdCwgQ29udHJvbC1ERUwgZGVsZXRlcyB3b3JkIHJpZ2h0LgotCUFycm93IGtleXMgYW5kIFBhZ2UgVXAvRG93biBtb3ZlIGFyb3VuZC4KLQlDb250cm9sLWxlZnQvcmlnaHQgQXJyb3cgbW92ZXMgYnkgd29yZHMgaW4gYSBzdHJhbmdlIGJ1dCB1c2VmdWwgd2F5LgotCUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBsaW5lLgotCUNvbnRyb2wtSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUuCi0JU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKLQkJQ29udHJvbC1hICAgICBiZWdpbm5pbmcgb2YgbGluZQotCQlDb250cm9sLWUgICAgIGVuZCBvZiBsaW5lCi0JCUNvbnRyb2wtayAgICAga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQotCQlDb250cm9sLWwgICAgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKLQlTdGFuZGFyZCBXaW5kb3dzIGJpbmRpbmdzIG1heSB3b3JrIG9uIHRoYXQgcGxhdGZvcm0uCi0JS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBTZXR0aW5ncyBEaWFsb2csIGxvb2sgdGhlcmUuCisgICAgICAgIEJhY2tzcGFjZSBkZWxldGVzIGNoYXIgdG8gdGhlIGxlZnQ7IERFTCBkZWxldGVzIGNoYXIgdG8gdGhlIHJpZ2h0LgorICAgICAgICBDb250cm9sLWJhY2tzcGFjZSBkZWxldGVzIHdvcmQgbGVmdCwgQ29udHJvbC1ERUwgZGVsZXRlcyB3b3JkIHJpZ2h0LgorICAgICAgICBBcnJvdyBrZXlzIGFuZCBQYWdlIFVwL0Rvd24gbW92ZSBhcm91bmQuCisgICAgICAgIENvbnRyb2wtbGVmdC9yaWdodCBBcnJvdyBtb3ZlcyBieSB3b3JkcyBpbiBhIHN0cmFuZ2UgYnV0IHVzZWZ1bCB3YXkuCisgICAgICAgIEhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBsaW5lLgorICAgICAgICBDb250cm9sLUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlLgorICAgICAgICBTb21lIHVzZWZ1bCBFbWFjcyBiaW5kaW5ncyBhcmUgaW5oZXJpdGVkIGZyb20gVGNsL1RrOgorICAgICAgICAgICAgICAgIENvbnRyb2wtYSAgICAgYmVnaW5uaW5nIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBDb250cm9sLWUgICAgIGVuZCBvZiBsaW5lCisgICAgICAgICAgICAgICAgQ29udHJvbC1rICAgICBraWxsIGxpbmUgKGJ1dCBkb2Vzbid0IHB1dCBpdCBpbiBjbGlwYm9hcmQpCisgICAgICAgICAgICAgICAgQ29udHJvbC1sICAgICBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50CisgICAgICAgIFN0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIENvbnRyb2wtYyB0byBjb3B5IGFuZCBDb250cm9sLXYgdG8KKyAgICAgICAgcGFzdGUpIG1heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cuCiAKIEF1dG9tYXRpYyBpbmRlbnRhdGlvbjoKIAotCUFmdGVyIGEgYmxvY2stb3BlbmluZyBzdGF0ZW1lbnQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYnkgNCBzcGFjZXMKLQkoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzCi0JKGJyZWFrLCByZXR1cm4gZXRjLikgdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcKLQlpbmRlbnRhdGlvbiwgQmFja3NwYWNlIGRlbGV0ZXMgdXAgdG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuICBUYWIKLQlpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uCi0JSW5kZW50IFdpZHRoLiAgKE4uQi4gQ3VycmVudGx5IHRhYnMgYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlCi0JdG8gVGNsL1RrIGlzc3Vlcy4pCisgICAgICAgIEFmdGVyIGEgYmxvY2stb3BlbmluZyBzdGF0ZW1lbnQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYnkgNCBzcGFjZXMKKyAgICAgICAgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcworICAgICAgICAoYnJlYWssIHJldHVybiBldGMuKSB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZworICAgICAgICBpbmRlbnRhdGlvbiwgQmFja3NwYWNlIGRlbGV0ZXMgdXAgdG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuICBUYWIKKyAgICAgICAgaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbgorICAgICAgICBJbmRlbnQgV2lkdGguIEN1cnJlbnRseSB0YWJzIGFyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZQorICAgICAgICB0byBUY2wvVGsgbGltaXRhdGlvbnMuCiAKICAgICAgICAgU2VlIGFsc28gdGhlIGluZGVudC9kZWRlbnQgcmVnaW9uIGNvbW1hbmRzIGluIHRoZSBlZGl0IG1lbnUuCiAKIENvbXBsZXRpb25zOgogCi0JQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mCi0JY2xhc3NlcywgYm90aCBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkLiAgQ29tcGxldGlvbnMgYXJlIGFsc28gcHJvdmlkZWQKLQlmb3IgZmlsZW5hbWVzLgorICAgICAgICBDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YKKyAgICAgICAgY2xhc3NlcywgYm90aCBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkLiAgQ29tcGxldGlvbnMgYXJlIGFsc28gcHJvdmlkZWQKKyAgICAgICAgZm9yIGZpbGVuYW1lcy4KIAotCVRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheQotCShkZWZhdWx0IGlzIHR3byBzZWNvbmRzKSBhZnRlciBhICcuJyBvciAoaW4gYSBzdHJpbmcpIGFuIG9zLnNlcCBpcwotCXR5cGVkLiAgSWYgYWZ0ZXIgb25lIG9mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyCi0JY2hhcmFjdGVycykgeW91IHR5cGUgYSBUYWIgdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZQotCWNvbnRpbnVhdGlvbiBpcyBmb3VuZC4KKyAgICAgICAgVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5CisgICAgICAgIChkZWZhdWx0IGlzIHR3byBzZWNvbmRzKSBhZnRlciBhICcuJyBvciAoaW4gYSBzdHJpbmcpIGFuIG9zLnNlcCBpcworICAgICAgICB0eXBlZC4gIElmIGFmdGVyIG9uZSBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlcgorICAgICAgICBjaGFyYWN0ZXJzKSBhIHRhYiBpcyB0eXBlZCB0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlCisgICAgICAgIGNvbnRpbnVhdGlvbiBpcyBmb3VuZC4KIAotCUlmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKLQlUYWIgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgorICAgICAgICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCisgICAgICAgIHRhYiB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCiAKLQknU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiAgSW4gYW4gZW1wdHkKLQlzdHJpbmcsIHRoaXMgd2lsbCBjb250YWluIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBPbiBhCi0JYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKLQljbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiAgSWYgc29tZQotCWNoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuCisgICAgICAgICdTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3csIGJ5IGRlZmF1bHQgdGhlCisgICAgICAgIENvbnRyb2wtc3BhY2Uga2V5cyB3aWxsIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuICBJbiBhbiBlbXB0eQorICAgICAgICBzdHJpbmcsIHRoaXMgd2lsbCBjb250YWluIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBPbiBhCisgICAgICAgIGJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCisgICAgICAgIGNsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuICBJZiBzb21lCisgICAgICAgIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuCiAKLQlJZiBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQotCWVudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiBFbnRlcmluZyBhIFRhYiB3aWxsIGNhdXNlCi0JdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0IHdpbmRvdyBvcgotCVNoZWxsLiAgVHdvIFRhYnMgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKLQl3aWxsIFJldHVybiBvciBhIGRvdWJsZSBjbGljay4gIEN1cnNvciBrZXlzLCBQYWdlIFVwL0Rvd24sIG1vdXNlCi0Jc2VsZWN0aW9uLCBhbmQgdGhlIHNjcm9sbHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCisgICAgICAgIElmIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCisgICAgICAgIGVudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiBFbnRlcmluZyBhIHRhYiB3aWxsIGNhdXNlCisgICAgICAgIHRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdCB3aW5kb3cgb3IKKyAgICAgICAgU2hlbGwuICBUd28gdGFicyBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcworICAgICAgICB3aWxsIHJldHVybiBvciBhIGRvdWJsZSBjbGljay4gIEN1cnNvciBrZXlzLCBQYWdlIFVwL0Rvd24sIG1vdXNlCisgICAgICAgIHNlbGVjdGlvbiwgYW5kIHRoZSBzY3JvbGwgd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KIAotCSdIaWRkZW4nIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgotCW5hbWUgYWZ0ZXIgYSAnLicuICBlLmcuICdfJy4gIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKLQknX19hbGxfXycgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCisgICAgICAgICJIaWRkZW4iIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorICAgICAgICBuYW1lIGFmdGVyIGEgJy4nLCAgZS5nLiAnXycuICBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCisgICAgICAgICdfX2FsbF9fJyBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KIAotCUNvbXBsZXRpb25zIGFuZCB0aGUgJ0V4cGFuZCBXb3JkJyBmYWNpbGl0eSBjYW4gc2F2ZSBhIGxvdCBvZiB0eXBpbmchCisgICAgICAgIENvbXBsZXRpb25zIGFuZCB0aGUgJ0V4cGFuZCBXb3JkJyBmYWNpbGl0eSBjYW4gc2F2ZSBhIGxvdCBvZiB0eXBpbmchCiAKLQlDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuICBOYW1lcyBpbgotCWFuIEVkaXQgd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIF9fbWFpbl9fIG9yIHN5cy5tb2R1bGVzIHdpbGwgbm90IGJlCi0JZm91bmQuICBSdW4gdGhlIG1vZHVsZSBvbmNlIHdpdGggeW91ciBpbXBvcnRzIHRvIGNvcnJlY3QgdGhpcwotCXNpdHVhdGlvbi4gIE5vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbgotCXN5cy5tb2R1bGVzLCBzbyBtdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCisgICAgICAgIENvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gIE5hbWVzIGluCisgICAgICAgIGFuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgX19tYWluX18gb3Igc3lzLm1vZHVsZXMgd2lsbCBub3QgYmUKKyAgICAgICAgZm91bmQuICBSdW4gdGhlIG1vZHVsZSBvbmNlIHdpdGggeW91ciBpbXBvcnRzIHRvIGNvcnJlY3QgdGhpcworICAgICAgICBzaXR1YXRpb24uICBOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4KKyAgICAgICAgc3lzLm1vZHVsZXMsIHNvIG11Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KIAotCUlmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5Ci0JbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi4gIE9UT0gsIHlvdSBjb3VsZCBtYWtlIHRoZSBkZWxheSB6ZXJvLgotCi0JWW91IGNvdWxkIGFsc28gc3dpdGNoIG9mZiB0aGUgQ2FsbFRpcHMgZXh0ZW5zaW9uLiAgKFdlIHdpbGwgYmUgYWRkaW5nCi0JYSBkZWxheSB0byB0aGUgY2FsbCB0aXAgd2luZG93LikKKyAgICAgICAgSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKKyAgICAgICAgbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi4gIE9yIGFub3RoZXIgb3B0aW9uIGlzIHRoZSBkZWxheSBjb3VsZAorICAgICAgICBiZSBzZXQgdG8gemVyby4gQW5vdGhlciBhbHRlcm5hdGl2ZSB0byBwcmV2ZW50aW5nIEFDVyBwb3B1cHMgaXMgdG8KKyAgICAgICAgZGlzYWJsZSB0aGUgY2FsbCB0aXBzIGV4dGVuc2lvbi4KIAogUHl0aG9uIFNoZWxsIHdpbmRvdzoKIAotCUNvbnRyb2wtYyBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kLgotCUNvbnRyb2wtZCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCA+Pj4gcHJvbXB0LgorICAgICAgICBDb250cm9sLWMgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZC4KKyAgICAgICAgQ29udHJvbC1kIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0ID4+PiBwcm9tcHQuCisgICAgICAgIEFsdC0vIGV4cGFuZCB3b3JkIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmcuCiAKICAgICBDb21tYW5kIGhpc3Rvcnk6CiAKLQlBbHQtcCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLgotCUFsdC1uIHJldHJpZXZlcyBuZXh0LgotCSAgICAgIChUaGVzZSBhcmUgQ29udHJvbC1wLCBDb250cm9sLW4gb24gT1MgWCkKLQlSZXR1cm4gd2hpbGUgY3Vyc29yIGlzIG9uIGEgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kLgotCUV4cGFuZCB3b3JkIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmcuCisgICAgICAgIEFsdC1wIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uIE9TIFgKKyAgICAgICAgdXNlIENvbnRyb2wtcC4KKyAgICAgICAgQWx0LW4gcmV0cmlldmVzIG5leHQuIE9uIE9TIFggdXNlIENvbnRyb2wtbi4KKyAgICAgICAgUmV0dXJuIHdoaWxlIGN1cnNvciBpcyBvbiBhIHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZC4KIAogICAgIFN5bnRheCBjb2xvcnM6CiAKLQlUaGUgY29sb3JpbmcgaXMgYXBwbGllZCBpbiBhIGJhY2tncm91bmQgInRocmVhZCIsIHNvIHlvdSBtYXkKLQlvY2Nhc2lvbmFsbHkgc2VlIHVuY29sb3JpemVkIHRleHQuICBUbyBjaGFuZ2UgdGhlIGNvbG9yCi0Jc2NoZW1lLCB1c2UgdGhlIENvbmZpZ3VyZSBJRExFIC8gSGlnaGxpZ2h0aW5nIGRpYWxvZy4KKyAgICAgICAgVGhlIGNvbG9yaW5nIGlzIGFwcGxpZWQgaW4gYSBiYWNrZ3JvdW5kICJ0aHJlYWQiLCBzbyB5b3UgbWF5CisgICAgICAgIG9jY2FzaW9uYWxseSBzZWUgdW5jb2xvcml6ZWQgdGV4dC4gIFRvIGNoYW5nZSB0aGUgY29sb3IKKyAgICAgICAgc2NoZW1lLCB1c2UgdGhlIENvbmZpZ3VyZSBJRExFIC8gSGlnaGxpZ2h0aW5nIGRpYWxvZy4KIAogICAgIFB5dGhvbiBkZWZhdWx0IHN5bnRheCBjb2xvcnM6CiAKLQlLZXl3b3JkcwlvcmFuZ2UKLQlCdWlsdGlucwlyb3lhbCBwdXJwbGUKLQlTdHJpbmdzCQlncmVlbgotCUNvbW1lbnRzCXJlZAotCURlZmluaXRpb25zCWJsdWUKKyAgICAgICAgS2V5d29yZHMgICAgICAgIG9yYW5nZQorICAgICAgICBCdWlsdGlucyAgICAgICAgcm95YWwgcHVycGxlCisgICAgICAgIFN0cmluZ3MgICAgICAgICBncmVlbgorICAgICAgICBDb21tZW50cyAgICAgICAgcmVkCisgICAgICAgIERlZmluaXRpb25zICAgICBibHVlCiAKICAgICBTaGVsbCBkZWZhdWx0IGNvbG9yczoKIAotCUNvbnNvbGUgb3V0cHV0CWJyb3duCi0Jc3Rkb3V0CQlibHVlCi0Jc3RkZXJyCQlyZWQKLQlzdGRpbgkJYmxhY2sKKyAgICAgICAgQ29uc29sZSBvdXRwdXQgIGJyb3duCisgICAgICAgIHN0ZG91dCAgICAgICAgICBibHVlCisgICAgICAgIHN0ZGVyciAgICAgICAgICByZWQKKyAgICAgICAgc3RkaW4gICAgICAgICAgIGJsYWNrCiAKIE90aGVyIHByZWZlcmVuY2VzOgogCi0JVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGtleWJpbmRpbmcsIGFuZCBzdGFydHVwIHByZWZlcmVuY2VzIGNhbgotCWJlIGNoYW5nZWQgdXNpbmcgdGhlIFNldHRpbmdzIGRpYWxvZy4KKyAgICAgICAgVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGhpZ2hsaWdodGluZywga2V5cywgYW5kIGdlbmVyYWwgcHJlZmVyZW5jZXMgY2FuCisgICAgICAgIGJlIGNoYW5nZWQgdmlhIHRoZSBDb25maWd1cmUgSURMRSBtZW51IG9wdGlvbi4gIEJlIHN1cmUgdG8gbm90ZSB0aGF0CisgICAgICAgIGtleXMgY2FuIGJlIHVzZXIgZGVmaW5lZCwgSURMRSBzaGlwcyB3aXRoIGZvdXIgYnVpbHQgaW4ga2V5IHNldHMuIEluCisgICAgICAgIGFkZGl0aW9uIGEgdXNlciBjYW4gY3JlYXRlIGEgY3VzdG9tIGtleSBzZXQgaW4gdGhlIENvbmZpZ3VyZSBJRExFCisgICAgICAgIGRpYWxvZyB1bmRlciB0aGUga2V5cyB0YWIuCiAKIENvbW1hbmQgbGluZSB1c2FnZToKIAotCUVudGVyIGlkbGUgLWggYXQgdGhlIGNvbW1hbmQgcHJvbXB0IHRvIGdldCBhIHVzYWdlIG1lc3NhZ2UuCisgICAgICAgIEVudGVyIGlkbGUgLWggYXQgdGhlIGNvbW1hbmQgcHJvbXB0IHRvIGdldCBhIHVzYWdlIG1lc3NhZ2UuCiAKLVJ1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3M6CisgICAgICAgIGlkbGUucHkgWy1jIGNvbW1hbmRdIFstZF0gWy1lXSBbLXNdIFstdCB0aXRsZV0gW2FyZ10gLi4uCiAKLQlJZiBJRExFIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaCBpdCB3aWxsIHJ1biBpbiBhCi0Jc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKLQlQeXRob24gZXhlY3V0aW9uIHNlcnZlci4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBQeXRob24gY2Fubm90IGNyZWF0ZQotCXRoZSBzdWJwcm9jZXNzIG9yIHRoZSBSUEMgc29ja2V0IGludGVyZmFjZSBvbiB5b3VyIHBsYXRmb3JtLiAgSG93ZXZlciwKLQlpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCi0JZW52aXJvbm1lbnQgaXMgbm90IHJlc3RhcnRlZCB3aGVuIFJ1bi9SdW4gTW9kdWxlIChGNSkgaXMgc2VsZWN0ZWQuICBJZgotCXlvdXIgY29kZSBoYXMgYmVlbiBtb2RpZmllZCwgeW91IG11c3QgcmVsb2FkKCkgdGhlIGFmZmVjdGVkIG1vZHVsZXMgYW5kCi0JcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcwotCWFyZSB0byB0YWtlIGVmZmVjdC4gIEZvciB0aGVzZSByZWFzb25zLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHJ1biBJRExFCi0Jd2l0aCB0aGUgZGVmYXVsdCBzdWJwcm9jZXNzIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgLWMgY29tbWFuZCAgcnVuIHRoaXMgY29tbWFuZAorICAgICAgICAtZCAgICAgICAgICBlbmFibGUgZGVidWdnZXIKKyAgICAgICAgLWUgICAgICAgICAgZWRpdCBtb2RlOyBhcmd1bWVudHMgYXJlIGZpbGVzIHRvIGJlIGVkaXRlZAorICAgICAgICAtcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0CisgICAgICAgIC10IHRpdGxlICAgIHNldCB0aXRsZSBvZiBzaGVsbCB3aW5kb3cKKworICAgICAgICBJZiB0aGVyZSBhcmUgYXJndW1lbnRzOgorICAgICAgICAxLiBJZiAtZSBpcyB1c2VkLCBhcmd1bWVudHMgYXJlIGZpbGVzIG9wZW5lZCBmb3IgZWRpdGluZyBhbmQgc3lzLmFyZ3YKKyAgICAgICAgICAgcmVmbGVjdHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gSURMRSBpdHNlbGYuCisgICAgICAgIDIuIE90aGVyd2lzZSwgaWYgLWMgaXMgdXNlZCwgYWxsIGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluCisgICAgICAgICAgIHN5cy5hcmd2WzE6Li4uXSwgd2l0aCBzeXMuYXJndlswXSBzZXQgdG8gLWMuCisgICAgICAgIDMuIE90aGVyd2lzZSwgaWYgbmVpdGhlciAtZSBub3IgLWMgaXMgdXNlZCwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEKKyAgICAgICAgICAgc2NyaXB0IHdoaWNoIGlzIGV4ZWN1dGVkIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgaW4KKyAgICAgICAgICAgc3lzLmFyZ3ZbMTouLi5dICBhbmQgc3lzLmFyZ3ZbMF0gc2V0IHRvIHRoZSBzY3JpcHQgbmFtZS4gIElmIHRoZQorICAgICAgICAgICBzY3JpcHQgbmFtZSBpcyAtLCBubyBzY3JpcHQgaXMgZXhlY3V0ZWQgYnV0IGFuIGludGVyYWN0aXZlIFB5dGhvbgorICAgICAgICAgICBzZXNzaW9uIGlzIHN0YXJ0ZWQ7IHRoZSBhcmd1bWVudHMgYXJlIHN0aWxsIGF2YWlsYWJsZSBpbiBzeXMuYXJndi4KKworUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczogKERFUFJFQ0FURUQgaW4gUHl0aG9uIDMuNCBzZWUgSXNzdWUgMTYxMjMpCisKKyAgICAgICAgSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQorICAgICAgICBzaW5nbGUgcHJvY2VzcyBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZSBzdWJwcm9jZXNzIHdoaWNoIHJ1bnMgdGhlIFJQQworICAgICAgICBQeXRob24gZXhlY3V0aW9uIHNlcnZlci4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBQeXRob24gY2Fubm90IGNyZWF0ZQorICAgICAgICB0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCisgICAgICAgIGluIHRoaXMgbW9kZSB1c2VyIGNvZGUgaXMgbm90IGlzb2xhdGVkIGZyb20gSURMRSBpdHNlbGYuICBBbHNvLCB0aGUKKyAgICAgICAgZW52aXJvbm1lbnQgaXMgbm90IHJlc3RhcnRlZCB3aGVuIFJ1bi9SdW4gTW9kdWxlIChGNSkgaXMgc2VsZWN0ZWQuICBJZgorICAgICAgICB5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAorICAgICAgICByZS1pbXBvcnQgYW55IHNwZWNpZmljIGl0ZW1zIChlLmcuIGZyb20gZm9vIGltcG9ydCBiYXopIGlmIHRoZSBjaGFuZ2VzCisgICAgICAgIGFyZSB0byB0YWtlIGVmZmVjdC4gIEZvciB0aGVzZSByZWFzb25zLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHJ1biBJRExFCisgICAgICAgIHdpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCiAKIEV4dGVuc2lvbnM6CiAKLQlJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCi0JY29uZmlnLWV4dGVuc2lvbnMuZGVmIGluIHRoZSBpZGxlbGliIGRpcmVjdG9yeSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KLQlUaGUgZGVmYXVsdCBleHRlbnNpb25zIGFyZSBjdXJyZW50bHk6CisgICAgICAgIElETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgICAgY29uZmlnLWV4dGVuc2lvbnMuZGVmIGluIHRoZSBpZGxlbGliIGRpcmVjdG9yeSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKyAgICAgICAgVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgogCi0JCUZvcm1hdFBhcmFncmFwaAotCQlBdXRvRXhwYW5kCi0JCVpvb21IZWlnaHQKLQkJU2NyaXB0QmluZGluZwotCQlDYWxsVGlwcwotCQlQYXJlbk1hdGNoCi0JCUF1dG9Db21wbGV0ZQotCQlDb2RlQ29udGV4dAorICAgICAgICAgICAgICAgIEZvcm1hdFBhcmFncmFwaAorICAgICAgICAgICAgICAgIEF1dG9FeHBhbmQKKyAgICAgICAgICAgICAgICBab29tSGVpZ2h0CisgICAgICAgICAgICAgICAgU2NyaXB0QmluZGluZworICAgICAgICAgICAgICAgIENhbGxUaXBzCisgICAgICAgICAgICAgICAgUGFyZW5NYXRjaAorICAgICAgICAgICAgICAgIEF1dG9Db21wbGV0ZQorICAgICAgICAgICAgICAgIENvZGVDb250ZXh0CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5IGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQppbmRleCA2MGYxZDMyLi5jZDJjOGJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKQEAgLTEgKzEgQEAKLUlETEVfVkVSU0lPTiA9ICIzLjMuMyIKK0lETEVfVkVSU0lPTiA9ICIzLjQuMGIxIgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnBjLnB5IGIvTGliL2lkbGVsaWIvcnBjLnB5CmluZGV4IGRkY2U2ZTkuLjljNTFiOGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3JwYy5weQorKysgYi9MaWIvaWRsZWxpYi9ycGMucHkKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgcmV0dXJuICgiQ0FMTEVYQyIsIGV4KQpAQCAtMzQwLDcgKzM0MCw3IEBACiAgICAgICAgICAgICAgICAgbiA9IHNlbGYuc29jay5zZW5kKHNbOkJVRlNJWkVdKQogICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzb2NrZXQgbm8gbG9uZ2VyIGV4aXN0cyIpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcyA9IHNbbjpdCkBAIC0zNTcsNyArMzU3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLnNvY2sucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICBpZiBsZW4ocykgPT0gMDoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtNTM3LDcgKzUzNyw3IEBACiAgICAgICAgICAgICBTb2NrZXRJTy5fX2luaXRfXyhzZWxmLCB3b3JraW5nX3NvY2spCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiKiogSW52YWxpZCBob3N0OiAiLCBhZGRyZXNzLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKICAgICBkZWYgZ2V0X3JlbW90ZV9wcm94eShzZWxmLCBvaWQpOgogICAgICAgICByZXR1cm4gUlBDUHJveHkoc2VsZiwgb2lkKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IGMxODU5YjYuLjEzY2VjNjIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTE1MCw4ICsxNTAsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBNeVJQQ1NlcnZlcihhZGRyZXNzLCBNeUhhbmRsZXIpCiAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IHNvY2tldCBlcnJvcjogIiArIGVyci5hcmdzWzFdICsKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2VzczogT1NFcnJvcjogIiArIGVyci5hcmdzWzFdICsKICAgICAgICAgICAgICAgICAgICIsIHJldHJ5aW5nLi4uLiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICBzb2NrZXRfZXJyb3IgPSBlcnIKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2ltYXBsaWIucHkgYi9MaWIvaW1hcGxpYi5weQppbmRleCAzZjY2NTZhLi5kYWJmMTYxIDEwMDY0NAotLS0gYS9MaWIvaW1hcGxpYi5weQorKysgYi9MaWIvaW1hcGxpYi5weQpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgICAgIGltcG9ydCBobWFjCiAgICAgICAgIHB3ZCA9IChzZWxmLnBhc3N3b3JkLmVuY29kZSgnQVNDSUknKSBpZiBpc2luc3RhbmNlKHNlbGYucGFzc3dvcmQsIHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5wYXNzd29yZCkKLSAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAKIAogICAgIGRlZiBsb2dvdXQoc2VsZik6CkBAIC03NDIsOSArNzQyLDcgQEAKICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ1RMUyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCiAgICAgICAgICMgR2VuZXJhdGUgYSBkZWZhdWx0IFNTTCBjb250ZXh0IGlmIG5vbmUgd2FzIHBhc3NlZC4KICAgICAgICAgaWYgc3NsX2NvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgotICAgICAgICAgICAgc3NsX2NvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQogICAgICAgICB0eXAsIGRhdCA9IHNlbGYuX3NpbXBsZV9jb21tYW5kKG5hbWUpCiAgICAgICAgIGlmIHR5cCA9PSAnT0snOgogICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrKQpAQCAtOTE1LDcgKzkxMyw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZW5kKGRhdGEgKyBDUkxGKQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICBpZiBsaXRlcmFsIGlzIE5vbmU6CkBAIC05NDAsNyArOTM4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQobGl0ZXJhbCkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoQ1JMRikKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgICAgIGlmIG5vdCBsaXRlcmF0b3I6CkBAIC0xMDg1LDcgKzEwODMsNyBAQAogCiAgICAgICAgICMgUHJvdG9jb2wgbWFuZGF0ZXMgYWxsIGxpbmVzIHRlcm1pbmF0ZWQgYnkgQ1JMRgogICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aChiJ1xyXG4nKToKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmUnKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiB1bnRlcm1pbmF0ZWQgbGluZTogJXInICUgbGluZSkKIAogICAgICAgICBsaW5lID0gbGluZVs6LTJdCiAgICAgICAgIGlmIF9fZGVidWdfXzoKQEAgLTEyMTAsMTUgKzEyMDgsMTUgQEAKIAogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLnNzbF9jb250ZXh0ID0gc3NsX2NvbnRleHQKICAgICAgICAgICAgIElNQVA0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpCiAKICAgICAgICAgZGVmIF9jcmVhdGVfc29ja2V0KHNlbGYpOgogICAgICAgICAgICAgc29jayA9IElNQVA0Ll9jcmVhdGVfc29ja2V0KHNlbGYpCi0gICAgICAgICAgICBpZiBzZWxmLnNzbF9jb250ZXh0OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaykKIAogICAgICAgICBkZWYgb3BlbihzZWxmLCBob3N0PScnLCBwb3J0PUlNQVA0X1NTTF9QT1JUKToKICAgICAgICAgICAgICIiIlNldHVwIGNvbm5lY3Rpb24gdG8gcmVtb3RlIHNlcnZlciBvbiAiaG9zdDpwb3J0Ii4KZGlmZiAtLWdpdCBhL0xpYi9pbWdoZHIucHkgYi9MaWIvaW1naGRyLnB5CmluZGV4IDZlZTQ1ZGEuLjBjYmEwNjMgMTAwNjQ0Ci0tLSBhL0xpYi9pbWdoZHIucHkKKysrIGIvTGliL2ltZ2hkci5weQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9pbXAucHkgYi9MaWIvaW1wLnB5CmluZGV4IDQwODgzODMuLmM4NDQ5YzYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXAucHkKKysrIGIvTGliL2ltcC5weQpAQCAtMTYsMTggKzE2LDIwIEBACiAgICAgIyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLgogICAgIGxvYWRfZHluYW1pYyA9IE5vbmUKIAotIyBEaXJlY3RseSBleHBvc2VkIGJ5IHRoaXMgbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBuZXdfbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZSwgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBfRVJSX01TRywgX1NwZWNNZXRob2RzCiAKLQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIAord2FybmluZ3Mud2FybigidGhlIGltcCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgaW1wb3J0bGliOyAiCisgICAgICAgICAgICAgICJzZWUgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gZm9yIGFsdGVybmF0aXZlIHVzZXMiLAorICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQogCiAjIERFUFJFQ0FURUQKIFNFQVJDSF9FUlJPUiA9IDAKQEAgLTQyLDkgKzQ0LDIzIEBACiBJTVBfSE9PSyA9IDkKIAogCitkZWYgbmV3X21vZHVsZShuYW1lKToKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgQ3JlYXRlIGEgbmV3IG1vZHVsZS4KKworICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KKworICAgICIiIgorICAgIHJldHVybiB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisKKwogZGVmIGdldF9tYWdpYygpOgotICAgICIiIlJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuIiIiCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX01BR0lDX0JZVEVTCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuTUFHSUNfTlVNQkVSCiAKIAogZGVmIGdldF90YWcoKToKQEAgLTUyLDEyICs2OCw0MiBAQAogICAgIHJldHVybiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKIAorZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weWMvLnB5byBmaWxlLgorCisgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAgLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb24KKyAgICB3aWxsIGJlIC5weWMgdW5sZXNzIHN5cy5mbGFncy5vcHRpbWl6ZSBpcyBub24temVybywgdGhlbiBpdCB3aWxsIGJlIC5weW8uCisKKyAgICBJZiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgdGhlbiBpdCBtdXN0IGJlIGEgYm9vbGVhbiBhbmQgaXMgdXNlZCBpbgorICAgIHBsYWNlIG9mIHN5cy5mbGFncy5vcHRpbWl6ZS4KKworICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgorCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGUpCisKKworZGVmIHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weWMuLy5weW8gZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyAucHkgZmlsZS4KKworICAgIFRoZSAucHljLy5weW8gZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgdGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5Yy8ucHlvIGZpbGUuICBJZiBwYXRoIGRvZXMKKyAgICBub3QgY29uZm9ybSB0byBQRVAgMzE0NyBmb3JtYXQsIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmCisgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisKIGRlZiBnZXRfc3VmZml4ZXMoKToKLSAgICB3YXJuaW5ncy53YXJuKCdpbXAuZ2V0X3N1ZmZpeGVzKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb25zdGFudHMgJwotICAgICAgICAgICAgICAgICAgJ2RlZmluZWQgb24gaW1wb3J0bGliLm1hY2hpbmVyeSBpbnN0ZWFkJywKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAiIiIqKkRFUFJFQ0FURUQqKiIiIgogICAgIGV4dGVuc2lvbnMgPSBbKHMsICdyYicsIENfRVhURU5TSU9OKSBmb3IgcyBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTXQotICAgIHNvdXJjZSA9IFsocywgJ1UnLCBQWV9TT1VSQ0UpIGZvciBzIGluIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNdCisgICAgc291cmNlID0gWyhzLCAncicsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KICAgICBieXRlY29kZSA9IFsocywgJ3JiJywgUFlfQ09NUElMRUQpIGZvciBzIGluIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU10KIAogICAgIHJldHVybiBleHRlbnNpb25zICsgc291cmNlICsgYnl0ZWNvZGUKQEAgLTY1LDcgKzExMSwxMSBAQAogCiBjbGFzcyBOdWxsSW1wb3J0ZXI6CiAKLSAgICAiIiJOdWxsIGltcG9ydCBvYmplY3QuIiIiCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIE51bGwgaW1wb3J0IG9iamVjdC4KKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoID09ICcnOgpAQCAtMTA2LDQ4ICsxNTYsNDkgQEAKICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCiAKIAotY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX3NvdXJjZSgpLiIiIgogCiAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3NvdXJjZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLmxvYWRfbW9kdWxlKCknCi0gICAgICAgICAgICcgaW5zdGVhZCcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBsb2FkZXIgPSBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCi1jbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwKLSAgICAgICAgX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwgU291cmNlbGVzc0ZpbGVMb2FkZXIpOgogCiAgICAgIiIiQ29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBpbXBsZW1lbnRpbmcgbG9hZF9jb21waWxlZCgpLiIiIgogCiAKIGRlZiBsb2FkX2NvbXBpbGVkKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfY29tcGlsZWQoKSBpcyBkZXByZWNhdGVkOyB1c2UgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkuJwotICAgICAgICAgICAnbG9hZF9tb2R1bGUoKSBpbnN0ZWFkICcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCisgICAgbG9hZGVyID0gX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gbW9kdWxlLl9fbG9hZGVyX18KICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIGxvYWRfcGFja2FnZShuYW1lLCBwYXRoKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3BhY2thZ2UoKSBpcyBkZXByZWNhdGVkOyB1c2UgZWl0aGVyICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcigpIG9yICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIoKSBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgZXh0ZW5zaW9ucyA9IChtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTWzpdICsKICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0pCkBAIC0xNTcsNyArMjA4LDEzIEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3shcn0gaXMgbm90IGEgcGFja2FnZScuZm9ybWF0KHBhdGgpKQotICAgIHJldHVybiBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aCkubG9hZF9tb2R1bGUobmFtZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQogCiAKIGRlZiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZGV0YWlscyk6CkBAIC0xNjksMzIgKzIyNiwzMCBAQAogCiAgICAgIiIiCiAgICAgc3VmZml4LCBtb2RlLCB0eXBlXyA9IGRldGFpbHMKLSAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKLSAgICAgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIG9wZW4gbW9kZSB7IXJ9Jy5mb3JtYXQobW9kZSkpCi0gICAgICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06Ci0gICAgICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBZX0NPTVBJTEVEOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfcGFja2FnZShuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfRlJPWkVOOgotICAgICAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKKyAgICBlbGlmIGZpbGUgaXMgTm9uZSBhbmQgdHlwZV8gaW4ge1BZX1NPVVJDRSwgUFlfQ09NUElMRUR9OgorICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICBlbGlmIHR5cGVfID09IFBZX1NPVVJDRToKKyAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6CisgICAgICAgIHJldHVybiBsb2FkX2NvbXBpbGVkKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBvcGVuZWRfZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgorICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQorICAgIGVsaWYgdHlwZV8gPT0gQ19CVUlMVElOOgorICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46CisgICAgICAgIHJldHVybiBpbml0X2Zyb3plbihuYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQogCiAKIGRlZiBmaW5kX21vZHVsZShuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjMwLDU0ICsyODUsMzEgQEAKICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgcGFja2FnZV9maWxlX25hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBwYWNrYWdlX2RpcmVjdG9yeSwgKCcnLCAnJywgUEtHX0RJUkVDVE9SWSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgdHlwZV8gaW4gZ2V0X3N1ZmZpeGVzKCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgorICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsgICMgQnJlYWsgb3V0IG9mIG91dGVyIGxvb3Agd2hlbiBicmVha2luZyBvdXQgb2YgaW5uZXIgbG9vcC4KICAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfYm9vdHN0cmFwLl9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKIAogICAgIGVuY29kaW5nID0gTm9uZQotICAgIGlmIG1vZGUgPT0gJ1UnOgorICAgIGlmICdiJyBub3QgaW4gbW9kZToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZpbGUucmVhZGxpbmUpWzBdCiAgICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZykKICAgICByZXR1cm4gZmlsZSwgZmlsZV9wYXRoLCAoc3VmZml4LCBtb2RlLCB0eXBlXykKIAogCi1fUkVMT0FESU5HID0ge30KLQogZGVmIHJlbG9hZChtb2R1bGUpOgotICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCiAKICAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCiAKICAgICAiIiIKLSAgICBpZiBub3QgbW9kdWxlIG9yIHR5cGUobW9kdWxlKSAhPSB0eXBlKHN5cyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6Ci0gICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCi0gICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQotICAgIHRyeToKLSAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXy5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAyMmM5MGYyLi4zZTk2OWJiIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsNSArMSw1IEBACiAiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKLV9fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcyddCitfX2FsbF9fID0gWydfX2ltcG9ydF9fJywgJ2ltcG9ydF9tb2R1bGUnLCAnaW52YWxpZGF0ZV9jYWNoZXMnLCAncmVsb2FkJ10KIAogIyBCb290c3RyYXAgaGVscCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xMSw2ICsxMSw3IEBACiAjIGluaXRpYWxpc2VkIGJlbG93IGlmIHRoZSBmcm96ZW4gb25lIGlzIG5vdCBhdmFpbGFibGUpLgogaW1wb3J0IF9pbXAgICMgSnVzdCB0aGUgYnVpbHRpbiBjb21wb25lbnQsIE5PVCB0aGUgZnVsbCBQeXRob24gbW9kdWxlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIAogdHJ5OgogICAgIGltcG9ydCBfZnJvemVuX2ltcG9ydGxpYiBhcyBfYm9vdHN0cmFwCkBAIC00NSwxOSArNDYsNDIgQEAKICAgICAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAKIAotZGVmIGZpbmRfbG9hZGVyKG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgIiIiRmluZCB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KK2RlZiBmaW5kX3NwZWMobmFtZSwgcGF0aD1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgogCiAgICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCi0gICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCisgICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQogICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgotICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgbG9hZGVyIHdpdGggdGhlCi0gICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBjb3VsZAorICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgc3BlYyB3aXRoIHRoZQorICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBzcGVjIGNvdWxkCiAgICAgYmUgZm91bmQuCiAKICAgICBEb3R0ZWQgbmFtZXMgZG8gbm90IGhhdmUgdGhlaXIgcGFyZW50IHBhY2thZ2VzIGltcGxpY2l0bHkgaW1wb3J0ZWQuIFlvdSB3aWxsCiAgICAgbW9zdCBsaWtlbHkgbmVlZCB0byBleHBsaWNpdGx5IGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIGluIHRoZSBwcm9wZXIKLSAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IGxvYWRlci4KKyAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IHNwZWMuCisKKyAgICAiIiIKKyAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgTm9uZScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworCisjIFhYWCBEZXByZWNhdGUuLi4KK2RlZiBmaW5kX2xvYWRlcihuYW1lLCBwYXRoPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKworICAgIFRoaXMgaXMgYSBiYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXIgYXJvdW5kIGZpbmRfc3BlYygpLgogCiAgICAgIiIiCiAgICAgdHJ5OgpAQCAtNjgsNyArOTIsMjAgQEAKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fbG9hZGVyX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorCisgICAgc3BlYyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgICMgV2Ugd29uJ3Qgd29ycnkgYWJvdXQgbWFsZm9ybWVkIHNwZWNzIChtaXNzaW5nIGF0dHJpYnV0ZXMpLgorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBmb3Ige30gbWlzc2luZyBsb2FkZXInLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25hbWVzcGFjZSBwYWNrYWdlcyBkbyBub3QgaGF2ZSBsb2FkZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAKIGRlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSk6CkBAIC04Miw5ICsxMTksNTAgQEAKICAgICBsZXZlbCA9IDAKICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgaWYgbm90IHBhY2thZ2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbGF0aXZlIGltcG9ydHMgcmVxdWlyZSB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IikKKyAgICAgICAgICAgIG1zZyA9ICgidGhlICdwYWNrYWdlJyBhcmd1bWVudCBpcyByZXF1aXJlZCB0byBwZXJmb3JtIGEgcmVsYXRpdmUgIgorICAgICAgICAgICAgICAgICAgICJpbXBvcnQgZm9yIHshcn0iKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQobmFtZSkpCiAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gbmFtZToKICAgICAgICAgICAgIGlmIGNoYXJhY3RlciAhPSAnLic6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZ2NkX2ltcG9ydChuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK19SRUxPQURJTkcgPSB7fQorCisKK2RlZiByZWxvYWQobW9kdWxlKToKKyAgICAiIiJSZWxvYWQgdGhlIG1vZHVsZSBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLgorCisgICAgIiIiCisgICAgaWYgbm90IG1vZHVsZSBvciBub3QgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbG9hZCgpIGFyZ3VtZW50IG11c3QgYmUgbW9kdWxlIikKKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworCisgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgIG1zZyA9ICJtb2R1bGUge30gbm90IGluIHN5cy5tb2R1bGVzIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgaWYgbmFtZSBpbiBfUkVMT0FESU5HOgorICAgICAgICByZXR1cm4gX1JFTE9BRElOR1tuYW1lXQorICAgIF9SRUxPQURJTkdbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHBhcmVudF9uYW1lID0gbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWUgYW5kIHBhcmVudF9uYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIG1zZyA9ICJwYXJlbnQgeyFyfSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwgbmFtZT1wYXJlbnRfbmFtZSkKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBOb25lLCBtb2R1bGUpCisgICAgICAgIG1ldGhvZHMgPSBfYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgX1JFTE9BRElOR1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKaW5kZXggZTQwZWM5Mi4uMjM1ZTI0MiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQpAQCAtOSw3ICs5LDcgQEAKICMKICMgSU1QT1JUQU5UOiBXaGVuZXZlciBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIG1vZHVsZSwgYmUgc3VyZSB0byBydW4KICMgYSB0b3AtbGV2ZWwgbWFrZSBpbiBvcmRlciB0byBnZXQgdGhlIGZyb3plbiB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUKLSMgdXBkYXRlLiBOb3QgZG9pbmcgc28sIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgorIyB1cGRhdGUuIE5vdCBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKICMgYWxsIG90aGVycyB3aG8gZG9uJ3QgaGF2ZSBhIC4vcHl0aG9uIGFyb3VuZCB0byBmcmVlemUgdGhlIG1vZHVsZQogIyBpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLgogIwpAQCAtMjAsMTAgKzIwLDYgQEAKICMgcmVmZXJlbmNlIGFueSBpbmplY3RlZCBvYmplY3RzISBUaGlzIGluY2x1ZGVzIG5vdCBvbmx5IGdsb2JhbCBjb2RlIGJ1dCBhbHNvCiAjIGFueXRoaW5nIHNwZWNpZmllZCBhdCB0aGUgY2xhc3MgbGV2ZWwuCiAKLSMgWFhYIE1ha2Ugc3VyZSBhbGwgcHVibGljIG5hbWVzIGhhdmUgbm8gc2luZ2xlIGxlYWRpbmcgdW5kZXJzY29yZSBhbmQgYWxsCi0jICAgICBvdGhlcnMgZG8uCi0KLQogIyBCb290c3RyYXAtcmVsYXRlZCBjb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMgPSAnd2luJywgJ2N5Z3dpbicsICdkYXJ3aW4nCkBAIC00MSw3NiArMzcsNTggQEAKICAgICByZXR1cm4gX3JlbGF4X2Nhc2UKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfd19sb25nKHgpOgotICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50KHgpCi0gICAgaW50X2J5dGVzID0gW10KLSAgICBpbnRfYnl0ZXMuYXBwZW5kKHggJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gOCkgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMTYpICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDI0KSAmIDB4RkYpCi0gICAgcmV0dXJuIGJ5dGVhcnJheShpbnRfYnl0ZXMpCisgICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uIiIiCisgICAgcmV0dXJuIChpbnQoeCkgJiAweEZGRkZGRkZGKS50b19ieXRlcyg0LCAnbGl0dGxlJykKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfcl9sb25nKGludF9ieXRlcyk6Ci0gICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4KLQotICAgIFhYWCBUZW1wb3JhcnkgdW50aWwgbWFyc2hhbCdzIGxvbmcgZnVuY3Rpb24gYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50X2J5dGVzWzBdCi0gICAgeCB8PSBpbnRfYnl0ZXNbMV0gPDwgOAotICAgIHggfD0gaW50X2J5dGVzWzJdIDw8IDE2Ci0gICAgeCB8PSBpbnRfYnl0ZXNbM10gPDwgMjQKLSAgICByZXR1cm4geAorICAgICIiIkNvbnZlcnQgNCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIHRvIGFuIGludGVnZXIuIiIiCisgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGludF9ieXRlcywgJ2xpdHRsZScpCiAKIAogZGVmIF9wYXRoX2pvaW4oKnBhdGhfcGFydHMpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmpvaW4oKS4iIiIKLSAgICBuZXdfcGFydHMgPSBbXQotICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHM6Ci0gICAgICAgIGlmIG5vdCBwYXJ0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXJ0KQotICAgICAgICBpZiBwYXJ0Wy0xXSBub3QgaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXRoX3NlcCkKLSAgICByZXR1cm4gJycuam9pbihuZXdfcGFydHNbOi0xXSkgICMgRHJvcCBzdXBlcmZsdW91cyBwYXRoIHNlcGFyYXRvci4KKyAgICByZXR1cm4gcGF0aF9zZXAuam9pbihbcGFydC5yc3RyaXAocGF0aF9zZXBhcmF0b3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzIGlmIHBhcnRdKQogCiAKIGRlZiBfcGF0aF9zcGxpdChwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5zcGxpdCgpLiIiIgorICAgIGlmIGxlbihwYXRoX3NlcGFyYXRvcnMpID09IDE6CisgICAgICAgIGZyb250LCBfLCB0YWlsID0gcGF0aC5ycGFydGl0aW9uKHBhdGhfc2VwKQorICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKICAgICBmb3IgeCBpbiByZXZlcnNlZChwYXRoKToKICAgICAgICAgaWYgeCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBzZXAgPSB4Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIHNlcCA9IHBhdGhfc2VwCi0gICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24oc2VwKQotICAgIHJldHVybiBmcm9udCwgdGFpbAorICAgICAgICAgICAgZnJvbnQsIHRhaWwgPSBwYXRoLnJzcGxpdCh4LCBtYXhzcGxpdD0xKQorICAgICAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgcmV0dXJuICcnLCBwYXRoCisKKworZGVmIF9wYXRoX3N0YXQocGF0aCk6CisgICAgIiIiU3RhdCB0aGUgcGF0aC4KKworICAgIE1hZGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBvdmVycmlkZSBpbiBleHBlcmltZW50cworICAgIChlLmcuIGNhY2hlIHN0YXQgcmVzdWx0cykuCisKKyAgICAiIiIKKyAgICByZXR1cm4gX29zLnN0YXQocGF0aCkKIAogCiBkZWYgX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIG1vZGUpOgogICAgICIiIlRlc3Qgd2hldGhlciB0aGUgcGF0aCBpcyB0aGUgc3BlY2lmaWVkIG1vZGUgdHlwZS4iIiIKICAgICB0cnk6Ci0gICAgICAgIHN0YXRfaW5mbyA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0YXRfaW5mbyA9IF9wYXRoX3N0YXQocGF0aCkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIChzdGF0X2luZm8uc3RfbW9kZSAmIDBvMTcwMDAwKSA9PSBtb2RlCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNmaWxlKCkKIGRlZiBfcGF0aF9pc2ZpbGUocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNmaWxlLiIiIgogICAgIHJldHVybiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgMG8xMDAwMDApCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNkaXIoKQogZGVmIF9wYXRoX2lzZGlyKHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmlzZGlyLiIiIgogICAgIGlmIG5vdCBwYXRoOgpAQCAtMTQ4LDE4ICsxMjYsMTMgQEAKICAgICBuZXcuX19kaWN0X18udXBkYXRlKG9sZC5fX2RpY3RfXykKIAogCitkZWYgX25ld19tb2R1bGUobmFtZSk6CisgICAgcmV0dXJuIHR5cGUoc3lzKShuYW1lKQorCisKIF9jb2RlX3R5cGUgPSB0eXBlKF93cmFwLl9fY29kZV9fKQogCiAKLWRlZiBuZXdfbW9kdWxlKG5hbWUpOgotICAgICIiIkNyZWF0ZSBhIG5ldyBtb2R1bGUuCi0KLSAgICBUaGUgbW9kdWxlIGlzIG5vdCBlbnRlcmVkIGludG8gc3lzLm1vZHVsZXMuCi0KLSAgICAiIiIKLSAgICByZXR1cm4gdHlwZShfaW8pKG5hbWUpCi0KLQogIyBNb2R1bGUtbGV2ZWwgbG9ja2luZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjIEEgZGljdCBtYXBwaW5nIG1vZHVsZSBuYW1lcyB0byB3ZWFrcmVmcyBvZiBfTW9kdWxlTG9jayBpbnN0YW5jZXMKQEAgLTIxNCw3ICsxODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmhhc19kZWFkbG9jaygpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgX0RlYWRsb2NrRXJyb3IoImRlYWRsb2NrIGRldGVjdGVkIGJ5ICVyIiAlIHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcignZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXInICUgc2VsZikKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWtldXAuYWNxdWlyZShGYWxzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndhaXRlcnMgKz0gMQogICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgYSByZWxlYXNlKCkgY2FsbApAQCAtMjI3LDcgKzIwMCw3IEBACiAgICAgICAgIHRpZCA9IF90aHJlYWQuZ2V0X2lkZW50KCkKICAgICAgICAgd2l0aCBzZWxmLmxvY2s6CiAgICAgICAgICAgICBpZiBzZWxmLm93bmVyICE9IHRpZDoKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb3VudCA+IDAKICAgICAgICAgICAgIHNlbGYuY291bnQgLT0gMQogICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgpAQCAtMjM3LDcgKzIxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FrZXVwLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9Nb2R1bGVMb2NrKCVyKSBhdCAlZCIgJSAoc2VsZi5uYW1lLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICdfTW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCiAKIAogY2xhc3MgX0R1bW15TW9kdWxlTG9jazoKQEAgLTI1NCwxMSArMjI3LDI4IEBACiAKICAgICBkZWYgcmVsZWFzZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIikKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgIHNlbGYuY291bnQgLT0gMQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9EdW1teU1vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19EdW1teU1vZHVsZUxvY2soeyFyfSkgYXQge30nLmZvcm1hdChzZWxmLm5hbWUsIGlkKHNlbGYpKQorCisKK2NsYXNzIF9Nb2R1bGVMb2NrTWFuYWdlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fbG9jayA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKHNlbGYuX25hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCisgICAgICAgIHNlbGYuX2xvY2suYWNxdWlyZSgpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fbG9jay5yZWxlYXNlKCkKIAogCiAjIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgZm9yIGNvbnN1bXB0aW9uIGJ5IFB5dGhvbi9pbXBvcnQuYy4KQEAgLTMxNSw5NSArMzA1LDEwOCBAQAogCiAjIEZpbmRlci9sb2FkZXIgdXRpbGl0eSBjb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSIiIk1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KLUl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCisjIE1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KKyMgSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMKKyMgVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQorIyBhIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKKyMgQXBwbGUgTVBXIGNvbXBpbGVyIHN3YXBzIHRoZWlyIHZhbHVlcywgYm90Y2hpbmcgc3RyaW5nIGNvbnN0YW50cy4KKyMKKyMgVGhlIG1hZ2ljIG51bWJlcnMgbXVzdCBiZSBzcGFjZWQgYXBhcnQgYXQgbGVhc3QgMiB2YWx1ZXMsIGFzIHRoZQorIyAtVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCisjIG9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgorIworIyBUaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgorIyBUaGUgY3VycmVudCB3b3JraW5nIHNjaGVtZSBpcyB0byBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlIGJ5CisjIDEwLgorIworIyBTdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCisjIG51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKKyMgdG8gcmVwcmVzZW50IHRoZSBtYWdpYyBudW1iZXIgaW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMuICBXaGVuIHlvdSBjaGFuZ2UKKyMgdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCisjIGNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKKyMgaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIGRpZmZlcmVudCB0aGFuIGFueXRoaW5nIGVsc2UKKyMgdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCisjIHdpdGggUHl0aG9uIDMuMmEwLgorIworIyBLbm93biB2YWx1ZXM6CisjICBQeXRob24gMS41OiAgIDIwMTIxCisjICBQeXRob24gMS41LjE6IDIwMTIxCisjICAgICBQeXRob24gMS41LjI6IDIwMTIxCisjICAgICBQeXRob24gMS42OiAgIDUwNDI4CisjICAgICBQeXRob24gMi4wOiAgIDUwODIzCisjICAgICBQeXRob24gMi4wLjE6IDUwODIzCisjICAgICBQeXRob24gMi4xOiAgIDYwMjAyCisjICAgICBQeXRob24gMi4xLjE6IDYwMjAyCisjICAgICBQeXRob24gMi4xLjI6IDYwMjAyCisjICAgICBQeXRob24gMi4yOiAgIDYwNzE3CisjICAgICBQeXRob24gMi4zYTA6IDYyMDExCisjICAgICBQeXRob24gMi4zYTA6IDYyMDIxCisjICAgICBQeXRob24gMi4zYTA6IDYyMDExICghKQorIyAgICAgUHl0aG9uIDIuNGEwOiA2MjA0MQorIyAgICAgUHl0aG9uIDIuNGEzOiA2MjA1MQorIyAgICAgUHl0aG9uIDIuNGIxOiA2MjA2MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA3MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTEgKHdpdGgpCisjICAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCisjICAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMTEgKGZpeCB3cm9uZyBjb2RlOiB4ICs9IHlpZWxkKQorIyAgICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQorIyAgICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQorIyAgICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCisjICAgICBQeXRob24gMi43YTA6IDYyMTcxIChvcHRpbWl6ZSBsaXN0IGNvbXByZWhlbnNpb25zL2NoYW5nZSBMSVNUX0FQUEVORCkKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxODEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjE5MSAoaW50cm9kdWNlIFNFVFVQX1dJVEgpCisjICAgICBQeXRob24gMi43YTAgIDYyMjAxIChpbnRyb2R1Y2UgQlVJTERfU0VUKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjIxMSAoaW50cm9kdWNlIE1BUF9BREQgYW5kIFNFVF9BREQpCisjICAgICBQeXRob24gMzAwMDogICAzMDAwCisjICAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCisjICAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCisjICAgICAgICAgICAgICAgICAgICAzMDMwIChhZGRlZCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycykKKyMgICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKKyMgICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKKyMgICAgICAgICAgICAgICAgICAgIDMwNjAgKFBFUCAzMTE1IG1ldGFjbGFzcyBzeW50YXgpCisjICAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCisjICAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQorIyAgICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCisjICAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCisjICAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCisjICAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgorIyAgICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCisjICAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKKyMgICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyMgICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmExOiAzMTcwIChhZGQgRFVQX1RPUF9UV08sIHJlbW92ZSBEVVBfVE9QWCBhbmQgUk9UX0ZPVVIpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQorIyAgICAgUHl0aG9uIDMuM2EwICAzMTkwIF9fY2xhc3NfXyBzdXBlciBjbG9zdXJlIGNoYW5nZWQKKyMgICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQorIyAgICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKKyMgICAgIFB5dGhvbiAzLjNhMSAgMzIyMCAoY2hhbmdlZCBQRVAgMzgwIGltcGxlbWVudGF0aW9uKQorIyAgICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI1MCAoZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0IGFyZ3VtZW50cyBiZWZvcmUKKyMgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMpCisjICAgICBQeXRob24gMy40YTEgIDMyNjAgKGFkZCBMT0FEX0NMQVNTREVSRUY7IGFsbG93IGxvY2FscyBvZiBjbGFzcyB0byBvdmVycmlkZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgdmFycykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI3MCAodmFyaW91cyB0d2Vha3MgdG8gdGhlIF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjgwIChyZW1vdmUgaW1wbGljaXQgY2xhc3MgYXJndW1lbnQpCisjICAgICBQeXRob24gMy40YTQgIDMyOTAgKGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIyAgICAgUHl0aG9uIDMuNGE0ICAzMzAwIChtb3JlIGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIworIyBNQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCisjIGxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5CisjIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgogCi1UaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCi1hIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKLUFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCi0KLVRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKLS1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KLW9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgotCi1UaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgotVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQotMTAuCi0KLVN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKLW51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKLXRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCi10aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKLWNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKLWl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCi10aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKLXdpdGggUHl0aG9uIDMuMmEwLgotCi1Lbm93biB2YWx1ZXM6Ci0gUHl0aG9uIDEuNTogICAyMDEyMQotIFB5dGhvbiAxLjUuMTogMjAxMjEKLSAgICBQeXRob24gMS41LjI6IDIwMTIxCi0gICAgUHl0aG9uIDEuNjogICA1MDQyOAotICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKLSAgICBQeXRob24gMi4wLjE6IDUwODIzCi0gICAgUHl0aG9uIDIuMTogICA2MDIwMgotICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKLSAgICBQeXRob24gMi4xLjI6IDYwMjAyCi0gICAgUHl0aG9uIDIuMjogICA2MDcxNwotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKLSAgICBQeXRob24gMi4zYTA6IDYyMDIxCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKLSAgICBQeXRob24gMi40YTA6IDYyMDQxCi0gICAgUHl0aG9uIDIuNGEzOiA2MjA1MQotICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKLSAgICBQeXRob24gMi41YTA6IDYyMDcxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQotICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKLSAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKLSAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKLSAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQotICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKLSAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQotICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCi0gICAgUHl0aG9uIDMwMDA6ICAgMzAwMAotICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKLSAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCi0gICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQotICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQotICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKLSAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQotICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKLSAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCi0gICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQotICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCi0gICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCi0gICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6Ci0gICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQotICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6Ci0gICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCi0gICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQotICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCi0gICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQotICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCi0gICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCi0gICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKLSAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKLSAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQotCi1NQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCi1sb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQotZHVlIHRvIHRoZSBhZGRpdGlvbiBvZiBuZXcgb3Bjb2RlcykuCi0KLSIiIgotX1JBV19NQUdJQ19OVU1CRVIgPSAzMjMwIHwgb3JkKCdccicpIDw8IDE2IHwgb3JkKCdcbicpIDw8IDI0Ci1fTUFHSUNfQllURVMgPSBieXRlcyhfUkFXX01BR0lDX05VTUJFUiA+PiBuICYgMHhmZiBmb3IgbiBpbiByYW5nZSgwLCAyNSwgOCkpCitNQUdJQ19OVU1CRVIgPSAoMzMwMCkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJworX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKIAogX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCiAKQEAgLTQ4MSw2ICs0ODQsMTggQEAKICAgICByZXR1cm4gc291cmNlX3BhdGggaWYgX3BhdGhfaXNmaWxlKHNvdXJjZV9wYXRoKSBlbHNlIGJ5dGVjb2RlX3BhdGgKIAogCitkZWYgX2NhbGNfbW9kZShwYXRoKToKKyAgICAiIiJDYWxjdWxhdGUgdGhlIG1vZGUgcGVybWlzc2lvbnMgZm9yIGEgYnl0ZWNvZGUgZmlsZS4iIiIKKyAgICB0cnk6CisgICAgICAgIG1vZGUgPSBfcGF0aF9zdGF0KHBhdGgpLnN0X21vZGUKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbW9kZSA9IDBvNjY2CisgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcworICAgICMgbGF0ZXIgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQtb25seSBvbiBXaW5kb3dzICgjNjA3NCkKKyAgICBtb2RlIHw9IDBvMjAwCisgICAgcmV0dXJuIG1vZGUKKworCiBkZWYgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlLCAqYXJncywgdmVyYm9zaXR5PTEpOgogICAgICIiIlByaW50IHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBpZiAtdi9QWVRIT05WRVJCT1NFIGlzIHR1cm5lZCBvbi4iIiIKICAgICBpZiBzeXMuZmxhZ3MudmVyYm9zZSA+PSB2ZXJib3NpdHk6CkBAIC00ODksODUgKzUwNCw2IEBACiAgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQogCiAKLWRlZiBzZXRfcGFja2FnZShmeG4pOgotICAgICIiIlNldCBfX3BhY2thZ2VfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgIF93cmFwKHNldF9wYWNrYWdlX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgotCi0KLWRlZiBzZXRfbG9hZGVyKGZ4bik6Ci0gICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKLSAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIHNldF9sb2FkZXJfd3JhcHBlcgotCi0KLWRlZiBtb2R1bGVfZm9yX2xvYWRlcihmeG4pOgotICAgICIiIkRlY29yYXRvciB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIgbW9kdWxlIGZvciBsb2FkZXJzLgotCi0gICAgVGhlIGRlY29yYXRlZCBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG1vZHVsZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgbW9kdWxlCi0gICAgbmFtZS4gVGhlIG1vZHVsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBmcm9tIHN5cy5tb2R1bGVzIGlmCi0gICAgaXQgYWxyZWFkeSBleGlzdHMgb3IgaXMgYSBuZXcgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGlzIG5ldywgdGhlbiBfX25hbWVfXwotICAgIGlzIHNldCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIG1ldGhvZCwgX19sb2FkZXJfXyBpcyBzZXQgdG8gc2VsZiwgYW5kCi0gICAgX19wYWNrYWdlX18gaXMgc2V0IGFjY29yZGluZ2x5IChpZiBzZWxmLmlzX3BhY2thZ2UoKSBpcyBkZWZpbmVkKSB3aWxsIGJlIHNldAotICAgIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiAoaWYgc2VsZi5pc19wYWNrYWdlKCkgZG9lcwotICAgIG5vdCB3b3JrIGZvciB0aGUgbW9kdWxlIGl0IHdpbGwgYmUgc2V0IHBvc3QtbG9hZCkuCi0KLSAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGUgZGVjb3JhdG9yIGNyZWF0ZWQgdGhlIG1vZHVsZSBpdCBpcwotICAgIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuCi0KLSAgICBUaGUgZGVjb3JhdG9yIGFzc3VtZXMgdGhhdCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRha2VzIHRoZSBtb2R1bGUgbmFtZSBhcwotICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCi0KLSAgICAiIiIKLSAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KGZ1bGxuYW1lKQotICAgICAgICBpc19yZWxvYWQgPSBtb2R1bGUgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCi0gICAgICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KLSAgICAgICAgICAgICMgaW5maW5pdGUgbG9vcC4KLSAgICAgICAgICAgIG1vZHVsZSA9IG5ld19tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcyB3cm9uZykKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIElmIF9fcGFja2FnZV9fIHdhcyBub3Qgc2V0IGFib3ZlLCBfX2ltcG9ydF9fKCkgd2lsbCBkbyBpdCBsYXRlci4KLSAgICAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbW9kdWxlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gRmFsc2UKLSAgICBfd3JhcChtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKLQotCiBkZWYgX2NoZWNrX25hbWUobWV0aG9kKToKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBiZWluZyByZXF1ZXN0ZWQgbWF0Y2hlcyB0aGUgb25lIHRoZQogICAgIGxvYWRlciBjYW4gaGFuZGxlLgpAQCAtNTgwLDcgKzUxNiw3IEBACiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKICAgICAgICAgZWxpZiBzZWxmLm5hbWUgIT0gbmFtZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJsb2FkZXIgY2Fubm90IGhhbmRsZSAlcyIgJSBuYW1lLCBuYW1lPW5hbWUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbG9hZGVyIGNhbm5vdCBoYW5kbGUgJXMnICUgbmFtZSwgbmFtZT1uYW1lKQogICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIG5hbWUsICphcmdzLCAqKmt3YXJncykKICAgICBfd3JhcChfY2hlY2tfbmFtZV93cmFwcGVyLCBtZXRob2QpCiAgICAgcmV0dXJuIF9jaGVja19uYW1lX3dyYXBwZXIKQEAgLTU5MCw3ICs1MjYsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBidWlsdC1pbi4iIiIKICAgICBkZWYgX3JlcXVpcmVzX2J1aWx0aW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlIi5mb3JtYXQoZnVsbG5hbWUpLAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyLCBmeG4pCkBAIC02MDEsNyArNTM3LDcgQEAKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoZSBuYW1lZCBtb2R1bGUgaXMgZnJvemVuLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBpZiBub3QgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInt9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIsIGZ4bikKQEAgLTYxNiwxMSArNTUyLDY1OSBAQAogICAgICMgcmV0dXJuIE5vbmUuCiAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAgICAgaWYgbG9hZGVyIGlzIE5vbmUgYW5kIGxlbihwb3J0aW9ucyk6Ci0gICAgICAgIG1zZyA9ICJOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSB7fTogbWlzc2luZyBfX2luaXRfXyIKKyAgICAgICAgbXNnID0gJ05vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fJwogICAgICAgICBfd2FybmluZ3Mud2Fybihtc2cuZm9ybWF0KHBvcnRpb25zWzBdKSwgSW1wb3J0V2FybmluZykKICAgICByZXR1cm4gbG9hZGVyCiAKIAorZGVmIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAiIiJMb2FkIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGludG8gc3lzLm1vZHVsZXMgYW5kIHJldHVybiBpdC4iIiIKKyAgICAjIFhYWCBEZXByZWNhdGlvbiBXYXJuaW5nIGhlcmUuLi4KKyAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgc2VsZikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCisKKworZGVmIF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgc291cmNlX3N0YXRzPU5vbmUsIG5hbWU9Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAiIiJWYWxpZGF0ZSB0aGUgaGVhZGVyIG9mIHRoZSBwYXNzZWQtaW4gYnl0ZWNvZGUgYWdhaW5zdCBzb3VyY2Vfc3RhdHMgKGlmCisgICAgZ2l2ZW4pIGFuZCByZXR1cm5pbmcgdGhlIGJ5dGVjb2RlIHRoYXQgY2FuIGJlIGNvbXBpbGVkIGJ5IGNvbXBpbGUoKS4KKworICAgIEFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgdG8gZW5oYW5jZSBlcnJvciByZXBvcnRpbmcuCisKKyAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdCBvciB0aGUgYnl0ZWNvZGUgaXMKKyAgICBmb3VuZCB0byBiZSBzdGFsZS4gRU9GRXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlIGRhdGEgaXMgZm91bmQgdG8gYmUKKyAgICB0cnVuY2F0ZWQuCisKKyAgICAiIiIKKyAgICBleGNfZGV0YWlscyA9IHt9CisgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ25hbWUnXSA9IG5hbWUKKyAgICBlbHNlOgorICAgICAgICAjIFRvIHByZXZlbnQgaGF2aW5nIHRvIG1ha2UgYWxsIG1lc3NhZ2VzIGhhdmUgYSBjb25kaXRpb25hbCBuYW1lLgorICAgICAgICBuYW1lID0gJzxieXRlY29kZT4nCisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ3BhdGgnXSA9IHBhdGgKKyAgICBtYWdpYyA9IGRhdGFbOjRdCisgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQorICAgIHJhd19zaXplID0gZGF0YVs4OjEyXQorICAgIGlmIG1hZ2ljICE9IE1BR0lDX05VTUJFUjoKKyAgICAgICAgbWVzc2FnZSA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBtYWdpYykKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgIGVsaWYgbGVuKHJhd190aW1lc3RhbXApICE9IDQ6CisgICAgICAgIG1lc3NhZ2UgPSAncmVhY2hlZCBFT0Ygd2hpbGUgcmVhZGluZyB0aW1lc3RhbXAgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHNpemUgb2Ygc291cmNlIGluIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCisgICAgaWYgc291cmNlX3N0YXRzIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgKipleGNfZGV0YWlscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX3NpemUgPSBzb3VyY2Vfc3RhdHNbJ3NpemUnXSAmIDB4RkZGRkZGRkYKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfc2l6ZSkgIT0gc291cmNlX3NpemU6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipleGNfZGV0YWlscykKKyAgICByZXR1cm4gZGF0YVsxMjpdCisKKworZGVmIF9jb21waWxlX2J5dGVjb2RlKGRhdGEsIG5hbWU9Tm9uZSwgYnl0ZWNvZGVfcGF0aD1Ob25lLCBzb3VyY2VfcGF0aD1Ob25lKToKKyAgICAiIiJDb21waWxlIGJ5dGVjb2RlIGFzIHJldHVybmVkIGJ5IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoKS4iIiIKKyAgICBjb2RlID0gbWFyc2hhbC5sb2FkcyhkYXRhKQorICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgX2NvZGVfdHlwZSk6CisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2ltcC5fZml4X2NvX2ZpbGVuYW1lKGNvZGUsIHNvdXJjZV9wYXRoKQorICAgICAgICByZXR1cm4gY29kZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdOb24tY29kZSBvYmplY3QgaW4geyFyfScuZm9ybWF0KGJ5dGVjb2RlX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKKworZGVmIF9jb2RlX3RvX2J5dGVjb2RlKGNvZGUsIG10aW1lPTAsIHNvdXJjZV9zaXplPTApOgorICAgICIiIkNvbXBpbGUgYSBjb2RlIG9iamVjdCBpbnRvIGJ5dGVjb2RlIGZvciB3cml0aW5nIG91dCB0byBhIGJ5dGUtY29tcGlsZWQKKyAgICBmaWxlLiIiIgorICAgIGRhdGEgPSBieXRlYXJyYXkoTUFHSUNfTlVNQkVSKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcobXRpbWUpKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcoc291cmNlX3NpemUpKQorICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZSkpCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpOgorICAgICIiIkRlY29kZSBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiB0aGUgc3RyaW5nLgorCisgICAgVW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCBpcyB1c2VkIGluIHRoZSBkZWNvZGluZy4KKyAgICAiIiIKKyAgICBpbXBvcnQgdG9rZW5pemUgICMgVG8gYXZvaWQgYm9vdHN0cmFwIGlzc3Vlcy4KKyAgICBzb3VyY2VfYnl0ZXNfcmVhZGxpbmUgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCisgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2Rpbmcoc291cmNlX2J5dGVzX3JlYWRsaW5lKQorICAgIG5ld2xpbmVfZGVjb2RlciA9IF9pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpCisgICAgcmV0dXJuIG5ld2xpbmVfZGVjb2Rlci5kZWNvZGUoc291cmNlX2J5dGVzLmRlY29kZShlbmNvZGluZ1swXSkpCisKKworIyBNb2R1bGUgc3BlY2lmaWNhdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX21vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgTW9kdWxlVHlwZV9fcmVwcl9fKCkuCisgICAgbG9hZGVyID0gZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ21vZHVsZV9yZXByJyk6CisgICAgICAgICMgWFhYIERlcHJlY2F0aW9uIFdhcm5pbmcgaGVyZS4uLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbG9hZGVyLm1vZHVsZV9yZXByKG1vZHVsZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIF9TcGVjTWV0aG9kcyhzcGVjKS5tb2R1bGVfcmVwcigpCisKKyAgICAjIFdlIGNvdWxkIHVzZSBtb2R1bGUuX19jbGFzc19fLl9fbmFtZV9fIGluc3RlYWQgb2YgJ21vZHVsZScgaW4gdGhlCisgICAgIyB2YXJpb3VzIHJlcHIgcGVybXV0YXRpb25zLgorICAgIHRyeToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbmFtZSA9ICc/JworICAgIHRyeToKKyAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUuX19maWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9ICh7IXJ9KT4nLmZvcm1hdChuYW1lLCBsb2FkZXIpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KG5hbWUsIGZpbGVuYW1lKQorCisKK2NsYXNzIF9pbnN0YWxsZWRfc2FmZWx5OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHNlbGYuX21vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLl9zcGVjID0gbW9kdWxlLl9fc3BlY19fCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKKyAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzCisgICAgICAgICMgd3JvbmcpCisgICAgICAgIHNlbGYuX3NwZWMuX2luaXRpYWxpemluZyA9IFRydWUKKyAgICAgICAgc3lzLm1vZHVsZXNbc2VsZi5fc3BlYy5uYW1lXSA9IHNlbGYuX21vZHVsZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IHNlbGYuX3NwZWMKKyAgICAgICAgICAgIGlmIGFueShhcmcgaXMgbm90IE5vbmUgZm9yIGFyZyBpbiBhcmdzKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2ltcG9ydCB7IXJ9ICMgeyFyfScsIHNwZWMubmFtZSwgc3BlYy5sb2FkZXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zcGVjLl9pbml0aWFsaXppbmcgPSBGYWxzZQorCisKK2NsYXNzIE1vZHVsZVNwZWM6CisgICAgIiIiVGhlIHNwZWNpZmljYXRpb24gZm9yIGEgbW9kdWxlLCB1c2VkIGZvciBsb2FkaW5nLgorCisgICAgQSBtb2R1bGUncyBzcGVjIGlzIHRoZSBzb3VyY2UgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb2R1bGUuICBGb3IKKyAgICBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlLCBpbmNsdWRpbmcgc291cmNlLCB1c2UgdGhlIHNwZWMncworICAgIGxvYWRlci4KKworICAgIGBuYW1lYCBpcyB0aGUgYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAgYGxvYWRlcmAgaXMgdGhlIGxvYWRlcgorICAgIHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4gIGBwYXJlbnRgIGlzIHRoZSBuYW1lIG9mIHRoZQorICAgIHBhY2thZ2UgdGhlIG1vZHVsZSBpcyBpbi4gIFRoZSBwYXJlbnQgaXMgZGVyaXZlZCBmcm9tIHRoZSBuYW1lLgorCisgICAgYGlzX3BhY2thZ2VgIGRldGVybWluZXMgaWYgdGhlIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgcGFja2FnZSBvcgorICAgIG5vdC4gIE9uIG1vZHVsZXMgdGhpcyBpcyByZWZsZWN0ZWQgYnkgdGhlIGBfX3BhdGhfX2AgYXR0cmlidXRlLgorCisgICAgYG9yaWdpbmAgaXMgdGhlIHNwZWNpZmljIGxvY2F0aW9uIHVzZWQgYnkgdGhlIGxvYWRlciBmcm9tIHdoaWNoIHRvCisgICAgbG9hZCB0aGUgbW9kdWxlLCBpZiB0aGF0IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gIFdoZW4gZmlsZW5hbWUgaXMKKyAgICBzZXQsIG9yaWdpbiB3aWxsIG1hdGNoLgorCisgICAgYGhhc19sb2NhdGlvbmAgaW5kaWNhdGVzIHRoYXQgYSBzcGVjJ3MgIm9yaWdpbiIgcmVmbGVjdHMgYSBsb2NhdGlvbi4KKyAgICBXaGVuIHRoaXMgaXMgVHJ1ZSwgYF9fZmlsZV9fYCBhdHRyaWJ1dGUgb2YgdGhlIG1vZHVsZSBpcyBzZXQuCisKKyAgICBgY2FjaGVkYCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLCBpZiBhbnkuICBJdAorICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBgX19jYWNoZWRfX2AgYXR0cmlidXRlLgorCisgICAgYHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zYCBpcyB0aGUgc2VxdWVuY2Ugb2YgcGF0aCBlbnRyaWVzIHRvCisgICAgc2VhcmNoIHdoZW4gaW1wb3J0aW5nIHN1Ym1vZHVsZXMuICBJZiBzZXQsIGlzX3BhY2thZ2Ugc2hvdWxkIGJlCisgICAgVHJ1ZS0tYW5kIEZhbHNlIG90aGVyd2lzZS4KKworICAgIFBhY2thZ2VzIGFyZSBzaW1wbHkgbW9kdWxlcyB0aGF0IChtYXkpIGhhdmUgc3VibW9kdWxlcy4gIElmIGEgc3BlYworICAgIGhhcyBhIG5vbi1Ob25lIHZhbHVlIGluIGBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc2AsIHRoZSBpbXBvcnQKKyAgICBzeXN0ZW0gd2lsbCBjb25zaWRlciBtb2R1bGVzIGxvYWRlZCBmcm9tIHRoZSBzcGVjIGFzIHBhY2thZ2VzLgorCisgICAgT25seSBmaW5kZXJzIChzZWUgaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlciBhbmQKKyAgICBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlcikgc2hvdWxkIG1vZGlmeSBNb2R1bGVTcGVjIGluc3RhbmNlcy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGxvYWRlcl9zdGF0ZT1Ob25lLAorICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubG9hZGVyID0gbG9hZGVyCisgICAgICAgIHNlbGYub3JpZ2luID0gb3JpZ2luCisgICAgICAgIHNlbGYubG9hZGVyX3N0YXRlID0gbG9hZGVyX3N0YXRlCisgICAgICAgIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbXSBpZiBpc19wYWNrYWdlIGVsc2UgTm9uZQorCisgICAgICAgICMgZmlsZS1sb2NhdGlvbiBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYuX3NldF9maWxlYXR0ciA9IEZhbHNlCisgICAgICAgIHNlbGYuX2NhY2hlZCA9IE5vbmUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXJncyA9IFsnbmFtZT17IXJ9Jy5mb3JtYXQoc2VsZi5uYW1lKSwKKyAgICAgICAgICAgICAgICAnbG9hZGVyPXshcn0nLmZvcm1hdChzZWxmLmxvYWRlcildCisgICAgICAgIGlmIHNlbGYub3JpZ2luIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJ29yaWdpbj17IXJ9Jy5mb3JtYXQoc2VsZi5vcmlnaW4pKQorICAgICAgICBpZiBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJ3N1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXt9JworICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKSkKKyAgICAgICAgcmV0dXJuICd7fSh7fSknLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJywgJy5qb2luKGFyZ3MpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNtc2wgPSBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5uYW1lID09IG90aGVyLm5hbWUgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGVyID09IG90aGVyLmxvYWRlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW4gPT0gb3RoZXIub3JpZ2luIGFuZAorICAgICAgICAgICAgICAgICAgICBzbXNsID09IG90aGVyLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlZCA9PSBvdGhlci5jYWNoZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFzX2xvY2F0aW9uID09IG90aGVyLmhhc19sb2NhdGlvbikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2FjaGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jYWNoZWQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYub3JpZ2luIGlzIG5vdCBOb25lIGFuZCBzZWxmLl9zZXRfZmlsZWF0dHI6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm9yaWdpbgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKFNPVVJDRV9TVUZGSVhFUykpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZWQgPSBjYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShCWVRFQ09ERV9TVUZGSVhFUykpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZWQgPSBmaWxlbmFtZQorICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkCisKKyAgICBAY2FjaGVkLnNldHRlcgorICAgIGRlZiBjYWNoZWQoc2VsZiwgY2FjaGVkKToKKyAgICAgICAgc2VsZi5fY2FjaGVkID0gY2FjaGVkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50KHNlbGYpOgorICAgICAgICAiIiJUaGUgbmFtZSBvZiB0aGUgbW9kdWxlJ3MgcGFyZW50LiIiIgorICAgICAgICBpZiBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhhc19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9maWxlYXR0cgorCisKK2RlZiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gdmFyaW91cyBsb2FkZXIgbWV0aG9kcy4iIiIKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICAgICAgc2VhcmNoID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKyAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zZWFyY2gpCisKKyAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBOb25lICAjIGFrYSwgdW5kZWZpbmVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBpc19wYWNrYWdlID0gRmFsc2UKKworICAgIHJldHVybiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1pc19wYWNrYWdlKQorCisKK19QT1BVTEFURSA9IG9iamVjdCgpCisKKworZGVmIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uPU5vbmUsICosIGxvYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPV9QT1BVTEFURSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gYSBmaWxlIGxvY2F0aW9uLgorCisgICAgVG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgc2V0CisgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgdG8gYSBsaXN0IG9mIGRpcmVjdG9yeSBwYXRocy4gIEFuCisgICAgZW1wdHkgbGlzdCBpcyBzdWZmaWNpZW50LCB0aG91Z2ggaXRzIG5vdCBvdGhlcndpc2UgdXNlZnVsIHRvIHRoZQorICAgIGltcG9ydCBzeXN0ZW0uCisKKyAgICBUaGUgbG9hZGVyIG11c3QgdGFrZSBhIHNwZWMgYXMgaXRzIG9ubHkgX19pbml0X18oKSBhcmcuCisKKyAgICAiIiIKKyAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAjIFRoZSBjYWxsZXIgbWF5IHNpbXBseSB3YW50IGEgcGFydGlhbGx5IHBvcHVsYXRlZCBsb2NhdGlvbi0KKyAgICAgICAgIyBvcmllbnRlZCBzcGVjLiAgU28gd2Ugc2V0IHRoZSBsb2NhdGlvbiB0byBhIGJvZ3VzIHZhbHVlIGFuZAorICAgICAgICAjIGZpbGwgaW4gYXMgbXVjaCBhcyB3ZSBjYW4uCisgICAgICAgIGxvY2F0aW9uID0gJzx1bmtub3duPicKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKKyAgICAgICAgICAgICMgRXhlY3V0aW9uTG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBJZiB0aGUgbG9jYXRpb24gaXMgb24gdGhlIGZpbGVzeXN0ZW0sIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LAorICAgICMgd2UgY291bGQgcmV0dXJuIE5vbmUgaGVyZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBsb2NhdGlvbiBpcyBub3QKKyAgICAjIHZhbGlkLiAgSG93ZXZlciwgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IG9mIHRlc3Rpbmcgc2luY2UgYW4KKyAgICAjIGluZGlyZWN0IGxvY2F0aW9uIChlLmcuIGEgemlwIGZpbGUgb3IgVVJMKSB3aWxsIGxvb2sgbGlrZSBhCisgICAgIyBub24tZXhpc3RlbnQgZmlsZSByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbS4KKworICAgIHNwZWMgPSBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPWxvY2F0aW9uKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgUGljayBhIGxvYWRlciBpZiBvbmUgd2Fzbid0IHByb3ZpZGVkLgorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICBmb3IgbG9hZGVyX2NsYXNzLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKKyAgICAgICAgICAgIGlmIGxvY2F0aW9uLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKG5hbWUsIGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHNwZWMubG9hZGVyID0gbG9hZGVyCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFNldCBzdWJtb2R1bGVfc2VhcmNoX3BhdGhzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgX1BPUFVMQVRFOgorICAgICAgICAjIENoZWNrIHRoZSBsb2FkZXIuCisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdCisgICAgZWxzZToKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9PSBbXToKKyAgICAgICAgaWYgbG9jYXRpb246CisgICAgICAgICAgICBkaXJuYW1lID0gX3BhdGhfc3BsaXQobG9jYXRpb24pWzBdCisgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLmFwcGVuZChkaXJuYW1lKQorCisgICAgcmV0dXJuIHNwZWMKKworCitkZWYgX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXI9Tm9uZSwgb3JpZ2luPU5vbmUpOgorICAgICMgVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgdXNlIGluIF9zZXR1cCgpLgorICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGxvYWRlciB3aWxsIHN0YXkgTm9uZS4KKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGxvY2F0aW9uID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBsb2NhdGlvbiA9IE5vbmUKKyAgICBpZiBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgaWYgbG9jYXRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcmlnaW4gPSBsb2FkZXIuX09SSUdJTgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9yaWdpbiA9IGxvY2F0aW9uCisgICAgdHJ5OgorICAgICAgICBjYWNoZWQgPSBtb2R1bGUuX19jYWNoZWRfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGVkID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBsaXN0KG1vZHVsZS5fX3BhdGhfXykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gTm9uZQorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IEZhbHNlIGlmIGxvY2F0aW9uIGlzIE5vbmUgZWxzZSBUcnVlCisgICAgc3BlYy5jYWNoZWQgPSBjYWNoZWQKKyAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICByZXR1cm4gc3BlYworCisKK2NsYXNzIF9TcGVjTWV0aG9kczoKKworICAgICIiIkNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHNwZWMgb2JqZWN0cyB0byBwcm92aWRlIHNwZWMtc3BlY2lmaWMKKyAgICBtZXRob2RzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICBzZWxmLnNwZWMgPSBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9tb2R1bGUoY2xzLCBtb2R1bGUpOgorICAgICAgICAiIiJDcmVhdGUgYSBzcGVjIGZyb20gYSBtb2R1bGUncyBhdHRyaWJ1dGVzLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzcGVjID0gX2ZpbmRfc3BlYyhtb2R1bGUuX19uYW1lX18pCisgICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihtb2R1bGUuX19uYW1lX18sIGxvYWRlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIobW9kdWxlLl9fbmFtZV9fLCBsb2FkZXIpCisgICAgICAgIHJldHVybiBjbHMoc3BlYykKKworICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXByIHRvIHVzZSBmb3IgdGhlIG1vZHVsZS4iIiIKKyAgICAgICAgIyBXZSBtb3N0bHkgcmVwbGljYXRlIF9tb2R1bGVfcmVwcigpIHVzaW5nIHRoZSBzcGVjIGF0dHJpYnV0ZXMuCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgbmFtZSA9ICc/JyBpZiBzcGVjLm5hbWUgaXMgTm9uZSBlbHNlIHNwZWMubmFtZQorICAgICAgICBpZiBzcGVjLm9yaWdpbiBpcyBOb25lOgorICAgICAgICAgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfT4nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoeyFyfSk+Jy5mb3JtYXQobmFtZSwgc3BlYy5sb2FkZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzcGVjLmhhc19sb2NhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQobmFtZSwgc3BlYy5vcmlnaW4pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9ICh7fSk+Jy5mb3JtYXQoc3BlYy5uYW1lLCBzcGVjLm9yaWdpbikKKworICAgIGRlZiBpbml0X21vZHVsZV9hdHRycyhzZWxmLCBtb2R1bGUsICosIF9vdmVycmlkZT1GYWxzZSwgX2ZvcmNlX25hbWU9VHJ1ZSk6CisgICAgICAgICIiIlNldCB0aGUgbW9kdWxlJ3MgYXR0cmlidXRlcy4KKworICAgICAgICBBbGwgbWlzc2luZyBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyB3aWxsIGJlIHNldC4gIEhlcmUKKyAgICAgICAgaXMgaG93IHRoZSBzcGVjIGF0dHJpYnV0ZXMgbWFwIG9udG8gdGhlIG1vZHVsZToKKworICAgICAgICBzcGVjLm5hbWUgLT4gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgIHNwZWMubG9hZGVyIC0+IG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIHNwZWMucGFyZW50IC0+IG1vZHVsZS5fX3BhY2thZ2VfXworICAgICAgICBzcGVjIC0+IG1vZHVsZS5fX3NwZWNfXworCisgICAgICAgIE9wdGlvbmFsOgorICAgICAgICBzcGVjLm9yaWdpbiAtPiBtb2R1bGUuX19maWxlX18gKGlmIHNwZWMuc2V0X2ZpbGVhdHRyIGlzIHRydWUpCisgICAgICAgIHNwZWMuY2FjaGVkIC0+IG1vZHVsZS5fX2NhY2hlZF9fIChpZiBfX2ZpbGVfXyBhbHNvIHNldCkKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyAtPiBtb2R1bGUuX19wYXRoX18gKGlmIHNldCkKKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworCisgICAgICAgICMgVGhlIHBhc3NlZCBpbiBtb2R1bGUgbWF5IGJlIG5vdCBzdXBwb3J0IGF0dHJpYnV0ZSBhc3NpZ25tZW50LAorICAgICAgICAjIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGRvbid0IHNldCB0aGUgYXR0cmlidXRlcy4KKworICAgICAgICAjIF9fbmFtZV9fCisgICAgICAgIGlmIChfb3ZlcnJpZGUgb3IgX2ZvcmNlX25hbWUgb3IKKyAgICAgICAgICAgIGdldGF0dHIobW9kdWxlLCAnX19uYW1lX18nLCBOb25lKSBpcyBOb25lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19uYW1lX18gPSBzcGVjLm5hbWUKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX2xvYWRlcl9fCisgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKKyAgICAgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGhhY2suCisgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gX05hbWVzcGFjZUxvYWRlci5fX25ld19fKF9OYW1lc3BhY2VMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5fcGF0aCA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fcGFja2FnZV9fCisgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLnBhcmVudAorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fc3BlY19fCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19wYXRoX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYXRoX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzcGVjLmhhc19sb2NhdGlvbjoKKyAgICAgICAgICAgICMgX19maWxlX18KKyAgICAgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNwZWMub3JpZ2luCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgX19jYWNoZWRfXworICAgICAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19jYWNoZWRfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc3BlYy5jYWNoZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc3BlYy5jYWNoZWQKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG1vZHVsZSB0byBiZSBsb2FkZWQuCisKKyAgICAgICAgVGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGFyZSBhbHNvIHNldCB3aXRoIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSB2YWx1ZXMgZnJvbSB0aGUgc3BlYy4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworICAgICAgICAjIFR5cGljYWxseSBsb2FkZXJzIHdpbGwgbm90IGltcGxlbWVudCBjcmVhdGVfbW9kdWxlKCkuCisgICAgICAgIGlmIGhhc2F0dHIoc3BlYy5sb2FkZXIsICdjcmVhdGVfbW9kdWxlJyk6CisgICAgICAgICAgICAjIElmIGNyZWF0ZV9tb2R1bGUoKSByZXR1cm5zIGBOb25lYCBpdCBtZWFucyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgIyBtb2R1bGUgY3JlYXRpb24gc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGV2ZXIgY2FsbGVkIGFzIHRoZSAnaW8nCisgICAgICAgICAgICAjIG1vZHVsZSBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZQorICAgICAgICAgICAgIyB0cmlnZ2VyIGFuIGluZmluaXRlIGxvb3AuCisgICAgICAgICAgICBtb2R1bGUgPSBfbmV3X21vZHVsZShzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgX2V4ZWMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRG8gZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gZXhlY3V0ZSB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBuYW1lc3BhY2Ugb2YgYG1vZHVsZWAgaXMgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mIGV4ZWN1dGlvbi4KKyAgICAgICAgVGhpcyBtZXRob2QgdXNlcyB0aGUgbG9hZGVyJ3MgYGV4ZWNfbW9kdWxlKClgIG1ldGhvZC4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAjIFVzZWQgYnkgaW1wb3J0bGliLnJlbG9hZCgpIGFuZCBfbG9hZF9tb2R1bGVfc2hpbSgpLgorICAgIGRlZiBleGVjKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIHNwZWMgaW4gYW4gZXhpc3RpbmcgbW9kdWxlJ3MgbmFtZXNwYWNlLiIiIgorICAgICAgICBuYW1lID0gc2VsZi5zcGVjLm5hbWUKKyAgICAgICAgX2ltcC5hY3F1aXJlX2xvY2soKQorICAgICAgICB3aXRoIF9Nb2R1bGVMb2NrTWFuYWdlcihuYW1lKToKKyAgICAgICAgICAgIGlmIHN5cy5tb2R1bGVzLmdldChuYW1lKSBpcyBub3QgbW9kdWxlOgorICAgICAgICAgICAgICAgIG1zZyA9ICdtb2R1bGUgeyFyfSBub3QgaW4gc3lzLm1vZHVsZXMnLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5zcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbWlzc2luZyBsb2FkZXInLCBuYW1lPXNlbGYuc3BlYy5uYW1lKQorICAgICAgICAgICAgICAgICMgbmFtZXNwYWNlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSwgX292ZXJyaWRlPVRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUsIF9vdmVycmlkZT1UcnVlKQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5zcGVjLmxvYWRlciwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgICAgICAgICAgIyBYWFggRGVwcmVjYXRpb25XYXJuaW5nIGdvZXMgaGVyZS4uLgorICAgICAgICAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIF9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoc2VsZik6CisgICAgICAgICMgWFhYIERlcHJlY2F0aW9uV2FybmluZyBnb2VzIGhlcmUuLi4KKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworICAgICAgICAjIFRoZSBtb2R1bGUgbXVzdCBiZSBpbiBzeXMubW9kdWxlcyEKKyAgICAgICAgc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBtb2R1bGUuX19wYXRoX18gbWF5IG5vdCBsaW5lIHVwIHdpdGgKKyAgICAgICAgICAgICAgICAjIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9wYXRocywgd2UgY2FuJ3QgbmVjZXNzYXJpbHkgcmVseQorICAgICAgICAgICAgICAgICMgb24gc3BlYy5wYXJlbnQgaGVyZS4KKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fc3BlY19fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICAjIFhYWCBJZiB3ZSBkb24ndCBlbmQgdXAgdXNpbmcgdGhpcyBmb3IgcHl0aG9ucnVuLmMvcnVucHksIHdlIHNob3VsZAorICAgICMgICAgIGdldCByaWQgb2YgaXQuCisgICAgZGVmIF9sb2FkX2V4aXN0aW5nKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkV4ZWMgdGhlIHNwZWMnZWQgbW9kdWxlIGludG8gYW4gZXhpc3RpbmcgbW9kdWxlJ3MgbmFtZXNwYWNlLiIiIgorICAgICAgICAjIEZvciB1c2UgYnkgcnVucHkuCisgICAgICAgIHdpdGggX2luc3RhbGxlZF9zYWZlbHkobW9kdWxlKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBsb2FkZWQKKworICAgIGRlZiBfbG9hZF91bmxvY2tlZChzZWxmKToKKyAgICAgICAgIyBBIGhlbHBlciBmb3IgZGlyZWN0IHVzZSBieSB0aGUgaW1wb3J0IHN5c3RlbS4KKyAgICAgICAgaWYgc2VsZi5zcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbm90IGEgbmFtZXNwYWNlIHBhY2thZ2UKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoKQorCisgICAgICAgIG1vZHVsZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgd2l0aCBfaW5zdGFsbGVkX3NhZmVseShtb2R1bGUpOgorICAgICAgICAgICAgaWYgc2VsZi5zcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbWlzc2luZyBsb2FkZXInLCBuYW1lPXNlbGYuc3BlYy5uYW1lKQorICAgICAgICAgICAgICAgICMgQSBuYW1lc3BhY2UgcGFja2FnZSBzbyBkbyBub3RoaW5nLgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjKG1vZHVsZSkKKworICAgICAgICAjIFdlIGRvbid0IGVuc3VyZSB0aGF0IHRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBnZXQKKyAgICAgICAgIyBzZXQgaW4gdGhlIHN5cy5tb2R1bGVzIHJlcGxhY2VtZW50IGNhc2UuICBTdWNoIG1vZHVsZXMgYXJlIG9uCisgICAgICAgICMgdGhlaXIgb3duLgorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAjIEEgbWV0aG9kIHVzZWQgZHVyaW5nIHRlc3Rpbmcgb2YgX2xvYWRfdW5sb2NrZWQoKSBhbmQgYnkKKyAgICAjIF9sb2FkX21vZHVsZV9zaGltKCkuCisgICAgZGVmIGxvYWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0LCBsb2FkZWQgYnkgdGhlIHNwZWMncyBsb2FkZXIuCisKKyAgICAgICAgVGhlIG1vZHVsZSBpcyBub3QgYWRkZWQgdG8gaXRzIHBhcmVudC4KKworICAgICAgICBJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCB0aGF0IGV4aXN0aW5nIG1vZHVsZSBnZXRzCisgICAgICAgIGNsb2JiZXJlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgX2ltcC5hY3F1aXJlX2xvY2soKQorICAgICAgICB3aXRoIF9Nb2R1bGVMb2NrTWFuYWdlcihzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF91bmxvY2tlZCgpCiAKIAogIyBMb2FkZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNjM0LDkgKzEyMTgsMTkgQEAKIAogICAgICIiIgogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBtb2R1bGVfcmVwcihtb2R1bGUpOgorICAgICAgICAjIFhYWCBkZXByZWNhdGUKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKGJ1aWx0LWluKT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbW9kdWxlX3JlcHIoY2xzLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAoYnVpbHQtaW4pPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgX2ltcC5pc19idWlsdGluKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBjbHMsIG9yaWdpbj0nYnVpbHQtaW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgpAQCAtNjQ1LDIzICsxMjM5LDI2IEBACiAgICAgICAgIElmICdwYXRoJyBpcyBldmVyIHNwZWNpZmllZCB0aGVuIHRoZSBzZWFyY2ggaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gY2xzIGlmIF9pbXAuaXNfYnVpbHRpbihmdWxsbmFtZSkgZWxzZSBOb25lCisgICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIgaWYgc3BlYyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBuYW1lID0gc3BlYy5uYW1lCisgICAgICAgIGlmIG5vdCBfaW1wLmlzX2J1aWx0aW4obmFtZSk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUnLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfYnVpbHRpbiwgbmFtZSkKKyAgICAgICAgIyBIYXZlIHRvIG1hbnVhbGx5IGluaXRpYWxpemUgYXR0cmlidXRlcyBzaW5jZSBpbml0X2J1aWx0aW4oKSBpcyBub3QKKyAgICAgICAgIyBnb2luZyB0byBkbyBpdCBmb3IgdXMuCisgICAgICAgICMgWFhYOiBDcmVhdGUgX2ltcC5leGVjX2J1aWx0aW4obW9kdWxlKQorICAgICAgICBfU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMoc3lzLm1vZHVsZXNbbmFtZV0pCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgotICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oY2xzLCBmdWxsbmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgpAQCAtNjc5LDYgKzEyNzYsNyBAQAogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBpc19wYWNrYWdlKGNscywgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gRmFsc2UgYXMgYnVpbHQtaW4gbW9kdWxlcyBhcmUgbmV2ZXIgcGFja2FnZXMuIiIiCisgICAgICAgICMgWFhYIERlcHJlY2F0aW9uV2FybmluZyBoZXJlLi4uCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAKQEAgLTY5MSwzMSArMTI4OSwzNiBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG0pOgorICAgICAgICAjIFhYWCBkZXByZWNhdGUKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKGZyb3plbik+Jy5mb3JtYXQobS5fX25hbWVfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG0pOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAoZnJvemVuKT4iLmZvcm1hdChtLl9fbmFtZV9fKQorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBjbHMsIG9yaWdpbj0nZnJvemVuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuIiIiCiAgICAgICAgIHJldHVybiBjbHMgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpIGVsc2UgTm9uZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleGVjX21vZHVsZShtb2R1bGUpOgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fc3BlY19fLm5hbWUKKyAgICAgICAgaWYgbm90IF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgZnJvemVuIG1vZHVsZScuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgICAgICBjb2RlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmdldF9mcm96ZW5fb2JqZWN0LCBuYW1lKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCi0gICAgQF9yZXF1aXJlc19mcm96ZW4KICAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkxvYWQgYSBmcm96ZW4gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfZnJvemVuLCBmdWxsbmFtZSkKLSAgICAgICAgICAgICMgTGV0IG91ciBvd24gbW9kdWxlX3JlcHIoKSBtZXRob2QgcHJvZHVjZSBhIHN1aXRhYmxlIHJlcHIuCi0gICAgICAgICAgICBkZWwgbS5fX2ZpbGVfXwotICAgICAgICAgICAgcmV0dXJuIG0KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKGNscywgZnVsbG5hbWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2Zyb3plbgpAQCAtNzM4LDIyICsxMzQxLDIxIEBACiAKIGNsYXNzIFdpbmRvd3NSZWdpc3RyeUZpbmRlcjoKIAotICAgICIiIk1ldGEgcGF0aCBmaW5kZXIgZm9yIG1vZHVsZXMgZGVjbGFyZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuCi0gICAgIiIiCisgICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4iIiIKIAogICAgIFJFR0lTVFJZX0tFWSA9ICgKLSAgICAgICAgIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0iCi0gICAgICAgICJcXE1vZHVsZXNcXHtmdWxsbmFtZX0iKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfScpCiAgICAgUkVHSVNUUllfS0VZX0RFQlVHID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWciKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWcnKQogICAgIERFQlVHX0JVSUxEID0gRmFsc2UgICMgQ2hhbmdlZCBpbiBfc2V0dXAoKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9vcGVuX3JlZ2lzdHJ5KGNscywga2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORSwga2V5KQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC03NjYsMjQgKzEzNjgsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbj1zeXMudmVyc2lvbls6M10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggY2xzLl9vcGVuX3JlZ2lzdHJ5KGtleSkgYXMgaGtleToKLSAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAiIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAnJykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gZmlsZXBhdGgKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIG1vZHVsZSBuYW1lZCBpbiB0aGUgcmVnaXN0cnkuIiIiCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIyBYWFggdW50ZXN0ZWQhIE5lZWQgYSBXaW5kb3dzIHBlcnNvbiB0byB3cml0ZSB0ZXN0cyAob3RoZXJ3aXNlIG1vY2sgb3V0IGFwcHJvcHJpYXRlbHkpCiAgICAgICAgIGZpbGVwYXRoID0gY2xzLl9zZWFyY2hfcmVnaXN0cnkoZnVsbG5hbWUpCiAgICAgICAgIGlmIGZpbGVwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfb3Muc3RhdChmaWxlcGF0aCkKKyAgICAgICAgICAgIF9wYXRoX3N0YXQoZmlsZXBhdGgpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZm9yIGxvYWRlciwgc3VmZml4ZXMgaW4gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCk6CiAgICAgICAgICAgICBpZiBmaWxlcGF0aC5lbmRzd2l0aCh0dXBsZShzdWZmaXhlcykpOgotICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIoZnVsbG5hbWUsIGZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBsb2FkZXIoZnVsbG5hbWUsIGZpbGVwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49ZmlsZXBhdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJGaW5kIG1vZHVsZSBuYW1lZCBpbiB0aGUgcmVnaXN0cnkuIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBfTG9hZGVyQmFzaWNzOgpAQCAtNzkxLDYgKzE0MDQsNyBAQAogICAgICIiIkJhc2UgY2xhc3Mgb2YgY29tbW9uIGNvZGUgbmVlZGVkIGJ5IGJvdGggU291cmNlTG9hZGVyIGFuZAogICAgIFNvdXJjZWxlc3NGaWxlTG9hZGVyLiIiIgogCisgICAgIyBYWFggZGVwcmVjYXRlPwogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5pc19wYWNrYWdlIGJ5IGNoZWNraW5nIGlmCiAgICAgICAgIHRoZSBwYXRoIHJldHVybmVkIGJ5IGdldF9maWxlbmFtZSBoYXMgYSBmaWxlbmFtZSBvZiAnX19pbml0X18ucHknLiIiIgpAQCAtNzk5LDc0ICsxNDEzLDE1IEBACiAgICAgICAgIHRhaWxfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICByZXR1cm4gZmlsZW5hbWVfYmFzZSA9PSAnX19pbml0X18nIGFuZCB0YWlsX25hbWUgIT0gJ19faW5pdF9fJwogCi0gICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBieXRlY29kZV9wYXRoLCBzb3VyY2Vfc3RhdHMpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYwotICAgICAgICBudW1iZXIsIHRpbWVzdGFtcCBhbmQgc291cmNlIHNpemUgYWxvbmcgdGhlIHdheS4KKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCisgICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQogCi0gICAgICAgIElmIHNvdXJjZV9zdGF0cyBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgotCi0gICAgICAgICIiIgotICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgIGlmIG1hZ2ljICE9IF9NQUdJQ19CWVRFUzoKLSAgICAgICAgICAgIG1zZyA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChmdWxsbmFtZSwgbWFnaWMpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1zZykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgdGltZXN0YW1wIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHNpemUgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KLSAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCi0gICAgICAgIHJldHVybiBkYXRhWzEyOl0KLQotICAgIEBtb2R1bGVfZm9yX2xvYWRlcgotICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKLSAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKLSAgICAgICAgbG9hZGluZy4iIiIKLSAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgaWYgbm90IHNvdXJjZWxlc3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2xvYWRfbW9kdWxlX3NoaW0KIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArMTQyOSwxMCBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgcmV0dXJuaW5nIGEgbWV0YWRhdGEgZGljdCBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCkBAIC04ODYsNiArMTQ0Myw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgdGhlIGxvYWRlciB0byByZWFkIGJ5dGVjb2RlIGZpbGVzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKQEAgLTkwMywzMiArMTQ2MSwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzE0OTgsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxNTMzLDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAxNyw3ICsxNTQ4LDkgQEAKICAgICBAX2NoZWNrX25hbWUKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGEgbW9kdWxlIGZyb20gYSBmaWxlLiIiIgotICAgICAgICAjIElzc3VlICMxNDg1NzogQXZvaWQgdGhlIHplcm8tYXJndW1lbnQgZm9ybSBzbyB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBUaGUgb25seSByZWFzb24gZm9yIHRoaXMgbWV0aG9kIGlzIGZvciB0aGUgbmFtZSBjaGVjay4KKworICAgICAgICAjIElzc3VlICMxNDg1NzogQXZvaWQgdGhlIHplcm8tYXJndW1lbnQgZm9ybSBvZiBzdXBlciBzbyB0aGUgaW1wbGVtZW50YXRpb24KICAgICAgICAgIyBvZiB0aGF0IGZvcm0gY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBicmVha2luZyB0aGUgZnJvemVuIG1vZHVsZQogICAgICAgICByZXR1cm4gc3VwZXIoRmlsZUxvYWRlciwgc2VsZikubG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTEwMzgsMTggKzE1NzEsMTIgQEAKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG1ldGFkYXRhIGZvciB0aGUgcGF0aC4iIiIKLSAgICAgICAgc3QgPSBfb3Muc3RhdChwYXRoKQorICAgICAgICBzdCA9IF9wYXRoX3N0YXQocGF0aCkKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzdC5zdF9tdGltZSwgJ3NpemUnOiBzdC5zdF9zaXplfQogCiAgICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgYnl0ZWNvZGVfcGF0aCwgZGF0YSk6CiAgICAgICAgICMgQWRhcHQgYmV0d2VlbiB0aGUgdHdvIEFQSXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kZSA9IF9vcy5zdGF0KHNvdXJjZV9wYXRoKS5zdF9tb2RlCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgbW9kZSA9IDBvNjY2Ci0gICAgICAgICMgV2UgYWx3YXlzIGVuc3VyZSB3cml0ZSBhY2Nlc3Mgc28gd2UgY2FuIHVwZGF0ZSBjYWNoZWQgZmlsZXMKLSAgICAgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQotICAgICAgICBtb2RlIHw9IDBvMjAwCisgICAgICAgIG1vZGUgPSBfY2FsY19tb2RlKHNvdXJjZV9wYXRoKQogICAgICAgICByZXR1cm4gc2VsZi5zZXRfZGF0YShieXRlY29kZV9wYXRoLCBkYXRhLCBfbW9kZT1tb2RlKQogCiAgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEsICosIF9tb2RlPTBvNjY2KToKQEAgLTEwODUsMjAgKzE2MTIsMTEgQEAKIAogICAgICIiIkxvYWRlciB3aGljaCBoYW5kbGVzIHNvdXJjZWxlc3MgZmlsZSBpbXBvcnRzLiIiIgogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzb3VyY2VsZXNzPVRydWUpCi0KICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLCBwYXRoLCBOb25lKQotICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmb3VuZCwgX2NvZGVfdHlwZSk6Ci0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBwYXRoKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm9uLWNvZGUgb2JqZWN0IGluIHt9Ii5mb3JtYXQocGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPXBhdGgpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsIGJ5dGVjb2RlX3BhdGg9cGF0aCkKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCkBAIC0xMTIxLDIzICsxNjM5LDIyIEBACiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICMgWFhYIGNyZWF0ZSBfaW1wLmV4ZWNfZHluYW1pYygpCisgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZnVsbG5hbWUgPSBzcGVjLm5hbWUKKyAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmxvYWRfZHluYW1pYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIHNlbGYucGF0aCkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQorICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCisgICAgICAgIF9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAjIFhYWCBkZXByZWNhdGUKICAgICBAX2NoZWNrX25hbWUKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkxvYWQgYW4gZXh0ZW5zaW9uIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmxvYWRfZHluYW1pYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIHNlbGYucGF0aCkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2V4dGVuc2lvbiBtb2R1bGUgbG9hZGVkIGZyb20geyFyfScsIHNlbGYucGF0aCkKLSAgICAgICAgICAgIGlmIHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkgYW5kIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCi0gICAgICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSkKIAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgpAQCAtMTE1Myw2ICsxNjcwLDExIEBACiAgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKIAogY2xhc3MgX05hbWVzcGFjZVBhdGg6CiAgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCkBAIC0xMTg1LDExICsxNzA3LDEyIEBACiAgICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCiAgICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKICAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIGxvYWRlciwgbmV3X3BhdGggPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKICAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQogICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IG5ld19wYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCkBAIC0xMjAwLDcgKzE3MjMsNyBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX05hbWVzcGFjZVBhdGgoeyFyfSkiLmZvcm1hdChzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gJ19OYW1lc3BhY2VQYXRoKHshcn0pJy5mb3JtYXQoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuX3JlY2FsY3VsYXRlKCkKQEAgLTEyMDksMjAgKzE3MzIsMzAgQEAKICAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKIAogCi1jbGFzcyBOYW1lc3BhY2VMb2FkZXI6CisjIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCitjbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6CiAgICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKIAorICAgICMgWFhYIERlcHJlY2F0ZQogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChuYW1lc3BhY2UpPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKG5hbWVzcGFjZSk+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQogCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBjb21waWxlKCcnLCAnPHN0cmluZz4nLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorCisgICAgIyBYWFggRGVwcmVjYXRlCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCiAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ25hbWVzcGFjZSBtb2R1bGUgbG9hZGVkIHdpdGggcGF0aCB7IXJ9Jywgc2VsZi5fcGF0aCkKLSAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc2VsZi5fcGF0aAotICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHJldHVybiBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSkKIAogCiAjIEZpbmRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjY1LDcgKzE3OTgsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBpZiBwYXRoID09ICcnOgotICAgICAgICAgICAgcGF0aCA9ICcuJworICAgICAgICAgICAgcGF0aCA9IF9vcy5nZXRjd2QoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmaW5kZXIgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CkBAIC0xMjc0LDcgKzE4MDcsMjAgQEAKICAgICAgICAgcmV0dXJuIGZpbmRlcgogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9nZXRfbG9hZGVyKGNscywgZnVsbG5hbWUsIHBhdGgpOgorICAgIGRlZiBfbGVnYWN5X2dldF9zcGVjKGNscywgZnVsbG5hbWUsIGZpbmRlcik6CisgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9sb2FkZXInKToKKyAgICAgICAgICAgIGxvYWRlciwgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgICAgICBwb3J0aW9ucyA9IE5vbmUKKyAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcikKKyAgICAgICAgc3BlYyA9IE1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBwb3J0aW9ucworICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZXRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CiAgICAgICAgICIiIkZpbmQgdGhlIGxvYWRlciBvciBuYW1lc3BhY2VfcGF0aCBmb3IgdGhpcyBtb2R1bGUvcGFja2FnZSBuYW1lLiIiIgogICAgICAgICAjIElmIHRoaXMgZW5kcyB1cCBiZWluZyBhIG5hbWVzcGFjZSBwYWNrYWdlLCBuYW1lc3BhY2VfcGF0aCBpcwogICAgICAgICAjICB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdpbGwgYmVjb21lIGl0cyBfX3BhdGhfXwpAQCAtMTI4NCwzOCArMTgzMCw1OCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBmaW5kZXIgPSBjbHMuX3BhdGhfaW1wb3J0ZXJfY2FjaGUoZW50cnkpCiAgICAgICAgICAgICBpZiBmaW5kZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX2xvYWRlcicpOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBmaW5kZXIuZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IFtdCi0gICAgICAgICAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGEgbG9hZGVyOiByZXR1cm4gaXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBjbHMuX2xlZ2FjeV9nZXRfc3BlYyhmdWxsbmFtZSwgZmluZGVyKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBwb3J0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBtaXNzaW5nIGxvYWRlcicpCiAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHBvc3NpYmx5IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4KICAgICAgICAgICAgICAgICAjICBSZW1lbWJlciB0aGVzZSBwYXRoIGVudHJpZXMgKGlmIGFueSkgZm9yIHdoZW4gd2UKICAgICAgICAgICAgICAgICAjICBjcmVhdGUgYSBuYW1lc3BhY2UgcGFja2FnZSwgYW5kIGNvbnRpbnVlIGl0ZXJhdGluZwogICAgICAgICAgICAgICAgICMgIG9uIHBhdGguCiAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGguZXh0ZW5kKHBvcnRpb25zKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgcmV0dXJuIHNwZWMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICBwYXRoID0gc3lzLnBhdGgKLSAgICAgICAgbG9hZGVyLCBuYW1lc3BhY2VfcGF0aCA9IGNscy5fZ2V0X2xvYWRlcihmdWxsbmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgotICAgICAgICBlbHNlOgorICAgICAgICBzcGVjID0gY2xzLl9nZXRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0KQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aCA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9wYXRoOgogICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYXQgbGVhc3Qgb25lIG5hbWVzcGFjZSBwYXRoLiAgUmV0dXJuIGEKLSAgICAgICAgICAgICAgICAjICBsb2FkZXIgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVzcGFjZUxvYWRlcihmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X2xvYWRlcikKKyAgICAgICAgICAgICAgICAjICBzcGVjIHdoaWNoIGNhbiBjcmVhdGUgdGhlIG5hbWVzcGFjZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIHNwZWMub3JpZ2luID0gJ25hbWVzcGFjZScKKyAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gX05hbWVzcGFjZVBhdGgoZnVsbG5hbWUsIG5hbWVzcGFjZV9wYXRoLCBjbHMuX2dldF9zcGVjKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgorICAgICAgICAjIFhYWCBEZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogCiBjbGFzcyBGaWxlRmluZGVyOgpAQCAtMTM1MCwxMCArMTkxNiwyOCBAQAogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgb3IgdGhlIG5hbWVzcGFjZQogICAgICAgICBwYWNrYWdlIHBvcnRpb25zLiBSZXR1cm5zIChsb2FkZXIsIGxpc3Qtb2YtcG9ydGlvbnMpLiIiIgorICAgICAgICBzcGVjID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIsIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KKworICAgIGRlZiBfZ2V0X3NwZWMoc2VsZiwgbG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgcGF0aCwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIHRhcmdldCk6CisgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0X3NwZWMgPSBsb2FkZXIuX2dldF9zcGVjCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihmdWxsbmFtZSwgcGF0aCwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBnZXRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIHRhcmdldCkKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCisgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuIiIiCiAgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCiAgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG10aW1lID0gX29zLnN0YXQoc2VsZi5wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbXRpbWUgPSAtMQogICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgpAQCAtMTM2OSwzMyArMTk1MywzNCBAQAogICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCiAgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKICAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKLSAgICAgICAgICAgIGlmIF9wYXRoX2lzZGlyKGJhc2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgW2Jhc2VfcGF0aF0sIHRhcmdldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBhIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gX3BhdGhfaXNkaXIoYmFzZV9wYXRoKQogICAgICAgICAjIENoZWNrIGZvciBhIGZpbGUgdy8gYSBwcm9wZXIgc3VmZml4IGV4aXN0cy4KLSAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgogICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlICsgc3VmZml4KQogICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgndHJ5aW5nIHt9Jy5mb3JtYXQoZnVsbF9wYXRoKSwgdmVyYm9zaXR5PTIpCiAgICAgICAgICAgICBpZiBjYWNoZV9tb2R1bGUgKyBzdWZmaXggaW4gY2FjaGU6CiAgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgTm9uZSwgdGFyZ2V0KQogICAgICAgICBpZiBpc19uYW1lc3BhY2U6CiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdwb3NzaWJsZSBuYW1lc3BhY2UgZm9yIHt9Jy5mb3JtYXQoYmFzZV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgW2Jhc2VfcGF0aF0pCi0gICAgICAgIHJldHVybiAoTm9uZSwgW10pCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbYmFzZV9wYXRoXQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZmlsbF9jYWNoZShzZWxmKToKICAgICAgICAgIiIiRmlsbCB0aGUgY2FjaGUgb2YgcG90ZW50aWFsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGZvciB0aGlzIGRpcmVjdG9yeS4iIiIKICAgICAgICAgcGF0aCA9IHNlbGYucGF0aAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGgpCisgICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGggb3IgX29zLmdldGN3ZCgpKQogICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IsIE5vdEFEaXJlY3RvcnlFcnJvcik6CiAgICAgICAgICAgICAjIERpcmVjdG9yeSBoYXMgZWl0aGVyIGJlZW4gcmVtb3ZlZCwgdHVybmVkIGludG8gYSBmaWxlLCBvciBtYWRlCiAgICAgICAgICAgICAjIHVucmVhZGFibGUuCkBAIC0xNDIwLDcgKzIwMDUsNyBAQAogICAgICAgICAgICAgICAgIGxvd2VyX3N1ZmZpeF9jb250ZW50cy5hZGQobmV3X25hbWUpCiAgICAgICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gbG93ZXJfc3VmZml4X2NvbnRlbnRzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyk6Ci0gICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoZm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHMpCisgICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSB7Zm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHN9CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcGF0aF9ob29rKGNscywgKmxvYWRlcl9kZXRhaWxzKToKQEAgLTE0MzUsMTMgKzIwMjAsMTMgQEAKICAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKICAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgogICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQiLCBwYXRoPXBhdGgpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ29ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCcsIHBhdGg9cGF0aCkKICAgICAgICAgICAgIHJldHVybiBjbHMocGF0aCwgKmxvYWRlcl9kZXRhaWxzKQogCiAgICAgICAgIHJldHVybiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJGaWxlRmluZGVyKCVyKSIgJSAoc2VsZi5wYXRoLCkKKyAgICAgICAgcmV0dXJuICdGaWxlRmluZGVyKHshcn0pJy5mb3JtYXQoc2VsZi5wYXRoKQogCiAKICMgSW1wb3J0IGl0c2VsZiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE0NjgsMTkgKzIwNTMsNDMgQEAKICAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQoYmFzZSwgbmFtZSkgaWYgbmFtZSBlbHNlIGJhc2UKIAogCi1kZWYgX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpOgorZGVmIF9maW5kX3NwZWMobmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgogICAgICIiIkZpbmQgYSBtb2R1bGUncyBsb2FkZXIuIiIiCiAgICAgaWYgbm90IHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIF93YXJuaW5ncy53YXJuKCdzeXMubWV0YV9wYXRoIGlzIGVtcHR5JywgSW1wb3J0V2FybmluZykKKyAgICAjIFdlIGNoZWNrIHN5cy5tb2R1bGVzIGhlcmUgZm9yIHRoZSByZWxvYWQgY2FzZS4gIFdoaWxlIGEgcGFzc2VkLWluCisgICAgIyB0YXJnZXQgd2lsbCB1c3VhbGx5IGluZGljYXRlIGEgcmVsb2FkIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSwgd2hlcmVhcworICAgICMgc3lzLm1vZHVsZXMgcHJvdmlkZXMgb25lLgorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKICAgICBmb3IgZmluZGVyIGluIHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIHdpdGggX0ltcG9ydExvY2tDb250ZXh0KCk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbmRfc3BlYyA9IGZpbmRlci5maW5kX3NwZWMKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fCisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCisgICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhlIGZvdW5kIHNwZWMgc2luY2UgdGhhdCBpcyB0aGUgb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSB3b3VsZCBoYXZlIHVzZWQgaWYgdGhlIHBhcmVudCBtb2R1bGUgaGFkbid0CisgICAgICAgICAgICAgICAgICAgICMgYmVhdGVuIHVzIHRvIHRoZSBwdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBfX3NwZWNfXyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3NwZWNfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBOb25lCiAKQEAgLTE0ODgsMjEgKzIwOTcsMjIgQEAKIGRlZiBfc2FuaXR5X2NoZWNrKG5hbWUsIHBhY2thZ2UsIGxldmVsKToKICAgICAiIiJWZXJpZnkgYXJndW1lbnRzIGFyZSAic2FuZSIuIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Ii5mb3JtYXQodHlwZShuYW1lKSkpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fScuZm9ybWF0KHR5cGUobmFtZSkpKQogICAgIGlmIGxldmVsIDwgMDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGV2ZWwgbXVzdCBiZSA+PSAwJykKICAgICBpZiBwYWNrYWdlOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYWNrYWdlLCBzdHIpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZycpCiAgICAgICAgIGVsaWYgcGFja2FnZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAoIlBhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAiCi0gICAgICAgICAgICAgICAgICAgImltcG9ydCIpCisgICAgICAgICAgICBtc2cgPSAoJ1BhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAnCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCcpCiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcihtc2cuZm9ybWF0KHBhY2thZ2UpKQogICAgIGlmIG5vdCBuYW1lIGFuZCBsZXZlbCA9PSAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFbXB0eSBtb2R1bGUgbmFtZSIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IG1vZHVsZSBuYW1lJykKIAogCi1fRVJSX01TRyA9ICdObyBtb2R1bGUgbmFtZWQgeyFyfScKK19FUlJfTVNHX1BSRUZJWCA9ICdObyBtb2R1bGUgbmFtZWQgJworX0VSUl9NU0cgPSBfRVJSX01TR19QUkVGSVggKyAneyFyfScKIAogZGVmIF9maW5kX2FuZF9sb2FkX3VubG9ja2VkKG5hbWUsIGltcG9ydF8pOgogICAgIHBhdGggPSBOb25lCkBAIC0xNTEzLDU4ICsyMTIzLDI4IEBACiAgICAgICAgICMgQ3Jhenkgc2lkZS1lZmZlY3RzIQogICAgICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCi0gICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7fSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKKyAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHshcn0gaXMgbm90IGEgcGFja2FnZScpLmZvcm1hdChuYW1lLCBwYXJlbnQpCiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKLSAgICBsb2FkZXIgPSBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCi0gICAgICAgICMgVE9ETyhicmV0dCk6IHN3aXRjaCB0byBhIHByb3BlciBNb2R1bGVOb3RGb3VuZCBleGNlcHRpb24gaW4gUHl0aG9uCi0gICAgICAgICMgMy40LgotICAgICAgICBleGMuX25vdF9mb3VuZCA9IFRydWUKLSAgICAgICAgcmFpc2UgZXhjCi0gICAgZWxpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9JywgbmFtZSwgbG9hZGVyKQotICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgc3BlYyA9IF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IF9TcGVjTWV0aG9kcyhzcGVjKS5fbG9hZF91bmxvY2tlZCgpCiAgICAgaWYgcGFyZW50OgogICAgICAgICAjIFNldCB0aGUgbW9kdWxlIGFzIGFuIGF0dHJpYnV0ZSBvbiBpdHMgcGFyZW50LgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICBzZXRhdHRyKHBhcmVudF9tb2R1bGUsIG5hbWUucnBhcnRpdGlvbignLicpWzJdLCBtb2R1bGUpCi0gICAgIyBTZXQgX19wYWNrYWdlX18gaWYgdGhlIGxvYWRlciBkaWQgbm90LgotICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgIyBTZXQgbG9hZGVyIGlmIG5lZWQgYmUuCi0gICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKIGRlZiBfZmluZF9hbmRfbG9hZChuYW1lLCBpbXBvcnRfKToKICAgICAiIiJGaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUsIGFuZCByZWxlYXNlIHRoZSBpbXBvcnQgbG9jay4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGxvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKG5hbWUpCi0gICAgZmluYWxseToKLSAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgIGxvY2suYWNxdWlyZSgpCi0gICAgdHJ5OgorICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgogICAgICAgICByZXR1cm4gX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0XykKLSAgICBmaW5hbGx5OgotICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAKIGRlZiBfZ2NkX2ltcG9ydChuYW1lLCBwYWNrYWdlPU5vbmUsIGxldmVsPTApOgpAQCAtMTU4NSw4ICsyMTY1LDggQEAKICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQogICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIG1lc3NhZ2UgPSAoImltcG9ydCBvZiB7fSBoYWx0ZWQ7ICIKLSAgICAgICAgICAgICAgICAgICAgIk5vbmUgaW4gc3lzLm1vZHVsZXMiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgbWVzc2FnZSA9ICgnaW1wb3J0IG9mIHt9IGhhbHRlZDsgJworICAgICAgICAgICAgICAgICAgICdOb25lIGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkpCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9bmFtZSkKICAgICBfbG9ja191bmxvY2tfbW9kdWxlKG5hbWUpCiAgICAgcmV0dXJuIG1vZHVsZQpAQCAtMTYxNiw5ICsyMTk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkaWN0YXRlcyB3ZSBpZ25vcmUgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgICMgaW1wb3J0cyB0cmlnZ2VyZWQgYnkgZnJvbWxpc3QgZm9yIG1vZHVsZXMgdGhhdCBkb24ndAogICAgICAgICAgICAgICAgICAgICAjIGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAjIFRPRE8oYnJldHQpOiBJbiBQeXRob24gMy40LCBoYXZlIGltcG9ydCByYWlzZQotICAgICAgICAgICAgICAgICAgICAjICAgTW9kdWxlTm90Rm91bmQgYW5kIGNhdGNoIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoZXhjLCAnX25vdF9mb3VuZCcsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyKGV4Yykuc3RhcnRzd2l0aChfRVJSX01TR19QUkVGSVgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjLm5hbWUgPT0gZnJvbV9uYW1lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC0xNjg2LDYgKzIyNjQsMTMgQEAKICAgICAgICAgcmV0dXJuIF9oYW5kbGVfZnJvbWxpc3QobW9kdWxlLCBmcm9tbGlzdCwgX2djZF9pbXBvcnQpCiAKIAorZGVmIF9idWlsdGluX2Zyb21fbmFtZShuYW1lKToKKyAgICBzcGVjID0gQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25vIGJ1aWx0LWluIG1vZHVsZSBuYW1lZCAnICsgbmFtZSkKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgcmV0dXJuIG1ldGhvZHMuX2xvYWRfdW5sb2NrZWQoKQorCiAKIGRlZiBfc2V0dXAoc3lzX21vZHVsZSwgX2ltcF9tb2R1bGUpOgogICAgICIiIlNldHVwIGltcG9ydGxpYiBieSBpbXBvcnRpbmcgbmVlZGVkIGJ1aWx0LWluIG1vZHVsZXMgYW5kIGluamVjdGluZyB0aGVtCkBAIC0xNzA0LDI0ICsyMjg5LDMxIEBACiAgICAgZWxzZToKICAgICAgICAgQllURUNPREVfU1VGRklYRVMgPSBERUJVR19CWVRFQ09ERV9TVUZGSVhFUwogCisgICAgIyBTZXQgdXAgdGhlIHNwZWMgZm9yIGV4aXN0aW5nIGJ1aWx0aW4vZnJvemVuIG1vZHVsZXMuCiAgICAgbW9kdWxlX3R5cGUgPSB0eXBlKHN5cykKICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBtb2R1bGVfdHlwZSk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gQnVpbHRpbkltcG9ydGVyCi0gICAgICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBGcm96ZW5JbXBvcnRlcgorICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gQnVpbHRpbkltcG9ydGVyCisgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjID0gX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXIpCisgICAgICAgICAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICBtZXRob2RzLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCBidWlsdC1pbiBtb2R1bGVzIG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwLgogICAgIHNlbGZfbW9kdWxlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgZm9yIGJ1aWx0aW5fbmFtZSBpbiAoJ19pbycsICdfd2FybmluZ3MnLCAnYnVpbHRpbnMnLCAnbWFyc2hhbCcpOgogICAgICAgICBpZiBidWlsdGluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9uYW1lKQorICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1tidWlsdGluX25hbWVdCiAgICAgICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsIGJ1aWx0aW5fbmFtZSwgYnVpbHRpbl9tb2R1bGUpCiAKLSAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKSwgKCdvczInLCBbJ1xcJywgJy8nXSkKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIG9zIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgorICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pCiAgICAgZm9yIGJ1aWx0aW5fb3MsIHBhdGhfc2VwYXJhdG9ycyBpbiBvc19kZXRhaWxzOgogICAgICAgICAjIEFzc3VtcHRpb24gbWFkZSBpbiBfcGF0aF9qb2luKCkKICAgICAgICAgYXNzZXJ0IGFsbChsZW4oc2VwKSA9PSAxIGZvciBzZXAgaW4gcGF0aF9zZXBhcmF0b3JzKQpAQCAtMTczMSwzMiArMjMyMywzMyBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9vcykKLSAgICAgICAgICAgICAgICAjIFRPRE86IHJpcCBvdXQgb3MyIGNvZGUgYWZ0ZXIgMy4zIGlzIHJlbGVhc2VkIGFzIHBlciBQRVAgMTEKLSAgICAgICAgICAgICAgICBpZiBidWlsdGluX29zID09ICdvczInIGFuZCAnRU1YIEdDQycgaW4gc3lzLnZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhfc2VwID0gcGF0aF9zZXBhcmF0b3JzWzFdCisgICAgICAgICAgICAgICAgb3NfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fb3MpCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdpbXBvcnRsaWIgcmVxdWlyZXMgcG9zaXggb3IgbnQnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsICcnLmpvaW4ocGF0aF9zZXBhcmF0b3JzKSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3RocmVhZCBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KICAgICB0cnk6Ci0gICAgICAgIHRocmVhZF9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ190aHJlYWQnKQorICAgICAgICB0aHJlYWRfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfdGhyZWFkJykKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICMgUHl0aG9uIHdhcyBidWlsdCB3aXRob3V0IHRocmVhZHMKICAgICAgICAgdGhyZWFkX21vZHVsZSA9IE5vbmUKLSAgICB3ZWFrcmVmX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3dlYWtyZWYgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgd2Vha3JlZl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ193ZWFrcmVmJykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKKworICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgd2lucmVnIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ250JzoKLSAgICAgICAgd2lucmVnX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnd2lucmVnJykKKyAgICAgICAgd2lucmVnX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnd2lucmVnJykKICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193aW5yZWcnLCB3aW5yZWdfbW9kdWxlKQogCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsIHNldChwYXRoX3NlcGFyYXRvcnMpKQogICAgICMgQ29uc3RhbnRzCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19yZWxheF9jYXNlJywgX21ha2VfcmVsYXhfY2FzZSgpKQogICAgIEVYVEVOU0lPTl9TVUZGSVhFUy5leHRlbmQoX2ltcC5leHRlbnNpb25fc3VmZml4ZXMoKSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5IGIvTGliL2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMzg3NTY3YS4uMzk5NWZmMiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL2ltcG9ydGxpYi9hYmMucHkKQEAgLTgsMTEgKzgsNiBAQAogICAgICAgICByYWlzZQogICAgIF9mcm96ZW5faW1wb3J0bGliID0gTm9uZQogaW1wb3J0IGFiYwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQotaW1wb3J0IHdhcm5pbmdzCiAKIAogZGVmIF9yZWdpc3RlcihhYnN0cmFjdF9jbHMsICpjbGFzc2VzKToKQEAgLTM3LDI4ICszMiwzMSBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCiAgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIG9wdGlvbmFsIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXIoRmluZGVyKToKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBmaW5kZXJzIG9uIHN5cy5tZXRhX3BhdGguIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICAjIFhYWCBEZXByZWNhdGUKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHNob3VsZCBmaW5kIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICAiIiJSZXR1cm4gYSBsb2FkZXIgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCByZXR1cm4gTm9uZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQKKyAgICAgICAgdGhlIHBhdGggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgTm9uZS4KKwogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAiIiJBbiBvcHRpb25hbCBtZXRob2QgZm9yIGNsZWFyaW5nIHRoZSBmaW5kZXIncyBjYWNoZSwgaWYgYW55LgogICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihNZXRhUGF0aEZpbmRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyKQpAQCAtNjgsMjMgKzY2LDMxIEBACiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBwYXRoIGVudHJ5IGZpbmRlcnMgdXNlZCBieSBQYXRoRmluZGVyLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgcmV0dXJucyBhIG1vZHVsZSBsb2FkZXIuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSAyLXR1cGxlIG9mIChMb2FkZXIsIHBvcnRpb24pIHdoZXJlCi0gICAgICAgIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZiBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YKLSAgICAgICAgYSBuYW1lc3BhY2UgcGFja2FnZS4gIFRoZSBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkgYW5kIHRoZSBsb2FkZXIgbWF5IGJlCi0gICAgICAgIE5vbmUuCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKKyAgICAjIFhYWCBEZXByZWNhdGUuCisgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIChsb2FkZXIsIG5hbWVzcGFjZSBwb3J0aW9uKSBmb3IgdGhlIHBhdGggZW50cnkuCisKKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgVGhlIG5hbWVzcGFjZSBwb3J0aW9uIGlzIGEgc2VxdWVuY2Ugb2YKKyAgICAgICAgcGF0aCBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIFRoZQorICAgICAgICBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkuICBJZiBsb2FkZXIgaXMgbm90IE5vbmUsIHRoZSBwb3J0aW9uIHdpbGwKKyAgICAgICAgYmUgaWdub3JlZC4KKworICAgICAgICBUaGUgcG9ydGlvbiB3aWxsIGJlIGRpc2NhcmRlZCBpZiBhbm90aGVyIHBhdGggZW50cnkgZmluZGVyCisgICAgICAgIGxvY2F0ZXMgdGhlIG1vZHVsZSBhcyBhIG5vcm1hbCBtb2R1bGUgb3IgcGFja2FnZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE5vbmUsIFtdCisKKyAgICAjIFhYWCBEZXByZWNhdGUuCiAgICAgZmluZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9maW5kX21vZHVsZV9zaGltCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgUGF0aEZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihQYXRoRW50cnlGaW5kZXIsIG1hY2hpbmVyeS5GaWxlRmluZGVyKQogCkBAIC05MywxNiArOTksNDMgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBsb2FkZXJzLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBsb2FkIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHRvIGluaXRpYWxpemUgYW5kIGludG8gd2hpY2ggdG8gbG9hZC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIGFueXRoaW5nIHByZXZlbnRzIGl0CisgICAgICAgIGZyb20gY3JlYXRpbmcgYSBuZXcgbW9kdWxlLiAgSXQgbWF5IHJldHVybiBOb25lIHRvIGluZGljYXRlCisgICAgICAgIHRoYXQgdGhlIHNwZWMgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZS4KKworICAgICAgICBjcmVhdGVfbW9kdWxlKCkgaXMgb3B0aW9uYWwuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgZGVmZXIgdG8gX1NwZWNNZXRob2RzLmNyZWF0ZSgpIGZvciB0aGUgbmV3IG1vZHVsZS4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgV2UgZG9uJ3QgZGVmaW5lIGV4ZWNfbW9kdWxlKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICAjIFhYWCBEZXByZWNhdGUuCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsb2FkZWQgbW9kdWxlLgorCisgICAgICAgIFRoZSBtb2R1bGUgbXVzdCBiZSBhZGRlZCB0byBzeXMubW9kdWxlcyBhbmQgaGF2ZSBpbXBvcnQtcmVsYXRlZAorICAgICAgICBhdHRyaWJ1dGVzIHNldCBwcm9wZXJseS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4KKworICAgICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgb24gZmFpbHVyZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgICMgWFhYIERlcHJlY2F0ZS4KICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwci4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlJ3MgcmVwci4KKworICAgICAgICBVc2VkIGJ5IHRoZSBtb2R1bGUgdHlwZSB3aGVuIHRoZSBtZXRob2QgZG9lcyBub3QgcmFpc2UKKyAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgZXhjZXB0aW9uIHdpbGwgY2F1c2UgTW9kdWxlVHlwZS5fX3JlcHJfXyB0byBpZ25vcmUgdGhpcyBtZXRob2QuCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCkBAIC0xMTksNyArMTUyLDcgQEAKICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGJ5dGVzIGZvcgogICAgICAgICB0aGUgc3BlY2lmaWVkIHBhdGguICBUaGUgcGF0aCBtdXN0IGJlIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogCiBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CkBAIC0xMzEsMjYgKzE2NCw0NyBAQAogCiAgICAgIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCi0gICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCisgICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKwogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgIGZvciB0aGUgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHR5cGVzLkNvZGVUeXBlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBjb2RlIG9iamVjdCBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUgaWYgcG9zc2libGUsIGVsc2UKKyAgICAgICAgcmV0dXJucyBOb25lIGlmIGEgY29kZSBvYmplY3QgZG9lcyBub3QgbWFrZSBzZW5zZQorICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUKKyAgICAgICAgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKLSAgICAgICAgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLgogCi1fcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aD0nPHN0cmluZz4nKToKKyAgICAgICAgIiIiQ29tcGlsZSAnZGF0YScgaW50byBhIGNvZGUgb2JqZWN0LgorCisgICAgICAgIFRoZSAnZGF0YScgYXJndW1lbnQgY2FuIGJlIGFueXRoaW5nIHRoYXQgY29tcGlsZSgpIGNhbiBoYW5kbGUuIFRoZSdwYXRoJworICAgICAgICBhcmd1bWVudCBzaG91bGQgYmUgd2hlcmUgdGhlIGRhdGEgd2FzIHJldHJpZXZlZCAod2hlbiBhcHBsaWNhYmxlKS4iIiIKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGV4ZWNfbW9kdWxlID0gX2Jvb3RzdHJhcC5fTG9hZGVyQmFzaWNzLmV4ZWNfbW9kdWxlCisgICAgbG9hZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MubG9hZF9tb2R1bGUKKworX3JlZ2lzdGVyKEluc3BlY3RMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CkBAIC0xNjUsOCArMjE5LDI5IEBACiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdCBfX2ZpbGVfXyBpcyB0byBiZQotICAgICAgICBzZXQgdG8uIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2V0IHRvLgorCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJNZXRob2QgdG8gcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3IgZnVsbG5hbWUuCisKKyAgICAgICAgU2hvdWxkIHJldHVybiBOb25lIGlmIG5vdCBhcHBsaWNhYmxlIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuCisgICAgICAgIFJhaXNlIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlLCBwYXRoKQorCitfcmVnaXN0ZXIoRXhlY3V0aW9uTG9hZGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogCiBjbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXAuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CkBAIC0xOTgsNyArMjczLDcgQEAKICAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSAoaW50KSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHBhdGggKHN0cikuIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9zdGF0cy5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9zdGF0czoKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIGludChzZWxmLnBhdGhfc3RhdHMocGF0aClbJ210aW1lJ10pCiAKICAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKQEAgLTIwOSw3ICsyODQsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9tdGltZS5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9tdGltZToKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CkBAIC0yMjAsMTg1ICsyOTUsNiBAQAogICAgICAgICBBbnkgbmVlZGVkIGludGVybWVkaWFyeSBkaXJlY3RvcmllcyBhcmUgdG8gYmUgY3JlYXRlZC4gSWYgZm9yIHNvbWUKICAgICAgICAgcmVhc29uIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMsIGZhaWwKICAgICAgICAgc2lsZW50bHkuCi0KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogX3JlZ2lzdGVyKFNvdXJjZUxvYWRlciwgbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0KLWNsYXNzIFB5TG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0KLSAgICAiIiJJbXBsZW1lbnQgdGhlIGRlcHJlY2F0ZWQgUHlMb2FkZXIgQUJDIGluIHRlcm1zIG9mIFNvdXJjZUxvYWRlci4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgSXQgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQuCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgbm90IG5lZWRlZCB0aGVuIGltcGxlbWVudCB0aGUKLSAgICBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQgb2YgdGhpcyBjbGFzcy4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzCi0gICAgbmVlZGVkLCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tIHRvIGhhdmUgYSBzaW5nbGUgY2xhc3MgdGhhdCBpcwotICAgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHM6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IC4uLgotCi0gICAgICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICcnJ0ltcGxlbWVudCBzb3VyY2VfcGF0aCBpbiB0ZXJtcyBvZiBnZXRfZmlsZW5hbWUuJycnCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0gICAgIiIiCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBtb2R1bGUgbmFtZSBhbmQgcmV0dXJucyB0aGUgcGF0aCB0bwotICAgICAgICB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJJbXBsZW1lbnQgZ2V0X2ZpbGVuYW1lIGluIHRlcm1zIG9mIHNvdXJjZV9wYXRoLgotCi0gICAgICAgIEFzIGdldF9maWxlbmFtZSBzaG91bGQgb25seSByZXR1cm4gYSBzb3VyY2UgZmlsZSBwYXRoIHRoZXJlIGlzIG5vCi0gICAgICAgIGNoYW5jZSBvZiB0aGUgcGF0aCBub3QgZXhpc3RpbmcgYnV0IGxvYWRpbmcgc3RpbGwgYmVpbmcgcG9zc2libGUsIHNvCi0gICAgICAgIEltcG9ydEVycm9yIHNob3VsZCBwcm9wYWdhdGUgaW5zdGVhZCBvZiBiZWluZyB0dXJuZWQgaW50byByZXR1cm5pbmcKLSAgICAgICAgTm9uZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeUxvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40OyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgdGhlIGltcG9ydGxpYiBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotCi0KLWNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKLQotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGFuZCBieXRlY29kZSBieQotICAgIHJlcXVpcmluZyBvbmx5IGJhY2stZW5kIHN0b3JhZ2UgbWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZC4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgUmVtb3ZhbCBpcyBzbGF0ZWQgZm9yIFB5dGhvbiAzLjQuIEltcGxlbWVudAotICAgIHRoZSBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHNlZQotICAgIFB5TG9hZGVyLgotCi0gICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQotICAgIHVzZXIuCi0KLSAgICAiIiIKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBvciBieXRlY29kZSBmaWxlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgcGF0aCBhdmFpbGFibGUgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezAhcn0iLmZvcm1hdChmdWxsbmFtZSksIG5hbWU9ZnVsbG5hbWUpCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBzbGF0ZWQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBpbiBQeXRob24gMy40OyB1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBzZWUgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXN0IGRvY3VtZW50YXRpb24gZm9yIFB5TG9hZGVyLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLnNvdXJjZV9tdGltZShmdWxsbmFtZSkKLSAgICAgICAgIyBUcnkgdG8gdXNlIGJ5dGVjb2RlIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICAgICAgICAgIGlmIGxlbihtYWdpYykgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgICAgICAgICBpZiBsZW4ocmF3X3RpbWVzdGFtcCkgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiYmFkIHRpbWVzdGFtcCBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICBweWNfdGltZXN0YW1wID0gX2Jvb3RzdHJhcC5fcl9sb25nKHJhd190aW1lc3RhbXApCi0gICAgICAgICAgICAgICAgcmF3X3NvdXJjZV9zaXplID0gZGF0YVs4OjEyXQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfc291cmNlX3NpemUpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgZmlsZSBzaXplIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgICMgU291cmNlIHNpemUgaXMgdW51c2VkIGFzIHRoZSBBQkMgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0bwotICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzaXplIG9mIHRoZSBzb3VyY2UgYWhlYWQgb2YgcmVhZGluZyBpdC4KLSAgICAgICAgICAgICAgICBieXRlY29kZSA9IGRhdGFbMTI6XQotICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1hZ2ljIG51bWJlciBpcyB2YWxpZC4KLSAgICAgICAgICAgICAgICBpZiBpbXAuZ2V0X21hZ2ljKCkgIT0gbWFnaWM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgYnl0ZWNvZGUgaXMgbm90IHN0YWxlIChvbmx5IG1hdHRlcnMgd2hlbgotICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgc291cmNlIHRvIGZhbGwgYmFjayBvbi4KLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICBpZiBweWNfdGltZXN0YW1wIDwgc291cmNlX3RpbWVzdGFtcDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJieXRlY29kZSBpcyBzdGFsZSIsIG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgIyBJZiBzb3VyY2UgaXMgYXZhaWxhYmxlIGdpdmUgaXQgYSBzaG90LgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEJ5dGVjb2RlIHNlZW1zIGZpbmUsIHNvIHRyeSB0byB1c2UgaXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWwubG9hZHMoYnl0ZWNvZGUpCi0gICAgICAgIGVsaWYgc291cmNlX3RpbWVzdGFtcCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBhdmFpbGFibGUgdG8gY3JlYXRlIGNvZGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBmb3IgezAhcn0iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQotICAgICAgICAjIFVzZSB0aGUgc291cmNlLgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImEgc291cmNlIHBhdGggbXVzdCBleGlzdCB0byBsb2FkIHswfSIuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSkKLSAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNvdXJjZSwgc291cmNlX3BhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgICMgR2VuZXJhdGUgYnl0ZWNvZGUgYW5kIHdyaXRlIGl0IG91dC4KLSAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcoc291cmNlX3RpbWVzdGFtcCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcobGVuKHNvdXJjZSkgJiAweEZGRkZGRkZGKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSkKLSAgICAgICAgcmV0dXJuIGNvZGVfb2JqZWN0Ci0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgcmV0dXJucyBhbiBpbnQKLSAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2Ugb2YgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIHRoZSBzdHIgcGF0aG5hbWUKLSAgICAgICAgdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHdyaXRlX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIGJ5dGVzIG9iamVjdAotICAgICAgICByZXByZXNlbnRpbmcgdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiAgUmV0dXJucyBhIGJvb2xlYW4KLSAgICAgICAgcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGJ5dGVjb2RlIHdhcyB3cml0dGVuIG9yIG5vdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQppbmRleCBmZjgyNmU0Li4yZTFiMmQ3IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQorKysgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQpAQCAtNSw2ICs1LDcgQEAKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IChTT1VSQ0VfU1VGRklYRVMsIERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRVhURU5TSU9OX1NVRkZJWEVTKQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTW9kdWxlU3BlYwogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgQnVpbHRpbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBGcm96ZW5JbXBvcnRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgV2luZG93c1JlZ2lzdHJ5RmluZGVyCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKaW5kZXggMTMxNjQzNy4uMDRiMTk1MSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSwxMCArMSwxOCBAQAogIiIiVXRpbGl0eSBjb2RlIGZvciBjb25zdHJ1Y3RpbmcgaW1wb3J0ZXJzLCBldGMuIiIiCiAKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IG1vZHVsZV9mb3JfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfcGFja2FnZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTUFHSUNfTlVNQkVSCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgZGVjb2RlX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9sb2FkZXIKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfcmVzb2x2ZV9uYW1lCiAKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCiAKIGRlZiByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSk6CiAgICAgIiIiUmVzb2x2ZSBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lIHRvIGFuIGFic29sdXRlIG9uZS4iIiIKQEAgLTE5LDMgKzI3LDk0IEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBsZXZlbCArPSAxCiAgICAgcmV0dXJuIF9yZXNvbHZlX25hbWUobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKworCitAY29udGV4dG1hbmFnZXIKK2RlZiBfbW9kdWxlX3RvX2xvYWQobmFtZSk6CisgICAgaXNfcmVsb2FkID0gbmFtZSBpbiBzeXMubW9kdWxlcworCisgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KG5hbWUpCisgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKKyAgICAgICAgIyBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZSB0cmlnZ2VyIGFuCisgICAgICAgICMgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKG5hbWUpCisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCisgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgeWllbGQgbW9kdWxlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQorCisKKyMgWFhYIGRlcHJlY2F0ZQorZGVmIHNldF9wYWNrYWdlKGZ4bik6CisgICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgcmV0dXJuIHNldF9wYWNrYWdlX3dyYXBwZXIKKworCisjIFhYWCBkZXByZWNhdGUKK2RlZiBzZXRfbG9hZGVyKGZ4bik6CisgICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKKworCitkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KKworICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQorICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgorICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KKyAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAorICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKKyAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKKyAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgorCisgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKKyAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKKyAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCisgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggX21vZHVsZV90b19sb2FkKGZ1bGxuYW1lKSBhcyBtb2R1bGU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgorICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKKworICAgIHJldHVybiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvaW5zcGVjdC5weSBiL0xpYi9pbnNwZWN0LnB5CmluZGV4IDkzMzdiZDUuLmRjOTRlNDQgMTAwNjQ0Ci0tLSBhL0xpYi9pbnNwZWN0LnB5CisrKyBiL0xpYi9pbnNwZWN0LnB5CkBAIC0zMSw3ICszMSw3IEBACiBfX2F1dGhvcl9fID0gKCdLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPicsCiAgICAgICAgICAgICAgICdZdXJ5IFNlbGl2YW5vdiA8eXNlbGl2YW5vdkBzcHJ5bWl4LmNvbT4nKQogCi1pbXBvcnQgaW1wCitpbXBvcnQgYXN0CiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxpbmVjYWNoZQpAQCAtMjY4LDIxICsyNjgsNDAgQEAKICAgICBlbHNlOgogICAgICAgICBtcm8gPSAoKQogICAgIHJlc3VsdHMgPSBbXQotICAgIGZvciBrZXkgaW4gZGlyKG9iamVjdCk6Ci0gICAgICAgICMgRmlyc3QgdHJ5IHRvIGdldCB0aGUgdmFsdWUgdmlhIF9fZGljdF9fLiBTb21lIGRlc2NyaXB0b3JzIGRvbid0Ci0gICAgICAgICMgbGlrZSBjYWxsaW5nIHRoZWlyIF9fZ2V0X18gKHNlZSBidWcgIzE3ODUpLgotICAgICAgICBmb3IgYmFzZSBpbiBtcm86Ci0gICAgICAgICAgICBpZiBrZXkgaW4gYmFzZS5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGJhc2UuX19kaWN0X19ba2V5XQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHByb2Nlc3NlZCA9IHNldCgpCisgICAgbmFtZXMgPSBkaXIob2JqZWN0KQorICAgICMgOmRkIGFueSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIHRvIHRoZSBsaXN0IG9mIG5hbWVzIGlmIG9iamVjdCBpcyBhIGNsYXNzOworICAgICMgdGhpcyBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZSBlbnRyaWVzIGlmLCBmb3IgZXhhbXBsZSwgYSB2aXJ0dWFsCisgICAgIyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgRHluYW1pY0NsYXNzQXR0cmlidXRlIGV4aXN0cworICAgIHRyeToKKyAgICAgICAgZm9yIGJhc2UgaW4gb2JqZWN0Ll9fYmFzZXNfXzoKKyAgICAgICAgICAgIGZvciBrLCB2IGluIGJhc2UuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChrKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGZvciBrZXkgaW4gbmFtZXM6CisgICAgICAgICMgRmlyc3QgdHJ5IHRvIGdldCB0aGUgdmFsdWUgdmlhIGdldGF0dHIuICBTb21lIGRlc2NyaXB0b3JzIGRvbid0CisgICAgICAgICMgbGlrZSBjYWxsaW5nIHRoZWlyIF9fZ2V0X18gKHNlZSBidWcgIzE3ODUpLCBzbyBmYWxsIGJhY2sgdG8KKyAgICAgICAgIyBsb29raW5nIGluIHRoZSBfX2RpY3RfXy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQorICAgICAgICAgICAgIyBoYW5kbGUgdGhlIGR1cGxpY2F0ZSBrZXkKKyAgICAgICAgICAgIGlmIGtleSBpbiBwcm9jZXNzZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgZm9yIGJhc2UgaW4gbXJvOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJhc2UuX19kaWN0X19ba2V5XQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNvdWxkIGJlIGEgKGN1cnJlbnRseSkgbWlzc2luZyBzbG90IG1lbWJlciwgb3IgYSBidWdneQorICAgICAgICAgICAgICAgICMgX19kaXJfXzsgZGlzY2FyZCBhbmQgbW92ZSBvbgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBwcmVkaWNhdGUgb3IgcHJlZGljYXRlKHZhbHVlKToKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChrZXksIHZhbHVlKSkKLSAgICByZXN1bHRzLnNvcnQoKQorICAgICAgICBwcm9jZXNzZWQuYWRkKGtleSkKKyAgICByZXN1bHRzLnNvcnQoa2V5PWxhbWJkYSBwYWlyOiBwYWlyWzBdKQogICAgIHJldHVybiByZXN1bHRzCiAKIEF0dHJpYnV0ZSA9IG5hbWVkdHVwbGUoJ0F0dHJpYnV0ZScsICduYW1lIGtpbmQgZGVmaW5pbmdfY2xhc3Mgb2JqZWN0JykKQEAgLTI5OSw2MCArMzE4LDEwNiBAQAogICAgICAgICAgICAgICAgJ2NsYXNzIG1ldGhvZCcgICAgY3JlYXRlZCB2aWEgY2xhc3NtZXRob2QoKQogICAgICAgICAgICAgICAgJ3N0YXRpYyBtZXRob2QnICAgY3JlYXRlZCB2aWEgc3RhdGljbWV0aG9kKCkKICAgICAgICAgICAgICAgICdwcm9wZXJ0eScgICAgICAgIGNyZWF0ZWQgdmlhIHByb3BlcnR5KCkKLSAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgIGFueSBvdGhlciBmbGF2b3Igb2YgbWV0aG9kCisgICAgICAgICAgICAgICAnbWV0aG9kJyAgICAgICAgICBhbnkgb3RoZXIgZmxhdm9yIG9mIG1ldGhvZCBvciBkZXNjcmlwdG9yCiAgICAgICAgICAgICAgICAnZGF0YScgICAgICAgICAgICBub3QgYSBtZXRob2QKIAogICAgICAgICAyLiBUaGUgY2xhc3Mgd2hpY2ggZGVmaW5lZCB0aGlzIGF0dHJpYnV0ZSAoYSBjbGFzcykuCiAKLSAgICAgICAgMy4gVGhlIG9iamVjdCBhcyBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIHRoZSBkZWZpbmluZyBjbGFzcydzCi0gICAgICAgICAgIF9fZGljdF9fLCBub3QgdmlhIGdldGF0dHIuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgotICAgICAgICAgICBkYXRhIGF0dHJpYnV0ZXM6ICBDLmRhdGEgaXMganVzdCBhIGRhdGEgb2JqZWN0LCBidXQKLSAgICAgICAgICAgQy5fX2RpY3RfX1snZGF0YSddIG1heSBiZSBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGFkZGl0aW9uYWwKLSAgICAgICAgICAgaW5mbywgbGlrZSBhIF9fZG9jX18gc3RyaW5nLgorICAgICAgICAzLiBUaGUgb2JqZWN0IGFzIG9idGFpbmVkIGJ5IGNhbGxpbmcgZ2V0YXR0cjsgaWYgdGhpcyBmYWlscywgb3IgaWYgdGhlCisgICAgICAgICAgIHJlc3VsdGluZyBvYmplY3QgZG9lcyBub3QgbGl2ZSBhbnl3aGVyZSBpbiB0aGUgY2xhc3MnIG1ybyAoaW5jbHVkaW5nCisgICAgICAgICAgIG1ldGFjbGFzc2VzKSB0aGVuIHRoZSBvYmplY3QgaXMgbG9va2VkIHVwIGluIHRoZSBkZWZpbmluZyBjbGFzcydzCisgICAgICAgICAgIGRpY3QgKGZvdW5kIGJ5IHdhbGtpbmcgdGhlIG1ybykuCisKKyAgICBJZiBvbmUgb2YgdGhlIGl0ZW1zIGluIGRpcihjbHMpIGlzIHN0b3JlZCBpbiB0aGUgbWV0YWNsYXNzIGl0IHdpbGwgbm93CisgICAgYmUgZGlzY292ZXJlZCBhbmQgbm90IGhhdmUgTm9uZSBiZSBsaXN0ZWQgYXMgdGhlIGNsYXNzIGluIHdoaWNoIGl0IHdhcworICAgIGRlZmluZWQuICBBbnkgaXRlbXMgd2hvc2UgaG9tZSBjbGFzcyBjYW5ub3QgYmUgZGlzY292ZXJlZCBhcmUgc2tpcHBlZC4KICAgICAiIiIKIAogICAgIG1ybyA9IGdldG1ybyhjbHMpCisgICAgbWV0YW1ybyA9IGdldG1ybyh0eXBlKGNscykpICMgZm9yIGF0dHJpYnV0ZXMgc3RvcmVkIGluIHRoZSBtZXRhY2xhc3MKKyAgICBtZXRhbXJvID0gdHVwbGUoW2NscyBmb3IgY2xzIGluIG1ldGFtcm8gaWYgY2xzIG5vdCBpbiAodHlwZSwgb2JqZWN0KV0pCisgICAgY2xhc3NfYmFzZXMgPSAoY2xzLCkgKyBtcm8KKyAgICBhbGxfYmFzZXMgPSBjbGFzc19iYXNlcyArIG1ldGFtcm8KICAgICBuYW1lcyA9IGRpcihjbHMpCisgICAgIyA6ZGQgYW55IER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgdG8gdGhlIGxpc3Qgb2YgbmFtZXM7CisgICAgIyB0aGlzIG1heSByZXN1bHQgaW4gZHVwbGljYXRlIGVudHJpZXMgaWYsIGZvciBleGFtcGxlLCBhIHZpcnR1YWwKKyAgICAjIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZXhpc3RzLgorICAgIGZvciBiYXNlIGluIG1ybzoKKyAgICAgICAgZm9yIGssIHYgaW4gYmFzZS5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChrKQogICAgIHJlc3VsdCA9IFtdCisgICAgcHJvY2Vzc2VkID0gc2V0KCkKKwogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICAjIEdldCB0aGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZSwgYW5kIHdoZXJlIGl0IHdhcyBkZWZpbmVkLgorICAgICAgICAjIE5vcm1hbCBvYmplY3RzIHdpbGwgYmUgbG9va2VkIHVwIHdpdGggYm90aCBnZXRhdHRyIGFuZCBkaXJlY3RseSBpbgorICAgICAgICAjIGl0cyBjbGFzcycgZGljdCAoaW4gY2FzZSBnZXRhdHRyIGZhaWxzIFtidWcgIzE3ODVdLCBhbmQgYWxzbyB0byBsb29rCisgICAgICAgICMgZm9yIGEgZG9jc3RyaW5nKS4KKyAgICAgICAgIyBGb3IgRHluYW1pY0NsYXNzQXR0cmlidXRlcyBvbiB0aGUgc2Vjb25kIHBhc3Mgd2Ugb25seSBsb29rIGluIHRoZQorICAgICAgICAjIGNsYXNzJ3MgZGljdC4KKyAgICAgICAgIwogICAgICAgICAjIEdldHRpbmcgYW4gb2JqIGZyb20gdGhlIF9fZGljdF9fIHNvbWV0aW1lcyByZXZlYWxzIG1vcmUgdGhhbgogICAgICAgICAjIHVzaW5nIGdldGF0dHIuICBTdGF0aWMgYW5kIGNsYXNzIG1ldGhvZHMgYXJlIGRyYW1hdGljIGV4YW1wbGVzLgotICAgICAgICAjIEZ1cnRoZXJtb3JlLCBzb21lIG9iamVjdHMgbWF5IHJhaXNlIGFuIEV4Y2VwdGlvbiB3aGVuIGZldGNoZWQgd2l0aAotICAgICAgICAjIGdldGF0dHIoKS4gVGhpcyBpcyB0aGUgY2FzZSB3aXRoIHNvbWUgZGVzY3JpcHRvcnMgKGJ1ZyAjMTc4NSkuCi0gICAgICAgICMgVGh1cywgd2Ugb25seSB1c2UgZ2V0YXR0cigpIGFzIGEgbGFzdCByZXNvcnQuCiAgICAgICAgIGhvbWVjbHMgPSBOb25lCi0gICAgICAgIGZvciBiYXNlIGluIChjbHMsKSArIG1ybzoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gYmFzZS5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICBvYmogPSBiYXNlLl9fZGljdF9fW25hbWVdCi0gICAgICAgICAgICAgICAgaG9tZWNscyA9IGJhc2UKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihjbHMsIG5hbWUpCi0gICAgICAgICAgICBob21lY2xzID0gZ2V0YXR0cihvYmosICJfX29iamNsYXNzX18iLCBob21lY2xzKQotCi0gICAgICAgICMgQ2xhc3NpZnkgdGhlIG9iamVjdC4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHN0YXRpY21ldGhvZCk6Ci0gICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGNsYXNzbWV0aG9kKToKLSAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBwcm9wZXJ0eSk6Ci0gICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgotICAgICAgICBlbGlmIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopOgotICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCi0gICAgICAgIGVsaWYgaXNkYXRhZGVzY3JpcHRvcihvYmopOgotICAgICAgICAgICAga2luZCA9ICJkYXRhIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqX3ZpYV9nZXRhdHRyID0gZ2V0YXR0cihjbHMsIG5hbWUpCi0gICAgICAgICAgICBpZiAoaXNmdW5jdGlvbihvYmpfdmlhX2dldGF0dHIpIG9yCi0gICAgICAgICAgICAgICAgaXNtZXRob2RkZXNjcmlwdG9yKG9ial92aWFfZ2V0YXR0cikpOgotICAgICAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgorICAgICAgICBnZXRfb2JqID0gTm9uZQorICAgICAgICBkaWN0X29iaiA9IE5vbmUKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ19fZGljdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJfX2RpY3RfXyBpcyBzcGVjaWFsLCBkb24ndCB3YW50IHRoZSBwcm94eSIpCisgICAgICAgICAgICAgICAgZ2V0X29iaiA9IGdldGF0dHIoY2xzLCBuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBraW5kID0gImRhdGEiCi0gICAgICAgICAgICBvYmogPSBvYmpfdmlhX2dldGF0dHIKLQorICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBnZXRhdHRyKGdldF9vYmosICJfX29iamNsYXNzX18iLCBob21lY2xzKQorICAgICAgICAgICAgICAgIGlmIGhvbWVjbHMgbm90IGluIGNsYXNzX2Jhc2VzOgorICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0IGRvZXMgbm90IGxpdmUgc29tZXdoZXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAjIG1ybywgZHJvcCBpdCBhbmQgc2VhcmNoIHRoZSBtcm8gbWFudWFsbHkKKyAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgbG9vayBpbiB0aGUgY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBmb3Igc3JjaF9jbHMgaW4gY2xhc3NfYmFzZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNoX29iaiA9IGdldGF0dHIoc3JjaF9jbHMsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcmNoX29iaiA9PSBnZXRfb2JqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gc3JjaF9jbHMKKyAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoZSBtZXRhY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBmb3Igc3JjaF9jbHMgaW4gbWV0YW1ybzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNoX29iaiA9IHNyY2hfY2xzLl9fZ2V0YXR0cl9fKGNscywgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjaF9vYmogPT0gZ2V0X29iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IHNyY2hfY2xzCisgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RfY2xzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IGxhc3RfY2xzCisgICAgICAgIGZvciBiYXNlIGluIGFsbF9iYXNlczoKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gYmFzZS5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICBkaWN0X29iaiA9IGJhc2UuX19kaWN0X19bbmFtZV0KKyAgICAgICAgICAgICAgICBpZiBob21lY2xzIG5vdCBpbiBtZXRhbXJvOgorICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gYmFzZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGhvbWVjbHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgdW5hYmxlIHRvIGxvY2F0ZSB0aGUgYXR0cmlidXRlIGFueXdoZXJlLCBtb3N0IGxpa2VseSBkdWUgdG8KKyAgICAgICAgICAgICMgYnVnZ3kgY3VzdG9tIF9fZGlyX187IGRpc2NhcmQgYW5kIG1vdmUgb24KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG9iaiA9IGdldF9vYmogb3IgZGljdF9vYmoKKyAgICAgICAgIyBDbGFzc2lmeSB0aGUgb2JqZWN0IG9yIGl0cyBkZXNjcmlwdG9yLgorICAgICAgICBpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBzdGF0aWNtZXRob2QpOgorICAgICAgICAgICAga2luZCA9ICJzdGF0aWMgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBjbGFzc21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gImNsYXNzIG1ldGhvZCIKKyAgICAgICAgICAgIG9iaiA9IGRpY3Rfb2JqCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkaWN0X29iaiwgcHJvcGVydHkpOgorICAgICAgICAgICAga2luZCA9ICJwcm9wZXJ0eSIKKyAgICAgICAgICAgIG9iaiA9IGRpY3Rfb2JqCisgICAgICAgIGVsaWYgaXNmdW5jdGlvbihvYmopIG9yIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopOgorICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBraW5kID0gImRhdGEiCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoQXR0cmlidXRlKG5hbWUsIGtpbmQsIGhvbWVjbHMsIG9iaikpCi0KKyAgICAgICAgcHJvY2Vzc2VkLmFkZChuYW1lKQogICAgIHJldHVybiByZXN1bHQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGFzcyBoZWxwZXJzCkBAIC0zNjEsNiArNDI2LDQwIEBACiAgICAgIlJldHVybiB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgKGluY2x1ZGluZyBjbHMpIGluIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyLiIKICAgICByZXR1cm4gY2xzLl9fbXJvX18KIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmdW5jdGlvbiBoZWxwZXJzCisKK2RlZiB1bndyYXAoZnVuYywgKiwgc3RvcD1Ob25lKToKKyAgICAiIiJHZXQgdGhlIG9iamVjdCB3cmFwcGVkIGJ5ICpmdW5jKi4KKworICAgRm9sbG93cyB0aGUgY2hhaW4gb2YgOmF0dHI6YF9fd3JhcHBlZF9fYCBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdAorICAgb2JqZWN0IGluIHRoZSBjaGFpbi4KKworICAgKnN0b3AqIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGFjY2VwdGluZyBhbiBvYmplY3QgaW4gdGhlIHdyYXBwZXIgY2hhaW4KKyAgIGFzIGl0cyBzb2xlIGFyZ3VtZW50IHRoYXQgYWxsb3dzIHRoZSB1bndyYXBwaW5nIHRvIGJlIHRlcm1pbmF0ZWQgZWFybHkgaWYKKyAgIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdHJ1ZSB2YWx1ZS4gSWYgdGhlIGNhbGxiYWNrIG5ldmVyIHJldHVybnMgYSB0cnVlCisgICB2YWx1ZSwgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbiBpcyByZXR1cm5lZCBhcyB1c3VhbC4gRm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgc2lnbmF0dXJlYCB1c2VzIHRoaXMgdG8gc3RvcCB1bndyYXBwaW5nIGlmIGFueSBvYmplY3QgaW4gdGhlCisgICBjaGFpbiBoYXMgYSBgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGUgZGVmaW5lZC4KKworICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQuCisKKyAgICAiIiIKKyAgICBpZiBzdG9wIGlzIE5vbmU6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpCisgICAgZWxzZToKKyAgICAgICAgZGVmIF9pc193cmFwcGVyKGYpOgorICAgICAgICAgICAgcmV0dXJuIGhhc2F0dHIoZiwgJ19fd3JhcHBlZF9fJykgYW5kIG5vdCBzdG9wKGYpCisgICAgZiA9IGZ1bmMgICMgcmVtZW1iZXIgdGhlIG9yaWdpbmFsIGZ1bmMgZm9yIGVycm9yIHJlcG9ydGluZworICAgIG1lbW8gPSB7aWQoZil9ICMgTWVtb2lzZSBieSBpZCB0byB0b2xlcmF0ZSBub24taGFzaGFibGUgb2JqZWN0cworICAgIHdoaWxlIF9pc193cmFwcGVyKGZ1bmMpOgorICAgICAgICBmdW5jID0gZnVuYy5fX3dyYXBwZWRfXworICAgICAgICBpZF9mdW5jID0gaWQoZnVuYykKKyAgICAgICAgaWYgaWRfZnVuYyBpbiBtZW1vOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignd3JhcHBlciBsb29wIHdoZW4gdW53cmFwcGluZyB7IXJ9Jy5mb3JtYXQoZikpCisgICAgICAgIG1lbW8uYWRkKGlkX2Z1bmMpCisgICAgcmV0dXJuIGZ1bmMKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzb3VyY2UgY29kZSBleHRyYWN0aW9uCiBkZWYgaW5kZW50c2l6ZShsaW5lKToKICAgICAiIiJSZXR1cm4gdGhlIGluZGVudCBzaXplLCBpbiBzcGFjZXMsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgb2YgdGV4dC4iIiIKQEAgLTQ0MCw2ICs1MzksOSBAQAogICAgICIiIkdldCB0aGUgbW9kdWxlIG5hbWUsIHN1ZmZpeCwgbW9kZSwgYW5kIG1vZHVsZSB0eXBlIGZvciBhIGdpdmVuIGZpbGUuIiIiCiAgICAgd2FybmluZ3Mud2FybignaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkgaXMgZGVwcmVjYXRlZCcsIERlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgIDIpCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGltcG9ydCBpbXAKICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKICAgICBzdWZmaXhlcyA9IFsoLWxlbihzdWZmaXgpLCBzdWZmaXgsIG1vZGUsIG10eXBlKQogICAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCBtdHlwZSBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCldCkBAIC00NzYsNyArNTc4LDcgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogICAgICMgb25seSByZXR1cm4gYSBub24tZXhpc3RlbnQgZmlsZW5hbWUgaWYgdGhlIG1vZHVsZSBoYXMgYSBQRVAgMzAyIGxvYWRlcgotICAgIGlmIGhhc2F0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycpOgorICAgIGlmIGdldGF0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9yIGl0IGlzIGluIHRoZSBsaW5lY2FjaGUKICAgICBpZiBmaWxlbmFtZSBpbiBsaW5lY2FjaGUuY2FjaGU6CkBAIC01NDUsMTMgKzY0NywxMyBAQAogCiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIGFsbCB0aGUgbGluZXMKLSAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIElPRXJyb3IKKyAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIE9TRXJyb3IKICAgICBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAKICAgICBmaWxlID0gZ2V0ZmlsZShvYmplY3QpCiAgICAgc291cmNlZmlsZSA9IGdldHNvdXJjZWZpbGUob2JqZWN0KQogICAgIGlmIG5vdCBzb3VyY2VmaWxlIGFuZCBmaWxlWzoxXSArIGZpbGVbLTE6XSAhPSAnPD4nOgotICAgICAgICByYWlzZSBJT0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKKyAgICAgICAgcmFpc2UgT1NFcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCiAgICAgZmlsZSA9IHNvdXJjZWZpbGUgaWYgc291cmNlZmlsZSBlbHNlIGZpbGUKIAogICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCkBAIC01NjAsNyArNjYyLDcgQEAKICAgICBlbHNlOgogICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlKQogICAgIGlmIG5vdCBsaW5lczoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGdldCBzb3VyY2UgY29kZScpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQogCiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGxpbmVzLCAwCkBAIC01ODYsNyArNjg4LDcgQEAKICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc29ydCgpCiAgICAgICAgICAgICByZXR1cm4gbGluZXMsIGNhbmRpZGF0ZXNbMF1bMV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCiAKICAgICBpZiBpc21ldGhvZChvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KQEAgLTU5OCwxNCArNzAwLDE0IEBACiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5mX2NvZGUKICAgICBpZiBpc2NvZGUob2JqZWN0KToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob2JqZWN0LCAnY29fZmlyc3RsaW5lbm8nKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgZnVuY3Rpb24gZGVmaW5pdGlvbicpCiAgICAgICAgIGxudW0gPSBvYmplY3QuY29fZmlyc3RsaW5lbm8gLSAxCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUocideKFxzKmRlZlxzKXwoLiooPzwhXHcpbGFtYmRhKDp8XHMpKXxeKFxzKkApJykKICAgICAgICAgd2hpbGUgbG51bSA+IDA6CiAgICAgICAgICAgICBpZiBwYXQubWF0Y2gobGluZXNbbG51bV0pOiBicmVhawogICAgICAgICAgICAgbG51bSA9IGxudW0gLSAxCiAgICAgICAgIHJldHVybiBsaW5lcywgbG51bQotICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNvZGUgb2JqZWN0JykKKyAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCiAKIGRlZiBnZXRjb21tZW50cyhvYmplY3QpOgogICAgICIiIkdldCBsaW5lcyBvZiBjb21tZW50cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYW4gb2JqZWN0J3Mgc291cmNlIGNvZGUuCkBAIC02MTQsNyArNzE2LDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShvYmplY3QpCi0gICAgZXhjZXB0IChJT0Vycm9yLCBUeXBlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CkBAIC03MTAsNyArODEyLDcgQEAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgdGhlIGxpbmVzCiAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0IGFuZCB0aGUgbGluZSBudW1iZXIgaW5kaWNhdGVzIHdoZXJlIGluIHRoZQotICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gSU9FcnJvciBpcworICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gT1NFcnJvciBpcwogICAgIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQogCkBAIC03MjIsNyArODI0LDcgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHN0cmluZy4gIEFuCi0gICAgSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCisgICAgT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBnZXRzb3VyY2VsaW5lcyhvYmplY3QpCiAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCiAKQEAgLTExMjMsNyArMTIyNSw3IEBACiAgICAgICAgIHN0YXJ0ID0gbGluZW5vIC0gMSAtIGNvbnRleHQvLzIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKGZyYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBsaW5lcyA9IGluZGV4ID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RhcnQgPSBtYXgoc3RhcnQsIDEpCkBAIC0xMzQ1LDYgKzE0NDcsOSBAQAogICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLl9fZnVuY19fKQogICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz10dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSlbMTpdKQogCisgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPworICAgIG9iaiA9IHVud3JhcChvYmosIHN0b3A9KGxhbWJkYSBmOiBoYXNhdHRyKGYsICJfX3NpZ25hdHVyZV9fIikpKQorCiAgICAgdHJ5OgogICAgICAgICBzaWcgPSBvYmouX19zaWduYXR1cmVfXwogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTEzNTMsMTcgKzE0NTgsMTMgQEAKICAgICAgICAgaWYgc2lnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNpZwogCi0gICAgdHJ5OgotICAgICAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/Ci0gICAgICAgIHdyYXBwZWQgPSBvYmouX193cmFwcGVkX18KLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlKHdyYXBwZWQpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuRnVuY3Rpb25UeXBlKToKICAgICAgICAgcmV0dXJuIFNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKG9iaikKIAorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlKToKKyAgICAgICAgcmV0dXJuIFNpZ25hdHVyZS5mcm9tX2J1aWx0aW4ob2JqKQorCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIGZ1bmN0b29scy5wYXJ0aWFsKToKICAgICAgICAgc2lnID0gc2lnbmF0dXJlKG9iai5mdW5jKQogCkBAIC0xODQ1LDYgKzE5NDYsNjQgQEAKICAgICAgICAgICAgICAgICAgICByZXR1cm5fYW5ub3RhdGlvbj1hbm5vdGF0aW9ucy5nZXQoJ3JldHVybicsIF9lbXB0eSksCiAgICAgICAgICAgICAgICAgICAgX192YWxpZGF0ZV9wYXJhbWV0ZXJzX189RmFsc2UpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9idWlsdGluKGNscywgZnVuYyk6CisgICAgICAgIHMgPSBnZXRhdHRyKGZ1bmMsICJfX3RleHRfc2lnbmF0dXJlX18iLCBOb25lKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgcy5lbmRzd2l0aCgiLykiKToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICBzID0gc1s6LTJdICsgJyknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBraW5kID0gUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgIHMgPSAiZGVmIGZvbyIgKyBzICsgIjogcGFzcyIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UocykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobW9kdWxlLCBhc3QuTW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBhc3QuRnVuY3Rpb25EZWYKKyAgICAgICAgZiA9IG1vZHVsZS5ib2R5WzBdCisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGVtcHR5ID0gUGFyYW1ldGVyLmVtcHR5CisKKyAgICAgICAgZGVmIHAobmFtZV9ub2RlLCBkZWZhdWx0X25vZGUsIGRlZmF1bHQ9ZW1wdHkpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVfbm9kZS5hcmcKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWZhdWx0X25vZGUsIGFzdC5OdW0pOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBkZWZhdWx0Lm4KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkZWZhdWx0X25vZGUsIGFzdC5OYW1lQ29uc3RhbnQpOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBkZWZhdWx0X25vZGUudmFsdWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBraW5kLCBkZWZhdWx0PWRlZmF1bHQsIGFubm90YXRpb249ZW1wdHkpKQorCisgICAgICAgICMgbm9uLWtleXdvcmQtb25seSBwYXJhbWV0ZXJzCisgICAgICAgIGZvciBuYW1lLCBkZWZhdWx0IGluIHJldmVyc2VkKGxpc3QoaXRlcnRvb2xzLnppcF9sb25nZXN0KHJldmVyc2VkKGYuYXJncy5hcmdzKSwgcmV2ZXJzZWQoZi5hcmdzLmRlZmF1bHRzKSwgZmlsbHZhbHVlPU5vbmUpKSk6CisgICAgICAgICAgICBwKG5hbWUsIGRlZmF1bHQpCisKKyAgICAgICAgIyAqYXJncworICAgICAgICBpZiBmLmFyZ3MudmFyYXJnOgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfUE9TSVRJT05BTAorICAgICAgICAgICAgcChmLmFyZ3MudmFyYXJnLCBlbXB0eSkKKworICAgICAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5LRVlXT1JEX09OTFkKKyAgICAgICAgZm9yIG5hbWUsIGRlZmF1bHQgaW4gemlwKGYuYXJncy5rd29ubHlhcmdzLCBmLmFyZ3Mua3dfZGVmYXVsdHMpOgorICAgICAgICAgICAgcChuYW1lLCBkZWZhdWx0KQorCisgICAgICAgICMgKiprd2FyZ3MKKyAgICAgICAgaWYgZi5hcmdzLmt3YXJnOgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfS0VZV09SRAorICAgICAgICAgICAgcChmLmFyZ3Mua3dhcmcsIGVtcHR5KQorCisgICAgICAgIHJldHVybiBjbHMocGFyYW1ldGVycywgcmV0dXJuX2Fubm90YXRpb249Y2xzLmVtcHR5KQorCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyYW1ldGVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtZXRlcnMKQEAgLTIwNzIsMyArMjIzMSw2NCBAQAogICAgICAgICAgICAgcmVuZGVyZWQgKz0gJyAtPiB7fScuZm9ybWF0KGFubm8pCiAKICAgICAgICAgcmV0dXJuIHJlbmRlcmVkCisKK2RlZiBfbWFpbigpOgorICAgICIiIiBMb2dpYyBmb3IgaW5zcGVjdGluZyBhbiBvYmplY3QgZ2l2ZW4gYXQgY29tbWFuZCBsaW5lICIiIgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGltcG9ydCBpbXBvcnRsaWIKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnb2JqZWN0JywKKyAgICAgICAgIGhlbHA9IlRoZSBvYmplY3QgdG8gYmUgYW5hbHlzZWQuICIKKyAgICAgICAgICAgICAgIkl0IHN1cHBvcnRzIHRoZSAnbW9kdWxlOnF1YWxuYW1lJyBzeW50YXgiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctZCcsICctLWRldGFpbHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICBoZWxwPSdEaXNwbGF5IGluZm8gYWJvdXQgdGhlIG1vZHVsZSByYXRoZXIgdGhhbiBpdHMgc291cmNlIGNvZGUnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHRhcmdldCA9IGFyZ3Mub2JqZWN0CisgICAgbW9kX25hbWUsIGhhc19hdHRycywgYXR0cnMgPSB0YXJnZXQucGFydGl0aW9uKCI6IikKKyAgICB0cnk6CisgICAgICAgIG9iaiA9IG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG1vZF9uYW1lKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBtc2cgPSAiRmFpbGVkIHRvIGltcG9ydCB7fSAoe306IHt9KSIuZm9ybWF0KG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZXhjKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMpCisgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBleGl0KDIpCisKKyAgICBpZiBoYXNfYXR0cnM6CisgICAgICAgIHBhcnRzID0gYXR0cnMuc3BsaXQoIi4iKQorICAgICAgICBvYmogPSBtb2R1bGUKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgcGFydCkKKworICAgIGlmIG1vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgIHByaW50KCJDYW4ndCBnZXQgaW5mbyBmb3IgYnVpbHRpbiBtb2R1bGVzLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgxKQorCisgICAgaWYgYXJncy5kZXRhaWxzOgorICAgICAgICBwcmludCgnVGFyZ2V0OiB7fScuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIHByaW50KCdPcmlnaW46IHt9Jy5mb3JtYXQoZ2V0c291cmNlZmlsZShtb2R1bGUpKSkKKyAgICAgICAgcHJpbnQoJ0NhY2hlZDoge30nLmZvcm1hdChtb2R1bGUuX19jYWNoZWRfXykpCisgICAgICAgIGlmIG9iaiBpcyBtb2R1bGU6CisgICAgICAgICAgICBwcmludCgnTG9hZGVyOiB7fScuZm9ybWF0KHJlcHIobW9kdWxlLl9fbG9hZGVyX18pKSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBwcmludCgnU3VibW9kdWxlIHNlYXJjaCBwYXRoOiB7fScuZm9ybWF0KG1vZHVsZS5fX3BhdGhfXykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX18sIGxpbmVubyA9IGZpbmRzb3VyY2Uob2JqKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCdMaW5lOiB7fScuZm9ybWF0KGxpbmVubykpCisKKyAgICAgICAgcHJpbnQoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICBwcmludChnZXRzb3VyY2Uob2JqKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9pby5weSBiL0xpYi9pby5weQppbmRleCBiZGE0ZGVmLi4zOTg3OGI4IDEwMDY0NAotLS0gYS9MaWIvaW8ucHkKKysrIGIvTGliL2lvLnB5CkBAIC00LDcgKzQsNyBAQAogQXQgdGhlIHRvcCBvZiB0aGUgSS9PIGhpZXJhcmNoeSBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBJT0Jhc2UuIEl0CiBkZWZpbmVzIHRoZSBiYXNpYyBpbnRlcmZhY2UgdG8gYSBzdHJlYW0uIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgaXMgbm8KIHNlcGFyYXRpb24gYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHN0cmVhbXM7IGltcGxlbWVudGF0aW9ucyBhcmUKLWFsbG93ZWQgdG8gcmFpc2UgYW4gSU9FcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgorYWxsb3dlZCB0byByYWlzZSBhbiBPU0Vycm9yIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCiAKIEV4dGVuZGluZyBJT0Jhc2UgaXMgUmF3SU9CYXNlIHdoaWNoIGRlYWxzIHNpbXBseSB3aXRoIHRoZSByZWFkaW5nIGFuZAogd3JpdGluZyBvZiByYXcgYnl0ZXMgdG8gYSBzdHJlYW0uIEZpbGVJTyBzdWJjbGFzc2VzIFJhd0lPQmFzZSB0byBwcm92aWRlCmRpZmYgLS1naXQgYS9MaWIvaXBhZGRyZXNzLnB5IGIvTGliL2lwYWRkcmVzcy5weQppbmRleCBlYWJmZDZmLi45N2ZmMTNkIDEwMDY0NAotLS0gYS9MaWIvaXBhZGRyZXNzLnB5CisrKyBiL0xpYi9pcGFkZHJlc3MucHkKQEAgLTk3NSwxMyArOTc1LDI1IEBACiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgNDE5My4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gKHNlbGYubmV0d29ya19hZGRyZXNzLmlzX3ByaXZhdGUgYW5kCiAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcy5pc19wcml2YXRlKQogCiAgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzX3ByaXZhdGUKKworICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc191bnNwZWNpZmllZChzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGUgYWRkcmVzcyBpcyB1bnNwZWNpZmllZC4KIApAQCAtMTIyMSwxOSArMTIzMywzMCBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiByZXNlcnZlZF9uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCiAgICAgZGVmIGlzX3ByaXZhdGUoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgMTkxOC4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICBwcml2YXRlXzEwID0gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKQotICAgICAgICBwcml2YXRlXzE3MiA9IElQdjROZXR3b3JrKCcxNzIuMTYuMC4wLzEyJykKLSAgICAgICAgcHJpdmF0ZV8xOTIgPSBJUHY0TmV0d29yaygnMTkyLjE2OC4wLjAvMTYnKQotICAgICAgICByZXR1cm4gKHNlbGYgaW4gcHJpdmF0ZV8xMCBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gcHJpdmF0ZV8xNzIgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTkyKQorICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2NE5ldHdvcmsoJzAuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTAuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTI3LjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE2OS4yNTQuMC4wLzE2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNzIuMTYuMC4wLzEyJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjAvMjknKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjAuMTcwLzMxJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4yLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguMTguMC4wLzE1Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguNTEuMTAwLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzIwMy4wLjExMy4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyNDAuMC4wLjAvNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjU1LjI1NS4yNTUuMjU1LzMyJykpCisKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19tdWx0aWNhc3Qoc2VsZik6CkBAIC0xNDY2LDYgKzE0ODksMjEgQEAKICAgICAgICAgaWYgc2VsZi5fcHJlZml4bGVuID09IChzZWxmLl9tYXhfcHJlZml4bGVuIC0gMSk6CiAgICAgICAgICAgICBzZWxmLmhvc3RzID0gc2VsZi5fX2l0ZXJfXwogCisgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAobm90IChzZWxmLm5ldHdvcmtfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb2FkY2FzdF9hZGRyZXNzIGluIElQdjROZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLmlzX3ByaXZhdGUpCisKKwogCiBjbGFzcyBfQmFzZVY2OgogCkBAIC0xODIyLDE1ICsxODYwLDM2IEBACiAgICAgICAgIHJldHVybiBzZWxmIGluIHNpdGVsb2NhbF9uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCiAgICAgZGVmIGlzX3ByaXZhdGUoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgNDE5My4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICBwcml2YXRlX25ldHdvcmsgPSBJUHY2TmV0d29yaygnZmMwMDo6LzcnKQotICAgICAgICByZXR1cm4gc2VsZiBpbiBwcml2YXRlX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjZOZXR3b3JrKCc6OjEvMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6Oi8xMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6ZmZmZjowOjAvOTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzEwMDo6LzY0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjovMjMnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6Mjo6LzQ4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOmRiODo6LzMyJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjEwOjovMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmZTgwOjovMTAnKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIHRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvanNvbi9fX2luaXRfXy5weSBiL0xpYi9qc29uL19faW5pdF9fLnB5CmluZGV4IDQ4YTRmOGYuLmE0NTlmNzcgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL19faW5pdF9fLnB5CisrKyBiL0xpYi9qc29uL19faW5pdF9fLnB5CkBAIC0zOSw4ICszOSw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtMTQ2LDEzICsxNDUsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTIwOSwxMyArMjA3LDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0zMTMsNiArMzEwLDExIEBACiAgICAgVGhlIGBgZW5jb2RpbmdgYCBhcmd1bWVudCBpcyBpZ25vcmVkIGFuZCBkZXByZWNhdGVkLgogCiAgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd0aGUgSlNPTiBvYmplY3QgbXVzdCBiZSBzdHIsIG5vdCB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5fX2NsYXNzX18uX19uYW1lX18pKQorICAgIGlmIHMuc3RhcnRzd2l0aCh1J1x1ZmVmZicpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmV4cGVjdGVkIFVURi04IEJPTSAoZGVjb2RlIHVzaW5nIHV0Zi04LXNpZykiKQogICAgIGlmIChjbHMgaXMgTm9uZSBhbmQgb2JqZWN0X2hvb2sgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2ludCBpcyBOb25lIGFuZCBwYXJzZV9mbG9hdCBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfY29uc3RhbnQgaXMgTm9uZSBhbmQgb2JqZWN0X3BhaXJzX2hvb2sgaXMgTm9uZSBhbmQgbm90IGt3KToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2RlY29kZXIucHkgYi9MaWIvanNvbi9kZWNvZGVyLnB5CmluZGV4IDgwZDM0MjAuLjU5ZTVmNDEgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2RlY29kZXIucHkKKysrIGIvTGliL2pzb24vZGVjb2Rlci5weQpAQCAtMSw5ICsxLDYgQEAKICIiIkltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCiAiIiIKLWltcG9ydCBiaW5hc2NpaQogaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0CiAKIGZyb20ganNvbiBpbXBvcnQgc2Nhbm5lcgogdHJ5OgpAQCAtMTUsMTQgKzEyLDkgQEAKIAogRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMCiAKLWRlZiBfZmxvYXRjb25zdGFudHMoKToKLSAgICBfQllURVMgPSBiaW5hc2NpaS51bmhleGxpZnkoYic3RkY4MDAwMDAwMDAwMDAwN0ZGMDAwMDAwMDAwMDAwMCcpCi0gICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0xXSArIF9CWVRFU1s4Ol1bOjotMV0KLSAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywgX0JZVEVTKQotICAgIHJldHVybiBuYW4sIGluZiwgLWluZgotCi1OYU4sIFBvc0luZiwgTmVnSW5mID0gX2Zsb2F0Y29uc3RhbnRzKCkKK05hTiA9IGZsb2F0KCduYW4nKQorUG9zSW5mID0gZmxvYXQoJ2luZicpCitOZWdJbmYgPSBmbG9hdCgnLWluZicpCiAKIAogZGVmIGxpbmVjb2woZG9jLCBwb3MpOgpAQCAtMTk1LDggKzE4Nyw4IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIHBhaXJzX2FwcGVuZCgoa2V5LCB2YWx1ZSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCkBAIC0yMzksOCArMjMxLDggQEAKICAgICB3aGlsZSBUcnVlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgX2FwcGVuZCh2YWx1ZSkKICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQogICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CkBAIC0yNTAsNyArMjQyLDcgQEAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnLCc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6CiAgICAgICAgICAgICAgICAgZW5kICs9IDEKQEAgLTM2NSw2ICszNTcsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnNjYW5fb25jZShzLCBpZHgpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gSlNPTiBvYmplY3QgY291bGQgYmUgZGVjb2RlZCIpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcmV0dXJuIG9iaiwgZW5kCmRpZmYgLS1naXQgYS9MaWIvanNvbi9lbmNvZGVyLnB5IGIvTGliL2pzb24vZW5jb2Rlci5weQppbmRleCAxZDhiMjBjLi4wNTEzODM4IDEwMDY0NAotLS0gYS9MaWIvanNvbi9lbmNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2VuY29kZXIucHkKQEAgLTEyNSwxNCArMTI1LDEyIEBACiAgICAgICAgIElmIGluZGVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkKICAgICAgICAgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0CiAgICAgICAgIGluZGVudCBsZXZlbC4gIEFuIGluZGVudCBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuCi0gICAgICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0Ci0gICAgICAgIGl0ZW0gc2VwYXJhdG9yIGlzICcsICcsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcKLSAgICAgICAgd2hpdGVzcGFjZSB3aGVuIGluZGVudCBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgICBzZXBhcmF0b3JzPSgnLCcsICc6ICcpIHRvIGF2b2lkIHRoaXMuCisgICAgICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4KIAotICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQotICAgICAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04KLSAgICAgICAgcmVwcmVzZW50YXRpb24geW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6JykgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisgICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYW4gKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQorICAgICAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKSBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICAgICAgKCcsJywgJzogJykgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICAgICAgeW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6JykgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICAgICAgSWYgc3BlY2lmaWVkLCBkZWZhdWx0IGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cwogICAgICAgICB0aGF0IGNhbid0IG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlCkBAIC0xNDgsNiArMTQ2LDggQEAKICAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKICAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNlcGFyYXRvcnMKKyAgICAgICAgZWxpZiBpbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yID0gJywnCiAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CiAKQEAgLTE3NSw2ICsxNzUsNyBAQAogICAgIGRlZiBlbmNvZGUoc2VsZiwgbyk6CiAgICAgICAgICIiIlJldHVybiBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIGRhdGEgc3RydWN0dXJlLgogCisgICAgICAgID4+PiBmcm9tIGpzb24uZW5jb2RlciBpbXBvcnQgSlNPTkVuY29kZXIKICAgICAgICAgPj4+IEpTT05FbmNvZGVyKCkuZW5jb2RlKHsiZm9vIjogWyJiYXIiLCAiYmF6Il19KQogICAgICAgICAneyJmb28iOiBbImJhciIsICJiYXoiXX0nCiAKQEAgLTI5OCw5ICsyOTksMTMgQEAKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgJ2ZhbHNlJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIFN1YmNsYXNzZXMgb2YgaW50L2Zsb2F0IG1heSBvdmVycmlkZSBfX3N0cl9fLCBidXQgd2Ugc3RpbGwKKyAgICAgICAgICAgICAgICAjIHdhbnQgdG8gZW5jb2RlIHRoZW0gYXMgaW50ZWdlcnMvZmxvYXRzIGluIEpTT04uIE9uZSBleGFtcGxlCisgICAgICAgICAgICAgICAgIyB3aXRoaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaXMgSW50RW51bS4KKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIoaW50KHZhbHVlKSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3ZlIGZvciBpbnQKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKQEAgLTMwOSw4ICszMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2h1bmtzCiAgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKICAgICAgICAgICAgIHlpZWxkICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCkBAIC0zNDcsNyArMzUxLDggQEAKICAgICAgICAgICAgICMgSmF2YVNjcmlwdCBpcyB3ZWFrbHkgdHlwZWQgZm9yIHRoZXNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0bwogICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0uICBNYW55IGVuY29kZXJzIHNlZW0gdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpcy4KICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGZsb2F0KToKLSAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoa2V5KQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGZsb2F0KGtleSkpCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJwogICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6CkBAIC0zNTUsNyArMzYwLDggQEAKICAgICAgICAgICAgIGVsaWYga2V5IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ251bGwnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQpOgotICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBzdHIoaW50KGtleSkpCiAgICAgICAgICAgICBlbGlmIF9za2lwa2V5czoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKQEAgLTM3NSw5ICszODEsMTEgQEAKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIHlpZWxkIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KHZhbHVlKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2xpc3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKQEAgLTM4NSw4ICszOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2h1bmtzCiAgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKICAgICAgICAgICAgIHlpZWxkICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCkBAIC00MDQsMTUgKzQxMSwxNSBAQAogICAgICAgICBlbGlmIG8gaXMgRmFsc2U6CiAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBpbnQpOgotICAgICAgICAgICAgeWllbGQgc3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgc3RyKGludChvKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKLSAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihvKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihmbG9hdChvKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZV9saXN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGRpY3QpOgotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQpAQCAtNDIwLDggKzQyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCiAgICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBvCiAgICAgICAgICAgICBvID0gX2RlZmF1bHQobykKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCiAgICAgcmV0dXJuIF9pdGVyZW5jb2RlCmRpZmYgLS1naXQgYS9MaWIvanNvbi9zY2FubmVyLnB5IGIvTGliL2pzb24vc2Nhbm5lci5weQppbmRleCAyM2VlZjYxLi44NjQyNmNkIDEwMDY0NAotLS0gYS9MaWIvanNvbi9zY2FubmVyLnB5CisrKyBiL0xpYi9qc29uL3NjYW5uZXIucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzdHJpbmdbaWR4XQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oaWR4KQogCiAgICAgICAgIGlmIG5leHRjaGFyID09ICciJzoKICAgICAgICAgICAgIHJldHVybiBwYXJzZV9zdHJpbmcoc3RyaW5nLCBpZHggKyAxLCBzdHJpY3QpCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJy0nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDldID09ICctSW5maW5pdHknOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnN0YW50KCctSW5maW5pdHknKSwgaWR4ICsgOQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICBkZWYgc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdG9vbC5weSBiL0xpYi9qc29uL3Rvb2wucHkKaW5kZXggZWNmOWM0Ny4uN2RiNDUyOCAxMDA2NDQKLS0tIGEvTGliL2pzb24vdG9vbC5weQorKysgYi9MaWIvanNvbi90b29sLnB5CkBAIC0zMSw4ICszMSw3IEBACiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGUpCiAgICAgd2l0aCBvdXRmaWxlOgotICAgICAgICBqc29uLmR1bXAob2JqLCBvdXRmaWxlLCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBqc29uLmR1bXAob2JqLCBvdXRmaWxlLCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpCiAgICAgICAgIG91dGZpbGUud3JpdGUoJ1xuJykKIAogCmRpZmYgLS1naXQgYS9MaWIva2V5d29yZC5weSBiL0xpYi9rZXl3b3JkLnB5CmluZGV4IGRhZDM5Y2MuLjZlMWU4ODIgMTAwNzU1Ci0tLSBhL0xpYi9rZXl3b3JkLnB5CisrKyBiL0xpYi9rZXl3b3JkLnB5CkBAIC02MCw2ICs2MCwxMiBAQAogICAgIGlmIGxlbihhcmdzKSA+IDE6IG9wdGZpbGUgPSBhcmdzWzFdCiAgICAgZWxzZTogb3B0ZmlsZSA9ICJMaWIva2V5d29yZC5weSIKIAorICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldCwgdGFraW5nIGNhcmUgdG8gcHJlc2VydmUgaXRzCisgICAgIyBuZXdsaW5lIGNvbnZlbnRpb24uCisgICAgd2l0aCBvcGVuKG9wdGZpbGUsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQorICAgIG5sID0gZm9ybWF0WzBdW2xlbihmb3JtYXRbMF0uc3RyaXAoKSk6XSBpZiBmb3JtYXQgZWxzZSAnXG4nCisKICAgICAjIHNjYW4gdGhlIHNvdXJjZSBmaWxlIGZvciBrZXl3b3JkcwogICAgIHdpdGggb3BlbihpcHRmaWxlKSBhcyBmcDoKICAgICAgICAgc3RycHJvZyA9IHJlLmNvbXBpbGUoJyIoW14iXSspIicpCkBAIC02OCwyNiArNzQsMjEgQEAKICAgICAgICAgICAgIGlmICd7MSwgIicgaW4gbGluZToKICAgICAgICAgICAgICAgICBtYXRjaCA9IHN0cnByb2cuc2VhcmNoKGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsXG4iKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgJyIgKyBtYXRjaC5ncm91cCgxKSArICInLCIgKyBubCkKICAgICBsaW5lcy5zb3J0KCkKIAotICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldAotICAgIHdpdGggb3BlbihvcHRmaWxlKSBhcyBmcDoKLSAgICAgICAgZm9ybWF0ID0gZnAucmVhZGxpbmVzKCkKLQotICAgICMgaW5zZXJ0IHRoZSBsaW5lcyBvZiBrZXl3b3JkcworICAgICMgaW5zZXJ0IHRoZSBsaW5lcyBvZiBrZXl3b3JkcyBpbnRvIHRoZSBza2VsZXRvbgogICAgIHRyeToKLSAgICAgICAgc3RhcnQgPSBmb3JtYXQuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS1cbiIpICsgMQotICAgICAgICBlbmQgPSBmb3JtYXQuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tXG4iKQorICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLSIgKyBubCkgKyAxCisgICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpCiAgICAgICAgIGZvcm1hdFtzdGFydDplbmRdID0gbGluZXMKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgidGFyZ2V0IGRvZXMgbm90IGNvbnRhaW4gZm9ybWF0IG1hcmtlcnNcbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAjIHdyaXRlIHRoZSBvdXRwdXQgZmlsZQotICAgIGZwID0gb3BlbihvcHRmaWxlLCAndycpCi0gICAgZnAud3JpdGUoJycuam9pbihmb3JtYXQpKQotICAgIGZwLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgJ3cnLCBuZXdsaW5lPScnKSBhcyBmcDoKKyAgICAgICAgZnAud3JpdGVsaW5lcyhmb3JtYXQpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKaW5kZXggMjI3NmRjOS4uMzM5NzUwZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CisrKyBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQpAQCAtOTYsOCArOTYsNyBAQAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgICJHZW5lcmF0b3IgdGhhdCByZXR1cm5zIHRoZSBsZWF2ZXMgb2YgdGhlIHRyZWUiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogICAgICAgICBpZiBub3Qgc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgIHlpZWxkIHNlbGYKIApAQCAtMjc3LDcgKzI3Niw2IEBACiAgICAgc3ViLWl0ZXJhYmxlcyIiIgogICAgIGZvciB4IGluIHNlcXVlbmNlOgogICAgICAgICBpZiBpc2luc3RhbmNlKHgsIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIHkgaW4gcmVjX3Rlc3QoeCwgdGVzdF9mdW5jKToKLSAgICAgICAgICAgICAgICB5aWVsZCB5CisgICAgICAgICAgICB5aWVsZCBmcm9tIHJlY190ZXN0KHgsIHRlc3RfZnVuYykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHlpZWxkIHRlc3RfZnVuYyh4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weSBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKaW5kZXggNjBkMjE5Zi4uNmUyNTljNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CkBAIC0xMjksNiArMTI5LDI5IEBACiAgICAgaW1wID0gTm9kZShzeW1zLmltcG9ydF9mcm9tLCBjaGlsZHJlbikKICAgICByZXR1cm4gaW1wCiAKK2RlZiBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKToKKyAgICAiIiJSZXR1cm5zIGFuIGltcG9ydCBzdGF0ZW1lbnQgYW5kIGNhbGxzIGEgbWV0aG9kCisgICAgb2YgdGhlIG1vZHVsZToKKworICAgIGltcG9ydCBtb2R1bGUKKyAgICBtb2R1bGUubmFtZSgpIiIiCisgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQorICAgIGlmIG9iai50eXBlID09IHN5bXMuYXJnbGlzdDoKKyAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCisgICAgZWxzZToKKyAgICAgICAgbmV3YXJnbGlzdCA9IE5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQorICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQorICAgIGlmIGFmdGVyOgorICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCisgICAgbmV3ID0gTm9kZShzeW1zLnBvd2VyLAorICAgICAgICAgICAgICAgQXR0cihOYW1lKG5hbWVzWzBdKSwgTmFtZShuYW1lc1sxXSkpICsKKyAgICAgICAgICAgICAgIFtOb2RlKHN5bXMudHJhaWxlciwKKyAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCisgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CisgICAgcmV0dXJuIG5ldworCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgRGV0ZXJtaW5lIHdoZXRoZXIgYSBub2RlIHJlcHJlc2VudHMgYSBnaXZlbiBsaXRlcmFsCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2VjODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weQpAQCAtMCwwICsxLDM0IEBACisiIiJGaXhlciB0aGF0IHJlcGxhY2VzIGRlcHJlY2F0ZWQgdW5pdHRlc3QgbWV0aG9kIG5hbWVzLiIiIgorCisjIEF1dGhvcjogRXppbyBNZWxvdHRpCisKK2Zyb20gLi5maXhlcl9iYXNlIGltcG9ydCBCYXNlRml4Citmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQorCitOQU1FUyA9IGRpY3QoCisgICAgYXNzZXJ0Xz0iYXNzZXJ0VHJ1ZSIsCisgICAgYXNzZXJ0RXF1YWxzPSJhc3NlcnRFcXVhbCIsCisgICAgYXNzZXJ0Tm90RXF1YWxzPSJhc3NlcnROb3RFcXVhbCIsCisgICAgYXNzZXJ0QWxtb3N0RXF1YWxzPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzPSJhc3NlcnROb3RBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0UmVnZXhwTWF0Y2hlcz0iYXNzZXJ0UmVnZXgiLAorICAgIGFzc2VydFJhaXNlc1JlZ2V4cD0iYXNzZXJ0UmFpc2VzUmVnZXgiLAorICAgIGZhaWxVbmxlc3NFcXVhbD0iYXNzZXJ0RXF1YWwiLAorICAgIGZhaWxJZkVxdWFsPSJhc3NlcnROb3RFcXVhbCIsCisgICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgZmFpbElmQWxtb3N0RXF1YWw9ImFzc2VydE5vdEFsbW9zdEVxdWFsIiwKKyAgICBmYWlsVW5sZXNzPSJhc3NlcnRUcnVlIiwKKyAgICBmYWlsVW5sZXNzUmFpc2VzPSJhc3NlcnRSYWlzZXMiLAorICAgIGZhaWxJZj0iYXNzZXJ0RmFsc2UiLAorKQorCisKK2NsYXNzIEZpeEFzc2VydHMoQmFzZUZpeCk6CisKKyAgICBQQVRURVJOID0gIiIiCisgICAgICAgICAgICAgIHBvd2VyPCBhbnkrIHRyYWlsZXI8ICcuJyBtZXRoPSglcyk+IGFueSogPgorICAgICAgICAgICAgICAiIiIgJSAnfCcuam9pbihtYXAocmVwciwgTkFNRVMpKQorCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm1ldGgiXVswXQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZShOQU1FU1tzdHIobmFtZSldLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNmJlMTFjZC4uZmIyOTczYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC02LDkgKzYsOCBAQAogaW50ZXJuKHMpIC0+IHN5cy5pbnRlcm4ocykiIiIKIAogIyBMb2NhbCBpbXBvcnRzCi1mcm9tIC4uIGltcG9ydCBweXRyZWUKIGZyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKLWZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lLCBBdHRyLCB0b3VjaF9pbXBvcnQKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKIAogCiBjbGFzcyBGaXhJbnRlcm4oZml4ZXJfYmFzZS5CYXNlRml4KToKQEAgLTI2LDIxICsyNSw3IEBACiAgICAgIiIiCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBzeW1zID0gc2VsZi5zeW1zCi0gICAgICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKLSAgICAgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgotICAgICAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gcHl0cmVlLk5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQotICAgICAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KLSAgICAgICAgaWYgYWZ0ZXI6Ci0gICAgICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCi0gICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIoTmFtZSgic3lzIiksIE5hbWUoImludGVybiIpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtweXRyZWUuTm9kZShzeW1zLnRyYWlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQotICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICAgICAgbmFtZXMgPSAoJ3N5cycsICdpbnRlcm4nKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQogICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ3N5cycsIG5vZGUpCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi45M2JhZTkwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTkwLDExICs5MCwxMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGJhY2t1cCk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW1vdmUgYmFja3VwICVzIiwgYmFja3VwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW5hbWUgJXMgdG8gJXMiLCBmaWxlbmFtZSwgYmFja3VwKQogICAgICAgICAjIEFjdHVhbGx5IHdyaXRlIHRoZSBuZXcgZmlsZQogICAgICAgICB3cml0ZSA9IHN1cGVyKFN0ZG91dFJlZmFjdG9yaW5nVG9vbCwgc2VsZikud3JpdGVfZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi43ZjFjNTY0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5jNGExYmUzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC0xOTQsOCArMTk0LDcgQEAKIAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogCiAgICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgpAQCAtMjc0LDE2ICsyNzMsMTQgQEAKICAgICBkZWYgcG9zdF9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcG9zdC1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIG5vZGUgaW4gY2hpbGQucG9zdF9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucG9zdF9vcmRlcigpCiAgICAgICAgIHlpZWxkIHNlbGYKIAogICAgIGRlZiBwcmVfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByZS1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wcmVfb3JkZXIoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBub2RlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLnByZV9vcmRlcigpCiAKICAgICBkZWYgX3ByZWZpeF9nZXR0ZXIoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQppbmRleCAyMDFlMTkzLi44MTAwMzE3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi43MzFjNDAzIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHByaW50KCJTY2FubmluZyIsIGRpciwgIi4uLiIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CmluZGV4IDJmMDhmOTMuLjA2YjAwMzMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CkBAIC0yODIsNiArMjgyLDY1IEBACiAgICAgICAgIGIgPSAiIiJmKCphcmdzLCAqKmt3ZHMpIiIiCiAgICAgICAgIHNlbGYuY2hlY2soYSwgYikKIAorY2xhc3MgVGVzdF9yZWxvYWQoRml4ZXJUZXN0Q2FzZSk6CisgICAgZml4ZXIgPSAicmVsb2FkIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgIyBQRVAgOCBjb21tZW50cworICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKCBhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHMgPSAiIiJyZWxvYWQoYT0xKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgZykiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKwogY2xhc3MgVGVzdF9pbnRlcm4oRml4ZXJUZXN0Q2FzZSk6CiAgICAgZml4ZXIgPSAiaW50ZXJuIgogCkBAIC00NTc2LDMgKzQ2MzUsNTMgQEAKICAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CiAgICAgICAgIHMgPSAiIiJmKHN5cy5leGl0ZnVuYykiIiIKICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworCitjbGFzcyBUZXN0X2Fzc2VydHMoRml4ZXJUZXN0Q2FzZSk6CisKKyAgICBmaXhlciA9ICJhc3NlcnRzIgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0XyhUcnVlKScsICdzZWxmLmFzc2VydFRydWUoVHJ1ZSknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMiknLCAnc2VsZi5hc3NlcnRFcXVhbCgyLCAyKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydE5vdEVxdWFscygyLCAzKScsICdzZWxmLmFzc2VydE5vdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWxzKDIsIDMpJywgJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NFcXVhbCgyLCAyKScsICdzZWxmLmFzc2VydEVxdWFsKDIsIDIpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmRXF1YWwoMiwgMyknLCAnc2VsZi5hc3NlcnROb3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgyLCAzKScsICdzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmQWxtb3N0RXF1YWwoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3MoVHJ1ZSknLCAnc2VsZi5hc3NlcnRUcnVlKFRydWUpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc1JhaXNlcyhmb28pJywgJ3NlbGYuYXNzZXJ0UmFpc2VzKGZvbyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWYoRmFsc2UpJywgJ3NlbGYuYXNzZXJ0RmFsc2UoRmFsc2UpJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGIsIGEgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF92YXJpYW50cyhzZWxmKToKKyAgICAgICAgYiA9ICdlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzJworICAgICAgICBhID0gJ2VxID0gc2VsZi5hc3NlcnRFcXVhbCcKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDMsIG1zZz0iZmFpbCIpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMywgbXNnPSJmYWlsIiknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscygyLCAzLCBtc2c9ImZhaWwiKSAjIGZvbycKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsKDIsIDMsIG1zZz0iZmFpbCIpICMgZm9vJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMgKDIsIDMpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwgKDIsIDMpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnICBzZWxmLmFzc2VydEVxdWFscyAoMiwgMyknCisgICAgICAgIGEgPSAnICBzZWxmLmFzc2VydEVxdWFsICgyLCAzKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzZWxmLnVuY2hhbmdlZCgnc2VsZi5hc3NlcnRFcXVhbHNPblNhdHVyZGF5JykKKyAgICAgICAgc2VsZi51bmNoYW5nZWQoJ3NlbGYuYXNzZXJ0RXF1YWxzT25TYXR1cmRheSgzLCA1KScpCmRpZmYgLS1naXQgYS9MaWIvbGluZWNhY2hlLnB5IGIvTGliL2xpbmVjYWNoZS5weQppbmRleCBjM2YyYzNmLi4wMmE5ZWI1IDEwMDY0NAotLS0gYS9MaWIvbGluZWNhY2hlLnB5CisrKyBiL0xpYi9saW5lY2FjaGUucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBuby1vcCBmb3IgZmlsZXMgbG9hZGVkIHZpYSBhIF9fbG9hZGVyX18KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBkZWwgY2FjaGVbZmlsZW5hbWVdCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBzaXplICE9IHN0YXQuc3Rfc2l6ZSBvciBtdGltZSAhPSBzdGF0LnN0X210aW1lOgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgaWYgbmFtZSBhbmQgZ2V0X3NvdXJjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRfc291cmNlKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICB0cnk6CiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmdWxsbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBbXQogICAgIGlmIGxpbmVzIGFuZCBub3QgbGluZXNbLTFdLmVuZHN3aXRoKCdcbicpOgogICAgICAgICBsaW5lc1stMV0gKz0gJ1xuJwpkaWZmIC0tZ2l0IGEvTGliL2xvY2FsZS5weSBiL0xpYi9sb2NhbGUucHkKaW5kZXggZDJhODg1ZC4uMmU4MmM5NSAxMDA2NDQKLS0tIGEvTGliL2xvY2FsZS5weQorKysgYi9MaWIvbG9jYWxlLnB5CkBAIC01NTQsOCArNTU0LDggQEAKICAgICAjIE9uIFdpbjMyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBBTlNJIGNvZGUgcGFnZQogICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLiIiIgotICAgICAgICBpbXBvcnQgX2xvY2FsZQotICAgICAgICByZXR1cm4gX2xvY2FsZS5fZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQorICAgICAgICByZXR1cm4gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiBlbHNlOgogICAgICMgT24gVW5peCwgaWYgQ09ERVNFVCBpcyBhdmFpbGFibGUsIHVzZSB0aGF0LgogICAgIHRyeToKQEAgLTU3NCwyNyArNTc0LDE2IEBACiAgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZywKICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIiIiCisgICAgICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgICAgIGlmIGRvX3NldGxvY2FsZToKICAgICAgICAgICAgICAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQ1RZUEUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgc2V0dGluZyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCi0gICAgICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIG5vdGhpbmcgd2lsbCBjcmFzaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmVzdWx0ID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCisgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCBvbGRsb2MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5IGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKaW5kZXggN2Y5NGUzOS4uOWI0MWI5ZCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKKysrIGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKIAogIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCkBAIC0xMjMsMjAgKzEyMywyMiBAQAogREVCVUcgPSAxMAogTk9UU0VUID0gMAogCi1fbGV2ZWxOYW1lcyA9IHsKLSAgICBDUklUSUNBTCA6ICdDUklUSUNBTCcsCi0gICAgRVJST1IgOiAnRVJST1InLAotICAgIFdBUk5JTkcgOiAnV0FSTklORycsCi0gICAgSU5GTyA6ICdJTkZPJywKLSAgICBERUJVRyA6ICdERUJVRycsCi0gICAgTk9UU0VUIDogJ05PVFNFVCcsCi0gICAgJ0NSSVRJQ0FMJyA6IENSSVRJQ0FMLAotICAgICdFUlJPUicgOiBFUlJPUiwKLSAgICAnV0FSTicgOiBXQVJOSU5HLAotICAgICdXQVJOSU5HJyA6IFdBUk5JTkcsCi0gICAgJ0lORk8nIDogSU5GTywKLSAgICAnREVCVUcnIDogREVCVUcsCi0gICAgJ05PVFNFVCcgOiBOT1RTRVQsCitfbGV2ZWxUb05hbWUgPSB7CisgICAgQ1JJVElDQUw6ICdDUklUSUNBTCcsCisgICAgRVJST1I6ICdFUlJPUicsCisgICAgV0FSTklORzogJ1dBUk5JTkcnLAorICAgIElORk86ICdJTkZPJywKKyAgICBERUJVRzogJ0RFQlVHJywKKyAgICBOT1RTRVQ6ICdOT1RTRVQnLAorfQorX25hbWVUb0xldmVsID0geworICAgICdDUklUSUNBTCc6IENSSVRJQ0FMLAorICAgICdFUlJPUic6IEVSUk9SLAorICAgICdXQVJOJzogV0FSTklORywKKyAgICAnV0FSTklORyc6IFdBUk5JTkcsCisgICAgJ0lORk8nOiBJTkZPLAorICAgICdERUJVRyc6IERFQlVHLAorICAgICdOT1RTRVQnOiBOT1RTRVQsCiB9CiAKIGRlZiBnZXRMZXZlbE5hbWUobGV2ZWwpOgpAQCAtMTUzLDcgKzE1NSw3IEBACiAKICAgICBPdGhlcndpc2UsIHRoZSBzdHJpbmcgIkxldmVsICVzIiAlIGxldmVsIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIHJldHVybiBfbGV2ZWxOYW1lcy5nZXQobGV2ZWwsICgiTGV2ZWwgJXMiICUgbGV2ZWwpKQorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkKIAogZGVmIGFkZExldmVsTmFtZShsZXZlbCwgbGV2ZWxOYW1lKToKICAgICAiIiIKQEAgLTE2Myw4ICsxNjUsOCBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCkBAIC0xNzIsOSArMTc0LDkgQEAKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC04ODAsMTYgKzg4MiwzMCBAQAogICAgICAgICBUaGUgcmVjb3JkIHdoaWNoIHdhcyBiZWluZyBwcm9jZXNzZWQgaXMgcGFzc2VkIGluIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcmFpc2VFeGNlcHRpb25zIGFuZCBzeXMuc3RkZXJyOiAgIyBzZWUgaXNzdWUgMTM4MDcKLSAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHQsIHYsIHRiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgZWlbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBzeXMuc3RkZXJyKQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIExvZ2dpbmcgZXJyb3IgLS0tXG4nKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24odCwgdiwgdGIsIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ2FsbCBzdGFjazpcbicpCisgICAgICAgICAgICAgICAgIyBXYWxrIHRoZSBzdGFjayBmcmFtZSB1cCB1bnRpbCB3ZSdyZSBvdXQgb2YgbG9nZ2luZywKKyAgICAgICAgICAgICAgICAjIHNvIGFzIHRvIHByaW50IHRoZSBjYWxsaW5nIGNvbnRleHQuCisgICAgICAgICAgICAgICAgZnJhbWUgPSB0Yi50Yl9mcmFtZQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZSBhbmQgb3MucGF0aC5kaXJuYW1lKGZyYW1lLmZfY29kZS5jb19maWxlbmFtZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgX19wYXRoX19bMF0pOgorICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLmZfYmFjaworICAgICAgICAgICAgICAgIGlmIGZyYW1lOgorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soZnJhbWUsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGNvdWxkbid0IGZpbmQgdGhlIHJpZ2h0IHN0YWNrIGZyYW1lLCBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQorICAgICAgICAgICAgICAgICMgSXNzdWUgMTg2NzE6IG91dHB1dCBsb2dnaW5nIG1lc3NhZ2UgYW5kIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzOiAlc1xuJyAlIChyZWNvcmQubXNnLCByZWNvcmQuYXJncykpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05MzksOSArOTU1LDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtMTgzMyw3ICsxODQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTg0MSw3ICsxODU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uYjg4MmE2MiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtNjEsMTEgKzYxLDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDQsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzIzNyw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC03MjksNiArNzMyLDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzc1MSw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArODAyLDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzgxMSwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwyNSArODQ3LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmFyZ3MsIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtODY1LDEzICs4ODIsMTQgQEAKICAgICAgICAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IDEKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywgcG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lLCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQogICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgc2VsZi5hYm9ydCA9IDAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSByZWFkeQorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKIAogICAgICAgICBkZWYgc2VydmVfdW50aWxfc3RvcHBlZChzZWxmKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTg4OSwxNiArOTA3LDE4IEBACiAKICAgICBjbGFzcyBTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCwgdmVyaWZ5KToKICAgICAgICAgICAgIHN1cGVyKFNlcnZlciwgc2VsZikuX19pbml0X18oKQogICAgICAgICAgICAgc2VsZi5yY3ZyID0gcmN2cgogICAgICAgICAgICAgc2VsZi5oZGxyID0gaGRscgogICAgICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQogCiAgICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLnJjdnIocG9ydD1zZWxmLnBvcnQsIGhhbmRsZXI9c2VsZi5oZGxyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnk9c2VsZi52ZXJpZnkpCiAgICAgICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0KICAgICAgICAgICAgIHNlbGYucmVhZHkuc2V0KCkKQEAgLTkwOCw3ICs5MjgsNyBAQAogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogICAgICAgICAgICAgc2VydmVyLnNlcnZlX3VudGlsX3N0b3BwZWQoKQogCi0gICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCkKKyAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0LCB2ZXJpZnkpCiAKIGRlZiBzdG9wTGlzdGVuaW5nKCk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weSBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CmluZGV4IGRkZWM3ZGQuLmIyZTdkNDQgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CisrKyBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CkBAIC03Miw5ICs3Miw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLnNob3VsZFJvbGxvdmVyKHJlY29yZCk6CiAgICAgICAgICAgICAgICAgc2VsZi5kb1JvbGxvdmVyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuRmlsZUhhbmRsZXIuZW1pdChzZWxmLCByZWNvcmQpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgcm90YXRpb25fZmlsZW5hbWUoc2VsZiwgZGVmYXVsdF9uYW1lKToKQEAgLTIwMSwxMSArMTk5LDEyIEBACiAgICAgSWYgYmFja3VwQ291bnQgaXMgPiAwLCB3aGVuIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXBDb3VudAogICAgIGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKToKICAgICAgICAgQmFzZVJvdGF0aW5nSGFuZGxlci5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZywgZGVsYXkpCiAgICAgICAgIHNlbGYud2hlbiA9IHdoZW4udXBwZXIoKQogICAgICAgICBzZWxmLmJhY2t1cENvdW50ID0gYmFja3VwQ291bnQKICAgICAgICAgc2VsZi51dGMgPSB1dGMKKyAgICAgICAgc2VsZi5hdFRpbWUgPSBhdFRpbWUKICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIHJlYWwgcm9sbG92ZXIgaW50ZXJ2YWwsIHdoaWNoIGlzIGp1c3QgdGhlIG51bWJlciBvZgogICAgICAgICAjIHNlY29uZHMgYmV0d2VlbiByb2xsb3ZlcnMuICBBbHNvIHNldCB0aGUgZmlsZW5hbWUgc3VmZml4IHVzZWQgd2hlbgogICAgICAgICAjIGEgcm9sbG92ZXIgb2NjdXJzLiAgQ3VycmVudCAnd2hlbicgZXZlbnRzIHN1cHBvcnRlZDoKQEAgLTI3NSw5ICsyNzQsMjIgQEAKICAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gdFszXQogICAgICAgICAgICAgY3VycmVudE1pbnV0ZSA9IHRbNF0KICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQgPSB0WzVdCi0gICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIG1pZG5pZ2h0Ci0gICAgICAgICAgICByID0gX01JRE5JR0hUIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQpCisgICAgICAgICAgICBjdXJyZW50RGF5ID0gdFs2XQorICAgICAgICAgICAgIyByIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IGJldHdlZW4gbm93IGFuZCB0aGUgbmV4dCByb3RhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi5hdFRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSBfTUlETklHSFQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcm90YXRlX3RzID0gKChzZWxmLmF0VGltZS5ob3VyICogNjAgKyBzZWxmLmF0VGltZS5taW51dGUpKjYwICsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hdFRpbWUuc2Vjb25kKQorCisgICAgICAgICAgICByID0gcm90YXRlX3RzIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCisgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgICMgUm90YXRlIHRpbWUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUgKGZvciBleGFtcGxlIHdoZW4KKyAgICAgICAgICAgICAgICAjIHNlbGYucm90YXRlQXQgaXMgMTM6NDUgYW5kIGl0IG5vdyAxNDoxNSksIHJvdGF0aW9uIGlzCisgICAgICAgICAgICAgICAgIyB0b21vcnJvdy4KKyAgICAgICAgICAgICAgICByICs9IF9NSUROSUdIVAorICAgICAgICAgICAgICAgIGN1cnJlbnREYXkgPSAoY3VycmVudERheSArIDEpICUgNwogICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudFRpbWUgKyByCiAgICAgICAgICAgICAjIElmIHdlIGFyZSByb2xsaW5nIG92ZXIgb24gYSBjZXJ0YWluIGRheSwgYWRkIGluIHRoZSBudW1iZXIgb2YgZGF5cyB1bnRpbAogICAgICAgICAgICAgIyB0aGUgbmV4dCByb2xsb3ZlciwgYnV0IG9mZnNldCBieSAxIHNpbmNlIHdlIGp1c3QgY2FsY3VsYXRlZCB0aGUgdGltZQpAQCAtMjk1LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAjIFRoaXMgaXMgYmVjYXVzZSB0aGUgYWJvdmUgdGltZSBjYWxjdWxhdGlvbiB0YWtlcyB1cyB0byBtaWRuaWdodCBvbiB0aGlzCiAgICAgICAgICAgICAjIGRheSwgaS5lLiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGF5LgogICAgICAgICAgICAgaWYgc2VsZi53aGVuLnN0YXJ0c3dpdGgoJ1cnKToKLSAgICAgICAgICAgICAgICBkYXkgPSB0WzZdICMgMCBpcyBNb25kYXkKKyAgICAgICAgICAgICAgICBkYXkgPSBjdXJyZW50RGF5ICMgMCBpcyBNb25kYXkKICAgICAgICAgICAgICAgICBpZiBkYXkgIT0gc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRheSA8IHNlbGYuZGF5T2ZXZWVrOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1RvV2FpdCA9IHNlbGYuZGF5T2ZXZWVrIC0gZGF5CkBAIC00NDQsMTEgKzQ1Niw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc3RhdCB0aGUgZmlsZSBieSBwYXRoLCBjaGVja2luZyBmb3IgZXhpc3RlbmNlCiAgICAgICAgICAgICBzcmVzID0gb3Muc3RhdChzZWxmLmJhc2VGaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBzcmVzID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzcmVzID0gTm9uZQogICAgICAgICAjIGNvbXBhcmUgZmlsZSBzeXN0ZW0gc3RhdCB3aXRoIHRoYXQgb2Ygb3VyIHN0cmVhbSBmaWxlIGhhbmRsZQogICAgICAgICBpZiBub3Qgc3JlcyBvciBzcmVzW1NUX0RFVl0gIT0gc2VsZi5kZXYgb3Igc3Jlc1tTVF9JTk9dICE9IHNlbGYuaW5vOgogICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgbm90IE5vbmU6CkBAIC00ODUsNiArNDk0LDEwIEBACiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5jbG9zZU9uRXJyb3IgPSBGYWxzZQogICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUKQEAgLTUwMCwxNSArNTEzLDE3IEBACiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlCiAgICAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGlmIGhhc2F0dHIocywgJ3NldHRpbWVvdXQnKToKLSAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzZWxmLmFkZHJlc3MsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbm5lY3Qoc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkgICMgSXNzdWUgMTkxODIKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTUyOCw3ICs1NDMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYubWFrZVNvY2tldCgpCiAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVRpbWUgPSBOb25lICMgbmV4dCB0aW1lLCBubyBkZWxheSBiZWZvcmUgdHJ5aW5nCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgI0NyZWF0aW9uIGZhaWxlZCwgc28gc2V0IHRoZSByZXRyeSB0aW1lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXRyeVRpbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVBlcmlvZCA9IHNlbGYucmV0cnlTdGFydApAQCAtNTUyLDE2ICs1NjcsOCBAQAogICAgICAgICAjYnV0IGFyZSBzdGlsbCB1bmFibGUgdG8gY29ubmVjdC4KICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zb2NrLCAic2VuZGFsbCIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgICAgIGVsc2U6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbihzKQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gc2VudHNvZmFyICsgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgLSBzZW50Ci0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUgICMgc28gd2UgY2FuIGNhbGwgY3JlYXRlU29ja2V0IG5leHQgdGltZQogCkBAIC02MTEsOSArNjE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNlbGYubWFrZVBpY2tsZShyZWNvcmQpCiAgICAgICAgICAgICBzZWxmLnNlbmQocykKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTY1Miw3ICs2NTcsMTEgQEAKICAgICAgICAgVGhlIGZhY3RvcnkgbWV0aG9kIG9mIFNvY2tldEhhbmRsZXIgaXMgaGVyZSBvdmVycmlkZGVuIHRvIGNyZWF0ZQogICAgICAgICBhIFVEUCBzb2NrZXQgKFNPQ0tfREdSQU0pLgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBpZiBzZWxmLnBvcnQgaXMgTm9uZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9VTklYCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBzID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tldC5TT0NLX0RHUkFNKQogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIHNlbmQoc2VsZiwgcyk6CkBAIC02NjUsNyArNjc0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5jcmVhdGVTb2NrZXQoKQotICAgICAgICBzZWxmLnNvY2suc2VuZHRvKHMsIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgc2VsZi5hZGRyZXNzKQogCiBjbGFzcyBTeXNMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgIiIiCkBAIC03NzcsNyArNzg2LDExIEBACiAKICAgICAgICAgSWYgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcsIGEgVU5JWCBzb2NrZXQgaXMgdXNlZC4gVG8gbG9nIHRvIGEKICAgICAgICAgbG9jYWwgc3lzbG9nZCwgIlN5c0xvZ0hhbmRsZXIoYWRkcmVzcz0iL2Rldi9sb2ciKSIgY2FuIGJlIHVzZWQuCi0gICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuCisgICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuIElmIHNvY2t0eXBlIGlzCisgICAgICAgIHNwZWNpZmllZCBhcyBzb2NrZXQuU09DS19ER1JBTSBvciBzb2NrZXQuU09DS19TVFJFQU0sIHRoYXQgc3BlY2lmaWMKKyAgICAgICAgc29ja2V0IHR5cGUgd2lsbCBiZSB1c2VkLiBGb3IgVW5peCBzb2NrZXRzLCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhCisgICAgICAgIHNvY2t0eXBlIG9mIE5vbmUsIGluIHdoaWNoIGNhc2Ugc29ja2V0LlNPQ0tfREdSQU0gd2lsbCBiZSB1c2VkLCBmYWxsaW5nCisgICAgICAgIGJhY2sgdG8gc29ja2V0LlNPQ0tfU1RSRUFNLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAKQEAgLTgwNyw3ICs4MjAsNyBAQAogICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgIyBpdCB3b3JrZWQsIHNvIHNldCBzZWxmLnNvY2t0eXBlIHRvIHRoZSB1c2VkIHR5cGUKICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2t0eXBlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICMgdXNlciBkaWRuJ3Qgc3BlY2lmeSBmYWxsaW5nIGJhY2ssIHNvIGZhaWwKQEAgLTgxOCw3ICs4MzEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtODcxLDEwICs4ODQsOSBAQAogICAgICAgICAgICAgbXNnID0gc2VsZi5pZGVudCArIG1zZwogICAgICAgICBpZiBzZWxmLmFwcGVuZF9udWw6CiAgICAgICAgICAgICBtc2cgKz0gJ1wwMDAnCi0gICAgICAgICIiIgotICAgICAgICBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCi0gICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotICAgICAgICAiIiIKKworICAgICAgICAjIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKKyAgICAgICAgIyBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSkKICAgICAgICAgcHJpbyA9IHByaW8uZW5jb2RlKCd1dGYtOCcpCkBAIC04ODUsNyArODk3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYudW5peHNvY2tldDoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmQobXNnKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCkBAIC04OTMsOSArOTA1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kdG8obXNnLCBzZWxmLmFkZHJlc3MpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmRhbGwobXNnKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBTTVRQSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgpAQCAtOTczLDkgKzk4Myw3IEBACiAgICAgICAgICAgICAgICAgc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQogICAgICAgICAgICAgc210cC5zZW5kbWFpbChzZWxmLmZyb21hZGRyLCBzZWxmLnRvYWRkcnMsIG1zZykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIE5URXZlbnRMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMDYwLDkgKzEwNjgsNyBAQAogICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldEV2ZW50VHlwZShyZWNvcmQpCiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgICAgIHNlbGYuX3dlbHUuUmVwb3J0RXZlbnQoc2VsZi5hcHBuYW1lLCBpZCwgY2F0LCB0eXBlLCBbbXNnXSkKLSAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtMTE0Nyw5ICsxMTUzLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJQT1NUIjoKICAgICAgICAgICAgICAgICBoLnNlbmQoZGF0YS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgICAgICBoLmdldHJlc3BvbnNlKCkgICAgI2Nhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdAotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBCdWZmZXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMzI5LDkgKzEzMzMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5lbnF1ZXVlKHNlbGYucHJlcGFyZShyZWNvcmQpKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBpZiB0aHJlYWRpbmc6CmRpZmYgLS1naXQgYS9MaWIvbHptYS5weSBiL0xpYi9sem1hLnB5CmluZGV4IDFhMWIwNjUuLjAxMWFkMjcgMTAwNjQ0Ci0tLSBhL0xpYi9sem1hLnB5CisrKyBiL0xpYi9sem1hLnB5CkBAIC01NCw5ICs1NCw5IEBACiAgICAgICAgIGJ5dGVzIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4KICAgICAgICAgYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywgb3IKLSAgICAgICAgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwKLSAgICAgICAgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBtb2RlIGNhbiBiZSAiciIgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAidyIgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICJ4IiBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICJhIiBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICJyYiIsICJ3YiIsICJ4YiIgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgogCiAgICAgICAgIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgZmlsZS4KICAgICAgICAgSWYgbW9kZSBpcyAiciIsIHRoaXMgZGVmYXVsdHMgdG8gRk9STUFUX0FVVE8uIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAsOCArMTEwLDkgQEAKICAgICAgICAgICAgICMgc3RyZWFtIHdpbGwgbmVlZCBhIHNlcGFyYXRlIGRlY29tcHJlc3NvciBvYmplY3QuCiAgICAgICAgICAgICBzZWxmLl9pbml0X2FyZ3MgPSB7ImZvcm1hdCI6Zm9ybWF0LCAiZmlsdGVycyI6ZmlsdGVyc30KICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIiwgImEiLCAiYWIiLCAieCIsICJ4YiIpOgogICAgICAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRk9STUFUX1haCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQpAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgZWxpZiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTg3LDE1ICsxODgsMTggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogCiAgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHJlYWRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciB3cml0aW5nIikKIAogICAgIGRlZiBfY2hlY2tfY2FuX3NlZWsoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKICAgICAgICAgaWYgbm90IHNlbGYuX2ZwLnNlZWthYmxlKCk6CkBAIC0yMDQsMTYgKzIwOCwxMyBAQAogCiAgICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KICAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKICAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKQEAgLTIyOSwzMCArMjMwLDQ4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKIAogICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MocmF3YmxvY2spCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgIyBSZWFkIGRhdGEgdW50aWwgRU9GLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2FsbChzZWxmLCByZXR1cm5fZGF0YT1UcnVlKToKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoc2VsZi5fYnVmZmVyKQogICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihzZWxmLl9idWZmZXIpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oYmxvY2tzKQogCiAgICAgIyBSZWFkIGEgYmxvY2sgb2YgdXAgdG8gbiBieXRlcy4KICAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgogICAgIGRlZiBfcmVhZF9ibG9jayhzZWxmLCBuLCByZXR1cm5fZGF0YT1UcnVlKToKKyAgICAgICAgIyBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhIGJ1ZmZlcmVkLCByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBuCisgICAgICAgIGlmIGVuZCA8PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhIGlmIHJldHVybl9kYXRhIGVsc2UgTm9uZQorCisgICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorCiAgICAgICAgIGJsb2NrcyA9IFtdCiAgICAgICAgIHdoaWxlIG4gPiAwIGFuZCBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgbiA8IGxlbihzZWxmLl9idWZmZXIpOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOm5dCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW246XQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGRhdGEpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCkBAIC0yNjcsOSArMjg2LDkgQEAKICAgICAgICAgVGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBpcyB1bnNwZWNpZmllZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KIAogICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIHNpemUgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCkBAIC0yNzgsNyArMjk3LDcgQEAKICAgICAgICAgUmV0dXJucyBiIiIgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBhdCBFT0YuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3Igc2l6ZSA9PSAwOgorICAgICAgICBpZiBzaXplID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYiIiCiAgICAgICAgIGVsaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbGwoKQpAQCAtMjk1LDE4ICszMTQsNDAgQEAKICAgICAgICAgIyB0aGlzIGRvZXMgbm90IGdpdmUgZW5vdWdoIGRhdGEgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gbWFrZSBwcm9ncmVzcy4KICAgICAgICAgIyBJbiB0aGlzIGNhc2Ugd2UgbWFrZSBtdWx0aXBsZSByZWFkcywgdG8gYXZvaWQgcmV0dXJuaW5nIGIiIi4KICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3IKLSAgICAgICAgICAgIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKToKKyAgICAgICAgaWYgKHNpemUgPT0gMCBvcgorICAgICAgICAgICAgIyBPbmx5IGNhbGwgX2ZpbGxfYnVmZmVyKCkgaWYgdGhlIGJ1ZmZlciBpcyBhY3R1YWxseSBlbXB0eS4KKyAgICAgICAgICAgICMgVGhpcyBnaXZlcyBhIHNpZ25pZmljYW50IHNwZWVkdXAgaWYgKnNpemUqIGlzIHNtYWxsLgorICAgICAgICAgICAgKHNlbGYuX2J1ZmZlcl9vZmZzZXQgPT0gbGVuKHNlbGYuX2J1ZmZlcikgYW5kIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKSk6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIGlmIDAgPCBzaXplIDwgbGVuKHNlbGYuX2J1ZmZlcik6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyWzpzaXplXQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NpemU6XQorICAgICAgICBpZiBzaXplID4gMDoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBzaXplXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArPSBsZW4oZGF0YSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCiAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKICAgICAgICAgcmV0dXJuIGRhdGEKIAorICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhIGxpbmUgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCisKKyAgICAgICAgVGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGlmIHByZXNlbnQpIGlzIHJldGFpbmVkLiBJZiBzaXplIGlzCisgICAgICAgIG5vbi1uZWdhdGl2ZSwgbm8gbW9yZSB0aGFuIHNpemUgYnl0ZXMgd2lsbCBiZSByZWFkIChpbiB3aGljaAorICAgICAgICBjYXNlIHRoZSBsaW5lIG1heSBiZSBpbmNvbXBsZXRlKS4gUmV0dXJucyBiJycgaWYgYWxyZWFkeSBhdCBFT0YuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCisgICAgICAgICMgU2hvcnRjdXQgZm9yIHRoZSBjb21tb24gY2FzZSAtIHRoZSB3aG9sZSBsaW5lIGlzIGluIHRoZSBidWZmZXIuCisgICAgICAgIGlmIHNpemUgPCAwOgorICAgICAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyLmZpbmQoYiJcbiIsIHNlbGYuX2J1ZmZlcl9vZmZzZXQpICsgMQorICAgICAgICAgICAgaWYgZW5kID4gMDoKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4obGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGxpbmUoc2VsZiwgc2l6ZSkKKwogICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKICAgICAgICAgIiIiV3JpdGUgYSBieXRlcyBvYmplY3QgdG8gdGhlIGZpbGUuCiAKQEAgLTMyNiw3ICszNjcsOCBAQAogICAgICAgICBzZWxmLl9tb2RlID0gX01PREVfUkVBRAogICAgICAgICBzZWxmLl9wb3MgPSAwCiAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCiAKICAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKICAgICAgICAgIiIiQ2hhbmdlIHRoZSBmaWxlIHBvc2l0aW9uLgpAQCAtMzY1LDggKzQwNyw3IEBACiAgICAgICAgICAgICBvZmZzZXQgLT0gc2VsZi5fcG9zCiAKICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGRhdGEgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uCi0gICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfUkVBRF9FT0Y6Ci0gICAgICAgICAgICBzZWxmLl9yZWFkX2Jsb2NrKG9mZnNldCwgcmV0dXJuX2RhdGE9RmFsc2UpCisgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKIAogICAgICAgICByZXR1cm4gc2VsZi5fcG9zCiAKQEAgLTM4MSwyMyArNDIyLDI1IEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGFuIExaTUEtY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBmaWxlbmFtZSBjYW4gYmUgZWl0aGVyIGFuIGFjdHVhbCBmaWxlIG5hbWUgKGdpdmVuIGFzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCksCi0gICAgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbiBiZSBhbiBleGlzdGluZyBmaWxlIG9iamVjdAotICAgIHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KKyAgICBmaWxlbmFtZSBjYW4gYmUgZWl0aGVyIGFuIGFjdHVhbCBmaWxlIG5hbWUgKGdpdmVuIGFzIGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbiBiZSBhbgorICAgIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIgKGRlZmF1bHQpLCAidyIsICJ3YiIsICJhIiwgb3IgImFiIiBmb3IKLSAgICBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgIngiLCAieGIiLAorICAgICJhIiwgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIsIG9yICJhdCIgZm9yIHRleHQKKyAgICBtb2RlLgogCi0gICAgVGhlIGZvcm1hdCwgY2hlY2ssIHByZXNldCBhbmQgZmlsdGVycyBhcmd1bWVudHMgc3BlY2lmeSB0aGUgY29tcHJlc3Npb24KLSAgICBzZXR0aW5ncywgYXMgZm9yIExaTUFDb21wcmVzc29yLCBMWk1BRGVjb21wcmVzc29yIGFuZCBMWk1BRmlsZS4KKyAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZQorICAgIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kCisgICAgTFpNQUZpbGUuCiAKLSAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUgY29uc3RydWN0b3I6Ci0gICAgTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMgYW5kCi0gICAgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIExaTUFGaWxlCisgICAgY29uc3RydWN0b3I6IExaTUFGaWxlKGZpbGVuYW1lLCBtb2RlLCAuLi4pLiBJbiB0aGlzIGNhc2UsIHRoZQorICAgIGVuY29kaW5nLCBlcnJvcnMgYW5kIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgogCiAgICAgRm9yIHRleHQgbW9kZSwgYSBMWk1BRmlsZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHdyYXBwZWQgaW4gYW4KLSAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IgaGFuZGxpbmcKLSAgICBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgorICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgorICAgIGhhbmRsaW5nIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCiAKICAgICAiIiIKICAgICBpZiAidCIgaW4gbW9kZToKQEAgLTQyNyw3ICs0NzAsNyBAQAogICAgIFJlZmVyIHRvIExaTUFDb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiwgKnByZXNldCogYW5kICpmaWx0ZXJzKi4KIAotICAgIEZvciBpbmNyZW1lbnRhbCBjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFDb21wcmVzc29yIG9iamVjdCBpbnN0ZWFkLgorICAgIEZvciBpbmNyZW1lbnRhbCBjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFDb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgY29tcCA9IExaTUFDb21wcmVzc29yKGZvcm1hdCwgY2hlY2ssIHByZXNldCwgZmlsdGVycykKICAgICByZXR1cm4gY29tcC5jb21wcmVzcyhkYXRhKSArIGNvbXAuZmx1c2goKQpAQCAtNDM5LDcgKzQ4Miw3IEBACiAgICAgUmVmZXIgdG8gTFpNQURlY29tcHJlc3NvcidzIGRvY3N0cmluZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKICAgICBvcHRpb25hbCBhcmd1bWVudHMgKmZvcm1hdCosICpjaGVjayogYW5kICpmaWx0ZXJzKi4KIAotICAgIEZvciBpbmNyZW1lbnRhbCBkZWNvbXByZXNzaW9uLCB1c2UgYSBMWk1BRGVjb21wcmVzc29yIG9iamVjdCBpbnN0ZWFkLgorICAgIEZvciBpbmNyZW1lbnRhbCBkZWNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQURlY29tcHJlc3NvciBpbnN0ZWFkLgogICAgICIiIgogICAgIHJlc3VsdHMgPSBbXQogICAgIHdoaWxlIFRydWU6CmRpZmYgLS1naXQgYS9MaWIvbWFjcGF0aC5weSBiL0xpYi9tYWNwYXRoLnB5CmluZGV4IDE2MTVkOTEuLmQzNGY5ZTk0IDEwMDY0NAotLS0gYS9MaWIvbWFjcGF0aC5weQorKysgYi9MaWIvbWFjcGF0aC5weQpAQCAtMTI3LDcgKzEyNyw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi9tYWlsYm94LnB5IGIvTGliL21haWxib3gucHkKaW5kZXggZDU5ZGFlOC4uNWY1OTFiYyAxMDA2NDQKLS0tIGEvTGliL21haWxib3gucHkKKysrIGIvTGliL21haWxib3gucHkKQEAgLTIyLDkgKzIyLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IGNvbnRleHRsaWIKIHRyeToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgICMgT1MvMiBFTVggZmNudGwoKSBub3QgYWRlcXVhdGUKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKICAgICBpbXBvcnQgZmNudGwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmY250bCA9IE5vbmUKQEAgLTM0MSwxMSArMzM4LDggQEAKICAgICAgICAgIyBUaGlzIG92ZXJyaWRlcyBhbiBpbmFwcGxpY2FibGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIHN1cGVyY2xhc3MuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGtleSkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBleGNlcHQgKEtleUVycm9yLCBGaWxlTm90Rm91bmRFcnJvcik6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgbWVzc2FnZSk6CiAgICAgICAgICIiIlJlcGxhY2UgdGhlIGtleWVkIG1lc3NhZ2U7IHJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIiIiCkBAIC0zNzcsMTQgKzM3MSwxMSBAQAogICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHN1YnBhdGggPSBzZWxmLl9sb29rdXAoa2V5KQotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2ZhY3Rvcnk6CiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtc2cgPSBNYWlsZGlyTWVzc2FnZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHN1YmRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQoc3VicGF0aCkKICAgICAgICAgbXNnLnNldF9zdWJkaXIoc3ViZGlyKQogICAgICAgICBpZiBzZWxmLmNvbG9uIGluIG5hbWU6CkBAIC0zOTQsMTEgKzM4NSw4IEBACiAKICAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpIGFzIGY6CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkucmVwbGFjZShsaW5lc2VwLCBiJ1xuJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgpAQCAtNTEwLDE2ICs0OTgsMTIgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgdW5pcSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc3RhdChwYXRoKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHN0YXQgc3VjY2VlZGVkIG9yIG9wZW4gcmFpc2VkIEVFWElTVC4KICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdOYW1lIGNsYXNoIHByZXZlbnRlZCBmaWxlIGNyZWF0aW9uOiAlcycgJQpAQCAtNTk2LDcgKzU4MCw3IEBACiAgICAgICAgIE1haWxib3guX19pbml0X18oc2VsZiwgcGF0aCwgZmFjdG9yeSwgY3JlYXRlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIGlmIGNyZWF0ZToKICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3diKycpCkBAIC02MzksOCArNjIzLDcgQEAKICAgICBkZWYgaXRlcmtleXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGtleXMuIiIiCiAgICAgICAgIHNlbGYuX2xvb2t1cCgpCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fdG9jLmtleXMoKToKLSAgICAgICAgICAgIHlpZWxkIGtleQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3RvYy5rZXlzKCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGtleWVkIG1lc3NhZ2UgZXhpc3RzLCBGYWxzZSBvdGhlcndpc2UuIiIiCkBAIC03MTgsMTMgKzcwMSw5IEBACiAgICAgICAgIG9zLmNobW9kKG5ld19maWxlLm5hbWUsIG1vZGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Qgb3IgXAotICAgICAgICAgICAgICAob3MubmFtZSA9PSAnb3MyJyBhbmQgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQotICAgICAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCisgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5fZmlsZSA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiKycpCiAgICAgICAgIHNlbGYuX3RvYyA9IG5ld190b2MKICAgICAgICAgc2VsZi5fcGVuZGluZyA9IEZhbHNlCkBAIC0xMDAxLDcgKzk4MCw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDE1LDcgKzk5NCw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDQxLDEyICsxMDIwLDEyIEBACiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiKycpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6CkBAIC0xMDU0LDggKzEwMzMsNiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZvciBuYW1lLCBrZXlfbGlzdCBpbiBzZWxmLmdldF9zZXF1ZW5jZXMoKS5pdGVtcygpOgogICAgICAgICAgICAgaWYga2V5IGluIGtleV9saXN0OgogICAgICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UobmFtZSkKQEAgLTEwNjgsMTIgKzEwNDUsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwODEsMTQgKzEwNTgsMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMDgxLDcgKzIwNTYsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0yMDkxLDcgKzIwNjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjEwNCwxNCArMjA3OSwxMCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwcmVfbG9jay5uYW1lLCBmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgICAgICBkb3Rsb2NrX2RvbmUgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKZGlmZiAtLWdpdCBhL0xpYi9tYWlsY2FwLnB5IGIvTGliL21haWxjYXAucHkKaW5kZXggOTlmNDk1OC4uYmQ2MWIwYiAxMDA2NDQKLS0tIGEvTGliL21haWxjYXAucHkKKysrIGIvTGliL21haWxjYXAucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICBmb3IgbWFpbGNhcCBpbiBsaXN0bWFpbGNhcGZpbGVzKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihtYWlsY2FwLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIG1vcmVjYXBzID0gcmVhZG1haWxjYXBmaWxlKGZwKQogICAgICAgICBmcC5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCAzZTc0MmE3Li5kNzE2MWY4IDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTM2MSw3ICszNjEsNyBAQAogZGVmIHJlYWRfbWltZV90eXBlcyhmaWxlKToKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZGIgPSBNaW1lVHlwZXMoKQogICAgIGRiLnJlYWRmcChmLCBUcnVlKQpkaWZmIC0tZ2l0IGEvTGliL21vZHVsZWZpbmRlci5weSBiL0xpYi9tb2R1bGVmaW5kZXIucHkKaW5kZXggYTE5N2EwZC4uZWJkMDY4YSAxMDA2NDQKLS0tIGEvTGliL21vZHVsZWZpbmRlci5weQorKysgYi9MaWIvbW9kdWxlZmluZGVyLnB5CkBAIC0xLDEzICsxLDE2IEBACiAiIiJGaW5kIG1vZHVsZXMgdXNlZCBieSBhIHNjcmlwdCwgdXNpbmcgaW50cm9zcGVjdGlvbi4iIiIKIAogaW1wb3J0IGRpcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAogIyBYWFggQ2xlYW4gdXAgb25jZSBzdHI4J3MgY3N0b3IgbWF0Y2hlcyBieXRlcy4KIExPQURfQ09OU1QgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnTE9BRF9DT05TVCcpXSkKQEAgLTIyOSw3ICsyMzIsNyBAQAogICAgICAgICBmb3IgZGlyIGluIG0uX19wYXRoX186CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYubXNnKDIsICJjYW4ndCBsaXN0IGRpcmVjdG9yeSIsIGRpcikKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQppbmRleCAxZjNlNjdjLi44NmRmNjM4IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKQEAgLTgsMjYwICs4LDMxIEBACiAjIHN1YnBhY2thZ2UgJ211bHRpcHJvY2Vzc2luZy5kdW1teScgaGFzIHRoZSBzYW1lIEFQSSBidXQgaXMgYSBzaW1wbGUKICMgd3JhcHBlciBmb3IgJ3RocmVhZGluZycuCiAjCi0jIFRyeSBjYWxsaW5nIGBtdWx0aXByb2Nlc3NpbmcuZG9jLm1haW4oKWAgdG8gcmVhZCB0aGUgaHRtbAotIyBkb2N1bWVudGF0aW9uIGluIGEgd2ViYnJvd3Nlci4KLSMKLSMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fdmVyc2lvbl9fID0gJzAuNzBhMScKLQotX19hbGxfXyA9IFsKLSAgICAnUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJywgJ2ZyZWV6ZV9zdXBwb3J0JywKLSAgICAnTWFuYWdlcicsICdQaXBlJywgJ2NwdV9jb3VudCcsICdsb2dfdG9fc3RkZXJyJywgJ2dldF9sb2dnZXInLAotICAgICdhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nJywgJ0J1ZmZlclRvb1Nob3J0JywgJ1RpbWVvdXRFcnJvcicsCi0gICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnQ29uZGl0aW9uJywKLSAgICAnRXZlbnQnLCAnQmFycmllcicsICdRdWV1ZScsICdTaW1wbGVRdWV1ZScsICdKb2luYWJsZVF1ZXVlJywgJ1Bvb2wnLAotICAgICdWYWx1ZScsICdBcnJheScsICdSYXdWYWx1ZScsICdSYXdBcnJheScsICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKLSAgICBdCi0KLV9fYXV0aG9yX18gPSAnUi4gT3Vka2VyayAoci5tLm91ZGtlcmtAZ21haWwuY29tKScKLQotIwotIyBJbXBvcnRzCi0jCi0KLWltcG9ydCBvcwogaW1wb3J0IHN5cwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgU1VCREVCVUcsIFNVQldBUk5JTkcKK2Zyb20gLiBpbXBvcnQgY29udGV4dAogCiAjCi0jIEV4Y2VwdGlvbnMKKyMgQ29weSBzdHVmZiBmcm9tIGRlZmF1bHQgY29udGV4dAogIwogCi1jbGFzcyBQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLWNsYXNzIEJ1ZmZlclRvb1Nob3J0KFByb2Nlc3NFcnJvcik6Ci0gICAgcGFzcwotCi1jbGFzcyBUaW1lb3V0RXJyb3IoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCitnbG9iYWxzKCkudXBkYXRlKChuYW1lLCBnZXRhdHRyKGNvbnRleHQuX2RlZmF1bHRfY29udGV4dCwgbmFtZSkpCisgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbnRleHQuX2RlZmF1bHRfY29udGV4dC5fX2FsbF9fKQorX19hbGxfXyA9IGNvbnRleHQuX2RlZmF1bHRfY29udGV4dC5fX2FsbF9fCiAKICMKLSMgRGVmaW5pdGlvbnMgbm90IGRlcGVuZGluZyBvbiBuYXRpdmUgc2VtYXBob3JlcworIyBYWFggVGhlc2Ugc2hvdWxkIG5vdCByZWFsbHkgYmUgZG9jdW1lbnRlZCBvciBwdWJsaWMuCiAjCiAKLWRlZiBNYW5hZ2VyKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcwotCi0gICAgVGhlIG1hbmFnZXJzIG1ldGhvZHMgc3VjaCBhcyBgTG9jaygpYCwgYENvbmRpdGlvbigpYCBhbmQgYFF1ZXVlKClgCi0gICAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNoYXJlZCBvYmplY3RzLgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgotICAgIG0gPSBTeW5jTWFuYWdlcigpCi0gICAgbS5zdGFydCgpCi0gICAgcmV0dXJuIG0KLQotZGVmIFBpcGUoZHVwbGV4PVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgdHdvIGNvbm5lY3Rpb24gb2JqZWN0IGNvbm5lY3RlZCBieSBhIHBpcGUKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCBQaXBlCi0gICAgcmV0dXJuIFBpcGUoZHVwbGV4KQotCi1kZWYgY3B1X2NvdW50KCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbQotICAgICcnJwotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBudW0gPSBpbnQob3MuZW52aXJvblsnTlVNQkVSX09GX1BST0NFU1NPUlMnXSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBLZXlFcnJvcik6Ci0gICAgICAgICAgICBudW0gPSAwCi0gICAgZWxpZiAnYnNkJyBpbiBzeXMucGxhdGZvcm0gb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICBjb21tID0gJy9zYmluL3N5c2N0bCAtbiBody5uY3B1JwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICBjb21tID0gJy91c3InICsgY29tbQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG9zLnBvcGVuKGNvbW0pIGFzIHA6Ci0gICAgICAgICAgICAgICAgbnVtID0gaW50KHAucmVhZCgpKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBudW0gPSBvcy5zeXNjb25mKCdTQ19OUFJPQ0VTU09SU19PTkxOJykKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICBudW0gPSAwCi0KLSAgICBpZiBudW0gPj0gMToKLSAgICAgICAgcmV0dXJuIG51bQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNwdXMnKQotCi1kZWYgZnJlZXplX3N1cHBvcnQoKToKLSAgICAnJycKLSAgICBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBmYWtlIGZvcmtlZCBwcm9jZXNzIGluIGEgZnJvemVuIGV4ZWN1dGFibGUuCi0gICAgSWYgc28gdGhlbiBydW4gY29kZSBzcGVjaWZpZWQgYnkgY29tbWFuZGxpbmUgYW5kIGV4aXQuCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBmcmVlemVfc3VwcG9ydAotICAgICAgICBmcmVlemVfc3VwcG9ydCgpCi0KLWRlZiBnZXRfbG9nZ2VyKCk6Ci0gICAgJycnCi0gICAgUmV0dXJuIHBhY2thZ2UgbG9nZ2VyIC0tIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QgdGhlbiBpdCBpcyBjcmVhdGVkCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X2xvZ2dlcgotICAgIHJldHVybiBnZXRfbG9nZ2VyKCkKLQotZGVmIGxvZ190b19zdGRlcnIobGV2ZWw9Tm9uZSk6Ci0gICAgJycnCi0gICAgVHVybiBvbiBsb2dnaW5nIGFuZCBhZGQgYSBoYW5kbGVyIHdoaWNoIHByaW50cyB0byBzdGRlcnIKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBsb2dfdG9fc3RkZXJyCi0gICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCi0KLWRlZiBhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nKCk6Ci0gICAgJycnCi0gICAgSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzIGJldHdlZW4gcHJvY2Vzc2VzCi0gICAgJycnCi0gICAgIyBUaGlzIGlzIHVuZG9jdW1lbnRlZC4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIG11bHRpcHJvY2Vzc2luZwotICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCi0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCitTVUJERUJVRyA9IDUKK1NVQldBUk5JTkcgPSAyNQogCiAjCi0jIERlZmluaXRpb25zIGRlcGVuZGluZyBvbiBuYXRpdmUgc2VtYXBob3JlcworIyBBbGlhcyBmb3IgbWFpbiBtb2R1bGUgLS0gd2lsbCBiZSByZXNldCBieSBib290c3RyYXBwaW5nIGNoaWxkIHByb2Nlc3NlcwogIwogCi1kZWYgTG9jaygpOgotICAgICcnJwotICAgIFJldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2sKLSAgICByZXR1cm4gTG9jaygpCi0KLWRlZiBSTG9jaygpOgotICAgICcnJwotICAgIFJldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgUkxvY2sKLSAgICByZXR1cm4gUkxvY2soKQotCi1kZWYgQ29uZGl0aW9uKGxvY2s9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGNvbmRpdGlvbiBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCi0gICAgcmV0dXJuIENvbmRpdGlvbihsb2NrKQotCi1kZWYgU2VtYXBob3JlKHZhbHVlPTEpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IFNlbWFwaG9yZQotICAgIHJldHVybiBTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlPTEpOgotICAgICcnJwotICAgIFJldHVybnMgYSBib3VuZGVkIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgQm91bmRlZFNlbWFwaG9yZQotICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlKQotCi1kZWYgRXZlbnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGFuIGV2ZW50IG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBFdmVudAotICAgIHJldHVybiBFdmVudCgpCi0KLWRlZiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBiYXJyaWVyIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCi0gICAgcmV0dXJuIEJhcnJpZXIocGFydGllcywgYWN0aW9uLCB0aW1lb3V0KQotCi1kZWYgUXVldWUobWF4c2l6ZT0wKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcXVldWUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBRdWV1ZQotICAgIHJldHVybiBRdWV1ZShtYXhzaXplKQotCi1kZWYgSm9pbmFibGVRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKLSAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplKQotCi1kZWYgU2ltcGxlUXVldWUoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcXVldWUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQotICAgIHJldHVybiBTaW1wbGVRdWV1ZSgpCi0KLWRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcHJvY2VzcyBwb29sIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFBvb2wKLSAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCkKLQotZGVmIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc2hhcmVkIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgUmF3VmFsdWUKLSAgICByZXR1cm4gUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpCi0KLWRlZiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdBcnJheQotICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQotCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQotICAgIHJldHVybiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1sb2NrKQotCi1kZWYgQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBhcnJheQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgQXJyYXkKLSAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrKQotCi0jCi0jCi0jCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpOgotICAgICAgICAnJycKLSAgICAgICAgU2V0cyB0aGUgcGF0aCB0byBhIHB5dGhvbi5leGUgb3IgcHl0aG9udy5leGUgYmluYXJ5IHVzZWQgdG8gcnVuCi0gICAgICAgIGNoaWxkIHByb2Nlc3NlcyBvbiBXaW5kb3dzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUuCi0gICAgICAgIFVzZWZ1bCBmb3IgcGVvcGxlIGVtYmVkZGluZyBQeXRob24uCi0gICAgICAgICcnJwotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBzZXRfZXhlY3V0YWJsZQotICAgICAgICBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKQotCi0gICAgX19hbGxfXyArPSBbJ3NldF9leGVjdXRhYmxlJ10KK2lmICdfX21haW5fXycgaW4gc3lzLm1vZHVsZXM6CisgICAgc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tYWluX18nXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CmluZGV4IDJhMGJjMmYuLjhhZDZmZDUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKQEAgLTEyLDggKzEyLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgcGlja2xlCi1pbXBvcnQgc2VsZWN0CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgZXJybm8KQEAgLTIyLDkgKzIwLDEzIEBACiBpbXBvcnQgaXRlcnRvb2xzCiAKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X3RlbXBfZGlyLCBGaW5hbGl6ZSwgc3ViX2RlYnVnLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Citmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKIHRyeToKICAgICBpbXBvcnQgX3dpbmFwaQogICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQpAQCAtNzIsNyArNzQsNyBAQAogICAgIGlmIGZhbWlseSA9PSAnQUZfSU5FVCc6CiAgICAgICAgIHJldHVybiAoJ2xvY2FsaG9zdCcsIDApCiAgICAgZWxpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0nbGlzdGVuZXItJywgZGlyPWdldF90ZW1wX2RpcigpKQorICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0nbGlzdGVuZXItJywgZGlyPXV0aWwuZ2V0X3RlbXBfZGlyKCkpCiAgICAgZWxpZiBmYW1pbHkgPT0gJ0FGX1BJUEUnOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5Yy0lZC0lZC0nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0cGlkKCksIG5leHQoX21tYXBfY291bnRlcikpKQpAQCAtMTMyLDIyICsxMzQsMjIgQEAKIAogICAgIGRlZiBfY2hlY2tfY2xvc2VkKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImhhbmRsZSBpcyBjbG9zZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCiAKICAgICBkZWYgX2NoZWNrX3JlYWRhYmxlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZGFibGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyB3cml0ZS1vbmx5IikKIAogICAgIGRlZiBfY2hlY2tfd3JpdGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl93cml0YWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgcmVhZC1vbmx5IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNvbm5lY3Rpb24gaXMgcmVhZC1vbmx5IikKIAogICAgIGRlZiBfYmFkX21lc3NhZ2VfbGVuZ3RoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl93cml0YWJsZToKICAgICAgICAgICAgIHNlbGYuX3JlYWRhYmxlID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgbWVzc2FnZSBsZW5ndGgiKQorICAgICAgICByYWlzZSBPU0Vycm9yKCJiYWQgbWVzc2FnZSBsZW5ndGgiKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGNsb3NlZChzZWxmKToKQEAgLTIwMiw5ICsyMDQsNyBAQAogICAgICAgICAiIiJTZW5kIGEgKHBpY2tsYWJsZSkgb2JqZWN0IiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrX3dyaXRhYmxlKCkKLSAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyKGJ1ZiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpLmR1bXAob2JqKQotICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgc2VsZi5fc2VuZF9ieXRlcyhGb3JraW5nUGlja2xlci5kdW1wcyhvYmopKQogCiAgICAgZGVmIHJlY3ZfYnl0ZXMoc2VsZiwgbWF4bGVuZ3RoPU5vbmUpOgogICAgICAgICAiIiIKQEAgLTI0OSw3ICsyNDksNyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja19yZWFkYWJsZSgpCiAgICAgICAgIGJ1ZiA9IHNlbGYuX3JlY3ZfYnl0ZXMoKQotICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKGJ1Zi5nZXRidWZmZXIoKSkKIAogICAgIGRlZiBwb2xsKHNlbGYsIHRpbWVvdXQ9MC4wKToKICAgICAgICAgIiIiV2hldGhlciB0aGVyZSBpcyBhbnkgaW5wdXQgYXZhaWxhYmxlIHRvIGJlIHJlYWQiIiIKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGVyciA9PSBfd2luYXBpLkVSUk9SX01PUkVfREFUQToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X21vcmVfZGF0YShvdiwgbWF4c2l6ZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3IgPT0gX3dpbmFwaS5FUlJPUl9CUk9LRU5fUElQRToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zODksNyArMzg5LDcgQEAKICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmcgPT0gc2l6ZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJnb3QgZW5kIG9mIGZpbGUgZHVyaW5nIG1lc3NhZ2UiKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJnb3QgZW5kIG9mIGZpbGUgZHVyaW5nIG1lc3NhZ2UiKQogICAgICAgICAgICAgYnVmLndyaXRlKGNodW5rKQogICAgICAgICAgICAgcmVtYWluaW5nIC09IG4KICAgICAgICAgcmV0dXJuIGJ1ZgpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgICAgICAgIFJldHVybnMgYSBgQ29ubmVjdGlvbmAgb2JqZWN0LgogICAgICAgICAnJycKICAgICAgICAgaWYgc2VsZi5fbGlzdGVuZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2xpc3RlbmVyIGlzIGNsb3NlZCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdsaXN0ZW5lciBpcyBjbG9zZWQnKQogICAgICAgICBjID0gc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkKICAgICAgICAgaWYgc2VsZi5fYXV0aGtleToKICAgICAgICAgICAgIGRlbGl2ZXJfY2hhbGxlbmdlKGMsIHNlbGYuX2F1dGhrZXkpCkBAIC01MzUsNyArNTM1LDkgQEAKICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UsCiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAogICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCi0gICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwKKyAgICAgICAgICAgICMgZGVmYXVsdCBzZWN1cml0eSBkZXNjcmlwdG9yOiB0aGUgaGFuZGxlIGNhbm5vdCBiZSBpbmhlcml0ZWQKKyAgICAgICAgICAgIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgKQogICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKICAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCkBAIC01ODAsNyArNTgyLDcgQEAKICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKIAogICAgICAgICBpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gRmluYWxpemUoCisgICAgICAgICAgICBzZWxmLl91bmxpbmsgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIG9zLnVubGluaywgYXJncz0oYWRkcmVzcywpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKICAgICAgICAgZWxzZToKQEAgLTYyOCw4ICs2MzAsOCBAQAogICAgICAgICAgICAgc2VsZi5faGFuZGxlX3F1ZXVlID0gW3NlbGYuX25ld19oYW5kbGUoZmlyc3Q9VHJ1ZSldCiAKICAgICAgICAgICAgIHNlbGYuX2xhc3RfYWNjZXB0ZWQgPSBOb25lCi0gICAgICAgICAgICBzdWJfZGVidWcoJ2xpc3RlbmVyIGNyZWF0ZWQgd2l0aCBhZGRyZXNzPSVyJywgc2VsZi5fYWRkcmVzcykKLSAgICAgICAgICAgIHNlbGYuY2xvc2UgPSBGaW5hbGl6ZSgKKyAgICAgICAgICAgIHV0aWwuc3ViX2RlYnVnKCdsaXN0ZW5lciBjcmVhdGVkIHdpdGggYWRkcmVzcz0lcicsIHNlbGYuX2FkZHJlc3MpCisgICAgICAgICAgICBzZWxmLmNsb3NlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgICAgICBzZWxmLCBQaXBlTGlzdGVuZXIuX2ZpbmFsaXplX3BpcGVfbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgYXJncz0oc2VsZi5faGFuZGxlX3F1ZXVlLCBzZWxmLl9hZGRyZXNzKSwgZXhpdHByaW9yaXR5PTAKICAgICAgICAgICAgICAgICApCkBAIC02NzEsNyArNjczLDcgQEAKIAogICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBfZmluYWxpemVfcGlwZV9saXN0ZW5lcihxdWV1ZSwgYWRkcmVzcyk6Ci0gICAgICAgICAgICBzdWJfZGVidWcoJ2Nsb3NpbmcgbGlzdGVuZXIgd2l0aCBhZGRyZXNzPSVyJywgYWRkcmVzcykKKyAgICAgICAgICAgIHV0aWwuc3ViX2RlYnVnKCdjbG9zaW5nIGxpc3RlbmVyIHdpdGggYWRkcmVzcz0lcicsIGFkZHJlc3MpCiAgICAgICAgICAgICBmb3IgaGFuZGxlIGluIHF1ZXVlOgogICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaGFuZGxlKQogCkBAIC02ODgsNyArNjkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCiAgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQsIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3Igbm90IGluIChfd2luYXBpLkVSUk9SX1NFTV9USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkVSUk9SX1BJUEVfQlVTWSkgb3IgX2NoZWNrX3RpbWVvdXQodCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC03MTcsNyArNzE5LDcgQEAKICAgICBhc3NlcnQgaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICBtZXNzYWdlID0gb3MudXJhbmRvbShNRVNTQUdFX0xFTkdUSCkKICAgICBjb25uZWN0aW9uLnNlbmRfYnl0ZXMoQ0hBTExFTkdFICsgbWVzc2FnZSkKLSAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlKS5kaWdlc3QoKQorICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UsICdtZDUnKS5kaWdlc3QoKQogICAgIHJlc3BvbnNlID0gY29ubmVjdGlvbi5yZWN2X2J5dGVzKDI1NikgICAgICAgICMgcmVqZWN0IGxhcmdlIG1lc3NhZ2UKICAgICBpZiByZXNwb25zZSA9PSBkaWdlc3Q6CiAgICAgICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhXRUxDT01FKQpAQCAtNzMxLDcgKzczMyw3IEBACiAgICAgbWVzc2FnZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGFzc2VydCBtZXNzYWdlWzpsZW4oQ0hBTExFTkdFKV0gPT0gQ0hBTExFTkdFLCAnbWVzc2FnZSA9ICVyJyAlIG1lc3NhZ2UKICAgICBtZXNzYWdlID0gbWVzc2FnZVtsZW4oQ0hBTExFTkdFKTpdCi0gICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSkuZGlnZXN0KCkKKyAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlLCAnbWQ1JykuZGlnZXN0KCkKICAgICBjb25uZWN0aW9uLnNlbmRfYnl0ZXMoZGlnZXN0KQogICAgIHJlc3BvbnNlID0gY29ubmVjdGlvbi5yZWN2X2J5dGVzKDI1NikgICAgICAgICMgcmVqZWN0IGxhcmdlIG1lc3NhZ2UKICAgICBpZiByZXNwb25zZSAhPSBXRUxDT01FOgpAQCAtODc0LDI4ICs4NzYsMTUgQEAKIAogZWxzZToKIAotICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGludCh0aW1lb3V0ICogMTAwMCkgICMgdGltZW91dCBpcyBpbiBtaWxsaXNlY29uZHMKLSAgICAgICAgICAgIGZkX21hcCA9IHt9Ci0gICAgICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6Ci0gICAgICAgICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoZmQsIHNlbGVjdC5QT0xMSU4pCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmZCwgJ2ZpbGVubycpOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmQuZmlsZW5vKCldID0gZmQKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmRdID0gZmQKLSAgICAgICAgICAgIGxzID0gW10KLSAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gcG9sbHN0ZXIucG9sbCh0aW1lb3V0KToKLSAgICAgICAgICAgICAgICBpZiBldmVudCAmIHNlbGVjdC5QT0xMTlZBTDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgJWknICUgZmQpCi0gICAgICAgICAgICAgICAgbHMuYXBwZW5kKGZkX21hcFtmZF0pCi0gICAgICAgICAgICByZXR1cm4gbHMKLSAgICBlbHNlOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KGZkcywgW10sIFtdLCB0aW1lb3V0KVswXQorICAgIGltcG9ydCBzZWxlY3RvcnMKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9XYWl0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgogCiAgICAgZGVmIHdhaXQob2JqZWN0X2xpc3QsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgICcnJwpAQCAtOTAzLDM0ICs4OTIsNTQgQEAKIAogICAgICAgICBSZXR1cm5zIGxpc3Qgb2YgdGhvc2Ugb2JqZWN0cyBpbiBvYmplY3RfbGlzdCB3aGljaCBhcmUgcmVhZHkvcmVhZGFibGUuCiAgICAgICAgICcnJwotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gX3BvbGwob2JqZWN0X2xpc3QsIHRpbWVvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHdpdGggX1dhaXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RfbGlzdDoKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihvYmosIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCiAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHJlYWR5XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CiAKICMKICMgTWFrZSBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyBzaGFyYWJsZSBpZiBwb3NzaWJsZQogIwogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCisgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgZHMgPSByZXNvdXJjZV9zaGFyZXIuRHVwU29ja2V0KHMpCisgICAgICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZHMsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgc29jayA9IGRzLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKHNvY2suZGV0YWNoKCksIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWNlX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYgcmVkdWNlX3BpcGVfY29ubmVjdGlvbihjb25uKToKKyAgICAgICAgYWNjZXNzID0gKChfd2luYXBpLkZJTEVfR0VORVJJQ19SRUFEIGlmIGNvbm4ucmVhZGFibGUgZWxzZSAwKSB8CisgICAgICAgICAgICAgICAgICAoX3dpbmFwaS5GSUxFX0dFTkVSSUNfV1JJVEUgaWYgY29ubi53cml0YWJsZSBlbHNlIDApKQorICAgICAgICBkaCA9IHJlZHVjdGlvbi5EdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQorICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24oZGgsIHJlYWRhYmxlLCB3cml0YWJsZSk6CisgICAgICAgIGhhbmRsZSA9IGRoLmRldGFjaCgpCisgICAgICAgIHJldHVybiBQaXBlQ29ubmVjdGlvbihoYW5kbGUsIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoUGlwZUNvbm5lY3Rpb24sIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisKIGVsc2U6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgICAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBkZiA9IHJlZHVjdGlvbi5EdXBGZChjb25uLmZpbGVubygpKQorICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZGYsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkZiwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgZmQgPSBkZi5kZXRhY2goKQorICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg0OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5CkBAIC0wLDAgKzEsMzQ4IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCisKK19fYWxsX18gPSBbXSAgICAgICAgICAgICMgdGhpbmdzIGFyZSBjb3BpZWQgZnJvbSBoZXJlIHRvIF9faW5pdF9fLnB5CisKKyMKKyMgRXhjZXB0aW9ucworIworCitjbGFzcyBQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEJ1ZmZlclRvb1Nob3J0KFByb2Nlc3NFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBUaW1lb3V0RXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKKyMKKyMgQmFzZSB0eXBlIGZvciBjb250ZXh0cworIworCitjbGFzcyBCYXNlQ29udGV4dChvYmplY3QpOgorCisgICAgUHJvY2Vzc0Vycm9yID0gUHJvY2Vzc0Vycm9yCisgICAgQnVmZmVyVG9vU2hvcnQgPSBCdWZmZXJUb29TaG9ydAorICAgIFRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcgorICAgIEF1dGhlbnRpY2F0aW9uRXJyb3IgPSBBdXRoZW50aWNhdGlvbkVycm9yCisKKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKHByb2Nlc3MuYWN0aXZlX2NoaWxkcmVuKQorCisgICAgZGVmIGNwdV9jb3VudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbScnJworICAgICAgICBudW0gPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBudW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNwdXMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG51bQorCisgICAgZGVmIE1hbmFnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIHJ1bm5pbmcgc2VydmVyIHByb2Nlc3MKKworICAgICAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNoYXJlZCBvYmplY3RzLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCisgICAgICAgIG0gPSBTeW5jTWFuYWdlcihjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorICAgICAgICBtLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIG0KKworICAgIGRlZiBQaXBlKHNlbGYsIGR1cGxleD1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZScnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCisgICAgICAgIHJldHVybiBQaXBlKGR1cGxleCkKKworICAgIGRlZiBMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgbm9uLXJlY3Vyc2l2ZSBsb2NrIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaworICAgICAgICByZXR1cm4gTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBSTG9jaworICAgICAgICByZXR1cm4gUkxvY2soY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBDb25kaXRpb24oc2VsZiwgbG9jaz1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGNvbmRpdGlvbiBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IENvbmRpdGlvbgorICAgICAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2ssIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCisgICAgICAgIHJldHVybiBTZW1hcGhvcmUodmFsdWUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQm91bmRlZFNlbWFwaG9yZShzZWxmLCB2YWx1ZT0xKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQm91bmRlZFNlbWFwaG9yZQorICAgICAgICByZXR1cm4gQm91bmRlZFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBFdmVudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhbiBldmVudCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50CisgICAgICAgIHJldHVybiBFdmVudChjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEJhcnJpZXIoc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBiYXJyaWVyIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQmFycmllcgorICAgICAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFF1ZXVlCisgICAgICAgIHJldHVybiBRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEpvaW5hYmxlUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKKyAgICAgICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTaW1wbGVRdWV1ZShzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCisgICAgICAgIHJldHVybiBTaW1wbGVRdWV1ZShjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFBvb2woc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLAorICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnBvb2wgaW1wb3J0IFBvb2wKKyAgICAgICAgcmV0dXJuIFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MsIG1heHRhc2tzcGVyY2hpbGQsCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJhd1ZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQorICAgICAgICByZXR1cm4gUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpCisKKyAgICBkZWYgUmF3QXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcik6CisgICAgICAgICcnJ1JldHVybnMgYSBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdBcnJheQorICAgICAgICByZXR1cm4gUmF3QXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcikKKworICAgIGRlZiBWYWx1ZShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgVmFsdWUKKyAgICAgICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2ssCisgICAgICAgICAgICAgICAgICAgICBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEFycmF5KHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgQXJyYXkKKyAgICAgICAgcmV0dXJuIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgZnJlZXplX3N1cHBvcnQoc2VsZik6CisgICAgICAgICcnJ0NoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KKyAgICAgICAgSWYgc28gdGhlbiBydW4gY29kZSBzcGVjaWZpZWQgYnkgY29tbWFuZGxpbmUgYW5kIGV4aXQuCisgICAgICAgICcnJworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6CisgICAgICAgICAgICBmcm9tIC5zcGF3biBpbXBvcnQgZnJlZXplX3N1cHBvcnQKKyAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKworICAgIGRlZiBnZXRfbG9nZ2VyKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuCisgICAgICAgIGl0IGlzIGNyZWF0ZWQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCisgICAgICAgIHJldHVybiBnZXRfbG9nZ2VyKCkKKworICAgIGRlZiBsb2dfdG9fc3RkZXJyKHNlbGYsIGxldmVsPU5vbmUpOgorICAgICAgICAnJydUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycicnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBsb2dfdG9fc3RkZXJyCisgICAgICAgIHJldHVybiBsb2dfdG9fc3RkZXJyKGxldmVsKQorCisgICAgZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoc2VsZik6CisgICAgICAgICcnJ0luc3RhbGwgc3VwcG9ydCBmb3Igc2VuZGluZyBjb25uZWN0aW9ucyBhbmQgc29ja2V0cworICAgICAgICBiZXR3ZWVuIHByb2Nlc3NlcworICAgICAgICAnJycKKyAgICAgICAgIyBUaGlzIGlzIHVuZG9jdW1lbnRlZC4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIG11bHRpcHJvY2Vzc2luZworICAgICAgICAjIGl0cyBvbmx5IGVmZmVjdCB3YXMgdG8gbWFrZSBzb2NrZXQgb2JqZWN0cyBpbmhlcml0YWJsZSBvbiBXaW5kb3dzLgorICAgICAgICBmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KKworICAgIGRlZiBzZXRfZXhlY3V0YWJsZShzZWxmLCBleGVjdXRhYmxlKToKKyAgICAgICAgJycnU2V0cyB0aGUgcGF0aCB0byBhIHB5dGhvbi5leGUgb3IgcHl0aG9udy5leGUgYmluYXJ5IHVzZWQgdG8gcnVuCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBpbnN0ZWFkIG9mIHN5cy5leGVjdXRhYmxlIHdoZW4gdXNpbmcgdGhlICdzcGF3bicKKyAgICAgICAgc3RhcnQgbWV0aG9kLiAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBzZXRfZXhlY3V0YWJsZQorICAgICAgICBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlX25hbWVzKToKKyAgICAgICAgJycnU2V0IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRvIHRyeSB0byBsb2FkIGluIGZvcmtzZXJ2ZXIgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBpcyByZWFsbHkganVzdCBhIGhpbnQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5mb3Jrc2VydmVyIGltcG9ydCBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkCisgICAgICAgIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQobW9kdWxlX25hbWVzKQorCisgICAgZGVmIGdldF9jb250ZXh0KHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgaWYgbWV0aG9kIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdHggPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3QgZmluZCBjb250ZXh0IGZvciAlcicgJSBtZXRob2QpCisgICAgICAgIGN0eC5fY2hlY2tfYXZhaWxhYmxlKCkKKyAgICAgICAgcmV0dXJuIGN0eAorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzZXQgc3RhcnQgbWV0aG9kIG9mIGNvbmNyZXRlIGNvbnRleHQnKQorCisgICAgZGVmIF9jaGVja19hdmFpbGFibGUoc2VsZik6CisgICAgICAgIHBhc3MKKworIworIyBUeXBlIG9mIGRlZmF1bHQgY29udGV4dCAtLSB1bmRlcmx5aW5nIGNvbnRleHQgY2FuIGJlIHNldCBhdCBtb3N0IG9uY2UKKyMKKworY2xhc3MgUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICBfc3RhcnRfbWV0aG9kID0gTm9uZQorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2NvbnRleHQuZ2V0X2NvbnRleHQoKS5Qcm9jZXNzLl9Qb3Blbihwcm9jZXNzX29iaikKKworY2xhc3MgRGVmYXVsdENvbnRleHQoQmFzZUNvbnRleHQpOgorICAgIFByb2Nlc3MgPSBQcm9jZXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCk6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfY29udGV4dCA9IGNvbnRleHQKKyAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBOb25lCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBzZWxmLl9kZWZhdWx0X2NvbnRleHQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIHNldF9zdGFydF9tZXRob2Qoc2VsZiwgbWV0aG9kLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIG5vdCBOb25lIGFuZCBub3QgZm9yY2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NvbnRleHQgaGFzIGFscmVhZHkgYmVlbiBzZXQnKQorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZSBhbmQgZm9yY2U6CisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBhbGxvd19ub25lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICByZXR1cm4gc2VsZi5fYWN0dWFsX2NvbnRleHQuX25hbWUKKworICAgIGRlZiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuIFsnc3Bhd24nXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nXQorCitEZWZhdWx0Q29udGV4dC5fX2FsbF9fID0gbGlzdCh4IGZvciB4IGluIGRpcihEZWZhdWx0Q29udGV4dCkgaWYgeFswXSAhPSAnXycpCisKKyMKKyMgQ29udGV4dCB0eXBlcyBmb3IgZml4ZWQgc3RhcnQgbWV0aG9kCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorCisgICAgY2xhc3MgRm9ya1Byb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9yaycKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmsgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl9wb3NpeCBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9mb3Jrc2VydmVyIGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya0NvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdmb3JrJworICAgICAgICBQcm9jZXNzID0gRm9ya1Byb2Nlc3MKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBjbGFzcyBGb3JrU2VydmVyQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIFByb2Nlc3MgPSBGb3JrU2VydmVyUHJvY2VzcworICAgICAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCisgICAgICAgICAgICBpZiBub3QgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZm9ya3NlcnZlciBzdGFydCBtZXRob2Qgbm90IGF2YWlsYWJsZScpCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdmb3JrJzogRm9ya0NvbnRleHQoKSwKKyAgICAgICAgJ3NwYXduJzogU3Bhd25Db250ZXh0KCksCisgICAgICAgICdmb3Jrc2VydmVyJzogRm9ya1NlcnZlckNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snZm9yayddKQorCitlbHNlOgorCisgICAgY2xhc3MgU3Bhd25Qcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fc3Bhd25fd2luMzIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3bkNvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdzcGF3bicKKyAgICAgICAgUHJvY2VzcyA9IFNwYXduUHJvY2VzcworCisgICAgX2NvbmNyZXRlX2NvbnRleHRzID0geworICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snc3Bhd24nXSkKKworIworIyBGb3JjZSB0aGUgc3RhcnQgbWV0aG9kCisjCisKK2RlZiBfZm9yY2Vfc3RhcnRfbWV0aG9kKG1ldGhvZCk6CisgICAgX2RlZmF1bHRfY29udGV4dC5fYWN0dWFsX2NvbnRleHQgPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorCisjCisjIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworIworCitfdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworZGVmIGdldF9zcGF3bmluZ19wb3BlbigpOgorICAgIHJldHVybiBnZXRhdHRyKF90bHMsICdzcGF3bmluZ19wb3BlbicsIE5vbmUpCisKK2RlZiBzZXRfc3Bhd25pbmdfcG9wZW4ocG9wZW4pOgorICAgIF90bHMuc3Bhd25pbmdfcG9wZW4gPSBwb3BlbgorCitkZWYgYXNzZXJ0X3NwYXduaW5nKG9iaik6CisgICAgaWYgZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyVzIG9iamVjdHMgc2hvdWxkIG9ubHkgYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzJworICAgICAgICAgICAgJyB0aHJvdWdoIGluaGVyaXRhbmNlJyAlIHR5cGUob2JqKS5fX25hbWVfXworICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKaW5kZXggZTMxZmM2MS4uOTdmN2FmNyAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CkBAIC00LDMyICs0LDcgQEAKICMgbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CiAjCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQotIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAogX19hbGxfXyA9IFsKQEAgLTQ3LDcgKzIyLDcgQEAKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgYXJyYXkKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQorZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IExvY2ssIFJMb2NrLCBTZW1hcGhvcmUsIEJvdW5kZWRTZW1hcGhvcmUKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBFdmVudCwgQ29uZGl0aW9uLCBCYXJyaWVyCiBmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQpAQCAtMTM4LDcgKzExMyw3IEBACiAgICAgcGFzcwogCiBkZWYgUG9vbChwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFRocmVhZFBvb2wKKyAgICBmcm9tIC4ucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAogICAgIHJldHVybiBUaHJlYWRQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKQogCiBKb2luYWJsZVF1ZXVlID0gUXVldWUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQppbmRleCA4NzRlYzhlLi42OTRlZjk2IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CkBAIC00LDMyICs0LDcgQEAKICMgbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKICMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCi0jICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCiBfX2FsbF9fID0gWyAnQ2xpZW50JywgJ0xpc3RlbmVyJywgJ1BpcGUnIF0KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc5MzIzNy4uMDAwMDAwMAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NzQgKzAsMCBAQAotIwotIyBNb2R1bGUgZm9yIHN0YXJ0aW5nIGEgcHJvY2VzcyBvYmplY3QgdXNpbmcgb3MuZm9yaygpIG9yIENyZWF0ZVByb2Nlc3MoKQotIwotIyBtdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgZXJybm8KLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHV0aWwsIHByb2Nlc3MKLQotX19hbGxfXyA9IFsnUG9wZW4nLCAnYXNzZXJ0X3NwYXduaW5nJywgJ2R1cGxpY2F0ZScsICdjbG9zZScsICdGb3JraW5nUGlja2xlciddCi0KLSMKLSMgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0jCi0KLWRlZiBhc3NlcnRfc3Bhd25pbmcoc2VsZik6Ci0gICAgaWYgbm90IFBvcGVuLnRocmVhZF9pc19zcGF3bmluZygpOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAnJXMgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMnCi0gICAgICAgICAgICAnIHRocm91Z2ggaW5oZXJpdGFuY2UnICUgdHlwZShzZWxmKS5fX25hbWVfXwotICAgICAgICAgICAgKQotCi0jCi0jIFRyeSBtYWtpbmcgc29tZSBjYWxsYWJsZSB0eXBlcyBwaWNrbGFibGUKLSMKLQotZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZXIKLWZyb20gY29weXJlZyBpbXBvcnQgZGlzcGF0Y2hfdGFibGUKLQotY2xhc3MgRm9ya2luZ1BpY2tsZXIoUGlja2xlcik6Ci0gICAgX2V4dHJhX3JlZHVjZXJzID0ge30KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBQaWNrbGVyLl9faW5pdF9fKHNlbGYsICphcmdzKQotICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlID0gZGlzcGF0Y2hfdGFibGUuY29weSgpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUudXBkYXRlKHNlbGYuX2V4dHJhX3JlZHVjZXJzKQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6Ci0gICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKLQotZGVmIF9yZWR1Y2VfbWV0aG9kKG0pOgotICAgIGlmIG0uX19zZWxmX18gaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fY2xhc3NfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19zZWxmX18sIG0uX19mdW5jX18uX19uYW1lX18pCi1jbGFzcyBfQzoKLSAgICBkZWYgZihzZWxmKToKLSAgICAgICAgcGFzcwotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodHlwZShfQygpLmYpLCBfcmVkdWNlX21ldGhvZCkKLQotCi1kZWYgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcihtKToKLSAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19vYmpjbGFzc19fLCBtLl9fbmFtZV9fKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodHlwZShsaXN0LmFwcGVuZCksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGludC5fX2FkZF9fKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLQotdHJ5OgotICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBkZWYgX3JlZHVjZV9wYXJ0aWFsKHApOgotICAgICAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQotICAgIGRlZiBfcmVidWlsZF9wYXJ0aWFsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzKToKLSAgICAgICAgcmV0dXJuIHBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIocGFydGlhbCwgX3JlZHVjZV9wYXJ0aWFsKQotCi0jCi0jIFVuaXgKLSMKLQotaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6Ci0gICAgZHVwbGljYXRlID0gb3MuZHVwCi0gICAgY2xvc2UgPSBvcy5jbG9zZQotCi0gICAgIwotICAgICMgV2UgZGVmaW5lIGEgUG9wZW4gY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGZyb20gc3VicHJvY2VzcywgYnV0Ci0gICAgIyB3aG9zZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHByb2Nlc3Mgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC4KLSAgICAjCi0KLSAgICBjbGFzcyBQb3BlbihvYmplY3QpOgotCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQotCi0gICAgICAgICAgICByLCB3ID0gb3MucGlwZSgpCi0gICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gcgotCi0gICAgICAgICAgICBzZWxmLnBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShyKQotICAgICAgICAgICAgICAgIGlmICdyYW5kb20nIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCi0gICAgICAgICAgICAgICAgICAgIHJhbmRvbS5zZWVkKCkKLSAgICAgICAgICAgICAgICBjb2RlID0gcHJvY2Vzc19vYmouX2Jvb3RzdHJhcCgpCi0gICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKLQotICAgICAgICAgICAgIyBgd2Agd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgY2hpbGQgZXhpdHMsIGF0IHdoaWNoIHBvaW50IGByYAotICAgICAgICAgICAgIyB3aWxsIGJlY29tZSByZWFkeSBmb3IgcmVhZGluZyAodXNpbmcgZS5nLiBzZWxlY3QoKSkuCi0gICAgICAgICAgICBvcy5jbG9zZSh3KQotICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHIsKSkKLQotICAgICAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBub3QgeWV0IGNyZWF0ZWQuIFNlZSAjMTczMTcxNwotICAgICAgICAgICAgICAgICAgICAgICAgIyBlLmVycm5vID09IGVycm5vLkVDSElMRCA9PSAxMAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgotICAgICAgICAgICAgICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gLW9zLldURVJNU0lHKHN0cykKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5XSUZFWElURUQoc3RzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gb3MuV0VYSVRTVEFUVVMoc3RzKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCB3YWl0Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCB3YWl0KFtzZWxmLnNlbnRpbmVsXSwgdGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmxvY2sgaWYgd2FpdCgpIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wb2xsKG9zLldOT0hBTkcgaWYgdGltZW91dCA9PSAwLjAgZWxzZSAwKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5TSUdURVJNKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0wLjEpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIHRocmVhZF9pc19zcGF3bmluZygpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSMKLSMgV2luZG93cwotIwotCi1lbHNlOgotICAgIGltcG9ydCBfdGhyZWFkCi0gICAgaW1wb3J0IG1zdmNydAotICAgIGltcG9ydCBfd2luYXBpCi0KLSAgICBmcm9tIHBpY2tsZSBpbXBvcnQgbG9hZCwgSElHSEVTVF9QUk9UT0NPTAotCi0gICAgZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBURVJNSU5BVEUgPSAweDEwMDAwCi0gICAgV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKLSAgICBXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQotCi0gICAgY2xvc2UgPSBfd2luYXBpLkNsb3NlSGFuZGxlCi0KLSAgICAjCi0gICAgIyBfcHl0aG9uX2V4ZSBpcyB0aGUgYXNzdW1lZCBwYXRoIHRvIHRoZSBweXRob24gZXhlY3V0YWJsZS4KLSAgICAjIFBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uIHdhbnQgdG8gbW9kaWZ5IGl0LgotICAgICMKLQotICAgIGlmIFdJTlNFUlZJQ0U6Ci0gICAgICAgIF9weXRob25fZXhlID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ3B5dGhvbi5leGUnKQotICAgIGVsc2U6Ci0gICAgICAgIF9weXRob25fZXhlID0gc3lzLmV4ZWN1dGFibGUKLQotICAgIGRlZiBzZXRfZXhlY3V0YWJsZShleGUpOgotICAgICAgICBnbG9iYWwgX3B5dGhvbl9leGUKLSAgICAgICAgX3B5dGhvbl9leGUgPSBleGUKLQotICAgICMKLSAgICAjCi0gICAgIwotCi0gICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKLSAgICAgICAgaWYgdGFyZ2V0X3Byb2Nlc3MgaXMgTm9uZToKLSAgICAgICAgICAgIHRhcmdldF9wcm9jZXNzID0gX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpCi0gICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKLSAgICAgICAgICAgIF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKSwgaGFuZGxlLCB0YXJnZXRfcHJvY2VzcywKLSAgICAgICAgICAgIDAsIGluaGVyaXRhYmxlLCBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUwotICAgICAgICAgICAgKQotCi0gICAgIwotICAgICMgV2UgZGVmaW5lIGEgUG9wZW4gY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGZyb20gc3VicHJvY2VzcywgYnV0Ci0gICAgIyB3aG9zZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHByb2Nlc3Mgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC4KLSAgICAjCi0KLSAgICBjbGFzcyBQb3BlbihvYmplY3QpOgotICAgICAgICAnJycKLSAgICAgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUgY29kZSBvZiBhIHByb2Nlc3Mgb2JqZWN0Ci0gICAgICAgICcnJwotICAgICAgICBfdGxzID0gX3RocmVhZC5fbG9jYWwoKQotCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6Ci0gICAgICAgICAgICBjbWQgPSAnICcuam9pbignIiVzIicgJSB4IGZvciB4IGluIGdldF9jb21tYW5kX2xpbmUoKSkKLSAgICAgICAgICAgIHByZXBfZGF0YSA9IGdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQotCi0gICAgICAgICAgICAjIGNyZWF0ZSBwaXBlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggY2hpbGQKLSAgICAgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCi0KLSAgICAgICAgICAgICMgZ2V0IGhhbmRsZSBmb3IgcmVhZCBlbmQgb2YgdGhlIHBpcGUgYW5kIG1ha2UgaXQgaW5oZXJpdGFibGUKLSAgICAgICAgICAgIHJoYW5kbGUgPSBkdXBsaWNhdGUobXN2Y3J0LmdldF9vc2ZoYW5kbGUocmZkKSwgaW5oZXJpdGFibGU9VHJ1ZSkKLSAgICAgICAgICAgIG9zLmNsb3NlKHJmZCkKLQotICAgICAgICAgICAgd2l0aCBvcGVuKHdmZCwgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyB0b19jaGlsZDoKLSAgICAgICAgICAgICAgICAjIHN0YXJ0IHByb2Nlc3MKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGhwLCBodCwgcGlkLCB0aWQgPSBfd2luYXBpLkNyZWF0ZVByb2Nlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBfcHl0aG9uX2V4ZSwgY21kICsgKCcgJXMnICUgcmhhbmRsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCAxLCAwLCBOb25lLCBOb25lLCBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaHQpCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UocmhhbmRsZSkKLQotICAgICAgICAgICAgICAgICMgc2V0IGF0dHJpYnV0ZXMgb2Ygc2VsZgotICAgICAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCi0gICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhwCi0gICAgICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IGludChocCkKLSAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIF93aW5hcGkuQ2xvc2VIYW5kbGUsIChzZWxmLnNlbnRpbmVsLCkpCi0KLSAgICAgICAgICAgICAgICAjIHNlbmQgaW5mb3JtYXRpb24gdG8gY2hpbGQKLSAgICAgICAgICAgICAgICBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZHVtcChwcmVwX2RhdGEsIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgICAgICBkdW1wKHByb2Nlc3Nfb2JqLCB0b19jaGlsZCwgSElHSEVTVF9QUk9UT0NPTCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBkZWwgUG9wZW4uX3Rscy5wcm9jZXNzX2hhbmRsZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIHRocmVhZF9pc19zcGF3bmluZygpOgotICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoUG9wZW4uX3RscywgJ3Byb2Nlc3NfaGFuZGxlJywgTm9uZSkgaXMgbm90IE5vbmUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKGhhbmRsZSk6Ci0gICAgICAgICAgICByZXR1cm4gZHVwbGljYXRlKGhhbmRsZSwgUG9wZW4uX3Rscy5wcm9jZXNzX2hhbmRsZSkKLQotICAgICAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBtc2VjcyA9IF93aW5hcGkuSU5GSU5JVEUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtc2VjcyA9IG1heCgwLCBpbnQodGltZW91dCAqIDEwMDAgKyAwLjUpKQotCi0gICAgICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yU2luZ2xlT2JqZWN0KGludChzZWxmLl9oYW5kbGUpLCBtc2VjcykKLSAgICAgICAgICAgICAgICBpZiByZXMgPT0gX3dpbmFwaS5XQUlUX09CSkVDVF8wOgotICAgICAgICAgICAgICAgICAgICBjb2RlID0gX3dpbmFwaS5HZXRFeGl0Q29kZVByb2Nlc3Moc2VsZi5faGFuZGxlKQotICAgICAgICAgICAgICAgICAgICBpZiBjb2RlID09IFRFUk1JTkFURToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtc2lnbmFsLlNJR1RFUk0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gY29kZQotCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHBvbGwoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi53YWl0KHRpbWVvdXQ9MCkKLQotICAgICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3MoaW50KHNlbGYuX2hhbmRsZSksIFRFUk1JTkFURSkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MS4wKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICMKLSAgICAjCi0gICAgIwotCi0gICAgZGVmIGlzX2ZvcmtpbmcoYXJndik6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm4gd2hldGhlciBjb21tYW5kbGluZSBpbmRpY2F0ZXMgd2UgYXJlIGZvcmtpbmcKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGxlbihhcmd2KSA+PSAyIGFuZCBhcmd2WzFdID09ICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJzoKLSAgICAgICAgICAgIGFzc2VydCBsZW4oYXJndikgPT0gMwotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0KLSAgICBkZWYgZnJlZXplX3N1cHBvcnQoKToKLSAgICAgICAgJycnCi0gICAgICAgIFJ1biBjb2RlIGZvciBwcm9jZXNzIG9iamVjdCBpZiB0aGlzIGluIG5vdCB0aGUgbWFpbiBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBpc19mb3JraW5nKHN5cy5hcmd2KToKLSAgICAgICAgICAgIG1haW4oKQotICAgICAgICAgICAgc3lzLmV4aXQoKQotCi0KLSAgICBkZWYgZ2V0X2NvbW1hbmRfbGluZSgpOgotICAgICAgICAnJycKLSAgICAgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcwotICAgICAgICAnJycKLSAgICAgICAgaWYgZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCi0gICAgICAgICAgICBBdHRlbXB0IHRvIHN0YXJ0IGEgbmV3IHByb2Nlc3MgYmVmb3JlIHRoZSBjdXJyZW50IHByb2Nlc3MKLSAgICAgICAgICAgIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KLQotICAgICAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHlvdSBhcmUgb24gV2luZG93cyBhbmQgeW91IGhhdmUKLSAgICAgICAgICAgIGZvcmdvdHRlbiB0byB1c2UgdGhlIHByb3BlciBpZGlvbSBpbiB0aGUgbWFpbiBtb2R1bGU6Ci0KLSAgICAgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCi0gICAgICAgICAgICAgICAgICAgIC4uLgotCi0gICAgICAgICAgICBUaGUgImZyZWV6ZV9zdXBwb3J0KCkiIGxpbmUgY2FuIGJlIG9taXR0ZWQgaWYgdGhlIHByb2dyYW0KLSAgICAgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhIFdpbmRvd3MgZXhlY3V0YWJsZS4nJycpCi0KLSAgICAgICAgaWYgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcm9nID0gJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IG1haW47IG1haW4oKScKLSAgICAgICAgICAgIG9wdHMgPSB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQotICAgICAgICAgICAgcmV0dXJuIFtfcHl0aG9uX2V4ZV0gKyBvcHRzICsgWyctYycsIHByb2csICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLQotCi0gICAgZGVmIG1haW4oKToKLSAgICAgICAgJycnCi0gICAgICAgIFJ1biBjb2RlIHNwZWNpZmllZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQotICAgICAgICAnJycKLSAgICAgICAgYXNzZXJ0IGlzX2Zvcmtpbmcoc3lzLmFyZ3YpCi0KLSAgICAgICAgaGFuZGxlID0gaW50KHN5cy5hcmd2Wy0xXSkKLSAgICAgICAgZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoaGFuZGxlLCBvcy5PX1JET05MWSkKLSAgICAgICAgZnJvbV9wYXJlbnQgPSBvcy5mZG9wZW4oZmQsICdyYicpCi0KLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKLSAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IGxvYWQoZnJvbV9wYXJlbnQpCi0gICAgICAgIHByZXBhcmUocHJlcGFyYXRpb25fZGF0YSkKLSAgICAgICAgc2VsZiA9IGxvYWQoZnJvbV9wYXJlbnQpCi0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBGYWxzZQotCi0gICAgICAgIGZyb21fcGFyZW50LmNsb3NlKCkKLQotICAgICAgICBleGl0Y29kZSA9IHNlbGYuX2Jvb3RzdHJhcCgpCi0gICAgICAgIHN5cy5leGl0KGV4aXRjb2RlKQotCi0KLSAgICBkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm4gaW5mbyBhYm91dCBwYXJlbnQgbmVlZGVkIGJ5IGNoaWxkIHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0Ci0gICAgICAgICcnJwotICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBfbG9nZ2VyLCBfbG9nX3RvX3N0ZGVycgotCi0gICAgICAgIGQgPSBkaWN0KAotICAgICAgICAgICAgbmFtZT1uYW1lLAotICAgICAgICAgICAgc3lzX3BhdGg9c3lzLnBhdGgsCi0gICAgICAgICAgICBzeXNfYXJndj1zeXMuYXJndiwKLSAgICAgICAgICAgIGxvZ190b19zdGRlcnI9X2xvZ190b19zdGRlcnIsCi0gICAgICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKLSAgICAgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAotICAgICAgICAgICAgKQotCi0gICAgICAgIGlmIF9sb2dnZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkWydsb2dfbGV2ZWwnXSA9IF9sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQotCi0gICAgICAgIGlmIG5vdCBXSU5FWEUgYW5kIG5vdCBXSU5TRVJWSUNFOgotICAgICAgICAgICAgbWFpbl9wYXRoID0gZ2V0YXR0cihzeXMubW9kdWxlc1snX19tYWluX18nXSwgJ19fZmlsZV9fJywgTm9uZSkKLSAgICAgICAgICAgIGlmIG5vdCBtYWluX3BhdGggYW5kIHN5cy5hcmd2WzBdIG5vdCBpbiAoJycsICctYycpOgotICAgICAgICAgICAgICAgIG1haW5fcGF0aCA9IHN5cy5hcmd2WzBdCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobWFpbl9wYXRoKSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1haW5fcGF0aCA9IG9zLnBhdGguam9pbihwcm9jZXNzLk9SSUdJTkFMX0RJUiwgbWFpbl9wYXRoKQotICAgICAgICAgICAgICAgIGRbJ21haW5fcGF0aCddID0gb3MucGF0aC5ub3JtcGF0aChtYWluX3BhdGgpCi0KLSAgICAgICAgcmV0dXJuIGQKLQotIwotIyBQcmVwYXJlIGN1cnJlbnQgcHJvY2VzcwotIwotCi1vbGRfbWFpbl9tb2R1bGVzID0gW10KLQotZGVmIHByZXBhcmUoZGF0YSk6Ci0gICAgJycnCi0gICAgVHJ5IHRvIGdldCBjdXJyZW50IHByb2Nlc3MgcmVhZHkgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAnJycKLSAgICBvbGRfbWFpbl9tb2R1bGVzLmFwcGVuZChzeXMubW9kdWxlc1snX19tYWluX18nXSkKLQotICAgIGlmICduYW1lJyBpbiBkYXRhOgotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUgPSBkYXRhWyduYW1lJ10KLQotICAgIGlmICdhdXRoa2V5JyBpbiBkYXRhOgotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9hdXRoa2V5ID0gZGF0YVsnYXV0aGtleSddCi0KLSAgICBpZiAnbG9nX3RvX3N0ZGVycicgaW4gZGF0YSBhbmQgZGF0YVsnbG9nX3RvX3N0ZGVyciddOgotICAgICAgICB1dGlsLmxvZ190b19zdGRlcnIoKQotCi0gICAgaWYgJ2xvZ19sZXZlbCcgaW4gZGF0YToKLSAgICAgICAgdXRpbC5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoZGF0YVsnbG9nX2xldmVsJ10pCi0KLSAgICBpZiAnc3lzX3BhdGgnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5wYXRoID0gZGF0YVsnc3lzX3BhdGgnXQotCi0gICAgaWYgJ3N5c19hcmd2JyBpbiBkYXRhOgotICAgICAgICBzeXMuYXJndiA9IGRhdGFbJ3N5c19hcmd2J10KLQotICAgIGlmICdkaXInIGluIGRhdGE6Ci0gICAgICAgIG9zLmNoZGlyKGRhdGFbJ2RpciddKQotCi0gICAgaWYgJ29yaWdfZGlyJyBpbiBkYXRhOgotICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiA9IGRhdGFbJ29yaWdfZGlyJ10KLQotICAgIGlmICdtYWluX3BhdGgnIGluIGRhdGE6Ci0gICAgICAgICMgWFhYIChuY29naGxhbik6IFRoZSBmb2xsb3dpbmcgY29kZSBtYWtlcyBzZXZlcmFsIGJvZ3VzCi0gICAgICAgICMgYXNzdW1wdGlvbnMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBfX2ZpbGVfXwotICAgICAgICAjIGFuZCBhIG1vZHVsZSdzIHJlYWwgbmFtZS4gU2VlIFBFUCAzMDIgYW5kIGlzc3VlICMxMDg0NQotICAgICAgICBtYWluX3BhdGggPSBkYXRhWydtYWluX3BhdGgnXQotICAgICAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX2luaXRfXyc6Ci0gICAgICAgICAgICBtYWluX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZShtYWluX3BhdGgpKQotCi0gICAgICAgIGlmIG1haW5fbmFtZSA9PSAnX19tYWluX18nOgotICAgICAgICAgICAgbWFpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1snX19tYWluX18nXQotICAgICAgICAgICAgbWFpbl9tb2R1bGUuX19maWxlX18gPSBtYWluX3BhdGgKLSAgICAgICAgZWxpZiBtYWluX25hbWUgIT0gJ2lweXRob24nOgotICAgICAgICAgICAgIyBNYWluIG1vZHVsZXMgbm90IGFjdHVhbGx5IGNhbGxlZCBfX21haW5fXy5weSBtYXkKLSAgICAgICAgICAgICMgY29udGFpbiBhZGRpdGlvbmFsIGNvZGUgdGhhdCBzaG91bGQgc3RpbGwgYmUgZXhlY3V0ZWQKLSAgICAgICAgICAgIGltcG9ydCBpbXAKLQotICAgICAgICAgICAgaWYgbWFpbl9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGlycyA9IE5vbmUKLSAgICAgICAgICAgIGVsaWYgb3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpLnN0YXJ0c3dpdGgoJ19faW5pdF9fLnB5Jyk6Ci0gICAgICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShtYWluX3BhdGgpXQotCi0gICAgICAgICAgICBhc3NlcnQgbWFpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlcywgbWFpbl9uYW1lCi0gICAgICAgICAgICBmaWxlLCBwYXRoX25hbWUsIGV0YyA9IGltcC5maW5kX21vZHVsZShtYWluX25hbWUsIGRpcnMpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBXZSB3b3VsZCBsaWtlIHRvIGRvICJpbXAubG9hZF9tb2R1bGUoJ19fbWFpbl9fJywgLi4uKSIKLSAgICAgICAgICAgICAgICAjIGhlcmUuICBIb3dldmVyLCB0aGF0IHdvdWxkIGNhdXNlICdpZiBfX25hbWVfXyA9PQotICAgICAgICAgICAgICAgICMgIl9fbWFpbl9fIicgY2xhdXNlcyB0byBiZSBleGVjdXRlZC4KLSAgICAgICAgICAgICAgICBtYWluX21vZHVsZSA9IGltcC5sb2FkX21vZHVsZSgKLSAgICAgICAgICAgICAgICAgICAgJ19fcGFyZW50c19tYWluX18nLCBmaWxlLCBwYXRoX25hbWUsIGV0YwotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQotCi0gICAgICAgICAgICBzeXMubW9kdWxlc1snX19tYWluX18nXSA9IG1haW5fbW9kdWxlCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX25hbWVfXyA9ICdfX21haW5fXycKLQotICAgICAgICAgICAgIyBUcnkgdG8gbWFrZSB0aGUgcG90ZW50aWFsbHkgcGlja2xhYmxlIG9iamVjdHMgaW4KLSAgICAgICAgICAgICMgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gcmVhbGl6ZSB0aGV5IGFyZSBpbiB0aGUgbWFpbgotICAgICAgICAgICAgIyBtb2R1bGUgLS0gc29tZXdoYXQgdWdseS4KLSAgICAgICAgICAgIGZvciBvYmogaW4gbGlzdChtYWluX21vZHVsZS5fX2RpY3RfXy52YWx1ZXMoKSk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpZiBvYmouX19tb2R1bGVfXyA9PSAnX19wYXJlbnRzX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmouX19tb2R1bGVfXyA9ICdfX21haW5fXycKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtzZXJ2ZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3NTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDI2NyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3RvcnMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBjb25uZWN0aW9uCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHNlbWFwaG9yZV90cmFja2VyCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAnZ2V0X2luaGVyaXRlZF9mZHMnLCAnY29ubmVjdF90b19uZXdfcHJvY2VzcycsCisgICAgICAgICAgICdzZXRfZm9ya3NlcnZlcl9wcmVsb2FkJ10KKworIworIworIworCitNQVhGRFNfVE9fU0VORCA9IDI1NgorVU5TSUdORURfU1RSVUNUID0gc3RydWN0LlN0cnVjdCgnUScpICAgICAjIGxhcmdlIGVub3VnaCBmb3IgcGlkX3QKKworIworIyBGb3Jrc2VydmVyIGNsYXNzCisjCisKK2NsYXNzIEZvcmtTZXJ2ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkID0gTm9uZQorICAgICAgICBzZWxmLl9pbmhlcml0ZWRfZmRzID0gTm9uZQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9wcmVsb2FkX21vZHVsZXMgPSBbJ19fbWFpbl9fJ10KKworICAgIGRlZiBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkKHNlbGYsIG1vZHVsZXNfbmFtZXMpOgorICAgICAgICAnJydTZXQgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdG8gdHJ5IHRvIGxvYWQgaW4gZm9ya3NlcnZlciBwcm9jZXNzLicnJworICAgICAgICBpZiBub3QgYWxsKHR5cGUobW9kKSBpcyBzdHIgZm9yIG1vZCBpbiBzZWxmLl9wcmVsb2FkX21vZHVsZXMpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdtb2R1bGVfbmFtZXMgbXVzdCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncycpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IG1vZHVsZXNfbmFtZXMKKworICAgIGRlZiBnZXRfaW5oZXJpdGVkX2ZkcyhzZWxmKToKKyAgICAgICAgJycnUmV0dXJuIGxpc3Qgb2YgZmRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCBwcm9jZXNzLgorCisgICAgICAgIFRoaXMgcmV0dXJucyBOb25lIGlmIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2FzIG5vdCBzdGFydGVkIGJ5IGZvcmsKKyAgICAgICAgc2VydmVyLgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIHNlbGYuX2luaGVyaXRlZF9mZHMKKworICAgIGRlZiBjb25uZWN0X3RvX25ld19wcm9jZXNzKHNlbGYsIGZkcyk6CisgICAgICAgICcnJ1JlcXVlc3QgZm9ya3NlcnZlciB0byBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzLgorCisgICAgICAgIFJldHVybnMgYSBwYWlyIG9mIGZkcyAoc3RhdHVzX3IsIGRhdGFfdykuICBUaGUgY2FsbGluZyBwcm9jZXNzIGNhbiByZWFkCisgICAgICAgIHRoZSBjaGlsZCBwcm9jZXNzJ3MgcGlkIGFuZCAoZXZlbnR1YWxseSkgaXRzIHJldHVybmNvZGUgZnJvbSBzdGF0dXNfci4KKyAgICAgICAgVGhlIGNhbGxpbmcgcHJvY2VzcyBzaG91bGQgd3JpdGUgdG8gZGF0YV93IHRoZSBwaWNrbGVkIHByZXBhcmF0aW9uIGFuZAorICAgICAgICBwcm9jZXNzIGRhdGEuCisgICAgICAgICcnJworICAgICAgICBzZWxmLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgaWYgbGVuKGZkcykgKyA0ID49IE1BWEZEU19UT19TRU5EOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndG9vIG1hbnkgZmRzJykKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBjbGllbnQ6CisgICAgICAgICAgICBjbGllbnQuY29ubmVjdChzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MpCisgICAgICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY2hpbGRfciwgcGFyZW50X3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGFsbGZkcyA9IFtjaGlsZF9yLCBjaGlsZF93LCBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZV90cmFja2VyLmdldGZkKCldCisgICAgICAgICAgICBhbGxmZHMgKz0gZmRzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLnNlbmRmZHMoY2xpZW50LCBhbGxmZHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudF9yLCBwYXJlbnRfdworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHBhcmVudF9yKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHBhcmVudF93KQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfdykKKworICAgIGRlZiBlbnN1cmVfcnVubmluZyhzZWxmKToKKyAgICAgICAgJycnTWFrZSBzdXJlIHRoYXQgYSBmb3JrIHNlcnZlciBpcyBydW5uaW5nLgorCisgICAgICAgIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSBwcm9jZXNzLiAgTm90ZSB0aGF0IHVzdWFsbHkgYSBjaGlsZAorICAgICAgICBwcm9jZXNzIHdpbGwganVzdCByZXVzZSB0aGUgZm9ya3NlcnZlciBzdGFydGVkIGJ5IGl0cyBwYXJlbnQsIHNvCisgICAgICAgIGVuc3VyZV9ydW5uaW5nKCkgd2lsbCBkbyBub3RoaW5nLgorICAgICAgICAnJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgY21kID0gKCdmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3Jrc2VydmVyIGltcG9ydCBtYWluOyAnICsKKyAgICAgICAgICAgICAgICAgICAnbWFpbiglZCwgJWQsICVyLCAqKiVyKScpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3ByZWxvYWRfbW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZXNpcmVkX2tleXMgPSB7J21haW5fcGF0aCcsICdzeXNfcGF0aCd9CisgICAgICAgICAgICAgICAgZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKCdpZ25vcmUnKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkaWN0KCh4LHkpIGZvciAoeCx5KSBpbiBkYXRhLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4IGluIGRlc2lyZWRfa2V5cykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IHt9CisKKyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCkgYXMgbGlzdGVuZXI6CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGNvbm5lY3Rpb24uYXJiaXRyYXJ5X2FkZHJlc3MoJ0FGX1VOSVgnKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmJpbmQoYWRkcmVzcykKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChhZGRyZXNzLCAwbzYwMCkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMTAwKQorCisgICAgICAgICAgICAgICAgIyBhbGwgY2xpZW50IHByb2Nlc3NlcyBvd24gdGhlIHdyaXRlIGVuZCBvZiB0aGUgImFsaXZlIiBwaXBlOworICAgICAgICAgICAgICAgICMgd2hlbiB0aGV5IGFsbCB0ZXJtaW5hdGUgdGhlIHJlYWQgZW5kIGJlY29tZXMgcmVhZHkuCisgICAgICAgICAgICAgICAgYWxpdmVfciwgYWxpdmVfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MgPSBbbGlzdGVuZXIuZmlsZW5vKCksIGFsaXZlX3JdCisgICAgICAgICAgICAgICAgICAgIGNtZCAlPSAobGlzdGVuZXIuZmlsZW5vKCksIGFsaXZlX3IsIHNlbGYuX3ByZWxvYWRfbW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKQorICAgICAgICAgICAgICAgICAgICBleGUgPSBzcGF3bi5nZXRfZXhlY3V0YWJsZSgpCisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZXhlXSArIHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZF0KKyAgICAgICAgICAgICAgICAgICAgcGlkID0gdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYWxpdmVfdykKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkID0gYWxpdmVfdworCisjCisjCisjCisKK2RlZiBtYWluKGxpc3RlbmVyX2ZkLCBhbGl2ZV9yLCBwcmVsb2FkLCBtYWluX3BhdGg9Tm9uZSwgc3lzX3BhdGg9Tm9uZSk6CisgICAgJycnUnVuIGZvcmtzZXJ2ZXIuJycnCisgICAgaWYgcHJlbG9hZDoKKyAgICAgICAgaWYgJ19fbWFpbl9fJyBpbiBwcmVsb2FkIGFuZCBtYWluX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNwYXduLmltcG9ydF9tYWluX3BhdGgobWFpbl9wYXRoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBkZWwgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZworICAgICAgICBmb3IgbW9kbmFtZSBpbiBwcmVsb2FkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9faW1wb3J0X18obW9kbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIGNsb3NlIHN5cy5zdGRpbgorICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IG9wZW4ob3MuZGV2bnVsbCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgaWdub3JpbmcgU0lHQ0hMRCBtZWFucyBubyBuZWVkIHRvIHJlYXAgem9tYmllIHByb2Nlc3NlcworICAgIGhhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzaWduYWwuU0lHX0lHTikKKyAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIGZpbGVubz1saXN0ZW5lcl9mZCkgYXMgbGlzdGVuZXIsIFwKKyAgICAgICAgIHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgX2ZvcmtzZXJ2ZXIuX2ZvcmtzZXJ2ZXJfYWRkcmVzcyA9IGxpc3RlbmVyLmdldHNvY2tuYW1lKCkKKworICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihsaXN0ZW5lciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGFsaXZlX3IsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmZkcyA9IFtrZXkuZmlsZW9iaiBmb3IgKGtleSwgZXZlbnRzKSBpbiBzZWxlY3Rvci5zZWxlY3QoKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmZkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBpZiBhbGl2ZV9yIGluIHJmZHM6CisgICAgICAgICAgICAgICAgICAgICMgRU9GIGJlY2F1c2Ugbm8gbW9yZSBjbGllbnQgcHJvY2Vzc2VzIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLnJlYWQoYWxpdmVfciwgMSkgPT0gYicnCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgICAgICAgICAgICAgIGFzc2VydCBsaXN0ZW5lciBpbiByZmRzCisgICAgICAgICAgICAgICAgd2l0aCBsaXN0ZW5lci5hY2NlcHQoKVswXSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gMQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5mb3JrKCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VydmVfb25lKHMsIGxpc3RlbmVyLCBhbGl2ZV9yLCBoYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KGNvZGUpCisKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBfc2VydmVfb25lKHMsIGxpc3RlbmVyLCBhbGl2ZV9yLCBoYW5kbGVyKToKKyAgICAjIGNsb3NlIHVubmVjZXNzYXJ5IHN0dWZmIGFuZCByZXNldCBTSUdDSExEIGhhbmRsZXIKKyAgICBsaXN0ZW5lci5jbG9zZSgpCisgICAgb3MuY2xvc2UoYWxpdmVfcikKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBoYW5kbGVyKQorCisgICAgIyByZWNlaXZlIGZkcyBmcm9tIHBhcmVudCBwcm9jZXNzCisgICAgZmRzID0gcmVkdWN0aW9uLnJlY3ZmZHMocywgTUFYRkRTX1RPX1NFTkQgKyAxKQorICAgIHMuY2xvc2UoKQorICAgIGFzc2VydCBsZW4oZmRzKSA8PSBNQVhGRFNfVE9fU0VORAorICAgIChjaGlsZF9yLCBjaGlsZF93LCBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hbGl2ZV9mZCwKKyAgICAgc3RmZCwgKl9mb3Jrc2VydmVyLl9pbmhlcml0ZWRfZmRzKSA9IGZkcworICAgIHNlbWFwaG9yZV90cmFja2VyLl9zZW1hcGhvcmVfdHJhY2tlci5fZmQgPSBzdGZkCisKKyAgICAjIHNlbmQgcGlkIHRvIGNsaWVudCBwcm9jZXNzZXMKKyAgICB3cml0ZV91bnNpZ25lZChjaGlsZF93LCBvcy5nZXRwaWQoKSkKKworICAgICMgcmVzZWVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgcmFuZG9tLnNlZWQoKQorCisgICAgIyBydW4gcHJvY2VzcyBvYmplY3QgcmVjZWl2ZWQgb3ZlciBwaXBlCisgICAgY29kZSA9IHNwYXduLl9tYWluKGNoaWxkX3IpCisKKyAgICAjIHdyaXRlIHRoZSBleGl0IGNvZGUgdG8gdGhlIHBpcGUKKyAgICB3cml0ZV91bnNpZ25lZChjaGlsZF93LCBjb2RlKQorCisjCisjIFJlYWQgYW5kIHdyaXRlIHVuc2lnbmVkIG51bWJlcnMKKyMKKworZGVmIHJlYWRfdW5zaWduZWQoZmQpOgorICAgIGRhdGEgPSBiJycKKyAgICBsZW5ndGggPSBVTlNJR05FRF9TVFJVQ1Quc2l6ZQorICAgIHdoaWxlIGxlbihkYXRhKSA8IGxlbmd0aDoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gb3MucmVhZChmZCwgbGVuZ3RoIC0gbGVuKGRhdGEpKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCd1bmV4cGVjdGVkIEVPRicpCisgICAgICAgIGRhdGEgKz0gcworICAgIHJldHVybiBVTlNJR05FRF9TVFJVQ1QudW5wYWNrKGRhdGEpWzBdCisKK2RlZiB3cml0ZV91bnNpZ25lZChmZCwgbik6CisgICAgbXNnID0gVU5TSUdORURfU1RSVUNULnBhY2sobikKKyAgICB3aGlsZSBtc2c6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoZmQsIG1zZykKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbmJ5dGVzID09IDA6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3Nob3VsZCBub3QgZ2V0IGhlcmUnKQorICAgICAgICBtc2cgPSBtc2dbbmJ5dGVzOl0KKworIworIworIworCitfZm9ya3NlcnZlciA9IEZvcmtTZXJ2ZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfZm9ya3NlcnZlci5lbnN1cmVfcnVubmluZworZ2V0X2luaGVyaXRlZF9mZHMgPSBfZm9ya3NlcnZlci5nZXRfaW5oZXJpdGVkX2ZkcworY29ubmVjdF90b19uZXdfcHJvY2VzcyA9IF9mb3Jrc2VydmVyLmNvbm5lY3RfdG9fbmV3X3Byb2Nlc3MKK3NldF9mb3Jrc2VydmVyX3ByZWxvYWQgPSBfZm9ya3NlcnZlci5zZXRfZm9ya3NlcnZlcl9wcmVsb2FkCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKaW5kZXggZTYzZmRiOC4uOThiZmRjOCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQpAQCAtOCwxNSArOCwxNyBAQAogIwogCiBpbXBvcnQgYmlzZWN0CitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbW1hcAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBpdGVydG9vbHMKLQogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IEZpbmFsaXplLCBpbmZvCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCiAKIF9fYWxsX18gPSBbJ0J1ZmZlcldyYXBwZXInXQogCkBAIC0zMCwxNyArMzIsMjUgQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAgICAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICdweW0tJWQtJWQnICUgKG9zLmdldHBpZCgpLCBuZXh0KEFyZW5hLl9jb3VudGVyKSkKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKC0xLCBzZWxmLnNpemUsIHRhZ25hbWU9c2VsZi5uYW1lKQotICAgICAgICAgICAgYXNzZXJ0IF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMCwgJ3RhZ25hbWUgYWxyZWFkeSBpbiB1c2UnCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIG5hbWUgPSAncHltLSVkLSVzJyAlIChvcy5nZXRwaWQoKSwgbmV4dChzZWxmLl9yYW5kKSkKKyAgICAgICAgICAgICAgICBidWYgPSBtbWFwLm1tYXAoLTEsIHNpemUsIHRhZ25hbWU9bmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfd2luYXBpLkdldExhc3RFcnJvcigpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHJlb3BlbmVkIGEgcHJlZXhpc3RpbmcgbW1hcC4KKyAgICAgICAgICAgICAgICBidWYuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoJ0Nhbm5vdCBmaW5kIG5hbWUgZm9yIG5ldyBtbWFwJykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmCiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IChzZWxmLnNpemUsIHNlbGYubmFtZSkKIAogICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlCiAKICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CkBAIC01MiwxMCArNjIsMjggQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNpemUpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBmZD0tMSk6CiAgICAgICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgICAgICBzZWxmLmZkID0gZmQKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKAorICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSdweW0tJWQtJyVvcy5nZXRwaWQoKSwgZGlyPXV0aWwuZ2V0X3RlbXBfZGlyKCkpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuZmQsKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5mZCwgJ3diJywgY2xvc2VmZD1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiJ1wwJypzaXplKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoc2VsZi5mZCwgc2VsZi5zaXplKQorCisgICAgZGVmIHJlZHVjZV9hcmVuYShhKToKKyAgICAgICAgaWYgYS5mZCA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FyZW5hIGlzIHVucGlja2xhYmxlIGJlY2F1c2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ya2luZyB3YXMgZW5hYmxlZCB3aGVuIGl0IHdhcyBjcmVhdGVkJykKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfYXJlbmEsIChhLnNpemUsIHJlZHVjdGlvbi5EdXBGZChhLmZkKSkKKworICAgIGRlZiByZWJ1aWxkX2FyZW5hKHNpemUsIGR1cGZkKToKKyAgICAgICAgcmV0dXJuIEFyZW5hKHNpemUsIGR1cGZkLmRldGFjaCgpKQorCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKEFyZW5hLCByZWR1Y2VfYXJlbmEpCiAKICMKICMgQ2xhc3MgYWxsb3dpbmcgYWxsb2NhdGlvbiBvZiBjaHVua3Mgb2YgbWVtb3J5IGZyb20gYXJlbmFzCkBAIC05MCw3ICsxMTgsNyBAQAogICAgICAgICBpZiBpID09IGxlbihzZWxmLl9sZW5ndGhzKToKICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX3JvdW5kdXAobWF4KHNlbGYuX3NpemUsIHNpemUpLCBtbWFwLlBBR0VTSVpFKQogICAgICAgICAgICAgc2VsZi5fc2l6ZSAqPSAyCi0gICAgICAgICAgICBpbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQorICAgICAgICAgICAgdXRpbC5pbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQogICAgICAgICAgICAgYXJlbmEgPSBBcmVuYShsZW5ndGgpCiAgICAgICAgICAgICBzZWxmLl9hcmVuYXMuYXBwZW5kKGFyZW5hKQogICAgICAgICAgICAgcmV0dXJuIChhcmVuYSwgMCwgbGVuZ3RoKQpAQCAtMjE2LDcgKzI0NCw3IEBACiAgICAgICAgIGFzc2VydCAwIDw9IHNpemUgPCBzeXMubWF4c2l6ZQogICAgICAgICBibG9jayA9IEJ1ZmZlcldyYXBwZXIuX2hlYXAubWFsbG9jKHNpemUpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gKGJsb2NrLCBzaXplKQotICAgICAgICBGaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgQnVmZmVyV3JhcHBlci5faGVhcC5mcmVlLCBhcmdzPShibG9jaywpKQogCiAgICAgZGVmIGNyZWF0ZV9tZW1vcnl2aWV3KHNlbGYpOgogICAgICAgICAoYXJlbmEsIHN0YXJ0LCBzdG9wKSwgc2l6ZSA9IHNlbGYuX3N0YXRlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQppbmRleCA5NjA1NmIwLi5jYzg3ZDM2IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKQEAgLTE5LDExICsxOSwxNiBAQAogaW1wb3J0IGFycmF5CiBpbXBvcnQgcXVldWUKIAotZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbiwgUG9vbCwgdXRpbCwgY29ubmVjdGlvbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgQXV0aGVudGljYXRpb25TdHJpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IFBvcGVuLCBGb3JraW5nUGlja2xlcgogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwb29sCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQKIAogIwogIyBSZWdpc3RlciBzb21lIHRoaW5ncyBmb3IgcGlja2xpbmcKQEAgLTMxLDE2ICszNiwxNCBAQAogCiBkZWYgcmVkdWNlX2FycmF5KGEpOgogICAgIHJldHVybiBhcnJheS5hcnJheSwgKGEudHlwZWNvZGUsIGEudG9ieXRlcygpKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoYXJyYXkuYXJyYXksIHJlZHVjZV9hcnJheSkKK3JlZHVjdGlvbi5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQogCiB2aWV3X3R5cGVzID0gW3R5cGUoZ2V0YXR0cih7fSwgbmFtZSkoKSkgZm9yIG5hbWUgaW4gKCdpdGVtcycsJ2tleXMnLCd2YWx1ZXMnKV0KIGlmIHZpZXdfdHlwZXNbMF0gaXMgbm90IGxpc3Q6ICAgICAgICMgb25seSBuZWVkZWQgaW4gUHkzLjAKICAgICBkZWYgcmVidWlsZF9hc19saXN0KG9iaik6CiAgICAgICAgIHJldHVybiBsaXN0LCAobGlzdChvYmopLCkKICAgICBmb3Igdmlld190eXBlIGluIHZpZXdfdHlwZXM6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQotICAgICAgICBpbXBvcnQgY29weXJlZwotICAgICAgICBjb3B5cmVnLnBpY2tsZSh2aWV3X3R5cGUsIHJlYnVpbGRfYXNfbGlzdCkKKyAgICAgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQogCiAjCiAjIFR5cGUgZm9yIGlkZW50aWZ5aW5nIHNoYXJlZCBvYmplY3RzCkBAIC0xMzAsNyArMTMzLDcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVnaXN0cnksIGFkZHJlc3MsIGF1dGhrZXksIHNlcmlhbGl6ZXIpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICAgICAgc2VsZi5yZWdpc3RyeSA9IHJlZ2lzdHJ5Ci0gICAgICAgIHNlbGYuYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgTGlzdGVuZXIsIENsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQogCiAgICAgICAgICMgZG8gYXV0aGVudGljYXRpb24gbGF0ZXIKQEAgLTE0Niw3ICsxNDksNyBAQAogICAgICAgICBSdW4gdGhlIHNlcnZlciBmb3JldmVyCiAgICAgICAgICcnJwogICAgICAgICBzZWxmLnN0b3BfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX21hbmFnZXJfc2VydmVyID0gc2VsZgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhY2NlcHRlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYWNjZXB0ZXIpCiAgICAgICAgICAgICBhY2NlcHRlci5kYWVtb24gPSBUcnVlCkBAIC0xNjcsNyArMTcwLDcgQEAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjID0gc2VsZi5saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5oYW5kbGVfcmVxdWVzdCwgYXJncz0oYywpKQogICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCkBAIC00MzYsMTUgKzQzOSwxNyBAQAogICAgIF9yZWdpc3RyeSA9IHt9CiAgICAgX1NlcnZlciA9IFNlcnZlcgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9Tm9uZSwgYXV0aGtleT1Ob25lLCBzZXJpYWxpemVyPSdwaWNrbGUnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScsCisgICAgICAgICAgICAgICAgIGN0eD1Ob25lKToKICAgICAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICAgICAgYXV0aGtleSA9IGN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKKyAgICAgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MgICAgICMgWFhYIG5vdCBmaW5hbCBhZGRyZXNzIGlmIGVnICgnJywgMCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gU3RhdGUoKQogICAgICAgICBzZWxmLl9zdGF0ZS52YWx1ZSA9IFN0YXRlLklOSVRJQUwKICAgICAgICAgc2VsZi5fc2VyaWFsaXplciA9IHNlcmlhbGl6ZXIKICAgICAgICAgc2VsZi5fTGlzdGVuZXIsIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQorICAgICAgICBzZWxmLl9jdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQogCiAgICAgZGVmIGdldF9zZXJ2ZXIoc2VsZik6CiAgICAgICAgICcnJwpAQCAtNDc2LDcgKzQ4MSw3IEBACiAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKIAogICAgICAgICAjIHNwYXduIHByb2Nlc3Mgd2hpY2ggcnVucyBhIHNlcnZlcgotICAgICAgICBzZWxmLl9wcm9jZXNzID0gUHJvY2VzcygKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2N0eC5Qcm9jZXNzKAogICAgICAgICAgICAgdGFyZ2V0PXR5cGUoc2VsZikuX3J1bl9zZXJ2ZXIsCiAgICAgICAgICAgICBhcmdzPShzZWxmLl9yZWdpc3RyeSwgc2VsZi5fYWRkcmVzcywgc2VsZi5fYXV0aGtleSwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXIsIHdyaXRlciwgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKSwKQEAgLTY5MSwxMSArNjk2LDExIEBACiAgICAgICAgIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXVsxXQogCiAgICAgICAgIGlmIGF1dGhrZXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIGVsaWYgc2VsZi5fbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBzZWxmLl9tYW5hZ2VyLl9hdXRoa2V5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogCiAgICAgICAgIGlmIGluY3JlZjoKICAgICAgICAgICAgIHNlbGYuX2luY3JlZigpCkBAIC03MDQsNyArNzA5LDcgQEAKIAogICAgIGRlZiBfY29ubmVjdChzZWxmKToKICAgICAgICAgdXRpbC5kZWJ1ZygnbWFraW5nIGNvbm5lY3Rpb24gdG8gbWFuYWdlcicpCi0gICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgY29ubiA9IHNlbGYuX0NsaWVudChzZWxmLl90b2tlbi5hZGRyZXNzLCBhdXRoa2V5PXNlbGYuX2F1dGhrZXkpCkBAIC03OTgsNyArODAzLDcgQEAKIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICBrd2RzID0ge30KLSAgICAgICAgaWYgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGlmIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd2RzWydhdXRoa2V5J10gPSBzZWxmLl9hdXRoa2V5CiAKICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX2lzYXV0bycsIEZhbHNlKToKQEAgLTgzNSwxNCArODQwLDE0IEBACiAKICAgICBJZiBwb3NzaWJsZSB0aGUgc2hhcmVkIG9iamVjdCBpcyByZXR1cm5lZCwgb3Igb3RoZXJ3aXNlIGEgcHJveHkgZm9yIGl0LgogICAgICcnJwotICAgIHNlcnZlciA9IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfbWFuYWdlcl9zZXJ2ZXInLCBOb25lKQorICAgIHNlcnZlciA9IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCiAKICAgICBpZiBzZXJ2ZXIgYW5kIHNlcnZlci5hZGRyZXNzID09IHRva2VuLmFkZHJlc3M6CiAgICAgICAgIHJldHVybiBzZXJ2ZXIuaWRfdG9fb2JqW3Rva2VuLmlkXVswXQogICAgIGVsc2U6CiAgICAgICAgIGluY3JlZiA9ICgKICAgICAgICAgICAgIGt3ZHMucG9wKCdpbmNyZWYnLCBUcnVlKSBhbmQKLSAgICAgICAgICAgIG5vdCBnZXRhdHRyKGN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSkKKyAgICAgICAgICAgIG5vdCBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gZnVuYyh0b2tlbiwgc2VyaWFsaXplciwgaW5jcmVmPWluY3JlZiwgKiprd2RzKQogCkBAIC04ODksNyArODk0LDcgQEAKICAgICBpZiBhdXRoa2V5IGlzIE5vbmUgYW5kIG1hbmFnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgIGF1dGhrZXkgPSBtYW5hZ2VyLl9hdXRoa2V5CiAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICBhdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICBQcm94eVR5cGUgPSBNYWtlUHJveHlUeXBlKCdBdXRvUHJveHlbJXNdJyAlIHRva2VuLnR5cGVpZCwgZXhwb3NlZCkKICAgICBwcm94eSA9IFByb3h5VHlwZSh0b2tlbiwgc2VyaWFsaXplciwgbWFuYWdlcj1tYW5hZ2VyLCBhdXRoa2V5PWF1dGhrZXksCkBAIC0xMTA5LDcgKzExMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgQWNxdWlyZXJQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdDb25kaXRpb24nLCB0aHJlYWRpbmcuQ29uZGl0aW9uLCBDb25kaXRpb25Qcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdCYXJyaWVyJywgdGhyZWFkaW5nLkJhcnJpZXIsIEJhcnJpZXJQcm94eSkKLVN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdQb29sJywgUG9vbCwgUG9vbFByb3h5KQorU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBwb29sLlBvb2wsIFBvb2xQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdsaXN0JywgbGlzdCwgTGlzdFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2RpY3QnLCBkaWN0LCBEaWN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignVmFsdWUnLCBWYWx1ZSwgVmFsdWVQcm94eSkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQppbmRleCAwZjJkYWI0Li4xY2IyZDk1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CkBAIC03LDcgKzcsNyBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fYWxsX18gPSBbJ1Bvb2wnXQorX19hbGxfXyA9IFsnUG9vbCcsICdUaHJlYWRQb29sJ10KIAogIwogIyBJbXBvcnRzCkBAIC0xNywxMCArMTcsMTQgQEAKIGltcG9ydCBxdWV1ZQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgb3MKIGltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjcHVfY291bnQsIFRpbWVvdXRFcnJvcgotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGRlYnVnCisjIElmIHRocmVhZGluZyBpcyBhdmFpbGFibGUgdGhlbiBUaHJlYWRQb29sIHNob3VsZCBiZSBwcm92aWRlZC4gIFRoZXJlZm9yZQorIyB3ZSBhdm9pZCB0b3AtbGV2ZWwgaW1wb3J0cyB3aGljaCBhcmUgbGlhYmxlIHRvIGZhaWwgb24gc29tZSBzeXN0ZW1zLgorZnJvbSAuIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IGdldF9jb250ZXh0LCBjcHVfY291bnQsIFRpbWVvdXRFcnJvcgogCiAjCiAjIENvbnN0YW50cyByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIGEgcG9vbApAQCAtNDMsNiArNDcsMjkgQEAKICAgICByZXR1cm4gbGlzdChpdGVydG9vbHMuc3Rhcm1hcChhcmdzWzBdLCBhcmdzWzFdKSkKIAogIworIyBIYWNrIHRvIGVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsIHRyYWNlYmFjaworIworCitjbGFzcyBSZW1vdGVUcmFjZWJhY2soRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGIpOgorICAgICAgICBzZWxmLnRiID0gdGIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGIKKworY2xhc3MgRXhjZXB0aW9uV2l0aFRyYWNlYmFjazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjLCB0Yik6CisgICAgICAgIHRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24odHlwZShleGMpLCBleGMsIHRiKQorICAgICAgICB0YiA9ICcnLmpvaW4odGIpCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHNlbGYudGIgPSAnXG4iIiJcbiVzIiIiJyAlIHRiCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiByZWJ1aWxkX2V4YywgKHNlbGYuZXhjLCBzZWxmLnRiKQorCitkZWYgcmVidWlsZF9leGMoZXhjLCB0Yik6CisgICAgZXhjLl9fY2F1c2VfXyA9IFJlbW90ZVRyYWNlYmFjayh0YikKKyAgICByZXR1cm4gZXhjCisKKyMKICMgQ29kZSBydW4gYnkgd29ya2VyIHByb2Nlc3NlcwogIwogCkBAIC03OCwyOCArMTA1LDI5IEBACiAgICAgd2hpbGUgbWF4dGFza3MgaXMgTm9uZSBvciAobWF4dGFza3MgYW5kIGNvbXBsZXRlZCA8IG1heHRhc2tzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IEVPRkVycm9yIG9yIE9TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKLSAgICAgICAgICAgIGRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGdvdCBzZW50aW5lbCAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgam9iLCBpLCBmdW5jLCBhcmdzLCBrd2RzID0gdGFzawogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSAoVHJ1ZSwgZnVuYygqYXJncywgKiprd2RzKSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZSA9IEV4Y2VwdGlvbldpdGhUcmFjZWJhY2soZSwgZS5fX3RyYWNlYmFja19fKQogICAgICAgICAgICAgcmVzdWx0ID0gKEZhbHNlLCBlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgcmVzdWx0KSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgd3JhcHBlZCA9IE1heWJlRW5jb2RpbmdFcnJvcihlLCByZXN1bHRbMV0pCi0gICAgICAgICAgICBkZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKKyAgICAgICAgICAgIHV0aWwuZGVidWcoIlBvc3NpYmxlIGVuY29kaW5nIGVycm9yIHdoaWxlIHNlbmRpbmcgcmVzdWx0OiAlcyIgJSAoCiAgICAgICAgICAgICAgICAgd3JhcHBlZCkpCiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgKEZhbHNlLCB3cmFwcGVkKSkpCiAgICAgICAgIGNvbXBsZXRlZCArPSAxCi0gICAgZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKKyAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZXhpdGluZyBhZnRlciAlZCB0YXNrcycgJSBjb21wbGV0ZWQpCiAKICMKICMgQ2xhc3MgcmVwcmVzZW50aW5nIGEgcHJvY2VzcyBwb29sCkBAIC0xMDksMTAgKzEzNywxMiBAQAogICAgICcnJwogICAgIENsYXNzIHdoaWNoIHN1cHBvcnRzIGFuIGFzeW5jIHZlcnNpb24gb2YgYXBwbHlpbmcgZnVuY3Rpb25zIHRvIGFyZ3VtZW50cy4KICAgICAnJycKLSAgICBQcm9jZXNzID0gUHJvY2VzcworICAgIGRlZiBQcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3R4LlByb2Nlc3MoKmFyZ3MsICoqa3dkcykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCi0gICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgc2VsZi5fY3R4ID0gY29udGV4dCBvciBnZXRfY29udGV4dCgpCiAgICAgICAgIHNlbGYuX3NldHVwX3F1ZXVlcygpCiAgICAgICAgIHNlbGYuX3Rhc2txdWV1ZSA9IHF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQpAQCAtMTIyLDEwICsxNTIsNyBAQAogICAgICAgICBzZWxmLl9pbml0YXJncyA9IGluaXRhcmdzCiAKICAgICAgICAgaWYgcHJvY2Vzc2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gY3B1X2NvdW50KCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgICAgIHByb2Nlc3NlcyA9IDEKKyAgICAgICAgICAgIHByb2Nlc3NlcyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgaWYgcHJvY2Vzc2VzIDwgMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk51bWJlciBvZiBwcm9jZXNzZXMgbXVzdCBiZSBhdCBsZWFzdCAxIikKIApAQCAtMTYyLDcgKzE4OSw3IEBACiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLl9zdGF0ZSA9IFJVTgogICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlci5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5fdGVybWluYXRlID0gRmluYWxpemUoCisgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICBzZWxmLCBzZWxmLl90ZXJtaW5hdGVfcG9vbCwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3Rhc2txdWV1ZSwgc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIHNlbGYuX3Bvb2wsCiAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlciwgc2VsZi5fdGFza19oYW5kbGVyLApAQCAtMTc5LDcgKzIwNiw3IEBACiAgICAgICAgICAgICB3b3JrZXIgPSBzZWxmLl9wb29sW2ldCiAgICAgICAgICAgICBpZiB3b3JrZXIuZXhpdGNvZGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB3b3JrZXIgZXhpdGVkCi0gICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQogICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICAgICAgICAgICAgICBjbGVhbmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9wb29sW2ldCkBAIC0xOTksNyArMjI2LDcgQEAKICAgICAgICAgICAgIHcubmFtZSA9IHcubmFtZS5yZXBsYWNlKCdQcm9jZXNzJywgJ1Bvb2xXb3JrZXInKQogICAgICAgICAgICAgdy5kYWVtb24gPSBUcnVlCiAgICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIGRlYnVnKCdhZGRlZCB3b3JrZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnYWRkZWQgd29ya2VyJykKIAogICAgIGRlZiBfbWFpbnRhaW5fcG9vbChzZWxmKToKICAgICAgICAgIiIiQ2xlYW4gdXAgYW55IGV4aXRlZCB3b3JrZXJzIGFuZCBzdGFydCByZXBsYWNlbWVudHMgZm9yIHRoZW0uCkBAIC0yMDgsOSArMjM1LDggQEAKICAgICAgICAgICAgIHNlbGYuX3JlcG9wdWxhdGVfcG9vbCgpCiAKICAgICBkZWYgX3NldHVwX3F1ZXVlcyhzZWxmKToKLSAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQotICAgICAgICBzZWxmLl9pbnF1ZXVlID0gU2ltcGxlUXVldWUoKQotICAgICAgICBzZWxmLl9vdXRxdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5faW5xdWV1ZSA9IHNlbGYuX2N0eC5TaW1wbGVRdWV1ZSgpCisgICAgICAgIHNlbGYuX291dHF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKICAgICAgICAgc2VsZi5fcXVpY2tfcHV0ID0gc2VsZi5faW5xdWV1ZS5fd3JpdGVyLnNlbmQKICAgICAgICAgc2VsZi5fcXVpY2tfZ2V0ID0gc2VsZi5fb3V0cXVldWUuX3JlYWRlci5yZWN2CiAKQEAgLTMzNiw3ICszNjIsNyBAQAogICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgICMgc2VuZCBzZW50aW5lbCB0byBzdG9wIHdvcmtlcnMKICAgICAgICAgcG9vbC5fdGFza3F1ZXVlLnB1dChOb25lKQotICAgICAgICBkZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCisgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBoYW5kbGVyIGV4aXRpbmcnKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGFuZGxlX3Rhc2tzKHRhc2txdWV1ZSwgcHV0LCBvdXRxdWV1ZSwgcG9vbCwgY2FjaGUpOgpAQCAtMzQ2LDcgKzM3Miw3IEBACiAgICAgICAgICAgICBpID0gLTEKICAgICAgICAgICAgIGZvciBpLCB0YXNrIGluIGVudW1lcmF0ZSh0YXNrc2VxKToKICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuX3N0YXRlOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGUgIT0gUlVOJykKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGUgIT0gUlVOJykKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHB1dCh0YXNrKQpAQCAtMzU4LDI3ICszODQsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgc2V0X2xlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoJ2RvaW5nIHNldF9sZW5ndGgoKScpCisgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2RvaW5nIHNldF9sZW5ndGgoKScpCiAgICAgICAgICAgICAgICAgICAgIHNldF9sZW5ndGgoaSsxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3Qgc2VudGluZWwnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCiAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHRlbGwgcmVzdWx0IGhhbmRsZXIgdG8gZmluaXNoIHdoZW4gY2FjaGUgaXMgZW1wdHkKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byByZXN1bHQgaGFuZGxlcicpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byByZXN1bHQgaGFuZGxlcicpCiAgICAgICAgICAgICBvdXRxdWV1ZS5wdXQoTm9uZSkKIAogICAgICAgICAgICAgIyB0ZWxsIHdvcmtlcnMgdGhlcmUgaXMgbm8gbW9yZSB3b3JrCi0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gd29ya2VycycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byB3b3JrZXJzJykKICAgICAgICAgICAgIGZvciBwIGluIHBvb2w6CiAgICAgICAgICAgICAgICAgcHV0KE5vbmUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3QgSU9FcnJvciB3aGVuIHNlbmRpbmcgc2VudGluZWxzJykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IE9TRXJyb3Igd2hlbiBzZW5kaW5nIHNlbnRpbmVscycpCiAKLSAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGV4aXRpbmcnKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGFuZGxlX3Jlc3VsdHMob3V0cXVldWUsIGdldCwgY2FjaGUpOgpAQCAtMzg3LDE3ICs0MTMsMTcgQEAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9PU0Vycm9yIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiB0aHJlYWQuX3N0YXRlOgogICAgICAgICAgICAgICAgIGFzc2VydCB0aHJlYWQuX3N0YXRlID09IFRFUk1JTkFURQotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlPVRFUk1JTkFURScpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZT1URVJNSU5BVEUnKQogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IHNlbnRpbmVsJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3Qgc2VudGluZWwnKQogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgIGpvYiwgaSwgb2JqID0gdGFzawpAQCAtNDA5LDEyICs0MzUsMTIgQEAKICAgICAgICAgd2hpbGUgY2FjaGUgYW5kIHRocmVhZC5fc3RhdGUgIT0gVEVSTUlOQVRFOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9JT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL09TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgaWdub3JpbmcgZXh0cmEgc2VudGluZWwnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGlnbm9yaW5nIGV4dHJhIHNlbnRpbmVsJykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgam9iLCBpLCBvYmogPSB0YXNrCiAgICAgICAgICAgICB0cnk6CkBAIC00MjMsNyArNDQ5LDcgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgaWYgaGFzYXR0cihvdXRxdWV1ZSwgJ19yZWFkZXInKToKLSAgICAgICAgICAgIGRlYnVnKCdlbnN1cmluZyB0aGF0IG91dHF1ZXVlIGlzIG5vdCBmdWxsJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ2Vuc3VyaW5nIHRoYXQgb3V0cXVldWUgaXMgbm90IGZ1bGwnKQogICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBtYWtlIHJvb20gYXZhaWxhYmxlIGluIG91dHF1ZXVlIHRoZW4KICAgICAgICAgICAgICMgYXR0ZW1wdHMgdG8gYWRkIHRoZSBzZW50aW5lbCAoTm9uZSkgdG8gb3V0cXVldWUgbWF5CiAgICAgICAgICAgICAjIGJsb2NrLiAgVGhlcmUgaXMgZ3VhcmFudGVlZCB0byBiZSBubyBtb3JlIHRoYW4gMiBzZW50aW5lbHMuCkBAIC00MzIsMTAgKzQ1OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3V0cXVldWUuX3JlYWRlci5wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGV4aXRpbmc6IGxlbihjYWNoZSk9JXMsIHRocmVhZC5fc3RhdGU9JXMnLAorICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBleGl0aW5nOiBsZW4oY2FjaGUpPSVzLCB0aHJlYWQuX3N0YXRlPSVzJywKICAgICAgICAgICAgICAgbGVuKGNhY2hlKSwgdGhyZWFkLl9zdGF0ZSkKIAogICAgIEBzdGF0aWNtZXRob2QKQEAgLTQ1MywxOSArNDc5LDE5IEBACiAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgZGVidWcoJ2Nsb3NpbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2Nsb3NpbmcgcG9vbCcpCiAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IFJVTjoKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gQ0xPU0UKICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IENMT1NFCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICBkZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ3Rlcm1pbmF0aW5nIHBvb2wnKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgc2VsZi5fdGVybWluYXRlKCkKIAogICAgIGRlZiBqb2luKHNlbGYpOgotICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyBwb29sJykKICAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlIGluIChDTE9TRSwgVEVSTUlOQVRFKQogICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5qb2luKCkKICAgICAgICAgc2VsZi5fdGFza19oYW5kbGVyLmpvaW4oKQpAQCAtNDc2LDcgKzUwMiw3IEBACiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBzaXplKToKICAgICAgICAgIyB0YXNrX2hhbmRsZXIgbWF5IGJlIGJsb2NrZWQgdHJ5aW5nIHRvIHB1dCBpdGVtcyBvbiBpbnF1ZXVlCi0gICAgICAgIGRlYnVnKCdyZW1vdmluZyB0YXNrcyBmcm9tIGlucXVldWUgdW50aWwgdGFzayBoYW5kbGVyIGZpbmlzaGVkJykKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVtb3ZpbmcgdGFza3MgZnJvbSBpbnF1ZXVlIHVudGlsIHRhc2sgaGFuZGxlciBmaW5pc2hlZCcpCiAgICAgICAgIGlucXVldWUuX3Jsb2NrLmFjcXVpcmUoKQogICAgICAgICB3aGlsZSB0YXNrX2hhbmRsZXIuaXNfYWxpdmUoKSBhbmQgaW5xdWV1ZS5fcmVhZGVyLnBvbGwoKToKICAgICAgICAgICAgIGlucXVldWUuX3JlYWRlci5yZWN2KCkKQEAgLTQ4NiwxMiArNTEyLDEyIEBACiAgICAgZGVmIF90ZXJtaW5hdGVfcG9vbChjbHMsIHRhc2txdWV1ZSwgaW5xdWV1ZSwgb3V0cXVldWUsIHBvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfaGFuZGxlciwgdGFza19oYW5kbGVyLCByZXN1bHRfaGFuZGxlciwgY2FjaGUpOgogICAgICAgICAjIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBvbmx5IGJlIGNhbGxlZCBvbmNlCi0gICAgICAgIGRlYnVnKCdmaW5hbGl6aW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdmaW5hbGl6aW5nIHBvb2wnKQogCiAgICAgICAgIHdvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICB0YXNrX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAKLSAgICAgICAgZGVidWcoJ2hlbHBpbmcgdGFzayBoYW5kbGVyL3dvcmtlcnMgdG8gZmluaXNoJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnaGVscGluZyB0YXNrIGhhbmRsZXIvd29ya2VycyB0byBmaW5pc2gnKQogICAgICAgICBjbHMuX2hlbHBfc3R1ZmZfZmluaXNoKGlucXVldWUsIHRhc2tfaGFuZGxlciwgbGVuKHBvb2wpKQogCiAgICAgICAgIGFzc2VydCByZXN1bHRfaGFuZGxlci5pc19hbGl2ZSgpIG9yIGxlbihjYWNoZSkgPT0gMApAQCAtNTAxLDMxICs1MjcsMzEgQEAKIAogICAgICAgICAjIFdlIG11c3Qgd2FpdCBmb3IgdGhlIHdvcmtlciBoYW5kbGVyIHRvIGV4aXQgYmVmb3JlIHRlcm1pbmF0aW5nCiAgICAgICAgICMgd29ya2VycyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgd29ya2VycyB0byBiZSByZXN0YXJ0ZWQgYmVoaW5kIG91ciBiYWNrLgotICAgICAgICBkZWJ1Zygnam9pbmluZyB3b3JrZXIgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgd29ya2VyIGhhbmRsZXInKQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSBpcyBub3Qgd29ya2VyX2hhbmRsZXI6CiAgICAgICAgICAgICB3b3JrZXJfaGFuZGxlci5qb2luKCkKIAogICAgICAgICAjIFRlcm1pbmF0ZSB3b3JrZXJzIHdoaWNoIGhhdmVuJ3QgYWxyZWFkeSBmaW5pc2hlZC4KICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6Ci0gICAgICAgICAgICBkZWJ1ZygndGVybWluYXRpbmcgd29ya2VycycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKICAgICAgICAgICAgIGZvciBwIGluIHBvb2w6CiAgICAgICAgICAgICAgICAgaWYgcC5leGl0Y29kZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCiAKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgdGFzayBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSBpcyBub3QgdGFza19oYW5kbGVyOgogICAgICAgICAgICAgdGFza19oYW5kbGVyLmpvaW4oKQogCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyByZXN1bHQgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCByZXN1bHRfaGFuZGxlcjoKICAgICAgICAgICAgIHJlc3VsdF9oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgotICAgICAgICAgICAgZGVidWcoJ2pvaW5pbmcgcG9vbCB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcG9vbCB3b3JrZXJzJykKICAgICAgICAgICAgIGZvciBwIGluIHBvb2w6CiAgICAgICAgICAgICAgICAgaWYgcC5pc19hbGl2ZSgpOgogICAgICAgICAgICAgICAgICAgICAjIHdvcmtlciBoYXMgbm90IHlldCBleGl0ZWQKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBwLnBpZCkKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQogICAgICAgICAgICAgICAgICAgICBwLmpvaW4oKQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKQEAgLTcxMSw3ICs3MzcsMTAgQEAKIAogY2xhc3MgVGhyZWFkUG9vbChQb29sKToKIAotICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICBmcm9tIC5kdW1teSBpbXBvcnQgUHJvY2VzcworICAgICAgICByZXR1cm4gUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CiAgICAgICAgIFBvb2wuX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzY2MxOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpAQCAtMCwwICsxLDgzIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBlcnJubworCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgZm9yaworIworCitjbGFzcyBQb3BlbihvYmplY3QpOgorICAgIG1ldGhvZCA9ICdmb3JrJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2xhdW5jaChwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBub3QgeWV0IGNyZWF0ZWQuIFNlZSAjMTczMTcxNworICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKKyAgICAgICAgICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdHMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5XSUZFWElURUQoc3RzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmxvY2sgaWYgd2FpdCgpIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgZXhjZXB0IFByb2Nlc3NMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0wLjEpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYucGlkID09IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQorICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3cpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTVmODEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSw2OSBAQAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2lmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICByYWlzZSBJbXBvcnRFcnJvcignTm8gc3VwcG9ydCBmb3Igc2VuZGluZyBmZHMgYmV0d2VlbiBwcm9jZXNzZXMnKQorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IGZvcmtzZXJ2ZXIKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFdyYXBwZXIgZm9yIGFuIGZkIHVzZWQgd2hpbGUgbGF1bmNoaW5nIGEgcHJvY2VzcworIworCitjbGFzcyBfRHVwRmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kKToKKyAgICAgICAgc2VsZi5pbmQgPSBpbmQKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICByZXR1cm4gZm9ya3NlcnZlci5nZXRfaW5oZXJpdGVkX2ZkcygpW3NlbGYuaW5kXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgYSBzZXJ2ZXIgcHJvY2VzcworIworCitjbGFzcyBQb3Blbihwb3Blbl9mb3JrLlBvcGVuKToKKyAgICBtZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mZHMpIC0gMQorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgYnVmKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGJ1ZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgc2VsZi5zZW50aW5lbCwgdyA9IGZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2VzcyhzZWxmLl9mZHMpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChzZWxmLnNlbnRpbmVsLCkpCisgICAgICAgIHdpdGggb3Blbih3LCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgc2VsZi5waWQgPSBmb3Jrc2VydmVyLnJlYWRfdW5zaWduZWQoc2VsZi5zZW50aW5lbCkKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAorICAgICAgICAgICAgdGltZW91dCA9IDAgaWYgZmxhZyA9PSBvcy5XTk9IQU5HIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgIyBUaGUgcHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5IHBlcmhhcHMgYmVjYXVzZSBvZiBhIHNpZ25hbAorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IDI1NQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjVkYzQyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpAQCAtMCwwICsxLDcyIEBACitpbXBvcnQgZmNudGwKK2ltcG9ydCBpbworaW1wb3J0IG9zCisKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwb3Blbl9mb3JrCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb20gLiBpbXBvcnQgY3VycmVudF9wcm9jZXNzCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworCisjCisjIFdyYXBwZXIgZm9yIGFuIGZkIHVzZWQgd2hpbGUgbGF1bmNoaW5nIGEgcHJvY2VzcworIworCitjbGFzcyBfRHVwRmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgorICAgICAgICBzZWxmLmZkID0gZmQKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mZAorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgYSBmcmVzaCBpbnRlcnByZXRlcgorIworCitjbGFzcyBQb3Blbihwb3Blbl9mb3JrLlBvcGVuKToKKyAgICBtZXRob2QgPSAnc3Bhd24nCisgICAgRHVwRmQgPSBfRHVwRmQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHNlbGYuX2ZkcyA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvY2Vzc19vYmopCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuX2Zkcy5hcHBlbmQoZmQpCisgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBmcm9tIC4gaW1wb3J0IHNlbWFwaG9yZV90cmFja2VyCisgICAgICAgIHRyYWNrZXJfZmQgPSBzZW1hcGhvcmVfdHJhY2tlci5nZXRmZCgpCisgICAgICAgIHNlbGYuX2Zkcy5hcHBlbmQodHJhY2tlcl9mZCkKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisgICAgICAgIGZwID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgZnApCisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcm9jZXNzX29iaiwgZnApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgICAgIHBhcmVudF9yID0gY2hpbGRfdyA9IGNoaWxkX3IgPSBwYXJlbnRfdyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNoaWxkX3IsIHBhcmVudF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjbWQgPSBzcGF3bi5nZXRfY29tbWFuZF9saW5lKHRyYWNrZXJfZmQ9dHJhY2tlcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9oYW5kbGU9Y2hpbGRfcikKKyAgICAgICAgICAgIHNlbGYuX2Zkcy5leHRlbmQoW2NoaWxkX3IsIGNoaWxkX3ddKQorICAgICAgICAgICAgc2VsZi5waWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKHNwYXduLmdldF9leGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBzZWxmLl9mZHMpCisgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gcGFyZW50X3IKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXJlbnRfdywgJ3diJywgY2xvc2VmZD1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGZwLmdldGJ1ZmZlcigpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgcGFyZW50X3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHBhcmVudF9yLCkpCisgICAgICAgICAgICBmb3IgZmQgaW4gKGNoaWxkX3IsIGNoaWxkX3csIHBhcmVudF93KToKKyAgICAgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl93aW4zMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjUzMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl93aW4zMi5weQpAQCAtMCwwICsxLDk5IEBACitpbXBvcnQgb3MKK2ltcG9ydCBtc3ZjcnQKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCBfd2luYXBpCisKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMKKyMKKworVEVSTUlOQVRFID0gMHgxMDAwMAorV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKK1dJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCisKKyMKKyMgV2UgZGVmaW5lIGEgUG9wZW4gY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGZyb20gc3VicHJvY2VzcywgYnV0CisjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgorIworCitjbGFzcyBQb3BlbihvYmplY3QpOgorICAgICcnJworICAgIFN0YXJ0IGEgc3VicHJvY2VzcyB0byBydW4gdGhlIGNvZGUgb2YgYSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIG1ldGhvZCA9ICdzcGF3bicKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorCisgICAgICAgICMgcmVhZCBlbmQgb2YgcGlwZSB3aWxsIGJlICJzdG9sZW4iIGJ5IHRoZSBjaGlsZCBwcm9jZXNzCisgICAgICAgICMgLS0gc2VlIHNwYXduX21haW4oKSBpbiBzcGF3bi5weS4KKyAgICAgICAgcmhhbmRsZSwgd2hhbmRsZSA9IF93aW5hcGkuQ3JlYXRlUGlwZShOb25lLCAwKQorICAgICAgICB3ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUod2hhbmRsZSwgMCkKKyAgICAgICAgY21kID0gc3Bhd24uZ2V0X2NvbW1hbmRfbGluZShwYXJlbnRfcGlkPW9zLmdldHBpZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfaGFuZGxlPXJoYW5kbGUpCisgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gY21kKQorCisgICAgICAgIHdpdGggb3Blbih3ZmQsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgdG9fY2hpbGQ6CisgICAgICAgICAgICAjIHN0YXJ0IHByb2Nlc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBocCwgaHQsIHBpZCwgdGlkID0gX3dpbmFwaS5DcmVhdGVQcm9jZXNzKAorICAgICAgICAgICAgICAgICAgICBzcGF3bi5nZXRfZXhlY3V0YWJsZSgpLCBjbWQsCisgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIEZhbHNlLCAwLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaHQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShyaGFuZGxlKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICMgc2V0IGF0dHJpYnV0ZXMgb2Ygc2VsZgorICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhwCisgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBfd2luYXBpLkNsb3NlSGFuZGxlLCAoc2VsZi5zZW50aW5lbCwpKQorCisgICAgICAgICAgICAjIHNlbmQgaW5mb3JtYXRpb24gdG8gY2hpbGQKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKHNlbGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCB0b19jaGlsZCkKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcm9jZXNzX29iaiwgdG9fY2hpbGQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBoYW5kbGUpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIHJldHVybiByZWR1Y3Rpb24uZHVwbGljYXRlKGhhbmRsZSwgc2VsZi5zZW50aW5lbCkKKworICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2VjcyA9IG1heCgwLCBpbnQodGltZW91dCAqIDEwMDAgKyAwLjUpKQorCisgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQorICAgICAgICAgICAgaWYgcmVzID09IF93aW5hcGkuV0FJVF9PQkpFQ1RfMDoKKyAgICAgICAgICAgICAgICBjb2RlID0gX3dpbmFwaS5HZXRFeGl0Q29kZVByb2Nlc3Moc2VsZi5faGFuZGxlKQorICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gLXNpZ25hbC5TSUdURVJNCisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gY29kZQorCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi53YWl0KHRpbWVvdXQ9MCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MS4wKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CmluZGV4IDNkMzJhZGQuLjY4OTU5YmYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJ10KK19fYWxsX18gPSBbJ0Jhc2VQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQogCiAjCiAjIEltcG9ydHMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBSZXR1cm4gbGlzdCBvZiBwcm9jZXNzIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byBsaXZlIGNoaWxkIHByb2Nlc3NlcwogICAgICcnJwogICAgIF9jbGVhbnVwKCkKLSAgICByZXR1cm4gbGlzdChfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbikKKyAgICByZXR1cm4gbGlzdChfY2hpbGRyZW4pCiAKICMKICMKQEAgLTUxLDMzICs1MSwyOSBAQAogCiBkZWYgX2NsZWFudXAoKToKICAgICAjIGNoZWNrIGZvciBwcm9jZXNzZXMgd2hpY2ggaGF2ZSBmaW5pc2hlZAotICAgIGZvciBwIGluIGxpc3QoX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4pOgorICAgIGZvciBwIGluIGxpc3QoX2NoaWxkcmVuKToKICAgICAgICAgaWYgcC5fcG9wZW4ucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4uZGlzY2FyZChwKQorICAgICAgICAgICAgX2NoaWxkcmVuLmRpc2NhcmQocCkKIAogIwogIyBUaGUgYFByb2Nlc3NgIGNsYXNzCiAjCiAKLWNsYXNzIFByb2Nlc3Mob2JqZWN0KToKK2NsYXNzIEJhc2VQcm9jZXNzKG9iamVjdCk6CiAgICAgJycnCiAgICAgUHJvY2VzcyBvYmplY3RzIHJlcHJlc2VudCBhY3Rpdml0eSB0aGF0IGlzIHJ1biBpbiBhIHNlcGFyYXRlIHByb2Nlc3MKIAotICAgIFRoZSBjbGFzcyBpcyBhbmFsYWdvdXMgdG8gYHRocmVhZGluZy5UaHJlYWRgCisgICAgVGhlIGNsYXNzIGlzIGFuYWxvZ291cyB0byBgdGhyZWFkaW5nLlRocmVhZGAKICAgICAnJycKLSAgICBfUG9wZW4gPSBOb25lCisgICAgZGVmIF9Qb3BlbihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyb3VwPU5vbmUsIHRhcmdldD1Ob25lLCBuYW1lPU5vbmUsIGFyZ3M9KCksIGt3YXJncz17fSwKICAgICAgICAgICAgICAgICAgKiwgZGFlbW9uPU5vbmUpOgogICAgICAgICBhc3NlcnQgZ3JvdXAgaXMgTm9uZSwgJ2dyb3VwIGFyZ3VtZW50IG11c3QgYmUgTm9uZSBmb3Igbm93JwotICAgICAgICBjb3VudCA9IG5leHQoX2N1cnJlbnRfcHJvY2Vzcy5fY291bnRlcikKKyAgICAgICAgY291bnQgPSBuZXh0KF9wcm9jZXNzX2NvdW50ZXIpCiAgICAgICAgIHNlbGYuX2lkZW50aXR5ID0gX2N1cnJlbnRfcHJvY2Vzcy5faWRlbnRpdHkgKyAoY291bnQsKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gX2N1cnJlbnRfcHJvY2Vzcy5fYXV0aGtleQotICAgICAgICBpZiBkYWVtb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGRhZW1vbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBfY3VycmVudF9wcm9jZXNzLl9kYWVtb25pYwotICAgICAgICBzZWxmLl90ZW1wZGlyID0gX2N1cnJlbnRfcHJvY2Vzcy5fdGVtcGRpcgorICAgICAgICBzZWxmLl9jb25maWcgPSBfY3VycmVudF9wcm9jZXNzLl9jb25maWcuY29weSgpCiAgICAgICAgIHNlbGYuX3BhcmVudF9waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBzZWxmLl9wb3BlbiA9IE5vbmUKICAgICAgICAgc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0CkBAIC04NSw2ICs4MSw4IEBACiAgICAgICAgIHNlbGYuX2t3YXJncyA9IGRpY3Qoa3dhcmdzKQogICAgICAgICBzZWxmLl9uYW1lID0gbmFtZSBvciB0eXBlKHNlbGYpLl9fbmFtZV9fICsgJy0nICsgXAogICAgICAgICAgICAgICAgICAgICAgJzonLmpvaW4oc3RyKGkpIGZvciBpIGluIHNlbGYuX2lkZW50aXR5KQorICAgICAgICBpZiBkYWVtb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhZW1vbiA9IGRhZW1vbgogICAgICAgICBfZGFuZ2xpbmcuYWRkKHNlbGYpCiAKICAgICBkZWYgcnVuKHNlbGYpOgpAQCAtMTAxLDE2ICs5OSwxMiBAQAogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgTm9uZSwgJ2Nhbm5vdCBzdGFydCBhIHByb2Nlc3MgdHdpY2UnCiAgICAgICAgIGFzc2VydCBzZWxmLl9wYXJlbnRfcGlkID09IG9zLmdldHBpZCgpLCBcCiAgICAgICAgICAgICAgICAnY2FuIG9ubHkgc3RhcnQgYSBwcm9jZXNzIG9iamVjdCBjcmVhdGVkIGJ5IGN1cnJlbnQgcHJvY2VzcycKLSAgICAgICAgYXNzZXJ0IG5vdCBfY3VycmVudF9wcm9jZXNzLl9kYWVtb25pYywgXAorICAgICAgICBhc3NlcnQgbm90IF9jdXJyZW50X3Byb2Nlc3MuX2NvbmZpZy5nZXQoJ2RhZW1vbicpLCBcCiAgICAgICAgICAgICAgICAnZGFlbW9uaWMgcHJvY2Vzc2VzIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGNoaWxkcmVuJwogICAgICAgICBfY2xlYW51cCgpCi0gICAgICAgIGlmIHNlbGYuX1BvcGVuIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgUG9wZW4gPSBzZWxmLl9Qb3BlbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnJvbSAuZm9ya2luZyBpbXBvcnQgUG9wZW4KLSAgICAgICAgc2VsZi5fcG9wZW4gPSBQb3BlbihzZWxmKQorICAgICAgICBzZWxmLl9wb3BlbiA9IHNlbGYuX1BvcGVuKHNlbGYpCiAgICAgICAgIHNlbGYuX3NlbnRpbmVsID0gc2VsZi5fcG9wZW4uc2VudGluZWwKLSAgICAgICAgX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4uYWRkKHNlbGYpCisgICAgICAgIF9jaGlsZHJlbi5hZGQoc2VsZikKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CiAgICAgICAgICcnJwpAQCAtMTI2LDcgKzEyMCw3IEBACiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBub3QgTm9uZSwgJ2NhbiBvbmx5IGpvaW4gYSBzdGFydGVkIHByb2Nlc3MnCiAgICAgICAgIHJlcyA9IHNlbGYuX3BvcGVuLndhaXQodGltZW91dCkKICAgICAgICAgaWYgcmVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4uZGlzY2FyZChzZWxmKQorICAgICAgICAgICAgX2NoaWxkcmVuLmRpc2NhcmQoc2VsZikKIAogICAgIGRlZiBpc19hbGl2ZShzZWxmKToKICAgICAgICAgJycnCkBAIC0xNTQsNyArMTQ4LDcgQEAKICAgICAgICAgJycnCiAgICAgICAgIFJldHVybiB3aGV0aGVyIHByb2Nlc3MgaXMgYSBkYWVtb24KICAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBzZWxmLl9kYWVtb25pYworICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnLmdldCgnZGFlbW9uJywgRmFsc2UpCiAKICAgICBAZGFlbW9uLnNldHRlcgogICAgIGRlZiBkYWVtb24oc2VsZiwgZGFlbW9uaWMpOgpAQCAtMTYyLDE4ICsxNTYsMTggQEAKICAgICAgICAgU2V0IHdoZXRoZXIgcHJvY2VzcyBpcyBhIGRhZW1vbgogICAgICAgICAnJycKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIE5vbmUsICdwcm9jZXNzIGhhcyBhbHJlYWR5IHN0YXJ0ZWQnCi0gICAgICAgIHNlbGYuX2RhZW1vbmljID0gZGFlbW9uaWMKKyAgICAgICAgc2VsZi5fY29uZmlnWydkYWVtb24nXSA9IGRhZW1vbmljCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgYXV0aGtleShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2F1dGhrZXkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZ1snYXV0aGtleSddCiAKICAgICBAYXV0aGtleS5zZXR0ZXIKICAgICBkZWYgYXV0aGtleShzZWxmLCBhdXRoa2V5KToKICAgICAgICAgJycnCiAgICAgICAgIFNldCBhdXRob3JpemF0aW9uIGtleSBvZiBwcm9jZXNzCiAgICAgICAgICcnJwotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5fY29uZmlnWydhdXRoa2V5J10gPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4aXRjb2RlKHNlbGYpOgpAQCAtMjI3LDE3ICsyMjEsMTkgQEAKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnc3RvcHBlZFslc10nICUgX2V4aXRjb2RlX3RvX25hbWUuZ2V0KHN0YXR1cywgc3RhdHVzKQogCiAgICAgICAgIHJldHVybiAnPCVzKCVzLCAlcyVzKT4nICUgKHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgc2VsZi5fZGFlbW9uaWMgYW5kICcgZGFlbW9uJyBvciAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLmRhZW1vbiBhbmQgJyBkYWVtb24nIG9yICcnKQogCiAgICAgIyMKIAogICAgIGRlZiBfYm9vdHN0cmFwKHNlbGYpOgotICAgICAgICBmcm9tIC4gaW1wb3J0IHV0aWwKLSAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Byb2Nlc3MKKyAgICAgICAgZnJvbSAuIGltcG9ydCB1dGlsLCBjb250ZXh0CisgICAgICAgIGdsb2JhbCBfY3VycmVudF9wcm9jZXNzLCBfcHJvY2Vzc19jb3VudGVyLCBfY2hpbGRyZW4KIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHNldCgpCi0gICAgICAgICAgICBzZWxmLl9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCisgICAgICAgICAgICBpZiBzZWxmLl9zdGFydF9tZXRob2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dC5fZm9yY2Vfc3RhcnRfbWV0aG9kKHNlbGYuX3N0YXJ0X21ldGhvZCkKKyAgICAgICAgICAgIF9wcm9jZXNzX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKKyAgICAgICAgICAgIF9jaGlsZHJlbiA9IHNldCgpCiAgICAgICAgICAgICBpZiBzeXMuc3RkaW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQpAQCAtMjg1LDggKzI4MSw4IEBACiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uU3RyaW5nKGJ5dGVzKToKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKLSAgICAgICAgZnJvbSAuZm9ya2luZyBpbXBvcnQgUG9wZW4KLSAgICAgICAgaWYgbm90IFBvcGVuLnRocmVhZF9pc19zcGF3bmluZygpOgorICAgICAgICBmcm9tIC5jb250ZXh0IGltcG9ydCBnZXRfc3Bhd25pbmdfcG9wZW4KKyAgICAgICAgaWYgZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAnUGlja2xpbmcgYW4gQXV0aGVudGljYXRpb25TdHJpbmcgb2JqZWN0IGlzICcKICAgICAgICAgICAgICAgICAnZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucycKQEAgLTI5NywyMCArMjkzLDI5IEBACiAjIENyZWF0ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBtYWluIHByb2Nlc3MKICMKIAotY2xhc3MgX01haW5Qcm9jZXNzKFByb2Nlc3MpOgorY2xhc3MgX01haW5Qcm9jZXNzKEJhc2VQcm9jZXNzKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5faWRlbnRpdHkgPSAoKQotICAgICAgICBzZWxmLl9kYWVtb25pYyA9IEZhbHNlCiAgICAgICAgIHNlbGYuX25hbWUgPSAnTWFpblByb2Nlc3MnCiAgICAgICAgIHNlbGYuX3BhcmVudF9waWQgPSBOb25lCiAgICAgICAgIHNlbGYuX3BvcGVuID0gTm9uZQotICAgICAgICBzZWxmLl9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKG9zLnVyYW5kb20oMzIpKQotICAgICAgICBzZWxmLl90ZW1wZGlyID0gTm9uZQorICAgICAgICBzZWxmLl9jb25maWcgPSB7J2F1dGhrZXknOiBBdXRoZW50aWNhdGlvblN0cmluZyhvcy51cmFuZG9tKDMyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnc2VtcHJlZml4JzogJy9tcCd9CisgICAgICAgICMgTm90ZSB0aGF0IHNvbWUgdmVyc2lvbnMgb2YgRnJlZUJTRCBvbmx5IGFsbG93IG5hbWVkCisgICAgICAgICMgc2VtYXBob3JlcyB0byBoYXZlIG5hbWVzIG9mIHVwIHRvIDE0IGNoYXJhY3RlcnMuICBUaGVyZWZvcmUKKyAgICAgICAgIyB3ZSBjaG9vc2UgYSBzaG9ydCBwcmVmaXguCisgICAgICAgICMKKyAgICAgICAgIyBPbiBNYWNPU1ggaW4gYSBzYW5kYm94IGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGEKKyAgICAgICAgIyBkaWZmZXJlbnQgcHJlZml4IC0tIHNlZSAjMTk0NzguCisgICAgICAgICMKKyAgICAgICAgIyBFdmVyeXRoaW5nIGluIHNlbGYuX2NvbmZpZyB3aWxsIGJlIGluaGVyaXRlZCBieSBkZXNjZW5kYW50CisgICAgICAgICMgcHJvY2Vzc2VzLgorCiAKIF9jdXJyZW50X3Byb2Nlc3MgPSBfTWFpblByb2Nlc3MoKQorX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorX2NoaWxkcmVuID0gc2V0KCkKIGRlbCBfTWFpblByb2Nlc3MKIAogIwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weQppbmRleCAzNzI3MWZiLi5mNjUwNzcxIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weQpAQCAtMTgsMTEgKzE4LDE0IEBACiBpbXBvcnQgZXJybm8KIAogZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHksIEZ1bGwKKwogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBMb2NrLCBCb3VuZGVkU2VtYXBob3JlLCBTZW1hcGhvcmUsIENvbmRpdGlvbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZGVidWcsIGluZm8sIEZpbmFsaXplLCByZWdpc3Rlcl9hZnRlcl9mb3JrCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKKworZnJvbSAuIGltcG9ydCBjb25uZWN0aW9uCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKKworZnJvbSAudXRpbCBpbXBvcnQgZGVidWcsIGluZm8sIEZpbmFsaXplLCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBpc19leGl0aW5nCitmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCiAKICMKICMgUXVldWUgdHlwZSB1c2luZyBhIHBpcGUsIGJ1ZmZlciBhbmQgdGhyZWFkCkBAIC0zMCwxOCArMzMsMTggQEAKIAogY2xhc3MgUXVldWUob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTApOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGN0eCk6CiAgICAgICAgIGlmIG1heHNpemUgPD0gMDoKICAgICAgICAgICAgIG1heHNpemUgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2suU0VNX1ZBTFVFX01BWAogICAgICAgICBzZWxmLl9tYXhzaXplID0gbWF4c2l6ZQotICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IFBpcGUoZHVwbGV4PUZhbHNlKQotICAgICAgICBzZWxmLl9ybG9jayA9IExvY2soKQorICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuX3Jsb2NrID0gY3R4LkxvY2soKQogICAgICAgICBzZWxmLl9vcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBzZWxmLl93bG9jayA9IE5vbmUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTG9jaygpCi0gICAgICAgIHNlbGYuX3NlbSA9IEJvdW5kZWRTZW1hcGhvcmUobWF4c2l6ZSkKKyAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gY3R4LkxvY2soKQorICAgICAgICBzZWxmLl9zZW0gPSBjdHguQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQogICAgICAgICAjIEZvciB1c2UgYnkgY29uY3VycmVudC5mdXR1cmVzCiAgICAgICAgIHNlbGYuX2lnbm9yZV9lcGlwZSA9IEZhbHNlCiAKQEAgLTUxLDcgKzU0LDcgQEAKICAgICAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgUXVldWUuX2FmdGVyX2ZvcmspCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9pZ25vcmVfZXBpcGUsIHNlbGYuX21heHNpemUsIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLAogICAgICAgICAgICAgICAgIHNlbGYuX3Jsb2NrLCBzZWxmLl93bG9jaywgc2VsZi5fc2VtLCBzZWxmLl9vcGlkKQogCkBAIC02OSw4ICs3Miw4IEBACiAgICAgICAgIHNlbGYuX2pvaW5jYW5jZWxsZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9jbG9zZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fc2VuZCA9IHNlbGYuX3dyaXRlci5zZW5kCi0gICAgICAgIHNlbGYuX3JlY3YgPSBzZWxmLl9yZWFkZXIucmVjdgorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzID0gc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMKKyAgICAgICAgc2VsZi5fcmVjdl9ieXRlcyA9IHNlbGYuX3JlYWRlci5yZWN2X2J5dGVzCiAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxmLl9yZWFkZXIucG9sbAogCiAgICAgZGVmIHB1dChzZWxmLCBvYmosIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CkBAIC04OSwxNCArOTIsOSBAQAogCiAgICAgZGVmIGdldChzZWxmLCBibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICBpZiBibG9jayBhbmQgdGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fcmxvY2suYWNxdWlyZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCi0gICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCi0KKyAgICAgICAgICAgIHdpdGggc2VsZi5fcmxvY2s6CisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCisgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBibG9jazoKICAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dApAQCAtMTA5LDExICsxMDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5CiAgICAgICAgICAgICAgICAgZWxpZiBub3Qgc2VsZi5fcG9sbCgpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFbXB0eQotICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlY3YoKQorICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlY3ZfYnl0ZXMoKQogICAgICAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuX3Jsb2NrLnJlbGVhc2UoKQorICAgICAgICAjIHVuc2VyaWFsaXplIHRoZSBkYXRhIGFmdGVyIGhhdmluZyByZWxlYXNlZCB0aGUgbG9jaworICAgICAgICByZXR1cm4gRm9ya2luZ1BpY2tsZXIubG9hZHMocmVzKQogCiAgICAgZGVmIHFzaXplKHNlbGYpOgogICAgICAgICAjIFJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yIG9uIE1hYyBPU1ggYmVjYXVzZSBvZiBicm9rZW4gc2VtX2dldHZhbHVlKCkKQEAgLTE1OCw3ICsxNTcsNyBAQAogICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQogICAgICAgICBzZWxmLl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKAogICAgICAgICAgICAgdGFyZ2V0PVF1ZXVlLl9mZWVkLAotICAgICAgICAgICAgYXJncz0oc2VsZi5fYnVmZmVyLCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fc2VuZCwKKyAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2J1ZmZlciwgc2VsZi5fbm90ZW1wdHksIHNlbGYuX3NlbmRfYnl0ZXMsCiAgICAgICAgICAgICAgICAgICBzZWxmLl93bG9jaywgc2VsZi5fd3JpdGVyLmNsb3NlLCBzZWxmLl9pZ25vcmVfZXBpcGUpLAogICAgICAgICAgICAgbmFtZT0nUXVldWVGZWVkZXJUaHJlYWQnCiAgICAgICAgICAgICApCkBAIC0yMTAsMTAgKzIwOSw4IEBACiAgICAgICAgICAgICBub3RlbXB0eS5yZWxlYXNlKCkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2ZlZWQoYnVmZmVyLCBub3RlbXB0eSwgc2VuZCwgd3JpdGVsb2NrLCBjbG9zZSwgaWdub3JlX2VwaXBlKToKKyAgICBkZWYgX2ZlZWQoYnVmZmVyLCBub3RlbXB0eSwgc2VuZF9ieXRlcywgd3JpdGVsb2NrLCBjbG9zZSwgaWdub3JlX2VwaXBlKToKICAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIHRocmVhZCB0byBmZWVkIGRhdGEgdG8gcGlwZScpCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGlzX2V4aXRpbmcKLQogICAgICAgICBuYWNxdWlyZSA9IG5vdGVtcHR5LmFjcXVpcmUKICAgICAgICAgbnJlbGVhc2UgPSBub3RlbXB0eS5yZWxlYXNlCiAgICAgICAgIG53YWl0ID0gbm90ZW1wdHkud2FpdApAQCAtMjQxLDEyICsyMzgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHdhY3F1aXJlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9ieXRlcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQob2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2J5dGVzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmVsZWFzZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CkBAIC0yNzksMTAgKzI3OCwxMCBAQAogCiBjbGFzcyBKb2luYWJsZVF1ZXVlKFF1ZXVlKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTApOgotICAgICAgICBRdWV1ZS5fX2luaXRfXyhzZWxmLCBtYXhzaXplKQotICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGN0eCk6CisgICAgICAgIFF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUsIGN0eD1jdHgpCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICAgICAgIHJldHVybiBRdWV1ZS5fX2dldHN0YXRlX18oc2VsZikgKyAoc2VsZi5fY29uZCwgc2VsZi5fdW5maW5pc2hlZF90YXNrcykKQEAgLTMzMiw0OCArMzMxLDM3IEBACiAKIGNsYXNzIFNpbXBsZVF1ZXVlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxmLl9yZWFkZXIucG9sbAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKKyAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gY3R4LkxvY2soKQogCiAgICAgZGVmIGVtcHR5KHNlbGYpOgogICAgICAgICByZXR1cm4gbm90IHNlbGYuX3BvbGwoKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgIHJldHVybiAoc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsIHNlbGYuX3Jsb2NrLCBzZWxmLl93bG9jaykKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICAoc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsIHNlbGYuX3Jsb2NrLCBzZWxmLl93bG9jaykgPSBzdGF0ZQotICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCi0gICAgZGVmIF9tYWtlX21ldGhvZHMoc2VsZik6Ci0gICAgICAgIHJlY3YgPSBzZWxmLl9yZWFkZXIucmVjdgotICAgICAgICByYWNxdWlyZSwgcnJlbGVhc2UgPSBzZWxmLl9ybG9jay5hY3F1aXJlLCBzZWxmLl9ybG9jay5yZWxlYXNlCi0gICAgICAgIGRlZiBnZXQoKToKLSAgICAgICAgICAgIHJhY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVjdigpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHJyZWxlYXNlKCkKLSAgICAgICAgc2VsZi5nZXQgPSBnZXQKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX3Jsb2NrOgorICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMoKQorICAgICAgICAjIHVuc2VyaWFsaXplIHRoZSBkYXRhIGFmdGVyIGhhdmluZyByZWxlYXNlZCB0aGUgbG9jaworICAgICAgICByZXR1cm4gRm9ya2luZ1BpY2tsZXIubG9hZHMocmVzKQogCisgICAgZGVmIHB1dChzZWxmLCBvYmopOgorICAgICAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrCisgICAgICAgIG9iaiA9IEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikKICAgICAgICAgaWYgc2VsZi5fd2xvY2sgaXMgTm9uZToKICAgICAgICAgICAgICMgd3JpdGVzIHRvIGEgbWVzc2FnZSBvcmllbnRlZCB3aW4zMiBwaXBlIGFyZSBhdG9taWMKLSAgICAgICAgICAgIHNlbGYucHV0ID0gc2VsZi5fd3JpdGVyLnNlbmQKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzKG9iaikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbmQgPSBzZWxmLl93cml0ZXIuc2VuZAotICAgICAgICAgICAgd2FjcXVpcmUsIHdyZWxlYXNlID0gc2VsZi5fd2xvY2suYWNxdWlyZSwgc2VsZi5fd2xvY2sucmVsZWFzZQotICAgICAgICAgICAgZGVmIHB1dChvYmopOgotICAgICAgICAgICAgICAgIHdhY3F1aXJlKCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW5kKG9iaikKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICB3cmVsZWFzZSgpCi0gICAgICAgICAgICBzZWxmLnB1dCA9IHB1dAorICAgICAgICAgICAgd2l0aCBzZWxmLl93bG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcyhvYmopCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CmluZGV4IDY1NmZhOGYuLjAxZTZkZTIgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CkBAIC0xLDYgKzEsNSBAQAogIwotIyBNb2R1bGUgdG8gYWxsb3cgY29ubmVjdGlvbiBhbmQgc29ja2V0IG9iamVjdHMgdG8gYmUgdHJhbnNmZXJyZWQKLSMgYmV0d2VlbiBwcm9jZXNzZXMKKyMgTW9kdWxlIHdoaWNoIGRlYWxzIHdpdGggcGlja2xpbmcgb2Ygb2JqZWN0cy4KICMKICMgbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQogIwpAQCAtOCwyNyArNyw1NyBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fYWxsX18gPSBbJ3JlZHVjZV9zb2NrZXQnLCAncmVkdWNlX2Nvbm5lY3Rpb24nLCAnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnXQotCitpbXBvcnQgY29weXJlZworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGlvCiBpbXBvcnQgb3MKLWltcG9ydCBzeXMKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBzdHJ1Y3QKLWltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgZGVidWcsIHN1Yl9kZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgaXNfZXhpdGluZywgc3ViX3dhcm5pbmcKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCB1dGlsCiAKK19fYWxsX18gPSBbJ3NlbmRfaGFuZGxlJywgJ3JlY3ZfaGFuZGxlJywgJ0ZvcmtpbmdQaWNrbGVyJywgJ3JlZ2lzdGVyJywgJ2R1bXAnXQorCisKK0hBVkVfU0VORF9IQU5ETEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IKKyAgICAgICAgICAgICAgICAgICAgKGhhc2F0dHIoc29ja2V0LCAnQ01TR19MRU4nKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQuc29ja2V0LCAnc2VuZG1zZycpKSkKIAogIwotIworIyBQaWNrbGVyIHN1YmNsYXNzCiAjCiAKLWlmIG5vdChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldCwgJ1NDTV9SSUdIVFMnKSkpOgotICAgIHJhaXNlIEltcG9ydEVycm9yKCdwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIEZvcmtpbmdQaWNrbGVyKHBpY2tsZS5QaWNrbGVyKToKKyAgICAnJydQaWNrbGVyIHN1YmNsYXNzIHVzZWQgYnkgbXVsdGlwcm9jZXNzaW5nLicnJworICAgIF9leHRyYV9yZWR1Y2VycyA9IHt9CisgICAgX2NvcHlyZWdfZGlzcGF0Y2hfdGFibGUgPSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlID0gc2VsZi5fY29weXJlZ19kaXNwYXRjaF90YWJsZS5jb3B5KCkKKyAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCB0eXBlLCByZWR1Y2UpOgorICAgICAgICAnJydSZWdpc3RlciBhIHJlZHVjZSBmdW5jdGlvbiBmb3IgYSB0eXBlLicnJworICAgICAgICBjbHMuX2V4dHJhX3JlZHVjZXJzW3R5cGVdID0gcmVkdWNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZHVtcHMoY2xzLCBvYmosIHByb3RvY29sPU5vbmUpOgorICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY2xzKGJ1ZiwgcHJvdG9jb2wpLmR1bXAob2JqKQorICAgICAgICByZXR1cm4gYnVmLmdldGJ1ZmZlcigpCisKKyAgICBsb2FkcyA9IHBpY2tsZS5sb2FkcworCityZWdpc3RlciA9IEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyCisKK2RlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSk6CisgICAgJycnUmVwbGFjZW1lbnQgZm9yIHBpY2tsZS5kdW1wKCkgdXNpbmcgRm9ya2luZ1BpY2tsZXIuJycnCisgICAgRm9ya2luZ1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKQogCiAjCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCkBAIC0zNiwyMCArNjUsNDQgQEAKIAogaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgIyBXaW5kb3dzCi0gICAgX19hbGxfXyArPSBbJ3JlZHVjZV9waXBlX2Nvbm5lY3Rpb24nXQorICAgIF9fYWxsX18gKz0gWydEdXBIYW5kbGUnLCAnZHVwbGljYXRlJywgJ3N0ZWFsX2hhbmRsZSddCiAgICAgaW1wb3J0IF93aW5hcGkKIAorICAgIGRlZiBkdXBsaWNhdGUoaGFuZGxlLCB0YXJnZXRfcHJvY2Vzcz1Ob25lLCBpbmhlcml0YWJsZT1GYWxzZSk6CisgICAgICAgICcnJ0R1cGxpY2F0ZSBhIGhhbmRsZS4gICh0YXJnZXRfcHJvY2VzcyBpcyBhIGhhbmRsZSBub3QgYSBwaWQhKScnJworICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgorICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKKyAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAorICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAorICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTKQorCisgICAgZGVmIHN0ZWFsX2hhbmRsZShzb3VyY2VfcGlkLCBoYW5kbGUpOgorICAgICAgICAnJydTdGVhbCBhIGhhbmRsZSBmcm9tIHByb2Nlc3MgaWRlbnRpZmllZCBieSBzb3VyY2VfcGlkLicnJworICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKAorICAgICAgICAgICAgX3dpbmFwaS5QUk9DRVNTX0RVUF9IQU5ETEUsIEZhbHNlLCBzb3VyY2VfcGlkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICAgICAgc291cmNlX3Byb2Nlc3NfaGFuZGxlLCBoYW5kbGUsCisgICAgICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCAwLCBGYWxzZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUyB8IF93aW5hcGkuRFVQTElDQVRFX0NMT1NFX1NPVVJDRSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoc291cmNlX3Byb2Nlc3NfaGFuZGxlKQorCiAgICAgZGVmIHNlbmRfaGFuZGxlKGNvbm4sIGhhbmRsZSwgZGVzdGluYXRpb25fcGlkKToKKyAgICAgICAgJycnU2VuZCBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgZGggPSBEdXBIYW5kbGUoaGFuZGxlLCBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUywgZGVzdGluYXRpb25fcGlkKQogICAgICAgICBjb25uLnNlbmQoZGgpCiAKICAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6CisgICAgICAgICcnJ1JlY2VpdmUgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHJldHVybiBjb25uLnJlY3YoKS5kZXRhY2goKQogCiAgICAgY2xhc3MgRHVwSGFuZGxlKG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIGhhbmRsZS4nJycKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSwgYWNjZXNzLCBwaWQ9Tm9uZSk6Ci0gICAgICAgICAgICAjIGR1cGxpY2F0ZSBoYW5kbGUgZm9yIHByb2Nlc3Mgd2l0aCBnaXZlbiBwaWQKICAgICAgICAgICAgIGlmIHBpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgV2UganVzdCBkdXBsaWNhdGUgdGhlIGhhbmRsZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzIGFuZAorICAgICAgICAgICAgICAgICMgbGV0IHRoZSByZWNlaXZpbmcgcHJvY2VzcyBzdGVhbCB0aGUgaGFuZGxlLgogICAgICAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgICAgICBwcm9jID0gX3dpbmFwaS5PcGVuUHJvY2Vzcyhfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHBpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTYyLDkgKzExNSwxMiBAQAogICAgICAgICAgICAgc2VsZi5fcGlkID0gcGlkCiAKICAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgaGFuZGxlLiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4nJycKICAgICAgICAgICAgICMgcmV0cmlldmUgaGFuZGxlIGZyb20gcHJvY2VzcyB3aGljaCBjdXJyZW50bHkgb3ducyBpdAogICAgICAgICAgICAgaWYgc2VsZi5fcGlkID09IG9zLmdldHBpZCgpOgorICAgICAgICAgICAgICAgICMgVGhlIGhhbmRsZSBoYXMgYWxyZWFkeSBiZWVuIGR1cGxpY2F0ZWQgZm9yIHRoaXMgcHJvY2Vzcy4KICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisgICAgICAgICAgICAjIFdlIG11c3Qgc3RlYWwgdGhlIGhhbmRsZSBmcm9tIHRoZSBwcm9jZXNzIHdob3NlIHBpZCBpcyBzZWxmLl9waWQuCiAgICAgICAgICAgICBwcm9jID0gX3dpbmFwaS5PcGVuUHJvY2Vzcyhfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9waWQpCiAgICAgICAgICAgICB0cnk6CkBAIC03NCwyMDcgKzEzMCwxMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShwcm9jKQogCi0gICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrKToKLSAgICAgICAgICAgIG5ld19zb2NrID0gc29jay5kdXAoKQotICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKLSAgICAgICAgICAgICAgICBzaGFyZSA9IG5ld19zb2NrLnNoYXJlKHBpZCkKLSAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoc2hhcmUpCi0gICAgICAgICAgICBzZWxmLl9pZCA9IHJlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKLQotICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgotICAgICAgICAgICAgY29ubiA9IHJlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzaGFyZSA9IGNvbm4ucmVjdl9ieXRlcygpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5mcm9tc2hhcmUoc2hhcmUpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotCi0gICAgZGVmIHJlZHVjZV9zb2NrZXQocyk6Ci0gICAgICAgIHJldHVybiByZWJ1aWxkX3NvY2tldCwgKER1cFNvY2tldChzKSwpCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZHMpOgotICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKLQotICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKLSAgICAgICAgaGFuZGxlID0gY29ubi5maWxlbm8oKQotICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoaGFuZGxlLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgZHMgPSBEdXBTb2NrZXQocykKLSAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZHMsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgc29jayA9IGRzLmRldGFjaCgpCi0gICAgICAgIHJldHVybiBDb25uZWN0aW9uKHNvY2suZGV0YWNoKCksIHJlYWRhYmxlLCB3cml0YWJsZSkKLQotICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKLSAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCi0gICAgICAgIGRoID0gRHVwSGFuZGxlKGNvbm4uZmlsZW5vKCksIGFjY2VzcykKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfcGlwZV9jb25uZWN0aW9uLCAoZGgsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCi0KLSAgICBkZWYgcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24oZGgsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGVDb25uZWN0aW9uCi0gICAgICAgIGhhbmRsZSA9IGRoLmRldGFjaCgpCi0gICAgICAgIHJldHVybiBQaXBlQ29ubmVjdGlvbihoYW5kbGUsIHJlYWRhYmxlLCB3cml0YWJsZSkKLQogZWxzZToKICAgICAjIFVuaXgKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnLCAnc2VuZGZkcycsICdyZWN2ZmRzJ10KKyAgICBpbXBvcnQgYXJyYXkKIAogICAgICMgT24gTWFjT1NYIHdlIHNob3VsZCBhY2tub3dsZWRnZSByZWNlaXB0IG9mIGZkcyAtLSBzZWUgSXNzdWUxNDY2OQogICAgIEFDS05PV0xFREdFID0gc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nCiAKLSAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgotICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHMuc2VuZG1zZyhbYid4J10sIFsoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TQ01fUklHSFRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiQGkiLCBoYW5kbGUpKV0pCi0gICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBjb25uLnJlY3ZfYnl0ZXMoKSAhPSBiJ0FDSyc6CisgICAgZGVmIHNlbmRmZHMoc29jaywgZmRzKToKKyAgICAgICAgJycnU2VuZCBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgZmRzID0gYXJyYXkuYXJyYXkoJ2knLCBmZHMpCisgICAgICAgIG1zZyA9IGJ5dGVzKFtsZW4oZmRzKSAlIDI1Nl0pCisgICAgICAgIHNvY2suc2VuZG1zZyhbbXNnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsIGZkcyldKQorICAgICAgICBpZiBBQ0tOT1dMRURHRSBhbmQgc29jay5yZWN2KDEpICE9IGInQSc6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2RpZCBub3QgcmVjZWl2ZSBhY2tub3dsZWRnZW1lbnQgb2YgZmQnKQogCi0gICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgotICAgICAgICBzaXplID0gc3RydWN0LmNhbGNzaXplKCJAaSIpCisgICAgZGVmIHJlY3ZmZHMoc29jaywgc2l6ZSk6CisgICAgICAgICcnJ1JlY2VpdmUgYW4gYXJyYXkgb2YgZmRzIG92ZXIgYW4gQUZfVU5JWCBzb2NrZXQuJycnCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnaScpCisgICAgICAgIGJ5dGVzX3NpemUgPSBhLml0ZW1zaXplICogc2l6ZQorICAgICAgICBtc2csIGFuY2RhdGEsIGZsYWdzLCBhZGRyID0gc29jay5yZWN2bXNnKDEsIHNvY2tldC5DTVNHX0xFTihieXRlc19zaXplKSkKKyAgICAgICAgaWYgbm90IG1zZyBhbmQgbm90IGFuY2RhdGE6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBBQ0tOT1dMRURHRToKKyAgICAgICAgICAgICAgICBzb2NrLnNlbmQoYidBJykKKyAgICAgICAgICAgIGlmIGxlbihhbmNkYXRhKSAhPSAxOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmVjZWl2ZWQgJWQgaXRlbXMgb2YgYW5jZGF0YScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oYW5jZGF0YSkpCisgICAgICAgICAgICBjbXNnX2xldmVsLCBjbXNnX3R5cGUsIGNtc2dfZGF0YSA9IGFuY2RhdGFbMF0KKyAgICAgICAgICAgIGlmIChjbXNnX2xldmVsID09IHNvY2tldC5TT0xfU09DS0VUIGFuZAorICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6CisgICAgICAgICAgICAgICAgaWYgbGVuKGNtc2dfZGF0YSkgJSBhLml0ZW1zaXplICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICBhLmZyb21ieXRlcyhjbXNnX2RhdGEpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihhKSAlIDI1NiA9PSBtc2dbMF0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChhKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ludmFsaWQgZGF0YSByZWNlaXZlZCcpCisKKyAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKHNpemUpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgotICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoYidBQ0snKQotICAgICAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQotICAgICAgICAgICAgICAgIGlmIChjbXNnX2xldmVsID09IHNvY2tldC5TT0xfU09DS0VUIGFuZAotICAgICAgICAgICAgICAgICAgICBjbXNnX3R5cGUgPT0gc29ja2V0LlNDTV9SSUdIVFMpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygiQGkiLCBjbXNnX2RhdGFbOnNpemVdKVswXQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yLCBzdHJ1Y3QuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKyAgICAgICAgICAgIHNlbmRmZHMocywgW2hhbmRsZV0pCiAKLSAgICBjbGFzcyBEdXBGZChvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgotICAgICAgICAgICAgbmV3X2ZkID0gb3MuZHVwKGZkKQotICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKLSAgICAgICAgICAgICAgICBzZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKLSAgICAgICAgICAgIGRlZiBjbG9zZSgpOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIGNsb3NlKQorICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGNvbm4uZmlsZW5vKCksIHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICByZXR1cm4gcmVjdmZkcyhzLCAxKVswXQogCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2X2hhbmRsZShjb25uKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICBkZWYgRHVwRmQoZmQpOgorICAgICAgICAnJydSZXR1cm4gYSB3cmFwcGVyIGZvciBhbiBmZC4nJycKKyAgICAgICAgcG9wZW5fb2JqID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKQorICAgICAgICBpZiBwb3Blbl9vYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gcG9wZW5fb2JqLkR1cEZkKHBvcGVuX29iai5kdXBsaWNhdGVfZm9yX2NoaWxkKGZkKSkKKyAgICAgICAgZWxpZiBIQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgICAgIHJldHVybiByZXNvdXJjZV9zaGFyZXIuRHVwRmQoZmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTQ01fUklHSFRTIGFwcGVhcnMgbm90IHRvIGJlIGF2YWlsYWJsZScpCiAKLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKKyMKKyMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQorIworCitkZWYgX3JlZHVjZV9tZXRob2QobSk6CisgICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgorICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKK2NsYXNzIF9DOgorICAgIGRlZiBmKHNlbGYpOgorICAgICAgICBwYXNzCityZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQorCisKK2RlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgorICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCityZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKK3JlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorCisKK2RlZiBfcmVkdWNlX3BhcnRpYWwocCk6CisgICAgcmV0dXJuIF9yZWJ1aWxkX3BhcnRpYWwsIChwLmZ1bmMsIHAuYXJncywgcC5rZXl3b3JkcyBvciB7fSkKK2RlZiBfcmVidWlsZF9wYXJ0aWFsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzKToKKyAgICByZXR1cm4gZnVuY3Rvb2xzLnBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpCityZWdpc3RlcihmdW5jdG9vbHMucGFydGlhbCwgX3JlZHVjZV9wYXJ0aWFsKQorCisjCisjIE1ha2Ugc29ja2V0cyBwaWNrbGFibGUKKyMKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgZGVmIF9yZWR1Y2Vfc29ja2V0KHMpOgorICAgICAgICBmcm9tIC5yZXNvdXJjZV9zaGFyZXIgaW1wb3J0IER1cFNvY2tldAorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKKyAgICBkZWYgX3JlYnVpbGRfc29ja2V0KGRzKToKKyAgICAgICAgcmV0dXJuIGRzLmRldGFjaCgpCisgICAgcmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgX3JlZHVjZV9zb2NrZXQpCisKK2Vsc2U6CisgICAgZGVmIF9yZWR1Y2Vfc29ja2V0KHMpOgogICAgICAgICBkZiA9IER1cEZkKHMuZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX3NvY2tldCwgKGRmLCBzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKQotCi0gICAgZGVmIHJlYnVpbGRfc29ja2V0KGRmLCBmYW1pbHksIHR5cGUsIHByb3RvKToKKyAgICAgICAgcmV0dXJuIF9yZWJ1aWxkX3NvY2tldCwgKGRmLCBzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgogICAgICAgICBmZCA9IGRmLmRldGFjaCgpCi0gICAgICAgIHMgPSBzb2NrZXQuZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvKQotICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgcmV0dXJuIHMKLQotICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKLSAgICAgICAgZGYgPSBEdXBGZChjb25uLmZpbGVubygpKQotICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZGYsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCi0KLSAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDb25uZWN0aW9uCi0gICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oZmQsIHJlYWRhYmxlLCB3cml0YWJsZSkKLQotIwotIyBTZXJ2ZXIgd2hpY2ggc2hhcmVzIHJlZ2lzdGVyZWQgcmVzb3VyY2VzIHdpdGggY2xpZW50cwotIwotCi1jbGFzcyBSZXNvdXJjZVNoYXJlcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fa2V5ID0gMAotICAgICAgICBzZWxmLl9jYWNoZSA9IHt9Ci0gICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCi0gICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKLQotICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgICAgICBzZWxmLl9rZXkgKz0gMQotICAgICAgICAgICAgc2VsZi5fY2FjaGVbc2VsZi5fa2V5XSA9IChzZW5kLCBjbG9zZSkKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5fYWRkcmVzcywgc2VsZi5fa2V5KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXRfY29ubmVjdGlvbihpZGVudCk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAotICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAotICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9Y3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKLSAgICAgICAgYy5zZW5kKChrZXksIG9zLmdldHBpZCgpKSkKLSAgICAgICAgcmV0dXJuIGMKLQotICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAotICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGMgPSBDbGllbnQoc2VsZi5fYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICAgICAgICAgIGMuc2VuZChOb25lKQotICAgICAgICAgICAgICAgIGMuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Yl93YXJuKCdSZXNvdXJjZVNoYXJlciB0aHJlYWQgZGlkIG5vdCBzdG9wIHdoZW4gYXNrZWQnKQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCi0KLSAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKLSAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgotICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCi0gICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCi0gICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQotICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLQotICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCi0gICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCi0gICAgICAgIGRlYnVnKCdzdGFydGluZyBsaXN0ZW5lciBhbmQgdGhyZWFkIGZvciBzZW5kaW5nIGhhbmRsZXMnKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IExpc3RlbmVyKGF1dGhrZXk9Y3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX2xpc3RlbmVyLmFkZHJlc3MKLSAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3NlcnZlKQotICAgICAgICB0LmRhZW1vbiA9IFRydWUKLSAgICAgICAgdC5zdGFydCgpCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IHQKLQotICAgIGRlZiBfc2VydmUoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAncHRocmVhZF9zaWdtYXNrJyk6Ci0gICAgICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIHJhbmdlKDEsIHNpZ25hbC5OU0lHKSkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkKLSAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQotICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCi0gICAgICAgICAgICAgICAgc2VuZCwgY2xvc2UgPSBzZWxmLl9jYWNoZS5wb3Aoa2V5KQotICAgICAgICAgICAgICAgIHNlbmQoY29ubiwgZGVzdGluYXRpb25fcGlkKQotICAgICAgICAgICAgICAgIGNsb3NlKCkKLSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNfZXhpdGluZygpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCi0gICAgICAgICAgICAgICAgICAgIHN1Yl93YXJuaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgJ3RocmVhZCBmb3Igc2hhcmluZyBoYW5kbGVzIHJhaXNlZCBleGNlcHRpb24gOlxuJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAnLScqNzkgKyAnXG4nICsgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSArICctJyo3OQotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi1yZXNvdXJjZV9zaGFyZXIgPSBSZXNvdXJjZVNoYXJlcigpCisgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubz1mZCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVzb3VyY2Vfc2hhcmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NmZjNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVzb3VyY2Vfc2hhcmVyLnB5CkBAIC0wLDAgKzEsMTU4IEBACisjCisjIFdlIHVzZSBhIGJhY2tncm91bmQgdGhyZWFkIGZvciBzaGFyaW5nIGZkcyBvbiBVbml4LCBhbmQgZm9yIHNoYXJpbmcgc29ja2V0cyBvbgorIyBXaW5kb3dzLgorIworIyBBIGNsaWVudCB3aGljaCB3YW50cyB0byBwaWNrbGUgYSByZXNvdXJjZSByZWdpc3RlcnMgaXQgd2l0aCB0aGUgcmVzb3VyY2UKKyMgc2hhcmVyIGFuZCBnZXRzIGFuIGlkZW50aWZpZXIgaW4gcmV0dXJuLiAgVGhlIHVucGlja2xpbmcgcHJvY2VzcyB3aWxsIGNvbm5lY3QKKyMgdG8gdGhlIHJlc291cmNlIHNoYXJlciwgc2VuZHMgdGhlIGlkZW50aWZpZXIgYW5kIGl0cyBwaWQsIGFuZCB0aGVuIHJlY2VpdmVzCisjIHRoZSByZXNvdXJjZS4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydzdG9wJ10KKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBfX2FsbF9fICs9IFsnRHVwU29ja2V0J10KKworICAgIGNsYXNzIER1cFNvY2tldChvYmplY3QpOgorICAgICAgICAnJydQaWNrbGFibGUgd3JhcHBlciBmb3IgYSBzb2NrZXQuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrKToKKyAgICAgICAgICAgIG5ld19zb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKKyAgICAgICAgICAgICAgICBzaGFyZSA9IG5ld19zb2NrLnNoYXJlKHBpZCkKKyAgICAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMoc2hhcmUpCisgICAgICAgICAgICBzZWxmLl9pZCA9IF9yZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgbmV3X3NvY2suY2xvc2UpCisKKyAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgc29ja2V0LiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4nJycKKyAgICAgICAgICAgIHdpdGggX3Jlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkgYXMgY29ubjoKKyAgICAgICAgICAgICAgICBzaGFyZSA9IGNvbm4ucmVjdl9ieXRlcygpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5mcm9tc2hhcmUoc2hhcmUpCisKK2Vsc2U6CisgICAgX19hbGxfXyArPSBbJ0R1cEZkJ10KKworICAgIGNsYXNzIER1cEZkKG9iamVjdCk6CisgICAgICAgICcnJ1dyYXBwZXIgZm9yIGZkIHdoaWNoIGNhbiBiZSB1c2VkIGF0IGFueSB0aW1lLicnJworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgorICAgICAgICAgICAgbmV3X2ZkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZGVmIHNlbmQoY29ubiwgcGlkKToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZF9oYW5kbGUoY29ubiwgbmV3X2ZkLCBwaWQpCisgICAgICAgICAgICBkZWYgY2xvc2UoKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShuZXdfZmQpCisgICAgICAgICAgICBzZWxmLl9pZCA9IF9yZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisKKyAgICAgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgICAgICcnJ0dldCB0aGUgZmQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHJldHVybiByZWR1Y3Rpb24ucmVjdl9oYW5kbGUoY29ubikKKworCitjbGFzcyBfUmVzb3VyY2VTaGFyZXIob2JqZWN0KToKKyAgICAnJydNYW5hZ2VyIGZvciByZXNvdWNlcyB1c2luZyBiYWNrZ3JvdW5kIHRocmVhZC4nJycKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2tleSA9IDAKKyAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQorICAgICAgICBzZWxmLl9vbGRfbG9ja3MgPSBbXQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICB1dGlsLnJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX1Jlc291cmNlU2hhcmVyLl9hZnRlcmZvcmspCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgc2VuZCwgY2xvc2UpOgorICAgICAgICAnJydSZWdpc3RlciByZXNvdXJjZSwgcmV0dXJuaW5nIGFuIGlkZW50aWZpZXIuJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgICAgICBzZWxmLl9rZXkgKz0gMQorICAgICAgICAgICAgc2VsZi5fY2FjaGVbc2VsZi5fa2V5XSA9IChzZW5kLCBjbG9zZSkKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fYWRkcmVzcywgc2VsZi5fa2V5KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfY29ubmVjdGlvbihpZGVudCk6CisgICAgICAgICcnJ1JldHVybiBjb25uZWN0aW9uIGZyb20gd2hpY2ggdG8gcmVjZWl2ZSBpZGVudGlmaWVkIHJlc291cmNlLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgYWRkcmVzcywga2V5ID0gaWRlbnQKKyAgICAgICAgYyA9IENsaWVudChhZGRyZXNzLCBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgYy5zZW5kKChrZXksIG9zLmdldHBpZCgpKSkKKyAgICAgICAgcmV0dXJuIGMKKworICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICcnJ1N0b3AgdGhlIGJhY2tncm91bmQgdGhyZWFkIGFuZCBjbGVhciByZWdpc3RlcmVkIHJlc291cmNlcy4nJycKKyAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5zdWJfd2FybmluZygnX1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3Qgc3RvcCB3aGVuIGFza2VkJykKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQorCisgICAgZGVmIF9hZnRlcmZvcmsoc2VsZik6CisgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKKyAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQorICAgICAgICAjIElmIHNlbGYuX2xvY2sgd2FzIGxvY2tlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yaywgaXQgbWF5IGJlIGJyb2tlbgorICAgICAgICAjIC0tIHNlZSBpc3N1ZSA2NzIxLiAgUmVwbGFjZSBpdCB3aXRob3V0IGxldHRpbmcgaXQgYmUgZ2MnZWQuCisgICAgICAgIHNlbGYuX29sZF9sb2Nrcy5hcHBlbmQoc2VsZi5fbG9jaykKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgaWYgc2VsZi5fbGlzdGVuZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBMaXN0ZW5lcgorICAgICAgICBhc3NlcnQgc2VsZi5fbGlzdGVuZXIgaXMgTm9uZQorICAgICAgICB1dGlsLmRlYnVnKCdzdGFydGluZyBsaXN0ZW5lciBhbmQgdGhyZWFkIGZvciBzZW5kaW5nIGhhbmRsZXMnKQorICAgICAgICBzZWxmLl9saXN0ZW5lciA9IExpc3RlbmVyKGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gdAorCisgICAgZGVmIF9zZXJ2ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKKyAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkgYXMgY29ubjoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBrZXksIGRlc3RpbmF0aW9uX3BpZCA9IG1zZworICAgICAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQoY29ubiwgZGVzdGluYXRpb25fcGlkKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGlmIG5vdCB1dGlsLmlzX2V4aXRpbmcoKToKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorCisKK19yZXNvdXJjZV9zaGFyZXIgPSBfUmVzb3VyY2VTaGFyZXIoKQorc3RvcCA9IF9yZXNvdXJjZV9zaGFyZXIuc3RvcApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlX3RyYWNrZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMmI1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlX3RyYWNrZXIucHkKQEAgLTAsMCArMSwxNDUgQEAKKyMKKyMgT24gVW5peCB3ZSBydW4gYSBzZXJ2ZXIgcHJvY2VzcyB3aGljaCBrZWVwcyB0cmFjayBvZiB1bmxpbmtlZAorIyBzZW1hcGhvcmVzLiBUaGUgc2VydmVyIGlnbm9yZXMgU0lHSU5UIGFuZCBTSUdURVJNIGFuZCByZWFkcyBmcm9tIGEKKyMgcGlwZS4gIEV2ZXJ5IG90aGVyIHByb2Nlc3Mgb2YgdGhlIHByb2dyYW0gaGFzIGEgY29weSBvZiB0aGUgd3JpdGFibGUKKyMgZW5kIG9mIHRoZSBwaXBlLCBzbyB3ZSBnZXQgRU9GIHdoZW4gYWxsIG90aGVyIHByb2Nlc3NlcyBoYXZlIGV4aXRlZC4KKyMgVGhlbiB0aGUgc2VydmVyIHByb2Nlc3MgdW5saW5rcyBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZSBuYW1lcy4KKyMKKyMgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgc3lzdGVtIG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIG51bWJlcgorIyBvZiBuYW1lZCBzZW1hcGhvcmVzLCBhbmQgdGhleSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdGlsbAorIyB0aGUgbmV4dCByZWJvb3QuICBXaXRob3V0IHRoaXMgc2VtYXBob3JlIHRyYWNrZXIgcHJvY2VzcywgImtpbGxhbGwKKyMgcHl0aG9uIiB3b3VsZCBwcm9iYWJseSBsZWF2ZSB1bmxpbmtlZCBzZW1hcGhvcmVzLgorIworCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX211bHRpcHJvY2Vzc2luZworCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgY3VycmVudF9wcm9jZXNzCisKK19fYWxsX18gPSBbJ2Vuc3VyZV9ydW5uaW5nJywgJ3JlZ2lzdGVyJywgJ3VucmVnaXN0ZXInXQorCisKK2NsYXNzIFNlbWFwaG9yZVRyYWNrZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fZmQgPSBOb25lCisKKyAgICBkZWYgZ2V0ZmQoc2VsZik6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICByZXR1cm4gc2VsZi5fZmQKKworICAgIGRlZiBlbnN1cmVfcnVubmluZyhzZWxmKToKKyAgICAgICAgJycnTWFrZSBzdXJlIHRoYXQgc2VtYXBob3JlIHRyYWNrZXIgcHJvY2VzcyBpcyBydW5uaW5nLgorCisgICAgICAgIFRoaXMgY2FuIGJlIHJ1biBmcm9tIGFueSBwcm9jZXNzLiAgVXN1YWxseSBhIGNoaWxkIHByb2Nlc3Mgd2lsbCB1c2UKKyAgICAgICAgdGhlIHNlbWFwaG9yZSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQuJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZmRzX3RvX3Bhc3MgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkc190b19wYXNzLmFwcGVuZChzeXMuc3RkZXJyLmZpbGVubygpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjbWQgPSAnZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IG1haW47bWFpbiglZCknCisgICAgICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHIpCisgICAgICAgICAgICAgICAgIyBwcm9jZXNzIHdpbGwgb3V0IGxpdmUgdXMsIHNvIG5vIG5lZWQgdG8gd2FpdCBvbiBwaWQKKyAgICAgICAgICAgICAgICBleGUgPSBzcGF3bi5nZXRfZXhlY3V0YWJsZSgpCisgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICBhcmdzICs9IFsnLWMnLCBjbWQgJSByXQorICAgICAgICAgICAgICAgIHV0aWwuc3Bhd252X3Bhc3NmZHMoZXhlLCBhcmdzLCBmZHNfdG9fcGFzcykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZkID0gdworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShyKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydSZWdpc3RlciBuYW1lIG9mIHNlbWFwaG9yZSB3aXRoIHNlbWFwaG9yZSB0cmFja2VyLicnJworICAgICAgICBzZWxmLl9zZW5kKCdSRUdJU1RFUicsIG5hbWUpCisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBuYW1lKToKKyAgICAgICAgJycnVW5yZWdpc3RlciBuYW1lIG9mIHNlbWFwaG9yZSB3aXRoIHNlbWFwaG9yZSB0cmFja2VyLicnJworICAgICAgICBzZWxmLl9zZW5kKCdVTlJFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiBfc2VuZChzZWxmLCBjbWQsIG5hbWUpOgorICAgICAgICBzZWxmLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgbXNnID0gJ3swfTp7MX1cbicuZm9ybWF0KGNtZCwgbmFtZSkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIGlmIGxlbihuYW1lKSA+IDUxMjoKKyAgICAgICAgICAgICMgcG9zaXggZ3VhcmFudGVlcyB0aGF0IHdyaXRlcyB0byBhIHBpcGUgb2YgbGVzcyB0aGFuIFBJUEVfQlVGCisgICAgICAgICAgICAjIGJ5dGVzIGFyZSBhdG9taWMsIGFuZCB0aGF0IFBJUEVfQlVGID49IDUxMgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFtZSB0b28gbG9uZycpCisgICAgICAgIG5ieXRlcyA9IG9zLndyaXRlKHNlbGYuX2ZkLCBtc2cpCisgICAgICAgIGFzc2VydCBuYnl0ZXMgPT0gbGVuKG1zZykKKworCitfc2VtYXBob3JlX3RyYWNrZXIgPSBTZW1hcGhvcmVUcmFja2VyKCkKK2Vuc3VyZV9ydW5uaW5nID0gX3NlbWFwaG9yZV90cmFja2VyLmVuc3VyZV9ydW5uaW5nCityZWdpc3RlciA9IF9zZW1hcGhvcmVfdHJhY2tlci5yZWdpc3RlcgordW5yZWdpc3RlciA9IF9zZW1hcGhvcmVfdHJhY2tlci51bnJlZ2lzdGVyCitnZXRmZCA9IF9zZW1hcGhvcmVfdHJhY2tlci5nZXRmZAorCisKK2RlZiBtYWluKGZkKToKKyAgICAnJydSdW4gc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgIyBwcm90ZWN0IHRoZSBwcm9jZXNzIGZyb20gXkMgYW5kICJraWxsYWxsIHB5dGhvbiIgZXRjCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0lHTikKKworICAgIGZvciBmIGluIChzeXMuc3RkaW4sIHN5cy5zdGRvdXQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGNhY2hlID0gc2V0KCkKKyAgICB0cnk6CisgICAgICAgICMga2VlcCB0cmFjayBvZiByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBzZW1hcGhvcmVzCisgICAgICAgIHdpdGggb3BlbihmZCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjbWQsIG5hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoYic6JykKKyAgICAgICAgICAgICAgICAgICAgaWYgY21kID09IGInUkVHSVNURVInOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuYWRkKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgY21kID09IGInVU5SRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigndW5yZWNvZ25pemVkIGNvbW1hbmQgJXInICUgY21kKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgICMgYWxsIHByb2Nlc3NlcyBoYXZlIHRlcm1pbmF0ZWQ7IGNsZWFudXAgYW55IHJlbWFpbmluZyBzZW1hcGhvcmVzCisgICAgICAgIGlmIGNhY2hlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3NlbWFwaG9yZV90cmFja2VyOiBUaGVyZSBhcHBlYXIgdG8gYmUgJWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xlYWtlZCBzZW1hcGhvcmVzIHRvIGNsZWFuIHVwIGF0IHNodXRkb3duJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oY2FjaGUpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBuYW1lIGluIGNhY2hlOgorICAgICAgICAgICAgIyBGb3Igc29tZSByZWFzb24gdGhlIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCBhbmQgcmVnaXN0ZXJlZCB0aGlzCisgICAgICAgICAgICAjIHNlbWFwaG9yZSBoYXMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgaXQuIFByZXN1bWFibHkgaXQgaGFzIGRpZWQuCisgICAgICAgICAgICAjIFdlIHRoZXJlZm9yZSB1bmxpbmsgaXQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3NlbWFwaG9yZV90cmFja2VyOiAlcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CmluZGV4IGEzNThlZDQuLjBjMTc4MjUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CkBAIC0xMCw4ICsxMCwxMSBAQAogaW1wb3J0IGN0eXBlcwogaW1wb3J0IHdlYWtyZWYKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGhlYXAsIFJMb2NrCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcsIEZvcmtpbmdQaWNrbGVyCitmcm9tIC4gaW1wb3J0IGhlYXAKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQKKworZnJvbSAuY29udGV4dCBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCitmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCiAKIF9fYWxsX18gPSBbJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1ZhbHVlJywgJ0FycmF5JywgJ2NvcHknLCAnc3luY2hyb25pemVkJ10KIApAQCAtNjMsNyArNjYsNyBAQAogICAgICAgICByZXN1bHQuX19pbml0X18oKnNpemVfb3JfaW5pdGlhbGl6ZXIpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotZGVmIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorZGVmIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUsIGN0eD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm4gYSBzeW5jaHJvbml6YXRpb24gd3JhcHBlciBmb3IgYSBWYWx1ZQogICAgICcnJwpAQCAtNzEsMTIgKzc0LDEzIEBACiAgICAgaWYgbG9jayBpcyBGYWxzZToKICAgICAgICAgcmV0dXJuIG9iagogICAgIGlmIGxvY2sgaW4gKFRydWUsIE5vbmUpOgotICAgICAgICBsb2NrID0gUkxvY2soKQorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBsb2NrID0gY3R4LlJMb2NrKCkKICAgICBpZiBub3QgaGFzYXR0cihsb2NrLCAnYWNxdWlyZScpOgogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVyJyBoYXMgbm8gbWV0aG9kICdhY3F1aXJlJyIgJSBsb2NrKQotICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHg9Y3R4KQogCi1kZWYgQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKK2RlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUsIGN0eD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm4gYSBzeW5jaHJvbml6YXRpb24gd3JhcHBlciBmb3IgYSBSYXdBcnJheQogICAgICcnJwpAQCAtODQsMjUgKzg4LDI3IEBACiAgICAgaWYgbG9jayBpcyBGYWxzZToKICAgICAgICAgcmV0dXJuIG9iagogICAgIGlmIGxvY2sgaW4gKFRydWUsIE5vbmUpOgotICAgICAgICBsb2NrID0gUkxvY2soKQorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBsb2NrID0gY3R4LlJMb2NrKCkKICAgICBpZiBub3QgaGFzYXR0cihsb2NrLCAnYWNxdWlyZScpOgogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJyVyJyBoYXMgbm8gbWV0aG9kICdhY3F1aXJlJyIgJSBsb2NrKQotICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgIHJldHVybiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHg9Y3R4KQogCiBkZWYgY29weShvYmopOgogICAgIG5ld19vYmogPSBfbmV3X3ZhbHVlKHR5cGUob2JqKSkKICAgICBjdHlwZXMucG9pbnRlcihuZXdfb2JqKVswXSA9IG9iagogICAgIHJldHVybiBuZXdfb2JqCiAKLWRlZiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrPU5vbmUpOgorZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSwgY3R4PU5vbmUpOgogICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShvYmosIFN5bmNocm9uaXplZEJhc2UpLCAnb2JqZWN0IGFscmVhZHkgc3luY2hyb25pemVkJworICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLl9TaW1wbGVDRGF0YSk6Ci0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrKQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkKG9iaiwgbG9jaywgY3R4KQogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGN0eXBlcy5BcnJheSk6CiAgICAgICAgIGlmIG9iai5fdHlwZV8gaXMgY3R5cGVzLmNfY2hhcjoKLSAgICAgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRTdHJpbmcob2JqLCBsb2NrKQotICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrKQorICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2ssIGN0eCkKKyAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZEFycmF5KG9iaiwgbG9jaywgY3R4KQogICAgIGVsc2U6CiAgICAgICAgIGNscyA9IHR5cGUob2JqKQogICAgICAgICB0cnk6CkBAIC0xMTIsNyArMTE4LDcgQEAKICAgICAgICAgICAgIGQgPSBkaWN0KChuYW1lLCBtYWtlX3Byb3BlcnR5KG5hbWUpKSBmb3IgbmFtZSBpbiBuYW1lcykKICAgICAgICAgICAgIGNsYXNzbmFtZSA9ICdTeW5jaHJvbml6ZWQnICsgY2xzLl9fbmFtZV9fCiAgICAgICAgICAgICBzY2xzID0gY2xhc3NfY2FjaGVbY2xzXSA9IHR5cGUoY2xhc3NuYW1lLCAoU3luY2hyb25pemVkQmFzZSwpLCBkKQotICAgICAgICByZXR1cm4gc2NscyhvYmosIGxvY2spCisgICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaywgY3R4KQogCiAjCiAjIEZ1bmN0aW9ucyBmb3IgcGlja2xpbmcvdW5waWNrbGluZwpAQCAtMTcyLDkgKzE3OCwxMyBAQAogCiBjbGFzcyBTeW5jaHJvbml6ZWRCYXNlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCBsb2NrPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSwgY3R4PU5vbmUpOgogICAgICAgICBzZWxmLl9vYmogPSBvYmoKLSAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgUkxvY2soKQorICAgICAgICBpZiBsb2NrOgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dChmb3JjZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5fbG9jayA9IGN0eC5STG9jaygpCiAgICAgICAgIHNlbGYuYWNxdWlyZSA9IHNlbGYuX2xvY2suYWNxdWlyZQogICAgICAgICBzZWxmLnJlbGVhc2UgPSBzZWxmLl9sb2NrLnJlbGVhc2UKIApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0YjUzZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKQEAgLTAsMCArMSwyNTggQEAKKyMKKyMgQ29kZSB1c2VkIHRvIHN0YXJ0IHByb2Nlc3NlcyB3aGVuIHVzaW5nIHRoZSBzcGF3biBvciBmb3Jrc2VydmVyCisjIHN0YXJ0IG1ldGhvZHMuCisjCisjIG11bHRpcHJvY2Vzc2luZy9zcGF3bi5weQorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCisKK2Zyb20gLiBpbXBvcnQgZ2V0X3N0YXJ0X21ldGhvZCwgc2V0X3N0YXJ0X21ldGhvZAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnX21haW4nLCAnZnJlZXplX3N1cHBvcnQnLCAnc2V0X2V4ZWN1dGFibGUnLCAnZ2V0X2V4ZWN1dGFibGUnLAorICAgICAgICAgICAnZ2V0X3ByZXBhcmF0aW9uX2RhdGEnLCAnZ2V0X2NvbW1hbmRfbGluZScsICdpbXBvcnRfbWFpbl9wYXRoJ10KKworIworIyBfcHl0aG9uX2V4ZSBpcyB0aGUgYXNzdW1lZCBwYXRoIHRvIHRoZSBweXRob24gZXhlY3V0YWJsZS4KKyMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIFdJTkVYRSA9IEZhbHNlCisgICAgV0lOU0VSVklDRSA9IEZhbHNlCitlbHNlOgorICAgIFdJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCisgICAgV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworaWYgV0lOU0VSVklDRToKKyAgICBfcHl0aG9uX2V4ZSA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob24uZXhlJykKK2Vsc2U6CisgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQorCitkZWYgc2V0X2V4ZWN1dGFibGUoZXhlKToKKyAgICBnbG9iYWwgX3B5dGhvbl9leGUKKyAgICBfcHl0aG9uX2V4ZSA9IGV4ZQorCitkZWYgZ2V0X2V4ZWN1dGFibGUoKToKKyAgICByZXR1cm4gX3B5dGhvbl9leGUKKworIworIworIworCitkZWYgaXNfZm9ya2luZyhhcmd2KToKKyAgICAnJycKKyAgICBSZXR1cm4gd2hldGhlciBjb21tYW5kbGluZSBpbmRpY2F0ZXMgd2UgYXJlIGZvcmtpbmcKKyAgICAnJycKKyAgICBpZiBsZW4oYXJndikgPj0gMiBhbmQgYXJndlsxXSA9PSAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayc6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGZyZWV6ZV9zdXBwb3J0KCk6CisgICAgJycnCisgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKKyAgICAnJycKKyAgICBpZiBpc19mb3JraW5nKHN5cy5hcmd2KToKKyAgICAgICAgbWFpbigpCisgICAgICAgIHN5cy5leGl0KCkKKworCitkZWYgZ2V0X2NvbW1hbmRfbGluZSgqKmt3ZHMpOgorICAgICcnJworICAgIFJldHVybnMgcHJlZml4IG9mIGNvbW1hbmQgbGluZSB1c2VkIGZvciBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKKyAgICAnJycKKyAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKKyAgICAgICAgcmV0dXJuIFtzeXMuZXhlY3V0YWJsZSwgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQorICAgIGVsc2U6CisgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3Bhd24gaW1wb3J0IHNwYXduX21haW47IHNwYXduX21haW4oJXMpJworICAgICAgICBwcm9nICU9ICcsICcuam9pbignJXM9JXInICUgaXRlbSBmb3IgaXRlbSBpbiBrd2RzLml0ZW1zKCkpCisgICAgICAgIG9wdHMgPSB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQorCisKK2RlZiBzcGF3bl9tYWluKHBpcGVfaGFuZGxlLCBwYXJlbnRfcGlkPU5vbmUsIHRyYWNrZXJfZmQ9Tm9uZSk6CisgICAgJycnCisgICAgUnVuIGNvZGUgc3BlY2lmZWQgYnkgZGF0YSByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICAnJycKKyAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICBmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IHN0ZWFsX2hhbmRsZQorICAgICAgICBuZXdfaGFuZGxlID0gc3RlYWxfaGFuZGxlKHBhcmVudF9waWQsIHBpcGVfaGFuZGxlKQorICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShuZXdfaGFuZGxlLCBvcy5PX1JET05MWSkKKyAgICBlbHNlOgorICAgICAgICBmcm9tIC4gaW1wb3J0IHNlbWFwaG9yZV90cmFja2VyCisgICAgICAgIHNlbWFwaG9yZV90cmFja2VyLl9zZW1hcGhvcmVfdHJhY2tlci5fZmQgPSB0cmFja2VyX2ZkCisgICAgICAgIGZkID0gcGlwZV9oYW5kbGUKKyAgICBleGl0Y29kZSA9IF9tYWluKGZkKQorICAgIHN5cy5leGl0KGV4aXRjb2RlKQorCisKK2RlZiBfbWFpbihmZCk6CisgICAgd2l0aCBvcy5mZG9wZW4oZmQsICdyYicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZnJvbV9wYXJlbnQ6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByZXBhcmF0aW9uX2RhdGEgPSBwaWNrbGUubG9hZChmcm9tX3BhcmVudCkKKyAgICAgICAgICAgIHByZXBhcmUocHJlcGFyYXRpb25fZGF0YSkKKyAgICAgICAgICAgIHNlbGYgPSBwaWNrbGUubG9hZChmcm9tX3BhcmVudCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgcmV0dXJuIHNlbGYuX2Jvb3RzdHJhcCgpCisKKworZGVmIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKToKKyAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcnJworICAgICAgICBBbiBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlCisgICAgICAgIGN1cnJlbnQgcHJvY2VzcyBoYXMgZmluaXNoZWQgaXRzIGJvb3RzdHJhcHBpbmcgcGhhc2UuCisKKyAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHlvdSBhcmUgbm90IHVzaW5nIGZvcmsgdG8gc3RhcnQgeW91cgorICAgICAgICBjaGlsZCBwcm9jZXNzZXMgYW5kIHlvdSBoYXZlIGZvcmdvdHRlbiB0byB1c2UgdGhlIHByb3BlciBpZGlvbQorICAgICAgICBpbiB0aGUgbWFpbiBtb2R1bGU6CisKKyAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorICAgICAgICAgICAgICAgIC4uLgorCisgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQorICAgICAgICBpcyBub3QgZ29pbmcgdG8gYmUgZnJvemVuIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZS4nJycpCisKKworZGVmIGdldF9wcmVwYXJhdGlvbl9kYXRhKG5hbWUpOgorICAgICcnJworICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBfY2hlY2tfbm90X2ltcG9ydGluZ19tYWluKCkKKyAgICBkID0gZGljdCgKKyAgICAgICAgbG9nX3RvX3N0ZGVycj11dGlsLl9sb2dfdG9fc3RkZXJyLAorICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSwKKyAgICAgICAgKQorCisgICAgaWYgdXRpbC5fbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICBkWydsb2dfbGV2ZWwnXSA9IHV0aWwuX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCisKKyAgICBzeXNfcGF0aD1zeXMucGF0aC5jb3B5KCkKKyAgICB0cnk6CisgICAgICAgIGkgPSBzeXNfcGF0aC5pbmRleCgnJykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIHN5c19wYXRoW2ldID0gcHJvY2Vzcy5PUklHSU5BTF9ESVIKKworICAgIGQudXBkYXRlKAorICAgICAgICBuYW1lPW5hbWUsCisgICAgICAgIHN5c19wYXRoPXN5c19wYXRoLAorICAgICAgICBzeXNfYXJndj1zeXMuYXJndiwKKyAgICAgICAgb3JpZ19kaXI9cHJvY2Vzcy5PUklHSU5BTF9ESVIsCisgICAgICAgIGRpcj1vcy5nZXRjd2QoKSwKKyAgICAgICAgc3RhcnRfbWV0aG9kPWdldF9zdGFydF9tZXRob2QoKSwKKyAgICAgICAgKQorCisgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgb3IgKG5vdCBXSU5FWEUgYW5kIG5vdCBXSU5TRVJWSUNFKToKKyAgICAgICAgbWFpbl9wYXRoID0gZ2V0YXR0cihzeXMubW9kdWxlc1snX19tYWluX18nXSwgJ19fZmlsZV9fJywgTm9uZSkKKyAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6CisgICAgICAgICAgICBtYWluX3BhdGggPSBzeXMuYXJndlswXQorICAgICAgICBpZiBtYWluX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguaXNhYnMobWFpbl9wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvY2Vzcy5PUklHSU5BTF9ESVIsIG1haW5fcGF0aCkKKyAgICAgICAgICAgIGRbJ21haW5fcGF0aCddID0gb3MucGF0aC5ub3JtcGF0aChtYWluX3BhdGgpCisKKyAgICByZXR1cm4gZAorCisjCisjIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCisjCisKK29sZF9tYWluX21vZHVsZXMgPSBbXQorCitkZWYgcHJlcGFyZShkYXRhKToKKyAgICAnJycKKyAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIGlmICduYW1lJyBpbiBkYXRhOgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUgPSBkYXRhWyduYW1lJ10KKworICAgIGlmICdhdXRoa2V5JyBpbiBkYXRhOgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KKworICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106CisgICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCisKKyAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgorICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKKworICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKKyAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCisKKyAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6CisgICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQorCisgICAgaWYgJ2RpcicgaW4gZGF0YToKKyAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCisKKyAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQorCisgICAgaWYgJ3N0YXJ0X21ldGhvZCcgaW4gZGF0YToKKyAgICAgICAgc2V0X3N0YXJ0X21ldGhvZChkYXRhWydzdGFydF9tZXRob2QnXSkKKworICAgIGlmICdtYWluX3BhdGgnIGluIGRhdGE6CisgICAgICAgIGltcG9ydF9tYWluX3BhdGgoZGF0YVsnbWFpbl9wYXRoJ10pCisKKworZGVmIGltcG9ydF9tYWluX3BhdGgobWFpbl9wYXRoKToKKyAgICAnJycKKyAgICBTZXQgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gdG8gbW9kdWxlIGF0IG1haW5fcGF0aAorICAgICcnJworICAgICMgWFhYIChuY29naGxhbik6IFRoZSBmb2xsb3dpbmcgY29kZSBtYWtlcyBzZXZlcmFsIGJvZ3VzCisgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCisgICAgIyBhbmQgYSBtb2R1bGUncyByZWFsIG5hbWUuIFNlZSBQRVAgMzAyIGFuZCBpc3N1ZSAjMTA4NDUKKyAgICBpZiBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKSA9PSBtYWluX3BhdGg6CisgICAgICAgIHJldHVybgorCisgICAgbWFpbl9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkpWzBdCisgICAgaWYgbWFpbl9uYW1lID09ICdfX2luaXRfXyc6CisgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCisKKyAgICBpZiBtYWluX25hbWUgPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbWFpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1snX19tYWluX18nXQorICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAorICAgIGVsaWYgbWFpbl9uYW1lICE9ICdpcHl0aG9uJzoKKyAgICAgICAgIyBNYWluIG1vZHVsZXMgbm90IGFjdHVhbGx5IGNhbGxlZCBfX21haW5fXy5weSBtYXkKKyAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAorICAgICAgICBpbXBvcnQgaW1wb3J0bGliCisgICAgICAgIGltcG9ydCB0eXBlcworCisgICAgICAgIGlmIG1haW5fcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgZGlycyA9IE5vbmUKKyAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKKyAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShtYWluX3BhdGgpKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCisKKyAgICAgICAgYXNzZXJ0IG1haW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXMsIG1haW5fbmFtZQorICAgICAgICBzeXMubW9kdWxlcy5wb3AoJ19fbXBfbWFpbl9fJywgTm9uZSkKKyAgICAgICAgIyBXZSBzaG91bGQgbm90IHRyeSB0byBsb2FkIF9fbWFpbl9fCisgICAgICAgICMgc2luY2UgdGhhdCB3b3VsZCBleGVjdXRlICdpZiBfX25hbWVfXyA9PSAiX19tYWluX18iJworICAgICAgICAjIGNsYXVzZXMsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBwc3VlZG8gZm9yayBib21iLgorICAgICAgICBtYWluX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobWFpbl9uYW1lKQorICAgICAgICAjIFhYWCBVc2UgYSB0YXJnZXQgb2YgbWFpbl9tb2R1bGU/CisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIuZmluZF9zcGVjKG1haW5fbmFtZSwgcGF0aD1kaXJzKQorICAgICAgICBtZXRob2RzID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgIG1ldGhvZHMuaW5pdF9tb2R1bGVfYXR0cnMobWFpbl9tb2R1bGUpCisgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbXBfbWFpbl9fJworICAgICAgICBjb2RlID0gc3BlYy5sb2FkZXIuZ2V0X2NvZGUobWFpbl9uYW1lKQorICAgICAgICBleGVjKGNvZGUsIG1haW5fbW9kdWxlLl9fZGljdF9fKQorCisgICAgICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQorICAgICAgICBzeXMubW9kdWxlc1snX19tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21wX21haW5fXyddID0gbWFpbl9tb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CmluZGV4IDBmYWNhNzguLjlkOGUyODIgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQpAQCAtMTEsMjAgKzExLDI0IEBACiAgICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnQ29uZGl0aW9uJywgJ0V2ZW50JwogICAgIF0KIAoraW1wb3J0IG9zCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgc3lzCi0KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgUG9wZW4KKwogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiAKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKwogIyBUcnkgdG8gaW1wb3J0IHRoZSBtcC5zeW5jaHJvbml6ZSBtb2R1bGUgY2xlYW5seSwgaWYgaXQgZmFpbHMKICMgcmFpc2UgSW1wb3J0RXJyb3IgZm9yIHBsYXRmb3JtcyBsYWNraW5nIGEgd29ya2luZyBzZW1fb3BlbiBpbXBsZW1lbnRhdGlvbi4KICMgU2VlIGlzc3VlIDM3NzAKIHRyeToKLSAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2sKKyAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2ssIHNlbV91bmxpbmsKIGV4Y2VwdCAoSW1wb3J0RXJyb3IpOgogICAgIHJhaXNlIEltcG9ydEVycm9yKCJUaGlzIHBsYXRmb3JtIGxhY2tzIGEgZnVuY3Rpb25pbmcgc2VtX29wZW4iICsKICAgICAgICAgICAgICAgICAgICAgICAiIGltcGxlbWVudGF0aW9uLCB0aGVyZWZvcmUsIHRoZSByZXF1aXJlZCIgKwpAQCAtNDQsMTUgKzQ4LDQ2IEBACiAKIGNsYXNzIFNlbUxvY2sob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCB2YWx1ZSwgbWF4dmFsdWUpOgotICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soa2luZCwgdmFsdWUsIG1heHZhbHVlKQotICAgICAgICBkZWJ1ZygnY3JlYXRlZCBzZW1sb2NrIHdpdGggaGFuZGxlICVzJyAlIHNsLmhhbmRsZSkKKyAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgKiwgY3R4KToKKyAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKKyAgICAgICAgY3R4ID0gY3R4LmdldF9jb250ZXh0KCkKKyAgICAgICAgdW5saW5rX25vdyA9IHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIGN0eC5fbmFtZSA9PSAnZm9yaycKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soCisgICAgICAgICAgICAgICAgICAgIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgc2VsZi5fbWFrZV9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHVubGlua19ub3cpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignY2Fubm90IGZpbmQgbmFtZSBmb3Igc2VtYXBob3JlJykKKworICAgICAgICB1dGlsLmRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQogICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgogICAgICAgICAgICAgZGVmIF9hZnRlcl9mb3JrKG9iaik6CiAgICAgICAgICAgICAgICAgb2JqLl9zZW1sb2NrLl9hZnRlcl9mb3JrKCkKLSAgICAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisgICAgICAgICAgICB1dGlsLnJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisKKyAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBvbiBVbml4IHdpdGggZm9ya2luZworICAgICAgICAgICAgIyBkaXNhYmxlZC4gIFdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBvciB0aGUKKyAgICAgICAgICAgICMgcHJvY2VzcyBzaHV0cyBkb3duIHdlIHVubGluayB0aGUgc2VtYXBob3JlIG5hbWUKKyAgICAgICAgICAgIGZyb20gLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCByZWdpc3RlcgorICAgICAgICAgICAgcmVnaXN0ZXIoc2VsZi5fc2VtbG9jay5uYW1lKQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBTZW1Mb2NrLl9jbGVhbnVwLCAoc2VsZi5fc2VtbG9jay5uYW1lLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRwcmlvcml0eT0wKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY2xlYW51cChuYW1lKToKKyAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHVucmVnaXN0ZXIKKyAgICAgICAgc2VtX3VubGluayhuYW1lKQorICAgICAgICB1bnJlZ2lzdGVyKG5hbWUpCiAKICAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fc2VtbG9jay5hY3F1aXJlCkBAIC02NSwyMyArMTAwLDMyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9fZXhpdF9fKCphcmdzKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgIHNsID0gc2VsZi5fc2VtbG9jawotICAgICAgICByZXR1cm4gKFBvcGVuLmR1cGxpY2F0ZV9mb3JfY2hpbGQoc2wuaGFuZGxlKSwgc2wua2luZCwgc2wubWF4dmFsdWUpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgaCA9IGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkuZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoID0gc2wuaGFuZGxlCisgICAgICAgIHJldHVybiAoaCwgc2wua2luZCwgc2wubWF4dmFsdWUsIHNsLm5hbWUpCiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5fcmVidWlsZCgqc3RhdGUpCi0gICAgICAgIGRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVjcmVhdGVkIGJsb2NrZXIgd2l0aCBoYW5kbGUgJXInICUgc3RhdGVbMF0pCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9tYWtlX25hbWUoKToKKyAgICAgICAgcmV0dXJuICclcy0lcycgJSAocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnWydzZW1wcmVmaXgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChTZW1Mb2NrLl9yYW5kKSkKKwogIwogIyBTZW1hcGhvcmUKICMKIAogY2xhc3MgU2VtYXBob3JlKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIFNFTV9WQUxVRV9NQVgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCwgY3R4PWN0eCkKIAogICAgIGRlZiBnZXRfdmFsdWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9nZXRfdmFsdWUoKQpAQCAtOTksOCArMTQzLDggQEAKIAogY2xhc3MgQm91bmRlZFNlbWFwaG9yZShTZW1hcGhvcmUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xMTYsMTMgKzE2MCwxMyBAQAogCiBjbGFzcyBMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpID09IDE6CkBAIC0xNDEsMTMgKzE4NSwxMyBAQAogCiBjbGFzcyBSTG9jayhTZW1Mb2NrKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgUkVDVVJTSVZFX01VVEVYLCAxLCAxLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLl9pc19taW5lKCk6Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCiAgICAgICAgICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICAgICAgICAgIGNvdW50ID0gc2VsZi5fc2VtbG9jay5fY291bnQoKQpAQCAtMTY3LDE1ICsyMTEsMTUgQEAKIAogY2xhc3MgQ29uZGl0aW9uKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jaz1Ob25lKToKLSAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgUkxvY2soKQotICAgICAgICBzZWxmLl9zbGVlcGluZ19jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrIG9yIGN0eC5STG9jaygpCisgICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fd2FpdF9zZW1hcGhvcmUgPSBjdHguU2VtYXBob3JlKDApCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9sb2NrLCBzZWxmLl9zbGVlcGluZ19jb3VudCwKICAgICAgICAgICAgICAgICBzZWxmLl93b2tlbl9jb3VudCwgc2VsZi5fd2FpdF9zZW1hcGhvcmUpCiAKQEAgLTI4OSw5ICszMzMsOSBAQAogCiBjbGFzcyBFdmVudChvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKExvY2soKSkKLSAgICAgICAgc2VsZi5fZmxhZyA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbihjdHguTG9jaygpKQorICAgICAgICBzZWxmLl9mbGFnID0gY3R4LlNlbWFwaG9yZSgwKQogCiAgICAgZGVmIGlzX3NldChzZWxmKToKICAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKQEAgLTM0MCwxMSArMzg0LDExIEBACiAKIGNsYXNzIEJhcnJpZXIodGhyZWFkaW5nLkJhcnJpZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lLCAqLCBjdHgpOgogICAgICAgICBpbXBvcnQgc3RydWN0Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmhlYXAgaW1wb3J0IEJ1ZmZlcldyYXBwZXIKKyAgICAgICAgZnJvbSAuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgogICAgICAgICB3cmFwcGVyID0gQnVmZmVyV3JhcHBlcihzdHJ1Y3QuY2FsY3NpemUoJ2knKSAqIDIpCi0gICAgICAgIGNvbmQgPSBDb25kaXRpb24oKQorICAgICAgICBjb25kID0gY3R4LkNvbmRpdGlvbigpCiAgICAgICAgIHNlbGYuX19zZXRzdGF0ZV9fKChwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGNvbmQsIHdyYXBwZXIpKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IDAKICAgICAgICAgc2VsZi5fY291bnQgPSAwCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKaW5kZXggZjU4NjJiNC4uZTQ3NmU4NSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQpAQCAtMTcsMTMgKzE3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFudXAgZnVuY3Rpb24gYmVmb3JlIG11bHRpcHJvY2Vzc2luZyBkb2VzCiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IF9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBhY3RpdmVfY2hpbGRyZW4KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcwogCiBfX2FsbF9fID0gWwogICAgICdzdWJfZGVidWcnLCAnZGVidWcnLCAnaW5mbycsICdzdWJfd2FybmluZycsICdnZXRfbG9nZ2VyJywKICAgICAnbG9nX3RvX3N0ZGVycicsICdnZXRfdGVtcF9kaXInLCAncmVnaXN0ZXJfYWZ0ZXJfZm9yaycsCiAgICAgJ2lzX2V4aXRpbmcnLCAnRmluYWxpemUnLCAnRm9ya0F3YXJlVGhyZWFkTG9jaycsICdGb3JrQXdhcmVMb2NhbCcsCi0gICAgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAorICAgICdjbG9zZV9hbGxfZmRzX2V4Y2VwdCcsICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKICAgICBdCiAKICMKQEAgLTcxLDggKzcxLDYgQEAKIAogICAgICAgICAgICAgX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKExPR0dFUl9OQU1FKQogICAgICAgICAgICAgX2xvZ2dlci5wcm9wYWdhdGUgPSAwCi0gICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShTVUJERUJVRywgJ1NVQkRFQlVHJykKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQldBUk5JTkcsICdTVUJXQVJOSU5HJykKIAogICAgICAgICAgICAgIyBYWFggbXVsdGlwcm9jZXNzaW5nIHNob3VsZCBjbGVhbnVwIGJlZm9yZSBsb2dnaW5nCiAgICAgICAgICAgICBpZiBoYXNhdHRyKGF0ZXhpdCwgJ3VucmVnaXN0ZXInKToKQEAgLTExMSwxMyArMTA5LDE0IEBACiAKIGRlZiBnZXRfdGVtcF9kaXIoKToKICAgICAjIGdldCBuYW1lIG9mIGEgdGVtcCBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAKLSAgICBpZiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpciBpcyBOb25lOgorICAgIHRlbXBkaXIgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWcuZ2V0KCd0ZW1wZGlyJykKKyAgICBpZiB0ZW1wZGlyIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCBzaHV0aWwsIHRlbXBmaWxlCiAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncHltcC0nKQogICAgICAgICBpbmZvKCdjcmVhdGVkIHRlbXAgZGlyZWN0b3J5ICVzJywgdGVtcGRpcikKICAgICAgICAgRmluYWxpemUoTm9uZSwgc2h1dGlsLnJtdHJlZSwgYXJncz1bdGVtcGRpcl0sIGV4aXRwcmlvcml0eT0tMTAwKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpciA9IHRlbXBkaXIKLSAgICByZXR1cm4gY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnWyd0ZW1wZGlyJ10gPSB0ZW1wZGlyCisgICAgcmV0dXJuIHRlbXBkaXIKIAogIwogIyBTdXBwb3J0IGZvciByZWluaXRpYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiBib290c3RyYXBwaW5nIGEgY2hpbGQgcHJvY2VzcwpAQCAtMjczLDggKzI3Miw4IEBACiBfZXhpdGluZyA9IEZhbHNlCiAKIGRlZiBfZXhpdF9mdW5jdGlvbihpbmZvPWluZm8sIGRlYnVnPWRlYnVnLCBfcnVuX2ZpbmFsaXplcnM9X3J1bl9maW5hbGl6ZXJzLAotICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9jaGlsZHJlbj1hY3RpdmVfY2hpbGRyZW4sCi0gICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPWN1cnJlbnRfcHJvY2Vzcyk6CisgICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPXByb2Nlc3MuYWN0aXZlX2NoaWxkcmVuLAorICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvY2Vzcz1wcm9jZXNzLmN1cnJlbnRfcHJvY2Vzcyk6CiAgICAgIyBXZSBob2xkIG9uIHRvIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zIGluIHRoZSBhcmdsaXN0IGR1ZSB0byB0aGUKICAgICAjIHNpdHVhdGlvbiBkZXNjcmliZWQgYmVsb3csIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoaXMKICAgICAjIG1vZHVsZSdzIGdsb2JhbHMgYXJlIGRlc3Ryb3llZC4KQEAgLTMwMyw3ICszMDIsNyBAQAogICAgICAgICAgICAgIyAjOTIwNy4KIAogICAgICAgICAgICAgZm9yIHAgaW4gYWN0aXZlX2NoaWxkcmVuKCk6Ci0gICAgICAgICAgICAgICAgaWYgcC5fZGFlbW9uaWM6CisgICAgICAgICAgICAgICAgaWYgcC5kYWVtb246CiAgICAgICAgICAgICAgICAgICAgIGluZm8oJ2NhbGxpbmcgdGVybWluYXRlKCkgZm9yIGRhZW1vbiAlcycsIHAubmFtZSkKICAgICAgICAgICAgICAgICAgICAgcC5fcG9wZW4udGVybWluYXRlKCkKIApAQCAtMzM1LDMgKzMzNCwzNiBAQAogICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIGxhbWJkYSBvYmogOiBvYmouX19kaWN0X18uY2xlYXIoKSkKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZiksICgpCisKKyMKKyMgQ2xvc2UgZmRzIGV4Y2VwdCB0aG9zZSBzcGVjaWZpZWQKKyMKKwordHJ5OgorICAgIE1BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBNQVhGRCA9IDI1NgorCitkZWYgY2xvc2VfYWxsX2Zkc19leGNlcHQoZmRzKToKKyAgICBmZHMgPSBsaXN0KGZkcykgKyBbLTEsIE1BWEZEXQorICAgIGZkcy5zb3J0KCkKKyAgICBhc3NlcnQgZmRzWy0xXSA9PSBNQVhGRCwgJ2ZkIHRvbyBsYXJnZScKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oZmRzKSAtIDEpOgorICAgICAgICBvcy5jbG9zZXJhbmdlKGZkc1tpXSsxLCBmZHNbaSsxXSkKKworIworIyBTdGFydCBhIHByb2dyYW0gd2l0aCBvbmx5IHNwZWNpZmllZCBmZHMga2VwdCBvcGVuCisjCisKK2RlZiBzcGF3bnZfcGFzc2ZkcyhwYXRoLCBhcmdzLCBwYXNzZmRzKToKKyAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcworICAgIHBhc3NmZHMgPSBzb3J0ZWQocGFzc2ZkcykKKyAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBvcy5waXBlKCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfcG9zaXhzdWJwcm9jZXNzLmZvcmtfZXhlYygKKyAgICAgICAgICAgIGFyZ3MsIFtvcy5mc2VuY29kZShwYXRoKV0sIFRydWUsIHBhc3NmZHMsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUsCisgICAgICAgICAgICBGYWxzZSwgRmFsc2UsIE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2xvc2UoZXJycGlwZV9yZWFkKQorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3dyaXRlKQpkaWZmIC0tZ2l0IGEvTGliL25ldHJjLnB5IGIvTGliL25ldHJjLnB5CmluZGV4IDJhYTQ4ZjMuLmJiYjNkMjMgMTAwNjQ0Ci0tLSBhL0xpYi9uZXRyYy5weQorKysgYi9MaWIvbmV0cmMucHkKQEAgLTMsOCArMyw2IEBACiAjIE1vZHVsZSBhbmQgZG9jdW1lbnRhdGlvbiBieSBFcmljIFMuIFJheW1vbmQsIDIxIERlYyAxOTk4CiAKIGltcG9ydCBvcywgc2hsZXgsIHN0YXQKLWlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICBpbXBvcnQgcHdkCiAKIF9fYWxsX18gPSBbIm5ldHJjIiwgIk5ldHJjUGFyc2VFcnJvciJdCiAKQEAgLTI4LDcgKzI2LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0hPTUUnXSwgIi5uZXRyYyIpCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ291bGQgbm90IGZpbmQgLm5ldHJjOiAkSE9NRSBpcyBub3Qgc2V0IikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQogICAgICAgICBzZWxmLmhvc3RzID0ge30KICAgICAgICAgc2VsZi5tYWNyb3MgPSB7fQogICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZnA6CkBAIC05Miw2ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgZGVmYXVsdF9uZXRyYzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBvcy5mc3RhdChmcC5maWxlbm8oKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3Auc3RfdWlkICE9IG9zLmdldHVpZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBwd2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvd25lciA9IHB3ZC5nZXRwd3VpZChwcm9wLnN0X3VpZClbMF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvbm50cGxpYi5weSBiL0xpYi9ubnRwbGliLnB5CmluZGV4IDAyY2MzN2MuLjA0NmY0ODMgMTAwNjQ0Ci0tLSBhL0xpYi9ubnRwbGliLnB5CisrKyBiL0xpYi9ubnRwbGliLnB5CkBAIC0yODgsOSArMjg4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgICMgR2VuZXJhdGUgYSBkZWZhdWx0IFNTTCBjb250ZXh0IGlmIG5vbmUgd2FzIHBhc3NlZC4KICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KLSAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spCiAKIApAQCAtMzY2LDcgKzM2NCw3IEBACiAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBpc19jb25uZWN0ZWQoKToKQEAgLTk1Niw3ICs5NTQsNyBAQAogICAgICAgICAgICAgICAgIGlmIGF1dGg6CiAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBhdXRoWzBdCiAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gYXV0aFsyXQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgUGVyZm9ybSBOTlRQIGF1dGhlbnRpY2F0aW9uIGlmIG5lZWRlZC4KICAgICAgICAgaWYgbm90IHVzZXI6CmRpZmYgLS1naXQgYS9MaWIvbnRwYXRoLnB5IGIvTGliL250cGF0aC5weQppbmRleCA4MjZiZTg3Li42YjY1Njk3IDEwMDY0NAotLS0gYS9MaWIvbnRwYXRoLnB5CisrKyBiL0xpYi9udHBhdGgucHkKQEAgLTE3LDcgKzE3LDcgQEAKICAgICAgICAgICAgImlzbW91bnQiLCAiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAogICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCiAgICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiLAotICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIixdCisgICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLCAic2FtZXN0YXQiLF0KIAogIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKICMgVGhlc2UgYXJlIHByaW1hcmlseSBmb3IgZXhwb3J0OyBpbnRlcm5hbGx5LCB0aGV5IGFyZSBoYXJkY29kZWQuCkBAIC0zMCw5ICszMCw2IEBACiBkZWZwYXRoID0gJy47QzpcXGJpbicKIGlmICdjZScgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgIGRlZnBhdGggPSAnXFxXaW5kb3dzJwotZWxpZiAnb3MyJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgIyBPUy8yIHcvIFZBQ1BQCi0gICAgYWx0c2VwID0gJy8nCiBkZXZudWxsID0gJ251bCcKIAogZGVmIF9nZXRfZW1wdHkocGF0aCk6CkBAIC0zMjAsMTIgKzMxNywxMSBAQAogCiBkZWYgaXNsaW5rKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMAotICAgIGFuZCBmb3IgT1MvMi4KKyAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAuCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKQEAgLTMzNSwyMCArMzMxLDM5IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIFdpbmRvd3NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCisjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PworIyBBbnkgZHJpdmUgbGV0dGVyIHJvb3QgKGVnIGM6XCkKKyMgQW55IHNoYXJlIFVOQyAoZWcgXFxzZXJ2ZXJcc2hhcmUpCisjIEFueSB2b2x1bWUgbW91bnRlZCBvbiBhIGZpbGVzeXN0ZW0gZm9sZGVyCisjCisjIE5vIG9uZSBtZXRob2QgZGV0ZWN0cyBhbGwgdGhyZWUgc2l0dWF0aW9ucy4gSGlzdG9yaWNhbGx5IHdlJ3ZlIGxleGljYWxseQorIyBkZXRlY3RlZCBkcml2ZSBsZXR0ZXIgcm9vdHMgYW5kIHNoYXJlIFVOQ3MuIFRoZSBjYW5vbmljYWwgYXBwcm9hY2ggdG8KKyMgZGV0ZWN0aW5nIG1vdW50ZWQgdm9sdW1lcyAocXVlcnlpbmcgdGhlIHJlcGFyc2UgdGFnKSBmYWlscyBmb3IgdGhlIG1vc3QKKyMgY29tbW9uIGNhc2U6IGRyaXZlIGxldHRlciByb290cy4gVGhlIGFsdGVybmF0aXZlIHdoaWNoIHVzZXMgR2V0Vm9sdW1lUGF0aE5hbWUKKyMgZmFpbHMgaWYgdGhlIGRyaXZlIGxldHRlciBpcyB0aGUgcmVzdWx0IG9mIGEgU1VCU1QuCit0cnk6CisgICAgZnJvbSBudCBpbXBvcnQgX2dldHZvbHVtZXBhdGhuYW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX2dldHZvbHVtZXBhdGhuYW1lID0gTm9uZQogZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChhIGRyaXZlIHJvb3QsIHRoZSByb290IG9mIGEKKyAgICBzaGFyZSwgb3IgYSBtb3VudGVkIHZvbHVtZSkiIiIKICAgICBzZXBzID0gX2dldF9ib3Roc2VwcyhwYXRoKQorICAgIHBhdGggPSBhYnNwYXRoKHBhdGgpCiAgICAgcm9vdCwgcmVzdCA9IHNwbGl0ZHJpdmUocGF0aCkKICAgICBpZiByb290IGFuZCByb290WzBdIGluIHNlcHM6CiAgICAgICAgIHJldHVybiAobm90IHJlc3QpIG9yIChyZXN0IGluIHNlcHMpCi0gICAgcmV0dXJuIHJlc3QgaW4gc2VwcworICAgIGlmIHJlc3QgaW4gc2VwczoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9nZXR2b2x1bWVwYXRobmFtZToKKyAgICAgICAgcmV0dXJuIHBhdGgucnN0cmlwKHNlcHMpID09IF9nZXR2b2x1bWVwYXRobmFtZShwYXRoKS5yc3RyaXAoc2VwcykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogCiAjIEV4cGFuZCBwYXRocyBiZWdpbm5pbmcgd2l0aCAnficgb3IgJ351c2VyJy4KQEAgLTU4OCw3ICs2MDMsNyBAQAogICAgICAgICBpZiBwYXRoOiAjIEVtcHR5IHBhdGggbXVzdCByZXR1cm4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwYXRoID0gX2dldGZ1bGxwYXRobmFtZShwYXRoKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgIyBCYWQgcGF0aCAtIHJldHVybiB1bmNoYW5nZWQuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CiAgICAgICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkYigpCkBAIC02NTYsMjMgKzY3MSw2IEBACiAgICAgZGVmIF9nZXRmaW5hbHBhdGhuYW1lKGYpOgogICAgICAgICByZXR1cm4gbm9ybWNhc2UoYWJzcGF0aChmKSkKIAotZGVmIHNhbWVmaWxlKGYxLCBmMik6Ci0gICAgIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIKLSAgICByZXR1cm4gX2dldGZpbmFscGF0aG5hbWUoZjEpID09IF9nZXRmaW5hbHBhdGhuYW1lKGYyKQotCi0KLXRyeToKLSAgICBmcm9tIG50IGltcG9ydCBfZ2V0ZmlsZWluZm9ybWF0aW9uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBPbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywganVzdCByZXR1cm4gdGhlIGZkIGFuZCBzZWUgdGhhdAotICAgICMgaXQgY29tcGFyZXMgZXF1YWwgaW4gc2FtZW9wZW5maWxlLgotICAgIGRlZiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGZkKToKLSAgICAgICAgcmV0dXJuIGZkCi0KLWRlZiBzYW1lb3BlbmZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYxKSA9PSBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYyKQotCiAKIHRyeToKICAgICAjIFRoZSBnZW5lcmljcGF0aC5pc2RpciBpbXBsZW1lbnRhdGlvbiB1c2VzIG9zLnN0YXQgYW5kIGNoZWNrcyB0aGUgbW9kZQpkaWZmIC0tZ2l0IGEvTGliL250dXJsMnBhdGgucHkgYi9MaWIvbnR1cmwycGF0aC5weQppbmRleCA1MTFkY2VjLi41YTZkNDRhIDEwMDY0NAotLS0gYS9MaWIvbnR1cmwycGF0aC5weQorKysgYi9MaWIvbnR1cmwycGF0aC5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbXAgPSB1cmwuc3BsaXQoJ3wnKQogICAgIGlmIGxlbihjb21wKSAhPSAyIG9yIGNvbXBbMF1bLTFdIG5vdCBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyczoKICAgICAgICAgZXJyb3IgPSAnQmFkIFVSTDogJyArIHVybAotICAgICAgICByYWlzZSBJT0Vycm9yKGVycm9yKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm9yKQogICAgIGRyaXZlID0gY29tcFswXVstMV0udXBwZXIoKQogICAgIGNvbXBvbmVudHMgPSBjb21wWzFdLnNwbGl0KCcvJykKICAgICBwYXRoID0gZHJpdmUgKyAnOicKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBjb21wID0gcC5zcGxpdCgnOicpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgbGVuKGNvbXBbMF0pID4gMToKICAgICAgICAgZXJyb3IgPSAnQmFkIHBhdGg6ICcgKyBwCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAKICAgICBkcml2ZSA9IHVybGxpYi5wYXJzZS5xdW90ZShjb21wWzBdLnVwcGVyKCkpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJ1xcJykKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IGE2MzlmZTMuLjBiZDFlZTYgMTAwNjQ0Ci0tLSBhL0xpYi9vcGNvZGUucHkKKysrIGIvTGliL29wY29kZS5weQpAQCAtOCw2ICs4LDE5IEBACiAgICAgICAgICAgICJoYXNsb2NhbCIsICJoYXNjb21wYXJlIiwgImhhc2ZyZWUiLCAib3BuYW1lIiwgIm9wbWFwIiwKICAgICAgICAgICAgIkhBVkVfQVJHVU1FTlQiLCAiRVhURU5ERURfQVJHIiwgImhhc25hcmdzIl0KIAorIyBJdCdzIGEgY2hpY2tlbi1hbmQtZWdnIEknbSBhZnJhaWQ6CisjIFdlJ3JlIGltcG9ydGVkIGJlZm9yZSBfb3Bjb2RlJ3MgbWFkZS4KKyMgV2l0aCBleGNlcHRpb24gdW5oZWVkZWQKKyMgKHN0YWNrX2VmZmVjdCBpcyBub3QgbmVlZGVkKQorIyBCb3RoIG91ciBjaGlja2VucyBhbmQgZWdncyBhcmUgYWxsYXllZC4KKyMgICAgIC0tTGFycnkgSGFzdGluZ3MsIDIwMTMvMTEvMjMKKwordHJ5OgorICAgIGZyb20gX29wY29kZSBpbXBvcnQgc3RhY2tfZWZmZWN0CisgICAgX19hbGxfXy5hcHBlbmQoJ3N0YWNrX2VmZmVjdCcpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCiBjbXBfb3AgPSAoJzwnLCAnPD0nLCAnPT0nLCAnIT0nLCAnPicsICc+PScsICdpbicsICdub3QgaW4nLCAnaXMnLAogICAgICAgICAnaXMgbm90JywgJ2V4Y2VwdGlvbiBtYXRjaCcsICdCQUQnKQogCkBAIC04NCw3ICs5Nyw2IEBACiBkZWZfb3AoJ0JJTkFSWV9PUicsIDY2KQogZGVmX29wKCdJTlBMQUNFX1BPV0VSJywgNjcpCiBkZWZfb3AoJ0dFVF9JVEVSJywgNjgpCi1kZWZfb3AoJ1NUT1JFX0xPQ0FMUycsIDY5KQogCiBkZWZfb3AoJ1BSSU5UX0VYUFInLCA3MCkKIGRlZl9vcCgnTE9BRF9CVUlMRF9DTEFTUycsIDcxKQpAQCAtMTc5LDYgKzE5MSw5IEBACiBkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCiBkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKK2RlZl9vcCgnTE9BRF9DTEFTU0RFUkVGJywgMTQ4KQoraGFzZnJlZS5hcHBlbmQoMTQ4KQorCiBkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKIEVYVEVOREVEX0FSRyA9IDE0NAogCmRpZmYgLS1naXQgYS9MaWIvb3BlcmF0b3IucHkgYi9MaWIvb3BlcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxYTlhNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9vcGVyYXRvci5weQpAQCAtMCwwICsxLDQxMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitPcGVyYXRvciBJbnRlcmZhY2UKKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50cmluc2ljCitvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yLmFkZCh4LCB5KSBpcyBlcXVpdmFsZW50Cit0byB0aGUgZXhwcmVzc2lvbiB4K3kuICBUaGUgZnVuY3Rpb24gbmFtZXMgYXJlIHRob3NlIHVzZWQgZm9yIHNwZWNpYWwKK21ldGhvZHM7IHZhcmlhbnRzIHdpdGhvdXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgJ19fJyBhcmUgYWxzbyBwcm92aWRlZAorZm9yIGNvbnZlbmllbmNlLgorCitUaGlzIGlzIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ2FicycsICdhZGQnLCAnYW5kXycsICdhdHRyZ2V0dGVyJywgJ2NvbmNhdCcsICdjb250YWlucycsICdjb3VudE9mJywKKyAgICAgICAgICAgJ2RlbGl0ZW0nLCAnZXEnLCAnZmxvb3JkaXYnLCAnZ2UnLCAnZ2V0aXRlbScsICdndCcsICdpYWRkJywgJ2lhbmQnLAorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbW9kJywgJ2ltdWwnLCAnaW5kZXgnLAorICAgICAgICAgICAnaW5kZXhPZicsICdpbnYnLCAnaW52ZXJ0JywgJ2lvcicsICdpcG93JywgJ2lyc2hpZnQnLCAnaXNfJywKKyAgICAgICAgICAgJ2lzX25vdCcsICdpc3ViJywgJ2l0ZW1nZXR0ZXInLCAnaXRydWVkaXYnLCAnaXhvcicsICdsZScsCisgICAgICAgICAgICdsZW5ndGhfaGludCcsICdsc2hpZnQnLCAnbHQnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsICdtdWwnLCAnbmUnLAorICAgICAgICAgICAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywgJ3NldGl0ZW0nLCAnc3ViJywKKyAgICAgICAgICAgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KKworZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKKworCisjIENvbXBhcmlzb24gT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbHQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8IGIuIgorICAgIHJldHVybiBhIDwgYgorCitkZWYgbGUoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PSBiLiIKKyAgICByZXR1cm4gYSA8PSBiCisKK2RlZiBlcShhLCBiKToKKyAgICAiU2FtZSBhcyBhID09IGIuIgorICAgIHJldHVybiBhID09IGIKKworZGVmIG5lKGEsIGIpOgorICAgICJTYW1lIGFzIGEgIT0gYi4iCisgICAgcmV0dXJuIGEgIT0gYgorCitkZWYgZ2UoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PSBiLiIKKyAgICByZXR1cm4gYSA+PSBiCisKK2RlZiBndChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4gYi4iCisgICAgcmV0dXJuIGEgPiBiCisKKyMgTG9naWNhbCBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBub3RfKGEpOgorICAgICJTYW1lIGFzIG5vdCBhLiIKKyAgICByZXR1cm4gbm90IGEKKworZGVmIHRydXRoKGEpOgorICAgICJSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iCisgICAgcmV0dXJuIFRydWUgaWYgYSBlbHNlIEZhbHNlCisKK2RlZiBpc18oYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBiLiIKKyAgICByZXR1cm4gYSBpcyBiCisKK2RlZiBpc19ub3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBub3QgYi4iCisgICAgcmV0dXJuIGEgaXMgbm90IGIKKworIyBNYXRoZW1hdGljYWwvQml0d2lzZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGFicyhhKToKKyAgICAiU2FtZSBhcyBhYnMoYSkuIgorICAgIHJldHVybiBfYWJzKGEpCisKK2RlZiBhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIuIgorICAgIHJldHVybiBhICsgYgorCitkZWYgYW5kXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICYgYi4iCisgICAgcmV0dXJuIGEgJiBiCisKK2RlZiBmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vIGIuIgorICAgIHJldHVybiBhIC8vIGIKKworZGVmIGluZGV4KGEpOgorICAgICJTYW1lIGFzIGEuX19pbmRleF9fKCkuIgorICAgIHJldHVybiBhLl9faW5kZXhfXygpCisKK2RlZiBpbnYoYSk6CisgICAgIlNhbWUgYXMgfmEuIgorICAgIHJldHVybiB+YQoraW52ZXJ0ID0gaW52CisKK2RlZiBsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PCBiLiIKKyAgICByZXR1cm4gYSA8PCBiCisKK2RlZiBtb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlIGIuIgorICAgIHJldHVybiBhICUgYgorCitkZWYgbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiBiLiIKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIG5lZyhhKToKKyAgICAiU2FtZSBhcyAtYS4iCisgICAgcmV0dXJuIC1hCisKK2RlZiBvcl8oYSwgYik6CisgICAgIlNhbWUgYXMgYSB8IGIuIgorICAgIHJldHVybiBhIHwgYgorCitkZWYgcG9zKGEpOgorICAgICJTYW1lIGFzICthLiIKKyAgICByZXR1cm4gK2EKKworZGVmIHBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqIGIuIgorICAgIHJldHVybiBhICoqIGIKKworZGVmIHJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+IGIuIgorICAgIHJldHVybiBhID4+IGIKKworZGVmIHN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC0gYi4iCisgICAgcmV0dXJuIGEgLSBiCisKK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLyBiLiIKKyAgICByZXR1cm4gYSAvIGIKKworZGVmIHhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF4gYi4iCisgICAgcmV0dXJuIGEgXiBiCisKKyMgU2VxdWVuY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBjb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIHJldHVybiBhICsgYgorCitkZWYgY29udGFpbnMoYSwgYik6CisgICAgIlNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iCisgICAgcmV0dXJuIGIgaW4gYQorCitkZWYgY291bnRPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYiBvY2N1cnMgaW4gYS4iCisgICAgY291bnQgPSAwCisgICAgZm9yIGkgaW4gYToKKyAgICAgICAgaWYgaSA9PSBiOgorICAgICAgICAgICAgY291bnQgKz0gMQorICAgIHJldHVybiBjb3VudAorCitkZWYgZGVsaXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBkZWwgYVtiXS4iCisgICAgZGVsIGFbYl0KKworZGVmIGdldGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgYVtiXS4iCisgICAgcmV0dXJuIGFbYl0KKworZGVmIGluZGV4T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIKKyAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoYSk6CisgICAgICAgIGlmIGogPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VxdWVuY2UuaW5kZXgoeCk6IHggbm90IGluIHNlcXVlbmNlJykKKworZGVmIHNldGl0ZW0oYSwgYiwgYyk6CisgICAgIlNhbWUgYXMgYVtiXSA9IGMuIgorICAgIGFbYl0gPSBjCisKK2RlZiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCk6CisgICAgIiIiCisgICAgUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW4gaXRlcmFibGUuCisKKyAgICBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmUgZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5CisgICAgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgaW50ZWdlciA+PSAwLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIGludCk6CisgICAgICAgIG1zZyA9ICgiJyVzJyBvYmplY3QgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIiICUKKyAgICAgICAgICAgICAgIHR5cGUoZGVmYXVsdCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgaGludCA9IHR5cGUob2JqKS5fX2xlbmd0aF9oaW50X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICB0cnk6CisgICAgICAgIHZhbCA9IGhpbnQob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgdmFsIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgaW50KToKKyAgICAgICAgbXNnID0gKCdfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBpbnRlZ2VyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgIHR5cGUodmFsKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiB2YWwgPCAwOgorICAgICAgICBtc2cgPSAnX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwJworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICByZXR1cm4gdmFsCisKKyMgR2VuZXJhbGl6ZWQgTG9va3VwIE9iamVjdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2NsYXNzIGF0dHJnZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gYXR0cmlidXRlKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZS4KKyAgICBBZnRlciBnID0gYXR0cmdldHRlcignbmFtZScsICdkYXRlJyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoci5uYW1lLCByLmRhdGUpLgorICAgIEFmdGVyIGggPSBhdHRyZ2V0dGVyKCduYW1lLmZpcnN0JywgJ25hbWUubGFzdCcpLCB0aGUgY2FsbCBoKHIpIHJldHVybnMKKyAgICAoci5uYW1lLmZpcnN0LCByLm5hbWUubGFzdCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIsICphdHRycyk6CisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIsIHN0cik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKKyAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2V0dGVycyA9IHR1cGxlKG1hcChhdHRyZ2V0dGVyLCAoYXR0ciwpICsgYXR0cnMpKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoZ2V0dGVyKG9iaikgZm9yIGdldHRlciBpbiBnZXR0ZXJzKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIGl0ZW1nZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gaXRlbShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBpdGVtZ2V0dGVyKDIpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgclsyXS4KKyAgICBBZnRlciBnID0gaXRlbWdldHRlcigyLCA1LCAzKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyWzJdLCByWzVdLCByWzNdKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCAqaXRlbXMpOgorICAgICAgICBpZiBub3QgaXRlbXM6CisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtLCkgKyBpdGVtcworICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2ldIGZvciBpIGluIGl0ZW1zKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIG1ldGhvZGNhbGxlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZSgpLgorICAgIEFmdGVyIGcgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZGF0ZScsIGZvbz0xKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zCisgICAgci5uYW1lKCdkYXRlJywgZm9vPTEpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgICAgICBtc2cgPSAibWV0aG9kY2FsbGVyIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhlIG1ldGhvZCBuYW1lIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fbmFtZSA9IGFyZ3NbMV0KKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3NbMjpdCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgc2VsZi5fbmFtZSkoKnNlbGYuX2FyZ3MsICoqc2VsZi5fa3dhcmdzKQorCisjIEluLXBsYWNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgaWFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIuIgorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpYW5kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJj0gYi4iCisgICAgYSAmPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGljb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy89IGIuIgorICAgIGEgLy89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8PSBiLiIKKyAgICBhIDw8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlPSBiLiIKKyAgICBhICU9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICo9IGIuIgorICAgIGEgKj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpb3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSB8PSBiLiIKKyAgICBhIHw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqPSBiLiIKKyAgICBhICoqPWIKKyAgICByZXR1cm4gYQorCitkZWYgaXJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+PSBiLiIKKyAgICBhID4+PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtPSBiLiIKKyAgICBhIC09IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvPSBiLiIKKyAgICBhIC89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF49IGIuIgorICAgIGEgXj0gYgorICAgIHJldHVybiBhCisKKwordHJ5OgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgX19kb2NfXworCisjIEFsbCBvZiB0aGVzZSAiX19mdW5jX18gPSBmdW5jIiBhc3NpZ25tZW50cyBoYXZlIHRvIGhhcHBlbiBhZnRlciBpbXBvcnRpbmcKKyMgZnJvbSBfb3BlcmF0b3IgdG8gbWFrZSBzdXJlIHRoZXkncmUgc2V0IHRvIHRoZSByaWdodCBmdW5jdGlvbgorX19sdF9fID0gbHQKK19fbGVfXyA9IGxlCitfX2VxX18gPSBlcQorX19uZV9fID0gbmUKK19fZ2VfXyA9IGdlCitfX2d0X18gPSBndAorX19ub3RfXyA9IG5vdF8KK19fYWJzX18gPSBhYnMKK19fYWRkX18gPSBhZGQKK19fYW5kX18gPSBhbmRfCitfX2Zsb29yZGl2X18gPSBmbG9vcmRpdgorX19pbmRleF9fID0gaW5kZXgKK19faW52X18gPSBpbnYKK19faW52ZXJ0X18gPSBpbnZlcnQKK19fbHNoaWZ0X18gPSBsc2hpZnQKK19fbW9kX18gPSBtb2QKK19fbXVsX18gPSBtdWwKK19fbmVnX18gPSBuZWcKK19fb3JfXyA9IG9yXworX19wb3NfXyA9IHBvcworX19wb3dfXyA9IHBvdworX19yc2hpZnRfXyA9IHJzaGlmdAorX19zdWJfXyA9IHN1YgorX190cnVlZGl2X18gPSB0cnVlZGl2CitfX3hvcl9fID0geG9yCitfX2NvbmNhdF9fID0gY29uY2F0CitfX2NvbnRhaW5zX18gPSBjb250YWlucworX19kZWxpdGVtX18gPSBkZWxpdGVtCitfX2dldGl0ZW1fXyA9IGdldGl0ZW0KK19fc2V0aXRlbV9fID0gc2V0aXRlbQorX19pYWRkX18gPSBpYWRkCitfX2lhbmRfXyA9IGlhbmQKK19faWNvbmNhdF9fID0gaWNvbmNhdAorX19pZmxvb3JkaXZfXyA9IGlmbG9vcmRpdgorX19pbHNoaWZ0X18gPSBpbHNoaWZ0CitfX2ltb2RfXyA9IGltb2QKK19faW11bF9fID0gaW11bAorX19pb3JfXyA9IGlvcgorX19pcG93X18gPSBpcG93CitfX2lyc2hpZnRfXyA9IGlyc2hpZnQKK19faXN1Yl9fID0gaXN1YgorX19pdHJ1ZWRpdl9fID0gaXRydWVkaXYKK19faXhvcl9fID0gaXhvcgpkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDg3Njg5Y2MuLmU5ODgwYTEgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTEsOSArMSw5IEBACiByIiIiT1Mgcm91dGluZXMgZm9yIE1hYywgTlQsIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjU2LDEwICsyMzIsOSBAQAogICAgIGlmIGhlYWQgYW5kIHRhaWwgYW5kIG5vdCBwYXRoLmV4aXN0cyhoZWFkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcnMoaGVhZCwgbW9kZSwgZXhpc3Rfb2spCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICAjIGJlIGhhcHB5IGlmIHNvbWVvbmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBwYXRoCi0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcGFzcwogICAgICAgICBjZGlyID0gY3VyZGlyCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFpbCwgYnl0ZXMpOgogICAgICAgICAgICAgY2RpciA9IGJ5dGVzKGN1cmRpciwgJ0FTQ0lJJykKQEAgLTMwMiw3ICsyNzcsNyBAQAogICAgIHdoaWxlIGhlYWQgYW5kIHRhaWw6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJtZGlyKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBoZWFkLCB0YWlsID0gcGF0aC5zcGxpdChoZWFkKQogCkBAIC0zMjksNyArMzA0LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zNjUsNyArMzQwLDcgQEAKIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM5OSwxMCArMzc0LDEwIEBACiAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAogICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCiAgICAgdHJ5OgotICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGFuZCBlcnJvciBhcmUgZ2xvYmFscyBpbiB0aGlzIG1vZHVsZSBkdWUKKyAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBpcyBnbG9iYWwgaW4gdGhpcyBtb2R1bGUgZHVlCiAgICAgICAgICMgdG8gZWFybGllciBpbXBvcnQtKi4KICAgICAgICAgbmFtZXMgPSBsaXN0ZGlyKHRvcCkKLSAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICByZXR1cm4KQEAgLTUwNCw3ICs0NzksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9yaWdfc3QgPSBzdGF0KG5hbWUsIGRpcl9mZD10b3BmZCwgZm9sbG93X3N5bWxpbmtzPWZvbGxvd19zeW1saW5rcykKICAgICAgICAgICAgICAgICBkaXJmZCA9IG9wZW4obmFtZSwgT19SRE9OTFksIGRpcl9mZD10b3BmZCkKLSAgICAgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC01OTksNyArNTc0LDcgQEAKICAgICAgICAgZnVsbG5hbWUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjX2Z1bmMoZnVsbG5hbWUsICphcmdyZXN0KQotICAgICAgICBleGNlcHQgZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGxhc3RfZXhjID0gZQogICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQogICAgICAgICAgICAgaWYgKGUuZXJybm8gIT0gZXJybm8uRU5PRU5UIGFuZCBlLmVycm5vICE9IGVycm5vLkVOT1RESVIKQEAgLTY1Niw3ICs2MzEsNyBAQAogCiAKICMgQ2hhbmdlIGVudmlyb24gdG8gYXV0b21hdGljYWxseSBjYWxsIHB1dGVudigpLCB1bnNldGVudiBpZiB0aGV5IGV4aXN0LgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCiAKIGNsYXNzIF9FbnZpcm9uKE11dGFibGVNYXBwaW5nKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZW5jb2Rla2V5LCBkZWNvZGVrZXksIGVuY29kZXZhbHVlLCBkZWNvZGV2YWx1ZSwgcHV0ZW52LCB1bnNldGVudik6CkBAIC03MTYsMTcgKzY5MSwxOSBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfcHV0ZW52ID0gbGFtYmRhIGtleSwgdmFsdWU6IE5vbmUKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCisgICAgaWYgInB1dGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQogCiB0cnk6CiAgICAgX3Vuc2V0ZW52ID0gdW5zZXRlbnYKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3Vuc2V0ZW52ID0gbGFtYmRhIGtleTogX3B1dGVudihrZXksICIiKQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQorICAgIGlmICJ1bnNldGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCiAKIGRlZiBfY3JlYXRlZW52aXJvbigpOgotICAgIGlmIG5hbWUgaW4gKCdvczInLCAnbnQnKToKKyAgICBpZiBuYW1lID09ICdudCc6CiAgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQogICAgICAgICBkZWYgY2hlY2tfc3RyKHZhbHVlKToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgpAQCAtNzY2LDcgKzc0Myw3IEBACiAgICAga2V5LCBkZWZhdWx0IGFuZCB0aGUgcmVzdWx0IGFyZSBzdHIuIiIiCiAgICAgcmV0dXJuIGVudmlyb24uZ2V0KGtleSwgZGVmYXVsdCkKIAotc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IG5hbWUgbm90IGluICgnb3MyJywgJ250JykKK3N1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSAobmFtZSAhPSAnbnQnKQogX19hbGxfXy5leHRlbmQoKCJnZXRlbnYiLCAic3VwcG9ydHNfYnl0ZXNfZW52aXJvbiIpKQogCiBpZiBzdXBwb3J0c19ieXRlc19lbnZpcm9uOgpAQCAtODY1LDcgKzg0Miw3IEBACiAgICAgICAgICAgICAgICAgZWxpZiBXSUZFWElURUQoc3RzKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQogCiAgICAgZGVmIHNwYXdudihtb2RlLCBmaWxlLCBhcmdzKToKICAgICAgICAgIiIic3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpIC0+IGludGVnZXIKQEAgLTkwOCw2ICs4ODUsMTAgQEAKIG90aGVyd2lzZSByZXR1cm4gLVNJRywgd2hlcmUgU0lHIGlzIHRoZSBzaWduYWwgdGhhdCBraWxsZWQgaXQuICIiIgogICAgICAgICByZXR1cm4gX3NwYXdudmVmKG1vZGUsIGZpbGUsIGFyZ3MsIGVudiwgZXhlY3ZwZSkKIAorCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bnZwIiwgInNwYXdudnBlIl0pCisKKwogaWYgX2V4aXN0cygic3Bhd252Iik6CiAgICAgIyBUaGVzZSBhcmVuJ3Qgc3VwcGxpZWQgYnkgdGhlIGJhc2ljIFdpbmRvd3MgY29kZQogICAgICMgYnV0IGNhbiBiZSBlYXNpbHkgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCkBAIC05MzMsNyArOTE0LDcgQEAKICAgICAgICAgcmV0dXJuIHNwYXdudmUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd25sIiwgInNwYXdubGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmwiLCAic3Bhd25sZSJdKQogCiAKIGlmIF9leGlzdHMoInNwYXdudnAiKToKQEAgLTk2MSwzNCArOTQyLDggQEAKICAgICAgICAgcmV0dXJuIHNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudnAiLCAic3Bhd252cGUiLCAic3Bhd25scCIsICJzcGF3bmxwZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubHAiLCAic3Bhd25scGUiXSkKIAotaW1wb3J0IGNvcHlyZWcgYXMgX2NvcHlyZWcKLQotZGVmIF9tYWtlX3N0YXRfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXRfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdF9yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdF9yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdF9yZXN1bHQsIF9waWNrbGVfc3RhdF9yZXN1bHQsIF9tYWtlX3N0YXRfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0X3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwotCi1kZWYgX21ha2Vfc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0dmZzX3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0dmZzX3Jlc3VsdCwgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0dmZzX3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwogCiAjIFN1cHBseSBvcy5wb3BlbigpCiBkZWYgcG9wZW4oY21kLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xKToKZGlmZiAtLWdpdCBhL0xpYi9vczJlbXhwYXRoLnB5IGIvTGliL29zMmVteHBhdGgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2JmOGEuLjAwMDAwMDAKLS0tIGEvTGliL29zMmVteHBhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyBNb2R1bGUgJ29zMmVteHBhdGgnIC0tIGNvbW1vbiBvcGVyYXRpb25zIG9uIE9TLzIgcGF0aG5hbWVzCi0iIiJDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9ucywgT1MvMiBFTVggdmVyc2lvbi4KLQotSW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGltcG9ydCBvcyBhbmQgcmVmZXIgdG8gdGhpcwotbW9kdWxlIGFzIG9zLnBhdGguCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgotZnJvbSBudHBhdGggaW1wb3J0IChleHBhbmR1c2VyLCBleHBhbmR2YXJzLCBpc2FicywgaXNsaW5rLCBzcGxpdGRyaXZlLAotICAgICAgICAgICAgICAgICAgICBzcGxpdGV4dCwgc3BsaXQpCi0KLV9fYWxsX18gPSBbIm5vcm1jYXNlIiwiaXNhYnMiLCJqb2luIiwic3BsaXRkcml2ZSIsInNwbGl0Iiwic3BsaXRleHQiLAotICAgICAgICAgICAiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY29tbW9ucHJlZml4IiwiZ2V0c2l6ZSIsImdldG10aW1lIiwKLSAgICAgICAgICAgImdldGF0aW1lIiwiZ2V0Y3RpbWUiLCAiaXNsaW5rIiwiZXhpc3RzIiwibGV4aXN0cyIsImlzZGlyIiwiaXNmaWxlIiwKLSAgICAgICAgICAgImlzbW91bnQiLCJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCi0gICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKLSAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIl0KLQotIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKLWN1cmRpciA9ICcuJwotcGFyZGlyID0gJy4uJwotZXh0c2VwID0gJy4nCi1zZXAgPSAnLycKLWFsdHNlcCA9ICdcXCcKLXBhdGhzZXAgPSAnOycKLWRlZnBhdGggPSAnLjtDOlxcYmluJwotZGV2bnVsbCA9ICdudWwnCi0KLSMgTm9ybWFsaXplIHRoZSBjYXNlIG9mIGEgcGF0aG5hbWUgYW5kIG1hcCBzbGFzaGVzIHRvIGJhY2tzbGFzaGVzLgotIyBPdGhlciBub3JtYWxpemF0aW9ucyAoc3VjaCBhcyBvcHRpbWl6aW5nICcuLi8nIGF3YXkpIGFyZSBub3QgZG9uZQotIyAodGhpcyBpcyBkb25lIGJ5IG5vcm1wYXRoKS4KLQotZGVmIG5vcm1jYXNlKHMpOgotICAgICIiIk5vcm1hbGl6ZSBjYXNlIG9mIHBhdGhuYW1lLgotCi0gICAgTWFrZXMgYWxsIGNoYXJhY3RlcnMgbG93ZXJjYXNlIGFuZCBhbGwgYWx0c2VwcyBpbnRvIHNlcHMuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCi0gICAgcmV0dXJuIHMucmVwbGFjZSgnXFwnLCAnLycpLmxvd2VyKCkKLQotCi0jIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KLQotZGVmIGpvaW4oYSwgKnApOgotICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cywgaW5zZXJ0aW5nIHNlcCBhcyBuZWVkZWQiIiIKLSAgICBwYXRoID0gYQotICAgIGZvciBiIGluIHA6Ci0gICAgICAgIGlmIGlzYWJzKGIpOgotICAgICAgICAgICAgcGF0aCA9IGIKLSAgICAgICAgZWxpZiBwYXRoID09ICcnIG9yIHBhdGhbLTE6XSBpbiAnL1xcOic6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArIGIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgJy8nICsgYgotICAgIHJldHVybiBwYXRoCi0KLQotIyBQYXJzZSBVTkMgcGF0aHMKLWRlZiBzcGxpdHVuYyhwKToKLSAgICAiIiJTcGxpdCBhIHBhdGhuYW1lIGludG8gVU5DIG1vdW50IHBvaW50IGFuZCByZWxhdGl2ZSBwYXRoIHNwZWNpZmllcnMuCi0KLSAgICBSZXR1cm4gYSAyLXR1cGxlICh1bmMsIHJlc3QpOyBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuCi0gICAgSWYgdW5jIGlzIG5vdCBlbXB0eSwgaXQgaGFzIHRoZSBmb3JtICcvL2hvc3QvbW91bnQnIChvciBzaW1pbGFyCi0gICAgdXNpbmcgYmFja3NsYXNoZXMpLiAgdW5jK3Jlc3QgaXMgYWx3YXlzIHRoZSBpbnB1dCBwYXRoLgotICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGFuIFVOQyBwYXJ0LgotICAgICIiIgotICAgIGlmIHBbMToyXSA9PSAnOic6Ci0gICAgICAgIHJldHVybiAnJywgcCAjIERyaXZlIGxldHRlciBwcmVzZW50Ci0gICAgZmlyc3RUd28gPSBwWzA6Ml0KLSAgICBpZiBmaXJzdFR3byA9PSAnLycgKiAyIG9yIGZpcnN0VHdvID09ICdcXCcgKiAyOgotICAgICAgICAjIGlzIGEgVU5DIHBhdGg6Ci0gICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgZXF1aXZhbGVudCB0byBkcml2ZSBsZXR0ZXIKLSAgICAgICAgIyBcXG1hY2hpbmVcbW91bnRwb2ludFxkaXJlY3Rvcmllcy4uLgotICAgICAgICAjICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl5eCi0gICAgICAgIG5vcm1wID0gbm9ybWNhc2UocCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgMikKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICAjI3JhaXNlIFJ1bnRpbWVFcnJvciwgJ2lsbGVnYWwgVU5DIHBhdGg6ICInICsgcCArICciJwotICAgICAgICAgICAgcmV0dXJuICgiIiwgcCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgaW5kZXggKyAxKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgIGluZGV4ID0gbGVuKHApCi0gICAgICAgIHJldHVybiBwWzppbmRleF0sIHBbaW5kZXg6XQotICAgIHJldHVybiAnJywgcAotCi0KLSMgUmV0dXJuIHRoZSB0YWlsIChiYXNlbmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBiYXNlbmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVsxXQotCi0KLSMgUmV0dXJuIHRoZSBoZWFkIChkaXJuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGRpcm5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzBdCi0KLQotIyBhbGlhcyBleGlzdHMgdG8gbGV4aXN0cwotbGV4aXN0cyA9IGV4aXN0cwotCi0KLSMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PwotCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQotZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCi0gICAgdW5jLCByZXN0ID0gc3BsaXR1bmMocGF0aCkKLSAgICBpZiB1bmM6Ci0gICAgICAgIHJldHVybiByZXN0IGluICgiIiwgIi8iLCAiXFwiKQotICAgIHAgPSBzcGxpdGRyaXZlKHBhdGgpWzFdCi0gICAgcmV0dXJuIGxlbihwKSA9PSAxIGFuZCBwWzBdIGluICcvXFwnCi0KLQotIyBOb3JtYWxpemUgYSBwYXRoLCBlLmcuIEEvL0IsIEEvLi9CIGFuZCBBL2Zvby8uLi9CIGFsbCBiZWNvbWUgQS9CLgotCi1kZWYgbm9ybXBhdGgocGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHBhdGgsIGVsaW1pbmF0aW5nIGRvdWJsZSBzbGFzaGVzLCBldGMuIiIiCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0gICAgcHJlZml4LCBwYXRoID0gc3BsaXRkcml2ZShwYXRoKQotICAgIHdoaWxlIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgJy8nCi0gICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgIGNvbXBzID0gcGF0aC5zcGxpdCgnLycpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbGVuKGNvbXBzKToKLSAgICAgICAgaWYgY29tcHNbaV0gPT0gJy4nOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJy4uJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gbm90IGluICgnJywgJy4uJyk6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaS0xOmkrMV0KLSAgICAgICAgICAgIGkgPSBpIC0gMQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcnIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSAhPSAnJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgIyBJZiB0aGUgcGF0aCBpcyBub3cgZW1wdHksIHN1YnN0aXR1dGUgJy4nCi0gICAgaWYgbm90IHByZWZpeCBhbmQgbm90IGNvbXBzOgotICAgICAgICBjb21wcy5hcHBlbmQoJy4nKQotICAgIHJldHVybiBwcmVmaXggKyAnLycuam9pbihjb21wcykKLQotCi0jIFJldHVybiBhbiBhYnNvbHV0ZSBwYXRoLgotZGVmIGFic3BhdGgocGF0aCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSB2ZXJzaW9uIG9mIGEgcGF0aCIiIgotICAgIGlmIG5vdCBpc2FicyhwYXRoKToKLSAgICAgICAgcGF0aCA9IGpvaW4ob3MuZ2V0Y3dkKCksIHBhdGgpCi0gICAgcmV0dXJuIG5vcm1wYXRoKHBhdGgpCi0KLSMgcmVhbHBhdGggaXMgYSBuby1vcCBvbiBzeXN0ZW1zIHdpdGhvdXQgaXNsaW5rIHN1cHBvcnQKLXJlYWxwYXRoID0gYWJzcGF0aAotCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvcGF0aGxpYi5weSBiL0xpYi9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2VjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvcGF0aGxpYi5weQpAQCAtMCwwICsxLDEyODQgQEAKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KK2ltcG9ydCBudHBhdGgKK2ltcG9ydCBvcworaW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZworCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZSwgZGVmYXVsdGRpY3QKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2Zyb20gZXJybm8gaW1wb3J0IEVJTlZBTCwgRU5PRU5UCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGNvdW50Citmcm9tIG9wZXJhdG9yIGltcG9ydCBhdHRyZ2V0dGVyCitmcm9tIHN0YXQgaW1wb3J0IFNfSVNESVIsIFNfSVNMTkssIFNfSVNSRUcsIFNfSVNTT0NLLCBTX0lTQkxLLCBTX0lTQ0hSLCBTX0lTRklGTworZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlIGFzIHVybHF1b3RlLCBxdW90ZV9mcm9tX2J5dGVzIGFzIHVybHF1b3RlX2Zyb21fYnl0ZXMKKworCitzdXBwb3J0c19zeW1saW5rcyA9IFRydWUKK3RyeToKKyAgICBpbXBvcnQgbnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBudCA9IE5vbmUKK2Vsc2U6CisgICAgaWYgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbOjJdID49ICg2LCAwKToKKyAgICAgICAgZnJvbSBudCBpbXBvcnQgX2dldGZpbmFscGF0aG5hbWUKKyAgICBlbHNlOgorICAgICAgICBzdXBwb3J0c19zeW1saW5rcyA9IEZhbHNlCisgICAgICAgIF9nZXRmaW5hbHBhdGhuYW1lID0gTm9uZQorCisKK19fYWxsX18gPSBbCisgICAgIlB1cmVQYXRoIiwgIlB1cmVQb3NpeFBhdGgiLCAiUHVyZVdpbmRvd3NQYXRoIiwKKyAgICAiUGF0aCIsICJQb3NpeFBhdGgiLCAiV2luZG93c1BhdGgiLAorICAgIF0KKworIworIyBJbnRlcm5hbHMKKyMKKworZGVmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgIyBXaGV0aGVyIHRoaXMgcGF0dGVybiBuZWVkcyBhY3R1YWwgbWF0Y2hpbmcgdXNpbmcgZm5tYXRjaCwgb3IgY2FuCisgICAgIyBiZSBsb29rZWQgdXAgZGlyZWN0bHkgYXMgYSBmaWxlLgorICAgIHJldHVybiAiKiIgaW4gcGF0IG9yICI/IiBpbiBwYXQgb3IgIlsiIGluIHBhdAorCisKK2NsYXNzIF9GbGF2b3VyKG9iamVjdCk6CisgICAgIiIiQSBmbGF2b3VyIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIChwbGF0Zm9ybS1zcGVjaWZpYykgc2V0IG9mIHBhdGgKKyAgICBzZW1hbnRpY3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuam9pbiA9IHNlbGYuc2VwLmpvaW4KKworICAgIGRlZiBwYXJzZV9wYXJ0cyhzZWxmLCBwYXJ0cyk6CisgICAgICAgIHBhcnNlZCA9IFtdCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIGFsdHNlcCA9IHNlbGYuYWx0c2VwCisgICAgICAgIGRydiA9IHJvb3QgPSAnJworICAgICAgICBpdCA9IHJldmVyc2VkKHBhcnRzKQorICAgICAgICBmb3IgcGFydCBpbiBpdDoKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQucmVwbGFjZShhbHRzZXAsIHNlcCkKKyAgICAgICAgICAgIGRydiwgcm9vdCwgcmVsID0gc2VsZi5zcGxpdHJvb3QocGFydCkKKyAgICAgICAgICAgIGlmIHNlcCBpbiByZWw6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gcmV2ZXJzZWQocmVsLnNwbGl0KHNlcCkpOgorICAgICAgICAgICAgICAgICAgICBpZiB4IGFuZCB4ICE9ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoc3lzLmludGVybih4KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmVsIGFuZCByZWwgIT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKHN5cy5pbnRlcm4ocmVsKSkKKyAgICAgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgICAgIGlmIG5vdCBkcnY6CisgICAgICAgICAgICAgICAgICAgICMgSWYgbm8gZHJpdmUgaXMgcHJlc2VudCwgdHJ5IHRvIGZpbmQgb25lIGluIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAjIHBhcnRzLiBUaGlzIG1ha2VzIHRoZSByZXN1bHQgb2YgcGFyc2luZyBlLmcuCisgICAgICAgICAgICAgICAgICAgICMgKCJDOiIsICIvIiwgImEiKSByZWFzb25hYmx5IGludHVpdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBzZWxmLnNwbGl0cm9vdChwYXJ0KVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZHJ2OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKGRydiArIHJvb3QpCisgICAgICAgIHBhcnNlZC5yZXZlcnNlKCkKKyAgICAgICAgcmV0dXJuIGRydiwgcm9vdCwgcGFyc2VkCisKKyAgICBkZWYgam9pbl9wYXJzZWRfcGFydHMoc2VsZiwgZHJ2LCByb290LCBwYXJ0cywgZHJ2Miwgcm9vdDIsIHBhcnRzMik6CisgICAgICAgICIiIgorICAgICAgICBKb2luIHRoZSB0d28gcGF0aHMgcmVwcmVzZW50ZWQgYnkgdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgKGRyaXZlLCByb290LCBwYXJ0cykgdHVwbGVzLiAgUmV0dXJuIGEgbmV3IChkcml2ZSwgcm9vdCwgcGFydHMpIHR1cGxlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcm9vdDI6CisgICAgICAgICAgICBwYXJ0cyA9IHBhcnRzMgorICAgICAgICAgICAgcm9vdCA9IHJvb3QyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJ0cyA9IHBhcnRzICsgcGFydHMyCisgICAgICAgICMgWFhYIHJhaXNlIGVycm9yIGlmIGRydiBhbmQgZHJ2MiBhcmUgZGlmZmVyZW50PworICAgICAgICByZXR1cm4gZHJ2MiBvciBkcnYsIHJvb3QsIHBhcnRzCisKKworY2xhc3MgX1dpbmRvd3NGbGF2b3VyKF9GbGF2b3VyKToKKyAgICAjIFJlZmVyZW5jZSBmb3IgV2luZG93cyBwYXRocyBjYW4gYmUgZm91bmQgYXQKKyAgICAjIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM2NTI0NyUyOHY9dnMuODUlMjkuYXNweAorCisgICAgc2VwID0gJ1xcJworICAgIGFsdHNlcCA9ICcvJworICAgIGhhc19kcnYgPSBUcnVlCisgICAgcGF0aG1vZCA9IG50cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG50IGlzIG5vdCBOb25lKQorCisgICAgZHJpdmVfbGV0dGVycyA9ICgKKyAgICAgICAgc2V0KGNocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykgKyAxKSkgfAorICAgICAgICBzZXQoY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSArIDEpKQorICAgICkKKyAgICBleHRfbmFtZXNwYWNlX3ByZWZpeCA9ICdcXFxcP1xcJworCisgICAgcmVzZXJ2ZWRfbmFtZXMgPSAoCisgICAgICAgIHsnQ09OJywgJ1BSTicsICdBVVgnLCAnTlVMJ30gfAorICAgICAgICB7J0NPTSVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoMSwgMTApfSB8CisgICAgICAgIHsnTFBUJWQnICUgaSBmb3IgaSBpbiByYW5nZSgxLCAxMCl9CisgICAgICAgICkKKworICAgICMgSW50ZXJlc3RpbmcgZmluZGluZ3MgYWJvdXQgZXh0ZW5kZWQgcGF0aHM6CisgICAgIyAtICdcXD9cYzpcYScsICcvLz8vYzpcYScgYW5kICcvLz8vYzovYScgYXJlIGFsbCBzdXBwb3J0ZWQKKyAgICAjICAgYnV0ICdcXD9cYzovYScgaXMgbm90CisgICAgIyAtIGV4dGVuZGVkIHBhdGhzIGFyZSBhbHdheXMgYWJzb2x1dGU7ICJyZWxhdGl2ZSIgZXh0ZW5kZWQgcGF0aHMgd2lsbAorICAgICMgICBmYWlsLgorCisgICAgZGVmIHNwbGl0cm9vdChzZWxmLCBwYXJ0LCBzZXA9c2VwKToKKyAgICAgICAgZmlyc3QgPSBwYXJ0WzA6MV0KKyAgICAgICAgc2Vjb25kID0gcGFydFsxOjJdCisgICAgICAgIGlmIChzZWNvbmQgPT0gc2VwIGFuZCBmaXJzdCA9PSBzZXApOgorICAgICAgICAgICAgIyBYWFggZXh0ZW5kZWQgcGF0aHMgc2hvdWxkIGFsc28gZGlzYWJsZSB0aGUgY29sbGFwc2luZyBvZiAiLiIKKyAgICAgICAgICAgICMgY29tcG9uZW50cyAoYWNjb3JkaW5nIHRvIE1TRE4gZG9jcykuCisgICAgICAgICAgICBwcmVmaXgsIHBhcnQgPSBzZWxmLl9zcGxpdF9leHRlbmRlZF9wYXRoKHBhcnQpCisgICAgICAgICAgICBmaXJzdCA9IHBhcnRbMDoxXQorICAgICAgICAgICAgc2Vjb25kID0gcGFydFsxOjJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSAnJworICAgICAgICB0aGlyZCA9IHBhcnRbMjozXQorICAgICAgICBpZiAoc2Vjb25kID09IHNlcCBhbmQgZmlyc3QgPT0gc2VwIGFuZCB0aGlyZCAhPSBzZXApOgorICAgICAgICAgICAgIyBpcyBhIFVOQyBwYXRoOgorICAgICAgICAgICAgIyB2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgcm9vdAorICAgICAgICAgICAgIyBcXG1hY2hpbmVcbW91bnRwb2ludFxkaXJlY3RvcnlcZXRjXC4uLgorICAgICAgICAgICAgIyAgICAgICAgICAgIGRpcmVjdG9yeSBeXl5eXl5eXl5eXl5eXgorICAgICAgICAgICAgaW5kZXggPSBwYXJ0LmZpbmQoc2VwLCAyKQorICAgICAgICAgICAgaWYgaW5kZXggIT0gLTE6CisgICAgICAgICAgICAgICAgaW5kZXgyID0gcGFydC5maW5kKHNlcCwgaW5kZXggKyAxKQorICAgICAgICAgICAgICAgICMgYSBVTkMgcGF0aCBjYW4ndCBoYXZlIHR3byBzbGFzaGVzIGluIGEgcm93CisgICAgICAgICAgICAgICAgIyAoYWZ0ZXIgdGhlIGluaXRpYWwgdHdvKQorICAgICAgICAgICAgICAgIGlmIGluZGV4MiAhPSBpbmRleCArIDE6CisgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4MiA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4MiA9IGxlbihwYXJ0KQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgcGFydFsxOmluZGV4Ml0sIHNlcCwgcGFydFtpbmRleDIrMTpdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydFs6aW5kZXgyXSwgc2VwLCBwYXJ0W2luZGV4MisxOl0KKyAgICAgICAgZHJ2ID0gcm9vdCA9ICcnCisgICAgICAgIGlmIHNlY29uZCA9PSAnOicgYW5kIGZpcnN0IGluIHNlbGYuZHJpdmVfbGV0dGVyczoKKyAgICAgICAgICAgIGRydiA9IHBhcnRbOjJdCisgICAgICAgICAgICBwYXJ0ID0gcGFydFsyOl0KKyAgICAgICAgICAgIGZpcnN0ID0gdGhpcmQKKyAgICAgICAgaWYgZmlyc3QgPT0gc2VwOgorICAgICAgICAgICAgcm9vdCA9IGZpcnN0CisgICAgICAgICAgICBwYXJ0ID0gcGFydC5sc3RyaXAoc2VwKQorICAgICAgICByZXR1cm4gcHJlZml4ICsgZHJ2LCByb290LCBwYXJ0CisKKyAgICBkZWYgY2FzZWZvbGQoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBzLmxvd2VyKCkKKworICAgIGRlZiBjYXNlZm9sZF9wYXJ0cyhzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBbcC5sb3dlcigpIGZvciBwIGluIHBhcnRzXQorCisgICAgZGVmIHJlc29sdmUoc2VsZiwgcGF0aCk6CisgICAgICAgIHMgPSBzdHIocGF0aCkKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKKyAgICAgICAgaWYgX2dldGZpbmFscGF0aG5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXh0X3RvX25vcm1hbChfZ2V0ZmluYWxwYXRobmFtZShzKSkKKyAgICAgICAgIyBNZWFucyBmYWxsYmFjayBvbiBhYnNvbHV0ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9zcGxpdF9leHRlbmRlZF9wYXRoKHNlbGYsIHMsIGV4dF9wcmVmaXg9ZXh0X25hbWVzcGFjZV9wcmVmaXgpOgorICAgICAgICBwcmVmaXggPSAnJworICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoZXh0X3ByZWZpeCk6CisgICAgICAgICAgICBwcmVmaXggPSBzWzo0XQorICAgICAgICAgICAgcyA9IHNbNDpdCisgICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoJ1VOQ1xcJyk6CisgICAgICAgICAgICAgICAgcHJlZml4ICs9IHNbOjNdCisgICAgICAgICAgICAgICAgcyA9ICdcXCcgKyBzWzM6XQorICAgICAgICByZXR1cm4gcHJlZml4LCBzCisKKyAgICBkZWYgX2V4dF90b19ub3JtYWwoc2VsZiwgcyk6CisgICAgICAgICMgVHVybiBiYWNrIGFuIGV4dGVuZGVkIHBhdGggaW50byBhIG5vcm1hbCBET1MtbGlrZSBwYXRoCisgICAgICAgIHJldHVybiBzZWxmLl9zcGxpdF9leHRlbmRlZF9wYXRoKHMpWzFdCisKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZiwgcGFydHMpOgorICAgICAgICAjIE5PVEU6IHRoZSBydWxlcyBmb3IgcmVzZXJ2ZWQgbmFtZXMgc2VlbSBzb21ld2hhdCBjb21wbGljYXRlZAorICAgICAgICAjIChlLmcuIHIiLi5cTlVMIiBpcyByZXNlcnZlZCBidXQgbm90IHIiZm9vXE5VTCIpLgorICAgICAgICAjIFdlIGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uIGFuZCByZXR1cm4gVHJ1ZSBmb3IgcGF0aHMgd2hpY2ggYXJlCisgICAgICAgICMgbm90IGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYnkgV2luZG93cy4KKyAgICAgICAgaWYgbm90IHBhcnRzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHBhcnRzWzBdLnN0YXJ0c3dpdGgoJ1xcXFwnKToKKyAgICAgICAgICAgICMgVU5DIHBhdGhzIGFyZSBuZXZlciByZXNlcnZlZAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBwYXJ0c1stMV0ucGFydGl0aW9uKCcuJylbMF0udXBwZXIoKSBpbiBzZWxmLnJlc2VydmVkX25hbWVzCisKKyAgICBkZWYgbWFrZV91cmkoc2VsZiwgcGF0aCk6CisgICAgICAgICMgVW5kZXIgV2luZG93cywgZmlsZSBVUklzIHVzZSB0aGUgVVRGLTggZW5jb2RpbmcuCisgICAgICAgIGRyaXZlID0gcGF0aC5kcml2ZQorICAgICAgICBpZiBsZW4oZHJpdmUpID09IDIgYW5kIGRyaXZlWzFdID09ICc6JzoKKyAgICAgICAgICAgICMgSXQncyBhIHBhdGggb24gYSBsb2NhbCBkcml2ZSA9PiAnZmlsZTovLy9jOi9hL2InCisgICAgICAgICAgICByZXN0ID0gcGF0aC5hc19wb3NpeCgpWzI6XS5sc3RyaXAoJy8nKQorICAgICAgICAgICAgcmV0dXJuICdmaWxlOi8vLyVzLyVzJyAlICgKKyAgICAgICAgICAgICAgICBkcml2ZSwgdXJscXVvdGVfZnJvbV9ieXRlcyhyZXN0LmVuY29kZSgndXRmLTgnKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEl0J3MgYSBwYXRoIG9uIGEgbmV0d29yayBkcml2ZSA9PiAnZmlsZTovL2hvc3Qvc2hhcmUvYS9iJworICAgICAgICAgICAgcmV0dXJuICdmaWxlOicgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKHBhdGguYXNfcG9zaXgoKS5lbmNvZGUoJ3V0Zi04JykpCisKKworY2xhc3MgX1Bvc2l4Rmxhdm91cihfRmxhdm91cik6CisgICAgc2VwID0gJy8nCisgICAgYWx0c2VwID0gJycKKyAgICBoYXNfZHJ2ID0gRmFsc2UKKyAgICBwYXRobW9kID0gcG9zaXhwYXRoCisKKyAgICBpc19zdXBwb3J0ZWQgPSAob3MubmFtZSAhPSAnbnQnKQorCisgICAgZGVmIHNwbGl0cm9vdChzZWxmLCBwYXJ0LCBzZXA9c2VwKToKKyAgICAgICAgaWYgcGFydCBhbmQgcGFydFswXSA9PSBzZXA6CisgICAgICAgICAgICBzdHJpcHBlZF9wYXJ0ID0gcGFydC5sc3RyaXAoc2VwKQorICAgICAgICAgICAgIyBBY2NvcmRpbmcgdG8gUE9TSVggcGF0aCByZXNvbHV0aW9uOgorICAgICAgICAgICAgIyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Jhc2VkZWZzL3hiZF9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICAgICAgICAgICMgIkEgcGF0aG5hbWUgdGhhdCBiZWdpbnMgd2l0aCB0d28gc3VjY2Vzc2l2ZSBzbGFzaGVzIG1heSBiZQorICAgICAgICAgICAgIyBpbnRlcnByZXRlZCBpbiBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1hbm5lciwgYWx0aG91Z2ggbW9yZQorICAgICAgICAgICAgIyB0aGFuIHR3byBsZWFkaW5nIHNsYXNoZXMgc2hhbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSBzbGFzaCIuCisgICAgICAgICAgICBpZiBsZW4ocGFydCkgLSBsZW4oc3RyaXBwZWRfcGFydCkgPT0gMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJycsIHNlcCAqIDIsIHN0cmlwcGVkX3BhcnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnLCBzZXAsIHN0cmlwcGVkX3BhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJywgJycsIHBhcnQKKworICAgIGRlZiBjYXNlZm9sZChzZWxmLCBzKToKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBjYXNlZm9sZF9wYXJ0cyhzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBwYXJ0cworCisgICAgZGVmIHJlc29sdmUoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIGRlZiBzcGxpdChwKToKKyAgICAgICAgICAgIHJldHVybiBbeCBmb3IgeCBpbiBwLnNwbGl0KHNlcCkgaWYgeF0KKyAgICAgICAgZGVmIGFic3BhcnRzKHApOgorICAgICAgICAgICAgIyBPdXIgb3duIGFic3BhdGgoKSwgc2luY2UgdGhlIHBvc2l4cGF0aCBvbmUgbWFrZXMKKyAgICAgICAgICAgICMgdGhlIG1pc3Rha2Ugb2YgIm5vcm1hbGl6aW5nIiB0aGUgcGF0aCB3aXRob3V0IHJlc29sdmluZyB0aGUKKyAgICAgICAgICAgICMgc3ltbGlua3MgZmlyc3QuCisgICAgICAgICAgICBpZiBub3QgcC5zdGFydHN3aXRoKHNlcCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0KG9zLmdldGN3ZCgpKSArIHNwbGl0KHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGxpdChwKQorICAgICAgICBwYXJ0cyA9IGFic3BhcnRzKHN0cihwYXRoKSlbOjotMV0KKyAgICAgICAgYWNjZXNzb3IgPSBwYXRoLl9hY2Nlc3NvcgorICAgICAgICByZXNvbHZlZCA9IGN1ciA9ICIiCisgICAgICAgIHN5bWxpbmtzID0ge30KKyAgICAgICAgd2hpbGUgcGFydHM6CisgICAgICAgICAgICBwYXJ0ID0gcGFydHMucG9wKCkKKyAgICAgICAgICAgIGN1ciA9IHJlc29sdmVkICsgc2VwICsgcGFydAorICAgICAgICAgICAgaWYgY3VyIGluIHN5bWxpbmtzIGFuZCBzeW1saW5rc1tjdXJdIDw9IGxlbihwYXJ0cyk6CisgICAgICAgICAgICAgICAgIyBXZSd2ZSBhbHJlYWR5IHNlZW4gdGhlIHN5bWxpbmsgYW5kIHRoZXJlJ3Mgbm90IGxlc3MKKyAgICAgICAgICAgICAgICAjIHdvcmsgdG8gZG8gdGhhbiB0aGUgbGFzdCB0aW1lLgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU3ltbGluayBsb29wIGZyb20gJXIiICUgY3VyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhcmdldCA9IGFjY2Vzc29yLnJlYWRsaW5rKGN1cikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5WQUw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBOb3QgYSBzeW1saW5rCisgICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBjdXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUYWtlIG5vdGUgb2YgcmVtYWluaW5nIHdvcmsgZnJvbSB0aGlzIHN5bWxpbmsKKyAgICAgICAgICAgICAgICBzeW1saW5rc1tjdXJdID0gbGVuKHBhcnRzKQorICAgICAgICAgICAgICAgIGlmIHRhcmdldC5zdGFydHN3aXRoKHNlcCk6CisgICAgICAgICAgICAgICAgICAgICMgU3ltbGluayBwb2ludHMgdG8gYWJzb2x1dGUgcGF0aAorICAgICAgICAgICAgICAgICAgICByZXNvbHZlZCA9ICIiCisgICAgICAgICAgICAgICAgcGFydHMuZXh0ZW5kKHNwbGl0KHRhcmdldClbOjotMV0pCisgICAgICAgIHJldHVybiByZXNvbHZlZCBvciBzZXAKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFdlIHJlcHJlc2VudCB0aGUgcGF0aCB1c2luZyB0aGUgbG9jYWwgZmlsZXN5c3RlbSBlbmNvZGluZywKKyAgICAgICAgIyBmb3IgcG9ydGFiaWxpdHkgdG8gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBicGF0aCA9IGJ5dGVzKHBhdGgpCisgICAgICAgIHJldHVybiAnZmlsZTovLycgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKGJwYXRoKQorCisKK193aW5kb3dzX2ZsYXZvdXIgPSBfV2luZG93c0ZsYXZvdXIoKQorX3Bvc2l4X2ZsYXZvdXIgPSBfUG9zaXhGbGF2b3VyKCkKKworCitjbGFzcyBfQWNjZXNzb3I6CisgICAgIiIiQW4gYWNjZXNzb3IgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHN5c3RlbS1zcGVjaWZpYyBvciBub3QpIHdheSBvZgorICAgIGFjY2Vzc2luZyBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4iIiIKKworCitjbGFzcyBfTm9ybWFsQWNjZXNzb3IoX0FjY2Vzc29yKToKKworICAgIGRlZiBfd3JhcF9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmosICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIGRlZiBfd3JhcF9iaW5hcnlfc3RyZnVuYyhzdHJmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhzdHJmdW5jKQorICAgICAgICBkZWYgd3JhcHBlZChwYXRob2JqQSwgcGF0aG9iakIsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqQSksIHN0cihwYXRob2JqQiksICphcmdzKQorICAgICAgICByZXR1cm4gc3RhdGljbWV0aG9kKHdyYXBwZWQpCisKKyAgICBzdGF0ID0gX3dyYXBfc3RyZnVuYyhvcy5zdGF0KQorCisgICAgbHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLmxzdGF0KQorCisgICAgb3BlbiA9IF93cmFwX3N0cmZ1bmMob3Mub3BlbikKKworICAgIGxpc3RkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLmxpc3RkaXIpCisKKyAgICBjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MuY2htb2QpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgIGxjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MubGNobW9kKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBsY2htb2Qoc2VsZiwgcGF0aG9iaiwgbW9kZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJsY2htb2QoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKworICAgIG1rZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5ta2RpcikKKworICAgIHVubGluayA9IF93cmFwX3N0cmZ1bmMob3MudW5saW5rKQorCisgICAgcm1kaXIgPSBfd3JhcF9zdHJmdW5jKG9zLnJtZGlyKQorCisgICAgcmVuYW1lID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVuYW1lKQorCisgICAgcmVwbGFjZSA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnJlcGxhY2UpCisKKyAgICBpZiBudDoKKyAgICAgICAgaWYgc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgICAgICBzeW1saW5rID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3Muc3ltbGluaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN5bWxpbmsoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKyAgICBlbHNlOgorICAgICAgICAjIFVuZGVyIFBPU0lYLCBvcy5zeW1saW5rKCkgdGFrZXMgdHdvIGFyZ3MKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgc3ltbGluayhhLCBiLCB0YXJnZXRfaXNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBvcy5zeW1saW5rKHN0cihhKSwgc3RyKGIpKQorCisgICAgdXRpbWUgPSBfd3JhcF9zdHJmdW5jKG9zLnV0aW1lKQorCisgICAgIyBIZWxwZXIgZm9yIHJlc29sdmUoKQorICAgIGRlZiByZWFkbGluayhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIG9zLnJlYWRsaW5rKHBhdGgpCisKKworX25vcm1hbF9hY2Nlc3NvciA9IF9Ob3JtYWxBY2Nlc3NvcigpCisKKworIworIyBHbG9iYmluZyBoZWxwZXJzCisjCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9jYWNoZWQoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICBmdW5jLl9fY2FjaGVkX18KKyAgICAgICAgeWllbGQgZnVuYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGUgPSB7fQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWNoZVthcmdzXSA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHdyYXBwZXIuX19jYWNoZWRfXyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgd3JhcHBlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQorCitkZWYgX21ha2Vfc2VsZWN0b3IocGF0dGVybl9wYXJ0cyk6CisgICAgcGF0ID0gcGF0dGVybl9wYXJ0c1swXQorICAgIGNoaWxkX3BhcnRzID0gcGF0dGVybl9wYXJ0c1sxOl0KKyAgICBpZiBwYXQgPT0gJyoqJzoKKyAgICAgICAgY2xzID0gX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IKKyAgICBlbGlmICcqKicgaW4gcGF0OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBhdHRlcm46ICcqKicgY2FuIG9ubHkgYmUgYW4gZW50aXJlIHBhdGggY29tcG9uZW50IikKKyAgICBlbGlmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgICAgIGNscyA9IF9XaWxkY2FyZFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gX1ByZWNpc2VTZWxlY3RvcgorICAgIHJldHVybiBjbHMocGF0LCBjaGlsZF9wYXJ0cykKKworaWYgaGFzYXR0cihmdW5jdG9vbHMsICJscnVfY2FjaGUiKToKKyAgICBfbWFrZV9zZWxlY3RvciA9IGZ1bmN0b29scy5scnVfY2FjaGUoKShfbWFrZV9zZWxlY3RvcikKKworCitjbGFzcyBfU2VsZWN0b3I6CisgICAgIiIiQSBzZWxlY3RvciBtYXRjaGVzIGEgc3BlY2lmaWMgZ2xvYiBwYXR0ZXJuIHBhcnQgYWdhaW5zdCB0aGUgY2hpbGRyZW4KKyAgICBvZiBhIGdpdmVuIHBhdGguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLmNoaWxkX3BhcnRzID0gY2hpbGRfcGFydHMKKyAgICAgICAgaWYgY2hpbGRfcGFydHM6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9tYWtlX3NlbGVjdG9yKGNoaWxkX3BhcnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzb3IgPSBfVGVybWluYXRpbmdTZWxlY3RvcigpCisKKyAgICBkZWYgc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgYWxsIGNoaWxkIHBhdGhzIG9mIGBwYXJlbnRfcGF0aGAgbWF0Y2hlZCBieSB0aGlzCisgICAgICAgIHNlbGVjdG9yLiAgVGhpcyBjYW4gY29udGFpbiBwYXJlbnRfcGF0aCBpdHNlbGYuIiIiCisgICAgICAgIHBhdGhfY2xzID0gdHlwZShwYXJlbnRfcGF0aCkKKyAgICAgICAgaXNfZGlyID0gcGF0aF9jbHMuaXNfZGlyCisgICAgICAgIGV4aXN0cyA9IHBhdGhfY2xzLmV4aXN0cworICAgICAgICBsaXN0ZGlyID0gcGFyZW50X3BhdGguX2FjY2Vzc29yLmxpc3RkaXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdF9mcm9tKHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcikKKworCitjbGFzcyBfVGVybWluYXRpbmdTZWxlY3RvcjoKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKworCitjbGFzcyBfUHJlY2lzZVNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgoc2VsZi5uYW1lKQorICAgICAgICBpZiBleGlzdHMocGF0aCk6CisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20ocGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLnBhdCA9IHJlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUocGF0KSkKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjZiA9IHBhcmVudF9wYXRoLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgY2FzZWZvbGRlZCA9IGNmKG5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnBhdC5tYXRjaChjYXNlZm9sZGVkKToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbShwYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfUmVjdXJzaXZlV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX2l0ZXJhdGVfZGlyZWN0b3JpZXMoc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgIHlpZWxkIHBhcmVudF9wYXRoCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIGlzX2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9pdGVyYXRlX2RpcmVjdG9yaWVzKHBhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBfY2FjaGVkKGxpc3RkaXIpIGFzIGxpc3RkaXI6CisgICAgICAgICAgICB5aWVsZGVkID0gc2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3Jfc2VsZWN0ID0gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0aW5nX3BvaW50IGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHN1Y2Nlc3Nvcl9zZWxlY3Qoc3RhcnRpbmdfcG9pbnQsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHlpZWxkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkZWQuYWRkKHApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHlpZWxkZWQuY2xlYXIoKQorCisKKyMKKyMgUHVibGljIEFQSQorIworCitjbGFzcyBfUGF0aFBhcmVudHMoU2VxdWVuY2UpOgorICAgICIiIlRoaXMgb2JqZWN0IHByb3ZpZGVzIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycworICAgIG9mIGEgcGF0aC4gIERvbid0IHRyeSB0byBjb25zdHJ1Y3QgaXQgeW91cnNlbGYuIiIiCisgICAgX19zbG90c19fID0gKCdfcGF0aGNscycsICdfZHJ2JywgJ19yb290JywgJ19wYXJ0cycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgZG9uJ3Qgc3RvcmUgdGhlIGluc3RhbmNlIHRvIGF2b2lkIHJlZmVyZW5jZSBjeWNsZXMKKyAgICAgICAgc2VsZi5fcGF0aGNscyA9IHR5cGUocGF0aCkKKyAgICAgICAgc2VsZi5fZHJ2ID0gcGF0aC5fZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXRoLl9yb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGF0aC5fcGFydHMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcnYgb3Igc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcGFydHMpIC0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZHgpOgorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oc2VsZik6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKGlkeCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhjbHMuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotaWR4IC0gMV0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPHt9LnBhcmVudHM+Ii5mb3JtYXQoc2VsZi5fcGF0aGNscy5fX25hbWVfXykKKworCitjbGFzcyBQdXJlUGF0aChvYmplY3QpOgorICAgICIiIlB1cmVQYXRoIHJlcHJlc2VudHMgYSBmaWxlc3lzdGVtIHBhdGggYW5kIG9mZmVycyBvcGVyYXRpb25zIHdoaWNoCisgICAgZG9uJ3QgaW1wbHkgYW55IGFjdHVhbCBmaWxlc3lzdGVtIEkvTy4gIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwKKyAgICBpbnN0YW50aWF0aW5nIGEgUHVyZVBhdGggd2lsbCByZXR1cm4gZWl0aGVyIGEgUHVyZVBvc2l4UGF0aCBvciBhCisgICAgUHVyZVdpbmRvd3NQYXRoIG9iamVjdC4gIFlvdSBjYW4gYWxzbyBpbnN0YW50aWF0ZSBlaXRoZXIgb2YgdGhlc2UgY2xhc3NlcworICAgIGRpcmVjdGx5LCByZWdhcmRsZXNzIG9mIHlvdXIgc3lzdGVtLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJywKKyAgICAgICAgJ19zdHInLCAnX2hhc2gnLCAnX3BwYXJ0cycsICdfY2FjaGVkX2NwYXJ0cycsCisgICAgKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFB1cmVQYXRoIGZyb20gb25lIG9yIHNldmVyYWwgc3RyaW5ncyBhbmQgb3IgZXhpc3RpbmcKKyAgICAgICAgUHVyZVBhdGggb2JqZWN0cy4gIFRoZSBzdHJpbmdzIGFuZCBwYXRoIG9iamVjdHMgYXJlIGNvbWJpbmVkIHNvIGFzCisgICAgICAgIHRvIHlpZWxkIGEgY2Fub25pY2FsaXplZCBwYXRoLCB3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgICAgbmV3IFB1cmVQYXRoIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyBpcyBQdXJlUGF0aDoKKyAgICAgICAgICAgIGNscyA9IFB1cmVXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBQdXJlUG9zaXhQYXRoCisgICAgICAgIHJldHVybiBjbHMuX2Zyb21fcGFydHMoYXJncykKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAjIFVzaW5nIHRoZSBwYXJ0cyB0dXBsZSBoZWxwcyBzaGFyZSBpbnRlcm5lZCBwYXRoIHBhcnRzCisgICAgICAgICMgd2hlbiBwaWNrbGluZyByZWxhdGVkIHBhdGhzLgorICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCB0dXBsZShzZWxmLl9wYXJ0cykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2FyZ3MoY2xzLCBhcmdzKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSwganVzdAorICAgICAgICAjIGNhbm9uaWNhbGl6ZSBzb21lIGNvbnN0cnVjdG9yIGFyZ3VtZW50cy4KKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBQdXJlUGF0aCk6CisgICAgICAgICAgICAgICAgcGFydHMgKz0gYS5fcGFydHMKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhLCBzdHIpOgorICAgICAgICAgICAgICAgICMgQXNzdW1pbmcgYSBzdHIKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoYSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlIGEgcGF0aCBvciBzdHIgb2JqZWN0LCBub3QgJXIiCisgICAgICAgICAgICAgICAgICAgICUgdHlwZShhKSkKKyAgICAgICAgcmV0dXJuIGNscy5fZmxhdm91ci5wYXJzZV9wYXJ0cyhwYXJ0cykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9wYXJ0cyhjbHMsIGFyZ3MsIGluaXQ9VHJ1ZSk6CisgICAgICAgICMgV2UgbmVlZCB0byBjYWxsIF9wYXJzZV9hcmdzIG9uIHRoZSBpbnN0YW5jZSwgc28gYXMgdG8gZ2V0IHRoZQorICAgICAgICAjIHJpZ2h0IGZsYXZvdXIuCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIGRydiwgcm9vdCwgcGFydHMgPSBzZWxmLl9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuX2RydiA9IGRydgorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCisgICAgICAgIGlmIGluaXQ6CisgICAgICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9wYXJzZWRfcGFydHMoY2xzLCBkcnYsIHJvb3QsIHBhcnRzLCBpbml0PVRydWUpOgorICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICBzZWxmLl9kcnYgPSBkcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXJ0cworICAgICAgICBpZiBpbml0OgorICAgICAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zvcm1hdF9wYXJzZWRfcGFydHMoY2xzLCBkcnYsIHJvb3QsIHBhcnRzKToKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICByZXR1cm4gZHJ2ICsgcm9vdCArIGNscy5fZmxhdm91ci5qb2luKHBhcnRzWzE6XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX2ZsYXZvdXIuam9pbihwYXJ0cykKKworICAgIGRlZiBfaW5pdChzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZW4gaW4gY29uY3JldGUgUGF0aAorICAgICAgICBwYXNzCisKKyAgICBkZWYgX21ha2VfY2hpbGQoc2VsZiwgYXJncyk6CisgICAgICAgIGRydiwgcm9vdCwgcGFydHMgPSBzZWxmLl9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIGRydiwgcm9vdCwgcGFydHMgPSBzZWxmLl9mbGF2b3VyLmpvaW5fcGFyc2VkX3BhcnRzKAorICAgICAgICAgICAgc2VsZi5fZHJ2LCBzZWxmLl9yb290LCBzZWxmLl9wYXJ0cywgZHJ2LCByb290LCBwYXJ0cykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKGRydiwgcm9vdCwgcGFydHMpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGgsIHN1aXRhYmxlIGZvcgorICAgICAgICBwYXNzaW5nIHRvIHN5c3RlbSBjYWxscy4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0cgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zdHIgPSBzZWxmLl9mb3JtYXRfcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHMpIG9yICcuJworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0cgorCisgICAgZGVmIGFzX3Bvc2l4KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCB3aXRoIGZvcndhcmQgKC8pCisgICAgICAgIHNsYXNoZXMuIiIiCisgICAgICAgIGYgPSBzZWxmLl9mbGF2b3VyCisgICAgICAgIHJldHVybiBzdHIoc2VsZikucmVwbGFjZShmLnNlcCwgJy8nKQorCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBieXRlcyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aC4gIFRoaXMgaXMgb25seQorICAgICAgICByZWNvbW1lbmRlZCB0byB1c2UgdW5kZXIgVW5peC4iIiIKKyAgICAgICAgcmV0dXJuIG9zLmZzZW5jb2RlKHN0cihzZWxmKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSh7IXJ9KSIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmFzX3Bvc2l4KCkpCisKKyAgICBkZWYgYXNfdXJpKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggYXMgYSAnZmlsZScgVVJJLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5pc19hYnNvbHV0ZSgpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVsYXRpdmUgcGF0aCBjYW4ndCBiZSBleHByZXNzZWQgYXMgYSBmaWxlIFVSSSIpCisgICAgICAgIHJldHVybiBzZWxmLl9mbGF2b3VyLm1ha2VfdXJpKHNlbGYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX2NwYXJ0cyhzZWxmKToKKyAgICAgICAgIyBDYWNoZWQgY2FzZWZvbGRlZCBwYXJ0cywgZm9yIGhhc2hpbmcgYW5kIGNvbXBhcmlzb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9jcGFydHMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fY2FjaGVkX2NwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGRfcGFydHMoc2VsZi5fcGFydHMpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2NwYXJ0cworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA9PSBvdGhlci5fY3BhcnRzIGFuZCBzZWxmLl9mbGF2b3VyIGlzIG90aGVyLl9mbGF2b3VyCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2hhc2ggPSBoYXNoKHR1cGxlKHNlbGYuX2NwYXJ0cykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFzaAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA8IG90aGVyLl9jcGFydHMKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPD0gb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA+IG90aGVyLl9jcGFydHMKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPj0gb3RoZXIuX2NwYXJ0cworCisgICAgZHJpdmUgPSBwcm9wZXJ0eShhdHRyZ2V0dGVyKCdfZHJ2JyksCisgICAgICAgICAgICAgICAgICAgICBkb2M9IiIiVGhlIGRyaXZlIHByZWZpeCAobGV0dGVyIG9yIFVOQyBwYXRoKSwgaWYgYW55LiIiIikKKworICAgIHJvb3QgPSBwcm9wZXJ0eShhdHRyZ2V0dGVyKCdfcm9vdCcpLAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiVGhlIHJvb3Qgb2YgdGhlIHBhdGgsIGlmIGFueS4iIiIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYW5jaG9yKHNlbGYpOgorICAgICAgICAiIiJUaGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZHJpdmUgYW5kIHJvb3QsIG9yICcnLiIiIgorICAgICAgICBhbmNob3IgPSBzZWxmLl9kcnYgKyBzZWxmLl9yb290CisgICAgICAgIHJldHVybiBhbmNob3IKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAiIiJUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIGlmIGFueS4iIiIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cworICAgICAgICBpZiBsZW4ocGFydHMpID09ICgxIGlmIChzZWxmLl9kcnYgb3Igc2VsZi5fcm9vdCkgZWxzZSAwKToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4gcGFydHNbLTFdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3VmZml4KHNlbGYpOgorICAgICAgICAiIiJUaGUgZmluYWwgY29tcG9uZW50J3MgbGFzdCBzdWZmaXgsIGlmIGFueS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpID0gbmFtZS5yZmluZCgnLicpCisgICAgICAgIGlmIDAgPCBpIDwgbGVuKG5hbWUpIC0gMToKKyAgICAgICAgICAgIHJldHVybiBuYW1lW2k6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3VmZml4ZXMoc2VsZik6CisgICAgICAgICIiIkEgbGlzdCBvZiB0aGUgZmluYWwgY29tcG9uZW50J3Mgc3VmZml4ZXMsIGlmIGFueS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcuJyk6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgbmFtZSA9IG5hbWUubHN0cmlwKCcuJykKKyAgICAgICAgcmV0dXJuIFsnLicgKyBzdWZmaXggZm9yIHN1ZmZpeCBpbiBuYW1lLnNwbGl0KCcuJylbMTpdXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0ZW0oc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgbWludXMgaXRzIGxhc3Qgc3VmZml4LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKKyAgICAgICAgaWYgMCA8IGkgPCBsZW4obmFtZSkgLSAxOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVbOmldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIHdpdGhfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgZmlsZSBuYW1lIGNoYW5nZWQuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLm5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHNbOi0xXSArIFtuYW1lXSkKKworICAgIGRlZiB3aXRoX3N1ZmZpeChzZWxmLCBzdWZmaXgpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSBmaWxlIHN1ZmZpeCBjaGFuZ2VkIChvciBhZGRlZCwgaWYgbm9uZSkuIiIiCisgICAgICAgICMgWFhYIGlmIHN1ZmZpeCBpcyBOb25lLCBzaG91bGQgdGhlIGN1cnJlbnQgc3VmZml4IGJlIHJlbW92ZWQ/CisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgICBvbGRfc3VmZml4ID0gc2VsZi5zdWZmaXgKKyAgICAgICAgaWYgbm90IG9sZF9zdWZmaXg6CisgICAgICAgICAgICBuYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4ob2xkX3N1ZmZpeCldICsgc3VmZml4CisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHJlbGF0aXZlX3RvKHNlbGYsICpvdGhlcik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCB0byBhbm90aGVyIHBhdGggaWRlbnRpZmllZCBieSB0aGUgcGFzc2VkCisgICAgICAgIGFyZ3VtZW50cy4gIElmIHRoZSBvcGVyYXRpb24gaXMgbm90IHBvc3NpYmxlIChiZWNhdXNlIHRoaXMgaXMgbm90CisgICAgICAgIGEgc3VicGF0aCBvZiB0aGUgb3RoZXIgcGF0aCksIHJhaXNlIFZhbHVlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICAjIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCwgZHJpdmUgYW5kIHJvb3QgYXJlIGNvbnNpZGVyZWQKKyAgICAgICAgIyBzZXBhcmF0ZSBwYXJ0cywgaS5lLjoKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCdjOicpICBnaXZlcyBQYXRoKCcvJykKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCcvJykgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGlmIG5vdCBvdGhlcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKQorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGRydiA9IHNlbGYuX2RydgorICAgICAgICByb290ID0gc2VsZi5fcm9vdAorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICAgICAgYWJzX3BhcnRzID0gW2Rydiwgcm9vdF0gKyBwYXJ0c1sxOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWJzX3BhcnRzID0gW2Rydl0gKyBwYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFic19wYXJ0cyA9IHBhcnRzCisgICAgICAgIHRvX2RydiwgdG9fcm9vdCwgdG9fcGFydHMgPSBzZWxmLl9wYXJzZV9hcmdzKG90aGVyKQorICAgICAgICBpZiB0b19kcnYgb3IgdG9fcm9vdDoKKyAgICAgICAgICAgIGlmIHRvX3Jvb3Q6CisgICAgICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gW3RvX2RydiwgdG9fcm9vdF0gKyB0b19wYXJ0c1sxOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gW3RvX2Rydl0gKyB0b19wYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRvX2Fic19wYXJ0cyA9IHRvX3BhcnRzCisgICAgICAgIG4gPSBsZW4odG9fYWJzX3BhcnRzKQorICAgICAgICBpZiBuID09IDAgYW5kIChkcnYgb3Igcm9vdCkgb3IgYWJzX3BhcnRzWzpuXSAhPSB0b19hYnNfcGFydHM6CisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBzZWxmLl9mb3JtYXRfcGFyc2VkX3BhcnRzKHRvX2RydiwgdG9fcm9vdCwgdG9fcGFydHMpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzdHIoc2VsZiksIHN0cihmb3JtYXR0ZWQpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKCcnLCAnJywgYWJzX3BhcnRzW246XSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJ0cyhzZWxmKToKKyAgICAgICAgIiIiQW4gb2JqZWN0IHByb3ZpZGluZyBzZXF1ZW5jZS1saWtlIGFjY2VzcyB0byB0aGUKKyAgICAgICAgY29tcG9uZW50cyBpbiB0aGUgZmlsZXN5c3RlbSBwYXRoLiIiIgorICAgICAgICAjIFdlIGNhY2hlIHRoZSB0dXBsZSB0byBhdm9pZCBidWlsZGluZyBhIG5ldyBvbmUgZWFjaCB0aW1lIC5wYXJ0cworICAgICAgICAjIGlzIGFjY2Vzc2VkLiAgWFhYIGlzIHRoaXMgbmVjZXNzYXJ5PworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHBhcnRzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3BwYXJ0cyA9IHR1cGxlKHNlbGYuX3BhcnRzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BwYXJ0cworCisgICAgZGVmIGpvaW5wYXRoKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiQ29tYmluZSB0aGlzIHBhdGggd2l0aCBvbmUgb3Igc2V2ZXJhbCBhcmd1bWVudHMsIGFuZCByZXR1cm4gYQorICAgICAgICBuZXcgcGF0aCByZXByZXNlbnRpbmcgZWl0aGVyIGEgc3VicGF0aCAoaWYgYWxsIGFyZ3VtZW50cyBhcmUgcmVsYXRpdmUKKyAgICAgICAgcGF0aHMpIG9yIGEgdG90YWxseSBkaWZmZXJlbnQgcGF0aCAoaWYgb25lIG9mIHRoZSBhcmd1bWVudHMgaXMKKyAgICAgICAgYW5jaG9yZWQpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfY2hpbGQoYXJncykKKworICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9jaGlsZCgoa2V5LCkpCisKKyAgICBkZWYgX19ydHJ1ZWRpdl9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnRzKFtrZXldICsgc2VsZi5fcGFydHMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50KHNlbGYpOgorICAgICAgICAiIiJUaGUgbG9naWNhbCBwYXJlbnQgb2YgdGhlIHBhdGguIiIiCisgICAgICAgIGRydiA9IHNlbGYuX2RydgorICAgICAgICByb290ID0gc2VsZi5fcm9vdAorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMSBhbmQgKGRydiBvciByb290KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhkcnYsIHJvb3QsIHBhcnRzWzotMV0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50cyhzZWxmKToKKyAgICAgICAgIiIiQSBzZXF1ZW5jZSBvZiB0aGlzIHBhdGgncyBsb2dpY2FsIHBhcmVudHMuIiIiCisgICAgICAgIHJldHVybiBfUGF0aFBhcmVudHMoc2VsZikKKworICAgIGRlZiBpc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIiIiVHJ1ZSBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSAoaGFzIGJvdGggYSByb290IGFuZCwgaWYgYXBwbGljYWJsZSwKKyAgICAgICAgYSBkcml2ZSkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9yb290OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZmxhdm91ci5oYXNfZHJ2IG9yIGJvb2woc2VsZi5fZHJ2KQorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBjb250YWlucyBvbmUgb2YgdGhlIHNwZWNpYWwgbmFtZXMgcmVzZXJ2ZWQKKyAgICAgICAgYnkgdGhlIHN5c3RlbSwgaWYgYW55LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmxhdm91ci5pc19yZXNlcnZlZChzZWxmLl9wYXJ0cykKKworICAgIGRlZiBtYXRjaChzZWxmLCBwYXRoX3BhdHRlcm4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgdGhpcyBwYXRoIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICAgICIiIgorICAgICAgICBjZiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQKKyAgICAgICAgcGF0aF9wYXR0ZXJuID0gY2YocGF0aF9wYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdF9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdGhfcGF0dGVybiwpKQorICAgICAgICBpZiBub3QgcGF0X3BhcnRzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgcGF0dGVybiIpCisgICAgICAgIGlmIGRydiBhbmQgZHJ2ICE9IGNmKHNlbGYuX2Rydik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcm9vdCBhbmQgcm9vdCAhPSBjZihzZWxmLl9yb290KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBwYXJ0cyA9IHNlbGYuX2NwYXJ0cworICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIGlmIGxlbihwYXRfcGFydHMpICE9IGxlbihwYXJ0cyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBwYXRfcGFydHMgPSBwYXRfcGFydHNbMTpdCisgICAgICAgIGVsaWYgbGVuKHBhdF9wYXJ0cykgPiBsZW4ocGFydHMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBwYXJ0LCBwYXQgaW4gemlwKHJldmVyc2VkKHBhcnRzKSwgcmV2ZXJzZWQocGF0X3BhcnRzKSk6CisgICAgICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoY2FzZShwYXJ0LCBwYXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIFB1cmVQb3NpeFBhdGgoUHVyZVBhdGgpOgorICAgIF9mbGF2b3VyID0gX3Bvc2l4X2ZsYXZvdXIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKK2NsYXNzIFB1cmVXaW5kb3dzUGF0aChQdXJlUGF0aCk6CisgICAgX2ZsYXZvdXIgPSBfd2luZG93c19mbGF2b3VyCisgICAgX19zbG90c19fID0gKCkKKworCisjIEZpbGVzeXN0ZW0tYWNjZXNzaW5nIGNsYXNzZXMKKworCitjbGFzcyBQYXRoKFB1cmVQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoCisgICAgICAgICdfYWNjZXNzb3InLAorICAgICAgICAnX2Nsb3NlZCcsCisgICAgKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBjbHMgaXMgUGF0aDoKKyAgICAgICAgICAgIGNscyA9IFdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIFBvc2l4UGF0aAorICAgICAgICBzZWxmID0gY2xzLl9mcm9tX3BhcnRzKGFyZ3MsIGluaXQ9RmFsc2UpCisgICAgICAgIGlmIG5vdCBzZWxmLl9mbGF2b3VyLmlzX3N1cHBvcnRlZDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImNhbm5vdCBpbnN0YW50aWF0ZSAlciBvbiB5b3VyIHN5c3RlbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2xzLl9fbmFtZV9fLCkpCisgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9pbml0KHNlbGYsCisgICAgICAgICAgICAgICMgUHJpdmF0ZSBub24tY29uc3RydWN0b3IgYXJndW1lbnRzCisgICAgICAgICAgICAgIHRlbXBsYXRlPU5vbmUsCisgICAgICAgICAgICAgICk6CisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgIGlmIHRlbXBsYXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IgPSB0ZW1wbGF0ZS5fYWNjZXNzb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yID0gX25vcm1hbF9hY2Nlc3NvcgorCisgICAgZGVmIF9tYWtlX2NoaWxkX3JlbHBhdGgoc2VsZiwgcGFydCk6CisgICAgICAgICMgVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdXNlZCBmb3IgZGlyIHdhbGtpbmcuICBgcGFydGAgbXVzdCBiZQorICAgICAgICAjIGEgc2luZ2xlIHBhcnQgcmVsYXRpdmUgdG8gdGhpcyBwYXRoLgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzICsgW3BhcnRdCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHBhcnRzKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBfcmFpc2VfY2xvc2VkKHNlbGYpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBwYXRoIikKKworICAgIGRlZiBfb3BlbmVyKHNlbGYsIG5hbWUsIGZsYWdzLCBtb2RlPTBvNjY2KToKKyAgICAgICAgIyBBIHN0dWIgZm9yIHRoZSBvcGVuZXIgYXJndW1lbnQgdG8gYnVpbHQtaW4gb3BlbigpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5vcGVuKHNlbGYsIGZsYWdzLCBtb2RlKQorCisgICAgIyBQdWJsaWMgQVBJCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3dkKGNscyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgIChhcyByZXR1cm5lZCBieSBvcy5nZXRjd2QoKSkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gY2xzKG9zLmdldGN3ZCgpKQorCisgICAgZGVmIGl0ZXJkaXIoc2VsZik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuICBEb2VzIG5vdCB5aWVsZCBhbnkKKyAgICAgICAgcmVzdWx0IGZvciB0aGUgc3BlY2lhbCBwYXRocyAnLicgYW5kICcuLicuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLl9hY2Nlc3Nvci5saXN0ZGlyKHNlbGYpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiB7Jy4nLCAnLi4nfToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgcGF0aCBvYmplY3QgZm9yIHRoZXNlIG1ha2VzIGxpdHRsZSBzZW5zZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorCisgICAgZGVmIGdsb2Ioc2VsZiwgcGF0dGVybik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGlzIHN1YnRyZWUgYW5kIHlpZWxkIGFsbCBleGlzdGluZyBmaWxlcyAob2YgYW55CisgICAgICAgIGtpbmQsIGluY2x1ZGluZyBkaXJlY3RvcmllcykgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IodHVwbGUocGF0dGVybl9wYXJ0cykpCisgICAgICAgIGZvciBwIGluIHNlbGVjdG9yLnNlbGVjdF9mcm9tKHNlbGYpOgorICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIHJnbG9iKHNlbGYsIHBhdHRlcm4pOgorICAgICAgICAiIiJSZWN1cnNpdmVseSB5aWVsZCBhbGwgZXhpc3RpbmcgZmlsZXMgKG9mIGFueSBraW5kLCBpbmNsdWRpbmcKKyAgICAgICAgZGlyZWN0b3JpZXMpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCBhbnl3aGVyZSBpbiB0aGlzIHN1YnRyZWUuCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IoKCIqKiIsKSArIHR1cGxlKHBhdHRlcm5fcGFydHMpKQorICAgICAgICBmb3IgcCBpbiBzZWxlY3Rvci5zZWxlY3RfZnJvbShzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBhYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGFic29sdXRlIHZlcnNpb24gb2YgdGhpcyBwYXRoLiAgVGhpcyBmdW5jdGlvbiB3b3JrcworICAgICAgICBldmVuIGlmIHRoZSBwYXRoIGRvZXNuJ3QgcG9pbnQgdG8gYW55dGhpbmcuCisKKyAgICAgICAgTm8gbm9ybWFsaXphdGlvbiBpcyBkb25lLCBpLmUuIGFsbCAnLicgYW5kICcuLicgd2lsbCBiZSBrZXB0IGFsb25nLgorICAgICAgICBVc2UgcmVzb2x2ZSgpIHRvIGdldCB0aGUgY2Fub25pY2FsIHBhdGggdG8gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBYWFggdW50ZXN0ZWQgeWV0IQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAjIEZJWE1FIHRoaXMgbXVzdCBkZWZlciB0byB0aGUgc3BlY2lmaWMgZmxhdm91ciAoYW5kLCB1bmRlciBXaW5kb3dzLAorICAgICAgICAjIHVzZSBudC5fZ2V0ZnVsbHBhdGhuYW1lKCkpCisgICAgICAgIG9iaiA9IHNlbGYuX2Zyb21fcGFydHMoW29zLmdldGN3ZCgpXSArIHNlbGYuX3BhcnRzLCBpbml0PUZhbHNlKQorICAgICAgICBvYmouX2luaXQodGVtcGxhdGU9c2VsZikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJlc29sdmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYWxsIHN5bWxpbmtzIG9uIHRoZSB3YXkgYW5kIGFsc28KKyAgICAgICAgbm9ybWFsaXppbmcgaXQgKGZvciBleGFtcGxlIHR1cm5pbmcgc2xhc2hlcyBpbnRvIGJhY2tzbGFzaGVzIHVuZGVyCisgICAgICAgIFdpbmRvd3MpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcyA9IHNlbGYuX2ZsYXZvdXIucmVzb2x2ZShzZWxmKQorICAgICAgICBpZiBzIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vIHN5bWxpbmsgcmVzb2x1dGlvbiA9PiBmb3IgY29uc2lzdGVuY3ksIHJhaXNlIGFuIGVycm9yIGlmCisgICAgICAgICAgICAjIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZm9yYmlkZGVuCisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICAgICAgcyA9IHN0cihzZWxmLmFic29sdXRlKCkpCisgICAgICAgICMgTm93IHdlIGhhdmUgbm8gc3ltbGlua3MgaW4gdGhlIHBhdGgsIGl0J3Mgc2FmZSB0byBub3JtYWxpemUgaXQuCisgICAgICAgIG5vcm1lZCA9IHNlbGYuX2ZsYXZvdXIucGF0aG1vZC5ub3JtcGF0aChzKQorICAgICAgICBvYmogPSBzZWxmLl9mcm9tX3BhcnRzKChub3JtZWQsKSwgaW5pdD1GYWxzZSkKKyAgICAgICAgb2JqLl9pbml0KHRlbXBsYXRlPXNlbGYpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIHN0YXQoKSBzeXN0ZW0gY2FsbCBvbiB0aGlzIHBhdGgsIGxpa2UKKyAgICAgICAgb3Muc3RhdCgpIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iuc3RhdChzZWxmKQorCisgICAgZGVmIG93bmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBmaWxlIG93bmVyLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICByZXR1cm4gcHdkLmdldHB3dWlkKHNlbGYuc3RhdCgpLnN0X3VpZCkucHdfbmFtZQorCisgICAgZGVmIGdyb3VwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBncm91cCBuYW1lIG9mIHRoZSBmaWxlIGdpZC4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBncnAKKyAgICAgICAgcmV0dXJuIGdycC5nZXRncmdpZChzZWxmLnN0YXQoKS5zdF9naWQpLmdyX25hbWUKKworICAgIGRlZiBfcmF3X29wZW4oc2VsZiwgZmxhZ3MsIG1vZGU9MG83NzcpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLAorICAgICAgICBhcyBvcy5vcGVuKCkgZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5vcGVuKHNlbGYsIGZsYWdzLCBtb2RlKQorCisgICAgZGVmIG9wZW4oc2VsZiwgbW9kZT0ncicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCBieSB0aGlzIHBhdGggYW5kIHJldHVybiBhIGZpbGUgb2JqZWN0LCBhcworICAgICAgICB0aGUgYnVpbHQtaW4gb3BlbigpIGZ1bmN0aW9uIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gaW8ub3BlbihzdHIoc2VsZiksIG1vZGUsIGJ1ZmZlcmluZywgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVyPXNlbGYuX29wZW5lcikKKworICAgIGRlZiB0b3VjaChzZWxmLCBtb2RlPTBvNjY2LCBleGlzdF9vaz1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGlzIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gYWNjZXNzIG1vZGUsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBleGlzdF9vazoKKyAgICAgICAgICAgICMgRmlyc3QgdHJ5IHRvIGJ1bXAgbW9kaWZpY2F0aW9uIHRpbWUKKyAgICAgICAgICAgICMgSW1wbGVtZW50YXRpb24gbm90ZTogR05VIHRvdWNoIHVzZXMgdGhlIFVUSU1FX05PVyBvcHRpb24gb2YKKyAgICAgICAgICAgICMgdGhlIHV0aW1lbnNhdCgpIC8gZnV0aW1lbnMoKSBmdW5jdGlvbnMuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IudXRpbWUoc2VsZiwgTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgQXZvaWQgZXhjZXB0aW9uIGNoYWluaW5nCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmxhZ3MgPSBvcy5PX0NSRUFUIHwgb3MuT19XUk9OTFkKKyAgICAgICAgaWYgbm90IGV4aXN0X29rOgorICAgICAgICAgICAgZmxhZ3MgfD0gb3MuT19FWENMCisgICAgICAgIGZkID0gc2VsZi5fcmF3X29wZW4oZmxhZ3MsIG1vZGUpCisgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgZGVmIG1rZGlyKHNlbGYsIG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBub3QgcGFyZW50czoKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQubWtkaXIobW9kZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorCisgICAgZGVmIGNobW9kKHNlbGYsIG1vZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgcGF0aCwgbGlrZSBvcy5jaG1vZCgpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IuY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiBsY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIGNobW9kKCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHBlcm1pc3Npb25zIGFyZSBjaGFuZ2VkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5sY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiB1bmxpbmsoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBmaWxlIG9yIGxpbmsuCisgICAgICAgIElmIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5LCB1c2Ugcm1kaXIoKSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IudW5saW5rKHNlbGYpCisKKyAgICBkZWYgcm1kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ybWRpcihzZWxmKQorCisgICAgZGVmIGxzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTGlrZSBzdGF0KCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCwgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLmxzdGF0KHNlbGYpCisKKyAgICBkZWYgcmVuYW1lKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IucmVuYW1lKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLCBjbG9iYmVyaW5nIHRoZSBleGlzdGluZworICAgICAgICBkZXN0aW5hdGlvbiBpZiBpdCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZXBsYWNlKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiBzeW1saW5rX3RvKHNlbGYsIHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgIE5vdGUgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyAoc2VsZiwgdGFyZ2V0KSBpcyB0aGUgcmV2ZXJzZSBvZiBvcy5zeW1saW5rJ3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5zeW1saW5rKHRhcmdldCwgc2VsZiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSkKKworICAgICMgQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgc3RhdCByZXN1bHRzCisKKyAgICBkZWYgZXhpc3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggZXhpc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zdGF0KCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpc19kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTRElSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSByZWd1bGFyIGZpbGUgKGFsc28gVHJ1ZSBmb3Igc3ltbGlua3MgcG9pbnRpbmcKKyAgICAgICAgdG8gcmVndWxhciBmaWxlcykuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU1JFRyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTTE5LKHNlbGYubHN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19ibG9ja19kZXZpY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGJsb2NrIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQkxLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19jaGFyX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgY2hhcmFjdGVyIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQ0hSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWZvKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBGSUZPLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNGSUZPKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zb2NrZXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHNvY2tldC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTU09DSyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgUG9zaXhQYXRoKFBhdGgsIFB1cmVQb3NpeFBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIFdpbmRvd3NQYXRoKFBhdGgsIFB1cmVXaW5kb3dzUGF0aCk6CisgICAgX19zbG90c19fID0gKCkKZGlmZiAtLWdpdCBhL0xpYi9wZGIucHkgYi9MaWIvcGRiLnB5CmluZGV4IDgwY2JhOWQuLmRkN2NlYjggMTAwNzU1Ci0tLSBhL0xpYi9wZGIucHkKKysrIGIvTGliL3BkYi5weQpAQCAtOTIsMjEgKzkyLDE0IEBACiAgICAgY3JlID0gcmUuY29tcGlsZShyJ2RlZlxzKyVzXHMqWyhdJyAlIHJlLmVzY2FwZShmdW5jbmFtZSkpCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgIyBjb25zdW1lciBvZiB0aGlzIGluZm8gZXhwZWN0cyB0aGUgZmlyc3QgbGluZSB0byBiZSAxCi0gICAgbGluZW5vID0gMQotICAgIGFuc3dlciA9IE5vbmUKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lID09ICcnOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgY3JlLm1hdGNoKGxpbmUpOgotICAgICAgICAgICAgYW5zd2VyID0gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxpbmVubyArPSAxCi0gICAgZnAuY2xvc2UoKQotICAgIHJldHVybiBhbnN3ZXIKKyAgICB3aXRoIGZwOgorICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmcCwgc3RhcnQ9MSk6CisgICAgICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCisgICAgcmV0dXJuIE5vbmUKIAogZGVmIGdldHNvdXJjZWxpbmVzKG9iaik6CiAgICAgbGluZXMsIGxpbmVubyA9IGluc3BlY3QuZmluZHNvdXJjZShvYmopCkBAIC0xNzAsMTIgKzE2MywxMiBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZW52SG9tZSwgIi5wZGJyYyIpKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggb3BlbigiLnBkYnJjIikgYXMgcmNGaWxlOgogICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgc2VsZi5jb21tYW5kcyA9IHt9ICMgYXNzb2NpYXRlcyBhIGNvbW1hbmQgbGlzdCB0byBicmVha3BvaW50IG51bWJlcnMKQEAgLTMwNCw4ICsyOTcsMTYgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrID0gZXhjX2luZm8KICAgICAgICAgZnJhbWUuZl9sb2NhbHNbJ19fZXhjZXB0aW9uX18nXSA9IGV4Y190eXBlLCBleGNfdmFsdWUKLSAgICAgICAgc2VsZi5tZXNzYWdlKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpCisKKyAgICAgICAgIyBBbiAnSW50ZXJuYWwgU3RvcEl0ZXJhdGlvbicgZXhjZXB0aW9uIGlzIGFuIGV4Y2VwdGlvbiBkZWJ1ZyBldmVudAorICAgICAgICAjIGlzc3VlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2hlbiBoYW5kbGluZyBhIHN1YmdlbmVyYXRvciBydW4gd2l0aAorICAgICAgICAjICd5aWVsZCBmcm9tJyBvciBhIGdlbmVyYXRvciBjb250cm9sZWQgYnkgYSBmb3IgbG9vcC4gTm8gZXhjZXB0aW9uIGhhcworICAgICAgICAjIGFjdHVhbGx5IG9jY3VyZWQgaW4gdGhpcyBjYXNlLiBUaGUgZGVidWdnZXIgdXNlcyB0aGlzIGRlYnVnIGV2ZW50IHRvCisgICAgICAgICMgc3RvcCB3aGVuIHRoZSBkZWJ1Z2dlZSBpcyByZXR1cm5pbmcgZnJvbSBzdWNoIGdlbmVyYXRvcnMuCisgICAgICAgIHByZWZpeCA9ICdJbnRlcm5hbCAnIGlmIChub3QgZXhjX3RyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV4Y190eXBlIGlzIFN0b3BJdGVyYXRpb24pIGVsc2UgJycKKyAgICAgICAgc2VsZi5tZXNzYWdlKCclcyVzJyAlIChwcmVmaXgsCisgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Y190eXBlLCBleGNfdmFsdWUpWy0xXS5zdHJpcCgpKSkKICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgZXhjX3RyYWNlYmFjaykKIAogICAgICMgR2VuZXJhbCBpbnRlcmFjdGlvbiBmdW5jdGlvbgpAQCAtMTE2MywxNSArMTE2NCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIF9yc3RyKCcqKiByYWlzZWQgJXMgKionICUgZXJyKQogCiAgICAgZGVmIGRvX3Aoc2VsZiwgYXJnKToKLSAgICAgICAgIiIicChyaW50KSBleHByZXNzaW9uCisgICAgICAgICIiInAgZXhwcmVzc2lvbgogICAgICAgICBQcmludCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uCiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UocmVwcihzZWxmLl9nZXR2YWwoYXJnKSkpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKLSAgICAjIG1ha2UgInByaW50IiBhbiBhbGlhcyBvZiAicCIgc2luY2UgcHJpbnQgaXNuJ3QgYSBQeXRob24gc3RhdGVtZW50IGFueW1vcmUKLSAgICBkb19wcmludCA9IGRvX3AKIAogICAgIGRlZiBkb19wcChzZWxmLCBhcmcpOgogICAgICAgICAiIiJwcCBleHByZXNzaW9uCkBAIC0xMjQ1LDcgKzEyNDQsNyBAQAogICAgICAgICBicmVha2xpc3QgPSBzZWxmLmdldF9maWxlX2JyZWFrcyhmaWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxpbmVubyA9IGdldHNvdXJjZWxpbmVzKHNlbGYuY3VyZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubywgYnJlYWtsaXN0LCBzZWxmLmN1cmZyYW1lKQpAQCAtMTI2MSw3ICsxMjYwLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMob2JqKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubykKQEAgLTEzOTIsNyArMTM5MSw3IEBACiAgICAgICAgIHBsYWNlZCBpbiB0aGUgLnBkYnJjIGZpbGUpOgogCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKLSAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCAiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXQorICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKQogICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmCiAgICAgICAgIGFsaWFzIHBzIHBpIHNlbGYKICAgICAgICAgIiIiCkBAIC0xNTUwLDcgKzE1NDksNyBAQAogICAgICAgICAnaGVscCcsICd3aGVyZScsICdkb3duJywgJ3VwJywgJ2JyZWFrJywgJ3RicmVhaycsICdjbGVhcicsICdkaXNhYmxlJywKICAgICAgICAgJ2VuYWJsZScsICdpZ25vcmUnLCAnY29uZGl0aW9uJywgJ2NvbW1hbmRzJywgJ3N0ZXAnLCAnbmV4dCcsICd1bnRpbCcsCiAgICAgICAgICdqdW1wJywgJ3JldHVybicsICdyZXR2YWwnLCAncnVuJywgJ2NvbnRpbnVlJywgJ2xpc3QnLCAnbG9uZ2xpc3QnLAotICAgICAgICAnYXJncycsICdwcmludCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKKyAgICAgICAgJ2FyZ3MnLCAncCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKICAgICAgICAgJ2ludGVyYWN0JywgJ2FsaWFzJywgJ3VuYWxpYXMnLCAnZGVidWcnLCAncXVpdCcsCiAgICAgXQogCmRpZmYgLS1naXQgYS9MaWIvcGlja2xlLnB5IGIvTGliL3BpY2tsZS5weQppbmRleCBkNjJmMDE0Li5jZjhlMmM1IDEwMDY0NAotLS0gYS9MaWIvcGlja2xlLnB5CisrKyBiL0xpYi9waWNrbGUucHkKQEAgLTIzLDEyICsyMywxMyBAQAogCiAiIiIKIAotZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlCitmcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUsIE1vZHVsZVR5cGUKIGZyb20gY29weXJlZyBpbXBvcnQgZGlzcGF0Y2hfdGFibGUKIGZyb20gY29weXJlZyBpbXBvcnQgX2V4dGVuc2lvbl9yZWdpc3RyeSwgX2ludmVydGVkX3JlZ2lzdHJ5LCBfZXh0ZW5zaW9uX2NhY2hlCi1pbXBvcnQgbWFyc2hhbAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQogaW1wb3J0IHN5cwotaW1wb3J0IHN0cnVjdAorZnJvbSBzeXMgaW1wb3J0IG1heHNpemUKK2Zyb20gc3RydWN0IGltcG9ydCBwYWNrLCB1bnBhY2sKIGltcG9ydCByZQogaW1wb3J0IGlvCiBpbXBvcnQgY29kZWNzCkBAIC00MSwyOCArNDIsMjQgQEAKIGJ5dGVzX3R5cGVzID0gKGJ5dGVzLCBieXRlYXJyYXkpCiAKICMgVGhlc2UgYXJlIHB1cmVseSBpbmZvcm1hdGlvbmFsOyBubyBjb2RlIHVzZXMgdGhlc2UuCi1mb3JtYXRfdmVyc2lvbiA9ICIzLjAiICAgICAgICAgICAgICAgICAgIyBGaWxlIGZvcm1hdCB2ZXJzaW9uIHdlIHdyaXRlCitmb3JtYXRfdmVyc2lvbiA9ICI0LjAiICAgICAgICAgICAgICAgICAgIyBGaWxlIGZvcm1hdCB2ZXJzaW9uIHdlIHdyaXRlCiBjb21wYXRpYmxlX2Zvcm1hdHMgPSBbIjEuMCIsICAgICAgICAgICAgIyBPcmlnaW5hbCBwcm90b2NvbCAwCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMSIsICAgICAgICAgICAgIyBQcm90b2NvbCAwIHdpdGggSU5TVCBhZGRlZAogICAgICAgICAgICAgICAgICAgICAgICIxLjIiLCAgICAgICAgICAgICMgT3JpZ2luYWwgcHJvdG9jb2wgMQogICAgICAgICAgICAgICAgICAgICAgICIxLjMiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMSB3aXRoIEJJTkZMT0FUIGFkZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIjIuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCAyCiAgICAgICAgICAgICAgICAgICAgICAgIjMuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCAzCisgICAgICAgICAgICAgICAgICAgICAgIjQuMCIsICAgICAgICAgICAgIyBQcm90b2NvbCA0CiAgICAgICAgICAgICAgICAgICAgICAgXSAgICAgICAgICAgICAgICAgIyBPbGQgZm9ybWF0IHZlcnNpb25zIHdlIGNhbiByZWFkCiAKICMgVGhpcyBpcyB0aGUgaGlnaGVzdCBwcm90b2NvbCBudW1iZXIgd2Uga25vdyBob3cgdG8gcmVhZC4KLUhJR0hFU1RfUFJPVE9DT0wgPSAzCitISUdIRVNUX1BST1RPQ09MID0gNAogCiAjIFRoZSBwcm90b2NvbCB3ZSB3cml0ZSBieSBkZWZhdWx0LiAgTWF5IGJlIGxlc3MgdGhhbiBISUdIRVNUX1BST1RPQ09MLgogIyBXZSBpbnRlbnRpb25hbGx5IHdyaXRlIGEgcHJvdG9jb2wgdGhhdCBQeXRob24gMi54IGNhbm5vdCByZWFkOwogIyB0aGVyZSBhcmUgdG9vIG1hbnkgaXNzdWVzIHdpdGggdGhhdC4KIERFRkFVTFRfUFJPVE9DT0wgPSAzCiAKLSMgV2h5IHVzZSBzdHJ1Y3QucGFjaygpIGZvciBwaWNrbGluZyBidXQgbWFyc2hhbC5sb2FkcygpIGZvcgotIyB1bnBpY2tsaW5nPyAgc3RydWN0LnBhY2soKSBpcyA0MCUgZmFzdGVyIHRoYW4gbWFyc2hhbC5kdW1wcygpLCBidXQKLSMgbWFyc2hhbC5sb2FkcygpIGlzIHR3aWNlIGFzIGZhc3QgYXMgc3RydWN0LnVucGFjaygpIQotbWxvYWRzID0gbWFyc2hhbC5sb2FkcwotCiBjbGFzcyBQaWNrbGVFcnJvcihFeGNlcHRpb24pOgogICAgICIiIkEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIHRoZSBvdGhlciBwaWNrbGluZyBleGNlcHRpb25zLiIiIgogICAgIHBhc3MKQEAgLTE2OCw3ICsxNjUsMTgxIEBACiBCSU5CWVRFUyAgICAgICA9IGInQicgICAjIHB1c2ggYnl0ZXM7IGNvdW50ZWQgYmluYXJ5IHN0cmluZyBhcmd1bWVudAogU0hPUlRfQklOQllURVMgPSBiJ0MnICAgIyAgIiAgICAgIiAgIDsgICAgIiAgICAgICIgICAgICAgIiAgICAgICIgPCAyNTYgYnl0ZXMKIAotX19hbGxfXy5leHRlbmQoW3ggZm9yIHggaW4gZGlyKCkgaWYgcmUubWF0Y2goIltBLVpdW0EtWjAtOV9dKyQiLHgpXSkKKyMgUHJvdG9jb2wgNAorU0hPUlRfQklOVU5JQ09ERSA9IGInXHg4YycgICMgcHVzaCBzaG9ydCBzdHJpbmc7IFVURi04IGxlbmd0aCA8IDI1NiBieXRlcworQklOVU5JQ09ERTggICAgICA9IGInXHg4ZCcgICMgcHVzaCB2ZXJ5IGxvbmcgc3RyaW5nCitCSU5CWVRFUzggICAgICAgID0gYidceDhlJyAgIyBwdXNoIHZlcnkgbG9uZyBieXRlcyBzdHJpbmcKK0VNUFRZX1NFVCAgICAgICAgPSBiJ1x4OGYnICAjIHB1c2ggZW1wdHkgc2V0IG9uIHRoZSBzdGFjaworQURESVRFTVMgICAgICAgICA9IGInXHg5MCcgICMgbW9kaWZ5IHNldCBieSBhZGRpbmcgdG9wbW9zdCBzdGFjayBpdGVtcworRlJPWkVOU0VUICAgICAgICA9IGInXHg5MScgICMgYnVpbGQgZnJvemVuc2V0IGZyb20gdG9wbW9zdCBzdGFjayBpdGVtcworTkVXT0JKX0VYICAgICAgICA9IGInXHg5MicgICMgbGlrZSBORVdPQkogYnV0IHdvcmsgd2l0aCBrZXl3b3JkIG9ubHkgYXJndW1lbnRzCitTVEFDS19HTE9CQUwgICAgID0gYidceDkzJyAgIyBzYW1lIGFzIEdMT0JBTCBidXQgdXNpbmcgbmFtZXMgb24gdGhlIHN0YWNrcworTUVNT0laRSAgICAgICAgICA9IGInXHg5NCcgICMgc3RvcmUgdG9wIG9mIHRoZSBzdGFjayBpbiBtZW1vCitGUkFNRSAgICAgICAgICAgID0gYidceDk1JyAgIyBpbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lCisKK19fYWxsX18uZXh0ZW5kKFt4IGZvciB4IGluIGRpcigpIGlmIHJlLm1hdGNoKCJbQS1aXVtBLVowLTlfXSskIiwgeCldKQorCisKK2NsYXNzIF9GcmFtZXI6CisKKyAgICBfRlJBTUVfU0laRV9UQVJHRVQgPSA2NCAqIDEwMjQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3dyaXRlKToKKyAgICAgICAgc2VsZi5maWxlX3dyaXRlID0gZmlsZV93cml0ZQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgc3RhcnRfZnJhbWluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gaW8uQnl0ZXNJTygpCisKKyAgICBkZWYgZW5kX2ZyYW1pbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZSBhbmQgc2VsZi5jdXJyZW50X2ZyYW1lLnRlbGwoKSA+IDA6CisgICAgICAgICAgICBzZWxmLmNvbW1pdF9mcmFtZShmb3JjZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIGNvbW1pdF9mcmFtZShzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGYgPSBzZWxmLmN1cnJlbnRfZnJhbWUKKyAgICAgICAgICAgIGlmIGYudGVsbCgpID49IHNlbGYuX0ZSQU1FX1NJWkVfVEFSR0VUIG9yIGZvcmNlOgorICAgICAgICAgICAgICAgIHdpdGggZi5nZXRidWZmZXIoKSBhcyBkYXRhOgorICAgICAgICAgICAgICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gc2VsZi5maWxlX3dyaXRlCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEZSQU1FKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShwYWNrKCI8USIsIG4pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jdXJyZW50X2ZyYW1lLndyaXRlKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3dyaXRlKGRhdGEpCisKKworY2xhc3MgX1VuZnJhbWVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfcmVhZCwgZmlsZV9yZWFkbGluZSwgZmlsZV90ZWxsPU5vbmUpOgorICAgICAgICBzZWxmLmZpbGVfcmVhZCA9IGZpbGVfcmVhZAorICAgICAgICBzZWxmLmZpbGVfcmVhZGxpbmUgPSBmaWxlX3JlYWRsaW5lCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiByZWFkKHNlbGYsIG4pOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWQobikKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBuICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZChuKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpIDwgbjoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBlbmQgb2YgZnJhbWUiKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZChuKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGFbLTFdICE9IGInXG4nOgorICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIGVuZCBvZiBmcmFtZSIpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkbGluZSgpCisKKyAgICBkZWYgbG9hZF9mcmFtZShzZWxmLCBmcmFtZV9zaXplKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lIGFuZCBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZCgpICE9IGInJzoKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAiYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lIGJlZm9yZSBlbmQgb2YgY3VycmVudCBmcmFtZSIpCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IGlvLkJ5dGVzSU8oc2VsZi5maWxlX3JlYWQoZnJhbWVfc2l6ZSkpCisKKworIyBUb29scyB1c2VkIGZvciBwaWNrbGluZy4KKworZGVmIF9nZXRhdHRyaWJ1dGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1GYWxzZSk6CisgICAgZG90dGVkX3BhdGggPSBuYW1lLnNwbGl0KCIuIikKKyAgICBpZiBub3QgYWxsb3dfcXVhbG5hbWUgYW5kIGxlbihkb3R0ZWRfcGF0aCkgPiAxOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9OyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgIGZvciBzdWJwYXRoIGluIGRvdHRlZF9wYXRoOgorICAgICAgICBpZiBzdWJwYXRoID09ICc8bG9jYWxzPic6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IGxvY2FsIGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCBzdWJwYXRoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgcmV0dXJuIG9iagorCitkZWYgd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1GYWxzZSk6CisgICAgIiIiRmluZCB0aGUgbW9kdWxlIGFuIG9iamVjdCBiZWxvbmcgdG8uIiIiCisgICAgbW9kdWxlX25hbWUgPSBnZXRhdHRyKG9iaiwgJ19fbW9kdWxlX18nLCBOb25lKQorICAgIGlmIG1vZHVsZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gbW9kdWxlX25hbWUKKyAgICBmb3IgbW9kdWxlX25hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgorICAgICAgICBpZiBtb2R1bGVfbmFtZSA9PSAnX19tYWluX18nIG9yIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lKSBpcyBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gJ19fbWFpbl9fJworCitkZWYgZW5jb2RlX2xvbmcoeCk6CisgICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KKyAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCisgICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KKworICAgID4+PiBlbmNvZGVfbG9uZygwKQorICAgIGInJworICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCisgICAgYidceGZmXHgwMCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCisgICAgYidceGZmXHg3ZicKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKKyAgICBiJ1x4MDBceGZmJworICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCisgICAgYidceDAwXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKKyAgICBiJ1x4ODAnCisgICAgPj4+IGVuY29kZV9sb25nKDEyNykKKyAgICBiJ1x4N2YnCisgICAgPj4+CisgICAgIiIiCisgICAgaWYgeCA9PSAwOgorICAgICAgICByZXR1cm4gYicnCisgICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQorICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgorICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgZGVjb2RlX2xvbmcoZGF0YSk6CisgICAgciIiIkRlY29kZSBhIGxvbmcgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorCisgICAgPj4+IGRlY29kZV9sb25nKGInJykKKyAgICAwCisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQorICAgIDI1NQorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKKyAgICAzMjc2NworICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKKyAgICAtMjU2CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQorICAgIC0zMjc2OAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQorICAgIC0xMjgKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKKyAgICAxMjcKKyAgICAiIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKKwogCiAjIFBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC0xNzgsOSArMzQ5LDkgQEAKICAgICAgICAgIiIiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgogCiAgICAgICAgIFRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlCi0gICAgICAgIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQKLSAgICAgICAgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yCi0gICAgICAgIFB5dGhvbiAzLjAuCisgICAgICAgIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlCisgICAgICAgIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yCisgICAgICAgIFB5dGhvbiAzLgogCiAgICAgICAgIFNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QKICAgICAgICAgcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUKQEAgLTE5Myw4ICszNjQsOCBAQAogICAgICAgICBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogICAgICAgICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICAgICAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24KLSAgICAgICAgMi54LCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LgorICAgICAgICBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLAorICAgICAgICBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHByb3RvY29sIGlzIE5vbmU6CiAgICAgICAgICAgICBwcm90b2NvbCA9IERFRkFVTFRfUFJPVE9DT0wKQEAgLTIwMyw5ICszNzQsMTEgQEAKICAgICAgICAgZWxpZiBub3QgMCA8PSBwcm90b2NvbCA8PSBISUdIRVNUX1BST1RPQ09MOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiICUgSElHSEVTVF9QUk9UT0NPTCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi53cml0ZSA9IGZpbGUud3JpdGUKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVfd3JpdGUgPSBmaWxlLndyaXRlCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZmlsZSBtdXN0IGhhdmUgYSAnd3JpdGUnIGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZnJhbWVyID0gX0ZyYW1lcihzZWxmLl9maWxlX3dyaXRlKQorICAgICAgICBzZWxmLndyaXRlID0gc2VsZi5mcmFtZXIud3JpdGUKICAgICAgICAgc2VsZi5tZW1vID0ge30KICAgICAgICAgc2VsZi5wcm90byA9IGludChwcm90b2NvbCkKICAgICAgICAgc2VsZi5iaW4gPSBwcm90b2NvbCA+PSAxCkBAIC0yMjcsMTMgKzQwMCwxNiBAQAogICAgICAgICAiIiJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIiIiCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5QaWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIndyaXRlIik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfZmlsZV93cml0ZSIpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoUFJPVE8gKyBieXRlcyhbc2VsZi5wcm90b10pKQorICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIHBhY2soIjxCIiwgc2VsZi5wcm90bykpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuZnJhbWVyLnN0YXJ0X2ZyYW1pbmcoKQogICAgICAgICBzZWxmLnNhdmUob2JqKQogICAgICAgICBzZWxmLndyaXRlKFNUT1ApCisgICAgICAgIHNlbGYuZnJhbWVyLmVuZF9mcmFtaW5nKCkKIAogICAgIGRlZiBtZW1vaXplKHNlbGYsIG9iaik6CiAgICAgICAgICIiIlN0b3JlIGFuIG9iamVjdCBpbiB0aGUgbWVtby4iIiIKQEAgLTI1MywzMSArNDI5LDM1IEBACiAgICAgICAgIGlmIHNlbGYuZmFzdDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBhc3NlcnQgaWQob2JqKSBub3QgaW4gc2VsZi5tZW1vCi0gICAgICAgIG1lbW9fbGVuID0gbGVuKHNlbGYubWVtbykKLSAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChtZW1vX2xlbikpCi0gICAgICAgIHNlbGYubWVtb1tpZChvYmopXSA9IG1lbW9fbGVuLCBvYmoKKyAgICAgICAgaWR4ID0gbGVuKHNlbGYubWVtbykKKyAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChpZHgpKQorICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBpZHgsIG9iagogCiAgICAgIyBSZXR1cm4gYSBQVVQgKEJJTlBVVCwgTE9OR19CSU5QVVQpIG9wY29kZSBzdHJpbmcsIHdpdGggYXJndW1lbnQgaS4KLSAgICBkZWYgcHV0KHNlbGYsIGksIHBhY2s9c3RydWN0LnBhY2spOgotICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIGJ5dGVzKFtpXSkKKyAgICBkZWYgcHV0KHNlbGYsIGlkeCk6CisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJldHVybiBNRU1PSVpFCisgICAgICAgIGVsaWYgc2VsZi5iaW46CisgICAgICAgICAgICBpZiBpZHggPCAyNTY6CisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIHBhY2soIjxCIiwgaWR4KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGkpCi0KLSAgICAgICAgcmV0dXJuIFBVVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKKyAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGlkeCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBQVVQgKyByZXByKGlkeCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgICMgUmV0dXJuIGEgR0VUIChCSU5HRVQsIExPTkdfQklOR0VUKSBvcGNvZGUgc3RyaW5nLCB3aXRoIGFyZ3VtZW50IGkuCi0gICAgZGVmIGdldChzZWxmLCBpLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgZ2V0KHNlbGYsIGkpOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIGJ5dGVzKFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQklOR0VUICsgcGFjaygiPEIiLCBpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5HRVQgKyBwYWNrKCI8SSIsIGkpCiAKICAgICAgICAgcmV0dXJuIEdFVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgIGRlZiBzYXZlKHNlbGYsIG9iaiwgc2F2ZV9wZXJzaXN0ZW50X2lkPVRydWUpOgorICAgICAgICBzZWxmLmZyYW1lci5jb21taXRfZnJhbWUoKQorCiAgICAgICAgICMgQ2hlY2sgZm9yIHBlcnNpc3RlbnQgaWQgKGRlZmluZWQgYnkgYSBzdWJjbGFzcykKICAgICAgICAgcGlkID0gc2VsZi5wZXJzaXN0ZW50X2lkKG9iaikKICAgICAgICAgaWYgcGlkIGlzIG5vdCBOb25lIGFuZCBzYXZlX3BlcnNpc3RlbnRfaWQ6CkBAIC0yODYsMjAgKzQ2NiwyMCBAQAogCiAgICAgICAgICMgQ2hlY2sgdGhlIG1lbW8KICAgICAgICAgeCA9IHNlbGYubWVtby5nZXQoaWQob2JqKSkKLSAgICAgICAgaWYgeDoKKyAgICAgICAgaWYgeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5nZXQoeFswXSkpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHRoZSB0eXBlIGRpc3BhdGNoIHRhYmxlCiAgICAgICAgIHQgPSB0eXBlKG9iaikKICAgICAgICAgZiA9IHNlbGYuZGlzcGF0Y2guZ2V0KHQpCi0gICAgICAgIGlmIGY6CisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmKHNlbGYsIG9iaikgIyBDYWxsIHVuYm91bmQgbWV0aG9kIHdpdGggZXhwbGljaXQgc2VsZgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayBwcml2YXRlIGRpc3BhdGNoIHRhYmxlIGlmIGFueSwgb3IgZWxzZSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCiAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIoc2VsZiwgJ2Rpc3BhdGNoX3RhYmxlJywgZGlzcGF0Y2hfdGFibGUpLmdldCh0KQotICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKG9iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgY2xhc3Mgd2l0aCBhIGN1c3RvbSBtZXRhY2xhc3M7IHRyZWF0IGFzIHJlZ3VsYXIgY2xhc3MKQEAgLTMxMywxMSArNDkzLDExIEBACiAKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgX19yZWR1Y2VfZXhfXyBtZXRob2QsIGZhbGwgYmFjayB0byBfX3JlZHVjZV9fCiAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX2V4X18iLCBOb25lKQotICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKHNlbGYucHJvdG8pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfXyIsIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2UoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIkNhbid0IHBpY2tsZSAlciBvYmplY3Q6ICVyIiAlCkBAIC0zNTMsMjQgKzUzMywzMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi53cml0ZShQRVJTSUQgKyBzdHIocGlkKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKIAotICAgIGRlZiBzYXZlX3JlZHVjZShzZWxmLCBmdW5jLCBhcmdzLCBzdGF0ZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUsIG9iaj1Ob25lKToKKyAgICBkZWYgc2F2ZV9yZWR1Y2Uoc2VsZiwgZnVuYywgYXJncywgc3RhdGU9Tm9uZSwgbGlzdGl0ZW1zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRpY3RpdGVtcz1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgICAgICMgVGhpcyBBUEkgaXMgY2FsbGVkIGJ5IHNvbWUgc3ViY2xhc3NlcwogCi0gICAgICAgICMgQXNzZXJ0IHRoYXQgYXJncyBpcyBhIHR1cGxlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsIHR1cGxlKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBhIHR1cGxlIikKLQotICAgICAgICAjIEFzc2VydCB0aGF0IGZ1bmMgaXMgY2FsbGFibGUKKyAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIG11c3QgYmUgYSB0dXBsZSIpCiAgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmdW5jKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImZ1bmMgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBjYWxsYWJsZSIpCisgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJmdW5jIGZyb20gc2F2ZV9yZWR1Y2UoKSBtdXN0IGJlIGNhbGxhYmxlIikKIAogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogCi0gICAgICAgICMgUHJvdG9jb2wgMiBzcGVjaWFsIGNhc2U6IGlmIGZ1bmMncyBuYW1lIGlzIF9fbmV3b2JqX18sIHVzZSBORVdPQkoKLSAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyIGFuZCBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICIiKSA9PSAiX19uZXdvYmpfXyI6Ci0gICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgdG8KKyAgICAgICAgZnVuY19uYW1lID0gZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiIikKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0IGFuZCBmdW5jX25hbWUgPT0gIl9fbmV3b2JqX2V4X18iOgorICAgICAgICAgICAgY2xzLCBhcmdzLCBrd2FyZ3MgPSBhcmdzCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICJfX25ld19fIik6CisgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJnc1swXSBmcm9tIHt9IGFyZ3MgaGFzIG5vIF9fbmV3X18iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmNfbmFtZSkpCisgICAgICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIGNscyBpcyBub3Qgb2JqLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzWzBdIGZyb20ge30gYXJncyBoYXMgdGhlIHdyb25nIGNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jX25hbWUpKQorICAgICAgICAgICAgc2F2ZShjbHMpCisgICAgICAgICAgICBzYXZlKGFyZ3MpCisgICAgICAgICAgICBzYXZlKGt3YXJncykKKyAgICAgICAgICAgIHdyaXRlKE5FV09CSl9FWCkKKyAgICAgICAgZWxpZiBzZWxmLnByb3RvID49IDIgYW5kIGZ1bmNfbmFtZSA9PSAiX19uZXdvYmpfXyI6CisgICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgb3IgbmV3ZXIgdG8KICAgICAgICAgICAgICMgdXNlIHRoZSBtb3JlIGVmZmljaWVudCBORVdPQkogb3Bjb2RlLCB3aGlsZSBzdGlsbAogICAgICAgICAgICAgIyBhbGxvd2luZyBwcm90b2NvbCAwIGFuZCAxIHRvIHdvcmsgbm9ybWFsbHkuICBGb3IgdGhpcyB0bwogICAgICAgICAgICAgIyB3b3JrLCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBzaG91bGQgYmUKQEAgLTQxMyw3ICs2MDIsMTMgQEAKICAgICAgICAgICAgIHdyaXRlKFJFRFVDRSkKIAogICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICBpZiBpZChvYmopIGluIHNlbGYubWVtbzoKKyAgICAgICAgICAgICAgICB3cml0ZShQT1AgKyBzZWxmLmdldChzZWxmLm1lbW9baWQob2JqKV1bMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgICAgICMgTW9yZSBuZXcgc3BlY2lhbCBjYXNlcyAodGhhdCB3b3JrIHdpdGggb2xkZXIgcHJvdG9jb2xzIGFzCiAgICAgICAgICMgd2VsbCk6IHdoZW4gX19yZWR1Y2VfXyByZXR1cm5zIGEgdHVwbGUgd2l0aCA0IG9yIDUgaXRlbXMsCkBAIC00MzgsMjIgKzYzMywxNCBAQAogICAgICAgICBzZWxmLndyaXRlKE5PTkUpCiAgICAgZGlzcGF0Y2hbdHlwZShOb25lKV0gPSBzYXZlX25vbmUKIAotICAgIGRlZiBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik6Ci0gICAgICAgIHNlbGYuc2F2ZV9nbG9iYWwoRWxsaXBzaXMsICdFbGxpcHNpcycpCi0gICAgZGlzcGF0Y2hbdHlwZShFbGxpcHNpcyldID0gc2F2ZV9lbGxpcHNpcwotCi0gICAgZGVmIHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKToKLSAgICAgICAgc2VsZi5zYXZlX2dsb2JhbChOb3RJbXBsZW1lbnRlZCwgJ05vdEltcGxlbWVudGVkJykKLSAgICBkaXNwYXRjaFt0eXBlKE5vdEltcGxlbWVudGVkKV0gPSBzYXZlX25vdGltcGxlbWVudGVkCi0KICAgICBkZWYgc2F2ZV9ib29sKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBORVdUUlVFIG9yIE5FV0ZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShORVdUUlVFIGlmIG9iaiBlbHNlIE5FV0ZBTFNFKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShvYmogYW5kIFRSVUUgb3IgRkFMU0UpCisgICAgICAgICAgICBzZWxmLndyaXRlKFRSVUUgaWYgb2JqIGVsc2UgRkFMU0UpCiAgICAgZGlzcGF0Y2hbYm9vbF0gPSBzYXZlX2Jvb2wKIAotICAgIGRlZiBzYXZlX2xvbmcoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgIyBJZiB0aGUgaW50IGlzIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaWduZWQgNC1ieXRlIDIncy1jb21wCiAgICAgICAgICAgICAjIGZvcm1hdCwgd2UgY2FuIHN0b3JlIGl0IG1vcmUgZWZmaWNpZW50bHkgdGhhbiB0aGUgZ2VuZXJhbApAQCAtNDYxLDkzICs2NDgsOTUgQEAKICAgICAgICAgICAgICMgRmlyc3Qgb25lLSBhbmQgdHdvLWJ5dGUgdW5zaWduZWQgaW50czoKICAgICAgICAgICAgIGlmIG9iaiA+PSAwOgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBieXRlcyhbb2JqXSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMSArIHBhY2soIjxCIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgaWYgb2JqIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgYnl0ZXMoW29iaiYweGZmLCBvYmo+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgcGFjaygiPEgiLCBvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgTmV4dCBjaGVjayBmb3IgNC1ieXRlIHNpZ25lZCBpbnRzOgotICAgICAgICAgICAgaGlnaF9iaXRzID0gb2JqID4+IDMxICAjIG5vdGUgdGhhdCBQeXRob24gc2hpZnQgc2lnbi1leHRlbmRzCi0gICAgICAgICAgICBpZiBoaWdoX2JpdHMgPT0gMCBvciBoaWdoX2JpdHMgPT0gLTE6Ci0gICAgICAgICAgICAgICAgIyBBbGwgaGlnaCBiaXRzIGFyZSBjb3BpZXMgb2YgYml0IDIqKjMxLCBzbyB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICAjIGZpdHMgaW4gYSA0LWJ5dGUgc2lnbmVkIGludC4KKyAgICAgICAgICAgIGlmIC0weDgwMDAwMDAwIDw9IG9iaiA8PSAweDdmZmZmZmZmOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UICsgcGFjaygiPGkiLCBvYmopKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6CiAgICAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlX2xvbmcob2JqKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQogICAgICAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkcxICsgYnl0ZXMoW25dKSArIGVuY29kZWQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkc0ICsgcGFjaygiPGkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi53cml0ZShMT05HICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInTFxuJykKICAgICBkaXNwYXRjaFtpbnRdID0gc2F2ZV9sb25nCiAKLSAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2Zsb2F0KHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgc2VsZi53cml0ZShCSU5GTE9BVCArIHBhY2soJz5kJywgb2JqKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoRkxPQVQgKyByZXByKG9iaikuZW5jb2RlKCJhc2NpaSIpICsgYidcbicpCiAgICAgZGlzcGF0Y2hbZmxvYXRdID0gc2F2ZV9mbG9hdAogCi0gICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9ieXRlcyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvIDwgMzoKLSAgICAgICAgICAgIGlmIGxlbihvYmopID09IDA6CisgICAgICAgICAgICBpZiBub3Qgb2JqOiAjIGJ5dGVzIG9iamVjdCBpcyBlbXB0eQogICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoYnl0ZXMsICgpLCBvYmo9b2JqKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGNvZGVjcy5lbmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG9iaiwgJ2xhdGluMScpLCAnbGF0aW4xJyksIG9iaj1vYmopCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbiA9IGxlbihvYmopCi0gICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTkJZVEVTICsgYnl0ZXMoW25dKSArIGJ5dGVzKG9iaikpCisgICAgICAgIGlmIG4gPD0gMHhmZjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBwYWNrKCI8QiIsIG4pICsgb2JqKQorICAgICAgICBlbGlmIG4gPiAweGZmZmZmZmZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTOCArIHBhY2soIjxRIiwgbikgKyBvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIGJ5dGVzKG9iaikpCisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIG9iaikKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtieXRlc10gPSBzYXZlX2J5dGVzCiAKLSAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBlbmNvZGVkID0gb2JqLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCiAgICAgICAgICAgICBuID0gbGVuKGVuY29kZWQpCi0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREUgKyBwYWNrKCI8SSIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGlmIG4gPD0gMHhmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOVU5JQ09ERSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgZWxpZiBuID4gMHhmZmZmZmZmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERTggKyBwYWNrKCI8USIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFICsgcGFjaygiPEkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXFwiLCAiXFx1MDA1YyIpCiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXG4iLCAiXFx1MDAwYSIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKFVOSUNPREUgKyBieXRlcyhvYmouZW5jb2RlKCdyYXctdW5pY29kZS1lc2NhcGUnKSkgKworICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgb2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykgKwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuJykKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtzdHJdID0gc2F2ZV9zdHIKIAogICAgIGRlZiBzYXZlX3R1cGxlKHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotICAgICAgICBwcm90byA9IHNlbGYucHJvdG8KLQotICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA9PSAwOgotICAgICAgICAgICAgaWYgcHJvdG86Ci0gICAgICAgICAgICAgICAgd3JpdGUoRU1QVFlfVFVQTEUpCisgICAgICAgIGlmIG5vdCBvYmo6ICMgdHVwbGUgaXMgZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfVFVQTEUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKE1BUksgKyBUVVBMRSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBUVVBMRSkKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgIG4gPSBsZW4ob2JqKQogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KLSAgICAgICAgaWYgbiA8PSAzIGFuZCBwcm90byA+PSAyOgorICAgICAgICBpZiBuIDw9IDMgYW5kIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCiAgICAgICAgICAgICAjIFN1YnRsZS4gIFNhbWUgYXMgaW4gdGhlIGJpZyBjb21tZW50IGJlbG93LgogICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICAgICAgd3JpdGUoUE9QICogbiArIGdldCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFBPUCAqIG4gKyBnZXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKICAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBwcm90byAwIG9yIHByb3RvIDEgYW5kIHR1cGxlIGlzbid0IGVtcHR5LCBvciBwcm90byA+IDEgYW5kIHR1cGxlCiAgICAgICAgICMgaGFzIG1vcmUgdGhhbiAzIGVsZW1lbnRzLgorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgd3JpdGUoTUFSSykKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgc2F2ZShlbGVtZW50KQpAQCAtNTYxLDI1ICs3NTAsMjMgQEAKICAgICAgICAgICAgICMgY291bGQgaGF2ZSBiZWVuIGRvbmUgaW4gdGhlICJmb3IgZWxlbWVudCIgbG9vcCBpbnN0ZWFkLCBidXQKICAgICAgICAgICAgICMgcmVjdXJzaXZlIHR1cGxlcyBhcmUgYSByYXJlIHRoaW5nLgogICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgIGlmIHByb3RvOgorICAgICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBnZXQpCiAgICAgICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBQT1BfTUFSSyBub3QgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QICogKG4rMSkgKyBnZXQpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vIHJlY3Vyc2lvbi4KLSAgICAgICAgc2VsZi53cml0ZShUVVBMRSkKKyAgICAgICAgd3JpdGUoVFVQTEUpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICBkaXNwYXRjaFt0dXBsZV0gPSBzYXZlX3R1cGxlCiAKICAgICBkZWYgc2F2ZV9saXN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfTElTVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0xJU1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBMSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgTElTVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9hcHBlbmRzKG9iaikKQEAgLTU5OSwxNyArNzg2LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB4ID0gbmV4dChpdGVtcykKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCh4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02MjAsMTQgKzc5OSwxNCBAQAogICAgICAgICAgICAgICAgIHNhdmUodG1wWzBdKQogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHNhdmVfZGljdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0RJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0RJQ1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9ESUNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIERJQ1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfc2V0aXRlbXMob2JqLml0ZW1zKCkpCkBAIC02NDgsMTYgKzgyNyw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQobmV4dChpdGVtcykpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTY3MSw1NSArODQzLDEwOSBAQAogICAgICAgICAgICAgICAgIHNhdmUodikKICAgICAgICAgICAgICAgICB3cml0ZShTRVRJVEVNKQogICAgICAgICAgICAgIyBlbHNlIHRtcCBpcyBlbXB0eSwgYW5kIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUsIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX3NldChzZWxmLCBvYmopOgorICAgICAgICBzYXZlID0gc2VsZi5zYXZlCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQorCisgICAgICAgIGlmIHNlbGYucHJvdG8gPCA0OgorICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShzZXQsIChsaXN0KG9iaiksKSwgb2JqPW9iaikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKEVNUFRZX1NFVCkKKyAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKworICAgICAgICBpdCA9IGl0ZXIob2JqKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYmF0Y2ggPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKKyAgICAgICAgICAgIG4gPSBsZW4oYmF0Y2gpCisgICAgICAgICAgICBpZiBuID4gMDoKKyAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJhdGNoOgorICAgICAgICAgICAgICAgICAgICBzYXZlKGl0ZW0pCisgICAgICAgICAgICAgICAgd3JpdGUoQURESVRFTVMpCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgIGRpc3BhdGNoW3NldF0gPSBzYXZlX3NldAorCisgICAgZGVmIHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik6CisgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCisKKyAgICAgICAgaWYgc2VsZi5wcm90byA8IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGZyb3plbnNldCwgKGxpc3Qob2JqKSwpLCBvYmo9b2JqKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoTUFSSykKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2JqOgorICAgICAgICAgICAgc2F2ZShpdGVtKQorCisgICAgICAgIGlmIGlkKG9iaikgaW4gc2VsZi5tZW1vOgorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICB3cml0ZShQT1BfTUFSSyArIHNlbGYuZ2V0KHNlbGYubWVtb1tpZChvYmopXVswXSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShGUk9aRU5TRVQpCisgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisgICAgZGlzcGF0Y2hbZnJvemVuc2V0XSA9IHNhdmVfZnJvemVuc2V0CisKKyAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUpOgogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwogCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIob2JqLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IG9iai5fX25hbWVfXwogCi0gICAgICAgIG1vZHVsZSA9IGdldGF0dHIob2JqLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlID0gd2hpY2htb2R1bGUob2JqLCBuYW1lKQotCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICAgICAga2xhc3MgPSBnZXRhdHRyKG1vZCwgbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgICAgIG9iajIgPSBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBLZXlFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCBmb3VuZCBhcyAlcy4lcyIgJQotICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYga2xhc3MgaXMgbm90IG9iajoKKyAgICAgICAgICAgIGlmIG9iajIgaXMgbm90IG9iajoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJXMuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICAgICAgaWYgY29kZToKICAgICAgICAgICAgICAgICBhc3NlcnQgY29kZSA+IDAKICAgICAgICAgICAgICAgICBpZiBjb2RlIDw9IDB4ZmY6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDEgKyBieXRlcyhbY29kZV0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgcGFjaygiPEIiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbGlmIGNvZGUgPD0gMHhmZmZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgYnl0ZXMoW2NvZGUmMHhmZiwgY29kZT4+OF0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgcGFjaygiPEgiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQ0ICsgcGFjaygiPGkiLCBjb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBOb24tQVNDSUkgaWRlbnRpZmllcnMgYXJlIHN1cHBvcnRlZCBvbmx5IHdpdGggcHJvdG9jb2xzID49IDMuCi0gICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMzoKLSAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgInV0Zi04IikgKyBiJ1xuJyArCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuc2F2ZShuYW1lKQorICAgICAgICAgICAgd3JpdGUoU1RBQ0tfR0xPQkFMKQorICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMzoKKyAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAidXRmLTgiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJ1dGYtOCIpICsgYidcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZWxmLmZpeF9pbXBvcnRzOgotICAgICAgICAgICAgICAgIGlmIChtb2R1bGUsIG5hbWUpIGluIF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIG5hbWUgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElOR1sobW9kdWxlLCBuYW1lKV0KLSAgICAgICAgICAgICAgICBpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORzoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElOR1ttb2R1bGVdCisgICAgICAgICAgICAgICAgcl9uYW1lX21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORworICAgICAgICAgICAgICAgIHJfaW1wb3J0X21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HCisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZV9uYW1lLCBuYW1lKSBpbiByX25hbWVfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIG5hbWUgPSByX25hbWVfbWFwcGluZ1sobW9kdWxlX25hbWUsIG5hbWUpXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHJfaW1wb3J0X21hcHBpbmc6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gcl9pbXBvcnRfbWFwcGluZ1ttb2R1bGVfbmFtZV0KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGUsICJhc2NpaSIpICsgYidcbicgKworICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAiYXNjaWkiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhuYW1lLCAiYXNjaWkiKSArIGInXG4nKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKApAQCAtNzI5LDU4ICs5NTUsOCBAQAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgZGlzcGF0Y2hbRnVuY3Rpb25UeXBlXSA9IHNhdmVfZ2xvYmFsCi0gICAgZGlzcGF0Y2hbQnVpbHRpbkZ1bmN0aW9uVHlwZV0gPSBzYXZlX2dsb2JhbAogICAgIGRpc3BhdGNoW3R5cGVdID0gc2F2ZV9nbG9iYWwKIAotIyBQaWNrbGluZyBoZWxwZXJzCi0KLWRlZiBfa2VlcF9hbGl2ZSh4LCBtZW1vKToKLSAgICAiIiJLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHggaW4gdGhlIG1lbW8uCi0KLSAgICBCZWNhdXNlIHdlIHJlbWVtYmVyIG9iamVjdHMgYnkgdGhlaXIgaWQsIHdlIGhhdmUKLSAgICB0byBhc3N1cmUgdGhhdCBwb3NzaWJseSB0ZW1wb3Jhcnkgb2JqZWN0cyBhcmUga2VwdAotICAgIGFsaXZlIGJ5IHJlZmVyZW5jaW5nIHRoZW0uCi0gICAgV2Ugc3RvcmUgYSByZWZlcmVuY2UgYXQgdGhlIGlkIG9mIHRoZSBtZW1vLCB3aGljaCBzaG91bGQKLSAgICBub3JtYWxseSBub3QgYmUgdXNlZCB1bmxlc3Mgc29tZW9uZSB0cmllcyB0byBkZWVwY29weQotICAgIHRoZSBtZW1vIGl0c2VsZi4uLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgbWVtb1tpZChtZW1vKV0uYXBwZW5kKHgpCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAjIGFoYSwgdGhpcyBpcyB0aGUgZmlyc3Qgb25lIDotKQotICAgICAgICBtZW1vW2lkKG1lbW8pXT1beF0KLQotCi0jIEEgY2FjaGUgZm9yIHdoaWNobW9kdWxlKCksIG1hcHBpbmcgYSBmdW5jdGlvbiBvYmplY3QgdG8gdGhlIG5hbWUgb2YKLSMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGZvdW5kLgotCi1jbGFzc21hcCA9IHt9ICMgY2FsbGVkIGNsYXNzbWFwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCi1kZWYgd2hpY2htb2R1bGUoZnVuYywgZnVuY25hbWUpOgotICAgICIiIkZpZ3VyZSBvdXQgdGhlIG1vZHVsZSBpbiB3aGljaCBhIGZ1bmN0aW9uIG9jY3Vycy4KLQotICAgIFNlYXJjaCBzeXMubW9kdWxlcyBmb3IgdGhlIG1vZHVsZS4KLSAgICBDYWNoZSBpbiBjbGFzc21hcC4KLSAgICBSZXR1cm4gYSBtb2R1bGUgbmFtZS4KLSAgICBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IGJlIGZvdW5kLCByZXR1cm4gIl9fbWFpbl9fIi4KLSAgICAiIiIKLSAgICAjIFB5dGhvbiBmdW5jdGlvbnMgc2hvdWxkIGFsd2F5cyBnZXQgYW4gX19tb2R1bGVfXyBmcm9tIHRoZWlyIGdsb2JhbHMuCi0gICAgbW9kID0gZ2V0YXR0cihmdW5jLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgaWYgbW9kIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gbW9kCi0gICAgaWYgZnVuYyBpbiBjbGFzc21hcDoKLSAgICAgICAgcmV0dXJuIGNsYXNzbWFwW2Z1bmNdCi0KLSAgICBmb3IgbmFtZSwgbW9kdWxlIGluIGxpc3Qoc3lzLm1vZHVsZXMuaXRlbXMoKSk6Ci0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgY29udGludWUgIyBza2lwIGR1bW15IHBhY2thZ2UgZW50cmllcwotICAgICAgICBpZiBuYW1lICE9ICdfX21haW5fXycgYW5kIGdldGF0dHIobW9kdWxlLCBmdW5jbmFtZSwgTm9uZSkgaXMgZnVuYzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgbmFtZSA9ICdfX21haW5fXycKLSAgICBjbGFzc21hcFtmdW5jXSA9IG5hbWUKLSAgICByZXR1cm4gbmFtZQotCiAKICMgVW5waWNrbGluZyBtYWNoaW5lcnkKIApAQCAtODA4LDggKzk4NCw4IEBACiAgICAgICAgIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQKICAgICAgICAgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucmVhZGxpbmUgPSBmaWxlLnJlYWRsaW5lCi0gICAgICAgIHNlbGYucmVhZCA9IGZpbGUucmVhZAorICAgICAgICBzZWxmLl9maWxlX3JlYWRsaW5lID0gZmlsZS5yZWFkbGluZQorICAgICAgICBzZWxmLl9maWxlX3JlYWQgPSBmaWxlLnJlYWQKICAgICAgICAgc2VsZi5tZW1vID0ge30KICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCiAgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCkBAIC04MjMsMTYgKzk5OSwyMCBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFVucGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuVW5waWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInJlYWQiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3JlYWQiKToKICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiVW5waWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl91bmZyYW1lciA9IF9VbmZyYW1lcihzZWxmLl9maWxlX3JlYWQsIHNlbGYuX2ZpbGVfcmVhZGxpbmUpCisgICAgICAgIHNlbGYucmVhZCA9IHNlbGYuX3VuZnJhbWVyLnJlYWQKKyAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX3VuZnJhbWVyLnJlYWRsaW5lCiAgICAgICAgIHNlbGYubWFyayA9IG9iamVjdCgpICMgYW55IG5ldyB1bmlxdWUgb2JqZWN0CiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQogICAgICAgICBzZWxmLmFwcGVuZCA9IHNlbGYuc3RhY2suYXBwZW5kCisgICAgICAgIHNlbGYucHJvdG8gPSAwCiAgICAgICAgIHJlYWQgPSBzZWxmLnJlYWQKICAgICAgICAgZGlzcGF0Y2ggPSBzZWxmLmRpc3BhdGNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9IHJlYWQoMSkKICAgICAgICAgICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtODYyLDEyICsxMDQyLDE5IEBACiAgICAgZGlzcGF0Y2ggPSB7fQogCiAgICAgZGVmIGxvYWRfcHJvdG8oc2VsZik6Ci0gICAgICAgIHByb3RvID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgcHJvdG8gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgaWYgbm90IDAgPD0gcHJvdG8gPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbDogJWQiICUgcHJvdG8pCiAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bwogICAgIGRpc3BhdGNoW1BST1RPWzBdXSA9IGxvYWRfcHJvdG8KIAorICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYpOgorICAgICAgICBmcmFtZV9zaXplLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGZyYW1lX3NpemUgPiBzeXMubWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyYW1lIHNpemUgPiBzeXMubWF4c2l6ZTogJWQiICUgZnJhbWVfc2l6ZSkKKyAgICAgICAgc2VsZi5fdW5mcmFtZXIubG9hZF9mcmFtZShmcmFtZV9zaXplKQorICAgIGRpc3BhdGNoW0ZSQU1FWzBdXSA9IGxvYWRfZnJhbWUKKwogICAgIGRlZiBsb2FkX3BlcnNpZChzZWxmKToKICAgICAgICAgcGlkID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucGVyc2lzdGVudF9sb2FkKHBpZCkpCkBAIC04OTcsNDMgKzEwODQsNDAgQEAKICAgICAgICAgZWxpZiBkYXRhID09IFRSVUVbMTpdOgogICAgICAgICAgICAgdmFsID0gVHJ1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCisgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKICAgICAgICAgc2VsZi5hcHBlbmQodmFsKQogICAgIGRpc3BhdGNoW0lOVFswXV0gPSBsb2FkX2ludAogCiAgICAgZGVmIGxvYWRfYmluaW50KHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVFswXV0gPSBsb2FkX2JpbmludAogCiAgICAgZGVmIGxvYWRfYmluaW50MShzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQob3JkKHNlbGYucmVhZCgxKSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZCgxKVswXSkKICAgICBkaXNwYXRjaFtCSU5JTlQxWzBdXSA9IGxvYWRfYmluaW50MQogCiAgICAgZGVmIGxvYWRfYmluaW50MihzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQobWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDJbMF1dID0gbG9hZF9iaW5pbnQyCiAKICAgICBkZWYgbG9hZF9sb25nKHNlbGYpOgotICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09ICdMJzoKKyAgICAgICAgdmFsID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09IGInTCdbMF06CiAgICAgICAgICAgICB2YWwgPSB2YWxbOi0xXQogICAgICAgICBzZWxmLmFwcGVuZChpbnQodmFsLCAwKSkKICAgICBkaXNwYXRjaFtMT05HWzBdXSA9IGxvYWRfbG9uZwogCiAgICAgZGVmIGxvYWRfbG9uZzEoc2VsZik6Ci0gICAgICAgIG4gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBuID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobikKICAgICAgICAgc2VsZi5hcHBlbmQoZGVjb2RlX2xvbmcoZGF0YSkpCiAgICAgZGlzcGF0Y2hbTE9ORzFbMF1dID0gbG9hZF9sb25nMQogCiAgICAgZGVmIGxvYWRfbG9uZzQoc2VsZik6Ci0gICAgICAgIG4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBuIDwgMDoKICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzCi0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HNFswXV0gPSBsb2FkX2xvbmc0CkBAIC05NDIsMzkgKzExMjYsMzYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoZmxvYXQoc2VsZi5yZWFkbGluZSgpWzotMV0pKQogICAgIGRpc3BhdGNoW0ZMT0FUWzBdXSA9IGxvYWRfZmxvYXQKIAotICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9iaW5mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc+ZCcsIHNlbGYucmVhZCg4KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklORkxPQVRbMF1dID0gbG9hZF9iaW5mbG9hdAogCiAgICAgZGVmIGxvYWRfc3RyaW5nKHNlbGYpOgotICAgICAgICBvcmlnID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIHJlcCA9IG9yaWdbOi0xXQotICAgICAgICBmb3IgcSBpbiAoYiciJywgYiInIik6ICMgZG91YmxlIG9yIHNpbmdsZSBxdW90ZQotICAgICAgICAgICAgaWYgcmVwLnN0YXJ0c3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPCAyIG9yIG5vdCByZXAuZW5kc3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKQotICAgICAgICAgICAgICAgIHJlcCA9IHJlcFtsZW4ocSk6LWxlbihxKV0KLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBkYXRhID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgIyBTdHJpcCBvdXRlcm1vc3QgcXVvdGVzCisgICAgICAgIGlmIGxlbihkYXRhKSA+PSAyIGFuZCBkYXRhWzBdID09IGRhdGFbLTFdIGFuZCBkYXRhWzBdIGluIGInIlwnJzoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzE6LTFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnNlY3VyZSBzdHJpbmcgcGlja2xlOiAlciIgJSBvcmlnKQotICAgICAgICBzZWxmLmFwcGVuZChjb2RlY3MuZXNjYXBlX2RlY29kZShyZXApWzBdCisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoInRoZSBTVFJJTkcgb3Bjb2RlIGFyZ3VtZW50IG11c3QgYmUgcXVvdGVkIikKKyAgICAgICAgc2VsZi5hcHBlbmQoY29kZWNzLmVzY2FwZV9kZWNvZGUoZGF0YSlbMF0KICAgICAgICAgICAgICAgICAgICAgLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykpCiAgICAgZGlzcGF0Y2hbU1RSSU5HWzBdXSA9IGxvYWRfc3RyaW5nCiAKICAgICBkZWYgbG9hZF9iaW5zdHJpbmcoc2VsZik6CiAgICAgICAgICMgRGVwcmVjYXRlZCBCSU5TVFJJTkcgdXNlcyBzaWduZWQgMzItYml0IGxlbmd0aAotICAgICAgICBsZW4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbGVuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA8IDA6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKQogICAgICAgICB2YWx1ZSA9IHN0cihkYXRhLCBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKICAgICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCiAgICAgZGlzcGF0Y2hbQklOU1RSSU5HWzBdXSA9IGxvYWRfYmluc3RyaW5nCiAKLSAgICBkZWYgbG9hZF9iaW5ieXRlcyhzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfYmluYnl0ZXMoc2VsZik6CiAgICAgICAgIGxlbiwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlZCBieXRlcyIgJSBtYXhzaXplKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKICAgICBkaXNwYXRjaFtCSU5CWVRFU1swXV0gPSBsb2FkX2JpbmJ5dGVzCiAKQEAgLTk4MiwyNSArMTE2MywzOSBAQAogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkbGluZSgpWzotMV0sICdyYXctdW5pY29kZS1lc2NhcGUnKSkKICAgICBkaXNwYXRjaFtVTklDT0RFWzBdXSA9IGxvYWRfdW5pY29kZQogCi0gICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCiAgICAgZGlzcGF0Y2hbQklOVU5JQ09ERVswXV0gPSBsb2FkX2JpbnVuaWNvZGUKIAorICAgIGRlZiBsb2FkX2JpbnVuaWNvZGU4KHNlbGYpOgorICAgICAgICBsZW4sID0gdW5wYWNrKCc8UScsIHNlbGYucmVhZCg4KSkKKyAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERTggZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQorICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCisgICAgZGlzcGF0Y2hbQklOVU5JQ09ERThbMF1dID0gbG9hZF9iaW51bmljb2RlOAorCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluc3RyaW5nKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBkYXRhID0gYnl0ZXMoc2VsZi5yZWFkKGxlbikpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKICAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTlNUUklOR1swXV0gPSBsb2FkX3Nob3J0X2JpbnN0cmluZwogCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluYnl0ZXMoc2VsZik6Ci0gICAgICAgIGxlbiA9IG9yZChzZWxmLnJlYWQoMSkpCi0gICAgICAgIHNlbGYuYXBwZW5kKGJ5dGVzKHNlbGYucmVhZChsZW4pKSkKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTkJZVEVTWzBdXSA9IGxvYWRfc2hvcnRfYmluYnl0ZXMKIAorICAgIGRlZiBsb2FkX3Nob3J0X2JpbnVuaWNvZGUoc2VsZik6CisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCisgICAgZGlzcGF0Y2hbU0hPUlRfQklOVU5JQ09ERVswXV0gPSBsb2FkX3Nob3J0X2JpbnVuaWNvZGUKKwogICAgIGRlZiBsb2FkX3R1cGxlKHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFt0dXBsZShzZWxmLnN0YWNrW2srMTpdKV0KQEAgLTEwMzAsNiArMTIyNSwxNSBAQAogICAgICAgICBzZWxmLmFwcGVuZCh7fSkKICAgICBkaXNwYXRjaFtFTVBUWV9ESUNUWzBdXSA9IGxvYWRfZW1wdHlfZGljdGlvbmFyeQogCisgICAgZGVmIGxvYWRfZW1wdHlfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZChzZXQoKSkKKyAgICBkaXNwYXRjaFtFTVBUWV9TRVRbMF1dID0gbG9hZF9lbXB0eV9zZXQKKworICAgIGRlZiBsb2FkX2Zyb3plbnNldChzZWxmKToKKyAgICAgICAgayA9IHNlbGYubWFya2VyKCkKKyAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZnJvemVuc2V0KHNlbGYuc3RhY2tbaysxOl0pXQorICAgIGRpc3BhdGNoW0ZST1pFTlNFVFswXV0gPSBsb2FkX2Zyb3plbnNldAorCiAgICAgZGVmIGxvYWRfbGlzdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbc2VsZi5zdGFja1trKzE6XV0KQEAgLTEwMzcsMTIgKzEyNDEsOSBAQAogCiAgICAgZGVmIGxvYWRfZGljdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKLSAgICAgICAgZCA9IHt9CiAgICAgICAgIGl0ZW1zID0gc2VsZi5zdGFja1trKzE6XQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IGl0ZW1zW2ldCi0gICAgICAgICAgICB2YWx1ZSA9IGl0ZW1zW2krMV0KLSAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAgIGQgPSB7aXRlbXNbaV06IGl0ZW1zW2krMV0KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKX0KICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZF0KICAgICBkaXNwYXRjaFtESUNUWzBdXSA9IGxvYWRfZGljdAogCkBAIC0xMDgxLDExICsxMjgyLDE5IEBACiAKICAgICBkZWYgbG9hZF9uZXdvYmooc2VsZik6CiAgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCi0gICAgICAgIGNscyA9IHNlbGYuc3RhY2tbLTFdCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKICAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncykKLSAgICAgICAgc2VsZi5zdGFja1stMV0gPSBvYmoKKyAgICAgICAgc2VsZi5hcHBlbmQob2JqKQogICAgIGRpc3BhdGNoW05FV09CSlswXV0gPSBsb2FkX25ld29iagogCisgICAgZGVmIGxvYWRfbmV3b2JqX2V4KHNlbGYpOgorICAgICAgICBrd2FyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXBwZW5kKG9iaikKKyAgICBkaXNwYXRjaFtORVdPQkpfRVhbMF1dID0gbG9hZF9uZXdvYmpfZXgKKwogICAgIGRlZiBsb2FkX2dsb2JhbChzZWxmKToKICAgICAgICAgbW9kdWxlID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIG5hbWUgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoInV0Zi04IikKQEAgLTEwOTMsMTggKzEzMDIsMjYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoa2xhc3MpCiAgICAgZGlzcGF0Y2hbR0xPQkFMWzBdXSA9IGxvYWRfZ2xvYmFsCiAKKyAgICBkZWYgbG9hZF9zdGFja19nbG9iYWwoc2VsZik6CisgICAgICAgIG5hbWUgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgaWYgdHlwZShuYW1lKSBpcyBub3Qgc3RyIG9yIHR5cGUobW9kdWxlKSBpcyBub3Qgc3RyOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJTVEFDS19HTE9CQUwgcmVxdWlyZXMgc3RyIikKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5maW5kX2NsYXNzKG1vZHVsZSwgbmFtZSkpCisgICAgZGlzcGF0Y2hbU1RBQ0tfR0xPQkFMWzBdXSA9IGxvYWRfc3RhY2tfZ2xvYmFsCisKICAgICBkZWYgbG9hZF9leHQxKHNlbGYpOgotICAgICAgICBjb2RlID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgY29kZSA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQxWzBdXSA9IGxvYWRfZXh0MQogCiAgICAgZGVmIGxvYWRfZXh0MihzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDIpICsgYidcMDAwXDAwMCcpCisgICAgICAgIGNvZGUsID0gdW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSkKICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUMlswXV0gPSBsb2FkX2V4dDIKIAogICAgIGRlZiBsb2FkX2V4dDQoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQ0WzBdXSA9IGxvYWRfZXh0NAogCkBAIC0xMTE4LDcgKzEzMzUsNyBAQAogICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgaWYgY29kZSA8PSAwOiAjIG5vdGUgdGhhdCAwIGlzIGZvcmJpZGRlbgogICAgICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZS4KLSAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpCiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uIGNvZGUgJWQiICUgY29kZSkKICAgICAgICAgb2JqID0gc2VsZi5maW5kX2NsYXNzKCprZXkpCiAgICAgICAgIF9leHRlbnNpb25fY2FjaGVbY29kZV0gPSBvYmoKQEAgLTExMzIsOSArMTM0OSw4IEBACiAgICAgICAgICAgICBpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkc6CiAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkdbbW9kdWxlXQogICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSwgbGV2ZWw9MCkKLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICByZXR1cm4ga2xhc3MKKyAgICAgICAgcmV0dXJuIF9nZXRhdHRyaWJ1dGUoc3lzLm1vZHVsZXNbbW9kdWxlXSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogCiAgICAgZGVmIGxvYWRfcmVkdWNlKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKQEAgLTExNzIsNyArMTM4OCw3IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtCSU5HRVRbMF1dID0gbG9hZF9iaW5nZXQKIAotICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9sb25nX2JpbmdldChzZWxmKToKICAgICAgICAgaSwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLm1lbW9baV0pCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5HRVRbMF1dID0gbG9hZF9sb25nX2JpbmdldApAQCAtMTE5MSwxMyArMTQwNywxOCBAQAogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0JJTlBVVFswXV0gPSBsb2FkX2JpbnB1dAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2xvbmdfYmlucHV0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGkgPiBtYXhzaXplOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgTE9OR19CSU5QVVQgYXJndW1lbnQiKQogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0xPTkdfQklOUFVUWzBdXSA9IGxvYWRfbG9uZ19iaW5wdXQKIAorICAgIGRlZiBsb2FkX21lbW9pemUoc2VsZik6CisgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KKyAgICAgICAgbWVtb1tsZW4obWVtbyldID0gc2VsZi5zdGFja1stMV0KKyAgICBkaXNwYXRjaFtNRU1PSVpFWzBdXSA9IGxvYWRfbWVtb2l6ZQorCiAgICAgZGVmIGxvYWRfYXBwZW5kKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgdmFsdWUgPSBzdGFjay5wb3AoKQpAQCAtMTIzNywxMiArMTQ1OCwyNiBAQAogICAgICAgICBkZWwgc3RhY2tbbWFyazpdCiAgICAgZGlzcGF0Y2hbU0VUSVRFTVNbMF1dID0gbG9hZF9zZXRpdGVtcwogCisgICAgZGVmIGxvYWRfYWRkaXRlbXMoc2VsZik6CisgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjaworICAgICAgICBtYXJrID0gc2VsZi5tYXJrZXIoKQorICAgICAgICBzZXRfb2JqID0gc3RhY2tbbWFyayAtIDFdCisgICAgICAgIGl0ZW1zID0gc3RhY2tbbWFyayArIDE6XQorICAgICAgICBpZiBpc2luc3RhbmNlKHNldF9vYmosIHNldCk6CisgICAgICAgICAgICBzZXRfb2JqLnVwZGF0ZShpdGVtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZCA9IHNldF9vYmouYWRkCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBhZGQoaXRlbSkKKyAgICAgICAgZGVsIHN0YWNrW21hcms6XQorICAgIGRpc3BhdGNoW0FERElURU1TWzBdXSA9IGxvYWRfYWRkaXRlbXMKKwogICAgIGRlZiBsb2FkX2J1aWxkKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgc3RhdGUgPSBzdGFjay5wb3AoKQogICAgICAgICBpbnN0ID0gc3RhY2tbLTFdCiAgICAgICAgIHNldHN0YXRlID0gZ2V0YXR0cihpbnN0LCAiX19zZXRzdGF0ZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgc2V0c3RhdGU6CisgICAgICAgIGlmIHNldHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2V0c3RhdGUoc3RhdGUpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2xvdHN0YXRlID0gTm9uZQpAQCAtMTI3MCw4NiArMTUwNSw0NiBAQAogICAgICAgICByYWlzZSBfU3RvcCh2YWx1ZSkKICAgICBkaXNwYXRjaFtTVE9QWzBdXSA9IGxvYWRfc3RvcAogCi0jIEVuY29kZS9kZWNvZGUgaW50cy4KLQotZGVmIGVuY29kZV9sb25nKHgpOgotICAgIHIiIiJFbmNvZGUgYSBsb25nIHRvIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCi0gICAgTm90ZSB0aGF0IDAgaXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcsIHRvIHNhdmUgYQotICAgIGJ5dGUgaW4gdGhlIExPTkcxIHBpY2tsaW5nIGNvbnRleHQuCi0KLSAgICA+Pj4gZW5jb2RlX2xvbmcoMCkKLSAgICBiJycKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMjU1KQotICAgIGInXHhmZlx4MDAnCi0gICAgPj4+IGVuY29kZV9sb25nKDMyNzY3KQotICAgIGInXHhmZlx4N2YnCi0gICAgPj4+IGVuY29kZV9sb25nKC0yNTYpCi0gICAgYidceDAwXHhmZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTMyNzY4KQotICAgIGInXHgwMFx4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKC0xMjgpCi0gICAgYidceDgwJwotICAgID4+PiBlbmNvZGVfbG9uZygxMjcpCi0gICAgYidceDdmJwotICAgID4+PgotICAgICIiIgotICAgIGlmIHggPT0gMDoKLSAgICAgICAgcmV0dXJuIGInJwotICAgIG5ieXRlcyA9ICh4LmJpdF9sZW5ndGgoKSA+PiAzKSArIDEKLSAgICByZXN1bHQgPSB4LnRvX2J5dGVzKG5ieXRlcywgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICBpZiB4IDwgMCBhbmQgbmJ5dGVzID4gMToKLSAgICAgICAgaWYgcmVzdWx0Wy0xXSA9PSAweGZmIGFuZCAocmVzdWx0Wy0yXSAmIDB4ODApICE9IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbOi0xXQotICAgIHJldHVybiByZXN1bHQKLQotZGVmIGRlY29kZV9sb25nKGRhdGEpOgotICAgIHIiIiJEZWNvZGUgYW4gaW50IGZyb20gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLQotICAgID4+PiBkZWNvZGVfbG9uZyhiJycpCi0gICAgMAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDAwIikKLSAgICAyNTUKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHg3ZiIpCi0gICAgMzI3NjcKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHhmZiIpCi0gICAgLTI1NgotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceDgwIikKLSAgICAtMzI3NjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDgwIikKLSAgICAtMTI4Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHg3ZiIpCi0gICAgMTI3Ci0gICAgIiIiCi0gICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGRhdGEsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCiAKICMgU2hvcnRoYW5kcwogCi1kZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgotICAgIFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKK2RlZiBfZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorICAgIF9QaWNrbGVyKGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCiAKLWRlZiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorZGVmIF9kdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgogICAgIGYgPSBpby5CeXRlc0lPKCkKLSAgICBQaWNrbGVyKGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCisgICAgX1BpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKICAgICByZXMgPSBmLmdldHZhbHVlKCkKICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXMsIGJ5dGVzX3R5cGVzKQogICAgIHJldHVybiByZXMKIAotZGVmIGxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKLSAgICByZXR1cm4gVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAorZGVmIF9sb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCiAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKLWRlZiBsb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgorZGVmIF9sb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgogICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBsb2FkIHBpY2tsZSBmcm9tIHVuaWNvZGUgc3RyaW5nIikKICAgICBmaWxlID0gaW8uQnl0ZXNJTyhzKQotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCi0gICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCisgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQogCiAjIFVzZSB0aGUgZmFzdGVyIF9waWNrbGUgaWYgcG9zc2libGUKIHRyeToKLSAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICoKKyAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICgKKyAgICAgICAgUGlja2xlRXJyb3IsCisgICAgICAgIFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlciwKKyAgICAgICAgVW5waWNrbGVyLAorICAgICAgICBkdW1wLAorICAgICAgICBkdW1wcywKKyAgICAgICAgbG9hZCwKKyAgICAgICAgbG9hZHMKKyAgICApCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgUGlja2xlciwgVW5waWNrbGVyID0gX1BpY2tsZXIsIF9VbnBpY2tsZXIKKyAgICBkdW1wLCBkdW1wcywgbG9hZCwgbG9hZHMgPSBfZHVtcCwgX2R1bXBzLCBfbG9hZCwgX2xvYWRzCiAKICMgRG9jdGVzdAogZGVmIF90ZXN0KCk6CmRpZmYgLS1naXQgYS9MaWIvcGlja2xldG9vbHMucHkgYi9MaWIvcGlja2xldG9vbHMucHkKaW5kZXggNjEyZmE4Zi4uNzRiNjVjZSAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZXRvb2xzLnB5CisrKyBiL0xpYi9waWNrbGV0b29scy5weQpAQCAtMTEsNiArMTEsNyBAQAogJycnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBpbwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0zNCwxMTkgKzM1LDExOCBAQAogIyAgIGJ5IGEgbGF0ZXIgR0VULgogCiAKLSIiIgotIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKLWNhbGxlZCBhbiB1bnBpY2tsaW5nIG1hY2hpbmUpLiAgSXQncyBhIHNlcXVlbmNlIG9mIG9wY29kZXMsIGludGVycHJldGVkIGJ5IHRoZQotUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMgIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKKyMgY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCisjIFBNLCBidWlsZGluZyBhbiBhcmJpdHJhcmlseSBjb21wbGV4IFB5dGhvbiBvYmplY3QuCisjCisjIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKKyMgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBubyBhcml0aG1ldGljIGFuZCBubyBmdW5jdGlvbiBjYWxscy4gIE9wY29kZXMgYXJlCisjIGV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCisjCisjIFRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgorIworIyBNYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgorIyBpbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKKyMgbGl0ZXJhbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIElOVCBvcGNvZGUgaW4gdGhlIHBpY2tsZSBieXRlc3RyZWFtLiAgT3RoZXIKKyMgb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKKyMgd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgorIworIyBUaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAorIyBtYXBwaW5nIGxpdHRsZSBpbnRlZ2VycyB0byBvYmplY3RzLiAgVGhlIG1lbW8gc2VydmVzIGFzIHRoZSBQTSdzICJsb25nIHRlcm0KKyMgbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKKyMgbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKKyMgYW5kIG90aGVycyBwdXNoIGEgbWVtbyBvYmplY3QgYXQgYSBnaXZlbiBpbmRleCBvbnRvIHRoZSBzdGFjayBhZ2Fpbi4KKyMKKyMgQXQgaGVhcnQsIHRoYXQncyBhbGwgdGhlIFBNIGhhcy4gIFN1YnRsZXRpZXMgYXJpc2UgZm9yIHRoZXNlIHJlYXNvbnM6CisjCisjICsgT2JqZWN0IGlkZW50aXR5LiAgT2JqZWN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgY29tcGxleCwgYW5kIHN1Ym9iamVjdHMKKyMgICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQorIyAgIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKKyMgICBncmFwaCwgZmFpdGhmdWxseSByZXByb2R1Y2luZyBzaGFyaW5nLgorIworIyArIFJlY3Vyc2l2ZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIGFmdGVyICJMID0gW107IEwuYXBwZW5kKEwpIiwgTCBpcyBhCisjICAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5CisjICAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCisjICAgZ2V0IHRoZSByaWdodCByZXN1bHQgaW4gYWxsIGNhc2VzLgorIworIyArIFRoaW5ncyBwaWNrbGUgZG9lc24ndCBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQuICBFeGFtcGxlcyBvZiB0aGluZ3MgcGlja2xlCisjICAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKKyMgICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCisjICAgdGhlbS4gIEZvciB0aGluZ3MgbGlrZSBtb2R1bGUgcmVmZXJlbmNlcyBhbmQgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZAorIyAgIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cworIyAgIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKKyMgICBhbmQvb3IgbW9yZSBjb21wYWN0KSBqb2Igb24gdGhvc2UuCisjCisjICsgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgbWljcm8tb3B0aW1pemF0aW9uLiAgQXMgZXhwbGFpbmVkIGJlbG93LAorIyAgIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZworIyAgIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgorIyAgIEZvciBleGFtcGxlLCBwcm90b2NvbCAwIGhhZCB0d28gb3Bjb2RlcyBmb3IgYnVpbGRpbmcgUHl0aG9uIGludGVnZXJzIChJTlQKKyMgICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKKyMgICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCisjICAgbG9uZyBpbnRlZ2VycyAoYmVmb3JlIHByb3RvY29sIDIsIHRoZSBvbmx5IHdheXMgdG8gcGlja2xlIGEgUHl0aG9uIGxvbmcKKyMgICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKKyMgICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgorIyAgIHdlYXJ5aW5nIGNvbXBsaWNhdGlvbi4KKyMKKyMKKyMgUGlja2xlIHByb3RvY29sczoKKyMKKyMgRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKKyMgcGlja2xlIG9wY29kZXMgZ2V0IGFkZGVkLCBhbmQgZWFjaCB2ZXJzaW9uJ3MgdW5waWNrbGVyIGNhbiBoYW5kbGUgYWxsIHRoZQorIyBwaWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCisjIGJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCisjIHRoZSBzdWJzZXQgb2Ygb3Bjb2RlcyBhdmFpbGFibGUgdW5kZXIgcHJldmlvdXMgcHJvdG9jb2wgdmVyc2lvbnMgdG9vLCBzbyB0aGF0CisjIHVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCisjIHZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKKyMgd2l0aGluIGl0LiAgSWYgYW4gb2xkZXIgdW5waWNrbGVyIHRyaWVzIHRvIHJlYWQgYSBwaWNrbGUgdXNpbmcgYSBsYXRlcgorIyBwcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgorIyB0aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCisjCisjIFRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKKyMgInRleHQgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGUgZW50aXJlIHBpY2tsZSBieXRlc3RyZWFtIGlzIG1hZGUgdXAgb2YKKyMgcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgorIyBUaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0CisjIHNvbWV0aW1lcyBwYWluZnVsbHkgaW5lZmZpY2llbnQuCisjCisjIFRoZSBzZWNvbmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBpcyBub3cgY2FsbGVkICJwcm90b2NvbCAxIiwgYW5kIHdhcyBjYWxsZWQKKyMgImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCisjIGNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCisjIGJ5dGVzLiAgQmluYXJ5IG1vZGUgcGlja2xlcyBjYW4gYmUgc3Vic3RhbnRpYWxseSBzbWFsbGVyIHRoYW4gZXF1aXZhbGVudAorIyB0ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQorIyBpbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQorIyAocGVyaGFwcykgMTEtY2hhcmFjdGVyIGRlY2ltYWwgc3RyaW5nIGF0dGFjaGVkIHRvIElOVC4gIFByb3RvY29sIDEgYWxzbyBhZGRlZAorIyBhIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUworIyBhbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KKyMKKyMgVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAorIyAyIi4gIFRoaXMgYWRkZWQ6CisjCisjIC0gQSBiZXR0ZXIgd2F5IHRvIHBpY2tsZSBpbnN0YW5jZXMgb2YgbmV3LXN0eWxlIGNsYXNzZXMgKE5FV09CSikuCisjCisjIC0gQSB3YXkgZm9yIGEgcGlja2xlIHRvIGlkZW50aWZ5IGl0cyBwcm90b2NvbCAoUFJPVE8pLgorIworIyAtIFRpbWUtIGFuZCBzcGFjZS0gZWZmaWNpZW50IHBpY2tsaW5nIG9mIGxvbmcgaW50cyAoTE9OR3sxLDR9KS4KKyMKKyMgLSBTaG9ydGN1dHMgZm9yIHNtYWxsIHR1cGxlcyAoVFVQTEV7MSwyLDN9fS4KKyMKKyMgLSBEZWRpY2F0ZWQgb3Bjb2RlcyBmb3IgYm9vbHMgKE5FV1RSVUUsIE5FV0ZBTFNFKS4KKyMKKyMgLSBUaGUgImV4dGVuc2lvbiByZWdpc3RyeSIsIGEgdmVjdG9yIG9mIHBvcHVsYXIgb2JqZWN0cyB0aGF0IGNhbiBiZSBwdXNoZWQKKyMgICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0CisjICAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCisjICAgUFVUKS4KKyMKKyMgQW5vdGhlciBpbmRlcGVuZGVudCBjaGFuZ2Ugd2l0aCBQeXRob24gMi4zIGlzIHRoZSBhYmFuZG9ubWVudCBvZiBhbnkKKyMgcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAorIyBwYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKKyMgdGhpcyBhbmQgdGhlcmUgaXNuJ3QgYSB1c2UgY2FzZSB0aGF0IHdhcnJhbnRzIHRoZSBleHBlbnNlIG9mIHN1Y2ggYW4KKyMgYW5hbHlzaXMuCisjCisjIFRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgorIyBjb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KKyMgUmVmZXJlbmNlcyB0byB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2VlbgorIyBhcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgogCi1Gb3IgdGhlIG1vc3QgcGFydCwgdGhlIFBNIGlzIHZlcnkgc2ltcGxlOiAgdGhlcmUgYXJlIG5vIGxvb3BpbmcsIHRlc3RpbmcsIG9yCi1jb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKLWV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCi0KLVRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgotCi1NYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgotaW50ZWdlciBvYmplY3Qgb24gdGhlIHN0YWNrLCB3aG9zZSB2YWx1ZSBpcyBnb3R0ZW4gZnJvbSBhIGRlY2ltYWwgc3RyaW5nCi1saXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgotb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKLXdoYXRldmVyIG9iamVjdCBpcyBsZWZ0IG9uIHRoZSBzdGFjayB3aGVuIHRoZSBmaW5hbCBTVE9QIG9wY29kZSBpcyBleGVjdXRlZC4KLQotVGhlIG1lbW8gaXMgc2ltcGx5IGFuIGFycmF5IG9mIG9iamVjdHMsIG9yIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3QKLW1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQotbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKLW5hbWVzLiAgU29tZSBvcGNvZGVzIHBvcCBhIHN0YWNrIG9iamVjdCBpbnRvIHRoZSBtZW1vIGF0IGEgZ2l2ZW4gaW5kZXgsCi1hbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgotCi1BdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKLQotKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cwotICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQotICB0d2ljZSkuICBJdCBjYW4gYmUgdml0YWwgdGhhdCB1bnBpY2tsaW5nIHJlY3JlYXRlIGFuIGlzb21vcnBoaWMgb2JqZWN0Ci0gIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCi0KLSsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKLSAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5Ci0gIHBvaW50LCBhbmQgc29tZSBzZXF1ZW5jZXMgb2YgcGlja2xlIG9wY29kZXMgYXJlIHN1YnRsZSBpbiBvcmRlciB0bwotICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCi0KLSsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKLSAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKLSAgdHlwZXMsIGxpa2UgaW50cyBhbmQgdHVwbGVzLiAgVGhleSBnZW5lcmFsbHkgaGF2ZSBvcGNvZGVzIGRlZGljYXRlZCB0bwotICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCi0gIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cwotICBoYXZlIGJlZW4gbWFkZSB0byB0aGUgcGlja2xlIHByb3RvY29sIGluIG9yZGVyIHRvIGRvIGEgYmV0dGVyIChmYXN0ZXIsCi0gIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KLQotKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCi0gIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZwotICBnZXQgaW52ZW50ZWQuICBUaGUgcmVwZXJ0b2lyZSBvZiB0aGUgUE0ganVzdCBrZWVwcyBncm93aW5nIG92ZXIgdGltZS4KLSAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAotICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKLSAgaW50ZWdlcnMsIGFuZCBwcm90b2NvbCAyIGFkZGVkIHR3byBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZgotICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZwotICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKLSAgdW5waWNrbGluZykuICAiT3Bjb2RlIGJsb2F0IiBpc24ndCBzbyBtdWNoIGEgc3VidGxldHkgYXMgYSBzb3VyY2Ugb2YKLSAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgotCi0KLVBpY2tsZSBwcm90b2NvbHM6Ci0KLUZvciBjb21wYXRpYmlsaXR5LCB0aGUgbWVhbmluZyBvZiBhIHBpY2tsZSBvcGNvZGUgbmV2ZXIgY2hhbmdlcy4gIEluc3RlYWQgbmV3Ci1waWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCi1waWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCi1iZSByZWFkYWJsZSBmb3JldmVyLiAgVGhlIHBpY2tsZXIgY2FuIGdlbmVyYWxseSBiZSB0b2xkIHRvIHJlc3RyaWN0IGl0c2VsZiB0bwotdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKLXVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCi12ZXJzaW9ucy4gIEhvd2V2ZXIsIGEgcGlja2xlIGRvZXMgbm90IGNvbnRhaW4gaXRzIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkCi13aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCi1wcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgotdGhlIG9sZGVyIHVucGlja2xlcikgb3Bjb2RlLgotCi1UaGUgb3JpZ2luYWwgcGlja2xlIHVzZWQgd2hhdCdzIG5vdyBjYWxsZWQgInByb3RvY29sIDAiLCBhbmQgd2hhdCB3YXMgY2FsbGVkCi0idGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgotcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgotVGhhdCdzIHdoeSBpdCB3YXMgY2FsbGVkIHRleHQgbW9kZS4gIFByb3RvY29sIDAgaXMgc21hbGwgYW5kIGVsZWdhbnQsIGJ1dAotc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KLQotVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAotImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCi1jb25zaXN0aW5nIG9mIGFyYml0cmFyeSBieXRlcywgaW5jbHVkaW5nIE5VTCBieXRlcyBhbmQgdW5wcmludGFibGUgImhpZ2ggYml0IgotYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50Ci10ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQotaW50IGFzIDQgYnl0ZXMgZm9sbG93aW5nIHRoZSBvcGNvZGUsIHdoaWNoIGlzIGNoZWFwZXIgdG8gdW5waWNrbGUgdGhhbiB0aGUKLShwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCi1hIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUwotYW5kIFNFVElURU1TKSwgYW5kICJzaG9ydGN1dCIgb3Bjb2RlcyAobGlrZSBFTVBUWV9ESUNUIGFuZCBFTVBUWV9UVVBMRSkuCi0KLVRoZSB0aGlyZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGNhbWUgaW4gUHl0aG9uIDIuMywgYW5kIGlzIGNhbGxlZCAicHJvdG9jb2wKLTIiLiAgVGhpcyBhZGRlZDoKLQotLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KLQotLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCi0KLS0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgotCi0tIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgotCi0tIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgotCi0tIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAotICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0Ci0gIHRoZSByZWdpc3RyeSBjb250ZW50cyBhcmUgcHJlZGVmaW5lZCAodGhlcmUncyBub3RoaW5nIGFraW4gdG8gdGhlIG1lbW8ncwotICBQVVQpLgotCi1Bbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQotcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAotcGFydGllcyAtLSBubyBzdWZmaWNpZW50IHNlY3VyaXR5IGFuYWx5c2lzIGhhcyBiZWVuIGRvbmUgdG8gZ3VhcmFudGVlCi10aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgotYW5hbHlzaXMuCi0KLVRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgotY29weXJlZy5zYWZlX2NvbnN0cnVjdG9ycyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB1bnBpY2tsaW5nIGNvZGUuCi1SZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCi1hcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgotIiIiCiAKICMgTWV0YS1ydWxlOiAgRGVzY3JpcHRpb25zIGFyZSBzdG9yZWQgaW4gaW5zdGFuY2VzIG9mIGRlc2NyaXB0b3Igb2JqZWN0cywKICMgd2l0aCBwbGFpbiBjb25zdHJ1Y3RvcnMuICBObyBtZXRhLWxhbmd1YWdlIGlzIGRlZmluZWQgZnJvbSB3aGljaApAQCAtMTY5LDYgKzE2OSw3IEBACiBUQUtFTl9GUk9NX0FSR1VNRU5UMSAgPSAtMiAgICMgbnVtIGJ5dGVzIGlzIDEtYnl0ZSB1bnNpZ25lZCBpbnQKIFRBS0VOX0ZST01fQVJHVU1FTlQ0ICA9IC0zICAgIyBudW0gYnl0ZXMgaXMgNC1ieXRlIHNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDRVID0gLTQgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKK1RBS0VOX0ZST01fQVJHVU1FTlQ4VSA9IC01ICAgIyBudW0gYnl0ZXMgaXMgOC1ieXRlIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiAKIGNsYXNzIEFyZ3VtZW50RGVzY3JpcHRvcihvYmplY3QpOgogICAgIF9fc2xvdHNfXyA9ICgKQEAgLTE3Niw3ICsxNzcsNyBAQAogICAgICAgICAnbmFtZScsCiAKICAgICAgICAgIyBsZW5ndGggb2YgYXJndW1lbnQsIGluIGJ5dGVzOyBhbiBpbnQ7IFVQX1RPX05FV0xJTkUgYW5kCi0gICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDR9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAorICAgICAgICAjIFRBS0VOX0ZST01fQVJHVU1FTlR7MSw0LDh9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAogICAgICAgICAjIGNhc2VzCiAgICAgICAgICduJywKIApAQCAtMTk3LDcgKzE5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIGluIChVUF9UT19ORVdMSU5FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNFUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UOFUpKQogICAgICAgICBzZWxmLm4gPSBuCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSByZWFkZXIKQEAgLTI4OSw2ICsyOTEsMjcgQEAKICAgICAgICAgICAgIGRvYz0iRm91ci1ieXRlIHVuc2lnbmVkIGludGVnZXIsIGxpdHRsZS1lbmRpYW4uIikKIAogCitkZWYgcmVhZF91aW50OChmKToKKyAgICByIiIiCisgICAgPj4+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+IGltcG9ydCBpbwpAQCAtODYwLDYgKzEwMzAsMTYgQEAKICAgICAgICAgICAgICBvYnR5cGU9ZGljdCwKICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGRpY3Qgb2JqZWN0LiIpCiAKK3B5c2V0ID0gU3RhY2tPYmplY3QoCisgICAgICAgICAgICBuYW1lPSJzZXQiLAorICAgICAgICAgICAgb2J0eXBlPXNldCwKKyAgICAgICAgICAgIGRvYz0iQSBQeXRob24gc2V0IG9iamVjdC4iKQorCitweWZyb3plbnNldCA9IFN0YWNrT2JqZWN0KAorICAgICAgICAgICAgICAgICAgbmFtZT0iZnJvemVuc2V0IiwKKyAgICAgICAgICAgICAgICAgIG9idHlwZT1zZXQsCisgICAgICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGZyb3plbnNldCBvYmplY3QuIikKKwogYW55b2JqZWN0ID0gU3RhY2tPYmplY3QoCiAgICAgICAgICAgICAgICAgbmFtZT0nYW55JywKICAgICAgICAgICAgICAgICBvYnR5cGU9b2JqZWN0LApAQCAtMTE0Myw2ICsxMzIzLDE5IEBACiAgICAgICBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nQklOQllURVM4JywKKyAgICAgIGNvZGU9J1x4OGUnLAorICAgICAgYXJnPWJ5dGVzOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBieXRlcyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLAorICAgICAgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIHNwZWxsIE5vbmUuCiAKICAgICBJKG5hbWU9J05PTkUnLApAQCAtMTE5MSw2ICsxMzg0LDE5IEBACiAgICAgICB1bnRpbCB0aGUgbmV4dCBuZXdsaW5lIGNoYXJhY3Rlci4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NIT1JUX0JJTlVOSUNPREUnLAorICAgICAgY29kZT0nXHg4YycsCisgICAgICBhcmc9dW5pY29kZXN0cmluZzEsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHl1bmljb2RlXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBVbmljb2RlIHN0cmluZyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgMS1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCisgICAgICAiIiIpLAorCiAgICAgSShuYW1lPSdCSU5VTklDT0RFJywKICAgICAgIGNvZGU9J1gnLAogICAgICAgYXJnPXVuaWNvZGVzdHJpbmc0LApAQCAtMTIwNCw2ICsxNDEwLDE5IEBACiAgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdCSU5VTklDT0RFOCcsCisgICAgICBjb2RlPSdceDhkJywKKyAgICAgIGFyZz11bmljb2Rlc3RyaW5nOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXVuaWNvZGVdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLiAgVGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gc3BlbGwgZmxvYXRzLgogCiAgICAgSShuYW1lPSdGTE9BVCcsCkBAIC0xNDI5LDYgKzE2NDgsNTQgQEAKICAgICAgIDEsIDIsIC4uLiwgbiwgYW5kIGluIHRoYXQgb3JkZXIuCiAgICAgICAiIiIpLAogCisgICAgIyBXYXlzIHRvIGJ1aWxkIHNldHMKKworICAgIEkobmFtZT0nRU1QVFlfU0VUJywKKyAgICAgIGNvZGU9J1x4OGYnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHlzZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iUHVzaCBhbiBlbXB0eSBzZXQuIiksCisKKyAgICBJKG5hbWU9J0FERElURU1TJywKKyAgICAgIGNvZGU9J1x4OTAnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W3B5c2V0LCBtYXJrb2JqZWN0LCBzdGFja3NsaWNlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkFkZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGl0ZW1zIHRvIGFuIGV4aXN0aW5nIHNldC4KKworICAgICAgVGhlIHNsaWNlIG9mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdCBpcyB0YWtlbiBhcworICAgICAgYSBzZXF1ZW5jZSBvZiBpdGVtcywgYWRkZWQgdG8gdGhlIHNldCBpbW1lZGlhdGVseSB1bmRlciB0aGUgdG9wbW9zdAorICAgICAgbWFya29iamVjdC4gIEV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgaXMgcG9wcGVkLAorICAgICAgbGVhdmluZyB0aGUgbXV0YXRlZCBzZXQgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisKKyAgICAgIFN0YWNrIGJlZm9yZTogIC4uLiBweXNldCBtYXJrb2JqZWN0IGl0ZW1fMSAuLi4gaXRlbV9uCisgICAgICBTdGFjayBhZnRlcjogICAuLi4gcHlzZXQKKworICAgICAgd2hlcmUgcHlzZXQgaGFzIGJlZW4gbW9kaWZpZWQgdmlhIHB5c2V0LmFkZChpdGVtX2kpID0gaXRlbV9pIGZvciBpIGluCisgICAgICAxLCAyLCAuLi4sIG4sIGFuZCBpbiB0aGF0IG9yZGVyLgorICAgICAgIiIiKSwKKworICAgICMgV2F5IHRvIGJ1aWxkIGZyb3plbnNldHMKKworICAgIEkobmFtZT0nRlJPWkVOU0VUJywKKyAgICAgIGNvZGU9J1x4OTEnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W21hcmtvYmplY3QsIHN0YWNrc2xpY2VdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5ZnJvemVuc2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQnVpbGQgYSBmcm96ZW5zZXQgb3V0IG9mIHRoZSB0b3Btb3N0IHNsaWNlLCBhZnRlciBtYXJrb2JqZWN0LgorCisgICAgICBBbGwgdGhlIHN0YWNrIGVudHJpZXMgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgYXJlIHBsYWNlZCBpbnRvCisgICAgICBhIHNpbmdsZSBQeXRob24gZnJvemVuc2V0LCB3aGljaCBzaW5nbGUgZnJvemVuc2V0IG9iamVjdCByZXBsYWNlcyBhbGwKKyAgICAgIG9mIHRoZSBzdGFjayBmcm9tIHRoZSB0b3Btb3N0IG1hcmtvYmplY3Qgb253YXJkLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIFN0YWNrIGJlZm9yZTogLi4uIG1hcmtvYmplY3QgMSAyIDMKKyAgICAgIFN0YWNrIGFmdGVyOiAgLi4uIGZyb3plbnNldCh7MSwgMiwgM30pCisgICAgICAiIiIpLAorCiAgICAgIyBTdGFjayBtYW5pcHVsYXRpb24uCiAKICAgICBJKG5hbWU9J1BPUCcsCkBAIC0xNTUwLDYgKzE4MTcsMTggQEAKICAgICAgIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBmb2xsb3dpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdNRU1PSVpFJywKKyAgICAgIGNvZGU9J1x4OTQnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdF0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiU3RvcmUgdGhlIHN0YWNrIHRvcCBpbnRvIHRoZSBtZW1vLiAgVGhlIHN0YWNrIGlzIG5vdCBwb3BwZWQuCisKKyAgICAgIFRoZSBpbmRleCBvZiB0aGUgbWVtbyBsb2NhdGlvbiB0byB3cml0ZSBpcyB0aGUgbnVtYmVyIG9mCisgICAgICBlbGVtZW50cyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgbWVtby4KKyAgICAgICIiIiksCisKICAgICAjIEFjY2VzcyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IChwcmVkZWZpbmVkIG9iamVjdHMpLiAgQWtpbiB0byB0aGUgR0VUCiAgICAgIyBmYW1pbHkuCiAKQEAgLTE2MTUsNiArMTg5NCwxNSBAQAogICAgICAgc3RhY2ssIHNvIHVucGlja2xpbmcgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBmb3JtIG9mIGxvb2t1cC4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NUQUNLX0dMT0JBTCcsCisgICAgICBjb2RlPSdceDkzJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtweXVuaWNvZGUsIHB5dW5pY29kZV0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTAsCisgICAgICBkb2M9IiIiUHVzaCBhIGdsb2JhbCBvYmplY3QgKG1vZHVsZS5hdHRyKSBvbiB0aGUgc3RhY2suCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIGJ1aWxkIG9iamVjdHMgb2YgY2xhc3NlcyBwaWNrbGUgZG9lc24ndCBrbm93IGFib3V0IGRpcmVjdGx5CiAgICAgIyAodXNlci1kZWZpbmVkIGNsYXNzZXMpLiAgSSBkZXNwYWlyIG9mIGRvY3VtZW50aW5nIHRoaXMgYWNjdXJhdGVseQogICAgICMgYW5kIGNvbXByZWhlbnNpYmx5IC0tIHlvdSByZWFsbHkgaGF2ZSB0byByZWFkIHRoZSBwaWNrbGUgY29kZSB0bwpAQCAtMTc3MSw2ICsyMDU5LDIxIEBACiAgICAgICBvbnRvIHRoZSBzdGFjay4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J05FV09CSl9FWCcsCisgICAgICBjb2RlPSdceDkyJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3QsIGFueW9iamVjdCwgYW55b2JqZWN0XSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJCdWlsZCBhbiBvYmplY3QgaW5zdGFuY2UuCisKKyAgICAgIFRoZSBzdGFjayBiZWZvcmUgc2hvdWxkIGJlIHRob3VnaHQgb2YgYXMgY29udGFpbmluZyBhIGNsYXNzCisgICAgICBvYmplY3QgZm9sbG93ZWQgYnkgYW4gYXJndW1lbnQgdHVwbGUgYW5kIGJ5IGEga2V5d29yZCBhcmd1bWVudCBkaWN0CisgICAgICAodGhlIGRpY3QgYmVpbmcgdGhlIHN0YWNrIHRvcCkuICBDYWxsIHRoZXNlIGNscyBhbmQgYXJncy4gIFRoZXkgYXJlCisgICAgICBwb3BwZWQgb2ZmIHRoZSBzdGFjaywgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgICAgY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKmt3YXJncykgaXMgIHB1c2hlZCBiYWNrICBvbnRvIHRoZSBzdGFjay4KKyAgICAgICIiIiksCisKICAgICAjIE1hY2hpbmUgY29udHJvbC4KIAogICAgIEkobmFtZT0nUFJPVE8nLApAQCAtMTc5OCw2ICsyMTAxLDIwIEBACiAgICAgICBlbXB0eSB0aGVuLgogICAgICAgIiIiKSwKIAorICAgICMgRnJhbWluZyBzdXBwb3J0LgorCisgICAgSShuYW1lPSdGUkFNRScsCisgICAgICBjb2RlPSdceDk1JywKKyAgICAgIGFyZz11aW50OCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJJbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lLgorCisgICAgICBUaGUgdW5waWNrbGVyIG1heSB1c2UgdGhpcyBvcGNvZGUgdG8gc2FmZWx5IHByZWZldGNoIGRhdGEgZnJvbSBpdHMKKyAgICAgIHVuZGVybHlpbmcgc3RyZWFtLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBkZWFsIHdpdGggcGVyc2lzdGVudCBJRHMuCiAKICAgICBJKG5hbWU9J1BFUlNJRCcsCkBAIC0xOTA0LDYgKzIyMjEsMzggQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcGNvZGUgZ2VuZXJhdG9yLgogCitkZWYgX2dlbm9wcyhkYXRhLCB5aWVsZF9lbmRfcG9zPUZhbHNlKToKKyAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzX3R5cGVzKToKKyAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oZGF0YSkKKworICAgIGlmIGhhc2F0dHIoZGF0YSwgInRlbGwiKToKKyAgICAgICAgZ2V0cG9zID0gZGF0YS50ZWxsCisgICAgZWxzZToKKyAgICAgICAgZ2V0cG9zID0gbGFtYmRhOiBOb25lCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwb3MgPSBnZXRwb3MoKQorICAgICAgICBjb2RlID0gZGF0YS5yZWFkKDEpCisgICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCisgICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bmtub3duPiIgaWYgcG9zIGlzIE5vbmUgZWxzZSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSkKKyAgICAgICAgaWYgb3Bjb2RlLmFyZyBpcyBOb25lOgorICAgICAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnID0gb3Bjb2RlLmFyZy5yZWFkZXIoZGF0YSkKKyAgICAgICAgaWYgeWllbGRfZW5kX3BvczoKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MsIGdldHBvcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zCisgICAgICAgIGlmIGNvZGUgPT0gYicuJzoKKyAgICAgICAgICAgIGFzc2VydCBvcGNvZGUubmFtZSA9PSAnU1RPUCcKKyAgICAgICAgICAgIGJyZWFrCisKIGRlZiBnZW5vcHMocGlja2xlKToKICAgICAiIiJHZW5lcmF0ZSBhbGwgdGhlIG9wY29kZXMgaW4gYSBwaWNrbGUuCiAKQEAgLTE5MjcsNjIgKzIyNzYsNDcgQEAKICAgICB1c2VkLiAgRWxzZSAodGhlIHBpY2tsZSBkb2Vzbid0IGhhdmUgYSB0ZWxsKCksIGFuZCBpdCdzIG5vdCBvYnZpb3VzIGhvdwogICAgIHRvIHF1ZXJ5IGl0cyBjdXJyZW50IHBvc2l0aW9uKSBwb3MgaXMgTm9uZS4KICAgICAiIiIKLQotICAgIGlmIGlzaW5zdGFuY2UocGlja2xlLCBieXRlc190eXBlcyk6Ci0gICAgICAgIGltcG9ydCBpbwotICAgICAgICBwaWNrbGUgPSBpby5CeXRlc0lPKHBpY2tsZSkKLQotICAgIGlmIGhhc2F0dHIocGlja2xlLCAidGVsbCIpOgotICAgICAgICBnZXRwb3MgPSBwaWNrbGUudGVsbAotICAgIGVsc2U6Ci0gICAgICAgIGdldHBvcyA9IGxhbWJkYTogTm9uZQotCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgcG9zID0gZ2V0cG9zKCkKLSAgICAgICAgY29kZSA9IHBpY2tsZS5yZWFkKDEpCi0gICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCi0gICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgotICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zIGlzIE5vbmUgYW5kICI8dW5rbm93bj4iIG9yIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpKQotICAgICAgICBpZiBvcGNvZGUuYXJnIGlzIE5vbmU6Ci0gICAgICAgICAgICBhcmcgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmcgPSBvcGNvZGUuYXJnLnJlYWRlcihwaWNrbGUpCi0gICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MKLSAgICAgICAgaWYgY29kZSA9PSBiJy4nOgotICAgICAgICAgICAgYXNzZXJ0IG9wY29kZS5uYW1lID09ICdTVE9QJwotICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gX2dlbm9wcyhwaWNrbGUpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcHRpbWl6ZXIuCiAKIGRlZiBvcHRpbWl6ZShwKToKICAgICAnT3B0aW1pemUgYSBwaWNrbGUgc3RyaW5nIGJ5IHJlbW92aW5nIHVudXNlZCBQVVQgb3Bjb2RlcycKLSAgICBnZXRzID0gc2V0KCkgICAgICAgICAgICAjIHNldCBvZiBhcmdzIHVzZWQgYnkgYSBHRVQgb3Bjb2RlCi0gICAgcHV0cyA9IFtdICAgICAgICAgICAgICAgIyAoYXJnLCBzdGFydHBvcywgc3RvcHBvcykgZm9yIHRoZSBQVVQgb3Bjb2RlcwotICAgIHByZXZwb3MgPSBOb25lICAgICAgICAgICMgc2V0IHRvIHBvcyBpZiBwcmV2aW91cyBvcGNvZGUgd2FzIGEgUFVUCi0gICAgZm9yIG9wY29kZSwgYXJnLCBwb3MgaW4gZ2Vub3BzKHApOgotICAgICAgICBpZiBwcmV2cG9zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHV0cy5hcHBlbmQoKHByZXZhcmcsIHByZXZwb3MsIHBvcykpCi0gICAgICAgICAgICBwcmV2cG9zID0gTm9uZQorICAgIG5vdF9hX3B1dCA9IG9iamVjdCgpCisgICAgZ2V0cyA9IHsgbm90X2FfcHV0IH0gICAgIyBzZXQgb2YgYXJncyB1c2VkIGJ5IGEgR0VUIG9wY29kZQorICAgIG9wY29kZXMgPSBbXSAgICAgICAgICAgICMgKHN0YXJ0cG9zLCBzdG9wcG9zLCBwdXRpZCkKKyAgICBwcm90byA9IDAKKyAgICBmb3Igb3Bjb2RlLCBhcmcsIHBvcywgZW5kX3BvcyBpbiBfZ2Vub3BzKHAsIHlpZWxkX2VuZF9wb3M9VHJ1ZSk6CiAgICAgICAgIGlmICdQVVQnIGluIG9wY29kZS5uYW1lOgotICAgICAgICAgICAgcHJldmFyZywgcHJldnBvcyA9IGFyZywgcG9zCi0gICAgICAgIGVsaWYgJ0dFVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zLCBhcmcpKQorICAgICAgICBlbGlmICdGUkFNRScgaW4gb3Bjb2RlLm5hbWU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAnR0VUJyBpbiBvcGNvZGUubmFtZToKKyAgICAgICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBlbGlmIG9wY29kZS5uYW1lID09ICdQUk9UTyc6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBvcyA9PSAwLCBwb3MKKyAgICAgICAgICAgICAgICBwcm90byA9IGFyZworICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHBvcywgZW5kX3Bvcywgbm90X2FfcHV0KSkKKyAgICAgICAgICAgIHByZXZwb3MsIHByZXZhcmcgPSBwb3MsIE5vbmUKIAotICAgICMgQ29weSB0aGUgcGlja2xlIHN0cmluZyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCi0gICAgcyA9IFtdCi0gICAgaSA9IDAKLSAgICBmb3IgYXJnLCBzdGFydCwgc3RvcCBpbiBwdXRzOgotICAgICAgICBqID0gc3RvcCBpZiAoYXJnIGluIGdldHMpIGVsc2Ugc3RhcnQKLSAgICAgICAgcy5hcHBlbmQocFtpOmpdKQotICAgICAgICBpID0gc3RvcAotICAgIHMuYXBwZW5kKHBbaTpdKQotICAgIHJldHVybiBiJycuam9pbihzKQorICAgICMgQ29weSB0aGUgb3Bjb2RlcyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCisgICAgb3V0ID0gaW8uQnl0ZXNJTygpCisgICAgb3Bjb2RlcyA9IGl0ZXIob3Bjb2RlcykKKyAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAjIFdyaXRlIHRoZSBQUk9UTyBoZWFkZXIgYmVmb3JlIGFueSBmcmFtaW5nCisgICAgICAgIHN0YXJ0LCBzdG9wLCBfID0gbmV4dChvcGNvZGVzKQorICAgICAgICBvdXQud3JpdGUocFtzdGFydDpzdG9wXSkKKyAgICBidWYgPSBwaWNrbGUuX0ZyYW1lcihvdXQud3JpdGUpCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLnN0YXJ0X2ZyYW1pbmcoKQorICAgIGZvciBzdGFydCwgc3RvcCwgcHV0aWQgaW4gb3Bjb2RlczoKKyAgICAgICAgaWYgcHV0aWQgaW4gZ2V0czoKKyAgICAgICAgICAgIGJ1Zi53cml0ZShwW3N0YXJ0OnN0b3BdKQorICAgIGlmIHByb3RvID49IDQ6CisgICAgICAgIGJ1Zi5lbmRfZnJhbWluZygpCisgICAgcmV0dXJuIG91dC5nZXR2YWx1ZSgpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHN5bWJvbGljIHBpY2tsZSBkaXNhc3NlbWJsZXIuCkBAIC0yMDgyLDE3ICsyNDE2LDIwIEBACiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSBtYXJrbXNnID0gIm5vIE1BUksgZXhpc3RzIG9uIHN0YWNrIgogCiAgICAgICAgICMgQ2hlY2sgZm9yIGNvcnJlY3QgbWVtbyB1c2FnZS4KLSAgICAgICAgaWYgb3Bjb2RlLm5hbWUgaW4gKCJQVVQiLCAiQklOUFVUIiwgIkxPTkdfQklOUFVUIik6Ci0gICAgICAgICAgICBhc3NlcnQgYXJnIGlzIG5vdCBOb25lCi0gICAgICAgICAgICBpZiBhcmcgaW4gbWVtbzoKKyAgICAgICAgaWYgb3Bjb2RlLm5hbWUgaW4gKCJQVVQiLCAiQklOUFVUIiwgIkxPTkdfQklOUFVUIiwgIk1FTU9JWkUiKToKKyAgICAgICAgICAgIGlmIG9wY29kZS5uYW1lID09ICJNRU1PSVpFIjoKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGxlbihtZW1vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYXJnIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgbWVtb19pZHggPSBhcmcKKyAgICAgICAgICAgIGlmIG1lbW9faWR4IGluIG1lbW86CiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSAibWVtbyBrZXkgJXIgYWxyZWFkeSBkZWZpbmVkIiAlIGFyZwogICAgICAgICAgICAgZWxpZiBub3Qgc3RhY2s6CiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSAic3RhY2sgaXMgZW1wdHkgLS0gY2FuJ3Qgc3RvcmUgaW50byBtZW1vIgogICAgICAgICAgICAgZWxpZiBzdGFja1stMV0gaXMgbWFya29iamVjdDoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJjYW4ndCBzdG9yZSBtYXJrb2JqZWN0IGluIHRoZSBtZW1vIgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtZW1vW2FyZ10gPSBzdGFja1stMV0KLQorICAgICAgICAgICAgICAgIG1lbW9bbWVtb19pZHhdID0gc3RhY2tbLTFdCiAgICAgICAgIGVsaWYgb3Bjb2RlLm5hbWUgaW4gKCJHRVQiLCAiQklOR0VUIiwgIkxPTkdfQklOR0VUIik6CiAgICAgICAgICAgICBpZiBhcmcgaW4gbWVtbzoKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGFmdGVyKSA9PSAxCmRpZmYgLS1naXQgYS9MaWIvcGtndXRpbC5weSBiL0xpYi9wa2d1dGlsLnB5CmluZGV4IDIwZTY0OTguLjQ2ODJkMjIgMTAwNjQ0Ci0tLSBhL0xpYi9wa2d1dGlsLnB5CisrKyBiL0xpYi9wa2d1dGlsLnB5CkBAIC0xLDEyICsxLDE0IEBACiAiIiJVdGlsaXRpZXMgdG8gc3VwcG9ydCBwYWNrYWdlcy4iIiIKIAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgc2luZ2xlZGlzcGF0Y2ggYXMgc2ltcGxlZ2VuZXJpYwogaW1wb3J0IGltcG9ydGxpYgotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgoraW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQoraW1wb3J0IHdhcm5pbmdzCiAKIF9fYWxsX18gPSBbCiAgICAgJ2dldF9pbXBvcnRlcicsICdpdGVyX2ltcG9ydGVycycsICdnZXRfbG9hZGVyJywgJ2ZpbmRfbG9hZGVyJywKQEAgLTIwLDUzICsyMiwxMyBAQAogICAgIGltcG9ydCBtYXJzaGFsCiAKICAgICBtYWdpYyA9IHN0cmVhbS5yZWFkKDQpCi0gICAgaWYgbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpOgorICAgIGlmIG1hZ2ljICE9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIHN0cmVhbS5yZWFkKDgpICMgU2tpcCB0aW1lc3RhbXAgYW5kIHNpemUKICAgICByZXR1cm4gbWFyc2hhbC5sb2FkKHN0cmVhbSkKIAogCi1kZWYgc2ltcGxlZ2VuZXJpYyhmdW5jKToKLSAgICAiIiJNYWtlIGEgdHJpdmlhbCBzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiIiIgotICAgIHJlZ2lzdHJ5ID0ge30KLSAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6Ci0gICAgICAgIG9iID0gYXJnc1swXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbHMgPSBvYi5fX2NsYXNzX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgY2xzID0gdHlwZShvYikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXJvID0gY2xzLl9fbXJvX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNsYXNzIGNscyhjbHMsIG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fX1sxOl0KLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgbXJvID0gb2JqZWN0LCAgICMgbXVzdCBiZSBhbiBFeHRlbnNpb25DbGFzcyBvciBzb21lIHN1Y2ggIDooCi0gICAgICAgIGZvciB0IGluIG1ybzoKLSAgICAgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5W3RdKCphcmdzLCAqKmt3KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgdHJ5OgotICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwotICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgIHBhc3MgICAgIyBQeXRob24gMi4zIGRvZXNuJ3QgYWxsb3cgZnVuY3Rpb25zIHRvIGJlIHJlbmFtZWQKLQotICAgIGRlZiByZWdpc3Rlcih0eXAsIGZ1bmM9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZjogcmVnaXN0ZXIodHlwLCBmKQotICAgICAgICByZWdpc3RyeVt0eXBdID0gZnVuYwotICAgICAgICByZXR1cm4gZnVuYwotCi0gICAgd3JhcHBlci5fX2RpY3RfXyA9IGZ1bmMuX19kaWN0X18KLSAgICB3cmFwcGVyLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KLSAgICB3cmFwcGVyLnJlZ2lzdGVyID0gcmVnaXN0ZXIKLSAgICByZXR1cm4gd3JhcHBlcgotCi0KIGRlZiB3YWxrX3BhY2thZ2VzKHBhdGg9Tm9uZSwgcHJlZml4PScnLCBvbmVycm9yPU5vbmUpOgogICAgICIiIllpZWxkcyAobW9kdWxlX2xvYWRlciwgbmFtZSwgaXNwa2cpIGZvciBhbGwgbW9kdWxlcyByZWN1cnNpdmVseQogICAgIG9uIHBhdGgsIG9yLCBpZiBwYXRoIGlzIE5vbmUsIGFsbCBhY2Nlc3NpYmxlIG1vZHVsZXMuCkBAIC0xMjEsOCArODMsNyBAQAogICAgICAgICAgICAgICAgICMgZG9uJ3QgdHJhdmVyc2UgcGF0aCBpdGVtcyB3ZSd2ZSBzZWVuIGJlZm9yZQogICAgICAgICAgICAgICAgIHBhdGggPSBbcCBmb3IgcCBpbiBwYXRoIGlmIG5vdCBzZWVuKHApXQogCi0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW0KKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhbGtfcGFja2FnZXMocGF0aCwgbmFtZSsnLicsIG9uZXJyb3IpCiAKIAogZGVmIGl0ZXJfbW9kdWxlcyhwYXRoPU5vbmUsIHByZWZpeD0nJyk6CkBAIC0xNDksMTMgKzExMCwxMiBAQAogICAgICAgICAgICAgICAgIHlpZWxkIGksIG5hbWUsIGlzcGtnCiAKIAotI0BzaW1wbGVnZW5lcmljCitAc2ltcGxlZ2VuZXJpYwogZGVmIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKICAgICBpZiBub3QgaGFzYXR0cihpbXBvcnRlciwgJ2l0ZXJfbW9kdWxlcycpOgogICAgICAgICByZXR1cm4gW10KICAgICByZXR1cm4gaW1wb3J0ZXIuaXRlcl9tb2R1bGVzKHByZWZpeCkKIAotaXRlcl9pbXBvcnRlcl9tb2R1bGVzID0gc2ltcGxlZ2VuZXJpYyhpdGVyX2ltcG9ydGVyX21vZHVsZXMpCiAKICMgSW1wbGVtZW50IGEgZmlsZSB3YWxrZXIgZm9yIHRoZSBub3JtYWwgaW1wb3J0bGliIHBhdGggaG9vawogZGVmIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMoaW1wb3J0ZXIsIHByZWZpeD0nJyk6CkBAIC0yMDEsNiArMTYxLDEzIEBACiBpdGVyX2ltcG9ydGVyX21vZHVsZXMucmVnaXN0ZXIoCiAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLCBfaXRlcl9maWxlX2ZpbmRlcl9tb2R1bGVzKQogCisKK2RlZiBfaW1wb3J0X2ltcCgpOgorICAgIGdsb2JhbCBpbXAKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgaW1wID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2ltcCcpCisKIGNsYXNzIEltcEltcG9ydGVyOgogICAgICIiIlBFUCAzMDIgSW1wb3J0ZXIgdGhhdCB3cmFwcyBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IGFsZ29yaXRobQogCkBAIC0yMTMsOCArMTgwLDEwIEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICBnbG9iYWwgaW1wCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjc5LDggKzI0OCw5IEBACiAgICAgY29kZSA9IHNvdXJjZSA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdWxsbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGV0Yyk6Ci0gICAgICAgIHdhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKLSAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5maWxlID0gZmlsZQogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5mdWxsbmFtZSA9IGZ1bGxuYW1lCkBAIC0zNTAsOSArMzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgICAgIGVsaWYgbW9kX3R5cGU9PWltcC5QWV9DT01QSUxFRDoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVuYW1lWzotMV0pOgotICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lWzotMV0sICdyJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBLR19ESVJFQ1RPUlk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBzZWxmLl9nZXRfZGVsZWdhdGUoKS5nZXRfc291cmNlKCkKICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCkBAIC00NTYsMTIgKzQyNSwxMiBAQAogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICBlbHNlOgotICAgICAgICBmb3IgaW1wb3J0ZXIgaW4gc3lzLm1ldGFfcGF0aDoKLSAgICAgICAgICAgIHlpZWxkIGltcG9ydGVyCisgICAgICAgIHlpZWxkIGZyb20gc3lzLm1ldGFfcGF0aAogICAgICAgICBwYXRoID0gc3lzLnBhdGgKICAgICBmb3IgaXRlbSBpbiBwYXRoOgogICAgICAgICB5aWVsZCBnZXRfaW1wb3J0ZXIoaXRlbSkKIAorCiBkZWYgZ2V0X2xvYWRlcihtb2R1bGVfb3JfbmFtZSk6CiAgICAgIiIiR2V0IGEgUEVQIDMwMiAibG9hZGVyIiBvYmplY3QgZm9yIG1vZHVsZV9vcl9uYW1lCiAKQEAgLTU4OSwxOSArNTU4LDIwIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2ZpbGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHBrZ2ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3Qgb3BlbiAlczogJXNcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZ2ZpbGUsIG1zZykpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChsaW5lKSAjIERvbid0IGNoZWNrIGZvciBleGlzdGVuY2UhCiAKICAgICByZXR1cm4gcGF0aAogCisKIGRlZiBnZXRfZGF0YShwYWNrYWdlLCByZXNvdXJjZSk6CiAgICAgIiIiR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKQEAgLTYyNCwxMCArNTk0LDE1IEBACiAgICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBnZXRfZGF0YSgpLCB0aGVuIE5vbmUgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAKLSAgICBsb2FkZXIgPSBnZXRfbG9hZGVyKHBhY2thZ2UpCisgICAgc3BlYyA9IGltcG9ydGxpYi5maW5kX3NwZWMocGFja2FnZSkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKICAgICBpZiBsb2FkZXIgaXMgTm9uZSBvciBub3QgaGFzYXR0cihsb2FkZXIsICdnZXRfZGF0YScpOgogICAgICAgICByZXR1cm4gTm9uZQotICAgIG1vZCA9IHN5cy5tb2R1bGVzLmdldChwYWNrYWdlKSBvciBsb2FkZXIubG9hZF9tb2R1bGUocGFja2FnZSkKKyAgICAjIFhYWCBuZWVkcyB0ZXN0CisgICAgbW9kID0gKHN5cy5tb2R1bGVzLmdldChwYWNrYWdlKSBvcgorICAgICAgICAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykubG9hZCgpKQogICAgIGlmIG1vZCBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKG1vZCwgJ19fZmlsZV9fJyk6CiAgICAgICAgIHJldHVybiBOb25lCiAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9JTi5weSBiL0xpYi9wbGF0LW9zMmVteC9JTi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUzYWUyNC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvSU4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gZjovZW14L2luY2x1ZGUvbmV0aW5ldC9pbi5oCi0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvcGFyYW0uaAotUEFHRV9TSVpFID0gMHgxMDAwCi1IWiA9IDEwMAotTUFYTkFNTEVOID0gMjYwCi1NQVhQQVRITEVOID0gMjYwCi1kZWYgaHRvbmwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIG50b2hsKFgpOiByZXR1cm4gX3N3YXBsKFgpCi0KLWRlZiBodG9ucyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1kZWYgbnRvaHMoWCk6IHJldHVybiBfc3dhcHMoWCkKLQotSVBQUk9UT19JUCA9IDAKLUlQUFJPVE9fSUNNUCA9IDEKLUlQUFJPVE9fSUdNUCA9IDIKLUlQUFJPVE9fR0dQID0gMwotSVBQUk9UT19UQ1AgPSA2Ci1JUFBST1RPX0VHUCA9IDgKLUlQUFJPVE9fUFVQID0gMTIKLUlQUFJPVE9fVURQID0gMTcKLUlQUFJPVE9fSURQID0gMjIKLUlQUFJPVE9fVFAgPSAyOQotSVBQUk9UT19FT04gPSA4MAotSVBQUk9UT19SQVcgPSAyNTUKLUlQUFJPVE9fTUFYID0gMjU2Ci1JUFBPUlRfUkVTRVJWRUQgPSAxMDI0Ci1JUFBPUlRfVVNFUlJFU0VSVkVEID0gNTAwMAotZGVmIElOX0NMQVNTQShpKTogcmV0dXJuICgoKGludCkoaSkgJiAweDgwMDAwMDAwKSA9PSAwKQotCi1JTl9DTEFTU0FfTkVUID0gMHhmZjAwMDAwMAotSU5fQ0xBU1NBX05TSElGVCA9IDI0Ci1JTl9DTEFTU0FfSE9TVCA9IDB4MDBmZmZmZmYKLUlOX0NMQVNTQV9NQVggPSAxMjgKLWRlZiBJTl9DTEFTU0IoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhjMDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkKLQotSU5fQ0xBU1NCX05FVCA9IDB4ZmZmZjAwMDAKLUlOX0NMQVNTQl9OU0hJRlQgPSAxNgotSU5fQ0xBU1NCX0hPU1QgPSAweDAwMDBmZmZmCi1JTl9DTEFTU0JfTUFYID0gNjU1MzYKLWRlZiBJTl9DTEFTU0MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhlMDAwMDAwMCkgPT0gMHhjMDAwMDAwMCkKLQotSU5fQ0xBU1NDX05FVCA9IDB4ZmZmZmZmMDAKLUlOX0NMQVNTQ19OU0hJRlQgPSA4Ci1JTl9DTEFTU0NfSE9TVCA9IDB4MDAwMDAwZmYKLWRlZiBJTl9DTEFTU0QoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKLQotSU5fQ0xBU1NEX05FVCA9IDB4ZjAwMDAwMDAKLUlOX0NMQVNTRF9OU0hJRlQgPSAyOAotSU5fQ0xBU1NEX0hPU1QgPSAweDBmZmZmZmZmCi1kZWYgSU5fTVVMVElDQVNUKGkpOiByZXR1cm4gSU5fQ0xBU1NEKGkpCi0KLWRlZiBJTl9FWFBFUklNRU5UQUwoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhlMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKLQotZGVmIElOX0JBRENMQVNTKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApCi0KLUlOQUREUl9BTlkgPSAweDAwMDAwMDAwCi1JTkFERFJfTE9PUEJBQ0sgPSAweDdmMDAwMDAxCi1JTkFERFJfQlJPQURDQVNUID0gMHhmZmZmZmZmZgotSU5BRERSX05PTkUgPSAweGZmZmZmZmZmCi1JTkFERFJfVU5TUEVDX0dST1VQID0gMHhlMDAwMDAwMAotSU5BRERSX0FMTEhPU1RTX0dST1VQID0gMHhlMDAwMDAwMQotSU5BRERSX01BWF9MT0NBTF9HUk9VUCA9IDB4ZTAwMDAwZmYKLUlOX0xPT1BCQUNLTkVUID0gMTI3Ci1JUF9PUFRJT05TID0gMQotSVBfTVVMVElDQVNUX0lGID0gMgotSVBfTVVMVElDQVNUX1RUTCA9IDMKLUlQX01VTFRJQ0FTVF9MT09QID0gNAotSVBfQUREX01FTUJFUlNISVAgPSA1Ci1JUF9EUk9QX01FTUJFUlNISVAgPSA2Ci1JUF9IRFJJTkNMID0gMgotSVBfVE9TID0gMwotSVBfVFRMID0gNAotSVBfUkVDVk9QVFMgPSA1Ci1JUF9SRUNWUkVUT1BUUyA9IDYKLUlQX1JFQ1ZEU1RBRERSID0gNwotSVBfUkVUT1BUUyA9IDgKLUlQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCA9IDEKLUlQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AgPSAxCi1JUF9NQVhfTUVNQkVSU0hJUFMgPSAyMApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weSBiL0xpYi9wbGF0LW9zMmVteC9TT0NLRVQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYzU5NGEuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gZjovZW14L2luY2x1ZGUvc3lzL3NvY2tldC5oCi0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdHlwZXMuaAotRkRfU0VUU0laRSA9IDI1NgotCi0jIEluY2x1ZGVkIGZyb20gc3lzL3Vpby5oCi1GUkVBRCA9IDEKLUZXUklURSA9IDIKLVNPQ0tfU1RSRUFNID0gMQotU09DS19ER1JBTSA9IDIKLVNPQ0tfUkFXID0gMwotU09DS19SRE0gPSA0Ci1TT0NLX1NFUVBBQ0tFVCA9IDUKLVNPX0RFQlVHID0gMHgwMDAxCi1TT19BQ0NFUFRDT05OID0gMHgwMDAyCi1TT19SRVVTRUFERFIgPSAweDAwMDQKLVNPX0tFRVBBTElWRSA9IDB4MDAwOAotU09fRE9OVFJPVVRFID0gMHgwMDEwCi1TT19CUk9BRENBU1QgPSAweDAwMjAKLVNPX1VTRUxPT1BCQUNLID0gMHgwMDQwCi1TT19MSU5HRVIgPSAweDAwODAKLVNPX09PQklOTElORSA9IDB4MDEwMAotU09fTF9CUk9BRENBU1QgPSAweDAyMDAKLVNPX1JDVl9TSFVURE9XTiA9IDB4MDQwMAotU09fU05EX1NIVVRET1dOID0gMHgwODAwCi1TT19TTkRCVUYgPSAweDEwMDEKLVNPX1JDVkJVRiA9IDB4MTAwMgotU09fU05ETE9XQVQgPSAweDEwMDMKLVNPX1JDVkxPV0FUID0gMHgxMDA0Ci1TT19TTkRUSU1FTyA9IDB4MTAwNQotU09fUkNWVElNRU8gPSAweDEwMDYKLVNPX0VSUk9SID0gMHgxMDA3Ci1TT19UWVBFID0gMHgxMDA4Ci1TT19PUFRJT05TID0gMHgxMDEwCi1TT0xfU09DS0VUID0gMHhmZmZmCi1BRl9VTlNQRUMgPSAwCi1BRl9VTklYID0gMQotQUZfSU5FVCA9IDIKLUFGX0lNUExJTksgPSAzCi1BRl9QVVAgPSA0Ci1BRl9DSEFPUyA9IDUKLUFGX05TID0gNgotQUZfTkJTID0gNwotQUZfSVNPID0gNwotQUZfT1NJID0gQUZfSVNPCi1BRl9FQ01BID0gOAotQUZfREFUQUtJVCA9IDkKLUFGX0NDSVRUID0gMTAKLUFGX1NOQSA9IDExCi1BRl9ERUNuZXQgPSAxMgotQUZfRExJID0gMTMKLUFGX0xBVCA9IDE0Ci1BRl9IWUxJTksgPSAxNQotQUZfQVBQTEVUQUxLID0gMTYKLUFGX05CID0gMTcKLUFGX05FVEJJT1MgPSBBRl9OQgotQUZfT1MyID0gQUZfVU5JWAotQUZfTUFYID0gMTgKLVBGX1VOU1BFQyA9IEFGX1VOU1BFQwotUEZfVU5JWCA9IEFGX1VOSVgKLVBGX0lORVQgPSBBRl9JTkVUCi1QRl9JTVBMSU5LID0gQUZfSU1QTElOSwotUEZfUFVQID0gQUZfUFVQCi1QRl9DSEFPUyA9IEFGX0NIQU9TCi1QRl9OUyA9IEFGX05TCi1QRl9OQlMgPSBBRl9OQlMKLVBGX0lTTyA9IEFGX0lTTwotUEZfT1NJID0gQUZfSVNPCi1QRl9FQ01BID0gQUZfRUNNQQotUEZfREFUQUtJVCA9IEFGX0RBVEFLSVQKLVBGX0NDSVRUID0gQUZfQ0NJVFQKLVBGX1NOQSA9IEFGX1NOQQotUEZfREVDbmV0ID0gQUZfREVDbmV0Ci1QRl9ETEkgPSBBRl9ETEkKLVBGX0xBVCA9IEFGX0xBVAotUEZfSFlMSU5LID0gQUZfSFlMSU5LCi1QRl9BUFBMRVRBTEsgPSBBRl9BUFBMRVRBTEsKLVBGX05CID0gQUZfTkIKLVBGX05FVEJJT1MgPSBBRl9OQgotUEZfT1MyID0gQUZfVU5JWAotUEZfTUFYID0gQUZfTUFYCi1TT01BWENPTk4gPSA1Ci1NU0dfT09CID0gMHgxCi1NU0dfUEVFSyA9IDB4MgotTVNHX0RPTlRST1VURSA9IDB4NAotTVNHX0VPUiA9IDB4OAotTVNHX1RSVU5DID0gMHgxMAotTVNHX0NUUlVOQyA9IDB4MjAKLU1TR19XQUlUQUxMID0gMHg0MAotTVNHX01BWElPVkxFTiA9IDE2Ci1TQ01fUklHSFRTID0gMHgwMQotTVRfRlJFRSA9IDAKLU1UX0RBVEEgPSAxCi1NVF9IRUFERVIgPSAyCi1NVF9TT0NLRVQgPSAzCi1NVF9QQ0IgPSA0Ci1NVF9SVEFCTEUgPSA1Ci1NVF9IVEFCTEUgPSA2Ci1NVF9BVEFCTEUgPSA3Ci1NVF9TT05BTUUgPSA4Ci1NVF9aT01CSUUgPSA5Ci1NVF9TT09QVFMgPSAxMAotTVRfRlRBQkxFID0gMTEKLU1UX1JJR0hUUyA9IDEyCi1NVF9JRkFERFIgPSAxMwotTUFYU09DS0VUUyA9IDIwNDgKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkgYi9MaWIvcGxhdC1vczJlbXgvX2VteF9saW5rLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWU2YjU0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jIF9lbXhfbGluay5weQotCi0jIFdyaXR0ZW4gYnkgQW5kcmV3IEkgTWFjSW50eXJlLCBEZWNlbWJlciAyMDAyLgotCi0iIiJfZW14X2xpbmsucHkgaXMgYSBzaW1wbGlzdGljIGVtdWxhdGlvbiBvZiB0aGUgVW5peCBsaW5rKDIpIGxpYnJhcnkgcm91dGluZQotZm9yIGNyZWF0aW5nIHNvLWNhbGxlZCBoYXJkIGxpbmtzLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgaW1wb3J0ZWQgaW50bwotdGhlIG9zIG1vZHVsZSBpbiBwbGFjZSBvZiB0aGUgdW5pbXBsZW1lbnRlZCAob24gT1MvMikgUG9zaXggbGluaygpCi1mdW5jdGlvbiAob3MubGluaygpKS4KLQotV2UgZG8gdGhpcyBvbiBPUy8yIGJ5IGltcGxlbWVudGluZyBhIGZpbGUgY29weSwgd2l0aCBsaW5rKDIpIHNlbWFudGljczotCi0gIC0gdGhlIHRhcmdldCBjYW5ub3QgYWxyZWFkeSBleGlzdDsKLSAgLSB3ZSBob3BlIHRoYXQgdGhlIGFjdHVhbCBmaWxlIG9wZW4gKGlmIHN1Y2Nlc3NmdWwpIGlzIGFjdHVhbGx5Ci0gICAgYXRvbWljLi4uCi0KLUxpbWl0YXRpb25zIG9mIHRoaXMgYXBwcm9hY2gvaW1wbGVtZW50YXRpb24gaW5jbHVkZTotCi0gIC0gbm8gc3VwcG9ydCBmb3IgY29ycmVjdCBsaW5rIGNvdW50cyAoRU1YIHN0YXQodGFyZ2V0KS5zdF9ubGluawotICAgIGlzIGFsd2F5cyAxKTsKLSAgLSB0aHJlYWQgc2FmZXR5IHVuZGVmaW5lZDsKLSAgLSBkZWZhdWx0IGZpbGUgcGVybWlzc2lvbnMgKHIrdykgdXNlZCwgY2FuJ3QgYmUgb3Zlci1yaWRkZW47Ci0gIC0gaW1wbGVtZW50ZWQgaW4gUHl0aG9uIHNvIGNvbXBhcmF0aXZlbHkgc2xvdywgZXNwZWNpYWxseSBmb3IgbGFyZ2UKLSAgICBzb3VyY2UgZmlsZXM7Ci0gIC0gbmVlZCBzdWZmaWNpZW50IGZyZWUgZGlzayBzcGFjZSB0byBzdG9yZSB0aGUgY29weS4KLQotQmVoYXZpb3VyOi0KLSAgLSBhbnkgZXhjZXB0aW9uIHNob3VsZCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlcjsKLSAgLSB3YW50IHRhcmdldCB0byBiZSBhbiBleGFjdCBjb3B5IG9mIHRoZSBzb3VyY2UsIHNvIHVzZSBiaW5hcnkgbW9kZTsKLSAgLSByZXR1cm5zIE5vbmUsIHNhbWUgYXMgb3MubGluaygpIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIHBvc2l4bW9kdWxlLmM7Ci0gIC0gdGFyZ2V0IHJlbW92ZWQgaW4gdGhlIGV2ZW50IG9mIGEgZmFpbHVyZSB3aGVyZSBwb3NzaWJsZTsKLSAgLSBnaXZlbiB0aGUgbW90aXZhdGlvbiB0byB3cml0ZSB0aGlzIGVtdWxhdGlvbiBjYW1lIGZyb20gdHJ5aW5nIHRvCi0gICAgc3VwcG9ydCBhIFVuaXggcmVzb3VyY2UgbG9jayBpbXBsZW1lbnRhdGlvbiwgd2hlcmUgbWluaW1hbCBvdmVyaGVhZAotICAgIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgdGFyZ2V0IGlzIGRlc2lyYWJsZSBhbmQgdGhlIGZpbGVzIGFyZSBzbWFsbCwKLSAgICB3ZSByZWFkIGEgc291cmNlIGJsb2NrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IHNvIHRoYXQKLSAgICB3ZSdyZSByZWFkeSB0byBpbW1lZGlhdGVseSB3cml0ZSBzb21lIGRhdGEgaW50byBpdC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotCi1fX2FsbF9fID0gWydsaW5rJ10KLQotZGVmIGxpbmsoc291cmNlLCB0YXJnZXQpOgotICAgICIiImxpbmsoc291cmNlLCB0YXJnZXQpIC0+IE5vbmUKLQotICAgIEF0dGVtcHQgdG8gaGFyZCBsaW5rIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgdGFyZ2V0IGZpbGUgbmFtZS4KLSAgICBPbiBPUy8yLCB0aGlzIGNyZWF0ZXMgYSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb3VyY2UgZmlsZS4KLSAgICAiIiIKLQotICAgIHMgPSBvcy5vcGVuKHNvdXJjZSwgb3MuT19SRE9OTFkgfCBvcy5PX0JJTkFSWSkKLSAgICBpZiBvcy5pc2F0dHkocyk6Ci0gICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRVhERVYsICdDcm9zcy1kZXZpY2UgbGluaycpCi0gICAgZGF0YSA9IG9zLnJlYWQocywgMTAyNCkKLQotICAgIHRyeToKLSAgICAgICAgdCA9IG9zLm9wZW4odGFyZ2V0LCBvcy5PX1dST05MWSB8IG9zLk9fQklOQVJZIHwgb3MuT19DUkVBVCB8IG9zLk9fRVhDTCkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgb3MuY2xvc2UocykKLSAgICAgICAgcmFpc2UKLQotICAgIHRyeToKLSAgICAgICAgd2hpbGUgZGF0YToKLSAgICAgICAgICAgIG9zLndyaXRlKHQsIGRhdGEpCi0gICAgICAgICAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICBvcy5jbG9zZSh0KQotICAgICAgICBvcy51bmxpbmsodGFyZ2V0KQotICAgICAgICByYWlzZQotCi0gICAgb3MuY2xvc2UocykKLSAgICBvcy5jbG9zZSh0KQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLSAgICB0cnk6Ci0gICAgICAgIGxpbmsoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdKQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwcmludCgnVXNhZ2U6IGVteF9saW5rIDxzb3VyY2U+IDx0YXJnZXQ+JykKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcHJpbnQoJ2VteF9saW5rOiAlcycgJSBzdHIoc3lzLmV4Y19pbmZvKClbMV0pKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L2dycC5weSBiL0xpYi9wbGF0LW9zMmVteC9ncnAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjNlZjguLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L2dycC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0jIHRoaXMgbW9kdWxlIGlzIGFuIE9TLzIgb3JpZW50ZWQgcmVwbGFjZW1lbnQgZm9yIHRoZSBncnAgc3RhbmRhcmQKLSMgZXh0ZW5zaW9uIG1vZHVsZS4KLQotIyB3cml0dGVuIGJ5IEFuZHJldyBNYWNJbnR5cmUsIEFwcmlsIDIwMDEuCi0jIHVwZGF0ZWQgSnVseSAyMDAzLCBhZGRpbmcgZmllbGQgYWNjZXNzb3Igc3VwcG9ydAotCi0jIG5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyB3aGV0aGVyICI6IiBvciAiOyIgYXMgdXNlZCBhcwotIyB0aGUgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3Rlci4KLQotIiIiUmVwbGFjZW1lbnQgZm9yIGdycCBzdGFuZGFyZCBleHRlbnNpb24gbW9kdWxlLCBpbnRlbmRlZCBmb3IgdXNlIG9uCi1PUy8yIGFuZCBzaW1pbGFyIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgbm9ybWFsbHkgaGF2ZSBhbiAvZXRjL2dyb3VwIGZpbGUuCi0KLVRoZSBzdGFuZGFyZCBVbml4IGdyb3VwIGRhdGFiYXNlIGlzIGFuIEFTQ0lJIHRleHQgZmlsZSB3aXRoIDQgZmllbGRzIHBlcgotcmVjb3JkIChsaW5lKSwgc2VwYXJhdGVkIGJ5IGEgY29sb246Ci0gIC0gZ3JvdXAgbmFtZSAoc3RyaW5nKQotICAtIGdyb3VwIHBhc3N3b3JkIChvcHRpb25hbCBlbmNyeXB0ZWQgc3RyaW5nKQotICAtIGdyb3VwIGlkIChpbnRlZ2VyKQotICAtIGdyb3VwIG1lbWJlcnMgKGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHVzZXJpZHMsIHdpdGggbm8gc3BhY2VzKQotCi1Ob3RlIHRoYXQgbWVtYmVycyBhcmUgb25seSBpbmNsdWRlZCBpbiB0aGUgZ3JvdXAgZmlsZSBmb3IgZ3JvdXBzIHRoYXQKLWFyZW4ndCB0aGVpciBwcmltYXJ5IGdyb3Vwcy4KLShzZWUgdGhlIHNlY3Rpb24gOC4yIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLgotCi1UaGUgbW9kdWxlIGxvb2tzIGZvciB0aGUgZ3JvdXAgZGF0YWJhc2UgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnMKLShpbiBvcmRlciBmaXJzdCB0byBsYXN0KToKLSAgLSAke0VUQ19HUk9VUH0gICAgICAgICAgICAgIChvciAlRVRDX0dST1VQJSkKLSAgLSAke0VUQ30vZ3JvdXAgICAgICAgICAgICAgIChvciAlRVRDJS9ncm91cCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9ncm91cCAgIChvciAlUFlUSE9OSE9NRSUvRXRjL2dyb3VwKQotCi1DbGFzc2VzCi0tLS0tLS0tCi0KLU5vbmUKLQotRnVuY3Rpb25zCi0tLS0tLS0tLS0KLQotZ2V0Z3JnaWQoZ2lkKSAtICByZXR1cm4gdGhlIHJlY29yZCBmb3IgZ3JvdXAtaWQgZ2lkIGFzIGEgNC10dXBsZQotCi1nZXRncm5hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cCAnbmFtZScgYXMgYSA0LXR1cGxlCi0KLWdldGdyYWxsKCkgLSAgICAgcmV0dXJuIGEgbGlzdCBvZiA0LXR1cGxlcywgZWFjaCB0dXBsZSBiZWluZyBvbmUgcmVjb3JkCi0gICAgICAgICAgICAgICAgIChOT1RFOiB0aGUgb3JkZXIgaXMgYXJiaXRyYXJ5KQotCi1BdHRyaWJ1dGVzCi0tLS0tLS0tLS0tCi0KLWdyb3VwX2ZpbGUgLSAgICAgdGhlIHBhdGggb2YgdGhlIGdyb3VwIGRhdGFiYXNlIGZpbGUKLQotIiIiCi0KLWltcG9ydCBvcwotCi0jIHRyeSBhbmQgZmluZCB0aGUgZ3JvdXAgZmlsZQotX19ncm91cF9wYXRoID0gW10KLWlmICdFVENfR1JPVVAnIGluIG9zLmVudmlyb246Ci0gICAgX19ncm91cF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfR1JPVVAnXSkKLWlmICdFVEMnIGluIG9zLmVudmlyb246Ci0gICAgX19ncm91cF9wYXRoLmFwcGVuZCgnJXMvZ3JvdXAnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9FdGMvZ3JvdXAnICUgb3MuZW52aXJvblsnUFlUSE9OSE9NRSddKQotCi1ncm91cF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX2dyb3VwX3BhdGg6Ci0gICAgdHJ5OgotICAgICAgICBfX2YgPSBvcGVuKF9faSwgJ3InKQotICAgICAgICBfX2YuY2xvc2UoKQotICAgICAgICBncm91cF9maWxlID0gX19pCi0gICAgICAgIGJyZWFrCi0gICAgZXhjZXB0OgotICAgICAgICBwYXNzCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlcnMgYXJlIHJlcXVpcmVkIGZvciB0aGUgZ3JvdXAgZmlsZS4KLV9fZmllbGRfc2VwID0gWyc6J10KLWlmIG9zLnBhdGhzZXA6Ci0gICAgaWYgb3MucGF0aHNlcCAhPSAnOic6Ci0gICAgICAgIF9fZmllbGRfc2VwLmFwcGVuZChvcy5wYXRoc2VwKQotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXA6Ci0gICAgICAgICMgdGhlcmUgc2hvdWxkIGJlIDMgZGVsaW1pdGVyIGNoYXJhY3RlcnMgKGZvciA0IGZpZWxkcykKLSAgICAgICAgaWYgcmVjb3JkLmNvdW50KGMpID09IDM6Ci0gICAgICAgICAgICBmcyA9IGMKLSAgICAgICAgICAgIGJyZWFrCi0gICAgaWYgZnM6Ci0gICAgICAgIHJldHVybiBmcwotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yKCc+PiBncm91cCBkYXRhYmFzZSBmaWVsZHMgbm90IGRlbGltaXRlZCA8PCcpCi0KLSMgY2xhc3MgdG8gbWF0Y2ggdGhlIG5ldyByZWNvcmQgZmllbGQgbmFtZSBhY2Nlc3NvcnMuCi0jIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIGludGVuZGVkIHRvIGJlaGF2ZSBsaWtlIGEgcmVhZC1vbmx5IHR1cGxlLAotIyB3aXRoIGVhY2ggbWVtYmVyIGFsc28gYWNjZXNzaWJsZSBieSBhIGZpZWxkIG5hbWUuCi1jbGFzcyBHcm91cDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCBnaWQsIG1lbSk6Ci0gICAgICAgIHNlbGYuX19kaWN0X19bJ2dyX25hbWUnXSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfcGFzc3dkJ10gPSBwYXNzd2QKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfZ2lkJ10gPSBnaWQKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbWVtJ10gPSBtZW0KLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYuZ3JfbmFtZSwgc2VsZi5ncl9wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdyX2dpZCwgc2VsZi5ncl9tZW0pCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDQKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IEdJRCBvciBncm91cCBuYW1lCi1kZWYgX19yZWFkX2dyb3VwX2ZpbGUoKToKLSAgICBpZiBncm91cF9maWxlOgotICAgICAgICBncm91cCA9IG9wZW4oZ3JvdXBfZmlsZSwgJ3InKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yKCc+PiBubyBncm91cCBkYXRhYmFzZSA8PCcpCi0gICAgZ2lkeCA9IHt9Ci0gICAgbmFteCA9IHt9Ci0gICAgc2VwID0gTm9uZQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGVudHJ5ID0gZ3JvdXAucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiAzOgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZmllbGRzWzJdID0gaW50KGZpZWxkc1syXSkKLSAgICAgICAgICAgIGZpZWxkc1szXSA9IFtmLnN0cmlwKCkgZm9yIGYgaW4gZmllbGRzWzNdLnNwbGl0KCcsJyldCi0gICAgICAgICAgICByZWNvcmQgPSBHcm91cCgqZmllbGRzKQotICAgICAgICAgICAgaWYgZmllbGRzWzJdIG5vdCBpbiBnaWR4OgotICAgICAgICAgICAgICAgIGdpZHhbZmllbGRzWzJdXSA9IHJlY29yZAotICAgICAgICAgICAgaWYgZmllbGRzWzBdIG5vdCBpbiBuYW14OgotICAgICAgICAgICAgICAgIG5hbXhbZmllbGRzWzBdXSA9IHJlY29yZAotICAgICAgICBlbGlmIGxlbihlbnRyeSkgPiAwOgotICAgICAgICAgICAgcGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgZW1wdHkgb3IgbWFsZm9ybWVkIHJlY29yZHMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZ3JvdXAuY2xvc2UoKQotICAgIGlmIGxlbihnaWR4KSA9PSAwOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgIHJldHVybiAoZ2lkeCwgbmFteCkKLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IEdJRAotZGVmIGdldGdyZ2lkKGdpZCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZ1tnaWRdCi0KLSMgcmV0dXJuIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyeSBieSBncm91cCBuYW1lCi1kZWYgZ2V0Z3JuYW0obmFtZSk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gbltuYW1lXQotCi0jIHJldHVybiBhbGwgdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJpZXMKLWRlZiBnZXRncmFsbCgpOgotICAgIGcsIG4gPSBfX3JlYWRfZ3JvdXBfZmlsZSgpCi0gICAgcmV0dXJuIGcudmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0Z3JhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3B3ZC5weSBiL0xpYi9wbGF0LW9zMmVteC9wd2QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYjA3N2YuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L3B3ZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIHRoaXMgbW9kdWxlIGlzIGFuIE9TLzIgb3JpZW50ZWQgcmVwbGFjZW1lbnQgZm9yIHRoZSBwd2Qgc3RhbmRhcmQKLSMgZXh0ZW5zaW9uIG1vZHVsZS4KLQotIyB3cml0dGVuIGJ5IEFuZHJldyBNYWNJbnR5cmUsIEFwcmlsIDIwMDEuCi0jIHVwZGF0ZWQgSnVseSAyMDAzLCBhZGRpbmcgZmllbGQgYWNjZXNzb3Igc3VwcG9ydAotCi0jIG5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyB3aGV0aGVyICI6IiBvciAiOyIgYXMgdXNlZCBhcwotIyB0aGUgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3Rlci4gIFBhdGggY29udmVyc2lvbnMgYXJlIGFyZSBhcHBsaWVkIHdoZW4KLSMgdGhlIGRhdGFiYXNlIHVzZXMgIjoiIGFzIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgcHdkIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvcGFzc3dkIGZpbGUuCi0KLVRoZSBzdGFuZGFyZCBVbml4IHBhc3N3b3JkIGRhdGFiYXNlIGlzIGFuIEFTQ0lJIHRleHQgZmlsZSB3aXRoIDcgZmllbGRzCi1wZXIgcmVjb3JkIChsaW5lKSwgc2VwYXJhdGVkIGJ5IGEgY29sb246Ci0gIC0gdXNlciBuYW1lIChzdHJpbmcpCi0gIC0gcGFzc3dvcmQgKGVuY3J5cHRlZCBzdHJpbmcsIG9yICIqIiBvciAiIikKLSAgLSB1c2VyIGlkIChpbnRlZ2VyKQotICAtIGdyb3VwIGlkIChpbnRlZ2VyKQotICAtIGRlc2NyaXB0aW9uICh1c3VhbGx5IHVzZXIncyBuYW1lKQotICAtIGhvbWUgZGlyZWN0b3J5IChwYXRoIHRvIHVzZXIncyBob21lIGRpcmVjdG9yeSkKLSAgLSBzaGVsbCAocGF0aCB0byB0aGUgdXNlcidzIGxvZ2luIHNoZWxsKQotCi0oc2VlIHRoZSBzZWN0aW9uIDguMSBvZiB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlKQotCi1UaGlzIGltcGxlbWVudGF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgc3RhbmRhcmQgVW5peCBpbXBsZW1lbnRhdGlvbiBieQotYWxsb3dpbmcgdXNlIG9mIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIgLSAnOycgb24gT1MvMiwKLURPUyBhbmQgTVMtV2luZG93cyAtIGFzIHRoZSBmaWVsZCBzZXBhcmF0b3IgaW4gYWRkaXRpb24gdG8gdGhlIFVuaXgKLXN0YW5kYXJkICI6Ii4gIEFkZGl0aW9uYWxseSwgd2hlbiAiOiIgaXMgdGhlIHNlcGFyYXRvciBwYXRoIGNvbnZlcnNpb25zCi1hcmUgYXBwbGllZCB0byBkZWFsIHdpdGggYW55IG11bmdpbmcgb2YgdGhlIGRyaXZlIGxldHRlciByZWZlcmVuY2UuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX1BBU1NXRH0gICAgICAgICAgICAgKG9yICVFVENfUEFTU1dEJSkKLSAgLSAke0VUQ30vcGFzc3dkICAgICAgICAgICAgIChvciAlRVRDJS9wYXNzd2QpCi0gIC0gJHtQWVRIT05IT01FfS9FdGMvcGFzc3dkICAob3IgJVBZVEhPTkhPTUUlL0V0Yy9wYXNzd2QpCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRwd3VpZCh1aWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyLWlkIHVpZCBhcyBhIDctdHVwbGUKLQotZ2V0cHduYW0obmFtZSkgLSByZXR1cm4gdGhlIHJlY29yZCBmb3IgdXNlciAnbmFtZScgYXMgYSA3LXR1cGxlCi0KLWdldHB3YWxsKCkgLSAgICAgcmV0dXJuIGEgbGlzdCBvZiA3LXR1cGxlcywgZWFjaCB0dXBsZSBiZWluZyBvbmUgcmVjb3JkCi0gICAgICAgICAgICAgICAgIChOT1RFOiB0aGUgb3JkZXIgaXMgYXJiaXRyYXJ5KQotCi1BdHRyaWJ1dGVzCi0tLS0tLS0tLS0tCi0KLXBhc3N3ZF9maWxlIC0gICAgdGhlIHBhdGggb2YgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGZpbGUKLQotIiIiCi0KLWltcG9ydCBvcwotCi0jIHRyeSBhbmQgZmluZCB0aGUgcGFzc3dkIGZpbGUKLV9fcGFzc3dkX3BhdGggPSBbXQotaWYgJ0VUQ19QQVNTV0QnIGluIG9zLmVudmlyb246Ci0gICAgX19wYXNzd2RfcGF0aC5hcHBlbmQob3MuZW52aXJvblsnRVRDX1BBU1NXRCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvcGFzc3dkJyAlIG9zLmVudmlyb25bJ0VUQyddKQotaWYgJ1BZVEhPTkhPTUUnIGluIG9zLmVudmlyb246Ci0gICAgX19wYXNzd2RfcGF0aC5hcHBlbmQoJyVzL0V0Yy9wYXNzd2QnICUgb3MuZW52aXJvblsnUFlUSE9OSE9NRSddKQotCi1wYXNzd2RfZmlsZSA9IE5vbmUKLWZvciBfX2kgaW4gX19wYXNzd2RfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIHBhc3N3ZF9maWxlID0gX19pCi0gICAgICAgIGJyZWFrCi0gICAgZXhjZXB0OgotICAgICAgICBwYXNzCi0KLSMgcGF0aCBjb252ZXJzaW9uIGhhbmRsZXJzCi1kZWYgX19udWxscGF0aGNvbnYocGF0aCk6Ci0gICAgcmV0dXJuIHBhdGgucmVwbGFjZShvcy5hbHRzZXAsIG9zLnNlcCkKLQotZGVmIF9fdW5peHBhdGhjb252KHBhdGgpOgotICAgICMgdHdvIGtub3duIGRyaXZlIGxldHRlciB2YXJpYXRpb25zOiAieDsiIGFuZCAiJHgiCi0gICAgaWYgcGF0aFswXSA9PSAnJCc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzFdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbGlmIHBhdGhbMV0gPT0gJzsnOgotICAgICAgICBjb252ID0gcGF0aFswXSArICc6JyArIHBhdGhbMjpdCi0gICAgZWxzZToKLSAgICAgICAgY29udiA9IHBhdGgKLSAgICByZXR1cm4gY29udi5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi0jIGRlY2lkZSB3aGF0IGZpZWxkIHNlcGFyYXRvciB3ZSBjYW4gdHJ5IHRvIHVzZSAtIFVuaXggc3RhbmRhcmQsIHdpdGgKLSMgdGhlIHBsYXRmb3JtJ3MgcGF0aCBzZXBhcmF0b3IgYXMgYW4gb3B0aW9uLiAgTm8gc3BlY2lhbCBmaWVsZCBjb252ZXJzaW9uCi0jIGhhbmRsZXIgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBmaWVsZAotIyBzZXBhcmF0b3IsIGJ1dCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBhbmQgc2hlbGwgZmllbGRzIHdoZW4KLSMgdXNpbmcgdGhlIHN0YW5kYXJkIFVuaXggKCI6IikgZmllbGQgc2VwYXJhdG9yLgotX19maWVsZF9zZXAgPSB7JzonOiBfX3VuaXhwYXRoY29udn0KLWlmIG9zLnBhdGhzZXA6Ci0gICAgaWYgb3MucGF0aHNlcCAhPSAnOic6Ci0gICAgICAgIF9fZmllbGRfc2VwW29zLnBhdGhzZXBdID0gX19udWxscGF0aGNvbnYKLQotIyBoZWxwZXIgcm91dGluZSB0byBpZGVudGlmeSB3aGljaCBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIGluIHVzZQotZGVmIF9fZ2V0X2ZpZWxkX3NlcChyZWNvcmQpOgotICAgIGZzID0gTm9uZQotICAgIGZvciBjIGluIF9fZmllbGRfc2VwLmtleXMoKToKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgNiBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDcgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gNjoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IHBhc3N3ZCBkYXRhYmFzZSBmaWVsZHMgbm90IGRlbGltaXRlZCA8PCcpCi0KLSMgY2xhc3MgdG8gbWF0Y2ggdGhlIG5ldyByZWNvcmQgZmllbGQgbmFtZSBhY2Nlc3NvcnMuCi0jIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIGludGVuZGVkIHRvIGJlaGF2ZSBsaWtlIGEgcmVhZC1vbmx5IHR1cGxlLAotIyB3aXRoIGVhY2ggbWVtYmVyIGFsc28gYWNjZXNzaWJsZSBieSBhIGZpZWxkIG5hbWUuCi1jbGFzcyBQYXNzd2Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhc3N3ZCwgdWlkLCBnaWQsIGdlY29zLCBkaXIsIHNoZWxsKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydwd191aWQnXSA9IHVpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19nZWNvcyddID0gZ2Vjb3MKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfZGlyJ10gPSBkaXIKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfc2hlbGwnXSA9IHNoZWxsCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ19yZWNvcmQnXSA9IChzZWxmLnB3X25hbWUsIHNlbGYucHdfcGFzc3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wd191aWQsIHNlbGYucHdfZ2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wd19nZWNvcywgc2VsZi5wd19kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3NoZWxsKQotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiA3Ci0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlY29yZFtrZXldCi0KLSAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignYXR0cmlidXRlIHJlYWQtb25seTogJXMnICUgbmFtZSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHN0cihzZWxmLl9yZWNvcmQpCi0KLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHRoaXMgPSBzdHIoc2VsZi5fcmVjb3JkKQotICAgICAgICBpZiB0aGlzID09IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgZWxpZiB0aGlzIDwgb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAxCi0KLQotIyByZWFkIHRoZSB3aG9sZSBmaWxlLCBwYXJzaW5nIGVhY2ggZW50cnkgaW50byB0dXBsZSBmb3JtCi0jIHdpdGggZGljdGlvbmFyaWVzIHRvIHNwZWVkIHJlY2FsbCBieSBVSUQgb3IgcGFzc3dkIG5hbWUKLWRlZiBfX3JlYWRfcGFzc3dkX2ZpbGUoKToKLSAgICBpZiBwYXNzd2RfZmlsZToKLSAgICAgICAgcGFzc3dkID0gb3BlbihwYXNzd2RfZmlsZSwgJ3InKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yKCc+PiBubyBwYXNzd29yZCBkYXRhYmFzZSA8PCcpCi0gICAgdWlkeCA9IHt9Ci0gICAgbmFteCA9IHt9Ci0gICAgc2VwID0gTm9uZQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGVudHJ5ID0gcGFzc3dkLnJlYWRsaW5lKCkuc3RyaXAoKQotICAgICAgICBpZiBsZW4oZW50cnkpID4gNjoKLSAgICAgICAgICAgIGlmIHNlcCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlcCA9IF9fZ2V0X2ZpZWxkX3NlcChlbnRyeSkKLSAgICAgICAgICAgIGZpZWxkcyA9IGVudHJ5LnNwbGl0KHNlcCkKLSAgICAgICAgICAgIGZvciBpIGluICgyLCAzKToKLSAgICAgICAgICAgICAgICBmaWVsZHNbaV0gPSBpbnQoZmllbGRzW2ldKQotICAgICAgICAgICAgZm9yIGkgaW4gKDUsIDYpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IF9fZmllbGRfc2VwW3NlcF0oZmllbGRzW2ldKQotICAgICAgICAgICAgcmVjb3JkID0gUGFzc3dkKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIHVpZHg6Ci0gICAgICAgICAgICAgICAgdWlkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBwYXNzd2QuY2xvc2UoKQotICAgIGlmIGxlbih1aWR4KSA9PSAwOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgIHJldHVybiAodWlkeCwgbmFteCkKLQotIyByZXR1cm4gdGhlIHBhc3N3ZCBkYXRhYmFzZSBlbnRyeSBieSBVSUQKLWRlZiBnZXRwd3VpZCh1aWQpOgotICAgIHUsIG4gPSBfX3JlYWRfcGFzc3dkX2ZpbGUoKQotICAgIHJldHVybiB1W3VpZF0KLQotIyByZXR1cm4gdGhlIHBhc3N3ZCBkYXRhYmFzZSBlbnRyeSBieSBwYXNzd2QgbmFtZQotZGVmIGdldHB3bmFtKG5hbWUpOgotICAgIHUsIG4gPSBfX3JlYWRfcGFzc3dkX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJpZXMKLWRlZiBnZXRwd2FsbCgpOgotICAgIHUsIG4gPSBfX3JlYWRfcGFzc3dkX2ZpbGUoKQotICAgIHJldHVybiBuLnZhbHVlcygpCi0KLSMgdGVzdCBoYXJuZXNzCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGdldHB3YWxsKCkKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbiBiL0xpYi9wbGF0LW9zMmVteC9yZWdlbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2VjZDJhOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcmVnZW4KKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhIC9iaW4vc2gKLWV4cG9ydCBJTkNMVURFPSRDX0lOQ0xVREVfUEFUSAotc2V0IC12Ci1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvZmNudGwuaAotcHl0aG9uLmV4ZSAuLi8uLi9Ub29scy9zY3JpcHRzL2gycHkucHkgJENfSU5DTFVERV9QQVRIL3N5cy9zb2NrZXQuaAotcHl0aG9uLmV4ZSAuLi8uLi9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyAkQ19JTkNMVURFX1BBVEgvbmV0aW5ldC9pbi5oCi0jcHl0aG9uLmV4ZSAuLi8uLi9Ub29scy9zY3JpcHRzL2gycHkucHkgJENfSU5DTFVERV9QQVRIL3Rlcm1pb3MuaApkaWZmIC0tZ2l0IGEvTGliL3BsYXRmb3JtLnB5IGIvTGliL3BsYXRmb3JtLnB5CmluZGV4IGVjNWRmODUuLmMzYzRiMzIgMTAwNzU1Ci0tLSBhL0xpYi9wbGF0Zm9ybS5weQorKysgYi9MaWIvcGxhdGZvcm0ucHkKQEAgLTEyMiw3ICsxMjIsNyBAQAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICMgb3MuZGV2bnVsbCB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuNCwgc28gZW11bGF0ZSBpdCBmb3IgZWFybGllcgogICAgICMgUHl0aG9uIHZlcnNpb25zCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnKToKICAgICAgICAgIyBVc2UgdGhlIG9sZCBDUC9NIE5VTCBhcyBkZXZpY2UgbmFtZQogICAgICAgICBERVZfTlVMTCA9ICdOVUwnCiAgICAgZWxzZToKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgZXRjID0gb3MubGlzdGRpcignL2V0YycpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFByb2JhYmx5IG5vdCBhIFVuaXggc3lzdGVtCiAgICAgICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCiAgICAgZXRjLnNvcnQoKQpAQCAtNDAzLDEzICs0MDMsMTMgQEAKIAogZGVmIF9zeXNjbWRfdmVyKHN5c3RlbT0nJywgcmVsZWFzZT0nJywgdmVyc2lvbj0nJywKIAotICAgICAgICAgICAgICAgc3VwcG9ydGVkX3BsYXRmb3Jtcz0oJ3dpbjMyJywnd2luMTYnLCdkb3MnLCdvczInKSk6CisgICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCd3aW4xNicsJ2RvcycpKToKIAogICAgICIiIiBUcmllcyB0byBmaWd1cmUgb3V0IHRoZSBPUyB2ZXJzaW9uIHVzZWQgYW5kIHJldHVybnMKICAgICAgICAgYSB0dXBsZSAoc3lzdGVtLHJlbGVhc2UsdmVyc2lvbikuCiAKICAgICAgICAgSXQgdXNlcyB0aGUgInZlciIgc2hlbGwgY29tbWFuZCBmb3IgdGhpcyB3aGljaCBpcyBrbm93bgotICAgICAgICB0byBleGlzdHMgb24gV2luZG93cywgRE9TIGFuZCBPUy8yLiBYWFggT3RoZXJzIHRvbyA/CisgICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MuIFhYWCBPdGhlcnMgdG9vID8KIAogICAgICAgICBJbiBjYXNlIHRoaXMgZmFpbHMsIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFyZSB1c2VkIGFzCiAgICAgICAgIGRlZmF1bHRzLgpAQCAtNDI0LDEzICs0MjQsMTAgQEAKICAgICAgICAgICAgIHBpcGUgPSBwb3BlbihjbWQpCiAgICAgICAgICAgICBpbmZvID0gcGlwZS5yZWFkKCkKICAgICAgICAgICAgIGlmIHBpcGUuY2xvc2UoKToKLSAgICAgICAgICAgICAgICByYWlzZSBvcy5lcnJvcignY29tbWFuZCBmYWlsZWQnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvbW1hbmQgZmFpbGVkJykKICAgICAgICAgICAgICMgWFhYIEhvdyBjYW4gSSBzdXBwcmVzcyBzaGVsbCBlcnJvcnMgZnJvbSBiZWluZyB3cml0dGVuCiAgICAgICAgICAgICAjICAgICB0byBzdGRlcnIgPwotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsd2h5KQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxzZToKQEAgLTU4MSw3ICs1NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIERpc2NhcmQgYW55IHR5cGUgdGhhdCBpc24ndCBSRUdfU1oKICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSBSRUdfU1ogYW5kIG5hbWUuZmluZCgiU2VydmVyIikgIT0gLTE6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X3R5cGUgPSBWRVJfTlRfU0VSVkVSCi0gICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBVc2UgZGVmYXVsdCBvZiBWRVJfTlRfV09SS1NUQVRJT04KICAgICAgICAgICAgICAgICAgICAgcGFzcwogCkBAIC02MzcsNjIgKzYzNCw2IEBACiAgICAgUmVnQ2xvc2VLZXkoa2V5Q3VyVmVyKQogICAgIHJldHVybiByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlCiAKLWRlZiBfbWFjX3Zlcl9sb29rdXAoc2VsZWN0b3JzLGRlZmF1bHQ9Tm9uZSk6Ci0KLSAgICBmcm9tIF9nZXN0YWx0IGltcG9ydCBnZXN0YWx0Ci0gICAgbCA9IFtdCi0gICAgYXBwZW5kID0gbC5hcHBlbmQKLSAgICBmb3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhcHBlbmQoZ2VzdGFsdChzZWxlY3RvcikpCi0gICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgIGFwcGVuZChkZWZhdWx0KQotICAgIHJldHVybiBsCi0KLWRlZiBfYmNkMnN0cihiY2QpOgotCi0gICAgcmV0dXJuIGhleChiY2QpWzI6XQotCi1kZWYgX21hY192ZXJfZ2VzdGFsdCgpOgotICAgICIiIgotICAgICAgICBUaGFua3MgdG8gTWFyayBSLiBMZXZpbnNvbiBmb3IgbWFpbGluZyBkb2N1bWVudGF0aW9uIGxpbmtzIGFuZAotICAgICAgICBjb2RlIGV4YW1wbGVzIGZvciB0aGlzIGZ1bmN0aW9uLiBEb2N1bWVudGF0aW9uIGZvciB0aGUKLSAgICAgICAgZ2VzdGFsdCgpIEFQSSBpcyBhdmFpbGFibGUgb25saW5lIGF0OgotCi0gICAgICAgICAgIGh0dHA6Ly93d3cucmdhcm9zLm5sL2dlc3RhbHQvCi0gICAgIiIiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRoZSB2ZXJzaW9uIGluZm8gbW9kdWxlIGlzIGF2YWlsYWJsZQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF9nZXN0YWx0Ci0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gTm9uZQotICAgICMgR2V0IHRoZSBpbmZvcwotICAgIHN5c3YsIHN5c2EgPSBfbWFjX3Zlcl9sb29rdXAoKCdzeXN2Jywnc3lzYScpKQotICAgICMgRGVjb2RlIHRoZSBpbmZvcwotICAgIGlmIHN5c3Y6Ci0gICAgICAgIG1ham9yID0gKHN5c3YgJiAweEZGMDApID4+IDgKLSAgICAgICAgbWlub3IgPSAoc3lzdiAmIDB4MDBGMCkgPj4gNAotICAgICAgICBwYXRjaCA9IChzeXN2ICYgMHgwMDBGKQotCi0gICAgICAgIGlmIChtYWpvciwgbWlub3IpID49ICgxMCwgNCk6Ci0gICAgICAgICAgICAjIHRoZSAnc3lzdicgZ2VzdGFsZCBjYW5ub3QgcmV0dXJuIHBhdGNobGV2ZWxzCi0gICAgICAgICAgICAjIGhpZ2hlciB0aGFuIDkuIEFwcGxlIGludHJvZHVjZWQgMyBuZXcKLSAgICAgICAgICAgICMgZ2VzdGFsdCBjb2RlcyBpbiAxMC40IHRvIGRlYWwgd2l0aCB0aGlzCi0gICAgICAgICAgICAjIGlzc3VlIChuZWVkZWQgYmVjYXVzZSBwYXRjaCBsZXZlbHMgY2FuCi0gICAgICAgICAgICAjIHJ1biBoaWdoZXIgdGhhbiA5LCBzdWNoIGFzIDEwLjQuMTEpCi0gICAgICAgICAgICBtYWpvcixtaW5vcixwYXRjaCA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5czEnLCdzeXMyJywnc3lzMycpKQotICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laS4laScgJShtYWpvciwgbWlub3IsIHBhdGNoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVsZWFzZSA9ICclcy4laS4laScgJSAoX2JjZDJzdHIobWFqb3IpLG1pbm9yLHBhdGNoKQotCi0gICAgaWYgc3lzYToKLSAgICAgICAgbWFjaGluZSA9IHsweDE6ICc2OGsnLAotICAgICAgICAgICAgICAgICAgIDB4MjogJ1Bvd2VyUEMnLAotICAgICAgICAgICAgICAgICAgIDB4YTogJ2kzODYnfS5nZXQoc3lzYSwnJykKLQotICAgIHZlcnNpb25pbmZvPSgnJywgJycsICcnKQotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKLQogZGVmIF9tYWNfdmVyX3htbCgpOgogICAgIGZuID0gJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCcKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgpAQCAtNzA4LDcgKzY0OSw3IEBACiAgICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCiAgICAgbWFjaGluZSA9IG9zLnVuYW1lKCkubWFjaGluZQogICAgIGlmIG1hY2hpbmUgaW4gKCdwcGMnLCAnUG93ZXIgTWFjaW50b3NoJyk6Ci0gICAgICAgICMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZ2VzdGFsdCBiYXNlZCBjb2RlCisgICAgICAgICMgQ2Fub25pY2FsIG5hbWUKICAgICAgICAgbWFjaGluZSA9ICdQb3dlclBDJwogCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQpAQCAtNzMwLDEyICs2NzEsNiBAQAogICAgIGlmIGluZm8gaXMgbm90IE5vbmU6CiAgICAgICAgIHJldHVybiBpbmZvCiAKLSAgICAjIElmIHRoYXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiBmYWxsIGJhY2sgdG8gcmVhZGluZyB0aGUKLSAgICAjIGluZm9ybWF0aW9uIHVzaW5nIGdlc3RhbHQgY2FsbHMuCi0gICAgaW5mbyA9IF9tYWNfdmVyX2dlc3RhbHQoKQotICAgIGlmIGluZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBpbmZvCi0KICAgICAjIElmIHRoYXQgYWxzbyBkb2Vzbid0IHdvcmsgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcwogICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKIApAQCAtODgyLDcgKzgxNyw3IEBACiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gc29ja2V0LmdldGhvc3RuYW1lKCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFN0aWxsIG5vdCB3b3JraW5nLi4uCiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKQEAgLTkwMSwxMiArODM2LDEyIEBACiAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyB1bmFtZSBjb21tYW5kLgogICAgICIiIgotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jyk6CiAgICAgICAgICMgWFhYIE90aGVycyB0b28gPwogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRyeToKICAgICAgICAgZiA9IG9zLnBvcGVuKCd1bmFtZSAlcyAyPiAlcycgJSAob3B0aW9uLCBERVZfTlVMTCkpCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gZi5yZWFkKCkuc3RyaXAoKQogICAgIHJjID0gZi5jbG9zZSgpCkBAIC05MjQsNyArODU5LDcgQEAKICAgICAgICAgZGVmYXVsdCBpbiBjYXNlIHRoZSBjb21tYW5kIHNob3VsZCBmYWlsLgogCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdGFyZ2V0ID0gX2ZvbGxvd19zeW1saW5rcyh0YXJnZXQpCkBAIC05MzIsNyArODY3LDcgQEAKICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oWydmaWxlJywgdGFyZ2V0XSwKICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBwcm9jLmNvbW11bmljYXRlKClbMF0uZGVjb2RlKCdsYXRpbi0xJykKICAgICByYyA9IHByb2Mud2FpdCgpCmRpZmYgLS1naXQgYS9MaWIvcGxpc3RsaWIucHkgYi9MaWIvcGxpc3RsaWIucHkKaW5kZXggMmIwYjYzNC4uMjc3Y2U2MiAxMDA2NDQKLS0tIGEvTGliL3BsaXN0bGliLnB5CisrKyBiL0xpYi9wbGlzdGxpYi5weQpAQCAtNCwyNSArNCwyMCBAQAogYmFzaWMgb2JqZWN0IHR5cGVzLCBsaWtlIGRpY3Rpb25hcmllcywgbGlzdHMsIG51bWJlcnMgYW5kIHN0cmluZ3MuCiBVc3VhbGx5IHRoZSB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGEgcGxpc3QgZmlsZSwgdXNlIHRoZSB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpCi1mdW5jdGlvbi4gJ3Jvb3RPYmplY3QnIGlzIHRoZSB0b3AgbGV2ZWwgb2JqZWN0LCAncGF0aE9yRmlsZScgaXMgYQotZmlsZW5hbWUgb3IgYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgorVG8gd3JpdGUgb3V0IGEgcGxpc3QgZmlsZSwgdXNlIHRoZSBkdW1wKHZhbHVlLCBmaWxlKQorZnVuY3Rpb24uICd2YWx1ZScgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdmaWxlJyBpcworYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgogCi1UbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIHJlYWRQbGlzdChwYXRoT3JGaWxlKSBmdW5jdGlvbiwKLXdpdGggYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUpIGZpbGUgb2JqZWN0IGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBJdAorVG8gcGFyc2UgYSBwbGlzdCBmcm9tIGEgZmlsZSwgdXNlIHRoZSBsb2FkKGZpbGUpIGZ1bmN0aW9uLAord2l0aCBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CiByZXR1cm5zIHRoZSB0b3AgbGV2ZWwgb2JqZWN0IChhZ2FpbiwgdXN1YWxseSBhIGRpY3Rpb25hcnkpLgogCi1UbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB5b3UgY2FuIHVzZSByZWFkUGxpc3RGcm9tQnl0ZXMoKQotYW5kIHdyaXRlUGxpc3RUb0J5dGVzKCkuCitUbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB5b3UgY2FuIHVzZSBsb2FkcygpCithbmQgZHVtcHMoKS4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywKLWRpY3Rpb25hcmllcyAoYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIERhdGEgb3IgZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KLVN0cmluZyB2YWx1ZXMgKGluY2x1ZGluZyBkaWN0aW9uYXJ5IGtleXMpIGhhdmUgdG8gYmUgdW5pY29kZSBzdHJpbmdzIC0tIHRoZXkKLXdpbGwgYmUgd3JpdHRlbiBvdXQgYXMgVVRGLTguCi0KLVRoZSA8ZGF0YT4gcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgRGF0YSBjbGFzcy4gVGhpcyBpcyBhCi10aGluIHdyYXBwZXIgYXJvdW5kIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gVXNlICdEYXRhJyBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSwgYnl0ZXMsIGJ5dGVhcnJheSwgb3IKK2RhdGV0aW1lLmRhdGV0aW1lIG9iamVjdHMuCiAKIEdlbmVyYXRlIFBsaXN0IGV4YW1wbGU6CiAKQEAgLTM3LDIyNiArMzIsNDggQEAKICAgICAgICAgICAgIGFUcnVlVmFsdWUgPSBUcnVlLAogICAgICAgICAgICAgYUZhbHNlVmFsdWUgPSBGYWxzZSwKICAgICAgICAgKSwKLSAgICAgICAgc29tZURhdGEgPSBEYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICBzb21lTW9yZURhdGEgPSBEYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwKSwKKyAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCwKICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUubWt0aW1lKHRpbWUuZ210aW1lKCkpKSwKICAgICApCi0gICAgd3JpdGVQbGlzdChwbCwgZmlsZU5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcChwbCwgZnApCiAKIFBhcnNlIFBsaXN0IGV4YW1wbGU6CiAKLSAgICBwbCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQotICAgIHByaW50IHBsWyJhS2V5Il0KKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICdyYicpIGFzIGZwOgorICAgICAgICBwbCA9IGxvYWQoZnApCisgICAgcHJpbnQocGxbImFLZXkiXSkKICIiIgotCi0KIF9fYWxsX18gPSBbCiAgICAgInJlYWRQbGlzdCIsICJ3cml0ZVBsaXN0IiwgInJlYWRQbGlzdEZyb21CeXRlcyIsICJ3cml0ZVBsaXN0VG9CeXRlcyIsCi0gICAgIlBsaXN0IiwgIkRhdGEiLCAiRGljdCIKKyAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IiwgIkZNVF9YTUwiLCAiRk1UX0JJTkFSWSIsCisgICAgImxvYWQiLCAiZHVtcCIsICJsb2FkcyIsICJkdW1wcyIKIF0KLSMgTm90ZTogdGhlIFBsaXN0IGFuZCBEaWN0IGNsYXNzZXMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuCiAKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGVudW0KIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc3RydWN0Citmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9ydCBQYXJzZXJDcmVhdGUKIAogCi1kZWYgcmVhZFBsaXN0KHBhdGhPckZpbGUpOgotICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYQotICAgIChyZWFkYWJsZSkgZmlsZSBvYmplY3QuIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoCi0gICAgdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgotICAgICIiIgotICAgIGRpZE9wZW4gPSBGYWxzZQotICAgIHRyeToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoT3JGaWxlLCBzdHIpOgotICAgICAgICAgICAgcGF0aE9yRmlsZSA9IG9wZW4ocGF0aE9yRmlsZSwgJ3JiJykKLSAgICAgICAgICAgIGRpZE9wZW4gPSBUcnVlCi0gICAgICAgIHAgPSBQbGlzdFBhcnNlcigpCi0gICAgICAgIHJvb3RPYmplY3QgPSBwLnBhcnNlKHBhdGhPckZpbGUpCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZGlkT3BlbjoKLSAgICAgICAgICAgIHBhdGhPckZpbGUuY2xvc2UoKQotICAgIHJldHVybiByb290T2JqZWN0CitQbGlzdEZvcm1hdCA9IGVudW0uRW51bSgnUGxpc3RGb3JtYXQnLCAnRk1UX1hNTCBGTVRfQklOQVJZJywgbW9kdWxlPV9fbmFtZV9fKQorZ2xvYmFscygpLnVwZGF0ZShQbGlzdEZvcm1hdC5fX21lbWJlcnNfXykKIAogCi1kZWYgd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKToKLSAgICAiIiJXcml0ZSAncm9vdE9iamVjdCcgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQotICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAnd2InKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgd3JpdGVyID0gUGxpc3RXcml0ZXIocGF0aE9yRmlsZSkKLSAgICAgICAgd3JpdGVyLndyaXRlbG4oIjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+IikKLSAgICAgICAgd3JpdGVyLndyaXRlVmFsdWUocm9vdE9iamVjdCkKLSAgICAgICAgd3JpdGVyLndyaXRlbG4oIjwvcGxpc3Q+IikKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0KLQotZGVmIHJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKToKLSAgICAiIiJSZWFkIGEgcGxpc3QgZGF0YSBmcm9tIGEgYnl0ZXMgb2JqZWN0LiBSZXR1cm4gdGhlIHJvb3Qgb2JqZWN0LgotICAgICIiIgotICAgIHJldHVybiByZWFkUGxpc3QoQnl0ZXNJTyhkYXRhKSkKLQotCi1kZWYgd3JpdGVQbGlzdFRvQnl0ZXMocm9vdE9iamVjdCk6Ci0gICAgIiIiUmV0dXJuICdyb290T2JqZWN0JyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCi0gICAgIiIiCi0gICAgZiA9IEJ5dGVzSU8oKQotICAgIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgZikKLSAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCi0KLQotY2xhc3MgRHVtYlhNTFdyaXRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50TGV2ZWw9MCwgaW5kZW50PSJcdCIpOgotICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCi0gICAgICAgIHNlbGYuc3RhY2sgPSBbXQotICAgICAgICBzZWxmLmluZGVudExldmVsID0gaW5kZW50TGV2ZWwKLSAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKLQotICAgIGRlZiBiZWdpbkVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGVsZW1lbnQpCi0gICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiIgJSBlbGVtZW50KQotICAgICAgICBzZWxmLmluZGVudExldmVsICs9IDEKLQotICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnRMZXZlbCA+IDAKLSAgICAgICAgYXNzZXJ0IHNlbGYuc3RhY2sucG9wKCkgPT0gZWxlbWVudAotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQotCi0gICAgZGVmIHNpbXBsZUVsZW1lbnQoc2VsZiwgZWxlbWVudCwgdmFsdWU9Tm9uZSk6Ci0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdmFsdWUgPSBfZXNjYXBlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+JXM8LyVzPiIgJSAoZWxlbWVudCwgdmFsdWUsIGVsZW1lbnQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQotCi0gICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6Ci0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBzdHIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKHNlbGYuaW5kZW50TGV2ZWwgKiBzZWxmLmluZGVudCkKLSAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQotICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCi0KLQotIyBDb250ZW50cyBzaG91bGQgY29uZm9ybSB0byBhIHN1YnNldCBvZiBJU08gODYwMQotIyAoaW4gcGFydGljdWxhciwgWVlZWSAnLScgTU0gJy0nIEREICdUJyBISCAnOicgTU0gJzonIFNTICdaJy4gIFNtYWxsZXIgdW5pdHMgbWF5IGJlIG9taXR0ZWQgd2l0aAotIyAgYSBsb3NzIG9mIHByZWNpc2lvbikKLV9kYXRlUGFyc2VyID0gcmUuY29tcGlsZShyIig/UDx5ZWFyPlxkXGRcZFxkKSg/Oi0oP1A8bW9udGg+XGRcZCkoPzotKD9QPGRheT5cZFxkKSg/OlQoP1A8aG91cj5cZFxkKSg/OjooP1A8bWludXRlPlxkXGQpKD86Oig/UDxzZWNvbmQ+XGRcZCkpPyk/KT8pPyk/WiIsIHJlLkFTQ0lJKQotCi1kZWYgX2RhdGVGcm9tU3RyaW5nKHMpOgotICAgIG9yZGVyID0gKCd5ZWFyJywgJ21vbnRoJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKQotICAgIGdkID0gX2RhdGVQYXJzZXIubWF0Y2gocykuZ3JvdXBkaWN0KCkKLSAgICBsc3QgPSBbXQotICAgIGZvciBrZXkgaW4gb3JkZXI6Ci0gICAgICAgIHZhbCA9IGdkW2tleV0KLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBsc3QuYXBwZW5kKGludCh2YWwpKQotICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZSgqbHN0KQotCi1kZWYgX2RhdGVUb1N0cmluZyhkKToKLSAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCi0gICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCi0gICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCi0gICAgKQotCi0KLSMgUmVnZXggdG8gZmluZCBhbnkgY29udHJvbCBjaGFycywgZXhjZXB0IGZvciBcdCBcbiBhbmQgXHIKLV9jb250cm9sQ2hhclBhdCA9IHJlLmNvbXBpbGUoCi0gICAgciJbXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwYlx4MGNceDBlXHgwZiIKLSAgICByIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZdIikKLQotZGVmIF9lc2NhcGUodGV4dCk6Ci0gICAgbSA9IF9jb250cm9sQ2hhclBhdC5zZWFyY2godGV4dCkKLSAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdHJpbmdzIGNhbid0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVyczsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgcGxpc3RsaWIuRGF0YSBpbnN0ZWFkIikKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKLSAgICByZXR1cm4gdGV4dAotCi0KLVBMSVNUSEVBREVSID0gYiIiIlwKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLSIiIgotCi1jbGFzcyBQbGlzdFdyaXRlcihEdW1iWE1MV3JpdGVyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9YiJcdCIsIHdyaXRlSGVhZGVyPTEpOgotICAgICAgICBpZiB3cml0ZUhlYWRlcjoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCi0gICAgICAgIER1bWJYTUxXcml0ZXIuX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50TGV2ZWwsIGluZGVudCkKLQotICAgIGRlZiB3cml0ZVZhbHVlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgic3RyaW5nIiwgdmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6Ci0gICAgICAgICAgICAjIG11c3Qgc3dpdGNoIGZvciBib29sIGJlZm9yZSBpbnQsIGFzIGJvb2wgaXMgYQotICAgICAgICAgICAgIyBzdWJjbGFzcyBvZiBpbnQuLi4KLSAgICAgICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgidHJ1ZSIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZmFsc2UiKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImludGVnZXIiLCAiJWQiICUgdmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJyZWFsIiwgcmVwcih2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlRGljdCh2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEYXRhKHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGF0ZSIsIF9kYXRlVG9TdHJpbmcodmFsdWUpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgc2VsZi53cml0ZUFycmF5KHZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLQotICAgIGRlZiB3cml0ZURhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkYXRhIikKLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCAtPSAxCi0gICAgICAgIG1heGxpbmVsZW5ndGggPSBtYXgoMTYsIDc2IC0gbGVuKHNlbGYuaW5kZW50LnJlcGxhY2UoYiJcdCIsIGIiICIgKiA4KSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGVudExldmVsKSkKLSAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5hc0Jhc2U2NChtYXhsaW5lbGVuZ3RoKS5zcGxpdChiIlxuIik6Ci0gICAgICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVsbihsaW5lKQotICAgICAgICBzZWxmLmluZGVudExldmVsICs9IDEKLSAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkYXRhIikKLQotICAgIGRlZiB3cml0ZURpY3Qoc2VsZiwgZCk6Ci0gICAgICAgIGlmIGQ6Ci0gICAgICAgICAgICBzZWxmLmJlZ2luRWxlbWVudCgiZGljdCIpCi0gICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkLml0ZW1zKCkpCi0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQotICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgia2V5Iiwga2V5KQotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVWYWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYuZW5kRWxlbWVudCgiZGljdCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImRpY3QiKQotCi0gICAgZGVmIHdyaXRlQXJyYXkoc2VsZiwgYXJyYXkpOgotICAgICAgICBpZiBhcnJheToKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJhcnJheSIpCi0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gYXJyYXk6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJhcnJheSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImFycmF5IikKKyMKKyMKKyMgRGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5CisjCisjCiAKIAogY2xhc3MgX0ludGVybmFsRGljdChkaWN0KToKQEAgLTI2NCwxOSArODEsMTggQEAKICAgICAjIFRoaXMgY2xhc3MgaXMgbmVlZGVkIHdoaWxlIERpY3QgaXMgc2NoZWR1bGVkIGZvciBkZXByZWNhdGlvbjoKICAgICAjIHdlIG9ubHkgbmVlZCB0byB3YXJuIHdoZW4gYSAqdXNlciogaW5zdGFudGlhdGVzIERpY3Qgb3Igd2hlbgogICAgICMgdGhlICJhdHRyaWJ1dGUgbm90YXRpb24gZm9yIGRpY3Qga2V5cyIgaXMgdXNlZC4KKyAgICBfX3Nsb3RzX18gPSAoKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbYXR0cl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoYXR0cikKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJBdHRyaWJ1dGUgYWNjZXNzIGZyb20gcGxpc3QgZGljdHMgaXMgZGVwcmVjYXRlZCwgdXNlIGRba2V5XSAiCiAgICAgICAgICAgICAgIm5vdGF0aW9uIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHJldHVybiB2YWx1ZQogCiAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIGF0dHIsIHZhbHVlKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJBdHRyaWJ1dGUgYWNjZXNzIGZyb20gcGxpc3QgZGljdHMgaXMgZGVwcmVjYXRlZCwgdXNlIGRba2V5XSAiCiAgICAgICAgICAgICAgIm5vdGF0aW9uIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGZbYXR0cl0gPSB2YWx1ZQpAQCAtMjg2LDU2ICsxMDIsMTExIEBACiAgICAgICAgICAgICBkZWwgc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKIAorCiBjbGFzcyBEaWN0KF9JbnRlcm5hbERpY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJUaGUgcGxpc3RsaWIuRGljdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYnVpbHRpbiBkaWN0IGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAogCi1jbGFzcyBQbGlzdChfSW50ZXJuYWxEaWN0KToKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgX21heWJlX29wZW4ocGF0aE9yRmlsZSwgbW9kZSk6CisgICAgaWYgaXNpbnN0YW5jZShwYXRoT3JGaWxlLCBzdHIpOgorICAgICAgICB3aXRoIG9wZW4ocGF0aE9yRmlsZSwgbW9kZSkgYXMgZnA6CisgICAgICAgICAgICB5aWVsZCBmcAogCi0gICAgIiIiVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcmVhZFBsaXN0KCkgYW5kIHdyaXRlUGxpc3QoKQorICAgIGVsc2U6CisgICAgICAgIHlpZWxkIHBhdGhPckZpbGUKKworCitjbGFzcyBQbGlzdChfSW50ZXJuYWxEaWN0KToKKyAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBkdW1wKCkgYW5kIGxvYWQoKQogICAgIGZ1bmN0aW9ucyBpbnN0ZWFkLCB0b2dldGhlciB3aXRoIHJlZ3VsYXIgZGljdCBvYmplY3RzLgogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgotICAgICAgICB3YXJuKCJUaGUgUGxpc3QgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSByZWFkUGxpc3QoKSBhbmQgIgotICAgICAgICAgICAgICJ3cml0ZVBsaXN0KCkgZnVuY3Rpb25zIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIGxvYWQoKSBhbmQgIgorICAgICAgICAgICAgICJkdW1wKCkgZnVuY3Rpb25zIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKiprd2FyZ3MpCiAKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbUZpbGUoY2xzLCBwYXRoT3JGaWxlKToKLSAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSByZWFkUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICByb290T2JqZWN0ID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgbG9hZCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB2YWx1ZSA9IGxvYWQoZnApCiAgICAgICAgIHBsaXN0ID0gY2xzKCkKLSAgICAgICAgcGxpc3QudXBkYXRlKHJvb3RPYmplY3QpCisgICAgICAgIHBsaXN0LnVwZGF0ZSh2YWx1ZSkKICAgICAgICAgcmV0dXJuIHBsaXN0Ci0gICAgZnJvbUZpbGUgPSBjbGFzc21ldGhvZChmcm9tRmlsZSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBwYXRoT3JGaWxlKToKLSAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSB3cml0ZVBsaXN0KCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKLSAgICAgICAgd3JpdGVQbGlzdChzZWxmLCBwYXRoT3JGaWxlKQorICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIGR1bXAoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgorICAgICAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZHVtcChzZWxmLCBmcCkKIAogCi1kZWYgX2VuY29kZUJhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKLSAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKLSAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKLSAgICBwaWVjZXMgPSBbXQotICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6Ci0gICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCi0gICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCi0gICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKK2RlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6CisgICAgIiIiCisgICAgUmVhZCBhIC5wbGlzdCBmcm9tIGEgcGF0aCBvciBmaWxlLiBwYXRoT3JGaWxlIHNob3VsZCBlaXRoZXIKKyAgICBiZSBhIGZpbGUgbmFtZSwgb3IgYSByZWFkYWJsZSBiaW5hcnkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZCgpIGluc3RlYWQiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisKKyAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICByZXR1cm4gbG9hZChmcCwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlLAorICAgICAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKK2RlZiB3cml0ZVBsaXN0KHZhbHVlLCBwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdwYXRoT3JGaWxlJyBtYXkgZWl0aGVyIGJlIGEKKyAgICBmaWxlIG5hbWUgb3IgYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcCBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHZhbHVlLCBmcCwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKworCitkZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgorICAgICIiIgorICAgIFJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSByZWFkUGxpc3RGcm9tQnl0ZXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gbG9hZChCeXRlc0lPKGRhdGEpLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgIGRpY3RfdHlwZT1fSW50ZXJuYWxEaWN0KQorCisKK2RlZiB3cml0ZVBsaXN0VG9CeXRlcyh2YWx1ZSk6CisgICAgIiIiCisgICAgUmV0dXJuICd2YWx1ZScgYXMgYSBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgd3JpdGVQbGlzdFRvQnl0ZXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXBzKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICBmID0gQnl0ZXNJTygpCisgICAgZHVtcCh2YWx1ZSwgZiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKyAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCisKIAogY2xhc3MgRGF0YToKKyAgICAiIiIKKyAgICBXcmFwcGVyIGZvciBiaW5hcnkgZGF0YS4KIAotICAgICIiIldyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLiIiIgorICAgIFRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIGEgYnl0ZXMgb2JqZWN0IGluc3RlYWQuCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKToKQEAgLTM0NiwxMCArMjE3LDEwIEBACiAgICAgZGVmIGZyb21CYXNlNjQoY2xzLCBkYXRhKToKICAgICAgICAgIyBiYXNlNjQuZGVjb2RlYnl0ZXMganVzdCBjYWxscyBiaW5hc2NpaS5hMmJfYmFzZTY0OwogICAgICAgICAjIGl0IHNlZW1zIG92ZXJraWxsIHRvIHVzZSBib3RoIGJhc2U2NCBhbmQgYmluYXNjaWkuCi0gICAgICAgIHJldHVybiBjbHMoYmluYXNjaWkuYTJiX2Jhc2U2NChkYXRhKSkKKyAgICAgICAgcmV0dXJuIGNscyhfZGVjb2RlX2Jhc2U2NChkYXRhKSkKIAogICAgIGRlZiBhc0Jhc2U2NChzZWxmLCBtYXhsaW5lbGVuZ3RoPTc2KToKLSAgICAgICAgcmV0dXJuIF9lbmNvZGVCYXNlNjQoc2VsZi5kYXRhLCBtYXhsaW5lbGVuZ3RoKQorICAgICAgICByZXR1cm4gX2VuY29kZV9iYXNlNjQoc2VsZi5kYXRhLCBtYXhsaW5lbGVuZ3RoKQogCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKQEAgLTM2Miw0MyArMjMzLDExOSBAQAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlcyglcykiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCByZXByKHNlbGYuZGF0YSkpCiAKLWNsYXNzIFBsaXN0UGFyc2VyOgorIworIworIyBFbmQgb2YgZGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5CisjCisjCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6CisKKyMKKyMgWE1MIHN1cHBvcnQKKyMKKworCisjIFhNTCAnaGVhZGVyJworUExJU1RIRUFERVIgPSBiIiIiXAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorIiIiCisKKworIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgorX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKKyAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgorICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQorCitkZWYgX2VuY29kZV9iYXNlNjQocywgbWF4bGluZWxlbmd0aD03Nik6CisgICAgIyBjb3BpZWQgZnJvbSBiYXNlNjQuZW5jb2RlYnl0ZXMoKSwgd2l0aCBhZGRlZCBtYXhsaW5lbGVuZ3RoIGFyZ3VtZW50CisgICAgbWF4Ymluc2l6ZSA9IChtYXhsaW5lbGVuZ3RoLy80KSozCisgICAgcGllY2VzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIG1heGJpbnNpemUpOgorICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBtYXhiaW5zaXplXQorICAgICAgICBwaWVjZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQoY2h1bmspKQorICAgIHJldHVybiBiJycuam9pbihwaWVjZXMpCisKK2RlZiBfZGVjb2RlX2Jhc2U2NChzKToKKyAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMuZW5jb2RlKCJ1dGYtOCIpKQorCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocykKKworIyBDb250ZW50cyBzaG91bGQgY29uZm9ybSB0byBhIHN1YnNldCBvZiBJU08gODYwMQorIyAoaW4gcGFydGljdWxhciwgWVlZWSAnLScgTU0gJy0nIEREICdUJyBISCAnOicgTU0gJzonIFNTICdaJy4gIFNtYWxsZXIgdW5pdHMKKyMgbWF5IGJlIG9taXR0ZWQgd2l0aCAjICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQorX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCisKKworZGVmIF9kYXRlX2Zyb21fc3RyaW5nKHMpOgorICAgIG9yZGVyID0gKCd5ZWFyJywgJ21vbnRoJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnKQorICAgIGdkID0gX2RhdGVQYXJzZXIubWF0Y2gocykuZ3JvdXBkaWN0KCkKKyAgICBsc3QgPSBbXQorICAgIGZvciBrZXkgaW4gb3JkZXI6CisgICAgICAgIHZhbCA9IGdkW2tleV0KKyAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICBsc3QuYXBwZW5kKGludCh2YWwpKQorICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZSgqbHN0KQorCisKK2RlZiBfZGF0ZV90b19zdHJpbmcoZCk6CisgICAgcmV0dXJuICclMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZFonICUgKAorICAgICAgICBkLnllYXIsIGQubW9udGgsIGQuZGF5LAorICAgICAgICBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZAorICAgICkKKworZGVmIF9lc2NhcGUodGV4dCk6CisgICAgbSA9IF9jb250cm9sQ2hhclBhdC5zZWFyY2godGV4dCkKKyAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdHJpbmdzIGNhbid0IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVyczsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgYnl0ZXMgaW5zdGVhZCIpCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHJcbiIsICJcbiIpICAgICAgICMgY29udmVydCBET1MgbGluZSBlbmRpbmdzCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHIiLCAiXG4iKSAgICAgICAgICMgY29udmVydCBNYWMgbGluZSBlbmRpbmdzCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiJiIsICImYW1wOyIpICAgICAgICMgZXNjYXBlICcmJworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpICAgICAgICAjIGVzY2FwZSAnPCcKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI+IiwgIiZndDsiKSAgICAgICAgIyBlc2NhcGUgJz4nCisgICAgcmV0dXJuIHRleHQKKworY2xhc3MgX1BsaXN0UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlKToKICAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuY3VycmVudEtleSA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgc2VsZi5yb290ID0gTm9uZQorICAgICAgICBzZWxmLl91c2VfYnVpbHRpbl90eXBlcyA9IHVzZV9idWlsdGluX3R5cGVzCisgICAgICAgIHNlbGYuX2RpY3RfdHlwZSA9IGRpY3RfdHlwZQogCiAgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVvYmopOgotICAgICAgICBmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9ydCBQYXJzZXJDcmVhdGUKICAgICAgICAgc2VsZi5wYXJzZXIgPSBQYXJzZXJDcmVhdGUoKQotICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVCZWdpbkVsZW1lbnQKLSAgICAgICAgc2VsZi5wYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUVuZEVsZW1lbnQKLSAgICAgICAgc2VsZi5wYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmhhbmRsZURhdGEKKyAgICAgICAgc2VsZi5wYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2JlZ2luX2VsZW1lbnQKKyAgICAgICAgc2VsZi5wYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZV9lbmRfZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlX2RhdGEKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2VGaWxlKGZpbGVvYmopCiAgICAgICAgIHJldHVybiBzZWxmLnJvb3QKIAotICAgIGRlZiBoYW5kbGVCZWdpbkVsZW1lbnQoc2VsZiwgZWxlbWVudCwgYXR0cnMpOgorICAgIGRlZiBoYW5kbGVfYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJiZWdpbl8iICsgZWxlbWVudCwgTm9uZSkKICAgICAgICAgaWYgaGFuZGxlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGhhbmRsZXIoYXR0cnMpCiAKLSAgICBkZWYgaGFuZGxlRW5kRWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICBkZWYgaGFuZGxlX2VuZF9lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgICAgICBoYW5kbGVyID0gZ2V0YXR0cihzZWxmLCAiZW5kXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcigpCiAKLSAgICBkZWYgaGFuZGxlRGF0YShzZWxmLCBkYXRhKToKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoZGF0YSkKIAotICAgIGRlZiBhZGRPYmplY3Qoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXkgaXMgbm90IE5vbmU6CisgICAgZGVmIGFkZF9vYmplY3Qoc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFja1stMV0sIHR5cGUoe30pKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGVsZW1lbnQgYXQgbGluZSAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpCi0gICAgICAgICAgICBzZWxmLnN0YWNrWy0xXVtzZWxmLmN1cnJlbnRLZXldID0gdmFsdWUKLSAgICAgICAgICAgIHNlbGYuY3VycmVudEtleSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudF9rZXldID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9rZXkgPSBOb25lCiAgICAgICAgIGVsaWYgbm90IHNlbGYuc3RhY2s6CiAgICAgICAgICAgICAjIHRoaXMgaXMgdGhlIHJvb3Qgb2JqZWN0CiAgICAgICAgICAgICBzZWxmLnJvb3QgPSB2YWx1ZQpAQCAtNDA4LDcgKzM1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKICAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdLmFwcGVuZCh2YWx1ZSkKIAotICAgIGRlZiBnZXREYXRhKHNlbGYpOgorICAgIGRlZiBnZXRfZGF0YShzZWxmKToKICAgICAgICAgZGF0YSA9ICcnLmpvaW4oc2VsZi5kYXRhKQogICAgICAgICBzZWxmLmRhdGEgPSBbXQogICAgICAgICByZXR1cm4gZGF0YQpAQCAtNDE2LDM5ICszNjMsNjQ4IEBACiAgICAgIyBlbGVtZW50IGhhbmRsZXJzCiAKICAgICBkZWYgYmVnaW5fZGljdChzZWxmLCBhdHRycyk6Ci0gICAgICAgIGQgPSBfSW50ZXJuYWxEaWN0KCkKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoZCkKKyAgICAgICAgZCA9IHNlbGYuX2RpY3RfdHlwZSgpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChkKQogICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChkKQorCiAgICAgZGVmIGVuZF9kaWN0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtaXNzaW5nIHZhbHVlIGZvciBrZXkgJyVzJyBhdCBsaW5lICVkIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRLZXksc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50X2tleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCiAgICAgICAgIHNlbGYuc3RhY2sucG9wKCkKIAogICAgIGRlZiBlbmRfa2V5KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRLZXkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFja1stMV0sIHR5cGUoe30pKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5leHBlY3RlZCBrZXkgYXQgbGluZSAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gc2VsZi5nZXREYXRhKCkKKyAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IHNlbGYuZ2V0X2RhdGEoKQogCiAgICAgZGVmIGJlZ2luX2FycmF5KHNlbGYsIGF0dHJzKToKICAgICAgICAgYSA9IFtdCi0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGEpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChhKQogICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChhKQorCiAgICAgZGVmIGVuZF9hcnJheShzZWxmKToKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF90cnVlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChUcnVlKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoVHJ1ZSkKKwogICAgIGRlZiBlbmRfZmFsc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KEZhbHNlKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoRmFsc2UpCisKICAgICBkZWYgZW5kX2ludGVnZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGludChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChpbnQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfcmVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoZmxvYXQoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoZmxvYXQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfc3RyaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChzZWxmLmdldERhdGEoKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KHNlbGYuZ2V0X2RhdGEoKSkKKwogICAgIGRlZiBlbmRfZGF0YShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRGF0YS5mcm9tQmFzZTY0KHNlbGYuZ2V0RGF0YSgpLmVuY29kZSgidXRmLTgiKSkpCisgICAgICAgIGlmIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KF9kZWNvZGVfYmFzZTY0KHNlbGYuZ2V0X2RhdGEoKSkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYWRkX29iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKwogICAgIGRlZiBlbmRfZGF0ZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoX2RhdGVGcm9tU3RyaW5nKHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KF9kYXRlX2Zyb21fc3RyaW5nKHNlbGYuZ2V0X2RhdGEoKSkpCisKKworY2xhc3MgX0R1bWJYTUxXcml0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6CisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5zdGFjayA9IFtdCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCA9IGluZGVudF9sZXZlbAorICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAorCisgICAgZGVmIGJlZ2luX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGVsZW1lbnQpCisgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiIgJSBlbGVtZW50KQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgKz0gMQorCisgICAgZGVmIGVuZF9lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBhc3NlcnQgc2VsZi5faW5kZW50X2xldmVsID4gMAorICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50CisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCAtPSAxCisgICAgICAgIHNlbGYud3JpdGVsbigiPC8lcz4iICUgZWxlbWVudCkKKworICAgIGRlZiBzaW1wbGVfZWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCisgICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzLz4iICUgZWxlbWVudCkKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgIyBwbGlzdCBoYXMgZml4ZWQgZW5jb2Rpbmcgb2YgdXRmLTgKKworICAgICAgICAgICAgIyBYWFg6IGlzIHRoaXMgdGVzdCBuZWVkZWQ/CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5faW5kZW50X2xldmVsICogc2VsZi5pbmRlbnQpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUobGluZSkKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKGInXG4nKQorCisKK2NsYXNzIF9QbGlzdFdyaXRlcihfRHVtYlhNTFdyaXRlcik6CisgICAgZGVmIF9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSwKKyAgICAgICAgICAgIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSk6CisKKyAgICAgICAgaWYgd3JpdGVIZWFkZXI6CisgICAgICAgICAgICBmaWxlLndyaXRlKFBMSVNUSEVBREVSKQorICAgICAgICBfRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWwsIGluZGVudCkKKyAgICAgICAgc2VsZi5fc29ydF9rZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuX3NraXBrZXlzID0gc2tpcGtleXMKKworICAgIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQorICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICBzZWxmLndyaXRlbG4oIjwvcGxpc3Q+IikKKworICAgIGRlZiB3cml0ZV92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKKworICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJ0cnVlIikKKworICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiZmFsc2UiKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImludGVnZXIiLCAiJWQiICUgdmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJyZWFsIiwgcmVwcih2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZGljdCh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kYXRhKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfYnl0ZXModmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkYXRlIiwgX2RhdGVfdG9fc3RyaW5nKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9hcnJheSh2YWx1ZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlKHZhbHVlKSkKKworICAgIGRlZiB3cml0ZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXRlX2J5dGVzKGRhdGEuZGF0YSkKKworICAgIGRlZiB3cml0ZV9ieXRlcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkYXRhIikKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICogc2VsZi5faW5kZW50X2xldmVsKSkKKworICAgICAgICBmb3IgbGluZSBpbiBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhsaW5lbGVuZ3RoKS5zcGxpdChiIlxuIik6CisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVsbihsaW5lKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICBzZWxmLmVuZF9lbGVtZW50KCJkYXRhIikKKworICAgIGRlZiB3cml0ZV9kaWN0KHNlbGYsIGQpOgorICAgICAgICBpZiBkOgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkaWN0IikKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5pdGVtcygpCisKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJrZXkiLCBrZXkpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRpY3QiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkaWN0IikKKworICAgIGRlZiB3cml0ZV9hcnJheShzZWxmLCBhcnJheSk6CisgICAgICAgIGlmIGFycmF5OgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJhcnJheSIpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gYXJyYXk6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImFycmF5IikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiYXJyYXkiKQorCisKK2RlZiBfaXNfZm10X3htbChoZWFkZXIpOgorICAgIHByZWZpeGVzID0gKGInPD94bWwnLCBiJzxwbGlzdCcpCisKKyAgICBmb3IgcGZ4IGluIHByZWZpeGVzOgorICAgICAgICBpZiBoZWFkZXIuc3RhcnRzd2l0aChwZngpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgQWxzbyBjaGVjayBmb3IgYWx0ZXJuYXRpdmUgWE1MIGVuY29kaW5ncywgdGhpcyBpcyBzbGlnaHRseQorICAgICMgb3ZlcmtpbGwgYmVjYXVzZSB0aGUgQXBwbGUgdG9vbHMgKGFuZCBwbGlzdGxpYikgd2lsbCBub3QKKyAgICAjIGdlbmVyYXRlIGZpbGVzIHdpdGggdGhlc2UgZW5jb2RpbmdzLgorICAgIGZvciBib20sIGVuY29kaW5nIGluICgKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEY4LCAidXRmLTgiKSwKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEYxNl9CRSwgInV0Zi0xNi1iZSIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0xFLCAidXRmLTE2LWxlIiksCisgICAgICAgICAgICAgICAgIyBleHBhdCBkb2VzIG5vdCBzdXBwb3J0IHV0Zi0zMgorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9CRSwgInV0Zi0zMi1iZSIpLAorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9MRSwgInV0Zi0zMi1sZSIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgaWYgbm90IGhlYWRlci5zdGFydHN3aXRoKGJvbSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZvciBzdGFydCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIHByZWZpeCA9IGJvbSArIHN0YXJ0LmRlY29kZSgnYXNjaWknKS5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBpZiBoZWFkZXJbOmxlbihwcmVmaXgpXSA9PSBwcmVmaXg6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCisjCisjIEJpbmFyeSBQbGlzdAorIworCisKK2NsYXNzIEludmFsaWRGaWxlRXhjZXB0aW9uIChWYWx1ZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZT0iSW52YWxpZCBmaWxlIik6CisgICAgICAgIFZhbHVlRXJyb3IuX19pbml0X18oc2VsZiwgbWVzc2FnZSkKKworX0JJTkFSWV9GT1JNQVQgPSB7MTogJ0InLCAyOiAnSCcsIDQ6ICdMJywgODogJ1EnfQorCitjbGFzcyBfQmluYXJ5UGxpc3RQYXJzZXI6CisgICAgIiIiCisgICAgUmVhZCBvciB3cml0ZSBhIGJpbmFyeSBwbGlzdCBmaWxlLCBmb2xsb3dpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBiaW5hcnkKKyAgICBmb3JtYXQuICBSYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbiBpbiBjYXNlIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIHRoZQorICAgIHJvb3Qgb2JqZWN0LgorCisgICAgc2VlIGFsc286IGh0dHA6Ly9vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvQ0YvQ0YtNzQ0LjE4L0NGQmluYXJ5UExpc3QuYworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlKToKKyAgICAgICAgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXMgPSB1c2VfYnVpbHRpbl90eXBlcworICAgICAgICBzZWxmLl9kaWN0X3R5cGUgPSBkaWN0X3R5cGUKKworICAgIGRlZiBwYXJzZShzZWxmLCBmcCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVGhlIGJhc2ljIGZpbGUgZm9ybWF0OgorICAgICAgICAgICAgIyBIRUFERVIKKyAgICAgICAgICAgICMgb2JqZWN0Li4uCisgICAgICAgICAgICAjIHJlZmlkLT5vZmZzZXQuLi4KKyAgICAgICAgICAgICMgVFJBSUxFUgorICAgICAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICAgICAgc2VsZi5fZnAuc2VlaygtMzIsIG9zLlNFRUtfRU5EKQorICAgICAgICAgICAgdHJhaWxlciA9IHNlbGYuX2ZwLnJlYWQoMzIpCisgICAgICAgICAgICBpZiBsZW4odHJhaWxlcikgIT0gMzI6CisgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsIHRvcF9vYmplY3QsCisgICAgICAgICAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldAorICAgICAgICAgICAgKSA9IHN0cnVjdC51bnBhY2soJz42eEJCUVFRJywgdHJhaWxlcikKKyAgICAgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0X3RhYmxlX29mZnNldCkKKyAgICAgICAgICAgIG9mZnNldF9mb3JtYXQgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtvZmZzZXRfc2l6ZV0gKiBudW1fb2JqZWN0cworICAgICAgICAgICAgc2VsZi5fcmVmX2Zvcm1hdCA9IF9CSU5BUllfRk9STUFUW3NlbGYuX3JlZl9zaXplXQorICAgICAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAgIG9mZnNldF9mb3JtYXQsIHNlbGYuX2ZwLnJlYWQob2Zmc2V0X3NpemUgKiBudW1fb2JqZWN0cykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbdG9wX29iamVjdF0pCisKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJbmRleEVycm9yLCBzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCisgICAgZGVmIF9nZXRfc2l6ZShzZWxmLCB0b2tlbkwpOgorICAgICAgICAiIiIgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBuZXh0IG9iamVjdC4iIiIKKyAgICAgICAgaWYgdG9rZW5MID09IDB4RjoKKyAgICAgICAgICAgIG0gPSBzZWxmLl9mcC5yZWFkKDEpWzBdICYgMHgzCisgICAgICAgICAgICBzID0gMSA8PCBtCisgICAgICAgICAgICBmID0gJz4nICsgX0JJTkFSWV9GT1JNQVRbc10KKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKGYsIHNlbGYuX2ZwLnJlYWQocykpWzBdCisKKyAgICAgICAgcmV0dXJuIHRva2VuTAorCisgICAgZGVmIF9yZWFkX3JlZnMoc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIG4sIHNlbGYuX2ZwLnJlYWQobiAqIHNlbGYuX3JlZl9zaXplKSkKKworICAgIGRlZiBfcmVhZF9vYmplY3Qoc2VsZiwgb2Zmc2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWQgdGhlIG9iamVjdCBhdCBvZmZzZXQuCisKKyAgICAgICAgTWF5IHJlY3Vyc2l2ZWx5IHJlYWQgc3ViLW9iamVjdHMgKGNvbnRlbnQgb2YgYW4gYXJyYXkvZGljdC9zZXQpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mcC5zZWVrKG9mZnNldCkKKyAgICAgICAgdG9rZW4gPSBzZWxmLl9mcC5yZWFkKDEpWzBdCisgICAgICAgIHRva2VuSCwgdG9rZW5MID0gdG9rZW4gJiAweEYwLCB0b2tlbiAmIDB4MEYKKworICAgICAgICBpZiB0b2tlbiA9PSAweDAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDg6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgVGhlIHJlZmVyZW5jZWQgc291cmNlIGNvZGUgYWxzbyBtZW50aW9ucyBVUkwgKDB4MGMsIDB4MGQpIGFuZAorICAgICAgICAjIFVVSUQgKDB4MGUpLCBidXQgbmVpdGhlciBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBDb2NvYSBsaWJyYXJpZXMuCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDBmOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4MTA6ICAjIGludAorICAgICAgICAgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKHNlbGYuX2ZwLnJlYWQoMSA8PCB0b2tlbkwpLCAnYmlnJykKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MjI6ICMgcmVhbAorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5mJywgc2VsZi5fZnAucmVhZCg0KSlbMF0KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MjM6ICMgcmVhbAorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5fZnAucmVhZCg4KSlbMF0KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MzM6ICAjIGRhdGUKKyAgICAgICAgICAgIGYgPSBzdHJ1Y3QudW5wYWNrKCc+ZCcsIHNlbGYuX2ZwLnJlYWQoOCkpWzBdCisgICAgICAgICAgICAjIHRpbWVzdGFtcCAwIG9mIGJpbmFyeSBwbGlzdHMgY29ycmVzcG9uZHMgdG8gMS8xLzIwMDEKKyAgICAgICAgICAgICMgKHllYXIgb2YgTWFjIE9TIFggMTAuMCksIGluc3RlYWQgb2YgMS8xLzE5NzAuCisgICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcChmICsgKDMxICogMzY1ICsgOCkgKiA4NjQwMCkKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDQwOiAgIyBkYXRhCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnJlYWQocykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIERhdGEoc2VsZi5fZnAucmVhZChzKSkKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDUwOiAgIyBhc2NpaSBzdHJpbmcKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICByZXN1bHQgPSAgc2VsZi5fZnAucmVhZChzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDYwOiAgIyB1bmljb2RlIHN0cmluZworICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mcC5yZWFkKHMgKiAyKS5kZWNvZGUoJ3V0Zi0xNmJlJykKKworICAgICAgICAjIHRva2VuSCA9PSAweDgwIGlzIGRvY3VtZW50ZWQgYXMgJ1VJRCcgYW5kIGFwcGVhcnMgdG8gYmUgdXNlZCBmb3IKKyAgICAgICAgIyBrZXllZC1hcmNoaXZpbmcsIG5vdCBpbiBwbGlzdHMuCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHhBMDogICMgYXJyYXkKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBvYmpfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1t4XSkKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBvYmpfcmVmc10KKworICAgICAgICAjIHRva2VuSCA9PSAweEIwIGlzIGRvY3VtZW50ZWQgYXMgJ29yZHNldCcsIGJ1dCBpcyBub3QgYWN0dWFsbHkKKyAgICAgICAgIyBpbXBsZW1lbnRlZCBpbiB0aGUgQXBwbGUgcmVmZXJlbmNlIGNvZGUuCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHhDMCBpcyBkb2N1bWVudGVkIGFzICdzZXQnLCBidXQgc2V0cyBjYW5ub3QgYmUgdXNlZCBpbgorICAgICAgICAjIHBsaXN0cy4KKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweEQwOiAgIyBkaWN0CisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAga2V5X3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIG9ial9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9kaWN0X3R5cGUoKQorICAgICAgICAgICAgZm9yIGssIG8gaW4gemlwKGtleV9yZWZzLCBvYmpfcmVmcyk6CisgICAgICAgICAgICAgICAgcmVzdWx0W3NlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW2tdKQorICAgICAgICAgICAgICAgICAgICBdID0gc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbb10pCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCitkZWYgX2NvdW50X3RvX3NpemUoY291bnQpOgorICAgIGlmIGNvdW50IDwgMSA8PCA4OgorICAgICAgICByZXR1cm4gMQorCisgICAgZWxpZiBjb3VudCA8IDEgPDwgMTY6CisgICAgICAgIHJldHVybiAyCisKKyAgICBlbGlmIGNvdW50IDw8IDEgPDwgMzI6CisgICAgICAgIHJldHVybiA0CisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gOAorCitjbGFzcyBfQmluYXJ5UGxpc3RXcml0ZXIgKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBzb3J0X2tleXMsIHNraXBrZXlzKToKKyAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKworICAgICAgICAjIEZsYXR0ZW5lZCBvYmplY3QgbGlzdDoKKyAgICAgICAgc2VsZi5fb2JqbGlzdCA9IFtdCisKKyAgICAgICAgIyBNYXBwaW5ncyBmcm9tIG9iamVjdC0+b2JqZWN0aWQKKyAgICAgICAgIyBGaXJzdCBkaWN0IGhhcyAodHlwZShvYmplY3QpLCBvYmplY3QpIGFzIHRoZSBrZXksCisgICAgICAgICMgc2Vjb25kIGRpY3QgaXMgdXNlZCB3aGVuIG9iamVjdCBpcyBub3QgaGFzaGFibGUgYW5kCisgICAgICAgICMgaGFzIGlkKG9iamVjdCkgYXMgdGhlIGtleS4KKyAgICAgICAgc2VsZi5fb2JqdGFibGUgPSB7fQorICAgICAgICBzZWxmLl9vYmppZHRhYmxlID0ge30KKworICAgICAgICAjIENyZWF0ZSBsaXN0IG9mIGFsbCBvYmplY3RzIGluIHRoZSBwbGlzdAorICAgICAgICBzZWxmLl9mbGF0dGVuKHZhbHVlKQorCisgICAgICAgICMgU2l6ZSBvZiBvYmplY3QgcmVmZXJlbmNlcyBpbiBzZXJpYWxpemVkIGNvbnRhaW5lcnMKKyAgICAgICAgIyBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcGxpc3QuCisgICAgICAgIG51bV9vYmplY3RzID0gbGVuKHNlbGYuX29iamxpc3QpCisgICAgICAgIHNlbGYuX29iamVjdF9vZmZzZXRzID0gWzBdKm51bV9vYmplY3RzCisgICAgICAgIHNlbGYuX3JlZl9zaXplID0gX2NvdW50X3RvX3NpemUobnVtX29iamVjdHMpCisKKyAgICAgICAgc2VsZi5fcmVmX2Zvcm1hdCA9IF9CSU5BUllfRk9STUFUW3NlbGYuX3JlZl9zaXplXQorCisgICAgICAgICMgV3JpdGUgZmlsZSBoZWFkZXIKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoYidicGxpc3QwMCcpCisKKyAgICAgICAgIyBXcml0ZSBvYmplY3QgbGlzdAorICAgICAgICBmb3Igb2JqIGluIHNlbGYuX29iamxpc3Q6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9vYmplY3Qob2JqKQorCisgICAgICAgICMgV3JpdGUgcmVmbnVtLT5vYmplY3Qgb2Zmc2V0IHRhYmxlCisgICAgICAgIHRvcF9vYmplY3QgPSBzZWxmLl9nZXRyZWZudW0odmFsdWUpCisgICAgICAgIG9mZnNldF90YWJsZV9vZmZzZXQgPSBzZWxmLl9mcC50ZWxsKCkKKyAgICAgICAgb2Zmc2V0X3NpemUgPSBfY291bnRfdG9fc2l6ZShvZmZzZXRfdGFibGVfb2Zmc2V0KQorICAgICAgICBvZmZzZXRfZm9ybWF0ID0gJz4nICsgX0JJTkFSWV9GT1JNQVRbb2Zmc2V0X3NpemVdICogbnVtX29iamVjdHMKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2sob2Zmc2V0X2Zvcm1hdCwgKnNlbGYuX29iamVjdF9vZmZzZXRzKSkKKworICAgICAgICAjIFdyaXRlIHRyYWlsZXIKKyAgICAgICAgc29ydF92ZXJzaW9uID0gMAorICAgICAgICB0cmFpbGVyID0gKAorICAgICAgICAgICAgc29ydF92ZXJzaW9uLCBvZmZzZXRfc2l6ZSwgc2VsZi5fcmVmX3NpemUsIG51bV9vYmplY3RzLAorICAgICAgICAgICAgdG9wX29iamVjdCwgb2Zmc2V0X3RhYmxlX29mZnNldAorICAgICAgICApCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+NXhCQkJRUVEnLCAqdHJhaWxlcikpCisKKyAgICBkZWYgX2ZsYXR0ZW4oc2VsZiwgdmFsdWUpOgorICAgICAgICAjIEZpcnN0IGNoZWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gdGhlIG9iamVjdCB0YWJsZSwgbm90IHVzZWQgZm9yCisgICAgICAgICMgY29udGFpbmVycyB0byBlbnN1cmUgdGhhdCB0d28gc3ViY29udGFpbmVycyB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzCisgICAgICAgICMgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGRpc3RpbmN0IHZhbHVlcy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKAorICAgICAgICAgICAgICAgIHN0ciwgaW50LCBmbG9hdCwgZGF0ZXRpbWUuZGF0ZXRpbWUsIGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGlmICh0eXBlKHZhbHVlKSwgdmFsdWUpIGluIHNlbGYuX29ianRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBpZiAodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSkgaW4gc2VsZi5fb2JqdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBBZGQgdG8gb2JqZWN0cmVmZXJlbmNlIG1hcAorICAgICAgICByZWZudW0gPSBsZW4oc2VsZi5fb2JqbGlzdCkKKyAgICAgICAgc2VsZi5fb2JqbGlzdC5hcHBlbmQodmFsdWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKV0gPSByZWZudW0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUpLCB2YWx1ZSldID0gcmVmbnVtCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9vYmppZHRhYmxlW2lkKHZhbHVlKV0gPSByZWZudW0KKworICAgICAgICAjIEFuZCBmaW5hbGx5IHJlY3Vyc2UgaW50byBjb250YWluZXJzCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5cyA9IFtdCisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgaXRlbXMgPSB2YWx1ZS5pdGVtcygpCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoaXRlbXMpCisKKyAgICAgICAgICAgIGZvciBrLCB2IGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHYpCisKKyAgICAgICAgICAgIGZvciBvIGluIGl0ZXJ0b29scy5jaGFpbihrZXlzLCB2YWx1ZXMpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZsYXR0ZW4obykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgZm9yIG8gaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhdHRlbihvKQorCisgICAgZGVmIF9nZXRyZWZudW0oc2VsZiwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUpLCB2YWx1ZSldCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqaWR0YWJsZVtpZCh2YWx1ZSldCisKKyAgICBkZWYgX3dyaXRlX3NpemUoc2VsZiwgdG9rZW4sIHNpemUpOgorICAgICAgICBpZiBzaXplIDwgMTU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkInLCB0b2tlbiB8IHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgODoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJCJywgdG9rZW4gfCAweEYsIDB4MTAsIHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgMTY6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCSCcsIHRva2VuIHwgMHhGLCAweDExLCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDMyOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkwnLCB0b2tlbiB8IDB4RiwgMHgxMiwgc2l6ZSkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJRJywgdG9rZW4gfCAweEYsIDB4MTMsIHNpemUpKQorCisgICAgZGVmIF93cml0ZV9vYmplY3Qoc2VsZiwgdmFsdWUpOgorICAgICAgICByZWYgPSBzZWxmLl9nZXRyZWZudW0odmFsdWUpCisgICAgICAgIHNlbGYuX29iamVjdF9vZmZzZXRzW3JlZl0gPSBzZWxmLl9mcC50ZWxsKCkKKyAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwMCcpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwOCcpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDA5JykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICBpZiB2YWx1ZSA8IDEgPDwgODoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCJywgMHgxMCwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgMTY6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CSCcsIDB4MTEsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDMyOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkwnLCAweDEyLCB2YWx1ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QlEnLCAweDEzLCB2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJkJywgMHgyMywgdmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgorICAgICAgICAgICAgZiA9ICh2YWx1ZSAtIGRhdGV0aW1lLmRhdGV0aW1lKDIwMDEsIDEsIDEpKS50b3RhbF9zZWNvbmRzKCkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDMzLCBmKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUuZGF0YSkpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZSh2YWx1ZS5kYXRhKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHg0MCwgbGVuKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ID0gdmFsdWUuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDUwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICB0ID0gdmFsdWUuZW5jb2RlKCd1dGYtMTZiZScpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDYwLCBsZW4odmFsdWUpKQorCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZSh0KQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICByZWZzID0gW3NlbGYuX2dldHJlZm51bShvKSBmb3IgbyBpbiB2YWx1ZV0KKyAgICAgICAgICAgIHMgPSBsZW4ocmVmcykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHhBMCwgcykKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqcmVmcykpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIGtleVJlZnMsIHZhbFJlZnMgPSBbXSwgW10KKworICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHNvcnRlZCh2YWx1ZS5pdGVtcygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb290SXRlbXMgPSB2YWx1ZS5pdGVtcygpCisKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHJvb3RJdGVtczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIGtleVJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bShrKSkKKyAgICAgICAgICAgICAgICB2YWxSZWZzLmFwcGVuZChzZWxmLl9nZXRyZWZudW0odikpCisKKyAgICAgICAgICAgIHMgPSBsZW4oa2V5UmVmcykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHhEMCwgcykKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqa2V5UmVmcykpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogcywgKnZhbFJlZnMpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKworZGVmIF9pc19mbXRfYmluYXJ5KGhlYWRlcik6CisgICAgcmV0dXJuIGhlYWRlcls6OF0gPT0gYidicGxpc3QwMCcKKworCisjCisjIEdlbmVyaWMgYml0cworIworCitfRk9STUFUUz17CisgICAgRk1UX1hNTDogZGljdCgKKyAgICAgICAgZGV0ZWN0PV9pc19mbXRfeG1sLAorICAgICAgICBwYXJzZXI9X1BsaXN0UGFyc2VyLAorICAgICAgICB3cml0ZXI9X1BsaXN0V3JpdGVyLAorICAgICksCisgICAgRk1UX0JJTkFSWTogZGljdCgKKyAgICAgICAgZGV0ZWN0PV9pc19mbXRfYmluYXJ5LAorICAgICAgICBwYXJzZXI9X0JpbmFyeVBsaXN0UGFyc2VyLAorICAgICAgICB3cml0ZXI9X0JpbmFyeVBsaXN0V3JpdGVyLAorICAgICkKK30KKworCitkZWYgbG9hZChmcCwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIChyZWFkYWJsZSkgZmlsZSBvYmplY3QuCisgICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgorICAgICIiIgorICAgIGlmIGZtdCBpcyBOb25lOgorICAgICAgICBoZWFkZXIgPSBmcC5yZWFkKDMyKQorICAgICAgICBmcC5zZWVrKDApCisgICAgICAgIGZvciBpbmZvIGluIF9GT1JNQVRTLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgaW5mb1snZGV0ZWN0J10oaGVhZGVyKToKKyAgICAgICAgICAgICAgICBwID0gaW5mb1sncGFyc2VyJ10oCisgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICBkaWN0X3R5cGU9ZGljdF90eXBlLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKyAgICBlbHNlOgorICAgICAgICBwID0gX0ZPUk1BVFNbZm10XVsncGFyc2VyJ10odXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpCisKKyAgICByZXR1cm4gcC5wYXJzZShmcCkKKworCitkZWYgbG9hZHModmFsdWUsICosIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlLCBkaWN0X3R5cGU9ZGljdCk6CisgICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlIGZyb20gYSBieXRlcyBvYmplY3QuCisgICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgorICAgICIiIgorICAgIGZwID0gQnl0ZXNJTyh2YWx1ZSkKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgZnAsIGZtdD1mbXQsIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGU9ZGljdF90eXBlKQorCisKK2RlZiBkdW1wKHZhbHVlLCBmcCwgKiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSk6CisgICAgIiIiV3JpdGUgJ3ZhbHVlJyB0byBhIC5wbGlzdCBmaWxlLiAnZnAnIHNob3VsZCBiZSBhICh3cml0YWJsZSkKKyAgICBmaWxlIG9iamVjdC4KKyAgICAiIiIKKyAgICBpZiBmbXQgbm90IGluIF9GT1JNQVRTOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBmb3JtYXQ6ICVyIiUoZm10LCkpCisKKyAgICB3cml0ZXIgPSBfRk9STUFUU1tmbXRdWyJ3cml0ZXIiXShmcCwgc29ydF9rZXlzPXNvcnRfa2V5cywgc2tpcGtleXM9c2tpcGtleXMpCisgICAgd3JpdGVyLndyaXRlKHZhbHVlKQorCisKK2RlZiBkdW1wcyh2YWx1ZSwgKiwgZm10PUZNVF9YTUwsIHNraXBrZXlzPUZhbHNlLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgIiIiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IHdpdGggdGhlIGNvbnRlbnRzIGZvciBhIC5wbGlzdCBmaWxlLgorICAgICIiIgorICAgIGZwID0gQnl0ZXNJTygpCisgICAgZHVtcCh2YWx1ZSwgZnAsIGZtdD1mbXQsIHNraXBrZXlzPXNraXBrZXlzLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCmRpZmYgLS1naXQgYS9MaWIvcG9wbGliLnB5IGIvTGliL3BvcGxpYi5weQppbmRleCA0M2Y4MzA1Li4wMGZmYmNiIDEwMDY0NAotLS0gYS9MaWIvcG9wbGliLnB5CisrKyBiL0xpYi9wb3BsaWIucHkKQEAgLTEzLDcgKzEzLDE1IEBACiAKICMgSW1wb3J0cwogCi1pbXBvcnQgcmUsIHNvY2tldAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKKwordHJ5OgorICAgIGltcG9ydCBzc2wKKyAgICBIQVZFX1NTTCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBIQVZFX1NTTCA9IEZhbHNlCiAKIF9fYWxsX18gPSBbIlBPUDMiLCJlcnJvcl9wcm90byJdCiAKQEAgLTYxLDYgKzY5LDggQEAKICAgICAgICAgICAgIEFQT1AgbmFtZSBkaWdlc3QgICAgICAgIGFwb3AobmFtZSwgZGlnZXN0KQogICAgICAgICAgICAgVE9QIG1zZyBuICAgICAgICAgICAgICAgdG9wKG1zZywgbikKICAgICAgICAgICAgIFVJREwgW21zZ10gICAgICAgICAgICAgIHVpZGwobXNnID0gTm9uZSkKKyAgICAgICAgICAgIENBUEEgICAgICAgICAgICAgICAgICAgIGNhcGEoKQorICAgICAgICAgICAgU1RMUyAgICAgICAgICAgICAgICAgICAgc3RscygpCiAKICAgICBSYWlzZXMgb25lIGV4Y2VwdGlvbjogJ2Vycm9yX3Byb3RvJy4KIApAQCAtODcsNiArOTcsNyBAQAogICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jcmVhdGVfc29ja2V0KHRpbWVvdXQpCiAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQogICAgICAgICBzZWxmLl9kZWJ1Z2dpbmcgPSAwCkBAIC0yNjgsNyArMjc5LDE0IEBACiAgICAgICAgIGlmIHNlbGYuZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICMgVGhlIHNlcnZlciBtaWdodCBhbHJlYWR5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrID0gTm9uZQogCiAgICAgI19fZGVsX18gPSBxdWl0CkBAIC0zMjQsMjEgKzM0Miw3MCBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3J0Y21kKCdVSURMICVzJyAlIHdoaWNoKQogICAgICAgICByZXR1cm4gc2VsZi5fbG9uZ2NtZCgnVUlETCcpCiAKLXRyeToKLSAgICBpbXBvcnQgc3NsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKKworICAgIGRlZiBjYXBhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gc2VydmVyIGNhcGFiaWxpdGllcyAoUkZDIDI0NDkpIGFzIGEgZGljdGlvbmFyeQorICAgICAgICA+Pj4gYz1wb3BsaWIuUE9QMygnbG9jYWxob3N0JykKKyAgICAgICAgPj4+IGMuY2FwYSgpCisgICAgICAgIHsnSU1QTEVNRU5UQVRJT04nOiBbJ0N5cnVzJywgJ1BPUDMnLCAnc2VydmVyJywgJ3YyLjIuMTInXSwKKyAgICAgICAgICdUT1AnOiBbXSwgJ0xPR0lOLURFTEFZJzogWycwJ10sICdBVVRILVJFU1AtQ09ERSc6IFtdLAorICAgICAgICAgJ0VYUElSRSc6IFsnTkVWRVInXSwgJ1VTRVInOiBbXSwgJ1NUTFMnOiBbXSwgJ1BJUEVMSU5JTkcnOiBbXSwKKyAgICAgICAgICdVSURMJzogW10sICdSRVNQLUNPREVTJzogW119CisgICAgICAgID4+PgorCisgICAgICAgIFJlYWxseSwgYWNjb3JkaW5nIHRvIFJGQyAyNDQ5LCB0aGUgY3lydXMgZm9sa3Mgc2hvdWxkIGF2b2lkCisgICAgICAgIGhhdmluZyB0aGUgaW1wbGVtZW50YXRpb24gc3BsaXQgaW50byBtdWx0aXBsZSBhcmd1bWVudHMuLi4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfcGFyc2VjYXAobGluZSk6CisgICAgICAgICAgICBsc3QgPSBsaW5lLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpCisgICAgICAgICAgICByZXR1cm4gbHN0WzBdLCBsc3RbMTpdCisKKyAgICAgICAgY2FwcyA9IHt9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLl9sb25nY21kKCdDQVBBJykKKyAgICAgICAgICAgIHJhd2NhcHMgPSByZXNwWzFdCisgICAgICAgICAgICBmb3IgY2FwbGluZSBpbiByYXdjYXBzOgorICAgICAgICAgICAgICAgIGNhcG5tLCBjYXBhcmdzID0gX3BhcnNlY2FwKGNhcGxpbmUpCisgICAgICAgICAgICAgICAgY2Fwc1tjYXBubV0gPSBjYXBhcmdzCisgICAgICAgIGV4Y2VwdCBlcnJvcl9wcm90byBhcyBfZXJyOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgQ0FQQSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCisgICAgICAgIHJldHVybiBjYXBzCisKKworICAgIGRlZiBzdGxzKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiBSRkMgMjU5NS4KKworICAgICAgICAgICAgICAgIGNvbnRleHQgLSBhIHNzbC5TU0xDb250ZXh0CisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgSEFWRV9TU0w6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc3VwcG9ydCBtaXNzaW5nJykKKyAgICAgICAgaWYgc2VsZi5fdGxzX2VzdGFibGlzaGVkOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHNlc3Npb24gYWxyZWFkeSBlc3RhYmxpc2hlZCcpCisgICAgICAgIGNhcHMgPSBzZWxmLmNhcGEoKQorICAgICAgICBpZiBub3QgJ1NUTFMnIGluIGNhcHM6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBTVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKKyAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdTVExTJykKKyAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXNwCisKKworaWYgSEFWRV9TU0w6CiAKICAgICBjbGFzcyBQT1AzX1NTTChQT1AzKToKICAgICAgICAgIiIiUE9QMyBjbGllbnQgY2xhc3Mgb3ZlciBTU0wgY29ubmVjdGlvbgogCi0gICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lKQorICAgICAgICBJbnN0YW50aWF0ZSB3aXRoOiBQT1AzX1NTTChob3N0bmFtZSwgcG9ydD05OTUsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKQogCiAgICAgICAgICAgICAgICBob3N0bmFtZSAtIHRoZSBob3N0bmFtZSBvZiB0aGUgcG9wMyBvdmVyIHNzbCBzZXJ2ZXIKICAgICAgICAgICAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgogICAgICAgICAgICAgICAga2V5ZmlsZSAtIFBFTSBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkKICAgICAgICAgICAgICAgIGNlcnRmaWxlIC0gUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlCisgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAogCiAgICAgICAgIFNlZSB0aGUgbWV0aG9kcyBvZiB0aGUgcGFyZW50IGNsYXNzIFBPUDMgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIiIiCkBAIC0zNTMsMTcgKzQyMCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFBPUDMuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgICAgICBzb2NrID0gUE9QMy5fY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBzb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2spCiAgICAgICAgICAgICByZXR1cm4gc29jawogCisgICAgICAgIGRlZiBzdGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlRoZSBtZXRob2QgdW5jb25kaXRpb25hbGx5IHJhaXNlcyBhbiBleGNlcHRpb24gc2luY2UgdGhlCisgICAgICAgICAgICBTVExTIGNvbW1hbmQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkCisgICAgICAgICAgICBTU0wvVExTIHNlc3Npb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorCiAgICAgX19hbGxfXy5hcHBlbmQoIlBPUDNfU1NMIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IGIxZTFhOTIuLjQ5MmM0MTUgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMTcyLDU2ICsxNzIsMzUgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogCi0jIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKLSAgICBzMSA9IG9zLnN0YXQoZjEpCi0gICAgczIgPSBvcy5zdGF0KGYyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/Ci0jIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKLQotZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHMxID0gb3MuZnN0YXQoZnAxKQotICAgIHMyID0gb3MuZnN0YXQoZnAyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKLSMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZXN0YXQoczEsIHMyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZCBcCi0gICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PwogIyAoRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBVTklYZXM/ICBJcyBpdCBldmVuIGd1YXJhbnRlZWQgdG8gd29yayBieSBQb3NpeD8pCiAKIGRlZiBpc21vdW50KHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCIiIgotICAgIGlmIGlzbGluayhwYXRoKToKLSAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKLSAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBzMSA9IG9zLmxzdGF0KHBhdGgpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIyBJdCBkb2Vzbid0IGV4aXN0IC0tIHNvIG5vdCBhIG1vdW50IHBvaW50LiA6LSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKHMxLnN0X21vZGUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsICcuLicpCisgICAgdHJ5OgogICAgICAgICBzMiA9IG9zLmxzdGF0KHBhcmVudCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZSAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQgOi0pCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGV2MSA9IHMxLnN0X2RldgogICAgIGRldjIgPSBzMi5zdF9kZXYKICAgICBpZiBkZXYxICE9IGRldjI6CmRpZmYgLS1naXQgYS9MaWIvcHByaW50LnB5IGIvTGliL3BwcmludC5weQppbmRleCAyMmJlMGI0Yi4uM2JlOWMzNiAxMDA2NDQKLS0tIGEvTGliL3BwcmludC5weQorKysgYi9MaWIvcHByaW50LnB5CkBAIC0zNCw2ICszNCw3IEBACiAKICIiIgogCitpbXBvcnQgcmUKIGltcG9ydCBzeXMgYXMgX3N5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX09yZGVyZWREaWN0CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8KQEAgLTQxLDIyICs0MiwxOSBAQAogX19hbGxfXyA9IFsicHByaW50IiwicGZvcm1hdCIsImlzcmVhZGFibGUiLCJpc3JlY3Vyc2l2ZSIsInNhZmVyZXByIiwKICAgICAgICAgICAgIlByZXR0eVByaW50ZXIiXQogCi0jIGNhY2hlIHRoZXNlIGZvciBmYXN0ZXIgYWNjZXNzOgotX2NvbW1ham9pbiA9ICIsICIuam9pbgotX2lkID0gaWQKLV9sZW4gPSBsZW4KLV90eXBlID0gdHlwZQogCi0KLWRlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKToKK2RlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLAorICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAiIiJQcmV0dHktcHJpbnQgYSBQeXRob24gb2JqZWN0IHRvIGEgc3RyZWFtIFtkZWZhdWx0IGlzIHN5cy5zdGRvdXRdLiIiIgogICAgIHByaW50ZXIgPSBQcmV0dHlQcmludGVyKAotICAgICAgICBzdHJlYW09c3RyZWFtLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgpCisgICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCwKKyAgICAgICAgY29tcGFjdD1jb21wYWN0KQogICAgIHByaW50ZXIucHByaW50KG9iamVjdCkKIAotZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIkZvcm1hdCBhIFB5dGhvbiBvYmplY3QgaW50byBhIHByZXR0eS1wcmludGVkIHJlcHJlc2VudGF0aW9uLiIiIgotICAgIHJldHVybiBQcmV0dHlQcmludGVyKGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkucGZvcm1hdChvYmplY3QpCisgICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9Y29tcGFjdCkucGZvcm1hdChvYmplY3QpCiAKIGRlZiBzYWZlcmVwcihvYmplY3QpOgogICAgICIiIlZlcnNpb24gb2YgcmVwcigpIHdoaWNoIGNhbiBoYW5kbGUgcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlcy4iIiIKQEAgLTEwMSw3ICs5OSw4IEBACiAgICAgcmV0dXJuIF9zYWZlX2tleSh0WzBdKSwgX3NhZmVfa2V5KHRbMV0pCiAKIGNsYXNzIFByZXR0eVByaW50ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAgICAgIiIiSGFuZGxlIHByZXR0eSBwcmludGluZyBvcGVyYXRpb25zIG9udG8gYSBzdHJlYW0gdXNpbmcgYSBzZXQgb2YKICAgICAgICAgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgogCkBAIC0xMTgsNiArMTE3LDkgQEAKICAgICAgICAgICAgIFRoZSBkZXNpcmVkIG91dHB1dCBzdHJlYW0uICBJZiBvbWl0dGVkIChvciBmYWxzZSksIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgb3V0cHV0IHN0cmVhbSBhdmFpbGFibGUgYXQgY29uc3RydWN0aW9uIHdpbGwgYmUgdXNlZC4KIAorICAgICAgICBjb21wYWN0CisgICAgICAgICAgICBJZiB0cnVlLCBzZXZlcmFsIGl0ZW1zIHdpbGwgYmUgY29tYmluZWQgaW4gb25lIGxpbmUuCisKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQpAQCAtMTMxLDYgKzEzMyw3IEBACiAgICAgICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX2NvbXBhY3QgPSBib29sKGNvbXBhY3QpCiAKICAgICBkZWYgcHByaW50KHNlbGYsIG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QsIHNlbGYuX3N0cmVhbSwgMCwgMCwge30sIDApCkBAIC0xNTAsMjggKzE1MywyNSBAQAogCiAgICAgZGVmIF9mb3JtYXQoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoX3JlY3Vyc2lvbihvYmplY3QpKQogICAgICAgICAgICAgc2VsZi5fcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCAtIDEpCi0gICAgICAgIHR5cCA9IF90eXBlKG9iamVjdCkKLSAgICAgICAgc2VwTGluZXMgPSBfbGVuKHJlcCkgPiAoc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlKQorICAgICAgICB0eXAgPSB0eXBlKG9iamVjdCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlCisgICAgICAgIHNlcExpbmVzID0gbGVuKHJlcCkgPiBtYXhfd2lkdGgKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKIAotICAgICAgICBpZiBzZWxmLl9kZXB0aCBhbmQgbGV2ZWwgPiBzZWxmLl9kZXB0aDoKLSAgICAgICAgICAgIHdyaXRlKHJlcCkKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGlmIHNlcExpbmVzOgogICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQogICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgogICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCiAgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgbGVuKHJlcCkgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZW50IGluIGl0ZW1zWzE6XToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGtleSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbiVzJXM6ICcgJSAoJyAnKmluZGVudCwgcmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIChpc3N1YmNsYXNzKHR5cCwgc2V0KSBhbmQgciBpcyBzZXQuX19yZXByX18pIG9yCiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBmcm96ZW5zZXQpIGFuZCByIGlzIGZyb3plbnNldC5fX3JlcHJfXykKICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2xlbihvYmplY3QpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKG9iamVjdCkKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdbJykKICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICddJwpAQCAtMjI1LDIzICsyMjUsNzEgQEAKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKICAgICAgICAgICAgICAgICBpZiBsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3RbMF0sIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW50IGluIG9iamVjdFsxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCAtIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCBsZW5ndGggPT0gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJywnKQogICAgICAgICAgICAgICAgIHdyaXRlKGVuZGNoYXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBzdHIpIGFuZCBsZW4ob2JqZWN0KSA+IDAgYW5kIHIgaXMgc3RyLl9fcmVwcl9fOgorICAgICAgICAgICAgICAgIGRlZiBfc3RyX3BhcnRzKHMpOgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmcgbGl0ZXJhbHMgY29tcHJpc2luZyB0aGUgcmVwcigpCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBzLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgKG5vbi1zcGFjZSwgc3BhY2UpIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxzKyknLCBsaW5lKSArIFsnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGFydHMpLCAyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRzW2ldICsgcGFydHNbaSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVwcihjdXJyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgZm9yIGksIHJlcCBpbiBlbnVtZXJhdGUoX3N0cl9wYXJ0cyhvYmplY3QpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nICsgJyAnKmluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3cml0ZShyZXApCiAKKyAgICBkZWYgX2Zvcm1hdF9pdGVtcyhzZWxmLCBpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKKyAgICAgICAgZGVsaW0gPSAnJworICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgorICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgc2VsZi5fY29tcGFjdDoKKyAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGVudCwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgdyA9IGxlbihyZXApICsgMgorICAgICAgICAgICAgICAgIGlmIHdpZHRoIDwgdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXhfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVsaW06CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA+PSB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICcsICcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcHRoLCBsZXZlbCkKQEAgLTI2Miw3ICszMTAsNyBAQAogIyBSZXR1cm4gdHJpcGxlIChyZXByX3N0cmluZywgaXNyZWFkYWJsZSwgaXNyZWN1cnNpdmUpLgogCiBkZWYgX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgotICAgIHR5cCA9IF90eXBlKG9iamVjdCkKKyAgICB0eXAgPSB0eXBlKG9iamVjdCkKICAgICBpZiB0eXAgaXMgc3RyOgogICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKQEAgLTI4Niw3ICszMzQsNyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KSBhbmQgciBpcyBkaWN0Ll9fcmVwcl9fOgogICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuICJ7fSIsIFRydWUsIEZhbHNlCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuICJ7Li4ufSIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zMDcsNyArMzU1LDcgQEAKICAgICAgICAgICAgIGlmIGtyZWN1ciBvciB2cmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuICJ7JXN9IiAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgaWYgKGlzc3ViY2xhc3ModHlwLCBsaXN0KSBhbmQgciBpcyBsaXN0Ll9fcmVwcl9fKSBvciBcCiAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pOgpAQCAtMzE1LDEzICszNjMsMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbXSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiWyVzXSIKLSAgICAgICAgZWxpZiBfbGVuKG9iamVjdCkgPT0gMToKKyAgICAgICAgZWxpZiBsZW4ob2JqZWN0KSA9PSAxOgogICAgICAgICAgICAgZm9ybWF0ID0gIiglcywpIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIigpIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMpIgotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLi4uIiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTM0MCw3ICszODgsNyBAQAogICAgICAgICAgICAgaWYgb3JlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiBmb3JtYXQgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIHJlcCA9IHJlcHIob2JqZWN0KQogICAgIHJldHVybiByZXAsIChyZXAgYW5kIG5vdCByZXAuc3RhcnRzd2l0aCgnPCcpKSwgRmFsc2UKQEAgLTM0OCw3ICszOTYsNyBAQAogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCi0gICAgICAgICAgICAlIChfdHlwZShvYmplY3QpLl9fbmFtZV9fLCBfaWQob2JqZWN0KSkpCisgICAgICAgICAgICAlICh0eXBlKG9iamVjdCkuX19uYW1lX18sIGlkKG9iamVjdCkpKQogCiAKIGRlZiBfcGVyZmNoZWNrKG9iamVjdD1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggNzQzZTc3ZC4uNWQwZTk2OCAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTQwLDYgKzQwLDQwIEBACiAjICAgICAgIHJldHVybiBpX2NvdW50CiAjaXRpbWVzID0gaW50ZWdlcl90aW1lciAjIHJlcGxhY2Ugd2l0aCBDIGNvZGVkIHRpbWVyIHJldHVybmluZyBpbnRlZ2VycwogCitjbGFzcyBfVXRpbHM6CisgICAgIiIiU3VwcG9ydCBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBieQorICAgIHByb2ZpbGUucHkgYW5kIGNQcm9maWxlLnB5IG1vZHVsZXMuCisgICAgTm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZXIpOgorICAgICAgICBzZWxmLnByb2ZpbGVyID0gcHJvZmlsZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW4oc3RhdGVtZW50KQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgcnVuY3R4KHNlbGYsIHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBfc2hvdyhzZWxmLCBwcm9mLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZi5wcmludF9zdGF0cyhzb3J0KQorCisKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBwcm9maWxlciBjbGFzcwogIyBOb3RlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgUHJvZmlsZSgpIGlzICpub3QqIG5lZWRlZCB0byBjYWxsIHRoZW0uCkBAIC01NiwxNSArOTAsNyBAQAogICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KICAgICBlYWNoIGxpbmUuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcwotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKICAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLApAQCAtNzIsMTYgKzk4LDggQEAKIAogICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKIGNsYXNzIFByb2ZpbGU6CiAgICAgIiIiUHJvZmlsZXIgY2xhc3MuCkBAIC0zNzMsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygpCiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLnNpbXVsYXRlX2NtZF9jb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2YTc3NjA1Li5lMWVjMzU1IDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTkzLDkgKzkzLDggQEAKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6Ci0gICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCi0gICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhcmcsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGVfc3RhdHMgPSBvcy5zdGF0KGFyZykKICAgICAgICAgICAgICAgICBhcmcgPSB0aW1lLmN0aW1lKGZpbGVfc3RhdHMuc3RfbXRpbWUpICsgIiAgICAiICsgYXJnCkBAIC0xNDksMTEgKzE0OCw4IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBwcm9maWxlIGRhdGEgdG8gYSBmaWxlIHdlIGtub3cgaG93IHRvIGxvYWQgYmFjay4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICMgbGlzdCB0aGUgdHVwbGUgaW5kaWNlcyBhbmQgZGlyZWN0aW9ucyBmb3Igc29ydGluZywKICAgICAjIGFsb25nIHdpdGggc29tZSBwcmludGFibGUgZGVzY3JpcHRpb24KQEAgLTYxMiw3ICs2MDgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IDNjY2Y2MTkuLmU4NDFmMTIgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNDcsMjcgKzQ3LDE2IEBACiAgICAgcmV0dXJuIF9vcGVuX3Rlcm1pbmFsKCkKIAogZGVmIF9vcGVuX3Rlcm1pbmFsKCk6Ci0gICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLgotICAgIFNHSSBhbmQgZ2VuZXJpYyBCU0QgdmVyc2lvbiwgZm9yIHdoZW4gb3BlbnB0eSgpIGZhaWxzLiIiIgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHNnaQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDBvNjY2LCAwKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcihtc2cpCi0gICAgICAgIHJldHVybiBtYXN0ZXJfZmQsIHR0eV9uYW1lCisgICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLiIiIgogICAgIGZvciB4IGluICdwcXJzdHV2d3h5elBRUlNUJzoKICAgICAgICAgZm9yIHkgaW4gJzAxMjM0NTY3ODlhYmNkZWYnOgogICAgICAgICAgICAgcHR5X25hbWUgPSAnL2Rldi9wdHknICsgeCArIHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocHR5X25hbWUsIG9zLk9fUkRXUikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gKGZkLCAnL2Rldi90dHknICsgeCArIHkpCi0gICAgcmFpc2Ugb3MuZXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCisgICAgcmFpc2UgT1NFcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKIAogZGVmIHNsYXZlX29wZW4odHR5X25hbWUpOgogICAgICIiInNsYXZlX29wZW4odHR5X25hbWUpIC0+IHNsYXZlX2ZkCkBAIC04Myw3ICs3Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgInB0ZW0iKQogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgImxkdGVybSIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE3Myw4ICsxNjIsOSBAQAogICAgICAgICByZXN0b3JlID0gMAogICAgIHRyeToKICAgICAgICAgX2NvcHkobWFzdGVyX2ZkLCBtYXN0ZXJfcmVhZCwgc3RkaW5fcmVhZCkKLSAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByZXN0b3JlOgogICAgICAgICAgICAgdHR5LnRjc2V0YXR0cihTVERJTl9GSUxFTk8sIHR0eS5UQ1NBRkxVU0gsIG1vZGUpCiAKICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCisgICAgcmV0dXJuIG9zLndhaXRwaWQocGlkLCAwKVsxXQpkaWZmIC0tZ2l0IGEvTGliL3B5X2NvbXBpbGUucHkgYi9MaWIvcHlfY29tcGlsZS5weQppbmRleCA2MmQ2OWFkLi4xMjc3YjkzIDEwMDY0NAotLS0gYS9MaWIvcHlfY29tcGlsZS5weQorKysgYi9MaWIvcHlfY29tcGlsZS5weQpAQCAtMywxNyArMywxNCBAQAogVGhpcyBtb2R1bGUgaGFzIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgZm9ybWF0IG9mIC5weWMgZmlsZXMuCiAiIiIKIAotaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHRyYWNlYmFjawogCi1NQUdJQyA9IGltcC5nZXRfbWFnaWMoKQotCiBfX2FsbF9fID0gWyJjb21waWxlIiwgIm1haW4iLCAiUHlDb21waWxlRXJyb3IiXQogCiAKQEAgLTY1LDEzICs2Miw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLWRlZiB3cl9sb25nKGYsIHgpOgotICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCi0gICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQotCiBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBQeXRob24gc291cmNlIGZpbGUgdG8gUHl0aG9uIGJ5dGVjb2RlLgogCkBAIC0xMDcsMTggKzk3LDMxIEBACiAgICAgU2VlIGNvbXBpbGVhbGwucHkgZm9yIGEgc2NyaXB0L21vZHVsZSB0aGF0IHVzZXMgdGhpcyBtb2R1bGUgdG8KICAgICBieXRlLWNvbXBpbGUgYWxsIGluc3RhbGxlZCBmaWxlcyAob3IgYWxsIGZpbGVzIGluIHNlbGVjdGVkCiAgICAgZGlyZWN0b3JpZXMpLgorCisgICAgRG8gbm90ZSB0aGF0IEZpbGVFeGlzdHNFcnJvciBpcyByYWlzZWQgaWYgY2ZpbGUgZW5kcyB1cCBwb2ludGluZyBhdCBhCisgICAgbm9uLXJlZ3VsYXIgZmlsZSBvciBzeW1saW5rLiBCZWNhdXNlIHRoZSBjb21waWxhdGlvbiB1c2VzIGEgZmlsZSByZW5hbWluZywKKyAgICB0aGUgcmVzdWx0aW5nIGZpbGUgd291bGQgYmUgcmVndWxhciBhbmQgdGh1cyBub3QgdGhlIHNhbWUgdHlwZSBvZiBmaWxlIGFzCisgICAgaXQgd2FzIHByZXZpb3VzbHkuCiAgICAgIiIiCi0gICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGUpIGFzIGY6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGUpCi0gICAgICAgIHRpbWVzdGFtcCA9IGludChzdC5zdF9tdGltZSkKLSAgICAgICAgc2l6ZSA9IHN0LnN0X3NpemUgJiAweEZGRkZGRkZGCi0gICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQorICAgIGlmIGNmaWxlIGlzIE5vbmU6CisgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBzeW1saW5rIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgZmlsZSBpZiAnCisgICAgICAgICAgICAgICAnaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGNmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIG5vbi1yZWd1bGFyIGZpbGUgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciAnCisgICAgICAgICAgICAgICAnb25lIGlmIGltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCc8cHlfY29tcGlsZT4nLCBmaWxlKQorICAgIHNvdXJjZV9ieXRlcyA9IGxvYWRlci5nZXRfZGF0YShmaWxlKQogICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIGRmaWxlIG9yIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGltaXplPW9wdGltaXplKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBweV9leGMgPSBQeUNvbXBpbGVFcnJvcihlcnIuX19jbGFzc19fLCBlcnIsIGRmaWxlIG9yIGZpbGUpCiAgICAgICAgIGlmIGRvcmFpc2U6CkBAIC0xMjYsMjggKzEyOSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShweV9leGMubXNnICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybgotICAgIGlmIGNmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIHRyeToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaWYgZGlybmFtZToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKLSAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKLSAgICAgICAgd3JfbG9uZyhmYywgc2l6ZSkKLSAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgICAgICBmYy5mbHVzaCgpCi0gICAgICAgIGZjLnNlZWsoMCwgMCkKLSAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgIGNvZGUsIHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydzaXplJ10pCisgICAgbW9kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jYWxjX21vZGUoZmlsZSkKKyAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fd3JpdGVfYXRvbWljKGNmaWxlLCBieXRlY29kZSwgbW9kZSkKICAgICByZXR1cm4gY2ZpbGUKIAorCiBkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgICIiIkNvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCiAKQEAgLTE3Myw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggOWRjZTA3OS4uMmU2MzIyNiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtNDQsMTYgKzQ0LDE2IEBACiAiIiIKIAogIyBLbm93biBidWdzIHRoYXQgY2FuJ3QgYmUgZml4ZWQgaGVyZToKLSMgICAtIGltcC5sb2FkX21vZHVsZSgpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCi0jICAgICBsb2FkZWQgbW9kdWxlcywgc28gY2FsbGluZyBzeW5vcHNpcygpIG9uIGEgYmluYXJ5IG1vZHVsZSBmaWxlCi0jICAgICBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyMgICAtIHN5bm9wc2lzKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKKyMgICAgIGxvYWRlZCBtb2R1bGVzLgogIyAgIC0gSWYgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBvbiBhIG1vZHVsZSBpcyBhIHJlbGF0aXZlIHBhdGggYW5kCiAjICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgY2hhbmdlZCB3aXRoIG9zLmNoZGlyKCksIGFuIGluY29ycmVjdAogIyAgICAgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KIAogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtMTY3LDggKzE2Nyw5IEBACiBkZWYgdmlzaWJsZW5hbWUobmFtZSwgYWxsPU5vbmUsIG9iaj1Ob25lKToKICAgICAiIiJEZWNpZGUgd2hldGhlciB0byBzaG93IGRvY3VtZW50YXRpb24gb24gYSB2YXJpYWJsZS4iIiIKICAgICAjIENlcnRhaW4gc3BlY2lhbCBuYW1lcyBhcmUgcmVkdW5kYW50IG9yIGludGVybmFsLgorICAgICMgWFhYIFJlbW92ZSBfX2luaXRpYWxpemluZ19fPwogICAgIGlmIG5hbWUgaW4geydfX2F1dGhvcl9fJywgJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fY3JlZGl0c19fJywKLSAgICAgICAgICAgICAgICAnX19kYXRlX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2luaXRpYWxpemluZ19fJywKKyAgICAgICAgICAgICAgICAnX19kYXRlX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX3NwZWNfXycsCiAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsCiAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJywgJ19fcXVhbG5hbWVfXycsICdfX3Nsb3RzX18nLCAnX192ZXJzaW9uX18nfToKICAgICAgICAgcmV0dXJuIDAKQEAgLTIyNiw3ICsyMjcsNyBAQAogICAgIGlmIGxhc3R1cGRhdGUgaXMgTm9uZSBvciBsYXN0dXBkYXRlIDwgbXRpbWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbGUgPSB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIG1vZHVsZSBjYW4ndCBiZSBvcGVuZWQsIHNvIHNraXAgaXQKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGJpbmFyeV9zdWZmaXhlcyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0KQEAgLTI2NywyMCArMjY4LDE5IEBACiAKIGRlZiBpbXBvcnRmaWxlKHBhdGgpOgogICAgICIiIkltcG9ydCBhIFB5dGhvbiBzb3VyY2UgZmlsZSBvciBjb21waWxlZCBmaWxlIGdpdmVuIGl0cyBwYXRoLiIiIgotICAgIG1hZ2ljID0gaW1wLmdldF9tYWdpYygpCisgICAgbWFnaWMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKLSAgICAgICAgaWYgZmlsZS5yZWFkKGxlbihtYWdpYykpID09IG1hZ2ljOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9DT01QSUxFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9TT1VSQ0UKLSAgICAgICAgZmlsZS5zZWVrKDApCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICBuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUobmFtZSwgZmlsZSwgcGF0aCwgKGV4dCwgJ3InLCBraW5kKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCi0gICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBpc19ieXRlY29kZSA9IG1hZ2ljID09IGZpbGUucmVhZChsZW4obWFnaWMpKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgaWYgaXNfYnl0ZWNvZGU6CisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKIGRlZiBzYWZlaW1wb3J0KHBhdGgsIGZvcmNlbG9hZD0wLCBjYWNoZT17fSk6CiAgICAgIiIiSW1wb3J0IGEgbW9kdWxlOyBoYW5kbGUgZXJyb3JzOyByZXR1cm4gTm9uZSBpZiB0aGUgbW9kdWxlIGlzbid0IGZvdW5kLgpAQCAtOTE2LDIwICs5MTYsMTggQEAKICAgICAgICAgICAgICAgICByZWFsbGluayA9IHJlYWxuYW1lCiAgICAgICAgICAgICB0aXRsZSA9ICc8YSBuYW1lPSIlcyI+PHN0cm9uZz4lczwvc3Ryb25nPjwvYT4gPSAlcycgJSAoCiAgICAgICAgICAgICAgICAgYW5jaG9yLCBuYW1lLCByZWFsbGluaykKLSAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6Ci0gICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCB2YXJrdywgZGVmYXVsdHMsIGFubiA9IFwKLSAgICAgICAgICAgICAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG9iamVjdCkKLSAgICAgICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgICAgICAgICAgYXJncywgdmFyYXJncywga3dvbmx5YXJncywga3dkZWZhdWx0cywgdmFya3csIGRlZmF1bHRzLCBhbm4sCi0gICAgICAgICAgICAgICAgZm9ybWF0dmFsdWU9c2VsZi5mb3JtYXR2YWx1ZSwKLSAgICAgICAgICAgICAgICBmb3JtYXRhbm5vdGF0aW9uPWluc3BlY3QuZm9ybWF0YW5ub3RhdGlvbnJlbGF0aXZldG8ob2JqZWN0KSkKLSAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSAnPHN0cm9uZz4lczwvc3Ryb25nPiA8ZW0+bGFtYmRhPC9lbT4gJyAlIG5hbWUKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKyAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCkgb3IgaW5zcGVjdC5pc2J1aWx0aW4ob2JqZWN0KToKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogCiAgICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyAobm90ZSBhbmQgc2VsZi5ncmV5KApAQCAtMTIzNiw4ICsxMjM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGdldGRvYyh2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKGdldGF0dHIob2JqZWN0LCBuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCwgbWF4bGVuPTcwLCBkb2M9ZG9jKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIHB1c2goc2VsZi5kb2NvdGhlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqZWN0LCBuYW1lLCBOb25lKSBvciBob21lY2xzLl9fZGljdF9fW25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybiBhdHRycwogCiAgICAgICAgIGF0dHJzID0gWyhuYW1lLCBraW5kLCBjbHMsIHZhbHVlKQpAQCAtMTI1OSw3ICsxMjU4LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGFnID0gImluaGVyaXRlZCBmcm9tICVzIiAlIGNsYXNzbmFtZSh0aGlzY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19tb2R1bGVfXykKLQogICAgICAgICAgICAgIyBTb3J0IGF0dHJzIGJ5IG5hbWUuCiAgICAgICAgICAgICBhdHRycy5zb3J0KCkKIApAQCAtMTI3NCw2ICsxMjcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YSBkZXNjcmlwdG9yJykKICAgICAgICAgICAgIGF0dHJzID0gc3BpbGxkYXRhKCJEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzICVzOlxuIiAlIHRhZywgYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YScpCisKICAgICAgICAgICAgIGFzc2VydCBhdHRycyA9PSBbXQogICAgICAgICAgICAgYXR0cnMgPSBpbmhlcml0ZWQKIApAQCAtMTMxMiwyMCArMTMxMSwxOCBAQAogICAgICAgICAgICAgICAgIGNsLl9fZGljdF9fW3JlYWxuYW1lXSBpcyBvYmplY3QpOgogICAgICAgICAgICAgICAgIHNraXBkb2NzID0gMQogICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnID0gJyArIHJlYWxuYW1lCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKyAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCkgb3IgaW5zcGVjdC5pc2J1aWx0aW4ob2JqZWN0KToKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCisgICAgICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCisgICAgICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCisgICAgICAgIGlmIG5vdCBhcmdzcGVjOgogICAgICAgICAgICAgYXJnc3BlYyA9ICcoLi4uKScKICAgICAgICAgZGVjbCA9IHRpdGxlICsgYXJnc3BlYyArIG5vdGUKIApAQCAtMTM5Niw3ICsxMzkzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsIG9zLmVudmlyb25bJ1BBR0VSJ10pCiAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1RFUk0nKSBpbiAoJ2R1bWInLCAnZW1hY3MnKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogdGVtcGZpbGVwYWdlcihwbGFpbih0ZXh0KSwgJ21vcmUgPCcpCiAgICAgaWYgaGFzYXR0cihvcywgJ3N5c3RlbScpIGFuZCBvcy5zeXN0ZW0oJyhsZXNzKSAyPi9kZXYvbnVsbCcpID09IDA6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsICdsZXNzJykKQEAgLTE0MjIsMTYgKzE0MTksMTUgQEAKICAgICB0cnk6CiAgICAgICAgIHBpcGUud3JpdGUodGV4dCkKICAgICAgICAgcGlwZS5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyBJZ25vcmUgYnJva2VuIHBpcGVzIGNhdXNlZCBieSBxdWl0dGluZyB0aGUgcGFnZXIgcHJvZ3JhbS4KIAogZGVmIHRlbXBmaWxlcGFnZXIodGV4dCwgY21kKToKICAgICAiIiJQYWdlIHRocm91Z2ggdGV4dCBieSBpbnZva2luZyBhIHByb2dyYW0gb24gYSB0ZW1wb3JhcnkgZmlsZS4iIiIKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCi0gICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICBmaWxlLndyaXRlKHRleHQpCi0gICAgZmlsZS5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodGV4dCkKICAgICB0cnk6CiAgICAgICAgIG9zLnN5c3RlbShjbWQgKyAnICInICsgZmlsZW5hbWUgKyAnIicpCiAgICAgZmluYWxseToKQEAgLTE4NTAsMTAgKzE4NDYsMTAgQEAKIFB5dGhvbiBwcm9ncmFtcyBhbmQgdXNpbmcgUHl0aG9uIG1vZHVsZXMuICBUbyBxdWl0IHRoaXMgaGVscCB1dGlsaXR5IGFuZAogcmV0dXJuIHRvIHRoZSBpbnRlcnByZXRlciwganVzdCB0eXBlICJxdWl0Ii4KIAotVG8gZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgbW9kdWxlcywga2V5d29yZHMsIG9yIHRvcGljcywgdHlwZSAibW9kdWxlcyIsCi0ia2V5d29yZHMiLCBvciAidG9waWNzIi4gIEVhY2ggbW9kdWxlIGFsc28gY29tZXMgd2l0aCBhIG9uZS1saW5lIHN1bW1hcnkKLW9mIHdoYXQgaXQgZG9lczsgdG8gbGlzdCB0aGUgbW9kdWxlcyB3aG9zZSBzdW1tYXJpZXMgY29udGFpbiBhIGdpdmVuIHdvcmQKLXN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgorVG8gZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgbW9kdWxlcywga2V5d29yZHMsIHN5bWJvbHMsIG9yIHRvcGljcywgdHlwZQorIm1vZHVsZXMiLCAia2V5d29yZHMiLCAic3ltYm9scyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcword2l0aCBhIG9uZS1saW5lIHN1bW1hcnkgb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIG5hbWUKK29yIHN1bW1hcnkgY29udGFpbiBhIGdpdmVuIHN0cmluZyBzdWNoIGFzICJzcGFtIiwgdHlwZSAibW9kdWxlcyBzcGFtIi4KICcnJyAlIHR1cGxlKFtzeXMudmVyc2lvbls6M11dKjIpKQogCiAgICAgZGVmIGxpc3Qoc2VsZiwgaXRlbXMsIGNvbHVtbnM9NCwgd2lkdGg9ODApOgpAQCAtMTkxNywxMSArMTkxMywxMCBAQAogICAgICAgICBpZiBtb3JlX3hyZWZzOgogICAgICAgICAgICAgeHJlZnMgPSAoeHJlZnMgb3IgJycpICsgJyAnICsgbW9yZV94cmVmcwogICAgICAgICBpZiB4cmVmczoKLSAgICAgICAgICAgIGltcG9ydCBmb3JtYXR0ZXIKLSAgICAgICAgICAgIGJ1ZmZlciA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIGZvcm1hdHRlci5EdW1iV3JpdGVyKGJ1ZmZlcikuc2VuZF9mbG93aW5nX2RhdGEoCi0gICAgICAgICAgICAgICAgJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nKQotICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSBidWZmZXIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgIGltcG9ydCB0ZXh0d3JhcAorICAgICAgICAgICAgdGV4dCA9ICdSZWxhdGVkIGhlbHAgdG9waWNzOiAnICsgJywgJy5qb2luKHhyZWZzLnNwbGl0KCkpICsgJ1xuJworICAgICAgICAgICAgd3JhcHBlZF90ZXh0ID0gdGV4dHdyYXAud3JhcCh0ZXh0LCA3MikKKyAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbiVzXG4nICUgJycuam9pbih3cmFwcGVkX3RleHQpKQogCiAgICAgZGVmIF9nZXR0b3BpYyhzZWxmLCB0b3BpYywgbW9yZV94cmVmcz0nJyk6CiAgICAgICAgICIiIlJldHVybiB1bmJ1ZmZlcmVkIHR1cGxlIG9mICh0b3BpYywgeHJlZnMpLgpAQCAtMTk1OCw5ICsxOTUzLDEwIEBACiAgICAgZGVmIGxpc3Rtb2R1bGVzKHNlbGYsIGtleT0nJyk6CiAgICAgICAgIGlmIGtleToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwotSGVyZSBpcyBhIGxpc3Qgb2YgbWF0Y2hpbmcgbW9kdWxlcy4gIEVudGVyIGFueSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgorSGVyZSBpcyBhIGxpc3Qgb2YgbW9kdWxlcyB3aG9zZSBuYW1lIG9yIHN1bW1hcnkgY29udGFpbnMgJ3t9Jy4KK0lmIHRoZXJlIGFyZSBhbnksIGVudGVyIGEgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4KIAotJycnKQorJycnLmZvcm1hdChrZXkpKQogICAgICAgICAgICAgYXByb3BvcyhrZXkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKQEAgLTE5NzksMzUgKzE5NzUsMTEgQEAKICAgICAgICAgICAgIHNlbGYubGlzdChtb2R1bGVzLmtleXMoKSkKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwogRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuICBPciwgdHlwZSAibW9kdWxlcyBzcGFtIiB0byBzZWFyY2gKLWZvciBtb2R1bGVzIHdob3NlIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSB3b3JkICJzcGFtIi4KK2ZvciBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWluIHRoZSBzdHJpbmcgInNwYW0iLgogJycnKQogCiBoZWxwID0gSGVscGVyKCkKIAotY2xhc3MgU2Nhbm5lcjoKLSAgICAiIiJBIGdlbmVyaWMgdHJlZSBpdGVyYXRvci4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdHMsIGNoaWxkcmVuLCBkZXNjZW5kcCk6Ci0gICAgICAgIHNlbGYucm9vdHMgPSByb290c1s6XQotICAgICAgICBzZWxmLnN0YXRlID0gW10KLSAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGNoaWxkcmVuCi0gICAgICAgIHNlbGYuZGVzY2VuZHAgPSBkZXNjZW5kcAotCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnN0YXRlOgotICAgICAgICAgICAgaWYgbm90IHNlbGYucm9vdHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJvb3QgPSBzZWxmLnJvb3RzLnBvcCgwKQotICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IFsocm9vdCwgc2VsZi5jaGlsZHJlbihyb290KSldCi0gICAgICAgIG5vZGUsIGNoaWxkcmVuID0gc2VsZi5zdGF0ZVstMV0KLSAgICAgICAgaWYgbm90IGNoaWxkcmVuOgotICAgICAgICAgICAgc2VsZi5zdGF0ZS5wb3AoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dCgpCi0gICAgICAgIGNoaWxkID0gY2hpbGRyZW4ucG9wKDApCi0gICAgICAgIGlmIHNlbGYuZGVzY2VuZHAoY2hpbGQpOgotICAgICAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoKGNoaWxkLCBzZWxmLmNoaWxkcmVuKGNoaWxkKSkpCi0gICAgICAgIHJldHVybiBjaGlsZAotCi0KIGNsYXNzIE1vZHVsZVNjYW5uZXI6CiAgICAgIiIiQW4gaW50ZXJydXB0aWJsZSBzY2FubmVyIHRoYXQgc2VhcmNoZXMgbW9kdWxlIHN5bm9wc2VzLiIiIgogCmRpZmYgLS1naXQgYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKaW5kZXggY2NmYzRlYy4uNGRmYTMyMyAxMDA2NDQKLS0tIGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CisrKyBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQpAQCAtMSw1ICsxLDUgQEAKICMgLSotIGNvZGluZzogdXRmLTggLSotCi0jIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFN1biBPY3QgMjcgMDk6MDc6NTUgMjAxMworIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTdW4gTm92IDI0IDA2OjUwOjM0IDIwMTMKIHRvcGljcyA9IHsnYXNzZXJ0JzogJ1xuVGhlIGBgYXNzZXJ0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sIGBgYXNzZXJ0IGV4cHJlc3Npb25gYCwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sIGBgYXNzZXJ0IGV4cHJlc3Npb24xLCBleHByZXNzaW9uMmBgLCBpcyBlcXVpdmFsZW50XG50b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgYGBfX2RlYnVnX19gYCBhbmQgYGBBc3NlcnRpb25FcnJvcmBgXG5yZWZlciB0byB0aGUgYnVpbHQtaW4gdmFyaWFibGVzIHdpdGggdGhvc2UgbmFtZXMuICBJbiB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiB2YXJpYWJsZSBgYF9fZGVidWdfX2BgIGlzIGBgVHJ1ZWBgIHVuZGVyXG5ub3JtYWwgY2lyY3Vtc3RhbmNlcywgYGBGYWxzZWBgIHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZFxuKGNvbW1hbmQgbGluZSBvcHRpb24gLU8pLiAgVGhlIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZW1pdHMgbm8gY29kZVxuZm9yIGFuIGFzc2VydCBzdGF0ZW1lbnQgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGF0IGNvbXBpbGVcbnRpbWUuICBOb3RlIHRoYXQgaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZVxuZXhwcmVzc2lvbiB0aGF0IGZhaWxlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZTsgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgYXNcbnBhcnQgb2YgdGhlIHN0YWNrIHRyYWNlLlxuXG5Bc3NpZ25tZW50cyB0byBgYF9fZGVidWdfX2BgIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKICAnYXNzaWdubWVudCc6ICdcbkFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2lnbm1lbnQgc3RhdGVtZW50cyBhcmUgdXNlZCB0byAocmUpYmluZCBuYW1lcyB0byB2YWx1ZXMgYW5kIHRvXG5tb2RpZnkgYXR0cmlidXRlcyBvciBpdGVtcyBvZiBtdXRhYmxlIG9iamVjdHM6XG5cbiAgIGFzc2lnbm1lbnRfc3RtdCA6Oj0gKHRhcmdldF9saXN0ICI9IikrIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgdGFyZ2V0X2xpc3QgICAgIDo6PSB0YXJnZXQgKCIsIiB0YXJnZXQpKiBbIiwiXVxuICAgdGFyZ2V0ICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHwgIigiIHRhcmdldF9saXN0ICIpIlxuICAgICAgICAgICAgICB8ICJbIiB0YXJnZXRfbGlzdCAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG4gICAgICAgICAgICAgIHwgIioiIHRhcmdldFxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlIG9iamVjdFxuICBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZVxuICB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2ssXG4gICAgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCBhdFxuICAgIGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBtaW51c1xuICAgIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG9cbiAgICByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZSBmaW5hbCBpdGVtc1xuICAgIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlIHN0YXJyZWRcbiAgICB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXMgdGhlblxuICAgIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhIGBgZ2xvYmFsYGAgb3IgYGBub25sb2NhbGBgXG4gICAgc3RhdGVtZW50IGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZVxuICAgIG9iamVjdCBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2VcbiAgICBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgYGBub25sb2NhbGBgLCByZXNwZWN0aXZlbHkuXG5cbiAgVGhlIG5hbWUgaXMgcmVib3VuZCBpZiBpdCB3YXMgYWxyZWFkeSBib3VuZC4gIFRoaXMgbWF5IGNhdXNlIHRoZVxuICByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBvYmplY3QgcHJldmlvdXNseSBib3VuZCB0byB0aGUgbmFtZSB0byByZWFjaFxuICB6ZXJvLCBjYXVzaW5nIHRoZSBvYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQgYW5kIGl0cyBkZXN0cnVjdG9yIChpZiBpdFxuICBoYXMgb25lKSB0byBiZSBjYWxsZWQuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHRhcmdldCBsaXN0IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIGluIHNxdWFyZVxuICBicmFja2V0czogVGhlIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIGl0cyBpdGVtcyBhcmVcbiAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2U6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW5cbiAgdGhlIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYW4gb2JqZWN0IHdpdGhcbiAgYXNzaWduYWJsZSBhdHRyaWJ1dGVzOyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgYGBUeXBlRXJyb3JgYCBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgYGBBdHRyaWJ1dGVFcnJvcmBgKS5cblxuICBOb3RlOiBJZiB0aGUgb2JqZWN0IGlzIGEgY2xhc3MgaW5zdGFuY2UgYW5kIHRoZSBhdHRyaWJ1dGUgcmVmZXJlbmNlXG4gIG9jY3VycyBvbiBib3RoIHNpZGVzIG9mIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yLCB0aGUgUkhTIGV4cHJlc3Npb24sXG4gIGBgYS54YGAgY2FuIGFjY2VzcyBlaXRoZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG9yIChpZiBubyBpbnN0YW5jZVxuICBhdHRyaWJ1dGUgZXhpc3RzKSBhIGNsYXNzIGF0dHJpYnV0ZS4gIFRoZSBMSFMgdGFyZ2V0IGBgYS54YGAgaXNcbiAgYWx3YXlzIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAgVGh1cywgdGhlIHR3byBvY2N1cnJlbmNlcyBvZiBgYGEueGBgIGRvIG5vdCBuZWNlc3NhcmlseSByZWZlciB0byB0aGVcbiAgc2FtZSBhdHRyaWJ1dGU6IGlmIHRoZSBSSFMgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBjbGFzcyBhdHRyaWJ1dGUsXG4gIHRoZSBMSFMgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBhdHRyaWJ1dGUgYXMgdGhlIHRhcmdldCBvZiB0aGVcbiAgYXNzaWdubWVudDpcblxuICAgICBjbGFzcyBDbHM6XG4gICAgICAgICB4ID0gMyAgICAgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlXG4gICAgIGluc3QgPSBDbHMoKVxuICAgICBpbnN0LnggPSBpbnN0LnggKyAxICAgIyB3cml0ZXMgaW5zdC54IGFzIDQgbGVhdmluZyBDbHMueCBhcyAzXG5cbiAgVGhpcyBkZXNjcmlwdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBkZXNjcmlwdG9yXG4gIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgcHJvcGVydGllcyBjcmVhdGVkIHdpdGggYGBwcm9wZXJ0eSgpYGAuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIGBgSW5kZXhFcnJvcmBgIGlzIHJhaXNlZCAoYXNzaWdubWVudCB0byBhXG4gIHN1YnNjcmlwdGVkIHNlcXVlbmNlIGNhbm5vdCBhZGQgbmV3IGl0ZW1zIHRvIGEgbGlzdCkuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgaGF2ZSBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBtYXBwaW5nXCdzIGtleSB0eXBlLFxuICBhbmQgdGhlIG1hcHBpbmcgaXMgdGhlbiBhc2tlZCB0byBjcmVhdGUgYSBrZXkvZGF0dW0gcGFpciB3aGljaCBtYXBzXG4gIHRoZSBzdWJzY3JpcHQgdG8gdGhlIGFzc2lnbmVkIG9iamVjdC4gIFRoaXMgY2FuIGVpdGhlciByZXBsYWNlIGFuXG4gIGV4aXN0aW5nIGtleS92YWx1ZSBwYWlyIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLCBvciBpbnNlcnQgYSBuZXdcbiAga2V5L3ZhbHVlIHBhaXIgKGlmIG5vIGtleSB3aXRoIHRoZSBzYW1lIHZhbHVlIGV4aXN0ZWQpLlxuXG4gIEZvciB1c2VyLWRlZmluZWQgb2JqZWN0cywgdGhlIGBgX19zZXRpdGVtX18oKWBgIG1ldGhvZCBpcyBjYWxsZWRcbiAgd2l0aCBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlIHJlZmVyZW5jZVxuICBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhXG4gIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3Qgb2YgdGhlIHNhbWVcbiAgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCxcbiAgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIGludGVnZXJzLiBJZiBlaXRoZXIgYm91bmQgaXNcbiAgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nXG4gIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLFxuICBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2UgdGhlXG4gIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2YgdGhlXG4gIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3RcbiAgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbldBUk5JTkc6IEFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzXG5iZXR3ZWVuIHRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzYWZlXCcgKGZvclxuZXhhbXBsZSBgYGEsIGIgPSBiLCBhYGAgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGVcbmZvbGxvd2luZyBwcm9ncmFtIHByaW50cyBgYFswLCAyXWBgOlxuXG4gICB4ID0gWzAsIDFdXG4gICBpID0gMFxuICAgaSwgeFtpXSA9IDEsIDJcbiAgIHByaW50KHgpXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTMyKiogLSBFeHRlbmRlZCBJdGVyYWJsZSBVbnBhY2tpbmdcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYGAqdGFyZ2V0YGAgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgYGB4ICs9IDFgYCBjYW4gYmUgcmV3cml0dGVuIGFzXG5gYHggPSB4ICsgMWBgIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJblxudGhlIGF1Z21lbnRlZCB2ZXJzaW9uLCBgYHhgYCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuXG5wb3NzaWJsZSwgdGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdFxucmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LFxudGhlIG9sZCBvYmplY3QgaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCiAgJ2F0b20taWRlbnRpZmllcnMnOiAnXG5JZGVudGlmaWVycyAoTmFtZXMpXG4qKioqKioqKioqKioqKioqKioqXG5cbkFuIGlkZW50aWZpZXIgb2NjdXJyaW5nIGFzIGFuIGF0b20gaXMgYSBuYW1lLiAgU2VlIHNlY3Rpb25cbipJZGVudGlmaWVycyBhbmQga2V5d29yZHMqIGZvciBsZXhpY2FsIGRlZmluaXRpb24gYW5kIHNlY3Rpb24gKk5hbWluZ1xuYW5kIGJpbmRpbmcqIGZvciBkb2N1bWVudGF0aW9uIG9mIG5hbWluZyBhbmQgYmluZGluZy5cblxuV2hlbiB0aGUgbmFtZSBpcyBib3VuZCB0byBhbiBvYmplY3QsIGV2YWx1YXRpb24gb2YgdGhlIGF0b20geWllbGRzXG50aGF0IG9iamVjdC4gV2hlbiBhIG5hbWUgaXMgbm90IGJvdW5kLCBhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0XG5yYWlzZXMgYSBgYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuKipQcml2YXRlIG5hbWUgbWFuZ2xpbmc6KiogV2hlbiBhbiBpZGVudGlmaWVyIHRoYXQgdGV4dHVhbGx5IG9jY3VycyBpblxuYSBjbGFzcyBkZWZpbml0aW9uIGJlZ2lucyB3aXRoIHR3byBvciBtb3JlIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBhbmRcbmRvZXMgbm90IGVuZCBpbiB0d28gb3IgbW9yZSB1bmRlcnNjb3JlcywgaXQgaXMgY29uc2lkZXJlZCBhICpwcml2YXRlXG5uYW1lKiBvZiB0aGF0IGNsYXNzLiBQcml2YXRlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0byBhIGxvbmdlciBmb3JtXG5iZWZvcmUgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZW0uICBUaGUgdHJhbnNmb3JtYXRpb24gaW5zZXJ0cyB0aGVcbmNsYXNzIG5hbWUsIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyByZW1vdmVkIGFuZCBhIHNpbmdsZSB1bmRlcnNjb3JlXG5pbnNlcnRlZCwgaW4gZnJvbnQgb2YgdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwgdGhlIGlkZW50aWZpZXJcbmBgX19zcGFtYGAgb2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgYGBIYW1gYCB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvXG5gYF9IYW1fX3NwYW1gYC4gIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5bnRhY3RpY2FsXG5jb250ZXh0IGluIHdoaWNoIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQuICBJZiB0aGUgdHJhbnNmb3JtZWQgbmFtZSBpc1xuZXh0cmVtZWx5IGxvbmcgKGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzKSwgaW1wbGVtZW50YXRpb24gZGVmaW5lZFxudHJ1bmNhdGlvbiBtYXkgaGFwcGVuLiBJZiB0aGUgY2xhc3MgbmFtZSBjb25zaXN0cyBvbmx5IG9mIHVuZGVyc2NvcmVzLFxubm8gdHJhbnNmb3JtYXRpb24gaXMgZG9uZS5cbicsCkBAIC0xOSwxMiArMTksMTIgQEAKICAnY2FsbHMnOiAnXG5DYWxsc1xuKioqKipcblxuQSBjYWxsIGNhbGxzIGEgY2FsbGFibGUgb2JqZWN0IChlLmcuLCBhICpmdW5jdGlvbiopIHdpdGggYSBwb3NzaWJseVxuZW1wdHkgc2VyaWVzIG9mICphcmd1bWVudHMqOlxuXG4gICBjYWxsICAgICAgICAgICAgICAgICA6Oj0gcHJpbWFyeSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl0gfCBjb21wcmVoZW5zaW9uXSAiKSJcbiAgIGFyZ3VtZW50X2xpc3QgICAgICAgIDo6PSBwb3NpdGlvbmFsX2FyZ3VtZW50cyBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqIiBleHByZXNzaW9uXSBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZF9hcmd1bWVudHMgWyIsIiAiKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqIiBleHByZXNzaW9uIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKioiIGV4cHJlc3Npb25cbiAgIHBvc2l0aW9uYWxfYXJndW1lbnRzIDo6PSBleHByZXNzaW9uICgiLCIgZXhwcmVzc2lvbikqXG4gICBrZXl3b3JkX2FyZ3VtZW50cyAgICA6Oj0ga2V5d29yZF9pdGVtICgiLCIga2V5d29yZF9pdGVtKSpcbiAgIGtleXdvcmRfaXRlbSAgICAgICAgIDo6PSBpZGVudGlmaWVyICI9IiBleHByZXNzaW9uXG5cbkEgdHJhaWxpbmcgY29tbWEgbWF5IGJlIHByZXNlbnQgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmRcbmFyZ3VtZW50cyBidXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzZW1hbnRpY3MuXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYSBjYWxsYWJsZSBvYmplY3QgKHVzZXItZGVmaW5lZFxuZnVuY3Rpb25zLCBidWlsdC1pbiBmdW5jdGlvbnMsIG1ldGhvZHMgb2YgYnVpbHQtaW4gb2JqZWN0cywgY2xhc3Ncbm9iamVjdHMsIG1ldGhvZHMgb2YgY2xhc3MgaW5zdGFuY2VzLCBhbmQgYWxsIG9iamVjdHMgaGF2aW5nIGFcbmBgX19jYWxsX18oKWBgIG1ldGhvZCBhcmUgY2FsbGFibGUpLiAgQWxsIGFyZ3VtZW50IGV4cHJlc3Npb25zIGFyZVxuZXZhbHVhdGVkIGJlZm9yZSB0aGUgY2FsbCBpcyBhdHRlbXB0ZWQuICBQbGVhc2UgcmVmZXIgdG8gc2VjdGlvblxuKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgdGhlIHN5bnRheCBvZiBmb3JtYWwgKnBhcmFtZXRlciogbGlzdHMuXG5cbklmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG9cbnBvc2l0aW9uYWwgYXJndW1lbnRzLCBhcyBmb2xsb3dzLiAgRmlyc3QsIGEgbGlzdCBvZiB1bmZpbGxlZCBzbG90cyBpc1xuY3JlYXRlZCBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUgYXJlIE4gcG9zaXRpb25hbFxuYXJndW1lbnRzLCB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIGZpcnN0IE4gc2xvdHMuICBOZXh0LCBmb3IgZWFjaFxua2V5d29yZCBhcmd1bWVudCwgdGhlIGlkZW50aWZpZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3QgKGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBmb3JtYWxcbnBhcmFtZXRlciBuYW1lLCB0aGUgZmlyc3Qgc2xvdCBpcyB1c2VkLCBhbmQgc28gb24pLiAgSWYgdGhlIHNsb3QgaXNcbmFscmVhZHkgZmlsbGVkLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzIGBgTm9uZWBgLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFcbmBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIGxpc3Qgb2YgZmlsbGVkXG5zbG90cyBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgY2FsbC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZVxuYnVpbHQtaW4gZnVuY3Rpb25zIHdob3NlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBkbyBub3QgaGF2ZSBuYW1lcywgZXZlblxuaWYgdGhleSBhcmUgXCduYW1lZFwnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2hcbnRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlIGNhc2VcbmZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSBgYFB5QXJnX1BhcnNlVHVwbGUoKWBgIHRvXG5wYXJzZSB0aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4ob3IgYW4gZW1wdHkgdHVwbGUgaWYgdGhlcmUgd2VyZSBubyBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHMpLlxuXG5JZiBhbnkga2V5d29yZCBhcmd1bWVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZm9ybWFsIHBhcmFtZXRlclxubmFtZSwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggYGAqKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXRcbmZvcm1hbCBwYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggYGAqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzXG5pdGVyYWJsZSBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cztcbmlmIHRoZXJlIGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCBgYGV4cHJlc3Npb25gYFxuZXZhbHVhdGVzIHRvIGEgc2VxdWVuY2UgKnkxKiwgLi4uLCAqeU0qLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsXG53aXRoIE0rTiBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosICp5MSosIC4uLiwgKnlNKi5cblxuQSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgYWx0aG91Z2ggdGhlIGBgKmV4cHJlc3Npb25gYCBzeW50YXggbWF5XG5hcHBlYXIgKmFmdGVyKiBzb21lIGtleXdvcmQgYXJndW1lbnRzLCBpdCBpcyBwcm9jZXNzZWQgKmJlZm9yZSogdGhlXG5rZXl3b3JkIGFyZ3VtZW50cyAoYW5kIHRoZSBgYCoqZXhwcmVzc2lvbmBgIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgYGAqZXhwcmVzc2lvbmBgXG5zeW50YXggdG8gYmUgdXNlZCBpbiB0aGUgc2FtZSBjYWxsLCBzbyBpbiBwcmFjdGljZSB0aGlzIGNvbmZ1c2lvbiBkb2VzXG5ub3QgYXJpc2UuXG5cbklmIHRoZSBzeW50YXggYGAqKmV4cHJlc3Npb25gYCBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLFxuYGBleHByZXNzaW9uYGAgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggYGBleHByZXNzaW9uYGAgYW5kIGFzIGFuIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnQsXG5hIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cblxuRm9ybWFsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYFxuY2Fubm90IGJlIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50XG5uYW1lcy5cblxuQSBjYWxsIGFsd2F5cyByZXR1cm5zIHNvbWUgdmFsdWUsIHBvc3NpYmx5IGBgTm9uZWBgLCB1bmxlc3MgaXQgcmFpc2VzXG5hbiBleGNlcHRpb24uICBIb3cgdGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRoZVxuY2FsbGFibGUgb2JqZWN0LlxuXG5JZiBpdCBpcy0tLVxuXG5hIHVzZXItZGVmaW5lZCBmdW5jdGlvbjpcbiAgIFRoZSBjb2RlIGJsb2NrIGZvciB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIHBhc3NpbmcgaXQgdGhlXG4gICBhcmd1bWVudCBsaXN0LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBjb2RlIGJsb2NrIHdpbGwgZG8gaXMgYmluZCB0aGVcbiAgIGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRoZSBhcmd1bWVudHM7IHRoaXMgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb25cbiAgICpGdW5jdGlvbiBkZWZpbml0aW9ucyouICBXaGVuIHRoZSBjb2RlIGJsb2NrIGV4ZWN1dGVzIGEgYGByZXR1cm5gYFxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSBgYF9fY2FsbF9fKClgYCBtZXRob2Q7IHRoZSBlZmZlY3QgaXMgdGhlblxuICAgdGhlIHNhbWUgYXMgaWYgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZC5cbicsCiAgJ2NsYXNzJzogJ1xuQ2xhc3MgZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzIGBgb2JqZWN0YGA7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlXG53aXRoIHRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlXG51c2VkIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXNcbnRoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG9cbmNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtIENsYXNzXG4gICBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzcyB0aGVyZVxuICAgIGlzIGEgYGBmaW5hbGx5YGAgY2xhdXNlIHdoaWNoIGhhcHBlbnMgdG8gcmFpc2UgYW5vdGhlciBleGNlcHRpb24uXG4gICAgVGhhdCBuZXcgZXhjZXB0aW9uIGNhdXNlcyB0aGUgb2xkIG9uZSB0byBiZSBsb3N0LlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgYGBhIDwgYiA8IGNgYCBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiBgYFRydWVgYCBvciBgYEZhbHNlYGAuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCBgYHggPCB5IDw9IHpgYCBpc1xuZXF1aXZhbGVudCB0byBgYHggPCB5IGFuZCB5IDw9IHpgYCwgZXhjZXB0IHRoYXQgYGB5YGAgaXMgZXZhbHVhdGVkXG5vbmx5IG9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzIGBgemBgIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gYGB4IDxcbnlgYCBpcyBmb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gYGBhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4gemBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4gemBgLFxuZXhjZXB0IHRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCBgYGEgb3AxIGIgb3AyIGNgYCBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uXG5iZXR3ZWVuICphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbFxuKHRob3VnaCBwZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzIGBgPGBgLCBgYD5gYCwgYGA9PWBgLCBgYD49YGAsIGBgPD1gYCwgYW5kIGBgIT1gYCBjb21wYXJlXG50aGUgdmFsdWVzIG9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuSWYgYm90aCBhcmUgbnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsXG50aGUgYGA9PWBgIGFuZCBgYCE9YGAgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0byBiZSB1bmVxdWFsLCB3aGlsZSB0aGUgYGA8YGAsIGBgPmBgLCBgYD49YGAgYW5kIGBgPD1gYFxub3BlcmF0b3JzIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCB3aGVuIGNvbXBhcmluZyBvYmplY3RzIG9mIGRpZmZlcmVudFxudHlwZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IHRoZXNlIG9wZXJhdG9ycyBmb3IgdGhlIGdpdmVuIHBhaXIgb2ZcbnR5cGVzLiAgWW91IGNhbiBjb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Ygb2JqZWN0cyBvZiBub24tYnVpbHQtaW5cbnR5cGVzIGJ5IGRlZmluaW5nIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgYGBfX2d0X18oKWBgLCBkZXNjcmliZWRcbmluIHNlY3Rpb24gKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgYGBmbG9hdChcJ05hTlwnKWBgIGFuZCBgYERlY2ltYWwoXCdOYU5cJylgYCBhcmUgc3BlY2lhbC4gVGhlXG4gIGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcywgYGB4IGlzIHhgYCBidXQgYXJlIG5vdCBlcXVhbCB0b1xuICB0aGVtc2VsdmVzLCBgYHggIT0geGBgLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuIGBgRmFsc2VgYC4gIEZvciBleGFtcGxlLCBib3RoIGBgMyA8XG4gIGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgZmxvYXQoXCdOYU5cJykgPCAzYGAgd2lsbCByZXR1cm4gYGBGYWxzZWBgLlxuXG4qIEJ5dGVzIG9iamVjdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpYyBlcXVpdmFsZW50c1xuICAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBvcmQoKWBgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLlxuICBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgYGBbMSwyLHhdIDw9IFsxLDIseV1gYCBoYXMgdGhlXG4gIHNhbWUgdmFsdWUgYXMgYGB4IDw9IHlgYC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3RcbiAgZXhpc3QsIHRoZSBzaG9ydGVyIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCBgYFsxLDJdIDxcbiAgWzEsMiwzXWBgKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSBgYChrZXksIHZhbHVlKWBgIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyBgYChcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKWBgIHJhaXNlIGBgVHlwZUVycm9yYGAuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgYGB7MSwyfWBgIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsIGBgbWluKClgYCwgYGBtYXgoKWBgLCBhbmQgYGBzb3J0ZWQoKWBgIHByb2R1Y2VcbiAgdW5kZWZpbmVkIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlXG4gIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyXG4gIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseVxuICB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuYGBOb3RJbXBsZW1lbnRlZGBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaW5gYCBhbmQgYGBub3QgaW5gYCB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgYGB4IGluIHNgYFxuZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gIGBgeFxubm90IGluIHNgYCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiBgYHggaW4gc2BgLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggYGBpbmBgXG50ZXN0cyB3aGV0aGVyIGEgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzXG5zdWNoIGFzIGxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiBgYHggaW4geWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSlgYC5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqXG5pcyBhIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgYGB5LmZpbmQoeCkgIT0gLTFgYC5cbkVtcHR5IHN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlclxuc3RyaW5nLCBzbyBgYCIiIGluICJhYmMiYGAgd2lsbCByZXR1cm4gYGBUcnVlYGAuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlIGBgX19jb250YWluc19fKClgYCBtZXRob2QsXG5gYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgYGB5Ll9fY29udGFpbnNfXyh4KWBgIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCBidXQgZG9cbmRlZmluZSBgYF9faXRlcl9fKClgYCwgYGB4IGluIHlgYCBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgYGB6YGAgd2l0aCBgYHhcbj09IHpgYCBpcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBgYHlgYC4gIElmIGFuIGV4Y2VwdGlvbiBpc1xucmFpc2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbmBgX19nZXRpdGVtX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgYGB4ID09IHlbaV1gYCwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSBgYEluZGV4RXJyb3JgYCBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yIGBgbm90IGluYGAgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbmBgaW5gYC5cblxuVGhlIG9wZXJhdG9ycyBgYGlzYGAgYW5kIGBgaXMgbm90YGAgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiBgYHggaXNcbnlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICBgYHggaXNcbm5vdCB5YGAgeWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbNF1cbicsCi0gJ2NvbXBvdW5kJzogJ1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlIGBgaWZgYCwgYGB3aGlsZWBgIGFuZCBgYGZvcmBgIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsXG5jb250cm9sIGZsb3cgY29uc3RydWN0cy4gIGBgdHJ5YGAgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3JcbmNsZWFudXAgY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIGNvZGUgYXJvdW5kIGFcbmJsb2NrIG9mIGNvZGUuICBGdW5jdGlvbiBhbmQgY2xhc3MgZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseVxuY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG5gYHByaW50KClgYCBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5c1xuYmVnaW4gd2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgYGBlbHNlYGBcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgYGBpZmBgIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSBgYGlmYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpc1xuZXhlY3V0ZWQgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmdvZXMgYmFjayB0byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mXG50aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAgSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uLCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3XG5leGNlcHRpb24uIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yXG5gYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYGB3aXRoX2l0ZW1gYClcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS1cbnRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgIGFzIHRoZVxuZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgImBgZGVmYGAiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAorICdjb21wb3VuZCc6ICdcbkNvbXBvdW5kIHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKipcblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb250YWluIChncm91cHMgb2YpIG90aGVyIHN0YXRlbWVudHM7IHRoZXkgYWZmZWN0XG5vciBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhvc2Ugb3RoZXIgc3RhdGVtZW50cyBpbiBzb21lIHdheS4gIEluXG5nZW5lcmFsLCBjb21wb3VuZCBzdGF0ZW1lbnRzIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFsdGhvdWdoIGluIHNpbXBsZVxuaW5jYXJuYXRpb25zIGEgd2hvbGUgY29tcG91bmQgc3RhdGVtZW50IG1heSBiZSBjb250YWluZWQgaW4gb25lIGxpbmUuXG5cblRoZSBgYGlmYGAsIGBgd2hpbGVgYCBhbmQgYGBmb3JgYCBzdGF0ZW1lbnRzIGltcGxlbWVudCB0cmFkaXRpb25hbFxuY29udHJvbCBmbG93IGNvbnN0cnVjdHMuICBgYHRyeWBgIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yXG5jbGVhbnVwIGNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhXG5ibG9jayBvZiBjb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHlcbmNvbXBvdW5kIHN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggYGBpZmBgIGNsYXVzZSBhIGZvbGxvd2luZyBgYGVsc2VgYCBjbGF1c2Ugd291bGQgYmVsb25nOlxuXG4gICBpZiB0ZXN0MTogaWYgdGVzdDI6IHByaW50KHgpXG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuYGBwcmludCgpYGAgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhIGBgTkVXTElORWBgIHBvc3NpYmx5IGZvbGxvd2VkIGJ5XG5hIGBgREVERU5UYGAuICBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXNcbmJlZ2luIHdpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nIGBgZWxzZWBgXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkIGBgaWZgYCBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIGBgU3RvcEl0ZXJhdGlvbmBgXG5leGNlcHRpb24pLCB0aGUgc3VpdGUgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuY29udGludWVzIHdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgYGBlbHNlYGAgY2xhdXNlIGlmIHRoZXJlIHdhc1xubm8gbmV4dCBpdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvclxuaSA6PSBhIHRvIGIgZG9gYDsgZS5nLiwgYGBsaXN0KHJhbmdlKDMpKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSxcbjJdYGAuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGxvb3BcbiAgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGBgYXNgYCBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSxcbmlmIHByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgYGBhcyB0YXJnZXRgYCwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgYGBzeXNgYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG5gYHN5cy5leGNfaW5mbygpYGAuIGBgc3lzLmV4Y19pbmZvKClgYCByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mXG50aGUgZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3RcbihzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluXG50aGUgcHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgYGBzeXMuZXhjX2luZm8oKWBgIHZhbHVlc1xuYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZlxudGhlIGBgZmluYWxseWBgIGNsYXVzZS4gIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ld1xuZXhjZXB0aW9uLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvclxuYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQ6XG5cbiAgIGRlZiBmKCk6XG4gICAgICAgdHJ5OlxuICAgICAgICAgICAxLzBcbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICByZXR1cm4gNDJcblxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGBgd2l0aF9pdGVtYGApXG4gICBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19lbnRlcl9fKClgYCBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gYGBfX2VudGVyX18oKWBgIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgYGB3aXRoYGAgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgYGBfX2VudGVyX18oKWBgXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gYGBfX2V4aXRfXygpYGAgd2lsbCBhbHdheXNcbiAgICAgYmUgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgYGB3aXRoYGAgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG5gYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG5cblxuQ2xhc3MgZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09XG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzIGBgb2JqZWN0YGA7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlXG53aXRoIHRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlXG51c2VkIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXNcbnRoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG9cbmNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtIENsYXNzXG4gICBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzcyB0aGVyZVxuICAgIGlzIGEgYGBmaW5hbGx5YGAgY2xhdXNlIHdoaWNoIGhhcHBlbnMgdG8gcmFpc2UgYW5vdGhlciBleGNlcHRpb24uXG4gICAgVGhhdCBuZXcgZXhjZXB0aW9uIGNhdXNlcyB0aGUgb2xkIG9uZSB0byBiZSBsb3N0LlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29udGV4dC1tYW5hZ2Vycyc6ICdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgYGB3aXRoYGAgc3RhdGVtZW50LiBUaGUgY29udGV4dFxubWFuYWdlciBoYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZVxuY29udGV4dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlXG5ub3JtYWxseSBpbnZva2VkIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qVGhlIHdpdGggc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyXG5tZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBgYHdpdGhgYFxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSBgYGFzYGAgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgYGBOb25lYGAuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0IGBgX19leGl0X18oKWBgIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCiAgJ2NvbnRpbnVlJzogJ1xuVGhlIGBgY29udGludWVgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGNvbnRpbnVlX3N0bXQgOjo9ICJjb250aW51ZSJcblxuYGBjb250aW51ZWBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgYGBmb3JgYCBvclxuYGB3aGlsZWBgIGxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiBvclxuYGBmaW5hbGx5YGAgY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZVxub2YgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gYGBjb250aW51ZWBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5zdGFydGluZyB0aGUgbmV4dCBsb29wIGN5Y2xlLlxuJywKICAnY29udmVyc2lvbnMnOiAnXG5Bcml0aG1ldGljIGNvbnZlcnNpb25zXG4qKioqKioqKioqKioqKioqKioqKioqXG5cbldoZW4gYSBkZXNjcmlwdGlvbiBvZiBhbiBhcml0aG1ldGljIG9wZXJhdG9yIGJlbG93IHVzZXMgdGhlIHBocmFzZVxuInRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIiB0aGlzIG1lYW5zXG50aGF0IHRoZSBvcGVyYXRvciBpbXBsZW1lbnRhdGlvbiBmb3IgYnVpbHQtaW4gdHlwZXMgd29ya3MgdGhhdCB3YXk6XG5cbiogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgY29tcGxleCBudW1iZXIsIHRoZSBvdGhlciBpcyBjb252ZXJ0ZWQgdG9cbiAgY29tcGxleDtcblxuKiBvdGhlcndpc2UsIGlmIGVpdGhlciBhcmd1bWVudCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgdGhlIG90aGVyXG4gIGlzIGNvbnZlcnRlZCB0byBmbG9hdGluZyBwb2ludDtcblxuKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuXG5cblNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGxlZnRcbmFyZ3VtZW50IHRvIHRoZSBcJyVcJyBvcGVyYXRvcikuICBFeHRlbnNpb25zIG11c3QgZGVmaW5lIHRoZWlyIG93blxuY29udmVyc2lvbiBiZWhhdmlvci5cbicsCi0gJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3dcbiAgICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvcixcbiAgICAgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgc3RyKG9iamVjdClgYCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGZvcm1hdCgpYGBcbiAgIGFuZCBgYHByaW50KClgYCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGVcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgKnN0cmluZyogb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGBvYmplY3QuX19yZXByX18oKWBgIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgYGBfX3N0cl9fKClgYCByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgYGBvYmplY3RgYFxuICAgY2FsbHMgYGBvYmplY3QuX19yZXByX18oKWBgLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYGJ5dGVzKClgYCB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgYGBieXRlc2BgIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBmb3JtYXQoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6IGBgaGFzaCgpYGAgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwncyBjdXN0b21cbiAgICAgYGBfX2hhc2hfXygpYGAgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgYGBQeV9zc2l6ZV90YGAuICBUaGlzIGlzXG4gICAgIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0IGJ1aWxkcy5cbiAgICAgSWYgYW4gb2JqZWN0XCdzICAgYGBfX2hhc2hfXygpYGAgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzIG9mXG4gICAgIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbCBzdXBwb3J0ZWRcbiAgICAgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIGBgcHl0aG9uIC1jICJpbXBvcnQgc3lzO1xuICAgICBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSJgYFxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiBgYF9fZXFfXygpYGAgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXNcbiAgIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlXG4gICB1c2FibGUgYXMgaXRlbXMgaW4gaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhbiBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGRcbiAgIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZVxuICAgY29sbGVjdGlvbnMgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlXG4gICBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2VxX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCBgYHggPT0geWBgIGltcGxpZXMgYm90aCB0aGF0IGBgeCBpcyB5YGAgYW5kIGBgaGFzaCh4KSA9PVxuICAgaGFzaCh5KWBgLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBhbmQgZG9lcyBub3QgZGVmaW5lXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGhhdmUgaXRzIGBgX19oYXNoX18oKWBgIGltcGxpY2l0bHkgc2V0IHRvXG4gICBgYE5vbmVgYC4gIFdoZW4gdGhlIGBgX19oYXNoX18oKWBgIG1ldGhvZCBvZiBhIGNsYXNzIGlzIGBgTm9uZWBgLFxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlblxuICAgYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmVcbiAgIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLFxuICAgY29sbGVjdGlvbnMuSGFzaGFibGVgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgYGBfX2VxX18oKWBgIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gYGBfX2hhc2hfXygpYGAgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSBgYFR5cGVFcnJvcmBgIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWRcbiAgIGFzIGhhc2hhYmxlIGJ5IGFuIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSBgYF9faGFzaF9fKClgYCB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQgZGF0ZXRpbWVcbiAgICAgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyBgYFBZVEhPTkhBU0hTRUVEYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG4nLAotICdkZWJ1Z2dlcic6ICdcbmBgcGRiYGAgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG1vZHVsZSBgYHBkYmBgIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbmBgUGRiYGAuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnlcbnJlYWRpbmcgdGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgYGBiZGJgYFxuYW5kIGBgY21kYGAuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgYGAoUGRiKWBgLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW1cbnVuZGVyIGNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogVGFiLWNvbXBsZXRpb24gdmlhIHRoZSBgYHJlYWRsaW5lYGAgbW9kdWxlIGlzXG5hdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWxcbmFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcyBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLlxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6IGBgcGRiLnB5YGAgbm93IGFjY2VwdHMgYSBgYC1jYGAgb3B0aW9uIHRoYXRcbmV4ZWN1dGVzIGNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgYGAucGRicmNgYCBmaWxlLCBzZWUgKkRlYnVnZ2VyXG5Db21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY29udGludWVgYCBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW5cbiAgIHN0ZXAgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWVcbiAgIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4gYGBleGVjKClgYCBvciBgYGV2YWwoKWBgXG4gICBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICBgYHJ1bigpYGAuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cblRoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgYGBQZGJgYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgYGBjbWQuQ21kYGAgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuXG5cbiAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGVcbiAgIG1vZHVsZSBuYW1lIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdFxuICAgb3JpZ2luYXRlIGluIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXVxuXG4gICBCeSBkZWZhdWx0LCBQZGIgc2V0cyBhIGhhbmRsZXIgZm9yIHRoZSBTSUdJTlQgc2lnbmFsICh3aGljaCBpcyBzZW50XG4gICB3aGVuIHRoZSB1c2VyIHByZXNzZXMgQ3RybC1DIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGFcbiAgIGBgY29udGludWVgYCBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG5gYGgoZWxwKWBgIG1lYW5zIHRoYXQgZWl0aGVyIGBgaGBgIG9yIGBgaGVscGBgIGNhbiBiZSB1c2VkIHRvIGVudGVyXG50aGUgaGVscCBjb21tYW5kIChidXQgbm90IGBgaGVgYCBvciBgYGhlbGBgLCBub3IgYGBIYGAgb3IgYGBIZWxwYGAgb3JcbmBgSEVMUGBgKS4gIEFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlXG4oc3BhY2VzIG9yIHRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHNcbihgYFtdYGApIGluIHRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKGBgfGBgKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSBgYGxpc3RgYCBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKGBgIWBgKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnlcbmBgOztgYC4gIChBIHNpbmdsZSBgYDtgYCBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvclxubXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vXG5pbnRlbGxpZ2VuY2UgaXMgYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0XG5hdCB0aGUgZmlyc3QgYGA7O2BgIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZFxuc3RyaW5nLlxuXG5JZiBhIGZpbGUgYGAucGRicmNgYCBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogYGAucGRicmNgYCBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzIGBgY29udGludWVgYCBvciBgYG5leHRgYC4gIFByZXZpb3VzbHksXG50aGVzZSBjb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gIGBgaGVscCBwZGJgYFxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgYGBwZGJgYFxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLFxuICAgYGBoZWxwIGV4ZWNgYCBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlIGBgIWBgIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gYGBzeXMucGF0aGBgLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBgYnJlYWtgYC5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0IGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggYGBlbmRgYDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYG5leHRgYCBhbmRcbiAgIGBgc3RlcGBgIGlzIHRoYXQgYGBzdGVwYGAgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZVxuICAgYGBuZXh0YGAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5XG4gICBzdG9wcGluZyBhdCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBgYGZvcmBgIGxvb3Agb3Igb3V0XG4gICBvZiBhIGBgZmluYWxseWBgIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCBgYC5gYCBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS5cbiAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgYGAtPmBgLiAgSWZcbiAgIGFuIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IGBgPj5gYCwgaWYgaXRcbiAgIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSBgYD4+YGAgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yIGBgbGlzdGBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucChyaW50KSBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSBgYHByaW50YGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpc1xuICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIGBgcHByaW50YGAgbW9kdWxlLlxuXG53aGF0aXMgZXhwcmVzc2lvblxuXG4gICBQcmludCB0aGUgdHlwZSBvZiB0aGUgKmV4cHJlc3Npb24qLlxuXG5zb3VyY2UgZXhwcmVzc2lvblxuXG4gICBUcnkgdG8gZ2V0IHNvdXJjZSBjb2RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBkaXNwbGF5IGl0LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlmIGl0IGNoYW5nZWQsIGVhY2ggdGltZVxuICAgZXhlY3V0aW9uIHN0b3BzIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGxpc3QgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG51bmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERvIG5vdCBkaXNwbGF5IHRoZSBleHByZXNzaW9uIGFueSBtb3JlIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuICAgV2l0aG91dCBleHByZXNzaW9uLCBjbGVhciBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmludGVyYWN0XG5cbiAgIFN0YXJ0IGFuIGludGVyYXRpdmUgaW50ZXJwcmV0ZXIgKHVzaW5nIHRoZSBgYGNvZGVgYCBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSBgYCUxYGAsIGBgJTJgYCwgYW5kIHNvIG9uLCB3aGlsZSBgYCUqYGAgaXMgcmVwbGFjZWQgYnlcbiAgIGFsbCB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSBgYC5wZGJyY2BgIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgb24gdGhlIHNhbWUgbGluZSwgZS5nLjpcblxuICAgICAgKFBkYikgZ2xvYmFsIGxpc3Rfb3B0aW9uczsgbGlzdF9vcHRpb25zID0gW1wnLWxcJ11cbiAgICAgIChQZGIpXG5cbnJ1biBbYXJncyAuLi5dXG5yZXN0YXJ0IFthcmdzIC4uLl1cblxuICAgUmVzdGFydCB0aGUgZGVidWdnZWQgUHl0aG9uIHByb2dyYW0uICBJZiBhbiBhcmd1bWVudCBpcyBzdXBwbGllZCxcbiAgIGl0IGlzIHNwbGl0IHdpdGggYGBzaGxleGBgIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgYGBzeXMuYXJndmBgLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9uc1xuICAgYXJlIHByZXNlcnZlZC4gYGByZXN0YXJ0YGAgaXMgYW4gYWxpYXMgZm9yIGBgcnVuYGAuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZSBpc1xuICAgIGRldGVybWluZWQgYnkgdGhlIGBgX19uYW1lX19gYCBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCisgJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzXG4gICAgIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCisgJ2RlYnVnZ2VyJzogJ1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlIGBgcmVhZGxpbmVgYCBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgYGBwYGAgY29tbWFuZC5cblxuYGBwZGIucHlgYCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuXG5Gb3IgZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiBgYHBkYi5weWBgIG5vdyBhY2NlcHRzIGEgYGAtY2BgIG9wdGlvbiB0aGF0XG5leGVjdXRlcyBjb21tYW5kcyBhcyBpZiBnaXZlbiBpbiBhIGBgLnBkYnJjYGAgZmlsZSwgc2VlICpEZWJ1Z2dlclxuQ29tbWFuZHMqLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBmcm9tIGEgcnVubmluZyBwcm9ncmFtIGlzXG50byBpbnNlcnRcblxuICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpXG5cbmF0IHRoZSBsb2NhdGlvbiB5b3Ugd2FudCB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBjYW4gdGhlblxuc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGZvbGxvd2luZyB0aGlzIHN0YXRlbWVudCwgYW5kIGNvbnRpbnVlIHJ1bm5pbmdcbndpdGhvdXQgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSBgYGNvbnRpbnVlYGAgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgYGBjb250aW51ZWBgLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyBgYHN0ZXBgYCBvciBgYG5leHRgYCAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgYGBfX21haW5fX2BgIGlzIHVzZWQuICAoU2VlXG4gICB0aGUgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgb3IgYGBldmFsKClgYFxuICAgZnVuY3Rpb25zLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdClcbiAgIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wuICBXaGVuIGBgcnVuZXZhbCgpYGAgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgYGBydW4oKWBgLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuIGBgcnVuY2FsbCgpYGAgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0odHJhY2ViYWNrPU5vbmUpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG5UaGUgYGBydW4qYGAgZnVuY3Rpb25zIGFuZCBgYHNldF90cmFjZSgpYGAgYXJlIGFsaWFzZXMgZm9yXG5pbnN0YW50aWF0aW5nIHRoZSBgYFBkYmBgIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWVcbm5hbWUuICBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpc1xueW91cnNlbGY6XG5cbmNsYXNzIGNsYXNzIHBkYi5QZGIoY29tcGxldGVrZXk9XCd0YWJcJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwgbm9zaWdpbnQ9RmFsc2UpXG5cbiAgIGBgUGRiYGAgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nIGBgY21kLkNtZGBgIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICBgYGNvbnRpbnVlYGAgY29tbWFuZC4gVGhpcyBhbGxvd3MgeW91IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyXG4gICBhZ2FpbiBieSBwcmVzc2luZyBDdHJsLUMuICBJZiB5b3Ugd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlRcbiAgIGhhbmRsZXIsIHNldCAqbm9zaWdpbnQqIHRvdCB0cnVlLlxuXG4gICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6XG5cbiAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bXCdkamFuZ28uKlwnXSkuc2V0X3RyYWNlKClcblxuICAgTmV3IGluIHZlcnNpb24gMy4xOiBUaGUgKnNraXAqIGFyZ3VtZW50LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlRcbiAgIGhhbmRsZXIgd2FzIG5ldmVyIHNldCBieSBQZGIuXG5cbiAgIHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuICAgc2V0X3RyYWNlKClcblxuICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS5cblxuXG5EZWJ1Z2dlciBDb21tYW5kc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIGNvbW1hbmRzIHJlY29nbml6ZWQgYnkgdGhlIGRlYnVnZ2VyIGFyZSBsaXN0ZWQgYmVsb3cuICBNb3N0XG5jb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gb25lIG9yIHR3byBsZXR0ZXJzIGFzIGluZGljYXRlZDsgZS5nLlxuYGBoKGVscClgYCBtZWFucyB0aGF0IGVpdGhlciBgYGhgYCBvciBgYGhlbHBgYCBjYW4gYmUgdXNlZCB0byBlbnRlclxudGhlIGhlbHAgY29tbWFuZCAoYnV0IG5vdCBgYGhlYGAgb3IgYGBoZWxgYCwgbm9yIGBgSGBgIG9yIGBgSGVscGBgIG9yXG5gYEhFTFBgYCkuICBBcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZVxuKHNwYWNlcyBvciB0YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzXG4oYGBbXWBgKSBpbiB0aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbihgYHxgYCkuXG5cbkVudGVyaW5nIGEgYmxhbmsgbGluZSByZXBlYXRzIHRoZSBsYXN0IGNvbW1hbmQgZW50ZXJlZC4gIEV4Y2VwdGlvbjogaWZcbnRoZSBsYXN0IGNvbW1hbmQgd2FzIGEgYGBsaXN0YGAgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50IChgYCFgYCkuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5XG5gYDs7YGAuICAoQSBzaW5nbGUgYGA7YGAgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3Jcbm11bHRpcGxlIGNvbW1hbmRzIGluIGEgbGluZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pICBOb1xuaW50ZWxsaWdlbmNlIGlzIGFwcGxpZWQgdG8gc2VwYXJhdGluZyB0aGUgY29tbWFuZHM7IHRoZSBpbnB1dCBpcyBzcGxpdFxuYXQgdGhlIGZpcnN0IGBgOztgYCBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWRcbnN0cmluZy5cblxuSWYgYSBmaWxlIGBgLnBkYnJjYGAgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IGBgLnBkYnJjYGAgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyBgYGNvbnRpbnVlYGAgb3IgYGBuZXh0YGAuICBQcmV2aW91c2x5LFxudGhlc2UgY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICBgYGhlbHAgcGRiYGBcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlIGBgcGRiYGBcbiAgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllcixcbiAgIGBgaGVscCBleGVjYGAgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSBgYCFgYCBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uIGBgc3lzLnBhdGhgYC4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBgYGJyZWFrYGAuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggYGBlbmRgYDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYG5leHRgYCBhbmRcbiAgIGBgc3RlcGBgIGlzIHRoYXQgYGBzdGVwYGAgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZVxuICAgYGBuZXh0YGAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5XG4gICBzdG9wcGluZyBhdCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBgYGZvcmBgIGxvb3Agb3Igb3V0XG4gICBvZiBhIGBgZmluYWxseWBgIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCBgYC5gYCBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS5cbiAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgYGAtPmBgLiAgSWZcbiAgIGFuIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IGBgPj5gYCwgaWYgaXRcbiAgIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSBgYD4+YGAgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yIGBgbGlzdGBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucCBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxuICAgTm90ZTogYGBwcmludCgpYGAgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tXG4gICAgIHRoaXMgZXhlY3V0ZXMgdGhlIFB5dGhvbiBgYHByaW50KClgYCBmdW5jdGlvbi5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSBgYHBgYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgYGBwcHJpbnRgYCBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlIGBgY29kZWBgIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5IGBgJTFgYCwgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieVxuICAgYWxsIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlIGBgLnBkYnJjYGAgZmlsZSk6XG5cbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IilcbiAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgbmFtZVxuXG4gICBEZWxldGUgdGhlIHNwZWNpZmllZCBhbGlhcy5cblxuISBzdGF0ZW1lbnRcblxuICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSAqc3RhdGVtZW50KiBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudFxuICAgc3RhY2sgZnJhbWUuIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvIHNldCBhXG4gICBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZSBhc3NpZ25tZW50IGNvbW1hbmQgd2l0aCBhXG4gICBgYGdsb2JhbGBgIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCBgYHNobGV4YGAgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICBgYHN5cy5hcmd2YGAuIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zXG4gICBhcmUgcHJlc2VydmVkLiBgYHJlc3RhcnRgYCBpcyBhbiBhbGlhcyBmb3IgYGBydW5gYC5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlIGlzXG4gICAgZGV0ZXJtaW5lZCBieSB0aGUgYGBfX25hbWVfX2BgIGluIHRoZSBmcmFtZSBnbG9iYWxzLlxuJywKICAnZGVsJzogJ1xuVGhlIGBgZGVsYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgZGVsX3N0bXQgOjo9ICJkZWwiIHRhcmdldF9saXN0XG5cbkRlbGV0aW9uIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgYXNzaWdubWVudCBpc1xuZGVmaW5lZC4gUmF0aGVyIHRoYW4gc3BlbGxpbmcgaXQgb3V0IGluIGZ1bGwgZGV0YWlscywgaGVyZSBhcmUgc29tZVxuaGludHMuXG5cbkRlbGV0aW9uIG9mIGEgdGFyZ2V0IGxpc3QgcmVjdXJzaXZlbHkgZGVsZXRlcyBlYWNoIHRhcmdldCwgZnJvbSBsZWZ0XG50byByaWdodC5cblxuRGVsZXRpb24gb2YgYSBuYW1lIHJlbW92ZXMgdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGZyb20gdGhlIGxvY2FsIG9yXG5nbG9iYWwgbmFtZXNwYWNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmFtZSBvY2N1cnMgaW4gYSBgYGdsb2JhbGBgXG5zdGF0ZW1lbnQgaW4gdGhlIHNhbWUgY29kZSBibG9jay4gIElmIHRoZSBuYW1lIGlzIHVuYm91bmQsIGFcbmBgTmFtZUVycm9yYGAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCiAgJ2RpY3QnOiAnXG5EaWN0aW9uYXJ5IGRpc3BsYXlzXG4qKioqKioqKioqKioqKioqKioqXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IGlzIGEgcG9zc2libHkgZW1wdHkgc2VyaWVzIG9mIGtleS9kYXR1bSBwYWlyc1xuZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzOlxuXG4gICBkaWN0X2Rpc3BsYXkgICAgICAgOjo9ICJ7IiBba2V5X2RhdHVtX2xpc3QgfCBkaWN0X2NvbXByZWhlbnNpb25dICJ9IlxuICAga2V5X2RhdHVtX2xpc3QgICAgIDo6PSBrZXlfZGF0dW0gKCIsIiBrZXlfZGF0dW0pKiBbIiwiXVxuICAga2V5X2RhdHVtICAgICAgICAgIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uXG4gICBkaWN0X2NvbXByZWhlbnNpb24gOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb24gY29tcF9mb3JcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LlxuXG5JZiBhIGNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiBrZXkvZGF0dW0gcGFpcnMgaXMgZ2l2ZW4sIHRoZXkgYXJlXG5ldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGUgZW50cmllcyBvZiB0aGUgZGljdGlvbmFyeTpcbmVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlIGRpY3Rpb25hcnkgdG8gc3RvcmUgdGhlXG5jb3JyZXNwb25kaW5nIGRhdHVtLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSB0aGUgc2FtZSBrZXlcbm11bHRpcGxlIHRpbWVzIGluIHRoZSBrZXkvZGF0dW0gbGlzdCwgYW5kIHRoZSBmaW5hbCBkaWN0aW9uYXJ5XCdzIHZhbHVlXG5mb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uXG5cbkEgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsXG5uZWVkcyB0d28gZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWxcbiJmb3IiIGFuZCAiaWYiIGNsYXVzZXMuIFdoZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nXG5rZXkgYW5kIHZhbHVlIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyXG50aGV5IGFyZSBwcm9kdWNlZC5cblxuUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW5cbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSouICAoVG8gc3VtbWFyaXplLCB0aGUga2V5IHR5cGVcbnNob3VsZCBiZSAqaGFzaGFibGUqLCB3aGljaCBleGNsdWRlcyBhbGwgbXV0YWJsZSBvYmplY3RzLikgIENsYXNoZXNcbmJldHdlZW4gZHVwbGljYXRlIGtleXMgYXJlIG5vdCBkZXRlY3RlZDsgdGhlIGxhc3QgZGF0dW0gKHRleHR1YWxseVxucmlnaHRtb3N0IGluIHRoZSBkaXNwbGF5KSBzdG9yZWQgZm9yIGEgZ2l2ZW4ga2V5IHZhbHVlIHByZXZhaWxzLlxuJywKICAnZHluYW1pYy1mZWF0dXJlcyc6ICdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuVGhlIGBgZXZhbCgpYGAgYW5kIGBgZXhlYygpYGAgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgYGBleGVjKClgYCBhbmQgYGBldmFsKClgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKQEAgLTM0LDggKzM0LDggQEAKICAnZXhwcmxpc3RzJzogJ1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiBgYCgpYGAuKVxuJywKICAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCBgYDA3N2UwMTBgYCBpcyBsZWdhbCwgYW5kIGRlbm90ZXMgdGhlIHNhbWVcbm51bWJlciBhcyBgYDc3ZTEwYGAuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSBgYC0xYGBcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yIGBgLWBgIGFuZCB0aGVcbmxpdGVyYWwgYGAxYGAuXG4nLAogICdmb3InOiAnXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIGBgU3RvcEl0ZXJhdGlvbmBgXG5leGNlcHRpb24pLCB0aGUgc3VpdGUgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuY29udGludWVzIHdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgYGBlbHNlYGAgY2xhdXNlIGlmIHRoZXJlIHdhc1xubm8gbmV4dCBpdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvclxuaSA6PSBhIHRvIGIgZG9gYDsgZS5nLiwgYGBsaXN0KHJhbmdlKDMpKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSxcbjJdYGAuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGxvb3BcbiAgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKLSAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2QgYW5kIHRoZSBgYEZvcm1hdHRlcmBgIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiBgYEZvcm1hdHRlcmBgLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbmBge31gYC4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuYGB7e2BgIGFuZCBgYH19YGAuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2hcbmlzIHByZWNlZGVkIGJ5IGEgY29sb24gYGBcJzpcJ2BgLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdFxuZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzIGBgXCcxMFwnYGAgb3JcbmBgXCc6LV1cJ2BgKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnlcbmFueSBudW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZVxuZm9ybSBgYFwnLm5hbWVcJ2BgIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLFxud2hpbGUgYW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXBcbnVzaW5nIGBgX19nZXRpdGVtX18oKWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gYGBcJ3t9IHt9XCdgYCBpcyBlcXVpdmFsZW50IHRvIGBgXCd7MH0gezF9XCdgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYCBhbmQgYGBcJyFhXCdgYFxud2hpY2ggY2FsbHMgYGBhc2NpaSgpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VlZGVkIGJ5IGEgKmZpbGwqXG5jaGFyYWN0ZXIgdGhhdCBjYW4gYmUgYW55IGNoYXJhY3RlciBhbmQgZGVmYXVsdHMgdG8gYSBzcGFjZSBpZlxub21pdHRlZC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGB7YGAgYW5kIGBgfWBgIGFzICpmaWxsKlxuY2hhciB3aGlsZSB1c2luZyB0aGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Q7IHRoaXMgbGltaXRhdGlvbiBob3dldmVyXG5kb2VzblwndCBhZmZlY3QgdGhlIGBgZm9ybWF0KClgYCBmdW5jdGlvbi5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnPFwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBvYmplY3RzKS4gICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc+XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBudW1iZXJzKS4gICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz1cJ2BgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgIHwgICAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgICB8XG4gICB8ICAgICAgICAgICB8IGluIHRoZSBmb3JtIFwnKzAwMDAwMDEyMFwnLiBUaGlzIGFsaWdubWVudCBvcHRpb24gaXMgb25seSAgICB8XG4gICB8ICAgICAgICAgICB8IHZhbGlkIGZvciBudW1lcmljIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ15cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCcrXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICB8ICAgICAgICAgICB8IHdlbGwgYXMgbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJy1cJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYGBcJyNcJ2BgIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlXG5jb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudFxudHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmRcbkRlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXRcbmlzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlIGBgXCcwYlwnYGAsIGBgXCcwb1wnYGAsIG9yXG5gYFwnMHhcJ2BgIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlXG5hbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zXG5vbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciBgYFwnZ1wnYGAgYW5kIGBgXCdHXCdgYFxuY29udmVyc2lvbnMsIHRyYWlsaW5nIHplcm9zIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHQuXG5cblRoZSBgYFwnLFwnYGAgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kc1xuc2VwYXJhdG9yLiBGb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlIGBgXCduXCdgYCBpbnRlZ2VyXG5wcmVzZW50YXRpb24gdHlwZSBpbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgYGBcJyxcJ2BgIG9wdGlvbiAoc2VlIGFsc28gKipQRVBcbjM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cblByZWNlZGluZyB0aGUgKndpZHRoKiBmaWVsZCBieSBhIHplcm8gKGBgXCcwXCdgYCkgY2hhcmFjdGVyIGVuYWJsZXNcbnNpZ24tYXdhcmUgemVyby1wYWRkaW5nIGZvciBudW1lcmljIHR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGFcbipmaWxsKiBjaGFyYWN0ZXIgb2YgYGBcJzBcJ2BgIHdpdGggYW4gKmFsaWdubWVudCogdHlwZSBvZiBgYFwnPVwnYGAuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCBgYFwnZlwnYGAgYW5kIGBgXCdGXCdgYCwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbFxucG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggYGBcJ2dcJ2BgIG9yIGBgXCdHXCdgYC5cbkZvciBub24tbnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluXG5vdGhlciB3b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC5cblRoZSAqcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnc1wnYGAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgfCAgICAgICAgICAgfCBtYXkgYmUgb21pdHRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdzXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnYlwnYGAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2NcJ2BgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdW5pY29kZSBjaGFyYWN0ZXIgYmVmb3JlIHByaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZFwnYGAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ29cJ2BgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCd4XCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ1hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZFwnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdkXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHRcbmBgXCduXCdgYCBhbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sIGBgZmxvYXQoKWBgIGlzIHVzZWQgdG8gY29udmVydCB0aGVcbmludGVnZXIgdG8gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnZVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBub3RhdGlvbiB1c2luZyB0aGUgbGV0dGVyIFwnZVwnIHRvIGluZGljYXRlIHRoZSBleHBvbmVudC4gICAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgYGA2YGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdFXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgYGBcJ2VcJ2BgIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdmXCdgYCAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gU2FtZSBhcyBgYFwnZlwnYGAsIGJ1dCBjb252ZXJ0cyBgYG5hbmBgIHRvICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYE5BTmBgIGFuZCBgYGluZmBgIHRvIGBgSU5GYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdnXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gYGBwID49IDFgYCwgdGhpcyAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvIGBgcGBgIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgIHdvdWxkIGhhdmUgZXhwb25lbnQgYGBleHBgYC4gIFRoZW4gaWYgYGAtNCA8PSBleHAgIHxcbiAgIHwgICAgICAgICAgIHwgPCBwYGAsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgXCdmXCdgYCBhbmQgcHJlY2lzaW9uIGBgcC0xLWV4cGBgLiBPdGhlcndpc2UsIHRoZSBudW1iZXIgICB8XG4gICB8ICAgICAgICAgICB8IGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAuIEluIGJvdGggY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgICAgfFxuICAgfCAgICAgICAgICAgfCByZW1vdmVkIGZyb20gdGhlIHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYWxzbyByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyAgICB8XG4gICB8ICAgICAgICAgICB8IGl0LiAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgfFxuICAgfCAgICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgYGAwYGAsIHxcbiAgIHwgICAgICAgICAgIHwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIGBgMGBgIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCAgfFxuICAgfCAgICAgICAgICAgfCB0byBhIHByZWNpc2lvbiBvZiBgYDFgYC4gIFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdHXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgYGBcJ2dcJ2BgIGV4Y2VwdCBzd2l0Y2hlcyB0byBgYFwnRVwnYGAgfFxuICAgfCAgICAgICAgICAgfCBpZiB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgaW5maW5pdHkgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZ1wnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCclXCdgYCAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkIChgYFwnZlwnYGApIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBTaW1pbGFyIHRvIGBgXCdnXCdgYCwgZXhjZXB0IHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgZGVjaW1hbCBwb2ludCBhbmQgYSBkZWZhdWx0IHByZWNpc2lvbiBvZiAxMi4gVGhpcyBpcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW50ZW5kZWQgdG8gbWF0Y2ggYGBzdHIoKWBgLCBleGNlcHQgeW91IGNhbiBhZGQgdGhlIG90aGVyICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGRcbmBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZFxuaW5zdGVhZCBvZiBgYCVgYC4gRm9yIGV4YW1wbGUsIGBgXCclMDMuMmZcJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvXG5gYFwnezowMy4yZn1cJ2BgLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMy4xKyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludDpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgYGAlc2BgIGFuZCBgYCVyYGA6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgYGAlK2ZgYCwgYGAlLWZgYCwgYW5kIGBgJSBmYGAgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudFxuYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTlcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfVwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODYuMzYlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7ZmlsbH17YWxpZ259MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6ICNkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0VcbiAgIC4uLiAgICAgZm9yIGJhc2UgaW4gXCdkWG9iXCc6XG4gICAuLi4gICAgICAgICBwcmludChcJ3swOnt3aWR0aH17YmFzZX19XCcuZm9ybWF0KG51bSwgYmFzZT1iYXNlLCB3aWR0aD13aWR0aCksIGVuZD1cJyBcJylcbiAgIC4uLiAgICAgcHJpbnQoKVxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKLSAnZnVuY3Rpb24nOiAnXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogYGA9YGBcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgImBgKmBgIiBvciAiYGAqaWRlbnRpZmllcmBgIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiYGA6IGV4cHJlc3Npb25gYCJcbmZvbGxvd2luZyB0aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb25cbmV2ZW4gdGhvc2Ugb2YgdGhlIGZvcm0gYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGAuICBGdW5jdGlvbnNcbm1heSBoYXZlICJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gImBgLT4gZXhwcmVzc2lvbmBgIiBhZnRlciB0aGVcbnBhcmFtZXRlciBsaXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvblxuYW5kIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC5cbkFubm90YXRpb25zIG1heSBiZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpblxudGhlIHNvdXJjZSBjb2RlLiAgVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGVcbnNlbWFudGljcyBvZiBhIGZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXNcbnZhbHVlcyBvZiBhIGRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGVcbmBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuICAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuJywKKyAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2QgYW5kIHRoZSBgYEZvcm1hdHRlcmBgIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiBgYEZvcm1hdHRlcmBgLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbmBge31gYC4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuYGB7e2BgIGFuZCBgYH19YGAuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2hcbmlzIHByZWNlZGVkIGJ5IGEgY29sb24gYGBcJzpcJ2BgLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdFxuZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzIGBgXCcxMFwnYGAgb3JcbmBgXCc6LV1cJ2BgKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnlcbmFueSBudW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZVxuZm9ybSBgYFwnLm5hbWVcJ2BgIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLFxud2hpbGUgYW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXBcbnVzaW5nIGBgX19nZXRpdGVtX18oKWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gYGBcJ3t9IHt9XCdgYCBpcyBlcXVpdmFsZW50IHRvIGBgXCd7MH0gezF9XCdgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYCBhbmQgYGBcJyFhXCdgYFxud2hpY2ggY2FsbHMgYGBhc2NpaSgpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBgYHtgYCBhbmQgYGB9YGAgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgYGBmb3JtYXQoKWBgIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlc1xuc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYVxuKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mIGBgXCc9XCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAorICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG5gYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAogICdnbG9iYWwnOiAnXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0IGBgZ2xvYmFsYGAsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZVxuY29kZSBibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgYGBnbG9iYWxgYCBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgYGBmb3JgYCBsb29wIGNvbnRyb2wgdGFyZ2V0LCBgYGNsYXNzYGAgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGBgaW1wb3J0YGAgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSBgYGdsb2JhbGBgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuXG5JdCBhcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYGBnbG9iYWxgYFxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5IGBgZ2xvYmFsYGAgc3RhdGVtZW50cyBpblxudGhlIGNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlXG5gYGV2YWwoKWBgIGFuZCBgYGNvbXBpbGUoKWBgIGZ1bmN0aW9ucy5cbicsCiAgJ2lkLWNsYXNzZXMnOiAnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZS4gIFdoZW5cbiAgIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3RcbiAgIGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzIGBgQWBgIHRocm91Z2ggYGBaYGAsIHRoZSB1bmRlcnNjb3JlIGBgX2BgIGFuZCwgZXhjZXB0IGZvciB0aGVcbmZpcnN0IGNoYXJhY3RlciwgdGhlIGRpZ2l0cyBgYDBgYCB0aHJvdWdoIGBgOWBgLlxuXG5QeXRob24gMy4wIGludHJvZHVjZXMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgQVNDSUlcbnJhbmdlIChzZWUgKipQRVAgMzEzMSoqKS4gIEZvciB0aGVzZSBjaGFyYWN0ZXJzLCB0aGUgY2xhc3NpZmljYXRpb25cbnVzZXMgdGhlIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGFzIGluY2x1ZGVkIGluIHRoZVxuYGB1bmljb2RlZGF0YWBgIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgYnVpbHRpbnNgYCBtb2R1bGUuICBXaGVuXG4gICBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90XG4gICBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiBgYF9fKl9fYGAgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXNcbiAgIG5vdCBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZVxuICAgd2l0aG91dCB3YXJuaW5nLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKQEAgLTU2LDIyICs1NiwyMiBAQAogICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6IGBgLTEqKjJgYCByZXN1bHRzIGluIGBgLTFgYC5cblxuVGhlIHBvd2VyIG9wZXJhdG9yIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGJ1aWx0LWluIGBgcG93KClgYFxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuYGAxMCoqMmBgIHJldHVybnMgYGAxMDBgYCwgYnV0IGBgMTAqKi0yYGAgcmV0dXJucyBgYDAuMDFgYC5cblxuUmFpc2luZyBgYDAuMGBgIHRvIGEgbmVnYXRpdmUgcG93ZXIgcmVzdWx0cyBpbiBhXG5gYFplcm9EaXZpc2lvbkVycm9yYGAuIFJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyXG5yZXN1bHRzIGluIGEgYGBjb21wbGV4YGAgbnVtYmVyLiAoSW4gZWFybGllciB2ZXJzaW9ucyBpdCByYWlzZWQgYVxuYGBWYWx1ZUVycm9yYGAuKVxuJywKICAncmFpc2UnOiAnXG5UaGUgYGByYWlzZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgYGByYWlzZWBgIHJlLXJhaXNlcyB0aGUgbGFzdCBleGNlcHRpb25cbnRoYXQgd2FzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCBzY29wZS4gIElmIG5vIGV4Y2VwdGlvbiBpcyBhY3RpdmUgaW5cbnRoZSBjdXJyZW50IHNjb3BlLCBhIGBgUnVudGltZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbmRpY2F0aW5nXG50aGF0IHRoaXMgaXMgYW4gZXJyb3IuXG5cbk90aGVyd2lzZSwgYGByYWlzZWBgIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG5gYEJhc2VFeGNlcHRpb25gYC4gSWYgaXQgaXMgYSBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aWxsIGJlXG5vYnRhaW5lZCB3aGVuIG5lZWRlZCBieSBpbnN0YW50aWF0aW5nIHRoZSBjbGFzcyB3aXRoIG5vIGFyZ3VtZW50cy5cblxuVGhlICp0eXBlKiBvZiB0aGUgZXhjZXB0aW9uIGlzIHRoZSBleGNlcHRpb24gaW5zdGFuY2VcJ3MgY2xhc3MsIHRoZVxuKnZhbHVlKiBpcyB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuXG5BIHRyYWNlYmFjayBvYmplY3QgaXMgbm9ybWFsbHkgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZXhjZXB0aW9uXG5pcyByYWlzZWQgYW5kIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUsIHdoaWNoXG5pcyB3cml0YWJsZS4gWW91IGNhbiBjcmVhdGUgYW4gZXhjZXB0aW9uIGFuZCBzZXQgeW91ciBvd24gdHJhY2ViYWNrIGluXG5vbmUgc3RlcCB1c2luZyB0aGUgYGB3aXRoX3RyYWNlYmFjaygpYGAgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2hcbnJldHVybnMgdGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0c1xuYXJndW1lbnQpLCBsaWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlIGBgZnJvbWBgIGNsYXVzZSBpcyB1c2VkIGZvciBleGNlcHRpb24gY2hhaW5pbmc6IGlmIGdpdmVuLCB0aGVcbnNlY29uZCAqZXhwcmVzc2lvbiogbXVzdCBiZSBhbm90aGVyIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZSwgd2hpY2hcbndpbGwgdGhlbiBiZSBhdHRhY2hlZCB0byB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBhcyB0aGUgYGBfX2NhdXNlX19gYFxuYXR0cmlidXRlICh3aGljaCBpcyB3cml0YWJsZSkuICBJZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBpcyBub3RcbmhhbmRsZWQsIGJvdGggZXhjZXB0aW9ucyB3aWxsIGJlIHByaW50ZWQ6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKSBmcm9tIGV4Y1xuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGVcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4gYXR0YWNoZWQgYXMgdGhlXG5uZXcgZXhjZXB0aW9uXCdzIGBgX19jb250ZXh0X19gYCBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6ICdcblRoZSBgYHJldHVybmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG5gYHJldHVybmBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb25cbmRlZmluaXRpb24sIG5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSBgYE5vbmVgYCBpc1xuc3Vic3RpdHV0ZWQuXG5cbmBgcmV0dXJuYGAgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0XG4ob3IgYGBOb25lYGApIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiBgYHJldHVybmBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5sZWF2aW5nIHRoZSBmdW5jdGlvbi5cblxuSW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSBgYHJldHVybmBgIHN0YXRlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVcbmdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlIGBgU3RvcEl0ZXJhdGlvbmBgIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuYGBTdG9wSXRlcmF0aW9uYGAgYW5kIGJlY29tZXMgdGhlIGBgU3RvcEl0ZXJhdGlvbi52YWx1ZWBgIGF0dHJpYnV0ZS5cbicsCi0gJ3NlcXVlbmNlLXR5cGVzJzogIlxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZydzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2Vzbid0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKKyAnc2VxdWVuY2UtdHlwZXMnOiAiXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob24ncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KClgYC4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKICAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5XG5gYHBvdygyLG4pYGAuICBBIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvblxud2l0aCBgYHBvdygyLG4pYGAuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgYGBzeXMubWF4c2l6ZWBgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXJcbiAgdGhhbiBgYHN5cy5tYXhzaXplYGAgYW4gYGBPdmVyZmxvd0Vycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGFcbnNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWVcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXNcbmNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbmNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lXG5zbGljZSBpdGVtIGlzIHRoZSBrZXkuICBUaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhblxuZXhwcmVzc2lvbiBpcyB0aGF0IGV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhXG5zbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZVxuYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGVcbmV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgYGBOb25lYGAgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAogICdzcGVjaWFsYXR0cnMnOiAnXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSBgYGRpcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3RcJ3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuY2xhc3MuX19xdWFsbmFtZV9fXG5cbiAgIFRoZSAqcXVhbGlmaWVkIG5hbWUqIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmQgaW5cbiAgICB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCBgYFsxLCAyXWBgIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICBgYFsxLjAsIDIuMF1gYCwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW5cJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIENhc2VkIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eSBiZWluZ1xuICAgIG9uZSBvZiAiTHUiIChMZXR0ZXIsIHVwcGVyY2FzZSksICJMbCIgKExldHRlciwgbG93ZXJjYXNlKSwgb3IgIkx0IlxuICAgIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbls1XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYSBzaW5nbGV0b25cbiAgICB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cbicsCi0gJ3NwZWNpYWxuYW1lcyc6ICdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCBgYF9fZ2V0aXRlbV9fKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIHRoaXNcbmNsYXNzLCB0aGVuIGBgeFtpXWBgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBgYHR5cGUoeCkuX19nZXRpdGVtX18oeCxcbmkpYGAuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZVxuYW4gZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuYGBBdHRyaWJ1dGVFcnJvcmBgIG9yIGBgVHlwZUVycm9yYGApLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbmBgTm9kZUxpc3RgYCBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuICAgICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLFxuICAgICBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiBgYGRpcigpYGAgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuIGBgZGlyKClgYCBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgYGBfX2RpY3RfX2BgLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgIGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBpbnRgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBUaGUgY2xhc3MgYm9keVxuaXMgZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvXG50aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKWBgLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuYGBtZXRhY2xhc3NgYCBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoIGBgTXlDbGFzc2BgIGFuZCBgYE15U3ViY2xhc3NgYCBhcmVcbmluc3RhbmNlcyBvZiBgYE1ldGFgYDpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuIGBgdHlwZSgpYGAgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgYGB0eXBlKClgYCwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiBgYHR5cGUoKWBgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuIGBgdHlwZShjbHMpYGApIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSBgYF9fcHJlcGFyZV9fYGBcbmF0dHJpYnV0ZSwgaXQgaXMgY2FsbGVkIGFzIGBgbmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsXG5iYXNlcywgKiprd2RzKWBgICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lXG5mcm9tIHRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gYGBfX3ByZXBhcmVfX2BgIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSBgYGRpY3QoKWBgIGluc3RhbmNlLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcbiAgICAgIEludHJvZHVjZWQgdGhlIGBgX19wcmVwYXJlX19gYCBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyBgYGV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKWBgLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvIGBgZXhlYygpYGAgaXNcbnRoYXQgbGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBgYG1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKWBgICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byBgYF9fcHJlcGFyZV9fYGApLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiBgYHN1cGVyKClgYC4gYGBfX2NsYXNzX19gYCBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgYGBfX2NsYXNzX19gYCBvciBgYHN1cGVyYGAuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50XG5mb3JtIG9mIGBgc3VwZXIoKWBgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZFxuYmFzZWQgb24gbGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0b1xubWFrZSB0aGUgY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIG1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuICAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCBgYF9fY2xhc3NfX2BgIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyBgYF9fcHJlcGFyZV9fKClgYCBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHNcbmFuZCBhdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkIGBgbWVtYmVyc2BgLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuYGBpc2luc3RhbmNlKClgYCBhbmQgYGBpc3N1YmNsYXNzKClgYCBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgYGBhYmMuQUJDTWV0YWBgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kc1xuaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcbiAgICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyBgYGlzaW5zdGFuY2UoKWBgIGFuZFxuICAgICAgYGBpc3N1YmNsYXNzKClgYCBiZWhhdmlvciB0aHJvdWdoIGBgX19pbnN0YW5jZWNoZWNrX18oKWBgIGFuZFxuICAgICAgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5XG4gICAgICBpbiB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlIGBgYWJjYGBcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgZ2V0KClgYCxcbmBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsIGBgY29weSgpYGAsXG5hbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2VzblwndCBkZWZpbmUgYSBgYF9fYm9vbF9fKClgYCBtZXRob2QgYW5kIHdob3NlIGBgX19sZW5fXygpYGBcbiAgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQVxuICBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aFxuICBgYE5vbmVgYC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBga2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4ICsgeWBgLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2FkZF9fKClgYCBtZXRob2QsXG4gICBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSBgYF9fZGl2bW9kX18oKWBgIG1ldGhvZCBzaG91bGQgYmVcbiAgIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nIGBgX19mbG9vcmRpdl9fKClgYCBhbmQgYGBfX21vZF9fKClgYDsgaXRcbiAgIHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byBgYF9fdHJ1ZWRpdl9fKClgYC4gIE5vdGUgdGhhdFxuICAgYGBfX3Bvd19fKClgYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIGBgcG93KClgYCBmdW5jdGlvblxuICAgaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiBgYE5vdEltcGxlbWVudGVkYGAuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5XG4gICBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nXG4gICBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvclxuICAgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCAtIHlgYCwgd2hlcmUgKnkqIGlzIGFuXG4gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19yc3ViX18oKWBgIG1ldGhvZCxcbiAgIGBgeS5fX3JzdWJfXyh4KWBgIGlzIGNhbGxlZCBpZiBgYHguX19zdWJfXyh5KWBgIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5IGBgcG93KClgYCB3aWxsIG5vdCB0cnkgY2FsbGluZyBgYF9fcnBvd19fKClgYFxuICAgKHRoZSBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZCBmb3IgdGhlXG4gICAgIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzIHRvXG4gICAgIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBmbG9hdCgpYGAgYW5kIGBgcm91bmQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluIGBgYmluKClgYCwgYGBoZXgoKWBgIGFuZCBgYG9jdCgpYGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyBgYF9faGFzaF9fKClgYCBhbmQgYGBfX3JlcHJfXygpYGAgdGhhdCBhcmUgaW1wbGVtZW50ZWRcbmJ5IGFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mXG50aGVzZSBtZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsXG53aGVuIGludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uXG5wcm92aWRlcyBzaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlXG5pbnRlcnByZXRlciwgYXQgdGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2ZcbnNwZWNpYWwgbWV0aG9kcyAodGhlIHNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdFxuaXRzZWxmIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSwgdW5kZXJcbiAgICBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2QgaWRlYVxuICAgIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmIGl0IGlzXG4gICAgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzIGBgX19hZGRfXygpYGApIGZhaWxzIHRoZSBvcGVyYXRpb24gaXNcbiAgICBub3Qgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCi0gJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgYGBzdHIuZm9ybWF0KClgYCxcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgYGBwcmludGZgYCBzdHlsZSBmb3JtYXR0aW5nIHRoYXQgaGFuZGxlcyBhIG5hcnJvd2VyIHJhbmdlIG9mIHR5cGVzXG5hbmQgaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIHVzZSBjb3JyZWN0bHksIGJ1dCBpcyBvZnRlbiBmYXN0ZXIgZm9yIHRoZVxuY2FzZXMgaXQgY2FuIGhhbmRsZSAoKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyopLlxuXG5UaGUgKlRleHQgUHJvY2Vzc2luZyBTZXJ2aWNlcyogc2VjdGlvbiBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBjb3ZlcnNcbmEgbnVtYmVyIG9mIG90aGVyIG1vZHVsZXMgdGhhdCBwcm92aWRlIHZhcmlvdXMgdGV4dCByZWxhdGVkIHV0aWxpdGllc1xuKGluY2x1ZGluZyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpbiB0aGUgYGByZWBgIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyIGBgXCdceGMzXHg5ZlwnYGAgaXMgZXF1aXZhbGVudCB0b1xuICAgYGAic3MiYGAuIFNpbmNlIGl0IGlzIGFscmVhZHkgbG93ZXJjYXNlLCBgYGxvd2VyKClgYCB3b3VsZCBkb1xuICAgbm90aGluZyB0byBgYFwnXHhjM1x4OWZcJ2BgOyBgYGNhc2Vmb2xkKClgYCBjb252ZXJ0cyBpdCB0byBgYCJzcyJgYC5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgYGBcJ3V0Zi04XCdgYC4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGBcJ3N0cmljdFwnYGAsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgYGBVbmljb2RlRXJyb3JgYC4gT3RoZXJcbiAgIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCxcbiAgIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAsIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyIG5hbWVcbiAgIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjIEJhc2VcbiAgIENsYXNzZXMqLiBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlIHNlY3Rpb24gKlN0YW5kYXJkXG4gICBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogY2hhcmFjdGVyc1xuICAgKGRlZmF1bHQgaXMgOCwgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLlxuICAgVG8gZXhwYW5kIHRoZSBzdHJpbmcsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlXG4gICBzdHJpbmcgaXMgZXhhbWluZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgdGFiIChgYFxcdGBgKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlXG4gICByZXN1bHQgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi5cbiAgIChUaGUgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIG5ld2xpbmUgKGBgXFxuYGApIG9yIHJldHVybiAoYGBcXHJgYCksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnRcbiAgIGNvbHVtbiBpcyByZXNldCB0byB6ZXJvLiAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBjb3BpZWQgdW5jaGFuZ2VkXG4gICBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGVcbiAgIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCB3aGVuIHByaW50ZWQuXG5cbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicygpXG4gICBcJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0XCdcbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicyg0KVxuICAgXCcwMSAgMDEyIDAxMjMgICAgMDEyMzRcJ1xuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgYGBmaW5kKClgYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93IHRoZVxuICAgICBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCwgdXNlXG4gICAgIHRoZSBgYGluYGAgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyBgYHt9YGAuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byBgYHN0ci5mb3JtYXQoKiptYXBwaW5nKWBgLCBleGNlcHQgdGhhdCBgYG1hcHBpbmdgYCBpc1xuICAgdXNlZCBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhIGBgZGljdGBgIC4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvclxuICAgZXhhbXBsZSBgYG1hcHBpbmdgYCBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlclxuICAgYGBjYGAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgYGBUcnVlYGA6XG4gICBgYGMuaXNhbHBoYSgpYGAsIGBgYy5pc2RlY2ltYWwoKWBgLCBgYGMuaXNkaWdpdCgpYGAsIG9yXG4gICBgYGMuaXNudW1lcmljKClgYC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlIGBga2V5d29yZC5pc2tleXdvcmQoKWBgIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2hcbiAgIGFzIGBgZGVmYGAgYW5kIGBgY2xhc3NgYC5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyBgYGJ5dGVzYGAgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgYGBzdHIudHJhbnNsYXRlKClgYC5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgLTFgYCwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMSwsMlwnLnNwbGl0KFwnLFwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnXCcsIFwnMlwnXWBgKS4gIFRoZSAqc2VwKlxuICAgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGApLiBTcGxpdHRpbmdcbiAgIGFuIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgW1wnXCddYGAuXG5cbiAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhIGBgTm9uZWBgIHNlcGFyYXRvciByZXR1cm5zXG4gICBgYFtdYGAuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnIDEgIDIgICAzICBcJy5zcGxpdCgpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgLFxuICAgYW5kIGBgXCcgIDEgIDIgICAzICBcJy5zcGxpdChOb25lLCAxKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMiAgIDMgIFwnXWBgLlxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiBUaGlzIG1ldGhvZCB1c2VzIHRoZSAqdW5pdmVyc2FsIG5ld2xpbmVzKiBhcHByb2FjaCB0b1xuICAgc3BsaXR0aW5nIGxpbmVzLiBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKClgYCByZXR1cm5zXG4gICBgYFtcJ2FiIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddYGAsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aFxuICAgYGBzcGxpdGxpbmVzKFRydWUpYGAgcmV0dXJucyBgYFtcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLFxuICAgXCdrbFxcclxcblwnXWBgLlxuXG4gICBVbmxpa2UgYGBzcGxpdCgpYGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlXG4gICByZXR1cm4gYGBGYWxzZWBgLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2tcbiAgIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGVcbiAgICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHNcbiAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICBgYHMuc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IHNgYC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBgYE5vbmVgYC4gIFVubWFwcGVkXG4gICBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSBgYHN0ci5tYWtldHJhbnMoKWBgIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgICBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSBgYGNvZGVjc2BgIG1vZHVsZSAoc2VlXG4gICAgIGBgZW5jb2RpbmdzLmNwMTI1MWBgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCBgYHN0ci51cHBlcigpLmlzdXBwZXIoKWBgIG1pZ2h0XG4gICBiZSBgYEZhbHNlYGAgaWYgYGBzYGAgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLlxuJywKKyAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkIGBgX19nZXRpdGVtX18oKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpc1xuY2xhc3MsIHRoZW4gYGB4W2ldYGAgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGBgdHlwZSh4KS5fX2dldGl0ZW1fXyh4LFxuaSlgYC4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlXG5hbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y19pbmZvKClbMl1gYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4gdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpc1xuICAgICBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KS4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgc3RyKG9iamVjdClgYCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGZvcm1hdCgpYGBcbiAgIGFuZCBgYHByaW50KClgYCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGVcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgKnN0cmluZyogb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGBvYmplY3QuX19yZXByX18oKWBgIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgYGBfX3N0cl9fKClgYCByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgYGBvYmplY3RgYFxuICAgY2FsbHMgYGBvYmplY3QuX19yZXByX18oKWBgLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYGJ5dGVzKClgYCB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgYGBieXRlc2BgIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBmb3JtYXQoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6IGBgaGFzaCgpYGAgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwncyBjdXN0b21cbiAgICAgYGBfX2hhc2hfXygpYGAgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgYGBQeV9zc2l6ZV90YGAuICBUaGlzIGlzXG4gICAgIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0IGJ1aWxkcy5cbiAgICAgSWYgYW4gb2JqZWN0XCdzICAgYGBfX2hhc2hfXygpYGAgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzIG9mXG4gICAgIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbCBzdXBwb3J0ZWRcbiAgICAgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIGBgcHl0aG9uIC1jICJpbXBvcnQgc3lzO1xuICAgICBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSJgYFxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiBgYF9fZXFfXygpYGAgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXNcbiAgIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlXG4gICB1c2FibGUgYXMgaXRlbXMgaW4gaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhbiBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGRcbiAgIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZVxuICAgY29sbGVjdGlvbnMgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlXG4gICBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2VxX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCBgYHggPT0geWBgIGltcGxpZXMgYm90aCB0aGF0IGBgeCBpcyB5YGAgYW5kIGBgaGFzaCh4KSA9PVxuICAgaGFzaCh5KWBgLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBhbmQgZG9lcyBub3QgZGVmaW5lXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGhhdmUgaXRzIGBgX19oYXNoX18oKWBgIGltcGxpY2l0bHkgc2V0IHRvXG4gICBgYE5vbmVgYC4gIFdoZW4gdGhlIGBgX19oYXNoX18oKWBgIG1ldGhvZCBvZiBhIGNsYXNzIGlzIGBgTm9uZWBgLFxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlblxuICAgYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmVcbiAgIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLFxuICAgY29sbGVjdGlvbnMuSGFzaGFibGVgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgYGBfX2VxX18oKWBgIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gYGBfX2hhc2hfXygpYGAgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSBgYFR5cGVFcnJvcmBgIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWRcbiAgIGFzIGhhc2hhYmxlIGJ5IGFuIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSBgYF9faGFzaF9fKClgYCB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQgZGF0ZXRpbWVcbiAgICAgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyBgYFBZVEhPTkhBU0hTRUVEYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mIGBgeC5uYW1lYGApXG5mb3IgY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciBgYHNlbGZgYCkuICBgYG5hbWVgYCBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZVxuICAgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgIGBgX19nZXRhdHRyX18oKWBgIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gYGBfX2dldGF0dHJfXygpYGAgYW5kIGBgX19zZXRhdHRyX18oKWBgLikgVGhpcyBpcyBkb25lIGJvdGhcbiAgIGZvciBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlIGBgX19nZXRhdHRyX18oKWBgXG4gICB3b3VsZCBoYXZlIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlXG4gICB0aGF0IGF0IGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5XG4gICBub3QgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXNcbiAgIGBgX19nZXRhdHRyX18oKWBgLCB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3NcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgZWl0aGVyIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAuIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZClcbiAgIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLiBJbiBvcmRlclxuICAgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb25cbiAgIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvXG4gICBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKWBgLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kc1xuICAgICBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheCBvclxuICAgICBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiBgYF9fc2V0YXR0cl9fKClgYCB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlgYC5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgYGBfX3NldGF0dHJfXygpYGAgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgYGBkZWwgb2JqLm5hbWVgYCBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gYGBkaXIoKWBgIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiBgYGRpcigpYGAgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnIGBgX19kaWN0X19gYC5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yIGBgTm9uZWBgIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCwgYW5kXG5gYF9fZGVsZXRlX18oKWBgLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LFxuaXQgaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCBgYGEueGBgIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCBgYGEuX19kaWN0X19bXCd4XCddYGAsIHRoZW5cbmBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ11gYCwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG5gYHR5cGUoYSlgYCBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsIGBgYS54YGAuXG5Ib3cgdGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gYGBhYGA6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgIGBgeC5fX2dldF9fKGEpYGAuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCBgYGEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiBgYHR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSlgYC5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCBgYEEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICBgYEEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSlgYC5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgYGBhYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzdXBlcmBgLCB0aGVuIHRoZSBiaW5kaW5nIGBgc3VwZXIoQixcbiAgIG9iaikubSgpYGAgc2VhcmNoZXMgYGBvYmouX19jbGFzc19fLl9fbXJvX19gYCBmb3IgdGhlIGJhc2UgY2xhc3NcbiAgIGBgQWBgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBgYEJgYCBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yXG4gICB3aXRoIHRoZSBjYWxsOiBgYEEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKWBgLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgIGFuZCBgYF9fZGVsZXRlX18oKWBgLlxuSWYgaXQgZG9lcyBub3QgZGVmaW5lIGBgX19nZXRfXygpYGAsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbFxucmV0dXJuIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlXG5vYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgYGBfX3NldF9fKClgYFxuYW5kL29yIGBgX19kZWxldGVfXygpYGAsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzXG5uZWl0aGVyLCBpdCBpcyBhIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9yc1xuZGVmaW5lIGJvdGggYGBfX2dldF9fKClgYCBhbmQgYGBfX3NldF9fKClgYCwgd2hpbGUgbm9uLWRhdGFcbmRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGUgYGBfX2dldF9fKClgYCBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGhcbmBgX19zZXRfXygpYGAgYW5kIGBgX19nZXRfXygpYGAgZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb25cbmluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJbiBjb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlXG5vdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyBgYHN0YXRpY21ldGhvZCgpYGAgYW5kIGBgY2xhc3NtZXRob2QoKWBgKVxuYXJlIGltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgYGBwcm9wZXJ0eSgpYGAgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyBgYEF0dHJpYnV0ZUVycm9yYGAuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzIGRlZmluaW5nXG4gICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW5zdGFuY2VzLiBJZiB3ZWFrXG4gIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGQgYGBcJ19fd2Vha3JlZl9fXCdgYCB0byB0aGVcbiAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZSBpbnN0YW5jZVxuICB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlIChleGNlcHQgYnlcbiAgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS4gVGhpc1xuICByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzIGBgaW50YGAsIGBgc3RyYGAgYW5kXG4gIGBgdHVwbGVgYC5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgYGB0eXBlKClgYC4gVGhlIGNsYXNzIGJvZHlcbmlzIGV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0b1xudGhlIHJlc3VsdCBvZiBgYHR5cGUobmFtZSwgYmFzZXMsIG5hbWVzcGFjZSlgYC5cblxuVGhlIGNsYXNzIGNyZWF0aW9uIHByb2Nlc3MgY2FuIGJlIGN1c3RvbWlzZWQgYnkgcGFzc2luZyB0aGVcbmBgbWV0YWNsYXNzYGAga2V5d29yZCBhcmd1bWVudCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBsaW5lLCBvciBieVxuaW5oZXJpdGluZyBmcm9tIGFuIGV4aXN0aW5nIGNsYXNzIHRoYXQgaW5jbHVkZWQgc3VjaCBhbiBhcmd1bWVudC4gSW5cbnRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYm90aCBgYE15Q2xhc3NgYCBhbmQgYGBNeVN1YmNsYXNzYGAgYXJlXG5pbnN0YW5jZXMgb2YgYGBNZXRhYGA6XG5cbiAgIGNsYXNzIE1ldGEodHlwZSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeUNsYXNzKG1ldGFjbGFzcz1NZXRhKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15U3ViY2xhc3MoTXlDbGFzcyk6XG4gICAgICAgcGFzc1xuXG5Bbnkgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uXG5hcmUgcGFzc2VkIHRocm91Z2ggdG8gYWxsIG1ldGFjbGFzcyBvcGVyYXRpb25zIGRlc2NyaWJlZCBiZWxvdy5cblxuV2hlbiBhIGNsYXNzIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2NjdXI6XG5cbiogdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkXG5cbiogdGhlIGNsYXNzIG5hbWVzcGFjZSBpcyBwcmVwYXJlZFxuXG4qIHRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkXG5cbiogdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkXG5cblxuRGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGZvciBhIGNsYXNzIGRlZmluaXRpb24gaXMgZGV0ZXJtaW5lZCBhc1xuZm9sbG93czpcblxuKiBpZiBubyBiYXNlcyBhbmQgbm8gZXhwbGljaXQgbWV0YWNsYXNzIGFyZSBnaXZlbiwgdGhlbiBgYHR5cGUoKWBgIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gIGBgdHlwZSgpYGAsIHRoZW4gaXQgaXMgdXNlZCBkaXJlY3RseSBhcyB0aGUgbWV0YWNsYXNzXG5cbiogaWYgYW4gaW5zdGFuY2Ugb2YgYGB0eXBlKClgYCBpcyBnaXZlbiBhcyB0aGUgZXhwbGljaXQgbWV0YWNsYXNzLCBvclxuICBiYXNlcyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyB1c2VkXG5cblRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHNlbGVjdGVkIGZyb20gdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG5tZXRhY2xhc3MgKGlmIGFueSkgYW5kIHRoZSBtZXRhY2xhc3NlcyAoaS5lLiBgYHR5cGUoY2xzKWBgKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggYGBUeXBlRXJyb3JgYC5cblxuXG5QcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGhhcyBiZWVuIGlkZW50aWZpZWQsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgcHJlcGFyZWQuIElmIHRoZSBtZXRhY2xhc3MgaGFzIGEgYGBfX3ByZXBhcmVfX2BgXG5hdHRyaWJ1dGUsIGl0IGlzIGNhbGxlZCBhcyBgYG5hbWVzcGFjZSA9IG1ldGFjbGFzcy5fX3ByZXBhcmVfXyhuYW1lLFxuYmFzZXMsICoqa3dkcylgYCAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZVxuZnJvbSB0aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vIGBgX19wcmVwYXJlX19gYCBhdHRyaWJ1dGUsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgaW5pdGlhbGlzZWQgYXMgYW4gZW1wdHkgYGBkaWN0KClgYCBpbnN0YW5jZS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzMDAwXG4gICAgICBJbnRyb2R1Y2VkIHRoZSBgYF9fcHJlcGFyZV9fYGAgbmFtZXNwYWNlIGhvb2tcblxuXG5FeGVjdXRpbmcgdGhlIGNsYXNzIGJvZHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZCAoYXBwcm94aW1hdGVseSkgYXMgYGBleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSlgYC4gVGhlIGtleSBkaWZmZXJlbmNlIGZyb20gYSBub3JtYWwgY2FsbCB0byBgYGV4ZWMoKWBgIGlzXG50aGF0IGxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYGBtZXRhY2xhc3MobmFtZSwgYmFzZXMsXG5uYW1lc3BhY2UsICoqa3dkcylgYCAodGhlIGFkZGl0aW9uYWwga2V5d29yZHMgcGFzc2VkIGhlcmUgYXJlIHRoZSBzYW1lXG5hcyB0aG9zZSBwYXNzZWQgdG8gYGBfX3ByZXBhcmVfX2BgKS5cblxuVGhpcyBjbGFzcyBvYmplY3QgaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgcmVmZXJlbmNlZCBieSB0aGUgemVyby1cbmFyZ3VtZW50IGZvcm0gb2YgYGBzdXBlcigpYGAuIGBgX19jbGFzc19fYGAgaXMgYW4gaW1wbGljaXQgY2xvc3VyZVxucmVmZXJlbmNlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlmIGFueSBtZXRob2RzIGluIGEgY2xhc3MgYm9keSByZWZlclxudG8gZWl0aGVyIGBgX19jbGFzc19fYGAgb3IgYGBzdXBlcmBgLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudFxuZm9ybSBvZiBgYHN1cGVyKClgYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIGNsYXNzIGJlaW5nIGRlZmluZWRcbmJhc2VkIG9uIGxleGljYWwgc2NvcGluZywgd2hpbGUgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG9cbm1ha2UgdGhlIGN1cnJlbnQgY2FsbCBpcyBpZGVudGlmaWVkIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBtZXRob2QuXG5cbkFmdGVyIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjbGFzc1xuZGVjb3JhdG9ycyBpbmNsdWRlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiAoaWYgYW55KSBhbmQgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgdGhlIGRlZmluZWQgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTM1KiogLSBOZXcgc3VwZXJcbiAgICAgIERlc2NyaWJlcyB0aGUgaW1wbGljaXQgYGBfX2NsYXNzX19gYCBjbG9zdXJlIHJlZmVyZW5jZVxuXG5cbk1ldGFjbGFzcyBleGFtcGxlXG4tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGUgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbmBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYCB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX3ByZXBhcmVfXygpYGAgbWV0aG9kIHdoaWNoIHJldHVybnMgYW5cbmVtcHR5IGBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYC4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzXG5hbmQgYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCBgYG1lbWJlcnNgYC5cblxuXG5DdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGVcbmBgaXNpbnN0YW5jZSgpYGAgYW5kIGBgaXNzdWJjbGFzcygpYGAgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzIGBgYWJjLkFCQ01ldGFgYCBpbXBsZW1lbnRzIHRoZXNlIG1ldGhvZHNcbmluIG9yZGVyIHRvIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFzXG4idmlydHVhbCBiYXNlIGNsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW5cbnR5cGVzKSwgaW5jbHVkaW5nIG90aGVyIEFCQ3MuXG5cbmNsYXNzLl9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqaW5zdGFuY2UqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIGluc3RhbmNlIG9mICpjbGFzcyouIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpYGAuXG5cbmNsYXNzLl9fc3ViY2xhc3NjaGVja19fKHNlbGYsIHN1YmNsYXNzKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqc3ViY2xhc3MqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIHN1YmNsYXNzIG9mICpjbGFzcyouICBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzc3ViY2xhc3Moc3ViY2xhc3MsIGNsYXNzKWBgLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG4gICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgYGBpc2luc3RhbmNlKClgYCBhbmRcbiAgICAgIGBgaXNzdWJjbGFzcygpYGAgYmVoYXZpb3IgdGhyb3VnaCBgYF9faW5zdGFuY2VjaGVja19fKClgYCBhbmRcbiAgICAgIGBgX19zdWJjbGFzc2NoZWNrX18oKWBgLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eVxuICAgICAgaW4gdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSBgYGFiY2BgXG4gICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCBgYHgoYXJnMSwgYXJnMiwgLi4uKWBgIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgYGB4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLilgYC5cblxuXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3JcbnNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBrZXlzKClgYDsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgYGA+PWBgIDAuICBBbHNvLCBhbiBvYmplY3RcbiAgIHRoYXQgZG9lc25cJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KClgYC4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgLiAgTm90ZSB0aGF0XG4gICBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHlcbiAgIGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLFxuICAgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGZsb2F0KClgYCBhbmQgYGByb3VuZCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gYGBiaW4oKWBgLCBgYGhleCgpYGAgYW5kIGBgb2N0KClgYCBmdW5jdGlvbnMpLiBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSBgYHN0ci5mb3JtYXQoKWBgLFxuKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBhbmQgKlN0cmluZyBGb3JtYXR0aW5nKikgYW5kIHRoZSBvdGhlciBiYXNlZCBvblxuQyBgYHByaW50ZmBgIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXNcbmFuZCBpcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlXG5jYXNlcyBpdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSBgYHJlYGAgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgYGBcJ1x4YzNceDlmXCdgYCBpcyBlcXVpdmFsZW50IHRvXG4gICBgYCJzcyJgYC4gU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsIGBgbG93ZXIoKWBgIHdvdWxkIGRvXG4gICBub3RoaW5nIHRvIGBgXCdceGMzXHg5ZlwnYGA7IGBgY2FzZWZvbGQoKWBgIGNvbnZlcnRzIGl0IHRvIGBgInNzImBgLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyBgYFwndXRmLThcJ2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyBgYFwnc3RyaWN0XCdgYCxcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBgYFVuaWNvZGVFcnJvcmBgLiBPdGhlclxuICAgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCwgYGBcJ3JlcGxhY2VcJ2BgLFxuICAgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZVxuICAgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZVxuICAgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmRcbiAgIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2ZcbiAgIHN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdFxuICAgdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKGBgXFx0YGApLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGVcbiAgIHJlc3VsdCB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLlxuICAgKFRoZSB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgbmV3bGluZSAoYGBcXG5gYCkgb3IgcmV0dXJuIChgYFxccmBgKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudFxuICAgY29sdW1uIGlzIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWRcbiAgIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSBgYGZpbmQoKWBgIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3cgdGhlXG4gICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2VcbiAgICAgdGhlIGBgaW5gYCBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvIGBgc3RyLmZvcm1hdCgqKm1hcHBpbmcpYGAsIGV4Y2VwdCB0aGF0IGBgbWFwcGluZ2BgIGlzXG4gICB1c2VkIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgYGBkaWN0YGAgLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yXG4gICBleGFtcGxlIGBgbWFwcGluZ2BgIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgYGBrZXl3b3JkLmlza2V5d29yZCgpYGAgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaFxuICAgYXMgYGBkZWZgYCBhbmQgYGBjbGFzc2BgLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiBgYHJlcHIoKWBgIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gYGBzeXMuc3Rkb3V0YGAgb3IgYGBzeXMuc3RkZXJyYGAuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBIGBgVHlwZUVycm9yYGAgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nIGBgYnl0ZXNgYCBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICBgYHN0ci50cmFuc2xhdGUoKWBgLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5yc3RyaXAoKVxuICAgXCcgICBzcGFjaW91c1wnXG4gICA+Pj4gXCdtaXNzaXNzaXBwaVwnLnJzdHJpcChcJ2lwelwnKVxuICAgXCdtaXNzaXNzXCdcblxuc3RyLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGAtMWBgLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoKWBgIHJldHVybnNcbiAgIGBgW1wnYWIgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ11gYCwgd2hpbGUgdGhlIHNhbWUgY2FsbCB3aXRoXG4gICBgYHNwbGl0bGluZXMoVHJ1ZSlgYCByZXR1cm5zIGBgW1wnYWIgY1xcblwnLCBcJ1xcblwnLCBcJ2RlIGZnXFxyXCcsXG4gICBcJ2tsXFxyXFxuXCddYGAuXG5cbiAgIFVubGlrZSBgYHNwbGl0KClgYCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpc1xuICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWxcbiAgIGxpbmUgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgIGBgcy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gc2BgLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0IGBgc3RyLnVwcGVyKCkuaXN1cHBlcigpYGAgbWlnaHRcbiAgIGJlIGBgRmFsc2VgYCBpZiBgYHNgYCBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG4nLAogICdzdHJpbmdzJzogJ1xuU3RyaW5nIGFuZCBCeXRlcyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIHN0cmluZ2xpdGVyYWwgICA6Oj0gW3N0cmluZ3ByZWZpeF0oc2hvcnRzdHJpbmcgfCBsb25nc3RyaW5nKVxuICAgc3RyaW5ncHJlZml4ICAgIDo6PSAiciIgfCAidSIgfCAiUiIgfCAiVSJcbiAgIHNob3J0c3RyaW5nICAgICA6Oj0gIlwnIiBzaG9ydHN0cmluZ2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydHN0cmluZ2l0ZW0qIFwnIlwnXG4gICBsb25nc3RyaW5nICAgICAgOjo9ICJcJ1wnXCciIGxvbmdzdHJpbmdpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ3N0cmluZ2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0c3RyaW5naXRlbSA6Oj0gc2hvcnRzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBsb25nc3RyaW5naXRlbSAgOjo9IGxvbmdzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBzaG9ydHN0cmluZ2NoYXIgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdzdHJpbmdjaGFyICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgc3RyaW5nZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgc291cmNlIGNoYXJhY3Rlcj5cblxuICAgYnl0ZXNsaXRlcmFsICAgOjo9IGJ5dGVzcHJlZml4KHNob3J0Ynl0ZXMgfCBsb25nYnl0ZXMpXG4gICBieXRlc3ByZWZpeCAgICA6Oj0gImIiIHwgIkIiIHwgImJyIiB8ICJCciIgfCAiYlIiIHwgIkJSIiB8ICJyYiIgfCAickIiIHwgIlJiIiB8ICJSQiJcbiAgIHNob3J0Ynl0ZXMgICAgIDo6PSAiXCciIHNob3J0Ynl0ZXNpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRieXRlc2l0ZW0qIFwnIlwnXG4gICBsb25nYnl0ZXMgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ2J5dGVzaXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdieXRlc2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0Ynl0ZXNpdGVtIDo6PSBzaG9ydGJ5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBsb25nYnl0ZXNpdGVtICA6Oj0gbG9uZ2J5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBzaG9ydGJ5dGVzY2hhciA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nYnl0ZXNjaGFyICA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBieXRlc2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IEFTQ0lJIGNoYXJhY3Rlcj5cblxuT25lIHN5bnRhY3RpYyByZXN0cmljdGlvbiBub3QgaW5kaWNhdGVkIGJ5IHRoZXNlIHByb2R1Y3Rpb25zIGlzIHRoYXRcbndoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWQgYmV0d2VlbiB0aGUgYGBzdHJpbmdwcmVmaXhgYCBvclxuYGBieXRlc3ByZWZpeGBgIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0XG5pcyBkZWZpbmVkIGJ5IHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmdcbmRlY2xhcmF0aW9uIGlzIGdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nXG5kZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoYGBcJ2BgKSBvciBkb3VibGUgcXVvdGVzIChgYCJgYCkuICBUaGV5IGNhbiBhbHNvIGJlXG5lbmNsb3NlZCBpbiBtYXRjaGluZyBncm91cHMgb2YgdGhyZWUgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHRoZXNlXG5hcmUgZ2VuZXJhbGx5IHJlZmVycmVkIHRvIGFzICp0cmlwbGUtcXVvdGVkIHN0cmluZ3MqKS4gIFRoZSBiYWNrc2xhc2hcbihgYFxcYGApIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggYGBcJ2JcJ2BgIG9yIGBgXCdCXCdgYDsgdGhleVxucHJvZHVjZSBhbiBpbnN0YW5jZSBvZiB0aGUgYGBieXRlc2BgIHR5cGUgaW5zdGVhZCBvZiB0aGUgYGBzdHJgYCB0eXBlLlxuVGhleSBtYXkgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnM7IGJ5dGVzIHdpdGggYSBudW1lcmljIHZhbHVlIG9mXG4xMjggb3IgZ3JlYXRlciBtdXN0IGJlIGV4cHJlc3NlZCB3aXRoIGVzY2FwZXMuXG5cbkFzIG9mIFB5dGhvbiAzLjMgaXQgaXMgcG9zc2libGUgYWdhaW4gdG8gcHJlZml4IHVuaWNvZGUgc3RyaW5ncyB3aXRoIGFcbmBgdWBgIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyIGBgXCdyXCdgYCBvciBgYFwnUlwnYGA7IHN1Y2ggc3RyaW5ncyBhcmUgY2FsbGVkICpyYXcgc3RyaW5ncyogYW5kXG50cmVhdCBiYWNrc2xhc2hlcyBhcyBsaXRlcmFsIGNoYXJhY3RlcnMuICBBcyBhIHJlc3VsdCwgaW4gc3RyaW5nXG5saXRlcmFscywgYGBcJ1xcVVwnYGAgYW5kIGBgXCdcXHVcJ2BgIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkXG5zcGVjaWFsbHkuIEdpdmVuIHRoYXQgUHl0aG9uIDIueFwncyByYXcgdW5pY29kZSBsaXRlcmFscyBiZWhhdmVcbmRpZmZlcmVudGx5IHRoYW4gUHl0aG9uIDMueFwncyB0aGUgYGBcJ3VyXCdgYCBzeW50YXggaXMgbm90IHN1cHBvcnRlZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgYGBcJ3JiXCdgYCBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhc1xuICAgYmVlbiBhZGRlZCBhcyBhIHN5bm9ueW0gb2YgYGBcJ2JyXCdgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbFxuICAgKGBgdVwndmFsdWVcJ2BgKSB3YXMgcmVpbnRyb2R1Y2VkIHRvIHNpbXBsaWZ5IHRoZSBtYWludGVuYW5jZSBvZiBkdWFsXG4gICBQeXRob24gMi54IGFuZCAzLnggY29kZWJhc2VzLiBTZWUgKipQRVAgNDE0KiogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbkluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBzdHJpbmcuICAoQSAicXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZVxuc3RyaW5nLCBpLmUuIGVpdGhlciBgYFwnYGAgb3IgYGAiYGAuKVxuXG5Vbmxlc3MgYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58IGBgXFxuZXdsaW5lYGAgICAgICB8IEJhY2tzbGFzaCBhbmQgbmV3bGluZSBpZ25vcmVkICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXFxgYCAgICAgICAgICAgIHwgQmFja3NsYXNoIChgYFxcYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXCdgYCAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlIChgYFwnYGApICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcImBgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKGBgImBgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGFgYCAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxiYGAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcZmBgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXG5gYCAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxyYGAgICAgICAgICAgICB8IEFTQ0lJIENhcnJpYWdlIFJldHVybiAoQ1IpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdGBgICAgICAgICAgICAgfCBBU0NJSSBIb3Jpem9udGFsIFRhYiAoVEFCKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHZgYCAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxvb29gYCAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxceGhoYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcTntuYW1lfWBgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHV4eHh4YGAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxVeHh4eHh4eHhgYCAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4eHh4eCogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGUgYnl0ZVxuICAgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXMgZGVub3RlIGFcbiAgIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW4gYmVcbiAgIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0IGhleFxuICAgZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCxcbmJ1dCB0aGUgYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsIGBgciJcXCIiYGAgaXMgYVxudmFsaWQgc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGFcbmRvdWJsZSBxdW90ZTsgYGByIlxcImBgIGlzIG5vdCBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIChldmVuIGEgcmF3XG5zdHJpbmcgY2Fubm90IGVuZCBpbiBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzKS4gIFNwZWNpZmljYWxseSwgKmFcbnJhdyBzdHJpbmcgY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqIChzaW5jZSB0aGUgYmFja3NsYXNoXG53b3VsZCBlc2NhcGUgdGhlIGZvbGxvd2luZyBxdW90ZSBjaGFyYWN0ZXIpLiAgTm90ZSBhbHNvIHRoYXQgYSBzaW5nbGVcbmJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIG5ld2xpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhvc2UgdHdvIGNoYXJhY3RlcnNcbmFzIHBhcnQgb2YgdGhlIHN0cmluZywgKm5vdCogYXMgYSBsaW5lIGNvbnRpbnVhdGlvbi5cbicsCiAgJ3N1YnNjcmlwdGlvbnMnOiAnXG5TdWJzY3JpcHRpb25zXG4qKioqKioqKioqKioqXG5cbkEgc3Vic2NyaXB0aW9uIHNlbGVjdHMgYW4gaXRlbSBvZiBhIHNlcXVlbmNlIChzdHJpbmcsIHR1cGxlIG9yIGxpc3QpXG5vciBtYXBwaW5nIChkaWN0aW9uYXJ5KSBvYmplY3Q6XG5cbiAgIHN1YnNjcmlwdGlvbiA6Oj0gcHJpbWFyeSAiWyIgZXhwcmVzc2lvbl9saXN0ICJdIlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHN1YnNjcmlwdGlvbixcbmUuZy4gYSBsaXN0IG9yIGRpY3Rpb25hcnkuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gc3VwcG9ydFxuc3Vic2NyaXB0aW9uIGJ5IGRlZmluaW5nIGEgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5Gb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydFxuc3Vic2NyaXB0aW9uOlxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcsIHRoZSBleHByZXNzaW9uIGxpc3QgbXVzdCBldmFsdWF0ZSB0byBhblxub2JqZWN0IHdob3NlIHZhbHVlIGlzIG9uZSBvZiB0aGUga2V5cyBvZiB0aGUgbWFwcGluZywgYW5kIHRoZVxuc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIHZhbHVlIGluIHRoZSBtYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdFxua2V5LiAgKFRoZSBleHByZXNzaW9uIGxpc3QgaXMgYSB0dXBsZSBleGNlcHQgaWYgaXQgaGFzIGV4YWN0bHkgb25lXG5pdGVtLilcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBzZXF1ZW5jZSwgdGhlIGV4cHJlc3Npb24gKGxpc3QpIG11c3QgZXZhbHVhdGUgdG9cbmFuIGludGVnZXIgb3IgYSBzbGljZSAoYXMgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuXG5cblRoZSBmb3JtYWwgc3ludGF4IG1ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBuZWdhdGl2ZSBpbmRpY2VzIGluXG5zZXF1ZW5jZXM7IGhvd2V2ZXIsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbGwgcHJvdmlkZSBhIGBgX19nZXRpdGVtX18oKWBgXG5tZXRob2QgdGhhdCBpbnRlcnByZXRzIG5lZ2F0aXZlIGluZGljZXMgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlXG5zZXF1ZW5jZSB0byB0aGUgaW5kZXggKHNvIHRoYXQgYGB4Wy0xXWBgIHNlbGVjdHMgdGhlIGxhc3QgaXRlbSBvZlxuYGB4YGApLiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciBsZXNzIHRoYW5cbnRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlLCBhbmQgdGhlIHN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZVxuaXRlbSB3aG9zZSBpbmRleCBpcyB0aGF0IHZhbHVlIChjb3VudGluZyBmcm9tIHplcm8pLiBTaW5jZSB0aGUgc3VwcG9ydFxuZm9yIG5lZ2F0aXZlIGluZGljZXMgYW5kIHNsaWNpbmcgb2NjdXJzIGluIHRoZSBvYmplY3RcJ3NcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCwgc3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgbmVlZFxudG8gZXhwbGljaXRseSBhZGQgdGhhdCBzdXBwb3J0LlxuXG5BIHN0cmluZ1wncyBpdGVtcyBhcmUgY2hhcmFjdGVycy4gIEEgY2hhcmFjdGVyIGlzIG5vdCBhIHNlcGFyYXRlIGRhdGFcbnR5cGUgYnV0IGEgc3RyaW5nIG9mIGV4YWN0bHkgb25lIGNoYXJhY3Rlci5cbicsCiAgJ3RydXRoJzogIlxuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuIGBgaWZgYCBvclxuYGB3aGlsZWBgIGNvbmRpdGlvbiBvciBhcyBvcGVyYW5kIG9mIHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgYmVsb3cuIFRoZVxuZm9sbG93aW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBmYWxzZTpcblxuKiBgYE5vbmVgYFxuXG4qIGBgRmFsc2VgYFxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsIGBgMGBgLCBgYDAuMGBgLCBgYDBqYGAuXG5cbiogYW55IGVtcHR5IHNlcXVlbmNlLCBmb3IgZXhhbXBsZSwgYGAnJ2BgLCBgYCgpYGAsIGBgW11gYC5cblxuKiBhbnkgZW1wdHkgbWFwcGluZywgZm9yIGV4YW1wbGUsIGBge31gYC5cblxuKiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMsIGlmIHRoZSBjbGFzcyBkZWZpbmVzIGFcbiAgYGBfX2Jvb2xfXygpYGAgb3IgYGBfX2xlbl9fKClgYCBtZXRob2QsIHdoZW4gdGhhdCBtZXRob2QgcmV0dXJucyB0aGVcbiAgaW50ZWdlciB6ZXJvIG9yIGBgYm9vbGBgIHZhbHVlIGBgRmFsc2VgYC4gWzFdXG5cbkFsbCBvdGhlciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1ZSAtLS0gc28gb2JqZWN0cyBvZiBtYW55IHR5cGVzIGFyZVxuYWx3YXlzIHRydWUuXG5cbk9wZXJhdGlvbnMgYW5kIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBCb29sZWFuIHJlc3VsdCBhbHdheXNcbnJldHVybiBgYDBgYCBvciBgYEZhbHNlYGAgZm9yIGZhbHNlIGFuZCBgYDFgYCBvciBgYFRydWVgYCBmb3IgdHJ1ZSxcbnVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLiAoSW1wb3J0YW50IGV4Y2VwdGlvbjogdGhlIEJvb2xlYW4gb3BlcmF0aW9uc1xuYGBvcmBgIGFuZCBgYGFuZGBgIGFsd2F5cyByZXR1cm4gb25lIG9mIHRoZWlyIG9wZXJhbmRzLilcbiIsCiAgJ3RyeSc6ICdcblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGBgYXNgYCBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSxcbmlmIHByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgYGBhcyB0YXJnZXRgYCwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgYGBzeXNgYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG5gYHN5cy5leGNfaW5mbygpYGAuIGBgc3lzLmV4Y19pbmZvKClgYCByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mXG50aGUgZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3RcbihzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluXG50aGUgcHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgYGBzeXMuZXhjX2luZm8oKWBgIHZhbHVlc1xuYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZlxudGhlIGBgZmluYWxseWBgIGNsYXVzZS4gIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ld1xuZXhjZXB0aW9uLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvclxuYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQ6XG5cbiAgIGRlZiBmKCk6XG4gICAgICAgdHJ5OlxuICAgICAgICAgICAxLzBcbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICByZXR1cm4gNDJcblxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAotICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSBgYE5vbmVgYC5cbiAgIEl0IGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucyxcbiAgIGUuZy4sIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYE5vdEltcGxlbWVudGVkYGAuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5XG4gICByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgdGhlXG4gICBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUgcmVmbGVjdGVkXG4gICBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzXG4gICB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsaXRlcmFsIGBgLi4uYGAgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lIGBgRWxsaXBzaXNgYC4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5gYG51bWJlcnMuTnVtYmVyYGBcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICBgYG51bWJlcnMuSW50ZWdyYWxgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoYGBpbnRgYClcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zIChgYGJvb2xgYClcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZSBhcmUgdGhlIG9ubHlcbiAgICAgICAgIEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlIGludGVnZXJcbiAgICAgICAgIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kIDEsXG4gICAgICAgICByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzIGBgIkZhbHNlImBgIG9yXG4gICAgICAgICBgYCJUcnVlImBgIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzLlxuXG4gICBgYG51bWJlcnMuUmVhbGBgIChgYGZsb2F0YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgYGBudW1iZXJzLkNvbXBsZXhgYCAoYGBjb21wbGV4YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciBgYHpgYCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyBgYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZlxuICAgaXRlbXMgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGVcbiAgIGluZGV4IHNldCBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2ZcbiAgIHNlcXVlbmNlICphKiBpcyBzZWxlY3RlZCBieSBgYGFbaV1gYC5cblxuICAgU2VxdWVuY2VzIGFsc28gc3VwcG9ydCBzbGljaW5nOiBgYGFbaTpqXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqIGBgPD1gYCAqayogYGA8YGAgKmoqLiAgV2hlbiB1c2VkIGFzIGFuXG4gICBleHByZXNzaW9uLCBhIHNsaWNlIGlzIGEgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIFRoaXMgaW1wbGllc1xuICAgdGhhdCB0aGUgaW5kZXggc2V0IGlzIHJlbnVtYmVyZWQgc28gdGhhdCBpdCBzdGFydHMgYXQgMC5cblxuICAgU29tZSBzZXF1ZW5jZXMgYWxzbyBzdXBwb3J0ICJleHRlbmRlZCBzbGljaW5nIiB3aXRoIGEgdGhpcmQgInN0ZXAiXG4gICBwYXJhbWV0ZXI6IGBgYVtpOmo6a11gYCBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCpcbiAgIHdoZXJlIGBgeCA9IGkgKyBuKmtgYCwgKm4qIGBgPj1gYCBgYDBgYCBhbmQgKmkqIGBgPD1gYCAqeCogYGA8YGBcbiAgICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSBgYFUrMDAwMCAtIFUrMTBGRkZGYGBcbiAgICAgICAgIGNhbiBiZSByZXByZXNlbnRlZCBpbiBhIHN0cmluZy4gIFB5dGhvbiBkb2VzblwndCBoYXZlIGFcbiAgICAgICAgIGBgY2hyYGAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzXG4gICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggYGAxYGAuICBUaGUgYnVpbHQtXG4gICAgICAgICBpbiBmdW5jdGlvbiBgYG9yZCgpYGAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludFxuICAgICAgICAgKGFzIGFuIGludGVnZXIpOyBgYGNocigpYGAgY29udmVydHMgYW4gaW50ZWdlciBpbiByYW5nZSBgYDAgLVxuICAgICAgICAgMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiBgYHN0ci5lbmNvZGUoKWBgIGNhblxuICAgICAgICAgYmUgdXNlZCB0byBjb252ZXJ0IGEgYGBzdHJgYCB0byBgYGJ5dGVzYGAgdXNpbmcgdGhlIGdpdmVuXG4gICAgICAgICBlbmNvZGluZywgYW5kIGBgYnl0ZXMuZGVjb2RlKClgYCBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZVxuICAgICAgICAgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlIGBgYlwnYWJjXCdgYCkgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgYGBieXRlcygpYGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgYGBkZWNvZGUoKWBgXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kIGBgZGVsYGAgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gYGBieXRlYXJyYXkoKWBgIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgYGBhcnJheWBgIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZlxuICAgICAgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgIGBgMS4wYGApLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzZXQoKWBgIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzIGBgYWRkKClgYC5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluIGBgZnJvemVuc2V0KClgYCBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzXG4gICAgICBpbW11dGFibGUgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2ZcbiAgICAgIGFub3RoZXIgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gYGBhW2tdYGAgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5XG4gICBgYGtgYCBmcm9tIHRoZSBtYXBwaW5nIGBgYWBgOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZFxuICAgYXMgdGhlIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciBgYGRlbGBgIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pblxuICAgZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgICAgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBgYHsuLi59YGBcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgYGBkYm0ubmRibWBgIGFuZCBgYGRibS5nbnVgYCBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlXG4gICAgICBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCBgYF9fZG9jX19gYCAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb24gICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19uYW1lX19gYCAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19xdWFsbmFtZV9fYGAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ldyBpbiB2ZXJzaW9uIDMuMy4gICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbW9kdWxlX19gYCAgICAgICAgICAgIHwgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluLCBvciAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RlZmF1bHRzX19gYCAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCB2YWx1ZXMgZm9yIHRob3NlICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnRzIHRoYXQgaGF2ZSBkZWZhdWx0cywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgTm9uZWBgIGlmIG5vIGFyZ3VtZW50cyAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2NvZGVfX2BgICAgICAgICAgICAgICB8IFRoZSBjb2RlIG9iamVjdCByZXByZXNlbnRpbmcgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keS4gICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2dsb2JhbHNfX2BgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvblwncyAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGdsb2JhbCB2YXJpYWJsZXMgLS0tIHRoZSBnbG9iYWwgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBpbiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLiB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kaWN0X19gYCAgICAgICAgICAgICAgfCBUaGUgbmFtZXNwYWNlIHN1cHBvcnRpbmcgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jbG9zdXJlX19gYCAgICAgICAgICAgfCBgYE5vbmVgYCBvciBhIHR1cGxlIG9mIGNlbGxzICAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uXCdzIGZyZWUgdmFyaWFibGVzLiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Fubm90YXRpb25zX19gYCAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiBwYXJhbWV0ZXJzLiAgVGhlIGtleXMgb2YgdGhlIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGljdCBhcmUgdGhlIHBhcmFtZXRlciBuYW1lcywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgXCdyZXR1cm5cJ2BgIGZvciB0aGUgcmV0dXJuICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFubm90YXRpb24sIGlmIHByb3ZpZGVkLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fa3dkZWZhdWx0c19fYGAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBfX3NlbGZfX2BgIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCBgYF9fZnVuY19fYGAgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdDsgYGBfX2RvY19fYGAgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyBgYF9fZnVuY19fLl9fZG9jX19gYCk7XG4gICAgICBgYF9fbmFtZV9fYGAgaXMgdGhlIG1ldGhvZCBuYW1lIChzYW1lIGFzIGBgX19mdW5jX18uX19uYW1lX19gYCk7XG4gICAgICBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWRcbiAgICAgIGluLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgICAgTWV0aG9kcyBhbHNvIHN1cHBvcnQgYWNjZXNzaW5nIChidXQgbm90IHNldHRpbmcpIHRoZSBhcmJpdHJhcnlcbiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBVc2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdHMgbWF5IGJlIGNyZWF0ZWQgd2hlbiBnZXR0aW5nIGFuXG4gICAgICBhdHRyaWJ1dGUgb2YgYSBjbGFzcyAocGVyaGFwcyB2aWEgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyksIGlmXG4gICAgICB0aGF0IGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3Qgb3IgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIHVzZXItXG4gICAgICBkZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MgdmlhIG9uZSBvZiBpdHMgaW5zdGFuY2VzLFxuICAgICAgaXRzIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZFxuICAgICAgb2JqZWN0IGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBvZiB0aGUgbmV3IGluc3RhbmNlIGlzIG5vdCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9iamVjdFxuICAgICAgYnV0IGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgYGBfX3NlbGZfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgZnVuY3Rpb24gb2JqZWN0IHVuZGVybHlpbmcgdGhlIGNsYXNzIG1ldGhvZC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNhbGxlZCwgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uIChgYF9fZnVuY19fYGApIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKGBgX19zZWxmX19gYCkgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsXG4gICAgICB3aGVuIGBgQ2BgIGlzIGEgY2xhc3Mgd2hpY2ggY29udGFpbnMgYSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uXG4gICAgICBgYGYoKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBDYGAsIGNhbGxpbmcgYGB4LmYoMSlgYFxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgQy5mKHgsIDEpYGAuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluIGBgX19zZWxmX19gYCB3aWxsXG4gICAgICBhY3R1YWxseSBiZSB0aGUgY2xhc3MgaXRzZWxmLCBzbyB0aGF0IGNhbGxpbmcgZWl0aGVyIGBgeC5mKDEpYGBcbiAgICAgIG9yIGBgQy5mKDEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZihDLDEpYGAgd2hlcmUgYGBmYGAgaXNcbiAgICAgIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyBgYGl0ZXJhdG9yLl9fbmV4dF9fKClgYCBtZXRob2Qgd2lsbCBjYXVzZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdW50aWwgaXQgcHJvdmlkZXMgYSB2YWx1ZSB1c2luZyB0aGVcbiAgICAgIGBgeWllbGRgYCBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhIGBgcmV0dXJuYGBcbiAgICAgIHN0YXRlbWVudCBvciBmYWxscyBvZmYgdGhlIGVuZCwgYSBgYFN0b3BJdGVyYXRpb25gYCBleGNlcHRpb24gaXNcbiAgICAgIHJhaXNlZCBhbmQgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNldCBvZlxuICAgICAgdmFsdWVzIHRvIGJlIHJldHVybmVkLlxuXG4gICBCdWlsdC1pbiBmdW5jdGlvbnNcbiAgICAgIEEgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYSBDIGZ1bmN0aW9uLlxuICAgICAgRXhhbXBsZXMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBgYGxlbigpYGAgYW5kIGBgbWF0aC5zaW4oKWBgXG4gICAgICAoYGBtYXRoYGAgaXMgYSBzdGFuZGFyZCBidWlsdC1pbiBtb2R1bGUpLiBUaGUgbnVtYmVyIGFuZCB0eXBlIG9mXG4gICAgICB0aGUgYXJndW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBDIGZ1bmN0aW9uLiBTcGVjaWFsIHJlYWQtXG4gICAgICBvbmx5IGF0dHJpYnV0ZXM6IGBgX19kb2NfX2BgIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlOyBgYF9fbmFtZV9fYGAgaXMgdGhlXG4gICAgICBmdW5jdGlvblwncyBuYW1lOyBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIGBgTm9uZWBgIChidXQgc2VlIHRoZVxuICAgICAgbmV4dCBpdGVtKTsgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICBgYGFsaXN0LmFwcGVuZCgpYGAsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIHRoZVxuICAgICAgb2JqZWN0IGRlbm90ZWQgYnkgKmFsaXN0Ki5cblxuICAgQ2xhc3Nlc1xuICAgICAgQ2xhc3NlcyBhcmUgY2FsbGFibGUuICBUaGVzZSBvYmplY3RzIG5vcm1hbGx5IGFjdCBhcyBmYWN0b3JpZXNcbiAgICAgIGZvciBuZXcgaW5zdGFuY2VzIG9mIHRoZW1zZWx2ZXMsIGJ1dCB2YXJpYXRpb25zIGFyZSBwb3NzaWJsZSBmb3JcbiAgICAgIGNsYXNzIHR5cGVzIHRoYXQgb3ZlcnJpZGUgYGBfX25ld19fKClgYC4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYCBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICBgYF9faW5pdF9fKClgYCB0byBpbml0aWFsaXplIHRoZSBuZXcgaW5zdGFuY2UuXG5cbiAgIENsYXNzIEluc3RhbmNlc1xuICAgICAgSW5zdGFuY2VzIG9mIGFyYml0cmFyeSBjbGFzc2VzIGNhbiBiZSBtYWRlIGNhbGxhYmxlIGJ5IGRlZmluaW5nXG4gICAgICBhIGBgX19jYWxsX18oKWBgIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlIGBgaW1wb3J0YGBcbiAgIHN0YXRlbWVudCAoc2VlIGBgaW1wb3J0YGApLCBvciBieSBjYWxsaW5nIGZ1bmN0aW9ucyBzdWNoIGFzXG4gICBgYGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKClgYCBhbmQgYnVpbHQtaW4gYGBfX2ltcG9ydF9fKClgYC4gIEFcbiAgIG1vZHVsZSBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3RcbiAgICh0aGlzIGlzIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlIGBgX19nbG9iYWxzX19gYCBhdHRyaWJ1dGVcbiAgIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUpLiAgQXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlXG4gICB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYG0ueGBgIGlzXG4gICBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdYGAuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluXG4gICB0aGUgY29kZSBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndFxuICAgbmVlZGVkIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCBgYG0ueCA9IDFgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdID0gMWBgLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6IGBgX19kaWN0X19gYCBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIG1vZHVsZVwnc1xuICAgbmFtZTsgYGBfX2RvY19fYGAgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgYGBOb25lYGBcbiAgIGlmIHVuYXZhaWxhYmxlOyBgYF9fZmlsZV9fYGAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGZyb20gd2hpY2hcbiAgIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCwgaWYgaXQgd2FzIGxvYWRlZCBmcm9tIGEgZmlsZS4gVGhlXG4gICBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsXG4gICBzdWNoIGFzIEMgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjtcbiAgIGZvciBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdFxuICAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBDLnhgYCBpcyB0cmFuc2xhdGVkIHRvXG4gICBgYEMuX19kaWN0X19bIngiXWBgIChhbHRob3VnaCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2hcbiAgIGFsbG93IGZvciBvdGhlciBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlXG4gICBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlXG4gICBjbGFzc2VzLiBUaGlzIHNlYXJjaCBvZiB0aGUgYmFzZSBjbGFzc2VzIHVzZXMgdGhlIEMzIG1ldGhvZFxuICAgcmVzb2x1dGlvbiBvcmRlciB3aGljaCBiZWhhdmVzIGNvcnJlY3RseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZlxuICAgXCdkaWFtb25kXCcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgIGluaGVyaXRhbmNlIHBhdGhzIGxlYWRpbmcgYmFjayB0byBhIGNvbW1vbiBhbmNlc3Rvci4gQWRkaXRpb25hbFxuICAgZGV0YWlscyBvbiB0aGUgQzMgTVJPIHVzZWQgYnkgUHl0aG9uIGNhbiBiZSBmb3VuZCBpbiB0aGVcbiAgIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjMgcmVsZWFzZSBhdFxuICAgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzIGBgQ2BgLCBzYXkpIHdvdWxkIHlpZWxkXG4gICBhIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZXMgaXMgYGBDYGAuICBXaGVuIGl0IHdvdWxkIHlpZWxkXG4gICBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZFxuICAgYnkgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgYGBfX2RpY3RfX2BgLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgY2xhc3MgbmFtZTsgYGBfX21vZHVsZV9fYGBcbiAgIGlzIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IGBgX19kaWN0X19gYCBpc1xuICAgdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyBgYF9fYmFzZXNfX2BgIGlzIGFcbiAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLFxuICAgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDtcbiAgIGBgX19kb2NfX2BgIGlzIHRoZSBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZlxuICAgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wnc1xuICAgYGBfX2RpY3RfX2BgLiAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwnc1xuICAgY2xhc3MgaGFzIGEgYGBfX2dldGF0dHJfXygpYGAgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZVxuICAgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgIGBgX19zZXRhdHRyX18oKWBgIG9yIGBgX19kZWxhdHRyX18oKWBgIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19kaWN0X19gYCBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICBgYF9fY2xhc3NfX2BgIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlIGBgb3BlbigpYGAgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyBgYG9zLnBvcGVuKClgYCwgYGBvcy5mZG9wZW4oKWBgLCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgXG4gICBtZXRob2Qgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICBgYGlvLlRleHRJT0Jhc2VgYCBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgY29fbmFtZWBgIGdpdmVzIHRoZSBmdW5jdGlvblxuICAgICAgbmFtZTsgYGBjb19hcmdjb3VudGBgIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHNcbiAgICAgIChpbmNsdWRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyBgYGNvX25sb2NhbHNgYCBpcyB0aGVcbiAgICAgIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzKTsgYGBjb192YXJuYW1lc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2ZcbiAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTtcbiAgICAgIGBgY29fY2VsbHZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zO1xuICAgICAgYGBjb19mcmVldmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZVxuICAgICAgdmFyaWFibGVzOyBgYGNvX2NvZGVgYCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mXG4gICAgICBieXRlY29kZSBpbnN0cnVjdGlvbnM7IGBgY29fY29uc3RzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuICAgICAgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fbmFtZXNgYCBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19maWxlbmFtZWBgIGlzXG4gICAgICB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICBgYGNvX2ZpcnN0bGluZW5vYGAgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgIGBgY29fbG5vdGFiYGAgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7IGBgY29fc3RhY2tzaXplYGAgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgYGBjb19mbGFnc2BgIGlzIGFuIGludGVnZXIgZW5jb2RpbmdcbiAgICAgIGEgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciBgYGNvX2ZsYWdzYGA6IGJpdFxuICAgICAgYGAweDA0YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCphcmd1bWVudHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXRcbiAgICAgIGBgMHgwOGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqKmtleXdvcmRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzOyBiaXQgYGAweDIwYGAgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0XG4gICAgICBkaXZpc2lvbmBgKSBhbHNvIHVzZSBiaXRzIGluIGBgY29fZmxhZ3NgYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFcbiAgICAgIGNvZGUgb2JqZWN0IHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdFxuICAgICAgYGAweDIwMDBgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZVxuICAgICAgZGl2aXNpb24gZW5hYmxlZDsgYml0cyBgYDB4MTBgYCBhbmQgYGAweDEwMDBgYCB3ZXJlIHVzZWQgaW5cbiAgICAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluIGBgY29fZmxhZ3NgYCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICBgYGNvX2NvbnN0c2BgIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICBgYE5vbmVgYCBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgZl9iYWNrYGAgaXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICBzdGFjayBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgYGBOb25lYGAgaWYgdGhpcyBpcyB0aGVcbiAgICAgIGJvdHRvbSBzdGFjayBmcmFtZTsgYGBmX2NvZGVgYCBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWRcbiAgICAgIGluIHRoaXMgZnJhbWU7IGBgZl9sb2NhbHNgYCBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXBcbiAgICAgIGxvY2FsIHZhcmlhYmxlczsgYGBmX2dsb2JhbHNgYCBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgYGBmX2J1aWx0aW5zYGAgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7XG4gICAgICBgYGZfbGFzdGlgYCBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvXG4gICAgICB0aGUgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogYGBmX3RyYWNlYGAsIGlmIG5vdCBgYE5vbmVgYCwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgYGBmX2xpbmVub2BgIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyXG4gICAgICBvZiB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uXG4gICAgICBqdW1wcyB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEFcbiAgICAgIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpXG4gICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5IGBgc3lzLmV4Y19pbmZvKClgYC4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWluc1xuICAgICAgbm8gc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseVxuICAgICAgZm9ybWF0dGVkKSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXNcbiAgICAgIGludGVyYWN0aXZlLCBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzXG4gICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHRiX25leHRgYCBpcyB0aGUgbmV4dCBsZXZlbCBpblxuICAgICAgdGhlIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCksIG9yIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7IGBgdGJfZnJhbWVgYFxuICAgICAgcG9pbnRzIHRvIHRoZSBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7XG4gICAgICBgYHRiX2xpbmVub2BgIGdpdmVzIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZDsgYGB0Yl9sYXN0aWBgIGluZGljYXRlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZVxuICAgICAgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyXG4gICAgICBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWUgb2JqZWN0IGlmIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkIGluIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBubyBtYXRjaGluZyBleGNlcHQgY2xhdXNlXG4gICAgICBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgYGBfX2dldGl0ZW1fXygpYGBcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluIGBgc2xpY2UoKWBgXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBzdGFydGBgIGlzIHRoZSBsb3dlciBib3VuZDtcbiAgICAgIGBgc3RvcGBgIGlzIHRoZSB1cHBlciBib3VuZDsgYGBzdGVwYGAgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXNcbiAgICAgIGBgTm9uZWBgIGlmIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzdGF0aWNtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluIGBgY2xhc3NtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuJywKKyAndHlwZXMnOiAnXG5UaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHlcbioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5CZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gUHl0aG9uLiAgRXh0ZW5zaW9uXG5tb2R1bGVzICh3cml0dGVuIGluIEMsIEphdmEsIG9yIG90aGVyIGxhbmd1YWdlcywgZGVwZW5kaW5nIG9uIHRoZVxuaW1wbGVtZW50YXRpb24pIGNhbiBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcy4gIEZ1dHVyZSB2ZXJzaW9ucyBvZlxuUHl0aG9uIG1heSBhZGQgdHlwZXMgdG8gdGhlIHR5cGUgaGllcmFyY2h5IChlLmcuLCByYXRpb25hbCBudW1iZXJzLFxuZWZmaWNpZW50bHkgc3RvcmVkIGFycmF5cyBvZiBpbnRlZ2VycywgZXRjLiksIGFsdGhvdWdoIHN1Y2ggYWRkaXRpb25zXG53aWxsIG9mdGVuIGJlIHByb3ZpZGVkIHZpYSB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbnN0ZWFkLlxuXG5Tb21lIG9mIHRoZSB0eXBlIGRlc2NyaXB0aW9ucyBiZWxvdyBjb250YWluIGEgcGFyYWdyYXBoIGxpc3Rpbmdcblwnc3BlY2lhbCBhdHRyaWJ1dGVzLlwnICBUaGVzZSBhcmUgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZVxuaW1wbGVtZW50YXRpb24gYW5kIGFyZSBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgVGhlaXIgZGVmaW5pdGlvblxubWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5Ob25lXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgYGBOb25lYGAuXG4gICBJdCBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsXG4gICBlLmcuLCBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgYGBOb3RJbXBsZW1lbnRlZGBgLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCBgYC4uLmBgIG9yIHRoZVxuICAgYnVpbHQtaW4gbmFtZSBgYEVsbGlwc2lzYGAuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuYGBudW1iZXJzLk51bWJlcmBgXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgYGBudW1iZXJzLkludGVncmFsYGBcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBlbGVtZW50cyBmcm9tIHRoZSBtYXRoZW1hdGljYWwgc2V0IG9mIGludGVnZXJzXG4gICAgICAocG9zaXRpdmUgYW5kIG5lZ2F0aXZlKS5cblxuICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBpbnRlZ2VyczpcblxuICAgICAgSW50ZWdlcnMgKGBgaW50YGApXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoYGBib29sYGApXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgRmFsc2UgYW5kIFRydWUgYXJlIHRoZSBvbmx5XG4gICAgICAgICBCb29sZWFuIG9iamVjdHMuIFRoZSBCb29sZWFuIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIHRoZSBpbnRlZ2VyXG4gICAgICAgICB0eXBlLCBhbmQgQm9vbGVhbiB2YWx1ZXMgYmVoYXZlIGxpa2UgdGhlIHZhbHVlcyAwIGFuZCAxLFxuICAgICAgICAgcmVzcGVjdGl2ZWx5LCBpbiBhbG1vc3QgYWxsIGNvbnRleHRzLCB0aGUgZXhjZXB0aW9uIGJlaW5nXG4gICAgICAgICB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5ncyBgYCJGYWxzZSJgYCBvclxuICAgICAgICAgYGAiVHJ1ZSJgYCBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgYGBudW1iZXJzLlJlYWxgYCAoYGBmbG9hdGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgIGBgbnVtYmVycy5Db21wbGV4YGAgKGBgY29tcGxleGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbFxuICAgICAgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhlIHNhbWUgY2F2ZWF0cyBhcHBseVxuICAgICAgYXMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYVxuICAgICAgY29tcGxleCBudW1iZXIgYGB6YGAgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC5cblxuU2VxdWVuY2VzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIG9yZGVyZWQgc2V0cyBpbmRleGVkIGJ5IG5vbi1uZWdhdGl2ZVxuICAgbnVtYmVycy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2ZcbiAgIGl0ZW1zIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlXG4gICBpbmRleCBzZXQgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mXG4gICBzZXF1ZW5jZSAqYSogaXMgc2VsZWN0ZWQgYnkgYGBhW2ldYGAuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogYGBhW2k6al1gYCBzZWxlY3RzIGFsbCBpdGVtcyB3aXRoXG4gICBpbmRleCAqayogc3VjaCB0aGF0ICppKiBgYDw9YGAgKmsqIGBgPGBgICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiBgYGFbaTpqOmtdYGAgc2VsZWN0cyBhbGwgaXRlbXMgb2YgKmEqIHdpdGggaW5kZXggKngqXG4gICB3aGVyZSBgYHggPSBpICsgbiprYGAsICpuKiBgYD49YGAgYGAwYGAgYW5kICppKiBgYDw9YGAgKngqIGBgPGBgXG4gICAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgYGBVKzAwMDAgLSBVKzEwRkZGRmBgXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhXG4gICAgICAgICBgYGNocmBgIHR5cGUsIGFuZCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpc1xuICAgICAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb2JqZWN0IHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LVxuICAgICAgICAgaW4gZnVuY3Rpb24gYGBvcmQoKWBgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnRcbiAgICAgICAgIChhcyBhbiBpbnRlZ2VyKTsgYGBjaHIoKWBgIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgYGAwIC1cbiAgICAgICAgIDEwRkZGRmBgIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3Rlci4gYGBzdHIuZW5jb2RlKClgYCBjYW5cbiAgICAgICAgIGJlIHVzZWQgdG8gY29udmVydCBhIGBgc3RyYGAgdG8gYGBieXRlc2BgIHVzaW5nIHRoZSBnaXZlblxuICAgICAgICAgZW5jb2RpbmcsIGFuZCBgYGJ5dGVzLmRlY29kZSgpYGAgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGVcbiAgICAgICAgIG9wcG9zaXRlLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSBgYGJcJ2FiY1wnYGApIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgIGBgYnl0ZXMoKWBgIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlIGBgZGVjb2RlKClgYFxuICAgICAgICAgbWV0aG9kLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCBgYGRlbGBgIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluIGBgYnl0ZWFycmF5KClgYCBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlIGBgYXJyYXlgYCBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2ZcbiAgICAgIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCBhcyBkb2VzIHRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYFxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICBgYDEuMGBgKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc2V0KClgYCBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyBgYGFkZCgpYGAuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiBgYGZyb3plbnNldCgpYGAgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpc1xuICAgICAgaW1tdXRhYmxlIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mXG4gICAgICBhbm90aGVyIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uIGBgYVtrXWBgIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieVxuICAgYGBrYGAgZnJvbSB0aGUgbWFwcGluZyBgYGFgYDsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmRcbiAgIGFzIHRoZSB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgYGBkZWxgYCBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW5cbiAgIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgICAgIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgYGB7Li4ufWBgXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzIGBgZGJtLm5kYm1gYCBhbmQgYGBkYm0uZ251YGAgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZVxuICAgICAgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgYGBfX2RvY19fYGAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbmFtZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIG5hbWUgICAgICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fcXVhbG5hbWVfX2BgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzICpxdWFsaWZpZWQgbmFtZSogfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gdmVyc2lvbiAzLjMuICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX21vZHVsZV9fYGAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiwgb3IgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kZWZhdWx0c19fYGAgICAgICAgICAgfCBBIHR1cGxlIGNvbnRhaW5pbmcgZGVmYXVsdCAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnQgdmFsdWVzIGZvciB0aG9zZSAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50cyB0aGF0IGhhdmUgZGVmYXVsdHMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYE5vbmVgYCBpZiBubyBhcmd1bWVudHMgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jb2RlX19gYCAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIGJvZHkuICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19nbG9iYWxzX19gYCAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25cJ3MgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBnbG9iYWwgdmFyaWFibGVzIC0tLSB0aGUgZ2xvYmFsIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgaW4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGljdF9fYGAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyYml0cmFyeSBmdW5jdGlvbiBhdHRyaWJ1dGVzLiAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY2xvc3VyZV9fYGAgICAgICAgICAgIHwgYGBOb25lYGAgb3IgYSB0dXBsZSBvZiBjZWxscyAgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgY29udGFpbiBiaW5kaW5ncyBmb3IgdGhlICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvblwncyBmcmVlIHZhcmlhYmxlcy4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19hbm5vdGF0aW9uc19fYGAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgcGFyYW1ldGVycy4gIFRoZSBrZXlzIG9mIHRoZSB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpY3QgYXJlIHRoZSBwYXJhbWV0ZXIgbmFtZXMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYFwncmV0dXJuXCdgYCBmb3IgdGhlIHJldHVybiAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbm5vdGF0aW9uLCBpZiBwcm92aWRlZC4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2t3ZGVmYXVsdHNfX2BgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcblxuICAgICAgTW9zdCBvZiB0aGUgYXR0cmlidXRlcyBsYWJlbGxlZCAiV3JpdGFibGUiIGNoZWNrIHRoZSB0eXBlIG9mIHRoZVxuICAgICAgYXNzaWduZWQgdmFsdWUuXG5cbiAgICAgIEZ1bmN0aW9uIG9iamVjdHMgYWxzbyBzdXBwb3J0IGdldHRpbmcgYW5kIHNldHRpbmcgYXJiaXRyYXJ5XG4gICAgICBhdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGF0dGFjaCBtZXRhZGF0YVxuICAgICAgdG8gZnVuY3Rpb25zLiAgUmVndWxhciBhdHRyaWJ1dGUgZG90LW5vdGF0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZFxuICAgICAgc2V0IHN1Y2ggYXR0cmlidXRlcy4gKk5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5XG4gICAgICBzdXBwb3J0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuIEZ1bmN0aW9uXG4gICAgICBhdHRyaWJ1dGVzIG9uIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZVxuICAgICAgZnV0dXJlLipcblxuICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uXCdzIGRlZmluaXRpb24gY2FuIGJlXG4gICAgICByZXRyaWV2ZWQgZnJvbSBpdHMgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWxcbiAgICAgIHR5cGVzIGJlbG93LlxuXG4gICBJbnN0YW5jZSBtZXRob2RzXG4gICAgICBBbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGNvbWJpbmVzIGEgY2xhc3MsIGEgY2xhc3MgaW5zdGFuY2UgYW5kXG4gICAgICBhbnkgY2FsbGFibGUgb2JqZWN0IChub3JtYWxseSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbikuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgX19zZWxmX19gYCBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgYGBfX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7IGBgX19kb2NfX2BgIGlzIHRoZVxuICAgICAgbWV0aG9kXCdzIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX2RvY19fYGApO1xuICAgICAgYGBfX25hbWVfX2BgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyBgYF9fZnVuY19fLl9fbmFtZV9fYGApO1xuICAgICAgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkXG4gICAgICBpbiwgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyBgYF9fc2VsZl9fYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZSwgYW5kIHRoZSBtZXRob2RcbiAgICAgIG9iamVjdCBpcyBzYWlkIHRvIGJlIGJvdW5kLiAgVGhlIG5ldyBtZXRob2RcJ3MgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZS5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgaXRzIGBgX19zZWxmX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoYGBfX2Z1bmNfX2BgKSBpcyBjYWxsZWQsIGluc2VydGluZyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIChgYF9fc2VsZl9fYGApIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLFxuICAgICAgd2hlbiBgYENgYCBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvblxuICAgICAgYGBmKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIGBgQ2BgLCBjYWxsaW5nIGBgeC5mKDEpYGBcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYEMuZih4LCAxKWBgLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiBgYF9fc2VsZl9fYGAgd2lsbFxuICAgICAgYWN0dWFsbHkgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciBgYHguZigxKWBgXG4gICAgICBvciBgYEMuZigxKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGYoQywxKWBgIHdoZXJlIGBgZmBgIGlzXG4gICAgICB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi5cblxuICAgICAgTm90ZSB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGZ1bmN0aW9uIG9iamVjdCB0byBpbnN0YW5jZVxuICAgICAgbWV0aG9kIG9iamVjdCBoYXBwZW5zIGVhY2ggdGltZSB0aGUgYXR0cmlidXRlIGlzIHJldHJpZXZlZCBmcm9tXG4gICAgICB0aGUgaW5zdGFuY2UuICBJbiBzb21lIGNhc2VzLCBhIGZydWl0ZnVsIG9wdGltaXphdGlvbiBpcyB0b1xuICAgICAgYXNzaWduIHRoZSBhdHRyaWJ1dGUgdG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgY2FsbCB0aGF0IGxvY2FsXG4gICAgICB2YXJpYWJsZS4gQWxzbyBub3RpY2UgdGhhdCB0aGlzIHRyYW5zZm9ybWF0aW9uIG9ubHkgaGFwcGVucyBmb3JcbiAgICAgIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM7IG90aGVyIGNhbGxhYmxlIG9iamVjdHMgKGFuZCBhbGwgbm9uLVxuICAgICAgY2FsbGFibGUgb2JqZWN0cykgYXJlIHJldHJpZXZlZCB3aXRob3V0IHRyYW5zZm9ybWF0aW9uLiAgSXQgaXNcbiAgICAgIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHdoaWNoIGFyZVxuICAgICAgYXR0cmlidXRlcyBvZiBhIGNsYXNzIGluc3RhbmNlIGFyZSBub3QgY29udmVydGVkIHRvIGJvdW5kXG4gICAgICBtZXRob2RzOyB0aGlzICpvbmx5KiBoYXBwZW5zIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZVxuICAgICAgb2YgdGhlIGNsYXNzLlxuXG4gICBHZW5lcmF0b3IgZnVuY3Rpb25zXG4gICAgICBBIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCB1c2VzIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgYGBpdGVyYXRvci5fX25leHRfXygpYGAgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlXG4gICAgICBgYHlpZWxkYGAgc3RhdGVtZW50LiAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgYHJldHVybmBgXG4gICAgICBzdGF0ZW1lbnQgb3IgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uIGlzXG4gICAgICByYWlzZWQgYW5kIHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2ZcbiAgICAgIHZhbHVlcyB0byBiZSByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYGBsZW4oKWBgIGFuZCBgYG1hdGguc2luKClgYFxuICAgICAgKGBgbWF0aGBgIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiBgYF9fZG9jX19gYCBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgZnVuY3Rpb25cJ3MgbmFtZTsgYGBfX3NlbGZfX2BgIGlzIHNldCB0byBgYE5vbmVgYCAoYnV0IHNlZSB0aGVcbiAgICAgIG5leHQgaXRlbSk7IGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlXG4gICAgICBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgYGBfX3NlbGZfX2BgIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlIGBgX19uZXdfXygpYGAuICBUaGUgYXJndW1lbnRzIG9mIHRoZVxuICAgICAgY2FsbCBhcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgYGBfX2luaXRfXygpYGAgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlaXIgY2xhc3MuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGEgYmFzaWMgb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZSwgYW5kIGFyZVxuICAgY3JlYXRlZCBieSB0aGUgKmltcG9ydCBzeXN0ZW0qIGFzIGludm9rZWQgZWl0aGVyIGJ5IHRoZSBgYGltcG9ydGBgXG4gICBzdGF0ZW1lbnQgKHNlZSBgYGltcG9ydGBgKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgYGBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpYGAgYW5kIGJ1aWx0LWluIGBgX19pbXBvcnRfXygpYGAuICBBXG4gICBtb2R1bGUgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0XG4gICAodGhpcyBpcyB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZ2xvYmFsc19fYGAgYXR0cmlidXRlXG4gICBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBtLnhgYCBpc1xuICAgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXWBgLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpblxuICAgdGhlIGNvZGUgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3RcbiAgIG5lZWRlZCBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgYGBtLnggPSAxYGAgaXMgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXSA9IDFgYC5cblxuICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlOiBgYF9fZGljdF9fYGAgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBtb2R1bGVcJ3NcbiAgIG5hbWU7IGBgX19kb2NfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgXG4gICBpZiB1bmF2YWlsYWJsZTsgYGBfX2ZpbGVfX2BgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoXG4gICB0aGUgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZVxuICAgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBtYXkgYmUgbWlzc2luZyBmb3IgY2VydGFpbiB0eXBlcyBvZiBtb2R1bGVzLFxuICAgc3VjaCBhcyBDIG1vZHVsZXMgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgaW50ZXJwcmV0ZXI7XG4gICBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBzaGFyZWQgbGlicmFyeSwgaXRcbiAgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS5cblxuQ3VzdG9tIGNsYXNzZXNcbiAgIEN1c3RvbSBjbGFzcyB0eXBlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgY2xhc3MgZGVmaW5pdGlvbnMgKHNlZVxuICAgc2VjdGlvbiAqQ2xhc3MgZGVmaW5pdGlvbnMqKS4gIEEgY2xhc3MgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkXG4gICBieSBhIGRpY3Rpb25hcnkgb2JqZWN0LiBDbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgdHJhbnNsYXRlZFxuICAgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sIGBgQy54YGAgaXMgdHJhbnNsYXRlZCB0b1xuICAgYGBDLl9fZGljdF9fWyJ4Il1gYCAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoXG4gICBhbGxvdyBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZVxuICAgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyBgYENgYCwgc2F5KSB3b3VsZCB5aWVsZFxuICAgYSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGVzIGlzIGBgQ2BgLiAgV2hlbiBpdCB3b3VsZCB5aWVsZFxuICAgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWRcbiAgIGJ5IHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzIGBgX19kaWN0X19gYC5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIGNsYXNzIG5hbWU7IGBgX19tb2R1bGVfX2BgXG4gICBpcyB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyBgYF9fZGljdF9fYGAgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgYGBfX2Jhc2VzX19gYCBpcyBhXG4gICB0dXBsZSAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcyxcbiAgIGluIHRoZSBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7XG4gICBgYF9fZG9jX19gYCBpcyB0aGUgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWZcbiAgIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3NcbiAgIGBgX19kaWN0X19gYC4gIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3NcbiAgIGNsYXNzIGhhcyBhIGBgX19nZXRhdHRyX18oKWBgIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG8gc2F0aXNmeSB0aGVcbiAgIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICBgYF9fc2V0YXR0cl9fKClgYCBvciBgYF9fZGVsYXR0cl9fKClgYCBtZXRob2QsIHRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fZGljdF9fYGAgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgYGBfX2NsYXNzX19gYCBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkkvTyBvYmplY3RzIChhbHNvIGtub3duIGFzIGZpbGUgb2JqZWN0cylcbiAgIEEgKmZpbGUgb2JqZWN0KiByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4gIFZhcmlvdXMgc2hvcnRjdXRzIGFyZVxuICAgYXZhaWxhYmxlIHRvIGNyZWF0ZSBmaWxlIG9iamVjdHM6IHRoZSBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gYGBvcy5wb3BlbigpYGAsIGBgb3MuZmRvcGVuKClgYCwgYW5kIHRoZSBgYG1ha2VmaWxlKClgYFxuICAgbWV0aG9kIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyBgYHN5cy5zdGRpbmBgLCBgYHN5cy5zdGRvdXRgYCBhbmQgYGBzeXMuc3RkZXJyYGAgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgYGBpby5UZXh0SU9CYXNlYGAgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGNvX25hbWVgYCBnaXZlcyB0aGUgZnVuY3Rpb25cbiAgICAgIG5hbWU7IGBgY29fYXJnY291bnRgYCBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4gICAgICAoaW5jbHVkaW5nIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgYGBjb19ubG9jYWxzYGAgaXMgdGhlXG4gICAgICBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyk7IGBgY29fdmFybmFtZXNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mXG4gICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7XG4gICAgICBgYGNvX2NlbGx2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbFxuICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucztcbiAgICAgIGBgY29fZnJlZXZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWVcbiAgICAgIHZhcmlhYmxlczsgYGBjb19jb2RlYGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZlxuICAgICAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyBgYGNvX2NvbnN0c2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbiAgICAgIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX25hbWVzYGAgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fZmlsZW5hbWVgYCBpc1xuICAgICAgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgYGBjb19maXJzdGxpbmVub2BgIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICBgYGNvX2xub3RhYmBgIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyBgYGNvX3N0YWNrc2l6ZWBgIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7IGBgY29fZmxhZ3NgYCBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nXG4gICAgICBhIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgYGBjb19mbGFnc2BgOiBiaXRcbiAgICAgIGBgMHgwNGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqYXJndW1lbnRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0XG4gICAgICBgYDB4MDhgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKiprZXl3b3Jkc2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50czsgYml0IGBgMHgyMGBgIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydFxuICAgICAgZGl2aXNpb25gYCkgYWxzbyB1c2UgYml0cyBpbiBgYGNvX2ZsYWdzYGAgdG8gaW5kaWNhdGUgd2hldGhlciBhXG4gICAgICBjb2RlIG9iamVjdCB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXRcbiAgICAgIGBgMHgyMDAwYGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmVcbiAgICAgIGRpdmlzaW9uIGVuYWJsZWQ7IGJpdHMgYGAweDEwYGAgYW5kIGBgMHgxMDAwYGAgd2VyZSB1c2VkIGluXG4gICAgICBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiBgYGNvX2ZsYWdzYGAgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgYGBjb19jb25zdHNgYCBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgYGBOb25lYGAgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGZfYmFja2BgIGlzIHRvIHRoZSBwcmV2aW91c1xuICAgICAgc3RhY2sgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yIGBgTm9uZWBgIGlmIHRoaXMgaXMgdGhlXG4gICAgICBib3R0b20gc3RhY2sgZnJhbWU7IGBgZl9jb2RlYGAgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkXG4gICAgICBpbiB0aGlzIGZyYW1lOyBgYGZfbG9jYWxzYGAgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwXG4gICAgICBsb2NhbCB2YXJpYWJsZXM7IGBgZl9nbG9iYWxzYGAgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgIGBgZl9idWlsdGluc2BgIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzO1xuICAgICAgYGBmX2xhc3RpYGAgZ2l2ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50b1xuICAgICAgdGhlIGJ5dGVjb2RlIHN0cmluZyBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6IGBgZl90cmFjZWBgLCBpZiBub3QgYGBOb25lYGAsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7IGBgZl9saW5lbm9gYCBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgb2YgdGhlIGZyYW1lIC0tLSB3cml0aW5nIHRvIHRoaXMgZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvblxuICAgICAganVtcHMgdG8gdGhlIGdpdmVuIGxpbmUgKG9ubHkgZm9yIHRoZSBib3R0b20tbW9zdCBmcmFtZSkuICBBXG4gICAgICBkZWJ1Z2dlciBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KVxuICAgICAgYnkgd3JpdGluZyB0byBmX2xpbmVuby5cblxuICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIGZyYW1lLmNsZWFyKClcblxuICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5XG4gICAgICAgICB0aGUgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZVxuICAgICAgICAgZ2VuZXJhdG9yIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlc1xuICAgICAgICAgaW52b2x2aW5nIGZyYW1lIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW5cbiAgICAgICAgIGV4Y2VwdGlvbiBhbmQgc3RvcmluZyBpdHMgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLlxuXG4gICAgICAgICBgYFJ1bnRpbWVFcnJvcmBgIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5XG4gICAgICAgICBleGVjdXRpbmcuXG5cbiAgICAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuICAgVHJhY2ViYWNrIG9iamVjdHNcbiAgICAgIFRyYWNlYmFjayBvYmplY3RzIHJlcHJlc2VudCBhIHN0YWNrIHRyYWNlIG9mIGFuIGV4Y2VwdGlvbi4gIEFcbiAgICAgIHRyYWNlYmFjayBvYmplY3QgaXMgY3JlYXRlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuICBXaGVuIHRoZVxuICAgICAgc2VhcmNoIGZvciBhbiBleGNlcHRpb24gaGFuZGxlciB1bndpbmRzIHRoZSBleGVjdXRpb24gc3RhY2ssIGF0XG4gICAgICBlYWNoIHVud291bmQgbGV2ZWwgYSB0cmFjZWJhY2sgb2JqZWN0IGlzIGluc2VydGVkIGluIGZyb250IG9mXG4gICAgICB0aGUgY3VycmVudCB0cmFjZWJhY2suICBXaGVuIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgaXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uIChTZWUgc2VjdGlvblxuICAgICAgKlRoZSB0cnkgc3RhdGVtZW50Ki4pIEl0IGlzIGFjY2Vzc2libGUgYXMgdGhlIHRoaXJkIGl0ZW0gb2YgdGhlXG4gICAgICB0dXBsZSByZXR1cm5lZCBieSBgYHN5cy5leGNfaW5mbygpYGAuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnNcbiAgICAgIG5vIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHlcbiAgICAgIGZvcm1hdHRlZCkgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzXG4gICAgICBpbnRlcmFjdGl2ZSwgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhc1xuICAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGB0Yl9uZXh0YGAgaXMgdGhlIG5leHQgbGV2ZWwgaW5cbiAgICAgIHRoZSBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQpLCBvciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyBgYHRiX2ZyYW1lYGBcbiAgICAgIHBvaW50cyB0byB0aGUgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsO1xuICAgICAgYGB0Yl9saW5lbm9gYCBnaXZlcyB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQ7IGBgdGJfbGFzdGlgYCBpbmRpY2F0ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGVcbiAgICAgIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlclxuICAgICAgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCBpbiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggbm8gbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZVxuICAgICAgb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgZm9yIGBgX19nZXRpdGVtX18oKWBgXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiBgYHNsaWNlKClgYFxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgc3RhcnRgYCBpcyB0aGUgbG93ZXIgYm91bmQ7XG4gICAgICBgYHN0b3BgYCBpcyB0aGUgdXBwZXIgYm91bmQ7IGBgc3RlcGBgIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzXG4gICAgICBgYE5vbmVgYCBpZiBvbWl0dGVkLiAgVGhlc2UgYXR0cmlidXRlcyBjYW4gaGF2ZSBhbnkgdHlwZS5cblxuICAgICAgU2xpY2Ugb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIHNsaWNlLmluZGljZXMoc2VsZiwgbGVuZ3RoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50ICpsZW5ndGgqIGFuZFxuICAgICAgICAgY29tcHV0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsaWNlIHRoYXQgdGhlIHNsaWNlIG9iamVjdFxuICAgICAgICAgd291bGQgZGVzY3JpYmUgaWYgYXBwbGllZCB0byBhIHNlcXVlbmNlIG9mICpsZW5ndGgqIGl0ZW1zLlxuICAgICAgICAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHkgdGhlc2UgYXJlXG4gICAgICAgICB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3Igc3RyaWRlXG4gICAgICAgICBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlcyBhcmVcbiAgICAgICAgIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICBTdGF0aWMgbWV0aG9kIG9iamVjdHNcbiAgICAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBwcm92aWRlIGEgd2F5IG9mIGRlZmVhdGluZyB0aGVcbiAgICAgIHRyYW5zZm9ybWF0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMgdG8gbWV0aG9kIG9iamVjdHMgZGVzY3JpYmVkXG4gICAgICBhYm92ZS4gQSBzdGF0aWMgbWV0aG9kIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFueSBvdGhlclxuICAgICAgb2JqZWN0LCB1c3VhbGx5IGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QuIFdoZW4gYSBzdGF0aWNcbiAgICAgIG1ldGhvZCBvYmplY3QgaXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBvciBhIGNsYXNzIGluc3RhbmNlLCB0aGVcbiAgICAgIG9iamVjdCBhY3R1YWxseSByZXR1cm5lZCBpcyB0aGUgd3JhcHBlZCBvYmplY3QsIHdoaWNoIGlzIG5vdFxuICAgICAgc3ViamVjdCB0byBhbnkgZnVydGhlciB0cmFuc2Zvcm1hdGlvbi4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZVxuICAgICAgbm90IHRoZW1zZWx2ZXMgY2FsbGFibGUsIGFsdGhvdWdoIHRoZSBvYmplY3RzIHRoZXkgd3JhcCB1c3VhbGx5XG4gICAgICBhcmUuIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc3RhdGljbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiBgYGNsYXNzbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cbicsCiAgJ3R5cGVzZnVuY3Rpb25zJzogJ1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogYGBmdW5jKGFyZ3VtZW50LWxpc3QpYGAuXG5cblRoZXJlIGFyZSByZWFsbHkgdHdvIGZsYXZvcnMgb2YgZnVuY3Rpb24gb2JqZWN0czogYnVpbHQtaW4gZnVuY3Rpb25zXG5hbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gIEJvdGggc3VwcG9ydCB0aGUgc2FtZSBvcGVyYXRpb24gKHRvIGNhbGxcbnRoZSBmdW5jdGlvbiksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGlmZmVyZW50LCBoZW5jZSB0aGVcbmRpZmZlcmVudCBvYmplY3QgdHlwZXMuXG5cblNlZSAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtYXBwaW5nJzogJ1xuTWFwcGluZyBUeXBlcyAtLS0gYGBkaWN0YGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQtXG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QobWFwcGluZywgKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgYW5kIGEgcG9zc2libHkgZW1wdHkgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuXG4gICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGFcbiAgIGRpY3Rpb25hcnkgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZ1xuICAgb2JqZWN0LiAgT3RoZXJ3aXNlLCB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuICppdGVyYXRvcipcbiAgIG9iamVjdC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmF0b3Igd2l0aFxuICAgZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXlcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZS4gIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5XG4gICBiZWNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZWlyXG4gICB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBkaWN0aW9uYXJ5IGNyZWF0ZWQgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuICBJZiBhIGtleSBiZWluZyBhZGRlZCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tXG4gICB0aGUga2V5d29yZCBhcmd1bWVudCByZXBsYWNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuXG5cbiAgIFRvIGlsbHVzdHJhdGUsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWxcbiAgIHRvIGBgeyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM31gYDpcblxuICAgICAgPj4+IGEgPSBkaWN0KG9uZT0xLCB0d289MiwgdGhyZWU9MylcbiAgICAgID4+PiBiID0ge1wnb25lXCc6IDEsIFwndHdvXCc6IDIsIFwndGhyZWVcJzogM31cbiAgICAgID4+PiBjID0gZGljdCh6aXAoW1wnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJ10sIFsxLCAyLCAzXSkpXG4gICAgICA+Pj4gZCA9IGRpY3QoWyhcJ3R3b1wnLCAyKSwgKFwnb25lXCcsIDEpLCAoXCd0aHJlZVwnLCAzKV0pXG4gICAgICA+Pj4gZSA9IGRpY3Qoe1wndGhyZWVcJzogMywgXCdvbmVcJzogMSwgXCd0d29cJzogMn0pXG4gICAgICA+Pj4gYSA9PSBiID09IGMgPT0gZCA9PSBlXG4gICAgICBUcnVlXG5cbiAgIFByb3ZpZGluZyBrZXl3b3JkIGFyZ3VtZW50cyBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvclxuICAga2V5cyB0aGF0IGFyZSB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMuICBPdGhlcndpc2UsIGFueSB2YWxpZCBrZXlzXG4gICBjYW4gYmUgdXNlZC5cblxuICAgVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIHRoYXQgZGljdGlvbmFyaWVzIHN1cHBvcnQgKGFuZCB0aGVyZWZvcmUsXG4gICBjdXN0b20gbWFwcGluZyB0eXBlcyBzaG91bGQgc3VwcG9ydCB0b28pOlxuXG4gICBsZW4oZClcblxuICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRpY3Rpb25hcnkgKmQqLlxuXG4gICBkW2tleV1cblxuICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kIGBgX19taXNzaW5nX18oKWBgLCBpZiB0aGVcbiAgICAgIGtleSAqa2V5KiBpcyBub3QgcHJlc2VudCwgdGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uIGNhbGxzIHRoYXRcbiAgICAgIG1ldGhvZCB3aXRoIHRoZSBrZXkgKmtleSogYXMgYXJndW1lbnQuICBUaGUgYGBkW2tleV1gYCBvcGVyYXRpb25cbiAgICAgIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgYGBfX21pc3NpbmdfXyhrZXkpYGAgY2FsbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlclxuICAgICAgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSBgYF9fbWlzc2luZ19fKClgYC4gSWZcbiAgICAgIGBgX19taXNzaW5nX18oKWBgIGlzIG5vdCBkZWZpbmVkLCBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuICAgICAgYGBfX21pc3NpbmdfXygpYGAgbXVzdCBiZSBhIG1ldGhvZDsgaXQgY2Fubm90IGJlIGFuIGluc3RhbmNlXG4gICAgICB2YXJpYWJsZTpcblxuICAgICAgICAgPj4+IGNsYXNzIENvdW50ZXIoZGljdCk6XG4gICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgICAgICAgLi4uICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgID4+PiBjID0gQ291bnRlcigpXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMFxuICAgICAgICAgPj4+IGNbXCdyZWRcJ10gKz0gMVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDFcblxuICAgICAgU2VlIGBgY29sbGVjdGlvbnMuQ291bnRlcmBgIGZvciBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uXG4gICAgICBpbmNsdWRpbmcgb3RoZXIgbWV0aG9kcyBoZWxwZnVsIGZvciBhY2N1bXVsYXRpbmcgYW5kIG1hbmFnaW5nXG4gICAgICB0YWxsaWVzLlxuXG4gICBkW2tleV0gPSB2YWx1ZVxuXG4gICAgICBTZXQgYGBkW2tleV1gYCB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSBgYGRba2V5XWBgIGZyb20gKmQqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIG1hcC5cblxuICAga2V5IGluIGRcblxuICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgYGBGYWxzZWBgLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byBgYG5vdCBrZXkgaW4gZGBgLlxuXG4gICBpdGVyKGQpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5LiAgVGhpcyBpcyBhXG4gICAgICBzaG9ydGN1dCBmb3IgYGBpdGVyKGQua2V5cygpKWBgLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgYGBmcm9ta2V5cygpYGAgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICBnZXQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIFJldHVybiB0aGUgdmFsdWUgZm9yICprZXkqIGlmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCBlbHNlXG4gICAgICAqZGVmYXVsdCouIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLFxuICAgICAgc28gdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKGBgKGtleSwgdmFsdWUpYGBcbiAgICAgIHBhaXJzKS4gU2VlIHRoZSAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBrZXlzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIHBvcChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZSxcbiAgICAgIGVsc2UgcmV0dXJuICpkZWZhdWx0Ki4gIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4gYW5kICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIGRpY3Rpb25hcnksIGEgYGBLZXlFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSBgYChrZXksIHZhbHVlKWBgIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgIGBgcG9waXRlbSgpYGAgaXMgdXNlZnVsIHRvIGRlc3RydWN0aXZlbHkgaXRlcmF0ZSBvdmVyIGFcbiAgICAgIGRpY3Rpb25hcnksIGFzIG9mdGVuIHVzZWQgaW4gc2V0IGFsZ29yaXRobXMuICBJZiB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgZW1wdHksIGNhbGxpbmcgYGBwb3BpdGVtKClgYCByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICB1cGRhdGUoW290aGVyXSlcblxuICAgICAgVXBkYXRlIHRoZSBkaWN0aW9uYXJ5IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyBmcm9tICpvdGhlciosXG4gICAgICBvdmVyd3JpdGluZyBleGlzdGluZyBrZXlzLiAgUmV0dXJuIGBgTm9uZWBgLlxuXG4gICAgICBgYHVwZGF0ZSgpYGAgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6IGBgZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpYGAuXG5cbiAgIHZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIHZhbHVlcy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cblNlZSBhbHNvOlxuXG4gICBgYHR5cGVzLk1hcHBpbmdQcm94eVR5cGVgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHkgdmlld1xuICAgb2YgYSBgYGRpY3RgYC5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgYGBkaWN0LmtleXMoKWBgLCBgYGRpY3QudmFsdWVzKClgYCBhbmRcbmBgZGljdC5pdGVtcygpYGAgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uXG50aGUgZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnlcbmNoYW5nZXMsIHRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mIGBgKGtleSwgdmFsdWUpYGApIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsIGtleSlgYCBwYWlyc1xuICAgdXNpbmcgYGB6aXAoKWBgOiBgYHBhaXJzID0gemlwKGQudmFsdWVzKCksIGQua2V5cygpKWBgLiAgQW5vdGhlclxuICAgd2F5IHRvIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzIGBgcGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW5cbiAgIGQuaXRlbXMoKV1gYC5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLlxuXG54IGluIGRpY3R2aWV3XG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLFxuICAgdmFsdWVzIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSBgYChrZXksXG4gICB2YWx1ZSlgYCB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCBgYChrZXksIHZhbHVlKWBgIHBhaXJzIGFyZSB1bmlxdWVcbmFuZCBoYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmVcbm5vdCB0cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pXG5Gb3Igc2V0LWxpa2Ugdmlld3MsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciB0aGUgYWJzdHJhY3RcbmJhc2UgY2xhc3MgYGBjb2xsZWN0aW9ucy5hYmMuU2V0YGAgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsIGBgPT1gYCxcbmBgPGBgLCBvciBgYF5gYCkuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdzYXVzYWdlXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAogICd0eXBlc21ldGhvZHMnOiAnXG5NZXRob2RzXG4qKioqKioqXG5cbk1ldGhvZHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgdGhlIGF0dHJpYnV0ZSBub3RhdGlvbi5cblRoZXJlIGFyZSB0d28gZmxhdm9yczogYnVpbHQtaW4gbWV0aG9kcyAoc3VjaCBhcyBgYGFwcGVuZCgpYGAgb25cbmxpc3RzKSBhbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZFxud2l0aCB0aGUgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGVcbmBgc2VsZmBgIGFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAgQm91bmQgbWV0aG9kcyBoYXZlIHR3b1xuc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBtLl9fc2VsZl9fYGAgaXMgdGhlIG9iamVjdCBvbiB3aGljaFxudGhlIG1ldGhvZCBvcGVyYXRlcywgYW5kIGBgbS5fX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmdcbnRoZSBtZXRob2QuICBDYWxsaW5nIGBgbShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pYGAgaXMgY29tcGxldGVseVxuZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgbS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLixcbmFyZy1uKWBgLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIGJvdW5kIG1ldGhvZCBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuICBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKGBgbWV0aC5fX2Z1bmNfX2BgKSwgc2V0dGluZyBtZXRob2RcbmF0dHJpYnV0ZXMgb24gYm91bmQgbWV0aG9kcyBpcyBkaXNhbGxvd2VkLiAgQXR0ZW1wdGluZyB0byBzZXQgYW5cbmF0dHJpYnV0ZSBvbiBhIG1ldGhvZCByZXN1bHRzIGluIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBiZWluZyByYWlzZWQuXG5JbiBvcmRlciB0byBzZXQgYSBtZXRob2QgYXR0cmlidXRlLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBpdCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0OlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKTpcbiAgIC4uLiAgICAgICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLm1ldGhvZC53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCcgICMgY2FuXCd0IHNldCBvbiB0aGUgbWV0aG9kXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBBdHRyaWJ1dGVFcnJvcjogXCdtZXRob2RcJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSBcJ3dob2FtaVwnXG4gICA+Pj4gYy5tZXRob2QuX19mdW5jX18ud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pXG4gICBcJ215IG5hbWUgaXMgbWV0aG9kXCdcblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtb2R1bGVzJzogIlxuTW9kdWxlc1xuKioqKioqKlxuXG5UaGUgb25seSBzcGVjaWFsIG9wZXJhdGlvbiBvbiBhIG1vZHVsZSBpcyBhdHRyaWJ1dGUgYWNjZXNzOlxuYGBtLm5hbWVgYCwgd2hlcmUgKm0qIGlzIGEgbW9kdWxlIGFuZCAqbmFtZSogYWNjZXNzZXMgYSBuYW1lIGRlZmluZWRcbmluICptKidzIHN5bWJvbCB0YWJsZS4gTW9kdWxlIGF0dHJpYnV0ZXMgY2FuIGJlIGFzc2lnbmVkIHRvLiAgKE5vdGVcbnRoYXQgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IGlzIG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIGFuIG9wZXJhdGlvblxub24gYSBtb2R1bGUgb2JqZWN0OyBgYGltcG9ydCBmb29gYCBkb2VzIG5vdCByZXF1aXJlIGEgbW9kdWxlIG9iamVjdFxubmFtZWQgKmZvbyogdG8gZXhpc3QsIHJhdGhlciBpdCByZXF1aXJlcyBhbiAoZXh0ZXJuYWwpICpkZWZpbml0aW9uKlxuZm9yIGEgbW9kdWxlIG5hbWVkICpmb28qIHNvbWV3aGVyZS4pXG5cbkEgc3BlY2lhbCBhdHRyaWJ1dGUgb2YgZXZlcnkgbW9kdWxlIGlzIGBgX19kaWN0X19gYC4gVGhpcyBpcyB0aGVcbmRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbW9kdWxlJ3Mgc3ltYm9sIHRhYmxlLiBNb2RpZnlpbmcgdGhpc1xuZGljdGlvbmFyeSB3aWxsIGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kdWxlJ3Mgc3ltYm9sIHRhYmxlLCBidXQgZGlyZWN0XG5hc3NpZ25tZW50IHRvIHRoZSBgYF9fZGljdF9fYGAgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhblxud3JpdGUgYGBtLl9fZGljdF9fWydhJ10gPSAxYGAsIHdoaWNoIGRlZmluZXMgYGBtLmFgYCB0byBiZSBgYDFgYCwgYnV0XG55b3UgY2FuJ3Qgd3JpdGUgYGBtLl9fZGljdF9fID0ge31gYCkuICBNb2RpZnlpbmcgYGBfX2RpY3RfX2BgIGRpcmVjdGx5XG5pcyBub3QgcmVjb21tZW5kZWQuXG5cbk1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBgYDxtb2R1bGVcbidzeXMnIChidWlsdC1pbik+YGAuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXNcbmBgPG1vZHVsZSAnb3MnIGZyb20gJy91c3IvbG9jYWwvbGliL3B5dGhvblguWS9vcy5weWMnPmBgLlxuIiwKLSAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGBcbkFCQyBpcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlXG5vcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLCAqaiogYW5kICprKiBhcmVcbmludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZCB2YWx1ZVxucmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgYGArYGAgKGNvbmNhdGVuYXRpb24pIGFuZCBgYCpgYFxuKHJlcGV0aXRpb24pIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZ1xubnVtZXJpYyBvcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBGYWxzZWBgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICAgICAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBUcnVlYGAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKiBuYGAgb3IgYGBuICogc2BgICAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaV1gYCAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtYXgocylgYCAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyBgYHN0cmBgLCBgYGJ5dGVzYGAgYW5kIGBgYnl0ZWFycmF5YGApIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXcgb2JqZWN0LlxuICAgVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWQgY29uY2F0ZW5hdGlvblxuICAgd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWwgc2VxdWVuY2UgbGVuZ3RoLlxuICAgVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGVcbiAgIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgc3RyYGAgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICBgYHN0ci5qb2luKClgYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSBgYGlvLlN0cmluZ0lPYGBcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYGJ5dGVzYGAgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgIGBgYnl0ZXMuam9pbigpYGAgb3IgYGBpby5CeXRlc0lPYGAsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgYGBieXRlYXJyYXlgYCBvYmplY3QuICBgYGJ5dGVhcnJheWBgIG9iamVjdHNcbiAgICAgYXJlIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGB0dXBsZWBgIG9iamVjdHMsIGV4dGVuZCBhIGBgbGlzdGBgIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgYGByYW5nZWBgKSBvbmx5IHN1cHBvcnQgaXRlbSBzZXF1ZW5jZXNcbiAgIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnQgc2VxdWVuY2VcbiAgIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gYGBpbmRleGBgIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBzW2k6al0uaW5kZXgoeClgYCxcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgYGBoYXNoKClgYCBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzIGBgdHVwbGVgYCBpbnN0YW5jZXMsXG50byBiZSB1c2VkIGFzIGBgZGljdGBgIGtleXMgYW5kIHN0b3JlZCBpbiBgYHNldGBgIGFuZCBgYGZyb3plbnNldGBgXG5pbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gYGBUeXBlRXJyb3JgYC5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyBgYGRpY3RgYCBhbmQgYGBzZXRgYClcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBgYGNsZWFyKClgYCBhbmQgYGBjb3B5KClgYCBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogYGBbXWBgXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthXWBgLFxuICAgICBgYFthLCBiLCBjXWBgXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246IGBgW3ggZm9yIHggaW4gaXRlcmFibGVdYGBcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogYGBsaXN0KClgYCBvciBgYGxpc3QoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvIGBgaXRlcmFibGVbOl1gYC4gRm9yIGV4YW1wbGUsIGBgbGlzdChcJ2FiY1wnKWBgXG4gICByZXR1cm5zIGBgW1wnYVwnLCBcJ2JcJywgXCdjXCddYGAgYW5kIGBgbGlzdCggKDEsIDIsIDMpIClgYCByZXR1cm5zIGBgWzEsXG4gICAyLCAzXWBgLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXdcbiAgIGVtcHR5IGxpc3QsIGBgW11gYC5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZVxuICAgYGBzb3J0ZWQoKWBgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSBgYDxgYFxuICAgICAgY29tcGFyaXNvbnMgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZlxuICAgICAgYW55IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGxcbiAgICAgIGZhaWwgKGFuZCB0aGUgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkXG4gICAgICBzdGF0ZSkuXG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgIGBga2V5PXN0ci5sb3dlcmBgKS4gVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgIGxpc3QgaXMgY2FsY3VsYXRlZCBvbmNlIGFuZCB0aGVuIHVzZWQgZm9yIHRoZSBlbnRpcmUgc29ydGluZ1xuICAgICAgcHJvY2Vzcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBOb25lYGAgbWVhbnMgdGhhdCBsaXN0IGl0ZW1zIGFyZVxuICAgICAgc29ydGVkIGRpcmVjdGx5IHdpdGhvdXQgY2FsY3VsYXRpbmcgYSBzZXBhcmF0ZSBrZXkgdmFsdWUuXG5cbiAgICAgIFRoZSBgYGZ1bmN0b29scy5jbXBfdG9fa2V5KClgYCB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0XG4gICAgICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICAgICBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2VcbiAgICAgIHdoZW4gc29ydGluZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXQgb3BlcmF0ZXNcbiAgICAgIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNvcnRlZCBzZXF1ZW5jZSAodXNlXG4gICAgICBgYHNvcnRlZCgpYGAgdG8gZXhwbGljaXRseSByZXF1ZXN0IGEgbmV3IHNvcnRlZCBsaXN0IGluc3RhbmNlKS5cblxuICAgICAgVGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZiBpdCBjYW5cbiAgICAgIGRldGVjdCB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuXG5UdXBsZXNcbj09PT09PVxuXG5UdXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5oZXRlcm9nZW5lb3VzIGRhdGEgKHN1Y2ggYXMgdGhlIDItdHVwbGVzIHByb2R1Y2VkIGJ5IHRoZVxuYGBlbnVtZXJhdGUoKWBgIGJ1aWx0LWluKS4gVHVwbGVzIGFyZSBhbHNvIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuXG5pbW11dGFibGUgc2VxdWVuY2Ugb2YgaG9tb2dlbmVvdXMgZGF0YSBpcyBuZWVkZWQgKHN1Y2ggYXMgYWxsb3dpbmdcbnN0b3JhZ2UgaW4gYSBgYHNldGBgIG9yIGBgZGljdGBgIGluc3RhbmNlKS5cblxuY2xhc3MgY2xhc3MgdHVwbGUoW2l0ZXJhYmxlXSlcblxuICAgVHVwbGVzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBhIG51bWJlciBvZiB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBwYXJlbnRoZXNlcyB0byBkZW5vdGUgdGhlIGVtcHR5IHR1cGxlOiBgYCgpYGBcblxuICAgKiBVc2luZyBhIHRyYWlsaW5nIGNvbW1hIGZvciBhIHNpbmdsZXRvbiB0dXBsZTogYGBhLGBgIG9yIGBgKGEsKWBgXG5cbiAgICogU2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogYGBhLCBiLCBjYGAgb3IgYGAoYSwgYiwgYylgYFxuXG4gICAqIFVzaW5nIHRoZSBgYHR1cGxlKClgYCBidWlsdC1pbjogYGB0dXBsZSgpYGAgb3JcbiAgICAgYGB0dXBsZShpdGVyYWJsZSlgYFxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGBgdHVwbGUoXCdhYmNcJylgYCByZXR1cm5zIGBgKFwnYVwnLCBcJ2JcJyxcbiAgIFwnY1wnKWBgIGFuZCBgYHR1cGxlKCBbMSwgMiwgM10gKWBgIHJldHVybnMgYGAoMSwgMiwgMylgYC4gSWYgbm9cbiAgIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eSB0dXBsZSxcbiAgIGBgKClgYC5cblxuICAgTm90ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHRoZSBjb21tYSB3aGljaCBtYWtlcyBhIHR1cGxlLCBub3QgdGhlXG4gICBwYXJlbnRoZXNlcy4gVGhlIHBhcmVudGhlc2VzIGFyZSBvcHRpb25hbCwgZXhjZXB0IGluIHRoZSBlbXB0eVxuICAgdHVwbGUgY2FzZSwgb3Igd2hlbiB0aGV5IGFyZSBuZWVkZWQgdG8gYXZvaWQgc3ludGFjdGljIGFtYmlndWl0eS5cbiAgIEZvciBleGFtcGxlLCBgYGYoYSwgYiwgYylgYCBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCB0aHJlZVxuICAgYXJndW1lbnRzLCB3aGlsZSBgYGYoKGEsIGIsIGMpKWBgIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZVxuICAgYXMgdGhlIHNvbGUgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCBgYGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKWBgIG1heSBiZSBhIG1vcmVcbmFwcHJvcHJpYXRlIGNob2ljZSB0aGFuIGEgc2ltcGxlIHR1cGxlIG9iamVjdC5cblxuXG5SYW5nZXNcbj09PT09PVxuXG5UaGUgYGByYW5nZWBgIHR5cGUgcmVwcmVzZW50cyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugb2YgbnVtYmVycyBhbmQgaXNcbmNvbW1vbmx5IHVzZWQgZm9yIGxvb3BpbmcgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGltZXMgaW4gYGBmb3JgYCBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gYGBpbnRgYCBvciBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYGBfX2luZGV4X19gYFxuICAgc3BlY2lhbCBtZXRob2QpLiAgSWYgdGhlICpzdGVwKiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0b1xuICAgYGAxYGAuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBgMGBgLiBJZlxuICAgKnN0ZXAqIGlzIHplcm8sIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgRm9yIGEgcG9zaXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgYSByYW5nZSBgYHJgYCBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgYGByW2ldID0gc3RhcnQgKyBzdGVwKmlgYCB3aGVyZSBgYGkgPj0gMGBgIGFuZFxuICAgYGByW2ldIDwgc3RvcGBgLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhIGBgcltpXSA9IHN0YXJ0ICsgc3RlcCppYGAsIGJ1dCB0aGVcbiAgIGNvbnN0cmFpbnRzIGFyZSBgYGkgPj0gMGBgIGFuZCBgYHJbaV0gPiBzdG9wYGAuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgYGByWzBdYGAgZG9lcyBub3QgbWVldCB0aGUgdmFsdWVcbiAgIGNvbnN0cmFpbnQuIFJhbmdlcyBkbyBzdXBwb3J0IG5lZ2F0aXZlIGluZGljZXMsIGJ1dCB0aGVzZSBhcmVcbiAgIGludGVycHJldGVkIGFzIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgZGV0ZXJtaW5lZCBieVxuICAgdGhlIHBvc2l0aXZlIGluZGljZXMuXG5cbiAgIFJhbmdlcyBjb250YWluaW5nIGFic29sdXRlIHZhbHVlcyBsYXJnZXIgdGhhbiBgYHN5cy5tYXhzaXplYGAgYXJlXG4gICBwZXJtaXR0ZWQgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgYGBsZW4oKWBgKSBtYXkgcmFpc2VcbiAgIGBgT3ZlcmZsb3dFcnJvcmBgLlxuXG4gICBSYW5nZSBleGFtcGxlczpcblxuICAgICAgPj4+IGxpc3QocmFuZ2UoMTApKVxuICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAxMSkpXG4gICAgICBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAzMCwgNSkpXG4gICAgICBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAxMCwgMykpXG4gICAgICBbMCwgMywgNiwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIC0xMCwgLTEpKVxuICAgICAgWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwKSlcbiAgICAgIFtdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSlcbiAgICAgIFtdXG5cbiAgIFJhbmdlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zIGV4Y2VwdFxuICAgY29uY2F0ZW5hdGlvbiBhbmQgcmVwZXRpdGlvbiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgcmFuZ2Ugb2JqZWN0c1xuICAgY2FuIG9ubHkgcmVwcmVzZW50IHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBhIHN0cmljdCBwYXR0ZXJuIGFuZFxuICAgcmVwZXRpdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiB3aWxsIHVzdWFsbHkgdmlvbGF0ZSB0aGF0IHBhdHRlcm4pLlxuXG5UaGUgYWR2YW50YWdlIG9mIHRoZSBgYHJhbmdlYGAgdHlwZSBvdmVyIGEgcmVndWxhciBgYGxpc3RgYCBvclxuYGB0dXBsZWBgIGlzIHRoYXQgYSBgYHJhbmdlYGAgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgKHNtYWxsKVxuYW1vdW50IG9mIG1lbW9yeSwgbm8gbWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzIChhcyBpdFxub25seSBzdG9yZXMgdGhlIGBgc3RhcnRgYCwgYGBzdG9wYGAgYW5kIGBgc3RlcGBgIHZhbHVlcywgY2FsY3VsYXRpbmdcbmluZGl2aWR1YWwgaXRlbXMgYW5kIHN1YnJhbmdlcyBhcyBuZWVkZWQpLlxuXG5SYW5nZSBvYmplY3RzIGltcGxlbWVudCB0aGUgYGBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgYCBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggYGA9PWBgIGFuZCBgYCE9YGAgY29tcGFyZXNcbnRoZW0gYXMgc2VxdWVuY2VzLiAgVGhhdCBpcywgdHdvIHJhbmdlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWZcbnRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcy4gIChOb3RlIHRoYXQgdHdvIHJhbmdlXG5vYmplY3RzIHRoYXQgY29tcGFyZSBlcXVhbCBtaWdodCBoYXZlIGRpZmZlcmVudCBgYHN0YXJ0YGAsIGBgc3RvcGBgXG5hbmQgYGBzdGVwYGAgYXR0cmlidXRlcywgZm9yIGV4YW1wbGUgYGByYW5nZSgwKSA9PSByYW5nZSgyLCAxLCAzKWBgIG9yXG5gYHJhbmdlKDAsIDMsIDIpID09IHJhbmdlKDAsIDQsIDIpYGAuKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4gU3VwcG9ydCBzbGljaW5nXG5hbmQgbmVnYXRpdmUgaW5kaWNlcy4gVGVzdCBgYGludGBgIG9iamVjdHMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnRcbnRpbWUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgaXRlbXMuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IERlZmluZSBcJz09XCcgYW5kIFwnIT1cJyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHNcbmJhc2VkIG9uIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nXG5iYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkpLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSBgYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCBhdHRyaWJ1dGVzLlxuJywKKyAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGBcbkFCQyBpcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlXG5vcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLCAqaiogYW5kICprKiBhcmVcbmludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZCB2YWx1ZVxucmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgYGArYGAgKGNvbmNhdGVuYXRpb24pIGFuZCBgYCpgYFxuKHJlcGV0aXRpb24pIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZ1xubnVtZXJpYyBvcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBGYWxzZWBgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICAgICAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBUcnVlYGAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKiBuYGAgb3IgYGBuICogc2BgICAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaV1gYCAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtYXgocylgYCAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyBgYHN0cmBgLCBgYGJ5dGVzYGAgYW5kIGBgYnl0ZWFycmF5YGApIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXcgb2JqZWN0LlxuICAgVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWQgY29uY2F0ZW5hdGlvblxuICAgd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWwgc2VxdWVuY2UgbGVuZ3RoLlxuICAgVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGVcbiAgIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgc3RyYGAgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICBgYHN0ci5qb2luKClgYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSBgYGlvLlN0cmluZ0lPYGBcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYGJ5dGVzYGAgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgIGBgYnl0ZXMuam9pbigpYGAgb3IgYGBpby5CeXRlc0lPYGAsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgYGBieXRlYXJyYXlgYCBvYmplY3QuICBgYGJ5dGVhcnJheWBgIG9iamVjdHNcbiAgICAgYXJlIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGB0dXBsZWBgIG9iamVjdHMsIGV4dGVuZCBhIGBgbGlzdGBgIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgYGByYW5nZWBgKSBvbmx5IHN1cHBvcnQgaXRlbSBzZXF1ZW5jZXNcbiAgIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnQgc2VxdWVuY2VcbiAgIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gYGBpbmRleGBgIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBzW2k6al0uaW5kZXgoeClgYCxcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgYGBoYXNoKClgYCBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzIGBgdHVwbGVgYCBpbnN0YW5jZXMsXG50byBiZSB1c2VkIGFzIGBgZGljdGBgIGtleXMgYW5kIHN0b3JlZCBpbiBgYHNldGBgIGFuZCBgYGZyb3plbnNldGBgXG5pbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gYGBUeXBlRXJyb3JgYC5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyBgYGRpY3RgYCBhbmQgYGBzZXRgYClcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBgYGNsZWFyKClgYCBhbmQgYGBjb3B5KClgYCBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogYGBbXWBgXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthXWBgLFxuICAgICBgYFthLCBiLCBjXWBgXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246IGBgW3ggZm9yIHggaW4gaXRlcmFibGVdYGBcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogYGBsaXN0KClgYCBvciBgYGxpc3QoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvIGBgaXRlcmFibGVbOl1gYC4gRm9yIGV4YW1wbGUsIGBgbGlzdChcJ2FiY1wnKWBgXG4gICByZXR1cm5zIGBgW1wnYVwnLCBcJ2JcJywgXCdjXCddYGAgYW5kIGBgbGlzdCggKDEsIDIsIDMpIClgYCByZXR1cm5zIGBgWzEsXG4gICAyLCAzXWBgLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXdcbiAgIGVtcHR5IGxpc3QsIGBgW11gYC5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZVxuICAgYGBzb3J0ZWQoKWBgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSBgYDxgYFxuICAgICAgY29tcGFyaXNvbnMgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZlxuICAgICAgYW55IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGxcbiAgICAgIGZhaWwgKGFuZCB0aGUgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkXG4gICAgICBzdGF0ZSkuXG5cbiAgICAgIGBgc29ydCgpYGAgYWNjZXB0cyB0d28gYXJndW1lbnRzIHRoYXQgY2FuIG9ubHkgYmUgcGFzc2VkIGJ5XG4gICAgICBrZXl3b3JkICgqa2V5d29yZC1vbmx5IGFyZ3VtZW50cyopOlxuXG4gICAgICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvXG4gICAgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudCAoZm9yIGV4YW1wbGUsXG4gICAgICBgYGtleT1zdHIubG93ZXJgYCkuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICBsaXN0IGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmdcbiAgICAgIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgIG1lYW5zIHRoYXQgbGlzdCBpdGVtcyBhcmVcbiAgICAgIHNvcnRlZCBkaXJlY3RseSB3aXRob3V0IGNhbGN1bGF0aW5nIGEgc2VwYXJhdGUga2V5IHZhbHVlLlxuXG4gICAgICBUaGUgYGBmdW5jdG9vbHMuY21wX3RvX2tleSgpYGAgdXRpbGl0eSBpcyBhdmFpbGFibGUgdG8gY29udmVydCBhXG4gICAgICAyLnggc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgYGBzb3J0ZWQoKWBgIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIG5ldyBzb3J0ZWQgbGlzdCBpbnN0YW5jZSkuXG5cbiAgICAgIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpc1xuICAgICAgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2ZcbiAgICAgIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluXG4gICAgICBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5XG4gICAgICBncmFkZSkuXG5cbiAgICAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBtYWtlcyB0aGUgbGlzdCBhcHBlYXJcbiAgICAgIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgaWYgaXQgY2FuXG4gICAgICBkZXRlY3QgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGVcbmBgZW51bWVyYXRlKClgYCBidWlsdC1pbikuIFR1cGxlcyBhcmUgYWxzbyB1c2VkIGZvciBjYXNlcyB3aGVyZSBhblxuaW1tdXRhYmxlIHNlcXVlbmNlIG9mIGhvbW9nZW5lb3VzIGRhdGEgaXMgbmVlZGVkIChzdWNoIGFzIGFsbG93aW5nXG5zdG9yYWdlIGluIGEgYGBzZXRgYCBvciBgYGRpY3RgYCBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogYGAoKWBgXG5cbiAgICogVXNpbmcgYSB0cmFpbGluZyBjb21tYSBmb3IgYSBzaW5nbGV0b24gdHVwbGU6IGBgYSxgYCBvciBgYChhLClgYFxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6IGBgYSwgYiwgY2BgIG9yIGBgKGEsIGIsIGMpYGBcblxuICAgKiBVc2luZyB0aGUgYGB0dXBsZSgpYGAgYnVpbHQtaW46IGBgdHVwbGUoKWBgIG9yXG4gICAgIGBgdHVwbGUoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIHR1cGxlIHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgdHVwbGUsIGl0IGlzIHJldHVybmVkXG4gICB1bmNoYW5nZWQuIEZvciBleGFtcGxlLCBgYHR1cGxlKFwnYWJjXCcpYGAgcmV0dXJucyBgYChcJ2FcJywgXCdiXCcsXG4gICBcJ2NcJylgYCBhbmQgYGB0dXBsZSggWzEsIDIsIDNdIClgYCByZXR1cm5zIGBgKDEsIDIsIDMpYGAuIElmIG5vXG4gICBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsXG4gICBgYCgpYGAuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgYGBmKGEsIGIsIGMpYGAgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggdGhyZWVcbiAgIGFyZ3VtZW50cywgd2hpbGUgYGBmKChhLCBiLCBjKSlgYCBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBhIDMtdHVwbGVcbiAgIGFzIHRoZSBzb2xlIGFyZ3VtZW50LlxuXG4gICBUdXBsZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucy5cblxuRm9yIGhldGVyb2dlbmVvdXMgY29sbGVjdGlvbnMgb2YgZGF0YSB3aGVyZSBhY2Nlc3MgYnkgbmFtZSBpcyBjbGVhcmVyXG50aGFuIGFjY2VzcyBieSBpbmRleCwgYGBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKClgYCBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlIGBgcmFuZ2VgYCB0eXBlIHJlcHJlc2VudHMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIG51bWJlcnMgYW5kIGlzXG5jb21tb25seSB1c2VkIGZvciBsb29waW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRpbWVzIGluIGBgZm9yYGAgbG9vcHMuXG5cbmNsYXNzIGNsYXNzIHJhbmdlKHN0b3ApXG5jbGFzcyBjbGFzcyByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKVxuXG4gICBUaGUgYXJndW1lbnRzIHRvIHRoZSByYW5nZSBjb25zdHJ1Y3RvciBtdXN0IGJlIGludGVnZXJzIChlaXRoZXJcbiAgIGJ1aWx0LWluIGBgaW50YGAgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGBgX19pbmRleF9fYGBcbiAgIHNwZWNpYWwgbWV0aG9kKS4gIElmIHRoZSAqc3RlcCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG9cbiAgIGBgMWBgLiBJZiB0aGUgKnN0YXJ0KiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYDBgYC4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQuXG5cbiAgIEZvciBhIHBvc2l0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgYGByYGAgYXJlIGRldGVybWluZWRcbiAgIGJ5IHRoZSBmb3JtdWxhIGBgcltpXSA9IHN0YXJ0ICsgc3RlcCppYGAgd2hlcmUgYGBpID49IDBgYCBhbmRcbiAgIGBgcltpXSA8IHN0b3BgYC5cblxuICAgRm9yIGEgbmVnYXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlIGFyZSBzdGlsbFxuICAgZGV0ZXJtaW5lZCBieSB0aGUgZm9ybXVsYSBgYHJbaV0gPSBzdGFydCArIHN0ZXAqaWBgLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgYGBpID49IDBgYCBhbmQgYGByW2ldID4gc3RvcGBgLlxuXG4gICBBIHJhbmdlIG9iamVjdCB3aWxsIGJlIGVtcHR5IGlmIGBgclswXWBgIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gYGBzeXMubWF4c2l6ZWBgIGFyZVxuICAgcGVybWl0dGVkIGJ1dCBzb21lIGZlYXR1cmVzIChzdWNoIGFzIGBgbGVuKClgYCkgbWF5IHJhaXNlXG4gICBgYE92ZXJmbG93RXJyb3JgYC5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgYGByYW5nZWBgIHR5cGUgb3ZlciBhIHJlZ3VsYXIgYGBsaXN0YGAgb3JcbmBgdHVwbGVgYCBpcyB0aGF0IGEgYGByYW5nZWBgIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIChzbWFsbClcbmFtb3VudCBvZiBtZW1vcnksIG5vIG1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cyAoYXMgaXRcbm9ubHkgc3RvcmVzIHRoZSBgYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCB2YWx1ZXMsIGNhbGN1bGF0aW5nXG5pbmRpdmlkdWFsIGl0ZW1zIGFuZCBzdWJyYW5nZXMgYXMgbmVlZGVkKS5cblxuUmFuZ2Ugb2JqZWN0cyBpbXBsZW1lbnQgdGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGAgQUJDLCBhbmRcbnByb3ZpZGUgZmVhdHVyZXMgc3VjaCBhcyBjb250YWlubWVudCB0ZXN0cywgZWxlbWVudCBpbmRleCBsb29rdXAsXG5zbGljaW5nIGFuZCBzdXBwb3J0IGZvciBuZWdhdGl2ZSBpbmRpY2VzIChzZWUgKlNlcXVlbmNlIFR5cGVzIC0tLVxubGlzdCwgdHVwbGUsIHJhbmdlKik6XG5cbj4+PiByID0gcmFuZ2UoMCwgMjAsIDIpXG4+Pj4gclxucmFuZ2UoMCwgMjAsIDIpXG4+Pj4gMTEgaW4gclxuRmFsc2Vcbj4+PiAxMCBpbiByXG5UcnVlXG4+Pj4gci5pbmRleCgxMClcbjVcbj4+PiByWzVdXG4xMFxuPj4+IHJbOjVdXG5yYW5nZSgwLCAxMCwgMilcbj4+PiByWy0xXVxuMThcblxuVGVzdGluZyByYW5nZSBvYmplY3RzIGZvciBlcXVhbGl0eSB3aXRoIGBgPT1gYCBhbmQgYGAhPWBgIGNvbXBhcmVzXG50aGVtIGFzIHNlcXVlbmNlcy4gIFRoYXQgaXMsIHR3byByYW5nZSBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmXG50aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMuICAoTm90ZSB0aGF0IHR3byByYW5nZVxub2JqZWN0cyB0aGF0IGNvbXBhcmUgZXF1YWwgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgYGBzdGFydGBgLCBgYHN0b3BgYFxuYW5kIGBgc3RlcGBgIGF0dHJpYnV0ZXMsIGZvciBleGFtcGxlIGBgcmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMylgYCBvclxuYGByYW5nZSgwLCAzLCAyKSA9PSByYW5nZSgwLCA0LCAyKWBgLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgYGBpbnRgYCBvYmplY3RzIGZvciBtZW1iZXJzaGlwIGluIGNvbnN0YW50XG50aW1lIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGl0ZW1zLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBEZWZpbmUgXCc9PVwnIGFuZCBcJyE9XCcgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzXG5iYXNlZCBvbiB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZ1xuYmFzZWQgb24gb2JqZWN0IGlkZW50aXR5KS5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcy5cbicsCiAgJ3R5cGVzc2VxLW11dGFibGUnOiAiXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzIGBgZGljdGBgIGFuZCBgYHNldGBgKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIG1ldGhvZHMuXG4iLAogICd1bmFyeSc6ICdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgYGAtYGAgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5IGBgK2BgIChwbHVzKSBvcGVyYXRvciB5aWVsZHMgaXRzIG51bWVyaWMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuXG5UaGUgdW5hcnkgYGB+YGAgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbmludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgYGB4YGAgaXMgZGVmaW5lZCBhc1xuYGAtKHgrMSlgYC4gIEl0IG9ubHkgYXBwbGllcyB0byBpbnRlZ3JhbCBudW1iZXJzLlxuXG5JbiBhbGwgdGhyZWUgY2FzZXMsIGlmIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXIgdHlwZSwgYVxuYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnd2hpbGUnOiAnXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLApkaWZmIC0tZ2l0IGEvTGliL3F1b3ByaS5weSBiL0xpYi9xdW9wcmkucHkKaW5kZXggM2QwZjBhYy4uZTViZDAxMCAxMDA3NTUKLS0tIGEvTGliL3F1b3ByaS5weQorKysgYi9MaWIvcXVvcHJpLnB5CkBAIC0yMjMsNyArMjIzLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSwgInJiIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogY2FuJ3Qgb3BlbiAoJXMpXG4iICUgKGZpbGUsIG1zZykpCiAgICAgICAgICAgICAgICAgc3RzID0gMQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9MaWIvcmFuZG9tLnB5IGIvTGliL3JhbmRvbS5weQppbmRleCAxNGFjNWU1Li44MDgxNzVhIDEwMDY0NAotLS0gYS9MaWIvcmFuZG9tLnB5CisrKyBiL0xpYi9yYW5kb20ucHkKQEAgLTQxLDcgKzQxLDcgQEAKIGZyb20gbWF0aCBpbXBvcnQgbG9nIGFzIF9sb2csIGV4cCBhcyBfZXhwLCBwaSBhcyBfcGksIGUgYXMgX2UsIGNlaWwgYXMgX2NlaWwKIGZyb20gbWF0aCBpbXBvcnQgc3FydCBhcyBfc3FydCwgYWNvcyBhcyBfYWNvcywgY29zIGFzIF9jb3MsIHNpbiBhcyBfc2luCiBmcm9tIG9zIGltcG9ydCB1cmFuZG9tIGFzIF91cmFuZG9tCi1mcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgU2V0IGFzIF9TZXQsIFNlcXVlbmNlIGFzIF9TZXF1ZW5jZQorZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCiBmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTUxMiBhcyBfc2hhNTEyCiAKIF9fYWxsX18gPSBbIlJhbmRvbSIsInNlZWQiLCJyYW5kb20iLCJ1bmlmb3JtIiwicmFuZGludCIsImNob2ljZSIsInNhbXBsZSIsCkBAIC0xNTEsNiArMTUxLDkgQEAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGlja2xlIHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgICMgSXNzdWUgMTc0ODk6IFNpbmNlIF9fcmVkdWNlX18gd2FzIGRlZmluZWQgdG8gZml4ICM3NTk4ODkgdGhpcyBpcyBubworICAgICMgbG9uZ2VyIGNhbGxlZDsgd2UgbGVhdmUgaXQgaGVyZSBiZWNhdXNlIGl0IGhhcyBiZWVuIGhlcmUgc2luY2UgcmFuZG9tIHdhcworICAgICMgcmV3cml0dGVuIGJhY2sgaW4gMjAwMSBhbmQgd2h5IHJpc2sgYnJlYWtpbmcgc29tZXRoaW5nLgogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6ICMgZm9yIHBpY2tsZQogICAgICAgICByZXR1cm4gc2VsZi5nZXRzdGF0ZSgpCiAKQEAgLTIxNiwxMCArMjE5LDExIEBACiAgICAgICAgICAgICAgICAgICAgTWV0aG9kPV9NZXRob2RUeXBlLCBCdWlsdGluTWV0aG9kPV9CdWlsdGluTWV0aG9kVHlwZSk6CiAgICAgICAgICJSZXR1cm4gYSByYW5kb20gaW50IGluIHRoZSByYW5nZSBbMCxuKS4gIFJhaXNlcyBWYWx1ZUVycm9yIGlmIG49PTAuIgogCisgICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGdldHJhbmRiaXRzID0gc2VsZi5nZXRyYW5kYml0cwogICAgICAgICAjIE9ubHkgY2FsbCBzZWxmLmdldHJhbmRiaXRzIGlmIHRoZSBvcmlnaW5hbCByYW5kb20oKSBidWlsdGluIG1ldGhvZAogICAgICAgICAjIGhhcyBub3QgYmVlbiBvdmVycmlkZGVuIG9yIGlmIGEgbmV3IGdldHJhbmRiaXRzKCkgd2FzIHN1cHBsaWVkLgotICAgICAgICBpZiB0eXBlKHNlbGYucmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKKyAgICAgICAgaWYgdHlwZShyYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgogICAgICAgICAgICAgayA9IG4uYml0X2xlbmd0aCgpICAjIGRvbid0IHVzZSAobi0xKSBoZXJlIGJlY2F1c2UgbiBjYW4gYmUgMQogICAgICAgICAgICAgciA9IGdldHJhbmRiaXRzKGspICAgICAgICAgICMgMCA8PSByIDwgMioqawogICAgICAgICAgICAgd2hpbGUgciA+PSBuOgpAQCAtMjI3LDcgKzIzMSw2IEBACiAgICAgICAgICAgICByZXR1cm4gcgogICAgICAgICAjIFRoZXJlJ3MgYW4gb3ZlcnJpZGVuIHJhbmRvbSgpIG1ldGhvZCBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kLAogICAgICAgICAjIHNvIHdlIGNhbiBvbmx5IHVzZSByYW5kb20oKSBmcm9tIGhlcmUuCi0gICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGlmIG4gPj0gbWF4c2l6ZToKICAgICAgICAgICAgIF93YXJuKCJVbmRlcmx5aW5nIHJhbmRvbSgpIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwbHkgXG4iCiAgICAgICAgICAgICAgICAgImVub3VnaCBiaXRzIHRvIGNob29zZSBmcm9tIGEgcG9wdWxhdGlvbiByYW5nZSB0aGlzIGxhcmdlLlxuIgpAQCAtMjUxLDEwICsyNTQsMTEgQEAKICAgICAgICAgcmV0dXJuIHNlcVtpXQogCiAgICAgZGVmIHNodWZmbGUoc2VsZiwgeCwgcmFuZG9tPU5vbmUpOgotICAgICAgICAiIiJ4LCByYW5kb209cmFuZG9tLnJhbmRvbSAtPiBzaHVmZmxlIGxpc3QgeCBpbiBwbGFjZTsgcmV0dXJuIE5vbmUuCisgICAgICAgICIiIlNodWZmbGUgbGlzdCB4IGluIHBsYWNlLCBhbmQgcmV0dXJuIE5vbmUuCiAKLSAgICAgICAgT3B0aW9uYWwgYXJnIHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcmFuZG9tCi0gICAgICAgIGZsb2F0IGluIFswLjAsIDEuMCk7IGJ5IGRlZmF1bHQsIHRoZSBzdGFuZGFyZCByYW5kb20ucmFuZG9tLgorICAgICAgICBPcHRpb25hbCBhcmd1bWVudCByYW5kb20gaXMgYSAwLWFyZ3VtZW50IGZ1bmN0aW9uIHJldHVybmluZyBhCisgICAgICAgIHJhbmRvbSBmbG9hdCBpbiBbMC4wLCAxLjApOyBpZiBpdCBpcyB0aGUgZGVmYXVsdCBOb25lLCB0aGUKKyAgICAgICAgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbSB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi9yZS5weSBiL0xpYi9yZS5weQppbmRleCBmY2VhMTkwLi43N2Y1ZTNmIDEwMDY0NAotLS0gYS9MaWIvcmUucHkKKysrIGIvTGliL3JlLnB5CkBAIC04NSwxNiArODUsMTcgQEAKICAgICBcXCAgICAgICBNYXRjaGVzIGEgbGl0ZXJhbCBiYWNrc2xhc2guCiAKIFRoaXMgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci0gICAgbWF0Y2ggICAgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgotICAgIHNlYXJjaCAgIFNlYXJjaCBhIHN0cmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcGF0dGVybi4KLSAgICBzdWIgICAgICBTdWJzdGl0dXRlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBmb3VuZCBpbiBhIHN0cmluZy4KLSAgICBzdWJuICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgotICAgIHNwbGl0ICAgIFNwbGl0IGEgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4uCi0gICAgZmluZGFsbCAgRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nLgotICAgIGZpbmRpdGVyIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KLSAgICBjb21waWxlICBDb21waWxlIGEgcGF0dGVybiBpbnRvIGEgUmVnZXhPYmplY3QuCi0gICAgcHVyZ2UgICAgQ2xlYXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4KLSAgICBlc2NhcGUgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgorICAgIG1hdGNoICAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCisgICAgZnVsbG1hdGNoIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gYWxsIG9mIGEgc3RyaW5nLgorICAgIHNlYXJjaCAgICBTZWFyY2ggYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHBhdHRlcm4uCisgICAgc3ViICAgICAgIFN1YnN0aXR1dGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGZvdW5kIGluIGEgc3RyaW5nLgorICAgIHN1Ym4gICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgorICAgIHNwbGl0ICAgICBTcGxpdCBhIHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLgorICAgIGZpbmRhbGwgICBGaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcuCisgICAgZmluZGl0ZXIgIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KKyAgICBjb21waWxlICAgQ29tcGlsZSBhIHBhdHRlcm4gaW50byBhIFJlZ2V4T2JqZWN0LgorICAgIHB1cmdlICAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgorICAgIGVzY2FwZSAgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgogCiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZXMgZmxhZ3MgYXMgb3B0aW9uYWwgcGFyYW1ldGVyczoKICAgICBBICBBU0NJSSAgICAgICBGb3Igc3RyaW5nIHBhdHRlcm5zLCBtYWtlIFx3LCBcVywgXGIsIFxCLCBcZCwgXEQKQEAgLTEyMSwxMCArMTIyLDkgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBzcmVfY29tcGlsZQogaW1wb3J0IHNyZV9wYXJzZQotaW1wb3J0IGZ1bmN0b29scwogCiAjIHB1YmxpYyBzeW1ib2xzCi1fX2FsbF9fID0gWyAibWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwgImZpbmRhbGwiLAorX19hbGxfXyA9IFsgIm1hdGNoIiwgImZ1bGxtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCiAgICAgImNvbXBpbGUiLCAicHVyZ2UiLCAidGVtcGxhdGUiLCAiZXNjYXBlIiwgIkEiLCAiSSIsICJMIiwgIk0iLCAiUyIsICJYIiwKICAgICAiVSIsICJBU0NJSSIsICJJR05PUkVDQVNFIiwgIkxPQ0FMRSIsICJNVUxUSUxJTkUiLCAiRE9UQUxMIiwgIlZFUkJPU0UiLAogICAgICJVTklDT0RFIiwgImVycm9yIiBdCkBAIC0xNTUsNiArMTU1LDExIEBACiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgogICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykubWF0Y2goc3RyaW5nKQogCitkZWYgZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6CisgICAgIiIiVHJ5IHRvIGFwcGx5IHRoZSBwYXR0ZXJuIHRvIGFsbCBvZiB0aGUgc3RyaW5nLCByZXR1cm5pbmcKKyAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCisgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5mdWxsbWF0Y2goc3RyaW5nKQorCiBkZWYgc2VhcmNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6CiAgICAgIiIiU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoIHRvIHRoZSBwYXR0ZXJuLCByZXR1cm5pbmcKICAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCmRpZmYgLS1naXQgYS9MaWIvcmxjb21wbGV0ZXIucHkgYi9MaWIvcmxjb21wbGV0ZXIucHkKaW5kZXggM2Y5NzA1My4uOTRmOTM0MSAxMDA2NDQKLS0tIGEvTGliL3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi9ybGNvbXBsZXRlci5weQpAQCAtMjksNiArMjksNyBAQAogCiAiIiIKIAoraW1wb3J0IGF0ZXhpdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgX19tYWluX18KIApAQCAtMTU4LDMgKzE1OSw3IEBACiAgICAgcGFzcwogZWxzZToKICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyKENvbXBsZXRlcigpLmNvbXBsZXRlKQorICAgICMgUmVsZWFzZSByZWZlcmVuY2VzIGVhcmx5IGF0IHNodXRkb3duICh0aGUgcmVhZGxpbmUgbW9kdWxlJ3MKKyAgICAjIGNvbnRlbnRzIGFyZSBxdWFzaS1pbW1vcnRhbCwgYW5kIHRoZSBjb21wbGV0ZXIgZnVuY3Rpb24gaG9sZHMgYQorICAgICMgcmVmZXJlbmNlIHRvIGdsb2JhbHMpLgorICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHJlYWRsaW5lLnNldF9jb21wbGV0ZXIoTm9uZSkpCmRpZmYgLS1naXQgYS9MaWIvcnVucHkucHkgYi9MaWIvcnVucHkucHkKaW5kZXggMzljMGU5Zi4uMWUwYTJiZSAxMDA2NDQKLS0tIGEvTGliL3J1bnB5LnB5CisrKyBiL0xpYi9ydW5weS5weQpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeSAjIGltcG9ydGxpYiBmaXJzdCBzbyB3ZSBjYW4gdGVzdCAjMTUzODYgdmlhIC1tCi1pbXBvcnQgaW1wCitpbXBvcnQgdHlwZXMKIGZyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfbG9hZGVyLCBnZXRfaW1wb3J0ZXIKIAogX19hbGxfXyA9IFsKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKICAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCi0gICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2RfbmFtZSkKICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC0yMjMsNyArMjIzLDEyIEBACiAgICAgICAgIHJ1bl9uYW1lID0gIjxydW5fcGF0aD4iCiAgICAgcGtnX25hbWUgPSBydW5fbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KICAgICBpbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoX25hbWUpCi0gICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgKHR5cGUoTm9uZSksIGltcC5OdWxsSW1wb3J0ZXIpKToKKyAgICAjIFRyeWluZyB0byBhdm9pZCBpbXBvcnRpbmcgaW1wIHNvIGFzIHRvIG5vdCBjb25zdW1lIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgIGlzX051bGxJbXBvcnRlciA9IEZhbHNlCisgICAgaWYgdHlwZShpbXBvcnRlcikuX19tb2R1bGVfXyA9PSAnaW1wJzoKKyAgICAgICAgaWYgdHlwZShpbXBvcnRlcikuX19uYW1lX18gPT0gJ051bGxJbXBvcnRlcic6CisgICAgICAgICAgICBpc19OdWxsSW1wb3J0ZXIgPSBUcnVlCisgICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgdHlwZShOb25lKSkgb3IgaXNfTnVsbEltcG9ydGVyOgogICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKICAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCiAgICAgICAgIGNvZGUsIG1vZF9sb2FkZXIgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHJ1bl9uYW1lLCBwYXRoX25hbWUpCmRpZmYgLS1naXQgYS9MaWIvc2NoZWQucHkgYi9MaWIvc2NoZWQucHkKaW5kZXggYjlhN2FkMS4uMmU2YjAwYSAxMDA2NDQKLS0tIGEvTGliL3NjaGVkLnB5CisrKyBiL0xpYi9zY2hlZC5weQpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBrd2FyZ3MgaXMgX3NlbnRpbmVsOgogICAgICAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9xdWV1ZSwgZXZlbnQpCi0gICAgICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKKyAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECiAKICAgICBkZWYgZW50ZXIoc2VsZiwgZGVsYXksIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50PSgpLCBrd2FyZ3M9X3NlbnRpbmVsKToKICAgICAgICAgIiIiQSB2YXJpYW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGFzIGEgcmVsYXRpdmUgdGltZS4KQEAgLTgyLDkgKzgyLDggQEAKICAgICAgICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgbW9yZSBjb21tb25seSB1c2VkIGludGVyZmFjZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQorICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKIAogICAgIGRlZiBjYW5jZWwoc2VsZiwgZXZlbnQpOgogICAgICAgICAiIiJSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcXVldWUuCkBAIC0xNjUsNCArMTY0LDQgQEAKICAgICAgICAgIyB0aGUgYWN0dWFsIG9yZGVyIHRoZXkgd291bGQgYmUgcmV0cmlldmVkLgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBldmVudHMgPSBzZWxmLl9xdWV1ZVs6XQotICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKKyAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKZGlmZiAtLWdpdCBhL0xpYi9zZWxlY3RvcnMucHkgYi9MaWIvc2VsZWN0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDMxIEBACisiIiJTZWxlY3RvcnMgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCitgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKyIiIgorCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgTWFwcGluZworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworCisKKyMgZ2VuZXJpYyBldmVudHMsIHRoYXQgbXVzdCBiZSBtYXBwZWQgdG8gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgb25lcworRVZFTlRfUkVBRCA9ICgxIDw8IDApCitFVkVOVF9XUklURSA9ICgxIDw8IDEpCisKKworZGVmIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopOgorICAgICIiIlJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBvYmplY3QuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisKKyAgICBSZXR1cm5zOgorICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBkZXNjcmlwdG9yCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBpbnQpOgorICAgICAgICBmZCA9IGZpbGVvYmoKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGludChmaWxlb2JqLmZpbGVubygpKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIG9iamVjdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICBpZiBmZCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiB7fSIuZm9ybWF0KGZkKSkKKyAgICByZXR1cm4gZmQKKworCitTZWxlY3RvcktleSA9IG5hbWVkdHVwbGUoJ1NlbGVjdG9yS2V5JywgWydmaWxlb2JqJywgJ2ZkJywgJ2V2ZW50cycsICdkYXRhJ10pCisiIiJPYmplY3QgdXNlZCB0byBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgYmFja2luZyBmaWxlIGRlc2NyaXB0b3IsCitzZWxlY3RlZCBldmVudCBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiIiIgorCisKK2NsYXNzIF9TZWxlY3Rvck1hcHBpbmcoTWFwcGluZyk6CisgICAgIiIiTWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworCitjbGFzcyBCYXNlU2VsZWN0b3IobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIkJhc2Ugc2VsZWN0b3IgY2xhc3MuCisKKyAgICBBIHNlbGVjdG9yIHN1cHBvcnRzIHJlZ2lzdGVyaW5nIGZpbGUgb2JqZWN0cyB0byBiZSBtb25pdG9yZWQgZm9yIHNwZWNpZmljCisgICAgSS9PIGV2ZW50cy4KKworICAgIEEgZmlsZSBvYmplY3QgaXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgYW55IG9iamVjdCB3aXRoIGEgYGZpbGVubygpYCBtZXRob2QuCisgICAgQW4gYXJiaXRyYXJ5IG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIGZpbGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZAorICAgIGZvciBleGFtcGxlIHRvIHN0b3JlIGNvbnRleHQgaW5mb3JtYXRpb24sIGEgY2FsbGJhY2ssIGV0Yy4KKworICAgIEEgc2VsZWN0b3IgY2FuIHVzZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucyAoc2VsZWN0KCksIHBvbGwoKSwgZXBvbGwoKS4uLikKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLiBUaGUgZGVmYXVsdCBgU2VsZWN0b3JgIGNsYXNzIHVzZXMgdGhlIG1vc3QKKyAgICBwZXJmb3JtYW50IGltcGxlbWVudGF0aW9uIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIHRoaXMgbWFwcyBmaWxlIGRlc2NyaXB0b3JzIHRvIGtleXMKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5ID0ge30KKyAgICAgICAgIyByZWFkLW9ubHkgbWFwcGluZyByZXR1cm5lZCBieSBnZXRfbWFwKCkKKyAgICAgICAgc2VsZi5fbWFwID0gX1NlbGVjdG9yTWFwcGluZyhzZWxmKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBmaWxlIG9iamVjdC4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIGlmIChub3QgZXZlbnRzKSBvciAoZXZlbnRzICYgfihFVkVOVF9SRUFEIHwgRVZFTlRfV1JJVEUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZXZlbnRzOiB7IXJ9Ii5mb3JtYXQoZXZlbnRzKSkKKworICAgICAgICBrZXkgPSBTZWxlY3RvcktleShmaWxlb2JqLCBfZmlsZW9ial90b19mZChmaWxlb2JqKSwgZXZlbnRzLCBkYXRhKQorCisgICAgICAgIGlmIGtleS5mZCBpbiBzZWxmLl9mZF90b19rZXk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSAoRkQge30pIGlzIGFscmVhZHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqLCBrZXkuZmQpKQorCisgICAgICAgIHNlbGYuX2ZkX3RvX2tleVtrZXkuZmRdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5LnBvcChfZmlsZW9ial90b19mZChmaWxlb2JqKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0IG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgICMgVE9ETzogU3ViY2xhc3NlcyBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBldmVuIGZ1cnRoZXIuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleVtfZmlsZW9ial90b19mZChmaWxlb2JqKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgICAgIGlmIGV2ZW50cyAhPSBrZXkuZXZlbnRzOgorICAgICAgICAgICAgc2VsZi51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBrZXkgPSBzZWxmLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgZWxpZiBkYXRhICE9IGtleS5kYXRhOgorICAgICAgICAgICAgIyBVc2UgYSBzaG9ydGN1dCB0byB1cGRhdGUgdGhlIGRhdGEuCisgICAgICAgICAgICBrZXkgPSBrZXkuX3JlcGxhY2UoZGF0YT1kYXRhKQorICAgICAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJQZXJmb3JtIHRoZSBhY3R1YWwgc2VsZWN0aW9uLCB1bnRpbCBzb21lIG1vbml0b3JlZCBmaWxlIG9iamVjdHMgYXJlCisgICAgICAgIHJlYWR5IG9yIGEgdGltZW91dCBleHBpcmVzLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRpbWVvdXQgLS0gaWYgdGltZW91dCA+IDAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4KKyAgICAgICAgICAgICAgICAgICBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwLCB0aGUgc2VsZWN0KCkgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGN1cnJlbnRseSByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmUsIHNlbGVjdCgpIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQKKyAgICAgICAgICAgICAgICAgICBmaWxlIG9iamVjdCBiZWNvbWVzIHJlYWR5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgbGlzdCBvZiAoa2V5LCBldmVudHMpIGZvciByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgYGV2ZW50c2AgaXMgYSBiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBzZWxlY3Rvci4KKworICAgICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIGZyZWVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5LmNsZWFyKCkKKworICAgIGRlZiBnZXRfa2V5KHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBmb3IgdGhpcyBmaWxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZkX3RvX2tleVtfZmlsZW9ial90b19mZChmaWxlb2JqKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hcAorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9rZXlfZnJvbV9mZChzZWxmLCBmZCk6CisgICAgICAgICIiIlJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmQgLS0gZmlsZSBkZXNjcmlwdG9yCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgY29ycmVzcG9uZGluZyBrZXksIG9yIE5vbmUgaWYgbm90IGZvdW5kCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmRfdG9fa2V5W2ZkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yKEJhc2VTZWxlY3Rvcik6CisgICAgIiIiU2VsZWN0LWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fcmVhZGVycyA9IHNldCgpCisgICAgICAgIHNlbGYuX3dyaXRlcnMgPSBzZXQoKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICBzZWxmLl9yZWFkZXJzLmFkZChrZXkuZmQpCisgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVycy5hZGQoa2V5LmZkKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgIHNlbGYuX3JlYWRlcnMuZGlzY2FyZChrZXkuZmQpCisgICAgICAgIHNlbGYuX3dyaXRlcnMuZGlzY2FyZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBkZWYgX3NlbGVjdChzZWxmLCByLCB3LCBfLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QociwgdywgdywgdGltZW91dCkKKyAgICAgICAgICAgIHJldHVybiByLCB3ICsgeCwgW10KKyAgICBlbHNlOgorICAgICAgICBfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICB0aW1lb3V0ID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBtYXgodGltZW91dCwgMCkKKyAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICByLCB3LCBfID0gc2VsZi5fc2VsZWN0KHNlbGYuX3JlYWRlcnMsIHNlbGYuX3dyaXRlcnMsIFtdLCB0aW1lb3V0KQorICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICByID0gc2V0KHIpCisgICAgICAgIHcgPSBzZXQodykKKyAgICAgICAgZm9yIGZkIGluIHIgfCB3OgorICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZmQgaW4gcjoKKyAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorICAgICAgICAgICAgaWYgZmQgaW4gdzoKKyAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICByZXR1cm4gcmVhZHkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKKworICAgIGNsYXNzIFBvbGxTZWxlY3RvcihCYXNlU2VsZWN0b3IpOgorICAgICAgICAiIiJQb2xsLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGVjdC5wb2xsKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExJTgorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX3BvbGwucmVnaXN0ZXIoa2V5LmZkLCBwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fcG9sbC51bnJlZ2lzdGVyKGtleS5mZCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBtYXgoaW50KDEwMDAgKiB0aW1lb3V0KSwgMCkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9ldmVudF9saXN0ID0gc2VsZi5fcG9sbC5wb2xsKHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gZmRfZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAnZXBvbGwnKToKKworICAgIGNsYXNzIEVwb2xsU2VsZWN0b3IoQmFzZVNlbGVjdG9yKToKKyAgICAgICAgIiIiRXBvbGwtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9lcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcG9sbC5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIGVwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgZXBvbGxfZXZlbnRzIHw9IHNlbGVjdC5FUE9MTElOCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9lcG9sbC5yZWdpc3RlcihrZXkuZmQsIGVwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fZXBvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IC0xIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICAgICAgbWF4X2V2ID0gbGVuKHNlbGYuX2ZkX3RvX2tleSkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9ldmVudF9saXN0ID0gc2VsZi5fZXBvbGwucG9sbCh0aW1lb3V0LCBtYXhfZXYpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gZmRfZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LkVQT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5FUE9MTE9VVDoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZXBvbGwuY2xvc2UoKQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKworaWYgaGFzYXR0cihzZWxlY3QsICdrcXVldWUnKToKKworICAgIGNsYXNzIEtxdWV1ZVNlbGVjdG9yKEJhc2VTZWxlY3Rvcik6CisgICAgICAgICIiIktxdWV1ZS1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2txdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fa3F1ZXVlLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICBpZiBrZXkuZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfREVMRVRFKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICAgICAgbWF4X2V2ID0gbGVuKHNlbGYuX2ZkX3RvX2tleSkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrZXZfbGlzdCA9IHNlbGYuX2txdWV1ZS5jb250cm9sKE5vbmUsIG1heF9ldiwgdGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGtldiBpbiBrZXZfbGlzdDoKKyAgICAgICAgICAgICAgICBmZCA9IGtldi5pZGVudAorICAgICAgICAgICAgICAgIGZsYWcgPSBrZXYuZmlsdGVyCisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9SRUFEOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9XUklURToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jbG9zZSgpCisgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCisjIENob29zZSB0aGUgYmVzdCBpbXBsZW1lbnRhdGlvbjogcm91Z2hseSwgZXBvbGx8a3F1ZXVlID4gcG9sbCA+IHNlbGVjdC4KKyMgc2VsZWN0KCkgYWxzbyBjYW4ndCBhY2NlcHQgYSBGRCA+IEZEX1NFVFNJWkUgKHVzdWFsbHkgYXJvdW5kIDEwMjQpCitpZiAnS3F1ZXVlU2VsZWN0b3InIGluIGdsb2JhbHMoKToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBLcXVldWVTZWxlY3RvcgorZWxpZiAnRXBvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEVwb2xsU2VsZWN0b3IKK2VsaWYgJ1BvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBTZWxlY3RTZWxlY3RvcgpkaWZmIC0tZ2l0IGEvTGliL3NoZWx2ZS5weSBiL0xpYi9zaGVsdmUucHkKaW5kZXggY2MxODE1ZS4uY2VmNTgwZSAxMDA2NDQKLS0tIGEvTGliL3NoZWx2ZS5weQorKysgYi9MaWIvc2hlbHZlLnB5CkBAIC02MSw3ICs2MSw3IEBACiAKIGltcG9ydCBjb2xsZWN0aW9ucwogCi1fX2FsbF9fID0gWyJTaGVsZiIsIkJzZERiU2hlbGYiLCJEYmZpbGVuYW1lU2hlbGYiLCJvcGVuIl0KK19fYWxsX18gPSBbIlNoZWxmIiwgIkJzZERiU2hlbGYiLCAiRGJmaWxlbmFtZVNoZWxmIiwgIm9wZW4iXQogCiBjbGFzcyBfQ2xvc2VkRGljdChjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAgICAgJ01hcmtlciBmb3IgYSBjbG9zZWQgZGljdC4gIEFjY2VzcyBhdHRlbXB0cyByYWlzZSBhIFZhbHVlRXJyb3IuJwpAQCAtMTMxLDYgKzEzMSwxMiBAQAogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5zeW5jKCkKICAgICAgICAgdHJ5OgpAQCAtMTQ3LDYgKzE1Myw3IEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICd3cml0ZWJhY2snKToKICAgICAgICAgICAgICMgX19pbml0X18gZGlkbid0IHN1Y2NlZWQsIHNvIGRvbid0IGJvdGhlciBjbG9zaW5nCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMzOTAwNyBmb3IgZGV0YWlscwogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvc2h1dGlsLnB5IGIvTGliL3NodXRpbC5weQppbmRleCBhNWIyZDI0Li41MDJiYjY3IDEwMDY0NAotLS0gYS9MaWIvc2h1dGlsLnB5CisrKyBiL0xpYi9zaHV0aWwucHkKQEAgLTM5LDE3ICszOSwyMCBAQAogICAgICAgICAgICAiaWdub3JlX3BhdHRlcm5zIiwgImNob3duIiwgIndoaWNoIl0KICAgICAgICAgICAgIyBkaXNrX3VzYWdlIGlzIGFkZGVkIGxhdGVyLCBpZiBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtCiAKLWNsYXNzIEVycm9yKEVudmlyb25tZW50RXJyb3IpOgorY2xhc3MgRXJyb3IoT1NFcnJvcik6CiAgICAgcGFzcwogCi1jbGFzcyBTcGVjaWFsRmlsZUVycm9yKEVudmlyb25tZW50RXJyb3IpOgorY2xhc3MgU2FtZUZpbGVFcnJvcihFcnJvcik6CisgICAgIiIiUmFpc2VkIHdoZW4gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZS4iIiIKKworY2xhc3MgU3BlY2lhbEZpbGVFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiB0cnlpbmcgdG8gZG8gYSBraW5kIG9mIG9wZXJhdGlvbiAoZS5nLiBjb3B5aW5nKSB3aGljaCBpcwogICAgIG5vdCBzdXBwb3J0ZWQgb24gYSBzcGVjaWFsIGZpbGUgKGUuZy4gYSBuYW1lZCBwaXBlKSIiIgogCi1jbGFzcyBFeGVjRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFeGVjRXJyb3IoT1NFcnJvcik6CiAgICAgIiIiUmFpc2VkIHdoZW4gYSBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCIiIgogCi1jbGFzcyBSZWFkRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBSZWFkRXJyb3IoT1NFcnJvcik6CiAgICAgIiIiUmFpc2VkIHdoZW4gYW4gYXJjaGl2ZSBjYW5ub3QgYmUgcmVhZCIiIgogCiBjbGFzcyBSZWdpc3RyeUVycm9yKEV4Y2VwdGlvbik6CkBAIC01NywxMSArNjAsNiBAQAogICAgIGFuZCB1bnBhY2tpbmcgcmVnaXN0ZXJpZXMgZmFpbHMiIiIKIAogCi10cnk6Ci0gICAgV2luZG93c0Vycm9yCi1leGNlcHQgTmFtZUVycm9yOgotICAgIFdpbmRvd3NFcnJvciA9IE5vbmUKLQogZGVmIGNvcHlmaWxlb2JqKGZzcmMsIGZkc3QsIGxlbmd0aD0xNioxMDI0KToKICAgICAiIiJjb3B5IGRhdGEgZnJvbSBmaWxlLWxpa2Ugb2JqZWN0IGZzcmMgdG8gZmlsZS1saWtlIG9iamVjdCBmZHN0IiIiCiAgICAgd2hpbGUgMToKQEAgLTkwLDcgKzg4LDcgQEAKIAogICAgICIiIgogICAgIGlmIF9zYW1lZmlsZShzcmMsIGRzdCk6Ci0gICAgICAgIHJhaXNlIEVycm9yKCJgJXNgIGFuZCBgJXNgIGFyZSB0aGUgc2FtZSBmaWxlIiAlIChzcmMsIGRzdCkpCisgICAgICAgIHJhaXNlIFNhbWVGaWxlRXJyb3IoInshcn0gYW5kIHshcn0gYXJlIHRoZSBzYW1lIGZpbGUiLmZvcm1hdChzcmMsIGRzdCkpCiAKICAgICBmb3IgZm4gaW4gW3NyYywgZHN0XToKICAgICAgICAgdHJ5OgpAQCAtMjIxLDYgKzIxOSw5IEBACiAgICAgSWYgZm9sbG93X3N5bWxpbmtzIGlzIGZhbHNlLCBzeW1saW5rcyB3b24ndCBiZSBmb2xsb3dlZC4gVGhpcwogICAgIHJlc2VtYmxlcyBHTlUncyAiY3AgLVAgc3JjIGRzdCIuCiAKKyAgICBJZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLCBhIFNhbWVGaWxlRXJyb3Igd2lsbCBiZQorICAgIHJhaXNlZC4KKwogICAgICIiIgogICAgIGlmIG9zLnBhdGguaXNkaXIoZHN0KToKICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGRzdCwgb3MucGF0aC5iYXNlbmFtZShzcmMpKQpAQCAtMzI5LDE1ICszMzAsMTMgQEAKICAgICAgICAgIyBjb250aW51ZSB3aXRoIG90aGVyIGZpbGVzCiAgICAgICAgIGV4Y2VwdCBFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICB0cnk6CiAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQogICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgaWYgV2luZG93c0Vycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKHdoeSwgV2luZG93c0Vycm9yKToKLSAgICAgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6CisgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCisgICAgICAgIGlmIHdoeS53aW5lcnJvciBpcyBOb25lOgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICBpZiBlcnJvcnM6CiAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKQEAgLTM1NiwyNCArMzU1LDI0IEBACiAgICAgbmFtZXMgPSBbXQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLmxpc3RkaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2RlID0gb3MubHN0YXQoZnVsbG5hbWUpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG1vZGUgPSAwCiAgICAgICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKICAgICAgICAgICAgIF9ybXRyZWVfdW5zYWZlKGZ1bGxuYW1lLCBvbmVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIG9uZXJyb3Iob3MudW5saW5rLCBmdWxsbmFtZSwgc3lzLmV4Y19pbmZvKCkpCiAgICAgdHJ5OgogICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKICMgVmVyc2lvbiB1c2luZyBmZC1iYXNlZCBBUElzIHRvIHByb3RlY3QgYWdhaW5zdCByYWNlcwpAQCAtNDY0LDcgKzQ2Myw3IEBACiAgICAgICAgICAgICAgICAgX3JtdHJlZV9zYWZlX2ZkKGZkLCBwYXRoLCBvbmVycm9yKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3Iob3Mucm1kaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvc2l0ZS5weSBiL0xpYi9zaXRlLnB5CmluZGV4IDdlMDk3MDEuLmIwZDgyNjggMTAwNjQ0Ci0tLSBhL0xpYi9zaXRlLnB5CisrKyBiL0xpYi9zaXRlLnB5CkBAIC01OCwxNyArNTgsMjAgQEAKIGJlY2F1c2UgYmFyLnB0aCBjb21lcyBhbHBoYWJldGljYWxseSBiZWZvcmUgZm9vLnB0aDsgYW5kIHNwYW0gaXMKIG9taXR0ZWQgYmVjYXVzZSBpdCBpcyBub3QgbWVudGlvbmVkIGluIGVpdGhlciBwYXRoIGNvbmZpZ3VyYXRpb24gZmlsZS4KIAotQWZ0ZXIgdGhlc2UgcGF0aCBtYW5pcHVsYXRpb25zLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaW1wb3J0IGEgbW9kdWxlCitUaGUgcmVhZGxpbmUgbW9kdWxlIGlzIGFsc28gYXV0b21hdGljYWxseSBjb25maWd1cmVkIHRvIGVuYWJsZQorY29tcGxldGlvbiBmb3Igc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQuICBUaGlzIGNhbiBiZSBvdmVycmlkZW4gaW4KK3NpdGVjdXN0b21pemUsIHVzZXJjdXN0b21pemUgb3IgUFlUSE9OU1RBUlRVUC4KKworQWZ0ZXIgdGhlc2Ugb3BlcmF0aW9ucywgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGltcG9ydCBhIG1vZHVsZQogbmFtZWQgc2l0ZWN1c3RvbWl6ZSwgd2hpY2ggY2FuIHBlcmZvcm0gYXJiaXRyYXJ5IGFkZGl0aW9uYWwKIHNpdGUtc3BlY2lmaWMgY3VzdG9taXphdGlvbnMuICBJZiB0aGlzIGltcG9ydCBmYWlscyB3aXRoIGFuCiBJbXBvcnRFcnJvciBleGNlcHRpb24sIGl0IGlzIHNpbGVudGx5IGlnbm9yZWQuCi0KICIiIgogCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgX3NpdGVidWlsdGlucwogCiAjIFByZWZpeGVzIGZvciBzaXRlLXBhY2thZ2VzOyBhZGQgYWRkaXRpb25hbCBwcmVmaXhlcyBsaWtlIC91c3IvbG9jYWwgaGVyZQogUFJFRklYRVMgPSBbc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4XQpAQCAtMTQ2LDE0ICsxNDksMTQgQEAKICAgICAgICBhbmQgYWRkIHRoYXQgdG8ga25vd25fcGF0aHMsIG9yIGV4ZWN1dGUgaXQgaWYgaXQgc3RhcnRzIHdpdGggJ2ltcG9ydCAnLgogICAgICIiIgogICAgIGlmIGtub3duX3BhdGhzIGlzIE5vbmU6Ci0gICAgICAgIF9pbml0X3BhdGhpbmZvKCkKKyAgICAgICAga25vd25fcGF0aHMgPSBfaW5pdF9wYXRoaW5mbygpCiAgICAgICAgIHJlc2V0ID0gMQogICAgIGVsc2U6CiAgICAgICAgIHJlc2V0ID0gMAogICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHNpdGVkaXIsIG5hbWUpCiAgICAgdHJ5OgogICAgICAgICBmID0gb3BlbihmdWxsbmFtZSwgInIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4KICAgICB3aXRoIGY6CiAgICAgICAgIGZvciBuLCBsaW5lIGluIGVudW1lcmF0ZShmKToKQEAgLTE5Niw3ICsxOTksNyBAQAogICAgICAgICBrbm93bl9wYXRocy5hZGQoc2l0ZWRpcmNhc2UpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2l0ZWRpcikKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybgogICAgIG5hbWVzID0gW25hbWUgZm9yIG5hbWUgaW4gbmFtZXMgaWYgbmFtZS5lbmRzd2l0aCgiLnB0aCIpXQogICAgIGZvciBuYW1lIGluIHNvcnRlZChuYW1lcyk6CkBAIC0zMDAsOSArMzAzLDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHNlZW4uYWRkKHByZWZpeCkKIAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6Ci0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQotICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6CiAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCkBAIC0zMjUsMjcgKzMyNiwxNSBAQAogICAgICIiIkFkZCBzaXRlLXBhY2thZ2VzIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pIHRvIHN5cy5wYXRoIiIiCiAgICAgZm9yIHNpdGVkaXIgaW4gZ2V0c2l0ZXBhY2thZ2VzKHByZWZpeGVzKToKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzaXRlZGlyKToKKyAgICAgICAgICAgIGlmICJzaXRlLXB5dGhvbiIgaW4gc2l0ZWRpcjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCcic2l0ZS1weXRob24iIGRpcmVjdG9yaWVzIHdpbGwgbm90IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdXBwb3J0ZWQgaW4gMy41IGFueW1vcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgICAgICAgICAgYWRkc2l0ZWRpcihzaXRlZGlyLCBrbm93bl9wYXRocykKIAogICAgIHJldHVybiBrbm93bl9wYXRocwogCi1kZWYgc2V0QkVHSU5MSUJQQVRIKCk6Ci0gICAgIiIiVGhlIE9TLzIgRU1YIHBvcnQgaGFzIG9wdGlvbmFsIGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgZG8gZG91YmxlIGR1dHkKLSAgICBhcyBETExzIChhbmQgbXVzdCB1c2UgdGhlIC5ETEwgZmlsZSBleHRlbnNpb24pIGZvciBvdGhlciBleHRlbnNpb25zLgotICAgIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIG5lZWRzIHRvIGJlIGFtZW5kZWQgc28gdGhlc2Ugd2lsbCBiZSBmb3VuZAotICAgIGR1cmluZyBtb2R1bGUgaW1wb3J0LiAgVXNlIEJFR0lOTElCUEFUSCBzbyB0aGF0IHRoZXNlIGFyZSBhdCB0aGUgc3RhcnQKLSAgICBvZiB0aGUgbGlicmFyeSBzZWFyY2ggcGF0aC4KLQotICAgICIiIgotICAgIGRsbHBhdGggPSBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgIkxpYiIsICJsaWItZHlubG9hZCIpCi0gICAgbGlicGF0aCA9IG9zLmVudmlyb25bJ0JFR0lOTElCUEFUSCddLnNwbGl0KCc7JykKLSAgICBpZiBsaWJwYXRoWy0xXToKLSAgICAgICAgbGlicGF0aC5hcHBlbmQoZGxscGF0aCkKLSAgICBlbHNlOgotICAgICAgICBsaWJwYXRoWy0xXSA9IGRsbHBhdGgKLSAgICBvcy5lbnZpcm9uWydCRUdJTkxJQlBBVEgnXSA9ICc7Jy5qb2luKGxpYnBhdGgpCi0KLQogZGVmIHNldHF1aXQoKToKICAgICAiIiJEZWZpbmUgbmV3IGJ1aWx0aW5zICdxdWl0JyBhbmQgJ2V4aXQnLgogCkBAIC0zNjAsMTI2ICszNDksODkgQEAKICAgICBlbHNlOgogICAgICAgICBlb2YgPSAnQ3RybC1EIChpLmUuIEVPRiknCiAKLSAgICBjbGFzcyBRdWl0dGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICdVc2UgJXMoKSBvciAlcyB0byBleGl0JyAlIChzZWxmLm5hbWUsIGVvZikKLSAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNvZGU9Tm9uZSk6Ci0gICAgICAgICAgICAjIFNoZWxscyBsaWtlIElETEUgY2F0Y2ggdGhlIFN5c3RlbUV4aXQsIGJ1dCBsaXN0ZW4gd2hlbiB0aGVpcgotICAgICAgICAgICAgIyBzdGRpbiB3cmFwcGVyIGlzIGNsb3NlZC4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoY29kZSkKLSAgICBidWlsdGlucy5xdWl0ID0gUXVpdHRlcigncXVpdCcpCi0gICAgYnVpbHRpbnMuZXhpdCA9IFF1aXR0ZXIoJ2V4aXQnKQorICAgIGJ1aWx0aW5zLnF1aXQgPSBfc2l0ZWJ1aWx0aW5zLlF1aXR0ZXIoJ3F1aXQnLCBlb2YpCisgICAgYnVpbHRpbnMuZXhpdCA9IF9zaXRlYnVpbHRpbnMuUXVpdHRlcignZXhpdCcsIGVvZikKIAogCi1jbGFzcyBfUHJpbnRlcihvYmplY3QpOgotICAgICIiImludGVyYWN0aXZlIHByb21wdCBvYmplY3RzIGZvciBwcmludGluZyB0aGUgbGljZW5zZSB0ZXh0LCBhIGxpc3Qgb2YKLSAgICBjb250cmlidXRvcnMgYW5kIHRoZSBjb3B5cmlnaHQgbm90aWNlLiIiIgotCi0gICAgTUFYTElORVMgPSAyMwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRhdGEsIGZpbGVzPSgpLCBkaXJzPSgpKToKLSAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuX19kYXRhID0gZGF0YQotICAgICAgICBzZWxmLl9fZmlsZXMgPSBmaWxlcwotICAgICAgICBzZWxmLl9fZGlycyA9IGRpcnMKLSAgICAgICAgc2VsZi5fX2xpbmVzID0gTm9uZQotCi0gICAgZGVmIF9fc2V0dXAoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX19saW5lczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkYXRhID0gTm9uZQotICAgICAgICBmb3IgZGlyIGluIHNlbGYuX19kaXJzOgotICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuX19maWxlczoKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAiciIpCi0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19kYXRhCi0gICAgICAgIHNlbGYuX19saW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5fX2xpbmVjbnQgPSBsZW4oc2VsZi5fX2xpbmVzKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2V0dXAoKQotICAgICAgICBpZiBsZW4oc2VsZi5fX2xpbmVzKSA8PSBzZWxmLk1BWExJTkVTOgotICAgICAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLl9fbGluZXMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIlR5cGUgJXMoKSB0byBzZWUgdGhlIGZ1bGwgJXMgdGV4dCIgJSAoKHNlbGYuX19uYW1lLCkqMikKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fX3NldHVwKCkKLSAgICAgICAgcHJvbXB0ID0gJ0hpdCBSZXR1cm4gZm9yIG1vcmUsIG9yIHEgKGFuZCBSZXR1cm4pIHRvIHF1aXQ6ICcKLSAgICAgICAgbGluZW5vID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxpbmVubywgbGluZW5vICsgc2VsZi5NQVhMSU5FUyk6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuX19saW5lc1tpXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpbmVubyArPSBzZWxmLk1BWExJTkVTCi0gICAgICAgICAgICAgICAga2V5ID0gTm9uZQotICAgICAgICAgICAgICAgIHdoaWxlIGtleSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBrZXkgPSBpbnB1dChwcm9tcHQpCi0gICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKCcnLCAncScpOgotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTm9uZQotICAgICAgICAgICAgICAgIGlmIGtleSA9PSAncSc6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KIGRlZiBzZXRjb3B5cmlnaHQoKToKICAgICAiIiJTZXQgJ2NvcHlyaWdodCcgYW5kICdjcmVkaXRzJyBpbiBidWlsdGlucyIiIgotICAgIGJ1aWx0aW5zLmNvcHlyaWdodCA9IF9QcmludGVyKCJjb3B5cmlnaHQiLCBzeXMuY29weXJpZ2h0KQorICAgIGJ1aWx0aW5zLmNvcHlyaWdodCA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoImNvcHlyaWdodCIsIHN5cy5jb3B5cmlnaHQpCiAgICAgaWYgc3lzLnBsYXRmb3JtWzo0XSA9PSAnamF2YSc6Ci0gICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfUHJpbnRlcigKKyAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoCiAgICAgICAgICAgICAiY3JlZGl0cyIsCiAgICAgICAgICAgICAiSnl0aG9uIGlzIG1haW50YWluZWQgYnkgdGhlIEp5dGhvbiBkZXZlbG9wZXJzICh3d3cuanl0aG9uLm9yZykuIikKICAgICBlbHNlOgotICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX1ByaW50ZXIoImNyZWRpdHMiLCAiIiJcCisgICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKCJjcmVkaXRzIiwgIiIiXAogICAgIFRoYW5rcyB0byBDV0ksIENOUkksIEJlT3Blbi5jb20sIFpvcGUgQ29ycG9yYXRpb24gYW5kIGEgY2FzdCBvZiB0aG91c2FuZHMKICAgICBmb3Igc3VwcG9ydGluZyBQeXRob24gZGV2ZWxvcG1lbnQuICBTZWUgd3d3LnB5dGhvbi5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiIiKQogICAgIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pCi0gICAgYnVpbHRpbnMubGljZW5zZSA9IF9QcmludGVyKAorICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAibGljZW5zZSIsCi0gICAgICAgICJTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLyUuNXMvbGljZW5zZS8iICUgc3lzLnZlcnNpb24sCisgICAgICAgICJTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLyUuNXMvbGljZW5zZSIgJSBzeXMudmVyc2lvbiwKICAgICAgICAgWyJMSUNFTlNFLnR4dCIsICJMSUNFTlNFIl0sCiAgICAgICAgIFtvcy5wYXRoLmpvaW4oaGVyZSwgb3MucGFyZGlyKSwgaGVyZSwgb3MuY3VyZGlyXSkKIAogCi1jbGFzcyBfSGVscGVyKG9iamVjdCk6Ci0gICAgIiIiRGVmaW5lIHRoZSBidWlsdGluICdoZWxwJy4KLSAgICBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcHlkb2MuaGVscCAod2l0aCBhIHR3aXN0KS4KLQotICAgICIiIgotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKLSAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIGltcG9ydCBweWRvYwotICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQotCiBkZWYgc2V0aGVscGVyKCk6Ci0gICAgYnVpbHRpbnMuaGVscCA9IF9IZWxwZXIoKQorICAgIGJ1aWx0aW5zLmhlbHAgPSBfc2l0ZWJ1aWx0aW5zLl9IZWxwZXIoKQorCitkZWYgZW5hYmxlcmxjb21wbGV0ZXIoKToKKyAgICAiIiJFbmFibGUgZGVmYXVsdCByZWFkbGluZSBjb25maWd1cmF0aW9uIG9uIGludGVyYWN0aXZlIHByb21wdHMsIGJ5CisgICAgcmVnaXN0ZXJpbmcgYSBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworICAgIElmIHRoZSByZWFkbGluZSBtb2R1bGUgY2FuIGJlIGltcG9ydGVkLCB0aGUgaG9vayB3aWxsIHNldCB0aGUgVGFiIGtleQorICAgIGFzIGNvbXBsZXRpb24ga2V5IGFuZCByZWdpc3RlciB+Ly5weXRob25faGlzdG9yeSBhcyBoaXN0b3J5IGZpbGUuCisgICAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHRoZSBzaXRlY3VzdG9taXplIG9yIHVzZXJjdXN0b21pemUgbW9kdWxlLAorICAgIG9yIGluIGEgUFlUSE9OU1RBUlRVUCBmaWxlLgorICAgICIiIgorICAgIGRlZiByZWdpc3Rlcl9yZWFkbGluZSgpOgorICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZWFkbGluZQorICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVhZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gKGNvbmZpZykgZmlsZSBtYXkgbm90IGJlIGVub3VnaCB0byBzZXQgYQorICAgICAgICAjIGNvbXBsZXRpb24ga2V5LCBzbyB3ZSBzZXQgb25lIGZpcnN0IGFuZCB0aGVuIHJlYWQgdGhlIGZpbGUuCisgICAgICAgIHJlYWRsaW5lX2RvYyA9IGdldGF0dHIocmVhZGxpbmUsICdfX2RvY19fJywgJycpCisgICAgICAgIGlmIHJlYWRsaW5lX2RvYyBpcyBub3QgTm9uZSBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lX2RvYzoKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2luaXRfZmlsZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBBbiBPU0Vycm9yIGhlcmUgY291bGQgaGF2ZSBtYW55IGNhdXNlcywgYnV0IHRoZSBtb3N0IGxpa2VseSBvbmUKKyAgICAgICAgICAgICMgaXMgdGhhdCB0aGVyZSdzIG5vIC5pbnB1dHJjIGZpbGUgKG9yIC5lZGl0cmMgZmlsZSBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICAgIyBNYWMgT1MgWCArIGxpYmVkaXQpIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gIEluIHRoYXQgY2FzZSwgd2UKKyAgICAgICAgICAgICMgd2FudCB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpIGlzIE5vbmU6CisgICAgICAgICAgICAjIElmIG5vIGhpc3Rvcnkgd2FzIGxvYWRlZCwgZGVmYXVsdCB0byAucHl0aG9uX2hpc3RvcnkuCisgICAgICAgICAgICAjIFRoZSBndWFyZCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgZG91YmxpbmcgaGlzdG9yeSBzaXplIGF0CisgICAgICAgICAgICAjIGVhY2ggaW50ZXJwcmV0ZXIgZXhpdCB3aGVuIHJlYWRsaW5lIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgdGhyb3VnaCBhIFBZVEhPTlNUQVJUVVAgaG9vaywgc2VlOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTg0NSNtc2cxOTg2MzYKKyAgICAgICAgICAgIGhpc3RvcnkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucHl0aG9uX2hpc3RvcnknKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0b3J5KQorCisgICAgc3lzLl9faW50ZXJhY3RpdmVob29rX18gPSByZWdpc3Rlcl9yZWFkbGluZQogCiBkZWYgYWxpYXNtYmNzKCk6CiAgICAgIiIiT24gV2luZG93cywgc29tZSBkZWZhdWx0IGVuY29kaW5ncyBhcmUgbm90IHByb3ZpZGVkIGJ5IFB5dGhvbiwKICAgICB3aGlsZSB0aGV5IGFyZSBhbHdheXMgYXZhaWxhYmxlIGFzICJtYmNzIiBpbiBlYWNoIGxvY2FsZS4gTWFrZQogICAgIHRoZW0gdXNhYmxlIGJ5IGFsaWFzaW5nIHRvICJtYmNzIiBpbiBzdWNoIGEgY2FzZS4iIiIKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgaW1wb3J0IGxvY2FsZSwgY29kZWNzCi0gICAgICAgIGVuYyA9IGxvY2FsZS5nZXRkZWZhdWx0bG9jYWxlKClbMV0KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlLCBjb2RlY3MKKyAgICAgICAgZW5jID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiAgICAgICAgIGlmIGVuYy5zdGFydHN3aXRoKCdjcCcpOiAgICAgICAgICAgICMgImNwKioqIiA/CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29kZWNzLmxvb2t1cChlbmMpCkBAIC00ODgsOCArNDQwLDcgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuX2NhY2hlW2VuY10gPSBlbmNvZGluZ3MuX3Vua25vd24KICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzW2VuY10gPSAnbWJjcycKIAotCi1DT05GSUdfTElORSA9IHJlLmNvbXBpbGUocideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcpCitDT05GSUdfTElORSA9IHInXig/UDxrZXk+KFx3fFstX10pKylccyo9XHMqKD9QPHZhbHVlPi4qKVxzKiQnCiAKIGRlZiB2ZW52KGtub3duX3BhdGhzKToKICAgICBnbG9iYWwgUFJFRklYRVMsIEVOQUJMRV9VU0VSX1NJVEUKQEAgLTUxMiwxMiArNDYzLDE0IEBACiAgICAgICAgIF0KIAogICAgIGlmIGNhbmRpZGF0ZV9jb25mczoKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbmZpZ19saW5lID0gcmUuY29tcGlsZShDT05GSUdfTElORSkKICAgICAgICAgdmlydHVhbF9jb25mID0gY2FuZGlkYXRlX2NvbmZzWzBdCiAgICAgICAgIHN5c3RlbV9zaXRlID0gInRydWUiCiAgICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYpIGFzIGY6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBtID0gQ09ORklHX0xJTkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBtID0gY29uZmlnX2xpbmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gZFsna2V5J10ubG93ZXIoKSwgZFsndmFsdWUnXQpAQCAtNTg5LDExICs1NDIsMTAgQEAKICAgICAgICAgRU5BQkxFX1VTRVJfU0lURSA9IGNoZWNrX2VuYWJsZXVzZXJzaXRlKCkKICAgICBrbm93bl9wYXRocyA9IGFkZHVzZXJzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCiAgICAga25vd25fcGF0aHMgPSBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICBzZXRCRUdJTkxJQlBBVEgoKQogICAgIHNldHF1aXQoKQogICAgIHNldGNvcHlyaWdodCgpCiAgICAgc2V0aGVscGVyKCkKKyAgICBlbmFibGVybGNvbXBsZXRlcigpCiAgICAgYWxpYXNtYmNzKCkKICAgICBleGVjc2l0ZWN1c3RvbWl6ZSgpCiAgICAgaWYgRU5BQkxFX1VTRVJfU0lURToKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCA3NzhkNmQ2Li4xZmExNTdhIDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0xMjEsOCArMTIxLDkgQEAKICAgICAgICAgfSkKICAgICBtYXhfY29tbWFuZF9zaXplX2xpbWl0ID0gbWF4KGNvbW1hbmRfc2l6ZV9saW1pdHMudmFsdWVzKCkpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgotICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICBtYXA9Tm9uZSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgbWFwPW1hcCkKICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgogICAgICAgICBzZWxmLmNvbm4gPSBjb25uCiAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKQEAgLTEzNyw3ICsxMzgsNyBAQAogICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wZWVyID0gY29ubi5nZXRwZWVybmFtZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIGEgcmFjZSBjb25kaXRpb24gIG1heSBvY2N1ciBpZiB0aGUgb3RoZXIgZW5kIGlzIGNsb3NpbmcKICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTU3NiwxMSArNTc3LDExIEBACiAgICAgY2hhbm5lbF9jbGFzcyA9IFNNVFBDaGFubmVsCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWxhZGRyLCByZW1vdGVhZGRyLAotICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgorICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsIG1hcD1Ob25lKToKICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gbG9jYWxhZGRyCiAgICAgICAgIHNlbGYuX3JlbW90ZWFkZHIgPSByZW1vdGVhZGRyCiAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gZGF0YV9zaXplX2xpbWl0Ci0gICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9bWFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgICMgdHJ5IHRvIHJlLXVzZSBhIHNlcnZlciBwb3J0IGlmIHBvc3NpYmxlCkBAIC01OTcsNyArNTk4LDggQEAKIAogICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CiAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCkKKyAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXApCiAKICAgICAjIEFQSSBmb3IgImRvaW5nIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgbWVzc2FnZSIKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTY2OCw3ICs2NzAsNyBAQAogICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWQgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QgU01UUFJlY2lwaWVudHNSZWZ1c2VkJywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgIHJlZnVzZWQgPSBlLnJlY2lwaWVudHMKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzbXRwbGliLlNNVFBFeGNlcHRpb24pIGFzIGU6CiAgICAgICAgICAgICBwcmludCgnZ290JywgZS5fX2NsYXNzX18sIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgICAgICAjIEFsbCByZWNpcGllbnRzIHdlcmUgcmVmdXNlZC4gIElmIHRoZSBleGNlcHRpb24gaGFkIGFuIGFzc29jaWF0ZWQKICAgICAgICAgICAgICMgZXJyb3IgY29kZSwgdXNlIGl0LiAgT3RoZXJ3aXNlLGZha2UgaXQgd2l0aCBhIG5vbi10cmlnZ2VyaW5nCkBAIC03NzgsNyArNzgwLDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbicsICctLW5vc2V0dWlkJyk6CiAgICAgICAgICAgICBvcHRpb25zLnNldHVpZCA9IDAKQEAgLTg1MCw4ICs4NTIsNyBAQAogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQRVJNOiByYWlzZQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzZXR1aWQgIm5vYm9keSI7IHRyeSBydW5uaW5nIHdpdGggLW4gb3B0aW9uLicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBsaWIucHkgYi9MaWIvc210cGxpYi5weQppbmRleCAwNzJiOTczLi42ZmM2NWY2IDEwMDY0NAotLS0gYS9MaWIvc210cGxpYi5weQorKysgYi9MaWIvc210cGxpYi5weQpAQCAtNjYsNyArNjYsNyBAQAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCi1jbGFzcyBTTVRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6CitjbGFzcyBTTVRQRXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKIAogY2xhc3MgU01UUFNlcnZlckRpc2Nvbm5lY3RlZChTTVRQRXhjZXB0aW9uKToKQEAgLTMxMSw3ICszMTEsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIm5vbm51bWVyaWMgcG9ydCIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIm5vbm51bWVyaWMgcG9ydCIpCiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CkBAIC0zMzIsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICBzID0gcy5lbmNvZGUoImFzY2lpIikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoJ1NlcnZlciBub3QgY29ubmVjdGVkJykKICAgICAgICAgZWxzZToKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCJDb25uZWN0aW9uIHVuZXhwZWN0ZWRseSBjbG9zZWQ6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RyKGUpKQpAQCAtNTc5LDcgKzU3OSw3IEBACiAgICAgICAgIGRlZiBlbmNvZGVfY3JhbV9tZDUoY2hhbGxlbmdlLCB1c2VyLCBwYXNzd29yZCk6CiAgICAgICAgICAgICBjaGFsbGVuZ2UgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoY2hhbGxlbmdlKQogICAgICAgICAgICAgcmVzcG9uc2UgPSB1c2VyICsgIiAiICsgaG1hYy5ITUFDKHBhc3N3b3JkLmVuY29kZSgnYXNjaWknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UpLmhleGRpZ2VzdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlLCAnbWQ1JykuaGV4ZGlnZXN0KCkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVfYmFzZTY0KHJlc3BvbnNlLmVuY29kZSgnYXNjaWknKSwgZW9sPScnKQogCiAgICAgICAgIGRlZiBlbmNvZGVfcGxhaW4odXNlciwgcGFzc3dvcmQpOgpAQCAtNjY0LDEwICs2NjQsMTAgQEAKICAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmUgYW5kIGNlcnRmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvbnRleHQgYW5kIGNlcnRmaWxlIGFyZ3VtZW50cyBhcmUgbXV0dWFsbHkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCi0gICAgICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrLCBrZXlmaWxlLCBjZXJ0ZmlsZSkKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKKyAgICAgICAgICAgIHNlbGYuc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrKQogICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAgICAgIyBSRkMgMzIwNzoKICAgICAgICAgICAgICMgVGhlIGNsaWVudCBNVVNUIGRpc2NhcmQgYW55IGtub3dsZWRnZSBvYnRhaW5lZCBmcm9tCkBAIC04ODAsNiArODgwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgICAgICBTTVRQLl9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQsIGxvY2FsX2hvc3RuYW1lLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcykKQEAgLTg4OSwxMCArODkyLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChuZXdfc29ja2V0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KG5ld19zb2NrZXQsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCkKICAgICAgICAgICAgIHJldHVybiBuZXdfc29ja2V0CiAKICAgICBfX2FsbF9fLmFwcGVuZCgiU01UUF9TU0wiKQpAQCAtOTM0LDcgKzkzNCw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3QgZmFpbDonLCBob3N0LCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKZGlmZiAtLWdpdCBhL0xpYi9zbmRoZHIucHkgYi9MaWIvc25kaGRyLnB5CmluZGV4IDlmNWRjYzkuLjI0MGU1MDcgMTAwNjQ0Ci0tLSBhL0xpYi9zbmRoZHIucHkKKysrIGIvTGliL3NuZGhkci5weQpAQCAtMTEsNyArMTEsNyBAQAogLSBudW1iZXIgb2YgYml0cy9zYW1wbGUsIG9yICdVJyBmb3IgVS1MQVcsIG9yICdBJyBmb3IgQS1MQVcKIAogSWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlIGEgcmVjb2duaXphYmxlIHR5cGUsIGl0IHJldHVybnMgTm9uZS4KLUlmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgSU9FcnJvciBpcyByYWlzZWQuCitJZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIE9TRXJyb3IgaXMgcmFpc2VkLgogCiBUbyBjb21wdXRlIHRoZSB0b3RhbCB0aW1lLCBkaXZpZGUgdGhlIG51bWJlciBvZiBmcmFtZXMgYnkgdGhlCiBzYW1wbGluZyByYXRlIChhIGZyYW1lIGNvbnRhaW5zIGEgc2FtcGxlIGZvciBlYWNoIGNoYW5uZWwpLgpAQCAtMTM3LDE0ICsxMzcsMTcgQEAKIAogCiBkZWYgdGVzdF93YXYoaCwgZik6CisgICAgaW1wb3J0IHdhdmUKICAgICAjICdSSUZGJyA8bGVuPiAnV0FWRScgJ2ZtdCAnIDxsZW4+CiAgICAgaWYgbm90IGguc3RhcnRzd2l0aChiJ1JJRkYnKSBvciBoWzg6MTJdICE9IGInV0FWRScgb3IgaFsxMjoxNl0gIT0gYidmbXQgJzoKICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdHlsZSA9IGdldF9zaG9ydF9sZShoWzIwOjIyXSkKLSAgICBuY2hhbm5lbHMgPSBnZXRfc2hvcnRfbGUoaFsyMjoyNF0pCi0gICAgcmF0ZSA9IGdldF9sb25nX2xlKGhbMjQ6MjhdKQotICAgIHNhbXBsZV9iaXRzID0gZ2V0X3Nob3J0X2xlKGhbMzQ6MzZdKQotICAgIHJldHVybiAnd2F2JywgcmF0ZSwgbmNoYW5uZWxzLCAtMSwgc2FtcGxlX2JpdHMKKyAgICBmLnNlZWsoMCkKKyAgICB0cnk6CisgICAgICAgIHcgPSB3YXZlLm9wZW5mcChmLCAncicpCisgICAgZXhjZXB0IChFT0ZFcnJvciwgd2F2ZS5FcnJvcik6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICgnd2F2Jywgdy5nZXRmcmFtZXJhdGUoKSwgdy5nZXRuY2hhbm5lbHMoKSwKKyAgICAgICAgICAgICAgICAgICB3LmdldG5mcmFtZXMoKSwgOCp3LmdldHNhbXB3aWR0aCgpKQogCiB0ZXN0cy5hcHBlbmQodGVzdF93YXYpCiAKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQod2hhdChmaWxlbmFtZSkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHByaW50KCcqKiogbm90IGZvdW5kICoqKicpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBkNGYxYjY1Li42ZDY3YjNkIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTQ4LDYgKzQ4LDcgQEAKIGZyb20gX3NvY2tldCBpbXBvcnQgKgogCiBpbXBvcnQgb3MsIHN5cywgaW8KK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQogCiB0cnk6CiAgICAgaW1wb3J0IGVycm5vCkBAIC02MCw2ICs2MSwzMCBAQAogX19hbGxfXyA9IFsiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiJdCiBfX2FsbF9fLmV4dGVuZChvcy5fZ2V0X2V4cG9ydHNfbGlzdChfc29ja2V0KSkKIAorIyBTZXQgdXAgdGhlIHNvY2tldC5BRl8qIHNvY2tldC5TT0NLXyogY29uc3RhbnRzIGFzIG1lbWJlcnMgb2YgSW50RW51bXMgZm9yCisjIG5pY2VyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisjIE5vdGUgdGhhdCBfc29ja2V0IG9ubHkga25vd3MgYWJvdXQgdGhlIGludGVnZXIgdmFsdWVzLiBUaGUgcHVibGljIGludGVyZmFjZQorIyBpbiB0aGlzIG1vZHVsZSB1bmRlcnN0YW5kcyB0aGUgZW51bXMgYW5kIHRyYW5zbGF0ZXMgdGhlbSBiYWNrIGZyb20gaW50ZWdlcnMKKyMgd2hlcmUgbmVlZGVkIChlLmcuIC5mYW1pbHkgcHJvcGVydHkgb2YgYSBzb2NrZXQgb2JqZWN0KS4KK0FkZHJlc3NGYW1pbHkgPSBJbnRFbnVtKCdBZGRyZXNzRmFtaWx5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdBRl8nKX0pCitnbG9iYWxzKCkudXBkYXRlKEFkZHJlc3NGYW1pbHkuX19tZW1iZXJzX18pCisKK1NvY2tldFR5cGUgPSBJbnRFbnVtKCdTb2NrZXRUeXBlJywKKyAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdTT0NLXycpfSkKK2dsb2JhbHMoKS51cGRhdGUoU29ja2V0VHlwZS5fX21lbWJlcnNfXykKKworZGVmIF9pbnRlbnVtX2NvbnZlcnRlcih2YWx1ZSwgZW51bV9rbGFzcyk6CisgICAgIiIiQ29udmVydCBhIG51bWVyaWMgZmFtaWx5IHZhbHVlIHRvIGFuIEludEVudW0gbWVtYmVyLgorCisgICAgSWYgaXQncyBub3QgYSBrbm93biBtZW1iZXIsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpdHNlbGYuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZW51bV9rbGFzcyh2YWx1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIHZhbHVlCiAKIF9yZWFsc29ja2V0ID0gc29ja2V0CiAKQEAgLTkxLDYgKzExNiwxMCBAQAogICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iLCAiX2lvX3JlZnMiLCAiX2Nsb3NlZCJdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKToKKyAgICAgICAgIyBGb3IgdXNlciBjb2RlIGFkZHJlc3MgZmFtaWx5IGFuZCB0eXBlIHZhbHVlcyBhcmUgSW50RW51bSBtZW1iZXJzLCBidXQKKyAgICAgICAgIyBmb3IgdGhlIHVuZGVybHlpbmcgX3NvY2tldC5zb2NrZXQgdGhleSdyZSBqdXN0IGludGVnZXJzLiBUaGUKKyAgICAgICAgIyBjb25zdHJ1Y3RvciBvZiBfc29ja2V0LnNvY2tldCBjb252ZXJ0cyB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4KKyAgICAgICAgIyBpbnRlZ2VyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgIF9zb2NrZXQuc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubykKICAgICAgICAgc2VsZi5faW9fcmVmcyA9IDAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKQEAgLTEwMywxMyArMTMyLDMyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lLiIiIgotICAgICAgICBzID0gX3NvY2tldC5zb2NrZXQuX19yZXByX18oc2VsZikKLSAgICAgICAgaWYgcy5zdGFydHN3aXRoKCI8c29ja2V0IG9iamVjdCIpOgotICAgICAgICAgICAgcyA9ICI8JXMuJXMlcyVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKSBhbmQgIiBbY2xvc2VkXSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzc6XSkKKyAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lIGFuZCBzb2NrZXQKKyAgICAgICAgYWRkcmVzcyhlcykuCisgICAgICAgICIiIgorICAgICAgICBjbG9zZWQgPSBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpCisgICAgICAgIHMgPSAiPCVzLiVzJXMgZmQ9JWksIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JWkiIFwKKyAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICIgW2Nsb3NlZF0iIGlmIGNsb3NlZCBlbHNlICIiLAorICAgICAgICAgICAgICAgc2VsZi5maWxlbm8oKSwKKyAgICAgICAgICAgICAgIHNlbGYuZmFtaWx5LAorICAgICAgICAgICAgICAgc2VsZi50eXBlLAorICAgICAgICAgICAgICAgc2VsZi5wcm90bykKKyAgICAgICAgaWYgbm90IGNsb3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsYWRkciA9IHNlbGYuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIGlmIGxhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIGxhZGRyPSVzIiAlIHN0cihsYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFkZHIgPSBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCByYWRkcj0lcyIgJSBzdHIocmFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzICs9ICc+JwogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKQEAgLTExOCw3ICsxNjYsOCBAQAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgICIiImR1cCgpIC0+IHNvY2tldCBvYmplY3QKIAotICAgICAgICBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgc3lzdGVtIHJlc291cmNlLgorICAgICAgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4gUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lCisgICAgICAgIHN5c3RlbSByZXNvdXJjZS4gVGhlIG5ldyBzb2NrZXQgaXMgbm9uLWluaGVyaXRhYmxlLgogICAgICAgICAiIiIKICAgICAgICAgZmQgPSBkdXAoc2VsZi5maWxlbm8oKSkKICAgICAgICAgc29jayA9IHNlbGYuX19jbGFzc19fKHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCkKQEAgLTIxMCw2ICsyNTksMzEgQEAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIoKS5kZXRhY2goKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZhbWlseShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIHRoaXMgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLmZhbWlseSwgQWRkcmVzc0ZhbWlseSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBzb2NrZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS50eXBlLCBTb2NrZXRUeXBlKQorCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGdldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIkdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorICAgIHNldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorCiBkZWYgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApOgogICAgICIiIiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkgLT4gc29ja2V0IG9iamVjdAogCkBAIC0yOTEsNyArMzY1LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKICAgICAgICAgaWYgc2VsZi5fdGltZW91dF9vY2N1cnJlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3ZfaW50byhiKQpAQCAtNDM1LDMgKzUwOSwyNyBAQAogICAgICAgICByYWlzZSBlcnIKICAgICBlbHNlOgogICAgICAgICByYWlzZSBlcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKworZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICIiIlJlc29sdmUgaG9zdCBhbmQgcG9ydCBpbnRvIGxpc3Qgb2YgYWRkcmVzcyBpbmZvIGVudHJpZXMuCisKKyAgICBUcmFuc2xhdGUgdGhlIGhvc3QvcG9ydCBhcmd1bWVudCBpbnRvIGEgc2VxdWVuY2Ugb2YgNS10dXBsZXMgdGhhdCBjb250YWluCisgICAgYWxsIHRoZSBuZWNlc3NhcnkgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhhdCBzZXJ2aWNlLgorICAgIGhvc3QgaXMgYSBkb21haW4gbmFtZSwgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NC92NiBhZGRyZXNzIG9yCisgICAgTm9uZS4gcG9ydCBpcyBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAnaHR0cCcsIGEgbnVtZXJpYyBwb3J0IG51bWJlciBvcgorICAgIE5vbmUuIEJ5IHBhc3NpbmcgTm9uZSBhcyB0aGUgdmFsdWUgb2YgaG9zdCBhbmQgcG9ydCwgeW91IGNhbiBwYXNzIE5VTEwgdG8KKyAgICB0aGUgdW5kZXJseWluZyBDIEFQSS4KKworICAgIFRoZSBmYW1pbHksIHR5cGUgYW5kIHByb3RvIGFyZ3VtZW50cyBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8KKyAgICBuYXJyb3cgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIHJldHVybmVkLiBQYXNzaW5nIHplcm8gYXMgYSB2YWx1ZSBmb3IgZWFjaCBvZgorICAgIHRoZXNlIGFyZ3VtZW50cyBzZWxlY3RzIHRoZSBmdWxsIHJhbmdlIG9mIHJlc3VsdHMuCisgICAgIiIiCisgICAgIyBXZSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHNpbmNlIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1lcmljIGZhbWlseQorICAgICMgYW5kIHNvY2tldCB0eXBlIHZhbHVlcyB0byBlbnVtIGNvbnN0YW50cy4KKyAgICBhZGRybGlzdCA9IFtdCisgICAgZm9yIHJlcyBpbiBfc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKToKKyAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICBhZGRybGlzdC5hcHBlbmQoKF9pbnRlbnVtX2NvbnZlcnRlcihhZiwgQWRkcmVzc0ZhbWlseSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2ludGVudW1fY29udmVydGVyKHNvY2t0eXBlLCBTb2NrZXRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bywgY2Fub25uYW1lLCBzYSkpCisgICAgcmV0dXJuIGFkZHJsaXN0CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0c2VydmVyLnB5IGIvTGliL3NvY2tldHNlcnZlci5weQppbmRleCA4MzMyZmRmLi5lOWU0ZTRlIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKQEAgLTI5OSw3ICsyOTksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLmdldF9yZXF1ZXN0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi52ZXJpZnlfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICAgICB0cnk6CkBAIC00NzksNyArNDc5LDcgQEAKICAgICAgICAgICAgICNleHBsaWNpdGx5IHNodXRkb3duLiAgc29ja2V0LmNsb3NlKCkgbWVyZWx5IHJlbGVhc2VzCiAgICAgICAgICAgICAjdGhlIHNvY2tldCBhbmQgd2FpdHMgZm9yIEdDIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjbG9zZS4KICAgICAgICAgICAgIHJlcXVlc3Quc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcyAjc29tZSBwbGF0Zm9ybXMgbWF5IHJhaXNlIEVOT1RDT05OIGhlcmUKICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgICAgICAgIyBjaGlsZHJlbi4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoMCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHBpZCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46IGNvbnRpbnVlCiAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5yZW1vdmUocGlkKQpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY2hpbGQsIG9zLldOT0hBTkcpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwaWQgPSBOb25lCiAgICAgICAgICAgICBpZiBub3QgcGlkOiBjb250aW51ZQogICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKaW5kZXggYjdlYzFhZC4uMDQ2NDlmYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0yOCw2ICsyOCw5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmsKKworCiBjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLmFwaWxldmVsLCAiMi4wIiwKQEAgLTE2Myw2ICsxNjYsMjEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN4LmluX3RyYW5zYWN0aW9uID0gVHJ1ZQogCisgICAgZGVmIENoZWNrT3BlblVyaShzZWxmKToKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgNywgNyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QoJzptZW1vcnk6JywgdXJpPVRydWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KFRFU1RGTikgYXMgY3g6CisgICAgICAgICAgICBjeC5leGVjdXRlKCdjcmVhdGUgdGFibGUgdGVzdChpZCBpbnRlZ2VyKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiwgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDApJykKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdCgnZmlsZTonICsgVEVTVEZOICsgJz9tb2RlPXJvJywgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CisgICAgICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDEpJykKKworCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCBiOTg0YTU0Li4zYTUwODNmIDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0xMyw2ICsxMyw3IEBACiBpbXBvcnQgX3NyZSwgc3lzCiBpbXBvcnQgc3JlX3BhcnNlCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIGFzc2VydCBfc3JlLk1BR0lDID09IE1BR0lDLCAiU1JFIG1vZHVsZSBtaXNtYXRjaCIKIApAQCAtNjQsMTMgKzY1LDYgQEAKICAgICAgICAgZWxpZiBvcCBpbiBSRVBFQVRJTkdfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1RFTVBMQVRFOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IiKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRdKQotICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCi0gICAgICAgICAgICAgICAgZW1pdChhdlswXSkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzFdKQotICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbU1VDQ0VTU10pCi0gICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgICAgICBlbGlmIF9zaW1wbGUoYXYpIGFuZCBvcCBpcyBub3QgUkVQRUFUOgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIE1BWF9SRVBFQVQ6CiAgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRfT05FXSkKQEAgLTIwNywxNTggKzIwMSwxNDMgQEAKIGRlZiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCi0gICAgb3V0YXBwZW5kID0gb3V0LmFwcGVuZAotICAgIGNoYXJtYXAgPSBbMF0qMjU2Ci0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChvcCwgYXYpKQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBhcHBlbmQgdG8gY2hhcm1hcCB0YWlsCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIHVuaWNvZGUgY2hhcmFjdGVycwotICAgICAgICByZXR1cm4gX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApCisgICAgdGFpbCA9IFtdCisgICAgY2hhcm1hcCA9IGJ5dGVhcnJheSgyNTYpCisgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBORUdBVEU6CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgorICAgICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLVVDUzEgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXAgKz0gYidcMCcgKiAweGZmMDAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGJyZWFrCisKICAgICAjIGNvbXByZXNzIGNoYXJhY3RlciBtYXAKLSAgICBpID0gcCA9IG4gPSAwCiAgICAgcnVucyA9IFtdCi0gICAgcnVuc2FwcGVuZCA9IHJ1bnMuYXBwZW5kCi0gICAgZm9yIGMgaW4gY2hhcm1hcDoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgICAgICBwID0gaQotICAgICAgICAgICAgbiA9IG4gKyAxCi0gICAgICAgIGVsaWYgbjoKLSAgICAgICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgICAgICAgICAgbiA9IDAKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgaWYgbjoKLSAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgaWYgbGVuKHJ1bnMpIDw9IDI6CisgICAgcSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwID0gY2hhcm1hcC5maW5kKDEsIHEpCisgICAgICAgIGlmIHAgPCAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGVuKHJ1bnMpID49IDI6CisgICAgICAgICAgICBydW5zID0gTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcSA9IGNoYXJtYXAuZmluZCgwLCBwKQorICAgICAgICBpZiBxIDwgMDoKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBsZW4oY2hhcm1hcCkpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcnVucy5hcHBlbmQoKHAsIHEpKQorICAgIGlmIHJ1bnMgaXMgbm90IE5vbmU6CiAgICAgICAgICMgdXNlIGxpdGVyYWwvcmFuZ2UKLSAgICAgICAgZm9yIHAsIG4gaW4gcnVuczoKLSAgICAgICAgICAgIGlmIG4gPT0gMToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKExJVEVSQUwsIHApKQorICAgICAgICBmb3IgcCwgcSBpbiBydW5zOgorICAgICAgICAgICAgaWYgcSAtIHAgPT0gMToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChMSVRFUkFMLCBwKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChSQU5HRSwgKHAsIHArbi0xKSkpCisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoUkFOR0UsIChwLCBxIC0gMSkpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICBpZiBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKICAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICBlbHNlOgotICAgICAgICAjIHVzZSBiaXRtYXAKKyAgICAgICAgcmV0dXJuIGNoYXJzZXQKKworICAgICMgdXNlIGJpdG1hcAorICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CiAgICAgICAgIGRhdGEgPSBfbWtfYml0bWFwKGNoYXJtYXApCi0gICAgICAgIG91dGFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dC5hcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICByZXR1cm4gb3V0Ci0gICAgcmV0dXJuIGNoYXJzZXQKIAotZGVmIF9ta19iaXRtYXAoYml0cyk6Ci0gICAgZGF0YSA9IFtdCi0gICAgZGF0YWFwcGVuZCA9IGRhdGEuYXBwZW5kCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgbSwgdiA9IHN0YXJ0Ci0gICAgZm9yIGMgaW4gYml0czoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHYgPSB2ICsgbQotICAgICAgICBtID0gbSArIG0KLSAgICAgICAgaWYgbSA+IE1BWENPREU6Ci0gICAgICAgICAgICBkYXRhYXBwZW5kKHYpCi0gICAgICAgICAgICBtLCB2ID0gc3RhcnQKLSAgICByZXR1cm4gZGF0YQorICAgICMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2CisgICAgIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcworICAgICMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcworICAgICMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKKyAgICAjIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQorICAgICMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQorICAgICMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCiAKLSMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKLSMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKLSMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcwotIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgotIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKLSMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQotIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KKyAgICAjIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKKyAgICAjIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCisgICAgIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQorICAgICMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAjIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KIAotIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCi0jIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCi0jIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCi0jIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5Ci0jIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KKyAgICAjIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKKyAgICAjIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKKyAgICAjIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKKyAgICAjIENIQVJTRVQgbWF0Y2hpbmcpLgogCi0jIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKLSMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQotIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCi0jIENIQVJTRVQgbWF0Y2hpbmcpLgotCi0jIFRoZSBCSUdDSEFSU0VUIG9wY29kZSBzdGlsbCBzdXBwb3J0cyBvbmx5IHN1YnNldHMKLSMgb2YgdGhlIGJhc2ljIG11bHRpbGluZ3VhbCBwbGFuZTsgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uCi0jIGZvciBhbGwgb2YgVW5pY29kZSBoYXMgbm90IHlldCBiZWVuIGRldmVsb3BlZC4gVGhpcyBtZWFucywKLSMgaW4gcGFydGljdWxhciwgdGhhdCBuZWdhdGVkIGNoYXJzZXRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcwotIyBiaWdjaGFyc2V0cy4KLQotZGVmIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKToKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBjaGFybWFwID0gWzBdKjY1NTM2Ci0gICAgbmVnYXRlID0gMAotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG5lZ2F0ZSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgZXhwYW5kIGNhdGVnb3J5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBub24tQk1QIGNoYXJhY3RlcnM7IFhYWCBub3cgdGhleSBzaG91bGQgd29yawotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGlmIG5lZ2F0ZToKLSAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgIT0gNjU1MzU6Ci0gICAgICAgICAgICAjIFhYWDogbmVnYXRpb24gZG9lcyBub3Qgd29yayB3aXRoIGJpZyBjaGFyc2V0cwotICAgICAgICAgICAgIyBYWFgyOiBub3cgdGhleSBzaG91bGQgd29yaywgYnV0IHJlbW92aW5nIHRoaXMgd2lsbCBtYWtlIHRoZQotICAgICAgICAgICAgIyBjaGFybWFwIDE3IHRpbWVzIGJpZ2dlcgotICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjU1MzYpOgotICAgICAgICAgICAgY2hhcm1hcFtpXSA9IG5vdCBjaGFybWFwW2ldCisgICAgY2hhcm1hcCA9IGJ5dGVzKGNoYXJtYXApICMgc2hvdWxkIGJlIGhhc2hhYmxlCiAgICAgY29tcHMgPSB7fQotICAgIG1hcHBpbmcgPSBbMF0qMjU2CisgICAgbWFwcGluZyA9IGJ5dGVhcnJheSgyNTYpCiAgICAgYmxvY2sgPSAwCi0gICAgZGF0YSA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgY2h1bmsgPSB0dXBsZShjaGFybWFwW2kqMjU2OihpKzEpKjI1Nl0pCi0gICAgICAgIG5ldyA9IGNvbXBzLnNldGRlZmF1bHQoY2h1bmssIGJsb2NrKQotICAgICAgICBtYXBwaW5nW2ldID0gbmV3Ci0gICAgICAgIGlmIG5ldyA9PSBibG9jazoKLSAgICAgICAgICAgIGJsb2NrID0gYmxvY2sgKyAxCi0gICAgICAgICAgICBkYXRhID0gZGF0YSArIF9ta19iaXRtYXAoY2h1bmspCi0gICAgaGVhZGVyID0gW2Jsb2NrXQotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgY29kZSA9ICdIJwotICAgIGVsc2U6Ci0gICAgICAgIGNvZGUgPSAnSScKLSAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byBieXRlIGFycmF5IG9mIDI1NiBieXRlcwotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheSgnQicsIG1hcHBpbmcpLnRvYnl0ZXMoKQotICAgICMgQ29udmVydCBieXRlIGFycmF5IHRvIHdvcmQgYXJyYXkKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoY29kZSwgbWFwcGluZykKLSAgICBhc3NlcnQgbWFwcGluZy5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCi0gICAgYXNzZXJ0IGxlbihtYXBwaW5nKSAqIG1hcHBpbmcuaXRlbXNpemUgPT0gMjU2Ci0gICAgaGVhZGVyID0gaGVhZGVyICsgbWFwcGluZy50b2xpc3QoKQotICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciBpIGluIHJhbmdlKDAsIDY1NTM2LCAyNTYpOgorICAgICAgICBjaHVuayA9IGNoYXJtYXBbaTogaSArIDI1Nl0KKyAgICAgICAgaWYgY2h1bmsgaW4gY29tcHM6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10gPSBibG9jaworICAgICAgICAgICAgYmxvY2sgKz0gMQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgIGRhdGEgPSBfbWtfYml0bWFwKGRhdGEpCisgICAgZGF0YVswOjBdID0gW2Jsb2NrXSArIF9ieXRlc190b19jb2RlcyhtYXBwaW5nKQorICAgIG91dC5hcHBlbmQoKEJJR0NIQVJTRVQsIGRhdGEpKQorICAgIG91dCArPSB0YWlsCisgICAgcmV0dXJuIG91dAorCitfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorX0JJVFNfVFJBTlMgPSBiJzAnICsgYicxJyAqIDI1NQorZGVmIF9ta19iaXRtYXAoYml0cywgX0NPREVCSVRTPV9DT0RFQklUUywgX2ludD1pbnQpOgorICAgIHMgPSBiaXRzLnRyYW5zbGF0ZShfQklUU19UUkFOUylbOjotMV0KKyAgICByZXR1cm4gW19pbnQoc1tpIC0gX0NPREVCSVRTOiBpXSwgMikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSwgMCwgLV9DT0RFQklUUyldCisKK2RlZiBfYnl0ZXNfdG9fY29kZXMoYik6CisgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gd29yZCBhcnJheQorICAgIGltcG9ydCBhcnJheQorICAgIGEgPSBhcnJheS5hcnJheSgnSScsIGIpCisgICAgYXNzZXJ0IGEuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQorICAgIGFzc2VydCBsZW4oYSkgKiBhLml0ZW1zaXplID09IGxlbihiKQorICAgIHJldHVybiBhLnRvbGlzdCgpCiAKIGRlZiBfc2ltcGxlKGF2KToKICAgICAjIGNoZWNrIGlmIGF2IGlzIGEgInNpbXBsZSIgb3BlcmF0b3IKICAgICBsbywgaGkgPSBhdlsyXS5nZXR3aWR0aCgpCiAgICAgcmV0dXJuIGxvID09IGhpID09IDEgYW5kIGF2WzJdWzBdWzBdICE9IFNVQlBBVFRFUk4KIAorZGVmIF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW4gb3ZlcmxhcCB0YWJsZSBmb3IgdGhlIGZvbGxvd2luZyBwcmVmaXguCisgICAgQW4gb3ZlcmxhcCB0YWJsZSBpcyBhIHRhYmxlIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZWZpeCB3aGljaAorICAgIGluZm9ybXMgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWxmLW92ZXJsYXAgZm9yIGVhY2ggaW5kZXggaW4gdGhlIHByZWZpeDoKKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gMCwgcHJlZml4W2k6XSBjYW4ndCBvdmVybGFwIHByZWZpeFswOi4uLl0KKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gayB3aXRoIDAgPCBrIDw9IGksIHByZWZpeFtpLWsrMTppKzFdIG92ZXJsYXBzIHdpdGgKKyAgICAgIHByZWZpeFswOmtdCisgICAgIiIiCisgICAgdGFibGUgPSBbMF0gKiBsZW4ocHJlZml4KQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwcmVmaXgpKToKKyAgICAgICAgaWR4ID0gdGFibGVbaSAtIDFdCisgICAgICAgIHdoaWxlIHByZWZpeFtpXSAhPSBwcmVmaXhbaWR4XToKKyAgICAgICAgICAgIGlmIGlkeCA9PSAwOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldID0gMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSB0YWJsZVtpZHggLSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVbaV0gPSBpZHggKyAxCisgICAgcmV0dXJuIHRhYmxlCisKIGRlZiBfY29tcGlsZV9pbmZvKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGFuIGluZm8gYmxvY2suICBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCkBAIC00NTUsMTIgKzQzNCw3IEBACiAgICAgICAgIGVtaXQocHJlZml4X3NraXApICMgc2tpcAogICAgICAgICBjb2RlLmV4dGVuZChwcmVmaXgpCiAgICAgICAgICMgZ2VuZXJhdGUgb3ZlcmxhcCB0YWJsZQotICAgICAgICB0YWJsZSA9IFstMV0gKyAoWzBdKmxlbihwcmVmaXgpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJlZml4KSk6Ci0gICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbaV0rMQotICAgICAgICAgICAgd2hpbGUgdGFibGVbaSsxXSA+IDAgYW5kIHByZWZpeFtpXSAhPSBwcmVmaXhbdGFibGVbaSsxXS0xXToKLSAgICAgICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbdGFibGVbaSsxXS0xXSsxCi0gICAgICAgIGNvZGUuZXh0ZW5kKHRhYmxlWzE6XSkgIyBkb24ndCBzdG9yZSBmaXJzdCBlbnRyeQorICAgICAgICBjb2RlLmV4dGVuZChfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpKQogICAgIGVsaWYgY2hhcnNldDoKICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSkKICAgICBjb2RlW3NraXBdID0gbGVuKGNvZGUpIC0gc2tpcApkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb25zdGFudHMucHkgYi9MaWIvc3JlX2NvbnN0YW50cy5weQppbmRleCAzZmI1ZWFjLi4yM2UzNTE2IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbnN0YW50cy5weQorKysgYi9MaWIvc3JlX2NvbnN0YW50cy5weQpAQCAtMTUsMTEgKzE1LDcgQEAKIAogTUFHSUMgPSAyMDAzMTAxNwogCi10cnk6Ci0gICAgZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX3NyZQotICAgIE1BWFJFUEVBVCA9IF9zcmUuTUFYUkVQRUFUID0gNjU1MzUKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CkBAIC0yNTQsNiArMjUwLDggQEAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAlZFxuIiAlIFNSRV9GTEFHX0RPVEFMTCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgJWRcbiIgJSBTUkVfRkxBR19VTklDT0RFKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ERUJVRyAlZFxuIiAlIFNSRV9GTEFHX0RFQlVHKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgJWRcbiIgJSBTUkVfRkxBR19BU0NJSSkKIAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fUFJFRklYICVkXG4iICUgU1JFX0lORk9fUFJFRklYKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAlZFxuIiAlIFNSRV9JTkZPX0xJVEVSQUwpCmRpZmYgLS1naXQgYS9MaWIvc3JlX3BhcnNlLnB5IGIvTGliL3NyZV9wYXJzZS5weQppbmRleCA4YTc3NzkwLi42NTgzZWY2IDEwMDY0NAotLS0gYS9MaWIvc3JlX3BhcnNlLnB5CisrKyBiL0xpYi9zcmVfcGFyc2UucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCBzeXMKIAogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBTUEVDSUFMX0NIQVJTID0gIi5cXFt7KCkqKz9eJHwiCiBSRVBFQVRfQ0hBUlMgPSAiKis/eyIKQEAgLTc2OCwzNSArNzY5LDMzIEBACiAgICAgIyBncm91cCByZWZlcmVuY2VzCiAgICAgcyA9IFRva2VuaXplcihzb3VyY2UpCiAgICAgc2dldCA9IHMuZ2V0Ci0gICAgcCA9IFtdCi0gICAgYSA9IHAuYXBwZW5kCi0gICAgZGVmIGxpdGVyYWwobGl0ZXJhbCwgcD1wLCBwYXBwZW5kPWEpOgotICAgICAgICBpZiBwIGFuZCBwWy0xXVswXSBpcyBMSVRFUkFMOgotICAgICAgICAgICAgcFstMV0gPSBMSVRFUkFMLCBwWy0xXVsxXSArIGxpdGVyYWwKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcHBlbmQoKExJVEVSQUwsIGxpdGVyYWwpKQotICAgIHNlcCA9IHNvdXJjZVs6MF0KLSAgICBpZiBpc2luc3RhbmNlKHNlcCwgc3RyKToKLSAgICAgICAgbWFrZWNoYXIgPSBjaHIKLSAgICBlbHNlOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIHdoaWxlIDE6CisgICAgZ3JvdXBzID0gW10KKyAgICBsaXRlcmFscyA9IFtdCisgICAgbGl0ZXJhbCA9IFtdCisgICAgbGFwcGVuZCA9IGxpdGVyYWwuYXBwZW5kCisgICAgZGVmIGFkZGdyb3VwKGluZGV4KToKKyAgICAgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgICAgIGxpdGVyYWxzLmFwcGVuZCgnJy5qb2luKGxpdGVyYWwpKQorICAgICAgICAgICAgZGVsIGxpdGVyYWxbOl0KKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgobGVuKGxpdGVyYWxzKSwgaW5kZXgpKQorICAgICAgICBsaXRlcmFscy5hcHBlbmQoTm9uZSkKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICB0aGlzID0gc2dldCgpCiAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKICAgICAgICAgICAgIGJyZWFrICMgZW5kIG9mIHJlcGxhY2VtZW50IHN0cmluZwotICAgICAgICBpZiB0aGlzIGFuZCB0aGlzWzBdID09ICJcXCI6CisgICAgICAgIGlmIHRoaXNbMF0gPT0gIlxcIjoKICAgICAgICAgICAgICMgZ3JvdXAKLSAgICAgICAgICAgIGMgPSB0aGlzWzE6Ml0KKyAgICAgICAgICAgIGMgPSB0aGlzWzFdCiAgICAgICAgICAgICBpZiBjID09ICJnIjoKICAgICAgICAgICAgICAgICBuYW1lID0gIiIKICAgICAgICAgICAgICAgICBpZiBzLm1hdGNoKCI8Iik6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVudGVybWluYXRlZCBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj4iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gY2hhcgogICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICB0cnk6CkBAIC04MTAsNTAgKzgwOSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXR0ZXJuLmdyb3VwaW5kZXhbbmFtZV0KICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigidW5rbm93biBncm91cCBuYW1lIikKLSAgICAgICAgICAgICAgICBhKChNQVJLLCBpbmRleCkpCisgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW5kZXgpCiAgICAgICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQotICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKKyAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjIGluIE9DVERJR0lUUyBhbmQgdGhpc1syXSBpbiBPQ1RESUdJVFMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzLm5leHQgaW4gT0NURElHSVRTKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgotICAgICAgICAgICAgICAgICAgICBhKChNQVJLLCBpbnQodGhpc1sxOl0pKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW50KHRoaXNbMTpdKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gbWFrZWNoYXIoRVNDQVBFU1t0aGlzXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyA9IGNocihFU0NBUEVTW3RoaXNdWzFdKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGxpdGVyYWwodGhpcykKKyAgICAgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsKHRoaXMpCi0gICAgIyBjb252ZXJ0IHRlbXBsYXRlIHRvIGdyb3VwcyBhbmQgbGl0ZXJhbHMgbGlzdHMKLSAgICBpID0gMAotICAgIGdyb3VwcyA9IFtdCi0gICAgZ3JvdXBzYXBwZW5kID0gZ3JvdXBzLmFwcGVuZAotICAgIGxpdGVyYWxzID0gW05vbmVdICogbGVuKHApCi0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6Ci0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4Ci0gICAgZWxzZToKKyAgICAgICAgICAgIGxhcHBlbmQodGhpcykKKyAgICBpZiBsaXRlcmFsOgorICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CiAgICAgICAgICMgVGhlIHRva2VuaXplciBpbXBsaWNpdGx5IGRlY29kZXMgYnl0ZXMgb2JqZWN0cyBhcyBsYXRpbi0xLCB3ZSBtdXN0CiAgICAgICAgICMgdGhlcmVmb3JlIHJlLWVuY29kZSB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4LmVuY29kZSgnbGF0aW4tMScpCi0gICAgZm9yIGMsIHMgaW4gcDoKLSAgICAgICAgaWYgYyBpcyBNQVJLOgotICAgICAgICAgICAgZ3JvdXBzYXBwZW5kKChpLCBzKSkKLSAgICAgICAgICAgICMgbGl0ZXJhbFtpXSBpcyBhbHJlYWR5IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWxzW2ldID0gZW5jb2RlKHMpCi0gICAgICAgIGkgPSBpICsgMQorICAgICAgICBsaXRlcmFscyA9IFtOb25lIGlmIHMgaXMgTm9uZSBlbHNlIHMuZW5jb2RlKCdsYXRpbi0xJykgZm9yIHMgaW4gbGl0ZXJhbHNdCiAgICAgcmV0dXJuIGdyb3VwcywgbGl0ZXJhbHMKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggMDY0MzdiMy4uYjI5YjkwNSAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01MiwxMCArNTIsNDcgQEAKIFBST1RPQ09MX1NTTHYzCiBQUk9UT0NPTF9TU0x2MjMKIFBST1RPQ09MX1RMU3YxCitQUk9UT0NPTF9UTFN2MV8xCitQUk9UT0NPTF9UTFN2MV8yCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGlkZW50aWZ5IHZhcmlvdXMgU1NMIGFsZXJ0IG1lc3NhZ2UgZGVzY3JpcHRpb25zIGFzIHBlcgoraHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNgorCitBTEVSVF9ERVNDUklQVElPTl9DTE9TRV9OT1RJRlkKK0FMRVJUX0RFU0NSSVBUSU9OX1VORVhQRUNURURfTUVTU0FHRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX1JFQ09SRF9NQUMKK0FMRVJUX0RFU0NSSVBUSU9OX1JFQ09SRF9PVkVSRkxPVworQUxFUlRfREVTQ1JJUFRJT05fREVDT01QUkVTU0lPTl9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfUkVWT0tFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfRVhQSVJFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5LTk9XTgorQUxFUlRfREVTQ1JJUFRJT05fSUxMRUdBTF9QQVJBTUVURVIKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fQ0EKK0FMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09ERV9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fREVDUllQVF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fUFJPVE9DT0xfVkVSU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fVVNFUl9DQU5DRUxMRUQKK0FMRVJUX0RFU0NSSVBUSU9OX05PX1JFTkVHT1RJQVRJT04KK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCitBTEVSVF9ERVNDUklQVElPTl9VTlJFQ09HTklaRURfTkFNRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fUFNLX0lERU5USVRZCiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBlbnVtIGltcG9ydCBFbnVtIGFzIF9FbnVtCiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCkBAIC02NiwzNSArMTAzLDI2IEBACiAgICAgU1NMU3lzY2FsbEVycm9yLCBTU0xFT0ZFcnJvciwKICAgICApCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgT1BfQUxMLCBPUF9OT19TU0x2MiwgT1BfTk9fU1NMdjMsIE9QX05PX1RMU3YxLAotICAgIE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgT1BfU0lOR0xFX0RIX1VTRQotICAgICkKLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IE9QX05PX0NPTVBSRVNTSU9OCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfU0lOR0xFX0VDREhfVVNFCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworZnJvbSBfc3NsIGltcG9ydCAoVkVSSUZZX0RFRkFVTFQsIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiwgVkVSSUZZX0NSTF9DSEVDS19DSEFJTiwKKyAgICBWRVJJRllfWDUwOV9TVFJJQ1QpCitmcm9tIF9zc2wgaW1wb3J0IHR4dDJvYmogYXMgX3R4dDJvYmosIG5pZDJvYmogYXMgX25pZDJvYmoKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZCwgUkFORF9ieXRlcywgUkFORF9wc2V1ZG9fYnl0ZXMKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKLSAgICBTU0xfRVJST1JfV0FOVF9SRUFELAotICAgIFNTTF9FUlJPUl9XQU5UX1dSSVRFLAotICAgIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQLAotICAgIFNTTF9FUlJPUl9TWVNDQUxMLAotICAgIFNTTF9FUlJPUl9TU0wsCi0gICAgU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCwKLSAgICBTU0xfRVJST1JfRU9GLAotICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUsCi0gICAgKQorCitkZWYgX2ltcG9ydF9zeW1ib2xzKHByZWZpeCk6CisgICAgZm9yIG4gaW4gZGlyKF9zc2wpOgorICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuXSA9IGdldGF0dHIoX3NzbCwgbikKKworX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQorX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQorX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCitmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYzLCBQUk9UT0NPTF9TU0x2MjMsIFBST1RPQ09MX1RMU3YxCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKKwogX1BST1RPQ09MX05BTUVTID0gewogICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAogICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCkBAIC0xMDgsMTMgKzEzNiwyNiBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRpZmljYXRlcywgZW51bV9jcmxzCisKIGZyb20gc29ja2V0IGltcG9ydCBnZXRuYW1laW5mbyBhcyBfZ2V0bmFtZWluZm8KLWZyb20gc29ja2V0IGltcG9ydCBlcnJvciBhcyBzb2NrZXRfZXJyb3IKIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBjcmVhdGVfY29ubmVjdGlvbgogaW1wb3J0IGJhc2U2NCAgICAgICAgIyBmb3IgREVSLXRvLVBFTSB0cmFuc2xhdGlvbgogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IGVycm5vCiAKKworc29ja2V0X2Vycm9yID0gT1NFcnJvciAgIyBrZWVwIHRoYXQgcHVibGljIG5hbWUgaW4gbW9kdWxlIG5hbWVzcGFjZQorCiBpZiBfc3NsLkhBU19UTFNfVU5JUVVFOgogICAgIENIQU5ORUxfQklORElOR19UWVBFUyA9IFsndGxzLXVuaXF1ZSddCiBlbHNlOgpAQCAtMTI0LDYgKzE2NSwxMyBAQAogIyAoT3BlblNTTCdzIGRlZmF1bHQgc2V0dGluZyBpcyAnREVGQVVMVDohYU5VTEw6IWVOVUxMJykKIF9ERUZBVUxUX0NJUEhFUlMgPSAnREVGQVVMVDohYU5VTEw6IWVOVUxMOiFMT1c6IUVYUE9SVDohU1NMdjInCiAKKyMgcmVzdHJpY3RlZCBhbmQgbW9yZSBzZWN1cmUgY2lwaGVycworIyBISUdIOiBoaWdoIGVuY3J5cHRpb24gY2lwaGVyIHN1aXRlcyB3aXRoIGtleSBsZW5ndGggPj0gMTI4IGJpdHMgKG5vIE1ENSkKKyMgIWFOVUxMOiBvbmx5IGF1dGhlbnRpY2F0ZWQgY2lwaGVyIHN1aXRlcyAobm8gYW5vbnltb3VzIERIKQorIyAhUkM0OiBubyBSQzQgc3RyZWFtaW5nIGNpcGhlciwgUkM0IGlzIGJyb2tlbgorIyAhRFNTOiBSU0EgaXMgcHJlZmVycmVkIG92ZXIgRFNBCitfUkVTVFJJQ1RFRF9DSVBIRVJTID0gJ0hJR0g6IWFOVUxMOiFSQzQ6IURTUycKKwogCiBjbGFzcyBDZXJ0aWZpY2F0ZUVycm9yKFZhbHVlRXJyb3IpOgogICAgIHBhc3MKQEAgLTIxOSwxMSArMjY3LDU4IEBACiAgICAgICAgICAgICAic3ViamVjdEFsdE5hbWUgZmllbGRzIHdlcmUgZm91bmQiKQogCiAKK0RlZmF1bHRWZXJpZnlQYXRocyA9IG5hbWVkdHVwbGUoIkRlZmF1bHRWZXJpZnlQYXRocyIsCisgICAgImNhZmlsZSBjYXBhdGggb3BlbnNzbF9jYWZpbGVfZW52IG9wZW5zc2xfY2FmaWxlIG9wZW5zc2xfY2FwYXRoX2VudiAiCisgICAgIm9wZW5zc2xfY2FwYXRoIikKKworZGVmIGdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpOgorICAgICIiIlJldHVybiBwYXRocyB0byBkZWZhdWx0IGNhZmlsZSBhbmQgY2FwYXRoLgorICAgICIiIgorICAgIHBhcnRzID0gX3NzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICAgIyBlbnZpcm9ubWVudCB2YXJzIHNoYWRvdyBwYXRocworICAgIGNhZmlsZSA9IG9zLmVudmlyb24uZ2V0KHBhcnRzWzBdLCBwYXJ0c1sxXSkKKyAgICBjYXBhdGggPSBvcy5lbnZpcm9uLmdldChwYXJ0c1syXSwgcGFydHNbM10pCisKKyAgICByZXR1cm4gRGVmYXVsdFZlcmlmeVBhdGhzKGNhZmlsZSBpZiBvcy5wYXRoLmlzZmlsZShjYWZpbGUpIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aCBpZiBvcy5wYXRoLmlzZGlyKGNhcGF0aCkgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcnRzKQorCisKK2NsYXNzIF9BU04xT2JqZWN0KG5hbWVkdHVwbGUoIl9BU04xT2JqZWN0IiwgIm5pZCBzaG9ydG5hbWUgbG9uZ25hbWUgb2lkIikpOgorICAgICIiIkFTTi4xIG9iamVjdCBpZGVudGlmaWVyIGxvb2t1cAorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG9pZCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX3R4dDJvYmoob2lkLCBuYW1lPUZhbHNlKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tbmlkKGNscywgbmlkKToKKyAgICAgICAgIiIiQ3JlYXRlIF9BU04xT2JqZWN0IGZyb20gT3BlblNTTCBudW1lcmljIElECisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl9uaWQyb2JqKG5pZCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW5hbWUoY2xzLCBuYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlIF9BU04xT2JqZWN0IGZyb20gc2hvcnQgbmFtZSwgbG9uZyBuYW1lIG9yIE9JRAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfdHh0Mm9iaihuYW1lLCBuYW1lPVRydWUpKQorCisKK2NsYXNzIFB1cnBvc2UoX0FTTjFPYmplY3QsIF9FbnVtKToKKyAgICAiIiJTU0xDb250ZXh0IHB1cnBvc2UgZmxhZ3Mgd2l0aCBYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlIG9iamVjdHMKKyAgICAiIiIKKyAgICBTRVJWRVJfQVVUSCA9ICcxLjMuNi4xLjUuNS43LjMuMScKKyAgICBDTElFTlRfQVVUSCA9ICcxLjMuNi4xLjUuNS43LjMuMicKKworCiBjbGFzcyBTU0xDb250ZXh0KF9TU0xDb250ZXh0KToKICAgICAiIiJBbiBTU0xDb250ZXh0IGhvbGRzIHZhcmlvdXMgU1NMLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZAogICAgIGRhdGEsIHN1Y2ggYXMgY2VydGlmaWNhdGVzIGFuZCBwb3NzaWJseSBhIHByaXZhdGUga2V5LiIiIgogCi0gICAgX19zbG90c19fID0gKCdwcm90b2NvbCcsKQorICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCAnX193ZWFrcmVmX18nKQorICAgIF93aW5kb3dzX2NlcnRfc3RvcmVzID0gKCJDQSIsICJST09UIikKIAogICAgIGRlZiBfX25ld19fKGNscywgcHJvdG9jb2wsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYgPSBfU1NMQ29udGV4dC5fX25ld19fKGNscywgcHJvdG9jb2wpCkBAIC0yNTUsNiArMzUwLDkyIEBACiAKICAgICAgICAgc2VsZi5fc2V0X25wbl9wcm90b2NvbHMocHJvdG9zKQogCisgICAgZGVmIF9sb2FkX3dpbmRvd3Nfc3RvcmVfY2VydHMoc2VsZiwgc3RvcmVuYW1lLCBwdXJwb3NlKToKKyAgICAgICAgY2VydHMgPSBieXRlYXJyYXkoKQorICAgICAgICBmb3IgY2VydCwgZW5jb2RpbmcsIHRydXN0IGluIGVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSk6CisgICAgICAgICAgICAjIENBIGNlcnRzIGFyZSBuZXZlciBQS0NTIzcgZW5jb2RlZAorICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gIng1MDlfYXNuIjoKKyAgICAgICAgICAgICAgICBpZiB0cnVzdCBpcyBUcnVlIG9yIHB1cnBvc2Uub2lkIGluIHRydXN0OgorICAgICAgICAgICAgICAgICAgICBjZXJ0cy5leHRlbmQoY2VydCkKKyAgICAgICAgc2VsZi5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNlcnRzKQorICAgICAgICByZXR1cm4gY2VydHMKKworICAgIGRlZiBsb2FkX2RlZmF1bHRfY2VydHMoc2VsZiwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiBzZWxmLl93aW5kb3dzX2NlcnRfc3RvcmVzOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzdG9yZW5hbWUsIHB1cnBvc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCAqLCBjYWZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgU1NMQ29udGV4dCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzLgorCisgICAgTk9URTogVGhlIHByb3RvY29sIGFuZCBzZXR0aW5ncyBtYXkgY2hhbmdlIGFueXRpbWUgd2l0aG91dCBwcmlvcgorICAgICAgICAgIGRlcHJlY2F0aW9uLiBUaGUgdmFsdWVzIHJlcHJlc2VudCBhIGZhaXIgYmFsYW5jZSBiZXR3ZWVuIG1heGltdW0KKyAgICAgICAgICBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorICAgIGNvbnRleHQgPSBTU0xDb250ZXh0KFBST1RPQ09MX1RMU3YxKQorICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MgorICAgICMgZGlzYWJsZSBjb21wcmVzc2lvbiB0byBwcmV2ZW50IENSSU1FIGF0dGFja3MgKE9wZW5TU0wgMS4wKykKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKQorICAgICMgZGlzYWxsb3cgY2lwaGVycyB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcworICAgIGNvbnRleHQuc2V0X2NpcGhlcnMoX1JFU1RSSUNURURfQ0lQSEVSUykKKyAgICAjIHZlcmlmeSBjZXJ0cyBpbiBjbGllbnQgbW9kZQorICAgIGlmIHB1cnBvc2UgPT0gUHVycG9zZS5TRVJWRVJfQVVUSDoKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IENFUlRfUkVRVUlSRUQKKyAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGF0YToKKyAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSkKKyAgICBlbGlmIGNvbnRleHQudmVyaWZ5X21vZGUgIT0gQ0VSVF9OT05FOgorICAgICAgICAjIG5vIGV4cGxpY2l0IGNhZmlsZSwgY2FwYXRoIG9yIGNhZGF0YSBidXQgdGhlIHZlcmlmeSBtb2RlIGlzCisgICAgICAgICMgQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVELiBMZXQncyB0cnkgdG8gbG9hZCBkZWZhdWx0IHN5c3RlbQorICAgICAgICAjIHJvb3QgQ0EgY2VydGlmaWNhdGVzIGZvciB0aGUgZ2l2ZW4gcHVycG9zZS4gVGhpcyBtYXkgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgY29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZSkKKyAgICByZXR1cm4gY29udGV4dAorCisKK2RlZiBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHByb3RvY29sPVBST1RPQ09MX1NTTHYyMywgKiwgY2VydF9yZXFzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1Ob25lLCBrZXlmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCBmb3IgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzCisKKyAgICBBbGwgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzIHNoYWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBTU0xDb250ZXh0CisgICAgb2JqZWN0cyBpbiBvcmRlciB0byBrZWVwIGNvbW1vbiBzZXR0aW5ncyBpbiBvbmUgcGxhY2UuIFRoZSBjb25maWd1cmF0aW9uCisgICAgaXMgbGVzcyByZXN0cmljdCB0aGFuIGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSdzIHRvIGluY3JlYXNlIGJhY2t3YXJkCisgICAgY29tcGF0aWJpbGl0eS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorCisgICAgY29udGV4dCA9IFNTTENvbnRleHQocHJvdG9jb2wpCisgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCisgICAgY29udGV4dC5vcHRpb25zIHw9IE9QX05PX1NTTHYyCisKKyAgICBpZiBjZXJ0X3JlcXMgaXMgbm90IE5vbmU6CisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKKworICAgIGlmIGtleWZpbGUgYW5kIG5vdCBjZXJ0ZmlsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIGNlcnRmaWxlIG9yIGtleWZpbGU6CisgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQorCisgICAgIyBsb2FkIENBIHJvb3QgY2VydHMKKyAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGF0YToKKyAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSkKKyAgICBlbGlmIGNvbnRleHQudmVyaWZ5X21vZGUgIT0gQ0VSVF9OT05FOgorICAgICAgICAjIG5vIGV4cGxpY2l0IGNhZmlsZSwgY2FwYXRoIG9yIGNhZGF0YSBidXQgdGhlIHZlcmlmeSBtb2RlIGlzCisgICAgICAgICMgQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVELiBMZXQncyB0cnkgdG8gbG9hZCBkZWZhdWx0IHN5c3RlbQorICAgICAgICAjIHJvb3QgQ0EgY2VydGlmaWNhdGVzIGZvciB0aGUgZ2l2ZW4gcHVycG9zZS4gVGhpcyBtYXkgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgY29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZSkKKworICAgIHJldHVybiBjb250ZXh0CiAKIGNsYXNzIFNTTFNvY2tldChzb2NrZXQpOgogICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHN1YnR5cGUgb2Ygc29ja2V0LnNvY2tldCB0aGF0IHdyYXBzCkBAIC0yNzEsNyArNDUyLDcgQEAKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ9Tm9uZSk6CiAKICAgICAgICAgaWYgX2NvbnRleHQ6Ci0gICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBfY29udGV4dAorICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IF9jb250ZXh0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgbm90IGNlcnRmaWxlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGZvciBzZXJ2ZXItc2lkZSAiCkBAIC0yODAsMTYgKzQ2MSwxNiBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIikKICAgICAgICAgICAgIGlmIGNlcnRmaWxlIGFuZCBub3Qga2V5ZmlsZToKICAgICAgICAgICAgICAgICBrZXlmaWxlID0gY2VydGZpbGUKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCi0gICAgICAgICAgICBzZWxmLmNvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5fY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcwogICAgICAgICAgICAgaWYgY2FfY2VydHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKICAgICAgICAgICAgIGlmIGNlcnRmaWxlOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCiAgICAgICAgICAgICBpZiBucG5fcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKICAgICAgICAgICAgIGlmIGNpcGhlcnM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfcmVxcyA9IGNlcnRfcmVxcwpAQCAtMzAzLDcgKzQ4NCw2IEBACiAgICAgICAgIHNlbGYuc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCiAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QgPSBkb19oYW5kc2hha2Vfb25fY29ubmVjdAogICAgICAgICBzZWxmLnN1cHByZXNzX3JhZ2dlZF9lb2ZzID0gc3VwcHJlc3NfcmFnZ2VkX2VvZnMKLSAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrLmZhbWlseSwKQEAgLTMxMSwyNyArNDkxLDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89c29jay5wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm89c29jay5maWxlbm8oKSkKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dChzb2NrLmdldHRpbWVvdXQoKSkKLSAgICAgICAgICAgICMgc2VlIGlmIGl0J3MgY29ubmVjdGVkCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgc29jay5kZXRhY2goKQogICAgICAgICBlbGlmIGZpbGVubyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmaWxlbm89ZmlsZW5vKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCiAKKyAgICAgICAgIyBTZWUgaWYgd2UgYXJlIGNvbm5lY3RlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCisKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBjb25uZWN0ZWQKICAgICAgICAgaWYgY29ubmVjdGVkOgogICAgICAgICAgICAgIyBjcmVhdGUgdGhlIFNTTCBvYmplY3QKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLmNvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuX2NvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgICAgIGlmIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKQEAgLTM0MCwxMCArNTIyLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkb19oYW5kc2hha2Vfb25fY29ubmVjdCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3Igbm9uLWJsb2NraW5nIHNvY2tldHMiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCiAKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgeAogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0CisKKyAgICBAY29udGV4dC5zZXR0ZXIKKyAgICBkZWYgY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICBzZWxmLl9jb250ZXh0ID0gY3R4CisgICAgICAgIHNlbGYuX3NzbG9iai5jb250ZXh0ID0gY3R4CisKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZCgiQ2FuJ3QgZHVwKCkgJXMgaW5zdGFuY2VzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQpAQCAtMzUyLDExICs1NDMsMjEgQEAKICAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24gaGVyZSBpZiB5b3Ugd2lzaCB0byBjaGVjayBmb3Igc3B1cmlvdXMgY2xvc2VzCiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfY2hlY2tfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgIyBnZXRwZWVybmFtZSgpIHdpbGwgcmFpc2UgRU5PVENPTk4gaWYgdGhlIHNvY2tldCBpcyByZWFsbHkKKyAgICAgICAgICAgICMgbm90IGNvbm5lY3RlZDsgbm90ZSB0aGF0IHdlIGNhbiBiZSBjb25uZWN0ZWQgZXZlbiB3aXRob3V0CisgICAgICAgICAgICAjIF9jb25uZWN0ZWQgYmVpbmcgc2V0LCBlLmcuIGlmIGNvbm5lY3QoKSBmaXJzdCByZXR1cm5lZAorICAgICAgICAgICAgIyBFQUdBSU4uCisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKwogICAgIGRlZiByZWFkKHNlbGYsIGxlbj0wLCBidWZmZXI9Tm9uZSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gTEVOIGJ5dGVzIGFuZCByZXR1cm4gdGhlbS4KICAgICAgICAgUmV0dXJuIHplcm8tbGVuZ3RoIHN0cmluZyBvbiBFT0YuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUmVhZCBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgYnVmZmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4sIGJ1ZmZlcikKQEAgLTM3Nyw2ICs1NzgsOCBAQAogICAgICAgICBudW1iZXIgb2YgYnl0ZXMgb2YgREFUQSBhY3R1YWxseSB0cmFuc21pdHRlZC4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXcml0ZSBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQogCiAgICAgZGVmIGdldHBlZXJjZXJ0KHNlbGYsIGJpbmFyeV9mb3JtPUZhbHNlKToKQEAgLTM4Niw2ICs1ODksNyBAQAogICAgICAgICBjZXJ0aWZpY2F0ZSB3YXMgcHJvdmlkZWQsIGJ1dCBub3QgdmFsaWRhdGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5wZWVyX2NlcnRpZmljYXRlKGJpbmFyeV9mb3JtKQogCiAgICAgZGVmIHNlbGVjdGVkX25wbl9wcm90b2NvbChzZWxmKToKQEAgLTQxNiwxOCArNjIwLDE3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGZsYWdzIG5vdCBhbGxvd2VkIGluIGNhbGxzIHRvIHNlbmQoKSBvbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFNTTEVycm9yIGFzIHg6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKHNlbGYsIGRhdGEsIGZsYWdzKQogCkBAIC01MzUsMTIgKzczOCwxMSBAQAogCiAgICAgZGVmIF9yZWFsX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCi0gICAgICAgICMgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICBzb2NrZXQuX3JlYWxfY2xvc2Uoc2VsZikKIAogICAgIGRlZiBkb19oYW5kc2hha2Uoc2VsZiwgYmxvY2s9RmFsc2UpOgogICAgICAgICAiIiJQZXJmb3JtIGEgVExTL1NTTCBoYW5kc2hha2UuIiIiCi0KKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHRpbWVvdXQgPT0gMC4wIGFuZCBibG9jazoKQEAgLTU2NCwxMSArNzY2LDExIEBACiAgICAgICAgICAgICAgICAgcmMgPSBOb25lCiAgICAgICAgICAgICAgICAgc29ja2V0LmNvbm5lY3Qoc2VsZiwgYWRkcikKICAgICAgICAgICAgIGlmIG5vdCByYzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHJldHVybiByYwotICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTY2NiwxNSArODY4LDE2IEBACiAgICAgSWYgJ3NzbF92ZXJzaW9uJyBpcyBzcGVjaWZpZWQsIHVzZSBpdCBpbiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0LiIiIgogCiAgICAgaG9zdCwgcG9ydCA9IGFkZHIKLSAgICBpZiAoY2FfY2VydHMgaXMgbm90IE5vbmUpOgorICAgIGlmIGNhX2NlcnRzIGlzIG5vdCBOb25lOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX1JFUVVJUkVECiAgICAgZWxzZToKICAgICAgICAgY2VydF9yZXFzID0gQ0VSVF9OT05FCi0gICAgcyA9IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpCi0gICAgcyA9IHdyYXBfc29ja2V0KHMsIHNzbF92ZXJzaW9uPXNzbF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9Y2VydF9yZXFzLCBjYV9jZXJ0cz1jYV9jZXJ0cykKLSAgICBkZXJjZXJ0ID0gcy5nZXRwZWVyY2VydChUcnVlKQotICAgIHMuY2xvc2UoKQorICAgIGNvbnRleHQgPSBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNzbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPWNhX2NlcnRzKQorICAgIHdpdGggIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpIGFzIHNvY2s6CisgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrKSBhcyBzc2xzb2NrOgorICAgICAgICAgICAgZGVyY2VydCA9IHNzbHNvY2suZ2V0cGVlcmNlcnQoVHJ1ZSkKICAgICByZXR1cm4gREVSX2NlcnRfdG9fUEVNX2NlcnQoZGVyY2VydCkKIAogZGVmIGdldF9wcm90b2NvbF9uYW1lKHByb3RvY29sX2NvZGUpOgpkaWZmIC0tZ2l0IGEvTGliL3N0YXQucHkgYi9MaWIvc3RhdC5weQppbmRleCA3MDRhZGZlLi4zZWVjYzNlIDEwMDY0NAotLS0gYS9MaWIvc3RhdC5weQorKysgYi9MaWIvc3RhdC5weQpAQCAtMTQ3LDMgKzE0Nyw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwZXJtLmFwcGVuZCgiLSIpCiAgICAgcmV0dXJuICIiLmpvaW4ocGVybSkKKworIyBJZiBhdmFpbGFibGUsIHVzZSBDIGltcGxlbWVudGF0aW9uCit0cnk6CisgICAgZnJvbSBfc3RhdCBpbXBvcnQgKgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9zdGF0aXN0aWNzLnB5IGIvTGliL3N0YXRpc3RpY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3YTZkMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsNjEwIEBACisjIyAgTW9kdWxlIHN0YXRpc3RpY3MucHkKKyMjCisjIyAgQ29weXJpZ2h0IChjKSAyMDEzIFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+LgorIyMKKyMjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMjICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIworIyMgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyMKKyMjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiCitCYXNpYyBzdGF0aXN0aWNzIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBzdGF0aXN0aWNzIG9mIGRhdGEsIGluY2x1ZGluZworYXZlcmFnZXMsIHZhcmlhbmNlLCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uLgorCitDYWxjdWxhdGluZyBhdmVyYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Z1bmN0aW9uICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittZWFuICAgICAgICAgICAgICAgIEFyaXRobWV0aWMgbWVhbiAoYXZlcmFnZSkgb2YgZGF0YS4KK21lZGlhbiAgICAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCittZWRpYW5fbG93ICAgICAgICAgIExvdyBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9oaWdoICAgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9ncm91cGVkICAgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KK21vZGUgICAgICAgICAgICAgICAgTW9kZSAobW9zdCBjb21tb24gdmFsdWUpIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIGFyaXRobWV0aWMgbWVhbiAoInRoZSBhdmVyYWdlIikgb2YgZGF0YToKKworPj4+IG1lYW4oWy0xLjAsIDIuNSwgMy4yNSwgNS43NV0pCisyLjYyNQorCisKK0NhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgbWVkaWFuIG9mIGRpc2NyZXRlIGRhdGE6CisKKz4+PiBtZWRpYW4oWzIsIDMsIDQsIDVdKQorMy41CisKKworQ2FsY3VsYXRlIHRoZSBtZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZGF0YSBncm91cGVkIGludG8gY2xhc3MgaW50ZXJ2YWxzCitjZW50cmVkIG9uIHRoZSBkYXRhIHZhbHVlcyBwcm92aWRlZC4gRS5nLiBpZiB5b3VyIGRhdGEgcG9pbnRzIGFyZSByb3VuZGVkIHRvCit0aGUgbmVhcmVzdCB3aG9sZSBudW1iZXI6CisKKz4+PiBtZWRpYW5fZ3JvdXBlZChbMiwgMiwgMywgMywgMywgNF0pICAjZG9jdGVzdDogK0VMTElQU0lTCisyLjgzMzMzMzMzMzMuLi4KKworVGhpcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgaW4gdGhpcyB3YXk6IHlvdSBoYXZlIHR3byBkYXRhIHBvaW50cyBpbiB0aGUgY2xhc3MKK2ludGVydmFsIDEuNS0yLjUsIHRocmVlIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcyBpbnRlcnZhbCAyLjUtMy41LCBhbmQgb25lIGluCit0aGUgY2xhc3MgaW50ZXJ2YWwgMy41LTQuNS4gVGhlIG1lZGlhbiBvZiB0aGVzZSBkYXRhIHBvaW50cyBpcyAyLjgzMzMuLi4KKworCitDYWxjdWxhdGluZyB2YXJpYWJpbGl0eSBvciBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3B2YXJpYW5jZSAgICAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgordmFyaWFuY2UgICAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KK3BzdGRldiAgICAgICAgICAgICAgUG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KK3N0ZGV2ICAgICAgICAgICAgICAgU2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygc2FtcGxlIGRhdGE6CisKKz4+PiBzdGRldihbMi41LCAzLjI1LCA1LjUsIDExLjI1LCAxMS43NV0pICAjZG9jdGVzdDogK0VMTElQU0lTCis0LjM4OTYxODQzNDQ0Li4uCisKK0lmIHlvdSBoYXZlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB0aGUgbWVhbiwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZSBvcHRpb25hbAorc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBmb3VyICJzcHJlYWQiIGZ1bmN0aW9ucyB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCis+Pj4gZGF0YSA9IFsxLCAyLCAyLCA0LCA0LCA0LCA1LCA2XQorPj4+IG11ID0gbWVhbihkYXRhKQorPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKzIuNQorCisKK0V4Y2VwdGlvbnMKKy0tLS0tLS0tLS0KKworQSBzaW5nbGUgZXhjZXB0aW9uIGlzIGRlZmluZWQ6IFN0YXRpc3RpY3NFcnJvciBpcyBhIHN1YmNsYXNzIG9mIFZhbHVlRXJyb3IuCisKKyIiIgorCitfX2FsbF9fID0gWyAnU3RhdGlzdGljc0Vycm9yJywKKyAgICAgICAgICAgICdwc3RkZXYnLCAncHZhcmlhbmNlJywgJ3N0ZGV2JywgJ3ZhcmlhbmNlJywKKyAgICAgICAgICAgICdtZWRpYW4nLCAgJ21lZGlhbl9sb3cnLCAnbWVkaWFuX2hpZ2gnLCAnbWVkaWFuX2dyb3VwZWQnLAorICAgICAgICAgICAgJ21lYW4nLCAnbW9kZScsCisgICAgICAgICAgXQorCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG1hdGgKKworZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKworCisjID09PSBFeGNlcHRpb25zID09PQorCitjbGFzcyBTdGF0aXN0aWNzRXJyb3IoVmFsdWVFcnJvcik6CisgICAgcGFzcworCisKKyMgPT09IFByaXZhdGUgdXRpbGl0aWVzID09PQorCitkZWYgX3N1bShkYXRhLCBzdGFydD0wKToKKyAgICAiIiJfc3VtKGRhdGEgWywgc3RhcnRdKSAtPiB2YWx1ZQorCisgICAgUmV0dXJuIGEgaGlnaC1wcmVjaXNpb24gc3VtIG9mIHRoZSBnaXZlbiBudW1lcmljIGRhdGEuIElmIG9wdGlvbmFsCisgICAgYXJndW1lbnQgYGBzdGFydGBgIGlzIGdpdmVuLCBpdCBpcyBhZGRlZCB0byB0aGUgdG90YWwuIElmIGBgZGF0YWBgIGlzCisgICAgZW1wdHksIGBgc3RhcnRgYCAoZGVmYXVsdGluZyB0byAwKSBpcyByZXR1cm5lZC4KKworCisgICAgRXhhbXBsZXMKKyAgICAtLS0tLS0tLQorCisgICAgPj4+IF9zdW0oWzMsIDIuMjUsIDQuNSwgLTAuNSwgMS4wXSwgMC43NSkKKyAgICAxMS4wCisKKyAgICBTb21lIHNvdXJjZXMgb2Ygcm91bmQtb2ZmIGVycm9yIHdpbGwgYmUgYXZvaWRlZDoKKworICAgID4+PiBfc3VtKFsxZTUwLCAxLCAtMWU1MF0gKiAxMDAwKSAgIyBCdWlsdC1pbiBzdW0gcmV0dXJucyB6ZXJvLgorICAgIDEwMDAuMAorCisgICAgRnJhY3Rpb25zIGFuZCBEZWNpbWFscyBhcmUgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gX3N1bShbRigyLCAzKSwgRig3LCA1KSwgRigxLCA0KSwgRig1LCA2KV0pCisgICAgRnJhY3Rpb24oNjMsIDIwKQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IGRhdGEgPSBbRCgiMC4xMzc1IiksIEQoIjAuMjEwOCIpLCBEKCIwLjMwNjEiKSwgRCgiMC4wNDE5IildCisgICAgPj4+IF9zdW0oZGF0YSkKKyAgICBEZWNpbWFsKCcwLjY5NjMnKQorCisgICAgIiIiCisgICAgbiwgZCA9IF9leGFjdF9yYXRpbyhzdGFydCkKKyAgICBUID0gdHlwZShzdGFydCkKKyAgICBwYXJ0aWFscyA9IHtkOiBufSAgIyBtYXAge2Rlbm9taW5hdG9yOiBzdW0gb2YgbnVtZXJhdG9yc30KKyAgICAjIE1pY3JvLW9wdGltaXphdGlvbnMuCisgICAgY29lcmNlX3R5cGVzID0gX2NvZXJjZV90eXBlcworICAgIGV4YWN0X3JhdGlvID0gX2V4YWN0X3JhdGlvCisgICAgcGFydGlhbHNfZ2V0ID0gcGFydGlhbHMuZ2V0CisgICAgIyBBZGQgbnVtZXJhdG9ycyBmb3IgZWFjaCBkZW5vbWluYXRvciwgYW5kIHRyYWNrIHRoZSAiY3VycmVudCIgdHlwZS4KKyAgICBmb3IgeCBpbiBkYXRhOgorICAgICAgICBUID0gX2NvZXJjZV90eXBlcyhULCB0eXBlKHgpKQorICAgICAgICBuLCBkID0gZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgcGFydGlhbHNbZF0gPSBwYXJ0aWFsc19nZXQoZCwgMCkgKyBuCisgICAgaWYgTm9uZSBpbiBwYXJ0aWFsczoKKyAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3MoVCwgKGZsb2F0LCBEZWNpbWFsKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHBhcnRpYWxzW05vbmVdKQorICAgICAgICByZXR1cm4gVChwYXJ0aWFsc1tOb25lXSkKKyAgICB0b3RhbCA9IEZyYWN0aW9uKCkKKyAgICBmb3IgZCwgbiBpbiBzb3J0ZWQocGFydGlhbHMuaXRlbXMoKSk6CisgICAgICAgIHRvdGFsICs9IEZyYWN0aW9uKG4sIGQpCisgICAgaWYgaXNzdWJjbGFzcyhULCBpbnQpOgorICAgICAgICBhc3NlcnQgdG90YWwuZGVub21pbmF0b3IgPT0gMQorICAgICAgICByZXR1cm4gVCh0b3RhbC5udW1lcmF0b3IpCisgICAgaWYgaXNzdWJjbGFzcyhULCBEZWNpbWFsKToKKyAgICAgICAgcmV0dXJuIFQodG90YWwubnVtZXJhdG9yKS90b3RhbC5kZW5vbWluYXRvcgorICAgIHJldHVybiBUKHRvdGFsKQorCisKK2RlZiBfZXhhY3RfcmF0aW8oeCk6CisgICAgIiIiQ29udmVydCBSZWFsIG51bWJlciB4IGV4YWN0bHkgdG8gKG51bWVyYXRvciwgZGVub21pbmF0b3IpIHBhaXIuCisKKyAgICA+Pj4gX2V4YWN0X3JhdGlvKDAuMjUpCisgICAgKDEsIDQpCisKKyAgICB4IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGludCwgRnJhY3Rpb24sIERlY2ltYWwgb3IgZmxvYXQuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGludCwgRnJhY3Rpb24KKyAgICAgICAgICAgIHJldHVybiAoeC5udW1lcmF0b3IsIHguZGVub21pbmF0b3IpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgZmxvYXQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4geC5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIERlY2ltYWwKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZGVjaW1hbF90b19yYXRpbyh4KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gImNhbid0IGNvbnZlcnQgdHlwZSAne30nIHRvIG51bWVyYXRvci9kZW5vbWluYXRvciIKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQodHlwZSh4KS5fX25hbWVfXykpIGZyb20gTm9uZQorICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICMgSU5GIG9yIE5BTgorICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICAjIERlY2ltYWwgc2lnbmFsbGluZyBOQU5zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gZmxvYXQgOi0oCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgsIERlY2ltYWwpOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgeC5pc19maW5pdGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IG1hdGguaXNmaW5pdGUoeCkKKyAgICAgICAgcmV0dXJuICh4LCBOb25lKQorCisKKyMgRklYTUUgVGhpcyBpcyBmYXN0ZXIgdGhhbiBGcmFjdGlvbi5mcm9tX2RlY2ltYWwsIGJ1dCBzdGlsbCB0b28gc2xvdy4KK2RlZiBfZGVjaW1hbF90b19yYXRpbyhkKToKKyAgICAiIiJDb252ZXJ0IERlY2ltYWwgZCB0byBleGFjdCBpbnRlZ2VyIHJhdGlvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKS4KKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICA+Pj4gX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMi42IikpCisgICAgKDI2LCAxMCkKKworICAgICIiIgorICAgIHNpZ24sIGRpZ2l0cywgZXhwID0gZC5hc190dXBsZSgpCisgICAgaWYgZXhwIGluICgnRicsICduJywgJ04nKTogICMgSU5GLCBOQU4sIHNOQU4KKyAgICAgICAgYXNzZXJ0IG5vdCBkLmlzX2Zpbml0ZSgpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICBudW0gPSAwCisgICAgZm9yIGRpZ2l0IGluIGRpZ2l0czoKKyAgICAgICAgbnVtID0gbnVtKjEwICsgZGlnaXQKKyAgICBpZiBzaWduOgorICAgICAgICBudW0gPSAtbnVtCisgICAgZGVuID0gMTAqKi1leHAKKyAgICByZXR1cm4gKG51bSwgZGVuKQorCisKK2RlZiBfY29lcmNlX3R5cGVzKFQxLCBUMik6CisgICAgIiIiQ29lcmNlIHR5cGVzIFQxIGFuZCBUMiB0byBhIGNvbW1vbiB0eXBlLgorCisgICAgPj4+IF9jb2VyY2VfdHlwZXMoaW50LCBmbG9hdCkKKyAgICA8Y2xhc3MgJ2Zsb2F0Jz4KKworICAgIENvZXJjaW9uIGlzIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8gdGhpcyB0YWJsZSwgd2hlcmUgIk4vQSIgbWVhbnMKKyAgICB0aGF0IGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgIHwgICAgICAgICAgfCBpbnQgICAgICAgfCBGcmFjdGlvbiAgfCBEZWNpbWFsICAgfCBmbG9hdCAgICB8CisgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICB8IGludCAgICAgIHwgaW50ICAgICAgIHwgRnJhY3Rpb24gIHwgRGVjaW1hbCAgIHwgZmxvYXQgICAgfAorICAgIHwgRnJhY3Rpb24gfCBGcmFjdGlvbiAgfCBGcmFjdGlvbiAgfCBOL0EgICAgICAgfCBmbG9hdCAgICB8CisgICAgfCBEZWNpbWFsICB8IERlY2ltYWwgICB8IE4vQSAgICAgICB8IERlY2ltYWwgICB8IGZsb2F0ICAgIHwKKyAgICB8IGZsb2F0ICAgIHwgZmxvYXQgICAgIHwgZmxvYXQgICAgIHwgZmxvYXQgICAgIHwgZmxvYXQgICAgfAorICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgICBTdWJjbGFzc2VzIHRydW1wIHRoZWlyIHBhcmVudCBjbGFzczsgdHdvIHN1YmNsYXNzZXMgb2YgdGhlIHNhbWUKKyAgICBiYXNlIGNsYXNzIHdpbGwgYmUgY29lcmNlZCB0byB0aGUgc2Vjb25kIG9mIHRoZSB0d28uCisKKyAgICAiIiIKKyAgICAjIEdldCB0aGUgY29tbW9uL2Zhc3QgY2FzZXMgb3V0IG9mIHRoZSB3YXkgZmlyc3QuCisgICAgaWYgVDEgaXMgVDI6IHJldHVybiBUMQorICAgIGlmIFQxIGlzIGludDogcmV0dXJuIFQyCisgICAgaWYgVDIgaXMgaW50OiByZXR1cm4gVDEKKyAgICAjIFN1YmNsYXNzZXMgdHJ1bXAgdGhlaXIgcGFyZW50IGNsYXNzLgorICAgIGlmIGlzc3ViY2xhc3MoVDIsIFQxKTogcmV0dXJuIFQyCisgICAgaWYgaXNzdWJjbGFzcyhUMSwgVDIpOiByZXR1cm4gVDEKKyAgICAjIEZsb2F0cyB0cnVtcCBldmVyeXRoaW5nIGVsc2UuCisgICAgaWYgaXNzdWJjbGFzcyhUMiwgZmxvYXQpOiByZXR1cm4gVDIKKyAgICBpZiBpc3N1YmNsYXNzKFQxLCBmbG9hdCk6IHJldHVybiBUMQorICAgICMgU3ViY2xhc3NlcyBvZiB0aGUgc2FtZSBiYXNlIGNsYXNzIGdpdmUgcHJpb3JpdHkgdG8gdGhlIHNlY29uZC4KKyAgICBpZiBUMS5fX2Jhc2VfXyBpcyBUMi5fX2Jhc2VfXzogcmV0dXJuIFQyCisgICAgIyBPdGhlcndpc2UsIGp1c3QgZ2l2ZSB1cC4KKyAgICByYWlzZSBUeXBlRXJyb3IoJ2Nhbm5vdCBjb2VyY2UgdHlwZXMgJXIgYW5kICVyJyAlIChUMSwgVDIpKQorCisKK2RlZiBfY291bnRzKGRhdGEpOgorICAgICMgR2VuZXJhdGUgYSB0YWJsZSBvZiBzb3J0ZWQgKHZhbHVlLCBmcmVxdWVuY3kpIHBhaXJzLgorICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdOb25lIGlzIG5vdCBpdGVyYWJsZScpCisgICAgdGFibGUgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGRhdGEpLm1vc3RfY29tbW9uKCkKKyAgICBpZiBub3QgdGFibGU6CisgICAgICAgIHJldHVybiB0YWJsZQorICAgICMgRXh0cmFjdCB0aGUgdmFsdWVzIHdpdGggdGhlIGhpZ2hlc3QgZnJlcXVlbmN5LgorICAgIG1heGZyZXEgPSB0YWJsZVswXVsxXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbih0YWJsZSkpOgorICAgICAgICBpZiB0YWJsZVtpXVsxXSAhPSBtYXhmcmVxOgorICAgICAgICAgICAgdGFibGUgPSB0YWJsZVs6aV0KKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRhYmxlCisKKworIyA9PT0gTWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSAoYXZlcmFnZXMpID09PQorCitkZWYgbWVhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSBhcml0aG1ldGljIG1lYW4gb2YgZGF0YS4KKworICAgID4+PiBtZWFuKFsxLCAyLCAzLCA0LCA0XSkKKyAgICAyLjgKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBtZWFuKFtGKDMsIDcpLCBGKDEsIDIxKSwgRig1LCAzKSwgRigxLCAzKV0pCisgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IG1lYW4oW0QoIjAuNSIpLCBEKCIwLjc1IiksIEQoIjAuNjI1IiksIEQoIjAuMzc1IildKQorICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgICBJZiBgYGRhdGFgYCBpcyBlbXB0eSwgU3RhdGlzdGljc0Vycm9yIHdpbGwgYmUgcmFpc2VkLgorICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbWVhbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgcmV0dXJuIF9zdW0oZGF0YSkvbgorCisKKyMgRklYTUU6IGludmVzdGlnYXRlIHdheXMgdG8gY2FsY3VsYXRlIG1lZGlhbnMgd2l0aG91dCBzb3J0aW5nPyBRdWlja3NlbGVjdD8KK2RlZiBtZWRpYW4oZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgbnVtZXJpYyBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgcmV0dXJuIHRoZSBtaWRkbGUgZGF0YSBwb2ludC4KKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgZXZlbiwgdGhlIG1lZGlhbiBpcyBpbnRlcnBvbGF0ZWQgYnkKKyAgICB0YWtpbmcgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzOgorCisgICAgPj4+IG1lZGlhbihbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW4oWzEsIDMsIDUsIDddKQorICAgIDQuMAorCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBpZiBuJTIgPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMl0KKyAgICBlbHNlOgorICAgICAgICBpID0gbi8vMgorICAgICAgICByZXR1cm4gKGRhdGFbaSAtIDFdICsgZGF0YVtpXSkvMgorCisKK2RlZiBtZWRpYW5fbG93KGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbG93IG1lZGlhbiBvZiBudW1lcmljIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLgorICAgIFdoZW4gaXQgaXMgZXZlbiwgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNSwgN10pCisgICAgMworCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBpZiBuJTIgPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMl0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yIC0gMV0KKworCitkZWYgbWVkaWFuX2hpZ2goZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBoaWdoIG1lZGlhbiBvZiBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBsYXJnZXIgb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1LCA3XSkKKyAgICA1CisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIHJldHVybiBkYXRhW24vLzJdCisKKworZGVmIG1lZGlhbl9ncm91cGVkKGRhdGEsIGludGVydmFsPTEpOgorICAgICIiIiJSZXR1cm4gdGhlIDUwdGggcGVyY2VudGlsZSAobWVkaWFuKSBvZiBncm91cGVkIGNvbnRpbnVvdXMgZGF0YS4KKworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgNV0pCisgICAgMy43CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFs1MiwgNTIsIDUzLCA1NF0pCisgICAgNTIuNQorCisgICAgVGhpcyBjYWxjdWxhdGVzIHRoZSBtZWRpYW4gYXMgdGhlIDUwdGggcGVyY2VudGlsZSwgYW5kIHNob3VsZCBiZQorICAgIHVzZWQgd2hlbiB5b3VyIGRhdGEgaXMgY29udGludW91cyBhbmQgZ3JvdXBlZC4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsCisgICAgdGhlIHZhbHVlcyAxLCAyLCAzLCBldGMuIGFjdHVhbGx5IHJlcHJlc2VudCB0aGUgbWlkcG9pbnQgb2YgY2xhc3NlcworICAgIDAuNS0xLjUsIDEuNS0yLjUsIDIuNS0zLjUsIGV0Yy4gVGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4KKyAgICBjbGFzcyAzLjUtNC41LCBhbmQgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0LgorCisgICAgT3B0aW9uYWwgYXJndW1lbnQgYGBpbnRlcnZhbGBgIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQKKyAgICBkZWZhdWx0cyB0byAxLiBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZQorICAgIGludGVycG9sYXRlZCA1MHRoIHBlcmNlbnRpbGUgdmFsdWU6CisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0xKQorICAgIDMuMjUKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0yKQorICAgIDMuNQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICBgYGludGVydmFsYGAgYXBhcnQuCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBlbGlmIG4gPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbMF0KKyAgICAjIEZpbmQgdGhlIHZhbHVlIGF0IHRoZSBtaWRwb2ludC4gUmVtZW1iZXIgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAjIGNlbnRyZSBvZiB0aGUgY2xhc3MgaW50ZXJ2YWwuCisgICAgeCA9IGRhdGFbbi8vMl0KKyAgICBmb3Igb2JqIGluICh4LCBpbnRlcnZhbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCBieXRlcykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBudW1iZXIgYnV0IGdvdCAlcicgJSBvYmopCisgICAgdHJ5OgorICAgICAgICBMID0geCAtIGludGVydmFsLzIgICMgVGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgIyBNaXhlZCB0eXBlLiBGb3Igbm93IHdlIGp1c3QgY29lcmNlIHRvIGZsb2F0LgorICAgICAgICBMID0gZmxvYXQoeCkgLSBmbG9hdChpbnRlcnZhbCkvMgorICAgIGNmID0gZGF0YS5pbmRleCh4KSAgIyBOdW1iZXIgb2YgdmFsdWVzIGJlbG93IHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgIyBGSVhNRSBUaGUgZm9sbG93aW5nIGxpbmUgY291bGQgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGJpZyBsaXN0cy4KKyAgICBmID0gZGF0YS5jb3VudCh4KSAgIyBOdW1iZXIgb2YgZGF0YSBwb2ludHMgaW4gdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICByZXR1cm4gTCArIGludGVydmFsKihuLzIgLSBjZikvZgorCisKK2RlZiBtb2RlKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbW9zdCBjb21tb24gZGF0YSBwb2ludCBmcm9tIGRpc2NyZXRlIG9yIG5vbWluYWwgZGF0YS4KKworICAgIGBgbW9kZWBgIGFzc3VtZXMgZGlzY3JldGUgZGF0YSwgYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUuIFRoaXMgaXMgdGhlCisgICAgc3RhbmRhcmQgdHJlYXRtZW50IG9mIHRoZSBtb2RlIGFzIGNvbW1vbmx5IHRhdWdodCBpbiBzY2hvb2xzOgorCisgICAgPj4+IG1vZGUoWzEsIDEsIDIsIDMsIDMsIDMsIDMsIDRdKQorICAgIDMKKworICAgIFRoaXMgYWxzbyB3b3JrcyB3aXRoIG5vbWluYWwgKG5vbi1udW1lcmljKSBkYXRhOgorCisgICAgPj4+IG1vZGUoWyJyZWQiLCAiYmx1ZSIsICJibHVlIiwgInJlZCIsICJncmVlbiIsICJyZWQiLCAicmVkIl0pCisgICAgJ3JlZCcKKworICAgIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBtb3N0IGNvbW1vbiB2YWx1ZSwgYGBtb2RlYGAgd2lsbCByYWlzZQorICAgIFN0YXRpc3RpY3NFcnJvci4KKyAgICAiIiIKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICB0YWJsZSA9IF9jb3VudHMoZGF0YSkKKyAgICBpZiBsZW4odGFibGUpID09IDE6CisgICAgICAgIHJldHVybiB0YWJsZVswXVswXQorICAgIGVsaWYgdGFibGU6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigKKyAgICAgICAgICAgICAgICAnbm8gdW5pcXVlIG1vZGU7IGZvdW5kICVkIGVxdWFsbHkgY29tbW9uIHZhbHVlcycgJSBsZW4odGFibGUpCisgICAgICAgICAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbm8gbW9kZSBmb3IgZW1wdHkgZGF0YScpCisKKworIyA9PT0gTWVhc3VyZXMgb2Ygc3ByZWFkID09PQorCisjIFNlZSBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1ZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vU2FtcGxlVmFyaWFuY2UuaHRtbAorIyAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BbGdvcml0aG1zX2Zvcl9jYWxjdWxhdGluZ192YXJpYW5jZQorIworIyBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHVzZSB0aGUgc28tY2FsbGVkICJjb21wdXRhdGlvbmFsIGZvcm11bGEgZm9yCisjIHZhcmlhbmNlIiwgYXMgdGhhdCBpcyBvbmx5IHN1aXRhYmxlIGZvciBoYW5kIGNhbGN1bGF0aW9ucyB3aXRoIGEgc21hbGwKKyMgYW1vdW50IG9mIGxvdy1wcmVjaXNpb24gZGF0YS4gSXQgaGFzIHRlcnJpYmxlIG51bWVyaWMgcHJvcGVydGllcy4KKyMKKyMgU2VlIGEgY29tcGFyaXNvbiBvZiB0aHJlZSBjb21wdXRhdGlvbmFsIG1ldGhvZHMgaGVyZToKKyMgaHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvMjAwOC8wOS8yNi9jb21wYXJpbmctdGhyZWUtbWV0aG9kcy1vZi1jb21wdXRpbmctc3RhbmRhcmQtZGV2aWF0aW9uLworCitkZWYgX3NzKGRhdGEsIGM9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHN1bSBvZiBzcXVhcmUgZGV2aWF0aW9ucyBvZiBzZXF1ZW5jZSBkYXRhLgorCisgICAgSWYgYGBjYGAgaXMgTm9uZSwgdGhlIG1lYW4gaXMgY2FsY3VsYXRlZCBpbiBvbmUgcGFzcywgYW5kIHRoZSBkZXZpYXRpb25zCisgICAgZnJvbSB0aGUgbWVhbiBhcmUgY2FsY3VsYXRlZCBpbiBhIHNlY29uZCBwYXNzLiBPdGhlcndpc2UsIGRldmlhdGlvbnMgYXJlCisgICAgY2FsY3VsYXRlZCBmcm9tIGBgY2BgIGFzIGdpdmVuLiBVc2UgdGhlIHNlY29uZCBjYXNlIHdpdGggY2FyZSwgYXMgaXQgY2FuCisgICAgbGVhZCB0byBnYXJiYWdlIHJlc3VsdHMuCisgICAgIiIiCisgICAgaWYgYyBpcyBOb25lOgorICAgICAgICBjID0gbWVhbihkYXRhKQorICAgIHNzID0gX3N1bSgoeC1jKSoqMiBmb3IgeCBpbiBkYXRhKQorICAgICMgVGhlIGZvbGxvd2luZyBzdW0gc2hvdWxkIG1hdGhlbWF0aWNhbGx5IGVxdWFsIHplcm8sIGJ1dCBkdWUgdG8gcm91bmRpbmcKKyAgICAjIGVycm9yIG1heSBub3QuCisgICAgc3MgLT0gX3N1bSgoeC1jKSBmb3IgeCBpbiBkYXRhKSoqMi9sZW4oZGF0YSkKKyAgICBhc3NlcnQgbm90IHNzIDwgMCwgJ25lZ2F0aXZlIHN1bSBvZiBzcXVhcmUgZGV2aWF0aW9uczogJWYnICUgc3MKKyAgICByZXR1cm4gc3MKKworCitkZWYgdmFyaWFuY2UoZGF0YSwgeGJhcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCB0d28KKyAgICB2YWx1ZXMuIFRoZSBvcHRpb25hbCBhcmd1bWVudCB4YmFyLCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvCisgICAgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgc2VlIGBgcHZhcmlhbmNlYGAuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgID4+PiB2YXJpYW5jZShkYXRhKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzCisgICAgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBgYHhiYXJgYCB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCisgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgPj4+IHZhcmlhbmNlKGRhdGEsIG0pCisgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGB4YmFyYGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YKKyAgICBgYGRhdGFgYC4gR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgeGJhcmBgIG1heSBsZWFkIHRvIGludmFsaWQgb3IKKyAgICBpbXBvc3NpYmxlIHJlc3VsdHMuCisKKyAgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCczMS4wMTg3NScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gdmFyaWFuY2UoW0YoMSwgNiksIEYoMSwgMiksIEYoNSwgMyldKQorICAgIEZyYWN0aW9uKDY3LCAxMDgpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAyOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3ZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBkYXRhIHBvaW50cycpCisgICAgc3MgPSBfc3MoZGF0YSwgeGJhcikKKyAgICByZXR1cm4gc3MvKG4tMSkKKworCitkZWYgcHZhcmlhbmNlKGRhdGEsIG11PU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBgYGRhdGFgYC4KKworICAgIGRhdGEgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIFJlYWwtdmFsdWVkIG51bWJlcnMsIHdpdGggYXQgbGVhc3Qgb25lCisgICAgdmFsdWUuIFRoZSBvcHRpb25hbCBhcmd1bWVudCBtdSwgaWYgZ2l2ZW4sIHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgIHRoZSBkYXRhLiBJZiBpdCBpcyBtaXNzaW5nIG9yIE5vbmUsIHRoZSBtZWFuIGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24uCisgICAgVG8gZXN0aW1hdGUgdGhlIHZhcmlhbmNlIGZyb20gYSBzYW1wbGUsIHRoZSBgYHZhcmlhbmNlYGAgZnVuY3Rpb24gaXMKKyAgICB1c3VhbGx5IGEgYmV0dGVyIGNob2ljZS4KKworICAgIEV4YW1wbGVzOgorCisgICAgPj4+IGRhdGEgPSBbMC4wLCAwLjI1LCAwLjI1LCAxLjI1LCAxLjUsIDEuNzUsIDIuNzUsIDMuMjVdCisgICAgPj4+IHB2YXJpYW5jZShkYXRhKQorICAgIDEuMjUKKworICAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB0aGUgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzCisgICAgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCisgICAgPj4+IG11ID0gbWVhbihkYXRhKQorICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgMS4yNQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IGBgbXVgYCBpcyBhY3R1YWxseSB0aGUgbWVhbiBvZiBgYGRhdGFgYC4KKyAgICBHaXZpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGBtdWBgIG1heSBsZWFkIHRvIGludmFsaWQgb3IgaW1wb3NzaWJsZQorICAgIHJlc3VsdHMuCisKKyAgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gcHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBwdmFyaWFuY2UoW0YoMSwgNCksIEYoNSwgNCksIEYoMSwgMildKQorICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigncHZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKKyAgICBzcyA9IF9zcyhkYXRhLCBtdSkKKyAgICByZXR1cm4gc3MvbgorCisKK2RlZiBzdGRldihkYXRhLCB4YmFyPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHNhbXBsZSB2YXJpYW5jZS4KKworICAgIFNlZSBgYHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKyAgICAiIiIKKyAgICB2YXIgPSB2YXJpYW5jZShkYXRhLCB4YmFyKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQorCisKK2RlZiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworICAgIFNlZSBgYHB2YXJpYW5jZWBgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgICA+Pj4gcHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAwLjk4Njg5MzI3MzUyNzI1MQorCisgICAgIiIiCisgICAgdmFyID0gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQpkaWZmIC0tZ2l0IGEvTGliL3N0cnVjdC5weSBiL0xpYi9zdHJ1Y3QucHkKaW5kZXggOWJmYzIzZi4uZDZiYmE1OCAxMDA2NDQKLS0tIGEvTGliL3N0cnVjdC5weQorKysgYi9MaWIvc3RydWN0LnB5CkBAIC0xLDYgKzEsNyBAQAogX19hbGxfXyA9IFsKICAgICAjIEZ1bmN0aW9ucwogICAgICdjYWxjc2l6ZScsICdwYWNrJywgJ3BhY2tfaW50bycsICd1bnBhY2snLCAndW5wYWNrX2Zyb20nLAorICAgICdpdGVyX3VucGFjaycsCiAKICAgICAjIENsYXNzZXMKICAgICAnU3RydWN0JywKZGlmZiAtLWdpdCBhL0xpYi9zdWJwcm9jZXNzLnB5IGIvTGliL3N1YnByb2Nlc3MucHkKaW5kZXggYzNhMjc4OC4uODgzNTVhZCAxMDA2NDQKLS0tIGEvTGliL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3N1YnByb2Nlc3MucHkKQEAgLTE0NSwxMSArMTQ1LDEzIEBACiBnZXRzdGF0dXNvdXRwdXQoY21kKToKICAgICBSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCiAKLSAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoIG9zLnBvcGVuKCkgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgICAoc3RhdHVzLCBvdXRwdXQpLiAgY21kIGlzIGFjdHVhbGx5IHJ1biBhcyAneyBjbWQgOyB9IDI+JjEnLCBzbyB0aGF0IHRoZQotICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiBBIHRyYWlsaW5nIG5ld2xpbmUKLSAgICBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlCi0gICAgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIEMgZnVuY3Rpb24gd2FpdCgpLiAgRXhhbXBsZToKKyAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoICdjaGVja19vdXRwdXQnIGFuZAorICAgIHJldHVybiBhIDItdHVwbGUgKHN0YXR1cywgb3V0cHV0KS4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZCwKKyAgICBtZWFuaW5nIHRoYXQgdGhlIHJlc3VsdCB3aXRoIGJlIGRlY29kZWQgdG8gYSBzdHJpbmcuCisKKyAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgorICAgIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlIGludGVycHJldGVkCisgICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIGZ1bmN0aW9uICd3YWl0Jy4gIEV4YW1wbGU6CiAKICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2xzIC9iaW4vbHMnKQogICAgICgwLCAnL2Jpbi9scycpCkBAIC0xNzgsNiArMTgwLDkgQEAKIAogICAgID4+PiBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudC4KIAogRXhjZXB0aW9ucwogLS0tLS0tLS0tLQpAQCAtMzk4LDE5ICs0MDMsMjQgQEAKICAgICAgICAgaFN0ZE91dHB1dCA9IE5vbmUKICAgICAgICAgaFN0ZEVycm9yID0gTm9uZQogICAgICAgICB3U2hvd1dpbmRvdyA9IDAKLSAgICBjbGFzcyBweXdpbnR5cGVzOgotICAgICAgICBlcnJvciA9IElPRXJyb3IKIGVsc2U6Ci0gICAgaW1wb3J0IHNlbGVjdAotICAgIF9oYXNfcG9sbCA9IGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpCiAgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKLSAgICBfY3JlYXRlX3BpcGUgPSBfcG9zaXhzdWJwcm9jZXNzLmNsb2V4ZWNfcGlwZQorICAgIGltcG9ydCBzZWxlY3QKKyAgICBpbXBvcnQgc2VsZWN0b3JzCiAKICAgICAjIFdoZW4gc2VsZWN0IG9yIHBvbGwgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBmaWxlIGlzIHdyaXRhYmxlLAogICAgICMgd2UgY2FuIHdyaXRlIHVwIHRvIF9QSVBFX0JVRiBieXRlcyB3aXRob3V0IHJpc2sgb2YgYmxvY2tpbmcuCiAgICAgIyBQT1NJWCBkZWZpbmVzIFBJUEVfQlVGIGFzID49IDUxMi4KICAgICBfUElQRV9CVUYgPSBnZXRhdHRyKHNlbGVjdCwgJ1BJUEVfQlVGJywgNTEyKQogCisgICAgIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZQorICAgICMgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZQorICAgICMgc3lzY2FsbCkuCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgX1BvcGVuU2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgX1BvcGVuU2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKwogCiBfX2FsbF9fID0gWyJQb3BlbiIsICJQSVBFIiwgIlNURE9VVCIsICJjYWxsIiwgImNoZWNrX2NhbGwiLCAiZ2V0c3RhdHVzb3V0cHV0IiwKICAgICAgICAgICAgImdldG91dHB1dCIsICJjaGVja19vdXRwdXQiLCAiQ2FsbGVkUHJvY2Vzc0Vycm9yIiwgIkRFVk5VTEwiXQpAQCAtNTA2LDYgKzUxNiw4IEBACiAgICAgZm9yIGZsYWcsIG9wdCBpbiBmbGFnX29wdF9tYXAuaXRlbXMoKToKICAgICAgICAgdiA9IGdldGF0dHIoc3lzLmZsYWdzLCBmbGFnKQogICAgICAgICBpZiB2ID4gMDoKKyAgICAgICAgICAgIGlmIGZsYWcgPT0gJ2hhc2hfcmFuZG9taXphdGlvbic6CisgICAgICAgICAgICAgICAgdiA9IDEgIyBIYW5kbGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBleGFjdCBzZWVkCiAgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLScgKyBvcHQgKiB2KQogICAgIGZvciBvcHQgaW4gc3lzLndhcm5vcHRpb25zOgogICAgICAgICBhcmdzLmFwcGVuZCgnLVcnICsgb3B0KQpAQCAtNTY4LDE0ICs1ODAsMzEgQEAKICAgICAuLi4gICAgICAgICAgICAgIHN0ZGVycj1TVERPVVQpCiAgICAgYidsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAorICAgIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uYWwgYXJndW1lbnQsICJpbnB1dCIsIGFsbG93aW5nIHlvdSB0bworICAgIHBhc3MgYSBzdHJpbmcgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHlvdSB1c2UgdGhpcyBhcmd1bWVudAorICAgIHlvdSBtYXkgbm90IGFsc28gdXNlIHRoZSBQb3BlbiBjb25zdHJ1Y3RvcidzICJzdGRpbiIgYXJndW1lbnQsIGFzCisgICAgaXQgdG9vIHdpbGwgYmUgdXNlZCBpbnRlcm5hbGx5LiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJzZWQiLCAiLWUiLCAicy9mb28vYmFyLyJdLAorICAgIC4uLiAgICAgICAgICAgICAgaW5wdXQ9YiJ3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgZm9vbWFuIGV2ZW50c1xuIikKKyAgICBiJ3doZW4gaW4gdGhlIGNvdXJzZSBvZiBiYXJtYW4gZXZlbnRzXG4nCisKICAgICBJZiB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSBpcyBwYXNzZWQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhCiAgICAgc3RyaW5nIHJhdGhlciB0aGFuIGJ5dGVzLgogICAgICIiIgogICAgIGlmICdzdGRvdXQnIGluIGt3YXJnczoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3Rkb3V0IGFyZ3VtZW50IG5vdCBhbGxvd2VkLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uJykKKyAgICBpZiAnaW5wdXQnIGluIGt3YXJnczoKKyAgICAgICAgaWYgJ3N0ZGluJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRpbiBhbmQgaW5wdXQgYXJndW1lbnRzIG1heSBub3QgYm90aCBiZSB1c2VkLicpCisgICAgICAgIGlucHV0ZGF0YSA9IGt3YXJnc1snaW5wdXQnXQorICAgICAgICBkZWwga3dhcmdzWydpbnB1dCddCisgICAgICAgIGt3YXJnc1snc3RkaW4nXSA9IFBJUEUKKyAgICBlbHNlOgorICAgICAgICBpbnB1dGRhdGEgPSBOb25lCiAgICAgd2l0aCBQb3BlbigqcG9wZW5hcmdzLCBzdGRvdXQ9UElQRSwgKiprd2FyZ3MpIGFzIHByb2Nlc3M6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUodGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dGRhdGEsIHRpbWVvdXQ9dGltZW91dCkKICAgICAgICAgZXhjZXB0IFRpbWVvdXRFeHBpcmVkOgogICAgICAgICAgICAgcHJvY2Vzcy5raWxsKCkKICAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQpAQCAtNjY0LDEzICs2OTMsMTUgQEAKICMKIAogZGVmIGdldHN0YXR1c291dHB1dChjbWQpOgotICAgICIiIlJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KKyAgICAiIiIgICAgUmV0dXJuIChzdGF0dXMsIG91dHB1dCkgb2YgZXhlY3V0aW5nIGNtZCBpbiBhIHNoZWxsLgogCi0gICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCBvcy5wb3BlbigpIGFuZCByZXR1cm4gYSAyLXR1cGxlCi0gICAgKHN0YXR1cywgb3V0cHV0KS4gIGNtZCBpcyBhY3R1YWxseSBydW4gYXMgJ3sgY21kIDsgfSAyPiYxJywgc28gdGhhdCB0aGUKLSAgICByZXR1cm5lZCBvdXRwdXQgd2lsbCBjb250YWluIG91dHB1dCBvciBlcnJvciBtZXNzYWdlcy4gIEEgdHJhaWxpbmcgbmV3bGluZQotICAgIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4gIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlCi0gICAgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIEMgZnVuY3Rpb24gd2FpdCgpLiAgRXhhbXBsZToKKyAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoICdjaGVja19vdXRwdXQnIGFuZAorICAgIHJldHVybiBhIDItdHVwbGUgKHN0YXR1cywgb3V0cHV0KS4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZCwKKyAgICBtZWFuaW5nIHRoYXQgdGhlIHJlc3VsdCB3aXRoIGJlIGRlY29kZWQgdG8gYSBzdHJpbmcuCisKKyAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgorICAgIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlIGludGVycHJldGVkCisgICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIGZ1bmN0aW9uICd3YWl0Jy4gRXhhbXBsZToKIAogICAgID4+PiBpbXBvcnQgc3VicHJvY2VzcwogICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnbHMgL2Jpbi9scycpCkBAIC04MjAsNyArODUxLDcgQEAKICAgICAgICAgICAgIGZvciBmIGluIGZpbHRlcihOb25lLCAoc2VsZi5zdGRpbiwgc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcyAgIyBJZ25vcmUgRUJBREYgb3Igb3RoZXIgZXJyb3JzLgogCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2VkX2NoaWxkX3BpcGVfZmRzOgpAQCAtODM2LDcgKzg2Nyw3IEBACiAgICAgICAgICAgICAgICAgZm9yIGZkIGluIHRvX2Nsb3NlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICAgICByYWlzZQpAQCAtOTAwLDcgKzkzMSw3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5wdXQ6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4ud3JpdGUoaW5wdXQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFIGFuZCBlLmVycm5vICE9IGVycm5vLkVJTlZBTDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQpAQCAtMTAzMiwyMyArMTA2Myw2IEBACiAgICAgICAgICAgICByZXR1cm4gSGFuZGxlKGgpCiAKIAotICAgICAgICBkZWYgX2ZpbmRfdzl4cG9wZW4oc2VsZik6Ci0gICAgICAgICAgICAiIiJGaW5kIGFuZCByZXR1cm4gYWJzb2x1dCBwYXRoIHRvIHc5eHBvcGVuLmV4ZSIiIgotICAgICAgICAgICAgdzl4cG9wZW4gPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF93aW5hcGkuR2V0TW9kdWxlRmlsZU5hbWUoMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModzl4cG9wZW4pOgotICAgICAgICAgICAgICAgICMgRWVlayAtIGZpbGUtbm90LWZvdW5kIC0gcG9zc2libHkgYW4gZW1iZWRkaW5nCi0gICAgICAgICAgICAgICAgIyBzaXR1YXRpb24gLSBzZWUgaWYgd2UgY2FuIGxvY2F0ZSBpdCBpbiBzeXMuZXhlY19wcmVmaXgKLSAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmJhc2VfZXhlY19wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3OXhwb3Blbi5leGUiKQotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGxvY2F0ZSB3OXhwb3Blbi5leGUsIHdoaWNoIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkZWQgZm9yIFBvcGVuIHRvIHdvcmsgd2l0aCB5b3VyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaGVsbCBvciBwbGF0Zm9ybS4iKQotICAgICAgICAgICAgcmV0dXJuIHc5eHBvcGVuCi0KLQogICAgICAgICBkZWYgX2V4ZWN1dGVfY2hpbGQoc2VsZiwgYXJncywgZXhlY3V0YWJsZSwgcHJlZXhlY19mbiwgY2xvc2VfZmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHMsIGN3ZCwgZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8sIGNyZWF0aW9uZmxhZ3MsIHNoZWxsLApAQCAtMTA3NywyMSArMTA5MSw2IEBACiAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBfd2luYXBpLlNXX0hJREUKICAgICAgICAgICAgICAgICBjb21zcGVjID0gb3MuZW52aXJvbi5nZXQoIkNPTVNQRUMiLCAiY21kLmV4ZSIpCiAgICAgICAgICAgICAgICAgYXJncyA9ICd7fSAvYyAie30iJy5mb3JtYXQgKGNvbXNwZWMsIGFyZ3MpCi0gICAgICAgICAgICAgICAgaWYgKF93aW5hcGkuR2V0VmVyc2lvbigpID49IDB4ODAwMDAwMDAgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoY29tc3BlYykubG93ZXIoKSA9PSAiY29tbWFuZC5jb20iKToKLSAgICAgICAgICAgICAgICAgICAgIyBXaW45eCwgb3IgdXNpbmcgY29tbWFuZC5jb20gb24gTlQuIFdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgdGhlIHc5eHBvcGVuIGludGVybWVkaWF0ZSBwcm9ncmFtLiBGb3IgbW9yZQotICAgICAgICAgICAgICAgICAgICAjIGluZm9ybWF0aW9uLCBzZWUgS0IgUTE1MDk1NgotICAgICAgICAgICAgICAgICAgICAjIChodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDAxMTEwNTA4NDAwMi9odHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL3N1cHBvcnQva2IvYXJ0aWNsZXMvUTE1MC85LzU2LmFzcCkKLSAgICAgICAgICAgICAgICAgICAgdzl4cG9wZW4gPSBzZWxmLl9maW5kX3c5eHBvcGVuKCkKLSAgICAgICAgICAgICAgICAgICAgYXJncyA9ICciJXMiICVzJyAlICh3OXhwb3BlbiwgYXJncykKLSAgICAgICAgICAgICAgICAgICAgIyBOb3QgcGFzc2luZyBDUkVBVEVfTkVXX0NPTlNPTEUgaGFzIGJlZW4ga25vd24gdG8KLSAgICAgICAgICAgICAgICAgICAgIyBjYXVzZSByYW5kb20gZmFpbHVyZXMgb24gd2luOXguICBTcGVjaWZpY2FsbHkgYQotICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZzogIllvdXIgcHJvZ3JhbSBhY2Nlc3NlZCBtZW0gY3VycmVudGx5IGluCi0gICAgICAgICAgICAgICAgICAgICMgdXNlIGF0IHh4eCIgYW5kIGEgaG9wZWZ1bCB3YXJuaW5nIGFib3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAjIHN0YWJpbGl0eSBvZiB5b3VyIHN5c3RlbS4gIENvc3QgaXMgQ3RybCtDIHdvbid0Ci0gICAgICAgICAgICAgICAgICAgICMga2lsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncyB8PSBfd2luYXBpLkNSRUFURV9ORVdfQ09OU09MRQogCiAgICAgICAgICAgICAjIFN0YXJ0IHRoZSBwcm9jZXNzCiAgICAgICAgICAgICB0cnk6CkBAIC0xMTAzLDEyICsxMTAyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvKQotICAgICAgICAgICAgZXhjZXB0IHB5d2ludHlwZXMuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAjIFRyYW5zbGF0ZSBweXdpbnR5cGVzLmVycm9yIHRvIFdpbmRvd3NFcnJvciwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAjIGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4gIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5Ci0gICAgICAgICAgICAgICAgIyB0cmFuc2xhdGUgZXJybm8gdXNpbmcgX3N5c19lcnJsaXN0IChvciBzaW1pbGFyKSwgYnV0Ci0gICAgICAgICAgICAgICAgIyBob3cgY2FuIHRoaXMgYmUgZG9uZSBmcm9tIFB5dGhvbj8KLSAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IoKmUuYXJncykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgIyBDaGlsZCBpcyBsYXVuY2hlZC4gQ2xvc2UgdGhlIHBhcmVudCdzIGNvcHkgb2YgdGhvc2UgcGlwZQogICAgICAgICAgICAgICAgICMgaGFuZGxlcyB0aGF0IG9ubHkgdGhlIGNoaWxkIHNob3VsZCBoYXZlIG9wZW4uICBZb3UgbmVlZApAQCAtMTE5Myw3ICsxMTg2LDcgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKQEAgLTEyNzEsNyArMTI2NCw3IEBACiAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gUElQRToKLSAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBwMmNyZWFkID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZGluLCBpbnQpOgpAQCAtMTI4Myw3ICsxMjc2LDcgQEAKICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3Rkb3V0ID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBERVZOVUxMOgogICAgICAgICAgICAgICAgIGMycHdyaXRlID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZG91dCwgaW50KToKQEAgLTEyOTUsNyArMTI4OCw3IEBACiAgICAgICAgICAgICBpZiBzdGRlcnIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgogICAgICAgICAgICAgICAgIGVycndyaXRlID0gYzJwd3JpdGUKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IERFVk5VTEw6CkBAIC0xMzQ3LDcgKzEzNDAsNyBAQAogICAgICAgICAgICAgIyBGb3IgdHJhbnNmZXJyaW5nIHBvc3NpYmxlIGV4ZWMgZmFpbHVyZSBmcm9tIGNoaWxkIHRvIHBhcmVudC4KICAgICAgICAgICAgICMgRGF0YSBmb3JtYXQ6ICJleGNlcHRpb24gbmFtZTpoZXggZXJybm86ZGVzY3JpcHRpb24iCiAgICAgICAgICAgICAjIFBpY2tsZSBpcyBub3QgdXNlZDsgaXQgaXMgY29tcGxleCBhbmQgaW52b2x2ZXMgbWVtb3J5IGFsbG9jYXRpb24uCi0gICAgICAgICAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIG11c3QgYXZvaWQgY29tcGxleCB3b3JrIHRoYXQgY291bGQgaW52b2x2ZQpAQCAtMTQxNywxMyArMTQxMCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSwgaGV4X2Vycm5vLCBlcnJfbXNnID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnBpcGVfZGF0YS5zcGxpdChiJzonLCAyKSkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1J1bnRpbWVFcnJvcicKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1N1YnByb2Nlc3NFcnJvcicKICAgICAgICAgICAgICAgICAgICAgaGV4X2Vycm5vID0gYicwJwogICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gKGInQmFkIGV4Y2VwdGlvbiBkYXRhIGZyb20gY2hpbGQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZXJycGlwZV9kYXRhKSkKICAgICAgICAgICAgICAgICBjaGlsZF9leGNlcHRpb25fdHlwZSA9IGdldGF0dHIoCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGlucywgZXhjZXB0aW9uX25hbWUuZGVjb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc0Vycm9yKQogICAgICAgICAgICAgICAgIGVycl9tc2cgPSBlcnJfbXNnLmRlY29kZShlcnJvcnM9InN1cnJvZ2F0ZXBhc3MiKQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoY2hpbGRfZXhjZXB0aW9uX3R5cGUsIE9TRXJyb3IpIGFuZCBoZXhfZXJybm86CiAgICAgICAgICAgICAgICAgICAgIGVycm5vX251bSA9IGludChoZXhfZXJybm8sIDE2KQpAQCAtMTQ1MywxMSArMTQ0NiwxMSBAQAogICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IF9XRVhJVFNUQVRVUyhzdHMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgU2hvdWxkIG5ldmVyIGhhcHBlbgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5rbm93biBjaGlsZCBleGl0IHN0YXR1cyEiKQorICAgICAgICAgICAgICAgIHJhaXNlIFN1YnByb2Nlc3NFcnJvcigiVW5rbm93biBjaGlsZCBleGl0IHN0YXR1cyEiKQogCiAKICAgICAgICAgZGVmIF9pbnRlcm5hbF9wb2xsKHNlbGYsIF9kZWFkc3RhdGU9Tm9uZSwgX3dhaXRwaWQ9b3Mud2FpdHBpZCwKLSAgICAgICAgICAgICAgICBfV05PSEFORz1vcy5XTk9IQU5HLCBfb3NfZXJyb3I9b3MuZXJyb3IsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKKyAgICAgICAgICAgICAgICBfV05PSEFORz1vcy5XTk9IQU5HLCBfRUNISUxEPWVycm5vLkVDSElMRCk6CiAgICAgICAgICAgICAiIiJDaGVjayBpZiBjaGlsZCBwcm9jZXNzIGhhcyB0ZXJtaW5hdGVkLiAgUmV0dXJucyByZXR1cm5jb2RlCiAgICAgICAgICAgICBhdHRyaWJ1dGUuCiAKQEAgLTE0NzAsNyArMTQ2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gX3dhaXRwaWQoc2VsZi5waWQsIF9XTk9IQU5HKQogICAgICAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCi0gICAgICAgICAgICAgICAgZXhjZXB0IF9vc19lcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIF9kZWFkc3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBfZGVhZHN0YXRlCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgZS5lcnJubyA9PSBfRUNISUxEOgpAQCAtMTU0NCwxMiArMTUzNyw2NSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGlmIF9oYXNfcG9sbDoKLSAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX2NvbW11bmljYXRlX3dpdGhfcG9sbChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9zZWxlY3QoaW5wdXQsIGVuZHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3RpbWVvdXQpCisgICAgICAgICAgICBzdGRvdXQgPSBOb25lCisgICAgICAgICAgICBzdGRlcnIgPSBOb25lCisKKyAgICAgICAgICAgICMgT25seSBjcmVhdGUgdGhpcyBtYXBwaW5nIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXQgPSB7fQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZG91dF0gPSBbXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZGVycl0gPSBbXQorCisgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZG91dF0KKyAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXQorCisgICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQorCisgICAgICAgICAgICB3aXRoIF9Qb3BlblNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRvdXQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGVyciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxlY3Rvci5nZXRfbWFwKCk6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgIyBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKKworICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5faW5wdXRbc2VsZi5faW5wdXRfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArIF9QSVBFX0JVRl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArPSBvcy53cml0ZShrZXkuZmQsIGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maWxlb2JqIGluIChzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGtleS5mZCwgNDA5NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W2tleS5maWxlb2JqXS5hcHBlbmQoZGF0YSkKIAogICAgICAgICAgICAgc2VsZi53YWl0KHRpbWVvdXQ9c2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkpCiAKQEAgLTE1ODMsMTY3ICsxNjI5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQgPSBzZWxmLl9pbnB1dC5lbmNvZGUoc2VsZi5zdGRpbi5lbmNvZGluZykKIAogCi0gICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9wb2xsKHNlbGYsIGlucHV0LCBlbmR0aW1lLCBvcmlnX3RpbWVvdXQpOgotICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZSAjIFJldHVybgotICAgICAgICAgICAgc3RkZXJyID0gTm9uZSAjIFJldHVybgotCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGUgPSB7fQotCi0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBkZWYgcmVnaXN0ZXJfYW5kX2FwcGVuZChmaWxlX29iaiwgZXZlbnRtYXNrKToKLSAgICAgICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoZmlsZV9vYmouZmlsZW5vKCksIGV2ZW50bWFzaykKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlW2ZpbGVfb2JqLmZpbGVubygpXSA9IGZpbGVfb2JqCi0KLSAgICAgICAgICAgIGRlZiBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpOgotICAgICAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKGZkKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGVbZmRdLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlLnBvcChmZCkKLQotICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGluLCBzZWxlY3QuUE9MTE9VVCkKLQotICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXQgPSB7fQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRvdXQuZmlsZW5vKCldID0gW10KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3RkZXJyLmZpbGVubygpXSA9IFtdCi0KLSAgICAgICAgICAgIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZG91dCwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQotICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0KLSAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRlcnIsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKLSAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldCi0KLSAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX2ZkMmZpbGU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbCh0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKLQotICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlCi0gICAgICAgICAgICAgICAgIyBmaWxlIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQotCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgc2VsZWN0LlBPTExPVVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuX2lucHV0W3NlbGYuX2lucHV0X29mZnNldCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArIF9QSVBFX0JVRl0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoZmQsIGNodW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBtb2RlICYgc2VsZWN0X1BPTExJTl9QT0xMUFJJOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoZmQsIDQwOTYpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbZmRdLmFwcGVuZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgaGFuZyB1cCBvciBlcnJvcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0KLSAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCi0KLQotICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfc2VsZWN0KHNlbGYsIGlucHV0LCBlbmR0aW1lLCBvcmlnX3RpbWVvdXQpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldCA9IFtdCi0gICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0ID0gW10KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LmFwcGVuZChzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5hcHBlbmQoc2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZGVycikKLQotICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKLQotICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZSAjIFJldHVybgotICAgICAgICAgICAgc3RkZXJyID0gTm9uZSAjIFJldHVybgotCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZiA9IFtdCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fc3Rkb3V0X2J1ZmYKLSAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmID0gW10KLSAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9zdGRlcnJfYnVmZgotCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkX3NldCBvciBzZWxmLl93cml0ZV9zZXQ6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgKHJsaXN0LCB3bGlzdCwgeGxpc3QpID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChzZWxmLl9yZWFkX3NldCwgc2VsZi5fd3JpdGVfc2V0LCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgICAgICAgICAjIEFjY29yZGluZyB0byB0aGUgZG9jcywgcmV0dXJuaW5nIHRocmVlIGVtcHR5IGxpc3RzIGluZGljYXRlcwotICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgdGltZW91dCBleHBpcmVkLgotICAgICAgICAgICAgICAgIGlmIG5vdCAocmxpc3Qgb3Igd2xpc3Qgb3IgeGxpc3QpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gY2hlY2sgd2hhdCB0aW1lIGl0IGlzIG91cnNlbHZlcyBmb3IgZ29vZCBtZWFzdXJlLgotICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQotCi0gICAgICAgICAgICAgICAgIyBYWFggUmV3cml0ZSB0aGVzZSB0byB1c2Ugbm9uLWJsb2NraW5nIEkvTyBvbiB0aGUKLSAgICAgICAgICAgICAgICAjIGZpbGUgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGluIHdsaXN0OgotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuX2lucHV0W3NlbGYuX2lucHV0X29mZnNldCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlc193cml0dGVuID0gb3Mud3JpdGUoc2VsZi5zdGRpbi5maWxlbm8oKSwgY2h1bmspCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5yZW1vdmUoc2VsZi5zdGRpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArPSBieXRlc193cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQucmVtb3ZlKHNlbGYuc3RkaW4pCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dCBpbiBybGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5zdGRvdXQuZmlsZW5vKCksIDEwMjQpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQucmVtb3ZlKHNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgICAgICBzdGRvdXQuYXBwZW5kKGRhdGEpCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVyciBpbiBybGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5zdGRlcnIuZmlsZW5vKCksIDEwMjQpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQucmVtb3ZlKHNlbGYuc3RkZXJyKQotICAgICAgICAgICAgICAgICAgICBzdGRlcnIuYXBwZW5kKGRhdGEpCi0KLSAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCi0KLQogICAgICAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnKToKICAgICAgICAgICAgICIiIlNlbmQgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL3N1bmF1LnB5IGIvTGliL3N1bmF1LnB5CmluZGV4IDE1ZjdiMDMuLjNjMjQ0OTIgMTAwNjQ0Ci0tLSBhL0xpYi9zdW5hdS5weQorKysgYi9MaWIvc3VuYXUucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIG9yICdVTEFXJykKICAgICAgICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBtYXRjaGVzICdOT05FJykKLSAgICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWZjIG1vZHVsZSkKQEAgLTEwMyw2ICsxMDMsMTEgQEAKIGlzIGRlc3Ryb3llZC4KICIiIgogCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19zdW5hdV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfc3VuYXVfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogIyBmcm9tIDxtdWx0aW1lZGlhL2F1ZGlvX2ZpbGVoZHIuaD4KIEFVRElPX0ZJTEVfTUFHSUMgPSAweDJlNzM2ZTY0CiBBVURJT19GSUxFX0VOQ09ESU5HX01VTEFXXzggPSAxCkBAIC0xNjMsNiArMTY4LDEyIEBACiAgICAgICAgIGlmIHNlbGYuX2ZpbGU6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX3NvdW5kcG9zID0gMApAQCAtMjQ2LDkgKzI1Nyw5IEBACiAgICAgICAgICAgICByZXR1cm4gJ25vdCBjb21wcmVzc2VkJwogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3N1bmF1X3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiBnZXRtYXJrZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMzA3LDYgKzMxOCwxMiBAQAogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgaW5pdGZwKHNlbGYsIGZpbGUpOgogICAgICAgICBzZWxmLl9maWxlID0gZmlsZQogICAgICAgICBzZWxmLl9mcmFtZXJhdGUgPSAwCkBAIC0zMzUsNyArMzUyLDcgQEAKICAgICBkZWYgc2V0c2FtcHdpZHRoKHNlbGYsIHNhbXB3aWR0aCk6CiAgICAgICAgIGlmIHNlbGYuX25mcmFtZXN3cml0dGVuOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2Nhbm5vdCBjaGFuZ2UgcGFyYW1ldGVycyBhZnRlciBzdGFydGluZyB0byB3cml0ZScpCi0gICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDQpOgorICAgICAgICBpZiBzYW1wd2lkdGggbm90IGluICgxLCAyLCAzLCA0KToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdiYWQgc2FtcGxlIHdpZHRoJykKICAgICAgICAgc2VsZi5fc2FtcHdpZHRoID0gc2FtcHdpZHRoCiAKQEAgLTM5MCwxNCArNDA3LDE2IEBACiAgICAgICAgIHNlbGYuc2V0Y29tcHR5cGUoY29tcHR5cGUsIGNvbXBuYW1lKQogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3N1bmF1X3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmZyYW1lc3dyaXR0ZW4KIAogICAgIGRlZiB3cml0ZWZyYW1lc3JhdyhzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGRhdGEpLmNhc3QoJ0InKQogICAgICAgICBzZWxmLl9lbnN1cmVfaGVhZGVyX3dyaXR0ZW4oKQogICAgICAgICBpZiBzZWxmLl9jb21wdHlwZSA9PSAnVUxBVyc6CiAgICAgICAgICAgICBpbXBvcnQgYXVkaW9vcApAQCAtNDIxLDkgKzQ0MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoICE9IHNlbGYuX2RhdGF3cml0dGVuOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXRjaGhlYWRlcigpCiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5mbHVzaCgpCisgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5lZCBhbmQgc2VsZi5fZmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCiAKICAgICAjCkBAIC00NDgsNiArNDY3LDkgQEAKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDI6CiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8xNgogICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDM6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8yNAorICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDMKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDQ6CiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8zMgogICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDQKZGlmZiAtLWdpdCBhL0xpYi9zeW1ib2wucHkgYi9MaWIvc3ltYm9sLnB5CmluZGV4IDM0MTQzYjUuLjVjZjRhNjUgMTAwNzU1Ci0tLSBhL0xpYi9zeW1ib2wucHkKKysrIGIvTGliL3N5bWJvbC5weQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIHN5bV9uYW1lW192YWx1ZV0gPSBfbmFtZQogCiAKLWRlZiBtYWluKCk6CitkZWYgX21haW4oKToKICAgICBpbXBvcnQgc3lzCiAgICAgaW1wb3J0IHRva2VuCiAgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgpAQCAtMTA4LDQgKzEwOCw0IEBACiAgICAgdG9rZW4uX21haW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9zeW10YWJsZS5weSBiL0xpYi9zeW10YWJsZS5weQppbmRleCBiYjI3MTk2Li5lMjMzMTNiIDEwMDY0NAotLS0gYS9MaWIvc3ltdGFibGUucHkKKysrIGIvTGliL3N5bXRhYmxlLnB5CkBAIC0yMzIsNyArMjMyLDggQEAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpbXBvcnQgb3MsIHN5cwotICAgIHNyYyA9IG9wZW4oc3lzLmFyZ3ZbMF0pLnJlYWQoKQorICAgIHdpdGggb3BlbihzeXMuYXJndlswXSkgYXMgZjoKKyAgICAgICAgc3JjID0gZi5yZWFkKCkKICAgICBtb2QgPSBzeW10YWJsZShzcmMsIG9zLnBhdGguc3BsaXQoc3lzLmFyZ3ZbMF0pWzFdLCAiZXhlYyIpCiAgICAgZm9yIGlkZW50IGluIG1vZC5nZXRfaWRlbnRpZmllcnMoKToKICAgICAgICAgaW5mbyA9IG1vZC5sb29rdXAoaWRlbnQpCmRpZmYgLS1naXQgYS9MaWIvc3lzY29uZmlnLnB5IGIvTGliL3N5c2NvbmZpZy5weQppbmRleCAyYTIxNjBjLi5kYmY3NzY3IDEwMDY0NAotLS0gYS9MaWIvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9zeXNjb25maWcucHkKQEAgLTEsNyArMSw2IEBACiAiIiJBY2Nlc3MgdG8gUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgcmUKIGltcG9ydCBzeXMKIGZyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAogCkBAIC01MiwyNSArNTEsNiBAQAogICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCiAgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCiAgICAgICAgIH0sCi0gICAgJ29zMic6IHsKLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L0xpYicsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9MaWInLAotICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAncGxhdGluY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9JbmNsdWRlJywKLSAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAotICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAotICAgICAgICB9LAotICAgICdvczJfaG9tZSc6IHsKLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKLSAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCi0gICAgICAgIH0sCiAgICAgJ250X3VzZXInOiB7CiAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLAogICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCkBAIC0yMTAsNyArMTkwLDYgQEAKICAgICBkZWYgam9pbnVzZXIoKmFyZ3MpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigqYXJncykpCiAKLSAgICAjIHdoYXQgYWJvdXQgJ29zMmVteCcsICdyaXNjb3MnID8KICAgICBpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIGJhc2UgPSBvcy5lbnZpcm9uLmdldCgiQVBQREFUQSIpIG9yICJ+IgogICAgICAgICBpZiBlbnZfYmFzZToKQEAgLTI0Miw2ICsyMjEsNyBAQAogICAgICIiIgogICAgICMgUmVnZXhlcyBuZWVkZWQgZm9yIHBhcnNpbmcgTWFrZWZpbGUgKGFuZCBzaW1pbGFyIHN5bnRheGVzLAogICAgICMgbGlrZSBvbGQtc3R5bGUgU2V0dXAgZmlsZXMpLgorICAgIGltcG9ydCByZQogICAgIF92YXJpYWJsZV9yeCA9IHJlLmNvbXBpbGUoIihbYS16QS1aXVthLXpBLVowLTlfXSspXHMqPVxzKiguKikiKQogICAgIF9maW5kdmFyMV9yeCA9IHJlLmNvbXBpbGUociJcJFwoKFtBLVphLXpdW0EtWmEtejAtOV9dKilcKSIpCiAgICAgX2ZpbmR2YXIyX3J4ID0gcmUuY29tcGlsZShyIlwkeyhbQS1aYS16XVtBLVphLXowLTlfXSopfSIpCkBAIC0zNjksMjEgKzM0OSwyMSBAQAogICAgIG1ha2VmaWxlID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIF9wYXJzZV9tYWtlZmlsZShtYWtlZmlsZSwgdmFycykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIG1ha2VmaWxlCiAgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CiAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgotICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKyAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKICAgICBjb25maWdfaCA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4oY29uZmlnX2gpIGFzIGY6CiAgICAgICAgICAgICBwYXJzZV9jb25maWdfaChmLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgY29uZmlnX2gKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKICAgICAjIC0tIHRoZXNlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIHNvdXJjZSwgYnV0IHdoZW4gaW5zdGFsbGVkCiAgICAgIyB0aGUgc2NyaXB0cyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkuCkBAIC00MDMsOCArMzgzLDggQEAKICAgICAjIGdldF9wbGF0Zm9ybSgpIHN1Y2NlZWRzLgogICAgIG5hbWUgPSAnX3N5c2NvbmZpZ2RhdGEnCiAgICAgaWYgJ2RhcndpbicgaW4gc3lzLnBsYXRmb3JtOgotICAgICAgICBpbXBvcnQgaW1wCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIG1vZHVsZS5idWlsZF90aW1lX3ZhcnMgPSB2YXJzCiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCiAKQEAgLTQzNiw3ICs0MTYsNiBAQAogICAgIHZhcnNbJ0xJQkRFU1QnXSA9IGdldF9wYXRoKCdzdGRsaWInKQogICAgIHZhcnNbJ0JJTkxJQkRFU1QnXSA9IGdldF9wYXRoKCdwbGF0c3RkbGliJykKICAgICB2YXJzWydJTkNMVURFUFknXSA9IGdldF9wYXRoKCdpbmNsdWRlJykKLSAgICB2YXJzWydTTyddID0gJy5weWQnCiAgICAgdmFyc1snRVhUX1NVRkZJWCddID0gJy5weWQnCiAgICAgdmFyc1snRVhFJ10gPSAnLmV4ZScKICAgICB2YXJzWydWRVJTSU9OJ10gPSBfUFlfVkVSU0lPTl9TSE9SVF9OT19ET1QKQEAgLTQ1Niw2ICs0MzUsNyBAQAogICAgICIiIgogICAgIGlmIHZhcnMgaXMgTm9uZToKICAgICAgICAgdmFycyA9IHt9CisgICAgaW1wb3J0IHJlCiAgICAgZGVmaW5lX3J4ID0gcmUuY29tcGlsZSgiI2RlZmluZSAoW0EtWl1bQS1aYS16MC05X10rKSAoLiopXG4iKQogICAgIHVuZGVmX3J4ID0gcmUuY29tcGlsZSgiL1sqXSAjdW5kZWYgKFtBLVpdW0EtWmEtejAtOV9dKykgWypdL1xuIikKIApAQCAtNTUyLDEwICs1MzIsMTQgQEAKICAgICAgICAgICAgICMgc3lzLmFiaWZsYWdzIG1heSBub3QgYmUgZGVmaW5lZCBvbiBhbGwgcGxhdGZvcm1zLgogICAgICAgICAgICAgX0NPTkZJR19WQVJTWydhYmlmbGFncyddID0gJycKIAotICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJyk6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgIF9pbml0X25vbl9wb3NpeChfQ09ORklHX1ZBUlMpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKICAgICAgICAgICAgIF9pbml0X3Bvc2l4KF9DT05GSUdfVkFSUykKKyAgICAgICAgIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgc2VlIGlzc3VlMTk1NTUKKyAgICAgICAgU08gPSBfQ09ORklHX1ZBUlMuZ2V0KCdFWFRfU1VGRklYJykKKyAgICAgICAgaWYgU08gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ1NPJ10gPSBTTwogICAgICAgICAjIFNldHRpbmcgJ3VzZXJiYXNlJyBpcyBkb25lIGJlbG93IHRoZSBjYWxsIHRvIHRoZQogICAgICAgICAjIGluaXQgZnVuY3Rpb24gdG8gZW5hYmxlIHVzaW5nICdnZXRfY29uZmlnX3ZhcicgaW4KICAgICAgICAgIyB0aGUgaW5pdC1mdW5jdGlvbi4KQEAgLTU5OSw2ICs1ODMsOSBAQAogCiAgICAgRXF1aXZhbGVudCB0byBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAKIApAQCAtNjc5LDYgKzY2Niw3IEBACiAgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKG9zbmFtZSwgdmVyc2lvbiwgcmVsZWFzZSkKICAgICBlbGlmIG9zbmFtZVs6Nl0gPT0gImN5Z3dpbiI6CiAgICAgICAgIG9zbmFtZSA9ICJjeWd3aW4iCisgICAgICAgIGltcG9ydCByZQogICAgICAgICByZWxfcmUgPSByZS5jb21waWxlKHInW1xkLl0rJykKICAgICAgICAgbSA9IHJlbF9yZS5tYXRjaChyZWxlYXNlKQogICAgICAgICBpZiBtOgpkaWZmIC0tZ2l0IGEvTGliL3RhYm5hbm55LnB5IGIvTGliL3RhYm5hbm55LnB5CmluZGV4IDViOWI0NDQuLjQ2ZTBmNTYgMTAwNzU1Ci0tLSBhL0xpYi90YWJuYW5ueS5weQorKysgYi9MaWIvdGFibmFubnkucHkKQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgZiA9IHRva2VuaXplLm9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnJwcmludCgiJXI6IEkvTyBFcnJvcjogJXMiICUgKGZpbGUsIG1zZykpCiAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvdGFyZmlsZS5weSBiL0xpYi90YXJmaWxlLnB5CmluZGV4IDE2ZDMzOGMuLmY0ZGY2YzcgMTAwNjQ0Ci0tLSBhL0xpYi90YXJmaWxlLnB5CisrKyBiL0xpYi90YXJmaWxlLnB5CkBAIC01Niw5ICs1Niw5IEBACiAjIG9zLnN5bWxpbmsgb24gV2luZG93cyBwcmlvciB0byA2LjAgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKIHN5bWxpbmtfZXhjZXB0aW9uID0gKEF0dHJpYnV0ZUVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKQogdHJ5OgotICAgICMgV2luZG93c0Vycm9yICgxMzE0KSB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgdGhlCisgICAgIyBPU0Vycm9yICh3aW5lcnJvcj0xMzE0KSB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgdGhlCiAgICAgIyBTZUNyZWF0ZVN5bWJvbGljTGlua1ByaXZpbGVnZSBwcml2aWxlZ2UKLSAgICBzeW1saW5rX2V4Y2VwdGlvbiArPSAoV2luZG93c0Vycm9yLCkKKyAgICBzeW1saW5rX2V4Y2VwdGlvbiArPSAoT1NFcnJvciwpCiBleGNlcHQgTmFtZUVycm9yOgogICAgIHBhc3MKIApAQCAtMTQwLDMwICsxNDAsNiBAQAogfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJpdHMgdXNlZCBpbiB0aGUgbW9kZSBmaWVsZCwgdmFsdWVzIGluIG9jdGFsLgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU19JRkxOSyA9IDBvMTIwMDAwICAgICAgICAjIHN5bWJvbGljIGxpbmsKLVNfSUZSRUcgPSAwbzEwMDAwMCAgICAgICAgIyByZWd1bGFyIGZpbGUKLVNfSUZCTEsgPSAwbzA2MDAwMCAgICAgICAgIyBibG9jayBkZXZpY2UKLVNfSUZESVIgPSAwbzA0MDAwMCAgICAgICAgIyBkaXJlY3RvcnkKLVNfSUZDSFIgPSAwbzAyMDAwMCAgICAgICAgIyBjaGFyYWN0ZXIgZGV2aWNlCi1TX0lGSUZPID0gMG8wMTAwMDAgICAgICAgICMgZmlmbwotCi1UU1VJRCAgID0gMG80MDAwICAgICAgICAgICMgc2V0IFVJRCBvbiBleGVjdXRpb24KLVRTR0lEICAgPSAwbzIwMDAgICAgICAgICAgIyBzZXQgR0lEIG9uIGV4ZWN1dGlvbgotVFNWVFggICA9IDBvMTAwMCAgICAgICAgICAjIHJlc2VydmVkCi0KLVRVUkVBRCAgPSAwbzQwMCAgICAgICAgICAgIyByZWFkIGJ5IG93bmVyCi1UVVdSSVRFID0gMG8yMDAgICAgICAgICAgICMgd3JpdGUgYnkgb3duZXIKLVRVRVhFQyAgPSAwbzEwMCAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvd25lcgotVEdSRUFEICA9IDBvMDQwICAgICAgICAgICAjIHJlYWQgYnkgZ3JvdXAKLVRHV1JJVEUgPSAwbzAyMCAgICAgICAgICAgIyB3cml0ZSBieSBncm91cAotVEdFWEVDICA9IDBvMDEwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IGdyb3VwCi1UT1JFQUQgID0gMG8wMDQgICAgICAgICAgICMgcmVhZCBieSBvdGhlcgotVE9XUklURSA9IDBvMDAyICAgICAgICAgICAjIHdyaXRlIGJ5IG90aGVyCi1UT0VYRUMgID0gMG8wMDEgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgb3RoZXIKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbml0aWFsaXphdGlvbgogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6CkBAIC0yNjQsMTMgKzI0MCwxMyBAQAogICAgIGZvciBiIGluIHJhbmdlKGJsb2Nrcyk6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKEJVRlNJWkUpCiAgICAgICAgIGlmIGxlbihidWYpIDwgQlVGU0laRToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCiAgICAgICAgIGRzdC53cml0ZShidWYpCiAKICAgICBpZiByZW1haW5kZXIgIT0gMDoKICAgICAgICAgYnVmID0gc3JjLnJlYWQocmVtYWluZGVyKQogICAgICAgICBpZiBsZW4oYnVmKSA8IHJlbWFpbmRlcjoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCiAgICAgICAgIGRzdC53cml0ZShidWYpCiAgICAgcmV0dXJuCiAKQEAgLTM5OSw3ICszNzUsNyBAQAogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gInIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRidWYgPSBiIiIKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbXAgPSBiejIuQloyRGVjb21wcmVzc29yKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBJT0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gT1NFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkNvbXByZXNzb3IoKQogCkBAIC0xNjMxLDcgKzE2MDcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmaWxlb2JqID0gZ3ppcC5HemlwRmlsZShuYW1lLCBtb2RlICsgImIiLCBjb21wcmVzc2xldmVsLCBmaWxlb2JqKQogICAgICAgICAgICAgdCA9IGNscy50YXJvcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBpZiBub3QgZXh0ZmlsZW9iaiBhbmQgZmlsZW9iaiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIGlmIGZpbGVvYmogaXMgTm9uZToKQEAgLTE2NjIsNyArMTYzOCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdCA9IGNscy50YXJvcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigibm90IGEgYnppcDIgZmlsZSIpCiAgICAgICAgIHQuX2V4dGZpbGVvYmogPSBGYWxzZQpAQCAtMjAyMiw3ICsxOTk4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIodGFyaW5mbywgb3MucGF0aC5qb2luKHBhdGgsIHRhcmluZm8ubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYXR0cnM9c2V0X2F0dHJzKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmxldmVsID4gMDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKQEAgLTIyMTEsOSArMjE4Nyw4IEBACiAgICAgICAgICAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpIGFuZCBoYXNhdHRyKG9zLCAibGNob3duIik6CiAgICAgICAgICAgICAgICAgICAgIG9zLmxjaG93bih0YXJnZXRwYXRoLCB1LCBnKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAib3MyZW14IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2Ugb3duZXIiKQogCiAgICAgZGVmIGNobW9kKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjIyMiw3ICsyMTk3LDcgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2NobW9kJyk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MuY2htb2QodGFyZ2V0cGF0aCwgdGFyaW5mby5tb2RlKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGUiKQogCiAgICAgZGVmIHV0aW1lKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjIzMiw3ICsyMjA3LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51dGltZSh0YXJnZXRwYXRoLCAodGFyaW5mby5tdGltZSwgdGFyaW5mby5tdGltZSkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kaWZpY2F0aW9uIHRpbWUiKQogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzIzLDkgKzIyOTgsOSBAQAogICAgICAgICAgICBjb3JyZXNwb25kcyB0byBUYXJGaWxlJ3MgbW9kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBpZiBtb2RlIGlzIG5vdCBOb25lIGFuZCBzZWxmLm1vZGUgbm90IGluIG1vZGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQogCiAgICAgZGVmIF9maW5kX2xpbmtfdGFyZ2V0KHNlbGYsIHRhcmluZm8pOgogICAgICAgICAiIiJGaW5kIHRoZSB0YXJnZXQgbWVtYmVyIG9mIGEgc3ltbGluayBvciBoYXJkbGluayBtZW1iZXIgaW4gdGhlCkBAIC0yNDI5LDMgKzI0MDQsOTcgQEAKIAogYmx0bl9vcGVuID0gb3Blbgogb3BlbiA9IFRhckZpbGUub3BlbgorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBkZXNjcmlwdGlvbiA9ICdBIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0YXJmaWxlIG1vZHVsZS4nCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tbGlzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nob3cgbGlzdGluZyBvZiBhIHRhcmZpbGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWUnLCAnLS1leHRyYWN0JywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPHRhcmZpbGU+JywgJzxvdXRwdXRfZGlyPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHRyYWN0IHRhcmZpbGUgaW50byB0YXJnZXQgZGlyJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPG5hbWU+JywgJzxmaWxlPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10ZXN0JywgbWV0YXZhcj0nPHRhcmZpbGU+JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGVzdCBpZiBhIHRhcmZpbGUgaXMgdmFsaWQnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnRlc3Q6CisgICAgICAgIHNyYyA9IGFyZ3MudGVzdAorICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICAgICAgcHJpbnQodGFyLmdldG1lbWJlcnMoKSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCd7IXJ9IGlzIGEgdGFyIGFyY2hpdmUuJy5mb3JtYXQoc3JjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5saXN0OgorICAgICAgICBzcmMgPSBhcmdzLmxpc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4oc3JjLCAncjoqJykgYXMgdGY6CisgICAgICAgICAgICAgICAgdGYubGlzdCh2ZXJib3NlPWFyZ3MudmVyYm9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5leHRyYWN0OgorICAgICAgICBpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAxOgorICAgICAgICAgICAgc3JjID0gYXJncy5leHRyYWN0WzBdCisgICAgICAgICAgICBjdXJkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgZWxpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAyOgorICAgICAgICAgICAgc3JjLCBjdXJkaXIgPSBhcmdzLmV4dHJhY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmV4dHJhY3RhbGwocGF0aD1jdXJkaXIpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgaWYgY3VyZGlyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQuJy5mb3JtYXQoc3JjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgneyFyfSBmaWxlIGlzIGV4dHJhY3RlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50byB7IXJ9IGRpcmVjdG9yeS4nKS5mb3JtYXQoc3JjLCBjdXJkaXIpCisgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmNyZWF0ZToKKyAgICAgICAgdGFyX25hbWUgPSBhcmdzLmNyZWF0ZS5wb3AoMCkKKyAgICAgICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YXJfbmFtZSkKKyAgICAgICAgY29tcHJlc3Npb25zID0geworICAgICAgICAgICAgIyBnegorICAgICAgICAgICAgJ2d6JzogJ2d6JywKKyAgICAgICAgICAgICd0Z3onOiAnZ3onLAorICAgICAgICAgICAgIyB4egorICAgICAgICAgICAgJ3h6JzogJ3h6JywKKyAgICAgICAgICAgICd0eHonOiAneHonLAorICAgICAgICAgICAgIyBiejIKKyAgICAgICAgICAgICdiejInOiAnYnoyJywKKyAgICAgICAgICAgICd0YnonOiAnYnoyJywKKyAgICAgICAgICAgICd0YnoyJzogJ2J6MicsCisgICAgICAgICAgICAndGIyJzogJ2J6MicsCisgICAgICAgIH0KKyAgICAgICAgdGFyX21vZGUgPSAndzonICsgY29tcHJlc3Npb25zW2V4dF0gaWYgZXh0IGluIGNvbXByZXNzaW9ucyBlbHNlICd3JworICAgICAgICB0YXJfZmlsZXMgPSBhcmdzLmNyZWF0ZQorCisgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHRhcl9uYW1lLCB0YXJfbW9kZSkgYXMgdGY6CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIHRhcl9maWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQoZmlsZV9uYW1lKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCd7IXJ9IGZpbGUgY3JlYXRlZC4nLmZvcm1hdCh0YXJfbmFtZSkpCisKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZWxuZXRsaWIucHkgYi9MaWIvdGVsbmV0bGliLnB5CmluZGV4IDE0Y2ExYjEuLjBjYWNhYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZWxuZXRsaWIucHkKKysrIGIvTGliL3RlbG5ldGxpYi5weQpAQCAtMTcsMTMgKzE3LDEyIEBACiBOb3RlIHRoYXQgcmVhZF9hbGwoKSB3b24ndCByZWFkIHVudGlsIGVvZiAtLSBpdCBqdXN0IHJlYWRzIHNvbWUgZGF0YQogLS0gYnV0IGl0IGd1YXJhbnRlZXMgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB1bmxlc3MgRU9GIGlzIGhpdC4KIAotSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gc2VsZWN0LnNlbGVjdCgpIGluIG9yZGVyIHRvCi13YWl0IHVudGlsIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLAotcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnIGV2ZW4gaWYgdGhlcmUgd2FzIGRhdGEgb24gdGhlIHNvY2tldCwKLWJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlIGVhdGVuIHRoZSBkYXRhLiAgVGhpcyBpcyB3aHkKLUVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5vIGRhdGEiIGFuZAotImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkgZm9yIHJlYWRpbmcKLXdoZW4gaXQgaXMgY2xvc2VkKS4KK0l0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBUZWxuZXQgb2JqZWN0IHRvIGEgc2VsZWN0b3IgaW4gb3JkZXIgdG8gd2FpdCB1bnRpbAorbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHJlYWRfZWFnZXIoKSBtYXkgcmV0dXJuIGInJworZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LCBiZWNhdXNlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBtYXkgaGF2ZQorZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeSBFT0ZFcnJvciBpcyBuZWVkZWQgaW4gc29tZSBjYXNlcyB0byBkaXN0aW5ndWlzaAorYmV0d2VlbiAibm8gZGF0YSIgYW5kICJjb25uZWN0aW9uIGNsb3NlZCIgKHNpbmNlIHRoZSBzb2NrZXQgYWxzbyBhcHBlYXJzIHJlYWR5Citmb3IgcmVhZGluZyB3aGVuIGl0IGlzIGNsb3NlZCkuCiAKIFRvIGRvOgogLSBvcHRpb24gbmVnb3RpYXRpb24KQEAgLTM0LDEwICszMyw5IEBACiAKIAogIyBJbXBvcnRlZCBtb2R1bGVzCi1pbXBvcnQgZXJybm8KIGltcG9ydCBzeXMKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIHRyeToKICAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTM0LDYgKzEzMiwxNSBAQAogRVhPUEwgPSBieXRlcyhbMjU1XSkgIyBFeHRlbmRlZC1PcHRpb25zLUxpc3QKIE5PT1BUID0gYnl0ZXMoWzBdKQogCisKKyMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUgZGVzY3JpcHRvciwKKyMgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZSBzeXNjYWxsKS4KK2lmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgX1RlbG5ldFNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCiBjbGFzcyBUZWxuZXQ6CiAKICAgICAiIiJUZWxuZXQgaW50ZXJmYWNlIGNsYXNzLgpAQCAtMjEwLDcgKzIxNyw2IEBACiAgICAgICAgIHNlbGYuc2IgPSAwICMgZmxhZyBmb3IgU0IgYW5kIFNFIHNlcXVlbmNlLgogICAgICAgICBzZWxmLnNiZGF0YXEgPSBiJycKICAgICAgICAgc2VsZi5vcHRpb25fY2FsbGJhY2sgPSBOb25lCi0gICAgICAgIHNlbGYuX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYub3Blbihob3N0LCBwb3J0LCB0aW1lb3V0KQogCkBAIC0yNzcsNyArMjgzLDcgQEAKICAgICAgICAgIiIiV3JpdGUgYSBzdHJpbmcgdG8gdGhlIHNvY2tldCwgZG91YmxpbmcgYW55IElBQyBjaGFyYWN0ZXJzLgogCiAgICAgICAgIENhbiBibG9jayBpZiB0aGUgY29ubmVjdGlvbiBpcyBibG9ja2VkLiAgTWF5IHJhaXNlCi0gICAgICAgIHNvY2tldC5lcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICAgIE9TRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgogCiAgICAgICAgICIiIgogICAgICAgICBpZiBJQUMgaW4gYnVmZmVyOgpAQCAtMjkzLDYwICsyOTksNiBAQAogICAgICAgICBpcyBjbG9zZWQgYW5kIG5vIGNvb2tlZCBkYXRhIGlzIGF2YWlsYWJsZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3BvbGwobWF0Y2gsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3NlbGVjdChtYXRjaCwgdGltZW91dCkKLQotICAgIGRlZiBfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZiwgbWF0Y2gsIHRpbWVvdXQpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgdXNlcyBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0aGUgdGltZW91dC4KLSAgICAgICAgIiIiCi0gICAgICAgIG4gPSBsZW4obWF0Y2gpCi0gICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoKQotICAgICAgICBpZiBpIDwgMDoKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgaSA8IDAgYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoY2FsbF90aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoc2VsZikKLSAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgaSA9IGkgKyBuCi0gICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCi0gICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCi0gICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKLQotICAgIGRlZiBfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmLCBtYXRjaCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBhIGdpdmVuIHN0cmluZyBpcyBlbmNvdW50ZXJlZCBvciB1bnRpbCB0aW1lb3V0LgotCi0gICAgICAgIFRoZSB0aW1lb3V0IGlzIGltcGxlbWVudGVkIHVzaW5nIHNlbGVjdC5zZWxlY3QoKS4KLSAgICAgICAgIiIiCiAgICAgICAgIG4gPSBsZW4obWF0Y2gpCiAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoKQpAQCAtMzU1LDI2ICszMDcsMjUgQEAKICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgc19yZXBseSA9IChbc2VsZl0sIFtdLCBbXSkKLSAgICAgICAgc19hcmdzID0gc19yZXBseQogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc19hcmdzID0gc19hcmdzICsgKHRpbWVvdXQsKQotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mIGFuZCBzZWxlY3Quc2VsZWN0KCpzX2FyZ3MpID09IHNfcmVwbHk6Ci0gICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCi0gICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCi0gICAgICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICAgICAgaSA9IGkrbgotICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc19hcmdzID0gc19yZXBseSArICh0aW1lb3V0LWVsYXBzZWQsKQorICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgaWYgc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCisgICAgICAgICAgICAgICAgICAgIGlmIGkgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpK24KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWYKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfdGltZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQogCiAgICAgZGVmIHJlYWRfYWxsKHNlbGYpOgpAQCAtNTc5LDI5ICs1MzAsMzUgQEAKIAogICAgIGRlZiBzb2NrX2F2YWlsKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHdoZXRoZXIgZGF0YSBpcyBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoW3NlbGZdLCBbXSwgW10sIDApID09IChbc2VsZl0sIFtdLCBbXSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcmV0dXJuIGJvb2woc2VsZWN0b3Iuc2VsZWN0KDApKQogCiAgICAgZGVmIGludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJJbnRlcmFjdGlvbiBmdW5jdGlvbiwgZW11bGF0ZXMgYSB2ZXJ5IGR1bWIgdGVsbmV0IGNsaWVudC4iIiIKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICAgICAgICAgICBzZWxmLm10X2ludGVyYWN0KCkKICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmZkLCB3ZmQsIHhmZCA9IHNlbGVjdC5zZWxlY3QoW3NlbGYsIHN5cy5zdGRpbl0sIFtdLCBbXSkKLSAgICAgICAgICAgIGlmIHNlbGYgaW4gcmZkOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIENvbm5lY3Rpb24gY2xvc2VkIGJ5IHJlbW90ZSBob3N0ICoqKicpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgdGV4dDoKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh0ZXh0LmRlY29kZSgnYXNjaWknKSkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBpZiBzeXMuc3RkaW4gaW4gcmZkOgotICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKLSAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHN5cy5zdGRpbiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHNlbGVjdG9yLnNlbGVjdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfZWFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh0ZXh0LmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpcyBzeXMuc3RkaW46CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKIAogICAgIGRlZiBtdF9pbnRlcmFjdChzZWxmKToKICAgICAgICAgIiIiTXVsdGl0aHJlYWRlZCB2ZXJzaW9uIG9mIGludGVyYWN0KCkuIiIiCkBAIC02NDgsNzggKzYwNSw2IEBACiAgICAgICAgIHJlc3VsdHMgYXJlIHVuZGV0ZXJtaW5pc3RpYywgYW5kIG1heSBkZXBlbmQgb24gdGhlIEkvTyB0aW1pbmcuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhc19wb2xsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3BvbGwobGlzdCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rfd2l0aF9zZWxlY3QobGlzdCwgdGltZW91dCkKLQotICAgIGRlZiBfZXhwZWN0X3dpdGhfcG9sbChzZWxmLCBleHBlY3RfbGlzdCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBvbmUgZnJvbSBhIGxpc3Qgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoZXMuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgdXNlcyBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0aGUgdGltZW91dC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJlID0gTm9uZQotICAgICAgICBleHBlY3RfbGlzdCA9IGV4cGVjdF9saXN0WzpdCi0gICAgICAgIGluZGljZXMgPSByYW5nZShsZW4oZXhwZWN0X2xpc3QpKQotICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZXhwZWN0X2xpc3RbaV0sICJzZWFyY2giKToKLSAgICAgICAgICAgICAgICBpZiBub3QgcmU6IGltcG9ydCByZQotICAgICAgICAgICAgICAgIGV4cGVjdF9saXN0W2ldID0gcmUuY29tcGlsZShleHBlY3RfbGlzdFtpXSkKLSAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICBtID0gTm9uZQotICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgbSA9IGV4cGVjdF9saXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoc2VsZiwgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncykKLSAgICAgICAgICAgIHdoaWxlIG5vdCBtIGFuZCBub3Qgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKGNhbGxfdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoc2VsZikKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKLSAgICAgICAgdGV4dCA9IHNlbGYucmVhZF92ZXJ5X2xhenkoKQotICAgICAgICBpZiBub3QgdGV4dCBhbmQgc2VsZi5lb2Y6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgotICAgICAgICByZXR1cm4gKC0xLCBOb25lLCB0ZXh0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9zZWxlY3Qoc2VsZiwgbGlzdCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBvbmUgZnJvbSBhIGxpc3Qgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoZXMuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgcmUgPSBOb25lCiAgICAgICAgIGxpc3QgPSBsaXN0WzpdCiAgICAgICAgIGluZGljZXMgPSByYW5nZShsZW4obGlzdCkpCkBAIC03MjgsMjcgKzYxMywyNyBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCiAgICAgICAgICAgICAgICAgbGlzdFtpXSA9IHJlLmNvbXBpbGUobGlzdFtpXSkKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgICAgIG0gPSBsaXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCi0gICAgICAgICAgICBpZiBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc19hcmdzID0gKFtzZWxmLmZpbGVubygpXSwgW10sIFtdLCB0aW1lb3V0LWVsYXBzZWQpCi0gICAgICAgICAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QoKnNfYXJncykKLSAgICAgICAgICAgICAgICBpZiBub3QgcjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgIGRlYWRsaW5lID0gX3RpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICAgICBtID0gbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX3RpbWUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF92ZXJ5X2xhenkoKQogICAgICAgICBpZiBub3QgdGV4dCBhbmQgc2VsZi5lb2Y6CiAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL3RlbXBmaWxlLnB5IGIvTGliL3RlbXBmaWxlLnB5CmluZGV4IDkxMzMyYjYuLjVkMzQ2MjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVtcGZpbGUucHkKQEAgLTM1LDMxICszNSwxMiBAQAogZnJvbSByYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBfUmFuZG9tCiAKIHRyeToKLSAgICBpbXBvcnQgZmNudGwgYXMgX2ZjbnRsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZGVmIF9zZXRfY2xvZXhlYyhmZCk6Ci0gICAgICAgIHBhc3MKLWVsc2U6Ci0gICAgZGVmIF9zZXRfY2xvZXhlYyhmZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZsYWdzID0gX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9HRVRGRCwgMCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGZsYWdzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBtb2RpZnkKLSAgICAgICAgICAgIGZsYWdzIHw9IF9mY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBfZmNudGwuZmNudGwoZmQsIF9mY250bC5GX1NFVEZELCBmbGFncykKLQotCi10cnk6CiAgICAgaW1wb3J0IF90aHJlYWQKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQgX2R1bW15X3RocmVhZCBhcyBfdGhyZWFkCiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jawogCiBfdGV4dF9vcGVuZmxhZ3MgPSBfb3MuT19SRFdSIHwgX29zLk9fQ1JFQVQgfCBfb3MuT19FWENMCi1pZiBoYXNhdHRyKF9vcywgJ09fTk9JTkhFUklUJyk6Ci0gICAgX3RleHRfb3BlbmZsYWdzIHw9IF9vcy5PX05PSU5IRVJJVAogaWYgaGFzYXR0cihfb3MsICdPX05PRk9MTE9XJyk6CiAgICAgX3RleHRfb3BlbmZsYWdzIHw9IF9vcy5PX05PRk9MTE9XCiAKQEAgLTg4LDggKzY5LDggQEAKICAgICAjIEZhbGxiYWNrLiAgQWxsIHdlIG5lZWQgaXMgc29tZXRoaW5nIHRoYXQgcmFpc2VzIE9TRXJyb3IgaWYgdGhlCiAgICAgIyBmaWxlIGRvZXNuJ3QgZXhpc3QuCiAgICAgZGVmIF9zdGF0KGZuKToKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmZCA9IF9vcy5vcGVuKGZuLCBfb3MuT19SRE9OTFkpCisgICAgICAgIG9zLmNsb3NlKGZkKQogCiBkZWYgX2V4aXN0cyhmbik6CiAgICAgdHJ5OgpAQCAtMTIzLDcgKzEwNCw3IEBACiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICBjID0gc2VsZi5jaGFyYWN0ZXJzCiAgICAgICAgIGNob29zZSA9IHNlbGYucm5nLmNob2ljZQotICAgICAgICBsZXR0ZXJzID0gW2Nob29zZShjKSBmb3IgZHVtbXkgaW4gIjEyMzQ1NiJdCisgICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiByYW5nZSg4KV0KICAgICAgICAgcmV0dXJuICcnLmpvaW4obGV0dGVycykKIAogZGVmIF9jYW5kaWRhdGVfdGVtcGRpcl9saXN0KCk6CkBAIC0xNjUsNyArMTQ2LDcgQEAKIAogICAgIGZvciBkaXIgaW4gZGlybGlzdDoKICAgICAgICAgaWYgZGlyICE9IF9vcy5jdXJkaXI6Ci0gICAgICAgICAgICBkaXIgPSBfb3MucGF0aC5ub3JtY2FzZShfb3MucGF0aC5hYnNwYXRoKGRpcikpCisgICAgICAgICAgICBkaXIgPSBfb3MucGF0aC5hYnNwYXRoKGRpcikKICAgICAgICAgIyBUcnkgb25seSBhIGZldyBuYW1lcyBwZXIgZGlyZWN0b3J5LgogICAgICAgICBmb3Igc2VxIGluIHJhbmdlKDEwMCk6CiAgICAgICAgICAgICBuYW1lID0gbmV4dChuYW1lcikKQEAgLTIxNSw3ICsxOTYsNiBAQAogICAgICAgICBmaWxlID0gX29zLnBhdGguam9pbihkaXIsIHByZSArIG5hbWUgKyBzdWYpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkID0gX29zLm9wZW4oZmlsZSwgZmxhZ3MsIDBvNjAwKQotICAgICAgICAgICAgX3NldF9jbG9leGVjKGZkKQogICAgICAgICAgICAgcmV0dXJuIChmZCwgX29zLnBhdGguYWJzcGF0aChmaWxlKSkKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlICAgICMgdHJ5IGFnYWluCkBAIC02OTEsNyArNjcxLDYgQEAKICAgICBfaXNsaW5rID0gc3RhdGljbWV0aG9kKF9vcy5wYXRoLmlzbGluaykKICAgICBfcmVtb3ZlID0gc3RhdGljbWV0aG9kKF9vcy5yZW1vdmUpCiAgICAgX3JtZGlyID0gc3RhdGljbWV0aG9kKF9vcy5ybWRpcikKLSAgICBfb3NfZXJyb3IgPSBPU0Vycm9yCiAgICAgX3dhcm4gPSBfd2FybmluZ3Mud2FybgogCiAgICAgZGVmIF9ybXRyZWUoc2VsZiwgcGF0aCk6CkBAIC03MDEsMTYgKzY4MCwxNiBAQAogICAgICAgICAgICAgZnVsbG5hbWUgPSBzZWxmLl9wYXRoX2pvaW4ocGF0aCwgbmFtZSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpc2RpciA9IHNlbGYuX2lzZGlyKGZ1bGxuYW1lKSBhbmQgbm90IHNlbGYuX2lzbGluayhmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9vc19lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlzZGlyID0gRmFsc2UKICAgICAgICAgICAgIGlmIGlzZGlyOgogICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShmdWxsbmFtZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGYuX29zX2Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3JtZGlyKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBzZWxmLl9vc19lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9fX21haW5fXy5weSBiL0xpYi90ZXN0L19fbWFpbl9fLnB5CmluZGV4IGNlNTYxNWIuLmQ1ZmJlMTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L19fbWFpbl9fLnB5CisrKyBiL0xpYi90ZXN0L19fbWFpbl9fLnB5CkBAIC0xLDEzICsxLDMgQEAKLWZyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QKIAotCi1URU1QRElSLCBURVNUQ1dEID0gcmVncnRlc3QuX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKHJlZ3J0ZXN0LlRFTVBESVIpCi1yZWdydGVzdC5URU1QRElSID0gVEVNUERJUgotcmVncnRlc3QuVEVTVENXRCA9IFRFU1RDV0QKLQotIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCi0jIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiBJZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgb3IKLSMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0jIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCi13aXRoIHN1cHBvcnQudGVtcF9jd2QoVEVTVENXRCwgcXVpZXQ9VHJ1ZSk6Ci0gICAgcmVncnRlc3QubWFpbigpCityZWdydGVzdC5tYWluX2luX3RlbXBfY3dkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5IGIvTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKaW5kZXggMjdkYjAyOS4uYmQyNmUzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKKysrIGIvTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CkBAIC00Myw3ICs0Myw3IEBACiAKIHRyeToKICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVkdWN0aW9uCi0gICAgSEFTX1JFRFVDVElPTiA9IFRydWUKKyAgICBIQVNfUkVEVUNUSU9OID0gcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBIQVNfUkVEVUNUSU9OID0gRmFsc2UKIApAQCAtOTksNiArOTksOSBAQAogZXhjZXB0OgogICAgIE1BWEZEID0gMjU2CiAKKyMgVG8gc3BlZWQgdXAgdGVzdHMgd2hlbiB1c2luZyB0aGUgZm9ya3NlcnZlciwgd2UgY2FuIHByZWxvYWQgdGhlc2U6CitQUkVMT0FEID0gWydfX21haW5fXycsICd0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXInXQorCiAjCiAjIFNvbWUgdGVzdHMgcmVxdWlyZSBjdHlwZXMKICMKQEAgLTI5NCwxNyArMjk3LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoam9pbi5lbGFwc2VkLCAwLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQogCisgICAgICAgICMgWFhYIG1heWJlIHRlcm1pbmF0aW5nIHRvbyBzb29uIGNhdXNlcyB0aGUgcHJvYmxlbXMgb24gR2VudG9vLi4uCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKwogICAgICAgICBwLnRlcm1pbmF0ZSgpCiAKICAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdhbGFybScpOgorICAgICAgICAgICAgIyBPbiB0aGUgR2VudG9vIGJ1aWxkYm90IHdhaXRwaWQoKSBvZnRlbiBzZWVtcyB0byBibG9jayBmb3JldmVyLgorICAgICAgICAgICAgIyBXZSB1c2UgYWxhcm0oKSB0byBpbnRlcnJ1cHQgaXQgaWYgaXQgYmxvY2tzIGZvciB0b28gbG9uZy4KICAgICAgICAgICAgIGRlZiBoYW5kbGVyKCphcmdzKToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2pvaW4gdG9vayB0b28gbG9uZzogJXMnICUgcCkKICAgICAgICAgICAgIG9sZF9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMTApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCksIE5vbmUpCi0gICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZF9oYW5kbGVyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCksIE5vbmUpCkBAIC0zNDIsNyArMzUwLDYgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfdGVzdF9yZWN1cnNpb24oY2xzLCB3Y29ubiwgaWQpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZm9ya2luZwogICAgICAgICB3Y29ubi5zZW5kKGlkKQogICAgICAgICBpZiBsZW4oaWQpIDwgMjoKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgpAQCAtMzkwLDcgKzM5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2FpdF9mb3JfaGFuZGxlKHNlbnRpbmVsLCB0aW1lb3V0PTAuMCkpCiAgICAgICAgIGV2ZW50LnNldCgpCiAgICAgICAgIHAuam9pbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9REVMVEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdF9mb3JfaGFuZGxlKHNlbnRpbmVsLCB0aW1lb3V0PTEpKQogCiAjCiAjCkBAIC0xNzc5LDYgKzE3ODYsMzUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0KCksIGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5tYXBfYXN5bmMsIHNxciwgTCkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90cmFjZWJhY2soY2xzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQKKworICAgIGRlZiB0ZXN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBXZSB3YW50IGVuc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICAjIGNvbnRhaW5lZCBpbiB0aGUgdHJhY2ViYWNrIHJhaXNlZCBpbiB0aGUgbWFpbiBwcm9jZXNzLgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuUG9vbCgxKSBhcyBwOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcC5hcHBseShzZWxmLl90ZXN0X3RyYWNlYmFjaykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4YyA9IGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgUnVudGltZUVycm9yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShleGMpLCBSdW50aW1lRXJyb3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5hcmdzLCAoMTIzLCkpCisgICAgICAgICAgICBjYXVzZSA9IGV4Yy5fX2NhdXNlX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShjYXVzZSksIG11bHRpcHJvY2Vzc2luZy5wb29sLlJlbW90ZVRyYWNlYmFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywgY2F1c2UudGIpCisKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIGYxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmMS5nZXR2YWx1ZSgpKQorCiBkZWYgcmFpc2luZygpOgogICAgIHJhaXNlIEtleUVycm9yKCJrZXkiKQogCkBAIC0yNDg2LDcgKzI1MjIsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlc291cmNlX3NoYXJlcgogICAgICAgICByZXNvdXJjZV9zaGFyZXIuc3RvcCh0aW1lb3V0PTUpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTI4MDAsMzAgKzI4MzYsNDAgQEAKICMgVGVzdCB0aGF0IGZyb20gLi4uIGltcG9ydCAqIHdvcmtzIGZvciBlYWNoIG1vZHVsZQogIwogCi1jbGFzcyBfVGVzdEltcG9ydFN0YXIoQmFzZVRlc3RDYXNlKToKK2NsYXNzIF9UZXN0SW1wb3J0U3Rhcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKyAgICBkZWYgZ2V0X21vZHVsZV9uYW1lcyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGdsb2IKKyAgICAgICAgZm9sZGVyID0gb3MucGF0aC5kaXJuYW1lKG11bHRpcHJvY2Vzc2luZy5fX2ZpbGVfXykKKyAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbihmb2xkZXIsICcqLnB5JykKKyAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IocGF0dGVybikKKyAgICAgICAgbW9kdWxlcyA9IFtvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguc3BsaXQoZilbMV0pWzBdIGZvciBmIGluIGZpbGVzXQorICAgICAgICBtb2R1bGVzID0gWydtdWx0aXByb2Nlc3NpbmcuJyArIG0gZm9yIG0gaW4gbW9kdWxlc10KKyAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5fX2luaXRfXycpCisgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcnKQorICAgICAgICByZXR1cm4gbW9kdWxlcwogCiAgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgotICAgICAgICBtb2R1bGVzID0gWwotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZycsICdtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbicsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLmhlYXAnLCAnbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucG9vbCcsICdtdWx0aXByb2Nlc3NpbmcucHJvY2VzcycsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJywgJ211bHRpcHJvY2Vzc2luZy51dGlsJwotICAgICAgICAgICAgXQorICAgICAgICBtb2R1bGVzID0gc2VsZi5nZXRfbW9kdWxlX25hbWVzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmsnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9mb3Jrc2VydmVyJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fc3Bhd25fcG9zaXgnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl93aW4zMicpCisgICAgICAgICAgICBpZiBub3QgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQogCi0gICAgICAgIGlmIEhBU19SRURVQ1RJT046Ci0gICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbicpCi0KLSAgICAgICAgaWYgY19pbnQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGNfaW50IGlzIE5vbmU6CiAgICAgICAgICAgICAjIFRoaXMgbW9kdWxlIHJlcXVpcmVzIF9jdHlwZXMKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKIAogICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGVzOgogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ19fYWxsX18nKSwgbmFtZSkKIAotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZ2V0YXR0cihtb2QsICdfX2FsbF9fJywgKCkpOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gbW9kLl9fYWxsX186CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG1vZCwgYXR0ciksCiAgICAgICAgICAgICAgICAgICAgICclciBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlcicgJSAobW9kLCBhdHRyKQpAQCAtMjkwNiw3ICsyOTUyLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfa2lsbGVyKGNscywgcGlkKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR1VTUjEpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQpAQCAtMjkxOSwxMiArMjk2NSwxNCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBraWxsZXIgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2tpbGxlciwgYXJncz0ocGlkLCkpCiAgICAgICAgICAgICBraWxsZXIuc3RhcnQoKQotICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMSwpKQotICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KDIsKSkKKyAgICAgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBraWxsZXIuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290X3NpZ25hbFswXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgMCkKLSAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG9sZGhhbmRsZXIpCiAKQEAgLTI5MzcsOCArMjk4NSwxMSBAQAogICAgIEB1bml0dGVzdC5za2lwSWYoV0lOMzIsICJza2lwcGVkIG9uIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X2ludmFsaWRfaGFuZGxlcyhzZWxmKToKICAgICAgICAgY29ubiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24oNDQ5Nzc2MDgpCisgICAgICAgICMgY2hlY2sgdGhhdCBwb2xsKCkgZG9lc24ndCBjcmFzaAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIGNvbm4ucG9sbCkKKyAgICAgICAgICAgIGNvbm4ucG9sbCgpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIEhhY2sgcHJpdmF0ZSBhdHRyaWJ1dGUgX2hhbmRsZSB0byBhdm9pZCBwcmludGluZyBhbiBlcnJvcgogICAgICAgICAgICAgIyBpbiBjb25uLl9fZGVsX18KQEAgLTI5NDYsMTMxICsyOTk3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLCAtMSkKIAotIwotIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKLSMKLQotZGVmIGNyZWF0ZV90ZXN0X2Nhc2VzKE1peGluLCB0eXBlKToKLSAgICByZXN1bHQgPSB7fQotICAgIGdsb2IgPSBnbG9iYWxzKCkKLSAgICBUeXBlID0gdHlwZS5jYXBpdGFsaXplKCkKLSAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQotCi0gICAgZm9yIG5hbWUgaW4gbGlzdChnbG9iLmtleXMoKSk6Ci0gICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX1Rlc3QnKToKLSAgICAgICAgICAgIGJhc2UgPSBnbG9iW25hbWVdCi0gICAgICAgICAgICBhc3NlcnQgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykgPD0gQUxMX1RZUEVTLCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKQotICAgICAgICAgICAgaWYgdHlwZSBpbiBiYXNlLkFMTE9XRURfVFlQRVM6Ci0gICAgICAgICAgICAgICAgbmV3bmFtZSA9ICdXaXRoJyArIFR5cGUgKyBuYW1lWzE6XQotICAgICAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdFtuZXduYW1lXSA9IFRlbXAKLSAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCi0gICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gTWl4aW4uX19tb2R1bGVfXwotICAgIHJldHVybiByZXN1bHQKLQotIwotIyBDcmVhdGUgdGVzdCBjYXNlcwotIwotCi1jbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAncHJvY2Vzc2VzJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgotICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKQotICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKQotICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCi0gICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUGlwZSkKLSAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUXVldWUpCi0gICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZSkKLSAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Mb2NrKQotICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5STG9jaykKLSAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Cb3VuZGVkU2VtYXBob3JlKQotICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKQotICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5FdmVudCkKLSAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyKQotICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5WYWx1ZSkKLSAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkpCi0gICAgUmF3VmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd1ZhbHVlKQotICAgIFJhd0FycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdBcnJheSkKLQotdGVzdGNhc2VzX3Byb2Nlc3NlcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFByb2Nlc3Nlc01peGluLCB0eXBlPSdwcm9jZXNzZXMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfcHJvY2Vzc2VzKQotCi0KLWNsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAnbWFuYWdlcicKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKLSAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCi0gICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQotICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQotICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQotICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCi0gICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCi0gICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQotICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQotICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQotICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKLSAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCi0gICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQotICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcwotICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCi0gICAgICAgIHQgPSAwLjAxCi0gICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKHQpCi0gICAgICAgICAgICB0ICo9IDIKLSAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgotICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKLSAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKLSAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KLSAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCi0gICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQotICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCi0gICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQotICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKLQotdGVzdGNhc2VzX21hbmFnZXIgPSBjcmVhdGVfdGVzdF9jYXNlcyhNYW5hZ2VyTWl4aW4sIHR5cGU9J21hbmFnZXInKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfbWFuYWdlcikKLQotCi1jbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKLSAgICBUWVBFID0gJ3RocmVhZHMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5BcnJheSkKLQotdGVzdGNhc2VzX3RocmVhZHMgPSBjcmVhdGVfdGVzdF9jYXNlcyhUaHJlYWRzTWl4aW4sIHR5cGU9J3RocmVhZHMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfdGhyZWFkcykKIAogCiBjbGFzcyBPdGhlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzQyMCw3ICszMzQ2LDcgQEAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgaW1wb3J0IGpzb24sIHN1YnByb2Nlc3MKICAgICAgICAgIyBzdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIHVudXN1YWwgZmxhZ3MKLSAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKworICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKwogICAgICAgICAgICAgICAgICdUZXN0RmxhZ3MucnVuX2luX2NoaWxkKCknKQogICAgICAgICBkYXRhID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctRScsICctUycsICctTycsICctYycsIHByb2ddKQpAQCAtMzQ2NywxMyArMzM5MywxNCBAQAogCiBjbGFzcyBUZXN0Tm9Gb3JrQm9tYih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfbm9mb3JrYm9tYihzZWxmKToKKyAgICAgICAgc20gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpCiAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21wX2ZvcmtfYm9tYi5weScpCi0gICAgICAgIGlmIFdJTjMyOgotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lKQorICAgICAgICBpZiBzbSAhPSAnZm9yayc6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUsIHNtKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgb3V0LmRlY29kZSgnYXNjaWknKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1J1bnRpbWVFcnJvcicsIGVyci5kZWNvZGUoJ2FzY2lpJykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjMnLCBvdXQuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZXJyLmRlY29kZSgnYXNjaWknKSkKIApAQCAtMzQ5MSw3ICszNDE4LDggQEAKICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNscy5jaGlsZCwgYXJncz0obi0xLCBjb25uKSkKICAgICAgICAgICAgIHAuc3RhcnQoKQotICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbm4uc2VuZChsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KSkKICAgICAgICAgY29ubi5jbG9zZSgpCkBAIC0zNTAyLDExICszNDMwLDc4IEBACiAgICAgICAgIG9sZF9zaXplID0gbGVuKHV0aWwuX2FmdGVyZm9ya19yZWdpc3RyeSkKICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLmNoaWxkLCBhcmdzPSg1LCB3KSkKICAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHcuY2xvc2UoKQogICAgICAgICBuZXdfc2l6ZSA9IHIucmVjdigpCi0gICAgICAgIHAuam9pbigpCisgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG5ld19zaXplLCBvbGRfc2l6ZSkKIAogIworIyBDaGVjayB0aGF0IG5vbi1mb3JrZWQgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBpbmhlcml0IHVubmVlZGVkIGZkcy9oYW5kbGVzCisjCisKK2NsYXNzIFRlc3RDbG9zZUZkcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X2hpZ2hfc29ja2V0X2ZkKHNlbGYpOgorICAgICAgICBpZiBXSU4zMjoKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBub3QgaGF2ZSBhbnkgc29ja2V0IGhhbmRsZXMsIHNvCisgICAgICAgICAgICAjIGNhbGxpbmcgc29ja2V0LmZyb21mZCgpIHNob3VsZCBwcm9kdWNlIFdTQUVOT1RTT0NLIGV2ZW4KKyAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgYSBoYW5kbGUgb2YgdGhlIHNhbWUgbnVtYmVyLgorICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoKS5kZXRhY2goKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXZSB3YW50IHRvIHByb2R1Y2UgYSBzb2NrZXQgd2l0aCBhbiBmZCBoaWdoIGVub3VnaCB0aGF0IGEKKyAgICAgICAgICAgICMgZnJlc2hseSBjcmVhdGVkIGNoaWxkIHByb2Nlc3Mgd2lsbCBub3QgaGF2ZSBhbnkgZmRzIGFzIGhpZ2guCisgICAgICAgICAgICBmZCA9IHNvY2tldC5zb2NrZXQoKS5kZXRhY2goKQorICAgICAgICAgICAgdG9fY2xvc2UgPSBbXQorICAgICAgICAgICAgd2hpbGUgZmQgPCA1MDoKKyAgICAgICAgICAgICAgICB0b19jbG9zZS5hcHBlbmQoZmQpCisgICAgICAgICAgICAgICAgZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmb3IgeCBpbiB0b19jbG9zZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh4KQorICAgICAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZmQpOgorICAgICAgICBpZiBXSU4zMjoKKyAgICAgICAgICAgIHNvY2tldC5zb2NrZXQoZmlsZW5vPWZkKS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9jbG9zZWZkcyhjbHMsIGNvbm4sIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGNvbm4uc2VuZChlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICBjb25uLnNlbmQoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlZmQoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3JlcXVpcmVzIGZkIHBpY2tsaW5nJykKKworICAgICAgICByZWFkZXIsIHdyaXRlciA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKKyAgICAgICAgZmQgPSBzZWxmLmdldF9oaWdoX3NvY2tldF9mZCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF9jbG9zZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPSh3cml0ZXIsIGZkKSkKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIGUgPSByZWFkZXIucmVjdigpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmZCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZWFkZXIuY2xvc2UoKQorCisgICAgICAgIGlmIG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkgPT0gJ2ZvcmsnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgV1NBRU5PVFNPQ0sgPSAxMDAzOAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyA9PSBlcnJuby5FQkFERiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUud2luZXJyb3IgPT0gV1NBRU5PVFNPQ0ssIGUpCisKKyMKICMgSXNzdWUgIzE3MDk3OiBFSU5UUiBzaG91bGQgYmUgaWdub3JlZCBieSByZWN2KCksIHNlbmQoKSwgYWNjZXB0KCkgZXRjCiAjCiAKQEAgLTM1NTAsMTAgKzM1NDUsMTAgQEAKICAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIGhhbmRsZXIpCi0gICAgICAgIGwgPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpCi0gICAgICAgIGNvbm4uc2VuZChsLmFkZHJlc3MpCi0gICAgICAgIGEgPSBsLmFjY2VwdCgpCi0gICAgICAgIGEuc2VuZCgnd2VsY29tZScpCisgICAgICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIoKSBhcyBsOgorICAgICAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKKyAgICAgICAgICAgIGEgPSBsLmFjY2VwdCgpCisgICAgICAgICAgICBhLnNlbmQoJ3dlbGNvbWUnKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdVU1IxJyksICdyZXF1aXJlcyBTSUdVU1IxJykKICAgICBkZWYgdGVzdF9pZ25vcmVfbGlzdGVuZXIoc2VsZik6CkBAIC0zNTc0LDI2ICszNTY5LDI2NyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAKLSMKLSMKLSMKK2NsYXNzIFRlc3RTdGFydE1ldGhvZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9jaGVja19jb250ZXh0KGNscywgY29ubik6CisgICAgICAgIGNvbm4uc2VuZChtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpKQogCi1kZWYgc2V0VXBNb2R1bGUoKToKLSAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGludXgiKToKKyAgICBkZWYgY2hlY2tfY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICByLCB3ID0gY3R4LlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBwID0gY3R4LlByb2Nlc3ModGFyZ2V0PXNlbGYuX2NoZWNrX2NvbnRleHQsIGFyZ3M9KHcsKSkKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBjaGlsZF9tZXRob2QgPSByLnJlY3YoKQorICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGlsZF9tZXRob2QsIGN0eC5nZXRfc3RhcnRfbWV0aG9kKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBmb3IgbWV0aG9kIGluICgnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3R4ID0gbXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0KG1ldGhvZCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3R4LmdldF9jb250ZXh0KCksIGN0eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfc3RhcnRfbWV0aG9kLCAnc3Bhd24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnRleHQoY3R4KQorCisgICAgZGVmIHRlc3Rfc2V0X2dldChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQoUFJFTE9BRCkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIG9sZF9tZXRob2QgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvY2sgPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzMTExISIpCi0gICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQotICAgIHV0aWwuZ2V0X3RlbXBfZGlyKCkgICAgICMgY3JlYXRlcyB0ZW1wIGRpcmVjdG9yeSBmb3IgdXNlIGJ5IGFsbCBwcm9jZXNzZXMKLSAgICBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpLnNldExldmVsKExPR19MRVZFTCkKKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG1ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGN0eCkuX19uYW1lX18ubG93ZXIoKS5zdGFydHN3aXRoKG1ldGhvZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICBjdHguUHJvY2Vzcy5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnRleHQobXVsdGlwcm9jZXNzaW5nKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG9sZF9tZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGNvdW50LCAxKQorCisgICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKKyAgICAgICAgbWV0aG9kcyA9IG11bHRpcHJvY2Vzc2luZy5nZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kcywgWydzcGF3biddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJ10gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzID09IFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10pCisKKyMKKyMgQ2hlY2sgdGhhdCBraWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgbGVhayBuYW1lZCBzZW1hcGhvcmVzCisjCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsCisgICAgICAgICAgICAgICAgICJ0ZXN0IHNlbWFudGljcyBkb24ndCBtYWtlIHNlbnNlIG9uIFdpbmRvd3MiKQorY2xhc3MgVGVzdFNlbWFwaG9yZVRyYWNrZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlbWFwaG9yZV90cmFja2VyKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBjbWQgPSAnJydpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtcCwgdGltZSwgb3MKKyAgICAgICAgICAgIG1wLnNldF9zdGFydF9tZXRob2QoInNwYXduIikKKyAgICAgICAgICAgIGxvY2sxID0gbXAuTG9jaygpCisgICAgICAgICAgICBsb2NrMiA9IG1wLkxvY2soKQorICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGxvY2sxLl9zZW1sb2NrLm5hbWUuZW5jb2RlKCJhc2NpaSIpICsgYiJcXG4iKQorICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGxvY2syLl9zZW1sb2NrLm5hbWUuZW5jb2RlKCJhc2NpaSIpICsgYiJcXG4iKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgJycnCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCBjbWQgJSAodywgdyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2Zkcz1bd10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgIHdpdGggb3BlbihyLCAncmInLCBjbG9zZWZkPVRydWUpIGFzIGY6CisgICAgICAgICAgICBuYW1lMSA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIG5hbWUyID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTEpCisgICAgICAgIHAudGVybWluYXRlKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgorICAgICAgICAgICAgX211bHRpcHJvY2Vzc2luZy5zZW1fdW5saW5rKG5hbWUyKQorICAgICAgICAjIGRvY3Mgc2F5IGl0IHNob3VsZCBiZSBFTk9FTlQsIGJ1dCBPU1ggc2VlbXMgdG8gZ2l2ZSBFSU5WQUwKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjdHguZXhjZXB0aW9uLmVycm5vLCAoZXJybm8uRU5PRU5ULCBlcnJuby5FSU5WQUwpKQorICAgICAgICBlcnIgPSBwLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSAnc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAyIGxlYWtlZCBzZW1hcGhvcmVzJworICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCAnc2VtYXBob3JlX3RyYWNrZXI6ICVyOiBcW0Vycm5vJyAlIG5hbWUxKQorCisjCisjIE1peGlucworIworCitjbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAncHJvY2Vzc2VzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkpCisgICAgUmF3VmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd1ZhbHVlKQorICAgIFJhd0FycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdBcnJheSkKIAogCi1kZWYgdGVhckRvd25Nb2R1bGUoKToKLSAgICAjIHBhdXNlIGEgYml0IHNvIHdlIGRvbid0IGdldCB3YXJuaW5nIGFib3V0IGRhbmdsaW5nIHRocmVhZHMvcHJvY2Vzc2VzCi0gICAgdGltZS5zbGVlcCgwLjUpCitjbGFzcyBNYW5hZ2VyTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ21hbmFnZXInCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlF1ZXVlJykpCisgICAgSm9pbmFibGVRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuSm9pbmFibGVRdWV1ZScpKQorICAgIExvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkxvY2snKSkKKyAgICBSTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUkxvY2snKSkKKyAgICBTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlNlbWFwaG9yZScpKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJvdW5kZWRTZW1hcGhvcmUnKSkKKyAgICBDb25kaXRpb24gPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkNvbmRpdGlvbicpKQorICAgIEV2ZW50ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5FdmVudCcpKQorICAgIEJhcnJpZXIgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJhcnJpZXInKSkKKyAgICBWYWx1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuVmFsdWUnKSkKKyAgICBBcnJheSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQXJyYXknKSkKKyAgICBsaXN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5saXN0JykpCisgICAgZGljdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuZGljdCcpKQorICAgIE5hbWVzcGFjZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTmFtZXNwYWNlJykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgUG9vbChjbHMsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gY2xzLm1hbmFnZXIuUG9vbCgqYXJncywgKiprd2RzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLm1hbmFnZXIgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIG9ubHkgdGhlIG1hbmFnZXIgcHJvY2VzcyBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYWN0aXZlX2NoaWxkcmVuKCkKKyAgICAgICAgIyBidXQgdGhpcyBjYW4gdGFrZSBhIGJpdCBvbiBzbG93IG1hY2hpbmVzLCBzbyB3YWl0IGEgZmV3IHNlY29uZHMKKyAgICAgICAgIyBpZiB0aGVyZSBhcmUgb3RoZXIgY2hpbGRyZW4gdG9vIChzZWUgIzE3Mzk1KQorICAgICAgICB0ID0gMC4wMQorICAgICAgICB3aGlsZSBsZW4obXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpKSA+IDEgYW5kIHQgPCA1OgorICAgICAgICAgICAgdGltZS5zbGVlcCh0KQorICAgICAgICAgICAgdCAqPSAyCisgICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgaWYgY2xzLm1hbmFnZXIuX251bWJlcl9vZl9vYmplY3RzKCkgIT0gMDoKKyAgICAgICAgICAgICMgVGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yIHNpbmNlIHNvbWUgdGVzdHMgZG8gbm90CisgICAgICAgICAgICAjIGVuc3VyZSB0aGF0IGFsbCBwcm9jZXNzZXMgd2hpY2ggaG9sZCBhIHJlZmVyZW5jZSB0byBhCisgICAgICAgICAgICAjIG1hbmFnZWQgb2JqZWN0IGhhdmUgYmVlbiBqb2luZWQuCisgICAgICAgICAgICBwcmludCgnU2hhcmVkIG9iamVjdHMgd2hpY2ggc3RpbGwgZXhpc3QgYXQgbWFuYWdlciBzaHV0ZG93bjonKQorICAgICAgICAgICAgcHJpbnQoY2xzLm1hbmFnZXIuX2RlYnVnX2luZm8oKSkKKyAgICAgICAgY2xzLm1hbmFnZXIuc2h1dGRvd24oKQorICAgICAgICBjbHMubWFuYWdlci5qb2luKCkKKyAgICAgICAgY2xzLm1hbmFnZXIgPSBOb25lCiAKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKK2NsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAndGhyZWFkcycKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKKyAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKKyAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQorICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCisgICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQorICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCisgICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKKyAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCisgICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKKyAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKKyAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCisgICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKKyAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCisgICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQorCisjCisjIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQorIworCitkZWYgaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChyZW1vdGVfZ2xvYnMsIHN0YXJ0X21ldGhvZCk6CisgICAgX19tb2R1bGVfXyA9IHJlbW90ZV9nbG9ic1snX19uYW1lX18nXQorICAgIGxvY2FsX2dsb2JzID0gZ2xvYmFscygpCisgICAgQUxMX1RZUEVTID0geydwcm9jZXNzZXMnLCAndGhyZWFkcycsICdtYW5hZ2VyJ30KKworICAgIGZvciBuYW1lLCBiYXNlIGluIGxvY2FsX2dsb2JzLml0ZW1zKCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhc2UsIHR5cGUpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhiYXNlLCBCYXNlVGVzdENhc2UpOgorICAgICAgICAgICAgaWYgYmFzZSBpcyBCYXNlVGVzdENhc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIGJhc2UuQUxMT1dFRF9UWVBFUworICAgICAgICAgICAgZm9yIHR5cGVfIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgdHlwZV8uY2FwaXRhbGl6ZSgpICsgbmFtZVsxOl0KKyAgICAgICAgICAgICAgICBNaXhpbiA9IGxvY2FsX2dsb2JzW3R5cGVfLmNhcGl0YWxpemUoKSArICdNaXhpbiddCisgICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IFRlbXAuX19xdWFsbmFtZV9fID0gbmV3bmFtZQorICAgICAgICAgICAgICAgIFRlbXAuX19tb2R1bGVfXyA9IF9fbW9kdWxlX18KKyAgICAgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmV3bmFtZV0gPSBUZW1wCisgICAgICAgIGVsaWYgaXNzdWJjbGFzcyhiYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIG9iamVjdCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IFRlbXAuX19xdWFsbmFtZV9fID0gbmFtZQorICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgcmVtb3RlX2dsb2JzW25hbWVdID0gVGVtcAorCisgICAgZGFuZ2xpbmcgPSBbTm9uZSwgTm9uZV0KKyAgICBvbGRfc3RhcnRfbWV0aG9kID0gW05vbmVdCisKKyAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQoUFJFTE9BRCkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBkYW5nbGluZ1swXSA9IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZy5jb3B5KCkKKyAgICAgICAgZGFuZ2xpbmdbMV0gPSB0aHJlYWRpbmcuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBvbGRfc3RhcnRfbWV0aG9kWzBdID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChzdGFydF9tZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3Qoc3RhcnRfbWV0aG9kICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgc3RhcnQgbWV0aG9kIG5vdCBzdXBwb3J0ZWQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2sgPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzMTExISIpCisgICAgICAgIGNoZWNrX2Vub3VnaF9zZW1hcGhvcmVzKCkKKyAgICAgICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorCisgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG9sZF9zdGFydF9tZXRob2RbMF0sIGZvcmNlPVRydWUpCisgICAgICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHRtcCA9IHNldChtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzBdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgcHJvY2Vzc2VzOicsIHRtcCwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBkZWwgdG1wCisgICAgICAgIHRtcCA9IHNldCh0aHJlYWRpbmcuX2RhbmdsaW5nKSAtIHNldChkYW5nbGluZ1sxXSkKKyAgICAgICAgaWYgdG1wOgorICAgICAgICAgICAgcHJpbnQoJ0RhbmdsaW5nIHRocmVhZHM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisKKyAgICByZW1vdGVfZ2xvYnNbJ3NldFVwTW9kdWxlJ10gPSBzZXRVcE1vZHVsZQorICAgIHJlbW90ZV9nbG9ic1sndGVhckRvd25Nb2R1bGUnXSA9IHRlYXJEb3duTW9kdWxlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUgYi9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiMjMwNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5IGIvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQppbmRleCAwMDgyODFmLi5iNzQ5N2NlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKQEAgLTUsMjMgKzUsMTIgQEAKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKIAotZGVmIGJ5dGVzd2FwMihkYXRhKToKLSAgICBhID0gYXJyYXkuYXJyYXkoJ2gnKQotICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgYS5ieXRlc3dhcCgpCi0gICAgcmV0dXJuIGEudG9ieXRlcygpCitjbGFzcyBVbnNlZWthYmxlSU8oaW8uRmlsZUlPKToKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIAotZGVmIGJ5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCi0KLWRlZiBieXRlc3dhcDQoZGF0YSk6Ci0gICAgYSA9IGFycmF5LmFycmF5KCdpJykKLSAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgIGEuYnl0ZXN3YXAoKQotICAgIHJldHVybiBhLnRvYnl0ZXMoKQorICAgIGRlZiBzZWVrKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCiAKIAogY2xhc3MgQXVkaW9UZXN0czoKQEAgLTQ5LDYgKzM4LDEyIEBACiAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMsCiAgICAgICAgICAgICAgICAgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgbmNoYW5uZWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNhbXB3aWR0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBmcmFtZXJhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIG5mcmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBjb21wdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcG5hbWUsIGNvbXBuYW1lKQogCiAgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMocGFyYW1zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5sb2FkcyhkdW1wKSwgcGFyYW1zKQpAQCAtNjUsMTUgKzYwLDEyIEBACiAgICAgICAgIHJldHVybiBmCiAKICAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCB0ZXN0ZmlsZSwgbmZyYW1lcywgZnJhbWVzKToKLSAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZnJhbWVyYXRlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgbmZyYW1lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKG5mcmFtZXMpLCBmcmFtZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3BhcmFtcyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQpAQCAtODMsNiArNzUsNTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZnJhbWVzLCBzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQogICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2NvbnRleHRfbWFuYWdlcl9jYWxsc19jbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBjaGVja3MgZm9yIGEgbWluaW11bSBoZWFkZXIgYW5kIHdpbGwgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgIyBpZiBpdCBpcyBub3Qgc2V0LCBzbyB0aGlzIHByb3ZlcyB0aGF0IGNsb3NlIGlzIGNhbGxlZC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfb3Blbl9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBmLnNldGZyYW1lcmF0ZShzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgc2VsZi5jbG9zZV9mZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIGZpbGUgZG9lc24ndCBnZXQgY2xvc2VkLCB0aGlzIHRlc3Qgd29uJ3QgZmFpbCwgYnV0IGl0IHdpbGwKKyAgICAgICAgIyBwcm9kdWNlIGEgcmVzb3VyY2UgbGVhayB3YXJuaW5nLgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuY2hhbm5lbHMoc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgZi5zZXRjb21wdHlwZShzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZV9mZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCiAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCkBAIC05MSw2ICsxMzAsMzAgQEAKIAogICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMoYnl0ZWFycmF5KHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FycmF5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMoYXJyYXkuYXJyYXkoJ2gnLCBzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMobWVtb3J5dmlldyhzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKICAgICBkZWYgdGVzdF9pbmNvbXBsZXRlZF93cml0ZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICB0ZXN0ZmlsZS53cml0ZShiJ2FiYWJhZ2FsYW1hZ2EnKQpAQCAtMTI5LDYgKzE5Miw1OSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5yZWFkKDEzKSwgYidhYmFiYWdhbGFtYWdhJykKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAorICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfcmVhZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQorCisgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF91bnNlZWthYmxlX3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9maWxlKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHRlc3RmaWxlLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCisgICAgICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkKKyAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMgKyAxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMgKyAxLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfb3ZlcmZsb3dlZF93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHRlc3RmaWxlLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCisgICAgICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkKKyAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMgLSAxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQorICAgICAgICAgICAgZnJhbWVzaXplID0gc2VsZi5uY2hhbm5lbHMgKiBzZWxmLnNhbXB3aWR0aAorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMgLSAxLCBzZWxmLmZyYW1lc1s6LWZyYW1lc2l6ZV0pCisKIAogY2xhc3MgQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlKEF1ZGlvVGVzdHMpOgogCkBAIC0yMDUsMTIgKzMyMSw5IEBACiAKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQotICAgICAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIHNlbGYuc2FtcHdpZHRoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgc2VsZi5zbmRmaWxlbmZyYW1lcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyhzZWxmLm5mcmFtZXMpLCBzZWxmLmZyYW1lcykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1YWI2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpAQCAtMCwwICsxLDMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cisic3BhbSwgYmFyLCBibGFoIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5IGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CmluZGV4IGNmNTRjMjguLjBhNjI5NDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKQEAgLTE2MCwxNCArMTYwLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywKLSAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICAjIGNoZWNrIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnModGFic2l6ZT04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyh0YWJzaXplPTQpKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgIGFcbiBiJywgc2VsZi5tYXJzaGFsKGInIFx0YVxuXHRiJykuZXhwYW5kdGFicygxKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2hlbGxvJykuZXhwYW5kdGFicywgNDIsIDQyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5IGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YjQyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKQEAgLTAsMCArMSw0MSBAQAorIiIiYnl0ZWNvZGVfaGVscGVyIC0gc3VwcG9ydCB0b29scyBmb3IgdGVzdGluZyBjb3JyZWN0IGJ5dGVjb2RlIGdlbmVyYXRpb24iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZGlzCitpbXBvcnQgaW8KKworX1VOU1BFQ0lGSUVEID0gb2JqZWN0KCkKKworY2xhc3MgQnl0ZWNvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQ3VzdG9tIGFzc2VydGlvbiBtZXRob2RzIGZvciBpbnNwZWN0aW5nIGJ5dGVjb2RlLiIiIgorCisgICAgZGVmIGdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoc2VsZiwgY28pOgorICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBkaXMuZGlzKGNvLCBmaWxlPXMpCisgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKKworICAgIGRlZiBhc3NlcnRJbkJ5dGVjb2RlKHNlbGYsIHgsIG9wbmFtZSwgYXJndmFsPV9VTlNQRUNJRklFRCk6CisgICAgICAgICIiIlJldHVybnMgaW5zdHIgaWYgb3AgaXMgZm91bmQsIG90aGVyd2lzZSB0aHJvd3MgQXNzZXJ0aW9uRXJyb3IiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBpZiBhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEIG9yIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cgorICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyh4KQorICAgICAgICBpZiBhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEOgorICAgICAgICAgICAgbXNnID0gJyVzIG5vdCBmb3VuZCBpbiBieXRlY29kZTpcbiVzJyAlIChvcG5hbWUsIGRpc2Fzc2VtYmx5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gJyglcywlcikgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnCisgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgZGVmIGFzc2VydE5vdEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiVGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIG9wIGlzIGZvdW5kIiIiCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyh4KToKKyAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSBvcG5hbWU6CisgICAgICAgICAgICAgICAgZGlzYXNzZW1ibHkgPSBzZWxmLmdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoY28pCisgICAgICAgICAgICAgICAgaWYgb3Bhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnJXMgb2NjdXJzIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgICAgICAgICAgZWxpZiBpbnN0ci5hcmd2YWwgPT0gYXJndmFsOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnICUgKG9wbmFtZSwgYXJndmFsLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQppbmRleCAxMzQzZjM0Li5iNjdkMjhjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQpAQCAtNjE5LDYgKzYxOSwxMCBAQAogICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKICAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKIAorICAgICAgICAjIFRlc3QgZm9yIGEgcGF0Y2ggaW4gSXNzdWUgODg2MAorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KSwgMC41KnRkKG1pY3Jvc2Vjb25kcz0xLjApKQorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KS8vdGQucmVzb2x1dGlvbiwgMC41KnRkLnJlc29sdXRpb24vL3RkLnJlc29sdXRpb24pCisKICAgICBkZWYgdGVzdF9tYXNzaXZlX25vcm1hbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0tMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2EucHkgYi9MaWIvdGVzdC9maW5hbF9hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGVlODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9hLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2IKKworeCA9ICdhJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYi54ID0iLCB0ZXN0LmZpbmFsX2IueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9iLnB5IGIvTGliL3Rlc3QvZmluYWxfYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYi5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9hCisKK3ggPSAnYicKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2EueCA9IiwgdGVzdC5maW5hbF9hLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDg4NTI3ZGYuLjE5YjU0ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWxpdmVbaWRdID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKFNIT1JUU0xFRVApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFNTGdEMGtBS0RiNWNGeVAKK2pid05mUjVDdGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk0KKzl6MmoxT2xhTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVoKK2FnZ0Vka2oxVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFQ2dZQTBhSCtUMlZmM1dPUHY4S2RrY0pnNmdDUmUKK3lKS1hPV2dXUmNpY3gvQ1V6T0VzVHhtRklEUEx4cUFXQTNrN3YwQiszdmpHdzVZOWx5Y1YvNVhxWE5vUUkxNGoKK3kwOWlOc3VtZHMxM3U1QUtrR2RUSm5aaFE3VUtkb1ZIZnVQNDRaZE92L3JKNS9WRDZGNHpXeXdwZTkwcGNiSysKK0FXRFZ0dXNnR1FCU2llRWwxUUpCQU95VnJVRzVsMnlvVUJ0ZDJ6ci9raUdtL0RZeVhsSXRoUU8vQTMvTG5nRFcKKzUveWRHeFZzVDdsQVZPZ0Nzb1QrMEw0ZWZUaDkwUGp6VzhMUFFyUEJXVk1DUVFEUzNoL0Z0WVlkNWxmeitGTkwKKzlDRWUxRjF3OWw4UDc0OXVOVUQwZzMxN3p2MXRhdElxVkNzUVdIZlZITmRWdmZRK3ZTRnczOE9PUk8wMFhxczkKKzFHSnJBa0Jrb1hYRWt4Q1pveTRQdGVoZU8vOElXV0xHR3I2TDdkaTZNekZsMWxJcXdUNkQ4TDlvYVYydnluRlQKK0RuS29wMHBhMDlVbmhqeXc1N0tNTm1TRTJTVUpBa0VBcmxvVEV6cGdSbUNxNElLMi9OcENlR2RIUzV1cVJsYmgKKzFWSWEveEdwczdFV1FsNU1uOHN3UURlbC9ZUDNXR0hUamZ4N3BnU2VnUWZreWFSdEdwWjlPUUpBYTlWdW1qOG0KK0pBQXRJMEJuZ2E4aGdReDdCaFRRWTRDYWREeHlpUkdPR1lod1V6WVZDcWtiMnNiVlJIOUhud1VhSlQ3Y1dCWTMKK1JuSmRIT01YV2VtNy93PT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODEgKDB4YjA5MjY0YjFmMmRhMjFkMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1sb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpjMjplMDowZjo0OTowMDoyODozNjpmOTo3MDo1Yzo4Zjo4ZDpiYzowZDoKKyAgICAgICAgICAgICAgICAgICAgN2Q6MWU6NDI6YjU6ZWM6MWQ6NWM6MmY6YTQ6MzE6NzA6MTY6MGY6YzA6Y2I6CisgICAgICAgICAgICAgICAgICAgIGM2OjI0OmQzOmJlOjEzOjE2OmVlOmE1OjY3Ojk3OjAzOmE2OmRmOmE5Ojk5OgorICAgICAgICAgICAgICAgICAgICA5NjpjYzpjNzoyYTpmYjoxMTo3Zjo0ZTo2NTo0Zjo4YTo1ZTo4MjoyMTo0YzoKKyAgICAgICAgICAgICAgICAgICAgZjc6M2Q6YTM6ZDQ6ZTk6NWE6Mzc6ZTc6MjI6ZmQ6N2U6Y2Q6NTM6NmQ6OTM6CisgICAgICAgICAgICAgICAgICAgIDM0OmRlOjljOmFkOjg0OmEyOjM3OmJlOmM1OjhkOjgyOjRmOmUzOmFlOjIzOgorICAgICAgICAgICAgICAgICAgICBmMzpiZTphNzo3NToyYzo3MjowZjplYTpmMzpjYTpjZDpmYzplOTozZjpiNToKKyAgICAgICAgICAgICAgICAgICAgYWY6NTY6OTk6NmE6MDg6MDQ6NzY6NDg6ZjU6NGU6YzQ6YWM6YmY6NWM6ZDY6CisgICAgICAgICAgICAgICAgICAgIDIxOjgyOmE1OjNjOjg4OmU1OmJlOjFiOmIxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgMmY6NDI6NWY6YTM6MDk6MmM6ZmE6NTE6ODg6Yzc6Mzc6N2Y6ZWE6MGU6NjM6ZjA6YTI6OWE6CisgICAgICAgICBlNTo1YTplMjpjODoyMDpmMDozZjo2MDpiYzpjODowZjpiNjpjNjo3NjpjZTpkYjo4Mzo5MzoKKyAgICAgICAgIGY1OmEzOjMzOjY3OjAxOjhlOjA0OmNkOjAwOjlhOjczOmZkOmYzOjM1Ojg2OmZhOmQ3OjEzOgorICAgICAgICAgZTI6NDY6YzY6OWQ6YzA6Mjk6NTM6ZDQ6YTk6OTA6Yjg6Nzc6NGI6ZTY6ODM6NzY6ZTQ6OTI6CisgICAgICAgICBkNjo5Yzo1MDpjZjo0MzpkMDpjNjowMTo3Nzo2MTo5YTpkZTo5Yjo3MDpmNzo3MjpjZDo1OToKKyAgICAgICAgIDAwOjMxOjY5OmQ5OmI0OmNhOjA2OjljOjZkOmMzOmM3OjgwOjhjOjY4OmU2OmI1OmEyOmY4OgorICAgICAgICAgZWY6MWQ6YmI6MTY6OWY6Nzc6Nzc6ZWY6ODc6NjI6MjI6OWI6NGQ6Njk6YTQ6M2E6MWE6ZjE6CisgICAgICAgICAyMTo1ZTo4YzozMjphYzo5MjpmZDoxNTo2YjoxODpjMjo3ZjoxNTowZDo5ODozMDpjYTo3NToKKyAgICAgICAgIDhmOjFhOjcxOmRmOmRhOjFkOmIyOmVmOjlhOmU4OjJkOjJlOjAyOmZkOjRhOjNjOmFhOjk2OgorICAgICAgICAgMGI6MDY6NWQ6MzU6YjM6M2Q6MjQ6ODc6NGI6ZTA6YjA6NTg6NjA6MmY6NDU6YWM6MmU6NDg6CisgICAgICAgICA4YTpiMDo5OToxMDo2NToyNzpmZjpjYzpiMTpkODpmZDpiZDoyNjo2YjpiOTowYzowNToyYToKKyAgICAgICAgIGY0OjQ1OjYzOjM1OjUxOjA3OmVkOjgzOjg1OmZlOjZmOjY5OmNiOmJiOjQwOmE4OmFlOmI2OgorICAgICAgICAgM2I6NTY6NGE6MmQ6YTQ6ZWQ6NmQ6MTE6MmM6NGQ6ZWQ6MTc6MjQ6ZmQ6NDc6YmM6ZDM6NDE6CisgICAgICAgICBhMjpkMzowNjpmZTowYzo5MDpkODpkODo5NDoyNjpjNDpmZjpjYzphMTpkODo0Mjo3NzplYjoKKyAgICAgICAgIGZjOmE5Ojk0OjcxCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwRENDQVl3Q0NRQ3drbVN4OHRvaDBUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmZNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKK2MzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTUxnRDBrQUtEYjVjRnlQamJ3TmZSNUMKK3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNOXoyajFPbGEKK04rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaYWdnRWRrajEKK1RzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBQzlDWDZNSkxQcFIKK2lNYzNmK29PWS9DaW11VmE0c2dnOEQ5Z3ZNZ1B0c1oyenR1RGsvV2pNMmNCamdUTkFKcHovZk0xaHZyWEUrSkcKK3hwM0FLVlBVcVpDNGQwdm1nM2Jra3RhY1VNOUQwTVlCZDJHYTNwdHc5M0xOV1FBeGFkbTB5Z2FjYmNQSGdJeG8KKzVyV2krTzhkdXhhZmQzZnZoMklpbTAxcHBEb2E4U0ZlakRLc2t2MFZheGpDZnhVTm1EREtkWThhY2QvYUhiTHYKK211Z3RMZ0w5U2p5cWxnc0dYVFd6UFNTSFMrQ3dXR0F2UmF3dVNJcXdtUkJsSi8vTXNkajl2U1pydVF3Rkt2UkYKK1l6VlJCKzJEaGY1dmFjdTdRS2l1dGp0V1NpMms3VzBSTEUzdEZ5VDlSN3pUUWFMVEJ2NE1rTmpZbENiRS84eWgKKzJFSjM2L3lwbEhFPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDQucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzU1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBSzVVUWlNSTVWa05zMlF2CitMN2dVYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyCitOa1gwWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxCitMMk9RaEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRUNnWUFoc1JNZkprYjlFUkxNbC9vRy81c0xRdTlMCitwV0RLdDYrWndkeHpsWmJnZ1E4NUNNWXNoakxLSW9kMkRMTC9zTGYyeDFQUlh5UkcxMzFNMUUzazh6a2t6NmRlCitSMXVEcklOL3g5MWl1WXpmTFFaR2g4Yk1ZN1lqZDJlb3JvYTZSLzdEanBFbEdlakx4T0FhRFdPMFNUMklGUXk5CitteVRHUzJqU005N3djWGZzU1FKQkFOUDNqZWxKb1M1WDZCUmpUU25lWTIxd2NvY3hWdVFoOHBYcEVyQUxWTnNUCitkcnJGVGVhQnVacDdLdmJ0bklNNWcyV1JOdmF4TFpsQVkvaFhQSnZpNm5jQ1FRRFNpeDFjZWJtbDZFbVBsRVpTCitNbThnd0kyRjl1ZlV1bndKbUJKY3o4MjZEbzBaTkdCeVdEQU0vSlFaSDRGWDRHZkFGTnVqOFBVYitHUWZhZGt4CitpMURQQWtFQTBsVnNOSG9qdnVEc0lvOEhHdXphck5aUVQyYmVXakoxamR4aDl0N0hyVHg3TElwczZyYi9maE9LCitaczBSNmdWQUphRWJjV0FQWjJ0RnlFQ0luQWRuc1FKQVVqYWVYWGp1eEZrak9GeW01UHZxcHZocGl2RXg3OEJ1CitKUFRyM3JBS1htZkdNeHhmdU9hMHhLMXdTeXNoUDZaUi9SQm4vK2xjWFBLdWJoSFFET2Vnd3dKQUpGMURCUW5OCisrL3RMbU9QVUx0RHdmUDRaaXhuKy84R21HT2FoRm9SY3U2VklHSG1SaWxKVG42TU9CdXR3N0dsdjJZZGVDNmwvCitlODNHcTZmZkxWZktOUT09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgyICgweGIwOTI2NGIxZjJkYTIxZDIpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049ZmFrZWhvc3RuYW1lCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YWU6NTQ6NDI6MjM6MDg6ZTU6NTk6MGQ6YjM6NjQ6MmY6MmY6Yjg6MTQ6CisgICAgICAgICAgICAgICAgICAgIDZhOjIwOmRkOjE1OmViOmNkOjUxOjc0OjYzOjUzOjgwOmM3OjAxOmVkOmQ5OgorICAgICAgICAgICAgICAgICAgICBjZjozNjowYjo2NDpkMTozYTpmNjoxZjo2MDozYjpkNTo0Mjo0OToyZDo3YToKKyAgICAgICAgICAgICAgICAgICAgYjQ6OWU6NWY6NGY6OTU6NDQ6YmI6NDE6MTk6Yzg6NmE6ZjQ6N2I6NzU6NzY6CisgICAgICAgICAgICAgICAgICAgIDM2OjQ1OmY0OjY2Ojg1OjM0OjFkOmNmOmQ0OjY5OjhlOjJhOmM3OmIyOmM3OgorICAgICAgICAgICAgICAgICAgICA5YTo3ZTo1Mjo2MTo5YTo0ODpjNjoxMjo2Nzo5MTpmZTpkMjpjODo3Mjo0YToKKyAgICAgICAgICAgICAgICAgICAgZDc6MzU6MWE6MWE6NTU6MzQ6ZmM6YmM6NTg6YTg6OGI6ODY6MGE6ZDE6Nzk6CisgICAgICAgICAgICAgICAgICAgIDc2OmFjOjc1OjJmOjYzOjkwOjg0OjRjOjc1OjE4OmNlOjkxOmM5OmQxOmRkOgorICAgICAgICAgICAgICAgICAgICA4MTo3ZTpiZDoxYjphZTowYjo1ZDpjNjozOQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIGFkOjQ1OjhhOjhlOmVmOmM2OmVmOjA0OjQxOjVjOjJjOjRhOjg0OmRjOjAyOjc2OjBjOmQwOgorICAgICAgICAgNjY6MGY6ZjA6MTY6MDQ6NTg6NGQ6ZmQ6Njg6Yjc6Yjg6ZDM6YTg6NDE6YTU6NWM6M2M6NmY6CisgICAgICAgICA2NTozYzpkMTpmODpjZTo0MzozNTplNzo0MTo1Zjo1MzozZDpjOToyYzpjMzo3ZDpmYzo1NjoKKyAgICAgICAgIDRhOmZhOjQ3Ojc3OjM4OjlkOmJiOjk3OjI4OjBhOjNiOjkxOjE5OjdmOmJjOjc0OmFlOjE1OgorICAgICAgICAgNmI6YmQ6MjA6MzY6Njc6NDU6YTU6MWU6Nzk6ZDc6NzU6ZTY6ODk6NWM6NmQ6NTQ6ODQ6ZDE6CisgICAgICAgICA5NTpkNzphNzpiNDozMzozYzphZjozNzpjNDo3OTo4Zjo1ZTo3NTpkYzo3NTpjMjoxODpmYjoKKyAgICAgICAgIDYxOjZmOjJkOmRjOjM4OjY1OjViOmJhOjY3OjI4OmQwOjg4OmQ3OjhkOmI5OjIzOjVhOjhlOgorICAgICAgICAgZTg6YzY6YmI6ZGI6Y2U6ZDU6Yjg6NDE6MmE6Y2U6OTM6MDg6YjY6OTU6YWQ6MzQ6MjA6MTg6CisgICAgICAgICBkNTozYjozNzo1Mjo3NDo1MDowYjowNzoyYzpiMDo2ZDphNDo0Yzo3YjpmNDplMDpmZDpkMToKKyAgICAgICAgIGFmOjE3OmFhOjIwOmNkOjYyOmUzOmYwOjlkOjM3OjY5OmRiOjQxOmJkOmQ0OjFjOmZiOjUzOgorICAgICAgICAgMjA6ZGE6ODg6OWQ6NzY6MjY6Njc6Y2U6MDE6OTA6YTc6ODA6MWQ6YTk6NWI6Mzk6NzM6Njg6CisgICAgICAgICA1NDowYTpkMToyYTowMzoxYjo4ZjozYzo0Mzo1ZDo1ZDpjNDo1MTpmMTphNzplNzoxMTpkYToKKyAgICAgICAgIDMxOjJjOjQ5OjA2OmFmOjA0OmY0OmI4OjNjOjk5OmM0OjIwOmI5OjA2OjM2OmEyOjAwOjkyOgorICAgICAgICAgNjE6MWQ6MGM6NmQ6MjQ6MDU6ZTI6ODI6ZTE6NDc6ZGI6YTA6NWY6YmE6Yjk6ZmI6YmE6ZmE6CisgICAgICAgICA0OToxMjoxZTpjZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcHpDQ0FZOENDUUN3a21TeDh0b2gwakFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJpTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJVd0V3WURWUVFERXd4bVlXdGxhRzl6CitkRzVoYldVd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFLNVVRaU1JNVZrTnMyUXZMN2dVCithaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjJOa1gwCitab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDFMMk9RCitoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLMUZpbzd2Cit4dThFUVZ3c1NvVGNBbllNMEdZUDhCWUVXRTM5YUxlNDA2aEJwVnc4YjJVODBmak9RelhuUVY5VFBja3N3MzM4CitWa3I2UjNjNG5idVhLQW83a1JsL3ZIU3VGV3U5SURablJhVWVlZGQxNW9sY2JWU0UwWlhYcDdRelBLODN4SG1QCitYblhjZGNJWSsyRnZMZHc0WlZ1Nlp5alFpTmVOdVNOYWp1akd1OXZPMWJoQktzNlRDTGFWclRRZ0dOVTdOMUowCitVQXNITExCdHBFeDc5T0Q5MGE4WHFpRE5ZdVB3blRkcDIwRzkxQno3VXlEYWlKMTJKbWZPQVpDbmdCMnBXemx6CithRlFLMFNvREc0ODhRMTFkeEZIeHArY1IyakVzU1FhdkJQUzRQSm5FSUxrR05xSUFrbUVkREcwa0JlS0M0VWZiCitvRis2dWZ1Nitra1NIczQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weSBiL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDA4MWMxLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotaW1wb3J0IHN5cwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigiVGhpcyB0ZXN0IG9ubHkgbGVha3Mgb24gTWFjIE9TIFgiKQotCi1kZWYgbGVhaygpOgotICAgICMgdGFrZW4gZnJvbSBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAoKQotICAgIGZyb20gZ2VzdGFsdCBpbXBvcnQgZ2VzdGFsdAotICAgIGltcG9ydCBNYWNPUwotCi0gICAgdHJ5OgotICAgICAgICBnZXN0YWx0KCdzeXN1JykKLSAgICBleGNlcHQgTWFjT1MuRXJyb3I6Ci0gICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IGJmYmY0NGUuLjFjYmNlYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtODAsNiArODAsMTEgQEAKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBkZWwgbG9jawogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICByZXByKGxvY2spCisgICAgICAgIGRlbCBsb2NrCisKICAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgbG9jay5hY3F1aXJlKCkKQEAgLTQxMyw2ICs0MTgsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeSkKIAogICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGNvbmQpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIHRlc3QgaXMgc2Vuc2l0aXZlIHRvIHRpbWluZy4gIElmIHRoZSB3b3JrZXIgdGhyZWFkcworICAgICAgICAjIGRvbid0IGV4ZWN1dGUgaW4gYSB0aW1lbHkgZmFzaGlvbiwgdGhlIG1haW4gdGhyZWFkIG1heSB0aGluayB0aGV5CisgICAgICAgICMgYXJlIGZ1cnRoZXIgYWxvbmcgdGhlbiB0aGV5IGFyZS4gIFRoZSBtYWluIHRocmVhZCB0aGVyZWZvcmUgaXNzdWVzCisgICAgICAgICMgX3dhaXQoKSBzdGF0ZW1lbnRzIHRvIHRyeSB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHJhY2UgYWhlYWQKKyAgICAgICAgIyBvZiB0aGUgd29ya2Vycy4KKyAgICAgICAgIyBTZWNvbmRseSwgdGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBjb25kaXRpb24gdmFyaWFibGVzIGFyZSBub3Qgc3ViamVjdAorICAgICAgICAjIHRvIHNwdXJpb3VzIHdha2V1cHMuICBUaGUgYWJzZW5jZSBvZiBzcHVyaW91cyB3YWtldXBzIGlzIGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgZGV0YWlsIG9mIENvbmRpdGlvbiBDYXJpYWJsZXMgaW4gY3VycmVudCBDUHl0aG9uLCBidXQgaW4gZ2VuZXJhbCwgbm90CisgICAgICAgICMgYSBndWFyYW50ZWVkIHByb3BlcnR5IG9mIGNvbmRpdGlvbiB2YXJpYWJsZXMgYXMgYSBwcm9ncmFtbWluZworICAgICAgICAjIGNvbnN0cnVjdC4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjYW4gbm8gbG9uZ2VyCisgICAgICAgICMgYmUgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgc2hvdWxkIHRoZWlyIGltcGxlbWVudGF0aW9uIGV2ZXIgY2hhbmdlLgogICAgICAgICBOID0gNQogICAgICAgICByZXN1bHRzMSA9IFtdCiAgICAgICAgIHJlc3VsdHMyID0gW10KQEAgLTQ0MCw2ICs0NTYsOSBAQAogICAgICAgICAgICAgX3dhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbKFRydWUsIDEpXSAqIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtdKQorICAgICAgICAjIGZpcnN0IHdhaXQsIHRvIGVuc3VyZSBhbGwgd29ya2VycyBzZXR0bGUgaW50byBjb25kLndhaXQoKSBiZWZvcmUKKyAgICAgICAgIyB3ZSBjb250aW51ZS4gU2VlIGlzc3VlICM4Nzk5CisgICAgICAgIF93YWl0KCkKICAgICAgICAgIyBOb3RpZnkgNSB0aHJlYWRzOiB0aGV5IG1pZ2h0IGJlIGluIHRoZWlyIGZpcnN0IG9yIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5KDUpCkBAIC00NTAsNiArNDY5LDcgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzICsgWyhUcnVlLCAyKV0gKiAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbKFRydWUsIDIpXSAqIDMpCisgICAgICAgIF93YWl0KCkgIyBtYWtlIHN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkKICAgICAgICAgIyBOb3RpZnkgYWxsIHRocmVhZHM6IHRoZXkgYXJlIGFsbCBpbiB0aGVpciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQppbmRleCA0OGQyZTU3Li40MjUxZDU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMiw2ICsyLDcgQEAKIGFuZCBmcmllbmRzLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCkBAIC0yMCwxMSArMjEsNTQgQEAKIAogICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQogICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorCisgICAgWyBjYSBdCisgICAgZGVmYXVsdF9jYSAgICAgID0gQ0FfZGVmYXVsdAorCisgICAgWyBDQV9kZWZhdWx0IF0KKyAgICBkaXIgPSBjYWRpcgorICAgIGRhdGFiYXNlICA9ICRkaXIvaW5kZXgudHh0CisgICAgY3JsbnVtYmVyID0gJGRpci9jcmwudHh0CisgICAgZGVmYXVsdF9tZCA9IHNoYTEKKyAgICBkZWZhdWx0X2RheXMgPSAzNjAwCisgICAgZGVmYXVsdF9jcmxfZGF5cyA9IDM2MDAKKyAgICBjZXJ0aWZpY2F0ZSA9IHB5Y2FjZXJ0LnBlbQorICAgIHByaXZhdGVfa2V5ID0gcHljYWtleS5wZW0KKyAgICBzZXJpYWwgICAgPSAkZGlyL3NlcmlhbAorICAgIFJBTkRGSUxFICA9ICRkaXIvLnJhbmQKKworICAgIHBvbGljeSAgICAgICAgICA9IHBvbGljeV9tYXRjaAorCisgICAgWyBwb2xpY3lfbWF0Y2ggXQorICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgID0gbWF0Y2gKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lICAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgPSBtYXRjaAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgICAgICAgICAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgICAgICAgICAgPSBvcHRpb25hbAorCisgICAgWyBwb2xpY3lfYW55dGhpbmcgXQorICAgIGNvdW50cnlOYW1lICAgPSBvcHRpb25hbAorICAgIHN0YXRlT3JQcm92aW5jZU5hbWUgPSBvcHRpb25hbAorICAgIGxvY2FsaXR5TmFtZSAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgID0gc3VwcGxpZWQKKyAgICBlbWFpbEFkZHJlc3MgICAgPSBvcHRpb25hbAorCisKKyAgICBbIHYzX2NhIF0KKworICAgIHN1YmplY3RLZXlJZGVudGlmaWVyPWhhc2gKKyAgICBhdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cyxpc3N1ZXIKKyAgICBiYXNpY0NvbnN0cmFpbnRzID0gQ0E6dHJ1ZQorCiAgICAgIiIiCiAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIAotZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUpOgorZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUsIHNpZ249RmFsc2UpOgorICAgIHByaW50KCJjcmVhdGluZyBjZXJ0IGZvciAiICsgaG9zdG5hbWUpCiAgICAgdGVtcG5hbWVzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgpAQCAtMzMsMTAgKzc3LDI1IEBACiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4ocmVxX2ZpbGUsICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT1ob3N0bmFtZSkpCi0gICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywgJy14NTA5JywKKyAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctbm9kZXMnLAogICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToxMDI0JywgJy1rZXlvdXQnLCBrZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAnLW91dCcsIGNlcnRfZmlsZSwgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgICAgICAgICAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIHRlbXBuYW1lcy5hcHBlbmQoZi5uYW1lKQorICAgICAgICAgICAgICAgIHJlcWZpbGUgPSBmLm5hbWUKKyAgICAgICAgICAgIGFyZ3MgKz0gWyctb3V0JywgcmVxZmlsZSBdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWycteDUwOScsICctb3V0JywgY2VydF9maWxlIF0KICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCByZXFfZmlsZSwgJy1vdXQnLCBjZXJ0X2ZpbGUsICctb3V0ZGlyJywgJ2NhZGlyJywKKyAgICAgICAgICAgICAgICAgICAgJy1wb2xpY3knLCAncG9saWN5X2FueXRoaW5nJywgJy1iYXRjaCcsICctaW5maWxlcycsIHJlcWZpbGUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKwogICAgICAgICB3aXRoIG9wZW4oY2VydF9maWxlLCAncicpIGFzIGY6CiAgICAgICAgICAgICBjZXJ0ID0gZi5yZWFkKCkKICAgICAgICAgd2l0aCBvcGVuKGtleV9maWxlLCAncicpIGFzIGY6CkBAIC00Niw2ICsxMDUsMzYgQEAKICAgICAgICAgZm9yIG5hbWUgaW4gdGVtcG5hbWVzOgogICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCiAKK1RNUF9DQURJUiA9ICdjYWRpcicKKworZGVmIHVubWFrZV9jYSgpOgorICAgIHNodXRpbC5ybXRyZWUoVE1QX0NBRElSKQorCitkZWYgbWFrZV9jYSgpOgorICAgIG9zLm1rZGlyKFRNUF9DQURJUikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIHBhc3MgIyBlbXB0eSBmaWxlCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdjcmwudHh0JyksJ2ErJykgYXMgZjoKKyAgICAgICAgci53cml0ZSgiMDAiKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0LmF0dHInKSwndysnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCd1bmlxdWVfc3ViamVjdCA9IG5vJykKKworICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IikgYXMgdDoKKyAgICAgICAgdC53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPSdvdXItY2Etc2VydmVyJykpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1ub2RlcycsCisgICAgICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToyMDQ4JywgJy1rZXlvdXQnLCAncHljYWtleS5wZW0nLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsIGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJy1zdWJqJywgJy9DPVhZL0w9Q2FzdGxlIEFudGhyYXgvTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQS9DTj1vdXItY2Etc2VydmVyJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1jcmVhdGVfc2VyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCAncHljYWNlcnQucGVtJywgJy1iYXRjaCcsICctb3V0ZGlyJywgVE1QX0NBRElSLAorICAgICAgICAgICAgICAgICAgICAnLWtleWZpbGUnLCAncHljYWtleS5wZW0nLCAnLWRheXMnLCAnMzY1MCcsCisgICAgICAgICAgICAgICAgICAgICctc2VsZnNpZ24nLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLWluZmlsZXMnLCBmLm5hbWUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgdC5uYW1lLCAnLWdlbmNybCcsICctb3V0JywgJ3Jldm9jYXRpb24uY3JsJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG9zLmNoZGlyKGhlcmUpCkBAIC01NCwxMSArMTQzLDM0IEBACiAgICAgICAgIGYud3JpdGUoY2VydCkKICAgICB3aXRoIG9wZW4oJ3NzbF9rZXkucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKKyAgICBwcmludCgicGFzc3dvcmQgcHJvdGVjdGluZyBzc2xfa2V5LnBlbSBpbiBzc2xfa2V5LnBhc3N3ZC5wZW0iKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywnc3NsX2tleS5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ2tleWNlcnQucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCAnYSsnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGNlcnQpCisKICAgICAjIEZvciBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0ZXN0cworICAgIG1ha2VfY2EoKQogICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScpCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0Mi5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdsb2NhbGhvc3QnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDMucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQ0LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHVubWFrZV9jYSgpCisgICAgcHJpbnQoIlxuXG5QbGVhc2UgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGVzdF9zc2wucHksIHRlc3RfcGFyc2VfY2VydCBmdW5jdGlvbiByZWxhdGVkIHRvIG5vdEFmdGVyLG5vdEJlZm9yZSBhbmQgc2VyaWFsTnVtYmVyIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3g1MDknLCctaW4nLCdrZXljZXJ0LnBlbScsJy1kYXRlcycsJy1zZXJpYWwnLCctbm9vdXQnXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5IGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKaW5kZXggZDA5ZTc4Yy4uOGVmMGVjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKQEAgLTE0MCwxMiArMTQwLDggQEAKICAgICByZXR1cm4gIiIKIAogCi1jbGFzcyBnYWllcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBlcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKK2dhaWVycm9yID0gc29ja2V0X21vZHVsZS5nYWllcnJvcgorZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmVycm9yCiAKIAogIyBDb25zdGFudHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weSBiL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQppbmRleCA5MDhhZmUzLi4wMTdlMDEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKKysrIGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CkBAIC03LDYgKzcsMTEgQEAKICMgY29ycmVjdGx5IG9uIFdpbmRvd3MuICBIb3dldmVyLCB3ZSBzaG91bGQgZ2V0IGEgUnVudGltZUVycm9yIHJhdGhlcgogIyB0aGFuIHRoZSBXaW5kb3dzIGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIuCiAKK2lmIGxlbihzeXMuYXJndikgPiAxOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN5cy5hcmd2WzFdKQorZWxzZToKKyAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQorCiBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWZvbykKIHAuc3RhcnQoKQogcC5qb2luKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CmluZGV4IDI2YmFjN2IuLmRjYWFlN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpAQCAtMjgyLDcgKzI4Miw3IEBACiAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkuY2xvc2UoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIrc2VsZi5tYXBmaWxldXJsKQogCiAgICAgZGVmIG9wZW5fbWFwcGluZ19maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CmluZGV4IDA1MjI5MGQuLjE1NDJkNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTEsOSArMSwxMCBAQAoraW1wb3J0IGNvcHlyZWcKIGltcG9ydCBpbwotaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcGlja2xldG9vbHMKK2ltcG9ydCByYW5kb20KIGltcG9ydCBzeXMKLWltcG9ydCBjb3B5cmVnCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiBmcm9tIGh0dHAuY29va2llcyBpbXBvcnQgU2ltcGxlQ29va2llCiAKQEAgLTk1LDYgKzk2LDkgQEAKICAgICBkZWYgX19nZXRpbml0YXJnc19fKHNlbGYpOgogICAgICAgICByZXR1cm4gKCkKIAorY2xhc3MgSChvYmplY3QpOgorICAgIHBhc3MKKwogaW1wb3J0IF9fbWFpbl9fCiBfX21haW5fXy5DID0gQwogQy5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgpAQCAtMTAyLDYgKzEwNiw4IEBACiBELl9fbW9kdWxlX18gPSAiX19tYWluX18iCiBfX21haW5fXy5FID0gRQogRS5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgorX19tYWluX18uSCA9IEgKK0guX19tb2R1bGVfXyA9ICJfX21haW5fXyIKIAogY2xhc3MgbXlpbnQoaW50KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC00MjgsMzEgKzQzNCw1MiBAQAogICAgIHguYXBwZW5kKDUpCiAgICAgcmV0dXJuIHgKIAorCiBjbGFzcyBBYnN0cmFjdFBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFN1YmNsYXNzIG11c3QgZGVmaW5lIHNlbGYuZHVtcHMsIHNlbGYubG9hZHMuCiAKKyAgICBvcHRpbWl6ZWQgPSBGYWxzZQorCiAgICAgX3Rlc3RkYXRhID0gY3JlYXRlX2RhdGEoKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBwYXNzCiAKKyAgICBkZWYgYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBvYmpjb3B5LCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUob2JqKSwgdHlwZShvYmpjb3B5KSwgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX2RpY3RfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19zbG90c19fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChvYmouX19zbG90c19fLCBvYmpjb3B5Ll9fc2xvdHNfXywgbXNnPW1zZykKKyAgICAgICAgICAgIGZvciBzbG90IGluIG9iai5fX3Nsb3RzX186CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihvYmosIHNsb3QpLCBoYXNhdHRyKG9iamNvcHksIHNsb3QpLCBtc2c9bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvYmosIHNsb3QsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmpjb3B5LCBzbG90LCBOb25lKSwgbXNnPW1zZykKKwogICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CiAgICAgICAgICMgdGVzdCB2YXJpb3VzIGRhdGF0eXBlcyBub3QgdGVzdGVkIGJ5IHRlc3RkYXRhCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICB4ID0gbXlpbnQoNCkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgeCA9ICgxLCAoKSkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgeCA9IGluaXRhcmcoMSwgeCkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAjIFhYWCB0ZXN0IF9fcmVkdWNlX18gcHJvdG9jb2w/CiAKQEAgLTQ2MSwxNiArNDg4LDE2IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCiAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBnb3QpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTApKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEwKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTEpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGEyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMikpCiAKICAgICBkZWYgdGVzdF9sb2FkX2NsYXNzaWNfaW5zdGFuY2Uoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlNTE4MC4gIFRlc3QgbG9hZGluZyAyLnggcGlja2xlcyB0aGF0CkBAIC00OTIsNyArNTE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgYiJYXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicDBcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIoZHAxXG5iLiIpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUwKSkKIAogICAgICAgICAgICAgIyBQcm90b2NvbCAxIChiaW5hcnkgbW9kZSBwaWNrbGUpCiAgICAgICAgICAgICAiIiIKQEAgLTUwOSw3ICs1MzYsNyBAQAogICAgICAgICAgICAgcGlja2xlMSA9IChiJyhjX19tYWluX19cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKIAogICAgICAgICAgICAgIyBQcm90b2NvbCAyIChwaWNrbGUyID0gYidceDgwXHgwMicgKyBwaWNrbGUxKQogICAgICAgICAgICAgIiIiCkBAIC01MjcsNyArNTU0LDcgQEAKICAgICAgICAgICAgIHBpY2tsZTIgPSAoYidceDgwXHgwMihjX19tYWluX19cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKIAogICAgICMgVGhlcmUgYXJlIGdyYXR1aXRvdXMgZGlmZmVyZW5jZXMgYmV0d2VlbiBwaWNrbGVzIHByb2R1Y2VkIGJ5CiAgICAgIyBwaWNrbGUgYW5kIGNQaWNrbGUsIGxhcmdlbHkgYmVjYXVzZSBjUGlja2xlIHN0YXJ0cyBQVVQgaW5kaWNlcyBhdApAQCAtNTUyLDYgKzU3OSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXSkKIApAQCAtNTYxLDYgKzU4OSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgdHVwbGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHhbMF0pLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXVswXSkKQEAgLTU3MSwxNSArNjAwLDM5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4LmtleXMoKSksIFsxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzFdIGlzIHgpCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfc2V0KHNlbGYpOgorICAgICAgICBoID0gSCgpCisgICAgICAgIHkgPSBzZXQoe2h9KQorICAgICAgICBoLmF0dHIgPSB5CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgpWzBdLmF0dHIsIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIGggPSBIKCkKKyAgICAgICAgeSA9IGZyb3plbnNldCh7aH0pCisgICAgICAgIGguYXR0ciA9IHkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBmcm96ZW5zZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeClbMF0uYXR0ciwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorCiAgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2luc3Qoc2VsZik6CiAgICAgICAgIGkgPSBDKCkKICAgICAgICAgaS5hdHRyID0gaQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoaSwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4KSwgZGlyKGkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4LmF0dHIsIHgpCiAKQEAgLTU5Miw2ICs2NDUsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHhbMF0pLCBkaXIoaSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeFswXS5hdHRyLmtleXMoKSksIFsxXSkKQEAgLTU5OSwzMSArNjUzLDggQEAKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYubG9hZHMsIGInZzBcbnAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInKChLZHRwMFxuaFx4MDBsLikpJyksIFsoMTAwLCksICgxMDAsKV0pCi0KLSAgICBkZWYgdGVzdF9pbnNlY3VyZV9zdHJpbmdzKHNlbGYpOgotICAgICAgICAjIFhYWCBTb21lIG9mIHRoZXNlIHRlc3RzIGFyZSB0ZW1wb3JhcmlseSBkaXNhYmxlZAotICAgICAgICBpbnNlY3VyZSA9IFtiImFiYyIsIGIiMiArIDIiLCAjIG5vdCBxdW90ZWQKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInYWJjJyArICdkZWYnIiwgIyBub3QgYSBzaW5nbGUgcXVvdGVkIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBiIidhYmMiLCAjIHF1b3RlIGlzIG5vdCBjbG9zZWQKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjXCIiLCAjIG9wZW4gcXVvdGUgYW5kIGNsb3NlIHF1b3RlIGRvbid0IG1hdGNoCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiYycgICA/IiwgIyBqdW5rIGFmdGVyIGNsb3NlIHF1b3RlCi0gICAgICAgICAgICAgICAgICAgIGIiJ1xcJyIsICMgdHJhaWxpbmcgYmFja3NsYXNoCi0gICAgICAgICAgICAgICAgICAgICMgVmFyaWF0aW9ucyBvbiBpc3N1ZSAjMTc3MTAKLSAgICAgICAgICAgICAgICAgICAgYiInIiwKLSAgICAgICAgICAgICAgICAgICAgYiciJywKLSAgICAgICAgICAgICAgICAgICAgYiInICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAgICIsCi0gICAgICAgICAgICAgICAgICAgIGInIiAgICAnLAotICAgICAgICAgICAgICAgICAgICAjIHNvbWUgdGVzdHMgb2YgdGhlIHF1b3RpbmcgcnVsZXMKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInYWJjXCJcJyciLAotICAgICAgICAgICAgICAgICAgICAjIyBiIidcXFxcYVwnXCdcJ1xcXCdcXFxcXCcnIiwKLSAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICBmb3IgYiBpbiBpbnNlY3VyZToKLSAgICAgICAgICAgIGJ1ZiA9IGIiUyIgKyBiICsgYiJcMDEycDBcMDEyLiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShbKDEwMCwpLCAoMTAwLCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMoYicoKEtkdHAwXG5oXHgwMGwuKSknKSkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CiAgICAgICAgIGVuZGNhc2VzID0gWycnLCAnPFxcdT4nLCAnPFxcXHUxMjM0PicsICc8XG4+JywKQEAgLTYzNCwyNiArNjY1LDI2IEBACiAgICAgICAgICAgICBmb3IgdSBpbiBlbmRjYXNlczoKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh1LCBwcm90bykKICAgICAgICAgICAgICAgICB1MiA9IHNlbGYubG9hZHMocCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodSwgdTIpCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2hpZ2hfcGxhbmUoc2VsZik6CiAgICAgICAgIHQgPSAnXFUwMDAxMjM0NScKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgdDIgPSBzZWxmLmxvYWRzKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh0LCB0MikKIAogICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgZm9yIHMgaW4gYicnLCBiJ3h5eicsIGIneHl6JyoxMDA6CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKICAgICAgICAgICAgIGZvciBzIGluIFtieXRlcyhbaV0pIGZvciBpIGluIHJhbmdlKDI1NildOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAgICAgICAgICAgICBmb3IgcyBpbiBbYnl0ZXMoW2ksIGldKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogCiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwpAQCAtNjYzLDE0ICs2OTQsMTQgQEAKICAgICAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKICAgICAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQogICAgICAgICAgICAgICAgICAgICBuMiA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbjIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoZXhwZWN0ZWQsIG4yKQogICAgICAgICAgICAgICAgIG4gPSBuID4+IDEKIAogICAgIGRlZiB0ZXN0X21heGludDY0KHNlbGYpOgogICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKICAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4uJwogICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBtYXhpbnQ2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShtYXhpbnQ2NCwgZ290KQogCiAgICAgICAgICMgVHJ5IHRvbyB3aXRoIGEgYm9ndXMgbGl0ZXJhbC4KICAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInSlVOS1xuLicKQEAgLTY4NSw3ICs3MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBucG9zLCAtbnBvczoKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHMobiwgcHJvdG8pCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShuLCBnb3QpCiAgICAgICAgICMgVHJ5IGEgbW9uc3Rlci4gIFRoaXMgaXMgcXVhZHJhdGljLXRpbWUgaW4gcHJvdG9zIDAgJiAxLCBzbyBkb24ndAogICAgICAgICAjIGJvdGhlciB3aXRoIHRob3NlLgogICAgICAgICBuYmFzZSA9IGludCgiZGVhZGJlZWZmZWVkZmFjZSIsIDE2KQpAQCAtNjkzLDYgKzcyNCwxMCBAQAogICAgICAgICBmb3IgbiBpbiBuYmFzZSwgLW5iYXNlOgogICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMobiwgMikKICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocCkKKyAgICAgICAgICAgICMgYXNzZXJ0X2lzX2NvcHkgaXMgdmVyeSBleHBlbnNpdmUgaGVyZSBhcyBpdCBwcmVjb21wdXRlcworICAgICAgICAgICAgIyBhIGZhaWx1cmUgbWVzc2FnZSBieSBjb21wdXRpbmcgdGhlIHJlcHIoKSBvZiBuIGFuZCBnb3QsCisgICAgICAgICAgICAjIHdlIGp1c3QgZG8gdGhlIGNoZWNrIG91cnNlbHZlcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShnb3QpLCBpbnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKIAogICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgpAQCAtNzAzLDcgKzczOCw3IEBACiAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6CiAgICAgICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodmFsdWUsIGdvdCkKIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCiAgICAgZGVmIHRlc3RfZmxvYXRfZm9ybWF0KHNlbGYpOgpAQCAtNzM1LDYgKzc3MCw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhhLCBwcm90bykKICAgICAgICAgICAgIGIgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYSksIHR5cGUoYikpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RzZXEoc2VsZik6CiAgICAgICAgIGltcG9ydCB0aW1lCkBAIC03NDQsNDggKzc4MCw0OCBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh0LCB1KQogICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN0YXQiKToKICAgICAgICAgICAgICAgICB0ID0gb3Muc3RhdChvcy5jdXJkaXIpCiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh0LCB1KQogICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN0YXR2ZnMiKToKICAgICAgICAgICAgICAgICB0ID0gb3Muc3RhdHZmcyhvcy5jdXJkaXIpCiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh0LCB1KQogCiAgICAgZGVmIHRlc3RfZWxsaXBzaXMoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyguLi4sIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLi4uLCB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyguLi4sIHUpCiAKICAgICBkZWYgdGVzdF9ub3RpbXBsZW1lbnRlZChzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKE5vdEltcGxlbWVudGVkLCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vdEltcGxlbWVudGVkLCB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhOb3RJbXBsZW1lbnRlZCwgdSkKIAogICAgICMgVGVzdHMgZm9yIHByb3RvY29sIDIKIAogICAgIGRlZiB0ZXN0X3Byb3RvKHNlbGYpOgotICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSBidWlsZF9ub25lCisgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhOb25lLCBwcm90bykKICAgICAgICAgICAgIGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbcHJvdG9dKSArIGV4cGVjdGVkCi0gICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhOb25lLCBwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcHJvdG9faGVhZGVyID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW3Byb3RvXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGlja2xlZC5zdGFydHN3aXRoKHByb3RvX2hlYWRlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRfb3Bjb2RlKHBpY2tsZS5QUk9UTywgcGlja2xlZCksIDApCiAKICAgICAgICAgb29iID0gcHJvdG9jb2xzWy0xXSArIDEgICAgICMgYSBmdXR1cmUgcHJvdG9jb2wKKyAgICAgICAgYnVpbGRfbm9uZSA9IHBpY2tsZS5OT05FICsgcGlja2xlLlNUT1AKICAgICAgICAgYmFkcGlja2xlID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW29vYl0pICsgYnVpbGRfbm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmxvYWRzKGJhZHBpY2tsZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZGV0YWlsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihkZXRhaWwpLnN0YXJ0c3dpdGgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sIiwgc3RyKGVycikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGJhZCBwcm90b2NvbCBudW1iZXIgdG8gcmFpc2UgVmFsdWVFcnJvciIpCiAKQEAgLTc5NCw3ICs4MzAsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HMSwgcyksIHByb3RvID49IDIpCiAKICAgICBkZWYgdGVzdF9sb25nNChzZWxmKToKQEAgLTgwMiw3ICs4MzgsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HNCwgcyksIHByb3RvID49IDIpCiAKICAgICBkZWYgdGVzdF9zaG9ydF90dXBsZXMoc2VsZik6CkBAIC04NDAsOSArODc2LDkgQEAKICAgICAgICAgICAgIGZvciB4IGluIGEsIGIsIGMsIGQsIGU6CiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHksIChwcm90bywgeCwgcywgeSkpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIGxlbih4KV0KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVttaW4ocHJvdG8sIDMpLCBsZW4oeCldCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpKQogCiAgICAgZGVmIHRlc3Rfc2luZ2xldG9ucyhzZWxmKToKICAgICAgICAgIyBNYXAgKHByb3RvLCBzaW5nbGV0b24pIHRvIGV4cGVjdGVkIG9wY29kZS4KQEAgLTg2Niw4ICs5MDIsOCBAQAogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSwgKHByb3RvLCB4LCBzLCB5KSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgeF0KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW21pbihwcm90bywgMyksIHhdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpKQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX3R1cGxlKHNlbGYpOgogICAgICAgICB4ID0gTXlUdXBsZShbMSwgMiwgM10pCkBAIC04NzYsOCArOTEyLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoeCksIHR1cGxlKHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX2xpc3Qoc2VsZik6CiAgICAgICAgIHggPSBNeUxpc3QoWzEsIDIsIDNdKQpAQCAtODg2LDggKzkyMSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfZ2VuZXJpYyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTg5OCw2ICs5MzIsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICAgICAgZGV0YWlsID0gKHByb3RvLCBDLCBCLCB4LCB5LCB0eXBlKHkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkgIyBYWFggcmV2aXNpdAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQih4KSwgQih5KSwgZGV0YWlsKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXywgZGV0YWlsKQogCkBAIC05MzYsMTEgKzk3MSwxMCBAQAogICAgICAgICAgICAgczEgPSBzZWxmLmR1bXBzKHgsIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKF9fbmFtZV9fLmVuY29kZSgidXRmLTgiKSwgczEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiTXlMaXN0IiwgczEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczEpKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgIyBEdW1wIHVzaW5nIHByb3RvY29sIDIgZm9yIHRlc3QuCiAgICAgICAgICAgICBzMiA9IHNlbGYuZHVtcHMoeCwgMikKQEAgLTk0OSw5ICs5ODMsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczIpLCBUcnVlLCByZXByKHMyKSkKIAogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGUucmVzdG9yZSgpCiAKQEAgLTk3NSw3ICsxMDA3LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgcHJvdG8gPiAwKQogCkBAIC05ODQsNyArMTAxNiw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgMCkKQEAgLTk5OCw3ICsxMDMwLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgcHJvdG8gPiAwKQogCkBAIC0xMDA3LDIyICsxMDM5LDQ5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgMCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9zZXRpdGVtcyA+PSAyKQogCisgICAgZGVmIHRlc3Rfc2V0X2NodW5raW5nKHNlbGYpOgorICAgICAgICBuID0gMTAgICMgdG9vIHNtYWxsIHRvIGNodW5rCisgICAgICAgIHggPSBzZXQocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICBudW1fYWRkaXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFERElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMSkKKworICAgICAgICBuID0gMjUwMCAgIyBleHBlY3QgYXQgbGVhc3QgdHdvIGNodW5rcyB3aGVuIHByb3RvID49IDQKKyAgICAgICAgeCA9IHNldChyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIG51bV9hZGRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuQURESVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9hZGRpdGVtcywgMikKKwogICAgIGRlZiB0ZXN0X3NpbXBsZV9uZXdvYmooc2VsZik6CiAgICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhTaW1wbGVOZXdPYmopICAjIGF2b2lkIF9faW5pdF9fCiAgICAgICAgIHguYWJjID0gNjY2CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwgcHJvdG8gPj0gMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA8PSBwcm90byA8IDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSl9FWCwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvID49IDQpCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYWJjLCA2NjYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdF9zbG90cyhzZWxmKToKICAgICAgICAgeCA9IFNsb3RMaXN0KFsxLCAyLCAzXSkKQEAgLTEwMzAsMTAgKzEwODksNyBAQAogICAgICAgICB4LmJhciA9ICJoZWxsbyIKICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgMikKICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYmFyLCB5LmJhcikKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX292ZXJyaWRlc19kZWZhdWx0X3JlZHVjZV9leChzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTEwODIsMTEgKzExMzgsMTAgQEAKIAogICAgIEBub190cmFjaW5nCiAgICAgZGVmIHRlc3RfYmFkX2dldGF0dHIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzM1MTQ6IGNyYXNoIHdoZW4gdGhlcmUgaXMgYW4gaW5maW5pdGUgbG9vcCBpbiBfX2dldGF0dHJfXwogICAgICAgICB4ID0gQmFkR2V0YXR0cigpCi0gICAgICAgIGZvciBwcm90byBpbiAwLCAxOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmR1bXBzLCB4LCBwcm90bykKLSAgICAgICAgIyBwcm90b2NvbCAyIGRvbid0IHJhaXNlIGEgUnVudGltZUVycm9yLgotICAgICAgICBkID0gc2VsZi5kdW1wcyh4LCAyKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX2JhZF9pdGVyYXRvcihzZWxmKToKICAgICAgICAgIyBJc3N1ZTQxNzY6IGNyYXNoIHdoZW4gNHRoIGFuZCA1dGggaXRlbXMgb2YgX19yZWR1Y2VfXygpCkBAIC0xMTE5LDExICsxMTc0LDEwIEBACiAgICAgICAgIG9iaiA9IFtkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpXQogCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCi0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgcHJvdG9jb2wgJWQ6ICVyICE9ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwcm90bywgb2JqLCBsb2FkZWQpKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG9iaiwgbG9hZGVkKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfaW50ZXJuaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhdHRyaWJ1dGUgbmFtZXMgb2YgcGlja2xlZCBvYmplY3RzIGFyZSBpbnRlcm5lZCB3aGVuCkBAIC0xMTc5LDExICsxMjMzLDE0IEBACiAgICAgZGVmIHRlc3RfaW50X3BpY2tsaW5nX2VmZmljaWVuY3koc2VsZik6CiAgICAgICAgICMgVGVzdCBjb21wYWNpdHkgb2YgaW50IHJlcHJlc2VudGF0aW9uIChzZWUgaXNzdWUgIzEyNzQ0KQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgc2l6ZXMgPSBbbGVuKHNlbGYuZHVtcHMoMioqbiwgcHJvdG8pKSBmb3IgbiBpbiByYW5nZSg3MCldCi0gICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2l6ZXMpLCBzaXplcykKLSAgICAgICAgICAgIGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZXNbLTFdLCAxNCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVzID0gW3NlbGYuZHVtcHMoMioqbiwgcHJvdG8pIGZvciBuIGluIHJhbmdlKDcwKV0KKyAgICAgICAgICAgICAgICBzaXplcyA9IGxpc3QobWFwKGxlbiwgcGlja2xlcykpCisgICAgICAgICAgICAgICAgIyB0aGUgc2l6ZSBmdW5jdGlvbiBpcyBtb25vdG9uaWMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzaXplcyksIHNpemVzKQorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHBpY2tsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkcsIHApKQogCiAgICAgZGVmIGNoZWNrX25lZ2F0aXZlXzMyYl9iaW5YWFgoc2VsZiwgZHVtcGVkKToKICAgICAgICAgaWYgc3lzLm1heHNpemUgPiAyKiozMjoKQEAgLTEyMTQsNiArMTI3MSwzNSBAQAogICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDAzWFx4MDFceDAwXHgwMFx4MDBhclx4ZmZceGZmXHhmZlx4ZmYuJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBkdW1wZWQpCiAKKyAgICBkZWYgdGVzdF9iYWRseV9lc2NhcGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYiJTJ1xcJ1xuLiIpCisKKyAgICBkZWYgdGVzdF9iYWRseV9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzcxMAorICAgICAgICBiYWRwaWNrbGVzID0gW2IiUydcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1wnIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIiBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1wnIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIlwnXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiIlMnICcgXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiICIgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiIlMgJydcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyAiIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MuJ10KKyAgICAgICAgZm9yIHAgaW4gYmFkcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIHNlbGYubG9hZHMsIHApCisKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZ29vZHBpY2tsZXMgPSBbKGIiUycnXG4uIiwgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAoYidTIiJcbi4nLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiXFxuIlxuLicsICdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAoYiJTJ1xcbidcbi4iLCAnXG4nKV0KKyAgICAgICAgZm9yIHAsIGV4cGVjdGVkIGluIGdvb2RwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBleHBlY3RlZCkKKwogICAgIGRlZiBfY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUoc2VsZiwgb2JqLCBvcGNvZGUsIHByb3RvKToKICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBwaWNrbGVkKSkKQEAgLTEyMzcsNiArMTMyMywxODQgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUob2JqLCBwaWNrbGUuU0VUSVRFTVMsIHByb3RvKQogCisgICAgIyBFeGVyY2lzZSBmcmFtaW5nIChwcm90byA+PSA0KSBmb3Igc2lnbmlmaWNhbnQgd29ya2xvYWRzCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIHRlc3RfZnJhbWluZ19tYW55X29iamVjdHMoc2VsZik6CisgICAgICAgIG9iaiA9IGxpc3QocmFuZ2UoMTAqKjUpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdW5waWNrbGVkKQorICAgICAgICAgICAgICAgICMgVGVzdCB0aGUgZnJhbWluZyBoZXVyaXN0aWMgaXMgc2FuZSwKKyAgICAgICAgICAgICAgICAjIGFzc3VtaW5nIGEgZ2l2ZW4gZnJhbWUgc2l6ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZWQ6CisgICAgICAgICAgICAgICAgICAgICMgVGhlc2UgYXNzdW1wdGlvbnMgYXJlIGN1cnJlbnRseSBpbnZhbGlkIGZvciBvcHRpbWl6ZWQKKyAgICAgICAgICAgICAgICAgICAgIyBwaWNrbGVzIChzZWUgZS5nLiBpc3N1ZTE5NzU0KS4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBieXRlc19wZXJfZnJhbWUgPSAobGVuKHBpY2tsZWQpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGJ5dGVzX3Blcl9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAvIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRlJBTUVfU0laRV9UQVJHRVQgKiAxKQorCisgICAgZGVmIHRlc3RfZnJhbWluZ19sYXJnZV9vYmplY3RzKHNlbGYpOgorICAgICAgICBOID0gMTAyNCAqIDEwMjQKKyAgICAgICAgb2JqID0gW2IneCcgKiBOLCBiJ3knICogTiwgYid6JyAqIE5dCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB1bnBpY2tsZWQpCisgICAgICAgICAgICAgICAgbl9mcmFtZXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKQorICAgICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemVkOgorICAgICAgICAgICAgICAgICAgICAjIEF0IGxlYXN0IG9uZSBmcmFtZSB3YXMgZW1pdHRlZCAoc2VlIGlzc3VlMTk3NTQpLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuX2ZyYW1lcywgMSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEF0IGxlYXN0IG9uZSBmcmFtZSB3YXMgZW1pdHRlZCBwZXIgbGFyZ2UgYnl0ZXMgb2JqZWN0LgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuX2ZyYW1lcywgbGVuKG9iaikpCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbF9mcmFtZXMoc2VsZik6CisgICAgICAgIGlmIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MIDwgNDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlZiByZW1vdmVfZnJhbWVzKHBpY2tsZWQsIGtlZXBfZnJhbWU9Tm9uZSk6CisgICAgICAgICAgICAiIiJSZW1vdmUgZnJhbWUgb3Bjb2RlcyBmcm9tIHRoZSBnaXZlbiBwaWNrbGUuIiIiCisgICAgICAgICAgICBmcmFtZV9zdGFydHMgPSBbXQorICAgICAgICAgICAgIyAxIGJ5dGUgZm9yIHRoZSBvcGNvZGUgYW5kIDggZm9yIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgZnJhbWVfb3Bjb2RlX3NpemUgPSA5CisgICAgICAgICAgICBmb3Igb3Bjb2RlLCBfLCBwb3MgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZWQpOgorICAgICAgICAgICAgICAgIGlmIG9wY29kZS5uYW1lID09ICdGUkFNRSc6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lX3N0YXJ0cy5hcHBlbmQocG9zKQorCisgICAgICAgICAgICBuZXdwaWNrbGUgPSBieXRlYXJyYXkoKQorICAgICAgICAgICAgbGFzdF9mcmFtZV9lbmQgPSAwCisgICAgICAgICAgICBmb3IgaSwgcG9zIGluIGVudW1lcmF0ZShmcmFtZV9zdGFydHMpOgorICAgICAgICAgICAgICAgIGlmIGtlZXBfZnJhbWUgYW5kIGtlZXBfZnJhbWUoaSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3cGlja2xlICs9IHBpY2tsZWRbbGFzdF9mcmFtZV9lbmQ6cG9zXQorICAgICAgICAgICAgICAgIGxhc3RfZnJhbWVfZW5kID0gcG9zICsgZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgICAgIG5ld3BpY2tsZSArPSBwaWNrbGVkW2xhc3RfZnJhbWVfZW5kOl0KKyAgICAgICAgICAgIHJldHVybiBuZXdwaWNrbGUKKworICAgICAgICBmcmFtZV9zaXplID0gc2VsZi5GUkFNRV9TSVpFX1RBUkdFVAorICAgICAgICBudW1fZnJhbWVzID0gMjAKKyAgICAgICAgb2JqID0gW2J5dGVzKFtpXSkgKiBmcmFtZV9zaXplIGZvciBpIGluIHJhbmdlKG51bV9mcmFtZXMpXQorCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKworICAgICAgICAgICAgZnJhbWVsZXNzX3BpY2tsZSA9IHJlbW92ZV9mcmFtZXMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgZnJhbWVsZXNzX3BpY2tsZSksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgc2VsZi5sb2FkcyhmcmFtZWxlc3NfcGlja2xlKSkKKworICAgICAgICAgICAgc29tZV9mcmFtZXNfcGlja2xlID0gcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkLCBsYW1iZGEgaTogaSAlIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgc29tZV9mcmFtZXNfcGlja2xlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBzZWxmLmxvYWRzKHNvbWVfZnJhbWVzX3BpY2tsZSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfbmFtZXMoc2VsZik6CisgICAgICAgIGdsb2JhbCBOZXN0ZWQKKyAgICAgICAgY2xhc3MgTmVzdGVkOgorICAgICAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG9iaiBpbiBbTmVzdGVkLkEsIE5lc3RlZC5BLkIsIE5lc3RlZC5BLkIuQ106CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG9iaj1vYmopOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMob2JqLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLCB1bnBpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9weV9tZXRob2RzKHNlbGYpOgorICAgICAgICBnbG9iYWwgUHlNZXRob2RzVGVzdAorICAgICAgICBjbGFzcyBQeU1ldGhvZHNUZXN0OgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGNoZWVzZSgpOgorICAgICAgICAgICAgICAgIHJldHVybiAiY2hlZXNlIgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgd2luZShjbHMpOgorICAgICAgICAgICAgICAgIGFzc2VydCBjbHMgaXMgUHlNZXRob2RzVGVzdAorICAgICAgICAgICAgICAgIHJldHVybiAid2luZSIKKyAgICAgICAgICAgIGRlZiBiaXNjdWl0cyhzZWxmKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQeU1ldGhvZHNUZXN0KQorICAgICAgICAgICAgICAgIHJldHVybiAiYmlzY3VpdHMiCisgICAgICAgICAgICBjbGFzcyBOZXN0ZWQ6CisgICAgICAgICAgICAgICAgIk5lc3RlZCBjbGFzcyIKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGtldGNodXAoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXRjaHVwIgorICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBtYXBsZShjbHMpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY2xzIGlzIFB5TWV0aG9kc1Rlc3QuTmVzdGVkCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAibWFwbGUiCisgICAgICAgICAgICAgICAgZGVmIHBpZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZiwgUHlNZXRob2RzVGVzdC5OZXN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGllIgorCisgICAgICAgIHB5X21ldGhvZHMgPSAoCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0LmNoZWVzZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3Qud2luZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QoKS5iaXNjdWl0cywKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkLmtldGNodXAsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZC5tYXBsZSwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKCkucGllCisgICAgICAgICkKKyAgICAgICAgcHlfdW5ib3VuZF9tZXRob2RzID0gKAorICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuYmlzY3VpdHMsIFB5TWV0aG9kc1Rlc3QpLAorICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuTmVzdGVkLnBpZSwgUHlNZXRob2RzVGVzdC5OZXN0ZWQpCisgICAgICAgICkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgbWV0aG9kIGluIHB5X21ldGhvZHM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKCksIHVucGlja2xlZCgpKQorICAgICAgICAgICAgZm9yIG1ldGhvZCwgY2xzIGluIHB5X3VuYm91bmRfbWV0aG9kczoKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZChvYmopLCB1bnBpY2tsZWQob2JqKSkKKworCisgICAgZGVmIHRlc3RfY19tZXRob2RzKHNlbGYpOgorICAgICAgICBnbG9iYWwgU3ViY2xhc3MKKyAgICAgICAgY2xhc3MgU3ViY2xhc3ModHVwbGUpOgorICAgICAgICAgICAgY2xhc3MgTmVzdGVkKHN0cik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgICMgYm91bmQgYnVpbHQtaW4gbWV0aG9kCisgICAgICAgICAgICAoImFiY2QiLmluZGV4LCAoImMiLCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kIGJ1aWx0LWluIG1ldGhvZAorICAgICAgICAgICAgKHN0ci5pbmRleCwgKCJhYmNkIiwgImMiKSksCisgICAgICAgICAgICAjIGJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChbMSwgMiwgM10uX19sZW5fXywgKCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChsaXN0Ll9fbGVuX18sIChbMSwgMiwgM10sKSksCisgICAgICAgICAgICAjIGJvdW5kICJjb2V4aXN0IiBtZXRob2QKKyAgICAgICAgICAgICh7MSwgMn0uX19jb250YWluc19fLCAoMiwpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCAiY29leGlzdCIgbWV0aG9kCisgICAgICAgICAgICAoc2V0Ll9fY29udGFpbnNfXywgKHsxLCAyfSwgMikpLAorICAgICAgICAgICAgIyBidWlsdC1pbiBjbGFzcyBtZXRob2QKKyAgICAgICAgICAgIChkaWN0LmZyb21rZXlzLCAoKCJhIiwgMSksICgiYiIsIDIpKSksCisgICAgICAgICAgICAjIGJ1aWx0LWluIHN0YXRpYyBtZXRob2QKKyAgICAgICAgICAgIChieXRlYXJyYXkubWFrZXRyYW5zLCAoYiJhYmMiLCBiInh5eiIpKSwKKyAgICAgICAgICAgICMgc3ViY2xhc3MgbWV0aG9kcworICAgICAgICAgICAgKFN1YmNsYXNzKFsxLDIsMl0pLmNvdW50LCAoMiwpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5jb3VudCwgKFN1YmNsYXNzKFsxLDIsMl0pLCAyKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLmNvdW50LCAoImUiLCkpLAorICAgICAgICAgICAgKFN1YmNsYXNzLk5lc3RlZC5jb3VudCwgKFN1YmNsYXNzLk5lc3RlZCgic3dlZXQiKSwgImUiKSksCisgICAgICAgICkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgbWV0aG9kLCBhcmdzIGluIGNfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKmFyZ3MpLCB1bnBpY2tsZWQoKmFyZ3MpKQorCiAKIGNsYXNzIEJpZ21lbVBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTI0NywxMCArMTUxMSwxMSBAQAogICAgICAgICBkYXRhID0gMSA8PCAoOCAqIHNpemUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAyOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMjYzLDE0ICsxNTI4LDE1IEBACiAgICAgICAgIGRhdGEgPSBiImFiY2QiICogKHNpemUgLy8gNCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbOjE5XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE4Ol0pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTI3OSwxMCArMTU0NSwxMSBAQAogICAgICAgICBkYXRhID0gYiJhIiAqIHNpemUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEyOTQsMjcgKzE1NjEsMzggQEAKICAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbOjE5XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE4Ol0pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAotICAgICMgQklOVU5JQ09ERSAocHJvdG9jb2xzIDEsIDIgYW5kIDMpIGNhbm5vdCBjYXJyeSBtb3JlIHRoYW4KLSAgICAjIDIqKjMyIC0gMSBieXRlcyBvZiB1dGYtOCBlbmNvZGVkIHVuaWNvZGUuCisgICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbiAyKiozMiAtIDEgYnl0ZXMKKyAgICAjIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4gQklOVU5JQ09ERTggKHByb3RvY29sIDQpIHN1cHBvcnRzIHRoZXNlIGh1Z2UKKyAgICAjIHVuaWNvZGUgc3RyaW5ncyBob3dldmVyLgogCi0gICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT0xICsgYXNjaWlfY2hhcl9zaXplLCBkcnlfcnVuPUZhbHNlKQorICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9MiArIGFzY2lpX2NoYXJfc2l6ZSwgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9odWdlX3N0cl82NGIoc2VsZiwgc2l6ZSk6Ci0gICAgICAgIGRhdGEgPSAiYSIgKiBzaXplCisgICAgICAgIGRhdGEgPSAiYWJjZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIGlmIHByb3RvID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbOjE5XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xODpdKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTM1OCw4ICsxNjM2LDggQEAKICAgICAgICAgcmV0dXJuIG9iamVjdC5fX3JlZHVjZV9fKHNlbGYpCiAKIGNsYXNzIFJFWF9zaXgob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDR0aCBhcmd1bWVudCAobGlzdCBpdGVyYXRvcikgb2YgdGhlIHJlZHVjZQotICAgIHByb3RvY29sLgorICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNHRoIGFyZ3VtZW50IChsaXN0IGl0ZXJhdG9yKSBvZgorICAgIHRoZSByZWR1Y2UgcHJvdG9jb2wuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zPU5vbmUpOgogICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMgaWYgaXRlbXMgaXMgbm90IE5vbmUgZWxzZSBbXQpAQCAtMTM3MSw4ICsxNjQ5LDggQEAKICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZiksICgpLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMpLCBOb25lCiAKIGNsYXNzIFJFWF9zZXZlbihvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNXRoIGFyZ3VtZW50IChkaWN0IGl0ZXJhdG9yKSBvZiB0aGUgcmVkdWNlCi0gICAgcHJvdG9jb2wuCisgICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA1dGggYXJndW1lbnQgKGRpY3QgaXRlcmF0b3IpIG9mCisgICAgdGhlIHJlZHVjZSBwcm90b2NvbC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFibGU9Tm9uZSk6CiAgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZSBpZiB0YWJsZSBpcyBub3QgTm9uZSBlbHNlIHt9CkBAIC0xNDEwLDEwICsxNjg4LDE2IEBACiBjbGFzcyBNeURpY3QoZGljdCk6CiAgICAgc2FtcGxlID0geyJhIjogMSwgImIiOiAyfQogCitjbGFzcyBNeVNldChzZXQpOgorICAgIHNhbXBsZSA9IHsiYSIsICJiIn0KKworY2xhc3MgTXlGcm96ZW5TZXQoZnJvemVuc2V0KToKKyAgICBzYW1wbGUgPSBmcm96ZW5zZXQoeyJhIiwgImIifSkKKwogbXljbGFzc2VzID0gW015SW50LCBNeUZsb2F0LAogICAgICAgICAgICAgIE15Q29tcGxleCwKICAgICAgICAgICAgICBNeVN0ciwgTXlVbmljb2RlLAotICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0XQorICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0LCBNeVNldCwgTXlGcm96ZW5TZXRdCiAKIAogY2xhc3MgU2xvdExpc3QoTXlMaXN0KToKQEAgLTE0MjMsNiArMTcwNyw4IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIGMpOgogICAgICAgICAjIHJhaXNlIGFuIGVycm9yLCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjYWxsZWQKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJTaW1wbGVOZXdPYmouX19pbml0X18oKSBkaWRuJ3QgZXhwZWN0IHRvIGdldCBjYWxsZWQiKQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiBjbGFzcyBCYWRHZXRhdHRyOgogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBrZXkpOgpAQCAtMTQ1OSw3ICsxNzQ1LDcgQEAKIAogICAgIGRlZiB0ZXN0X2hpZ2hlc3RfcHJvdG9jb2woc2VsZik6CiAgICAgICAgICMgT2YgY291cnNlIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIEhJR0hFU1RfUFJPVE9DT0wgY2hhbmdlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCwgNCkKIAogICAgIGRlZiB0ZXN0X2NhbGxhcGkoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKQEAgLTE2NDAsMjIgKzE5MjYsMjMgQEAKIAogICAgIGRlZiBfY2hlY2tfbXVsdGlwbGVfdW5waWNrbGluZ3Moc2VsZiwgaW9jbGFzcyk6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBkYXRhMSA9IFsoeCwgc3RyKHgpKSBmb3IgeCBpbiByYW5nZSgyMDAwKV0gKyBbYiJhYmNkZSIsIGxlbl0KLSAgICAgICAgICAgIGYgPSBpb2NsYXNzKCkKLSAgICAgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZiwgcHJvdG9jb2w9cHJvdG8pCi0gICAgICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCi0gICAgICAgICAgICBwaWNrbGVkID0gZi5nZXR2YWx1ZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgZGF0YTEgPSBbKHgsIHN0cih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwMCldICsgW2IiYWJjZGUiLCBsZW5dCisgICAgICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQorICAgICAgICAgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZiwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgcGlja2xlci5kdW1wKGRhdGExKQorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKIAotICAgICAgICAgICAgTiA9IDUKLSAgICAgICAgICAgIGYgPSBpb2NsYXNzKHBpY2tsZWQgKiBOKQotICAgICAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgotICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQotICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcG9zICsgbGVuKHBpY2tsZWQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQorICAgICAgICAgICAgICAgIE4gPSA1CisgICAgICAgICAgICAgICAgZiA9IGlvY2xhc3MocGlja2xlZCAqIE4pCisgICAgICAgICAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcG9zICsgbGVuKHBpY2tsZWQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1bnBpY2tsZXIubG9hZCkKIAogICAgIGRlZiB0ZXN0X211bHRpcGxlX3VucGlja2xpbmdzX3NlZWthYmxlKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhpby5CeXRlc0lPKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcHljYWNlcnQucGVtIGIvTGliL3Rlc3QvcHljYWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KQEAgLTAsMCArMSw3OCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MCAoMHhiMDkyNjRiMWYyZGEyMWQwKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogSmFuICAyIDE5OjQ3OjA3IDIwMjMgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDplNzpkZTplOTplMzowYzo5ZjowMDpiNjphMTpmZDoyYjo1Yjo5NjpkMjoKKyAgICAgICAgICAgICAgICAgICAgNmY6Y2M6ZTA6YmU6ODY6Yjk6MjA6NWU6ZWM6MDM6N2E6NTU6YWI6ZWE6YTQ6CisgICAgICAgICAgICAgICAgICAgIGU5OmY5OjQ5Ojg1OmQyOjY2OmQ1OmVkOmM3OjdhOmVhOjU2OjhlOjJkOjhmOgorICAgICAgICAgICAgICAgICAgICBlNzo0MjplMjo2MjoyODphOTo5ZjpkNjoxYjo4ZTplYjpiNTpiNDo5Yzo5ZjoKKyAgICAgICAgICAgICAgICAgICAgMTQ6YWI6ZGY6ZTY6OTQ6OGI6NzY6MWQ6M2U6NmQ6MjQ6NjE6ZWQ6MGM6YmY6CisgICAgICAgICAgICAgICAgICAgIDAwOjhhOjYxOjBjOmRmOjVjOmM4OjM2OjczOjE2OjAwOmNkOjQ3OmJhOjZkOgorICAgICAgICAgICAgICAgICAgICBhNDphNDo3NDo4ODo4MzoyMzowYToxOTpmYzowOTphNzozYzo0YTo0YjpkMzoKKyAgICAgICAgICAgICAgICAgICAgZTc6MWQ6MmQ6ZTQ6ZWE6NGM6NTQ6MjE6ZjM6MjY6ZGI6ODk6Mzc6MTg6ZDQ6CisgICAgICAgICAgICAgICAgICAgIDAyOmJiOjQwOjMyOjVmOmE0OmZmOjJkOjFjOmY3OmQ0OmJiOmVjOjhlOmNmOgorICAgICAgICAgICAgICAgICAgICA1Yzo4MjphYzplNjo3YzowODo2Yzo0ODo4NTo2MTowNzo3ZjoyNTplMDo1YzoKKyAgICAgICAgICAgICAgICAgICAgZTA6YmM6MzQ6NWY6ZTA6Yjk6MDQ6NDc6NzU6Yzg6NDc6MGI6OGQ6YmM6ZDY6CisgICAgICAgICAgICAgICAgICAgIGM4OjY4OjVmOjMzOjgzOjYyOmQyOjIwOjQ0OjM1OmIxOmFkOjgxOjFhOjhhOgorICAgICAgICAgICAgICAgICAgICBjZDpiYzozNTpiMDo1Yzo4Yjo0NzpkNjoxODplOTo5YzoxODo5NzpjYzowMToKKyAgICAgICAgICAgICAgICAgICAgM2M6Mjk6Y2M6ZTg6MWU6ZTQ6ZTQ6YzE6Yjg6ZGU6ZTc6YzI6MTE6MTg6ODc6CisgICAgICAgICAgICAgICAgICAgIDVhOjkzOjM0OmQ4OmE2OjI1OmY3OjE0OjcxOmViOmU0OjIxOmEyOmQyOjBmOgorICAgICAgICAgICAgICAgICAgICAyZToyZTpkNDo2MjowMDozNTpkMzpkNjplZjo1Yzo2MDo0Yjo0YzphOToxNDoKKyAgICAgICAgICAgICAgICAgICAgZTI6ZGQ6MTU6NTg6NDY6Mzc6MzM6MjY6Yjc6ZTc6MmU6NWQ6ZWQ6NDI6ZTQ6CisgICAgICAgICAgICAgICAgICAgIGM1OjRkCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QkM6REQ6NjI6RDk6NzY6REE6MUI6RDI6NTQ6NkI6Q0Y6RTA6NjY6OUI6MUU6MUU6N0I6NTY6MEM6MEIKKworICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICA3ZDowYTpmNTpjYjo4ZDpkMzo1ZDpiZDo5OTo4ZTpmODoyYjowZjpiYTplYjpjMjpkOTphNjoKKyAgICAgICAgIDI3OjRmOjJlOjdiOjJmOjBlOjY0OmQ4OjFjOjM1OjUwOjRlOmVlOmZjOjkwOmI5OjhkOjZkOgorICAgICAgICAgYTg6YzU6YzY6MDY6YjA6YWY6ZjM6MmQ6YmY6M2I6Yjg6NDI6MDc6ZGQ6MTg6N2Q6NmQ6OTU6CisgICAgICAgICA1NDo1Nzo4NToxODo2MDo0NzoyZjplYjo3ODoxYjpmOTplODoxNzpmZDo1YTowZDo4NzoxNzoKKyAgICAgICAgIDI4OmFjOjRjOjZhOmU2OmJjOjI5OmY0OmY0OjU1OjcwOjI5OjQyOmRlOjg1OmVhOmFiOjZjOgorICAgICAgICAgMjM6MDY6NjQ6MzA6NzU6MDI6OGU6NTM6YmM6NWU6MDE6MzM6Mzc6Y2M6MWU6Y2Q6Yjg6YTQ6CisgICAgICAgICBmZDpjYTplNDo1Zjo2NTozYjo4MzoxYzo4NjpmMTo1NTowMjphMDozYTo4ZjpkYjo5MTpiNzoKKyAgICAgICAgIDQwOjE0OmI0OmU3OjhkOmQyOmVlOjczOmJhOmUzOmU1OjM0OjJkOmJjOjk0OjZmOjRlOjI0OgorICAgICAgICAgMDY6Zjc6NWY6OGI6MGU6YTc6OGU6NmI6ZGU6NWU6NzU6ZjQ6MzI6OWE6NTA6YjE6NDQ6MzM6CisgICAgICAgICA5YTpkMDowNTplMjo3ODo4MjpmZjpkYjpkYTo4YTo2MzplYjphOTpkZDpkMTpiZjphMDo2MToKKyAgICAgICAgIGFkOmUzOjllOjhhOjI0OjVkOjYyOjBlOmU3OjRjOjkxOjdmOmVmOmRmOjM0OjM2OjNiOjJmOgorICAgICAgICAgNWQ6ZjU6ODQ6YjI6MmY6YzQ6NmQ6OTM6OTY6MWE6NmY6MzA6Mjg6ZjE6ZGE6MTI6OWE6NjQ6CisgICAgICAgICBiNDo0MDozMzoxZDpiZDpkZToyYjo1MzphODplYTpiZTpkNjpiYzo0ZTo5NjpmNTo0NDpmYjoKKyAgICAgICAgIDMyOjE4OmFlOmQ1OjFmOmY2OjY5OmFmOmI2OjRlOjdiOjFkOjU4OmVjOjNiOmE5OjUzOmEzOgorICAgICAgICAgNWU6NTg6Yzg6OWUKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGJUQ0NBbFdnQXdJQkFnSUpBTENTWkxIeTJpSFFNQTBHQ1NxR1NJYjNEUUVCQlFVQU1FMHhDekFKQmdOVgorQkFZVEFsaFpNU1l3SkFZRFZRUUtEQjFRZVhSb2IyNGdVMjltZEhkaGNtVWdSbTkxYm1SaGRHbHZiaUJEUVRFVworTUJRR0ExVUVBd3dOYjNWeUxXTmhMWE5sY25abGNqQWVGdzB4TXpBeE1EUXhPVFEzTURkYUZ3MHlNekF4TURJeAorT1RRM01EZGFNRTB4Q3pBSkJnTlZCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZworUm05MWJtUmhkR2x2YmlCRFFURVdNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFPZmU2ZU1NbndDMm9mMHJXNWJTYjh6Z3ZvYTVJRjdzQTNwVgorcStxazZmbEpoZEptMWUzSGV1cFdqaTJQNTBMaVlpaXBuOVlianV1MXRKeWZGS3ZmNXBTTGRoMCtiU1JoN1F5LworQUlwaEROOWN5RFp6RmdETlI3cHRwS1IwaUlNakNobjhDYWM4U2t2VDV4MHQ1T3BNVkNIekp0dUpOeGpVQXJ0QQorTWwray95MGM5OVM3N0k3UFhJS3M1bndJYkVpRllRZC9KZUJjNEx3MFgrQzVCRWQxeUVjTGpield5R2hmTTROaQorMGlCRU5iR3RnUnFLemJ3MXNGeUxSOVlZNlp3WWw4d0JQQ25NNkI3azVNRzQzdWZDRVJpSFdwTTAyS1lsOXhSeAorNitRaG90SVBMaTdVWWdBMTA5YnZYR0JMVEtrVTR0MFZXRVkzTXlhMzV5NWQ3VUxreFUwQ0F3RUFBYU5RTUU0dworSFFZRFZSME9CQllFRkx6ZFl0bDIyaHZTVkd2UDRHYWJIaDU3Vmd3TE1COEdBMVVkSXdRWU1CYUFGTHpkWXRsMgorMmh2U1ZHdlA0R2FiSGg1N1Znd0xNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgorQUgwSzljdU4wMTI5bVk3NEt3KzY2OExacGlkUExuc3ZEbVRZSERWUVR1NzhrTG1OYmFqRnhnYXdyL010dnp1NAorUWdmZEdIMXRsVlJYaFJoZ1J5L3JlQnY1NkJmOVdnMkhGeWlzVEdybXZDbjA5RlZ3S1VMZWhlcXJiQ01HWkRCMQorQW81VHZGNEJNemZNSHMyNHBQM0s1RjlsTzRNY2h2RlZBcUE2ajl1UnQwQVV0T2VOMHU1enV1UGxOQzI4bEc5TworSkFiM1g0c09wNDVyM2w1MTlES2FVTEZFTTVyUUJlSjRndi9iMm9wajY2bmQwYitnWWEzam5vb2tYV0lPNTB5UgorZisvZk5EWTdMMTMxaExJdnhHMlRsaHB2TUNqeDJoS2FaTFJBTXgyOTNpdFRxT3ErMXJ4T2x2VkUreklZcnRVZgorOW1tdnRrNTdIVmpzTzZsVG8xNVl5SjQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNha2V5LnBlbSBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNmVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9weWNha2V5LnBlbQpAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRG4zdW5qREo4QXRxSDkKK0sxdVcwbS9NNEw2R3VTQmU3QU42VmF2cXBPbjVTWVhTWnRYdHgzcnFWbzR0aitkQzRtSW9xWi9XRzQ3cnRiU2MKK254U3IzK2FVaTNZZFBtMGtZZTBNdndDS1lRemZYTWcyY3hZQXpVZTZiYVNrZElpREl3b1ovQW1uUEVwTDArY2QKK0xlVHFURlFoOHliYmlUY1kxQUs3UURKZnBQOHRIUGZVdSt5T3oxeUNyT1o4Q0d4SWhXRUhmeVhnWE9DOE5GL2cKK3VRUkhkY2hIQzQyODFzaG9Yek9EWXRJZ1JEV3hyWUVhaXMyOE5iQmNpMGZXR09tY0dKZk1BVHdwek9nZTVPVEIKK3VON253aEVZaDFxVE5OaW1KZmNVY2V2a0lhTFNEeTR1MUdJQU5kUFc3MXhnUzB5cEZPTGRGVmhHTnpNbXQrY3UKK1hlMUM1TVZOQWdNQkFBRUNnZ0VCQUpQTTdRdVVyUG40Y0xOL1lzZDE1bHdUV245b0hERkZna1lGdkNzNjZnWEUKK2p1LzZLeDJCaldFNHdUSmJ5MDlBSE0vTXFCMER2Z3VUN01mMVEyajN0UFExSFpvd2c4T3dSRGxldXdwNktJbHMKK2pCYmhMMEpkbC81SEM2N2t0V3ZaOXdOdk8vd0ZHMXJRZlQ2RlZhamY5TFViV0VhU1piT0cyU0xoSGZzSG9yenUKK3hqVEphSTNiUS8wKzc5QjFleHdrNXJ1d2h6RlJkL1hwWThobHM3RC9SZlBJdUhEbEJnaGtXM041OUtGV3JmNWgKKzZiTkVoMlRIbTArSXlHY0dxczBGRCtRQ09YeXZzandTVXN3cXJyMmN0TFJFT2VEY2Q1UmVValN4WWdqY0pScm0KK0o3Y2VJWS8rdXdESnh3L09sbm1CdkY2cFFNa0t3WVcyZ0Z6dHUrZzJ0NFVDZ1lFQS85eW8wMUV4ejRjcnhYc3kKK3RBbG5ESk0rK25aY20wN3J0RmpUS0hVZktZL2NDZ05UYTh1ZE0wc3ZuZndsaWQvZHBnTHNJMzhneDA0SEhDMWkKK0VaNGFjeitUb0lXZWRMeE0wbnE3My8veGVSV0Vhek92Q3oxbU1UWmFNbGRhaFRXQXl6TjhxVksyQi82MjVZeTQKK3dOWVd5d2VCQndFQjhNemFDczczc3Brc1hPc0NnWUVBNS83d3ZoaW9mWUdGQWZNdUFOZUpJd0RMMk90Qm5vT3YKK21WTmZDbWkzR0MzOGZ6d3lpNVpwc2tXRGlTMndvSitMUWZzOVF1NEVjWmJVRkxkN2diZU92YjVnbUZVdFlvcGUKK0xpdFVVS3VuSVIxOE1rUSttUURCcFFQUVBoazRRSlA1cmVDYldrcmZUdTdiNW8vaVM0MXM2ZkJURm11emhMY1QKK0M3MXZGZEN5ZUtjQ2dZQWlDQ3FZZU90RUxEbUJPZUxEbWFDUVJxR1ExTjk2ZE9QYkNCbUYveFlYQkNDRFlHL2YKK0hhVWFKbno5NllUZ3N0c2JjcllQL3AvUWdxdGxidy9sUWY5SXB3TXV6YmNHMWVqdDhnODlPeURXTnl0Mnl0Z1UKK2lhVW5GSkNvczMvQnloMElhaC9Cc2RPdWVvMi9PSmwyWk1PQlc4MG9ybFNndjg2Y3MyeTAzN1RMNHdLQmdRRG0KK09PeVcrTWxib3dobkl2Zm9CZndsTEVrZWZuZWo0bktENldSTFpCY3VlNVF5ZjM1NVgwNk1oc2M5Zm9YbEgrNkcKK0Q5aC9ic3dpSE5kaHA2TjgycmRnUEdpSFF4L0N4aVVvRS8rYi9udmdOTzVtdzZxTEUyRVhiRzFlOHBBTUpjeUUKK2JIdytZa2F3Z2dEZkVMSTAzNmZSajVna2k4U2VVejhuUzFuTmdFbGJ5UUtCZ0NSRFg5SmgrTXdTTHU0UUJXZHQKKy9maStsdjNLNmt1bi9mSTdFT1YxdkNWL2o4NzF0SUN1N3B1NUJyT0x4QUhxb1ZmVTlBVVgyOTkvMktqQ2I1cHYKK2tqb2dpVUs2cVdDV0JsZnVxRE5XR0NvVUd0MXJoem5VdmEwbk5qU015NXJpbkJoaGpwUk9aQzJwdzQ4bE9sdVAKK1V1dlhzYVBwaDdHVHFQdXk0S2FiMTJZQworLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVncnRlc3QucHkgYi9MaWIvdGVzdC9yZWdydGVzdC5weQppbmRleCBhZTYyYzZlLi5jMWM4MzFmIDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZWdydGVzdC5weQorKysgYi9MaWIvdGVzdC9yZWdydGVzdC5weQpAQCAtMSwxMSArMSwxOCBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiCi1Vc2FnZToKK1NjcmlwdCB0byBydW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuCiAKK1J1biB0aGlzIHNjcmlwdCB3aXRoIC1oIG9yIC0taGVscCBmb3IgZG9jdW1lbnRhdGlvbi4KKyIiIgorCitVU0FHRSA9ICIiIlwKIHB5dGhvbiAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQogcHl0aG9uIHBhdGgvdG8vTGliL3Rlc3QvcmVncnRlc3QucHkgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCisiIiIKIAorREVTQ1JJUFRJT04gPSAiIiJcCitSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuCiAKIElmIG5vIGFyZ3VtZW50cyBvciBvcHRpb25zIGFyZSBwcm92aWRlZCwgZmluZHMgYWxsIGZpbGVzIG1hdGNoaW5nCiB0aGUgcGF0dGVybiAidGVzdF8qIiBpbiB0aGUgTGliL3Rlc3Qgc3ViZGlyZWN0b3J5IGFuZCBydW5zCkBAIC0xNSw2MyArMjIsMTAgQEAKIGNvbW1hbmQgbGluZToKIAogcHl0aG9uIC1FIC1XZCAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSAuLi5dCisiIiIKIAotCi1PcHRpb25zOgotCi0taC8tLWhlbHAgICAgICAgLS0gcHJpbnQgdGhpcyB0ZXh0IGFuZCBleGl0Ci0tLXRpbWVvdXQgVElNRU9VVAotICAgICAgICAgICAgICAgIC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZQotICAgICAgICAgICAgICAgICAgIHRoYW4gVElNRU9VVCBzZWNvbmRzOyBkaXNhYmxlZCBpZiBUSU1FT1VUIGlzIG5lZ2F0aXZlCi0gICAgICAgICAgICAgICAgICAgb3IgZXF1YWxzIHRvIHplcm8KLS0td2FpdCAgICAgICAgICAtLSB3YWl0IGZvciB1c2VyIGlucHV0LCBlLmcuLCBhbGxvdyBhIGRlYnVnZ2VyIHRvIGJlIGF0dGFjaGVkCi0KLVZlcmJvc2l0eQotCi0tdi8tLXZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKLS13Ly0tdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQotLVcvLS12ZXJib3NlMyAgIC0tIGRpc3BsYXkgdGVzdCBvdXRwdXQgb24gZmFpbHVyZQotLWQvLS1kZWJ1ZyAgICAgIC0tIHByaW50IHRyYWNlYmFjayBmb3IgZmFpbGVkIHRlc3RzCi0tcS8tLXF1aWV0ICAgICAgLS0gbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsCi0tby8tLXNsb3cgICAgICAgLS0gcHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMKLSAgIC0taGVhZGVyICAgICAtLSBwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvCi0KLVNlbGVjdGluZyB0ZXN0cwotCi0tci8tLXJhbmRvbWl6ZSAgLS0gcmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyIChzZWUgYmVsb3cpCi0gICAtLXJhbmRzZWVkICAgLS0gcGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzIHJhbmRvbSBydW4KLS1mLy0tZnJvbWZpbGUgICAtLSByZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZSAoc2VlIGJlbG93KQotLXgvLS1leGNsdWRlICAgIC0tIGFyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqCi0tcy8tLXNpbmdsZSAgICAgLS0gc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cyAoc2VlIGJlbG93KQotLW0vLS1tYXRjaCBQQVQgIC0tIG1hdGNoIHRlc3QgY2FzZXMgYW5kIG1ldGhvZHMgd2l0aCBnbG9iIHBhdHRlcm4gUEFUCi0tRy8tLWZhaWxmYXN0ICAgLS0gZmFpbCBhcyBzb29uIGFzIGEgdGVzdCBmYWlscyAob25seSB3aXRoIC12IG9yIC1XKQotLXUvLS11c2UgUkVTMSxSRVMyLC4uLgotICAgICAgICAgICAgICAgIC0tIHNwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgdG8gcnVuCi0tTS8tLW1lbWxpbWl0IExJTUlUCi0gICAgICAgICAgICAgICAgLS0gcnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cwotICAgLS10ZXN0ZGlyIERJUgotICAgICAgICAgICAgICAgIC0tIGV4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAoaW5zdGVhZAotICAgICAgICAgICAgICAgICAgIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpCi0KLVNwZWNpYWwgcnVucwotCi0tbC8tLWZpbmRsZWFrcyAgLS0gaWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5Ci0tTC8tLXJ1bmxlYWtzICAgLS0gcnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQKLS1SLy0taHVudHJsZWFrcyBSVU5DT1VOVFMKLSAgICAgICAgICAgICAgICAtLSBzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsIHYuIHNsb3cpCi0tai8tLW11bHRpcHJvY2VzcyBQUk9DRVNTRVMKLSAgICAgICAgICAgICAgICAtLSBydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlCi0tVC8tLWNvdmVyYWdlICAgLS0gdHVybiBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgdXNpbmcgdGhlIHRyYWNlIG1vZHVsZQotLUQvLS1jb3ZlcmRpciBESVJFQ1RPUlkKLSAgICAgICAgICAgICAgICAtLSBEaXJlY3Rvcnkgd2hlcmUgY292ZXJhZ2UgZmlsZXMgYXJlIHB1dAotLU4vLS1ub2NvdmVyZGlyIC0tIFB1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcwotLXQvLS10aHJlc2hvbGQgVEhSRVNIT0xECi0gICAgICAgICAgICAgICAgLS0gY2FsbCBnYy5zZXRfdGhyZXNob2xkKFRIUkVTSE9MRCkKLS1uLy0tbm93aW5kb3dzICAtLSBzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGJveGVzIG9uIFdpbmRvd3MKLS1GLy0tZm9yZXZlciAgICAtLSBydW4gdGhlIHNwZWNpZmllZCB0ZXN0cyBpbiBhIGxvb3AsIHVudGlsIGFuIGVycm9yIGhhcHBlbnMKLQotCi1BZGRpdGlvbmFsIE9wdGlvbiBEZXRhaWxzOgorRVBJTE9HID0gIiIiXAorQWRkaXRpb25hbCBvcHRpb24gZGV0YWlsczoKIAogLXIgcmFuZG9taXplcyB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4gWW91IGNhbiB1c2UgLS1yYW5kc2VlZD1pbnQgdG8gcHJvdmlkZSBhCiBpbnQgc2VlZCB2YWx1ZSBmb3IgdGhlIHJhbmRvbWl6ZXI7IHRoaXMgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyB0cm91Ymxlc29tZQpAQCAtMTY4LDExICsxMjIsMTIgQEAKICMgV2UgaW1wb3J0IGltcG9ydGxpYiAqQVNBUCogaW4gb3JkZXIgdG8gdGVzdCAjMTUzODYKIGltcG9ydCBpbXBvcnRsaWIKIAoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBmYXVsdGhhbmRsZXIKLWltcG9ydCBnZXRvcHQKIGltcG9ydCBpbwogaW1wb3J0IGpzb24KK2ltcG9ydCBsb2NhbGUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQpAQCAtMTk0LDcgKzE0OSw3IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcworICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nLCBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKIApAQCAtMjQ2LDIwICsyMDEsMjYyIEBACiBSRVNPVVJDRV9OQU1FUyA9ICgnYXVkaW8nLCAnY3Vyc2VzJywgJ2xhcmdlZmlsZScsICduZXR3b3JrJywKICAgICAgICAgICAgICAgICAgICdkZWNpbWFsJywgJ2NwdScsICdzdWJwcm9jZXNzJywgJ3VybGZldGNoJywgJ2d1aScpCiAKLVRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKQorIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQorIyB0byBrZWVwIHRoZSB0ZXN0IGZpbGVzIGluIGEgc3ViZm9sZGVyLiAgVGhpcyBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgorIyBmaWxlcyB1c2luZyB0aGUgIm1ha2UgZGlzdGNsZWFuIiBjb21tYW5kLgoraWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgIFRFTVBESVIgPSBvcy5wYXRoLmpvaW4oc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKSwgJ2J1aWxkJykKK2Vsc2U6CisgICAgVEVNUERJUiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChURU1QRElSKQogCi1kZWYgdXNhZ2UobXNnKToKLSAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICBwcmludCgiVXNlIC0taGVscCBmb3IgdXNhZ2UiLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgc3lzLmV4aXQoMikKK2NsYXNzIF9BcmdQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgogCisgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzdXBlcigpLmVycm9yKG1lc3NhZ2UgKyAiXG5QYXNzIC1oIG9yIC0taGVscCBmb3IgY29tcGxldGUgaGVscC4iKQogCi1kZWYgbWFpbih0ZXN0cz1Ob25lLCB0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCitkZWYgX2NyZWF0ZV9wYXJzZXIoKToKKyAgICAjIFNldCBwcm9nIHRvIHByZXZlbnQgdGhlIHVuaW5mb3JtYXRpdmUgIl9fbWFpbl9fLnB5IiBmcm9tIGRpc3BsYXlpbmcgaW4KKyAgICAjIGVycm9yIG1lc3NhZ2VzIHdoZW4gdXNpbmcgInB5dGhvbiAtbSB0ZXN0IC4uLiIuCisgICAgcGFyc2VyID0gX0FyZ1BhcnNlcihwcm9nPSdyZWdydGVzdC5weScsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT1VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPUVQSUxPRywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcikKKworICAgICMgQXJndW1lbnRzIHdpdGggdGhpcyBjbGF1c2UgYWRkZWQgdG8gaXRzIGhlbHAgYXJlIGRlc2NyaWJlZCBmdXJ0aGVyIGluCisgICAgIyB0aGUgZXBpbG9nJ3MgIkFkZGl0aW9uYWwgb3B0aW9uIGRldGFpbHMiIHNlY3Rpb24uCisgICAgbW9yZV9kZXRhaWxzID0gJyAgU2VlIHRoZSBzZWN0aW9uIGF0IGJvdHRvbSBmb3IgbW9yZSBkZXRhaWxzLicKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnR2VuZXJhbCBvcHRpb25zJykKKyAgICAjIFdlIGFkZCBoZWxwIGV4cGxpY2l0bHkgdG8gY29udHJvbCB3aGF0IGFyZ3VtZW50IGdyb3VwIGl0IHJlbmRlcnMgdW5kZXIuCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGltZW91dCcsIG1ldGF2YXI9J1RJTUVPVVQnLCB0eXBlPWZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3JlIHRoYW4gVElNRU9VVCBzZWNvbmRzOyBkaXNhYmxlZCBpZiBUSU1FT1VUICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIG5lZ2F0aXZlIG9yIGVxdWFscyB0byB6ZXJvJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0td2FpdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3dhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiZSBhdHRhY2hlZCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNsYXZlYXJncycsIG1ldGF2YXI9J0FSR1MnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVMnLCAnLS1zdGFydCcsIG1ldGF2YXI9J1NUQVJUJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGhlIG5hbWUgb2YgdGhlIHRlc3QgYXQgd2hpY2ggdG8gc3RhcnQuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdWZXJib3NpdHknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdjb3VudCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy13JywgJy0tdmVyYm9zZTInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctVycsICctLXZlcmJvc2UzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1zbG93JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0ncHJpbnRfc2xvdycsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0taGVhZGVyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgaGVhZGVyIHdpdGggaW50ZXJwcmV0ZXIgaW5mbycpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1NlbGVjdGluZyB0ZXN0cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcicsICctLXJhbmRvbWl6ZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1yYW5kc2VlZCcsIG1ldGF2YXI9J1NFRUQnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdyYW5kb21fc2VlZCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyYW5kb20gcnVuJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1mJywgJy0tZnJvbWZpbGUnLCBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leGNsdWRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSonKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zaW5nbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1tJywgJy0tbWF0Y2gnLCBtZXRhdmFyPSdQQVQnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdtYXRjaF90ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21hdGNoIHRlc3QgY2FzZXMgYW5kIG1ldGhvZHMgd2l0aCBnbG9iIHBhdHRlcm4gUEFUJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1HJywgJy0tZmFpbGZhc3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy11JywgJy0tdXNlJywgbWV0YXZhcj0nUkVTMSxSRVMyLC4uLicsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nYXBwZW5kJywgdHlwZT1yZXNvdXJjZXNfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIHJ1bi4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU0nLCAnLS1tZW1saW1pdCcsIG1ldGF2YXI9J0xJTUlUJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cy4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXRlc3RkaXInLCBtZXRhdmFyPSdESVInLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXJlbGF0aXZlX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdleGVjdXRlIHRlc3QgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoaW5zdGVhZCBvZiB0aGUgUHl0aG9uIHN0ZGxpYiB0ZXN0IHN1aXRlKScpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1NwZWNpYWwgcnVucycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbCcsICctLWZpbmRsZWFrcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2lmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTCcsICctLXJ1bmxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVInLCAnLS1odW50cmxlYWtzJywgbWV0YXZhcj0nUlVOQ09VTlRTJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyeSBzbG93KS4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWonLCAnLS1tdWx0aXByb2Nlc3MnLCBtZXRhdmFyPSdQUk9DRVNTRVMnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1c2VfbXAnLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctVCcsICctLWNvdmVyYWdlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndHJhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2R1bGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUQnLCAnLS1jb3ZlcmRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1OJywgJy0tbm9jb3ZlcmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1Ob25lLCBkZXN0PSdjb3ZlcmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3B1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdCcsICctLXRocmVzaG9sZCcsIG1ldGF2YXI9J1RIUkVTSE9MRCcsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbicsICctLW5vd2luZG93cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRicsICctLWZvcmV2ZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIHNwZWNpZmllZCB0ZXN0cyBpbiBhIGxvb3AsIHVudGlsIGFuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3IgaGFwcGVucycpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdhcmdzJywgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKworICAgIHJldHVybiBwYXJzZXIKKworZGVmIHJlbGF0aXZlX2ZpbGVuYW1lKHN0cmluZyk6CisgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQorICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgc3RyaW5nKQorCitkZWYgaHVudHJsZWFrcyhzdHJpbmcpOgorICAgIGFyZ3MgPSBzdHJpbmcuc3BsaXQoJzonKQorICAgIGlmIGxlbihhcmdzKSBub3QgaW4gKDIsIDMpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcigKKyAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgbndhcm11cCA9IGludChhcmdzWzBdKSBpZiBhcmdzWzBdIGVsc2UgNQorICAgIG50cmFja2VkID0gaW50KGFyZ3NbMV0pIGlmIGFyZ3NbMV0gZWxzZSA0CisgICAgZm5hbWUgPSBhcmdzWzJdIGlmIGxlbihhcmdzKSA+IDIgYW5kIGFyZ3NbMl0gZWxzZSAncmVmbG9nLnR4dCcKKyAgICByZXR1cm4gbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lCisKK2RlZiByZXNvdXJjZXNfbGlzdChzdHJpbmcpOgorICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIHN0cmluZy5zcGxpdCgnLCcpXQorICAgIGZvciByIGluIHU6CisgICAgICAgIGlmIHIgPT0gJ2FsbCcgb3IgciA9PSAnbm9uZSc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiByWzBdID09ICctJzoKKyAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKKyAgICAgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCdpbnZhbGlkIHJlc291cmNlOiAnICsgcikKKyAgICByZXR1cm4gdQorCitkZWYgX3BhcnNlX2FyZ3MoYXJncywgKiprd2FyZ3MpOgorICAgICMgRGVmYXVsdHMKKyAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCiAgICAgICAgICBleGNsdWRlPUZhbHNlLCBzaW5nbGU9RmFsc2UsIHJhbmRvbWl6ZT1GYWxzZSwgZnJvbWZpbGU9Tm9uZSwKICAgICAgICAgIGZpbmRsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLCB0cmFjZT1GYWxzZSwgY292ZXJkaXI9J2NvdmVyYWdlJywKICAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSwKICAgICAgICAgIHJhbmRvbV9zZWVkPU5vbmUsIHVzZV9tcD1Ob25lLCB2ZXJib3NlMz1GYWxzZSwgZm9yZXZlcj1GYWxzZSwKLSAgICAgICAgIGhlYWRlcj1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUpOgorICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSkKKyAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIobnMsIGspOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgdGhpcyBmdW5jdGlvbicgJSBrKQorICAgICAgICBzZXRhdHRyKG5zLCBrLCB2KQorICAgIGlmIG5zLnVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgbnMudXNlX3Jlc291cmNlcyA9IFtdCisKKyAgICBwYXJzZXIgPSBfY3JlYXRlX3BhcnNlcigpCisgICAgcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBuYW1lc3BhY2U9bnMpCisKKyAgICBpZiBucy5zaW5nbGUgYW5kIG5zLmZyb21maWxlOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1zIGFuZCAtZiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMudHJhY2U6CisgICAgICAgIHBhcnNlci5lcnJvcigiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy5maW5kbGVha3M6CisgICAgICAgIHBhcnNlci5lcnJvcigiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy5tZW1saW1pdDoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItTSBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy5mYWlsZmFzdCBhbmQgbm90IChucy52ZXJib3NlIG9yIG5zLnZlcmJvc2UzKToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVyIpCisKKyAgICBpZiBucy5xdWlldDoKKyAgICAgICAgbnMudmVyYm9zZSA9IDAKKyAgICBpZiBucy50aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6CisgICAgICAgICAgICBpZiBucy50aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgbnMudGltZW91dCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBUaGUgdGltZW91dCBvcHRpb24gcmVxdWlyZXMgIgorICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlciIpCisgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgIGlmIG5zLnVzZV9tcCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbnMudXNlX21wIDw9IDA6CisgICAgICAgICAgICAjIFVzZSBhbGwgY29yZXMgKyBleHRyYXMgZm9yIHRlc3RzIHRoYXQgbGlrZSB0byBzbGVlcAorICAgICAgICAgICAgbnMudXNlX21wID0gMiArIChvcy5jcHVfY291bnQoKSBvciAxKQorICAgICAgICBpZiBucy51c2VfbXAgPT0gMToKKyAgICAgICAgICAgIG5zLnVzZV9tcCA9IE5vbmUKKyAgICBpZiBucy51c2U6CisgICAgICAgIGZvciBhIGluIG5zLnVzZToKKyAgICAgICAgICAgIGZvciByIGluIGE6CisgICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKKyAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6CisgICAgICAgICAgICAgICAgICAgIGRlbCBucy51c2VfcmVzb3VyY2VzWzpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KKyAgICAgICAgICAgICAgICBpZiByZW1vdmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gbnMudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCisgICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzLmFwcGVuZChyKQorICAgIGlmIG5zLnJhbmRvbV9zZWVkIGlzIG5vdCBOb25lOgorICAgICAgICBucy5yYW5kb21pemUgPSBUcnVlCisKKyAgICByZXR1cm4gbnMKKworCitkZWYgcnVuX3Rlc3RfaW5fc3VicHJvY2Vzcyh0ZXN0bmFtZSwgbnMpOgorICAgICIiIlJ1biB0aGUgZ2l2ZW4gdGVzdCBpbiBhIHN1YnByb2Nlc3Mgd2l0aCAtLXNsYXZlYXJncy4KKworICAgIG5zIGlzIHRoZSBvcHRpb24gTmFtZXNwYWNlIHBhcnNlZCBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuIHJlZ3J0ZXN0CisgICAgaXMgaW52b2tlZCBpbiBhIHN1YnByb2Nlc3Mgd2l0aCB0aGUgLS1zbGF2ZWFyZ3MgYXJndW1lbnQ7IHdoZW4gdGhlCisgICAgc3VicHJvY2VzcyBleGl0cywgaXRzIHJldHVybiBjb2RlLCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgcmV0dXJuZWQgYXMgYQorICAgIDMtdHVwbGUuCisgICAgIiIiCisgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQorICAgIGJhc2VfY21kID0gKFtzeXMuZXhlY3V0YWJsZV0gKyBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpICsKKyAgICAgICAgICAgICAgICBbJy1YJywgJ2ZhdWx0aGFuZGxlcicsICctbScsICd0ZXN0LnJlZ3J0ZXN0J10pCisKKyAgICBzbGF2ZWFyZ3MgPSAoCisgICAgICAgICAgICAodGVzdG5hbWUsIG5zLnZlcmJvc2UsIG5zLnF1aWV0KSwKKyAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1ucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzPW5zLnVzZV9yZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPW5zLnZlcmJvc2UzLAorICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQsIGZhaWxmYXN0PW5zLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykpCisgICAgIyBSdW5uaW5nIHRoZSBjaGlsZCBmcm9tIHRoZSBzYW1lIHdvcmtpbmcgZGlyZWN0b3J5IGFzIHJlZ3J0ZXN0J3Mgb3JpZ2luYWwKKyAgICAjIGludm9jYXRpb24gZW5zdXJlcyB0aGF0IFRFTVBESVIgZm9yIHRoZSBjaGlsZCBpcyB0aGUgc2FtZSB3aGVuCisgICAgIyBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCkgaXMgdHJ1ZS4gU2VlIGlzc3VlIDE1MzAwLgorICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhzbGF2ZWFyZ3MpXSwKKyAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKKyAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAorICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPShvcy5uYW1lICE9ICdudCcpLAorICAgICAgICAgICAgICAgICAgY3dkPXN1cHBvcnQuU0FWRURDV0QpCisgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHBvcGVuLndhaXQoKQorICAgIHJldHVybiByZXRjb2RlLCBzdGRvdXQsIHN0ZGVycgorCisKK2RlZiBtYWluKHRlc3RzPU5vbmUsICoqa3dhcmdzKToKICAgICAiIiJFeGVjdXRlIGEgdGVzdCBzdWl0ZS4KIAogICAgIFRoaXMgYWxzbyBwYXJzZXMgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIG1vZGlmaWVzIGl0cyBiZWhhdmlvcgpAQCAtMjgyLDcgKzQ3OSw2IEBACiAgICAgZGlyZWN0bHkgdG8gc2V0IHRoZSB2YWx1ZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBzZXQgYnkgZmxhZ3MKICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLgogICAgICIiIgotCiAgICAgIyBEaXNwbGF5IHRoZSBQeXRob24gdHJhY2ViYWNrIG9uIGZhdGFsIGVycm9ycyAoZS5nLiBzZWdmYXVsdCkKICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKGFsbF90aHJlYWRzPVRydWUpCiAKQEAgLTI5OCwxODcgKzQ5NCw1MSBAQAogICAgIHJlcGxhY2Vfc3Rkb3V0KCkKIAogICAgIHN1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dChzeXMuc3Rkb3V0KQotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHZxeHNvUzpyZjpsdTp0OlREOk5MUjpGZHdXTTpuajpHbTonLAotICAgICAgICAgICAgWydoZWxwJywgJ3ZlcmJvc2UnLCAndmVyYm9zZTInLCAndmVyYm9zZTMnLCAncXVpZXQnLAotICAgICAgICAgICAgICdleGNsdWRlJywgJ3NpbmdsZScsICdzbG93JywgJ3JhbmRvbWl6ZScsICdmcm9tZmlsZT0nLCAnZmluZGxlYWtzJywKLSAgICAgICAgICAgICAndXNlPScsICd0aHJlc2hvbGQ9JywgJ2NvdmVyZGlyPScsICdub2NvdmVyZGlyJywKLSAgICAgICAgICAgICAncnVubGVha3MnLCAnaHVudHJsZWFrcz0nLCAnbWVtbGltaXQ9JywgJ3JhbmRzZWVkPScsCi0gICAgICAgICAgICAgJ211bHRpcHJvY2Vzcz0nLCAnY292ZXJhZ2UnLCAnc2xhdmVhcmdzPScsICdmb3JldmVyJywgJ2RlYnVnJywKLSAgICAgICAgICAgICAnc3RhcnQ9JywgJ25vd2luZG93cycsICdoZWFkZXInLCAndGVzdGRpcj0nLCAndGltZW91dD0nLCAnd2FpdCcsCi0gICAgICAgICAgICAgJ2ZhaWxmYXN0JywgJ21hdGNoPSddKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICB1c2FnZShtc2cpCiAKLSAgICAjIERlZmF1bHRzCi0gICAgaWYgcmFuZG9tX3NlZWQgaXMgTm9uZToKLSAgICAgICAgcmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQotICAgIGlmIHVzZV9yZXNvdXJjZXMgaXMgTm9uZToKLSAgICAgICAgdXNlX3Jlc291cmNlcyA9IFtdCi0gICAgZGVidWcgPSBGYWxzZQotICAgIHN0YXJ0ID0gTm9uZQotICAgIHRpbWVvdXQgPSBOb25lCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyBpbiAoJy1oJywgJy0taGVscCcpOgotICAgICAgICAgICAgcHJpbnQoX19kb2NfXykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKLSAgICAgICAgICAgIHZlcmJvc2UgKz0gMQotICAgICAgICBlbGlmIG8gaW4gKCctdycsICctLXZlcmJvc2UyJyk6Ci0gICAgICAgICAgICB2ZXJib3NlMiA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLWQnLCAnLS1kZWJ1ZycpOgotICAgICAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1XJywgJy0tdmVyYm9zZTMnKToKLSAgICAgICAgICAgIHZlcmJvc2UzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctRycsICctLWZhaWxmYXN0Jyk6Ci0gICAgICAgICAgICBmYWlsZmFzdCA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXEnLCAnLS1xdWlldCcpOgotICAgICAgICAgICAgcXVpZXQgPSBUcnVlOwotICAgICAgICAgICAgdmVyYm9zZSA9IDAKLSAgICAgICAgZWxpZiBvIGluICgnLXgnLCAnLS1leGNsdWRlJyk6Ci0gICAgICAgICAgICBleGNsdWRlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctUycsICctLXN0YXJ0Jyk6Ci0gICAgICAgICAgICBzdGFydCA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLXMnLCAnLS1zaW5nbGUnKToKLSAgICAgICAgICAgIHNpbmdsZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLW8nLCAnLS1zbG93Jyk6Ci0gICAgICAgICAgICBwcmludF9zbG93ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcicsICctLXJhbmRvbWl6ZScpOgotICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tcmFuZHNlZWQnOgotICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQotICAgICAgICAgICAgcmFuZG9tX3NlZWQgPSBpbnQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLWYnLCAnLS1mcm9tZmlsZScpOgotICAgICAgICAgICAgZnJvbWZpbGUgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1tJywgJy0tbWF0Y2gnKToKLSAgICAgICAgICAgIG1hdGNoX3Rlc3RzID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctbCcsICctLWZpbmRsZWFrcycpOgotICAgICAgICAgICAgZmluZGxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctTCcsICctLXJ1bmxlYWtzJyk6Ci0gICAgICAgICAgICBydW5sZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXQnLCAnLS10aHJlc2hvbGQnKToKLSAgICAgICAgICAgIGltcG9ydCBnYwotICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZChpbnQoYSkpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1UJywgJy0tY292ZXJhZ2UnKToKLSAgICAgICAgICAgIHRyYWNlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctRCcsICctLWNvdmVyZGlyJyk6Ci0gICAgICAgICAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCi0gICAgICAgICAgICAjIG5lZWQgIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGdvZXMgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KLSAgICAgICAgICAgIGNvdmVyZGlyID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1OJywgJy0tbm9jb3ZlcmRpcicpOgotICAgICAgICAgICAgY292ZXJkaXIgPSBOb25lCi0gICAgICAgIGVsaWYgbyBpbiAoJy1SJywgJy0taHVudHJsZWFrcycpOgotICAgICAgICAgICAgaHVudHJsZWFrcyA9IGEuc3BsaXQoJzonKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpIG5vdCBpbiAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoYSwgaHVudHJsZWFrcykKLSAgICAgICAgICAgICAgICB1c2FnZSgnLVIgdGFrZXMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQotICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMF06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IDUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IGludChodW50cmxlYWtzWzBdKQotICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMV06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IDQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IGludChodW50cmxlYWtzWzFdKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpID09IDIgb3Igbm90IGh1bnRybGVha3NbMl06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1syOl0gPSBbInJlZmxvZy50eHQiXQotICAgICAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCi0gICAgICAgICAgICAjIGZpbGxpbmcgc2xvd2x5IHdpdGggcmFuZG9tIGRhdGE6Ci0gICAgICAgICAgICB3YXJtX2NhY2hlcygpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1NJywgJy0tbWVtbGltaXQnKToKLSAgICAgICAgICAgIHN1cHBvcnQuc2V0X21lbWxpbWl0KGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy11JywgJy0tdXNlJyk6Ci0gICAgICAgICAgICB1ID0gW3gubG93ZXIoKSBmb3IgeCBpbiBhLnNwbGl0KCcsJyldCi0gICAgICAgICAgICBmb3IgciBpbiB1OgotICAgICAgICAgICAgICAgIGlmIHIgPT0gJ2FsbCc6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXNbOl0gPSBSRVNPVVJDRV9OQU1FUwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIHIgPT0gJ25vbmUnOgotICAgICAgICAgICAgICAgICAgICBkZWwgdXNlX3Jlc291cmNlc1s6XQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHJlbW92ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgaWYgclswXSA9PSAnLSc6Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgciA9IHJbMTpdCi0gICAgICAgICAgICAgICAgaWYgciBub3QgaW4gUkVTT1VSQ0VfTkFNRVM6Ci0gICAgICAgICAgICAgICAgICAgIHVzYWdlKCdJbnZhbGlkIC11Ly0tdXNlIG9wdGlvbjogJyArIGEpCi0gICAgICAgICAgICAgICAgaWYgcmVtb3ZlOgotICAgICAgICAgICAgICAgICAgICBpZiByIGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLnJlbW92ZShyKQotICAgICAgICAgICAgICAgIGVsaWYgciBub3QgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5hcHBlbmQocikKLSAgICAgICAgZWxpZiBvIGluICgnLW4nLCAnLS1ub3dpbmRvd3MnKToKLSAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIG1zdmNydC5TZXRFcnJvck1vZGUobXN2Y3J0LlNFTV9GQUlMQ1JJVElDQUxFUlJPUlN8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVHwKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT09QRU5GSUxFRVJST1JCT1gpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIHJlbGVhc2UgYnVpbGQKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBtIGluIFttc3ZjcnQuQ1JUX1dBUk4sIG1zdmNydC5DUlRfRVJST1IsIG1zdmNydC5DUlRfQVNTRVJUXToKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUobSwgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCi0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1GJywgJy0tZm9yZXZlcicpOgotICAgICAgICAgICAgZm9yZXZlciA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLWonLCAnLS1tdWx0aXByb2Nlc3MnKToKLSAgICAgICAgICAgIHVzZV9tcCA9IGludChhKQotICAgICAgICAgICAgaWYgdXNlX21wIDw9IDA6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCi0gICAgICAgICAgICAgICAgICAgIHVzZV9tcCA9IDIgKyBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMwotICAgICAgICAgICAgaWYgdXNlX21wID09IDE6Ci0gICAgICAgICAgICAgICAgdXNlX21wID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0taGVhZGVyJzoKLSAgICAgICAgICAgIGhlYWRlciA9IFRydWUKLSAgICAgICAgZWxpZiBvID09ICctLXNsYXZlYXJncyc6Ci0gICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKGEpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gSU5URVJSVVBURUQsICcnCi0gICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IENISUxEX0VSUk9SLCBzdHIoZSkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCi0gICAgICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdCkpCi0gICAgICAgICAgICBzeXMuZXhpdCgwKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGVzdGRpcic6Ci0gICAgICAgICAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCi0gICAgICAgICAgICAjIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGVuZHMgdXAgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KLSAgICAgICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvID09ICctLXRpbWVvdXQnOgotICAgICAgICAgICAgaWYgaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBmbG9hdChhKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMDoKLSAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlciIpCi0gICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKLSAgICAgICAgZWxpZiBvID09ICctLXdhaXQnOgotICAgICAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorICAgIG5zID0gX3BhcnNlX2FyZ3Moc3lzLmFyZ3ZbMTpdLCAqKmt3YXJncykKKworICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgICMgQXZvaWQgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byB2YXJpb3VzIGNhY2hlcworICAgICAgICAjIGZpbGxpbmcgc2xvd2x5IHdpdGggcmFuZG9tIGRhdGE6CisgICAgICAgIHdhcm1fY2FjaGVzKCkKKyAgICBpZiBucy5tZW1saW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQobnMubWVtbGltaXQpCisgICAgaWYgbnMudGhyZXNob2xkIGlzIG5vdCBOb25lOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZChucy50aHJlc2hvbGQpCisgICAgaWYgbnMubm93aW5kb3dzOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIG1zdmNydC5TZXRFcnJvck1vZGUobXN2Y3J0LlNFTV9GQUlMQ1JJVElDQUxFUlJPUlN8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9HUEZBVUxURVJST1JCT1h8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT09QRU5GSUxFRVJST1JCT1gpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAorICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoKCJObyBoYW5kbGVyIGZvciBvcHRpb24ge30uICBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWcgIgotICAgICAgICAgICAgICAgICAgICJhdCBodHRwOi8vYnVncy5weXRob24ub3JnLiIpLmZvcm1hdChvKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBpZiBzaW5nbGUgYW5kIGZyb21maWxlOgotICAgICAgICB1c2FnZSgiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCB0cmFjZToKLSAgICAgICAgdXNhZ2UoIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgZmluZGxlYWtzOgotICAgICAgICB1c2FnZSgiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBzdXBwb3J0Lm1heF9tZW11c2U6Ci0gICAgICAgIHVzYWdlKCItTSBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiBmYWlsZmFzdCBhbmQgbm90ICh2ZXJib3NlIG9yIHZlcmJvc2UzKToKLSAgICAgICAgdXNhZ2UoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKyAgICAgICAgICAgIGZvciBtIGluIFttc3ZjcnQuQ1JUX1dBUk4sIG1zdmNydC5DUlRfRVJST1IsIG1zdmNydC5DUlRfQVNTRVJUXToKKyAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKKyAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0RmlsZShtLCBtc3ZjcnQuQ1JUREJHX0ZJTEVfU1RERVJSKQorICAgIGlmIG5zLndhaXQ6CisgICAgICAgIGlucHV0KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKKworICAgIGlmIG5zLnNsYXZlYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgYXJncywga3dhcmdzID0ganNvbi5sb2Fkcyhucy5zbGF2ZWFyZ3MpCisgICAgICAgIGlmIGt3YXJncy5nZXQoJ2h1bnRybGVha3MnKToKKyAgICAgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmVzdWx0ID0gSU5URVJSVVBURUQsICcnCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IENISUxEX0VSUk9SLCBzdHIoZSkKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHByaW50KCkgICAjIEZvcmNlIGEgbmV3bGluZSAoanVzdCBpbiBjYXNlKQorICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdCkpCisgICAgICAgIHN5cy5leGl0KDApCiAKICAgICBnb29kID0gW10KICAgICBiYWQgPSBbXQpAQCAtNDg3LDEyICs1NDcsMTIgQEAKICAgICBlbnZpcm9ubWVudF9jaGFuZ2VkID0gW10KICAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCiAKLSAgICBpZiBmaW5kbGVha3M6CisgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ05vIEdDIGF2YWlsYWJsZSwgZGlzYWJsaW5nIGZpbmRsZWFrcy4nKQotICAgICAgICAgICAgZmluZGxlYWtzID0gRmFsc2UKKyAgICAgICAgICAgIG5zLmZpbmRsZWFrcyA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyB0byByZXBvcnQgZ2FyYmFnZSB0aGF0IGlzIG5vdAogICAgICAgICAgICAgIyBmcmVlYWJsZSBieSByZWZlcmVuY2UgY291bnRpbmcgYWxvbmUuICBCeSBkZWZhdWx0IG9ubHkKQEAgLTUwMCw4MiArNTYwLDg3IEBACiAgICAgICAgICAgICAjZ2Muc2V0X2RlYnVnKGdjLkRFQlVHX1NBVkVBTEwpCiAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlID0gW10KIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5odW50cmxlYWtzOgorICAgICAgICB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwID0gRmFsc2UKKworICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgJ3B5bmV4dHRlc3QnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCi0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF90ZXN0XQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGlmIGZyb21maWxlOgorICAgIGlmIG5zLmZyb21maWxlOgogICAgICAgICB0ZXN0cyA9IFtdCi0gICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgZnJvbWZpbGUpKQotICAgICAgICBjb3VudF9wYXQgPSByZS5jb21waWxlKHInXFtccypcZCsvXHMqXGQrXF0nKQotICAgICAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgIGxpbmUgPSBjb3VudF9wYXQuc3ViKCcnLCBsaW5lKQotICAgICAgICAgICAgZ3V0cyA9IGxpbmUuc3BsaXQoKSAjIGFzc3VtaW5nIG5vIHRlc3QgaGFzIHdoaXRlc3BhY2UgaW4gaXRzIG5hbWUKLSAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoZ3V0cykKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIG5zLmZyb21maWxlKSkgYXMgZnA6CisgICAgICAgICAgICBjb3VudF9wYXQgPSByZS5jb21waWxlKHInXFtccypcZCsvXHMqXGQrXF0nKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCisgICAgICAgICAgICAgICAgZ3V0cyA9IGxpbmUuc3BsaXQoKSAjIGFzc3VtaW5nIG5vIHRlc3QgaGFzIHdoaXRlc3BhY2UgaW4gaXRzIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQogCiAgICAgIyBTdHJpcCAucHkgZXh0ZW5zaW9ucy4KLSAgICByZW1vdmVweShhcmdzKQorICAgIHJlbW92ZXB5KG5zLmFyZ3MpCiAgICAgcmVtb3ZlcHkodGVzdHMpCiAKICAgICBzdGR0ZXN0cyA9IFNURFRFU1RTWzpdCiAgICAgbm90dGVzdHMgPSBOT1RURVNUUy5jb3B5KCkKLSAgICBpZiBleGNsdWRlOgotICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgaWYgbnMuZXhjbHVkZToKKyAgICAgICAgZm9yIGFyZyBpbiBucy5hcmdzOgogICAgICAgICAgICAgaWYgYXJnIGluIHN0ZHRlc3RzOgogICAgICAgICAgICAgICAgIHN0ZHRlc3RzLnJlbW92ZShhcmcpCiAgICAgICAgICAgICBub3R0ZXN0cy5hZGQoYXJnKQotICAgICAgICBhcmdzID0gW10KKyAgICAgICAgbnMuYXJncyA9IFtdCiAKICAgICAjIEZvciBhIHBhcnRpYWwgcnVuLCB3ZSBkbyBub3QgbmVlZCB0byBjbHV0dGVyIHRoZSBvdXRwdXQuCi0gICAgaWYgdmVyYm9zZSBvciBoZWFkZXIgb3Igbm90IChxdWlldCBvciBzaW5nbGUgb3IgdGVzdHMgb3IgYXJncyk6CisgICAgaWYgbnMudmVyYm9zZSBvciBucy5oZWFkZXIgb3Igbm90IChucy5xdWlldCBvciBucy5zaW5nbGUgb3IgdGVzdHMgb3IgbnMuYXJncyk6CiAgICAgICAgICMgUHJpbnQgYmFzaWMgcGxhdGZvcm0gaW5mb3JtYXRpb24KICAgICAgICAgcHJpbnQoIj09IiwgcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksICpzeXMudmVyc2lvbi5zcGxpdCgpKQogICAgICAgICBwcmludCgiPT0gICIsIHBsYXRmb3JtLnBsYXRmb3JtKGFsaWFzZWQ9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgIiVzLWVuZGlhbiIgJSBzeXMuYnl0ZW9yZGVyKQorICAgICAgICBwcmludCgiPT0gICIsICJoYXNoIGFsZ29yaXRobToiLCBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwKKyAgICAgICAgICAgICAgIjY0Yml0IiBpZiBzeXMubWF4c2l6ZSA+IDIqKjMyIGVsc2UgIjMyYml0IikKICAgICAgICAgcHJpbnQoIj09ICAiLCBvcy5nZXRjd2QoKSkKICAgICAgICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MpCiAKICAgICAjIGlmIHRlc3RkaXIgaXMgc2V0LCB0aGVuIHdlIGFyZSBub3QgcnVubmluZyB0aGUgcHl0aG9uIHRlc3RzIHN1aXRlLCBzbwogICAgICMgZG9uJ3QgYWRkIGRlZmF1bHQgdGVzdHMgdG8gYmUgZXhlY3V0ZWQgb3Igc2tpcHBlZCAocGFzcyBlbXB0eSB2YWx1ZXMpCi0gICAgaWYgdGVzdGRpcjoKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgbGlzdCgpLCBzZXQoKSkKKyAgICBpZiBucy50ZXN0ZGlyOgorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQogICAgIGVsc2U6Ci0gICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKyAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHMobnMudGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQogCi0gICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBhcmdzIG9yIGFsbHRlc3RzCi0gICAgaWYgc2luZ2xlOgorICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgbnMuYXJncyBvciBhbGx0ZXN0cworICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFs6MV0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IGFsbHRlc3RzW2FsbHRlc3RzLmluZGV4KHNlbGVjdGVkWzBdKSsxXQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBOb25lCiAgICAgIyBSZW1vdmUgYWxsIHRoZSBzZWxlY3RlZCB0ZXN0cyB0aGF0IHByZWNlZGUgc3RhcnQgaWYgaXQncyBzZXQuCi0gICAgaWYgc3RhcnQ6CisgICAgaWYgbnMuc3RhcnQ6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxlY3RlZFs6c2VsZWN0ZWQuaW5kZXgoc3RhcnQpXQorICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChucy5zdGFydCldCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgc3RhcnRpbmcgdGVzdCAoJXMpLCB1c2luZyBhbGwgdGVzdHMiICUgc3RhcnQpCi0gICAgaWYgcmFuZG9taXplOgotICAgICAgICByYW5kb20uc2VlZChyYW5kb21fc2VlZCkKLSAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgcmFuZG9tX3NlZWQpCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBucy5zdGFydCkKKyAgICBpZiBucy5yYW5kb21pemU6CisgICAgICAgIGlmIG5zLnJhbmRvbV9zZWVkIGlzIE5vbmU6CisgICAgICAgICAgICBucy5yYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCisgICAgICAgIHJhbmRvbS5zZWVkKG5zLnJhbmRvbV9zZWVkKQorICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCBucy5yYW5kb21fc2VlZCkKICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZWN0ZWQpCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIGltcG9ydCB0cmFjZSwgdGVtcGZpbGUKICAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLmJhc2VfcHJlZml4LCBzeXMuYmFzZV9leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuZ2V0dGVtcGRpcigpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9RmFsc2UsIGNvdW50PVRydWUpCiAKICAgICB0ZXN0X3RpbWVzID0gW10KLSAgICBzdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCisgICAgc3VwcG9ydC52ZXJib3NlID0gbnMudmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CisgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gbnMudXNlX3Jlc291cmNlcwogICAgIHNhdmVfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmtleXMoKQogCiAgICAgZGVmIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCk6CkBAIC01OTMsNyArNjU4LDcgQEAKICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCiAgICAgICAgICAgICByZXNvdXJjZV9kZW5pZWRzLmFwcGVuZCh0ZXN0KQogCi0gICAgaWYgZm9yZXZlcjoKKyAgICBpZiBucy5mb3JldmVyOgogICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CkBAIC02MDgsMTkgKzY3MywxNiBAQAogICAgICAgICB0ZXN0X2NvdW50ID0gJy97fScuZm9ybWF0KGxlbihzZWxlY3RlZCkpCiAgICAgICAgIHRlc3RfY291bnRfd2lkdGggPSBsZW4odGVzdF9jb3VudCkgLSAxCiAKLSAgICBpZiB1c2VfbXA6CisgICAgaWYgbnMudXNlX21wOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJNdWx0aXByb2Nlc3Mgb3B0aW9uIHJlcXVpcmVzIHRocmVhZCBzdXBwb3J0IikKICAgICAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgICAgIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCi0gICAgICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKLSAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzXF0kIikKKyAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0kIikKICAgICAgICAgb3V0cHV0ID0gUXVldWUoKQogICAgICAgICBwZW5kaW5nID0gTXVsdGlwcm9jZXNzVGVzdHModGVzdHMpCi0gICAgICAgIG9wdF9hcmdzID0gc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQotICAgICAgICBiYXNlX2NtZCA9IFtzeXMuZXhlY3V0YWJsZV0gKyBvcHRfYXJncyArIFsnLW0nLCAndGVzdC5yZWdydGVzdCddCiAgICAgICAgIGRlZiB3b3JrKCk6CiAgICAgICAgICAgICAjIEEgd29ya2VyIHRocmVhZC4KICAgICAgICAgICAgIHRyeToKQEAgLTYzMCwyNCArNjkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICBhcmdzX3R1cGxlID0gKAotICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIHZlcmJvc2UsIHF1aWV0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1odW50cmxlYWtzLCB1c2VfcmVzb3VyY2VzPXVzZV9yZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPWRlYnVnLCBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bWF0Y2hfdGVzdHMpCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgIyAtRSBpcyBuZWVkZWQgYnkgc29tZSB0ZXN0cywgZS5nLiB0ZXN0X2ltcG9ydAotICAgICAgICAgICAgICAgICAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgZW5zdXJlcwotICAgICAgICAgICAgICAgICAgICAjIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgIyBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCkgaXMgdHJ1ZS4gU2VlIGlzc3VlIDE1MzAwLgotICAgICAgICAgICAgICAgICAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoYXJnc190dXBsZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zdXBwb3J0LlNBVkVEQ1dEKQotICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSA9IHBvcGVuLndhaXQoKQorICAgICAgICAgICAgICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHJ1bl90ZXN0X2luX3N1YnByb2Nlc3ModGVzdCwgbnMpCiAgICAgICAgICAgICAgICAgICAgICMgU3RyaXAgbGFzdCByZWZjb3VudCBvdXRwdXQgbGluZSBpZiBpdCBleGlzdHMsIHNpbmNlIGl0CiAgICAgICAgICAgICAgICAgICAgICMgY29tZXMgZnJvbSB0aGUgc2h1dGRvd24gb2YgdGhlIGludGVycHJldGVyIGluIHRoZSBzdWJjb21tYW5kLgogICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBkZWJ1Z19vdXRwdXRfcGF0LnN1YigiIiwgc3RkZXJyKQpAQCAtNjY0LDE5ICs3MDksMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZSh1c2VfbXApXQorICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UobnMudXNlX21wKV0KICAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgogICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKICAgICAgICAgZmluaXNoZWQgPSAwCiAgICAgICAgIHRlc3RfaW5kZXggPSAxCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgdXNlX21wOgorICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCBucy51c2VfbXA6CiAgICAgICAgICAgICAgICAgdGVzdCwgc3Rkb3V0LCBzdGRlcnIsIHJlc3VsdCA9IG91dHB1dC5nZXQoKQogICAgICAgICAgICAgICAgIGlmIHRlc3QgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgKz0gMQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwKQEAgLTY5OSwyOSArNzQ0LDMwIEBACiAgICAgICAgICAgICB3b3JrZXIuam9pbigpCiAgICAgZWxzZToKICAgICAgICAgZm9yIHRlc3RfaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHRlc3RzLCAxKToKLSAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfd2lkdGgsIHRlc3RfaW5kZXgsIHRlc3RfY291bnQsIGxlbihiYWQpLCB0ZXN0KSkKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHRyYWNlOgorICAgICAgICAgICAgaWYgbnMudHJhY2U6CiAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwogICAgICAgICAgICAgICAgICMgaWYgb24gYSBmYWxzZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluLgotICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIHRpbWVvdXQ9dGltZW91dCknLAorICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgbnMudmVyYm9zZSwgbnMucXVpZXQsIHRpbWVvdXQ9bnMudGltZW91dCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9dmVyYm9zZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPW5zLnZlcmJvc2UzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpCiAgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgICAgIGlmIG5zLmZpbmRsZWFrczoKICAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLCBlbmQ9JyAnKQpAQCAtNzQyLDExICs3ODgsMTEgQEAKICAgICAgICAgb21pdHRlZCA9IHNldChzZWxlY3RlZCkgLSBzZXQoZ29vZCkgLSBzZXQoYmFkKSAtIHNldChza2lwcGVkKQogICAgICAgICBwcmludChjb3VudChsZW4ob21pdHRlZCksICJ0ZXN0IiksICJvbWl0dGVkOiIpCiAgICAgICAgIHByaW50bGlzdChvbWl0dGVkKQotICAgIGlmIGdvb2QgYW5kIG5vdCBxdWlldDoKKyAgICBpZiBnb29kIGFuZCBub3QgbnMucXVpZXQ6CiAgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CiAgICAgICAgICAgICBwcmludCgiQWxsIiwgZW5kPScgJykKICAgICAgICAgcHJpbnQoY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIikKLSAgICBpZiBwcmludF9zbG93OgorICAgIGlmIG5zLnByaW50X3Nsb3c6CiAgICAgICAgIHRlc3RfdGltZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIHByaW50KCIxMCBzbG93ZXN0IHRlc3RzOiIpCiAgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKQEAgLTc2MCwzMiArODA2LDE5IEBACiAgICAgICAgIHByaW50KCJ7fSBhbHRlcmVkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQ6Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgIGNvdW50KGxlbihlbnZpcm9ubWVudF9jaGFuZ2VkKSwgInRlc3QiKSkpCiAgICAgICAgIHByaW50bGlzdChlbnZpcm9ubWVudF9jaGFuZ2VkKQotICAgIGlmIHNraXBwZWQgYW5kIG5vdCBxdWlldDoKKyAgICBpZiBza2lwcGVkIGFuZCBub3QgbnMucXVpZXQ6CiAgICAgICAgIHByaW50KGNvdW50KGxlbihza2lwcGVkKSwgInRlc3QiKSwgInNraXBwZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KHNraXBwZWQpCiAKLSAgICAgICAgZSA9IF9FeHBlY3RlZFNraXBzKCkKLSAgICAgICAgcGxhdCA9IHN5cy5wbGF0Zm9ybQotICAgICAgICBpZiBlLmlzdmFsaWQoKToKLSAgICAgICAgICAgIHN1cnByaXNlID0gc2V0KHNraXBwZWQpIC0gZS5nZXRleHBlY3RlZCgpIC0gc2V0KHJlc291cmNlX2RlbmllZHMpCi0gICAgICAgICAgICBpZiBzdXJwcmlzZToKLSAgICAgICAgICAgICAgICBwcmludChjb3VudChsZW4oc3VycHJpc2UpLCAic2tpcCIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgb24iLCBwbGF0ICsgIjoiKQotICAgICAgICAgICAgICAgIHByaW50bGlzdChzdXJwcmlzZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlRob3NlIHNraXBzIGFyZSBhbGwgZXhwZWN0ZWQgb24iLCBwbGF0ICsgIi4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIkFzayBzb21lb25lIHRvIHRlYWNoIHJlZ3J0ZXN0LnB5IGFib3V0IHdoaWNoIHRlc3RzIGFyZSIpCi0gICAgICAgICAgICBwcmludCgiZXhwZWN0ZWQgdG8gZ2V0IHNraXBwZWQgb24iLCBwbGF0ICsgIi4iKQotCi0gICAgaWYgdmVyYm9zZTIgYW5kIGJhZDoKKyAgICBpZiBucy52ZXJib3NlMiBhbmQgYmFkOgogICAgICAgICBwcmludCgiUmUtcnVubmluZyBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIikKICAgICAgICAgZm9yIHRlc3QgaW4gYmFkOgogICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdCkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCi0gICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywgdGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgICAgIG5zLnZlcmJvc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIG5zLnF1aWV0LCBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQpCiAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgIyBwcmludCBhIG5ld2xpbmUgc2VwYXJhdGUgZnJvbSB0aGUgXkMKICAgICAgICAgICAgICAgICBwcmludCgpCkBAIC03OTMsMTggKzgyNiwxOCBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHJhaXNlCiAKLSAgICBpZiBzaW5nbGU6CisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBpZiBuZXh0X3NpbmdsZV90ZXN0OgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZwOgogICAgICAgICAgICAgICAgIGZwLndyaXRlKG5leHRfc2luZ2xlX3Rlc3QgKyAnXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQogCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCi0gICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1jb3ZlcmRpcikKKyAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPW5zLmNvdmVyZGlyKQogCi0gICAgaWYgcnVubGVha3M6CisgICAgaWYgbnMucnVubGVha3M6CiAgICAgICAgIG9zLnN5c3RlbSgibGVha3MgJWQiICUgb3MuZ2V0cGlkKCkpCiAKICAgICBzeXMuZXhpdChsZW4oYmFkKSA+IDAgb3IgaW50ZXJydXB0ZWQpCkBAIC04NzcsNyArOTEwLDcgQEAKICAgICBhdGV4aXQucmVnaXN0ZXIocmVzdG9yZV9zdGRvdXQpCiAKIGRlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAotICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKKyAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSwKICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSk6CiAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QuCkBAIC04ODUsMTQgKzkxOCwxNSBAQAogICAgIHRlc3QgLS0gdGhlIG5hbWUgb2YgdGhlIHRlc3QKICAgICB2ZXJib3NlIC0tIGlmIHRydWUsIHByaW50IG1vcmUgbWVzc2FnZXMKICAgICBxdWlldCAtLSBpZiB0cnVlLCBkb24ndCBwcmludCAnc2tpcHBlZCcgbWVzc2FnZXMgKHByb2JhYmx5IHJlZHVuZGFudCkKLSAgICB0ZXN0X3RpbWVzIC0tIGEgbGlzdCBvZiAodGltZSwgdGVzdF9uYW1lKSBwYWlycwogICAgIGh1bnRybGVha3MgLS0gcnVuIG11bHRpcGxlIHRpbWVzIHRvIHRlc3QgZm9yIGxlYWtzOyByZXF1aXJlcyBhIGRlYnVnCiAgICAgICAgICAgICAgICAgICBidWlsZDsgYSB0cmlwbGUgY29ycmVzcG9uZGluZyB0byAtUidzIHRocmVlIGFyZ3VtZW50cworICAgIHVzZV9yZXNvdXJjZXMgLS0gbGlzdCBvZiBleHRyYSByZXNvdXJjZXMgdG8gdXNlCiAgICAgb3V0cHV0X29uX2ZhaWx1cmUgLS0gaWYgdHJ1ZSwgZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCiAgICAgdGltZW91dCAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgogICAgICAgICAgICAgICAgdGltZW91dCBzZWNvbmRzCisgICAgZmFpbGZhc3QsIG1hdGNoX3Rlc3RzIC0tIFNlZSByZWdydGVzdCBjb21tYW5kLWxpbmUgZmxhZ3MgZm9yIHRoZXNlLgogCi0gICAgUmV0dXJucyBvbmUgb2YgdGhlIHRlc3QgcmVzdWx0IGNvbnN0YW50czoKKyAgICBSZXR1cm5zIHRoZSB0dXBsZSByZXN1bHQsIHRlc3RfdGltZSwgd2hlcmUgcmVzdWx0IGlzIG9uZSBvZiB0aGUgY29uc3RhbnRzOgogICAgICAgICBJTlRFUlJVUFRFRCAgICAgIEtleWJvYXJkSW50ZXJydXB0IHdoZW4gcnVuIHVuZGVyIC1qCiAgICAgICAgIFJFU09VUkNFX0RFTklFRCAgdGVzdCBza2lwcGVkIGJlY2F1c2UgcmVzb3VyY2UgZGVuaWVkCiAgICAgICAgIFNLSVBQRUQgICAgICAgICAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgpAQCAtOTMwLDcgKzk2NCw3IEBACiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdHJlYW0KICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcsIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKICAgICAgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gRkFJTEVEOgogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgICAgICAgICBvcmlnX3N0ZGVyci53cml0ZShvdXRwdXQpCkBAIC05NDAsNyArOTc0LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyID0gb3JpZ19zdGRlcnIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0Ci0gICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgIGZpbmFsbHk6CkBAIC05OTIsMTAgKzEwMjYsMTIgQEAKICAgICAgICAgICAgICAgICAgJ29zLmVudmlyb24nLCAnc3lzLnBhdGgnLCAnc3lzLnBhdGhfaG9va3MnLCAnX19pbXBvcnRfXycsCiAgICAgICAgICAgICAgICAgICd3YXJuaW5ncy5maWx0ZXJzJywgJ2FzeW5jb3JlLnNvY2tldF9tYXAnLAogICAgICAgICAgICAgICAgICAnbG9nZ2luZy5faGFuZGxlcnMnLCAnbG9nZ2luZy5faGFuZGxlckxpc3QnLCAnc3lzLmdldHRyYWNlJywKLSAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKLSAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsCisgICAgICAgICAgICAgICAgICdzeXMud2Fybm9wdGlvbnMnLAorICAgICAgICAgICAgICAgICAjIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkgbWF5IHJlbGVhc2UgcmVmCisgICAgICAgICAgICAgICAgICMgdG8gYSB0aHJlYWQsIHNvIGNoZWNrIHByb2Nlc3NlcyBmaXJzdC4KKyAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKICAgICAgICAgICAgICAgICAgJ3N5c2NvbmZpZy5fQ09ORklHX1ZBUlMnLCAnc3lzY29uZmlnLl9JTlNUQUxMX1NDSEVNRVMnLAotICAgICAgICAgICAgICAgICAnc3VwcG9ydC5URVNURk4nLAorICAgICAgICAgICAgICAgICAnc3VwcG9ydC5URVNURk4nLCAnbG9jYWxlJywgJ3dhcm5pbmdzLnNob3d3YXJuaW5nJywKICAgICAgICAgICAgICAgICApCiAKICAgICBkZWYgZ2V0X3N5c19hcmd2KHNlbGYpOgpAQCAtMTEyMyw2ICsxMTU5LDggQEAKICAgICBkZWYgZ2V0X211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmKToKICAgICAgICAgaWYgbm90IG11bHRpcHJvY2Vzc2luZzoKICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgVW5qb2luZWQgcHJvY2VzcyBvYmplY3RzIGNhbiBzdXJ2aXZlIGFmdGVyIHByb2Nlc3MgZXhpdHMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQogICAgICAgICAjIFRoaXMgY29waWVzIHRoZSB3ZWFrcmVmcyB3aXRob3V0IG1ha2luZyBhbnkgc3Ryb25nIHJlZmVyZW5jZQogICAgICAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQogICAgIGRlZiByZXN0b3JlX211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmLCBzYXZlZCk6CkBAIC0xMTY0LDYgKzEyMDIsMjUgQEAKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihzdXBwb3J0LlRFU1RGTik6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzdXBwb3J0LlRFU1RGTikKIAorICAgIF9sYyA9IFtnZXRhdHRyKGxvY2FsZSwgbGMpIGZvciBsYyBpbiBkaXIobG9jYWxlKQorICAgICAgICAgICBpZiBsYy5zdGFydHN3aXRoKCdMQ18nKV0KKyAgICBkZWYgZ2V0X2xvY2FsZShzZWxmKToKKyAgICAgICAgcGFpcmluZ3MgPSBbXQorICAgICAgICBmb3IgbGMgaW4gc2VsZi5fbGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFpcmluZ3MuYXBwZW5kKChsYywgbG9jYWxlLnNldGxvY2FsZShsYywgTm9uZSkpKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldHVybiBwYWlyaW5ncworICAgIGRlZiByZXN0b3JlX2xvY2FsZShzZWxmLCBzYXZlZCk6CisgICAgICAgIGZvciBsYywgc2V0dGluZyBpbiBzYXZlZDoKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobGMsIHNldHRpbmcpCisKKyAgICBkZWYgZ2V0X3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gd2FybmluZ3Muc2hvd3dhcm5pbmcKKyAgICBkZWYgcmVzdG9yZV93YXJuaW5nc19zaG93d2FybmluZyhzZWxmLCBmeG4pOgorICAgICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IGZ4bgorCiAgICAgZGVmIHJlc291cmNlX2luZm8oc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVzb3VyY2VzOgogICAgICAgICAgICAgbWV0aG9kX3N1ZmZpeCA9IG5hbWUucmVwbGFjZSgnLicsICdfJykKQEAgLTExOTgsNyArMTI1NSw3IEBACiAKIAogZGVmIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgZGlzcGxheV9mYWlsdXJlPVRydWUpOgorICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGlzcGxheV9mYWlsdXJlPVRydWUpOgogICAgIHN1cHBvcnQudW5sb2FkKHRlc3QpCiAKICAgICB0ZXN0X3RpbWUgPSAwLjAKQEAgLTEyMTEsOCArMTI2OCw3IEBACiAgICAgICAgICAgICBhYnN0ZXN0ID0gJ3Rlc3QuJyArIHRlc3QKICAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3QsIHZlcmJvc2UsIHF1aWV0KSBhcyBlbnZpcm9ubWVudDoKICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQotICAgICAgICAgICAgdGhlX21vZHVsZSA9IGdldGF0dHIodGhlX3BhY2thZ2UsIHRlc3QpCisgICAgICAgICAgICB0aGVfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoYWJzdGVzdCkKICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaGFzIGEgdGVzdF9tYWluLCB0aGF0IHdpbGwgcnVuIHRoZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgIyB0ZXN0cy4gIElmIG5vdCwgdXNlIG5vcm1hbCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcuCiAgICAgICAgICAgICB0ZXN0X3J1bm5lciA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCkBAIC0xMjIxLDggKzEyNzcsNyBAQAogICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyID0gbGFtYmRhOiBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKICAgICAgICAgICAgIHRlc3RfcnVubmVyKCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6Ci0gICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwKLSAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLCBodW50cmxlYWtzKQogICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgZXhjZXB0IHN1cHBvcnQuUmVzb3VyY2VEZW5pZWQgYXMgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CkBAIC0xMzI4LDQxICsxMzgzLDUwIEBACiAgICAgICAgIGZvciBvYmogaW4gYWJjLl9fc3ViY2xhc3Nlc19fKCkgKyBbYWJjXToKICAgICAgICAgICAgIGFiY3Nbb2JqXSA9IG9iai5fYWJjX3JlZ2lzdHJ5LmNvcHkoKQogCi0gICAgaWYgaW5kaXJlY3RfdGVzdDoKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3RoZV9tb2R1bGUuX19uYW1lX19dCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIHRoZV9tb2R1bGUuX19uYW1lX18pCi0KLSAgICBkZWx0YXMgPSBbXQogICAgIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZSA9IGh1bnRybGVha3MKICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKICAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAorICAgIHJjX2RlbHRhcyA9IFswXSAqIHJlcGNvdW50CisgICAgYWxsb2NfZGVsdGFzID0gWzBdICogcmVwY291bnQKKwogICAgIHByaW50KCJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgIHByaW50KCgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgIGFsbG9jX2FmdGVyLCByY19hZnRlciA9IGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKLSAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCisgICAgICAgICAgICByY19kZWx0YXNbaV0gPSByY19hZnRlciAtIHJjX2JlZm9yZQorICAgICAgICAgICAgYWxsb2NfZGVsdGFzW2ldID0gYWxsb2NfYWZ0ZXIgLSBhbGxvY19iZWZvcmUKKyAgICAgICAgYWxsb2NfYmVmb3JlLCByY19iZWZvcmUgPSBhbGxvY19hZnRlciwgcmNfYWZ0ZXIKICAgICBwcmludChmaWxlPXN5cy5zdGRlcnIpCi0gICAgaWYgYW55KGRlbHRhcyk6Ci0gICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQotICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6Ci0gICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQotICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKKyAgICAjIFRoZXNlIGNoZWNrZXJzIHJldHVybiBGYWxzZSBvbiBzdWNjZXNzLCBUcnVlIG9uIGZhaWx1cmUKKyAgICBkZWYgY2hlY2tfcmNfZGVsdGFzKGRlbHRhcyk6CisgICAgICAgIHJldHVybiBhbnkoZGVsdGFzKQorICAgIGRlZiBjaGVja19hbGxvY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgIyBBdCBsZWFzdCAxLzNyZCBvZiAwcworICAgICAgICBpZiAzICogZGVsdGFzLmNvdW50KDApIDwgbGVuKGRlbHRhcyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIE5vdGhpbmcgZWxzZSB0aGFuIDFzLCAwcyBhbmQgLTFzCisgICAgICAgIGlmIG5vdCBzZXQoZGVsdGFzKSA8PSB7MSwwLC0xfToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZhaWxlZCA9IEZhbHNlCisgICAgZm9yIGRlbHRhcywgaXRlbV9uYW1lLCBjaGVja2VyIGluIFsKKyAgICAgICAgKHJjX2RlbHRhcywgJ3JlZmVyZW5jZXMnLCBjaGVja19yY19kZWx0YXMpLAorICAgICAgICAoYWxsb2NfZGVsdGFzLCAnbWVtb3J5IGJsb2NrcycsIGNoZWNrX2FsbG9jX2RlbHRhcyldOgorICAgICAgICBpZiBjaGVja2VyKGRlbHRhcyk6CisgICAgICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzICVzLCBzdW09JXMnICUgKAorICAgICAgICAgICAgICAgIHRlc3QsIGRlbHRhc1tud2FybXVwOl0sIGl0ZW1fbmFtZSwgc3VtKGRlbHRhcykpCisgICAgICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQorICAgICAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgcmV0dXJuIGZhaWxlZAogCiBkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5cmVnCkBAIC0xNDI4LDggKzE0OTIsMTEgQEAKICAgICBlbHNlOgogICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKIAotICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaCBhbmQgcmVhZCBtZW1vcnkgc3RhdGlzdGljcyBpbW1lZGlhdGVseSBhZnRlci4KKyAgICBmdW5jMSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MKKyAgICBmdW5jMiA9IHN5cy5nZXR0b3RhbHJlZmNvdW50CiAgICAgZ2MuY29sbGVjdCgpCisgICAgcmV0dXJuIGZ1bmMxKCksIGZ1bmMyKCkKIAogZGVmIHdhcm1fY2FjaGVzKCk6CiAgICAgIyBjaGFyIGNhY2hlCkBAIC0xNDcyLDMwNyArMTUzOSwxMCBAQAogICAgIHByaW50KGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKSkKIAotIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cwotIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCi0jCi0jIFNwZWNpYWwgY2FzZXM6Ci0jICAgICB0ZXN0X3BlcDI3NwotIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAotIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF90aW1lb3V0Ci0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KLSMKLSMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KLSMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgogCi1fZXhwZWN0YXRpb25zID0gKAotICAgICgnd2luMzInLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3J5cHQKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2RibV9uZGJtCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9waXBlcwotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3lzbG9nCi0gICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscwotICAgICAgICB0ZXN0X3dhaXQzCi0gICAgICAgIHRlc3Rfd2FpdDQKLSAgICAgICAgIiIiKSwKLSAgICAoJ2xpbnV4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgICIiIiksCi0gICAgKCd1bml4d2FyZScsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdvcGVudW5peCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdzY29fc3YnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hc3luY2hhdAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9nZXR0ZXh0Ci0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3RfcXVldWUKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgdGVzdF90aHJlYWQKLSAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKLSAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCi0gICAgICAgIHRlc3RfdGhyZWFkaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdkYXJ3aW4nLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2dkYgotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X21pbmlkb20KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgIiIiKSwKLSAgICAoJ3N1bm9zJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ3ppcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnaHAtdXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3RfemlwZmlsZQotICAgICAgICB0ZXN0X3psaWIKLSAgICAgICAgIiIiKSwKLSAgICAoJ2N5Z3dpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2lvY3RsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKLSAgICAgICAgIiIiKSwKLSAgICAoJ29zMmVteCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F1ZGlvb3AKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICAiIiIpLAotICAgICgnZnJlZWJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF90aW1lb3V0Ci0gICAgICAgIHRlc3RfdXJsbGlibmV0Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdhaXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfemlwaW1wb3J0Ci0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnb3BlbmJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9ub3JtYWxpemF0aW9uCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCduZXRic2QnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdHlwZXMKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0pCi0KLWNsYXNzIF9FeHBlY3RlZFNraXBzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKLQotICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWQgPSBOb25lCi0gICAgICAgIGZvciBpdGVtIGluIF9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChpdGVtWzBdKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGl0ZW1bMV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBzZXQoZXhwZWN0ZWQuc3BsaXQoKSkKLQotICAgICAgICAgICAgIyBUaGVzZSBhcmUgYnJva2VuIHRlc3RzLCBmb3Igbm93IHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0uCi0gICAgICAgICAgICAjIFhYWCBGaXggdGhlc2UhCi0gICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0sIGV2ZW4gTGludXgKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCi0KLSAgICAgICAgICAgICMgZG9jdGVzdCwgcHJvZmlsZSBhbmQgY1Byb2ZpbGUgdGVzdHMgZmFpbCB3aGVuIHRoZSBjb2RlYyBmb3IgdGhlCi0gICAgICAgICAgICAjIGZzIGVuY29kaW5nIGlzbid0IGJ1aWx0IGluIGJlY2F1c2UgUHlVbmljb2RlX0RlY29kZSgpIGFkZHMgdHdvCi0gICAgICAgICAgICAjIGNhbGxzIGludG8gUHl0aG9uLgotICAgICAgICAgICAgZW5jcyA9ICgidXRmLTgiLCAibGF0aW4tMSIsICJhc2NpaSIsICJtYmNzIiwgInV0Zi0xNiIsICJ1dGYtMzIiKQotICAgICAgICAgICAgaWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLmxvd2VyKCkgbm90IGluIGVuY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfY1Byb2ZpbGUnKQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2RvY3Rlc3QnKQotCi0gICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSB7InRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93aW5zb3VuZCIsICJ0ZXN0X3N0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3FsaXRlIiwgInRlc3RfbXNpbGliIn0KLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkIHw9IFdJTl9PTkxZCi0KLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnB5dGhvbl9pc19vcHRpbWl6ZWQoKToKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9nZGIiKQotCi0gICAgICAgICAgICBzZWxmLnZhbGlkID0gVHJ1ZQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZik6Ci0gICAgICAgICJSZXR1cm4gdHJ1ZSBpZmYgX0V4cGVjdGVkU2tpcHMga25vd3MgYWJvdXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0uIgotICAgICAgICByZXR1cm4gc2VsZi52YWxpZAotCi0gICAgZGVmIGdldGV4cGVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gc2V0IG9mIHRlc3QgbmFtZXMgd2UgZXhwZWN0IHRvIHNraXAgb24gY3VycmVudCBwbGF0Zm9ybS4KLQotICAgICAgICBzZWxmLmlzdmFsaWQoKSBtdXN0IGJlIHRydWUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGFzc2VydCBzZWxmLmlzdmFsaWQoKQotICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAotCi1kZWYgX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKFRFTVBESVIpOgotICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKLSAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgotICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorZGVmIG1haW5faW5fdGVtcF9jd2QoKToKKyAgICAiIiJSdW4gbWFpbigpIGluIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5LiIiIgogICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKLSAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQotICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xNzgxLDEwICsxNTUxLDE2IEBACiAgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZwogICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKICAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KLSAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisgICAgdGVzdF9jd2QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9IG9zLnBhdGguam9pbihURU1QRElSLCB0ZXN0X2N3ZCkKIAotICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKLSAgICByZXR1cm4gVEVNUERJUiwgVEVTVENXRAorICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyaWx5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiAgVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGVzdF9jd2QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguIERlc3BpdGUKQEAgLTE4MDgsMTEgKzE1ODQsNCBAQAogICAgICMgc2FuaXR5IGNoZWNrCiAgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKIAotICAgIFRFTVBESVIsIFRFU1RDV0QgPSBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUikKLQotICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0gICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICAgICAgbWFpbigpCisgICAgbWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybCBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODliMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJwakNCandJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SllXVEVtTUNRR0ExVUUKK0Nnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlZCQU1NRFc5MWNpMWoKK1lTMXpaWEoyWlhJWERURXpNVEV5TVRFM01EZzBOMW9YRFRJek1Ea3pNREUzTURnME4xcWdEakFNTUFvR0ExVWQKK0ZBUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDTkpYQzJtVkthdUVlTjNMbFEzWnRNNWdrSDNFeEgKKytpNGJtSmp0Sm40OTdXd3Z2b0llVWRybVZYZ0pRUjkzUnRWMzdoWndOMFNYTUxsTm1VWlBINHJIaGloYXl3NG0KK3VuQ3pWai9PaENDWTcvVFBqS3VKMU8vMFhoYUxCcEJWalFON1IvMXVqb1JLYlNpYS9DRDN2Y243RnF4enc3TEsKK2ZTUkNLUkdUajFDWml1eHJwaHRGY2h3QUxYU2lGRHk5bXIyWktoSW1jeXExUHlkZmdFelU3OEFQcE9rTVFzSUMKK1VOSi9jZjNjOWVtemYrZFV0Y01FY2VqUTNteW5CbzRlSUdnMUVXNDJiejRxNGhTanpRbEtjQlYwbXV3NXFYaGMKK0hPeEgyaVRGaFE3U3J2VnVLL2RNMTRyWU00QjVtU1gzblJDMWtObVhwUzlqM3dKRGh1d21qSGVkCistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQppbmRleCBhYjIwMTY0Li40ZDVjMWYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CisrKyBiL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKQEAgLTEyLDEzICsxMiwyMiBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHppcGZpbGUKIAotZnJvbSBpbXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVyciwgdGVtcF9kaXIKIAogIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcwogZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgorICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCisgICAgZWxzZToKKyAgICAgICAgaXNvbGF0ZWQgPSBub3QgZW52X3ZhcnMKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1YJywgJ2ZhdWx0aGFuZGxlciddCisgICAgaWYgaXNvbGF0ZWQ6CisgICAgICAgICMgaXNvbGF0ZWQgbW9kZTogaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlnbm9yZSB1c2VyCisgICAgICAgICMgc2l0ZS1wYWNrYWdlcywgYW5kIGRvbid0IGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGgKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctSScpCisgICAgZWxpZiBub3QgZW52X3ZhcnM6CisgICAgICAgICMgaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KQEAgLTM5LDcgKzQ4LDcgQEAKICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCiAgICAgcmMgPSBwLnJldHVybmNvZGUKLSAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgZXJyID0gc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKQEAgLTQ5LDE4ICs1OCwzMiBAQAogZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgogICAgICIiIgogICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBzdWNjZWVkcyAocmMgPT0gMCkgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LAorICAgIHN0ZGVycikgdHVwbGUuCisKKyAgICBJZiB0aGUgX19jbGVhbmVudiBrZXl3b3JkIGlzIHNldCwgZW52X3ZhcnMgaXMgdXNlZCBhIGZyZXNoIGVudmlyb25tZW50LgorCisgICAgUHl0aG9uIGlzIHN0YXJ0ZWQgaW4gaXNvbGF0ZWQgbW9kZSAoY29tbWFuZCBsaW5lIG9wdGlvbiAtSSksCisgICAgZXhjZXB0IGlmIHRoZSBfX2lzb2xhdGVkIGtleXdvcmQgaXMgc2V0IHRvIEZhbHNlLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihUcnVlLCAqYXJncywgKiplbnZfdmFycykKIAogZGVmIGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIChyYyAhPSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIFNlZSBhc3NlcnRfcHl0aG9uX29rKCkgZm9yIG1vcmUgb3B0aW9ucy4KICAgICAiIiIKICAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3KToKKyAgICAiIiJSdW4gYSBQeXRob24gc3VicHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisKKyAgICBrdyBpcyBleHRyYSBrZXl3b3JkIGFyZ3MgdG8gcGFzcyB0byBzdWJwcm9jZXNzLlBvcGVuLiBSZXR1cm5zIGEgUG9wZW4KKyAgICBvYmplY3QuCisgICAgIiIiCiAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCiAgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCiAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTY4LDYgKzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3KQogCiBkZWYga2lsbF9weXRob24ocCk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiBQb3BlbiBwcm9jZXNzIHVudGlsIGNvbXBsZXRpb24gYW5kIHJldHVybiBzdGRvdXQuIiIiCiAgICAgcC5zdGRpbi5jbG9zZSgpCiAgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQogICAgIHAuc3Rkb3V0LmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5IGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKaW5kZXggYWY3YzBiNC4uOTA3MjJmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc29ydHBlcmYucHkKKysrIGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBmbiA9IG9zLnBhdGguam9pbih0ZCwgInJyJTA2ZCIgJSBuKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZuLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByID0gcmFuZG9tLnJhbmRvbQogICAgICAgICByZXN1bHQgPSBbcigpIGZvciBpIGluIHJhbmdlKG4pXQogICAgICAgICB0cnk6CkBAIC0zNSw5ICszNSw5IEBACiAgICAgICAgICAgICAgICAgaWYgZnA6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3Qgd3JpdGUiLCBmbiwgIjoiLCBtc2cpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gbWFyc2hhbC5sb2FkKGZwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQppbmRleCA4Njg2MTUzLi43NTliM2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weQorKysgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgIHNzbGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCkBAIC0xNDcsOSArMTQ3LDExIEBACiAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKIAogCi1kZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgY2VydGZpbGU9Q0VSVEZJTEUsIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKLSAgICAjIHdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKLSAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKK2RlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCAqLCBjb250ZXh0PU5vbmUsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKKyAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICMgV2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQogICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlKQogICAgIHNlcnZlciA9IEhUVFBTU2VydmVyVGhyZWFkKGNvbnRleHQsIGhvc3QsIGhhbmRsZXJfY2xhc3MpCiAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggMWQ3MDM4NS4uMzA3ODRkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMzI4LDEzICszMjgsMjYgQEAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICd1cHBlcicsIDQyKQogCiAgICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA4KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA4KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICAjIGNoZWNrIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIHRhYnNpemU9OCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgdGFic2l6ZT00KQorCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICBhXG4gYicsICcgXHRhXG5cdGInLCAnZXhwYW5kdGFicycsIDEpCiAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdleHBhbmR0YWJzJywgNDIsIDQyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CmluZGV4IDFmNjFlMTMuLmQxMmJkOTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKQEAgLTEsMTcgKzEsMjcgQEAKICIiIldoZW4gY2FsbGVkIGFzIGEgc2NyaXB0LCBwcmludCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBvcGVuCi1maWxlIGRlc2NyaXB0b3JzIG9uIHN0ZG91dC4iIiIKK2ZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LgorCitVc2FnZToKK2ZkX3N0YXRzLnB5OiBjaGVjayBhbGwgZmlsZSBkZXNjcmlwdG9ycworZmRfc3RhdHVzLnB5IGZkMSBmZDIgLi4uOiBjaGVjayBvbmx5IHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3JzCisiIiIKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKLQotdHJ5OgotICAgIF9NQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKLWV4Y2VwdDoKLSAgICBfTUFYRkQgPSAyNTYKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgZmRzID0gW10KLSAgICBmb3IgZmQgaW4gcmFuZ2UoMCwgX01BWEZEKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9NQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgX01BWEZEID0gMjU2CisgICAgICAgIHRlc3RfZmRzID0gcmFuZ2UoMCwgX01BWEZEKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfZmRzID0gbWFwKGludCwgc3lzLmFyZ3ZbMTpdKQorICAgIGZvciBmZCBpbiB0ZXN0X2ZkczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3QgPSBvcy5mc3RhdChmZCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKQEAgLTE5LDYgKzI5LDYgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgIyBJZ25vcmUgU29sYXJpcyBkb29yIGZpbGVzCi0gICAgICAgIGlmIHN0LnN0X21vZGUgJiAweEYwMDAgIT0gMHhkMDAwOgorICAgICAgICBpZiBub3Qgc3RhdC5TX0lTRE9PUihzdC5zdF9tb2RlKToKICAgICAgICAgICAgIGZkcy5hcHBlbmQoZmQpCiAgICAgcHJpbnQoJywnLmpvaW4obWFwKHN0ciwgZmRzKSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5IGIvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQppbmRleCAyMzNiMTNhLi5hMjQyYTQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKQEAgLTE1LDEwICsxNSwxMCBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IGNvbGxlY3Rpb25zLmFiYwogaW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IGltcAogaW1wb3J0IHRpbWUKIGltcG9ydCBzeXNjb25maWcKIGltcG9ydCBmbm1hdGNoCkBAIC01NywyNiArNTcsNDkgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBsem1hID0gTm9uZQogCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKIF9fYWxsX18gPSBbCi0gICAgIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLCAiaW1wb3J0X21vZHVsZSIsICJ2ZXJib3NlIiwKLSAgICAidXNlX3Jlc291cmNlcyIsICJtYXhfbWVtdXNlIiwgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLAotICAgICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgInVubG9hZCIsICJ1bmxpbmsiLCAicm10cmVlIiwgImZvcmdldCIsCisgICAgIyBnbG9iYWxzCisgICAgIlBJUEVfTUFYX1NJWkUiLCAidmVyYm9zZSIsICJtYXhfbWVtdXNlIiwgInVzZV9yZXNvdXJjZXMiLCAiZmFpbGZhc3QiLAorICAgICMgZXhjZXB0aW9ucworICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwKKyAgICAjIGltcG9ydHMKKyAgICAiaW1wb3J0X21vZHVsZSIsICJpbXBvcnRfZnJlc2hfbW9kdWxlIiwgIkNsZWFuSW1wb3J0IiwKKyAgICAjIG1vZHVsZXMKKyAgICAidW5sb2FkIiwgImZvcmdldCIsCisgICAgIyBpbworICAgICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKKyAgICAiY2FwdHVyZWRfc3RkaW4iLCAiY2FwdHVyZWRfc3RkZXJyIiwKKyAgICAjIGZpbGVzeXN0ZW0KKyAgICAiVEVTVEZOIiwgIlNBVkVEQ1dEIiwgInVubGluayIsICJybXRyZWUiLCAidGVtcF9jd2QiLCAiZmluZGZpbGUiLAorICAgICJjcmVhdGVfZW1wdHlfZmlsZSIsICJjYW5fc3ltbGluayIsICJmc19pc19jYXNlX2luc2Vuc2l0aXZlIiwKKyAgICAjIHVuaXR0ZXN0CiAgICAgImlzX3Jlc291cmNlX2VuYWJsZWQiLCAicmVxdWlyZXMiLCAicmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uIiwKLSAgICAicmVxdWlyZXNfbGludXhfdmVyc2lvbiIsICJyZXF1aXJlc19tYWNfdmVyIiwgImZpbmRfdW51c2VkX3BvcnQiLAotICAgICJiaW5kX3BvcnQiLCAiSVBWNl9FTkFCTEVEIiwgImlzX2p5dGhvbiIsICJURVNURk4iLCAiSE9TVCIsICJTQVZFRENXRCIsCi0gICAgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwgImNyZWF0ZV9lbXB0eV9maWxlIiwgInNvcnRkaWN0IiwKLSAgICAiY2hlY2tfc3ludGF4X2Vycm9yIiwgIm9wZW5fdXJscmVzb3VyY2UiLCAiY2hlY2tfd2FybmluZ3MiLCAiQ2xlYW5JbXBvcnQiLAotICAgICJFbnZpcm9ubWVudFZhckd1YXJkIiwgIlRyYW5zaWVudFJlc291cmNlIiwgImNhcHR1cmVkX3N0ZG91dCIsCi0gICAgImNhcHR1cmVkX3N0ZGluIiwgImNhcHR1cmVkX3N0ZGVyciIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsCi0gICAgImlvZXJyb3JfcGVlcl9yZXNldCIsICJydW5fd2l0aF9sb2NhbGUiLCAndGVtcF91bWFzaycsCi0gICAgInRyYW5zaWVudF9pbnRlcm5ldCIsICJzZXRfbWVtbGltaXQiLCAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwKLSAgICAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsICJ0aHJlYWRpbmdfc2V0dXAiLAotICAgICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIiwgImNweXRob25fb25seSIsICJjaGVja19pbXBsX2RldGFpbCIsCi0gICAgImdldF9hdHRyaWJ1dGUiLCAic3dhcF9pdGVtIiwgInN3YXBfYXR0ciIsICJyZXF1aXJlc19JRUVFXzc1NCIsCi0gICAgIlRlc3RIYW5kbGVyIiwgIk1hdGNoZXIiLCAiY2FuX3N5bWxpbmsiLCAic2tpcF91bmxlc3Nfc3ltbGluayIsCi0gICAgInNraXBfdW5sZXNzX3hhdHRyIiwgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAicmVxdWlyZXNfemxpYiIsCi0gICAgIlBJUEVfTUFYX1NJWkUiLCAiZmFpbGZhc3QiLCAiYW50aWNpcGF0ZV9mYWlsdXJlIiwgInJ1bl93aXRoX3R6IiwKLSAgICAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsICJzdXBwcmVzc19jcmFzaF9wb3B1cCIsCisgICAgInJlcXVpcmVzX2xpbnV4X3ZlcnNpb24iLCAicmVxdWlyZXNfbWFjX3ZlciIsICJjaGVja19zeW50YXhfZXJyb3IiLAorICAgICJUcmFuc2llbnRSZXNvdXJjZSIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsICJpb2Vycm9yX3BlZXJfcmVzZXQiLAorICAgICJ0cmFuc2llbnRfaW50ZXJuZXQiLCAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsCisgICAgInNraXBfdW5sZXNzX3N5bWxpbmsiLCAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsCisgICAgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsICJjcHl0aG9uX29ubHkiLCAiZ2V0X2F0dHJpYnV0ZSIsCisgICAgInJlcXVpcmVzX0lFRUVfNzU0IiwgInNraXBfdW5sZXNzX3hhdHRyIiwgInJlcXVpcmVzX3psaWIiLAorICAgICJhbnRpY2lwYXRlX2ZhaWx1cmUiLAorICAgICMgc3lzCisgICAgImlzX2p5dGhvbiIsICJjaGVja19pbXBsX2RldGFpbCIsCisgICAgIyBuZXR3b3JrCisgICAgIkhPU1QiLCAiSVBWNl9FTkFCTEVEIiwgImZpbmRfdW51c2VkX3BvcnQiLCAiYmluZF9wb3J0IiwgIm9wZW5fdXJscmVzb3VyY2UiLAorICAgICMgcHJvY2Vzc2VzCisgICAgJ3RlbXBfdW1hc2snLCAicmVhcF9jaGlsZHJlbiIsCisgICAgIyBsb2dnaW5nCisgICAgIlRlc3RIYW5kbGVyIiwKKyAgICAjIHRocmVhZHMKKyAgICAidGhyZWFkaW5nX3NldHVwIiwgInRocmVhZGluZ19jbGVhbnVwIiwKKyAgICAjIG1pc2NlbGxhbmVvdXMKKyAgICAiY2hlY2tfd2FybmluZ3MiLCAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJydW5fd2l0aF9sb2NhbGUiLCAic3dhcF9pdGVtIiwKKyAgICAic3dhcF9hdHRyIiwgIk1hdGNoZXIiLCAic2V0X21lbWxpbWl0IiwgIlN1cHByZXNzQ3Jhc2hSZXBvcnQiLCAic29ydGRpY3QiLAorICAgICJydW5fd2l0aF90eiIsCiAgICAgXQogCiBjbGFzcyBFcnJvcihFeGNlcHRpb24pOgpAQCAtOTgsNyArMTIxLDggQEAKICAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3MgcGFja2FnZSBhbmQgbW9kdWxlIGRlcHJlY2F0aW9uCiAgICAgd2FybmluZ3Mgd2hlbiBpbXBvcnRpbmcgdGhlbS4KIAotICAgIElmIGlnbm9yZSBpcyBGYWxzZSwgdGhpcyBjb250ZXh0IG1hbmFnZXIgaGFzIG5vIGVmZmVjdC4iIiIKKyAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuCisgICAgIiIiCiAgICAgaWYgaWdub3JlOgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4rIChtb2R1bGV8cGFja2FnZSkiLApAQCAtMTA4LDE2ICsxMzIsMjEgQEAKICAgICAgICAgeWllbGQKIAogCi1kZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKToKK2RlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UsICosIHJlcXVpcmVkX29uPSgpKToKICAgICAiIiJJbXBvcnQgYW5kIHJldHVybiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZCwgcmFpc2luZyBTa2lwVGVzdCBpZgogICAgIGl0IGlzIG5vdCBhdmFpbGFibGUuCiAKICAgICBJZiBkZXByZWNhdGVkIGlzIFRydWUsIGFueSBtb2R1bGUgb3IgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcwotICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4iIiIKKyAgICB3aWxsIGJlIHN1cHByZXNzZWQuIElmIGEgbW9kdWxlIGlzIHJlcXVpcmVkIG9uIGEgcGxhdGZvcm0gYnV0IG9wdGlvbmFsIGZvcgorICAgIG90aGVycywgc2V0IHJlcXVpcmVkX29uIHRvIGFuIGl0ZXJhYmxlIG9mIHBsYXRmb3JtIHByZWZpeGVzIHdoaWNoIHdpbGwgYmUKKyAgICBjb21wYXJlZCBhZ2FpbnN0IHN5cy5wbGF0Zm9ybS4KKyAgICAiIiIKICAgICB3aXRoIF9pZ25vcmVfZGVwcmVjYXRlZF9pbXBvcnRzKGRlcHJlY2F0ZWQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHR1cGxlKHJlcXVpcmVkX29uKSk6CisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0cihtc2cpKQogCiAKQEAgLTMwMywyNSArMzMyLDIwIEBACiBkZWYgdW5saW5rKGZpbGVuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF91bmxpbmsoZmlsZW5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgICMgVGhlIGZpbGVuYW1lIG5lZWQgbm90IGV4aXN0LgotICAgICAgICBpZiBlcnJvci5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRU5PVERJUik6Ci0gICAgICAgICAgICByYWlzZQorICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIE5vdEFEaXJlY3RvcnlFcnJvcik6CisgICAgICAgIHBhc3MKIAogZGVmIHJtZGlyKGRpcm5hbWUpOgogICAgIHRyeToKICAgICAgICAgX3JtZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgICMgVGhlIGRpcmVjdG9yeSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHBhc3MKIAogZGVmIHJtdHJlZShwYXRoKToKICAgICB0cnk6CiAgICAgICAgIF9ybXRyZWUocGF0aCkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHBhc3MKIAogZGVmIG1ha2VfbGVnYWN5X3B5Yyhzb3VyY2UpOgogICAgICIiIk1vdmUgYSBQRVAgMzE0NyBweWMvcHlvIGZpbGUgdG8gaXRzIGxlZ2FjeSBweWMvcHlvIGxvY2F0aW9uLgpAQCAtMzMzLDcgKzM1Nyw3IEBACiAgICAgICAgIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QsIGhvd2V2ZXIgdGhlIFBFUCAzMTQ3IHB5YyBmaWxlIG11c3QgZXhpc3QuCiAgICAgOnJldHVybjogVGhlIGZpbGUgc3lzdGVtIHBhdGggdG8gdGhlIGxlZ2FjeSBweWMgZmlsZS4KICAgICAiIiIKLSAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCisgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgdXBfb25lID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzb3VyY2UpKQogICAgIGxlZ2FjeV9weWMgPSBvcy5wYXRoLmpvaW4odXBfb25lLCBzb3VyY2UgKyAoJ2MnIGlmIF9fZGVidWdfXyBlbHNlICdvJykpCiAgICAgb3MucmVuYW1lKHB5Y19maWxlLCBsZWdhY3lfcHljKQpAQCAtMzUyLDggKzM3Niw4IEBACiAgICAgICAgICMgY29tYmluYXRpb25zIG9mIFBFUCAzMTQ3IGFuZCBsZWdhY3kgcHljIGFuZCBweW8gZmlsZXMuCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnYycpCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnbycpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKLSAgICAgICAgdW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgdW5saW5rKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogIyBPbiBzb21lIHBsYXRmb3Jtcywgc2hvdWxkIG5vdCBydW4gZ3VpIHRlc3QgZXZlbiBpZiBpdCBpcyBhbGxvd2VkCiAjIGluIGB1c2VfcmVzb3VyY2VzJy4KQEAgLTUxNCw3ICs1MzgsNyBAQAogICAgIHRoZSBTT19SRVVTRUFERFIgc29ja2V0IG9wdGlvbiBoYXZpbmcgZGlmZmVyZW50IHNlbWFudGljcyBvbiBXaW5kb3dzIHZlcnN1cwogICAgIFVuaXgvTGludXguICBPbiBVbml4LCB5b3UgY2FuJ3QgaGF2ZSB0d28gQUZfSU5FVCBTT0NLX1NUUkVBTSBzb2NrZXRzIGJpbmQsCiAgICAgbGlzdGVuIGFuZCB0aGVuIGFjY2VwdCBjb25uZWN0aW9ucyBvbiBpZGVudGljYWwgaG9zdC9wb3J0cy4gIEFuIEVBRERSSU5VU0UKLSAgICBzb2NrZXQuZXJyb3Igd2lsbCBiZSByYWlzZWQgYXQgc29tZSBwb2ludCAoZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQKKyAgICBPU0Vycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCiAgICAgdGhlIG9yZGVyIGJpbmQgYW5kIGxpc3RlbiB3ZXJlIGNhbGxlZCBvbiBlYWNoIHNvY2tldCkuCiAKICAgICBIb3dldmVyLCBvbiBXaW5kb3dzLCBpZiBTT19SRVVTRUFERFIgaXMgc2V0IG9uIHRoZSBzb2NrZXRzLCBubyBFQUREUklOVVNFCkBAIC01OTIsOSArNjE2LDkgQEAKICAgICAgICAgc29jayA9IE5vbmUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICBzb2NrLmJpbmQoKCc6OjEnLCAwKSkKKyAgICAgICAgICAgIHNvY2suYmluZCgoSE9TVHY2LCAwKSkKICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2FpZXJyb3IpOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHNvY2s6CkBAIC0xMTgxLDkgKzEyMDUsOSBAQAogIyBDb250ZXh0IG1hbmFnZXJzIHRoYXQgcmFpc2UgUmVzb3VyY2VEZW5pZWQgd2hlbiB2YXJpb3VzIGlzc3VlcwogIyB3aXRoIHRoZSBJbnRlcm5ldCBjb25uZWN0aW9uIG1hbmlmZXN0IHRoZW1zZWx2ZXMgYXMgZXhjZXB0aW9ucy4KICMgWFhYIGRlcHJlY2F0ZSB0aGVzZSBhbmQgdXNlIHRyYW5zaWVudF9pbnRlcm5ldCgpIGluc3RlYWQKLXRpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQotc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShzb2NrZXQuZXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCi1pb2Vycm9yX3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShJT0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQordGltZV9vdXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FVElNRURPVVQpCitzb2NrZXRfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKE9TRXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCitpb2Vycm9yX3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQogCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCkBAIC0xMjI5LDE3ICsxMjUzLDE3IEBACiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQodGltZW91dCkKICAgICAgICAgeWllbGQKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAjIHVybGxpYiBjYW4gd3JhcCBvcmlnaW5hbCBzb2NrZXQgZXJyb3JzIG11bHRpcGxlIHRpbWVzICghKSwgd2UgbXVzdAogICAgICAgICAjIHVud3JhcCB0byBnZXQgYXQgdGhlIG9yaWdpbmFsIGVycm9yLgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgYSA9IGVyci5hcmdzCi0gICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGlmIGxlbihhKSA+PSAxIGFuZCBpc2luc3RhbmNlKGFbMF0sIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGVyciA9IGFbMF0KICAgICAgICAgICAgICMgVGhlIGVycm9yIGNhbiBhbHNvIGJlIHdyYXBwZWQgYXMgYXJnc1sxXToKICAgICAgICAgICAgICMgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAjICAgICAgICByYWlzZSBJT0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQotICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBJT0Vycm9yKToKKyAgICAgICAgICAgICMgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgICAgICBlbGlmIGxlbihhKSA+PSAyIGFuZCBpc2luc3RhbmNlKGFbMV0sIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGVyciA9IGFbMV0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTE2OTcsOSArMTcyMSwxOCBAQAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZG9jc3RyaW5ncy4KIAotSEFWRV9ET0NTVFJJTkdTID0gKGNoZWNrX2ltcGxfZGV0YWlsKGNweXRob249RmFsc2UpIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IKLSAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfRE9DX1NUUklOR1MnKSkKKyMgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGVudW1lcmF0ZSBhbGwgdGhlIGNhc2VzIHdoZXJlIGRvY3N0cmluZ3MgbWF5IGJlCisjIGRpc2FibGVkLCB3ZSBqdXN0IGNoZWNrIGZvciB0aGF0IGRpcmVjdGx5CisKK2RlZiBfY2hlY2tfZG9jc3RyaW5ncygpOgorICAgICIiIkp1c3QgdXNlZCB0byBjaGVjayBpZiBkb2NzdHJpbmdzIGFyZSBlbmFibGVkIiIiCisKK01JU1NJTkdfQ19ET0NTVFJJTkdTID0gKGNoZWNrX2ltcGxfZGV0YWlsKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfRE9DX1NUUklOR1MnKSkKKworSEFWRV9ET0NTVFJJTkdTID0gKF9jaGVja19kb2NzdHJpbmdzLl9fZG9jX18gaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgbm90IE1JU1NJTkdfQ19ET0NTVFJJTkdTKQogCiByZXF1aXJlc19kb2NzdHJpbmdzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0RPQ1NUUklOR1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBkb2NzdHJpbmdzIikKQEAgLTE3NzQsMTIgKzE4MDcsMTIgQEAKIGRlZiB0aHJlYWRpbmdfY2xlYW51cCgqb3JpZ2luYWxfdmFsdWVzKToKICAgICBpZiBub3QgX3RocmVhZDoKICAgICAgICAgcmV0dXJuCi0gICAgX01BWF9DT1VOVCA9IDEwCisgICAgX01BWF9DT1VOVCA9IDEwMAogICAgIGZvciBjb3VudCBpbiByYW5nZShfTUFYX0NPVU5UKToKICAgICAgICAgdmFsdWVzID0gX3RocmVhZC5fY291bnQoKSwgdGhyZWFkaW5nLl9kYW5nbGluZwogICAgICAgICBpZiB2YWx1ZXMgPT0gb3JpZ2luYWxfdmFsdWVzOgogICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKICAgICAgICAgZ2NfY29sbGVjdCgpCiAgICAgIyBYWFggcHJpbnQgYSB3YXJuaW5nIGluIGNhc2Ugb2YgZmFpbHVyZT8KIApAQCAtMTg4MSw3ICsxOTE0LDcgQEAKICAgICBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHJ1biBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tdW5pY2F0ZSgpIG1ldGhvZAogICAgIG9mIGEgc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3QuCiAgICAgIiIiCi0gICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnNcXVxyP1xuPyIsIGIiIiwgc3RkZXJyKS5zdHJpcCgpCisgICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXVxyP1xuPyIsIGIiIiwgc3RkZXJyKS5zdHJpcCgpCiAgICAgcmV0dXJuIHN0ZGVycgogCiBkZWYgYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCk6CkBAIC0yMDEyLDI3ICsyMDQ1LDgxIEBACiAgICAgcmV0dXJuIHRlc3QgaWYgb2sgZWxzZSB1bml0dGVzdC5za2lwKG1zZykodGVzdCkKIAogCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgICBkZWYgc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgIiIiRGlzYWJsZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nIFNldEVycm9yTW9kZS4iIiIKLSAgICAgICAgIyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMSUyOHY9dnMuODUlMjkuYXNweAotICAgICAgICAjIEdldEVycm9yTW9kZSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDMsCi0gICAgICAgICMgYnV0IFNldEVycm9yTW9kZSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSwgc28gd2UgY2FuIHVzZSB0aGF0Ci0gICAgICAgIGltcG9ydCBjdHlwZXMKLSAgICAgICAgazMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgotICAgICAgICBTRU1fTk9HUEZBVUxURVJST1JCT1ggPSAweDAyCi0gICAgICAgIG9sZF9lcnJvcl9tb2RlID0gazMyLlNldEVycm9yTW9kZShTRU1fTk9HUEZBVUxURVJST1JCT1gpCi0gICAgICAgIGszMi5TZXRFcnJvck1vZGUob2xkX2Vycm9yX21vZGUgfCBTRU1fTk9HUEZBVUxURVJST1JCT1gpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHlpZWxkCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlKQotZWxzZToKLSAgICAjIHRoaXMgaXMgYSBuby1vcCBmb3Igb3RoZXIgcGxhdGZvcm1zCi0gICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgICBkZWYgc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgeWllbGQKK2RlZiBmc19pc19jYXNlX2luc2Vuc2l0aXZlKGRpcmVjdG9yeSk6CisgICAgIiIiRGV0ZWN0cyBpZiB0aGUgZmlsZSBzeXN0ZW0gZm9yIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlzIGNhc2UtaW5zZW5zaXRpdmUuIiIiCisgICAgYmFzZV9mcCwgYmFzZV9wYXRoID0gdGVtcGZpbGUubWtzdGVtcChkaXI9ZGlyZWN0b3J5KQorICAgIGNhc2VfcGF0aCA9IGJhc2VfcGF0aC51cHBlcigpCisgICAgaWYgY2FzZV9wYXRoID09IGJhc2VfcGF0aDoKKyAgICAgICAgY2FzZV9wYXRoID0gYmFzZV9wYXRoLmxvd2VyKCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLnNhbWVmaWxlKGJhc2VfcGF0aCwgY2FzZV9wYXRoKQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZmluYWxseToKKyAgICAgICAgb3MudW5saW5rKGJhc2VfcGF0aCkKKworCitjbGFzcyBTdXBwcmVzc0NyYXNoUmVwb3J0OgorICAgICIiIlRyeSB0byBwcmV2ZW50IGEgY3Jhc2ggcmVwb3J0IGZyb20gcG9wcGluZyB1cC4KKworICAgIE9uIFdpbmRvd3MsIGRvbid0IGRpc3BsYXkgdGhlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZy4gIE9uIFVOSVgsCisgICAgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgY29yZWR1bXAgZmlsZS4KKyAgICAiIiIKKyAgICBvbGRfdmFsdWUgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJPbiBXaW5kb3dzLCBkaXNhYmxlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgICAgICAgU2V0RXJyb3JNb2RlLgorCisgICAgICAgIE9uIFVOSVgsIHRyeSB0byBzYXZlIHRoZSBwcmV2aW91cyBjb3JlIGZpbGUgc2l6ZSBsaW1pdCwgdGhlbiBzZXQKKyAgICAgICAgc29mdCBsaW1pdCB0byAwLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgIyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4CisgICAgICAgICAgICAjIEdldEVycm9yTW9kZSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDMsCisgICAgICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICAgICAgc2VsZi5fazMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgorICAgICAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgorICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUgfCBTRU1fTk9HUEZBVUxURVJST1JCT1gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgc2VsZi5vbGRfdmFsdWVbMV0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAorICAgICAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCisgICAgICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3QgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnLCBmbHVzaD1UcnVlKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmlnbm9yZV9leGMpOgorICAgICAgICAiIiJSZXN0b3JlIFdpbmRvd3MgRXJyb3JNb2RlIG9yIGNvcmUgZmlsZSBiZWhhdmlvciB0byBpbml0aWFsIHZhbHVlLiIiIgorICAgICAgICBpZiBzZWxmLm9sZF92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKIAogZGVmIHBhdGNoKHRlc3RfaW5zdGFuY2UsIG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpOgpAQCAtMjA2NywzICsyMTU0LDIyIEBACiAKICAgICAjIGFjdHVhbGx5IG92ZXJyaWRlIHRoZSBhdHRyaWJ1dGUKICAgICBzZXRhdHRyKG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpCisKKworZGVmIHJ1bl9pbl9zdWJpbnRlcnAoY29kZSk6CisgICAgIiIiCisgICAgUnVuIGNvZGUgaW4gYSBzdWJpbnRlcnByZXRlci4gUmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QgaWYgdGhlIHRyYWNlbWFsbG9jCisgICAgbW9kdWxlIGlzIGVuYWJsZWQuCisgICAgIiIiCisgICAgIyBJc3N1ZSAjMTA5MTUsICMxNTc1MTogUHlHSUxTdGF0ZV8qKCkgZnVuY3Rpb25zIGRvbid0IHdvcmsgd2l0aAorICAgICMgc3ViLWludGVycHJldGVycywgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSB1c2VzIHRoZXNlIGZ1bmN0aW9ucyBpbnRlcm5hbGx5CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgicnVuX2luX3N1YmludGVycCgpIGNhbm5vdCBiZSB1c2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbnMiKQorICAgIHJldHVybiBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CmluZGV4IDYwOGVjMDEuLjhjYzI4NWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKQEAgLTI5LDE3ICsyOSwyMCBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1ttb2RuYW1lXSwgIl9fYWxsX18iKToKICAgICAgICAgICAgIHJhaXNlIE5vQWxsKG1vZG5hbWUpCiAgICAgICAgIG5hbWVzID0ge30KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZwotICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKLSAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6Ci0gICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCi0gICAgICAgIGtleXMgPSBzZXQobmFtZXMpCi0gICAgICAgIGFsbCA9IHNldChzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbCkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZG5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQorICAgICAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQorICAgICAgICAgICAga2V5cyA9IHNldChuYW1lcykKKyAgICAgICAgICAgIGFsbF9saXN0ID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXworICAgICAgICAgICAgYWxsX3NldCA9IHNldChhbGxfbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhbGxfc2V0LCBhbGxfbGlzdCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGxfc2V0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCiAKICAgICBkZWYgd2Fsa19tb2R1bGVzKHNlbGYsIGJhc2VkaXIsIG1vZHBhdGgpOgogICAgICAgICBmb3IgZm4gaW4gc29ydGVkKG9zLmxpc3RkaXIoYmFzZWRpcikpOgpAQCAtMTEwLDggKzExMyw1IEBACiAgICAgICAgICAgICBwcmludCgnRm9sbG93aW5nIG1vZHVsZXMgZmFpbGVkIHRvIGJlIGltcG9ydGVkOicsIGZhaWxlZF9pbXBvcnRzKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBbGxUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgZGlzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKKworX29wY29kZSA9IGltcG9ydF9tb2R1bGUoIl9vcGNvZGUiKQorCitjbGFzcyBPcGNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFja19lZmZlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydQT1BfVE9QJ10pLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0RVUF9UT1BfVFdPJ10pLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMCksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSwgMyksIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgMzAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ1BPUF9UT1AnXSwgMCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQppbmRleCBkNGQ3NTU2Li45M2Y5ZGFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQpAQCAtNjgsNiArNjgsMTkgQEAKIAogY2xhc3MgVGVzdEFCQyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9BQkNfaGVscGVyKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhbiBBQkMgdXNpbmcgdGhlIGhlbHBlciBjbGFzcyBhbmQgcGVyZm9ybSBiYXNpYyBjaGVja3MKKyAgICAgICAgY2xhc3MgQyhhYmMuQUJDKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiByZXR1cm4gY2xzLl9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShDKSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQykKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiByZXR1cm4gc3VwZXIoKS5mb28oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKCksICdEJykKKwogICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kX2Jhc2ljcyhzZWxmKToKICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCkBAIC0yODgsNyArMzAxLDEwIEBACiAgICAgICAgIGIgPSBCKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCisgICAgICAgIHRva2VuX29sZCA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQogICAgICAgICBBLnJlZ2lzdGVyKEIpCisgICAgICAgIHRva2VuX25ldyA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRva2VuX29sZCwgdG9rZW5fbmV3KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCBBKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQppbmRleCBiNzczNTRiLi4wNDFiMjM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBURVNURk4sIHVubGluawogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCkBAIC04LDEwICs5LDE3IEBACiBpbXBvcnQgYWlmYwogCiAKLWNsYXNzIEFpZmNQQ004VGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEFpZmNUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAorICAgICAgICAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUpOgogICAgIG1vZHVsZSA9IGFpZmMKKyAgICBjbG9zZV9mZCA9IFRydWUKKyAgICB0ZXN0X3Vuc2Vla2FibGVfcmVhZCA9IE5vbmUKKyAgICB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUgPSBOb25lCisgICAgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlID0gTm9uZQorICAgIHRlc3RfdW5zZWVrYWJsZV9vdmVyZmxvd2VkX3dyaXRlID0gTm9uZQorCisKK2NsYXNzIEFpZmNQQ004VGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLXBjbTguYWlmZicKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC0yNiwxMyArMzQsOSBAQAogICAgICAgMTFGQSAzRUZCIEJDRkMgNjZGRiBDRjA0IDQzMDkgQzEwRSA1MTEyIEVFMTcgODIxNiA3RjE0IDgwMTIgXAogICAgICAgNDkwRSA1MjBEIEVGMEYgQ0UwRiBFNDBDIDYzMEEgMDgwQSAyQjBCIDUxMEUgOEIxMSBCNjBFIDQ0MEEgXAogICAgICAgIiIiKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQogCiAKLWNsYXNzIEFpZmNQQ00xNlRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gYWlmYworY2xhc3MgQWlmY1BDTTE2VGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLXBjbTE2LmFpZmYnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtNDksMTMgKzUzLDkgQEAKICAgICAgIEVFRTIxNzUzIDgyMDcxNjY1IDdGRkYxNDQzIDgwMDQxMjhGIDQ5QTIwRUFGIDUyQkIwREJBIEVGQjQwRjYwIENFM0MwRkJGIFwKICAgICAgIEU0QjMwQ0VDIDYzNDMwQTVDIDA4QzgwQTIwIDJCQkIwQjA4IDUxNEEwRTQzIDhCQ0YxMTM5IEI2RjYwRUVCIDQ0MTIwQTVFIFwKICAgICAgICIiIikKLSAgICBjbG9zZV9mZCA9IFRydWUKIAogCi1jbGFzcyBBaWZjUENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vZHVsZSA9IGFpZmMKK2NsYXNzIEFpZmNQQ00yNFRlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20yNC5haWZmJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTc4LDEzICs3OCw5IEBACiAgICAgICBFNEI0OUMwQ0VBMkQgNjM0NEE4MEE1QTdDIDA4QzhGRTBBMUZGRSAyQkI5ODYwQjBBMEUgXAogICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKICAgICAgICIiIikKLSAgICBjbG9zZV9mZCA9IFRydWUKIAogCi1jbGFzcyBBaWZjUENNMzJUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vZHVsZSA9IGFpZmMKK2NsYXNzIEFpZmNQQ00zMlRlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20zMi5haWZmJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTEwNywxMyArMTAzLDkgQEAKICAgICAgIEU0QjQ5Q0MwMENFQTJEOTAgNjM0NEE4ODAwQTVBN0NBMCAwOEM4RkU4MDBBMUZGRUUwIDJCQjk4NkMwMEIwQTBFMDAgXAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCi0gICAgY2xvc2VfZmQgPSBUcnVlCiAKIAotY2xhc3MgQWlmY1VMQVdUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vZHVsZSA9IGFpZmMKK2NsYXNzIEFpZmNVTEFXVGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNuZGZpbGVuYW1lID0gJ3BsdWNrLXVsYXcuYWlmYycKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC0xMzEsMTQgKzEyMywxMCBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKLSAgICBjbG9zZV9mZCA9IFRydWUKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKLWNsYXNzIEFpZmNBTEFXVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBhaWZjCitjbGFzcyBBaWZjQUxBV1Rlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1hbGF3LmFpZmMnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtMTU2LDggKzE0NCw3IEBACiAgICAgICBFNDgwMENDMCA2MjAwMEE0MCAwOEMwMEE0MCAyQjAwMEI0MCA1MjAwMEU0MCA4QTAwMTE4MCBCNjAwMEVDMCA0NjAwMEE0MCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogY2xhc3MgQWlmY01pc2NUZXN0KGF1ZGlvdGVzdHMuQXVkaW9UZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTY2LDYgKzE1MywyMSBAQAogICAgICAgICAjVGhpcyBmaWxlIGNvbnRhaW5zIGNodW5rIHR5cGVzIGFpZmMgZG9lc24ndCByZWNvZ25pemUuCiAgICAgICAgIHNlbGYuZiA9IGFpZmMub3BlbihmaW5kZmlsZSgnU2luZS0xMDAwSHotMzAwbXMuYWlmJykpCiAKKyAgICBkZWYgdGVzdF9wYXJhbXNfYWRkZWQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmLmFpZmYoKQorICAgICAgICBmLnNldHBhcmFtcygoMSwgMSwgMSwgMSwgYidOT05FJywgYicnKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBmLmdldG5jaGFubmVscygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIGYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgZi5nZXRmcmFtZXJhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgZi5nZXRuZnJhbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBmLmdldGNvbXB0eXBlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXBuYW1lLCBmLmdldGNvbXBuYW1lKCkpCisKICAgICBkZWYgdGVzdF93cml0ZV9oZWFkZXJfY29tcHR5cGVfc2FtcHdpZHRoKHNlbGYpOgogICAgICAgICBmb3IgY29tcHR5cGUgaW4gKGInVUxBVycsIGIndWxhdycsIGInQUxBVycsIGInYWxhdycsIGInRzcyMicpOgogICAgICAgICAgICAgZm91dCA9IGFpZmMub3Blbihpby5CeXRlc0lPKCksICd3YicpCkBAIC0zNjksMTIgKzM3MSwxNCBAQAogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYWlmZl9ieV9leHRlbnNpb24oc2VsZik6CiAgICAgICAgIHNhbXB3aWR0aCA9IDIKLSAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAnd2InKQorICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICcuYWlmZicKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3diJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgZmlsZW5hbWUpCiAgICAgICAgIGZvdXQuc2V0cGFyYW1zKCgxLCBzYW1wd2lkdGgsIDEsIDEsIGInVUxBVycsIGInJykpCiAgICAgICAgIGZyYW1lcyA9IGInXHgwMCcgKiBmb3V0LmdldG5jaGFubmVscygpICogc2FtcHdpZHRoCiAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZnJhbWVzKQogICAgICAgICBmb3V0LmNsb3NlKCkKLSAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAncmInKQorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKGZpbGVuYW1lLCAncmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcHR5cGUoKSwgYidOT05FJykKICAgICAgICAgZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CmluZGV4IGMwNmM5NDAuLmMxMGM1OTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMTQsNiArMTQsNyBAQAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBjbGFzcyBTdGRJT0J1ZmZlcihTdHJpbmdJTyk6CiAgICAgcGFzcwogCkBAIC0xNDIxLDYgKzE0MjIsMTkgQEAKICAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3YicsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3YicsIDEpIiwgcmVwcih0eXBlKSkKIAorICAgIGRlZiB0ZXN0X3JfbGF0aW4oc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InLCBlbmNvZGluZz0nbGF0aW5fMScpIiwgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3dfYmlnNV9pZ25vcmUoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3JfMV9yZXBsYWNlKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InLCAxLCBlcnJvcnM9J3JlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpIiwgcmVwcih0eXBlKSkKKwogCiBjbGFzcyBSRmlsZShvYmplY3QpOgogICAgIHNlZW4gPSB7fQpAQCAtMTU1Nyw2ICsxNTcxLDI0IEBACiAgICAgXQogCiAKK2NsYXNzIFRlc3RGaWxlVHlwZU9wZW5BcmdzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3BlbiAodGhlIGJ1aWx0aW4pIGlzIGNvcnJlY3RseSBjYWxsZWQiIiIKKworICAgIGRlZiB0ZXN0X29wZW5fYXJncyhzZWxmKToKKyAgICAgICAgRlQgPSBhcmdwYXJzZS5GaWxlVHlwZQorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgIChGVCgncmInKSwgKCdyYicsIC0xLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAxKSwgKCd3JywgMSwgTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgZXJyb3JzPSdyZXBsYWNlJyksICgndycsIC0xLCBOb25lLCAncmVwbGFjZScpKSwKKyAgICAgICAgICAgIChGVCgnd2InLCBlbmNvZGluZz0nYmlnNScpLCAoJ3diJywgLTEsICdiaWc1JywgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgMCwgJ2wxJywgJ3N0cmljdCcpLCAoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JykpLAorICAgICAgICBdCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYnVpbHRpbnMub3BlbicpIGFzIG06CisgICAgICAgICAgICBmb3IgdHlwZSwgYXJncyBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICB0eXBlKCdmb28nKQorICAgICAgICAgICAgICAgIG0uYXNzZXJ0X2NhbGxlZF93aXRoKCdmb28nLCAqYXJncykKKworCiBjbGFzcyBUZXN0VHlwZUNhbGxhYmxlKFBhcnNlclRlc3RDYXNlKToKICAgICAiIiJUZXN0IHNvbWUgY2FsbGFibGVzIGFzIG9wdGlvbi9hcmd1bWVudCB0eXBlcyIiIgogCkBAIC00MzI3LDcgKzQzNTksNyBAQAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fZm9ybWF0KHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUFAnKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjUnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgpAQCAtNDM0MCw3ICs0MzcyLDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2FjdGlvbihzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nWFhYJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLVYnLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjcnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWFhYIDMuN1xuJywgbXNnKQogCiAgICAgZGVmIHRlc3Rfbm9faGVscChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CmluZGV4IGNjY2I3MDUuLjQ5NzhjNDQgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtMzU0LDEyICszNTQsMTIgQEAKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZnJvbWZpbGVfaW9lcnJvcihzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAjNTM5NTogQ2hlY2sgaWYgZnJvbWZpbGUgcmFpc2VzIGEgcHJvcGVyIElPRXJyb3IKKyAgICAgICAgIyBJc3N1ZSAjNTM5NTogQ2hlY2sgaWYgZnJvbWZpbGUgcmFpc2VzIGEgcHJvcGVyIE9TRXJyb3IKICAgICAgICAgIyBpbnN0ZWFkIG9mIEVPRkVycm9yLgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYS5mcm9tZmlsZSwgZiwgbGVuKHNlbGYuZXhhbXBsZSkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQppbmRleCA2MzUyODg4Li5lNjk0MjJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtMTgwLDIwICsxODAsMzYgQEAKIAogY2xhc3MgQVNUX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBfYXNzZXJ0VHJ1ZW9yZGVyKHNlbGYsIGFzdF9ub2RlLCBwYXJlbnRfcG9zKToKKyAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3BvcywgcmV2ZXJzZV9jaGVjayA9IEZhbHNlKToKKyAgICAgICAgZGVmIHNob3VsZF9yZXZlcnNlX2NoZWNrKHBhcmVudCwgY2hpbGQpOgorICAgICAgICAgICAgIyBJbiBzb21lIHNpdHVhdGlvbnMsIHRoZSBjaGlsZHJlbiBvZiBub2RlcyBvY2N1ciBiZWZvcmUKKyAgICAgICAgICAgICMgdGhlaXIgcGFyZW50cywgZm9yIGV4YW1wbGUgaW4gYS5iLmMsIGEgb2NjdXJzIGJlZm9yZSBiCisgICAgICAgICAgICAjIGJ1dCBhIGlzIGEgY2hpbGQgb2YgYi4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyZW50LCBhc3QuQ2FsbCk6CisgICAgICAgICAgICAgICAgaWYgcGFyZW50LmZ1bmMgPT0gY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmVudCwgKGFzdC5BdHRyaWJ1dGUsIGFzdC5TdWJzY3JpcHQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXN0X25vZGUsIGFzdC5BU1QpIG9yIGFzdF9ub2RlLl9maWVsZHMgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBpc2luc3RhbmNlKGFzdF9ub2RlLCAoYXN0LmV4cHIsIGFzdC5zdG10LCBhc3QuZXhjZXB0aGFuZGxlcikpOgogICAgICAgICAgICAgbm9kZV9wb3MgPSAoYXN0X25vZGUubGluZW5vLCBhc3Rfbm9kZS5jb2xfb2Zmc2V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zID49IHBhcmVudF9wb3MpCisgICAgICAgICAgICBpZiByZXZlcnNlX2NoZWNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA8PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPj0gcGFyZW50X3BvcykKICAgICAgICAgICAgIHBhcmVudF9wb3MgPSAoYXN0X25vZGUubGluZW5vLCBhc3Rfbm9kZS5jb2xfb2Zmc2V0KQogICAgICAgICBmb3IgbmFtZSBpbiBhc3Rfbm9kZS5fZmllbGRzOgogICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGFzdF9ub2RlLCBuYW1lKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHZhbHVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihjaGlsZCwgcGFyZW50X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkX3JldmVyc2VfY2hlY2soYXN0X25vZGUsIGNoaWxkKSkKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcih2YWx1ZSwgcGFyZW50X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkX3JldmVyc2VfY2hlY2soYXN0X25vZGUsIHZhbHVlKSkKIAogICAgIGRlZiB0ZXN0X0FTVF9vYmplY3RzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LkFTVCgpCkBAIC0yNjIsMTQgKzI3OCwxNCBAQAogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywgJ3ZhcmFyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dvbmx5YXJncycsICdrd2FyZycsICdrd2FyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdHMnLCAna3dfZGVmYXVsdHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dvbmx5YXJncycsICdrd19kZWZhdWx0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd2FyZycsICdkZWZhdWx0cycpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgeC52YXJhcmcKIAotICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygqcmFuZ2UoMSwgOSkpCisgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA3KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhcmFyZywgMikKIAogICAgIGRlZiB0ZXN0X2ZpZWxkX2F0dHJfd3JpdGFibGUoc2VsZik6CkBAIC00MzksNyArNDU1LDcgQEAKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgYXJncz1bTmFtZShpZD0nZWdncycsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD01KSwgU3RyKHM9J2FuZCBjaGVlc2UnLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MTEpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCi0gICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2NvcHlfbG9jYXRpb24oc2VsZik6CkBAIC00NjAsNyArNDc2LDcgQEAKICAgICAgICAgICAgICJNb2R1bGUoYm9keT1bRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nd3JpdGUnLCBjdHg9TG9hZCgpLCAiCiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdzcGFtJywgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTYpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCi0gICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NSksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAiCiAgICAgICAgICAgICAiRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nc3BhbScsIGN0eD1Mb2FkKCksIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD0wKSwgYXJncz1bU3RyKHM9J2VnZ3MnLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0sICIKICAgICAgICAgICAgICJrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsIGxpbmVubz0xLCAiCkBAIC01NjAsOCArNTc2LDggQEAKICAgICAgICAgc2VsZi5tb2QobSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiLCAiZXZhbCIpCiAKICAgICBkZWYgX2NoZWNrX2FyZ3VtZW50cyhzZWxmLCBmYWMsIGNoZWNrKToKLSAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLCB2YXJhcmdhbm5vdGF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLCBrd2FyZ2Fubm90YXRpb249Tm9uZSwKKyAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3M9Tm9uZSwga3dhcmc9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz1Ob25lLCBrd19kZWZhdWx0cz1Ob25lKToKICAgICAgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKICAgICAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTU3MSwyMCArNTg3LDEyIEBACiAgICAgICAgICAgICAgICAgZGVmYXVsdHMgPSBbXQogICAgICAgICAgICAgaWYga3dfZGVmYXVsdHMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrd19kZWZhdWx0cyA9IFtdCi0gICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMpCisgICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGRlZmF1bHRzKQogICAgICAgICAgICAgcmV0dXJuIGZhYyhhcmdzKQogICAgICAgICBhcmdzID0gW2FzdC5hcmcoIngiLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSldCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhhcmdzPWFyZ3MpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyh2YXJhcmdhbm5vdGF0aW9uPWFzdC5OdW0oMykpLAotICAgICAgICAgICAgICAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSksIHZhcmFyZz0ieCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3b25seWFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTnVtKDQyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmc9IngiKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoZGVmYXVsdHM9W2FzdC5OdW0oMyldKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm1vcmUgcG9zaXRpb25hbCBkZWZhdWx0cyB0aGFuIGFyZ3MiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dfZGVmYXVsdHM9W2FzdC5OdW0oNCldKSwKQEAgLTU5OSw3ICs2MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9mdW5jZGVmKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbXSwgW10sIE5vbmUpCiAgICAgICAgIHNlbGYuc3RtdChmLCAiZW1wdHkgYm9keSBvbiBGdW5jdGlvbkRlZiIpCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbYXN0LlBhc3MoKV0sIFthc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKV0sCkBAIC03NzAsNyArNzc4LDcgQEAKICAgICAgICAgc2VsZi5leHByKHUsICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2xhbWJkYShzZWxmKToKLSAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pCisgICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKQogICAgICAgICBzZWxmLmV4cHIoYXN0LkxhbWJkYShhLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSksCiAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGRlZiBmYWMoYXJncyk6CkBAIC05MjgsNiArOTM2LDkgQEAKICAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKICAgICAgICAgc2VsZi5fc2VxdWVuY2UoYXN0LlR1cGxlKQogCisgICAgZGVmIHRlc3RfbmFtZWNvbnN0YW50KHNlbGYpOgorICAgICAgICBzZWxmLmV4cHIoYXN0Lk5hbWVDb25zdGFudCg0KSwgInNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIikKKwogICAgIGRlZiB0ZXN0X3N0ZGxpYl92YWxpZGF0ZXMoc2VsZik6CiAgICAgICAgIHN0ZGxpYiA9IG9zLnBhdGguZGlybmFtZShhc3QuX19maWxlX18pCiAgICAgICAgIHRlc3RzID0gW2ZuIGZvciBmbiBpbiBvcy5saXN0ZGlyKHN0ZGxpYikgaWYgZm4uZW5kc3dpdGgoIi5weSIpXQpAQCAtOTM2LDEzICs5NDcsMTAgQEAKICAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHN0ZGxpYiwgbW9kdWxlKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSkKKyAgICAgICAgICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UsIGZuKQogICAgICAgICAgICAgY29tcGlsZShtb2QsIGZuLCAiZXhlYyIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFTVF9UZXN0cywgQVNUSGVscGVyc19UZXN0LCBBU1RWYWxpZGF0b3JUZXN0cykKLQogZGVmIG1haW4oKToKICAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgogICAgICAgICByZXR1cm4KQEAgLTk1NSwyMCArOTYzLDIwIEBACiAgICAgICAgICAgICBwcmludCgiXSIpCiAgICAgICAgIHByaW50KCJtYWluKCkiKQogICAgICAgICByYWlzZSBTeXN0ZW1FeGl0Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKIAogIyMjIyBFVkVSWVRISU5HIEJFTE9XIElTIEdFTkVSQVRFRCAjIyMjIwogZXhlY19yZXN1bHRzID0gWwotKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKV0sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAnYXJncycsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpLCAoJ2FyZycsICdiJywgTm9uZSksICgnYXJnJywgJ2MnLCBOb25lKSwgKCdhcmcnLCAnZCcsIE5vbmUpLCAoJ2FyZycsICdlJywgTm9uZSldLCAnYXJncycsIE5vbmUsIFtdLCAna3dhcmdzJywgTm9uZSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZScsICgxLCAxNiksICdOb25lJywgKCdMb2FkJywpKSwgKCdMaXN0JywgKDEsIDI0KSwgW10sICgnTG9hZCcsKSksICgnRGljdCcsICgxLCAzMCksIFtdLCBbXSldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgNTIpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSldLCBOb25lLCBbXSwgW10sIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICgnYXJnJywgKDEsIDcpLCAnYXJncycsIE5vbmUpLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgKCdhcmcnLCAoMSwgOCksICdrd2FyZ3MnLCBOb25lKSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSksICgnYXJnJywgKDEsIDkpLCAnYicsIE5vbmUpLCAoJ2FyZycsICgxLCAxNCksICdjJywgTm9uZSksICgnYXJnJywgKDEsIDIyKSwgJ2QnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjgpLCAnZScsIE5vbmUpXSwgKCdhcmcnLCAoMSwgMzUpLCAnYXJncycsIE5vbmUpLCBbXSwgW10sICgnYXJnJywgKDEsIDQzKSwgJ2t3YXJncycsIE5vbmUpLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMTYpLCBOb25lKSwgKCdMaXN0JywgKDEsIDI0KSwgW10sICgnTG9hZCcsKSksICgnRGljdCcsICgxLCAzMCksIFtdLCBbXSldKSwgWygnUGFzcycsICgxLCA1MikpXSwgW10sIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFtdLCBbXSwgTm9uZSwgTm9uZSwgWygnUGFzcycsICgxLCA4KSldLCBbXSldKSwKICgnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgWygnTmFtZScsICgxLCA4KSwgJ29iamVjdCcsICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSwgWygnUGFzcycsICgxLCAxNykpXSwgW10pXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdSZXR1cm4nLCAoMSwgOCksICgnTnVtJywgKDEsIDE1KSwgMSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdSZXR1cm4nLCAoMSwgOCksICgnTnVtJywgKDEsIDE1KSwgMSkpXSwgW10sIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ0RlbGV0ZScsICgxLCAwKSwgWygnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0RlbCcsKSldKV0pLAogKCdNb2R1bGUnLCBbKCdBc3NpZ24nLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSldLCAoJ051bScsICgxLCA0KSwgMSkpXSksCiAoJ01vZHVsZScsIFsoJ0F1Z0Fzc2lnbicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgNSksIDEpKV0pLApAQCAtOTc3LDcgKzk4NSw3IEBACiAoJ01vZHVsZScsIFsoJ0lmJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMyksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCA1KSldLCBbXSldKSwKICgnTW9kdWxlJywgWygnV2l0aCcsICgxLCAwKSwgWygnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgNSksICd4JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDEwKSwgJ3knLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDEzKSldKV0pLAogKCdNb2R1bGUnLCBbKCdXaXRoJywgKDEsIDApLCBbKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCA1KSwgJ3gnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTApLCAneScsICgnU3RvcmUnLCkpKSwgKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCAxMyksICd6JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ3EnLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDIxKSldKV0pLAotKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdDYWxsJywgKDEsIDYpLCAoJ05hbWUnLCAoMSwgNiksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBbKCdTdHInLCAoMSwgMTYpLCAnc3RyaW5nJyldLCBbXSwgTm9uZSwgTm9uZSksIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ1JhaXNlJywgKDEsIDApLCAoJ0NhbGwnLCAoMSwgMTUpLCAoJ05hbWUnLCAoMSwgNiksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBbKCdTdHInLCAoMSwgMTYpLCAnc3RyaW5nJyldLCBbXSwgTm9uZSwgTm9uZSksIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ1RyeScsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbKCdFeGNlcHRIYW5kbGVyJywgKDMsIDApLCAoJ05hbWUnLCAoMywgNyksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBOb25lLCBbKCdQYXNzJywgKDQsIDIpKV0pXSwgW10sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdUcnknLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgW10sIFtdLCBbKCdQYXNzJywgKDQsIDIpKV0pXSksCiAoJ01vZHVsZScsIFsoJ0Fzc2VydCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDcpLCAndicsICgnTG9hZCcsKSksIE5vbmUpXSksCkBAIC0xMDAyLDI5ICsxMDEwLDI5IEBACiAoJ0ludGVyYWN0aXZlJywgWygnRXhwcicsICgxLCAwKSwgKCdCaW5PcCcsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgMiksIDIpKSldKSwKIF0KIGV2YWxfcmVzdWx0cyA9IFsKLSgnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnTmFtZUNvbnN0YW50JywgKDEsIDApLCBOb25lKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0Jvb2xPcCcsICgxLCAwKSwgKCdBbmQnLCksIFsoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnTG9hZCcsKSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdBZGQnLCksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1VuYXJ5T3AnLCAoMSwgMCksICgnTm90JywpLCAoJ05hbWUnLCAoMSwgNCksICd2JywgKCdMb2FkJywpKSkpLAotKCdFeHByZXNzaW9uJywgKCdMYW1iZGEnLCAoMSwgMCksICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCAoJ05hbWUnLCAoMSwgNyksICdOb25lJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdMYW1iZGEnLCAoMSwgMCksICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCAoJ05hbWVDb25zdGFudCcsICgxLCA3KSwgTm9uZSkpKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDIpLCAxKV0sIFsoJ051bScsICgxLCA0KSwgMildKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFtdLCBbXSkpLAotKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMSksICdOb25lJywgKCdMb2FkJywpKV0pKSwKKygnRXhwcmVzc2lvbicsICgnU2V0JywgKDEsIDApLCBbKCdOYW1lQ29uc3RhbnQnLCAoMSwgMSksIE5vbmUpXSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMiwgNiksIDEpXSwgWygnTnVtJywgKDQsIDEwKSwgMildKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdDb21wYXJlJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksIFsoJ0x0JywpLCAoJ0x0JywpXSwgWygnTnVtJywgKDEsIDQpLCAyKSwgKCdOdW0nLCAoMSwgOCksIDMpXSkpLAotKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpXSwgWygna2V5d29yZCcsICdjJywgKCdOdW0nLCAoMSwgOCksIDMpKV0sICgnTmFtZScsICgxLCAxMSksICdkJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE1KSwgJ2UnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMSksICgnTmFtZScsICgxLCAwKSwgJ2YnLCAoJ0xvYWQnLCkpLCBbKCdOdW0nLCAoMSwgMiksIDEpLCAoJ051bScsICgxLCA0KSwgMildLCBbKCdrZXl3b3JkJywgJ2MnLCAoJ051bScsICgxLCA4KSwgMykpXSwgKCdOYW1lJywgKDEsIDExKSwgJ2QnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTUpLCAnZScsICgnTG9hZCcsKSkpKSwKICgnRXhwcmVzc2lvbicsICgnTnVtJywgKDEsIDApLCAxMCkpLAogKCdFeHByZXNzaW9uJywgKCdTdHInLCAoMSwgMCksICdzdHJpbmcnKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ1N1YnNjcmlwdCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ05hbWUnLCAoMSwgMiksICdiJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYycsICgnTG9hZCcsKSksIE5vbmUpLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnU3Vic2NyaXB0JywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTmFtZScsICgxLCAyKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdjJywgKCdMb2FkJywpKSwgTm9uZSksICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAndicsICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMSksIDEpLCAoJ051bScsICgxLCAzKSwgMiksICgnTnVtJywgKDEsIDUpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMCksIDEpLCAoJ051bScsICgxLCAyKSwgMiksICgnTnVtJywgKDEsIDQpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAxKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCA4KSwgKCdBdHRyaWJ1dGUnLCAoMSwgOCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgNyksICgnQXR0cmlidXRlJywgKDEsIDYpLCAoJ0F0dHJpYnV0ZScsICgxLCA0KSwgKCdBdHRyaWJ1dGUnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgMTIpLCAoJ0F0dHJpYnV0ZScsICgxLCAxMCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCiBdCiBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CmluZGV4IGM3OWZlNmYuLmY5M2E1MmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQpAQCAtMTUsNiArMTUsNyBAQAogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiBTRVJWRVJfUVVJVCA9IGInUVVJVFxuJworVElNRU9VVCA9IDMuMAogCiBpZiB0aHJlYWRpbmc6CiAgICAgY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CkBAIC0xMjMsNyArMTI0LDkgQEAKICAgICAgICAgYy5wdXNoKGIiSSdtIG5vdCBkZWFkIHlldCEiICsgdGVybSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0xNTQsNyArMTU3LDkgQEAKICAgICAgICAgYy5wdXNoKGRhdGEpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbZGF0YVs6dGVybWxlbl1dKQogCkBAIC0xNzQsNyArMTc5LDkgQEAKICAgICAgICAgYy5wdXNoKGRhdGEpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmJ1ZmZlciwgZGF0YSkKQEAgLTE4Niw3ICsxOTMsOSBAQAogICAgICAgICBwID0gYXN5bmNoYXQuc2ltcGxlX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQsIGJ1ZmZlcl9zaXplPTgpCiAgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKHApCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTE5Niw3ICsyMDUsOSBAQAogICAgICAgICBkYXRhID0gYiJoZWxsbyB3b3JsZFxuSSdtIG5vdCBkZWFkIHlldCFcbiIKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMjA3LDcgKzIxOCw5IEBACiAgICAgICAgIGMucHVzaChiImhlbGxvIHdvcmxkXG5cbkknbSBub3QgZGVhZCB5ZXQhXG4iKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICBbYiJoZWxsbyB3b3JsZCIsIGIiIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQpAQCAtMjI2LDcgKzIzOSw5IEBACiAgICAgICAgICMgd2hlcmUgdGhlIHNlcnZlciBlY2hvZXMgYWxsIG9mIGl0cyBkYXRhIGJlZm9yZSB3ZSBjYW4gY2hlY2sgdGhhdCBpdAogICAgICAgICAjIGdvdCBhbnkgZG93biBiZWxvdy4KICAgICAgICAgcy5zdGFydF9yZXNlbmRfZXZlbnQuc2V0KCkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICAjIHRoZSBzZXJ2ZXIgbWlnaHQgaGF2ZSBiZWVuIGFibGUgdG8gc2VuZCBhIGJ5dGUgb3IgdHdvIGJhY2ssIGJ1dCB0aGlzCkBAIC0yNjgsOSArMjgzLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMCwgTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBc3luY2hhdCwgVGVzdEFzeW5jaGF0X1dpdGhQb2xsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlckZ1bmN0aW9ucywgVGVzdEZpZm8pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2NlNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIHRocmVhZGluZy4KK2ltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisjIFNraXAgdGVzdHMgaWYgd2UgZG9uJ3QgaGF2ZSBjb25jdXJyZW50LmZ1dHVyZXMuCitpbXBvcnRfbW9kdWxlKCdjb25jdXJyZW50LmZ1dHVyZXMnKQorCisKK2RlZiBzdWl0ZSgpOgorICAgIHRlc3RzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3Rlc3RzLnR4dCcpCisgICAgd2l0aCBvcGVuKHRlc3RzX2ZpbGUpIGFzIGZwOgorICAgICAgICB0ZXN0X25hbWVzID0gZnAucmVhZCgpLnNwbGl0bGluZXMoKQorICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICBmb3IgdGVzdF9uYW1lIGluIHRlc3RfbmFtZXM6CisgICAgICAgIG1vZF9uYW1lID0gJ3Rlc3QuJyArIHRlc3RfbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KKyAgICAgICAgICAgIHRlc3RzLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZCkpCisgICAgcmV0dXJuIHRlc3RzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChzdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDk0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKQEAgLTAsMCArMSw1IEBACitmcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MzY0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5CkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgb3Mud3JpdGUoMSwgYnVmKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2NhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgb3Mud3JpdGUoMSwgYidPVVQ6JytidWYpCisgICAgb3Mud3JpdGUoMiwgYidFUlI6JytidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NDk2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICBvcy53cml0ZSgyLCBiJ0VSUjonICsgZXguX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgnYXNjaWknKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUuY3J0IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExZTNmMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUuY3J0CkBAIC0wLDAgKzEsMTQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ016Q0NBWndDQ1FERmw0eXMwZlU3aVRBTkJna3Foa2lHOXcwQkFRVUZBREJlTVFzd0NRWURWUVFHRXdKVgorVXpFVE1CRUdBMVVFQ0F3S1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ3d05VMkZ1TFVaeVlXNWphWE5qYnpFaQorTUNBR0ExVUVDZ3daVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2Ym1SaGRHbHZiakFlRncweE16QXpNVGd5TURBMworTWpoYUZ3MHlNekF6TVRZeU1EQTNNamhhTUY0eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBEWVd4cAorWm05eWJtbGhNUll3RkFZRFZRUUhEQTFUWVc0dFJuSmhibU5wYzJOdk1TSXdJQVlEVlFRS0RCbFFlWFJvYjI0ZworVTI5bWRIZGhjbVVnUm05dVpHRjBhVzl1TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDbgordDNzK0o3TDB4UC9ZZEFRT2FjcFBpOXBobHJ6S1poY1hMM1hNdTJMQ1VnMmZOSnB4LzQ3VmM1VFpTYU8xMXVPNworZ2R3VnozWjdRMmVwQWd3bzU5SkxmZkx0NWZpYTgrYS9TbFB3ZUkvajQrd2NJSUlpcXVzbkxmcHFSOGNJQWF2ZworWjA2Y0xZQ0R2Yjl3TWxoZUl2U0pZMTJza2Mxbm5waFdTMllKMFhtNnVRSURBUUFCTUEwR0NTcUdTSWIzRFFFQgorQlFVQUE0R0JBRTlQa25HNnB2NzIrNXovZ3NER1l5OHNLNVVOa2JXU05yNGk0ZTVseFZzRjAzKy9NNzFIKzNBQgorTXhWWDQrQStWbGsyZm1VK0JyZEhJSVVFMHIxZERjTzNqb3NROWhjOU9KcHA1VkxTUUZQOFZldUpDbXpZUHA5SQorSThXYlc5M2NuWG5DaFRyWVFWZGdWb0ZkdjdHRTlZZ1U3TllrckdJTTBuWmwxL2YvYkhQQgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5rZXkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZlYThkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5rZXkKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hRSUJBQUtCZ1FDbnQzcytKN0wweFAvWWRBUU9hY3BQaTlwaGxyektaaGNYTDNYTXUyTENVZzJmTkpweAorLzQ3VmM1VFpTYU8xMXVPN2dkd1Z6M1o3UTJlcEFnd281OUpMZmZMdDVmaWE4K2EvU2xQd2VJL2o0K3djSUlJaQorcXVzbkxmcHFSOGNJQWF2Z1owNmNMWUNEdmI5d01saGVJdlNKWTEyc2tjMW5ucGhXUzJZSjBYbTZ1UUlEQVFBQgorQW9HQUJmbThrMTlZdWUzVzY4QmVjS0VHUzBWQlY1N0dSVFBUK01pQkd2VkdOSVExNWdrNnczc0dmTVpzZEQxeQorYnNVa1FnY0RiMmQvNGk1cG9CVHBsLytDZDQxVitjMjBJQy9zU2w1WDFJRXJlSE1LU0xoeS91eWp5aXlmWGxQMQoraVhoVG9GQ2dMV3dFTldjOEx6ZlVWOHZ1QVY1V0c2b0w5Ym51ZFd6WnhlcXg4VjBDUVFEUjd4d1ZqNkxONzBFYgorRFVoU0tMa3VzbUZ3NUdrOU5KLzd3WjRlSGc0QjhjOUtOVnZTbExDTGhjc1ZUUVh1cVllRnBPcXl0STQ1U25lUAorbHIwdnJ2c0RBa0VBeklUWWlYdTZveDVodURDRzdpbVgyVzlDQVl1WDYzOHVyTHhCcUJYTVM3R3FCem9qRDZSTAorMjFROG9Qd0pXSnF1RVJhM0hEU2NxMWRlaVFiTTl1S0lrd0pCQUlhMVBMc2xHTjIxNlh2M1VQSFBTY3lLRC9hRgoreW5YSXYrT25BTlBvaXlwNlJINGtzUS8xOHpjRUdpVkg4RWVOcHZWOXRsQUhoYitEWmliUUhnTnI3NHNDUVFDMAoremhUb3BsdS9iVktTbFVRVU5PMHJxckk5ejMwRkVyRGV3S2VDdzVLU3NJUlNVMUUvdU0zZkhyOWl5cTR3aUw2dQorR05qVXRLWjB5NDZsc1Q5dVc2TEZBa0I1ZXFlRVFuc2hBZHIzWDVHeWtXSEo4RERHQlhQUG42UmNlMU5YNFJTcQorVjlraEcyejFiRnlmbytoTXFwWW5GMmszMmhWcTNFNTRSUzhZWW53QnNWb2YKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjI5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpAQCAtMCwwICsxLDY4NCBAQAorIiIiVGVzdHMgZm9yIGJhc2VfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZF91bnVzZWRfcG9ydCwgSVBWNl9FTkFCTEVECisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29uc3RhbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHByb3RvY29scworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgZ2VuID0gc2VsZi5sb29wLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KG0sIG0sIG0sIG0sIG0sIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG5leHQsIGl0ZXIoZ2VuKSkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfaGFuZGxlKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX3RpbWVyKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkrMTAsIGxhbWJkYTogRmFsc2UsICgpKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX2NhbmNlbGxlZF9oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKGxhbWJkYTogRmFsc2UsICgpKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZik6CisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4ZWN1dG9yLCBzZWxmLmxvb3AuX2RlZmF1bHRfZXhlY3V0b3IpCisKKyAgICBkZWYgdGVzdF9nZXRuYW1laW5mbyhzZWxmKToKKyAgICAgICAgc29ja2FkZHIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmdldG5hbWVpbmZvKHNvY2thZGRyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKE5vbmUsIHNvY2tldC5nZXRuYW1laW5mbywgc29ja2FkZHIsIDApLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb24oc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2NhbGxiYWNrLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGV2ZW50cy5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigxMC4wLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihoLCBzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcl9uZWdhdGl2ZV9kZWxheXMoc2VsZik6CisgICAgICAgIGNhbGxzID0gW10KKworICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKC0xLCBjYiwgJ2EnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMiwgY2IsICdiJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsnYicsICdhJ10pCisKKyAgICBkZWYgdGVzdF90aW1lX2FuZF9jYWxsX2F0KHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2hlbiA9IHNlbGYubG9vcC50aW1lKCkgKyAwLjEKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfYXQod2hlbiwgY2IpCisgICAgICAgIHQwID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDkgPD0gdDEtdDAgPD0gMC45LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGV2ZW50cy5IYW5kbGUoY2IsICgpKSwgKCcnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBldmVudHMuVGltZXJIYW5kbGUoMTAsIGNiLCAoKSkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYiwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX3BsYWluKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUoY2IsICgpKQorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIHJlcykKKworICAgICAgICBleGVjdXRvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoZXhlY3V0b3IsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhlY3V0b3Iuc3VibWl0LmNhbGxlZCkKKworICAgICAgICBmLmNhbmNlbCgpICAjIERvbid0IGNvbXBsYWluIGFib3V0IGFiYW5kb25lZCBGdXR1cmUuCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2Uoc2VsZik6CisgICAgICAgIGgxID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyA1LjAsIGxhbWJkYTogVHJ1ZSwgKCkpCisgICAgICAgIGgyID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyAxMC4wLCBsYW1iZGE6IFRydWUsICgpKQorCisgICAgICAgIGgxLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMSkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgyKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICB0ID0gc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg5LjUgPCB0IDwgMTAuNSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaDJdLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMudGltZScpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9fcnVuX29uY2VfbG9nZ2luZyhzZWxmLCBtX2xvZ2dpbmcsIG1fdGltZSk6CisgICAgICAgICMgTG9nIHRvIElORk8gbGV2ZWwgaWYgdGltZW91dCA+IDEuMCBzZWMuCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGRhdGEgPSBbMTAuMCwgMTAuMCwgMTIuMCwgMTMuMF0KKworICAgICAgICBkZWYgbW9ub3RvbmljKCk6CisgICAgICAgICAgICBub25sb2NhbCBkYXRhLCBpZHgKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICByZXR1cm4gZGF0YVtpZHhdCisKKyAgICAgICAgbV90aW1lLm1vbm90b25pYyA9IG1vbm90b25pYworICAgICAgICBtX2xvZ2dpbmcuSU5GTyA9IGxvZ2dpbmcuSU5GTworICAgICAgICBtX2xvZ2dpbmcuREVCVUcgPSBsb2dnaW5nLkRFQlVHCisKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKAorICAgICAgICAgICAgZXZlbnRzLlRpbWVySGFuZGxlKDExLjAsIGxhbWJkYTogVHJ1ZSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5JTkZPLCBtX2xvZ2dpbmcubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgICAgICBpZHggPSAtMQorICAgICAgICBkYXRhID0gWzEwLjAsIDEwLjAsIDEwLjMsIDEzLjBdCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkID0gW2V2ZW50cy5UaW1lckhhbmRsZSgxMS4wLCBsYW1iZGE6VHJ1ZSwgKCkpXQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLkRFQlVHLCBtX2xvZ2dpbmcubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgIGRlZiB0ZXN0X19ydW5fb25jZV9zY2hlZHVsZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgcHJvY2Vzc2VkID0gRmFsc2UKKworICAgICAgICBkZWYgY2IobG9vcCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9jZXNzZWQsIGhhbmRsZQorICAgICAgICAgICAgcHJvY2Vzc2VkID0gVHJ1ZQorICAgICAgICAgICAgaGFuZGxlID0gbG9vcC5jYWxsX3Nvb24obGFtYmRhOiBUcnVlKQorCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSAtIDEsIGNiLCAoc2VsZi5sb29wLCkpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvY2Vzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoYW5kbGVdLCBsaXN0KHNlbGYubG9vcC5fcmVhZHkpKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCAnYmxhaCcpCisKKworY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZV9mdXR1cmU9RmFsc2UpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBjcmVhdGVfZnV0dXJlOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUoKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMSVpFRCcKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFdpdGhTZWxlY3RvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX211bHRpcGxlX2Vycm9ycyhzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2Nvbm5lY3RfZXJyKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGUoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzX2xvY2FsX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGRlZiBiaW5kKGFkZHIpOgorICAgICAgICAgICAgaWYgYWRkclswXSA9PSAnMC4wLjAuMSc6CisgICAgICAgICAgICAgICAgZXJyID0gT1NFcnJvcignRXJyJykKKyAgICAgICAgICAgICAgICBlcnIuc3RyZXJyb3IgPSAnRXJyJworICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdFcnIyJykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoY20uZXhjZXB0aW9uKS5zdGFydHN3aXRoKCdNdWx0aXBsZSBleGNlcHRpb25zOiAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgaWYgaG9zdCA9PSAnZXhhbXBsZS5jb20nOgorICAgICAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIG1vY2tfZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQoWyhzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9UQ1AsICcnLCAoJzEuMi4zLjQnLCA4MCkpXSkKKyAgICAgICAgICAgIHJldHVybiBmCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvLnNpZGVfZWZmZWN0ID0gbW9ja19nZXRhZGRyaW5mbworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5yZXR1cm5fdmFsdWUgPSAoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0TW9jazoKKyAgICAgICAgICAgIF9zb2NrID0gTm9uZQorCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisKKyAgICAgICAgZGVmIG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3ZHMpOgorICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclRyYW5zcG9ydE1vY2soKQorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrID0gc29jaworICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnNpZGVfZWZmZWN0ID0gbW9ja19tYWtlX3NzbF90cmFuc3BvcnQKKyAgICAgICAgQU5ZID0gdW5pdHRlc3QubW9jay5BTlkKKyAgICAgICAgIyBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgICMgTmV4dCB0cnkgYW4gZXhwbGljaXQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3BlcmwuY29tJykKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICAjIEZpbmFsbHkgdHJ5IGFuIGV4cGxpY2l0IGVtcHR5IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aChBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gbm90IHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG11c3QgYmUgTm9uZS4KKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBXaGVuIHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG1heSBiZSBOb25lIGlmIGhvc3QgaXMgbm9uLWVtcHR5LgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICcnLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgODAsIHNzbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9VHJ1ZSwgc29jaz1zb2NrKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZW1wdHlfaG9zdChzZWxmKToKKyAgICAgICAgIyBpZiBob3N0IGlzIGVtcHR5IHN0cmluZyB1c2UgTm9uZSBpbnN0ZWFkCisgICAgICAgIGhvc3QgPSBvYmplY3QoKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhvc3QKKyAgICAgICAgICAgIGhvc3QgPSBhcmdzWzBdCisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShob3N0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBNeVByb3RvLCAnMC4wLjAuMCcsIDAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIGdldGFkZHJpbmZvID0gc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgc3RyZXJyb3IgPSAnZXJyb3InCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gWworICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEyNy4wLjAuMScsIDEwMTAwKSldCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX2FkZHJpbmZvKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfYWRkcl9lcnJvcihzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgcHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wsIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X3NvY2tldF9lcnIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2tldC5zb2NrZXQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX21hdGNoaW5nX2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGxvY2FsX2FkZHI9KCc6OjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc2V0YmxrX2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuc2V0YmxvY2tpbmcuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vYWRkcl9ub2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtX3NvY2tldC5BRl9JTkVUNiA9IHNvY2tldC5BRl9JTkVUNgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVyciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX3JldHJ5KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5hY2NlcHQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoZXJybm8uRU1GSUxFLCAnVG9vIG1hbnkgb3BlbiBmaWxlcycpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmV4Y2VwdGlvbi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeVByb3RvLCBzb2NrLCBOb25lLCBOb25lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MTFlYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDE2NzIgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kX3VudXNlZF9wb3J0LCBJUFY2X0VOQUJMRUQKKworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvY2tzCisKKworY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeURhdGFncmFtUHJvdG8ocHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15UmVhZFBpcGVQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IFsnSU5JVElBTCddCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NPTk5FQ1RFRCcpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdFT0YnKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRiddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDTE9TRUQnKQorICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15V3JpdGVQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15U3VicHJvY2Vzc1Byb3RvY29sKHByb3RvY29scy5TdWJwcm9jZXNzUHJvdG9jb2wpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3ApOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5jb21wbGV0ZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuZGlzY29ubmVjdHMgPSB7ZmQ6IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkgZm9yIGZkIGluIHJhbmdlKDMpfQorICAgICAgICBzZWxmLmRhdGEgPSB7MTogYicnLCAyOiBiJyd9CisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5nb3RfZGF0YSA9IHsxOiBsb2Nrcy5FdmVudChsb29wPWxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIDI6IGxvY2tzLkV2ZW50KGxvb3A9bG9vcCl9CisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgc2VsZi5jb21wbGV0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuZGF0YVtmZF0gKz0gZGF0YQorICAgICAgICBzZWxmLmdvdF9kYXRhW2ZkXS5zZXQoKQorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBpZiBleGM6CisgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzW2ZkXS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9yZXN1bHQoZXhjKQorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBzZWxmLnRyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKworY2xhc3MgRXZlbnRMb29wVGVzdHNNaXhpbjoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9uZXN0aW5nKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMSgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5pc19ydW5uaW5nKCkpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8xKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8yKCkpCisKKyAgICAjIE5vdGU6IGJlY2F1c2Ugb2YgdGhlIGRlZmF1bHQgV2luZG93cyB0aW1pbmcgZ3JhbnVsYXJpdHkgb2YKKyAgICAjIDE1LjYgbXNlYywgd2UgdXNlIGZhaXJseSBsb25nIHNsZWVwIHRpbWVzIGhlcmUgKH4xMDAgbXNlYykuCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGUoc2VsZik6CisgICAgICAgIHQwID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9zdG9wcGVkKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrID0gY2IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9jYWxsX2xhdGVyKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigwLjEsIGNhbGxiYWNrLCAnaGVsbG8gd29ybGQnKQorICAgICAgICB0MCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgdDEgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbyB3b3JsZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC4wOCA8PSB0MS10MCA8PSAwLjgsIHQxLXQwKQorCisgICAgZGVmIHRlc3RfY2FsbF9zb29uKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnMSwgYXJnMik6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoYXJnMSwgYXJnMikpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYWxsYmFjaywgJ2hlbGxvJywgJ3dvcmxkJykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbKCdoZWxsbycsICd3b3JsZCcpXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBkZWYgcnVuX2luX3RocmVhZCgpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNhbGxiYWNrLCAnaGVsbG8nKQorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuX2luX3RocmVhZCkKKyAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYWxsYmFjaywgJ3dvcmxkJykKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfY2FsbF9zb29uX3RocmVhZHNhZmVfc2FtZV90aHJlYWQoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdHMpID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYWxsYmFjaywgJ3dvcmxkJykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbJ2hlbGxvJywgJ3dvcmxkJ10pCisKKyAgICBkZWYgdGVzdF9ydW5faW5fZXhlY3V0b3Ioc2VsZik6CisgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgIGYyID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBydW4sICd5bycpCisgICAgICAgIHJlcywgdGhyZWFkX2lkID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd5bycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGhyZWFkX2lkLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisKKyAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBieXRlc19yZWFkID0gW10KKworICAgICAgICBkZWYgcmVhZGVyKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHIucmVjdigxMDI0KQorICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAjIFNwdXJpb3VzIHJlYWRpbmVzcyBub3RpZmljYXRpb25zIGFyZSBwb3NzaWJsZQorICAgICAgICAgICAgICAgICMgYXQgbGVhc3Qgb24gTGludXggLS0gc2VlIG1hbiBzZWxlY3QuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIGJ5dGVzX3JlYWQuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcihyLmZpbGVubygpKSkKKyAgICAgICAgICAgICAgICByLmNsb3NlKCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcihyLmZpbGVubygpLCByZWFkZXIpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5zZW5kLCBiJ2FiYycpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidkZWYnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LmNsb3NlKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKGJ5dGVzX3JlYWQpLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICB3LnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcih3LmZpbGVubygpLCB3LnNlbmQsIGIneCcqKDI1NioxMDI0KSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIHJlbW92ZV93cml0ZXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcih3LmZpbGVubygpKSkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHJlbW92ZV93cml0ZXIpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oc2VsZi5sb29wLnN0b3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBkYXRhID0gci5yZWN2KDI1NioxMDI0KQorICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKGRhdGEpLCAyMDApCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9vcHMoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgaHR0cGQuYWRkcmVzcykpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3NlbmRhbGwoc29jaywgYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICAgICAgIyBjb25zdW1lIGRhdGEKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KSkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLnN0YXJ0c3dpdGgoYidIVFRQLzEuMCAyMDAgT0snKSkKKworICAgIGRlZiB0ZXN0X3NvY2tfY2xpZW50X2ZhaWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugd2lsbCBnZXQgYW4gdW51c2VkIHBvcnQKKyAgICAgICAgYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgcy5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgICAgICBhZGRyZXNzID0gcy5nZXRzb2NrbmFtZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQ29ubmVjdGlvblJlZnVzZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykpCisgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIGxpc3RlbmVyID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGxpc3RlbmVyLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBsaXN0ZW5lci5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QobGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfYWNjZXB0KGxpc3RlbmVyKQorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uZ2V0dGltZW91dCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZHIsIGNsaWVudC5nZXRzb2NrbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudC5nZXRwZWVybmFtZSgpLCBsaXN0ZW5lci5nZXRzb2NrbmFtZSgpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgbGlzdGVuZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdLSUxMJyksICdObyBTSUdLSUxMJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorCisgICAgICAgICMgQ2hlY2sgZXJyb3IgYmVoYXZpb3IgZmlyc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAnYm9vbScsIG15X2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAnYm9vbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLk5TSUcrMSwKKyAgICAgICAgICAgIG15X2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLk5TSUcrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAwLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgLTEsIG15X2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuU0lHS0lMTCwKKyAgICAgICAgICAgIG15X2hhbmRsZXIpCisgICAgICAgICMgUmVtb3ZpbmcgU0lHS0lMTCBkb2Vzbid0IHJhaXNlLCBzaW5jZSB3ZSBkb24ndCBjYWxsIHNpZ25hbCgpLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0tJTEwpKQorICAgICAgICAjIE5vdyBzZXQgYSBoYW5kbGVyIGFuZCBoYW5kbGUgaXQuCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCwgbXlfaGFuZGxlcikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKyAgICAgICAgIyBSZW1vdmluZyBpdCBzaG91bGQgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIGFnYWluIHJldHVybnMgRmFsc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHQUxSTScpLCAnTm8gU0lHQUxSTScpCisgICAgZGVmIHRlc3Rfc2lnbmFsX2hhbmRsaW5nX3doaWxlX3NlbGVjdGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggYSBzaWduYWwgYWN0dWFsbHkgYXJyaXZpbmcgZHVyaW5nIGEgc2VsZWN0KCkgY2FsbC4KKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQUxSTSwgbXlfaGFuZGxlcikKKworICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMC4wMSwgMCkgICMgU2VuZCBTSUdBTFJNIG9uY2UuCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2F1Z2h0LCAxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksICdObyBTSUdBTFJNJykKKyAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmdfYXJncyhzZWxmKToKKyAgICAgICAgc29tZV9hcmdzID0gKDQyLCkKKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCphcmdzKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgc29tZV9hcmdzKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0FMUk0sIG15X2hhbmRsZXIsICpzb21lX2FyZ3MpCisKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIDAuMSwgMCkgICMgU2VuZCBTSUdBTFJNIG9uY2UuCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuNSwgc2VsZi5sb29wLnN0b3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2F1Z2h0LCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwgKmh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBwcm90b2NvbHMuUHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc29jayhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIGluZm9zID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICdDYW4gbm90IGNyZWF0ZSBzb2NrZXQuJworCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksIHNvY2s9c29jaykKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgdHJhbnNwb3J0cy5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIHByb3RvY29scy5Qcm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBwcm90b2NvbHMuUHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NzbCcgaW4gdHIuX19jbGFzc19fLl9fbmFtZV9fLmxvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBwb3J0ID0gZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9KGh0dHBkLmFkZHJlc3NbMF0sIHBvcnQpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwci50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJylbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydCwgZXhwZWN0ZWQpCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyX2luX3VzZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCBsb2NhbF9hZGRyPWh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIoaHR0cGQuYWRkcmVzcyksIGNtLmV4Y2VwdGlvbi5zdHJlcnJvcikKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VydmVyLnNvY2tldHMpLCAxKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcwLjAuMC4wJykKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kYWxsKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90byBpcyBub3QgTm9uZSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyB3aW5kb3dzIGlvY3AKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBjbG9zZSBzZXJ2ZXIKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgY2xhc3MgQ2xpZW50TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgc3NsY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKAorICAgICAgICAgICAgY2VydGZpbGU9b3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUuY3J0JyksCisgICAgICAgICAgICBrZXlmaWxlPW9zLnBhdGguam9pbihoZXJlLCAnc2FtcGxlLmtleScpKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIGZhY3RvcnksICcxMjcuMC4wLjEnLCAwLCBzc2w9c3NsY29udGV4dCkKKworICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdCwgJzEyNy4wLjAuMScpCisKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKENsaWVudE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgY2xpZW50LndyaXRlKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlQcm90bykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyNy4wLjAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpWzBdKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgICMgdGhlIGNsaWVudCBzb2NrZXQgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgdG8gYXZvaWQgRUNPTk5SRVNFVCB1cG9uCisgICAgICAgICMgcmVjdigpL3NlbmQoKSBvbiB0aGUgc2VydmluZyBzb2NrZXQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICAjIHN0b3Agc2VydmluZworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zb2NrKHNlbGYpOgorICAgICAgICBwcm90byA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBwcm90by5zZXRfcmVzdWx0KHNlbGYpCisKKyAgICAgICAgc29ja19vYiA9IHNvY2tldC5zb2NrZXQodHlwZT1zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNvY2tfb2Iuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgc29ja19vYi5iaW5kKCgnMC4wLjAuMCcsIDApKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihUZXN0TXlQcm90bywgc29jaz1zb2NrX29iKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHNvY2ssIHNvY2tfb2IpCisKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcwLjAuMC4wJykKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfYWRkcl9pbl91c2Uoc2VsZik6CisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgc29jaz1zb2NrX29iKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIGhvc3Q9aG9zdCwgcG9ydD1wb3J0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUFERFJJTlVTRSkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZHVhbF9zdGFjayhzZWxmKToKKyAgICAgICAgZl9wcm90byA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmX3Byb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICB0cnlfY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IGZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihUZXN0TXlQcm90bywgaG9zdD1Ob25lLCBwb3J0PXBvcnQpCisgICAgICAgICAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICAgICAgaWYgZXguZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKKyAgICAgICAgICAgICAgICAgICAgdHJ5X2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoNSwgdHJ5X2NvdW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX3Byb3RvKQorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIGZfcHJvdG8gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnOjoxJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NlcnZlcl9jbG9zZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBDb25uZWN0aW9uUmVmdXNlZEVycm9yLCBjbGllbnQuY29ubmVjdCwgKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdE15RGF0YWdyYW1Qcm90byhNeURhdGFncmFtUHJvdG8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKGlubmVyX3NlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisgICAgICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQuc2VuZHRvKGIncmVzcDonK2RhdGEsIGFkZHIpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBUZXN0TXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNfdHJhbnNwb3J0LCBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIGhvc3QsIHBvcnQgPSBzX3RyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgbGFtYmRhOiBNeURhdGFncmFtUHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgcmVtb3RlX2FkZHI9KGhvc3QsIHBvcnQpKQorICAgICAgICB0cmFuc3BvcnQsIGNsaWVudCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJTklUSUFMSVpFRCcsIGNsaWVudC5zdGF0ZSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ3h4eCcpCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgaWYgc2VydmVyLm5ieXRlczoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VydmVyLm5ieXRlcykKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBpZiBjbGllbnQubmJ5dGVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICAjIHJlY2VpdmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgY2xpZW50Lm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjbGllbnQuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgY2xpZW50LnN0YXRlKQorICAgICAgICBzZXJ2ZXIudHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2ludGVybmFsX2ZkcyhzZWxmKToKKyAgICAgICAgbG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsb29wLCBzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsb29wLl9pbnRlcm5hbF9mZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvb3AuX2Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9zc29jaykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9yZWFkX3BpcGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVJlYWRQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4ocnBpcGUsICdyYicsIDEwMjQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3RfcmVhZF9waXBlKGZhY3RvcnksIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLm5ieXRlcykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKworICAgICAgICBvcy53cml0ZSh3cGlwZSwgYicxJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHByb3RvLm5ieXRlcykKKworICAgICAgICBvcy5jbG9zZSh3cGlwZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWydJTklUSUFMJywgJ0NPTk5FQ1RFRCcsICdFT0YnLCAnQ0xPU0VEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15V3JpdGVQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4od3BpcGUsICd3YicsIDEwMjQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdHJhbnNwb3J0CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGZhY3RvcnksIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGRhdGEgPSBvcy5yZWFkKHJwaXBlLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBkYXRhID0gb3MucmVhZChycGlwZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzIzNDUnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBvcy5jbG9zZShycGlwZSkKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BpcGVfZGlzY29ubmVjdF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJzb2NrLCB3c29jayA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdzb2NrLmRldGFjaCgpLCAnd2InLCAxMDI0KQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRyYW5zcG9ydAorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShmYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSB0CisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzEnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLmxvb3Auc29ja19yZWN2KHJzb2NrLCAxMDI0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHJzb2NrLmNsb3NlKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgZGVmIHRlc3RfcHJvbXB0X2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHIsIDEpCisgICAgICAgIG92ID0gZ2V0YXR0cihmLCAnb3YnLCBOb25lKQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdi5wZW5kaW5nKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG1haW4oKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGYuY2FuY2VsKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzID0gJ2NhbmNlbGxlZCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgc3RhcnQgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG1haW4oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGVsYXBzZWQgPSB0aW1lLm1vbm90b25pYygpIC0gc3RhcnQKKworICAgICAgICBzZWxmLmFzc2VydExlc3MoZWxhcHNlZCwgMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdjYW5jZWxsZWQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgaWYgb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92LnBlbmRpbmcpCisgICAgICAgIHNlbGYubG9vcC5fc3RvcF9zZXJ2aW5nKHIpCisKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHcuY2xvc2UoKQorCisKK2NsYXNzIFN1YnByb2Nlc3NUZXN0c01peGluOgorCisgICAgZGVmIGNoZWNrX3Rlcm1pbmF0ZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR1RFUk0sIHJldHVybmNvZGUpCisKKyAgICBkZWYgY2hlY2tfa2lsbGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uIFRoZSBXaW5uZXInKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uIFRoZSBXaW5uZXInLCBwcm90by5kYXRhWzFdKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19pbnRlcmFjdGl2ZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gJykKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICAgICAgcHJvdG8uZ290X2RhdGFbMV0uY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiAnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgICAgICBzdGRpbi53cml0ZShiJ1RoZSBXaW5uZXInKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uIFRoZSBXaW5uZXInLCBwcm90by5kYXRhWzFdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NoZWxsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdlY2hvIFB5dGhvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChmLmRvbmUoKSBmb3IgZiBpbiBwcm90by5kaXNjb25uZWN0cy52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsxXS5yc3RyaXAoYidcclxuJyksIGInUHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzJdLCBiJycpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4aXRjb2RlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgJ2V4aXQgNycsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2Nsb3NlX2FmdGVyX2ZpbmlzaChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2tpbGwoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5raWxsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfa2lsbGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnRlcm1pbmF0ZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIFNJR0hVUCIpCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHSFVQLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnIoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKworICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsyXS5zdGFydHN3aXRoKGInRVJSOnRlc3QnKSwgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnJfcmVkaXJlY3RfdG9fc3Rkb3V0KHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKworICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLmRhdGFbMV0uc3RhcnRzd2l0aChiJ09VVDp0ZXN0RVJSOnRlc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBwcm90by5kYXRhWzJdKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfY2xpZW50X3N0cmVhbShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvMy5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRvdXQgPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgIHN0ZG91dC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZGlzY29ubmVjdHNbMV0pCisgICAgICAgIHN0ZGluLndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsyXS53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpCcm9rZW5QaXBlRXJyb3InLCBwcm90by5kYXRhWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBZnRlciBjbG9zaW5nIHRoZSByZWFkLWVuZCBvZiBhIHBpcGUsIHdyaXRpbmcgdG8gdGhlCisgICAgICAgICAgICAjIHdyaXRlLWVuZCB1c2luZyBvcy53cml0ZSgpIGZhaWxzIHdpdGggZXJybm89PUVJTlZBTCBhbmQKKyAgICAgICAgICAgICMgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0lOVkFMSURfTkFNRSBvbiBXaW5kb3dzIT8hICAoVXNpbmcKKyAgICAgICAgICAgICMgV3JpdGVGaWxlKCkgd2UgZ2V0IEVSUk9SX0JST0tFTl9QSVBFIGFzIGV4cGVjdGVkLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidFUlI6T1NFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfd2FpdF9ub19zYW1lX2dyb3VwKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICAjIHN0YXJ0IHRoZSBuZXcgcHJvY2VzcyBpbiBhIG5ldyBzZXNzaW9uCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c19ldmVudHMKKworICAgIGNsYXNzIFNlbGVjdEV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoKQorCisgICAgY2xhc3MgUHJvYWN0b3JFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHdpbmRvd3NfZXZlbnRzLlByb2FjdG9yRXZlbnRMb29wKCkKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbWNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW1jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgpIikKK2Vsc2U6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCBzZWxlY3RvcnMKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisKKyAgICBjbGFzcyBVbml4RXZlbnRMb29wVGVzdHNNaXhpbihFdmVudExvb3BUZXN0c01peGluKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICB3YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfY2hpbGRfd2F0Y2hlcihOb25lKQorICAgICAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEtxdWV1ZUV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLlNlbGVjdG9yRXZlbnRMb29wKAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IoKSkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBFUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuRXBvbGxTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLlBvbGxTZWxlY3RvcigpKQorCisgICAgIyBTaG91bGQgYWx3YXlzIGV4aXN0LgorICAgIGNsYXNzIFNlbGVjdEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yKCkpCisKKworY2xhc3MgSGFuZGxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGFuZGxlKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2FyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnSGFuZGxlKCcKKyAgICAgICAgICAgICc8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGUuPGxvY2Fscz4uY2FsbGJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKScpKQorCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKworICAgICAgICByID0gcmVwcihoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5zdGFydHN3aXRoKAorICAgICAgICAgICAgJ0hhbmRsZSgnCisgICAgICAgICAgICAnPGZ1bmN0aW9uIEhhbmRsZVRlc3RzLnRlc3RfaGFuZGxlLjxsb2NhbHM+LmNhbGxiYWNrJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcoKSk8Y2FuY2VsbGVkPicpLCByKQorCisgICAgZGVmIHRlc3RfbWFrZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBoMSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBldmVudHMubWFrZV9oYW5kbGUsIGgxLCAoKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmV2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3dpdGhfZXhjZXB0aW9uKHNlbGYsIGxvZyk6CisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssICgpKQorICAgICAgICBoLl9ydW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9nLmV4Y2VwdGlvbi5jYWxsZWQpCisKKworY2xhc3MgVGltZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBoID0gZXZlbnRzLlRpbWVySGFuZGxlKHdoZW4sIGxhbWJkYTogRmFsc2UsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goaCksIGhhc2god2hlbikpCisKKyAgICBkZWYgdGVzdF90aW1lcihzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgpCisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2FyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcoKSknKSkKKworICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cy5UaW1lckhhbmRsZSwgTm9uZSwgY2FsbGJhY2ssIGFyZ3MpCisKKyAgICBkZWYgdGVzdF90aW1lcl9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIGgxID0gZXZlbnRzLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCAoKSkKKyAgICAgICAgaDIgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICAjIFRPRE86IFVzZSBhc3NlcnRMZXNzIGV0Yy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA8IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDwgaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA8PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPiBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSAhPSBoMikKKworICAgICAgICBoMi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGgyKQorCisgICAgICAgIGgxID0gZXZlbnRzLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCAoKSkKKyAgICAgICAgaDIgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiArIDEwLjAsIGNhbGxiYWNrLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSAhPSBoMikKKworICAgICAgICBoMyA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX2VxX18oaDMpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX25lX18oaDMpKQorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5fZm9yZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnN0b3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5pc19ydW5uaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2xhdGVyLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9hdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9pbl9leGVjdXRvciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0YWRkcmluZm8sICdsb2NhbGhvc3QnLCA4MDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0bmFtZWluZm8sICgnbG9jYWxob3N0JywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfY29ubmVjdGlvbiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9zZXJ2ZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfcmVhZGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3JlYWRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF93cml0ZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfd3JpdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19yZWN2LCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfc2VuZGFsbCwgZiwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2Nvbm5lY3QsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2FjY2VwdCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNvbm5lY3RfcmVhZF9waXBlLCBmLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF93cml0ZV9waXBlLCBmLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3VicHJvY2Vzc19zaGVsbCwgZiwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX2V4ZWMsIGYpCisKKworY2xhc3MgUHJvdG9jb2xzQWJzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBwID0gcHJvdG9jb2xzLlByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmRhdGFfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZW9mX3JlY2VpdmVkKCkpCisKKyAgICAgICAgZHAgPSBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5lcnJvcl9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZGF0YWdyYW1fcmVjZWl2ZWQoZiwgZikpCisKKyAgICAgICAgc3AgPSBwcm90b2NvbHMuU3VicHJvY2Vzc1Byb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AuY29ubmVjdGlvbl9tYWRlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLnBpcGVfZGF0YV9yZWNlaXZlZCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9jb25uZWN0aW9uX2xvc3QoMSwgZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLnByb2Nlc3NfZXhpdGVkKCkpCisKKworY2xhc3MgUG9saWN5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNyZWF0ZV9wb2xpY3koc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX2V2ZW50cworICAgICAgICAgICAgcmV0dXJuIHdpbmRvd3NfZXZlbnRzLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvbSBhc3luY2lvIGltcG9ydCB1bml4X2V2ZW50cworICAgICAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgZGVmIHRlc3RfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5Lm5ld19ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll9sb2NhbC5fbG9vcCkKKworICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fbG9jYWwuX2xvb3AsIGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfY2FsbHNfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBwb2xpY3ksICJzZXRfZXZlbnRfbG9vcCIsCisgICAgICAgICAgICAgICAgd3JhcHM9cG9saWN5LnNldF9ldmVudF9sb29wKSBhcyBtX3NldF9ldmVudF9sb29wOgorCisgICAgICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICAgICAgIyBwb2xpY3kuX2xvY2FsLl9sb29wIG11c3QgYmUgc2V0IHRocm91Z2ggLnNldF9ldmVudF9sb29wKCkKKyAgICAgICAgICAgICMgKHRoZSB1bml4IERlZmF1bHRFdmVudExvb3BQb2xpY3kgbmVlZHMgdGhpcyBjYWxsIHRvIGF0dGFjaAorICAgICAgICAgICAgIyB0aGUgY2hpbGQgd2F0Y2hlciBjb3JyZWN0bHkpCisgICAgICAgICAgICBtX3NldF9ldmVudF9sb29wLmFzc2VydF9jYWxsZWRfd2l0aChsb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfYWZ0ZXJfc2V0X25vbmUoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLnRocmVhZGluZy5jdXJyZW50X3RocmVhZCcpCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfdGhyZWFkKHNlbGYsIG1fY3VycmVudF90aHJlYWQpOgorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9uZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgb2xkX2xvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb2xpY3kuc2V0X2V2ZW50X2xvb3AsIG9iamVjdCgpKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvbGRfbG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBvbGRfbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LCBldmVudHMuQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBldmVudHMuZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkpCisKKyAgICBkZWYgdGVzdF9zZXRfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGV2ZW50cy5zZXRfZXZlbnRfbG9vcF9wb2xpY3ksIG9iamVjdCgpKQorCisgICAgICAgIG9sZF9wb2xpY3kgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3BfcG9saWN5KHBvbGljeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3ksIGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwb2xpY3ksIG9sZF9wb2xpY3kpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9mdXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWZjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9mdXR1cmVzLnB5CkBAIC0wLDAgKzEsMzQ3IEBACisiIiJUZXN0cyBmb3IgZnV0dXJlcy5weS4iIiIKKworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitkZWYgX2Zha2VmdW5jKGYpOgorICAgIHJldHVybiBmCisKKworY2xhc3MgRnV0dXJlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX3N0YXRlKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2luaXRfY29uc3RydWN0b3JfZGVmYXVsdF9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBGdXR1cmUgZG9lcyd0IGFjY2VwdCBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmdXR1cmVzLkZ1dHVyZSwgNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBmLmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnJlc3VsdCkKKworICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5leGNlcHRpb24pCisKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfeWllbGRfZnJvbV90d2ljZShzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBmaXh0dXJlKCk6CisgICAgICAgICAgICB5aWVsZCAnQScKKyAgICAgICAgICAgIHggPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHlpZWxkICdCJywgeAorICAgICAgICAgICAgeSA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0MnLCB5CisKKyAgICAgICAgZyA9IGZpeHR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICdBJykgICMgeWllbGQgJ0EnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksIGYpICAjIEZpcnN0IHlpZWxkIGZyb20gZi4KKyAgICAgICAgZi5zZXRfcmVzdWx0KDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQicsIDQyKSkgICMgeWllbGQgJ0InLCB4LgorICAgICAgICAjIFRoZSBzZWNvbmQgInlpZWxkIGZyb20gZiIgZG9lcyBub3QgeWllbGQgZi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAoJ0MnLCA0MikpICAjIHlpZWxkICdDJywgeS4KKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGZfcGVuZGluZyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9wZW5kaW5nKSwgJ0Z1dHVyZTxQRU5ESU5HPicpCisgICAgICAgIGZfcGVuZGluZy5jYW5jZWwoKQorCisgICAgICAgIGZfY2FuY2VsbGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZfY2FuY2VsbGVkLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX2NhbmNlbGxlZCksICdGdXR1cmU8Q0FOQ0VMTEVEPicpCisKKyAgICAgICAgZl9yZXN1bHQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9yZXN1bHQuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9yZXN1bHQpLCAnRnV0dXJlPHJlc3VsdD00PicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZl9yZXN1bHQucmVzdWx0KCksIDQpCisKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZl9leGNlcHRpb24gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX2V4Y2VwdGlvbiksICdGdXR1cmU8ZXhjZXB0aW9uPVJ1bnRpbWVFcnJvcigpPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9leGNlcHRpb24uZXhjZXB0aW9uKCksIGV4YykKKworICAgICAgICBmX2Zld19jYWxsYmFja3MgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9mZXdfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRnV0dXJlPFBFTkRJTkcsIFs8ZnVuY3Rpb24gX2Zha2VmdW5jJywKKyAgICAgICAgICAgICAgICAgICAgICByZXByKGZfZmV3X2NhbGxiYWNrcykpCisgICAgICAgIGZfZmV3X2NhbGxiYWNrcy5jYW5jZWwoKQorCisgICAgICAgIGZfbWFueV9jYWxsYmFja3MgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgICAgICAgZl9tYW55X2NhbGxiYWNrcy5hZGRfZG9uZV9jYWxsYmFjayhfZmFrZWZ1bmMpCisgICAgICAgIHIgPSByZXByKGZfbWFueV9jYWxsYmFja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0Z1dHVyZTxQRU5ESU5HLCBbPGZ1bmN0aW9uIF9mYWtlZnVuYycsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzwxOCBtb3JlPicsIHIpCisgICAgICAgIGZfbWFueV9jYWxsYmFja3MuY2FuY2VsKCkKKworICAgIGRlZiB0ZXN0X2NvcHlfc3RhdGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgaW50ZXJuYWwgX2NvcHlfc3RhdGUgbWV0aG9kIHNpbmNlIGl0J3MgYmVpbmcgZGlyZWN0bHkKKyAgICAgICAgIyBpbnZva2VkIGluIG90aGVyIG1vZHVsZXMuCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5zZXRfcmVzdWx0KDEwKQorCisgICAgICAgIG5ld2YgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgbmV3Zi5fY29weV9zdGF0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Zi5yZXN1bHQoKSwgMTApCisKKyAgICAgICAgZl9leGNlcHRpb24gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKworICAgICAgICBuZXdmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmX2V4Y2VwdGlvbi5fY29weV9zdGF0ZShmX2V4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2ZfZXhjZXB0aW9uLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXdmX2V4Y2VwdGlvbi5yZXN1bHQpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKworICAgICAgICBuZXdmX2NhbmNlbGxlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmX2NhbmNlbGxlZC5fY29weV9zdGF0ZShmX2NhbmNlbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2ZfY2FuY2VsbGVkLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGFyZzEsIGFyZzIgPSBjb3JvKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdGVzdCkKKyAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2FiYW5kb25lZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9yZXN1bHRfdW5yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIGZ1dC5yZXN1bHQoKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9leGNlcHRpb25fdW5yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIGZ1dC5leGNlcHRpb24oKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9leGNlcHRpb25fcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmdXQucmVzdWx0KQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmUoc2VsZik6CisKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZXggPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDEpCisgICAgICAgIGYxID0gZXguc3VibWl0KHJ1biwgJ29pJykKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLCBpZGVudCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmMiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnb2knKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkZW50LCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9mdXR1cmUoc2VsZik6CisgICAgICAgIGYxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYyID0gZnV0dXJlcy53cmFwX2Z1dHVyZShmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmMSwgZjIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmV2ZW50cycpCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfdXNlX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZXggPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDEpCisgICAgICAgIGYxID0gZXguc3VibWl0KHJ1biwgJ29pJykKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1fZXZlbnRzLmdldF9ldmVudF9sb29wLnJldHVybl92YWx1ZSwgZjIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGYxID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCisgICAgICAgIGYyID0gZnV0dXJlcy53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2NhbmNlbDIoc2VsZik6CisgICAgICAgIGYxID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCisgICAgICAgIGYyID0gZnV0dXJlcy53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYxLnNldF9yZXN1bHQoNDIpCisgICAgICAgIGYyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLnJlc3VsdCgpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmNhbmNlbGxlZCgpKQorCisKK2NsYXNzIEZ1dHVyZURvbmVDYWxsYmFja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHJ1bl9icmllZmx5KHNlbGYpOgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiBfbWFrZV9jYWxsYmFjayhzZWxmLCBiYWcsIHRoaW5nKToKKyAgICAgICAgIyBDcmVhdGUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGFwcGVuZHMgdGhpbmcgdG8gYmFnLgorICAgICAgICBkZWYgYmFnX2FwcGVuZGVyKGZ1dHVyZSk6CisgICAgICAgICAgICBiYWcuYXBwZW5kKHRoaW5nKQorICAgICAgICByZXR1cm4gYmFnX2FwcGVuZGVyCisKKyAgICBkZWYgX25ld19mdXR1cmUoc2VsZik6CisgICAgICAgIHJldHVybiBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9yZXN1bHQoc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgNDIpKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFs0MiwgMTddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdmb28nKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2ludm9rZWRfb25fc2V0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxMDApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzEwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2RvbmVfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgY2IxID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDEpCisgICAgICAgIGNiMiA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAyKQorICAgICAgICBjYjMgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMykKKworICAgICAgICAjIEFkZCBvbmUgY2IxIGFuZCBvbmUgY2IyLgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisKKyAgICAgICAgIyBPbmUgaW5zdGFuY2Ugb2YgY2IyIHJlbW92ZWQuIE5vdyB0aGVyZSdzIG9ubHkgb25lIGNiMS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMiksIDEpCisKKyAgICAgICAgIyBOZXZlciBoYWQgYW55IGNiMyBpbiB0aGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMyksIDApCisKKyAgICAgICAgIyBBZnRlciB0aGlzIHRoZXJlIHdpbGwgYmUgNiBpbnN0YW5jZXMgb2YgY2IxIGFuZCBvbmUgb2YgY2IyLgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMSkKKworICAgICAgICAjIFJlbW92ZSBhbGwgaW5zdGFuY2VzIG9mIGNiMS4gT25lIGNiMiByZW1haW5zLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IxKSwgNikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGYuc2V0X3Jlc3VsdCgnZm9vJykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdmb28nKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTA2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpAQCAtMCwwICsxLDgzOCBAQAorIiIiVGVzdHMgZm9yIGxvY2sucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworaW1wb3J0IHJlCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgbG9ja3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK1NUUl9SR1hfUkVQUiA9ICgKKyAgICByJ148KD9QPGNsYXNzPi4qPykgb2JqZWN0IGF0ICg/UDxhZGRyZXNzPi4qPyknCisgICAgcidcWyg/UDxleHRyYXM+JworICAgIHInKHNldHx1bnNldHxsb2NrZWR8dW5sb2NrZWQpKCx2YWx1ZTpcZCk/KCx3YWl0ZXJzOlxkKyk/JworICAgIHInKVxdPlxaJworKQorUkdYX1JFUFIgPSByZS5jb21waWxlKFNUUl9SR1hfUkVQUikKKworCitjbGFzcyBMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgbG9vcCkKKworICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1t1bmxvY2tlZF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGxvY2spKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbbG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIobG9jaykpKQorCisgICAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkpCisKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2sobG9jay5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfcmFjZShzZWxmKToKKyAgICAgICAgIyBTZXZlcmFsIHRhc2tzOgorICAgICAgICAjIC0gQSBhY3F1aXJlcyB0aGUgbG9jaworICAgICAgICAjIC0gQiBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjIC0gQyBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjCisgICAgICAgICMgTm93LCBjb25jdXJyZW50bHk6CisgICAgICAgICMgLSBCIGlzIGNhbmNlbGxlZAorICAgICAgICAjIC0gQSByZWxlYXNlcyB0aGUgbG9jaworICAgICAgICAjCisgICAgICAgICMgSWYgQidzIHdhaXRlciBpcyBtYXJrZWQgY2FuY2VsbGVkIGJ1dCBub3QgeWV0IHJlbW92ZWQgZnJvbQorICAgICAgICAjIF93YWl0ZXJzLCBBJ3MgcmVsZWFzZSgpIGNhbGwgd2lsbCBjcmFzaCB3aGVuIHRyeWluZyB0byBzZXQKKyAgICAgICAgIyBCJ3Mgd2FpdGVyOyBpbnN0ZWFkLCBpdCBzaG91bGQgbW92ZSBvbiB0byBDJ3Mgd2FpdGVyLgorCisgICAgICAgICMgU2V0dXA6IEEgaGFzIHRoZSBsb2NrLCBiIGFuZCBjIGFyZSB3YWl0aW5nLgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBsb2NraXQobmFtZSwgYmxvY2tlcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgYmxvY2tlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBibG9ja2VyCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgZmEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGEgPSB0YXNrcy5UYXNrKGxvY2tpdCgnQScsIGZhKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKyAgICAgICAgdGIgPSB0YXNrcy5UYXNrKGxvY2tpdCgnQicsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAxKQorICAgICAgICB0YyA9IHRhc2tzLlRhc2sobG9ja2l0KCdDJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDIpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIHJhY2UgYW5kIGNoZWNrLgorICAgICAgICAjIFdpdGhvdXQgdGhlIGZpeCB0aGlzIGZhaWxlZCBhdCB0aGUgbGFzdCBhc3NlcnQuCisgICAgICAgIGZhLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suX3dhaXRlcnNbMF0uY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Yi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRjLmRvbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm90X2FjcXVpcmVkKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSdW50aW1lRXJyb3IgaXMgbm90IHJhaXNlZCBpbiB3aXRoIGV4cHJlc3Npb24nKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc3RyKGVyciksCisgICAgICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKworY2xhc3MgRXZlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBsb29wKQorCisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgZXYgPSBsb2Nrcy5FdmVudCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGV2KS5lbmRzd2l0aCgnW3Vuc2V0XT4nKSkKKyAgICAgICAgbWF0Y2ggPSBSR1hfUkVQUi5tYXRjaChyZXByKGV2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRjaC5ncm91cCgnZXh0cmFzJyksICd1bnNldCcpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZXYpLmVuZHN3aXRoKCdbc2V0XT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKSkKKworICAgICAgICBldi5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKGV2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKSkKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMywgMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9vbl9zZXQoc2VsZik6CisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV2LnNldCgpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShldi53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisKKyAgICBkZWYgdGVzdF93YWl0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKworICAgICAgICB3YWl0ID0gdGFza3MuVGFzayhldi53YWl0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHdhaXQuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB3YWl0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2Ll93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3dpdGhfd2FpdGVycyhzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihldi5fd2FpdGVycykpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisKK2NsYXNzIENvbmRpdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgbG9vcCkKKworICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQubm90aWZ5KDIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2NhbmNlbChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKworICAgICAgICB3YWl0ID0gdGFza3MuVGFzayhjb25kLndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5fd2FpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29uZC53YWl0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZvcihzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgZGVmIHByZWRpY2F0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHByZXN1bHQKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXRfZm9yKHByZWRpY2F0ZSkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBwcmVzdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgcHJlZGljYXRlIGNhbiByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQud2FpdF9mb3IobGFtYmRhOiBbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGNvbmQud2FpdF9mb3IobGFtYmRhOiBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQubm90aWZ5KDIwNDgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X2FsbF91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5X2FsbCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndW5sb2NrZWQnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2tlZCcgaW4gcmVwcihjb25kKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjInIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2NvbmQoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBjb25kKQorCisgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2NvbmQoKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjb25kOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisKK2NsYXNzIFNlbWFwaG9yZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIGxvb3ApCisKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbF92YWx1ZV96ZXJvKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUoMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbSkuZW5kc3dpdGgoJ1t1bmxvY2tlZCx2YWx1ZToxXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzZW0pLmVuZHN3aXRoKCdbbG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzJyBub3QgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZW0uX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZW0uX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MicgaW4gcmVwcihzZW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgIGRlZiB0ZXN0X3NlbWFwaG9yZShzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VtKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VtLl92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3NlbWFwaG9yZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9ja3MuU2VtYXBob3JlLCAtMSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGM0KHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoNCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc2VtLl93YWl0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHQ0ID0gdGFza3MuVGFzayhjNChyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHNlbS5fd2FpdGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ0LmRvbmUoKSkKKworICAgICAgICAjIGNsZWFudXAgbG9ja2VkIHNlbWFwaG9yZQorICAgICAgICBzZW0ucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisKKyAgICAgICAgYWNxdWlyZSA9IHRhc2tzLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oYWNxdWlyZS5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGFjcXVpcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLl93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLkJvdW5kZWRTZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VtLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vX3dhaXRlcnMoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZW0uX3ZhbHVlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyYTUxYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ4NCBAQAorIiIiVGVzdHMgZm9yIHByb2FjdG9yX2V2ZW50cy5weSIiIgorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlUHJvYWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBQcm9hY3RvclNvY2tldFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yID0gc2VsZi5wcm9hY3RvcgorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZSh0cikKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInZGF0YScpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX3JlYWRfZnV0ID0gcmVzCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcocmVzKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX25vX2RhdGEoc2VsZik6CisgICAgICAgIHJlcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMuc2V0X3Jlc3VsdChiJycpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyLl9sb29wX3JlYWRpbmcsIHJlcykKKworICAgICAgICB0ci5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9yZWFkX2Z1dCA9IHJlcworICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWQoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9pc19mYXRhbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19jb25uX3Jlc2V0X2xvc3Qoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IChPU0Vycm9yKCkpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgW2InZGF0YSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2xvb3Bfd3JpdGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tb3JlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIFtiJ2RhdGEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fbG9vcF93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suXAorICAgICAgICAgICAgYXNzZXJ0X2NhbGxlZF93aXRoKHRyLl9sb29wX3dyaXRpbmcpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfZXJyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0ci5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgW10pCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19zdG9wKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19jbG9zaW5nKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoMSkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fd3JpdGVfZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QucmVzZXRfbW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfZnV0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2VfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYsIG1fbG9nZ2luZyk6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mb3JjZV9jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlX2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yXzIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mX3dyaXR0ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Zfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXJfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9kdXBsZXhfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGZ1dHVyZXMgPSBbXQorICAgICAgICBmb3IgbXNnIGluIFtiJ2RhdGExJywgYidkYXRhMicsIGInZGF0YTMnLCBiJ2RhdGE0JywgYicnXToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChtc2cpCisgICAgICAgICAgICBmdXR1cmVzLmFwcGVuZChmKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBmdXR1cmVzCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTEnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEyJykKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEyJykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTMnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGE0JykKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK2NsYXNzIEJhc2VQcm9hY3RvckV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc3NvY2ssIHNlbGYuY3NvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfc29ja2V0cGFpcihzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuc3NvY2ssIHNlbGYuY3NvY2spCisKKyAgICAgICAgc2VsZi5sb29wID0gRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoQmFzZVByb2FjdG9yRXZlbnRMb29wLCAnY2FsbF9zb29uJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoQmFzZVByb2FjdG9yRXZlbnRMb29wLCAnX3NvY2tldHBhaXInKQorICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZiwgc29ja2V0cGFpciwgY2FsbF9zb29uKToKKyAgICAgICAgc3NvY2ssIGNzb2NrID0gc29ja2V0cGFpci5yZXR1cm5fdmFsdWUgPSAoCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIGxvb3AgPSBCYXNlUHJvYWN0b3JFdmVudExvb3Aoc2VsZi5wcm9hY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLl9zc29jaywgc3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fY3NvY2ssIGNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AuX2ludGVybmFsX2ZkcywgMSkKKyAgICAgICAgY2FsbF9zb29uLmFzc2VydF9jYWxsZWRfd2l0aChsb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5faW50ZXJuYWxfZmRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9jc29jaykKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2FjdG9yLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9wcm9hY3RvcikKKworICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zb2NrX3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc2VsZi5zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYucHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNlbGYuc29jaywgMTIzKQorICAgICAgICBzZWxmLnByb2FjdG9yLmNvbm5lY3QuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTIzKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2FjY2VwdChzZWxmLnNvY2spCisgICAgICAgIHNlbGYucHJvYWN0b3IuYWNjZXB0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2spCisKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgc2VsZi5wcm9hY3RvcikKKworICAgIGRlZiB0ZXN0X21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLnNvY2ssIHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19mdXQoc2VsZik6CisgICAgICAgIGZ1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdC5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LnJldHVybl92YWx1ZS5hZGRfZG9uZV9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmdfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICBzZWxmLmNzb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGIneCcpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyhbXSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZiwgbV9sb2cpOgorICAgICAgICBwZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbF9zb29uLmNhbGxlZCkKKworICAgICAgICAjIGNhbGxiYWNrCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIGxvb3AoKQorICAgICAgICBzZWxmLnByb2FjdG9yLmFjY2VwdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrKQorCisgICAgICAgICMgY29ubgorICAgICAgICBmdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBmdXQucmVzdWx0LnJldHVybl92YWx1ZSA9ICh1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisKKyAgICAgICAgbWFrZV90ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfdHIuY2FsbGVkKQorCisgICAgICAgICMgZXhjZXB0aW9uCisgICAgICAgIGZ1dC5yZXN1bHQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FuY2VsKHNlbGYpOgorICAgICAgICBwZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorCisgICAgICAgICMgY2FuY2VsbGVkCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc3RvcF9zZXJ2aW5nKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLnByb2FjdG9yLl9zdG9wX3NlcnZpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2spCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY0ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5CkBAIC0wLDAgKzEsNDcwIEBACisiIiJUZXN0cyBmb3IgcXVldWVzLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBsb2NrcworZnJvbSBhc3luY2lvIGltcG9ydCBxdWV1ZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIF9RdWV1ZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisKK2NsYXNzIFF1ZXVlQmFzaWNUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgX3Rlc3RfcmVwcl9vcl9zdHIoc2VsZiwgZm4sIGV4cGVjdF9pZCk6CisgICAgICAgICIiIlRlc3QgUXVldWUncyByZXByIG9yIHN0ci4KKworICAgICAgICBmbiBpcyByZXByIG9yIHN0ci4gZXhwZWN0X2lkIGlzIFRydWUgaWYgd2UgZXhwZWN0IHRoZSBRdWV1ZSdzIGlkIHRvCisgICAgICAgIGFwcGVhciBpbiBmbihRdWV1ZSgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbihxKS5zdGFydHN3aXRoKCc8UXVldWUnKSwgZm4ocSkpCisgICAgICAgIGlkX2lzX3ByZXNlbnQgPSBoZXgoaWQocSkpIGluIGZuKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X2lkLCBpZF9pc19wcmVzZW50KQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9nZXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBnZXQuCisgICAgICAgICAgICB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfZ2V0dGVyc1sxXScgaW4gZm4ocSkpCisgICAgICAgICAgICAjIHJlc3VtZSBxLmdldCBjb3JvdXRpbmUgdG8gZmluaXNoIGdlbmVyYXRvcgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDApCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWRkX2dldHRlcigpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9wdXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgICMgU3RhcnQgYSB0YXNrIHRoYXQgd2FpdHMgdG8gcHV0LgorICAgICAgICAgICAgdGFza3MuVGFzayhxLnB1dCgyKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19wdXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEucHV0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9wdXR0ZXIoKSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3F1ZXVlPVsxXScgaW4gZm4ocSkpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBsb29wKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBxID0gcXVldWVzLlF1ZXVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHJlcHIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIoc3RyLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9mdWxsKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZnVsbCgpKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiBbMSwgMywgMl06CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBpdGVtcyA9IFtxLmdldF9ub3dhaXQoKSBmb3IgXyBpbiByYW5nZSgzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMywgMl0sIGl0ZW1zKQorCisgICAgZGVmIHRlc3RfbWF4c2l6ZShzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKG1heHNpemU9MiwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHEubWF4c2l6ZSkKKyAgICAgICAgaGF2ZV9iZWVuX3B1dCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcHV0dGVyKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KGkpCisgICAgICAgICAgICAgICAgaGF2ZV9iZWVuX3B1dC5hcHBlbmQoaSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgdCA9IHRhc2tzLlRhc2socHV0dGVyKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorCisgICAgICAgICAgICAjIFRoZSBwdXR0ZXIgaXMgYmxvY2tlZCBhZnRlciBwdXR0aW5nIHR3byBpdGVtcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDFdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgIyBMZXQgdGhlIHB1dHRlciByZXN1bWUgYW5kIHB1dCBsYXN0IGl0ZW0uCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDEsIDJdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5nZXRfbm93YWl0KCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAyLCBsb29wLnRpbWUoKSkKKworCitjbGFzcyBRdWV1ZUdldFRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gcS5nZXQoKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3B1dHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUoMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLl9wdXR0ZXJzLmFwcGVuZCgoMiwgd2FpdGVyKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2FpdGVyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGxvY2tzLkV2ZW50KGxvb3A9bG9vcCkKKyAgICAgICAgZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluaXNoZWQKKyAgICAgICAgICAgIHN0YXJ0ZWQuc2V0KCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcS5nZXQoKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5wdXRfbm93YWl0LCAxKQorICAgICAgICAgICAgcXVldWVfZ2V0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxdWV1ZV9nZXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19nZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhxdWV1ZXMuRW1wdHksIHEuZ2V0X25vd2FpdCkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxsZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA2MSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHRhc2tzLndhaXRfZm9yKHEuZ2V0KCksIDAuMDUxLCBsb29wPWxvb3ApKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGdldF90YXNrID0gdGFza3MuVGFzayhxdWV1ZV9nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjAxLCBsb29wPWxvb3ApICAjIGxldCB0aGUgdGFzayBzdGFydAorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZ2V0X3Rhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDYsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0MS5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KCdhJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIucmVzdWx0KCksICdhJykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3dhaXRpbmdfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCwgbWF4c2l6ZT0xKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdiJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKSwgJ2InKQorCisKK2NsYXNzIFF1ZXVlUHV0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgIyBObyBtYXhzaXplLCB3b24ndCBibG9jay4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1sb29wKQorICAgICAgICBzdGFydGVkID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgyKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5nZXRfbm93YWl0KQorICAgICAgICAgICAgcXVldWVfcHV0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZV9wdXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3B1dF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlcy5GdWxsLCBxLnB1dF9ub3dhaXQsIDIpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gcS5nZXQoKSkKKworICAgICAgICB0ID0gdGFza3MuVGFzayhxdWV1ZV9wdXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcHV0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisKKyAgICAgICAgdGFza3MuVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFza3MuVGFzayhxLnB1dCgnYycpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0X25vd2FpdCgpLCAnYycpCisKKyAgICBkZWYgdGVzdF9wdXRfd2l0aF93YWl0aW5nX2dldHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLnB1dCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksICdhJykKKworCitjbGFzcyBMaWZvUXVldWVUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5MaWZvUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsyLCAzLCAxXSwgaXRlbXMpCisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlByaW9yaXR5UXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgaXRlbXMpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZV91bmRlcmZsb3coc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcS50YXNrX2RvbmUpCisKKyAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGFjY3VtdWxhdG9yID0gMAorCisgICAgICAgICMgVHdvIHdvcmtlcnMgZ2V0IGl0ZW1zIGZyb20gdGhlIHF1ZXVlIGFuZCBjYWxsIHRhc2tfZG9uZSBhZnRlciBlYWNoLgorICAgICAgICAjIEpvaW4gdGhlIHF1ZXVlIGFuZCBhc3NlcnQgYWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuCisgICAgICAgIHJ1bm5pbmcgPSBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBub25sb2NhbCBhY2N1bXVsYXRvcgorCisgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgIGl0ZW0gPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBpdGVtCisgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIHRhc2tzLlRhc2sod29ya2VyKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHJhbmdlKDEwMCkpLCBhY2N1bXVsYXRvcikKKworICAgICAgICAjIGNsb3NlIHJ1bm5pbmcgZ2VuZXJhdG9ycworICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgIGRlZiB0ZXN0X2pvaW5fZW1wdHlfcXVldWUoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBqb2luKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShqb2luKCkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCcpCisKKyAgICAgICAgcS5fdW5maW5pc2hlZF90YXNrcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCB0YXNrcz0yJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWE3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxNjYzIEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgZ2MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpby5wcm90b2NvbHMgaW1wb3J0IERhdGFncmFtUHJvdG9jb2wsIFByb3RvY29sCitmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlU2VsZWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yU3NsVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0CisKKworY2xhc3MgVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChCYXNlU2VsZWN0b3JFdmVudExvb3ApOgorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5fc3NvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9jc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisKKworZGVmIGxpc3RfdG9fYnVmZmVyKGw9KCkpOgorICAgIHJldHVybiBieXRlYXJyYXkoKS5qb2luKGwpCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChtLCBtKSwgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSksIF9TZWxlY3RvclNzbFRyYW5zcG9ydCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydF93aXRob3V0X3NzbF9lcnJvcihzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgc3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIGNzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBzZWxlY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc3NvY2spCisgICAgICAgIHNlbGVjdG9yLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDcpCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX25vX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBOb25lCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1vdmVfcmVhZGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fc29ja2V0cGFpcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZigpKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl93cml0ZV90b19zZWxmKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChmLCBGYWxzZSwgc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnJlY3YuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIFRydWUsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCBzZWxmLmxvb3AuX3NvY2tfcmVjdiwgZiwgVHJ1ZSwgc29jaywgMTAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydElzKGVyciwgZi5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsX25vZGF0YShzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc29ja19zZW5kYWxsLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIFRydWUsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5leGNlcHRpb24oKSwgZXJyKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYid0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9ub25lKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgRmFsc2UsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2NhbmNlbGVkX2Z1dChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgRmFsc2UsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jb25uZWN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRUFHQUlOCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgVHJ1ZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QsIGYsCisgICAgICAgICAgICAgVHJ1ZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IGVycm5vLkVOT1RDT05OCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZi5leGNlcHRpb24oKSwgT1NFcnJvcikKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2spLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNvbm4gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApKSwgZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoRmFsc2UsKSwgY29ubi5zZXRibG9ja2luZy5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suYWNjZXB0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgVHJ1ZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCwgZiwgVHJ1ZSwgc29jayksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcl9leGlzdGluZ193cml0ZXIoc2VsZik6CisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHIuX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlciwgdykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5jYW5jZWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfcmVhZF93cml0ZShzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfd3JpdGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgocmVhZGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5jYW5jZWxsZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIHdyaXRlcikpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpXSkKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKHdyaXRlcikKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyLmNhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworCitjbGFzcyBTZWxlY3RvclRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChQcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fc29jaywgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9zb2NrX2ZkLCA3KQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisKKyAgICBkZWYgdGVzdF9jbG9zZV93cml0ZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fYnVmZmVyLmV4dGVuZChiJzEnKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig3LCB1bml0dGVzdC5tb2NrLnNlbnRpbmVsKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB1bml0dGVzdC5tb2NrLnNlbnRpbmVsKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgbGlzdF90b19idWZmZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgICAgICAjIHNlY29uZCBjbG9zZSBzaG91bGQgbm90IHJlbW92ZSByZWFkZXIKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9leGMpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvcihleGMpCisKKyAgICAgICAgbV9leGMuYXNzZXJ0X2NhbGxlZF93aXRoKCdGYXRhbCBlcnJvciBmb3IgJXMnLCB0cikKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGV4YykKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXhjKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3NvY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBTZWxlY3RvclNvY2tldFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChQcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29ja19mZCA9IHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSg3IGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Yoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Zfa2VlcF9vcGVuKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQucmV0dXJuX3ZhbHVlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0LmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfdHJ5YWdhaW5faW50ZXJydXB0ZWQoc2VsZiwgbV9leGMpOgorICAgICAgICBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9jb25uX3Jlc2V0KHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZXJyKHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGExJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YTInKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICBzZWxmLnNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LndyaXRlLCAnc3RyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgIyBUaGlzIGlzIGFuIGludGVybmFsIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWwoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWxfbm9uZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uX2FuZF9jbG9zZShzZWxmLCBtX2xvZyk6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHJlbW92ZV93cml0ZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgcmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrX2ZkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gbGFtYmRhIF86IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNlbGVjdG9yU3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisgICAgICAgIHNlbGYuc3Nsc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICBzZWxmLnNzbGNvbnRleHQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQucmV0dXJuX3ZhbHVlID0gc2VsZi5zc2xzb2NrCisKKyAgICBkZWYgX21ha2Vfb25lKHNlbGYsIGNyZWF0ZV93YWl0ZXI9Tm9uZSk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQpCisgICAgICAgIHNlbGYuc29jay5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZXNldF9jb3VudGVycygpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCwKKyAgICAgICAgICAgIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9vbl9oYW5kc2hha2VfcmVhZGVyX3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRSZWFkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV93cml0ZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9leGMoc2VsZik6CisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLnNpZGVfZWZmZWN0ID0gZXhjCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQpCisgICAgICAgIHRyYW5zcG9ydC5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB0cmFuc3BvcnQuX3dhaXRlci5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9iYXNlX2V4YyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gQmFzZUV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll93YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4YywgdHJhbnNwb3J0Ll93YWl0ZXIuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxIGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkYXRhLCB0cmFuc3BvcnQuX2J1ZmZlcikgICMgSGFzbid0IGJlZW4gaW5jb3Jwb3JhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidkYXRhJywpLCBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV93cml0ZV93YW50c19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfY29ubl9yZXNldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9yZXRyeShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2sucmVjdi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBJbnRlcnJ1cHRlZEVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl93cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRXcml0ZUVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCh0cmFuc3BvcnQuX3NvY2tfZmQpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29ja19mZCwgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9leGMoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX25vbmUoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZ19wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfZW1wdHlfYnVmZmVyKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcigpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcmV0cnkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcmVhZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRSZWFkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd3JpdGVfd2FudHNfcmVhZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfZXhjKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKCksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcmVhZF93YW50c193cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2tfZmQsIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0ci53cml0ZV9lb2YpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUgb3Igbm90IHNzbC5IQVNfU05JLCAnTm8gU05JIHN1cHBvcnQnKQorICAgIGRlZiB0ZXN0X3NlcnZlcl9ob3N0bmFtZShzZWxmKToKKyAgICAgICAgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKyAgICAgICAgc2VsZi5zc2xjb250ZXh0LndyYXBfc29ja2V0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYuc29jaywgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorCisKK2NsYXNzIFNlbGVjdG9yU3NsV2l0aG91dFNzbFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X3NzbF90cmFuc3BvcnRfcmVxdWlyZXNfc3NsX21vZHVsZShzZWxmKToKKyAgICAgICAgTW9jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoTW9jaygpLCBNb2NrKCksIE1vY2soKSwgTW9jaygpKQorCisKK2NsYXNzIFNlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woRGF0YWdyYW1Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNwZWNfc2V0PXNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdmZyb20ucmV0dXJuX3ZhbHVlID0gKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YWdyYW1fcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Zmcm9tLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9vc2VycihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInJywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19idWZmZXIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KGInZGF0YTInKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEyLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpLAorICAgICAgICAgICAgIChiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydC5fYnVmZmVyWzFdWzBdLCBieXRlcykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19idWZmZXJfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YTIgPSBtZW1vcnl2aWV3KGInZGF0YTInKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEyLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpLAorICAgICAgICAgICAgIChiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydC5fYnVmZmVyWzFdWzBdLCBieXRlcykKKworICAgIGRlZiB0ZXN0X3NlbmR0b190cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3NlbmR0b19leGNlcHRpb24oc2VsZiwgbV9sb2cpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgdHJhbnNwb3J0Ll9hZGRyZXNzID0gKCcxMjMnLCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19lcnJvcl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWRfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LnNlbmR0bywgJ3N0cicsICgpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nvbm5lY3RlZF9hZGRyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCBiJ3N0cicsICgnMC4wLjAuMCcsIDIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIGFkZHJlc3M9KDEsKSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEnLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoKSkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChbKGInZGF0YTEnLCAoKSksIChiJ2RhdGEyJywgKCkpXSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9lcnJvcl9yZWNlaXZlZF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yX2Nvbm5lY3RlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICBlcnIgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvcihlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHJhbnNwb3J0KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE2YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDQzMCBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIFN0cmVhbVJlYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIERBVEEgPSBiJ2xpbmUxXG5saW5lMlxubGluZTNcbicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMganVzdCBpbiBjYXNlIGlmIHdlIGhhdmUgdHJhbnNwb3J0IGNsb3NlIGNhbGxiYWNrcworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnN0cmVhbXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF9jdG9yX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fbG9vcCwgbV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc3RyZWFtcy5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidIVFRQLzEuMCAyMDAgT0tcclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgZiA9IHN0cmVhbXMub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHdyaXRlci5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KFplcm9EaXZpc2lvbkVycm9yKCkpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9mZWVkX2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZGF0YV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF96ZXJvKHNlbGYpOgorICAgICAgICAjIFJlYWQgemVybyBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZCgzMCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xpbmVfYnJlYWtzKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMgd2l0aG91dCBsaW5lIGJyZWFrcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLCBzdG9wIGF0IGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoMTAyNCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYWxsIGJ5dGVzIHVudGlsIGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoLTEpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazFcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazFcbmNodW5rMicsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWQoMikpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMSAnKQorICAgICAgICByZWFkX3Rhc2sgPSB0YXNrcy5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazIgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazMgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidcbiBjaHVuazQnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMSBjaHVuazIgY2h1bmszIFxuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYidcbiBjaHVuazQnKS0xLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9saW1pdF93aXRoX2V4aXN0aW5nX2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxXG5saW5lMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2xpbmUyXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InbGknXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDcsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMScpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazNcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InY2h1bmszXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGluZV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ3NvbWUgZGF0YScsIGxpbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lbXB0eV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfYnl0ZV9jb3VudChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUyXG5sJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpIC0gbGVuKGInbGluZTJcbmwnKSwKKyAgICAgICAgICAgIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZVxuJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBICsgc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKGVvZikuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzZXRfZXJyKCk6CisgICAgICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcmVhZGxpbmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RyZWFtLnJlYWRsaW5lKCkKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soc2V0X2VycigpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW3QxLCB0Ml0sIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MS5yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fY2FuY2VsKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkX2FfbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHJlYWRfYV9saW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgZmFpbHMgaWYgc2V0X2V4Y2VwdGlvbigpIGlzbid0IGNhcmVmdWwuCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignbWVzc2FnZScpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uX3dhaXRlciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3NlcnZlcihzZWxmKToKKworICAgICAgICBjbGFzcyBNeVNlcnZlcjoKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3ApOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKworICAgICAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnQoc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gY2xpZW50X3JlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZShkYXRhKQorCisgICAgICAgICAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLnN0YXJ0X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCAxMjM0NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICAgICAgZGVmIGRvbmUodGFzayk6CisgICAgICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUodGFzay5yZXN1bHQoKSkKKworICAgICAgICAgICAgICAgIHRhc2suYWRkX2RvbmVfY2FsbGJhY2soZG9uZSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy5zdGFydF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLnNlcnZlci53YWl0X2Nsb3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQoKToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgIyBzZW5kIGEgbGluZQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKGIiaGVsbG8gd29ybGQhXG4iKQorICAgICAgICAgICAgIyByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIG1zZ2JhY2sgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIG1zZ2JhY2sKKworICAgICAgICAjIHRlc3QgdGhlIHNlcnZlciB2YXJpYW50IHdpdGggYSBjb3JvdXRpbmUgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIuc3RhcnQoKQorICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soY2xpZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNhbGxiYWNrIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGNsaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjBkMDgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKQEAgLTAsMCArMSwxNTE4IEBACisiIiJUZXN0cyBmb3IgdGFza3MucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBNb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIER1bW15OgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0R1bW15KCknCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGFza1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2xhc3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAnb2snCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IHRhc2tzLmFzeW5jKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuYXN5bmMobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hc3luY19mdXR1cmUoc2VsZik6CisgICAgICAgIGZfb3JpZyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX29yaWcuc2V0X3Jlc3VsdCgna28nKQorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhmX29yaWcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdrbycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmID0gdGFza3MuYXN5bmMoZl9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdF9vcmlnID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gdGFza3MuYXN5bmModF9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdCA9IHRhc2tzLmFzeW5jKHRfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIHQgPSB0YXNrcy5hc3luYyh0X29yaWcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgIGRlZiB0ZXN0X2FzeW5jX25laXRoZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmFzeW5jKCdvaycpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHIoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiAnYWJjJworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQuYWRkX2RvbmVfY2FsbGJhY2soRHVtbXkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPFBFTkRJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICB0LmNhbmNlbCgpICAjIERvZXMgbm90IHRha2UgaW1tZWRpYXRlIGVmZmVjdCEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPENBTkNFTExJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8Q0FOQ0VMTEVEPicpCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAiVGFzayg8bm90bXVjaD4pPHJlc3VsdD0nYWJjJz4iKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX2N1c3RvbShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVFtdJworCisgICAgICAgIGNsYXNzIE15VGFzayh0YXNrcy5UYXNrLCBUKToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX3JlcHJfXygpCisKKyAgICAgICAgZ2VuID0gY29ybygpCisgICAgICAgIHQgPSBNeVRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVFtdKDxjb3JvPiknKQorICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGFza19iYXNpY3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBhID0geWllbGQgZnJvbSBpbm5lcjEoKQorICAgICAgICAgICAgYiA9IHlpZWxkIGZyb20gaW5uZXIyKCkKKyAgICAgICAgICAgIHJldHVybiBhK2IKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjEoKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMigpOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAKKworICAgICAgICB0ID0gb3V0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksIDEwNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLmNhbGxfc29vbih0LmNhbmNlbCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF95aWVsZChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgY29ybworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHN0YXJ0IHRhc2sKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfYm90aF90YXNrX2FuZF9pbm5lcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgdC5jYW5jZWwoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19jYXRjaGluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfaWdub3Jpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQzID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIGZ1dDMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQzKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0My5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQzLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgICAgICMgVGhlIHNsZWVwIHNob3VsZCBiZSBjYW5jZWxsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3N0b3Bfd2hpbGVfcnVuX2luX2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICB4ID0gMAorICAgICAgICB3YWl0ZXJzID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBub25sb2NhbCB4CisgICAgICAgICAgICB3aGlsZSB4IDwgMTA6CisgICAgICAgICAgICAgICAgd2FpdGVycy5hcHBlbmQodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyc1stMV0KKyAgICAgICAgICAgICAgICB4ICs9IDEKKyAgICAgICAgICAgICAgICBpZiB4ID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMywgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBjbG9zZSBnZW5lcmF0b3JzCisgICAgICAgIGZvciB3IGluIHdhaXRlcnM6CisgICAgICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuNCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgd2FpdCBmb3IgcmVzdWx0CisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgdGFza3Mud2FpdF9mb3IoZnV0LCAwLjMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3dpdGhfZ2xvYmFsX2xvb3Aoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4wMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4wMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICB0YXNrcy53YWl0KHNldCgpLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgdGFza3Mud2FpdChbdGFza3Muc2xlZXAoMTAuMCwgbG9vcD1zZWxmLmxvb3ApXSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49LTEsIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gdGFza3MuVGFzaygKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj10YXNrcy5GSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmVhbGx5X2RvbmUoc2VsZik6CisgICAgICAgICMgdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBwZW5kaW5nIGxpc3QKKyAgICAgICAgIyBiZWNhbWUgZG9uZSBidXQgdGhlaXIgY2FsbGJhY2tzIGhhdmVuJ3QgYWxsIGJlZW4gY2FsbGVkIHlldAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhID0gdGFza3MuVGFzayhjb3JvMSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soY29ybzIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKAorICAgICAgICAgICAgdGFza3Mud2FpdChbYiwgYV0sIHJldHVybl93aGVuPXRhc2tzLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YSwgYn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgdGFzayBhbHJlYWR5IGhhcyBleGNlcHRpb24KKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soCisgICAgICAgICAgICB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uX2luX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIGV4Y2VwdGlvbiBkdXJpbmcgd2FpdGluZworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKGV4YygpLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ3JlYWxseScpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soc2xlZXBlcigpLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSB0YXNrcy53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZG9uZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgZXJyb3JzID0gc2V0KGYgZm9yIGYgaW4gZG9uZSBpZiBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjExCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jb25jdXJyZW50X2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMSwgbG9vcD1sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldChbYl0pKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKyAgICAgICAgY29tcGxldGVkID0gc2V0KCkKKyAgICAgICAgdGltZV9zaGlmdGVkID0gRmFsc2UKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCB4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRpbWVfc2hpZnRlZAorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgY29tcGxldGVkLmFkZCh4KQorICAgICAgICAgICAgaWYgbm90IHRpbWVfc2hpZnRlZCBhbmQgJ2EnIGluIGNvbXBsZXRlZCBhbmQgJ2InIGluIGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4xNCkKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgYSA9IHNsZWVwZXIoMC4wMSwgJ2EnKQorICAgICAgICBiID0gc2xlZXBlcigwLjAxLCAnYicpCisgICAgICAgIGMgPSBzbGVlcGVyKDAuMTUsICdjJykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB0YXNrcy5hc19jb21wbGV0ZWQoW2IsIGMsIGFdLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiByZXNbOjJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2InIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzJdLCAnYycpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAyCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3Muc2xlZXAoMC4xLCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTUsICdiJywgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIHRhc2tzLmFzX2NvbXBsZXRlZChbYSwgYl0sIHRpbWVvdXQ9MC4xMiwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMSwgdikpCisgICAgICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuVGltZW91dEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMiwgZXhjKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV1bMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMV1bMV0sIGZ1dHVyZXMuVGltZW91dEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfcmV2ZXJzZV93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTAsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdCh0YXNrcy5hc19jb21wbGV0ZWQoZnMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dHMpLCAyKQorCisgICAgICAgIHggPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXRzWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4wNSkKKyAgICAgICAgeSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTAsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2NvbmN1cnJlbnQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3Muc2xlZXAoMC4wNSwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KHRhc2tzLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisgICAgICAgIHdhaXRlciA9IHRhc2tzLndhaXQoZnV0cywgbG9vcD1sb29wKQorICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmLnJlc3VsdCgpIGZvciBmIGluIGRvbmUpLCB7J2EnLCAnYid9KQorCisgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wNQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCBhcmcpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdC8yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKGR0LzIsIGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHNsZWVwZXIoMC4xLCAneWVhaCcpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAneWVhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3NsZWVwX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDEwLjAsICd5ZWFoJywgbG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgb3JpZ19jYWxsX2xhdGVyID0gbG9vcC5jYWxsX2xhdGVyCisKKyAgICAgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBoYW5kbGUKKyAgICAgICAgICAgIGhhbmRsZSA9IG9yaWdfY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgICAgIGxvb3AuY2FsbF9sYXRlciA9IGNhbGxfbGF0ZXIKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlLl9jYW5jZWxsZWQpCisKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3NsZWVwaW5nX3Rhc2soc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDUwMDAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHNsZWVwZnV0ID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwKGR0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNsZWVwZnV0CisgICAgICAgICAgICBzbGVlcGZ1dCA9IHRhc2tzLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZG9pdCgpOgorICAgICAgICAgICAgc2xlZXBlciA9IHRhc2tzLlRhc2soc2xlZXAoNTAwMCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjEsIHNsZWVwZXIuY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcgorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2xlcHQgaW4nCisKKyAgICAgICAgZG9lciA9IGRvaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGRvZXIpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfd2FpdGVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0YXNrLl9mdXRfd2FpdGVyLCBmdXQpCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXNrLl9mdXRfd2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9pbl9jb21wbGV0ZWRfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzay5zZXRfcmVzdWx0KCdvaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRhc2suX3N0ZXApCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgTm9uZQorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgbm90bXVjaCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9yZXN1bHRfZnV0dXJlKHNlbGYpOgorICAgICAgICAjIElmIGNvcm91dGluZSByZXR1cm5zIGZ1dHVyZSwgdGFzayB3YWl0cyBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgICBjbGFzcyBGdXQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dkcykKKworICAgICAgICAgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgICAgICAgICBzZWxmLmNiX2FkZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgICAgZnV0ID0gRnV0KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sod2FpdF9mb3JfZnV0dXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYl9hZGRlZCkKKworICAgICAgICByZXMgPSBvYmplY3QoKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChyZXMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlcywgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3dpdGhfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0YXNrLl9zdGVwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhc2suZXhjZXB0aW9uKCksIEJhc2VFeGNlcHRpb24pCisKKyAgICBkZWYgdGVzdF9iYXNlZXhjZXB0aW9uX2R1cmluZ19jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLCBsb29wPWxvb3ApCisKKyAgICAgICAgYmFzZV9leGMgPSBCYXNlRXhjZXB0aW9uKCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcigpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBiYXNlX2V4YworCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5LCBsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suZXhjZXB0aW9uKCksIGJhc2VfZXhjKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuKSkKKworICAgICAgICBkZWYgZm4xKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2tzLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4xKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmbjIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMikpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZ1dAorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfeWllbGRfdnNfeWllbGRfZnJvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBnZW4KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25vbl9nZW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiAndGVzdCcKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZShjb3JvKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbl9yZXR1cm5fZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoJ3Rlc3QnKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhmdW5jKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisKKyAgICAjIFNvbWUgdGhvcm91Z2ggdGVzdHMgZm9yIGNhbmNlbGxhdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoCisgICAgIyBjb3JvdXRpbmVzLCB0YXNrcyBhbmQgd2FpdCgpLgorCisgICAgZGVmIHRlc3RfeWllbGRfZnV0dXJlX3Bhc3Nlc19jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgaW5uZXIoKSBjYW5jZWxzIHdhaXRlci4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdnb3QgcGFzdCBzbGVlcCgpIGluIGlubmVyKCknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gaW5uZXIoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAwICAjIEV4cGVjdCB0aGlzIHBhdGguCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3dhaXRfZG9lc19ub3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgbWFrZXMgd2FpdCgpIHJldHVybiBlYXJseSwgbGVhdmVzIGlubmVyKCkKKyAgICAgICAgIyBydW5uaW5nLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgZCwgcCA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbaW5uZXIoKV0sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Jlc3VsdChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIGlubmVyLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlubmVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gdGFza3Muc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCdleHBlY3RlZCcpCisgICAgICAgIGlubmVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvdXRlci5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBpbm5lci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Nob3J0Y3V0KHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2hpZWxkKGZ1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9lZmZlY3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGRvZXMgbm90IGFmZmVjdCBpbm5lcigpLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zaGllbGQoaW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2dhdGhlcihzZWxmKToKKyAgICAgICAgY2hpbGQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwYXJlbnQgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IHRhc2tzLnNoaWVsZChwYXJlbnQsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LnJlc3VsdCgpLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9nYXRoZXJfc2hpZWxkKHNlbGYpOgorICAgICAgICBjaGlsZDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2hpbGQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlubmVyMSA9IHRhc2tzLnNoaWVsZChjaGlsZDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjIgPSB0YXNrcy5zaGllbGQoY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gdGFza3MuZ2F0aGVyKGlubmVyMSwgaW5uZXIyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHBhcmVudC5jYW5jZWwoKQorICAgICAgICAjIFRoaXMgc2hvdWxkIGNhbmNlbCBpbm5lcjEgYW5kIGlubmVyMiBidXQgYm90IGNoaWxkMSBhbmQgY2hpbGQyLgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhcmVudC5leGNlcHRpb24oKSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMi5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKworY2xhc3MgR2F0aGVyVGVzdHNCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYub3RoZXJfbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wLmNsb3NlKCkKKworICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIHdoaWxlIGxvb3AuX3JlYWR5OgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgZGVmIF9jaGVja19zdWNjZXNzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgYSwgYiwgYyA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMpLCAqKmt3YXJncykKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IuY2FsbGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWzIsIDEsIDNdKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcygpCisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X29uZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjLCBkLCBlKSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworCitjbGFzcyBGdXR1cmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICByZXR1cm4gZnV0dXJlcworCisgICAgZGVmIF9jaGVja19lbXB0eV9zZXF1ZW5jZShzZWxmLCBzZXFfb3JfaXRlcik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXZlbnRzLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlcV9vcl9pdGVyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgW10pCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqc2VxX29yX2l0ZXIsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfZW1wdHlfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKFtdKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZSgoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2V0KCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKGl0ZXIoIiIpKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaGV0ZXJvZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGZ1dDIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmdhdGhlcihmdXQxLCBmdXQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGFza3MuZ2F0aGVyKGZ1dDEsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaG9tb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqY2hpbGRyZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKmNoaWxkcmVuLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2Z1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcihhLCBiLCBjLCBkLCBlKQorICAgICAgICBjYiA9IE1vY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LmV4Y2VwdGlvbigpLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX29uZV9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUsIGYgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDYpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoYSwgYiwgYywgZCwgZSwgZiwgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgemRlID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBiLnNldF9leGNlcHRpb24oemRlKQorICAgICAgICBjLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfcmVzdWx0KDMpCisgICAgICAgIGUuY2FuY2VsKCkKKyAgICAgICAgcnRlID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKHJ0ZSkKKyAgICAgICAgcmVzID0gc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzJdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzRdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICByZXNbMl0gPSByZXNbNF0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMSwgemRlLCBOb25lLCAzLCBOb25lLCBydGVdKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisKKworY2xhc3MgQ29yb3V0aW5lR2F0aGVyVGVzdHMoR2F0aGVyVGVzdHNCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm8oZnV0PWZ1dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKyAgICAgICAgICAgIGNvcm9zLmFwcGVuZChjb3JvKCkpCisgICAgICAgIHJldHVybiBjb3JvcworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbG9vcF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHJldHVybiAnYWJjJworICAgICAgICBnZW4xID0gY29ybygpCisgICAgICAgIGdlbjIgPSBjb3JvKCkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBnZW4xLmNsb3NlKCkKKyAgICAgICAgZ2VuMi5jbG9zZSgpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoZ2VuMywgZ2VuNCwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIGdlbjMuY2xvc2UoKQorICAgICAgICBnZW40LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NhbmNlbGxhdGlvbl9icm9hZGNhc3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgYWxsIGNoaWxkcmVuLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBjaGlsZDEgPSB0YXNrcy5hc3luYyhpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGNoaWxkMiA9IHRhc2tzLmFzeW5jKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2F0aGVyZXIgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mLCBnYXRoZXJlcgorICAgICAgICAgICAgZ2F0aGVyZXIgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2F0aGVyZXIKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdhdGhlcmVyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fbWFya2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZmlyc3QgbGluZSBtYXJrZWQgIk1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4iCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoZik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBiZSBpZ25vcmVkJykKKworICAgICAgICBhID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBiID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLmdhdGhlcihpbm5lcihhKSwgaW5uZXIoYiksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyIiIlRlc3RzIGZvciB0cmFuc3BvcnRzLnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworCisKK2NsYXNzIFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2N0b3JfZXh0cmFfaXNfbm9uZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5UcmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fZXh0cmEsIHt9KQorCisgICAgZGVmIHRlc3RfZ2V0X2V4dHJhX2luZm8oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KHsnZXh0cmEnOiAnaW5mbyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpbmZvJywgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdleHRyYScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nKSkKKworICAgICAgICBkZWZhdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkZWZhdWx0LCB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nLCBkZWZhdWx0KSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGVsaW5lcyhbJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgdHJhbnNwb3J0LndyaXRlLmNhbGxfY291bnQpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LndyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3RfZGdyYW1fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLkRhdGFncmFtVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5hYm9ydCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdHJhbnNwb3J0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZF9zaWduYWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC50ZXJtaW5hdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5raWxsKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Y2Y0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDE0ODggQEAKKyIiIlRlc3RzIGZvciB1bml4X2V2ZW50cy5weS4iIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2MKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdVTklYIG9ubHknKQorCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzaWduYWwsICdTaWduYWxzIGFyZSBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIFNlbGVjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2hlY2tfc2lnbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgc2lnbmFsLk5TSUcgKyAxKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9ub19oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxLCAoKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfY2FuY2VsbGVkX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKHVuaXR0ZXN0Lm1vY2suTW9jaygpLCAoKSkKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuTlNJRyArIDFdID0gaAorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9oYW5kbGVfc2lnbmFsKHNpZ25hbC5OU0lHICsgMSwgKCkpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNpZ25hbC5OU0lHICsgMSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX3NldHVwX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGNiKQorICAgICAgICBoID0gc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBldmVudHMuSGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2NhbGxiYWNrLCBjYikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBkZWYgc2V0X3dha2V1cF9mZChmZCk6CisgICAgICAgICAgICBpZiBmZCA9PSAtMToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZCA9IHNldF93YWtldXBfZmQKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVGQVVMVAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEVyciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3IyKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuU0lHSFVQXSA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2dnaW5nLmluZm8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbF9jb3VudCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjMoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2dnaW5nLmluZm8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbF9jb3VudCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSFVQLCBtX3NpZ25hbC5TSUdfREZMKSwgbV9zaWduYWwuc2lnbmFsLmNhbGxfYXJnc1swXSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyXzIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgbV9zaWduYWwuU0lHSU5UID0gc2lnbmFsLlNJR0lOVAorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuU0lHSFVQXSA9IG9iamVjdCgpCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQucmVzZXRfbW9jaygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNpZ25hbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoc2lnbmFsLlNJR0lOVCwgbV9zaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlciksCisgICAgICAgICAgICBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9jbGVhbnVwX2Vycm9yKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuaW5mbykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdIVVApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9lcnJvcjIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdIVVApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVycyksIDIpCisKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgtMSkKKworCitjbGFzcyBVbml4UmVhZFBpcGVUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2wocHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBmY250bF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnZmNudGwuZmNudGwnKQorICAgICAgICBmY250bF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZjbnRsX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRklGTworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZW9mKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfYmxvY2tlZChzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lcnJvcihzZWxmLCBtX3JlYWQsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIG0pCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3Jlc3VtZV9yZWFkaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2Nsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKHByb3RvY29scy5CYXNlUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGZjbnRsX3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdmY250bC5mY250bCcpCisgICAgICAgIGZjbnRsX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZmNudGxfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGU09DSworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUuYXNzZXJ0X2NhbGxlZF93aXRoKHRyKQorCisgICAgZGVmIHRlc3RfY3Rvcl93aXRoX3dhaXRlcihzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYid0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9idWZmZXIoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidwcmV2aW91cyddCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidwcmV2aW91cycsIGInZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZyk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0ci5fY29ubl9sb3N0KQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgIyBUaGlzIGlzIGEgYml0IG92ZXJzcGVjaWZpZWQuIDotKAorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICdwaXBlIGNsb3NlZCBieSBwZWVyIG9yIG9zLndyaXRlKHBpcGUsIGRhdGEpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2Uoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKSAgIyBwaXBlIHdhcyBjbG9zZWQgYnkgcGVlcgorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gMworICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InYSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfYWdhaW4oc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VtcHR5KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfZXJyKHNlbGYsIG1fd3JpdGUsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5hYm9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLndyaXRlX2VvZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdHIud3JpdGVfZW9mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci53cml0ZV9lb2YuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfcGVuZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKworY2xhc3MgQWJzdHJhY3RDaGlsZFdhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuQWJzdHJhY3RDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmF0dGFjaF9sb29wLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2VudGVyX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2V4aXRfXywgZiwgZiwgZikKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkJhc2VDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX2RvX3dhaXRwaWQsIGYpCisKKworV2FpdFBpZE1vY2tzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiV2FpdFBpZE1vY2tzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3YWl0cGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSUZFWElURUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRlNJR05BTEVEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRVhJVFNUQVRVUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1RFUk1TSUciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKworCitjbGFzcyBDaGlsZFdhdGNoZXJUZXN0c01peGluOgorCisgICAgaWdub3JlX3dhcm5pbmdzID0gdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QodW5peF9ldmVudHMubG9nZ2VyLCAid2FybmluZyIpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnpvbWJpZXMgPSB7fQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLCAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgc2VsZi5tX2FkZF9zaWduYWxfaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlciA9IHNlbGYuY3JlYXRlX3dhdGNoZXIoKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB3YWl0cGlkKHNlbGYsIHBpZCwgZmxhZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcikgb3IgcGlkICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHBpZCwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcGlkIDwgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi56b21iaWVzLnBvcGl0ZW0oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkLCBzZWxmLnpvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ2hpbGRQcm9jZXNzRXJyb3IoKQorCisgICAgZGVmIGFkZF96b21iaWUoc2VsZiwgcGlkLCByZXR1cm5jb2RlKToKKyAgICAgICAgc2VsZi56b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlICsgMzI3NjgKKworICAgIGRlZiBXSUZFWElURUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIHN0YXR1cyA+PSAzMjc2OAorCisgICAgZGVmIFdJRlNJR05BTEVEKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJldHVybiAzMjcwMCA8IHN0YXR1cyA8IDMyNzY4CisKKyAgICBkZWYgV0VYSVRTVEFUVVMoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXMgLSAzMjc2OAorCisgICAgZGVmIFdURVJNU0lHKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLldJRlNJR05BTEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiAzMjc2OCAtIHN0YXR1cworCisgICAgZGVmIHRlc3RfY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgIGRlZiB3YWl0cGlkX21vY2tzKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mdW5jKHNlbGYpOgorICAgICAgICAgICAgZGVmIHBhdGNoKHRhcmdldCwgd3JhcHBlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1vY2sucGF0Y2godGFyZ2V0LCB3cmFwcz13cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYWxsYWJsZT11bml0dGVzdC5tb2NrLk1vY2spCisKKyAgICAgICAgICAgIHdpdGggcGF0Y2goJ29zLldURVJNU0lHJywgc2VsZi5XVEVSTVNJRykgYXMgbV9XVEVSTVNJRywgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0VYSVRTVEFUVVMnLCBzZWxmLldFWElUU1RBVFVTKSBhcyBtX1dFWElUU1RBVFVTLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XSUZTSUdOQUxFRCcsIHNlbGYuV0lGU0lHTkFMRUQpIGFzIG1fV0lGU0lHTkFMRUQsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRkVYSVRFRCcsIHNlbGYuV0lGRVhJVEVEKSBhcyBtX1dJRkVYSVRFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3Mud2FpdHBpZCcsIHNlbGYud2FpdHBpZCkgYXMgbV93YWl0cGlkOgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgV2FpdFBpZE1vY2tzKG1fd2FpdHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dFWElUU1RBVFVTLCBtX1dURVJNU0lHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJldHVybiB3cmFwcGVkX2Z1bmMKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZChzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MiwgY2FsbGJhY2ssIDksIDEwLCAxNCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCBpcyBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHJldHVybmNvZGUgMTIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTIpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIsIDEyLCA5LCAxMCwgMTQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDIsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MywgY2FsbGJhY2sxLCA3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDQsIGNhbGxiYWNrMiwgMTQ3LCAxOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZGVuIGFyZSBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcyAoc2lnbmFsIDMpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgLTMpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MywgLTMsIDcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGNoaWxkIDIgc3RpbGwgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAyIHRlcm1pbmF0ZXMgKGNvZGUgMTA4KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDEwOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ0LCAxMDgsIDE0NywgMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDMsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuX3Rlcm1pbmF0aW5nX3RvZ2V0aGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NSwgY2FsbGJhY2sxLCAxNywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAyCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ2LCBjYWxsYmFjazIsIDExNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChjb2RlIDc4KQorICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoc2lnbmFsIDUpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgNzgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgLTUpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NSwgNzgsIDE3LCA4KQorICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDYsIC01LCAxMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDUsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDYsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgYmVmb3JlIGJlaW5nIHJlZ2lzdGVyZWQKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgNCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTAsIGNhbGxiYWNrLCAxLCAxMikKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MCwgNCwgMSwgMTIpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTAsIC0xKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVwbGFjZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2sxLCAxOSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBjaGlsZCBhZ2FpbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2syLCAyMSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChzaWduYWwgOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAtOCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUxLCAtOCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAxMykKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JlbW92ZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUyLCBjYWxsYmFjaywgMTk4NCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHRoZSBjaGlsZAorICAgICAgICBzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAoY29kZSA5OSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUyLCA5OSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3Vua25vd25fc3RhdHVzKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUzLCBjYWxsYmFjaywgLTE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHRlcm1pbmF0ZSB3aXRoIHVua25vd24gc3RhdHVzCisgICAgICAgIHNlbGYuem9tYmllc1s1M10gPSAxMTc4CisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUzLCAxMTc4LCAtMTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MywgMTAxKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3JlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGRyZW4KKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTQsIGNhbGxiYWNrMSwgMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NSwgY2FsbGJhY2syLCAyKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU2LCBjYWxsYmFjazMsIDMpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTQpKQorCisgICAgICAgICMgcmVtb3ZlIGNoaWxkIGhhbmRsZXIgMiBtdWx0aXBsZSB0aW1lcworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisKKyAgICAgICAgIyBhbGwgY2hpbGRyZW4gdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NCwgMCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU1LCAxKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTYsIDIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU2LCAyLCAzKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3VuaGFuZGxlZF9leGNlcHRpb24oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTcsIGNhbGxiYWNrKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgIG0ud2FpdHBpZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KHVuaXhfZXZlbnRzLmxvZ2dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIikgYXMgbV9leGNlcHRpb246CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9jaGlsZF9yZWFwZWRfZWxzZXdoZXJlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU4LCBjYWxsYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OCwgNCkKKworICAgICAgICAjIHdhaXRwaWQgaXMgY2FsbGVkIGVsc2V3aGVyZQorICAgICAgICBvcy53YWl0cGlkKDU4LCBvcy5XTk9IQU5HKQorCisgICAgICAgIG0ud2FpdHBpZC5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWQobS53YWl0cGlkKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAjIGhlcmUgdGhlIEZhc3RDaGlsZFdhdGNoZSBlbnRlcnMgYSBkZWFkbG9jaworICAgICAgICAgICAgIyAodGhlcmUgaXMgbm8gd2F5IHRvIHByZXZlbnQgaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU4LCAyNTUpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9waWRfZHVyaW5nX3JlZ2lzdHJhdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciB0d28gY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzLCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDU5MSwgNykKKyAgICAgICAgICAgICMgYW4gdW5rbm93biBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkzLCAxNykKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTEsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTIsIGNhbGxiYWNrMikKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTkxLCA3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYwLCBjYWxsYmFjaykKKworICAgICAgICAjIGF0dGFjaCBhIG5ldyBsb29wCisgICAgICAgIG9sZF9sb29wID0gc2VsZi5sb29wCisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsCisgICAgICAgICAgICAgICAgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fb2xkX3JlbW92ZV9zaWduYWxfaGFuZGxlciwgXAorICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwKKyAgICAgICAgICAgICAgICAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9uZXdfYWRkX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX29sZF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICBtX25ld19hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MCwgOSkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjAsIDkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wX3JhY2VfY29uZGl0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIDMgY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2szID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYyLCBjYWxsYmFjazIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIyLCBjYWxsYmFjazMpCisKKyAgICAgICAgIyBkZXRhY2ggdGhlIGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKE5vbmUpCisKKyAgICAgICAgICAgIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgICMgY2hpbGQgMSAmIDIgdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MSwgMTEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MiwgLTUpCisKKyAgICAgICAgIyBTSUdDSExEIHdhcyBub3QgY2F0Y2hlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX2FkZF9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgbV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisgICAgICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjEsIDExKSAgIyByYWNlIGNvbmRpdGlvbiEKKyAgICAgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MiwgLTUpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMyB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MjIsIDE5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyMiwgMTkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MywgOSkKKyAgICAgICAgICAgICMgb3RoZXIgY2hpbGQgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDY1LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjMsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2NCwgY2FsbGJhY2sxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX2NhbGxiYWNrcyksIDEpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi53YXRjaGVyLl96b21iaWVzKSwgMSkKKworICAgICAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgICAgICBzZWxmLndhdGNoZXIuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLl9jYWxsYmFja3MpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5fem9tYmllcykKKworCitjbGFzcyBTYWZlQ2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5GYXN0Q2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlX3BvbGljeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX3dhdGNoZXIsIHdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX2FmdGVyX3NldChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIoKQorCisgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fd2F0Y2hlciwgd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3dpdGhfbWFpbmxvb3BfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3RocmVhZChzZWxmKToKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LmdldF9ldmVudF9sb29wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgICAgICAgICAgcG9saWN5LmdldF9ldmVudF9sb29wKCkuY2xvc2UoKQorCisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgZGVmIHRlc3RfY2hpbGRfd2F0Y2hlcl9yZXBsYWNlX21haW5sb29wX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbmV3X2xvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AobmV3X2xvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBuZXdfbG9vcCkKKworICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIE5vbmUpCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG5ld19sb29wLmNsb3NlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmEzM2RhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSwxMzkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitpbXBvcnQgYXN5bmNpbworCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCisKKworY2xhc3MgVXBwZXJQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWYgPSBbXQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFucyk6CisgICAgICAgIHNlbGYudHJhbnMgPSB0cmFucworCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYnVmLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBiJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgc2VsZi50cmFucy53cml0ZShiJycuam9pbihzZWxmLmJ1ZikudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnMuY2xvc2UoKQorCisKK2NsYXNzIFByb2FjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB3aW5kb3dzX2V2ZW50cy5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmxvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICB0cmFucyA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KGEsIHByb3RvY29scy5Qcm90b2NvbCgpKQorICAgICAgICBmID0gYXN5bmNpby5hc3luYyhzZWxmLmxvb3Auc29ja19yZWN2KGIsIDEwMCkpCisgICAgICAgIHRyYW5zLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIGInJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9iaW5kKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVx0ZXN0X2RvdWJsZV9iaW5kLSVzJyAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlcnZlcjEgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgIHNlcnZlcjIgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHNlcnZlcjEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLl90ZXN0X3BpcGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKworICAgIGRlZiBfdGVzdF9waXBlKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVxfdGVzdF9waXBlLSVzJyAlIG9zLmdldHBpZCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICBbc2VydmVyXSA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN0YXJ0X3NlcnZpbmdfcGlwZSgKKyAgICAgICAgICAgIFVwcGVyUHJvdG8sIEFERFJFU1MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXJ2ZXIsIHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIpCisKKyAgICAgICAgY2xpZW50cyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc3RyZWFtX3JlYWRlciA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBzdHJlYW1zLlN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIpCisgICAgICAgICAgICB0cmFucywgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogcHJvdG9jb2wsIEFERFJFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnMsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90b2NvbCwgcHJvdG8pCisgICAgICAgICAgICBjbGllbnRzLmFwcGVuZCgoc3RyZWFtX3JlYWRlciwgdHJhbnMpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgdy53cml0ZSgnbG93ZXIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBmcm9tIHIucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZSwgJ0xPV0VSLXt9XG4nLmZvcm1hdChpKS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggMC4ycyB0aW1lb3V0OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgRmFsc2UgYXQgdGltZW91dAorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDAuMikKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjE4IDwgZWxhcHNlZCA8IDAuNSwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5TZXRFdmVudChldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIGZvciBzZXQgZXZlbnQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBUcnVlIGltbWVkaWF0ZWx5CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjAyLCBlbGFwc2VkKQorCisgICAgICAgIF9vdmVybGFwcGVkLlJlc2V0RXZlbnQoZXZlbnQpCisKKyAgICAgICAgIyBXYWl0IGZvciB1bnNldCBldmVudCB3aXRoIGEgY2FuY2VsbGVkIGZ1dHVyZTsKKyAgICAgICAgIyBDYW5jZWxsZWRFcnJvciBzaG91bGQgYmUgcmFpc2VkIGltbWVkaWF0ZWx5CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gZWxhcHNlZCA8IDAuMDIsIGVsYXBzZWQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWQ2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJUZXN0cyBmb3Igd2luZG93X3V0aWxzIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c191dGlscworZnJvbSBhc3luY2lvIGltcG9ydCBfb3ZlcmxhcHBlZAorCisKK2NsYXNzIFdpbnNvY2tldHBhaXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgICAgIGNzb2NrLnNlbmQoYid4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3NvY2sucmVjdigxMDI0KSkKKworICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgIHNzb2NrLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLndpbmRvd3NfdXRpbHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2V4YyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuZ2V0c29ja25hbWUucmV0dXJuX3ZhbHVlID0gKCcnLCAxMjM0NSkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5hY2NlcHQucmV0dXJuX3ZhbHVlID0gb2JqZWN0KCksIG9iamVjdCgpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcikKKworCitjbGFzcyBQaXBlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGlwZV9vdmVybGFwcGVkKHNlbGYpOgorICAgICAgICBoMSwgaDIgPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG92MSA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjEuUmVhZEZpbGUoaDEsIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkcpCisgICAgICAgICAgICBFUlJPUl9JT19JTkNPTVBMRVRFID0gOTk2CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3YxLmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS53aW5lcnJvciwgRVJST1JfSU9fSU5DT01QTEVURSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JT19JTkNPTVBMRVRFJykKKworICAgICAgICAgICAgb3YyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjIuZXJyb3IsIDApCisKKyAgICAgICAgICAgIG92Mi5Xcml0ZUZpbGUoaDIsIGIiaGVsbG8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorCisgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoW292Mi5ldmVudF0sIEZhbHNlLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgX3dpbmFwaS5XQUlUX09CSkVDVF8wKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZ2V0cmVzdWx0KCksIGIiaGVsbG8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMSkKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisKKyAgICBkZWYgdGVzdF9waXBlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCwgXyA9IHdpbmRvd3NfdXRpbHMucGlwZShvdmVybGFwcGVkPShUcnVlLCBUcnVlKSkKKyAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShfKQorICAgICAgICBwID0gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5maWxlbm8oKSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhhbmRsZSwgaCkKKworICAgICAgICAjIGNoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBwIGNsb3NlcyBoYW5kbGUKKyAgICAgICAgZGVsIHAKKyAgICAgICAgdGVzdC5zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIDYpICAgICAjIEVSUk9SX0lOVkFMSURfSEFORExFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lOVkFMSURfSEFORExFJykKKworCitjbGFzcyBQb3BlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvcGVuKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBzID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocy51cHBlcigpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBtc2cgPSBiImJsYWhcbiIKKworICAgICAgICBwID0gd2luZG93c191dGlscy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvbW1hbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj13aW5kb3dzX3V0aWxzLlBJUEUpCisKKyAgICAgICAgZm9yIGYgaW4gW3Auc3RkaW4sIHAuc3Rkb3V0LCBwLnN0ZGVycl06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgd2luZG93c191dGlscy5QaXBlSGFuZGxlKQorCisgICAgICAgIG92aW4gPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZvdXQgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZlcnIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKworICAgICAgICBvdmluLldyaXRlRmlsZShwLnN0ZGluLmhhbmRsZSwgbXNnKQorICAgICAgICBvdm91dC5SZWFkRmlsZShwLnN0ZG91dC5oYW5kbGUsIDEwMCkKKyAgICAgICAgb3ZlcnIuUmVhZEZpbGUocC5zdGRlcnIuaGFuZGxlLCAxMDApCisKKyAgICAgICAgZXZlbnRzID0gW292aW4uZXZlbnQsIG92b3V0LmV2ZW50LCBvdmVyci5ldmVudF0KKyAgICAgICAgIyBTdXBlci1sb25nIHRpbWVvdXQgZm9yIHNsb3cgYnVpbGRib3RzLgorICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoZXZlbnRzLCBUcnVlLCAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdm91dC5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92ZXJyLnBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Zpbi5wZW5kaW5nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Zpbi5nZXRyZXN1bHQoKSwgbGVuKG1zZykpCisgICAgICAgIG91dCA9IG92b3V0LmdldHJlc3VsdCgpLnJzdHJpcCgpCisgICAgICAgIGVyciA9IG92ZXJyLmdldHJlc3VsdCgpLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihvdXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGVyciksIDApCisgICAgICAgICMgYWxsb3cgZm9yIHBhcnRpYWwgcmVhZHMuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy51cHBlcigpLnJzdHJpcCgpLnN0YXJ0c3dpdGgob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIic3RkZXJyIi5zdGFydHN3aXRoKGVycikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0cy50eHQgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjA5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK3Rlc3RfYXN5bmNpby50ZXN0X2Jhc2VfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X2Z1dHVyZXMKK3Rlc3RfYXN5bmNpby50ZXN0X2xvY2tzCit0ZXN0X2FzeW5jaW8udGVzdF9wcm9hY3Rvcl9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3F1ZXVlcwordGVzdF9hc3luY2lvLnRlc3Rfc2VsZWN0b3JfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9zdHJlYW1zCit0ZXN0X2FzeW5jaW8udGVzdF90YXNrcwordGVzdF9hc3luY2lvLnRlc3RfdHJhbnNwb3J0cwordGVzdF9hc3luY2lvLnRlc3RfdW5peF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3dpbmRvd3NfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF93aW5kb3dzX3V0aWxzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1ZDA2MzJlLi4wODRkMjQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTE5LDYgKzE5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK1RJTUVPVVQgPSAzCiBIQVNfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykKIAogY2xhc3MgZHVtbXlzb2NrZXQ6CkBAIC0zOTUsNyArMzk2LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTc0MCw3ICs3NDQsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2Myw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3MSw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk2LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDcgKzgwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CmluZGV4IDMwYzNiNGEuLjg0NjQ0ZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW8KIGltcG9ydCBhdGV4aXQKK2ltcG9ydCBfdGVzdGNhcGkKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAjIyMgaGVscGVycwpAQCAtMjMsNyArMjQsOSBAQAogZGVmIHJhaXNlMigpOgogICAgIHJhaXNlIFN5c3RlbUVycm9yCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgR2VuZXJhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgpAQCAtMTQxLDggKzE0NCw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFs1XSkKIAogCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHNob3dzIGEgbGVhayBpbiByZWZsZWFrIG1vZGUgaWYgYXRleGl0IGRvZXNuJ3QKKyAgICAgICAgIyB0YWtlIGNhcmUgdG8gZnJlZSBjYWxsYmFja3MgaW4gaXRzIHBlci1zdWJpbnRlcnByZXRlciBtb2R1bGUKKyAgICAgICAgIyBzdGF0ZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBkZWwgYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWtfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgU2ltaWxhciB0byB0aGUgYWJvdmUsIGJ1dCB3aXRoIGEgcmVmY3ljbGUgdGhyb3VnaCB0aGUgYXRleGl0CisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGF0ZXhpdC5fX2F0ZXhpdCA9IGF0ZXhpdAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGV4aXQuX25jYWxsYmFja3MoKSwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CmluZGV4IGE5MmNmODcuLmQ1MDc1NDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKQEAgLTUsMTMgKzUsMTggQEAKIGRlZiBwYWNrKHdpZHRoLCBkYXRhKToKICAgICByZXR1cm4gYicnLmpvaW4odi50b19ieXRlcyh3aWR0aCwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpIGZvciB2IGluIGRhdGEpCiAKLXBhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1tYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1taW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDQpfQorZGVmIHVucGFjayh3aWR0aCwgZGF0YSk6CisgICAgcmV0dXJuIFtpbnQuZnJvbV9ieXRlcyhkYXRhW2k6IGkgKyB3aWR0aF0sIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB3aWR0aCldCisKK3BhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittaW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQogCiBkYXRhcyA9IHsKICAgICAxOiBiJ1x4MDBceDEyXHg0NVx4YmJceDdmXHg4MFx4ZmYnLAogICAgIDI6IHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY3LCAweDdmZmYsIC0weDgwMDAsIC0xKSwKKyAgICAzOiBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4OSwgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpLAogICAgIDQ6IHBhY2tzWzRdKDAsIDB4MTIzNDU2NzgsIDB4NDU2Nzg5YWIsIC0weDQ1Njc4OWFiLAogICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMSksCiB9CkBAIC0xOSw2ICsyNCw3IEBACiBJTlZBTElEX0RBVEEgPSBbCiAgICAgKGInYWJjJywgMCksCiAgICAgKGInYWJjJywgMiksCisgICAgKGInYWInLCAzKSwKICAgICAoYidhYmMnLCA0KSwKIF0KIApAQCAtMjYsOCArMzIsMTAgQEAKIGNsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSksIHcpLCA1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUsIC04LCAtMSksIHcpLCA4KQpAQCAtMzYsOSArNDQsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChieXRlYXJyYXkoKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1KSwgdyksICg1LCA1KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1LCAtOCwgLTEpLCB3KSwgKC04LCA1KSkKQEAgLTUwLDE2ICs2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pKQogCiAgICAgZGVmIHRlc3RfbWF4cHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGRhdGFzW3ddLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddIC0gbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfYXZnKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmIC5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUsIDgpLCB3KSwgNikKQEAgLTc0LDE3ICs5MCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDYwMDAwMDAwKQogCiAgICAgZGVmIHRlc3RfYXZncHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMV0sIDEpLCAxOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1syXSwgMiksIDUwNTM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbM10sIDMpLCAxMjkzNzA5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKIAogICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKHAoKnJhbmdlKDEwMCkpLCB3KSwgNTcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGF1ZGlvb3Aucm1zKHAobWF4dmFsdWVzW3ddKSAqIDUsIHcpLApAQCAtOTMsMTEgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWludmFsdWVzW3ddLCBkZWx0YT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzFdLCAxKSwgNzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMl0sIDIpLCAyMDAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1szXSwgMyksIDUxMjA1MjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQogCiAgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYnl0ZWFycmF5KCksIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhtZW1vcnl2aWV3KGInJyksIHcpLCAtMSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMCwgMSwgMiksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMSwgMiwgLTMsIC00KSwgdyksIDEpCkBAIC0xMDYsMjIgKzEzMCwyOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYicnLCBiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGJ5dGVhcnJheSgpLCBieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQobWVtb3J5dmlldyhiJycpLCBtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzW3ddLCBiJ1wwJyAqIGxlbihkYXRhc1t3XSksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1sxXSwgZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMl0sIGRhdGFzWzJdLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbM10sIGRhdGFzWzNdLCAzKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzRdLCBkYXRhc1s0XSwgNCksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9iaWFzKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZm9yIGJpYXMgaW4gMCwgMSwgLTEsIDEyNywgLTEyOCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYicnLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGJ5dGVhcnJheSgpLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKG1lbW9yeXZpZXcoYicnKSwgdywgYmlhcyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MTNceDQ2XHhiY1x4ODBceDgxXHgwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMSksCkBAIC0xMzgsNiArMTY5LDE3IEBACiAgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgLTB4ODAwMDAwMDApLAogICAgICAgICAgICAgICAgIGRhdGFzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMSwgMHgxMjM0NTcsIDB4NDU2NzhhLCAtMHg0NTY3ODgsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwLCAtMHg3ZmZmZmYsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIDB4N2ZmZmZmZmYpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICBkYXRhc1szXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDEsIDB4MTIzNDU2NzksIDB4NDU2Nzg5YWMsIC0weDQ1Njc4OWFhLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDgwMDAwMDAwLCAtMHg3ZmZmZmZmZiwgMCkpCkBAIC0xNTIsOTkgKzE5NCwxNDEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMHg3ZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9saW4ybGluKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbd10sIHcsIHcpLCBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGJ5dGVhcnJheShkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjAwLCAweDQ1MDAsIC0weDQ1MDAsIDB4N2YwMCwgLTB4ODAwMCwgLTB4MTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjAwMDAsIDB4NDUwMDAwLCAtMHg0NTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMCwgLTB4ODAwMDAwLCAtMHgxMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIwMDAwMDAsIDB4NDUwMDAwMDAsIC0weDQ1MDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQwMCwgMHg0NTY3MDAsIC0weDQ1NjcwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwLCAtMHg4MDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDAwMDAsIDB4NDU2NzAwMDAsIC0weDQ1NjcwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDEpLAorICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQ1NjAwLCAweDQ1Njc4OTAwLCAtMHg0NTY3ODkwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmMDAsIC0weDgwMDAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpKQogCiAgICAgZGVmIHRlc3RfYWRwY20ybGluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYnl0ZWFycmF5KGInXHgwN1x4N2ZceDdmJyksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKG1lbW9yeXZpZXcoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAyLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbMl0oMCwgMHhiLCAweDI5LCAtMHgxNiwgMHg3MiwgLTB4YjMpLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDMsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1szXSgwLCAweGIwMCwgMHgyOTAwLCAtMHgxNjAwLCAweDcyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDApLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDQsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1s0XSgwLCAweGIwMDAwLCAweDI5MDAwMCwgLTB4MTYwMDAwLCAweDcyMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMDAwKSwgKC0xNzksIDQwKSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1wwJyAqIDUsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiB3ICogMTAsICgwLCAwKSkpCiAKICAgICBkZWYgdGVzdF9saW4yYWRwY20oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMV0sIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzJdLCAyLCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbNF0sIDQsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShieXRlYXJyYXkoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzW3ddLCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQogCiAgICAgZGVmIHRlc3RfbGluMmFsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhieXRlYXJyYXkoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcobWVtb3J5dmlldyhkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQogCiAgICAgZGVmIHRlc3RfYWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDAzXHgyNFx4MmFceDUxXHg1NFx4NTVceDU4XHg2Ylx4NzFceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4ODNceGE0XHhhYVx4ZDFceGQ0XHhkNVx4ZDhceGViXHhmMVx4ZmYnCiAgICAgICAgIHNyYyA9IFstNjg4LCAtNzIwLCAtMjI0MCwgLTQwMzIsIC05LCAtMywgLTEsIC0yNywgLTI0NCwgLTgyLCAtMTA2LAogICAgICAgICAgICAgICAgNjg4LCA3MjAsIDIyNDAsIDQwMzIsIDksIDMsIDEsIDI3LCAyNDQsIDgyLCAxMDZdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpKQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oYnl0ZWFycmF5KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihtZW1vcnl2aWV3KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKIAogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9saW4ydWxhdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMl0sIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1s0XSwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGJ5dGVhcnJheShkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCiAKICAgICBkZWYgdGVzdF91bGF3MmxpbihzZWxmKToKICAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MGVceDI4XHgzZlx4NTdceDZhXHg3Nlx4N2NceDdlXHg3ZidcCiAgICAgICAgICAgICAgICAgICBiJ1x4ODBceDhlXHhhOFx4YmZceGQ3XHhlYVx4ZjZceGZjXHhmZVx4ZmYnCiAgICAgICAgIHNyYyA9IFstODAzMSwgLTQ0NDcsIC0xNDcxLCAtNDk1LCAtMTYzLCAtNTMsIC0xOCwgLTYsIC0yLCAwLAogICAgICAgICAgICAgICAgODAzMSwgNDQ0NywgMTQ3MSwgNDk1LCAxNjMsIDUzLCAxOCwgNiwgMiwgMF0KLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkpCisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihieXRlYXJyYXkoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKG1lbW9yeXZpZXcoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQogCiAgICAgICAgICMgQ3VycmVudCB1LWxhdyBpbXBsZW1lbnRhdGlvbiBoYXMgdHdvIGNvZGVzIGZvIDA6IDB4N2YgYW5kIDB4ZmYuCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgxMjcpKSArIGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGInJywgdywgMiksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYnl0ZWFycmF5KCksIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKG1lbW9yeXZpZXcoYicnKSwgdywgMiksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1wwJyAqIGxlbihkYXRhc1t3XSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAxKSwKQEAgLTI1MywxNCArMzM3LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1syXSwgMiwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzNdLCAzLCAyKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbNF0sIDQsIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9yYXRlY3Yoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGJ5dGVhcnJheSgpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YobWVtb3J5dmlldyhiJycpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCA1LCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkgKiA1KSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgMTYwMDAsIE5vbmUpLApAQCAtMjcyLDcgKzM2Myw3IEBACiAgICAgICAgIGQyLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxICsgZDIsIGInXDAwMFwwMDBcMDAxXDAwMVwwMDJcMDAxXDAwMFwwMDBcMDAxXDAwMVwwMDInKQogCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkMCwgc3RhdGUwID0gYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKQogICAgICAgICAgICAgZCwgc3RhdGUgPSBiJycsIE5vbmUKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhc1t3XSksIHcpOgpAQCAtMjgzLDEzICszNzQsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIHN0YXRlMCkKIAogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKHBhY2tzW3ddKDAsIDEsIDIpLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oMiwgMSwgMCkpCiAKICAgICBkZWYgdGVzdF90b21vbm8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMjk5LDkgKzM5MiwxMyBAQAogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CiAgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oZGF0YTIsIHcsIDAuNSwgMC41KSwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGJ5dGVhcnJheShkYXRhMiksIHcsIDAuNSwgMC41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKG1lbW9yeXZpZXcoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQogCiAgICAgZGVmIHRlc3RfdG9zdGVyZW8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMzExLDE0ICs0MDgsMjUgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDEpLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhieXRlYXJyYXkoZGF0YTEpLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8obWVtb3J5dmlldyhkYXRhMSksIHcsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2ZpbmRmYWN0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGRhdGFzWzJdLCBkYXRhc1syXSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgMS4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihiJ1wwJyAqIGxlbihkYXRhc1syXSksIGRhdGFzWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAwLjApCiAKICAgICBkZWYgdGVzdF9maW5kZml0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgZGF0YXNbMl0pLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksICgwLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChtZW1vcnl2aWV3KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkYXRhc1syXSkpLCAoMCwgMS4wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIHBhY2tzWzJdKDEsIDIsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgODAzOC44KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl1bOi0yXSAqIDUgKyBkYXRhc1syXSwgZGF0YXNbMl0pLApAQCAtMzI2LDE2ICs0MzQsMzcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpbmRtYXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGRhdGFzWzJdLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoYnl0ZWFycmF5KGRhdGFzWzJdKSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KG1lbW9yeXZpZXcoZGF0YXNbMl0pLCAxKSwgNSkKIAogICAgIGRlZiB0ZXN0X2dldHNhbXBsZShzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGEgPSBwYWNrc1t3XSgwLCAxLCAtMSwgbWF4dmFsdWVzW3ddLCBtaW52YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShieXRlYXJyYXkoZGF0YSksIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShtZW1vcnl2aWV3KGRhdGEpLCB3LCAwKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMSksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMyksIG1heHZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgNCksIG1pbnZhbHVlc1t3XSkKIAorICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgorICAgICAgICBzd2FwcGVkX2RhdGFzID0geworICAgICAgICAgICAgMTogZGF0YXNbMV0sCisgICAgICAgICAgICAyOiBwYWNrc1syXSgwLCAweDM0MTIsIDB4Njc0NSwgLTB4NjY0NiwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDM6IHBhY2tzWzNdKDAsIDB4NTYzNDEyLCAtMHg3Njk4YmIsIDB4Nzc5OGJhLCAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICAgICAgNDogcGFja3NbNF0oMCwgMHg3ODU2MzQxMiwgLTB4NTQ3Njk4YmIsIDB4NTU3Njk4YmEsCisgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICB9CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGRhdGFzW3ddLCB3KSwgc3dhcHBlZF9kYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChzd2FwcGVkX2RhdGFzW3ddLCB3KSwgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYnl0ZWFycmF5KGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAobWVtb3J5dmlldyhkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVsZW4oc2VsZik6CiAgICAgICAgICMgZnJvbSBpc3N1ZSAzMzA2LCBwcmV2aW91c2x5IGl0IHNlZ2ZhdWx0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwKQEAgLTM2NSwxMCArNDk0LDMzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGRhdGEsIHNpemUsIHN0YXRlKQogCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gJ2FiY2QnCisgICAgICAgIHNpemUgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5nZXRzYW1wbGUsIGRhdGEsIHNpemUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5taW5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5ybXMsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmdwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1heHBwLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuY3Jvc3MsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tdWwsIGRhdGEsIHNpemUsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnRvbW9ubywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b3N0ZXJlbywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hZGQsIGRhdGEsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5iaWFzLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmV2ZXJzZSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJsaW4sIGRhdGEsIHNpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5yYXRlY3YsIGRhdGEsIHNpemUsIDEsIDEsIDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ydWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfd3JvbmdzaXplKHNlbGYpOgogICAgICAgICBkYXRhID0gYidhYmNkZWZnaCcKICAgICAgICAgc3RhdGUgPSBOb25lCi0gICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgMywgNSwgMTAyNCk6CisgICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgNSwgMTAyNCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnVsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hbGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBkYXRhLCBzaXplLCBzdGF0ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKaW5kZXggMTM2OTVkZS4uYjk3MzhkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKQEAgLTUsMTAgKzUsMjEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKLQoraW1wb3J0IHN0cnVjdAorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIAogCiBjbGFzcyBMZWdhY3lCYXNlNjRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIExlZ2FjeSBBUEkgaXMgbm90IGFzIHBlcm1pc3NpdmUgYXMgdGhlIG1vZGVybiBBUEkKKyAgICBkZWYgY2hlY2tfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0InLCAoMiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgbXVsdGlkaW1lbnNpb25hbCkKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGludF9kYXRhKQorCiAgICAgZGVmIHRlc3RfZW5jb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKQpAQCAtMjQsNyArMzUsOSBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbiIpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhieXRlYXJyYXkoYidhYmMnKSksIGInWVdKalxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZW5jb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMobWVtb3J5dmlldyhiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5lbmNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2RlY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTQxLDcgKzU0LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGInJyksIGInJykKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGJ5dGVhcnJheShiJ1lXSmpcbicpKSwgYidhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5kZWNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhtZW1vcnl2aWV3KGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhhcnJheSgnQicsIGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmRlY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTczLDYgKzg4LDQyIEBACiAKIAogY2xhc3MgQmFzZVhZVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBNb2Rlcm4gQVBJIGNvbXBsZXRlbHkgaWdub3JlcyBleHBvcnRlZCBkaW1lbnNpb24gYW5kIGZvcm1hdCBkYXRhIGFuZAorICAgICMgdHJlYXRzIGFueSBidWZmZXIgYXMgYSBzdHJlYW0gb2YgYnl0ZXMKKyAgICBkZWYgY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19vdGhlcl90eXBlcyhzZWxmLCBmLCBieXRlc19kYXRhLCBleHBlY3RlZCk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBiID0gYnl0ZWFycmF5KGJ5dGVzX2RhdGEpCisgICAgICAgIGVxKGYoYiksIGV4cGVjdGVkKQorICAgICAgICAjIFRoZSBieXRlYXJyYXkgd2Fzbid0IG11dGF0ZWQKKyAgICAgICAgZXEoYiwgYnl0ZXNfZGF0YSkKKyAgICAgICAgZXEoZihtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgIGVxKGYoYXJyYXkoJ0InLCBieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICAjIFhYWCB3aHkgaXMgYjY0ZW5jb2RlIGhhcmRjb2RlZCBoZXJlPworICAgICAgICBzZWxmLmNoZWNrX25vbmJ5dGVfZWxlbWVudF9mb3JtYXQoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKyAgICAgICAgc2VsZi5jaGVja19tdWx0aWRpbWVuc2lvbmFsKGJhc2U2NC5iNjRlbmNvZGUsIGJ5dGVzX2RhdGEpCisKKyAgICBkZWYgY2hlY2tfbXVsdGlkaW1lbnNpb25hbChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgaWYgbGVuKGRhdGEpICUgMiBlbHNlIGIiIgorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBzaGFwZSA9IChsZW4oYnl0ZXNfZGF0YSkgLy8gMiwgMikKKyAgICAgICAgbXVsdGlkaW1lbnNpb25hbCA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnQicsIHNoYXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYobXVsdGlkaW1lbnNpb25hbCksIGYoYnl0ZXNfZGF0YSkpCisKKyAgICBkZWYgY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgKiAoKDQgLSBsZW4oZGF0YSkpICUgNCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IGRhdGEgKyBwYWRkaW5nICMgTWFrZSBzdXJlIGNhc3Qgd29ya3MKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoaW50X2RhdGEpLCBmKGJ5dGVzX2RhdGEpKQorCisKICAgICBkZWYgdGVzdF9iNjRlbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIFRlc3QgZGVmYXVsdCBhbHBoYWJldApAQCAtOTAsMTMgKzE0MSwxNiBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YicqJCcpLCBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKICAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWJ5dGVhcnJheShiJyokJykpLAogICAgICAgICAgICBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9bWVtb3J5dmlldyhiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWFycmF5KCdCJywgYicqJCcpKSwKKyAgICAgICAgICAgYicwMWEqYiRjZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI2NGVuY29kZSwgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRlbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgYiIiLCBhbHRjaGFycz0iKiQiKQogICAgICAgICAjIFRlc3Qgc3RhbmRhcmQgYWxwaGFiZXQKICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShiInd3dy5weXRob24ub3JnIiksIGIiZDNkM0xuQjVkR2h2Ymk1dmNtYz0iKQogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIiYSIpLCBiIllRPT0iKQpAQCAtMTEwLDE1ICsxNjQsMTUgQEAKICAgICAgICAgICAgYiJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJjZCcsIGInWVdKalpBPT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKQogICAgICAgICAjIFRlc3Qgd2l0aCAnVVJMIHNhZmUnIGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJyksIGInMDFhLWJfY2QnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYnl0ZWFycmF5KGInXHhkM1ZceGJlb1x4ZjdceDFkJykpLCBiJzAxYS1iX2NkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGInMDFhLWJfY2QnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMTQxLDcgKzE5NSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgdGVzdHNfYWx0Y2hhcnMgPSB7KGInMDFhKmIkY2QnLCBiJyokJyk6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE2MCw3ICsyMTUsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShieXRlYXJyYXkoYiJZV0pqIikpLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwgYiJZV0pqIiwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKQogCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c191cmxzYWZlID0ge2InMDFhLWJfY2QnOiBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsCkBAIC0xNzAsNyArMjI2LDkgQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoYnl0ZWFycmF5KGInMDFhLWJfY2QnKSksIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsIGInMDFhLWJfY2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjY0ZGVjb2RlX3BhZGRpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiYXNlNjQuYjY0ZGVjb2RlLCBiJ2FiYycpCkBAIC0yMDUsOCArMjYzLDggQEAKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2QnKSwgYidNRlJHR1pBPScpCiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYidhYmNkZScpLCBiJ01GUkdHWkRGJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ01GUkdHWkE9JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjMyZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZW5jb2RlLCBiJ2FiY2QnLCBiJ01GUkdHWkE9JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIzMmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IzMmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yMjIsNyArMjgwLDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoYnl0ZWFycmF5KGInTUZSR0c9PT0nKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZGVjb2RlLCBiJ01GUkdHPT09JywgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlX2Nhc2Vmb2xkKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI3Nyw4ICszMzYsOSBAQAogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSwgYicwMTAyQUJDREVGJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShiJ1x4MDAnKSwgYicwMCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYnl0ZWFycmF5KGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSksIGInMDEwMkFCQ0RFRicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIxNmVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmVuY29kZSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwMTAyQUJDREVGJykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IxNmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yOTMsMTQgKzM1MywyNjggQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShiJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMkFCQ0RFRiIpKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmRlY29kZSwgYiIwMTAyQUJDREVGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShtZW1vcnl2aWV3KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYXJyYXkoJ0InLCBiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorCisgICAgZGVmIHRlc3RfYTg1ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyI6IGInR0JcXDZgRS1aUD1EZi4xR0ViPicsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIiEhKi0nIjlldTcjUkxoRyRrM1tXJi5vTmcnR1ZCIihgPTUyKiQkIiIiCisgICAgICAgICAgICAgICBiIiIiKEIrPF9wUixVRmNiLW4tVnIvMWlKLTBKUD09MWM3ME0zJnMjXTQ/WWttNVhAXyg2cSdSODg0Y0UiIiIKKyAgICAgICAgICAgICAgIGIiIiJIOU1KOFg6ZjEraDwpbHQjPUJTZzM+WzpaQz90IU1TQTddQGNCUEQzc0NpKycuRSxmbz5GRU1iTiIiIgorICAgICAgICAgICAgICAgYiIiIkdeNFVeSSFwSG5KOlc8KUtTPi85TGwlIklOL2BqWU9IR11pUGEuUSRSJGpENFM9UTdEVFY4KlRVIiIiCisgICAgICAgICAgICAgICBiIiIibnNyZFcyWmV0WEtBWS9ZZChMP1snZD9PXFxASzJfXVkyJW9ecW1uKmA1VGE6YU47VEpiZyJHWmQiIiIKKyAgICAgICAgICAgICAgIGIiIiIqXjpqZUNFLiVmXFwsITVndGdpRWk4TlxcVWpRNU9la2lxQnVtLVg2MG5GPylAb18lcVBxImFkYCIiIgorICAgICAgICAgICAgICAgYiIiInI7SFQiIiIsCisgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICAgICAgYiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iOgorICAgICAgICAgICAgICAgIGInQDpFX1dBUyxSZ0JraEYiRC9POTJFSDYsQkZgcXRSSCRWYkM2VVhANDduPzNEOTImJlQnCisgICAgICAgICAgICAgICAgYiI6SmFuZDtjSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIsCisgICAgICAgICAgICBiIm5vIHBhZGRpbmcuLiI6IGInREpwWTpAOlduX0RKKFJTJywKKyAgICAgICAgICAgIGIiemVybyBjb21wcmVzc2lvblwwXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMXonLAorICAgICAgICAgICAgYiJ6ZXJvIGNvbXByZXNzaW9uXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnLAorICAgICAgICAgICAgYiJCb3VuZGFyeTpcMFwwXDBcMCI6IGInNj5xIWFBNzlNKDNXSy1bISEnLAorICAgICAgICAgICAgYiJTcGFjZSBjb21wcjogICAgIjogYic7ZkgvVEFLWUskRC9hTVYrPFZkTCcsCisgICAgICAgICAgICBiJ1x4ZmYnOiBiJ3JyJywKKyAgICAgICAgICAgIGInXHhmZicqMjogYidzOE4nLAorICAgICAgICAgICAgYidceGZmJyozOiBiJ3M4VyonLAorICAgICAgICAgICAgYidceGZmJyo0OiBiJ3M4Vy0hJywKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEsIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhLCBhZG9iZT1UcnVlKSwgYic8ficgKyByZXMgKyBiJ34+JywgZGF0YSkKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5hODVlbmNvZGUsIGIid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0JcXDZgRS1aUD1EZi4xR0ViPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYTg1ZW5jb2RlLCAiIikKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPUZhbHNlKSwKKyAgICAgICAgICAgYidHQlxcNmBFLVxuWlA9RGYuMVxuR0ViPicpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJcMFwwXDBcMHd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1GYWxzZSksCisgICAgICAgICAgIGInekdCXFw2YEVcbi1aUD1EZi5cbjFHRWI+JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1UcnVlKSwKKyAgICAgICAgICAgYic8fkdCXFw2YFxuRS1aUD1EZlxuLjFHRWI+XG5+PicpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjgsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3l5JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFZkJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjYsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFUnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNSwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs5JykKKworICAgIGRlZiB0ZXN0X2I4NWVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInd3d3LnB5dGhvbi5vcmcnOiBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIjAwOUM2MU8pfk0ybmgtYzM9SXdzNUReais2Y3JYMTcjU0tIOTMzN1giIiIKKyAgICAgICAgICAgICAgICBiIiIiQVIhX25CcWImJUNAQ3J7RUc7ZkNGZmxTU0cmTUZpSTV8MnlKVXU9P0t0ViE3TGA2bk5OSiZhZCIiIgorICAgICAgICAgICAgICAgIGIiIiJPaWZOdFAqR0EtUjg+fTJTWG8rSVR3UHZZVX0waW9XTXlWJlhsWkl8WTtBNkRhQipeVGJhaSVqIiIiCisgICAgICAgICAgICAgICAgYiIiImN6SnF6ZTBfZEBmUHNSOGdvVEVPaD40MWVqRSM8dWtkY3k7bCREbTNuMzxaSm9TbU1acHJOOXAiIiIKKyAgICAgICAgICAgICAgICBiIiIicUB8eyhzSHYpfXRnV3VFdSg3aFV3NihVa3hWZ0gheXVINF56YD9AOSNLcCRQJGpRcGYlKzFjdiIiIgorICAgICAgICAgICAgICAgIGIiIiIoOXpQPClZYUQ0KnhCMEsrfSs7YTtOanhxPG1Layk9O2BYfj9DdExGQGJVOFZeITRgbGAxJCgjIiIiCisgICAgICAgICAgICAgICAgYiIiIntRZHAiIiIsCisgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiI6CisgICAgICAgICAgICAgICAgYiIiIlZQYSFzV29CbitYPS1iMVpFa09IYWRMQlhiI2B9bmQzciVZTHF0VkpNQFVJWk9INTVwUGYkQCgiIiIKKyAgICAgICAgICAgICAgICBiIiIiUSZkJH1TNkVxRUZmbFNTRyZNRmlJNXtDZUJRUmJqRGt2I0NJeV5vc0UrQVc3ZHdsIiIiLAorICAgICAgICAgICAgYidubyBwYWRkaW5nLi4nOiBiJ1pmX3VQVlBzQCFaZjdubycsCisgICAgICAgICAgICBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJzogYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAwJywKKyAgICAgICAgICAgIGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCc6IGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwJywKKyAgICAgICAgICAgIGIiIiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiIiOiBiIiIiTFRgMCRXTU9pN0lzZ0N3MDAiIiIsCisgICAgICAgICAgICBiJ1NwYWNlIGNvbXByOiAgICAnOiBiJ1EqZEVwV2d1ZzNaRSRpckFScihoJywKKyAgICAgICAgICAgIGInXHhmZic6IGIne3snLAorICAgICAgICAgICAgYidceGZmJyoyOiBiJ3xOaicsCisgICAgICAgICAgICBiJ1x4ZmYnKjM6IGInfE5zOScsCisgICAgICAgICAgICBiJ1x4ZmYnKjQ6IGInfE5zQzAnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShkYXRhKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWVuY29kZSwgYiJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnKQorCisgICAgZGVmIHRlc3RfYTg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidHQlxcNmBFLVpQPURmLjFHRWI+JzogYid3d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICBiIiIiISAhICogLSciXG5cdFx0OWV1XHJcbjcjICBSTFx2aEckazNbVyYub05nJ0dWQiIoYD01MiokJCIiIgorICAgICAgICAgICAgICAgYiIiIihCKzxfcFIsVUZjYi1uLVZyLzFpSi0wSlA9PTFjNzBNMyZzI100P1lrbTVYQF8oNnEnUjg4NGNFIiIiCisgICAgICAgICAgICAgICBiIiIiSDlNSjhYOmYxK2g8KWx0Iz1CU2czPls6WkM/dCFNU0E3XUBjQlBEM3NDaSsnLkUsZm8+RkVNYk4iIiIKKyAgICAgICAgICAgICAgIGIiIiJHXjRVXkkhcEhuSjpXPClLUz4vOUxsJSJJTi9gallPSEddaVBhLlEkUiRqRDRTPVE3RFRWOCpUVSIiIgorICAgICAgICAgICAgICAgYiIiIm5zcmRXMlpldFhLQVkvWWQoTD9bJ2Q/T1xcQEsyX11ZMiVvXnFtbipgNVRhOmFOO1RKYmciR1pkIiIiCisgICAgICAgICAgICAgICBiIiIiKl46amVDRS4lZlxcLCE1Z3RnaUVpOE5cXFVqUTVPZWtpcUJ1bS1YNjBuRj8pQG9fJXFQcSJhZGAiIiIKKyAgICAgICAgICAgICAgIGIiIiJyO0hUIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJAOkVfV0FTLFJnQmtoRiJEL085MkVINixCRmBxdFJIJFZiQzZVWEA0N24/M0Q5MiYmVDpKYW5kO2MiIiIKKyAgICAgICAgICAgICAgICBiIiIiSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIiIjoKKyAgICAgICAgICAgICAgICBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNCcKKyAgICAgICAgICAgICAgICBiJzU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30nLAorICAgICAgICAgICAgYidESnBZOkA6V25fREooUlMnOiBiJ25vIHBhZGRpbmcuLicsCisgICAgICAgICAgICBiJ0g9Xyw4K0NmPixFLG9OMkYob1Exeic6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYic2PnEhYUE3OU0oM1dLLVshISc6IGIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBiJztmSC9UQUtZSyREL2FNVis8VmRMJzogYidTcGFjZSBjb21wcjogICAgJywKKyAgICAgICAgICAgIGIncnInOiBiJ1x4ZmYnLAorICAgICAgICAgICAgYidzOE4nOiBiJ1x4ZmYnKjIsCisgICAgICAgICAgICBiJ3M4VyonOiBiJ1x4ZmYnKjMsCisgICAgICAgICAgICBiJ3M4Vy0hJzogYidceGZmJyo0LAorICAgICAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYic8ficgKyBkYXRhICsgYid+PicsIGFkb2JlPVRydWUpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKCc8fiVzfj4nICUgZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPVRydWUpLAorICAgICAgICAgICAgICAgcmVzLCBkYXRhKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5eScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjgpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxWZCcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjcpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxVJywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krOScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjUpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYTg1ZGVjb2RlLCBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYjg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnOiBiJ3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgIGIiIiIwMDlDNjFPKX5NMm5oLWMzPUl3czVEXmorNmNyWDE3I1NLSDkzMzdYIiIiCisgICAgICAgICAgICAgICAgYiIiIkFSIV9uQnFiJiVDQENye0VHO2ZDRmZsU1NHJk1GaUk1fDJ5SlV1PT9LdFYhN0xgNm5OTkomYWQiIiIKKyAgICAgICAgICAgICAgICBiIiIiT2lmTnRQKkdBLVI4Pn0yU1hvK0lUd1B2WVV9MGlvV015ViZYbFpJfFk7QTZEYUIqXlRiYWklaiIiIgorICAgICAgICAgICAgICAgIGIiIiJjekpxemUwX2RAZlBzUjhnb1RFT2g+NDFlakUjPHVrZGN5O2wkRG0zbjM8WkpvU21NWnByTjlwIiIiCisgICAgICAgICAgICAgICAgYiIiInFAfHsoc0h2KX10Z1d1RXUoN2hVdzYoVWt4VmdIIXl1SDReemA/QDkjS3AkUCRqUXBmJSsxY3YiIiIKKyAgICAgICAgICAgICAgICBiIiIiKDl6UDwpWWFENCp4QjBLK30rO2E7Tmp4cTxtS2spPTtgWH4/Q3RMRkBiVThWXiE0YGxgMSQoIyIiIgorICAgICAgICAgICAgICAgIGIiIiJ7UWRwIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJWUGEhc1dvQm4rWD0tYjFaRWtPSGFkTEJYYiNgfW5kM3IlWUxxdFZKTUBVSVpPSDU1cFBmJEAoIiIiCisgICAgICAgICAgICAgICAgYiIiIlEmZCR9UzZFcUVGZmxTU0cmTUZpSTV7Q2VCUVJiakRrdiNDSXleb3NFK0FXN2R3bCIiIjoKKyAgICAgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiIsCisgICAgICAgICAgICBiJ1pmX3VQVlBzQCFaZjdubyc6IGInbm8gcGFkZGluZy4uJywKKyAgICAgICAgICAgIGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwMCc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYiIiIkxUYDAkV01PaTdJc2dDdzAwIiIiOiBiIiIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIiIiwKKyAgICAgICAgICAgIGInUSpkRXBXZ3VnM1pFJGlyQVJyKGgnOiBiJ1NwYWNlIGNvbXByOiAgICAnLAorICAgICAgICAgICAgYid7eyc6IGInXHhmZicsCisgICAgICAgICAgICBiJ3xOaic6IGInXHhmZicqMiwKKyAgICAgICAgICAgIGInfE5zOSc6IGInXHhmZicqMywKKyAgICAgICAgICAgIGInfE5zQzAnOiBiJ1x4ZmYnKjQsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEpLCByZXMpCisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWRlY29kZSwgYidjWHhMI2FDdmxTWipER2NhJVQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYTg1X3BhZGRpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4IiwgcGFkPVRydWUpLCBiJ0dRN15EJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4IiwgcGFkPVRydWUpLCBiIkdeJzJnIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eCIsIHBhZD1UcnVlKSwgYidHXitINScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYR1E3XkQnKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHUTdeRCcpLCBiInhceDAwXHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIiR14nMmciKSwgYiJ4eFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0g1JyksIGIieHh4XHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitJWCcpLCBiInh4eHgiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSVhHUTdeRCcpLCBiInh4eHh4XHgwMFx4MDBceDAwIikKKworICAgIGRlZiB0ZXN0X2I4NV9wYWRkaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieCIsIHBhZD1UcnVlKSwgYidjbU16WicpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eCIsIHBhZD1UcnVlKSwgYidjejZIKycpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZEsnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4eCIsIHBhZD1UcnVlKSwgYidjekFldCcpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHh4eCIsIHBhZD1UcnVlKSwgYidjekFldGNtTXpaJykKKworICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY21NelonKSwgYiJ4XHgwMFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6NkgrJyksIGIieHhceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFkSycpLCBiInh4eFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZXQnKSwgYiJ4eHh4IikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWV0Y21NelonKSwgYiJ4eHh4eFx4MDBceDAwXHgwMCIpCisKKyAgICBkZWYgdGVzdF9hODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gKHNldChyYW5nZSgzMikpIHwgc2V0KHJhbmdlKDExOCwgMjU2KSkpIC0gc2V0KGInIFx0XG5cclx2JykKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYichISEhJyArIGJ5dGVzKFtjXSkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInISEhIScgKyBieXRlcyhbY10pLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYic8fiEhISEnICsgYnl0ZXMoW2NdKSArIGInfj4nLCBhZG9iZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fnN0aWxsIG1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxzbyBtYWxmb3JtZWR+PiIsIGFkb2JlPVRydWUpCisKKyAgICAgICAgIyBXaXRoIGFkb2JlPUZhbHNlICh0aGUgZGVmYXVsdCksIEFkb2JlIGZyYW1pbmcgbWFya2VycyBhcmUgZGlzYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiIjx+fj4iLCBhZG9iZT1UcnVlKSAgIyBzYW5pdHkgY2hlY2sKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY3giLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhYmNkZXkiLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhIGJcbmMiLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YiIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGIncycsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4JywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXLScsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4Vy0iJywgYWRvYmU9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gbGlzdChyYW5nZSgzMykpICsgXAorICAgICAgICAgICAgICAgICAgbGlzdChiJyJcJywuLzpbXFxdJykgKyBcCisgICAgICAgICAgICAgICAgICBsaXN0KHJhbmdlKDEyOCwgMjU2KSkKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5iODVkZWNvZGUoYicwMDAwJyArIGJ5dGVzKFtjXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDMScpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVfbm9uYXNjaWlfc3RyKHNlbGYpOgogICAgICAgICBkZWNvZGVfZnVuY3MgPSAoYmFzZTY0LmI2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjMyZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMTZkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZSkKICAgICAgICAgZm9yIGYgaW4gZGVjb2RlX2Z1bmNzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgJ3dpdGggbm9uLWFzY2lpIFx4Y2InKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDdiOWJkMTkuLjU4MGE5NjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC03LDcgKzcsNyBAQAogY19iaXNlY3QgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Jpc2VjdCcsIGZyZXNoPVsnX2Jpc2VjdCddKQogCiBjbGFzcyBSYW5nZShvYmplY3QpOgotICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYW55IGludGVnZXIgd2lkdGggbGltaXRhdGlvbnMuIiIiCisgICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3QgdGhhdCBoYXMgYW4gaW5zZXJ0KCkgbWV0aG9kLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMzMDEKICAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEzNDk2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CmluZGV4IDA0ZTNmNjEuLjE2Njc4NDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CkBAIC00MjkwLDkgKzQyOTAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtb3J5dmlldywgeCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclByb3RvY29sKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBjMzQyYTQzLi42ODQzMDY2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC00NjQsNiArNDY0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBib21bOjJdICsgYidhJykKIAorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCAiZm9vIiwge30sIFgoKSkKKwogICAgIGRlZiB0ZXN0X2dlbmVyYWxfZXZhbChzZWxmKToKICAgICAgICAgIyBUZXN0cyB0aGF0IGdlbmVyYWwgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIHRoZSBsb2NhbHMgYXJndW1lbnQKIApAQCAtNTc5LDcgKzU4NCwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGZyb3plbmRpY3RfZXJyb3IoImZyb3plbmRpY3QgaXMgcmVhZG9ubHkiKQogCiAgICAgICAgICMgcmVhZC1vbmx5IGJ1aWx0aW5zCi0gICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQorICAgICAgICBpZiBpc2luc3RhbmNlKF9fYnVpbHRpbnNfXywgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBmcm96ZW5fYnVpbHRpbnMgPSBmcm96ZW5kaWN0KF9fYnVpbHRpbnNfXy5fX2RpY3RfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQogICAgICAgICBjb2RlID0gY29tcGlsZSgiX19idWlsdGluc19fWydzdXBlcmdsb2JhbCddPTI7IHByaW50KHN1cGVyZ2xvYmFsKSIsICJ0ZXN0IiwgImV4ZWMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmcm96ZW5kaWN0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBjb2RlLCB7J19fYnVpbHRpbnNfXyc6IGZyb3plbl9idWlsdGluc30pCkBAIC04MzksOCArODQ3LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIuMCwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgMyksIDMpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCAoKSkKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1heCwgQmFkU2VxKCkpCisKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWF4KDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWF4KDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWF4KDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg1Nyw2ICs4NzYsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsIDIpLCBkZWZhdWx0PTMsIGtleT1uZWcpLCAxKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTg4Myw2ICs5MDksOSBAQAogCiAgICAgICAgIGZvciBzdG10IGluICgKICAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSkiLAorICAgICAgICAgICAgIm1pbigxLCAyLCBkZWZhdWx0PU5vbmUpIiwgICAgICAjIHJlcXVpcmUgY29udGFpbmVyIGZvciBkZWZhdWx0CisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSwga2V5PWludCkiLAogICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAogICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCkBAIC04OTksNiArOTI4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBrZXk9bmVnKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCBrZXk9bmVnKSwgMikgICAgICMgdHdvIGVsZW1zCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9Tm9uZSksIE5vbmUpICAgICMgemVybyBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9MSwga2V5PW5lZyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMikKKwogICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQogICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCiAgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCkBAIC05NDAsMjkgKzk3NiwyNSBAQAogICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQsIGJlbG93CiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQogICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQogICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJ0RlYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgxMDApLCAnIEpvaG5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMzAwKSwgJ1hYWCcqMTAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDEwMDApLCAnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfb3Blbl9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICBvbGRfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKQEAgLTk3NywxNSArMTAwOSwxNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgICAgICBjdXJyZW50X2xvY2FsZV9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgY3VycmVudF9sb2NhbGVfZW5jb2RpbmcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRfZW52aXJvbikKIAorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gb3BlbihfX2ZpbGVfXykKKyAgICAgICAgd2l0aCBmaWxlb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUoZmlsZW9iai5maWxlbm8oKSkpCisKICAgICBkZWYgdGVzdF9vcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCcgJyksIDMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnQScpLCA2NSkKQEAgLTEwOTYsNyArMTEzMCw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQogICAgIGRlZiBjaGVja19pbnB1dF90dHkoc2VsZiwgcHJvbXB0LCB0ZXJtaW5hbF9pbnB1dCwgc3RkaW9fZW5jb2Rpbmc9Tm9uZSk6CkBAIC0xNDc2LDE3ICsxNTA5LDExIEBACiAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCiAgICAgICAgICMgIGRlcHJlY2F0ZWQKLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQotICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqLCBmbXRfc3RyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQogCiAgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCiAKQEAgLTE1NjUsMjEgKzE1OTIsMTAgQEAKICAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvcnRlZCwgZGF0YSwgTm9uZSwgbGFtYmRhIHgseTogMCkKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3RfY2xhc3NlcyA9IChCdWlsdGluVGVzdCwgVGVzdFNvcnRlZCkKLQotICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKLQorZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NUZXN0U3VpdGUKKyAgICB0ZXN0cy5hZGRUZXN0KERvY1Rlc3RTdWl0ZShidWlsdGlucykpCisgICAgcmV0dXJuIHRlc3RzCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CmluZGV4IDM1MjBlODMuLjg0N2M3YTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtMjg4LDggKzI4OCwyMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4obHN0KSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4odHVwbGUobHN0KSksIGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGl0ZXIobHN0KSksIGIiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCi0gICAgICAgICMgWFhYIG1vcmUuLi4KKyAgICAgICAgZG90X2pvaW4gPSBzZWxmLnR5cGUydGVzdChiIi46Iikuam9pbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgbWVtb3J5dmlldyhiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBieXRlYXJyYXkoYiJjZCIpXSksIGIiYWIuOmNkIikKKyAgICAgICAgIyBTdHJlc3MgaXQgd2l0aCBtYW55IGl0ZW1zCisgICAgICAgIHNlcSA9IFtiImFiYyJdICogMTAwMAorICAgICAgICBleHBlY3RlZCA9IGIiYWJjIiArIGIiLjphYmMiICogOTk5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oc2VxKSwgZXhwZWN0ZWQpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2hlbiBzb21lIGl0ZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgIyBzZXF1ZW5jZSBoYXMgdGhlIHdyb25nIHR5cGUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCAiY2QiLCBiImVmIl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgImNkIiwgYiJlZiJdKQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTc1OSw3ICs3NzMsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgpAQCAtODk1LDYgKzkwOSwxNSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBiWzM6NF0gPSBlbGVtCiAKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9leHRlbmQoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2UgdGhlIHJlc2l6aW5nIGxvZ2ljIChzZWUgaXNzdWUgIzE5MDg3KQorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMDApKSkKKyAgICAgICAgZGVsIGJbOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDEwMCkpKQorICAgICAgICBiLmV4dGVuZChyYW5nZSgxMDAsIDExMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTEwKSkpCisKICAgICBkZWYgdGVzdF9leHRlbmRlZF9zZXRfZGVsX3NsaWNlKHNlbGYpOgogICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIDE8PDMzMywgLTEsIC0yLCAtMzEsIC0zMDApCiAgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgpAQCAtMTI3NCw2ICsxMjk3LDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCisgICAgICAgIHNlcCA9IHNlbGYubWFyc2hhbChiJycpCisgICAgICAgIG5ld3ZhbCA9IHNlcC5qb2luKFt2YWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHZhbCwgbmV3dmFsKQorCiAKIGNsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5IGIvTGliL3Rlc3QvdGVzdF9iejIucHkKaW5kZXggNjc2NGU1OS4uOGQ5M2UyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iejIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iejIucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24zCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGJpZ21lbXRlc3QsIF80RworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGJpZ21lbXRlc3QsIF80RwogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTksNiArOSw3IEBACiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluawogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtMTksMTAgKzIwLDEwIEBACiBiejIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2J6MicpCiBmcm9tIGJ6MiBpbXBvcnQgQloyRmlsZSwgQloyQ29tcHJlc3NvciwgQloyRGVjb21wcmVzc29yCiAKLWhhc19jbWRsaW5lX2J1bnppcDIgPSBzeXMucGxhdGZvcm0gbm90IGluICgid2luMzIiLCAib3MyZW14IikKIAogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICJCYXNlIGZvciBvdGhlciB0ZXN0Y2FzZXMuIgorCiAgICAgVEVYVF9MSU5FUyA9IFsKICAgICAgICAgYidyb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoXG4nLAogICAgICAgICBiJ2Jpbjp4OjE6MTpiaW46L2JpbjpcbicsCkBAIC01MSwxMyArNTIsMTcgQEAKICAgICBFTVBUWV9EQVRBID0gYidCWmg5XHgxN3JFOFBceDkwXHgwMFx4MDBceDAwXHgwMCcKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAotICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgZWxzZToKICAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CiAgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNzEsMzEgKzc2LDIxIEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuREFUQSAqIHN0cmVhbXMpCiAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoMTIzLjQ1NikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJ6IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJyeCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicmJ0IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRmlsZSwgMTIzLjQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJ6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJyeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicmJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCiAKICAgICBkZWYgdGVzdFJlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQpAQCAtMjE2LDkgKzIxMSw4IEBACiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQogICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5fX25leHRfXykKLSAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgLl9fbmV4dF9fIGNhbGwgZmFpbGVkIHRvCi0gICAgICAgICMgcmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgYnoyZikKKyAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgY2FsbCBmYWlsZWQgdG8gcmVsZWFzZSB0aGUgbG9jay4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5yZWFkbGluZXMpCiAKICAgICBkZWYgdGVzdFdyaXRlKHNlbGYpOgpAQCAtMjYyLDggKzI1Niw4IEBACiAgICAgICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKIAogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKSBhcyBiejJmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZSwgYiJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnoyZi53cml0ZSwgYiJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQogCiAgICAgZGVmIHRlc3RBcHBlbmQoc2VsZik6CiAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CkBAIC0zODEsNyArMzc1LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnNlZWthYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYuc2Vla2FibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQwNyw3ICs0MDEsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnoyZi5yZWFkYWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDI0LDcgKzQxOCw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0YWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ6MmYud3JpdGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQzOCw3ICs0MzIsNyBAQAogICAgICAgICAgICAgZGVsIG8KIAogICAgIGRlZiB0ZXN0T3Blbk5vbmV4aXN0ZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKIAogICAgIGRlZiB0ZXN0UmVhZGxpbmVzTm9OZXdsaW5lKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTkxMDQzOiByZWFkbGluZXMoKSBmYWlscyBvbiBhIGZpbGUgY29udGFpbmluZyBubyBuZXdsaW5lLgpAQCAtNDc4LDcgKzQ3Miw3IEBACiAgICAgICAgICMgSXNzdWUgIzcyMDU6IFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBzaG91bGRuJ3QgZGVhZGxvY2suCiAgICAgICAgIGRhdGEgPSBiIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgZGVmIGNvbXAoKToKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQpAQCAtNDg5LDI4ICs0ODMsMjcgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHRlc3RXaXRob3V0VGhyZWFkaW5nKHNlbGYpOgotICAgICAgICBiejIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImJ6MiIsIGJsb2NrZWQ9KCJ0aHJlYWRpbmciLCkpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uQW5kUmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBsaW5lbGVuID0gbGVuKHNlbGYuVEVYVF9MSU5FU1swXSkKICAgICAgICAgaGFsZmxlbiA9IGxpbmVsZW4gLy8gMgotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkKGhhbGZsZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1swXVtoYWxmbGVuOl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGluZWxlbjpdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1sxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBzZWxmLlRFWFRfTElORVNbMl0pCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CiAgICAgICAgICAgICBiejJmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgotICAgICAgICAgICAgICAgIG5leHQoYnoyZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGJ6MmYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIFtdKQogCiAgICAgZGVmIHRlc3RNdWx0aVN0cmVhbU9yZGVyaW5nKHNlbGYpOgpAQCAtNTc4LDYgKzU3MSwyMCBAQAogICAgICAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFs1MDAtMTUwOl0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHRoZSBlb3NfbWFnaWMgZmllbGQgKDYgYnl0ZXMpIGFuZCBDUkMgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBzZWxmLkRBVEFbOi0xMF0KKyAgICAgICAgd2l0aCBCWjJGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oc2VsZi5URVhUKSksIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSA0LWJ5dGUgZmlsZSBoZWFkZXIsIGFuZCBibG9jayBoZWFkZXIgb2YgYXQgbGVhc3QgMTQ2IGJpdHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIyKToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKKwogY2xhc3MgQloyQ29tcHJlc3NvclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CiAgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKQEAgLTcxMyw5NyArNzIwLDEyMiBAQAogCiAKIGNsYXNzIE9wZW5UZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCB0aGUgb3BlbiBmdW5jdGlvbi4iCisKKyAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gYnoyLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3YiIsICJ4YiIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieGIiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ4Iik6CisgICAgICAgICAgICBpZiBtb2RlID09ICJ4IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3dCIsICJ4dCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieHQiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYXQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJ0IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW1zKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW52YWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgbmV3bGluZT0iXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ3YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3Blbiwgc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgbm9uLWRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHRleHRfbmF0aXZlX2VvbCA9IHRleHQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQorICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoInV0Zi0xNi1sZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcl9oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBub24tZGVmYXVsdCBlbmNvZGluZyBlcnJvciBoYW5kbGVyLgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiZm9vXHhmZmJhciIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBcCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAogICAgICAgICAgICAgICAgIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X25ld2xpbmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aXRoIGV4cGxpY2l0IG5ld2xpbmUgKHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgZGlzYWJsZWQpLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgbmV3bGluZT0iXG4iKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IDkwMTNhN2IuLjIyYzhlYjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBNSVNTSU5HX0NfRE9DU1RSSU5HUwogdHJ5OgogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC00Myw3ICs0NCw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X25vX0ZhdGFsRXJyb3JfaW5maW5pdGVfbG9vcChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBfdGVzdGNhcGk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfdGVzdGNhcGkuY3Jhc2hfbm9fY3VycmVudF90aHJlYWQoKSddLApAQCAtMTA5LDYgKzExMCwzNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBaKCksW2InMSddLDMsWzEsIDJdLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9kb2NzdHJpbmdfc2lnbmF0dXJlX3BhcnNpbmcoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkubm9fZG9jc3RyaW5nLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fZG9jX18sICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfZW1wdHkuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUgKGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sICIoc2lnKSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX2RvY19fLAorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLl9fdGV4dF9zaWduYXR1cmVfXywKKyAgICAgICAgICAgICIocGFyYW1ldGVyKSIpCisKKwogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRlc3RQZW5kaW5nQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xOTIsNiArMjI0LDkgQEAKICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKIAorCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKQEAgLTIwMiw0NyArMjM3LDEwOSBAQAogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKGlkKGJ1aWx0aW5zKSwgZikKICAgICAgICAgICAgICIiIi5mb3JtYXQodykKICAgICAgICAgd2l0aCBvcGVuKHIsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICByZXQgPSBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKHN5cy5tb2R1bGVzKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKGJ1aWx0aW5zKSkKIAorCiAjIEJ1ZyAjNjAxMgogY2xhc3MgVGVzdDYwMTIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5hcmdwYXJzaW5nKCJIZWxsbyIsICJXb3JsZCIpLCAxKQogCiAKLWNsYXNzIEVtYmVkZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAidGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cyIpCi0gICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKLSAgICAgICAgIyBYWFggb25seSB0ZXN0ZWQgdW5kZXIgVW5peCBjaGVja291dHMKK2NsYXNzIEVtYmVkZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKLSAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZXhlbmFtZSA9ICJfdGVzdGVtYmVkIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICBleHQgPSAoIl9kIiBpZiAiX2QiIGluIHN5cy5leGVjdXRhYmxlIGVsc2UgIiIpICsgIi5leGUiCisgICAgICAgICAgICBleGVuYW1lICs9IGV4dAorICAgICAgICAgICAgZXhlcGF0aCA9IG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIikKKyAgICAgICAgc2VsZi50ZXN0X2V4ZSA9IGV4ZSA9IG9zLnBhdGguam9pbihleGVwYXRoLCBleGVuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXhlKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQogICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIG90aGVyd2lzZSB3ZSBnZXQgYSBmYXRhbCBlcnJvcjoKICAgICAgICAgIyAiUHlfSW5pdGlhbGl6ZTogVW5hYmxlIHRvIGdldCB0aGUgbG9jYWxlIGVuY29kaW5nCiAgICAgICAgICMgTG9va3VwRXJyb3I6IG5vIGNvZGVjIHNlYXJjaCBmdW5jdGlvbnMgcmVnaXN0ZXJlZDogY2FuJ3QgZmluZCBlbmNvZGluZyIKKyAgICAgICAgc2VsZi5vbGRjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICBvcy5jaGRpcihiYXNlcGF0aCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRjd2QpCisKKyAgICBkZWYgcnVuX2VtYmVkZGVkX2ludGVycHJldGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUnVucyBhIHRlc3QgaW4gdGhlIGVtYmVkZGVkIGludGVycHJldGVyIiIiCisgICAgICAgIGNtZCA9IFtzZWxmLnRlc3RfZXhlXQorICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCisgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKCJsYXRpbjEiKSwgZXJyLmRlY29kZSgibGF0aW4xIikKKworICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBqdXN0IGEgImRvbid0IGNyYXNoIiB0ZXN0CisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCk6CisgICAgICAgIHJwLCB3cCA9IG9zLnBpcGUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIiwgIl90ZXN0ZW1iZWQiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbZXhlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgICAgIHByaW50KG91dC5kZWNvZGUoJ2xhdGluMScpKQotICAgICAgICAgICAgICAgIHByaW50KGVyci5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4od3AsICd3JykgYXMgdzoKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3BpcGVfZW5jb2RpbmcgPSB3LmVuY29kaW5nCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRjd2QpCisgICAgICAgICAgICBvcy5jbG9zZShycCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRfcGlwZV9lbmNvZGluZworCisgICAgZGVmIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrcyBmb3JjZWQgY29uZmlndXJhdGlvbiBvZiBlbWJlZGRlZCBpbnRlcnByZXRlciBJTyBzdHJlYW1zCisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoImZvcmNlZF9pb19lbmNvZGluZyIpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcgPSBzeXMuX19zdGRpbl9fLmVuY29kaW5nCisgICAgICAgIGV4cGVjdGVkX3BpcGVfZW5jb2RpbmcgPSBzZWxmLl9nZXRfZGVmYXVsdF9waXBlX2VuY29kaW5nKCkKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gb3MubGluZXNlcC5qb2luKFsKKyAgICAgICAgIi0tLSBVc2UgZGVmYXVsdHMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0IiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogezB9OnN0cmljdCIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVycm9ycyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogezB9OnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IHsxfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkZXJyOiB7MX06YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN0cmljdCIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogc3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGluOiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRvdXQ6IGxhdGluLTE6c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogbGF0aW4tMTpiYWNrc2xhc2hyZXBsYWNlIl0pLmZvcm1hdChleHBlY3RlZF9zdGRpbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nKQorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIGlmIHdlIGV2ZXIgdHJpcCBvdmVyIG9kZCBwbGF0Zm9ybSBiZWhhdmlvdXIKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBleHBlY3RlZF9vdXRwdXQpCiAKIGNsYXNzIFNraXBpdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM1NCw4ICs0NTEsOSBAQAogICAgIGRlZiB0ZXN0X190ZXN0Y2FwaShzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKF90ZXN0Y2FwaSk6CiAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3RfJyk6Ci0gICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIoX3Rlc3RjYXBpLCBuYW1lKQotICAgICAgICAgICAgICAgIHRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJpbnRlcm5hbCIsIG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdGVzdCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQppbmRleCBhODlkN2U0Li4zMjdjMTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTQsNiArNCw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKQEAgLTQxLDggKzQyLDEwIEBACiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICB2ZXJzaW9uID0gKCdQeXRob24gJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0pLmVuY29kZSgiYXNjaWkiKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctVicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgZm9yIHN3aXRjaCBpbiAnLVYnLCAnLS12ZXJzaW9uJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc3dpdGNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKIAogICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CiAgICAgICAgICMgLXYgY2F1c2VzIGltcG9ydHMgdG8gd3JpdGUgdG8gc3RkZXJyLiAgSWYgdGhlIHdyaXRlIHRvCkBAIC01NCwxNCArNTcsNDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3N0YWNrIG92ZXJmbG93JywgZXJyKQogCiAgICAgZGVmIHRlc3RfeG9wdGlvbnMoc2VsZik6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgZGVmIGdldF94b3B0aW9ucygqYXJncyk6CisgICAgICAgICAgICAjIHVzZSBzdWJwcm9jZXNzIG1vZHVsZSBkaXJlY3RseSBiZWNhdXNlIHRlc3Quc2NyaXB0X2hlbHBlciBhZGRzCisgICAgICAgICAgICAjICItWCBmYXVsdGhhbmRsZXIiIHRvIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScpICsgYXJncworICAgICAgICAgICAgYXJncyArPSAoJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICAgICAgcmV0dXJuIG9wdHMKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7fSkKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygKLSAgICAgICAgICAgICctWGEnLCAnLVhiPWMsZD1lJywgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCctWGEnLCAnLVhiPWMsZD1lJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7J2EnOiBUcnVlLCAnYic6ICdjLGQ9ZSd9KQogCisgICAgZGVmIHRlc3Rfc2hvd3JlZmNvdW50KHNlbGYpOgorICAgICAgICBkZWYgcnVuX3B5dGhvbigqYXJncyk6CisgICAgICAgICAgICAjIHRoaXMgaXMgc2ltaWxhciB0byBhc3NlcnRfcHl0aG9uX29rIGJ1dCBkb2Vzbid0IHN0cmlwCisgICAgICAgICAgICAjIHRoZSByZWZjb3VudCBmcm9tIHN0ZGVyci4gIEl0IGNhbiBiZSByZXBsYWNlZCBvbmNlCisgICAgICAgICAgICAjIGFzc2VydF9weXRob25fb2sgc3RvcHMgZG9pbmcgdGhhdC4KKyAgICAgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICAgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICAgICAgcmV0dXJuIHJjLCBvdXQsIGVycgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJworICAgICAgICAjIG5vcm1hbGx5IHRoZSByZWZjb3VudCBpcyBoaWRkZW4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYid7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICMgIi1YIHNob3dyZWZjb3VudCIgc2hvd3MgdGhlIHJlZmNvdW50LCBidXQgb25seSBpbiBkZWJ1ZyBidWlsZHMKKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLVgnLCAnc2hvd3JlZmNvdW50JywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIieydzaG93cmVmY291bnQnOiBUcnVlfSIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOiAgIyBkZWJ1ZyBidWlsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGJyJ15cW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctbScgc3dpdGNoCiAgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CkBAIC03MCw5ICsxMDgsOSBAQAogICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIENoZWNrIHRoZSBydW5weSBtb2R1bGUgYWxzbyBnaXZlcyBhbiBlcnJvciBmb3IKICAgICAgICAgIyBhIG5vbmV4aXN0ZW50IG1vZHVsZQotICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBBbGwgZ29vZCBpZiBtb2R1bGUgaXMgbG9jYXRlZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseQotICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCiAKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2J1ZzE3NjQ0MDcoc2VsZik6CiAgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCkBAIC0yMTMsNiArMjUxLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDEuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDIuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAKKyAgICBkZWYgdGVzdF9lbXB0eV9QWVRIT05QQVRIX2lzc3VlMTYzMDkoc2VsZik6CisgICAgICAgICMgT24gUG9zaXgsIGl0IGlzIGRvY3VtZW50ZWQgdGhhdCBzZXR0aW5nIFBBVEggdG8gdGhlCisgICAgICAgICMgZW1wdHkgc3RyaW5nIGlzIGVxdWl2YWxlbnQgdG8gbm90IHNldHRpbmcgUEFUSCBhdCBhbGwsCisgICAgICAgICMgd2hpY2ggaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIHRoYXQgaW4gYSBzdHJpbmcgbGlrZQorICAgICAgICAjICIvYmluOjovdXNyL2JpbiIgdGhlIGVtcHR5IHN0cmluZyBpbiB0aGUgbWlkZGxlIGdldHMKKyAgICAgICAgIyBpbnRlcnByZXRlZCBhcyAnLicKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBwYXRoID0gIjoiLmpvaW4oc3lzLnBhdGgpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5lbmNvZGUoImFzY2lpIiwgImJhY2tzbGFzaHJlcGxhY2UiKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUocGF0aCkiIiIKKyAgICAgICAgcmMxLCBvdXQxLCBlcnIxID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05QQVRIPSIiKQorICAgICAgICByYzIsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIF9faXNvbGF0ZWQ9RmFsc2UpCisgICAgICAgICMgcmVnYXJkaW5nIHRvIFBvc2l4IHNwZWNpZmljYXRpb24sIG91dHB1dHMgc2hvdWxkIGJlIGVxdWFsCisgICAgICAgICMgZm9yIGVtcHR5IGFuZCB1bnNldCBQWVRIT05QQVRICisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0MSwgb3V0MikKKwogICAgIGRlZiB0ZXN0X2Rpc3BsYXlob29rX3VuZW5jb2RhYmxlKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdhc2NpaScsICdsYXRpbi0xJywgJ3V0Zi04Jyk6CiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQpAQCAtMjkwLDcgKzM0NSw3IEBACiAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIE9TRXJyb3I6IC4qIGlnbm9yZWQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gaWdub3JlZCBpbi4qXG5PU0Vycm9yOiAuKicpCiAKICAgICBkZWYgdGVzdF9jbG9zZWRfc3Rkb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMzQ0NDogaWYgc3Rkb3V0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkLCB3ZSBzaG91bGQKQEAgLTM4NSw2ICs0NDAsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKIAogCisgICAgZGVmIHRlc3RfaXNvbGF0ZWRtb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSScpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1JRXMnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctSScsICctYycsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IGZsYWdzIGFzIGY7ICcKKyAgICAgICAgICAgICdwcmludChmLm5vX3VzZXJfc2l0ZSwgZi5pZ25vcmVfZW52aXJvbm1lbnQsIGYuaXNvbGF0ZWQpJywKKyAgICAgICAgICAgICMgZHVtbXl2YXIgdG8gcHJldmVudCBleHRyYW5vdXMgLUUKKyAgICAgICAgICAgIGR1bW15dmFyPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJzEgMSAxJykKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmYWtlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInV1aWQucHkiKQorICAgICAgICAgICAgbWFpbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICJtYWluLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmYWtlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgicmFpc2UgUnVudGltZUVycm9yKCdpc29sYXRlZCBtb2RlIHRlc3QnKVxuIikKKyAgICAgICAgICAgIHdpdGggb3BlbihtYWluLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHV1aWRcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgicHJpbnQoJ29rJylcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCBtYWluXSwgY3dkPXRtcGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc3lzLmV4ZWN1dGFibGUsICItSSIsIG1haW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXRtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIib2siKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKICAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CmluZGV4IGI0MjY5YjkuLmY4MDRkODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgaWYgbm90IF9fZGVidWdfXzoKICAgICAgICAgICAgIGNtZF9saW5lX3N3aXRjaGVzICs9ICgnLScgKyAnTycgKiBzeXMuZmxhZ3Mub3B0aW1pemUsKQogICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCkgKyB0dXBsZShleGFtcGxlX2FyZ3MpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncywgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0ICsgZXJyLCBleHBlY3RlZF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhdGgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZSwgZXhwZWN0ZWRfbG9hZGVyKQpAQCAtMjk0LDcgKzI5NCw3IEBACiAgICAgICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogICAgICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIsICJpbXBvcnQgc3lzOyBwcmludCgnaW5pdF9hcmd2MD09JXInICUgc3lzLmFyZ3ZbMF0pIikKICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdzY3JpcHQnKQotICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ3Rlc3RfcGtnLnNjcmlwdCcsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncywgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0KQogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gImluaXRfYXJndjA9PSVyIiAlICctbScKQEAgLTMxMSw3ICszMTEsOCBAQAogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLWMiLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQogICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknKQorICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KCJzeXMucGF0aFswXT09JXIiICUgc3lzLnBhdGhbMF0pJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0KQogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJzeXMucGF0aFswXT09JXIiICUgJycKQEAgLTMyNSw3ICszMjYsOCBAQAogICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1tIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKLSAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICcnLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKaW5kZXggYWRlZjE3MC4uNWZkMjFkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CkBAIC02NCw2ICs2NCwyMCBAQAogICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaG9vay5jYWxsZWQpCiAKKyAgICBkZWYgdGVzdF9iYW5uZXIoc2VsZik6CisgICAgICAgICMgd2l0aCBiYW5uZXIKKyAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBFT0ZFcnJvcignRmluaXNoZWQnKQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPSdGb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHMpLCAyKQorICAgICAgICBiYW5uZXJfY2FsbCA9IHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxsc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhbm5lcl9jYWxsLCBbJ3dyaXRlJywgKCdGb29cbicsKSwge31dKQorCisgICAgICAgICMgbm8gYmFubmVyCisgICAgICAgIHNlbGYuc3RkZXJyLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDEpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RJbnRlcmFjdGl2ZUNvbnNvbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQppbmRleCBmZDg4NTA1Li44NDgwNGJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKQEAgLTg3NSw4ICs4NzUsNiBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgZGF0YS5kZWNvZGUoZW5jb2RpbmcsICJ0ZXN0LnJlcGxhY2luZyIpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENvZGVjQ2FsbGJhY2tUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IDM1MTcwNTcuLmY2ODIzODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC0xLDEwICsxLDEyIEBACiBpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGlvCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IGVuY29kaW5ncwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIApAQCAtMjk5LDggKzMwMSw0NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgIiIpCiAKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIgorCisgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXFx1ZGM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWyYjNTY0NDg7XSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbP10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKworICAgICAgICBib20gPSAiIi5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgZm9yIGJlZm9yZSwgYWZ0ZXIgaW4gWygiXFUwMDAxMGZmZiIsICJBIiksICgiWyIsICJdIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkEiLCAiXFUwMDAxMGZmZiIpXToKKyAgICAgICAgICAgIGJlZm9yZV9zZXF1ZW5jZSA9IGJlZm9yZS5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgYWZ0ZXJfc2VxdWVuY2UgPSBhZnRlci5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgdGVzdF9zdHJpbmcgPSBiZWZvcmUgKyAiXHVEQzgwIiArIGFmdGVyCisgICAgICAgICAgICB0ZXN0X3NlcXVlbmNlID0gKGJvbSArIGJlZm9yZV9zZXF1ZW5jZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZSArIGFmdGVyX3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB0ZXN0X3NlcXVlbmNlLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc3RyaW5nLmVuY29kZShzZWxmLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICsgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlICsgYWZ0ZXIpCisKIGNsYXNzIFVURjMyVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMiIKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkY1x4MDBceDAwIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4MDBceDAwXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSAoYidceGZmXHhmZVx4MDBceDAwJwogICAgICAgICAgICAgICBiJ3NceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG1ceDAwXHgwMFx4MDAnCkBAIC0zOTIsNiArNDMyLDcgQEAKIAogY2xhc3MgVVRGMzJMRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTQzNiw2ICs0NzcsNyBAQAogCiBjbGFzcyBVVEYzMkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNDgxLDYgKzUyMywxMCBAQAogCiBjbGFzcyBVVEYxNlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGMiCisgICAgZWxzZToKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSBiJ1x4ZmZceGZlc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMCcKICAgICBzcGFtYmUgPSBiJ1x4ZmVceGZmXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbScKQEAgLTU1NiwxMSArNjAyLDE0IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CiAgICAgICAgICAgICBmcC53cml0ZShzKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIHJlYWRlcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQorICAgICAgICB3aXRoIHJlYWRlcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWQoKSwgczEpCiAKIGNsYXNzIFVURjE2TEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjA0LDYgKzY1Myw3IEBACiAKIGNsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjQ3LDYgKzY5Nyw4IEBACiAKIGNsYXNzIFVURjhUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhlZFx4YjJceDgwIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSA9ICJcdWZmZmQiICogMwogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjc2LDE4ICs3MjgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSwgdS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgIlx1ZDgwMCIuZW5jb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIiXHhlZFx4YTBceDgwIi5kZWNvZGUsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tcXHVkYzgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbJiM1NjQ0ODtdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIiksCisgICAgICAgIHN1cGVyKCkudGVzdF9sb25lX3N1cnJvZ2F0ZXMoKQorICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgbWFraW5nIHNlbnNlIGZvcgorICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoJ3V0Zi04JywgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInW1x4ODBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAiaWdub3JlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1s/XScpCiAKICAgICBkZWYgdGVzdF9zdXJyb2dhdGVwYXNzX2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFiY1x1ZDgwMGRlZiIuZW5jb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIiksCkBAIC04NDAsMTUgKzg4NSwxOSBAQAogICAgICAgICAgICAgKGInYSsvLy8vLCtJS3ctYicsICdhXHVmZmZmXHVmZmZkXHUyMGFjYicpLAogICAgICAgICBdCiAgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzdfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTcnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHJhdz1yYXcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9ub25ibXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xVMDAwMTA0QTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x1ZDgwMVx1ZGNhMCcuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJysyQUhjb0EtJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJysyQUhjb0EtJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcVTAwMDEwNEEwJykKIAorICAgIHRlc3RfbG9uZV9zdXJyb2dhdGVzID0gTm9uZQorCisKIGNsYXNzIFVURjE2RXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKQEAgLTg3Myw3ICs5MjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUsIDQyKQogCi1jbGFzcyBVVEY4U2lnVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVVRGOFNpZ1Rlc3QoVVRGOFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtOC1zaWciCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgpAQCAtMTU1NSw2ICsxNjA0LDcgQEAKICAgICAiY3AwMzciLAogICAgICJjcDEwMDYiLAogICAgICJjcDEwMjYiLAorICAgICJjcDExMjUiLAogICAgICJjcDExNDAiLAogICAgICJjcDEyNTAiLAogICAgICJjcDEyNTEiLApAQCAtMjI3Myw0NiArMjMyMywzMTkgQEAKICAgICAicXVvcHJpX2NvZGVjIiwKICAgICAiaGV4X2NvZGVjIiwKIF0KKwordHJhbnNmb3JtX2FsaWFzZXMgPSB7CisgICAgImJhc2U2NF9jb2RlYyI6IFsiYmFzZTY0IiwgImJhc2VfNjQiXSwKKyAgICAidXVfY29kZWMiOiBbInV1Il0sCisgICAgInF1b3ByaV9jb2RlYyI6IFsicXVvcHJpIiwgInF1b3RlZF9wcmludGFibGUiLCAicXVvdGVkcHJpbnRhYmxlIl0sCisgICAgImhleF9jb2RlYyI6IFsiaGV4Il0sCisgICAgInJvdF8xMyI6IFsicm90MTMiXSwKK30KKwogdHJ5OgogICAgIGltcG9ydCB6bGliCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiemxpYl9jb2RlYyIpCisgICAgdHJhbnNmb3JtX2FsaWFzZXNbInpsaWJfY29kZWMiXSA9IFsiemlwIiwgInpsaWIiXQogdHJ5OgogICAgIGltcG9ydCBiejIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCiBlbHNlOgogICAgIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3MuYXBwZW5kKCJiejJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJiejJfY29kZWMiXSA9IFsiYnoyIl0KIAogY2xhc3MgVHJhbnNmb3JtQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYmlucHV0ID0gYnl0ZXMocmFuZ2UoMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICAjIGdlbmVyaWMgY29kZWNzIGludGVyZmFjZQotICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCi0gICAgICAgICAgICAoaSwgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykobykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAobywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykoYmlucHV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCisgICAgICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4obykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgogICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gWyd1dV9jb2RlYycsICd6bGliX2NvZGVjJ106CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsIGIiXHg4MCIpCisKKyAgICBkZWYgdGVzdF9idWZmZXJfYXBpX3VzYWdlKHNlbGYpOgorICAgICAgICAjIFdlIGNoZWNrIGFsbCB0aGUgdHJhbnNmb3JtIGNvZGVjcyBhY2NlcHQgbWVtb3J5dmlldyBpbnB1dAorICAgICAgICAjIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAgICAgICAgIyBhbmQgYWxzbyB0aGF0IHRoZXkgcm91bmR0cmlwIGNvcnJlY3RseQorICAgICAgICBvcmlnaW5hbCA9IGIiMTIzNDVceDgwIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHZpZXdfZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2VuY29kZWQsIGRhdGEpCisgICAgICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29kZWNzLmRlY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHZpZXdfZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2RlY29kZWQsIGRhdGEpCisKKyAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzIGdpdmUgYSBnb29kIGVycm9yIGZvciBzdHIgaW5wdXQKKyAgICAgICAgYmFkX2lucHV0ID0gImJhZCBpbnB1dCB0eXBlIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBmbXQgPSAoICJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgZGVmIHRlc3RfdGV4dF90b19iaW5hcnlfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc3RyLmVuY29kZSBnaXZlcyBhIGdvb2QgZXJyb3IgbWVzc2FnZSBmb3Igc3RyIC0+IHN0ciBjb2RlY3MKKyAgICAgICAgbXNnID0gKHIiXidyb3RfMTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgImp1c3QgYW4gZXhhbXBsZSBtZXNzYWdlIi5lbmNvZGUoInJvdF8xMyIpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlfdG9fdGV4dF9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBnaXZlIGEgZ29vZCBlcnJvcgorICAgICAgICAjIG1lc3NhZ2UgZm9yIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzCisgICAgICAgIGRhdGEgPSBiImVuY29kZSBmaXJzdCB0byBlbnN1cmUgd2UgbWVldCBhbnkgZm9ybWF0IHJlc3RyaWN0aW9ucyIKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBmbXQgPSAociJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEuZGVjb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGVuY29kZWRfZGF0YSkuZGVjb2RlKGVuY29kaW5nKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X3RvX3RleHRfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc3RyIC0+IHN0ciBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIGJpbmFyeSBpbnB1dAorICAgICAgICBmb3IgYmFkX2lucHV0IGluIChiImltbXV0YWJsZSIsIGJ5dGVhcnJheShiIm11dGFibGUiKSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiYWRfaW5wdXQ9YmFkX2lucHV0KToKKyAgICAgICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX3psaWJfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayB6bGliIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgbWFsZm9ybWVkIGlucHV0CisgICAgICAgIG1zZyA9ICJeZGVjb2Rpbmcgd2l0aCAnemxpYl9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiemxpYl9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9oZXhfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBoZXggY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICdoZXhfY29kZWMnIGNvZGVjIGZhaWxlZCIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImhlbGxvIiwgImhleF9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgICMgVW5mb3J0dW5hdGVseSwgdGhlIGJ6MiBtb2R1bGUgdGhyb3dzIE9TRXJyb3IsIHdoaWNoIHRoZSBjb2RlYworICAgICMgbWFjaGluZXJ5IGN1cnJlbnRseSBjYW4ndCB3cmFwIDooCisKKyAgICAjIEVuc3VyZSBjb2RlYyBhbGlhc2VzIGZyb20gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzUgd29yaworICAgIGRlZiB0ZXN0X2FsaWFzZXMoc2VsZik6CisgICAgICAgIGZvciBjb2RlY19uYW1lLCBhbGlhc2VzIGluIHRyYW5zZm9ybV9hbGlhc2VzLml0ZW1zKCk6CisgICAgICAgICAgICBleHBlY3RlZF9uYW1lID0gY29kZWNzLmxvb2t1cChjb2RlY19uYW1lKS5uYW1lCisgICAgICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhbGlhcz1hbGlhcyk6CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKGFsaWFzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ubmFtZSwgZXhwZWN0ZWRfbmFtZSkKKworCisjIFRoZSBjb2RlYyBzeXN0ZW0gdHJpZXMgdG8gd3JhcCBleGNlcHRpb25zIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZXJyb3IKKyMgbWVudGlvbnMgdGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgYW5kIHRoZSBjb2RlYyBpbnZvbHZlZC4gV2UKKyMgY3VycmVudGx5ICpvbmx5KiB3YW50IHRoaXMgdG8gaGFwcGVuIGZvciByZWxhdGl2ZWx5IHN0YXRlbGVzcworIyBleGNlcHRpb25zLCB3aGVyZSB0aGUgb25seSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbiB0aGV5IGNvbnRhaW4gaXMgdGhlaXIKKyMgdHlwZSBhbmQgYSBzaW5nbGUgc3RyIGFyZ3VtZW50LgorCisjIFVzZSBhIGxvY2FsIGNvZGVjIHJlZ2lzdHJ5IHRvIGF2b2lkIGFwcGVhcmluZyB0byBsZWFrIG9iamVjdHMgd2hlbgorIyByZWdpc3RlcmluZyBtdWx0aXBsZSBzZWFjaCBmdW5jdGlvbnMKK19URVNUX0NPREVDUyA9IHt9CisKK2RlZiBfZ2V0X3Rlc3RfY29kZWMoY29kZWNfbmFtZSk6CisgICAgcmV0dXJuIF9URVNUX0NPREVDUy5nZXQoY29kZWNfbmFtZSkKK2NvZGVjcy5yZWdpc3RlcihfZ2V0X3Rlc3RfY29kZWMpICMgUmV0dXJucyBOb25lLCBub3QgdXNhYmxlIGFzIGEgZGVjb3JhdG9yCisKK2NsYXNzIEV4Y2VwdGlvbkNoYWluaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlcmUncyBubyB3YXkgdG8gdW5yZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbiwgc28gd2UganVzdAorICAgICAgICAjIGVuc3VyZSB3ZSByZW5kZXIgdGhpcyBvbmUgZmFpcmx5IGhhcm1sZXNzIGFmdGVyIHRoZSB0ZXN0CisgICAgICAgICMgY2FzZSBmaW5pc2hlcyBieSB1c2luZyB0aGUgdGVzdCBjYXNlIHJlcHIgYXMgdGhlIGNvZGVjIG5hbWUKKyAgICAgICAgIyBUaGUgY29kZWNzIG1vZHVsZSBub3JtYWxpemVzIGNvZGVjIG5hbWVzLCBhbHRob3VnaCB0aGlzIGRvZXNuJ3QKKyAgICAgICAgIyBhcHBlYXIgdG8gYmUgZm9ybWFsbHkgZG9jdW1lbnRlZC4uLgorICAgICAgICAjIFdlIGFsc28gbWFrZSBzdXJlIHdlIHVzZSBhIHRydWx5IHVuaXF1ZSBpZCBmb3IgdGhlIGN1c3RvbSBjb2RlYworICAgICAgICAjIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHRoZSBjb2RlYyBjYWNoZSB3aGVuIHJ1bm5pbmcgdGhlc2UgdGVzdHMKKyAgICAgICAgIyBtdWx0aXBsZSB0aW1lcyAoZS5nLiB3aGVuIGh1bnRpbmcgZm9yIHJlZmxlYWtzKQorICAgICAgICB1bmlxdWVfaWQgPSByZXByKHNlbGYpICsgc3RyKGlkKHNlbGYpKQorICAgICAgICBzZWxmLmNvZGVjX25hbWUgPSBlbmNvZGluZ3Mubm9ybWFsaXplX2VuY29kaW5nKHVuaXF1ZV9pZCkubG93ZXIoKQorCisgICAgICAgICMgV2Ugc3RvcmUgdGhlIG9iamVjdCB0byByYWlzZSBvbiB0aGUgaW5zdGFuY2UgYmVjYXVzZSBvZiBhIGJhZAorICAgICAgICAjIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvZGVjIGNhY2hpbmcgKHdoaWNoIG1lYW5zIHdlIGNhbid0CisgICAgICAgICMgcmVjcmVhdGUgdGhlIGNvZGVjIGVudHJ5KSBhbmQgcmVncnRlc3QgcmVmbGVhayBodW50aW5nICh3aGljaAorICAgICAgICAjIHJ1bnMgdGhlIHNhbWUgdGVzdCBpbnN0YW5jZSBtdWx0aXBsZSB0aW1lcykuIFRoaXMgbWVhbnMgd2UKKyAgICAgICAgIyBuZWVkIHRvIGVuc3VyZSB0aGUgY29kZWNzIGNhbGwgYmFjayBpbiB0byB0aGUgaW5zdGFuY2UgdG8gZmluZAorICAgICAgICAjIG91dCB3aGljaCBleGNlcHRpb24gdG8gcmFpc2UgcmF0aGVyIHRoYW4gYmluZGluZyB0aGVtIGluIGEKKyAgICAgICAgIyBjbG9zdXJlIHRvIGFuIG9iamVjdCB0aGF0IG1heSBjaGFuZ2Ugb24gdGhlIG5leHQgcnVuCisgICAgICAgIHNlbGYub2JqX3RvX3JhaXNlID0gUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIF9URVNUX0NPREVDUy5wb3Aoc2VsZi5jb2RlY19uYW1lLCBOb25lKQorCisgICAgZGVmIHNldF9jb2RlYyhzZWxmLCBlbmNvZGUsIGRlY29kZSk6CisgICAgICAgIGNvZGVjX2luZm8gPSBjb2RlY3MuQ29kZWNJbmZvKGVuY29kZSwgZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgX1RFU1RfQ09ERUNTW3NlbGYuY29kZWNfbmFtZV0gPSBjb2RlY19pbmZvCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBhc3NlcnRXcmFwcGVkKHNlbGYsIG9wZXJhdGlvbiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgIGZ1bGxfbXNnID0gciJ7fSB3aXRoIHshcn0gY29kZWMgZmFpbGVkIFwoe306IHt9XCkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgc2VsZi5jb2RlY19uYW1lLCBleGNfdHlwZS5fX25hbWVfXywgbXNnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoZXhjX3R5cGUsIGZ1bGxfbXNnKSBhcyBjYXVnaHQ6CisgICAgICAgICAgICB5aWVsZCBjYXVnaHQKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNhdWdodC5leGNlcHRpb24uX19jYXVzZV9fLCBleGNfdHlwZSkKKworICAgIGRlZiByYWlzZV9vYmooc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICMgSGVscGVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgb2JqZWN0IHJhaXNlZCBieSBhIHRlc3QgY29kZWMKKyAgICAgICAgcmFpc2Ugc2VsZi5vYmpfdG9fcmFpc2UKKworICAgIGRlZiBjaGVja193cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnLCBleGNfdHlwZT1SdW50aW1lRXJyb3IpOgorICAgICAgICBzZWxmLm9ial90b19yYWlzZSA9IG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhzZWxmLnJhaXNlX29iaiwgc2VsZi5yYWlzZV9vYmopCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJlbmNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgInN0cl9pbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImVuY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHJfaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJkZWNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImRlY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ieV90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoUnVudGltZUVycm9yLCAiIikKKworICAgIGRlZiB0ZXN0X3JhaXNlX2J5X3ZhbHVlKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKFJ1bnRpbWVFcnJvcihtc2cpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ncmFuZGNoaWxkX3N1YmNsYXNzX2V4YWN0X3NpemUoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBjbGFzcyBNeVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKE15UnVudGltZUVycm9yKG1zZyksIG1zZywgTXlSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9zdWJjbGFzc193aXRoX3dlYWtyZWZfc3VwcG9ydChzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIGNsYXNzIE15UnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChNeVJ1bnRpbWVFcnJvcihtc2cpLCBtc2csIE15UnVudGltZUVycm9yKQorCisgICAgZGVmIGNoZWNrX25vdF93cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnKToKKyAgICAgICAgZGVmIHJhaXNlX29iaigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJhaXNlIG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhyYWlzZV9vYmosIHJhaXNlX29iaikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHIgaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHIgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tSW5pdChSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChDdXN0b21Jbml0LCAiIikKKworICAgIGRlZiB0ZXN0X25ld19vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tTmV3KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKEN1c3RvbU5ldywgIiIpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9hdHRyaWJ1dGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBOT1QgYmUgd3JhcHBlZCIKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKG1zZykKKyAgICAgICAgZXhjLmF0dHIgPSAxCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoZXhjLCAiXnt9JCIuZm9ybWF0KG1zZykpCisKKyAgICBkZWYgdGVzdF9ub25fc3RyX2FyZ19pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoMSksICIxIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2FyZ3NfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZ19yZSA9IHIiXlwoJ2EnLCAnYicsICdjJ1wpJCIKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoJ2EnLCAnYicsICdjJyksIG1zZ19yZSkKKworICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjA5CisgICAgZGVmIHRlc3RfY29kZWNfbG9va3VwX2ZhaWx1cmVfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJedW5rbm93biBlbmNvZGluZzoge30kIi5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICAjIFRoZSBpbml0aWFsIGNvZGVjIGxvb2t1cCBzaG91bGQgbm90IGJlIHdyYXBwZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0ciBpbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF91bmZsYWdnZWRfbm9uX3RleHRfY29kZWNfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgVGhlIHN0ZGxpYiBub24tdGV4dCBjb2RlY3MgYXJlIG5vdyBtYXJrZWQgc28gdGhleSdyZQorICAgICAgICAjIHByZS1lbXB0aXZlbHkgc2tpcHBlZCBieSB0aGUgdGV4dCBtb2RlbCByZWxhdGVkIG1ldGhvZHMKKyAgICAgICAgIyBIb3dldmVyLCB0aGlyZCBwYXJ0eSBjb2RlY3Mgd29uJ3QgYmUgZmxhZ2dlZCwgc28gd2Ugc3RpbGwgbWFrZQorICAgICAgICAjIHN1cmUgdGhlIGNhc2Ugd2hlcmUgYW4gaW5hcHByb3ByaWF0ZSBvdXRwdXQgdHlwZSBpcyBwcm9kdWNlZCBpcworICAgICAgICAjIGhhbmRsZWQgYXBwcm9wcmlhdGVseQorICAgICAgICBkZWYgZW5jb2RlX3RvX3N0cigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiAibm90IGJ5dGVzISIsIDAKKyAgICAgICAgZGVmIGRlY29kZV90b19ieXRlcygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBiIm5vdCBzdHIhIiwgMAorICAgICAgICBzZWxmLnNldF9jb2RlYyhlbmNvZGVfdG9fc3RyLCBkZWNvZGVfdG9fYnl0ZXMpCisgICAgICAgICMgTm8gaW5wdXQgb3Igb3V0cHV0IHR5cGUgY2hlY2tzIG9uIHRoZSBjb2RlY3MgbW9kdWxlIGZ1bmN0aW9ucworICAgICAgICBlbmNvZGVkID0gY29kZWNzLmVuY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZCwgIm5vdCBieXRlcyEiKQorICAgICAgICBkZWNvZGVkID0gY29kZWNzLmRlY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwgYiJub3Qgc3RyISIpCisgICAgICAgICMgVGV4dCBtb2RlbCBtZXRob2RzIHNob3VsZCBjb21wbGFpbgorICAgICAgICBmbXQgPSAociJeeyFyfSBlbmNvZGVyIHJldHVybmVkICdzdHInIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyQiKQorICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHJfaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIGZtdCA9IChyIl57IXJ9IGRlY29kZXIgcmV0dXJuZWQgJ2J5dGVzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzJCIpCisgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKwogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLApAQCAtMjMyNCw4ICsyNjQ3LDggQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2NvZGVfcGFnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIC0xLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAtMSwgYidhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDEyMywgYidhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDEyMywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQogCiAgICAgZGVmIHRlc3RfY29kZV9wYWdlX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVW5pY29kZUVuY29kZUVycm9yLCAnY3A5MzInLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg5YzdhOC4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKLWltcG9ydCBpbXBvcnRsaWIsIG9zLCBzeXMKLQotY2xhc3MgQ29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfYmFkX2NvZGluZyhzZWxmKToKLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZycKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9jb2RpbmcyKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nMicKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB2ZXJpZnlfYmFkX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBfX2ltcG9ydF9fLCAndGVzdC4nICsgbW9kdWxlX25hbWUpCi0KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbW9kdWxlX25hbWUgKyAnLnB5JykKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKLSAgICAgICAgICAgIGJ5dGVzID0gZnAucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBieXRlcywgZmlsZW5hbWUsICdleGVjJykKLQotICAgIGRlZiB0ZXN0X2V4ZWNfdmFsaWRfY29kaW5nKHNlbGYpOgotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhiJyMgY29kaW5nOiBjcDk0OVxuYSA9ICJceGFhXHhhNyJcbicsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAnXHUzMDQ3JykKLQotICAgIGRlZiB0ZXN0X2ZpbGVfcGFyc2Uoc2VsZik6Ci0gICAgICAgICMgaXNzdWUxMTM0OiBhbGwgZW5jb2RpbmdzIG91dHNpZGUgbGF0aW4tMSBhbmQgdXRmLTggZmFpbCBvbgotICAgICAgICAjIG11bHRpbGluZSBzdHJpbmdzIGFuZCBsb25nIGxpbmVzICg+NTEyIGNvbHVtbnMpCi0gICAgICAgIHVubG9hZChURVNURk4pCi0gICAgICAgIGZpbGVuYW1lID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ImNwMTI1MiIpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCIjIC0qLSBjb2Rpbmc6IGNwMTI1MiAtKi1cbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnQSBzaG9ydCBzdHJpbmdcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIidBIHZlcnkgbG9uZyBzdHJpbmcgJXMnXG4iICUgKCJYIiAqIDEwMDApKQotCi0gICAgICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQotICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSkKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJjIikKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJvIikKLSAgICAgICAgICAgIHVubG9hZChURVNURk4pCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9mcm9tX3N0cmluZyhzZWxmKToKLSAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTYyODkKLSAgICAgICAgaW5wdXQgPSAiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6Ci0gICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCi0gICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCi0gICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWMuZXhjZXB0aW9uLmFyZ3NbMF0pCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CmluZGV4IGZmNTI3NTUuLjU2ZTgxMjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpAQCAtMTEyLDYgKzExMiwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZCksIGRpY3QoYT0xLCBiPTIsIGM9MzApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZC5pdGVtcygpKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAKKyAgICBkZWYgdGVzdF9uZXdfY2hpbGQoc2VsZik6CisgICAgICAgICdUZXN0cyBmb3IgY2hhbmdlcyBmb3IgaXNzdWUgIzE2NjEzLicKKyAgICAgICAgYyA9IENoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIG0gPSB7J2InOjIwLCAnYyc6IDMwfQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIFt7J2InOjIwLCAnYyc6MzB9LCB7J2EnOjEsICdiJzoyfV0pICAjIGNoZWNrIGludGVybmFsIHN0YXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobSwgZC5tYXBzWzBdKQorCisgICAgICAgICMgVXNlIGEgZGlmZmVyZW50IG1hcCB0aGFuIGEgZGljdAorICAgICAgICBjbGFzcyBsb3dlcmRpY3QoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19jb250YWluc19fKHNlbGYsIGtleSkKKworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IGxvd2VyZGljdChiPTIwLCBjPTMwKQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisgICAgICAgIGZvciBrZXkgaW4gJ2FiYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjb250YWlucworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGQpCisgICAgICAgIGZvciBrLCB2IGluIGRpY3QoYT0xLCBCPTIwLCBDPTMwLCB6PTEwMCkuaXRlbXMoKTogICAgICAgICAgICAgIyBjaGVjayBnZXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoaywgMTAwKSwgdikKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIE5hbWVkIFR1cGxlcwpAQCAtNzUwLDYgKzc4Miw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHJhbmdlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtZW1vcnl2aWV3KGIiIiksIFNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhtZW1vcnl2aWV3LCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2VxdWVuY2UsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nKQpAQCAtOTA0LDIzICs5MzgsMjYgQEAKICAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKICAgICAgICAgdXBkYXRlX3Rlc3QgPSBDb3VudGVyKCkKICAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKHdvcmRzKQotICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCi0gICAgICAgICAgICAgICAgICAgIHdvcmRzLmNvcHkoKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weSh3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcih3b3JkcykpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ291bnRlcih3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIF0pOgotICAgICAgICAgICAgbXNnID0gKGksIGR1cCwgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbih3b3JkcykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZSh3b3JkcykpCisgICAgICAgIGZvciBsYWJlbCwgZHVwIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKCd3b3Jkcy5jb3B5KCknLCB3b3Jkcy5jb3B5KCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuY29weSh3b3JkcyknLCBjb3B5LmNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmRlZXBjb3B5KHdvcmRzKScsIGNvcHkuZGVlcGNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2V2YWwocmVwcih3b3JkcykpJywgZXZhbChyZXByKHdvcmRzKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3VwZGF0ZV90ZXN0JywgdXBkYXRlX3Rlc3QpLAorICAgICAgICAgICAgICAgICAgICAoJ0NvdW50ZXIod29yZHMpJywgQ291bnRlcih3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG53b3JkczogJXMiICUgKGR1cCwgd29yZHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIHdvcmRzLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQogCiAgICAgZGVmIHRlc3RfY29weV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlDb3VudGVyKENvdW50ZXIpOgpAQCAtMTA0Myw4ICsxMDgwLDEwIEBACiAgICAgICAgICMgdGVzdCBmaWRlbGl0eSB0byB0aGUgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICBjID0gQ291bnRlclN1YmNsYXNzV2l0aFNldEl0ZW0oJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoR2V0KCdhYnJhY2FkYWJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCB7J2EnOiA1LCAnYic6IDIsICdjJzogMSwgJ2QnOiAxLCAncic6MiB9KQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjA1LDI0ICsxMjQ0LDI4IEBACiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCiAgICAgICAgIHVwZGF0ZV90ZXN0ID0gT3JkZXJlZERpY3QoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUob2QpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgb2QuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpLAotICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIob2QpKSwKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAuaXRlbXMoKSksIGxpc3Qob2QuaXRlbXMoKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4ob2QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUob2QpKQorICAgICAgICBmb3IgbGFiZWwsIGR1cCBpbiBbCisgICAgICAgICAgICAgICAgICAgICgnb2QuY29weSgpJywgb2QuY29weSgpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmNvcHkob2QpJywgY29weS5jb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5kZWVwY29weShvZCknLCBjb3B5LmRlZXBjb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdldmFsKHJlcHIob2QpKScsIGV2YWwocmVwcihvZCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd1cGRhdGVfdGVzdCcsIHVwZGF0ZV90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgKCdPcmRlcmVkRGljdChvZCknLCBPcmRlcmVkRGljdChvZCkpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG5vZDogJXMiICUgKGR1cCwgb2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQogCiAgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KQEAgLTEyMzcsOSArMTI4MCwxOCBAQAogICAgICAgICAjIGRvIG5vdCBzYXZlIGluc3RhbmNlIGRpY3Rpb25hcnkgaWYgbm90IG5lZWRlZAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCiAgICAgICAgIG9kLnggPSAxMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCisKKyAgICBkZWYgdGVzdF9waWNrbGVfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbMV0gPSBvZAorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoLTEsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLmtleXMoKSksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVwWzFdLCBkdXApCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CmluZGV4IGU0MDViOGEuLmEyNGUzYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQpAQCAtMSw0ICsxLDQgQEAKLWltcG9ydCB1bml0dGVzdCwgdGVzdC5zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjb2xvcnN5cwogCiBkZWYgZnJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKQEAgLTY5LDggKzY5LDMyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKGhscywgY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy5obHNfdG9fcmdiKCpobHMpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2xvcnN5c1Rlc3QpCisgICAgZGVmIHRlc3RfeWlxX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgZm9yIGcgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgIGZvciBiIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICAgICAgcmdiID0gKHIsIGcsIGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnN5cy55aXFfdG9fcmdiKCpjb2xvcnN5cy5yZ2JfdG9feWlxKCpyZ2IpKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF95aXFfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAjIHJnYiwgeWlxCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAwLjApLCAoMC4wLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoMC4xMSwgLTAuMzIxNywgMC4zMTIxKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDAuNTksIC0wLjI3NzMsIC0wLjUyNTEpKSwgIyBncmVlbgorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMS4wKSwgKDAuNywgLTAuNTk5LCAtMC4yMTMpKSwgIyBjeWFuCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAwLjApLCAoMC4zLCAwLjU5OSwgMC4yMTMpKSwgIyByZWQKKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDEuMCksICgwLjQxLCAwLjI3NzMsIDAuNTI1MSkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDAuODksIDAuMzIxNywgLTAuMzEyMSkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKDEuMCwgMC4wLCAwLjApKSwgIyB3aGl0ZQorICAgICAgICAgICAgKCgwLjUsIDAuNSwgMC41KSwgKDAuNSwgMC4wLCAwLjApKSwgIyBncmV5CisgICAgICAgIF0KKyAgICAgICAgZm9yIChyZ2IsIHlpcSkgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCh5aXEsIGNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMueWlxX3RvX3JnYigqeWlxKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IGZkZGI1MzguLmZmMjUxNWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTEsMTEgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBjb21waWxlYWxsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE4LDExICsxOSwxMSBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQogICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKQEAgLTM2LDcgKzM3LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKLSAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLCBtdGltZSkKICAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0JyksICd0ZXN0IG5lZWRzIG9zLnN0YXQoKScpCkBAIC01Niw3ICs1Nyw4IEBACiAKICAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCi0gICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQogCiAgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KQEAgLTk2LDE0ICs5OCwxNCBAQAogICAgICAgICAjIGludGVycHJldGVyJ3MgY3JlYXRlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWVzCiAgICAgICAgIG9wdGltaXplID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQotICAgICAgICBjYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKLSAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCi0gICAgICAgIGNhY2hlZDMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDMpKQogCiAKQEAgLTE1MSwxMCArMTUzLDEyIEBACiAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKIAogICAgIGRlZiBhc3NlcnRDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9jbGVhbnVwKQpAQCAtMTg5LDggKzE5Myw4IEBACiAgICAgICAgICAgICAgICAgWyctbScsICdjb21waWxlYWxsJywgJy1xJywgc2VsZi5wa2dkaXJdKSkKICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoaW1wLmdldF90YWcoKSwgZXh0KSBmb3IgYmFzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlIGluICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKQEAgLTIyMyw3ICsyMjcsNyBAQAogCiAgICAgZGVmIHRlc3RfZm9yY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCiAgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMjg3LDEwICsyOTEsMTAgQEAKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmF6JywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JpbmcnLCAnaW1wb3J0IGJheicpCi0gICAgICAgIHB5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgIG9zLnJlbmFtZShweWMsIG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ2Jhei5weWMnKSkKICAgICAgICAgb3MucmVtb3ZlKGJhemZuKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4sIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CkBAIC0yOTgsNyArMzAyLDcgQEAKICAgICAgICAgICAgICctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ25vc3VjaGZpbGUnKSwgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiJ3Jyb3IuKm5vc3VjaGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KGVyciwgYidUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSkKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZV93aXRoX2FyZyhzZWxmKToKQEAgLTM1NSwxMyArMzU5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCAnYmFkZmlsZW5hbWUnIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCi0gICAgICAgIENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgRW5jb2RpbmdUZXN0LAotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDFiZjQwOTcuLmNkNTUzNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTIyMCw2ICsyMjAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE9TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCkBAIC0zMDEsNiArMzAzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ05vbmVUeXBlJyIsIGNvbXBsZXgsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJcMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIzXDA5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKaW5kZXggMzkyMzBlMS4uYTdlOTQ1YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gY29uY3VycmVudCBpbXBvcnQgZnV0dXJlcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0ICgKQEAgLTUyLDYgKzUzLDExIEBACiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKIAorY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgbXlfbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKKwogY2xhc3MgRXhlY3V0b3JNaXhpbjoKICAgICB3b3JrZXJfY291bnQgPSA1CiAKQEAgLTM5Niw2ICs0MDIsMjIgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5tYXAoc3RyLCBbMl0gKiAoc2VsZi53b3JrZXJfY291bnQgKyAxKSkKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX3N0YWxlX3JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2Mjg0OiBjaGVjayB0aGF0IHRoZSBleGVjdXRvcnMgZG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5nIG9udG8KKyAgICAgICAgIyByZWZlcmVuY2VzLgorICAgICAgICBteV9vYmplY3QgPSBNeU9iamVjdCgpCisgICAgICAgIG15X29iamVjdF9jb2xsZWN0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBteV9vYmplY3RfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZigKKyAgICAgICAgICAgIG15X29iamVjdCwgbGFtYmRhIG9iajogbXlfb2JqZWN0X2NvbGxlY3RlZC5zZXQoKSkKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZGlzY2FyZGluZyB0aGUgZnV0dXJlLgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChteV9vYmplY3QubXlfbWV0aG9kKQorICAgICAgICBkZWwgbXlfb2JqZWN0CisKKyAgICAgICAgY29sbGVjdGVkID0gbXlfb2JqZWN0X2NvbGxlY3RlZC53YWl0KHRpbWVvdXQ9NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0YWxlIHJlZmVyZW5jZSBub3QgY29sbGVjdGVkIHdpdGhpbiB0aW1lb3V0LiIpCisKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdChUaHJlYWRQb29sTWl4aW4sIEV4ZWN1dG9yVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21hcF9zdWJtaXRzX3dpdGhvdXRfaXRlcmF0aW9uKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IDllNDVmNzAuLmI4NzcwYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb250ZXh0bGliLnB5LCBhbmQgb3RoZXIgY29udGV4dCBtYW5hZ2Vycy4iIiIKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTAwLDE1ICsxMDEsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAotICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKICAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3N0cmluZ19naXZlbl9jbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKKworCiBjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gY2xvc2luZy5fX2RvY19fCisgICAgICAgIG9iaiA9IGNsb3NpbmcoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfY2xvc2luZyhzZWxmKToKICAgICAgICAgc3RhdGUgPSBbXQpAQCAtMjA0LDYgKzIxNSw3IEBACiAKIAogY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICIiIkV4YW1wbGUgZGVjb3JhdGlvbi1jb21wYXRpYmxlIGNvbnRleHQgbWFuYWdlciBmb3IgdGVzdGluZyIiIgogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGV4YyA9IE5vbmUKICAgICBjYXRjaCA9IEZhbHNlCkBAIC0yMTksNiArMjMxLDEzIEBACiAKIGNsYXNzIFRlc3RDb250ZXh0RGVjb3JhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBteWNvbnRleHQuX19kb2NfXworICAgICAgICBvYmogPSBteWNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIHJlc3VsdDoKQEAgLTM3Miw2ICszOTEsMTMgQEAKIAogY2xhc3MgVGVzdEV4aXRTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gRXhpdFN0YWNrLl9fZG9jX18KKyAgICAgICAgb2JqID0gRXhpdFN0YWNrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3Rfbm9fcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICB3aXRoIEV4aXRTdGFjaygpOgogICAgICAgICAgICAgcGFzcwpAQCAtNjMxLDEwICs2NTcsMTExIEBACiAgICAgICAgIHN0YWNrLnB1c2goY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhY2suX2V4aXRfY2FsbGJhY2tzWy0xXSwgY20pCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHJlZGlyZWN0X3N0ZG91dC5fX2RvY19fCisgICAgICAgIG9iaiA9IHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19zdHJpbmdfaW8oc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIG1zZyA9ICJDb25zaWRlciBhbiBBUEkgbGlrZSBoZWxwKCksIHdoaWNoIHByaW50cyBkaXJlY3RseSB0byBzdGRvdXQiCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbXNnKQorCisgICAgZGVmIHRlc3RfZW50ZXJfcmVzdWx0X2lzX3RhcmdldChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jM2ViN2ZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggY2ZiNzM0MS4uNjI0ZDcwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDExICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgICMgdGhpcyBpbXBvcnQgd2lsbCByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiBfY3J5cHQgZG9lc24ndCBleGlzdCwKLSAgICAjIHNvIGl0IGhhcyB0byBiZSBkb25lIGluIHNldFVwTW9kdWxlIGZvciB0ZXN0IGRpc2NvdmVyeSB0byB3b3JrCi0gICAgZ2xvYmFsIGNyeXB0Ci0gICAgY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKK2NyeXB0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDQ3OWViZDkuLjAxZmJhMjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICBpZiBpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBCYWRMaXN0KCksICcnKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCiAgICAgICAgIGNsYXNzIEJhZEl0ZW06CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgogICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CkBAIC0xODYsOSArMTg2LDkgQEAKICAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKEJyb2tlbkZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKQEAgLTMwOCw2ICszMDgsMTUgQEAKICAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCByb3dzW2ldKQogCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VzY2FwZWRfdW5xdW90ZWRfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKQorICAgICAgICAgICAgcm93cyA9IFtbJ2FcbmInLCdiJ10sWydjJywneFxyXG5kJ11dCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaixxdW90aW5nPWNzdi5RVU9URV9OT05FLGVzY2FwZWNoYXI9IlxcIikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LHJvd3NbaV0pCisKIGNsYXNzIFRlc3REaWFsZWN0UmVnaXN0cnkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X2JhZGFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2Lmxpc3RfZGlhbGVjdHMsIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IDI0M2EwYWYuLjFjNTc3NzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHJldHVybiBrZXlzCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5tb2R1bGUuZXJyb3IsIElPRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgT1NFcnJvcikpCiAKICAgICBkZWYgdGVzdF9hbnlkYm1fbm90X2V4aXN0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYm0uZXJyb3IsIGRibS5vcGVuLCBfZm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQppbmRleCAyMDhiYzRjLi45ZmQ4Y2RlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKQEAgLTE4NCw2ICsxODQsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImR1bWJkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgIyBUaGlzIGN1cnJlbnRseSBqdXN0IHJhaXNlcyBBdHRyaWJ1dGVFcnJvciByYXRoZXIgdGhhbiBhIHNwZWNpZmljCisgICAgICAgICMgZXhjZXB0aW9uIGxpa2UgdGhlIEdOVSBvciBOREJNIGJhc2VkIGltcGxlbWVudGF0aW9ucy4gU2VlCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5Mzg1IGZvciBkZXRhaWxzLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkYi5rZXlzKCkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgX2RlbGV0ZV9maWxlcygpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQppbmRleCA0ZmI2NmM1Li5hNzgwOGY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CkBAIC04MSw2ICs4MSwxNyBAQAogICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpIGFzIGRiOgorICAgICAgICAgICAgZGJbImdkYm0gY29udGV4dCBtYW5hZ2VyIl0gPSAiY29udGV4dCBtYW5hZ2VyIgorCisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImdkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQppbmRleCBiNTdlMWYwLi4yMjkxNTYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKQEAgLTM3LDUgKzM3LDE4IEBACiAgICAgICAgICAgICBleGNlcHQgZXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsibmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IibmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5uZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IDU0YTM2MTUuLjYzNzhlZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTI5MCw3ICsyOTAsNiBAQAogICAgICAgICBnbG9iYWwgc2tpcF9leHBlY3RlZAogICAgICAgICBpZiBza2lwX2V4cGVjdGVkOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnXHJcbicsICcnKS5yZXBsYWNlKCdcbicsICcnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggYTg0ODdkMi4uN2JmZjFkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLSAxKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiBCTE9DS0xFTiksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKDQyICogQkxPQ0tMRU4pKSwgYmFzZXNpemUgKyA0MyAqIGJsb2Nrc2l6ZSkKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggODk0MGFlOS4uZjA4YTNkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0xLDggKzEsMTEgQEAKIGltcG9ydCBidWlsdGlucworaW1wb3J0IGNvcHlyZWcKIGltcG9ydCBnYworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1hdGgKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwotaW1wb3J0IG1hdGgKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIApAQCAtMTc5Nyw2ICsxODAwLDcgQEAKICAgICAgICAgICAgICgiX190cnVuY19fIiwgaW50LCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2NlaWxfXyIsIG1hdGguY2VpbCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgICgiX19kaXJfXyIsIGRpciwgZW1wdHlfc2VxLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX3JvdW5kX18iLCByb3VuZCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgIF0KIAogICAgICAgICBjbGFzcyBDaGVja2VyKG9iamVjdCk6CkBAIC0yMjU3LDcgKzIyNjEsOSBAQAogICAgICAgICBtaW5zdGFuY2UgPSBNKCJtIikKICAgICAgICAgbWluc3RhbmNlLmIgPSAyCiAgICAgICAgIG1pbnN0YW5jZS5hID0gMQotICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIFsiX19uYW1lX18iLCAiX19kb2NfXyJdXQorICAgICAgICBkZWZhdWx0X2F0dHJpYnV0ZXMgPSBbJ19fbmFtZV9fJywgJ19fZG9jX18nLCAnX19wYWNrYWdlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19zcGVjX18nXQorICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIGRlZmF1bHRfYXR0cmlidXRlc10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWydhJywgJ2InXSkKIAogICAgICAgICBjbGFzcyBNMihNKToKQEAgLTMxNTAsMTc2ICszMTU2LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYW5fZGVsZXRlX2RpY3QoZSksIGNhbl9kZWxldGVfZGljdChWYWx1ZUVycm9yKCkpKQogCi0gICAgZGVmIHRlc3RfcGlja2xlcyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLi4uCi0gICAgICAgIGltcG9ydCBwaWNrbGUKLQotICAgICAgICBkZWYgc29ydGVkaXRlbXMoZCk6Ci0gICAgICAgICAgICBMID0gbGlzdChkLml0ZW1zKCkpCi0gICAgICAgICAgICBMLnNvcnQoKQotICAgICAgICAgICAgcmV0dXJuIEwKLQotICAgICAgICBnbG9iYWwgQwotICAgICAgICBjbGFzcyBDKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoQywgc2VsZikuX19pbml0X18oKQotICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKLSAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCi0gICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDKCVyLCAlcikiICUgKHNlbGYuYSwgc2VsZi5iKQotCi0gICAgICAgIGdsb2JhbCBDMQotICAgICAgICBjbGFzcyBDMShsaXN0KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMxLCBjbHMpLl9fbmV3X18oY2xzKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIpCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMxKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKLQotICAgICAgICBnbG9iYWwgQzIKLSAgICAgICAgY2xhc3MgQzIoaW50KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgdmFsPTApOgotICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihDMiwgY2xzKS5fX25ld19fKGNscywgdmFsKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMyKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMwotICAgICAgICBjbGFzcyBDMyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLSAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vCi0gICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLQotICAgICAgICBnbG9iYWwgQzRjbGFzc2ljLCBDNAotICAgICAgICBjbGFzcyBDNGNsYXNzaWM6ICMgY2xhc3NpYwotICAgICAgICAgICAgcGFzcwotICAgICAgICBjbGFzcyBDNChDNGNsYXNzaWMsIG9iamVjdCk6ICMgbWl4ZWQgaW5oZXJpdGFuY2UKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBmb3IgYmluIGluIDAsIDE6Ci0gICAgICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKLSAgICAgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGNscywgYmluKQotICAgICAgICAgICAgICAgIGNsczIgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcygoYSwgYiksIGJpbikKLSAgICAgICAgICAgIHgsIHkgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIGEuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeS5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGIuX19kaWN0X18pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotICAgICAgICAgICAgIyBUZXN0IGZvciBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXyBvbiBuZXcgc3R5bGUgY2xhc3MKLSAgICAgICAgICAgIHUgPSBDMyg0MikKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLSAgICAgICAgICAgICMgVGVzdCBmb3IgcGlja2xhYmlsaXR5IG9mIGh5YnJpZCBjbGFzcwotICAgICAgICAgICAgdSA9IEM0KCkKLSAgICAgICAgICAgIHUuZm9vID0gNDIKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLQotICAgICAgICAjIFRlc3RpbmcgY29weS5kZWVwY29weSgpCi0gICAgICAgIGltcG9ydCBjb3B5Ci0gICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgY2xzMiA9IGNvcHkuZGVlcGNvcHkoY2xzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbHMyLCBjbHMpCi0KLSAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgIHgsIHkgPSBjb3B5LmRlZXBjb3B5KChhLCBiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotCi0gICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyAuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotICAgICAgICAjIFBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gYnV0IHdpdGhvdXQgX19nZXRzdGF0ZV9fIHNob3VsZCBmYWlsCi0gICAgICAgICMgKGlmIHVzaW5nIHByb3RvY29sIDAgb3IgMSkKLSAgICAgICAgZ2xvYmFsIEIsIEMsIEQsIEUKLSAgICAgICAgY2xhc3MgQihvYmplY3QpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBmb3IgYmFzZSBpbiBbb2JqZWN0LCBCXToKLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgIGNsYXNzIEQoQyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEMgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEQgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgIyBHaXZlIEMgYSBuaWNlIGdlbmVyaWMgX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18KLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHt9Ci0gICAgICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fX2NsYXNzX18uX19tcm9fXzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzbiBpbiBjbHMuX19kaWN0X18uZ2V0KCdfX3Nsb3RzX18nLCAoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW3NuXSA9IGdldGF0dHIoc2VsZiwgc24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkCi0gICAgICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gbGlzdChkLml0ZW1zKCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjIE5vdyBpdCBzaG91bGQgd29yawotICAgICAgICAgICAgeCA9IEMoKQotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEhhc0F0dHIoeSwgJ2EnKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIDQyKQotICAgICAgICAgICAgeCA9IEQoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9IDEwMAotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSArIHkuYiwgMTQyKQotICAgICAgICAgICAgIyBBIHN1YmNsYXNzIHRoYXQgYWRkcyBhIHNsb3Qgc2hvdWxkIGFsc28gd29yawotICAgICAgICAgICAgY2xhc3MgRShDKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2InXQotICAgICAgICAgICAgeCA9IEUoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9ICJmb28iCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCB4LmEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYiwgeC5iKQotCiAgICAgZGVmIHRlc3RfYmluYXJ5X29wZXJhdG9yX292ZXJyaWRlKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgb3ZlcnJpZGVzIG9mIGJpbmFyeSBvcGVyYXRpb25zLi4uCiAgICAgICAgIGNsYXNzIEkoaW50KToKQEAgLTM3NDQsMTggKzM1ODAsOCBAQAogICAgICAgICAjIGJ1ZykuCiAgICAgICAgIGRlbCBjCiAKLSAgICAgICAgIyBJZiB0aGF0IGRpZG4ndCBibG93IHVwLCBpdCdzIGFsc28gaW50ZXJlc3RpbmcgdG8gc2VlIHdoZXRoZXIgY2xlYXJpbmcKLSAgICAgICAgIyB0aGUgbGFzdCBjb250YWluZXIgc2xvdCB3b3JrczogdGhhdCB3aWxsIGF0dGVtcHQgdG8gZGVsZXRlIGMgYWdhaW4sCi0gICAgICAgICMgd2hpY2ggd2lsbCBjYXVzZSBjIHRvIGdldCBhcHBlbmRlZCBiYWNrIHRvIHRoZSBjb250YWluZXIgYWdhaW4KLSAgICAgICAgIyAiZHVyaW5nIiB0aGUgZGVsLiAgKE9uIG5vbi1DUHl0aG9uIGltcGxlbWVudGF0aW9ucywgaG93ZXZlciwgX19kZWxfXwotICAgICAgICAjIGlzIHR5cGljYWxseSBub3QgY2FsbGVkIGFnYWluLikKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQotICAgICAgICBkZWwgQy5jb250YWluZXJbLTFdCi0gICAgICAgIGlmIHN1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKLSAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuY29udGFpbmVyWy0xXS5hdHRyLCA0MikKIAogICAgICAgICAjIE1ha2UgYyBtb3J0YWwgYWdhaW4sIHNvIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIHdpdGggLWwgZG9lc24ndCByZXBvcnQKICAgICAgICAgIyBpdCBhcyBhIGxlYWsuCkBAIC00NTM1LDYgKzQzNjEsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLl9fZGljdF9fWydfX3F1YWxuYW1lX18nXS5fX3NldF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsICdPaW5rJykKIAorICAgICAgICBnbG9iYWwgWQorICAgICAgICBjbGFzcyBZOgorICAgICAgICAgICAgY2xhc3MgSW5zaWRlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9fcXVhbG5hbWVfXywgJ1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuSW5zaWRlLl9fcXVhbG5hbWVfXywgJ1kuSW5zaWRlJykKKwogICAgIGRlZiB0ZXN0X3F1YWxuYW1lX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0geydfX3F1YWxuYW1lX18nOiAnc29tZS5uYW1lJ30KICAgICAgICAgdHAgPSB0eXBlKCdGb28nLCAoKSwgbnMpCkBAIC00NjkwLDExICs0NTIzLDQzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgubXlrZXkyLCAnZnJvbSBCYXNlMicpCiAKIAorY2xhc3MgUGlja2xpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NoZWNrX3JlZHVjZShzZWxmLCBwcm90bywgb2JqLCBhcmdzPSgpLCBrd2FyZ3M9e30sIHN0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lKToKKyAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9leF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwgYXJncywga3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwpICsgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSB0eXBlKG9iaikuX19iYXNlX18KKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IChjb3B5cmVnLl9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG9iaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBiYXNlX3R5cGUgaXMgb2JqZWN0IGVsc2UgYmFzZV90eXBlKG9iaikpKQorICAgICAgICAgICAgaWYgc3RhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlICs9IChzdGF0ZSwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9leF9fKHByb3RvKSwgcmVkdWNlX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19yZWR1Y2VfXygpLCByZWR1Y2VfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHByb3RvY29scyA9IHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSkKKyAgICAgICAgYXJncyA9ICgtMTAxLCAic3BhbSIpCisgICAgICAgIGt3YXJncyA9IHsnYmFjb24nOiAtMjAxLCAnZmlzaCc6IC0zMDF9CisgICAgICAgIHN0YXRlID0geydjaGVlc2UnOiAtNDAxfQorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIG9iaiA9IEMxKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MsIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMyOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiYmFkIGFyZ3MiCisgICAgICAgIG9iaiA9IEMyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIGt3YXJncykKKyAgICAgICAgb2JqID0gQzMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywga3dhcmdzKQorICAgICAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM0OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywgImJhZCBkaWN0IikKKyAgICAgICAgY2xhc3MgQzU6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiYmFkIHR1cGxlIiwga3dhcmdzKQorICAgICAgICBjbGFzcyBDNjoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgY2xhc3MgQzc6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gQzQsIEM1LCBDNiwgQzc6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM4OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDOCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgY2xhc3MgQzk6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCB7fSkKKyAgICAgICAgb2JqID0gQzkoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgY2xhc3MgQzEwOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEwKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzExOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgb2JqID0gQzExKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT1zdGF0ZSkKKworICAgICAgICBjbGFzcyBDMTI6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGRpY3QiCisgICAgICAgIG9iaiA9IEMxMigpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9Im5vdCBkaWN0IikKKworICAgICAgICBjbGFzcyBDMTM6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEzKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNDoKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IHR1cGxlKHN0YXRlKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIG9iaiA9IEMxNCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0oTm9uZSwgc3RhdGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE1KHsicXVlYmVjIjogLTYwMX0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgZGljdGl0ZW1zPWRpY3Qob2JqKSkKKworICAgICAgICBjbGFzcyBDMTYobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMxNihbInl1a29uIl0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgbGlzdGl0ZW1zPWxpc3Qob2JqKSkKKworICAgIGRlZiBfYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIGlmIHR5cGUob2JqKS5fX3JlcHJfXyBpcyBvYmplY3QuX19yZXByX186CisgICAgICAgICAgICAjIFdlIGhhdmUgdGhpcyBsaW1pdGF0aW9uIGZvciBub3cgYmVjYXVzZSB3ZSB1c2UgdGhlIG9iamVjdCdzIHJlcHIKKyAgICAgICAgICAgICMgdG8gaGVscCB1cyB2ZXJpZnkgdGhhdCB0aGUgdHdvIG9iamVjdHMgYXJlIGNvcGllcy4gVGhpcyBhbGxvd3MKKyAgICAgICAgICAgICMgdXMgdG8gZGVsZWdhdGUgdGhlIG5vbi1nZW5lcmljIHZlcmlmaWNhdGlvbiBsb2dpYyB0byB0aGUgb2JqZWN0cworICAgICAgICAgICAgIyB0aGVtc2VsdmVzLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib2JqZWN0IHBhc3NlZCB0byBfYXNzZXJ0X2lzX2NvcHkgbXVzdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSBfX3JlcHJfXyBtZXRob2QuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2JqKSwgcmVwcihvYmpjb3B5KSwgbXNnPW1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBtYW55IHBvc3NpYmxlIHBpY2tsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIFBpY2tsZUNvcGllcjoKKyAgICAgICAgICAgICJUaGlzIGNsYXNzIGNvcGllcyBvYmplY3QgdXNpbmcgcGlja2xlLiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90bywgZHVtcHMsIGxvYWRzKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb3RvID0gcHJvdG8KKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBzID0gZHVtcHMKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzID0gbG9hZHMKKyAgICAgICAgICAgIGRlZiBjb3B5KHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHNlbGYucHJvdG8pKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IHRvIGJlIGFzIGRlc2NyaXB0aXZlIGFzIHBvc3NpYmxlIGhlcmUgc2luY2UgdGhpcyBpcworICAgICAgICAgICAgICAgICMgdGhlIHN0cmluZyB3aGljaCB3ZSB3aWxsIGFsbG93IHVzIHRvIHRlbGwgdGhlIHBpY2tsZQorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbiB3ZSBhcmUgdXNpbmcgZHVyaW5nIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gKCJQaWNrbGVDb3BpZXIocHJvdG89e30sIGR1bXBzPXt9Lnt9LCBsb2Fkcz17fS57fSkiCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMuX19tb2R1bGVfXywgc2VsZi5kdW1wcy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMuX19tb2R1bGVfXywgc2VsZi5sb2Fkcy5fX3F1YWxuYW1lX18pKQorICAgICAgICByZXR1cm4gKFBpY2tsZUNvcGllcigqYXJncykgZm9yIGFyZ3MgaW4KKyAgICAgICAgICAgICAgICAgICBpdGVydG9vbHMucHJvZHVjdChyYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUuZHVtcHMsIHBpY2tsZS5fZHVtcHN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUubG9hZHMsIHBpY2tsZS5fbG9hZHN9KSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9zbG90cyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fLgorCisgICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkCisgICAgICAgICMgZmFpbCAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQorICAgICAgICBnbG9iYWwgQworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKKworICAgICAgICBnbG9iYWwgRAorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoRCgpLCAwKQorCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAiQSBjbGFzcyB3aXRoIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIGltcGxlbWVudGVkLiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCB7fSkuY29weSgpCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLl9fbXJvX186CisgICAgICAgICAgICAgICAgICAgIGZvciBzbG90IGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtzbG90XSA9IGdldGF0dHIoc2VsZiwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlcygpPCVyPiIgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fX2dldHN0YXRlX18oKSkKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgb2YgYSBjbGFzcyB3aXRoIHNsb3RzLiIKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBnbG9iYWwgRQorICAgICAgICBjbGFzcyBFKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgd2l0aCBhbiBleHRyYSBzbG90LiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCisKKyAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKKyAgICAgICAgZm9yIHBpY2tsZV9jb3BpZXIgaW4gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHggPSBEKCkKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHguYiA9IDEwMAorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEUoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLgorICAgICAgICBnbG9iYWwgQzEKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICAiVGhlIHN0YXRlIG9mIHRoaXMgY2xhc3MgaXMgY29weWFibGUgdmlhIGl0cyBpbnN0YW5jZSBkaWN0LiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gVHJ1ZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKKworICAgICAgICBnbG9iYWwgQzIKKyAgICAgICAgY2xhc3MgQzIobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMzCisgICAgICAgIGNsYXNzIEMzKGxpc3QpOgorICAgICAgICAgICAgIkEgbGlzdCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRzdGF0ZV9fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgICMgVGhpcyBoZWxwcyB0ZXN0aW5nIHRoYXQgX19pbml0X18gaXMgbm90IGNhbGxlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgIyB1bnBpY2tsaW5nIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGNhdXNlIGV4dHJhIGFwcGVuZHMuCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoImNoZWVzZSIpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGEsIGIgPSBzdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMyglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM0CisgICAgICAgIGNsYXNzIEM0KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKCJoZWxsbyIsICJ3b3JsZCIsIDEpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM0KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDNQorICAgICAgICBjbGFzcyBDNShpbnQpOgorICAgICAgICAgICAgIkFuIGludCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX2V4X18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgS1dBUkdTID0geyd2YWx1ZSc6IDN9CisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsICosIHZhbHVlPTApOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY2xzLkFSR1MsIGNscy5LV0FSR1MpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDNSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICB0ZXN0X2NsYXNzZXMgPSAoQzEsIEMyLCBDMywgQzQsIEM1KQorICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIHBpY2tsZQorICAgICAgICBwaWNrbGVfY29waWVycyA9IHNlbGYuX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCkKKyAgICAgICAgZm9yIGNscywgcGlja2xlX2NvcGllciBpbiBpdGVydG9vbHMucHJvZHVjdCh0ZXN0X2NsYXNzZXMsIHBpY2tsZV9jb3BpZXJzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMsIHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBwcm90byA9IHBpY2tsZV9jb3BpZXIucHJvdG8KKyAgICAgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNCBhbmQgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlX2NvcGllci5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyIGFuZCBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqY29weSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5MikKKworICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIGNvcHkuZGVlcGNvcHkoKQorICAgICAgICBmb3IgY2xzIGluIHRlc3RfY2xhc3NlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMpOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb3B5IG1vZHVsZSB0byBzdXBwb3J0IFBFUCAzMTU0J3MKKyAgICAgICAgICAgICAgICAjIHJlZHVjZSBwcm90b2NvbCA0LgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvYmpjb3B5ID0gZGVlcGNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBkZWVwY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFJ1biBhbGwgbG9jYWwgdGVzdCBjYXNlcywgd2l0aCBQVHlwZXNMb25nSW5pdFRlc3QgZmlyc3QuCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUFR5cGVzTG9uZ0luaXRUZXN0LCBPcGVyYXRvcnNUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVydGllc0FuZE1ldGhvZHMsIERpY3RQcm94eVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMsIFBpY2tsaW5nVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQppbmRleCBiZWY0ZTE4Li40MGViZWVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CkBAIC0yLDEzICsyLDE3IEBACiAKICMgSW5pdGlhbCB0ZXN0cyBhcmUgY29waWVkIGFzIGlzIGZyb20gInRlc3RfcG9sbC5weSIKIAotaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAogCiB0cnk6CiAgICAgc2VsZWN0LmRldnBvbGwKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9kZXZwb2xsIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQiKQogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKQEAgLTg3LDYgKzkxLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKworICAgICAgICAjIHRlc3QgZmlsZW5vKCkgbWV0aG9kIGFuZCBjbG9zZWQgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXZwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGV2cG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXZwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb25zIG11c3QgZmFpbCB3aXRoIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIC4uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5wb2xsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnJlZ2lzdGVyLCBmZCwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChkZXZwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShkZXZwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChEZXZQb2xsVGVzdHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKaW5kZXggZDEzNTViYi4uOTRkNmJlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKQEAgLTEsMTEgKzEsMjkgQEAKICMgTWluaW1hbCB0ZXN0cyBmb3IgZGlzIG1vZHVsZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9zdGRvdXQKK2Zyb20gdGVzdC5ieXRlY29kZV9oZWxwZXIgaW1wb3J0IEJ5dGVjb2RlVGVzdENhc2UKIGltcG9ydCBkaWZmbGliCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGltcG9ydCBkaXMKIGltcG9ydCBpbworaW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjIsMTIgKzQwLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OCwxMSArNjYsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC0xNzEsMzMgKzE4OSw2MyBAQAogICAgICAgICAgICAgIDI1IFJFVFVSTl9WQUxVRQogIiIiCiAKK2Rpc190cmFjZWJhY2sgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgU0VUVVBfRVhDRVBUICAgICAgICAgICAgMTIgKHRvIDE1KQorCisgJS00ZCAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgIDYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDApCisgICAgLS0+ICAgICAgIDkgQklOQVJZX1RSVUVfRElWSURFCisgICAgICAgICAgICAgMTAgUE9QX1RPUAorICAgICAgICAgICAgIDExIFBPUF9CTE9DSworICAgICAgICAgICAgIDEyIEpVTVBfRk9SV0FSRCAgICAgICAgICAgIDQ2ICh0byA2MSkKKworICUtNGQgICA+PiAgIDE1IERVUF9UT1AKKyAgICAgICAgICAgICAxNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoRXhjZXB0aW9uKQorICAgICAgICAgICAgIDE5IENPTVBBUkVfT1AgICAgICAgICAgICAgIDEwIChleGNlcHRpb24gbWF0Y2gpCisgICAgICAgICAgICAgMjIgUE9QX0pVTVBfSUZfRkFMU0UgICAgICAgNjAKKyAgICAgICAgICAgICAyNSBQT1BfVE9QCisgICAgICAgICAgICAgMjYgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgMjkgUE9QX1RPUAorICAgICAgICAgICAgIDMwIFNFVFVQX0ZJTkFMTFkgICAgICAgICAgIDE0ICh0byA0NykKKworICUtNGQgICAgICAgIDMzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDM2IExPQURfQVRUUiAgICAgICAgICAgICAgICAxIChfX3RyYWNlYmFja19fKQorICAgICAgICAgICAgIDM5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA0MiBQT1BfQkxPQ0sKKyAgICAgICAgICAgICA0MyBQT1BfRVhDRVBUCisgICAgICAgICAgICAgNDQgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgID4+ICAgNDcgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgNTAgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTMgREVMRVRFX0ZBU1QgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTYgRU5EX0ZJTkFMTFkKKyAgICAgICAgICAgICA1NyBKVU1QX0ZPUldBUkQgICAgICAgICAgICAgMSAodG8gNjEpCisgICAgICAgID4+ICAgNjAgRU5EX0ZJTkFMTFkKKworICUtNGQgICA+PiAgIDYxIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA2NCBSRVRVUk5fVkFMVUUKKyIiIiAlIChUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDEsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAyLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMywKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDQsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA1KQorCiBjbGFzcyBEaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5KHNlbGYsIGZ1bmMsIGxhc3RpPS0xLCB3cmFwcGVyPVRydWUpOgotICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc3lzLnN0ZG91dCA9IHMKLSAgICAgICAgdHJ5OgorICAgICAgICAjIFdlIHdhbnQgdG8gdGVzdCB0aGUgZGVmYXVsdCBwcmludGluZyBiZWhhdmlvdXIsIG5vdCB0aGUgZmlsZSBhcmcKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KG91dHB1dCk6CiAgICAgICAgICAgICBpZiB3cmFwcGVyOgogICAgICAgICAgICAgICAgIGRpcy5kaXMoZnVuYykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGlzLmRpc2Fzc2VtYmxlKGZ1bmMsIGxhc3RpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0Ci0gICAgICAgICMgVHJpbSB0cmFpbGluZyBibGFua3MgKGlmIGFueSkuCi0gICAgICAgIHJldHVybiBbbGluZS5yc3RyaXAoKSBmb3IgbGluZSBpbiBzLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpXQorICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKIAogICAgIGRlZiBnZXRfZGlzYXNzZW1ibGVfYXNfc3RyaW5nKHNlbGYsIGZ1bmMsIGxhc3RpPS0xKToKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jLCBsYXN0aSwgRmFsc2UpKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYywgbGFzdGksIEZhbHNlKQogCiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgotICAgICAgICBsaW5lcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCi0gICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXRsaW5lcygpCi0gICAgICAgIGlmIGV4cGVjdGVkICE9IGxpbmVzOgotICAgICAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJOT1AiXSwgOSkKQEAgLTI4OCwzNSArMzM2LDM1IEBACiAgICAgZGVmIHRlc3RfZGlzX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuZGlzLCBvYmplY3QoKSkKIAorY2xhc3MgRGlzV2l0aEZpbGVUZXN0cyhEaXNUZXN0cyk6CisKKyAgICAjIFJ1biB0aGUgdGVzdHMgYWdhaW4sIHVzaW5nIHRoZSBmaWxlIGFyZyBpbnN0ZWFkIG9mIHByaW50CisgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBpZiB3cmFwcGVyOgorICAgICAgICAgICAgZGlzLmRpcyhmdW5jLCBmaWxlPW91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSwgZmlsZT1vdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKKwogY29kZV9pbmZvX2NvZGVfaW5mbyA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICBjb2RlX2luZm8KIEZpbGVuYW1lOiAgICAgICAgICAoLiopCiBBcmd1bWVudCBjb3VudDogICAgMQogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAxCi1TdGFjayBzaXplOiAgICAgICAgNAorU3RhY2sgc2l6ZTogICAgICAgIDMKIEZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCiBDb25zdGFudHM6CiAgICAwOiAlcgotICAgMTogJ19fZnVuY19fJwotICAgMjogJ19fY29kZV9fJwotICAgMzogJzxjb2RlX2luZm8+JwotICAgNDogJ2NvX2NvZGUnCi0gICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCi0lc05hbWVzOgotICAgMDogaGFzYXR0cgotICAgMTogX19mdW5jX18KLSAgIDI6IF9fY29kZV9fCi0gICAzOiBpc2luc3RhbmNlCi0gICA0OiBzdHIKLSAgIDU6IF90cnlfY29tcGlsZQotICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KLSAgIDc6IFR5cGVFcnJvcgotICAgODogdHlwZQotICAgOTogX19uYW1lX18KK05hbWVzOgorICAgMDogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDE6IF9nZXRfY29kZV9vYmplY3QKIFZhcmlhYmxlIG5hbWVzOgotICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKLSAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisgICAwOiB4IiIiICUgKCgnRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLicsKQorICAgICAgICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyIGVsc2UgKE5vbmUsKSkKIAogQHN0YXRpY21ldGhvZAogZGVmIHRyaWNreSh4LCB5LCB6PVRydWUsICphcmdzLCBjLCBkLCBlPVtdLCAqKmt3ZHMpOgpAQCAtMzgwLDcgKzQyOCw3IEBACiAKIGNvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgotRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitGaWxlbmFtZTogICAgICAgICAgPGRpc2Fzc2VtYmx5PgogQXJndW1lbnQgY291bnQ6ICAgIDAKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMApAQCAtMzkzLDcgKzQ0MSw3IEBACiAKIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQwNyw3ICs0NTUsNyBAQAogCiBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQ0MSw2ICs0ODksOSBAQAogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKyAgICAgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCwgZmlsZT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2NvZGVfaW5mb19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmNvZGVfaW5mbywgb2JqZWN0KCkpCkBAIC00NDksOCArNTAwLDMzNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5wcmV0dHlfZmxhZ3MoMCksICcweDAnKQogCiAKKyMgRm9kZGVyIGZvciBpbnN0cnVjdGlvbiBpbnRyb3NwZWN0aW9uIHRlc3RzCisjICAgRWRpdGluZyBhbnkgb2YgdGhlc2UgbWF5IHJlcXVpcmUgcmVjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgb3V0cHV0CitkZWYgb3V0ZXIoYT0xLCBiPTIpOgorICAgIGRlZiBmKGM9MywgZD00KToKKyAgICAgICAgZGVmIGlubmVyKGU9NSwgZj02KToKKyAgICAgICAgICAgIHByaW50KGEsIGIsIGMsIGQsIGUsIGYpCisgICAgICAgIHByaW50KGEsIGIsIGMsIGQpCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHByaW50KGEsIGIsICcnLCAxLCBbXSwge30sICJIZWxsbyB3b3JsZCEiKQorICAgIHJldHVybiBmCisKK2RlZiBqdW1weSgpOgorICAgICMgVGhpcyB3b24ndCBhY3R1YWxseSBydW4gKGJ1dCB0aGF0J3MgT0ssIHdlIG9ubHkgZGlzYXNzZW1ibGUgaXQpCisgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBwcmludChpKQorICAgICAgICBpZiBpIDwgNDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyIpCisgICAgd2hpbGUgaToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaSAtPSAxCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/IikKKyAgICB0cnk6CisgICAgICAgIDEgLyAwCisgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICBwcmludCgiSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiIpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBpIGFzIGRvZGd5OgorICAgICAgICAgICAgcHJpbnQoIk5ldmVyIHJlYWNoIHRoaXMiKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50KCJPSywgbm93IHdlJ3JlIGRvbmUiKQorCisjIEVuZCBmb2RkZXIgZm9yIG9waW5mbyBnZW5lcmF0aW9uIHRlc3RzCitleHBlY3RlZF9vdXRlcl9saW5lID0gMQorX2xpbmVfb2Zmc2V0ID0gb3V0ZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gLSAxCitjb2RlX29iamVjdF9mID0gb3V0ZXIuX19jb2RlX18uY29fY29uc3RzWzNdCitleHBlY3RlZF9mX2xpbmUgPSBjb2RlX29iamVjdF9mLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0Citjb2RlX29iamVjdF9pbm5lciA9IGNvZGVfb2JqZWN0X2YuY29fY29uc3RzWzNdCitleHBlY3RlZF9pbm5lcl9saW5lID0gY29kZV9vYmplY3RfaW5uZXIuY29fZmlyc3RsaW5lbm8gLSBfbGluZV9vZmZzZXQKK2V4cGVjdGVkX2p1bXB5X2xpbmUgPSAxCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZnVsIHRvIHJlZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgYWZ0ZXIKKyMgZWl0aGVyIHRoZSBmb2RkZXIgaXMgbW9kaWZpZWQgb3IgdGhlIGJ5dGVjb2RlIGdlbmVyYXRpb24gY2hhbmdlcworIyBBZnRlciByZWdlbmVyYXRpb24sIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcyB0byBjb2RlX29iamVjdF9mIGFuZAorIyBjb2RlX29iamVjdF9pbm5lciBiZWZvcmUgcmVydW5uaW5nIHRoZSB0ZXN0cworCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19vdXRlciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fZiA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorCisKK0luc3RydWN0aW9uID0gZGlzLkluc3RydWN0aW9uCitleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MywgYXJncmVwcj0nMycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0yLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfZiwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2YpLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mJyIsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9JycsIGFyZ3JlcHI9IicnIiwgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX0xJU1QnLCBvcGNvZGU9MTAzLCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX01BUCcsIG9wY29kZT0xMDUsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9J0hlbGxvIHdvcmxkIScsIGFyZ3JlcHI9IidIZWxsbyB3b3JsZCEnIiwgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz03LCBhcmd2YWw9NywgYXJncmVwcj0nNyBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2YgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9NSwgYXJncmVwcj0nNScsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JycsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2lubmVyLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfaW5uZXIpLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lcicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJyIsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPSc0IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9NTIsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19pbm5lciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2UnLCBhcmdyZXByPSdlJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTEsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTYsIGFyZ3ZhbD02LCBhcmdyZXByPSc2IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19qdW1weSA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTI5LCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0zNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTQ3LCBhcmd2YWw9NDcsIGFyZ3JlcHI9JycsIG9mZnNldD0zOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTQxLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD00NywgYXJncmVwcj0ndG8gNDcnLCBvZmZzZXQ9NDQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD00Nywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD01MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD01Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU5LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02Nywgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD03MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTE1NCwgYXJncmVwcj0ndG8gMTU0Jywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE0MywgYXJndmFsPTE0MywgYXJncmVwcj0nJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTg2LCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTg5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05Niwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTAyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwNiwgc3RhcnRzX2xpbmU9MTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTEwOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD0xMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMjQsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTgsIHN0YXJ0c19saW5lPTE1LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9J3RvIDEyNCcsIG9mZnNldD0xMjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPTE2LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTEyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0xMzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM2LCBzdGFydHNfbGluZT0xNywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTQ0LCBzdGFydHNfbGluZT0xOSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPSdXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JywgYXJncmVwcj0iJ1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nIiwgb2Zmc2V0PTE0Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9GSU5BTExZJywgb3Bjb2RlPTEyMiwgYXJnPTcyLCBhcmd2YWw9MjI5LCBhcmdyZXByPSd0byAyMjknLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT0yMCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRVhDRVBUJywgb3Bjb2RlPTEyMSwgYXJnPTEyLCBhcmd2YWw9MTcyLCBhcmdyZXByPSd0byAxNzInLCBvZmZzZXQ9MTU3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0xNjAsIHN0YXJ0c19saW5lPTIxLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9MCwgYXJncmVwcj0nMCcsIG9mZnNldD0xNjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCSU5BUllfVFJVRV9ESVZJREUnLCBvcGNvZGU9MjcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjgsIGFyZ3ZhbD0yMDAsIGFyZ3JlcHI9J3RvIDIwMCcsIG9mZnNldD0xNjksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdEVVBfVE9QJywgb3Bjb2RlPTQsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9MjIsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTIsIGFyZ3ZhbD0nWmVyb0RpdmlzaW9uRXJyb3InLCBhcmdyZXByPSdaZXJvRGl2aXNpb25FcnJvcicsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTEwLCBhcmd2YWw9J2V4Y2VwdGlvbiBtYXRjaCcsIGFyZ3JlcHI9J2V4Y2VwdGlvbiBtYXRjaCcsIG9mZnNldD0xNzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xOTksIGFyZ3ZhbD0xOTksIGFyZ3JlcHI9JycsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCisjIE9uZSBsYXN0IHBpZWNlIG9mIGluc3BlY3QgZm9kZGVyIHRvIGNoZWNrIHRoZSBkZWZhdWx0IGxpbmUgbnVtYmVyIGhhbmRsaW5nCitkZWYgc2ltcGxlKCk6IHBhc3MKK2V4cGVjdGVkX29waW5mb19zaW1wbGUgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0wLCBzdGFydHNfbGluZT1zaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKQorXQorCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHNpbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9maXJzdF9saW5lX3NldF90b19Ob25lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUsIGZpcnN0X2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9vdXRlcihzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGYgPSBvdXRlcigpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfZl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2YpCisKKyAgICBkZWYgdGVzdF9kb3VibHlfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgaW5uZXIgPSBvdXRlcigpKCkKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoaW5uZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfaW5uZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19pbm5lcikKKworICAgIGRlZiB0ZXN0X2p1bXB5KHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgZmlyc3RfbGluZT1leHBlY3RlZF9qdW1weV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5KQorCisjIGdldF9pbnN0cnVjdGlvbnMgaGFzIGl0cyBvd24gdGVzdHMgYWJvdmUsIHNvIGNhbiByZWx5IG9uIGl0IHRvIHZhbGlkYXRlCisjIHRoZSBvYmplY3Qgb3JpZW50ZWQgQVBJCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIuY29kZW9iaiwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuQnl0ZWNvZGUsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtfZiwgX0MoMSkuX19pbml0X18sICJhPTEiLCBfZi5fX2NvZGVfX106CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICB2aWFfb2JqZWN0ID0gbGlzdChkaXMuQnl0ZWNvZGUob2JqKSkKKyAgICAgICAgICAgICAgICB2aWFfZ2VuZXJhdG9yID0gbGlzdChkaXMuZ2V0X2luc3RydWN0aW9ucyhvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlhX29iamVjdCwgdmlhX2dlbmVyYXRvcikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX291dGVyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2xpbmVfaW5fZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgICMgVXNlIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUoc2ltcGxlKS5kaXMoKVs6M10KKyAgICAgICAgZXhwZWN0ZWQgPSAiezo+M30iLmZvcm1hdChzaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgIyBVc2UgYW4gZXhwbGljaXQgZmlyc3QgbGluZSBudW1iZXIKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSwgZmlyc3RfbGluZT0zNTApLmRpcygpWzozXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgIjM1MCIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlZChzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKF9mKS5kaXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZGlzX2YpCisKKyAgICBkZWYgdGVzdF9mcm9tX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY3VycmVudF9vZmZzZXQsIHRiLnRiX2xhc3RpKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2tfZGlzKHNlbGYpOgorICAgICAgICB0YiA9IGdldF90YigpCisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2sodGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kaXMoKSwgZGlzX3RyYWNlYmFjaykKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChEaXNUZXN0cywgQ29kZUluZm9UZXN0cykKKyAgICBydW5fdW5pdHRlc3QoRGlzVGVzdHMsIERpc1dpdGhGaWxlVGVzdHMsIENvZGVJbmZvVGVzdHMsCisgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uVGVzdHMsIEJ5dGVjb2RlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA4ZjhjN2M3Li41YjUzY2E4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00MDksNyArNDA5LDggQEAKIAogIiIiCiAKLWRlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorY2xhc3MgdGVzdF9Eb2NUZXN0RmluZGVyOgorICAgIGRlZiBiYXNpY3MoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KIAogRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKQEAgLTY0Niw2ICs2NDcsMzkgQEAKICAgICBbMSwgOSwgMTJdCiAiIiIKIAorICAgIGlmIGludC5fX2RvY19fOiAjIHNpbXBsZSBjaGVjayBmb3IgLS13aXRob3V0LWRvYy1zdHJpbmdzLCBza2lwIGlmIGxhY2tpbmcKKyAgICAgICAgZGVmIG5vbl9QeXRob25fbW9kdWxlcygpOiByIiIiCisKK0ZpbmRpbmcgRG9jdGVzdHMgaW4gTW9kdWxlcyBOb3QgV3JpdHRlbiBpbiBQeXRob24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0RvY1Rlc3RGaW5kZXIgY2FuIGFsc28gZmluZCBkb2N0ZXN0cyBpbiBtb3N0IG1vZHVsZXMgbm90IHdyaXR0ZW4gaW4gUHl0aG9uLgorV2UnbGwgdXNlIGJ1aWx0aW5zIGFzIGFuIGV4YW1wbGUsIHNpbmNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXNuJ3Qgd3JpdHRlbiBpbgorcGxhaW4gb2wnIFB5dGhvbiBhbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisKKyAgICA+Pj4gaW1wb3J0IGJ1aWx0aW5zCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChidWlsdGlucykKKyAgICA+Pj4gNzkwIDwgbGVuKHRlc3RzKSA8IDgwMCAjIGFwcHJveGltYXRlIG51bWJlciBvZiBvYmplY3RzIHdpdGggZG9jc3RyaW5ncworICAgIFRydWUKKyAgICA+Pj4gcmVhbF90ZXN0cyA9IFt0IGZvciB0IGluIHRlc3RzIGlmIGxlbih0LmV4YW1wbGVzKSA+IDBdCisgICAgPj4+IGxlbihyZWFsX3Rlc3RzKSAjIG9iamVjdHMgdGhhdCBhY3R1YWxseSBoYXZlIGRvY3Rlc3RzCisgICAgOAorICAgID4+PiBmb3IgdCBpbiByZWFsX3Rlc3RzOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICB7fScuZm9ybWF0KGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKSkKKyAgICAuLi4KKyAgICAxICBidWlsdGlucy5iaW4KKyAgICAzICBidWlsdGlucy5mbG9hdC5hc19pbnRlZ2VyX3JhdGlvCisgICAgMiAgYnVpbHRpbnMuZmxvYXQuZnJvbWhleAorICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmhleAorICAgIDEgIGJ1aWx0aW5zLmhleAorICAgIDEgIGJ1aWx0aW5zLmludAorICAgIDIgIGJ1aWx0aW5zLmludC5iaXRfbGVuZ3RoCisgICAgMSAgYnVpbHRpbnMub2N0CisKK05vdGUgaGVyZSB0aGF0ICdiaW4nLCAnb2N0JywgYW5kICdoZXgnIGFyZSBmdW5jdGlvbnM7ICdmbG9hdC5hc19pbnRlZ2VyX3JhdGlvJywKKydmbG9hdC5oZXgnLCBhbmQgJ2ludC5iaXRfbGVuZ3RoJyBhcmUgbWV0aG9kczsgJ2Zsb2F0LmZyb21oZXgnIGlzIGEgY2xhc3NtZXRob2QsCithbmQgJ2ludCcgaXMgYSB0eXBlLgorIiIiCisKIGRlZiB0ZXN0X0RvY1Rlc3RQYXJzZXIoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0UGFyc2VyYCBjbGFzcy4KIApAQCAtMTQwOSw4ICsxNDQzLDQwIEBACiAgICAgICAgIDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCiAKLUZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCi1jb3VudCBhcyBmYWlsdXJlczoKK1RoZSBGQUlMX0ZBU1QgZmxhZyBjYXVzZXMgdGhlIHJ1bm5lciB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIGV4YW1wbGUsCitzbyBzdWJzZXF1ZW50IGV4YW1wbGVzIGFyZSBub3QgZXZlbiBhdHRlbXB0ZWQ6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVAorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1NwZWNpZnlpbmcgYm90aCBGQUlMX0ZBU1QgYW5kIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgaXMgZXF1aXZhbGVudCB0bworRkFJTF9GQVNUIG9ubHk6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVCB8IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgYm90aCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGFuZCBGQUlMX0ZBU1QsIHVuZXhwZWN0ZWQKK2V4Y2VwdGlvbnMgY291bnQgYXMgZmFpbHVyZXM6CiAKICAgICA+Pj4gZGVmIGYoeCk6CiAgICAgLi4uICAgICByJycnCkBAIC0xNDM3LDYgKzE1MDMsMTcgQEAKICAgICAgICAgLi4uCiAgICAgICAgIFZhbHVlRXJyb3I6IDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQogCiBOZXcgb3B0aW9uIGZsYWdzIGNhbiBhbHNvIGJlIHJlZ2lzdGVyZWQsIHZpYSByZWdpc3Rlcl9vcHRpb25mbGFnKCkuICBIZXJlCiB3ZSByZWFjaCBpbnRvIGRvY3Rlc3QncyBpbnRlcm5hbHMgYSBiaXQuCkBAIC0yNTUzLDYgKzI2MzAsMjQwIEBACiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQogICAgICIiIgogCitkZWYgdGVzdF9DTEkoKTogciIiIgorVGhlIGRvY3Rlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIHJ1biBkb2N0ZXN0cyBhZ2FpbnN0IGFuIGFyYml0cmFyeSBmaWxlLgorVGhlc2UgdGVzdHMgdGVzdCB0aGlzIENMSSBmdW5jdGlvbmFsaXR5LgorCitXZSdsbCB1c2UgdGhlIHN1cHBvcnQgbW9kdWxlJ3Mgc2NyaXB0X2hlbHBlcnMgZm9yIHRoaXMsIGFuZCB3cml0ZSBhIHRlc3QgZmlsZXMKK3RvIGEgdGVtcCBkaXIgdG8gcnVuIHRoZSBjb21tYW5kIGFnYWluc3QuICBEdWUgdG8gYSBjdXJyZW50IGxpbWl0YXRpb24gaW4KK3NjcmlwdF9oZWxwZXJzLCB0aG91Z2gsIHdlIG5lZWQgYSBsaXR0bGUgdXRpbGl0eSBmdW5jdGlvbiB0byB0dXJuIHRoZSByZXR1cm5lZAorb3V0cHV0IGludG8gc29tZXRoaW5nIHdlIGNhbiBkb2N0ZXN0IGFnYWluc3Q6CisKKyAgICA+Pj4gZGVmIG5vcm1hbGl6ZShzKToKKyAgICAuLi4gICAgIHJldHVybiAnXG4nLmpvaW4ocy5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCisKK05vdGU6IHdlIGFsc28gcGFzcyBURVJNPScnIHRvIGFsbCB0aGUgYXNzZXJ0X3B5dGhvbiBjYWxscyB0byBhdm9pZCBhIGJ1ZworaW4gdGhlIHJlYWRsaW5lIGxpYnJhcnkgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gdGhlc2UgdGVzdHMgYmVjYXVzZSB3ZSBhcmUKK3J1bm5pbmcgdGhlbSBpbiBhIG5ldyBweXRob24gcHJvY2Vzcy4gIFNlZToKKworICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTMtMDYvbXNnMDAwMDAuaHRtbAorCitXaXRoIHRob3NlIHByZWxpbWluYXJpZXMgb3V0IG9mIHRoZSB3YXksIHdlJ2xsIHN0YXJ0IHdpdGggYSBmaWxlIHdpdGggdHdvCitzaW1wbGUgdGVzdHMgYW5kIG5vIGVycm9ycy4gIFdlJ2xsIHJ1biBib3RoIHRoZSB1bmFkb3JuZWQgZG9jdGVzdCBjb21tYW5kLCBhbmQKK3RoZSB2ZXJib3NlIHZlcnNpb24sIGFuZCB0aGVuIGNoZWNrIHRoZSBvdXRwdXQ6CisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYSJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdBbmQgdGhhdCBpcyBpdC5cbicpCisgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4sIFRFUk09JycpCisKK1dpdGggbm8gYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRlc3RzLCB3ZSBzaG91bGQgZ2V0IG5vIG91dHB1dDoKKworICAgID4+PiByYzEsIG91dDEsIGVycjEKKyAgICAoMCwgYicnLCBiJycpCisKK1dpdGggdGhlIHZlcmJvc2UgZmxhZywgd2Ugc2hvdWxkIHNlZSB0aGUgdGVzdCBvdXRwdXQsIGJ1dCBubyBlcnJvciBvdXRwdXQ6CisKKyAgICA+Pj4gcmMyLCBlcnIyCisgICAgKDAsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDIpKQorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImEiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYScKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAyIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAyIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitOb3cgd2UnbGwgd3JpdGUgYSBjb3VwbGUgZmlsZXMsIG9uZSB3aXRoIHRocmVlIHRlc3RzLCB0aGUgb3RoZXIgYSBweXRob24gbW9kdWxlCit3aXRoIHR3byB0ZXN0cywgYm90aCBvZiB0aGUgZmlsZXMgaGF2aW5nICJlcnJvcnMiIGluIHRoZSB0ZXN0cyB0aGF0IGNhbiBiZSBtYWRlCitub24tZXJyb3JzIGJ5IGFwcGx5aW5nIHRoZSBhcHByb3ByaWF0ZSBkb2N0ZXN0IG9wdGlvbnMgdG8gdGhlIHJ1biAoRUxMSVBTSVMgaW4KK3RoZSBmaXJzdCBmaWxlLCBOT1JNQUxJWkVfV0hJVEVTUEFDRSBpbiB0aGUgc2Vjb25kKS4gIFRoaXMgY29tYmluYXRpb24gd2lsbAorYWxsb3cgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSAtZiBhbmQgLW8gZmxhZ3MsIGFzIHdlbGwgYXMgdGhlIGRvY3Rlc3QgY29tbWFuZCdzCithYmlsaXR5IHRvIHByb2Nlc3MgbW9yZSB0aGFuIG9uZSBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kLCBzaW5jZSB0aGUgc2Vjb25kCitmaWxlIGVuZHMgaW4gJy5weScsIGl0cyBoYW5kbGluZyBvZiBweXRob24gbW9kdWxlIGZpbGVzIChhcyBvcHBvc2VkIHRvIHN0cmFpZ2h0Cit0ZXh0IGZpbGVzKS4KKworICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKyAgICA+Pj4gd2l0aCBzY3JpcHRfaGVscGVyLnRlbXBfZGlyKCkgYXMgdG1wZGlyOgorICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbXlmaWxlLmRvYycpCisgICAgLi4uICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnVGhpcyBpcyBhbm90aGVyIHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWJjZGVmIlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgiICAgJ2EuLi5mJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+ICJhamttbCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4ubCdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgZm4yID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZTIucHknKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuMiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdkZWYgdGVzdF9mdW5jKCk6XG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBcIlwiXCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFRoaXMgaXMgc2ltcGxlIHB5dGhvbiB0ZXN0IGZ1bmN0aW9uLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgID4+PiAxICsgMVxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gImFiYyAgIGRlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICAgICAnYWJjIGRlZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIlxuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgaW1wb3J0IHNodXRpbAorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMiwgb3V0MiwgZXJyMiA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMywgb3V0MywgZXJyMyA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgcmM0LCBvdXQ0LCBlcnI0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNSwgb3V0NSwgZXJyNSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLXYnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorCitPdXIgZmlyc3QgdGVzdCBydW4gd2lsbCBzaG93IHRoZSBlcnJvcnMgZnJvbSB0aGUgZmlyc3QgZmlsZSAoZG9jdGVzdCBzdG9wcyBpZiBhCitmaWxlIGhhcyBlcnJvcnMpLiAgTm90ZSB0aGF0IGRvY3Rlc3QgdGVzdC1ydW4gZXJyb3Igb3V0cHV0IGFwcGVhcnMgb24gc3Rkb3V0LAorbm90IHN0ZGVycjoKKworICAgID4+PiByYzEsIGVycjEKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0MSkpICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDQsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFiY2RlZiIKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgJ2EuLi5mJworICAgIEdvdDoKKyAgICAgICAgJ2FiY2RlZicKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNiwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4ubCcKKyAgICBHb3Q6CisgICAgICAgICdhamttbCcKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgMSBpdGVtcyBoYWQgZmFpbHVyZXM6CisgICAgICAgMiBvZiAgIDMgaW4gbXlmaWxlLmRvYworICAgICoqKlRlc3QgRmFpbGVkKioqIDIgZmFpbHVyZXMuCisKK1dpdGggLW8gRUxMSVBTSVMgc3BlY2lmaWVkLCB0aGUgc2Vjb25kIHJ1biwgYWdhaW5zdCBqdXN0IHRoZSBmaXJzdCBmaWxlLCBzaG91bGQKK3Byb2R1Y2Ugbm8gZXJyb3JzLCBhbmQgd2l0aCAtbyBOT1JNQUxJWkVfV0hJVEVTUEFDRSBhbHNvIHNwZWNpZmllZCwgbmVpdGhlcgorc2hvdWxkIHRoZSB0aGlyZCwgd2hpY2ggcmFuIGFnYWluc3QgYm90aCBmaWxlczoKKworICAgID4+PiByYzIsIG91dDIsIGVycjIKKyAgICAoMCwgYicnLCBiJycpCisgICAgPj4+IHJjMywgb3V0MywgZXJyMworICAgICgwLCBiJycsIGInJykKKworVGhlIGZvdXJ0aCBydW4gdXNlcyBGQUlMX0ZBU1QsIHNvIHdlIHNob3VsZCBzZWUgb25seSBvbmUgZXJyb3I6CisKKyAgICA+Pj4gcmM0LCBlcnI0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDQpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDEgb2YgICAyIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorCitUaGUgZmlmdGggdGVzdCB1c2VzIHZlcmJvc2Ugd2l0aCB0aGUgdHdvIG9wdGlvbnMsIHNvIHdlIHNob3VsZCBnZXQgdmVyYm9zZQorc3VjY2VzcyBvdXRwdXQgZm9yIHRoZSB0ZXN0cyBpbiBib3RoIGZpbGVzOgorCisgICAgPj4+IHJjNSwgZXJyNQorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ1KSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmYnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhamttbCIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhLi4ubCcKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAzIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAzIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMyBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImFiYyAgIGRlZiIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhYmMgZGVmJworICAgIG9rCisgICAgMSBpdGVtcyBoYWQgbm8gdGVzdHM6CisgICAgICAgIG15ZmlsZTIKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUyLnRlc3RfZnVuYworICAgIDIgdGVzdHMgaW4gMiBpdGVtcy4KKyAgICAyIHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisKK1dlIHNob3VsZCBhbHNvIGNoZWNrIHNvbWUgdHlwaWNhbCBlcnJvciBjYXNlcy4KKworSW52YWxpZCBmaWxlIG5hbWU6CisKKyAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgRmlsZU5vdEZvdW5kRXJyb3I6IFtFcnJubyAuLi5dIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdub3N1Y2hmaWxlJworCitJbnZhbGlkIGRvY3Rlc3Qgb3B0aW9uOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ25vc3VjaG9wdGlvbicsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMiwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgdXNhZ2UuLi5pbnZhbGlkLi4ubm9zdWNob3B0aW9uLi4uCisKKyIiIgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNYWluCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDg4OTZlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlbWFpbAogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgpAQCAtNDIsNiArNDMsOCBAQAogICAgICMgaGVyZSB3ZSBtYWtlIG1pbmltYWwgY2hhbmdlcyBpbiB0aGUgdGVzdF9lbWFpbCB0ZXN0cyBjb21wYXJlZCB0byB0aGVpcgogICAgICMgcHJlLTMuMyBzdGF0ZS4KICAgICBwb2xpY3kgPSBjb21wYXQzMgorICAgICMgTGlrZXdpc2UsIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugb2JqZWN0IGlzIE1lc3NhZ2UuCisgICAgbWVzc2FnZSA9IE1lc3NhZ2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCkBAIC01NCwxMSArNTcsMjMgQEAKICAgICAgICAgd2l0aCBvcGVuZmlsZShmaWxlbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIHBvbGljeT1zZWxmLnBvbGljeSkKIAotICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9TWVzc2FnZSwgcG9saWN5PU5vbmUpOgorICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9Tm9uZSwgcG9saWN5PU5vbmUpOgogICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5CisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UKICAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoc3RyaW5nLCBtZXNzYWdlLCBwb2xpY3k9cG9saWN5KQogCisgICAgZGVmIF9ieXRlc19tc2coc2VsZiwgYnl0ZXN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQorICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKGJ5dGVzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCisKKyAgICBkZWYgX21ha2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kpCisKICAgICBkZWYgX2J5dGVzX3JlcHIoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBbcmVwcih4KSBmb3IgeCBpbiBiLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSldCiAKQEAgLTEyMyw2ICsxMzgsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCBjZDRmNzU3Li41N2YxMmFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0yNDksMTUgKzI0OSw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdUTycsIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBlcSh0ZXh0LCBzdHIobXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzdHIobXNnKSkKICAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCi0gICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmdfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19zdHJpbmcocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlcyhtc2cpKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyh1bml4ZnJvbT1UcnVlKQorICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KGInXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aChiJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidcbicuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyhwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihzLHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbHJlcHIsIHMuZ2V0dmFsdWUoKSkKIAogICAgICMgdGVzdF9oZWFkZXJyZWdpc3RyeS5UZXN0Q29udGVudFR5cGVIZWFkZXIuYmFkX3BhcmFtcwogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQppbmRleCBmODI5ZjgzLi5mMmRmMzcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CkBAIC02NjEsNyArNjYxLDcgQEAKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBuYW1lPSJhc2NpaV9pc190aGVfZGVmYXVsdCInKSwKIAogICAgICAgICAncmZjMjIzMV9iYWRfY2hhcmFjdGVyX2luX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAotICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUYxJUYyJUYzIiwKICAgICAgICAgICAgICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICdwbGFpbicsCkBAIC02NjksNiArNjY5LDE4IEBACiAgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAogICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04XHVGRkZEXHVGRkZEXHVGRkZEIicpLAogCisgICAgICAgICdyZmMyMjMxX3V0Zl84X2luX3N1cHBvc2VkbHlfYXNjaWlfY2hhcnNldF9wYXJhbWV0ZXJfdmFsdWUnOiAoCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUUyJTgwJTlEIiwKKyAgICAgICAgICAgICd0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICd0ZXh0JywKKyAgICAgICAgICAgICdwbGFpbicsCisgICAgICAgICAgICB7J2NoYXJzZXQnOiAndXRmLTjigJ0nfSwKKyAgICAgICAgICAgIFtlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdF0sCisgICAgICAgICAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTjigJ0iJywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAjIFhYWDogaWYgdGhlIGFib3ZlIHdlcmUgKnJlKmZvbGRlZCwgaXQgd291bGQgZ2V0IHRhZ2dlZCBhcyB1dGYtOAorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGFzY2lpIGluIHRoZSBwYXJhbSwgc2luY2UgaXQgbm93IGNvbnRhaW5zIG5vbi1BU0NJSS4KKwogICAgICAgICAncmZjMjIzMV9lbmNvZGVkX3RoZW5fdW5lbmNvZGVkX3NlZ21lbnRzJzogKAogICAgICAgICAgICAgKCdhcHBsaWNhdGlvbi94LWZvbzsnCiAgICAgICAgICAgICAgICAgJ1x0bmFtZSowKj0idXMtYXNjaWlcJ2VuLXVzXCdNeSI7JwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQppbmRleCA4Y2MzZjgwLi5lMGViYjhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQpAQCAtMSw2ICsxLDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXh0d3JhcAogZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Ci1mcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0Citmcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZSwgcGFyYW1ldGVyaXplCisKKworIyBIZWxwZXIuCitkZWYgZmlyc3QoaXRlcmFibGUpOgorICAgIHJldHVybiBuZXh0KGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9uZSwgaXRlcmFibGUpLCBOb25lKQogCiAKIGNsYXNzIFRlc3QoVGVzdEVtYWlsQmFzZSk6CkBAIC0xNCw1ICsyMSw3MzggQEAKICAgICAgICAgICAgIG1bJ1RvJ10gPSAneHl6QGFiYycKIAogCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlQmFzZToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHRyaXBsZSAocmVsYXRlZCwgaHRtbCwgcGxhaW4pIG9mIGluZGljZXMgaW50byB0aGUKKyAgICAjIGxpc3QgcmV0dXJuZWQgYnkgJ3dhbGsnIGNhbGxlZCBvbiBhIE1lc3NhZ2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdGhpcmQuCisgICAgIyBUaGUgaW5kaWNlcyBpbmRpY2F0ZSB3aGljaCBwYXJ0IHNob3VsZCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LXR5cGUKKyAgICAjIHdoZW4gcGFzc2VkIHRvIGdldF9ib2R5IChpZTogdGhlICJmaXJzdCIgcGFydCBvZiB0aGF0IHR5cGUgaW4gdGhlCisgICAgIyBtZXNzYWdlKS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byB0aGUgJ3dhbGsnIGxpc3QKKyAgICAjIG9mIHRoZSBhdHRhY2htZW50cyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8KKyAgICAjICdpdGVyX2F0dGFjaG1lbnRzJy4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvICd3YWxrJworICAgICMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvICdpdGVyX3BhcnRzJy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAjIGl0ZW0gcmV0dXJuZWQgYnkgJ3dhbGsnIGlzIHRoZSBNZXNzYWdlIGl0c2VsZi4KKworICAgIG1lc3NhZ2VfcGFyYW1zID0geworCisgICAgICAgICdlbXB0eV9tZXNzYWdlJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICIiKSwKKworICAgICAgICAnbm9uX21pbWVfcGxhaW4nOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCBib2R5CisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21pbWVfbm9uX3RleHQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworCisgICAgICAgICAgICAgICAgYm9ndXMgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hbHRlcm5hdGl2ZSc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdFRhQ2htZW50CisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X2lubGluZV9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogSW5MaW5lCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBSRkMgMjM4NworICAgICAgICAncmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgwLCAxLCBOb25lKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMT4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGRhdGEKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBzZWVuIGluIHRoZSB3aWxkLCBidXQKKyAgICAgICAgIyBpdCBwcm92ZXMgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IHBhcnRzIGJhc2VkIG9uICdzdGFydCcuICBUaGUKKyAgICAgICAgIyBjb250ZW50IHdvdWxkIG5vdCwgb2YgY291cnNlLCBhY3R1YWxseSB3b3JrIDopCisgICAgICAgICdyZWxhdGVkX3dpdGhfc3RhcnQnOiAoCisgICAgICAgICAgICAoMCwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWw7CisgICAgICAgICAgICAgICAgIHN0YXJ0PSI8Ym9keT4iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGluY2x1ZGU+CisKKyAgICAgICAgICAgICAgICB1c2VsZXNzIHRleHQKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8Ym9keT4KKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIDwhLS0jaW5jbHVkZSBmaWxlPSI8aW5jbHVkZT4iLS0+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKworICAgICAgICAnbWl4ZWRfYWx0ZXJuYXRpdmVfcGxhaW5fcmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgzLCA0LCAyKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdHRhY0htZW5UCisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIHN0cnVjdHVyZSBzdWdnZXN0ZWQgYnkgU3RlcGhlbiBKLiBUdXJuYnVsbC4uLm1heSBub3QgZXhpc3QvYmUKKyAgICAgICAgIyBzdXBwb3J0ZWQgaW4gdGhlIHdpbGQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgaXQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWwnOiAoCisgICAgICAgICAgICAoMSwgNCwgMyksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgU2FtZSB0aGluZywgYnV0IHByb3Zpbmcgd2Ugb25seSBsb29rIGF0IHRoZSByb290IHBhcnQsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSBpZiB0aGVyZSBpc24ndCBhbnkgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCBpcywgdGhpcyBpcyBhCisgICAgICAgICMgYnJva2VuIHJlbGF0ZWQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWxfd3Jvbmdfb3JkZXInOiAoCisgICAgICAgICAgICAoMSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21peGVkX3RleHRfbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBZb3VyIG1lc3NhZ2UgaGFzIGJvdW5jZWQsIHNlci4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAgfQorCisgICAgZGVmIG1lc3NhZ2VfYXNfZ2V0X2JvZHkoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbTm9uZSBpZiBuIGlzIE5vbmUgZWxzZSBhbGxwYXJ0c1tuXSBmb3IgbiBpbiBib2R5X3BhcnRzXQorICAgICAgICByZWxhdGVkID0gMDsgaHRtbCA9IDE7IHBsYWluID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkoKSwgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcmVsYXRlZDpodG1sKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcmVsYXRlZF0sIGV4cGVjdGVkW3BsYWluXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6cGxhaW4rMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydyZWxhdGVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydodG1sJ10pLCBleHBlY3RlZFtodG1sXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncGxhaW4nXSksIGV4cGVjdGVkW3BsYWluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtwbGFpbjpodG1sLTE6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcGxhaW5dLCBleHBlY3RlZFtyZWxhdGVkXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkWzo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtodG1sXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcGxhaW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXV0pKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9hdHRhY2htZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGF0dGFjaG1lbnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIGF0dGFjaG1lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX2F0dGFjaG1lbnRzKCkpLCBhdHRhY2htZW50cykKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfcGFydHMoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgcGFydHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gcGFydHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIHBhcnRzKQorCisgICAgY2xhc3MgX1Rlc3RDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZywgYXJncywga3cKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua3cgPSBrdworCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9c2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkpCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIG0uc2V0X2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgIyBvdXRjb21lIGlzIHdoZXRoZXIgeHh4X21ldGhvZCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBlcnJvciB3aGVuIGNhbGxlZAorICAgICMgb24gbXVsdGlwYXJ0L3N1YnR5cGUuICBCbGFuayBvdXRjb21lIG1lYW5zIGl0IGRlcGVuZHMgb24geHh4IChhZGQKKyAgICAjIHN1Y2NlZWRzLCBtYWtlIHJhaXNlcykuICBOb3RlOiAnbm9uZScgbWVhbnMgdGhlcmUgYXJlIGNvbnRlbnQtdHlwZQorICAgICMgaGVhZGVycyBidXQgcGF5bG9hZCBpcyBOb25lLi4udGhpcyBoYXBwZW5pbmcgaW4gcHJhY3RpY2Ugd291bGQgYmUgdmVyeQorICAgICMgdW51c3VhbCwgc28gdHJlYXRpbmcgaXQgYXMgaWYgdGhlcmUgd2VyZSBjb250ZW50IHNlZW1zIHJlYXNvbmFibGUuCisgICAgIyAgICBtZXRob2QgICAgICAgICAgc3VidHlwZSAgICAgICAgICAgb3V0Y29tZQorICAgIHN1YnR5cGVfcGFyYW1zID0gKAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdyZWxhdGVkJywgICAgICAgICcnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAncmFpc2VzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdhbHRlcm5hdGl2ZScsICAgICcnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ21peGVkJywgICAgICAgICAgJycpLAorICAgICAgICApCisKKyAgICBkZWYgX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc2VsZiwgc3VidHlwZSk6CisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBwYXlsb2FkID0gTm9uZQorICAgICAgICBtc2dfaGVhZGVycyA9ICBbCisgICAgICAgICAgICAoJ1RvJywgJ2Zvb0BiYXIuY29tJyksCisgICAgICAgICAgICAoJ0Zyb20nLCAnYmFyQGZvby5jb20nKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICAoJ2NvbnRlbnQtc2hhZG93JywgJ0xvZ3J1cycpLAorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVJhbmRvbS1IZWFkZXInLCAnQ29yd2luJykpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgcGF5bG9hZCA9ICcnCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgbS5zZXRfcGF5bG9hZCgnJykKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ211bHRpcGFydC8nICsgc3VidHlwZSkpCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtVHJ1bXAnLCAnUmFuZG9tJykpCisgICAgICAgIG0uc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgbVtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBtLCBtc2dfaGVhZGVycywgcGF5bG9hZAorCisgICAgZGVmIF9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKHNlbGYsIG0sIG1ldGhvZF9uYW1lLCBzdWJ0eXBlLCBtZXRob2QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgZXhjX3RleHQgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4Y190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZF9uYW1lLCBleGNfdGV4dCkKKworICAgIGRlZiBfY2hlY2tfbWFrZV9tdWx0aXBhcnQoc2VsZiwgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgY291bnQrMSkgIyArMSBmb3IgbmV3IENvbnRlbnQtVHlwZQorICAgICAgICBwYXJ0ID0gbmV4dChtLml0ZXJfcGFydHMoKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJ0KSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgbWFrZV9tZXRob2QgPSAnbWFrZV8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgbWFrZV9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBtYWtlX21ldGhvZCkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19oZWFkZXJzICsgWygnQ29udGVudC1UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvJyttZXRob2QpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Vfd2l0aF9ib3VuZGFyeShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICAjIERvaW5nIGFsbCB2YXJpYXRpb24gaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuLi4KKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKGJvdW5kYXJ5PSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib3VuZGFyeSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3BvbGljeV9vbl9wYXJ0X21hZGVfYnlfbWFrZV9jb21lc19mcm9tX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdtYWtlX3JlbGF0ZWQnLCAnbWFrZV9hbHRlcm5hdGl2ZScsICdtYWtlX21peGVkJyk6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9J2ZvbycpKQorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkucG9saWN5LmNvbnRlbnRfbWFuYWdlciwgJ2ZvbycpCisKKyAgICBjbGFzcyBfVGVzdFNldENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoY29udGVudCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX2FkZChzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBhZGRfbWV0aG9kID0gJ2FkZF9hdHRhY2htZW50JyBpZiBtZXRob2Q9PSdtaXhlZCcgZWxzZSAnYWRkXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSA9PSAncmFpc2VzJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBhZGRfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgYWRkX21ldGhvZCkoJ3Rlc3QnLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBtZXRob2QgPT0gc3VidHlwZSBvciBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgJ3Rlc3QnKQorICAgICAgICBpZiBtZXRob2Q9PSdtaXhlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorICAgICAgICBlbGlmIG1ldGhvZD09J3JlbGF0ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2UgZG9uJ3QgZ3Vlc3MuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBjbGFzcyBfVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29udGVudF9tYW5hZ2VyX2Zvcl9hZGRfY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkpCisgICAgICAgIGZvciBtZXRob2QgaW4gKCdhZGRfcmVsYXRlZCcsICdhZGRfYWx0ZXJuYXRpdmUnLCAnYWRkX2F0dGFjaG1lbnQnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBhcjoKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhci5leGNlcHRpb24pLCAndGVzdCcpCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcihzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgbS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVtcygpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcl9jb250ZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzID0gW2ggZm9yIGggaW4gbS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIG0uY2xlYXJfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLmtleXMoKSksIGV4cGVjdGVkX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdpbmxpbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0F0VGFjaE1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorCisKKworY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfYWRkc19NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworICAgIGNsYXNzIF9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2R1cGxpY2F0ZV9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX01JTUVfVmVyc2lvbl9hZGRpbmdfQ00oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKworY2xhc3MgVGVzdE1JTUVQYXJ0KFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICAjIERvaW5nIHRoZSBmdWxsIHRlc3QgcnVuIGhlcmUgbWF5IHNlZW0gYSBiaXQgcmVkdW5kYW50LCBzaW5jZSB0aGUgdHdvCisgICAgIyBjbGFzc2VzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLiAgQnV0IHdoYXQgaWYgdGhleSBkcmlmdCBhcGFydD8gIFNvIHdlIGRvCisgICAgIyB0aGUgZnVsbCB0ZXN0cyBzbyB0aGF0IGFueSBmdXR1cmUgZHJpZnQgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKyAgICBtZXNzYWdlID0gTUlNRVBhcnQKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2FkZF9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCA5ODNiZDQ5Li4wNmFkNWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAogICAgICAgICAnaGVhZGVyX2ZhY3RvcnknOiAgICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9mYWN0b3J5LAogICAgICAgICAncmVmb2xkX3NvdXJjZSc6ICAgICAgICAgICAgJ2xvbmcnLAorICAgICAgICAnY29udGVudF9tYW5hZ2VyJzogICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlciwKICAgICAgICAgfSkKIAogICAgICMgRm9yIGVhY2ggcG9saWN5IHVuZGVyIHRlc3QsIHdlIGdpdmUgaGVyZSB3aGF0IHdlIGV4cGVjdCB0aGUgZGVmYXVsdHMgdG8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKaW5kZXggNTQ0YjFiYi4uMTljZjY0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMgUHJldmVudCB0aGlzIHRlc3QgZnJvbSBydW5uaW5nIGluIHRoZSBQeXRob24gZGlzdHJvCiB0cnk6CiAgICAgb3BlbmZpbGUoJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSBUZXN0U2tpcHBlZAogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmMDBmZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5CkBAIC0wLDAgKzEsMTI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCisKKworY2xhc3MgVGVzdEVuc3VyZVBpcFZlcnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmV0dXJuc192ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZXBpcC5fUElQX1ZFUlNJT04sIGVuc3VyZXBpcC52ZXJzaW9uKCkpCisKKworY2xhc3MgVGVzdEJvb3RzdHJhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9waXBfcGF0Y2ggPSB1bml0dGVzdC5tb2NrLnBhdGNoKCJlbnN1cmVwaXAuX3J1bl9waXAiKQorICAgICAgICBzZWxmLnJ1bl9waXAgPSBydW5fcGlwX3BhdGNoLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJ1bl9waXBfcGF0Y2guc3RvcCkKKworICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cyBvbiB0aGUgYWN0dWFsIG9zIG1vZHVsZQorICAgICAgICBvc19wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5vcyIpCisgICAgICAgIHBhdGNoZWRfb3MgPSBvc19wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvc19wYXRjaC5zdG9wKQorICAgICAgICBwYXRjaGVkX29zLnBhdGggPSBvcy5wYXRoCisgICAgICAgIHNlbGYub3NfZW52aXJvbiA9IHBhdGNoZWRfb3MuZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCisKKyAgICBkZWYgdGVzdF9iYXNpY19ib290c3RyYXBwaW5nKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICAgICAgYWRkaXRpb25hbF9wYXRocyA9IHNlbGYucnVuX3BpcC5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWRkaXRpb25hbF9wYXRocyksIDIpCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfcm9vdChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChyb290PSIvZm9vL2Jhci8iKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItLXJvb3QiLCAiL2Zvby9iYXIvIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXNlcihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1c2VyPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcHJlIiwgIi0tdXNlciIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF91cGdyYWRlKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHVwZ3JhZGU9VHJ1ZSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLS11cGdyYWRlIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0xKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItdiIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMihzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MikKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLXZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8zKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItdnZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3JlZ3VsYXJfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiaW5zdGFsbCIpCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfYWx0X2luc3RhbGwoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3NfZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSwgImFsdGluc3RhbGwiKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX2RlZmF1bHRfcGlwKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGRlZmF1bHRfcGlwPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkVOU1VSRVBJUF9PUFRJT05TIiwgc2VsZi5vc19lbnZpcm9uKQorCisgICAgZGVmIHRlc3RfYWx0aW5zdGFsbF9kZWZhdWx0X3BpcF9jb25mbGljdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlLCBkZWZhdWx0X3BpcD1UcnVlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YwZTVkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTMyNSBAQAoraW1wb3J0IGVudW0KK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcHlkb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bSwgRW51bU1ldGEsIHVuaXF1ZQorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMsIFBpY2tsaW5nRXJyb3IKKworIyBmb3IgcGlja2xlIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3Rvb2dlcyhFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBJbnRTdG9vZ2VzKGludCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgSW50U3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgRmxvYXRTdG9vZ2VzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxLjM5CisgICAgICAgIENVUkxZID0gMi43MgorICAgICAgICBNT0UgPSAzLjE0MjU5NgorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgRmxvYXRTdG9vZ2VzID0gZXhjCisKKyMgZm9yIHBpY2tsZSB0ZXN0IGFuZCBzdWJjbGFzcyB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgJ2FjY2VwdHMgb25seSBzdHJpbmcgdmFsdWVzJworICAgIGNsYXNzIE5hbWUoU3RyRW51bSk6CisgICAgICAgIEJERkwgPSAnR3VpZG8gdmFuIFJvc3N1bScKKyAgICAgICAgRkxVRkwgPSAnQmFycnkgV2Fyc2F3JworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgTmFtZSA9IGV4YworCit0cnk6CisgICAgUXVlc3Rpb24gPSBFbnVtKCdRdWVzdGlvbicsICd3aG8gd2hhdCB3aGVuIHdoZXJlIHdoeScsIG1vZHVsZT1fX25hbWVfXykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFF1ZXN0aW9uID0gZXhjCisKK3RyeToKKyAgICBBbnN3ZXIgPSBFbnVtKCdBbnN3ZXInLCAnaGltIHRoaXMgdGhlbiB0aGVyZSBiZWNhdXNlJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEFuc3dlciA9IGV4YworCisjIGZvciBkb2N0ZXN0cwordHJ5OgorICAgIGNsYXNzIEZydWl0KEVudW0pOgorICAgICAgICB0b21hdG8gPSAxCisgICAgICAgIGJhbmFuYSA9IDIKKyAgICAgICAgY2hlcnJ5ID0gMworZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdEhlbHBlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgX2lzX2Rlc2NyaXB0b3IsIF9pc19zdW5kZXIsIF9pc19kdW5kZXIKKworICAgIGRlZiB0ZXN0X2lzX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIGZvbzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGF0dHIgaW4gKCdfX2dldF9fJywnX19zZXRfXycsJ19fZGVsZXRlX18nKToKKyAgICAgICAgICAgIG9iaiA9IGZvbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKworICAgIGRlZiB0ZXN0X2lzX3N1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfYV8nLCAnX2FhXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfX2FfXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICBkZWYgdGVzdF9pc19kdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX19hX18nLCAnX19hYV9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZHVuZGVyKHMpKQorICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfYV8nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZHVuZGVyKHMpKQorCisKK2NsYXNzIFRlc3RFbnVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgc2VsZi5TZWFzb24gPSBTZWFzb24KKworICAgICAgICBjbGFzcyBLb25zdGFudHMoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgRSA9IDIuNzE4MjgxOAorICAgICAgICAgICAgUEkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIFRBVSA9IDIgKiBQSQorICAgICAgICBzZWxmLktvbnN0YW50cyA9IEtvbnN0YW50cworCisgICAgICAgIGNsYXNzIEdyYWRlcyhJbnRFbnVtKToKKyAgICAgICAgICAgIEEgPSA1CisgICAgICAgICAgICBCID0gNAorICAgICAgICAgICAgQyA9IDMKKyAgICAgICAgICAgIEQgPSAyCisgICAgICAgICAgICBGID0gMAorICAgICAgICBzZWxmLkdyYWRlcyA9IEdyYWRlcworCisgICAgICAgIGNsYXNzIERpcmVjdGlvbmFsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBFQVNUID0gJ2Vhc3QnCisgICAgICAgICAgICBXRVNUID0gJ3dlc3QnCisgICAgICAgICAgICBOT1JUSCA9ICdub3J0aCcKKyAgICAgICAgICAgIFNPVVRIID0gJ3NvdXRoJworICAgICAgICBzZWxmLkRpcmVjdGlvbmFsID0gRGlyZWN0aW9uYWwKKworICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCisgICAgICAgIGNsYXNzIEhvbGlkYXkoZGF0ZSwgRW51bSk6CisgICAgICAgICAgICBORVdfWUVBUiA9IDIwMTMsIDEsIDEKKyAgICAgICAgICAgIElERVNfT0ZfTUFSQ0ggPSAyMDEzLCAzLCAxNQorICAgICAgICBzZWxmLkhvbGlkYXkgPSBIb2xpZGF5CisKKyAgICBkZWYgdGVzdF9kaXJfb25fY2xhc3Moc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZXQoZGlyKFNlYXNvbikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAgICAgJ1NQUklORycsICdTVU1NRVInLCAnQVVUVU1OJywgJ1dJTlRFUiddKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rpcl9vbl9pdGVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24uV0lOVEVSKSksCisgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfd2l0aF9hZGRlZF9iZWhhdmlvcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdChFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHdvd3NlcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJXb3dzZXIhIEknbSAlcyEiICUgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdCkpLAorICAgICAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLCAndGhpcycsICd0aGVzZSddKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KGRpcihUZXN0LnRoaXMpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnd293c2VyJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoU3Rvb2dlcy5DVVJMWSkpKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0b29nZXMsIGxvYWRzKGR1bXBzKFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhJbnRTdG9vZ2VzLkNVUkxZLCBsb2FkcyhkdW1wcyhJbnRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSW50U3Rvb2dlcywgbG9hZHMoZHVtcHMoSW50U3Rvb2dlcykpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICBzZWxmLmFzc2VydElzKEZsb2F0U3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoRmxvYXRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmxvYXRTdG9vZ2VzLCBsb2FkcyhkdW1wcyhGbG9hdFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEFuc3dlciwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEFuc3dlcgorICAgICAgICBzZWxmLmFzc2VydElzKEFuc3dlci5oaW0sIGxvYWRzKGR1bXBzKEFuc3dlci5oaW0pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBbnN3ZXIsIGxvYWRzKGR1bXBzKEFuc3dlcikpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzKFF1ZXN0aW9uLndobywgbG9hZHMoZHVtcHMoUXVlc3Rpb24ud2hvKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUXVlc3Rpb24sIGxvYWRzKGR1bXBzKFF1ZXN0aW9uKSkpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKCdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicpCisgICAgICAgIGVudW0uX21ha2VfY2xhc3NfdW5waWNrbGFibGUoQmFkUGlja2xlKQorICAgICAgICBnbG9iYWxzKClbJ0JhZFBpY2tsZSddID0gQmFkUGlja2xlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoQmFkUGlja2xlKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIFNraWxsTGV2ZWwoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIG1hc3RlciA9ICd3aGF0IGlzIHRoZSBzb3VuZCBvZiBvbmUgaGFuZCBjbGFwcGluZz8nCisgICAgICAgICAgICBqb3VybmV5bWFuID0gJ3doeSBkaWQgdGhlIGNoaWNrZW4gY3Jvc3MgdGhlIHJvYWQ/JworICAgICAgICAgICAgYXBwcmVudGljZSA9ICdrbm9jaywga25vY2shJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNraWxsTGV2ZWwuYXBwcmVudGljZSwgJ2tub2NrLCBrbm9jayEnKQorCisgICAgZGVmIHRlc3RfZ2V0YXR0cl9nZXRpdGVtKHNlbGYpOgorICAgICAgICBjbGFzcyBQZXJpb2QoRW51bSk6CisgICAgICAgICAgICBtb3JuaW5nID0gMQorICAgICAgICAgICAgbm9vbiA9IDIKKyAgICAgICAgICAgIGV2ZW5pbmcgPSAzCisgICAgICAgICAgICBuaWdodCA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2QoMiksIFBlcmlvZC5ub29uKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIoUGVyaW9kLCAnbmlnaHQnKSwgUGVyaW9kLm5pZ2h0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBlcmlvZFsnbW9ybmluZyddLCBQZXJpb2QubW9ybmluZykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZHVuZGVyKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihTZWFzb24sICdfX2VxX18nKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QoU2Vhc29uKSwKKyAgICAgICAgICAgICAgICBbU2Vhc29uLlNVTU1FUiwgU2Vhc29uLldJTlRFUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLlNQUklOR10sCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWRfaXRlcmF0aW9uX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QocmV2ZXJzZWQoc2VsZi5TZWFzb24pKSwKKyAgICAgICAgICAgICAgICBbc2VsZi5TZWFzb24uV0lOVEVSLCBzZWxmLlNlYXNvbi5BVVRVTU4sIHNlbGYuU2Vhc29uLlNVTU1FUiwKKyAgICAgICAgICAgICAgICAgc2VsZi5TZWFzb24uU1BSSU5HXQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZ19saXN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgWydqdW5lJywgJ2p1bHknLCAnYXVndXN0J10pCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKAorICAgICAgICAgICAgICAgICdTdW1tZXJNb250aCcsCisgICAgICAgICAgICAgICAgKCgnanVuZScsIDEpLCAoJ2p1bHknLCAyKSwgKCdhdWd1c3QnLCAzKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KCgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcsIHR5cGU9aW50KQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBJbnRFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShOYW1lLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgTmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5hbWUuQkRGTCwgJ0d1aWRvIHZhbiBSb3NzdW0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTmFtZS5CREZMLCBOYW1lKCdHdWlkbyB2YW4gUm9zc3VtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBnZXRhdHRyKE5hbWUsICdCREZMJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBsb2FkcyhkdW1wcyhOYW1lLkJERkwpKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgICAgIHllbGxvdyA9IDYKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgY2xhc3Mgd2hhdGV2ZXIoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiByZWFsbHkoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdubywgbm90ICVzJyAlIHNlbGYudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0eXBlKHdoYXRldmVyLnJlYWxseSksIHdoYXRldmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdoYXRldmVyLnRoaXMucmVhbGx5KCksICdubywgbm90IHRoYXQnKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfaW5oZXJpdGFuY2Vfb3JkZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0sIHN0cik6CisgICAgICAgICAgICAgICAgTm90SGVyZSA9ICdlcnJvciBiZWZvcmUgdGhpcyBwb2ludCcKKworICAgIGRlZiB0ZXN0X2ludGVudW1fdHJhbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBudW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAyCisgICAgICAgICAgICB0aHJlZSA9IDMKKyAgICAgICAgY2xhc3MgbnVtZXJvKEludEVudW0pOgorICAgICAgICAgICAgdW5vID0gMQorICAgICAgICAgICAgZG9zID0gMgorICAgICAgICAgICAgdHJlcyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIub25lLCBudW1lcm8udW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci50d28sIG51bWVyby5kb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnRocmVlLCBudW1lcm8udHJlcykKKworICAgIGRlZiB0ZXN0X3dyb25nX2VudW1faW5fY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIE1vbm9jaHJvbWUsIEdlbmRlci5tYWxlKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9taXhlZF9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF9taXhlZF9lbnVtX2luX2NhbGxfMShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShJbnRFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTW9ub2Nocm9tZShHZW5kZXIuZmVtYWxlKSwgTW9ub2Nocm9tZS53aGl0ZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8yKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5tYWxlKSwgTW9ub2Nocm9tZS5ibGFjaykKKworICAgIGRlZiB0ZXN0X2ZsdWZsX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEZsdWZsbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBjbGFzcyBNYWlsTWFuT3B0aW9ucyhGbHVmbG51bSk6CisgICAgICAgICAgICBvcHRpb24xID0gMQorICAgICAgICAgICAgb3B0aW9uMiA9IDIKKyAgICAgICAgICAgIG9wdGlvbjMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KE1haWxNYW5PcHRpb25zLm9wdGlvbjEpLCAxKQorCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgb25lID0gMTAwCisgICAgICAgICAgICB0d28gPSAyMDAKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIub25lLl9tZW1iZXJfdHlwZV8sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBjbGFzcyBTdHJpbmcoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHlhcm4gPSAnc29mdCcKKyAgICAgICAgICAgIHJvcGUgPSAncm91Z2gnCisgICAgICAgICAgICB3aXJlID0gJ2hhcmQnCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLnlhcm4uX21lbWJlcl90eXBlXywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0cmluZy5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIGNsYXNzIFBsYWluKEVudW0pOgorICAgICAgICAgICAgdmFuaWxsYSA9ICd3aGl0ZScKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi52YW5pbGxhLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi5fbWVtYmVyX3R5cGVfLCBvYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19zdWNoX2VudW1fbWVtYmVyKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbG9yKDQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgQ29sb3JbJ2NoYXJ0cmV1c2UnXQorCisgICAgZGVmIHRlc3RfbmV3X3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgJXM/IiAlIHNlbGYubmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlcHIoQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgImRvbid0IHlvdSBqdXN0IGxvdmUgc2hhZGVzIG9mIGJsdWU/IiwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTXkgbmFtZSBpcyAlcy4iICUgc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIE15SW50RW51bShpbnQsIE15RW51bSk6CisgICAgICAgICAgICB0aGlzID0gMQorICAgICAgICAgICAgdGhhdCA9IDIKKyAgICAgICAgICAgIHRoZW90aGVyID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTXlJbnRFbnVtLnRoYXQpLCAiTXkgbmFtZSBpcyB0aGF0LiIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9taXhpbl9tcm8oc2VsZik6CisgICAgICAgIGNsYXNzIGF1dG9fZW51bSh0eXBlKEVudW0pKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgICAgICAgICAgdGVtcCA9IHR5cGUoY2xhc3NkaWN0KSgpCisgICAgICAgICAgICAgICAgbmFtZXMgPSBzZXQoY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXMpCisgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdiA9IGNsYXNzZGljdFtrXQorICAgICAgICAgICAgICAgICAgICBpZiB2IGlzIEVsbGlwc2lzOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB2CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdID0gdgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGNsYXNzZGljdC5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKGF1dG9fZW51bSwgbWV0YWNscykuX19uZXdfXygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFjbHMsIGNscywgYmFzZXMsIHRlbXApCisKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcmVkRW51bShFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBdXRvSW50RW51bShJbnRFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0QXV0b051bWJlcihBdXRvTnVtYmVyZWRFbnVtKToKKyAgICAgICAgICAgIGEgPSAuLi4KKyAgICAgICAgICAgIGIgPSAzCisgICAgICAgICAgICBjID0gLi4uCisKKyAgICAgICAgY2xhc3MgVGVzdEF1dG9JbnQoQXV0b0ludEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9nZXRuZXdhcmdzKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZHMoZHVtcHMoTkk1KSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoTkVJLnkpKSwgTkVJLnkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhvdXRfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKE5FSS54KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoTkVJKQorCisgICAgZGVmIHRlc3RfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFNvbWVUdXBsZSh0dXBsZSwgRW51bSk6CisgICAgICAgICAgICBmaXJzdCA9ICgxLCAnZm9yIHRoZSBtb25leScpCisgICAgICAgICAgICBzZWNvbmQgPSAoMiwgJ2ZvciB0aGUgc2hvdycpCisgICAgICAgICAgICB0aGlyZCA9ICgzLCAnZm9yIHRoZSBtdXNpYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShTb21lVHVwbGUuZmlyc3QpLCBTb21lVHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShTb21lVHVwbGUuc2Vjb25kLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lVHVwbGUudGhpcmQsICgzLCAnZm9yIHRoZSBtdXNpYycpKQorICAgICAgICBnbG9iYWxzKClbJ1NvbWVUdXBsZSddID0gU29tZVR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoU29tZVR1cGxlLmZpcnN0KSksIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0bWVtYmVycyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gZGljdCgoCisgICAgICAgICAgICAgICAgKCdfX2NsYXNzX18nLCBFbnVtTWV0YSksCisgICAgICAgICAgICAgICAgKCdfX2RvY19fJywgTm9uZSksCisgICAgICAgICAgICAgICAgKCdfX21lbWJlcnNfXycsIHNlbGYuQ29sb3IuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgICgnX19tb2R1bGVfXycsIF9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAoJ2JsdWUnLCBzZWxmLkNvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICgnZ3JlZW4nLCBzZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAoJ25hbWUnLCBFbnVtLl9fZGljdF9fWyduYW1lJ10pLAorICAgICAgICAgICAgICAgICgncmVkJywgc2VsZi5Db2xvci5yZWQpLAorICAgICAgICAgICAgICAgICgndmFsdWUnLCBFbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICByZXN1bHQgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMua2V5cygpLCByZXN1bHQua2V5cygpKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICAgICAgaWYgcmVzdWx0W2tdICE9IHZhbHVlc1trXToKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiAgICAga2V5OiAlc1xuICByZXN1bHQ6ICVzXG5leHBlY3RlZDogJXNcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICgnPScgKiA3NSwgaywgcmVzdWx0W2tdLCB2YWx1ZXNba10sICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZnJvbSBpbnNwZWN0IGltcG9ydCBBdHRyaWJ1dGUKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2NsYXNzX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9b2JqZWN0LCBvYmplY3Q9RW51bU1ldGEpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2RvY19fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1Ob25lKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tZW1iZXJzX18nLCBraW5kPSdwcm9wZXJ0eScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW1NZXRhLCBvYmplY3Q9RW51bU1ldGEuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21vZHVsZV9fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1fX25hbWVfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2JsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2dyZWVuJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ncmVkJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J25hbWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J3ZhbHVlJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW0sIG9iamVjdD1FbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHZhbHVlcy5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICByZXN1bHQgPSBsaXN0KGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZi5Db2xvcikpCisgICAgICAgIHJlc3VsdC5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiwgciBpbiB6aXAodmFsdWVzLCByZXN1bHQpOgorICAgICAgICAgICAgaWYgciAhPSB2OgorICAgICAgICAgICAgICAgIHByaW50KCdcbiVzXG4lc1xuJXNcbiVzXG4nICUgKCc9JyAqIDc1LCByLCB2LCAnPScgKiA3NSksIHNlcD0nJykKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkLCBzZWUgcHJpbnQgYWJvdmUiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCA0YWYyMTdiLi44NzQyYWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiAKQEAgLTE2OCwxNSArMTY5LDEyIEBACiAgICAgICAgIHggPSByYW5nZSgxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgotICAgICAgICAjIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgYW4gaW50ZXJmYWNlIHJlcXVpcmVtZW50Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgogICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgdHVwbGUoJ2hlbGxvJyksIGxpc3QoJ2hlbGxvJyksIHJhbmdlKDUpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldmVyc2VkKHMpKSwgbGVuKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXZlcnNlZChzKSksIGxlbihzKSkKICAgICAgICAgICAgIHIgPSByZXZlcnNlZChzKQogICAgICAgICAgICAgbGlzdChyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHIpLCAwKQogICAgICAgICBjbGFzcyBTZXFXaXRoV2VpcmRMZW46CiAgICAgICAgICAgICBjYWxsZWQgPSBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CkBAIC0xODcsNyArMTg1LDcgQEAKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CiAgICAgICAgIHIgPSByZXZlcnNlZChTZXFXaXRoV2VpcmRMZW4oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxlbiwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIG9wZXJhdG9yLmxlbmd0aF9oaW50LCByKQogCiAKICAgICBkZWYgdGVzdF9nYyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IDdmOTU0N2YuLjY0NTlmYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMjEsMTAgKzIxLDExIEBACiAiIiIKIFRlc3RzIGZvciBlcG9sbCB3cmFwcGVyLgogIiIiCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KLWltcG9ydCB0aW1lCitpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0zMyw3ICszNCw3IEBACiAKIHRyeToKICAgICBzZWxlY3QuZXBvbGwoKQotZXhjZXB0IElPRXJyb3IgYXMgZToKK2V4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CiAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQogICAgIHJhaXNlCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKQEAgLTg3LDYgKzg4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBbJ2ZvbyddKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwge30pCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZWN0LmVwb2xsKDE2KSBhcyBlcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcC5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCisKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQogCkBAIC0xMTUsMTIgKzEyMywxMiBAQAogICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBmaWxlIGRlc2NyaXB0b3IgY2Fubm90IGJlIGEgbmVnYXRpdmUgaW50ZWdlciAoLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5yZWdpc3RlciwgLTEsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICAjIElPRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCisgICAgICAgICAgICAjIE9TRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCiAgICAgICAgICAgICAjIHJlZ2lzdGVyaW5nIHR3aWNlIGFsc28gcmFpc2VzIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZXAuY2xvc2UoKQpAQCAtMTQyLDcgKzE1MCw3IEBACiAgICAgICAgIGVwLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXAyLnBvbGwoMSwgNCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQkFERiwgZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXBvbGwgb24gY2xvc2VkIGZkIGRpZG4ndCByYWlzZSBFQkFERiIpCkBAIC0yMTgsNiArMjI2LDM2IEBACiAgICAgICAgIHNlcnZlci5jbG9zZSgpCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoZmQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LkVQT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwb2xsLnBvbGwsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucmVnaXN0ZXIsIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGVwb2xsID0gc2VsZWN0LmVwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShlcG9sbC5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCAxYWQ3Zjk3Li5mMDg1MWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwgbm9fdHJhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LCBydW5fdW5pdHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RyYWNpbmcsIHVubGluaykKIAogY2xhc3MgTmFpdmVFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0yNDQsMjIgKzI0NCwyMiBAQAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsIDEpfSksCiAgICAgICAgICAgICAoU3lzdGVtRXhpdCwgKCdmb28nLCksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnY29kZScgOiAnZm9vJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4Jyl9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJyksCiAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZXJybm8nIDogJ2Vycm5vU3RyJywKICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoMSwgJ3N0ckVycm9yU3RyJyksICdlcnJubycgOiAxLAogICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKICAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCksIHsnbXNnJyA6IE5vbmUsICd0ZXh0JyA6IE5vbmUsCkBAIC00MDksNyArNDA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC05NDcsMTMgKzk0NywxMSBAQAogCiAgICAgZGVmIHRlc3Rfbm9uX3N0cl9hcmd1bWVudChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU3NzgKLSAgICAgICAgYXJnID0gYidhYmMnCi0gICAgICAgIGV4YyA9IEltcG9ydEVycm9yKGFyZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBCeXRlc1dhcm5pbmcpLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIGFyZyA9IGInYWJjJworICAgICAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgSW1wb3J0RXJyb3JUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmF1bHRoYW5kbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKaW5kZXggNzcwZTcwYy4uZWJkOTllZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKQEAgLTE5LDE4ICsxOSw2IEBACiAKIFRJTUVPVVQgPSAwLjUKIAotdHJ5OgotICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IHNldHJsaW1pdCwgUkxJTUlUX0NPUkUsIGVycm9yIGFzIHJlc291cmNlX2Vycm9yCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcHJlcGFyZV9zdWJwcm9jZXNzID0gTm9uZQotZWxzZToKLSAgICBkZWYgcHJlcGFyZV9zdWJwcm9jZXNzKCk6Ci0gICAgICAgICMgZG9uJ3QgY3JlYXRlIGNvcmUgZmlsZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZV9lcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0KIGRlZiBleHBlY3RlZF90cmFjZWJhY2sobGluZW5vMSwgbGluZW5vMiwgaGVhZGVyLCBtaW5fY291bnQ9MSk6CiAgICAgcmVnZXggPSBoZWFkZXIKICAgICByZWdleCArPSAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY1xuJyAlIGxpbmVubzEKQEAgLTU5LDEwICs0Nyw4IEBACiAgICAgICAgIGJ1aWxkLCBhbmQgcmVwbGFjZSAiQ3VycmVudCB0aHJlYWQgMHgwMDAwN2Y4ZDhmYmQ5NzAwIiBieSAiQ3VycmVudAogICAgICAgICB0aHJlYWQgWFhYIi4KICAgICAgICAgIiIiCi0gICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBpZiBwcmVwYXJlX3N1YnByb2Nlc3M6Ci0gICAgICAgICAgICBvcHRpb25zWydwcmVleGVjX2ZuJ10gPSBwcmVwYXJlX3N1YnByb2Nlc3MKLSAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsICoqb3B0aW9ucykKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLWMnLCBjb2RlKQogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQogICAgICAgICBleGl0Y29kZSA9IHByb2Nlc3Mud2FpdCgpCiAgICAgICAgIG91dHB1dCA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihzdGRvdXQpCkBAIC04Niw5ICs3Miw5IEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYJworICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKKyAgICAgICAgICAgIGhlYWRlciA9ICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIHJlZ2V4ID0gIiIiCiBeRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KIApAQCAtMTAxLDggKzg3LDcgQEAKICAgICAgICAgICAgIGhlYWRlcj1yZS5lc2NhcGUoaGVhZGVyKSkKICAgICAgICAgaWYgb3RoZXJfcmVnZXg6CiAgICAgICAgICAgICByZWdleCArPSAnfCcgKyBvdGhlcl9yZWdleAotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCisgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCiAgICAgICAgIG91dHB1dCA9ICdcbicuam9pbihvdXRwdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LCByZWdleCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChleGl0Y29kZSwgMCkKQEAgLTIzMiw4ICsyMTcsNyBAQAogZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKICIiIi5zdHJpcCgpCiAgICAgICAgIG5vdF9leHBlY3RlZCA9ICdGYXRhbCBQeXRob24gZXJyb3InCi0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgc3RkZXJyLCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlKQorICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCiAgICAgICAgIHN0ZGVyID0gJ1xuJy5qb2luKHN0ZGVycikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9leHBlY3RlZCBub3QgaW4gc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgIiVyIGlzIHByZXNlbnQgaW4gJXIiICUgKG5vdF9leHBlY3RlZCwgc3RkZXJyKSkKQEAgLTI2NCwxNiArMjQ4LDM0IEBACiAgICAgZGVmIHRlc3RfZGlzYWJsZWRfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgIyBCeSBkZWZhdWx0LCB0aGUgbW9kdWxlIHNob3VsZCBiZSBkaXNhYmxlZAogICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgotICAgICAgICByYywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiRmFsc2UiKQorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnLCAnLWMnLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCiAKICAgICBkZWYgdGVzdF9zeXNfeG9wdGlvbnMoc2VsZik6CiAgICAgICAgICMgVGVzdCBweXRob24gLVggZmF1bHRoYW5kbGVyCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiVHJ1ZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItRSIsICItWCIsICJmYXVsdGhhbmRsZXIiLCAiLWMiLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKKworICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgZW1wdHkgZW52IHZhcgorICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJycKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZSBmYXVsdGhhbmRsZXIKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncywgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGIiRmFsc2UiKQorCisgICAgICAgICMgbm9uLWVtcHR5IGVudiB2YXIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WydQWVRIT05GQVVMVEhBTkRMRVInXSA9ICcxJworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKIAogICAgIGRlZiBjaGVja19kdW1wX3RyYWNlYmFjayhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIgpAQCAtMzA0LDcgKzMwNiw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsaW5lbm8gPSA4CiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAlcyBpbiBmdW5jQicgJSBsaW5lbm8sCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTEgaW4gZnVuY0EnLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDEzIGluIDxtb2R1bGU+JwpAQCAtMzM2LDcgKzMzOCw3IEBACiAgICAgICAgICAgICBmdW5jX25hbWU9ZnVuY19uYW1lLAogICAgICAgICApCiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA0IGluICVzJyAlIHRydW5jYXRlZCwKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA2IGluIDxtb2R1bGU+JwogICAgICAgICBdCkBAIC0zOTAsMTMgKzM5MiwxMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gMTAKICAgICAgICAgcmVnZXggPSAiIiIKLV5UaHJlYWQgMHhbMC05YS1mXSs6CiteVGhyZWFkIDB4WzAtOWEtZl0rIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogKD86ICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIFtfYS16XSsKICl7ezEsM319ICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjMgaW4gcnVuCiAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcF9pbm5lcgogICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXAKIAotQ3VycmVudCB0aHJlYWQgWFhYOgorQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUge2xpbmVub30gaW4gZHVtcAogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjggaW4gPG1vZHVsZT4kCiAiIiIuc3RyaXAoKQpAQCAtNDU5LDcgKzQ2MSw3IEBACiAgICAgICAgICAgICBjb3VudCA9IGxvb3BzCiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgotICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKzpcbicgJSB0aW1lb3V0X3N0cgorICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01NjEsOSArNTYzLDkgQEAKICAgICAgICAgdHJhY2UgPSAnXG4nLmpvaW4odHJhY2UpCiAgICAgICAgIGlmIG5vdCB1bnJlZ2lzdGVyOgogICAgICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnVHJhY2ViYWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1N0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soNywgMjgsIHJlZ2V4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01OTAsOCArNTkyLDUgQEAKICAgICAgICAgc2VsZi5jaGVja19yZWdpc3RlcihjaGFpbj1UcnVlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGYXVsdEhhbmRsZXJUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggYjhjZGEyZi4uYzgxNmQ5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0xLDcgKzEsNCBAQAogIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCi0KLU9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCi0KICIiIgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgb3MKQEAgLTM5LDggKzM2LDYgQEAKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygncXFpaGhpJywgMCwgMCwgMCwgZmNudGwuRl9XUkxDSywgMCwgMCkKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2FpeDMnLCAnYWl4NCcsICdocC11eEInLCAndW5peHdhcmU3J106CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hobGxsaWknLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwLCAwKQotICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnb3MyZW14J106Ci0gICAgICAgIGxvY2tkYXRhID0gTm9uZQogICAgIGVsc2U6CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hoJytzdGFydF9sZW4rJ2hoJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCkKICAgICBpZiBsb2NrZGF0YToKQEAgLTY2LDE4ICs2MSwyMCBAQAogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9maWxlX2Rlc2NyaXB0b3Ioc2VsZik6CiAgICAgICAgICMgYWdhaW4sIGJ1dCBwYXNzIHRoZSBmaWxlIHJhdGhlciB0aGFuIG51bWVyaWMgZGVzY3JpcHRvcgogICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2JhZF9maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDc2YjE2OTQuLmQ1NGU5NzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmNsb3NlZCkKIAogICAgICAgICBpZiBoYXNhdHRyKGYsICJyZWFkaW50byIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKElPRXJyb3IsIFR5cGVFcnJvciksIGYucmVhZGludG8sICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIFR5cGVFcnJvciksIGYucmVhZGludG8sICIiKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKCpzeXMuZXhjX2luZm8oKSksIE5vbmUpCiAKICAgICBkZWYgdGVzdFJlYWRXaGVuV3JpdGluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuZi5yZWFkKQogCiBjbGFzcyBDQXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgb3BlbiA9IGlvLm9wZW4KQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CmluZGV4IDA5NTk5NzkuLmM3Y2IzZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKQEAgLTEsNCArMSwzIEBACi0KIGltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTQwLDE1ICszOSwyNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5kaXIpLAogICAgICAgICAgICAgICAgICAgICAiRmlsZSBhbmQgZGlyZWN0b3J5IGNvbXBhcmUgYXMgZXF1YWwiKQogCisgICAgZGVmIHRlc3RfY2FjaGVfY2xlYXIoc2VsZik6CisgICAgICAgIGZpcnN0X2NvbXBhcmUgPSBmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKQorICAgICAgICBzZWNvbmRfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIGZpbGVjbXAuY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVjbXAuX2NhY2hlKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhY2hlIG5vdCBjbGVhcmVkIGFmdGVyIGNhbGxpbmcgY2xlYXJfY2FjaGUiKQorCiBjbGFzcyBEaXJDb21wYXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2RpcicpCiAgICAgICAgIHNlbGYuZGlyX3NhbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLXNhbWUnKQogICAgICAgICBzZWxmLmRpcl9kaWZmID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1kaWZmJykKKworICAgICAgICAjIEFub3RoZXIgZGlyIGlzIGNyZWF0ZWQgdW5kZXIgZGlyX3NhbWUsIGJ1dCBpdCBoYXMgYSBuYW1lIGZyb20gdGhlCisgICAgICAgICMgaWdub3JlZCBsaXN0IHNvIGl0IHNob3VsZCBub3QgYWZmZWN0IHRlc3RpbmcgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5kaXJfaWdub3JlZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9zYW1lLCAnLmhnJykKKwogICAgICAgICBzZWxmLmNhc2VpbnNlbnNpdGl2ZSA9IG9zLnBhdGgubm9ybWNhc2UoJ0EnKSA9PSBvcy5wYXRoLm5vcm1jYXNlKCdhJykKICAgICAgICAgZGF0YSA9ICdDb250ZW50cyBvZiBmaWxlIGdvIGhlcmUuXG4nCi0gICAgICAgIGZvciBkaXIgaW4gW3NlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmXToKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYsIHNlbGYuZGlyX2lnbm9yZWQpOgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIsIFRydWUpCiAgICAgICAgICAgICBvcy5ta2RpcihkaXIpCiAgICAgICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZSBhbmQgZGlyIGlzIHNlbGYuZGlyX3NhbWU6CkBAIC02NCw5ICs3NSwxMSBAQAogICAgICAgICBvdXRwdXQuY2xvc2UoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX3NhbWUpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfZGlmZikKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lnbm9yZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy5oZycsIGZpbGVjbXAuREVGQVVMVF9JR05PUkVTKQogCiAgICAgZGVmIHRlc3RfY21wZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CmluZGV4IDFlNzA2NDEuLmRiNjA4MmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CkBAIC0yMiw3ICsyMiw3IEBACiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogZnJvbSBmaWxlaW5wdXQgaW1wb3J0IEZpbGVJbnB1dCwgaG9va19lbmNvZGVkCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluayBhcyBzYWZlX3VubGluawogCiAKQEAgLTIyNCw4ICsyMjQsMTAgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0cnkgb3BlbmluZyBpbiB1bml2ZXJzYWwgbmV3bGluZSBtb2RlCiAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFtiIkFcbkJcclxuQ1xyRCJdLCBtb2RlPSJ3YiIpCi0gICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCi0gICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9dDEsIG1vZGU9IlUiKQorICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQVxuIiwgIkJcbiIsICJDXG4iLCAiRCJdKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKQEAgLTI3NSw4ICsyNzcsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiIl0pCiAgICAgICAgICAgICB3aXRoIEZpbGVJbnB1dChmaWxlcz10MSkgYXMgZmk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5fZmlsZXMsICgpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKQEAgLTgzNSwyMiArODM3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhrd2FyZ3MucG9wKCdlbmNvZGluZycpLCBlbmNvZGluZykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrd2FyZ3MpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgIEJ1ZmZlclNpemVzVGVzdHMsCi0gICAgICAgIEZpbGVJbnB1dFRlc3RzLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pbnB1dCwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfY2xvc2UsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X25leHRmaWxlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbmFtZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzZmlyc3RsaW5lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc3N0ZGluLAotICAgICAgICBUZXN0X2hvb2tfY29tcHJlc3NlZCwKLSAgICAgICAgVGVzdF9ob29rX2VuY29kZWQsCi0gICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IGY5MWNjYWEuLmU2Nzg3NjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xNDUsMTYgKzE0NSwxNiBAQAogICAgICAgICAjIFVuaXggY2FsbHMgZGlyY2hlY2soKSBhbmQgcmV0dXJucyAiW0Vycm5vIDIxXTogSXMgYSBkaXJlY3RvcnkiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9GaWxlSU8oJy4nLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUuZXJybm8sIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmlsZW5hbWUsICIuIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgT1NFcnJvciIpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgInRlc3Qgb25seSB3b3JrcyBvbiBhIFBPU0lYLWxpa2Ugc3lzdGVtIikKICAgICBkZWYgdGVzdE9wZW5EaXJGRChzZWxmKToKICAgICAgICAgZmQgPSBvcy5vcGVuKCcuJywgb3MuT19SRE9OTFkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBfRmlsZUlPKGZkLCAncicpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlTRElSKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC0xODQsMTQgKzE4NCwxNCBAQAogICAgICAgICAgICAgb3MuY2xvc2UoZi5maWxlbm8oKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmdW5jKHNlbGYsIGYpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgIGRlZiBSZW9wZW5Gb3JSZWFkKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIG9zLmNsb3NlKHNlbGYuZi5maWxlbm8oKSkKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKICAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKICAgICAgICAgICAgICAgICAgICAgIyBPUydlcyB0aGF0IGRvbid0IHN1cHBvcnQgL2Rldi90dHkuCkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtc3ZjcnQuZ2V0X29zZmhhbmRsZSwgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICAjIElzc3VlIDE1OTg5CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NQVggKyAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUlOIC0gMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjOWI4NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CkBAIC0wLDAgKzEsNTEzIEBACisiIiIKK1Rlc3RzIGZvciBvYmplY3QgZmluYWxpemF0aW9uIHNlbWFudGljcywgYXMgb3V0bGluZWQgaW4gUEVQIDQ0Mi4KKyIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2ltcG9ydCBfdGVzdGNhcGkKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3koTGVnYWN5QmFzZSk6CisgICAgcGFzcworCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lSZXN1cnJlY3RvcihMZWdhY3lCYXNlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc3VycmVjdCBzZWxmIGJ5IHN0b3Jpbmcgc2VsZiBpbiBhIGNsYXNzLXdpZGUgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3Vydml2b3JzLmFwcGVuZChzZWxmKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIExlZ2FjeUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBvYmplY3RzIHdpdGggYSB0cF9kZWwuCisgICAgIiIiCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhlc2UgdGVzdHMgbmVlZCB0byBjbGVhbiB1cCBhIGJpdCBtb3JlLCBzaW5jZSB0aGV5IGNyZWF0ZQorICAgICAgICAjIHVuY29sbGVjdGFibGUgb2JqZWN0cy4KKyAgICAgICAgZ2MuZ2FyYmFnZS5jbGVhcigpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeShzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3koKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3lSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIHdlYWtyZWZzIGFyZSBjbGVhcmVkIGJlZm9yZSB0cF9kZWwgaXMgY2FsbGVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcyAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfc2VsZl9jeWNsZShzZWxmKToKKyAgICAgICAgIyBTZWxmLWN5Y2xlcyB3aXRoIGxlZ2FjeSBmaW5hbGl6ZXJzIGVuZCB1cCBpbiBnYy5nYXJiYWdlLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVNlbGZDeWNsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgQnJlYWsgdGhlIGN5Y2xlIHRvIGFsbG93IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdjLmdhcmJhZ2VbMF0ucmVmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5IGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQppbmRleCA1MDIyOTJmLi41YzJkYzNmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKQEAgLTQxLDYgKzQxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCBiIi0iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ2RpY3QnIiwgZmxvYXQsIHt9KQogICAgICAgICAjIExvbmUgc3Vycm9nYXRlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZmxvYXQsICdcdUQ4RjAnKQogICAgICAgICAjIGNoZWNrIHRoYXQgd2UgZG9uJ3QgYWNjZXB0IGFsdGVybmF0ZSBleHBvbmVudCBtYXJrZXJzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQppbmRleCA4MTkyYzM4Li5lMDYyNmRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IGZvcmsoKSBiZWhhdmlvci4KICIiIgogCi1pbXBvcnQgaW1wCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQppbmRleCBiZDE1OWY1Li4yOTMzMGY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQpAQCAtMzA3LDI3ICszMDcsNDEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkbG9jKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfb3B0aW1pc2F0aW9ucyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICJhYmNkZSIgIyA1IGNoYXJhY3RlcnMKIAorICAgICAgICBzZWxmLmFzc2VydElzKCIlcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjVzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUuMTBzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUxcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlNXMiICUgdGV4dCwgdGV4dCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZvcm1hdFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDpzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouNXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOi4xMHN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOjFzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDo1c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKIAorICAgICAgICBzZWxmLmFzc2VydElzKHRleHQgJSAoKSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0LmZvcm1hdCgpLCB0ZXh0KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uKHNlbGYpOgotICAgICAgICBJTlRfTUFYID0gMjE0NzQ4MzY0NworICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWAogCiAgICAgICAgIGYgPSAxLjIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4wZiIpLCAiMSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuM2YiKSwgIjEuMjAwIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGZvcm1hdChmLCAiLiVzZiIgJSAoSU5UX01BWCArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuMGYiKSwgIjEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChmLCAiLjNmIiksICIxLjIwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChJTlRfTUFYICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCisgICAgICAgICAgICBmb3JtYXQoYywgIi4lc2YiICUgKElOVF9NQVggKyAxKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkNTc4MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxMTYgQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKworCitjbGFzcyBDbGVhclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBmcmFtZS5jbGVhcigpLgorICAgICIiIgorCisgICAgZGVmIGlubmVyKHNlbGYsIHg9NSwgKiprd2FyZ3MpOgorICAgICAgICAxLzAKKworICAgIGRlZiBvdXRlcihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW5uZXIoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjID0gZQorICAgICAgICByZXR1cm4gZXhjCisKKyAgICBkZWYgY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhzZWxmLCB0Yik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhciBhbGwgZnJhbWVzIGluIGEgdHJhY2ViYWNrLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKworICAgIGRlZiB0ZXN0X2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICBkZWwgYworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAjIEEgcmVmZXJlbmNlIHRvIGMgaXMgaGVsZCB0aHJvdWdoIHRoZSBmcmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChOb25lLCB3cigpKQorICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgVGhlIHJlZmVyZW5jZSB3YXMgcmVsZWFzZWQgYnkgLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBlbmRseSA9IEZhbHNlCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBub25sb2NhbCBlbmRseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBlbmRseSA9IFRydWUKKyAgICAgICAgZ2VuID0gZygpCisgICAgICAgIG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBnZW4uZ2lfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmcoc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZnJhbWUgaXMgZm9yYmlkZGVuLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmLmZfYmFjay5jbGVhcigpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmdfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICAjIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gZXhlY3V0aW5nIGdlbmVyYXRvciBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgZiA9IG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuZGx5KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY2xlYXJfcmVmY3ljbGVzKHNlbGYpOgorICAgICAgICAjIC5jbGVhcigpIGRvZXNuJ3QgbGVhdmUgYW55IHJlZmN5Y2xlIGJlaGluZAorICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgICAgICBleGMgPSBzZWxmLm91dGVyKGM9YykKKyAgICAgICAgICAgIGRlbCBjCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3NjFjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIG1vZHVsZV9hdHRycyA9IGZyb3plbnNldChbJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJ10pCi0gICAgcGFja2FnZV9hdHRycyA9IGZyb3plbnNldChsaXN0KG1vZHVsZV9hdHRycykgKyBbJ19fcGF0aF9fJ10pCi0KLSAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX2hlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19oZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9faGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIGV4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIGlmIG5vdCAiX19waGVsbG9fXy5zcGFtIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5zcGFtCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgICAgIHNwYW1fZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgc3BhbV9leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXy5zcGFtKSksIHNwYW1fZXhwZWN0KQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdCA9IHNldChzZWxmLnBhY2thZ2VfYXR0cnMpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgcGhlbGxvX2V4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18uc3BhbSddCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggNjRjZDgwYmMuLjQxNDYzZTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CkBAIC0yMSw2ICsyMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgSE9TVCwgSE9TVHY2CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKK1RJTUVPVVQgPSAzCiAjIHRoZSBkdW1teSBkYXRhIHJldHVybmVkIGJ5IHNlcnZlciBvdmVyIHRoZSBkYXRhIGNoYW5uZWwgd2hlbgogIyBSRVRSLCBMSVNULCBOTFNULCBNTFNEIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIFJFVFJfREFUQSA9ICdhYmNkZTEyMzQ1XHJcbicgKiAxMDAwCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgYWRkciA9IGxpc3QobWFwKGludCwgYXJnLnNwbGl0KCcsJykpKQogICAgICAgICBpcCA9ICclZC4lZC4lZC4lZCcgJXR1cGxlKGFkZHJbOjRdKQogICAgICAgICBwb3J0ID0gKGFkZHJbNF0gKiAyNTYpICsgYWRkcls1XQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTEzNCw3ICsxMzUsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIGlwLCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzoyXQogICAgICAgICAgICAgaXAgPSBpcC5yZXBsYWNlKCcuJywgJywnKTsgcDEgPSBwb3J0IC8gMjU2OyBwMiA9IHBvcnQgJSAyNTYKICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI3IGVudGVyaW5nIHBhc3NpdmUgbW9kZSAoJXMsJWQsJWQpJyAlKGlwLCBwMSwgcDIpKQpAQCAtMTQ0LDcgKzE0NSw3IEBACiAgICAgZGVmIGNtZF9lcHJ0KHNlbGYsIGFyZyk6CiAgICAgICAgIGFmLCBpcCwgcG9ydCA9IGFyZy5zcGxpdChhcmdbMF0pWzE6LTFdCiAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCiAgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQogCkBAIC0xNTIsNyArMTUzLDcgQEAKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikgYXMgc29jazoKICAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCiAgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KFRJTUVPVVQpCiAgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLnB1c2goJzIyOSBlbnRlcmluZyBleHRlbmRlZCBwYXNzaXZlIG1vZGUgKHx8fCVkfCknICVwb3J0KQogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKQEAgLTMyNyw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNDEsNyArMzQyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgIyBBbnkgInNvY2tldCBlcnJvciIgY29ycmVzcG9uZHMgdG8gYSBTU0xfRVJST1JfU1lTQ0FMTCByZXR1cm4KICAgICAgICAgICAgICAgICAjIGZyb20gT3BlblNTTCdzIFNTTF9zaHV0ZG93bigpLCBjb3JyZXNwb25kaW5nIHRvIGEKICAgICAgICAgICAgICAgICAjIGNsb3NlZCBzb2NrZXQgY29uZGl0aW9uLiBTZWUgYWxzbzoKQEAgLTQ2MCw3ICs0NjEsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtNDg4LDcgKzQ4OSw3IEBACiAKICAgICBkZWYgdGVzdF9hbGxfZXJyb3JzKHNlbGYpOgogICAgICAgICBleGNlcHRpb25zID0gKGZ0cGxpYi5lcnJvcl9yZXBseSwgZnRwbGliLmVycm9yX3RlbXAsIGZ0cGxpYi5lcnJvcl9wZXJtLAotICAgICAgICAgICAgICAgICAgICAgIGZ0cGxpYi5lcnJvcl9wcm90bywgZnRwbGliLkVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAgICAgICAgIGZvciB4IGluIGV4Y2VwdGlvbnM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmFpc2UgeCgnZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiBhbGxfZXJyb3JzIHNldCcpCkBAIC02NzgsNyArNjc5LDcgQEAKIAogICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgogICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQotICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMTApCisgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2Vwc3YgaGFzIG5vdCBiZWVuIHVzZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAncGFzdicpCkBAIC02OTEsMTIgKzY5MiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICAjIGJhc2UgdGVzdAotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19jbGllbnRfY29ubmVjdGVkKCkpCkBAIC03MDQsNyArNzA1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19jbGllbnRfY29ubmVjdGVkKCkpCiAKICAgICAgICAgIyBRVUlUIHNlbnQgaW5zaWRlIHRoZSB3aXRoIGJsb2NrCi0gICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PTIpIGFzIHNlbGYuY2xpZW50OgorICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCkBAIC03MTQsNyArNzE1LDcgQEAKICAgICAgICAgIyBmb3JjZSBhIHdyb25nIHJlc3BvbnNlIGNvZGUgdG8gYmUgc2VudCBvbiBRVUlUOiBlcnJvcl9wZXJtCiAgICAgICAgICMgaXMgZXhwZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNsb3NlZAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLm5leHRfcmVzcG9uc2UgPSAnNTUwIGVycm9yIG9uIHF1aXQnCkBAIC03MzYsNyArNzM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9KEhPU1QsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBiaW5kIHRvIHBvcnQgJWQiICUgcG9ydCkKICAgICAgICAgICAgIHJhaXNlCkBAIC03NDcsNyArNzQ4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldHNvY2tuYW1lKClbMV0sIHBvcnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15RlRQU2VydmVyKChIT1NUdjYsIDApLCBhZj1zb2NrZXQuQUZfSU5FVDYpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtODAyLDcgKzgwMyw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCiAKQEAgLTgyOSw3ICs4MzAsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0yKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAjIGVuYWJsZSBUTFMKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC04NDMsNyArODQ0LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTkwMyw3ICs5MDQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdHBsaWIuRlRQX1RMUywgY2VydGZpbGU9Q0VSVEZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyhjb250ZXh0PWN0eCwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKQEAgLTEwMTcsOCArMTAxOCwxOSBAQAogICAgICAgICBmdHAuY2xvc2UoKQogCiAKK2NsYXNzIFRlc3ROZXRyY0RlcHJlY2F0aW9uKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKSwgc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydIT01FJ10gPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3BlbignLm5ldHJjJywgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBmdHBsaWIuTmV0cmMoKQorCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLAorICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLCBUZXN0TmV0cmNEZXByZWNhdGlvbiwKICAgICAgICAgICAgICBUZXN0SVB2NkVudmlyb25tZW50LAogICAgICAgICAgICAgIFRlc3RUTFNfRlRQQ2xhc3NNaXhpbiwgVGVzdFRMU19GVFBDbGFzc10KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQppbmRleCBjOGVkODMwLi41MDk0ZjdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpAQCAtNyw2ICs3LDExIEBACiAgICAgZGVmIGlubmVyX2Z1bmN0aW9uKCk6CiAgICAgICAgIGNsYXNzIExvY2FsQ2xhc3M6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIGdsb2JhbCBpbm5lcl9nbG9iYWxfZnVuY3Rpb24KKyAgICAgICAgZGVmIGlubmVyX2dsb2JhbF9mdW5jdGlvbigpOgorICAgICAgICAgICAgZGVmIGlubmVyX2Z1bmN0aW9uMigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBpbm5lcl9mdW5jdGlvbjIKICAgICAgICAgcmV0dXJuIExvY2FsQ2xhc3MKICAgICByZXR1cm4gbGFtYmRhOiBpbm5lcl9mdW5jdGlvbgogCkBAIC0xMTYsNiArMTIxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfZnVuY3Rpb24oKSgpKCkuX19xdWFsbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24uPGxvY2Fscz4uTG9jYWxDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLl9fcXVhbG5hbWVfXywgJ2lubmVyX2dsb2JhbF9mdW5jdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCkuX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uMicpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnYycKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19xdWFsbmFtZV9fLCAnYycpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnZCcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggZGIxZTkzNC4uMzhjOTcxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNTcgKzEsNTUgQEAKLWltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBhYmMKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBwZXJtdXRhdGlvbnMKIGltcG9ydCBwaWNrbGUKIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKLUBzdGF0aWNtZXRob2QKLWRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCi0gICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6Ci0gICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCi0gICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCi0gICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKLSAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCi0gICAgbmV3ZnVuYy5hcmdzID0gYXJncwotICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcwotICAgIHJldHVybiBuZXdmdW5jCitpbXBvcnQgZnVuY3Rvb2xzCisKK3B5X2Z1bmN0b29scyA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZnVuY3Rvb2xzJywgYmxvY2tlZD1bJ19mdW5jdG9vbHMnXSkKK2NfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBmcmVzaD1bJ19mdW5jdG9vbHMnXSkKKworZGVjaW1hbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGZyZXNoPVsnX2RlY2ltYWwnXSkKKwogCiBkZWYgY2FwdHVyZSgqYXJncywgKiprdyk6CiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorCiBkZWYgc2lnbmF0dXJlKHBhcnQpOgogICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgogICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCiAKLWNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorY2xhc3MgVGVzdFBhcnRpYWw6CiAKICAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwobWFwLCBsYW1iZGEgeDogeCoxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAoWzEsMiwzLDRdKSksIFsxMCwgMjAsIDMwLCA0MF0pCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZWFkYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnVuYywgY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFyZ3MsICgxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCBkaWN0KGE9MTAsIGI9MjApKQogICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnRoZXR5cGUsIHR5cGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnBhcnRpYWwsIHR5cGUpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnZnVuYycsIG1hcCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdhcmdzJywgKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2tleXdvcmRzJywgZGljdChhPTEsIGI9MikpCiAKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShoZXgpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoaGV4KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXwogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgpAQCAtNjAsOSArNTgsOSBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhcnRpYWwpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRoZXR5cGUoMikoKQorICAgICAgICAgICAgc2VsZi5wYXJ0aWFsKDIpKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTczLDcgKzcxLDcgQEAKICAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CiAgICAgICAgICAgICByZXR1cm4gYQogICAgICAgICBkID0geydhJzozfQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChmdW5jLCBhPTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCiAgICAgICAgIHAoYj03KQpAQCAtODIsMjAgKzgwLDIwIEBACiAgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIHplcm8gYXJncyBpbiBlaXRoZXIgcGFydGlhbAogICAgICAgICAjIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKIAogICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgogICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYT0xKSwgKCgpLCB7J2EnOjF9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7J2EnOjF9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGI9MiksICgoKSwgeydhJzoxLCAnYic6Mn0pKQogICAgICAgICAjIGtleXdvcmQgYXJncyBpbiB0aGUgY2FsbCBvdmVycmlkZSB0aG9zZSBpbiB0aGUgcGFydGlhbCBvYmplY3QKQEAgLTEwNCw3ICsxMDIsNyBAQAogICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWwoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBjb3JyZWN0bHkKICAgICAgICAgZm9yIGFyZ3MgaW4gWygpLCAoMCwpLCAoMCwxKSwgKDAsMSwyKSwgKDAsMSwyLDMpXToKLSAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBhcmdzICsgKCd4JywpCiAgICAgICAgICAgICBnb3QsIGVtcHR5ID0gcCgneCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSB7fSkKQEAgLTExMiwxNCArMTEwLDE0IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYSBpbiBbJ2EnLCAwLCBOb25lLCAzLjVdOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIGE9YSkKICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQogICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQpAQCAtMTI4LDEzICsxMjYsMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcl9wcm9wYWdhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgICB4IC8geQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgeT0wKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCiAgICAgICAgIGYgPSBOb25lCkBAIC0xNDIsMzkgKzE0MCw0NiBAQAogCiAgICAgZGVmIHRlc3Rfd2l0aF9ib3VuZF9hbmRfdW5ib3VuZF9tZXRob2RzKHNlbGYpOgogICAgICAgICBkYXRhID0gbGlzdChtYXAoc3RyLCByYW5nZSgxMCkpKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKHN0ci5qb2luLCAnJykKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbChzdHIuam9pbiwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IGNfZnVuY3Rvb2xzLnBhcnRpYWwKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGFyZ3MgPSAob2JqZWN0KCksIG9iamVjdCgpKQogICAgICAgICBhcmdzX3JlcHIgPSAnLCAnLmpvaW4ocmVwcihhKSBmb3IgYSBpbiBhcmdzKQotICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKSwgJ2InOiBvYmplY3QoKX0KKyAgICAgICAgI2t3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQorICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKX0KICAgICAgICAga3dhcmdzX3JlcHIgPSAnLCAnLmpvaW4oIiVzPSVyIiAlIChrLCB2KSBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKSkKLSAgICAgICAgaWYgc2VsZi50aGV0eXBlIGlzIGZ1bmN0b29scy5wYXJ0aWFsOgorICAgICAgICBpZiBzZWxmLnBhcnRpYWwgaXMgY19mdW5jdG9vbHMucGFydGlhbDoKICAgICAgICAgICAgIG5hbWUgPSAnZnVuY3Rvb2xzLnBhcnRpYWwnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi50aGV0eXBlLl9fbmFtZV9fCisgICAgICAgICAgICBuYW1lID0gc2VsZi5wYXJ0aWFsLl9fbmFtZV9fCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwga3dhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlLCAnYXNkZicsIGJhcj1UcnVlKQogICAgICAgICBmLmFkZF9zb21ldGhpbmdfdG9fX2RpY3RfXyA9IFRydWUKICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZiksIHNpZ25hdHVyZShmX2NvcHkpKQpAQCAtMTkzLDI4ICsxOTgsMTQwIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKG9iamVjdCkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChvYmplY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgIm5ldyBzdHlsZSBnZXRhcmdzIGZvcm1hdCBidXQgYXJndW1lbnQgaXMgbm90IGEgdHVwbGUiLAogICAgICAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fLCBCYWRTZXF1ZW5jZSgpKQogCi1jbGFzcyBQYXJ0aWFsU3ViY2xhc3MoZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgIHBhc3MKIAotY2xhc3MgVGVzdFBhcnRpYWxTdWJjbGFzcyhUZXN0UGFydGlhbCk6CitjbGFzcyBUZXN0UGFydGlhbFB5KFRlc3RQYXJ0aWFsLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGFydGlhbCA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMucGFydGlhbCkKIAotICAgIHRoZXR5cGUgPSBQYXJ0aWFsU3ViY2xhc3MKIAotY2xhc3MgVGVzdFB5dGhvblBhcnRpYWwoVGVzdFBhcnRpYWwpOgoraWYgY19mdW5jdG9vbHM6CisgICAgY2xhc3MgUGFydGlhbFN1YmNsYXNzKGNfZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBwYXNzCiAKLSAgICB0aGV0eXBlID0gUHl0aG9uUGFydGlhbAogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaGFzbid0IGEgbmljZSByZXByCi0gICAgZGVmIHRlc3RfcmVwcihzZWxmKTogcGFzcworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbENTdWJjbGFzcyhUZXN0UGFydGlhbEMpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBwYXJ0aWFsID0gUGFydGlhbFN1YmNsYXNzCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBwaWNrbGFibGUKLSAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKTogcGFzcworCitjbGFzcyBUZXN0UGFydGlhbE1ldGhvZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgIG5vdGhpbmcgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlKQorICAgICAgICBwb3NpdGlvbmFsID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgMSkKKyAgICAgICAga2V5d29yZHMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCBhPTIpCisgICAgICAgIGJvdGggPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCAzLCBiPTQpCisKKyAgICAgICAgbmVzdGVkID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QocG9zaXRpb25hbCwgNSkKKworICAgICAgICBvdmVyX3BhcnRpYWwgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChmdW5jdG9vbHMucGFydGlhbChjYXB0dXJlLCBjPTYpLCA3KQorCisgICAgICAgIHN0YXRpYyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHN0YXRpY21ldGhvZChjYXB0dXJlKSwgOCkKKyAgICAgICAgY2xzID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2xhc3NtZXRob2QoY2FwdHVyZSksIGQ9OSkKKworICAgIGEgPSBBKCkKKworICAgIGRlZiB0ZXN0X2FyZ19jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoKSwgKChzZWxmLmEsKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKDUpLCAoKHNlbGYuYSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyhjPTYpLCAoKHNlbGYuYSwpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoNSwgYz02KSwgKChzZWxmLmEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCgpLCAoKHNlbGYuYSwgMSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCg1KSwgKChzZWxmLmEsIDEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoYz02KSwgKChzZWxmLmEsIDEpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoNSwgYz02KSwgKChzZWxmLmEsIDEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoKSwgKChzZWxmLmEsKSwgeydhJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1KSwgKChzZWxmLmEsIDUpLCB7J2EnOiAyfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGM9NiksICgoc2VsZi5hLCksIHsnYSc6IDIsICdjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1LCBjPTYpLCAoKHNlbGYuYSwgNSksIHsnYSc6IDIsICdjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoKSwgKChzZWxmLmEsIDMpLCB7J2InOiA0fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKGM9NiksICgoc2VsZi5hLCAzKSwgeydiJzogNCwgJ2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5ib3RoKHNlbGYuYSwgNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKCksICgoc2VsZi5hLCAxLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoNiksICgoc2VsZi5hLCAxLCA1LCA2KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoZD03KSwgKChzZWxmLmEsIDEsIDUpLCB7J2QnOiA3fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCg2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5uZXN0ZWQoc2VsZi5hLCA2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgIGRlZiB0ZXN0X292ZXJfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKCksICgoc2VsZi5hLCA3KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoNSksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoZD04KSwgKChzZWxmLmEsIDcpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKDUsIGQ9OCksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNiwgJ2QnOiA4fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEub3Zlcl9wYXJ0aWFsKHNlbGYuYSwgNSwgZD04KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKworICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBvYmogPSBzZWxmLmEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmouYm90aC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5uZXN0ZWQuX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmoub3Zlcl9wYXJ0aWFsLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLmNscy5fX3NlbGZfXywgc2VsZi5BKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuQS5jbHMuX19zZWxmX18sIHNlbGYuQSkKKworICAgIGRlZiB0ZXN0X3VuYm91bmRfbWV0aG9kX3JldHJpZXZhbChzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5BCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmouYm90aCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmoubmVzdGVkLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5vdmVyX3BhcnRpYWwsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLnN0YXRpYywgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLmEuc3RhdGljLCAiX19zZWxmX18iKSkKKworICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3JzKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtzZWxmLkEsIHNlbGYuYV06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoKSwgKCg4LCksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSksICgoOCwgNSksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoZD04KSwgKCg4LCksIHsnZCc6IDh9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSwgZD04KSwgKCg4LCA1KSwgeydkJzogOH0pKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKCksICgoc2VsZi5BLCksIHsnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSksICgoc2VsZi5BLCA1KSwgeydkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyhjPTgpLCAoKHNlbGYuQSwpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSwgYz04KSwgKChzZWxmLkEsIDUpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGE9MyksICgoc2VsZi5hLCksIHsnYSc6IDN9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEua2V5d29yZHMoc2VsZi5hLCBhPTMpLCAoKHNlbGYuYSwpLCB7J2EnOiAzfSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChOb25lLCAxKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHZhcnMoc2VsZi5BKVsnYm90aCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2Qoe30sIDMsIGI9NCknLmZvcm1hdChjYXB0dXJlKSkKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBBYnN0cmFjdChhYmMuQUJDTWV0YSk6CisKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBhZGQoc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBhZGQ1ID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoYWRkLCA1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQuX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQ1Ll9faXNhYnN0cmFjdG1ldGhvZF9fKQorCisgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLkEuc3RhdGljLCBzZWxmLkEuY2xzLCBzZWxmLkEub3Zlcl9wYXJ0aWFsLCBzZWxmLkEubmVzdGVkLCBzZWxmLkEuYm90aF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdldGF0dHIoZnVuYywgJ19faXNhYnN0cmFjdG1ldGhvZF9fJywgRmFsc2UpKQorCiAKIGNsYXNzIFRlc3RVcGRhdGVXcmFwcGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjIzLDE5ICszNDAsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkPWZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpOgogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSBhc3NpZ25lZAogICAgICAgICBmb3IgbmFtZSBpbiBhc3NpZ25lZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHdyYXBwZXIsIG5hbWUpIGlzIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIod3JhcHBlciwgbmFtZSksIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIHVwZGF0ZWQKICAgICAgICAgZm9yIG5hbWUgaW4gdXBkYXRlZDoKICAgICAgICAgICAgIHdyYXBwZXJfYXR0ciA9IGdldGF0dHIod3JhcHBlciwgbmFtZSkKICAgICAgICAgICAgIHdyYXBwZWRfYXR0ciA9IGdldGF0dHIod3JhcHBlZCwgbmFtZSkKICAgICAgICAgICAgIGZvciBrZXkgaW4gd3JhcHBlZF9hdHRyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVkX2F0dHJba2V5XSBpcyB3cmFwcGVyX2F0dHJba2V5XSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJfX2RpY3RfXyIgYW5kIGtleSA9PSAiX193cmFwcGVkX18iOgorICAgICAgICAgICAgICAgICAgICAjIF9fd3JhcHBlZF9fIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSB1cGRhdGUgY29kZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlZF9hdHRyW2tleV0sIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAjIENoZWNrIF9fd3JhcHBlZF9fCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlZCkKKwogCiAgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoYTonVGhpcyBpcyBhIG5ldyBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZi5fX3dyYXBwZWRfXyA9ICJUaGlzIGlzIGEgYmFsZCBmYWNlZCBsaWUiCiAgICAgICAgIGRlZiB3cmFwcGVyKGI6J1RoaXMgaXMgdGhlIHByaW9yIGFubm90YXRpb24nKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYpCkBAIC0zMjIsNiArNDQ2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZXIuX19kb2NfXy5zdGFydHN3aXRoKCdtYXgoJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2Fubm90YXRpb25zX18sIHt9KQogCisKIGNsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgpAQCAtMzI5LDE0ICs0NTQsMTUgQEAKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgc3RpbGwgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmKQogICAgICAgICBkZWYgd3JhcHBlcigpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX3F1YWxuYW1lX18sIGYuX19xdWFsbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQpAQCAtMzgyLDYgKzUwOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmRpY3RfYXR0ciwgZi5kaWN0X2F0dHIpCiAKKwogY2xhc3MgVGVzdFJlZHVjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZnVuYyA9IGZ1bmN0b29scy5yZWR1Y2UKIApAQCAtNDYyLDI0ICs1ODksMjkgQEAKICAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGFkZCwgZCksICIiLmpvaW4oZC5rZXlzKCkpKQogCi1jbGFzcyBUZXN0Q21wVG9LZXkodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBUZXN0Q21wVG9LZXk6CiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5KHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoMyksIGtleSgzKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleSgzKSwga2V5KDEpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChrZXkoMyksIGtleSgzKSkKKwogICAgICAgICBkZWYgY21wMih4LCB5KToKICAgICAgICAgICAgIHJldHVybiBpbnQoeCkgLSBpbnQoeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMikKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDQuMCksIGtleSgnNCcpKQogICAgICAgICBzZWxmLmFzc2VydExlc3Moa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGtleSgyKSwga2V5KCczNScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleSgyKSwga2V5KCczNScpKQogCiAgICAgZGVmIHRlc3RfY21wX3RvX2tleV9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleShvYmo9MyksIGtleShvYmo9MykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihrZXkob2JqPTMpLCBrZXkob2JqPTEpKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CkBAIC00ODcsMTAgKzYxOSwxMCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CiAgICAgICAgICAgICAxIDwga2V5KDMpICAgICMgbGhzIGlzIG5vdCBhIEsgb2JqZWN0CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleSgpICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEsIE5vbmUpICAgIyB0b28gbWFueSBhcmdzCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGtleSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtNDk5LDcgKzYzMSw3IEBACiAgICAgZGVmIHRlc3RfYmFkX2NtcChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICBrZXkoMykgPiBrZXkoMSkKIApAQCAtNTE0LDEzICs2NDYsMTMgQEAKICAgICBkZWYgdGVzdF9vYmpfZmllbGQoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSg1MCkub2JqLCA1MCkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50KHNlbGYpOgogICAgICAgICBkZWYgbXljbXAoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geSAtIHgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFs0LCAzLCAyLCAxLCAwXSkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50X3N0cihzZWxmKToKQEAgLTUyOCwxOCArNjYwLDI5IEBACiAgICAgICAgICAgICB4LCB5ID0gaW50KHgpLCBpbnQoeSkKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQogICAgICAgICB2YWx1ZXMgPSBbNSwgJzMnLCA3LCAyLCAnMCcsICcxJywgNCwgJzEwJywgMV0KLSAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSkKKyAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ludCh2YWx1ZSkgZm9yIHZhbHVlIGluIHZhbHVlc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDQsIDUsIDcsIDEwXSkKIAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wKQogICAgICAgICBrID0ga2V5KDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGspCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShrLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RDbXBUb0tleUMoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIGNtcF90b19rZXkgPSBjX2Z1bmN0b29scy5jbXBfdG9fa2V5CisKKworY2xhc3MgVGVzdENtcFRvS2V5UHkoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY21wX3RvX2tleSA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMuY21wX3RvX2tleSkKKworCiBjbGFzcyBUZXN0VG90YWxPcmRlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sdChzZWxmKToKQEAgLTU1Nyw2ICs3MDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPiBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbGUoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU3Myw2ICs3MTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPj0gQSgyKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2d0KHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01ODksNiArNzM0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDwgQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2dlKHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC02MDUsNiArNzUxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDw9IEEoMSkpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ub19vdmVyd3JpdGUoc2VsZik6CiAgICAgICAgICMgbmV3IG1ldGhvZHMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKQEAgLTYyNCwyNyArNzcxLDExOCBAQAogICAgICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9idWdfMTAwNDIoc2VsZik6CisgICAgZGVmIHRlc3RfdHlwZV9lcnJvcl93aGVuX25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgIyBidWcgMTAwNDI7IGVuc3VyZSBzdGFjayBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1cgorICAgICAgICAjIHdoZW4gZGVjb3JhdGVkIHR5cGVzIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCi0gICAgICAgIGNsYXNzIFRlc3RUTzoKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBUZXN0VE8oOCkgPD0gKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCAxIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oLTEpIDwgMQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IExFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oMCkgPCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDApCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgR1QiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigxKSA8IEltcGxlbWVudHNHcmVhdGVyVGhhbigxKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygyKSA8PSBJbXBsZW1lbnRzTGVzc1RoYW4oMikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgPD0gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMykgPD0gSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbygzKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHVCA+IEdFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNCkgPiBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDQpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gTFQiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig1KSA+IEltcGxlbWVudHNMZXNzVGhhbig1KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg2KSA+PSBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0UgPj0gTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNykgPj0gSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyg3KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSB3aGVuIGVxdWFsIik6CisgICAgICAgICAgICBhID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBiID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYSA+PSBiCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhIDw9IGIKIAogY2xhc3MgVGVzdExSVSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9scnUoc2VsZik6CiAgICAgICAgIGRlZiBvcmlnKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIDMqeCt5CisgICAgICAgICAgICByZXR1cm4gMyAqIHggKyB5CiAgICAgICAgIGYgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKG9yaWcpCiAgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heHNpemUsIDIwKQpAQCAtNzQ5LDcgKzk4Nyw3IEBACiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdXNlcl9mdW5jdGlvbiBleGNlcHRpb25zIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0CiAgICAgICAgICMgY3JlYXRpbmcgYSBoYXJkLXRvLXJlYWQgY2hhaW5lZCBleGNlcHRpb24uCiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMTc3Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemUpCiAgICAgICAgICAgICBkZWYgZnVuYyhpKToKICAgICAgICAgICAgICAgICByZXR1cm4gJ2FiYydbaV0KQEAgLTc2Miw3ICsxMDAwLDcgQEAKICAgICAgICAgICAgICAgICBmdW5jKDE1KQogCiAgICAgZGVmIHRlc3RfbHJ1X3dpdGhfdHlwZXMoc2VsZik6Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9bWF4c2l6ZSwgdHlwZWQ9VHJ1ZSkKICAgICAgICAgICAgIGRlZiBzcXVhcmUoeCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHggKiB4CkBAIC03NzcsNiArMTAxNSwzNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLmhpdHMsIDQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkubWlzc2VzLCA0KQogCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPTEyOCwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPTEyOCwgY3VycnNpemU9MCkpCisKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3NfbWF4c2l6ZV9ub25lKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKwogICAgIGRlZiB0ZXN0X25lZWRfZm9yX3Jsb2NrKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBkZWFkbG9jayBvbiBhbiBMUlUgY2FjaGUgdGhhdCB1c2VzIGEgcmVndWxhciBsb2NrCiAKQEAgLTgwMiwxNyArMTA3MCw0OTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVFcSgyKSkgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgY29ycmVjdCByZXR1cm4gdmFsdWUKIAogCitjbGFzcyBUZXN0U2luZ2xlRGlzcGF0Y2godW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NpbXBsZV9vdmVybG9hZHMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnRlZ2VyIgorICAgICAgICBnLnJlZ2lzdGVyKGludCwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygic3RyIiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKDEpLCAiaW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhbMSwyLDNdKSwgImJhc2UiKQorCisgICAgZGVmIHRlc3RfbXJvKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQoQywgQik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnX0EoYSk6CisgICAgICAgICAgICByZXR1cm4gIkEiCisgICAgICAgIGRlZiBnX0IoYik6CisgICAgICAgICAgICByZXR1cm4gIkIiCisgICAgICAgIGcucmVnaXN0ZXIoQSwgZ19BKQorICAgICAgICBnLnJlZ2lzdGVyKEIsIGdfQikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEEoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEIoKSksICJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEMoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEQoKSksICJCIikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihpbnQpCisgICAgICAgIGRlZiBnX2ludChpKToKKyAgICAgICAgICAgIHJldHVybiAiaW50ICVzIiAlIChpLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMTIpLCAiaW50IDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnLmRpc3BhdGNoKGludCksIGdfaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2gob2JqZWN0KSwgZy5kaXNwYXRjaChzdHIpKQorICAgICAgICAjIE5vdGU6IGluIHRoZSBhc3NlcnQgYWJvdmUgdGhpcyBpcyBub3QgZy4KKyAgICAgICAgIyBAc2luZ2xlZGlzcGF0Y2ggcmV0dXJucyB0aGUgd3JhcHBlci4KKworICAgIGRlZiB0ZXN0X3dyYXBwaW5nX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICJTaW1wbGUgdGVzdCIKKyAgICAgICAgICAgIHJldHVybiAiVGVzdCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fbmFtZV9fLCAiZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5fX2RvY19fLCAiU2ltcGxlIHRlc3QiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZGVjaW1hbCwgJ3JlcXVpcmVzIF9kZWNpbWFsJykKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jX2NsYXNzZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9uKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuIG9iai5hcmdzCisgICAgICAgIHN1Ym4gPSBkZWNpbWFsLlN1Ym5vcm1hbCgiRXhwb25lbnQgPCBFbWluIikKKyAgICAgICAgcm5kID0gZGVjaW1hbC5Sb3VuZGVkKCJOdW1iZXIgZ290IHJvdW5kZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoc3VibiksICgiRXhwb25lbnQgPCBFbWluIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocm5kKSwgKCJOdW1iZXIgZ290IHJvdW5kZWQiLCkpCisgICAgICAgIEBnLnJlZ2lzdGVyKGRlY2ltYWwuU3Vibm9ybWFsKQorICAgICAgICBkZWYgXyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJUb28gc21hbGwgdG8gY2FyZS4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgIlRvbyBzbWFsbCB0byBjYXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKworICAgIGRlZiB0ZXN0X2NvbXBvc2VfbXJvKHNlbGYpOgorICAgICAgICAjIE5vbmUgb2YgdGhlIGV4YW1wbGVzIGluIHRoaXMgdGVzdCBkZXBlbmQgb24gaGF5c3RhY2sgb3JkZXJpbmcuCisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2NvbXBvc2VfbXJvCisgICAgICAgIGJhc2VzID0gW2MuU2VxdWVuY2UsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TZXRdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhkaWN0LCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2RpY3QsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywgYy5TaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5NYXBwaW5nLCBjLk11dGFibGVNYXBwaW5nLCBjLk9yZGVyZWREaWN0XQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5DaGFpbk1hcCwgaGF5c3RhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLkNoYWluTWFwLCBjLk11dGFibGVNYXBwaW5nLCBjLk1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwgb2JqZWN0XSkKKworICAgICAgICAjIElmIHRoZXJlJ3MgYSBnZW5lcmljIGZ1bmN0aW9uIHdpdGggaW1wbGVtZW50YXRpb25zIHJlZ2lzdGVyZWQgZm9yCisgICAgICAgICMgYm90aCBTaXplZCBhbmQgQ29udGFpbmVyLCBwYXNzaW5nIGEgZGVmYXVsdGRpY3QgdG8gaXQgcmVzdWx0cyBpbiBhbgorICAgICAgICAjIGFtYmlndW91cyBkaXNwYXRjaCB3aGljaCB3aWxsIGNhdXNlIGEgUnVudGltZUVycm9yIChzZWUKKyAgICAgICAgIyB0ZXN0X21yb19jb25mbGljdHMpLgorICAgICAgICBiYXNlcyA9IFtjLkNvbnRhaW5lciwgYy5TaXplZCwgc3RyXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oYy5kZWZhdWx0ZGljdCwgW2MuU2l6ZWQsIGMuQ29udGFpbmVyLCBzdHJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5TaXplZCwgYy5Db250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RdKQorCisgICAgICAgICMgTXV0YWJsZVNlcXVlbmNlIGJlbG93IGlzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgb24gRC4gSW4gb3RoZXIgd29yZHMsIGl0CisgICAgICAgICMgcHJlY2VlZHMgTXV0YWJsZU1hcHBpbmcgd2hpY2ggbWVhbnMgc2luZ2xlIGRpc3BhdGNoIHdpbGwgYWx3YXlzCisgICAgICAgICMgY2hvb3NlIE11dGFibGVTZXF1ZW5jZSBoZXJlLgorICAgICAgICBjbGFzcyBEKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihEKQorICAgICAgICBiYXNlcyA9IFtjLk11dGFibGVTZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEQsIGJhc2VzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbRCwgYy5NdXRhYmxlU2VxdWVuY2UsIGMuU2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLk11dGFibGVNYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5NYXBwaW5nLCBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBDb250YWluZXIgYW5kIENhbGxhYmxlIGFyZSByZWdpc3RlcmVkIG9uIGRpZmZlcmVudCBiYXNlIGNsYXNzZXMgYW5kCisgICAgICAgICMgYSBnZW5lcmljIGZ1bmN0aW9uIHN1cHBvcnRpbmcgYm90aCBzaG91bGQgYWx3YXlzIHBpY2sgdGhlIENhbGxhYmxlCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gaWYgYSBDIGluc3RhbmNlIGlzIHBhc3NlZC4KKyAgICAgICAgY2xhc3MgQyhjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGJhc2VzID0gW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyLCBjLk1hcHBpbmddCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhDLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW0MsIGMuQ2FsbGFibGUsIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgZCA9IHsiYSI6ICJiIn0KKyAgICAgICAgbCA9IFsxLCAyLCAzXQorICAgICAgICBzID0ge29iamVjdCgpLCBOb25lfQorICAgICAgICBmID0gZnJvemVuc2V0KHMpCisgICAgICAgIHQgPSAoMSwgMiwgMykKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAiYmFzZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIG9iajogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIG9iajogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5DaGFpbk1hcCwgbGFtYmRhIG9iajogImNoYWlubWFwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKSAgIyBpcnJlbGV2YW50IEFCQ3MgcmVnaXN0ZXJlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlU2V0LCBsYW1iZGEgb2JqOiAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTWFwcGluZywgbGFtYmRhIG9iajogIm1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIG5vdCBzcGVjaWZpYyBlbm91Z2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2VxdWVuY2UsIGxhbWJkYSBvYmo6ICJzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgb2JqOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGRpY3QsIGxhbWJkYSBvYmo6ICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIobGlzdCwgbGFtYmRhIG9iajogImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoc2V0LCBsYW1iZGEgb2JqOiAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZnJvemVuc2V0LCBsYW1iZGEgb2JqOiAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcih0dXBsZSwgbGFtYmRhIG9iajogInR1cGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAidHVwbGUiKQorCisgICAgZGVmIHRlc3RfYzNfYWJjKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgbXJvID0gZnVuY3Rvb2xzLl9jM19tcm8KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgICAjIGltcGxpZXMgU2l6ZWQKKyAgICAgICAgQGMuQ29udGFpbmVyLnJlZ2lzdGVyCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgcGFzcyAgICMgdW5yZWxhdGVkCisgICAgICAgIGNsYXNzIFgoRCwgQywgQik6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcyAgICMgaW1wbGllcyBDYWxsYWJsZQorICAgICAgICBleHBlY3RlZCA9IFtYLCBjLkNhbGxhYmxlLCBELCBDLCBjLkNvbnRhaW5lciwgQiwgYy5TaXplZCwgQSwgb2JqZWN0XQorICAgICAgICBmb3IgYWJjcyBpbiBwZXJtdXRhdGlvbnMoW2MuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ybyhYLCBhYmNzPWFiY3MpLCBleHBlY3RlZCkKKyAgICAgICAgIyB1bnJlbGF0ZWQgQUJDcyBkb24ndCBhcHBlYXIgaW4gdGhlIHJlc3VsdGluZyBNUk8KKyAgICAgICAgbWFueV9hYmNzID0gW2MuTWFwcGluZywgYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuSXRlcmFibGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9bWFueV9hYmNzKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9tcm9fY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBPKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbyA9IE8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkl0ZXJhYmxlLCBsYW1iZGEgYXJnOiAiaXRlcmFibGUiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ29udGFpbmVyLCBsYW1iZGEgYXJnOiAiY29udGFpbmVyIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgYXJnOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgc2VlIGFib3ZlOiBTaXplZCBpcyBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkNvbnRhaW5lcgorICAgICAgICBjbGFzcyBQOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gUCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgImJhc2UiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgIml0ZXJhYmxlIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoUCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX29uZToKKyAgICAgICAgICAgIGcocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV9vbmUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFEoYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBxID0gUSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkl0ZXJhYmxlCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGgoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5TaXplZCkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2l6ZWQiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgICMgRXZlbiB0aG91Z2ggU2l6ZWQgYW5kIENvbnRhaW5lciBhcmUgZXhwbGljaXQgYmFzZXMgb2YgTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICMgdGhpcyBBQkMgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIG9uIGRlZmF1bHRkaWN0IHdoaWNoIG1ha2VzIGFsbCBvZgorICAgICAgICAjIE11dGFibGVNYXBwaW5nJ3MgYmFzZXMgaW1wbGljaXQgYXMgd2VsbCBmcm9tIGRlZmF1bHRkaWN0J3MKKyAgICAgICAgIyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3R3bzoKKyAgICAgICAgICAgIGgoYy5kZWZhdWx0ZGljdChsYW1iZGE6IDApKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3R3by5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUihjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoUikKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaShhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJtYXBwaW5nIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2VxdWVuY2UiCisgICAgICAgIHIgPSBSKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpKHIpLCAic2VxdWVuY2UiKQorICAgICAgICBjbGFzcyBTOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBUKFMsIGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdCA9IFQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIHRoZSBNUk8KKyAgICAgICAgY2xhc3MgVToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHUgPSBVKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHUpLCAic2l6ZWQiKSAgICMgaW1wbGljaXQgU2l6ZWQgc3ViY2xhc3MgaW5mZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgZXhpc3RlbmNlIG9mIF9fbGVuX18oKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihVKQorICAgICAgICAjIFRoZXJlIGlzIG5vIHByZWZlcmVuY2UgZm9yIHJlZ2lzdGVyZWQgdmVyc3VzIGluZmVycmVkIEFCQ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90aHJlZToKKyAgICAgICAgICAgIGgodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90aHJlZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgVihjLlNpemVkLCBTKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGooYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGoucmVnaXN0ZXIoUykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAicyIKKyAgICAgICAgQGoucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgdiA9IFYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJzIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAiY29udGFpbmVyIikgICAjIGJlY2F1c2UgaXQgZW5kcyB1cCByaWdodCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2l6ZWQgaW4gdGhlIE1STworCisgICAgZGVmIHRlc3RfY2FjaGVfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyRGljdAorICAgICAgICBjbGFzcyBUcmFjaW5nRGljdChVc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcihUcmFjaW5nRGljdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcyA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVtrZXldCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBfb3JpZ193a2QgPSBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkKKyAgICAgICAgdGQgPSBUcmFjaW5nRGljdCgpCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IGxhbWJkYTogdGQKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCB0ZC5kYXRhW2xpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgYXJnOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGRpY3QsIGcucmVnaXN0cnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChsaXN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihYKSAgICMgV2lsbCBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCB1c2luZyBBQkNzIHlldC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5kaXNwYXRjaChsaXN0KQorICAgICAgICBnLmRpc3BhdGNoKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgYy5NdXRhYmxlU2V0LnJlZ2lzdGVyKFgpICAgICAgICMgV2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKSAgICMgU3RhbGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIGFyZzogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgYXJnOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgZy5fY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IF9vcmlnX3drZAorCisKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoCi0gICAgICAgIFRlc3RQYXJ0aWFsLAotICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAotICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFBhcnRpYWxDLAorICAgICAgICBUZXN0UGFydGlhbFB5LAorICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKKyAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCiAgICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAogICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5LAorICAgICAgICBUZXN0Q21wVG9LZXlDLAorICAgICAgICBUZXN0Q21wVG9LZXlQeSwKICAgICAgICAgVGVzdFdyYXBzLAogICAgICAgICBUZXN0UmVkdWNlLAogICAgICAgICBUZXN0TFJVLAorICAgICAgICBUZXN0U2luZ2xlRGlzcGF0Y2gsCiAgICAgKQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggYTBjMTU2Zi4uYmVhYzk5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTgyLDYgKzgyLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlMTAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTEwCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUxMCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCiAgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAogICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCBjNTliNzJlLi5lOGY1MmE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNiArMSw5IEBACitpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIpCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgbWFrZV9zY3JpcHQsIHRlbXBfZGlyCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgZ2MKQEAgLTM4LDYgKzQxLDcgQEAKICAgICAgICAgIyBnYyBjb2xsZWN0cyBpdC4KICAgICAgICAgc2VsZi53ciA9IHdlYWtyZWYucmVmKEMxMDU1ODIwKDY2NiksIGl0X2hhcHBlbmVkKQogCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiBjbGFzcyBVbmNvbGxlY3RhYmxlKG9iamVjdCk6CiAgICAgIiIiQ3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggbXVsdGlwbGUgX19kZWxfXyBtZXRob2RzLgogCkBAIC01MCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzZWxmLnBhcnRuZXIgPSBVbmNvbGxlY3RhYmxlKHBhcnRuZXI9c2VsZikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IHBhcnRuZXIKLSAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKICAgICAgICAgcGFzcwogCiAjIyMgVGVzdHMKQEAgLTEzOSwxMSArMTQzLDEyIEBACiAgICAgICAgIGRlbCBhCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQogCi0gICAgZGVmIHRlc3RfZmluYWxpemVyKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXIoc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMTYzLDExICsxNjgsMTIgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGZpbmQgb2JqIGluIGdhcmJhZ2UgKGZpbmFsaXplcikiKQogICAgICAgICBnYy5nYXJiYWdlLnJlbW92ZShvYmopCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOiBwYXNzCiAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtNTY4LDEyICs1NzQsMTQgQEAKICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgY29kZSA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxYICUlcj4iICUlIHNlbGYubmFtZQotICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHggPSBYKCdmaXJzdCcpCkBAIC02MTAsNiArNjE4LDY2IEBACiAgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCiAKKyAgICBkZWYgdGVzdF9nY19tYWluX21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCB0aGUgX19tYWluX18gbW9kdWxlIGFuZCBjaGVjaworICAgICAgICAjIGl0IGdldHMgY29sbGVjdGVkIGF0IGludGVycHJldGVyIHNodXRkb3duLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnX19kZWxfXyBjYWxsZWQnKQorICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYidfX2RlbF9fIGNhbGxlZCcpCisKKyAgICBkZWYgdGVzdF9nY19vcmRpbmFyeV9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggYSBub24tX19tYWluX18gbW9kdWxlLgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZHVsZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJXIpCisgICAgICAgICAgICAgICAgaW1wb3J0IGdjdGVzdAorICAgICAgICAgICAgICAgICIiIiAlIChzY3JpcHRfZGlyLCkKKyAgICAgICAgICAgIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsICdnY3Rlc3QnLCBtb2R1bGUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2dldF9zdGF0cyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0cyksIDMpCisgICAgICAgIGZvciBzdCBpbiBzdGF0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdCwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjb2xsZWN0ZWQiLCAiY29sbGVjdGlvbnMiLCAidW5jb2xsZWN0YWJsZSJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3RlZCJdLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3Rpb25zIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsidW5jb2xsZWN0YWJsZSJdLCAwKQorICAgICAgICAjIENoZWNrIHRoYXQgY29sbGVjdGlvbiBjb3VudHMgYXJlIGluY3JlbWVudGVkIGNvcnJlY3RseQorICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5lbmFibGUpCisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgb2xkID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgZ2MuY29sbGVjdCgyKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSArIDEpCisKIAogY2xhc3MgR0NDYWxsYmFja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CmluZGV4IDg0NjQyMmIuLjBlMjU0YTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC01LDYgKzUsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHBwcmludAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBzeXNjb25maWcKQEAgLTE3LDYgKzE4LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBweXRob25faXNfb3B0aW1pemVkCiAKIHRyeToKQEAgLTQwLDYgKzQyLDggQEAKIGNoZWNrb3V0X2hvb2tfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24tZ2RiLnB5JykKIAorUFlUSE9OSEFTSFNFRUQgPSAnMTIzJworCiBkZWYgcnVuX2dkYigqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiUnVucyBnZGIgaW4gLS1iYXRjaCBtb2RlIHdpdGggdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGdpdmVuIGJ5ICphcmdzLgogCkBAIC0xNDQsNyArMTQ4LDcgQEAKICAgICAgICAgIyBwcmludCAoJyAnLmpvaW4oYXJncykpCiAKICAgICAgICAgIyBVc2UgImFyZ3MiIHRvIGludm9rZSBnZGIsIGNhcHR1cmluZyBzdGRvdXQsIHN0ZGVycjoKLSAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD0nMCcpCisgICAgICAgIG91dCwgZXJyID0gcnVuX2dkYigqYXJncywgUFlUSE9OSEFTSFNFRUQ9UFlUSE9OSEFTSFNFRUQpCiAKICAgICAgICAgZXJybGluZXMgPSBlcnIuc3BsaXRsaW5lcygpCiAgICAgICAgIHVuZXhwZWN0ZWRfZXJybGluZXMgPSBbXQpAQCAtMTY1LDYgKzE2OSwxMCBAQAogICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAogICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKICAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICAnd2FybmluZzogU291cmNlIGZpbGUgaXMgbW9yZSByZWNlbnQgdGhhbiBleGVjdXRhYmxlLicsCisgICAgICAgICAgICAjIElzc3VlICMxOTc1MzogbWlzc2luZyBzeW1ib2xzIG9uIFN5c3RlbSBaCisgICAgICAgICAgICAnTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yICcsCisgICAgICAgICAgICAnVHJ5OiB6eXBwZXIgaW5zdGFsbCAtQyAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTI0OCw5ICsyNTYsOCBAQAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJwogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9LCAieydmb28nOiAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sICJ7J2RvdWdsYXMnOiA0MiwgJ2Zvbyc6ICdiYXInfSIpCiAKICAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJwpAQCAtMzA1LDI2ICszMTIsMzAgQEAKIAogICAgIGRlZiB0ZXN0X3R1cGxlcyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHR1cGxlcycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpLCAnKCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSwgJygxLCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKCdmb28nLCAnYmFyJywgJ2JheicpKQogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpLCAnc2V0KCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFsnYScsICdiJ10pLCAieydhJywgJ2InfSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSwgIns0LCA1LCA2fSIpCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGUgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKICAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgogICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQotcy5wb3AoKQorcy5yZW1vdmUoJ2EnKQogaWQocyknJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2InfSIpCiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCksICdmcm96ZW5zZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSksICJmcm96ZW5zZXQoeydhJywgJ2InfSkiKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSksICJmcm96ZW5zZXQoezQsIDUsIDZ9KSIpCiAKQEAgLTg0MSw2ICs4NTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkdEQiB2ZXJzaW9uOiIpCisgICAgICAgIGZvciBsaW5lIGluIG9zLmZzZGVjb2RlKGdkYl92ZXJzaW9uKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBwcmludCgiICIgKiA0ICsgbGluZSkKICAgICBydW5fdW5pdHRlc3QoUHJldHR5UHJpbnRUZXN0cywKICAgICAgICAgICAgICAgICAgUHlMaXN0VGVzdHMsCiAgICAgICAgICAgICAgICAgIFN0YWNrTmF2aWdhdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CmluZGV4IDk1ODA1NGEuLjRlOTIxMTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTEsMyArMSw1NSBAQAoraW1wb3J0IGdjCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIEEgZ2VuZXJhdG9yIGZyYW1lIGNhbiBiZSByZXN1cnJlY3RlZCBieSBhIGdlbmVyYXRvcidzIGZpbmFsaXphdGlvbi4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZnJhbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZGVsIGcKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUpCisgICAgICAgIGRlbCBmcmFtZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgY2F1Z2h0IGluIGEgcmVmY3ljbGUgZ2V0cyBmaW5hbGl6ZWQgYW55d2F5LgorICAgICAgICBvbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZmluYWxpemVkID0gRmFsc2UKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluYWxpemVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZyA9IHlpZWxkCisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZWQgPSBUcnVlCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZy5zZW5kKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0cmVmY291bnQoZyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluYWxpemVkKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIG9sZF9nYXJiYWdlKQorCisKIHR1dG9yaWFsX3Rlc3RzID0gIiIiCiBMZXQncyB0cnkgYSBzaW1wbGUgZ2VuZXJhdG9yOgogCkBAIC0xNzI5LDkgKzE3ODEsNyBAQAogPj4+IGcgPSBmKCkKID4+PiBuZXh0KGcpCiA+Pj4gZGVsIGcKLT4+PiBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RhcnRzd2l0aCgKLS4uLiAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6ICdnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0JyBpbiAiCi0uLi4gKQorPj4+ICJSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQiIGluIHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQogVHJ1ZQogPj4+IHN5cy5zdGRlcnIgPSBvbGQKIApAQCAtMTg0MSwyMiArMTg5MSwyMyBAQAogLi4uICAgICBzeXMuc3RkZXJyID0gaW8uU3RyaW5nSU8oKQogLi4uICAgICBjbGFzcyBMZWFrZXI6CiAuLi4gICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLS4uLiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKy4uLiAgICAgICAgICAgICBkZWYgaW52b2tlKG1lc3NhZ2UpOgorLi4uICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobWVzc2FnZSkKKy4uLiAgICAgICAgICAgICBpbnZva2UoInRlc3QiKQogLi4uCiAuLi4gICAgIGwgPSBMZWFrZXIoKQogLi4uICAgICBkZWwgbAogLi4uICAgICBlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQotLi4uICAgICBlcnIuc3RhcnRzd2l0aCgKLS4uLiAgICAgICAgICJFeGNlcHRpb24gUnVudGltZUVycm9yOiBSdW50aW1lRXJyb3IoKSBpbiA8IgotLi4uICAgICApCi0uLi4gICAgIGVyci5lbmRzd2l0aCgiPiBpZ25vcmVkIikKLS4uLiAgICAgbGVuKGVyci5zcGxpdGxpbmVzKCkpCisuLi4gICAgICJFeGNlcHRpb24gaWdub3JlZCBpbiIgaW4gZXJyCisuLi4gICAgICJSdW50aW1lRXJyb3I6IHRlc3QiIGluIGVycgorLi4uICAgICAiVHJhY2ViYWNrIiBpbiBlcnIKKy4uLiAgICAgImluIGludm9rZSIgaW4gZXJyCiAuLi4gZmluYWxseToKIC4uLiAgICAgc3lzLnN0ZGVyciA9IG9sZAogVHJ1ZQogVHJ1ZQotMQotCitUcnVlCitUcnVlCiAKIAogVGhlc2UgcmVmbGVhayB0ZXN0cyBzaG91bGQgcGVyaGFwcyBiZSBpbiBhIHRlc3RmaWxlIG9mIHRoZWlyIG93biwKQEAgLTE4ODEsNiArMTkzMiw3IEBACiAjIHNvIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgaW4gYm90aCB3YXlzIG9mIHJ1bm5pbmcgcmVncnRlc3QuCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCB0ZXN0X2dlbmVyYXRvcnMKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXJhdG9ycywgdmVyYm9zZSkKIAogIyBUaGlzIHBhcnQgaXNuJ3QgbmVlZGVkIGZvciByZWdydGVzdCwgYnV0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGRpcmVjdGx5LgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKaW5kZXggZmQ4YmM1Ny4uZTk2Nzg5NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0xODgsMTIgKzE4OCw5MyBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICBzYWZlX3JtZGlyKHN1cHBvcnQuVEVTVEZOKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInZm9vJykKKworICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorCisgICAgICAgICAgICBmdW5jKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKKyAgICAgICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4pCisKKyAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fc3ltbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3Muc3ltbGluaykKKworICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKG9zLmxpbmspCisKKyAgICBkZWYgX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKHNlbGYsIGZ1bmMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIGZ1bmMoKnRlc3RfZm5zKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKKyAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVvcGVuZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5maWxlbm8oKSwgYi5maWxlbm8oKSkpCisKIGNsYXNzIFRlc3RHZW5lcmljVGVzdChHZW5lcmljVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgSXNzdWUgMTY4NTI6IEdlbmVyaWNUZXN0IGNhbid0IGluaGVyaXQgZnJvbSB1bml0dGVzdC5UZXN0Q2FzZQogICAgICMgZm9yIHRlc3QgZGlzY292ZXJ5IHB1cnBvc2VzOyBDb21tb25UZXN0IGluaGVyaXRzIGZyb20gR2VuZXJpY1Rlc3QKICAgICAjIGFuZCBpcyBvbmx5IG1lYW50IHRvIGJlIGluaGVyaXRlZCBieSBvdGhlcnMuCiAgICAgcGF0aG1vZHVsZSA9IGdlbmVyaWNwYXRoCiAKKwogIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCiAjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KIApAQCAtMzIyLDcgKzQwMyw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkIHN1cHBvcnQuVEVTVEZOX05PTkFTQ0lJIikKIAotICAgICAgICAjIFRlc3Qgbm9uLUFTQ0lJLCBub24tVVRGOCBieXRlcyBpbiB0aGUgcGF0aC4KICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QobmFtZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQppbmRleCA0OGNhOTRlLi5iZWVhNzZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKQEAgLTEsMzggKzEsNDAgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcywgZ2V0YXJnc19rZXl3b3JkX29ubHkKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRhcmdzX0wgPSBOb25lICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKIAotIiIiCi0+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgotPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KLT4KLT4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKLT4KLT4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAotPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKLT4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKLT4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCi0+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKLT4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAotCi0KLT4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAotPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCi0KLT4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCi0+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCi0KLT4gTm90ZXM6Ci0+Ci0+ICogTmV3IGZvcm1hdCBjb2Rlcy4KLT4KLT4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQotPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgotCi1QbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAotbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCi0iIiIKKyMgPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKyMgPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKyMgPgorIyA+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCisjID4KKyMgPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCisjID4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCisjID4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKyMgPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKKyMgPiBrICogdW5zaWduZWQgbG9uZyBub25lCisjID4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorIworIworIyA+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKyMgPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisjCisjID4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCisjID4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKKyMKKyMgPiBOb3RlczoKKyMgPgorIyA+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKyMgPgorIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKyMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorIworIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgorIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIGxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgogCiBMQVJHRSA9IDB4N0ZGRkZGRkYKIFZFUllfTEFSR0UgPSAweEZGMDAwMDEyMTIxMjEyMTIxMjEyMTI0MgpAQCAtMTg0LDYgKzE4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCitAdW5pdHRlc3Quc2tpcElmKGdldGFyZ3NfTCBpcyBOb25lLCAnUFlfTE9OR19MT05HIGlzIG5vdCBhdmFpbGFibGUnKQogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKQEAgLTUzNiwyNCArNTM5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBTaWduZWRfVGVzdENhc2UsCi0gICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBCb29sZWFuX1Rlc3RDYXNlLAotICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRPbmx5X1Rlc3RDYXNlLAotICAgICAgICBCeXRlc19UZXN0Q2FzZSwKLSAgICAgICAgVW5pY29kZV9UZXN0Q2FzZSwKLSAgICBdCi0gICAgdHJ5OgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb25nTG9uZ19UZXN0Q2FzZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMxYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5CkBAIC0wLDAgKzEsMTU1IEBACitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwordHJ5OgorICAgIGltcG9ydCB0ZXJtaW9zCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGVybWlvcyA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgcHdkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcHdkID0gTm9uZQorCitAbW9jay5wYXRjaCgnb3MuZW52aXJvbicpCitjbGFzcyBHZXRwYXNzR2V0dXNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdXNlcm5hbWVfdGFrZXNfdXNlcm5hbWVfZnJvbV9lbnYoc2VsZiwgZW52aXJvbik6CisgICAgICAgIGV4cGVjdGVkX25hbWUgPSAnc29tZV9uYW1lJworICAgICAgICBlbnZpcm9uLmdldC5yZXR1cm5fdmFsdWUgPSBleHBlY3RlZF9uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbmFtZSwgZ2V0cGFzcy5nZXR1c2VyKCkpCisKKyAgICBkZWYgdGVzdF91c2VybmFtZV9wcmlvcml0aWVzX29mX2Vudl92YWx1ZXMoc2VsZiwgZW52aXJvbik6CisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0cGFzcy5nZXR1c2VyKCkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOiAjIGluIGNhc2UgdGhlcmUncyBubyBwd2QgbW9kdWxlCisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBlbnZpcm9uLmdldC5jYWxsX2FyZ3NfbGlzdCwKKyAgICAgICAgICAgIFttb2NrLmNhbGwoeCkgZm9yIHggaW4gKCdMT0dOQU1FJywgJ1VTRVInLCAnTE5BTUUnLCAnVVNFUk5BTUUnKV0pCisKKyAgICBkZWYgdGVzdF91c2VybmFtZV9mYWxsc19iYWNrX3RvX3B3ZChzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZXhwZWN0ZWRfbmFtZSA9ICdzb21lX25hbWUnCisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgaWYgcHdkOgorICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5nZXR1aWQnKSBhcyB1aWQsIFwKKyAgICAgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgncHdkLmdldHB3dWlkJykgYXMgZ2V0cHc6CisgICAgICAgICAgICAgICAgdWlkLnJldHVybl92YWx1ZSA9IDQyCisgICAgICAgICAgICAgICAgZ2V0cHcucmV0dXJuX3ZhbHVlID0gW2V4cGVjdGVkX25hbWVdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cGFzcy5nZXR1c2VyKCkpCisgICAgICAgICAgICAgICAgZ2V0cHcuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgZ2V0cGFzcy5nZXR1c2VyKQorCisKK2NsYXNzIEdldHBhc3NSYXdpbnB1dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZmx1c2hlc19zdHJlYW1fYWZ0ZXJfcHJvbXB0KHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAxNzAzCisgICAgICAgIHN0cmVhbSA9IG1vY2suTW9jayhzcGVjPVN0cmluZ0lPKQorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCdpbnB1dF9zdHJpbmcnKQorICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQoJ3NvbWVfcHJvbXB0Jywgc3RyZWFtLCBpbnB1dD1pbnB1dCkKKyAgICAgICAgc3RyZWFtLmZsdXNoLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X3VzZXNfc3RkZXJyX2FzX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJ2lucHV0X3N0cmluZycpCisgICAgICAgIHByb21wdCA9ICdzb21lX3Byb21wdCcKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdzeXMuc3RkZXJyJykgYXMgc3RkZXJyOgorICAgICAgICAgICAgZ2V0cGFzcy5fcmF3X2lucHV0KHByb21wdCwgaW5wdXQ9aW5wdXQpCisgICAgICAgICAgICBzdGRlcnIud3JpdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgocHJvbXB0KQorCisgICAgQG1vY2sucGF0Y2goJ3N5cy5zdGRpbicpCisgICAgZGVmIHRlc3RfdXNlc19zdGRpbl9hc19kZWZhdWx0X2lucHV0KHNlbGYsIG1vY2tfaW5wdXQpOgorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLnJldHVybl92YWx1ZSA9ICdpbnB1dF9zdHJpbmcnCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dChzdHJlYW09U3RyaW5nSU8oKSkKKyAgICAgICAgbW9ja19pbnB1dC5yZWFkbGluZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yYWlzZXNfb25fZW1wdHlfaW5wdXQoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBnZXRwYXNzLl9yYXdfaW5wdXQsIGlucHV0PWlucHV0KQorCisgICAgZGVmIHRlc3RfdHJpbXNfdHJhaWxpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygndGVzdFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGVzdCcsIGdldHBhc3MuX3Jhd19pbnB1dChpbnB1dD1pbnB1dCkpCisKKworIyBTb21lIG9mIHRoZXNlIHRlc3RzIGFyZSBhIGJpdCB3aGl0ZS1ib3guICBUaGUgZnVuY3Rpb25hbCByZXF1aXJlbWVudCBpcyB0aGF0CisjIHRoZSBwYXNzd29yZCBpbnB1dCBiZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSB0dHksIGFuZCB0aGF0IGl0IG5vdCBiZSBlY2hvZWQKKyMgb24gdGhlIHNjcmVlbiwgdW5sZXNzIHdlIGFyZSBmYWxsaW5nIGJhY2sgdG8gc3RkZXJyL3N0ZGluLgorCisjIFNvbWUgb2YgdGhlc2UgbWlnaHQgcnVuIG9uIHBsYXRmb3JtcyB3aXRob3V0IHRlcm1pb3MsIGJ1dCBwbGF5IGl0IHNhZmUuCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0ZXJtaW9zLCAndGVzdHMgcmVxdWlyZSBzeXN0ZW0gd2l0aCB0ZXJtaW9zJykKK2NsYXNzIFVuaXhHZXRwYXNzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91c2VzX3R0eV9kaXJlY3RseShzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpIGFzIGZpbGVpbywgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSBhcyB0ZXh0aW86CisgICAgICAgICAgICAjIEJ5IHNldHRpbmcgb3BlbidzIHJldHVybiB2YWx1ZSB0byBOb25lIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsCisgICAgICAgICAgICAjIHNraXAgY29kZSB3ZSBkb24ndCBjYXJlIGFib3V0IGluIHRoaXMgdGVzdC4gIFdlIGNhbiBtb2NrIHRoaXMgb3V0CisgICAgICAgICAgICAjIGZ1bGx5IGlmIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiB3b3JrcyBkaWZmZXJlbnRseS4KKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnL2Rldi90dHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1JEV1IgfCBvcy5PX05PQ1RUWSkKKyAgICAgICAgICAgIGZpbGVpby5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChvcGVuLnJldHVybl92YWx1ZSwgJ3crJykKKyAgICAgICAgICAgIHRleHRpby5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmaWxlaW8ucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIHRlc3RfcmVzZXRzX3Rlcm1pb3Moc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNnZXRhdHRyJykgYXMgdGNnZXRhdHRyLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y3NldGF0dHInKSBhcyB0Y3NldGF0dHI6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIGZha2VfYXR0cnMgPSBbMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTVdCisgICAgICAgICAgICB0Y2dldGF0dHIucmV0dXJuX3ZhbHVlID0gbGlzdChmYWtlX2F0dHJzKQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgdGNzZXRhdHRyLmFzc2VydF9jYWxsZWRfd2l0aCgzLCBtb2NrLkFOWSwgZmFrZV9hdHRycykKKworICAgIGRlZiB0ZXN0X2ZhbGxzX2JhY2tfdG9fZmFsbGJhY2tfaWZfdGVybWlvc19yYWlzZXMoc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSBhcyBmaWxlaW8sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5UZXh0SU9XcmFwcGVyJykgYXMgdGV4dGlvLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNzZXRhdHRyJykgYXMgdGNzZXRhdHRyLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnZ2V0cGFzcy5mYWxsYmFja19nZXRwYXNzJykgYXMgZmFsbGJhY2s6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIGZpbGVpby5yZXR1cm5fdmFsdWUgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgIHRjc2V0YXR0ci5zaWRlX2VmZmVjdCA9IHRlcm1pb3MuZXJyb3IKKyAgICAgICAgICAgIGdldHBhc3MudW5peF9nZXRwYXNzKCkKKyAgICAgICAgICAgIGZhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdQYXNzd29yZDogJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRpby5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9mbHVzaGVzX3N0cmVhbV9hZnRlcl9pbnB1dChzZWxmKToKKyAgICAgICAgIyBpc3N1ZSA3MjA4CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdpby5GaWxlSU8nKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNnZXRhdHRyJyksIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjc2V0YXR0cicpOgorICAgICAgICAgICAgb3Blbi5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgICAgICBtb2NrX3N0cmVhbSA9IG1vY2suTW9jayhzcGVjPVN0cmluZ0lPKQorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3Moc3RyZWFtPW1vY2tfc3RyZWFtKQorICAgICAgICAgICAgbW9ja19zdHJlYW0uZmx1c2guYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2ZhbGxzX2JhY2tfdG9fc3RkaW4oc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnb3Mub3BlbicpIGFzIG9zX29wZW4sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdzeXMuc3RkaW4nLCBzcGVjPVN0cmluZ0lPKSBhcyBzdGRpbjoKKyAgICAgICAgICAgIG9zX29wZW4uc2lkZV9lZmZlY3QgPSBJT0Vycm9yCisgICAgICAgICAgICBzdGRpbi5maWxlbm8uc2lkZV9lZmZlY3QgPSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoZ2V0cGFzcy5HZXRQYXNzV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIGdldHBhc3MudW5peF9nZXRwYXNzKCkKKyAgICAgICAgICAgIHN0ZGluLnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dhcm5pbmcnLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1Bhc3N3b3JkOicsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKaW5kZXggZWI5YWViNS4uYTVhYjhkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtMTY5LDYgKzE2OSwyOCBAQAogICAgICAgICBlcShnbG9iLmdsb2IoJ1xcXFwqXFwqXFwnKSwgW10pCiAgICAgICAgIGVxKGdsb2IuZ2xvYihiJ1xcXFwqXFwqXFwnKSwgW10pCiAKKyAgICBkZWYgY2hlY2tfZXNjYXBlKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKGFyZyksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKG9zLmZzZW5jb2RlKGFyZykpLCBvcy5mc2VuY29kZShleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19lc2NhcGUKKyAgICAgICAgY2hlY2soJ2FiYycsICdhYmMnKQorICAgICAgICBjaGVjaygnWycsICdbW10nKQorICAgICAgICBjaGVjaygnPycsICdbP10nKQorICAgICAgICBjaGVjaygnKicsICdbKl0nKQorICAgICAgICBjaGVjaygnW1tfLyo/Ki9fXV0nLCAnW1tdW1tdXy9bKl1bP11bKl0vX11dJykKKyAgICAgICAgY2hlY2soJy9bW18vKj8qL19dXS8nLCAnL1tbXVtbXV8vWypdWz9dWypdL19dXS8nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0IikKKyAgICBkZWYgdGVzdF9lc2NhcGVfd2luZG93cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnPzo/JywgJz86Wz9dJykKKyAgICAgICAgY2hlY2soJyo6KicsICcqOlsqXScpCisgICAgICAgIGNoZWNrKHInXFw/XGM6XD8nLCByJ1xcP1xjOlxbP10nKQorICAgICAgICBjaGVjayhyJ1xcKlwqXConLCByJ1xcKlwqXFsqXScpCisgICAgICAgIGNoZWNrKCcvLz8vYzovPycsICcvLz8vYzovWz9dJykKKyAgICAgICAgY2hlY2soJy8vKi8qLyonLCAnLy8qLyovWypdJykKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChHbG9iVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA1ZWFjOTIxLi5hZWFmYzY1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKQEAgLTEzMSw2ICsxMzEsMTQgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgenR4dDogYnJlYWsKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgYidhJyoyMDEpCiAKKyAgICBkZWYgdGVzdF9leGNsdXNpdmVfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGExICogNTApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3hiJykKKwogICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX3JlYWRlcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzQ3MTogYSBHemlwRmlsZSBjYW4gYmUgd3JhcHBlZCBpbiBhIEJ1ZmZlcmVkUmVhZGVyIGZvcgogICAgICAgICAjIHBlcmZvcm1hbmNlLgpAQCAtMjA2LDYgKzIxNCw5IEBACiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneCcpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICd4YicpCiAKICAgICBkZWYgdGVzdF8xNjQ3NDg0KHNlbGYpOgogICAgICAgICBmb3IgbW9kZSBpbiAoJ3diJywgJ3JiJyk6CkBAIC0zODksNiArNDAwLDIwIEBACiAgICAgICAgICAgICBkYXRhYyA9IGd6aXAuY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3ppcC5kZWNvbXByZXNzKGRhdGFjKSwgZGF0YSkKIAorICAgIGRlZiB0ZXN0X3JlYWRfdHJ1bmNhdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gZGF0YTEqNTAKKyAgICAgICAgIyBEcm9wIHRoZSBDUkMgKDQgYnl0ZXMpIGFuZCBmaWxlIHNpemUgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBnemlwLmNvbXByZXNzKGRhdGEpWzotOF0KKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSAxMC1ieXRlIGhlYWRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgMTApOgorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCiAgICAgZGVmIHRlc3RfcmVhZF93aXRoX2V4dHJhKHNlbGYpOgogICAgICAgICAjIEd6aXAgZGF0YSB3aXRoIGFuIGV4dHJhIGZpZWxkCiAgICAgICAgIGd6ZGF0YSA9IChiJ1x4MWZceDhiXHgwOFx4MDRceGIyXHgxN2NRXHgwMlx4ZmYnCkBAIC00MDAsMzUgKzQyNSw1OSBAQAogY2xhc3MgVGVzdE9wZW4oQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGIiKQorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGIiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCkKKwogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGltcGxpY2l0IGJpbmFyeSBtb2RlcyAobm8gImIiIG9yICJ0IiBpbiBtb2RlIHN0cmluZykuCiAgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExICogNTAKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkICogMikKIAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIngiKQorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfdGV4dF9tb2RlcyhzZWxmKToKICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEuZGVjb2RlKCJhc2NpaSIpICogNTAKICAgICAgICAgdW5jb21wcmVzc2VkX3JhdyA9IHVuY29tcHJlc3NlZC5yZXBsYWNlKCJcbiIsIG9zLmxpbmVzZXApCkBAIC00NjMsNiArNTEyLDggQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAid2J0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieGJ0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQppbmRleCBlM2FiNmU0Li5mNjY1N2JkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CkBAIC0xMiw2ICsxMiw0MCBAQAogCiBJU182NEJJVCA9IHN5cy5tYXhzaXplID4gMioqMzIKIAorZGVmIGxjZyh4LCBsZW5ndGg9MTYpOgorICAgICIiIkxpbmVhciBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yIiIiCisgICAgaWYgeCA9PSAwOgorICAgICAgICByZXR1cm4gYnl0ZXMobGVuZ3RoKQorICAgIG91dCA9IGJ5dGVhcnJheShsZW5ndGgpCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuZ3RoKToKKyAgICAgICAgeCA9ICgyMTQwMTMgKiB4ICsgMjUzMTAxMSkgJiAweDdmZmZmZmZmCisgICAgICAgIG91dFtpXSA9ICh4ID4+IDE2KSAmIDB4ZmYKKyAgICByZXR1cm4gYnl0ZXMob3V0KQorCitkZWYgcHlzaXBoYXNoKHVpbnQ2NCk6CisgICAgIiIiQ29udmVydCBTaXBIYXNoMjQgb3V0cHV0IHRvIFB5X2hhc2hfdAorICAgICIiIgorICAgIGFzc2VydCAwIDw9IHVpbnQ2NCA8ICgxIDw8IDY0KQorICAgICMgc2ltcGxlIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnQ2NAorICAgIGlmIHVpbnQ2NCA+ICgxIDw8IDYzKSAtIDE6CisgICAgICAgIGludDY0ID0gdWludDY0IC0gKDEgPDwgNjQpCisgICAgZWxzZToKKyAgICAgICAgaW50NjQgPSB1aW50NjQKKyAgICAjIG1hbmdsZSB1aW50NjQgdG8gdWludDMyCisgICAgdWludDMyID0gKHVpbnQ2NCBeIHVpbnQ2NCA+PiAzMikgJiAweGZmZmZmZmZmCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDMyCisgICAgaWYgdWludDMyID4gKDEgPDwgMzEpIC0gMToKKyAgICAgICAgaW50MzIgPSB1aW50MzIgLSAoMSA8PCAzMikKKyAgICBlbHNlOgorICAgICAgICBpbnQzMiA9IHVpbnQzMgorICAgIHJldHVybiBpbnQzMiwgaW50NjQKKworZGVmIHNraXBfdW5sZXNzX2ludGVybmFsaGFzaCh0ZXN0KToKKyAgICAiIiJTa2lwIGRlY29yYXRvciBmb3IgdGVzdHMgdGhhdCBkZXBlbmQgb24gU2lwSGFzaDI0IG9yIEZOViIiIgorICAgIG9rID0gc3lzLmhhc2hfaW5mby5hbGdvcml0aG0gaW4geyJmbnYiLCAic2lwaGFzaDI0In0KKyAgICBtc2cgPSAiUmVxdWlyZXMgU2lwSGFzaDI0IG9yIEZOViIKKyAgICByZXR1cm4gdGVzdCBpZiBvayBlbHNlIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KQorCiAKIGNsYXNzIEhhc2hFcXVhbGl0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTM4LDcgKzE3Miw3IEBACiAgICAgIyBhbiBvYmplY3QgdG8gYmUgdGVzdGVkCiAKICAgICBkZWYgZ2V0X2hhc2hfY29tbWFuZChzZWxmLCByZXByXyk6Ci0gICAgICAgIHJldHVybiAncHJpbnQoaGFzaCglcykpJyAlIHJlcHJfCisgICAgICAgIHJldHVybiAncHJpbnQoaGFzaChldmFsKCVzLmRlY29kZSgidXRmLTgiKSkpKScgJSByZXByXy5lbmNvZGUoInV0Zi04IikKIAogICAgIGRlZiBnZXRfaGFzaChzZWxmLCByZXByXywgc2VlZD1Ob25lKToKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKQEAgLTE2MSwxMiArMTk1LDYzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnVuMSwgcnVuMikKIAogY2xhc3MgU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMoSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgcmVwcl8gPSBOb25lCisgICAgcmVwcl9sb25nID0gTm9uZQorCisgICAgIyAzMmJpdCBsaXR0bGUsIDY0Yml0IGxpdHRsZSwgMzJiaXQgYmlnLCA2NGJpdCBiaWcKKyAgICBrbm93bl9oYXNoZXMgPSB7CisgICAgICAgICdkamJhMzN4JzogWyAjIG9ubHkgdXNlZCBmb3Igc21hbGwgc3RyaW5ncworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTkzNDg1OTYwLCAxOTM0ODU5NjAsICAxOTM0ODU5NjAsIDE5MzQ4NTk2MF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTY3ODk2NjE5NiwgNTczNzYzNDI2MjYzMjIzMzcyLCAtODIwNDg5Mzg4LCAtNDI4MjkwNTgwNDgyNjAzOTY2NV0sCisgICAgICAgICAgICBdLAorICAgICAgICAnc2lwaGFzaDI0JzogWworICAgICAgICAgICAgIyBOT1RFOiBQeVVDUzIgbGF5b3V0IGRlcGVuZHMgb24gZW5kaWFuZXNzCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFsxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4LCAxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiYycKKyAgICAgICAgICAgIFsyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2LCAyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWy0xNzQ1MjE1MzEzLCA0NDM2NzE5NTg4ODkyODc2OTc1LCAtMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NV0sCisgICAgICAgICAgICAjIHNlZWQgMCwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbNDkzNTcwODA2LCA1NzQ5OTg2NDg0MTg5NjEyNzkwLCAtMTAwNjM4MTU2NCwgLTU5MTUxMTE0NTAxOTk0Njg1NDBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFstMTY3NzExMDgxNiwgLTI5NDc5ODEzNDIyMjc3MzgxNDQsIC0xODYwMjA3NzkzLCAtNDI5NjY5OTIxNzY1MjUxNjAxN10sCisgICAgICAgIF0sCisgICAgICAgICdmbnYnOiBbCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFstMTYwMDkyNTUzMywgMTQ1MzA3OTcyOTE4ODA5ODIxMSwgLTE2MDA5MjU1MzMsCisgICAgICAgICAgICAgMTQ1MzA3OTcyOTE4ODA5ODIxMV0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTIwNjA3Njc5OSwgLTQ0MTA5MTE1MDIzMDM4Nzg1MDksIC0xMDI0MDE0NDU3LAorICAgICAgICAgICAgIC0zNTcwMTUwOTY5NDc5OTk0MTMwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWzgxMTEzNjc1MSwgLTUwNDYyMzAwNDkzNzYxMTg3NDYsIC03NzIwODA1MyAsCisgICAgICAgICAgICAgLTQ3NzkwMjk2MTUyODEwMTk2NjZdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ0NDAyODE3LCA4OTk4Mjk3NTc5ODQ1OTg3NDMxLCAtMTk1NjI0MDMzMSwKKyAgICAgICAgICAgICAtNzgyNjk3ODg4NjE0MDQ3ODg3XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTI4MzA2NjM2NSwgLTQ1NzY3Mjk4ODM4MjQ2MDE1NDMsIC0yNzE4NzE0MDcsIE5vbmVdLAorICAgICAgICBdCisgICAgfQorCisgICAgZGVmIGdldF9leHBlY3RlZF9oYXNoKHNlbGYsIHBvc2l0aW9uLCBsZW5ndGgpOgorICAgICAgICBpZiBsZW5ndGggPCBzeXMuaGFzaF9pbmZvLmN1dG9mZjoKKyAgICAgICAgICAgIGFsZ29yaXRobSA9ICJkamJhMzN4IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxnb3JpdGhtID0gc3lzLmhhc2hfaW5mby5hbGdvcml0aG0KKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMSBpZiBJU182NEJJVCBlbHNlIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydChzeXMuYnl0ZW9yZGVyID09ICdiaWcnKQorICAgICAgICAgICAgcGxhdGZvcm0gPSAzIGlmIElTXzY0QklUIGVsc2UgMgorICAgICAgICByZXR1cm4gc2VsZi5rbm93bl9oYXNoZXNbYWxnb3JpdGhtXVtwb3NpdGlvbl1bcGxhdGZvcm1dCisKICAgICBkZWYgdGVzdF9udWxsX2hhc2goc2VsZik6CiAgICAgICAgICMgUFlUSE9OSEFTSFNFRUQ9MCBkaXNhYmxlcyB0aGUgcmFuZG9taXplZCBoYXNoCi0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAxNDUzMDc5NzI5MTg4MDk4MjExCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IC0xNjAwOTI1NTMzCisgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgwLCAzKQogCiAgICAgICAgICMgUmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQ6CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfKSwga25vd25faGFzaF9vZl9vYmopCkBAIC0xNzQsMzkgKzI1OSw1MyBAQAogICAgICAgICAjIEl0IGNhbiBhbHNvIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIHNlZWQgdG8gMDoKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9MCksIGtub3duX2hhc2hfb2Zfb2JqKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2ZpeGVkX2hhc2goc2VsZik6CiAgICAgICAgICMgdGVzdCBhIGZpeGVkIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGhhc2gKICAgICAgICAgIyBOb3RlIHRoYXQgYWxsIHR5cGVzIHNoYXJlIHRoZSBzYW1lIHZhbHVlczoKLSAgICAgICAgaWYgSVNfNjRCSVQ6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtNDQxMDkxMTUwMjMwMzg3ODUwOQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBoID0gLTM1NzAxNTA5Njk0Nzk5OTQxMzAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6Ci0gICAgICAgICAgICAgICAgaCA9IC0yMDYwNzY3OTkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0xMDI0MDE0NDU3CisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDEsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTQyKSwgaCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF9sb25nX2ZpeGVkX2hhc2goc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVwcl9sb25nIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMiwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfbG9uZywgc2VlZD00MiksIGgpCisKKwogY2xhc3MgU3RySGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcignYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKCdhYmNkZWZnaGlqaycpCisgICAgcmVwcl91Y3MyID0gcmVwcignw6TDuuKIkeKEhycpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goIiIpLCAwKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAorICAgIGRlZiB0ZXN0X3VjczJfc3RyaW5nKHNlbGYpOgorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgzLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9MCksIGgpCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfdWNzMiwgc2VlZD00MiksIGgpCisKIGNsYXNzIEJ5dGVzSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcmVwcl8gPSByZXByKGInYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKGInYWJjZGVmZ2hpamsnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGIiIiksIDApCiAKIGNsYXNzIE1lbW9yeXZpZXdIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gIm1lbW9yeXZpZXcoYidhYmMnKSIKKyAgICByZXByX2xvbmcgPSAibWVtb3J5dmlldyhiJ2FiY2RlZmdoaWprJykiCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gobWVtb3J5dmlldyhiIiIpKSwgMCkKIApAQCAtMjI0LDUgKzMyMywyMiBAQAogICAgIHJlcHJfID0gcmVwcihkYXRldGltZS50aW1lKDApKQogCiAKK2NsYXNzIEhhc2hEaXN0cmlidXRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYXNoX2Rpc3RyaWJ1dGlvbihzZWxmKToKKyAgICAgICAgIyBjaGVjayBmb3IgaGFzaCBjb2xsaXNpb24KKyAgICAgICAgYmFzZSA9ICJhYmNkZWZnaGFiY2RlZmciCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihiYXNlKSk6CisgICAgICAgICAgICBwcmVmaXggPSBiYXNlWzppXQorICAgICAgICAgICAgczE1ID0gc2V0KCkKKyAgICAgICAgICAgIHMyNTUgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICBoID0gaGFzaChwcmVmaXggKyBjaHIoYykpCisgICAgICAgICAgICAgICAgczE1LmFkZChoICYgMHhmKQorICAgICAgICAgICAgICAgIHMyNTUuYWRkKGggJiAweGZmKQorICAgICAgICAgICAgIyBTaXBIYXNoMjQgZGlzdHJpYnV0aW9uIGRlcGVuZHMgb24ga2V5LCB1c3VhbGx5ID4gNjAlCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHMxNSksIDgsIHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczI1NSksIDEyOCwgcHJlZml4KQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGYzMzg1ZjYuLjRhNWVhN2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCwxMCBAQAogY2xhc3MgSGFzaExpYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzdXBwb3J0ZWRfaGFzaF9uYW1lcyA9ICggJ21kNScsICdNRDUnLCAnc2hhMScsICdTSEExJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTIyNCcsICdTSEEyMjQnLCAnc2hhMjU2JywgJ1NIQTI1NicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzODQnLCAnU0hBMzg0JywgJ3NoYTUxMicsICdTSEE1MTInICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzIyNCcsICdzaGEzXzI1NicsICdzaGEzXzM4NCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzUxMicsICdTSEEzXzIyNCcsICdTSEEzXzI1NicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzM4NCcsICdTSEEzXzUxMicgKQogCiAgICAgIyBJc3N1ZSAjMTQ2OTM6IGZhbGxiYWNrIG1vZHVsZXMgYXJlIGFsd2F5cyBjb21waWxlZCB1bmRlciBQT1NJWAogICAgIF93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQgPSBvcy5uYW1lID09ICdwb3NpeCcgb3IgQ09NUElMRURfV0lUSF9QWURFQlVHCkBAIC03MiwyNyArNzcsMzcgQEAKICAgICAgICAgaWYgX2hhc2hsaWI6CiAgICAgICAgICAgICAjIFRoZXNlIHR3byBhbGdvcml0aG1zIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoaXMgbW9kdWxlCiAgICAgICAgICAgICAjIGlzIGNvbXBpbGVkLiAgSWYgbm90LCBzb21ldGhpbmcgd2FzIGNvbXBpbGVkIHdyb25nLgotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpCi0gICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpKQogICAgICAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycrYWxnb3JpdGhtLCBOb25lKQogICAgICAgICAgICAgICAgIGlmIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yKQogCisgICAgICAgIGRlZiBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLCAiX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciIpKG5hbWUpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdLmFkZChjb25zdHJ1Y3RvcikKKwogICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCiAgICAgICAgIGlmIF9tZDU6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5tZDUpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKICAgICAgICAgX3NoYTEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMScpCiAgICAgICAgIGlmIF9zaGExOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMSddLmFkZChfc2hhMS5zaGExKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTEnKQogICAgICAgICBfc2hhMjU2ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTI1NicpCiAgICAgICAgIGlmIF9zaGEyNTY6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyMjQnXS5hZGQoX3NoYTI1Ni5zaGEyMjQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyNTYnXS5hZGQoX3NoYTI1Ni5zaGEyNTYpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjI0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyNTYnKQogICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCiAgICAgICAgIGlmIF9zaGE1MTI6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMzg0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGE1MTInKQorICAgICAgICBfc2hhMyA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEzJykKKyAgICAgICAgaWYgX3NoYTM6CisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM18yMjQnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTNfMjU2JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzXzM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM181MTInKQogCiAgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMjEsOCArMTM2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaGxpYi5uZXcsIDEpCiAKICAgICBkZWYgdGVzdF9nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBoYXNobGliLl9fZGljdF9fWwotICAgICAgICAgICAgICAgICdfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yJ10KKyAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcicpCisgICAgICAgIGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ3Rlc3QnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQpAQCAtMTMwLDYgKzE0Nyw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgVGhpcyBmb3JjZXMgYW4gSW1wb3J0RXJyb3IgZm9yICJpbXBvcnQgX21kNSIgc3RhdGVtZW50cwogICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gTm9uZQorICAgICAgICAjIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlLmNsZWFyKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICdtZDUnKQogICAgICAgICBmaW5hbGx5OgpAQCAtMTM4LDEzICsxNTcsMjMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfbWQ1J10KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgMykKKyAgICAgICAgY29uc3RydWN0b3IgPSBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25zdHJ1Y3RvciwgX21kNS5tZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUpLCBbJ01ENScsICdtZDUnXSkKIAogICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKICAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKICAgICAgICAgICAgIGggPSBjb25zKCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKSwgbmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhzdHIoaC5kaWdlc3QoKSksIGguaGV4ZGlnZXN0KCkpCiAKKyAgICBkZWYgdGVzdF9uYW1lX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGggPSBjb25zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaC5uYW1lLCBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhhc2hsaWIubmV3KGgubmFtZSkubmFtZSkKKwogICAgIGRlZiB0ZXN0X2xhcmdlX3VwZGF0ZShzZWxmKToKICAgICAgICAgYWFzID0gYidhJyAqIDEyOAogICAgICAgICBiZWVzID0gYidiJyAqIDEyNwpAQCAtMjA1LDYgKzIzNCwxMCBAQAogICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTI1NicpCiAgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhMzg0JykKICAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGE1MTInKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfMjI0JykKKyAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGEzXzI1NicpCisgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhM18zODQnKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfNTEyJykKIAogICAgIGRlZiBjaGVja19ibG9ja3NpemVfbmFtZShzZWxmLCBuYW1lLCBibG9ja19zaXplPTAsIGRpZ2VzdF9zaXplPTApOgogICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdCkBAIC0yMTMsOCArMjQ2LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ibG9ja19zaXplLCBibG9ja19zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZGlnZXN0KCkpLCBkaWdlc3Rfc2l6ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLmxvd2VyKCksIG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pLmxvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICMgc3BsaXQgZm9yIHNoYTNfNTEyIC8gX3NoYTMuc2hhMyBvYmplY3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pKQogCiAgICAgZGVmIHRlc3RfYmxvY2tzaXplX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ21kNScsIDY0LCAxNikKQEAgLTIyMyw2ICsyNTcsMTAgQEAKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhMjU2JywgNjQsIDMyKQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzODQnLCAxMjgsIDQ4KQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGE1MTInLCAxMjgsIDY0KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzIyNCcsIE5vdEltcGxlbWVudGVkLCAyOCkKKyAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhM18yNTYnLCBOb3RJbXBsZW1lbnRlZCwgMzIpCisgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTNfMzg0JywgTm90SW1wbGVtZW50ZWQsIDQ4KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzUxMicsIE5vdEltcGxlbWVudGVkLCA2NCkKIAogICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1XzAoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ21kNScsIGInJywgJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlJykKQEAgLTM1OCw2ICszOTYsMTA4IEBACiAgICAgICAgICAgImU3MTg0ODNkMGNlNzY5NjQ0ZTJlNDJjN2JjMTViNDYzOGUxZjk4YjEzYjIwNDQyODU2MzJhODAzYWZhOTczZWIiKwogICAgICAgICAgICJkZTBmZjI0NDg3N2VhNjBhNGNiMDQzMmNlNTc3YzMxYmViMDA5YzVjMmM0OWFhMmU0ZWFkYjIxN2FkOGNjMDliIikKIAorICAgICMgU0hBLTMgZmFtaWx5CisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGIiIiwKKyAgICAgICAgICAiRjcxODM3NTAyQkE4RTEwODM3QkREOEQzNjVBREI4NTU5MTg5NTYwMkZDNTUyQjQ4QjczOTBBQkQiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkE5Q0FCNTlFQjQwQTEwQjI0NjI5MEYyRDYwODZFMzJFMzY4OUZBRjFEMjZCNDcwQzg5OUYyODAyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KCI0MUZCIiksCisgICAgICAgICAgIjYxNUJBMzY3QUZEQzM1QUFDMzk3QkM3RUI1RDU4RDEwNkE3MzRCMjQ5ODZENUQ5NzhGRUZENjJDIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjYyQjEwRjFCNjIzNkVCQzJEQTcyOTU3NzQyQThENEU0OEUyMTNCNUY4OTM0NjA0QkZENEQyQzNBIikKKworICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF9odWdlKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyArIDU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBiJ0EnKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNThlZjYwMDU3YzlkZGRiNmE4NzQ3N2U5YWNlNWEyNmYwZDlkYjAxODgxY2Y5YjEwYTlmOGMyMjQnKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yNTZfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yNTYnLCBiIiIsCisgICAgICAgICAgIkM1RDI0NjAxODZGNzIzM0M5MjdFN0RCMkRDQzcwM0MwRTUwMEI2NTNDQTgyMjczQjdCRkFEODA0NUQ4NUE0NzAiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkVFQUQ2REJGQzczNDBBNTZDQUVEQzA0NDY5NkExNjg4NzA1NDlBNkE3RjZGNTY5NjFFODRBNTRCRDk5NzBCOEEiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiQThFQUNFREE0RDQ3QjMyODFBNzk1QUQ5RTFFQTIxMjJCNDA3QkFGOUFBQkNCOUUxOEI1NzE3Qjc4NzM1MzdEMiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjU2XzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjU2JywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICJDRTg3QTUxNzNCRkZEOTIzOTkyMjE2NThGODAxRDQ1QzI5NEQ5MDA2RUU5RjNGOUQ0MTlDOEQ0Mjc3NDhEQzQxIikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGIiIiwKKyAgICAgICAgICAiMkMyMzE0NkE2M0EyOUFDRjk5RTczQjg4RjhDMjRFQUE3REM2MEFBNzcxNzgwQ0NDMDA2QUZCRkE4RkUyNDc5QiIrCisgICAgICAgICAgIjJERDJCMjEzNjIzMzc0NDFBQzEyQjUxNTkxMTk1N0ZGIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICIxQjg0RTYyQTQ2RTVBMjAxODYxNzU0QUY1REM5NUM0QTFBNjlDQUY0QTc5NkFFNDA1NjgwMTYxRTI5NTcyNjQxIisKKyAgICAgICAgICAiRjVGQTFFODY0MUQ3OTU4MzM2RUU3QjExQzU4RjczRTkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiNDk1Q0NFMjcxNENENzJDOEM1M0MzMzYzRDIyQzU4QjU1OTYwRkUyNkJFMEJGM0JCQzdBMzMxNkRENTYzQUQxRCIrCisgICAgICAgICAgIkI4NDEwRTc1RUVGRUE2NTVFMzlENDY3MEVDMEIxNzkyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjEzNTExNDUwOERENjNFMjc5RTcwOUMyNkY3ODE3QzA0ODI3NjZDREU0OTEzMkUzRURGMkVFREQ4OTk2RjRFMzUiKworICAgICAgICAgICI5NkQxODQxMDBCMzg0ODY4MjQ5RjFEOEI4RkRBQTJDOSIpCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBiIiIsCisgICAgICAgICAgIjBFQUI0MkRFNEMzQ0VCOTIzNUZDOTFBQ0ZGRTc0NkIyOUMyOUE4QzM2NkI3QzYwRTRFNjdDNDY2RjM2QTQzMDQiKworICAgICAgICAgICJDMDBGQTlDQUY5RDg3OTc2QkE0NjlCQ0JFMDY3MTNCNDM1RjA5MUVGMjc2OUZCMTYwQ0RBQjMzRDM2NzA2ODBFIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICI4NjMwQzEzQ0JEMDY2RUE3NEJCRTdGRTQ2OEZFQzFERUUxMEVEQzEyNTRGQjRDMUI3QzVGRDY5QjY0NkU0NDE2IisKKyAgICAgICAgICAiMEI4Q0UwMUQwNUEwOTA4Q0E3OTBERkIwODBGNEI1MTNCQzNCNjIyNUVDRTdBODEwMzcxNDQxQTVBQzY2NkVCOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgiNDFGQiIpLAorICAgICAgICAgICI1NTFEQTYyMzZGOEI5NkZDRTlGOTdGMTE5MEU5MDEzMjRGMEI0NUUwNkRCQkI1Q0RCODM1NUQ2RUQxREMzNEIzIisKKyAgICAgICAgICAiRjBFQUU3RENCNjg2MjJGRjIzMkZBM0NFQ0UwRDQ2MTZDREVCMzkzMUY5MzgwMzY2MkEyOERGMUNENTM1QjczMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICI1MjdEMjhFMzQxRTZCMTRGNDY4NEFEQjRCODI0QzQ5NkM2NDgyRTUxMTQ5NTY1RDNEMTcyMjY4Mjg4ODQzMDZCIisKKyAgICAgICAgICAiNTFENjE0OEE3MjYyMkMyQjc1RjVEMzUxMEI3OTlEOEJEQzAzRUFFREU0NTM2NzZBNkVDOEZFMDNBMUFEMEVBQiIpCisKKwogICAgIGRlZiB0ZXN0X2dpbChzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGluZ3Mgd29yayBmaW5lIHdpdGggYW4gaW5wdXQgbGFyZ2VyIHRoYW4gdGhlIHNpemUgcmVxdWlyZWQKICAgICAgICAgIyBmb3IgbXVsdGl0aHJlYWRlZCBvcGVyYXRpb24gKHdoaWNoIGlzIGhhcmR3aXJlZCB0byAyMDQ4KS4KQEAgLTQwNiw4ICs1NDYsOCBAQAogICAgICAgICBldmVudHMgPSBbXQogICAgICAgICBmb3IgdGhyZWFkbnVtIGluIHJhbmdlKG51bV90aHJlYWRzKToKICAgICAgICAgICAgIGNodW5rX3NpemUgPSBsZW4oZGF0YSkgLy8gKDEwKip0aHJlYWRudW0pCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSA+IDAKLSAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpID09IDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjaHVua19zaXplLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpLCAwKQogICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChldmVudCkKICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWhhc2hfaW5fY2h1bmtzLApAQCAtNDE4LDggKzU1OCw5NSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaGFzaCwgaGFzaGVyLmhleGRpZ2VzdCgpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGFzaExpYlRlc3RDYXNlKQorCitjbGFzcyBLREZUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBwYmtkZjJfdGVzdF92ZWN0b3JzID0gWworICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDEsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDIsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDQwOTYsIE5vbmUpLAorICAgICAgICAjIHRvbyBzbG93LCBpdCB0YWtlcyBvdmVyIGEgbWludXRlIG9uIGEgZmFzdCBDUFUuCisgICAgICAgICMoYidwYXNzd29yZCcsIGInc2FsdCcsIDE2Nzc3MjE2LCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmRQQVNTV09SRHBhc3N3b3JkJywgYidzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHQnLAorICAgICAgICAgNDA5NiwgLTEpLAorICAgICAgICAoYidwYXNzXDB3b3JkJywgYidzYVwwbHQnLCA0MDk2LCAxNiksCisgICAgXQorCisgICAgcGJrZGYyX3Jlc3VsdHMgPSB7CisgICAgICAgICJzaGExIjogWworICAgICAgICAgICAgIyBvZmZpY2FsIHRlc3QgdmVjdG9ycyBmcm9tIFJGQyA2MDcwCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMGM2MGM4MGY5NjFmMGU3MWYzYTliNTI0YWY2MDEyMDYyZmUwMzdhNicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdlYTZjMDE0ZGM3MmQ2ZjhjY2QxZWQ5MmFjZTFkNDFmMGQ4ZGU4OTU3JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzRiMDA3OTAxYjc2NTQ4OWFiZWFkNDlkOTI2ZjcyMWQwNjVhNDI5YzEnKSwgTm9uZSksCisgICAgICAgICAgICAjKGJ5dGVzLmZyb21oZXgoJ2VlZmUzZDYxY2Q0ZGE0ZTRlOTk0NWIzZDZiYTIxNThjMjYzNGU5ODQnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnM2QyZWVjNGZlNDFjODQ5YjgwYzhkODM2NjJjMGU0NGE4YjI5MWE5NjRjJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2YyZjA3MDM4JyksIDI1KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc1NmZhNmFhNzU1NDgwOTlkY2MzN2Q3ZjAzNDI1ZTBjMycpLCBOb25lKSxdLAorICAgICAgICAic2hhMjU2IjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzEyMGZiNmNmZmNmOGIzMmM0M2U3MjI1MjU2YzRmODM3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E4NjU0OGM5MmNjYzM1NDgwODA1OTg3Y2I3MGJlMTdiJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2FlNGQwYzk1YWY2YjQ2ZDMyZDBhZGZmOTI4ZjA2ZGQwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJhMzAzZjhlZjNjMjUxZGZkNmUyZDg1YTk1NDc0YzQzJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2M1ZTQ3OGQ1OTI4OGM4NDFhYTUzMGRiNjg0NWM0YzhkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk2Mjg5M2EwMDFjZTRlMTFhNDk2Mzg3M2FhOTgxMzRhJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdjZjgxYzY2ZmU4Y2ZjMDRkMWYzMWVjYjY1ZGFiNDA4OScKKyAgICAgICAgICAgICMgICAgICAgICAgICAgICAnZjdmMTc5ZTg5YjNiMGJjYjE3YWQxMGUzYWM2ZWJhNDYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMzQ4Yzg5ZGJjYmQzMmIyZjMyZDgxNGI4MTE2ZTg0Y2YyYjE3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM0N2ViYzE4MDAxODFjNGUyYTFmYjhkZDUzZTFjNjM1NTE4YzdkYWM0N2U5JyksIDQwKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4OWI2OWQwNTE2ZjgyOTg5M2M2OTYyMjY2NTBhODY4NycpLCBOb25lKSxdLAorICAgICAgICAic2hhNTEyIjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzg2N2Y3MGNmMWFkZTAyY2ZmMzc1MjU5OWEzYTUzZGM0YWYzNGM3YTY2OTgxNWFlNScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkNTEzNTU0ZTFjOGNmMjUyYzAyZDQ3MGEyODVhMDUwMWJhZDk5OWJmZTk0M2MwOGYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDUwMjM1ZDdkNjhiMWRhNTVlNjNmNzNiNjBhNTdmY2UnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZTFkOWMxNmFhNjgxNzA4YTQ1ZjVjN2M0ZTIxNWNlYjY2ZTAxMWEyZTlmMDA0MDcxJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNmMThhZWZkYjg2NmQ1M2NmNzZjYWIyODY4YTM5YjlmNzg0MGVkY2U0ZmVmNWE4MicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZTY3MzM1Yzc3YTYwNjhlMDQxMTI3NTRmMjdjY2Y0ZScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdkMTk3YjFiMzNkYjAxNDNlMDE4YjEyZjNkMWQxNDc5ZTZjZGViZGNjOTdjNWMwZjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnN2Y2OTAyZTA3MmY0NTdiNTE0M2YzMDYwMjY0MWIzZDU1Y2QzMzU5ODhjYjM2Yjg0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM3NjA2MGVjZDUzMmUwMzliNzQyYTIzOTQzNGFmMmQ1JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzhjMDUxMWY0YzZlNTk3YzZhYzYzMTVkOGYwMzYyZTIyNWYzYzUwMTQ5NWJhMjNiOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc2OGMwMDUxNzRkYzRlZTcxMTE1YjU5ZjllNjBjZDk1MzJmYTMzZTBmNzVhZWZlMzAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjI1YzU4M2ExODZjZDgyYmQ0ZGFlYTk3MjRhM2QzYjgnKSwgNjQpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzlkOWU5YzRjZDIxZmU0YmUyNGQ1YjgyNDRjNzU5NjY1JyksIE5vbmUpLF0sCisgICAgfQorCisgICAgZGVmIF90ZXN0X3Bia2RmMl9obWFjKHNlbGYsIHBia2RmMik6CisgICAgICAgIGZvciBkaWdlc3RfbmFtZSwgcmVzdWx0cyBpbiBzZWxmLnBia2RmMl9yZXN1bHRzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgaSwgdmVjdG9yIGluIGVudW1lcmF0ZShzZWxmLnBia2RmMl90ZXN0X3ZlY3RvcnMpOgorICAgICAgICAgICAgICAgIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuID0gdmVjdG9yCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG92ZXJ3cml0ZV9ka2xlbiA9IHJlc3VsdHNbaV0KKyAgICAgICAgICAgICAgICBpZiBvdmVyd3JpdGVfZGtsZW46CisgICAgICAgICAgICAgICAgICAgIGRrbGVuID0gb3ZlcndyaXRlX2RrbGVuCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuKSkKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIG1lbW9yeXZpZXcocGFzc3dvcmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgYnl0ZWFycmF5KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBka2xlbiBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGJrZGYyLCBiJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCAncGFzcycsICdzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd1bnN1cHBvcnRlZCBoYXNoIHR5cGUnKToKKyAgICAgICAgICAgIHBia2RmMigndW5rbm93bicsIGIncGFzcycsIGInc2FsdCcsIDEpCisKKyAgICBkZWYgdGVzdF9wYmtkZjJfaG1hY19weShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhweV9oYXNobGliLnBia2RmMl9obWFjKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjX2hhc2hsaWIsICdwYmtkZjJfaG1hYycpLAorICAgICAgICAgICAgICAgICAgICAgJyAgIHRlc3QgcmVxdWlyZXMgT3BlblNTTCA+IDEuMCcpCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfYyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhjX2hhc2hsaWIucGJrZGYyX2htYWMpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5IGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CmluZGV4IDRjYTdjZWMuLmNkZTU2ZmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKQEAgLTEsMTcgKzEsMzkgQEAKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBobWFjCiBpbXBvcnQgaGFzaGxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCisKK2RlZiBpZ25vcmVfd2FybmluZyhmdW5jKToKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiB3cmFwcGVyCisKKwogY2xhc3MgVGVzdFZlY3RvcnNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9tZDVfdmVjdG9ycyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSBITUFDIG1vZHVsZSBhZ2FpbnN0IHRlc3QgdmVjdG9ycyBmcm9tIHRoZSBSRkMuCiAKICAgICAgICAgZGVmIG1kNXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgotICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEpCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hsaWIubWQ1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLW1kNSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDE2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPSdtZDUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLW1kNSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDE2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCiAKICAgICAgICAgbWQ1dGVzdChiIlx4MGIiICogMTYsCiAgICAgICAgICAgICAgICAgYiJIaSBUaGVyZSIsCkBAIC00Niw2ICs2OCwxNiBAQAogICAgICAgICBkZWYgc2hhdGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hsaWIuc2hhMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1zaGExIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9J3NoYTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLXNoYTEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAyMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKwogCiAgICAgICAgIHNoYXRlc3QoYiJceDBiIiAqIDIwLAogICAgICAgICAgICAgICAgIGIiSGkgVGhlcmUiLApAQCAtNzYsMTAgKzEwOCwyMSBAQAogICAgICAgICAgICAgICAgICBiImFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIiksCiAgICAgICAgICAgICAgICAgImU4ZTk5ZDBmNDUyMzdkNzg2ZDZiYmFhNzk2NWM3ODA4YmJmZjFhOTEiKQogCi0gICAgZGVmIF9yZmM0MjMxX3Rlc3RfY2FzZXMoc2VsZiwgaGFzaGZ1bmMpOgorICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jLCBoYXNoX25hbWUsIGRpZ2VzdF9zaXplLCBibG9ja19zaXplKToKICAgICAgICAgZGVmIGhtYWN0ZXN0KGtleSwgZGF0YSwgaGV4ZGlnZXN0cyk6CisgICAgICAgICAgICBobWFjX25hbWUgPSAiaG1hYy0iICsgaGFzaF9uYW1lCiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hmdW5jKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhtYWNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkubG93ZXIoKSwgaGV4ZGlnZXN0c1toYXNoZnVuY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgaG1hY19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCBibG9ja19zaXplKQorCiAKICAgICAgICAgIyA0LjIuICBUZXN0IENhc2UgMQogICAgICAgICBobWFjdGVzdChrZXkgPSBiJ1x4MGInKjIwLApAQCAtMTg5LDE2ICsyMzIsMTYgQEAKICAgICAgICAgICAgICAgICAgfSkKIAogICAgIGRlZiB0ZXN0X3NoYTIyNF9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTIyNCwgJ3NoYTIyNCcsIDI4LCA2NCkKIAogICAgIGRlZiB0ZXN0X3NoYTI1Nl9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyNTYpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTI1NiwgJ3NoYTI1NicsIDMyLCA2NCkKIAogICAgIGRlZiB0ZXN0X3NoYTM4NF9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTM4NCwgJ3NoYTM4NCcsIDQ4LCAxMjgpCiAKICAgICBkZWYgdGVzdF9zaGE1MTJfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyKQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGE1MTIsICdzaGE1MTInLCA2NCwgMTI4KQogCiAgICAgZGVmIHRlc3RfbGVnYWN5X2Jsb2NrX3NpemVfd2FybmluZ3Moc2VsZik6CiAgICAgICAgIGNsYXNzIE1vY2tDcmF6eUhhc2gob2JqZWN0KToKQEAgLTIyMiw0NiArMjY1LDc0IEBACiAgICAgICAgICAgICAgICAgaG1hYy5ITUFDKGInYScsIGInYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBzbWFsbCBibG9ja19zaXplJykKIAorICAgIGRlZiB0ZXN0X3dpdGhfZGlnZXN0bW9kX3dhcm5pbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGtleSA9IGIiXHgwYiIgKiAxNgorICAgICAgICAgICAgZGF0YSA9IGIiSGkgVGhlcmUiCisgICAgICAgICAgICBkaWdlc3QgPSAiOTI5NDcyN0EzNjM4QkIxQzEzRjQ4RUY4MTU4QkZDOUQiCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QpCiAKIAogY2xhc3MgQ29uc3RydWN0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9ub3JtYWwoc2VsZik6CiAgICAgICAgICMgU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbC4KICAgICAgICAgZmFpbGVkID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IikKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJTdGFuZGFyZCBjb25zdHJ1Y3RvciBjYWxsIHJhaXNlZCBleGNlcHRpb24uIikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X3dpdGhfc3RyX2tleShzZWxmKToKICAgICAgICAgIyBQYXNzIGEga2V5IG9mIHR5cGUgc3RyLCB3aGljaCBpcyBhbiBlcnJvciwgYmVjYXVzZSBpdCBleHBlY3RzIGEga2V5CiAgICAgICAgICMgb2YgdHlwZSBieXRlcwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3RfZG90X25ld193aXRoX3N0cl9rZXkoc2VsZik6CiAgICAgICAgICMgUGFzcyBhIGtleSBvZiB0eXBlIHN0ciwgd2hpY2ggaXMgYW4gZXJyb3IsIGJlY2F1c2UgaXQgZXhwZWN0cyBhIGtleQogICAgICAgICAjIG9mIHR5cGUgYnl0ZXMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgaCA9IGhtYWMubmV3KCJrZXkiKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfd2l0aHRleHQoc2VsZik6CiAgICAgICAgICMgQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBiImhhc2ggdGhpcyEiKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFyZ3VtZW50IHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYnl0ZWFycmF5KGIia2V5IiksIGJ5dGVhcnJheShiImhhc2ggdGhpcyEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0bW9kPSJtZDUiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggYnl0ZWFycmF5IGFyZ3VtZW50cyByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKKworICAgIGRlZiB0ZXN0X3dpdGhfbWVtb3J5dmlld19tc2coc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBtZW1vcnl2aWV3KGIiaGFzaCB0aGlzISIpLCBkaWdlc3Rtb2Q9Im1kNSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBtZW1vcnl2aWV3IG1zZyByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKIAogICAgIGRlZiB0ZXN0X3dpdGhtb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQgYW5kIGRpZ2VzdCBtb2R1bGUuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBiIiIsIGhhc2hsaWIuc2hhMSkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggaGFzaGxpYi5zaGExIHJhaXNlZCBleGNlcHRpb24uIikKIAogY2xhc3MgU2FuaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19tZDUoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiBITUFDIGRlZmF1bHRzIHRvIE1ENSBhbGdvcml0aG0uCiAgICAgICAgICMgTk9URTogdGhpcyB3aGl0ZWJveCB0ZXN0IGRlcGVuZHMgb24gdGhlIGhtYWMgY2xhc3MgaW50ZXJuYWxzCkBAIC0yNzIsMTkgKzM0MywxOSBAQAogICAgICAgICAjIEV4ZXJjaXNpbmcgYWxsIG1ldGhvZHMgb25jZS4KICAgICAgICAgIyBUaGlzIG11c3Qgbm90IHJhaXNlIGFueSBleGNlcHRpb25zCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJteSBzZWNyZXQga2V5IikKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJteSBzZWNyZXQga2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICAgICAgaC51cGRhdGUoYiJjb21wdXRlIHRoZSBoYXNoIG9mIHRoaXMgdGV4dCEiKQogICAgICAgICAgICAgZGlnID0gaC5kaWdlc3QoKQogICAgICAgICAgICAgZGlnID0gaC5oZXhkaWdlc3QoKQogICAgICAgICAgICAgaDIgPSBoLmNvcHkoKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIG5vcm1hbCB1c2FnZSBvZiBITUFDIGNsYXNzLiIpCiAKIGNsYXNzIENvcHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgYXR0cmlidXRlcyBhcmUgb2Ygc2FtZSB0eXBlLgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuZGlnZXN0X2NvbnMgPT0gaDIuZGlnZXN0X2NvbnMsCiAgICAgICAgICAgICAiZGlnZXN0IGNvbnN0cnVjdG9ycyBkb24ndCBtYXRjaC4iKQpAQCAtMjk1LDcgKzM2Niw3IEBACiAKICAgICBkZWYgdGVzdF9yZWFsY29weShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIHRoZSBjb3B5IG1ldGhvZCBjcmVhdGVkIGEgcmVhbCBjb3B5LgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICAjIFVzaW5nIGlkKCkgaW4gY2FzZSBzb21lYm9keSBoYXMgb3ZlcnJpZGRlbiBfX2VxX18vX19uZV9fLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEpICE9IGlkKGgyKSwgIk5vIHJlYWwgY29weSBvZiB0aGUgSE1BQyBpbnN0YW5jZS4iKQpAQCAtMzA2LDcgKzM3Nyw3IEBACiAKICAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIHRoZSBjb3B5IGhhcyB0aGUgc2FtZSBkaWdlc3RzLgotICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIpCisgICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IiwgZGlnZXN0bW9kPSJtZDUiKQogICAgICAgICBoMS51cGRhdGUoYiJzb21lIHJhbmRvbSB0ZXh0IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMS5kaWdlc3QoKSwgaDIuZGlnZXN0KCksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWwucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKaW5kZXggMzBkYWM1OC4uNWU5ZjM4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQpAQCAtMTYsOSArMTYsODkgQEAKICAgICAgICAgICAgIGh0bWwuZXNjYXBlKCdcJzxzY3JpcHQ+IiZmb287Ijwvc2NyaXB0PlwnJywgRmFsc2UpLAogICAgICAgICAgICAgJ1wnJmx0O3NjcmlwdCZndDsiJmFtcDtmb287IiZsdDsvc2NyaXB0Jmd0O1wnJykKIAorICAgIGRlZiB0ZXN0X3VuZXNjYXBlKHNlbGYpOgorICAgICAgICBudW1lcmljX2Zvcm1hdHMgPSBbJyYjJWQnLCAnJiMlZDsnLCAnJiN4JXgnLCAnJiN4JXg7J10KKyAgICAgICAgZXJybXNnID0gJ3VuZXNjYXBlKCVyKSBzaG91bGQgaGF2ZSByZXR1cm5lZCAlcicKKyAgICAgICAgZGVmIGNoZWNrKHRleHQsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC51bmVzY2FwZSh0ZXh0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJtc2cgJSAodGV4dCwgZXhwZWN0ZWQpKQorICAgICAgICBkZWYgY2hlY2tfbnVtKG51bSwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgZm9yIGZvcm1hdCBpbiBudW1lcmljX2Zvcm1hdHM6CisgICAgICAgICAgICAgICAgdGV4dCA9IGZvcm1hdCAlIG51bQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC51bmVzY2FwZSh0ZXh0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJybXNnICUgKHRleHQsIGV4cGVjdGVkKSkKKyAgICAgICAgIyBjaGVjayB0ZXh0IHdpdGggbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgY2hlY2soJ25vIGNoYXJhY3RlciByZWZlcmVuY2VzJywgJ25vIGNoYXJhY3RlciByZWZlcmVuY2VzJykKKyAgICAgICAgIyBjaGVjayAmIGZvbGxvd2VkIGJ5IGludmFsaWQgY2hhcnMKKyAgICAgICAgY2hlY2soJyZcbiZcdCYgJiYnLCAnJlxuJlx0JiAmJicpCisgICAgICAgICMgY2hlY2sgJiBmb2xsb3dlZCBieSBudW1iZXJzIGFuZCBsZXR0ZXJzCisgICAgICAgIGNoZWNrKCcmMCAmOSAmYSAmMDsgJjk7ICZhOycsICcmMCAmOSAmYSAmMDsgJjk7ICZhOycpCisgICAgICAgICMgY2hlY2sgaW5jb21wbGV0ZSBlbnRpdGllcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgZm9yIHggaW4gWycmJywgJyYjJywgJyYjeCcsICcmI1gnLCAnJiN5JywgJyYjeHknLCAnJiNYeSddOgorICAgICAgICAgICAgY2hlY2soeCwgeCkKKyAgICAgICAgICAgIGNoZWNrKHgrJzsnLCB4Kyc7JykKKyAgICAgICAgIyBjaGVjayBzZXZlcmFsIGNvbWJpbmF0aW9ucyBvZiBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzLAorICAgICAgICAjIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGRpZmZlcmVudCBjaGFyYWN0ZXJzCisgICAgICAgIGZvcm1hdHMgPSBbJyYjJWQnLCAnJiMlMDdkJywgJyYjJWQ7JywgJyYjJTA3ZDsnLAorICAgICAgICAgICAgICAgICAgICcmI3gleCcsICcmI3glMDZ4JywgJyYjeCV4OycsICcmI3glMDZ4OycsCisgICAgICAgICAgICAgICAgICAgJyYjeCVYJywgJyYjeCUwNlgnLCAnJiNYJXg7JywgJyYjWCUwNng7J10KKyAgICAgICAgZm9yIG51bSwgY2hhciBpbiB6aXAoWzY1LCA5NywgMzQsIDM4LCAweDI2MDMsIDB4MTAxMjM0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydBJywgJ2EnLCAnIicsICcmJywgJ1x1MjYwMycsICdcVTAwMTAxMjM0J10pOgorICAgICAgICAgICAgZm9yIHMgaW4gZm9ybWF0czoKKyAgICAgICAgICAgICAgICBjaGVjayhzICUgbnVtLCBjaGFyKQorICAgICAgICAgICAgICAgIGZvciBlbmQgaW4gWycgJywgJ1gnXToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soKHMrZW5kKSAlIG51bSwgY2hhcitlbmQpCisgICAgICAgICMgY2hlY2sgaW52YWxpZCBjb2RlcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHhEODAwLCAweERCMDAsIDB4REMwMCwgMHhERkZGLCAweDExMDAwMF06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICdcdUZGRkQnKQorICAgICAgICAjIGNoZWNrIG1vcmUgaW52YWxpZCBjb2RlcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHgxLCAweGIsIDB4ZSwgMHg3ZiwgMHhmZmZlLCAweGZmZmYsIDB4MTBmZmZlLCAweDEwZmZmZl06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICcnKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgbnVtYmVycworICAgICAgICBmb3IgbnVtLCBjaCBpbiB6aXAoWzB4MGQsIDB4ODAsIDB4OTUsIDB4OWRdLCAnXHJcdTIwYWNcdTIwMjJceDlkJyk6CisgICAgICAgICAgICBjaGVja19udW0obnVtLCBjaCkKKyAgICAgICAgIyBjaGVjayBzbWFsbCBudW1iZXJzCisgICAgICAgIGNoZWNrX251bSgwLCAnXHVGRkZEJykKKyAgICAgICAgY2hlY2tfbnVtKDksICdcdCcpCisgICAgICAgICMgY2hlY2sgYSBiaWcgbnVtYmVyCisgICAgICAgIGNoZWNrX251bSgxMDAwMDAwMDAwMDAwMDAwMDAwLCAnXHVGRkZEJykKKyAgICAgICAgIyBjaGVjayB0aGF0IG11bHRpcGxlIHRyYWlsaW5nIHNlbWljb2xvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgIGZvciBlIGluIFsnJnF1b3Q7OycsICcmIzM0OzsnLCAnJiN4MjI7OycsICcmI1gyMjs7J106CisgICAgICAgICAgICBjaGVjayhlLCAnIjsnKQorICAgICAgICAjIGNoZWNrIHRoYXQgc2VtaWNvbG9ucyBpbiB0aGUgbWlkZGxlIGRvbid0IGNyZWF0ZSBwcm9ibGVtcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90O3F1b3Q7JywgJyYjMzQ7cXVvdDsnLCAnJiN4MjI7cXVvdDsnLCAnJiNYMjI7cXVvdDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsICcicXVvdDsnKQorICAgICAgICAjIGNoZWNrIHRyaXBsZSBhZGphY2VudCBjaGFycmVmcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90JywgJyYjMzQnLCAnJiN4MjInLCAnJiNYMjInXToKKyAgICAgICAgICAgIGNoZWNrKGUqMywgJyIiIicpCisgICAgICAgICAgICBjaGVjaygoZSsnOycpKjMsICciIiInKQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGNhc2UgaXMgcmVzcGVjdGVkCisgICAgICAgIGZvciBlIGluIFsnJmFtcCcsICcmYW1wOycsICcmQU1QJywgJyZBTVA7J106CisgICAgICAgICAgICBjaGVjayhlLCAnJicpCisgICAgICAgIGZvciBlIGluIFsnJkFtcCcsICcmQW1wOyddOgorICAgICAgICAgICAgY2hlY2soZSwgZSkKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1leGlzdGVudCBuYW1lZCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgdW5jaGFuZ2VkCisgICAgICAgIGNoZWNrKCcmc3ZhZGlsZmFyaTsnLCAnJnN2YWRpbGZhcmk7JykKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFyZSBpbiB0aGUgaHRtbDUgc3BlY3MKKyAgICAgICAgY2hlY2soJyZub3RpdCcsICfCrGl0JykKKyAgICAgICAgY2hlY2soJyZub3RpdDsnLCAnwqxpdDsnKQorICAgICAgICBjaGVjaygnJm5vdGluJywgJ8KsaW4nKQorICAgICAgICBjaGVjaygnJm5vdGluOycsICfiiIknKQorICAgICAgICAjIGEgc2ltaWxhciBleGFtcGxlIHdpdGggYSBsb25nIG5hbWUKKyAgICAgICAgY2hlY2soJyZub3RSZWFsbHlBbkV4aXN0aW5nTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2U7JywKKyAgICAgICAgICAgICAgJ8KsUmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycpCisgICAgICAgICMgbG9uZ2VzdCB2YWxpZCBuYW1lCisgICAgICAgIGNoZWNrKCcmQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsnLCAn4oizJykKKyAgICAgICAgIyBjaGVjayBhIGNoYXJyZWYgdGhhdCBtYXBzIHRvIHR3byB1bmljb2RlIGNoYXJzCisgICAgICAgIGNoZWNrKCcmYWNFOycsICdcdTIyM0VcdTAzMzMnKQorICAgICAgICBjaGVjaygnJmFjRScsICcmYWNFJykKKyAgICAgICAgIyBzZWUgIzEyODg4CisgICAgICAgIGNoZWNrKCcmIzEyMzsgJyAqIDEwNTAsICd7ICcgKiAxMDUwKQorICAgICAgICAjIHNlZSAjMTUxNTYKKyAgICAgICAgY2hlY2soJyZFYWN1dGVyaWMmRWFjdXRlO3JpYyZhbHBoYWNlbnRhdXJpJmFscGhhO2NlbnRhdXJpJywKKyAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQorICAgICAgICBjaGVjaygnJmNvOycsICcmY287JykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChIdG1sVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQppbmRleCBjOTc3YTlkLi4xYTQ4MGM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CkBAIC03MCw2ICs3MCwxOCBAQAogICAgICAgICBzZWxmLmFwcGVuZCgoInN0YXJ0dGFnX3RleHQiLCBzZWxmLmdldF9zdGFydHRhZ190ZXh0KCkpKQogCiAKK2NsYXNzIEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoRXZlbnRDb2xsZWN0b3IpOgorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50cworCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmZhaWwoJ1RoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZScpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisKIGNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKQEAgLTg0LDI2ICs5NiwzMCBAQAogICAgICAgICBwYXJzZXIuY2xvc2UoKQogICAgICAgICBldmVudHMgPSBwYXJzZXIuZ2V0X2V2ZW50cygpCiAgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50c1xuIgotICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjZWl2ZWQgZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgZXZlbnRzIiArCisgICAgICAgICAgICAgICAgICAgICAgIlxuU291cmNlOlxuIiArIHJlcHIoc291cmNlKSArCisgICAgICAgICAgICAgICAgICAgICAgIlxuRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCiAgICAgICAgICAgICAgICAgICAgICAgIlxuUmVjZWl2ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXZlbnRzKSkKIAogICAgIGRlZiBfcnVuX2NoZWNrX2V4dHJhKHNlbGYsIHNvdXJjZSwgZXZlbnRzKToKLSAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLCBFdmVudENvbGxlY3RvckV4dHJhKCkpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yRXh0cmEoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CiAgICAgICAgIGRlZiBwYXJzZShzb3VyY2U9c291cmNlKToKICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCiAgICAgICAgICAgICBwYXJzZXIuZmVlZChzb3VyY2UpCiAgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvciwgcGFyc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGFyc2UoKQogCiAKIGNsYXNzIEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aXRlPUZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fb25seShzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24+IiwgWwpAQCAtMzMzLDcgKzM0OSw3IEBACiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2socywgWygic3RhcnR0YWciLCBlbGVtZW50X2xvd2VyLCBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsIGNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImVuZHRhZyIsIGVsZW1lbnRfbG93ZXIpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Q29sbGVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKSkKIAogICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCI8IS0tIEknbSBhIHZhbGlkIGNvbW1lbnQgLS0+IgpAQCAtMzYxLDExICszNzcsNjAgQEAKICAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJ1tpZiBsdGUgSUUgN10+cHJldHR5PzwhW2VuZGlmXScpXQogICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2NoYXJyZWZzKHNlbGYpOgorICAgICAgICBjb2xsZWN0b3IgPSBsYW1iZGE6IEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoY29udmVydF9jaGFycmVmcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdG9yKCkuY29udmVydF9jaGFycmVmcykKKyAgICAgICAgY2hhcnJlZnMgPSBbJyZxdW90OycsICcmIzM0OycsICcmI3gyMjsnLCAnJnF1b3QnLCAnJiMzNCcsICcmI3gyMiddCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCAnZm9vInphcicpXSksCisgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICdhInonKSwgKCdlbmR0YWcnLCAnYScpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgaHJlZj0iZm9vezB9emFyIj5hezB9ejwvYT4nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGF0IHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSB0ZXh0L2F0dHJpYnV0ZXMKKyAgICAgICAgZXhwZWN0ZWQgPSBbKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygneCcsICciJyksICgneScsICciWCcpLCAoJ3onLCAnWCInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnIicpLCAoJ2VuZHRhZycsICdhJyksICgnZGF0YScsICciJyldCisgICAgICAgIGZvciBjaGFycmVmIGluIGNoYXJyZWZzOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCd7MH08YSB4PSJ7MH0iIHk9InswfVgiIHo9Ilh7MH0iPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnezB9PC9hPnswfScuZm9ybWF0KGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gPHNjcmlwdD4vPHN0eWxlPiBlbGVtZW50cworICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHRleHQgPSAnWCcuam9pbihbY2hhcnJlZl0qMykKKyAgICAgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3NjcmlwdCcsIFtdKSwgKCdkYXRhJywgdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICdzY3JpcHQnKSwgKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnc3R5bGUnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc3R5bGUnKSwgKCdkYXRhJywgJyInKV0KKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezF9PHNjcmlwdD57MH08L3NjcmlwdD57MX0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT57MH08L3N0eWxlPnsxfScuZm9ybWF0KHRleHQsIGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgdHJ1bmNhdGVkIGNoYXJyZWZzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgaHRtbCA9ICcmcXVvICYjICYjeCcKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgbGVuKGh0bWwpKToKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sWzp4XSwgWygnZGF0YScsIGh0bWxbOnhdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGEgc3RyaW5nIHdpdGggbm8gY2hhcnJlZnMKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCdubyBjaGFycmVmcyBoZXJlJywgWygnZGF0YScsICdubyBjaGFycmVmcyBoZXJlJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorCiAKIGNsYXNzIEhUTUxQYXJzZXJUb2xlcmFudFRlc3RDYXNlKEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGlvbl93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpICAjIGNvbnZlcnRfY2hhcnJlZnMgbm90IHBhc3NlZCBleHBsaWNpdGx5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKCkuZXJyb3IoJ3Rlc3QnKQogCiAgICAgZGVmIHRlc3RfdG9sZXJhbnRfcGFyc2luZyhzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8aHRtbCA8aHRtbD50ZT4+eHQmYTw8YmM8L2E+PC9odG1sPlxuJwpAQCAtNTU4LDE3ICs2MjMsMTIgQEAKICAgICAgICAgZm9yIGh0bWwsIGV4cGVjdGVkIGluIGRhdGE6CiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKLSAgICBkZWYgdGVzdF91bmVzY2FwZV9mdW5jdGlvbihzZWxmKToKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9tZXRob2Qoc2VsZik6CisgICAgICAgIGZyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKICAgICAgICAgcCA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiNiYWQ7JyksJyYjYmFkOycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMwMDM4OycpLCcmJykKLSAgICAgICAgIyBzZWUgIzEyODg4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMxMjM7ICcgKiAxMDUwKSwgJ3sgJyAqIDEwNTApCi0gICAgICAgICMgc2VlICMxNTE1NgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZFYWN1dGVyaWMmRWFjdXRlO3JpYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZjbzsnKSwgJyZjbzsnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHMgPSAnJnF1b3Q7JiMzNDsmI3gyMjsmcXVvdCYjMzQmI3gyMiYjYmFkOycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZShzKSwgdW5lc2NhcGUocykpCiAKICAgICBkZWYgdGVzdF9icm9rZW5fY29tbWVudHMoc2VsZik6CiAgICAgICAgIGh0bWwgPSAoJzwhIG5vdCByZWFsbHkgYSBjb21tZW50ID4nCkBAIC02MjQsNyArNjg0LDcgQEAKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9hdHRyX3N5bnRheChzZWxmKToKICAgICAgICAgb3V0cHV0ID0gWwpAQCAtNjg1LDcgKzc0NSw3IEBACiBjbGFzcyBBdHRyaWJ1dGVzVG9sZXJhbnRUZXN0Q2FzZShBdHRyaWJ1dGVzU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfYXR0cl9mdW5reV9uYW1lczIoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQppbmRleCBmM2MyN2MyLi4zMWMwYjZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0yNyw4ICsyNywxMCBAQAogICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgIHNlbGYuZmlsZWNsYXNzID0gZmlsZWNsYXNzCiAgICAgICAgIHNlbGYuZGF0YSA9IGInJworICAgICAgICBzZWxmLnNlbmRhbGxfY2FsbHMgPSAwCiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzICs9IDEKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlLCBidWZzaXplPU5vbmUpOgpAQCAtNDUsNyArNDcsNyBAQAogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CiAgICAgICAgIGlmIHNlbGYucGlwZV90cmlnZ2VyIGluIGRhdGE6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FUElQRSwgImdvdGNoYSIpCiAgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC01OTcsNyArNTk5LDcgQEAKICAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGgiKQogICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCJleGFtcGxlLmNvbSIpCiAgICAgICAgIGNvbm4uc29jayA9IHNvY2sKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGNvbm4ucmVxdWVzdCgiUFVUIiwgIi91cmwiLCAiYm9keSIpKQogICAgICAgICByZXNwID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAxLCByZXNwLnN0YXR1cykKQEAgLTY0Myw2ICs2NDUsMjggQEAKICAgICAgICAgcmVzcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmNsb3NlZCkKIAorICAgIGRlZiB0ZXN0X2RlbGF5ZWRfYWNrX29wdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgTmFnbGUvZGVsYXllZF9hY2sgb3B0aW1pc3RhaW9uIHdvcmtzIGNvcnJlY3RseS4KKworICAgICAgICAjIEZvciBzbWFsbCBwYXlsb2FkcywgaXQgc2hvdWxkIGNvYWxlc2NlIHRoZSBib2R5IHdpdGgKKyAgICAgICAgIyBoZWFkZXJzLCByZXN1bHRpbmcgaW4gYSBzaW5nbGUgc2VuZGFsbCgpIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogKGNvbm4ubXNzIC0gMSkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suc2VuZGFsbF9jYWxscywgMSkKKworICAgICAgICAjIEZvciBsYXJnZSBwYXlsb2FkcywgaXQgc2hvdWxkIHNlbmQgdGhlIGhlYWRlcnMgYW5kCisgICAgICAgICMgdGhlbiB0aGUgYm9keSwgcmVzdWx0aW5nIGluIG1vcmUgdGhhbiBvbmUgc2VuZGFsbCgpCisgICAgICAgICMgY2FsbAorICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgYm9keSA9IGIneCcgKiBjb25uLm1zcworICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKIGNsYXNzIE9mZmxpbmVUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LnJlc3BvbnNlc1tjbGllbnQuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCkBAIC03MzMsNyArNzU3LDcgQEAKIAogICAgIGRlZiBtYWtlX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSk6CiAgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKLSAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlKQorICAgICAgICByZXR1cm4gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Y2VydGZpbGUpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGl0J3Mgc3RvcmluZyB0aGUgdGltZW91dApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggOWRkMjc3OC4uYjJiY2UxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC05Miw2ICs5MiwxMyBAQAogICAgICAgICBkZWYgZG9fS0VZRVJST1Ioc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5KQogCisgICAgICAgIGRlZiBkb19OT1RGT1VORChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpCisKKyAgICAgICAgZGVmIGRvX0VYUExBSU5FUlJPUihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTksICJTaG9ydCBNZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGxvbmcgXG4gZXhwbGFpbmF0aW9uIikKKwogICAgICAgICBkZWYgZG9fQ1VTVE9NKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDk5OSkKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQpAQCAtMjAzLDYgKzIxMCwxMiBAQAogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQogCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4cGxhaW5fZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0VYUExBSU5FUlJPUicsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChyZXMuZ2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSkKKwogICAgIGRlZiB0ZXN0X2xhdGluMV9oZWFkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0xBVElOT05FSEVBREVSJywgJy8nLCBoZWFkZXJzPXsKICAgICAgICAgICAgICdYLVNwZWNpYWwtSW5jb21pbmcnOiAgICAgICAnw4RyZ2VyIG1pdCBVbmljb2RlJwpAQCAtMjExLDYgKzIyNCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXRoZWFkZXIoJ1gtU3BlY2lhbCcpLCAnRMOkbmdlcm91cyBNaW5kJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMucmVhZCgpLCAnw4RyZ2VyIG1pdCBVbmljb2RlJy5lbmNvZGUoJ3V0Zi04JykpCiAKKyAgICBkZWYgdGVzdF9lcnJvcl9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYwODg6IHN0YW5kYXJkIGVycm9yIHJlc3BvbnNlcyBzaG91bGQgaGF2ZSBhIGNvbnRlbnQtbGVuZ3RoCisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ05PVEZPVU5EJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDA0KQorICAgICAgICBkYXRhID0gcmVzLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChyZXMuZ2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSwgbGVuKGRhdGEpKQorCiAKIGNsYXNzIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogICAgIGNsYXNzIHJlcXVlc3RfaGFuZGxlcihOb0xvZ1JlcXVlc3RIYW5kbGVyLCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CmluZGV4IGRhYThhZmUuLjgxYmZkMWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBOYWtlZCBzb2NrZXRzIHJldHVybiBlbXB0eSBzdHJpbmdzLi4KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgICBsaW5lICs9IHBhcnQKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyAuLmJ1dCBTU0xTb2NrZXRzIHJhaXNlIGV4Y2VwdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcclxuJyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CmluZGV4IGI1NmVmZTMuLjc4ZjU3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CkBAIC0xLDE0ICsxLDI5IEBACi1pbXBvcnQgaW1wCit0cnk6CisgICAgaW1wb3J0IF90aHJlYWQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGhyZWFkID0gTm9uZQogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAorCitkZWYgcmVxdWlyZXNfbG9hZF9keW5hbWljKG1ldGgpOgorICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiBub3QgcnVubmluZyB1bmRlciBDUHl0aG9uIG9yIGxhY2tpbmcKKyAgICBpbXAubG9hZF9keW5hbWljKCkuIiIiCisgICAgbWV0aCA9IHN1cHBvcnQuY3B5dGhvbl9vbmx5KG1ldGgpCisgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKShtZXRoKQorCisKK0B1bml0dGVzdC5za2lwSWYoX3RocmVhZCBpcyBOb25lLCAnX3RocmVhZCBtb2R1bGUgaXMgcmVxdWlyZWQnKQogY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlZlcnkgYmFzaWMgdGVzdCBvZiBpbXBvcnQgbG9jayBmdW5jdGlvbnMuIiIiCkBAIC0xNTAsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmaWxlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlbmFtZVs6LTNdLmVuZHN3aXRoKHRlbXBfbW9kX25hbWUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1swXSwgJy5weScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAnVScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAncicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzJdLCBpbXAuUFlfU09VUkNFKQogCiAgICAgICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKHRlbXBfbW9kX25hbWUsIGZpbGUsIGZpbGVuYW1lLCBpbmZvKQpAQCAtMjA4LDkgKzIyMyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKLSAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKQorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9pc3N1ZTE1ODI4X2xvYWRfZXh0ZW5zaW9ucyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNTgyOCBwaWNrZWQgdXAgdGhhdCB0aGUgYWRhcHRlciBiZXR3ZWVuIHRoZSBvbGQgaW1wIEFQSQogICAgICAgICAjIGFuZCBpbXBvcnRsaWIgY291bGRuJ3QgaGFuZGxlIEMgZXh0ZW5zaW9ucwpAQCAtMjIyLDYgKzIzNSwyMiBAQAogICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZXhhbXBsZSwgKngpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCBleGFtcGxlKQogCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYworICAgIGRlZiB0ZXN0X2lzc3VlMTY0MjFfbXVsdGlwbGVfbW9kdWxlc19pbl9vbmVfZGxsKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE2NDIxOiBsb2FkaW5nIHNldmVyYWwgbW9kdWxlcyBmcm9tIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUgZmFpbHMKKyAgICAgICAgbSA9ICdfdGVzdGltcG9ydG11bHRpcGxlJworICAgICAgICBmaWxlb2JqLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobSkKKyAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgIG1vZDAgPSBpbXAubG9hZF9keW5hbWljKG0sIHBhdGhuYW1lKQorICAgICAgICBtb2QxID0gaW1wLmxvYWRfZHluYW1pYygnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMiA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyJywgcGF0aG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMC5fX25hbWVfXywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QxLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDIuX19uYW1lX18sICdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYygnbm9uZXhpc3RlbnQnLCBwYXRobmFtZSkKKworICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9sb2FkX2R5bmFtaWNfSW1wb3J0RXJyb3JfcGF0aChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU1OTU0OSBhZGRlZCBgbmFtZWAgYW5kIGBwYXRoYCBhdHRyaWJ1dGVzIHRvIEltcG9ydEVycm9yCiAgICAgICAgICMgaW4gb3JkZXIgdG8gcHJvdmlkZSBiZXR0ZXIgZGV0YWlsLiBJc3N1ZSAjMTA4NTQgaW1wbGVtZW50ZWQgdGhvc2UKQEAgLTIzMywxNCArMjYyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgZXJyLmV4Y2VwdGlvbi5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGVyci5leGNlcHRpb24ubmFtZSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfZXh0ZW5zaW9uX2ZpbGVfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBXaGVuIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgdGhlIGZpbGUgaXMgTm9uZSwgb3BlbiBvbmUKICAgICAgICAgIyBvbiB0aGUgYmVoYWxmIG9mIGltcC5sb2FkX2R5bmFtaWMoKS4KICAgICAgICAgIyBJc3N1ZSAjMTU5MDIKLSAgICAgICAgbmFtZSA9ICdfaGVhcHEnCisgICAgICAgIG5hbWUgPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKICAgICAgICAgZm91bmQgPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKICAgICAgICAgaWYgZm91bmRbMF0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmb3VuZFswXS5jbG9zZSgpCkBAIC0yNDgsNiArMjc1LDE1IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaW1wLmxvYWRfbW9kdWxlKG5hbWUsIE5vbmUsICpmb3VuZFsxOl0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKToKKyAgICAgICAgICAgIHNvdXJjZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKKyAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIHN1cHBvcnQuVEVTVEZOLCBbIi4iXSkKKwogICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxzX3RvX2dldF9kYXRhKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxODc1NTogbWFrZSBzdXJlIG11bHRpcGxlIGNhbGxzIHRvIGdldF9kYXRhKCkgY2FuIHN1Y2NlZWQuCiAgICAgICAgIGxvYWRlciA9IGltcC5fTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoJ2ltcCcsIGltcC5fX2ZpbGVfXywKQEAgLTI5MywyMiArMzI5LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnaHRtbCcpOgogICAgICAgICAgICAgaW1wLnJlbG9hZChwYXJzZXIpCiAKLSAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODY5OAotICAgICAgICBkZWYgY29kZSgpOgotICAgICAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgbW9kdWxlLnNwYW0gPSAzCi0gICAgICAgICAgICBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10gPSBtb2R1bGUKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKLSAgICAgICAgd2l0aCBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKLSAgICAgICAgICAgICAgICByZWxvYWRlZCA9IGltcC5yZWxvYWQobW9kdWxlKQotICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLnNwYW0sIDMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5zcGFtLCAzKQotCiAKIGNsYXNzIFBFUDMxNDdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDcuIiIiCkBAIC00NjEsMjAgKzQ4MSw1IEBACiAgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgSW1wb3J0VGVzdHMsCi0gICAgICAgIFBFUDMxNDdUZXN0cywKLSAgICAgICAgUmVsb2FkVGVzdHMsCi0gICAgICAgIE51bGxJbXBvcnRlclRlc3RzLAotICAgICAgICBdCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX3RocmVhZAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb2NrVGVzdHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IGRmMDhlNmEuLmJkYTE1NDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC0xLDkgKzEsOCBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBmcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBfZ2V0X3NvdXJjZWZpbGUKIGltcG9ydCBidWlsdGlucwotaW1wb3J0IGltcAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliLmltcG9ydF8gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3V0aWwKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQpAQCAtMjIsNyArMjEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBFbnZpcm9ubWVudFZhckd1YXJkLCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBmb3JnZXQsIGlzX2p5dGhvbiwKICAgICBtYWtlX2xlZ2FjeV9weWMsIHJtdHJlZSwgcnVuX3VuaXR0ZXN0LCBzd2FwX2F0dHIsIHN3YXBfaXRlbSwgdGVtcF91bWFzaywKLSAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSkKKyAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSwgVEVTVEZOX1VORU5DT0RBQkxFKQogZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIApAQCAtNzAsOCArNjksNiBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5sb2FkKFRFU1RGTikKIAotICAgIHNldFVwID0gdGVhckRvd24KLQogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CiAgICAgICAgICMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290CiAgICAgICAgICMgdGhpcyBmYXIsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCAicmFuZG9tIiBleGlzdHMuCkBAIC0xMjksMTYgKzEyNiw2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KIAotICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKLSAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgotICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAnLnB5JwotICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKLSAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIFRFU1RGTiwgWyIuIl0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5ybWRpcihzb3VyY2UpCi0KICAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6CiAgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTYxODU4LgogICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZSArICcucHknCkBAIC0xNjEsMTYgKzE0OCwyNCBAQAogICAgICAgICBzeXMucGF0aC5hcHBlbmQoJycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAKKyAgICAgICAgbmFtZXNwYWNlID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZV9sZWdhY3lfcHljKGZpbGVuYW1lKQogICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2guCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSkKKyAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlLCBOb25lLCBuYW1lc3BhY2UpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIENsZWFudXAuCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbLTFdCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnYycpCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnbycpCiAKKyAgICAgICAgICAgICMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZSAodW5sb2FkIHRoZSBtb2R1bGUpCisgICAgICAgICAgICBuYW1lc3BhY2UuY2xlYXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfZmFpbGluZ19pbXBvcnRfc3RpY2tzKHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgogICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CkBAIC0yMjUsNyArMjIwLDcgQEAKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJhID0gMTBcbmI9MjAvLzBcbiIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpbXAucmVsb2FkLCBtb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wb3J0bGliLnJlbG9hZCwgbW9kKQogICAgICAgICAgICAgIyBCdXQgd2Ugc3RpbGwgZXhwZWN0IHRoZSBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5nZXQoVEVTVEZOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2QsIE5vbmUsICJleHBlY3RlZCBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMiKQpAQCAtMjgwLDcgKzI3NSw3IEBACiAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCiAgICAgICAgICAgICBzeXMuYXJndi5pbnNlcnQoMCwgQygpKQogICAgICAgICAgICAgIiIiKSkKICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKHRlc3RmbikKQEAgLTI5MSw3ICsyODYsNyBAQAogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgotICAgICAgICAgICAgY29tcGlsZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgY29tcGlsZWQgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgdHJ5OgpAQCAtMzIyLDYgKzMxNywxNCBAQAogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkltcG9ydEVycm9yIiwgc3Rkb3V0KQogCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3Jfbm9uZXhpc3RlbnRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeTm8gbW9kdWxlIG5hbWVkICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gYm9ndXMgaW1wb3J0IGZvbworCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3JfZXhpc3RpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeY2Fubm90IGltcG9ydCBuYW1lICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gcmUgaW1wb3J0IGJvZ3VzCisKIAogQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQogY2xhc3MgRmlsZVBlcm1pc3Npb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zMzIsNyArMzM1LDcgQEAKICAgICBkZWYgdGVzdF9jcmVhdGlvbl9tb2RlKHNlbGYpOgogICAgICAgICBtYXNrID0gMG8wMjIKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKG1hc2spLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2ltcG9ydF9fIGRpZCBub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mICIKQEAgLTM1MCw3ICszNTMsNyBAQAogICAgICAgICAjIHBlcm1pc3Npb25zIG9mIC5weWMgc2hvdWxkIG1hdGNoIHRob3NlIG9mIC5weSwgcmVnYXJkbGVzcyBvZiBtYXNrCiAgICAgICAgIG1vZGUgPSAwbzYwMAogICAgICAgICB3aXRoIHRlbXBfdW1hc2soMG8wMjIpLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgpAQCAtMzY1LDcgKzM2OCw3IEBACiAgICAgZGVmIHRlc3RfY2FjaGVkX3JlYWRvbmx5KHNlbGYpOgogICAgICAgICBtb2RlID0gMG80MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTQwNSw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgImMiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgIm8iCi0gICAgICAgICAgICBvcy5yZW5hbWUoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQorICAgICAgICAgICAgb3MucmVuYW1lKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQogICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS54LCAncmV3cml0dGVuJykKIApAQCAtNDI3LDcgKzQzMCw3IEBACiAiIiIKICAgICBkaXJfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCiAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGRpcl9uYW1lLCBtb2R1bGVfbmFtZSkgKyBvcy5leHRzZXAgKyAicHkiCi0gICAgY29tcGlsZWRfbmFtZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCisgICAgY29tcGlsZWRfbmFtZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfbmFtZSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCkBAIC00ODgsNyArNDkxLDcgQEAKICAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCgxMikKICAgICAgICAgICAgIGNvZGUgPSBtYXJzaGFsLmxvYWQoZikKICAgICAgICAgY29uc3RhbnRzID0gbGlzdChjb2RlLmNvX2NvbnN0cykKLSAgICAgICAgZm9yZWlnbl9jb2RlID0gdGVzdF9tYWluLl9fY29kZV9fCisgICAgICAgIGZvcmVpZ25fY29kZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLl9fY29kZV9fCiAgICAgICAgIHBvcyA9IGNvbnN0YW50cy5pbmRleCgxKQogICAgICAgICBjb25zdGFudHNbcG9zXSA9IGZvcmVpZ25fY29kZQogICAgICAgICBjb2RlID0gdHlwZShjb2RlKShjb2RlLmNvX2FyZ2NvdW50LCBjb2RlLmNvX2t3b25seWFyZ2NvdW50LApAQCAtNjMwLDcgKzYzMyw3IEBACiBjbGFzcyBQeWNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGUgdmFyaW91cyBQRVAgMzE0NyByZWxhdGVkIGJlaGF2aW9ycy4KIAotICAgIHRhZyA9IGltcC5nZXRfdGFnKCkKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKICAgICBkZWYgX2NsZWFuKHNlbGYpOgogICAgICAgICBmb3JnZXQoVEVTVEZOKQpAQCAtNjc4LDEwICs2ODEsMTEgQEAKICAgICAgICAgIyBXaXRoIFBFUCAzMTQ3IGNhY2hlIGxheW91dCwgcmVtb3ZpbmcgdGhlIHNvdXJjZSBidXQgbGVhdmluZyB0aGUgcHljCiAgICAgICAgICMgZmlsZSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBpbXBvcnQuCiAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgb3MucmVtb3ZlKHNlbGYuc291cmNlKQogICAgICAgICBmb3JnZXQoVEVTVEZOKQorICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgVEVTVEZOKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzAzLDcgKzcwNyw3IEBACiAgICAgZGVmIHRlc3RfX19jYWNoZWRfXyhzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdyBhbHNvIGhhdmUgYW4gX19jYWNoZWRfXyB0aGF0IHBvaW50cyB0byB0aGUgcHljIGZpbGUuCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBweWNfZmlsZSkpCiAKICAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCkBAIC03MzgsMTAgKzc0MiwxMCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC03NjUsMTAgKzc2OSwxMCBAQAogICAgICAgICB1bmxvYWQoJ3BlcDMxNDcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC04NTIsNyArODU2LDYgQEAKICAgICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQogICAgICAgICBzZWxmLmFzc2VydElzKG1hY2hpbmVyeS5GaWxlRmluZGVyLCBtb2QuRmlsZUZpbmRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhpbXAubmV3X21vZHVsZSwgbW9kLm5ld19tb2R1bGUpCiAKIAogQGNweXRob25fb25seQpAQCAtMTAzMywxMSArMTAzNiwxNCBAQAogICAgICAgICAjIGF3YXkgZnJvbSB0aGUgdHJhY2ViYWNrLgogICAgICAgICBzZWxmLmNyZWF0ZV9tb2R1bGUoImZvbyIsICIiKQogICAgICAgICBpbXBvcnRsaWIgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQotICAgICAgICBvbGRfbG9hZF9tb2R1bGUgPSBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlCisgICAgICAgIGlmICdsb2FkX21vZHVsZScgaW4gdmFycyhpbXBvcnRsaWIuU291cmNlTG9hZGVyKToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKCphcmdzKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZSgqYXJncyk6CiAgICAgICAgICAgICAgICAgMS8wCi0gICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlID0gbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBleGVjX21vZHVsZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGltcG9ydCBmb28KICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgpAQCAtMTA0NiwxOSArMTA1MiwyMSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiWmVyb0RpdmlzaW9uRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHJhY2ViYWNrKHRiLCBbX19maWxlX18sICc8ZnJvemVuIGltcG9ydGxpYicsIF9fZmlsZV9fXSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBvbGRfbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGlmIG9sZF9leGVjX21vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBvbGRfZXhlY19tb2R1bGUKIAotCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3RzLCBQeWNhY2hlVGVzdHMsIEZpbGVQZXJtaXNzaW9uVGVzdHMsCi0gICAgICAgICAgICAgICAgIFB5Y1Jld3JpdGluZ1Rlc3RzLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydFRlc3RzLAotICAgICAgICAgICAgICAgICBPdmVycmlkaW5nSW1wb3J0QnVpbHRpblRlc3RzLAotICAgICAgICAgICAgICAgICBJbXBvcnRsaWJCb290c3RyYXBUZXN0cywgR2V0U291cmNlZmlsZVRlc3RzLAotICAgICAgICAgICAgICAgICBUZXN0U3ltYm9saWNhbGx5TGlua2VkUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgSW1wb3J0VHJhY2ViYWNrVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVEVTVEZOX1VORU5DT0RBQkxFLCAnbmVlZCBURVNURk5fVU5FTkNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZW5jb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTYxOTogVGhlIFB5dGhvbiBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IG11c3Qgbm90CisgICAgICAgICMgZW5jb2RlIGZpbGVuYW1lcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzCisgICAgICAgIHB5bmFtZSA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoJycsIFRFU1RGTl9VTkVOQ09EQUJMRSwgJ3Bhc3MnKQorICAgICAgICBuYW1lID0gcHluYW1lWzotM10KKyAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCItYyIsICJtb2QgPSBfX2ltcG9ydF9fKCVhKSIgJSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgVGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnRzLgotICAgIGZyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgdGVzdF9tYWluCi0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTIyZDFhLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotaW1wb3J0IHN5cwotaW1wb3J0IGltcAotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi0KLXRlc3Rfc3JjID0gIiIiXAotZGVmIGdldF9uYW1lKCk6Ci0gICAgcmV0dXJuIF9fbmFtZV9fCi1kZWYgZ2V0X2ZpbGUoKToKLSAgICByZXR1cm4gX19maWxlX18KLSIiIgotCi1hYnNpbXAgPSAiaW1wb3J0IHN1YlxuIgotcmVsaW1wID0gImZyb20gLiBpbXBvcnQgc3ViXG4iCi1kZWVwcmVsaW1wID0gImZyb20gLi4uLiBpbXBvcnQgc3ViXG4iCi1mdXRpbXAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnRcbiIKLQotcmVsb2FkX3NyYyA9IHRlc3Rfc3JjKyIiIlwKLXJlbG9hZGVkID0gVHJ1ZQotIiIiCi0KLXRlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi1yZWxvYWRfY28gPSBjb21waWxlKHJlbG9hZF9zcmMsICI8Pz8/PiIsICJleGVjIikKLQotdGVzdDJfb2xkYWJzX2NvID0gY29tcGlsZShhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3YWJzX2NvID0gY29tcGlsZShmdXRpbXAgKyBhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3cmVsX2NvID0gY29tcGlsZShyZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZGVlcHJlbF9jbyA9IGNvbXBpbGUoZGVlcHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9mdXRyZWxfY28gPSBjb21waWxlKGZ1dGltcCArIHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3RfcGF0aCA9ICIhISFfdGVzdF8hISEiCi0KLQotY2xhc3MgVGVzdEltcG9ydGVyOgotCi0gICAgbW9kdWxlcyA9IHsKLSAgICAgICAgImhvb2t0ZXN0bW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZSI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiOiAoRmFsc2UsIHRlc3QyX29sZGFic19jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIjogKEZhbHNlLCB0ZXN0Ml9uZXdhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCI6IChGYWxzZSwgdGVzdDJfbmV3cmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCI6IChUcnVlLCB0ZXN0Ml9kZWVwcmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiOiAoRmFsc2UsIHRlc3QyX2Z1dHJlbF9jbyksCi0gICAgICAgICJzdWIiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgICAgICAicmVsb2FkbW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICB9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD10ZXN0X3BhdGgpOgotICAgICAgICBpZiBwYXRoICE9IHRlc3RfcGF0aDoKLSAgICAgICAgICAgICMgaWYgb3VyIGNsYXNzIGlzIG9uIHN5cy5wYXRoX2hvb2tzLCB3ZSBtdXN0IHJhaXNlCi0gICAgICAgICAgICAjIEltcG9ydEVycm9yIGZvciBhbnkgcGF0aCBpdGVtIHRoYXQgd2UgY2FuJ3QgaGFuZGxlLgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm1vZHVsZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGlzcGtnLCBjb2RlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKLSAgICAgICAgbW9kLl9fZmlsZV9fID0gIjwlcz4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIGlmIGlzcGtnOgotICAgICAgICAgICAgbW9kLl9fcGF0aF9fID0gc2VsZi5fZ2V0X19wYXRoX18oKQotICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZAotCi0KLWNsYXNzIE1ldGFJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBbXQotCi1jbGFzcyBQYXRoSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW3NlbGYucGF0aF0KLQotCi1jbGFzcyBJbXBvcnRCbG9ja2VyOgotICAgICIiIlBsYWNlIGFuIEltcG9ydEJsb2NrZXIgaW5zdGFuY2Ugb24gc3lzLm1ldGFfcGF0aCBhbmQgeW91Ci0gICAgY2FuIGJlIHN1cmUgdGhlIG1vZHVsZXMgeW91IHNwZWNpZmllZCBjYW4ndCBiZSBpbXBvcnRlZCwgZXZlbgotICAgIGlmIGl0J3MgYSBidWlsdGluLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXN0b2Jsb2NrKToKLSAgICAgICAgc2VsZi5uYW1lc3RvYmxvY2sgPSBkaWN0LmZyb21rZXlzKG5hbWVzdG9ibG9jaykKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYubmFtZXN0b2Jsb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiSSBkYXJlIHlvdSIpCi0KLQotY2xhc3MgSW1wV3JhcHBlcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lIGFuZCBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgc3VibmFtZSA9IGZ1bGxuYW1lLnNwbGl0KCIuIilbLTFdCi0gICAgICAgIGlmIHN1Ym5hbWUgIT0gZnVsbG5hbWUgYW5kIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgc2VsZi5wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IFtzZWxmLnBhdGhdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGUsIGZpbGVuYW1lLCBzdHVmZiA9IGltcC5maW5kX21vZHVsZShzdWJuYW1lLCBwYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gSW1wTG9hZGVyKGZpbGUsIGZpbGVuYW1lLCBzdHVmZikKLQotCi1jbGFzcyBJbXBMb2FkZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZmlsZW5hbWUsIHN0dWZmKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5zdHVmZiA9IHN0dWZmCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNlbGYuZmlsZSwgc2VsZi5maWxlbmFtZSwgc2VsZi5zdHVmZikKLSAgICAgICAgaWYgc2VsZi5maWxlOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmICAjIGZvciBpbnRyb3NwZWN0aW9uCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucGF0aCA9IHN5cy5wYXRoWzpdCi0gICAgICAgIHNlbGYubWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aFs6XQotICAgICAgICBzZWxmLnBhdGhfaG9va3MgPSBzeXMucGF0aF9ob29rc1s6XQotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCi0gICAgICAgIHNlbGYubW9kdWxlc19iZWZvcmUgPSBzdXBwb3J0Lm1vZHVsZXNfc2V0dXAoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAotICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKLSAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzdXBwb3J0Lm1vZHVsZXNfY2xlYW51cCgqc2VsZi5tb2R1bGVzX2JlZm9yZSkKLQotCi1jbGFzcyBJbXBvcnRIb29rc1Rlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKLQotICAgIGRlZiBkb1Rlc3RJbXBvcnRzKHNlbGYsIGltcG9ydGVyPU5vbmUpOgotICAgICAgICBpbXBvcnQgaG9va3Rlc3Rtb2R1bGUKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1YgotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdG1vZHVsZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciIpCi0gICAgICAgIGlmIGltcG9ydGVyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLQotICAgICAgICBUZXN0SW1wb3J0ZXIubW9kdWxlc1sncmVsb2FkbW9kdWxlJ10gPSAoRmFsc2UsIHRlc3RfY28pCi0gICAgICAgIGltcG9ydCByZWxvYWRtb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHJlbG9hZG1vZHVsZSwncmVsb2FkZWQnKSkKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld3JlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IGFzIHN1YmVzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgc3ViCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLmdldF9uYW1lKCksICJzdWIiKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uub2xkYWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLnN1Yiwgc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3YWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLnN1Yiwgc3ViKQotCi0gICAgZGVmIHRlc3RNZXRhUGF0aChzZWxmKToKLSAgICAgICAgaSA9IE1ldGFJbXBvcnRlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cyhpKQotCi0gICAgZGVmIHRlc3RQYXRoSG9vayhzZWxmKToKLSAgICAgICAgc3lzLnBhdGhfaG9va3MuaW5zZXJ0KDAsIFBhdGhJbXBvcnRlcikKLSAgICAgICAgc3lzLnBhdGguYXBwZW5kKHRlc3RfcGF0aCkKLSAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKCkKLQotICAgIGRlZiB0ZXN0QmxvY2tlcihzZWxmKToKLSAgICAgICAgbW5hbWUgPSAiZXhjZXB0aW9ucyIgICMgYW4gYXJiaXRyYXJ5IGhhcm1sZXNzIGJ1aWx0aW4gbW9kdWxlCi0gICAgICAgIHN1cHBvcnQudW5sb2FkKG1uYW1lKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQotCi0gICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgotICAgICAgICBpID0gSW1wV3JhcHBlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBJbXBXcmFwcGVyKQotICAgICAgICBtbmFtZXMgPSAoCi0gICAgICAgICAgICAiY29sb3JzeXMiLCAidXJsbGliLnBhcnNlIiwgImRpc3R1dGlscy5jb3JlIiwgInN5cyIsCi0gICAgICAgICkKLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIHBhcmVudCA9IG1uYW1lLnNwbGl0KCIuIilbMF0KLSAgICAgICAgICAgIGZvciBuIGluIGxpc3Qoc3lzLm1vZHVsZXMpOgotICAgICAgICAgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwYXJlbnQpOgotICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbl0KLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG1uYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbIl9fZHVtbXlfXyJdKQotICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGFuZGxlZCB0aGUgaW1wb3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtLCAiX19sb2FkZXJfXyIpKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbXBvcnRIb29rc1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CmluZGV4IGMzOTcxMjguLjE0YmQ1YmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5CkBAIC00LDE3ICs0LDYgQEAKIGJ1aWx0aW5zLl9faW1wb3J0X18gaW5zdGVhZCBvZiBpbXBvcnRsaWIuX19pbXBvcnRfXy4KIAogIiIiCi1mcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IGFyZ3BhcnNlCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRXhlY3V0ZSB0aGUgaW1wb3J0bGliIHRlc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VpdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVpbHRpbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgYnVpbHRpbnMuX19pbXBvcnRfXygpIGluc3RlYWQgb2YgaW1wb3J0bGliJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIGFyZ3MuYnVpbHRpbjoKLSAgICAgICAgdXRpbC51c2luZ19fX2ltcG9ydF9fID0gVHJ1ZQorICAgIGZyb20gLiBpbXBvcnQgdGVzdF9tYWluCiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQppbmRleCAyYzE3YWMzLi4yMDcwZGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CitjbGFzcyBGaW5kZXJUZXN0cyhtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCiAgICAgIiIiQmFzaWMgdGVzdHMgZm9yIGEgZmluZGVyIHRvIHBhc3MuIiIiCiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgTG9hZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC04MSwxMSArODEsNiBAQAogICAgICAgICBwYXNzCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICAiIiJJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCBpdCBzaG91bGQgYmUgcmV1c2VkLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKICAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcyBhbmQgYSByZWxvYWQgZmFpbHMKICAgICAgICAgKGUuZy4gYSBTeW50YXhFcnJvciksIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQppbmRleCBkYTBlZjI4Li45MzQ1NjJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTEgKzEsNTMgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKKworY2xhc3MgRmluZFNwZWNUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgorCisgICAgIiIiVGVzdCBmaW5kX3NwZWMoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBDb21tb24gY2FzZS4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgZm91bmQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZC5vcmlnaW4sICdidWlsdC1pbicpCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm9idCBiZSBpbiBhIHBhY2thZ2UuCisgICAgdGVzdF9tb2R1bGVfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdpbXBvcnRsaWInCisgICAgICAgIGFzc2VydCBuYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgorICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKGJ1aWx0aW5fdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydwa2cnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKK0Zyb3plbl9GaW5kU3BlY1Rlc3RzLCBTb3VyY2VfRmluZFNwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRTcGVjVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZF9tb2R1bGUoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKQEAgLTEzLDggKzU1LDkgQEAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29tbW9uIGNhc2UuCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGZvdW5kID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZm91bmQsICdsb2FkX21vZHVsZScpKQogCiAgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCiAgICAgdGVzdF9wYWNrYWdlID0gdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCkBAIC0yNCwyMiArNjcsMTkgQEAKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIGFzc2VydCAnaW1wb3J0bGliJyBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCi0gICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSgnaW1wb3J0bGliJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX3BhdGgoc2VsZik6CiAgICAgICAgICMgVGhlIHZhbHVlIGZvciAncGF0aCcgc2hvdWxkIGFsd2F5cyB0cmlnZ2VyIGEgZmFpbGVkIGltcG9ydC4KICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKaW5kZXggMTJhNzljNi4uOGUxMjgxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDIwICsxLDkzIEBACi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRXhlY01vZFRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGV4ZWNfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMudmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IGNscy5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQorCisgICAgZGVmIHZlcmlmeShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIG1hdGNoZXMgYWdhaW5zdCB3aGF0IGl0IHNob3VsZCBoYXZlLiIiIgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKQorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gc2VsZi52ZXJpZmljYXRpb24uaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3NwZWNfXy5vcmlnaW4sICdidWlsdC1pbicpCisKKyAgICBkZWYgbG9hZF9zcGVjKHNlbGYsIG5hbWUpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj0nYnVpbHQtaW4nKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgIyBTdHJpY3RseSBub3Qgd2hhdCBleGVjX21vZHVsZSgpIGlzIHN1cHBvc2VkIHRvIGRvLCBidXQgc2luY2UKKyAgICAgICAgIyBfaW1wLmluaXRfYnVpbHRpbigpIGRvZXMgdGhpcyB3ZSBjYW4ndCBnZXQgYXJvdW5kIGl0LgorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBDb21tb24gY2FzZS4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdidWlsdC1pbicsIHN0cihtb2R1bGUpKQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKKworICAgICMgTm90IHdheSB0byBmb3JjZSBhbiBpbXBvcnQgZmFpbHVyZS4KKyAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2Rzc2RzZGZmZicKKyAgICAgICAgYXNzZXJ0IG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZF9zcGVjKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgorICAgICAgICAjIFVzaW5nIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFscmVhZHkgaW1wb3J0ZWQgYnV0IG5vdCBhIGJ1aWx0LWluIHNob3VsZAorICAgICAgICAjIHN0aWxsIGZhaWwuCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2J1aWx0aW5fcmVsb2FkX3Rlc3QnCisgICAgICAgIGFzc2VydCBtb2R1bGVfbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj0nYnVpbHQtaW4nKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdID0gbW9kdWxlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCisKKworRnJvemVuX0V4ZWNNb2RUZXN0cywgU291cmNlX0V4ZWNNb2RUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2RUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKKworCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgogCi0gICAgdmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgbWF0Y2hlcyBhZ2FpbnN0IHdoYXQgaXQgc2hvdWxkIGhhdmUuIiIiCkBAIC0yMyw4ICs5Niw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBzeXMubW9kdWxlcykKIAotICAgIGxvYWRfbW9kdWxlID0gc3RhdGljbWV0aG9kKGxhbWJkYSBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKG5hbWUpKQorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgpAQCAtNTUsNDUgKzEyOCw1MSBAQAogICAgIGRlZiB0ZXN0X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CiAgICAgICAgICMgVXNpbmcgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYWxyZWFkeSBpbXBvcnRlZCBidXQgbm90IGEgYnVpbHQtaW4gc2hvdWxkCiAgICAgICAgICMgc3RpbGwgZmFpbC4KLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0bGliLCAnX19maWxlX18nKSAgIyBOb3QgYSBidWlsdC1pbi4KKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbl9yZWxvYWRfdGVzdCcKKyAgICAgICAgYXNzZXJ0IG1vZHVsZV9uYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ2ltcG9ydGxpYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICBtZXRob2QoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggNzZjNTNlNC4uYmIyNTI4ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDIyICsxLDI3IEBACi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCisKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAorCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKKworQHVuaXR0ZXN0LnNraXBJZihleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lLCAnX3Rlc3RjYXBpIG5vdCBhdmFpbGFibGUnKQogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgogICAgICAgICBnb29kX25hbWUgPSBleHRfdXRpbC5OQU1FCiAgICAgICAgIGJhZF9uYW1lID0gZ29vZF9uYW1lLnVwcGVyKCkKICAgICAgICAgYXNzZXJ0IGdvb2RfbmFtZSAhPSBiYWRfbmFtZQotICAgICAgICBmaW5kZXIgPSBfYm9vdHN0cmFwLkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2Jvb3RzdHJhcC5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCiAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoYmFkX25hbWUpCiAKICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKQEAgLTM3LDE0ICs0MiwxMCBAQAogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kX21vZHVsZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQogCi0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgaWYgZXh0X3V0aWwuRklMRU5BTUUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCkKK0Zyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksIFNvdXJjZV9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHkgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCwKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggMzdmNjc3Mi4uZDBjOGJiMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxNyArMSwyMSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHVuaXR0ZXN0CiAKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCB0aGUgZmluZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGltcG9ydGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMjksMTEgKzMzLDkgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKaW5kZXggZTc5MDY3NS4uNThiZDA5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQpAQCAtMSwyMCArMSw4NyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShmdWxsbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorCisgICAgZGVmIHRlc3RfZXhlY19tb2R1bGVfQVBJKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuZXhlY19tb2R1bGUoJ1hYWCcpCisKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmV4ZWNfbW9kdWxlKGV4dF91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gWygnX19uYW1lX18nLCBleHRfdXRpbC5OQU1FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2ZpbGVfXycsIGV4dF91dGlsLkZJTEVQQVRIKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX3BhY2thZ2VfXycsICcnKV06CisgICAgICAgICAgICAgICAgZ2l2ZW4gPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7fTogeyFyfSAhPSB7IXJ9Jy5mb3JtYXQoYXR0ciwgZ2l2ZW4sIHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKworICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBObyBleHRlbnNpb24gbW9kdWxlIGluIGEgcGFja2FnZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6CisgICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5leGVjX21vZHVsZShleHRfdXRpbC5OQU1FKQorICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYuZXhlY19tb2R1bGUoZXh0X3V0aWwuTkFNRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKKworICAgIGRlZiB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgTm8gZWFzeSB3YXkgdG8gdHJpZ2dlciBhIGZhaWx1cmUgYWZ0ZXIgYSBzdWNjZXNzZnVsIGltcG9ydC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdhc2RmamtsOycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2UoZXh0X3V0aWwuTkFNRSkpCisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5pc19wYWNrYWdlKCdwa2cnKSkKKworRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFeGVjTW9kdWxlVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKIAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYubG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCiAKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoZnVsbG5hbWUpCkBAIC0zNiw3ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCiAgICAgdGVzdF9wYWNrYWdlID0gTm9uZQpAQCAtNjEsMTYgKzEyOCwxNSBAQAogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKGV4dF91dGlsLk5BTUUpKQotICAgICAgICBmb3Igc3VmZml4IGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigncGtnJywgcGF0aCkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLmlzX3BhY2thZ2UoJ3BrZycpKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDFkOTY5YTEuLjQ5ZDY3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMzIgKzEsMzIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0czoKIAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgc3VjY2VlZCBmb3IgcHJlLWV4aXN0aW5nIGRpcmVjdG9yaWVzPwogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHdvcmsgZm9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZT8KIAogICAgIGRlZiBob29rKHNlbGYsIGVudHJ5KToKLSAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICAjIFBhdGggaG9vayBzaG91bGQgaGFuZGxlIGEgZGlyZWN0b3J5IHdoZXJlIGEga25vd24gZXh0ZW5zaW9uIG1vZHVsZQogICAgICAgICAjIGV4aXN0cy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5ob29rKHV0aWwuUEFUSCksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdHMpCitGcm96ZW5fUGF0aEhvb2tzVGVzdHMsIFNvdXJjZV9QYXRoSG9va3NUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQppbmRleCBhMjY2ZGQ5Li44ZDA4OWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQpAQCAtMSw0ICsxLDMgQEAKLWltcG9ydCBpbXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CmluZGV4IGYwYWJlMGUuLmY5Zjk3ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTUgKzEsNTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgdW5pdHRlc3QKIAogCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfc3BlYyhuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnZnJvemVuJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18nKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18uc3BhbScsIFsnX19waGVsbG9fXyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgIyBObyBmcm96ZW4gcGFja2FnZSB3aXRoaW4gYW5vdGhlciBwYWNrYWdlIHRvIHRlc3Qgd2l0aC4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgTm8gZWFzeSB3YXkgdG8gdGVzdC4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZGluZyBmcm96ZW4gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC0zNSwxMSArNzIsOSBAQAogICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmQoJzxub3QgcmVhbD4nKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQppbmRleCBmM2E4YmY2Li4yYWJiZTkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDE4ICsxLDkzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCisKK2ltcG9ydCBzeXMKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG9yaWdpbj0nZnJvemVuJywKKyAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1zZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKG1vZHVsZSwgJ2luaXRpYWxpemVkJykKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19zcGVjX18ub3JpZ2luLCAnZnJvemVuJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJfdmFsdWUsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB7bmFtZX0ue2F0dHJ9LCB7Z2l2ZW4hcn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fLnNwYW0nCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJyk6CisgICAgICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVufSAhPSB7ZXhwZWN0ZWQhcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgYXR0cj1hdHRyLCBnaXZlbj1hdHRyX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9dmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKKyAgICAjIE5vIHdheSB0byB0cmlnZ2VyIGFuIGVycm9yIGluIGEgZnJvemVuIG1vZHVsZS4KKyAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKKworRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2R1bGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19faGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQpAQCAtMjEsMTEgKzk2LDExIEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpLCAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnX19waGVsbG9fXyddLAotICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCkBAIC0zOCwxMCArMTEzLDEwIEBACiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJywgJ19fcGhlbGxvX18uc3BhbScpLCBcCiAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fLnNwYW0nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18uc3BhbScpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXy5zcGFtJywKICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19fcGhlbGxvX18nLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtNTMsMTUgKzEyOCwxNSBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZTEgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCi0gICAgICAgICAgICBtb2R1bGUyID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgbW9kdWxlMSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUxLCBtb2R1bGUyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlbGxvIHdvcmxkIVxuSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQogCkBAIC02OSwxMyArMTQ0LDE2IEBACiAgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQogCiAgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgYXNzZXJ0IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX25vdF9yZWFsJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCiAKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEluc3BlY3RMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciB0aGUgSW5zcGVjdExvYWRlciBtZXRob2RzIGZvciBGcm96ZW5JbXBvcnRlci4iIiIKIApAQCAtODMsMTUgKzE2MSwxNSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb2RlIG9iamVjdCBpcyBnb29kLgogICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBjb2RlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgY29kZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCisgICAgICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ2luaXRpYWxpemVkJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBTaG91bGQgYWx3YXlzIHJldHVybiBOb25lLgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKQEAgLTk5LDIyICsxNzcsMjAgQEAKICAgICAgICAgdGVzdF9mb3IgPSAoKCdfX2hlbGxvX18nLCBGYWxzZSksICgnX19waGVsbG9fXycsIFRydWUpLAogICAgICAgICAgICAgICAgICAgICAoJ19fcGhlbGxvX18uc3BhbScsIEZhbHNlKSkKICAgICAgICAgZm9yIG5hbWUsIGlzX3BhY2thZ2UgaW4gdGVzdF9mb3I6Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKHJlc3VsdCksIGlzX3BhY2thZ2UpCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFJhaXNlIEltcG9ydEVycm9yIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBmcm96ZW4uCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBtZXRob2QoJ2ltcG9ydGxpYicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnaW1wb3J0bGliJykKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0lMVGVzdHMsIFNvdXJjZV9JTFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMThkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weQpAQCAtMCwwICsxLDQ4IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworCitjbGFzcyBMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgTG9hZGVyQXR0cmlidXRlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfX19pc19Ob25lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKworRnJvemVuX1Rlc3RzLCBTb3VyY2VfVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJBdHRyaWJ1dGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKaW5kZXggNzgzY2RlMS4uNWZhNDMyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQpAQCAtOSw3ICs5LDcgQEAKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiAKLWNsYXNzIFVzaW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIlVzZSBvZiBfX3BhY2thZ2VfXyBzdXBlcmNlZGVzIHRoZSB1c2Ugb2YgX19uYW1lX18vX19wYXRoX18gdG8gY2FsY3VsYXRlCiAgICAgd2hhdCBwYWNrYWdlIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgW19fcGFja2FnZV9fXTo6CkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICMgW19fcGFja2FnZV9fXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5mYWtlJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLmZha2UnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz17J19fcGFja2FnZV9fJzogJ3BrZy5mYWtlJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgICAgICBnbG9iYWxzX1snX19wYWNrYWdlX18nXSA9IE5vbmUKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuZmFrZScpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuZmFrZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzPSBnbG9iYWxzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogCkBAIC02MywxNSArNjMsMTcgQEAKICAgICBkZWYgdGVzdF9iYWRfX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgZ2xvYmFscyA9IHsnX19wYWNrYWdlX18nOiAnPG5vdCByZWFsPid9CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQogCiAgICAgZGVmIHRlc3RfYnVua19fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6IDQyfQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2UsIFNvdXJjZV9Vc2luZ1BhY2thZ2UgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfXywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKLUBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJlY2F1c2UgX19wYWNrYWdlX18gaXMgYSBuZXcgZmVhdHVyZSwgaXQgaXMgbm90IGFsd2F5cyBzZXQgYnkgYSBsb2FkZXIuCkBAIC04NCwxMiArODYsMTQgQEAKIAogICAgICIiIgogCisgICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKwogICAgICMgW3RvcC1sZXZlbF0KICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWyd0b3BfbGV2ZWwnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAnJykKIAogICAgICMgW3BhY2thZ2VdCkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKICAgICAjIFtzdWJtb2R1bGVdCkBAIC0xMDUsMTUgKzEwOSwxMCBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWydwa2cubW9kJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBwa2cgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kJykKKyAgICAgICAgICAgICAgICBwa2cgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2QnKQogICAgICAgICAgICAgICAgIG1vZHVsZSA9IGdldGF0dHIocGtnLCAnbW9kJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNpbmdfX3BhY2thZ2VfXywgU2V0dGluZ19fcGFja2FnZV9fKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CmluZGV4IDNkNGNkOTQuLmRjOGI4YTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQpAQCAtMSw3ICsxLDcgQEAKLWZyb20gLi4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3Rlc3RfdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQogCiAKLWNsYXNzIEFQSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQVBJVGVzdDoKIAogICAgICIiIlRlc3QgQVBJLXNwZWNpZmljIGRldGFpbHMgZm9yIF9faW1wb3J0X18gKGUuZy4gcmFpc2luZyB0aGUgcmlnaHQKICAgICBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGluIGFuIGludCBmb3IgdGhlIG1vZHVsZSBuYW1lKS4iIiIKQEAgLTI1LDQzICsyNSw0MCBAQAogICAgIGRlZiB0ZXN0X25hbWVfcmVxdWlyZXNfcnBhcml0aW9uKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFR5cGVFcnJvciBpZiBhIG5vbi1zdHJpbmcgaXMgcGFzc2VkIGluIGZvciB0aGUgbW9kdWxlIG5hbWUuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwuaW1wb3J0Xyg0MikKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyg0MikKIAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xldmVsKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIGxldmVsIGlzIHNwZWNpZmllZC4KICAgICAgICAgIyBQRVAgMzI4IGRpZCBhd2F5IHdpdGggc3lzLm1vZHVsZSBOb25lIGVudHJpZXMgYW5kIHRoZSBhbWJpZ3VpdHkgb2YKICAgICAgICAgIyBhYnNvbHV0ZS9yZWxhdGl2ZSBpbXBvcnRzLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdvcycsIGdsb2JhbHMoKSwgbGV2ZWw9LTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ29zJywgZ2xvYmFscygpLCBsZXZlbD0tMSkKIAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X2Zyb21saXN0X2VudHJ5KHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2theS4KICAgICAgICAgIyBpc3N1ZTE1NzE1Ci0gICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKCdmaW5lJykKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZSgnZmluZScpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2ZpbmUnKToKICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCi0gICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnZmluZScsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKIAogICAgIGRlZiB0ZXN0X2Zyb21saXN0X2xvYWRfZXJyb3JfcHJvcGFnYXRlcyhzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uIG5vdCByZWxhdGVkIHRvIG5vdAogICAgICAgICAjIGV4aXN0aW5nLCBsZXQgdGhhdCBleGNlcHRpb24gcHJvcGFnYXRlLgogICAgICAgICAjIGlzc3VlMTUzMTYKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdmaW5lJykKICAgICAgICAgbW9kLl9fcGF0aF9fID0gWydYWFgnXQotICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6Ci0gICAgICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwudW5jYWNoZSgnZmluZScpOgorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnZmluZScpOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydmaW5lJ10gPSBtb2QKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydib2d1cyddKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ2ZpbmUnLCBmcm9tbGlzdD1bJ2JvZ3VzJ10pCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChBUElUZXN0KQorRnJvemVuX0FQSVRlc3RzLCBTb3VyY2VfQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQVBJVGVzdCwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKaW5kZXggMjA3Mzc4YS4uNGQwODJiOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBVc2VDYWNoZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVc2VDYWNoZToKIAogICAgICIiIldoZW4gaXQgY29tZXMgdG8gc3lzLm1vZHVsZXMsIGltcG9ydCBwcmVmZXJzIGl0IG92ZXIgYW55dGhpbmcgZWxzZS4KIApAQCAtMjEsMTIgKzIxLDEzIEBACiAgICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIFtOb25lIGluIGNhY2hlXS4KIAogICAgICIiIgorCiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGUoc2VsZik6CiAgICAgICAgICMgW3VzZSBjYWNoZV0KICAgICAgICAgbW9kdWxlX3RvX3VzZSA9ICJzb21lIG1vZHVsZSBmb3VuZCEiCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdzb21lX21vZHVsZScpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3NvbWVfbW9kdWxlJ10gPSBtb2R1bGVfdG9fdXNlCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzb21lX21vZHVsZScpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3NvbWVfbW9kdWxlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlX3RvX3VzZSksIGlkKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9Ob25lX2luX2NhY2hlKHNlbGYpOgpAQCAtMzUsNyArMzYsNyBAQAogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKIAogICAgIGRlZiBjcmVhdGVfbW9jayhzZWxmLCAqbmFtZXMsIHJldHVybl89Tm9uZSk6CkBAIC00Nyw0MiArNDgsNDMgQEAKICAgICAgICAgbW9jay5sb2FkX21vZHVsZSA9IE1ldGhvZFR5cGUobG9hZF9tb2R1bGUsIG1vY2spCiAgICAgICAgIHJldHVybiBtb2NrCiAKK0Zyb3plbl9Vc2VDYWNoZSwgU291cmNlX1VzZUNhY2hlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzZUNhY2hlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgSW1wb3J0bGliVXNlQ2FjaGUoVXNlQ2FjaGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9faW1wb3J0X18gPSBpbXBvcnRfdXRpbC5fX2ltcG9ydF9fWzFdCisKICAgICAjIF9faW1wb3J0X18gaW5jb25zaXN0ZW50IGJldHdlZW4gbG9hZGVycyBhbmQgYnVpbHQtaW4gaW1wb3J0IHdoZW4gaXQgY29tZXMKICAgICAjICAgdG8gd2hlbiB0byB1c2UgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcyBhbmQgd2hlbiBub3QgdG8uCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIG9uIHJldHVybl0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdtb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZSksIGlkKHN5cy5tb2R1bGVzWydtb2R1bGUnXSkpCiAKICAgICAjIFNlZSB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcigpIGZvciByZWFzb25pbmcuCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfZm9yX2Fzc2lnbmluZ190b19hdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgdG8gYXR0cmlidXRlXQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlLm1vZHVsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzeXMubW9kdWxlc1sncGtnLm1vZHVsZSddKSkKIAogICAgICMgU2VlIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKCkgZm9yIHJlYXNvbmluZy4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9mb3JfZnJvbWxpc3Qoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgZm9yIGZyb21saXN0XQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZS5tb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc3lzLm1vZHVsZXNbJ3BrZy5tb2R1bGUnXSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNlQ2FjaGUpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQppbmRleCBjMTZjMzM3Li5mYzI5Y2U2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CkBAIC0xLDEwICsxLDEwIEBACiAiIiJUZXN0IHRoYXQgdGhlIHNlbWFudGljcyByZWxhdGluZyB0byB0aGUgJ2Zyb21saXN0JyBhcmd1bWVudCBhcmUgY29ycmVjdC4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAotaW1wb3J0IGltcAogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJldHVyblZhbHVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgUmV0dXJuVmFsdWU6CiAKICAgICAiIiJUaGUgdXNlIG9mIGZyb21saXN0IGluZmx1ZW5jZXMgd2hhdCBpbXBvcnQgcmV0dXJucy4KIApAQCAtMTksMTggKzE5LDIxIEBACiAgICAgICAgICMgW2ltcG9ydCByZXR1cm5dCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3JldHVybl9mcm9tX2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICAjIFtmcm9tIHJldHVybl0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKWFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCiAKK0Zyb3plbl9SZXR1cm5WYWx1ZSwgU291cmNlX1JldHVyblZhbHVlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJldHVyblZhbHVlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIEhhbmRsaW5nRnJvbWxpc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBIYW5kbGluZ0Zyb21saXN0OgogCiAgICAgIiIiVXNpbmcgZnJvbWxpc3QgdHJpZ2dlcnMgZGlmZmVyZW50IGFjdGlvbnMgYmFzZWQgb24gd2hhdCBpcyBiZWluZyBhc2tlZAogICAgIG9mIGl0LgpAQCAtNDksMTQgKzUyLDE0IEBACiAgICAgICAgICMgW29iamVjdCBjYXNlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdtb2R1bGUnKQogCiAgICAgZGVmIHRlc3Rfbm9uZXhpc3RlbnRfb2JqZWN0KHNlbGYpOgogICAgICAgICAjIFtiYWQgb2JqZWN0XQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnbm9uX2V4aXN0ZW50J10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ25vbl9leGlzdGVudCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnbm9uX2V4aXN0ZW50JykpCiAKQEAgLTY0LDcgKzY3LDcgQEAKICAgICAgICAgIyBbbW9kdWxlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQpAQCAtNzksMTMgKzgyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cubW9kJzogbW9kdWxlX2NvZGV9KSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2QnXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lfZG9fbm90X2V4aXN0JywgZXhjLmV4Y2VwdGlvbi5uYW1lKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZCcsIGZyb21saXN0PVsnJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kJywgZnJvbWxpc3Q9WycnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2QnKQogCiAgICAgZGVmIGJhc2ljX3N0YXJfdGVzdChzZWxmLCBmcm9tbGlzdD1bJyonXSk6CkBAIC05Myw3ICs5Niw3IEBACiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9ja1sncGtnJ10uX19hbGxfXyA9IFsnbW9kdWxlJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1mcm9tbGlzdCkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PWZyb21saXN0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKQEAgLTExMSwxNyArMTE0LDE2IEBACiAgICAgICAgIHdpdGggY29udGV4dCBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2NrWydwa2cnXS5fX2FsbF9fID0gWydtb2R1bGUxJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZTInLCAnKiddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUyJywgJyonXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlMScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZTInKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUxLl9fbmFtZV9fLCAncGtnLm1vZHVsZTEnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZTIuX19uYW1lX18sICdwa2cubW9kdWxlMicpCiAKK0Zyb3plbl9Gcm9tTGlzdCwgU291cmNlX0Zyb21MaXN0ID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEhhbmRsaW5nRnJvbWxpc3QsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUmV0dXJuVmFsdWUsIEhhbmRsaW5nRnJvbWxpc3QpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CmluZGV4IDRkODVmODAuLmE1NjI1M2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIENhbGxpbmdPcmRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYWxsaW5nT3JkZXI6CiAKICAgICAiIiJDYWxscyB0byB0aGUgaW1wb3J0ZXJzIG9uIHN5cy5tZXRhX3BhdGggaGFwcGVuIGluIG9yZGVyIHRoYXQgdGhleSBhcmUKICAgICBzcGVjaWZpZWQgaW4gdGhlIHNlcXVlbmNlLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBpbXBvcnRlcgpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICAgICAgZmlyc3QubW9kdWxlc1ttb2RdID0gNDIKICAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF0gPSAtMTMKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtmaXJzdCwgc2Vjb25kXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZCksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fX2ltcG9ydF9fKG1vZCksIDQyKQogCiAgICAgZGVmIHRlc3RfY29udGludWluZyhzZWxmKToKICAgICAgICAgIyBbY29udGludWluZ10KQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgIGZpcnN0LmZpbmRfbW9kdWxlID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmU6IE5vbmUKICAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSA9IDQyCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKSwgNDIpCiAKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKICAgICAgICAgIyBSYWlzZSBhbiBJbXBvcnRXYXJuaW5nIGlmIHN5cy5tZXRhX3BhdGggaXMgZW1wdHkuCkBAIC00NiwxMyArNDYsMTYgQEAKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W10pOgogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfbW9kdWxlKCdub3RoaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfc3BlYygnbm90aGluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCiAKK0Zyb3plbl9DYWxsaW5nT3JkZXIsIFNvdXJjZV9DYWxsaW5nT3JkZXIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbGluZ09yZGVyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIENhbGxTaWduYXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBDYWxsU2lnbmF0dXJlOgogCiAgICAgIiIiSWYgdGhlcmUgaXMgbm8gX19wYXRoX18gZW50cnkgb24gdGhlIHBhcmVudCBtb2R1bGUsIHRoZW4gJ3BhdGgnIGlzIE5vbmUKICAgICBbbm8gcGF0aF0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGZvciBfX3BhdGhfXyBpcyBwYXNzZWQgaW4gZm9yIHRoZSAncGF0aCcKQEAgLTc0LDcgKzc3LDcgQEAKICAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCiAgICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obG9nKSA9PSAxCiAgICAgICAgICAgICAgICAgYXJncyA9IGxvZ1swXVswXQogICAgICAgICAgICAgICAgIGt3YXJncyA9IGxvZ1swXVsxXQpAQCAtOTUsNyArOTgsNyBAQAogICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZyhpbXBvcnRlci5maW5kX21vZHVsZSkKICAgICAgICAgICAgIGltcG9ydGVyLmZpbmRfbW9kdWxlID0gTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihsb2cpID09IDIKICAgICAgICAgICAgICAgICBhcmdzID0gbG9nWzFdWzBdCiAgICAgICAgICAgICAgICAga3dhcmdzID0gbG9nWzFdWzFdCkBAIC0xMDQsMTIgKzEwNyw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGFyZ3NbMV0sIHBhdGgpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChDYWxsaW5nT3JkZXIsIENhbGxTaWduYXR1cmUpCitGcm96ZW5fQ2FsbFNpZ25hdHVyZSwgU291cmNlX0NhbGxTaWduYXR1cmUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQppbmRleCBiZmExOGRjLi4yZGY0MjFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CkBAIC02LDIxICs2LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCi1jbGFzcyBQYXJlbnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXJlbnRNb2R1bGVUZXN0czoKIAogICAgICIiIkltcG9ydGluZyBhIHN1Ym1vZHVsZSBzaG91bGQgaW1wb3J0IHRoZSBwYXJlbnQgbW9kdWxlcy4iIiIKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yYWlzaW5nX3BhcmVudF9hZnRlcl9pbXBvcnRpbmdfY2hpbGQoc2VsZik6CkBAIC0zMiwxMSArMzIsMTEgQEAKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQogCkBAIC01MSwxMCArNTEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLiBpbXBvcnQgbW9kdWxlIgogICAgICAgICAgICAgICAgICAgICAjIGxpbmUsIG5vdCBzdXJlIHdoeS4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICAjIFhYWCBGYWxzZQogICAgICAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLi5zdWJwa2cgaW1wb3J0IG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAgIyBsaW5lLCBub3Qgc3VyZSB3aHkuCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZy5zdWJwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLnN1YnBrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgIyBYWFggRmFsc2UKICAgICAgICAgICAgICAgICAjc2VsZi5hc3NlcnRJbigncGtnLnN1YnBrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgIyBUcnkgdG8gaW1wb3J0IGEgc3VibW9kdWxlIGZyb20gYSBub24tcGFja2FnZSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzeXMsICdfX3BhdGhfXycpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfbm90X3BhY2thZ2VfYnV0X3NpZGVfZWZmZWN0cyhzZWxmKToKQEAgLTk4LDE1ICs5OCwxMyBAQAogICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcyBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oc3VibmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKHN1Ym5hbWUpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxvYWQoc3VibmFtZSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXJlbnRNb2R1bGVUZXN0cykKK0Zyb3plbl9QYXJlbnRUZXN0cywgU291cmNlX1BhcmVudFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhcmVudE1vZHVsZVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQppbmRleCBkODJiN2Y2Li4xNGZkYWEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQpAQCAtMSw4ICsxLDkgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1mcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKK2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQpAQCAtMTEsNyArMTIsNyBAQAogaW1wb3J0IHppcGltcG9ydAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEZpbmRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIFBhdGhGaW5kZXIuIiIiCiAKQEAgLTE5LDcgKzIwLDcgQEAKICAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGZpbmRlci4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGggaXMgdXNlZCB3aGVuICdwYXRoJyBpcyBOb25lLgpAQCAtMjksNyArMzAsNyBAQAogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF9wYXRoKHNlbGYpOgpAQCAtMzksNyArNDAsNyBAQAogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbGlzdChzZWxmKToKQEAgLTQ5LDcgKzUwLDcgQEAKICAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCiAKICAgICBkZWYgdGVzdF9wYXRoX2hvb2tzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9ob29rcyBpcyB1c2VkLgpAQCAtNTksNyArNjAsNyBAQAogICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKICAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKHBhdGgsIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaG9va3M9W2hvb2tdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdLCBpbXBvcnRlcikKQEAgLTcyLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoX2VudHJ5XSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnb3MnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdvcycpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhfZW50cnldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbLTFdLmNhdGVnb3J5LCBJbXBvcnRXYXJuaW5nKSkKQEAgLTgyLDExICs4MywxMSBAQAogICAgICAgICBwYXRoID0gJycKICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQotICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuY3VyZGlyLCBpbXBvcnRlcj1pbXBvcnRlcikKKyAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmN1cmRpciwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKIAogICAgIGRlZiB0ZXN0X05vbmVfb25fc3lzX3BhdGgoc2VsZik6CiAgICAgICAgICMgUHV0dGluZyBOb25lIGluIHN5cy5wYXRoWzBdIGNhdXNlZCBhbiBpbXBvcnQgcmVncmVzc2lvbiBmcm9tIFB5dGhvbgpAQCAtOTYsOCArOTcsOCBAQAogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZS5wb3AoTm9uZSwgTm9uZSkKICAgICAgICAgbmV3X3BhdGhfaG9va3MgPSBbemlwaW1wb3J0LnppcGltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkZpbGVGaW5kZXIucGF0aF9ob29rKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpKV0KICAgICAgICAgbWlzc2luZyA9IG9iamVjdCgpCiAgICAgICAgIGVtYWlsID0gc3lzLm1vZHVsZXMucG9wKCdlbWFpbCcsIG1pc3NpbmcpCiAgICAgICAgIHRyeToKQEAgLTEwNSwxNiArMTA2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9bmV3X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGU9bmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3M9bmV3X3BhdGhfaG9va3MpOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUoJ2VtYWlsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdlbWFpbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgTW9kdWxlVHlwZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGVtYWlsIGlzIG5vdCBtaXNzaW5nOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydlbWFpbCddID0gZW1haWwKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHMsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CmluZGV4IDQ1NjljMjYuLmZjNmQyNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJlbGF0aXZlSW1wb3J0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSZWxhdGl2ZUltcG9ydHM6CiAKICAgICAiIiJQRVAgMzI4IGludHJvZHVjZWQgcmVsYXRpdmUgaW1wb3J0cy4gVGhpcyBhbGxvd3MgZm9yIGltcG9ydHMgdG8gb2NjdXIKICAgICBmcm9tIHdpdGhpbiBhIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZS4KQEAgLTc2LDggKzc2LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kMiddLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZDInXSwgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZDInKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZDIuYXR0ciwgJ3BrZy5tb2QyJykKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZDInLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kMicsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kMicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCAncGtnLm1vZDInKQpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgIGdsb2JhbHNfID0gKHsnX19wYWNrYWdlX18nOiAncGtnJ30sCiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQpAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgZ2xvYmFsc18gPSAgKHsnX19wYWNrYWdlX18nOiAncGtnLnN1YnBrZzEnfSwKICAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnLnN1YnBrZzEnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnc3VicGtnMiddLAorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3N1YnBrZzInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ3N1YnBrZzInKSkKQEAgLTE0Miw4ICsxNDIsOCBAQAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZy5wa2cxLnBrZzIucGtnMy5wa2c0LnBrZzUnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKGdsb2JhbHNfWzBdWydfX3BhY2thZ2VfXyddKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTYpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oZ2xvYmFsc19bMF1bJ19fcGFja2FnZV9fJ10pCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD02KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgICAgZ2xvYmFsc18gPSAoeydfX3BhY2thZ2VfXyc6ICdwa2cnfSwKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTY0LDE2ICsxNjQsMTYgQEAKICAgICAgICAgY3JlYXRlID0gWyd0b3BfbGV2ZWwnLCAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnXQogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZHVsZSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfd19sZXZlbF8wKHNlbGYpOgogICAgICAgICAjIFtlbXB0eSBuYW1lXQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJykKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX2RpZmZlcmVudF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSB0aGFuIHRoZSBjYWxsZXIuCkBAIC0xODYsOCArMTg2LDggQEAKICAgICAgICAgICAgICAgICAgICAgJ19fcnVucHlfcGtnX18udW5jbGUuY291c2luLm5lcGhldyddCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygndW5jbGUuY291c2luJywgZ2xvYmFsc18sIHt9LAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd1bmNsZS5jb3VzaW4nLCBnbG9iYWxzXywge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ25lcGhldyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdfX3J1bnB5X3BrZ19fLnVuY2xlLmNvdXNpbicpCkBAIC0xOTgsMjAgKzE5OCwxOSBAQAogICAgICAgICBjcmVhdGUgPSBbJ2NyYXNoLl9faW5pdF9fJywgJ2NyYXNoLm1vZCddCiAgICAgICAgIGdsb2JhbHNfID0gW3snX19wYWNrYWdlX18nOiAnY3Jhc2gnLCAnX19uYW1lX18nOiAnY3Jhc2gnfV0KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnY3Jhc2gnKQotICAgICAgICAgICAgbW9kID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kJywgZ2xvYmFsXywge30sIFtdLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdjcmFzaCcpCisgICAgICAgICAgICBtb2QgPSBzZWxmLl9faW1wb3J0X18oJ21vZCcsIGdsb2JhbF8sIHt9LCBbXSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCAnY3Jhc2gubW9kJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF9ub19nbG9iYWxzKHNlbGYpOgogICAgICAgICAjIE5vIGdsb2JhbHMgZm9yIGEgcmVsYXRpdmUgaW1wb3J0IGlzIGFuIGVycm9yLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3N5cycsIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cycsIGxldmVsPTEpCiAKK0Zyb3plbl9SZWxhdGl2ZUltcG9ydHMsIFNvdXJjZV9SZWxhdGl2ZUltcG9ydHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVsYXRpdmVJbXBvcnRzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFJlbGF0aXZlSW1wb3J0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CmluZGV4IDg2YWMwNjUuLmRjYjQ5MGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKQEAgLTEsMjIgKzEsMTQgQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKKworZnJvemVuX2ltcG9ydGxpYiwgc291cmNlX2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKKworaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgdW5pdHRlc3QKIAogCi11c2luZ19fX2ltcG9ydF9fID0gRmFsc2UKLQotCi1kZWYgaW1wb3J0XygqYXJncywgKiprd2FyZ3MpOgotICAgICIiIkRlbGVnYXRlIHRvIGFsbG93IGZvciBpbmplY3RpbmcgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBpbXBvcnQuIiIiCi0gICAgaWYgdXNpbmdfX19pbXBvcnRfXzoKLSAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuX19pbXBvcnRfXygqYXJncywgKiprd2FyZ3MpCi0KLQotZGVmIGltcG9ydGxpYl9vbmx5KGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIHNraXAgYSB0ZXN0IGlmIHVzaW5nIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fLiIiIgotICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYodXNpbmdfX19pbXBvcnRfXywgImltcG9ydGxpYi1zcGVjaWZpYyB0ZXN0IikoZnhuKQorX19pbXBvcnRfXyA9IHN0YXRpY21ldGhvZChidWlsdGlucy5fX2ltcG9ydF9fKSwgc3RhdGljbWV0aG9kKHNvdXJjZV9pbXBvcnRsaWIuX19pbXBvcnRfXykKIAogCiBkZWYgbW9ja19wYXRoX2hvb2soKmVudHJpZXMsIGltcG9ydGVyKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkxMmI2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotCi1mcm9tIC4uIGltcG9ydCBhYmMgYXMgdGVzdGluZ19hYmMKLWZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlvCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdhcm5pbmdzCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlck1vY2soYWJjLlNvdXJjZUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYucGF0aCA9PSBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gJzxtb2R1bGU+JwotCi0KLWNsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgotCi0gICAgc291cmNlX210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKLSAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQotICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgc2VsZi53cml0dGVuID0ge30KLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQotICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQotCi0gICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgotICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQotICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKLQotCi1jbGFzcyBQeUxvYWRlck1vY2soYWJjLlB5TG9hZGVyKToKLQotICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KLSAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fcGFja2FnZV9fLCAiCi0gICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiVGFrZSBhIGRpY3Qgb2YgJ21vZHVsZV9uYW1lOiBwYXRoJyBwYWlyaW5ncy4KLQotICAgICAgICBQYXRocyBzaG91bGQgaGF2ZSBubyBmaWxlIGV4dGVuc2lvbiwgYWxsb3dpbmcgcGFja2FnZXMgdG8gYmUgZGVub3RlZCBieQotICAgICAgICBlbmRpbmcgaW4gJ19faW5pdF9fJy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBkYXRhCi0gICAgICAgIHNlbGYucGF0aF90b19tb2R1bGUgPSB7dmFsOmtleSBmb3Iga2V5LHZhbCBpbiBkYXRhLml0ZW1zKCl9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGF0aF90b19tb2R1bGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJTaWxlbmNlIGRlcHJlY2F0aW9uIHdhcm5pbmcuIiIiCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBwYXRoID0gc3VwZXIoKS5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQotICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdE1vY2soUHlMb2FkZXJNb2NrKToKLQotICAgICIiIk1vY2sgdGhhdCBtYXRjaGVzIHdoYXQgaXMgc3VnZ2VzdGVkIHRvIGhhdmUgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgZnJvbSBQeXRob24gMy4xIG9ud2FyZHMuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFB5UHljTG9hZGVyTW9jayhhYmMuUHlQeWNMb2FkZXIsIFB5TG9hZGVyTW9jayk6Ci0KLSAgICBkZWZhdWx0X210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgYmM9e30pOgotICAgICAgICAiIiJJbml0aWFsaXplIG1vY2suCi0KLSAgICAgICAgJ2JjJyBpcyBhIGRpY3Qga2V5ZWQgb24gYSBtb2R1bGUncyBuYW1lLiBUaGUgdmFsdWUgaXMgZGljdCB3aXRoCi0gICAgICAgIHBvc3NpYmxlIGtleXMgb2YgJ3BhdGgnLCAnbXRpbWUnLCAnbWFnaWMnLCBhbmQgJ2JjJy4gRXhjZXB0IGZvciAncGF0aCcsCi0gICAgICAgIGVhY2ggb2YgdGhvc2Uga2V5cyBjb250cm9sIGlmIGFueSBwYXJ0IG9mIGNyZWF0ZWQgYnl0ZWNvZGUgaXMgdG8KLSAgICAgICAgZGV2aWF0ZSBmcm9tIGRlZmF1bHQgdmFsdWVzLgotCi0gICAgICAgICIiIgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNvdXJjZSkKLSAgICAgICAgc2VsZi5tb2R1bGVfYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLnBhdGhfdG9fYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGggPSB7fQotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBiYy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlW2RhdGFbJ3BhdGgnXV0gPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0gPSBkYXRhWydwYXRoJ10KLSAgICAgICAgICAgIG1hZ2ljID0gZGF0YS5nZXQoJ21hZ2ljJywgaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3dfbG9uZyhkYXRhLmdldCgnbXRpbWUnLCBzZWxmLmRlZmF1bHRfbXRpbWUpKQotICAgICAgICAgICAgc291cmNlX3NpemUgPSBpbXBvcnRsaWIuX3dfbG9uZyhsZW4oc2VsZi5zb3VyY2UpICYgMHhGRkZGRkZGRikKLSAgICAgICAgICAgIGlmICdiYycgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBiYyA9IGRhdGFbJ2JjJ10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYmMgPSBzZWxmLmNvbXBpbGVfYmMobmFtZSkKLSAgICAgICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gbWFnaWMgKyBtdGltZSArIHNvdXJjZV9zaXplICsgYmMKLQotICAgIGRlZiBjb21waWxlX2JjKHNlbGYsIG5hbWUpOgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGhzLmdldChuYW1lLCAnPHRlc3Q+Jykgb3IgJzx0ZXN0PicKLSAgICAgICAgY29kZSA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycpCi0gICAgICAgIHJldHVybiBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9tdGltZQotICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfcGF0aHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gYnl0ZWNvZGUKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoIGluIHNlbGYucGF0aF90b19ieXRlY29kZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhdGhfdG9fYnl0ZWNvZGVbcGF0aF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAnX19pbml0X18nIGluIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzdXBlcigpLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi1jbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJNb2NrCi0KLSAgICBkZWYgZXFfYXR0cnMoc2VsZiwgb2IsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGF0dHIsIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihvYiwgYXR0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgInt9IGF0dHJpYnV0ZToge30gIT0ge30iLmZvcm1hdChhdHRyLCBmb3VuZCwgdmFsKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8bW9kdWxlPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignJywgJ3BhdGgnLCAndG8nLCAnbW9kdWxlJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189JycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8cGtnPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsIG5hbWUsICdfX2luaXRfXycpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsCi0gICAgICAgICAgICAgICAgX19wYXRoX189W29zLnBhdGguZGlybmFtZShwYXRoKV0sIF9fcGFja2FnZV9fPW5hbWUsCi0gICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAncGtnLm1vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdwa2cnLCAnbW9kJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189J3BrZycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKQotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBsb2FkZWRfbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWRfbW9kdWxlLCBtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2NrLCBuYW1lCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBuYW1lID0gIm1vZCIKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9kdWxlLmJsYWggPSBOb25lCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYmxhaCcpKQotICAgICAgICByZXR1cm4gbW9jawotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICByZXR1cm4gbW9jawotCi0KLWNsYXNzIFB5TG9hZGVyQ29tcGF0VGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgdGhlIHN1Z2dlc3RlZCBjb2RlIHRvIG1ha2UgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlIGZyb20KLSAgICBQeXRob24gMy4xIGZvcndhcmQgd29ya3MuIiIiCi0KLSAgICBtb2NrZXIgPSBQeUxvYWRlckNvbXBhdE1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gc291cmNlX3BhdGgoKQotICAgIGRvZXNuJ3QgcmV0dXJuIGEgcGF0aCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgZGVmIHRlc3Rfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgcGF0aCkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9ub19zb3VyY2VfcGF0aChzZWxmKToKLSAgICAgICAgIyBnZXRfZmlsZW5hbWUoKSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgc291cmNlX3BhdGggcmV0dXJucyBOb25lLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5UHljTG9hZGVyTW9jawotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB2ZXJpZnlfYnl0ZWNvZGUoc2VsZiwgbW9jaywgbmFtZSk6Ci0gICAgICAgIGFzc2VydCBuYW1lIGluIG1vY2subW9kdWxlX3BhdGhzCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCAxKQotICAgICAgICBzb3VyY2Vfc2l6ZSA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzg6MTJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vY2suc291cmNlKSAmIDB4RkZGRkZGRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLl9yX2xvbmcoc291cmNlX3NpemUpKQotICAgICAgICBiYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzEyOl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYywgbW9jay5jb21waWxlX2JjKG5hbWUpKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X3BhY2thZ2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG1vY2ssIG5hbWUgPSBzdXBlcigpLnRlc3RfbGFja2luZ19wYXJlbnQoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZV9yZXVzZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSgpCi0KLSAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3RfdW5sb2FkYWJsZSgpCi0KLQotY2xhc3MgUHlQeWNMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGZvciB0aGUgaW50ZXJmYWNlIG9mIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lX2NoZWNrKHNlbGYsIHNyY19wYXRoLCBiY19wYXRoLCBleHBlY3QpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogc3JjX3BhdGh9LCB7bmFtZTogeydwYXRoJzogYmNfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIGFzc2VydCBtb2NrLnNvdXJjZV9wYXRoKG5hbWUpID09IHNyY19wYXRoCi0gICAgICAgICAgICBhc3NlcnQgbW9jay5ieXRlY29kZV9wYXRoKG5hbWUpID09IGJjX3BhdGgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdoZW4gc291cmNlIGFuZCBieXRlY29kZSBwYXRocyBwcmVzZW50LCByZXR1cm4gdGhlIHNvdXJjZSBwYXRoLgotICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCAnYmNfcGF0aCcsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9ub19iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIHNvdXJjZSBidXQgbm8gYmMsIHJldHVybiBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgTm9uZSwgJ3NvdXJjZV9wYXRoJykKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdpdGggbm90IHNvdXJjZSBidXQgYmMsIHJldHVybiB0aGUgYmMgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soTm9uZSwgJ2JjX3BhdGgnLCAnYmNfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9vcl9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vIHNvdXJjZSBvciBiYywgcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IE5vbmV9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpCi0KLQotY2xhc3MgU2tpcFdyaXRpbmdCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgdGhhdCBieXRlY29kZSBpcyBwcm9wZXJseSBoYW5kbGVkIGJhc2VkIG9uCi0gICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBkb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KG5hbWUgaW4gbW9jay5tb2R1bGVfYnl0ZWNvZGUsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KFRydWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KEZhbHNlKQotCi0KLWNsYXNzIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcmVnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3RfZGlmZmVyZW50X21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgZGlmZmVyZW50IG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBuZXcgYnl0ZWNvZGUuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYWRfbWFnaWMgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGFzc2VydCBiYWRfbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QuYnl0ZWNvZGUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9vbGRfbXRpbWUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgd2l0aCBhbiBvbGRlciBtdGltZSBzaG91bGQgYmUgcmVnZW5lcmF0ZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBvbGRfbXRpbWUgPSBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSAtIDEKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogJ3BhdGgvdG8vbW9kLmJ5dGVjb2RlJywgJ210aW1lJzogb2xkX210aW1lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtdGltZSA9IGltcG9ydGxpYi5fcl9sb25nKG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzQ6OF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIFB5UHljTG9hZGVyTW9jay5kZWZhdWx0X210aW1lKQotCi0KLWNsYXNzIEJhZEJ5dGVjb2RlRmFpbHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgaW1wb3J0IGZhaWx1cmVzIHdoZW4gdGhlcmUgaXMgbm8gc291cmNlIGFuZCBwYXJ0cyBvZiB0aGUgYnl0ZWNvZGUKLSAgICBpcyBiYWQuIiIiCi0KLSAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiYyA9IHtuYW1lOgotICAgICAgICAgICAgICAgIHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgTWlzc2luZyBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhbiBFT0ZFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJjID0ge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwgJ2JjJzogYicnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInMTIzNCd9fQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1kZWYgcmFpc2VfSW1wb3J0RXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcgotCi1jbGFzcyBNaXNzaW5nUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggZG9lcyBub3QgZXhpc3QgKGVpdGhlcgotICAgIGZyb20gKl9wYXRoIHJldHVybmluZyBOb25lIG9yIHJhaXNpbmcgSW1wb3J0RXJyb3IpLiIiIgotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfTm9uZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBzaG91bGQgYmUgdXNlZCB3aGVuIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZSwgYWxvbmcgd2l0aAotICAgICAgICAjIF9fZmlsZV9fIGJlaW5nIHNldCB0byB0aGUgYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSAncGF0aC90by9tb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogYnl0ZWNvZGVfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIGJ5dGVjb2RlX3BhdGgpCi0KLSAgICAjIFRlc3RpbmcgZm9yIGJ5dGVjb2RlX3BhdGggcmV0dXJuaW5nIE5vbmUgaGFuZGxlZCBieSBhbGwgdGVzdHMgd2hlcmUgbm8KLSAgICAjIGJ5dGVjb2RlIGluaXRpYWxseSBleGlzdHMuCi0KLSAgICBkZWYgdGVzdF9hbGxfcGF0aHNfTm9uZShzZWxmKToKLSAgICAgICAgIyBJZiBhbGwgKl9wYXRoIG1ldGhvZHMgcmV0dXJuIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIHNvdXJjZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7fSwge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZCcpfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgotICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gYnl0ZWNvZGVfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKLSAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCi0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQotICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCi0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKLSAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKLQotICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKLSAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAotICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCi0gICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCi0gICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLQotCi1jbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgotCi0gICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KLQotICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKLSAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jawotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgotICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKLSAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKLQotICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAotICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCi0gICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6Ci0gICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQotICAgICAgICAjIGlzIGEgcGFja2FnZS4KLSAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgotICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCi0gICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKLSAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCi1jbGFzcyBTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIncyB1c2Ugb2YgYnl0ZWNvZGUuCi0KLSAgICBTb3VyY2Utb25seSB0ZXN0aW5nIGhhbmRsZWQgYnkgU291cmNlT25seUxvYWRlclRlc3RzLgotCi0gICAgIiIiCi0KLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZUxvYWRlck1vY2sKLQotICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6Ci0gICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgotICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKLSAgICAgICAgIyBTYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgotICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKLSAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCi0gICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCi0gICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCi0gICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKLSAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCi0KLSAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KLSAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgotICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJwotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLSAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQotICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKLSAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKLQotCi1jbGFzcyBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoZSBjb25jcmV0ZSBhYnN0cmFjdG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIiIiCi0KLSAgICBjbGFzcyBNZXRhUGF0aEZpbmRlcihhYmMuTWV0YVBhdGhGaW5kZXIpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLQotICAgIGNsYXNzIFBhdGhFbnRyeUZpbmRlcihhYmMuUGF0aEVudHJ5RmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQotCi0gICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9sb2FkZXIoXykKLQotICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBMb2FkZXIoYWJjLkxvYWRlcik6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHN1cGVyKCkubW9kdWxlX3JlcHIobW9kdWxlKQotCi0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCi0KLSAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgotICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQotCi0gICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKLQotICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQotCi0gICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKLQotICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6Ci0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKLQotICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgotICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQotCi0gICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQotCi0gICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6Ci0gICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQotCi0gICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgotICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQotICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQotCi0gICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCi0KLSAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQotICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQotCi0gICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQotCi0gICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCi0KLSAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKLSAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKLSAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX3N0YXRzJywgJ3NldF9kYXRhJykKLQotICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCi0KLSAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDI0MTE3M2YuLmIzZTlkMjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSw5ICsxLDEwIEBACiAiIiJUZXN0IGNhc2Utc2Vuc2l0aXZpdHkgKFBFUCAyMzUpLiIiIgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotaW1wb3J0IGltcAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKQEAgLTExLDcgKzEyLDcgQEAKIAogCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICAiIiJQRVAgMjM1IGRpY3RhdGVzIHRoYXQgb24gY2FzZS1wcmVzZXJ2aW5nLCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcwogICAgIHRoYXQgaW1wb3J0cyBhcmUgY2FzZS1zZW5zaXRpdmUgdW5sZXNzIHRoZSBQWVRIT05DQVNFT0sgZW52aXJvbm1lbnQKQEAgLTIxLDExICsyMiwxMSBAQAogICAgIGFzc2VydCBuYW1lICE9IG5hbWUubG93ZXIoKQogCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCiAKICAgICBkZWYgc2Vuc2l0aXZpdHlfdGVzdChzZWxmKToKQEAgLTQxLDcgKzQyLDcgQEAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKQEAgLTUyLDcgKzUzLDcgQEAKICAgICBkZWYgdGVzdF9pbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCkBAIC02MSwxMCArNjIsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaW5zZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENhc2VTZW5zaXRpdml0eVRlc3QpCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdCwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggZDU5OTY5YS4uZjFlMjcxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsMjQgKzEsMjYgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbXBvcnRsaWIuYWJjCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitpbXBvcnRsaWJfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitpbXBvcnRsaWJfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KQEAgLTI2LDI3ICsyOCwxNyBAQAogICAgICIiIgogCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfQVBJKHNlbGYpOgotICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzcGVjaWZpZWQgdGhhdCBhc3N1bWUgc2VsZi5uYW1lIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3Rlck1peGluKGltcG9ydGxpYi5hYmMuTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6IHJldHVybiBmdWxsbmFtZQotICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6IHJldHVybiAnPG1vZHVsZT4nCisgICAgICAgIGNsYXNzIFRlc3RlcihzZWxmLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiByZXR1cm4gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiByZXR1cm4gRmFsc2UKIAotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBUZXN0ZXJNaXhpbik6Ci0gICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwotCi0gICAgICAgIG5hbWUgPSAnbW9kX25hbWUnCi0gICAgICAgIGxvYWRlciA9IFRlc3RlcihuYW1lLCAnc29tZV9wYXRoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShsb2FkZXIubmFtZSArICdYWFgnKQorICAgICAgICBsb2FkZXIgPSBUZXN0ZXIoJ2JsYWgnLCAnYmxhaC5weScpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxvYWQsICdibGFoJykKKyAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkgICMgU2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24uCiAKICAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfQVBJKHNlbGYpOgogICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzZXQgdGhlbiBhc3N1bWUgc2VsZi5wYXRoIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICBjbGFzcyBUZXN0ZXIoc2VsZi5hYmMuRmlsZUxvYWRlcik6CiAgICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKICAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwpAQCAtNjQsNyArNTYsNyBAQAogICAgICMgW2Jhc2ljXQogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3RlbXAnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfdGVtcCcsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ190ZW1wJ10sCkBAIC03NCw3ICs2Niw3IEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCkBAIC04Nyw3ICs3OSw3IEBACiAKICAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycsICdfcGtnLm1vZCcpYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3BrZy5tb2QnLCBzeXMubW9kdWxlcykKQEAgLTEwMiw3ICs5NCw3IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIG1vZHVsZV9pZCA9IGlkKG1vZHVsZSkKICAgICAgICAgICAgIG1vZHVsZV9kaWN0X2lkID0gaWQobW9kdWxlLl9fZGljdF9fKQpAQCAtMTIyLDEyICsxMTQsMTIgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CiAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgpAQCAtMTM4LDcgKzEzMCw3IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnPScpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CiAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfdGVtcCcsIHN5cy5tb2R1bGVzKQpAQCAtMTUxLDE0ICsxNDMsMTQgQEAKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX3RlbXAnKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCiAgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3BhdGgsIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19jYWNoZWRfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX3BhdGgpCi0gICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQorICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY3LDcgKzE1OSw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gNSIpCiAgICAgICAgICAgICB0cnk6CkBAIC0xNzgsNyArMTcwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGdldGF0dHIoZXJybm8sICdFT1ZFUkZMT1cnLCBOb25lKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIgKHt9KSIuZm9ybWF0KGUpKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCkBAIC0xODYsOCArMTc4LDE3IEBACiAgICAgICAgICAgICAjIFRoZSBweWMgZmlsZSB3YXMgY3JlYXRlZC4KICAgICAgICAgICAgIG9zLnN0YXQoY29tcGlsZWQpCiAKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdnb29kIG5hbWUnLCB7fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoJ2JhZCBuYW1lJykKIAotY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9TaW1wbGVUZXN0LCBTb3VyY2VfU2ltcGxlVGVzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTaW1wbGVUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKKyAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBCYWRCeXRlY29kZVRlc3Q6CiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCBmaWxlLCBtb2R1bGVfbmFtZSk6CiAgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKG1vZHVsZV9uYW1lLCBmaWxlKQpAQCAtMjA0LDcgKzIwNSw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nW25hbWVdKQogICAgICAgICBpZiBub3QgZGVsX3NvdXJjZToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9zLnVubGluayhtYXBwaW5nW25hbWVdKQogICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IG1ha2VfbGVnYWN5X3B5YyhtYXBwaW5nW25hbWVdKQpAQCAtMjkzLDcgKzI5NCw5IEBACiAKIGNsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdChCYWRCeXRlY29kZVRlc3QpOgogCi0gICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMiw3ICszMzUsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgyLDEzICszODYsMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMCw3ICs0MDQsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA4LDE2ICs0MTIsMjIgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitGcm96ZW5fU291cmNlQmFkQnl0ZWNvZGUsIFNvdXJjZV9Tb3VyY2VCYWRCeXRlY29kZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCiAKIGNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5sb2FkZXIgPSBjbHMubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKQEAgLTQ3MiwxNCArNDgyLDEwIEBACiAgICAgZGVmIHRlc3Rfbm9uX2NvZGVfbWFyc2hhbChzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9ub25fY29kZV9tYXJzaGFsKGRlbF9zb3VyY2U9VHJ1ZSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li44YmY4Y2I3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDExICs0MCwxMSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQorICAgICAgICBsb2FkZXJfZGV0YWlscyA9IFsoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmluZGVyKHJvb3QpLmZpbmRfbW9kdWxlKG1vZHVsZSkKQEAgLTEyNCw4ICsxMjUsOCBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nX2Zvcl9kaXIoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBmcm9tIHN5cy5wYXRoIG1lYW5zIHRvIHNlYXJjaCBpbiB0aGUgY3dkLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCBvcGVuKCdtb2QucHknLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgpAQCAtMTM2LDggKzEzNyw4IEBACiAKICAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKICAgICAgICAgIyBpbnZhbGlkYXRlX2NhY2hlcygpIHNob3VsZCByZXNldCB0aGUgbXRpbWUuCi0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogICAgICAgICBmaW5kZXIuX3BhdGhfbXRpbWUgPSA0MgogICAgICAgICBmaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlci5fcGF0aF9tdGltZSwgLTEpCkBAIC0xODEsMTEgKzE4Miw5IEBACiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIoZmlsZV9vYmoubmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIFtdKSwgZmluZGVyLmZpbmRfbG9hZGVyKCdkb2Vzbm90ZXhpc3QnKSkKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDZhNzg3OTIuLjkyZGE3NzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMTcgKzEsMTggQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0OgogCiAgICAgIiIiVGVzdCB0aGUgcGF0aCBob29rIGZvciBzb3VyY2UuIiIiCiAKICAgICBkZWYgcGF0aF9ob29rKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnZHVtbXknKSBhcyBtYXBwaW5nOgpAQCAtMjIsMTEgKzIzLDggQEAKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHJlcHJlc2VudHMgdGhlIGN3ZC4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5wYXRoX2hvb2soKSgnJyksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdCkKK0Zyb3plbl9QYXRoSG9va1Rlc3QsIFNvdXJjZV9QYXRoSG9va3Rlc3QgPSB1dGlsLnRlc3RfYm90aChQYXRoSG9va1Rlc3QsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CmluZGV4IGJhMDJiNDQuLjY1NGY0YzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKQEAgLTEsNiArMSw4IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBjb2RlY3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwpAQCAtMTMsNyArMTUsNyBAQAogQ09ESU5HX1JFID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCi1jbGFzcyBFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRW5jb2RpbmdUZXN0OgogCiAgICAgIiIiUEVQIDMxMjAgbWFrZXMgVVRGLTggdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHNvdXJjZSBjb2RlCiAgICAgW2RlZmF1bHQgZW5jb2RpbmddLgpAQCAtMzUsNyArMzcsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdKQogICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQogCkBAIC04NCw4ICs4NiwxMCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCitGcm96ZW5fRW5jb2RpbmdUZXN0LCBTb3VyY2VfRW5jb2RpbmdUZXN0ID0gdXRpbC50ZXN0X2JvdGgoRW5jb2RpbmdUZXN0LCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1jbGFzcyBMaW5lRW5kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIExpbmVFbmRpbmdUZXN0OgogCiAgICAgciIiIlNvdXJjZSB3cml0dGVuIHdpdGggdGhlIHRocmVlIHR5cGVzIG9mIGxpbmUgZW5kaW5ncyAoXG4sIFxyXG4sIFxyKQogICAgIG5lZWQgdG8gYmUgcmVhZGFibGUgW2NyXVtjcmxmXVtsZl0uIiIiCkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbbW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihtb2R1bGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW21vZHVsZV9uYW1lXSkKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCiAKQEAgLTExMywxMSArMTE3LDkgQEAKICAgICBkZWYgdGVzdF9sZihzZWxmKToKICAgICAgICAgc2VsZi5ydW5fdGVzdChiJ1xuJykKIAorRnJvemVuX0xpbmVFbmRpbmdzLCBTb3VyY2VfTGluZUVuZGluZ3MgPSB1dGlsLnRlc3RfYm90aChMaW5lRW5kaW5nVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRW5jb2RpbmdUZXN0LCBMaW5lRW5kaW5nVGVzdCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CmluZGV4IGFlNjU2NjMuLjYzY2QyNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CkBAIC0yLDcgKzIsNiBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBlcnJubwogaW1wb3J0IGZ1bmN0b29scwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQppbmRleCBjNjIwYzM3Li5iYThkNjA1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQpAQCAtMSw5ICsxLDIxIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgYWJjCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCitmcm9tIC4gaW1wb3J0IHV0aWwKIAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2FiYywgc291cmNlX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworIyMjIyMgSW5oZXJpdGFuY2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGNsYXNzIEluaGVyaXRhbmNlVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoYXQgdGhlIHNwZWNpZmllZCBjbGFzcyBpcyBhIHN1YmNsYXNzL3N1cGVyY2xhc3Mgb2YgdGhlIGV4cGVjdGVkCkBAIC0xNCw4ICsyNiwxOSBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnN1cGVyY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLCBjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBzZWxmLnN1cGVyY2xhc3NfbmFtZXNdCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3N1YmNsYXNzX25hbWVzJyk6CisgICAgICAgICAgICAjIEJlY2F1c2UgdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoKSBjcmVhdGVzIGEgbmV3CisgICAgICAgICAgICAjIGltcG9ydGxpYi5fYm9vdHN0cmFwIHBlciBtb2R1bGUsIGluaGVyaXRhbmNlIGNoZWNrcyBmYWlsIHdoZW4KKyAgICAgICAgICAgICMgY2hlY2tpbmcgYWNyb3NzIG1vZHVsZSBib3VuZGFyaWVzIChpLmUuIHRoZSBfYm9vdHN0cmFwIGluIGFiYyBpcworICAgICAgICAgICAgIyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBtYWNoaW5lcnkpLiBUaGF0IG1lYW5zIHN0ZWFsaW5nIG9uZSBvZgorICAgICAgICAgICAgIyB0aGUgbW9kdWxlcyBmcm9tIHRoZSBvdGhlciB0byBtYWtlIHN1cmUgdGhlIHNhbWUgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLm1hY2hpbmVyeSwgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdWJjbGFzc19uYW1lc10KICAgICAgICAgYXNzZXJ0IHNlbGYuc3ViY2xhc3NlcyBvciBzZWxmLnN1cGVyY2xhc3Nlcywgc2VsZi5fX2NsYXNzX18KLSAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKGFiYywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHRlc3RpbmcgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXy5wYXJ0aXRpb24oJ18nKVsyXQorICAgICAgICBzZWxmLl9fdGVzdCA9IGdldGF0dHIoc2VsZi5hYmMsIHRlc3RpbmcpCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhwZWN0ZWQgc3ViY2xhc3NlcyBpbmhlcml0LgpAQCAtMjksNzUgKzUyLDc2MSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5fX3Rlc3QsIHN1cGVyY2xhc3MpLAogICAgICAgICAgICAgICAgInswfSBpcyBub3QgYSBzdXBlcmNsYXNzIG9mIHsxfSIuZm9ybWF0KHN1cGVyY2xhc3MsIHNlbGYuX190ZXN0KSkKIAorZGVmIGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhiYXNlX2NsYXNzKToKKyAgICBkZWYgc2V0X2Zyb3plbihucyk6CisgICAgICAgIG5zWydhYmMnXSA9IGZyb3plbl9hYmMKKyAgICBkZWYgc2V0X3NvdXJjZShucyk6CisgICAgICAgIG5zWydhYmMnXSA9IHNvdXJjZV9hYmMKIAotY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyXQotCi0KLWNsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkZpbmRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5GaWxlRmluZGVyXQotCi0KLWNsYXNzIExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1jbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLQotCi1jbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyXQotCi0KLWNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkluc3BlY3RMb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsIG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyXQotCi0KLWNsYXNzIFB5TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogICAgIGNsYXNzZXMgPSBbXQotICAgIGZvciBjbGFzc18gaW4gZ2xvYmFscygpLnZhbHVlcygpOgotICAgICAgICBpZiAoaW5zcGVjdC5pc2NsYXNzKGNsYXNzXykgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQKLSAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGNsYXNzXywgSW5oZXJpdGFuY2VUZXN0cykpOgotICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoY2xhc3NfKQotICAgIHJ1bl91bml0dGVzdCgqY2xhc3NlcykKKyAgICBmb3IgcHJlZml4LCBuc19zZXQgaW4gWygnRnJvemVuJywgc2V0X2Zyb3plbiksICgnU291cmNlJywgc2V0X3NvdXJjZSldOgorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MoJ18nLmpvaW4oW3ByZWZpeCwgYmFzZV9jbGFzcy5fX25hbWVfX10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1uc19zZXQpKQorICAgIHJldHVybiBjbGFzc2VzCisKKworY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ1BhdGhGaW5kZXInLAorICAgICAgICAgICAgICAgICAgICAgICdXaW5kb3dzUmVnaXN0cnlGaW5kZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhNZXRhUGF0aEZpbmRlcikKK0Zyb3plbl9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydGaW5kZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydGaWxlRmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUGF0aEVudHJ5RmluZGVyKQorRnJvemVuX1BhdGhFbnRyeUZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhSZXNvdXJjZUxvYWRlcikKK0Zyb3plbl9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhJbnNwZWN0TG9hZGVyKQorRnJvemVuX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydJbnNwZWN0TG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRXh0ZW5zaW9uRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEV4ZWN1dGlvbkxvYWRlcikKK0Zyb3plbl9FeGVjdXRpb25Mb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJywgJ1NvdXJjZWxlc3NGaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoRmlsZUxvYWRlcikKK0Zyb3plbl9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0ZpbGVMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFNvdXJjZUxvYWRlcikKK0Zyb3plbl9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyMjIyMjIERlZmF1bHQgcmV0dXJuIHZhbHVlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkZWYgbWFrZV9hYmNfc3ViY2xhc3NlcyhiYXNlX2NsYXNzKToKKyAgICBjbGFzc2VzID0gW10KKyAgICBmb3Iga2luZCwgYWJjIGluIFsoJ0Zyb3plbicsIGZyb3plbl9hYmMpLCAoJ1NvdXJjZScsIHNvdXJjZV9hYmMpXToKKyAgICAgICAgbmFtZSA9ICdfJy5qb2luKFtraW5kLCBiYXNlX2NsYXNzLl9fbmFtZV9fXSkKKyAgICAgICAgYmFzZV9jbGFzc2VzID0gYmFzZV9jbGFzcywgZ2V0YXR0cihhYmMsIGJhc2VfY2xhc3MuX19uYW1lX18pCisgICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcyhuYW1lLCBiYXNlX2NsYXNzZXMpKQorICAgIHJldHVybiBjbGFzc2VzCisKK2RlZiBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhiYXNlX2NsYXNzLCB0ZXN0X2NsYXNzKToKKyAgICBmcm96ZW5fY2xhc3MsIHNvdXJjZV9jbGFzcyA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcykKKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIHByZWZpeCwgY2xhc3NfaW5fdGVzdCBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fY2xhc3MpLCAoJ1NvdXJjZScsIHNvdXJjZV9jbGFzcyldOgorICAgICAgICBkZWYgc2V0X25zKG5zKToKKyAgICAgICAgICAgIG5zWydpbnMnXSA9IGNsYXNzX2luX3Rlc3QoKQorICAgICAgICB0ZXN0cy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIHRlc3RfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1zZXRfbnMpKQorICAgIHJldHVybiB0ZXN0cworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCisKK0Zyb3plbl9NUEYsIFNvdXJjZV9NUEYgPSBtYWtlX2FiY19zdWJjbGFzc2VzKE1ldGFQYXRoRmluZGVyKQorCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgc2hvdWxkIHJldHVybiBOb25lLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBDYWxsaW5nIHRoZSBtZXRob2QgaXMgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTWV0YVBhdGhGaW5kZXIsIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9NUEZEZWZhdWx0VGVzdHMsIFNvdXJjZV9NUEZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcjoKKworICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorCitGcm96ZW5fUEVGLCBTb3VyY2VfUEVGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhQYXRoRW50cnlGaW5kZXIpCisKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBbXSksIHNlbGYuaW5zLmZpbmRfbG9hZGVyKCdzb21ldGhpbmcnKSkKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJykpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUGF0aEVudHJ5RmluZGVyLCBQYXRoRW50cnlGaW5kZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1BFRkRlZmF1bHRUZXN0cywgU291cmNlX1BFRkRlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgTG9hZGVyOgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkubG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKworRnJvemVuX0wsIFNvdXJjZV9MID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhMb2FkZXIpCisKKworY2xhc3MgTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmxvYWRfbW9kdWxlKCdzb21ldGhpbmcnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMubW9kdWxlX3JlcHIobW9kKQorICAgICAgICBvcmlnaW5hbF9yZXByID0gcmVwcihtb2QpCisgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZi5pbnMKKyAgICAgICAgIyBTaG91bGQgc3RpbGwgcmV0dXJuIGEgcHJvcGVyIHJlcHIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1vZCkpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhMb2FkZXIsIExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTERlZmF1bHRUZXN0cywgU291cmNlTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKKworCitGcm96ZW5fUkwsIFNvdXJjZV9STCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUmVzb3VyY2VMb2FkZXIpCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZGF0YSgnL3NvbWUvcGF0aCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhSZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1JMRGVmYXVsdFRlc3RzLCBTb3VyY2VfUkxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuaXNfcGFja2FnZShmdWxsbmFtZSkKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKworCitGcm96ZW5fSUwsIFNvdXJjZV9JTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoSW5zcGVjdExvYWRlcikKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuaXNfcGFja2FnZSgnYmxhaCcpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9zb3VyY2UoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoSW5zcGVjdExvYWRlciwgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fSUxEZWZhdWx0VGVzdHMsIFNvdXJjZV9JTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIpOgorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKworRnJvemVuX0VMLCBTb3VyY2VfRUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEV4ZWN1dGlvbkxvYWRlcikKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9maWxlbmFtZSgnYmxhaCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0VMRGVmYXVsdFRlc3RzLCBTb3VyY2VfRUxEZWZhdWx0c1Rlc3RzID0gdGVzdHMKKworCisjIyMjIyBJbnNwZWN0TG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzOgorCisgICAgZGVmIHNvdXJjZV90b19tb2R1bGUoc2VsZiwgZGF0YSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiSGVscCB3aXRoIHNvdXJjZV90b19jb2RlKCkgdGVzdHMuIiIiCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aCkKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBTaW5jZSBjb21waWxlKCkgY2FuIGhhbmRsZSBzdHJpbmdzLCBzbyBzaG91bGQgc291cmNlX3RvX2NvZGUoKS4KKyAgICAgICAgc291cmNlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zb3VyY2VfdG9fbW9kdWxlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFNpbmNlIGNvbXBpbGUoKSBjYW4gaGFuZGxlIGJ5dGVzLCBzbyBzaG91bGQgc291cmNlX3RvX2NvZGUoKS4KKyAgICAgICAgc291cmNlID0gYidhdHRyID0gNDInCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc291cmNlX3RvX21vZHVsZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9wYXRoKHNlbGYpOgorICAgICAgICAjIFNwZWNpZnlpbmcgYSBwYXRoIHNob3VsZCBzZXQgaXQgZm9yIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgcGF0aCA9ICdwYXRoL3RvL3NvbWV3aGVyZScKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKCcnLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsIHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9ub19wYXRoKHNlbGYpOgorICAgICAgICAjIE5vdCBzZXR0aW5nIGEgcGF0aCBzaG91bGQgc3RpbGwgd29yayBhbmQgYmUgc2V0IHRvIDxzdHJpbmc+IHNpbmNlIHRoYXQKKyAgICAgICAgIyBpcyBhIHByZS1leGlzdGluZyBwcmFjdGljZSBhcyBhIGRlZmF1bHQgdG8gY29tcGlsZSgpLgorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzdHJpbmc+JykKKworCitjbGFzcyBGcm96ZW5fSUxTb3VyY2VUb0NvZGVUZXN0cyhJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworY2xhc3MgSW5zcGVjdExvYWRlckdldENvZGVUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc3VjY2Vzcy4KKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfc291cmNlJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX2lzX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X3NvdXJjZSgpIGlzIE5vbmUgdGhlbiB0aGlzIHNob3VsZCBiZSBOb25lLgorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X3NvdXJjZScpIGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29kZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gc291cmNlIHRoZW4gdGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorCisKK2NsYXNzIEZyb3plbl9JTEdldENvZGVUZXN0cyhJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTEdldENvZGVUZXN0cyhJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworY2xhc3MgSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0czoKKworICAgICIiIlRlc3QgSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZSgpLiIiIgorCisgICAgbW9kdWxlX25hbWUgPSAnYmxhaCcKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxvYWQoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5sb2FkLCBzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIG1vY2tfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9jb2RlJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX0ltcG9ydEVycm9yKHNlbGYpOgorICAgICAgICAjIElmIGdldF9jb2RlKCkgcmFpc2VzIEltcG9ydEVycm9yLCBpdCBzaG91bGQgcHJvcGFnYXRlLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9jb2RlKCkgcmV0dXJucyBOb25lLCByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JldHVybmVkKHNlbGYpOgorICAgICAgICAjIFRoZSBsb2FkZWQgbW9kdWxlIHNob3VsZCBiZSByZXR1cm5lZC4KKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2F0dHIgPSA0MicsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUucmV0dXJuX3ZhbHVlID0gY29kZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZSwgc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0pCisKKworY2xhc3MgRnJvemVuX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCisjIyMjIyBFeGVjdXRpb25Mb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzOgorCisgICAgZGVmIG1vY2tfbWV0aG9kcyhzZWxmLCAqLCBnZXRfc291cmNlPUZhbHNlLCBnZXRfZmlsZW5hbWU9RmFsc2UpOgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBOb25lLCBOb25lCisgICAgICAgIGlmIGdldF9zb3VyY2U6CisgICAgICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NvdXJjZScpCisgICAgICAgIGlmIGdldF9maWxlbmFtZToKKyAgICAgICAgICAgIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2ZpbGVuYW1lJykKKyAgICAgICAgcmV0dXJuIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dAorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgIHBhdGggPSAnYmxhaC5weScKKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5yZXR1cm5fdmFsdWUgPSBwYXRoCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsIHBhdGgpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2VfaXNfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfc291cmNlKCkgaXMgTm9uZSB0aGVuIHRoaXMgc2hvdWxkIGJlIE5vbmUuCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIF8gPSBzZWxmLm1vY2tfbWV0aG9kcyhnZXRfc291cmNlPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29kZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gc291cmNlIHRoZW4gdGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCisgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9ub19wYXRoKHNlbGYpOgorICAgICAgICAjIElmIGdldF9maWxlbmFtZSgpIHJhaXNlcyBJbXBvcnRFcnJvciB0aGVuIHNpbXBseSBza2lwIHNldHRpbmcgdGhlIHBhdGgKKyAgICAgICAgIyBvbiB0aGUgY29kZSBvYmplY3QuCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IHNlbGYubW9ja19tZXRob2RzKAorICAgICAgICAgICAgICAgIGdldF9zb3VyY2U9VHJ1ZSwgZ2V0X2ZpbGVuYW1lPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBzb3VyY2VfbW9jaywgZmlsZW5hbWVfbW9ja19jb250ZXh0IGFzIG5hbWVfbW9jazoKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBuYW1lX21vY2suc2lkZV9lZmZlY3QgPSBJbXBvcnRFcnJvcgorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnPHN0cmluZz4nKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisKK2NsYXNzIEZyb3plbl9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9FTAorCitjbGFzcyBTb3VyY2VfRUxHZXRDb2RlVGVzdHMoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfRUwKKworCisjIyMjIyBTb3VyY2VMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgU291cmNlTG9hZGVyOgorCisgICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgorICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKKyAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKKworCitGcm96ZW5fU291cmNlT25seUwsIFNvdXJjZV9Tb3VyY2VPbmx5TCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorCisKK2NsYXNzIFNvdXJjZUxvYWRlcihTb3VyY2VMb2FkZXIpOgorCisgICAgc291cmNlX210aW1lID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCisgICAgICAgIGlmIG1hZ2ljIGlzIE5vbmU6CisgICAgICAgICAgICBtYWdpYyA9IHNlbGYudXRpbC5NQUdJQ19OVU1CRVIKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKKyAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgc2VsZi53cml0dGVuID0ge30KKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQorICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKworICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQorCisgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQorICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKKworCitGcm96ZW5fU0wsIFNvdXJjZV9TTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorRnJvemVuX1NMLnV0aWwgPSBmcm96ZW5fdXRpbAorU291cmNlX1NMLnV0aWwgPSBzb3VyY2VfdXRpbAorRnJvemVuX1NMLmluaXQgPSBmcm96ZW5faW5pdAorU291cmNlX1NMLmluaXQgPSBzb3VyY2VfaW5pdAorCisKK2NsYXNzIFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzOgorCisgICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJworICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJworICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCisKKyAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCisgICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAorICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCisgICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKworCitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KKworICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKKyAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKworICAgICIiIgorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgorICAgICAgICAjIElmIGFuIE9TRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKKyAgICAgICAgZGVmIHJhaXNlX09TRXJyb3IocGF0aCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfT1NFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvbXBpbGVkIGNvZGUgb2JqZWN0LgorICAgICAgICBjb2RlID0gc2VsZi5sb2FkZXIuc291cmNlX3RvX2NvZGUoc2VsZi5sb2FkZXIuc291cmNlLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIExvYWRpbmcgYSBtb2R1bGUgc2hvdWxkIHNldCBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sCisgICAgICAgICMgX19wYXRoX18gKGZvciBwYWNrYWdlcyksIF9fZmlsZV9fLCBhbmQgX19jYWNoZWRfXy4KKyAgICAgICAgIyBUaGUgbW9kdWxlIHNob3VsZCBhbHNvIGJlIHB1dCBpbnRvIHN5cy5tb2R1bGVzLgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU291cmNlIGlzIGNvbnNpZGVyZWQgZW5jb2RlZCBpbiBVVEYtOCBieSBkZWZhdWx0IHVubGVzcyBvdGhlcndpc2UKKyAgICAgICAgIyBzcGVjaWZpZWQgYnkgYW4gZW5jb2RpbmcgbGluZS4KKyAgICAgICAgc291cmNlID0gIl8gPSAnw7wnIgorICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IGxhdGluLTFcbl8gPSDDvCIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisKK2NsYXNzIEZyb3plbl9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQorY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgorCisgICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KKworICAgICIiIgorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0LCAqLCBieXRlY29kZV93cml0dGVuPUZhbHNlKToKKyAgICAgICAgc3VwZXIoKS52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgaWYgYnl0ZWNvZGVfd3JpdHRlbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCisgICAgICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKKworICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgorICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKKyAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCisgICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCisgICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKKyAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEKKyAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCisKKyAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgT1NFcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgorICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCisKKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworCitjbGFzcyBGcm96ZW5fU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9TTAorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VTTEJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NMCisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHM6CisKKyAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gc2VsZi5Tb3VyY2VPbmx5TG9hZGVyTW9jaygnbW9kLmZpbGUnKQorICAgICAgICBzb3VyY2UgPSAneCA9ICLDvCInCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfc291cmNlKHNlbGYpOgorICAgICAgICAjIERlY29kaW5nIHNob3VsZCB3b3JrLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCisgICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TEdldFNvdXJjZVRlc3RzKFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgU291cmNlT25seUxvYWRlck1vY2sgPSBTb3VyY2VfU291cmNlT25seUwKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CmluZGV4IGIxYTU4OTQuLmM2YzJkNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CkBAIC0xLDE0ICsxLDE3IEBACiBmcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKKworZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzE5LDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMjksNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQxLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjIsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs3OSw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODcsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDcsNDMgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBmb3VuZCkKIAogICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgogICAgICAgICAjIElmIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgTm9uZSwgcmFpc2UgVmFsdWVFcnJvci4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICAjIFNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICMgSXNzdWUgIzE3MDk5CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBSZXR1cm4gdGhlIGxvYWRlciBmb3VuZCBvbiBzeXMubWV0YV9wYXRoLgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lKSwgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgogICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCkBAIC0xMjksMTQgKzE1MiwyNzUgQEAKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuaW5pdC5maW5kX2xvYWRlcignbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKworY2xhc3MgRnJvemVuX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCi1jbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBGaW5kU3BlY1Rlc3RzOgorCisgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGZpbmRfc3BlYyhuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKTogcmV0dXJuIG5hbWUsIHBhdGgsIHRhcmdldAorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXMoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfd2l0aG91dF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaW5pdC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gTm9uZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfbG9hZGVyX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuaW5pdC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX25vdF9zZXQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUsIHBhdGgpKQorCisgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmluaXQuZmluZF9zcGVjKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCitjbGFzcyBGcm96ZW5fRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCitjbGFzcyBTb3VyY2VfRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorCisKK2NsYXNzIFJlbG9hZFRlc3RzOgorCisgICAgIiIiVGVzdCBtb2R1bGUgcmVsb2FkaW5nIGZvciBidWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kIGluICgndG9rZW5pemUnLCAndGltZScsICdtYXJzaGFsJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQobW9kKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobW9kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgZGVmIGNvZGUoKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKKyAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCisgICAgICAgIHdpdGggbW9jazoKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9taXNzaW5nX2xvYWRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICBsb2FkZXIgPSB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5fX2xvYWRlcl9fLnBhdGgsIGxvYWRlci5wYXRoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvYWRlcl9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICB0eXBlcy5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWxvYWRlZC5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2NhdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBwbGFpbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbnNfXyc6IF9fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBDaGFuZ2UgdG8gYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBpbml0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbb3MucGF0aC5kaXJuYW1lKGluaXRfcGF0aCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKHJlbG9hZGVkKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX25hbWVzcGFjZV9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0LnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGJhZF9wYXRoLCAndycpIGFzIGluaXRfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZS53cml0ZSgnZWdncyA9IE5vbmUnKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gbnMucG9wKCdfX3BhdGhfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoW29zLnBhdGguZGlybmFtZShiYWRfcGF0aCldKSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIucGF0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHJlZ3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluc19fJzogX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKworY2xhc3MgRnJvemVuX1JlbG9hZFRlc3RzKFJlbG9hZFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2NhbGxlZChzZWxmKToKICAgICAgICAgIyBJZiBkZWZpbmVkIHRoZSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KQEAgLTE1NSw0OCArNDM5LDY1IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBwYXRoX2lucwogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMubWV0YV9wYXRoLnJlbW92ZShtZXRhX2lucykpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRhX2lucy5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXRoX2lucy5jYWxsZWQpCiAKICAgICBkZWYgdGVzdF9tZXRob2RfbGFja2luZyhzZWxmKToKICAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgbm8gaXNzdWVzIGlmIHRoZSBtZXRob2QgaXMgbm90IGRlZmluZWQuCiAgICAgICAgIGtleSA9ICdnb2JibGVkZWVnb29rJwotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gaW1wLk51bGxJbXBvcnRlcignYWJjJykKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IE5vbmUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuX19kZWxpdGVtX18oa2V5KSkKLSAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKSAgIyBTaG91bGRuJ3QgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKK2NsYXNzIEZyb3plbl9JbnZhbGlkYXRlQ2FjaGVUZXN0cyhJbnZhbGlkYXRlQ2FjaGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCiBjbGFzcyBGcm96ZW5JbXBvcnRsaWJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ub19mcm96ZW5faW1wb3J0bGliKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGltcG9ydCB3L28gX2Zyb3plbl9pbXBvcnRsaWIgYmVpbmcgZGVmaW5lZC4KLSAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdpbXBvcnRsaWInLCBibG9ja2VkPVsnX2Zyb3plbl9pbXBvcnRsaWInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKG1vZHVsZS5fX2xvYWRlcl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKSkKKyAgICAgICAgIyBDYW4ndCBkbyBhbiBpc2luc3RhbmNlKCkgY2hlY2sgc2luY2Ugc2VwYXJhdGUgY29waWVzIG9mIGltcG9ydGxpYgorICAgICAgICAjIG1heSBoYXZlIGJlZW4gdXNlZCBmb3IgaW1wb3J0LCBzbyBqdXN0IGNoZWNrIHRoZSBuYW1lIGlzIG5vdCBmb3IgdGhlCisgICAgICAgICMgZnJvemVuIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3VyY2VfaW5pdC5fX2xvYWRlcl9fLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJvemVuSW1wb3J0ZXInKQogCiAKLWNsYXNzIFN0YXJ0dXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdGFydHVwVGVzdHM6CiAKICAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19sb2FkZXJfXyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcwOTg6IGFsbCBtb2R1bGVzIHNob3VsZCBoYXZlIF9fbG9hZGVyX18gZGVmaW5lZC4KICAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQotICAgICAgICAgICAgICAgIGVsaWYgaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGxhY2tzIGEgX19sb2FkZXJfXyBhdHRyaWJ1dGUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydE1vZHVsZVRlc3RzLAotICAgICAgICAgICAgICAgICBGaW5kTG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgIEludmFsaWRhdGVDYWNoZVRlc3RzLAotICAgICAgICAgICAgICAgICBGcm96ZW5JbXBvcnRsaWJUZXN0cywKLSAgICAgICAgICAgICAgICAgU3RhcnR1cFRlc3RzKQorICAgIGRlZiB0ZXN0X2V2ZXJ5b25lX2hhc19fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19zcGVjX18sIE5vbmUpCisKK2NsYXNzIEZyb3plbl9TdGFydHVwVGVzdHMoU3RhcnR1cFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCitjbGFzcyBTb3VyY2VfU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQppbmRleCBjMzczYjExLi5kYzk3YmExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKQEAgLTEsNCArMSw4IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAorZnJvbSAuIGltcG9ydCB1dGlsCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKKwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdApAQCAtMTMsMTQgKzE3LDkgQEAKIGVsc2U6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKLQotTG9ja1R5cGUgPSBfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCi1EZWFkbG9ja0Vycm9yID0gX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgotCi0KIGlmIHRocmVhZGluZyBpcyBub3QgTm9uZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6Ci0gICAgICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKGxhbWJkYTogTG9ja1R5cGUoInNvbWVfbG9jayIpKQorICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHM6CisgICAgICAgIGxvY2t0eXBlID0gY2xhc3NtZXRob2QobGFtYmRhIGNsczogY2xzLkxvY2tUeXBlKCJzb21lX2xvY2siKSkKIAogICAgICAgICAjIF9pc19vd25lZCgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfX2lzX293bmVkID0gTm9uZQpAQCAtMzQsMTMgKzMzLDIxIEBACiAgICAgICAgICMgX3JlbGVhc2Vfc2F2ZSgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfcmVsZWFzZV9zYXZlX3VuYWNxdWlyZWQgPSBOb25lCiAKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IGZyb3plbl9ib290c3RyYXAuX01vZHVsZUxvY2sKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsIGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6CisgICAgICAgIExvY2tUeXBlID0gc291cmNlX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworCiBlbHNlOgotICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwYXNzCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCi1jbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlYWRsb2NrQXZvaWRhbmNlVGVzdHM6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTU1LDcgKzYyLDcgQEAKIAogICAgIGRlZiBydW5fZGVhZGxvY2tfYXZvaWRhbmNlX3Rlc3Qoc2VsZiwgY3JlYXRlX2RlYWRsb2NrKToKICAgICAgICAgTkxPQ0tTID0gMTAKLSAgICAgICAgbG9ja3MgPSBbTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQorICAgICAgICBsb2NrcyA9IFtzZWxmLkxvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgcGFpcnMgPSBbKGxvY2tzW2ldLCBsb2Nrc1soaSsxKSVOTE9DS1NdKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQogICAgICAgICBpZiBjcmVhdGVfZGVhZGxvY2s6CiAgICAgICAgICAgICBOVEhSRUFEUyA9IE5MT0NLUwpAQCAtNjcsNyArNzQsNyBAQAogICAgICAgICAgICAgIiIiVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2suIFJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIEZhbHNlIG9uIGRlYWRsb2NrLiIiIgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCi0gICAgICAgICAgICBleGNlcHQgRGVhZGxvY2tFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkRlYWRsb2NrRXJyb3I6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC05OSwzMCArMTA2LDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgRmFsc2UpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IGZyb3plbl9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKIAotY2xhc3MgTGlmZXRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0aHJlYWRzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKK2NsYXNzIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzKERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKyAgICBEZWFkbG9ja0Vycm9yID0gc291cmNlX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgorCisKK2NsYXNzIExpZmV0aW1lVGVzdHM6CiAKICAgICBkZWYgdGVzdF9sb2NrX2xpZmV0aW1lKHNlbGYpOgogICAgICAgICBuYW1lID0gInh5enp5IgotICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKLSAgICAgICAgbG9jayA9IF9ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBsb2NrID0gc2VsZi5ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobG9jaykKICAgICAgICAgZGVsIGxvY2sKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAogICAgIGRlZiB0ZXN0X2FsbF9sb2NrcyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorCitjbGFzcyBGcm96ZW5fTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorCitjbGFzcyBTb3VyY2VfTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAogCiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBMaWZldGltZVRlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9MaWZldGltZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9MaWZldGltZVRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlZjM5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weQpAQCAtMCwwICsxLDk2OCBAQAorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9ib290c3RyYXAgPSBmcm96ZW5faW5pdC5fYm9vdHN0cmFwCitzb3VyY2VfYm9vdHN0cmFwID0gc291cmNlX2luaXQuX2Jvb3RzdHJhcAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zLnBhdGgKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBDbGVhbkltcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKKworCitjbGFzcyBUZXN0TG9hZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyMgICAgICAgIGlmIHBhdGg6CisjICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyMgICAgICAgICAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy5weScpOgorIyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKQorIyAgICAgICAgICAgIGVsaWYgaXNfcGFja2FnZSBpcyBOb25lOgorIyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gcGF0aC5lbmRzd2l0aCgnX19pbml0X18ucHknKQorCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5wYWNrYWdlID0gaXNfcGFja2FnZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxUZXN0TG9hZGVyIG9iamVjdD4nCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ2dldF9maWxlbmFtZScgYW5kIHNlbGYucGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZW5hbWUKKyAgICAgICAgaWYgbmFtZSA9PSAnaXNfcGFja2FnZSc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXNfcGFja2FnZQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCisgICAgZGVmIF9nZXRfZmlsZW5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBfaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFja2FnZQorCisKK2NsYXNzIE5ld0xvYWRlcihUZXN0TG9hZGVyKToKKworICAgIEVHR1MgPSAxCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgbW9kdWxlLmVnZ3MgPSBzZWxmLkVHR1MKKworCitjbGFzcyBMZWdhY3lMb2FkZXIoVGVzdExvYWRlcik6CisKKyAgICBIQU0gPSAtMQorCisgICAgQGZyb3plbl91dGlsLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIG1vZHVsZS5oYW0gPSBzZWxmLkhBTQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKworY2xhc3MgTW9kdWxlU3BlY1Rlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmxvY19zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvY19zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV9mYWxzZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwZWMgPT0gb3RoZXIpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1zZWxmLmNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYywgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPSdoYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbG9jYXRpb249RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eV9pbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnBhcmVudCwgJ3NwYW0uZWdncycpCisKKyAgICAjIGNhY2hlZAorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NldChzZWxmKToKKyAgICAgICAgYmVmb3JlID0gc2VsZi5zcGVjLmNhY2hlZAorICAgICAgICBzZWxmLnNwZWMuY2FjaGVkID0gJ3RoZXJlJworICAgICAgICBhZnRlciA9IHNlbGYuc3BlYy5jYWNoZWQKKworICAgICAgICBzZWxmLmFzc2VydElzKGJlZm9yZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZnRlciwgJ3RoZXJlJykKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF93aXRoX29yaWdpbl9ub3RfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2Uoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VfdW5rbm93bl9zdWZmaXgoc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0uc3BhbXNwYW1zcGFtJworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX21pc3NpbmdfY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICBvcmlnaW5hbCA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FjaGVkID0gc2VsZi5sb2Nfc3BlYy5jYWNoZWQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBvcmlnaW5hbAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZWxlc3Moc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0ucHljJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsICdzcGFtLnB5YycpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisKKworY2xhc3MgTW9kdWxlU3BlY01ldGhvZHNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBpbml0X21vZHVsZV9hdHRycworCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJ3NwYW0nLCAnaGFtJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19wYXRoX18sIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc3BlYy5vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNwZWMub3JpZ2luKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2RpZmZlcmVudF9uYW1lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2VnZ3MnKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfc3BlYyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnZWdncycsIG9iamVjdCgpKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfYWxyZWFkeV9zZXQoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgnaGFtLmVnZ3MnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG9iamVjdCgpCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICdoYW0nCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnZWdncyddCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICdoYW0vZWdncy9fX2luaXRfXy5weScKKyAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKQorICAgICAgICBvcmlnaW5hbCA9IHZhcnMobW9kdWxlKS5jb3B5KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBvcmlnaW5hbFsnX19sb2FkZXJfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgb3JpZ2luYWxbJ19fcGFja2FnZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBvcmlnaW5hbFsnX19wYXRoX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIG9yaWdpbmFsWydfX2ZpbGVfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBvcmlnaW5hbFsnX19jYWNoZWRfXyddKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWycnXQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX25hbWVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgICMgY3JlYXRlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKKyAgICAgICAgY3JlYXRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcihzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKCkKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZCwgbW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbG9hZGVyX25vdF9oYW5kbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDcmVhdGluZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGV4ZWMoKQorCisgICAgZGVmIHRlc3RfZXhlYyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ2VnZ3MnKSkKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuZWdncywgMSkKKworICAgICMgbG9hZCgpCisKKyAgICBkZWYgdGVzdF9sb2FkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCBpbnN0YWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb2FkX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICByZXBsYWNlbWVudCA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIFJlcGxhY2luZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10gPSByZXBsYWNlbWVudAorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gUmVwbGFjaW5nTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCByZXBsYWNlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIHJlcGxhY2VtZW50KQorCisgICAgZGVmIHRlc3RfbG9hZF9mYWlsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkX3JlbW92ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBGYWlsZWRMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5zcGVjLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfbG9hZF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgZXhpc3RpbmcgPSB0eXBlKHN5cykoJ2hhbScpCisgICAgICAgIGV4aXN0aW5nLmNvdW50ID0gNQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLm5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc2VsZi5uYW1lXSA9IGV4aXN0aW5nCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5zcGVjLm5hbWUgPT0gc2VsZi5uYW1lCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnaGFtJykpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeShzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3lfYXR0cmlidXRlc19pbW11dGFibGUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIEltbXV0YWJsZUxvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEltbXV0YWJsZUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdLCBtb2R1bGUpCisKKyAgICAjIHJlbG9hZCgpCisKKyAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2RpZmllZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuZWdncyA9IDIKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2V4dHJhX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLmF2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9hZGVkLmF2YWlsYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5fX25hbWVfXyA9ICdoYW0nCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19wYWNrYWdlX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19zcGVjX18KKyAgICAgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sZWdhY3koc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBNb2R1bGVSZXByVGVzdHM6CisKKyAgICAjIFhYWCBBZGQgbW9yZSB0ZXN0cyBmb3IgcmVwcihtb2R1bGUpIG9uY2UgTW9kdWxlU3BlYy5fbW9kdWxlX3JlcHIoKQorICAgICMgaXMgaW4gcGxhY2U/CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZShvcykoJ3NwYW0nKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtJywgVGVzdExvYWRlcigpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiAnPGRlbGljaW91cyB7fT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxkZWxpY2lvdXMgc3BhbT4nKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHJfYmFkKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX18oc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICdpbiBhIGhvbGUsIGluIHRoZSBncm91bmQnCisgICAgICAgIHNlbGYuc3BlYy5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdCgnc3BhbScsIG9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbG9jYXRpb24oc2VsZik6CisgICAgICAgIGxvY2F0aW9uID0gJ2luX2FfZ2FsYXh5X2Zhcl9mYXJfYXdheS5weScKKyAgICAgICAgc2VsZi5zcGVjLm9yaWdpbiA9IGxvY2F0aW9uCisgICAgICAgIHNlbGYuc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdCgnc3BhbScsIGxvY2F0aW9uKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW5fbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTm9uZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX25hbWUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5fX25hbWVfXworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnPycpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSAnZS9pL2UvaS9vL3NwYW0ucHknCisgICAgICAgIHNlbGYubW9kdWxlLl9fZmlsZV9fID0gZmlsZW5hbWUKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQoJ3NwYW0nLCBmaWxlbmFtZSkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IFRlc3RMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX2ZpbGVfbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgRmFjdG9yeVRlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5maWxlbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgpCisgICAgICAgIHNlbGYucGtnbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgsIFRydWUpCisKKyAgICAjIHNwZWNfZnJvbV9sb2FkZXIoKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfb3JpZ2luKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnc29tZXdoZXJlIG92ZXIgdGhlIHJhaW5ib3cnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9vcmlnaW5fYW5kX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICd3aGVyZSB0aGUgc3RyZWV0cyBoYXZlIG5vIG5hbWUnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBvcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2Vfd2l0aF9sb2FkZXJfZmFsc2Uoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3dpdGhfbG9hZGVyX3RydWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfZmlsZV9sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX2ZhbHNlX3dpdGhfZmlsZWxvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWVfd2l0aF9maWxlbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgICMgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkgaXMgc291cmNlX21hY2hpbmVyeToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdub3Qgc3VyZSB3aHkgdGhpcyBpcyBicmVha2luZy4uLicpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNwZWMubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIucGF0aCwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHRfd2l0aG91dF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdF9iYWRfc3VmZml4KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgJ3NwYW0uZWdncycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb25fbm9fZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICc8dW5rbm93bj4nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbl9iYWRfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJzx1bmtub3duPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9ub25lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZW1wdHkoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfbm90X2VtcHR5KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVsnZWdncyddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnZWdncyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYucGtnbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYucGtnbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9ub3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X25vX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisKK2NsYXNzIEZyb3plbl9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CmluZGV4IGVmYzg5NzcuLjYwNGU0NGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKQEAgLTEsMjMgKzEsNjQgQEAKIGZyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCi1pbXBvcnQgaW1wCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlY29kZVNvdXJjZUJ5dGVzVGVzdHM6CisKKyAgICBzb3VyY2UgPSAic3RyaW5nID0nw7wnIgorCisgICAgZGVmIHRlc3RfdXQ4X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksIHNlbGYuc291cmNlKQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnIyBjb2Rpbmc9bGF0aW4tMVxuJyArIHNlbGYuc291cmNlCisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICBhc3NlcnQgc291cmNlX2J5dGVzICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHNvdXJjZSA9ICdcclxuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pKQorCitGcm96ZW5fRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgU291cmNlX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLiIiIgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGNscywgZnVuYyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBjbHMudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmdW5jKQorCisgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdXNlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHg6IHgpCisKICAgICBkZWYgcmV0dXJuX21vZHVsZShzZWxmLCBuYW1lKToKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG5hbWUpCiAKICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgICBkZWYgdG9fd3JhcChzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ4bihzZWxmLCBuYW1lKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zNSwxMiArNzYsMjMgQEAKIAogICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBtb2R1bGUgaXMgcmV1c2VkIGlmIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMuCisgICAgICAgIGNsYXNzIEZha2VMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYS5iLmMnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IDQyCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gc2VsZi5yZXR1cm5fbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBsb2FkZXIgPSBGYWtlTG9hZGVyKCkKKyAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXR1cm5lZF9tb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9uZXdfbW9kdWxlX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcyBpZiBhZGRlZCBidXQgYW4KQEAgLTUzLDcgKzEwNSw3IEBACiAgICAgZGVmIHRlc3RfcmVsb2FkX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgZmFpbHVyZSBvbiByZWxvYWQgbGVhdmVzIHRoZSBtb2R1bGUgaW4tcGxhY2UuCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCiAgICAgICAgICAgICBzZWxmLnJhaXNlX2V4Y2VwdGlvbihuYW1lKQpAQCAtNjEsNyArMTEzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9hdHRycyhzZWxmKToKICAgICAgICAgZGVmIGZ4bihzZWxmLCBtb2R1bGUpOiBwYXNzCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIApAQCAtODcsNyArMTM5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9wa2cgPSBpc19wYWNrYWdlCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGtnCi0gICAgICAgICAgICBAdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKICAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKIApAQCAtMTA3LDggKzE1OSwxMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKK0Zyb3plbl9Nb2R1bGVGb3JMb2FkZXJUZXN0cywgU291cmNlX01vZHVsZUZvckxvYWRlclRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTW9kdWxlRm9yTG9hZGVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFNldFBhY2thZ2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldFBhY2thZ2VUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZS4iIiIKIApAQCAtMTE2LDcgKzE3MSw3IEBACiAgICAgICAgICIiIlZlcmlmeSB0aGUgbW9kdWxlIGhhcyB0aGUgZXhwZWN0ZWQgdmFsdWUgZm9yIF9fcGFja2FnZV9fIGFmdGVyCiAgICAgICAgIHBhc3NpbmcgdGhyb3VnaCBzZXRfcGFja2FnZS4iIiIKICAgICAgICAgZnhuID0gbGFtYmRhOiBtb2R1bGUKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgd3JhcHBlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBtb2R1bGUuX19wYWNrYWdlX18pCkBAIC0xMjQsMjYgKzE3OSwyNiBAQAogICAgIGRlZiB0ZXN0X3RvcF9sZXZlbChzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgYSB0b3AtbGV2ZWwgbW9kdWxlLgogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgd2hlbiBwYWNrYWdlIGlzIHNldCB0byBOb25lLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kdWxlJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgIyBUZXN0IHNldHRpbmcgX19wYWNrYWdlX18gZm9yIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BrZycpCiAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnPHBhdGg+J10KICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc3VibW9kdWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgX19wYWNrYWdlX18gZm9yIGEgbW9kdWxlIGluIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZy5tb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cubW9kJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc2V0dGluZ19pZl9taXNzaW5nKHNlbGYpOgogICAgICAgICAjIF9fcGFja2FnZV9fIHNob3VsZCBiZSBzZXQgaWYgaXQgaXMgbWlzc2luZy4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZCcpCiAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKToKICAgICAgICAgICAgIGRlbGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQpAQCAtMTUxLDU4ICsyMDYsMjMwIEBACiAgICAgZGVmIHRlc3RfbGVhdmluZ19hbG9uZShzZWxmKToKICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyBpcyBzZXQgYW5kIG5vdCBOb25lIHRoZW4gbGVhdmUgaXQgYWxvbmUuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gdmFsdWUKICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4obW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5zZXRfcGFja2FnZShmeG4pCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLnV0aWwuc2V0X3BhY2thZ2UoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIAorRnJvemVuX1NldFBhY2thZ2VUZXN0cywgU291cmNlX1NldFBhY2thZ2VUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNldFBhY2thZ2VUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAotY2xhc3MgUmVzb2x2ZU5hbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldExvYWRlclRlc3RzOgorCisgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwuc2V0X2xvYWRlcigpLiIiIgorCisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEB1dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworICAgIGRlZiB0ZXN0X25vX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2lzX05vbmUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9ub3RfcmVzZXQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKK2NsYXNzIEZyb3plbl9TZXRMb2FkZXJUZXN0cyhTZXRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAZnJvemVuX3V0aWwuc2V0X2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCitjbGFzcyBTb3VyY2VfU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQHNvdXJjZV91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBSZXNvbHZlTmFtZVRlc3RzOgogCiAgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuIiIiCiAKICAgICBkZWYgdGVzdF9hYnNvbHV0ZShzZWxmKToKICAgICAgICAgIyBiYWNvbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgTm9uZSkpCiAKICAgICBkZWYgdGVzdF9hYm9zbHV0ZV93aXRoaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBiYWNvbiBpbiBzcGFtCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgdXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgJ3NwYW0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCiAKICAgICBkZWYgdGVzdF9ub19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiAnJwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJycpCiAKICAgICBkZWYgdGVzdF9pbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiBzcGFtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NwYW0uZWdncy5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCiAKICAgICBkZWYgdGVzdF9vdGhlcl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbS5iYWNvbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmJhY29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbScpCisgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorCitGcm96ZW5fUmVzb2x2ZU5hbWVUZXN0cywgU291cmNlX1Jlc29sdmVOYW1lVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBSZXNvbHZlTmFtZVRlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLAotICAgICAgICAgICAgU2V0UGFja2FnZVRlc3RzLAotICAgICAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cwotICAgICAgICApCitjbGFzcyBNYWdpY051bWJlclRlc3RzOgorCisgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSA0IGJ5dGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKSwgNCkKKworICAgIGRlZiB0ZXN0X2luY29ycG9yYXRlc19ybihzZWxmKToKKyAgICAgICAgIyBUaGUgbWFnaWMgbnVtYmVyIHVzZXMgXHJcbiB0byBjb21lIG91dCB3cm9uZyB3aGVuIHNwbGl0dGluZyBvbiBsaW5lcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIuZW5kc3dpdGgoYidcclxuJykpCisKK0Zyb3plbl9NYWdpY051bWJlclRlc3RzLCBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1hZ2ljTnVtYmVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgUEVQMzE0N1Rlc3RzOgorCisgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDctcmVsYXRlZCBmdW5jdGlvbnM6IGNhY2hlX2Zyb21fc291cmNlIGFuZCBzb3VyY2VfZnJvbV9jYWNoZS4iIiIKKworICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgbm90IGJlIE5vbmUnKQorICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weWMgZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgTm8gY2FjaGUgdGFnIG1lYW5zIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnd2hhdGV2ZXIucHknKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fZG90KHNlbGYpOgorICAgICAgICAjIERpcmVjdG9yeSB3aXRoIGEgZG90LCBmaWxlbmFtZSB3aXRob3V0IGRvdC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdmaWxlJykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxle30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIEZhbHNlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfY3dkKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2Zvby5weScKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKKyAgICAgICAgIyB2YWx1ZS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQorICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQorICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCisgICAgICAgICMgcHJvcGFnYXRlcy4KKyAgICAgICAgY2xhc3MgQmVhcmlzaDoKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc2VwID09ICdcXCcgYW5kIG9zLmFsdHNlcCA9PSAnLycsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlcmUgb3MuYWx0c2VwIGlzIGRlZmluZWQnKQorICAgIGRlZiB0ZXN0X3NlcF9hbHRzZXBfYW5kX3NlcF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBXaW5kb3dzIHBhdGggYW5kIFBFUCAzMTQ3IHdoZXJlIHNlcCBpcyByaWdodCBvZiBhbHRzZXAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ1xcZm9vXFxiYXJcXGJhei9xdXgucHknLCBUcnVlKSwKKyAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyB0byBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdOb25lJykKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIFBFUCAzMTQ3IGRlZmluZWQgLnB5YyBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8KKyAgICAgICAgIyBpdHMgc291cmNlLiAgVGhpcyB0ZXN0cyB0aGUgZ29vZCBwYXRoLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgIyBJZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUsIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2JsYWgnLCAnX19weWNhY2hlX18nLCAnd2hhdGV2ZXIucHljJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMuaW1wbGVtZW50YXRpb24sICdjYWNoZV90YWcnLCBOb25lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9iYWRfcGF0aChzZWxmKToKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIHRvIGEgcHljIGZpbGUgaXMgbm90IGluIFBFUCAzMTQ3IGZvcm1hdCwgYSBWYWx1ZUVycm9yCisgICAgICAgICMgaXMgcmFpc2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJy9mb28vYmFyL2JhenF1eC5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fc2xhc2goc2VsZik6CisgICAgICAgICMgTm8gc2xhc2hlcyBhdCBhbGwgaW4gcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnZm9vLmNweXRob24tMzIucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19mZXdfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gZmV3IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ19fcHljYWNoZV9fL2Zvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX21hbnlfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gbWFueSBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnX19weWNhY2hlX18vZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19fcHljYWNoZV9fKHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgcHJvYmxlbSB3aXRoIHRoZSBwYXRoIC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnL2Zvby9iYXIvZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKK0Zyb3plbl9QRVAzMTQ3VGVzdHMsIFNvdXJjZV9QRVAzMTQ3VGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQRVAzMTQ3VGVzdHMsCisgICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKaW5kZXggZWYzMmY3ZC4uODBkNDNiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMzAgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKLWltcG9ydCBpbXAKIGltcG9ydCBvcy5wYXRoCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCisKKworZGVmIGltcG9ydF9pbXBvcnRsaWIobW9kdWxlX25hbWUpOgorICAgICIiIkltcG9ydCBhIG1vZHVsZSBmcm9tIGltcG9ydGxpYiBib3RoIHcvIGFuZCB3L28gX2Zyb3plbl9pbXBvcnRsaWIuIiIiCisgICAgZnJlc2ggPSAoJ2ltcG9ydGxpYicsKSBpZiAnLicgaW4gbW9kdWxlX25hbWUgZWxzZSAoKQorICAgIGZyb3plbiA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICBzb3VyY2UgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUobW9kdWxlX25hbWUsIGZyZXNoPWZyZXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkPSgnX2Zyb3plbl9pbXBvcnRsaWInLCkpCisgICAgcmV0dXJuIGZyb3plbiwgc291cmNlCisKKworZGVmIHRlc3RfYm90aCh0ZXN0X2NsYXNzLCAqKmt3YXJncyk6CisgICAgZnJvemVuX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdGcm96ZW5fJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIHNvdXJjZV90ZXN0cyA9IHR5cGVzLm5ld19jbGFzcygnU291cmNlXycrdGVzdF9jbGFzcy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKyAgICBmcm96ZW5fdGVzdHMuX19tb2R1bGVfXyA9IHNvdXJjZV90ZXN0cy5fX21vZHVsZV9fID0gdGVzdF9jbGFzcy5fX21vZHVsZV9fCisgICAgZm9yIGF0dHIsIChmcm96ZW5fdmFsdWUsIHNvdXJjZV92YWx1ZSkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIHNldGF0dHIoZnJvemVuX3Rlc3RzLCBhdHRyLCBmcm96ZW5fdmFsdWUpCisgICAgICAgIHNldGF0dHIoc291cmNlX3Rlc3RzLCBhdHRyLCBzb3VyY2VfdmFsdWUpCisgICAgcmV0dXJuIGZyb3plbl90ZXN0cywgc291cmNlX3Rlc3RzCiAKIAogQ0FTRV9JTlNFTlNJVElWRV9GUyA9IFRydWUKQEAgLTk4LDcgKzExOSw3IEBACiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoaW1wb3J0X25hbWUpCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggNWNiZWM5Yi4uMzY1ZjU5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtOCwxMCArOCwxNyBAQAogaW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbXBvcnRsaWIKIGZyb20gb3MucGF0aCBpbXBvcnQgbm9ybWNhc2UKK3RyeToKKyAgICBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgVGhyZWFkUG9vbEV4ZWN1dG9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVGhyZWFkUG9vbEV4ZWN1dG9yID0gTm9uZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIERpcnNPblN5c1BhdGgKLQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IE1JU1NJTkdfQ19ET0NTVFJJTkdTCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgogCkBAIC0xMjAsNyArMTI3LDYgQEAKICAgICBkZWYgdGVzdF9nZXRfc2xvdF9tZW1iZXJzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSAoImEiLCAiYiIpCi0KICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmEgPSA0MgogICAgICAgICBtZW1iZXJzID0gZGljdChpbnNwZWN0LmdldG1lbWJlcnMoeCkpCkBAIC00MTgsMTQgKzQyNCwxNCBAQAogICAgICAgICAgICAgdW5pY29kZWRhdGEuX19maWxlX19bLTQ6XSBpbiAoIi5weWMiLCAiLnB5byIpLAogICAgICAgICAidW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIGJpbmFyeSBtb2R1bGUiKQogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfY29kZV9pbl9saW5lY2FjaGUoc2VsZik6CiAgICAgICAgIGxpbmVzID0gWyJ4PTEiXQogICAgICAgICBjbyA9IGNvbXBpbGUobGluZXNbMF0sICJfZHluYW1pY2FsbHlfY3JlYXRlZF9maWxlIiwgImV4ZWMiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKICAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgY28uY29fZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5maW5kc291cmNlKGNvKSwgKGxpbmVzLDApKQpAQCAtNDYzLDEzICs0NjksMTMgQEAKICAgICBBIGJyb2tlbiBkYXRhIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCiAgICAgIiIiCiAgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIGRhdGEgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIGRhdGEgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19zZXRfXygqYXJncyk6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogCiBjbGFzcyBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcihvYmplY3QpOgpAQCAtNDc3LDEwICs0ODMsMTAgQEAKICAgICBBIGJyb2tlbiBtZXRob2QgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBtZXRob2QgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogCiAjIEhlbHBlciBmb3IgdGVzdGluZyBjbGFzc2lmeV9jbGFzc19hdHRycy4KQEAgLTY1MCw2ICs2NTYsODggQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYnVpbHRpbiwgdHlwZSk6CiAgICAgICAgICAgICAgICAgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhidWlsdGluKQogCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfRHluYW1pY0NsYXNzQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hhbSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBWQShtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZWdncycKKyAgICAgICAgc2hvdWxkX2ZpbmRfZGNhID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2hhbScsICdkYXRhJywgVkEsIFZBLl9fZGljdF9fWydoYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9kY2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorICAgICAgICBzaG91bGRfZmluZF9nYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIE1ldGEsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9nYSwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhWQSkpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9tZXRhY2xhc3NfY2xhc3NfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZmlzaCA9ICdzbGFwJworICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlc19fJywgJ19fbmFtZV9fJywgJ2Zpc2gnXQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2Zpc2gnLCAnZGF0YScsIE1ldGEsICdzbGFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdCT09NJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0JPT00nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdCT09NJywgJ2RhdGEnLCBNZXRhLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlX211bHRpX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldChbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3RocmVlJ10gKworICAgICAgICAgICAgICAgICAgICBNZXRhMS5fX2Rpcl9fKGNscykgKyBNZXRhMi5fX2Rpcl9fKGNscykpKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3RocmVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBDbGFzczEobWV0YWNsYXNzPU1ldGExKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQ2xhc3MyKENsYXNzMSwgbWV0YWNsYXNzPU1ldGEzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzaG91bGRfZmluZDEgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnb25lJywgJ2RhdGEnLCBNZXRhMSwgMSkKKyAgICAgICAgc2hvdWxkX2ZpbmQyID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3R3bycsICdkYXRhJywgTWV0YTIsIDIpCisgICAgICAgIHNob3VsZF9maW5kMyA9IGluc3BlY3QuQXR0cmlidXRlKCd0aHJlZScsICdkYXRhJywgTWV0YTMsIDMpCisgICAgICAgIGNjYSA9IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MyKQorICAgICAgICBmb3Igc2YgaW4gKHNob3VsZF9maW5kMSwgc2hvdWxkX2ZpbmQyLCBzaG91bGRfZmluZDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZiwgY2NhKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfY2xhc3NfYXR0cnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19kZXNjcmlwdG9ycyhzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgZGQgPSBfQnJva2VuRGF0YURlc2NyaXB0b3IoKQpAQCAtNjkzLDYgKzc4MSwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCiAKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdlZ2dzJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzY3JhbWJsZWQnCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgZWdncyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NjcmFtYmxlZCcpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NwYW0nKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEoKSkpCisKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuZ2V0bWVtYmVycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAKIF9nbG9iYWxfcmVmID0gb2JqZWN0KCkKIGNsYXNzIFRlc3RHZXRDbG9zdXJlVmFycyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDgwLDYgKzExOTAsMTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLngpCiAKKyAgICBkZWYgdGVzdF9jbGFzc1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feAorICAgICAgICAgICAgX3ggPSBvYmplY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcuX19kaWN0X19bJ3gnXSkKKwogICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9jbGFzc2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKICAgICAgICAgICAgIHggPSBvYmplY3QoKQpAQCAtMTQ2MSw3ICsxNTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCBpbnQsICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAotICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl91bnN1cHBvcnRlZF9idWlsdGlucyhzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgogICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgpAQCAtMTQ3MCwxMCArMTU4OSwxMyBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6CiAgICAgICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKICAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKG1pbi5fX2NhbGxfXykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiBmdW5jdGlvbicpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShtaW4pCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKG1pbiksIE5vbmUpCisgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9zLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNpZ25hdHVyZSwgaW5zcGVjdC5TaWduYXR1cmUpKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX25vbl9mdW5jdGlvbihzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIGNhbGxhYmxlIG9iamVjdCcpOgpAQCAtMTczNiw2ICsxODU4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKKyAgICAgICAgIyBUZXN0IHdlIGhhbmRsZSBfX3NpZ25hdHVyZV9fIHBhcnR3YXkgZG93biB0aGUgd3JhcHBlciBzdGFjaworICAgICAgICBkZWYgd3JhcHBlZF9mb29fY2FsbCgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3cmFwcGVkX2Zvb19jYWxsLl9fd3JhcHBlZF9fID0gRm9vLl9fY2FsbF9fCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZSh3cmFwcGVkX2Zvb19jYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEpOgpAQCAtMTg1MCw2ICsxOTgzLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoV3JhcHBlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisgICAgICAgICMgd3JhcHBlciBsb29wOgorICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gV3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoV3JhcHBlZCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9sYW1iZGFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKChsYW1iZGEgYT0xMDogYSkpLApAQCAtMjMwMSw2ICsyNDM4LDEwMyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGJhLCBiYTQpCiAKIAorY2xhc3MgVGVzdFVud3JhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bndyYXBfb25lKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTIwKShmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3RfdW53cmFwX3NldmVyYWwoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIHdyYXBwZXIgPSBmdW5jCisgICAgICAgIGZvciBfXyBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHdyYXBwZXIpCisgICAgICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cmFwcGVyLl9fd3JhcHBlZF9fLCBmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYzEpCisgICAgICAgIGRlZiBmdW5jMigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMyKQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jMi5zdG9wX2hlcmUgPSAxCisgICAgICAgIHVud3JhcHBlZCA9IGluc3BlY3QudW53cmFwKHdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A9KGxhbWJkYSBmOiBoYXNhdHRyKGYsICJzdG9wX2hlcmUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW53cmFwcGVkLCBmdW5jMikKKworICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYzEoKTogcGFzcworICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKworICAgICAgICBkZWYgZnVuYzIoKTogcGFzcworICAgICAgICBmdW5jMi5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIGZ1bmMxLl9fd3JhcHBlZF9fID0gZnVuYzIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzIpCisKKyAgICBkZWYgdGVzdF91bmhhc2hhYmxlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIGZ1bmMuX193cmFwcGVkX18gPSBOb25lCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgICAgIF9fd3JhcHBlZF9fID0gZnVuYworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNwZWN0LnVud3JhcChDKCkpKQorCitjbGFzcyBUZXN0TWFpbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfb25seV9zb3VyY2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bml0dGVzdCcpCisgICAgICAgIGxpbmVzID0gb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAjIGlnbm9yZSB0aGUgZmluYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzotMV0sIGluc3BlY3QuZ2V0c291cmNlKG1vZHVsZSkuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihUaHJlYWRQb29sRXhlY3V0b3IgaXMgTm9uZSwKKyAgICAgICAgICAgICd0aHJlYWRzIHJlcXVpcmVkIHRvIHRlc3QgX19xdWFsbmFtZV9fIGZvciBzb3VyY2UgZmlsZXMnKQorICAgIGRlZiB0ZXN0X3F1YWxuYW1lX3NvdXJjZShzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlczpUaHJlYWRQb29sRXhlY3V0b3InKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0c291cmNlKFRocmVhZFBvb2xFeGVjdXRvcikuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cycpCisgICAgICAgIGxpbmVzID0gZXJyLmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkNhbid0IGdldCBpbmZvIGZvciBidWlsdGluIG1vZHVsZXMuIl0pCisKKyAgICBkZWYgdGVzdF9kZXRhaWxzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnLCAnLS1kZXRhaWxzJykKKyAgICAgICAgb3V0cHV0ID0gb3V0LmRlY29kZSgpCisgICAgICAgICMgSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fZmlsZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fY2FjaGVkX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdCgKICAgICAgICAgVGVzdERlY29yYXRvcnMsIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZSwgVGVzdE9uZWxpbmVycywgVGVzdEJ1Z2d5Q2FzZXMsCkBAIC0yMzA4LDcgKzI1NDIsNyBAQAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnMsIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsCiAgICAgICAgIFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBUZXN0R2V0YXR0clN0YXRpYywgVGVzdEdldEdlbmVyYXRvclN0YXRlLAogICAgICAgICBUZXN0Tm9FT0wsIFRlc3RTaWduYXR1cmVPYmplY3QsIFRlc3RTaWduYXR1cmVCaW5kLCBUZXN0UGFyYW1ldGVyT2JqZWN0LAotICAgICAgICBUZXN0Qm91bmRBcmd1bWVudHMsIFRlc3RHZXRDbG9zdXJlVmFycworICAgICAgICBUZXN0Qm91bmRBcmd1bWVudHMsIFRlc3RHZXRDbG9zdXJlVmFycywgVGVzdFVud3JhcCwgVGVzdE1haW4KICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ludC5weSBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CmluZGV4IGMxOThiY2MuLjRlMDA2MjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CkBAIC0yMjgsNiArMjI4LDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0wKQogCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfbGltaXRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0aW5nIHRoZSBzdXBwb3J0ZWQgbGltaXRzIG9mIHRoZSBpbnQoKSBiYXNlIHBhcmFtZXRlci4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCA1KSwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAzNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIC05MDkpICAjIEFuIG9sZCBtYWdpYyB2YWx1ZSBiYXNlIGZyb20gUHl0aG9uIDIuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTAtKDIqKjIzNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTIqKjIzNCkKKyAgICAgICAgIyBCYXNlcyAyIHRocm91Z2ggMzYgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMiwzNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIGJhc2U9YmFzZSksIDApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9iYWRfdHlwZXMoc2VsZik6CisgICAgICAgICIiIk5vdCBpbnRlZ2VyIHR5cGVzIGFyZSBub3QgdmFsaWQgYmFzZXM7IGlzc3VlMTY3NzIuIiIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS4wKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICAjIENoZWNrIG91dCBvZiByYW5nZSBiYXNlcy4KKyAgICAgICAgZm9yIGJhc2UgaW4gMioqMTAwLCAtMioqMTAwLCAxLCAzNzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgaW50KCc0MycsIGJhc2UpCisKKyAgICAgICAgIyBDaGVjayBpbi1yYW5nZSBiYXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMikpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgxMCkpLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDM2KSksIDEgKyAzNioqMikKKwogICAgIGRlZiB0ZXN0X25vbl9udW1lcmljX2lucHV0X3R5cGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgcG9zc2libGUgbm9uLW51bWVyaWMgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB4LCBpbmNsdWRpbmcKICAgICAgICAgIyBzdWJjbGFzc2VzIG9mIHRoZSBleHBsaWNpdGx5IGRvY3VtZW50ZWQgYWNjZXB0ZWQgdHlwZXMuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvLnB5IGIvTGliL3Rlc3QvdGVzdF9pby5weQppbmRleCA5Yjg5MjAyLi41N2YzNjU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSAxCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKIGNsYXNzIENDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgaW8uUmF3SU9CYXNlKToKICAgICBwYXNzCkBAIC02MDEsOSArNjAxLDkgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIGYuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgpAQCAtNzYyLDcgKzc2Miw3IEBACiAgICAgICAgIGlmIHM6CiAgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIE9TRXJyb3I6ICIpLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgpAQCAtNzc4LDIyICs3NzgsMjIgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcuZmx1c2ggPSBiYWRfZmx1c2gKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmx1c2gnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZmx1c2gnKQogICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjbG9zZScpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjbG9zZScpCiAgICAgICAgIHJhdy5jbG9zZSA9IGJhZF9jbG9zZQogICAgICAgICBiID0gc2VsZi50cChyYXcpCiAgICAgICAgIGIuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGNlcHRpb24uYXJncywgKCdjbG9zZScsKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCkBAIC04MzMsNiArODMzLDE0IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUgKyBidWZzaXplMikKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1ZmZlcl9mcmVlaW5nKHNlbGYpIDoKKyAgICAgICAgYnVmc2l6ZSA9IDQwOTYKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHN5cy5nZXRzaXplb2YoYnVmaW8pIC0gYnVmc2l6ZQorICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUpCiAKIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CiAgICAgcmVhZF9tb2RlID0gInJiIgpAQCAtMTAwNyw4ICsxMDE1LDggQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8udGVsbCkKIAogICAgIGRlZiB0ZXN0X25vX2V4dHJhbmVvdXNfcmVhZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjOTU1MDsgd2hlbiB0aGUgcmF3IElPIG9iamVjdCBoYXMgc2F0aXNmaWVkIHRoZSByZWFkIHJlcXVlc3QsCkBAIC0xMDU5LDE3ICsxMDY3LDE4IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKICAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKICAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ucmVhZCwgMTApCiAKICAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi5mID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIGYuZiA9IGYKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKIAogICAgIGRlZiB0ZXN0X2FyZ3NfZXJyb3Ioc2VsZik6CkBAIC0xMzEyLDkgKzEzMjEsOSBAQAogICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCiAKICAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfcmVtb3ZhbChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtMTMyMywxMSArMTMzMiwxMSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfd3JpdGUoYik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcud3JpdGUgPSBiYWRfd3JpdGUKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQogICAgICAgICBiLndyaXRlKGInc3BhbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCiAKIApAQCAtMTM1OCwxMyArMTM2NywxNCBAQAogICAgICAgICAjIEMgQnVmZmVyZWRXcml0ZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQotICAgICAgICBmLnggPSBmCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKLSAgICAgICAgZGVsIGYKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgICAgICBmLnggPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIxMjN4eHgiKQpAQCAtMTM5NywxNCArMTQwNywxNCBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF93cml0ZWFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIE5vdFdyaXRlYWJsZShNb2NrUmF3SU8pOgogICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKIAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQpAQCAtMjE2NSw3ICsyMTc1LDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgICMgU3lzdGVtYXRpYyB0ZXN0cyBvZiB0aGUgdGV4dCBJL08gQVBJCkBAIC0yMjM3LDcgKzIyNDcsNyBAQAogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIlx4ZmZcbiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRlbGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnRlbGwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQogICAgICAgICBmLmNsb3NlKCkKIApAQCAtMjM0MSw3ICsyMzUxLDcgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKFVuUmVhZGFibGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5yZWFkKQogCiAgICAgZGVmIHRlc3RfcmVhZF9vbmVfYnlfb25lKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGIiQUFcclxuQkIiKSkKQEAgLTI1MTYsOSArMjUyNiw5IEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eHQuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CkBAIC0yNTk5LDE0ICsyNjA5LDE1IEBACiAgICAgICAgICMgQyBUZXh0SU9XcmFwcGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW4gZ2MuZ2FyYmFnZSBpbnN0ZWFkLgotICAgICAgICByYXdpbyA9IGlvLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCi0gICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgdC53cml0ZSgiNDU2ZGVmIikKLSAgICAgICAgdC54ID0gdAotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCi0gICAgICAgIGRlbCB0Ci0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCisgICAgICAgICAgICB0LnggPSB0CisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCisgICAgICAgICAgICBkZWwgdAorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiI0NTZkZWYiKQpAQCAtMjc2Niw3ICsyNzc3LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICJ3YiIpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiVSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm5hbWUsICAgICBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5yYXcubmFtZSwgc3VwcG9ydC5URVNURk4pCkBAIC0yODk2LDcgKzI5MDgsNyBAQAogICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwX2ZkcykKQEAgLTMwNjIsMTUgKzMwNzQsMTggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCiAgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCiAgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCiAgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCiAgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgogICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKICAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqIChzdXBwb3J0LlBJUEVfTUFYX1NJWkUgLy8gbGVuKGl0ZW0pICsgMSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgICMgV2UgZ290IG9uZSBieXRlLCBnZXQgYW5vdGhlciBvbmUgYW5kIGNoZWNrIHRoYXQgaXQgaXNuJ3QgYQogICAgICAgICAgICAgIyByZXBlYXQgb2YgdGhlIGZpcnN0IG9uZS4KQEAgLTMwODQsNyArMzA5OSw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGJsb2NrIGFnYWluLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0zMjEyLDcgKzMyMjcsNyBAQAogICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBjb3VsZCBibG9jayAoaW4gY2FzZSBvZiBmYWlsdXJlKS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weSBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKaW5kZXggNTMxYzlhZi4uZWZlOWY1MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CkBAIC04LDcgKzgsNyBAQAogCiB0cnk6CiAgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAicmIiKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIG9wZW4gL2Rldi90dHkiKQogZWxzZToKICAgICAjIFNraXAgaWYgYW5vdGhlciBwcm9jZXNzIGlzIGluIGZvcmVncm91bmQKQEAgLTg2LDggKzg2LDYgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKG1mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHNmZCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChJb2N0bFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weSBiL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CmluZGV4IDk5YzU0ZjEuLmYzYjE1NjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5CkBAIC0xMzE5LDYgKzEzMTksMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygKICAgICAgICAgICAgICAgICAnMTI3LjQyLjAuMC8xNicpLmlzX2xvb3BiYWNrKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTI4LjAuMC4wJykuaXNfbG9vcGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwMC42NC4wLjAvMTAnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX2dsb2JhbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjIuMTI4LzI1JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxOTIuMC4zLjAvMjQnKS5pc19nbG9iYWwpCiAKICAgICAgICAgIyB0ZXN0IGFkZHJlc3NlcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcwLjAuMC4wJykuaXNfdW5zcGVjaWZpZWQpCkBAIC0xMzg0LDYgKzEzOTIsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzo6MScpLmlzX3Vuc3BlY2lmaWVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjovMTI3JykuaXNfdW5zcGVjaWZpZWQpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDAxOjoxLzEyOCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMjAwOjoxLzEyOCcpLmlzX2dsb2JhbCkKICAgICAgICAgIyB0ZXN0IGFkZHJlc3NlcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCdmZmZmOjonKS5pc19tdWx0aWNhc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoMioqMTI4IC0gMSkuaXNfbXVsdGljYXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CmluZGV4IDkxMDFmNmMuLjE1MmY1ZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKQEAgLTQ1LDMxICs0NSwyMSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0CiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQotZnJvbSBidWlsdGlucyBpbXBvcnQgbGVuIGFzIF9sZW4KK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGxlbmd0aF9oaW50CiAKIG4gPSAxMAogCi1kZWYgbGVuKG9iaik6Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gX2xlbihvYmopCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiB0aGlzIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCi0gICAgICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKLSAgICAgICAgICAgIHJldHVybiBvYmouX19sZW5ndGhfaGludF9fKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCiAKIGNsYXNzIFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zOgogCiAgICAgZGVmIHRlc3RfaW52YXJpYW50KHNlbGYpOgogICAgICAgICBpdCA9IHNlbGYuaXQKICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UoMSwgbisxKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgaSkKICAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiBjbGFzcyBUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgogCkBAIC03OCwxMiArNjgsMTIgQEAKICAgICAgICAgIyBsZW5ndGggaW1tdXRhYmlsaXR5ICBkdXJpbmcgaXRlcmF0aW9uCiAKICAgICAgICAgaXQgPSBzZWxmLml0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4pCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbi0xKQogICAgICAgICBzZWxmLm11dGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tLS0tLS0gQ29uY3JldGUgVHlwZSBUZXN0cyAtLS0tLS0tCiAKQEAgLTkyLDEwICs4Miw2IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLml0ID0gcmVwZWF0KE5vbmUsIG4pCiAKLSAgICBkZWYgdGVzdF9ub19sZW5fZm9yX2luZmluaXRlX3JlcGVhdChzZWxmKToKLSAgICAgICAgIyBUaGUgcmVwZWF0KCkgb2JqZWN0IGNhbiBhbHNvIGJlIGluZmluaXRlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCi0KIGNsYXNzIFRlc3RYcmFuZ2UoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2NywxNCArMTUzLDE1IEBACiAgICAgICAgIGl0ID0gaXRlcihkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDEpICAjIGdyb3cgd2l0aCBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQorCiAKIGNsYXNzIFRlc3RMaXN0UmV2ZXJzZWQoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTg2LDMyICsxNzMsNDEgQEAKICAgICAgICAgaXQgPSByZXZlcnNlZChkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikgICMgaWdub3JlIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpICAjIGlnbm9yZSBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkgICMgY29uZmlybSBpbnZhcmlhbnQKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiAjIyAtLSBDaGVjayB0byBtYWtlIHN1cmUgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgYnkgX19sZW5ndGhfaGludF9fKCkKIAogCiBjbGFzcyBCYWRMZW4ob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBCYWRMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBOb25lTGVuZ3RoSGludChvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKIAogY2xhc3MgVGVzdExlbmd0aEhpbnRFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQppbmRleCA1MTRhNmI3Li4yNjcyYjAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQpAQCAtMTcyOSw5ICsxNzI5LDggQEAKIGNsYXNzIExlbmd0aFRyYW5zcGFyZW5jeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBlYXQoTm9uZSwgNTApKSwgNTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUsIDUwKSksIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lKSwgMTIpLCAxMikKIAogY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CmluZGV4IGQyM2UyODUuLjM1YzAyZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKQEAgLTEsNSArMSw1IEBACiBpbXBvcnQgZGVjaW1hbAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogZnJvbSB0ZXN0LnRlc3RfanNvbiBpbXBvcnQgUHlUZXN0LCBDVGVzdAogCkBAIC03MCw1ICs3MCwyNiBAQAogICAgICAgICBtc2cgPSAnZXNjYXBlJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsIG1zZywgc2VsZi5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfaW5wdXRfdHlwZShzZWxmKToKKyAgICAgICAgbXNnID0gJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0cicKKyAgICAgICAgZm9yIHZhbHVlIGluIFsxLCAzLjE0LCBiJ2J5dGVzJywgYidceGZmXHgwMCcsIFtdLCB7fSwgTm9uZV06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKEJ5dGVzSU8oYidbMSwyLDNdJykpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfd2l0aF91dGY4X2JvbShzZWxmKToKKyAgICAgICAgIyBzZWUgIzE4OTU4CisgICAgICAgIGJvbV9qc29uID0gIlsxLDIsM10iLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvYWRzKGJvbV9qc29uKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9qc29uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQk9NJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIEJPTSBpcyBub3QgZGV0ZWN0ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmluZworICAgICAgICBib21faW5fc3RyID0gJyJ7fSInLmZvcm1hdCgnJy5lbmNvZGUoJ3V0Zi04LXNpZycpLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGJvbV9pbl9zdHIpLCAnXHVmZWZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24ubG9hZChTdHJpbmdJTyhib21faW5fc3RyKSksICdcdWZlZmYnKQorCiBjbGFzcyBUZXN0UHlEZWNvZGUoVGVzdERlY29kZSwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENEZWNvZGUoVGVzdERlY29kZSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDEyMCBAQAorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBJbnRFbnVtCitmcm9tIG1hdGggaW1wb3J0IGlzbmFuCitmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CisKK1NNQUxMID0gMQorQklHID0gMTw8MzIKK0hVR0UgPSAxPDw2NAorUkVBTExZX0hVR0UgPSAxPDw5NgorCitjbGFzcyBCaWdOdW0oSW50RW51bSk6CisgICAgc21hbGwgPSBTTUFMTAorICAgIGJpZyA9IEJJRworICAgIGh1Z2UgPSBIVUdFCisgICAgcmVhbGx5X2h1Z2UgPSBSRUFMTFlfSFVHRQorCitFID0gMi43MTgyODEKK1BJID0gMy4xNDE1OTMKK1RBVSA9IDIgKiBQSQorCitjbGFzcyBGbG9hdE51bShmbG9hdCwgRW51bSk6CisgICAgZSA9IEUKKyAgICBwaSA9IFBJCisgICAgdGF1ID0gVEFVCisKK0lORiA9IGZsb2F0KCdpbmYnKQorTkVHX0lORiA9IGZsb2F0KCctaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQorCitjbGFzcyBXaWVyZE51bShmbG9hdCwgRW51bSk6CisgICAgaW5mID0gSU5GCisgICAgbmVnX2luZiA9IE5FR19JTkYKKyAgICBuYW4gPSBOQU4KKworY2xhc3MgVGVzdEVudW06CisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEZsb2F0TnVtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCByZXByKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0sIGV4cGVjdGVkIGluIHppcChXaWVyZE51bSwgKCdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGlmIG5vdCBpc25hbihlbnVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSBpbiBCaWdOdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHN0cihlbnVtLnZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtTTUFMTCwgQklHLCBIVUdFLCBSRUFMTFlfSFVHRV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KEJpZ051bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEJpZ051bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KEZsb2F0TnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtFLCBQSSwgVEFVXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChGbG9hdE51bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnW0luZmluaXR5LCAtSW5maW5pdHksIE5hTl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KFdpZXJkTnVtKVs6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpKVsyXSkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIHMsIGIsIGgsIHIgPSBCaWdOdW0KKyAgICAgICAgZSwgcCwgdCA9IEZsb2F0TnVtCisgICAgICAgIGksIGosIG4gPSBXaWVyZE51bQorICAgICAgICBkID0geworICAgICAgICAgICAgczondGlueScsIGI6J2xhcmdlJywgaDonbGFyZ2VyJywgcjonbGFyZ2VzdCcsCisgICAgICAgICAgICBlOiJFdWxlcidzIG51bWJlciIsIHA6J3BpJywgdDondGF1JywKKyAgICAgICAgICAgIGk6J0luZmluaXR5JywgajonLUluZmluaXR5JywgbjonTmFOJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFNNQUxMKV0sICd0aW55JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoQklHKV0sICdsYXJnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKEhVR0UpXSwgJ2xhcmdlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFJFQUxMWV9IVUdFKV0sICdsYXJnZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKEUpXSwgIkV1bGVyJ3MgbnVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFBJKV0sICdwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihUQVUpXSwgJ3RhdScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ0luZmluaXR5J10sICdJbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJy1JbmZpbml0eSddLCAnLUluZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnTmFOJ10sICdOYU4nKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSBkaWN0KAorICAgICAgICAgICAgICAgIHRpbnk9QmlnTnVtLnNtYWxsLAorICAgICAgICAgICAgICAgIGxhcmdlPUJpZ051bS5iaWcsCisgICAgICAgICAgICAgICAgbGFyZ2VyPUJpZ051bS5odWdlLAorICAgICAgICAgICAgICAgIGxhcmdlc3Q9QmlnTnVtLnJlYWxseV9odWdlLAorICAgICAgICAgICAgICAgIGU9RmxvYXROdW0uZSwKKyAgICAgICAgICAgICAgICBwaT1GbG9hdE51bS5waSwKKyAgICAgICAgICAgICAgICB0YXU9RmxvYXROdW0udGF1LAorICAgICAgICAgICAgICAgIGk9V2llcmROdW0uaW5mLAorICAgICAgICAgICAgICAgIGo9V2llcmROdW0ubmVnX2luZiwKKyAgICAgICAgICAgICAgICBuPVdpZXJkTnVtLm5hbiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIG5kID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0aW55J10sIFNNQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZSddLCBCSUcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlciddLCBIVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZXN0J10sIFJFQUxMWV9IVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydlJ10sIEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3BpJ10sIFBJKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0YXUnXSwgVEFVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydpJ10sIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnaiddLCBORUdfSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4obmRbJ24nXSkpCisKK2NsYXNzIFRlc3RQeUVudW0oVGVzdEVudW0sIFB5VGVzdCk6IHBhc3MKK2NsYXNzIFRlc3RDRW51bShUZXN0RW51bSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQppbmRleCAzZGQ4NzdhLi43Y2FhZmRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CitpbXBvcnQgcmUKIAogIyAyMDA3LTEwLTA1CiBKU09ORE9DUyA9IFsKQEAgLTEwMCw2ICsxMDEsOTQgQEAKICAgICAgICAgI1RoaXMgaXMgZm9yIHB5dGhvbiBlbmNvZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgZGF0YSwgaW5kZW50PVRydWUpCiAKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJycsICdFeHBlY3RpbmcgdmFsdWUnLCAwKSwKKyAgICAgICAgICAgICgnWycsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgnWzQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiwnLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ1siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbInNwYW0iLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneycsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIicsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCd7InNwYW0iOicsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDEwKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiwnLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICB0ZXN0X2Nhc2VzICs9IFsKKyAgICAgICAgICAgICgnIicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMCksCisgICAgICAgICAgICAoJyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9kYXRhKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCdbLCcsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIjpbfScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgnWzQyOicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDMpLAorICAgICAgICAgICAgKCdbNDIgInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNCksCisgICAgICAgICAgICAoJ1s0MixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDQpLAorICAgICAgICAgICAgKCd7InNwYW0iOls0Mn0nLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1siXScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbSI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsXScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnezonLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7LCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3s0MicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ1t7XScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMiksCisgICAgICAgICAgICAoJ3sic3BhbSIsJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSJ9JywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1t7InNwYW0iXScsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOn0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ1t7InNwYW0iOl0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOSksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIgImhhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1t7InNwYW0iOjQyXScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0Mix9JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxMSksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSBcKGNoYXIgezJ9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1tdXScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ3t9fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ1tdLFtdJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne30se30nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCc0Miwic3BhbSInLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCcic3BhbSIsNDInLCAnRXh0cmEgZGF0YScsIDYpLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gLSBsaW5lIDEgY29sdW1uIHsyfScKKyAgICAgICAgICAgICAgICByJyBcKGNoYXIgezN9IC0gezR9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGxlbihkYXRhKSArIDEsIGlkeCwgbGVuKGRhdGEpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbGluZWNvbChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnIScsIDEsIDEsIDApLAorICAgICAgICAgICAgKCcgIScsIDEsIDIsIDEpLAorICAgICAgICAgICAgKCdcbiEnLCAyLCAxLCAxKSwKKyAgICAgICAgICAgICgnXG4gIFxuXG4gICAgICEnLCA0LCA2LCAxMCksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIGxpbmUsIGNvbCwgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideRXhwZWN0aW5nIHZhbHVlOiBsaW5lIHswfSBjb2x1bW4gezF9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7Mn1cKSQnLmZvcm1hdChsaW5lLCBjb2wsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKIAogY2xhc3MgVGVzdFB5RmFpbChUZXN0RmFpbCwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENGYWlsKFRlc3RGYWlsLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQppbmRleCBhNGQ0ZDIwLi5lMDc4NTZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CkBAIC0zMiw2ICszMiw4IEBACiAgICAgICAgIGQxID0gc2VsZi5kdW1wcyhoKQogICAgICAgICBkMiA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQogICAgICAgICBkMyA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBkNCA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQorICAgICAgICBkNSA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlKQogCiAgICAgICAgIGgxID0gc2VsZi5sb2FkcyhkMSkKICAgICAgICAgaDIgPSBzZWxmLmxvYWRzKGQyKQpAQCAtNDIsNiArNDQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgzLCBoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QuZXhwYW5kdGFicygyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ0LCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNSwgZDMpCiAKICAgICBkZWYgdGVzdF9pbmRlbnQwKHNlbGYpOgogICAgICAgICBoID0gezM6IDF9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5OWY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpAQCAtMCwwICsxLDEzOCBAQAoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgZmlsZWNtcAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRleHR3cmFwCisKK0tFWVdPUkRfRklMRSAgICAgICAgICAgICA9IHN1cHBvcnQuZmluZGZpbGUoJ2tleXdvcmQucHknKQorR1JBTU1BUl9GSUxFICAgICAgICAgICAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLicsICcuLicsICdQeXRob24nLCAnZ3JhbWluaXQuYycpCitURVNUX1BZX0ZJTEUgICAgICAgICAgICAgPSAna2V5d29yZF90ZXN0LnB5JworR1JBTU1BUl9URVNUX0ZJTEUgICAgICAgID0gJ2dyYW1pbml0X3Rlc3QuYycKK1BZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUyA9ICdtaW5pbWFsX2tleXdvcmQucHknCitOT05FWElTVEVOVF9GSUxFICAgICAgICAgPSAnbm90X2hlcmUudHh0JworCisKK2NsYXNzIFRlc3RfaXNrZXl3b3JkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cnVlX2lzX2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtleXdvcmQuaXNrZXl3b3JkKCdUcnVlJykpCisKKyAgICBkZWYgdGVzdF91cHBlcmNhc2VfdHJ1ZV9pc19ub3RfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdUUlVFJykpCisKKyAgICBkZWYgdGVzdF9ub25lX3ZhbHVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoTm9uZSkpCisKKyAgICAjIFRoaXMgaXMgcHJvYmFibHkgYW4gYWNjaWRlbnQgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGJ1dCBzaG91bGQgYmUKKyAgICAjIHByZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAgICBkZWYgdGVzdF9jaGFuZ2luZ190aGVfa3dsaXN0X2RvZXNfbm90X2FmZmVjdF9pc2tleXdvcmQoc2VsZik6CisgICAgICAgIG9sZGxpc3QgPSBrZXl3b3JkLmt3bGlzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwga2V5d29yZCwgJ2t3bGlzdCcsIG9sZGxpc3QpCisgICAgICAgIGtleXdvcmQua3dsaXN0ID0gWydpdHMnLCAnYWxsJywgJ2VnZ3MnLCAnYmVhbnMnLCAnYW5kJywgJ2EnLCAnc2xpY2UnXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKCdlZ2dzJykpCisKKworY2xhc3MgVGVzdEtleXdvcmRHZW5lcmF0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKHNlbGYsIHNvdXJjZV9maWxlLCBkZXN0X2ZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oc291cmNlX2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBubCA9IGxpbmVzWzBdW2xlbihsaW5lc1swXS5zdHJpcCgpKTpdCisgICAgICAgIHdpdGggb3BlbihkZXN0X2ZpbGUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1s6bGluZXMuaW5kZXgoYiIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDFdKQorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyhsaW5lc1tsaW5lcy5pbmRleChiIiMtLWVuZCBrZXl3b3Jkcy0tIiArIG5sKTpdKQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXl3b3JkcyhzZWxmLCBncmFtbWFyX2ZpbGUsIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGUpOgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfa2V5d29yZF9weV9maWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpWzFdCisgICAgICAgIHJldHVybiBwcm9jLnJldHVybmNvZGUsIHN0ZGVycgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMoR1JBTU1BUl9GSUxFKSwKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG9ubHkgd29ya3MgZnJvbSBzb3VyY2UgYnVpbGQgZGlyZWN0b3J5JykKKyAgICBkZWYgdGVzdF9yZWFsX2dyYW1tYXJfYW5kX2tleXdvcmRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcChLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIGInJyksIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKworICAgIGRlZiB0ZXN0X2dyYW1tYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHdpdGggb3BlbihHUkFNTUFSX1RFU1RfRklMRSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgICMgU29tZSBvZiB0aGVzZSBhcmUgcHJvYmFibHkgaW1wbGVtZW50YXRpb24gYWNjaWRlbnRzLgorICAgICAgICAgICAgZnAud3JpdGVsaW5lcyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIHsyLCAxfSwKKyAgICAgICAgICAgICAgICAgICAgezExLCAiZW5jb2RpbmdfZGVjbCIsIDAsIDIsIHN0YXRlc183OSwKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAiCisgICAgICAgICAgICAgICAgICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiamVsbG8ifSwKKyAgICAgICAgICAgICAgICAgICAgezMyNiwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAidHVybmlwIn0sCisgICAgICAgICAgICAgICAgXHR7MSwgIlRoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCIKKyAgICAgICAgICAgICAgICAgICAgezI3OCwgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY3JhenkgYnV0IGxlZ2FsIgorICAgICAgICAgICAgICAgICJhbHNvIGxlZ2FsIiB7MSwgIgorICAgICAgICAgICAgICAgICAgICB7MSwgImNvbnRpbnVlIn0sCisgICAgICAgICAgICAgICAgICAgezEsICJsZW1vbiJ9LAorICAgICAgICAgICAgICAgICAgICAgezEsICJ0b21hdG8ifSwKKyAgICAgICAgICAgICAgICB7MSwgIndpZ2lpIn0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAnbm8gZ29vZCd9CisgICAgICAgICAgICAgICAgICAgIHsyODMsIDB9LAorICAgICAgICAgICAgICAgICAgICB7MSwgICJ0b28gbWFueSBzcGFjZXMifSIiIikpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgR1JBTU1BUl9URVNUX0ZJTEUpCisgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKEdSQU1NQVJfVEVTVF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgIiAgICAgICAgJ1RoaXMgb25lIGlzIHRhYiBpbmRlbnRlZCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdhbHNvIGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NvbnRpbnVlJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2NyYXp5IGJ1dCBsZWdhbCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdqZWxsbycsIiwKKyAgICAgICAgICAgICIgICAgICAgICdsZW1vbicsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0b21hdG8nLCIsCisgICAgICAgICAgICAiICAgICAgICAndHVybmlwJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3dpZ2lpJywiLAorICAgICAgICAgICAgXQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9QWV9GSUxFKSBhcyBmcDoKKyAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICBzdGFydCA9IGxpbmVzLmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIikgKyAxCisgICAgICAgIGVuZCA9IGxpbmVzLmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIpCisgICAgICAgIGFjdHVhbCA9IGxpbmVzW3N0YXJ0OmVuZF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZ3JhbW1hcl9yZXN1bHRzX2luX25vX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFBZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUykKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKFRFU1RfUFlfRklMRSwgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKSkKKworICAgIGRlZiB0ZXN0X2tleXdvcmRzX3B5X3dpdGhvdXRfbWFya2Vyc19wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIG9zLmRldm51bGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJ2RvZXMgbm90IGNvbnRhaW4gZm9ybWF0IG1hcmtlcnMnKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19ncmFtbWFyX2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3JkcyhOT05FWElTVEVOVF9GSUxFLCBLRVlXT1JEX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2tleXdvcmRzX3B5X2ZpbGVfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLCBOT05FWElTVEVOVF9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyciwgYicoP21zKScgKyBOT05FWElTVEVOVF9GSUxFLmVuY29kZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5IGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQppbmRleCAwNTAzYTdmLi5lNGE0NGMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKQEAgLTE3Niw2ICsxNzYsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gX19hCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpLmYoKSwgNDIpCiAKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V2YWx1YXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDE2OTY3CisgICAgICAgIGEgPSA0MgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZGVmIGYodj1hLCB4PWIsICosIHk9Yywgej1kKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyci5leGNlcHRpb24pLCAibmFtZSAnYicgaXMgbm90IGRlZmluZWQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZiA9IGxhbWJkYSB2PWEsIHg9YiwgKiwgeT1jLCB6PWQ6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChLZXl3b3JkT25seUFyZ1Rlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CmluZGV4IGU1ZTYwNTguLmJhZmRlYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICNyYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQpAQCAtMTg1LDYgKzE4NSwzMyBAQAogICAgICAgICBiLmNsb3NlKCkKICAgICAgICAga3EuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtxdWV1ZS5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtxdWV1ZS5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxdWV1ZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxdWV1ZS5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAga3F1ZXVlLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmNvbnRyb2wsIE5vbmUsIDQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoa3F1ZXVlLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShrcXVldWUuZmlsZW5vKCkpLCBGYWxzZSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEtRdWV1ZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQppbmRleCA2M2VlNjk3Li41YjI3NmU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICAjIFNlZWtpbmcgaXMgbm90IGVub3VnaCBvZiBhIHRlc3Q6IHlvdSBtdXN0IHdyaXRlIGFuZCBmbHVzaCwgdG9vIQogICAgICAgICAgICAgZi53cml0ZShiJ3gnKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggYWU0Y2ExOC4uZmZkMGM4YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMjYsNiArMjYsNyBAQAogaW1wb3J0IGxvZ2dpbmcuY29uZmlnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb25maWdwYXJzZXIKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGlvCkBAIC01OCw3ICs1OSw5IEBACiAgICAgaW1wb3J0IHNtdHBkCiAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwogICAgIGZyb20gc29ja2V0c2VydmVyIGltcG9ydCAoVGhyZWFkaW5nVURQU2VydmVyLCBEYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4U3RyZWFtU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVW5peERhdGFncmFtU2VydmVyKQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIHRyeToKQEAgLTc1LDEzICs3OCwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIAotCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJCYXNlIGNsYXNzIGZvciBsb2dnaW5nIHRlc3RzLiIiIgogCiAgICAgbG9nX2Zvcm1hdCA9ICIlKG5hbWUpcyAtPiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHcuXSspIC0+IChcdyspOiAoXGQrKSQiCiAgICAgbWVzc2FnZV9udW0gPSAwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05Myw3ICs5NSw4IEBACiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJzID0gbG9nZ2luZy5faGFuZGxlcnMuY29weSgpCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdCA9IGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2xvZ2dlcnMgPSBzYXZlZF9sb2dnZXJzID0gbG9nZ2VyX2RpY3QuY29weSgpCi0gICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX25hbWVzID0gbG9nZ2luZy5fbGV2ZWxOYW1lcy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCA9IGxvZ2dpbmcuX25hbWVUb0xldmVsLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lID0gbG9nZ2luZy5fbGV2ZWxUb05hbWUuY29weSgpCiAgICAgICAgICAgICBzZWxmLmxvZ2dlcl9zdGF0ZXMgPSBsb2dnZXJfc3RhdGVzID0ge30KICAgICAgICAgICAgIGZvciBuYW1lIGluIHNhdmVkX2xvZ2dlcnM6CiAgICAgICAgICAgICAgICAgbG9nZ2VyX3N0YXRlc1tuYW1lXSA9IGdldGF0dHIoc2F2ZWRfbG9nZ2Vyc1tuYW1lXSwKQEAgLTEzNSw4ICsxMzgsMTAgQEAKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxOYW1lcy5jbGVhcigpCi0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLnVwZGF0ZShzZWxmLnNhdmVkX2xldmVsX25hbWVzKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfdG9fbmFtZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLnVwZGF0ZShzZWxmLnNhdmVkX25hbWVfdG9fbGV2ZWwpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy51cGRhdGUoc2VsZi5zYXZlZF9oYW5kbGVycykKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdID0gc2VsZi5zYXZlZF9oYW5kbGVyX2xpc3QKQEAgLTE1MCwxMiArMTU1LDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAKLSAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lKToKKyAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lLCBwYXQ9Tm9uZSk6CiAgICAgICAgICIiIk1hdGNoIHRoZSBjb2xsZWN0ZWQgbG9nIGxpbmVzIGFnYWluc3QgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICBzZWxmLmV4cGVjdGVkX2xvZ19wYXQsIGFuZCBjb21wYXJlIHRoZSBleHRyYWN0ZWQgZ3JvdXAgdmFsdWVzIHRvCiAgICAgICAgIHRoZSBleHBlY3RlZF92YWx1ZXMgbGlzdCBvZiB0dXBsZXMuIiIiCiAgICAgICAgIHN0cmVhbSA9IHN0cmVhbSBvciBzZWxmLnN0cmVhbQotICAgICAgICBwYXQgPSByZS5jb21waWxlKHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShwYXQgb3Igc2VsZi5leHBlY3RlZF9sb2dfcGF0KQogICAgICAgICBhY3R1YWxfbGluZXMgPSBzdHJlYW0uZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsX2xpbmVzKSwgbGVuKGV4cGVjdGVkX3ZhbHVlcykpCiAgICAgICAgIGZvciBhY3R1YWwsIGV4cGVjdGVkIGluIHppcChhY3R1YWxfbGluZXMsIGV4cGVjdGVkX3ZhbHVlcyk6CkBAIC00MzAsNyArNDM1LDcgQEAKICAgICAiIiJUZXN0IHZhcmlvdXMgZmlsdGVyaW5nIHBvc3NpYmlsaXRpZXMgd2l0aCBjdXN0b20gbG9nZ2luZyBsZXZlbHMuIiIiCiAKICAgICAjIFNraXAgdGhlIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtNTYwLDcgKzU2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZhY2lsaXR5LCBoLkxPR19VU0VSKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLnVuaXhzb2NrZXQpCiAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjIHN5c2xvZ2QgbWlnaHQgbm90IGJlIGF2YWlsYWJsZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICMgc3lzbG9nZCBtaWdodCBub3QgYmUgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmb3IgbWV0aG9kIGluICgnR0VUJywgJ1BPU1QnLCAnUFVUJyk6CiAgICAgICAgICAgICBpZiBtZXRob2QgPT0gJ1BVVCc6CkBAIC02NDcsNDEgKzY1Miw2IEBACiAjIC0tIGlmIGl0IHByb3ZlcyB0byBiZSBvZiB3aWRlciB1dGlsaXR5IHRoYW4ganVzdCB0ZXN0X2xvZ2dpbmcKIAogaWYgdGhyZWFkaW5nOgotICAgIGNsYXNzIFRlc3RTTVRQQ2hhbm5lbChzbXRwZC5TTVRQQ2hhbm5lbCk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGRlcml2ZWQgY2xhc3MgaGFzIGhhZCB0byBiZSBjcmVhdGVkIGJlY2F1c2Ugc210cGQgZG9lcyBub3QKLSAgICAgICAgc3VwcG9ydCB1c2Ugb2YgY3VzdG9tIGNoYW5uZWwgbWFwcywgYWx0aG91Z2ggdGhleSBhcmUgYWxsb3dlZCBieQotICAgICAgICBhc3luY29yZSdzIGRlc2lnbi4gSXNzdWUgIzExOTU5IGhhcyBiZWVuIHJhaXNlZCB0byBhZGRyZXNzIHRoaXMsCi0gICAgICAgIGFuZCBpZiByZXNvbHZlZCBzYXRpc2ZhY3RvcmlseSwgc29tZSBvZiB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBzb2NrbWFwKToKLSAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgc29ja21hcCkKLSAgICAgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KLSAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcyA9IFtdCi0gICAgICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9ICcnCi0gICAgICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCi0gICAgICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwotICAgICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCi0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5mcWRuLCBzbXRwZC5fX3ZlcnNpb25fXykpCi0gICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGInXHJcbicpCi0gICAgICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBGYWxzZQotCi0KICAgICBjbGFzcyBUZXN0U01UUFNlcnZlcihzbXRwZC5TTVRQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHRlc3QgU01UUCBzZXJ2ZXIuCkBAIC03MDIsMzcgKzY3MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLiBUaGlzIGF2b2lkcyBjaGFuZ2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDptb2Q6YGFzeW5jb3JlYCBtb2R1bGUncyBnbG9iYWwgc3RhdGUuCiAgICAgICAgICIiIgotICAgICAgICBjaGFubmVsX2NsYXNzID0gVGVzdFNNVFBDaGFubmVsCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHIsIGhhbmRsZXIsIHBvbGxfaW50ZXJ2YWwsIHNvY2ttYXApOgotICAgICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5zb2NrbWFwID0gc29ja21hcAotICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMCkKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc29jaywgbWFwPXNvY2ttYXApCi0gICAgICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXVzZV9hZGRyKCkKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmQoYWRkcikKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KLSAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIE5vbmUsIG1hcD1zb2NrbWFwKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5faGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYucG9sbF9pbnRlcnZhbCA9IHBvbGxfaW50ZXJ2YWwKIAotICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBSZWRlZmluZWQgb25seSBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzIGRvZXMgbm90IHBhc3MgaW4gYQotICAgICAgICAgICAgbWFwLCBmb3JjaW5nIHVzZSBvZiBhIGdsb2JhbCBpbiA6bW9kOmBhc3luY29yZWAuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5zb2NrbWFwKQotCiAgICAgICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBEZWxlZ2F0ZXMgdG8gdGhlIGhhbmRsZXIgcGFzc2VkIGluIHRvIHRoZSBzZXJ2ZXIncyBjb25zdHJ1Y3Rvci4KQEAgLTc2Myw4ICs3MTAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmdW5jOmBhc3luY29yZS5sb29wYC4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AocG9sbF9pbnRlcnZhbCwgbWFwPXNlbGYuc29ja21hcCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5fbWFwKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBPbiBGcmVlQlNEIDgsIGNsb3NpbmcgdGhlIHNlcnZlciByZXBlYXRhYmx5CiAgICAgICAgICAgICAgICAgIyByYWlzZXMgdGhpcyBlcnJvci4gV2Ugc3dhbGxvdyBpdCBpZiB0aGUKICAgICAgICAgICAgICAgICAjIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuCkBAIC04NzEsNyArODE4LDcgQEAKICAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGN0eDoKICAgICAgICAgICAgICAgICAgICAgc29jayA9IHNlbGYuc3NsY3R4LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC05MDgsNiArODU1LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RUQ1BTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9iaW5kKCkKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KIAorICAgIGNsYXNzIFRlc3RVbml4U3RyZWFtU2VydmVyKFRlc3RUQ1BTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICAgICBjbGFzcyBUZXN0VURQU2VydmVyKENvbnRyb2xNaXhpbiwgVGhyZWFkaW5nVURQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIEEgVURQIHNlcnZlciB3aGljaCBpcyBjb250cm9sbGFibGUgdXNpbmcgOmNsYXNzOmBDb250cm9sTWl4aW5gLgpAQCAtOTM3LDcgKzg4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoRGVsZWdhdGluZ1VEUFJlcXVlc3RIYW5kbGVyLCBzZWxmKS5maW5pc2goKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5fY2xvc2VkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC05NTUsNiArOTA1LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RVRFBTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKKyAgICBjbGFzcyBUZXN0VW5peERhdGFncmFtU2VydmVyKFRlc3RVRFBTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICMgLSBlbmQgb2Ygc2VydmVyX2hlbHBlciBzZWN0aW9uCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCkBAIC05OTEsNyArOTQ0LDcgQEAKICAgICAiIiJUZXN0cyBmb3IgdGhlIE1lbW9yeUhhbmRsZXIuIiIiCiAKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMTA0NCw3ICs5OTcsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgLmluaS1zdHlsZSBjb25maWcgZmlsZS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gIiIiCkBAIC0xMjkyLDYgKzEyNDUsMjQgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzBfdXNpbmdfY3Bfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoc2VsZi5jb25maWcwKSkKKyAgICAgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZmlsZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoY3ApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKICAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKICAgICAgICAgIyBBIGNvbmZpZyBmaWxlIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgogICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKQEAgLTEzODEsNyArMTM1Miw3IEBACiAKICAgICBkZWYgdGVzdF9sb2dnZXJfZGlzYWJsaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKLSAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzb21lX3ByaXN0aW5lX2xvZ2dlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTEzOTQsMTcgKzEzNjUsMjMgQEAKIAogICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgb2JqZWN0cy4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFRDUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBUQ1Agc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTb2NrZXRIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VENQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3NvY2tldCwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTQ0NCwzNSArMTQyMSw2OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgInNwYW1cbmVnZ3NcbiIpCiAKICAgICBkZWYgdGVzdF9ub3NlcnZlcihzZWxmKToKKyAgICAgICAgIyBBdm9pZCB0aW1pbmctcmVsYXRlZCBmYWlsdXJlcyBkdWUgdG8gU29ja2V0SGFuZGxlcidzIG93biBoYXJkLXdpcmVkCisgICAgICAgICMgb25lLXNlY29uZCB0aW1lb3V0IG9uIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpIChpc3N1ZSAjMTYyNjQpLgorICAgICAgICBzZWxmLnNvY2tfaGRsci5yZXRyeVN0YXJ0ID0gMi41CiAgICAgICAgICMgS2lsbCB0aGUgc2VydmVyCiAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoMi4wKQotICAgICAgICAjVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCisgICAgICAgICMgVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGVsaWJlcmF0ZSBtaXN0YWtlJykKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXhjZXB0aW9uKCdOZXZlciBzZW50JykKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTmV2ZXIgc2VudCwgZWl0aGVyJykKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSA+IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSwgbm93KQogICAgICAgICB0aW1lLnNsZWVwKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSAtIG5vdyArIDAuMDAxKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOb3IgdGhpcycpCiAKK2RlZiBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpOgorICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0ZXN0X2xvZ2dpbmdfJywgc3VmZml4PScuc29jaycpCisgICAgb3MuY2xvc2UoZmQpCisgICAgIyBqdXN0IG5lZWQgYSBuYW1lIC0gZmlsZSBjYW4ndCBiZSBwcmVzZW50LCBvciB3ZSdsbCBnZXQgYW4KKyAgICAjICdhZGRyZXNzIGFscmVhZHkgaW4gdXNlJyBlcnJvci4KKyAgICBvcy5yZW1vdmUoZm4pCisgICAgcmV0dXJuIGZuCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U29ja2V0SGFuZGxlclRlc3QoU29ja2V0SGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciB3aXRoIHVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhTdHJlYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBEYXRhZ3JhbUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlci4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBEYXRhZ3JhbUhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNTA3LDIxICsxNTE4LDQ0IEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0KERhdGFncmFtSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyIHVzaW5nIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTeXNMb2dIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHVzaW5nIFVEUC4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTeXNMb2dIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zbF9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyKCgnbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNsX2hkbHIpCkBAIC0xNTU5LDYgKzE1OTMsMjMgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peFN5c0xvZ0hhbmRsZXJUZXN0KFN5c0xvZ0hhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFN5c0xvZ0hhbmRsZXIgd2l0aCBVbml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBIVFRQSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICIiIlRlc3QgZm9yIEhUVFBIYW5kbGVyLiIiIgogCkBAIC0xNzc5LDcgKzE4MzAsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKICAgICAgICAgICAgIHMgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSwgMCkKIAogICAgICAgICAgICAgI1NlZSBpZiBhbiBleHBsaWNpdCBmaWxlIHVzZXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBhX2ZpbGUgPSBpby5TdHJpbmdJTygpCkBAIC0xODE3LDcgKzE4NjgsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgZGljdGlvbmFyeS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gewpAQCAtMjM4OSw2ICsyNDQwLDMyIEBACiAgICAgICAgIH0sCiAgICAgfQogCisgICAgIyBBcyBjb25maWcwLCBidXQgd2l0aCBwcm9wZXJ0aWVzCisgICAgY29uZmlnMTQgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICcuJzogeworICAgICAgICAgICAgICAgICAgICAnZm9vJzogJ2JhcicsCisgICAgICAgICAgICAgICAgICAgICd0ZXJtaW5hdG9yJzogJyFcbicsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCiAgICAgb3V0X29mX29yZGVyID0gewogICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgICJmb3JtYXR0ZXJzIjogewpAQCAtMjY1NiwxMSArMjczMywyMCBAQAogICAgIGRlZiB0ZXN0X2NvbmZpZzEzX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCiAKKyAgICBkZWYgdGVzdF9jb25maWcxNF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzE0KQorICAgICAgICAgICAgaCA9IGxvZ2dpbmcuX2hhbmRsZXJzWydoYW5kMSddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZm9vLCAnYmFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50ZXJtaW5hdG9yLCAnIVxuJykKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnRXhjbGFtYXRpb24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dHB1dC5nZXR2YWx1ZSgpLmVuZHN3aXRoKCdFeGNsYW1hdGlvbiFcbicpKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnbGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsnKQotICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCk6CisgICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0LCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgidXRmLTgiKQogICAgICAgICAjIEFzayBmb3IgYSByYW5kb21seSBhc3NpZ25lZCBwb3J0IChieSB1c2luZyBwb3J0IDApCi0gICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCkKKyAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwLCB2ZXJpZnkpCiAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICB0LnJlYWR5LndhaXQoKQogICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCkBAIC0yNzIwLDYgKzI4MDYsNjkgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfbGlzdGVuX3ZlcmlmeShzZWxmKToKKworICAgICAgICBkZWYgdmVyaWZ5X2ZhaWwoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkZWYgdmVyaWZ5X3JldmVyc2Uoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIHN0dWZmWzo6LTFdCisKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgIHRvX3NlbmQgPSB0ZXh0d3JhcC5kZWRlbnQoQ29uZmlnRmlsZVRlc3QuY29uZmlnMSkKKyAgICAgICAgIyBGaXJzdCwgc3BlY2lmeSBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiB0aGF0IHdpbGwgZmFpbC4KKyAgICAgICAgIyBXZSBleHBlY3QgdG8gc2VlIG5vIG91dHB1dCwgc2luY2Ugb3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBuZXZlciB0b29rIGVmZmVjdC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kLCB2ZXJpZnlfZmFpbCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gbm8gdmVyaWZpY2F0aW9uLiBPdXIgY29uZmlndXJhdGlvbgorICAgICAgICAjIHNob3VsZCB0YWtlIGVmZmVjdC4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQpICAgICMgbm8gdmVyaWZ5IGNhbGxhYmxlIHNwZWNpZmllZAorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gdmVyaWZpY2F0aW9uIHdoaWNoIHRyYW5zZm9ybXMgdGhlIGJ5dGVzLgorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZFs6Oi0xXSwgdmVyaWZ5X3JldmVyc2UpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICc1JyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IHN0aWxsIGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkIGJlZm9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKwogICAgIGRlZiB0ZXN0X291dF9vZl9vcmRlcihzZWxmKToKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5vdXRfb2Zfb3JkZXIpCiAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbXltb2R1bGUnKS5oYW5kbGVyc1swXQpAQCAtMjc3OSwxNCArMjkyOCwxNCBAQAogICAgICAgICBsMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZWYuZ2hpJykKICAgICAgICAgYzEgPSByLmdldENoaWxkKCd4eXonKQogICAgICAgICBjMiA9IHIuZ2V0Q2hpbGQoJ3V2dy54eXonKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQogICAgICAgICBjMSA9IGwxLmdldENoaWxkKCdkZWYnKQogICAgICAgICBjMiA9IGMxLmdldENoaWxkKCdnaGknKQogICAgICAgICBjMyA9IGwxLmdldENoaWxkKCdkZWYuZ2hpJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGMzKQorICAgICAgICBzZWxmLmFzc2VydElzKGMxLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgYzMpCiAKIAogY2xhc3MgRGVyaXZlZExvZ1JlY29yZChsb2dnaW5nLkxvZ1JlY29yZCk6CkBAIC0yODI5LDcgKzI5NzgsNyBAQAogCiBjbGFzcyBRdWV1ZUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMzEyMywxMyArMzI3MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcwIC0gcmVsZWFzZScsIHNlbGYuY2FsbGVkWy0xXSkKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2ZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2ZsdXNoJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnY2xvc2UnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfdmFsdWVlcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBWYWx1ZUVycm9yKQpAQCAtMzMzNiw2ICszNDg1LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5yb290LmxldmVsLCBzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2luZy5yb290LmhhbmRsZXJzKSwgMSkKQEAgLTMzNDMsMTcgKzM0OTgsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhhbmRsZXIsIGxvZ2dpbmcuRmlsZUhhbmRsZXIpCiAKICAgICAgICAgZXhwZWN0ZWQgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCd0ZXN0LmxvZycsICdhJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm5hbWUsIGV4cGVjdGVkLnN0cmVhbS5uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9maWxlbW9kZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycsIGZpbGVtb2RlPSd3YicpCiAKICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcucm9vdC5oYW5kbGVyc1swXQogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ3diJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9zdHJlYW0oc2VsZik6CiAgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKQEAgLTM4MDksNiArMzk3MCw2MyBAQAogICAgICAgICBhc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuLCAnVzcnLCBkZWxheT1UcnVlKQogCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl9kYWlseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gMAorICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj0nTUlETklHSFQnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3ZlcihjdXJyZW50VGltZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBjdXJyZW50VGltZSArIDEyICogNjAgKiA2MCkKKworICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMzYgKiA2MCAqIDYwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmguY2xvc2UoKQorCisgICAgI0B1bml0dGVzdC5za2lwSWYoVHJ1ZSwgJ1RlbXBvcmFyaWx5IHNraXBwZWQgd2hpbGUgZmFpbHVyZXMgaW52ZXN0aWdhdGVkLicpCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl93ZWVrbHlfYXR0aW1lKHNlbGYpOgorICAgICAgICBjdXJyZW50VGltZSA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgdG9kYXkgPSBjdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lICUgODY0MDAKKworICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorCisgICAgICAgIHdkYXkgPSB0aW1lLmdtdGltZSh0b2RheSkudG1fd2RheQorICAgICAgICBmb3IgZGF5IGluIHJhbmdlKDcpOgorICAgICAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdXJWQnICUgZGF5LCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgICAgICBhdFRpbWU9YXRUaW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHdkYXkgPiBkYXk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIHJvbGxvdmVyIGRheSBoYXMgYWxyZWFkeSBwYXNzZWQgdGhpcyB3ZWVrLCBzbyB3ZQorICAgICAgICAgICAgICAgICAgICAjIGdvIG92ZXIgaW50byBuZXh0IHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoNyAtIHdkYXkgKyBkYXkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoZGF5IC0gd2RheSkKKyAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgZXhwZWN0ZWQgaXMgaW4gZGF5cyBmcm9tIG5vdywgY29udmVydCB0byBzZWNvbmRzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgIyBBZGQgaW4gdGhlIHJvbGxvdmVyIHRpbWUKKyAgICAgICAgICAgICAgICBleHBlY3RlZCArPSAxMiAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiBhZGp1c3RtZW50IGZvciB0b2RheQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHRvZGF5CisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5KQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBkYXkgPT0gd2RheToKKyAgICAgICAgICAgICAgICAgICAgIyBnb2VzIGludG8gZm9sbG93aW5nIHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gNyAqIDI0ICogNjAgKiA2MAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3Zlcih0b2RheSArIDEzICogNjAgKiA2MCkKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgaW4gdGltZXpvbmU6ICVkJyAlIHRpbWUudGltZXpvbmUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdsb2NhbCB2YXJzOiAlcycgJSBsb2NhbHMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJoLmNsb3NlKCkKKworCiBkZWYgc2VjcygqKmt3KToKICAgICByZXR1cm4gZGF0ZXRpbWUudGltZWRlbHRhKCoqa3cpIC8vIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEpCiAKQEAgLTM4NjcsNyArNDA4NSw3IEBACiAgICAgICAgIGguaGFuZGxlKHIpCiAgICAgICAgIGguY2xvc2UoKQogICAgICAgICAjIE5vdyBzZWUgaWYgdGhlIGV2ZW50IGlzIHJlY29yZGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fcmVjcyA8IHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhudW1fcmVjcywgd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKSkKICAgICAgICAgZmxhZ3MgPSB3aW4zMmV2dGxvZy5FVkVOVExPR19CQUNLV0FSRFNfUkVBRCB8IFwKICAgICAgICAgICAgICAgICB3aW4zMmV2dGxvZy5FVkVOVExPR19TRVFVRU5USUFMX1JFQUQKICAgICAgICAgZm91bmQgPSBGYWxzZQpAQCAtMzkwMCw3ICs0MTE4LDggQEAKICAgICAgICAgICAgICAgICAgU01UUEhhbmRsZXJUZXN0LCBGaWxlSGFuZGxlclRlc3QsIFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LAogICAgICAgICAgICAgICAgICBMYXN0UmVzb3J0VGVzdCwgTG9nUmVjb3JkVGVzdCwgRXhjZXB0aW9uVGVzdCwKICAgICAgICAgICAgICAgICAgU3lzTG9nSGFuZGxlclRlc3QsIEhUVFBIYW5kbGVyVGVzdCwgTlRFdmVudExvZ0hhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0CisgICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsIFVuaXhTb2NrZXRIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgVW5peERhdGFncmFtSGFuZGxlclRlc3QsIFVuaXhTeXNMb2dIYW5kbGVyVGVzdAogICAgICAgICAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQppbmRleCBiYWYxZDZhLi42YzMwZmVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC0xMDc5LDcgKzEwNzksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2JpZycsIHNpZ25lZD1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDApLnRvX2J5dGVzKDAsICdiaWcnKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKS50b19ieXRlcyg1LCAnYmlnJyksIGInXHgwMFx4MDBceDAwXHgwMFx4MDEnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sem1hLnB5IGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CmluZGV4IGFkOTA0NTYuLjI2ZDE5ZGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2x6bWEucHkKQEAgLTM3MSw2ICszNzEsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgInciKSBhcyBmOgogICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgIngiKSBhcyBmOgorICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgImEiKSBhcyBmOgogICAgICAgICAgICAgcGFzcwogCkBAIC0zOTgsMTMgKzQwMCwyOSBAQAogICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sICJhYiIpOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X2luaXRfd2l0aF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2luaXRfYmFkX21vZGUoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAoMywgIngiKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICIiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIngiKQorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInh0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4KyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicngiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInd4IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJydCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CkBAIC02NzgsNiArNjk2LDIwIEBACiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haWzoxMjhdKSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHN0cmVhbSBmb290ZXI6IENSQyAoNCBieXRlcyksIGluZGV4IHNpemUgKDQgYnl0ZXMpLAorICAgICAgICAjIGZsYWdzICgyIGJ5dGVzKSBhbmQgbWFnaWMgbnVtYmVyICgyIGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gQ09NUFJFU1NFRF9YWls6LTEyXQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKElOUFVUKSksIElOUFVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEyLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMik6CisgICAgICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkWzppXSkpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKwogICAgIGRlZiB0ZXN0X3JlYWRfYmFkX2FyZ3Moc2VsZik6CiAgICAgICAgIGYgPSBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTEwMTcsOCArMTA0OSw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJ4IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKQEAgLTEwNjcsNiArMTA5NywxNiBAQAogICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oYmlvLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIiwgInh0Iik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCiAKIGNsYXNzIE1pc2NlbGxhbmVvdXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQppbmRleCBmMmU0YzYzLi43OGUyYTMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC01OTYsNyArNTk2LDcgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgVGVzdE1haWxib3guc2V0VXAoc2VsZikKLSAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgaWYgKG9zLm5hbWUgPT0gJ250Jykgb3IgKHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyk6CiAgICAgICAgICAgICBzZWxmLl9ib3guY29sb24gPSAnIScKIAogICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKaW5kZXggN2UzN2YzOS4uMjU1ZWI4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQpAQCAtMjQsMzcgKzI0LDEzIEBACiAKIGNsYXNzIEludFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoZSBmdWxsIHJhbmdlIG9mIFB5dGhvbiBpbnRzLgotICAgICAgICBuID0gc3lzLm1heHNpemUKKyAgICAgICAgIyBUZXN0IGEgcmFuZ2Ugb2YgUHl0aG9uIGludHMgbGFyZ2VyIHRoYW4gdGhlIG1hY2hpbmUgd29yZCBzaXplLgorICAgICAgICBuID0gc3lzLm1heHNpemUgKiogMgogICAgICAgICB3aGlsZSBuOgogICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgc2VsZi5oZWxwZXIoZXhwZWN0ZWQpCiAgICAgICAgICAgICBuID0gbiA+PiAxCiAKLSAgICBkZWYgdGVzdF9pbnQ2NChzZWxmKToKLSAgICAgICAgIyBTaW11bGF0ZSBpbnQgbWFyc2hhbGluZyBvbiBhIDY0LWJpdCBib3guICBUaGlzIGlzIG1vc3QgaW50ZXJlc3RpbmcgaWYKLSAgICAgICAgIyB3ZSdyZSBydW5uaW5nIHRoZSB0ZXN0IG9uIGEgMzItYml0IGJveCwgb2YgY291cnNlLgotCi0gICAgICAgIGRlZiB0b19saXR0bGVfZW5kaWFuX3N0cmluZyh2YWx1ZSwgbmJ5dGVzKToKLSAgICAgICAgICAgIGIgPSBieXRlYXJyYXkoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJ5dGVzKToKLSAgICAgICAgICAgICAgICBiLmFwcGVuZCh2YWx1ZSAmIDB4ZmYpCi0gICAgICAgICAgICAgICAgdmFsdWUgPj49IDgKLSAgICAgICAgICAgIHJldHVybiBiCi0KLSAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCi0gICAgICAgIG1pbmludDY0ID0gLW1heGludDY0LTEKLQotICAgICAgICBmb3IgYmFzZSBpbiBtYXhpbnQ2NCwgbWluaW50NjQsIC1tYXhpbnQ2NCwgLShtaW5pbnQ2NCA+PiAxKToKLSAgICAgICAgICAgIHdoaWxlIGJhc2U6Ci0gICAgICAgICAgICAgICAgcyA9IGInSScgKyB0b19saXR0bGVfZW5kaWFuX3N0cmluZyhiYXNlLCA4KQotICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGdvdCkKLSAgICAgICAgICAgICAgICBpZiBiYXNlID09IC0xOiAgIyBhIGZpeGVkLXBvaW50IGZvciBzaGlmdGluZyByaWdodCAxCi0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA+Pj0gMQotCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgZm9yIGIgaW4gKFRydWUsIEZhbHNlKToKICAgICAgICAgICAgIHNlbGYuaGVscGVyKGIpCkBAIC0yMDEsMTAgKzE3NywxNCBAQAogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgZGVmIHRlc3RfbG9hZHNfMnhfY29kZShzZWxmKToKICAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNCkgKyBiJ3snICogMioqMjAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgcyA9IGInYycgKyAoYidYJyAqIDQqNSkgKyBiJ3snICogMioqMjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKKwogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKICAgICAgICAgIyBDcmVhdGUgYSBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZS4KICAgICAgICAgaGVhZCA9IGxhc3QgPSBbXQpAQCAtMjgyLDE1ICsyNjIsMjAgQEAKIAogICAgIGRlZiB0ZXN0X2JhZF9yZWFkZXIoc2VsZik6CiAgICAgICAgIGNsYXNzIEJhZFJlYWRlcihpby5CeXRlc0lPKToKLSAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAgICAgICAgIGIgPSBzdXBlcigpLnJlYWQobikKKyAgICAgICAgICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICAgICAgICAgIG4gPSBzdXBlcigpLnJlYWRpbnRvKGJ1ZikKICAgICAgICAgICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuID4gNDoKLSAgICAgICAgICAgICAgICAgICAgYiArPSBiJyAnICogMTAqKjYKLSAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgICAgICAgICBuICs9IDEwKio2CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZm9yIHZhbHVlIGluICgxLjAsIDFqLCBiJzAxMjM0NTY3ODknLCAnMDEyMzQ1Njc4OScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkUmVhZGVyKG1hcnNoYWwuZHVtcHModmFsdWUpKSkKIAorICAgIGRlZiBfdGVzdF9lb2Yoc2VsZik6CisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKCgiaGVsbG8iLCAiZG9sbHkiLCBOb25lKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBtYXJzaGFsLmxvYWRzLCBkYXRhWzA6IGldKQorCiBMQVJHRV9TSVpFID0gMioqMzEKIHBvaW50ZXJfc2l6ZSA9IDggaWYgc3lzLm1heHNpemUgPiAweEZGRkZGRkZGIGVsc2UgNAogCkBAIC0zMzUsNiArMzIwLDEyMiBAQAogICAgIGRlZiB0ZXN0X2J5dGVhcnJheShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShieXRlYXJyYXkoc2l6ZSkpCiAKK2RlZiBDb2xsZWN0T2JqZWN0SURzKGlkcywgb2JqKToKKyAgICAiIiJDb2xsZWN0IG9iamVjdCBpZHMgc2VlbiBpbiBhIHN0cnVjdHVyZSIiIgorICAgIGlmIGlkKG9iaikgaW4gaWRzOgorICAgICAgICByZXR1cm4KKyAgICBpZHMuYWRkKGlkKG9iaikpCisgICAgaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQpKToKKyAgICAgICAgZm9yIGUgaW4gb2JqOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGUpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGspCisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgdikKKyAgICByZXR1cm4gbGVuKGlkcykKKworY2xhc3MgSW5zdGFuY2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgaW50b2JqID0gMTIzMzIxCisgICAgZmxvYXRvYmogPSAxLjIzNDUKKyAgICBzdHJvYmogPSAiYWJjZGUiKjMKKyAgICBkaWN0b2JqID0geyJoZWxsbyI6ZmxvYXRvYmosICJnb29kYnllIjpmbG9hdG9iaiwgZmxvYXRvYmo6ImhlbGxvIn0KKworICAgIGRlZiBoZWxwZXIzKHNlbGYsIHJzYW1wbGUsIHJlY3Vyc2l2ZT1GYWxzZSwgc2ltcGxlPUZhbHNlKToKKyAgICAgICAgI3dlIGhhdmUgdHdvIGluc3RhbmNlcworICAgICAgICBzYW1wbGUgPSAocnNhbXBsZSwgcnNhbXBsZSkKKworICAgICAgICBuMCA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIHNhbXBsZSkKKworICAgICAgICBzMyA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAzKQorICAgICAgICBuMyA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczMpKQorCisgICAgICAgICNzYW1lIG51bWJlciBvZiBpbnN0YW5jZXMgZ2VuZXJhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjMsIG4wKQorCisgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgICAgICAjY2FuIGNvbXBhcmUgd2l0aCB2ZXJzaW9uIDIKKyAgICAgICAgICAgIHMyID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDIpCisgICAgICAgICAgICBuMiA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczIpKQorICAgICAgICAgICAgI29sZCBmb3JtYXQgZ2VuZXJhdGVkIG1vcmUgaW5zdGFuY2VzCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobjIsIG4wKQorCisgICAgICAgICAgICAjaWYgY29tcGxleCBvYmplY3RzIGFyZSBpbiB0aGVyZSwgb2xkIGZvcm1hdCBpcyBsYXJnZXIKKyAgICAgICAgICAgIGlmIG5vdCBzaW1wbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMiksIGxlbihzMykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzMiksIGxlbihzMykpCisKKyAgICBkZWYgdGVzdEludChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5pbnRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmludG9iaiwgc2ltcGxlPVRydWUpCisKKyAgICBkZWYgdGVzdEZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmZsb2F0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5mbG9hdG9iaikKKworICAgIGRlZiB0ZXN0U3RyKHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuc3Ryb2JqKQorCisgICAgZGVmIHRlc3REaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmRpY3RvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmRpY3RvYmopCisKKyAgICBkZWYgdGVzdE1vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIHNlbGYuaGVscGVyKGNvZGUpCisgICAgICAgIHNlbGYuaGVscGVyMyhjb2RlKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGQgPSBkaWN0KHNlbGYuZGljdG9iaikKKyAgICAgICAgZFsic2VsZiJdID0gZAorICAgICAgICBzZWxmLmhlbHBlcjMoZCwgcmVjdXJzaXZlPVRydWUpCisgICAgICAgIGwgPSBbc2VsZi5kaWN0b2JqXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBzZWxmLmhlbHBlcjMobCwgcmVjdXJzaXZlPVRydWUpCisKK2NsYXNzIENvbXBhdGliaWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIHZlcnNpb24pOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoY29kZSwgdmVyc2lvbikKKyAgICAgICAgbWFyc2hhbC5sb2FkcyhkYXRhKQorCisgICAgZGVmIHRlc3QwVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDApCisKKyAgICBkZWYgdGVzdDFUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMSkKKworICAgIGRlZiB0ZXN0MlRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgyKQorCisgICAgZGVmIHRlc3QzVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDMpCisKK2NsYXNzIEludGVybmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgc3Ryb2JqID0gInRoaXMgaXMgYW4gaW50ZXJuZWQgc3RyaW5nIgorICAgIHN0cm9iaiA9IHN5cy5pbnRlcm4oc3Ryb2JqKQorCisgICAgZGVmIHRlc3RJbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMyKSwgaWQocykpCisKKyAgICBkZWYgdGVzdE5vSW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzMiksIGlkKHMpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CmluZGV4IGQ2MTFhMzEuLjRkZTRmNjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpAQCAtNTIwLDEyICs1MjAsMTIgQEAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMikKIAogICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKaW5kZXggZWU2YjE1YS4uZmZkNGY1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMzUyLDYgKzM1MiwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhMWzBdLCBiKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgYXNsaXN0ID0gbGlzdChyZXZlcnNlZChtLnRvbGlzdCgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGFzbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGxpc3QobVs6Oi0xXSkpCisKKwogIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCiAjIHdpdGggaXRlbXNpemUgPiAxLgogIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggODk5ZGY4ZC4uNmNhNWUxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMSwxMSArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RywgZ2NfY29sbGVjdCkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKICMgU2tpcCB0ZXN0IGlmIHdlIGNhbid0IGltcG9ydCBtbWFwLgogbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKICAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgogICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCiAgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgogICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgT1NFcnJvcgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKQEAgLTY3MSw3ICs2NzIsNyBAQAogICAgICAgICAjIHBhcmFtZXRlcnMgdG8gX2dldF9vc2ZoYW5kbGUuCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChzLmZpbGVubygpLCAxMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtNjgyLDE0ICs2ODMsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgdGhlIElPRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgT1NFcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CiAgICAgICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICAjIENoZWNrIG1tYXAgb2JqZWN0cyBhcmUgd2Vha3JlZmFibGUKKyAgICAgICAgbW0gPSBtbWFwLm1tYXAoLTEsIDE2KQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG1tKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG1tKQorICAgICAgICBkZWwgbW0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogY2xhc3MgTGFyZ2VNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNzA3LDcgKzcxNyw3IEBACiAgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKICAgICAgICAgICAgIGYud3JpdGUodGFpbCkKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgcmV0dXJuIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKaW5kZXggZTVhMjUyNS4uMTIzMDI5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTEsNiArMSw4IEBACiAjIFRlc3QgdGhlIG1vZHVsZSB0eXBlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0zMyw3ICszNSwxMiBAQAogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fcGFja2FnZV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKQEAgLTQxLDcgKzQ4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZwpAQCAtNDksNyArNTgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2NcdTEyMzQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKICAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KQEAgLTYxLDEwICs3MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYmFyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyfSkKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDIsCisgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsICJfX3NwZWNfXyI6IE5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCiAgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgogICAgICAgICBkZWYgZigpOgpAQCAtODksNiArMTAwLDE0IEBACiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc3Ryb3llZCwgWzFdKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfbWluaW1hbChzZWxmKToKICAgICAgICAgIyByZXBycyB3aGVuIG1vZHVsZXMgaGF2ZSBubyBfX2ZpbGVfXywgX19uYW1lX18sIG9yIF9fbG9hZGVyX18KICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xMTAsMTMgKzEyOSwxOSBAQAogICAgICAgICBtLl9fZmlsZV9fID0gJy90bXAvZm9vLnB5JwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICc/JyBmcm9tICcvdG1wL2Zvby5weSc+IikKIAorICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfbG9hZGVyX2FzX05vbmUoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQorICAgICAgICBhc3NlcnQgbS5fX2xvYWRlcl9fIGlzIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnZm9vJz4iKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgICMgbS5fX2xvYWRlcl9fLm1vZHVsZV9yZXByKCkgd2lsbCBmYWlsIGJlY2F1c2UgdGhlIG1vZHVsZSBoYXMgbm8KQEAgLTEyNiwxNSArMTUxLDE3IEBACiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gRnVsbExvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoRnVsbExvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkZ1bGxMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbW9kdWxlX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICh7fSk+Ii5mb3JtYXQobW9kdWxlX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xNjQsOCArMTkxLDI1IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9zb3VyY2Uoc2VsZik6CiAgICAgICAgIHIgPSByZXByKHVuaXR0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjI1XSwgIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTEzOl0sICJfX2luaXRfXy5weSc+IikKKyAgICAgICAgc3RhcnRzX3dpdGggPSAiPG1vZHVsZSAndW5pdHRlc3QnIGZyb20gJyIKKyAgICAgICAgZW5kc193aXRoID0gIl9faW5pdF9fLnB5Jz4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6bGVuKHN0YXJ0c193aXRoKV0sIHN0YXJ0c193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfScuZm9ybWF0KHIsIHN0YXJ0c193aXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy1sZW4oZW5kc193aXRoKTpdLCBlbmRzX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3QgZW5kIHdpdGggeyFyfScuZm9ybWF0KHIsIGVuZHNfd2l0aCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfZmluYWxpemF0aW9uX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucyBzaG91bGQgc3RpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBzaHV0ZG93bgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICJmcm9tIHRlc3QgaW1wb3J0IGZpbmFsX2EiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgbGluZXMgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxpbmVzKSwgeworICAgICAgICAgICAgYiJ4ID0gYSIsCisgICAgICAgICAgICBiInggPSBiIiwKKyAgICAgICAgICAgIGIiZmluYWxfYS54ID0gYSIsCisgICAgICAgICAgICBiImZpbmFsX2IueCA9IGIiLAorICAgICAgICAgICAgYiJsZW4gPSBsZW4iLAorICAgICAgICAgICAgYiJzaHV0aWwucm10cmVlID0gcm10cmVlIn0pCiAKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggZmViN2JkNS4uOTExNDhhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC0xNzYsNTcgKzE3NiwyOCBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQogCiBjbGFzcyBUZXN0X1N0cmVhbVdyaXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgbGVuKCdcVTAwMDEyMzQ1JykgPT0gMjogIyBVQ1MyCi0gICAgICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGMucmVzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCiAKLSAgICAgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0KLSAgICAgICAgICAgICMgUHl0aG9uIHV0Zi04IGNvZGVjIGNhbid0IGJ1ZmZlciBzdXJyb2dhdGUgcGFpcnMgeWV0LgotICAgICAgICAgICAgaWYgMDoKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLnJlc2V0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODgnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OFx4ZWRceGJkXHg4NScpCi0KLSAgICBlbHNlOiAjIFVDUzQKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyX3N0cndyaXRlKHNlbGYpOgogICAgICAgICBzID0gaW8uQnl0ZXNJTygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY0ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9yaycpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9ya3NlcnZlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGFlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnc3Bhd24nKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weSBiL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKaW5kZXggNzA2N2IxMi4uNjYzOTYxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CkBAIC0xLDcgKzEsMTAgQEAKLWltcG9ydCBzeXMKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbXBvcnRsaWIuYWJjCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKQEAgLTI4Niw5ICsyODksNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFfdGVzdC5hdHRyLCAnaW4gbW9kdWxlJykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KCpOYW1lc3BhY2VQYWNrYWdlVGVzdC5fX3N1YmNsYXNzZXNfXygpKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQppbmRleCAxZDUyNzEzLi43MWE0ZWMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXJ2ZXIuaGVscCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggMjhlZGUzNC4uYWIyZWViNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ZGF0YSA9IG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwsIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s9Y2hlY2tfdmVyc2lvbikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiICsgVEVTVERBVEFVUkwpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CmluZGV4IGY4MDk4NzYuLjI4NWVmNjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CkBAIC0yNTYsNiArMjU2LDQwIEBACiAgICAgICAgICAgICAgICAgICAgICMgZGlhbG9ncyAoIzQ4MDQpCiAgICAgICAgICAgICAgICAgICAgIG50cGF0aC5zYW1lb3BlbmZpbGUoLTEsIC0xKQogCisgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiQzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzovIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcQzpcXCIpKQorCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGQpKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgZm9sZGVyIGlzbid0IHRoZSByb290IGZvbGRlcgorICAgICAgICAgICAgIyAob3IgYW55IG90aGVyIHZvbHVtZSByb290KS4gVGhlIGRyaXZlLXJlbGF0aXZlCisgICAgICAgICAgICAjIGxvY2F0aW9ucyBiZWxvdyBjYW5ub3QgdGhlbiByZWZlciB0byBtb3VudCBwb2ludHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGRyaXZlLCBwYXRoID0gbnRwYXRoLnNwbGl0ZHJpdmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobnRwYXRoLmlzbW91bnQoZHJpdmUudXBwZXIoKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcbG9jYWxob3N0XFxjJCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQogCiBjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IG50cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CmluZGV4IDYzODQzNzAuLjQ3ODUxMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTQsNyArNCw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGlmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLm9wZW5wdHkoKSBub3QgYXZhaWxhYmxlLiIpCiAKIAogY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggZmE2MDhiOS4uYWI1OGE5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0xLDggKzEsMTAgQEAKLWltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCitweV9vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBibG9ja2VkPVsnX29wZXJhdG9yJ10pCitjX29wZXJhdG9yID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdvcGVyYXRvcicsIGZyZXNoPVsnX29wZXJhdG9yJ10pCisKIGNsYXNzIFNlcTE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CkBAIC0zMiw4ICszNCw5IEBACiAgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CiAKIAotY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBPcGVyYXRvclRlc3RDYXNlOgogICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKQEAgLTQ0LDYgKzQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMCkpCkBAIC01NCw2ICs1OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTY3LDYgKzcyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbmUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTgwLDYgKzg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9nZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwKSkKQEAgLTkwLDYgKzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCkBAIC0xMDAsMjIgKzEwOCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygtMSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuYWJzKDEpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCiAKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KCdweScsICd0aG9uJykgPT0gJ3B5dGhvbicpCkBAIC0xMjUsMTIgKzEzNywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQogCiAgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCAzKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDUpID09IDApCiAKICAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEsIE5vbmUpCkBAIC0xMzgsMzMgKzE1MiwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbNCwgMiwgMV0pCiAKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X3RydWVkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnVlZGl2KDUsIDIpID09IDIuNSkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IHJhbmdlKDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgWzQsIDMsIDIsIDFdLCAwKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbnYoNCksIC01KQogCiAgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sc2hpZnQoNSwgMSkgPT0gMTApCkBAIC0xNzIsMTYgKzE5MiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tdWwoNSwgMikgPT0gMTApCiAKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZyg1KSwgLTUpCkBAIC0xOTAsMTEgKzIxMywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZygtMCksIDApCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX29yKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQogCiAgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoNSksIDUpCkBAIC0yMDMsMTQgKzIyOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvcygtMCksIDApCiAKICAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvdygzLDUpLCAzKio1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9fcG93X18oMyw1KSwgMyoqNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQogCiAgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKQEAgLTIxOCwxMiArMjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCA1KSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGxpc3QocmFuZ2UoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQpAQCAtMjMyLDExICsyNjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgNCwgMikKIAogICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgpAQCAtMjQ4LDExICsyNzgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvcikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKIAogICAgIGRlZiB0ZXN0X2lzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBiID0gJ3h5enBkcScKICAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCkBAIC0yNjAsNiArMjkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKIAogICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfbm90KQpAQCAtMjY3LDYgKzMwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMzE2LDYgKzM1MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJywgJ2pvaG5zb24nKSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1nZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9ICdBQkNERScKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCkBAIC0zNTAsMTIgKzM4NSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoMiwgJ3gnLCA1KSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyBhcmdzWzFdCiAgICAgICAgICAgICBkZWYgYmFyKHNlbGYsIGY9NDIpOgogICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBkZWYgYmF6KCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2RzWyduYW1lJ10sIGt3ZHNbJ3NlbGYnXQogICAgICAgICBhID0gQSgpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCkBAIC0zNjYsOCArNDA0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgYSkKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJywgZj01KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDUpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JheicsIG5hbWU9J3NwYW0nLCBzZWxmPSdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ3NwYW0nLCAnZWdncycpKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pYWRkX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFkZCIKICAgICAgICAgICAgIGRlZiBfX2lhbmRfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpYW5kIgpAQCAtMzk2LDM3ICs0MzcsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pdHJ1ZWRpdiAoYywgNSksICJpdHJ1ZWRpdiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXhvciAgICAgKGMsIDUpLCAiaXhvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWNvbmNhdCAgKGMsIGMpLCAiaWFkZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pYWRkX18gICAgIChjLCA1KSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFuZF9fICAgICAoYywgNSksICJpYW5kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lmbG9vcmRpdl9fKGMsIDUpLCAiaWZsb29yZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lsc2hpZnRfXyAgKGMsIDUpLCAiaWxzaGlmdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbW9kX18gICAgIChjLCA1KSwgImltb2QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW11bF9fICAgICAoYywgNSksICJpbXVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lvcl9fICAgICAgKGMsIDUpLCAiaW9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lwb3dfXyAgICAgKGMsIDUpLCAiaXBvdyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcnNoaWZ0X18gIChjLCA1KSwgImlyc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXN1Yl9fICAgICAoYywgNSksICJpc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l0cnVlZGl2X18gKGMsIDUpLCAiaXRydWVkaXYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXhvcl9fICAgICAoYywgNSksICJpeG9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ljb25jYXRfXyAgKGMsIGMpLCAiaWFkZCIpCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBpbXBvcnQgc3lzCi0gICAgdGVzdF9jbGFzc2VzID0gKAotICAgICAgICBPcGVyYXRvclRlc3RDYXNlLAotICAgICkKKyAgICBkZWYgdGVzdF9sZW5ndGhfaGludChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgdHlwZShzZWxmLnZhbHVlKSBpcyB0eXBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLnZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKIAotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChbXSwgMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoaXRlcihbMSwgMiwgM10pKSwgMykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoMikpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTm90SW1wbGVtZW50ZWQpLCA0KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKFR5cGVFcnJvciksIDEyKSwgMTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoImFiYyIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWCgtMikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWChMb29rdXBFcnJvcikpCisKKyAgICBkZWYgdGVzdF9kdW5kZXJfaXNfb3JpZ2luYWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKworICAgICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIGRpcihvcGVyYXRvcikgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpXQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIG9yaWcgPSBnZXRhdHRyKG9wZXJhdG9yLCBuYW1lKQorICAgICAgICAgICAgZHVuZGVyID0gZ2V0YXR0cihvcGVyYXRvciwgJ19fJyArIG5hbWUuc3RyaXAoJ18nKSArICdfXycsIE5vbmUpCisgICAgICAgICAgICBpZiBkdW5kZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdW5kZXIsIG9yaWcpCisKK2NsYXNzIFB5T3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gcHlfb3BlcmF0b3IKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19vcGVyYXRvciwgJ3JlcXVpcmVzIF9vcGVyYXRvcicpCitjbGFzcyBDT3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gY19vcGVyYXRvcgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQppbmRleCA3OGRlMjc4Li45NDczMDExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTczMCw3ICs3MzAsNyBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X2FuZF9sb25nX29wdGlvbl9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAieHl6IiwgIi0tZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYiIsICIxMjMiLCAiLS1mb28iLCAiYmF6Il0sCkBAIC03NDAsMTUgKzc0MCwxNSBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9vbmVfcG9zaXRpb25hbF9hcmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJmb28iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImJhciJdKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2NvbnN1bWVzX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKQogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICItLSIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9qb2luZWRfYW5kX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcy5weSBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKaW5kZXggNjAxYzZiMi4uMWZmYTdkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zLnB5CkBAIC0yNCw2ICsyNCw5IEBACiBpbXBvcnQgc3RhdAogaW1wb3J0IGxvY2FsZQogaW1wb3J0IGNvZGVjcworaW1wb3J0IGRlY2ltYWwKK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zMiw2ICszNSwxMCBAQAogICAgIGltcG9ydCByZXNvdXJjZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHJlc291cmNlID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZjbnRsID0gTm9uZQogCiBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCkBAIC0yNTYsNiArMjYzLDEzIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKGZuYW1lKQogCisgICAgZGVmIHRlc3Rfc3RhdF9yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInXHgwM2Nvc1xuc3RhdF9yZXN1bHRcbicsIHApCisgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdW5waWNrbGVkKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSwgJ3Rlc3QgbmVlZHMgb3Muc3RhdHZmcygpJykKICAgICBkZWYgdGVzdF9zdGF0dmZzX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTI2Myw3ICsyNzcsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUwogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCkBAIC0zMDAsNiArMzE0LDIxIEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIG9zLnN0YXR2ZnMoKSIpCisgICAgZGVmIHRlc3Rfc3RhdHZmc19yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKKworICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXR2ZnNfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKICAgICAgICAgZGVsdGEgPSAxMDAwMDAwCiAgICAgICAgIHN0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKQEAgLTQ3OCw5ICs1MDcsOSBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IGFuIG9wZW4gZmlsZSBjYW4gYmUgc3RhdCdlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAyOiAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAotICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBwYXNzICMgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2Fubm90IHJ1biB0ZXN0CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG5vdCBzdGF0IHBhZ2VmaWxlLnN5cyIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKQEAgLTg3Niw2ICs5MDUsMTcgQEAKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgbW9kZT1tb2RlLCBleGlzdF9vaz1UcnVlKQogICAgICAgICBvcy51bWFzayhvbGRfbWFzaykKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG93bicpLCAndGVzdCBuZWVkcyBvcy5jaG93bicpCisgICAgZGVmIHRlc3RfY2hvd25fdWlkX2dpZF9hcmd1bWVudHNfbXVzdF9iZV9pbmRleChzZWxmKToKKyAgICAgICAgc3RhdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHVpZCA9IHN0YXQuc3RfdWlkCisgICAgICAgIGdpZCA9IHN0YXQuc3RfZ2lkCisgICAgICAgIGZvciB2YWx1ZSBpbiAoLTEuMCwgLTFqLCBkZWNpbWFsLkRlY2ltYWwoLTEpLCBmcmFjdGlvbnMuRnJhY3Rpb24oLTIsIDIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB2YWx1ZSwgZ2lkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHVpZCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCB1aWQsIGdpZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCAtMSwgLTEpKQorCiAgICAgZGVmIHRlc3RfZXhpc3Rfb2tfc19pc2dpZF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdkaXIxJykKICAgICAgICAgU19JU0dJRCA9IHN0YXQuU19JU0dJRApAQCAtMTEzMywyNyArMTE3MywyNyBAQAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnJlbmFtZSwgc3VwcG9ydC5URVNURk4sIHN1cHBvcnQuVEVTVEZOKyIuYmFrIikKIAogICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaGRpciwgc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MudXRpbWUsIHN1cHBvcnQuVEVTVEZOLCBOb25lKQogCiAgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaG1vZCwgc3VwcG9ydC5URVNURk4sIDApCiAKIGNsYXNzIFRlc3RJbnZhbGlkRkQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNpbmdsZXMgPSBbImZjaGRpciIsICJkdXAiLCAiZmRvcGVuIiwgImZkYXRhc3luYyIsICJmc3RhdCIsCkBAIC0xMjc4LDQxICsxMzE4LDU3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXR1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHVpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0dWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0Z2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0Z2lkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0Z2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldGV1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0ZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRldWlkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRldWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0ZWdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGVnaWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHJldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQorICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZWdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDE8PDMyLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMTw8MzIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCisgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKKyAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQorCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiUG9zaXggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUGVwMzgzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE1MDIsNiArMTU1OCw1MiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJMaXN0ZGlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgbGlzdGRpciBvbiBXaW5kb3dzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGRpcl9uYW1lID0gJ1NVQiVkJyAlIGkKKyAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBkaXJfbmFtZSkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9ICdGSUxFJWQnICUgaQorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBmaWxlX25hbWUpCisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJfcGF0aCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJJJ20gJXMgYW5kIHByb3VkIG9mIGl0LiBCbGFtZSB0ZXN0X29zLlxuIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocy5leHRlbmQoW2Rpcl9uYW1lLCBmaWxlX25hbWVdKQorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuc29ydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX25vX2V4dGVuZGVkX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2hlbiB0aGUgcGF0aCBpcyBub3QgYW4gImV4dGVuZGVkIiBwYXRoLiIiIgorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKSkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggc3RhcnRzIHdpdGggJ1xcXFw/XFwnLiIiIgorICAgICAgICAjIFNlZTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Nyh2PXZzLjg1KS5hc3B4I21heHBhdGgKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHBhdGggPSAnXFxcXD9cXCcgKyBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBwYXRoID0gYidcXFxcP1xcJyArIG9zLmZzZW5jb2RlKG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogY2xhc3MgV2luMzJTeW1saW5rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZpbGVsaW5rID0gJ2ZpbGVsaW5rdGVzdCcKQEAgLTIxNjYsNiArMjI2OCwxOTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKK2NsYXNzIE9TRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcyA9IFtdCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMgPSBbXQorICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVjb2RlZCA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKFN0cihkZWNvZGVkKSkKKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZWQgPSBvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMuYXBwZW5kKGVuY29kZWQpCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChtZW1vcnl2aWV3KGVuY29kZWQpKQorCisgICAgICAgIHNlbGYuZmlsZW5hbWVzID0gc2VsZi5ieXRlc19maWxlbmFtZXMgKyBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzCisKKyAgICBkZWYgdGVzdF9vc2Vycm9yX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmdW5jcyA9IFsKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2hkaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2htb2QsIDBvNzc3KSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubHN0YXQsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mub3Blbiwgb3MuT19SRE9OTFkpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5ybWRpciwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5zdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnVubGluaywpLAorICAgICAgICBdCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlbmFtZSwgYiJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlcGxhY2UsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTY0MTQ6IERvbid0IHRlc3QgdW5kZWNvZGFibGUgbmFtZXMgd2l0aCBsaXN0ZGlyKCkKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgYSBXaW5kb3dzIGJ1Zy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBXaXRoIHRoZSBBTlNJIGNvZGUgcGFnZSA5MzIsIG9zLmxpc3RkaXIoYidceGU3JykgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgIyBlbXB0eSBsaXN0IChpbnN0ZWFkIG9mIGZhaWxpbmcpLCB3aGVyZWFzIG9zLmxpc3RkaXIoYidceGZmJykKKyAgICAgICAgICAgICAgICAjIHJhaXNlcyBhIEZpbGVOb3RGb3VuZEVycm9yLiBJdCBsb29rcyBsaWtlIGEgV2luZG93cyBidWc6CisgICAgICAgICAgICAgICAgIyBiJ1x4ZTcnIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgRmluZEZpcnN0RmlsZUEoYidceGU3JykKKyAgICAgICAgICAgICAgICAjIGZhaWxzIHdpdGggRVJST1JfRklMRV9OT1RfRk9VTkQgKDIpLCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgIyBFUlJPUl9QQVRIX05PVF9GT1VORCAoMykuCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdGRpciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVuYW1lLCAiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG93biIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInRydW5jYXRlIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy50cnVuY2F0ZSwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaGZsYWdzLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaHJvb3QiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNocm9vdCwpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MubGluaywgYiJkc3QiKSkKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGluaywgImRzdCIpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGlzdHhhdHRyIik6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdHhhdHRyLCksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5nZXR4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc2V0eGF0dHIsICJ1c2VyLnRlc3QiLCBiJ3VzZXInKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbW92ZXhhdHRyLCAidXNlci50ZXN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2htb2QsIDBvNzc3KSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInJlYWRsaW5rIik6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lcywgZnVuYywgKmZ1bmNfYXJncyBpbiBmdW5jczoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmMobmFtZSwgKmZ1bmNfYXJncykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLmZpbGVuYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHRocm93biBieSB7fSIuZm9ybWF0KGZ1bmMpKQorCitjbGFzcyBDUFVDb3VudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jcHVfY291bnQoc2VsZik6CisgICAgICAgIGNwdXMgPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBjcHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNwdXMsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjcHVzLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENQVXMiKQorCisKK2NsYXNzIEZESW5oZXJpdGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X2dldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAncGlwZScpLCAibmVlZCBvcy5waXBlKCkiKQorICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcmZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHdmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUocmZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHdmZCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBmZDEgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDEpCisKKyAgICAgICAgZmQyID0gb3MuZHVwKGZkMSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2R1cDInKSwgIm5lZWQgb3MuZHVwMigpIikKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorCisgICAgICAgICMgaW5oZXJpdGFibGUgYnkgZGVmYXVsdAorICAgICAgICBmZDIgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQyKSwgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKworICAgICAgICAjIGZvcmNlIG5vbi1pbmhlcml0YWJsZQorICAgICAgICBmZDMgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQzLCBpbmhlcml0YWJsZT1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMyksIEZhbHNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ29wZW5wdHknKSwgIm5lZWQgb3Mub3BlbnB0eSgpIikKKyAgICBkZWYgdGVzdF9vcGVucHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXJfZmQsIHNsYXZlX2ZkID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbWFzdGVyX2ZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHNsYXZlX2ZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoc2xhdmVfZmQpLCBGYWxzZSkKKworCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKQEAgLTIxODMsNiArMjQ3Niw3IEBACiAgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCiAgICAgICAgIFBlcDM4M1Rlc3RzLAogICAgICAgICBXaW4zMktpbGxUZXN0cywKKyAgICAgICAgV2luMzJMaXN0ZGlyVGVzdHMsCiAgICAgICAgIFdpbjMyU3ltbGlua1Rlc3RzLAogICAgICAgICBOb25Mb2NhbFN5bWxpbmtUZXN0cywKICAgICAgICAgRlNFbmNvZGluZ1Rlc3RzLApAQCAtMjE5NSw3ICsyNDg5LDEwIEBACiAgICAgICAgIEV4dGVuZGVkQXR0cmlidXRlVGVzdHMsCiAgICAgICAgIFdpbjMyRGVwcmVjYXRlZEJ5dGVzQVBJLAogICAgICAgICBUZXJtc2l6ZVRlc3RzLAorICAgICAgICBPU0Vycm9yVGVzdHMsCiAgICAgICAgIFJlbW92ZURpcnNUZXN0cywKKyAgICAgICAgQ1BVQ291bnRUZXN0cywKKyAgICAgICAgRkRJbmhlcml0YW5jZVRlc3RzLAogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CmluZGV4IDM5MDhhMDUuLmM5ZTJhMjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBwbGF5X3NvdW5kX2ZpbGUoc2VsZiwgZGF0YSwgcmF0ZSwgc3NpemUsIG5jaGFubmVscyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCkBAIC0xOTAsNyArMTkwLDcgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CiAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgIGV4Y2VwdCAob3NzYXVkaW9kZXYuZXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKKyAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBPU0Vycm9yKSBhcyBtc2c6CiAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmMDg1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkKQEAgLTAsMCArMSwxNjc2IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwYXRobGliCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitURVNURk4gPSBzdXBwb3J0LlRFU1RGTgorCit0cnk6CisgICAgaW1wb3J0IGdycCwgcHdkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3JwID0gcHdkID0gTm9uZQorCisKK2NsYXNzIF9CYXNlRmxhdm91clRlc3Qob2JqZWN0KToKKworICAgIGRlZiBfY2hlY2tfcGFyc2VfcGFydHMoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIucGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICBhbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisgICAgICAgIGFjdHVhbCA9IGYoW3gucmVwbGFjZSgnLycsIHNlcCkgZm9yIHggaW4gYXJnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBhbHRzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICAjIFVuYW5jaG9yZWQgcGFydHMKKyAgICAgICAgY2hlY2soW10sICAgICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWydhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhLyddLCAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2InXSwgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICAjIEV4cGFuc2lvbgorICAgICAgICBjaGVjayhbJ2EvYiddLCAgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYS9iLyddLCAgICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYycsICdkJ10sICAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBDb2xsYXBzaW5nIGFuZCBzdHJpcHBpbmcgZXhjZXNzIHNsYXNoZXMKKyAgICAgICAgY2hlY2soWydhJywgJ2IvL2MnLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYy8nLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBFbGltaW5hdGluZyBzdGFuZGFsb25lIGRvdHMKKyAgICAgICAgY2hlY2soWycuJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWycuJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnLicsICcuJ10sICAgICAgKCcnLCAnJywgWydhJ10pKQorICAgICAgICAjIFRoZSBmaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnL2EvYiddLCAgICAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYScsICdiJ10sICAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy9hLycsICdiJ10sICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgICMgSWdub3JpbmcgcGFydHMgYmVmb3JlIGFuIGFuY2hvcmVkIHBhcnQKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJ2MnXSwgICAgICgnJywgc2VwLCBbc2VwLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnL2InLCAnL2MnXSwgICAgKCcnLCBzZXAsIFtzZXAsICdjJ10pKQorCisKK2NsYXNzIFBvc2l4Rmxhdm91clRlc3QoX0Jhc2VGbGF2b3VyVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGZsYXZvdXIgPSBwYXRobGliLl9wb3NpeF9mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIENvbGxhcHNpbmcgb2YgZXhjZXNzIGxlYWRpbmcgc2xhc2hlcywgZXhjZXB0IGZvciB0aGUgZG91YmxlLXNsYXNoCisgICAgICAgICMgc3BlY2lhbCBjYXNlLgorICAgICAgICBjaGVjayhbJy8vYScsICdiJ10sICAgICAgICAgICAgICgnJywgJy8vJywgWycvLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vYScsICdiJ10sICAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vL2EnLCAnYiddLCAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgICMgUGF0aHMgd2hpY2ggbG9vayBsaWtlIE5UIHBhdGhzIGFyZW4ndCB0cmVhdGVkIHNwZWNpYWxseQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzphJ10pKQorICAgICAgICBjaGVjayhbJ2M6XFxhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzpcXGEnXSkpCisgICAgICAgIGNoZWNrKFsnXFxhJ10sICAgICAgICAgICAgICAgICAgKCcnLCAnJywgWydcXGEnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iJyksICgnJywgJycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhL2IvJyksICgnJywgJycsICdhL2IvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EnKSwgKCcnLCAnLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2IvJyksICgnJywgJy8nLCAnYS9iLycpKQorICAgICAgICAjIFRoZSByb290IGlzIGNvbGxhcHNlZCB3aGVuIHRoZXJlIGFyZSByZWR1bmRhbnQgc2xhc2hlcworICAgICAgICAjIGV4Y2VwdCB3aGVuIHRoZXJlIGFyZSBleGFjdGx5IHR3byBsZWFkaW5nIHNsYXNoZXMsIHdoaWNoCisgICAgICAgICMgaXMgYSBzcGVjaWFsIGNhc2UgaW4gUE9TSVguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy9hJyksICgnJywgJy8vJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOi9hL2InKSwgKCcnLCAnJywgJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcL2EvYicpLCAoJycsICcnLCAnXFwvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJycsICdcXGFcXGInKSkKKworCitjbGFzcyBOVEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fd2luZG93c19mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIEZpcnN0IHBhcnQgaXMgYW5jaG9yZWQKKyAgICAgICAgY2hlY2soWydjOiddLCAgICAgICAgICAgICAgICAgICAoJ2M6JywgJycsIFsnYzonXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXCddLCAgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXCddLCAgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnXSkpCisgICAgICAgIGNoZWNrKFsnYzphJ10sICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6JywgJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXGEnXSwgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCcsICdhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdhJ10pKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFxhXFxiJ10sICAgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXGFcXGJcXCddLCAgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcYVxcYlxcYyddLCAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJywgJ2MnXSkpCisgICAgICAgICMgU2Vjb25kIHBhcnQgaXMgYW5jaG9yZWQsIHNvIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgaWdub3JlZAorICAgICAgICBjaGVjayhbJ2EnLCAnWjpiJywgJ2MnXSwgICAgICAgICgnWjonLCAnJywgWydaOicsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcYicsICdjJ10sICAgICAgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdcXGInLCAnYyddLCAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJywgJ2InLCAnYyddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjJywgJ2QnXSwgICAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcXFxiXFxcXGNcXCcsICdkXFwnXSwgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjXFxcXCcsICdkJ10sICgnXFxcXGJcXGMnLCAnXFwnLCBbJ1xcXFxiXFxjXFwnLCAnZCddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFw/XFxjOlxcJ10sICAgICAgICAgICgnXFxcXD9cXGM6JywgJ1xcJywgWydcXFxcP1xcYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcP1xcYzpcXGEnXSwgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnLCAnYSddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBVTkMgcGF0aHMgKGZvcm1hdCBpcyAiXFw/XFVOQ1xzZXJ2ZXJcc2hhcmUiKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGMnXSwgICAgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJ10pKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGNcXGQnXSwgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJywgJ2QnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYVxcYicpLCAoJycsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOmFcXGInKSwgKCdjOicsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxhXFxiJyksICgnYzonLCAnXFwnLCAnYVxcYicpKQorICAgICAgICAjIFJlZHVuZGFudCBzbGFzaGVzIGluIHRoZSByb290IGFyZSBjb2xsYXBzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXFxcYS9iJyksICgnJywgJ1xcJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXGEnKSwgKCdjOicsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzpcXFxcXFxhL2InKSwgKCdjOicsICdcXCcsICdhL2InKSkKKyAgICAgICAgIyBWYWxpZCBVTkMgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYicpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhXFxiXFwnKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcY1xcZCcpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJ2NcXGQnKSkKKyAgICAgICAgIyBUaGVzZSBhcmUgbm9uLVVOQyBwYXRocyAoYWNjb3JkaW5nIHRvIG50cGF0aC5weSBhbmQgdGVzdF9udHBhdGgpCisgICAgICAgICMgSG93ZXZlciwgY29tbWFuZC5jb20gc2F5cyBzdWNoIHBhdGhzIGFyZSBpbnZhbGlkLCBzbyBpdCdzCisgICAgICAgICMgZGlmZmljdWx0IHRvIGtub3cgd2hhdCB0aGUgcmlnaHQgc2VtYW50aWNzIGFyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGFcXGInKSwgKCcnLCAnXFwnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhJyksICgnJywgJ1xcJywgJ2EnKSkKKworCisjCisjIFRlc3RzIGZvciB0aGUgcHVyZSBjbGFzc2VzCisjCisKK2NsYXNzIF9CYXNlUHVyZVBhdGhUZXN0KG9iamVjdCk6CisKKyAgICAjIGtleXMgYXJlIGNhbm9uaWNhbCBwYXRocywgdmFsdWVzIGFyZSBsaXN0IG9mIHR1cGxlcyBvZiBhcmd1bWVudHMKKyAgICAjIHN1cHBvc2VkIHRvIHByb2R1Y2UgZXF1YWwgcGF0aHMKKyAgICBlcXVpdmFsZW5jZXMgPSB7CisgICAgICAgICdhL2InOiBbCisgICAgICAgICAgICAoJ2EnLCAnYicpLCAoJ2EvJywgJ2InKSwgKCdhJywgJ2IvJyksICgnYS8nLCAnYi8nKSwKKyAgICAgICAgICAgICgnYS9iLycsKSwgKCdhLy9iJywpLCAoJ2EvL2IvLycsKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcnLCAnYScsICdiJyksICgnYScsICcnLCAnYicpLCAoJ2EnLCAnYicsICcnKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICcvYi9jL2QnOiBbCisgICAgICAgICAgICAoJ2EnLCAnL2IvYycsICdkJyksICgnYScsICcvLy9iLy9jJywgJ2QvJyksCisgICAgICAgICAgICAoJy9hJywgJy9iL2MnLCAnZCcpLAorICAgICAgICAgICAgIyBlbXB0eSBjb21wb25lbnRzIGdldCByZW1vdmVkCisgICAgICAgICAgICAoJy8nLCAnYicsICcnLCAnYy9kJyksICgnLycsICcnLCAnYi9jL2QnKSwgKCcnLCAnL2IvYy9kJyksCisgICAgICAgICAgICBdLAorICAgIH0KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5mbGF2b3VyID0gcC5fZmxhdm91cgorICAgICAgICBzZWxmLnNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgc2VsZi5hbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCBQKQorICAgICAgICBQKCdhJywgJ2InLCAnYycpCisgICAgICAgIFAoJy9hJywgJ2InLCAnYycpCisgICAgICAgIFAoJ2EvYi9jJykKKyAgICAgICAgUCgnL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSksIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSwgJ2InKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksIFAoJ2InKSksIFAoJ2EvYicpKQorCisgICAgZGVmIHRlc3Rfam9pbl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBwKSwgdHlwZShwKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJywgJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aChQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBwID0gcCAvICdjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAgLyAnYy9kJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcCAvICdjJyAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gJ2MnIC8gcCAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdjL2EvYi9kJykpCisgICAgICAgIHBwID0gcCAvIFAoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBwcCA9IHAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiBfY2hlY2tfc3RyKHNlbGYsIGV4cGVjdGVkLCBhcmdzKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgZXhwZWN0ZWQucmVwbGFjZSgnLycsIHNlbGYuc2VwKSkKKworICAgIGRlZiB0ZXN0X3N0cl9jb21tb24oc2VsZik6CisgICAgICAgICMgQ2Fub25pY2FsaXplZCBwYXRocyByb3VuZHRyaXAKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19zdHIocGF0aHN0ciwgKHBhdGhzdHIsKSkKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBlbXB0eSBwYXRoCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cignLicsICgnJywpKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBzdHIoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfcG9zaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAocGF0aHN0cikuYXNfcG9zaXgoKSwgcGF0aHN0cikKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBmb3IgYXNfcG9zaXgoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfY29tbW9uKHNlbGYpOgorICAgICAgICBzZXAgPSBvcy5mc2VuY29kZShzZWxmLnNlcCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoUCgnYS9iJykpLCBiJ2EnICsgc2VwICsgYidiJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnYScpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCkuYXNfdXJpKCkKKworICAgIGRlZiB0ZXN0X3JlcHJfY29tbW9uKHNlbGYpOgorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscyhwYXRoc3RyKQorICAgICAgICAgICAgY2xzbmFtZSA9IHAuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICByID0gcmVwcihwKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIGlzIGluIHRoZSBmb3JtIENsYXNzTmFtZSgiZm9yd2FyZC1zbGFzaGVzIHBhdGgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aChjbHNuYW1lICsgJygnKSwgcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcpJyksIHIpCisgICAgICAgICAgICBpbm5lciA9IHJbbGVuKGNsc25hbWUpICsgMSA6IC0xXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGlubmVyKSwgcC5hc19wb3NpeCgpKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIHJvdW5kdHJpcHMKKyAgICAgICAgICAgIHEgPSBldmFsKHIsIHBhdGhsaWIuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHEuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihxKSwgcikKKworICAgIGRlZiB0ZXN0X2VxX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLCBQKCdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYS9iJyksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksICIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcuJykKKyAgICAgICAgIyBTaW1wbGUgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhL2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi9weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCdiLnB5JykpCisgICAgICAgICMgV2lsY2FyZCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5YycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi4vcHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9kL2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9kYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYWIvYy5weS9kJykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCBhYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJy9hLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYWIucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IvYy5weScpLm1hdGNoKCcvYS8qLnB5JykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgT3JkZXJpbmcgaXMgdHVwbGUtYWxpa2UKKyAgICAgICAgZGVmIGFzc2VydExlc3MoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihiLCBhKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgYSA9IFAoJ2EnKQorICAgICAgICBiID0gUCgnYS9iJykKKyAgICAgICAgYyA9IFAoJ2FiYycpCisgICAgICAgIGQgPSBQKCdiJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnL2EnKQorICAgICAgICBiID0gUCgnL2EvYicpCisgICAgICAgIGMgPSBQKCcvYWJjJykKKyAgICAgICAgZCA9IFAoJy9iJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFAoKSA8IHt9CisKKyAgICBkZWYgdGVzdF9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgICMgYHBhcnRzYCByZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdhJywgJ2InKSkKKyAgICAgICAgIyBUaGUgb2JqZWN0IGdldHMgcmV1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGFydHMsIHAucGFydHMpCisgICAgICAgICMgV2hlbiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSwgdGhlIGFuY2hvciBpcyBhIHNlcGFyYXRlIHBhcnQKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKHNlcCwgJ2EnLCAnYicpKQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVuY2VzKHNlbGYpOgorICAgICAgICBmb3IgaywgdHVwbGVzIGluIHNlbGYuZXF1aXZhbGVuY2VzLml0ZW1zKCk6CisgICAgICAgICAgICBjYW5vbiA9IGsucmVwbGFjZSgnLycsIHNlbGYuc2VwKQorICAgICAgICAgICAgcG9zaXggPSBrLnJlcGxhY2Uoc2VsZi5zZXAsICcvJykKKyAgICAgICAgICAgIGlmIGNhbm9uICE9IHBvc2l4OgorICAgICAgICAgICAgICAgIHR1cGxlcyA9IHR1cGxlcyArIFsKKyAgICAgICAgICAgICAgICAgICAgdHVwbGUocGFydC5yZXBsYWNlKCcvJywgc2VsZi5zZXApIGZvciBwYXJ0IGluIHQpCisgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHR1cGxlcworICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgdHVwbGVzLmFwcGVuZCgocG9zaXgsICkpCisgICAgICAgICAgICBwY2Fub24gPSBzZWxmLmNscyhjYW5vbikKKyAgICAgICAgICAgIGZvciB0IGluIHR1cGxlczoKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5jbHMoKnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwY2Fub24sICJmYWlsZWQgd2l0aCBhcmdzIHt9Ii5mb3JtYXQodCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHApLCBoYXNoKHBjYW5vbikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIGNhbm9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hc19wb3NpeCgpLCBwb3NpeCkKKworICAgIGRlZiB0ZXN0X3BhcmVudF9jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIHAgPSBQKCcvYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorCisgICAgZGVmIHRlc3RfcGFyZW50c19jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzJdLCBQKCcuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnYS9iJyksIFAoJ2EnKSwgUCgnLicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclstMV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXJbMF0gPSBwCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCcvYS9iJyksIFAoJy9hJyksIFAoJy8nKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbM10KKworICAgIGRlZiB0ZXN0X2RyaXZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuZHJpdmUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuZHJpdmUsICcnKQorCisgICAgZGVmIHRlc3Rfcm9vdF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5yb290LCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsIHNlcCkKKworICAgIGRlZiB0ZXN0X2FuY2hvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLmFuY2hvciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYW5jaG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmFuY2hvciwgc2VwKQorCisgICAgZGVmIHRlc3RfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5JykubmFtZSwgJ2IucHknKQorCisgICAgZGVmIHRlc3Rfc3VmZml4X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlc19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisKKyAgICBkZWYgdGVzdF9zdGVtX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN0ZW0sICcuaGcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX25hbWUsICdkLnhtbCcpCisKKyAgICBkZWYgdGVzdF93aXRoX3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX3N1ZmZpeCwgJy5neicpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV90b19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnJlbGF0aXZlX3RvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhL2InKSksIFAoKSkKKyAgICAgICAgIyBXaXRoIHNldmVyYWwgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EnLCAnYicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hJykpCisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8nKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnL2EnKSksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hL2InKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhJykpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHAsIHByb3RvKQorICAgICAgICAgICAgcHAgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwcC5fX2NsYXNzX18sIHAuX19jbGFzc19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwcCksIGhhc2gocCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwcCksIHN0cihwKSkKKworCitjbGFzcyBQdXJlUG9zaXhQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aAorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvLy9hL2InKS5yb290LCAnLycpCisgICAgICAgICMgUE9TSVggc3BlY2lhbCBjYXNlIGZvciB0d28gbGVhZGluZyBzbGFzaGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5yb290LCAnLy8nKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCdBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYScpLCBQKCcvLy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EnKSwgUCgnLy9hJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IlI2MnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iJTI1JTIzYycpCisKKyAgICBkZWYgdGVzdF9hc191cmlfbm9uX2FzY2lpKHNlbGYpOgorICAgICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGVfZnJvbV9ieXRlcworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZnNlbmNvZGUoJ1x4ZTknKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiXFx4ZTkgY2Fubm90IGJlIGVuY29kZWQgdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2JceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly8vYS9iJyArIHF1b3RlX2Zyb21fYnl0ZXMob3MuZnNlbmNvZGUoJ1x4ZTknKSkpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnQS5weScpLm1hdGNoKCdhLlBZJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYicpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9kZXYvY29uL1BSTi9OVUwnKS5pc19yZXNlcnZlZCgpKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2EvYicpKQorICAgICAgICBwcCA9IFAoJy9hJykuam9pbnBhdGgoJy8vYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYycpKQorICAgICAgICBwcCA9IFAoJy8vYScpLmpvaW5wYXRoKCcvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAgLyAnYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9hL2InKSkKKyAgICAgICAgcHAgPSBQKCcvYScpIC8gJy8vYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9jJykpCisgICAgICAgIHBwID0gUCgnLy9hJykgLyAnL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoCisKKyAgICBlcXVpdmFsZW5jZXMgPSBfQmFzZVB1cmVQYXRoVGVzdC5lcXVpdmFsZW5jZXMuY29weSgpCisgICAgZXF1aXZhbGVuY2VzLnVwZGF0ZSh7CisgICAgICAgICdjOmEnOiBbICgnYzonLCAnYScpLCAoJ2M6JywgJ2EvJyksICgnLycsICdjOicsICdhJykgXSwKKyAgICAgICAgJ2M6L2EnOiBbCisgICAgICAgICAgICAoJ2M6LycsICdhJyksICgnYzonLCAnLycsICdhJyksICgnYzonLCAnL2EnKSwKKyAgICAgICAgICAgICgnL3onLCAnYzovJywgJ2EnKSwgKCcvL3gveScsICdjOi8nLCAnYScpLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJy8vYS9iLyc6IFsgKCcvL2EvYicsKSBdLAorICAgICAgICAnLy9hL2IvYyc6IFsKKyAgICAgICAgICAgICgnLy9hL2InLCAnYycpLCAoJy8vYS9iLycsICdjJyksCisgICAgICAgICAgICBdLAorICAgIH0pCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ2FcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJ2M6L2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdjOlxcYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjXFxkJykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2Q6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYzphL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EvYicpLCBQKCdjOi9hL2InKSkKKyAgICAgICAgIyBDYXNlLWluc2Vuc2l0aXZpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnQzphL0InKSwgUCgnYzpBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL1NvbWUvU0hBUkUvYS9CJyksIFAoJy8vc29tRS9zaGFyZS9BL2InKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCcvYS9iJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6YS9iJykuYXNfdXJpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiUyNSUyM2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYlx4ZTknKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iJUMzJUE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvJykuYXNfdXJpKCksICdmaWxlOi8vc29tZS9zaGFyZS8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IuYycpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vc29tZS9zaGFyZS9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlL2EvYiUjY1x4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iJTI1JTIzYyVDMyVBOScpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIEFic29sdXRlIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnZDovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpICAjIHdyb25nIGRyaXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJ2M6LyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgICMgVU5DIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL3NvbWUvc2hhcmUvYS5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL290aGVyL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL3NvbWUvc2hhcmUvYS9iLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdCLnB5JykubWF0Y2goJ2IuUFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvQi5QeScpLm1hdGNoKCdDOi9BLyoucFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vU29tZS9TaGFyZS9CLlB5JykubWF0Y2goJy8vc29tRS9zaGFyRS8qLnBZJykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIGRlZiBhc3NlcnRPcmRlcmVkRXF1YWwoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYiwgYSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOkEvYicpCisgICAgICAgIHEgPSBQKCdDOmEvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorICAgICAgICBwID0gUCgnLy9zb21lL1NoYXJlL0EvYicpCisgICAgICAgIHEgPSBQKCcvL1NvbWUvU0hBUkUvYS9CJykKKyAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA+IHEpCisKKyAgICBkZWYgdGVzdF9wYXJ0cyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOmEvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBwID0gUCgnYzovYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsICgnYzpcXCcsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ1xcXFxhXFxiXFwnLCAnYycsICdkJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnejphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnejovYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLy9hL2InKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnejonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6OmEnKSwgUCgnejonKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKyAgICAgICAgcCA9IFAoJ3o6L2EvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJ3o6L2EnKSwgUCgnejovJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnLy9hL2IvYycpLCBQKCcvL2EvYicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorCisgICAgZGVmIHRlc3RfZHJpdmUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5kcml2ZSwgJ1xcXFxhXFxiJykKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLnJvb3QsICdcXCcpCisKKyAgICBkZWYgdGVzdF9hbmNob3Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLmFuY2hvciwgJ2M6XFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iLycpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorCisgICAgZGVmIHRlc3RfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5uYW1lLCAnYi5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykubmFtZSwgJ2InKQorCisgICAgZGVmIHRlc3Rfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc3RlbShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdGVtLCAnLmhnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzphL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzovJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9uYW1lLCAnZC54bWwnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXgoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6YS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOi9hL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcuJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9zdWZmaXgsICcuZ3onKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG8oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzphL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzonKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzphJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOmEvYicpKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzphL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOmEvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hJykpCisgICAgICAgIHAgPSBQKCdjOi9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzonKSksIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6LycpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9hJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9hL2InKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9hL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzphJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6LycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL2MvYScpKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBwID0gUCgnLy9hL2IvYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iJykpLCBQKCdjL2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iL2MnKSksIFAoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vYS9iL2MvZCcpKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy96L2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL2Evei9jJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgICMgVW5kZXIgTlQsIG9ubHkgcGF0aHMgd2l0aCBib3RoIGEgZHJpdmUgYW5kIGEgcm9vdCBhcmUgYWJzb2x1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6JykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOmEnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIGFic29sdXRlIGJ5IGRlZmluaXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi9jJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MvZCcpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29uJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdOVUwnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ05VTC50eHQnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmNvbTknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmxwdDknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIE9ubHkgdGhlIGxhc3QgY29tcG9uZW50IG1hdHRlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYzovTlVML2Nvbi9iYXonKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLy9teS9zaGFyZS9udWwvY29uL2F1eCcpLmlzX3Jlc2VydmVkKCkpCisKKworY2xhc3MgUHVyZVBhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlUGF0aAorCisgICAgZGVmIHRlc3RfY29uY3JldGVfY2xhc3Moc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwKKyAgICAgICAgICAgIHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUHVyZVBvc2l4UGF0aCkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9mbGF2b3Vyc191bmVxdWFsKHNlbGYpOgorICAgICAgICBwID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoKCdhJykKKyAgICAgICAgcSA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLCBxKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZsYXZvdXJzX3Vub3JkZXJlZChzZWxmKToKKyAgICAgICAgcCA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aCgnYScpCisgICAgICAgIHEgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCgnYScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPCBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPD0gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID4gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID49IHEKKworCisjCisjIFRlc3RzIGZvciB0aGUgY29uY3JldGUgY2xhc3NlcworIworCisjIE1ha2Ugc3VyZSBhbnkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGJhc2UgdGVzdCBwYXRoIGFyZSByZXNvbHZlZAorQkFTRSA9IG9zLnBhdGgucmVhbHBhdGgoVEVTVEZOKQoram9pbiA9IGxhbWJkYSAqeDogb3MucGF0aC5qb2luKEJBU0UsICp4KQorcmVsX2pvaW4gPSBsYW1iZGEgKng6IG9zLnBhdGguam9pbihURVNURk4sICp4KQorCitkZWYgc3ltbGlua19za2lwX3JlYXNvbigpOgorICAgIGlmIG5vdCBwYXRobGliLnN1cHBvcnRzX3N5bWxpbmtzOgorICAgICAgICByZXR1cm4gIm5vIHN5c3RlbSBzdXBwb3J0IGZvciBzeW1saW5rcyIKKyAgICB0cnk6CisgICAgICAgIG9zLnN5bWxpbmsoX19maWxlX18sIEJBU0UpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuIHN0cihlKQorICAgIGVsc2U6CisgICAgICAgIHN1cHBvcnQudW5saW5rKEJBU0UpCisgICAgcmV0dXJuIE5vbmUKKworc3ltbGlua19za2lwX3JlYXNvbiA9IHN5bWxpbmtfc2tpcF9yZWFzb24oKQorCitvbmx5X250ID0gdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgIT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgYSBXaW5kb3dzLWNvbXBhdGlibGUgc3lzdGVtJykKK29ubHlfcG9zaXggPSB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBhIFBPU0lYLWNvbXBhdGlibGUgc3lzdGVtJykKK3dpdGhfc3ltbGlua3MgPSB1bml0dGVzdC5za2lwSWYoc3ltbGlua19za2lwX3JlYXNvbiwgc3ltbGlua19za2lwX3JlYXNvbikKKworCitAb25seV9wb3NpeAorY2xhc3MgUG9zaXhQYXRoQXNQdXJlVGVzdChQdXJlUG9zaXhQYXRoVGVzdCk6CisgICAgY2xzID0gcGF0aGxpYi5Qb3NpeFBhdGgKKworQG9ubHlfbnQKK2NsYXNzIFdpbmRvd3NQYXRoQXNQdXJlVGVzdChQdXJlV2luZG93c1BhdGhUZXN0KToKKyAgICBjbHMgPSBwYXRobGliLldpbmRvd3NQYXRoCisKKworY2xhc3MgX0Jhc2VQYXRoVGVzdChvYmplY3QpOgorICAgICIiIlRlc3RzIGZvciB0aGUgRlMtYWNjZXNzaW5nIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUGF0aCBjbGFzc2VzLiIiIgorCisgICAgIyAoQkFTRSkKKyAgICAjICB8CisgICAgIyAgfC0tIGRpckEvCisgICAgIyAgICAgICB8LS0gbGlua0MgLT4gIi4uL2RpckIiCisgICAgIyAgfC0tIGRpckIvCisgICAgIyAgfCAgICB8LS0gZmlsZUIKKyAgICAjICAgICAgIHwtLSBsaW5rRCAtPiAiLi4vZGlyQiIKKyAgICAjICB8LS0gZGlyQy8KKyAgICAjICB8ICAgIHwtLSBmaWxlQworICAgICMgIHwgICAgfC0tIGZpbGVECisgICAgIyAgfC0tIGZpbGVBCisgICAgIyAgfC0tIGxpbmtBIC0+ICJmaWxlQSIKKyAgICAjICB8LS0gbGlua0IgLT4gImRpckIiCisgICAgIworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihCQVNFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgQkFTRSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQScpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJCJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckMnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycsICdkaXJEJykpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdmaWxlQScpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQicsICdmaWxlQicpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBCXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdmaWxlQycpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBDXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdkaXJEJywgJ2ZpbGVEJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIERcbiIpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNzcyCisgICAgICAgICAgICAgICAgZGVmIGRpcmxpbmsoc3JjLCBkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QsIHRhcmdldF9pc19kaXJlY3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVmIGRpcmxpbmsoc3JjLCBkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCisgICAgICAgICAgICAjIFJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgICAgICBvcy5zeW1saW5rKCdmaWxlQScsIGpvaW4oJ2xpbmtBJykpCisgICAgICAgICAgICBvcy5zeW1saW5rKCdub24tZXhpc3RpbmcnLCBqb2luKCdicm9rZW5MaW5rJykpCisgICAgICAgICAgICBkaXJsaW5rKCdkaXJCJywgam9pbignbGlua0InKSkKKyAgICAgICAgICAgIGRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckEnLCAnbGlua0MnKSkKKyAgICAgICAgICAgICMgVGhpcyBvbmUgZ29lcyB1cHdhcmRzIGJ1dCBkb2Vzbid0IGNyZWF0ZSBhIGxvb3AKKyAgICAgICAgICAgIGRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckInLCAnbGlua0QnKSkKKworICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIHBhdGhfYSwgcGF0aF9iKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZWZpbGUoc3RyKHBhdGhfYSksIHN0cihwYXRoX2IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBhbmQgJXIgZG9uJ3QgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhfYSwgcGF0aF9iKSkKKworICAgIGRlZiBhc3NlcnRGaWxlTm90Rm91bmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcikgYXMgY206CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKworICAgIGRlZiBfdGVzdF9jd2Qoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQorICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgcGF0aCBwb2ludHMgdG8gJy4nCisgICAgICAgIHAgPSBzZWxmLmNscygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgb3Muc3RhdCgnLicpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2RpckEnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdmaWxlQScpLmV4aXN0cygpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0EnKS5leGlzdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0InKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgKHAgLyAnZm9vJykuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy94eXp6eScpLmV4aXN0cygpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uVGV4dElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBwYXRocyA9IHNldChpdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2RpckEnLCAnZGlyQicsICdkaXJDJywgJ2ZpbGVBJ10KKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBleHBlY3RlZCArPSBbJ2xpbmtBJywgJ2xpbmtCJywgJ2Jyb2tlbkxpbmsnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfaXRlcmRpcl9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2xpbmtCJykKKyAgICAgICAgcGF0aHMgPSBzZXQocC5pdGVyZGlyKCkpCisgICAgICAgIGV4cGVjdGVkID0geyBQKEJBU0UsICdsaW5rQicsIHEpIGZvciBxIGluIFsnZmlsZUInLCAnbGlua0QnXSB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcmRpcl9ub2RpcihzZWxmKToKKyAgICAgICAgIyBfX2l0ZXJfXyBvbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICdmaWxlQScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KHAuaXRlcmRpcigpKQorICAgICAgICAjIEVOT0VOVCBvciBFSU5WQUwgdW5kZXIgV2luZG93cywgRU5PVERJUiBvdGhlcndpc2UKKyAgICAgICAgIyAoc2VlIGlzc3VlICMxMjgwMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9URElSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKworICAgIGRlZiB0ZXN0X2dsb2JfY29tbW9uKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKGdsb2IsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGdsb2IpLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGl0ID0gcC5nbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgIF9jaGVjayhpdCwgWyJmaWxlQSJdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJmaWxlQiIpLCBbXSkKKyAgICAgICAgX2NoZWNrKHAuZ2xvYigiZGlyKi9maWxlKiIpLCBbImRpckIvZmlsZUIiLCAiZGlyQy9maWxlQyJdKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkEiKSwgWydkaXJBJywgJ2ZpbGVBJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnLCAnbGlua0EnXSkKKyAgICAgICAgaWYgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQi8qIiksIFsnZGlyQi9maWxlQicsICdkaXJCL2xpbmtEJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rQi9maWxlQicsICdsaW5rQi9saW5rRCddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIiovZmlsZUIiKSwgWydkaXJCL2ZpbGVCJywgJ2xpbmtCL2ZpbGVCJ10pCisKKyAgICBkZWYgdGVzdF9yZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLnJnbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgICMgWFhYIGNhbm5vdCB0ZXN0IGJlY2F1c2Ugb2Ygc3ltbGluayBsb29wcyBpbiB0aGUgdGVzdCBzZXR1cAorICAgICAgICAjX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQSIpLCBbIiJdKQorICAgICAgICAjX2NoZWNrKHAucmdsb2IoIiovZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJmaWxlQSIsICJkaXJCL2ZpbGVCIl0pCisgICAgICAgICMgTm8gc3ltbGluayBsb29wcyBoZXJlCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoImZpbGUqIiksIFsiZGlyQy9maWxlQyIsICJkaXJDL2RpckQvZmlsZUQiXSkKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoIiovKiIpLCBbImRpckMvZGlyRC9maWxlRCJdKQorCisgICAgZGVmIHRlc3RfZ2xvYl9kb3Rkb3Qoc2VsZik6CisgICAgICAgICMgIi4uIiBpcyBub3Qgc3BlY2lhbCBpbiBnbG9icworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLiIpKSwgeyBQKEJBU0UsICIuLiIpIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiZGlyQS8uLi9maWxlKiIpKSwgeyBQKEJBU0UsICJkaXJBLy4uL2ZpbGVBIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLi94eXp6eSIpKSwgc2V0KCkpCisKKyAgICBkZWYgX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUoc2VsZiwgcCwgZXhwZWN0ZWQpOgorICAgICAgICBxID0gcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgIyBUaGVzZSBhcmUgYWxsIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBwKQorICAgICAgICBwID0gUChCQVNFLCAnbGlua0EnKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2ZpbGVBJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtDJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2xpbmtEJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgICMgTm93IGNyZWF0ZSBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9Jy1kaXJEJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNodXRpbC5ybXRyZWUsIGQpCisgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKGQpLCBqb2luKCdkaXJBJywgJ2xpbmtYJykpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignZGlyQicpLCBvcy5wYXRoLmpvaW4oZCwgJ2xpbmtZJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtYJywgJ2xpbmtZJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBpdDIgPSBwLml0ZXJkaXIoKQorICAgICAgICBuZXh0KGl0MikKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIEkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5vcGVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlc29sdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuYWJzb2x1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuX19lbnRlcl9fKQorCisgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgbW9kZSA9IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgICAgIyBDbGVhciB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlICYgfjBvMjIyCisgICAgICAgIHAuY2htb2QobmV3X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfbW9kZSwgbmV3X21vZGUpCisgICAgICAgICMgU2V0IHdyaXRhYmxlIGJpdAorICAgICAgICBuZXdfbW9kZSA9IG1vZGUgfCAwbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorCisgICAgIyBYWFggYWxzbyBuZWVkIGEgdGVzdCBmb3IgbGNobW9kCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgc3QpCisgICAgICAgICMgQ2hhbmdlIGZpbGUgbW9kZSBieSBmbGlwcGluZyB3cml0ZSBiaXQKKyAgICAgICAgcC5jaG1vZChzdC5zdF9tb2RlIF4gMG8yMjIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLmNobW9kLCBzdC5zdF9tb2RlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3RhdCgpLCBzdCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfbHN0YXQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKS8gJ2xpbmtBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIGRlZiB0ZXN0X2xzdGF0X25vc3ltbGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHB3ZCwgInRoZSBwd2QgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9vd25lcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICB1aWQgPSBwLnN0YXQoKS5zdF91aWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZCh1aWQpLnB3X25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAidXNlciAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSB1aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5vd25lcigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ3JwLCAidGhlIGdycCBtb2R1bGUgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIGdpZCA9IHAuc3RhdCgpLnN0X2dpZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gZ3JwLmdldGdyZ2lkKGdpZCkuZ3JfbmFtZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJncm91cCAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSBnaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5ncm91cCgpKQorCisgICAgZGVmIHRlc3RfdW5saW5rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHAudW5saW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JtZGlyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZGlyQScKKyAgICAgICAgZm9yIHEgaW4gcC5pdGVyZGlyKCk6CisgICAgICAgICAgICBxLnVubGluaygpCisgICAgICAgIHAucm1kaXIoKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAudW5saW5rKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVuYW1pbmcgdG8gYW5vdGhlciBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZW5hbWUocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVuYW1pbmcgdG8gYSBzdHIgb2YgYSByZWxhdGl2ZSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZmlsZUFBQScpCisgICAgICAgIHEucmVuYW1lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChxLnN0YXQpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVwbGFjaW5nIGEgbm9uLWV4aXN0aW5nIHBhdGgKKyAgICAgICAgcSA9IFAgLyAnZGlyQScgLyAnZmlsZUFBJworICAgICAgICBwLnJlcGxhY2UocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVwbGFjaW5nIGFub3RoZXIgKGV4aXN0aW5nKSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZGlyQicsICdmaWxlQicpCisgICAgICAgIHEucmVwbGFjZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIG9sZF9tdGltZSA9IHN0LnN0X210aW1lCisgICAgICAgIG9sZF9tdGltZV9ucyA9IHN0LnN0X210aW1lX25zCisgICAgICAgICMgUmV3aW5kIHRoZSBtdGltZSBzdWZmaWNpZW50bHkgZmFyIGluIHRoZSBwYXN0IHRvIHdvcmsgYXJvdW5kCisgICAgICAgICMgZmlsZXN5c3RlbS1zcGVjaWZpYyB0aW1lc3RhbXAgZ3JhbnVsYXJpdHkuCisgICAgICAgIG9zLnV0aW1lKHN0cihwKSwgKG9sZF9tdGltZSAtIDEwLCBvbGRfbXRpbWUgLSAxMCkpCisgICAgICAgICMgVGhlIGZpbGUgbXRpbWUgc2hvdWxkIGJlIHJlZnJlc2hlZCBieSBjYWxsaW5nIHRvdWNoKCkgYWdhaW4KKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWVfbnMsIG9sZF9tdGltZV9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWUsIG9sZF9tdGltZSkKKyAgICAgICAgIyBOb3cgd2l0aCBleGlzdF9vaz1GYWxzZQorICAgICAgICBwID0gUCAvICduZXdmaWxlQicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLnRvdWNoKG1vZGU9MG83MDAsIGV4aXN0X29rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcC50b3VjaCwgZXhpc3Rfb2s9RmFsc2UpCisKKyAgICBkZWYgdGVzdF90b3VjaF9ub2NoYW5nZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgd2l0aCBwLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2RpckEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICAjIFhYWCB0ZXN0IGBtb2RlYCBhcmcKKworICAgIGRlZiB0ZXN0X21rZGlyX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBjaGFpbiBvZiBkaXJlY3RvcmllcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckInLCAnbmV3ZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgICMgWFhYIHRlc3QgYG1vZGVgIGFyZworCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9zeW1saW5rX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdmaWxlQScKKyAgICAgICAgIyBTeW1saW5raW5nIGEgcGF0aCB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIGEgc3RyIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8oc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgICMgU3ltbGlua2luZyB0byBhIGRpcmVjdG9yeQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2RpckInCisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluay5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3QobGluay5pdGVyZGlyKCkpKQorCisgICAgZGVmIHRlc3RfaXNfZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2RpckEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2RpcigpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbGlua0EnKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQicpLmlzX2RpcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUC8gJ2Jyb2tlbkxpbmsnKS5pc19kaXIoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpbGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnZmlsZUEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWxlKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQicpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zeW1saW5rKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtCJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQLyAnYnJva2VuTGluaycpLmlzX3N5bWxpbmsoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpZm9fZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlmbygpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgIm1rZmlmbyIpLCAib3MubWtmaWZvKCkgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X2lzX2ZpZm9fdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteWZpZm8nKQorICAgICAgICBvcy5ta2ZpZm8oc3RyKFApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3NvY2tldF9mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfc29ja2V0KCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKSwgIlVuaXggc29ja2V0cyByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfaXNfc29ja2V0X3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlzb2NrJykKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suYmluZChzdHIoUCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiQUZfVU5JWCBwYXRoIHRvbyBsb25nIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IGJpbmQgVW5peCBzb2NrZXQ6ICIgKyBzdHIoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfYmxvY2tfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19ibG9ja19kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19ibG9ja19kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfY2hhcl9kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX3RydWUoc2VsZik6CisgICAgICAgICMgVW5kZXIgVW5peCwgL2Rldi9udWxsIHNob3VsZCBnZW5lcmFsbHkgYmUgYSBjaGFyIGRldmljZQorICAgICAgICBQID0gc2VsZi5jbHMoJy9kZXYvbnVsbCcpCisgICAgICAgIGlmIG5vdCBQLmV4aXN0cygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiL2Rldi9udWxsIHJlcXVpcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLnN0YXQoKSwgcC5zdGF0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0c19pbnRlcm5pbmcoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL3Vzci9iaW4vZm9vJykKKyAgICAgICAgcSA9IFAoJy91c3IvbG9jYWwvYmluJykKKyAgICAgICAgIyAndXNyJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMV0sIHEucGFydHNbMV0pCisgICAgICAgICMgJ2JpbicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzJdLCBxLnBhcnRzWzNdKQorCisKK2NsYXNzIFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLldpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfZmxhdm91cihzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5Qb3NpeFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLldpbmRvd3NQYXRoKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCisgICAgZGVmIF9jaGVja19zeW1saW5rX2xvb3Aoc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXRoID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHByaW50KHBhdGgucmVzb2x2ZSgpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICBvbGRfbWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bWFzaywgb2xkX21hc2spCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY2NikKKyAgICAgICAgb3MudW1hc2soMG8wMjIpCisgICAgICAgIHdpdGggKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS5vcGVuKCd3YicpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignb3RoZXJfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjQ0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgKHAgLyAnbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICAocCAvICdvdGhlcl9uZXdfZmlsZScpLnRvdWNoKCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKyAgICAgICAgKHAgLyAnbWFza2VkX25ld19maWxlJykudG91Y2gobW9kZT0wbzc1MCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ21hc2tlZF9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG83NTApCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfbG9vcChzZWxmKToKKyAgICAgICAgIyBMb29wIGRldGVjdGlvbiBmb3IgYnJva2VuIHN5bWxpbmtzIHVuZGVyIFBPU0lYCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIExvb3BzIHdpdGggcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1gvaW5zaWRlJywgam9pbignbGlua1gnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWCcpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtZJywgam9pbignbGlua1knKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWScpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtaLy4uL2xpbmtaJywgam9pbignbGlua1onKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWicpCisgICAgICAgICMgTG9vcHMgd2l0aCBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtVL2luc2lkZScpLCBqb2luKCdsaW5rVScpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtVJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVicpLCBqb2luKCdsaW5rVicpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtWJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVy8uLi9saW5rVycpLCBqb2luKCdsaW5rVycpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtXJykKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBnaXZlbiA9IHNldChwLmdsb2IoIkZJTEVhIikpCisgICAgICAgIGV4cGVjdCA9IHNldCgpIGlmIG5vdCBzdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoQkFTRSkgZWxzZSBnaXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiRklMRWEqIikpLCBzZXQoKSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBnaXZlbiA9IHNldChwLnJnbG9iKCJGSUxFZCIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCoiKSksIHNldCgpKQorCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhIikpLCB7IFAoQkFTRSwgImZpbGVBIikgfSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCIpKSwgeyBQKEJBU0UsICJkaXJDL2RpckQvZmlsZUQiKSB9KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDAzMDg0ZTQuLjc0MjUzYjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0xLDkgKzEsOSBAQAogIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgbm90IHZlcnkgY29tcHJlaGVuc2l2ZSBhdCB0aGUgbW9tZW50LgogCiBpbXBvcnQgZG9jdGVzdAotaW1wb3J0IGltcAogaW1wb3J0IHBkYgogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTIwNSw3ICsyMDUsOCBAQAogICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKICAgICAuLi4gICAgICdjbGVhciAxJywKICAgICAuLi4gICAgICdjb21tYW5kcyAyJywKLSAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAncCAiNDIiJywKKyAgICAuLi4gICAgICdwcmludCgiNDIiLCA3KjYpJywgICAgICMgSXNzdWUgMTg3NjQgKG5vdCBhYm91dCBicmVha3BvaW50cykKICAgICAuLi4gICAgICdlbmQnLAogICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IGJyZWFrcG9pbnQgMiAobGluZSA0KQogICAgIC4uLiAgICAgJ2NsZWFyJywgICAgICMgY2xlYXIgYWxsIQpAQCAtMjUyLDExICsyNTMsMTMgQEAKICAgICAoUGRiKSBjbGVhciAxCiAgICAgRGVsZXRlZCBicmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCiAgICAgKFBkYikgY29tbWFuZHMgMgotICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgcCAiNDIiCisgICAgKGNvbSkgcHJpbnQoIjQyIiwgNyo2KQogICAgIChjb20pIGVuZAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgMQotICAgIDQyCisgICAgJzQyJworICAgIDQyIDQyCiAgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCiAgICAgLT4gcHJpbnQoMikKICAgICAoUGRiKSBjbGVhcgpAQCAtNDY0LDcgKzQ2Nyw3IEBACiAKIAogIyBNb2R1bGUgZm9yIHRlc3Rpbmcgc2tpcHBpbmcgb2YgbW9kdWxlIHRoYXQgbWFrZXMgYSBjYWxsYmFjawotbW9kID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZV90b19za2lwJykKK21vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZV90b19za2lwJykKIGV4ZWMoJ2RlZiBmb29fcG9ueShjYWxsYmFjayk6IHggPSAxOyBjYWxsYmFjaygpOyByZXR1cm4gTm9uZScsIG1vZC5fX2RpY3RfXykKIAogCkBAIC01OTcsNiArNjAwLDMxMSBAQAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgIiIiCiAKK2RlZiB0ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudCgpOgorICAgICIiIlRlc3QgdGhhdCBwZGIgc3RvcHMgYWZ0ZXIgYSBuZXh0L3VudGlsL3JldHVybiBpc3N1ZWQgYXQgYSByZXR1cm4gZGVidWcgZXZlbnQuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb25fMigpOgorICAgIC4uLiAgICAgeCA9IDEKKyAgICAuLi4gICAgIHggPSAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIGVuZCA9IDEKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ2JyZWFrIHRlc3RfZnVuY3Rpb25fMicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBicmVhayB0ZXN0X2Z1bmN0aW9uXzIKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT46MQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigyKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4geCA9IDEKKyAgICAoUGRiKSByZXR1cm4KKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigzKXRlc3RfZnVuY3Rpb25fMigpLT5Ob25lCisgICAgLT4geCA9IDIKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHVudGlsCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHJldHVybgorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBlbmQgPSAxCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yKCk6CisgICAgIiIiVGVzdGluZyBza2lwIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzIGZvciAibmV4dCIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpdCA9IHRlc3RfZ2VuKCkKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpLT4xCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJyZXR1cm4iIGNvbW1hbmQKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHlpZWxkIDAKKyAgICAuLi4gICAgIHJldHVybiAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGl0ID0gdGVzdF9nZW4oKQorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgLi4uICAgICAgICAgbmV4dChpdCkKKyAgICAuLi4gICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBleC52YWx1ZSA9PSAxCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0cnk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHJldHVybgorICAgIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDgpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgIGZpbmlzaGVkCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJ1bnRpbCIgY29tbWFuZCBpZiB0YXJnZXQgYnJlYWtwb2luZyBpcyBub3QgcmVhY2hlZAorCisgICAgPj4+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+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCiAKIGNsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjE3LDYgKzkyNSwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggMWNhY2RlYS4uNTAyNTc5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTUsNDQgKzUsMjggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBtYXRoIGltcG9ydCBjb3B5c2lnbgogCi1kZWYgZGlzYXNzZW1ibGUoZnVuYyk6Ci0gICAgZiA9IFN0cmluZ0lPKCkKLSAgICB0bXAgPSBzeXMuc3Rkb3V0Ci0gICAgc3lzLnN0ZG91dCA9IGYKLSAgICB0cnk6Ci0gICAgICAgIGRpcy5kaXMoZnVuYykKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wCi0gICAgcmVzdWx0ID0gZi5nZXR2YWx1ZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIHJlc3VsdAorZnJvbSB0ZXN0LmJ5dGVjb2RlX2hlbHBlciBpbXBvcnQgQnl0ZWNvZGVUZXN0Q2FzZQogCi1kZWYgZGlzX3NpbmdsZShsaW5lKToKLSAgICByZXR1cm4gZGlzYXNzZW1ibGUoY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpKQotCi0KLWNsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdFRyYW5mb3JtcyhCeXRlY29kZVRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Vub3Qoc2VsZik6CiAgICAgICAgICMgVU5BUllfTk9UIFBPUF9KVU1QX0lGX0ZBTFNFICAtLT4gIFBPUF9KVU1QX0lGX1RSVUUnCiAgICAgICAgIGRlZiB1bm90KHgpOgogICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKICAgICAgICAgICAgICAgICBkZWwgeAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgIGZvciBlbGVtIGluICgnUE9QX0pVTVBfSUZfVFJVRScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1VOQVJZX05PVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfRkFMU0UnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX1RSVUUnKQogCiAgICAgZGVmIHRlc3RfZWxpbV9pbnZlcnNpb25fb2ZfaXNfb3JfaW4oc2VsZik6Ci0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnbm90IGEgaXMgYicsICcoaXMgbm90KScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaW4gYicsICcobm90IGluKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnKGlzKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnKGluKScsKSwKKyAgICAgICAgZm9yIGxpbmUsIGNtcF9vcCBpbiAoCisgICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnaXMgbm90JywpLAorICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJ25vdCBpbicsKSwKKyAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnaXMnLCksCisgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJ2luJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdDT01QQVJFX09QJywgY21wX29wKQogCiAgICAgZGVmIHRlc3RfZ2xvYmFsX2FzX2NvbnN0YW50KHNlbGYpOgogICAgICAgICAjIExPQURfR0xPQkFMIE5vbmUvVHJ1ZS9GYWxzZSAgLS0+ICBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZQpAQCAtNTYsMTcgKzQwLDE0IEBACiAgICAgICAgIGRlZiBoKHgpOgogICAgICAgICAgICAgRmFsc2UKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGZvciBmdW5jLCBuYW1lIGluICgoZiwgJ05vbmUnKSwgKGcsICdUcnVlJyksIChoLCAnRmFsc2UnKSk6Ci0gICAgICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmdW5jKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0dMT0JBTCcsKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoJytuYW1lKycpJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBmdW5jLCBlbGVtIGluICgoZiwgTm9uZSksIChnLCBUcnVlKSwgKGgsIEZhbHNlKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmdW5jLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAnQWRkaW5nIGEgZG9jc3RyaW5nIG1hZGUgdGhpcyB0ZXN0IGZhaWwgaW4gUHkyLjUuMCcKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0dMT0JBTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CiAgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CkBAIC03NCwxMSArNTUsMTAgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCBlbGVtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0pVTVBfQUJTT0xVVEUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCBlbGVtKQogCiAgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTg2LDI4ICs2NiwzMCBAQAogICAgICAgICAgICAgKCdhLCBiID0gYSwgYicsICdST1RfVFdPJywpLAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdVTlBBQ0tfVFVQTEUnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl90dXBsZXNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKIAogICAgICAgICAjIExvbmcgdHVwbGVzIHNob3VsZCBiZSBmb2xkZWQgdG9vLgotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSkpCisgICAgICAgIGNvZGUgPSBjb21waWxlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSksJycsJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogICAgICAgICAjIE9uZSBMT0FEX0NPTlNUIGZvciB0aGUgdHVwbGUsIG9uZSBmb3IgdGhlIE5vbmUgcmV0dXJuIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLmNvdW50KCdMT0FEX0NPTlNUJyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICBsb2FkX2NvbnN0cyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnTE9BRF9DT05TVCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRfY29uc3RzKSwgMikKIAogICAgICAgICAjIEJ1ZyAxMDUzODE5OiAgVHVwbGUgb2YgY29uc3RhbnRzIG1pc2lkZW50aWZpZWQgd2hlbiBwcmVzZW50ZWQgd2l0aDoKICAgICAgICAgIyAuIC4gLiBvcGNvZGVfd2l0aF9hcmcgMTAwICAgdW5hcnlfb3Bjb2RlICAgQlVJTERfVFVQTEUgMSAgLiAuIC4KQEAgLTEyOSwxNCArMTExLDE0IEBACiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9saXN0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKICAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX0xJU1Qgc2hvdWxkIGJlIGZvbGRlZCB0byBhIHR1cGxlOgotICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAnKDEsIDIsIDMpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX0xJU1QnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9MSVNUJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2Zfc2V0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTE0NywxOCArMTI5LDkgQEAKICAgICAgICAgICAgICgnYSBub3QgaW4geygxLCAyKSwgMywgNH0nLCBmcm96ZW5zZXQoeygxLCAyKSwgMywgNH0pKSwKICAgICAgICAgICAgICgnYSBpbiB7MSwgMiwgMywgMywgMiwgMX0nLCBmcm96ZW5zZXQoezEsIDIsIDN9KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfU0VUJywgYXNtKQotCi0gICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBmcm96ZW5zZXQgJ2VsZW0nIGlzIGluIHRoZSBkaXNhc3NlbWJseQotICAgICAgICAgICAgIyBUaGUgb3JkZXJpbmcgb2YgdGhlIGVsZW1lbnRzIGluIHJlcHIoIGZyb3plbnNldCApIGlzbid0Ci0gICAgICAgICAgICAjIGd1YXJhbnRlZWQsIHNvIHdlIGp1bXAgdGhyb3VnaCBzb21lIGhvb3BzIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUKLSAgICAgICAgICAgICMgdGhlIGZyb3plbnNldCB3ZSBleHBlY3Q6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmcm96ZW5zZXQnLCBhc20pCi0gICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZyb3plbnNldCBsaXRlcmFsIGZyb20gdGhlIGRpc2Fzc2VtYmx5OgotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInLiooZnJvemVuc2V0XCh7Lip9XCkpLionLCBhc20sIHJlLkRPVEFMTCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKG0uZ3JvdXAoMSkpLCBlbGVtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9TRVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByZXN1bHRpbmcgY29kZSBhY3R1YWxseSB3b3JrczoKICAgICAgICAgZGVmIGYoYSk6CkBAIC0xNzYsOTggKzE0OSwxMDMgQEAKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfYmlub3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMiszKzQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCi0gICAgICAgICAgICAoJyJAIio0JywgIignQEBAQCcpIiksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICIoJ2FiY2RlZicpIiksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2EgPSAzKio0JywgJyg4MSknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKLSAgICAgICAgICAgICgnYSA9IDMqNCcsICcoMTIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQotICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAnKDMpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQotICAgICAgICAgICAgKCdhID0gMTQlNCcsICcoMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbwotICAgICAgICAgICAgKCdhID0gMiszJywgJyg1KScpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAotICAgICAgICAgICAgKCdhID0gMTMtNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0Ci0gICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgJygxMyknKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCi0gICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgJyg1MiknKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgJygzKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCi0gICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAnKDEwKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCi0gICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAnKDE1KScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKKyAgICAgICAgICAgICgnYSA9IDIrMys0JywgOSksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCisgICAgICAgICAgICAoJyJAIio0JywgJ0BAQEAnKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgJ2FiY2RlZicpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhID0gMyoqNCcsIDgxKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKKyAgICAgICAgICAgICgnYSA9IDMqNCcsIDEyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5CisgICAgICAgICAgICAoJ2EgPSAxMy8vNCcsIDMpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKKyAgICAgICAgICAgICgnYSA9IDE0JTQnLCAyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbworICAgICAgICAgICAgKCdhID0gMiszJywgNSksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCisgICAgICAgICAgICAoJ2EgPSAxMy00JywgOSksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAorICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsIDEzKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCisgICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgNTIpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAzKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgNSksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCisgICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAxMCksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKKyAgICAgICAgICAgICgnYSA9IDEzIHwgNycsIDE1KSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9MisiYiInKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0yKyJiIicsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2InKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPSJ4IioxMDAwJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAxMDAwKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3N1YnNjcl9vbl91bmljb2RlKHNlbGYpOgogICAgICAgICAjIHZhbGlkIGNvZGUgZ2V0IG9wdGltaXplZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZm9vIlswXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXHUwMDYxXHVmZmZmIlsxXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignXFx1ZmZmZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXFUwMDAxMjM0NWFiY2RlZiJbM10nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2MnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmb28iWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXHUwMDYxXHVmZmZmIlsxXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1x1ZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCdCSU5BUllfU1VCU0NSJykKKworICAgICAgICAjIFdpdGggUEVQIDM5Mywgbm9uLUJNUCBjaGFyIGdldCBvcHRpbWl6ZWQKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcVTAwMDEyMzQ1IlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgICAgICMgaW52YWxpZCBjb2RlIGRvZXNuJ3QgZ2V0IG9wdGltaXplZAogICAgICAgICAjIG91dCBvZiByYW5nZQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZnV1IlsxMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZ1dSJbMTBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl91bmFyeW9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLTAuNScsICcoLTAuNSknKSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJy0wLjAnLCAnKC0wLjApJyksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCi0gICAgICAgICAgICAoJy0oMS4wLTEuMCknLCcoLTAuMCknKSwgICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKLSAgICAgICAgICAgICgnLTAnLCAnKDApJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCi0gICAgICAgICAgICAoJ34tMicsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKLSAgICAgICAgICAgICgnKzEnLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCisgICAgICAgICAgICAoJy0wLjUnLCAtMC41KSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCisgICAgICAgICAgICAoJy0wLjAnLCAtMC4wKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKKyAgICAgICAgICAgICgnLSgxLjAtMS4wKScsIC0wLjApLCAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCisgICAgICAgICAgICAoJy0wJywgMCksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCisgICAgICAgICAgICAoJ34tMicsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICAgICAgKCcrMScsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IC0wLjAgd29ya3MgYWZ0ZXIgbWFyc2hhbGluZwogICAgICAgICBkZWYgbmVnemVybygpOgogICAgICAgICAgICAgcmV0dXJuIC0oMS4wLTEuMCkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBkaXNhc3NlbWJsZShuZWd6ZXJvKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlzaWduKDEuMCwgbmVnemVybygpKSA8IDApCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICBmb3IgbGluZSwgZWxlbSwgb3BuYW1lIGluICgKKyAgICAgICAgICAgICgnLSJhYmMiJywgJ2FiYycsICdVTkFSWV9ORUdBVElWRScpLAorICAgICAgICAgICAgKCd+ImFiYyInLCAnYWJjJywgJ1VOQVJZX0lOVkVSVCcpLAogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgb3BuYW1lKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CiAgICAgICAgICMgSlVNUF9GT1JXQVJEIHRvIFJFVFVSTiAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZihjb25kLCB0cnVlX3ZhbHVlLCBmYWxzZV92YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZV92YWx1ZSBpZiBjb25kIGVsc2UgZmFsc2VfdmFsdWUKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCkBAIC0yODAsNDggKzI1OCw1MyBAQAogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDYpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMihzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKICAgICAgICAgZGVmIGYoY29uZDEsIGNvbmQyKToKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnSlVNUF9BQlNPTFVURSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfbWFrZV9mdW5jdGlvbl9kb2VzbnRfYmFpbChzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIGRlZiBnKCktPjErMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZwotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfQUREJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0JJTkFSWV9BREQnKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRfZm9sZGluZyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTEyNDQ6IGFnZ3Jlc3NpdmUgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgZXhwcnMgPSBbCi0gICAgICAgICAgICAiMyAqIC01IiwKLSAgICAgICAgICAgICItMyAqIDUiLAotICAgICAgICAgICAgIjIgKiAoMyAqIDQpIiwKLSAgICAgICAgICAgICIoMiAqIDMpICogNCIsCi0gICAgICAgICAgICAiKC0xLCAyLCAzKSIsCi0gICAgICAgICAgICAiKDEsIC0yLCAzKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSAqIDYiLAotICAgICAgICAgICAgImxhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0iLAorICAgICAgICAgICAgJzMgKiAtNScsCisgICAgICAgICAgICAnLTMgKiA1JywKKyAgICAgICAgICAgICcyICogKDMgKiA0KScsCisgICAgICAgICAgICAnKDIgKiAzKSAqIDQnLAorICAgICAgICAgICAgJygtMSwgMiwgMyknLAorICAgICAgICAgICAgJygxLCAtMiwgMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMykgKiA2JywKKyAgICAgICAgICAgICdsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9JywKICAgICAgICAgXQogICAgICAgICBmb3IgZSBpbiBleHByczoKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF8nLCBhc20sIGUpCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShlLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JVSUxEXycpKQorCiAKIGNsYXNzIFRlc3RCdWdsZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzQzLDcgKzMyNiw3IEBACiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgY291bnRzID0gW05vbmVdICogNQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CmluZGV4IDdmMTA0NzIuLmI4NWEyNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CkBAIC0xNSwxMiArMTUsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZS5kaWdlc3Rfc2l6ZSBpcyBOb25lIG9yIG1vZHVsZS5kaWdlc3Rfc2l6ZSA+IDApCiAgICAgICAgIHNlbGYuY2hlY2tfb2JqZWN0KG1vZHVsZS5uZXcsIG1vZHVsZS5kaWdlc3Rfc2l6ZSwga2V5KQogCi0gICAgZGVmIGNoZWNrX29iamVjdChzZWxmLCBjbHMsIGRpZ2VzdF9zaXplLCBrZXkpOgorICAgIGRlZiBjaGVja19vYmplY3Qoc2VsZiwgY2xzLCBkaWdlc3Rfc2l6ZSwga2V5LCBkaWdlc3Rtb2Q9Tm9uZSk6CiAgICAgICAgIGlmIGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5KQotICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJykKLSAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnKS5kaWdlc3QoKQotICAgICAgICAgICAgb2JqMyA9IGNscyhrZXkpCisgICAgICAgICAgICBpZiBkaWdlc3Rtb2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkaWdlc3Rtb2QgPSBtZDUKKyAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5LCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQorICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJywgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKKyAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnLCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKS5kaWdlc3QoKQorICAgICAgICAgICAgb2JqMyA9IGNscyhrZXksIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCiAgICAgICAgICAgICBvYmozLnVwZGF0ZShiJ3N0cmluZycpCiAgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGFlMzg2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCi0gICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidcXFx4ZDBceDlmJwotICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgotICAgICAgICAjIHNlZSAjMTg4MgotICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoKQotCi0gICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6Ci0gICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQotCi0gICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgotICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKLSAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAotICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKLQotICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKLQotICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBFUDI2M1Rlc3QpCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CmluZGV4IDRiMTZjYmIuLjliYWU2ZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CkBAIC05OSwxMCArOTksNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQogICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQotICAgICAgICAjIGxpc3RkaXIgbWF5IGFwcGVuZCBhIHdpbGRjYXJkIHRvIHRoZSBmaWxlbmFtZQotICAgICAgICBpZiBmbiBpcyBvcy5saXN0ZGlyIGFuZCBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGV4Y19maWxlbmFtZSwgXywgd2lsZGNhcmQgPSBleGNfZmlsZW5hbWUucnBhcnRpdGlvbihvcy5zZXApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbGRjYXJkLCAnKi4qJykKICAgICAgICAgaWYgY2hlY2tfZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19maWxlbmFtZSwgZmlsZW5hbWUsICJGdW5jdGlvbiAnJXMoJWEpIGZhaWxlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlYSIgJQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5CmluZGV4IGQzN2FjMjYuLjAyOWI1YjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtNiw2ICs2LDggQEAKIAogY2xhc3MgT3B0aW1pemVkUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CiAKKyAgICBvcHRpbWl6ZWQgPSBUcnVlCisKICAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz1Ob25lKToKICAgICAgICAgcmV0dXJuIHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZS5kdW1wcyhhcmcsIHByb3RvKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2cucHkgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQppbmRleCAzNTVlZmU3Li45ODgzMDAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQpAQCAtMTk5LDE0ICsxOTksMTQgQEAKICAgICAgICAgaW1wb3J0IHQ1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsICd0NSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJywgJ3N0cmluZycsICd0NSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuZm9vKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzdHJpbmcnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3N0cmluZyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuc3RyaW5nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3NwZWNfXycsICdzcGFtJ10pCiAKICAgICBkZWYgdGVzdF82KHNlbGYpOgogICAgICAgICBoaWVyID0gWwpAQCAtMjIyLDE0ICsyMjIsMTUgQEAKICAgICAgICAgaW1wb3J0IHQ2CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3NwZWNfXyddKQogICAgICAgICBzID0gIiIiCiAgICAgICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgICAgIGZyb20gdDYgaW1wb3J0ICoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19zcGVjX18nLCAnZWdncycsICdoYW0nLCAnc3BhbSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydlZ2dzJywgJ2hhbScsICdzZWxmJywgJ3NwYW0nLCAndDYnXSkKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCkBAIC0yNTYsMTggKzI1NywxOSBAQAogICAgICAgICBpbXBvcnQgdDcgYXMgdGFzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbSddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CmluZGV4IGE4NDI2YjUuLjM3MGIyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKaW5kZXggZmQwNjYxNC4uZDczYjIxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQpAQCAtMSwxMiArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdW5sb2FkLCBjaGVja193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgogICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCB0eXBlcy5Nb2R1bGVUeXBlKGZ1bGxuYW1lKSkKICAgICAgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgICMgTWFrZSBpdCBhIHBhY2thZ2UKQEAgLTIwMCw2ICsyMDAsOCBAQAogICAgICAgICBkaXJuYW1lID0gc2VsZi5jcmVhdGVfaW5pdChwa2duYW1lKQogICAgICAgICBwYXRoaXRlbSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBwa2duYW1lKQogICAgICAgICBmdWxsbmFtZSA9ICd7fS57fScuZm9ybWF0KHBrZ25hbWUsIG1vZG5hbWUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKHBrZ25hbWUsIE5vbmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N1Ym1vZHVsZShkaXJuYW1lLCBwa2duYW1lLCBtb2RuYW1lLCAwKQogCkBAIC0yMDgsOSArMjEwLDE2IEBACiAgICAgICAgICAgICBpbXBvcnRlcnMgPSBsaXN0KGl0ZXJfaW1wb3J0ZXJzKGZ1bGxuYW1lKSkKICAgICAgICAgICAgIGV4cGVjdGVkX2ltcG9ydGVyID0gZ2V0X2ltcG9ydGVyKHBhdGhpdGVtKQogICAgICAgICAgICAgZm9yIGZpbmRlciBpbiBpbXBvcnRlcnM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyLmxvYWRlcgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBGb3Igbm93IHdlIHN0aWxsIGFsbG93IHJhdyBsb2FkZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBmaW5kX21vZHVsZSgpLgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbmRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLCBleHBlY3RlZF9pbXBvcnRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmluZGVyLmZpbmRfbW9kdWxlKHBrZ25hbWUpKQogCkBAIC0yMjIsOCArMjMxLDExIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbSddCi0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAKICAgICBkZWYgdGVzdF9taXhlZF9uYW1lc3BhY2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCA5ZTg2YjNkLi5hYmIxZDE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTEsOTQgKzEsODcgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBsaXN0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29sbGVjdGlvbnMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogCitBTExfRk9STUFUUz0ocGxpc3RsaWIuRk1UX1hNTCwgcGxpc3RsaWIuRk1UX0JJTkFSWSkKIAotIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKLVRFU1REQVRBID0gYiIiIjw/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+XHhjM1x4ODViZW5yYWE8L2tleT4KLSAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KLSIiIi5yZXBsYWNlKGIiICIgKiA4LCBiIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisjIFRoZSB0ZXN0ZGF0YSBpcyBnZW5lcmF0ZWQgdXNpbmcgTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CisjICh3aGljaCB1c2luZyBQeU9iakMgdG8gY29udHJvbCB0aGUgQ29jb2EgY2xhc3NlcyBmb3IgZ2VuZXJhdGluZyBwbGlzdHMpCitURVNUREFUQT17CisgICAgcGxpc3RsaWIuRk1UX1hNTDogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnCisgICAgICAgIFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQQ0ZFVDBOVQorICAgICAgICBXVkJGSUhCc2FYTjBJRkJWUWt4SlF5QWlMUzh2UVhCd2JHVXZMMFJVUkNCUVRFbFRWQ0F4TGpBdkwwVk8KKyAgICAgICAgSWlBaWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZSRlJFY3k5UWNtOXdaWEowZVV4cGMzUXRNUzR3CisgICAgICAgIExtUjBaQ0krQ2p4d2JHbHpkQ0IyWlhKemFXOXVQU0l4TGpBaVBnbzhaR2xqZEQ0S0NUeHJaWGsrWVVSaAorICAgICAgICBkR1U4TDJ0bGVUNEtDVHhrWVhSbFBqSXdNRFF0TVRBdE1qWlVNVEE2TXpNNk16TmFQQzlrWVhSbFBnb0oKKyAgICAgICAgUEd0bGVUNWhSR2xqZER3dmEyVjVQZ29KUEdScFkzUStDZ2tKUEd0bGVUNWhSbUZzYzJWV1lXeDFaVHd2CisgICAgICAgIGEyVjVQZ29KQ1R4bVlXeHpaUzgrQ2drSlBHdGxlVDVoVkhKMVpWWmhiSFZsUEM5clpYaytDZ2tKUEhSeQorICAgICAgICBkV1V2UGdvSkNUeHJaWGsrWVZWdWFXTnZaR1ZXWVd4MVpUd3ZhMlY1UGdvSkNUeHpkSEpwYm1jK1RjT2sKKyAgICAgICAgYzNOcFp5d2dUV0hEbnp3dmMzUnlhVzVuUGdvSkNUeHJaWGsrWVc1dmRHaGxjbE4wY21sdVp6d3ZhMlY1CisgICAgICAgIFBnb0pDVHh6ZEhKcGJtYytKbXgwTzJobGJHeHZJQ1poYlhBN0lDZG9hU2NnZEdobGNtVWhKbWQwT3p3dgorICAgICAgICBjM1J5YVc1blBnb0pDVHhyWlhrK1pHVmxjR1Z5UkdsamREd3ZhMlY1UGdvSkNUeGthV04wUGdvSkNRazgKKyAgICAgICAgYTJWNVBtRThMMnRsZVQ0S0NRa0pQR2x1ZEdWblpYSStNVGM4TDJsdWRHVm5aWEkrQ2drSkNUeHJaWGsrCisgICAgICAgIFlqd3ZhMlY1UGdvSkNRazhjbVZoYkQ0ek1pNDFQQzl5WldGc1Bnb0pDUWs4YTJWNVBtTThMMnRsZVQ0SworICAgICAgICBDUWtKUEdGeWNtRjVQZ29KQ1FrSlBHbHVkR1ZuWlhJK01Ud3ZhVzUwWldkbGNqNEtDUWtKQ1R4cGJuUmwKKyAgICAgICAgWjJWeVBqSThMMmx1ZEdWblpYSStDZ2tKQ1FrOGMzUnlhVzVuUG5SbGVIUThMM04wY21sdVp6NEtDUWtKCisgICAgICAgIFBDOWhjbkpoZVQ0S0NRazhMMlJwWTNRK0NnazhMMlJwWTNRK0NnazhhMlY1UG1GR2JHOWhkRHd2YTJWNQorICAgICAgICBQZ29KUEhKbFlXdytNQzQxUEM5eVpXRnNQZ29KUEd0bGVUNWhUR2x6ZER3dmEyVjVQZ29KUEdGeWNtRjUKKyAgICAgICAgUGdvSkNUeHpkSEpwYm1jK1FUd3ZjM1J5YVc1blBnb0pDVHh6ZEhKcGJtYytRand2YzNSeWFXNW5QZ29KCisgICAgICAgIENUeHBiblJsWjJWeVBqRXlQQzlwYm5SbFoyVnlQZ29KQ1R4eVpXRnNQak15TGpVOEwzSmxZV3crQ2drSgorICAgICAgICBQR0Z5Y21GNVBnb0pDUWs4YVc1MFpXZGxjajR4UEM5cGJuUmxaMlZ5UGdvSkNRazhhVzUwWldkbGNqNHkKKyAgICAgICAgUEM5cGJuUmxaMlZ5UGdvSkNRazhhVzUwWldkbGNqNHpQQzlwYm5SbFoyVnlQZ29KQ1R3dllYSnlZWGsrCisgICAgICAgIENnazhMMkZ5Y21GNVBnb0pQR3RsZVQ1aFUzUnlhVzVuUEM5clpYaytDZ2s4YzNSeWFXNW5Qa1J2YjJSaAorICAgICAgICBhRHd2YzNSeWFXNW5QZ29KUEd0bGVUNWhia1Z0Y0hSNVJHbGpkRHd2YTJWNVBnb0pQR1JwWTNRdlBnb0oKKyAgICAgICAgUEd0bGVUNWhia1Z0Y0hSNVRHbHpkRHd2YTJWNVBnb0pQR0Z5Y21GNUx6NEtDVHhyWlhrK1lXNUpiblE4CisgICAgICAgIEwydGxlVDRLQ1R4cGJuUmxaMlZ5UGpjeU9Ed3ZhVzUwWldkbGNqNEtDVHhyWlhrK2JtVnpkR1ZrUkdGMAorICAgICAgICBZVHd2YTJWNVBnb0pQR0Z5Y21GNVBnb0pDVHhrWVhSaFBnb0pDVkJIZUhaa1NFMW5ZakpaWjFsdGJIVloKKyAgICAgICAgV0VvMVNVZGtNV0p0Y3l0QlFVVkRRWHA0YzJJelVucEpSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjZ29KCisgICAgICAgIENWQm5RVUpCWjAwNFlrYzVNR041UW5aYWFVSnBZVmMxYUdOdWEyZGFNMVoxWVhvMFFVRlJTVVJRUjNoMgorICAgICAgICBaRWhOWjJJeVdXZFpiV3gxV1ZoS05Rb0pDVWxIWkRGaWJYTXJRVUZGUTBGNmVITmlNMUo2U1VjNWJVbEgKKyAgICAgICAgU25CaWJVWjVaVk5DYm1SWE5YSlFaMEZDUVdkTk9HSkhPVEJqZVVKMldtbENhUW9KQ1dGWE5XaGpibXRuCisgICAgICAgIFdqTldkV0Y2TkVGQlVVbEVVRWQ0ZG1SSVRXZGlNbGxuV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQgorICAgICAgICBlbmh6WWpOU2Vnb0pDVWxIT1cxSlIwcHdZbTFHZVdWVFFtNWtWelZ5VUdkQlFrRm5UVGhpUnprd1kzbEMKKyAgICAgICAgZGxwcFFtbGhWelZvWTI1cloxb3pWblZoZWpSQlFWRkpSQW9KQ1ZCSGVIWmtTRTFuWWpKWloxbHRiSFZaCisgICAgICAgIFdFbzFTVWRrTVdKdGN5dEJRVVZEUVhjOVBRb0pDVHd2WkdGMFlUNEtDVHd2WVhKeVlYaytDZ2s4YTJWNQorICAgICAgICBQbk52YldWRVlYUmhQQzlyWlhrK0NnazhaR0YwWVQ0S0NWQkhTbkJpYlVaNVpWTkNibVJYTlhKUVp6MDkKKyAgICAgICAgQ2drOEwyUmhkR0UrQ2drOGEyVjVQbk52YldWTmIzSmxSR0YwWVR3dmEyVjVQZ29KUEdSaGRHRStDZ2xRCisgICAgICAgIFIzaDJaRWhOWjJJeVdXZFpiV3gxV1ZoS05VbEhaREZpYlhNclFVRkZRMEY2ZUhOaU0xSjZTVWM1YlVsSAorICAgICAgICBTbkJpYlVaNVpWTkNibVJYTlhKUVowRkNRV2ROT0FvSllrYzVNR041UW5aYWFVSnBZVmMxYUdOdWEyZGEKKyAgICAgICAgTTFaMVlYbzBRVUZSU1VSUVIzaDJaRWhOWjJJeVdXZFpiV3gxV1ZoS05VbEhaREZpYlhNclFVRkZRMEY2CisgICAgICAgIGVITUtDV0l6VW5wSlJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCWjAwNFlrYzVNR041UW5aYQorICAgICAgICBhVUpwWVZjMWFHTnVhMmRhTTFaMVlYbzBRVUZSU1VSUVIzaDJDZ2xrU0UxbllqSlpaMWx0YkhWWldFbzEKKyAgICAgICAgU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSlJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCCisgICAgICAgIFowMDRZa2M1TUFvSlkzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFprU0UxbgorICAgICAgICBZakpaWjFsdGJIVlpXRW8xU1Vka01XSnRjeXRCUVVWRFFYYzlQUW9KUEM5a1lYUmhQZ29KUEd0bGVUN0QKKyAgICAgICAgaFdKbGJuSmhZVHd2YTJWNVBnb0pQSE4wY21sdVp6NVVhR0YwSUhkaGN5QmhJSFZ1YVdOdlpHVWdhMlY1CisgICAgICAgIExqd3ZjM1J5YVc1blBnbzhMMlJwWTNRK0Nqd3ZjR3hwYzNRK0NnPT0nJycpLAorICAgIHBsaXN0bGliLkZNVF9CSU5BUlk6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBZbkJzYVhOME1ERGNBUUlEQkFVR0J3Z0pDZ3NNRFE0aUl5a3FLeXd0THk0d1ZXRkVZWFJsVldGRWFXTjAKKyAgICAgICAgVm1GR2JHOWhkRlZoVEdsemRGZGhVM1J5YVc1blcyRnVSVzF3ZEhsRWFXTjBXMkZ1Ulcxd2RIbE1hWE4wCisgICAgICAgIFZXRnVTVzUwV201bGMzUmxaRVJoZEdGWWMyOXRaVVJoZEdGY2MyOXRaVTF2Y21WRVlYUmhad0RGQUdJQQorICAgICAgICBaUUJ1QUhJQVlRQmhNMEdjdVgzMEFBQUExUThRRVJJVEZCVVdGeGhiWVVaaGJITmxWbUZzZFdWYVlWUnkKKyAgICAgICAgZFdWV1lXeDFaVjFoVlc1cFkyOWtaVlpoYkhWbFhXRnViM1JvWlhKVGRISnBibWRhWkdWbGNHVnlSR2xqCisgICAgICAgIGRBZ0phd0JOQU9RQWN3QnpBR2tBWndBc0FDQUFUUUJoQU45ZkVCVThhR1ZzYkc4Z0ppQW5hR2tuSUhSbworICAgICAgICBaWEpsSVQ3VEdSb2JIQjBlVVdGUllsRmpFQkVqUUVCQUFBQUFBQUNqSHlBaEVBRVFBbFIwWlhoMEl6L2cKKyAgICAgICAgQUFBQUFBQUFwU1FsSmgwblVVRlJRaEFNb3g4Z0tCQURWa1J2YjJSaGFOQ2dFUUxZb1M1UEVQbzhiRzkwCisgICAgICAgIGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQworICAgICAgICBBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnUKKyAgICAgICAgYXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5CisgICAgICAgIGVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZworICAgICAgICBZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKKyAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFRUeGlhVzVoY25rZ1ozVnVhejVmRUJkVWFHRjBJSGRoCisgICAgICAgIGN5QmhJSFZ1YVdOdlpHVWdhMlY1TGdBSUFDRUFKd0F0QURRQU9nQkNBRTRBV2dCZ0FHc0FkQUNCQUpBQQorICAgICAgICBtUUNrQUxBQXV3REpBTmNBNGdEakFPUUErd0VUQVJvQkhBRWVBU0FCSWdFckFTOEJNUUV6QVRnQlFRRkgKKyAgICAgICAgQVVrQlN3Rk5BVkVCVXdGYUFWc0JYQUZmQVdFQ1hnSnNBQUFBQUFBQUFnRUFBQUFBQUFBQU1RQUFBQUFBCisgICAgICAgIEFBQUFBQUFBQUFBQUFvWT0nJycpLAorfQogCiAKIGNsYXNzIFRlc3RQbGlzdGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05OSw3ICs5Miw3IEBACiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgIGRlZiBfY3JlYXRlKHNlbGYsIGZtdD1Ob25lKToKICAgICAgICAgcGwgPSBkaWN0KAogICAgICAgICAgICAgYVN0cmluZz0iRG9vZGFoIiwKICAgICAgICAgICAgIGFMaXN0PVsiQSIsICJCIiwgMTIsIDMyLjUsIFsxLCAyLCAzXV0sCkBAIC0xMTIsOSArMTA1LDkgQEAKICAgICAgICAgICAgICAgICBhRmFsc2VWYWx1ZT1GYWxzZSwKICAgICAgICAgICAgICAgICBkZWVwZXJEaWN0PWRpY3QoYT0xNywgYj0zMi41LCBjPVsxLCAyLCAidGV4dCJdKSwKICAgICAgICAgICAgICksCi0gICAgICAgICAgICBzb21lRGF0YSA9IHBsaXN0bGliLkRhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgICAgICBzb21lTW9yZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApLAotICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtwbGlzdGxpYi5EYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApXSwKKyAgICAgICAgICAgIHNvbWVEYXRhID0gYiI8YmluYXJ5IGd1bms+IiwKKyAgICAgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTAsCisgICAgICAgICAgICBuZXN0ZWREYXRhID0gW2IiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTBdLAogICAgICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMpLAogICAgICAgICAgICAgYW5FbXB0eURpY3QgPSBkaWN0KCksCiAgICAgICAgICAgICBhbkVtcHR5TGlzdCA9IGxpc3QoKQpAQCAtMTI5LDQ5ICsxMjIsMTkxIEBACiAKICAgICBkZWYgdGVzdF9pbyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsLCBzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgorICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgZnApCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoZnApCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5kdW1wLCBwbCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHBsaXN0bGliLmxvYWQsICdmaWxlbmFtZScpCisKKwogICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgogICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCisgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCkKKyAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHBsLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCi0gICAgICAgIGRhdGEyID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwyKQorICAgICAgICBkYXRhMiA9IHBsaXN0bGliLmR1bXBzKHBsMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2FycmF5KHNlbGYpOgotICAgICAgICBkYXRhID0gW1tbW1tbW1t7J3Rlc3QnOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9XV1dXV1dXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0gW1tbW1tbW1t7J3Rlc3QnOiBiJ2FhYWFhYSd9XV1dXV1dXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0KHNlbGYpOgotICAgICAgICBkYXRhID0geycxJzogeycyJzogeyczJzogeyc0Jzogeyc1Jzogeyc2Jzogeyc3Jzogeyc4Jzogeyc5JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfX19fX19fX19Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IGInYWFhYWFhJ319fX19fX19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2RpY3RfbWl4KHNlbGYpOgotICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dfV19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiBbeyczJzogW1tbW1t7J3Rlc3QnOiBiJ2FhYWFhYSd9XV1dXV19XX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfYXBwbGVmb3JtYXR0aW5nKHNlbGYpOgotICAgICAgICBwbCA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhURVNUREFUQSkKLSAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBLAotICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisgICAgICAgIGZvciB1c2VfYnVpbHRpbl90eXBlcyBpbiAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcyk6CisgICAgICAgICAgICAgICAgICAgIHBsID0gcGxpc3RsaWIubG9hZHMoVEVTVERBVEFbZm10XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgVEVTVERBVEFbZm10XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZ2Zyb21saXRlcmFsKHNlbGYpOgotICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhURVNUREFUQSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoVEVTVERBVEFbZm10XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMiksCisgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCiAKICAgICBkZWYgdGVzdF9ieXRlc2lvKHNlbGYpOgotICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCi0gICAgICAgIGIgPSBCeXRlc0lPKCkKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsLCBiKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QoQnl0ZXNJTyhiLmdldHZhbHVlKCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKHBsLCBiLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnRfYnl0ZXNpbyhzZWxmKToKKyAgICAgICAgcGwgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHBsWydiJ10gPSAxCisgICAgICAgIHBsWydhJ10gPSAyCisgICAgICAgIHBsWydjJ10gPSAzCisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIGZvciBzb3J0X2tleXMgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKToKKyAgICAgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorCisgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGIsIGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWQoQnl0ZXNJTyhiLmdldHZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNvcnQoc2VsZik6CisgICAgICAgIHBsID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBwbFsnYiddID0gMQorICAgICAgICBwbFsnYSddID0gMgorICAgICAgICBwbFsnYyddID0gMworCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3Igc29ydF9rZXlzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cyk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29ydF9rZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYicsICdhJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X2tleXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICBwbCA9IHsgNDI6ICdhTnVtYmVyJyB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcHMsIHBsLCBmbXQ9Zm10KQorCisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsIGIsIGZtdD1mbXQpCisKKyAgICBkZWYgdGVzdF9za2lwa2V5cyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICA0MjogJ2FOdW1iZXInLAorICAgICAgICAgICAgJ3NuYWtlJzogJ2FXb3JkJywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmbXQ9Zm10LCBza2lwa2V5cz1UcnVlLCBzb3J0X2tleXM9RmFsc2UpCisKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7J3NuYWtlJzogJ2FXb3JkJ30pCisKKyAgICAgICAgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXAoCisgICAgICAgICAgICAgICAgICAgIHBsLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9VHJ1ZSwgc29ydF9rZXlzPUZhbHNlKQorICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZnAuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeydzbmFrZSc6ICdhV29yZCd9KQorCisgICAgZGVmIHRlc3RfdHVwbGVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiAoMSwgMiksCisgICAgICAgICAgICAnc2Vjb25kJzogKDEsIDIpLAorICAgICAgICAgICAgJ3RoaXJkJzogKDMsIDQpLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQorCisgICAgZGVmIHRlc3RfZGljdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3NlY29uZCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgJ3RoaXJkJzogeydiJzogMiB9LAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogeydhJzogMX0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IHsnYic6IDIgfSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQogCiAgICAgZGVmIHRlc3RfY29udHJvbGNoYXJhY3RlcnMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEyOCk6CkBAIC0xNzksMjUgKzMxNCwyNyBAQAogICAgICAgICAgICAgdGVzdFN0cmluZyA9ICJzdHJpbmcgY29udGFpbmluZyAlcyIgJSBjCiAgICAgICAgICAgICBpZiBpID49IDMyIG9yIGMgaW4gIlxyXG5cdCI6CiAgICAgICAgICAgICAgICAgIyBcciwgXG4gYW5kIFx0IGFyZSB0aGUgb25seSBsZWdhbCBjb250cm9sIGNoYXJzIGluIFhNTAotICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3RTdHJpbmcpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHModGVzdFN0cmluZywgZm10PXBsaXN0bGliLkZNVF9YTUwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFN0cmluZykKIAogICAgIGRlZiB0ZXN0X25vbmRpY3Ryb290KHNlbGYpOgotICAgICAgICB0ZXN0MSA9ICJhYmMiCi0gICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQotICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3QxKSkKLSAgICAgICAgcmVzdWx0MiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICB0ZXN0MSA9ICJhYmMiCisgICAgICAgICAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCisgICAgICAgICAgICAgICAgcmVzdWx0MSA9IHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKHRlc3QxLCBmbXQ9Zm10KSkKKyAgICAgICAgICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHModGVzdDIsIGZtdD1mbXQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MiwgcmVzdWx0MikKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhcnJheShzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWyI8a2V5PmtleSBpbnNpZGUgYW4gYXJyYXk8L2tleT4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTI8L2tleT48cmVhbD4zPC9yZWFsPiIsCiAgICAgICAgICAgICAgICAgICAiPHRydWUvPjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTM8L2tleT4iXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGFycmF5PiVzPC9hcnJheT48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkZGljdChzZWxmKToKQEAgLTIwNiwyMiArMzQzLDEzMCBAQAogICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+bWlzc2luZyBrZXk8L3N0cmluZz4iLAogICAgICAgICAgICAgICAgICAgIjxrZXk+azE8L2tleT48c3RyaW5nPnYxPC9zdHJpbmc+PHJlYWw+NS4zPC9yZWFsPiIKICAgICAgICAgICAgICAgICAgICI8a2V5PmsxPC9rZXk+PGtleT5rMjwva2V5PjxzdHJpbmc+ZG91YmxlIGtleTwvc3RyaW5nPiJdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48ZGljdD4lczwvZGljdD48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxhcnJheT48ZGljdD4lczwvZGljdD48L2FycmF5PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRpbnRlZ2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjxwbGlzdD48aW50ZWdlcj5ub3QgaW50ZWdlcjwvaW50ZWdlcj48L3BsaXN0PiIpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkcmVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8cGxpc3Q+PGludGVnZXI+bm90IHJlYWw8L2ludGVnZXI+PC9wbGlzdD4iKQogCisgICAgZGVmIHRlc3RfeG1sX2VuY29kaW5ncyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFRFU1REQVRBW3BsaXN0bGliLkZNVF9YTUxdCisKKyAgICAgICAgZm9yIHhtbF9lbmNvZGluZywgZW5jb2RpbmcsIGJvbSBpbiBbCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi04JywgJ3V0Zi04JywgY29kZWNzLkJPTV9VVEY4KSwKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTE2JywgJ3V0Zi0xNi1sZScsIGNvZGVjcy5CT01fVVRGMTZfTEUpLAorICAgICAgICAgICAgICAgICAgICAoYid1dGYtMTYnLCAndXRmLTE2LWJlJywgY29kZWNzLkJPTV9VVEYxNl9CRSksCisgICAgICAgICAgICAgICAgICAgICMgRXhwYXQgZG9lcyBub3Qgc3VwcG9ydCBVVEYtMzIKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItbGUnLCBjb2RlY3MuQk9NX1VURjMyX0xFKSwKKyAgICAgICAgICAgICAgICAgICAgIyhiJ3V0Zi0zMicsICd1dGYtMzItYmUnLCBjb2RlY3MuQk9NX1VURjMyX0JFKSwKKyAgICAgICAgICAgICAgICBdOgorCisgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9cGxpc3RsaWIuRk1UX1hNTCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gYmFzZS5yZXBsYWNlKGInVVRGLTgnLCB4bWxfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZGF0YSA9IGJvbSArIGRhdGEuZGVjb2RlKCd1dGYtOCcpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworCitjbGFzcyBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pb19kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBwbF9pbiA9IHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiB7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBiJ2J1ZmZlcicsCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGxfb3V0ID0gcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogcGxpc3RsaWIuX0ludGVybmFsRGljdCh7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBwbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICB9KQorICAgICAgICB9KQorCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbF9pbiwgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3Qoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGxfaW4sIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QoZnApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbF9vdXQsIHBsMikKKworICAgIGRlZiB0ZXN0X2J5dGVzX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IGInYnVmZmVyJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwbDIsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KAorICAgICAgICAgICAga2V5PTQyLAorICAgICAgICAgICAgc3ViPXBsaXN0bGliLl9JbnRlcm5hbERpY3QoCisgICAgICAgICAgICAgICAga2V5PTksCisgICAgICAgICAgICAgICAgYWx0PSd2YWx1ZScsCisgICAgICAgICAgICAgICAgZGF0YT1wbGlzdGxpYi5EYXRhKGInYnVmZmVyJyksCisgICAgICAgICAgICApCisgICAgICAgICkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2RhdGFvYmplY3RfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgaW5fZGF0YSA9IHsgJ2tleSc6IHBsaXN0bGliLkRhdGEoYidoZWxsbycpIH0KKyAgICAgICAgb3V0X2RhdGEgPSB7ICdrZXknOiBiJ2hlbGxvJyB9CisKKyAgICAgICAgYnVmID0gcGxpc3RsaWIuZHVtcHMoaW5fZGF0YSkKKworICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIGluX2RhdGEpCisKKyAgICAgICAgY3VyID0gcGxpc3RsaWIubG9hZHMoYnVmLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGN1ciA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIGluX2RhdGEpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYikKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGxpc3RsaWIsIFRlc3RQbGlzdGxpYkRlcHJlY2F0ZWQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQppbmRleCBmOThhMjgwLi5hMWU1YzNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0xLDYgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAogaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNlbGVjdAogaW1wb3J0IF90ZXN0Y2FwaQpAQCAtMTUsNyArMTYsNyBAQAogdHJ5OgogICAgIHNlbGVjdC5wb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfcG9sbCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIikKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC03NiwxMyArNzcsMTEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1BJUEVTKQogCi0gICAgZGVmIHBvbGxfdW5pdF90ZXN0cyhzZWxmKToKKyAgICBkZWYgdGVzdF9wb2xsX3VuaXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgcmV0dXJucyBOVkFMIGZvciBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICBGRCA9IDQyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNsb3NlKEZEKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgRkQsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgb3MuY2xvc2UoRkQpCisgICAgICAgIG9zLmNsb3NlKHcpCiAgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHAucmVnaXN0ZXIoRkQpCiAgICAgICAgIHIgPSBwLnBvbGwoKQpAQCAtMTI1LDcgKzEyNCw5IEBACiAKICAgICBkZWYgdGVzdF9wb2xsMihzZWxmKToKICAgICAgICAgY21kID0gJ2ZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gdGVzdGluZy4uLjsgc2xlZXAgMTsgZG9uZScKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemU9MCkKKyAgICAgICAgcCA9IHByb2Muc3Rkb3V0CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCiAgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKQEAgLTEzNSw3ICsxMzYsNyBAQAogICAgICAgICAgICAgZmQsIGZsYWdzID0gZmRsaXN0WzBdCiAgICAgICAgICAgICBpZiBmbGFncyAmIHNlbGVjdC5QT0xMSFVQOgogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICIiOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gYiIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yOiBwaXBlIHNlZW1zIHRvIGJlIGNsb3NlZCwgYnV0IHN0aWxsIHJldHVybnMgZGF0YScpCiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtMTQzLDYgKzE0NCw3IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYid0ZXN0aW5nLi4uXG4nKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBzZWxlY3QucG9sbDogJXMnICUgZmRsaXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCBjYmNlODUyLi43MGZlNDI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMTgsNiArMTgsMTQgQEAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogUE9SVCA9IDAKIAorU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCityZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKKwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIExJU1RfUkVTUCA9IGInMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKIFJFVFJfUkVTUCA9IGIiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCkBAIC0zMywxMSArNDEsMTUgQEAKIAogY2xhc3MgRHVtbXlQT1AzSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIENBUEFTID0geydVSURMJzogW10sICdJTVBMRU1FTlRBVElPTic6IFsncHl0aG9uLXRlc3RsaWItcG9wLXNlcnZlciddfQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQorICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKQEAgLTExMiw2ICsxMjQsNjUgQEAKICAgICAgICAgc2VsZi5wdXNoKCcrT0sgY2xvc2luZy4nKQogICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKKyAgICBkZWYgX2dldF9jYXBhcyhzZWxmKToKKyAgICAgICAgX2NhcGFzID0gZGljdChzZWxmLkNBUEFTKQorICAgICAgICBpZiBub3Qgc2VsZi50bHNfYWN0aXZlIGFuZCBTVVBQT1JUU19TU0w6CisgICAgICAgICAgICBfY2FwYXNbJ1NUTFMnXSA9IFtdCisgICAgICAgIHJldHVybiBfY2FwYXMKKworICAgIGRlZiBjbWRfY2FwYShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cycpCisgICAgICAgIGlmIHNlbGYuX2dldF9jYXBhcygpOgorICAgICAgICAgICAgZm9yIGNhcCwgcGFyYW1zIGluIHNlbGYuX2dldF9jYXBhcygpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgX2xuID0gW2NhcF0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIF9sbi5leHRlbmQocGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnICcuam9pbihfbG4pKQorICAgICAgICBzZWxmLnB1c2goJy4nKQorCisgICAgaWYgU1VQUE9SVFNfU1NMOgorCisgICAgICAgIGRlZiBjbWRfc3RscyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfYWN0aXZlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicpCisgICAgICAgICAgICAgICAgdGxzX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHRsc19zb2NrKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnLUVSUiBDb21tYW5kIG5vdCBwZXJtaXR0ZWQgd2hlbiBUTFMgYWN0aXZlJykKKworICAgICAgICBkZWYgX2RvX3Rsc19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19zdGFydGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogCiBjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CiAKQEAgLTIzNiwxOSArMzA3LDM2IEBACiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQogCisgICAgZGVmIHRlc3RfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBhLmtleXMoKSkKKwogICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CiAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LmZpbGUpCiAKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCiAKLVNVUFBPUlRTX1NTTCA9IEZhbHNlCi1pZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6Ci0gICAgaW1wb3J0IHNzbAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQogCi0gICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQorCisKK2lmIFNVUFBPUlRTX1NTTDoKIAogICAgIGNsYXNzIER1bW15UE9QM19TU0xIYW5kbGVyKER1bW15UE9QM0hhbmRsZXIpOgogCkBAIC0yNjAsMzUgKzM0OCwxMyBAQAogICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCiAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc3NsX3NvY2tldCkKICAgICAgICAgICAgICMgTXVzdCB0cnkgaGFuZHNoYWtlIGJlZm9yZSBjYWxsaW5nIHB1c2goKQotICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCiAKLSAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgRHVtbXlQT1AzSGFuZGxlci5oYW5kbGVfcmVhZChzZWxmKQotCi1yZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKIAogQHJlcXVpcmVzX3NzbAogY2xhc3MgVGVzdFBPUDNfU1NMQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CkBAIC0zMDYsMjAgKzM3Miw2MCBAQAogICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAogICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QM19TU0woc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuY2xpZW50LnNvY2suY29udGV4dCwgY3R4KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubm9vcCgpLnN0YXJ0c3dpdGgoYicrT0snKSkKIAorICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuc3RscykKKworICAgIHRlc3Rfc3Rsc19jb250ZXh0ID0gdGVzdF9zdGxzCisKKyAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKKworQHJlcXVpcmVzX3NzbAorY2xhc3MgVGVzdFBPUDNfVExTQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CisgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDMuc3RscygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlQT1AzU2VydmVyKChIT1NULCBQT1JUKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5jbGllbnQuc3RscygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xpZW50LmZpbGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuY2xpZW50LnNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgICAgICBleGNlcHQgcG9wbGliLmVycm9yX3Byb3RvOgorICAgICAgICAgICAgICAgICMgaGFwcGVucyBpbiB0aGUgdGVzdF90b29fbG9uZ19saW5lcyBjYXNlOyB0aGUgb3ZlcmxvbmcKKyAgICAgICAgICAgICAgICAjIHJlc3BvbnNlIHdpbGwgYmUgdHJlYXRlZCBhcyByZXNwb25zZSB0byBRVUlUIGFuZCByYWlzZQorICAgICAgICAgICAgICAgICMgdGhpcyBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGInU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMzc3LDcgKzQ4Myw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtUZXN0UE9QM0NsYXNzLCBUZXN0VGltZW91dHMsCi0gICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3NdCisgICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3MsIFRlc3RQT1AzX1RMU0NsYXNzXQogICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDAyYmI2YWMuLjFlY2VlYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNTgyLDggKzU4MiwxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjI2LDcgKzYyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC02ODQsNDEgKzY4NiwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQppbmRleCAwZTdkODY2Li40MTI4NDljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtMTg2LDYzICsxODYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2NyZWF0ZV9maWxlKGZpbGVuYW1lKToKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShiJ2ZvbycpCi0KLSAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKLSAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVmaWxlKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVmaWxlIGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotCi0gICAgICAgIG9zLnN5bWxpbmsodGVzdF9mbjEsIHRlc3RfZm4yKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKLQotCi0gICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICB0ZXN0X2ZucyA9IFt0ZXN0X2ZuXSoyCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICJwb3NpeHBhdGguc2FtZXN0YXQgZG9lcyBub3Qgd29yayBvbiBsaW5rcyBpbiBXaW5kb3dzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmtzKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCi0gICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgb3Muc3ltbGluaygqdGVzdF9mbnMpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZXN0YXQpCi0KICAgICBkZWYgdGVzdF9pc21vdW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KCIvIiksIFRydWUpCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKQEAgLTU5NSwxMSArNTM4LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmdldGN3ZGIgPSByZWFsX2dldGN3ZGIKIAotICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKLSAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVvcGVuZmlsZShhLmZpbGVubygpLCBiLmZpbGVubygpKSkKLQogCiBjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQppbmRleCBhODUyOThlLi4zZDM2NGM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQpAQCAtMSwzICsxLDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisKIGltcG9ydCBwcHJpbnQKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCB1bml0dGVzdApAQCAtNTMwLDYgKzUzMiw1NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGRpY3QuZnJvbWtleXMoa2V5cywgMCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICd7JXI6IDAsICVyOiAwfScgJSB0dXBsZShzb3J0ZWQoa2V5cywga2V5PWlkKSkpCiAKKyAgICBkZWYgdGVzdF9zdHJfd3JhcChzZWxmKToKKyAgICAgICAgIyBwcHJpbnQgdHJpZXMgdG8gd3JhcCBzdHJpbmdzIGludGVsbGlnZW50bHkKKyAgICAgICAgZm94ID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChmb3gsIHdpZHRoPTIwKSwgIiIiXAorJ3RoZSBxdWljayBicm93biAnCisnZm94IGp1bXBlZCBvdmVyICcKKydhIGxhenkgZG9nJyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7J2EnOiAxLCAnYic6IGZveCwgJ2MnOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0yNiksICIiIlwKK3snYSc6IDEsCisgJ2InOiAndGhlIHF1aWNrIGJyb3duICcKKyAgICAgICdmb3gganVtcGVkIG92ZXIgJworICAgICAgJ2EgbGF6eSBkb2cnLAorICdjJzogMn0iIiIpCisgICAgICAgICMgV2l0aCBzb21lIHNwZWNpYWwgY2hhcmFjdGVycworICAgICAgICAjIC0gXG4gYWx3YXlzIHRyaWdnZXJzIGEgbmV3IGxpbmUgaW4gdGhlIHBwcmludAorICAgICAgICAjIC0gXHQgYW5kIFxuIGFyZSBlc2NhcGVkCisgICAgICAgICMgLSBub24tQVNDSUkgaXMgYWxsb3dlZAorICAgICAgICAjIC0gYW4gYXBvc3Ryb3BoZSBkb2Vzbid0IGRpc3J1cHQgdGhlIHBwcmludAorICAgICAgICBzcGVjaWFsID0gIlBvcnRvbnMgZGl4IGJvbnMgXCJ3aGlza3lzXCJcbsOgIGwnYXZvY2F0IGdvdWphdFx0IHF1aSBmdW1haXQgYXUgem9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTIwKSwgIiIiXAorJ1BvcnRvbnMgZGl4IGJvbnMgJworJyJ3aGlza3lzIlxcbicKKyLDoCBsJ2F2b2NhdCAiCisnZ291amF0XFx0IHF1aSAnCisnZnVtYWl0IGF1IHpvbyciIiIpCisgICAgICAgICMgQW4gdW53cmFwcGFibGUgc3RyaW5nIGlzIGZvcm1hdHRlZCBhcyBpdHMgcmVwcgorICAgICAgICB1bndyYXBwYWJsZSA9ICJ4IiAqIDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHVud3JhcHBhYmxlLCB3aWR0aD04MCksIHJlcHIodW53cmFwcGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KCcnKSwgIicnIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBwcHJpbnQgaXMgYSB1c2FibGUgcmVwcgorICAgICAgICBzcGVjaWFsICo9IDEwCisgICAgICAgIGZvciB3aWR0aCBpbiByYW5nZSgzLCA0MCk6CisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD13aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiKCIgKyBmb3JtYXR0ZWQgKyAiKSIpLCBzcGVjaWFsKQorCisgICAgZGVmIHRlc3RfY29tcGFjdChzZWxmKToKKyAgICAgICAgbyA9IChbbGlzdChyYW5nZShpICogaSkpIGZvciBpIGluIHJhbmdlKDUpXSArCisgICAgICAgICAgICAgW2xpc3QocmFuZ2UoaSkpIGZvciBpIGluIHJhbmdlKDYpXSkKKyAgICAgICAgZXhwZWN0ZWQgPSAiIiJcCitbW10sIFswXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwKKyBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsCisgIDE0LCAxNV0sCisgW10sIFswXSwgWzAsIDFdLCBbMCwgMSwgMl0sIFswLCAxLCAyLCAzXSwKKyBbMCwgMSwgMiwgMywgNF1dIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9NDgsIGNvbXBhY3Q9VHJ1ZSksIGV4cGVjdGVkKQorCiAKIGNsYXNzIERvdHRlZFByZXR0eVByaW50ZXIocHByaW50LlByZXR0eVByaW50ZXIpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQppbmRleCA5ZDZkYmVhLi43ZWVhMzQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKQEAgLTEsNjIgKzEsNTUgQEAKLSIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLgotIiIiCi0KLSMgSW4gMi42LCB0aGlzIGdpdmVzIHVzIHRoZSBiZWhhdmlvciB3ZSB3YW50LiAgSW4gMy4wLCBpdCBoYXMKLSMgIG5vIGZ1bmN0aW9uLCBidXQgaXQgc3RpbGwgbXVzdCBwYXJzZSBjb3JyZWN0bHkuCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi0KIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCi10cnk6Ci0gICAgIyAzLngKLSAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgMi54Ci0gICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBOb3REZWZpbmVkID0gb2JqZWN0KCkKIAogIyBBIGRpc3BhdGNoIHRhYmxlIGFsbCA4IGNvbWJpbmF0aW9ucyBvZiBwcm92aWRpbmcKLSMgIHNlcCwgZW5kLCBhbmQgZmlsZQorIyBzZXAsIGVuZCwgYW5kIGZpbGUuCiAjIEkgdXNlIHRoaXMgbWFjaGluZXJ5IHNvIHRoYXQgSSdtIG5vdCBqdXN0IHBhc3NpbmcgZGVmYXVsdAotIyAgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCi0jICBhcmd1bWVudHMKKyMgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCisjIGFyZ3VtZW50cy4KIGRpc3BhdGNoID0gewogICAgIChGYWxzZSwgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoKmFyZ3MpLAogICAgIChGYWxzZSwgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAotICAgIH0KKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKK30KKwogCiAjIENsYXNzIHVzZWQgdG8gdGVzdCBfX3N0cl9fIGFuZCBwcmludAogY2xhc3MgQ2xhc3NXaXRoX19zdHJfXzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CiAgICAgICAgIHNlbGYueCA9IHgKKwogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi54CiAKLWNsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAotICAgICAgICAgICAgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkLCBmaWxlPU5vdERlZmluZWQpOgotICAgICAgICAjIENhcHR1cmUgc3lzLnN0ZG91dCBpbiBhIFN0cmluZ0lPLiAgQ2FsbCBwcmludCB3aXRoIGFyZ3MsCi0gICAgICAgICMgIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0Ci0gICAgICAgICMgIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCiAKLSAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsIGFuZCBmaWxlCi0gICAgICAgICMgIGFyZSBkZWZpbmVkCitjbGFzcyBUZXN0UHJpbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLiIiIgorCisgICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAorICAgICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6CisgICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKKyAgICAgICAgIyBhbmQgd2l0aCBzZXAsIGVuZCwgYW5kIGZpbGUsIGlmIHRoZXkncmUgZGVmaW5lZC4gIFJlc3VsdAorICAgICAgICAjIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCisKKyAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsCisgICAgICAgICMgYW5kIGZpbGUgYXJlIGRlZmluZWQuCiAgICAgICAgIGZuID0gZGlzcGF0Y2hbKHNlcCBpcyBub3QgTm90RGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIG5vdCBOb3REZWZpbmVkKV0KQEAgLTY5LDcgKzYyLDcgQEAKICAgICBkZWYgdGVzdF9wcmludChzZWxmKToKICAgICAgICAgZGVmIHgoZXhwZWN0ZWQsIGFyZ3MsIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCk6CiAgICAgICAgICAgICAjIFJ1biB0aGUgdGVzdCAyIHdheXM6IG5vdCB1c2luZyBmaWxlLCBhbmQgdXNpbmcKLSAgICAgICAgICAgICMgIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTworICAgICAgICAgICAgIyBmaWxlIGRpcmVjdGVkIHRvIGEgU3RyaW5nSU8uCiAKICAgICAgICAgICAgIHNlbGYuY2hlY2soZXhwZWN0ZWQsIGFyZ3MsIHNlcD1zZXAsIGVuZD1lbmQpCiAKQEAgLTEwMSwxMSArOTQsNiBAQAogICAgICAgICB4KCcqXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnKicpLCkpCiAgICAgICAgIHgoJ2FiYyAxXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnYWJjJyksIDEpKQogCi0jICAgICAgICAjIDIueCB1bmljb2RlIHRlc3RzCi0jICAgICAgICB4KHUnMSAyXG4nLCAoJzEnLCB1JzInKSkKLSMgICAgICAgIHgodSd1XDEyMzRcbicsICh1J3VcMTIzNCcsKSkKLSMgICAgICAgIHgodScgIGFiYyAxXG4nLCAoJyAnLCBDbGFzc1dpdGhfX3N0cl9fKHUnYWJjJyksIDEpKQotCiAgICAgICAgICMgZXJyb3JzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBzZXA9MykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIGVuZD0zKQpAQCAtMTEzLDEyICsxMDEsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3ByaW50X2ZsdXNoKHNlbGYpOgogICAgICAgICAjIG9wZXJhdGlvbiBvZiB0aGUgZmx1c2ggZmxhZwotICAgICAgICBjbGFzcyBmaWxlbGlrZSgpOgorICAgICAgICBjbGFzcyBmaWxlbGlrZToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gPSAnJwogICAgICAgICAgICAgICAgIHNlbGYuZmx1c2hlZCA9IDAKKwogICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHN0cik6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0dGVuICs9IHN0cgorCiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkICs9IDEKIApAQCAtMTMwLDE1ICsxMjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZsdXNoZWQsIDIpCiAKICAgICAgICAgIyBlbnN1cmUgZXhjZXB0aW9ucyBmcm9tIGZsdXNoIGFyZSBwYXNzZWQgdGhyb3VnaAotICAgICAgICBjbGFzcyBub2ZsdXNoKCk6CisgICAgICAgIGNsYXNzIG5vZmx1c2g6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwcmludCwgMSwgZmlsZT1ub2ZsdXNoKCksIGZsdXNoPVRydWUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UHJpbnQpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQppbmRleCBjZDdlYzU4Li4xZmMzYzQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CkBAIC0zLDkgKzMsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBwc3RhdHMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCiBmcm9tIGRpZmZsaWIgaW1wb3J0IHVuaWZpZWRfZGlmZgogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGltcG9ydCBwcm9maWxlCiBmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jLCB0aW1lcgpAQCAtMTQsOSArMTYsMTMgQEAKIGNsYXNzIFByb2ZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHByb2ZpbGVyY2xhc3MgPSBwcm9maWxlLlByb2ZpbGUKKyAgICBwcm9maWxlcm1vZHVsZSA9IHByb2ZpbGUKICAgICBtZXRob2RuYW1lcyA9IFsncHJpbnRfc3RhdHMnLCAncHJpbnRfY2FsbGVycycsICdwcmludF9jYWxsZWVzJ10KICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gJzowKG1heCknCiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKICAgICBkZWYgZ2V0X2V4cGVjdGVkX291dHB1dChzZWxmKToKICAgICAgICAgcmV0dXJuIF9Qcm9maWxlT3V0cHV0CiAKQEAgLTc0LDYgKzgwLDE5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuZXhwZWN0ZWRfbWF4X291dHB1dCwgcmVzLAogICAgICAgICAgICAgICAgICJQcm9maWxpbmcgezAhcn0gZGlkbid0IHJlcG9ydCBtYXg6XG57MX0iLmZvcm1hdChzdG10LCByZXMpKQogCisgICAgZGVmIHRlc3RfcnVuKHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIikKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIiwgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0X3J1bmN0eChzZWxmKToKKyAgICAgICAgd2l0aCBzaWxlbnQoKToKKyAgICAgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuY3R4KCJ0ZXN0ZnVuYygpIiwgZ2xvYmFscygpLCBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPVRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCisKIAogZGVmIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0KGZpbGVuYW1lLCBjbHMpOgogICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucnN0cmlwKCdjbycpCkBAIC05NSw2ICsxMTQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLCByZXN1bHRzW2krMV0pKQogICAgICAgICBmLndyaXRlKCdcbmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6XG4gICAgbWFpbigpXG4nKQogCitAY29udGV4dG1hbmFnZXIKK2RlZiBzaWxlbnQoKToKKyAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChQcm9maWxlVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKaW5kZXggMjkyOTdmOC4uODkxNjg2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgIyNkZWJ1ZygiUmVhZGluZyBmcm9tIG1hc3Rlcl9mZCBub3cgdGhhdCB0aGUgY2hpbGQgaGFzIGV4aXRlZCIpCiAgICAgICAgICAgICAjI3RyeToKICAgICAgICAgICAgICMjICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCi0gICAgICAgICAgICAjI2V4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICMjZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIyAgICBwYXNzCiAgICAgICAgICAgICAjI2Vsc2U6CiAgICAgICAgICAgICAjIyAgICByYWlzZSBUZXN0RmFpbGVkKCJSZWFkIGZyb20gbWFzdGVyX2ZkIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQppbmRleCBmM2MxYTZhLi4xNTRjMDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CkBAIC0xLDcgKzEsOSBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMTMsNyArMTUsNyBAQAogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICBzZWxmLnB5Y19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICdjJwotICAgICAgICBzZWxmLmNhY2hlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5jd2RfZHJpdmUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUob3MuZ2V0Y3dkKCkpWzBdCiAgICAgICAgICMgSW4gdGhlc2UgdGVzdHMgd2UgY29tcHV0ZSByZWxhdGl2ZSBwYXRocy4gIFdoZW4gdXNpbmcgV2luZG93cywgdGhlCiAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBwYXRoIGFuZCB0aGUgJ3NlbGYuc291cmNlX3BhdGgnIG1pZ2h0IGJlCkBAIC0zNSw2ICszNywyNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAorICAgIGRlZiB0ZXN0X2RvX25vdF9vdmVyd3JpdGVfc3ltbGlua3Moc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIHN5bWxpbmssIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNlbGYucHljX3BhdGggKyAnLmFjdHVhbCcsIHNlbGYucHljX3BhdGgpCisgICAgICAgIGV4Y2VwdCAoTm90SW1wbGVtZW50ZWRFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWVkIHRvIGJlIGFibGUgdG8gY3JlYXRlIGEgc3ltbGluayBmb3IgYSBmaWxlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzbGluayhzZWxmLnB5Y19wYXRoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMob3MuZGV2bnVsbCkgb3Igb3MucGF0aC5pc2ZpbGUob3MuZGV2bnVsbCksCisgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgb3MuZGV2bnVsbCBhbmQgZm9yIGl0IHRvIGJlIGEgbm9uLXJlZ3VsYXIgZmlsZScpCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9ub25yZWd1bGFyX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIEluIHRoZSBmYWNlIG9mIGEgY2ZpbGUgYXJndW1lbnQgYmVpbmcgYSBub24tcmVndWxhciBmaWxlLCBiYWlsIG91dC4KKyAgICAgICAgIyBJc3N1ZSAjMTcyMjIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIG9zLmRldm51bGwpCisKICAgICBkZWYgdGVzdF9jYWNoZV9wYXRoKHNlbGYpOgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCkBAIC01NCw4ICs3NiwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5Q29tcGlsZVRlc3RzKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAnbm9uLXJvb3QgdXNlciByZXF1aXJlZCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IGNvbnRyb2wgZGlyZWN0b3J5IHBlcm1pc3Npb25zIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnNfcHJvcGFnYXRlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGV4Y2VwdGlvbnMgcmFpc2VkIHRoYW5rcyB0byBpc3N1ZXMgd2l0aCB3cml0aW5nCisgICAgICAgICMgYnl0ZWNvZGUuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MjQ0CisgICAgICAgIG1vZGUgPSBvcy5zdGF0KHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBvcy5jaG1vZChzZWxmLmRpcmVjdG9yeSwgc3RhdC5TX0lSRUFEKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIG1vZGUuc3RfbW9kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weSBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CmluZGV4IGU4Mzk4OWUuLjg4YWZmODkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgncHljbGJyJykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnYXN0JykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZG9jdGVzdCcsIGlnbm9yZT0oIlRlc3RSZXN1bHRzIiwgIl9TcG9vZk91dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb2NUZXN0Q2FzZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiLCAnX0RvY1Rlc3RTdWl0ZScpKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkaWZmbGliJywgaWdub3JlPSgiTWF0Y2giLCkpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JzKHNlbGYpOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIGNtKCdyYW5kb20nLCBpZ25vcmU9KCdSYW5kb20nLCkpICAjIGZyb20gX3JhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIENvcmVHZW5lcmF0b3IKICAgICAgICAgY20oJ2NnaScsIGlnbm9yZT0oJ2xvZycsKSkgICAgICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdwaWNrbGUnKQotICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCAnX2FpZmNfcGFyYW1zJykpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgogICAgICAgICBjbSgncGRiJykKICAgICAgICAgY20oJ3B5ZG9jJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IDQzZjQxNjMuLmNkZjI4YTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTI5LDEwICszMCw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi0jIEp1c3QgaW4gY2FzZSBzeXMubW9kdWxlc1sidGVzdCJdIGhhcyB0aGUgb3B0aW9uYWwgYXR0cmlidXRlIF9fbG9hZGVyX18uCi1pZiBoYXNhdHRyKHB5ZG9jX21vZCwgIl9fbG9hZGVyX18iKToKLSAgICBkZWwgcHlkb2NfbW9kLl9fbG9hZGVyX18KLQogaWYgdGVzdC5zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKICAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoCiAgICAgICAgICdkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpJywKQEAgLTIxMiw2ICsyMDksNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTQyMSw2ICs0ODcsMzEgQEAKICAgICAgICAgICAgIHN5bm9wc2lzID0gcHlkb2Muc3lub3BzaXMoVEVTVEZOLCB7fSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lub3BzaXMsICdsaW5lIDE6IGhceGU5JykKIAorICAgIGRlZiB0ZXN0X3NwbGl0ZG9jX3dpdGhfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGV4YW1wbGVfc3RyaW5nID0gIkkgQW0gQSBEb2NcblxuXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLnNwbGl0ZG9jKGV4YW1wbGVfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0kgQW0gQSBEb2MnLCAnXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uJykpCisKKyAgICBkZWYgdGVzdF9pc19vYmplY3Rfb3JfbWV0aG9kKHNlbGYpOgorICAgICAgICBkb2MgPSBweWRvYy5Eb2MoKQorICAgICAgICAjIEJvdW5kIE1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGRvYy5mYWlsKSkKKyAgICAgICAgIyBNZXRob2QgRGVzY3JpcHRvcgorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGludC5fX2FkZF9fKSkKKyAgICAgICAgIyBTdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5faXNfc29tZV9tZXRob2QoIkkgYW0gbm90IGEgbWV0aG9kIikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5fbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB5ZG9jLmlzcGFja2FnZSh0ZXN0X2RpcikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0ZXN0X2RpcjoKKyAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIG9wZW4oaW5pdF9wYXRoLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfcGF0aCkKKwogICAgIGRlZiB0ZXN0X2FsbG1ldGhvZHMoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMTc0NzY6IGFsbG1ldGhvZHMgd2FzIG5vIGxvbmdlciByZXR1cm5pbmcgdW5ib3VuZCBtZXRob2RzLgogICAgICAgICAjIFRoaXMgdGVzdCBpcyBhIGJpdCBmcmFnaWxlIGluIHRoZSBmYWNlIG9mIGNoYW5nZXMgdG8gb2JqZWN0IGFuZCB0eXBlLApAQCAtNjE1LDYgKzcwNiwxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocHlkb2MuSGVscGVyLmtleXdvcmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoa2V5d29yZC5rd2xpc3QpKQogCitjbGFzcyBQeWRvY1dpdGhNZXRhQ2xhc3Nlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgREEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoREEpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhPbmVNZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdMSUZFJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0xJRkUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4xICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aFR3b01ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldCgKKyAgICAgICAgICAgICAgICAgICAgWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZhaWwxID0gZmFpbDIgPSBGYWxzZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MxKQorICAgICAgICBleHBlY3RlZF90ZXh0MSA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjIgJSBfX25hbWVfXworICAgICAgICByZXN1bHQxID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQxICE9IGV4cGVjdGVkX3RleHQxOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCisgICAgICAgICAgICBmYWlsMSA9IFRydWUKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMikKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDIgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MiA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MiAhPSBleHBlY3RlZF90ZXh0MjoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQyLCByZXN1bHQyKQorICAgICAgICAgICAgZmFpbDIgPSBUcnVlCisgICAgICAgIGlmIGZhaWwxIG9yIGZhaWwyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJywgJ2hlcmUnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIGhlcmUgPSAncHJlc2VudCEnCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKIEByZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CkBAIC02MjQsNiArODM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggZDM2M2E2YS4uN2QxYTUzYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTEsMTAgKzEsMTIgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHRpbWUKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB3YXJuaW5ncworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIGZyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC00Niw2ICs0OCw0OCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShzZWxmLmdlbiksIFtdKQogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5fdXJhbmRvbScpICMgb3MudXJhbmRvbQorICAgIGRlZiB0ZXN0X3NlZWRfd2hlbl9yYW5kb21uZXNzX3NvdXJjZV9ub3RfZm91bmQoc2VsZiwgdXJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uc2VlZCgpIHVzZXMgdGltZS50aW1lKCkgd2hlbiBhbiBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLiBUbyB0ZXN0IHRoaXMgb24gbWFjaGluZXMgd2VyZSBpdAorICAgICAgICAjIGV4aXN0cywgcnVuIHRoZSBhYm92ZSB0ZXN0LCB0ZXN0X3NlZWRhcmdzKCksIGFnYWluIGFmdGVyIG1vY2tpbmcKKyAgICAgICAgIyBvcy51cmFuZG9tKCkgc28gdGhhdCBpdCByYWlzZXMgdGhlIGV4Y2VwdGlvbiBleHBlY3RlZCB3aGVuIHRoZQorICAgICAgICAjIHJhbmRvbW5lc3Mgc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgIHVyYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2VsZi50ZXN0X3NlZWRhcmdzKCkKKworICAgIGRlZiB0ZXN0X3NodWZmbGUoc2VsZik6CisgICAgICAgIHNodWZmbGUgPSBzZWxmLmdlbi5zaHVmZmxlCisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgW10pCisgICAgICAgIGxzdCA9IFszN10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbMzddKQorICAgICAgICBzZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgc2h1ZmZsZWRfc2VxcyA9IFtsaXN0KHJhbmdlKG4pKSBmb3IgbiBpbiByYW5nZSgxMCldCisgICAgICAgIGZvciBzaHVmZmxlZF9zZXEgaW4gc2h1ZmZsZWRfc2VxczoKKyAgICAgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfc2VxKQorICAgICAgICBmb3IgKHNlcSwgc2h1ZmZsZWRfc2VxKSBpbiB6aXAoc2Vxcywgc2h1ZmZsZWRfc2Vxcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCBsZW4oc2h1ZmZsZWRfc2VxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlcSksIHNldChzaHVmZmxlZF9zZXEpKQorICAgICAgICAjIFRoZSBhYm92ZSB0ZXN0cyBhbGwgd291bGQgcGFzcyBpZiB0aGUgc2h1ZmZsZSB3YXMgYQorICAgICAgICAjIG5vLW9wLiBUaGUgZm9sbG93aW5nIG5vbi1kZXRlcm1pbmlzdGljIHRlc3QgY292ZXJzIHRoYXQuICBJdAorICAgICAgICAjIGFzc2VydHMgdGhhdCB0aGUgc2h1ZmZsZWQgc2VxdWVuY2Ugb2YgMTAwMCBkaXN0aW5jdCBlbGVtZW50cworICAgICAgICAjIG11c3QgYmUgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZS4gQWx0aG91Z2ggdGhlcmUgaXMKKyAgICAgICAgIyBtYXRoZW1hdGljYWxseSBhIG5vbi16ZXJvIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBjb3VsZAorICAgICAgICAjIGFjdHVhbGx5IGhhcHBlbiBpbiBhIGdlbnVpbmVseSByYW5kb20gc2h1ZmZsZSwgaXQgaXMKKyAgICAgICAgIyBjb21wbGV0ZWx5IG5lZ2xpZ2libGUsIGdpdmVuIHRoYXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZQorICAgICAgICAjIHBlcm11dGF0aW9ucyBvZiAxMDAwIG9iamVjdHMgaXMgMTAwMCEgKGZhY3RvcmlhbCBvZiAxMDAwKSwKKyAgICAgICAgIyB3aGljaCBpcyBjb25zaWRlcmFibHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBhdG9tcyBpbiB0aGUKKyAgICAgICAgIyB1bml2ZXJzZS4uLgorICAgICAgICBsc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlZF9sc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlKHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzdCAhPSBzaHVmZmxlZF9sc3QpCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKwogICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKICAgICAgICAgY2hvaWNlID0gc2VsZi5nZW4uY2hvaWNlCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CkBAIC02NSw2ICsxMDksOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odW5pcSksIGspCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pcSA8PSBzZXQocG9wdWxhdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uc2FtcGxlKFtdLCAwKSwgW10pICAjIHRlc3QgZWRnZSBjYXNlIE49PWs9PTAKKyAgICAgICAgIyBFeGNlcHRpb24gcmFpc2VkIGlmIHNpemUgb2Ygc2FtcGxlIGV4Y2VlZHMgdGhhdCBvZiBwb3B1bGF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnNhbXBsZSwgcG9wdWxhdGlvbiwgTisxKQogCiAgICAgZGVmIHRlc3Rfc2FtcGxlX2Rpc3RyaWJ1dGlvbihzZWxmKToKICAgICAgICAgIyBGb3IgdGhlIGVudGlyZSBhbGxvd2FibGUgcmFuZ2Ugb2YgMCA8PSBrIDw9IE4sIHZhbGlkYXRlIHRoYXQKQEAgLTIwNSw2ICsyNTEsMjUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKICAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiByYW5nZSgxMDApXSkpCiAKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2Vfbm9udW5pdF9zdGVwKHNlbGYpOgorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDEwLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJpbnQsICgwLCAyLCA0LCA2LCA4KSkKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpbnQsIDApCisKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfZXJyb3JzKHNlbGYpOgorICAgICAgICByYWlzZXMgPSBwYXJ0aWFsKHNlbGYuYXNzZXJ0UmFpc2VzLCBWYWx1ZUVycm9yLCBzZWxmLmdlbi5yYW5kcmFuZ2UpCisgICAgICAgICMgRW1wdHkgcmFuZ2UKKyAgICAgICAgcmFpc2VzKDMsIDMpCisgICAgICAgIHJhaXNlcygtNzIxKQorICAgICAgICByYWlzZXMoMCwgMTAwLCAtMTIpCisgICAgICAgICMgTm9uLWludGVnZXIgc3RhcnQvc3RvcAorICAgICAgICByYWlzZXMoMy4xNDE1OSkKKyAgICAgICAgcmFpc2VzKDAsIDIuNzE4MjgpCisgICAgICAgICMgWmVybyBhbmQgbm9uLWludGVnZXIgc3RlcAorICAgICAgICByYWlzZXMoMCwgNDIsIDApCisgICAgICAgIHJhaXNlcygwLCA0MiwgMy4xNDE1OSkKKwogICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoMSwgMTAwMCk6CkBAIC0yNzQsNiArMzM5LDE2IEBACiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKIAorICAgICAgICAjIExpdHRsZSB0cmljayB0byBtYWtlICJ0dXBsZSh4ICUgKDIqKjMyKSBmb3IgeCBpbiBpbnRlcm5hbHN0YXRlKSIKKyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yLiBJIGNhbm5vdCB0aGluayBvZiBhIHNpbXBsZSB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBzbworICAgICAgICAjIEkgYW0gb3B0aW5nIGZvciB1c2luZyBhIGdlbmVyYXRvciBhcyB0aGUgbWlkZGxlIGFyZ3VtZW50IG9mIHNldHN0YXRlCisgICAgICAgICMgd2hpY2ggYXR0ZW1wdHMgdG8gY2FzdCBhIE5hTiB0byBpbnRlZ2VyLgorICAgICAgICBzdGF0ZV92YWx1ZXMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpWzFdCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IGxpc3Qoc3RhdGVfdmFsdWVzKQorICAgICAgICBzdGF0ZV92YWx1ZXNbLTFdID0gZmxvYXQoJ25hbicpCisgICAgICAgIHN0YXRlID0gKGludCh4KSBmb3IgeCBpbiBzdGF0ZV92YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBzdGF0ZSwgTm9uZSkpCisKICAgICBkZWYgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJlIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gd2l0aCByZXN1bHRzIGZyb20gdGhlIG9yaWdpbmFsCiAgICAgICAgICMgY29kZS4gIENyZWF0ZSAyMDAwIDUzLWJpdCBwcmVjaXNpb24gcmFuZG9tIGZsb2F0cy4gIENvbXBhcmUgb25seQpAQCAtNDEzLDYgKzQ4OCwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19vdmVycmlkZW5fcmFuZG9tKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uX3JhbmRiZWxvdygpIGNhbiBvbmx5IHVzZSByYW5kb20oKSB3aGVuIHRoZSBidWlsdC1pbiBvbmUKKyAgICAgICAgIyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2Qgd2FzIHN1cHBsaWVkLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKS5yYW5kb20KKyAgICAgICAgbWF4c2l6ZSA9IDE8PHJhbmRvbS5CUEYKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgICMgUG9wdWxhdGlvbiByYW5nZSB0b28gbGFyZ2UgKG4gPj0gbWF4c2l6ZSkKKyAgICAgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobWF4c2l6ZSsxLCBtYXhzaXplID0gbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyg1NjQwLCBtYXhzaXplID0gbWF4c2l6ZSkKKworICAgICAgICAjIFRoaXMgbWlnaHQgYmUgZ29pbmcgdG9vIGZhciB0byB0ZXN0IGEgc2luZ2xlIGxpbmUsIGJ1dCBiZWNhdXNlIG9mIG91cgorICAgICAgICAjIG5vYmxlIGFpbSBvZiBhY2hpZXZpbmcgMTAwJSB0ZXN0IGNvdmVyYWdlIHdlIG5lZWQgdG8gd3JpdGUgYSBjYXNlIGluCisgICAgICAgICMgd2hpY2ggdGhlIGZvbGxvd2luZyBsaW5lIGluIFJhbmRvbS5fcmFuZGJlbG93KCkgZ2V0cyBleGVjdXRlZDoKKyAgICAgICAgIworICAgICAgICAjIHJlbSA9IG1heHNpemUgJSBuCisgICAgICAgICMgbGltaXQgPSAobWF4c2l6ZSAtIHJlbSkgLyBtYXhzaXplCisgICAgICAgICMgciA9IHJhbmRvbSgpCisgICAgICAgICMgd2hpbGUgciA+PSBsaW1pdDoKKyAgICAgICAgIyAgICAgciA9IHJhbmRvbSgpICMgPD09ICpUaGlzIGxpbmUqIDw9PTwKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlZm9yZSwgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHdoaWxlIGxvb3AgaXMgZXhlY3V0ZWQgYXQgbGVhc3QKKyAgICAgICAgIyBvbmNlLCB3ZSBuZWVkIHRvIG1vY2sgcmFuZG9tKCkgc28gdGhhdCBpdCByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIKKyAgICAgICAgIyB0aGFuICdsaW1pdCcgdGhlIGZpcnN0IHRpbWUgaXQgZ2V0cyBjYWxsZWQuCisKKyAgICAgICAgbiA9IDQyCisgICAgICAgIGVwc2lsb24gPSAwLjAxCisgICAgICAgIGxpbWl0ID0gKG1heHNpemUgLSAobWF4c2l6ZSAlIG4pKSAvIG1heHNpemUKKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbbGltaXQgKyBlcHNpbG9uLCBsaW1pdCAtIGVwc2lsb25dCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobiwgbWF4c2l6ZSA9IG1heHNpemUpCisKICAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAogICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMApAQCAtNTMwLDYgKzYzNywxMDYgQEAKICAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQogCisgICAgZGVmIHRlc3RfZ2FtbWF2YXJpYXRlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb3RoIGFscGhhIGFuZCBiZXRhIG11c3QgYmUgPiAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDEsIC0zKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZnVsbF9jb2RlX2NvdmVyYWdlKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiByYW5kb20uZ2FtbWF2YXJpYXRlKCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FscGhhJy4gV2hhdCB3ZQorICAgICAgICAjIGFyZSBnb2luZyB0byBkbyBoZXJlIGlzIHRvIGZpeCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJhbmRvbSgpIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBjYXNlcyB0aGF0IHByb3ZpZGUgMTAwJSBsaW5lIGNvdmVyYWdlIG9mIHRoZSBtZXRob2QuCisKKyAgICAgICAgIyAjMTogYWxwaGEgPiAxLjA6IHdlIHdhbnQgdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdG8gYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgIyBbMWUtNywgLjk5OTk5OTldIHJhbmdlLCBzbyB0aGF0IHRoZSBjb250aW51ZSBzdGF0ZW1lbnQgZXhlY3V0ZXMKKyAgICAgICAgIyBvbmNlLiBUaGUgdmFsdWVzIG9mIHUxIGFuZCB1MiB3aWxsIGJlIDAuNSBhbmQgMC4zLCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNSwgMC4zXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4xLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTMpCisKKyAgICAgICAgIyAjMjogYWxwaGEgPT0gMTogZmlyc3QgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gMWUtNyB0byB0aGF0IHRoZSBib2R5CisgICAgICAgICMgb2YgdGhlIHdoaWxlIGxvb3AgZXhlY3V0ZXMgb25jZS4gVGhlbiByYW5kb20ucmFuZG9tKCkgcmV0dXJucyAwLjQ1LAorICAgICAgICAjIHdoaWNoIGNhdXNlcyB3aGlsZSB0byBzdG9wIGxvb3BpbmcgYW5kIHRoZSBhbGdvcml0aG0gdG8gdGVybWluYXRlLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFsxZS04LCAwLjQ1XQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4wLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJldHVybmVkX3ZhbHVlLCAyLjUwNzMxNDE2NjEyMzgwMykKKworICAgICAgICAjICMzOiAwIDwgYWxwaGEgPCAxLiBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcmVnaW9uIG9mIGNvZGUgdG8gY292ZXIsCisgICAgICAgICMgYXMgdGhlcmUgYXJlIG11bHRpcGxlIGlmLWVsc2Ugc3RhdGVtZW50cy4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlCisgICAgICAgICMgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUgdGhlIHZhbHVlcyB0aGF0IHdlIG5lZWQgYWNjb3JkaW5nbHk6CisgICAgICAgICMKKyAgICAgICAgIyB3aGlsZSAxOgorICAgICAgICAjICAgICB1ID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICAjICAgICBwID0gYip1CisgICAgICAgICMgICAgIGlmIHAgPD0gMS4wOiAjIDw9PT0gKEEpCisgICAgICAgICMgICAgICAgICB4ID0gcCAqKiAoMS4wL2FscGhhKQorICAgICAgICAjICAgICBlbHNlOiAjIDw9PT0gKEIpCisgICAgICAgICMgICAgICAgICB4ID0gLV9sb2coKGItcCkvYWxwaGEpCisgICAgICAgICMgICAgIHUxID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgaWYgcCA+IDEuMDogIyA8PT09IChDKQorICAgICAgICAjICAgICAgICAgaWYgdTEgPD0geCAqKiAoYWxwaGEgLSAxLjApOiAjIDw9PT0gKEQpCisgICAgICAgICMgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyAgICAgZWxpZiB1MSA8PSBfZXhwKC14KTogIyA8PT09IChFKQorICAgICAgICAjICAgICAgICAgYnJlYWsKKyAgICAgICAgIyByZXR1cm4geCAqIGJldGEKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0LCB3ZSB3YW50IChBKSB0byBiZSBUcnVlLiBGb3IgdGhhdCB3ZSBuZWVkIHRoYXQ6CisgICAgICAgICMgYipyYW5kb20oKSA8PSAxLjAKKyAgICAgICAgIyByMSA9IHJhbmRvbSgpIDw9IDEuMCAvIGIKKyAgICAgICAgIworICAgICAgICAjIFdlIG5vdyBnZXQgdG8gdGhlIHNlY29uZCBpZi1lbHNlIGJyYW5jaCwgYW5kIGhlcmUsIHNpbmNlIHAgPD0gMS4wLAorICAgICAgICAjIChDKSBpcyBGYWxzZSBhbmQgd2UgdGFrZSB0aGUgZWxpZiBicmFuY2gsIChFKS4gRm9yIGl0IHRvIGJlIFRydWUsCisgICAgICAgICMgc28gdGhhdCB0aGUgYnJlYWsgaXMgZXhlY3V0ZWQsIHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyByMiA9IHJhbmRvbSgpIDw9IF9leHAoLXgpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKHAgKiogKDEuMC9hbHBoYSkpKQorICAgICAgICAjIHIyIDw9IF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgIF9lID0gcmFuZG9tLl9lCisgICAgICAgIF9leHAgPSByYW5kb20uX2V4cAorICAgICAgICBfbG9nID0gcmFuZG9tLl9sb2cKKyAgICAgICAgYWxwaGEgPSAwLjM1CisgICAgICAgIGJldGEgPSAxLjQ1CisgICAgICAgIGIgPSAoX2UgKyBhbHBoYSkvX2UKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKworICAgICAgICByMSA9IDAuODg1OTI5NjQ0MTU2NiAjIDEuMCAvIGIKKyAgICAgICAgcjIgPSAwLjM2Nzg3OTQ0MTE3MTQgIyBfZXhwKC0oKGIqcjEpICoqICgxLjAvYWxwaGEpKSkKKworICAgICAgICAjIFRoZXNlIGZvdXIgInJhbmRvbSIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChBKSBUcnVlLCAoRSkgRmFsc2UgLS0+IFtuZXh0IGl0ZXJhdGlvbiBvZiB3aGlsZV0KKyAgICAgICAgIyAoQSkgVHJ1ZSwgKEUpIFRydWUgLS0+IFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNDQ5OTk5OTk5OTk5NzU0NCkKKworICAgICAgICAjIExldCdzIG5vdyBtYWtlIChBKSBiZSBGYWxzZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2hlbiB3ZSBnZXQgdG8gdGhlCisgICAgICAgICMgc2Vjb25kIGlmLWVsc2UgJ3AnIGlzIGdyZWF0ZXIgdGhhbiAxLCBzbyAoQykgZXZhbHVhdGVzIHRvIFRydWUuIFdlCisgICAgICAgICMgbm93IGVuY291bnRlciBhIHNlY29uZCBpZiBzdGF0ZW1lbnQsIChEKSwgd2hpY2ggaW4gb3JkZXIgdG8gZXhlY3V0ZQorICAgICAgICAjIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjoKKyAgICAgICAgIyByMiA8PSB4ICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItcCkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgICMgcjIgPD0gKC1fbG9nKChiLShiKnIxKSkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgIHIxID0gMC44OTU5Mjk2NDQxNTY2ICMgKDEuMCAvIGIpICsgZXBzaWxvbiAtLSBzbyB0aGF0IChBKSBpcyBGYWxzZQorICAgICAgICByMiA9IDAuOTQ0NTQwMDQwODg5ODE0MQorCisgICAgICAgICMgQW5kIHRoZXNlIGZvdXIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBUcnVlIFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNTgzMDM0OTU2MTc2MDc4MSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLmdhbW1hdmFyaWF0ZScpCisgICAgZGVmIHRlc3RfYmV0YXZhcmlhdGVfcmV0dXJuX3plcm8oc2VsZiwgZ2FtbWF2YXJpYXRlX21vY2spOgorICAgICAgICAjIGJldGF2YXJpYXRlKCkgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIEdhbW1hIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIHRoYXQgaXQgdXNlcyBpbnRlcm5hbGx5IHJldHVybnMgdGhpcyBzYW1lIHZhbHVlLgorICAgICAgICBnYW1tYXZhcmlhdGVfbW9jay5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjAsIHJhbmRvbS5iZXRhdmFyaWF0ZSgyLjcxODI4LCAzLjE0MTU5KSkKIAogY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IDJhMTNiZmUuLmQ5ZDRjZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCiAKICAgICAgICAgIyBUZXN0IHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBpbiBzbGljZSBpbmRpY2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApWzpJKDUpXSksIGxpc3QocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6SSg1KV0sIHJhbmdlKDUpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKDAsIDEwKVs6SVgoKV0KQEAgLTM1Myw5ICszNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpLCAoMioqNjUsIDIqKjY1KzIpXQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCB0ZXN0PXQpOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKICAgICAgICAgdGVzdGNhc2VzID0gWygxMywpLCAoMCwgMTEpLCAoLTIyLCAxMCksICgyMCwgMywgLTEpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggZjA5MzgxMi4uYTRlMTFjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC01Myw2ICs3MSwxNSBAQAogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCAnYScsICd4eXonKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCBTKCdhJyksIFMoJ3h5eicpKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYidhJywgYid4eXonKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIEIoYidhJyksIEIoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBieXRlYXJyYXkoYidhJyksIGJ5dGVhcnJheShiJ3h5eicpKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIG1lbW9yeXZpZXcoYidhJyksIG1lbW9yeXZpZXcoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgZm9yIHkgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Yih5LCAnYScsICd4JXN6JyAlIHkpLCAneGF6JykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCkBAIC0yMTAsMTAgKzIzNywyOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gIjphOmI6OmMiLCBTKCI6YTpiOjpjIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIjoiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiOmE6Yjo6YyIsIEIoYiI6YTpiOjpjIiksIGJ5dGVhcnJheShiIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiIjphOmI6OmMiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoYiI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJycsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInYScsIGInYicsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQorICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgorICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsIGEsICc6JywgYiwgJzo6JywgY10pCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OiopIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKQEAgLTIzNSwyMiArMjgxLDUzIEBACiAKICAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAiYTpiOjpjOjo6ZCIsIFMoImE6Yjo6Yzo6OmQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCI6IiwgIiIpLCAoIjoiLCAiOiIpLCAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiYTpiOjpjOjo6ZCIsIEIoYiJhOmI6OmM6OjpkIiksIGJ5dGVhcnJheShiImE6Yjo6Yzo6OmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImE6Yjo6Yzo6OmQiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIjorIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiIjoiLCBiIjo6IiwgYiI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKGIiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiIjoiLCBiIiIpLCAoYiI6IiwgYiI6IiksIChiIjoiLCBiIjo6IildKQorICAgICAgICBmb3IgeCBpbiAoIlx4ZTAiLCAiXHUwNDMwIiwgIlxVMDAwMWQ0OWMiKToKKyAgICAgICAgICAgIHh4ID0geCAqIDIKKyAgICAgICAgICAgIHh4eCA9IHggKiAzCisgICAgICAgICAgICBzdHJpbmcgPSAiYSVzYiVzYyVzZCIgJSAoeCwgeHgsIHh4eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiJXMrIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKykiICUgeCwgc3RyaW5nKSwgW3gsIHh4LCB4eHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoJXMpKCVzKikiICUgKHgsIHgpLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHgsICIiKSwgKHgsIHgpLCAoeCwgeHgpXSkKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCiAKICAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorICAgICAgICBmb3Igc3RyaW5nIGluICdhJywgUygnYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiBiJ2EnLCBCKGInYScpLCBieXRlYXJyYXkoYidhJyksIG1lbW9yeXZpZXcoYidhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXBzKCksIChiJ2EnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEpLCBiJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksIChiJ2EnLCBiJ2EnKSkKKyAgICAgICAgZm9yIGEgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGEsIGEpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXBzKCksIChhLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDApLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgxKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSwgMSksIChhLCBhKSkKIAogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKQEAgLTI3Miw2ICszNDksMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2InLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMyksICgnYScsIE5vbmUsICdjJykpCiAKKyAgICBkZWYgdGVzdF9yZV9mdWxsbWF0Y2goc2VsZik6CisgICAgICAgICMgSXNzdWUgMTYyMDM6IFByb3Bvc2FsOiBhZGQgcmUuZnVsbG1hdGNoKCkgbWV0aG9kLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEiLCAiYSIpLnNwYW4oKSwgKDAsIDEpKQorICAgICAgICBmb3Igc3RyaW5nIGluICJhYiIsIFMoImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3Igc3RyaW5nIGluIGIiYWIiLCBCKGIiYWIiKSwgYnl0ZWFycmF5KGIiYWIiKSwgbWVtb3J5dmlldyhiImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChiciJhfGFiIiwgc3RyaW5nKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgZm9yIGEsIGIgaW4gIlx4ZTBceGRmIiwgIlx1MDQzMFx1MDQzMSIsICJcVTAwMDFkNDljXFUwMDAxZDQ5ZSI6CisgICAgICAgICAgICByID0gciIlc3wlcyIgJSAoYSwgYSArIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyLCBhICsgYikuc3BhbigpLCAoMCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiLio/JCIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8iLCAiYWJjIikuc3BhbigpLCAoMCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYS4qP2IiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYmIiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJheHhiIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImErIiwgImFiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjXFoiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiKD9tKWFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhYig/PWMpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD88PWIpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIig/PWF8YWIpYWIiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyImJjIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8kIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8iKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfZXhpc3RzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYSknKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoJygnLCAnYScpKQpAQCAtMTA1Myw2ICsxMTYwLDI4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKHBhdHRlcm4sIHJlLlMpLmZpbmRhbGwoYid4eXonKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJ3h5eiddLCBtc2c9cGF0dGVybikKIAorICAgIGRlZiB0ZXN0X21hdGNoX3JlcHIoc2VsZik6CisgICAgICAgIGZvciBzdHJpbmcgaW4gJ1thYnJhY2FkYWJyYV0nLCBTKCdbYWJyYWNhZGFicmFdJyk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPSdhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAoYidbYWJyYWNhZGFicmFdJywgQihiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGInW2FicmFjYWRhYnJhXScpKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocmInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPWInYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisKKyAgICAgICAgZmlyc3QsIHNlY29uZCA9IGxpc3QocmUuZmluZGl0ZXIoIihhYSl8KGJiKSIsICJhYSBiYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmlyc3QpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgwLCAyKSwgbWF0Y2g9J2FhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoZmlyc3QpLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWNvbmQpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgzLCA1KSwgbWF0Y2g9J2JiJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoc2Vjb25kKS5fX3F1YWxuYW1lX18pKQorCiAKICAgICBkZWYgdGVzdF9idWdfMjUzNyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSAyNTM3OiBlbXB0eSBzdWJtYXRjaGVzCkBAIC0xMDY0LDYgKzExOTMsODQgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMSksICIiKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgyKSwgInkiKQogCisKK2NsYXNzIFBhdHRlcm5SZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVjayhzZWxmLCBwYXR0ZXJuLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4pKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgY2hlY2tfZmxhZ3Moc2VsZiwgcGF0dGVybiwgZmxhZ3MsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF93aXRob3V0X2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJykiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UpIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLkl8cmUuU3xyZS5YLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMfHJlLlZFUkJPU0UpIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5VLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMKSIpCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJyg/aSlwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgnKD9pKXBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDB8cmUuSSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0V8MHgxMjMwMDApIikKKworICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKGInYnl0ZXMgcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJykiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKGInYnl0ZXMgcGF0dGVybicsIHJlLkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJywgcmUuQVNDSUkpIikKKworICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCJyYW5kb20gJ3NpbmdsZSBxdW90ZWQnIHBhdHRlcm4iLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiknJycpCisgICAgICAgIHNlbGYuY2hlY2soJycnYm90aCAnc2luZ2xlJyBhbmQgImRvdWJsZSIgcXVvdGVzJycnLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgnYm90aCBcXCdzaW5nbGVcXCcgYW5kICJkb3VibGUiIHF1b3RlcycpJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19wYXR0ZXJuKHNlbGYpOgorICAgICAgICBwYXR0ZXJuID0gJ1ZlcnkgJXNwYXR0ZXJuJyAlICgnbG9uZyAnICogMTAwMCkKKyAgICAgICAgciA9IHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihyKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjMwXSwgInJlLmNvbXBpbGUoJ1ZlcnkgbG9uZyBsb25nIGxvbiIpCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTE2Ol0sICIsIHJlLklHTk9SRUNBU0UpIikKKworCitjbGFzcyBJbXBsZW1lbnRhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcmUgbW9kdWxlLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfb3ZlcmxhcF90YWJsZShzZWxmKToKKyAgICAgICAgZiA9IHNyZV9jb21waWxlLl9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiIiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImEiKSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2QiKSwgWzAsIDAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFhYWEiKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiYWJiYSIpLCBbMCwgMCwgMSwgMiwgMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjYWJkYWMiKSwgWzAsIDAsIDAsIDEsIDIsIDAsIDEsIDBdKQorCisKIGRlZiBydW5fcmVfdGVzdHMoKToKICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKICAgICBpZiB2ZXJib3NlOgpAQCAtMTE5Myw3ICsxNDAwLDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHJ1bl9yZV90ZXN0cygpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzk4YTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpAQCAtMCwwICsxLDI3NSBAQAorIiIiCitUZXN0cyBvZiByZWdydGVzdC5weS4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBmYXVsdGhhbmRsZXIKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKKworY2xhc3MgUGFyc2VBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuIiIiCisKKyAgICBkZWYgY2hlY2tFcnJvcihzZWxmLCBhcmdzLCBtc2cpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyLCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgIHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obXNnLCBlcnIuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy0taGVscCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0LCBcCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLicsIG91dC5nZXR2YWx1ZSgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoKSByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdGltZW91dCcsICc0LjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy50aW1lb3V0LCA0LjIpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGltZW91dCddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0JywgJ2ZvbyddLCAnaW52YWxpZCBmbG9hdCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS13YWl0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy53YWl0KQorCisgICAgZGVmIHRlc3Rfc2xhdmVhcmdzKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zbGF2ZWFyZ3MnLCAnW1tdLCB7fV0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zbGF2ZWFyZ3MsICdbW10sIHt9XScpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tc2xhdmVhcmdzJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1TJywgJy0tc3RhcnQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdnZ2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXZlcmJvc2UnXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZTIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy13JywgJy0tdmVyYm9zZTInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudmVyYm9zZTIpCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVcnLCAnLS12ZXJib3NlMyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMykKKworICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcScsICctLXF1aWV0JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3Nsb3coc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1vJywgJy0tc2xvdyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5wcmludF9zbG93KQorCisgICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1oZWFkZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmhlYWRlcikKKworICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXInLCAnLS1yYW5kb21pemUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorCisgICAgZGVmIHRlc3RfcmFuZHNlZWQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXJhbmRzZWVkJywgJzEyMzQ1J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMucmFuZG9tX3NlZWQsIDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJywgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfZnJvbWZpbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1mJywgJy0tZnJvbWZpbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5mcm9tZmlsZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbycsICctcyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfZXhjbHVkZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXgnLCAnLS1leGNsdWRlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1zJywgJy0tc2luZ2xlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnNpbmdsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJy1mJywgJ2ZvbyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1tJywgJy0tbWF0Y2gnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAncGF0dGVybiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWF0Y2hfdGVzdHMsICdwYXR0ZXJuJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1HJywgJy0tZmFpbGZhc3QnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLXYnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLVcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVcnKQorCisgICAgZGVmIHRlc3RfdXNlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctdScsICctLXVzZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdndWksbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWydndWknLCAnbmV0d29yayddKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxub25lLG5ldHdvcmsnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIFsnbmV0d29yayddKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChyZWdydGVzdC5SRVNPVVJDRV9OQU1FUykKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5yZW1vdmUoJ2d1aScpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnYWxsLC1ndWknXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgcmVzb3VyY2UnKQorCisgICAgZGVmIHRlc3RfbWVtbGltaXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1NJywgJy0tbWVtbGltaXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNEcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLm1lbWxpbWl0LCAnNEcnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF90ZXN0ZGlyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10ZXN0ZGlyJywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRlc3RkaXIsIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCAnZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGVzdGRpciddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3J1bmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTCcsICctLXJ1bmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnJ1bmxlYWtzKQorCisgICAgZGVmIHRlc3RfaHVudHJsZWFrcyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVInLCAnLS1odW50cmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg1LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzY6J10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgNCwgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc6MyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDMsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjozOmxlYWtzLmxvZyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDYsIDMsICdsZWFrcy5sb2cnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vOiddLCAnaW52YWxpZCBodW50cmxlYWtzIHZhbHVlJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJzY6Zm9vJ10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctaicsICctLW11bHRpcHJvY2Vzcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICcyJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfbXAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctVCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctbCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctTScsICc0RyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1UJywgJy0tY292ZXJhZ2UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudHJhY2UpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUQnLCAnLS1jb3ZlcmRpcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmNvdmVyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfbm9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU4nLCAnLS1ub2NvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobnMuY292ZXJkaXIpCisKKyAgICBkZWYgdGVzdF90aHJlc2hvbGQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGhyZXNob2xkJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzEwMDAnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRocmVzaG9sZCwgMTAwMCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9ub3dpbmRvd3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1uJywgJy0tbm93aW5kb3dzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLm5vd2luZG93cykKKworICAgIGRlZiB0ZXN0X2ZvcmV2ZXIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1GJywgJy0tZm9yZXZlcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mb3JldmVyKQorCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0teHh4J10sICd1c2FnZTonKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fX3BhcnRpYWwoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3R3b19vcHRpb25zKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1xdWlldCcsICctLWV4Y2x1ZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5leGNsdWRlKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX3dpdGhfZW1wdHlfc3RyaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zdGFydCcsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJycpCisKKyAgICBkZWYgdGVzdF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2FuZF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKaW5kZXggNTg5ZWNkZC4uYTUwNGJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQpAQCAtMywxMSArMywxMSBAQAogICBOaWNrIE1hdGhld3NvbgogIiIiCiAKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUsIHZlcmJvc2UKQEAgLTI0MSw3ICsyNDEsOCBAQAogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gMiAqIChsZW4oc2VsZi5sb25nbmFtZSkgKyAxKQogICAgICAgICAjIGEgcGF0aCBzZXBhcmF0b3IgKyBgbW9kdWxlX25hbWVgICsgIi5weSIKICAgICAgICAgc291cmNlX3BhdGhfbGVuICs9IGxlbihtb2R1bGVfbmFtZSkgKyAxICsgbGVuKCIucHkiKQotICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSBzb3VyY2VfcGF0aF9sZW4gKyBsZW4oaW1wLmNhY2hlX2Zyb21fc291cmNlKCJ4LnB5IikpIC0gbGVuKCJ4LnB5IikKKyAgICAgICAgY2FjaGVkX3BhdGhfbGVuID0gKHNvdXJjZV9wYXRoX2xlbiArCisgICAgICAgICAgICBsZW4oaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBjYWNoZWRfcGF0aF9sZW4gPj0gMjU4OgogICAgICAgICAgICAgIyBVbmRlciBXaW5kb3dzLCB0aGUgbWF4IHBhdGggbGVuIGlzIDI2MCBpbmNsdWRpbmcgQydzIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAjIE5VTCBjaGFyYWN0ZXIuCkBAIC0yNTIsNiArMjUzLDcgQEAKICAgICAgICAgICAgIHByaW50KCJjYWNoZWRfcGF0aF9sZW4gPSIsIGNhY2hlZF9wYXRoX2xlbikKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQogICAgICAgICBzZWxmLl9jaGVja19wYXRoX2xpbWl0YXRpb25zKHNlbGYucGtnbmFtZSkKICAgICAgICAgY3JlYXRlX2VtcHR5X2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgc2VsZi5wa2duYW1lICsgJy5weScpKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKaW5kZXggMGNmNjFjYi4uMDA2MTk4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CkBAIC0xLDMgKzEsNiBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0aW1lCkBAIC02MSw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKC4xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGltaXRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0X3NldDoKQEAgLTEyOSw2ICsxMzIsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhZ2VzaXplLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhZ2VzaXplLCAwKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdsaW51eCcsICd0ZXN0IHJlcXVpcmVzIExpbnV4JykKKyAgICBkZWYgdGVzdF9saW51eF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnTVNHUVVFVUUnLCAnTklDRScsICdSVFBSSU8nLCAnUlRUSU1FJywgJ1NJR1BFTkRJTkcnXToKKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5zdXBwcmVzcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGdldGF0dHIocmVzb3VyY2UsICdSTElNSVRfJyArIGF0dHIpLCBpbnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlc291cmNlLCAncHJsaW1pdCcpLCAnbm8gcHJsaW1pdCcpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAzNikKKyAgICBkZWYgdGVzdF9wcmxpbWl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLnBybGltaXQpCisgICAgICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yLCByZXNvdXJjZS5wcmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgcmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9jZXNzTG9va3VwRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIGxpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNvdXJjZS5wcmxpbWl0KDAsIHJlc291cmNlLlJMSU1JVF9BUyksIGxpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTLCBsaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQpCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJlc291cmNlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weSBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKaW5kZXggMmRkYmEzNC4uZjE5YzRhYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgIl9fY2FjaGVkX18iOiBOb25lLAogICAgICJfX3BhY2thZ2VfXyI6IE5vbmUsCiAgICAgIl9fZG9jX18iOiBOb25lLAorIyAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggVW5jb21tZW50LgogfQogZXhhbXBsZV9uYW1lc3BhY2UgPSAgewogICAgICJzeXMiOiBzeXMsCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogRmFsc2UsCiAgICAgIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyI6IEZhbHNlLAogICAgICJuZXN0ZWQiOiBkaWN0KGltcGxpY2l0X25hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICAgICB4PTEsIF9fbmFtZV9fPSI8cnVuPiIsIF9fbG9hZGVyX189Tm9uZSksCisgICAgICAgICAgICAgICAgICAgeD0xLCBfX25hbWVfXz0iPHJ1bj4iLCBfX2xvYWRlcl9fPU5vbmUsIF9fc3BlY19fPU5vbmUpLAogfQogZXhhbXBsZV9uYW1lc3BhY2UudXBkYXRlKGltcGxpY2l0X25hbWVzcGFjZSkKIApAQCAtMjQzLDYgKzI0NCw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXSwKKyMgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggTmVlZHMgdG8gYmUgc2V0LgogICAgICAgICB9KQogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewpAQCAtMjc5LDYgKzI4MSw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorIyAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmUsICAjIFhYWCBOZWVkcyB0byBiZSBzZXQuCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC01NzUsMTIgKzU3OCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CmluZGV4IDA3MDg4NmQuLmM2YWJmM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQpAQCAtMTk3LDggKzE5Nyw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW10pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCAyNmNlMDQyLi5iMzI1NTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTcxNSw2ICs3MTUsMTkgQEAKICAgICAgICAgZGVmIGIoKToKICAgICAgICAgICAgIGdsb2JhbCBhCiAKKyAgICBkZWYgdGVzdENsYXNzTmFtZXNwYWNlT3ZlcnJpZGVzQ2xvc3VyZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE3ODUzLgorICAgICAgICB4ID0gNDIKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnksIDQzKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbG9jYWxzKClbIngiXSA9IDQzCisgICAgICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoWCwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCA0MikKKwogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdENlbGxMZWFrKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3OTI3LgpAQCAtNzQzLDEwICs3NTYsNiBAQAogICAgICAgICBkZWwgdGVzdGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZigpKQogCi0gICAgZGVmIHRlc3RfX0NsYXNzX19HbG9iYWwoc2VsZik6Ci0gICAgICAgIHMgPSAiY2xhc3MgWDpcbiAgICBnbG9iYWwgX19jbGFzc19fXG4gICAgZGVmIGYoc2VsZik6IHN1cGVyKCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBleGVjLCBzKQotCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2NvcGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKaW5kZXggZGRiOWEwZi4uOGY5YTFjOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJywgJ3Jpc2NvcycpLAorQHVuaXR0ZXN0LnNraXBJZigoc3lzLnBsYXRmb3JtWzozXT09J3dpbicpLAogICAgICAgICAgICAgICAgICAiY2FuJ3QgZWFzaWx5IHRlc3Qgb24gdGhpcyBzeXN0ZW0iKQogY2xhc3MgU2VsZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbZmRdLCBbXSwgW10sIDApCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWU2N2IxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw0MzAgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyB0aW1lCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKKworaWYgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyCitlbHNlOgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKKyAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAgICAgY2FkZHIgPSBjLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhLCBhZGRyID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNsaWVudAorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyID09IGNhZGRyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMsIGEKKyAgICAgICAgICAgICAgICAgICAgYS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICBpZiBldmVudHMgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGtleS5maWxlb2JqKQorICAgIHJldHVybiBtYXRjaAorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa2V5LCBzZWxlY3RvcnMuU2VsZWN0b3JLZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmZpbGVvYmosIHJkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5mZCwgcmQuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmRhdGEsICJkYXRhIikKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIHVua25vd24gZXZlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgMCwgOTk5OTk5KQorCisgICAgICAgICMgcmVnaXN0ZXIgYW4gaW52YWxpZCBGRAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCAtMTAsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgcmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHRoZSBzYW1lIEZELCBidXQgd2l0aCBhIGRpZmZlcmVudCBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIGFuIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgOTk5OTk5KQorCisgICAgICAgICMgdW5yZWdpc3RlciB0d2ljZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy51bnJlZ2lzdGVyLCByZCkKKworICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyBtb2RpZnkgZXZlbnRzCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgbW9kaWZ5IGRhdGEKKyAgICAgICAgZDEgPSBvYmplY3QoKQorICAgICAgICBkMiA9IG9iamVjdCgpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQxKQorICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZGF0YSwga2V5Mi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Mi5kYXRhLCBkMikKKworICAgICAgICAjIG1vZGlmeSB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLm1vZGlmeSwgOTk5OTk5LCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIG1vZGlmeSB1c2UgYSBzaG9ydGN1dAorICAgICAgICBkMyA9IG9iamVjdCgpCisgICAgICAgIHMucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzLnVucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgOTk5OTk5KQorCisgICAgZGVmIHRlc3RfZ2V0X21hcChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5cyA9IHMuZ2V0X21hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW10pCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmQsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCBrZXlzW3JkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW3JkLmZpbGVubygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMudmFsdWVzKCkpLCBba2V5XSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBrZXlzWzk5OTk5OV0KKworICAgICAgICAjIFJlYWQtb25seSBtYXBwaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBrZXlzW3JkXQorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgd3Jfa2V5ID0gcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHJlc3VsdCA9IHMuc2VsZWN0KCkKKyAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2ZW50cyAmIH4oc2VsZWN0b3JzLkVWRU5UX1JFQUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKHdyX2tleSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0sIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgd2l0aCBzIGFzIHNlbDoKKyAgICAgICAgICAgIHNlbC5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWwucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnZmlsZW5vJyk6CisgICAgICAgICAgICBmZCA9IHMuZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZmQsIDApCisKKyAgICBkZWYgdGVzdF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBOVU1fU09DS0VUUyA9IDEyCisgICAgICAgIE1TRyA9IGIiIFRoaXMgaXMgYSB0ZXN0LiIKKyAgICAgICAgTVNHX0xFTiA9IGxlbihNU0cpCisgICAgICAgIHJlYWRlcnMgPSBbXQorICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgcjJ3ID0ge30KKyAgICAgICAgdzJyID0ge30KKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fU09DS0VUUyk6CisgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCisKKyAgICAgICAgYnVmcyA9IFtdCisKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3Igd3JpdGluZyIpCisgICAgICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKKyAgICAgICAgICAgIHdyLnNlbmQoTVNHKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgcmVhZHlfcmVhZGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHlfcmVhZGVyczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIHRoZXJlIG1pZ2h0IGJlIGEgZGVsYXkgYmV0d2VlbiB0aGUgd3JpdGUgdG8gdGhlIHdyaXRlIGVuZCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSByZWFkIGVuZCBpcyByZXBvcnRlZCByZWFkeQorICAgICAgICAgICAgICAgIHNsZWVwKDAuMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciByZWFkaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3cyclt3cl1dLCByZWFkeV9yZWFkZXJzKQorICAgICAgICAgICAgcmQgPSByZWFkeV9yZWFkZXJzWzBdCisgICAgICAgICAgICBidWYgPSByZC5yZWN2KE1TR19MRU4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCBNU0dfTEVOKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoYnVmKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHIyd1tyZF0pCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisgICAgICAgICAgICB3cml0ZXJzLnJlbW92ZShyMndbcmRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fU09DS0VUUykKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICB0MCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEpKQorICAgICAgICB0MSA9IHRpbWUoKQorICAgICAgICBkdCA9IHQxIC0gdDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuOCA8PSBkdCA8PSAxLjYsIGR0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBvcmlnX2Fscm1faGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSAqYXJnczogTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNpZ25hbC5TSUdBTFJNLCBvcmlnX2Fscm1faGFuZGxlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5hbGFybSwgMCkKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDIpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMi41KQorCisKK2NsYXNzIFNjYWxhYmxlU2VsZWN0b3JNaXhJbjoKKworICAgICMgc2VlIGlzc3VlICMxODk2MyBmb3Igd2h5IGl0J3Mgc2tpcHBlZCBvbiBvbGRlciBPUyBYIHZlcnNpb25zCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgIlRlc3QgbmVlZHMgcmVzb3VyY2UgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hYm92ZV9mZF9zZXRzaXplKHNlbGYpOgorICAgICAgICAjIEEgc2NhbGFibGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgbm8gcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgorICAgICAgICAjIEZEX1NFVFNJWkUgZmlsZSBkZXNjcmlwdG9ycy4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdmFsdWUsIHdlIGp1c3QKKyAgICAgICAgIyB0cnkgdG8gc2V0IHRoZSBzb2Z0IFJMSU1JVF9OT0ZJTEUgdG8gdGhlIGhhcmQgUkxJTUlUX05PRklMRSBjZWlsaW5nLgorICAgICAgICBzb2Z0LCBoYXJkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAoaGFyZCwgaGFyZCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzb3VyY2Uuc2V0cmxpbWl0LCByZXNvdXJjZS5STElNSVRfTk9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2Z0LCBoYXJkKSkKKyAgICAgICAgICAgIE5VTV9GRFMgPSBoYXJkCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBOVU1fRkRTID0gc29mdAorCisgICAgICAgICMgZ3VhcmQgZm9yIGFscmVhZHkgYWxsb2NhdGVkIEZEcyAoc3RkaW4sIHN0ZG91dC4uLikKKyAgICAgICAgTlVNX0ZEUyAtPSAzMgorCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX0ZEUyAvLyAyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgRkRzLCBza2lwIC0gbm90ZSB0aGF0IHdlIHNob3VsZCBvbmx5IGNhdGNoIEVNRklMRQorICAgICAgICAgICAgICAgICMgaGVyZSwgYnV0IGFwcGFyZW50bHkgKkJTRCBhbmQgU29sYXJpcyBjYW4gZmFpbCB1cG9uIGNvbm5lY3QoKQorICAgICAgICAgICAgICAgICMgb3IgYmluZCgpIHdpdGggRUFERFJOT1RBVkFJTCwgc28gbGV0J3MgYmUgc2FmZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1BDOgorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgY2FuIGJlIHJhaXNlZCBieSBlcG9sbCBpZiB3ZSBnbyBvdmVyCisgICAgICAgICAgICAgICAgICAgICMgZnMuZXBvbGwubWF4X3VzZXJfd2F0Y2hlcyBzeXNjdGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5VTV9GRFMgLy8gMiwgbGVuKHMuc2VsZWN0KCkpKQorCisKK2NsYXNzIERlZmF1bHRTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcgorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCitjbGFzcyBQb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IiKQorY2xhc3MgRXBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcikiKQorY2xhc3MgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicsIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW0RlZmF1bHRTZWxlY3RvclRlc3RDYXNlLCBTZWxlY3RTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIFBvbGxTZWxlY3RvclRlc3RDYXNlLCBFcG9sbFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZV0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IGMwYmNhMmYuLmJmZWY2MjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC04NDgsOCArODQ4LDYgQEAKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogICAgICAgICBzZXRpdGVyID0gaXRlcihzZWxmLnNldCkKLSAgICAgICAgIyBub3RlOiBfX2xlbmd0aF9oaW50X18gaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0aXRlci5fX2xlbmd0aF9oaW50X18oKSwgbGVuKHNlbGYuc2V0KSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQppbmRleCAxM2MxMjY1Li5iZDUxZDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQpAQCAtMTQ4LDYgKzE0OCwxOSBAQAogICAgICAgICBwMiA9IGRbZW5jb2RlZGtleV0KICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMSwgcDIpICAjIFdyaXRlIGNyZWF0ZXMgbmV3IG9iamVjdCBpbiBzdG9yZQogCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgZDEgPSB7fQorICAgICAgICB3aXRoIHNoZWx2ZS5TaGVsZihkMSwgcHJvdG9jb2w9Miwgd3JpdGViYWNrPUZhbHNlKSBhcyBzOgorICAgICAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgWzEsMiwzLDRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxlbiwgcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc1sna2V5MSddCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdDbG9zZWQgc2hlbGYgc2hvdWxkIG5vdCBmaW5kIGEga2V5JykKIAogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKaW5kZXggZGY5NWJkOS4uZGViMTU3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTE4LDcgKzE4LDggQEAKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMsIEVycm9yLCB1bnBhY2tfYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgUmVnaXN0cnlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMpCisgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgZ2V0X3VucGFja19mb3JtYXRzLAorICAgICAgICAgICAgICAgICAgICBTYW1lRmlsZUVycm9yKQogaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB3YXJuaW5ncwogCkBAIC03NDIsMTQgKzc0MywxNCBAQAogICAgICAgICBvcy5jaG1vZChyZXN0cmljdGl2ZV9zdWJkaXIsIDBvNjAwKQogCiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KHNyY19kaXIpLnN0X21vZGUsIG9zLnN0YXQoZHN0X2Rpcikuc3RfbW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzcmNfZGlyKS5zdF9tb2RlLCBvcy5zdGF0KGRzdF9kaXIpLnN0X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCiAgICAgICAgIHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QgPSBvcy5wYXRoLmpvaW4oZHN0X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0KHJlc3RyaWN0aXZlX3N1YmRpcilbMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbGluaycpLCAncmVxdWlyZXMgb3MubGluaycpCkBAIC03NjUsNyArNzY2LDcgQEAKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICAgICAgICAgICAjIHRvIFRFU1RGTi9URVNURk4vY2hlZXNlLCB3aGlsZSBpdCBzaG91bGQgcG9pbnQgYXQKICAgICAgICAgICAgICMgVEVTVEZOL2NoZWVzZS4KICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2NoZWVzZScsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC0xMjkzLDYgKzEyOTQsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJ2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX2ZpbGUoc3JjX2ZpbGUpLCByZWFkX2ZpbGUoZHN0X2ZpbGUpKQogCisgICAgZGVmIHRlc3RfY29weWZpbGVfc2FtZV9maWxlKHNlbGYpOgorICAgICAgICAjIGNvcHlmaWxlKCkgc2hvdWxkIHJhaXNlIFNhbWVGaWxlRXJyb3IgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyAgICAgICAgIyBhcmUgdGhlIHNhbWUuCisgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzcmNfZmlsZSA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKKyAgICAgICAgd3JpdGVfZmlsZShzcmNfZmlsZSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorICAgICAgICAjIEJ1dCBFcnJvciBzaG91bGQgd29yayB0b28sIHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorCiAgICAgZGVmIHRlc3RfY29weXRyZWVfcmV0dXJuX3ZhbHVlKHNlbGYpOgogICAgICAgICAjIGNvcHl0cmVlIHJldHVybnMgaXRzIGRlc3RpbmF0aW9uIHBhdGguCiAgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMTU4OCw3ICsxNTk5LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2V4aXRlZF93aXRoID0gZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YgogICAgICAgICAgICAgaWYgc2VsZi5fcmFpc2VfaW5fZXhpdDoKICAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2Fubm90IGNsb3NlIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW5ub3QgY2xvc2UiKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTE2MDIsMTIgKzE2MTMsMTIgQEAKICAgICBkZWYgdGVzdF93X3NvdXJjZV9vcGVuX2ZhaWxzKHNlbGYpOgogICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAic3JjZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCiAgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogCiAgICAgZGVmIHRlc3Rfd19kZXN0X29wZW5fZmFpbHMoc2VsZik6CiAKQEAgLTE2MTcsMTQgKzE2MjgsMTQgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAogICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJywpKQogCkBAIC0xNjQ2LDcgKzE2NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX3JhaXNlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3QgY2xvc2UnLCkpCiAKQEAgLTE2NjQsNyArMTY3NSw3IEBACiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQpAQCAtMTczNSw5ICsxNzQ2LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2h1dGlsLCBUZXN0TW92ZSwgVGVzdENvcHlGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zaXplVGVzdHMsIFRlc3RXaGljaCkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQppbmRleCA5YjRiYTUwLi4zNTMwZDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMTUsOSArMTUsNiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAotaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyJywgJ3Jpc2NvcycpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCi0KIAogY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKICAgICBwYXNzCkBAIC0zNiw3ICszMyw3IEBACiBkZWYgaWdub3JpbmdfZWludHIoX19mdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIF9fZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTI3OCw2ICsyNzUsNTcgQEAKIAogICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAKKyAgICBkZWYgdGVzdF93YWtldXBfd3JpdGVfZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MTA1OiB3cml0ZSgpIGVycm9ycyBpbiB0aGUgQyBzaWduYWwgaGFuZGxlciBzaG91bGQgbm90CisgICAgICAgICMgcGFzcyBzaWxlbnRseS4KKyAgICAgICAgIyBVc2UgYSBzdWJwcm9jZXNzIHRvIGhhdmUgb25seSBvbmUgdGhyZWFkLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaW1wb3J0IHNpZ25hbAorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMLCAwKQorICAgICAgICBmY250bC5mY250bChyLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICAgICAgIyBTZXQgd2FrZXVwX2ZkIGEgcmVhZC1vbmx5IGZpbGUgZGVzY3JpcHRvciB0byB0cmlnZ2VyIHRoZSBlcnJvcgorICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycjoKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUuMCkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgIyBBbiBpZ25vcmVkIGV4Y2VwdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHByaW50ZWQgb3V0IG9uIHN0ZGVycgorICAgICAgICAgICAgZXJyID0gZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmICgnRXhjZXB0aW9uIGlnbm9yZWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlIHNpZ25hbCB3YWtldXAgZmQnCisgICAgICAgICAgICAgICAgbm90IGluIGVycik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICAgICAgaWYgKCdPU0Vycm9yOiBbRXJybm8gJWRdJyAlIGVycm5vLkVCQURGKSBub3QgaW4gZXJyOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJaZXJvRGl2aXNpb25FcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgIiIiCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mud3JpdGUociwgYid4JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJPUyBkb2Vzbid0IHJlcG9ydCB3cml0ZSgpIGVycm9yIG9uIHRoZSByZWFkIGVuZCBvZiBhIHBpcGUiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorCiAgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2Vhcmx5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3dha2V1cCgiIiJkZWYgdGVzdCgpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMzE1LDEwICszNjMsMTAgQEAKICAgICAgICAgICAgICMgV2UgYXR0ZW1wdCB0byBnZXQgYSBzaWduYWwgZHVyaW5nIHRoZSBzZWxlY3QgY2FsbAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW3JlYWRdLCBbXSwgW10sIFRJTUVPVVRfRlVMTCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZWN0LmVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT1NFcnJvciBub3QgcmFpc2VkIikKICAgICAgICAgICAgIGFmdGVyX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZHQgPSBhZnRlcl90aW1lIC0gYmVmb3JlX3RpbWUKICAgICAgICAgICAgIGlmIGR0ID49IFRJTUVPVVRfSEFMRjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCBjMjk0YzY1Li5jYjdjMzkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC0yMzEsMTEgKzIzMSw3IEBACiAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ3hveG8nXQogICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAxKQotICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ0xpYicsICdzaXRlLXBhY2thZ2VzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQotICAgICAgICBlbGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCiAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKICAgICAgICAgICAgICMgT1MgWCBmcmFtZXdvcmsgYnVpbGRzCiAgICAgICAgICAgICBzaXRlLlBSRUZJWEVTID0gWydQeXRob24uZnJhbWV3b3JrJ10KQEAgLTQzMiw1ICs0MjgsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAyMDAsIG1zZz0iQ2FuJ3QgZmluZCAiICsgdXJsKQogCiAKK2NsYXNzIFN0YXJ0dXBJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwX2ltcG9ydHMoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBjaGVja3Mgd2hpY2ggbW9kdWxlcyBhcmUgbG9hZGVkIGJ5IFB5dGhvbiB3aGVuIGl0CisgICAgICAgICMgaW5pdGlhbGx5IHN0YXJ0cyB1cG9uIHN0YXJ0dXAuCisgICAgICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctSScsICctdicsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KHNldChzeXMubW9kdWxlcykpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RkZXJyID0gc3RkZXJyLmRlY29kZSgndXRmLTgnKQorICAgICAgICBtb2R1bGVzID0gZXZhbChzdGRvdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l0ZScsIG1vZHVsZXMpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDUKKyAgICAgICAgcmVfbW9kcyA9IHsncmUnLCAnX3NyZScsICdzcmVfY29tcGlsZScsICdzcmVfY29uc3RhbnRzJywgJ3NyZV9wYXJzZSd9CisgICAgICAgICMgX29zeF9zdXBwb3J0IHVzZXMgdGhlIHJlIG1vZHVsZSBpbiBtYW55IHBsYWNzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlcy5pbnRlcnNlY3Rpb24ocmVfbW9kcyksIHN0ZGVycikKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTU0OAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsb2NhbGUnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjA5CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjb3B5cmVnJywgbW9kdWxlcywgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIxOD4KKyAgICAgICAgY29sbGVjdGlvbl9tb2RzID0geydfY29sbGVjdGlvbnMnLCAnY29sbGVjdGlvbnMnLCAnZnVuY3Rvb2xzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFwcScsICdpdGVydG9vbHMnLCAna2V5d29yZCcsICdvcGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwcmxpYicsICd0eXBlcycsICd3ZWFrcmVmJ30KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihjb2xsZWN0aW9uX21vZHMpLCBzdGRlcnIpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CmluZGV4IDJkZjkyNzEuLjkyMDNkNWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQpAQCAtNCw4ICs0LDcwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKIAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiAKKworZGVmIGV2YWx1YXRlX3NsaWNlX2luZGV4KGFyZyk6CisgICAgIiIiCisgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhbiBpbnRlZ2VyLCBhbmQgcmFpc2UKKyAgICBUeXBlRXJyb3Igd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICIiIgorICAgIGlmIGhhc2F0dHIoYXJnLCAnX19pbmRleF9fJyk6CisgICAgICAgIHJldHVybiBvcGVyYXRvci5pbmRleChhcmcpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKQorCitkZWYgc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKToKKyAgICAiIiIKKyAgICBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzbGljZS5pbmRpY2VzIG1ldGhvZC4KKworICAgICIiIgorICAgICMgQ29tcHV0ZSBzdGVwIGFuZCBsZW5ndGggYXMgaW50ZWdlcnMuCisgICAgbGVuZ3RoID0gb3BlcmF0b3IuaW5kZXgobGVuZ3RoKQorICAgIHN0ZXAgPSAxIGlmIHNsaWNlLnN0ZXAgaXMgTm9uZSBlbHNlIGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0ZXApCisKKyAgICAjIFJhaXNlIFZhbHVlRXJyb3IgZm9yIG5lZ2F0aXZlIGxlbmd0aCBvciB6ZXJvIHN0ZXAuCisgICAgaWYgbGVuZ3RoIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKQorICAgIGlmIHN0ZXAgPT0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpCisKKyAgICAjIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuCisgICAgbG93ZXIgPSAtMSBpZiBzdGVwIDwgMCBlbHNlIDAKKyAgICB1cHBlciA9IGxlbmd0aCAtIDEgaWYgc3RlcCA8IDAgZWxzZSBsZW5ndGgKKworICAgICMgQ29tcHV0ZSBzdGFydC4KKyAgICBpZiBzbGljZS5zdGFydCBpcyBOb25lOgorICAgICAgICBzdGFydCA9IHVwcGVyIGlmIHN0ZXAgPCAwIGVsc2UgbG93ZXIKKyAgICBlbHNlOgorICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0YXJ0KQorICAgICAgICBzdGFydCA9IG1heChzdGFydCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0YXJ0IDwgMCBlbHNlIG1pbihzdGFydCwgdXBwZXIpCisKKyAgICAjIENvbXB1dGUgc3RvcC4KKyAgICBpZiBzbGljZS5zdG9wIGlzIE5vbmU6CisgICAgICAgIHN0b3AgPSBsb3dlciBpZiBzdGVwIDwgMCBlbHNlIHVwcGVyCisgICAgZWxzZToKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0b3ApCisgICAgICAgIHN0b3AgPSBtYXgoc3RvcCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0b3AgPCAwIGVsc2UgbWluKHN0b3AsIHVwcGVyKQorCisgICAgcmV0dXJuIHN0YXJ0LCBzdG9wLCBzdGVwCisKKworIyBDbGFzcyBwcm92aWRpbmcgYW4gX19pbmRleF9fIG1ldGhvZC4gIFVzZWQgZm9yIHRlc3Rpbmcgc2xpY2UuaW5kaWNlcy4KKworY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKwogY2xhc3MgU2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgpAQCAtNzUsNiArMTM3LDIyIEBACiAgICAgICAgIHMgPSBzbGljZShvYmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0b3AgaXMgb2JqKQogCisgICAgZGVmIGNoZWNrX2luZGljZXMoc2VsZiwgc2xpY2UsIGxlbmd0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHNsaWNlLmluZGljZXMobGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGFjdHVhbCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBlY3RlZCA9IHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgbGVuZ3RoID49IDAgYW5kIHNsaWNlLnN0ZXAgIT0gMDoKKyAgICAgICAgICAgIGFjdHVhbCA9IHJhbmdlKCpzbGljZS5pbmRpY2VzKGxlbmd0aCkpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJhbmdlKGxlbmd0aClbc2xpY2VdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAgMikuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQpAQCAtMTA4LDcgKzE4Niw0MSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMCkpWzo6c3lzLm1heHNpemUgLSAxXSwgWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNsaWNlKE5vbmUpLmluZGljZXMsIDE8PDEwMCkKKyAgICAgICAgIyBDaGVjayBhIHZhcmlldHkgb2Ygc3RhcnQsIHN0b3AsIHN0ZXAgYW5kIGxlbmd0aCB2YWx1ZXMsIGluY2x1ZGluZworICAgICAgICAjIHZhbHVlcyBleGNlZWRpbmcgc3lzLm1heHNpemUgKHNlZSBpc3N1ZSAjMTQ3OTQpLgorICAgICAgICB2YWxzID0gW05vbmUsIC0yKioxMDAsIC0yKiozMCwgLTUzLCAtNywgLTEsIDAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBsZW5ndGhzID0gWzAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBmb3Igc2xpY2VfYXJncyBpbiBpdGVydG9vbHMucHJvZHVjdCh2YWxzLCByZXBlYXQ9Myk6CisgICAgICAgICAgICBzID0gc2xpY2UoKnNsaWNlX2FyZ3MpCisgICAgICAgICAgICBmb3IgbGVuZ3RoIGluIGxlbmd0aHM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHMsIGxlbmd0aCkKKyAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHNsaWNlKDAsIDEwLCAxKSwgLTMpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBsZW5ndGggc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKE5vbmUpLmluZGljZXMoLTEpCisKKyAgICAgICAgIyBaZXJvIHN0ZXAgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAwKS5pbmRpY2VzKDUpCisKKyAgICAgICAgIyBVc2luZyBhIHN0YXJ0LCBzdG9wIG9yIHN0ZXAgb3IgbGVuZ3RoIHRoYXQgY2FuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgICAgICAgIyBpbnRlZ2VyIHNob3VsZCBnaXZlIGEgVHlwZUVycm9yIC4uLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLjAsIDEwLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLjAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEuMCkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1LjApCisKKyAgICAgICAgIyAuLi4gYnV0IGl0IHNob3VsZCBiZSBmaW5lIHRvIHVzZSBhIGN1c3RvbSBjbGFzcyB0aGF0IHByb3ZpZGVzIGluZGV4LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTXlJbmRleGFibGUoMCksIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgTXlJbmRleGFibGUoMTApLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIE15SW5kZXhhYmxlKDEpKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoTXlJbmRleGFibGUoNSkpLCAoMCwgNSwgMSkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV93aXRob3V0X2dldHNsaWNlKHNlbGYpOgogICAgICAgICB0bXAgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CmluZGV4IDhkMWRiYmYuLmU2ZjM5ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvdXJjZV9hZGRyZXNzLCAoJzEyNy4wLjAuMScsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvY2FsX2hvc3RuYW1lLCAnbG9jYWxob3N0JykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNTI0LDEyICs1MjQsNiBAQAogCiBjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IG1vY2tfc29ja2V0Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gc29ja2V0Ci0KICAgICBkZWYgdGVzdE5vdENvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBUZXN0IHZhcmlvdXMgb3BlcmF0aW9ucyBvbiBhbiB1bmNvbm5lY3RlZCBTTVRQIG9iamVjdCB0aGF0CiAgICAgICAgICMgc2hvdWxkIHJhaXNlIGV4Y2VwdGlvbnMgKGF0IHByZXNlbnQgdGhlIGF0dGVtcHQgaW4gU01UUC5zZW5kCkBAIC01NDEsMTAgKzUzNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLnNlbmQsICd0ZXN0IG1zZycpCiAKICAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgotICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdCIsICJib2d1cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdDpib2d1cyIpCiAKIApAQCAtODI1LDYgKzgxOSwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9jcmVkZW50aWFsc1snY3JhbS1tZDUnXSwgc3RyKGVycikpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCisgICAgZGVmIHRlc3RBVVRIX211bHRpcGxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSB0cmllZC4KKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIEJPR1VTIFBMQUlOIExPR0lOIENSQU0tTUQ1IikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICB0cnk6IHNtdHAubG9naW4oc2ltX2F1dGhbMF0sIHNpbV9hdXRoWzFdKQorICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkLCBzdHIoZXJyKSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKICAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KSBhcyBzbXRwOgogICAgICAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAubm9vcCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weSBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CmluZGV4IDEwMDQ2ODguLjVlMGFiZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgICAgICAoJ3NuZGhkci5oY29tJywgKCdoY29tJywgMjIwNTAuMCwgMSwgLTEsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnNuZHQnLCAoJ3NuZHQnLCA0NDEwMCwgMSwgNSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIudm9jJywgKCd2b2MnLCAwLCAxLCAtMSwgOCkpLAotICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgLTEsIDE2KSksCisgICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCA1LCAxNikpLAogICAgICAgICApOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZShmaWxlbmFtZSwgc3ViZGlyPSJzbmRoZHJkYXRhIikKICAgICAgICAgICAgIHdoYXQgPSBzbmRoZHIud2hhdChmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKaW5kZXggMTI1MTdhZS4uM2M5ZmJmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKQEAgLTIsNyArMiw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KQEAgLTI0LDEzICsyMywxMyBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAogdHJ5OgotICAgIGltcG9ydCBmY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZjbnRsID0gRmFsc2UKLXRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGYtOCcpICMjIHRlc3QgdW5pY29kZSBzdHJpbmcgYW5kIGNhcnJpYWdlIHJldHVybgpAQCAtNDYsNyArNDUsNyBAQAogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTIxLDEyICsxMjAsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yNDIsOSArMjcxLDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjk1LDcgKzMyMSw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQzLDExICs1NjksNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA4LDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyNiw4ICs2NDgsMTcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0lcycgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JXMnICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0NSwxMSArNjc2LDExIEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgpAQCAtNzEyLDEzICs3NDMsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyNiwxMyArNzU3LDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Niw4ICs4MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4OSw3ICs4MzQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODM2LDE3ICs4ODEsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtOTAyLDcgKzk0Nyw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzUsOSArOTgwLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgJzo6JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTg2LDcgKzEwMzksNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTMsOSArMTA2NiwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGInXHgwMCcgKiAxNikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzo6JywgZihiJ1x4MDAnICogMTYpKQpAQCAtMTA0Myw3ICsxMTA0LDcgQEAKICAgICAgICAgIyBBdCBsZWFzdCBmb3IgZUNvcy4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBTLzM5MCB0byBwYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBteV9pcF9hZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZVswXSwgKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCkBAIC0xMDcwLDEzICsxMTMxLDE5IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNvY2suc2V0dGltZW91dCgxKQogICAgICAgICBzb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZCwgYiJzcGFtIikKIAogICAgIGRlZiB0ZXN0TmV3QXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyB0ZXN0aW5nIC5mYW1pbHksIC50eXBlIGFuZCAucHJvdG9jb2wKKwogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc29jay50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sucHJvdG8sIDApCiAgICAgICAgIHNvY2suY2xvc2UoKQogCkBAIC0xMTI5LDkgKzExOTYsMTIgQEAKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQogICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKICAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycwotICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODAsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmYW1pbHkpLCAnQWRkcmVzc0ZhbWlseS5BRl9JTkVUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHlwZSksICdTb2NrZXRUeXBlLlNPQ0tfU1RSRUFNJykKICAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCkBAIC0xMTczLDcgKzEyNDMsNyBAQAogCiAgICAgZGVmIHRlc3RfZ2V0bmFtZWluZm8oc2VsZik6CiAgICAgICAgICMgb25seSBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sICgnbWFpbC5weXRob24ub3JnJywwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBpcyBub3QgZW5hYmxlZCcpCkBAIC0xMjg1LDEwICsxMzU1LDMxIEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9mbG93aW5mbyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoJzo6MScsMCwgMHhmZmZmZmZmZiksIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0LkhPU1R2NiwgMCwgMHhmZmZmZmZmZiksIDApCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKCc6OjEnLCAwLCAtMTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcy5iaW5kLCAoc3VwcG9ydC5IT1NUdjYsIDAsIC0xMCkpCiAKKyAgICBkZWYgdGVzdF9zdHJfZm9yX2VudW1zKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBBRl8qIGFuZCBTT0NLXyogY29uc3RhbnRzIGhhdmUgZW51bS1saWtlIHN0cmluZworICAgICAgICAjIHJlcHJzLgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMuZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLnR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ1dpbGwgbm90IHdvcmsgb24gV2luZG93cycpCisgICAgZGVmIHRlc3RfdWtub3duX3NvY2tldF9mYW1pbHlfcmVwcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2hlbiBjcmVhdGVkIHdpdGggYSBmYW1pbHkgdGhhdCdzIG5vdCBvbmUgb2YgdGhlIGtub3duCisgICAgICAgICMgQUZfKi9TT0NLXyogY29uc3RhbnRzLCBzb2NrZXQuZmFtaWx5IGp1c3QgcmV0dXJucyB0aGUgbnVtYmVyLgorICAgICAgICAjCisgICAgICAgICMgVG8gZG8gdGhpcyB3ZSBmb29sIHNvY2tldC5zb2NrZXQgaW50byBiZWxpZXZpbmcgaXQgYWxyZWFkeSBoYXMgYW4KKyAgICAgICAgIyBvcGVuIGZkIGJlY2F1c2Ugb24gdGhpcyBwYXRoIGl0IGRvZXNuJ3QgYWN0dWFsbHkgdmVyaWZ5IHRoZSBmYW1pbHkgYW5kCisgICAgICAgICMgdHlwZSBhbmQgcG9wdWxhdGVzIHRoZSBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjCisgICAgICAgICMgT24gV2luZG93cyB0aGlzIHRyaWNrIHdvbid0IHdvcmssIHNvIHRoZSB0ZXN0IGlzIHNraXBwZWQuCisgICAgICAgIGZkLCBfID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChmYW1pbHk9NDI0MjQsIHR5cGU9MTMzMzEsIGZpbGVubz1mZCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5mYW1pbHksIDQyNDI0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnR5cGUsIDEzMzMxKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNDQU5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEyOTgsMTAgKzEzODksMzUgQEAKICAgICAgICAgc29ja2V0LlBGX0NBTgogICAgICAgICBzb2NrZXQuQ0FOX1JBVwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTUNvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc29ja2V0LkNBTl9CQ00KKworICAgICAgICAjIG9wY29kZXMKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VUVVAgICAgICMgY3JlYXRlIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX0RFTEVURSAgICAjIHJlbW92ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VORCAgICAgICMgc2VuZCBvbmUgQ0FOIGZyYW1lCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NFVFVQICAgICAjIGNyZWF0ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfREVMRVRFICAgICMgcmVtb3ZlIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFRYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9FWFBJUkVEICAgIyBub3RpZmljYXRpb24gb24gcGVyZm9ybWVkIHRyYW5zbWlzc2lvbnMgKGNvdW50PTApCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFJYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9USU1FT1VUICAgIyBjeWNsaWMgbWVzc2FnZSBpcyBhYnNlbnQKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfQ0hBTkdFRCAgICMgdXBkYXRlZCBDQU4gZnJhbWUgKGRldGVjdGVkIGNvbnRlbnQgY2hhbmdlKQorCiAgICAgZGVmIHRlc3RDcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdENyZWF0ZUJDTVNvY2tldChzZWxmKToKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX0RHUkFNLCBzb2NrZXQuQ0FOX0JDTSkgYXMgczoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0QmluZEFueShzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6CiAgICAgICAgICAgICBzLmJpbmQoKCcnLCApKQpAQCAtMTMwOSw3ICsxNDI1LDcgQEAKICAgICBkZWYgdGVzdFRvb0xvbmdJbnRlcmZhY2VOYW1lKHNlbGYpOgogICAgICAgICAjIG1vc3Qgc3lzdGVtcyBsaW1pdCBJRk5BTVNJWiB0byAxNiwgdGFrZSAxMDI0IHRvIGJlIHN1cmUKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNvY2tldC5lcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5iaW5kLCAoJ3gnICogMTAyNCwpKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fUkFXX0xPT1BCQUNLIiksCkBAIC0xMzM0LDE5ICsxNDUwLDggQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIENBTlRlc3QoVGhyZWFkZWRDQU5Tb2NrZXRUZXN0KToKIAotICAgICIiIlRoZSBDQU4gZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gPGxpbnV4L2Nhbi5oPjoKLQotICAgIHN0cnVjdCBjYW5fZnJhbWUgewotICAgICAgICBjYW5pZF90IGNhbl9pZDsgIC8qIDMyIGJpdCBDQU5fSUQgKyBFRkYvUlRSL0VSUiBmbGFncyAqLwotICAgICAgICBfX3U4ICAgIGNhbl9kbGM7IC8qIGRhdGEgbGVuZ3RoIGNvZGU6IDAgLi4gOCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbOF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotICAgIH07Ci0gICAgIiIiCi0gICAgY2FuX2ZyYW1lX2ZtdCA9ICI9SUIzeDhzIgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKICAgICAgICAgVGhyZWFkZWRDQU5Tb2NrZXRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIApAQCAtMTM5NSw2ICsxNTAwLDQ2IEBACiAgICAgICAgIHNlbGYuY2YyID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoMHgxMiwgYidceDk5XHgyMlx4MzMnKQogICAgICAgICBzZWxmLmNsaS5zZW5kKHNlbGYuY2YyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgX3Rlc3RCQ00oc2VsZik6CisgICAgICAgIGNmLCBhZGRyID0gc2VsZi5jbGkucmVjdmZyb20oc2VsZi5idWZzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2YsIGNmKQorICAgICAgICBjYW5faWQsIGNhbl9kbGMsIGRhdGEgPSBzZWxmLmRpc3NlY3RfY2FuX2ZyYW1lKGNmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FuX2lkLCBjYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYXRhLCBkYXRhKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTShzZWxmKToKKyAgICAgICAgYmNtID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiY20uY2xvc2UpCisgICAgICAgIGJjbS5jb25uZWN0KChzZWxmLmludGVyZmFjZSwpKQorICAgICAgICBzZWxmLmNhbl9pZCA9IDB4MTIzCisgICAgICAgIHNlbGYuZGF0YSA9IGJ5dGVzKFsweGMwLCAweGZmLCAweGVlXSkKKyAgICAgICAgc2VsZi5jZiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKHNlbGYuY2FuX2lkLCBzZWxmLmRhdGEpCisgICAgICAgIG9wY29kZSA9IHNvY2tldC5DQU5fQkNNX1RYX1NFTkQKKyAgICAgICAgZmxhZ3MgPSAwCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBpdmFsMV9zZWNvbmRzID0gaXZhbDFfdXNlYyA9IGl2YWwyX3NlY29uZHMgPSBpdmFsMl91c2VjID0gMAorICAgICAgICBiY21fY2FuX2lkID0gMHgwMjIyCisgICAgICAgIG5mcmFtZXMgPSAxCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5jZikgPT0gMTYKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc2VsZi5iY21fY21kX21zZ19mbXQsCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBpdmFsMV9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMV91c2VjLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl91c2VjLAorICAgICAgICAgICAgICAgICAgICBiY21fY2FuX2lkLAorICAgICAgICAgICAgICAgICAgICBuZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGhlYWRlcl9wbHVzX2ZyYW1lID0gaGVhZGVyICsgc2VsZi5jZgorICAgICAgICBieXRlc19zZW50ID0gYmNtLnNlbmQoaGVhZGVyX3BsdXNfZnJhbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfc2VudCwgbGVuKGhlYWRlcl9wbHVzX2ZyYW1lKSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9SRFMsICdSRFMgc29ja2V0cyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1JEU1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTYwOSw3ICsxNzU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBmaWxlbm8pCiAgICAgICAgICMgY2xpX2Nvbm4gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4uLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfY29ubi5fY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKICAgICAgICAgIyAuLi5idXQgd2UgY2FuIGNyZWF0ZSBhbm90aGVyIHNvY2tldCB1c2luZyB0aGUgKHN0aWxsIG9wZW4pCiAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yCkBAIC0xOTc4LDcgKzIxMjMsNyBAQAogICAgIGRlZiBfdGVzdFNlbmRtc2dFeGNlc3NDbXNnUmVqZWN0KHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJDTVNHX1NQQUNFIik6CiAgICAgICAgICAgICAjIENhbiBvbmx5IHNlbmQgb25lIGl0ZW0KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW01TR10sIFsoMCwgMCwgYiIiKSwgKDAsIDAsIGIiIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY20uZXhjZXB0aW9uLmVycm5vKQogICAgICAgICBzZWxmLnNlbmRUb1NlcnZlcihiImRvbmUiKQpAQCAtMTk4OSw3ICsyMTM0LDcgQEAKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaV9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKIAogCiBjbGFzcyBTZW5kbXNnU3RyZWFtVGVzdHMoU2VuZG1zZ1Rlc3RzKToKQEAgLTIwMzMsNyArMjE3OCw3IEBACiAgICAgQHRlc3RTZW5kbXNnRG9udFdhaXQuY2xpZW50X3NraXAKICAgICBkZWYgX3Rlc3RTZW5kbXNnRG9udFdhaXQoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW2IiYSIqNTEyXSwgW10sIHNvY2tldC5NU0dfRE9OVFdBSVQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywKQEAgLTIwNTMsOSArMjE5OCw5IEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dOb0Rlc3RBZGRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbTVNHXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10sIFtdLCAwLCBOb25lKQogCiAKQEAgLTIxNDEsNyArMjI4Niw3IEBACiAgICAgZGVmIHRlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IHJlY3Ztc2dbX2ludG9dKCkgZmFpbHMgb24gYSBjbG9zZWQgc29ja2V0LgogICAgICAgICBzZWxmLnNlcnZfc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmRvUmVjdm1zZywgc2VsZi5zZXJ2X3NvY2ssIDEwMjQpCiAKICAgICBkZWYgX3Rlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgcGFzcwpAQCAtMjU4Nyw3ICsyNzMyLDcgQEAKICAgICAgICAgIyBjYWxsIGZhaWxzLCBqdXN0IHNlbmQgbXNnIHdpdGggbm8gYW5jaWxsYXJ5IGRhdGEuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddLCBhbmNkYXRhKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgaXQgd2FzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuZXJybm8sIGludCkKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddKQpAQCAtMjk2NSw3ICszMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5KCJpIiwgW3NlbGYudHJhZmZpY19jbGFzc10pLnRvYnl0ZXMoKSArIGIiXHgwMCIpLAogICAgICAgICAgICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QTElNSVQsCiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLmhvcF9saW1pdF0pKV0pCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcigKICAgICAgICAgICAgICAgICBbTVNHXSwKQEAgLTM0MjMsMTAgKzM1NjgsMTAgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoc2VsZi50aW1lb3V0KQogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRSZWN2KHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIHNvY2tldC5lcnJvciB3aXRoIGFuCisgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIE9TRXJyb3Igd2l0aCBhbgogICAgICAgICAjIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCiAgICAgICAgIHNlbGYuc2V0QWxhcm0oc2VsZi5hbGFybV90aW1lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbiwgc29ja2V0LnRpbWVvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5UUikKQEAgLTM0ODMsOSArMzYyOCw5IEBACiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFNlbmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSwgcnVuIGluIGEgbG9vcCwgcmFpc2VzCi0gICAgICAgICMgc29ja2V0LmVycm9yIHdpdGggYW4gZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhCisgICAgICAgICMgT1NFcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQogICAgICAgICAjIHNpZ25hbC4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKICAgICAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKQEAgLTM1ODQsNyArMzcyOSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2MTAsNyArMzc1NSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2NDAsNyArMzc4NSw3IEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQpAQCAtMzY3MCw3ICszODE1LDcgQEAKICAgICAgICAgY29ubi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIHJlY3YuIikKQEAgLTM3NTMsNyArMzg5OCw3IEBACiAgICAgICAgICMgRmlyc3QgcmVhZCByYWlzZXMgYSB0aW1lb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnJlYWRfZmlsZS5yZWFkLCAxKQogICAgICAgICAjIFNlY29uZCByZWFkIGlzIGRpc2FsbG93ZWQKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjdHg6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgogICAgICAgICAgICAgc2VsZi5yZWFkX2ZpbGUucmVhZCgxKQogICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiLCBzdHIoY3R4LmV4Y2VwdGlvbikpCiAKQEAgLTM4NDUsNyArMzk5MCw3IEBACiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5yZWFkX2ZpbGUuZmlsZW5vKQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQogCiAgICAgZGVmIF90ZXN0UmVhbENsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0zODgyLDcgKzQwMjcsNyBAQAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfcmFpc2VfZWludHIoKToKLSAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQogCiAgICAgZGVmIF90ZXh0aW93cmFwX21vY2tfc29ja2V0KHNlbGYsIG1vY2ssIGJ1ZmZlcmluZz0tMSk6CiAgICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhtb2NrLCAiciIpCkBAIC0zOTk0LDcgKzQxMzksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc2VsZi5yZWFkX21zZykKICAgICAgICAgIyAuLi51bnRpbCB0aGUgZmlsZSBpcyBpdHNlbGYgY2xvc2VkCiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKIAogICAgIGRlZiBfdGVzdE1ha2VmaWxlQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfZmlsZS53cml0ZShzZWxmLndyaXRlX21zZykKQEAgLTQxNDMsNyArNDI4OCw3IEBACiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBjbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGkuY2xvc2UpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGNsaS5jb25uZWN0KChIT1NULCBwb3J0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKIApAQCAtNDE1MSw3ICs0Mjk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCiAgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKIAogICAgICAgICAjIElzc3VlICMxNjI1NzogY3JlYXRlX2Nvbm5lY3Rpb24oKSBjYWxscyBnZXRhZGRyaW5mbygpIGFnYWluc3QKQEAgLTQyOTksNyArNDQ0NCw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChUQ1ApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFRDUCkiKQpAQCAtNDM1Niw3ICs0NTAxLDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5yZWN2KDEwMjQpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVURQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChVRFApIikKQEAgLTQzNjYsMTAgKzQ1MTEsMTAgQEAKIGNsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPU0Vycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIE9TRXJyb3IpKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ0xpbnV4IHNwZWNpZmljIHRlc3QnKQogY2xhc3MgVGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDM5Niw3ICs0NTQxLDcgQEAKICAgICBkZWYgdGVzdE5hbWVPdmVyZmxvdyhzZWxmKToKICAgICAgICAgYWRkcmVzcyA9ICJceDAwIiArICJoIiAqIHNlbGYuVU5JWF9QQVRIX01BWAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcy5iaW5kLCBhZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcy5iaW5kLCBhZGRyZXNzKQogCiAgICAgZGVmIHRlc3RTdHJOYW1lKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYW4gYWJzdHJhY3QgbmFtZSBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nLgpAQCAtNDYzOCw3ICs0NzgzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKICAgICAgICAgIyBleGNlcHRpb24gaW5zaWRlIHdpdGggYmxvY2sKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKIAogICAgIGRlZiB0ZXN0Q3JlYXRlQ29ubmVjdGlvbkJhc2Uoc2VsZik6CkBAIC00NjY2LDE5ICs0ODExLDc2IEBACiAgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKLSAgICAgICAgICAgICAgICAgICAgICJTT0NLX0NMT0VYRUMgbm90IGRlZmluZWQiKQotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICJtb2R1bGUgZmNudGwgbm90IGF2YWlsYWJsZSIpCi1jbGFzcyBDbG9leGVjQ29uc3RhbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEluaGVyaXRhbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKICAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDI4KQogICAgIGRlZiB0ZXN0X1NPQ0tfQ0xPRVhFQyhzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQykgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnR5cGUgJiBzb2NrZXQuU09DS19DTE9FWEVDKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHMsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5nZXRfaW5oZXJpdGFibGUoKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBuZXdzb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG5ld3NvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICAgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICAgICAgZmxhZ3MgJj0gfmZjbnRsLkZEX0NMT0VYRUMKKyAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHNvY2tldC5zb2NrZXRwYWlyKCkiKQorICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHMxLCBzMiA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMxLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoczIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEuZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfTk9OQkxPQ0siKSwKQEAgLTQ4NDcsNyArNTA0OSw3IEBACiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKICAgICAgICAgQ29udGV4dE1hbmFnZXJzVGVzdCwKLSAgICAgICAgQ2xvZXhlY0NvbnN0YW50VGVzdCwKKyAgICAgICAgSW5oZXJpdGFuY2VUZXN0LAogICAgICAgICBOb25ibG9ja0NvbnN0YW50VGVzdAogICAgIF0pCiAgICAgdGVzdHMuYXBwZW5kKEJhc2ljU29ja2V0UGFpclRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IDU5ZDhlNWQuLjA2MTdiMzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0yLDggKzIsOCBAQAogVGVzdCBzdWl0ZSBmb3Igc29ja2V0c2VydmVyLgogIiIiCiAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbApAQCAtMjksNyArMjksNyBAQAogSEFWRV9VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKQogcmVxdWlyZXNfdW5peF9zb2NrZXRzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1VOSVhfU09DS0VUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIFVuaXggc29ja2V0cycpCi1IQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpIGFuZCBvcy5uYW1lICE9ICJvczIiCitIQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpCiByZXF1aXJlc19mb3JraW5nID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0ZPUktJTkcsICdyZXF1aXJlcyBmb3JraW5nJykKIAogZGVmIHNpZ25hbF9hbGFybShuKToKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZm9yIGZuIGluIHNlbGYudGVzdF9maWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYudGVzdF9maWxlc1s6XSA9IFtdCiAKQEAgLTk2LDIxICs5Niw3IEBACiAgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCBhIHdheSB0byB0ZWxsIEFGX1VOSVggdG8gcGljayBpdHMgb3duIG5hbWUKICAgICAgICAgICAgICMgbGlrZSBBRl9JTkVUIHByb3ZpZGVzIHBvcnQ9PTAuCiAgICAgICAgICAgICBkaXIgPSBOb25lCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgIGRpciA9ICdcc29ja2V0JwogICAgICAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd1bml4X3NvY2tldC4nLCBkaXI9ZGlyKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgICAgICAjIEFGX1VOSVggc29ja2V0IG5hbWVzIG9uIE9TLzIgcmVxdWlyZSBhIHNwZWNpZmljIHByZWZpeAotICAgICAgICAgICAgICAgICMgd2hpY2ggY2FuJ3QgaW5jbHVkZSBhIGRyaXZlIGxldHRlciBhbmQgbXVzdCBhbHNvIHVzZQotICAgICAgICAgICAgICAgICMgYmFja3NsYXNoZXMgYXMgZGlyZWN0b3J5IHNlcGFyYXRvcnMKLSAgICAgICAgICAgICAgICBpZiBmblsxXSA9PSAnOic6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMjpdCi0gICAgICAgICAgICAgICAgaWYgZm5bMF0gaW4gKG9zLnNlcCwgb3MuYWx0c2VwKToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsxOl0KLSAgICAgICAgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3Muc2VwLCBvcy5hbHRzZXApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQogICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzLmFwcGVuZChmbikKICAgICAgICAgICAgIHJldHVybiBmbgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWQyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitjbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKKworICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQorCisgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCisKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zc2wucHkgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQppbmRleCAwNmQ0NTk4Li5hZmVjNzJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBnYwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KQEAgLTE3LDE5ICsxOCwxNSBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IGZ1bmN0b29scworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKLVBST1RPQ09MUyA9IFsKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjMsCi0gICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCi1dCi1pZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgUFJPVE9DT0xTLmFwcGVuZChzc2wuUFJPVE9DT0xfU1NMdjIpCi0KK1BST1RPQ09MUyA9IHNvcnRlZChzc2wuX1BST1RPQ09MX05BTUVTKQogSE9TVCA9IHN1cHBvcnQuSE9TVAogCi1kYXRhX2ZpbGUgPSBsYW1iZGEgbmFtZTogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG5hbWUpCitkZWYgZGF0YV9maWxlKCpuYW1lKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICpuYW1lKQogCiAjIFRoZSBjdXN0b20ga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIGluIHRlc3Rfc3NsIGFyZSBnZW5lcmF0ZWQKICMgdXNpbmcgTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkuCkBAIC00Nyw2ICs0NCwxNyBAQAogS0VZX1BBU1NXT1JEID0gInNvbWVwYXNzIgogQ0FQQVRIID0gZGF0YV9maWxlKCJjYXBhdGgiKQogQllURVNfQ0FQQVRIID0gb3MuZnNlbmNvZGUoQ0FQQVRIKQorQ0FGSUxFX05FVVJPTklPID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNGUxMjk1YTMuMCIpCitDQUZJTEVfQ0FDRVJUID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNWVkMzZmOTkuMCIpCisKKworIyBlbXB0eSBDUkwKK0NSTEZJTEUgPSBkYXRhX2ZpbGUoInJldm9jYXRpb24uY3JsIikKKworIyBUd28ga2V5cyBhbmQgY2VydHMgc2lnbmVkIGJ5IHRoZSBzYW1lIENBIChmb3IgU05JIHRlc3RzKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCJrZXljZXJ0My5wZW0iKQorU0lHTkVEX0NFUlRGSUxFMiA9IGRhdGFfZmlsZSgia2V5Y2VydDQucGVtIikKK1NJR05JTkdfQ0EgPSBkYXRhX2ZpbGUoInB5Y2FjZXJ0LnBlbSIpCiAKIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCA9IGRhdGFfZmlsZSgiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQogCkBAIC02MCw2ICs2OCw3IEBACiBESEZJTEUgPSBkYXRhX2ZpbGUoImRoNTEyLnBlbSIpCiBCWVRFU19ESEZJTEUgPSBvcy5mc2VuY29kZShESEZJTEUpCiAKKwogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTczLDYgKzgyLDIzIEBACiAgICAgIyAwLjkuN2ggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgNywgOCwgMTUpCiAKK2RlZiBoYXZlX3ZlcmlmeV9mbGFncygpOgorICAgICMgMC45Ljggb3IgaGlnaGVyCisgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCisKK2RlZiBhc24xdGltZShjZXJ0X3RpbWUpOgorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGlnbm9yZSBzZWNvbmRzLCBzZWUgIzE4MjA3CisgICAgIyAwLjkuOC5pCisgICAgaWYgc3NsLl9PUEVOU1NMX0FQSV9WRVJTSU9OID09ICgwLCA5LCA4LCA5LCAxNSk6CisgICAgICAgIGZtdCA9ICIlYiAlZCAlSDolTTolUyAlWSBHTVQiCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUoY2VydF90aW1lLCBmbXQpCisgICAgICAgIGR0ID0gZHQucmVwbGFjZShzZWNvbmQ9MCkKKyAgICAgICAgY2VydF90aW1lID0gZHQuc3RyZnRpbWUoZm10KQorICAgICAgICAjICVkIGFkZHMgbGVhZGluZyB6ZXJvIGJ1dCBBU04xX1RJTUVfcHJpbnQoKSB1c2VzIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgaWYgY2VydF90aW1lWzRdID09ICIwIjoKKyAgICAgICAgICAgIGNlcnRfdGltZSA9IGNlcnRfdGltZVs6NF0gKyAiICIgKyBjZXJ0X3RpbWVbNTpdCisKKyAgICByZXR1cm4gY2VydF90aW1lCiAKICMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKIGRlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgpAQCAtOTAsMTQgKzExNiwxMiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmdW5jCiAKK25lZWRzX3NuaSA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19TTkksICJTTkkgc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisKIAogY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6Ci0gICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwotICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCiAgICAgICAgIHNzbC5DRVJUX05PTkUKICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTE3NSw4ICsxOTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdsb2NhbGhvc3QnKSwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sICdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCAnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykKKyAgICAgICAgIyBOb3RlIHRoZSBuZXh0IHRocmVlIGFzc2VydHMgd2lsbCBmYWlsIGlmIHRoZSBrZXlzIGFyZSByZWdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sIGFzbjF0aW1lKCdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgYXNuMXRpbWUoJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3NlcmlhbE51bWJlciddLCAnRDdDNzM4MTkxOUFGQzI0RScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCkBAIC0xOTQsNiArMjE5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICMgZXh0cmEgT0NTUCBhbmQgQUlBIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ09DU1AnXSwgKCdodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY2FJc3N1ZXJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1haWEudmVyaXNpZ24uY29tL1NWUkludGxHMy5jZXInLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1jcmwudmVyaXNpZ24uY29tL1NWUkludGxHMy5jcmwnLCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9jZXJ0X0NWRV8yMDEzXzQyMzgoc2VsZik6CiAgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOVUxMQllURUNFUlQpCkBAIC0yNzYsMTUgKzMwNywxNSBAQAogCiAgICAgZGVmIHRlc3Rfd3JhcHBlZF91bmNvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBNZXRob2RzIG9uIGFuIHVuY29ubmVjdGVkIFNTTFNvY2tldCBwcm9wYWdhdGUgdGhlIG9yaWdpbmFsCi0gICAgICAgICMgc29ja2V0LmVycm9yIHJhaXNlIGJ5IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCisgICAgICAgICMgT1NFcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQocykgYXMgc3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3YsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdiwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb20sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzg1MjQ6IHdoZW4gY3JlYXRpbmcgYW4gU1NMIHNvY2tldCwgdGhlIHRpbWVvdXQgb2YgdGhlCkBAIC0zMDksMTUgKzM0MCwxNSBAQAogICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1DRVJURklMRSkgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QsIChIT1NULCA4MDgwKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPUNFUlRGSUxFLCBrZXlmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCkBAIC00ODksMTUgKzUyMCwxMjEgQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY2VydGlmaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJST09UIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzLCAiIikKKworICAgICAgICB0cnVzdF9vaWRzID0gc2V0KCkKKyAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiAoIkNBIiwgIlJPT1QiKToKKyAgICAgICAgICAgIHN0b3JlID0gc3NsLmVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdG9yZSwgbGlzdCkKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHN0b3JlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMykKKyAgICAgICAgICAgICAgICBjZXJ0LCBlbmMsIHRydXN0ID0gZWxlbWVudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjZXJ0LCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVuYywgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRydXN0LCAoc2V0LCBib29sKSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRydXN0LCBzZXQpOgorICAgICAgICAgICAgICAgICAgICB0cnVzdF9vaWRzLnVwZGF0ZSh0cnVzdCkKKworICAgICAgICBzZXJ2ZXJBdXRoID0gIjEuMy42LjEuNS41LjcuMy4xIgorICAgICAgICBzZWxmLmFzc2VydEluKHNlcnZlckF1dGgsIHRydXN0X29pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY3JscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NybHMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY3JscykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jcmxzLCAiIikKKworICAgICAgICBjcmxzID0gc3NsLmVudW1fY3JscygiQ0EiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3JscywgbGlzdCkKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gY3JsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnRbMF0sIGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtZW50WzFdLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKworCisgICAgZGVmIHRlc3RfYXNuMW9iamVjdChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTI5LCAnc2VydmVyQXV0aCcsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5sb25nbmFtZSwgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwub2lkLCAnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdCwgJ3NlcnZlckF1dGgnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAxMDAwMDAiKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEwMDAwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoaSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5uaWQsIGludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLnNob3J0bmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubG9uZ25hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm9pZCwgKHN0ciwgdHlwZShOb25lKSkpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyQXV0aCcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJzEuMy42LjEuNS41LjcuMy4xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJ3NlcnZlcmF1dGgnIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlcmF1dGgnKQorCisgICAgZGVmIHRlc3RfcHVycG9zZV9lbnVtKHNlbGYpOgorICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjInKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm5pZCwgMTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILnNob3J0bmFtZSwgJ2NsaWVudEF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMicpCisKKwogY2xhc3MgQ29udGV4dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MikKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6CisgICAgICAgICAgICBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuU1NMQ29udGV4dCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgNDIpCkBAIC01MzYsNyArNjczLDcgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAwCiAKLSAgICBkZWYgdGVzdF92ZXJpZnkoc2VsZik6CisgICAgZGVmIHRlc3RfdmVyaWZ5X21vZGUoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgIyBEZWZhdWx0IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQpAQCAtNTUxLDEzICs2ODgsMzIgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IDQyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgIGRlZiB0ZXN0X3ZlcmlmeV9mbGFncyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAjIGRlZmF1bHQgdmFsdWUgYnkgT3BlblNTTAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTikKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfREVGQVVMVAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgIyBzdXBwb3J0cyBhbnkgdmFsdWUKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGIHwgc3NsLlZFUklGWV9YNTA5X1NUUklDVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IE5vbmUKKwogICAgIGRlZiB0ZXN0X2xvYWRfY2VydF9jaGFpbihzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIENvbWJpbmVkIGtleSBhbmQgY2VydCBpbiBhIHNpbmdsZSBmaWxlCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUsIGtleWZpbGU9Q0VSVEZJTEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfY2VydF9jaGFpbiwga2V5ZmlsZT1DRVJURklMRSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjQxLDggKzc5Nyw4IEBACiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQllURVNfQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPUJZVEVTX0NFUlRGSUxFLCBjYXBhdGg9Tm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIE5vbmUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjUzLDYgKzgwOSw2NCBAQAogICAgICAgICAjIElzc3VlICMxMDk4OTogY3Jhc2ggaWYgdGhlIHNlY29uZCBhcmd1bWVudCB0eXBlIGlzIGludmFsaWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBUcnVlKQogCisgICAgZGVmIHRlc3RfbG9hZF92ZXJpZnlfY2FkYXRhKHNlbGYpOgorICAgICAgICAjIHRlc3QgY2FkYXRhCisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfQ0FDRVJUKSBhcyBmOgorICAgICAgICAgICAgY2FjZXJ0X3BlbSA9IGYucmVhZCgpCisgICAgICAgIGNhY2VydF9kZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQoY2FjZXJ0X3BlbSkKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9ORVVST05JTykgYXMgZjoKKyAgICAgICAgICAgIG5ldXJvbmlvX3BlbSA9IGYucmVhZCgpCisgICAgICAgIG5ldXJvbmlvX2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChuZXVyb25pb19wZW0pCisKKyAgICAgICAgIyB0ZXN0IFBFTQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAwKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9bmV1cm9uaW9fcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKyAgICAgICAgIyBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9ICJcbiIuam9pbigoY2FjZXJ0X3BlbSwgbmV1cm9uaW9fcGVtKSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y29tYmluZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgd2l0aCBqdW5rIGFyb3VuZCB0aGUgY2VydHMKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IFsiaGVhZCIsIGNhY2VydF9wZW0sICJvdGhlciIsIG5ldXJvbmlvX3BlbSwgImFnYWluIiwKKyAgICAgICAgICAgICAgICAgICAgbmV1cm9uaW9fcGVtLCAidGFpbCJdCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPSJcbiIuam9pbihjb21iaW5lZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgdGVzdCBERVIKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfZGVyKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IGIiIi5qb2luKChjYWNlcnRfZGVyLCBuZXVyb25pb19kZXIpKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBlcnJvciBjYXNlcworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgY2FkYXRhPW9iamVjdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAibm8gc3RhcnQgbGluZSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9ImJyb2tlbiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJub3QgZW5vdWdoIGRhdGEiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWIiYnJva2VuIikKKworCiAgICAgZGVmIHRlc3RfbG9hZF9kaF9wYXJhbXMoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgY3R4LmxvYWRfZGhfcGFyYW1zKERIRklMRSkKQEAgLTcwMCw2ICs5MTQsMTMyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgYiJmb28iKQogCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorCisgICAgICAgICMgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sgZXhwZWN0cyBhIGNhbGxhYmxlLCBvciBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgY3R4KQorCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgUmVmZXJlbmNlIGN5Y2xlcyB0aHJvdWdoIHRoZSBzZXJ2ZXJuYW1lIGNhbGxiYWNrIGFyZSBkZXRlY3RlZAorICAgICAgICAjIGFuZCBjbGVhcmVkLgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCwgY3ljbGU9Y3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGR1bW15Y2FsbGJhY2spCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoY3R4KQorICAgICAgICBkZWwgY3R4LCBkdW1teWNhbGxiYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jZXJ0X3N0b3JlX3N0YXRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAwfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMX0pCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAxLCAnY3JsJzogMCwgJ3g1MDknOiAyfSkKKworICAgIGRlZiB0ZXN0X2dldF9jYV9jZXJ0cyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICMgQ0VSVEZJTEUgaXMgbm90IGZsYWdnZWQgYXMgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBDQTpUUlVFCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBidXQgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUIGlzIGEgQ0EgY2VydAorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksCisgICAgICAgICAgICBbeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICdub3RBZnRlcic6IGFzbjF0aW1lKCdNYXIgMjkgMTI6Mjk6NDkgMjAzMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ25vdEJlZm9yZSc6IGFzbjF0aW1lKCdNYXIgMzAgMTI6Mjk6NDkgMjAwMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ3NlcmlhbE51bWJlcic6ICcwMCcsCisgICAgICAgICAgICAgICdjcmxEaXN0cmlidXRpb25Qb2ludHMnOiAoJ2h0dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybCcsKSwKKyAgICAgICAgICAgICAgJ3N1YmplY3QnOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdodHRwOi8vd3d3LmNhY2VydC5vcmcnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICd2ZXJzaW9uJzogM31dKQorCisgICAgICAgIHdpdGggb3BlbihTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpIGFzIGY6CisgICAgICAgICAgICBwZW0gPSBmLnJlYWQoKQorICAgICAgICBkZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoVHJ1ZSksIFtkZXJdKQorCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cyhzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9kZWZhdWx0X2NlcnRzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsICdTRVJWRVJfQVVUSCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIHdpdGggb3BlbihTSUdOSU5HX0NBKSBhcyBmOgorICAgICAgICAgICAgY2FkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPVNJR05JTkdfQ0EsIGNhcGF0aD1DQVBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGF0YT1jYWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCiAKIGNsYXNzIFNTTEVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC05MDMsNiArMTI0MywyOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2Nvbm5lY3RfY2FkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX0NBQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPXBlbSkKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisKKyAgICAgICAgICAgICMgc2FtZSB3aXRoIERFUgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1kZXIpCisgICAgICAgICAgICB3aXRoIGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkgYXMgczoKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICJudCIsICJDYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X21ha2VmaWxlX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM1MjM4OiBjcmVhdGluZyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBtYWtlZmlsZSgpIHNob3VsZG4ndApAQCAtMTAxNSw2ICsxMzc3LDIxIEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzX2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBjYXBhdGggY2VydHMgYXJlIGxvYWRlZCBvbiByZXF1ZXN0CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPUNBUEFUSCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN0eC5nZXRfY2FfY2VydHMoKSksIDEpCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xMTQyLDcgKzE1MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyOiByZWFkICVyICglcyksIHNlbmRpbmcgYmFjayAlciAoJXMpLi4uXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobXNnLCBjdHlwZSwgbXNnLmxvd2VyKCksIGN0eXBlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKG1zZy5sb3dlcigpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmNoYXR0eToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoIlRlc3Qgc2VydmVyIGZhaWx1cmU6XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCkBAIC0xMjUyLDcgKzE2MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTEzNTYsMTkgKzE3MzMsMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuU1NMRXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHg6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5zb2NrZXQuZXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyB4OgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbk9TRXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHguZXJybm8gIT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXElPRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxPU0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVXNlIG9mIGludmFsaWQgY2VydCBzaG91bGQgaGF2ZSBmYWlsZWQhIikKIAogICAgIGRlZiBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LCBpbmRhdGE9YiJGT09cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSwgc25pX25hbWU9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBMYXVuY2ggYSBzZXJ2ZXIsIGNvbm5lY3QgYSBjbGllbnQgdG8gaXQgYW5kIHRyeSB2YXJpb3VzIHJlYWRzCiAgICAgICAgIGFuZCB3cml0ZXMuCkBAIC0xMzc4LDcgKzE3NTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PWNoYXR0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpCiAgICAgICAgIHdpdGggc2VydmVyOgotICAgICAgICAgICAgd2l0aCBjbGllbnRfY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNuaV9uYW1lKSBhcyBzOgogICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gW2luZGF0YSwgYnl0ZWFycmF5KGluZGF0YSksIG1lbW9yeXZpZXcoaW5kYXRhKV06CiAgICAgICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CkBAIC0xNDAyLDYgKzE3ODAsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRzLnVwZGF0ZSh7CiAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzc2lvbic6IHMuY29tcHJlc3Npb24oKSwKICAgICAgICAgICAgICAgICAgICAgJ2NpcGhlcic6IHMuY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICdwZWVyY2VydCc6IHMuZ2V0cGVlcmNlcnQoKSwKICAgICAgICAgICAgICAgICAgICAgJ2NsaWVudF9ucG5fcHJvdG9jb2wnOiBzLnNlbGVjdGVkX25wbl9wcm90b2NvbCgpCiAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKQEAgLTE0MjcsMTIgKzE4MDYsMTUgQEAKICAgICAgICAgY2xpZW50X2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBjbGllbnRfb3B0aW9ucwogICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNlcnZlcl9wcm90b2NvbCkKICAgICAgICAgc2VydmVyX2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBzZXJ2ZXJfb3B0aW9ucworCisgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycyBvbiB0aGUgY2xpZW50LCBvdGhlcndpc2UgYW4KKyAgICAgICAgIyBTU0x2MjMgY2xpZW50IHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpCisgICAgICAgICMgc3RhcnRpbmcgZnJvbSBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgorICAgICAgICBpZiBjbGllbnRfY29udGV4dC5wcm90b2NvbCA9PSBzc2wuUFJPVE9DT0xfU1NMdjIzOgorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQuc2V0X2NpcGhlcnMoIkFMTCIpCisKICAgICAgICAgZm9yIGN0eCBpbiAoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0KToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IGNlcnRzcmVxcwotICAgICAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzLCBvdGhlcndpc2UgYW4gU1NMdjIzIGNsaWVudAotICAgICAgICAgICAgIyB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKSBzdGFydGluZyBmcm9tCi0gICAgICAgICAgICAjIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCi0gICAgICAgICAgICBjdHguc2V0X2NpcGhlcnMoIkFMTCIpCiAgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKICAgICAgICAgdHJ5OgpAQCAtMTQ0Myw3ICsxODI1LDcgQEAKICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzIG9yIGUuZXJybm8gIT0gZXJybm8uRUNPTk5SRVNFVDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICBlbHNlOgpAQCAtMTQ2MiwxMCArMTg0NCwxMSBAQAogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQotICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQotICAgICAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChjb250ZXh0LCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvY29sPXNzbC5fUFJPVE9DT0xfTkFNRVNbcHJvdG9jb2xdKToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQogCiAgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0KHNlbGYpOgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMTQ3Niw4ICsxODU5LDE0IEBACiAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNoYXR0eT1GYWxzZSkKICAgICAgICAgICAgIHdpdGggc2VydmVyOgotICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgIyBnZXRwZWVyY2VydCgpIHJhaXNlIFZhbHVlRXJyb3Igd2hpbGUgdGhlIGhhbmRzaGFrZSBpc24ndAorICAgICAgICAgICAgICAgICMgZG9uZS4KKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzLmRvX2hhbmRzaGFrZSgpCiAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKICAgICAgICAgICAgICAgICBjaXBoZXIgPSBzLmNpcGhlcigpCkBAIC0xNDk5LDYgKzE4ODgsNDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYmVmb3JlLCBhZnRlcikKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgICAgICBkZWYgdGVzdF9jcmxfY2hlY2soc2VsZik6CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRleHQudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0RFRkFVTFQpCisKKyAgICAgICAgICAgICMgVkVSSUZZX0RFRkFVTFQgc2hvdWxkIHBhc3MKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICAgICAgIyBWRVJJRllfQ1JMX0NIRUNLX0xFQUYgd2l0aG91dCBhIGxvYWRlZCBDUkwgZmlsZSBmYWlscworICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfZmxhZ3MgfD0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIHZlcmlmeSBmYWlsZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorCisgICAgICAgICAgICAjIG5vdyBsb2FkIGEgQ1JMIGZpbGUuIFRoZSBDUkwgZmlsZSBpcyBzaWduZWQgYnkgdGhlIENBLgorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ1JMRklMRSkKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCiAgICAgICAgIGRlZiB0ZXN0X2VtcHR5X2NlcnQoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYW4gZW1wdHkgY2VydCBmaWxlIiIiCiAgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKQEAgLTE1MTcsNyArMTk0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6Ci0gICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCiAgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTE1NDUsNyArMTk3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQpAQCAtMTU4OCw3ICsyMDE5LDcgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMgb24gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMICgwLjkuN2wsIGZvciBpbnN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKQEAgLTE2NDgsNiArMjA3OSw0OSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4xIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4xIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjIgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8yKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzIpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisKICAgICAgICAgZGVmIHRlc3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgICAgICAiIiJTd2l0Y2hpbmcgZnJvbSBjbGVhciB0ZXh0IHRvIGVuY3J5cHRlZCBhbmQgYmFjayBhZ2Fpbi4iIiIKICAgICAgICAgICAgIG1zZ3MgPSAoYiJtc2cgMSIsIGIiTVNHIDIiLCBiIlNUQVJUVExTIiwgYiJNU0cgMyIsIGIibXNnIDQiLCBiIkVORFRMUyIsIGIibXNnIDUiLCBiIm1zZyA2IikKQEAgLTE3MDgsNyArMjE4Miw3IEBACiAKICAgICAgICAgZGVmIHRlc3Rfc29ja2V0c2VydmVyKHNlbGYpOgogICAgICAgICAgICAgIiIiVXNpbmcgYSBTb2NrZXRTZXJ2ZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgU1NMIGNvbm5lY3Rpb25zLiIiIgotICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1DRVJURklMRSkKICAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCkBAIC0xOTY0LDYgKzI0MzgsMjAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZW1vdGUsIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXIsIGNsaWVudF9hZGRyKQogCisgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0X2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKworICAgICAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKwogICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2NpcGhlcnMoc2VsZik6CiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgICAgIHRyeToKQEAgLTE5NzUsNyArMjQ2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgc3NsLlNTTEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5vIHNoYXJlZCBjaXBoZXIiLCBzdHIoc2VydmVyLmNvbm5fZXJyb3JzWzBdKSkKIApAQCAtMjEwOCw2ICsyNTk2LDEyNCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdHNbJ3NlcnZlcl9ucG5fcHJvdG9jb2xzJ10pIGVsc2UgJ25vdGhpbmcnCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKHNlcnZlcl9yZXN1bHQsICJzZXJ2ZXIiKSkKIAorICAgICAgICBkZWYgc25pX2NvbnRleHRzKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRTIpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgcmV0dXJuIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dAorCisgICAgICAgIGRlZiBjaGVja19jb21tb25fbmFtZShzZWxmLCBzdGF0cywgbmFtZSk6CisgICAgICAgICAgICBjZXJ0ID0gc3RhdHNbJ3BlZXJjZXJ0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCgnY29tbW9uTmFtZScsIG5hbWUpLCksIGNlcnRbJ3N1YmplY3QnXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIHNlcnZlcm5hbWVfY2Ioc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgoc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCkpCisgICAgICAgICAgICAgICAgaWYgc2VydmVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrLmNvbnRleHQgPSBvdGhlcl9jb250ZXh0CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJuYW1lX2NiKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgIyBUaGUgaG9zdG5hbWUgd2FzIGZldGNoZWQgcHJvcGVybHksIGFuZCB0aGUgY2VydGlmaWNhdGUgd2FzCisgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWygic3VwZXJtZXNzYWdlIiwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgICMgQ0VSVEZJTEU0IHdhcyBzZWxlY3RlZAorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2Zha2Vob3N0bmFtZScpCisKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgICMgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHNlcnZlcl9uYW1lPU5vbmUKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoTm9uZSwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorCisgICAgICAgICAgICAjIENoZWNrIGRpc2FibGluZyB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J25vdGZ1bm55JykKKyAgICAgICAgICAgICMgQ2VydGlmaWNhdGUgZGlkbid0IGNoYW5nZQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19hbGVydChzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIGEgVExTIGFsZXJ0IGlzIHJlZmxlY3RlZCB0byB0aGUgY29ubmVjdGluZyBjbGllbnQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JldHVybmluZ19hbGVydChzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNzbC5BTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yZXR1cm5pbmdfYWxlcnQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfQUNDRVNTX0RFTklFRCcpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmFpc2luZyhzZWxmKToKKyAgICAgICAgICAgICMgUmFpc2luZyBmYWlscyB0aGUgY29ubmVjdGlvbiB3aXRoIGEgVExTIGhhbmRzaGFrZSBmYWlsdXJlIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmFpc2luZyhzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yYWlzaW5nKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1NTTFYzX0FMRVJUX0hBTkRTSEFLRV9GQUlMVVJFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfd3JvbmdfcmV0dXJuX3R5cGUoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyB0aGUgd3JvbmcgcmV0dXJuIHR5cGUgdGVybWluYXRlcyB0aGUgVExTIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICMgd2l0aCBhbiBpbnRlcm5hbCBlcnJvciBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3dyb25nX3JldHVybl90eXBlKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3dyb25nX3JldHVybl90eXBlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0lOVEVSTkFMX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlR5cGVFcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGVfYWZ0ZXJfY2xvc2VfcmFpc2VzX3ZhbHVlcnJvcihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQorCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlYWQsIDEwMjQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy53cml0ZSwgYidoZWxsbycpCisKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0yMTI3LDEwICsyNzMzLDE2IEBACiAgICAgICAgICAgICAoc3NsLk9QRU5TU0xfVkVSU0lPTiwgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPKSkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICB1bmRlciAlcyIgJSBwbGF0KQogICAgICAgICBwcmludCgiICAgICAgICAgIEhBU19TTkkgPSAlciIgJSBzc2wuSEFTX1NOSSkKKyAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9BTEwgPSAweCU4eCIgJSBzc2wuT1BfQUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCgiICAgICAgICAgIE9QX05PX1RMU3YxXzEgPSAweCU4eCIgJSBzc2wuT1BfTk9fVExTdjFfMSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogCiAgICAgZm9yIGZpbGVuYW1lIGluIFsKICAgICAgICAgQ0VSVEZJTEUsIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgQllURVNfQ0VSVEZJTEUsCiAgICAgICAgIE9OTFlDRVJULCBPTkxZS0VZLCBCWVRFU19PTkxZQ0VSVCwgQllURVNfT05MWUtFWSwKKyAgICAgICAgU0lHTkVEX0NFUlRGSUxFLCBTSUdORURfQ0VSVEZJTEUyLCBTSUdOSU5HX0NBLAogICAgICAgICBCQURDRVJULCBCQURLRVksIEVNUFRZQ0VSVF06CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZSAlciIgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQppbmRleCBlYjNmMDdhLi5hZjZjZWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0YXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CkBAIC0xLDkgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9mcmVzaF9tb2R1bGUKLWltcG9ydCBzdGF0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKLWNsYXNzIFRlc3RGaWxlbW9kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjX3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgZnJlc2g9Wydfc3RhdCddKQorcHlfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBibG9ja2VkPVsnX3N0YXQnXSkKKworY2xhc3MgVGVzdEZpbGVtb2RlOgorICAgIHN0YXRtb2QgPSBOb25lCisKICAgICBmaWxlX2ZsYWdzID0geydTRl9BUFBFTkQnLCAnU0ZfQVJDSElWRUQnLCAnU0ZfSU1NVVRBQkxFJywgJ1NGX05PVU5MSU5LJywKICAgICAgICAgICAgICAgICAgICdTRl9TTkFQU0hPVCcsICdVRl9BUFBFTkQnLCAnVUZfQ09NUFJFU1NFRCcsICdVRl9ISURERU4nLAogICAgICAgICAgICAgICAgICAgJ1VGX0lNTVVUQUJMRScsICdVRl9OT0RVTVAnLCAnVUZfTk9VTkxJTksnLCAnVUZfT1BBUVVFJ30KQEAgLTYzLDE3ICs2NywxNyBAQAogICAgICAgICAgICAgc3RfbW9kZSA9IG9zLmxzdGF0KGZuYW1lKS5zdF9tb2RlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdF9tb2RlID0gb3Muc3RhdChmbmFtZSkuc3RfbW9kZQotICAgICAgICBtb2Rlc3RyID0gc3RhdC5maWxlbW9kZShzdF9tb2RlKQorICAgICAgICBtb2Rlc3RyID0gc2VsZi5zdGF0bW9kLmZpbGVtb2RlKHN0X21vZGUpCiAgICAgICAgIHJldHVybiBzdF9tb2RlLCBtb2Rlc3RyCiAKICAgICBkZWYgYXNzZXJ0U19JUyhzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgIyB0ZXN0IGZvcm1hdCwgbHN0cmlwIGlzIGZvciBTX0lGSUZPCi0gICAgICAgIGZtdCA9IGdldGF0dHIoc3RhdCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChtb2RlKSwgZm10KQorICAgICAgICBmbXQgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKG1vZGUpLCBmbXQpCiAgICAgICAgICMgdGVzdCB0aGF0IGp1c3Qgb25lIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgICAgICB0ZXN0bmFtZSA9ICJTX0lTIiArIG5hbWUKICAgICAgICAgZm9yIGZ1bmNuYW1lIGluIHNlbGYuZm9ybWF0X2Z1bmNzOgotICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc3RhdCwgZnVuY25hbWUsIE5vbmUpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGZ1bmNuYW1lLCBOb25lKQogICAgICAgICAgICAgaWYgZnVuYyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGlmIGZ1bmNuYW1lID09IHRlc3RuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZ1bmNuYW1lKQpAQCAtOTEsMzUgKzk1LDM1IEBACiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctcnd4LS0tLS0tJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYVSkKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzA3MCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy0tLS1yd3gtLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYRykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hHKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDA3KQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLS0tLXJ3eCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hPKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWE8pCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG80NDQpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctci0tci0tci0tJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLCAwbzQ0NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzcwMCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0cls6M10sICctcncnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lGUkVHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JRlJFRykKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQpAQCAtMTY1LDI1ICsxNjksMzQgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnN0YXRfc3RydWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5wZXJtaXNzaW9uX2JpdHMuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZmlsZV9mbGFnczoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHZhbHVlLCBpbnQpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShmdW5jKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygwKSwgMCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RGaWxlbW9kZSkKK2NsYXNzIFRlc3RGaWxlbW9kZUNTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBjX3N0YXQKKworICAgIGZvcm1hdHMgPSBUZXN0RmlsZW1vZGUuZm9ybWF0cyB8IHsnU19JRkRPT1InLCAnU19JRlBPUlQnLCAnU19JRldIVCd9CisgICAgZm9ybWF0X2Z1bmNzID0gVGVzdEZpbGVtb2RlLmZvcm1hdF9mdW5jcyB8IHsnU19JU0RPT1InLCAnU19JU1BPUlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NfSVNXSFQnfQorCisKK2NsYXNzIFRlc3RGaWxlbW9kZVB5U3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGF0bW9kID0gcHlfc3RhdAorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTU4NWUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsMTUzNCBAQAorIiIiVGVzdCBzdWl0ZSBmb3Igc3RhdGlzdGljcyBtb2R1bGUsIGluY2x1ZGluZyBoZWxwZXIgTnVtZXJpY1Rlc3RDYXNlIGFuZAorYXBwcm94X2VxdWFsIGZ1bmN0aW9uLgorCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGVjaW1hbAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfY2FsY19lcnJvcnMoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3JzIGJldHdlZW4gdHdvIG51bWJlcnMuCisKKyAgICA+Pj4gX2NhbGNfZXJyb3JzKDEwMCwgNzUpCisgICAgKDI1LCAwLjI1KQorICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCAxMDApCisgICAgKDAsIDAuMCkKKworICAgIFJldHVybnMgdGhlIChhYnNvbHV0ZSBlcnJvciwgcmVsYXRpdmUgZXJyb3IpIGJldHdlZW4gdGhlIHR3byBhcmd1bWVudHMuCisgICAgIiIiCisgICAgYmFzZSA9IG1heChhYnMoYWN0dWFsKSwgYWJzKGV4cGVjdGVkKSkKKyAgICBhYnNfZXJyID0gYWJzKGFjdHVhbCAtIGV4cGVjdGVkKQorICAgIHJlbF9lcnIgPSBhYnNfZXJyL2Jhc2UgaWYgYmFzZSBlbHNlIGZsb2F0KCdpbmYnKQorICAgIHJldHVybiAoYWJzX2VyciwgcmVsX2VycikKKworCitkZWYgYXBwcm94X2VxdWFsKHgsIHksIHRvbD0xZS0xMiwgcmVsPTFlLTcpOgorICAgICIiImFwcHJveF9lcXVhbCh4LCB5IFssIHRvbCBbLCByZWxdXSkgPT4gVHJ1ZXxGYWxzZQorCisgICAgUmV0dXJuIFRydWUgaWYgbnVtYmVycyB4IGFuZCB5IGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0byB3aXRoaW4gc29tZQorICAgIG1hcmdpbiBvZiBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4gTnVtYmVycyB3aGljaCBjb21wYXJlIGVxdWFsCisgICAgd2lsbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIHggaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcyBsZXNzIHRoYW4KKyAgICBhbiBhYnNvbHV0ZSBlcnJvciB0b2wgb3IgYSByZWxhdGl2ZSBlcnJvciByZWwsIHdoaWNoZXZlciBpcyBiaWdnZXIuCisKKyAgICBJZiBnaXZlbiwgYm90aCB0b2wgYW5kIHJlbCBtdXN0IGJlIGZpbml0ZSwgbm9uLW5lZ2F0aXZlIG51bWJlcnMuIElmIG5vdAorICAgIGdpdmVuLCBkZWZhdWx0IHZhbHVlcyBhcmUgdG9sPTFlLTEyIGFuZCByZWw9MWUtNy4KKworICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDMsIHJlbD0wKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEuMjU4OSwgMS4yNTg3LCB0b2w9MC4wMDAxLCByZWw9MCkKKyAgICBGYWxzZQorCisgICAgQWJzb2x1dGUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoeC15KTsgaWYgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICB0b2wsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIFJlbGF0aXZlIGVycm9yIGlzIGRlZmluZWQgYXMgYWJzKCh4LXkpL3gpIG9yIGFicygoeC15KS95KSwgd2hpY2hldmVyIGlzCisgICAgc21hbGxlciwgcHJvdmlkZWQgeCBvciB5IGFyZSBub3QgemVyby4gSWYgdGhhdCBmaWd1cmUgaXMgbGVzcyB0aGFuIG9yCisgICAgZXF1YWwgdG8gcmVsLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICBDb21wbGV4IG51bWJlcnMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQuIElmIHlvdSB3aXNoIHRvIGNvbXBhcmUgdG8KKyAgICBjb21wbGV4IG51bWJlcnMsIGV4dHJhY3QgdGhlaXIgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFuZCBjb21wYXJlIHRoZW0KKyAgICBpbmRpdmlkdWFsbHkuCisKKyAgICBOQU5zIGFsd2F5cyBjb21wYXJlIHVuZXF1YWwsIGV2ZW4gd2l0aCB0aGVtc2VsdmVzLiBJbmZpbml0aWVzIGNvbXBhcmUKKyAgICBhcHByb3hpbWF0ZWx5IGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduIChib3RoIHBvc2l0aXZlIG9yIGJvdGgKKyAgICBuZWdhdGl2ZSkuIEluZmluaXRpZXMgd2l0aCBkaWZmZXJlbnQgc2lnbnMgY29tcGFyZSB1bmVxdWFsOyBzbyBkbworICAgIGNvbXBhcmlzb25zIG9mIGluZmluaXRpZXMgd2l0aCBmaW5pdGUgbnVtYmVycy4KKyAgICAiIiIKKyAgICBpZiB0b2wgPCAwIG9yIHJlbCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Vycm9yIHRvbGVyYW5jZXMgbXVzdCBiZSBub24tbmVnYXRpdmUnKQorICAgICMgTkFOcyBhcmUgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcsIGFwcHJveGltYXRlbHkgb3Igb3RoZXJ3aXNlLgorICAgIGlmIG1hdGguaXNuYW4oeCkgb3IgbWF0aC5pc25hbih5KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwgYWxzbyBjb21wYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisgICAgaWYgeCA9PSB5OgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgd2l0aCB0aGUgc2FtZSBzaWduLgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIG1hdGguaXNpbmYoeCkgb3IgbWF0aC5pc2luZih5KToKKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24sIG9yCisgICAgICAgICMgb25lIGluZmluaXR5IGFuZCBvbmUgZmluaXRlIG51bWJlci4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBUd28gZmluaXRlIG51bWJlcnMuCisgICAgYWN0dWFsX2Vycm9yID0gYWJzKHggLSB5KQorICAgIGFsbG93ZWRfZXJyb3IgPSBtYXgodG9sLCByZWwqbWF4KGFicyh4KSwgYWJzKHkpKSkKKyAgICByZXR1cm4gYWN0dWFsX2Vycm9yIDw9IGFsbG93ZWRfZXJyb3IKKworCisjIFRoaXMgY2xhc3MgZXhpc3RzIG9ubHkgYXMgc29tZXdoZXJlIHRvIHN0aWNrIGEgZG9jc3RyaW5nIGNvbnRhaW5pbmcKKyMgZG9jdGVzdHMuIFRoZSBmb2xsb3dpbmcgZG9jc3RyaW5nIGFuZCB0ZXN0cyB3ZXJlIG9yaWdpbmFsbHkgaW4gYSBzZXBhcmF0ZQorIyBtb2R1bGUuIE5vdyB0aGF0IGl0IGhhcyBiZWVuIG1lcmdlZCBpbiBoZXJlLCBJIG5lZWQgc29tZXdoZXJlIHRvIGhhbmcgdGhlLgorIyBkb2NzdHJpbmcuIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgd2lsbCBkaWUsIGFuZCB0aGUgaW5mb3JtYXRpb24gYmVsb3cgd2lsbAorIyBlaXRoZXIgYmVjb21lIHJlZHVuZGFudCwgb3IgYmUgbW92ZWQgaW50byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlcy4KK2NsYXNzIF9Eb05vdGhpbmc6CisgICAgIiIiCisgICAgV2hlbiBkb2luZyBudW1lcmljIHdvcmssIGVzcGVjaWFsbHkgd2l0aCBmbG9hdHMsIGV4YWN0IGVxdWFsaXR5IGlzIG9mdGVuCisgICAgbm90IHdoYXQgeW91IHdhbnQuIER1ZSB0byByb3VuZC1vZmYgZXJyb3IsIGl0IGlzIG9mdGVuIGEgYmFkIGlkZWEgdG8gdHJ5CisgICAgdG8gY29tcGFyZSBmbG9hdHMgd2l0aCBlcXVhbGl0eS4gSW5zdGVhZCB0aGUgdXN1YWwgcHJvY2VkdXJlIGlzIHRvIHRlc3QKKyAgICB0aGVtIHdpdGggc29tZSAoaG9wZWZ1bGx5IHNtYWxsISkgYWxsb3dhbmNlIGZvciBlcnJvci4KKworICAgIFRoZSBgYGFwcHJveF9lcXVhbGBgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBlaXRoZXIgYW4gYWJzb2x1dGUKKyAgICBlcnJvciB0b2xlcmFuY2UsIG9yIGEgcmVsYXRpdmUgZXJyb3IsIG9yIGJvdGguCisKKyAgICBBYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2VzIGFyZSBzaW1wbGUsIGJ1dCB5b3UgbmVlZCB0byBrbm93IHRoZSBtYWduaXR1ZGUKKyAgICBvZiB0aGUgcXVhbnRpdGllcyBiZWluZyBjb21wYXJlZDoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHRvbD0xZS0zKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgdG9sPTFlLTMpICAjIHRvbCBpcyB0b28gc21hbGwuCisgICAgRmFsc2UKKworICAgIFJlbGF0aXZlIGVycm9ycyBhcmUgbW9yZSBzdWl0YWJsZSB3aGVuIHRoZSB2YWx1ZXMgeW91IGFyZSBjb21wYXJpbmcgY2FuCisgICAgdmFyeSBpbiBtYWduaXR1ZGU6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NSwgMTIuMzQ2LCByZWw9MWUtNCkKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHJlbD0xZS00KQorICAgIFRydWUKKworICAgIGJ1dCBhIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlIGVycm9yIHRlc3RpbmcgY2FuIHJ1biBpbnRvIHRyb3VibGUKKyAgICBhcm91bmQgemVyby4KKworICAgIElmIHlvdSBzdXBwbHkgYm90aCBhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgYW5kIGEgcmVsYXRpdmUgZXJyb3IsIHRoZQorICAgIGNvbXBhcmlzb24gc3VjY2VlZHMgaWYgZWl0aGVyIGluZGl2aWR1YWwgdGVzdCBzdWNjZWVkczoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMywgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgIiIiCisgICAgcGFzcworCisKKworIyBXZSBwcmVmZXIgdGhpcyBmb3IgdGVzdGluZyBudW1lcmljIHZhbHVlcyB0aGF0IG1heSBub3QgYmUgZXhhY3RseSBlcXVhbCwKKyMgYW5kIGF2b2lkIHVzaW5nIFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsLCBiZWNhdXNlIGl0IHN1Y2tzIDotKQorCitjbGFzcyBOdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdCBjbGFzcyBmb3IgbnVtZXJpYyB3b3JrLgorCisgICAgVGhpcyBzdWJjbGFzc2VzIFRlc3RDYXNlLiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgbWV0aG9kCisgICAgYGBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbGBgLCAgYGBhc3NlcnRBcHByb3hFcXVhbGBgIGlzIHByb3ZpZGVkLgorICAgICIiIgorICAgICMgQnkgZGVmYXVsdCwgd2UgZXhwZWN0IGV4YWN0IGVxdWFsaXR5LCB1bmxlc3Mgb3ZlcnJpZGRlbi4KKyAgICB0b2wgPSByZWwgPSAwCisKKyAgICBkZWYgYXNzZXJ0QXBwcm94RXF1YWwoCisgICAgICAgICAgICBzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2w9Tm9uZSwgcmVsPU5vbmUsIG1zZz1Ob25lCisgICAgICAgICAgICApOgorICAgICAgICAiIiJUZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICAgICAgVGhpcyB0ZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGVxdWFsIHRvCisgICAgICAgIHdpdGhpbiBgYHRvbGBgLCBhbiBhYnNvbHV0ZSBlcnJvciwgb3IgYGByZWxgYCwgYSByZWxhdGl2ZSBlcnJvci4KKworICAgICAgICBJZiBlaXRoZXIgYGB0b2xgYCBvciBgYHJlbGBgIGFyZSBOb25lIG9yIG5vdCBnaXZlbiwgdGhleSBkZWZhdWx0IHRvCisgICAgICAgIHRlc3QgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIChieSBkZWZhdWx0LCAwKS4KKworICAgICAgICBUaGUgb2JqZWN0cyBtYXkgYmUgZWl0aGVyIG51bWJlcnMsIG9yIHNlcXVlbmNlcyBvZiBudW1iZXJzLiBTZXF1ZW5jZXMKKyAgICAgICAgYXJlIHRlc3RlZCBlbGVtZW50LWJ5LWVsZW1lbnQuCisKKyAgICAgICAgPj4+IGNsYXNzIE15VGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICAgICAuLi4gICAgIGRlZiB0ZXN0X251bWJlcihzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgeCA9IDEuMC82CisgICAgICAgIC4uLiAgICAgICAgIHkgPSBzdW0oW3hdKjYpCisgICAgICAgIC4uLiAgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoeSwgMS4wLCB0b2w9MWUtMTUpCisgICAgICAgIC4uLiAgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIGEgPSBbMS4wMDEsIDEuMDAxZS0xMCwgMS4wMDFlMTBdCisgICAgICAgIC4uLiAgICAgICAgIGIgPSBbMS4wLCAxZS0xMCwgMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhLCBiLCByZWw9MWUtMykKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBpbXBvcnQgdW5pdHRlc3QKKyAgICAgICAgPj4+IGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPICAjIFN1cHByZXNzIHRlc3QgcnVubmVyIG91dHB1dC4KKyAgICAgICAgPj4+IHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShNeVRlc3QpCisgICAgICAgID4+PiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSkucnVuKHN1aXRlKQorICAgICAgICA8dW5pdHRlc3QucnVubmVyLlRleHRUZXN0UmVzdWx0IHJ1bj0yIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRvbCBpcyBOb25lOgorICAgICAgICAgICAgdG9sID0gc2VsZi50b2wKKyAgICAgICAgaWYgcmVsIGlzIE5vbmU6CisgICAgICAgICAgICByZWwgPSBzZWxmLnJlbAorICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaXJzdCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2Vjb25kLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX2FwcHJveF9zZXEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X251bQorICAgICAgICBjaGVjayhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnKQorCisgICAgZGVmIF9jaGVja19hcHByb3hfc2VxKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpOgorICAgICAgICBpZiBsZW4oZmlyc3QpICE9IGxlbihzZWNvbmQpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAoCisgICAgICAgICAgICAgICAgInNlcXVlbmNlcyBkaWZmZXIgaW4gbGVuZ3RoOiAlZCBpdGVtcyAhPSAlZCBpdGVtcyIKKyAgICAgICAgICAgICAgICAlIChsZW4oZmlyc3QpLCBsZW4oc2Vjb25kKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorICAgICAgICBmb3IgaSwgKGEsZSkgaW4gZW51bWVyYXRlKHppcChmaXJzdCwgc2Vjb25kKSk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19hcHByb3hfbnVtKGEsIGUsIHRvbCwgcmVsLCBtc2csIGkpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9udW0oc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZywgaWR4PU5vbmUpOgorICAgICAgICBpZiBhcHByb3hfZXF1YWwoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwpOgorICAgICAgICAgICAgIyBUZXN0IHBhc3Nlcy4gUmV0dXJuIGVhcmx5LCB3ZSBhcmUgZG9uZS4KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIGZhaWxlZC4KKyAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl9tYWtlX3N0ZF9lcnJfbXNnKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpCisgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICMgQ3JlYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBhcHByb3hfZXF1YWwgZmFpbHVyZXMuCisgICAgICAgIGFzc2VydCBmaXJzdCAhPSBzZWNvbmQKKyAgICAgICAgdGVtcGxhdGUgPSAoCisgICAgICAgICAgICAnICAlciAhPSAlclxuJworICAgICAgICAgICAgJyAgdmFsdWVzIGRpZmZlciBieSBtb3JlIHRoYW4gdG9sPSVyIGFuZCByZWw9JXJcbicKKyAgICAgICAgICAgICcgIC0+IGFic29sdXRlIGVycm9yID0gJXJcbicKKyAgICAgICAgICAgICcgIC0+IHJlbGF0aXZlIGVycm9yID0gJXInCisgICAgICAgICAgICApCisgICAgICAgIGlmIGlkeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGhlYWRlciA9ICdudW1lcmljIHNlcXVlbmNlcyBmaXJzdCBkaWZmZXIgYXQgaW5kZXggJWQuXG4nICUgaWR4CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGhlYWRlciArIHRlbXBsYXRlCisgICAgICAgICMgQ2FsY3VsYXRlIGFjdHVhbCBlcnJvcnM6CisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBhYnNfZXJyLCByZWxfZXJyKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjID09PSBUZXN0IHRoZSBoZWxwZXJzID09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIC0tLSBUZXN0cyBmb3IgYXBwcm94X2VxdWFsIC0tLQorCitjbGFzcyBBcHByb3hFcXVhbFN5bW1ldHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHN5bW1ldHJ5IG9mIGFwcHJveF9lcXVhbC4KKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYXBwcm94X2VxdWFsIHRyZWF0cyByZWxhdGl2ZSBlcnJvciBzeW1tZXRyaWNhbGx5LgorICAgICAgICAjIChhLWIpL2EgaXMgdXN1YWxseSBub3QgZXF1YWwgdG8gKGEtYikvYi4gRW5zdXJlIHRoYXQgdGhpcworICAgICAgICAjIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAjCisgICAgICAgICMgICBOb3RlOiB0aGUgcmVhc29uIGZvciB0aGlzIHRlc3QgaXMgdGhhdCBhbiBlYXJseSB2ZXJzaW9uCisgICAgICAgICMgICBvZiBhcHByb3hfZXF1YWwgd2FzIG5vdCBzeW1tZXRyaWMuIEEgcmVsYXRpdmUgZXJyb3IgdGVzdAorICAgICAgICAjICAgd291bGQgcGFzcywgb3IgZmFpbCwgZGVwZW5kaW5nIG9uIHdoaWNoIHZhbHVlIHdhcyBwYXNzZWQKKyAgICAgICAgIyAgIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAgICAgIworICAgICAgICBhcmdzMSA9IFsyNDU2LCAzNy44LCAtMTIuNDUsIERlY2ltYWwoJzIuNTQnKSwgRnJhY3Rpb24oMTcsIDU0KV0KKyAgICAgICAgYXJnczIgPSBbMjQ1OSwgMzcuMiwgLTEyLjQxLCBEZWNpbWFsKCcyLjU5JyksIEZyYWN0aW9uKDE1LCA1NCldCisgICAgICAgIGFzc2VydCBsZW4oYXJnczEpID09IGxlbihhcmdzMikKKyAgICAgICAgZm9yIGEsIGIgaW4gemlwKGFyZ3MxLCBhcmdzMik6CisgICAgICAgICAgICBzZWxmLmRvX3JlbGF0aXZlX3N5bW1ldHJ5KGEsIGIpCisKKyAgICBkZWYgZG9fcmVsYXRpdmVfc3ltbWV0cnkoc2VsZiwgYSwgYik6CisgICAgICAgIGEsIGIgPSBtaW4oYSwgYiksIG1heChhLCBiKQorICAgICAgICBhc3NlcnQgYSA8IGIKKyAgICAgICAgZGVsdGEgPSBiIC0gYSAgIyBUaGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZXMuCisgICAgICAgIHJlbF9lcnIxLCByZWxfZXJyMiA9IGFicyhkZWx0YS9hKSwgYWJzKGRlbHRhL2IpCisgICAgICAgICMgQ2hvb3NlIGFuIGVycm9yIG1hcmdpbiBoYWxmd2F5IGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgcmVsID0gKHJlbF9lcnIxICsgcmVsX2VycjIpLzIKKyAgICAgICAgIyBOb3cgc2VlIHRoYXQgdmFsdWVzIGEgYW5kIGIgY29tcGFyZSBhcHByb3ggZXF1YWwgcmVnYXJkbGVzcyBvZgorICAgICAgICAjIHdoaWNoIGlzIGdpdmVuIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChiLCBhLCB0b2w9MCwgcmVsPXJlbCkpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyeShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXBwcm94X2VxdWFsKGEsIGIpID09IGFwcHJveF9lcXVhbChiLCBhKQorICAgICAgICBhcmdzID0gWy0yMywgLTIsIDUsIDEwNywgOTM1NjhdCisgICAgICAgIGRlbHRhID0gMgorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChpbnQsIGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICAgICAgeCA9IHR5cGVfKGEpKjEwMAorICAgICAgICAgICAgICAgIHkgPSB4ICsgZGVsdGEKKyAgICAgICAgICAgICAgICByID0gYWJzKGRlbHRhL21heCh4LCB5KSkKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBmaXZlIGNhc2VzIHRvIGNoZWNrOgorICAgICAgICAgICAgICAgICMgMSkgYWN0dWFsIGVycm9yIDw9IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIpCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSsxLCByZWw9MipyKQorICAgICAgICAgICAgICAgICMgMikgYWN0dWFsIGVycm9yID4gdG9sLCA+IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDMpIGFjdHVhbCBlcnJvciA8PSB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDQpIGFjdHVhbCBlcnJvciA+IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyA1KSBleGFjdCBlcXVhbGl0eSB0ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHgsIHRvbD0wLCByZWw9MCkKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPTAsIHJlbD0wKQorCisgICAgZGVmIGRvX3N5bW1ldHJ5X3Rlc3Qoc2VsZiwgYSwgYiwgdG9sLCByZWwpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJhcHByb3hfZXF1YWwgY29tcGFyaXNvbnMgZG9uJ3QgbWF0Y2ggZm9yICVyIgorICAgICAgICBmbGFnMSA9IGFwcHJveF9lcXVhbChhLCBiLCB0b2wsIHJlbCkKKyAgICAgICAgZmxhZzIgPSBhcHByb3hfZXF1YWwoYiwgYSwgdG9sLCByZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZzEsIGZsYWcyLCB0ZW1wbGF0ZS5mb3JtYXQoKGEsIGIsIHRvbCwgcmVsKSkpCisKKworY2xhc3MgQXBwcm94RXF1YWxFeGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGUgYXBwcm94X2VxdWFsIGZ1bmN0aW9uIHdpdGggZXhhY3RseSBlcXVhbCB2YWx1ZXMuCisgICAgIyBFcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgYXMgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIGV4YWN0bHkgZXF1YWwgdmFsdWVzLCB3aGljaCBzaG91bGQgY29tcGFyZSBhcHByb3gKKyAgICAjIGVxdWFsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIHRvbGVyYW5jZXMgZ2l2ZW4uCisKKyAgICBkZWYgZG9fZXhhY3RseV9lcXVhbF90ZXN0KHNlbGYsIHgsIHRvbCwgcmVsKToKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKHgsIHgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIHgpCisgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbCgteCwgLXgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIC14KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBpbnQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgbiBpbiBbNDIsIDE5NzQwLCAxNDk3NCwgMjMwLCAxNzk1LCA3MDAyNDUsIDM2NTg3XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgeCBpbiBbMC40MiwgMS45NzQwLCAxNDk3LjQsIDIzLjAsIDE3OS41LCA3MC4wMjQ1LCAzNi41ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBGcmFjdGlvbiB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBmb3IgZiBpbiBbRigxLCAyKSwgRigwKSwgRig1LCAzKSwgRig5LCA3KSwgRigzNSwgMzYpLCBGKDMsIDcpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBEZWNpbWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZm9yIGQgaW4gbWFwKEQsICI4LjIgMzEuMjc0IDkxMi4wNCAxNi43NDUgMS4yMDQ3Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGQsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWzE2LCAxMDEzLCAxMzcyLCAxMTk4LCA5NzEsIDRdOgorICAgICAgICAgICAgIyBUZXN0IGFzIGludHMuCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLCAwLjAxLCAwKQorICAgICAgICAgICAgIyBUZXN0IGFzIGZsb2F0cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4vMTAsIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgRnJhY3Rpb25zLgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDEyMzQpCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChmLCAwLjAxLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjMuNTcxIiksIERlY2ltYWwoIjAuMDEiKSwgMCkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoLURlY2ltYWwoIjgxLjM5NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWzgzNDcsIDEwMS4zLCAtNzkxMC4yOCwgRnJhY3Rpb24oNSwgMjEpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAsIDAuMDEpCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjExLjY4IiksIDAsIERlY2ltYWwoIjAuMDEiKSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYm90aChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBlcXVhbCB3aGVuIGJvdGggdG9sIGFuZCByZWwgYXJlIGdpdmVuLgorICAgICAgICBmb3IgeCBpbiBbNDEwMTcsIDE2Ljc0MiwgLTgxMy4wMiwgRnJhY3Rpb24oMywgOCldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMC4xLCAwLjAxKQorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEKCI3LjIiKSwgRCgiMC4xIiksIEQoIjAuMDEiKSkKKworCitjbGFzcyBBcHByb3hFcXVhbFVuZXF1YWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFVuZXF1YWwgdmFsdWVzIHNob3VsZCBjb21wYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZXMuCisgICAgIyBUZXN0IGNhc2VzIGZvciB1bmVxdWFsIHZhbHVlcywgd2l0aCBleGFjdCBlcXVhbGl0eSB0ZXN0LgorCisgICAgZGVmIGRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHNlbGYsIHgpOgorICAgICAgICBmb3IgYSBpbiAoeCwgLXgpOgorICAgICAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKGEsIGErMSwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsICdpbmVxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgYSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5lcXVhbCBpbnQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBuIGluIFs5NTEsIDU3MjMwNSwgNDc4LCA5MTcsIDE3MjQwXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QobikKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGZsb2F0IHZhbHVlcyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgeCBpbiBbOS41MSwgNTcyMy4wNSwgNDcuOCwgOS4xNywgMTcuMjRdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdCh4KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdW5lcXVhbCBGcmFjdGlvbnMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDUpLCBGKDcsIDkpLCBGKDEyLCAxMSksIEYoMTAxLCA5OTAyMyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChmKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIERlY2ltYWxzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMy4xNDE1IDI5OC4xMiAzLjQ3IDE4Ljk5NiAwLjAwMjQ1Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoZCkKKworCitjbGFzcyBBcHByb3hFcXVhbEluZXhhY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEluZXhhY3QgdGVzdCBjYXNlcyBmb3IgYXBwcm94X2Vycm9yLgorICAgICMgVGVzdCBjYXNlcyB3aGVuIGNvbXBhcmluZyB0d28gdmFsdWVzIHRoYXQgYXJlIG5vdCBleGFjdGx5IGVxdWFsLgorCisgICAgIyA9PT0gQWJzb2x1dGUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHggKyBkZWx0YSwgeCAtIGRlbHRhKToKKyAgICAgICAgICAgIG1zZyA9IHRlbXBsYXRlLmZvcm1hdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MipkZWx0YSwgcmVsPTApLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9ZGVsdGEvMiwgcmVsPTApLCBtc2cpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGludHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWy0xMDczNywgLTE5NzUsIC03LCAtMiwgMCwgMSwgOSwgMzcsIDQyMywgOTg3NCwgMjM3ODkxMTBdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QobiwgMTApCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAyKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGZsb2F0cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTI4NC4xMjYsIC05Ny4xLCAtMy40LCAtMi4xNSwgMC41LCAxLjAsIDcuOCwgNC4yMywgMzgxNy40XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDEuNSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMSwgMjkpCisgICAgICAgIG51bWVyYXRvcnMgPSBbLTg0LCAtMTUsIC0yLCAtMSwgMCwgMSwgNSwgMTcsIDIzLCAzNCwgNzFdCisgICAgICAgIGZvciBmIGluIChGcmFjdGlvbihuLCAyOSkgZm9yIG4gaW4gbnVtZXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChmLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGZsb2F0KGRlbHRhKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIERlY2ltYWxzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRGVjaW1hbCgiMC4wMSIpCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMS4wIDMuNSAzNi4wOCA2MS43OSA3OTEyLjM2NDgiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZCwgZGVsdGEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCgtZCwgZGVsdGEpCisKKyAgICBkZWYgdGVzdF9jcm9zc196ZXJvKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBjYXNlIG9mIHRoZSB0d28gdmFsdWVzIGhhdmluZyBvcHBvc2l0ZSBzaWducy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgxZS01LCAtMWUtNSwgdG9sPTFlLTQsIHJlbD0wKSkKKworICAgICMgPT09IFJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgZGVmIGRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChzZWxmLCB4LCBkZWx0YSk6CisgICAgICAgIHRlbXBsYXRlID0gIlRlc3QgZmFpbHVyZSBmb3IgeD17IXJ9LCB5PXshcn0iCisgICAgICAgIGZvciB5IGluICh4KigxK2RlbHRhKSwgeCooMS1kZWx0YSkpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9MipkZWx0YSksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9ZGVsdGEvMiksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDY0LCA0NywgdG9sPTAsIHJlbD0wLjM3KSkKKyAgICAgICAgIyAtLS0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDksIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNDQ4LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCg0NDcsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWy0xNzguMzQsIC0wLjEsIDAuMSwgMS4wLCAzNi45NywgMjg0Ny4xMzYsIDkxNDUuMDc0XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDIpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMywgOCkKKyAgICAgICAgZm9yIGYgaW4gW0YoMywgODQpLCBGKDE3LCAzMCksIEYoNDksIDUwKSwgRig5MiwgODUpXToKKyAgICAgICAgICAgIGZvciBkIGluIChkZWx0YSwgZmxvYXQoZGVsdGEpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChmLCBkKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KC1mLCBkKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjAuMDIgMS4wIDUuNyAxMy42NyA5NC4xMzggOTEwMjcuOTMyMSIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChkLCBEZWNpbWFsKCIwLjAwMSIpKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWQsIERlY2ltYWwoIjAuMDUiKSkKKworICAgICMgPT09IEJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgIyBUaGVyZSBhcmUgZm91ciBjYXNlcyB0byBjb25zaWRlcjoKKyAgICAjICAgMSkgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDIpIGFjdHVhbCBlcnJvciA8PSBhYnNvbHV0ZSBlcnJvciBidXQgPiByZWxhdGl2ZSBlcnJvcgorICAgICMgICAzKSBhY3R1YWwgZXJyb3IgPD0gcmVsYXRpdmUgZXJyb3IgYnV0ID4gYWJzb2x1dGUgZXJyb3IKKyAgICAjICAgNCkgYWN0dWFsIGVycm9yID4gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKworICAgIGRlZiBkb19jaGVja19ib3RoKHNlbGYsIGEsIGIsIHRvbCwgcmVsLCB0b2xfZmxhZywgcmVsX2ZsYWcpOgorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiB0b2xfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD0wKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgcmVsX2ZsYWcgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9MCwgcmVsPXJlbCkpCisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmICh0b2xfZmxhZyBvciByZWxfZmxhZykgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9dG9sLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDQsIDMuOGUtNCwgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKC03LjM4NywgLTcuMzg2LCAwLjAwMiwgMC4wMDAyLCBUcnVlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy43ZS00LCBUcnVlLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDEsIDMuOGUtNCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDQoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDIuNzgsIDIuNzUsIDAuMDEsIDAuMDAxLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg5NzEuNDQsIDk3MS40NywgMC4wMiwgM2UtNSwgRmFsc2UsIEZhbHNlKQorCisKK2NsYXNzIEFwcHJveEVxdWFsU3BlY2lhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgYXBwcm94X2VxdWFsIHdpdGggTkFOcyBhbmQgSU5GcyBhbmQgemVyb2VzLgorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IHR5cGVfKCdpbmYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDEsIDAuMDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgtaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgLWluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChpbmYsIDEwMDApKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIG5hbiA9IHR5cGVfKCduYW4nKQorICAgICAgICAgICAgZm9yIG90aGVyIGluIChuYW4sIHR5cGVfKCdpbmYnKSwgMTAwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwobmFuLCBvdGhlcikpCisKKyAgICBkZWYgdGVzdF9mbG9hdF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gbWF0aC5jb3B5c2lnbigwLjAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKG56ZXJvLCAwLjAsIHRvbD0wLjEsIHJlbD0wLjEpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gRGVjaW1hbCgiLTAuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIERlY2ltYWwoMCksIHRvbD0wLjEsIHJlbD0wLjEpKQorCisKK2NsYXNzIFRlc3RBcHByb3hFcXVhbEVycm9ycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGVycm9yIGNvbmRpdGlvbnMgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfYmFkX3RvbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5lZ2F0aXZlIHRvbCByYWlzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFwcHJveF9lcXVhbCwgMTAwLCAxMDAsIC0xLCAwLjEpCisKKyAgICBkZWYgdGVzdF9iYWRfcmVsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgcmVsIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgMSwgLTAuMSkKKworCisjIC0tLSBUZXN0cyBmb3IgTnVtZXJpY1Rlc3RDYXNlIC0tLQorCisjIFRoZSBmb3JtYXR0aW5nIHJvdXRpbmUgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlzIGNvbXBsZXggZW5vdWdoCisjIHRoYXQgaXQgdG9vIG5lZWRzIHRlc3RpbmcuCisKK2NsYXNzIFRlc3ROdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIGV4YWN0IHdvcmRpbmcgb2YgTnVtZXJpY1Rlc3RDYXNlIGVycm9yIG1lc3NhZ2VzIGlzICpub3QqIGd1YXJhbnRlZWQsCisgICAgIyBidXQgd2UgbmVlZCB0byBnaXZlIHRoZW0gc29tZSBzb3J0IG9mIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUKKyAgICAjIGdlbmVyYXRlZCBjb3JyZWN0bHkuIEFzIGEgY29tcHJvbWlzZSwgd2UgbG9vayBmb3Igc3BlY2lmaWMgc3Vic3RyaW5ncworICAgICMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgZXZlbiBpZiB0aGUgb3ZlcmFsbCBlcnJvciBtZXNzYWdlIGNoYW5nZXMuCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCBhcmdzKToKKyAgICAgICAgYWN0dWFsX21zZyA9IE51bWVyaWNUZXN0Q2FzZS5fbWFrZV9zdGRfZXJyX21zZygqYXJncykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmdlbmVyYXRlX3N1YnN0cmluZ3MoKmFyZ3MpCisgICAgICAgIGZvciBzdWJzdHJpbmcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnN0cmluZywgYWN0dWFsX21zZykKKworICAgIGRlZiB0ZXN0X251bWVyaWN0ZXN0Y2FzZV9pc190ZXN0Y2FzZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBOdW1lcmljVGVzdENhc2UgYWN0dWFsbHkgaXMgYSBUZXN0Q2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTnVtZXJpY1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tc2dfbnVtZXJpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3IgbnVtZXJpYyBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgyLjUsIDQuMCwgMC41LCAwLjI1LCBOb25lKQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3Igc2VxdWVuY2UgY29tcGFyaXNvbnMuCisgICAgICAgIGFyZ3MgPSAoMy43NSwgOC4yNSwgMS4yNSwgMC41LCA3KQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9zdWJzdHJpbmdzKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpOgorICAgICAgICAiIiJSZXR1cm4gc3Vic3RyaW5ncyB3ZSBleHBlY3QgdG8gc2VlIGluIGVycm9yIG1lc3NhZ2VzLiIiIgorICAgICAgICBhYnNfZXJyLCByZWxfZXJyID0gX2NhbGNfZXJyb3JzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIHN1YnN0cmluZ3MgPSBbCisgICAgICAgICAgICAgICAgJ3RvbD0lcicgJSB0b2wsCisgICAgICAgICAgICAgICAgJ3JlbD0lcicgJSByZWwsCisgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGVycm9yID0gJXInICUgYWJzX2VyciwKKyAgICAgICAgICAgICAgICAncmVsYXRpdmUgZXJyb3IgPSAlcicgJSByZWxfZXJyLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3Vic3RyaW5ncy5hcHBlbmQoJ2RpZmZlciBhdCBpbmRleCAlZCcgJSBpZHgpCisgICAgICAgIHJldHVybiBzdWJzdHJpbmdzCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3RzIGZvciB0aGUgc3RhdGlzdGljcyBtb2R1bGUgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2NsYXNzIEdsb2JhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBzdGF0aXN0aWNzCisgICAgZXhwZWN0ZWRfbWV0YWRhdGEgPSBbIl9fZG9jX18iLCAiX19hbGxfXyJdCisKKyAgICBkZWYgdGVzdF9tZXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbWV0YWRhdGEuCisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuZXhwZWN0ZWRfbWV0YWRhdGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZSwgbWV0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBwcmVzZW50IiAlIG1ldGEpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbGwoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXZlcnl0aGluZyBpbiBfX2FsbF9fIGV4aXN0cyBhbmQgaXMgcHVibGljLgorICAgICAgICBtb2R1bGUgPSBzZWxmLm1vZHVsZQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGUuX19hbGxfXzoKKyAgICAgICAgICAgICMgTm8gcHJpdmF0ZSBuYW1lcyBpbiBfX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuYW1lLnN0YXJ0c3dpdGgoIl8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGUgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKyAgICAgICAgICAgICMgQW5kIGFueXRoaW5nIGluIF9fYWxsX18gbXVzdCBleGlzdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKworCitjbGFzcyBEb2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZG9jX3Rlc3RzKHNlbGYpOgorICAgICAgICBmYWlsZWQsIHRyaWVkID0gZG9jdGVzdC50ZXN0bW9kKHN0YXRpc3RpY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0cmllZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYWlsZWQsIDApCisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hhc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVycm1zZyA9ICgKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgU3RhdGlzdGljc0Vycm9yIHRvIGJlIGEgVmFsdWVFcnJvciwgYnV0IGdvdCBhIgorICAgICAgICAgICAgICAgICIgc3ViY2xhc3Mgb2YgJXIgaW5zdGVhZC4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzdGF0aXN0aWNzLCAnU3RhdGlzdGljc0Vycm9yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBlcnJtc2cgJSBzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvci5fX2Jhc2VfXworICAgICAgICAgICAgICAgICkKKworCisjID09PSBUZXN0cyBmb3IgcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9ucyA9PT0KKworY2xhc3MgRXhhY3RSYXRpb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBfZXhhY3RfcmF0aW8gdXRpbGl0eS4KKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gKC0yMCwgLTMsIDAsIDUsIDk5LCAxMCoqMjApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhpKSwgKGksIDEpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgIG51bWVyYXRvcnMgPSAoLTUsIDEsIDEyLCAzOCkKKyAgICAgICAgZm9yIG4gaW4gbnVtZXJhdG9yczoKKyAgICAgICAgICAgIGYgPSBGcmFjdGlvbihuLCAzNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oZiksIChuLCAzNykpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygwLjEyNSksICgxLCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygxLjEyNSksICg5LCA4KSkKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIG51bS9kZW4pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBfZXhhY3RfcmF0aW8gPSBzdGF0aXN0aWNzLl9leGFjdF9yYXRpbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCIwLjEyNSIpKSwgKDEyNSwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjEyLjM0NSIpKSwgKDEyMzQ1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiLTEuOTgiKSksICgtMTk4LCAxMDApKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdFNwZWNpYWxzUmFpc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYW5kIElORnMgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBOb24tc3BlY2lhbCB2YWx1ZXMgYXJlIGNvdmVyZWQgYnkgX2V4YWN0X3JhdGlvIGFib3ZlLgorICAgICAgICBmb3IgZCBpbiAoRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnSU5GJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbywgZCkKKworCisKKyMgPT09IFRlc3RzIGZvciBwdWJsaWMgZnVuY3Rpb25zID09PQorCitjbGFzcyBVbml2YXJpYXRlQ29tbW9uTWl4aW46CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1vc3QgdW5pdmFyaWF0ZSBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGF0YSBhcmd1bWVudC4KKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgICMgRmFpbCBpZiBnaXZlbiBubyBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBGYWlsIHdoZW4gdGhlIGRhdGEgYXJndW1lbnQgKGZpcnN0IGFyZ3VtZW50KSBpcyBlbXB0eS4KKyAgICAgICAgZm9yIGVtcHR5IGluIChbXSwgKCksIGl0ZXIoW10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGVtcHR5KQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGludCBkYXRhIGZvciB2YXJpb3VzIHRlc3RzLiIiIgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIHdoaWxlIGRhdGEgPT0gc29ydGVkKGRhdGEpOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X25vX2lucGxhY2VfbW9kaWZpY2F0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSBpdHMgaW5wdXQgZGF0YS4KKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSAhPSAxICAjIE5lY2Vzc2FyeSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLgorICAgICAgICBhc3NlcnQgZGF0YSAhPSBzb3J0ZWQoZGF0YSkKKyAgICAgICAgc2F2ZWQgPSBkYXRhWzpdCisgICAgICAgIGFzc2VydCBkYXRhIGlzIG5vdCBzYXZlZAorICAgICAgICBfID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGRhdGEsIHNhdmVkLCAiZGF0YSBoYXMgYmVlbiBtb2RpZmllZCIpCisKKyAgICBkZWYgdGVzdF9vcmRlcl9kb2VzbnRfbWF0dGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZGF0YSBwb2ludHMgZG9lc24ndCBjaGFuZ2UgdGhlIHJlc3VsdC4KKworICAgICAgICAjIENBVVRJT046IGR1ZSB0byBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMsIHRoZSByZXN1bHQgYWN0dWFsbHkKKyAgICAgICAgIyBtYXkgZGVwZW5kIG9uIHRoZSBvcmRlci4gQ29uc2lkZXIgdGhpcyB0ZXN0IHJlcHJlc2VudGluZyBhbiBpZGVhbC4KKyAgICAgICAgIyBUbyBhdm9pZCB0aGlzIHRlc3QgZmFpbGluZywgb25seSB0ZXN0IHdpdGggZXhhY3QgdmFsdWVzIHN1Y2ggYXMgaW50cworICAgICAgICAjIG9yIEZyYWN0aW9ucy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCAzLCAzLCA0LCA1LCA2XSoxMDAKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgdHlwZSBvZiBpdGVyYWJsZSBkYXRhIGRvZXNuJ3QgZWZmZWN0IHRoZSByZXN1bHQuCisgICAgICAgIGNsYXNzIE15TGlzdChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnZW5lcmF0b3IoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gKG9iaiBmb3Igb2JqIGluIGRhdGEpCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIGZvciBraW5kIGluIChsaXN0LCB0dXBsZSwgaXRlciwgTXlMaXN0LCBNeVR1cGxlLCBnZW5lcmF0b3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGtpbmQoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMgd29yayB3aXRoIHJhbmdlIG9iamVjdHMuCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGxpc3QoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdfdHlwZXMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9uIHJhaXNlcyB3aGVuIGdpdmVuIGRhdGEgb2YgdGhlIHdyb25nIHR5cGUuCisKKyAgICAgICAgIyBEb24ndCByb2xsIHRoZSBmb2xsb3dpbmcgaW50byBhIGxvb3AgbGlrZSB0aGlzOgorICAgICAgICAjICAgZm9yIGJhZCBpbiBsaXN0X29mX2JhZDoKKyAgICAgICAgIyAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKGJhZCkKKyAgICAgICAgIworICAgICAgICAjIFNpbmNlIGFzc2VydFJhaXNlcyBkb2Vzbid0IHNob3cgdGhlIGFyZ3VtZW50cyB0aGF0IGNhdXNlZCB0aGUgdGVzdAorICAgICAgICAjIGZhaWx1cmUsIGl0IGlzIHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnIHRoZXNlIHRlc3QgZmFpbHVyZXMgd2hlbiB0aGUKKyAgICAgICAgIyBmb2xsb3dpbmcgYXJlIGluIGEgbG9vcC4KKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihOb25lKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDIzKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDQyLjApCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3Iob2JqZWN0KCkpCisKKyAgICBkZWYgY2hlY2tfZm9yX3R5cGVfZXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF90eXBlX29mX2RhdGFfZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBvZiBkYXRhIGVsZW1lbnRzIGRvZXNuJ3QgYWZmZWN0IHRoZSBudW1lcmljIHJlc3VsdC4KKyAgICAgICAgIyBUaGlzIGlzIGEgd2Vha2VyIHRlc3QgdGhhbiBVbml2YXJpYXRlVHlwZU1peGluLnRlc3RUeXBlc0NvbnNlcnZlZCwKKyAgICAgICAgIyBiZWNhdXNlIGl0IGNoZWNrcyB0aGUgbnVtZXJpYyByZXN1bHQgYnkgZXF1YWxpdHksIGJ1dCBub3QgYnkgdHlwZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19hZGRfXyhvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgICAgICByYXcgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBNeUZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICBkYXRhID0gW2tpbmQoeCkgZm9yIHggaW4gcmF3XQorICAgICAgICAgICAgcmVzdWx0ID0gdHlwZShleHBlY3RlZCkoc2VsZi5mdW5jKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisKK2NsYXNzIFVuaXZhcmlhdGVUeXBlTWl4aW46CisgICAgIiIiTWl4aW4gY2xhc3MgZm9yIHR5cGUtY29uc2VydmluZyBmdW5jdGlvbnMuCisKKyAgICBUaGlzIG1peGluIGNsYXNzIGhvbGRzIHRlc3QocykgZm9yIGZ1bmN0aW9ucyB3aGljaCBjb25zZXJ2ZSB0aGUgdHlwZSBvZgorICAgIGluZGl2aWR1YWwgZGF0YSBwb2ludHMuIEUuZy4gdGhlIG1lYW4gb2YgYSBsaXN0IG9mIEZyYWN0aW9ucyBzaG91bGQgaXRzZWxmCisgICAgYmUgYSBGcmFjdGlvbi4KKworICAgIE5vdCBhbGwgdGVzdHMgdG8gZG8gd2l0aCB0eXBlcyBuZWVkIGdvIGluIHRoaXMgY2xhc3MuIE9ubHkgdGhvc2UgdGhhdAorICAgIHJlbHkgb24gdGhlIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgc2FtZSB0eXBlIGFzIGl0cyBpbnB1dCBkYXRhLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3R5cGVzX2NvbnNlcnZlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb25zIGtlZXBzIHRoZSBzYW1lIHR5cGUgYXMgdGhlaXIgZGF0YSBwb2ludHMuCisgICAgICAgICMgKEV4Y2x1ZGVzIG1peGVkIGRhdGEgdHlwZXMuKSBUaGlzIG9ubHkgdGVzdHMgdGhlIHR5cGUgb2YgdGhlIHJldHVybgorICAgICAgICAjIHJlc3VsdCwgbm90IHRoZSB2YWx1ZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19zdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19yc3ViX18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19wb3dfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCwgRnJhY3Rpb24sIE15RmxvYXQpOgorICAgICAgICAgICAgZCA9IFtraW5kKHgpIGZvciB4IGluIGRhdGFdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCBraW5kKQorCisKK2NsYXNzIFRlc3RTdW0oTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlQ29tbW9uTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3Igc3RhdGlzdGljcy5fc3VtKCkgZnVuY3Rpb24uCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MuX3N1bQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSB0ZXN0IGZvciBlbXB0eSBkYXRhLgorICAgICAgICBmb3IgZGF0YSBpbiAoW10sICgpLCBpdGVyKFtdKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIzKSwgMjMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyLjMpLCAyLjMpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMSwgNSwgMywgLTQsIC04LCAyMCwgNDIsIDFdKSwgNjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFs0LCAyLCAzLCAtOCwgN10sIDEwMDApLCAxMDA4KQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMC4yNV0qMjApLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjEyNSwgMC4yNSwgMC41LCAwLjc1XSwgMS41KSwgMy4xMjUpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbRnJhY3Rpb24oMSwgMTAwMCldKjUwMCksIEZyYWN0aW9uKDEsIDIpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMC4wMDEiKSwgRCgiNS4yNDYiKSwgRCgiMS43MDIiKSwgRCgiLTAuMDI1IiksCisgICAgICAgICAgICAgICAgRCgiMy45NzQiKSwgRCgiMi4zMjgiKSwgRCgiNC42MTciKSwgRCgiMi44NDMiKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEZWNpbWFsKCIyMC42ODYiKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfd2l0aF9tYXRoX2ZzdW0oc2VsZik6CisgICAgICAgICMgQ29tcGFyZSB3aXRoIHRoZSBtYXRoLmZzdW0gZnVuY3Rpb24uCisgICAgICAgICMgSWRlYWxseSB3ZSBvdWdodCB0byBnZXQgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LCBidXQgc29tZXRpbWVzCisgICAgICAgICMgd2UgZGlmZmVyIGJ5IGEgdmVyeSBzbGlnaHQgYW1vdW50IDotKAorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgbWF0aC5mc3VtKGRhdGEpLCByZWw9MmUtMTYpCisKKyAgICBkZWYgdGVzdF9zdGFydF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIG9wdGlvbmFsIHN0YXJ0IGFyZ3VtZW50IHdvcmtzIGNvcnJlY3RseS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgxLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDApXQorICAgICAgICB0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCs0Miwgc2VsZi5mdW5jKGRhdGEsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LTIzLCBzZWxmLmZ1bmMoZGF0YSwgLTIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzFlMjAsIHNlbGYuZnVuYyhkYXRhLCAxZTIwKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3NfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2Ygc3RyaW5ncyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgJzk5OSddKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2YgYnl0ZXMgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sIGInOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCBiJzk5OSddKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfc3VtKHNlbGYpOgorICAgICAgICAjIE1peGVkIHN1bXMgYXJlIGFsbG93ZWQuCisKKyAgICAgICAgIyBDYXJlZnVsIGhlcmU6IG9yZGVyIG1hdHRlcnMuIENhbid0IG1peCBGcmFjdGlvbiBhbmQgRGVjaW1hbCBkaXJlY3RseSwKKyAgICAgICAgIyBvbmx5IGFmdGVyIHRoZXkncmUgY29udmVydGVkIHRvIGZsb2F0LgorICAgICAgICBkYXRhID0gWzEsIDIsIEZyYWN0aW9uKDEsIDIpLCAzLjAsIERlY2ltYWwoIjAuMjUiKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNzUpCisKKworY2xhc3MgU3VtSW50ZXJuYWxzVGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCBpbnRlcm5hbHMgb2YgdGhlIHN1bSBmdW5jdGlvbi4KKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbnN0YW5jZV9mbG9hdF9tZXRob2Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZmxvYXRfXyBtZXRob2RzIG9uIGRhdGEgaW5zdGFuY2VzIGFyZSBpZ25vcmVkLgorCisgICAgICAgICMgUHl0aG9uIHR5cGljYWxseSBjYWxscyBfX2R1bmRlcl9fIG1ldGhvZHMgb24gdGhlIGNsYXNzLCBub3QgdGhlCisgICAgICAgICMgaW5zdGFuY2UuIFRoZSBgYHN1bWBgIGltcGxlbWVudGF0aW9uIGNhbGxzIF9fZmxvYXRfXyBkaXJlY3RseS4gVG8KKyAgICAgICAgIyBiZXR0ZXIgbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiBQeXRob24sIHdlIGNhbGwgaXQgb25seSBvbiB0aGUgY2xhc3MsCisgICAgICAgICMgbm90IHRoZSBpbnN0YW5jZS4gVGhpcyB0ZXN0IHdpbGwgZmFpbCBpZiBzb21lYm9keSAiZml4ZXMiIHRoYXQgY29kZS4KKworICAgICAgICAjIENyZWF0ZSBhIGZha2UgX19mbG9hdF9fIG1ldGhvZC4KKyAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd0ZXN0IGZhaWxzJykKKworICAgICAgICAjIEluamVjdCBpdCBpbnRvIGFuIGluc3RhbmNlLgorICAgICAgICBjbGFzcyBNeU51bWJlcihGcmFjdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBNeU51bWJlcigzKQorICAgICAgICB4Ll9fZmxvYXRfXyA9IHR5cGVzLk1ldGhvZFR5cGUoX19mbG9hdF9fLCB4KQorCisgICAgICAgICMgQ2hlY2sgaXQgd29ya3MgYXMgZXhwZWN0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB4Ll9fZmxvYXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4KSwgMy4wKQorICAgICAgICAjIEFuZCBub3cgdGVzdCB0aGUgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fc3VtKFsxLjAsIDIuMCwgeCwgNC4wXSksIDEwLjApCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzFlMTAwLCAxLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuX3N1bShbMWUtMTAwLCAxLCAxZS0xMDAsIC0xXSoxMDAwMCksIDIuMGUtOTYsIHJlbD01ZS0xNgorICAgICAgICAgICAgKQorCisKK2NsYXNzIFN1bVNwZWNpYWxWYWx1ZXMoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhhdCBzdW0gd29ya3MgY29ycmVjdGx5IHdpdGggSUVFRS03NTQgc3BlY2lhbCB2YWx1ZXMuCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIG5hbiwgMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmVzdWx0KSwgdHlwZV8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIGNoZWNrX2luZmluaXR5KHNlbGYsIHgsIGluZik6CisgICAgICAgICIiIkNoZWNrIHggaXMgYW4gaW5maW5pdHkgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2lnbiBhcyBpbmYuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoeCksIHR5cGUoaW5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gMCwgaW5mID4gMCkKKyAgICAgICAgYXNzZXJ0IHggPT0gaW5mCisKKyAgICBkZWYgZG9fdGVzdF9pbmYoc2VsZiwgaW5mKToKKyAgICAgICAgIyBBZGRpbmcgYSBzaW5nbGUgaW5maW5pdHkgZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzXSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKyAgICAgICAgIyBBZGRpbmcgdHdvIGluZmluaXRpZXMgb2YgdGhlIHNhbWUgc2lnbiBhbHNvIGdpdmVzIGluZmluaXR5LgorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgaW5mLCA0XSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2luZihzZWxmKToKKyAgICAgICAgaW5mID0gZmxvYXQoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBmb3Igc2lnbiBpbiAoKzEsIC0xKToKKyAgICAgICAgICAgIHNlbGYuZG9fdGVzdF9pbmYoc2lnbippbmYpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFkZGluZyB0d28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduIGdpdmVzIGEgTkFOLgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByYWlzZXMgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5CYXNpY0NvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3NuYW5fcmFpc2VzKHNlbGYpOgorICAgICAgICAjIEFkZGluZyBzTkFOIHNob3VsZCByYWlzZSBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBzTkFOID0gRGVjaW1hbCgnc05BTicpCisgICAgICAgIGRhdGEgPSBbMSwgc05BTiwgMl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKworIyA9PT0gVGVzdHMgZm9yIGF2ZXJhZ2VzID09PQorCitjbGFzcyBBdmVyYWdlTWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciBhdmVyYWdlcy4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBBdmVyYWdlIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgyMywgNDIuNSwgMS4zZTE1LCBGcmFjdGlvbigxNSwgMTkpLCBEZWNpbWFsKCcwLjI4JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgeCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgYXZlcmFnZSBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMy41LCAxNywgMi41ZTE1LCBGcmFjdGlvbig2MSwgNjcpLCBEZWNpbWFsKCc0Ljk3MTInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCB4KQorCisKK2NsYXNzIFRlc3RNZWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVhbgorCisgICAgZGVmIHRlc3RfdG9ydHVyZV9wZXAoc2VsZik6CisgICAgICAgICMgIlRvcnR1cmUgVGVzdCIgZnJvbSBQRVAtNDUwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMWUxMDAsIDEsIDMsIC0xZTEwMF0pLCAxKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBkYXRhID0gWzAsIDEsIDIsIDMsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDcsIDcsIDgsIDldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjgxMjUpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggZmxvYXRzLgorICAgICAgICBkYXRhID0gWzE3LjI1LCAxOS43NSwgMjAuMCwgMjEuNSwgMjEuNzUsIDIzLjI1LCAyNS4xMjUsIDI3LjVdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAyMi4wMTU2MjUpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEuNjM0IiksIEQoIjIuNTE3IiksIEQoIjMuOTEyIiksIEQoIjQuMDcyIiksIEQoIjUuODEzIildCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCIzLjU4OTYiKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgMiksIEYoMiwgMyksIEYoMywgNCksIEYoNCwgNSksIEYoNSwgNiksIEYoNiwgNyksIEYoNywgOCldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDE0NzksIDE5NjApKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAoMSwgLTEpOgorICAgICAgICAgICAgICAgIGluZiA9IGtpbmQoImluZiIpKnNpZ24KKyAgICAgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpbmYpCisKKyAgICBkZWYgdGVzdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduLgorICAgICAgICBkYXRhID0gWzIsIDQsIDYsIGZsb2F0KCdpbmYnKSwgMSwgMywgNSwgZmxvYXQoJy1pbmYnKV0KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggTkFOcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IGtpbmQoIm5hbiIpCisgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2JpZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIGEgbGFyZ2UgY29uc3RhbnQgdG8gZXZlcnkgZGF0YSBwb2ludC4KKyAgICAgICAgYyA9IDFlOQorICAgICAgICBkYXRhID0gWzMuNCwgNC41LCA0LjksIDYuNywgNi44LCA3LjIsIDguMCwgOC4xLCA5LjRdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpICsgYworICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgIT0gYworICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoW3grYyBmb3IgeCBpbiBkYXRhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZG91YmxlZF9kYXRhKHNlbGYpOgorICAgICAgICAjIE1lYW4gb2YgW2EsYixjLi4uel0gc2hvdWxkIGJlIHNhbWUgYXMgZm9yIFthLGEsYixiLGMsYy4uLnosel0uCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDUpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSoyKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdE1lZGlhbihOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbik6CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1lZGlhbiBhbmQgYWxsIG1lZGlhbi4qIGZ1bmN0aW9ucy4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJPdmVybG9hZCBtZXRob2QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uIiIiCisgICAgICAgIGRhdGEgPSBzdXBlcigpLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGlmIGxlbihkYXRhKSUyICE9IDE6CisgICAgICAgICAgICBkYXRhLmFwcGVuZCgyKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjUpCisKKyAgICBkZWYgdGVzdF9vZGRfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIG9kZCBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDYsIDldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigxLCAyKSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMi41JyksIEQoJzMuMScpLCBEKCc0LjInKSwgRCgnNS43JyksIEQoJzUuOCcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC4yJykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4yJyksIEQoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuNjUnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuRGF0YVR5cGUoTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY29uc2VydmF0aW9uIG9mIGRhdGEgZWxlbWVudCB0eXBlIGZvciBtZWRpYW4uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTUpKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICB3aGlsZSBkYXRhID09IHNvcnRlZChkYXRhKToKKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgVGVzdE1lZGlhbkxvdyhUZXN0TWVkaWFuLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2xvdworCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDMsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnMy4zJykpCisKKworY2xhc3MgVGVzdE1lZGlhbkhpZ2goVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9oaWdoCisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRig0LCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMScpLCBEKCcyLjInKSwgRCgnMy4zJyksIEQoJzQuNCcpLCBEKCc1LjUnKSwgRCgnNi42JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCc0LjQnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuR3JvdXBlZChUZXN0TWVkaWFuKToKKyAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQuCisgICAgIyBEb2Vzbid0IGNvbnNlcnZlIGRhdGEgZWxlbWVudCB0eXBlcywgc28gZG9uJ3QgdXNlIFRlc3RNZWRpYW5UeXBlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5fZ3JvdXBlZAorCisgICAgZGVmIHRlc3Rfb2RkX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFsxMiwgMTMsIDE0LCAxNCwgMTQsIDE1LCAxNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDE0KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxMy44NzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjM3NSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzE2LCAxOCwgMTgsIDE4LCAxOCwgMjAsIDIwLCAyMCwgMjIsIDIyLCAyMiwgMjQsIDI0LCAyNiwgMjhdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIpLCAyMC42NjY2NjY2NywgdG9sPTFlLTgpCisKKyAgICBkZWYgdGVzdF9ldmVuX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyNSwgMjUsIDMwXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCA1KSwgMTkuMTY2NjY2NjcsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgNCwgNCwgNCwgNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNiwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0Ljc1KQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIEF2ZXJhZ2VNaXhpbi4KKyAgICAgICAgIyBZZXQgYWdhaW4sIGZhaWx1cmUgb2YgbWVkaWFuX2dyb3VwZWQgdG8gY29uc2VydmUgdGhlIGRhdGEgdHlwZQorICAgICAgICAjIGNhdXNlcyBtZSBoZWFkYWNoZXMgOi0oCisgICAgICAgIGZvciB4IGluICg1LjMsIDY4LCA0LjNlMTcsIEZyYWN0aW9uKDI5LCAxMDEpLCBEZWNpbWFsKCczMi45NzE0JykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCA1LCAxMCwgMjApOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZmxvYXQoeCkpCisKKyAgICBkZWYgdGVzdF9vZGRfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRig1LCA0KSwgRig5LCA0KSwgRigxMywgNCksIEYoMTMsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCksIEYoMTcsIDQpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy4yNSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2Ljc1KQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzUuNScpLCBEKCc2LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA3LjApCisKKyAgICBkZWYgdGVzdF9pbnRlcnZhbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdpdGggaW50ZXJ2YWwgYXJndW1lbnQuCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjg3NSkKKyAgICAgICAgZGF0YSA9IFsyLjI1LCAyLjUsIDIuNSwgMi43NSwgMi43NSwgMi43NSwgMy4wLCAzLjAsIDMuMjUsIDMuNSwgMy43NV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMC4yNSksIDIuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICBkYXRhID0gWzIyMCwgMjIwLCAyNDAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjgwLCAyODAsIDMwMCwgMzIwLCAzNDBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIwKSwgMjY1LjApCisKKworY2xhc3MgVGVzdE1vZGUoTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3IgdGhlIGRpc2NyZXRlIHZlcnNpb24gb2YgbW9kZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubW9kZQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICAjIE1ha2Ugc3VyZSB0ZXN0IGRhdGEgaGFzIGV4YWN0bHkgb25lIG1vZGUuCisgICAgICAgIHJldHVybiBbMSwgMSwgMSwgMSwgMywgNCwgNywgOSwgMCwgOCwgMl0KKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbWluYWxfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBub21pbmFsIGRhdGEuCisgICAgICAgIGRhdGEgPSAnYWJjYmRiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2InKQorICAgICAgICBkYXRhID0gJ2ZlIGZpIGZvIGZ1bSBmaSBmaScuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2ZpJykKKworICAgIGRlZiB0ZXN0X2Rpc2NyZXRlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggZGlzY3JldGUgbnVtZXJpYyBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGQgPSBkYXRhICsgW2ldCisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZCksIGkpCisKKyAgICBkZWYgdGVzdF9iaW1vZGFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggYmltb2RhbCBkYXRhLgorICAgICAgICBkYXRhID0gWzEsIDEsIDIsIDIsIDIsIDIsIDMsIDQsIDUsIDYsIDYsIDYsIDYsIDcsIDgsIDksIDldCisgICAgICAgIGFzc2VydCBkYXRhLmNvdW50KDIpID09IGRhdGEuY291bnQoNikgPT0gNAorICAgICAgICAjIENoZWNrIGZvciBhbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGF0YV9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSBleGNlcHRpb24gd2hlbiBkYXRhIHBvaW50cyBhcmUgYWxsIHVuaXF1ZS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfbm9uZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtb2RlIHJhaXNlcyBUeXBlRXJyb3IgaWYgZ2l2ZW4gTm9uZSBhcyBkYXRhLgorCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtb2RlIHVzZXMKKyAgICAgICAgIyBjb2xsZWN0aW9ucy5Db3VudGVyLCB3aGljaCBhY2NlcHRzIE5vbmUgYW5kIHJldHVybnMgYW4gZW1wdHkgZGljdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIE5vbmUpCisKKworIyA9PT0gVGVzdHMgZm9yIHZhcmlhbmNlcyBhbmQgc3RhbmRhcmQgZGV2aWF0aW9ucyA9PT0KKworY2xhc3MgVmFyaWFuY2VTdGRldk1peGluKFVuaXZhcmlhdGVDb21tb25NaXhpbik6CisgICAgIyBNaXhpbiBjbGFzcyBob2xkaW5nIGNvbW1vbiB0ZXN0cyBmb3IgdmFyaWFuY2UgYW5kIHN0ZCBkZXYuCisKKyAgICAjIFN1YmNsYXNzZXMgc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGJlZm9yZSBOdW1lcmljVGVzdENsYXNzLCBpbiBvcmRlcgorICAgICMgdG8gc2VlIHRoZSByZWwgYXR0cmlidXRlIGJlbG93LiBTZWUgdGVzdFNoaWZ0RGF0YSBmb3IgYW4gZXhwbGFuYXRpb24uCisKKyAgICByZWwgPSAxZS0xMgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIERldmlhdGlvbiBvZiBhIHNpbmdsZSB2YWx1ZSBpcyB6ZXJvLgorICAgICAgICBmb3IgeCBpbiAoMTEsIDE5LjgsIDQuNmUxNCwgRnJhY3Rpb24oMjEsIDM0KSwgRGVjaW1hbCgnOC4zOTInKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbeF0pLCAwKQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBkZXZpYXRpb24gb2YgYSBzaW5nbGUgcmVwZWF0ZWQgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDcuMiwgNDksIDguMWUxNSwgRnJhY3Rpb24oMywgNyksIERlY2ltYWwoJzYyLjQ4MDInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDMsIDUsIDE1KToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDApCisKKyAgICBkZWYgdGVzdF9kb21haW5fZXJyb3JfcmVncmVzc2lvbihzZWxmKToKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgZG9tYWluIGVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgIyAoVGhhbmtzIHRvIEdlcmVteSBDb25kcmEuKQorICAgICAgICBkYXRhID0gWzAuMTIzNDU2Nzg5MDEyMzQ1XSoxMDAwMAorICAgICAgICAjIEFsbCB0aGUgaXRlbXMgYXJlIGlkZW50aWNhbCwgc28gdmFyaWFuY2Ugc2hvdWxkIGJlIGV4YWN0bHkgemVyby4KKyAgICAgICAgIyBXZSBhbGxvdyBzb21lIHNtYWxsIHJvdW5kLW9mZiBlcnJvciwgYnV0IG5vdCBtdWNoLgorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChyZXN1bHQsIDAuMCwgdG9sPTVlLTE3KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChyZXN1bHQsIDApICAjIEEgbmVnYXRpdmUgcmVzdWx0IG11c3QgZmFpbC4KKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHNoaWZ0aW5nIHRoZSBkYXRhIGJ5IGEgY29uc3RhbnQgYW1vdW50IGRvZXMgbm90IGFmZmVjdAorICAgICAgICAjIHRoZSB2YXJpYW5jZSBvciBzdGRldi4gT3IgYXQgbGVhc3Qgbm90IG11Y2guCisKKyAgICAgICAgIyBEdWUgdG8gcm91bmRpbmcsIHRoaXMgdGVzdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBpZGVhbC4gV2UgYWxsb3cKKyAgICAgICAgIyBzb21lIHRvbGVyYW5jZSBhd2F5IGZyb20gIm5vIGNoYW5nZSBhdCBhbGwiIGJ5IHNldHRpbmcgdG9sIGFuZC9vciByZWwKKyAgICAgICAgIyBhdHRyaWJ1dGVzLiBTdWJjbGFzc2VzIG1heSBzZXQgdGlnaHRlciBvciBsb29zZXIgZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAgICAgcmF3ID0gWzEuMDMsIDEuMjcsIDEuOTQsIDIuMDQsIDIuNTgsIDMuMTQsIDQuNzUsIDQuOTgsIDUuNDIsIDYuNzhdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgIyBEb24ndCBzZXQgc2hpZnQgdG9vIGhpZ2gsIHRoZSBiaWdnZXIgaXQgaXMsIHRoZSBtb3JlIHJvdW5kaW5nIGVycm9yLgorICAgICAgICBzaGlmdCA9IDFlNQorICAgICAgICBkYXRhID0gW3ggKyBzaGlmdCBmb3IgeCBpbiByYXddCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGFfZXhhY3Qoc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X3NoaWZ0X2RhdGEsIGJ1dCByZXN1bHQgaXMgYWx3YXlzIGV4YWN0LgorICAgICAgICByYXcgPSBbMSwgMywgMywgNCwgNSwgNywgOSwgMTAsIDExLCAxNl0KKyAgICAgICAgYXNzZXJ0IGFsbCh4PT1pbnQoeCkgZm9yIHggaW4gcmF3KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgIHNoaWZ0ID0gMTAqKjkKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyX2xpc3Rfc2FtZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaXRlciBkYXRhIGFuZCBsaXN0IGRhdGEgZ2l2ZSB0aGUgc2FtZSByZXN1bHQuCisKKyAgICAgICAgIyBUaGlzIGlzIGFuIGV4cGxpY2l0IHRlc3QgdGhhdCBpdGVyYXRvcnMgYW5kIGxpc3RzIGFyZSB0cmVhdGVkIHRoZQorICAgICAgICAjIHNhbWU7IGp1c3RpZmljYXRpb24gZm9yIHRoaXMgdGVzdCBvdmVyIGFuZCBhYm92ZSB0aGUgc2ltaWxhciB0ZXN0CisgICAgICAgICMgaW4gVW5pdmFyaWF0ZUNvbW1vbk1peGluIGlzIHRoYXQgYW4gZWFybGllciBkZXNpZ24gaGFkIHZhcmlhbmNlIGFuZAorICAgICAgICAjIGZyaWVuZHMgc3dhcCBiZXR3ZWVuIG9uZS0gYW5kIHR3by1wYXNzIGFsZ29yaXRobXMsIHdoaWNoIHdvdWxkCisgICAgICAgICMgc29tZXRpbWVzIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDgpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhpdGVyKGRhdGEpKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFBWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3IgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9leGFjdF91bmlmb3JtKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHZhcmlhbmNlIGFnYWluc3QgYW4gZXhhY3QgcmVzdWx0IGZvciB1bmlmb3JtIGRhdGEuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwMDAwKSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTAwMDAqKjIgLSAxKS8xMiAgIyBFeGFjdCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMjIuNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDMsIDgpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRGVjaW1hbCBkYXRhLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEyLjEiKSwgRCgiMTIuMiIpLCBEKCIxMi41IiksIEQoIjEyLjkiKV0KKyAgICAgICAgZXhhY3QgPSBEKCcwLjA5Njg3NScpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIERlY2ltYWwpCisKKworY2xhc3MgVGVzdFZhcmlhbmNlKFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gVmFyaWFuY2VTdGRldk1peGluLgorICAgICAgICBmb3IgeCBpbiAoMzUsIDI0LjcsIDguMmUxNSwgRnJhY3Rpb24oMTksIDMwKSwgRGVjaW1hbCgnNC4yMDg0JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIGludCBkYXRhLgorICAgICAgICBkYXRhID0gWzQsIDcsIDEzLCAxNl0KKyAgICAgICAgZXhhY3QgPSAzMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBGcmFjdGlvbiBkYXRhLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDQpLCBGKDEsIDQpLCBGKDMsIDQpLCBGKDcsIDQpXQorICAgICAgICBleGFjdCA9IEYoMSwgMikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRnJhY3Rpb24pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKDIpLCBEKDIpLCBEKDcpLCBEKDkpXQorICAgICAgICBleGFjdCA9IDQqRCgnOS41JykvRCgzKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RQU3RkZXYoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5wc3RkZXYKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fdmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN0ZGV2IGlzLCBpbiBmYWN0LCB0aGUgc3F1YXJlIHJvb3Qgb2YgdmFyaWFuY2UuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTE3LCAyNCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MucHZhcmlhbmNlKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5zdGRldgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDgxLCAyMDMuNzQsIDMuOWUxNCwgRnJhY3Rpb24oNSwgMjEpLCBEZWNpbWFsKCczNS43MTknKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBbeF0pCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0yLCA5KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBtYXRoLnNxcnQoc3RhdGlzdGljcy52YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKKyMgPT09IFJ1biB0ZXN0cyA9PT0KKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgaWdub3JlKToKKyAgICAiIiJVc2VkIGZvciBkb2N0ZXN0L3VuaXR0ZXN0IGludGVncmF0aW9uLiIiIgorICAgIHRlc3RzLmFkZFRlc3RzKGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCkpCisgICAgcmV0dXJuIHRlc3RzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CmluZGV4IDc4YzljNWIuLjc3MmNkMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQpAQCAtMTgyLDI2ICsxODIsMjMgQEAKICAgICBhIGRhdGUgYmVmb3JlIDE5MDAgaXMgcGFzc2VkIHdpdGggYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgIiV5IgogICAgICIiIgogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJPbmx5IGFwcGxpZXMgdG8gV2luZG93cyIpCi0gICAgZGVmIHRlc3RfeV9iZWZvcmVfMTkwMF93aW4oc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJEb2Vzbid0IGFwcGx5IG9uIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDBfbm9ud2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjk5IikKKyAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzY3NCwgIzE5NjM0CisgICAgICAgIHQgPSAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgiYWl4IiwgInN1bm9zIiwgInNvbGFyaXMiKSkpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsIHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoIiV5IiwgdCksICI5OSIpCiAKICAgICBkZWYgdGVzdF95XzE5MDAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpLCAiMDAiKQogCiAgICAgZGVmIHRlc3RfeV9hZnRlcl8xOTAwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDIwMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjEzIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmZ0aW1lVGVzdCwgWTE5MDBUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQppbmRleCBjNTk3OWZjLi40MWI2ZTVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgogCi0gICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTQsIGRyeV9ydW49RmFsc2UpCisgICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTMsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3Rfb3ZlcnNpemVkX2RpZ2l0X3N0cmluZ3Moc2VsZiwgbWF4c2l6ZSk6CiAgICAgICAgICMgSW5wdXQgc3RyaW5nIHdob3NlIGxlbmd0aCBkb2Vzbid0IGZpdCBpbiBhbiBJTlQuCiAgICAgICAgIHMgPSAiMS4iICsgIjEiICogbWF4c2l6ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCA1MGNhZTA1Li4wMTA3ZWViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMSw0ICsxLDYgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGFiYwogaW1wb3J0IGFycmF5CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwpAQCAtNiw3ICs4LDYgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKLUlTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCiAKIGludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScsICduJywgJ04nCiBieXRlb3JkZXJzID0gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnCkBAIC00ODksNyArNDkwLDcgQEAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgogICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAogICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZisxLCAweGZmZmZmZmZmLzIKQEAgLTUyMCwxMCArNTIxLDEwIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhwcmVmaXggKyAnPycsIEV4cGxvZGluZ0Jvb2woKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIElPRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwbG9kaW5nQm9vbCgpKSIgJSAocHJlZml4ICsgJz8nKSkKIAogICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CkBAIC01MzYsMTAgKzUzNyw2IEBACiAgICAgICAgIGh1Z2Vjb3VudDIgPSAne31ie31IJy5mb3JtYXQoc3lzLm1heHNpemUvLzIsIHN5cy5tYXhzaXplLy8yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5jYWxjc2l6ZSwgaHVnZWNvdW50MikKIAotICAgIGlmIElTMzJCSVQ6Ci0gICAgICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgc3RydWN0LnBhY2ssICIzNTc5MTM5NDFiIiwgImEiKQotCiAgICAgZGVmIHRlc3RfdHJhaWxpbmdfY291bnRlcihzZWxmKToKICAgICAgICAgc3RvcmUgPSBhcnJheS5hcnJheSgnYicsIGInICcqMTAwKQogCkBAIC01NzYsNyArNTczLDcgQEAKICAgICAgICAgIyBUaGUgc2l6ZSBvZiAnUHlTdHJ1Y3RPYmplY3QnCiAgICAgICAgIHRvdGFsc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzJuM1AnKQogICAgICAgICAjIFRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSAnZm9ybWF0Y29kZScgZHluYW1pYyBhcnJheQotICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCdQMm4wUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCisgICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AzbjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKICAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyKSwgdG90YWxzaXplKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CkBAIC01ODcsMTQgKzU4NCw4NCBAQAogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignQicgKiAxMjM0LCAxMjM0KQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignZmQnLCAyKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZigneHh4eHh4eHh4eHh4eHgnLCAwKQotICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEwMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzEwMEgnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTg3cycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcyMHAnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMHMnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMGMnLCAwKQogCisKK2NsYXNzIFVucGFja0l0ZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGl0ZXJhdGl2ZSB1bnBhY2tpbmcgKHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2spLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0KHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX2l0ZXJhdG9yKGl0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgYWJjLkl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmFibGUpCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+aWJjcCcpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2NyIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgIyBXcm9uZyBieXRlcyBsZW5ndGgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1NiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMjM0NTY3OCIpCisgICAgICAgICMgWmVyby1sZW5ndGggc3RydWN0CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMiIpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRlKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDE2KSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MGIwYzBkMGUsIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfYXJiaXRyYXJ5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxMSkpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhtZW1vcnl2aWV3KGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF9oaW50KHNlbGYpOgorICAgICAgICBsaCA9IG9wZXJhdG9yLmxlbmd0aF9oaW50CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDMpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAyKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMSkKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9mdW5jKHNlbGYpOgorICAgICAgICAjIFNhbml0eSBjaGVjayBmb3IgdGhlIGdsb2JhbCBzdHJ1Y3QuaXRlcl91bnBhY2soKQorICAgICAgICBpdCA9IHN0cnVjdC5pdGVyX3VucGFjaygnPklCJywgYnl0ZXMocmFuZ2UoMSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggYTg5ZTk1NS4uMzUzZDBlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgIyBvcy5zdGF0KCkgZ2l2ZXMgYSBjb21wbGljYXRlZCBzdHJ1Y3Qgc2VxdWVuY2UuCiAgICAgICAgIHN0ID0gb3Muc3RhdChfX2ZpbGVfXykKICAgICAgICAgcmVwID0gcmVwcihzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKG9zLm5hbWUgKyAiLnN0YXRfcmVzdWx0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgib3Muc3RhdF9yZXN1bHQiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfbW9kZT0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2lubz0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2Rldj0iLCByZXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggNzdmMWJhMy4uNTRmNjQ4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc2VsZWN0b3JzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzZWxlY3QKQEAgLTE5LDEwICsyMCw2IEBACiBpbXBvcnQgdGV4dHdyYXAKIAogdHJ5OgotICAgIGltcG9ydCByZXNvdXJjZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJlc291cmNlID0gTm9uZQotdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCkBAIC0xNjIsOCArMTU5LDI4IEBACiAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogICAgICAgICBzZWxmLmFzc2VydEluKGInQkRGTCcsIG91dHB1dCkKIAorICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRpbl9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgY2FuIGJlIGNhbGxlZCB3aXRoIHN0ZGluIHNldCB0byBhIGZpbGUKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKS51cHBlcigpKSJdLAorICAgICAgICAgICAgICAgIHN0ZGluPXRmKQorICAgICAgICBzZWxmLmFzc2VydEluKGInUEVBUicsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgY2FuIGJlIGNhbGxlZCB3aXRoIGlucHV0IHNldCB0byBhIHN0cmluZworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBpbnB1dD1iJ3BlYXInKQorICAgICAgICBzZWxmLmFzc2VydEluKGInUEVBUicsIG91dHB1dCkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRvdXRfYXJnKHNlbGYpOgotICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAorICAgICAgICAjIGNoZWNrX291dHB1dCgpIHJlZnVzZXMgdG8gYWNjZXB0ICdzdGRvdXQnIGFyZ3VtZW50CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKQEAgLTE3MSw2ICsxODgsMjAgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZG91dCBhcmcgc3VwcGxpZWQuIikKICAgICAgICAgc2VsZi5hc3NlcnRJbignc3Rkb3V0JywgYy5leGNlcHRpb24uYXJnc1swXSkKIAorICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRpbl93aXRoX2lucHV0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3RkaW4nIHdpdGggJ2lucHV0JworICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCisgICAgICAgIHRmLndyaXRlKGIncGVhcicpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50KCd3aWxsIG5vdCBiZSBydW4nKSJdLAorICAgICAgICAgICAgICAgICAgICBzdGRpbj10ZiwgaW5wdXQ9YidoYXJlJykKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZGluIGFuZCBpbnB1dCBhcmdzIHN1cHBsaWVkLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZGluJywgYy5leGNlcHRpb24uYXJnc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW5wdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorCiAgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gd2l0aCB0aW1lb3V0IGFyZwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQpIGFzIGM6CkBAIC04NTMsOCArODg0LDkgQEAKICAgICAgICAgIwogICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyLUJFIGFyZSBzdWZmaWNpZW50IHRvIGNoZWNrIGJvdGggd2l0aCBCT00gYW5kCiAgICAgICAgICMgd2l0aG91dCwgYW5kIFVURi0xNiBhbmQgVVRGLTMyLgorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgZm9yIGVuY29kaW5nIGluIFsndXRmLTE2JywgJ3V0Zi0zMi1iZSddOgotICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgIyBJbmRpcmVjdGx5IHZpYSBpby5UZXh0SU9XcmFwcGVyLCBQb3BlbigpIGRlZmF1bHRzIHRvCiAgICAgICAgICAgICAjIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgYW5kIGVhcmxpZXIgaW4gUHl0aG9uIDMuMiB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKS4KQEAgLTg2NSw3ICs4OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBlbmNvZGluZykKICAgICAgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGVdCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCiAgICAgICAgICAgICAgICAgIyBXZSBzZXQgc3RkaW4gdG8gYmUgbm9uLU5vbmUgYmVjYXVzZSwgYXMgb2YgdGhpcyB3cml0aW5nLAogICAgICAgICAgICAgICAgICMgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGlzIHVzZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHBpcGVzIGlzCiAgICAgICAgICAgICAgICAgIyB6ZXJvIG9yIG9uZS4KQEAgLTg3NCw3ICs5MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoaW5wdXQ9JycpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgICAgIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gb2xkX2dldHByZWZlcnJlZGVuY29kaW5nCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgJzFcbjJcbjNcbjQnKQogCiAgICAgZGVmIHRlc3Rfbm9fbGVha2luZyhzZWxmKToKQEAgLTk4Miw4ICsxMDE0LDcgQEAKICAgICAgICAgIyB2YWx1ZSBmb3IgdGhhdCBsaW1pdCwgYnV0IFdpbmRvd3MgaGFzIDIwNDgsIHNvIHdlIGxvb3AKICAgICAgICAgIyAxMDI0IHRpbWVzIChlYWNoIGNhbGwgbGVha2VkIHR3byBmZHMpLgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDI0KToKLSAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvci4gIE90aGVycyByYWlzZSBPU0Vycm9yLgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQpAQCAtMTExNCw0NyArMTE0NSw2IEBACiAgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQogCi0KLSMgY29udGV4dCBtYW5hZ2VyCi1jbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKLSAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKLSAgICBvbGRfbGltaXQgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKLSAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCi0gICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgotICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgotICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgotICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfbGltaXQpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLQogQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJQT1NJWCBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBQT1NJWFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogCkBAIC0xMjQzLDcgKzEyMzMsNyBAQAogCiAgICAgZGVmIHRlc3RfcnVuX2Fib3J0KHNlbGYpOgogICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KLSAgICAgICAgd2l0aCBfU3VwcHJlc3NDb3JlRmlsZXMoKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOyBvcy5hYm9ydCgpJ10pCiAgICAgICAgICAgICBwLndhaXQoKQpAQCAtMTI2Niw3ICsxMjU2LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXJhaXNlX2l0KQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhIFZhbHVlRXJyb3IgZnJvbSB0aGUgcHJlZXhlY19mbiIpCkBAIC0xMzA2LDkgKzEyOTYsMTAgQEAKICAgICAgICAgIiIiSXNzdWUxNjE0MDogRG9uJ3QgZG91YmxlIGNsb3NlIHBpcGVzIG9uIHByZWV4ZWMgZXJyb3IuIiIiCiAKICAgICAgICAgZGVmIHJhaXNlX2l0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCisgICAgICAgICAgICByYWlzZSBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbigKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKQEAgLTE1MDcsMTYgKzE0OTgsMjggQEAKICAgICAgICAgIyBUZXJtaW5hdGluZyBhIGRlYWQgcHJvY2VzcwogICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2VzcygndGVybWluYXRlJykKIAorICAgIGRlZiBfc2F2ZV9mZHMoc2VsZiwgc2F2ZV9mZHMpOgorICAgICAgICBmZHMgPSBbXQorICAgICAgICBmb3IgZmQgaW4gc2F2ZV9mZHM6CisgICAgICAgICAgICBpbmhlcml0YWJsZSA9IG9zLmdldF9pbmhlcml0YWJsZShmZCkKKyAgICAgICAgICAgIHNhdmVkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZmRzLmFwcGVuZCgoZmQsIHNhdmVkLCBpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBmZHMKKworICAgIGRlZiBfcmVzdG9yZV9mZHMoc2VsZiwgZmRzKToKKyAgICAgICAgZm9yIGZkLCBzYXZlZCwgaW5oZXJpdGFibGUgaW4gZmRzOgorICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgZmQsIGluaGVyaXRhYmxlPWluaGVyaXRhYmxlKQorICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisKICAgICBkZWYgY2hlY2tfY2xvc2Vfc3RkX2ZkcyhzZWxmLCBmZHMpOgogICAgICAgICAjIElzc3VlICM5OTA1OiB0ZXN0IHRoYXQgc3VicHJvY2VzcyBwaXBlcyBzdGlsbCB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAgICAgIyBzb21lIHN0YW5kYXJkIGZkcyBjbG9zZWQKICAgICAgICAgc3RkaW4gPSAwCi0gICAgICAgIG5ld2ZkcyA9IFtdCi0gICAgICAgIGZvciBhIGluIGZkczoKLSAgICAgICAgICAgIGIgPSBvcy5kdXAoYSkKLSAgICAgICAgICAgIG5ld2Zkcy5hcHBlbmQoYikKLSAgICAgICAgICAgIGlmIGEgPT0gMDoKLSAgICAgICAgICAgICAgICBzdGRpbiA9IGIKKyAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMoZmRzKQorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBzYXZlZF9mZHM6CisgICAgICAgICAgICBpZiBmZCA9PSAwOgorICAgICAgICAgICAgICAgIHN0ZGluID0gc2F2ZWQKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpAQCAtMTUzMSwxMCArMTUzNCw3IEBACiAgICAgICAgICAgICBlcnIgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgob3V0LCBlcnIpLCAoYidhcHBsZScsIGInb3JhbmdlJykpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmb3IgYiwgYSBpbiB6aXAobmV3ZmRzLCBmZHMpOgotICAgICAgICAgICAgICAgIG9zLmR1cDIoYiwgYSkKLSAgICAgICAgICAgIGZvciBiIGluIG5ld2ZkczoKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShiKQorICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgZGVmIHRlc3RfY2xvc2VfZmRfMChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswXSkKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAgICAgICAgICAgICBvcy5sc2Vlayh0ZW1wX2Zkc1sxXSwgMCwgMCkKIAogICAgICAgICAgICAgIyBtb3ZlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIG91dCBvZiB0aGUgd2F5Ci0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgZmlsZSBvYmplY3RzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE1OTAsMTAgKzE1OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGVtcF9mZHNbMF0pCiAgICAgICAgICAgICAgICAgcC53YWl0KCkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmZCdzIHVuZGVybmVhdGggc3lzLnN0ZGluLCBldGMuCi0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CiAgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIDApCkBAIC0xNjE3LDcgKzE2MTQsNyBAQAogICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKIAogICAgICAgICAgICAgIyBzYXZlIGEgY29weSBvZiB0aGUgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9ycwotICAgICAgICAgICAgc2F2ZWRfZmRzID0gW29zLmR1cChmZCkgZm9yIGZkIGluIHJhbmdlKDMpXQorICAgICAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMocmFuZ2UoMykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgdGhlIHRlbXAgZmlsZXMgb3ZlciB0aGUgc3RhbmRhcmQgZmQncyAwLCAxLCAyCiAgICAgICAgICAgICAgICAgZm9yIGZkLCB0ZW1wX2ZkIGluIGVudW1lcmF0ZSh0ZW1wX2Zkcyk6CkBAIC0xNjQzLDkgKzE2NDAsNyBAQAogICAgICAgICAgICAgICAgIG91dCA9IG9zLnJlYWQoc3Rkb3V0X25vLCAxMDI0KQogICAgICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihvcy5yZWFkKHN0ZGVycl9ubywgMTAyNCkpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZvciBzdGQsIHNhdmVkIGluIGVudW1lcmF0ZShzYXZlZF9mZHMpOgotICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBzdGQpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGIiZ290IFNURElOIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiImVyciIpCkBAIC0xNjc3LDQwICsxNjcyLDQ3IEBACiAgICAgICAgICAgICAjIFB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBrZWVwcyB0aGUgbWVzc2FnZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgInN1cnJvZ2F0ZTpcdURDZmYiKQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICMgX3Bvc2l4c3VicHJvY2VzcyB1c2VzIGEgZGVmYXVsdCBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiRXhjZXB0aW9uIG9jY3VycmVkIGluIHByZWV4ZWNfZm4uIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciBvciBSdW50aW1lRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIikKIAogICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2VudihzZWxmKToKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gKCgndGVzdCcsICdhYmNcdURDRkYnKSwgKCd0ZXN0XHVEQ0ZGJywgJzQyJykpOgorICAgICAgICAgICAgZW5jb2RlZF92YWx1ZSA9IHZhbHVlLmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKKwogICAgICAgICAgICAgIyB0ZXN0IHN0ciB3aXRoIHN1cnJvZ2F0ZXMKICAgICAgICAgICAgIHNjcmlwdCA9ICJpbXBvcnQgb3M7IHByaW50KGFzY2lpKG9zLmdldGVudiglcykpKSIgJSByZXByKGtleSkKICAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCi0gICAgICAgICAgICAjIFVzZSBDIGxvY2FsZSB0byBnZXQgYXNjaWkgZm9yIHRoZSBsb2NhbGUgZW5jb2RpbmcgdG8gZm9yY2UKKyAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBBU0NJSSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQogICAgICAgICAgICAgIyBzdXJyb2dhdGUtZXNjYXBpbmcgb2YgXHhGRiBpbiB0aGUgY2hpbGQgcHJvY2Vzczsgb3RoZXJ3aXNlIGl0IGNhbgogICAgICAgICAgICAgIyBiZSBkZWNvZGVkIGFzLWlzIGlmIHRoZSBkZWZhdWx0IGxvY2FsZSBpcyBsYXRpbi0xLgogICAgICAgICAgICAgZW52WydMQ19BTEwnXSA9ICdDJworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgICAgICMgT24gQUlYLCB0aGUgQyBsb2NhbGUgdXNlcyB0aGUgTGF0aW4xIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IGVuY29kZWRfdmFsdWUuZGVjb2RlKCJsYXRpbjEiLCAic3Vycm9nYXRlZXNjYXBlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBPbiBvdGhlciBVTklYZXMsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBBU0NJSSBlbmNvZGluZworICAgICAgICAgICAgICAgIGRlY29kZWRfdmFsdWUgPSB2YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZGVjb2RlZF92YWx1ZSkpCiAKICAgICAgICAgICAgICMgdGVzdCBieXRlcwogICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52YiglcykpKSIgJSByZXByKGtleSkKICAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBlbnZba2V5XSA9IGVuY29kZWRfdmFsdWUKICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcChiJ1xuXHInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaSh2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKGVuY29kZWRfdmFsdWUpKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNfcHJvZ3JhbShzZWxmKToKICAgICAgICAgYWJzX3Byb2dyYW0gPSBvcy5mc2VuY29kZShzeXMuZXhlY3V0YWJsZSkKQEAgLTE4MTYsNiArMTgxOCw5IEBACiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQogICAgICAgICAgICAgb3Blbl9mZHMuYWRkKGZkKQogCisgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKwogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIGZkX3N0YXR1c10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1GYWxzZSkKICAgICAgICAgb3V0cHV0LCBpZ25vcmVkID0gcC5jb21tdW5pY2F0ZSgpCkBAIC0xODYwLDYgKzE4NjUsOCBAQAogICAgICAgICAgICAgZmRzID0gb3MucGlwZSgpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzFdKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMV0sIFRydWUpCiAgICAgICAgICAgICBvcGVuX2Zkcy51cGRhdGUoZmRzKQogCiAgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKQEAgLTE4ODIsNiArMTg4OSwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlLCBwYXNzX2Zkcz0oZmQsICkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb3ZlcnJpZGluZyBjbG9zZV9mZHMnLCBzdHIoY29udGV4dC53YXJuaW5nKSkKIAorICAgIGRlZiB0ZXN0X3Bhc3NfZmRzX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSBzdXBwb3J0LmZpbmRmaWxlKCJmZF9zdGF0dXMucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKworICAgICAgICBpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUsIFRydWUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUsIEZhbHNlKQorICAgICAgICBwYXNzX2ZkcyA9IChpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBzY3JpcHRdCisgICAgICAgIGFyZ3MgKz0gbGlzdChtYXAoc3RyLCBwYXNzX2ZkcykpCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXBhc3NfZmRzKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgIyB0aGUgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgaW5oZXJpdGVkLCBzbyBpdHMgaW5oZXJpdGFibGUKKyAgICAgICAgIyBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGZvcmsoKSBhbmQgYmVmb3JlIGV4ZWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkcywgc2V0KHBhc3NfZmRzKSwgIm91dHB1dD0lYSIgJSBvdXRwdXQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBmbGFnIG11c3Qgbm90IGJlIGNoYW5nZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlKSwgRmFsc2UpCisKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKICAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKQEAgLTE5NjksNyArMjAwMiw3IEBACiAgICAgICAgICMgbGV0IHNvbWUgdGltZSBmb3IgdGhlIHByb2Nlc3MgdG8gZXhpdCwgYW5kIGNyZWF0ZSBhIG5ldyBQb3BlbjogdGhpcwogICAgICAgICAjIHNob3VsZCB0cmlnZ2VyIHRoZSB3YWl0KCkgb2YgcAogICAgICAgICB0aW1lLnNsZWVwKDAuMikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CkBAIC0yMTU0LDE1ICsyMTg3LDE2IEBACiAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3VicHJvY2VzcywgJ19oYXNfcG9sbCcsIEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJwb2xsIHN5c3RlbSBjYWxsIG5vdCBzdXBwb3J0ZWQiKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IiKQogY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsKFByb2Nlc3NUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIHNlbGYub3JpZ19zZWxlY3RvciA9IHN1YnByb2Nlc3MuX1BvcGVuU2VsZWN0b3IKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBUcnVlCisgICAgICAgIHN1YnByb2Nlc3MuX1BvcGVuU2VsZWN0b3IgPSBzZWxmLm9yaWdfc2VsZWN0b3IKICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5hdS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKaW5kZXggNzY3MzE0Zi4uYWY5ZmZlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCBzdW5hdQogCkBAIC00Nyw2ICs0OCwzNCBAQAogICAgICAgIiIiKQogCiAKK2NsYXNzIFN1bmF1UENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAorICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHN1bmF1CisgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMjQuYXUnCisgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CisgICAgbmNoYW5uZWxzID0gMgorICAgIHNhbXB3aWR0aCA9IDMKKyAgICBmcmFtZXJhdGUgPSAxMTAyNQorICAgIG5mcmFtZXMgPSA0OAorICAgIGNvbXB0eXBlID0gJ05PTkUnCisgICAgY29tcG5hbWUgPSAnbm90IGNvbXByZXNzZWQnCisgICAgZnJhbWVzID0gYnl0ZXMuZnJvbWhleCgiIiJcCisgICAgICAwMjJENjVGRkVCOUQgNEI1QTBGMDBGQTU0IDMxMTNDMzA0RUUyQiA4MERDRDYwODQzMDMgXAorICAgICAgQ0JERUMwMDZCMjYxIDQ4QTk5ODAzRjJGOCBCRkU4MjQwMUIwN0QgMDM2QkZCRkU3QjVEIFwKKyAgICAgIEI4NTc1NkZBM0VDOSBCNEIwNTVGMzUwMkIgMjk5ODMwRUJDQjYyIDFBNUNBN0U2RDk5QSBcCisgICAgICBFREZBM0VFNDkxQkQgQzYyNUVCRTI3ODg0IDBFMDVBOUUwQjZDRiBFRjI5MjlFMDI5MjIgXAorICAgICAgNTc1OEQ4RTI3MDY3IEZCMzU1N0U4M0UxNiAxMzc3QkZFRjg0MDIgRDgyQzVCRjcyNzJBIFwKKyAgICAgIDk3OEYxNkZCNzc0NSBGNUY4NjVGQzEwMTMgMDg2NjM1RkI5QzRFIERGMzBGQ0ZCNDBFRSBcCisgICAgICAxMTdGRTBGQTM0MzggM0VFNkI4RkI1QUMzIEJDNzdBM0ZDQjJGNCA2NkQ2REFGRjVGMzIgXAorICAgICAgQ0YxM0I5MDQxMjc1IDQzMUQ2OTA5N0E4QyBDMUJCNjAwRUM3NEUgNTEyMEI5MTJBMkJBIFwKKyAgICAgIEVFREY2NDE3NTRDMCA4MjA3MDAxNjY0QjcgN0ZGRkZGMTQ0NTNGIDgwMDAwMDEyOTRFNiBcCisgICAgICA0OTlDMUIwRUIzQjIgNTJCNzNFMERCQ0EwIEVGQjJCMjBGNUZEOCBDRTNDREIwRkJFMTIgXAorICAgICAgRTRCNDlDMENFQTJEIDYzNDRBODBBNUE3QyAwOEM4RkUwQTFGRkUgMkJCOTg2MEIwQTBFIFwKKyAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCisgICAgICAiIiIpCisKKwogY2xhc3MgU3VuYXVQQ00zMlRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCiAgICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAogICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05Niw3ICsxMjUsNyBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IGUwOGNmMDEuLjJkYTNhYzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC0xLDE5ICsxLDI2IEBACiAiIiJEbyBhIG1pbmltYWwgdGVzdCBvZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmVuJ3Qgb3RoZXJ3aXNlIHRlc3RlZC4iIiIKLQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bnRlc3RlZF9tb2R1bGVzX2Nhbl9iZV9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgdW50ZXN0ZWQgPSAoJ2JkYicsICdlbmNvZGluZ3MnLCAnZm9ybWF0dGVyJywgJ2ltZ2hkcicsCisgICAgICAgICAgICAgICAgICAgICdudHVybDJwYXRoJywgJ3RhYm5hbm55JykKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgaW1wb3J0IGJkYgotICAgICAgICAgICAgaW1wb3J0IGNnaXRiCisgICAgICAgICAgICBmb3IgbmFtZSBpbiB1bnRlc3RlZDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGVzdC50ZXN0X3t9Jy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gaGFzIHRlc3RzIGV2ZW4gdGhvdWdoIHRlc3Rfc3VuZHJ5IGNsYWltcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXJ3aXNlJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuYmNwcGNvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXIKLSAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmZpbGVsaXN0CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5tc3ZjY29tcGlsZXIKQEAgLTM5LDI4ICs0NiwxNCBAQAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnNkaXN0CiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkCiAKLSAgICAgICAgICAgIGltcG9ydCBlbmNvZGluZ3MKLSAgICAgICAgICAgIGltcG9ydCBmb3JtYXR0ZXIKLSAgICAgICAgICAgIGltcG9ydCBnZXRwYXNzCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGltZ2hkcgotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggNGVkYjFhOC4uMTZiNjYwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtMzA2LDYgKzMwNiw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBhY2Y2ZDM2Li5mMGM3MTQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNiw2ICs2LDkgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBwbGF0Zm9ybQogCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLCB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUKICMgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtMjQ4LDcgKzI1MSw3IEBACiAKICAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdCglZCkKICAgICAgICAgICAgIGYoKSIiIikKLSAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgZm9yIGkgaW4gKDUwLCAxMDAwKToKICAgICAgICAgICAgICAgICBzdWIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZSAlIGldLAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQpAQCAtNDI5LDcgKzQzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzeXMuaW50X2luZm8uc2l6ZW9mX2RpZ2l0KSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuaGFzaF9pbmZvKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDkpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLm1vZHVsdXMsIDIqKnN5cy5oYXNoX2luZm8ud2lkdGgpCiAgICAgICAgICMgc3lzLmhhc2hfaW5mby5tb2R1bHVzIHNob3VsZCBiZSBhIHByaW1lOyB3ZSBkbyBhIHF1aWNrCiAgICAgICAgICMgcHJvYmFibGUgcHJpbWFsaXR5IHRlc3QgKGRvZXNuJ3QgZXhjbHVkZSB0aGUgcG9zc2liaWxpdHkgb2YKQEAgLTQ0NCw2ICs0NDcsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW5mLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLm5hbiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5pbWFnLCBpbnQpCisgICAgICAgIGFsZ28gPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZX0hBU0hfQUxHT1JJVEhNIikKKyAgICAgICAgaWYgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0gaW4geyJmbnYiLCAic2lwaGFzaDI0In06CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uaGFzaF9iaXRzLCB7MzIsIDY0fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmhhc2hfaW5mby5zZWVkX2JpdHMsIHszMiwgNjQsIDEyOH0pCisKKyAgICAgICAgICAgIGlmIGFsZ28gPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAic2lwaGFzaDI0IikKKyAgICAgICAgICAgIGVsaWYgYWxnbyA9PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJmbnYiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSBwbGF0Zm9ybS5wcm9jZXNzb3IoKS5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc29yIGluIHsic3BhcmMiLCAibWlwcyJ9OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAiZm52IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAic2lwaGFzaDI0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUFlfSEFTSF9FWFRFUk5BTAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGdvLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzeXMuaGFzaF9pbmZvLmN1dG9mZiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5oYXNoX2luZm8uY3V0b2ZmLCA4KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4c2l6ZSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKQEAgLTQ4MSw3ICs1MDQsNyBAQAogICAgIGRlZiB0ZXN0X3RocmVhZF9pbmZvKHNlbGYpOgogICAgICAgICBpbmZvID0gc3lzLnRocmVhZF9pbmZvCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCAzKQotICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdvczInLCAncHRocmVhZCcsICdzb2xhcmlzJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5uYW1lLCAoJ250JywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubG9jaywgKCdzZW1hcGhvcmUnLCAnbXV0ZXgrY29uZCcsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CkBAIC01MTQsNyArNTM3LDcgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCkBAIC01NDMsNiArNTY2LDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTYxMCw2ICs2NjksMzYgQEAKICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHN5cywgImdldGFsbG9jYXRlZGJsb2NrcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzIHVuYXZhaWxhYmxlIG9uIHRoaXMgYnVpbGQiKQorICAgIGRlZiB0ZXN0X2dldGFsbG9jYXRlZGJsb2NrcyhzZWxmKToKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MKKyAgICAgICAgd2l0aF9weW1hbGxvYyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9QWU1BTExPQycpCisgICAgICAgIGEgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCBpbnQpCisgICAgICAgIGlmIHdpdGhfcHltYWxsb2M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2hlbiBXSVRIX1BZTUFMTE9DIGlzbid0IGF2YWlsYWJsZSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZworICAgICAgICAgICAgIyBhYm91dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbjogdGhlIGZ1bmN0aW9uIG1pZ2h0CisgICAgICAgICAgICAjIHJldHVybiAwIG9yIHNvbWV0aGluZyBncmVhdGVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYSwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXaGlsZSB3ZSBjb3VsZCBpbWFnaW5lIGEgUHl0aG9uIHNlc3Npb24gd2hlcmUgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgIyBtdWx0aXBsZSBidWZmZXIgb2JqZWN0cyB3b3VsZCBleGNlZWQgdGhlIHNoYXJpbmcgb2YgcmVmZXJlbmNlcywKKyAgICAgICAgICAgICMgaXQgaXMgdW5saWtlbHkgdG8gaGFwcGVuIGluIGEgbm9ybWFsIHRlc3QgcnVuLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGEsIHN5cy5nZXR0b3RhbHJlZmNvdW50KCkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgZ2V0dG90YWxyZWZjb3VudCgpIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGIgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYiwgYSkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGMgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjLCByYW5nZShiIC0gNTAsIGIgKyA1MCkpCisKKwogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02NTQsNyArNzQzLDcgQEAKICAgICAgICAgc2FtcGxlcyA9IFtiJycsIGIndScqMTAwMDAwXQogICAgICAgICBmb3Igc2FtcGxlIGluIHNhbXBsZXM6CiAgICAgICAgICAgICB4ID0gYnl0ZWFycmF5KHNhbXBsZSkKLSAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCdpblAnKSArIHguX19hbGxvY19fKCkpCisgICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnbjJQaScpICsgeC5fX2FsbG9jX18oKSkKICAgICAgICAgIyBieXRlYXJyYXlfaXRlcmF0b3IKICAgICAgICAgY2hlY2soaXRlcihieXRlYXJyYXkoKSksIHNpemUoJ25QJykpCiAgICAgICAgICMgY2VsbApAQCAtNzMzLDcgKzgyMiw3IEBACiAgICAgICAgIG5mcmVlcyA9IGxlbih4LmZfY29kZS5jb19mcmVldmFycykKICAgICAgICAgZXh0cmFzID0geC5mX2NvZGUuY29fc3RhY2tzaXplICsgeC5mX2NvZGUuY29fbmxvY2FscyArXAogICAgICAgICAgICAgICAgICAgbmNlbGxzICsgbmZyZWVzIC0gMQotICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTJQM2knICsgQ09fTUFYQkxPQ0tTKiczaScgKyAnUCcgKyBleHRyYXMqJ1AnKSkKKyAgICAgICAgY2hlY2soeCwgdnNpemUoJzEzUDNpYycgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQogICAgICAgICAjIGZ1bmN0aW9uCiAgICAgICAgIGRlZiBmdW5jKCk6IHBhc3MKICAgICAgICAgY2hlY2soZnVuYywgc2l6ZSgnMTJQJykpCkBAIC03NzksNyArODY4LDcgQEAKICAgICAgICAgIyBtZW1vcnl2aWV3CiAgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYicnKSwgc2l6ZSgnUG5pbiAyUDJuMmk1UCAzY1BuJykpCiAgICAgICAgICMgbW9kdWxlCi0gICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQblAnKSkKKyAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUFBQJykpCiAgICAgICAgICMgTm9uZQogICAgICAgICBjaGVjayhOb25lLCBzaXplKCcnKSkKICAgICAgICAgIyBOb3RJbXBsZW1lbnRlZFR5cGUKQEAgLTgzMywxMSArOTIyLDExIEBACiAgICAgICAgIGNoZWNrKCgxLDIsMyksIHZzaXplKCcnKSArIDMqc2VsZi5QKQogICAgICAgICAjIHR5cGUKICAgICAgICAgIyBzdGF0aWMgdHlwZTogUHlUeXBlT2JqZWN0Ci0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpCiAgICAgICAgIGNoZWNrKGludCwgcykKICAgICAgICAgIyAoUHlUeXBlT2JqZWN0ICsgUHlOdW1iZXJNZXRob2RzICsgUHlNYXBwaW5nTWV0aG9kcyArCiAgICAgICAgICMgIFB5U2VxdWVuY2VNZXRob2RzICsgUHlCdWZmZXJQcm9jcyArIDRQKQotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKICAgICAgICAgIyBTZXBhcmF0ZSBibG9jayBmb3IgUHlEaWN0S2V5c09iamVjdCB3aXRoIDQgZW50cmllcwogICAgICAgICBzICs9IHN0cnVjdC5jYWxjc2l6ZSgiMm5QbiIpICsgNCpzdHJ1Y3QuY2FsY3NpemUoIm4yUCIpCiAgICAgICAgICMgY2xhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDNmNjdmZC4uODA0YzQ0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgc2h1dGlsCiBmcm9tIGNvcHkgaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBjaGVja193YXJuaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0LCBza2lwX3VubGVzc19zeW1saW5rKQogCiBpbXBvcnQgc3lzY29uZmlnCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCiAKICAgICBkZWYgdGVzdF9nZXRfc2NoZW1lX25hbWVzKHNlbGYpOgotICAgICAgICB3YW50ZWQgPSAoJ250JywgJ250X3VzZXInLCAnb3MyJywgJ29zMl9ob21lJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCisgICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvc3hfZnJhbWV3b3JrX3VzZXInLAogICAgICAgICAgICAgICAgICAgJ3Bvc2l4X2hvbWUnLCAncG9zaXhfcHJlZml4JywgJ3Bvc2l4X3VzZXInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9zY2hlbWVfbmFtZXMoKSwgd2FudGVkKQogCkBAIC0zMDUsMTQgKzMwNSwxMyBAQAogICAgICAgICBpZiAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJyBpbiBlbnY6CiAgICAgICAgICAgICBkZWwgZW52WydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXQogCi0gICAgICAgIHdpdGggb3BlbignL2Rldi9udWxsJywgJ3cnKSBhcyBkZXZudWxsX2ZwOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWwotICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKLSAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbF9mcCwKLSAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLAorICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQogICAgICAgICBzdGF0dXMgPSBwLndhaXQoKQpAQCAtMzI1LDIwICszMjQsMTkgQEAKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgZW52WydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXSA9ICcxMC4xJwogCi0gICAgICAgIHdpdGggb3BlbignL2Rldi9udWxsJykgYXMgZGV2X251bGw6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZfbnVsbCwKLSAgICAgICAgICAgICAgICBlbnY9ZW52KQotICAgICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlfcGxhdGZvcm0sIHRlc3RfcGxhdGZvcm0pCiAKICAgICBkZWYgdGVzdF9zcmNkaXIoc2VsZik6CiAgICAgICAgICMgU2VlIElzc3VlcyAjMTUzMjIsICMxNTM2NC4KQEAgLTM3MSw2ICszNjksMjYgQEAKICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNkaXIsIHNyY2RpcjIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyLCAnU08nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fdmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2luX3ZhcnMoc2VsZik6CisgICAgICAgIHZhcnMgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodmFyc1snU08nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzWydTTyddLCB2YXJzWydFWFRfU1VGRklYJ10pCisKIAogY2xhc3MgTWFrZWZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCAyMzgxNzVmLi45ZDMxODEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGFyZmlsZQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI3LDExICsyNywxMyBAQAogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAogVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAiLXRhcmRpciIKK3RhcmV4dGRpciA9IFRFTVBESVIgKyAnLWV4dHJhY3QtdGVzdCcKIHRhcm5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCiBnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQogYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKIHh6bmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIueHoiKQogdG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCitkb3RsZXNzbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhciIpCiAKIG1kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgogbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKQEAgLTE3MjQsNiArMTcyNiwxNjggQEAKICAgICAgICAgICAgIHRhcmZpbGUuaXRuKDB4MTAwMDAwMDAwMDAsIDYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKIAogCitjbGFzcyBDb21tYW5kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRhcmZpbGVjbWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKyAgICAgICAgcmV0dXJuIG91dC5yZXBsYWNlKG9zLmxpbmVzZXAuZW5jb2RlKCksIGInXG4nKQorCisgICAgZGVmIHRhcmZpbGVjbWRfZmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAndGFyZmlsZScsICphcmdzKQorCisgICAgZGVmIG1ha2Vfc2ltcGxlX3RhcmZpbGUoc2VsZiwgdGFyX25hbWUpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCB0YXJfbmFtZSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgdGFyZGF0YSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQodGFyZGF0YSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHRhcmRhdGEpKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10ZXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZvciB0YXJfbmFtZSBpbiB0ZXN0dGFybmFtZXM6CisgICAgICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctdCcsIHRhcl9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidpcyBhIHRhciBhcmNoaXZlLlxuJywgb3V0KQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLXQnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGFyX25hbWU9dGFyX25hbWUpOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YXJfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6NTExXSkKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1GYWxzZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfdmVyYm9zZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgJ3InKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctbCcsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctZScsICctLWV4dHJhY3QnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1lJywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInIGZpbGUgaXMgZXh0cmFjdGVkLicsIG91dCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2RpZmZlcmVudF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1lJywgdG1wbmFtZSwgJ3NwYW1kaXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLWUnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworCiBjbGFzcyBDb250ZXh0TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0xNzMyLDIwICsxODk2LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6Ci0gICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBPU0Vycm9yCiAgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKICAgICAgICAgdGFyLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgIHdpdGggdGFyOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgIyBUZXN0IGlmIHRoZSBPU0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCkBAIC0xODUxLDYgKzIwMTUsOCBAQAogICAgIHN1cHBvcnQudW5saW5rKFRFTVBESVIpCiAgICAgb3MubWFrZWRpcnMoVEVNUERJUikKIAorICAgIGdsb2JhbCB0ZXN0dGFybmFtZXMKKyAgICB0ZXN0dGFybmFtZXMgPSBbdGFybmFtZV0KICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCiAKQEAgLTE4NTgsNiArMjAyNCw3IEBACiAgICAgZm9yIGMgaW4gR3ppcFRlc3QsIEJ6MlRlc3QsIEx6bWFUZXN0OgogICAgICAgICBpZiBjLm9wZW46CiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhjLnRhcm5hbWUpCisgICAgICAgICAgICB0ZXN0dGFybmFtZXMuYXBwZW5kKGMudGFybmFtZSkKICAgICAgICAgICAgIHdpdGggYy5vcGVuKGMudGFybmFtZSwgIndiIikgYXMgdGFyOgogICAgICAgICAgICAgICAgIHRhci53cml0ZShkYXRhKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IDRjZjNmMjguLjY2YzQ5ZmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC0yNTQsNDAgKzI1NCw2IEBACiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGFyZyksIHJlcywgbXNnPWFyZykKIAotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdtZXJnZSBpcyBkZXByZWNhdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIG1lcmdlID0gc2VsZi5pbnRlcnAudGsubWVyZ2UKLSAgICAgICAgICAgIGNhbGwgPSBzZWxmLmludGVycC50ay5jYWxsCi0gICAgICAgICAgICB0ZXN0Y2FzZXMgPSBbCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKCgnYScsKSwgJ2EnKSwKLSAgICAgICAgICAgICAgICAoKDIsKSwgJzInKSwKLSAgICAgICAgICAgICAgICAoKCcnLCksICd7fScpLAotICAgICAgICAgICAgICAgICgneycsICdcXHsnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJ2InLCAnYycpLCAnYSBiIGMnKSwKLSAgICAgICAgICAgICAgICAoKCcgJywgJ1x0JywgJ1xyJywgJ1xuJyksICd7IH0ge1x0fSB7XHJ9IHtcbn0nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJyAnLCAnYycpLCAnYSB7IH0gYycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAn4oKsJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnXFUwMDAxMDRhMicpLCAnYSBcVTAwMDEwNGEyJyksCi0gICAgICAgICAgICAgICAgKCgnYScsIGInXHhlMlx4ODJceGFjJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAoJ2InLCAnYycpKSwgJ2Ege2IgY30nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMiksICdhIDInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMy40KSwgJ2EgMy40JyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgyLCAzLjQpKSwgJ2EgezIgMy40fScpLAotICAgICAgICAgICAgICAgICgoKSwgJycpLAotICAgICAgICAgICAgICAgICgoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwpLCAnezEgMiAzLjR9JyksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgKChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLCksCi0gICAgICAgICAgICAgICAgICAgICAnezEyIOKCrCDigqwgMy40fScpLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGZvciBhcmdzLCByZXMgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVyZ2UoKmFyZ3MpLCByZXMsIG1zZz1hcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBtZXJnZSwgYidceDgwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgbWVyZ2UsICdcdWRjODAnKQotCiAKIGNsYXNzIEJpZ21lbVRjbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CmluZGV4IGM5ZjJjY2IuLmJhMzMwNjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0xLDEwICsxLDkgQEAKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCB0ZWxuZXRsaWIKIGltcG9ydCB0aW1lCiBpbXBvcnQgY29udGV4dGxpYgogCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKQEAgLTExMiw0MCArMTExLDMyIEBACiAgICAgICAgIHNlbGYuX21lc3NhZ2VzICs9IG91dC5nZXR2YWx1ZSgpCiAgICAgICAgIHJldHVybgogCi1kZWYgbW9ja19zZWxlY3QoKnNfYXJncyk6Ci0gICAgYmxvY2sgPSBGYWxzZQotICAgIGZvciBsIGluIHNfYXJnczoKLSAgICAgICAgZm9yIGZvYiBpbiBsOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb2IsIFRlbG5ldEFsaWtlKToKLSAgICAgICAgICAgICAgICBibG9jayA9IGZvYi5zb2NrLmJsb2NrCi0gICAgaWYgYmxvY2s6Ci0gICAgICAgIHJldHVybiBbW10sIFtdLCBbXV0KLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gc19hcmdzCi0KLWNsYXNzIE1vY2tQb2xsZXIob2JqZWN0KToKLSAgICB0ZXN0X2Nhc2UgPSBOb25lICAjIFNldCBkdXJpbmcgVGVzdENhc2Ugc2V0VXAuCitjbGFzcyBNb2NrU2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGVfb2JqcyA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLmtleXMgPSB7fQogCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZkLCBldmVudG1hc2spOgotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRUcnVlKGhhc2F0dHIoZmQsICdmaWxlbm8nKSwgZmQpCi0gICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydEVxdWFsKGV2ZW50bWFzaywgc2VsZWN0LlBPTExJTnxzZWxlY3QuUE9MTFBSSSkKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLmFwcGVuZChmZCkKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoZmlsZW9iaiwgMCwgZXZlbnRzLCBkYXRhKQorICAgICAgICBzZWxmLmtleXNbZmlsZW9ial0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQogCi0gICAgZGVmIHBvbGwoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAga2V5ID0gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGJsb2NrID0gRmFsc2UKLSAgICAgICAgZm9yIGZvYiBpbiBzZWxmLl9maWxlX29ianM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKKyAgICAgICAgZm9yIGZpbGVvYmogaW4gc2VsZi5rZXlzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBUZWxuZXRBbGlrZSk6CisgICAgICAgICAgICAgICAgYmxvY2sgPSBmaWxlb2JqLnNvY2suYmxvY2sKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiBibG9jazoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHppcChzZWxmLl9maWxlX29ianMsIFtzZWxlY3QuUE9MTElOXSpsZW4oc2VsZi5fZmlsZV9vYmpzKSkKKyAgICAgICAgICAgIHJldHVybiBbKGtleSwga2V5LmV2ZW50cykgZm9yIGtleSBpbiBzZWxmLmtleXMudmFsdWVzKCldCiAKLSAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmZCk6Ci0gICAgICAgIHNlbGYuX2ZpbGVfb2Jqcy5yZW1vdmUoZmQpCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgdGVzdF9zb2NrZXQocmVhZHMpOgpAQCAtMTU5LDcgKzE1MCw3IEBACiAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbiA9IG9sZF9jb25uCiAgICAgcmV0dXJuCiAKLWRlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlLCB1c2VfcG9sbD1Ob25lKToKK2RlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlKToKICAgICAnJycgcmV0dXJuIGEgdGVsbmV0bGliLlRlbG5ldCBvYmplY3QgdGhhdCB1c2VzIGEgU29ja2V0U3R1YiB3aXRoCiAgICAgICAgIHJlYWRzIHF1ZXVlZCB1cCB0byBiZSByZWFkICcnJwogICAgIGZvciB4IGluIHJlYWRzOgpAQCAtMTY3LDI5ICsxNTgsMTQgQEAKICAgICB3aXRoIHRlc3Rfc29ja2V0KHJlYWRzKToKICAgICAgICAgdGVsbmV0ID0gY2xzKCdkdW1teScsIDApCiAgICAgICAgIHRlbG5ldC5fbWVzc2FnZXMgPSAnJyAjIGRlYnVnbGV2ZWwgb3V0cHV0Ci0gICAgICAgIGlmIHVzZV9wb2xsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdXNlX3BvbGwgYW5kIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIHJlcXVpcmVkLicpCi0gICAgICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gdXNlX3BvbGwKICAgICByZXR1cm4gdGVsbmV0CiAKLQogY2xhc3MgRXhwZWN0QW5kUmVhZFRlc3RDYXNlKFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IG1vY2tfc2VsZWN0Ci0gICAgICAgIHNlbGYub2xkX3BvbGwgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgICAgIHNlbGYub2xkX3BvbGwgPSBzZWxlY3QucG9sbAotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBNb2NrUG9sbGVyCi0gICAgICAgICAgICBNb2NrUG9sbGVyLnRlc3RfY2FzZSA9IHNlbGYKLQorICAgICAgICBzZWxmLm9sZF9zZWxlY3RvciA9IHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IKKyAgICAgICAgdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvciA9IE1vY2tTZWxlY3RvcgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gTm9uZQotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBzZWxmLm9sZF9wb2xsCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBzZWxmLm9sZF9zZWxlY3QKLQorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gc2VsZi5vbGRfc2VsZWN0b3IKIAogY2xhc3MgUmVhZFRlc3RzKEV4cGVjdEFuZFJlYWRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToKQEAgLTIwOCwyMiArMTg0LDYgQEAKICAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPUZhbHNlKQotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBwb2xsKCkgY2FsbC4nKQotICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTQyNywyMyArMzg3LDYgQEAKICAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIFdyaXRlVGVzdHMsIE9wdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNGZmNTZiOC4uYWM0ZDg2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0zNiw3ICszNiw3IEBACiAjIENvbW1vbiBmdW5jdGlvbmFsaXR5LgogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJbYS16QS1aMC05Xy1dezZ9JCIpCisgICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIl5bYS16MC05Xy1dezh9JCIpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIgPSBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkKQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgICAgICBuYmFzZSA9IG5iYXNlW2xlbihwcmUpOmxlbihuYmFzZSktbGVuKHN1ZildCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0cl9jaGVjay5tYXRjaChuYmFzZSksCi0gICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIC9eW2EtekEtWjAtOV8tXXs2fSQvIgorICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCBeW2EtejAtOV8tXXs4fSQiCiAgICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQogCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICAgICMgdmlhIGFueSBidWdzIGFib3ZlCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIG9zLmNsb3NlKHJlYWRfZmQpCiAgICAgICAgICAgICBvcy5jbG9zZSh3cml0ZV9mZCkKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBvcy5lcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZmlsZS5uYW1lKS5zdF9tb2RlKQogICAgICAgICBleHBlY3RlZCA9IDBvNjAwCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtMzUwLDYgKzM1MCw3IEBACiAgICAgICAgICAgICB2PSJxIgogCiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZpbGUuZmQpLCBGYWxzZSkKICAgICAgICAgZmQgPSAiJWQiICUgZmlsZS5mZAogCiAgICAgICAgIHRyeToKQEAgLTM2Niw3ICszNjcsNyBAQAogICAgICAgICAjIE9uIFdpbmRvd3MgYSBzcGF3biogL3BhdGgvIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZG4ndCBiZSBxdW90ZWQsCiAgICAgICAgICMgYnV0IGFuIGFyZyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGggZG91YmxlCiAgICAgICAgICMgcXVvdGVzIG9uIGVhY2ggZW5kCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGRlY29yYXRlZCA9ICciJXMiJyAlIHN5cy5leGVjdXRhYmxlCiAgICAgICAgICAgICB0ZXN0ZXIgPSAnIiVzIicgJSB0ZXN0ZXIKICAgICAgICAgZWxzZToKQEAgLTQ3Nyw2ICs0NzgsMjAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogCisgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdmUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciBzaG91bGQgbm90IGZsYXR0ZW4gaXRzIGNhc2UKKyAgICAgICAgIyBldmVuIG9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbQorICAgICAgICBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgiLVRlbXAiKQorICAgICAgICBfdGVtcGRpciwgdGVtcGZpbGUudGVtcGRpciA9IHRlbXBmaWxlLnRlbXBkaXIsIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICAgICAgIyBGYWtlIHRoZSBmaXJzdCBlbnYgdmFyIHdoaWNoIGlzIGNoZWNrZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICBlbnZbIlRNUERJUiJdID0gY2FzZV9zZW5zaXRpdmVfdGVtcGRpcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGVtcGZpbGUudGVtcGRpciA9IF90ZW1wZGlyCisgICAgICAgICAgICBzdXBwb3J0LnJtZGlyKGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIpCisKIAogY2xhc3MgVGVzdE1rc3RlbXAoQmFzZVRlc3RDYXNlKToKICAgICAiIiJUZXN0IG1rc3RlbXAoKS4iIiIKQEAgLTU2Niw3ICs1ODEsNyBAQAogICAgICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGRpcikuc3RfbW9kZSkKICAgICAgICAgICAgIG1vZGUgJj0gMG83NzcgIyBNYXNrIG9mZiBzdGlja3kgYml0cyBpbmhlcml0ZWQgZnJvbSAvdG1wCiAgICAgICAgICAgICBleHBlY3RlZCA9IDBvNzAwCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjODZmNWNmLi4xYmJhNzdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTksOSArOSw4IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWZyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50LCBzaG9ydGVuCiAKIAogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQzMCw2ICs0MjksOTAgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFsiYWEgXHhlNFx4ZTQtIiwgIlx4ZTRceGU0Il0pCiAKIAorY2xhc3MgTWF4TGluZXNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBzdHJpcCBzcGFjZXMgYmVmb3JlIHBsYWNlaG9sZGVyCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorICAgICAgICAjIHBsYWNlaG9sZGVyIGF0IHRoZSBzdGFydCBvZiBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICAjIGZpbmFsIHNwYWNlcworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0ICsgJyAnICogMTAsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgIyBsb25nIHBsYWNlaG9sZGVyIGFuZCBpbmRlbnRhdGlvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBwbGFjZWhvbGRlcj0nLicgKiAxMDAwKQorCisKIGNsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCkBAIC00OTAsNiArNTczLDE0IEBACiAgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQogICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQogCisgICAgZGVmIHRlc3RfbWF4X2xpbmVzX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2lsaXN0aWNleHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdbLi4uXSddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisKIAogY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTc3NywxMiArODY4LDYyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGVudCh0ZXh0LCBwcmVmaXgsIHByZWRpY2F0ZSksIGV4cGVjdCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoV3JhcFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9uZ1dvcmRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZGVudFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2UpCitjbGFzcyBTaG9ydGVuVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19zaG9ydGVuKHNlbGYsIHRleHQsIHdpZHRoLCBleHBlY3QsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgU2ltcGxlIGNhc2U6IGp1c3Qgd29yZHMsIHNwYWNlcywgYW5kIGEgYml0IG9mIHB1bmN0dWF0aW9uCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBbLi4uXSIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gWy4uLl0iKQorCisgICAgZGVmIHRlc3RfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/IEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxNywgIkhlbGxvIHRoZXJlLCQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsIGhvdyQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsICQkIiwgcGxhY2Vob2xkZXI9JyAkJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCksIHRleHQsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCBsZW4odGV4dCkgLSAxLAorICAgICAgICAgICAgIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAiCisgICAgICAgICAgICAiSSdtIGdsYWQgdG8gaGVhciQkIiwgcGxhY2Vob2xkZXI9JyQkJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCIiLCA2LCAiIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgICMgV2hpdGVzcGFjZSBjb2xsYXBzaW5nCisgICAgICAgIHRleHQgPSAiIiIKKyAgICAgICAgICAgIFRoaXMgaXMgYSAgcGFyYWdyYXBoIHRoYXQgIGFscmVhZHkgaGFzCisgICAgICAgICAgICBsaW5lIGJyZWFrcyBhbmQgXHQgdGFicyB0b28uIiIiCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgdGFicyB0b28uIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJlYWtzIGFuZCBbLi4uXSIpCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTIsICJoZWxsbyB3b3JsZCEiKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMSwgImhlbGxvIFsuLi5dIikKKyAgICAgICAgIyBUaGUgbGVhZGluZyBzcGFjZSBpcyB0cmltbWVkIGZyb20gdGhlIHBsYWNlaG9sZGVyCisgICAgICAgICMgKGl0IHdvdWxkIGJlIHVnbHkgb3RoZXJ3aXNlKS4KKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTAsICJbLi4uXSIpCisKKyAgICBkZWYgdGVzdF93aWR0aF90b29fc21hbGxfZm9yX3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICBzaG9ydGVuKCJ4IiAqIDIwLCB3aWR0aD04LCBwbGFjZWhvbGRlcj0iKC4uLi4uLikiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4uKSIpCisKKyAgICBkZWYgdGVzdF9maXJzdF93b3JkX3Rvb19sb25nX2J1dF9wbGFjZWhvbGRlcl9maXRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oIkhlbGxvbyIsIDUsICJbLi4uXSIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCBhMTkxZTE1Li5mOWE3MjFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJzdGFja19zaXplIG5vdCByZXNldCB0byBkZWZhdWx0IikKIAotICAgICAgICBpZiBvcy5uYW1lIG5vdCBpbiAoIm50IiwgIm9zMiIsICJwb3NpeCIpOgorICAgICAgICBpZiBvcy5uYW1lIG5vdCBpbiAoIm50IiwgInBvc2l4Iik6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0c3Nfc3VwcG9ydGVkID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQppbmRleCA2YzI5NjViLi4zZDk2MWI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtNSw4ICs1LDggQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggMGViZWIzOS4uYTg0NTc3YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTExLDYgKzExLDcgQEAKIGltcG9ydCBzeXMKIF90aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIHRocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgX3Rlc3RjYXBpCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgpAQCAtMjAsNiArMjEsMTUgQEAKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKKworIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKKyMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KK3BsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICdocC11eDExJykKKworCiAjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCiBjbGFzcyBDb3VudGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtOTksNyArMTA5LDcgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnKQogICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKE5VTVRBU0tTKQorICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5pc19hbGl2ZSgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0LmlkZW50LCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlkZW50IGlzIE5vbmUpCkBAIC00NjcsNiArNDc3LDEyNyBAQAogICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCiAKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5uYW1lLCAnTWFpblRocmVhZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbi5pZGVudCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZGluZy5tYWluX3RocmVhZCgpLmlkZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aHJlYWRpbmcKKworICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJNYWluVGhyZWFkXG5UcnVlXG5UcnVlXG4iKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAidGVzdCBuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0cGlkJyksICJ0ZXN0IG5lZWRzIG9zLndhaXRwaWQoKSIpCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWRfYWZ0ZXJfZm9ya19mcm9tX25vbm1haW5fdGhyZWFkKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nLCBzeXMKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICAgICAgICAgICMgc3Rkb3V0IGlzIGZ1bGx5IGJ1ZmZlcmVkIGJlY2F1c2Ugbm90IGEgdHR5LAorICAgICAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdG8gZmx1c2ggYmVmb3JlIGV4aXQuCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorCisgICAgICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgICAgICB0aC5zdGFydCgpCisgICAgICAgICAgICB0aC5qb2luKCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIlRocmVhZC0xXG5UcnVlXG5UcnVlXG4iKQorCisgICAgZGVmIHRlc3RfdHN0YXRlX2xvY2soc2VsZik6CisgICAgICAgICMgVGVzdCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgVGhyZWFkIG9iamVjdHMuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBpcyBOb25lIHVudGlsIHRoZSB0aHJlYWQgaXMgc3RhcnRlZAorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll90c3RhdGVfbG9jaywgTm9uZSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgVGhlIHRzdGF0ZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkIHdoZW4gdGhlIHRocmVhZCBpcyBydW5uaW5nCisgICAgICAgICMgKG9yIHN1c3BlbmRlZCkuCisgICAgICAgIHRzdGF0ZV9sb2NrID0gdC5fdHN0YXRlX2xvY2sKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9MCksIEZhbHNlKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgV2hlbiB0aGUgdGhyZWFkIGVuZHMsIHRoZSBzdGF0ZV9sb2NrIGNhbiBiZSBzdWNjZXNzZnVsbHkKKyAgICAgICAgIyBhY3F1aXJlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRzdGF0ZV9sb2NrLmFjcXVpcmUodGltZW91dD01KSwgRmFsc2UpCisgICAgICAgICMgQnV0IGlzX2FsaXZlKCkgaXMgc3RpbGwgVHJ1ZTogIHdlIGhvbGQgX3RzdGF0ZV9sb2NrIG5vdywgd2hpY2gKKyAgICAgICAgIyBwcmV2ZW50cyBpc19hbGl2ZSgpIGZyb20ga25vd2luZyB0aGUgdGhyZWFkJ3MgZW5kLW9mLWxpZmUgQyBjb2RlCisgICAgICAgICMgaXMgZG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBMZXQgaXNfYWxpdmUoKSBmaW5kIG91dCB0aGUgQyBjb2RlIGlzIGRvbmUuCisgICAgICAgIHRzdGF0ZV9sb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBBbmQgdmVyaWZ5IHRoZSB0aHJlYWQgZGlzcG9zZWQgb2YgX3RzdGF0ZV9sb2NrLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHJfc3RvcHBlZChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAgaW4gcmVwcihUaHJlYWQpIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIHN0YXJ0ZWQgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBmaW5pc2ggPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0YXJ0ZWQiLCByZXByKHQpKQorICAgICAgICBmaW5pc2gucmVsZWFzZSgpCisgICAgICAgICMgInN0b3BwZWQiIHNob3VsZCBhcHBlYXIgaW4gdGhlIHJlcHIgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgorICAgICAgICAjIEltcGxlbWVudGF0aW9uIGRldGFpbDogIGFzIG9mIHRoaXMgd3JpdGluZywgdGhhdCdzIHRyaXZpYWxseSB0cnVlCisgICAgICAgICMgaWYgLmpvaW4oKSBpcyBjYWxsZWQsIGFuZCBhbG1vc3QgdHJpdmlhbGx5IHRydWUgaWYgLmlzX2FsaXZlKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGUgZGV0YWlsIHdlJ3JlIHRlc3RpbmcgaGVyZSBpcyB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cAorICAgICAgICAjICJhbGwgb24gaXRzIG93biIuCisgICAgICAgIExPT0tJTkdfRk9SID0gInN0b3BwZWQiCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICBpZiBMT09LSU5HX0ZPUiBpbiByZXByKHQpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oTE9PS0lOR19GT1IsIHJlcHIodCkpICMgd2Ugd2FpdGVkIGF0IGxlYXN0IDUgc2Vjb25kcwogCiAgICAgZGVmIHRlc3RfQm91bmRlZFNlbWFwaG9yZV9saW1pdChzZWxmKToKICAgICAgICAgIyBCb3VuZGVkU2VtYXBob3JlIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yIGlmIHJlbGVhc2VkIHRvbyBvZnRlbi4KQEAgLTQ4NiwxNCArNjE3LDUzIEBACiAgICAgICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJzLnJlbGVhc2UpCiAKLWNsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbG9jYWxzX2F0X2V4aXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDY2OiB0aHJlYWQgbG9jYWxzIG11c3Qgbm90IGJlIGRlbGV0ZWQgYmVmb3JlIGRlc3RydWN0b3JzCisgICAgICAgICMgYXJlIGNhbGxlZAorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCiAKLSAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcwotICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKLSAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCi0gICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgotICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JywgJ2hwLXV4MTEnKQorICAgICAgICAgICAgY2xhc3MgQXRleGl0OgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgidGhyZWFkX2RpY3QuYXRleGl0ID0gJXIiICUgdGhyZWFkX2RpY3QuYXRleGl0KQorCisgICAgICAgICAgICB0aHJlYWRfZGljdCA9IHRocmVhZGluZy5sb2NhbCgpCisgICAgICAgICAgICB0aHJlYWRfZGljdC5hdGV4aXQgPSAiYXRleGl0IgorCisgICAgICAgICAgICBhdGV4aXQgPSBBdGV4aXQoKQorICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiInRocmVhZF9kaWN0LmF0ZXhpdCA9ICdhdGV4aXQnIikKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2F0X2V4aXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDY2OiB0cnkgdG8gY2FsbCBtb3N0IGRlc3RydWN0b3JzIGF0IFB5dGhvbiBzaHV0ZG93biBiZWZvcmUKKyAgICAgICAgIyBkZXN0cm95aW5nIFB5dGhvbiB0aHJlYWQgc3RhdGVzCisgICAgICAgIGZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVdkIiwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGRlZiBvcGVuX3NsZWVwKCk6CisgICAgICAgICAgICAgICAgIyBhIHdhcm5pbmcgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIG9wZW4gZmlsZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBkZXN0cm95ZWQgKHdpdGhvdXQgYmVpbmcgZXhwbGljaXRseSBjbG9zZWQpIHdoaWxlIHRoZSBkYWVtb24KKyAgICAgICAgICAgICAgICAjIHRocmVhZCBpcyBkZXN0cm95ZWQKKyAgICAgICAgICAgICAgICBmaWxlb2JqID0gb3BlbiglYSwgJ3JiJykKKyAgICAgICAgICAgICAgICBzdGFydF9ldmVudC5zZXQoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNjAuMCkKKworICAgICAgICAgICAgc3RhcnRfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1vcGVuX3NsZWVwKQorICAgICAgICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisKKyAgICAgICAgICAgICMgd2FpdCB1bnRpbCB0aGUgdGhyZWFkIHN0YXJ0ZWQKKyAgICAgICAgICAgIHN0YXJ0X2V2ZW50LndhaXQoKQorICAgICAgICAiIiIgJSBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIucnN0cmlwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgYiJec3lzOjE6IFJlc291cmNlV2FybmluZzogdW5jbG9zZWQgZmlsZSAiKQorCisKK2NsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CiAKICAgICBkZWYgX3J1bl9hbmRfam9pbihzZWxmLCBzY3JpcHQpOgogICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgpAQCAtNTY2LDE0NCArNzM2LDggQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQogCi0gICAgZGVmIGFzc2VydFNjcmlwdEhhc091dHB1dChzZWxmLCBzY3JpcHQsIGV4cGVjdGVkX291dHB1dCk6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgc2NyaXB0KQotICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfb3V0cHV0KQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF80X2pvaW5pbmdfYWNyb3NzX2ZvcmtfaW5fd29ya2VyX3RocmVhZChzZWxmKToKLSAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlIGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiBmb3JraW5nIGZyb20gYSBjaGlsZAotICAgICAgICAjIHRocmVhZC4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjY0My4KLQotICAgICAgICAjIFRoZSBzY3JpcHQgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgbmV3IHRocmVhZCBhbmQgdGhlbgotICAgICAgICAjICAgdHJpZXMgdG8gam9pbiBpdC4KLSAgICAgICAgIyAtIFRoZSBqb2luIG9wZXJhdGlvbiBhY3F1aXJlcyB0aGUgTG9jayBpbnNpZGUgdGhlIHRocmVhZCdzIF9ibG9jawotICAgICAgICAjICAgQ29uZGl0aW9uLiAgKFNlZSB0aHJlYWRpbmcucHk6VGhyZWFkLmpvaW4oKS4pCi0gICAgICAgICMgLSBXZSBzdHViIG91dCB0aGUgYWNxdWlyZSBtZXRob2Qgb24gdGhlIGNvbmRpdGlvbiB0byBmb3JjZSBpdCB0byB3YWl0Ci0gICAgICAgICMgICB1bnRpbCB0aGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEFDUVVJUkVEIEhFUkUpCi0gICAgICAgICMgLSBUaGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEhFTEQgYW5kIFdPUktFUiBUSFJFQUQgRk9SS1MKLSAgICAgICAgIyAgIEhFUkUpCi0gICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGVudGVycyBDb25kaXRpb24ud2FpdCgpLAotICAgICAgICAjICAgd2hpY2ggcmVsZWFzZXMgdGhlIGxvY2sgb24gdGhlIGNoaWxkIHRocmVhZC4KLSAgICAgICAgIyAtIFRoZSBjaGlsZCBwcm9jZXNzIHJldHVybnMuICBXaXRob3V0IHRoZSBuZWNlc3NhcnkgZml4LCB3aGVuIHRoZQotICAgICAgICAjICAgbWFpbiB0aHJlYWQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgKHdoaWNoIHVzZWQgdG8gYmUgdGhlIGNoaWxkIHRocmVhZAotICAgICAgICAjICAgaW4gdGhlIHBhcmVudCBwcm9jZXNzKSBhdHRlbXB0cyB0byBleGl0LCBpdCB3aWxsIHRyeSB0byBhY3F1aXJlIHRoZQotICAgICAgICAjICAgbG9jayBpbiB0aGUgVGhyZWFkLl9ibG9jayBDb25kaXRpb24gb2JqZWN0IGFuZCBoYW5nLCBiZWNhdXNlIHRoZQotICAgICAgICAjICAgbG9jayB3YXMgaGVsZCBhY3Jvc3MgdGhlIGZvcmsuCi0KLSAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCi0KLSAgICAgICAgICAgIGZpbmlzaF9qb2luID0gRmFsc2UKLSAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQotCi0gICAgICAgICAgICBkZWYgd29ya2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoaXMgdGhyZWFkJ3MgbG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgZm9ya2luZyB0bwotICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBkZWFkbG9jay4KLSAgICAgICAgICAgICAgICBnbG9iYWwgZmluaXNoX2pvaW4KLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgICAgICMgTE9DSyBIRUxEOiBNYWluIHRocmVhZCBob2xkcyBsb2NrIGFjcm9zcyB0aGlzIGNhbGwuCi0gICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICBmaW5pc2hfam9pbiA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgotICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQotICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCi0KLSAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCi0KLSAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgbG9jayBhY3F1aXJlIG1ldGhvZC4KLSAgICAgICAgICAgICMgVGhpcyBhY3F1aXJlcyB0aGUgbG9jayBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgY2hpbGQgaGFzIGZvcmtlZAotICAgICAgICAgICAgIyBiZWZvcmUgcmV0dXJuaW5nLCB3aGljaCB3aWxsIHJlbGVhc2UgdGhlIGxvY2sgc29vbiBhZnRlci4gIElmCi0gICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSB0cmllcyB0byBmaXggdGhpcyB0ZXN0IGNhc2UgYnkgYWNxdWlyaW5nIHRoaXMgbG9jawotICAgICAgICAgICAgIyBiZWZvcmUgZm9ya2luZyBpbnN0ZWFkIG9mIHJlc2V0dGluZyBpdCwgdGhlIHRlc3QgY2FzZSB3aWxsCi0gICAgICAgICAgICAjIGRlYWRsb2NrIHdoZW4gaXQgc2hvdWxkbid0LgotICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKLSAgICAgICAgICAgIG9yaWdfYWNxdWlyZSA9IGNvbmRpdGlvbi5hY3F1aXJlCi0gICAgICAgICAgICBjYWxsX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgICAgICBjYWxsX2NvdW50ID0gMAotICAgICAgICAgICAgZGVmIG15X2FjcXVpcmUoKToKLSAgICAgICAgICAgICAgICBnbG9iYWwgY2FsbF9jb3VudAotICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCi0gICAgICAgICAgICAgICAgb3JpZ19hY3F1aXJlKCkgICMgTE9DSyBBQ1FVSVJFRCBIRVJFCi0gICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBjYWxsX2NvdW50ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2hfam9pbjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgICMgV09SS0VSIFRIUkVBRCBGT1JLUyBIRVJFCi0gICAgICAgICAgICAgICAgd2l0aCBjYWxsX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxfY291bnQgKz0gMQotICAgICAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUgPSBteV9hY3F1aXJlCi0KLSAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgdy5qb2luKCkKLSAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbicpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCAiZW5kIG9mIG1haW5cbiIpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzVfY2xlYXJfd2FpdGVyX2xvY2tzX3RvX2F2b2lkX2NyYXNoKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGF3bmVkIHRocmVhZCB0aGF0IGZvcmtzIGRvZXNuJ3Qgc2VnZmF1bHQgb24gY2VydGFpbgotICAgICAgICAjIHBsYXRmb3JtcywgbmFtZWx5IE9TIFguICBUaGlzIHVzZWQgdG8gaGFwcGVuIGlmIHRoZXJlIHdhcyBhIHdhaXRlcgotICAgICAgICAjIGxvY2sgaW4gdGhlIHRocmVhZCdzIGNvbmRpdGlvbiB2YXJpYWJsZSdzIHdhaXRlcnMgbGlzdC4gIEV2ZW4gdGhvdWdoCi0gICAgICAgICMgd2Uga25vdyB0aGUgbG9jayB3aWxsIGJlIGhlbGQgYWNyb3NzIHRoZSBmb3JrLCBpdCBpcyBub3Qgc2FmZSB0bwotICAgICAgICAjIHJlbGVhc2UgbG9ja3MgaGVsZCBhY3Jvc3MgZm9ya3Mgb24gYWxsIHBsYXRmb3Jtcywgc28gcmVsZWFzaW5nIHRoZQotICAgICAgICAjIHdhaXRlciBsb2NrIGNhdXNlZCBhIHNlZ2ZhdWx0IG9uIE9TIFguICBGdXJ0aGVybW9yZSwgc2luY2UgbG9ja3Mgb24KLSAgICAgICAgIyBPUyBYIGFyZSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpbXBsZW1lbnRlZCB3aXRoIGEgbXV0ZXggKyBjb25kaXRpb24KLSAgICAgICAgIyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc2VtYXBob3JlLCB3aGlsZSB3ZSBrbm93IHRoYXQgdGhlIFB5dGhvbi1sZXZlbAotICAgICAgICAjIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCwgd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW50ZXJuYWwgbXV0ZXggd2lsbCBiZQotICAgICAgICAjIGFjcXVpcmVkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLgotCi0gICAgICAgIHNjcmlwdCA9ICIiImlmIFRydWU6Ci0gICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwotCi0gICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKLQotICAgICAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaGFzIGF0dGVtcHRlZCB0byBqb2luIHRoaXMgdGhyZWFkCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgY29udGludWluZy4KLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgKGNwaWQsIHJjKSA9IG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBjcGlkID09IGNoaWxkcGlkCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCByYyA9PSAwCi0gICAgICAgICAgICAgICAgICAgIHByaW50KCdlbmQgb2Ygd29ya2VyIHRocmVhZCcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQotCi0gICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIF9yZWxlYXNlX3NhdmUgbWV0aG9kLgotICAgICAgICAgICAgIyBUaGlzIHJlbGVhc2VzIHRoZSBjb25kaXRpb24ncyBsb2NrIGFuZCBmbGlwcyB0aGUgZ2xvYmFsIHRoYXQKLSAgICAgICAgICAgICMgY2F1c2VzIHRoZSB3b3JrZXIgdG8gZm9yay4gIEF0IHRoaXMgcG9pbnQsIHRoZSBwcm9ibGVtYXRpYyB3YWl0ZXIKLSAgICAgICAgICAgICMgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvbmNlIGJ5IHRoZSB3YWl0ZXIgYW5kIGhhcyBiZWVuIHB1dCBvbnRvCi0gICAgICAgICAgICAjIHRoZSB3YWl0ZXJzIGxpc3QuCi0gICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jawotICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUgPSBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZQotICAgICAgICAgICAgZGVmIG15X3JlbGVhc2Vfc2F2ZSgpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCi0gICAgICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUoKQotICAgICAgICAgICAgICAgICMgV2FpdGVyIGxvY2sgaGVsZCBoZXJlLCBjb25kaXRpb24gbG9jayByZWxlYXNlZC4KLSAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQotICAgICAgICAgICAgY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUgPSBteV9yZWxlYXNlX3NhdmUKLQotICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICB3LmpvaW4oKQotICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluIHRocmVhZCcpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgb3V0cHV0ID0gImVuZCBvZiB3b3JrZXIgdGhyZWFkXG5lbmQgb2YgbWFpbiB0aHJlYWRcbiIKLSAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCBvdXRwdXQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzZfZGFlbW9uX3RocmVhZHMoc2VsZik6CisgICAgZGVmIHRlc3RfNF9kYWVtb25fdGhyZWFkcyhzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGEgZGFlbW9uIHRocmVhZCBjYW5ub3QgY3Jhc2ggdGhlIGludGVycHJldGVyIG9uIHNodXRkb3duCiAgICAgICAgICMgYnkgbWFuaXB1bGF0aW5nIGludGVybmFsIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgZGlzcG9zZWQgb2YgaW4KICAgICAgICAgIyB0aGUgbWFpbiB0aHJlYWQuCkBAIC03MTMsNiArNzQ3LDEwIEBACiAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpbXBvcnQgdGltZQogICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisKKyAgICAgICAgICAgICMgaWdub3JlICJ1bmNsb3NlZCBmaWxlIC4uLiIgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAnJywgUmVzb3VyY2VXYXJuaW5nKQogCiAgICAgICAgICAgICB0aHJlYWRfaGFzX3J1biA9IHNldCgpCiAKQEAgLTc2OSw2ICs4MDcsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKKyAgICBkZWYgdGVzdF9kYWVtb25fdGhyZWFkc19mYXRhbF9lcnJvcihzZWxmKToKKyAgICAgICAgc3ViaW50ZXJwX2NvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKworICAgICAgICAgICAgX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoJXIpCisgICAgICAgICAgICAiIiIgJSAoc3ViaW50ZXJwX2NvZGUsKQorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJGYXRhbCBQeXRob24gZXJyb3I6IFB5X0VuZEludGVycHJldGVyOiAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCB0aGUgbGFzdCB0aHJlYWQiLCBlcnIuZGVjb2RlKCkpCisKIAogY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKICAgICAjIEEgUnVudGltZUVycm9yIHNob3VsZCBiZSByYWlzZWQgaWYgVGhyZWFkLnN0YXJ0KCkgaXMgY2FsbGVkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKaW5kZXggZjk3NWE3NS4uYjEwMDRlNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQpAQCAtOCw3ICs4LDcgQEAKIHRocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogaW1wb3J0IHRpbWUKIAotaWYgc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInKSBvciBzeXMucGxhdGZvcm09PSdyaXNjb3MnOgoraWYgKHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCiAKIHByb2Nlc3NfcGlkID0gb3MuZ2V0cGlkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCBkOGQ2MDI5Li40NGJjYjk0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0zNzEsNiArMzcxLDE0IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih0aW1lLCAnbW9ub3RvbmljJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgdGltZS5tb25vdG9uaWMnKQogICAgIGRlZiB0ZXN0X21vbm90b25pYyhzZWxmKToKKyAgICAgICAgIyBtb25vdG9uaWMoKSBzaG91bGQgbm90IGdvIGJhY2t3YXJkCisgICAgICAgIHRpbWVzID0gW3RpbWUubW9ub3RvbmljKCkgZm9yIG4gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgdDEgPSB0aW1lc1swXQorICAgICAgICBmb3IgdDIgaW4gdGltZXNbMTpdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodDIsIHQxLCAidGltZXM9JXMiICUgdGltZXMpCisgICAgICAgICAgICB0MSA9IHQyCisKKyAgICAgICAgIyBtb25vdG9uaWMoKSBpbmNsdWRlcyB0aW1lIGVsYXBzZWQgZHVyaW5nIGEgc2xlZXAKICAgICAgICAgdDEgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIHRpbWUuc2xlZXAoMC41KQogICAgICAgICB0MiA9IHRpbWUubW9ub3RvbmljKCkKQEAgLTM3OCw2ICszODYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIodDIsIHQxKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGR0LCAwLjUsIGRlbHRhPTAuMikKIAorICAgICAgICAjIG1vbm90b25pYygpIGlzIGEgbW9ub3RvbmljIGJ1dCBub24gYWRqdXN0YWJsZSBjbG9jawogICAgICAgICBpbmZvID0gdGltZS5nZXRfY2xvY2tfaW5mbygnbW9ub3RvbmljJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm8ubW9ub3RvbmljKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uYWRqdXN0YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IDViY2UyYWYuLjk2ZWY5NTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC0xNTAsMzAgKzE1MCw3NCBAQAogCiBjbGFzcyBUcmFjZWJhY2tGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisgICAgICAgICAgICBzZWxmLnNvbWVfZXhjZXB0aW9uKCkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBjbGVhbnVwX2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBDbGVhciB0aGUgaW5uZXIgZnJhbWVzLCBub3QgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICBjbGVhbnVwX2Z1bmModGIudGJfbmV4dCkKICAgICAgICAgICAgIHRyYWNlYmFja19mbXQgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJyArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIodGIpKQogICAgICAgICAgICAgZmlsZV8gPSBTdHJpbmdJTygpCiAgICAgICAgICAgICB0cmFjZWJhY2tfcHJpbnQodGIsIGZpbGVfKQogICAgICAgICAgICAgcHl0aG9uX2ZtdCAgPSBmaWxlXy5nZXR2YWx1ZSgpCisgICAgICAgICAgICAjIENhbGwgYWxsIF90YiBhbmQgX2V4YyBmdW5jdGlvbnMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyB0YnN0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIpCisgICAgICAgICAgICB0YmZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIsIGZpbGU9dGJmaWxlKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGV4Y3N0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZtdCA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9ZXhjZmlsZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBQeXRob24gYW5kIHRoZSB0cmFjZWJhY2sgbW9kdWxlIGZvcm1hdCB0aGUgc2FtZSB0aGluZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja19mbXQsIHB5dGhvbl9mbXQpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX3RiIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGJzdGRlcnIuZ2V0dmFsdWUoKSwgdGJmaWxlLmdldHZhbHVlKCkpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX2V4YyBmdW5jIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y3N0ZGVyci5nZXR2YWx1ZSgpLCBleGNmaWxlLmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjZm10LCBleGNmaWxlLmdldHZhbHVlKCkpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGlzIHByb3Blcmx5IGluZGVudGVkLgogICAgICAgICB0Yl9saW5lcyA9IHB5dGhvbl9mbXQuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgMykKLSAgICAgICAgYmFubmVyLCBsb2NhdGlvbiwgc291cmNlX2xpbmUgPSB0Yl9saW5lcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0Yl9saW5lcyksIDUpCisgICAgICAgIGJhbm5lciA9IHRiX2xpbmVzWzBdCisgICAgICAgIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzWy0yOl0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhbm5lci5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2F0aW9uLnN0YXJ0c3dpdGgoJyAgRmlsZScpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cmNlX2xpbmUuc3RhcnRzd2l0aCgnICAgIHJhaXNlJykpCiAKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoKQorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrX2Zvcm1hdF93aXRoX2NsZWFyZWRfZnJhbWVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdHJhY2ViYWNrIGZvcm1hdHRpbmcgYWxzbyB3b3JrcyB3aXRoIGEgY2xlYXIoKWVkIGZyYW1lCisgICAgICAgIGRlZiBjbGVhbnVwX3RiKHRiKToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZm9ybWF0KGNsZWFudXBfdGIpCisKKyAgICBkZWYgdGVzdF9zdGFja19mb3JtYXQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IF9zdGFjayBmdW5jdGlvbnMuIE5vdGUgd2UgaGF2ZSB0byB1c2UgX2dldGZyYW1lKDEpIHRvCisgICAgICAgICMgY29tcGFyZSB0aGVtIHdpdGhvdXQgdGhpcyBmcmFtZSBhcHBlYXJpbmcgaW4gdGhlIG91dHB1dAorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgc3RzdGRlcnI6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgc3RmaWxlID0gU3RyaW5nSU8oKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSwgZmlsZT1zdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RzdGRlcnIuZ2V0dmFsdWUoKSwgc3RmaWxlLmdldHZhbHVlKCkpCisKKyAgICAgICAgc3RmbXQgPSB0cmFjZWJhY2suZm9ybWF0X3N0YWNrKHN5cy5fZ2V0ZnJhbWUoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCAiIi5qb2luKHN0Zm10KSkKKwogCiBjYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgpAQCAtMzQ0LDYgKzM4OCwzNiBAQAogICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCiAKIAorY2xhc3MgTWlzY1RyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjCisgICAgIyBDaGVjayBub24tcHJpbnRpbmcgZnVuY3Rpb25zIGluIHRyYWNlYmFjayBtb2R1bGUKKyAgICAjCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBtaWRkbGUoKQorICAgICAgICBkZWYgbWlkZGxlKCk6CisgICAgICAgICAgICBpbm5lcigpCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dGVyKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgIyBJbml0aWFsIGFzc2VydGlvbjogdGhlcmUncyBvbmUgbG9jYWwgaW4gdGhlIGlubmVyIGZyYW1lLgorICAgICAgICBpbm5lcl9mcmFtZSA9IHRiLnRiX25leHQudGJfbmV4dC50Yl9uZXh0LnRiX2ZyYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlubmVyX2ZyYW1lLmZfbG9jYWxzKSwgMSkKKworICAgICAgICAjIENsZWFyIHRyYWNlYmFjayBmcmFtZXMKKyAgICAgICAgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lcyh0YikKKworICAgICAgICAjIExvY2FsIHZhcmlhYmxlIGRpY3Qgc2hvdWxkIG5vdyBiZSBlbXB0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAwKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGUzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5CkBAIC0wLDAgKzEsNzkyIEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2VtYWxsb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworRU1QVFlfU1RSSU5HX1NJWkUgPSBzeXMuZ2V0c2l6ZW9mKGInJykKKworZGVmIGdldF9mcmFtZXMobmZyYW1lLCBsaW5lbm9fZGVsdGEpOgorICAgIGZyYW1lcyA9IFtdCisgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCisgICAgZm9yIGluZGV4IGluIHJhbmdlKG5mcmFtZSk6CisgICAgICAgIGNvZGUgPSBmcmFtZS5mX2NvZGUKKyAgICAgICAgbGluZW5vID0gZnJhbWUuZl9saW5lbm8gKyBsaW5lbm9fZGVsdGEKKyAgICAgICAgZnJhbWVzLmFwcGVuZCgoY29kZS5jb19maWxlbmFtZSwgbGluZW5vKSkKKyAgICAgICAgbGluZW5vX2RlbHRhID0gMAorICAgICAgICBmcmFtZSA9IGZyYW1lLmZfYmFjaworICAgICAgICBpZiBmcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdHVwbGUoZnJhbWVzKQorCitkZWYgYWxsb2NhdGVfYnl0ZXMoc2l6ZSk6CisgICAgbmZyYW1lID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlYmFja19saW1pdCgpCisgICAgYnl0ZXNfbGVuID0gKHNpemUgLSBFTVBUWV9TVFJJTkdfU0laRSkKKyAgICBmcmFtZXMgPSBnZXRfZnJhbWVzKG5mcmFtZSwgMSkKKyAgICBkYXRhID0gYid4JyAqIGJ5dGVzX2xlbgorICAgIHJldHVybiBkYXRhLCB0cmFjZW1hbGxvYy5UcmFjZWJhY2soZnJhbWVzKQorCitkZWYgY3JlYXRlX3NuYXBzaG90cygpOgorICAgIHRyYWNlYmFja19saW1pdCA9IDIKKworICAgIHJhd190cmFjZXMgPSBbCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoNjYsICgoJ2IucHknLCAxKSwpKSwKKworICAgICAgICAoNywgKCgnPHVua25vd24+JywgMCksKSksCisgICAgXQorICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MuU25hcHNob3QocmF3X3RyYWNlcywgdHJhY2ViYWNrX2xpbWl0KQorCisgICAgcmF3X3RyYWNlczIgPSBbCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDUwMDAsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoNDAwLCAoKCdjLnB5JywgNTc4KSwpKSwKKyAgICBdCisgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QocmF3X3RyYWNlczIsIHRyYWNlYmFja19saW1pdCkKKworICAgIHJldHVybiAoc25hcHNob3QsIHNuYXBzaG90MikKKworZGVmIGZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgIHJldHVybiB0cmFjZW1hbGxvYy5fRnJhbWUoKGZpbGVuYW1lLCBsaW5lbm8pKQorCitkZWYgdHJhY2ViYWNrKCpmcmFtZXMpOgorICAgIHJldHVybiB0cmFjZW1hbGxvYy5UcmFjZWJhY2soZnJhbWVzKQorCitkZWYgdHJhY2ViYWNrX2xpbmVubyhmaWxlbmFtZSwgbGluZW5vKToKKyAgICByZXR1cm4gdHJhY2ViYWNrKChmaWxlbmFtZSwgbGluZW5vKSkKKworZGVmIHRyYWNlYmFja19maWxlbmFtZShmaWxlbmFtZSk6CisgICAgcmV0dXJuIHRyYWNlYmFja19saW5lbm8oZmlsZW5hbWUsIDApCisKKworY2xhc3MgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0cmFjZW1hbGxvYyBtdXN0IGJlIHN0b3BwZWQgYmVmb3JlIHRoZSB0ZXN0IikKKworICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZW1hbGxvY19tZW1vcnkoc2VsZik6CisgICAgICAgIGRhdGEgPSBbYWxsb2NhdGVfYnl0ZXMoMTIzKSBmb3IgY291bnQgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIHNpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgMCkKKworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBzaXplMiA9IHRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZTIsIHNpemUpCisKKyAgICBkZWYgdGVzdF9nZXRfb2JqZWN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjaykKKworICAgIGRlZiB0ZXN0X3NldF90cmFjZWJhY2tfbGltaXQoc2VsZik6CisgICAgICAgIG9ial9zaXplID0gMTAKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHJhY2VtYWxsb2Muc3RhcnQsIC0xKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxMCkKKyAgICAgICAgb2JqMiwgb2JqMl90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2ViYWNrKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmoyX3RyYWNlYmFjaykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMSkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2ViYWNrKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2spCisKKworICAgIGRlZiBmaW5kX3RyYWNlKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrKToKKyAgICAgICAgZm9yIHRyYWNlIGluIHRyYWNlczoKKyAgICAgICAgICAgIGlmIHRyYWNlWzFdID09IHRyYWNlYmFjay5fZnJhbWVzOgorICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZQorCisgICAgICAgIHNlbGYuZmFpbCgidHJhY2Ugbm90IGZvdW5kIikKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXMoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorICAgICAgICB0cmFjZSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9ial90cmFjZWJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYWNlLCB0dXBsZSkKKyAgICAgICAgc2l6ZSwgdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2suX2ZyYW1lcykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpLCBbXSkKKworCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlc19pbnRlcm5fdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIGR1bW15IHdyYXBwZXJzIHRvIGdldCBtb3JlIHVzZWZ1bCBhbmQgaWRlbnRpY2FsIGZyYW1lcyBpbiB0aGUgdHJhY2ViYWNrCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzMyhzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzNChzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHR3byBpZGVudGljYWwgdHJhY2ViYWNrcyBhcmUgbm90IGR1cGxpY2F0ZWQKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDQpCisgICAgICAgIG9ial9zaXplID0gMTIzCisgICAgICAgIG9iajEsIG9iajFfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXM0KG9ial9zaXplKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisKKyAgICAgICAgdHJhY2UxID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqMV90cmFjZWJhY2spCisgICAgICAgIHRyYWNlMiA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajJfdHJhY2ViYWNrKQorICAgICAgICBzaXplMSwgdHJhY2ViYWNrMSA9IHRyYWNlMQorICAgICAgICBzaXplMiwgdHJhY2ViYWNrMiA9IHRyYWNlMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhY2ViYWNrMiwgdHJhY2ViYWNrMSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZWRfbWVtb3J5KHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBhbGxvY2F0ZXMgc29tZSBpbnRlcm5hbHMgb2JqZWN0cywgc28gdGhlIHRlc3QgbXVzdCB0b2xlcmF0ZQorICAgICAgICAjIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleHBlY3RlZCBzaXplIGFuZCB0aGUgcmVhbCB1c2FnZQorICAgICAgICBtYXhfZXJyb3IgPSAyMDQ4CisKKyAgICAgICAgIyBhbGxvY2F0ZSBvbmUgb2JqZWN0CisgICAgICAgIG9ial9zaXplID0gMTAyNCAqIDEwMjQKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBlYWtfc2l6ZSwgc2l6ZSkKKworICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplIC0gb2JqX3NpemUsIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwocGVha19zaXplIC0gc2l6ZSwgbWF4X2Vycm9yKQorCisgICAgICAgICMgZGVzdHJveSB0aGUgb2JqZWN0CisgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgc2l6ZTIsIHBlYWtfc2l6ZTIgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzaXplMiwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSAtIHNpemUyLCBvYmpfc2l6ZSAtIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGVha19zaXplMiwgcGVha19zaXplKQorCisgICAgICAgICMgY2xlYXJfdHJhY2VzKCkgbXVzdCByZXNldCB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgICAgICMgYWxsb2NhdGUgYW5vdGhlciBvYmplY3QKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisKKyAgICAgICAgIyBzdG9wKCkgYWxzbyByZXNldHMgdHJhY2VkIG1lbW9yeSBjb3VudGVycworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpLCAoMCwgMCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl90cmFjZXMoc2VsZik6CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKDEyMykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFjZWJhY2spCisKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgdHJhY2ViYWNrMiA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhY2ViYWNrMikKKworICAgIGRlZiB0ZXN0X2lzX3RyYWNpbmcoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSkKKworICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdChzZWxmKToKKyAgICAgICAgb2JqLCBzb3VyY2UgPSBhbGxvY2F0ZV9ieXRlcygxMjMpCisKKyAgICAgICAgIyB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKworICAgICAgICAjIHdyaXRlIG9uIGRpc2sKKyAgICAgICAgc25hcHNob3QuZHVtcChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIGxvYWQgZnJvbSBkaXNrCisgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgICAgICMgdHJhY2VtYWxsb2MgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QiKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3Rfc2F2ZV9hdHRyKHNlbGYpOgorICAgICAgICAjIHRha2UgYSBzbmFwc2hvdCB3aXRoIGEgbmV3IGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzbmFwc2hvdC50ZXN0X2F0dHIgPSAibmV3IgorICAgICAgICBzbmFwc2hvdC5kdW1wKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgICMgbG9hZCgpIHNob3VsZCByZWNyZWF0ZXMgdGhlIGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdC5sb2FkKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90Mi50ZXN0X2F0dHIsICJuZXciKQorCisgICAgZGVmIGZvcmtfY2hpbGQoc2VsZik6CisgICAgICAgIGlmIG5vdCB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICByZXR1cm4gMgorCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgaWYgdHJhY2ViYWNrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMworCisgICAgICAgICMgZXZlcnl0aGluZyBpcyBmaW5lCisgICAgICAgIHJldHVybiAwCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAnbmVlZCBvcy5mb3JrKCknKQorICAgIGRlZiB0ZXN0X2Zvcmsoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0cmFjZW1hbGxvYyBpcyBzdGlsbCB3b3JraW5nIGFmdGVyIGZvcmsKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICBleGl0Y29kZSA9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGl0Y29kZSA9IHNlbGYuZm9ya19jaGlsZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KGV4aXRjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGlkMiwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgICAgICBleGl0Y29kZSA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisKKworY2xhc3MgVGVzdFNuYXBzaG90KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gNDAwMAorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NuYXBzaG90KHNlbGYpOgorICAgICAgICByYXdfdHJhY2VzID0gWyg1LCAoKCdhLnB5JywgMiksKSldCisKKyAgICAgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdpc190cmFjaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1UcnVlKSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnZ2V0X3RyYWNlYmFja19saW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9NSkpCisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ19nZXRfdHJhY2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1yYXdfdHJhY2VzKSkKKworICAgICAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2ViYWNrX2xpbWl0LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc25hcHNob3QudHJhY2VzKSwgMSkKKyAgICAgICAgICAgIHRyYWNlID0gc25hcHNob3QudHJhY2VzWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnNpemUsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZS50cmFjZWJhY2spLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS50cmFjZWJhY2tbMF0uZmlsZW5hbWUsICdhLnB5JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UudHJhY2ViYWNrWzBdLmxpbmVubywgMikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl90cmFjZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgZmlsdGVyMSA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiKQorICAgICAgICBmaWx0ZXIyID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhLnB5IiwgMikKKyAgICAgICAgZmlsdGVyMyA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYS5weSIsIDUpCisKKyAgICAgICAgb3JpZ2luYWxfdHJhY2VzID0gbGlzdChzbmFwc2hvdC50cmFjZXMuX3RyYWNlcykKKworICAgICAgICAjIGV4Y2x1ZGUgYi5weQorICAgICAgICBzbmFwc2hvdDMgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKChmaWx0ZXIxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QzLnRyYWNlcy5fdHJhY2VzLCBbCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDcsICgoJzx1bmtub3duPicsIDApLCkpLAorICAgICAgICBdKQorCisgICAgICAgICMgZmlsdGVyX3RyYWNlcygpIG11c3Qgbm90IHRvdWNoIHRoZSBvcmlnaW5hbCBzbmFwc2hvdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90LnRyYWNlcy5fdHJhY2VzLCBvcmlnaW5hbF90cmFjZXMpCisKKyAgICAgICAgIyBvbmx5IGluY2x1ZGUgdHdvIGxpbmVzIG9mIGEucHkKKyAgICAgICAgc25hcHNob3Q0ID0gc25hcHNob3QzLmZpbHRlcl90cmFjZXMoKGZpbHRlcjIsIGZpbHRlcjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90NC50cmFjZXMuX3RyYWNlcywgWworICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIE5vIGZpbHRlcjoganVzdCBkdXBsaWNhdGUgdGhlIHNuYXBzaG90CisgICAgICAgIHNuYXBzaG90NSA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc25hcHNob3Q1LCBzbmFwc2hvdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzbmFwc2hvdDUudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3Q1LnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfbGluZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2xpbmVubygnPHVua25vd24+JywgMCkKKyAgICAgICAgdGJfYV8yID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDIpCisgICAgICAgIHRiX2FfNSA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCA1KQorICAgICAgICB0Yl9iXzEgPSB0cmFjZWJhY2tfbGluZW5vKCdiLnB5JywgMSkKKyAgICAgICAgdGJfY181NzggPSB0cmFjZWJhY2tfbGluZW5vKCdjLnB5JywgNTc4KQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUgYW5kIGxpbmUKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czEsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iXzEsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzIsIDMwLCAzKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzUsIDIsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUgYW5kIGxpbmUgKDIpCisgICAgICAgIHN0YXRzMiA9IHNuYXBzaG90Mi5zdGF0aXN0aWNzKCdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgNTAwMiwgMiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfY181NzgsIDQwMCwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlIGFuZCBsaW5lCisgICAgICAgIHN0YXRpc3RpY3MgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcywgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9hXzUsIDUwMDIsIDUwMDAsIDIsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9jXzU3OCwgNDAwLCA0MDAsIDEsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9iXzEsIDAsIC02NiwgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl8wLCAwLCAtNywgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9hXzIsIDMwLCAwLCAzLCAwKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2ZpbGUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19maWxlbmFtZSgnPHVua25vd24+JykKKyAgICAgICAgdGJfYSA9IHRyYWNlYmFja19maWxlbmFtZSgnYS5weScpCisgICAgICAgIHRiX2IgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2IucHknKQorICAgICAgICB0Yl9jID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdjLnB5JykKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlCisgICAgICAgIHN0YXRzMSA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czEsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYSwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUgKDIpCisgICAgICAgIHN0YXRzMiA9IHNuYXBzaG90Mi5zdGF0aXN0aWNzKCdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYSwgNTAzMiwgNSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYywgNDAwLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIGRpZmYgcGVyIGZpbGUKKyAgICAgICAgZGlmZiA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYSwgNTAzMiwgNTAwMCwgNSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2MsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYiwgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiXzAsIDAsIC03LCAwLCAtMSksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlCisgICAgICAgIHRiMSA9IHRyYWNlYmFjaygoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpCisgICAgICAgIHRiMiA9IHRyYWNlYmFjaygoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpCisgICAgICAgIHRiMyA9IHRyYWNlYmFjaygoJ2IucHknLCAxKSkKKyAgICAgICAgdGI0ID0gdHJhY2ViYWNrKCgnPHVua25vd24+JywgMCkpCisgICAgICAgIHN0YXRzMSA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIzLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIxLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGI0LCA3LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjIsIDIsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUgKDIpCisgICAgICAgIHRiNSA9IHRyYWNlYmFjaygoJ2MucHknLCA1NzgpKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygndHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjIsIDUwMDIsIDIpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiNSwgNDAwLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjEsIDMwLCAzKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIGRpZmYgcGVyIGZpbGUKKyAgICAgICAgZGlmZiA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAndHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiMiwgNTAwMiwgNTAwMCwgMiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiNSwgNDAwLCA0MDAsIDEsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjMsIDAsIC02NiwgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjQsIDAsIC03LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiMSwgMzAsIDAsIDMsIDApLAorICAgICAgICBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90LnN0YXRpc3RpY3MsICd0cmFjZWJhY2snLCBjdW11bGF0aXZlPVRydWUpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9jdW11bGF0aXZlKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJzx1bmtub3duPicpCisgICAgICAgIHRiX2EgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2EucHknKQorICAgICAgICB0Yl9iID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdiLnB5JykKKyAgICAgICAgdGJfYV8yID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDIpCisgICAgICAgIHRiX2FfNSA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCA1KQorICAgICAgICB0Yl9iXzEgPSB0cmFjZWJhY2tfbGluZW5vKCdiLnB5JywgMSkKKyAgICAgICAgdGJfYl80ID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDQpCisKKyAgICAgICAgIyBwZXIgZmlsZQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2ZpbGVuYW1lJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0cywgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2IsIDk4LCA1KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBwZXIgbGluZQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iXzEsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iXzQsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzIsIDMwLCAzKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzUsIDIsIDEpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfdHJhY2VfZm9ybWF0KHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRyYWNlID0gc25hcHNob3QudHJhY2VzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHRyYWNlKSwgJ2EucHk6MjogMTAgQicpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlLnRyYWNlYmFjaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0cmFjZWJhY2spLCAnYS5weToyJykKKyAgICAgICAgZnJhbWUgPSB0cmFjZWJhY2tbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZnJhbWUpLCAnYS5weToyJykKKworICAgIGRlZiB0ZXN0X3N0YXRpc3RpY19mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorICAgICAgICBzdGF0ID0gc3RhdHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc3RhdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2IucHk6MTogc2l6ZT02NiBCLCBjb3VudD0xLCBhdmVyYWdlPTY2IEInKQorCisgICAgZGVmIHRlc3Rfc3RhdGlzdGljX2RpZmZfZm9ybWF0KHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHN0YXRzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdsaW5lbm8nKQorICAgICAgICBzdGF0ID0gc3RhdHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc3RhdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2EucHk6NTogc2l6ZT01MDAyIEIgKCs1MDAwIEIpLCBjb3VudD0yICgrMSksIGF2ZXJhZ2U9MjUwMSBCJykKKworCisKK2NsYXNzIFRlc3RGaWx0ZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gMjA0OAorCisgICAgZGVmIHRlc3RfZmlsdGVyX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgdGVzdCBkZWZhdWx0IHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW5hbWVfcGF0dGVybiwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgRmFsc2UpCisKKyAgICAgICAgIyB0ZXN0IGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgInRlc3QucHkiLCAxMjMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW5hbWVfcGF0dGVybiwgInRlc3QucHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubGluZW5vLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBUcnVlKQorCisgICAgICAgICMgcGFyYW1ldGVycyBwYXNzZWQgYnkga2V5d29yZAorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKGluY2x1c2l2ZT1GYWxzZSwgZmlsZW5hbWVfcGF0dGVybj0idGVzdC5weSIsIGxpbmVubz0xMjMsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyByZWFkLW9ubHkgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBmLCAiZmlsZW5hbWVfcGF0dGVybiIsICJhYmMiKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoKHNlbGYpOgorICAgICAgICAjIGZpbHRlciB3aXRob3V0IGxpbmUgbnVtYmVyCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgICMgZmlsdGVyIHdpdGggbGluZSBudW1iZXIgPiAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgICMgZmlsdGVyIHdpdGggbGluZSBudW1iZXIgMAorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYWJjIiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZGVmIGZubWF0Y2goaW5jbHVzaXZlLCBmaWxlbmFtZSwgcGF0dGVybik6CisgICAgICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKGluY2x1c2l2ZSwgcGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBmLl9tYXRjaF9mcmFtZShmaWxlbmFtZSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChUcnVlLCAiYWJjIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goVHJ1ZSwgIjEyMzU2IiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goVHJ1ZSwgIjx1bmtub3duPiIsICJhYmMiKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goRmFsc2UsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKEZhbHNlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKEZhbHNlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lX2pva2VyKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChmaWxlbmFtZSwgcGF0dGVybik6CisgICAgICAgICAgICBmaWx0ZXIgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgcGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgICMgZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJycsICcqJykpCisKKyAgICAgICAgIyBubyAqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnZGVmJykpCisKKyAgICAgICAgIyBhKgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjJywgJ2EqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYWJjKicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdiKicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdhYmNkKicpKQorCisgICAgICAgICMgYSpiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSpjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmNkY3gnLCAnYSpjeCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYicsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNkY2UnLCAnYSpjeCcpKQorCisgICAgICAgICMgYSpiKmMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RlJywgJ2EqYyplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmNiZGVmZWcnLCAnYSpiZCplZycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RkJywgJ2EqYyplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjYmRlZmVmJywgJ2EqYmQqZWcnKSkKKworICAgICAgICAjIHJlcGxhY2UgLnB5YyBhbmQgLnB5byBzdWZmaXggd2l0aCAucHkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHljJywgJ2EucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHlvJywgJ2EucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHknLCAnYS5weWMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHknLCAnYS5weW8nKSkKKworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICAjIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYUJjRGUnLCAnQWIqZEUnKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHljJywgJ2EuUFknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLlBZQycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFknLCAnYS5weW8nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2FzZSBzZW5zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYUJDJywgJ0FCYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHljJywgJ2EuUFknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWU8nLCAnYS5weScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EuUFknLCAnYS5weW8nKSkKKworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICAjIG5vcm1hbGl6ZSBhbHRlcm5hdGUgc2VwYXJhdG9yICIvIiB0byB0aGUgc3RhbmRhcmQgc2VwYXJhdG9yICJcIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2InLCByJ2FcYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhXGInLCByJ2EvYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKHInYS9iL2MnLCByJ2FcYlxjJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSBzZXBhcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhXGInLCByJ2EvYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iXGMnLCByJ2FcYi9jJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaF90cmFjZShzZWxmKToKKyAgICAgICAgdDEgPSAoKCJhLnB5IiwgMiksICgiYi5weSIsIDMpKQorICAgICAgICB0MiA9ICgoImIucHkiLCA0KSwgKCJiLnB5IiwgNSkpCisgICAgICAgIHQzID0gKCgiYy5weSIsIDUpLCAoJzx1bmtub3duPicsIDApKQorICAgICAgICB1bmtub3duID0gKCgnPHVua25vd24+JywgMCksKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJiLnB5IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworCitjbGFzcyBUZXN0Q29tbWFuZExpbmUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgbm90IHRyYWNpbmcgYnkgZGVmYXVsdAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInRmFsc2UnKQorCisgICAgICAgICMgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbXVzdCBiZSBpZ25vcmVkIHdoZW4gLUUgb3B0aW9uIGlzCisgICAgICAgICMgcHJlc2VudAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidGYWxzZScpCisKKyAgICAgICAgIyB0cmFjaW5nIGF0IHN0YXJ0dXAKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OVFJBQ0VNQUxMT0M9JzEnKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInVHJ1ZScpCisKKyAgICAgICAgIyBzdGFydCBhbmQgc2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxMCcpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicxMCcpCisKKyAgICBkZWYgdGVzdF9lbnZfdmFyX2ludmFsaWQoc2VsZik6CisgICAgICAgIGZvciBuZnJhbWUgaW4gKC0xLCAwLCAyKiozMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCAncGFzcycsCisgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05UUkFDRU1BTExPQz1zdHIobmZyYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBmcmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIHhvcHRpb25zLCBuZnJhbWUgaW4gKAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYycsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTE1JywgMTUpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeG9wdGlvbnM9eG9wdGlvbnMsIG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1YJywgeG9wdGlvbnMsICctYycsIGNvZGUpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cihuZnJhbWUpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9uc19pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgMioqMzApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9ICgnLVgnLCAndHJhY2VtYWxsb2M9JXMnICUgbmZyYW1lLCAnLWMnLCAncGFzcycpCisgICAgICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJy1YIHRyYWNlbWFsbG9jPU5GUkFNRTogaW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgZnJhbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0VHJhY2VtYWxsb2NFbmFibGVkLAorICAgICAgICBUZXN0U25hcHNob3QsCisgICAgICAgIFRlc3RGaWx0ZXJzLAorICAgICAgICBUZXN0Q29tbWFuZExpbmUsCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQppbmRleCAzZWU0YzZiLi5lYzEwNzUyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKQEAgLTIsNiArMiw3IEBACiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl93aXRoX2xvY2FsZQogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKQEAgLTEwNzcsOSArMTA3OCwxOSBAQAogICAgICAgICBuczIgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQogICAgICAgICBuczIueCA9ICJzcGFtIgogICAgICAgICBuczIuX3kgPSA1CisgICAgICAgIG5hbWUgPSAibmFtZXNwYWNlIgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLCAibmFtZXNwYWNlKHc9MywgeD0xLCB5PTIpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksICJuYW1lc3BhY2UoX3k9NSwgeD0nc3BhbScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJ7bmFtZX0odz0zLCB4PTEsIHk9MikiLmZvcm1hdChuYW1lPW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIntuYW1lfShfeT01LCB4PSdzcGFtJykiLmZvcm1hdChuYW1lPW5hbWUpKQorCisgICAgZGVmIHRlc3RfZXF1YWwoc2VsZik6CisgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSh4PTEpCisgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIG5zMi54ID0gMQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZXMuU2ltcGxlTmFtZXNwYWNlKCksIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zMSwgbnMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCiAKICAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CiAgICAgICAgIG5zMSA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShhPTEsIGI9MikKQEAgLTExMTcsMTEgKzExMjgsMTIgQEAKICAgICAgICAgbnMxLnNwYW0gPSBuczEKICAgICAgICAgbnMyLnNwYW0gPSBuczMKICAgICAgICAgbnMzLnNwYW0gPSBuczIKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCisgICAgICAgIHJlcHIxID0gIntuYW1lfShjPSdjb29raWUnLCBzcGFtPXtuYW1lfSguLi4pKSIuZm9ybWF0KG5hbWU9bmFtZSkKKyAgICAgICAgcmVwcjIgPSAie25hbWV9KHNwYW09e25hbWV9KHNwYW09e25hbWV9KC4uLiksIHg9MSkpIi5mb3JtYXQobmFtZT1uYW1lKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2UoYz0nY29va2llJywgc3BhbT1uYW1lc3BhY2UoLi4uKSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKHNwYW09bmFtZXNwYWNlKC4uLiksIHg9MSkpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksIHJlcHIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgcmVwcjIpCiAKICAgICBkZWYgdGVzdF9hc19kaWN0KHNlbGYpOgogICAgICAgICBucyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShzcGFtPSdzcGFtc3BhbXNwYW0nKQpAQCAtMTE0NCw2ICsxMTU2LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzcGFtKSwgU3BhbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHNwYW0pLCB7J2hhbSc6IDgsICdlZ2dzJzogOX0pCiAKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGJyZWFrZmFzdD0ic3BhbSIsIGx1bmNoPSJzcGFtIikKKworICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBuYW1lID0gInByb3RvY29sIHt9Ii5mb3JtYXQocHJvdG9jb2wpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbnNfcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhucywgcHJvdG9jb2wpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHBuYW1lKSBmcm9tIGUKKyAgICAgICAgICAgIG5zX3JvdW5kdHJpcCA9IHBpY2tsZS5sb2Fkcyhuc19waWNrbGVkKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBuc19yb3VuZHRyaXAsIHBuYW1lKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggMmU2Mzc0NS4uNTliZGU3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXN0ZGF0YSA9IHN1cHBvcnQub3Blbl91cmxyZXNvdXJjZSh1cmwsIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyB1cmwpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggNTAyZDM5My4uNTc1YzRhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtNyw2ICs3LDcgQEAKICIiIiMiCiBpbXBvcnQgX3N0cmluZwogaW1wb3J0IGNvZGVjcworaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMSw2ICszMiwxNiBAQAogICAgICAgICByZXR1cm4gTm9uZQogY29kZWNzLnJlZ2lzdGVyKHNlYXJjaF9mdW5jdGlvbikKIAorZGVmIGR1cGxpY2F0ZV9zdHJpbmcodGV4dCk6CisgICAgIiIiCisgICAgVHJ5IHRvIGdldCBhIGZyZXNoIGNsb25lIG9mIHRoZSBzcGVjaWZpZWQgdGV4dDoKKyAgICBuZXcgb2JqZWN0IHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMS4KKworICAgIFRoaXMgaXMgYSBiZXN0LWVmZm9ydDogbGF0aW4xIHNpbmdsZSBsZXR0ZXJzIGFuZCB0aGUgZW1wdHkKKyAgICBzdHJpbmcgKCcnKSBhcmUgc2luZ2xldG9ucyBhbmQgY2Fubm90IGJlIGNsb25lZC4KKyAgICAiIiIKKyAgICByZXR1cm4gdGV4dC5lbmNvZGUoKS5kZWNvZGUoKQorCiBjbGFzcyBVbmljb2RlVGVzdChzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKQEAgLTg2MywxMSArODc0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6ZH0nLmZvcm1hdChHKCdkYXRhJykpLCAnRyhkYXRhKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ3N0cmluZyBpcyBkYXRhJykKIAotICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCi0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTBzfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj4xNXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJyBzdHJpbmcgaXMgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMH0nLmZvcm1hdCwgRSgnZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDpeMTBzfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOj4xNXN9Jy5mb3JtYXQsIEcoJ2RhdGEnKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LApAQCAtOTAzLDcgKzkxMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezAufSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAufSIuZm9ybWF0LCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezBbfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbfSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbfSIuZm9ybWF0LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgInswXX0iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLltdfSIuZm9ybWF0LCAwKQpAQCAtOTU1LDYgKzk2NCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICcnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe31dfSIuZm9ybWF0KHsie30iOiA1fSksICI1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3tdfSIuZm9ybWF0KHsieyIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W31dfSIuZm9ybWF0KHsifSIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W1tdfSIuZm9ybWF0KHsiWyIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7WyFdfSIuZm9ybWF0KHsiISIgOiAiYSJ9KSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAie2F7fWJ9Ii5mb3JtYXQsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAie2F7Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7W30iLmZvcm1hdCwgNDIpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMHh7OjB7OmR9WH0iLmZvcm1hdCgweDAsMTYpLCAiMHgwMDAwMDAwMDAwMDAwMDAwIikKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdF9tYXAoc2VsZik6CkBAIC0xMTA4LDYgKzExMjYsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4xcycgJSAiYVx4ZTlcdTIwYWMiLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUuMnMnICUgImFceGU5XHUyMGFjIiwgJ2FceGU5JykKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTg3ODAKKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQsIGVudW0uRW51bSk6CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICBjbGFzcyBJbnQoZW51bS5JbnRFbnVtKToKKyAgICAgICAgICAgIElERVMgPSAxNQorICAgICAgICBjbGFzcyBTdHIoc3RyLCBlbnVtLkVudW0pOgorICAgICAgICAgICAgQUJDID0gJ2FiYycKKyAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgZm9ybWF0dGluZyBzdHJpbmdzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcyIgJSAoU3RyLkFCQywgU3RyLkFCQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMsICVkLCAlaSwgJXUsICVmLCAlNS4yZiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKFN0ci5BQkMsIFN0ci5BQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSW50LklERVMsIEludC5JREVTLCBJbnQuSURFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5QSSwgRmxvYXQuUEkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDLCAxNSwgMTUsIDE1LCAzLjE0MTU5MywgIDMuMTQnKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOlN0ci5BQkN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5TdHIuQUJDLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5JbnQuSURFUy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWkuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylkLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pdS4uLicgJSB7J2Zvbyc6SW50LklERVMsICdkZWYnOkZsb2F0LlBJfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylmLi4uJyAlIHsnZm9vJzpGbG9hdC5QSSwnZGVmJzoxMjN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4zLjE0MTU5My4uLicpCisKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWApAQCAtMTc4MywxMCArMTgzMywxMCBAQAogICAgICAgICAjIDAtMTI3CiAgICAgICAgIHMgPSBieXRlcyhyYW5nZSgxMjgpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAotICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywgJ2NwMjczJywKICAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCiAgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzMnLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsICdpc284ODU5XzYnLAogICAgICAgICAgICAgJ2lzbzg4NTlfNycsICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLApAQCAtMTgxMSwxMCArMTg2MSwxMCBAQAogICAgICAgICAjIDEyOC0yNTUKICAgICAgICAgcyA9IGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKLSAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsICdjcDI3MycsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3AxMTI1JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsCiAgICAgICAgICAgICAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKQEAgLTIwMDUsOSArMjA1NSwxMCBAQAogICAgICMgVGVzdCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpCiAgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKLSAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IChweXRob25hcGksIHB5X29iamVjdCwKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0ICgKKyAgICAgICAgICAgIHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBzaXplb2YsCiAgICAgICAgICAgICBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nLCBjX3NzaXplX3QsCi0gICAgICAgICAgICBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nLCBjX3NpemVfdCkKKyAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90LCBjX3ZvaWRfcCkKICAgICAgICAgbmFtZSA9ICJQeVVuaWNvZGVfRnJvbUZvcm1hdCIKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0ID0gZ2V0YXR0cihweXRob25hcGksIG5hbWUpCiAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUZvcm1hdC5yZXN0eXBlID0gcHlfb2JqZWN0CkBAIC0yMDE4LDkgKzIwNjksMTMgQEAKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmNhcmdzKQogCisgICAgICAgIGRlZiBjaGVja19mb3JtYXQoZXhwZWN0ZWQsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCB0ZXh0KQorCiAgICAgICAgICMgYXNjaWkgZm9ybWF0LCBub24tYXNjaWkgYXJndW1lbnQKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInYXNjaWlceDdmPSVVJywgJ3VuaWNvZGVceGU5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnYXNjaWlceDdmPXVuaWNvZGVceGU5JykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknLAorICAgICAgICAgICAgICAgICAgICAgYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQogCiAgICAgICAgICMgbm9uLWFzY2lpIGZvcm1hdCwgYXNjaWkgYXJndW1lbnQ6IGVuc3VyZSB0aGF0IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpCiAgICAgICAgICMgcmFpc2VzIGFuIGVycm9yCkBAIC0yMDMwLDY0ICsyMDg1LDIwNSBAQAogICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQsIGIndW5pY29kZVx4ZTk9JXMnLCAnYXNjaWknKQogCiAgICAgICAgICMgdGVzdCAiJWMiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYycsIGNfaW50KDB4YWJjZCkpLCAnXHVhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMGZmZmYpKSwgJ1xVMDAxMGZmZmYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1x1YWJjZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyVjJywgY19pbnQoMHhhYmNkKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcVTAwMTBmZmZmJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweDEwZmZmZikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMTAwMDApKQogICAgICAgICAjIElzc3VlICMxODE4MwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSksCi0gICAgICAgICAgICAnXFUwMDAxMDAwMFxVMDAxMDAwMDAnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAwMTAwMDBcVTAwMTAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMlYycsIGNfaW50KDB4MTAwMDApLCBjX2ludCgweDEwMDAwMCkpCiAKICAgICAgICAgIyB0ZXN0ICIlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJXMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ1slJV0nKSwgJ1slXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJSVzJywgYidhYmMnKSwgJyVhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdbJV0nLAorICAgICAgICAgICAgICAgICAgICAgYidbJSVdJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUlcycsIGInYWJjJykKKworICAgICAgICAjIHRydW5jYXRlZCBzdHJpbmcKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNzJywgYidhYmNkZWYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FiY1tcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjVzJywgJ2FiY1tcdTIwYWNdJy5lbmNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXFx1MjBhY0FCQyciLAorICAgICAgICAgICAgICAgICAgICAgYiclQScsICdcdTIwYWNBQkMnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMCIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNUEnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVSJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1x1MjBhY0EiLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNSJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNTJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNVJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNWJywgJ1x1MjBhY0FCQ0RFRicsIE5vbmUpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNVYnLCBOb25lLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorCisgICAgICAgICMgZm9sbG93aW5nIHRlc3RzIGNvbWVzIGZyb20gIzczMzAKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUworICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1UycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlMnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yUycsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVIKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgICdhYmMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lOFInLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4zUicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAnYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjNSJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlQQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4QScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM0EnLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVzCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMnMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMnMnLCBiJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlUnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVYKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgJ2FiYycsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgMTIzIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCBOb25lLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0xMiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIDEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVicsIE5vbmUsIGInMTIzJykKIAogICAgICAgICAjIHRlc3QgaW50ZWdlciBmb3JtYXRzICglaSwgJWQsICV1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAzaScsIGNfaW50KDEwKSksICcwMTAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAuNGknLCBjX2ludCgxMCkpLCAnMDAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclaScsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxpJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemknLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAzaScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAuNGknLCBjX2ludCgxMCkpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVpJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsaScsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6aScsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWQnLCBjX2ludCgtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsZCcsIGNfbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXpkJywgY19zc2l6ZV90KC0xMjMpKSwgJy0xMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclZCcsIGNfaW50KC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGQnLCBjX2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclemQnLCBjX3NzaXplX3QoLTEyMykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV1JywgY191aW50KDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsdScsIGNfdWxvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsdScsIGNfdWxvbmdsb25nKDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6dScsIGNfc2l6ZV90KDEyMykpLCAnMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYicldScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsdScsIGNfdWxvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclenUnLCBjX3NpemVfdCgxMjMpKQorCisgICAgICAgICMgdGVzdCBsb25nIG91dHB1dAorICAgICAgICBtaW5fbG9uZ2xvbmcgPSAtKDIgKiogKDggKiBzaXplb2YoY19sb25nbG9uZykgLSAxKSkKKyAgICAgICAgbWF4X2xvbmdsb25nID0gLW1pbl9sb25nbG9uZyAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtaW5fbG9uZ2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxkJywgY19sb25nbG9uZyhtaW5fbG9uZ2xvbmcpKQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1heF9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1heF9sb25nbG9uZykpCisgICAgICAgIG1heF91bG9uZ2xvbmcgPSAyICoqICg4ICogc2l6ZW9mKGNfdWxvbmdsb25nKSkgLSAxCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X3Vsb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZyhtYXhfdWxvbmdsb25nKSkKKyAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclcCcsIGNfdm9pZF9wKC0xKSkKKworICAgICAgICAjIHRlc3QgcGFkZGluZyAod2lkdGggYW5kL29yIHByZWNpc2lvbikKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUuMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwaScsIGNfaW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwdScsIGNfdWludCgxMjMpKQorCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTAxMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKICAgICAgICAgIyB0ZXN0ICVBCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgciIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIikKKyAgICAgICAgY2hlY2tfZm9ybWF0KHIiJUE6J2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCiAKICAgICAgICAgIyB0ZXN0ICVWCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmMnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgJ2FiYycsIGIneHl6JykKIAogICAgICAgICAjIFRlc3Qgc3RyaW5nIGRlY29kZSBmcm9tIHBhcmFtZXRlciBvZiAlcyB1c2luZyB1dGYtOC4KICAgICAgICAgIyBiJ1x4ZTRceGJhXHhiYVx4ZTZceGIwXHg5MScgaXMgdXRmLTggZW5jb2RlZCBieXRlIHNlcXVlbmNlIG9mCiAgICAgICAgICMgJ1x1NGViYVx1NmMxMScKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAncmVwcj1cdTRlYmFcdTZjMTEnKQorICAgICAgICBjaGVja19mb3JtYXQoJ3JlcHI9XHU0ZWJhXHU2YzExJywKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKIAogICAgICAgICAjVGVzdCByZXBsYWNlIGVycm9yIGhhbmRsZXIuCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiY1x1ZmZmZCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmNcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidhYmNceGZmJykKIAogICAgICAgICAjIG5vdCBzdXBwb3J0ZWQ6IGNvcHkgdGhlIHJhdyBmb3JtYXQgc3RyaW5nLiB0aGVzZSB0ZXN0cyBhcmUganVzdCBoZXJlCiAgICAgICAgICMgdG8gY2hlY2sgZm9yIGNyYXNocyBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIHNwZWNpZmljYXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMSVzJywgYidhYmMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxYWJjJyksICclMWFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclK2knLCBjX2ludCgxMCkpLCAnJStpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUuJXMnLCBiJ2FiYycpLCAnJS4lcycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMSVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUxYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTFhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUraScsCisgICAgICAgICAgICAgICAgICAgICBiJyUraScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclLiVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS4lcycsIGInYWJjJykKIAogICAgICMgVGVzdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpCiAgICAgZGVmIHRlc3RfYXN3aWRlY2hhcihzZWxmKToKQEAgLTIyMTEsNiArMjQwNyw4MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCiAKIGNsYXNzIFN0cmluZ01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9wYXJzZXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA5OWFhMDAzLi43MDdiMzBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIxLDcgKzIxLDcgQEAKIGNsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnYmY3YTc4ZjFhNTMyNDIxYjUwMzM2MDAxMDJlMjNhOTIwNDRkYmJhOScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2U3NGU4NzhkZTcxYjZlNzgwZmZhYzI3MTc4NWMzY2I1OGY2MjUxZjMnCiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpAQCAtODAsNyArODAsNyBAQAogY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMTdmZTJmMTJiNzg4ZTRmZmY1NDc5YjQ2OWM0NDA0YmI2ZWNmODQxZicKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2YwYjc0ZDI2Nzc2MzMxY2M3YmRjM2E0Njk4ZjAzN2Q3M2YyY2VlMmInCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggN2EzNGEwNS4uOTRmNjQwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTE2LDYgKzE2LDcgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKIGltcG9ydCBjb2xsZWN0aW9ucwogCisKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCiAgICAgaGV4X3JlcHIgPSBoZXgob3JkKGNoYXIpKVsyOl0udXBwZXIoKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDQwMSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI0NiwxMiArMjQ3LDEyIEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSAzMDIgRm91bmQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNjYsMTkgKzI2NywyMCBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBPU0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQogICAgICAgICAjIGRhdGEuICgjMTY4MDIzMCkKICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX2xvY2FsZmlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTA4MzYKLSAgICAgICAgIyAzLjMgLSBVUkxFcnJvciBpcyBub3QgY2FwdHVyZWQsIGV4cGxpY2l0IElPRXJyb3IgaXMgcmFpc2VkLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2ZpbGU6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZmlsZV9ub3RleGlzdHMoc2VsZik6CiAgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQpAQCAtMjkxLDIwICsyOTMsMjEgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpOgogICAgICAgICAgICAgdXJsb3Blbih0bXBfZmlsZXVybCkKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub2hvc3Qoc2VsZik6CiAgICAgICAgIHRlc3RfZnRwX3VybCA9ICdmdHA6Ly8vcGF0aCcKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKHRlc3RfZnRwX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub25leGlzdGluZyhzZWxmKToKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogCiAgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CkBAIC0zNDEsNiArMzQ0LDc5IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIoKQogCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC0xMjkxLDYgKzEzNjcsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCAzM2Y5MGY0Li5kYmQxYzYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCiAjIHByb3h5IGNvbmZpZyBkYXRhIHN0cnVjdHVyZSBidXQgaXMgdGVzdGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcHJveHlfYnlwYXNzX21hY29zeF9zeXNjb25mCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCB1cmxsaWIuZXJyb3IKIAogIyBYWFgKQEAgLTExOCw2ICsxMTksMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMjgzLDYgKzI5Myw3IEBACiAgICAgICAgIHNlbGYucmVxX2hlYWRlcnMgPSBbXQogICAgICAgICBzZWxmLmRhdGEgPSBOb25lCiAgICAgICAgIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVycyA9IEZhbHNlCisgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGhvc3QsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKQEAgLTMxMCw4ICszMjEsNyBAQAogICAgICAgICBpZiBib2R5OgogICAgICAgICAgICAgc2VsZi5kYXRhID0gYm9keQogICAgICAgICBpZiBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc29ja2V0Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgogICAgICAgICByZXR1cm4gTW9ja0hUVFBSZXNwb25zZShNb2NrRmlsZSgpLCB7fSwgMjAwLCAiT0siKQogCkBAIC01OTYsMjcgKzYwNiw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3NbMV0gaXMgTm9uZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkpCiAKLSAgICBkZWYgdGVzdF9tZXRob2RfZGVwcmVjYXRpb25zKHNlbGYpOgotICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKLQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5hZGRfZGF0YSgiZGF0YSIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuaGFzX2RhdGEoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfaG9zdCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9zZWxlY3RvcigpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmlzX3VudmVyaWZpYWJsZSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfdHlwZSgpCi0KLQogZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBwYXRoLmVuY29kZSgidXRmLTgiKQpAQCAtODExLDcgKzgwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkZvbyIsICJiYXIiKSwgKCJTcGFtIiwgImVnZ3MiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuZGF0YSwgZGF0YSkKIAotICAgICAgICAjIGNoZWNrIHNvY2tldC5lcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKKyAgICAgICAgIyBjaGVjayBPU0Vycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgogICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCiAKQEAgLTkxNiw2ICs5MDUsMzYgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX3NldHRlcihzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdG8gZW5zdXJlIHRoYXQgY29tcG9uZW50cyBhcmUgc2V0IGNvcnJlY3RseSBhZnRlciBzZXR0aW5nIHRoZQorICAgICAgICAjIGZ1bGxfdXJsIG9mIGEgUmVxdWVzdCBvYmplY3QKKworICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXImc3BhbT1lZ2dzI2Jhc2gnLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIF0KKworICAgICAgICAjIHRlc3RpbmcgYSByZXVzYWJsZSByZXF1ZXN0IGluc3RhbmNlLCBidXQgdGhlIHVybCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyByZXF1aXJlZCwgc28ganVzdCB1c2UgYSBkdW1teSBvbmUgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHIuZnVsbF91cmwgPSB1cmwKKyAgICAgICAgICAgIHBhcnNlZCA9IHVybHBhcnNlKHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldF9mdWxsX3VybCgpLCB1cmwpCisgICAgICAgICAgICAjIGZ1bGxfdXJsIHNldHRlciB1c2VzIHNwbGl0dGFnIHRvIHNwbGl0IGludG8gY29tcG9uZW50cy4KKyAgICAgICAgICAgICMgc3BsaXR0YWcgc2V0cyB0aGUgZnJhZ21lbnQgYXMgTm9uZSB3aGlsZSB1cmxwYXJzZSBzZXRzIGl0IHRvICcnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZnJhZ21lbnQgb3IgJycsIHBhcnNlZC5mcmFnbWVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2Uoci5nZXRfZnVsbF91cmwoKSkucXVlcnksIHBhcnNlZC5xdWVyeSkKKworICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX2RlbGV0ZXIoc2VsZik6CisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgZGVsIHIuZnVsbF91cmwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mdWxsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNlbGVjdG9yLCAnJykKKwogICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgogICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CiAgICAgICAgICMgc3RhcnQgd2l0aCcvJwpAQCAtMTQxNSw2ICsxNDM0LDIxIEBACiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15T3RoZXJIVFRQSGFuZGxlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIG5ldHdvcmsgYWNjZXNzJykKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDY0KHNlbGYpOgorICAgICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LmRhdGEpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEyMzQ1Njc4OTAiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMzQ1Njc4OTAiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEwIiwgcmVxdWVzdC5nZXRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKQorCiAgICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIElzc3VlIDEzMjExIHJldmVhbHMgdGhhdCBIVFRQRXJyb3IgZGlkbid0IGltcGxlbWVudCB0aGUgVVJMRXJyb3IKQEAgLTE0MjYsMjMgKzE0NjAsMzEgQEAKICAgICAgICAgZXJyID0gdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIGNvZGUsIG1zZywgaGRycywgZnApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5yZWFzb24sICdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGRycycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZHJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGVhZGVycycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZWFkZXJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKICAgICAgICAgZXhwZWN0ZWRfZXJybXNnID0gJ0hUVFAgRXJyb3IgJXM6ICVzJyAlIChlcnIuY29kZSwgZXJyLm1zZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgZXhwZWN0ZWRfZXJybXNnKQogCi0KIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgUHV0UmVxdWVzdChSZXF1ZXN0KToKKyAgICAgICAgbWV0aG9kPSdQVVQnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKICAgICAgICAgc2VsZi5wb3N0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17IlgtVGVzdCI6ICJ0ZXN0In0pCisgICAgICAgIHNlbGYuaGVhZCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsIG1ldGhvZD0nSEVBRCcpCisgICAgICAgIHNlbGYucHV0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQorICAgICAgICBzZWxmLmZvcmNlX3Bvc3QgPSBzZWxmLlB1dFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCisgICAgICAgICAgICBtZXRob2Q9IlBPU1QiKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5wb3N0LmdldF9tZXRob2QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJIRUFEIiwgc2VsZi5oZWFkLmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUFVUIiwgc2VsZi5wdXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5mb3JjZV9wb3N0LmdldF9tZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X2RhdGEoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5nZXQuZGF0YSkKQEAgLTE0NTEsNiArMTQ5MywyNSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuZGF0YSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKIAorICAgICMgaXNzdWUgMTY0NjQKKyAgICAjIGlmIHdlIGNoYW5nZSBkYXRhIHdlIG5lZWQgdG8gcmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcgorICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gInNwYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKKyAgICAjIGlzc3VlIDE3NDg1IHNhbWUgZm9yIGRlbGV0aW5nIGRhdGEuCisgICAgZGVmIHRlc3RfZGVsZXRpbmdfZGF0YV9zaG91bGRfcmVtb3ZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gJ2ZvbycKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgZGVsIHNlbGYuZ2V0LmRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKwogICAgIGRlZiB0ZXN0X2dldF9mdWxsX3VybChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldC5nZXRfZnVsbF91cmwoKSkKQEAgLTE0OTIsMjEgKzE1NTMsMTMgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCB1cmwpCiAKLSAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlX2NhbGwoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBJc3N1ZSAxNTcwMSAtIEhUVFBFcnJvciBpbnRlcmZhY2UgaGFzIGluZm8gbWV0aG9kIGF2YWlsYWJsZSBmcm9tIFVSTEVycm9yCi0gICAgICAgICIiIgotICAgICAgICBlcnIgPSB1cmxsaWIucmVxdWVzdC5IVFRQRXJyb3IobXNnPSJzb21ldGhpbmcgYmFkIGhhcHBlbmVkIiwgdXJsPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU9Tm9uZSwgaGRycz0nQ29udGVudC1MZW5ndGg6NDInLCBmcD1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdyZWFzb24nKSkKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAncmVhc29uJykKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAnaW5mbycpCi0gICAgICAgIGFzc2VydCBjYWxsYWJsZShlcnIuaW5mbykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXJyLmluZm8oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ2Vyci5pbmZvIGNhbGwgZmFpbGVkLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmluZm8oKSwgIkNvbnRlbnQtTGVuZ3RoOjQyIikKKyAgICBkZWYgdGVzdF91cmxfZnVsbHVybF9nZXRfZnVsbF91cmwoc2VsZik6CisgICAgICAgIHVybHMgPSBbJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgICAgICdodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXJsbGliMi5odG1sI09LJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy5weXRob24ub3JnLz9xcz1xdWVyeSNmcmFnbWVudD10cnVlJyBdCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2Z1bGxfdXJsKCksIHJlcS5mdWxsX3VybCkKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggOTExMmU1MC4uMDgyNTBjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtOSw3ICs5LDEwIEBACiBpbXBvcnQgaGFzaGxpYgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCi0KK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQogCiBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdsb2NhbGhvc3QnCkBAIC0xNyw2ICsyMCw3IEBACiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2Zha2Vob3N0bmFtZScKIENFUlRfZmFrZWhvc3RuYW1lID0gb3MucGF0aC5qb2luKGhlcmUsICdrZXljZXJ0Mi5wZW0nKQogCisKICMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKIAogY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgpAQCAtMzg5LDE0ICszOTMsMTQgQEAKICAgICAgICAgaGFuZGxlci5wb3J0ID0gcG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCi0gICAgZGVmIHN0YXJ0X2h0dHBzX3NlcnZlcihzZWxmLCByZXNwb25zZXM9Tm9uZSwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpOgorICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIodXJsbGliLnJlcXVlc3QsICdIVFRQU0hhbmRsZXInKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3NzbCBzdXBwb3J0IHJlcXVpcmVkJykKICAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgogICAgICAgICBpZiByZXNwb25zZXMgaXMgTm9uZToKICAgICAgICAgICAgIHJlc3BvbnNlcyA9IFsoMjAwLCBbXSwgYiJ3ZSBjYXJlIGEgYml0IildCiAgICAgICAgIGhhbmRsZXIgPSBHZXRSZXF1ZXN0SGFuZGxlcihyZXNwb25zZXMpCi0gICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIpCisgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGhhbmRsZXJfY2xhc3M9aGFuZGxlciwgKiprd2FyZ3MpCiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHNlcnZlci5wb3J0CiAgICAgICAgIHJldHVybiBoYW5kbGVyCiAKQEAgLTQ4Niw2ICs0OTAsMjEgQEAKICAgICAgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkZWZhdWx0PVRydWUpCiAKKyAgICBkZWYgdGVzdF9odHRwc19zbmkoc2VsZik6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3NsIG1vZHVsZSByZXF1aXJlZCIpCisgICAgICAgIGlmIG5vdCBzc2wuSEFTX1NOSToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNOSSBzdXBwb3J0IHJlcXVpcmVkIGluIE9wZW5TU0wiKQorICAgICAgICBzbmlfbmFtZSA9IE5vbmUKKyAgICAgICAgZGVmIGNiX3NuaShzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICBub25sb2NhbCBzbmlfbmFtZQorICAgICAgICAgICAgc25pX25hbWUgPSBzZXJ2ZXJfbmFtZQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3NuaSkKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpCisgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuaV9uYW1lLCAibG9jYWxob3N0IikKKwogICAgIGRlZiB0ZXN0X3NlbmRpbmdfaGVhZGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKCkKICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL2xvY2FsaG9zdDolcy8iICUgaGFuZGxlci5wb3J0LApAQCAtNTMyLDcgKzU1MSw3IEBACiAgICAgICAgICMgc28gd2UgcnVuIHRoZSB0ZXN0IG9ubHkgd2hlbiAtdW5ldHdvcmsvLXVhbGwgaXMgc3BlY2lmaWVkIHRvCiAgICAgICAgICMgbWl0aWdhdGUgdGhlIHByb2JsZW0gYSBiaXQgKHNlZSAjMTc1NjQpCiAgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdpdmVuIHRoYXQgYm90aCBWZXJpU2lnbiBhbmQgdmFyaW91cyBJU1BzIGhhdmUgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgcGFzdCBvciBhcmUgcHJlc2VudGx5IGhpamFja2luZyB2YXJpb3VzIGludmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gbmFtZSByZXF1ZXN0cyBpbiBhbiBhdHRlbXB0IHRvIGJvb3N0IHRyYWZmaWMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCA3ZjNjOTNhLi5mYmEzY2VhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC0xNjQsNiArMTY0LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI2dsb3NzYXJ5IikKIAorICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3VybF93aXRoZnJhZyhzZWxmKToKKyAgICAgICAgcmVkaXJlY3RfdXJsX3dpdGhfZnJhZyA9ICJodHRwOi8vYml0bHkuY29tL3VybGxpYnJlZGlyZWN0dGVzdCIKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZWRpcmVjdF91cmxfd2l0aF9mcmFnKToKKyAgICAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QocmVkaXJlY3RfdXJsX3dpdGhfZnJhZykKKyAgICAgICAgICAgIHJlcyA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9nbG9zc2FyeS5odG1sI3Rlcm0tZ2xvYmFsLWludGVycHJldGVyLWxvY2siKQorCiAgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CkBAIC0yMTYsNyArMjI0LDcgQEAKICAgICAgICAgICAgICAgICBkZWJ1Zyh1cmwpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmID0gdXJsb3Blbih1cmwsIHJlcSwgVElNRU9VVCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKQEAgLTMzMCwzNSArMzM4LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJyZXF1aXJlcyBTU0wgc3VwcG9ydCIpCi1jbGFzcyBIVFRQU1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NuaShzZWxmKToKLSAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBkaXNhYmxlZCAtIHRlc3Qgc2VydmVyIG5lZWRlZCIpCi0gICAgICAgICMgQ2hlY2tzIHRoYXQgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiB3b3JrcywgaWYgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAgICAjIE9wZW5TU0wgbGlua2VkIHRvLgotICAgICAgICAjIFRoZSBzc2wgbW9kdWxlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgU05JLAotICAgICAgICAjIHNvIHdlIHJlbHkgb24gYSB0aGlyZC1wYXJ0eSB0ZXN0IHNpdGUuCi0gICAgICAgIGV4cGVjdF9zbmkgPSBzc2wuSEFTX1NOSQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJYWFgiKToKLSAgICAgICAgICAgIHUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJYWFgiKQotICAgICAgICAgICAgY29udGVudHMgPSB1LnJlYWRhbGwoKQotICAgICAgICAgICAgaWYgZXhwZWN0X3NuaToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBdXRoVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlck5ldHdvcmtUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CmluZGV4IDIwZWZjYTYuLmI2ODg4ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CkBAIC0xMjQsMTYgKzEyNCwxNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2l0aCBzb21lIG92ZXJ6ZWFsb3VzIEROUyBwcm92aWRlcnMgc3VjaCBhcyBPcGVuRE5TCiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBzaG91bGQgbm90IHJlc29sdmUgZm9yIHRlc3QgdG8gd29yayIgJSBib2d1c19kb21haW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBoaWdoamFja2luZyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24gc2l0ZS4gIFRoaXMgdGVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHB1cnBvc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgdXJsbGliLnVybG9wZW4sICJodHRwOi8vd3d3LnNhZGZsa2pzYXNhZGYuY29tLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisgICAgICAgIGZhaWx1cmVfZXhwbGFuYXRpb24gPSAoJ29wZW5pbmcgYW4gaW52YWxpZCBVUkwgZGlkIG5vdCByYWlzZSBPU0Vycm9yOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbiBiZSBjYXVzZWQgYnkgYSBicm9rZW4gRE5TIHNlcnZlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhlLmcuIHJldHVybnMgNDA0IG9yIGhpamFja3MgcGFnZSknKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1mYWlsdXJlX2V4cGxhbmF0aW9uKToKKyAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQgaGlnaGphY2tpbmcKKyAgICAgICAgICAgICMgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0byBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93bgorICAgICAgICAgICAgIyBzaXRlLiAgVGhpcyB0ZXN0IHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAorICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQgcHVycG9zZS4KKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKIAogCiBjbGFzcyB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQppbmRleCAzNzhhNDI3Li5jOTM4ZjA5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKQEAgLTg0Nyw2ICs4NDcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnODYzLTEyMzQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCiAKKyAgICBkZWYgdGVzdF91bndyYXAoc2VsZik6CisgICAgICAgIHVybCA9IHVybGxpYi5wYXJzZS51bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ3R5cGU6Ly9ob3N0L3BhdGgnKQorCisgICAgZGVmIHRlc3RfUXVvdGVyX3JlcHIoc2VsZik6CisgICAgICAgIHF1b3RlciA9IHVybGxpYi5wYXJzZS5RdW90ZXIodXJsbGliLnBhcnNlLl9BTFdBWVNfU0FGRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUXVvdGVyJywgcmVwcihxdW90ZXIpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVcmxQYXJzZVRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggMTM3YzQ0NS4uMmNhOTkyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC00NSw3ICs0NSw4IEBACiAgICAgICAgICMgVGVzdCBfX3JlcHJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1MCksIHN0cihkMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MSksIHJlcHIoZDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTIpLCByZXByKGQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKHUyKSwgKCJ7J29uZSc6IDEsICd0d28nOiAyfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyd0d28nOiAyLCAnb25lJzogMX0iKSkKIAogICAgICAgICAjIFRlc3QgcmljaCBjb21wYXJpc29uIGFuZCBfX2xlbl9fCiAgICAgICAgIGFsbCA9IFtkMCwgZDEsIGQyLCB1LCB1MCwgdTEsIHUyLCB1dSwgdXUwLCB1dTEsIHV1Ml0KQEAgLTg5LDkgKzkwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtMmEsIG0yKQogCiAgICAgICAgICMgVGVzdCBrZXlzLCBpdGVtcywgdmFsdWVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIua2V5cygpLCBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIuaXRlbXMoKSwgZDIuaXRlbXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHUyLnZhbHVlcygpKSwgbGlzdChkMi52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLmtleXMoKSksIHNvcnRlZChkMi5rZXlzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi5pdGVtcygpKSwgc29ydGVkKGQyLml0ZW1zKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi52YWx1ZXMoKSksIHNvcnRlZChkMi52YWx1ZXMoKSkpCiAKICAgICAgICAgIyBUZXN0ICJpbiIuCiAgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weSBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQppbmRleCAwZmFlODhiLi5mNTNlYjM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CkBAIC0xMiw5ICsxMiwxNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgY2FwdHVyZWRfc3RkZXJyLCBydW5fdW5pdHRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fc3ltbGluaywgRW52aXJvbm1lbnRWYXJHdWFyZCkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHZlbnYKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitza2lwSW5WZW52ID0gdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdCBub3QgYXBwcm9wcmlhdGUgaW4gYSB2ZW52JykKKwogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgdmVudiB0ZXN0cy4iIiIKQEAgLTgzLDggKzkxLDcgQEAKICAgICAgICAgICAgIHByaW50KCcgICAgJXInICUgb3MubGlzdGRpcihiZCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9wcmVmaXhlcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgcHJlZml4IHZhbHVlcyBhcmUgYXMgZXhwZWN0ZWQuCkBAIC0xMDksMTMgKzExNiw2OCBAQAogICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGV4cGVjdGVkLmVuY29kZSgpKQogCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdTY3JpcHRzJywpLAorICAgICAgICAgICAgKCdJbmNsdWRlJywpLAorICAgICAgICAgICAgKCdMaWInLCksCisgICAgICAgICAgICAoJ0xpYicsICdzaXRlLXBhY2thZ2VzJyksCisgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICBFTlZfU1VCRElSUyA9ICgKKyAgICAgICAgICAgICgnYmluJywpLAorICAgICAgICAgICAgKCdpbmNsdWRlJywpLAorICAgICAgICAgICAgKCdsaWInLCksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorCisgICAgZGVmIGNyZWF0ZV9jb250ZW50cyhzZWxmLCBwYXRocywgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHNvbWUgZmlsZXMgaW4gdGhlIGVudmlyb25tZW50IHdoaWNoIGFyZSB1bnJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICIiIgorICAgICAgICBmb3Igc3ViZGlycyBpbiBwYXRoczoKKyAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqc3ViZGlycykKKyAgICAgICAgICAgIG9zLm1rZGlyKGQpCisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInU3RpbGwgaGVyZT8nKQorCiAgICAgZGVmIHRlc3Rfb3ZlcndyaXRlX2V4aXN0aW5nKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb250cm9sIG9mIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGVudmlyb25tZW50IGRpcmVjdG9yeS4KKyAgICAgICAgVGVzdCBjcmVhdGluZyBlbnZpcm9ubWVudCBpbiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb250ZW50cyhzZWxmLkVOVl9TVUJESVJTLCAnZm9vJykKKyAgICAgICAgdmVudi5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGInU3RpbGwgaGVyZT8nKQorCiAgICAgICAgIGJ1aWxkZXIgPSB2ZW52LkVudkJ1aWxkZXIoY2xlYXI9VHJ1ZSkKICAgICAgICAgYnVpbGRlci5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZuKSkKKworICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmbikKKworICAgIGRlZiB0ZXN0X3Vub3ZlcndyaXRhYmxlX2ZhaWxzKHNlbGYpOgorICAgICAgICAjY3JlYXRlIGEgZmlsZSBjbGFzaGluZyB3aXRoIGRpcmVjdG9yaWVzIGluIHRoZSBlbnYgZGlyCisgICAgICAgIGZvciBwYXRocyBpbiBzZWxmLkVOVl9TVUJESVJTWzozXToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKnBhdGhzKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3Rvcnkoc2VsZi5lbnZfZGlyKQogCiAgICAgZGVmIHRlc3RfdXBncmFkZShzZWxmKToKICAgICAgICAgIiIiCkBAIC0xNjIsOCArMjI0LDcgQEAKICAgICAjIHJ1biB0aGUgdGVzdCwgdGhlIHB5dmVudi5jZmcgaW4gdGhlIHZlbnYgY3JlYXRlZCBpbiB0aGUgdGVzdCB3aWxsCiAgICAgIyBwb2ludCB0byB0aGUgdmVudiBiZWluZyB1c2VkIHRvIHJ1biB0aGUgdGVzdCwgYW5kIHdlIGxvc2UgdGhlIGxpbmsKICAgICAjIHRvIHRoZSBzb3VyY2UgYnVpbGQgLSBzbyBQeXRob24gY2FuJ3QgaW5pdGlhbGlzZSBwcm9wZXJseS4KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBzeXMuZXhlY3V0YWJsZSB2YWx1ZSBpcyBhcyBleHBlY3RlZC4KQEAgLTE5Miw4ICsyNTMsNzMgQEAKICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZW52cHkuZW5jb2RlKCkpCiAKKworQHNraXBJblZlbnYKK2NsYXNzIEVuc3VyZVBpcFRlc3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3QgdmVudiBtb2R1bGUgaW5zdGFsbGF0aW9uIG9mIHBpcC4iIiIKKworICAgIGRlZiB0ZXN0X25vX3BpcF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICB0cnlfaW1wb3J0ID0gJ3RyeTpcbiBpbXBvcnQgcGlwXG5leGNlcHQgSW1wb3J0RXJyb3I6XG4gcHJpbnQoIk9LIiknCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgdHJ5X2ltcG9ydF0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiIk9LIikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X25vX3BpcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyLCB3aXRoX3BpcD1GYWxzZSkKKyAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgIHRyeV9pbXBvcnQgPSAndHJ5OlxuIGltcG9ydCBwaXBcbmV4Y2VwdCBJbXBvcnRFcnJvcjpcbiBwcmludCgiT0siKScKKyAgICAgICAgY21kID0gW2VudnB5LCAnLWMnLCB0cnlfaW1wb3J0XQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIiT0siKQorCisgICAgIyBUZW1wb3Jhcnkgc2tpcCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0CisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ3BpcCBuZWVkcyBTU0wgc3VwcG9ydCcpCisgICAgZGVmIHRlc3Rfd2l0aF9waXAoc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZ2YXJzOgorICAgICAgICAgICAgIyBwaXAncyBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgbWF5IHRyaWdnZXIgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICMgd2FybmluZ3MgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBQeXRob24uIEVuc3VyZSByZWxhdGVkCisgICAgICAgICAgICAjIGVudmlyb25tZW50IHNldHRpbmdzIGRvbid0IGNhdXNlIHZlbnYgdG8gZmFpbC4KKyAgICAgICAgICAgIGVudnZhcnNbIlBZVEhPTldBUk5JTkdTIl0gPSAiZSIKKyAgICAgICAgICAgICMgcGlwIGRvZXNuJ3QgaWdub3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aGVuIHJ1bm5pbmcgaW4KKyAgICAgICAgICAgICMgaXNvbGF0ZWQgbW9kZSwgYW5kIHdlIGRvbid0IGhhdmUgYW4gYWN0aXZlIHZpcnR1YWxlbnYgaGVyZQorICAgICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgICAgICBkZWwgZW52dmFyc1siUElQX1JFUVVJUkVfVklSVFVBTEVOViJdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsIHdpdGhfcGlwPVRydWUpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICMgVGhlIG91dHB1dCB0aGlzIHByb2R1Y2VzIGNhbiBiZSBhIGxpdHRsZSBoYXJkIHRvIHJlYWQsIGJ1dAorICAgICAgICAgICAgICAgICMgbGVhc3QgaXQgaGFzIGFsbCB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIGRldGFpbHMgPSBleGMub3V0cHV0LmRlY29kZShlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICAgICAgICAgIG1zZyA9ICJ7fVxuXG4qKlN1YnByb2Nlc3MgT3V0cHV0Kipcbnt9Ii5mb3JtYXQoZXhjLCBkZXRhaWxzKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICBjbWQgPSBbZW52cHksICctSW0nLCAncGlwJywgJy0tdmVyc2lvbiddCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgZW52X2RpciA9IG9zLmZzZW5jb2RlKHNlbGYuZW52X2RpcikuZGVjb2RlKCJsYXRpbi0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5zdGFydHN3aXRoKCJwaXAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnZfZGlyLCBvdXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QpCisgICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCwgRW5zdXJlUGlwVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggYmQwNmM4ZC4uZjZhMDY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC03LDE1ICs3LDExIEBACiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiKQoraWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQiKQogCi10cnk6Ci0gICAgb3Mud2FpdDMKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ3dhaXQzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLndhaXQzIG5vdCBkZWZpbmVkIikKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggOWY2ZDc3NS4uODc0NjNhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC0zMzAsNiArMzMwLDE5IEBACiAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKICAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgogCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCJub25hc2NpaVx4ZTlcdTIwYWMiLCAic3Vycm9nYXRlXHVkYzgwIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5mc2VuY29kZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoInRleHQiLCBVc2VyV2FybmluZywgZmlsZW5hbWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgZmlsZW5hbWUpCisKICAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgogICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cwogICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KQEAgLTc4Nyw2ICs4MDAsMjUgQEAKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRjb2RlLCAwKQogCitjbGFzcyBGaW5hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5hbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDIxOiB3YXJuaW5ncy53YXJuKCkgc2hvdWxkIG5vdCBjcmFzaAorICAgICAgICAjIGR1cmluZyBQeXRob24gZmluYWxpemF0aW9uCisgICAgICAgIGNvZGUgPSAiIiIKK2ltcG9ydCB3YXJuaW5ncword2FybiA9IHdhcm5pbmdzLndhcm4KKworY2xhc3MgQToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgd2FybigidGVzdCIpCisKK2E9QSgpCisgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICMgbm90ZTogIl9fbWFpbl9fIiBmaWxlbmFtZSBpcyBub3QgY29ycmVjdCwgaXQgc2hvdWxkIGJlIHRoZSBuYW1lCisgICAgICAgICMgb2YgdGhlIHNjcmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYidfX21haW5fXzo3OiBVc2VyV2FybmluZzogdGVzdCcpCisKIAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgcHlfd2FybmluZ3Mub25jZXJlZ2lzdHJ5LmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQppbmRleCA1YmUxMjUxLi41NDljYTg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCB3YXZlCiAKQEAgLTQ2LDEzICs0Nyw3IEBACiAgICAgICBFNEI1MENFQiA2MzQ0MEE1QSAwOENBMEExRiAyQkJBMEIwQiA1MTQ2MEU0NyA4QkNCMTEzQyBCNkY1MEVFQSA0NDE1MEE1OSBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQotCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBXYXZlUENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtODIsNyArNzcsNyBAQAogICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMyhmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMykKIAogCiBjbGFzcyBXYXZlUENNMzJUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtMTEyLDEyICsxMDcsNyBAQAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDQoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA4NWFiNzE3Li5jY2NiNTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDExICs3LDE1IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCiByZWZfZnJvbV9kZWwgPSBOb25lCiAKKyMgVXNlZCBieSBGaW5hbGl6ZVRlc3RDYXNlIGFzIGEgZ2xvYmFsIHRoYXQgbWF5IGJlIHJlcGxhY2VkIGJ5IE5vbmUKKyMgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KK19nbG9iYWxfdmFyID0gJ2Zvb2JhcicKKwogY2xhc3MgQzoKICAgICBkZWYgbWV0aG9kKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC00Nyw2ICs1MSwxMSBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKyAgICBkZWYgb3RoZXJfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNQorCiAKIGNsYXNzIFJlZkN5Y2xlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTc5NCw2ICs4MDMsMzAgQEAKICAgICAgICAgZGVsIHJvb3QKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYxLl9fY2FsbGJhY2tfXywgY2FsbGJhY2spCisKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZjIuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlX2FmdGVyX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHgsIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlZi5fX2NhbGxiYWNrX18pCisgICAgICAgIGRlbCB4CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9zZXRfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcmVmMS5fX2NhbGxiYWNrX18gPSBsYW1iZGEgcmVmOiBOb25lCisKIAogY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKIApAQCAtODk4LDYgKzkzMSwxNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQogCiAKK2NsYXNzIFdlYWtNZXRob2RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBPYmplY3Qgc3ViY2xhc3Mgb3ZlcnJpZGluZyBgc29tZV9tZXRob2RgLiIiIgorICAgICAgICBjbGFzcyBDKE9iamVjdCk6CisgICAgICAgICAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiB0ZXN0X2FsaXZlKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIoKSwgdHlwZShvLnNvbWVfbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19zZWxmX18sIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fZnVuY19fLCBvLnNvbWVfbWV0aG9kLl9fZnVuY19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSgpLCA0KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gb2JqZWN0IGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIEMuc29tZV9tZXRob2QgPSBPYmplY3Quc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBtZXRob2QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgIyBBIFdlYWtNZXRob2QgZG9lc24ndCBjcmVhdGUgYW55IHJlZmVyZW5jZSBjeWNsZSB0byBpdHNlbGYuCisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgZGVmIGNiKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHIpCisgICAgICAgIGRlbCByCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkZWYgX2VxKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBkZWYgX25lKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5vdGhlcl9tZXRob2QpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgc2FtZSBtZXRob2QKKyAgICAgICAgX2VxKGEsIGIpCisgICAgICAgIF9lcShjLCBkKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgX25lKGEsIGMpCisgICAgICAgIF9uZShhLCBkKQorICAgICAgICBfbmUoYiwgYykKKyAgICAgICAgX25lKGIsIGQpCisgICAgICAgICMgT2JqZWN0cyB1bmVxdWFsLCBzYW1lIG9yIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBlID0gd2Vha3JlZi5XZWFrTWV0aG9kKHouc29tZV9tZXRob2QpCisgICAgICAgIGYgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5vdGhlcl9tZXRob2QpCisgICAgICAgIF9uZShhLCBlKQorICAgICAgICBfbmUoYSwgZikKKyAgICAgICAgX25lKGIsIGUpCisgICAgICAgIF9uZShiLCBmKQorICAgICAgICBkZWwgeCwgeSwgegorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIGNvbXBhcmUgYnkgaWRlbnRpdHkKKyAgICAgICAgcmVmcyA9IGEsIGIsIGMsIGQsIGUsIGYKKyAgICAgICAgZm9yIHEgaW4gcmVmczoKKyAgICAgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxID09IHIsIHEgaXMgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgIT0gciwgcSBpcyBub3QgcikKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgV2Vha01ldGhvZHMgYXJlIGhhc2hhYmxlIGlmIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcworICAgICAgICAjIGhhc2hhYmxlLgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgU2luY2UgV2Vha01ldGhvZCBvYmplY3RzIGFyZSBlcXVhbCwgdGhlIGhhc2hlcyBzaG91bGQgYmUgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKyAgICAgICAgaGEgPSBoYXNoKGEpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyByZXRhaW4gdGhlaXIgb2xkIGhhc2ggdmFsdWUKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiKSwgaGEpCisgICAgICAgICMgSWYgaXQgd2Fzbid0IGhhc2hlZCB3aGVuIGFsaXZlLCBhIGRlYWQgV2Vha01ldGhvZCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisKKwogY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKIAogICAgIENPVU5UID0gMTAKQEAgLTEzODUsNiArMTU1MiwxNTEgQEAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCiAKKworY2xhc3MgRmluYWxpemVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KHNlbGYpOgorICAgICAgICAjIHdlIGNyZWF0ZSBubyByZWYtY3ljbGVzIHNvIGluIENQeXRob24gbm8gZ2Mgc2hvdWxkIGJlIG5lZWRlZAorICAgICAgICBpZiBzeXMuaW1wbGVtZW50YXRpb24ubmFtZSAhPSAnY3B5dGhvbic6CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfZmluYWxpemUoc2VsZik6CisgICAgICAgIGRlZiBhZGQoeCx5LHopOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh4ICsgeSArIHopCisgICAgICAgICAgICByZXR1cm4geCArIHkgKyB6CisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIHo9ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzKSwgeyd6Jzo4OX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCA4OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIHg9NjcsIHk9NDMsIHo9ODkpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKworICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YxJykKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMicpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjMnKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y0JykKKyAgICAgICAgZjUgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNScpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZmluYWxpemVycyBjYW4ga2VlcCB0aGVtc2VsdmVzIGFsaXZlCisgICAgICAgIGRlbCBmMSwgZjQKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMy5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmFsaXZlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5kZXRhY2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNS5hbGl2ZSkKKworICAgICAgICBmNSgpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZAorICAgICAgICByZXMuYXBwZW5kKCdBJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjMuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0InKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZAorICAgICAgICByZXMuYXBwZW5kKCdDJykKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2Y0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdEJykKKyAgICAgICAgZjIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQgYnkgZ2MKKworICAgICAgICBleHBlY3RlZCA9IFsnQScsICdmMycsICdCJywgJ0MnLCAnZjQnLCAnZjInLCAnZjEnLCAnRCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2FsbF9mcmVlZChzZWxmKToKKyAgICAgICAgIyB3ZSB3YW50IGEgd2Vha3JlZmFibGUgc3ViY2xhc3Mgb2Ygd2Vha3JlZi5maW5hbGl6ZQorICAgICAgICBjbGFzcyBNeUZpbmFsaXplcih3ZWFrcmVmLmZpbmFsaXplKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKDEyMykKKyAgICAgICAgZiA9IE15RmluYWxpemVyKGEsIGNhbGxiYWNrKQorCisgICAgICAgIHdyX2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoY2FsbGJhY2spCisgICAgICAgIHdyX2YgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgY2FsbGJhY2ssIGYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9mKCkpCisKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxMjNdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBkZWYgZXJyb3IoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGF0ZXhpdCBmaW5hbGl6ZXIgZnJvbSBpbnNpZGUgYSBmaW5hbGl6ZXIgY2FsbGVkCisgICAgICAgICAgICAjIGF0IGV4aXQuICBUaGlzIHNob3VsZCBiZSB0aGUgbmV4dCB0byBiZSBydW4uCisgICAgICAgICAgICBnMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2cxJykKKyAgICAgICAgICAgIHByaW50KCdmMyBlcnJvcicpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIGNscyBzaG91bGQgc3RheSBhbGl2ZSB0aWxsIGF0ZXhpdCBjYWxsYmFja3MgcnVuCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjEnLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMicsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBlcnJvcikKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmNCcsIF9nbG9iYWxfdmFyKQorCisgICAgICAgIGFzc2VydCBmMS5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBmMi5hdGV4aXQgPSBGYWxzZQorICAgICAgICBhc3NlcnQgZjMuYXRleGl0ID09IFRydWUKKyAgICAgICAgYXNzZXJ0IGY0LmF0ZXhpdCA9PSBUcnVlCisKKyAgICBkZWYgdGVzdF9hdGV4aXQoc2VsZik6CisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X3dlYWtyZWYgaW1wb3J0IEZpbmFsaXplVGVzdENhc2U7JysKKyAgICAgICAgICAgICAgICAnRmluYWxpemVUZXN0Q2FzZS5ydW5faW5fY2hpbGQoKScpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBwcm9nKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCdhc2NpaScpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgWydmNCBmb29iYXInLCAnZjMgZXJyb3InLCAnZzEnLCAnZjEgZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1plcm9EaXZpc2lvbkVycm9yJyBpbiBlcnIpCisKKwogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CiAKID4+PiBpbXBvcnQgd2Vha3JlZgpAQCAtMTQ3MywxMCArMTc4NSwxMiBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBSZWZlcmVuY2VzVGVzdENhc2UsCisgICAgICAgIFdlYWtNZXRob2RUZXN0Q2FzZSwKICAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAogICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgRmluYWxpemVUZXN0Q2FzZSwKICAgICAgICAgKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IGNiNGNkZTkuLmVmNGNlNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC04LDcgKzgsNyBAQAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCiAjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKLXN1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJywgcmVxdWlyZWRfb249Wyd3aW4nXSkKICMgTm93IGltcG9ydCBldmVyeXRoaW5nCiBmcm9tIHdpbnJlZyBpbXBvcnQgKgogCkBAIC01NywxMyArNTcsMTMgQEAKICAgICBkZWYgZGVsZXRlX3RyZWUoc2VsZiwgcm9vdCwgc3Via2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGtleSA9IE9wZW5LZXkocm9vdCwgc3Via2V5LCBLRVlfQUxMX0FDQ0VTUykKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gbW9yZSBzdWJrZXlzCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX3RyZWUoaGtleSwgc3Vic3Via2V5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X3N1Yl9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIENsb3NlS2V5KCkgZnVuY3Rpb24gZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKICAgICAgICAgaW50X2tleSA9IGludChrZXkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBrZXkuQ2xvc2UoKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgc3Via2V5c3RyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEZWxldGluZyB0aGUga2V5IHR3aWNlIHN1Y2NlZWRlZCIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAga2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CiAgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCi0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKQEAgLTQwNyw3ICs0MDcsNyBAQAogICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKICAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCBlYjdmNzVmLi5kOGE2MTdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAga2V5ID0gd2lucmVnLk9wZW5LZXlFeCh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgIkFwcEV2ZW50c1xTY2hlbWVzXEFwcHNcLkRlZmF1bHRcezB9XC5EZWZhdWx0Ii5mb3JtYXQoc291bmQpKQogICAgICAgICByZXR1cm4gd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdICE9ICIiCi0gICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGNsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE1OCwxOCArMTU4LDE0IEBACiAgICAgICAgICAgICApCiAKICAgICBkZWYgdGVzdF9hbGlhc19mYWxsYmFjayhzZWxmKToKLSAgICAgICAgIyBUaGlzIHRlc3QgY2FuJ3QgYmUgZXhwZWN0ZWQgdG8gd29yayBvbiBhbGwgc3lzdGVtcy4gIFRoZSBNUwotICAgICAgICAjIFBsYXlTb3VuZCgpIGRvY3Mgc2F5OgotICAgICAgICAjCi0gICAgICAgICMgICAgIElmIGl0IGNhbm5vdCBmaW5kIHRoZSBzcGVjaWZpZWQgc291bmQsIFBsYXlTb3VuZCB1c2VzIHRoZQotICAgICAgICAjICAgICBkZWZhdWx0IHN5c3RlbSBldmVudCBzb3VuZCBlbnRyeSBpbnN0ZWFkLiAgSWYgdGhlIGZ1bmN0aW9uCi0gICAgICAgICMgICAgIGNhbiBmaW5kIG5laXRoZXIgdGhlIHN5c3RlbSBkZWZhdWx0IGVudHJ5IG5vciB0aGUgZGVmYXVsdAotICAgICAgICAjICAgICBzb3VuZCwgaXQgbWFrZXMgbm8gc291bmQgYW5kIHJldHVybnMgRkFMU0UuCi0gICAgICAgICMKLSAgICAgICAgIyBJdCdzIGtub3duIHRvIHJldHVybiBGQUxTRSBvbiBzb21lIHJlYWwgc3lzdGVtcy4KLQotICAgICAgICAjIHdpbnNvdW5kLlBsYXlTb3VuZCgnISIkJSYvKCMrKicsIHdpbnNvdW5kLlNORF9BTElBUykKLSAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCchIiQlJi8oIysqJywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnISIkJSYvKCMrKicsIHdpbnNvdW5kLlNORF9BTElBUworICAgICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYWxpYXNfbm9mYWxsYmFjayhzZWxmKToKICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CmluZGV4IDdiZDhhMmMuLjg5OTcxZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CkBAIC0xMCw2ICsxMCw3IEBACiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogCkBAIC0yNDAsNyArMjQxLDYgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlhNTCwgRVQuZnJvbXN0cmluZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFVC5QSSwgRVQuUHJvY2Vzc2luZ0luc3RydWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlhNTFBhcnNlciwgRVQuWE1MVHJlZUJ1aWxkZXIpCiAKICAgICBkZWYgdGVzdF9zaW1wbGVvcHMoc2VsZik6CiAgICAgICAgICMgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCkBAIC00MzMsMTUgKzQzMyw2IEBACiAgICAgICAgICAgICAgICAgJyAgIDxlbXB0eS1lbGVtZW50IC8+XG4nCiAgICAgICAgICAgICAgICAgJzwvcm9vdD4nKQogCi0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkgIyAxLjIgY29tcGF0aWJpbGl0eQotICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQotICAgICAgICBzZWxmLnNlcmlhbGl6ZV9jaGVjayhwYXJzZXIuY2xvc2UoKSwKLSAgICAgICAgICAgICAgICAnPHJvb3Q+XG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+XG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuJwotICAgICAgICAgICAgICAgICcgICA8ZW1wdHktZWxlbWVudCAvPlxuJwotICAgICAgICAgICAgICAgICc8L3Jvb3Q+JykKLQogICAgICAgICB0YXJnZXQgPSBFVC5UcmVlQnVpbGRlcigpCiAgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9dGFyZ2V0KQogICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQpAQCAtNzA2LDkgKzY5Nyw5IEBACiAgICAgICAgICAgICAnaXNvODg1OS0xMycsICdpc284ODU5LTE0JywgJ2lzbzg4NTktMTUnLCAnaXNvODg1OS0xNicsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLCAnY3A4NTInLAogICAgICAgICAgICAgJ2NwODU1JywgJ2NwODU2JywgJ2NwODU3JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDg2OScsICdjcDg3NCcsICdjcDEwMDYnLCAnY3AxMjUwJywKLSAgICAgICAgICAgICdjcDEyNTEnLCAnY3AxMjUyJywgJ2NwMTI1MycsICdjcDEyNTQnLCAnY3AxMjU1JywgJ2NwMTI1NicsCi0gICAgICAgICAgICAnY3AxMjU3JywgJ2NwMTI1OCcsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3A4NjknLCAnY3A4NzQnLCAnY3AxMDA2JywgJ2NwMTEyNScsCisgICAgICAgICAgICAnY3AxMjUwJywgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLAorICAgICAgICAgICAgJ2NwMTI1NicsICdjcDEyNTcnLCAnY3AxMjU4JywKICAgICAgICAgICAgICdtYWMtY3lyaWxsaWMnLCAnbWFjLWdyZWVrJywgJ21hYy1pY2VsYW5kJywgJ21hYy1sYXRpbjInLAogICAgICAgICAgICAgJ21hYy1yb21hbicsICdtYWMtdHVya2lzaCcsCiAgICAgICAgICAgICAnaXNvMjAyMi1qcCcsICdpc28yMDIyLWpwLTEnLCAnaXNvMjAyMi1qcC0yJywgJ2lzbzIwMjItanAtMjAwNCcsCkBAIC05NjQsNiArOTU1LDE2MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplZCwgZXhwZWN0ZWQpCiAKIAorY2xhc3MgWE1MUHVsbFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9mZWVkKHNlbGYsIHBhcnNlciwgZGF0YSwgY2h1bmtfc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgY2h1bmtfc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgY2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YVtpOmkrY2h1bmtfc2l6ZV0pCisKKyAgICBkZWYgYXNzZXJ0X2V2ZW50X3RhZ3Moc2VsZiwgcGFyc2VyLCBleHBlY3RlZCk6CisgICAgICAgIGV2ZW50cyA9IHBhcnNlci5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhhY3Rpb24sIGVsZW0udGFnKSBmb3IgYWN0aW9uLCBlbGVtIGluIGV2ZW50c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfeG1sKHNlbGYpOgorICAgICAgICBmb3IgY2h1bmtfc2l6ZSBpbiAoTm9uZSwgMSwgNSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjaHVua19zaXplPWNodW5rX3NpemUpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ2VsZW1lbnQnKV0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZW1wdHktZWxlbWVudC8+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAgICAgICAgICgnZW5kJywgJ2VsZW1lbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3Jvb3QnKV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9mZWVkX3doaWxlX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIGl0ID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiAgPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudD5cbiIpCisgICAgICAgIGFjdGlvbiwgZWxlbSA9IG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFjdGlvbiwgZWxlbS50YWcpLCAoJ2VuZCcsICdlbGVtZW50JykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ3Jvb3QnKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKKyAgICAgICAgICAgIG5leHQoaXQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfeG1sX3dpdGhfbnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICd7bmFtZXNwYWNlfWVsZW1lbnQnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ2VuZCcsICd7bmFtZXNwYWNlfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9cm9vdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9uc19ldmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQtbnMnLCAnZW5kLW5zJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdCB4bWxucz0nbmFtZXNwYWNlJz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwKKyAgICAgICAgICAgIFsoJ3N0YXJ0LW5zJywgKCcnLCAnbmFtZXNwYWNlJykpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50IikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZW1wdHktZWxlbWVudC8+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSksIFsoJ2VuZC1ucycsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9ldmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290Lz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz0oJ3N0YXJ0JywgJ2VuZCcpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdyb290JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ2VsZW1lbnQnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICI8ZWxlbWVudCB4bWxucz0nZm9vJz50ZXh0PGVtcHR5LWVsZW1lbnQvPjwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWworICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAne2Zvb31lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAoJ2VuZCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz0oJ3N0YXJ0JywpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdyb290JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICI8ZWxlbWVudCB4bWxucz0nZm9vJz50ZXh0PGVtcHR5LWVsZW1lbnQvPjwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWworICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAne2Zvb31lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50c19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXZlbnRzIGNhbiBiZSBzb21lIHNlcXVlbmNlIHRoYXQncyBub3QganVzdCBhIHR1cGxlIG9yIGxpc3QKKyAgICAgICAgZXZlbnRzZXQgPSB7J2VuZCcsICdzdGFydCd9CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPWV2ZW50c2V0KQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxmb28+YmFyPC9mb28+IikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ2ZvbycpLCAoJ2VuZCcsICdmb28nKV0pCisKKyAgICAgICAgY2xhc3MgRHVtbXlJdGVyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzID0gaXRlcihbJ3N0YXJ0JywgJ2VuZCcsICdzdGFydC1ucyddKQorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5ldmVudHMpCisKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9RHVtbXlJdGVyKCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworCisgICAgZGVmIHRlc3RfdW5rbm93bl9ldmVudChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJywgJ2JvZ3VzJykpCisKKwogIwogIyB4aW5jbHVkZSB0ZXN0cyAoc2FtcGxlcyBmcm9tIGFwcGVuZGl4IEMgb2YgdGhlIHhpbmNsdWRlIHNwZWNpZmljYXRpb24pCiAKQEAgLTEzMDUsNyArMTQ1MCw3IEBACiAgICAgICAgICMgRG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBjdXN0b20gZW50aXRpZXMuCiAKICAgICAgICAgRU5USVRJRVMgPSB7J3JzcXVvJzogJ1x1MjAxOScsICdsc3F1byc6ICdcdTIwMTgnfQotICAgICAgICBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpCisgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcigpCiAgICAgICAgIHBhcnNlci5lbnRpdHkudXBkYXRlKEVOVElUSUVTKQogICAgICAgICBwYXJzZXIuZmVlZCgiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPCFET0NUWVBFIHBhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbiBTWVNURU0gInBhcC12MTUtMjAwMS0wMS0zMS5kdGQiIFtdPgpAQCAtMTY0Myw2ICsxNzg4LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maW5kKCcuL3RhZ1tsYXN0KCktMV0nKS5hdHRyaWJbJ2NsYXNzJ10sICdjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0yXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2InKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdYUGF0aCcsIGUuZmluZCwgJy4vdGFnWzBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbLTFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbbGFzdCgpLTBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbbGFzdCgpKzFdJykKKwogICAgIGRlZiB0ZXN0X2ZpbmRhbGwoc2VsZik6CiAgICAgICAgIGUgPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgICAgICAgZVsyXSA9IEVULlhNTChTQU1QTEVfU0VDVElPTikKQEAgLTE5MDIsNyArMjA1Miw3IEBACiAgICAgICAgICMgTWltaWNrIFNpbXBsZVRBTCdzIGJlaGF2aW91ciAoaXNzdWUgIzE2MDg5KTogYm90aCB2ZXJzaW9ucyBvZgogICAgICAgICAjIFRyZWVCdWlsZGVyIHNob3VsZCBiZSBhYmxlIHRvIGNvcGUgd2l0aCBhIHN1YmNsYXNzIG9mIHRoZQogICAgICAgICAjIHB1cmUgUHl0aG9uIEVsZW1lbnQgY2xhc3MuCi0gICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudAorICAgICAgICBiYXNlID0gRVQuX0VsZW1lbnRfUHkKICAgICAgICAgIyBOb3QgZnJvbSBhIEMgZXh0ZW5zaW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKICAgICAgICAgIyBGb3JjZSBzb21lIG11bHRpcGxlIGluaGVyaXRhbmNlIHdpdGggYSBDIGNsYXNzIHRvIG1ha2UgdGhpbmdzCkBAIC0yMjYxLDYgKzI0MTEsMTggQEAKICAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1dGYtMTYnKSwKICAgICAgICAgICAgIGInJy5qb2luKEVULnRvc3RyaW5nbGlzdChyb290LCAndXRmLTE2JykpKQogCisgICAgZGVmIHRlc3Rfc2hvcnRfZW1wdHlfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHJvb3QgPSBFVC5mcm9tc3RyaW5nKCc8dGFnPmE8eCAvPmI8eT48L3k+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScpLAorICAgICAgICAgICAgJzx0YWc+YTx4IC8+Yjx5IC8+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScsIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpLAorICAgICAgICAgICAgJzx0YWc+YTx4IC8+Yjx5IC8+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScsIHNob3J0X2VtcHR5X2VsZW1lbnRzPUZhbHNlKSwKKyAgICAgICAgICAgICc8dGFnPmE8eD48L3g+Yjx5PjwveT5jPC90YWc+JykKKwogCiBjbGFzcyBQYXJzZUVycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CkBAIC0yMzI2LDggKzI0ODgsMTEgQEAKIAogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBub3QgaW1wb3J0ZWQgZm9yIHB5RVQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9weUVUKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweUVULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ3htbC5ldHJlZS5FbGVtZW50VHJlZScpCisgICAgICAgICMgVGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluIFB5dGhvbiBjb2RlIGlzIHR5cGVzLkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgIyB3aGlsZSB0aGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW5zaWRlIF9lbGVtZW50dHJlZSBpcworICAgICAgICAjIDxjbGFzcyAnd3JhcHBlcl9kZXNjcmlwdG9yJz4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5RVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5YTUxQYXJzZXIuX19pbml0X18sIHR5cGVzLkZ1bmN0aW9uVHlwZSkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMzk3LDYgKzI1NjIsNyBAQAogICAgICAgICBFbGVtZW50SXRlclRlc3QsCiAgICAgICAgIFRyZWVCdWlsZGVyVGVzdCwKICAgICAgICAgWE1MUGFyc2VyVGVzdCwKKyAgICAgICAgWE1MUHVsbFBhcnNlclRlc3QsCiAgICAgICAgIEJ1Z3NUZXN0LAogICAgICAgICBdCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CmluZGV4IGJjYWE3MjQuLmIzZmY3YWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQpAQCAtMiw2ICsyLDcgQEAKIGltcG9ydCBzeXMsIHN0cnVjdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X2ZyZXNoX21vZHVsZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogY0VUID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKQEAgLTMzLDE0ICszNCwyMiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCitAc3VwcG9ydC5jcHl0aG9uX29ubHkKIGNsYXNzIFRlc3RBY2NlbGVyYXRvckltcG9ydGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhhdCB0aGUgQyBhY2NlbGVyYXRvciB3YXMgaW1wb3J0ZWQsIGFzIGV4cGVjdGVkCiAgICAgZGVmIHRlc3RfY29ycmVjdF9pbXBvcnRfY0VUKHNlbGYpOgorICAgICAgICAjIFN1YkVsZW1lbnQgaXMgYSBmdW5jdGlvbiBzbyBpdCByZXRhaW5zIF9lbGVtZW50dHJlZSBhcyBpdHMgbW9kdWxlLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNFVC5TdWJFbGVtZW50Ll9fbW9kdWxlX18sICdfZWxlbWVudHRyZWUnKQogCiAgICAgZGVmIHRlc3RfY29ycmVjdF9pbXBvcnRfY0VUX2FsaWFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNFVF9hbGlhcy5TdWJFbGVtZW50Ll9fbW9kdWxlX18sICdfZWxlbWVudHRyZWUnKQogCisgICAgZGVmIHRlc3RfcGFyc2VyX2NvbWVzX2Zyb21fQyhzZWxmKToKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoY0VULkVsZW1lbnQuX19pbml0X18sIHR5cGVzLkZ1bmN0aW9uVHlwZSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhjRVQsICdyZXF1aXJlcyBfZWxlbWVudHRyZWUnKQogQHN1cHBvcnQuY3B5dGhvbl9vbmx5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CmluZGV4IGNjNTIyNTkuLjk5YjNlZGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CkBAIC0xNSw2ICsxNSwxMCBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIHRyeToKKyAgICBpbXBvcnQgZ3ppcAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGd6aXAgPSBOb25lCit0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKQEAgLTIxNiw3ICsyMjAsNyBAQAogICAgICAgICAgICAgeG1scnBjLmNsaWVudC5TZXJ2ZXJQcm94eSgnaHR0cHM6Ly9sb2NhbGhvc3Q6OTk5OScpLmJhZF9mdW5jdGlvbigpCiAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNfc3NsLCAieG1scnBjIGNsaWVudCdzIGVycm9yIHdpdGggU1NMIHN1cHBvcnQiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfc3NsKQogCiBjbGFzcyBIZWxwZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNzYsNiArMzgwLDExIEBACiAgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgogICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJwogCisgICAgICAgIGNsYXNzIEZpeHR1cmU6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0RGF0YSgpOgorICAgICAgICAgICAgICAgIHJldHVybiAnNDInCisKICAgICBkZWYgbXlfZnVuY3Rpb24oKToKICAgICAgICAgJycnVGhpcyBpcyBteSBmdW5jdGlvbicnJwogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNDA3LDcgKzQxNiw4IEBACiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24ocG93KQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4LHk6IHgreSwgJ2FkZCcpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obXlfZnVuY3Rpb24pCi0gICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UoVGVzdEluc3RhbmNlQ2xhc3MoKSkKKyAgICAgICAgdGVzdEluc3RhbmNlID0gVGVzdEluc3RhbmNlQ2xhc3MoKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2luc3RhbmNlKHRlc3RJbnN0YW5jZSwgYWxsb3dfZG90dGVkX25hbWVzPVRydWUpCiAgICAgICAgIGV2dC5zZXQoKQogCiAgICAgICAgICMgaGFuZGxlIHVwIHRvICdudW1yZXF1ZXN0cycgcmVxdWVzdHMKQEAgLTUwMCw3ICs1MTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgZXhjX21lc3MgPSBlLmhlYWRlcnMuZ2V0KCdYLWV4Y2VwdGlvbicpCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAjIElnbm9yZSBzb2NrZXQuZXJyb3JzIGhlcmUuCisgICAgICAgICMgSWdub3JlIE9TRXJyb3JzIGhlcmUuCiAgICAgICAgIGV4Y19tZXNzID0gc3RyKGUpCiAKICAgICBpZiBleGNfbWVzcyBhbmQgJ3RlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJyBpbiBleGNfbWVzcy5sb3dlcigpOgpAQCAtNTE1LDcgKzUyNSw3IEBACiAgICAgICAgIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXAoc2VsZik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgeG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkubXlfZnVuY3Rpb24oKQotICAgICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QocmVhc29uKQpAQCAtNTUzLDcgKzU2Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTU2Niw3ICs1NzYsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKHN0YXJ0X3N0cmluZywgZW5kX3N0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N0cmluZyArIGVuZF9zdHJpbmcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTg3LDEyICs1OTcsMTMgQEAKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMShzZWxmKToKICAgICAgICAgZXhwZWN0ZWRfbWV0aG9kcyA9IHNldChbJ3BvdycsICdkaXYnLCAnbXlfZnVuY3Rpb24nLCAnYWRkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5saXN0TWV0aG9kcycsICdzeXN0ZW0ubWV0aG9kSGVscCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGaXh0dXJlJ10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbWV0aCA9IHAuc3lzdGVtLmxpc3RNZXRob2RzKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KG1ldGgpLCBleHBlY3RlZF9tZXRob2RzKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYwNSw3ICs2MTYsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZoZWxwID0gcC5zeXN0ZW0ubWV0aG9kSGVscCgnZGl2JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2aGVscCwgJ1RoaXMgaXMgdGhlIGRpdiBmdW5jdGlvbicpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjE5LDcgKzYzMCw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG15ZnVuY3Rpb24gPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdteV9mdW5jdGlvbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZnVuY3Rpb24sICdUaGlzIGlzIG15IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MzIsNyArNjQzLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgZGl2c2lnID0gcC5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZzaWcsICdzaWduYXR1cmVzIG5vdCBzdXBwb3J0ZWQnKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTY0OSw3ICs2NjAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRfcmVzdWx0LCAyKzMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvd19yZXN1bHQsIDYqKjgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdl9yZXN1bHQsIDEyNy8vNDIpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjcwLDcgKzY4MSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5yZXN1bHRzWzBdWydmYXVsdFN0cmluZyddLAogICAgICAgICAgICAgICAgICc8Y2xhc3MgXCdFeGNlcHRpb25cJz46bWV0aG9kICJ0aGlzX2lzX25vdF9leGlzdHMiICcKICAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjg2LDYgKzY5NywxMiBAQAogICAgICAgICAjIFRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdGltZW91dC4KICAgICAgICAgc2VsZi50ZXN0X3NpbXBsZTEoKQogCisgICAgZGVmIHRlc3RfYWxsb3dfZG90dGVkX25hbWVzX3RydWUoc2VsZik6CisgICAgICAgICMgWFhYIGFsc28gbmVlZCBhbGxvd19kb3R0ZWRfbmFtZXNfZmFsc2UgdGVzdC4KKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vJXM6JWQvUlBDMiIgJSAoQUREUiwgUE9SVCkpCisgICAgICAgIGRhdGEgPSBzZXJ2ZXIuRml4dHVyZS5nZXREYXRhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnNDInKQorCiAgICAgZGVmIHRlc3RfdW5pY29kZV9ob3N0KHNlbGYpOgogICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuYWRkKCJhIiwgIlx4ZTkiKSwgImFceGU5IikKQEAgLTc5Myw2ICs4MTAsNyBAQAogCiAjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGd6aXAgZW5jb2Rpbmcgd29ya3MgaW4gYm90aCBkaXJlY3Rpb25zCiAjKGZvciBhIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSkKK0B1bml0dGVzdC5za2lwSWYoZ3ppcCBpcyBOb25lLCAncmVxdWlyZXMgZ3ppcCcpCiBjbGFzcyBHemlwU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKICAgICAjYSByZXF1ZXN0IGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBrZWVwLWFsaXZlIGFuZCBsb2dzIHJlcXVlc3RzIGludG8gYQogICAgICNjbGFzcyB2YXJpYWJsZQpAQCAtOTIzLDcgKzk0MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTkzNiw3ICs5NTQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHAucG93KDYsOCkKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSkgYW5kIGhhc2F0dHIoZSwgImhlYWRlcnMiKToKICAgICAgICAgICAgICAgICAjIFRoZSB0d28gc2VydmVyLXNpZGUgZXJyb3IgaGVhZGVycyBzaG91bGRuJ3QgYmUgc2VudCBiYWNrIGluIHRoaXMgY2FzZQpAQCAtOTU2LDcgKzk3NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGdldCBlcnJvciBpbmZvIGluIHRoZSByZXNwb25zZQpAQCAtMTA4NCwyMyArMTEwMiwxMyBAQAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICB4bWxycGNfdGVzdHMgPSBbWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAotICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2VdCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChVc2VCdWlsdGluVHlwZXNUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNpbXBsZVNlcnZlclRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UyKQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGd6aXAKLSAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChHemlwU2VydmVyVGVzdENhc2UpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzICNnemlwIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZAotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoTXVsdGlQYXRoU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTZXJ2ZXJQcm94eVRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoRmFpbGluZ1NlcnZlclRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoQ0dJSGFuZGxlclRlc3RDYXNlKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFhNTFJQQ1Rlc3RDYXNlLCBIZWxwZXJUZXN0Q2FzZSwgRGF0ZVRpbWVUZXN0Q2FzZSwKKyAgICAgICAgICAgIEJpbmFyeVRlc3RDYXNlLCBGYXVsdFRlc3RDYXNlLCBVc2VCdWlsdGluVHlwZXNUZXN0Q2FzZSwKKyAgICAgICAgICAgIFNpbXBsZVNlcnZlclRlc3RDYXNlLCBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEsCisgICAgICAgICAgICBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIsIEd6aXBTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIE11bHRpUGF0aFNlcnZlclRlc3RDYXNlLCBTZXJ2ZXJQcm94eVRlc3RDYXNlLCBGYWlsaW5nU2VydmVyVGVzdENhc2UsCisgICAgICAgICAgICBDR0lIYW5kbGVyVGVzdENhc2UpCiAKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqeG1scnBjX3Rlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkgYi9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKaW5kZXggZGZiNWY5YS4uMDBhY2ExOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQpAQCAtOSwzMiArOSw3IEBACiAKIGltcG9ydCB4bWxycGMuY2xpZW50IGFzIHhtbHJwY2xpYgogCi1jbGFzcyBDdXJyZW50VGltZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfY3VycmVudF90aW1lKHNlbGYpOgotICAgICAgICAjIEdldCB0aGUgY3VycmVudCB0aW1lIGZyb20geG1scnBjLmNvbS4gIFRoaXMgY29kZSBleGVyY2lzZXMKLSAgICAgICAgIyB0aGUgbWluaW1hbCBIVFRQIGZ1bmN0aW9uYWxpdHkgaW4geG1scnBjbGliLgotICAgICAgICBzZWxmLnNraXBUZXN0KCJ0aW1lLnhtbHJwYy5jb20gaXMgdW5yZWxpYWJsZSIpCi0gICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovL3RpbWUueG1scnBjLmNvbS9SUEMyIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdDAgPSBzZXJ2ZXIuY3VycmVudFRpbWUuZ2V0Q3VycmVudFRpbWUoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZXR3b3JrIGVycm9yOiAlcyIgJSBlKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyBQZXJmb3JtIGEgbWluaW1hbCBzYW5pdHkgY2hlY2sgb24gdGhlIHJlc3VsdCwganVzdCB0byBiZSBzdXJlCi0gICAgICAgICMgdGhlIHJlcXVlc3QgbWVhbnMgd2hhdCB3ZSB0aGluayBpdCBtZWFucy4KLSAgICAgICAgdDEgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQotCi0gICAgICAgIGR0MCA9IHhtbHJwY2xpYi5fZGF0ZXRpbWVfdHlwZSh0MC52YWx1ZSkKLSAgICAgICAgZHQxID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQxLnZhbHVlKQotICAgICAgICBpZiBkdDAgPiBkdDE6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MCAtIGR0MQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsdGEgPSBkdDEgLSBkdDAKLSAgICAgICAgIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzeXN0ZW0gdGltZSBoZXJlIGFuZCB0aGUgc3lzdGVtCi0gICAgICAgICMgdGltZSBvbiB0aGUgc2VydmVyIHNob3VsZCBub3QgYmUgdG9vIGJpZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlbHRhLmRheXMgPD0gMSkKK2NsYXNzIFB5dGhvbkJ1aWxkZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9weXRob25fYnVpbGRlcnMoc2VsZik6CiAgICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIGJ1aWxkZXJzIGZyb20gdGhlIFhNTFJQQyBidWlsZGJvdCBpbnRlcmZhY2UgYXQKQEAgLTQyLDcgKzE3LDcgQEAKICAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vYnVpbGRib3QucHl0aG9uLm9yZy9hbGwveG1scnBjLyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJ1aWxkZXJzID0gc2VydmVyLmdldEFsbEJ1aWxkZXJzKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmV0d29yayBlcnJvcjogJXMiICUgZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXJ2ZXIoJ2Nsb3NlJykoKSkKQEAgLTU1LDcgKzMwLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEN1cnJlbnRUaW1lVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeXRob25CdWlsZGVyc1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCBhZDBjMGI3Li40OWVjY2JiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHRpbWUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKQEAgLTE0LDcgKzE0LDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGZpbmRmaWxlLCB1bmxpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3psaWIsIHJlcXVpcmVzX2J6MiwgcmVxdWlyZXNfbHptYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIGNoZWNrX3dhcm5pbmdzKQogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiBURVNURk5ESVIgPSBURVNURk4gKyAiZCIKQEAgLTM1LDYgKzM1LDEwIEBACiAgICAgICAgIHlpZWxkIGYKICAgICAgICAgdGVzdC5hc3NlcnRGYWxzZShmLmNsb3NlZCkKIAorZGVmIG9wZW5VKHppcGZwLCBmbik6CisgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICByZXR1cm4gemlwZnAub3BlbihmbiwgJ3JVJykKKwogY2xhc3MgQWJzdHJhY3RUZXN0c1dpdGhTb3VyY2VGaWxlOgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CkBAIC01MDYsMTIgKzUxMCwxMiBAQAogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfU1RPUkVECiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUsIFRFU1RGTiwgImFub3RoZXIubmFtZSIpCiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1GYWxzZSkgYXMgemlwZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyLCAiYW5vdGhlci5uYW1lIiwgc2VsZi5kYXRhKQogCkBAIC01NTcsNyArNTYxLDcgQEAKICAgICAgICAgICAgICAgICBpZiBvcy5hbHRzZXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BsaXQuZXh0ZW5kKGZuLnNwbGl0KG9zLmFsdHNlcCkpCiAgICAgICAgICAgICAgICAgaWYgJ19fcHljYWNoZV9fJyBpbiBwYXRoX3NwbGl0OgotICAgICAgICAgICAgICAgICAgICBmbiA9IGltcC5zb3VyY2VfZnJvbV9jYWNoZShmbikKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShmbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KIApAQCAtNTkxLDYgKzU5NSwzNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9fX2luaXRfXy5weScsIG5hbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9taW1lL3RleHQucHknLCBuYW1lcykKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbHRlcmVkX3B5dGhvbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGVzdAorICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKHRlc3QuX19maWxlX18pCisKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKworICAgICAgICAgICAgIyBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgdGVzdCBmb2xkZXIgZ2l2ZXMgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICMgKG9uIHRoZSBiYWRzeW50YXhfLi4uIGZpbGVzKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyByZXBvcnRTSU86CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIGluIHJlcG9ydFN0cikKKworICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyBvbiB0aGUgd2hvbGUgcGFja2FnZQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyByZXBvcnRTSU86CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyLCBmaWx0ZXJmdW5jPWxhbWJkYSB3aGF0ZXZlcjogRmFsc2UpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgbm90IGluIHJlcG9ydFN0cikKKworICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyBvbiBpbmRpdmlkdWFsIGZpbGVzCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkJyBub3QgaW4gZm4pCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgcmVwb3J0U3RyOgorICAgICAgICAgICAgICAgIHByaW50KHJlcG9ydFN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIG5vdCBpbiByZXBvcnRTdHIpCisKICAgICBkZWYgdGVzdF93cml0ZV93aXRoX29wdGltaXphdGlvbihzZWxmKToKICAgICAgICAgaW1wb3J0IGVtYWlsCiAgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZW1haWwuX19maWxlX18pCkBAIC02MDAsNyArNjMyLDcgQEAKICAgICAgICAgZXh0ID0gJy5weW8nIGlmIG9wdGxldmVsID09IDEgZWxzZSAnLnB5YycKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCBcCi0gICAgICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgorICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQogCiAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKQEAgLTYzMCw2ICs2NjIsMjYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKIAorICAgIGRlZiB0ZXN0X3dyaXRlX3B5dGhvbl9kaXJlY3RvcnlfZmlsdGVyZWQoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDEucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIpXG4iKQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QyLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyICogNDIpXG4iKQorCisgICAgICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkoVEVTVEZOMiwgZmlsdGVyZnVuYz1sYW1iZGEgZm46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBmbi5lbmRzd2l0aCgnbW9kMi5weScpKQorCisgICAgICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdtb2QxLnB5JywgbmFtZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi5weScsIG5hbWVzKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCisKICAgICBkZWYgdGVzdF93cml0ZV9ub25fcHlmaWxlKHNlbGYpOgogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgogICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgpAQCAtNzMzLDI1ICs3ODUsMjUgQEAKICAgICBkZWYgdGVzdF9leHRyYWN0X2hhY2tlcnNfYXJjbmFtZXNfd2luZG93c19vbmx5KHNlbGYpOgogICAgICAgICAiIiJUZXN0IGNvbWJpbmF0aW9uIG9mIHBhdGggZml4aW5nIGFuZCB3aW5kb3dzIG5hbWUgc2FuaXRpemF0aW9uLiIiIgogICAgICAgICB3aW5kb3dzX2hhY2tuYW1lcyA9IFsKLSAgICAgICAgICAgICAgICAocicuLlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicuLlwvZm9vXC9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vXC8uLi9cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOmZvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Ly9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy9jb25reS8vbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcY29ua3lcXG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFw/XEM6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Ly4uL0M6L2Zvby9iYXInLCAnQ18vZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAotICAgICAgICAgICAgICAgICgnLi4vLi4vZm9vLi4vLi4vYmEuLnInLCAnZm9vL2JhLi5yJyksCisgICAgICAgICAgICAocicuLlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb28vXC4uXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInZm9vXC8uLi9cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Ly9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy9jb25reS8vbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy8/L0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFw/XEM6XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCisgICAgICAgICAgICAocidhOmJcYzxkPmV8ZiJnP2gqaScsICdiL2NfZF9lX2ZfZ19oX2knKSwKKyAgICAgICAgICAgICgnLi4vLi4vZm9vLi4vLi4vYmEuLnInLCAnZm9vL2JhLi5yJyksCiAgICAgICAgIF0KICAgICAgICAgc2VsZi5fdGVzdF9leHRyYWN0X2hhY2tlcnNfYXJjbmFtZXMod2luZG93c19oYWNrbmFtZXMpCiAKQEAgLTgyNyw2ICs4NzksMTcgQEAKICAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLnJlYWQoaW5mbykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGF0YSwge2IiZm9vYmFyIiwgYiJiYXJmb28ifSkKIAorICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3NwYW0udHh0JywgYidhYmFiYWdhbGFtYWdhJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIG1vZGUgaW4gJ1UnLCAnclUnOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgICAgICB6aXBvcGVuID0gemlwZnAub3Blbignc3BhbS50eHQnLCBtb2RlKQorICAgICAgICAgICAgICAgIHppcG9wZW4uY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfdW5pdmVyc2FsX3JlYWRhaGVhZHMoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKIApAQCAtODM2LDcgKzg5OSw3IEBACiAKICAgICAgICAgZGF0YTIgPSBiJycKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgJ3InKSBhcyB6aXBmcCwgXAotICAgICAgICAgICAgIHppcGZwLm9wZW4oVEVTVEZOLCAnclUnKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgIG9wZW5VKHppcGZwLCBURVNURk4pIGFzIHppcG9wZW46CiAgICAgICAgICAgICBmb3IgbGluZSBpbiB6aXBvcGVuOgogICAgICAgICAgICAgICAgIGRhdGEyICs9IGxpbmUKIApAQCAtODc3LDEwICs5NDAsMTAgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF92ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIEZpbGUgaGFzIGFuIGV4dHJhY3RfdmVyc2lvbiBvZiAxMjAKICAgICAgICAgZGF0YSA9IChiJ1BLXHgwM1x4MDR4XHgwMFx4MDBceDAwXHgwMFx4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2JworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB6aXBmaWxlLlppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8oZGF0YSksICdyJykKQEAgLTkxMyw3ICs5NzYsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdhJykgYXMgemY6CiAgICAgICAgICAgICAgICAgemYud3JpdGVzdHIoZmlsZW5hbWUsIGNvbnRlbnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgnQ291bGQgbm90IGFwcGVuZCBkYXRhIHRvIGEgbm9uLWV4aXN0ZW50IHppcCBmaWxlLicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCkBAIC05ODUsNyArMTA0OCw3IEBACiAgICAgICAgIGZwLnNlZWsoMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZpbGUuaXNfemlwZmlsZShmcCkpCiAKLSAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfSU9FcnJvcihzZWxmKToKKyAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfT1NFcnJvcihzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgcmFpc2UgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBhIHBhcnRpYWxseS1jb25zdHJ1Y3RlZAogICAgICAgICAjIFppcEZpbGUgaW5zdGFuY2UgaXMgZmluYWxpemVkOyB0aGlzIHRlc3RzIGZvciByZWdyZXNzaW9uIG9uIFNGIHRyYWNrZXIKICAgICAgICAgIyBidWcgIzQwMzg3MS4KQEAgLTk5Nyw3ICsxMDYwLDcgQEAKICAgICAgICAgIyBpdCBpcyBpZ25vcmVkLCBidXQgdGhlIHVzZXIgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSBhbm5veWVkIGJ5CiAgICAgICAgICMgdGhlIG1lc3NhZ2Ugb24gdGhlIG91dHB1dCB0aGF0IHJlZ3Jlc3Npb24gd2lsbCBiZSBub3RpY2VkCiAgICAgICAgICMgcXVpY2tseS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZV9yYWlzZXNfQmFkWmlwRmlsZShzZWxmKToKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCkBAIC0xMDY2LDExICsxMTI5LDExIEBACiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfY29tcHJlc3Npb24oc2VsZik6CiAgICAgICAgICMgZGF0YSBpcyBkZWNsYXJlZCBhcyBzaHJ1bmssIGJ1dCBhY3R1YWxseSBkZWZsYXRlZAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNC5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKLSAgICAgICAgYidceDAyLlx4MDMuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJwotICAgICAgICBiJy9ceDAwXHgwMFx4MDAhXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKKyAgICAgICAgICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJworICAgICAgICAgICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oZGF0YSksICdyJykgYXMgemlwZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGYub3BlbiwgJ3gnKQogCkBAIC0xMTg0LDcgKzEyNDcsNyBAQAogICAgIGRlZiB0ZXN0X29wZW5fZW1wdHlfZmlsZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzEwNzAzOiBDaGVjayB0aGF0IG9wZW5pbmcgYSBmaWxlIHdpdGggbGVzcyB0aGFuIDIyIGJ5dGVzCiAgICAgICAgICMgcmFpc2VzIGEgQmFkWmlwRmlsZSBleGNlcHRpb24gKHJhdGhlciB0aGFuIHRoZSBwcmV2aW91c2x5IHVuaGVscGZ1bAotICAgICAgICAjIElPRXJyb3IpCisgICAgICAgICMgT1NFcnJvcikKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcEZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCkBAIC0xMjMyLDU3ICsxMjk1LDU3IEBACiBjbGFzcyBTdG9yZWRCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCi0gICAgICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJwotICAgICAgICAgICAgYidpbGVoZWxsbyxBd29ybGRQJwotICAgICAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCi0gICAgICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCi0gICAgICAgICAgICBiJ1wwXDBcMFwwXDBcMFwwXDIwMFwwMDFcMFwwXDBcMDAwYWZpJwotICAgICAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCi0gICAgICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCisgICAgICAgIGInUEtcMDAzXDAwNFwwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzpyJworICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJworICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCisgICAgICAgIGInS1wwMDFcMDAyXDAyNFwwMDNcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6JworICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCisgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCisgICAgICAgIGInbGVQS1wwMDVcMDA2XDBcMFwwXDBcMDAxXDBcMDAxXDAwMDNcMDAwJworICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCiAKIEByZXF1aXJlc196bGliCiBjbGFzcyBEZWZsYXRlQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfREVGTEFURUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbn1ceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJwotICAgICAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJwotICAgICAgICAgICAgYic9XHgxM1x4MDBQS1x4MDFceDAyXHgxNFx4MDNceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBuJwotICAgICAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwYWZpbGVQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwJwotICAgICAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCisgICAgICAgIGInS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJworICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCisgICAgICAgIGInfVx4MGM9RkFLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNScKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCisgICAgICAgIGInXHgwMVx4MDAzXHgwMFx4MDBceDAwM1x4MDBceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2J6MgogY2xhc3MgQnppcDJCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9CWklQMgogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFOFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCi0gICAgICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCi0gICAgICAgICAgICBiJ1BceGQ5IVx4MDNceDAzXHgxM1x4MTNceDEzXHg4OVx4YTlceGE5XHhjMnU1Olx4OWYnCi0gICAgICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCi0gICAgICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCi0gICAgICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVCWmg5MUFZJlNZXHhkNFx4YThceGNhJworICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCisgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKKyAgICAgICAgYidceDhiXHhiOSJceDljKEhqVGU/XHg4MFBLXHgwMVx4MDJceDE0JworICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCisgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsZVBLJworICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCiAKIEByZXF1aXJlc19sem1hCiBjbGFzcyBMem1hQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfTFpNQQogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJwotICAgICAgICAgICAgYidceGVlXHg4ZFx4ZTlceDE3XHg4OTozYFx0cSEuOFx4MDBQSycKLSAgICAgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbCcKLSAgICAgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJworICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJworICAgICAgICBiJ1x4MDFceDAyXHgxNFx4MDNceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJworICAgICAgICBiJ2VQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDAnCisgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAKIAogY2xhc3MgRGVjcnlwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEyOTEsMjIgKzEzNTQsMjIgQEAKICAgICBaSVAgZmlsZS4iIiIKIAogICAgIGRhdGEgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCi0gICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JwotICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJwotICAgIGInUEtceDAxXHgwMlx4MTRceDAwXHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwJwotICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJwotICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCi0gICAgYidceDAwXHgwMExceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JworICAgICAgICBiJ1x4MThceGUwXHhhOHJceGIzWn1MZ1x4YmNceGFlXHhmOXxceDliXHgxOVx4ZTRceDhiXHhiYVx4YmIpXHg4Y1x4YjBceGRibCcKKyAgICAgICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDB0ZXN0LnR4dFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDZceDAwJworICAgICAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCiAgICAgZGF0YTIgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJwotICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JwotICAgIGInXHgwMFx4ZThceDAzXHhlOFx4MDNceGM3PE1ceGI1YVx4Y2VYXHhhM1kmXHg4YntvRVx4ZDdceDlkXHg4Y1x4OThceDAyXHhjMCcKLSAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCi0gICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICBiJ1x4MDRceDAwXHJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDBceDAwXHgwMFx4MDB6ZScKLSAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKLSAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJworICAgICAgICBiJ1x4MDBceDAwXHgwNFx4MDBceDE1XHgwMHplcm9VVFx0XHgwMFx4MDNceGQ2XHg4Ylx4OTJHXHhkYVx4OGJceDkyR1V4XHgwNCcKKyAgICAgICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJworICAgICAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCisgICAgICAgIGInXHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJworICAgICAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKKyAgICAgICAgYidceDAwXHgwMVx4MDA/XHgwMFx4MDBceDAwW1x4MDBceDAwXHgwMFx4MDBceDAwJyApCiAKICAgICBwbGFpbiA9IGInemlwZmlsZS5weSBlbmNyeXB0aW9uIHRlc3QnCiAgICAgcGxhaW4yID0gYidceDAwJyo1MTIKQEAgLTE1NjUsNyArMTYyOCw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgemlwZGF0YSA9IGZwLnJlYWQoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmNkYXRhW3NlcF0sIHppcGRhdGEpCiAKQEAgLTE1NzksNyArMTY0Miw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIHppcG9wZW46CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKQEAgLTE2MDQsNyArMTY2Nyw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIHppcG9wZW46CiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lZGF0YSwgbGluZSArIGInXG4nKQpAQCAtMTYxOSw3ICsxNjgyLDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICB6aXBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCiAgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgYidcbicpCkBAIC0xNjM0LDcgKzE2OTcsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCBmcCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyBiJ1xuJykKIApAQCAtMTY2OCw2ICsxNzMxLDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfTFpNQQogCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CmluZGV4IGE4ZmI3YWIuLjQ5OGQ0NjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CkBAIC0zOCw3ICszOCw3IEBACiAKICAgICBkZWYgemlwVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZS4KLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1UcnVlKQorICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgSXQgd2lsbCBjb250YWluIGVub3VnaCBjb3BpZXMgb2Ygc2VsZi5kYXRhIHRvIHJlYWNoIGFib3V0IDZHQiBvZgogICAgICAgICAjIHJhdyBkYXRhIHRvIHN0b3JlLgpAQCAtOTIsNyArOTIsNyBAQAogICAgIGRlZiB0ZXN0TW9yZVRoYW42NGtGaWxlcyhzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgbW9yZSB0aGFuIDY0ayBmaWxlcyBjYW4gYmUgYWRkZWQgdG8gYW4gYXJjaGl2ZSwKICAgICAgICAgIyBhbmQgdGhhdCB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgY2FuIGJlIHJlYWQgcHJvcGVybHkgYnkgWmlwRmlsZQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IiwgYWxsb3daaXA2ND1GYWxzZSkKICAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAogICAgICAgICBudW1maWxlcyA9ICgxIDw8IDE2KSAqIDMvLzIKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQppbmRleCBmN2NiOGI5Li4zZjE2MDQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQpAQCAtMSwxMyArMSwxMiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgbWFyc2hhbAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlLCB0ZXN0X3NyYywgdGVzdF9jbwogCiBmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUsIFppcEluZm8sIFpJUF9TVE9SRUQsIFpJUF9ERUZMQVRFRAogCkBAIC0xNyw2ICsxNiwxNCBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBpbwogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGV4dHJhY3RfdGIsIGV4dHJhY3Rfc3RhY2ssIHByaW50X3RiCisKK3Rlc3Rfc3JjID0gIiIiXAorZGVmIGdldF9uYW1lKCk6CisgICAgcmV0dXJuIF9fbmFtZV9fCitkZWYgZ2V0X2ZpbGUoKToKKyAgICByZXR1cm4gX19maWxlX18KKyIiIgordGVzdF9jbyA9IGNvbXBpbGUodGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKIHJhaXNlX3NyYyA9ICdkZWYgZG9fcmFpc2UoKTogcmFpc2UgVHlwZUVycm9yXG4nCiAKIGRlZiBtYWtlX3B5YyhjbywgbXRpbWUsIHNpemUpOgpAQCAtMjcsNyArMzQsOCBAQAogICAgICAgICAgICAgbXRpbWUgPSBpbnQobXRpbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtdGltZSA9IGludCgtMHgxMDAwMDAwMDAgKyBpbnQobXRpbWUpKQotICAgIHB5YyA9IGltcC5nZXRfbWFnaWMoKSArIHN0cnVjdC5wYWNrKCI8aWkiLCBpbnQobXRpbWUpLCBzaXplICYgMHhGRkZGRkZGRikgKyBkYXRhCisgICAgcHljID0gKGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiArCisgICAgICAgIHN0cnVjdC5wYWNrKCI8aWkiLCBpbnQobXRpbWUpLCBzaXplICYgMHhGRkZGRkZGRikgKyBkYXRhKQogICAgIHJldHVybiBweWMKIAogZGVmIG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKHBhdGgpOgpAQCAtNDIsMTAgKzUwLDI3IEBACiBURVNUUEFDSzIgPSAiemlwdGVzdHBhY2thZ2UyIgogVEVNUF9aSVAgPSBvcy5wYXRoLmFic3BhdGgoImp1bms5NTE0Mi56aXAiKQogCi1weWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShURVNUTU9EICsgJy5weScpCitweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKIHB5Y19leHQgPSAoJy5weWMnIGlmIF9fZGVidWdfXyBlbHNlICcucHlvJykKIAogCitjbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYubWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aFs6XQorICAgICAgICBzZWxmLnBhdGhfaG9va3MgPSBzeXMucGF0aF9ob29rc1s6XQorICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHNlbGYubW9kdWxlc19iZWZvcmUgPSBzdXBwb3J0Lm1vZHVsZXNfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAorICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKKyAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzdXBwb3J0Lm1vZHVsZXNfY2xlYW51cCgqc2VsZi5tb2R1bGVzX2JlZm9yZSkKKworCiBjbGFzcyBVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6CiAKICAgICBjb21wcmVzc2lvbiA9IFpJUF9TVE9SRUQKQEAgLTE5Niw2ICsyMjEsNyBAQAogICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQogICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgemluZm8uY29tbWVudCA9IGIic3BhbSIKICAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQogICAgICAgICAgICAgei5jbG9zZSgpCiAKQEAgLTI0NSw2ICsyNzEsNyBAQAogICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQogICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgemluZm8uY29tbWVudCA9IGIiZWdncyIKICAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQogICAgICAgICAgICAgei5jbG9zZSgpCiAKQEAgLTQ1OSw3ICs0ODYsNyBAQAogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5sb2FkX21vZHVsZSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfY29kZSwgJ2FiYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6LmdldF9kYXRhLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouZ2V0X3NvdXJjZSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5pc19wYWNrYWdlLCAnYWJjJykKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CmluZGV4IGY3ZjMzOTguLjg0YmE1ZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQpAQCAtMjI3LDEzICsyMjcsMTUgQEAKICAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGInbFxuJykKICAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzY3JpcHRfbmFtZS5lbmNvZGUoJ3V0Zi04JyksIGRhdGEpCisgICAgICAgICAgICAjIGJkYi9wZGIgYXBwbGllcyBub3JtY2FzZSB0byBpdHMgZmlsZW5hbWUgYmVmb3JlIGRpc3BsYXlpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5ub3JtY2FzZShzY3JpcHRfbmFtZS5lbmNvZGUoJ3V0Zi04JykpLCBkYXRhKQogICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICJ0ZXN0X3ppcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ19fbWFpbl9fLnB5JykKICAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oemlwX25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGInbFxuJykKICAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihydW5fbmFtZS5lbmNvZGUoJ3V0Zi04JyksIGRhdGEpCisgICAgICAgICAgICAjIGJkYi9wZGIgYXBwbGllcyBub3JtY2FzZSB0byBpdHMgZmlsZW5hbWUgYmVmb3JlIGRpc3BsYXlpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5ub3JtY2FzZShydW5fbmFtZS5lbmNvZGUoJ3V0Zi04JykpLCBkYXRhKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CmluZGV4IDkyZWJkOTUuLmFmZTUwZDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKKysrIGIvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQpAQCAtMTEsNyArMTEsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBvcy53cml0ZShmZCwgYiJibGF0IikKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3VjY2VzcyAtLSBjb3VsZCBub3Qgd3JpdGUgdG8gZmQuCiAgICAgICAgIHN5cy5leGl0KDApCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXh0d3JhcC5weSBiL0xpYi90ZXh0d3JhcC5weQppbmRleCA3MDI0ZDRkLi4yNDg5MTgwIDEwMDY0NAotLS0gYS9MaWIvdGV4dHdyYXAucHkKKysrIGIvTGliL3RleHR3cmFwLnB5CkBAIC03LDcgKzcsNyBAQAogCiBpbXBvcnQgcmUKIAotX19hbGxfXyA9IFsnVGV4dFdyYXBwZXInLCAnd3JhcCcsICdmaWxsJywgJ2RlZGVudCcsICdpbmRlbnQnXQorX19hbGxfXyA9IFsnVGV4dFdyYXBwZXInLCAnd3JhcCcsICdmaWxsJywgJ2RlZGVudCcsICdpbmRlbnQnLCAnc2hvcnRlbiddCiAKICMgSGFyZGNvZGUgdGhlIHJlY29nbml6ZWQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIHRoZSBVUy1BU0NJSQogIyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBUaGUgbWFpbiByZWFzb24gZm9yIGRvaW5nIHRoaXMgaXMgdGhhdCBpbgpAQCAtNjIsNiArNjIsMTAgQEAKICAgICAgICAgY29tcG91bmQgd29yZHMuCiAgICAgICBkcm9wX3doaXRlc3BhY2UgKGRlZmF1bHQ6IHRydWUpCiAgICAgICAgIERyb3AgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGxpbmVzLgorICAgICAgbWF4X2xpbmVzIChkZWZhdWx0OiBOb25lKQorICAgICAgICBUcnVuY2F0ZSB3cmFwcGVkIGxpbmVzLgorICAgICAgcGxhY2Vob2xkZXIgKGRlZmF1bHQ6ICcgWy4uLl0nKQorICAgICAgICBBcHBlbmQgdG8gdGhlIGxhc3QgbGluZSBvZiB0cnVuY2F0ZWQgdGV4dC4KICAgICAiIiIKIAogICAgIHVuaWNvZGVfd2hpdGVzcGFjZV90cmFucyA9IHt9CkBAIC0xMDQsNyArMTA4LDEwIEBACiAgICAgICAgICAgICAgICAgIGJyZWFrX2xvbmdfd29yZHM9VHJ1ZSwKICAgICAgICAgICAgICAgICAgZHJvcF93aGl0ZXNwYWNlPVRydWUsCiAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2h5cGhlbnM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgdGFic2l6ZT04KToKKyAgICAgICAgICAgICAgICAgdGFic2l6ZT04LAorICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbLi4uXScpOgogICAgICAgICBzZWxmLndpZHRoID0gd2lkdGgKICAgICAgICAgc2VsZi5pbml0aWFsX2luZGVudCA9IGluaXRpYWxfaW5kZW50CiAgICAgICAgIHNlbGYuc3Vic2VxdWVudF9pbmRlbnQgPSBzdWJzZXF1ZW50X2luZGVudApAQCAtMTE1LDYgKzEyMiw4IEBACiAgICAgICAgIHNlbGYuZHJvcF93aGl0ZXNwYWNlID0gZHJvcF93aGl0ZXNwYWNlCiAgICAgICAgIHNlbGYuYnJlYWtfb25faHlwaGVucyA9IGJyZWFrX29uX2h5cGhlbnMKICAgICAgICAgc2VsZi50YWJzaXplID0gdGFic2l6ZQorICAgICAgICBzZWxmLm1heF9saW5lcyA9IG1heF9saW5lcworICAgICAgICBzZWxmLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIKIAogCiAgICAgIyAtLSBQcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyMyw2ICsyMzIsMTMgQEAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBzZWxmLndpZHRoIDw9IDA6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdpZHRoICVyIChtdXN0IGJlID4gMCkiICUgc2VsZi53aWR0aCkKKyAgICAgICAgaWYgc2VsZi5tYXhfbGluZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm1heF9saW5lcyA+IDE6CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc2VsZi5zdWJzZXF1ZW50X2luZGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLmluaXRpYWxfaW5kZW50CisgICAgICAgICAgICBpZiBsZW4oaW5kZW50KSArIGxlbihzZWxmLnBsYWNlaG9sZGVyLmxzdHJpcCgpKSA+IHNlbGYud2lkdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGxhY2Vob2xkZXIgdG9vIGxhcmdlIGZvciBtYXggd2lkdGgiKQogCiAgICAgICAgICMgQXJyYW5nZSBpbiByZXZlcnNlIG9yZGVyIHNvIGl0ZW1zIGNhbiBiZSBlZmZpY2llbnRseSBwb3BwZWQKICAgICAgICAgIyBmcm9tIGEgc3RhY2sgb2YgY2h1Y2tzLgpAQCAtMjY1LDE4ICsyODEsNDcgQEAKICAgICAgICAgICAgICMgZml0IG9uICphbnkqIGxpbmUgKG5vdCBqdXN0IHRoaXMgb25lKS4KICAgICAgICAgICAgIGlmIGNodW5rcyBhbmQgbGVuKGNodW5rc1stMV0pID4gd2lkdGg6CiAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2xvbmdfd29yZChjaHVua3MsIGN1cl9saW5lLCBjdXJfbGVuLCB3aWR0aCkKKyAgICAgICAgICAgICAgICBjdXJfbGVuID0gc3VtKG1hcChsZW4sIGN1cl9saW5lKSkKIAogICAgICAgICAgICAgIyBJZiB0aGUgbGFzdCBjaHVuayBvbiB0aGlzIGxpbmUgaXMgYWxsIHdoaXRlc3BhY2UsIGRyb3AgaXQuCiAgICAgICAgICAgICBpZiBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQgY3VyX2xpbmUgYW5kIGN1cl9saW5lWy0xXS5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgICAgIGN1cl9sZW4gLT0gbGVuKGN1cl9saW5lWy0xXSkKICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCiAKLSAgICAgICAgICAgICMgQ29udmVydCBjdXJyZW50IGxpbmUgYmFjayB0byBhIHN0cmluZyBhbmQgc3RvcmUgaXQgaW4gbGlzdAotICAgICAgICAgICAgIyBvZiBhbGwgbGluZXMgKHJldHVybiB2YWx1ZSkuCiAgICAgICAgICAgICBpZiBjdXJfbGluZToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgaWYgKHNlbGYubWF4X2xpbmVzIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICAgICAgbGVuKGxpbmVzKSArIDEgPCBzZWxmLm1heF9saW5lcyBvcgorICAgICAgICAgICAgICAgICAgICAobm90IGNodW5rcyBvcgorICAgICAgICAgICAgICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgICBsZW4oY2h1bmtzKSA9PSAxIGFuZAorICAgICAgICAgICAgICAgICAgICAgbm90IGNodW5rc1swXS5zdHJpcCgpKSBhbmQgY3VyX2xlbiA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICMgQ29udmVydCBjdXJyZW50IGxpbmUgYmFjayB0byBhIHN0cmluZyBhbmQgc3RvcmUgaXQgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0IG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGN1cl9saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cl9saW5lWy0xXS5zdHJpcCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9sZW4gKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0gd2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9saW5lLmFwcGVuZChzZWxmLnBsYWNlaG9sZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGN1cl9saW5lWy0xXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9saW5lID0gbGluZXNbLTFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihwcmV2X2xpbmUpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIpIDw9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbLTFdID0gcHJldl9saW5lICsgc2VsZi5wbGFjZWhvbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArIHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgcmV0dXJuIGxpbmVzCiAKKyAgICBkZWYgX3NwbGl0X2NodW5rcyhzZWxmLCB0ZXh0KToKKyAgICAgICAgdGV4dCA9IHNlbGYuX211bmdlX3doaXRlc3BhY2UodGV4dCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0KHRleHQpCiAKICAgICAjIC0tIFB1YmxpYyBpbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yODksOCArMzM0LDcgQEAKICAgICAgICAgYW5kIGFsbCBvdGhlciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBuZXdsaW5lKSBhcmUKICAgICAgICAgY29udmVydGVkIHRvIHNwYWNlLgogICAgICAgICAiIiIKLSAgICAgICAgdGV4dCA9IHNlbGYuX211bmdlX3doaXRlc3BhY2UodGV4dCkKLSAgICAgICAgY2h1bmtzID0gc2VsZi5fc3BsaXQodGV4dCkKKyAgICAgICAgY2h1bmtzID0gc2VsZi5fc3BsaXRfY2h1bmtzKHRleHQpCiAgICAgICAgIGlmIHNlbGYuZml4X3NlbnRlbmNlX2VuZGluZ3M6CiAgICAgICAgICAgICBzZWxmLl9maXhfc2VudGVuY2VfZW5kaW5ncyhjaHVua3MpCiAgICAgICAgIHJldHVybiBzZWxmLl93cmFwX2NodW5rcyhjaHVua3MpCkBAIC0zMzIsNiArMzc2LDIxIEBACiAgICAgdyA9IFRleHRXcmFwcGVyKHdpZHRoPXdpZHRoLCAqKmt3YXJncykKICAgICByZXR1cm4gdy5maWxsKHRleHQpCiAKK2RlZiBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncyk6CisgICAgIiIiQ29sbGFwc2UgYW5kIHRydW5jYXRlIHRoZSBnaXZlbiB0ZXh0IHRvIGZpdCBpbiB0aGUgZ2l2ZW4gd2lkdGguCisKKyAgICBUaGUgdGV4dCBmaXJzdCBoYXMgaXRzIHdoaXRlc3BhY2UgY29sbGFwc2VkLiAgSWYgaXQgdGhlbiBmaXRzIGluCisgICAgdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkIGFzIGlzLiAgT3RoZXJ3aXNlLCBhcyBtYW55IHdvcmRzCisgICAgYXMgcG9zc2libGUgYXJlIGpvaW5lZCBhbmQgdGhlbiB0aGUgcGxhY2Vob2xkZXIgaXMgYXBwZW5kZWQ6OgorCisgICAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTIpCisgICAgICAgICdIZWxsbyB3b3JsZCEnCisgICAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTEpCisgICAgICAgICdIZWxsbyBbLi4uXScKKyAgICAiIiIKKyAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsIG1heF9saW5lcz0xLCAqKmt3YXJncykKKyAgICByZXR1cm4gdy5maWxsKCcgJy5qb2luKHRleHQuc3RyaXAoKS5zcGxpdCgpKSkKKwogCiAjIC0tIExvb3NlbHkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvTGliL3RocmVhZGluZy5weSBiL0xpYi90aHJlYWRpbmcucHkKaW5kZXggNjI1YzliOS4uZDkwN2M4OSAxMDA2NDQKLS0tIGEvTGliL3RocmVhZGluZy5weQorKysgYi9MaWIvdGhyZWFkaW5nLnB5CkBAIC0xMCw2ICsxMCwxMSBAQAogICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMgYXMgX2Zvcm1hdF9leGMKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UgYXMgX2lzbGljZQordHJ5OgorICAgIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKIAogIyBOb3RlIHJlZ2FyZGluZyBQRVAgOCBjb21wbGlhbnQgbmFtZXMKICMgIFRoaXMgdGhyZWFkaW5nIG1vZGVsIHdhcyBvcmlnaW5hbGx5IGluc3BpcmVkIGJ5IEphdmEsIGFuZCBpbmhlcml0ZWQKQEAgLTI4LDYgKzMzLDcgQEAKICMgUmVuYW1lIHNvbWUgc3R1ZmYgc28gImZyb20gdGhyZWFkaW5nIGltcG9ydCAqIiBpcyBzYWZlCiBfc3RhcnRfbmV3X3RocmVhZCA9IF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKK19zZXRfc2VudGluZWwgPSBfdGhyZWFkLl9zZXRfc2VudGluZWwKIGdldF9pZGVudCA9IF90aHJlYWQuZ2V0X2lkZW50CiBUaHJlYWRFcnJvciA9IF90aHJlYWQuZXJyb3IKIHRyeToKQEAgLTEzMiw3ICsxMzgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgbWUgPSBnZXRfaWRlbnQoKQogICAgICAgICBpZiBzZWxmLl9vd25lciA9PSBtZToKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ID0gc2VsZi5fY291bnQgKyAxCisgICAgICAgICAgICBzZWxmLl9jb3VudCArPSAxCiAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICByYyA9IHNlbGYuX2Jsb2NrLmFjcXVpcmUoYmxvY2tpbmcsIHRpbWVvdXQpCiAgICAgICAgIGlmIHJjOgpAQCAtMjI0LDcgKzIzMCw3IEBACiAgICAgICAgICAgICBzZWxmLl9pc19vd25lZCA9IGxvY2suX2lzX293bmVkCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5fd2FpdGVycyA9IFtdCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBfZGVxdWUoKQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKQEAgLTMzMiwxNCArMzM4LDE0IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBub3Qgc2VsZi5faXNfb3duZWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrIikKLSAgICAgICAgX193YWl0ZXJzID0gc2VsZi5fd2FpdGVycwotICAgICAgICB3YWl0ZXJzID0gX193YWl0ZXJzWzpuXQotICAgICAgICBpZiBub3Qgd2FpdGVyczoKKyAgICAgICAgYWxsX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCisgICAgICAgIHdhaXRlcnNfdG9fbm90aWZ5ID0gX2RlcXVlKF9pc2xpY2UoYWxsX3dhaXRlcnMsIG4pKQorICAgICAgICBpZiBub3Qgd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzOgorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnNfdG9fbm90aWZ5OgogICAgICAgICAgICAgd2FpdGVyLnJlbGVhc2UoKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIF9fd2FpdGVycy5yZW1vdmUod2FpdGVyKQorICAgICAgICAgICAgICAgIGFsbF93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTQxNCw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgc2VsZi5fY29uZC53YWl0KHRpbWVvdXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gc2VsZi5fdmFsdWUgLSAxCisgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgLT0gMQogICAgICAgICAgICAgICAgIHJjID0gVHJ1ZQogICAgICAgICByZXR1cm4gcmMKIApAQCAtNDI4LDcgKzQzNCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fY29uZDoKLSAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gc2VsZi5fdmFsdWUgKyAxCisgICAgICAgICAgICBzZWxmLl92YWx1ZSArPSAxCiAgICAgICAgICAgICBzZWxmLl9jb25kLm5vdGlmeSgpCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgpAQCAtNzIzLDE1ICs3MjksMTMgQEAKIF9jb3VudGVyID0gMAogZGVmIF9uZXduYW1lKHRlbXBsYXRlPSJUaHJlYWQtJWQiKToKICAgICBnbG9iYWwgX2NvdW50ZXIKLSAgICBfY291bnRlciA9IF9jb3VudGVyICsgMQorICAgIF9jb3VudGVyICs9IDEKICAgICByZXR1cm4gdGVtcGxhdGUgJSBfY291bnRlcgogCiAjIEFjdGl2ZSB0aHJlYWQgYWRtaW5pc3RyYXRpb24KIF9hY3RpdmVfbGltYm9fbG9jayA9IF9hbGxvY2F0ZV9sb2NrKCkKIF9hY3RpdmUgPSB7fSAgICAjIG1hcHMgdGhyZWFkIGlkIHRvIFRocmVhZCBvYmplY3QKIF9saW1ibyA9IHt9Ci0KLSMgRm9yIGRlYnVnIGFuZCBsZWFrIHRlc3RpbmcKIF9kYW5nbGluZyA9IFdlYWtTZXQoKQogCiAjIE1haW4gY2xhc3MgZm9yIHRocmVhZHMKQEAgLTc5MCwyOCArNzk0LDM1IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGN1cnJlbnRfdGhyZWFkKCkuZGFlbW9uCiAgICAgICAgIHNlbGYuX2lkZW50ID0gTm9uZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKICAgICAgICAgc2VsZi5fc3RhcnRlZCA9IEV2ZW50KCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2Jsb2NrID0gQ29uZGl0aW9uKExvY2soKSkKKyAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2luaXRpYWxpemVkID0gVHJ1ZQogICAgICAgICAjIHN5cy5zdGRlcnIgaXMgbm90IHN0b3JlZCBpbiB0aGUgY2xhc3MgbGlrZQogICAgICAgICAjIHN5cy5leGNfaW5mbyBzaW5jZSBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIGluc3RhbmNlcwogICAgICAgICBzZWxmLl9zdGRlcnIgPSBfc3lzLnN0ZGVycgorICAgICAgICAjIEZvciBkZWJ1Z2dpbmcgYW5kIF9hZnRlcl9mb3JrKCkKICAgICAgICAgX2RhbmdsaW5nLmFkZChzZWxmKQogCi0gICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmKToKKyAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYsIGlzX2FsaXZlKToKICAgICAgICAgIyBwcml2YXRlISAgQ2FsbGVkIGJ5IF9hZnRlcl9mb3JrKCkgdG8gcmVzZXQgb3VyIGludGVybmFsIGxvY2tzIGFzCiAgICAgICAgICMgdGhleSBtYXkgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSBsZWFkaW5nIHRvIGEgZGVhZGxvY2sgb3IgY3Jhc2guCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19ibG9jaycpOiAgIyBEdW1teVRocmVhZCBkZWxldGVzIF9ibG9jawotICAgICAgICAgICAgc2VsZi5fYmxvY2suX19pbml0X18oKQogICAgICAgICBzZWxmLl9zdGFydGVkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCisgICAgICAgIGlmIGlzX2FsaXZlOgorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIHRocmVhZCBpc24ndCBhbGl2ZSBhZnRlciBmb3JrOiBpdCBkb2Vzbid0IGhhdmUgYSB0c3RhdGUKKyAgICAgICAgICAgICMgYW55bW9yZS4KKyAgICAgICAgICAgIHNlbGYuX2lzX3N0b3BwZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2luaXRpYWxpemVkLCAiVGhyZWFkLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQiCiAgICAgICAgIHN0YXR1cyA9ICJpbml0aWFsIgogICAgICAgICBpZiBzZWxmLl9zdGFydGVkLmlzX3NldCgpOgogICAgICAgICAgICAgc3RhdHVzID0gInN0YXJ0ZWQiCi0gICAgICAgIGlmIHNlbGYuX3N0b3BwZWQ6CisgICAgICAgIHNlbGYuaXNfYWxpdmUoKSAjIGVhc3kgd2F5IHRvIGdldCAuX2lzX3N0b3BwZWQgc2V0IHdoZW4gYXBwcm9wcmlhdGUKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZDoKICAgICAgICAgICAgIHN0YXR1cyA9ICJzdG9wcGVkIgogICAgICAgICBpZiBzZWxmLl9kYWVtb25pYzoKICAgICAgICAgICAgIHN0YXR1cyArPSAiIGRhZW1vbiIKQEAgLTg4NCw5ICs4OTUsMTggQEAKICAgICBkZWYgX3NldF9pZGVudChzZWxmKToKICAgICAgICAgc2VsZi5faWRlbnQgPSBnZXRfaWRlbnQoKQogCisgICAgZGVmIF9zZXRfdHN0YXRlX2xvY2soc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZXQgYSBsb2NrIG9iamVjdCB3aGljaCB3aWxsIGJlIHJlbGVhc2VkIGJ5IHRoZSBpbnRlcnByZXRlciB3aGVuCisgICAgICAgIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBzdGF0ZSAoc2VlIHB5c3RhdGUuaCkgZ2V0cyBkZWxldGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBfc2V0X3NlbnRpbmVsKCkKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2suYWNxdWlyZSgpCisKICAgICBkZWYgX2Jvb3RzdHJhcF9pbm5lcihzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKKyAgICAgICAgICAgIHNlbGYuX3NldF90c3RhdGVfbG9jaygpCiAgICAgICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgICAgICBfYWN0aXZlW3NlbGYuX2lkZW50XSA9IHNlbGYKQEAgLTk0MSw3ICs5NjEsNiBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNlbGYuX2RlbGV0ZSgpIGJlY2F1c2UgaXQgYWxzbwogICAgICAgICAgICAgICAgICAgICAjIGdyYWJzIF9hY3RpdmVfbGltYm9fbG9jay4KQEAgLTk1MCwxMCArOTY5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfc3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5fYmxvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX2Jsb2NrLm5vdGlmeV9hbGwoKQotICAgICAgICBzZWxmLl9ibG9jay5yZWxlYXNlKCkKKyAgICAgICAgIyBBZnRlciBjYWxsaW5nIC5fc3RvcCgpLCAuaXNfYWxpdmUoKSByZXR1cm5zIEZhbHNlIGFuZCAuam9pbigpIHJldHVybnMKKyAgICAgICAgIyBpbW1lZGlhdGVseS4gIC5fdHN0YXRlX2xvY2sgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgY2FsbGluZyAuX3N0b3AoKS4KKyAgICAgICAgIworICAgICAgICAjIE5vcm1hbCBjYXNlOiAgQyBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUKKyAgICAgICAgIyAocmVsZWFzZV9zZW50aW5lbCBpbiBfdGhyZWFkbW9kdWxlLmMpIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2ssIGFuZAorICAgICAgICAjIHRoYXQncyBkZXRlY3RlZCBieSBvdXIgLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpLCBjYWxsZWQgYnkgLmpvaW4oKQorICAgICAgICAjIGFuZCAuaXNfYWxpdmUoKS4gIEFueSBudW1iZXIgb2YgdGhyZWFkcyBfbWF5XyBjYWxsIC5fc3RvcCgpCisgICAgICAgICMgc2ltdWx0YW5lb3VzbHkgKGZvciBleGFtcGxlLCBpZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBibG9ja2VkIGluCisgICAgICAgICMgLmpvaW4oKSBjYWxscyksIGFuZCB0aGV5J3JlIG5vdCBzZXJpYWxpemVkLiAgVGhhdCdzIGhhcm1sZXNzIC0KKyAgICAgICAgIyB0aGV5J2xsIGp1c3QgbWFrZSByZWR1bmRhbnQgcmViaW5kaW5ncyBvZiAuX2lzX3N0b3BwZWQgYW5kCisgICAgICAgICMgLl90c3RhdGVfbG9jay4gIE9ic2N1cmU6ICB3ZSByZWJpbmQgLl90c3RhdGVfbG9jayBsYXN0IHNvIHRoYXQgdGhlCisgICAgICAgICMgImFzc2VydCBzZWxmLl9pc19zdG9wcGVkIiBpbiAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkgYWx3YXlzIHdvcmtzCisgICAgICAgICMgKHRoZSBhc3NlcnQgaXMgZXhlY3V0ZWQgb25seSBpZiAuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpLgorICAgICAgICAjCisgICAgICAgICMgU3BlY2lhbCBjYXNlOiAgX21haW5fdGhyZWFkIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2sgdmlhIHRoaXMKKyAgICAgICAgIyBtb2R1bGUncyBfc2h1dGRvd24oKSBmdW5jdGlvbi4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgbm90IGxvY2subG9ja2VkKCkKKyAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAKICAgICBkZWYgX2RlbGV0ZShzZWxmKToKICAgICAgICAgIlJlbW92ZSBjdXJyZW50IHRocmVhZCBmcm9tIHRoZSBkaWN0IG9mIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZHMuIgpAQCAtMTAyMSwyMCArMTA1NywyNiBAQAogICAgICAgICBpZiBzZWxmIGlzIGN1cnJlbnRfdGhyZWFkKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBqb2luIGN1cnJlbnQgdGhyZWFkIikKIAotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBkZWxheSA9IGRlYWRsaW5lIC0gX3RpbWUoKQotICAgICAgICAgICAgICAgICAgICBpZiBkZWxheSA8PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmxvY2sud2FpdChkZWxheSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBiZWhhdmlvciBvZiBhIG5lZ2F0aXZlIHRpbWVvdXQgaXNuJ3QgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgICAgICAjIGhpc3RvcmljYWxseSAuam9pbih0aW1lb3V0PXgpIGZvciB4PDAgaGFzIGFjdGVkIGFzIGlmIHRpbWVvdXQ9MAorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2sodGltZW91dD1tYXgodGltZW91dCwgMCkpCisKKyAgICBkZWYgX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9LTEpOgorICAgICAgICAjIElzc3VlICMxODgwODogd2FpdCBmb3IgdGhlIHRocmVhZCBzdGF0ZSB0byBiZSBnb25lLgorICAgICAgICAjIEF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUsIGFmdGVyIGFsbCBrbm93bGVkZ2Ugb2YgdGhlIHRocmVhZAorICAgICAgICAjIGlzIHJlbW92ZWQgZnJvbSBDIGRhdGEgc3RydWN0dXJlcywgQyBjb2RlIHJlbGVhc2VzIG91ciBfdHN0YXRlX2xvY2suCisgICAgICAgICMgVGhpcyBtZXRob2QgcGFzc2VzIGl0cyBhcmd1bWVudHMgdG8gX3RzdGF0ZV9sb2NrLmFxdWlyZSgpLgorICAgICAgICAjIElmIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGUgQyBjb2RlIGlzIGRvbmUsIGFuZCBzZWxmLl9zdG9wKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGF0IHNldHMgLl9pc19zdG9wcGVkIHRvIFRydWUsIGFuZCAuX3RzdGF0ZV9sb2NrIHRvIE5vbmUuCisgICAgICAgIGxvY2sgPSBzZWxmLl90c3RhdGVfbG9jaworICAgICAgICBpZiBsb2NrIGlzIE5vbmU6ICAjIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBDIGNvZGUgaXMgZG9uZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQKKyAgICAgICAgZWxpZiBsb2NrLmFjcXVpcmUoYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIG5hbWUoc2VsZik6CkBAIC0xMDczLDcgKzExMTUsMTAgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2luaXRpYWxpemVkLCAiVGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCkgYW5kIG5vdCBzZWxmLl9zdG9wcGVkCisgICAgICAgIGlmIHNlbGYuX2lzX3N0b3BwZWQgb3Igbm90IHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2soRmFsc2UpCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faXNfc3RvcHBlZAogCiAgICAgaXNBbGl2ZSA9IGlzX2FsaXZlCiAKQEAgLTExNDksMjUgKzExOTQsMTIgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9Ik1haW5UaHJlYWQiLCBkYWVtb249RmFsc2UpCisgICAgICAgIHNlbGYuX3NldF90c3RhdGVfbG9jaygpCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CiAgICAgICAgICAgICBfYWN0aXZlW3NlbGYuX2lkZW50XSA9IHNlbGYKIAotICAgIGRlZiBfZXhpdGZ1bmMoc2VsZik6Ci0gICAgICAgIHNlbGYuX3N0b3AoKQotICAgICAgICB0ID0gX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCkKLSAgICAgICAgd2hpbGUgdDoKLSAgICAgICAgICAgIHQuam9pbigpCi0gICAgICAgICAgICB0ID0gX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCkKLSAgICAgICAgc2VsZi5fZGVsZXRlKCkKLQotZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgotICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgotICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIHJldHVybiB0Ci0gICAgcmV0dXJuIE5vbmUKLQogCiAjIER1bW15IHRocmVhZCBjbGFzcyB0byByZXByZXNlbnQgdGhyZWFkcyBub3Qgc3RhcnRlZCBoZXJlLgogIyBUaGVzZSBhcmVuJ3QgZ2FyYmFnZSBjb2xsZWN0ZWQgd2hlbiB0aGV5IGRpZSwgbm9yIGNhbiB0aGV5IGJlIHdhaXRlZCBmb3IuCkBAIC0xMTgyLDExICsxMjE0LDYgQEAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPV9uZXduYW1lKCJEdW1teS0lZCIpLCBkYWVtb249VHJ1ZSkKIAotICAgICAgICAjIFRocmVhZC5fYmxvY2sgY29uc3VtZXMgYW4gT1MtbGV2ZWwgbG9ja2luZyBwcmltaXRpdmUsIHdoaWNoCi0gICAgICAgICMgY2FuIG5ldmVyIGJlIHVzZWQgYnkgYSBfRHVtbXlUaHJlYWQuICBTaW5jZSBhIF9EdW1teVRocmVhZAotICAgICAgICAjIGluc3RhbmNlIGlzIGltbW9ydGFsLCB0aGF0J3MgYmFkLCBzbyByZWxlYXNlIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGRlbCBzZWxmLl9ibG9jawotCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CkBAIC0xMjQ4LDcgKzEyNzUsNDAgQEAKICMgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgaW50ZXJwcmV0ZXIKICMgKFB5X01haW4pIGFzIHRocmVhZGluZy5fc2h1dGRvd24uCiAKLV9zaHV0ZG93biA9IF9NYWluVGhyZWFkKCkuX2V4aXRmdW5jCitfbWFpbl90aHJlYWQgPSBfTWFpblRocmVhZCgpCisKK2RlZiBfc2h1dGRvd24oKToKKyAgICAjIE9ic2N1cmU6ICBvdGhlciB0aHJlYWRzIG1heSBiZSB3YWl0aW5nIHRvIGpvaW4gX21haW5fdGhyZWFkLiAgVGhhdCdzCisgICAgIyBkdWJpb3VzLCBidXQgc29tZSBjb2RlIGRvZXMgaXQuICBXZSBjYW4ndCB3YWl0IGZvciBDIGNvZGUgdG8gcmVsZWFzZQorICAgICMgdGhlIG1haW4gdGhyZWFkJ3MgdHN0YXRlX2xvY2sgLSB0aGF0IHdvbid0IGhhcHBlbiB1bnRpbCB0aGUgaW50ZXJwcmV0ZXIKKyAgICAjIGlzIG5lYXJseSBkZWFkLiAgU28gd2UgcmVsZWFzZSBpdCBoZXJlLiAgTm90ZSB0aGF0IGp1c3QgY2FsbGluZyBfc3RvcCgpCisgICAgIyBpc24ndCBlbm91Z2g6ICBvdGhlciB0aHJlYWRzIG1heSBhbHJlYWR5IGJlIHdhaXRpbmcgb24gX3RzdGF0ZV9sb2NrLgorICAgIHRsb2NrID0gX21haW5fdGhyZWFkLl90c3RhdGVfbG9jaworICAgICMgVGhlIG1haW4gdGhyZWFkIGlzbid0IGZpbmlzaGVkIHlldCwgc28gaXRzIHRocmVhZCBzdGF0ZSBsb2NrIGNhbid0IGhhdmUKKyAgICAjIGJlZW4gcmVsZWFzZWQuCisgICAgYXNzZXJ0IHRsb2NrIGlzIG5vdCBOb25lCisgICAgYXNzZXJ0IHRsb2NrLmxvY2tlZCgpCisgICAgdGxvY2sucmVsZWFzZSgpCisgICAgX21haW5fdGhyZWFkLl9zdG9wKCkKKyAgICB0ID0gX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCkKKyAgICB3aGlsZSB0OgorICAgICAgICB0LmpvaW4oKQorICAgICAgICB0ID0gX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCkKKyAgICBfbWFpbl90aHJlYWQuX2RlbGV0ZSgpCisKK2RlZiBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKToKKyAgICBmb3IgdCBpbiBlbnVtZXJhdGUoKToKKyAgICAgICAgaWYgbm90IHQuZGFlbW9uIGFuZCB0LmlzX2FsaXZlKCk6CisgICAgICAgICAgICByZXR1cm4gdAorICAgIHJldHVybiBOb25lCisKK2RlZiBtYWluX3RocmVhZCgpOgorICAgICIiIlJldHVybiB0aGUgbWFpbiB0aHJlYWQgb2JqZWN0LgorCisgICAgSW4gbm9ybWFsIGNvbmRpdGlvbnMsIHRoZSBtYWluIHRocmVhZCBpcyB0aGUgdGhyZWFkIGZyb20gd2hpY2ggdGhlCisgICAgUHl0aG9uIGludGVycHJldGVyIHdhcyBzdGFydGVkLgorICAgICIiIgorICAgIHJldHVybiBfbWFpbl90aHJlYWQKIAogIyBnZXQgdGhyZWFkLWxvY2FsIGltcGxlbWVudGF0aW9uLCBlaXRoZXIgZnJvbSB0aGUgdGhyZWFkCiAjIG1vZHVsZSwgb3IgZnJvbSB0aGUgcHl0aG9uIGZhbGxiYWNrCkBAIC0xMjY2LDI1ICsxMzI2LDMxIEBACiAKICAgICAjIFJlc2V0IF9hY3RpdmVfbGltYm9fbG9jaywgaW4gY2FzZSB3ZSBmb3JrZWQgd2hpbGUgdGhlIGxvY2sgd2FzIGhlbGQKICAgICAjIGJ5IGFub3RoZXIgKG5vbi1mb3JrZWQpIHRocmVhZC4gIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4NzQ5MDAKLSAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrCisgICAgZ2xvYmFsIF9hY3RpdmVfbGltYm9fbG9jaywgX21haW5fdGhyZWFkCiAgICAgX2FjdGl2ZV9saW1ib19sb2NrID0gX2FsbG9jYXRlX2xvY2soKQogCiAgICAgIyBmb3JrKCkgb25seSBjb3BpZWQgdGhlIGN1cnJlbnQgdGhyZWFkOyBjbGVhciByZWZlcmVuY2VzIHRvIG90aGVycy4KICAgICBuZXdfYWN0aXZlID0ge30KICAgICBjdXJyZW50ID0gY3VycmVudF90aHJlYWQoKQorICAgIF9tYWluX3RocmVhZCA9IGN1cnJlbnQKICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKLSAgICAgICAgZm9yIHRocmVhZCBpbiBfZW51bWVyYXRlKCk6CisgICAgICAgICMgRGFuZ2xpbmcgdGhyZWFkIGluc3RhbmNlcyBtdXN0IHN0aWxsIGhhdmUgdGhlaXIgbG9ja3MgcmVzZXQsCisgICAgICAgICMgYmVjYXVzZSBzb21lb25lIG1heSBqb2luKCkgdGhlbS4KKyAgICAgICAgdGhyZWFkcyA9IHNldChfZW51bWVyYXRlKCkpCisgICAgICAgIHRocmVhZHMudXBkYXRlKF9kYW5nbGluZykKKyAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgIyBBbnkgbG9jay9jb25kaXRpb24gdmFyaWFibGUgbWF5IGJlIGN1cnJlbnRseSBsb2NrZWQgb3IgaW4gYW4KICAgICAgICAgICAgICMgaW52YWxpZCBzdGF0ZSwgc28gd2UgcmVpbml0aWFsaXplIHRoZW0uCi0gICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKICAgICAgICAgICAgIGlmIHRocmVhZCBpcyBjdXJyZW50OgogICAgICAgICAgICAgICAgICMgVGhlcmUgaXMgb25seSBvbmUgYWN0aXZlIHRocmVhZC4gV2UgcmVzZXQgdGhlIGlkZW50IHRvCiAgICAgICAgICAgICAgICAgIyBpdHMgbmV3IHZhbHVlIHNpbmNlIGl0IGNhbiBoYXZlIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgdGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcyhUcnVlKQogICAgICAgICAgICAgICAgIGlkZW50ID0gZ2V0X2lkZW50KCkKICAgICAgICAgICAgICAgICB0aHJlYWQuX2lkZW50ID0gaWRlbnQKICAgICAgICAgICAgICAgICBuZXdfYWN0aXZlW2lkZW50XSA9IHRocmVhZAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEFsbCB0aGUgb3RoZXJzIGFyZSBhbHJlYWR5IHN0b3BwZWQuCisgICAgICAgICAgICAgICAgdGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcyhGYWxzZSkKICAgICAgICAgICAgICAgICB0aHJlYWQuX3N0b3AoKQogCiAgICAgICAgIF9saW1iby5jbGVhcigpCmRpZmYgLS1naXQgYS9MaWIvdGltZWl0LnB5IGIvTGliL3RpbWVpdC5weQppbmRleCA0ZjdkMjhmLi5lYWQyMDMwIDEwMDY0NAotLS0gYS9MaWIvdGltZWl0LnB5CisrKyBiL0xpYi90aW1laXQucHkKQEAgLTMxLDM4ICszMSwyOSBAQAogSWYgLW4gaXMgbm90IGdpdmVuLCBhIHN1aXRhYmxlIG51bWJlciBvZiBsb29wcyBpcyBjYWxjdWxhdGVkIGJ5IHRyeWluZwogc3VjY2Vzc2l2ZSBwb3dlcnMgb2YgMTAgdW50aWwgdGhlIHRvdGFsIHRpbWUgaXMgYXQgbGVhc3QgMC4yIHNlY29uZHMuCiAKLVRoZSBkaWZmZXJlbmNlIGluIGRlZmF1bHQgdGltZXIgZnVuY3Rpb24gaXMgYmVjYXVzZSBvbiBXaW5kb3dzLAotY2xvY2soKSBoYXMgbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHkgYnV0IHRpbWUoKSdzIGdyYW51bGFyaXR5IGlzIDEvNjB0aAotb2YgYSBzZWNvbmQ7IG9uIFVuaXgsIGNsb2NrKCkgaGFzIDEvMTAwdGggb2YgYSBzZWNvbmQgZ3JhbnVsYXJpdHkgYW5kCi10aW1lKCkgaXMgbXVjaCBtb3JlIHByZWNpc2UuICBPbiBlaXRoZXIgcGxhdGZvcm0sIHRoZSBkZWZhdWx0IHRpbWVyCi1mdW5jdGlvbnMgbWVhc3VyZSB3YWxsIGNsb2NrIHRpbWUsIG5vdCB0aGUgQ1BVIHRpbWUuICBUaGlzIG1lYW5zIHRoYXQKLW90aGVyIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIGNvbXB1dGVyIG1heSBpbnRlcmZlcmUgd2l0aCB0aGUKLXRpbWluZy4gIFRoZSBiZXN0IHRoaW5nIHRvIGRvIHdoZW4gYWNjdXJhdGUgdGltaW5nIGlzIG5lY2Vzc2FyeSBpcyB0bwotcmVwZWF0IHRoZSB0aW1pbmcgYSBmZXcgdGltZXMgYW5kIHVzZSB0aGUgYmVzdCB0aW1lLiAgVGhlIC1yIG9wdGlvbiBpcwotZ29vZCBmb3IgdGhpczsgdGhlIGRlZmF1bHQgb2YgMyByZXBldGl0aW9ucyBpcyBwcm9iYWJseSBlbm91Z2ggaW4gbW9zdAotY2FzZXMuICBPbiBVbml4LCB5b3UgY2FuIHVzZSBjbG9jaygpIHRvIG1lYXN1cmUgQ1BVIHRpbWUuCi0KIE5vdGU6IHRoZXJlIGlzIGEgY2VydGFpbiBiYXNlbGluZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggZXhlY3V0aW5nIGEKLXBhc3Mgc3RhdGVtZW50LiAgVGhlIGNvZGUgaGVyZSBkb2Vzbid0IHRyeSB0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZAotYmUgYXdhcmUgb2YgaXQuICBUaGUgYmFzZWxpbmUgb3ZlcmhlYWQgY2FuIGJlIG1lYXN1cmVkIGJ5IGludm9raW5nIHRoZQotcHJvZ3JhbSB3aXRob3V0IGFyZ3VtZW50cy4KK3Bhc3Mgc3RhdGVtZW50LiAgSXQgZGlmZmVycyBiZXR3ZWVuIHZlcnNpb25zLiAgVGhlIGNvZGUgaGVyZSBkb2Vzbid0IHRyeQordG8gaGlkZSBpdCwgYnV0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgaXQuICBUaGUgYmFzZWxpbmUgb3ZlcmhlYWQgY2FuIGJlCittZWFzdXJlZCBieSBpbnZva2luZyB0aGUgcHJvZ3JhbSB3aXRob3V0IGFyZ3VtZW50cy4KIAotVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGRpZmZlcnMgYmV0d2VlbiBQeXRob24gdmVyc2lvbnMhICBBbHNvLCB0bwotZmFpcmx5IGNvbXBhcmUgb2xkZXIgUHl0aG9uIHZlcnNpb25zIHRvIFB5dGhvbiAyLjMsIHlvdSBtYXkgd2FudCB0bwotdXNlIHB5dGhvbiAtTyBmb3IgdGhlIG9sZGVyIHZlcnNpb25zIHRvIGF2b2lkIHRpbWluZyBTRVRfTElORU5PCi1pbnN0cnVjdGlvbnMuCitDbGFzc2VzOgorCisgICAgVGltZXIKKworRnVuY3Rpb25zOgorCisgICAgdGltZWl0KHN0cmluZywgc3RyaW5nKSAtPiBmbG9hdAorICAgIHJlcGVhdChzdHJpbmcsIHN0cmluZykgLT4gbGlzdAorICAgIGRlZmF1bHRfdGltZXIoKSAtPiBmbG9hdAorCiAiIiIKIAogaW1wb3J0IGdjCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotdHJ5OgotICAgIGltcG9ydCBpdGVydG9vbHMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIE11c3QgYmUgYW4gb2xkZXIgUHl0aG9uIHZlcnNpb24gKHNlZSB0aW1laXQoKSBiZWxvdykKLSAgICBpdGVydG9vbHMgPSBOb25lCitpbXBvcnQgaXRlcnRvb2xzCiAKLV9fYWxsX18gPSBbIlRpbWVyIl0KK19fYWxsX18gPSBbIlRpbWVyIiwgInRpbWVpdCIsICJyZXBlYXQiLCAiZGVmYXVsdF90aW1lciJdCiAKIGR1bW15X3NyY19uYW1lID0gIjx0aW1laXQtc3JjPiIKIGRlZmF1bHRfbnVtYmVyID0gMTAwMDAwMApAQCAtMTgwLDEwICsxNzEsNyBAQAogICAgICAgICB0byBvbmUgbWlsbGlvbi4gIFRoZSBtYWluIHN0YXRlbWVudCwgdGhlIHNldHVwIHN0YXRlbWVudCBhbmQKICAgICAgICAgdGhlIHRpbWVyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgICAgICIiIgotICAgICAgICBpZiBpdGVydG9vbHM6Ci0gICAgICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaXQgPSBbTm9uZV0gKiBudW1iZXIKKyAgICAgICAgaXQgPSBpdGVydG9vbHMucmVwZWF0KE5vbmUsIG51bWJlcikKICAgICAgICAgZ2NvbGQgPSBnYy5pc2VuYWJsZWQoKQogICAgICAgICBnYy5kaXNhYmxlKCkKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvX19pbml0X18ucHkgYi9MaWIvdGtpbnRlci9fX2luaXRfXy5weQppbmRleCA5Y2IyMjg0Li4yMmE0MWFjIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weQorKysgYi9MaWIvdGtpbnRlci9fX2luaXRfXy5weQpAQCAtMjE4MSw0NSArMjE4MSw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbnZva2UnKQogCi0KLSMgSW5kaWNlczoKLSMgWFhYIEkgZG9uJ3QgbGlrZSB0aGVzZSAtLSB0YWtlIHRoZW0gYXdheQotZGVmIEF0RW5kKCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnZW5kJwotCi0KLWRlZiBBdEluc2VydCgqYXJncyk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEluc2VydCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHMgPSAnaW5zZXJ0JwotICAgIGZvciBhIGluIGFyZ3M6Ci0gICAgICAgIGlmIGE6IHMgPSBzICsgKCcgJyArIGEpCi0gICAgcmV0dXJuIHMKLQotCi1kZWYgQXRTZWxGaXJzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxGaXJzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmZpcnN0JwotCi0KLWRlZiBBdFNlbExhc3QoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0U2VsTGFzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmxhc3QnCi0KLQotZGVmIEF0KHgsIHk9Tm9uZSk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIGlmIHkgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuICdAJXInICUgKHgsKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnQCVyLCVyJyAlICh4LCB5KQotCi0KIGNsYXNzIENhbnZhcyhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiQ2FudmFzIHdpZGdldCB0byBkaXNwbGF5IGdyYXBoaWNhbCBlbGVtZW50cyBsaWtlIGxpbmVzIG9yIHRleHQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgpAQCAtMjk1MCwxMSArMjkxMSwxMSBAQAogCiAgICAgICAgICIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGV4dCcsIGNuZiwga3cpCi0gICAgZGVmIGJib3goc2VsZiwgKmFyZ3MpOgorICAgIGRlZiBiYm94KHNlbGYsIGluZGV4KToKICAgICAgICAgIiIiUmV0dXJuIGEgdHVwbGUgb2YgKHgseSx3aWR0aCxoZWlnaHQpIHdoaWNoIGdpdmVzIHRoZSBib3VuZGluZwotICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBpbmRleCBpbiBBUkdTLiIiIgorICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdiYm94JykgKyBhcmdzKSkgb3IgTm9uZQorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQogICAgIGRlZiB0a190ZXh0U2VsZWN0VG8oc2VsZiwgaW5kZXgpOgogICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX3RleHRTZWxlY3RUbycsIHNlbGYuX3csIGluZGV4KQogICAgIGRlZiB0a190ZXh0QmFja3NwYWNlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weSBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKaW5kZXggM2ZmYjI1Mi4uYTcxYWZiMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQorKysgYi9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgZGlyLCBwYXQgPSBzZWxmLmdldF9maWx0ZXIoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5tYXN0ZXIuYmVsbCgpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXIKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhkaXIpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwd2QgPSBOb25lCiAgICAgICAgICAgICBpZiBwd2Q6CiAgICAgICAgICAgICAgICAgZGlyID0gb3MucGF0aC5qb2luKHB3ZCwgZGlyKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CmluZGV4IDJjNGNiMDUuLjRkZTY1MzEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKQEAgLTYzMCw4ICs2MzAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aWRnZXQuYmJveCgnZW5kJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnbm9pbmRleCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICcxLjEnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCwgJzEuMScsICdlbmQnKQogCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhQaXhlbFNpemVUZXN0cywgU3RhbmRhcmRPcHRpb25zVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdG9rZW4ucHkgYi9MaWIvdG9rZW4ucHkKaW5kZXggMzFmYWUwYS4uNzQ3MGM4YyAxMDA3NTUKLS0tIGEvTGliL3Rva2VuLnB5CisrKyBiL0xpYi90b2tlbi5weQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBvdXRGaWxlTmFtZSA9IGFyZ3NbMV0KICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihpbkZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBsaW5lcyA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0OgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3JtYXQgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIGZvcm1hdFtzdGFydDplbmRdID0gbGluZXMKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSwgJ3cnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoNCkKICAgICBmcC53cml0ZSgiXG4iLmpvaW4oZm9ybWF0KSkKZGlmZiAtLWdpdCBhL0xpYi90b2tlbml6ZS5weSBiL0xpYi90b2tlbml6ZS5weQppbmRleCBkMDYwOWU4Li5mNjE0YWViIDEwMDY0NAotLS0gYS9MaWIvdG9rZW5pemUucHkKKysrIGIvTGliL3Rva2VuaXplLnB5CkBAIC02NzAsNyArNjcwLDcgQEAKICAgICAgICAgZXJyb3IoZXJyLmFyZ3NbMF0sIGZpbGVuYW1lLCAobGluZSwgY29sdW1uKSkKICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGVycm9yKGVycikKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHByaW50KCJpbnRlcnJ1cHRlZFxuIikKZGlmZiAtLWdpdCBhL0xpYi90cmFjZS5weSBiL0xpYi90cmFjZS5weQppbmRleCBjMDliMzY1Li4wOWZlOWVlIDEwMDY0NAotLS0gYS9MaWIvdHJhY2UucHkKKysrIGIvTGliL3RyYWNlLnB5CkBAIC0yMzgsNyArMjM4LDcgQEAKICAgICAgICAgICAgICAgICBjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzID0gXAogICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWQob3BlbihzZWxmLmluZmlsZSwgJ3JiJykpCiAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5fX2NsYXNzX18oY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycykpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQoKCJTa2lwcGluZyBjb3VudHMgZmlsZSAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuaW5maWxlLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcCgoc2VsZi5jb3VudHMsIHNlbGYuY2FsbGVkZnVuY3MsIHNlbGYuY2FsbGVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihzZWxmLm91dGZpbGUsICd3YicpLCAxKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCJDYW4ndCBzYXZlIGNvdW50cyBmaWxlcyBiZWNhdXNlICVzIiAlIGVyciwgZmlsZT1zeXMuc3RkZXJyKQogCiAgICAgZGVmIHdyaXRlX3Jlc3VsdHNfZmlsZShzZWxmLCBwYXRoLCBsaW5lcywgbG5vdGFiLCBsaW5lc19oaXQsIGVuY29kaW5nPU5vbmUpOgpAQCAtMzU2LDcgKzM1Niw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgInciLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgoInRyYWNlOiBDb3VsZCBub3Qgb3BlbiAlciBmb3Igd3JpdGluZzogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0gc2tpcHBpbmciICUgKHBhdGgsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICByZXR1cm4gMCwgMApAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHByb2cgPSBmLnJlYWQoKQogICAgICAgICAgICAgZW5jb2RpbmcgPSBmLmVuY29kaW5nCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgcHJpbnQoKCJOb3QgcHJpbnRpbmcgY292ZXJhZ2UgZGF0YSBmb3IgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJldHVybiB7fQpAQCAtODAyLDcgKzgwMiw3IEBACiAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBOb25lLAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdC5ydW5jdHgoY29kZSwgZ2xvYnMsIGdsb2JzKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIF9lcnJfZXhpdCgiQ2Fubm90IHJ1biBmaWxlICVyIGJlY2F1c2U6ICVzIiAlIChzeXMuYXJndlswXSwgZXJyKSkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CiAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdHJhY2ViYWNrLnB5IGIvTGliL3RyYWNlYmFjay5weQppbmRleCBiMTNiZmUyLi4zYjJjYWU3IDEwMDY0NAotLS0gYS9MaWIvdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90cmFjZWJhY2sucHkKQEAgLTIsMjYgKzIsMzIgQEAKIAogaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cworaW1wb3J0IG9wZXJhdG9yCiAKIF9fYWxsX18gPSBbJ2V4dHJhY3Rfc3RhY2snLCAnZXh0cmFjdF90YicsICdmb3JtYXRfZXhjZXB0aW9uJywKICAgICAgICAgICAgJ2Zvcm1hdF9leGNlcHRpb25fb25seScsICdmb3JtYXRfbGlzdCcsICdmb3JtYXRfc3RhY2snLAogICAgICAgICAgICAnZm9ybWF0X3RiJywgJ3ByaW50X2V4YycsICdmb3JtYXRfZXhjJywgJ3ByaW50X2V4Y2VwdGlvbicsCi0gICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJ10KKyAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInLAorICAgICAgICAgICAnY2xlYXJfZnJhbWVzJ10KIAotZGVmIF9wcmludChmaWxlLCBzdHI9JycsIHRlcm1pbmF0b3I9J1xuJyk6Ci0gICAgZmlsZS53cml0ZShzdHIrdGVybWluYXRvcikKKyMKKyMgRm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgbGlzdHMgb2YgdHJhY2ViYWNrIGxpbmVzLgorIwogCitkZWYgX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgorICAgICAgICBpdGVtID0gJyAgRmlsZSAie30iLCBsaW5lIHt9LCBpbiB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICB7fVxuJy5mb3JtYXQobGluZS5zdHJpcCgpKQorICAgICAgICB5aWVsZCBpdGVtCiAKIGRlZiBwcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHRoZSBsaXN0IG9mIHR1cGxlcyBhcyByZXR1cm5lZCBieSBleHRyYWN0X3RiKCkgb3IKICAgICBleHRyYWN0X3N0YWNrKCkgYXMgYSBmb3JtYXR0ZWQgc3RhY2sgdHJhY2UgdG8gdGhlIGdpdmVuIGZpbGUuIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnICAgICVzJyAlIGxpbmUuc3RyaXAoKSkKKyAgICBmb3IgaXRlbSBpbiBfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCk6CisgICAgICAgIHByaW50KGl0ZW0sIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2xpc3QoZXh0cmFjdGVkX2xpc3QpOgogICAgICIiIkZvcm1hdCBhIGxpc3Qgb2YgdHJhY2ViYWNrIGVudHJ5IHR1cGxlcyBmb3IgcHJpbnRpbmcuCkBAIC0zMywxNCArMzksNDQgQEAKICAgICB0aGUgc3RyaW5ncyBtYXkgY29udGFpbiBpbnRlcm5hbCBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMKICAgICB3aG9zZSBzb3VyY2UgdGV4dCBsaW5lIGlzIG5vdCBOb25lLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBpdGVtID0gJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlc1xuJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICAlc1xuJyAlIGxpbmUuc3RyaXAoKQotICAgICAgICBsaXN0LmFwcGVuZChpdGVtKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFRyYWNlYmFja3MuCisjCisKKyMgZXh0cmFjdG9yIHRha2VzIGN1cnIgYW5kIG5lZWRzIHRvIHJldHVybiBhIHR1cGxlIG9mOgorIyAtIEZyYW1lIG9iamVjdAorIyAtIExpbmUgbnVtYmVyCisjIC0gTmV4dCBpdGVtIChzYW1lIHR5cGUgYXMgY3VycikKKyMgSW4gcHJhY3RpY2UsIGN1cnIgaXMgZWl0aGVyIGEgdHJhY2ViYWNrIG9yIGEgZnJhbWUuCitkZWYgX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcihjdXJyLCBsaW1pdCwgZXh0cmFjdG9yKToKKyAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICBsaW1pdCA9IGdldGF0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnLCBOb25lKQorCisgICAgbiA9IDAKKyAgICB3aGlsZSBjdXJyIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgorICAgICAgICBmLCBsaW5lbm8sIG5leHRfaXRlbSA9IGV4dHJhY3RvcihjdXJyKQorICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKworICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKKyAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gTm9uZQorCisgICAgICAgIHlpZWxkIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKQorICAgICAgICBjdXJyID0gbmV4dF9pdGVtCisgICAgICAgIG4gKz0gMQorCitkZWYgX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQpOgorICAgIHJldHVybiBfZXh0cmFjdF90Yl9vcl9zdGFja19pdGVyKAorICAgICAgICAgICAgICAgIHRiLCBsaW1pdCwKKyAgICAgICAgICAgICAgICBvcGVyYXRvci5hdHRyZ2V0dGVyKCJ0Yl9mcmFtZSIsICJ0Yl9saW5lbm8iLCAidGJfbmV4dCIpKQogCiBkZWYgcHJpbnRfdGIodGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgdXAgdG8gJ2xpbWl0JyBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gdGhlIHRyYWNlYmFjayAndGInLgpAQCAtNTAsMjkgKzg2LDExIEBACiAgICAgJ2ZpbGUnIHNob3VsZCBiZSBhbiBvcGVuIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCB3aXRoIGEgd3JpdGUoKQogICAgIG1ldGhvZC4KICAgICAiIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBfcHJpbnQoZmlsZSwgJyAgICAnICsgbGluZS5zdHJpcCgpKQotICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgbiA9IG4rMQorICAgIHByaW50X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIkEgc2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQpKScuIiIiCi0gICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGxpc3Qgb2YgdXAgdG8gbGltaXQgcHJlLXByb2Nlc3NlZCBlbnRyaWVzIGZyb20gdHJhY2ViYWNrLgpAQCAtODUsMjYgKzEwMywxMSBAQAogICAgIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQ7IGlmIHRoZSBzb3VyY2UgaXMgbm90CiAgICAgYXZhaWxhYmxlIGl0IGlzIE5vbmUuCiAgICAgIiIiCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBsaXN0ID0gW10KLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKIAorIworIyBFeGNlcHRpb24gZm9ybWF0dGluZyBhbmQgb3V0cHV0LgorIwogCiBfY2F1c2VfbWVzc2FnZSA9ICgKICAgICAiXG5UaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlICIKQEAgLTEzMiw5ICsxMzUsMjMgQEAKICAgICBpdHMuYXBwZW5kKFsoZXhjLCBjdXN0b21fdGIgb3IgZXhjLl9fdHJhY2ViYWNrX18pXSkKICAgICAjIGl0ZXJ0b29scy5jaGFpbiBpcyBpbiBhbiBleHRlbnNpb24gbW9kdWxlIGFuZCBtYXkgYmUgdW5hdmFpbGFibGUKICAgICBmb3IgaXQgaW4gaXRzOgotICAgICAgICBmb3IgeCBpbiBpdDoKLSAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgeWllbGQgZnJvbSBpdAogCitkZWYgX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgIGlmIGNoYWluOgorICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCisgICAgZWxzZToKKyAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQorCisgICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBjYXVzZS9jb250ZXh0IG1lc3NhZ2UgbGluZQorICAgICAgICAgICAgeWllbGQgdmFsdWUgKyAnXG4nCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgIHlpZWxkICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfbGlzdF9pdGVyKF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKKyAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIodHlwZSh2YWx1ZSksIHZhbHVlKQogCiBkZWYgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiUHJpbnQgZXhjZXB0aW9uIHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tICd0YicgdG8gJ2ZpbGUnLgpAQCAtMTQ5LDIwICsxNjYsOCBAQAogICAgICIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBpZiBjaGFpbjoKLSAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KLSAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCB2YWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHRiOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JykKLSAgICAgICAgICAgIHByaW50X3RiKHRiLCBsaW1pdCwgZmlsZSkKLSAgICAgICAgbGluZXMgPSBmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCBsaW5lLCAnJykKKyAgICBmb3IgbGluZSBpbiBfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbik6CisgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJGb3JtYXQgYSBzdGFjayB0cmFjZSBhbmQgdGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KQEAgLTE3MywyMCArMTc4LDcgQEAKICAgICB0aGVzZSBsaW5lcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCBwcmludGVkLCBleGFjdGx5IHRoZSBzYW1lIHRleHQgaXMKICAgICBwcmludGVkIGFzIGRvZXMgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgbGlzdCA9IFtdCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCh2YWx1ZSArICdcbicpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKCdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nKQotICAgICAgICAgICAgbGlzdC5leHRlbmQoZm9ybWF0X3RiKHRiLCBsaW1pdCkpCi0gICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKHZhbHVlKSwgdmFsdWUpKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSk6CiAgICAgIiIiRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiBhIHRyYWNlYmFjay4KQEAgLTIwNCwxMCArMTk2LDE0IEBACiAgICAgc3RyaW5nIGluIHRoZSBsaXN0LgogCiAgICAgIiIiCisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSkpCisKK2RlZiBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKToKICAgICAjIEdyYWNlZnVsbHkgaGFuZGxlICh0aGUgd2F5IFB5dGhvbiAyLjQgYW5kIGVhcmxpZXIgZGlkKSB0aGUgY2FzZSBvZgogICAgICMgYmVpbmcgY2FsbGVkIHdpdGggKE5vbmUsIE5vbmUpLgogICAgIGlmIGV0eXBlIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpXQorICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuCiAKICAgICBzdHlwZSA9IGV0eXBlLl9fbmFtZV9fCiAgICAgc21vZCA9IGV0eXBlLl9fbW9kdWxlX18KQEAgLTIxNSwyNiArMjExLDI2IEBACiAgICAgICAgIHN0eXBlID0gc21vZCArICcuJyArIHN0eXBlCiAKICAgICBpZiBub3QgaXNzdWJjbGFzcyhldHlwZSwgU3ludGF4RXJyb3IpOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgIyBJdCB3YXMgYSBzeW50YXggZXJyb3I7IHNob3cgZXhhY3RseSB3aGVyZSB0aGUgcHJvYmxlbSB3YXMgZm91bmQuCi0gICAgbGluZXMgPSBbXQogICAgIGZpbGVuYW1lID0gdmFsdWUuZmlsZW5hbWUgb3IgIjxzdHJpbmc+IgogICAgIGxpbmVubyA9IHN0cih2YWx1ZS5saW5lbm8pIG9yICc/JwotICAgIGxpbmVzLmFwcGVuZCgnICBGaWxlICIlcyIsIGxpbmUgJXNcbicgJSAoZmlsZW5hbWUsIGxpbmVubykpCisgICAgeWllbGQgJyAgRmlsZSAie30iLCBsaW5lIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vKQorCiAgICAgYmFkbGluZSA9IHZhbHVlLnRleHQKICAgICBvZmZzZXQgPSB2YWx1ZS5vZmZzZXQKICAgICBpZiBiYWRsaW5lIGlzIG5vdCBOb25lOgotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc1xuJyAlIGJhZGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgJyAgICB7fVxuJy5mb3JtYXQoYmFkbGluZS5zdHJpcCgpKQogICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJylbOm9mZnNldF0ubHN0cmlwKCkKICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCiAgICAgICAgICAgICAjIG9ubHkgdGhyZWUgc3BhY2VzIHRvIGFjY291bnQgZm9yIG9mZnNldDEgPT0gcG9zIDAKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgJXNeXG4nICUgJycuam9pbihjYXJldHNwYWNlKSkKKyAgICAgICAgICAgIHlpZWxkICcgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCiAgICAgbXNnID0gdmFsdWUubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCi0gICAgbGluZXMuYXBwZW5kKCIlczogJXNcbiIgJSAoc3R5cGUsIG1zZykpCi0gICAgcmV0dXJuIGxpbmVzCisgICAgeWllbGQgInt9OiB7fVxuIi5mb3JtYXQoc3R5cGUsIG1zZykKIAogZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKICAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKQEAgLTI1MCwzOCArMjQ2LDM0IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCiAKLQogZGVmIHByaW50X2V4YyhsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlKScuIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgZmlsZSwgY2hhaW4pCi0gICAgZmluYWxseToKLSAgICAgICAgZXR5cGUgPSB2YWx1ZSA9IHRiID0gTm9uZQotCisgICAgcHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGZpbGU9ZmlsZSwgY2hhaW49Y2hhaW4pCiAKIGRlZiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkxpa2UgcHJpbnRfZXhjKCkgYnV0IHJldHVybiBhIHN0cmluZy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICByZXR1cm4gJycuam9pbigKLSAgICAgICAgICAgIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICByZXR1cm4gIiIuam9pbihmb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGNoYWluPWNoYWluKSkKIAogZGVmIHByaW50X2xhc3QobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsCiAgICAgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywgbGltaXQsIGZpbGUpJy4iIiIKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJsYXN0X3R5cGUiKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbGFzdCBleGNlcHRpb24iKQotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywKICAgICAgICAgICAgICAgICAgICAgbGltaXQsIGZpbGUsIGNoYWluKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFN0YWNrcy4KKyMKKworZGVmIF9leHRyYWN0X3N0YWNrX2l0ZXIoZiwgbGltaXQ9Tm9uZSk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgZiwgbGltaXQsIGxhbWJkYSBmOiAoZiwgZi5mX2xpbmVubywgZi5mX2JhY2spKQorCitkZWYgX2dldF9zdGFjayhmKToKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfYmFjaworICAgIHJldHVybiBmCiAKIGRlZiBwcmludF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgYSBzdGFjayB0cmFjZSBmcm9tIGl0cyBpbnZvY2F0aW9uIHBvaW50LgpAQCAtMjkwLDIxICsyODIsMTEgQEAKICAgICBzdGFjayBmcmFtZSBhdCB3aGljaCB0byBzdGFydC4gVGhlIG9wdGlvbmFsICdsaW1pdCcgYW5kICdmaWxlJwogICAgIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCksIGZpbGUpCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICBpZiBmIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTMxNSwyNyArMjk3LDE2IEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKKyAgICBzdGFjayA9IGxpc3QoX2V4dHJhY3Rfc3RhY2tfaXRlcihfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgc3RhY2sucmV2ZXJzZSgpCisgICAgcmV0dXJuIHN0YWNrCisKK2RlZiBjbGVhcl9mcmFtZXModGIpOgorICAgICJDbGVhciBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIGZyYW1lcyBvZiBhIHRyYWNlYmFjay4iCisgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgZiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIGYgPSBmLmZfYmFjawotICAgICAgICBuID0gbisxCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICByZXR1cm4gbGlzdAorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZ25vcmUgdGhlIGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CmRpZmYgLS1naXQgYS9MaWIvdHJhY2VtYWxsb2MucHkgYi9MaWIvdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZjczNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDQ1OSBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGlja2xlCisKKyMgSW1wb3J0IHR5cGVzIGFuZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQworZnJvbSBfdHJhY2VtYWxsb2MgaW1wb3J0ICoKK2Zyb20gX3RyYWNlbWFsbG9jIGltcG9ydCBfZ2V0X29iamVjdF90cmFjZWJhY2ssIF9nZXRfdHJhY2VzCisKKworZGVmIF9mb3JtYXRfc2l6ZShzaXplLCBzaWduKToKKyAgICBmb3IgdW5pdCBpbiAoJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJyk6CisgICAgICAgIGlmIGFicyhzaXplKSA8IDEwMCBhbmQgdW5pdCAhPSAnQic6CisgICAgICAgICAgICAjIDMgZGlnaXRzICh4eC54IFVOSVQpCisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiJSsuMWYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4xZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgaWYgYWJzKHNpemUpIDwgMTAgKiAxMDI0IG9yIHVuaXQgPT0gJ1RpQic6CisgICAgICAgICAgICAjIDQgb3IgNSBkaWdpdHMgKHh4eHggVU5JVCkKKyAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgcmV0dXJuICIlKy4wZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjBmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICBzaXplIC89IDEwMjQKKworCitjbGFzcyBTdGF0aXN0aWM6CisgICAgIiIiCisgICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gdHdvIFNuYXBzaG90IGluc3RhbmNlLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdjb3VudCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBjb3VudCk6CisgICAgICAgIHNlbGYudHJhY2ViYWNrID0gdHJhY2ViYWNrCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLmNvdW50KSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHJhY2ViYWNrID09IG90aGVyLnRyYWNlYmFjaworICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50KQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzLCBjb3VudD0laSIKKyAgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCkpCisgICAgICAgIGlmIHNlbGYuY291bnQ6CisgICAgICAgICAgICBhdmVyYWdlID0gc2VsZi5zaXplIC8gc2VsZi5jb3VudAorICAgICAgICAgICAgdGV4dCArPSAiLCBhdmVyYWdlPSVzIiAlIF9mb3JtYXRfc2l6ZShhdmVyYWdlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPFN0YXRpc3RpYyB0cmFjZWJhY2s9JXIgc2l6ZT0laSBjb3VudD0laT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5jb3VudCkpCisKKyAgICBkZWYgX3NvcnRfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuc2l6ZSwgc2VsZi5jb3VudCwgc2VsZi50cmFjZWJhY2spCisKKworY2xhc3MgU3RhdGlzdGljRGlmZjoKKyAgICAiIiIKKyAgICBTdGF0aXN0aWMgZGlmZmVyZW5jZSBvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYmV0d2VlbiBhbiBvbGQgYW5kIGEgbmV3CisgICAgU25hcHNob3QgaW5zdGFuY2UuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdzaXplX2RpZmYnLCAnY291bnQnLCAnY291bnRfZGlmZicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBzaXplX2RpZmYsIGNvdW50LCBjb3VudF9kaWZmKToKKyAgICAgICAgc2VsZi50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLnNpemVfZGlmZiA9IHNpemVfZGlmZgorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKyAgICAgICAgc2VsZi5jb3VudF9kaWZmID0gY291bnRfZGlmZgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LCBzZWxmLmNvdW50X2RpZmYpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50cmFjZWJhY2sgPT0gb3RoZXIudHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZV9kaWZmID09IG90aGVyLnNpemVfZGlmZgorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50CisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnRfZGlmZiA9PSBvdGhlci5jb3VudF9kaWZmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzICglcyksIGNvdW50PSVpICglK2kpIgorICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplX2RpZmYsIFRydWUpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudF9kaWZmKSkKKyAgICAgICAgaWYgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIGF2ZXJhZ2UgPSBzZWxmLnNpemUgLyBzZWxmLmNvdW50CisgICAgICAgICAgICB0ZXh0ICs9ICIsIGF2ZXJhZ2U9JXMiICUgX2Zvcm1hdF9zaXplKGF2ZXJhZ2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8U3RhdGlzdGljRGlmZiB0cmFjZWJhY2s9JXIgc2l6ZT0laSAoJStpKSBjb3VudD0laSAoJStpKT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwgc2VsZi5jb3VudF9kaWZmKSkKKworICAgIGRlZiBfc29ydF9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiAoYWJzKHNlbGYuc2l6ZV9kaWZmKSwgc2VsZi5zaXplLAorICAgICAgICAgICAgICAgIGFicyhzZWxmLmNvdW50X2RpZmYpLCBzZWxmLmNvdW50LAorICAgICAgICAgICAgICAgIHNlbGYudHJhY2ViYWNrKQorCisKK2RlZiBfY29tcGFyZV9ncm91cGVkX3N0YXRzKG9sZF9ncm91cCwgbmV3X2dyb3VwKToKKyAgICBzdGF0aXN0aWNzID0gW10KKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG5ld19ncm91cC5pdGVtcygpOgorICAgICAgICBwcmV2aW91cyA9IG9sZF9ncm91cC5wb3AodHJhY2ViYWNrLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSAtIHByZXZpb3VzLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCwgc3RhdC5jb3VudCAtIHByZXZpb3VzLmNvdW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdCA9IFN0YXRpc3RpY0RpZmYodHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQsIHN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisKKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG9sZF9ncm91cC5pdGVtcygpOgorICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssIDAsIC1zdGF0LnNpemUsIDAsIC1zdGF0LmNvdW50KQorICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChzdGF0KQorICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBGcmFtZToKKyAgICAiIiIKKyAgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZSIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5fZnJhbWUgPSBmcmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5lbm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZVsxXQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPT0gb3RoZXIuX2ZyYW1lKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPCBvdGhlci5fZnJhbWUpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6JXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxGcmFtZSBmaWxlbmFtZT0lciBsaW5lbm89JXI+IiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIFRyYWNlYmFjayhTZXF1ZW5jZSk6CisgICAgIiIiCisgICAgU2VxdWVuY2Ugb2YgRnJhbWUgaW5zdGFuY2VzIHNvcnRlZCBmcm9tIHRoZSBtb3N0IHJlY2VudCBmcmFtZQorICAgIHRvIHRoZSBvbGRlc3QgZnJhbWUuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfZnJhbWVzIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWVzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fZnJhbWVzID0gZnJhbWVzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mcmFtZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICB0cmFjZSA9IHNlbGYuX2ZyYW1lc1tpbmRleF0KKyAgICAgICAgcmV0dXJuIEZyYW1lKHRyYWNlKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBmcmFtZSk6CisgICAgICAgIHJldHVybiBmcmFtZS5fZnJhbWUgaW4gc2VsZi5fZnJhbWVzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lcykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lcyA9PSBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzIDwgb3RoZXIuX2ZyYW1lcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGZbMF0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlYmFjayAlcj4iICUgKHR1cGxlKHNlbGYpLCkKKworCitkZWYgZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCAqb2JqKiB3YXMgYWxsb2NhdGVkLgorICAgIFJldHVybiBhIFRyYWNlYmFjayBpbnN0YW5jZS4KKworICAgIFJldHVybiBOb25lIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgbm90IHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIG9yCisgICAgZGlkIG5vdCB0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb2JqZWN0LgorICAgICIiIgorICAgIGZyYW1lcyA9IF9nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgaWYgZnJhbWVzIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gVHJhY2ViYWNrKGZyYW1lcykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFRyYWNlOgorICAgICIiIgorICAgIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX3RyYWNlIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UpOgorICAgICAgICBzZWxmLl90cmFjZSA9IHRyYWNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYWNlWzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJhY2ViYWNrKHNlbGYuX3RyYWNlWzFdKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdHJhY2UgPT0gb3RoZXIuX3RyYWNlKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl90cmFjZSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAoc2VsZi50cmFjZWJhY2ssIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgiPFRyYWNlIHNpemU9JXMsIHRyYWNlYmFjaz0lcj4iCisgICAgICAgICAgICAgICAgJSAoX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpLCBzZWxmLnRyYWNlYmFjaykpCisKKworY2xhc3MgX1RyYWNlcyhTZXF1ZW5jZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlcyk6CisgICAgICAgIFNlcXVlbmNlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3RyYWNlcyA9IHRyYWNlcworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fdHJhY2VzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgdHJhY2UgPSBzZWxmLl90cmFjZXNbaW5kZXhdCisgICAgICAgIHJldHVybiBUcmFjZSh0cmFjZSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdHJhY2UpOgorICAgICAgICByZXR1cm4gdHJhY2UuX3RyYWNlIGluIHNlbGYuX3RyYWNlcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdHJhY2VzID09IG90aGVyLl90cmFjZXMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlcyBsZW49JXM+IiAlIGxlbihzZWxmKQorCisKK2RlZiBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgIHJldHVybiBmaWxlbmFtZQorCisKK2NsYXNzIEZpbHRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5jbHVzaXZlLCBmaWxlbmFtZV9wYXR0ZXJuLAorICAgICAgICAgICAgICAgICBsaW5lbm89Tm9uZSwgYWxsX2ZyYW1lcz1GYWxzZSk6CisgICAgICAgIHNlbGYuaW5jbHVzaXZlID0gaW5jbHVzaXZlCisgICAgICAgIHNlbGYuX2ZpbGVuYW1lX3BhdHRlcm4gPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lX3BhdHRlcm4pCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIHNlbGYuYWxsX2ZyYW1lcyA9IGFsbF9mcmFtZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlbmFtZV9wYXR0ZXJuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWVfcGF0dGVybgorCisgICAgZGVmIF9fbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIGZpbGVuYW1lID0gX25vcm1hbGl6ZV9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgaWYgbm90IGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwgc2VsZi5fZmlsZW5hbWVfcGF0dGVybik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5saW5lbm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGxpbmVubyA9PSBzZWxmLmxpbmVubykKKworICAgIGRlZiBfbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykgXiAobm90IHNlbGYuaW5jbHVzaXZlKQorCisgICAgZGVmIF9tYXRjaF90cmFjZWJhY2soc2VsZiwgdHJhY2ViYWNrKToKKyAgICAgICAgaWYgc2VsZi5hbGxfZnJhbWVzOgorICAgICAgICAgICAgaWYgYW55KHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSwgbGluZW5vIGluIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jbHVzaXZlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAobm90IHNlbGYuaW5jbHVzaXZlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRyYWNlYmFja1swXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisKKworY2xhc3MgU25hcHNob3Q6CisgICAgIiIiCisgICAgU25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZXMsIHRyYWNlYmFja19saW1pdCk6CisgICAgICAgIHNlbGYudHJhY2VzID0gX1RyYWNlcyh0cmFjZXMpCisgICAgICAgIHNlbGYudHJhY2ViYWNrX2xpbWl0ID0gdHJhY2ViYWNrX2xpbWl0CisKKyAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgcGlja2xlLmR1bXAoc2VsZiwgZnAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkKGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYSBzbmFwc2hvdCBmcm9tIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWQoZnApCisKKyAgICBkZWYgX2ZpbHRlcl90cmFjZShzZWxmLCBpbmNsdWRlX2ZpbHRlcnMsIGV4Y2x1ZGVfZmlsdGVycywgdHJhY2UpOgorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZVsxXQorICAgICAgICBpZiBpbmNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBub3QgYW55KHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBpbmNsdWRlX2ZpbHRlcnMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBleGNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBhbnkobm90IHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGV4Y2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmlsdGVyX3RyYWNlcyhzZWxmLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgdHJhY2VzIHNlcXVlbmNlLCBmaWx0ZXJzCisgICAgICAgIGlzIGEgbGlzdCBvZiBGaWx0ZXIgaW5zdGFuY2VzLiAgSWYgZmlsdGVycyBpcyBhbiBlbXB0eSBsaXN0LCByZXR1cm4gYQorICAgICAgICBuZXcgU25hcHNob3QgaW5zdGFuY2Ugd2l0aCBhIGNvcHkgb2YgdGhlIHRyYWNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbHRlcnM6CisgICAgICAgICAgICBpbmNsdWRlX2ZpbHRlcnMgPSBbXQorICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzID0gW10KKyAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gZmlsdGVyczoKKyAgICAgICAgICAgICAgICBpZiB0cmFjZV9maWx0ZXIuaW5jbHVzaXZlOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2ZpbHRlcnMuYXBwZW5kKHRyYWNlX2ZpbHRlcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMuYXBwZW5kKHRyYWNlX2ZpbHRlcikKKyAgICAgICAgICAgIG5ld190cmFjZXMgPSBbdHJhY2UgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZmlsdGVyX3RyYWNlKGluY2x1ZGVfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld190cmFjZXMgPSBzZWxmLnRyYWNlcy5fdHJhY2VzLmNvcHkoKQorICAgICAgICByZXR1cm4gU25hcHNob3QobmV3X3RyYWNlcywgc2VsZi50cmFjZWJhY2tfbGltaXQpCisKKyAgICBkZWYgX2dyb3VwX2J5KHNlbGYsIGtleV90eXBlLCBjdW11bGF0aXZlKToKKyAgICAgICAgaWYga2V5X3R5cGUgbm90IGluICgndHJhY2ViYWNrJywgJ2ZpbGVuYW1lJywgJ2xpbmVubycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBrZXlfdHlwZTogJXIiICUgKGtleV90eXBlLCkpCisgICAgICAgIGlmIGN1bXVsYXRpdmUgYW5kIGtleV90eXBlIG5vdCBpbiAoJ2xpbmVubycsICdmaWxlbmFtZScpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY3VtdWxhdGl2ZSBtb2RlIGNhbm5vdCBieSB1c2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGgga2V5IHR5cGUgJXIiICUga2V5X3R5cGUpCisKKyAgICAgICAgc3RhdHMgPSB7fQorICAgICAgICB0cmFjZWJhY2tzID0ge30KKyAgICAgICAgaWYgbm90IGN1bXVsYXRpdmU6CisgICAgICAgICAgICBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlczoKKyAgICAgICAgICAgICAgICBzaXplLCB0cmFjZV90cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrc1t0cmFjZV90cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXlfdHlwZSA9PSAndHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IHRyYWNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICBlbGlmIGtleV90eXBlID09ICdsaW5lbm8nOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gdHJhY2VfdHJhY2ViYWNrWzoxXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiAjIGtleV90eXBlID09ICdmaWxlbmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoKHRyYWNlX3RyYWNlYmFja1swXVswXSwgMCksKQorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSBUcmFjZWJhY2soZnJhbWVzKQorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2tzW3RyYWNlX3RyYWNlYmFja10gPSB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBzdGF0c1t0cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSArPSBzaXplCisgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHNbdHJhY2ViYWNrXSA9IFN0YXRpc3RpYyh0cmFjZWJhY2ssIHNpemUsIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGN1bXVsYXRpdmUgc3RhdGlzdGljcworICAgICAgICAgICAgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXM6CisgICAgICAgICAgICAgICAgc2l6ZSwgdHJhY2VfdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgICAgICAgICBmb3IgZnJhbWUgaW4gdHJhY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tzW2ZyYW1lXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXlfdHlwZSA9PSAnbGluZW5vJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoZnJhbWUsKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZTogIyBrZXlfdHlwZSA9PSAnZmlsZW5hbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9ICgoZnJhbWVbMF0sIDApLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IFRyYWNlYmFjayhmcmFtZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2tzW2ZyYW1lXSA9IHRyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdHNbdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0c1t0cmFjZWJhY2tdID0gU3RhdGlzdGljKHRyYWNlYmFjaywgc2l6ZSwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBkZWYgc3RhdGlzdGljcyhzZWxmLCBrZXlfdHlwZSwgY3VtdWxhdGl2ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHcm91cCBzdGF0aXN0aWNzIGJ5IGtleV90eXBlLiBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiBTdGF0aXN0aWMKKyAgICAgICAgaW5zdGFuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgZ3JvdXBlZCA9IHNlbGYuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBzdGF0aXN0aWNzID0gbGlzdChncm91cGVkLnZhbHVlcygpKQorICAgICAgICBzdGF0aXN0aWNzLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9U3RhdGlzdGljLl9zb3J0X2tleSkKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworICAgIGRlZiBjb21wYXJlX3RvKHNlbGYsIG9sZF9zbmFwc2hvdCwga2V5X3R5cGUsIGN1bXVsYXRpdmU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgd2l0aCBhbiBvbGQgc25hcHNob3Qgb2xkX3NuYXBzaG90LiBHZXQKKyAgICAgICAgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIFN0YXRpc3RpY0RpZmYgaW5zdGFuY2VzLCBncm91cGVkIGJ5CisgICAgICAgIGdyb3VwX2J5LgorICAgICAgICAiIiIKKyAgICAgICAgbmV3X2dyb3VwID0gc2VsZi5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIG9sZF9ncm91cCA9IG9sZF9zbmFwc2hvdC5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIHN0YXRpc3RpY3MgPSBfY29tcGFyZV9ncm91cGVkX3N0YXRzKG9sZF9ncm91cCwgbmV3X2dyb3VwKQorICAgICAgICBzdGF0aXN0aWNzLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9U3RhdGlzdGljRGlmZi5fc29ydF9rZXkpCisgICAgICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworZGVmIHRha2Vfc25hcHNob3QoKToKKyAgICAiIiIKKyAgICBUYWtlIGEgc25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNfdHJhY2luZygpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90IikKKyAgICB0cmFjZXMgPSBfZ2V0X3RyYWNlcygpCisgICAgdHJhY2ViYWNrX2xpbWl0ID0gZ2V0X3RyYWNlYmFja19saW1pdCgpCisgICAgcmV0dXJuIFNuYXBzaG90KHRyYWNlcywgdHJhY2ViYWNrX2xpbWl0KQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZS5weSBiL0xpYi90dXJ0bGUucHkKaW5kZXggYzZlYmZhNS4uYWI3YjZiYSAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZS5weQorKysgYi9MaWIvdHVydGxlLnB5CkBAIC0zODQzLDE4ICszODQzLDE4IEBACiAgICAgICAgIGtleSA9ICJUdXJ0bGUuIittZXRob2RuYW1lCiAgICAgICAgIGRvY3NkaWN0W2tleV0gPSBldmFsKGtleSkuX19kb2NfXwogCi0gICAgZiA9IG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikKLSAgICBrZXlzID0gc29ydGVkKFt4IGZvciB4IGluIGRvY3NkaWN0LmtleXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zcGxpdCgnLicpWzFdIG5vdCBpbiBfYWxpYXNfbGlzdF0pCi0gICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCi0gICAgZm9yIGtleSBpbiBrZXlzWzotMV06CisgICAgd2l0aCBvcGVuKCIlcy5weSIgJSBmaWxlbmFtZSwidyIpIGFzIGY6CisgICAgICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zcGxpdCgnLicpWzFdIG5vdCBpbiBfYWxpYXNfbGlzdF0pCisgICAgICAgIGYud3JpdGUoJ2RvY3NkaWN0ID0ge1xuXG4nKQorICAgICAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCisgICAgICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiIsXG5cbicgJSBkb2NzZGljdFtrZXldKQorICAgICAgICBrZXkgPSBrZXlzWy0xXQogICAgICAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiIsXG5cbicgJSBkb2NzZGljdFtrZXldKQotICAgIGtleSA9IGtleXNbLTFdCi0gICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKLSAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAgZi53cml0ZSgifVxuIikKLSAgICBmLmNsb3NlKCkKKyAgICAgICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiXG5cbicgJSBkb2NzZGljdFtrZXldKQorICAgICAgICBmLndyaXRlKCJ9XG4iKQorICAgICAgICBmLmNsb3NlKCkKIAogZGVmIHJlYWRfZG9jc3RyaW5ncyhsYW5nKToKICAgICAiIiJSZWFkIGluIGRvY3N0cmluZ3MgZnJvbSBsYW5nLXNwZWNpZmljIGRvY3N0cmluZyBkaWN0aW9uYXJ5LgpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkgYi9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQppbmRleCBjYmYzYWViLi5hMTQ2ODRjIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQorKysgYi9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQpAQCAtNiw3ICs2LDcgQEAKIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiBmcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yCiBmcm9tIGlkbGVsaWIudGV4dFZpZXcgaW1wb3J0IHZpZXdfZmlsZSAjIFRleHRWaWV3ZXIKLWZyb20gaW1wIGltcG9ydCByZWxvYWQKK2Zyb20gaW1wb3J0bGliIGltcG9ydCByZWxvYWQKIAogaW1wb3J0IHR1cnRsZQogaW1wb3J0IHRpbWUKZGlmZiAtLWdpdCBhL0xpYi90eXBlcy5weSBiL0xpYi90eXBlcy5weQppbmRleCBjZmQwOWVhLi43ZTRmZWMyIDEwMDY0NAotLS0gYS9MaWIvdHlwZXMucHkKKysrIGIvTGliL3R5cGVzLnB5CkBAIC05OSwzICs5OSw2MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSAobm9uLXN0cmljdCkgc3ViY2xhc3MgIgogICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSBtZXRhY2xhc3NlcyBvZiBhbGwgaXRzIGJhc2VzIikKICAgICByZXR1cm4gd2lubmVyCisKK2NsYXNzIER5bmFtaWNDbGFzc0F0dHJpYnV0ZToKKyAgICAiIiJSb3V0ZSBhdHRyaWJ1dGUgYWNjZXNzIG9uIGEgY2xhc3MgdG8gX19nZXRhdHRyX18uCisKKyAgICBUaGlzIGlzIGEgZGVzY3JpcHRvciwgdXNlZCB0byBkZWZpbmUgYXR0cmlidXRlcyB0aGF0IGFjdCBkaWZmZXJlbnRseSB3aGVuCisgICAgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBhbmQgdGhyb3VnaCBhIGNsYXNzLiAgSW5zdGFuY2UgYWNjZXNzIHJlbWFpbnMKKyAgICBub3JtYWwsIGJ1dCBhY2Nlc3MgdG8gYW4gYXR0cmlidXRlIHRocm91Z2ggYSBjbGFzcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUKKyAgICBjbGFzcydzIF9fZ2V0YXR0cl9fIG1ldGhvZDsgdGhpcyBpcyBkb25lIGJ5IHJhaXNpbmcgQXR0cmlidXRlRXJyb3IuCisKKyAgICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhbiBpbnN0YW5jZSwgYW5kIGhhdmUgdmlydHVhbAorICAgIGF0dHJpYnV0ZXMgb24gdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSAoc2VlIEVudW0gZm9yIGFuIGV4YW1wbGUpLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKToKKyAgICAgICAgc2VsZi5mZ2V0ID0gZmdldAorICAgICAgICBzZWxmLmZzZXQgPSBmc2V0CisgICAgICAgIHNlbGYuZmRlbCA9IGZkZWwKKyAgICAgICAgIyBuZXh0IHR3byBsaW5lcyBtYWtlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBhY3QgdGhlIHNhbWUgYXMgcHJvcGVydHkKKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jIG9yIGZnZXQuX19kb2NfXworICAgICAgICBzZWxmLm92ZXJ3cml0ZV9kb2MgPSBkb2MgaXMgTm9uZQorICAgICAgICAjIHN1cHBvcnQgZm9yIGFic3RyYWN0IG1ldGhvZHMKKyAgICAgICAgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IGJvb2woZ2V0YXR0cihmZ2V0LCAnX19pc2Fic3RyYWN0bWV0aG9kX18nLCBGYWxzZSkpCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXJjbGFzcz1Ob25lKToKKyAgICAgICAgaWYgaW5zdGFuY2UgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX186CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCkKKyAgICAgICAgZWxpZiBzZWxmLmZnZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJ1bnJlYWRhYmxlIGF0dHJpYnV0ZSIpCisgICAgICAgIHJldHVybiBzZWxmLmZnZXQoaW5zdGFuY2UpCisKKyAgICBkZWYgX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmZzZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBzZXQgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mc2V0KGluc3RhbmNlLCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKToKKyAgICAgICAgaWYgc2VsZi5mZGVsIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZmRlbChpbnN0YW5jZSkKKworICAgIGRlZiBnZXR0ZXIoc2VsZiwgZmdldCk6CisgICAgICAgIGZkb2MgPSBmZ2V0Ll9fZG9jX18gaWYgc2VsZi5vdmVyd3JpdGVfZG9jIGVsc2UgTm9uZQorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKGZnZXQsIHNlbGYuZnNldCwgc2VsZi5mZGVsLCBmZG9jIG9yIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHNldHRlcihzZWxmLCBmc2V0KToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIGZzZXQsIHNlbGYuZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGVsZXRlcihzZWxmLCBmZGVsKToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIHNlbGYuZnNldCwgZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKaW5kZXggNzk4ZWJjMC4uMjY2MzE3OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CisrKyBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQpAQCAtMTMsNyArMTMsNiBAQAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCi1mcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbSwgVVNBR0VfQVNfTUFJTgotVGVzdFByb2dyYW0uVVNBR0UgPSBVU0FHRV9BU19NQUlOCitmcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbQogCiBtYWluKG1vZHVsZT1Ob25lKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQppbmRleCBmNTZhZjU1Li43ZWQ5MzJmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvY2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQpAQCAtMywxNCArMywxNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgogCiBmcm9tIC4gaW1wb3J0IHJlc3VsdAogZnJvbSAudXRpbCBpbXBvcnQgKHN0cmNsYXNzLCBzYWZlX3JlcHIsIF9jb3VudF9kaWZmX2FsbF9wdXJwb3NlLAotICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlKQorICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlLCBfY29tbW9uX3Nob3J0ZW5fcmVwcikKIAogX191bml0dGVzdCA9IFRydWUKIApAQCAtMjYsMTcgKzI4LDExIEBACiAgICAgaW5zdGVhZCBvZiByYWlzaW5nIHRoaXMgZGlyZWN0bHkuCiAgICAgIiIiCiAKLWNsYXNzIF9FeHBlY3RlZEZhaWx1cmUoRXhjZXB0aW9uKToKK2NsYXNzIF9TaG91bGRTdG9wKEV4Y2VwdGlvbik6CiAgICAgIiIiCi0gICAgUmFpc2UgdGhpcyB3aGVuIGEgdGVzdCBpcyBleHBlY3RlZCB0byBmYWlsLgotCi0gICAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgVGhlIHRlc3Qgc2hvdWxkIHN0b3AuCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICBzdXBlcihfRXhwZWN0ZWRGYWlsdXJlLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbwotCiBjbGFzcyBfVW5leHBlY3RlZFN1Y2Nlc3MoRXhjZXB0aW9uKToKICAgICAiIiIKICAgICBUaGUgdGVzdCB3YXMgc3VwcG9zZWQgdG8gZmFpbCwgYnV0IGl0IGRpZG4ndCEKQEAgLTQ0LDEzICs0MCw0MCBAQAogCiAKIGNsYXNzIF9PdXRjb21lKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmUgPSBGYWxzZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyA9IGhhc2F0dHIocmVzdWx0LCAiYWRkU3ViVGVzdCIpCiAgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKLSAgICAgICAgc2VsZi5za2lwcGVkID0gTm9uZQotICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzID0gTm9uZQorICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQogICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgdGVzdF9jYXNlLCBpc1Rlc3Q9RmFsc2UpOgorICAgICAgICBvbGRfc3VjY2VzcyA9IHNlbGYuc3VjY2VzcworICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTa2lwVGVzdCBhcyBlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc2tpcHBlZC5hcHBlbmQoKHRlc3RfY2FzZSwgc3RyKGUpKSkKKyAgICAgICAgZXhjZXB0IF9TaG91bGRTdG9wOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBzZWxmLmV4cGVjdGluZ19mYWlsdXJlOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgZXhjX2luZm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHMgYW5kIHNlbGYuc3VjY2VzczoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgTm9uZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBzZWxmLnN1Y2Nlc3MgYW5kIG9sZF9zdWNjZXNzCiAKIAogZGVmIF9pZChvYmopOgpAQCAtODgsMjIgKzExMSwyNiBAQAogICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCiAgICAgcmV0dXJuIF9pZAogCi0KLWRlZiBleHBlY3RlZEZhaWx1cmUoZnVuYyk6Ci0gICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVkRmFpbHVyZShzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzCi0gICAgcmV0dXJuIHdyYXBwZXIKK2RlZiBleHBlY3RlZEZhaWx1cmUodGVzdF9pdGVtKToKKyAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9leHBlY3RpbmdfZmFpbHVyZV9fID0gVHJ1ZQorICAgIHJldHVybiB0ZXN0X2l0ZW0KIAogCi1jbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQob2JqZWN0KToKK2NsYXNzIF9CYXNlVGVzdENhc2VDb250ZXh0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6CisgICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKworY2xhc3MgX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgdGVzdF9jYXNlLCBjYWxsYWJsZV9vYmo9Tm9uZSwKICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXg9Tm9uZSk6CisgICAgICAgIF9CYXNlVGVzdENhc2VDb250ZXh0Ll9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSkKICAgICAgICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCiAgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCiAgICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBub3QgTm9uZToKQEAgLTExOCwxMCArMTQ1LDYgQEAKICAgICAgICAgc2VsZi5leHBlY3RlZF9yZWdleCA9IGV4cGVjdGVkX3JlZ2V4CiAgICAgICAgIHNlbGYubXNnID0gTm9uZQogCi0gICAgZGVmIF9yYWlzZUZhaWx1cmUoc2VsZiwgc3RhbmRhcmRNc2cpOgotICAgICAgICBtc2cgPSBzZWxmLnRlc3RfY2FzZS5fZm9ybWF0TWVzc2FnZShzZWxmLm1zZywgc3RhbmRhcmRNc2cpCi0gICAgICAgIHJhaXNlIHNlbGYudGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24obXNnKQotCiAgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBjYWxsYWJsZV9vYmosIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBJZiBjYWxsYWJsZV9vYmogaXMgTm9uZSwgYXNzZXJ0UmFpc2VzL1dhcm5zIGlzIGJlaW5nIHVzZWQgYXMgYQpAQCAtMTM1LDcgKzE1OCw2IEBACiAgICAgICAgICAgICBjYWxsYWJsZV9vYmooKmFyZ3MsICoqa3dhcmdzKQogCiAKLQogY2xhc3MgX0Fzc2VydFJhaXNlc0NvbnRleHQoX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KToKICAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRSYWlzZXMqIG1ldGhvZHMuIiIiCiAKQEAgLTIxNyw2ICsyMzksNzQgQEAKICAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgie30gbm90IHRyaWdnZXJlZCIuZm9ybWF0KGV4Y19uYW1lKSkKIAogCisKK19Mb2dnaW5nV2F0Y2hlciA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl9Mb2dnaW5nV2F0Y2hlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicmVjb3JkcyIsICJvdXRwdXQiXSkKKworCitjbGFzcyBfQ2FwdHVyaW5nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICIiIgorICAgIEEgbG9nZ2luZyBoYW5kbGVyIGNhcHR1cmluZyBhbGwgKHJhdyBhbmQgZm9ybWF0dGVkKSBsb2dnaW5nIG91dHB1dC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IF9Mb2dnaW5nV2F0Y2hlcihbXSwgW10pCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHNlbGYud2F0Y2hlci5yZWNvcmRzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgc2VsZi53YXRjaGVyLm91dHB1dC5hcHBlbmQobXNnKQorCisKKworY2xhc3MgX0Fzc2VydExvZ3NDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKKyAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRMb2dzKCkuIiIiCisKKyAgICBMT0dHSU5HX0ZPUk1BVCA9ICIlKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbG9nZ2VyX25hbWUsIGxldmVsKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQorICAgICAgICBzZWxmLmxvZ2dlcl9uYW1lID0gbG9nZ2VyX25hbWUKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzZWxmLmxldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCBsZXZlbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubG9nZ2VyX25hbWUsIGxvZ2dpbmcuTG9nZ2VyKToKKyAgICAgICAgICAgIGxvZ2dlciA9IHNlbGYubG9nZ2VyID0gc2VsZi5sb2dnZXJfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihzZWxmLmxvZ2dlcl9uYW1lKQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihzZWxmLkxPR0dJTkdfRk9STUFUKQorICAgICAgICBoYW5kbGVyID0gX0NhcHR1cmluZ0hhbmRsZXIoKQorICAgICAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IGhhbmRsZXIud2F0Y2hlcgorICAgICAgICBzZWxmLm9sZF9oYW5kbGVycyA9IGxvZ2dlci5oYW5kbGVyc1s6XQorICAgICAgICBzZWxmLm9sZF9sZXZlbCA9IGxvZ2dlci5sZXZlbAorICAgICAgICBzZWxmLm9sZF9wcm9wYWdhdGUgPSBsb2dnZXIucHJvcGFnYXRlCisgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtoYW5kbGVyXQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKyAgICAgICAgbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCisgICAgICAgIHJldHVybiBoYW5kbGVyLndhdGNoZXIKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6CisgICAgICAgIHNlbGYubG9nZ2VyLmhhbmRsZXJzID0gc2VsZi5vbGRfaGFuZGxlcnMKKyAgICAgICAgc2VsZi5sb2dnZXIucHJvcGFnYXRlID0gc2VsZi5vbGRfcHJvcGFnYXRlCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYub2xkX2xldmVsKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBsZW4oc2VsZi53YXRjaGVyLnJlY29yZHMpID09IDA6CisgICAgICAgICAgICBzZWxmLl9yYWlzZUZhaWx1cmUoCisgICAgICAgICAgICAgICAgIm5vIGxvZ3Mgb2YgbGV2ZWwge30gb3IgaGlnaGVyIHRyaWdnZXJlZCBvbiB7fSIKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKHNlbGYubGV2ZWwpLCBzZWxmLmxvZ2dlci5uYW1lKSkKKworCiBjbGFzcyBUZXN0Q2FzZShvYmplY3QpOgogICAgICIiIkEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzaW5nbGUgdGVzdCBjYXNlcy4KIApAQCAtMjcwLDcgKzM2MCw3IEBACiAgICAgICAgICAgIG5vdCBoYXZlIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lCi0gICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRjb21lID0gTm9uZQogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gJ05vIHRlc3QnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZE5hbWUpCkBAIC0yODMsNiArMzczLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSB0ZXN0TWV0aG9kLl9fZG9jX18KICAgICAgICAgc2VsZi5fY2xlYW51cHMgPSBbXQorICAgICAgICBzZWxmLl9zdWJ0ZXN0ID0gTm9uZQogCiAgICAgICAgICMgTWFwIHR5cGVzIHRvIGN1c3RvbSBhc3NlcnRFcXVhbCBmdW5jdGlvbnMgdGhhdCB3aWxsIGNvbXBhcmUKICAgICAgICAgIyBpbnN0YW5jZXMgb2Ygc2FpZCB0eXBlIGluIG1vcmUgZGV0YWlsIHRvIGdlbmVyYXRlIGEgbW9yZSB1c2VmdWwKQEAgLTM3MCw0NCArNDYxLDgwIEBACiAgICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKICAgICAgICAgICAgICAgIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQogCi0gICAgZGVmIF9hZGRTa2lwKHNlbGYsIHJlc3VsdCwgcmVhc29uKToKKyAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCB0ZXN0X2Nhc2UsIHJlYXNvbik6CiAgICAgICAgIGFkZFNraXAgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZFNraXAnLCBOb25lKQogICAgICAgICBpZiBhZGRTa2lwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYWRkU2tpcChzZWxmLCByZWFzb24pCisgICAgICAgICAgICBhZGRTa2lwKHRlc3RfY2FzZSwgcmVhc29uKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkU2tpcCBtZXRob2QsIHNraXBzIG5vdCByZXBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQotICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHRlc3RfY2FzZSkKIAotICAgIGRlZiBfZXhlY3V0ZVRlc3RQYXJ0KHNlbGYsIGZ1bmN0aW9uLCBvdXRjb21lLCBpc1Rlc3Q9RmFsc2UpOgorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHN1YlRlc3Qoc2VsZiwgbXNnPU5vbmUsICoqcGFyYW1zKToKKyAgICAgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGVuY2xvc2VkIGJsb2NrCisgICAgICAgIG9mIGNvZGUgaW4gYSBzdWJ0ZXN0IGlkZW50aWZpZWQgYnkgdGhlIG9wdGlvbmFsIG1lc3NhZ2UgYW5kCisgICAgICAgIGtleXdvcmQgcGFyYW1ldGVycy4gIEEgZmFpbHVyZSBpbiB0aGUgc3VidGVzdCBtYXJrcyB0aGUgdGVzdAorICAgICAgICBjYXNlIGFzIGZhaWxlZCBidXQgcmVzdW1lcyBleGVjdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zZWQKKyAgICAgICAgYmxvY2ssIGFsbG93aW5nIGZ1cnRoZXIgdGVzdCBjb2RlIHRvIGJlIGV4ZWN1dGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJlbnQgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgIGlmIHBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IGNvbGxlY3Rpb25zLkNoYWluTWFwKHBhcmFtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcmFtc19tYXAgPSBwYXJlbnQucGFyYW1zLm5ld19jaGlsZChwYXJhbXMpCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBfU3ViVGVzdChzZWxmLCBtc2csIHBhcmFtc19tYXApCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5za2lwcGVkID0gc3RyKGUpCi0gICAgICAgIGV4Y2VwdCBfVW5leHBlY3RlZFN1Y2Nlc3M6Ci0gICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MgPSBleGNfaW5mbwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRjb21lLmVycm9ycy5hcHBlbmQoZXhjX2luZm8pCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIGlmIGlzVGVzdDoKLSAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLmZhaWx1cmVzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYuX3N1YnRlc3QsIGlzVGVzdD1UcnVlKToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUuc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9vdXRjb21lLnJlc3VsdAorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZSBhbmQgcmVzdWx0LmZhaWxmYXN0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICAgICAgZWxpZiBzZWxmLl9vdXRjb21lLmV4cGVjdGVkRmFpbHVyZToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGlzIGV4cGVjdGluZyBhIGZhaWx1cmUsIHdlIHJlYWxseSB3YW50IHRvCisgICAgICAgICAgICAgICAgIyBzdG9wIG5vdyBhbmQgcmVnaXN0ZXIgdGhlIGV4cGVjdGVkIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgcmFpc2UgX1Nob3VsZFN0b3AKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBwYXJlbnQKKworICAgIGRlZiBfZmVlZEVycm9yc1RvUmVzdWx0KHNlbGYsIHJlc3VsdCwgZXJyb3JzKToKKyAgICAgICAgZm9yIHRlc3QsIGV4Y19pbmZvIGluIGVycm9yczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgX1N1YlRlc3QpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWJUZXN0KHRlc3QudGVzdF9jYXNlLCB0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgIGVsaWYgZXhjX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhleGNfaW5mb1swXSwgc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUodGVzdCwgZXhjX2luZm8pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgcmVzdWx0LCBleGNfaW5mbyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZSA9IHJlc3VsdC5hZGRFeHBlY3RlZEZhaWx1cmUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKKworICAgIGRlZiBfYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgcmVzdWx0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSByZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3MKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkVW5leHBlY3RlZFN1Y2Nlc3MgbWV0aG9kLCByZXBvcnRpbmcgYXMgZmFpbHVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgYW4gYWN0dWFsIGV4Y2VwdGlvbiBhbmQgdHJhY2ViYWNrIHRvIGFkZEZhaWx1cmUsCisgICAgICAgICAgICAjIG90aGVyd2lzZSB0aGUgbGVnYWN5IHJlc3VsdCBjYW4gY2hva2UuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzIGZyb20gTm9uZQorICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdD1Ob25lKToKICAgICAgICAgb3JpZ19yZXN1bHQgPSByZXN1bHQKQEAgLTQyNiw0NiArNTUzLDM4IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2tpcF93aHkgPSAoZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdldGF0dHIodGVzdE1ldGhvZCwgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2tpcF93aHkpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHNlbGYsIHNraXBfd2h5KQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleHBlY3RpbmdfZmFpbHVyZSA9IGdldGF0dHIodGVzdE1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18iLCBGYWxzZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKCkKLSAgICAgICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gb3V0Y29tZQorICAgICAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX291dGNvbWUgPSBvdXRjb21lCiAKLSAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydChzZWxmLnNldFVwLCBvdXRjb21lKQorICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRVcCgpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHRlc3RNZXRob2QsIG91dGNvbWUsIGlzVGVzdD1UcnVlKQotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydChzZWxmLnRlYXJEb3duLCBvdXRjb21lKQorICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0aW5nX2ZhaWx1cmUgPSBleHBlY3RpbmdfZmFpbHVyZQorICAgICAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYsIGlzVGVzdD1UcnVlKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdE1ldGhvZCgpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVhckRvd24oKQogCiAgICAgICAgICAgICBzZWxmLmRvQ2xlYW51cHMoKQorICAgICAgICAgICAgZm9yIHRlc3QsIHJlYXNvbiBpbiBvdXRjb21lLnNraXBwZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHRlc3QsIHJlYXNvbikKKyAgICAgICAgICAgIHNlbGYuX2ZlZWRFcnJvcnNUb1Jlc3VsdChyZXN1bHQsIG91dGNvbWUuZXJyb3JzKQogICAgICAgICAgICAgaWYgb3V0Y29tZS5zdWNjZXNzOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuc2tpcHBlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIG91dGNvbWUuc2tpcHBlZCkKLSAgICAgICAgICAgICAgICBmb3IgZXhjX2luZm8gaW4gb3V0Y29tZS5lcnJvcnM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBmb3IgZXhjX2luZm8gaW4gb3V0Y29tZS5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgZXhjX2luZm8pCi0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgICAgIGlmIGV4cGVjdGluZ19mYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICBpZiBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZEV4cGVjdGVkRmFpbHVyZShyZXN1bHQsIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkVW5leHBlY3RlZFN1Y2Nlc3MgbWV0aG9kLCByZXBvcnRpbmcgYXMgZmFpbHVyZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MpCi0KLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gZ2V0YXR0cihyZXN1bHQsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRFeHBlY3RlZEZhaWx1cmUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkVW5leHBlY3RlZFN1Y2Nlc3MocmVzdWx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKQEAgLTQ3NywxMSArNTk2LDExIEBACiAgICAgZGVmIGRvQ2xlYW51cHMoc2VsZik6CiAgICAgICAgICIiIkV4ZWN1dGUgYWxsIGNsZWFudXAgZnVuY3Rpb25zLiBOb3JtYWxseSBjYWxsZWQgZm9yIHlvdSBhZnRlcgogICAgICAgICB0ZWFyRG93bi4iIiIKLSAgICAgICAgb3V0Y29tZSA9IHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzIG9yIF9PdXRjb21lKCkKKyAgICAgICAgb3V0Y29tZSA9IHNlbGYuX291dGNvbWUgb3IgX091dGNvbWUoKQogICAgICAgICB3aGlsZSBzZWxmLl9jbGVhbnVwczoKICAgICAgICAgICAgIGZ1bmN0aW9uLCBhcmdzLCBrd2FyZ3MgPSBzZWxmLl9jbGVhbnVwcy5wb3AoKQotICAgICAgICAgICAgcGFydCA9IGxhbWJkYTogZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHBhcnQsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCiAKICAgICAgICAgIyByZXR1cm4gdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICAgICAgICAgIyBldmVuIHRob3VnaCB3ZSBubyBsb25nZXIgdXMgaXQgaW50ZXJuYWxseQpAQCAtNjAwLDYgKzcxOSwyOCBAQAogICAgICAgICBjb250ZXh0ID0gX0Fzc2VydFdhcm5zQ29udGV4dChleHBlY3RlZF93YXJuaW5nLCBzZWxmLCBjYWxsYWJsZV9vYmopCiAgICAgICAgIHJldHVybiBjb250ZXh0LmhhbmRsZSgnYXNzZXJ0V2FybnMnLCBjYWxsYWJsZV9vYmosIGFyZ3MsIGt3YXJncykKIAorICAgIGRlZiBhc3NlcnRMb2dzKHNlbGYsIGxvZ2dlcj1Ob25lLCBsZXZlbD1Ob25lKToKKyAgICAgICAgIiIiRmFpbCB1bmxlc3MgYSBsb2cgbWVzc2FnZSBvZiBsZXZlbCAqbGV2ZWwqIG9yIGhpZ2hlciBpcyBlbWl0dGVkCisgICAgICAgIG9uICpsb2dnZXJfbmFtZSogb3IgaXRzIGNoaWxkcmVuLiAgSWYgb21pdHRlZCwgKmxldmVsKiBkZWZhdWx0cyB0bworICAgICAgICBJTkZPIGFuZCAqbG9nZ2VyKiBkZWZhdWx0cyB0byB0aGUgcm9vdCBsb2dnZXIuCisKKyAgICAgICAgVGhpcyBtZXRob2QgbXVzdCBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBhbmQgd2lsbCB5aWVsZAorICAgICAgICBhIHJlY29yZGluZyBvYmplY3Qgd2l0aCB0d28gYXR0cmlidXRlczogYG91dHB1dGAgYW5kIGByZWNvcmRzYC4KKyAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgY29udGV4dCBtYW5hZ2VyLCB0aGUgYG91dHB1dGAgYXR0cmlidXRlIHdpbGwKKyAgICAgICAgYmUgYSBsaXN0IG9mIHRoZSBtYXRjaGluZyBmb3JtYXR0ZWQgbG9nIG1lc3NhZ2VzIGFuZCB0aGUKKyAgICAgICAgYHJlY29yZHNgIGF0dHJpYnV0ZSB3aWxsIGJlIGEgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBMb2dSZWNvcmQKKyAgICAgICAgb2JqZWN0cy4KKworICAgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycsIGxldmVsPSdJTkZPJykgYXMgY206CisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpLmluZm8oJ2ZpcnN0IG1lc3NhZ2UnKQorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28uYmFyJykuZXJyb3IoJ3NlY29uZCBtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9Bc3NlcnRMb2dzQ29udGV4dChzZWxmLCBsb2dnZXIsIGxldmVsKQorCiAgICAgZGVmIF9nZXRBc3NlcnRFcXVhbGl0eUZ1bmMoc2VsZiwgZmlyc3QsIHNlY29uZCk6CiAgICAgICAgICIiIkdldCBhIGRldGFpbGVkIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHRoZSB0eXBlcyBvZiB0aGUgdHdvIGFyZ3MuCiAKQEAgLTYyOSw3ICs3NzAsNyBAQAogICAgIGRlZiBfYmFzZUFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKICAgICAgICAgIiIiVGhlIGRlZmF1bHQgYXNzZXJ0RXF1YWwgaW1wbGVtZW50YXRpb24sIG5vdCB0eXBlIHNwZWNpZmljLiIiIgogICAgICAgICBpZiBub3QgZmlyc3QgPT0gc2Vjb25kOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCksIHNhZmVfcmVwcihzZWNvbmQpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgX2NvbW1vbl9zaG9ydGVuX3JlcHIoZmlyc3QsIHNlY29uZCkKICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCiAKQEAgLTc2NCwxNCArOTA1LDkgQEAKICAgICAgICAgICAgIGlmIHNlcTEgPT0gc2VxMjoKICAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgc2VxMV9yZXByID0gc2FmZV9yZXByKHNlcTEpCi0gICAgICAgICAgICBzZXEyX3JlcHIgPSBzYWZlX3JlcHIoc2VxMikKLSAgICAgICAgICAgIGlmIGxlbihzZXExX3JlcHIpID4gMzA6Ci0gICAgICAgICAgICAgICAgc2VxMV9yZXByID0gc2VxMV9yZXByWzozMF0gKyAnLi4uJwotICAgICAgICAgICAgaWYgbGVuKHNlcTJfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXEyX3JlcHIgPSBzZXEyX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBlbGVtZW50cyA9IChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwgc2VxMV9yZXByLCBzZXEyX3JlcHIpCi0gICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSBlbGVtZW50cworICAgICAgICAgICAgZGlmZmVyaW5nID0gJyVzcyBkaWZmZXI6ICVzICE9ICVzXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAoc2VxX3R5cGVfbmFtZS5jYXBpdGFsaXplKCksKSArCisgICAgICAgICAgICAgICAgICAgIF9jb21tb25fc2hvcnRlbl9yZXByKHNlcTEsIHNlcTIpKQogCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuMSwgbGVuMikpOgogICAgICAgICAgICAgICAgIHRyeToKQEAgLTkyOSw3ICsxMDY1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQyLCBkaWN0LCAnU2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIGRpY3Rpb25hcnknKQogCiAgICAgICAgIGlmIGQxICE9IGQyOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihkMSwgVHJ1ZSksIHNhZmVfcmVwcihkMiwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihkMSwgZDIpCiAgICAgICAgICAgICBkaWZmID0gKCdcbicgKyAnXG4nLmpvaW4oZGlmZmxpYi5uZGlmZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQxKS5zcGxpdGxpbmVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChkMikuc3BsaXRsaW5lcygpKSkpCkBAIC0xMDEzLDggKzExNDksNyBAQAogICAgICAgICAgICAgaWYgbGVuKGZpcnN0bGluZXMpID09IDEgYW5kIGZpcnN0LnN0cmlwKCdcclxuJykgPT0gZmlyc3Q6CiAgICAgICAgICAgICAgICAgZmlyc3RsaW5lcyA9IFtmaXJzdCArICdcbiddCiAgICAgICAgICAgICAgICAgc2Vjb25kbGluZXMgPSBbc2Vjb25kICsgJ1xuJ10KLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QsIFRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQsIFRydWUpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgX2NvbW1vbl9zaG9ydGVuX3JlcHIoZmlyc3QsIHNlY29uZCkKICAgICAgICAgICAgIGRpZmYgPSAnXG4nICsgJycuam9pbihkaWZmbGliLm5kaWZmKGZpcnN0bGluZXMsIHNlY29uZGxpbmVzKSkKICAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmKQogICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCkBAIC0xMjEyLDMgKzEzNDcsMzkgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdGlvbgogICAgICAgICBkb2MgPSBzZWxmLl90ZXN0RnVuYy5fX2RvY19fCiAgICAgICAgIHJldHVybiBkb2MgYW5kIGRvYy5zcGxpdCgiXG4iKVswXS5zdHJpcCgpIG9yIE5vbmUKKworCitjbGFzcyBfU3ViVGVzdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBtZXNzYWdlLCBwYXJhbXMpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgc2VsZi5wYXJhbXMgPSBwYXJhbXMKKyAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uID0gdGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24KKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzdWJ0ZXN0cyBjYW5ub3QgYmUgcnVuIGRpcmVjdGx5IikKKworICAgIGRlZiBfc3ViRGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHBhcnRzID0gW10KKyAgICAgICAgaWYgc2VsZi5fbWVzc2FnZToKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgiW3t9XSIuZm9ybWF0KHNlbGYuX21lc3NhZ2UpKQorICAgICAgICBpZiBzZWxmLnBhcmFtczoKKyAgICAgICAgICAgIHBhcmFtc19kZXNjID0gJywgJy5qb2luKAorICAgICAgICAgICAgICAgICJ7fT17IXJ9Ii5mb3JtYXQoaywgdikKKyAgICAgICAgICAgICAgICBmb3IgKGssIHYpIGluIHNvcnRlZChzZWxmLnBhcmFtcy5pdGVtcygpKSkKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgiKHt9KSIuZm9ybWF0KHBhcmFtc19kZXNjKSkKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKHBhcnRzKSBvciAnKDxzdWJ0ZXN0PiknCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZS5pZCgpLCBzZWxmLl9zdWJEZXNjcmlwdGlvbigpKQorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3VidGVzdCwgb3IgTm9uZSBpZiBubworICAgICAgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiBwcm92aWRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfY2FzZS5zaG9ydERlc2NyaXB0aW9uKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9IHt9Ii5mb3JtYXQoc2VsZi50ZXN0X2Nhc2UsIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQppbmRleCA5YWIyNmMxLi44MDhjNTBlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CisrKyBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKQEAgLTM0LDYgKzM0LDE0IEBACiAgICAgVGVzdENsYXNzID0gdHlwZShjbGFzc25hbWUsIChjYXNlLlRlc3RDYXNlLCksIGF0dHJzKQogICAgIHJldHVybiBzdWl0ZUNsYXNzKChUZXN0Q2xhc3MobWV0aG9kbmFtZSksKSkKIAorZGVmIF9tYWtlX3NraXBwZWRfdGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIEBjYXNlLnNraXAoc3RyKGV4Y2VwdGlvbikpCisgICAgZGVmIHRlc3RTa2lwcGVkKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgYXR0cnMgPSB7bWV0aG9kbmFtZTogdGVzdFNraXBwZWR9CisgICAgVGVzdENsYXNzID0gdHlwZSgiTW9kdWxlU2tpcHBlZCIsIChjYXNlLlRlc3RDYXNlLCksIGF0dHJzKQorICAgIHJldHVybiBzdWl0ZUNsYXNzKChUZXN0Q2xhc3MobWV0aG9kbmFtZSksKSkKKwogZGVmIF9qeXRob25fYXdhcmVfc3BsaXRleHQocGF0aCk6CiAgICAgaWYgcGF0aC5sb3dlcigpLmVuZHN3aXRoKCckcHkuY2xhc3MnKToKICAgICAgICAgcmV0dXJuIHBhdGhbOi05XQpAQCAtNTMsOCArNjEsOSBAQAogICAgIGRlZiBsb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZiwgdGVzdENhc2VDbGFzcyk6CiAgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGVzdENhc2VDbGFzcyIiIgogICAgICAgICBpZiBpc3N1YmNsYXNzKHRlc3RDYXNlQ2xhc3MsIHN1aXRlLlRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gVGVzdFN1aXRlLiIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSBUZXN0Q2FzZT8iKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdFN1aXRlLiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0Q2FzZT8iKQogICAgICAgICB0ZXN0Q2FzZU5hbWVzID0gc2VsZi5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCiAgICAgICAgIGlmIG5vdCB0ZXN0Q2FzZU5hbWVzIGFuZCBoYXNhdHRyKHRlc3RDYXNlQ2xhc3MsICdydW5UZXN0Jyk6CiAgICAgICAgICAgICB0ZXN0Q2FzZU5hbWVzID0gWydydW5UZXN0J10KQEAgLTE2OSw2ICsxNzgsOSBAQAogICAgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRlbHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdAogICAgICAgICBwYWNrYWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuIHRvcF9sZXZlbF9kaXIgaXMgc3RvcmVkIHNvCiAgICAgICAgIGxvYWRfdGVzdHMgZG9lcyBub3QgbmVlZCB0byBwYXNzIHRoaXMgYXJndW1lbnQgaW4gdG8gbG9hZGVyLmRpc2NvdmVyKCkuCisKKyAgICAgICAgUGF0aHMgYXJlIHNvcnRlZCBiZWZvcmUgYmVpbmcgaW1wb3J0ZWQgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZSBleGVjdXRpb24KKyAgICAgICAgb3JkZXIgZXZlbiBvbiBmaWxlc3lzdGVtcyB3aXRoIG5vbi1hbHBoYWJldGljYWwgb3JkZXJpbmcgbGlrZSBleHQzLzQuCiAgICAgICAgICIiIgogICAgICAgICBzZXRfaW1wbGljaXRfdG9wID0gRmFsc2UKICAgICAgICAgaWYgdG9wX2xldmVsX2RpciBpcyBOb25lIGFuZCBzZWxmLl90b3BfbGV2ZWxfZGlyIGlzIG5vdCBOb25lOgpAQCAtMTg5LDYgKzIwMSw4IEBACiAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWxfZGlyCiAKICAgICAgICAgaXNfbm90X2ltcG9ydGFibGUgPSBGYWxzZQorICAgICAgICBpc19uYW1lc3BhY2UgPSBGYWxzZQorICAgICAgICB0ZXN0cyA9IFtdCiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5hYnNwYXRoKHN0YXJ0X2RpcikpOgogICAgICAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKHN0YXJ0X2RpcikKICAgICAgICAgICAgIGlmIHN0YXJ0X2RpciAhPSB0b3BfbGV2ZWxfZGlyOgpAQCAtMjAyLDE1ICsyMTYsNTIgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGhlX21vZHVsZSA9IHN5cy5tb2R1bGVzW3N0YXJ0X2Rpcl0KICAgICAgICAgICAgICAgICB0b3BfcGFydCA9IHN0YXJ0X2Rpci5zcGxpdCgnLicpWzBdCi0gICAgICAgICAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZSgodGhlX21vZHVsZS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKAorICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoKHRoZV9tb2R1bGUuX19maWxlX18pKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgbG9vayBmb3IgbmFtZXNwYWNlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMgPSB0aGVfbW9kdWxlLl9fc3BlY19fCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BlYyBhbmQgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gdGhlX21vZHVsZS5fX3BhdGhfXzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdCBzZXRfaW1wbGljaXRfdG9wIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhdGguc3RhcnRzd2l0aCh0b3BfbGV2ZWxfZGlyKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGguc3BsaXQodGhlX21vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgiLiIsIG9zLnBhdGguc2VwKSlbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9maW5kX3Rlc3RzKHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiB0aGVfbW9kdWxlLl9fbmFtZV9fIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYnVpbHRpbiBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2FuIG5vdCB1c2UgYnVpbHRpbiBtb2R1bGVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgZG90dGVkIG1vZHVsZSBuYW1lcycpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb25cJ3Qga25vdyBob3cgdG8gZGlzY292ZXIgZnJvbSB7IXJ9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodGhlX21vZHVsZSkpIGZyb20gTm9uZQorCiAgICAgICAgICAgICAgICAgaWYgc2V0X2ltcGxpY2l0X3RvcDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHNlbGYuX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUodG9wX3BhcnQpCi0gICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNfbmFtZXNwYWNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUodG9wX3BhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQogCiAgICAgICAgIGlmIGlzX25vdF9pbXBvcnRhYmxlOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1N0YXJ0IGRpcmVjdG9yeSBpcyBub3QgaW1wb3J0YWJsZTogJXInICUgc3RhcnRfZGlyKQogCi0gICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgIGlmIG5vdCBpc19uYW1lc3BhY2U6CisgICAgICAgICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pKQogICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKHRlc3RzKQogCiAgICAgZGVmIF9nZXRfZGlyZWN0b3J5X2NvbnRhaW5pbmdfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKQEAgLTI0Myw5ICsyOTQsOSBAQAogICAgICAgICAjIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHVzZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBzdHJhdGVneQogICAgICAgICByZXR1cm4gZm5tYXRjaChwYXRoLCBwYXR0ZXJuKQogCi0gICAgZGVmIF9maW5kX3Rlc3RzKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgZGVmIF9maW5kX3Rlc3RzKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPUZhbHNlKToKICAgICAgICAgIiIiVXNlZCBieSBkaXNjb3ZlcnkuIFlpZWxkcyB0ZXN0IHN1aXRlcyBpdCBsb2Fkcy4iIiIKLSAgICAgICAgcGF0aHMgPSBvcy5saXN0ZGlyKHN0YXJ0X2RpcikKKyAgICAgICAgcGF0aHMgPSBzb3J0ZWQob3MubGlzdGRpcihzdGFydF9kaXIpKQogCiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgogICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHN0YXJ0X2RpciwgcGF0aCkKQEAgLTI1OSw2ICszMTAsOCBAQAogICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfbmFtZV9mcm9tX3BhdGgoZnVsbF9wYXRoKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgY2FzZS5Ta2lwVGVzdCBhcyBlOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9za2lwcGVkX3Rlc3QobmFtZSwgZSwgc2VsZi5zdWl0ZUNsYXNzKQogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2VfZmFpbGVkX2ltcG9ydF90ZXN0KG5hbWUsIHNlbGYuc3VpdGVDbGFzcykKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjc0LDcgKzMyNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cgJSAobW9kX25hbWUsIG1vZHVsZV9kaXIsIGV4cGVjdGVkX2RpcikpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGZ1bGxfcGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGlmIChub3QgbmFtZXNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGZ1bGxfcGF0aCwgJ19faW5pdF9fLnB5JykpKToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgICAgIGxvYWRfdGVzdHMgPSBOb25lCkBAIC0yOTEsOCArMzQ1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdHMgbG9hZGVkIGZyb20gcGFja2FnZSBmaWxlCiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0cwogICAgICAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZQotICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybik6Ci0gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF90ZXN0cyhmdWxsX3BhdGgsIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIHBhdHRlcm4pCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbWFpbi5weSBiL0xpYi91bml0dGVzdC9tYWluLnB5CmluZGV4IGVhZDY0OTMuLjE4MGRmODYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9tYWluLnB5CisrKyBiL0xpYi91bml0dGVzdC9tYWluLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVW5pdHRlc3QgbWFpbiBwcm9ncmFtIiIiCiAKIGltcG9ydCBzeXMKLWltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgb3MKIAogZnJvbSAuIGltcG9ydCBsb2FkZXIsIHJ1bm5lcgpAQCAtOSw1MyArOSwyMCBAQAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCi1GQUlMRkFTVCAgICAgPSAiICAtZiwgLS1mYWlsZmFzdCAgIFN0b3Agb24gZmlyc3QgZmFpbHVyZVxuIgotQ0FUQ0hCUkVBSyAgID0gIiAgLWMsIC0tY2F0Y2ggICAgICBDYXRjaCBjb250cm9sLUMgYW5kIGRpc3BsYXkgcmVzdWx0c1xuIgotQlVGRkVST1VUUFVUID0gIiAgLWIsIC0tYnVmZmVyICAgICBCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3QgcnVuc1xuIgotCi1VU0FHRV9BU19NQUlOID0gIiIiXAotVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RzXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitNQUlOX0VYQU1QTEVTID0gIiIiXAogRXhhbXBsZXM6Ci0gICUocHJvZ05hbWUpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKLSAgJShwcm9nTmFtZSlzIG1vZHVsZS5UZXN0Q2xhc3MgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSBtb2R1bGUuVGVzdENsYXNzCi0gICUocHJvZ05hbWUpcyBtb2R1bGUuQ2xhc3MudGVzdF9tZXRob2QgIC0gcnVuIHNwZWNpZmllZCB0ZXN0IG1ldGhvZAotCi1bdGVzdHNdIGNhbiBiZSBhIGxpc3Qgb2YgYW55IG51bWJlciBvZiB0ZXN0IG1vZHVsZXMsIGNsYXNzZXMgYW5kIHRlc3QKLW1ldGhvZHMuCi0KLUFsdGVybmF0aXZlIFVzYWdlOiAlKHByb2dOYW1lKXMgZGlzY292ZXIgW29wdGlvbnNdCi0KLU9wdGlvbnM6Ci0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcyAgLXMgZGlyZWN0b3J5ICAgICBEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkKLSAgLXAgcGF0dGVybiAgICAgICBQYXR0ZXJuIHRvIG1hdGNoIHRlc3QgZmlsZXMgKCd0ZXN0Ki5weScgZGVmYXVsdCkKLSAgLXQgZGlyZWN0b3J5ICAgICBUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHQgdG8KLSAgICAgICAgICAgICAgICAgICBzdGFydCBkaXJlY3RvcnkpCi0KLUZvciB0ZXN0IGRpc2NvdmVyeSBhbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AKLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4KKyAgJShwcm9nKXMgdGVzdF9tb2R1bGUgICAgICAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIHRlc3RfbW9kdWxlCisgICUocHJvZylzIG1vZHVsZS5UZXN0Q2xhc3MgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSBtb2R1bGUuVGVzdENsYXNzCisgICUocHJvZylzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCiAiIiIKIAotVVNBR0VfRlJPTV9NT0RVTEUgPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdF0gWy4uLl0KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0gIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKLSUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworTU9EVUxFX0VYQU1QTEVTID0gIiIiXAogRXhhbXBsZXM6Ci0gICUocHJvZ05hbWUpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cwotICAlKHByb2dOYW1lKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAgICAgLSBydW4gc3VpdGUgJ015VGVzdFN1aXRlJwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAgICAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlICAgICAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTXlUZXN0Q2FzZQorICAlKHByb2cpcyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCisgICUocHJvZylzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgLSBydW4gc3VpdGUgJ015VGVzdFN1aXRlJworICAlKHByb2cpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZworICAlKHByb2cpcyBNeVRlc3RDYXNlICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTXlUZXN0Q2FzZQogIiIiCiAKIGRlZiBfY29udmVydF9uYW1lKG5hbWUpOgpAQCAtODIsMTAgKzQ5LDExIEBACiAgICAgIiIiQSBjb21tYW5kLWxpbmUgcHJvZ3JhbSB0aGF0IHJ1bnMgYSBzZXQgb2YgdGVzdHM7IHRoaXMgaXMgcHJpbWFyaWx5CiAgICAgICAgZm9yIG1ha2luZyB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuCiAgICAgIiIiCi0gICAgVVNBR0UgPSBVU0FHRV9GUk9NX01PRFVMRQotCiAgICAgIyBkZWZhdWx0cyBmb3IgdGVzdGluZworICAgIG1vZHVsZT1Ob25lCisgICAgdmVyYm9zaXR5ID0gMQogICAgIGZhaWxmYXN0ID0gY2F0Y2hicmVhayA9IGJ1ZmZlciA9IHByb2dOYW1lID0gd2FybmluZ3MgPSBOb25lCisgICAgX2Rpc2NvdmVyeV9wYXJzZXIgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsIGFyZ3Y9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lcj1Ob25lLCB0ZXN0TG9hZGVyPWxvYWRlci5kZWZhdWx0VGVzdExvYWRlciwKQEAgLTEyNyw0NCArOTUsNDcgQEAKICAgICBkZWYgdXNhZ2VFeGl0KHNlbGYsIG1zZz1Ob25lKToKICAgICAgICAgaWYgbXNnOgogICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICB1c2FnZSA9IHsncHJvZ05hbWUnOiBzZWxmLnByb2dOYW1lLCAnY2F0Y2hicmVhayc6ICcnLCAnZmFpbGZhc3QnOiAnJywKLSAgICAgICAgICAgICAgICAgJ2J1ZmZlcic6ICcnfQotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2ZhaWxmYXN0J10gPSBGQUlMRkFTVAotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnY2F0Y2hicmVhayddID0gQ0FUQ0hCUkVBSwotICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydidWZmZXInXSA9IEJVRkZFUk9VVFBVVAotICAgICAgICBwcmludChzZWxmLlVTQUdFICUgdXNhZ2UpCisgICAgICAgIGlmIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2luaXRBcmdQYXJzZXJzKCkKKyAgICAgICAgc2VsZi5fcHJpbnRfaGVscCgpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKKyAgICBkZWYgX3ByaW50X2hlbHAoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5tb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuX21haW5fcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgICAgICBwcmludChNQUlOX0VYQU1QTEVTICUgeydwcm9nJzogc2VsZi5wcm9nTmFtZX0pCisgICAgICAgICAgICBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5fbWFpbl9wYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgICAgIHByaW50KE1PRFVMRV9FWEFNUExFUyAlIHsncHJvZyc6IHNlbGYucHJvZ05hbWV9KQorCiAgICAgZGVmIHBhcnNlQXJncyhzZWxmLCBhcmd2KToKLSAgICAgICAgaWYgKChsZW4oYXJndikgPiAxIGFuZCBhcmd2WzFdLmxvd2VyKCkgPT0gJ2Rpc2NvdmVyJykgb3IKLSAgICAgICAgICAgIChsZW4oYXJndikgPT0gMSBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZSkpOgotICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2luaXRBcmdQYXJzZXJzKCkKKyAgICAgICAgaWYgc2VsZi5tb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuX21haW5fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0sIHNlbGYpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50ZXN0czoKKyAgICAgICAgICAgICAgICAjIHRoaXMgYWxsb3dzICJweXRob24gLW0gdW5pdHRlc3QgLXYiIHRvIHN0aWxsIHdvcmsgZm9yCisgICAgICAgICAgICAgICAgIyB0ZXN0IGRpc2NvdmVyeS4KKyAgICAgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoW10pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tYWluX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdLCBzZWxmKQogCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX2dldE9wdFBhcnNlcigpCi0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSkKLSAgICAgICAgc2VsZi5fc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKG9wdGlvbnMpCi0KLSAgICAgICAgaWYgbGVuKGFyZ3MpID09IDAgYW5kIHNlbGYubW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICAjIHRoaXMgYWxsb3dzICJweXRob24gLW0gdW5pdHRlc3QgLXYiIHRvIHN0aWxsIHdvcmsgZm9yCi0gICAgICAgICAgICAjIHRlc3QgZGlzY292ZXJ5LiBUaGlzIG1lYW5zIC1jIC8gLWIgLyAtdiAvIC1mIG9wdGlvbnMgd2lsbAotICAgICAgICAgICAgIyBiZSBoYW5kbGVkIHR3aWNlLCB3aGljaCBpcyBoYXJtbGVzcyBidXQgbm90IGlkZWFsLgotICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMTpdKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgbGVuKGFyZ3MpID09IDAgYW5kIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKLSAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5tb2R1bGUKLSAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gTm9uZQotICAgICAgICBlbGlmIGxlbihhcmdzKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IF9jb252ZXJ0X25hbWVzKGFyZ3MpCisgICAgICAgIGlmIHNlbGYudGVzdHM6CisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IF9jb252ZXJ0X25hbWVzKHNlbGYudGVzdHMpCiAgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAgICAgICAgICMgdG8gc3VwcG9ydCBweXRob24gLW0gdW5pdHRlc3QgLi4uCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBOb25lCi0gICAgICAgIGVsc2U6CisgICAgICAgIGVsaWYgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgorICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmRlZmF1bHRUZXN0LCBzdHIpOgogICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSAoc2VsZi5kZWZhdWx0VGVzdCwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IGxpc3Qoc2VsZi5kZWZhdWx0VGVzdCkKICAgICAgICAgc2VsZi5jcmVhdGVUZXN0cygpCiAKICAgICBkZWYgY3JlYXRlVGVzdHMoc2VsZik6CkBAIC0xNzQsNzYgKzE0NSw4NCBAQAogICAgICAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLnRlc3ROYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUpCiAKLSAgICBkZWYgX2dldE9wdFBhcnNlcihzZWxmKToKLSAgICAgICAgaW1wb3J0IG9wdHBhcnNlCi0gICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCi0gICAgICAgIHBhcnNlci5wcm9nID0gc2VsZi5wcm9nTmFtZQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0tcXVpZXQnLCBkZXN0PSdxdWlldCcsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1F1aWV0IG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgZGVmIF9pbml0QXJnUGFyc2VycyhzZWxmKToKKyAgICAgICAgcGFyZW50X3BhcnNlciA9IHNlbGYuX2dldFBhcmVudEFyZ1BhcnNlcigpCisgICAgICAgIHNlbGYuX21haW5fcGFyc2VyID0gc2VsZi5fZ2V0TWFpbkFyZ1BhcnNlcihwYXJlbnRfcGFyc2VyKQorICAgICAgICBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyID0gc2VsZi5fZ2V0RGlzY292ZXJ5QXJnUGFyc2VyKHBhcmVudF9wYXJzZXIpCiAKLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZicsICctLWZhaWxmYXN0JywgZGVzdD0nZmFpbGZhc3QnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDYXRjaCBjdHJsLUMgYW5kIGRpc3BsYXkgcmVzdWx0cyBzbyBmYXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGRlZiBfZ2V0UGFyZW50QXJnUGFyc2VyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUXVpZXQgb3V0cHV0JykKKworICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZhaWxmYXN0JywgZGVzdD0nZmFpbGZhc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTdG9wIG9uIGZpcnN0IGZhaWwgb3IgZXJyb3InKQorICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDYXRjaCBjdHJsLUMgYW5kIGRpc3BsYXkgcmVzdWx0cyBzbyBmYXInKQorICAgICAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0cycpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IEZhbHNlCisKICAgICAgICAgcmV0dXJuIHBhcnNlcgogCi0gICAgZGVmIF9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMoc2VsZiwgb3B0aW9ucyk6Ci0gICAgICAgICMgb25seSBzZXQgb3B0aW9ucyBmcm9tIHRoZSBwYXJzaW5nIGhlcmUKLSAgICAgICAgIyBpZiB0aGV5IHdlcmVuJ3Qgc2V0IGV4cGxpY2l0bHkgaW4gdGhlIGNvbnN0cnVjdG9yCi0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBvcHRpb25zLmZhaWxmYXN0Ci0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gb3B0aW9ucy5jYXRjaGJyZWFrCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyCisgICAgZGVmIF9nZXRNYWluQXJnUGFyc2VyKHNlbGYsIHBhcmVudCk6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisgICAgICAgIHBhcnNlci5wcm9nID0gc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCA9IHNlbGYuX3ByaW50X2hlbHAKIAotICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDIKLSAgICAgICAgZWxpZiBvcHRpb25zLnF1aWV0OgotICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAwCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3Rlc3RzJywgbmFyZ3M9JyonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2EgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2VzIGFuZCB0ZXN0IG1ldGhvZHMuJykKIAotICAgIGRlZiBfYWRkRGlzY292ZXJ5T3B0aW9ucyhzZWxmLCBwYXJzZXIpOgotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zdGFydC1kaXJlY3RvcnknLCBkZXN0PSdzdGFydCcsIGRlZmF1bHQ9Jy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wYXR0ZXJuJywgZGVzdD0ncGF0dGVybicsIGRlZmF1bHQ9J3Rlc3QqLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0dGVybiB0byBtYXRjaCB0ZXN0cyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KSIpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRvcC1sZXZlbC1kaXJlY3RvcnknLCBkZXN0PSd0b3AnLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gc3RhcnQgZGlyZWN0b3J5KScpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGRlZiBfZ2V0RGlzY292ZXJ5QXJnUGFyc2VyKHNlbGYsIHBhcmVudCk6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisgICAgICAgIHBhcnNlci5wcm9nID0gJyVzIGRpc2NvdmVyJyAlIHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLmVwaWxvZyA9ICgnRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydGFibGUgZnJvbSB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBvZiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9qZWN0LicpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zdGFydC1kaXJlY3RvcnknLCBkZXN0PSdzdGFydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wYXR0ZXJuJywgZGVzdD0ncGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUGF0dGVybiB0byBtYXRjaCB0ZXN0cyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdG9wLWxldmVsLWRpcmVjdG9yeScsIGRlc3Q9J3RvcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnQgZGlyZWN0b3J5KScpCisgICAgICAgIGZvciBhcmcgaW4gKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudChhcmcsIG5hcmdzPSc/JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKworICAgICAgICByZXR1cm4gcGFyc2VyCiAKICAgICBkZWYgX2RvX2Rpc2NvdmVyeShzZWxmLCBhcmd2LCBMb2FkZXI9Tm9uZSk6Ci0gICAgICAgIGlmIExvYWRlciBpcyBOb25lOgotICAgICAgICAgICAgTG9hZGVyID0gbGFtYmRhOiBzZWxmLnRlc3RMb2FkZXIKKyAgICAgICAgc2VsZi5zdGFydCA9ICcuJworICAgICAgICBzZWxmLnBhdHRlcm4gPSAndGVzdCoucHknCisgICAgICAgIHNlbGYudG9wID0gTm9uZQorICAgICAgICBpZiBhcmd2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBoYW5kbGUgY29tbWFuZCBsaW5lIGFyZ3MgZm9yIHRlc3QgZGlzY292ZXJ5CisgICAgICAgICAgICBpZiBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBmb3IgdGVzdGluZworICAgICAgICAgICAgICAgIHNlbGYuX2luaXRBcmdQYXJzZXJzKCkKKyAgICAgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIucGFyc2VfYXJncyhhcmd2LCBzZWxmKQogCi0gICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQotICAgICAgICBzZWxmLnByb2dOYW1lID0gJyVzIGRpc2NvdmVyJyAlIHNlbGYucHJvZ05hbWUKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0T3B0UGFyc2VyKCkKLSAgICAgICAgc2VsZi5fYWRkRGlzY292ZXJ5T3B0aW9ucyhwYXJzZXIpCi0KLSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCi0gICAgICAgIGlmIGxlbihhcmdzKSA+IDM6Ci0gICAgICAgICAgICBzZWxmLnVzYWdlRXhpdCgpCi0KLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHppcCgoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyksIGFyZ3MpOgotICAgICAgICAgICAgc2V0YXR0cihvcHRpb25zLCBuYW1lLCB2YWx1ZSkKLQotICAgICAgICBzZWxmLl9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMob3B0aW9ucykKLQotICAgICAgICBzdGFydF9kaXIgPSBvcHRpb25zLnN0YXJ0Ci0gICAgICAgIHBhdHRlcm4gPSBvcHRpb25zLnBhdHRlcm4KLSAgICAgICAgdG9wX2xldmVsX2RpciA9IG9wdGlvbnMudG9wCi0KLSAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKLSAgICAgICAgc2VsZi50ZXN0ID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2RpcikKKyAgICAgICAgbG9hZGVyID0gc2VsZi50ZXN0TG9hZGVyIGlmIExvYWRlciBpcyBOb25lIGVsc2UgTG9hZGVyKCkKKyAgICAgICAgc2VsZi50ZXN0ID0gbG9hZGVyLmRpc2NvdmVyKHNlbGYuc3RhcnQsIHNlbGYucGF0dGVybiwgc2VsZi50b3ApCiAKICAgICBkZWYgcnVuVGVzdHMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhazoKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tb2NrLnB5IGIvTGliL3VuaXR0ZXN0L21vY2sucHkKaW5kZXggMDczODY5YS4uZGM1YzAzMyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21vY2sucHkKKysrIGIvTGliL3VuaXR0ZXN0L21vY2sucHkKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgcHByaW50CiBpbXBvcnQgc3lzCi1mcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcywgcGFydGlhbAogCiAKIEJhc2VFeGNlcHRpb25zID0gKEJhc2VFeGNlcHRpb24sKQpAQCAtNjYsNTUgKzY2LDQ1IEBACiApCiAKIAotZGVmIF9nZXRzaWduYXR1cmUoZnVuYywgc2tpcGZpcnN0LCBpbnN0YW5jZT1GYWxzZSk6Ci0gICAgaWYgaXNpbnN0YW5jZShmdW5jLCB0eXBlKSBhbmQgbm90IGluc3RhbmNlOgorZGVmIF9nZXRfc2lnbmF0dXJlX29iamVjdChmdW5jLCBhc19pbnN0YW5jZSwgZWF0X3NlbGYpOgorICAgICIiIgorICAgIEdpdmVuIGFuIGFyYml0cmFyeSwgcG9zc2libHkgY2FsbGFibGUgb2JqZWN0LCB0cnkgdG8gY3JlYXRlIGEgc3VpdGFibGUKKyAgICBzaWduYXR1cmUgb2JqZWN0LgorICAgIFJldHVybiBhIChyZWR1Y2VkIGZ1bmMsIHNpZ25hdHVyZSkgdHVwbGUsIG9yIE5vbmUuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmdW5jLCB0eXBlKSBhbmQgbm90IGFzX2luc3RhbmNlOgorICAgICAgICAjIElmIGl0J3MgYSB0eXBlIGFuZCBzaG91bGQgYmUgbW9kZWxsZWQgYXMgYSB0eXBlLCB1c2UgX19pbml0X18uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMgPSBmdW5jLl9faW5pdF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBza2lwZmlyc3QgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIFNraXAgdGhlIGBzZWxmYCBhcmd1bWVudCBpbiBfX2luaXRfXworICAgICAgICBlYXRfc2VsZiA9IFRydWUKICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGZ1bmMsIEZ1bmN0aW9uVHlwZXMpOgotICAgICAgICAjIGZvciBjbGFzc2VzIHdoZXJlIGluc3RhbmNlIGlzIFRydWUgd2UgZW5kIHVwIGhlcmUgdG9vCisgICAgICAgICMgSWYgd2UgcmVhbGx5IHdhbnQgdG8gbW9kZWwgYW4gaW5zdGFuY2Ugb2YgdGhlIHBhc3NlZCB0eXBlLAorICAgICAgICAjIF9fY2FsbF9fIHNob3VsZCBiZSBsb29rZWQgdXAsIG5vdCBfX2luaXRfXy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYyA9IGZ1bmMuX19jYWxsX18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgaWYgZWF0X3NlbGY6CisgICAgICAgIHNpZ19mdW5jID0gcGFydGlhbChmdW5jLCBOb25lKQorICAgIGVsc2U6CisgICAgICAgIHNpZ19mdW5jID0gZnVuYwogICAgIHRyeToKLSAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMoZnVuYykKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAjIEMgZnVuY3Rpb24gLyBtZXRob2QsIHBvc3NpYmx5IGluaGVyaXRlZCBvYmplY3QoKS5fX2luaXRfXwotICAgICAgICByZXR1cm4KLQotICAgIHJlZ2FyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5LCBrd29ubHlkZWYsIGFubiA9IGFyZ3NwZWMKLQotCi0gICAgIyBpbnN0YW5jZSBtZXRob2RzIGFuZCBjbGFzc21ldGhvZHMgbmVlZCB0byBsb3NlIHRoZSBzZWxmIGFyZ3VtZW50Ci0gICAgaWYgZ2V0YXR0cihmdW5jLCAnX19zZWxmX18nLCBOb25lKSBpcyBub3QgTm9uZToKLSAgICAgICAgcmVnYXJncyA9IHJlZ2FyZ3NbMTpdCi0gICAgaWYgc2tpcGZpcnN0OgotICAgICAgICAjIHRoaXMgY29uZGl0aW9uIGFuZCB0aGUgYWJvdmUgb25lIGFyZSBuZXZlciBib3RoIFRydWUgLSB3aHk/Ci0gICAgICAgIHJlZ2FyZ3MgPSByZWdhcmdzWzE6XQotCi0gICAgc2lnbmF0dXJlID0gaW5zcGVjdC5mb3JtYXRhcmdzcGVjKAotICAgICAgICByZWdhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsCi0gICAgICAgIGt3b25seSwga3dvbmx5ZGVmLCBhbm4sIGZvcm1hdHZhbHVlPWxhbWJkYSB2YWx1ZTogIiIpCi0gICAgcmV0dXJuIHNpZ25hdHVyZVsxOi0xXSwgZnVuYworICAgICAgICByZXR1cm4gZnVuYywgaW5zcGVjdC5zaWduYXR1cmUoc2lnX2Z1bmMpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICMgQ2VydGFpbiBjYWxsYWJsZSB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBpbnNwZWN0LnNpZ25hdHVyZSgpCisgICAgICAgIHJldHVybiBOb25lCiAKIAogZGVmIF9jaGVja19zaWduYXR1cmUoZnVuYywgbW9jaywgc2tpcGZpcnN0LCBpbnN0YW5jZT1GYWxzZSk6Ci0gICAgaWYgbm90IF9jYWxsYWJsZShmdW5jKToKKyAgICBzaWcgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3QoZnVuYywgaW5zdGFuY2UsIHNraXBmaXJzdCkKKyAgICBpZiBzaWcgaXMgTm9uZToKICAgICAgICAgcmV0dXJuCi0KLSAgICByZXN1bHQgPSBfZ2V0c2lnbmF0dXJlKGZ1bmMsIHNraXBmaXJzdCwgaW5zdGFuY2UpCi0gICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgIHJldHVybgotICAgIHNpZ25hdHVyZSwgZnVuYyA9IHJlc3VsdAotCi0gICAgIyBjYW4ndCB1c2Ugc2VsZiBiZWNhdXNlICJzZWxmIiBpcyBjb21tb24gYXMgYW4gYXJndW1lbnQgbmFtZQotICAgICMgdW5mb3J0dW5hdGVseSBldmVuIG5vdCBpbiB0aGUgZmlyc3QgcGxhY2UKLSAgICBzcmMgPSAibGFtYmRhIF9tb2NrX3NlbGYsICVzOiBOb25lIiAlIHNpZ25hdHVyZQotICAgIGNoZWNrc2lnID0gZXZhbChzcmMsIHt9KQorICAgIGZ1bmMsIHNpZyA9IHNpZworICAgIGRlZiBjaGVja3NpZyhfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCiAgICAgX2NvcHlfZnVuY19kZXRhaWxzKGZ1bmMsIGNoZWNrc2lnKQogICAgIHR5cGUobW9jaykuX21vY2tfY2hlY2tfc2lnID0gY2hlY2tzaWcKIApAQCAtMTY2LDE1ICsxNTYsMTIgQEAKICAgICAgICAgcmV0dXJuCiAKICAgICBza2lwZmlyc3QgPSBpc2luc3RhbmNlKG9yaWdpbmFsLCB0eXBlKQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUob3JpZ2luYWwsIHNraXBmaXJzdCwgaW5zdGFuY2UpCisgICAgcmVzdWx0ID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KG9yaWdpbmFsLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQogICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAjIHdhcyBhIEMgZnVuY3Rpb24gKGUuZy4gb2JqZWN0KCkuX19pbml0X18gKSB0aGF0IGNhbid0IGJlIG1vY2tlZAogICAgICAgICByZXR1cm4KLQotICAgIHNpZ25hdHVyZSwgZnVuYyA9IHJlc3VsdAotCi0gICAgc3JjID0gImxhbWJkYSAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSByZXN1bHQKKyAgICBkZWYgY2hlY2tzaWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKIAogICAgIG5hbWUgPSBvcmlnaW5hbC5fX25hbWVfXwpAQCAtMzY4LDcgKzM1NSw3IEBACiAgICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICAgc2VsZiwgc3BlYz1Ob25lLCB3cmFwcz1Ob25lLCBuYW1lPU5vbmUsIHNwZWNfc2V0PU5vbmUsCiAgICAgICAgICAgICBwYXJlbnQ9Tm9uZSwgX3NwZWNfc3RhdGU9Tm9uZSwgX25ld19uYW1lPScnLCBfbmV3X3BhcmVudD1Ob25lLAotICAgICAgICAgICAgKiprd2FyZ3MKKyAgICAgICAgICAgIF9zcGVjX2FzX2luc3RhbmNlPUZhbHNlLCBfZWF0X3NlbGY9Tm9uZSwgKiprd2FyZ3MKICAgICAgICAgKToKICAgICAgICAgaWYgX25ld19wYXJlbnQgaXMgTm9uZToKICAgICAgICAgICAgIF9uZXdfcGFyZW50ID0gcGFyZW50CkBAIC0zODIsOCArMzY5LDEwIEBACiAgICAgICAgIGlmIHNwZWNfc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3BlYyA9IHNwZWNfc2V0CiAgICAgICAgICAgICBzcGVjX3NldCA9IFRydWUKKyAgICAgICAgaWYgX2VhdF9zZWxmIGlzIE5vbmU6CisgICAgICAgICAgICBfZWF0X3NlbGYgPSBwYXJlbnQgaXMgbm90IE5vbmUKIAotICAgICAgICBzZWxmLl9tb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0KQorICAgICAgICBzZWxmLl9tb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0LCBfc3BlY19hc19pbnN0YW5jZSwgX2VhdF9zZWxmKQogCiAgICAgICAgIF9fZGljdF9fWydfbW9ja19jaGlsZHJlbiddID0ge30KICAgICAgICAgX19kaWN0X19bJ19tb2NrX3dyYXBzJ10gPSB3cmFwcwpAQCAtNDI4LDIwICs0MTcsMjYgQEAKICAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCkKIAogCi0gICAgZGVmIF9tb2NrX2FkZF9zcGVjKHNlbGYsIHNwZWMsIHNwZWNfc2V0KToKKyAgICBkZWYgX21vY2tfYWRkX3NwZWMoc2VsZiwgc3BlYywgc3BlY19zZXQsIF9zcGVjX2FzX2luc3RhbmNlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICBfZWF0X3NlbGY9RmFsc2UpOgogICAgICAgICBfc3BlY19jbGFzcyA9IE5vbmUKKyAgICAgICAgX3NwZWNfc2lnbmF0dXJlID0gTm9uZQogCiAgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmUgYW5kIG5vdCBfaXNfbGlzdChzcGVjKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgdHlwZSk6CiAgICAgICAgICAgICAgICAgX3NwZWNfY2xhc3MgPSBzcGVjCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIF9zcGVjX2NsYXNzID0gX2dldF9jbGFzcyhzcGVjKQorICAgICAgICAgICAgcmVzID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2UsIF9lYXRfc2VsZikKKyAgICAgICAgICAgIF9zcGVjX3NpZ25hdHVyZSA9IHJlcyBhbmQgcmVzWzFdCiAKICAgICAgICAgICAgIHNwZWMgPSBkaXIoc3BlYykKIAogICAgICAgICBfX2RpY3RfXyA9IHNlbGYuX19kaWN0X18KICAgICAgICAgX19kaWN0X19bJ19zcGVjX2NsYXNzJ10gPSBfc3BlY19jbGFzcwogICAgICAgICBfX2RpY3RfX1snX3NwZWNfc2V0J10gPSBzcGVjX3NldAorICAgICAgICBfX2RpY3RfX1snX3NwZWNfc2lnbmF0dXJlJ10gPSBfc3BlY19zaWduYXR1cmUKICAgICAgICAgX19kaWN0X19bJ19tb2NrX21ldGhvZHMnXSA9IHNwZWMKIAogCkBAIC02OTUsNyArNjkwLDYgQEAKICAgICAgICAgc2VsZi5fbW9ja19jaGlsZHJlbltuYW1lXSA9IF9kZWxldGVkCiAKIAotCiAgICAgZGVmIF9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShzZWxmLCBhcmdzLCBrd2FyZ3MpOgogICAgICAgICBuYW1lID0gc2VsZi5fbW9ja19uYW1lIG9yICdtb2NrJwogICAgICAgICByZXR1cm4gX2Zvcm1hdF9jYWxsX3NpZ25hdHVyZShuYW1lLCBhcmdzLCBrd2FyZ3MpCkBAIC03MTEsNiArNzA1LDI4IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlICUgKGV4cGVjdGVkX3N0cmluZywgYWN0dWFsX3N0cmluZykKIAogCisgICAgZGVmIF9jYWxsX21hdGNoZXIoc2VsZiwgX2NhbGwpOgorICAgICAgICAiIiIKKyAgICAgICAgR2l2ZW4gYSBjYWxsIChvciBzaW1wbHkgYSAoYXJncywga3dhcmdzKSB0dXBsZSksIHJldHVybiBhCisgICAgICAgIGNvbXBhcmlzb24ga2V5IHN1aXRhYmxlIGZvciBtYXRjaGluZyB3aXRoIG90aGVyIGNhbGxzLgorICAgICAgICBUaGlzIGlzIGEgYmVzdCBlZmZvcnQgbWV0aG9kIHdoaWNoIHJlbGllcyBvbiB0aGUgc3BlYydzIHNpZ25hdHVyZSwKKyAgICAgICAgaWYgYXZhaWxhYmxlLCBvciBmYWxscyBiYWNrIG9uIHRoZSBhcmd1bWVudHMgdGhlbXNlbHZlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNpZyA9IHNlbGYuX3NwZWNfc2lnbmF0dXJlCisgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGxlbihfY2FsbCkgPT0gMjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycKKyAgICAgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lLCBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLCBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUud2l0aF90cmFjZWJhY2soTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfY2FsbAorCisKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiImFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy4KIApAQCAtNzIxLDkgKzczNywxNCBAQAogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRXhwZWN0ZWQgY2FsbDogJXNcbk5vdCBjYWxsZWQnICUgKGV4cGVjdGVkLCkpCiAKLSAgICAgICAgaWYgc2VsZi5jYWxsX2FyZ3MgIT0gKGFyZ3MsIGt3YXJncyk6CisgICAgICAgIGRlZiBfZXJyb3JfbWVzc2FnZSgpOgogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0X21vY2tfZmFpbHVyZV9tZXNzYWdlKGFyZ3MsIGt3YXJncykKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKG1zZykKKyAgICAgICAgICAgIHJldHVybiBtc2cKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuX2NhbGxfbWF0Y2hlcihzZWxmLmNhbGxfYXJncykKKyAgICAgICAgaWYgZXhwZWN0ZWQgIT0gYWN0dWFsOgorICAgICAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoX2Vycm9yX21lc3NhZ2UoKSkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc0NywxOCArNzY4LDIxIEBACiAKICAgICAgICAgSWYgYGFueV9vcmRlcmAgaXMgVHJ1ZSB0aGVuIHRoZSBjYWxscyBjYW4gYmUgaW4gYW55IG9yZGVyLCBidXQKICAgICAgICAgdGhleSBtdXN0IGFsbCBhcHBlYXIgaW4gYG1vY2tfY2FsbHNgLiIiIgorICAgICAgICBleHBlY3RlZCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gY2FsbHNdCisgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgYWxsX2NhbGxzID0gX0NhbGxMaXN0KHNlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBzZWxmLm1vY2tfY2FsbHMpCiAgICAgICAgIGlmIG5vdCBhbnlfb3JkZXI6Ci0gICAgICAgICAgICBpZiBjYWxscyBub3QgaW4gc2VsZi5tb2NrX2NhbGxzOgorICAgICAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFsbF9jYWxsczoKICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgJ0NhbGxzIG5vdCBmb3VuZC5cbkV4cGVjdGVkOiAlclxuJwogICAgICAgICAgICAgICAgICAgICAnQWN0dWFsOiAlcicgJSAoY2FsbHMsIHNlbGYubW9ja19jYWxscykKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBhbGxfY2FsbHMgPSBsaXN0KHNlbGYubW9ja19jYWxscykKKyAgICAgICAgYWxsX2NhbGxzID0gbGlzdChhbGxfY2FsbHMpCiAKICAgICAgICAgbm90X2ZvdW5kID0gW10KLSAgICAgICAgZm9yIGthbGwgaW4gY2FsbHM6CisgICAgICAgIGZvciBrYWxsIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFsbF9jYWxscy5yZW1vdmUoa2FsbCkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgpAQCAtNzY2LDcgKzc5MCw3IEBACiAgICAgICAgIGlmIG5vdF9mb3VuZDoKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclciBub3QgYWxsIGZvdW5kIGluIGNhbGwgbGlzdCcgJSAodHVwbGUobm90X2ZvdW5kKSwpCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9hbnlfY2FsbChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzc1LDEyICs3OTksMTQgQEAKICAgICAgICAgVGhlIGFzc2VydCBwYXNzZXMgaWYgdGhlIG1vY2sgaGFzICpldmVyKiBiZWVuIGNhbGxlZCwgdW5saWtlCiAgICAgICAgIGBhc3NlcnRfY2FsbGVkX3dpdGhgIGFuZCBgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgIHRoYXQgb25seSBwYXNzIGlmCiAgICAgICAgIHRoZSBjYWxsIGlzIHRoZSBtb3N0IHJlY2VudCBvbmUuIiIiCi0gICAgICAgIGthbGwgPSBjYWxsKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYga2FsbCBub3QgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdDoKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdF0KKyAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKICAgICAgICAgICAgIGV4cGVjdGVkX3N0cmluZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclcyBjYWxsIG5vdCBmb3VuZCcgJSBleHBlY3RlZF9zdHJpbmcKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgX2dldF9jaGlsZF9tb2NrKHNlbGYsICoqa3cpOgpAQCAtODUwLDExICs4NzYsMTIgQEAKICAgICAgICAgc2VsZiA9IF9tb2NrX3NlbGYKICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuY2FsbF9jb3VudCArPSAxCi0gICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKQotICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpKQotCiAgICAgICAgIF9uZXdfbmFtZSA9IHNlbGYuX21vY2tfbmV3X25hbWUKICAgICAgICAgX25ld19wYXJlbnQgPSBzZWxmLl9tb2NrX25ld19wYXJlbnQKKworICAgICAgICBfY2FsbCA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBfY2FsbAorICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfY2FsbCkKICAgICAgICAgc2VsZi5tb2NrX2NhbGxzLmFwcGVuZChfQ2FsbCgoJycsIGFyZ3MsIGt3YXJncykpKQogCiAgICAgICAgIHNlZW4gPSBzZXQoKQpAQCAtOTA5LDggKzkzNiw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgICAgICAgICByZXRfdmFsID0gZWZmZWN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGlmIHJldF92YWwgaXMgREVGQVVMVDoKLSAgICAgICAgICAgICAgICByZXRfdmFsID0gc2VsZi5yZXR1cm5fdmFsdWUKIAogICAgICAgICBpZiAoc2VsZi5fbW9ja193cmFwcyBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgICBzZWxmLl9tb2NrX3JldHVybl92YWx1ZSBpcyBERUZBVUxUKToKQEAgLTIwMzAsNiArMjA1NSw4IEBACiAgICAgZWxpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgICMgTm9uZSB3ZSBtb2NrIHdpdGggYSBub3JtYWwgbW9jayB3aXRob3V0IGEgc3BlYwogICAgICAgICBfa3dhcmdzID0ge30KKyAgICBpZiBfa3dhcmdzIGFuZCBpbnN0YW5jZToKKyAgICAgICAgX2t3YXJnc1snX3NwZWNfYXNfaW5zdGFuY2UnXSA9IFRydWUKIAogICAgIF9rd2FyZ3MudXBkYXRlKGt3YXJncykKIApAQCAtMjA5NiwxMCArMjEyMywxMiBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCBGdW5jdGlvblR5cGVzKToKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBtb2NrLm1vY2sKIAotICAgICAgICAgICAgbmV3ID0gTWFnaWNNb2NrKHBhcmVudD1wYXJlbnQsIG5hbWU9ZW50cnksIF9uZXdfbmFtZT1lbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X3BhcmVudD1wYXJlbnQsICoqa3dhcmdzKQotICAgICAgICAgICAgbW9jay5fbW9ja19jaGlsZHJlbltlbnRyeV0gPSBuZXcKICAgICAgICAgICAgIHNraXBmaXJzdCA9IF9tdXN0X3NraXAoc3BlYywgZW50cnksIGlzX3R5cGUpCisgICAgICAgICAgICBrd2FyZ3NbJ19lYXRfc2VsZiddID0gc2tpcGZpcnN0CisgICAgICAgICAgICBuZXcgPSBNYWdpY01vY2socGFyZW50PXBhcmVudCwgbmFtZT1lbnRyeSwgX25ld19uYW1lPWVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdfcGFyZW50PXBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICAgICAgICAgIG1vY2suX21vY2tfY2hpbGRyZW5bZW50cnldID0gbmV3CiAgICAgICAgICAgICBfY2hlY2tfc2lnbmF0dXJlKG9yaWdpbmFsLCBuZXcsIHNraXBmaXJzdD1za2lwZmlyc3QpCiAKICAgICAgICAgIyBzbyBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIF9zZXRfc2lnbmF0dXJlIGJlY29tZSBpbnN0YW5jZSBhdHRyaWJ1dGVzLApAQCAtMjExMyw2ICsyMTQyLDEwIEBACiAKIAogZGVmIF9tdXN0X3NraXAoc3BlYywgZW50cnksIGlzX3R5cGUpOgorICAgICIiIgorICAgIFJldHVybiB3aGV0aGVyIHdlIHNob3VsZCBza2lwIHRoZSBmaXJzdCBhcmd1bWVudCBvbiBzcGVjJ3MgYGVudHJ5YAorICAgIGF0dHJpYnV0ZS4KKyAgICAiIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShzcGVjLCB0eXBlKToKICAgICAgICAgaWYgZW50cnkgaW4gZ2V0YXR0cihzcGVjLCAnX19kaWN0X18nLCB7fSk6CiAgICAgICAgICAgICAjIGluc3RhbmNlIGF0dHJpYnV0ZSAtIHNob3VsZG4ndCBza2lwCkBAIC0yMTI1LDcgKzIxNTgsMTIgQEAKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCAoc3RhdGljbWV0aG9kLCBjbGFzc21ldGhvZCkpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBpc190eXBlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShnZXRhdHRyKHJlc3VsdCwgJ19fZ2V0X18nLCBOb25lKSwgTWV0aG9kV3JhcHBlclR5cGVzKToKKyAgICAgICAgICAgICMgTm9ybWFsIG1ldGhvZCA9PiBza2lwIGlmIGxvb2tlZCB1cCBvbiB0eXBlCisgICAgICAgICAgICAjIChpZiBsb29rZWQgdXAgb24gaW5zdGFuY2UsIHNlbGYgaXMgYWxyZWFkeSBza2lwcGVkKQorICAgICAgICAgICAgcmV0dXJuIGlzX3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgIyBzaG91bGRuJ3QgZ2V0IGhlcmUgdW5sZXNzIGZ1bmN0aW9uIGlzIGEgZHluYW1pY2FsbHkgcHJvdmlkZWQgYXR0cmlidXRlCiAgICAgIyBYWFhYIHVudGVzdGVkIGJlaGF2aW91cgpAQCAtMjE1OSw5ICsyMTk3LDMxIEBACiAgICAgdHlwZShBTlkuX19lcV9fKSwKICkKIAorTWV0aG9kV3JhcHBlclR5cGVzID0gKAorICAgIHR5cGUoQU5ZLl9fZXFfXy5fX2dldF9fKSwKKykKKwogCiBmaWxlX3NwZWMgPSBOb25lCiAKK2RlZiBfaXRlcmF0ZV9yZWFkX2RhdGEocmVhZF9kYXRhKToKKyAgICAjIEhlbHBlciBmb3IgbW9ja19vcGVuOgorICAgICMgUmV0cmlldmUgbGluZXMgZnJvbSByZWFkX2RhdGEgdmlhIGEgZ2VuZXJhdG9yIHNvIHRoYXQgc2VwYXJhdGUgY2FsbHMgdG8KKyAgICAjIHJlYWRsaW5lLCByZWFkLCBhbmQgcmVhZGxpbmVzIGFyZSBwcm9wZXJseSBpbnRlcmxlYXZlZAorICAgIGRhdGFfYXNfbGlzdCA9IFsne31cbicuZm9ybWF0KGwpIGZvciBsIGluIHJlYWRfZGF0YS5zcGxpdCgnXG4nKV0KKworICAgIGlmIGRhdGFfYXNfbGlzdFstMV0gPT0gJ1xuJzoKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBsaW5lIGVuZGVkIGluIGEgbmV3bGluZSwgdGhlIGxpc3QgY29tcHJlaGVuc2lvbiB3aWxsIGhhdmUgYW4KKyAgICAgICAgIyBleHRyYSBlbnRyeSB0aGF0J3MganVzdCBhIG5ld2xpbmUuICBSZW1vdmUgdGhpcy4KKyAgICAgICAgZGF0YV9hc19saXN0ID0gZGF0YV9hc19saXN0WzotMV0KKyAgICBlbHNlOgorICAgICAgICAjIElmIHRoZXJlIHdhc24ndCBhbiBleHRyYSBuZXdsaW5lIGJ5IGl0c2VsZiwgdGhlbiB0aGUgZmlsZSBiZWluZworICAgICAgICAjIGVtdWxhdGVkIGRvZXNuJ3QgaGF2ZSBhIG5ld2xpbmUgdG8gZW5kIHRoZSBsYXN0IGxpbmUgIHJlbW92ZSB0aGUKKyAgICAgICAgIyBuZXdsaW5lIHRoYXQgb3VyIG5haXZlIGZvcm1hdCgpIGFkZGVkCisgICAgICAgIGRhdGFfYXNfbGlzdFstMV0gPSBkYXRhX2FzX2xpc3RbLTFdWzotMV0KKworICAgIGZvciBsaW5lIGluIGRhdGFfYXNfbGlzdDoKKyAgICAgICAgeWllbGQgbGluZQogCiBkZWYgbW9ja19vcGVuKG1vY2s9Tm9uZSwgcmVhZF9kYXRhPScnKToKICAgICAiIiIKQEAgLTIxNzIsOSArMjIzMiwyNyBAQAogICAgIGRlZmF1bHQpIHRoZW4gYSBgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLgotICAgIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgcmVhZGAgbWV0aG9kZGxpbmVgLCBhbmQgYHJlYWRsaW5lc2Agb2YgdGhlCisgICAgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KICAgICAiIiIKKyAgICBkZWYgX3JlYWRsaW5lc19zaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gbGlzdChfZGF0YSkKKworICAgIGRlZiBfcmVhZF9zaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiAnJy5qb2luKF9kYXRhKQorCisgICAgZGVmIF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB5aWVsZCBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlCisgICAgICAgIGZvciBsaW5lIGluIF9kYXRhOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisKICAgICBnbG9iYWwgZmlsZV9zcGVjCiAgICAgaWYgZmlsZV9zcGVjIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCBfaW8KQEAgLTIxODQsOSArMjI2MiwxOCBAQAogICAgICAgICBtb2NrID0gTWFnaWNNb2NrKG5hbWU9J29wZW4nLCBzcGVjPW9wZW4pCiAKICAgICBoYW5kbGUgPSBNYWdpY01vY2soc3BlYz1maWxlX3NwZWMpCi0gICAgaGFuZGxlLndyaXRlLnJldHVybl92YWx1ZSA9IE5vbmUKICAgICBoYW5kbGUuX19lbnRlcl9fLnJldHVybl92YWx1ZSA9IGhhbmRsZQotICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9IHJlYWRfZGF0YQorCisgICAgX2RhdGEgPSBfaXRlcmF0ZV9yZWFkX2RhdGEocmVhZF9kYXRhKQorCisgICAgaGFuZGxlLndyaXRlLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSA9IE5vbmUKKworICAgIGhhbmRsZS5yZWFkLnNpZGVfZWZmZWN0ID0gX3JlYWRfc2lkZV9lZmZlY3QKKyAgICBoYW5kbGUucmVhZGxpbmUuc2lkZV9lZmZlY3QgPSBfcmVhZGxpbmVfc2lkZV9lZmZlY3QoKQorICAgIGhhbmRsZS5yZWFkbGluZXMuc2lkZV9lZmZlY3QgPSBfcmVhZGxpbmVzX3NpZGVfZWZmZWN0CiAKICAgICBtb2NrLnJldHVybl92YWx1ZSA9IGhhbmRsZQogICAgIHJldHVybiBtb2NrCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQppbmRleCA5N2U1NDI2Li5mM2Y0YjY3IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKQEAgLTEyMSw2ICsxMjEsMjIgQEAKICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKICAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gVHJ1ZQogCisgICAgQGZhaWxmYXN0CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZiwgdGVzdCwgc3VidGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIGF0IHRoZSBlbmQgb2YgYSBzdWJ0ZXN0LgorICAgICAgICAnZXJyJyBpcyBOb25lIGlmIHRoZSBzdWJ0ZXN0IGVuZGVkIHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGl0J3MgYQorICAgICAgICB0dXBsZSBvZiB2YWx1ZXMgYXMgcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCkuCisgICAgICAgICIiIgorICAgICAgICAjIEJ5IGRlZmF1bHQsIHdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggc3VjY2Vzc2Z1bCBzdWJ0ZXN0cywgYnV0CisgICAgICAgICMgbW9yZSBzb3BoaXN0aWNhdGVkIHRlc3QgcmVzdWx0cyBtaWdodCB3YW50IHRvIHJlY29yZCB0aGVtLgorICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGVyclswXSwgdGVzdC5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBzZWxmLmZhaWx1cmVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZXJyb3JzCisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzdWJ0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAgICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKICAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKICAgICAgICAgIkNhbGxlZCB3aGVuIGEgdGVzdCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CmluZGV4IGNkZTVkMzguLmNhODI3NjUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9zdWl0ZS5weQorKysgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKQEAgLTE2LDYgKzE2LDggQEAKIGNsYXNzIEJhc2VUZXN0U3VpdGUob2JqZWN0KToKICAgICAiIiJBIHNpbXBsZSB0ZXN0IHN1aXRlIHRoYXQgZG9lc24ndCBwcm92aWRlIGNsYXNzIG9yIG1vZHVsZSBzaGFyZWQgZml4dHVyZXMuCiAgICAgIiIiCisgICAgX2NsZWFudXAgPSBUcnVlCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHM9KCkpOgogICAgICAgICBzZWxmLl90ZXN0cyA9IFtdCiAgICAgICAgIHNlbGYuYWRkVGVzdHModGVzdHMpCkBAIC01NywxMiArNTksMjIgQEAKICAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQogCiAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICBmb3IgaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHNlbGYpOgogICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICAgICAgaWYgc2VsZi5fY2xlYW51cDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVUZXN0QXRJbmRleChpbmRleCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgICIiIlN0b3AgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgVGVzdENhc2UgYXQgaW5kZXguIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzW2luZGV4XSA9IE5vbmUKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgc3VwcG9ydCBmb3Igc3VpdGUgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBvdmVycmlkZW4gc2VsZi5fdGVzdAorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKIApAQCAtODcsNyArOTksNyBAQAogICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwgJ190ZXN0UnVuRW50ZXJlZCcsIEZhbHNlKSBpcyBGYWxzZToKICAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSB0b3BMZXZlbCA9IFRydWUKIAotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICBmb3IgaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHNlbGYpOgogICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CiAgICAgICAgICAgICAgICAgYnJlYWsKIApAQCAtMTA2LDYgKzExOCw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRlc3QuZGVidWcoKQogCisgICAgICAgICAgICBpZiBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZVRlc3RBdEluZGV4KGluZGV4KQorCiAgICAgICAgIGlmIHRvcExldmVsOgogICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIHJlc3VsdCkKICAgICAgICAgICAgIHNlbGYuX2hhbmRsZU1vZHVsZVRlYXJEb3duKHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkMDU5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybik6CisgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBwYXR0ZXJuID0gcGF0dGVybiBvciAidGVzdF8qLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LCBzbyB0aGUgdG9wLWxldmVsIGlzIHR3byBub3RjaGVzIHVwCisgICAgdG9wX2xldmVsX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKQorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXRoaXNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9sZXZlbF9kaXIpCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKaW5kZXggZGJlNGRkYy4uMDJlOGYzYSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKIAogCi1jbGFzcyBMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgorY2xhc3MgX0Jhc2VMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2cpOgogICAgICAgICBzZWxmLl9ldmVudHMgPSBsb2cKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdGFydFRlc3RSdW4nKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdGFydFRlc3RSdW4oKQorICAgICAgICBzdXBlcigpLnN0YXJ0VGVzdFJ1bigpCiAKICAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIGRlZiBzdG9wVGVzdFJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3RSdW4nKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdG9wVGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RvcFRlc3RSdW4oKQogCiAgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRGYWlsdXJlJykKQEAgLTY4LDcgKzY4LDcgQEAKIAogICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkU3VjY2VzcygqYXJncykKIAogICAgIGRlZiBhZGRFcnJvcihzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEVycm9yJykKQEAgLTc2LDE1ICs3NiwzOSBAQAogCiAgICAgZGVmIGFkZFNraXAoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTa2lwJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU2tpcCgqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTa2lwKCphcmdzKQogCiAgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEV4cGVjdGVkRmFpbHVyZScpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCiAKICAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRVbmV4cGVjdGVkU3VjY2VzcycpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorCisKK2NsYXNzIExlZ2FjeUxvZ2dpbmdSZXN1bHQoX0Jhc2VMb2dnaW5nUmVzdWx0KToKKyAgICAiIiIKKyAgICBBIGxlZ2FjeSBUZXN0UmVzdWx0IGltcGxlbWVudGF0aW9uLCB3aXRob3V0IGFuIGFkZFN1YlRlc3QgbWV0aG9kLAorICAgIHdoaWNoIHJlY29yZHMgaXRzIG1ldGhvZCBjYWxscy4KKyAgICAiIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYpOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisKK2NsYXNzIExvZ2dpbmdSZXN1bHQoX0Jhc2VMb2dnaW5nUmVzdWx0KToKKyAgICAiIiIKKyAgICBBIFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZiwgdGVzdCwgc3VidGVzdCwgZXJyKToKKyAgICAgICAgaWYgZXJyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWJUZXN0U3VjY2VzcycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWJUZXN0RmFpbHVyZScpCisgICAgICAgIHN1cGVyKCkuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBlcnIpCiAKIAogY2xhc3MgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4ob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQppbmRleCA3OTMxY2FkLi5hZjA4ZDVhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CkBAIC0zNjEsMyArMzYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywgJ15vb3BzJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iIDogb29wcyQnXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKaW5kZXggNzU1MzJmNC4uMGJmMWEyMiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0yODIsMyArMjgyLDcgQEAKICAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCiBjbGFzcyBUZXN0QnJlYWtTaWduYWxEZWZhdWx0KFRlc3RCcmVhayk6CiAgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0RGTAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKaW5kZXggYjhjYjBjNy4uNGI5MzE3OSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpAQCAtMSw4ICsxLDEwIEBACitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBwaWNrbGUKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBpbnNwZWN0CkBAIC0xMyw5ICsxNSwxNSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gLnN1cHBvcnQgaW1wb3J0ICgKLSAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LAorICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsIExlZ2FjeUxvZ2dpbmdSZXN1bHQsCiAgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KICkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworCitsb2dfZm9vID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCitsb2dfZm9vYmFyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKQorbG9nX3F1dXggPSBsb2dnaW5nLmdldExvZ2dlcigncXV1eCcpCiAKIAogY2xhc3MgVGVzdChvYmplY3QpOgpAQCAtMjk3LDYgKzMwNSw5OCBAQAogCiAgICAgICAgIEZvbygndGVzdCcpLnJ1bigpCiAKKyAgICBkZWYgX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHNlbGYsIHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMiwgM106CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIFsyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChqPWopOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpICogaiA9PSA2OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorICAgICAgICAgICAgICAgIDEgLyAwCisKKyAgICAgICAgIyBPcmRlciBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAjIGk9MSA9PiBzdWJ0ZXN0IGZhaWx1cmUKKyAgICAgICAgIyBpPTIsIGo9MiA9PiBzdWJ0ZXN0IHN1Y2Nlc3MKKyAgICAgICAgIyBpPTIsIGo9MyA9PiBzdWJ0ZXN0IGVycm9yCisgICAgICAgICMgaT0zLCBqPTIgPT4gc3VidGVzdCBlcnJvcgorICAgICAgICAjIGk9Mywgaj0zID0+IHN1YnRlc3Qgc3VjY2VzcworICAgICAgICAjIHRvcGxldmVsID0+IGVycm9yCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHMoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnYWRkU3ViVGVzdEZhaWx1cmUnLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFdpdGggYSBsZWdhY3kgcmVzdWx0IG9iamVjdCAod2l0aG91dCBhIGFkZFN1YlRlc3QgbWV0aG9kKSwKKyAgICAgICAgIyB0ZXh0IGV4ZWN1dGlvbiBzdG9wcyBhZnRlciB0aGUgZmlyc3Qgc3VidGVzdCBmYWlsdXJlLgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3Moc2VsZiwgcmVzdWx0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIFsxLCAyXToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIFsyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChqPWopOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgIyBUaGUgNiBzdWJ0ZXN0IHN1Y2Nlc3NlcyBhcmUgaW5kaXZpZHVhbGx5IHJlY29yZGVkLCBpbiBhZGRpdGlvbgorICAgICAgICAjIHRvIHRoZSB3aG9sZSB0ZXN0IHN1Y2Nlc3MuCisgICAgICAgIGV4cGVjdGVkID0gKFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nXQorICAgICAgICAgICAgICAgICAgICArIDYgKiBbJ2FkZFN1YlRlc3RTdWNjZXNzJ10KKyAgICAgICAgICAgICAgICAgICAgKyBbJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2Vzc19sZWdhY3koc2VsZik6CisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQsIG9ubHkgdGhlIHdob2xlIHRlc3Qgc3VjY2VzcyBpcyByZWNvcmRlZC4KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTGVnYWN5TG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT0xKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCiAgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCiAgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KICAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KQEAgLTcyOSwxOCArODI5LDE4IEBACiAKICAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAogICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAotICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqOAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqNQogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQogCiAgICAgICAgICMgdW5kZXIgdGhlIHRocmVzaG9sZDogZGlmZiBtYXJrZXIgKF4pIGluIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgcyA9ICd4JyAqICgyKio3KQorICAgICAgICBzID0gJ3gnICogKDIqKjQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdiJykKICAgICAgICAgc2VsZi5hc3NlcnRJbignXicsIHN0cihjbS5leGNlcHRpb24pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCiAKICAgICAgICAgIyBvdmVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbm90IHVzZWQgYW5kIG1hcmtlciAoXikgbm90IGluIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgcyA9ICd4JyAqICgyKio5KQorICAgICAgICBzID0gJ3gnICogKDIqKjYpCiAgICAgICAgICMgaWYgdGhlIHBhdGggdGhhdCB1c2VzIGRpZmZsaWIgaXMgdGFrZW4sIF90cnVuY2F0ZU1lc3NhZ2Ugd2lsbCBiZQogICAgICAgICAjIGNhbGxlZCAtLSByZXBsYWNlIGl0IHdpdGggZXhwbG9kaW5nVHJ1bmNhdGlvbiB0byB2ZXJpZnkgdGhhdCB0aGlzCiAgICAgICAgICMgZG9lc24ndCBoYXBwZW4KQEAgLTc1Nyw2ICs4NTcsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJyVyICE9ICVyJyAlIChzMSwgczIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCiAKKyAgICBkZWYgdGVzdEFzc2VydEVxdWFsX3Nob3J0ZW4oc2VsZik6CisgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKKyAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDAKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKKworICAgICAgICBzID0gJ3gnICogMTAwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScsIHMgKyAnYicKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFszNSBjaGFyc10nICsgJ3gnICogNjEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2EnICE9ICclc2InIiAlIChjLCBjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQorCisgICAgICAgIHAgPSAneScgKiA1MAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnICsgcCwgcyArICdiJyArIHAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFs4NSBjaGFyc114eHh4eHh4eHh4eCcKKyAgICAgICAgI3ByaW50KCkKKyAgICAgICAgI3ByaW50KHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYSVzJyAhPSAnJXNiJXMnIiAlIChjLCBwLCBjLCBwKSkKKworICAgICAgICBwID0gJ3knICogMTAwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScgKyBwLCBzICsgJ2InICsgcAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4WzkxIGNoYXJzXXh4eHh4JworICAgICAgICBkID0gJ3knICogNDAgKyAnWzU2IGNoYXJzXXl5eXknCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIGQsIGMsIGQpKQorCiAgICAgZGVmIHRlc3RBc3NlcnRDb3VudEVxdWFsKHNlbGYpOgogICAgICAgICBhID0gb2JqZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFsxLCAyLCAzXSwgWzMsIDIsIDFdKQpAQCAtMTE1OSw2ICsxMjkwLDk0IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIpOgogICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuKCJiYXJ6IikKIAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydE5vU3RkZXJyKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGJ1ZjoKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksICIiKQorCisgICAgZGVmIGFzc2VydExvZ1JlY29yZHMoc2VsZiwgcmVjb3JkcywgbWF0Y2hlcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY29yZHMpLCBsZW4obWF0Y2hlcykpCisgICAgICAgIGZvciByZWMsIG1hdGNoIGluIHppcChyZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZWMsIGxvZ2dpbmcuTG9nUmVjb3JkKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gbWF0Y2guaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocmVjLCBrKSwgdikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0RlZmF1bHRzKHNlbGYpOgorICAgICAgICAjIGRlZmF1bHRzOiByb290IGxvZ2dlciwgbGV2ZWwgSU5GTworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLCBbeyduYW1lJzogJ2Zvbyd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1R3b01hdGNoaW5nTWVzc2FnZXMoc2VsZik6CisgICAgICAgICMgU2FtZSwgYnV0IHdpdGggdHdvIG1hdGNoaW5nIGxvZyBtZXNzYWdlcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiV0FSTklORzpxdXV4OjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMZXZlbChzZWxmLCBsZXZlbCk6CisgICAgICAgICMgQ2hlY2sgbGV2ZWwgZmlsdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9bGV2ZWwpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28ud2FybmluZygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5lcnJvcigiMiIpCisgICAgICAgICAgICAgICAgbG9nX3F1dXguY3JpdGljYWwoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiRVJST1I6Zm9vLmJhcjoyIiwgIkNSSVRJQ0FMOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vLmJhcid9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1BlckxldmVsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwoJ0VSUk9SJykKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoc2VsZiwgbG9nZ2VyKToKKyAgICAgICAgIyBDaGVjayBwZXItbG9nZ2VyIGZpdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J0RFQlVHJykgYXMgb3V0ZXJfY206CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbD0nREVCVUcnKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiREVCVUc6Zm9vLmJhcjoyIl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAnZm9vLmJhcid9XSkKKyAgICAgICAgICAgICMgVGhlIG91dGVyIGNhdGNoYWxsIGNhdWdodCB0aGUgcXV1eCBsb2cKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXJfY20ub3V0cHV0LCBbIldBUk5JTkc6cXV1eDozIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NQZXJMb2dnZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoJ2ZvbycpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTm9Mb2dzKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG5vIGxvZ3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZUxldmVsVG9vSGlnaChzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBsZXZlbCB0b28gaGlnaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD0nV0FSTklORycpOgorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU1pc21hdGNoaW5nTG9nZ2VyKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG1pc21hdGNoaW5nIGxvZ2dlciAoYW5kIHRoZSBsb2dnZWQgbWVzc2FnZSBpcworICAgICAgICAjIHBhc3NlZCB0aHJvdWdoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygncXV1eCcsIGxldmVsPSdFUlJPUicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX3F1dXguZXJyb3IoIjEiKQorCiAgICAgZGVmIHRlc3REZXByZWNhdGVkTWV0aG9kTmFtZXMoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kcyByYWlzZSBhIERlcHJlY2F0aW9uV2FybmluZy4gU2VlICM5NDI0LgpAQCAtMTMxMywzICsxNTMyLDcgQEAKICAgICAgICAgd2l0aCBzdXBwb3J0LmRpc2FibGVfZ2MoKToKICAgICAgICAgICAgIGRlbCBjYXNlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKaW5kZXggY2NjN2RiMi4uNmI3YjEyOCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKQEAgLTEsMTIgKzEsMTUgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBidWlsdGlucworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGltcG9ydCB1bml0dGVzdAogCiAKIGNsYXNzIFRlc3RhYmxlVGVzdFByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgotICAgIG1vZHVsZSA9ICdfX21haW5fXycKKyAgICBtb2R1bGUgPSBOb25lCiAgICAgZXhpdCA9IFRydWUKICAgICBkZWZhdWx0VGVzdCA9IGZhaWxmYXN0ID0gY2F0Y2hicmVhayA9IGJ1ZmZlciA9IE5vbmUKICAgICB2ZXJib3NpdHkgPSAxCkBAIC00Niw5ICs0OSw5IEBACiAgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CiAgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKIAotICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDEucHknLCAndGVzdDIucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCisgICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0Mi5weScsICd0ZXN0MS5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuZm9vJywgJ3Rlc3Qtbm90LWEtbW9kdWxlLnB5JywgJ2Fub3RoZXJfZGlyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0My5weScsICd0ZXN0NC5weScsIF1dCisgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0NC5weScsICd0ZXN0My5weScsIF1dCiAgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKIApAQCAtNzAsNiArNzMsOCBAQAogICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWwKICAgICAgICAgc3VpdGUgPSBsaXN0KGxvYWRlci5fZmluZF90ZXN0cyh0b3BfbGV2ZWwsICd0ZXN0Ki5weScpKQogCisgICAgICAgICMgVGhlIHRlc3Qgc3VpdGVzIGZvdW5kIHNob3VsZCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgZm9yIHJlbGlhYmxlCisgICAgICAgICMgZXhlY3V0aW9uIG9yZGVyLgogICAgICAgICBleHBlY3RlZCA9IFtuYW1lICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCiAgICAgICAgICAgICAgICAgICAgICgndGVzdDEnLCAndGVzdDInKV0KICAgICAgICAgZXhwZWN0ZWQuZXh0ZW5kKFsoJ3Rlc3RfZGlyLiVzJyAlIG5hbWUpICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCkBAIC0xMzIsNiArMTM3LDcgQEAKICAgICAgICAgIyBhbmQgZGlyZWN0bHkgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkyIHBhY2thZ2UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvYWRfdGVzdHMnLCAndGVzdF9kaXJlY3RvcnkyJyArICcgbW9kdWxlIHRlc3RzJ10pCisgICAgICAgICMgVGhlIHRlc3QgbW9kdWxlIHBhdGhzIHNob3VsZCBiZSBzb3J0ZWQgZm9yIHJlbGlhYmxlIGV4ZWN1dGlvbiBvcmRlcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5wYXRocywgWyd0ZXN0X2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeTInXSkKIAogICAgICAgICAjIGxvYWRfdGVzdHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSB3aXRoIGxvYWRlciwgdGVzdHMgYW5kIHBhdHRlcm4KQEAgLTE2OSw3ICsxNzUsNyBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKIAogICAgICAgICBfZmluZF90ZXN0c19hcmdzID0gW10KLSAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKICAgICAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MuYXBwZW5kKChzdGFydF9kaXIsIHBhdHRlcm4pKQogICAgICAgICAgICAgcmV0dXJuIFsndGVzdHMnXQogICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cwpAQCAtMTg0LDExICsxOTAsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9maW5kX3Rlc3RzX2FyZ3MsIFsoc3RhcnRfZGlyLCAncGF0dGVybicpXSkKICAgICAgICAgc2VsZi5hc3NlcnRJbih0b3BfbGV2ZWxfZGlyLCBzeXMucGF0aCkKIAotICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlc190aGF0X2ZhaWxfdG9faW1wb3J0KHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQorICAgIGRlZiBzZXR1cF9pbXBvcnRfaXNzdWVfdGVzdHMoc2VsZiwgZmFrZWZpbGUpOgogICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgotICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFsndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5J10KKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbZmFrZWZpbGVdCiAgICAgICAgIGlzZmlsZSA9IG9zLnBhdGguaXNmaWxlCiAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIF86IFRydWUKICAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCkBAIC0xOTgsNiArMjAyLDExIEBACiAgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCiAKKyAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc2VsZi5zZXR1cF9pbXBvcnRfaXNzdWVfdGVzdHMoJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weScpCisKICAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy4nKQogICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQpAQCAtMjA2LDYyICsyMTUsNzQgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CiAgICAgICAgICAgICB0ZXN0LnRlc3RfdGhpc19kb2VzX25vdF9leGlzdCgpCiAKKyAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZV90aGF0X3JhaXNlc19Ta2lwVGVzdF9vbl9pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGRlZiBfZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnc2tpcHBlcm9vJykKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IF9nZXRfbW9kdWxlX2Zyb21fbmFtZQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3NraXBfZHVtbXkucHknKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfcGFyc2VBcmdzKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCiAKICAgICAgICAgYXJncyA9IFtdCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBhcmdzLmV4dGVuZChhcmd2KQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQogCisgICAgICAgIGFyZ3NbOl0gPSBbXQogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlcicsICdmb28nLCAnYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydmb28nLCAnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1snZm9vJywgJ2JhciddXSkKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kaXNjb3Zlcl9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0ubW9kdWxlID0gTm9uZQogCi0gICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmd2LCBbXSkKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZyddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmJ1ZmZlciwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5jYXRjaGJyZWFrLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kaXNjb3Zlcl9ieV9kZWZhdWx0X3dpdGhfb3B0aW9ucyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBhcmdzID0gWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXQotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgYXJnc1sxOl0pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQotICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhhcmdzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICctdicsICctYicsICctdicsICctYycsICctZiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5jYXRjaGJyZWFrLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uZmFpbGZhc3QsIFRydWUpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdG9vX21hbnlfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICBjbGFzcyBTdG9wKEV4Y2VwdGlvbik6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGRlZiB1c2FnZUV4aXQoKToKLSAgICAgICAgICAgIHJhaXNlIFN0b3AKLQogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0udXNhZ2VFeGl0ID0gdXNhZ2VFeGl0CiAgICAgICAgIHByb2dyYW0udGVzdExvYWRlciA9IE5vbmUKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3ApOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CiAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKICAgICAgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQorICAgICAgICBzZWxmLmFzc2VydEluKCd1c2FnZTonLCBzdGRlcnIuZ2V0dmFsdWUoKSkKIAogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV91c2VzX2RlZmF1bHRfbG9hZGVyKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2luaXRBcmdQYXJzZXJzKCkKIAogICAgICAgICBjbGFzcyBMb2FkZXIob2JqZWN0KToKICAgICAgICAgICAgIGFyZ3MgPSBbXQpAQCAtNDE3LDcgKzQzOCw3IEBACiAgICAgICAgIGV4cGVjdGVkUGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUodW5pdHRlc3QudGVzdC5fX2ZpbGVfXykpCiAKICAgICAgICAgc2VsZi53YXNSdW4gPSBGYWxzZQotICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgogICAgICAgICAgICAgc2VsZi53YXNSdW4gPSBUcnVlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2RpciwgZXhwZWN0ZWRQYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RzCkBAIC00MjcsNSArNDQ4LDc5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCB0ZXN0cykKIAogCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX3BhdGhfYnVpbHRpbl9tb2R1bGVzKHNlbGYpOgorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBpc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBfOiBGYWxzZQorICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgZGVmIHJlc3RvcmUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gaXNkaXIKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCdzeXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9uYW1lc3BhY2VfcGFja2FnZXMoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG9yaWdfaW1wb3J0ID0gX19pbXBvcnRfXworICAgICAgICBwYWNrYWdlID0gdHlwZXMuTW9kdWxlVHlwZSgncGFja2FnZScpCisgICAgICAgIHBhY2thZ2UuX19wYXRoX18gPSBbJy9hJywgJy9iJ10KKyAgICAgICAgcGFja2FnZS5fX3NwZWNfXyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgKKyAgICAgICAgICAgbG9hZGVyPU5vbmUsCisgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVsnL2EnLCAnL2InXQorICAgICAgICApCisKKyAgICAgICAgZGVmIF9pbXBvcnQocGFja2FnZW5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1twYWNrYWdlbmFtZV0gPSBwYWNrYWdlCisgICAgICAgICAgICByZXR1cm4gcGFja2FnZQorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gb3JpZ19pbXBvcnQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBfaW1wb3J0CisKKyAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MuYXBwZW5kKChzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICAgICAgcmV0dXJuIFsnJXMvdGVzdHMnICUgc3RhcnRfZGlyXQorCisgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcigncGFja2FnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsIFsnL2EvdGVzdHMnLCAnL2IvdGVzdHMnXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mYWlsZWRfZGlzY292ZXJ5KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgcGFja2FnZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BhY2thZ2UnKQorICAgICAgICBvcmlnX2ltcG9ydCA9IF9faW1wb3J0X18KKworICAgICAgICBkZWYgX2ltcG9ydChwYWNrYWdlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3BhY2thZ2VuYW1lXSA9IHBhY2thZ2UKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBvcmlnX2ltcG9ydAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKyAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IF9pbXBvcnQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJ3BhY2thZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb25cJ3Qga25vdyBob3cgdG8gZGlzY292ZXIgZnJvbSB7IXJ9JworICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocGFja2FnZSkpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQppbmRleCA5Y2U1ZWUzLi5kN2ZlMDdhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CkBAIC0xNDIsMyArMTQyLDcgQEAKICAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lLCBkZXNjcmlwdGlvbj1kZXNjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKaW5kZXggZmNkMmUwNy4uYjYyYTFiNSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTEzMDYsMyArMTMwNiw3IEBACiAgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLnN1aXRlQ2xhc3MsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CmluZGV4IDhhNGIzZmEuLjMyOTQyOTggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC02NCw2ICs2NSw0MSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKICAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKIAorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYsIG5hbWVzLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKKyAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfc3RyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSh0ZXN0UnVubmVyPXJ1bm5lciwgZXhpdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUZXN0PSd1bml0dGVzdC50ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndW5pdHRlc3QudGVzdCcsKSwgcHJvZ3JhbS50ZXN0TmFtZXMpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdF93aXRoX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSgKKyAgICAgICAgICAgIHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgZGVmYXVsdFRlc3Q9Wyd1bml0dGVzdC50ZXN0JywgJ3VuaXR0ZXN0LnRlc3QyJ10sCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHN5cy5hcmd2ID0gb2xkX2FyZ3YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50ZXN0TmFtZXMpCiAKICAgICBkZWYgdGVzdF9Ob25FeGl0KHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QubWFpbihleGl0PUZhbHNlLApAQCAtMTUxLDIwICsxODcsMzggQEAKICAgICAgICAgICAgIGlmIGF0dHIgPT0gJ2NhdGNoJyBhbmQgbm90IGhhc0luc3RhbGxIYW5kbGVyOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgRmFsc2UpCisKKyAgICAgICAgICAgIGZhbHNlID0gW10KKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgZmFsc2UpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIGZhbHNlKQorCisgICAgICAgICAgICB0cnVlID0gWzQyXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCB0cnVlKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCB0cnVlKQorCiAgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQogICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKICAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKICAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCi0KICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIFRydWUpCiAKLSAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKLSAgICAgICAgICAgICAgICBub3Rfbm9uZSA9IG9iamVjdCgpCi0gICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBub3Rfbm9uZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIEZhbHNlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKLSAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQogCiAgICAgZGVmIHRlc3RXYXJuaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSB3YXJuaW5ncyBhcmd1bWVudCIiIgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQppbmRleCA3ZDQwNzI1Li40ODlmZTE3IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpAQCAtMjI3LDYgKzIyNyw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKIAorICAgIGRlZiB0ZXN0X2FkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHN1YnRlc3QKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSk6CisgICAgICAgICAgICAgICAgICAgIHN1YnRlc3QgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgICAgICMgUmVnaXN0ZXIgYW4gZXJyb3IgYnkgaGFuZCAodG8gY2hlY2sgdGhlIEFQSSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgZXhjX2luZm9fdHVwbGUpCisgICAgICAgICAgICAgICAgICAgICMgTm93IHRyaWdnZXIgYSBmYWlsdXJlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIpCisKKyAgICAgICAgc3VidGVzdCA9IE5vbmUKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIGZvcm1hdHRlZF9leGMpCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgc3VidGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIsIGZvcm1hdHRlZF9leGMpCisKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTIzNCw2ICsyNjgsMzcgQEAKICAgICAgICAgICAgICAgICAndGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCknKQogCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKworICAgICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnc29tZSBtZXNzYWdlJyk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSBbc29tZSBtZXNzYWdlXScpCisKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMgJworICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoPHN1YnRlc3Q+KScpCisKKyAgICBkZWYgdGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGJhcj0yKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgpAQCAtMjQ3LDYgKzMxMiwxOCBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEsIGJhcj0yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCiAgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgpAQCAtMjU5LDYgKzMzNiwyMSBAQAogICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKICAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KKyAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQorCiAgICAgZGVmIHRlc3RTdGFja0ZyYW1lVHJpbW1pbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIEZyYW1lKG9iamVjdCk6CiAgICAgICAgICAgICBjbGFzcyB0Yl9mcmFtZShvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQppbmRleCBlMjJlNmJjLi5lZjFjMWFmOSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKQEAgLTUsNiArNSw3IEBACiBpbXBvcnQgc3VicHJvY2VzcwogCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgX091dGNvbWUKIAogZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KIApAQCAtNDIsMTIgKzQzLDggQEAKICAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgY2xhc3MgTW9ja091dGNvbWUob2JqZWN0KToKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgICAgICBlcnJvcnMgPSBbXQotCiAgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKLSAgICAgICAgdGVzdC5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBNb2NrT3V0Y29tZQorICAgICAgICBvdXRjb21lID0gdGVzdC5fb3V0Y29tZSA9IF9PdXRjb21lKCkKIAogICAgICAgICBleGMxID0gRXhjZXB0aW9uKCdmb28nKQogICAgICAgICBleGMyID0gRXhjZXB0aW9uKCdiYXInKQpAQCAtNjEsOSArNTgsMTAgQEAKICAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdC5kb0NsZWFudXBzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9ja091dGNvbWUuc3VjY2VzcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXRjb21lLnN1Y2Nlc3MpCiAKLSAgICAgICAgKFR5cGUxLCBpbnN0YW5jZTEsIF8pLCAoVHlwZTIsIGluc3RhbmNlMiwgXykgPSByZXZlcnNlZChNb2NrT3V0Y29tZS5lcnJvcnMpCisgICAgICAgICgoXywgKFR5cGUxLCBpbnN0YW5jZTEsIF8pKSwKKyAgICAgICAgIChfLCAoVHlwZTIsIGluc3RhbmNlMiwgXykpKSA9IHJldmVyc2VkKG91dGNvbWUuZXJyb3JzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChUeXBlMSwgaW5zdGFuY2UxKSwgKEV4Y2VwdGlvbiwgZXhjMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUyLCBpbnN0YW5jZTIpLCAoRXhjZXB0aW9uLCBleGMyKSkKIApAQCAtMzQxLDMgKzMzOSw3IEBACiAgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuc3RyZWFtLnN0cmVhbSBpcyBmKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CmluZGV4IGI4ZDVhYTQuLjM5MmY5NWUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CkBAIC00OTQsMTQgKzQ5NCwxMyBAQAogICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJwogICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKIAotICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzdWl0ZS5hZGRUZXN0KF9zdWl0ZSkKLQogICAgICAgICBtZXNzYWdlcyA9ICgnc2V0VXBNb2R1bGUnLCAndGVhckRvd25Nb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZWFyRG93bkNsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJykKICAgICAgICAgZm9yIHBoYXNlLCBtc2cgaW4gZW51bWVyYXRlKG1lc3NhZ2VzKToKKyAgICAgICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQorICAgICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW19zdWl0ZV0pCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpOgogICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKaW5kZXggOTUyMjQwZS4uZTE4Y2FhNCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0yOSw2ICsyOSwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKIAorICAgIGRlZiB0ZXN0X3NraXBwaW5nX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcF9tZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhPTEpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiPTIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAxIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAyIikKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDMiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9za2lwX21lIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdhZGRTa2lwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDMpCisgICAgICAgIHN1YnRlc3QsIG1zZyA9IHJlc3VsdC5za2lwcGVkWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCAic2tpcCAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1YnRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHN1YnRlc3QsIHRlc3QpCisgICAgICAgIHN1YnRlc3QsIG1zZyA9IHJlc3VsdC5za2lwcGVkWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCAic2tpcCAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1YnRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHN1YnRlc3QsIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWRbMl0sICh0ZXN0LCAic2tpcCAzIikpCisKICAgICBkZWYgdGVzdF9za2lwcGluZ19kZWNvcmF0b3JzKHNlbGYpOgogICAgICAgICBvcF90YWJsZSA9ICgodW5pdHRlc3Quc2tpcFVubGVzcywgRmFsc2UsIFRydWUpLAogICAgICAgICAgICAgICAgICAgICAodW5pdHRlc3Quc2tpcElmLCBUcnVlLCBGYWxzZSkpCkBAIC05NSw2ICsxMjAsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCiAKKyAgICBkZWYgdGVzdF9leHBlY3RlZF9mYWlsdXJlX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICAjIEEgZmFpbHVyZSBpbiBhbnkgc3VidGVzdCBjb3VudHMgYXMgdGhlIGV4cGVjdGVkIGZhaWx1cmUgb2YgdGhlCisgICAgICAgICMgd2hvbGUgdGVzdC4KKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIHN1Y2NlZWRzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhlbHAgbWUhIikKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGNvbWUgaGVyZSIpCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKICAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCkBAIC0xMTAsNiArMTYwLDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCiAKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Nfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgU3VjY2VzcyBpbiBhbGwgc3VidGVzdHMgY291bnRzIGFzIHRoZSB1bmV4cGVjdGVkIHN1Y2Nlc3Mgb2YKKyAgICAgICAgIyB0aGUgd2hvbGUgdGVzdC4KKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIHN1Y2NlZWRzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFNvIGRvZXMgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCiAgICAgZGVmIHRlc3Rfc2tpcF9kb2VzbnRfcnVuX3NldHVwKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQpAQCAtMTQ3LDMgKzIyMSw3IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKICAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKaW5kZXggMmRiOTc4ZC4uNTRjZWM2ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CkBAIC0xLDYgKzEsOCBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKK2ltcG9ydCBnYwogaW1wb3J0IHN5cworaW1wb3J0IHdlYWtyZWYKIGZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFRlc3RFcXVhbGl0eQogCiAKQEAgLTMwMCw3ICszMDIsNTQgQEAKICAgICAgICAgIyB3aGVuIHRoZSBidWcgaXMgZml4ZWQgdGhpcyBsaW5lIHdpbGwgbm90IGNyYXNoCiAgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCiAKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleChzZWxmKToKKyAgICAgICAgaWYgbm90IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiU3VpdGUgY2xlYW51cCBpcyBkaXNhYmxlZCIpCiAKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IFsxLCAyLCAzXQorICAgICAgICBzdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXgoMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCBOb25lLCAzXSwgc3VpdGUuX3Rlc3RzKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3Rlc3RfYXRfaW5kZXhfbm90X2luZGV4YWJsZShzZWxmKToKKyAgICAgICAgaWYgbm90IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiU3VpdGUgY2xlYW51cCBpcyBkaXNhYmxlZCIpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5fdGVzdHMgPSBOb25lCisKKyAgICAgICAgIyBpZiBfcmVtb3ZlQXRJbmRleCByYWlzZXMgZm9yIG5vbml0ZXJhYmxlcyB0aGlzIG5leHQgbGluZSB3aWxsIGJyZWFrCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgyKQorCisgICAgZGVmIGFzc2VydF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW4oc2VsZiwgVGVzdFN1aXRlQ2xhc3MpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF9ub3RoaW5nJykKKyAgICAgICAgd3JlZiA9IHdlYWtyZWYucmVmKHRlc3QpCisKKyAgICAgICAgc3VpdGUgPSBUZXN0U3VpdGVDbGFzcyhbd3JlZigpXSkKKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKworICAgICAgICBkZWwgdGVzdAorCisgICAgICAgICMgZm9yIHRoZSBiZW5lZml0IG9mIG5vbi1yZWZlcmVuY2UgY291bnRpbmcgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCBbTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyZWYoKSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bl9CYXNlVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW4odW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bl9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5UZXN0U3VpdGUpCiAKICAgICBkZWYgdGVzdF9iYXNldGVzdHN1aXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM2Myw2ICs0MTIsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQpCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWM2MzNhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0Ki5weSIKKyAgICAjIFdlIGFyZSBpbnNpZGUgdW5pdHRlc3QudGVzdC50ZXN0bW9jaywgc28gdGhlIHRvcC1sZXZlbCBpcyB0aHJlZSBub3RjaGVzIHVwCisgICAgdG9wX2xldmVsX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHRoaXNfZGlyKSkpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKaW5kZXggN2IyZGQwMC4uNTM5MGE0ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQpAQCAtMTQ1LDMgKzE0NSw3IEBACiAgICAgICAgIG1vY2sud2liYmxlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2sud2liYmxlLCAnc29tZScsICAnYXJncycpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKaW5kZXggYTM2MmEyZi4uMWRiYzBiNiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKQEAgLTMzNyw5ICszMzcsMTAgQEAKIAogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGZvciBzcGVjIGluIChTb21lQ2xhc3MsIFNvbWVDbGFzcygpKToKLSAgICAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoc3BlYykKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKQorICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKFNvbWVDbGFzcygpKQorICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQogCiAKICAgICBkZWYgdGVzdF9jcmVhdGVfYXV0b3NwZWNfcmV0dXJuX3ZhbHVlKHNlbGYpOgpAQCAtNTc2LDEwICs1NzcsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3NwZWNfaW5oZXJpdGFuY2VfZm9yX2NsYXNzZXMoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIGEoc2VsZik6CisgICAgICAgICAgICBkZWYgYShzZWxmLCB4KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBjbGFzcyBCYXIob2JqZWN0KToKLSAgICAgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBkZWYgZihzZWxmLCB5KToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGNsYXNzX21vY2sgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKQpAQCAtNTg3LDI2ICs1ODgsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjbGFzc19tb2NrLCBjbGFzc19tb2NrKCkpCiAKICAgICAgICAgZm9yIHRoaXNfbW9jayBpbiBjbGFzc19tb2NrLCBjbGFzc19tb2NrKCk6Ci0gICAgICAgICAgICB0aGlzX21vY2suYSgpCi0gICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aGlzX21vY2suYSwgJ2ZvbycpCisgICAgICAgICAgICB0aGlzX21vY2suYSh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoeD01KQorICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJywgJ2JhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgdGhpc19tb2NrLCAnYicpCiAKICAgICAgICAgaW5zdGFuY2VfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28oKSkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5hKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jay5hLCAnZm9vJykKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hKDUpCisgICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jay5hLCAnZm9vJywgJ2JhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLCAnYicpCiAKICAgICAgICAgIyBUaGUgcmV0dXJuIHZhbHVlIGlzbid0IGlzbid0IGNhbGxhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jaykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHk9NikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2suQmFyLCAnZycpCiAKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZig2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIoKSwgJ2cnKQogCiAKQEAgLTY2MywxMiArNjY4LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKICAgICAgICAgbW9jaygxLCAyKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCBiPTIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yKQogCiAgICAgICAgIGYuZiA9IGYKICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhmKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2suZikKICAgICAgICAgbW9jay5mKDMsIDQpCiAgICAgICAgIG1vY2suZi5hc3NlcnRfY2FsbGVkX3dpdGgoMywgNCkKKyAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aChhPTMsIGI9NCkKIAogCiAgICAgZGVmIHRlc3Rfc2tpcF9hdHRyaWJ1dGVlcnJvcnMoc2VsZik6CkBAIC03MDQsOSArNzEyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKICAgICAgICAgbW9jaygxKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwgMikKIAogICAgICAgICBtb2NrKDQsIDUpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDQsIDUpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9NCwgYj01KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsIGE9NSwgYj00KQogCiAKICAgICBkZWYgdGVzdF9jbGFzc193aXRoX25vX2luaXQoc2VsZik6CkBAIC03MTksMjQgKzczMSwyNyBAQAogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2NhbGxhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBDYWxsYWJsZShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBhKToKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSkKLSAgICAgICAgbW9jaygpCi0gICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorICAgICAgICBtb2NrKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh4PTEsIHk9MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLCAnYScpCiAKLSAgICAgICAgaW5zdGFuY2UgPSBtb2NrKCkKKyAgICAgICAgaW5zdGFuY2UgPSBtb2NrKDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2UpCiAgICAgICAgIGluc3RhbmNlKGE9J2EnKQorICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnYScpCiAgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9J2EnKQogICAgICAgICBpbnN0YW5jZSgnYScpCiAgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfd2l0aCgnYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfd2l0aChhPSdhJykKIAotICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKCkpCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoMSwgMikpCiAgICAgICAgIG1vY2soYT0nYScpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKQEAgLTc3OSw3ICs3OTQsMTEgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgYSA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCisgICAgICAgIGEuZigxMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmPTEwKQogICAgICAgICBhLmYoc2VsZj0xMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKICAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmPTEwKQogCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKaW5kZXggY2VmNTQwNS4uMjBjYzY1NCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKQEAgLTI1LDYgKzI1LDE4IEBACiAgICAgX19uZXh0X18gPSBuZXh0CiAKIAorY2xhc3MgU29tZXRoaW5nKG9iamVjdCk6CisgICAgZGVmIG1ldGgoc2VsZiwgYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNtZXRoKGNscywgYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzbWV0aChhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKIAogY2xhc3MgTW9ja1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yNzMsNiArMjg1LDQzIEBACiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMsIGE9J2Zpc2gnLCBiPSdub3RoaW5nJykKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorCisKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfbWV0aG9kX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2sobW9jayk6CisgICAgICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLm1ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZy5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkuY21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZy5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkuc21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBtb2NrKCkKQEAgLTI5Nyw2ICszNDYsMjkgQEAKICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorICAgICAgICAjIE1vY2sgY2FsbGVkIG1vcmUgdGhhbiBvbmNlID0+IGFsd2F5cyBmYWlscworICAgICAgICBtb2NrKDQsIDUsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNikKKworCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX2FjY2Vzc19yZXR1cm5zX21vY2tzKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIHNvbWV0aGluZyA9IG1vY2suc29tZXRoaW5nCkBAIC05OTUsNiArMTA2NywzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfaGFzX2NhbGxzX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jaygxMCwgMTEsIGM9MTIpCisgICAgICAgIGNhbGxzID0gWworICAgICAgICAgICAgKCcnLCAoMSwgMiwgMyksIHt9KSwKKyAgICAgICAgICAgICgnJywgKDQsIDUsIDYpLCB7J2QnOiA3fSksCisgICAgICAgICAgICAoKDEwLCAxMSwgMTIpLCB7fSksCisgICAgICAgICAgICBdCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSwgYW55X29yZGVyPVRydWUpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSwgYW55X29yZGVyPVRydWUpCisgICAgICAgICMgUmV2ZXJzZWQgb3JkZXIKKyAgICAgICAgY2FsbHMgPSBsaXN0KHJldmVyc2VkKGNhbGxzKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscywgYW55X29yZGVyPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSwgYW55X29yZGVyPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soMSwgMikKQEAgLTEwMjEsNiArMTEyNiwyNiBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9hbnlfY2FsbF93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2soNCwgNSwgYz02LCBkPTcpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKDQsIDUsIDYsIDcpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGE9NCwgYj01LCBjPTYsIGQ9NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2FueV9jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKwogICAgIGRlZiB0ZXN0X21vY2tfY2FsbHNfY3JlYXRlX2F1dG9zcGVjKHNlbGYpOgogICAgICAgICBkZWYgZihhLCBiKToKICAgICAgICAgICAgIHBhc3MKQEAgLTExNzcsMjAgKzEzMDIsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm1ldGhvZF9jYWxscywgW10pCiAKIAotICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKLSAgICAgICAgIyB0aGlzIGJlaGF2aW91ciBpc24ndCAqdXNlZnVsKiwgYnV0IGF0IGxlYXN0IGl0J3Mgbm93IHRlc3RlZC4uLgotICAgICAgICBmb3IgS2xhc3MgaW4gTW9jaywgTWFnaWNNb2NrLCBOb25DYWxsYWJsZU1hZ2ljTW9jaywgTm9uQ2FsbGFibGVNb2NrOgotICAgICAgICAgICAgbSA9IEtsYXNzKCkKLSAgICAgICAgICAgIG9yaWdpbmFsID0gbS5mb28KLSAgICAgICAgICAgIG0uZm9vID0gMwotICAgICAgICAgICAgZGVsIG0uZm9vCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9vLCBvcmlnaW5hbCkKLQotICAgICAgICAgICAgbmV3ID0gbS5mb28gPSBNb2NrKCkKLSAgICAgICAgICAgIGRlbCBtLmZvbwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZvbywgbmV3KQotCi0KICAgICBkZWYgdGVzdF9tb2NrX3BhcmVudHMoc2VsZik6CiAgICAgICAgIGZvciBLbGFzcyBpbiBNb2NrLCBNYWdpY01vY2s6CiAgICAgICAgICAgICBtID0gS2xhc3MoKQpAQCAtMTI1NCw3ICsxMzY1LDggQEAKIAogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICBmb3IgbW9jayBpbiBNb2NrKCksIE1hZ2ljTW9jaygpOgorICAgICAgICBmb3IgbW9jayBpbiAoTW9jaygpLCBNYWdpY01vY2soKSwgTm9uQ2FsbGFibGVNYWdpY01vY2soKSwKKyAgICAgICAgICAgICAgICAgICAgIE5vbkNhbGxhYmxlTW9jaygpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vY2ssICdtJykpCiAKICAgICAgICAgICAgIGRlbCBtb2NrLm0KQEAgLTEyNzQsNiArMTM4Niw1IEBACiAgICAgICAgICAgICBtb2NrLmZvbwogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQppbmRleCBjMTA5MWI0Li5jMWJjMzRmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CkBAIC0xNzgwLDYgKzE3ODAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzKG9zLnBhdGgsIHBhdGgpCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weQppbmRleCAwYTBjZmFkLi5mNTRlMDUxIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weQpAQCAtMTcyLDUgKzE3Miw4OCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgJ2ZvbycpCiAKIAorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2RhdGEoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCByZWFkbGluZSB3aWxsIHJldHVybiBhbGwgdGhlIGxpbmVzIGZyb20gdGhlIGZha2UgZmlsZQorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTIgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUzID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTIsICdiYXJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTMsICdiYXpcbicpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIHByb3Blcmx5IGVtdWxhdGUgYSBmaWxlIHRoYXQgZG9lc24ndCBlbmQgaW4gYSBuZXdsaW5lCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb28nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIHJlc3VsdCA9IGgucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgJ2ZvbycpCisKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlbXVsYXRpbmcgYSBmaWxlIHRoYXQgZW5kcyBpbiBhIG5ld2xpbmUgY2hhcmFjdGVyIHdvcmtzCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIHJlc3VsdCA9IGgucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsnZm9vXG4nLCAnYmFyXG4nLCAnYmF6XG4nXSkKKworICAgICAgICAjIFRlc3QgdGhhdCBmaWxlcyB3aXRob3V0IGEgZmluYWwgbmV3bGluZSB3aWxsIGFsc28gYmUgY29ycmVjdGx5CisgICAgICAgICMgZW11bGF0ZWQKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXonKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIHJlc3VsdCA9IGgucmVhZGxpbmVzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXonXSkKKworCisgICAgZGVmIHRlc3RfbW9ja19vcGVuX3JlYWRfd2l0aF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBBdCBvbmUgcG9pbnQgY2FsbGluZyByZWFkIHdpdGggYW4gYXJndW1lbnQgd2FzIGJyb2tlbgorICAgICAgICAjIGZvciBtb2NrcyByZXR1cm5lZCBieSBtb2NrX29wZW4KKyAgICAgICAgc29tZV9kYXRhID0gJ2Zvb1xuYmFyXG5iYXonCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPXNvbWVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrKCkucmVhZCgxMCksIHNvbWVfZGF0YSkKKworCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWRfcmVhZHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgcmVhZCwgcmVhZGxpbmUsIGFuZCByZWFkbGluZXMgcHVsbHMgZGF0YQorICAgICAgICAjIHNlcXVlbnRpYWxseSBmcm9tIHRoZSBkYXRhIHdlIHByZWxvYWQgd2l0aAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN0LCBbJ2JhclxuJywgJ2JhelxuJ10pCisKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHJlc3QgPSBoLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsICdiYXJcbmJhelxuJykKKworCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGluZ19yZXR1cm5fdmFsdWVzKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vJykKKyAgICAgICAgaGFuZGxlID0gbW9jaygpCisKKyAgICAgICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSA9ICdiYXInCisgICAgICAgIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gWydiYXInXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWQoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZXMoKSwgWydiYXInXSkKKworICAgICAgICAjIGNhbGwgcmVwZWF0ZWRseSB0byBjaGVjayB0aGF0IGEgU3RvcEl0ZXJhdGlvbiBpcyBub3QgcHJvcGFnYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC91dGlsLnB5IGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKaW5kZXggY2NkZjBiOC4uYWVlNDk4ZiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3V0aWwucHkKKysrIGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKQEAgLTEsMTAgKzEsNDcgQEAKICIiIlZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMuIiIiCiAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIE9yZGVyZWREaWN0Citmcm9tIG9zLnBhdGggaW1wb3J0IGNvbW1vbnByZWZpeAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCiBfTUFYX0xFTkdUSCA9IDgwCitfUExBQ0VIT0xERVJfTEVOID0gMTIKK19NSU5fQkVHSU5fTEVOID0gNQorX01JTl9FTkRfTEVOID0gNQorX01JTl9DT01NT05fTEVOID0gNQorX01JTl9ESUZGX0xFTiA9IF9NQVhfTEVOR1RIIC0gXAorICAgICAgICAgICAgICAgKF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fQ09NTU9OX0xFTiArCisgICAgICAgICAgICAgICAgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fRU5EX0xFTikKK2Fzc2VydCBfTUlOX0RJRkZfTEVOID49IDAKKworZGVmIF9zaG9ydGVuKHMsIHByZWZpeGxlbiwgc3VmZml4bGVuKToKKyAgICBza2lwID0gbGVuKHMpIC0gcHJlZml4bGVuIC0gc3VmZml4bGVuCisgICAgaWYgc2tpcCA+IF9QTEFDRUhPTERFUl9MRU46CisgICAgICAgIHMgPSAnJXNbJWQgY2hhcnNdJXMnICUgKHNbOnByZWZpeGxlbl0sIHNraXAsIHNbbGVuKHMpIC0gc3VmZml4bGVuOl0pCisgICAgcmV0dXJuIHMKKworZGVmIF9jb21tb25fc2hvcnRlbl9yZXByKCphcmdzKToKKyAgICBhcmdzID0gdHVwbGUobWFwKHNhZmVfcmVwciwgYXJncykpCisgICAgbWF4bGVuID0gbWF4KG1hcChsZW4sIGFyZ3MpKQorICAgIGlmIG1heGxlbiA8PSBfTUFYX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIHByZWZpeCA9IGNvbW1vbnByZWZpeChhcmdzKQorICAgIHByZWZpeGxlbiA9IGxlbihwcmVmaXgpCisKKyAgICBjb21tb25fbGVuID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAgIChtYXhsZW4gLSBwcmVmaXhsZW4gKyBfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4pCisgICAgaWYgY29tbW9uX2xlbiA+IF9NSU5fQ09NTU9OX0xFTjoKKyAgICAgICAgYXNzZXJ0IF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fQ09NTU9OX0xFTiArIFwKKyAgICAgICAgICAgICAgIChtYXhsZW4gLSBwcmVmaXhsZW4pIDwgX01BWF9MRU5HVEgKKyAgICAgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgY29tbW9uX2xlbikKKyAgICAgICAgcmV0dXJuIHR1cGxlKHByZWZpeCArIHNbcHJlZml4bGVuOl0gZm9yIHMgaW4gYXJncykKKworICAgIHByZWZpeCA9IF9zaG9ydGVuKHByZWZpeCwgX01JTl9CRUdJTl9MRU4sIF9NSU5fQ09NTU9OX0xFTikKKyAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgX3Nob3J0ZW4oc1twcmVmaXhsZW46XSwgX01JTl9ESUZGX0xFTiwgX01JTl9FTkRfTEVOKQorICAgICAgICAgICAgICAgICBmb3IgcyBpbiBhcmdzKQorCiBkZWYgc2FmZV9yZXByKG9iaiwgc2hvcnQ9RmFsc2UpOgogICAgIHRyeToKICAgICAgICAgcmVzdWx0ID0gcmVwcihvYmopCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL2Vycm9yLnB5IGIvTGliL3VybGxpYi9lcnJvci5weQppbmRleCBiNzEyZWJiLi40NWI3MTY5IDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL2Vycm9yLnB5CisrKyBiL0xpYi91cmxsaWIvZXJyb3IucHkKQEAgLTEsNiArMSw2IEBACiAiIiJFeGNlcHRpb24gY2xhc3NlcyByYWlzZWQgYnkgdXJsbGliLgogCi1UaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgaXMgVVJMRXJyb3IsIHdoaWNoIGluaGVyaXRzIGZyb20gSU9FcnJvci4gIEl0CitUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgaXMgVVJMRXJyb3IsIHdoaWNoIGluaGVyaXRzIGZyb20gT1NFcnJvci4gIEl0CiBkb2Vzbid0IGRlZmluZSBhbnkgYmVoYXZpb3Igb2YgaXRzIG93biwgYnV0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwKIGV4Y2VwdGlvbnMgZGVmaW5lZCBpbiB0aGlzIHBhY2thZ2UuCiAKQEAgLTE3LDExICsxNywxMSBAQAogCiAKICMgZG8gdGhlc2UgZXJyb3IgY2xhc3NlcyBtYWtlIHNlbnNlPwotIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBJT0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKKyMgbWFrZSBzdXJlIGFsbCBvZiB0aGUgT1NFcnJvciBzdHVmZiBpcyBvdmVycmlkZGVuLiAgd2UganVzdCB3YW50IHRvIGJlCiAjIHN1YnR5cGVzLgogCi1jbGFzcyBVUkxFcnJvcihJT0Vycm9yKToKLSAgICAjIFVSTEVycm9yIGlzIGEgc3ViLXR5cGUgb2YgSU9FcnJvciwgYnV0IGl0IGRvZXNuJ3Qgc2hhcmUgYW55IG9mCitjbGFzcyBVUkxFcnJvcihPU0Vycm9yKToKKyAgICAjIFVSTEVycm9yIGlzIGEgc3ViLXR5cGUgb2YgT1NFcnJvciwgYnV0IGl0IGRvZXNuJ3Qgc2hhcmUgYW55IG9mCiAgICAgIyB0aGUgaW1wbGVtZW50YXRpb24uICBuZWVkIHRvIG92ZXJyaWRlIF9faW5pdF9fIGFuZCBfX3N0cl9fLgogICAgICMgSXQgc2V0cyBzZWxmLmFyZ3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBFbnZpcm9ubWVudEVycm9yCiAgICAgIyBzdWJjbGFzc2VzLCBidXQgYXJncyBkb2Vzbid0IGhhdmUgdGhlIHR5cGljYWwgZm9ybWF0IHdpdGggZXJybm8gaW4KQEAgLTYxLDkgKzYxLDEzIEBACiAgICAgZGVmIHJlYXNvbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubXNnCiAKLSAgICBkZWYgaW5mbyhzZWxmKToKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGVhZGVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuaGRycwogCisgICAgQGhlYWRlcnMuc2V0dGVyCisgICAgZGVmIGhlYWRlcnMoc2VsZiwgaGVhZGVycyk6CisgICAgICAgIHNlbGYuaGRycyA9IGhlYWRlcnMKIAogIyBleGNlcHRpb24gcmFpc2VkIHdoZW4gZG93bmxvYWRlZCBzaXplIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoCiBjbGFzcyBDb250ZW50VG9vU2hvcnRFcnJvcihVUkxFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3BhcnNlLnB5IGIvTGliL3VybGxpYi9wYXJzZS5weQppbmRleCA5YTJkZjQxLi41MzI4YjlkIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3BhcnNlLnB5CisrKyBiL0xpYi91cmxsaWIvcGFyc2UucHkKQEAgLTg0Niw3ICs4NDYsNiBAQAogICAgICIiInNwbGl0dHlwZSgndHlwZTpvcGFxdWVzdHJpbmcnKSAtLT4gJ3R5cGUnLCAnb3BhcXVlc3RyaW5nJy4iIiIKICAgICBnbG9iYWwgX3R5cGVwcm9nCiAgICAgaWYgX3R5cGVwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdHlwZXByb2cgPSByZS5jb21waWxlKCdeKFteLzpdKyk6JykKIAogICAgIG1hdGNoID0gX3R5cGVwcm9nLm1hdGNoKHVybCkKQEAgLTg2MCw3ICs4NTksNiBAQAogICAgICIiInNwbGl0aG9zdCgnLy9ob3N0Wzpwb3J0XS9wYXRoJykgLS0+ICdob3N0Wzpwb3J0XScsICcvcGF0aCcuIiIiCiAgICAgZ2xvYmFsIF9ob3N0cHJvZwogICAgIGlmIF9ob3N0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX2hvc3Rwcm9nID0gcmUuY29tcGlsZSgnXi8vKFteLz9dKikoLiopJCcpCiAKICAgICBtYXRjaCA9IF9ob3N0cHJvZy5tYXRjaCh1cmwpCkBAIC04NzcsNyArODc1LDYgQEAKICAgICAiIiJzcGxpdHVzZXIoJ3VzZXJbOnBhc3N3ZF1AaG9zdFs6cG9ydF0nKSAtLT4gJ3VzZXJbOnBhc3N3ZF0nLCAnaG9zdFs6cG9ydF0nLiIiIgogICAgIGdsb2JhbCBfdXNlcnByb2cKICAgICBpZiBfdXNlcnByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF91c2VycHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopQCguKikkJykKIAogICAgIG1hdGNoID0gX3VzZXJwcm9nLm1hdGNoKGhvc3QpCkBAIC04ODksNyArODg2LDYgQEAKICAgICAiIiJzcGxpdHBhc3N3ZCgndXNlcjpwYXNzd2QnKSAtPiAndXNlcicsICdwYXNzd2QnLiIiIgogICAgIGdsb2JhbCBfcGFzc3dkcHJvZwogICAgIGlmIF9wYXNzd2Rwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcGFzc3dkcHJvZyA9IHJlLmNvbXBpbGUoJ14oW146XSopOiguKikkJyxyZS5TKQogCiAgICAgbWF0Y2ggPSBfcGFzc3dkcHJvZy5tYXRjaCh1c2VyKQpAQCAtOTAyLDcgKzg5OCw2IEBACiAgICAgIiIic3BsaXRwb3J0KCdob3N0OnBvcnQnKSAtLT4gJ2hvc3QnLCAncG9ydCcuIiIiCiAgICAgZ2xvYmFsIF9wb3J0cHJvZwogICAgIGlmIF9wb3J0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3BvcnRwcm9nID0gcmUuY29tcGlsZSgnXiguKik6KFswLTldKykkJykKIAogICAgIG1hdGNoID0gX3BvcnRwcm9nLm1hdGNoKGhvc3QpCkBAIC05MTcsNyArOTEyLDYgQEAKICAgICBSZXR1cm4gTm9uZSBpZiAnOicgYnV0IG5vdCBhIHZhbGlkIG51bWJlci4iIiIKICAgICBnbG9iYWwgX25wb3J0cHJvZwogICAgIGlmIF9ucG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9ucG9ydHByb2cgPSByZS5jb21waWxlKCdeKC4qKTooLiopJCcpCiAKICAgICBtYXRjaCA9IF9ucG9ydHByb2cubWF0Y2goaG9zdCkKQEAgLTkzNiw3ICs5MzAsNiBAQAogICAgICIiInNwbGl0cXVlcnkoJy9wYXRoP3F1ZXJ5JykgLS0+ICcvcGF0aCcsICdxdWVyeScuIiIiCiAgICAgZ2xvYmFsIF9xdWVyeXByb2cKICAgICBpZiBfcXVlcnlwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcXVlcnlwcm9nID0gcmUuY29tcGlsZSgnXiguKilcPyhbXj9dKikkJykKIAogICAgIG1hdGNoID0gX3F1ZXJ5cHJvZy5tYXRjaCh1cmwpCkBAIC05NDgsNyArOTQxLDYgQEAKICAgICAiIiJzcGxpdHRhZygnL3BhdGgjdGFnJykgLS0+ICcvcGF0aCcsICd0YWcnLiIiIgogICAgIGdsb2JhbCBfdGFncHJvZwogICAgIGlmIF90YWdwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdGFncHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopIyhbXiNdKikkJykKIAogICAgIG1hdGNoID0gX3RhZ3Byb2cubWF0Y2godXJsKQpAQCAtOTY2LDcgKzk1OCw2IEBACiAgICAgIiIic3BsaXR2YWx1ZSgnYXR0cj12YWx1ZScpIC0tPiAnYXR0cicsICd2YWx1ZScuIiIiCiAgICAgZ2xvYmFsIF92YWx1ZXByb2cKICAgICBpZiBfdmFsdWVwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdmFsdWVwcm9nID0gcmUuY29tcGlsZSgnXihbXj1dKik9KC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdmFsdWVwcm9nLm1hdGNoKGF0dHIpCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3JlcXVlc3QucHkgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKaW5kZXggYTc0NDVkMS4uNTk5NWNiZSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5CisrKyBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQpAQCAtMTgsNyArMTgsNyBAQAogdXJsbGliLiAgcGFzcyB0aGUgdXJsIGFuZCBvcHRpb25hbGx5IGRhdGEgdG8gcG9zdCB0byBhbiBIVFRQIFVSTCwgYW5kCiBnZXQgYSBmaWxlLWxpa2Ugb2JqZWN0IGJhY2suICBPbmUgZGlmZmVyZW5jZSBpcyB0aGF0IHlvdSBjYW4gYWxzbyBwYXNzCiBhIFJlcXVlc3QgaW5zdGFuY2UgaW5zdGVhZCBvZiBVUkwuICBSYWlzZXMgYSBVUkxFcnJvciAoc3ViY2xhc3Mgb2YKLUlPRXJyb3IpOyBmb3IgSFRUUCBlcnJvcnMsIHJhaXNlcyBhbiBIVFRQRXJyb3IsIHdoaWNoIGNhbiBhbHNvIGJlCitPU0Vycm9yKTsgZm9yIEhUVFAgZXJyb3JzLCByYWlzZXMgYW4gSFRUUEVycm9yLCB3aGljaCBjYW4gYWxzbyBiZQogdHJlYXRlZCBhcyBhIHZhbGlkIHJlc3BvbnNlLgogCiBidWlsZF9vcGVuZXIgLS0gRnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IE9wZW5lckRpcmVjdG9yIGluc3RhbmNlLgpAQCAtMTAzLDcgKzEwMyw4IEBACiBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgKAogICAgIHVybHBhcnNlLCB1cmxzcGxpdCwgdXJsam9pbiwgdW53cmFwLCBxdW90ZSwgdW5xdW90ZSwKICAgICBzcGxpdHR5cGUsIHNwbGl0aG9zdCwgc3BsaXRwb3J0LCBzcGxpdHVzZXIsIHNwbGl0cGFzc3dkLAotICAgIHNwbGl0YXR0ciwgc3BsaXRxdWVyeSwgc3BsaXR2YWx1ZSwgc3BsaXR0YWcsIHRvX2J5dGVzLCB1cmx1bnBhcnNlKQorICAgIHNwbGl0YXR0ciwgc3BsaXRxdWVyeSwgc3BsaXR2YWx1ZSwgc3BsaXR0YWcsIHRvX2J5dGVzLAorICAgIHVucXVvdGVfdG9fYnl0ZXMsIHVybHVucGFyc2UpCiBmcm9tIHVybGxpYi5yZXNwb25zZSBpbXBvcnQgYWRkaW5mb3VybCwgYWRkY2xvc2Vob29rCiAKICMgY2hlY2sgZm9yIFNTTApAQCAtMTIxLDcgKzEyMiw3IEBACiAgICAgJ0hUVFBQYXNzd29yZE1ncicsICdIVFRQUGFzc3dvcmRNZ3JXaXRoRGVmYXVsdFJlYWxtJywKICAgICAnQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyJywgJ0hUVFBCYXNpY0F1dGhIYW5kbGVyJywgJ1Byb3h5QmFzaWNBdXRoSGFuZGxlcicsCiAgICAgJ0Fic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXInLCAnSFRUUERpZ2VzdEF1dGhIYW5kbGVyJywgJ1Byb3h5RGlnZXN0QXV0aEhhbmRsZXInLAotICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsCisgICAgJ0hUVFBIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywgJ0RhdGFIYW5kbGVyJywKICAgICAnVW5rbm93bkhhbmRsZXInLCAnSFRUUEVycm9yUHJvY2Vzc29yJywKICAgICAjIEZ1bmN0aW9ucwogICAgICd1cmxvcGVuJywgJ2luc3RhbGxfb3BlbmVyJywgJ2J1aWxkX29wZW5lcicsCkBAIC0xNDAsMTMgKzE0MSw5IEBACiAgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRlZmF1bHQ6CiAgICAgICAgIGlmIG5vdCBfaGF2ZV9zc2w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTU0wgc3VwcG9ydCBub3QgYXZhaWxhYmxlJykKLSAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKLSAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECi0gICAgICAgIGlmIGNhZmlsZSBvciBjYXBhdGg6Ci0gICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1jYWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGg9Y2FwYXRoKQogICAgICAgICBodHRwc19oYW5kbGVyID0gSFRUUFNIYW5kbGVyKGNvbnRleHQ9Y29udGV4dCwgY2hlY2tfaG9zdG5hbWU9VHJ1ZSkKICAgICAgICAgb3BlbmVyID0gYnVpbGRfb3BlbmVyKGh0dHBzX2hhbmRsZXIpCiAgICAgZWxpZiBfb3BlbmVyIGlzIE5vbmU6CkBAIC0yMjcsNyArMjI0LDcgQEAKICAgICBmb3IgdGVtcF9maWxlIGluIF91cmxfdGVtcGZpbGVzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsodGVtcF9maWxlKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWwgX3VybF90ZW1wZmlsZXNbOl0KQEAgLTI1OCwyNCArMjU1LDYwIEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZGF0YT1Ob25lLCBoZWFkZXJzPXt9LAogICAgICAgICAgICAgICAgICBvcmlnaW5fcmVxX2hvc3Q9Tm9uZSwgdW52ZXJpZmlhYmxlPUZhbHNlLAogICAgICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSk6Ci0gICAgICAgICMgdW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykgLS0+ICd0eXBlOi8vaG9zdC9wYXRoJwotICAgICAgICBzZWxmLmZ1bGxfdXJsID0gdW53cmFwKHVybCkKLSAgICAgICAgc2VsZi5mdWxsX3VybCwgc2VsZi5mcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuZnVsbF91cmwpCi0gICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgICAgICAgc2VsZi5mdWxsX3VybCA9IHVybAogICAgICAgICBzZWxmLmhlYWRlcnMgPSB7fQorICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzID0ge30KKyAgICAgICAgc2VsZi5fZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQogICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCA9IE5vbmUKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaGVhZGVycy5pdGVtcygpOgogICAgICAgICAgICAgc2VsZi5hZGRfaGVhZGVyKGtleSwgdmFsdWUpCi0gICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMgPSB7fQogICAgICAgICBpZiBvcmlnaW5fcmVxX2hvc3QgaXMgTm9uZToKICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdCA9IHJlcXVlc3RfaG9zdChzZWxmKQogICAgICAgICBzZWxmLm9yaWdpbl9yZXFfaG9zdCA9IG9yaWdpbl9yZXFfaG9zdAogICAgICAgICBzZWxmLnVudmVyaWZpYWJsZSA9IHVudmVyaWZpYWJsZQotICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZ1bGxfdXJsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZyYWdtZW50OgorICAgICAgICAgICAgcmV0dXJuICd7fSN7fScuZm9ybWF0KHNlbGYuX2Z1bGxfdXJsLCBzZWxmLmZyYWdtZW50KQorICAgICAgICByZXR1cm4gc2VsZi5fZnVsbF91cmwKKworICAgIEBmdWxsX3VybC5zZXR0ZXIKKyAgICBkZWYgZnVsbF91cmwoc2VsZiwgdXJsKToKKyAgICAgICAgIyB1bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKSAtLT4gJ3R5cGU6Ly9ob3N0L3BhdGgnCisgICAgICAgIHNlbGYuX2Z1bGxfdXJsID0gdW53cmFwKHVybCkKKyAgICAgICAgc2VsZi5fZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQgPSBzcGxpdHRhZyhzZWxmLl9mdWxsX3VybCkKICAgICAgICAgc2VsZi5fcGFyc2UoKQogCisgICAgQGZ1bGxfdXJsLmRlbGV0ZXIKKyAgICBkZWYgZnVsbF91cmwoc2VsZik6CisgICAgICAgIHNlbGYuX2Z1bGxfdXJsID0gTm9uZQorICAgICAgICBzZWxmLmZyYWdtZW50ID0gTm9uZQorICAgICAgICBzZWxmLnNlbGVjdG9yID0gJycKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYXRhKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGF0YQorCisgICAgQGRhdGEuc2V0dGVyCisgICAgZGVmIGRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEgIT0gc2VsZi5fZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2RhdGEgPSBkYXRhCisgICAgICAgICAgICAjIGlzc3VlIDE2NDY0CisgICAgICAgICAgICAjIGlmIHdlIGNoYW5nZSBkYXRhIHdlIG5lZWQgdG8gcmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcgorICAgICAgICAgICAgIyAoY2F1c2UgaXQncyBtb3N0IHByb2JhYmx5IGNhbGN1bGF0ZWQgZm9yIHByZXZpb3VzIHZhbHVlKQorICAgICAgICAgICAgaWYgc2VsZi5oYXNfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpOgorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX2hlYWRlcigiQ29udGVudC1sZW5ndGgiKQorCisgICAgQGRhdGEuZGVsZXRlcgorICAgIGRlZiBkYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBOb25lCisKICAgICBkZWYgX3BhcnNlKHNlbGYpOgotICAgICAgICBzZWxmLnR5cGUsIHJlc3QgPSBzcGxpdHR5cGUoc2VsZi5mdWxsX3VybCkKKyAgICAgICAgc2VsZi50eXBlLCByZXN0ID0gc3BsaXR0eXBlKHNlbGYuX2Z1bGxfdXJsKQogICAgICAgICBpZiBzZWxmLnR5cGUgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdXJsIHR5cGU6ICVyIiAlIHNlbGYuZnVsbF91cmwpCiAgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5zZWxlY3RvciA9IHNwbGl0aG9zdChyZXN0KQpAQCAtMjg0LDYyICszMTcsMTEgQEAKIAogICAgIGRlZiBnZXRfbWV0aG9kKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZC4iIiIKLSAgICAgICAgaWYgc2VsZi5tZXRob2QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5tZXRob2QKLSAgICAgICAgZWxpZiBzZWxmLmRhdGEgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gIlBPU1QiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIkdFVCIKKyAgICAgICAgZGVmYXVsdF9tZXRob2QgPSAiUE9TVCIgaWYgc2VsZi5kYXRhIGlzIG5vdCBOb25lIGVsc2UgIkdFVCIKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgJ21ldGhvZCcsIGRlZmF1bHRfbWV0aG9kKQogCiAgICAgZGVmIGdldF9mdWxsX3VybChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5mcmFnbWVudDoKLSAgICAgICAgICAgIHJldHVybiAnJXMjJXMnICUgKHNlbGYuZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5mdWxsX3VybAotCi0gICAgIyBCZWdpbiBkZXByZWNhdGVkIG1ldGhvZHMKLQotICAgIGRlZiBhZGRfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuYWRkX2RhdGEgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKLQotICAgIGRlZiBoYXNfZGF0YShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuaGFzX2RhdGEgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLmRhdGEgaXMgbm90IE5vbmUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X2RhdGEgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLmRhdGEKLQotICAgIGRlZiBnZXRfdHlwZShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X3R5cGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnR5cGUKLQotICAgIGRlZiBnZXRfaG9zdChzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X2hvc3QgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLmhvc3QKLQotICAgIGRlZiBnZXRfc2VsZWN0b3Ioc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9zZWxlY3RvciBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0b3IKLQotICAgIGRlZiBpc191bnZlcmlmaWFibGUoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmlzX3VudmVyaWZpYWJsZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYudW52ZXJpZmlhYmxlCi0KLSAgICBkZWYgZ2V0X29yaWdpbl9yZXFfaG9zdChzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X29yaWdpbl9yZXFfaG9zdCBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYub3JpZ2luX3JlcV9ob3N0Ci0KLSAgICAjIEVuZCBkZXByZWNhdGVkIG1ldGhvZHMKKyAgICAgICAgcmV0dXJuIHNlbGYuZnVsbF91cmwKIAogICAgIGRlZiBzZXRfcHJveHkoc2VsZiwgaG9zdCwgdHlwZSk6CiAgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnaHR0cHMnIGFuZCBub3Qgc2VsZi5fdHVubmVsX2hvc3Q6CkBAIC0zNjksNiArMzUxLDEwIEBACiAgICAgICAgICAgICBoZWFkZXJfbmFtZSwKICAgICAgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMuZ2V0KGhlYWRlcl9uYW1lLCBkZWZhdWx0KSkKIAorICAgIGRlZiByZW1vdmVfaGVhZGVyKHNlbGYsIGhlYWRlcl9uYW1lKToKKyAgICAgICAgc2VsZi5oZWFkZXJzLnBvcChoZWFkZXJfbmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5wb3AoaGVhZGVyX25hbWUsIE5vbmUpCisKICAgICBkZWYgaGVhZGVyX2l0ZW1zKHNlbGYpOgogICAgICAgICBoZHJzID0gc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5jb3B5KCkKICAgICAgICAgaGRycy51cGRhdGUoc2VsZi5oZWFkZXJzKQpAQCAtNTMxLDcgKzUxNyw4IEBACiAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQogICAgIGRlZmF1bHRfY2xhc3NlcyA9IFtQcm94eUhhbmRsZXIsIFVua25vd25IYW5kbGVyLCBIVFRQSGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgSFRUUERlZmF1bHRFcnJvckhhbmRsZXIsIEhUVFBSZWRpcmVjdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUUEhhbmRsZXIsIEZpbGVIYW5kbGVyLCBIVFRQRXJyb3JQcm9jZXNzb3JdCisgICAgICAgICAgICAgICAgICAgICAgIEZUUEhhbmRsZXIsIEZpbGVIYW5kbGVyLCBIVFRQRXJyb3JQcm9jZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgIERhdGFIYW5kbGVyXQogICAgIGlmIGhhc2F0dHIoaHR0cC5jbGllbnQsICJIVFRQU0Nvbm5lY3Rpb24iKToKICAgICAgICAgZGVmYXVsdF9jbGFzc2VzLmFwcGVuZChIVFRQU0hhbmRsZXIpCiAgICAgc2tpcCA9IHNldCgpCkBAIC0xMjQ2LDExICsxMjMzLDE3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOiAjIHRpbWVvdXQgZXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOiAjIHRpbWVvdXQgZXJyb3IKICAgICAgICAgICAgIGguY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IoZXJyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgIyBJZiB0aGUgc2VydmVyIGRvZXMgbm90IHNlbmQgdXMgYSAnQ29ubmVjdGlvbjogY2xvc2UnIGhlYWRlciwKKyAgICAgICAgICAgICMgSFRUUENvbm5lY3Rpb24gYXNzdW1lcyB0aGUgc29ja2V0IHNob3VsZCBiZSBsZWZ0IG9wZW4uIE1hbnVhbGx5CisgICAgICAgICAgICAjIG1hcmsgdGhlIHNvY2tldCB0byBiZSBjbG9zZWQgd2hlbiB0aGlzIHJlc3BvbnNlIG9iamVjdCBnb2VzIGF3YXkuCisgICAgICAgICAgICBpZiBoLnNvY2s6CisgICAgICAgICAgICAgICAgaC5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBoLnNvY2sgPSBOb25lCiAKICAgICAgICAgci51cmwgPSByZXEuZ2V0X2Z1bGxfdXJsKCkKICAgICAgICAgIyBUaGlzIGxpbmUgcmVwbGFjZXMgdGhlIC5tc2cgYXR0cmlidXRlIG9mIHRoZSBIVFRQUmVzcG9uc2UKQEAgLTE0NDUsNyArMTQzOCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihtc2cpCiAgICAgICAgIHBhdGgsIGF0dHJzID0gc3BsaXRhdHRyKHJlcS5zZWxlY3RvcikKICAgICAgICAgZGlycyA9IHBhdGguc3BsaXQoJy8nKQpAQCAtMTUzMSw2ICsxNTI0LDM2IEBACiAgICAgICAgIHNlbGYuY2FjaGUuY2xlYXIoKQogICAgICAgICBzZWxmLnRpbWVvdXQuY2xlYXIoKQogCitjbGFzcyBEYXRhSGFuZGxlcihCYXNlSGFuZGxlcik6CisgICAgZGVmIGRhdGFfb3BlbihzZWxmLCByZXEpOgorICAgICAgICAjIGRhdGEgVVJMcyBhcyBzcGVjaWZpZWQgaW4gUkZDIDIzOTcuCisgICAgICAgICMKKyAgICAgICAgIyBpZ25vcmVzIFBPU1RlZCBkYXRhCisgICAgICAgICMKKyAgICAgICAgIyBzeW50YXg6CisgICAgICAgICMgZGF0YXVybCAgIDo9ICJkYXRhOiIgWyBtZWRpYXR5cGUgXSBbICI7YmFzZTY0IiBdICIsIiBkYXRhCisgICAgICAgICMgbWVkaWF0eXBlIDo9IFsgdHlwZSAiLyIgc3VidHlwZSBdICooICI7IiBwYXJhbWV0ZXIgKQorICAgICAgICAjIGRhdGEgICAgICA6PSAqdXJsY2hhcgorICAgICAgICAjIHBhcmFtZXRlciA6PSBhdHRyaWJ1dGUgIj0iIHZhbHVlCisgICAgICAgIHVybCA9IHJlcS5mdWxsX3VybAorCisgICAgICAgIHNjaGVtZSwgZGF0YSA9IHVybC5zcGxpdCgiOiIsMSkKKyAgICAgICAgbWVkaWF0eXBlLCBkYXRhID0gZGF0YS5zcGxpdCgiLCIsMSkKKworICAgICAgICAjIGV2ZW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIG1pZ2h0IGJlIHF1b3RlZCBzbyB1bnF1b3RlIGluIGFueSBjYXNlOgorICAgICAgICBkYXRhID0gdW5xdW90ZV90b19ieXRlcyhkYXRhKQorICAgICAgICBpZiBtZWRpYXR5cGUuZW5kc3dpdGgoIjtiYXNlNjQiKToKKyAgICAgICAgICAgIGRhdGEgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoZGF0YSkKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9IG1lZGlhdHlwZVs6LTddCisKKyAgICAgICAgaWYgbm90IG1lZGlhdHlwZToKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkiCisKKyAgICAgICAgaGVhZGVycyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIkNvbnRlbnQtdHlwZTogJXNcbkNvbnRlbnQtbGVuZ3RoOiAlZFxuIiAlCisgICAgICAgICAgICAobWVkaWF0eXBlLCBsZW4oZGF0YSkpKQorCisgICAgICAgIHJldHVybiBhZGRpbmZvdXJsKGlvLkJ5dGVzSU8oZGF0YSksIGhlYWRlcnMsIHVybCkKKwogCiAjIENvZGUgbW92ZSBmcm9tIHRoZSBvbGQgdXJsbGliIG1vZHVsZQogCkBAIC0xNjU0LDIwICsxNjc3LDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwsIGRhdGEpCi0gICAgICAgIGV4Y2VwdCBIVFRQRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoSFRUUEVycm9yLCBVUkxFcnJvcik6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCiAKICAgICBkZWYgb3Blbl91bmtub3duKHNlbGYsIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAndW5rbm93biB1cmwgdHlwZScsIHR5cGUpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKIAogICAgIGRlZiBvcGVuX3Vua25vd25fcHJveHkoc2VsZiwgcHJveHksIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAnaW52YWxpZCBwcm94eSBmb3IgJXMnICUgdHlwZSwgcHJveHkpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKIAogICAgICMgRXh0ZXJuYWwgaW50ZXJmYWNlCiAgICAgZGVmIHJldHJpZXZlKHNlbGYsIHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpOgpAQCAtMTY4Myw3ICsxNzA2LDcgQEAKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiB1cmwycGF0aG5hbWUoc3BsaXRob3N0KHVybDEpWzFdKSwgaGRycwotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnAgPSBzZWxmLm9wZW4odXJsLCBkYXRhKQogICAgICAgICB0cnk6CkBAIC0xNzc2LDcgKzE3OTksNyBAQAogICAgICAgICAgICAgICAgIGlmIHByb3h5X2J5cGFzcyhyZWFsaG9zdCk6CiAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSByZWFsaG9zdAogCi0gICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBJT0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQorICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgT1NFcnJvcignaHR0cCBlcnJvcicsICdubyBob3N0IGdpdmVuJykKIAogICAgICAgICBpZiBwcm94eV9wYXNzd2Q6CiAgICAgICAgICAgICBwcm94eV9wYXNzd2QgPSB1bnF1b3RlKHByb3h5X3Bhc3N3ZCkKQEAgLTE4NDksNyArMTg3Miw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmh0dHBfZXJyb3JfZGVmYXVsdCh1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMpCiAKICAgICBkZWYgaHR0cF9lcnJvcl9kZWZhdWx0KHNlbGYsIHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyk6Ci0gICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIElPRXJyb3IuIiIiCisgICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIE9TRXJyb3IuIiIiCiAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgcmFpc2UgSFRUUEVycm9yKHVybCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBOb25lKQogCkBAIC0xOTc2LDcgKzE5OTksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBbdHlwZSwgZGF0YV0gPSB1cmwuc3BsaXQoJywnLCAxKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2RhdGEgZXJyb3InLCAnYmFkIGRhdGEgVVJMJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2RhdGEgZXJyb3InLCAnYmFkIGRhdGEgVVJMJykKICAgICAgICAgaWYgbm90IHR5cGU6CiAgICAgICAgICAgICB0eXBlID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScKICAgICAgICAgc2VtaSA9IHR5cGUucmZpbmQoJzsnKQpAQCAtMjQyNSw3ICsyNDQ4LDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3Rvbmx5KQogICAgICAgICAgICAgICAgICAgICBob3N0SVAgPSBpcDJudW0oaG9zdElQKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGJhc2UgPSBpcDJudW0obS5ncm91cCgxKSkKQEAgLTI1MTEsNyArMjUzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwcm94aWVzWydodHRwcyddID0gJ2h0dHBzOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2Z0cCddID0gJ2Z0cDovLyVzJyAlIHByb3h5U2VydmVyCiAgICAgICAgICAgICBpbnRlcm5ldFNldHRpbmdzLkNsb3NlKCkKLSAgICAgICAgZXhjZXB0IChXaW5kb3dzRXJyb3IsIFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgICMgRWl0aGVyIHJlZ2lzdHJ5IGtleSBub3QgZm91bmQgZXRjLCBvciB0aGUgdmFsdWUgaW4gYW4KICAgICAgICAgICAgICMgdW5leHBlY3RlZCBmb3JtYXQuCiAgICAgICAgICAgICAjIHByb3hpZXMgYWxyZWFkeSBzZXQgdXAgdG8gYmUgZW1wdHkgc28gbm90aGluZyB0byBkbwpAQCAtMjU0MSw3ICsyNTY0LDcgQEAKICAgICAgICAgICAgIHByb3h5T3ZlcnJpZGUgPSBzdHIod2lucmVnLlF1ZXJ5VmFsdWVFeChpbnRlcm5ldFNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJveHlPdmVycmlkZScpWzBdKQogICAgICAgICAgICAgIyBeXl5eIFJldHVybmVkIGFzIFVuaWNvZGUgYnV0IHByb2JsZW1zIGlmIG5vdCBjb252ZXJ0ZWQgdG8gQVNDSUkKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICBpZiBub3QgcHJveHlFbmFibGUgb3Igbm90IHByb3h5T3ZlcnJpZGU6CiAgICAgICAgICAgICByZXR1cm4gMApAQCAtMjU1MiwxMyArMjU3NSwxMyBAQAogICAgICAgICAgICAgYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBhZGRyICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoYWRkcikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZxZG4gPSBzb2NrZXQuZ2V0ZnFkbihyYXdIb3N0KQogICAgICAgICAgICAgaWYgZnFkbiAhPSByYXdIb3N0OgogICAgICAgICAgICAgICAgIGhvc3QuYXBwZW5kKGZxZG4pCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIG1ha2UgYSBjaGVjayB2YWx1ZSBsaXN0IGZyb20gdGhlIHJlZ2lzdHJ5IGVudHJ5OiByZXBsYWNlIHRoZQogICAgICAgICAjICc8bG9jYWw+JyBzdHJpbmcgYnkgdGhlIGxvY2FsaG9zdCBlbnRyeSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKZGlmZiAtLWdpdCBhL0xpYi91dWlkLnB5IGIvTGliL3V1aWQucHkKaW5kZXggZDVjMzE2MC4uMzg1ZmI5YiAxMDA2NDQKLS0tIGEvTGliL3V1aWQucHkKKysrIGIvTGliL3V1aWQucHkKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICAgICAgaWYgbGVuKGJ5dGVzKSAhPSAxNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdieXRlcyBpcyBub3QgYSAxNi1jaGFyIHN0cmluZycpCiAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShieXRlcywgYnl0ZXNfKSwgcmVwcihieXRlcykKLSAgICAgICAgICAgIGludCA9IGludF8oKCclMDJ4JyoxNikgJSB0dXBsZShieXRlcyksIDE2KQorICAgICAgICAgICAgaW50ID0gaW50Xy5mcm9tX2J5dGVzKGJ5dGVzLCBieXRlb3JkZXI9J2JpZycpCiAgICAgICAgIGlmIGZpZWxkcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIGxlbihmaWVsZHMpICE9IDY6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZmllbGRzIGlzIG5vdCBhIDYtdHVwbGUnKQpAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGFzaGVzLiBUaGVzZSBzaG91bGQgYmUgaWdub3JlZCBpbiBmYXZvciBvZiBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhbCBNQUMgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgcmV0dXJuIE5vbmUKIApAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4ob3MucGF0aC5qb2luKGRpciwgJ2lwY29uZmlnJykgKyAnIC9hbGwnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKZGlmZiAtLWdpdCBhL0xpYi92ZW52L19faW5pdF9fLnB5IGIvTGliL3ZlbnYvX19pbml0X18ucHkKaW5kZXggMzYwNjM3MC4uM2I1ZjVmYSAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvX19pbml0X18ucHkKKysrIGIvTGliL3ZlbnYvX19pbml0X18ucHkKQEAgLTI0LDEwICsyNCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAtLXVwZ3JhZGUgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAtLXdpdGhvdXQtcGlwICAgICAgICAgU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KQogIiIiCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IHR5cGVzCkBAIC01NiwxNCArNTksMTcgQEAKICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgOnBhcmFtIHVwZ3JhZGU6IElmIFRydWUsIHVwZ3JhZGUgYW4gZXhpc3RpbmcgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICA6cGFyYW0gd2l0aF9waXA6IElmIFRydWUsIGVuc3VyZSBwaXAgaXMgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudAogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UpOgorICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSwgd2l0aF9waXA9RmFsc2UpOgogICAgICAgICBzZWxmLnN5c3RlbV9zaXRlX3BhY2thZ2VzID0gc3lzdGVtX3NpdGVfcGFja2FnZXMKICAgICAgICAgc2VsZi5jbGVhciA9IGNsZWFyCiAgICAgICAgIHNlbGYuc3ltbGlua3MgPSBzeW1saW5rcwogICAgICAgICBzZWxmLnVwZ3JhZGUgPSB1cGdyYWRlCisgICAgICAgIHNlbGYud2l0aF9waXAgPSB3aXRoX3BpcAogCiAgICAgZGVmIGNyZWF0ZShzZWxmLCBlbnZfZGlyKToKICAgICAgICAgIiIiCkBAIC03NiwxMCArODIsMjAgQEAKICAgICAgICAgY29udGV4dCA9IHNlbGYuZW5zdXJlX2RpcmVjdG9yaWVzKGVudl9kaXIpCiAgICAgICAgIHNlbGYuY3JlYXRlX2NvbmZpZ3VyYXRpb24oY29udGV4dCkKICAgICAgICAgc2VsZi5zZXR1cF9weXRob24oY29udGV4dCkKKyAgICAgICAgaWYgc2VsZi53aXRoX3BpcDoKKyAgICAgICAgICAgIHNlbGYuX3NldHVwX3BpcChjb250ZXh0KQogICAgICAgICBpZiBub3Qgc2VsZi51cGdyYWRlOgogICAgICAgICAgICAgc2VsZi5zZXR1cF9zY3JpcHRzKGNvbnRleHQpCiAgICAgICAgICAgICBzZWxmLnBvc3Rfc2V0dXAoY29udGV4dCkKIAorICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmbikKKwogICAgIGRlZiBlbnN1cmVfZGlyZWN0b3JpZXMoc2VsZiwgZW52X2Rpcik6CiAgICAgICAgICIiIgogICAgICAgICBDcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgZW52aXJvbm1lbnQuCkBAIC05MSwxMSArMTA3LDExIEBACiAgICAgICAgIGRlZiBjcmVhdGVfaWZfbmVlZGVkKGQpOgogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGQpOgogICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNsaW5rKGQpIG9yIG9zLnBhdGguaXNmaWxlKGQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5ICVyJyAlIGQpCiAKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZW52X2RpcikgYW5kIG5vdCAoc2VsZi5jbGVhciBvciBzZWxmLnVwZ3JhZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRGlyZWN0b3J5IGV4aXN0czogJXMnICUgZW52X2RpcikKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZW52X2RpcikgYW5kIHNlbGYuY2xlYXI6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGVudl9kaXIpCisgICAgICAgICAgICBzZWxmLmNsZWFyX2RpcmVjdG9yeShlbnZfZGlyKQogICAgICAgICBjb250ZXh0ID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKICAgICAgICAgY29udGV4dC5lbnZfZGlyID0gZW52X2RpcgogICAgICAgICBjb250ZXh0LmVudl9uYW1lID0gb3MucGF0aC5zcGxpdChlbnZfZGlyKVsxXQpAQCAtMjE2LDYgKzIzMiwxNSBAQAogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKKyAgICBkZWYgX3NldHVwX3BpcChzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiSW5zdGFsbHMgb3IgdXBncmFkZXMgcGlwIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCIiIgorICAgICAgICAjIFdlIHJ1biBlbnN1cmVwaXAgaW4gaXNvbGF0ZWQgbW9kZSB0byBhdm9pZCBzaWRlIGVmZmVjdHMgZnJvbQorICAgICAgICAjIGVudmlyb25tZW50IHZhcnMsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYW55dGhpbmcgZWxzZQorICAgICAgICAjIGludGVuZGVkIGZvciB0aGUgZ2xvYmFsIFB5dGhvbiBlbnZpcm9ubWVudAorICAgICAgICBjbWQgPSBbY29udGV4dC5lbnZfZXhlLCAnLUltJywgJ2Vuc3VyZXBpcCcsICctLXVwZ3JhZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRlZmF1bHQtcGlwJ10KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisKICAgICBkZWYgc2V0dXBfc2NyaXB0cyhzZWxmLCBjb250ZXh0KToKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB1cCBzY3JpcHRzIGludG8gdGhlIGNyZWF0ZWQgZW52aXJvbm1lbnQgZnJvbSBhIGRpcmVjdG9yeS4KQEAgLTI1Myw3ICsyNzgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAgICAiIiIKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0RJUl9fJywgY29udGV4dC5lbnZfZGlyKQotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5wcm9tcHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LmVudl9uYW1lKQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFJPTVBUX18nLCBjb250ZXh0LnByb21wdCkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0JJTl9OQU1FX18nLCBjb250ZXh0LmJpbl9uYW1lKQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFlUSE9OX18nLCBjb250ZXh0LmVudl9leGUpCiAgICAgICAgIHJldHVybiB0ZXh0CkBAIC0zMDgsNyArMzM0LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHltb2RlKHNyY2ZpbGUsIGRzdGZpbGUpCiAKIAotZGVmIGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlKToKK2RlZiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgd2l0aF9waXA9RmFsc2UpOgogICAgICIiIgogICAgIENyZWF0ZSBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gYSBkaXJlY3RvcnkuCiAKQEAgLTMyNCw5ICszNTEsMTEgQEAKICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1zeXN0ZW1fc2l0ZV9wYWNrYWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9Y2xlYXIsIHN5bWxpbmtzPXN5bWxpbmtzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPWNsZWFyLCBzeW1saW5rcz1zeW1saW5rcywgd2l0aF9waXA9d2l0aF9waXApCiAgICAgYnVpbGRlci5jcmVhdGUoZW52X2RpcikKIAogZGVmIG1haW4oYXJncz1Ob25lKToKQEAgLTM2MCwyOCArMzg5LDQwIEBACiAgICAgICAgICAgICB1c2Vfc3ltbGlua3MgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gVHJ1ZQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nc3ltbGlua3MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc3ltbGlua3MnLCBkZWZhdWx0PXVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHN5bWxpbmtzIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tY29waWVzJywgZGVmYXVsdD1ub3QgdXNlX3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2UgY29waWVzIHJhdGhlciB0aGFuIHN5bWxpbmtzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVuIHdoZW4gc3ltbGlua3MgYXJlIHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jbGVhcicsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY2xlYXInLCBoZWxwPSdEZWxldGUgdGhlIGVudmlyb25tZW50ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSBpZiBpdCBhbHJlYWR5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cy4gSWYgbm90IHNwZWNpZmllZCBhbmQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGRpcmVjdG9yeSBleGlzdHMsIGFuIGVycm9yJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGlzIHJhaXNlZC4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmIGl0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzLCBiZWZvcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgY3JlYXRpb24uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11cGdyYWRlJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1cGdyYWRlJywgaGVscD0nVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13aXRob3V0LXBpcCcsIGRlc3Q9J3dpdGhfcGlwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpcnR1YWwgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5IGRlZmF1bHQpJykKICAgICAgICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMudXBncmFkZSBhbmQgb3B0aW9ucy5jbGVhcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3lvdSBjYW5ub3Qgc3VwcGx5IC0tdXBncmFkZSBhbmQgLS1jbGVhciB0b2dldGhlci4nKQogICAgICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1vcHRpb25zLnN5c3RlbV9zaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1vcHRpb25zLmNsZWFyLCBzeW1saW5rcz1vcHRpb25zLnN5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlPW9wdGlvbnMudXBncmFkZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9b3B0aW9ucy5jbGVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9b3B0aW9ucy5zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZT1vcHRpb25zLnVwZ3JhZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfcGlwPW9wdGlvbnMud2l0aF9waXApCiAgICAgICAgIGZvciBkIGluIG9wdGlvbnMuZGlyczoKICAgICAgICAgICAgIGJ1aWxkZXIuY3JlYXRlKGQpCiAKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKaW5kZXggMWM1ZWY5OC4uYjE1ZGVjYiAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKQEAgLTEsMjUgKzEsNDAgQEAKK2Z1bmN0aW9uIGdsb2JhbDpkZWFjdGl2YXRlIChbc3dpdGNoXSROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAjIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCisgICAgaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCisgICAgfQ0KKw0KKyAgICBpZiAoISROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246ZGVhY3RpdmF0ZQ0KKyAgICB9DQorfQ0KKw0KK2RlYWN0aXZhdGUgLW5vbmRlc3RydWN0aXZlDQorCiAkZW52OlZJUlRVQUxfRU5WPSJfX1ZFTlZfRElSX18iDQogDQotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KICMgU2V0IHRoZSBwcm9tcHQgdG8gaW5jbHVkZSB0aGUgZW52IG5hbWUNCisjIE1ha2Ugc3VyZSBfT0xEX1ZJUlRVQUxfUFJPTVBUIGlzIGdsb2JhbA0KK2Z1bmN0aW9uIGdsb2JhbDpfT0xEX1ZJUlRVQUxfUFJPTVBUIHsiIn0NCiBjb3B5LWl0ZW0gZnVuY3Rpb246cHJvbXB0IGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi1mdW5jdGlvbiBwcm9tcHQgew0KLSAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnW19fVkVOVl9OQU1FX19dJw0KK2Z1bmN0aW9uIGdsb2JhbDpwcm9tcHQgew0KKyAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnX19WRU5WX1BST01QVF9fJw0KICAgICBfT0xEX1ZJUlRVQUxfUFJPTVBUDQogfQ0KIA0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDFlOTZiLi4wMDAwMDAwCi0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCi0gICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQotfQ0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0IGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKaW5kZXggM2NlYmUyNi4uOWVhYjE0NyAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKQEAgLTE0LDcgKzE0LDcgQEAKICkNCiANCiBzZXQgIl9PTERfVklSVFVBTF9QUk9NUFQ9JVBST01QVCUiDQotc2V0ICJQUk9NUFQ9X19WRU5WX05BTUVfXyVQUk9NUFQlIg0KK3NldCAiUFJPTVBUPV9fVkVOVl9QUk9NUFRfXyVQUk9NUFQlIg0KIA0KIGlmIGRlZmluZWQgUFlUSE9OSE9NRSAoDQogICAgIHNldCAiX09MRF9WSVJUVUFMX1BZVEhPTkhPTUU9JVBZVEhPTkhPTUUlIg0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCmluZGV4IGMyNDE0NTAuLjdiYmZmZDkgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQpAQCAtNTQsOCArNTQsOCBAQAogCiBpZiBbIC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiIF0gOyB0aGVuCiAgICAgX09MRF9WSVJUVUFMX1BTMT0iJFBTMSIKLSAgICBpZiBbICJ4X19WRU5WX05BTUVfXyIgIT0geCBdIDsgdGhlbgotCVBTMT0iX19WRU5WX05BTUVfXyRQUzEiCisgICAgaWYgWyAieF9fVkVOVl9QUk9NUFRfXyIgIT0geCBdIDsgdGhlbgorCVBTMT0iX19WRU5WX1BST01QVF9fJFBTMSIKICAgICBlbHNlCiAgICAgaWYgWyAiYGJhc2VuYW1lIFwiJFZJUlRVQUxfRU5WXCJgIiA9ICJfXyIgXSA7IHRoZW4KICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDc5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApAQCAtMCwwICsxLDM3IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAic291cmNlIGJpbi9hY3RpdmF0ZS5jc2giICpmcm9tIGNzaCouCisjIFlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5LgorIyBDcmVhdGVkIGJ5IERhdmlkZSBEaSBCbGFzaSA8ZGF2aWRlZGJAZ21haWwuY29tPi4KKyMgUG9ydGVkIHRvIFB5dGhvbiAzLjMgdmVudiBieSBBbmRyZXcgU3ZldGxvdiA8YW5kcmV3LnN2ZXRsb3ZAZ21haWwuY29tPgorCithbGlhcyBkZWFjdGl2YXRlICd0ZXN0ICQ/X09MRF9WSVJUVUFMX1BBVEggIT0gMCAmJiBzZXRlbnYgUEFUSCAiJF9PTERfVklSVFVBTF9QQVRIIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUEFUSDsgcmVoYXNoOyB0ZXN0ICQ/X09MRF9WSVJUVUFMX1BST01QVCAhPSAwICYmIHNldCBwcm9tcHQ9IiRfT0xEX1ZJUlRVQUxfUFJPTVBUIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUFJPTVBUOyB1bnNldGVudiBWSVJUVUFMX0VOVjsgdGVzdCAiXCE6KiIgIT0gIm5vbmRlc3RydWN0aXZlIiAmJiB1bmFsaWFzIGRlYWN0aXZhdGUnCisKKyMgVW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMuCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldGVudiBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgX09MRF9WSVJUVUFMX1BBVEg9IiRQQVRIIgorc2V0ZW52IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXzokUEFUSCIKKworCitzZXQgX09MRF9WSVJUVUFMX1BST01QVD0iJHByb21wdCIKKworaWYgKCEgIiQ/VklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiKSB0aGVuCisgICAgaWYgKCJfX1ZFTlZfTkFNRV9fIiAhPSAiIikgdGhlbgorICAgICAgICBzZXQgZW52X25hbWUgPSAiX19WRU5WX05BTUVfXyIKKyAgICBlbHNlCisgICAgICAgIGlmIChgYmFzZW5hbWUgIlZJUlRVQUxfRU5WImAgPT0gIl9fIikgdGhlbgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lIFxgZGlybmFtZSAiJFZJUlRVQUxfRU5WIlxgYAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgIiRWSVJUVUFMX0VOViJgCisgICAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICBzZXQgcHJvbXB0ID0gIlskZW52X25hbWVdICRwcm9tcHQiCisgICAgdW5zZXQgZW52X25hbWUKK2VuZGlmCisKK2FsaWFzIHB5ZG9jIHB5dGhvbiAtbSBweWRvYworCityZWhhc2gKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTM5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICIuIGJpbi9hY3RpdmF0ZS5maXNoIiAqZnJvbSBmaXNoKiAoaHR0cDovL2Zpc2hzaGVsbC5vcmcpCisjIHlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5CisKK2Z1bmN0aW9uIGRlYWN0aXZhdGUgIC1kICJFeGl0IHZpcnR1YWxlbnYgYW5kIHJldHVybiB0byBub3JtYWwgc2hlbGwgZW52aXJvbm1lbnQiCisgICAgIyByZXNldCBvbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QQVRIIgorICAgICAgICBzZXQgLWd4IFBBVEggJF9PTERfVklSVFVBTF9QQVRICisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUEFUSAorICAgIGVuZAorICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSIKKyAgICAgICAgc2V0IC1neCBQWVRIT05IT01FICRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICBlbmQKKworICAgIGlmIHRlc3QgLW4gIiRfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFIgorICAgICAgICBmdW5jdGlvbnMgLWUgZmlzaF9wcm9tcHQKKyAgICAgICAgc2V0IC1lIF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUKKyAgICAgICAgLiAoIGJlZ2luCisgICAgICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBmaXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBfb2xkX2Zpc2hfcHJvbXB0CisgICAgICAgICAgICBlbmQgfCBwc3ViICkKKyAgICAgICAgZnVuY3Rpb25zIC1lIF9vbGRfZmlzaF9wcm9tcHQKKyAgICBlbmQKKworICAgIHNldCAtZSBWSVJUVUFMX0VOVgorICAgIGlmIHRlc3QgIiRhcmd2WzFdIiAhPSAibm9uZGVzdHJ1Y3RpdmUiCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCEKKyAgICAgICAgZnVuY3Rpb25zIC1lIGRlYWN0aXZhdGUKKyAgICBlbmQKK2VuZAorCisjIHVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldCAtZ3ggVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IC1neCBfT0xEX1ZJUlRVQUxfUEFUSCAkUEFUSAorc2V0IC1neCBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX18iICRQQVRICisKKyMgdW5zZXQgUFlUSE9OSE9NRSBpZiBzZXQKK2lmIHNldCAtcSBQWVRIT05IT01FCisgICAgc2V0IC1neCBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSAkUFlUSE9OSE9NRQorICAgIHNldCAtZSBQWVRIT05IT01FCitlbmQKKworaWYgdGVzdCAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIgorICAgICMgZmlzaCB1c2VzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnYgdmFyIHRvIGdlbmVyYXRlIHRoZSBwcm9tcHQuCisKKyAgICAjIHNhdmUgdGhlIGN1cnJlbnQgZmlzaF9wcm9tcHQgZnVuY3Rpb24gYXMgdGhlIGZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAuICggYmVnaW4KKyAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgZnVuY3Rpb25zIGZpc2hfcHJvbXB0CisgICAgICAgIGVuZCB8IHBzdWIgKQorCisgICAgIyB3aXRoIHRoZSBvcmlnaW5hbCBwcm9tcHQgZnVuY3Rpb24gcmVuYW1lZCwgd2UgY2FuIG92ZXJyaWRlIHdpdGggb3VyIG93bi4KKyAgICBmdW5jdGlvbiBmaXNoX3Byb21wdAorICAgICAgICAjIFByb21wdCBvdmVycmlkZT8KKyAgICAgICAgaWYgdGVzdCAtbiAiX19WRU5WX1BST01QVF9fIgorICAgICAgICAgICAgcHJpbnRmICIlcyVzJXMiICJfX1ZFTlZfUFJPTVBUX18iIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKyAgICAgICAgIyAuLi5PdGhlcndpc2UsIHByZXBlbmQgZW52CisgICAgICAgIHNldCAtbCBfY2hlY2tiYXNlIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikKKyAgICAgICAgaWYgdGVzdCAkX2NoZWNrYmFzZSA9ICJfXyIKKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHByaW50ZiAiJXNbJXNdJXMgJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lIChkaXJuYW1lICIkVklSVFVBTF9FTlYiKSkgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYgIiVzKCVzKSVzJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgc2V0IC1neCBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFICIkVklSVFVBTF9FTlYiCitlbmQKZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBlZGJiYjVlLi5hNDI3ZTM1IDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC0xLDkgKzEsNSBAQAogIiIiUHl0aG9uIHBhcnQgb2YgdGhlIHdhcm5pbmdzIHN1YnN5c3RlbS4iIiIKIAotIyBOb3RlOiBmdW5jdGlvbiBsZXZlbCBpbXBvcnRzIHNob3VsZCAqbm90KiBiZSB1c2VkCi0jIGluIHRoaXMgbW9kdWxlIGFzIGl0IG1heSBjYXVzZSBpbXBvcnQgbG9jayBkZWFkbG9jay4KLSMgU2VlIGJ1ZyA2ODM2NTguCi1pbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgc3lzCiAKIF9fYWxsX18gPSBbIndhcm4iLCAic2hvd3dhcm5pbmciLCAiZm9ybWF0d2FybmluZyIsICJmaWx0ZXJ3YXJuaW5ncyIsCkBAIC0xNiwxMSArMTIsMTIgQEAKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICB0cnk6CiAgICAgICAgIGZpbGUud3JpdGUoZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZSkpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyB0aGUgZmlsZSAocHJvYmFibHkgc3RkZXJyKSBpcyBpbnZhbGlkIC0gdGhpcyB3YXJuaW5nIGdldHMgbG9zdC4KIAogZGVmIGZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmU9Tm9uZSk6CiAgICAgIiIiRnVuY3Rpb24gdG8gZm9ybWF0IGEgd2FybmluZyB0aGUgc3RhbmRhcmQgd2F5LiIiIgorICAgIGltcG9ydCBsaW5lY2FjaGUKICAgICBzID0gICIlczolczogJXM6ICVzXG4iICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNhdGVnb3J5Ll9fbmFtZV9fLCBtZXNzYWdlKQogICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKSBpZiBsaW5lIGlzIE5vbmUgZWxzZSBsaW5lCiAgICAgaWYgbGluZToKQEAgLTIzMyw2ICsyMzAsNyBAQAogCiAgICAgIyBQcmltZSB0aGUgbGluZWNhY2hlIGZvciBmb3JtYXR0aW5nLCBpbiBjYXNlIHRoZQogICAgICMgImZpbGUiIGlzIGFjdHVhbGx5IGluIGEgemlwZmlsZSBvciBzb21ldGhpbmcuCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpCiAKICAgICBpZiBhY3Rpb24gPT0gImVycm9yIjoKZGlmZiAtLWdpdCBhL0xpYi93YXZlLnB5IGIvTGliL3dhdmUucHkKaW5kZXggNGEyMjM0NS4uYjU2Mzk1ZSAxMDA2NDQKLS0tIGEvTGliL3dhdmUucHkKKysrIGIvTGliL3dhdmUucHkKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBmb3IgbGluZWFyIHNhbXBsZXMpCiAgICAgICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBsaW5lYXIgc2FtcGxlcykKLSAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgICAgICBnZXRtYXJrZXJzKCkgICAgLS0gcmV0dXJucyBOb25lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIGFpZmMgbW9kdWxlKQpAQCAtODIsMTUgKzgyLDE0IEBACiAKIF9hcnJheV9mbXRzID0gTm9uZSwgJ2InLCAnaCcsIE5vbmUsICdpJwogCitpbXBvcnQgYXVkaW9vcAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogZnJvbSBjaHVuayBpbXBvcnQgQ2h1bmsKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKIAotZGVmIF9ieXRlc3dhcDMoZGF0YSk6Ci0gICAgYmEgPSBieXRlYXJyYXkoZGF0YSkKLSAgICBiYVs6OjNdID0gZGF0YVsyOjozXQotICAgIGJhWzI6OjNdID0gZGF0YVs6OjNdCi0gICAgcmV0dXJuIGJ5dGVzKGJhKQorX3dhdmVfcGFyYW1zID0gbmFtZWR0dXBsZSgnX3dhdmVfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKIAogY2xhc3MgV2F2ZV9yZWFkOgogICAgICIiIlZhcmlhYmxlcyB1c2VkIGluIHRoaXMgY2xhc3M6CkBAIC0xNjksNiArMTY4LDEzIEBACiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICAjCiAgICAgIyBVc2VyIHZpc2libGUgbWV0aG9kcy4KICAgICAjCkBAIC0yMDcsOSArMjEzLDkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbXBuYW1lCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfd2F2ZV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCkBAIC0yMzIsMjkgKzIzOCw5IEBACiAgICAgICAgICAgICBzZWxmLl9kYXRhX3NlZWtfbmVlZGVkID0gMAogICAgICAgICBpZiBuZnJhbWVzID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYicnCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHkgdGhlIGZyb21maWxlKCkgbWV0aG9kIGRvZXMgbm90IHRha2UKLSAgICAgICAgICAgICMgc29tZXRoaW5nIHRoYXQgb25seSBsb29rcyBsaWtlIGEgZmlsZSBvYmplY3QsIHNvCi0gICAgICAgICAgICAjIHdlIGhhdmUgdG8gcmVhY2ggaW50byB0aGUgaW5uYXJkcyBvZiB0aGUgY2h1bmsgb2JqZWN0Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGNodW5rID0gc2VsZi5fZGF0YV9jaHVuawotICAgICAgICAgICAgZGF0YSA9IGFycmF5LmFycmF5KF9hcnJheV9mbXRzW3NlbGYuX3NhbXB3aWR0aF0pCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIG5pdGVtcyA9IG5mcmFtZXMgKiBzZWxmLl9uY2hhbm5lbHMKLSAgICAgICAgICAgIGlmIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aCA+IGNodW5rLmNodW5rc2l6ZSAtIGNodW5rLnNpemVfcmVhZDoKLSAgICAgICAgICAgICAgICBuaXRlbXMgPSAoY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkKSAvLyBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuZnJvbWZpbGUoY2h1bmsuZmlsZS5maWxlLCBuaXRlbXMpCi0gICAgICAgICAgICAjICJ0ZWxsIiBkYXRhIGNodW5rIGhvdyBtdWNoIHdhcyByZWFkCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgICMgZG8gdGhlIHNhbWUgZm9yIHRoZSBvdXRlcm1vc3QgY2h1bmsKLSAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZmlsZQotICAgICAgICAgICAgY2h1bmsuc2l6ZV9yZWFkID0gY2h1bmsuc2l6ZV9yZWFkICsgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBkYXRhLmJ5dGVzd2FwKCkKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGFfY2h1bmsucmVhZChuZnJhbWVzICogc2VsZi5fZnJhbWVzaXplKQotICAgICAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoID09IDMgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IF9ieXRlc3dhcDMoZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGFfY2h1bmsucmVhZChuZnJhbWVzICogc2VsZi5fZnJhbWVzaXplKQorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggIT0gMSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKKyAgICAgICAgICAgIGRhdGEgPSBhdWRpb29wLmJ5dGVzd2FwKGRhdGEsIHNlbGYuX3NhbXB3aWR0aCkKICAgICAgICAgaWYgc2VsZi5fY29udmVydCBhbmQgZGF0YToKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCiAgICAgICAgIHNlbGYuX3NvdW5kcG9zID0gc2VsZi5fc291bmRwb3MgKyBsZW4oZGF0YSkgLy8gKHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCkKQEAgLTMyOCw2ICszMTQsMTIgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICAjCiAgICAgIyBVc2VyIHZpc2libGUgbWV0aG9kcy4KICAgICAjCkBAIC00MDIsOCArMzk0LDggQEAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fbmNoYW5uZWxzIG9yIG5vdCBzZWxmLl9zYW1wd2lkdGggb3Igbm90IHNlbGYuX2ZyYW1lcmF0ZToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdub3QgYWxsIHBhcmFtZXRlcnMgc2V0JykKLSAgICAgICAgcmV0dXJuIHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsIFwKLSAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lCisgICAgICAgIHJldHVybiBfd2F2ZV9wYXJhbXMoc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwKKyAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIHJhaXNlIEVycm9yKCdzZXRtYXJrKCkgbm90IHN1cHBvcnRlZCcpCkBAIC00MTgsMjQgKzQxMCwxNiBAQAogICAgICAgICByZXR1cm4gc2VsZi5fbmZyYW1lc3dyaXR0ZW4KIAogICAgIGRlZiB3cml0ZWZyYW1lc3JhdyhzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGRhdGEpLmNhc3QoJ0InKQogICAgICAgICBzZWxmLl9lbnN1cmVfaGVhZGVyX3dyaXR0ZW4obGVuKGRhdGEpKQogICAgICAgICBuZnJhbWVzID0gbGVuKGRhdGEpIC8vIChzZWxmLl9zYW1wd2lkdGggKiBzZWxmLl9uY2hhbm5lbHMpCiAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnQ6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29udmVydChkYXRhKQotICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggaW4gKDIsIDQpIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgICAgICAgICBkYXRhID0gYQotICAgICAgICAgICAgYXNzZXJ0IGRhdGEuaXRlbXNpemUgPT0gc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBkYXRhLmJ5dGVzd2FwKCkKLSAgICAgICAgICAgIGRhdGEudG9maWxlKHNlbGYuX2ZpbGUpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQotICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShkYXRhKQotICAgICAgICAgICAgc2VsZi5fZGF0YXdyaXR0ZW4gPSBzZWxmLl9kYXRhd3JpdHRlbiArIGxlbihkYXRhKQorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggIT0gMSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKKyAgICAgICAgICAgIGRhdGEgPSBhdWRpb29wLmJ5dGVzd2FwKGRhdGEsIHNlbGYuX3NhbXB3aWR0aCkKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShkYXRhKQorICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiArPSBsZW4oZGF0YSkKICAgICAgICAgc2VsZi5fbmZyYW1lc3dyaXR0ZW4gPSBzZWxmLl9uZnJhbWVzd3JpdHRlbiArIG5mcmFtZXMKIAogICAgIGRlZiB3cml0ZWZyYW1lcyhzZWxmLCBkYXRhKToKQEAgLTQ3NiwxNCArNDYwLDE4IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9uZnJhbWVzOgogICAgICAgICAgICAgc2VsZi5fbmZyYW1lcyA9IGluaXRsZW5ndGggLy8gKHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCkKICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCA9IHNlbGYuX25mcmFtZXMgKiBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBOb25lCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxMNHM0c0xISExMSEg0cycsCiAgICAgICAgICAgICAzNiArIHNlbGYuX2RhdGFsZW5ndGgsIGInV0FWRScsIGInZm10ICcsIDE2LAogICAgICAgICAgICAgV0FWRV9GT1JNQVRfUENNLCBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX2ZyYW1lcmF0ZSwKICAgICAgICAgICAgIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX2ZyYW1lcmF0ZSAqIHNlbGYuX3NhbXB3aWR0aCwKICAgICAgICAgICAgIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCwKICAgICAgICAgICAgIHNlbGYuX3NhbXB3aWR0aCAqIDgsIGInZGF0YScpKQotICAgICAgICBzZWxmLl9kYXRhX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBpZiBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kYXRhX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cnVjdC5wYWNrKCc8TCcsIHNlbGYuX2RhdGFsZW5ndGgpKQogICAgICAgICBzZWxmLl9oZWFkZXJ3cml0dGVuID0gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvd2Vha3JlZi5weSBiL0xpYi93ZWFrcmVmLnB5CmluZGV4IGZjYjZiNzQuLmY2YTQwY2EgMTAwNjQ0Ci0tLSBhL0xpYi93ZWFrcmVmLnB5CisrKyBiL0xpYi93ZWFrcmVmLnB5CkBAIC0yMSwxMyArMjEsNjkgQEAKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQsIF9JdGVyYXRpb25HdWFyZAogCiBpbXBvcnQgY29sbGVjdGlvbnMgICMgSW1wb3J0IGFmdGVyIF93ZWFrcmVmIHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydC4KK2ltcG9ydCBzeXMKK2ltcG9ydCBpdGVydG9vbHMKIAogUHJveHlUeXBlcyA9IChQcm94eVR5cGUsIENhbGxhYmxlUHJveHlUeXBlKQogCiBfX2FsbF9fID0gWyJyZWYiLCAicHJveHkiLCAiZ2V0d2Vha3JlZmNvdW50IiwgImdldHdlYWtyZWZzIiwKICAgICAgICAgICAgIldlYWtLZXlEaWN0aW9uYXJ5IiwgIlJlZmVyZW5jZVR5cGUiLCAiUHJveHlUeXBlIiwKICAgICAgICAgICAgIkNhbGxhYmxlUHJveHlUeXBlIiwgIlByb3h5VHlwZXMiLCAiV2Vha1ZhbHVlRGljdGlvbmFyeSIsCi0gICAgICAgICAgICJXZWFrU2V0Il0KKyAgICAgICAgICAgIldlYWtTZXQiLCAiV2Vha01ldGhvZCIsICJmaW5hbGl6ZSJdCisKKworY2xhc3MgV2Vha01ldGhvZChyZWYpOgorICAgICIiIgorICAgIEEgY3VzdG9tIGB3ZWFrcmVmLnJlZmAgc3ViY2xhc3Mgd2hpY2ggc2ltdWxhdGVzIGEgd2VhayByZWZlcmVuY2UgdG8KKyAgICBhIGJvdW5kIG1ldGhvZCwgd29ya2luZyBhcm91bmQgdGhlIGxpZmV0aW1lIHByb2JsZW0gb2YgYm91bmQgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICJfZnVuY19yZWYiLCAiX21ldGhfdHlwZSIsICJfYWxpdmUiLCAiX193ZWFrcmVmX18iCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG1ldGgsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBtZXRoLl9fc2VsZl9fCisgICAgICAgICAgICBmdW5jID0gbWV0aC5fX2Z1bmNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIGJvdW5kIG1ldGhvZCwgbm90IHt9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodHlwZShtZXRoKSkpIGZyb20gTm9uZQorICAgICAgICBkZWYgX2NiKGFyZyk6CisgICAgICAgICAgICAjIFRoZSBzZWxmLXdlYWtyZWYgdHJpY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGNyZWF0aW5nIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAjIGN5Y2xlLgorICAgICAgICAgICAgc2VsZiA9IHNlbGZfd3IoKQorICAgICAgICAgICAgaWYgc2VsZi5fYWxpdmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxmKQorICAgICAgICBzZWxmID0gcmVmLl9fbmV3X18oY2xzLCBvYmosIF9jYikKKyAgICAgICAgc2VsZi5fZnVuY19yZWYgPSByZWYoZnVuYywgX2NiKQorICAgICAgICBzZWxmLl9tZXRoX3R5cGUgPSB0eXBlKG1ldGgpCisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBzZWxmX3dyID0gcmVmKHNlbGYpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIG9iaiA9IHN1cGVyKCkuX19jYWxsX18oKQorICAgICAgICBmdW5jID0gc2VsZi5fZnVuY19yZWYoKQorICAgICAgICBpZiBvYmogaXMgTm9uZSBvciBmdW5jIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fbWV0aF90eXBlKGZ1bmMsIG9iaikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBXZWFrTWV0aG9kKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGl2ZSBvciBub3Qgb3RoZXIuX2FsaXZlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisgICAgICAgICAgICByZXR1cm4gcmVmLl9fZXFfXyhzZWxmLCBvdGhlcikgYW5kIHNlbGYuX2Z1bmNfcmVmID09IG90aGVyLl9mdW5jX3JlZgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBXZWFrTWV0aG9kKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGl2ZSBvciBub3Qgb3RoZXIuX2FsaXZlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmIGlzIG5vdCBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHJlZi5fX25lX18oc2VsZiwgb3RoZXIpIG9yIHNlbGYuX2Z1bmNfcmVmICE9IG90aGVyLl9mdW5jX3JlZgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgX19oYXNoX18gPSByZWYuX19oYXNoX18KIAogCiBjbGFzcyBXZWFrVmFsdWVEaWN0aW9uYXJ5KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKQEAgLTE1Myw4ICsyMDksNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICB3aXRoIF9JdGVyYXRpb25HdWFyZChzZWxmKToKLSAgICAgICAgICAgIGZvciB3ciBpbiBzZWxmLmRhdGEudmFsdWVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgd3IKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5kYXRhLnZhbHVlcygpCiAKICAgICBkZWYgdmFsdWVzKHNlbGYpOgogICAgICAgICB3aXRoIF9JdGVyYXRpb25HdWFyZChzZWxmKToKQEAgLTM4MywzICs0MzgsMTQwIEBACiAgICAgICAgICAgICAgICAgZFtyZWYoa2V5LCBzZWxmLl9yZW1vdmUpXSA9IHZhbHVlCiAgICAgICAgIGlmIGxlbihrd2FyZ3MpOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoa3dhcmdzKQorCisKK2NsYXNzIGZpbmFsaXplOgorICAgICIiIkNsYXNzIGZvciBmaW5hbGl6YXRpb24gb2Ygd2Vha3JlZmFibGUgb2JqZWN0cworCisgICAgZmluYWxpemUob2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpIHJldHVybnMgYSBjYWxsYWJsZSBmaW5hbGl6ZXIKKyAgICBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiBvYmogaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoZQorICAgIGZpcnN0IHRpbWUgdGhlIGZpbmFsaXplciBpcyBjYWxsZWQgaXQgZXZhbHVhdGVzIGZ1bmMoKmFyZywgKiprd2FyZ3MpCisgICAgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gQWZ0ZXIgdGhpcyB0aGUgZmluYWxpemVyIGlzIGRlYWQsIGFuZAorICAgIGNhbGxpbmcgaXQganVzdCByZXR1cm5zIE5vbmUuCisKKyAgICBXaGVuIHRoZSBwcm9ncmFtIGV4aXRzIGFueSByZW1haW5pbmcgZmluYWxpemVycyBmb3Igd2hpY2ggdGhlCisgICAgYXRleGl0IGF0dHJpYnV0ZSBpcyB0cnVlIHdpbGwgYmUgcnVuIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCisgICAgQnkgZGVmYXVsdCBhdGV4aXQgaXMgdHJ1ZS4KKyAgICAiIiIKKworICAgICMgRmluYWxpemVyIG9iamVjdHMgZG9uJ3QgaGF2ZSBhbnkgc3RhdGUgb2YgdGhlaXIgb3duLiAgVGhleSBhcmUKKyAgICAjIGp1c3QgdXNlZCBhcyBrZXlzIHRvIGxvb2t1cCBfSW5mbyBvYmplY3RzIGluIHRoZSByZWdpc3RyeS4gIFRoaXMKKyAgICAjIGVuc3VyZXMgdGhhdCB0aGV5IGNhbm5vdCBiZSBwYXJ0IG9mIGEgcmVmLWN5Y2xlLgorCisgICAgX19zbG90c19fID0gKCkKKyAgICBfcmVnaXN0cnkgPSB7fQorICAgIF9zaHV0ZG93biA9IEZhbHNlCisgICAgX2luZGV4X2l0ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAgIF9kaXJ0eSA9IEZhbHNlCisgICAgX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQgPSBGYWxzZQorCisgICAgY2xhc3MgX0luZm86CisgICAgICAgIF9fc2xvdHNfXyA9ICgid2Vha3JlZiIsICJmdW5jIiwgImFyZ3MiLCAia3dhcmdzIiwgImF0ZXhpdCIsICJpbmRleCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdDoKKyAgICAgICAgICAgICMgV2UgbWF5IHJlZ2lzdGVyIHRoZSBleGl0IGZ1bmN0aW9uIG1vcmUgdGhhbiBvbmNlIGJlY2F1c2UKKyAgICAgICAgICAgICMgb2YgYSB0aHJlYWQgcmFjZSwgYnV0IHRoYXQgaXMgaGFybWxlc3MKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLl9leGl0ZnVuYykKKyAgICAgICAgICAgIGZpbmFsaXplLl9yZWdpc3RlcmVkX3dpdGhfYXRleGl0ID0gVHJ1ZQorICAgICAgICBpbmZvID0gc2VsZi5fSW5mbygpCisgICAgICAgIGluZm8ud2Vha3JlZiA9IHJlZihvYmosIHNlbGYpCisgICAgICAgIGluZm8uZnVuYyA9IGZ1bmMKKyAgICAgICAgaW5mby5hcmdzID0gYXJncworICAgICAgICBpbmZvLmt3YXJncyA9IGt3YXJncyBvciBOb25lCisgICAgICAgIGluZm8uYXRleGl0ID0gVHJ1ZQorICAgICAgICBpbmZvLmluZGV4ID0gbmV4dChzZWxmLl9pbmRleF9pdGVyKQorICAgICAgICBzZWxmLl9yZWdpc3RyeVtzZWxmXSA9IGluZm8KKyAgICAgICAgZmluYWxpemUuX2RpcnR5ID0gVHJ1ZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIF89Tm9uZSk6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gbWFyayBhcyBkZWFkIGFuZCByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LnBvcChzZWxmLCBOb25lKQorICAgICAgICBpZiBpbmZvIGFuZCBub3Qgc2VsZi5fc2h1dGRvd246CisgICAgICAgICAgICByZXR1cm4gaW5mby5mdW5jKCppbmZvLmFyZ3MsICoqKGluZm8ua3dhcmdzIG9yIHt9KSkKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gbWFyayBhcyBkZWFkIGFuZCByZXR1cm4gKG9iaiwgZnVuYywgYXJncywga3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lIGFuZCBzZWxmLl9yZWdpc3RyeS5wb3Aoc2VsZiwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gKG9iaiwgaW5mby5mdW5jLCBpbmZvLmFyZ3MsIGluZm8ua3dhcmdzIG9yIHt9KQorCisgICAgZGVmIHBlZWsoc2VsZik6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gcmV0dXJuIChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAob2JqLCBpbmZvLmZ1bmMsIGluZm8uYXJncywgaW5mby5rd2FyZ3Mgb3Ige30pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAgICIiIldoZXRoZXIgZmluYWxpemVyIGlzIGFsaXZlIiIiCisgICAgICAgIHJldHVybiBzZWxmIGluIHNlbGYuX3JlZ2lzdHJ5CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYXRleGl0KHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIGZpbmFsaXplciBzaG91bGQgYmUgY2FsbGVkIGF0IGV4aXQiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICByZXR1cm4gYm9vbChpbmZvKSBhbmQgaW5mby5hdGV4aXQKKworICAgIEBhdGV4aXQuc2V0dGVyCisgICAgZGVmIGF0ZXhpdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgaWYgaW5mbzoKKyAgICAgICAgICAgIGluZm8uYXRleGl0ID0gYm9vbCh2YWx1ZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPCVzIG9iamVjdCBhdCAlI3g7IGRlYWQ+JyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPCVzIG9iamVjdCBhdCAlI3g7IGZvciAlciBhdCAlI3g+JyAlIFwKKyAgICAgICAgICAgICAgICAodHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHR5cGUob2JqKS5fX25hbWVfXywgaWQob2JqKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc2VsZWN0X2Zvcl9leGl0KGNscyk6CisgICAgICAgICMgUmV0dXJuIGxpdmUgZmluYWxpemVycyBtYXJrZWQgZm9yIGV4aXQsIG9sZGVzdCBmaXJzdAorICAgICAgICBMID0gWyhmLGkpIGZvciAoZixpKSBpbiBjbHMuX3JlZ2lzdHJ5Lml0ZW1zKCkgaWYgaS5hdGV4aXRdCisgICAgICAgIEwuc29ydChrZXk9bGFtYmRhIGl0ZW06aXRlbVsxXS5pbmRleCkKKyAgICAgICAgcmV0dXJuIFtmIGZvciAoZixpKSBpbiBMXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9leGl0ZnVuYyhjbHMpOgorICAgICAgICAjIEF0IHNodXRkb3duIGludm9rZSBmaW5hbGl6ZXJzIGZvciB3aGljaCBhdGV4aXQgaXMgdHJ1ZS4KKyAgICAgICAgIyBUaGlzIGlzIGNhbGxlZCBvbmNlIGFsbCBvdGhlciBub24tZGFlbW9uaWMgdGhyZWFkcyBoYXZlIGJlZW4KKyAgICAgICAgIyBqb2luZWQuCisgICAgICAgIHJlZW5hYmxlX2djID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgY2xzLl9yZWdpc3RyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgICAgICAgICAgcmVlbmFibGVfZ2MgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBOb25lCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGVuZGluZyBpcyBOb25lIG9yIGZpbmFsaXplLl9kaXJ0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBjbHMuX3NlbGVjdF9mb3JfZXhpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZS5fZGlydHkgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGVuZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGYgPSBwZW5kaW5nLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZ2MgaXMgZGlzYWJsZWQsIHNvIChhc3N1bWluZyBubyBkYWVtb25pYworICAgICAgICAgICAgICAgICAgICAgICAgIyB0aHJlYWRzKSB0aGUgZm9sbG93aW5nIGlzIHRoZSBvbmx5IGxpbmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBmdW5jdGlvbiB3aGljaCBtaWdodCB0cmlnZ2VyIGNyZWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIGEgbmV3IGZpbmFsaXplcgorICAgICAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmIG5vdCBpbiBjbHMuX3JlZ2lzdHJ5CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIHByZXZlbnQgYW55IG1vcmUgZmluYWxpemVycyBmcm9tIGV4ZWN1dGluZyBkdXJpbmcgc2h1dGRvd24KKyAgICAgICAgICAgIGZpbmFsaXplLl9zaHV0ZG93biA9IFRydWUKKyAgICAgICAgICAgIGlmIHJlZW5hYmxlX2djOgorICAgICAgICAgICAgICAgIGdjLmVuYWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvd2ViYnJvd3Nlci5weSBiL0xpYi93ZWJicm93c2VyLnB5CmluZGV4IDk0NWVkYTQuLjI3MTRiZDEgMTAwNjQ0Ci0tLSBhL0xpYi93ZWJicm93c2VyLnB5CisrKyBiL0xpYi93ZWJicm93c2VyLnB5CkBAIC01LDYgKzUsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzaGxleAoraW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHN0YXQKIGltcG9ydCBzdWJwcm9jZXNzCkBAIC04Myw3ICs4NCw3IEBACiAKICAgICAiIiIKICAgICBjbWQgPSBicm93c2VyLnNwbGl0KClbMF0KLSAgICBpZiBub3QgX2lzY29tbWFuZChjbWQpOgorICAgIGlmIG5vdCBzaHV0aWwud2hpY2goY21kKToKICAgICAgICAgcmV0dXJuIFtOb25lLCBOb25lXQogICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGNtZCkKICAgICB0cnk6CkBAIC0xMDIsMzggKzEwMyw2IEBACiAgICAgcmV0dXJuIFtOb25lLCBOb25lXQogCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gIndpbiI6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgY21kID0gY21kLmxvd2VyKCkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKSBhbmQgY21kLmVuZHN3aXRoKCgiLmV4ZSIsICIuYmF0IikpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZm9yIGV4dCBpbiAiLmV4ZSIsICIuYmF0IjoKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCArIGV4dCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi1lbHNlOgotICAgIGRlZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCk6Ci0gICAgICAgICAgICBtb2RlID0gb3Muc3RhdChjbWQpW3N0YXQuU1RfTU9ERV0KLSAgICAgICAgICAgIGlmIG1vZGUgJiBzdGF0LlNfSVhVU1Igb3IgbW9kZSAmIHN0YXQuU19JWEdSUCBvciBtb2RlICYgc3RhdC5TX0lYT1RIOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi1kZWYgX2lzY29tbWFuZChjbWQpOgotICAgICIiIlJldHVybiBUcnVlIGlmIGNtZCBpcyBleGVjdXRhYmxlIG9yIGNhbiBiZSBmb3VuZCBvbiB0aGUgZXhlY3V0YWJsZQotICAgIHNlYXJjaCBwYXRoLiIiIgotICAgIGlmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBwYXRoID0gb3MuZW52aXJvbi5nZXQoIlBBVEgiKQotICAgIGlmIG5vdCBwYXRoOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBmb3IgZCBpbiBwYXRoLnNwbGl0KG9zLnBhdGhzZXApOgotICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oZCwgY21kKQotICAgICAgICBpZiBfaXNleGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQotCi0KICMgR2VuZXJhbCBwYXJlbnQgY2xhc3NlcwogCiBjbGFzcyBCYXNlQnJvd3NlcihvYmplY3QpOgpAQCAtNDE4LDExICszODcsMTEgQEAKICAgICAgICAgICAgICMgbmVlZCB0byBQSU5HIGVhY2ggb25lIHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBsaXZlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KGZuKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gZ29vZDsgYXR0ZW1wdCB0byBjbGVhbiBpdCBvdXQsIGJ1dCBkb24ndCBmYWlsOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBzCkBAIC00NTMsMjIgKzQyMiwyMiBAQAogZGVmIHJlZ2lzdGVyX1hfYnJvd3NlcnMoKToKIAogICAgICMgdXNlIHhkZy1vcGVuIGlmIGFyb3VuZAotICAgIGlmIF9pc2NvbW1hbmQoInhkZy1vcGVuIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4ZGctb3BlbiIpOgogICAgICAgICByZWdpc3RlcigieGRnLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigieGRnLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgR05PTUUzIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJndmZzLW9wZW4iKToKKyAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImd2ZnMtb3BlbiIpOgogICAgICAgICByZWdpc3RlcigiZ3Zmcy1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImd2ZnMtb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRSBicm93c2VyCi0gICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgiZ25vbWUtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ25vbWUtb3BlbiIpOgogICAgICAgICByZWdpc3RlcigiZ25vbWUtb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJnbm9tZS1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEtERSBicm93c2VyCi0gICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImtmbWNsaWVudCIpOgorICAgIGlmICJLREVfRlVMTF9TRVNTSU9OIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImtmbWNsaWVudCIpOgogICAgICAgICByZWdpc3Rlcigia2ZtY2xpZW50IiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtmbWNsaWVudCIpKQogCi0gICAgaWYgX2lzY29tbWFuZCgieC13d3ctYnJvd3NlciIpOgorICAgIGlmIHNodXRpbC53aGljaCgieC13d3ctYnJvd3NlciIpOgogICAgICAgICByZWdpc3RlcigieC13d3ctYnJvd3NlciIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4LXd3dy1icm93c2VyIikpCiAKICAgICAjIFRoZSBNb3ppbGxhL05ldHNjYXBlIGJyb3dzZXJzCkBAIC00NzYsMzkgKzQ0NSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAibW96aWxsYS1maXJlYmlyZCIsICJmaXJlYmlyZCIsCiAgICAgICAgICAgICAgICAgICAgICJpY2V3ZWFzZWwiLCAiaWNlYXBlIiwKICAgICAgICAgICAgICAgICAgICAgInNlYW1vbmtleSIsICJtb3ppbGxhIiwgIm5ldHNjYXBlIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIE1vemlsbGEoYnJvd3NlcikpCiAKICAgICAjIEtvbnF1ZXJvci9rZm0sIHRoZSBLREUgYnJvd3Nlci4KLSAgICBpZiBfaXNjb21tYW5kKCJrZm0iKToKKyAgICBpZiBzaHV0aWwud2hpY2goImtmbSIpOgogICAgICAgICByZWdpc3Rlcigia2ZtIiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtmbSIpKQotICAgIGVsaWYgX2lzY29tbWFuZCgia29ucXVlcm9yIik6CisgICAgZWxpZiBzaHV0aWwud2hpY2goImtvbnF1ZXJvciIpOgogICAgICAgICByZWdpc3Rlcigia29ucXVlcm9yIiwgS29ucXVlcm9yLCBLb25xdWVyb3IoImtvbnF1ZXJvciIpKQogCiAgICAgIyBHbm9tZSdzIEdhbGVvbiBhbmQgRXBpcGhhbnkKICAgICBmb3IgYnJvd3NlciBpbiAoImdhbGVvbiIsICJlcGlwaGFueSIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBHYWxlb24oYnJvd3NlcikpCiAKICAgICAjIFNraXBzdG9uZSwgYW5vdGhlciBHdGsvTW96aWxsYSBiYXNlZCBicm93c2VyCi0gICAgaWYgX2lzY29tbWFuZCgic2tpcHN0b25lIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJza2lwc3RvbmUiKToKICAgICAgICAgcmVnaXN0ZXIoInNraXBzdG9uZSIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJza2lwc3RvbmUiKSkKIAogICAgICMgR29vZ2xlIENocm9tZS9DaHJvbWl1bSBicm93c2VycwogICAgIGZvciBicm93c2VyIGluICgiZ29vZ2xlLWNocm9tZSIsICJjaHJvbWUiLCAiY2hyb21pdW0iLCAiY2hyb21pdW0tYnJvd3NlciIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBDaHJvbWUoYnJvd3NlcikpCiAKICAgICAjIE9wZXJhLCBxdWl0ZSBwb3B1bGFyCi0gICAgaWYgX2lzY29tbWFuZCgib3BlcmEiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm9wZXJhIik6CiAgICAgICAgIHJlZ2lzdGVyKCJvcGVyYSIsIE5vbmUsIE9wZXJhKCJvcGVyYSIpKQogCiAgICAgIyBOZXh0LCBNb3NhaWMgLS0gb2xkIGJ1dCBzdGlsbCBpbiB1c2UuCi0gICAgaWYgX2lzY29tbWFuZCgibW9zYWljIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJtb3NhaWMiKToKICAgICAgICAgcmVnaXN0ZXIoIm1vc2FpYyIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJtb3NhaWMiKSkKIAogICAgICMgR3JhaWwsIHRoZSBQeXRob24gYnJvd3Nlci4gRG9lcyBhbnlib2R5IHN0aWxsIHVzZSBpdD8KLSAgICBpZiBfaXNjb21tYW5kKCJncmFpbCIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZ3JhaWwiKToKICAgICAgICAgcmVnaXN0ZXIoImdyYWlsIiwgR3JhaWwsIE5vbmUpCiAKICMgUHJlZmVyIFggYnJvd3NlcnMgaWYgcHJlc2VudApAQCAtNTE3LDE4ICs0ODYsMTggQEAKIAogIyBBbHNvIHRyeSBjb25zb2xlIGJyb3dzZXJzCiBpZiBvcy5lbnZpcm9uLmdldCgiVEVSTSIpOgotICAgIGlmIF9pc2NvbW1hbmQoInd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3d3ctYnJvd3NlciIpOgogICAgICAgICByZWdpc3Rlcigid3d3LWJyb3dzZXIiLCBOb25lLCBHZW5lcmljQnJvd3Nlcigid3d3LWJyb3dzZXIiKSkKICAgICAjIFRoZSBMaW5rcy9lbGlua3MgYnJvd3NlcnMgPGh0dHA6Ly9hcnRheC5rYXJsaW4ubWZmLmN1bmkuY3ovfm1pa3VsYXMvbGlua3MvPgotICAgIGlmIF9pc2NvbW1hbmQoImxpbmtzIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJsaW5rcyIpOgogICAgICAgICByZWdpc3RlcigibGlua3MiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibGlua3MiKSkKLSAgICBpZiBfaXNjb21tYW5kKCJlbGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImVsaW5rcyIpOgogICAgICAgICByZWdpc3RlcigiZWxpbmtzIiwgTm9uZSwgRWxpbmtzKCJlbGlua3MiKSkKICAgICAjIFRoZSBMeW54IGJyb3dzZXIgPGh0dHA6Ly9seW54LmlzYy5vcmcvPiwgPGh0dHA6Ly9seW54LmJyb3dzZXIub3JnLz4KLSAgICBpZiBfaXNjb21tYW5kKCJseW54Iik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJseW54Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJseW54IiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoImx5bngiKSkKICAgICAjIFRoZSB3M20gYnJvd3NlciA8aHR0cDovL3czbS5zb3VyY2Vmb3JnZS5uZXQvPgotICAgIGlmIF9pc2NvbW1hbmQoInczbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgidzNtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3M20iLCBOb25lLCBHZW5lcmljQnJvd3NlcigidzNtIikpCiAKICMKQEAgLTU0MCw3ICs1MDksNyBAQAogICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHVybCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIFtFcnJvciAyMl0gTm8gYXBwbGljYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKICAgICAgICAgICAgICAgICAjIGZpbGUgZm9yIHRoaXMgb3BlcmF0aW9uOiAnPFVSTD4nCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC01NTgsNyArNTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuZXQgRXhwbG9yZXJcXElFWFBMT1JFLkVYRSIpCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJmaXJlZm94IiwgImZpcmViaXJkIiwgInNlYW1vbmtleSIsICJtb3ppbGxhIiwKICAgICAgICAgICAgICAgICAgICAgIm5ldHNjYXBlIiwgIm9wZXJhIiwgaWV4cGxvcmUpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3Nlcihicm93c2VyKSkKIAogIwpAQCAtNjQ0LDE3ICs2MTMsNiBAQAogICAgIHJlZ2lzdGVyKCJNYWNPU1giLCBOb25lLCBNYWNPU1hPU0FTY3JpcHQoJ2RlZmF1bHQnKSwgLTEpCiAKIAotIwotIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBPUy8yCi0jCi0KLWlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gIm9zMiIgYW5kIF9pc2NvbW1hbmQoIm5ldHNjYXBlIik6Ci0gICAgX3RyeW9yZGVyID0gW10KLSAgICBfYnJvd3NlcnMgPSB7fQotICAgIHJlZ2lzdGVyKCJvczJuZXRzY2FwZSIsIE5vbmUsCi0gICAgICAgICAgICAgR2VuZXJpY0Jyb3dzZXIoWyJzdGFydCIsICJuZXRzY2FwZSIsICIlcyJdKSwgLTEpCi0KLQogIyBPSywgbm93IHRoYXQgd2Uga25vdyB3aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2Ugb3JkZXJzIGZvciBlYWNoCiAjIHBsYXRmb3JtIGFyZSwgYWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGVtIHdpdGggdGhlIEJST1dTRVIgdmFyaWFibGUuCiBpZiAiQlJPV1NFUiIgaW4gb3MuZW52aXJvbjoKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weSBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQppbmRleCBmMDc0YWI5Li44MWUyZGY3IDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKKysrIGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CkBAIC05MDUsMTEgKzkwNSw4IEBACiAgICAgICAgIGJ1aWxkZXIgPSBFeHBhdEJ1aWxkZXIoKQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKQEAgLTkzOSwxMSArOTM2LDggQEAKICAgICAgICAgYnVpbGRlciA9IEZyYWdtZW50QnVpbGRlcihjb250ZXh0KQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CmluZGV4IDZjYzFiNDQuLjczZTQ5MWUgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQpAQCAtNzEsOCArNzEsOCBAQAogIyBAcmV0dXJuIFRoZSBleHBhbmRlZCByZXNvdXJjZS4gIElmIHRoZSBwYXJzZSBtb2RlIGlzICJ4bWwiLCB0aGlzCiAjICAgIGlzIGFuIEVsZW1lbnRUcmVlIGluc3RhbmNlLiAgSWYgdGhlIHBhcnNlIG1vZGUgaXMgInRleHQiLCB0aGlzCiAjICAgIGlzIGEgVW5pY29kZSBzdHJpbmcuICBJZiB0aGUgbG9hZGVyIGZhaWxzLCBpdCBjYW4gcmV0dXJuIE5vbmUKLSMgICAgb3IgcmFpc2UgYW4gSU9FcnJvciBleGNlcHRpb24uCi0jIEB0aHJvd3MgSU9FcnJvciBJZiB0aGUgbG9hZGVyIGZhaWxzIHRvIGxvYWQgdGhlIHJlc291cmNlLgorIyAgICBvciByYWlzZSBhbiBPU0Vycm9yIGV4Y2VwdGlvbi4KKyMgQHRocm93cyBPU0Vycm9yIElmIHRoZSBsb2FkZXIgZmFpbHMgdG8gbG9hZCB0aGUgcmVzb3VyY2UuCiAKIGRlZiBkZWZhdWx0X2xvYWRlcihocmVmLCBwYXJzZSwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgaWYgcGFyc2UgPT0gInhtbCI6CkBAIC05NSw3ICs5NSw3IEBACiAjICAgICB0aGF0IGltcGxlbWVudHMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIDxiPmRlZmF1bHRfbG9hZGVyPC9iPi4KICMgQHRocm93cyBGYXRhbEluY2x1ZGVFcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gaW5jbHVkZSBhIGdpdmVuCiAjICAgICByZXNvdXJjZSwgb3IgaWYgdGhlIHRyZWUgY29udGFpbnMgbWFsZm9ybWVkIFhJbmNsdWRlIGVsZW1lbnRzLgotIyBAdGhyb3dzIElPRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgYSBnaXZlbiByZXNvdXJjZS4KKyMgQHRocm93cyBPU0Vycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGEgZ2l2ZW4gcmVzb3VyY2UuCiAKIGRlZiBpbmNsdWRlKGVsZW0sIGxvYWRlcj1Ob25lKToKICAgICBpZiBsb2FkZXIgaXMgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CmluZGV4IGU3MDE1YzcuLmQ5MTRkZGIgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQpAQCAtMTA1LDE0ICsxMDUsMTIgQEAKIGRlZiBwcmVwYXJlX3N0YXIobmV4dCwgdG9rZW4pOgogICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgotICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGVsZW0KICAgICByZXR1cm4gc2VsZWN0CiAKIGRlZiBwcmVwYXJlX3NlbGYobmV4dCwgdG9rZW4pOgogICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKLSAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgotICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICB5aWVsZCBmcm9tIHJlc3VsdAogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfZGVzY2VuZGFudChuZXh0LCB0b2tlbik6CkBAIC0xNzYsNyArMTc0LDcgQEAKICAgICAgICAgICAgICAgICBpZiBlbGVtLmdldChrZXkpID09IHZhbHVlOgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCiAgICAgICAgIHJldHVybiBzZWxlY3QKLSAgICBpZiBzaWduYXR1cmUgPT0gIi0iIGFuZCBub3QgcmUubWF0Y2goIlxkKyQiLCBwcmVkaWNhdGVbMF0pOgorICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXC0/XGQrJCIsIHByZWRpY2F0ZVswXSk6CiAgICAgICAgICMgW3RhZ10KICAgICAgICAgdGFnID0gcHJlZGljYXRlWzBdCiAgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKQEAgLTE4NCw3ICsxODIsNyBAQAogICAgICAgICAgICAgICAgIGlmIGVsZW0uZmluZCh0YWcpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCiAgICAgICAgIHJldHVybiBzZWxlY3QKLSAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgaWYgc2lnbmF0dXJlID09ICItPSciIGFuZCBub3QgcmUubWF0Y2goIlwtP1xkKyQiLCBwcmVkaWNhdGVbMF0pOgogICAgICAgICAjIFt0YWc9J3ZhbHVlJ10KICAgICAgICAgdGFnID0gcHJlZGljYXRlWzBdCiAgICAgICAgIHZhbHVlID0gcHJlZGljYXRlWy0xXQpAQCAtMTk4LDcgKzE5NiwxMCBAQAogICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgb3Igc2lnbmF0dXJlID09ICItKCkiIG9yIHNpZ25hdHVyZSA9PSAiLSgpLSI6CiAgICAgICAgICMgW2luZGV4XSBvciBbbGFzdCgpXSBvciBbbGFzdCgpLWluZGV4XQogICAgICAgICBpZiBzaWduYXR1cmUgPT0gIi0iOgorICAgICAgICAgICAgIyBbaW5kZXhdCiAgICAgICAgICAgICBpbmRleCA9IGludChwcmVkaWNhdGVbMF0pIC0gMQorICAgICAgICAgICAgaWYgaW5kZXggPCAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJYUGF0aCBwb3NpdGlvbiA+PSAxIGV4cGVjdGVkIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHByZWRpY2F0ZVswXSAhPSAibGFzdCI6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGZ1bmN0aW9uIikKQEAgLTIwNyw2ICsyMDgsOCBAQAogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGludChwcmVkaWNhdGVbMl0pIC0gMQogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZXhwcmVzc2lvbiIpCisgICAgICAgICAgICAgICAgaWYgaW5kZXggPiAtMjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlhQYXRoIG9mZnNldCBmcm9tIGxhc3QoKSBtdXN0IGJlIG5lZ2F0aXZlIikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaW5kZXggPSAtMQogICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQppbmRleCBhOGU1NzI5Li5jYWI0MTVjIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKQEAgLTEsMjggKzEsNDcgQEAKKyIiIkxpZ2h0d2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24uCisKKyBYTUwgaXMgYW4gaW5oZXJlbnRseSBoaWVyYXJjaGljYWwgZGF0YSBmb3JtYXQsIGFuZCB0aGUgbW9zdCBuYXR1cmFsIHdheSB0bworIHJlcHJlc2VudCBpdCBpcyB3aXRoIGEgdHJlZS4gIFRoaXMgbW9kdWxlIGhhcyB0d28gY2xhc3NlcyBmb3IgdGhpcyBwdXJwb3NlOgorCisgICAgMS4gRWxlbWVudFRyZWUgcmVwcmVzZW50cyB0aGUgd2hvbGUgWE1MIGRvY3VtZW50IGFzIGEgdHJlZSBhbmQKKworICAgIDIuIEVsZW1lbnQgcmVwcmVzZW50cyBhIHNpbmdsZSBub2RlIGluIHRoaXMgdHJlZS4KKworIEludGVyYWN0aW9ucyB3aXRoIHRoZSB3aG9sZSBkb2N1bWVudCAocmVhZGluZyBhbmQgd3JpdGluZyB0by9mcm9tIGZpbGVzKSBhcmUKKyB1c3VhbGx5IGRvbmUgb24gdGhlIEVsZW1lbnRUcmVlIGxldmVsLiAgSW50ZXJhY3Rpb25zIHdpdGggYSBzaW5nbGUgWE1MIGVsZW1lbnQKKyBhbmQgaXRzIHN1Yi1lbGVtZW50cyBhcmUgZG9uZSBvbiB0aGUgRWxlbWVudCBsZXZlbC4KKworIEVsZW1lbnQgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0IGRlc2lnbmVkIHRvIHN0b3JlIGhpZXJhcmNoaWNhbCBkYXRhCisgc3RydWN0dXJlcyBpbiBtZW1vcnkuIEl0IGNhbiBiZSBkZXNjcmliZWQgYXMgYSBjcm9zcyBiZXR3ZWVuIGEgbGlzdCBhbmQgYQorIGRpY3Rpb25hcnkuICBFYWNoIEVsZW1lbnQgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0OgorCisgICAgJ3RhZycgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlbGVtZW50J3MgbmFtZS4KKworICAgICdhdHRyaWJ1dGVzJyAtIGEgUHl0aG9uIGRpY3Rpb25hcnkgc3RvcmluZyB0aGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuCisKKyAgICAndGV4dCcgLSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlbGVtZW50J3MgdGV4dCBjb250ZW50LgorCisgICAgJ3RhaWwnIC0gYW4gb3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgdGV4dCBhZnRlciB0aGUgZWxlbWVudCdzIGVuZCB0YWcuCisKKyAgICBBbmQgYSBudW1iZXIgb2YgY2hpbGQgZWxlbWVudHMgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlLgorCisgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUgRWxlbWVudCBjb25zdHJ1Y3RvciwKKyBvciB0aGUgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9uLgorCisgWW91IGNhbiBhbHNvIHVzZSB0aGUgRWxlbWVudFRyZWUgY2xhc3MgdG8gd3JhcCBhbiBlbGVtZW50IHN0cnVjdHVyZQorIGFuZCBjb252ZXJ0IGl0IHRvIGFuZCBmcm9tIFhNTC4KKworIiIiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KICMKICMgRWxlbWVudFRyZWUKLSMgJElkOiBFbGVtZW50VHJlZS5weSAzNDQwIDIwMDgtMDctMTggMTQ6NDU6MDFaIGZyZWRyaWsgJAotIwotIyBsaWdodC13ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgotIwotIyBoaXN0b3J5IChzaW5jZSAxLjIuNik6Ci0jIDIwMDUtMTEtMTIgZmwgICBhZGRlZCB0b3N0cmluZ2xpc3QvZnJvbXN0cmluZ2xpc3QgaGVscGVycwotIyAyMDA2LTA3LTA1IGZsICAgbWVyZ2VkIGluIHNlbGVjdGVkIGNoYW5nZXMgZnJvbSB0aGUgMS4zIHNhbmRib3gKLSMgMjAwNi0wNy0wNSBmbCAgIHJlbW92ZWQgc3VwcG9ydCBmb3IgMi4xIGFuZCBlYXJsaWVyCi0jIDIwMDctMDYtMjEgZmwgICBhZGRlZCBkZXByZWNhdGlvbi9mdXR1cmUgd2FybmluZ3MKLSMgMjAwNy0wOC0yNSBmbCAgIGFkZGVkIGRvY3R5cGUgaG9vaywgYWRkZWQgcGFyc2VyIHZlcnNpb24gYXR0cmlidXRlIGV0YwotIyAyMDA3LTA4LTI2IGZsICAgYWRkZWQgbmV3IHNlcmlhbGl6ZXIgY29kZSAoYmV0dGVyIG5hbWVzcGFjZSBoYW5kbGluZywgZXRjKQotIyAyMDA3LTA4LTI3IGZsICAgd2FybiBmb3IgYnJva2VuIC90YWcgc2VhcmNoZXMgb24gdHJlZSBsZXZlbAotIyAyMDA3LTA5LTAyIGZsICAgYWRkZWQgaHRtbC90ZXh0IG1ldGhvZHMgdG8gc2VyaWFsaXplciAoZXhwZXJpbWVudGFsKQotIyAyMDA3LTA5LTA1IGZsICAgYWRkZWQgbWV0aG9kIGFyZ3VtZW50IHRvIHRvc3RyaW5nL3Rvc3RyaW5nbGlzdAotIyAyMDA3LTA5LTA2IGZsICAgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcKLSMgMjAwNy0wOS0xMyBmbCAgIGFkZGVkIGl0ZXJ0ZXh0LCBpdGVyZmluZDsgYXNzb3J0ZWQgY2xlYW51cHMKLSMgMjAwNy0xMi0xNSBmbCAgIGFkZGVkIEMxNE4gaG9va3MsIGNvcHkgbWV0aG9kIChleHBlcmltZW50YWwpCi0jCiAjIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IGJ5IEZyZWRyaWsgTHVuZGguICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBmcmVkcmlrQHB5dGhvbndhcmUuY29tCiAjIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20KLSMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIEVsZW1lbnRUcmVlIHRvb2xraXQgaXMKICMKQEAgLTUxLDkgKzcwLDYgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRS4KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgotCiBfX2FsbF9fID0gWwogICAgICMgcHVibGljIHN5bWJvbHMKICAgICAiQ29tbWVudCIsCkBAIC02OSwzNCArODUsMTIgQEAKICAgICAiVHJlZUJ1aWxkZXIiLAogICAgICJWRVJTSU9OIiwKICAgICAiWE1MIiwgIlhNTElEIiwKLSAgICAiWE1MUGFyc2VyIiwgIlhNTFRyZWVCdWlsZGVyIiwKKyAgICAiWE1MUGFyc2VyIiwKICAgICAicmVnaXN0ZXJfbmFtZXNwYWNlIiwKICAgICBdCiAKIFZFUlNJT04gPSAiMS4zLjAiCiAKLSMjCi0jIFRoZSA8Yj5FbGVtZW50PC9iPiB0eXBlIGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCwgZGVzaWduZWQgdG8KLSMgc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuIFRoZSB0eXBlIGNhbiBiZQotIyBkZXNjcmliZWQgYXMgYSBjcm9zcyBiZXR3ZWVuIGEgbGlzdCBhbmQgYSBkaWN0aW9uYXJ5LgotIyA8cD4KLSMgRWFjaCBlbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKLSMgPHVsPgotIyA8bGk+YSA8aT50YWc8L2k+LiBUaGlzIGlzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBkYXRhCi0jIHRoaXMgZWxlbWVudCByZXByZXNlbnRzICh0aGUgZWxlbWVudCB0eXBlLCBpbiBvdGhlciB3b3JkcykuPC9saT4KLSMgPGxpPmEgbnVtYmVyIG9mIDxpPmF0dHJpYnV0ZXM8L2k+LCBzdG9yZWQgaW4gYSBQeXRob24gZGljdGlvbmFyeS48L2xpPgotIyA8bGk+YSA8aT50ZXh0PC9pPiBzdHJpbmcuPC9saT4KLSMgPGxpPmFuIG9wdGlvbmFsIDxpPnRhaWw8L2k+IHN0cmluZy48L2xpPgotIyA8bGk+YSBudW1iZXIgb2YgPGk+Y2hpbGQgZWxlbWVudHM8L2k+LCBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2U8L2xpPgotIyA8L3VsPgotIwotIyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSB7QGxpbmsgI0VsZW1lbnR9IGNvbnN0cnVjdG9yCi0jIG9yIHRoZSB7QGxpbmsgI1N1YkVsZW1lbnR9IGZhY3RvcnkgZnVuY3Rpb24uCi0jIDxwPgotIyBUaGUge0BsaW5rICNFbGVtZW50VHJlZX0gY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBlbGVtZW50Ci0jIHN0cnVjdHVyZSwgYW5kIGNvbnZlcnQgaXQgZnJvbSBhbmQgdG8gWE1MLgotIyMKLQogaW1wb3J0IHN5cwogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKQEAgLTEwNiw4MSArMTAwLDY4IEBACiBmcm9tIC4gaW1wb3J0IEVsZW1lbnRQYXRoCiAKIAotIyMKLSMgUGFyc2VyIGVycm9yLiAgVGhpcyBpcyBhIHN1YmNsYXNzIG9mIDxiPlN5bnRheEVycm9yPC9iPi4KLSMgPHA+Ci0jIEluIGFkZGl0aW9uIHRvIHRoZSBleGNlcHRpb24gdmFsdWUsIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBjb250YWlucyBhCi0jIHNwZWNpZmljIGV4Y2VwdGlvbiBjb2RlIGluIHRoZSA8Yj5jb2RlPC9iPiBhdHRyaWJ1dGUsIGFuZCB0aGUgbGluZSBhbmQKLSMgY29sdW1uIG9mIHRoZSBlcnJvciBpbiB0aGUgPGI+cG9zaXRpb248L2I+IGF0dHJpYnV0ZS4KLQogY2xhc3MgUGFyc2VFcnJvcihTeW50YXhFcnJvcik6CisgICAgIiIiQW4gZXJyb3Igd2hlbiBwYXJzaW5nIGFuIFhNTCBkb2N1bWVudC4KKworICAgIEluIGFkZGl0aW9uIHRvIGl0cyBleGNlcHRpb24gdmFsdWUsIGEgUGFyc2VFcnJvciBjb250YWlucworICAgIHR3byBleHRyYSBhdHRyaWJ1dGVzOgorICAgICAgICAnY29kZScgICAgIC0gdGhlIHNwZWNpZmljIGV4Y2VwdGlvbiBjb2RlCisgICAgICAgICdwb3NpdGlvbicgLSB0aGUgbGluZSBhbmQgY29sdW1uIG9mIHRoZSBlcnJvcgorCisgICAgIiIiCiAgICAgcGFzcwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIENoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LgotIwotIyBAcGFyYW0gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQHJldHVybiBBIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KLSMgQGRlZnJldHVybiBmbGFnCiAKIGRlZiBpc2VsZW1lbnQoZWxlbWVudCk6Ci0gICAgIyBGSVhNRTogbm90IHN1cmUgYWJvdXQgdGhpczsKLSAgICAjIGlzaW5zdGFuY2UoZWxlbWVudCwgRWxlbWVudCkgb3IgbG9vayBmb3IgdGFnL2F0dHJpYi90ZXh0IGF0dHJpYnV0ZXMKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiAqZWxlbWVudCogYXBwZWFycyB0byBiZSBhbiBFbGVtZW50LiIiIgogICAgIHJldHVybiBoYXNhdHRyKGVsZW1lbnQsICd0YWcnKQogCi0jIwotIyBFbGVtZW50IGNsYXNzLiAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBFbGVtZW50IGludGVyZmFjZSwgYW5kCi0jIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlLgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIEFTQ0lJIHN0cmluZ3MgKG9yZGluYXJ5IFB5dGhvbiBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSA3LWJpdAotIyBBU0NJSSBjaGFyYWN0ZXJzKSBvciBVbmljb2RlIHN0cmluZ3MuCi0jCi0jIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSMgQHBhcmFtIGF0dHJpYiBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSMgQHBhcmFtICoqZXh0cmEgQWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSMgQHNlZSBFbGVtZW50Ci0jIEBzZWUgU3ViRWxlbWVudAotIyBAc2VlIENvbW1lbnQKLSMgQHNlZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KIAogY2xhc3MgRWxlbWVudDoKLSAgICAjIDx0YWcgYXR0cmliPnRleHQ8Y2hpbGQvPi4uLjwvdGFnPnRhaWwKKyAgICAiIiJBbiBYTUwgZWxlbWVudC4KIAotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBFbGVtZW50IHRhZy4KKyAgICBUaGlzIGNsYXNzIGlzIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLgorCisgICAgQW4gZWxlbWVudCdzIGxlbmd0aCBpcyBpdHMgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLiAgVGhhdCBtZWFucyBpZiB5b3UKKyAgICB5b3Ugd2FudCB0byBjaGVjayBpZiBhbiBlbGVtZW50IGlzIHRydWx5IGVtcHR5LCB5b3Ugc2hvdWxkIGNoZWNrIEJPVEgKKyAgICBpdHMgbGVuZ3RoIEFORCBpdHMgdGV4dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgZWxlbWVudCB0YWcsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlcgorICAgIGJ5dGVzIG9yIHN0cmluZ3MuCisKKyAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAgKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSBjb250YWluaW5nCisgICAgZWxlbWVudCBhdHRyaWJ1dGVzLiAqZXh0cmEqIGFyZSBhZGRpdGlvbmFsIGVsZW1lbnQgYXR0cmlidXRlcyBnaXZlbiBhcworICAgIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAgRXhhbXBsZSBmb3JtOgorICAgICAgICA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCisKKyAgICAiIiIKIAogICAgIHRhZyA9IE5vbmUKLQotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBFbGVtZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAgV2hlcmUgcG9zc2libGUsIHVzZQotICAgICMge0BsaW5rICNFbGVtZW50LmdldH0sCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuc2V0fSwKLSAgICAjIHtAbGluayAjRWxlbWVudC5rZXlzfSwgYW5kCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuaXRlbXN9IHRvIGFjY2VzcwotICAgICMgZWxlbWVudCBhdHRyaWJ1dGVzLgorICAgICIiIlRoZSBlbGVtZW50J3MgbmFtZS4iIiIKIAogICAgIGF0dHJpYiA9IE5vbmUKLQotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBUZXh0IGJlZm9yZSBmaXJzdCBzdWJlbGVtZW50LiAgVGhpcyBpcyBlaXRoZXIgYQotICAgICMgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzCi0gICAgIyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uCi0gICAgIyB0aGUgcGFyc2VyLgorICAgICIiIkRpY3Rpb25hcnkgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLiIiIgogCiAgICAgdGV4dCA9IE5vbmUKKyAgICAiIiIKKyAgICBUZXh0IGJlZm9yZSBmaXJzdCBzdWJlbGVtZW50LiBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4KKyAgICBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlcgorICAgIE5vbmUgb3IgdGhlIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCiAKLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBhZnRlciB0aGlzIGVsZW1lbnQncyBlbmQgdGFnLCBidXQgYmVmb3JlIHRoZQotICAgICMgbmV4dCBzaWJsaW5nIGVsZW1lbnQncyBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvcgotICAgICMgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlCi0gICAgIyBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KKyAgICAiIiIKIAotICAgIHRhaWwgPSBOb25lICMgdGV4dCBhZnRlciBlbmQgdGFnLCBpZiBhbnkKKyAgICB0YWlsID0gTm9uZQorICAgICIiIgorICAgIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQncworICAgIHN0YXJ0IHRhZy4gIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlCisgICAgd2FzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsCisgICAgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCiAKLSAgICAjIGNvbnN0cnVjdG9yCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyaWIsIGRpY3QpOgpAQCAtMTk1LDM2ICsxNzYsMzAgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiPEVsZW1lbnQgJXMgYXQgMHgleD4iICUgKHJlcHIoc2VsZi50YWcpLCBpZChzZWxmKSkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgRWxlbWVudCB0YWcuCi0gICAgIyBAcGFyYW0gYXR0cmliIEVsZW1lbnQgYXR0cmlidXRlcywgZ2l2ZW4gYXMgYSBkaWN0aW9uYXJ5LgotICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIG1ha2VlbGVtZW50KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGVsZW1lbnQgd2l0aCB0aGUgc2FtZSB0eXBlLgorCisgICAgICAgICp0YWcqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgbmFtZS4KKyAgICAgICAgKmF0dHJpYiogaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgYXR0cmlidXRlcy4KKworICAgICAgICBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCwgdXNlIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24gaW5zdGVhZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHRhZywgYXR0cmliKQogCi0gICAgIyMKLSAgICAjIChFeHBlcmltZW50YWwpIENvcGllcyB0aGUgY3VycmVudCBlbGVtZW50LiAgVGhpcyBjcmVhdGVzIGEKLSAgICAjIHNoYWxsb3cgY29weTsgc3ViZWxlbWVudHMgd2lsbCBiZSBzaGFyZWQgd2l0aCB0aGUgb3JpZ2luYWwgdHJlZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGNvcHkgb2YgY3VycmVudCBlbGVtZW50LgorCisgICAgICAgIFRoaXMgY3JlYXRlcyBhIHNoYWxsb3cgY29weS4gU3ViZWxlbWVudHMgd2lsbCBiZSBzaGFyZWQgd2l0aCB0aGUKKyAgICAgICAgb3JpZ2luYWwgdHJlZS4KKworICAgICAgICAiIiIKICAgICAgICAgZWxlbSA9IHNlbGYubWFrZWVsZW1lbnQoc2VsZi50YWcsIHNlbGYuYXR0cmliKQogICAgICAgICBlbGVtLnRleHQgPSBzZWxmLnRleHQKICAgICAgICAgZWxlbS50YWlsID0gc2VsZi50YWlsCiAgICAgICAgIGVsZW1bOl0gPSBzZWxmCiAgICAgICAgIHJldHVybiBlbGVtCiAKLSAgICAjIwotICAgICMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLiAgTm90ZSB0aGF0IHRoaXMgb25seSBjb3VudHMKLSAgICAjIGZ1bGwgZWxlbWVudHM7IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGNvbnRlbnQgaW4gYW4gZWxlbWVudCwgeW91Ci0gICAgIyBoYXZlIHRvIGNoZWNrIGJvdGggdGhlIGxlbmd0aCBhbmQgdGhlIDxiPnRleHQ8L2I+IGF0dHJpYnV0ZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuCi0KICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikKIApAQCAtMjM2LDIzICsyMTEsOSBAQAogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKSAhPSAwICMgZW11bGF0ZSBvbGQgYmVoYXZpb3VyLCBmb3Igbm93CiAKLSAgICAjIwotICAgICMgUmV0dXJucyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXR1cm4uCi0gICAgIyBAcmV0dXJuIFRoZSBnaXZlbiBzdWJlbGVtZW50LgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCi0gICAgIyMKLSAgICAjIFJlcGxhY2VzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJlcGxhY2UuCi0gICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgbmV3IGVsZW1lbnQgdmFsdWUuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgogICAgICAgICAjIGlmIGlzaW5zdGFuY2UoaW5kZXgsIHNsaWNlKToKICAgICAgICAgIyAgICAgZm9yIGVsdCBpbiBlbGVtZW50OgpAQCAtMjYxLDc2ICsyMjIsNjIgQEAKICAgICAgICAgIyAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbltpbmRleF0gPSBlbGVtZW50CiAKLSAgICAjIwotICAgICMgRGVsZXRlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byBkZWxldGUuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICBkZWwgc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKLSAgICAjIwotICAgICMgQWRkcyBhIHN1YmVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuICBJbiBkb2N1bWVudCBvcmRlciwKLSAgICAjIHRoZSBuZXcgZWxlbWVudCB3aWxsIGFwcGVhciBhZnRlciB0aGUgbGFzdCBleGlzdGluZyBzdWJlbGVtZW50IChvcgotICAgICMgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLCBidXQgYmVmb3JlCi0gICAgIyB0aGUgZW5kIHRhZyBmb3IgdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZC4KKyAgICBkZWYgYXBwZW5kKHNlbGYsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJBZGQgKnN1YmVsZW1lbnQqIHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LgogCi0gICAgZGVmIGFwcGVuZChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKGVsZW1lbnQpCisgICAgICAgIFRoZSBuZXcgZWxlbWVudCB3aWxsIGFwcGVhciBpbiBkb2N1bWVudCBvcmRlciBhZnRlciB0aGUgbGFzdCBleGlzdGluZworICAgICAgICBzdWJlbGVtZW50IChvciBkaXJlY3RseSBhZnRlciB0aGUgdGV4dCwgaWYgaXQncyB0aGUgZmlyc3Qgc3ViZWxlbWVudCksCisgICAgICAgIGJ1dCBiZWZvcmUgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KIAotICAgICMjCi0gICAgIyBBcHBlbmRzIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudHMgQSBzZXF1ZW5jZSBvYmplY3Qgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCi0gICAgIyBAc2luY2UgMS4zCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChzdWJlbGVtZW50KQorICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoc3ViZWxlbWVudCkKIAogICAgIGRlZiBleHRlbmQoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICAiIiJBcHBlbmQgc3ViZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgorCisgICAgICAgICplbGVtZW50cyogaXMgYSBzZXF1ZW5jZSB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KKworICAgICAgICAiIiIKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbi5leHRlbmQoZWxlbWVudHMpCiAKLSAgICAjIwotICAgICMgSW5zZXJ0cyBhIHN1YmVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hlcmUgdG8gaW5zZXJ0IHRoZSBuZXcgc3ViZWxlbWVudC4KLQotICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgotICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpCisgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIkluc2VydCAqc3ViZWxlbWVudCogYXQgcG9zaXRpb24gKmluZGV4Ki4iIiIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoc3ViZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBzdWJlbGVtZW50KQogCiAgICAgZGVmIF9hc3NlcnRfaXNfZWxlbWVudChzZWxmLCBlKToKICAgICAgICAgIyBOZWVkIHRvIHJlZmVyIHRvIHRoZSBhY3R1YWwgUHl0aG9uIGltcGxlbWVudGF0aW9uLCBub3QgdGhlCiAgICAgICAgICMgc2hhZG93aW5nIEMgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIF9FbGVtZW50KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgX0VsZW1lbnRfUHkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhbiBFbGVtZW50LCBub3QgJXMnICUgdHlwZShlKS5fX25hbWVfXykKIAotICAgICMjCi0gICAgIyBSZW1vdmVzIGEgbWF0Y2hpbmcgc3ViZWxlbWVudC4gIFVubGlrZSB0aGUgPGI+ZmluZDwvYj4gbWV0aG9kcywKLSAgICAjIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uIGlkZW50aXR5LCBub3Qgb24gdGFnCi0gICAgIyB2YWx1ZSBvciBjb250ZW50cy4gIFRvIHJlbW92ZSBzdWJlbGVtZW50cyBieSBvdGhlciBtZWFucywgdGhlCi0gICAgIyBlYXNpZXN0IHdheSBpcyBvZnRlbiB0byB1c2UgYSBsaXN0IGNvbXByZWhlbnNpb24gdG8gc2VsZWN0IHdoYXQKLSAgICAjIGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB1c2Ugc2xpY2UgYXNzaWdubWVudCB0byB1cGRhdGUgdGhlIHBhcmVudAotICAgICMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBXaGF0IGVsZW1lbnQgdG8gcmVtb3ZlLgotICAgICMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIGEgbWF0Y2hpbmcgZWxlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuCisgICAgZGVmIHJlbW92ZShzZWxmLCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiUmVtb3ZlIG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAKLSAgICBkZWYgcmVtb3ZlKHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBVbmxpa2UgdGhlIGZpbmQgbWV0aG9kcywgdGhpcyBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24KKyAgICAgICAgaWRlbnRpdHksIE5PVCBPTiB0YWcgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkKKyAgICAgICAgb3RoZXIgbWVhbnMsIHRoZSBlYXNpZXN0IHdheSBpcyB0byB1c2UgYSBsaXN0IGNvbXByZWhlbnNpb24gdG8KKyAgICAgICAgc2VsZWN0IHdoYXQgZWxlbWVudHMgdG8ga2VlcCwgYW5kIHRoZW4gdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlCisgICAgICAgIHRoZSBwYXJlbnQgZWxlbWVudC4KKworICAgICAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4ucmVtb3ZlKGVsZW1lbnQpCi0KLSAgICAjIwotICAgICMgKERlcHJlY2F0ZWQpIFJldHVybnMgYWxsIHN1YmVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZAotICAgICMgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2Ygc3ViZWxlbWVudHMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4ucmVtb3ZlKHN1YmVsZW1lbnQpCiAKICAgICBkZWYgZ2V0Y2hpbGRyZW4oc2VsZik6CisgICAgICAgICIiIihEZXByZWNhdGVkKSBSZXR1cm4gYWxsIHN1YmVsZW1lbnRzLgorCisgICAgICAgIEVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgogICAgICAgICAgICAgIlVzZSAnbGlzdChlbGVtKScgb3IgaXRlcmF0aW9uIG92ZXIgZWxlbSBpbnN0ZWFkLiIsCkBAIC0zMzgsMTMxICsyODUsMTI4IEBACiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbgogCi0gICAgIyMKLSAgICAjIEZpbmRzIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudCBvciBOb25lCi0KICAgICBkZWYgZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgdGV4dCBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAjICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50Ci0gICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCi0gICAgIyAgICAgZW1wdHkgc3RyaW5nLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcKLQogICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgdGV4dCBmb3IgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqZGVmYXVsdCogaXMgdGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0ZXh0IGNvbnRlbnQgb2YgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgZGVmYXVsdCB2YWx1ZSBpZgorICAgICAgICBub25lIHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiBhbiBlbGVtZW50IGlzIGZvdW5kIGhhdmluZyBubyB0ZXh0CisgICAgICAgIGNvbnRlbnQsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0LCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJucyBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5pdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFJlc2V0cyBhbiBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzCi0gICAgIyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIDxiPnRleHQ8L2I+IGFuZCA8Yj50YWlsPC9iPiBhdHRyaWJ1dGVzCi0gICAgIyB0byBOb25lLgotCiAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZXNldCBlbGVtZW50LgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMKKyAgICAgICAgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyB0byBOb25lLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmF0dHJpYi5jbGVhcigpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gW10KICAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi50YWlsID0gTm9uZQogCi0gICAgIyMKLSAgICAjIEdldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5nZXQ8L2I+LCBidXQKLSAgICAjIHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgotICAgICMKLSAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCi0gICAgIyBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9yIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiB0aGUKLSAgICAjICAgICBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nIG9yIE5vbmUKLQogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgZWxlbWVudCBhdHRyaWJ1dGUuCisKKyAgICAgICAgRXF1aXZhbGVudCB0byBhdHRyaWIuZ2V0LCBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEKKyAgICAgICAgYml0IG1vcmUgZWZmaWNpZW50bHkuICAqa2V5KiBpcyB3aGF0IGF0dHJpYnV0ZSB0byBsb29rIGZvciwgYW5kCisgICAgICAgICpkZWZhdWx0KiBpcyB3aGF0IHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCisKKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9yIHRoZSBkZWZhdWx0IGlmCisgICAgICAgIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuZ2V0KGtleSwgZGVmYXVsdCkKIAotICAgICMjCi0gICAgIyBTZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWJba2V5XSA9IHZhbHVlPC9iPiwKLSAgICAjIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAjCi0gICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIHNldC4KLSAgICAjIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlLgotCiAgICAgZGVmIHNldChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiU2V0IGVsZW1lbnQgYXR0cmlidXRlLgorCisgICAgICAgIEVxdWl2YWxlbnQgdG8gYXR0cmliW2tleV0gPSB2YWx1ZSwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUKKyAgICAgICAgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LiAgKmtleSogaXMgd2hhdCBhdHRyaWJ1dGUgdG8gc2V0LCBhbmQKKyAgICAgICAgKnZhbHVlKiBpcyB0aGUgYXR0cmlidXRlIHZhbHVlIHRvIHNldCBpdCB0by4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5hdHRyaWJba2V5XSA9IHZhbHVlCiAKLSAgICAjIwotICAgICMgR2V0cyBhIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLiAgVGhlIG5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbgotICAgICMgYXJiaXRyYXJ5IG9yZGVyIChqdXN0IGxpa2UgZm9yIGFuIG9yZGluYXJ5IFB5dGhvbiBkaWN0aW9uYXJ5KS4KLSAgICAjIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmtleXMoKTwvYj4uCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2YgZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2Ygc3RyaW5ncwotCiAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICIiIkdldCBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4KKworICAgICAgICBOYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLCBqdXN0IGxpa2UgYW4gb3JkaW5hcnkKKyAgICAgICAgUHl0aG9uIGRpY3QuICBFcXVpdmFsZW50IHRvIGF0dHJpYi5rZXlzKCkKKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmtleXMoKQogCi0gICAgIyMKLSAgICAjIEdldHMgZWxlbWVudCBhdHRyaWJ1dGVzLCBhcyBhIHNlcXVlbmNlLiAgVGhlIGF0dHJpYnV0ZXMgYXJlCi0gICAgIyByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5pdGVtcygpPC9iPi4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcyBmb3IgYWxsIGF0dHJpYnV0ZXMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgKHN0cmluZywgc3RyaW5nKSB0dXBsZXMKLQogICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGVsZW1lbnQgYXR0cmlidXRlcyBhcyBhIHNlcXVlbmNlLgorCisgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCBpbiBhcmJpdHJhcnkgb3JkZXIuICBFcXVpdmFsZW50IHRvCisgICAgICAgIGF0dHJpYi5pdGVtcygpLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5pdGVtcygpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRyZWUgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQKLSAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgZWxlbWVudHMKLSAgICAjIHdpdGggYSBtYXRjaGluZyB0YWcuCi0gICAgIyA8cD4KLSAgICAjIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAotICAgICMgZWxlbWVudHMgbWF5IG9yIG1heSBub3QgYmUgaW5jbHVkZWQuICBUbyBnZXQgYSBzdGFibGUgc2V0LCB1c2UgdGhlCi0gICAgIyBsaXN0KCkgZnVuY3Rpb24gb24gdGhlIGl0ZXJhdG9yLCBhbmQgbG9vcCBvdmVyIHRoZSByZXN1bHRpbmcgbGlzdC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgdHJlZSBpdGVyYXRvci4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGUgZWxlbWVudCBhbmQgYWxsIHN1YmVsZW1lbnRzIGluIGRvY3VtZW50CisgICAgICAgIG9yZGVyLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIHdpdGggYSBtYXRjaGluZyB0YWcuCisKKyAgICAgICAgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIG5ldyBvciByZW1vdmVkCisgICAgICAgIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQorICAgICAgICBsaXN0KCkgZnVuY3Rpb24gb24gdGhlIGl0ZXJhdG9yLCBhbmQgbG9vcCBvdmVyIHRoZSByZXN1bHRpbmcgbGlzdC4KKworICAgICAgICAqdGFnKiBpcyB3aGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKworICAgICAgICBSZXR1cm4gYW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgorCisgICAgICAgICIiIgogICAgICAgICBpZiB0YWcgPT0gIioiOgogICAgICAgICAgICAgdGFnID0gTm9uZQogICAgICAgICBpZiB0YWcgaXMgTm9uZSBvciBzZWxmLnRhZyA9PSB0YWc6CiAgICAgICAgICAgICB5aWVsZCBzZWxmCiAgICAgICAgIGZvciBlIGluIHNlbGYuX2NoaWxkcmVuOgotICAgICAgICAgICAgZm9yIGUgaW4gZS5pdGVyKHRhZyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgZQorICAgICAgICAgICAgeWllbGQgZnJvbSBlLml0ZXIodGFnKQogCiAgICAgIyBjb21wYXRpYmlsaXR5CiAgICAgZGVmIGdldGl0ZXJhdG9yKHNlbGYsIHRhZz1Ob25lKToKQEAgLTQ3NCw3OCArNDE4LDY3IEBACiAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyKHRhZykpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRleHQgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQKLSAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgaW5uZXIKLSAgICAjIHRleHQuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCBpbm5lciB0ZXh0LgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXJ0ZXh0KHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgdGV4dCBpdGVyYXRvci4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGUgZWxlbWVudCBhbmQgYWxsIHN1YmVsZW1lbnRzIGluIGRvY3VtZW50CisgICAgICAgIG9yZGVyLCByZXR1cm5pbmcgYWxsIGlubmVyIHRleHQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHRhZyA9IHNlbGYudGFnCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgc3RyKSBhbmQgdGFnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYudGV4dDoKICAgICAgICAgICAgIHlpZWxkIHNlbGYudGV4dAogICAgICAgICBmb3IgZSBpbiBzZWxmOgotICAgICAgICAgICAgZm9yIHMgaW4gZS5pdGVydGV4dCgpOgotICAgICAgICAgICAgICAgIHlpZWxkIHMKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZS5pdGVydGV4dCgpCiAgICAgICAgICAgICBpZiBlLnRhaWw6CiAgICAgICAgICAgICAgICAgeWllbGQgZS50YWlsCiAKLSMgY29tcGF0aWJpbGl0eQotX0VsZW1lbnQgPSBfRWxlbWVudEludGVyZmFjZSA9IEVsZW1lbnQKLQotIyMKLSMgU3ViZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZAotIyBhcHBlbmRzIGl0IHRvIGFuIGV4aXN0aW5nIGVsZW1lbnQuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgOC1iaXQgQVNDSUkgc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuCi0jCi0jIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBlbGVtZW50LgotIyBAcGFyYW0gdGFnIFRoZSBzdWJlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBTdWJFbGVtZW50KHBhcmVudCwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgorICAgICIiIlN1YmVsZW1lbnQgZmFjdG9yeSB3aGljaCBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZCBhcHBlbmRzIGl0CisgICAgdG8gYW4gZXhpc3RpbmcgcGFyZW50LgorCisgICAgVGhlIGVsZW1lbnQgdGFnLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgICBieXRlcyBvciBVbmljb2RlIHN0cmluZ3MuCisKKyAgICAqcGFyZW50KiBpcyB0aGUgcGFyZW50IGVsZW1lbnQsICp0YWcqIGlzIHRoZSBzdWJlbGVtZW50cyBuYW1lLCAqYXR0cmliKiBpcworICAgIGFuIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcywgKmV4dHJhKiBhcmUKKyAgICBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCisKKyAgICAiIiIKICAgICBhdHRyaWIgPSBhdHRyaWIuY29weSgpCiAgICAgYXR0cmliLnVwZGF0ZShleHRyYSkKICAgICBlbGVtZW50ID0gcGFyZW50Lm1ha2VlbGVtZW50KHRhZywgYXR0cmliKQogICAgIHBhcmVudC5hcHBlbmQoZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudAogCi0jIwotIyBDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbAotIyBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50IGJ5IHRoZSBzdGFuZGFyZAotIyBzZXJpYWxpemVyLgotIyA8cD4KLSMgVGhlIGNvbW1lbnQgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYW4gOC1iaXQgQVNDSUkgc3RyaW5nIG9yIGEgVW5pY29kZQotIyBzdHJpbmcuCi0jCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIGNvbW1lbnQuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgQ29tbWVudCh0ZXh0PU5vbmUpOgorICAgICIiIkNvbW1lbnQgZWxlbWVudCBmYWN0b3J5LgorCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50IHdoaWNoIHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyCisgICAgc2VyaWFsaXplcyBhcyBhbiBYTUwgY29tbWVudC4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4KKworICAgICIiIgogICAgIGVsZW1lbnQgPSBFbGVtZW50KENvbW1lbnQpCiAgICAgZWxlbWVudC50ZXh0ID0gdGV4dAogICAgIHJldHVybiBlbGVtZW50CiAKLSMjCi0jIFBJIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50Ci0jIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGJ5IHRoZSBzdGFuZGFyZAotIyBzZXJpYWxpemVyLgotIwotIyBAcGFyYW0gdGFyZ2V0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4KLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmIGFueS4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBQSS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCB0ZXh0PU5vbmUpOgorICAgICIiIlByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gZWxlbWVudCBmYWN0b3J5LgorCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50IHdoaWNoIHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyCisgICAgc2VyaWFsaXplcyBhcyBhbiBYTUwgY29tbWVudC4KKworICAgICp0YXJnZXQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sICp0ZXh0KiBpcyBhCisgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gY29udGVudHMsIGlmIGFueS4KKworICAgICIiIgogICAgIGVsZW1lbnQgPSBFbGVtZW50KFByb2Nlc3NpbmdJbnN0cnVjdGlvbikKICAgICBlbGVtZW50LnRleHQgPSB0YXJnZXQKICAgICBpZiB0ZXh0OgpAQCAtNTU0LDE3ICs0ODcsMjEgQEAKIAogUEkgPSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KIAotIyMKLSMgUU5hbWUgd3JhcHBlci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgaW4KLSMgb3JkZXIgdG8gZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LgotIwotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwKLSMgICAgIG9yLCBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4KLSMgQHBhcmFtIHRhZyBPcHRpb25hbCB0YWcuICBJZiBnaXZlbiwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzCi0jICAgICBhbiBVUkksIGFuZCB0aGlzIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KLSMgQHJldHVybiBBbiBvcGFxdWUgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIFFOYW1lLgogCiBjbGFzcyBRTmFtZToKKyAgICAiIiJRdWFsaWZpZWQgbmFtZSB3cmFwcGVyLgorCisgICAgVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlIGluIG9yZGVyIHRvIGdldAorICAgIHByb3BlciBuYW1lc3BhY2UgaGFuZGluZyBvbiBvdXRwdXQuCisKKyAgICAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFFOYW1lIHZhbHVlIGVpdGhlciBpbiB0aGUgZm9ybQorICAgIHt1cml9bG9jYWwsIG9yIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBVUkkgcGFydCBvZiBhIFFOYW1lLgorCisgICAgKnRhZyogaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggaWYgZ2l2ZW4sIHdpbGwgbWFrZSB0aGUgZmlyc3QKKyAgICBhcmd1bWVudCAodGV4dF9vcl91cmkpIGJlIGludGVycHJldGVkIGFzIGEgVVJJLCBhbmQgdGhpcyBhcmd1bWVudCAodGFnKQorICAgIGJlIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0X29yX3VyaSwgdGFnPU5vbmUpOgogICAgICAgICBpZiB0YWc6CiAgICAgICAgICAgICB0ZXh0X29yX3VyaSA9ICJ7JXN9JXMiICUgKHRleHRfb3JfdXJpLCB0YWcpCkBAIC02MDIsNjMgKzUzOSw2NSBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQKLSMgaGllcmFyY2h5LCBhbmQgYWRkcyBzb21lIGV4dHJhIHN1cHBvcnQgZm9yIHNlcmlhbGl6YXRpb24gdG8gYW5kIGZyb20KLSMgc3RhbmRhcmQgWE1MLgotIwotIyBAcGFyYW0gZWxlbWVudCBPcHRpb25hbCByb290IGVsZW1lbnQuCi0jIEBrZXlwYXJhbSBmaWxlIE9wdGlvbmFsIGZpbGUgaGFuZGxlIG9yIGZpbGUgbmFtZS4gIElmIGdpdmVuLCB0aGUKLSMgICAgIHRyZWUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhpcyBYTUwgZmlsZS4KIAogY2xhc3MgRWxlbWVudFRyZWU6CisgICAgIiIiQW4gWE1MIGVsZW1lbnQgaGllcmFyY2h5LgogCisgICAgVGhpcyBjbGFzcyBhbHNvIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNlcmlhbGl6YXRpb24gdG8gYW5kIGZyb20KKyAgICBzdGFuZGFyZCBYTUwuCisKKyAgICAqZWxlbWVudCogaXMgYW4gb3B0aW9uYWwgcm9vdCBlbGVtZW50IG5vZGUsCisgICAgKmZpbGUqIGlzIGFuIG9wdGlvbmFsIGZpbGUgaGFuZGxlIG9yIGZpbGUgbmFtZSBvZiBhbiBYTUwgZmlsZSB3aG9zZQorICAgIGNvbnRlbnRzIHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSB0cmVlIHdpdGguCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICAgICAjIGFzc2VydCBlbGVtZW50IGlzIE5vbmUgb3IgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50ICMgZmlyc3Qgbm9kZQogICAgICAgICBpZiBmaWxlOgogICAgICAgICAgICAgc2VsZi5wYXJzZShmaWxlKQogCi0gICAgIyMKLSAgICAjIEdldHMgdGhlIHJvb3QgZWxlbWVudCBmb3IgdGhpcyB0cmVlLgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGdldHJvb3Qoc2VsZik6CisgICAgICAgICIiIlJldHVybiByb290IGVsZW1lbnQgb2YgdGhpcyB0cmVlLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAogCi0gICAgIyMKLSAgICAjIFJlcGxhY2VzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4gIFRoaXMgZGlzY2FyZHMgdGhlCi0gICAgIyBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0cmVlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgZ2l2ZW4KLSAgICAjIGVsZW1lbnQuICBVc2Ugd2l0aCBjYXJlLgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgX3NldHJvb3Qoc2VsZiwgZWxlbWVudCk6CisgICAgICAgICIiIlJlcGxhY2Ugcm9vdCBlbGVtZW50IG9mIHRoaXMgdHJlZS4KKworICAgICAgICBUaGlzIHdpbGwgZGlzY2FyZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdAorICAgICAgICB3aXRoIHRoZSBnaXZlbiBlbGVtZW50LiAgVXNlIHdpdGggY2FyZSEKKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50CiAKLSAgICAjIwotICAgICMgTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIGRvY3VtZW50IGludG8gdGhpcyBlbGVtZW50IHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHNvdXJjZSBBIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdC4gIElmIGEgZmlsZSBvYmplY3QgaXMKLSAgICAjICAgICBnaXZlbiwgaXQgb25seSBoYXMgdG8gaW1wbGVtZW50IGEgPGI+cmVhZChuKTwvYj4gbWV0aG9kLgotICAgICMgQGtleXBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotICAgICMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotICAgICMgQHJldHVybiBUaGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0gICAgIyBAZXhjZXB0aW9uIFBhcnNlRXJyb3IgSWYgdGhlIHBhcnNlciBmYWlscyB0byBwYXJzZSB0aGUgZG9jdW1lbnQuCi0KICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgICAgICIiIkxvYWQgZXh0ZXJuYWwgWE1MIGRvY3VtZW50IGludG8gZWxlbWVudCB0cmVlLgorCisgICAgICAgICpzb3VyY2UqIGlzIGEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIKKyAgICAgICAgaW5zdGFuY2UgdGhhdCBkZWZhdWx0cyB0byBYTUxQYXJzZXIuCisKKyAgICAgICAgUGFyc2VFcnJvciBpcyByYWlzZWQgaWYgdGhlIHBhcnNlciBmYWlscyB0byBwYXJzZSB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgUmV0dXJucyB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzb3VyY2UgZG9jdW1lbnQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIElmIG5vIHBhcnNlciB3YXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBkZWZhdWx0IFhNTFBhcnNlcgorICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcigpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihwYXJzZXIsICdfcGFyc2Vfd2hvbGUnKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBYTUxQYXJzZXIsIHdoZW4gaXQgY29tZXMgZnJvbSBhbiBhY2NlbGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgIyBjYW4gZGVmaW5lIGFuIGludGVybmFsIF9wYXJzZV93aG9sZSBBUEkgZm9yIGVmZmljaWVuY3kuCisgICAgICAgICAgICAgICAgICAgICMgSXQgY2FuIGJlIHVzZWQgdG8gcGFyc2UgdGhlIHdob2xlIHNvdXJjZSB3aXRob3V0IGZlZWRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBpdCB3aXRoIGNodW5rcy4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5fcGFyc2Vfd2hvbGUoc291cmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC02NjksMTUgKzYwOCwxNSBAQAogICAgICAgICAgICAgaWYgY2xvc2Vfc291cmNlOgogICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IgbG9vcHMKLSAgICAjIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcihzZWxmLCB0YWc9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhbmQgcmV0dXJuIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgKnRhZyogaXMgYSBzdHJpbmcgd2l0aCB0aGUgdGFnIG5hbWUgdG8gaXRlcmF0ZSBvdmVyCisgICAgICAgIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXIodGFnKQogCkBAIC02OTEsMTUgKzYzMCwxNyBAQAogICAgICAgICApCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudCBvciBOb25lCi0KICAgICBkZWYgZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kKHBhdGgpLCB3aGljaCBpcyBFbGVtZW50LmZpbmQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzExLDE5ICs2NTIsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmQocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAjICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50Ci0gICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCi0gICAgIyAgICAgZW1wdHkgc3RyaW5nLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcKLQogICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLCAgd2hpY2ggaXMgRWxlbWVudC5maW5kdGV4dCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03MzUsMTYgKzY3NCwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZHRleHQocGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKSwgd2hpY2ggaXMgRWxlbWVudC5maW5kYWxsKCkuCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGxpc3QgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTc1NiwxNyArNjk2LDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kYWxsKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMgU2FtZSBhcyBnZXRyb290KCkuaXRlcmZpbmQocGF0aCkuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKSwgd2hpY2ggaXMgZWxlbWVudC5pdGVyZmluZCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzc4LDI2ICs3MTgsMzUgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXJmaW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuCi0gICAgIwotICAgICMgQGRlZiB3cml0ZShmaWxlLCAqKm9wdGlvbnMpCi0gICAgIyBAcGFyYW0gZmlsZSBBIGZpbGUgbmFtZSwgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcuCi0gICAgIyBAcGFyYW0gKipvcHRpb25zIE9wdGlvbnMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotICAgICMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0gICAgIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSAgICAjIEBrZXlwYXJhbSB4bWxfZGVjbGFyYXRpb24gQ29udHJvbHMgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZAotICAgICMgICAgIGJlIGFkZGVkIHRvIHRoZSBmaWxlLiAgVXNlIEZhbHNlIGZvciBuZXZlciwgVHJ1ZSBmb3IgYWx3YXlzLAotICAgICMgICAgIE5vbmUgZm9yIG9ubHkgaWYgbm90IFVTLUFTQ0lJIG9yIFVURi04IG9yIFVuaWNvZGUuICBOb25lIGlzIGRlZmF1bHQuCi0gICAgIyBAa2V5cGFyYW0gZGVmYXVsdF9uYW1lc3BhY2UgU2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikuCi0gICAgIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotICAgICMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0KICAgICBkZWYgd3JpdGUoc2VsZiwgZmlsZV9vcl9maWxlbmFtZSwKICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwKICAgICAgICAgICAgICAgeG1sX2RlY2xhcmF0aW9uPU5vbmUsCiAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsCi0gICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKKyAgICAgICAgICAgICAgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgorICAgICAgICAiIiJXcml0ZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlIGFzIFhNTC4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgKmZpbGVfb3JfZmlsZW5hbWUqIC0tIGZpbGUgbmFtZSBvciBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZworCisgICAgICAgICAgKmVuY29kaW5nKiAtLSB0aGUgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0OiBVUy1BU0NJSSkKKworICAgICAgICAgICp4bWxfZGVjbGFyYXRpb24qIC0tIGJvb2wgaW5kaWNhdGluZyBpZiBhbiBYTUwgZGVjbGFyYXRpb24gc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIG91dHB1dC4gSWYgTm9uZSwgYW4gWE1MIGRlY2xhcmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWRkZWQgaWYgZW5jb2RpbmcgSVMgTk9UIGVpdGhlciBvZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUy1BU0NJSSwgVVRGLTgsIG9yIFVuaWNvZGUKKworICAgICAgICAgICpkZWZhdWx0X25hbWVzcGFjZSogLS0gc2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikKKworICAgICAgICAgICptZXRob2QqIC0tIGVpdGhlciAieG1sIiAoZGVmYXVsdCksICJodG1sLCAidGV4dCIsIG9yICJjMTRuIgorCisgICAgICAgICAgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiAtLSBjb250cm9scyB0aGUgZm9ybWF0dGluZyBvZiBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIG5vIGNvbnRlbnQuIElmIFRydWUgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIG90aGVyd2lzZSB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgcGFpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc3RhcnQvZW5kIHRhZ3MKKworICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IG1ldGhvZDoKICAgICAgICAgICAgIG1ldGhvZCA9ICJ4bWwiCiAgICAgICAgIGVsaWYgbWV0aG9kIG5vdCBpbiBfc2VyaWFsaXplOgpAQCAtODI1LDcgKzc3NCw4IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHFuYW1lcywgbmFtZXNwYWNlcyA9IF9uYW1lc3BhY2VzKHNlbGYuX3Jvb3QsIGRlZmF1bHRfbmFtZXNwYWNlKQogICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSA9IF9zZXJpYWxpemVbbWV0aG9kXQotICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSh3cml0ZSwgc2VsZi5fcm9vdCwgcW5hbWVzLCBuYW1lc3BhY2VzKQorICAgICAgICAgICAgICAgIHNlcmlhbGl6ZSh3cml0ZSwgc2VsZi5fcm9vdCwgcW5hbWVzLCBuYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKIAogICAgIGRlZiB3cml0ZV9jMTRuKHNlbGYsIGZpbGUpOgogICAgICAgICAjIGx4bWwuZXRyZWUgY29tcGF0aWJpbGl0eS4gIHVzZSBvdXRwdXQgbWV0aG9kIGluc3RlYWQKQEAgLTk0Nyw3ICs4OTcsOCBAQAogICAgICAgICAgICAgYWRkX3FuYW1lKHRleHQudGV4dCkKICAgICByZXR1cm4gcW5hbWVzLCBuYW1lc3BhY2VzCiAKLWRlZiBfc2VyaWFsaXplX3htbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzKToKK2RlZiBfc2VyaWFsaXplX3htbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzLAorICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzLCAqKmt3YXJncyk6CiAgICAgdGFnID0gZWxlbS50YWcKICAgICB0ZXh0ID0gZWxlbS50ZXh0CiAgICAgaWYgdGFnIGlzIENvbW1lbnQ6CkBAIC05NjAsNyArOTExLDggQEAKICAgICAgICAgICAgIGlmIHRleHQ6CiAgICAgICAgICAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YSh0ZXh0KSkKICAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd3JpdGUoIjwiICsgdGFnKQogICAgICAgICAgICAgaXRlbXMgPSBsaXN0KGVsZW0uaXRlbXMoKSkKQEAgLTk4MiwxMiArOTM0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gX2VzY2FwZV9hdHRyaWIodikKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoIiAlcz1cIiVzXCIiICUgKHFuYW1lc1trXSwgdikpCi0gICAgICAgICAgICBpZiB0ZXh0IG9yIGxlbihlbGVtKToKKyAgICAgICAgICAgIGlmIHRleHQgb3IgbGVuKGVsZW0pIG9yIG5vdCBzaG9ydF9lbXB0eV9lbGVtZW50czoKICAgICAgICAgICAgICAgICB3cml0ZSgiPiIpCiAgICAgICAgICAgICAgICAgaWYgdGV4dDoKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YSh0ZXh0KSkKICAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICAgICAgICAgICAgICB3cml0ZSgiPC8iICsgdGFnICsgIj4iKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB3cml0ZSgiIC8+IikKQEAgLTEwMDIsNyArOTU1LDcgQEAKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgcGFzcwogCi1kZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorZGVmIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzLCAqKmt3YXJncyk6CiAgICAgdGFnID0gZWxlbS50YWcKICAgICB0ZXh0ID0gZWxlbS50ZXh0CiAgICAgaWYgdGFnIGlzIENvbW1lbnQ6CkBAIC0xMDY2LDE4ICsxMDE5LDE5IEBACiAjICAgImMxNG4iOiBfc2VyaWFsaXplX2MxNG4sCiB9CiAKLSMjCi0jIFJlZ2lzdGVycyBhIG5hbWVzcGFjZSBwcmVmaXguICBUaGUgcmVnaXN0cnkgaXMgZ2xvYmFsLCBhbmQgYW55Ci0jIGV4aXN0aW5nIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJCi0jIHdpbGwgYmUgcmVtb3ZlZC4KLSMKLSMgQHBhcmFtIHByZWZpeCBOYW1lc3BhY2UgcHJlZml4LgotIyBAcGFyYW0gdXJpIE5hbWVzcGFjZSB1cmkuICBUYWdzIGFuZCBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlCi0jICAgICB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LCBpZiBhdCBhbGwgcG9zc2libGUuCi0jIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiB0aGUgcHJlZml4IGlzIHJlc2VydmVkLCBvciBpcyBvdGhlcndpc2UKLSMgICAgIGludmFsaWQuCiAKIGRlZiByZWdpc3Rlcl9uYW1lc3BhY2UocHJlZml4LCB1cmkpOgorICAgICIiIlJlZ2lzdGVyIGEgbmFtZXNwYWNlIHByZWZpeC4KKworICAgIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZQorICAgIGdpdmVuIHByZWZpeCBvciB0aGUgbmFtZXNwYWNlIFVSSSB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAqcHJlZml4KiBpcyB0aGUgbmFtZXNwYWNlIHByZWZpeCwgKnVyaSogaXMgYSBuYW1lc3BhY2UgdXJpLiBUYWdzIGFuZAorICAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2Ugd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggcHJlZml4IGlmIHBvc3NpYmxlLgorCisgICAgVmFsdWVFcnJvciBpcyByYWlzZWQgaWYgcHJlZml4IGlzIHJlc2VydmVkIG9yIGlzIGludmFsaWQuCisKKyAgICAiIiIKICAgICBpZiByZS5tYXRjaCgibnNcZCskIiwgcHJlZml4KToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJlZml4IGZvcm1hdCByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlIikKICAgICBmb3IgaywgdiBpbiBsaXN0KF9uYW1lc3BhY2VfbWFwLml0ZW1zKCkpOgpAQCAtMTE1Myw0MCArMTEwNywyNyBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAotIyBzdWJlbGVtZW50cy4gIElmIGVuY29kaW5nIGlzICJ1bmljb2RlIiwgdGhlIHJldHVybiB0eXBlIGlzIGEgc3RyaW5nOwotIyBvdGhlcndpc2UgaXQgaXMgYSBieXRlcyBhcnJheS4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0jICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLSMgQHJldHVybiBBbiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc3RyaW5nCitkZWYgdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSk6CisgICAgIiIiR2VuZXJhdGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFhNTCBlbGVtZW50LgogCi1kZWYgdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUpOgorICAgIEFsbCBzdWJlbGVtZW50cyBhcmUgaW5jbHVkZWQuICBJZiBlbmNvZGluZyBpcyAidW5pY29kZSIsIGEgc3RyaW5nCisgICAgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSBhIGJ5dGVzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICAqZWxlbWVudCogaXMgYW4gRWxlbWVudCBpbnN0YW5jZSwgKmVuY29kaW5nKiBpcyBhbiBvcHRpb25hbCBvdXRwdXQKKyAgICBlbmNvZGluZyBkZWZhdWx0aW5nIHRvIFVTLUFTQ0lJLCAqbWV0aG9kKiBpcyBhbiBvcHRpb25hbCBvdXRwdXQgd2hpY2ggY2FuCisgICAgYmUgb25lIG9mICJ4bWwiIChkZWZhdWx0KSwgImh0bWwiLCAidGV4dCIgb3IgImMxNG4iLgorCisgICAgUmV0dXJucyBhbiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCisKKyAgICAiIiIKICAgICBzdHJlYW0gPSBpby5TdHJpbmdJTygpIGlmIGVuY29kaW5nID09ICd1bmljb2RlJyBlbHNlIGlvLkJ5dGVzSU8oKQotICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QpCisgICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICByZXR1cm4gc3RyZWFtLmdldHZhbHVlKCkKIAotIyMKLSMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCi0jIHN1YmVsZW1lbnRzLgotIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0jIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0jICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotIyBAcmV0dXJuIEEgc2VxdWVuY2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgotIyBAZGVmcmV0dXJuIHNlcXVlbmNlCi0jIEBzaW5jZSAxLjMKLQogY2xhc3MgX0xpc3REYXRhU3RyZWFtKGlvLkJ1ZmZlcmVkSU9CYXNlKToKLSAgICAiIiIgQW4gYXV4aWxpYXJ5IHN0cmVhbSBhY2N1bXVsYXRpbmcgaW50byBhIGxpc3QgcmVmZXJlbmNlCi0gICAgIiIiCisgICAgIiIiQW4gYXV4aWxpYXJ5IHN0cmVhbSBhY2N1bXVsYXRpbmcgaW50byBhIGxpc3QgcmVmZXJlbmNlLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsc3QpOgogICAgICAgICBzZWxmLmxzdCA9IGxzdAogCkBAIC0xMjAyLDIyICsxMTQzLDI1IEBACiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5sc3QpCiAKLWRlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUpOgorZGVmIHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSk6CiAgICAgbHN0ID0gW10KICAgICBzdHJlYW0gPSBfTGlzdERhdGFTdHJlYW0obHN0KQotICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QpCisgICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICByZXR1cm4gbHN0CiAKLSMjCi0jIFdyaXRlcyBhbiBlbGVtZW50IHRyZWUgb3IgZWxlbWVudCBzdHJ1Y3R1cmUgdG8gc3lzLnN0ZG91dC4gIFRoaXMKLSMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgotIyA8cD4KLSMgVGhlIGV4YWN0IG91dHB1dCBmb3JtYXQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgSW4gdGhpcwotIyB2ZXJzaW9uLCBpdCdzIHdyaXR0ZW4gYXMgYW4gb3JkaW5hcnkgWE1MIGZpbGUuCi0jCi0jIEBwYXJhbSBlbGVtIEFuIGVsZW1lbnQgdHJlZSBvciBhbiBpbmRpdmlkdWFsIGVsZW1lbnQuCiAKIGRlZiBkdW1wKGVsZW0pOgorICAgICIiIldyaXRlIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LgorCisgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCisKKyAgICAqZWxlbSogaXMgZWl0aGVyIGFuIEVsZW1lbnRUcmVlLCBvciBhIHNpbmdsZSBFbGVtZW50LiAgVGhlIGV4YWN0IG91dHB1dAorICAgIGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzIHZlcnNpb24sIGl0J3Mgd3JpdHRlbiBhcyBhbgorICAgIG9yZGluYXJ5IFhNTCBmaWxlLgorCisgICAgIiIiCiAgICAgIyBkZWJ1Z2dpbmcKICAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtLCBFbGVtZW50VHJlZSk6CiAgICAgICAgIGVsZW0gPSBFbGVtZW50VHJlZShlbGVtKQpAQCAtMTIyOSwxNDQgKzExNzMsMTY5IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIHBhcnNpbmcKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZS4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnRUcmVlIGluc3RhbmNlCiAKIGRlZiBwYXJzZShzb3VyY2UsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgaW50byBlbGVtZW50IHRyZWUuCisKKyAgICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEsCisgICAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlIGRlZmF1bHRpbmcgdG8gWE1MUGFyc2VyLgorCisgICAgUmV0dXJuIGFuIEVsZW1lbnRUcmVlIGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgdHJlZSA9IEVsZW1lbnRUcmVlKCkKICAgICB0cmVlLnBhcnNlKHNvdXJjZSwgcGFyc2VyKQogICAgIHJldHVybiB0cmVlCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseSwgYW5kIHJlcG9ydHMKLSMgd2hhdCdzIGdvaW5nIG9uIHRvIHRoZSB1c2VyLgotIwotIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIGV2ZW50cyBBIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgSWYgb21pdHRlZCwgb25seSAiZW5kIgotIyAgICAgZXZlbnRzIGFyZSByZXBvcnRlZC4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQSAoZXZlbnQsIGVsZW0pIGl0ZXJhdG9yLgogCiBkZWYgaXRlcnBhcnNlKHNvdXJjZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJJbmNyZW1lbnRhbGx5IHBhcnNlIFhNTCBkb2N1bWVudCBpbnRvIEVsZW1lbnRUcmVlLgorCisgICAgVGhpcyBjbGFzcyBhbHNvIHJlcG9ydHMgd2hhdCdzIGdvaW5nIG9uIHRvIHRoZSB1c2VyIGJhc2VkIG9uIHRoZQorICAgICpldmVudHMqIGl0IGlzIGluaXRpYWxpemVkIHdpdGguICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MKKyAgICAic3RhcnQiLCAiZW5kIiwgInN0YXJ0LW5zIiBhbmQgImVuZC1ucyIgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQKKyAgICBkZXRhaWxlZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seQorICAgICJlbmQiIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCisKKyAgICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEsICpldmVudHMqIGlzCisgICAgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjaywgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLgorCisgICAgUmV0dXJucyBhbiBpdGVyYXRvciBwcm92aWRpbmcgKGV2ZW50LCBlbGVtKSBwYWlycy4KKworICAgICIiIgogICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlCiAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgogICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKICAgICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZQotICAgIGlmIG5vdCBwYXJzZXI6Ci0gICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICByZXR1cm4gX0l0ZXJQYXJzZUl0ZXJhdG9yKHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIsIGNsb3NlX3NvdXJjZSkKIAorCitjbGFzcyBYTUxQdWxsUGFyc2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50cz1Ob25lLCAqLCBfcGFyc2VyPU5vbmUpOgorICAgICAgICAjIFRoZSBfcGFyc2VyIGFyZ3VtZW50IGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgbXVzdCBub3QgYmUgcmVsaWVkCisgICAgICAgICMgdXBvbiBpbiB1c2VyIGNvZGUuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTc3NDEgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAjIF9lbGVtZW50dHJlZS5jIGV4cGVjdHMgYSBsaXN0LCBub3QgYSBkZXF1ZQorICAgICAgICBzZWxmLl9ldmVudHNfcXVldWUgPSBbXQorICAgICAgICBzZWxmLl9pbmRleCA9IDAKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gX3BhcnNlciBvciBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCisgICAgICAgICMgd2lyZSB1cCB0aGUgcGFyc2VyIGZvciBldmVudCByZXBvcnRpbmcKKyAgICAgICAgaWYgZXZlbnRzIGlzIE5vbmU6CisgICAgICAgICAgICBldmVudHMgPSAoImVuZCIsKQorICAgICAgICBzZWxmLl9wYXJzZXIuX3NldGV2ZW50cyhzZWxmLl9ldmVudHNfcXVldWUsIGV2ZW50cykKKworICAgIGRlZiBmZWVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJGZWVkIGVuY29kZWQgZGF0YSB0byBwYXJzZXIuIiIiCisgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmVlZCgpIGNhbGxlZCBhZnRlciBlbmQgb2Ygc3RyZWFtIikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHNfcXVldWUuYXBwZW5kKGV4YykKKworICAgIGRlZiBfY2xvc2VfYW5kX3JldHVybl9yb290KHNlbGYpOgorICAgICAgICAjIGl0ZXJwYXJzZSBuZWVkcyB0aGlzIHRvIHNldCBpdHMgcm9vdCBhdHRyaWJ1dGUgcHJvcGVybHkgOigKKyAgICAgICAgcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpCisgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHJvb3QKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIGZlZWRpbmcgZGF0YSB0byBwYXJzZXIuCisKKyAgICAgICAgVW5saWtlIFhNTFBhcnNlciwgZG9lcyBub3QgcmV0dXJuIHRoZSByb290IGVsZW1lbnQuIFVzZQorICAgICAgICByZWFkX2V2ZW50cygpIHRvIGNvbnN1bWUgZWxlbWVudHMgZnJvbSBYTUxQdWxsUGFyc2VyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2xvc2VfYW5kX3JldHVybl9yb290KCkKKworICAgIGRlZiByZWFkX2V2ZW50cyhzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIGN1cnJlbnRseSBhdmFpbGFibGUgKGV2ZW50LCBlbGVtKSBwYWlycy4KKworICAgICAgICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIGV2ZW50IHF1ZXVlIGFzIHRoZXkgYXJlCisgICAgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50cyA9IHNlbGYuX2V2ZW50c19xdWV1ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLl9pbmRleAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRzW3NlbGYuX2luZGV4XQorICAgICAgICAgICAgICAgICMgQXZvaWQgcmV0YWluaW5nIHJlZmVyZW5jZXMgdG8gcGFzdCBldmVudHMKKyAgICAgICAgICAgICAgICBldmVudHNbc2VsZi5faW5kZXhdID0gTm9uZQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgICMgQ29tcGFjdCB0aGUgbGlzdCBpbiBhIE8oMSkgYW1vcnRpemVkIGZhc2hpb24KKyAgICAgICAgICAgICMgQXMgbm90ZWQgYWJvdmUsIF9lbGVtZW50cmVlLmMgbmVlZHMgYSBsaXN0LCBub3QgYSBkZXF1ZQorICAgICAgICAgICAgaWYgaW5kZXggKiAyID49IGxlbihldmVudHMpOgorICAgICAgICAgICAgICAgIGV2ZW50c1s6aW5kZXhdID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSBpbmRleAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICByYWlzZSBldmVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBldmVudAorCisKIGNsYXNzIF9JdGVyUGFyc2VJdGVyYXRvcjoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2U9RmFsc2UpOgorICAgICAgICAjIFVzZSB0aGUgaW50ZXJuYWwsIHVuZG9jdW1lbnRlZCBfcGFyc2VyIGFyZ3VtZW50IGZvciBub3c7IFdoZW4gdGhlCisgICAgICAgICMgcGFyc2VyIGFyZ3VtZW50IG9mIGl0ZXJwYXJzZSBpcyByZW1vdmVkLCB0aGlzIGNhbiBiZSBraWxsZWQuCisgICAgICAgIHNlbGYuX3BhcnNlciA9IFhNTFB1bGxQYXJzZXIoZXZlbnRzPWV2ZW50cywgX3BhcnNlcj1wYXJzZXIpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBzb3VyY2UKICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IGNsb3NlX3NvdXJjZQotICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCiAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgotICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlci5fcGFyc2VyCi0gICAgICAgIGFwcGVuZCA9IHNlbGYuX2V2ZW50cy5hcHBlbmQKLSAgICAgICAgaWYgZXZlbnRzIGlzIE5vbmU6Ci0gICAgICAgICAgICBldmVudHMgPSBbImVuZCJdCi0gICAgICAgIGZvciBldmVudCBpbiBldmVudHM6Ci0gICAgICAgICAgICBpZiBldmVudCA9PSAic3RhcnQiOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnRfbGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fcGFyc2VyLl9zdGFydCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZCI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ9c2VsZi5fcGFyc2VyLl9lbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAic3RhcnQtbnMiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAiZW5kLW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgTm9uZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGV2ZW50ICVyIiAlIGV2ZW50KQogCiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICBlID0gc2VsZi5fZXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLl9wYXJzZXIucmVhZF9ldmVudHMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQKKyAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlci5fcGFyc2VyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYgKiAxMDI0KQogICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBleGMKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5fY2xvc2VfYW5kX3JldHVybl9yb290KCkKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBjYW4KLSMgYmUgdXNlZCB0byBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50LgorCisgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbWJlZCAiWE1MIExpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLCAqcGFyc2VyKiBpcyBhbgorICAgIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCiAgICAgcmV0dXJuIHBhcnNlci5jbG9zZSgpCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudCwgYW5kIGFsc28gcmV0dXJucwotIyBhIGRpY3Rpb25hcnkgd2hpY2ggbWFwcyBmcm9tIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgYW4gRWxlbWVudCBpbnN0YW5jZSBhbmQgYSBkaWN0aW9uYXJ5LgotIyBAZGVmcmV0dXJuIChFbGVtZW50LCBkaWN0aW9uYXJ5KQogCiBkZWYgWE1MSUQodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudCBmb3IgaXRzIElEcy4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLCAqcGFyc2VyKiBpcyBhbgorICAgIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiAoRWxlbWVudCwgZGljdCkgdHVwbGUsIGluIHdoaWNoIHRoZQorICAgIGRpY3QgbWFwcyBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKQEAgLTEzNzgsMjcgKzEzNDcsMTggQEAKICAgICAgICAgICAgIGlkc1tpZF0gPSBlbGVtCiAgICAgcmV0dXJuIHRyZWUsIGlkcwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBTYW1lIGFzIHtAbGluayAjWE1MfS4KLSMKLSMgQGRlZiBmcm9tc3RyaW5nKHRleHQpCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQorIyBQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQuICBBbGlhcyBmb3IgWE1MKCkuCiBmcm9tc3RyaW5nID0gWE1MCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCi0jCi0jIEBwYXJhbSBzZXF1ZW5jZSBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBYTUwgZGF0YSBmcmFnbWVudHMuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAotIyBAc2luY2UgMS4zCi0KIGRlZiBmcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCisKKyAgICAqc2VxdWVuY2UqIGlzIGEgbGlzdCBvZiBvdGhlciBzZXF1ZW5jZSwgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyCisgICAgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBmb3IgdGV4dCBpbiBzZXF1ZW5jZToKQEAgLTE0MDcsMTkgKzEzNjcsMjAgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZQotIyBvZiB7QGxpbmsgI1RyZWVCdWlsZGVyLnN0YXJ0fSwge0BsaW5rICNUcmVlQnVpbGRlci5kYXRhfSwgYW5kIHtAbGluawotIyAjVHJlZUJ1aWxkZXIuZW5kfSBtZXRob2QgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4KLSMgPHA+Ci0jIFlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYnVpbGQgYW4gZWxlbWVudCBzdHJ1Y3R1cmUgdXNpbmcgYSBjdXN0b20gWE1MCi0jIHBhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgotIwotIyBAcGFyYW0gZWxlbWVudF9mYWN0b3J5IE9wdGlvbmFsIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeQotIyAgICBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgogCiBjbGFzcyBUcmVlQnVpbGRlcjoKKyAgICAiIiJHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuCiAKKyAgICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZSBvZiBzdGFydCwgZGF0YSwgYW5kIGVuZCBtZXRob2QKKyAgICBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgorCisgICAgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKKyAgICBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvciBzb21lIG90aGVyIFhNTC1saWtlIGZvcm1hdC4KKworICAgICplbGVtZW50X2ZhY3RvcnkqIGlzIGFuIG9wdGlvbmFsIGVsZW1lbnQgZmFjdG9yeSB3aGljaCBpcyBjYWxsZWQKKyAgICB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF9mYWN0b3J5PU5vbmUpOgogICAgICAgICBzZWxmLl9kYXRhID0gW10gIyBkYXRhIGNvbGxlY3RvcgogICAgICAgICBzZWxmLl9lbGVtID0gW10gIyBlbGVtZW50IHN0YWNrCkBAIC0xNDI5LDE0ICsxMzkwLDggQEAKICAgICAgICAgICAgIGVsZW1lbnRfZmFjdG9yeSA9IEVsZW1lbnQKICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IGVsZW1lbnRfZmFjdG9yeQogCi0gICAgIyMKLSAgICAjIEZsdXNoZXMgdGhlIGJ1aWxkZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50Ci0gICAgIyBlbGVtZW50LgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGbHVzaCBidWlsZGVyIGJ1ZmZlcnMgYW5kIHJldHVybiB0b3BsZXZlbCBkb2N1bWVudCBFbGVtZW50LiIiIgogICAgICAgICBhc3NlcnQgbGVuKHNlbGYuX2VsZW0pID09IDAsICJtaXNzaW5nIGVuZCB0YWdzIgogICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdCBpcyBub3QgTm9uZSwgIm1pc3NpbmcgdG9wbGV2ZWwgZWxlbWVudCIKICAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3QKQEAgLTE0NTMsMjQgKzE0MDgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdC50ZXh0ID0gdGV4dAogICAgICAgICAgICAgc2VsZi5fZGF0YSA9IFtdCiAKLSAgICAjIwotICAgICMgQWRkcyB0ZXh0IHRvIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGRhdGEgQSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZSBlaXRoZXIgYW4gOC1iaXQgc3RyaW5nCi0gICAgIyAgICBjb250YWluaW5nIEFTQ0lJIHRleHQsIG9yIGEgVW5pY29kZSBzdHJpbmcuCi0KICAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQWRkIHRleHQgdG8gY3VycmVudCBlbGVtZW50LiIiIgogICAgICAgICBzZWxmLl9kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgIyMKLSAgICAjIE9wZW5zIGEgbmV3IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotICAgICMgQHBhcmFtIGF0dHJpYiBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0gICAgIyBAcmV0dXJuIFRoZSBvcGVuZWQgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cnMpOgorICAgICAgICAiIiJPcGVuIG5ldyBlbGVtZW50IGFuZCByZXR1cm4gaXQuCisKKyAgICAgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZSwgKmF0dHJzKiBpcyBhIGRpY3QgY29udGFpbmluZyBlbGVtZW50CisgICAgICAgIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZsdXNoKCkKICAgICAgICAgc2VsZi5fbGFzdCA9IGVsZW0gPSBzZWxmLl9mYWN0b3J5KHRhZywgYXR0cnMpCiAgICAgICAgIGlmIHNlbGYuX2VsZW06CkBAIC0xNDc5LDE0ICsxNDI3LDEyIEBACiAgICAgICAgIHNlbGYuX3RhaWwgPSAwCiAgICAgICAgIHJldHVybiBlbGVtCiAKLSAgICAjIwotICAgICMgQ2xvc2VzIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotICAgICMgQHJldHVybiBUaGUgY2xvc2VkIGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAgICAgIiIiQ2xvc2UgYW5kIHJldHVybiBjdXJyZW50IEVsZW1lbnQuCisKKyAgICAgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZmx1c2goKQogICAgICAgICBzZWxmLl9sYXN0ID0gc2VsZi5fZWxlbS5wb3AoKQogICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdC50YWcgPT0gdGFnLFwKQEAgLTE0OTUsMjAgKzE0NDEsMTggQEAKICAgICAgICAgc2VsZi5fdGFpbCA9IDEKICAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3QKIAotIyMKLSMgRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUKLSMgPGI+ZXhwYXQ8L2I+IHBhcnNlci4KLSMKLSMgQGtleXBhcmFtIHRhcmdldCBUYXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlIGJ1aWxkZXIgdXNlcyBhbgotIyAgICAgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIHtAbGluayAjVHJlZUJ1aWxkZXJ9IGNsYXNzLgotIyBAa2V5cGFyYW0gaHRtbCBQcmVkZWZpbmUgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkCi0jICAgICBieSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIGVuY29kaW5nLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMKLSMgICAgIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlLgotIyBAc2VlICNFbGVtZW50VHJlZQotIyBAc2VlICNUcmVlQnVpbGRlcgogCisjIGFsc28gc2VlIEVsZW1lbnRUcmVlIGFuZCBUcmVlQnVpbGRlcgogY2xhc3MgWE1MUGFyc2VyOgorICAgICIiIkVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSBiYXNlZCBvbiB0aGUgZXhwYXQgcGFyc2VyLgorCisgICAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMgKG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5KSwKKyAgICAqdGFyZ2V0KiBpcyBhbiBvcHRpb25hbCB0YXJnZXQgb2JqZWN0IHdoaWNoIGRlZmF1bHRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZQorICAgIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIGVuY29kaW5nIHN0cmluZworICAgIHdoaWNoIGlmIGdpdmVuLCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGU6CisgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cworCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgICAgIHRyeToKQEAgLTE1NDEsMTkgKzE0ODUsMTAgQEAKICAgICAgICAgICAgIHBhcnNlci5Db21tZW50SGFuZGxlciA9IHRhcmdldC5jb21tZW50CiAgICAgICAgIGlmIGhhc2F0dHIodGFyZ2V0LCAncGknKToKICAgICAgICAgICAgIHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gdGFyZ2V0LnBpCi0gICAgICAgICMgbGV0IGV4cGF0IGRvIHRoZSBidWZmZXJpbmcsIGlmIHN1cHBvcnRlZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIyB1c2UgbmV3LXN0eWxlIGF0dHJpYnV0ZSBoYW5kbGluZywgaWYgc3VwcG9ydGVkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgJ3N0YXJ0Jyk6Ci0gICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLl9zdGFydF9saXN0Ci0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBDb25maWd1cmUgcHlleHBhdDogYnVmZmVyaW5nLCBuZXctc3R5bGUgYXR0cmlidXRlIGhhbmRsaW5nLgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKICAgICAgICAgc2VsZi5lbnRpdHkgPSB7fQogICAgICAgICB0cnk6CkBAIC0xNTYxLDYgKzE0OTYsMzkgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIHVua25vd24KIAorICAgIGRlZiBfc2V0ZXZlbnRzKHNlbGYsIGV2ZW50c19xdWV1ZSwgZXZlbnRzX3RvX3JlcG9ydCk6CisgICAgICAgICMgSW50ZXJuYWwgQVBJIGZvciBYTUxQdWxsUGFyc2VyCisgICAgICAgICMgZXZlbnRzX3RvX3JlcG9ydDogYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgZHVyaW5nIHBhcnNpbmcgKHNhbWUgYXMKKyAgICAgICAgIyB0aGUgKmV2ZW50cyogb2YgWE1MUHVsbFBhcnNlcidzIGNvbnN0cnVjdG9yLgorICAgICAgICAjIGV2ZW50c19xdWV1ZTogYSBsaXN0IG9mIGFjdHVhbCBwYXJzaW5nIGV2ZW50cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkCisgICAgICAgICMgYnkgdGhlIHVuZGVybHlpbmcgcGFyc2VyLgorICAgICAgICAjCisgICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlcgorICAgICAgICBhcHBlbmQgPSBldmVudHNfcXVldWUuYXBwZW5kCisgICAgICAgIGZvciBldmVudF9uYW1lIGluIGV2ZW50c190b19yZXBvcnQ6CisgICAgICAgICAgICBpZiBldmVudF9uYW1lID09ICJzdGFydCI6CisgICAgICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fc3RhcnQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQorICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJlbmQiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ9c2VsZi5fZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgZW5kKHRhZykpKQorICAgICAgICAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAic3RhcnQtbnMiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgKHByZWZpeCBvciAiIiwgdXJpIG9yICIiKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gImVuZC1ucyI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgTm9uZSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGV2ZW50ICVyIiAlIGV2ZW50X25hbWUpCisKICAgICBkZWYgX3JhaXNlZXJyb3Ioc2VsZiwgdmFsdWUpOgogICAgICAgICBlcnIgPSBQYXJzZUVycm9yKHZhbHVlKQogICAgICAgICBlcnIuY29kZSA9IHZhbHVlLmNvZGUKQEAgLTE1NzgsMjEgKzE1NDYsMTYgQEAKICAgICAgICAgICAgIHNlbGYuX25hbWVzW2tleV0gPSBuYW1lCiAgICAgICAgIHJldHVybiBuYW1lCiAKLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHRhZywgYXR0cmliX2luKToKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHRhZywgYXR0cl9saXN0KToKKyAgICAgICAgIyBIYW5kbGVyIGZvciBleHBhdCdzIFN0YXJ0RWxlbWVudEhhbmRsZXIuIFNpbmNlIG9yZGVyZWRfYXR0cmlidXRlcworICAgICAgICAjIGlzIHNldCwgdGhlIGF0dHJpYnV0ZXMgYXJlIHJlcG9ydGVkIGFzIGEgbGlzdCBvZiBhbHRlcm5hdGluZworICAgICAgICAjIGF0dHJpYnV0ZSBuYW1lLHZhbHVlLgogICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQogICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKICAgICAgICAgYXR0cmliID0ge30KLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cmliX2luLml0ZW1zKCk6Ci0gICAgICAgICAgICBhdHRyaWJbZml4bmFtZShrZXkpXSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKLQotICAgIGRlZiBfc3RhcnRfbGlzdChzZWxmLCB0YWcsIGF0dHJpYl9pbik6Ci0gICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCi0gICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQotICAgICAgICBhdHRyaWIgPSB7fQotICAgICAgICBpZiBhdHRyaWJfaW46Ci0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cmliX2luKSwgMik6Ci0gICAgICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoYXR0cmliX2luW2ldKV0gPSBhdHRyaWJfaW5baSsxXQorICAgICAgICBpZiBhdHRyX2xpc3Q6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cl9saXN0KSwgMik6CisgICAgICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoYXR0cl9saXN0W2ldKV0gPSBhdHRyX2xpc3RbaSsxXQogICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCiAKICAgICBkZWYgX2VuZChzZWxmLCB0YWcpOgpAQCAtMTY1MCwxNSArMTYxMywxMyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbVsxOi0xXSkKICAgICAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogCi0gICAgIyMKLSAgICAjIChEZXByZWNhdGVkKSBIYW5kbGVzIGEgZG9jdHlwZSBkZWNsYXJhdGlvbi4KLSAgICAjCi0gICAgIyBAcGFyYW0gbmFtZSBEb2N0eXBlIG5hbWUuCi0gICAgIyBAcGFyYW0gcHViaWQgUHVibGljIGlkZW50aWZpZXIuCi0gICAgIyBAcGFyYW0gc3lzdGVtIFN5c3RlbSBpZGVudGlmaWVyLgotCiAgICAgZGVmIGRvY3R5cGUoc2VsZiwgbmFtZSwgcHViaWQsIHN5c3RlbSk6Ci0gICAgICAgICIiIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiIiIgorICAgICAgICAiIiIoRGVwcmVjYXRlZCkgIEhhbmRsZSBkb2N0eXBlIGRlY2xhcmF0aW9uCisKKyAgICAgICAgKm5hbWUqIGlzIHRoZSBEb2N0eXBlIG5hbWUsICpwdWJpZCogaXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyLAorICAgICAgICBhbmQgKnN5c3RlbSogaXMgdGhlIHN5c3RlbSBpZGVudGlmaWVyLgorCisgICAgICAgICIiIgogICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUoKSAiCiAgICAgICAgICAgICAibWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKQEAgLTE2NjgsMjQgKzE2MjksMTUgQEAKICAgICAjIHNlbnRpbmVsLCBpZiBkb2N0eXBlIGlzIHJlZGVmaW5lZCBpbiBhIHN1YmNsYXNzCiAgICAgX19kb2N0eXBlID0gZG9jdHlwZQogCi0gICAgIyMKLSAgICAjIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4KLSAgICAjCi0gICAgIyBAcGFyYW0gZGF0YSBFbmNvZGVkIGRhdGEuCi0KICAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiRmVlZCBlbmNvZGVkIGRhdGEgdG8gcGFyc2VyLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5QYXJzZShkYXRhLCAwKQogICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKICAgICAgICAgICAgIHNlbGYuX3JhaXNlZXJyb3IodikKIAotICAgICMjCi0gICAgIyBGaW5pc2hlcyBmZWVkaW5nIGRhdGEgdG8gdGhlIHBhcnNlci4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGVsZW1lbnQgc3RydWN0dXJlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZpbmlzaCBmZWVkaW5nIGRhdGEgdG8gcGFyc2VyIGFuZCByZXR1cm4gZWxlbWVudCBzdHJ1Y3R1cmUuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCIiLCAxKSAjIGVuZCBvZiBkYXRhCiAgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciBhcyB2OgpAQCAtMTcwNCwxMDMgKzE2NTYsMTIgQEAKIAogIyBJbXBvcnQgdGhlIEMgYWNjZWxlcmF0b3JzCiB0cnk6CisgICAgIyBFbGVtZW50IGlzIGdvaW5nIHRvIGJlIHNoYWRvd2VkIGJ5IHRoZSBDIGltcGxlbWVudGF0aW9uLiBXZSBuZWVkIHRvIGtlZXAKKyAgICAjIHRoZSBQeXRob24gdmVyc2lvbiBvZiBpdCBhY2Nlc3NpYmxlIGZvciBzb21lICJjcmVhdGl2ZSIgYnkgZXh0ZXJuYWwgY29kZQorICAgICMgKHNlZSB0ZXN0cykKKyAgICBfRWxlbWVudF9QeSA9IEVsZW1lbnQKKwogICAgICMgRWxlbWVudCwgU3ViRWxlbWVudCwgUGFyc2VFcnJvciwgVHJlZUJ1aWxkZXIsIFhNTFBhcnNlcgogICAgIGZyb20gX2VsZW1lbnR0cmVlIGltcG9ydCAqCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwotZWxzZToKLSAgICAjIE92ZXJ3cml0ZSAnRWxlbWVudFRyZWUucGFyc2UnIGFuZCAnaXRlcnBhcnNlJyB0byB1c2UgdGhlIEMgWE1MUGFyc2VyCi0KLSAgICBjbGFzcyBFbGVtZW50VHJlZShFbGVtZW50VHJlZSk6Ci0gICAgICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKLSAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICdyZWFkJyk6Ci0gICAgICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICdyYicpCi0gICAgICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHBhcnNlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZCg2NTUzNikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLl9wYXJzZShzb3VyY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgY2xvc2Vfc291cmNlOgotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQotCi0gICAgY2xhc3MgaXRlcnBhcnNlOgotICAgICAgICAiIiJQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseS4KLQotICAgICAgICBSZXBvcnRzIHdoYXTigJlzIGdvaW5nIG9uIHRvIHRoZSB1c2VyLiAnc291cmNlJyBpcyBhIGZpbGVuYW1lIG9yIGZpbGUKLSAgICAgICAgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuICdldmVudHMnIGlzIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suCi0gICAgICAgIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyAic3RhcnQiLCAiZW5kIiwgInN0YXJ0LW5zIiBhbmQKLSAgICAgICAgImVuZC1ucyIgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCi0gICAgICAgIGluZm9ybWF0aW9uKS4gSWYgJ2V2ZW50cycgaXMgb21pdHRlZCwgb25seSAiZW5kIiBldmVudHMgYXJlIHJlcG9ydGVkLgotICAgICAgICAncGFyc2VyJyBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICAgICAgIFhNTFBhcnNlciBwYXJzZXIgaXMgdXNlZC4gUmV0dXJucyBhbiBpdGVyYXRvciBwcm92aWRpbmcKLSAgICAgICAgKGV2ZW50LCBlbGVtKSBwYWlycy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgcm9vdCA9IE5vbmUKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGZpbGUsICdyZWFkJyk6Ci0gICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKLSAgICAgICAgICAgIHNlbGYuX2V2ZW50cyA9IFtdCi0gICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgotICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgotICAgICAgICAgICAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzLCBldmVudHMpCi0KLSAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ICs9IDEKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Vycm9yOgotICAgICAgICAgICAgICAgICAgICBlID0gc2VsZi5fZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpCi0gICAgICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gZXhjCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKLQotICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0jIGNvbXBhdGliaWxpdHkKLVhNTFRyZWVCdWlsZGVyID0gWE1MUGFyc2VyCi0KLSMgd29ya2Fyb3VuZCBjaXJjdWxhciBpbXBvcnQuCi10cnk6Ci0gICAgZnJvbSBFbGVtZW50QzE0TiBpbXBvcnQgX3NlcmlhbGl6ZV9jMTRuCi0gICAgX3NlcmlhbGl6ZVsiYzE0biJdID0gX3NlcmlhbGl6ZV9jMTRuCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9jbGllbnQucHkgYi9MaWIveG1scnBjL2NsaWVudC5weQppbmRleCAwZjk1MjJhLi45ZTBmMDY5IDEwMDY0NAotLS0gYS9MaWIveG1scnBjL2NsaWVudC5weQorKysgYi9MaWIveG1scnBjL2NsaWVudC5weQpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKICAgICBnemYgPSBnemlwLkd6aXBGaWxlKG1vZGU9InJiIiwgZmlsZW9iaj1mKQogICAgIHRyeToKICAgICAgICAgZGVjb2RlZCA9IGd6Zi5yZWFkKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBkYXRhIikKICAgICBmLmNsb3NlKCkKICAgICBnemYuY2xvc2UoKQpAQCAtMTEzMCw4ICsxMTMwLDkgQEAKICAgICAgICAgZm9yIGkgaW4gKDAsIDEpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNpbmdsZV9yZXF1ZXN0KGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsIGVycm5vLkVQSVBFKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVQSVBFKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGV4Y2VwdCBodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lOiAjY2xvc2UgYWZ0ZXIgd2Ugc2VudCByZXF1ZXN0CiAgICAgICAgICAgICAgICAgaWYgaToKQEAgLTEzODUsNyArMTM4Niw3IEBACiAgICAgICAgICMgZ2V0IHRoZSB1cmwKICAgICAgICAgdHlwZSwgdXJpID0gdXJsbGliLnBhcnNlLnNwbGl0dHlwZSh1cmkpCiAgICAgICAgIGlmIHR5cGUgbm90IGluICgiaHR0cCIsICJodHRwcyIpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5zdXBwb3J0ZWQgWE1MLVJQQyBwcm90b2NvbCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKICAgICAgICAgc2VsZi5fX2hvc3QsIHNlbGYuX19oYW5kbGVyID0gdXJsbGliLnBhcnNlLnNwbGl0aG9zdCh1cmkpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9faGFuZGxlcjoKICAgICAgICAgICAgIHNlbGYuX19oYW5kbGVyID0gIi9SUEMyIgpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9zZXJ2ZXIucHkgYi9MaWIveG1scnBjL3NlcnZlci5weQppbmRleCA3OGNhNGUwLi5kOTE0MjgyIDEwMDY0NAotLS0gYS9MaWIveG1scnBjL3NlcnZlci5weQorKysgYi9MaWIveG1scnBjL3NlcnZlci5weQpAQCAtNTg0LDEzICs1ODQsNiBAQAogICAgICAgICBTaW1wbGVYTUxSUENEaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIGFsbG93X25vbmUsIGVuY29kaW5nLCB1c2VfYnVpbHRpbl90eXBlcykKICAgICAgICAgc29ja2V0c2VydmVyLlRDUFNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyLCByZXF1ZXN0SGFuZGxlciwgYmluZF9hbmRfYWN0aXZhdGUpCiAKLSAgICAgICAgIyBbQnVnICMxMjIyNzkwXSBJZiBwb3NzaWJsZSwgc2V0IGNsb3NlLW9uLWV4ZWMgZmxhZzsgaWYgYQotICAgICAgICAjIG1ldGhvZCBzcGF3bnMgYSBzdWJwcm9jZXNzLCB0aGUgc3VicHJvY2VzcyBzaG91bGRuJ3QgaGF2ZQotICAgICAgICAjIHRoZSBsaXN0ZW5pbmcgc29ja2V0IG9wZW4uCi0gICAgICAgIGlmIGZjbnRsIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKGZjbnRsLCAnRkRfQ0xPRVhFQycpOgotICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX0dFVEZEKQotICAgICAgICAgICAgZmxhZ3MgfD0gZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgZmNudGwuZmNudGwoc2VsZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCiAKIGNsYXNzIE11bHRpUGF0aFhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIpOgogICAgICIiIk11bHRpcGF0aCBYTUwtUlBDIFNlcnZlcgpkaWZmIC0tZ2l0IGEvTGliL3ppcGZpbGUucHkgYi9MaWIvemlwZmlsZS5weQppbmRleCA5MmM5OGFiLi5mYWQ1MmEyIDEwMDY0NAotLS0gYS9MaWIvemlwZmlsZS5weQorKysgYi9MaWIvemlwZmlsZS5weQpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBzdGF0CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIF9FbmRSZWNEYXRhKGZwKToKICAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgIyBmaWxlIGhhcyBjb3JyZWN0IG1hZ2ljIG51bWJlcgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY2hlY2tfemlwZmlsZShmcCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsob2Zmc2V0IC0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgSWYgdGhlIHNlZWsgZmFpbHMsIHRoZSBmaWxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhIFpJUDY0CiAgICAgICAgICMgZW5kLW9mLWFyY2hpdmUgcmVjb3JkLCBzbyBqdXN0IHJldHVybiB0aGUgZW5kIHJlY29yZCB3ZSB3ZXJlIGdpdmVuLgogICAgICAgICByZXR1cm4gZW5kcmVjCkBAIC0yMTEsOCArMjExLDggQEAKICAgICBpZiBsZW4oZGF0YSkgIT0gc2l6ZUVuZENlbnREaXI2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogICAgIHNpZywgc3osIGNyZWF0ZV92ZXJzaW9uLCByZWFkX3ZlcnNpb24sIGRpc2tfbnVtLCBkaXNrX2RpciwgXAotICAgICAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAotICAgICAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCisgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKKyAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCiAgICAgaWYgc2lnICE9IHN0cmluZ0VuZEFyY2hpdmU2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogCkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAjIGZpbGUgaWYgdGhpcyBpcyB0aGUgY2FzZSkuCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsoLXNpemVFbmRDZW50RGlyLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogICAgIGRhdGEgPSBmcGluLnJlYWQoKQogICAgIGlmIChsZW4oZGF0YSkgPT0gc2l6ZUVuZENlbnREaXIgYW5kCkBAIC0yOTIsMjYgKzI5MiwyNiBAQAogICAgICIiIkNsYXNzIHdpdGggYXR0cmlidXRlcyBkZXNjcmliaW5nIGVhY2ggZmlsZSBpbiB0aGUgWklQIGFyY2hpdmUuIiIiCiAKICAgICBfX3Nsb3RzX18gPSAoCi0gICAgICAgICAgICAnb3JpZ19maWxlbmFtZScsCi0gICAgICAgICAgICAnZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2RhdGVfdGltZScsCi0gICAgICAgICAgICAnY29tcHJlc3NfdHlwZScsCi0gICAgICAgICAgICAnY29tbWVudCcsCi0gICAgICAgICAgICAnZXh0cmEnLAotICAgICAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAotICAgICAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKLSAgICAgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAotICAgICAgICAgICAgJ3Jlc2VydmVkJywKLSAgICAgICAgICAgICdmbGFnX2JpdHMnLAotICAgICAgICAgICAgJ3ZvbHVtZScsCi0gICAgICAgICAgICAnaW50ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnaGVhZGVyX29mZnNldCcsCi0gICAgICAgICAgICAnQ1JDJywKLSAgICAgICAgICAgICdjb21wcmVzc19zaXplJywKLSAgICAgICAgICAgICdmaWxlX3NpemUnLAotICAgICAgICAgICAgJ19yYXdfdGltZScsCi0gICAgICAgICkKKyAgICAgICAgJ29yaWdfZmlsZW5hbWUnLAorICAgICAgICAnZmlsZW5hbWUnLAorICAgICAgICAnZGF0ZV90aW1lJywKKyAgICAgICAgJ2NvbXByZXNzX3R5cGUnLAorICAgICAgICAnY29tbWVudCcsCisgICAgICAgICdleHRyYScsCisgICAgICAgICdjcmVhdGVfc3lzdGVtJywKKyAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKKyAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCisgICAgICAgICdyZXNlcnZlZCcsCisgICAgICAgICdmbGFnX2JpdHMnLAorICAgICAgICAndm9sdW1lJywKKyAgICAgICAgJ2ludGVybmFsX2F0dHInLAorICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCisgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKKyAgICAgICAgJ0NSQycsCisgICAgICAgICdjb21wcmVzc19zaXplJywKKyAgICAgICAgJ2ZpbGVfc2l6ZScsCisgICAgICAgICdfcmF3X3RpbWUnLAorICAgICkKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT0iTm9OYW1lIiwgZGF0ZV90aW1lPSgxOTgwLDEsMSwwLDAsMCkpOgogICAgICAgICBzZWxmLm9yaWdfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICMgT3JpZ2luYWwgZmlsZSBuYW1lIGluIGFyY2hpdmUKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgICAgICBpZiB6aXA2NDoKICAgICAgICAgICAgIGZtdCA9ICc8SEhRUScKICAgICAgICAgICAgIGV4dHJhID0gZXh0cmEgKyBzdHJ1Y3QucGFjayhmbXQsCi0gICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCiAgICAgICAgIGlmIGZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIGNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCB6aXA2NDoKICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCkBAIC0zOTUsMTAgKzM5NSwxMCBAQAogICAgICAgICBzZWxmLmNyZWF0ZV92ZXJzaW9uID0gbWF4KG1pbl92ZXJzaW9uLCBzZWxmLmNyZWF0ZV92ZXJzaW9uKQogICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gc2VsZi5fZW5jb2RlRmlsZW5hbWVGbGFncygpCiAgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHN0cnVjdEZpbGVIZWFkZXIsIHN0cmluZ0ZpbGVIZWFkZXIsCi0gICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCi0gICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAotICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCiAgICAgICAgIHJldHVybiBoZWFkZXIgKyBmaWxlbmFtZSArIGV4dHJhCiAKICAgICBkZWYgX2VuY29kZUZpbGVuYW1lRmxhZ3Moc2VsZik6CkBAIC01MTEsNyArNTExLDcgQEAKICAgICBkZWYgX2luaXQoc2VsZik6CiAgICAgICAgIHByb3BzID0gbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKHsnaWQnOiBsem1hLkZJTFRFUl9MWk1BMX0pCiAgICAgICAgIHNlbGYuX2NvbXAgPSBsem1hLkxaTUFDb21wcmVzc29yKGx6bWEuRk9STUFUX1JBVywgZmlsdGVycz1bCi0gICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKKyAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwgcHJvcHMpCiAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygnPEJCSCcsIDksIDQsIGxlbihwcm9wcykpICsgcHJvcHMKIApAQCAtNTQzLDggKzU0Myw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogCiAgICAgICAgICAgICBzZWxmLl9kZWNvbXAgPSBsem1hLkxaTUFEZWNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWRbNDo0ICsgcHNpemVdKQorICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCiAgICAgICAgICAgICBdKQogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3VuY29uc3VtZWRbNCArIHBzaXplOl0KICAgICAgICAgICAgIGRlbCBzZWxmLl91bmNvbnN1bWVkCkBAIC01ODAsMTUgKzU4MCwxNSBAQAogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0RFRkxBVEVEOgogICAgICAgICBpZiBub3QgemxpYjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIHpsaWIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9CWklQMjoKICAgICAgICAgaWYgbm90IGJ6MjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfTFpNQToKICAgICAgICAgaWYgbm90IGx6bWE6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBsem1hIG1vZHVsZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaGF0IGNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIikKIApAQCAtNTk2LDcgKzU5Niw3IEBACiBkZWYgX2dldF9jb21wcmVzc29yKGNvbXByZXNzX3R5cGUpOgogICAgIGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgogICAgICAgICByZXR1cm4gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKICAgICBlbGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0JaSVAyOgogICAgICAgICByZXR1cm4gYnoyLkJaMkNvbXByZXNzb3IoKQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfTFpNQToKQEAgLTgzNiw4ICs4MzYsOCBAQAogICAgICAgICAgICAgbiA9IG1heChuLCBzZWxmLk1JTl9SRUFEX1NJWkUpCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MoZGF0YSwgbikKICAgICAgICAgICAgIHNlbGYuX2VvZiA9IChzZWxmLl9kZWNvbXByZXNzb3IuZW9mIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPD0gMCBhbmQKLSAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsKQogICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgogICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzc29yLmZsdXNoKCkKICAgICAgICAgZWxzZToKQEAgLTg3Niw3ICs4NzYsNyBAQAogY2xhc3MgWmlwRmlsZToKICAgICAiIiIgQ2xhc3Mgd2l0aCBtZXRob2RzIHRvIG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSwgbGlzdCB6aXAgZmlsZXMuCiAKLSAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKKyAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQogCiAgICAgZmlsZTogRWl0aGVyIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciBhIGZpbGUtbGlrZSBvYmplY3QuCiAgICAgICAgICAgSWYgaXQgaXMgYSBwYXRoLCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBhbmQgY2xvc2VkIGJ5IFppcEZpbGUuCkBAIC04OTIsNyArODkyLDcgQEAKICAgICBmcCA9IE5vbmUgICAgICAgICAgICAgICAgICAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAogICAgIF93aW5kb3dzX2lsbGVnYWxfbmFtZV90cmFuc190YWJsZSA9IE5vbmUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpOgogICAgICAgICAiIiJPcGVuIHRoZSBaSVAgZmlsZSB3aXRoIG1vZGUgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLiIiIgogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIsICJhIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1ppcEZpbGUoKSByZXF1aXJlcyBtb2RlICJyIiwgInciLCBvciAiYSInKQpAQCAtOTE3LDcgKzkxNyw3IEBACiAgICAgICAgICAgICBtb2RlRGljdCA9IHsncicgOiAncmInLCAndyc6ICd3YicsICdhJyA6ICdyK2InfQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICdhJzoKICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtleSA9ICd3JwogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKQEAgLTk2OCw3ICs5NjgsNyBAQAogICAgICAgICBmcCA9IHNlbGYuZnAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW5kcmVjID0gX0VuZFJlY0RhdGEoZnApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQogICAgICAgICBpZiBub3QgZW5kcmVjOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCkBAIC0xMDE2LDggKzEwMTYsOCBAQAogICAgICAgICAgICAgeC5jb21tZW50ID0gZnAucmVhZChjZW50ZGlyW19DRF9DT01NRU5UX0xFTkdUSF0pCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSBjZW50ZGlyW19DRF9MT0NBTF9IRUFERVJfT0ZGU0VUXQogICAgICAgICAgICAgKHguY3JlYXRlX3ZlcnNpb24sIHguY3JlYXRlX3N5c3RlbSwgeC5leHRyYWN0X3ZlcnNpb24sIHgucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKLSAgICAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCisgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKKyAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCiAgICAgICAgICAgICBpZiB4LmV4dHJhY3RfdmVyc2lvbiA+IE1BWF9FWFRSQUNUX1ZFUlNJT046CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiemlwIGZpbGUgdmVyc2lvbiAlLjFmIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeC5leHRyYWN0X3ZlcnNpb24gLyAxMCkpCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogICAgICAgICAgICAgIyBDb252ZXJ0IGRhdGUvdGltZSBjb2RlIHRvICh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW4sIHNlYykKICAgICAgICAgICAgIHguX3Jhd190aW1lID0gdAogICAgICAgICAgICAgeC5kYXRlX3RpbWUgPSAoIChkPj45KSsxOTgwLCAoZD4+NSkmMHhGLCBkJjB4MUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ+PjExLCAodD4+NSkmMHgzRiwgKHQmMHgxRikgKiAyICkKIAogICAgICAgICAgICAgeC5fZGVjb2RlRXh0cmEoKQogICAgICAgICAgICAgeC5oZWFkZXJfb2Zmc2V0ID0geC5oZWFkZXJfb2Zmc2V0ICsgY29uY2F0CkBAIC0xMTAzLDcgKzExMDMsNyBAQAogICAgICAgICBpZiBsZW4oY29tbWVudCkgPj0gWklQX01BWF9DT01NRU5UOgogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICBwcmludCgnQXJjaGl2ZSBjb21tZW50IGlzIHRvbyBsb25nOyB0cnVuY2F0aW5nIHRvICVkIGJ5dGVzJwotICAgICAgICAgICAgICAgICAgICAgICAgJSBaSVBfTUFYX0NPTU1FTlQpCisgICAgICAgICAgICAgICAgICAgICAgJSBaSVBfTUFYX0NPTU1FTlQpCiAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudFs6WklQX01BWF9DT01NRU5UXQogICAgICAgICBzZWxmLl9jb21tZW50ID0gY29tbWVudAogICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCkBAIC0xMTE3LDExICsxMTE3LDE1IEBACiAgICAgICAgICIiIlJldHVybiBmaWxlLWxpa2Ugb2JqZWN0IGZvciAnbmFtZScuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJVIiwgInJVIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ29wZW4oKSByZXF1aXJlcyBtb2RlICJyIiwgIlUiLCBvciAiclUiJykKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIGlmIHB3ZCBhbmQgbm90IGlzaW5zdGFuY2UocHdkLCBieXRlcyk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInB3ZDogZXhwZWN0ZWQgYnl0ZXMsIGdvdCAlcyIgJSB0eXBlKHB3ZCkpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgIyBPbmx5IG9wZW4gYSBuZXcgZmlsZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHdlIHdlcmUgbm90CiAgICAgICAgICMgZ2l2ZW4gYSBmaWxlIG9iamVjdCBpbiB0aGUgY29uc3RydWN0b3IKQEAgLTEyOTQsNyArMTI5OCw3IEBACiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3dyaXRlKCkgcmVxdWlyZXMgbW9kZSAidyIgb3IgImEiJykKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogICAgICAgICBfY2hlY2tfY29tcHJlc3Npb24oemluZm8uY29tcHJlc3NfdHlwZSkKICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKQEAgLTEzMDIsMTQgKzEzMDYsMTQgQEAKICAgICAgICAgaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKAotICAgICAgICAgICAgICAgICAgICAgICJaaXBmaWxlIHNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKKyAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVuYW1lLCBhcmNuYW1lPU5vbmUsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dCB0aGUgYnl0ZXMgZnJvbSBmaWxlbmFtZSBpbnRvIHRoZSBhcmNoaXZlIHVuZGVyIHRoZSBuYW1lCiAgICAgICAgIGFyY25hbWUuIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIGlzZGlyID0gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCkBAIC0xMzU2LDcgKzEzNjAsNyBAQAogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCiAgICAgICAgICAgICAjIENvbXByZXNzZWQgc2l6ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgICAgIHppcDY0ID0gc2VsZi5fYWxsb3daaXA2NCBhbmQgXAotICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCiAgICAgICAgICAgICBmaWxlX3NpemUgPSAwCiAgICAgICAgICAgICB3aGlsZSAxOgpAQCAtMTQxMCw3ICsxNDE0LDcgQEAKIAogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGRhdGEpICAgICAgICAgICAgIyBVbmNvbXByZXNzZWQgc2l6ZQogICAgICAgICB6aW5mby5oZWFkZXJfb2Zmc2V0ID0gc2VsZi5mcC50ZWxsKCkgICAgIyBTdGFydCBvZiBoZWFkZXIgZGF0YQpAQCAtMTQzMCw3ICsxNDM0LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSB6aW5mby5maWxlX3NpemUKICAgICAgICAgemlwNjQgPSB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBcCi0gICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUCisgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKICAgICAgICAgaWYgemlwNjQgYW5kIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgogICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQpAQCAtMTQzOSw3ICsxNDQzLDcgQEAKICAgICAgICAgICAgICMgV3JpdGUgQ1JDIGFuZCBmaWxlIHNpemVzIGFmdGVyIHRoZSBmaWxlIGRhdGEKICAgICAgICAgICAgIGZtdCA9ICc8TFFRJyBpZiB6aXA2NCBlbHNlICc8TExMJwogICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzdHJ1Y3QucGFjayhmbXQsIHppbmZvLkNSQywgemluZm8uY29tcHJlc3Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCiAgICAgICAgIHNlbGYuZnAuZmx1c2goKQogICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCkBAIC0xNDY1LDcgKzE0NjksNyBAQAogICAgICAgICAgICAgICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCiAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gW10KICAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmZpbGVfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMHhmZmZmZmZmZgpAQCAtMTQ4NSw4ICsxNDg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmE6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIFpJUDY0IGZpZWxkIHRvIHRoZSBleHRyYSdzCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBaSVA2NF9WRVJTSU9OCiAKQEAgLTE1MDAsMjEgKzE1MDQsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHppbmZvLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRkaXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RDZW50cmFsRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgoc3RydWN0Q2VudHJhbERpciwgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShmaWxlbmFtZSkKQEAgLTE1MzEsMjIgKzE1MzUsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVCk6CiAgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byB3cml0ZSB0aGUgWklQNjQgZW5kLW9mLWFyY2hpdmUgcmVjb3JkcwogICAgICAgICAgICAgICAgICAgICB6aXA2NGVuZHJlYyA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NCwgc3RyaW5nRW5kQXJjaGl2ZTY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCisgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0ZW5kcmVjKQogCiAgICAgICAgICAgICAgICAgICAgIHppcDY0bG9jcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRsb2NyZWMpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IG1pbihjZW50RGlyQ291bnQsIDB4RkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPSBtaW4oY2VudERpclNpemUsIDB4RkZGRkZGRkYpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPSBtaW4oY2VudERpck9mZnNldCwgMHhGRkZGRkZGRikKIAogICAgICAgICAgICAgICAgIGVuZHJlYyA9IHN0cnVjdC5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHN0cmluZ0VuZEFyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGVuZHJlYykKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHNlbGYuX2NvbW1lbnQpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCkBAIC0xNTYxLDEyICsxNTY1LDEyIEBACiAgICAgIiIiQ2xhc3MgdG8gY3JlYXRlIFpJUCBhcmNoaXZlcyB3aXRoIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIGFuZCBwYWNrYWdlcy4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwKLSAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1GYWxzZSwgb3B0aW1pemU9LTEpOgorICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PVRydWUsIG9wdGltaXplPS0xKToKICAgICAgICAgWmlwRmlsZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPW1vZGUsIGNvbXByZXNzaW9uPWNvbXByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9YWxsb3daaXA2NCkKICAgICAgICAgc2VsZi5fb3B0aW1pemUgPSBvcHRpbWl6ZQogCi0gICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lPSIiKToKKyAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIsIGZpbHRlcmZ1bmM9Tm9uZSk6CiAgICAgICAgICIiIkFkZCBhbGwgZmlsZXMgZnJvbSAicGF0aG5hbWUiIHRvIHRoZSBaSVAgYXJjaGl2ZS4KIAogICAgICAgICBJZiBwYXRobmFtZSBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBhbmQKQEAgLTE1NzcsNyArMTU4MSwxNCBAQAogICAgICAgICBhcmNoaXZlLiAgQWRkZWQgbW9kdWxlcyBhcmUgYWx3YXlzIG1vZHVsZS5weW8gb3IgbW9kdWxlLnB5Yy4KICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBjb21waWxlIHRoZSBtb2R1bGUucHkgaW50byBtb2R1bGUucHljIGlmCiAgICAgICAgIG5lY2Vzc2FyeS4KKyAgICAgICAgSWYgZmlsdGVyZnVuYyhwYXRobmFtZSkgaXMgZ2l2ZW4sIGl0IGlzIGNhbGxlZCB3aXRoIGV2ZXJ5IGFyZ3VtZW50LgorICAgICAgICBXaGVuIGl0IGlzIEZhbHNlLCB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgc2tpcHBlZC4KICAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGhuYW1lKToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgbGFiZWwgPSAncGF0aCcgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSkgZWxzZSAnZmlsZScKKyAgICAgICAgICAgICAgICBwcmludCgnJXMgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgKGxhYmVsLCBwYXRobmFtZSkpCisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZGlyLCBuYW1lID0gb3MucGF0aC5zcGxpdChwYXRobmFtZSkKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSk6CiAgICAgICAgICAgICBpbml0bmFtZSA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgIl9faW5pdF9fLnB5IikKQEAgLTE2MDIsMTAgKzE2MTMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAiX19pbml0X18ucHkiKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIGFkZCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSkgICMgUmVjdXJzaXZlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlcHkocGF0aCwgYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmZ1bmM9ZmlsdGVyZnVuYykgICMgUmVjdXJzaXZlIGNhbGwKICAgICAgICAgICAgICAgICAgICAgZWxpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCkBAIC0xNjE3LDE1ICsxNjMzLDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwYXRobmFtZVstMzpdICE9ICIucHkiOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAnRmlsZXMgYWRkZWQgd2l0aCB3cml0ZXB5KCkgbXVzdCBlbmQgd2l0aCAiLnB5IicpCisgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhuYW1lWzA6LTNdLCBiYXNlbmFtZSkKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyBmaWxlIiwgYXJjbmFtZSkKQEAgLTE2NTIsOCArMTY3Miw4IEBACiAgICAgICAgIGZpbGVfcHkgID0gcGF0aG5hbWUgKyAiLnB5IgogICAgICAgICBmaWxlX3B5YyA9IHBhdGhuYW1lICsgIi5weWMiCiAgICAgICAgIGZpbGVfcHlvID0gcGF0aG5hbWUgKyAiLnB5byIKLSAgICAgICAgcHljYWNoZV9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKLSAgICAgICAgcHljYWNoZV9weW8gPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCisgICAgICAgIHB5Y2FjaGVfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKKyAgICAgICAgcHljYWNoZV9weW8gPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKICAgICAgICAgaWYgc2VsZi5fb3B0aW1pemUgPT0gLTE6CiAgICAgICAgICAgICAjIGxlZ2FjeSBtb2RlOiB1c2Ugd2hhdGV2ZXIgZmlsZSBpcyBwcmVzZW50CiAgICAgICAgICAgICBpZiAob3MucGF0aC5pc2ZpbGUoZmlsZV9weW8pIGFuZApAQCAtMTc2NCwxMCArMTc4NCwxMCBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgIGZvciBubSBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICBhZGRUb1ppcCh6ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aCwgbm0pLCBvcy5wYXRoLmpvaW4oemlwcGF0aCwgbm0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aCwgbm0pLCBvcy5wYXRoLmpvaW4oemlwcGF0aCwgbm0pKQogICAgICAgICAgICAgIyBlbHNlOiBpZ25vcmUKIAotICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3cnLCBhbGxvd1ppcDY0PVRydWUpIGFzIHpmOgorICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3cnKSBhcyB6ZjoKICAgICAgICAgICAgIGZvciBzcmMgaW4gYXJnc1syOl06CiAgICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsIHNyYywgb3MucGF0aC5iYXNlbmFtZShzcmMpKQogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CmluZGV4IDU2Yzc2OWEuLjBhNmI1NDQgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CkBAIC04LDcgKzgsNyBAQAogYW4gSW5zdGFsbGVyIHBhY2thZ2UgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHBsdXMgb3RoZXIgZmlsZXMgaW4gYGByZXNvdXJjZXNgYCAKIGFuZCBgYHNjcmlwdHNgYCBhbmQgcGxhY2VkIHRoYXQgb24gYSBgYC5kbWdgYCBkaXNrIGltYWdlLgogCi1BcyBvZiBQeXRob24gMy4zLjAsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCitGb3IgUHl0aG9uIDMuNC4wLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cwogZm9yIGVhY2ggcmVsZWFzZS4KIAogMS4gIDMyLWJpdC1vbmx5LCBpMzg2IGFuZCBQUEMgdW5pdmVyc2FsLCBjYXBhYmxlIG9uIHJ1bm5pbmcgb24gYWxsIG1hY2hpbmVzCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4xCisgICAgICAgICogWFogNS4wLjUKIAogICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKQEAgLTU2LDE0ICs1NiwxNCBAQAogICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKICAgICAgICAgKiBOQ3Vyc2VzIDUuOSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MDM3KQotICAgICAgICAqIFNRTGl0ZSAzLjcuMTMKLSAgICAgICAgKiBYWiA1LjAuMworICAgICAgICAqIFNRTGl0ZSAzLjguMQorICAgICAgICAqIFhaIDUuMC41CiAKICAgICAtIHVzZXMgc3lzdGVtLXN1cHBsaWVkIHZlcnNpb25zIG9mIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQogCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjkgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjE1IChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwogCiAgICAgLSByZWNvbW1lbmRlZCBidWlsZCBlbnZpcm9ubWVudDoKIApkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weSBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKaW5kZXggZmQ1ZDVjMy4uZjAxMjU4NyAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQorKysgYi9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CkBAIC0xOTMsNyArMTkzLDggQEAKIAogICAgIExUXzEwXzUgPSBib29sKERFUFRBUkdFVCA8ICcxMC41JykKIAotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKKyMgICBEaXNhYmxlIGZvciBub3cKKyAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA1KSk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgIG5hbWU9IlRjbCA4LjUuMTUiLApAQCAtMjM3LDkgKzIzOCw5IEBACiAgICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDMpOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJYWiA1LjAuMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LTUuMC4zLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdmZWZlNTJmOWVjZDUyMWRlMmE4Y2UzOGMyMWEyNzU3NCcsCisgICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC41IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzE5ZDkyNGUwNjZiNmZmZjBiYzlkMTk4MWI0ZTUzMTk2JywKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCiAgICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsCiAgICAgICAgICAgICAgIF0KQEAgLTI4Miw5ICsyODMsOSBAQAogICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICApLAogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjcuMTMiLAotICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy9zcWxpdGUtYXV0b2NvbmYtMzA3MTMwMC50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nYzk3ZGY0MDNlOGEzZDViNjdiYjQwOGZjZDZhYWJkOGUnLAorICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy44LjEiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDEzL3NxbGl0ZS1hdXRvY29uZi0zMDgwMTAwLnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPSc4YjVhMGEwMmRmY2IwYzdkYWY5MDg1NmE1Y2ZkNDg1YScsCiAgICAgICAgICAgICAgIGV4dHJhX2NmbGFncz0oJy1PcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1EU1FMSVRFX0VOQUJMRV9GVFM0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMgJwpAQCAtMzY0LDYgKzM2NSw3IEBACiAjIEluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgcGFja2FnZXMgaW5zaWRlIHRoZSAubXBrZy4KIGRlZiBwa2dfcmVjaXBlcygpOgogICAgIHVuc2VsZWN0ZWRfZm9yX3B5dGhvbjMgPSAoJ3NlbGVjdGVkJywgJ3Vuc2VsZWN0ZWQnKVtQWVRIT05fM10KKyAgICB1bnNlbGVjdGVkX2Zvcl9sdF9weXRob24zNCA9ICgnc2VsZWN0ZWQnLCAndW5zZWxlY3RlZCcpW2dldFZlcnNpb25UdXBsZSgpIDwgKDMsIDQpXQogICAgIHJlc3VsdCA9IFsKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvbkZyYW1ld29yayIsCkBAIC00MzIsMTAgKzQzNCwyNyBAQAogICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAogICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAotICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKKyAgICAgICAgICAgIHNlbGVjdGVkPXVuc2VsZWN0ZWRfZm9yX2x0X3B5dGhvbjM0LAogICAgICAgICApLAogICAgIF0KIAorICAgIGlmIGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KToKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgbmFtZT0iUHl0aG9uSW5zdGFsbFBpcCIsCisgICAgICAgICAgICAgICAgbG9uZ19uYW1lPSJJbnN0YWxsIG9yIHVwZ3JhZGUgcGlwIiwKKyAgICAgICAgICAgICAgICByZWFkbWU9IiIiXAorICAgICAgICAgICAgICAgICAgICBUaGlzIHBhY2thZ2UgaW5zdGFsbHMgKG9yIHVwZ3JhZGVzIGZyb20gYW4gZWFybGllciB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICBwaXAsIGEgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAgICAgcG9zdGZsaWdodD0ic2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAorICAgICAgICAgICAgICAgIHNvdXJjZT0iL2VtcHR5LWRpciIsCisgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCiAgICAgaWYgREVQVEFSR0VUIDwgJzEwLjQnIGFuZCBub3QgUFlUSE9OXzM6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoCiAgICAgICAgICAgICBkaWN0KApAQCAtNDUzLDYgKzQ3Miw3IEBACiAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKICAgICAgICAgICAgICkKICAgICAgICAgKQorCiAgICAgcmV0dXJuIHJlc3VsdAogCiBkZWYgZmF0YWwobXNnKToKQEAgLTU2NywyMCArNTg3LDYgQEAKICAgICAgICAgICAgICAgICAlIGZyYW1ld29ya3NbJ1RrJ10sCiAgICAgICAgICAgICBdCiAKLSAgICAjIEZvciAxMC42KyBidWlsZHMsIHdlIGJ1aWxkIHR3byB2ZXJzaW9ucyBvZiBfdGtpbnRlcjoKLSAgICAjICAgIC0gdGhlIHRyYWRpdGlvbmFsIHZlcnNpb24gKHJlbmFtZWQgdG8gX3RraW50ZXJfbGlicmFyeS5zbykgbGlua2VkCi0gICAgIyAgICAgICB3aXRoIC9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrCi0gICAgIyAgICAtIHRoZSBkZWZhdWx0IHZlcnNpb24gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gY29waWVzIG9mIFRjbCBhbmQgVGsKLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlcl9saWJyYXJ5LnNvJ10gPSBcCi0gICAgICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXQotICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXSA9IFsKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0Y2wlcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUY2wnXSksCi0gICAgICAgICAgICAgICAgIi9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8lcy9saWIvbGlidGslcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUayddKSwKLSAgICAgICAgICAgICAgICBdCi0KICAgICAjIFJlbW92ZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIG1pZ2h0IGluZmx1ZW5jZSBidWlsZAogICAgIGVudmlyb25fdmFyX3ByZWZpeGVzID0gWydDUEFUSCcsICdDX0lOQ0xVREVfJywgJ0RZTERfJywgJ0xBTkcnLCAnTENfJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTERfJywgJ0xJQlJBUllfJywgJ1BBVEgnLCAnUFlUSE9OJ10KQEAgLTk1NSwzNCArOTYxLDE5IEBACiAgICAgcnVuQ29tbWFuZCgiJXMgLUMgLS1lbmFibGUtZnJhbWV3b3JrIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0lcyAiCiAgICAgICAgICAgICAgICAiLS13aXRoLXVuaXZlcnNhbC1hcmNocz0lcyAiCiAgICAgICAgICAgICAgICAiJXMgIgorICAgICAgICAgICAgICAgIiVzICIKICAgICAgICAgICAgICAgICJMREZMQUdTPSctZyAtTCVzL2xpYnJhcmllcy91c3IvbG9jYWwvbGliJyAiCiAgICAgICAgICAgICAgICAiQ0ZMQUdTPSctZyAtSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgMj4mMSIlKAogICAgICAgICBzaGVsbFF1b3RlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSksIHNoZWxsUXVvdGUoU0RLUEFUSCksCiAgICAgICAgIFVOSVZFUlNBTEFSQ0hTLAogICAgICAgICAoJyAnLCAnLS13aXRoLWNvbXB1dGVkLWdvdG9zICcpW1BZVEhPTl8zXSwKKyAgICAgICAgKCcgJywgJy0td2l0aG91dC1lbnN1cmVwaXAgJylbZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSkpCiAKICAgICBwcmludCgiUnVubmluZyBtYWtlIikKICAgICBydW5Db21tYW5kKCJtYWtlIikKIAotICAgICMgRm9yIGRlcGxveW1lbnQgdGFyZ2V0cyBvZiAxMC42IGFuZCBoaWdoZXIsIHdlIGJ1aWxkIG91ciBvd24gdmVyc2lvbgotICAgICMgb2YgVGNsIGFuZCBDb2NvYSBBcXVhIFRrIGxpYnMgYmVjYXVzZSB0aGUgQXBwbGUtc3VwcGxpZWQgVGsgOC41IGlzCi0gICAgIyBvdXQtb2YtZGF0ZSBhbmQgaGFzIGNyaXRpY2FsIGJ1Z3MuICBTYXZlIHRoZSBfdGtpbnRlci5zbyB0aGF0IHdhcwotICAgICMgbGlua2VkIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNrLFRrfS5mcmFtZXdvcmsgYW5kIGJ1aWxkCi0gICAgIyBhbm90aGVyIF90a2ludGVyLnNvIGxpbmtlZCB3aXRoIG91ciBidWlsdGluIFRjbCBhbmQgVGsgbGlicy4KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIG12ICd7fScgX3RraW50ZXJfbGlicmFyeS5zbyBcOyIpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIG1ha2UgdG8gYnVpbGQgYnVpbHRpbiBfdGtpbnRlciIpCi0gICAgICAgIHJ1bkNvbW1hbmQoIm1ha2UgVENMVEtfSU5DTFVERVM9Jy1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAiCi0gICAgICAgICAgICAgICAgIlRDTFRLX0xJQlM9Jy1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWIgLWx0Y2w4LjUgLWx0azguNSciJSgKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0sCi0gICAgICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKLSAgICAgICAgIyBtYWtlIGEgY29weSB3aGljaCB3aWxsIGJlIG1vdmVkIHRvIGxpYi10a2ludGVyIGxhdGVyCi0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIGNwIC1wICd7fScgX3RraW50ZXJfYnVpbHRpbi5zbyBcOyIpCi0KICAgICBwcmludCgiUnVubmluZyBtYWtlIGluc3RhbGwiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UgaW5zdGFsbCBERVNURElSPSVzIiUoCiAgICAgICAgIHNoZWxsUXVvdGUocm9vdERpcikpKQpAQCAtMTAwNywyNyArOTk4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24uZnJhbWV3b3JrJywgJ1ZlcnNpb25zJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwgJ2xpYicsICdweXRob24lcyclKHZlcnNpb24sKSkKIAotICAgICMgSWYgd2UgbWFkZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBfdGtpbnRlciwgbW92ZSB0aGVtIHRvCi0gICAgIyB0aGVpciBvd24gZGlyZWN0b3JpZXMgdW5kZXIgcHl0aG9uIGxpYi4gIFRoaXMgYWxsb3dzCi0gICAgIyB1c2VycyB0byBzZWxlY3Qgd2hpY2ggdG8gaW1wb3J0IGJ5IG1hbmlwdWxhdGluZyBzeXMucGF0aAotICAgICMgZGlyZWN0bHkgb3Igd2l0aCBQWVRIT05QQVRILgotCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICBUS0lOVEVSUyA9IFsnYnVpbHRpbicsICdsaWJyYXJ5J10KLSAgICAgICAgdGtpbnRlcl9tb3ZlcyA9IFsoJ190a2ludGVyXycgKyB0a24gKyAnLnNvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGhfdG9fbGliLCAnbGliLXRraW50ZXInLCB0a24pKQotICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0a24gaW4gVEtJTlRFUlNdCi0gICAgICAgICMgQ3JlYXRlIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcyB1bmRlciBsaWItdGtpbnRlci4KLSAgICAgICAgIyBUaGUgcGVybWlzc2lvbnMgYW5kIHVpZC9naWQgd2lsbCBiZSBmaXhlZCB1cCBuZXh0LgotICAgICAgICBmb3IgdGttIGluIHRraW50ZXJfbW92ZXM6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyh0a21bMV0pCi0KICAgICBwcmludCgiRml4IGZpbGUgbW9kZXMiKQogICAgIGZybURpciA9IG9zLnBhdGguam9pbihyb290RGlyLCAnTGlicmFyeScsICdGcmFtZXdvcmtzJywgJ1B5dGhvbi5mcmFtZXdvcmsnKQogICAgIGdpZCA9IGdycC5nZXRncm5hbSgnYWRtaW4nKS5ncl9naWQKIAogICAgIHNoYXJlZF9saWJfZXJyb3IgPSBGYWxzZQotICAgIG1vdmVzX2xpc3QgPSBbXQogICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZnJtRGlyKToKICAgICAgICAgZm9yIGRuIGluIGRpcm5hbWVzOgogICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGRpcnBhdGgsIGRuKSwgU1RBVF8wbzc3NSkKQEAgLTEwNTMsMjUgKzEwMjgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzbCwgcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfbGliX2Vycm9yID0gVHJ1ZQogCi0gICAgICAgICAgICAjIElmIHRoaXMgaXMgYSBfdGtpbnRlciB2YXJpYW50LCBtb3ZlIGl0IHRvIGl0cyBvd24gZGlyZWN0b3J5Ci0gICAgICAgICAgICAjIG5vdyB0aGF0IHdlIGhhdmUgZml4ZWQgaXRzIHBlcm1pc3Npb25zIGFuZCBjaGVja2VkIHRoYXQgaXQKLSAgICAgICAgICAgICMgd2FzIGxpbmtlZCBwcm9wZXJseS4gIFRoZSBkaXJlY3Rvcnkgd2FzIGNyZWF0ZWQgZWFybGllci4KLSAgICAgICAgICAgICMgVGhlIGZpbGVzIGFyZSBtb3ZlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gd2Fsa2VkCi0gICAgICAgICAgICAjIHNpbmNlIHRoZSBzaGFyZWQgbGlicmFyeSBjaGVja2luZyBkZXBlbmRzIG9uIHRoZSBmaWxlcwotICAgICAgICAgICAgIyBoYXZpbmcgdW5pcXVlIG5hbWVzLgotICAgICAgICAgICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICAgICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgICAgICAgICAgaWYgZm4gPT0gdGttWzBdOgotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZXNfbGlzdC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAsIG9zLnBhdGguam9pbih0a21bMV0sICdfdGtpbnRlci5zbycpKSkKLQogICAgIGlmIHNoYXJlZF9saWJfZXJyb3I6CiAgICAgICAgIGZhdGFsKCJVbmV4cGVjdGVkIHNoYXJlZCBsaWJyYXJ5IGVycm9ycy4iKQogCi0gICAgIyBOb3cgZG8gdGhlIG1vdmVzLgotICAgIGZvciBtbCBpbiBtb3Zlc19saXN0OgotICAgICAgICBzaHV0aWwubW92ZShtbFswXSwgbWxbMV0pCi0KICAgICBpZiBQWVRIT05fMzoKICAgICAgICAgTERWRVJTSU9OPU5vbmUKICAgICAgICAgVkVSU0lPTj1Ob25lCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggMjEyZDk2My4uZTA2MWEwNiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMjgsNiArMjgsMzYgQEAKIGZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YKIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgb2YgTWFjIE9TIFguCiAKKyAgICAgICAgICAgICAgKipORVcqIEFzIG9mIFB5dGhvbiAzLjQuMGIxOgorCitOZXcgSW5zdGFsbGF0aW9uIE9wdGlvbnMgYW5kIERlZmF1bHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQeXRob24gaW5zdGFsbGVyIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSBpbnN0YWxsCitvciB1cGdyYWRlIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIG5vIEludGVybmV0IGFjY2VzcyBpcyByZXF1aXJlZC4KK0lmIHlvdSBkbyBub3Qgd2FudCB0aGUgaW5zdGFsbGVyIHRvIGRvIHRoaXMsIHNlbGVjdCB0aGUgIkN1c3RvbWl6ZSIKK29wdGlvbiBhdCB0aGUgIkluc3RhbGxhdGlvbiBUeXBlIiBzdGVwIGFuZCB1bmNoZWNrIHRoZSAiSW5zdGFsbCBvcgordWdwcmFkZSBwaXAiIG9wdGlvbi4KKworVG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHNjcmlwdHMgaW5zdGFsbGVkIGJ5IHRoaXJkLXBhcnR5IFB5dGhvbgorcGFja2FnZXMsIHdpdGggcGlwIG9yIGJ5IG90aGVyIG1lYW5zLCB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIKK29wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyBoYXMgYmVlbiB0aGUgY2FzZSB3aXRoIFB5dGhvbgorMi43LnggaW5zdGFsbGVycy4gWW91IGNhbiBhbHNvIHR1cm4gdGhpcyBvcHRpb24gb2ZmIGJ5IHNlbGVjdGluZworIkN1c3RvbWl6ZSIgYW5kIHVuY2hlY2tpbmcgdGhlICJTaGVsbCBwcm9maWxlIHVwZGF0ZXIiIG9wdGlvbi4gWW91CitjYW4gYWxzbyB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGxhdGVyIGJ5IGxhdW5jaGluZyB0aGUgIlVwZGF0ZQorU2hlbGwgUHJvZmlsZSIgY29tbWFuZCBmb3VuZCBpbiB0aGUgL0FwcGxpY2F0aW9ucy9QeXRob24gJFZFUlNJT04KK2ZvbGRlci4gIFlvdSBtYXkgbmVlZCB0byBzdGFydCBhIG5ldyB0ZXJtaW5hbCB3aW5kb3cgZm9yIHRoZQorY2hhbmdlcyB0byB0YWtlIGVmZmVjdC4KKworUHl0aG9uLm9yZyBQeXRob24gJFZFUlNJT04gYW5kIDIuNy54IHZlcnNpb25zIGNhbiBib3RoIGJlIGluc3RhbGxlZCBhbmQKK3dpbGwgbm90IGNvbmZsaWN0LiBDb21tYW5kIG5hbWVzIGZvciBQeXRob24gMyBjb250YWluIGEgMyBpbiB0aGVtLAorcHl0aG9uMyAob3IgcHl0aG9uJFZFUlNJT04pLCBpZGxlMyAob3IgaWRsZSRWRVJTSU9OKSwgcGlwMyAob3IgcGlwJFZFUlNJT04pLCBldGMuCitQeXRob24gMi43IGNvbW1hbmQgbmFtZXMgY29udGFpbiBhIDIgb3Igbm8gZGlnaXQ6IHB5dGhvbjIgKG9yCitweXRob24yLjcgb3IgcHl0aG9uKSwgaWRsZTIgKG9yIGlkbGUyLjcgb3IgaWRsZSksIGV0Yy4gSWYgeW91IHdhbnQgdG8KK3VzZSBwaXAgd2l0aCBQeXRob24gMi43LngsIHlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgYQorc2VwYXJhdGUgY29weSBvZiBpdCBmcm9tIHRoZSBQeXRob24gUGFja2FnZSBJbmRleAorKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkpLgogCiBVc2luZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIG9uIE9TIFgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggMjM5ZDc2ZS4uODg2ZWJmZSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDUgKzEsNSBAQAoge1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMTg3XGNvY29hc3VicnRmNDAwCi1cY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQorXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CiBccGFwZXJ3MTE5MDVccGFwZXJoMTY4MzdcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDAKQEAgLTE2LDEzICsxNiwxNyBAQAogXGIgSURMRQogXGIwICBhbmQgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCiBcCi1TZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAotXAogCi1cYiBOT1RFOiAKLVxiMCBUaGlzIHBhY2thZ2Ugd2lsbCBub3QgdXBkYXRlIHlvdXIgc2hlbGwgcHJvZmlsZSBieSBkZWZhdWx0LiAgRG91YmxlLWNsaWNrIAotXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGUKLVxiMCAgYXQgYW55IHRpbWUgdG8gbWFrZSAkRlVMTF9WRVJTSU9OIHRoZSBkZWZhdWx0IFB5dGhvbiAzIHZlcnNpb24uICBUaGlzIHZlcnNpb24gY2FuIGNvLWV4aXN0IHdpdGggb3RoZXIgaW5zdGFsbGVkIHZlcnNpb25zIG9mIFB5dGhvbiAzIGFuZCBQeXRob24gMi5cCitcYiBORVcgZm9yIFB5dGhvbiAzLjQ6IAorXGIwIFRoaXMgcGFja2FnZSBub3cgdXBkYXRlcyB5b3VyIHNoZWxsIHByb2ZpbGUgYnkgZGVmYXVsdCB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLiAgVGhpcyBwYWNrYWdlIGFsc28gaW5zdGFsbHMgYSB2ZXJzaW9uIG9mIAorXGYxIHBpcAorXGYwICwgdGhlIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4gICBUeXBlXAorXAorCQorXGYxIHBpcDMuNCAtLWhlbHAKK1xmMCBcCitcCitmb3IgYW4gb3ZlcnZpZXcuICBTZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAogXAogCiBcYiBJTVBPUlRBTlQ6CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcCBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiOTdjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMgSW5zdGFsbC91cGdyYWRlIHBpcC4KKyMKKworUFlWRVI9IkBQWVZFUkAiCitQWU1BSk9SPSIzIgorRldLPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0iCitSRUxGV0tCSU49Ii4uLy4uLy4uJHtGV0t9L2JpbiIKKwordW1hc2sgMDIyCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKK2NoZ3JwIC1SIGFkbWluICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorY2htb2QgLVIgZyt3ICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorCisjIFdlIGRvIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNlbGVjdGVkIHRoZSBQeXRob24gY29tbWFuZC1saW5lIHRvb2xzCisjIHBhY2thZ2UgdGhhdCBpbnN0YWxscyBzeW1saW5rcyB0byAvdXNyL2xvY2FsL2Jpbi4gIFNvIHdlIGFzc3VtZQorIyB0aGF0IHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgcGFja2FnZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgb3Igd2FzCisjIG5vdCBzZWxlY3RlZCBhbmQgd2Ugd2lsbCBvbmx5IGluc3RhbGwgL3Vzci9sb2NhbC9iaW4gc3ltbGlua3MgZm9yCisjIHBpcCBldCBhbCBpZiB0aGVyZSBhcmUgL3Vzci9sb2NhbC9iaW4vcHl0aG9uKiBzeW1saW5rcyB0byBvdXIKKyMgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkuCisKK2lmIFsgLWQgL3Vzci9sb2NhbC9iaW4gXSA7IHRoZW4KKyAgICAoCisgICAgICAgIGNkIC91c3IvbG9jYWwvYmluCisgICAgICAgICMgQ3JlYXRlIHBpcHgueSBhbmQgZWFzeV9pbnN0YWxsLXgueSBsaW5rcyBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254LnkKKyAgICAgICAgIyAgIGlzIGxpbmtlZCB0byB0aGlzIGZyYW1ld29yayB2ZXJzaW9uCisgICAgICAgIGlmIFsgIiQocmVhZGxpbmsgLW4gLi9weXRob24ke1BZVkVSfSkiID0gIiR7UkVMRldLQklOfS9weXRob24ke1BZVkVSfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWVZFUn0iICJlYXN5X2luc3RhbGwtJHtQWVZFUn0iIDsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZSAiJHtSRUxGV0tCSU59LyR7Zm59IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiAuLyR7Zm59CisgICAgICAgICAgICAgICAgICAgIGxuIC1zICIke1JFTEZXS0JJTn0vJHtmbn0iICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaGdycCAtaCBhZG1pbiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgY2htb2QgLWggZyt3ICIuLyR7Zm59IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgICMgQ3JlYXRlIHBpcHggbGluayBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254IGlzIGxpbmtlZCB0byB0aGlzIHZlcnNpb24KKyAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuL3B5dGhvbiR7UFlNQUpPUn0pIiA9ICIke1JFTEZXS0JJTn0vcHl0aG9uJHtQWU1BSk9SfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWU1BSk9SfSIgOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIC4vJHtmbn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaG1vZCAtaCBnK3cgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICApCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggNWNiNjY0ZC4uMDNlYzczOCAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMyw5ICszLDEzIEBACiAjIGNvbW1hbmRsaW5lIGluIHRoYXQgY2FzZS4KIAogVkVSU0lPTj1AVkVSU0lPTkAKK0FCSUZMQUdTPUBBQklGTEFHU0AKK0xEVkVSU0lPTj1ATERWRVJTSU9OQAorRU5TVVJFUElQPUBFTlNVUkVQSVBACiBidWlsZGRpciA9IC4uCiBzcmNkaXI9QHNyY2RpckAKIHByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAogTElCREVTVD0kKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikKIFJVTlNIQVJFRD1AUlVOU0hBUkVEQAogQlVJTERFWEU9QEJVSUxERVhFRVhUQApAQCAtMjMsNyArMjcsNyBAQAogCiAKICMgVGhlc2UgYXJlIG5vcm1hbGx5IGdsaW1wc2VkIGZyb20gdGhlIHByZXZpb3VzIHNldAotYmluZGlyPSQocHJlZml4KS9iaW4KK0JJTkRJUj0JCUBiaW5kaXJACiBQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIEFQUElOU1RBTExESVI9JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwCiAKQEAgLTQ2LDE5ICs1MCw3IEBACiBBUFBTVUJESVJTPU1hY09TIFJlc291cmNlcwogY29tcGlsZWFsbD0kKHNyY2RpcikvLi4vTGliL2NvbXBpbGVhbGwucHkKIAotaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfcHl0aG9udyBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQotCi1pbnN0YWxsX3B5dGhvbnc6IHB5dGhvbncKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pIgotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKSIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMyIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczIgotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIHB5dGhvbncKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczLTMyIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zLTMyIgotZW5kaWYKK2luc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQogCiAjCiAjIEluc3RhbGwgdW5peCB0b29scyBpbiAvdXNyL2xvY2FsL2Jpbi4gVGhlc2UgYXJlIGp1c3QgYWxpYXNlcyBmb3IgdGhlIApAQCAtNjgsMjEgKzYwLDQ5IEBACiAJaWYgWyAhIC1kICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgXTsgdGhlbiAgXAogCQkkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiA7XAogCWZpCi0JZm9yIGZuIGluIHB5dGhvbjMgcHl0aG9udzMgaWRsZTMgcHlkb2MzIHB5dGhvbjMtY29uZmlnIFwKLQkJICBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMyBcCi0JCSAgMnRvMy0kKFZFUlNJT04pIHB5dmVudiBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zIFwKKwkJCWlkbGUzIFwKKwkJCXB5ZG9jMyBcCisJCQlweXRob24zIFwKKwkJCXB5dGhvbjMtY29uZmlnIFwKKwkJCXB5dmVudiBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7IFwKKwkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKIAlkb25lCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JZm9yIGZuIGluIHB5dGhvbjMtMzIgcHl0aG9udzMtMzIgXAotCQkgIHB5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udyQoVkVSU0lPTiktMzIgO1wKLQlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCi0JZG9uZQotZW5kaWYKLQorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS1jb25maWcgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uMy0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlwaXAzIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKIAogIwogIyBMaWtlIGluc3RhbGx1bml4dG9vbHMsIGJ1dCBvbmx5IGluc3RhbGwgbGlua3MgdG8gdGhlIHZlcnNpb25lZCBiaW5hcmllcy4KQEAgLTkxLDIwICsxMTEsNTUgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKSBweXRob253JChWRVJTSU9OKSBpZGxlJChWRVJTSU9OKSBcCi0JCSAgcHlkb2MkKFZFUlNJT04pIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIDJ0bzMtJChWRVJTSU9OKSBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zLSQoVkVSU0lPTikgXAorCQkJaWRsZSQoVkVSU0lPTikgXAorCQkJcHlkb2MkKFZFUlNJT04pIFwKKwkJCXB5dGhvbiQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChMRFZFUlNJT04pLWNvbmZpZyBcCisJCQlweXZlbnYtJChWRVJTSU9OKSBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7XAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChMRFZFUlNJT04pIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbiQoVkVSU0lPTiktMzIgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJZWFzeV9pbnN0YWxsLSQoVkVSU0lPTikgXAorCQkJCXBpcCQoVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiBweXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtRFBZVEhPTkZSQU1FV09SSz0nIiQoUFlUSE9ORlJBTUVXT1JLKSInIC1vICRAICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIC4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKKwkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgXAorCQkkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSBcCisJCS4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKIAogaW5zdGFsbF9QeXRob25MYXVuY2hlcjoKIAljZCBQeXRob25MYXVuY2hlciAmJiBtYWtlIGluc3RhbGwgREVTVERJUj0kKERFU1RESVIpCmRpZmYgLS1naXQgYS9NYWMvUkVBRE1FIGIvTWFjL1JFQURNRQppbmRleCA5MDFhMzI0Li42MTYzNGU5IDEwMDY0NAotLS0gYS9NYWMvUkVBRE1FCisrKyBiL01hYy9SRUFETUUKQEAgLTcsNyArNyw3IEBACiAgICAgUm9uYWxkIE91c3NvcmVuICgyMDEwLTA0KSwKICAgICBOZWQgRGVpbHkgKDIwMTItMDYpCiAKLTpWZXJzaW9uOiAzLjMuMAorOlZlcnNpb246IDMuNC4wCiAKIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSBxdWljayBvdmVydmlldyBvZiBzb21lIE1hYyBPUyBYIHNwZWNpZmljIGZlYXR1cmVzIGluCiB0aGUgUHl0aG9uIGRpc3RyaWJ1dGlvbi4KQEAgLTk5LDYgKzk5LDggQEAKIAogICAqIGBgaW50ZWxgYDoJICBgYGkzODZgYCwgYGB4ODZfNjRgYAogCisgICogYGBpbnRlbC0zMmBgOiBgYGkzODZgYAorCiAgICogYGAzMi1iaXRgYDogICBgYHBwY2BgLCBgYGkzODZgYAogCiAgICogYGAzLXdheWBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgLCBgYHBwY2BgCkBAIC0xMjUsNyArMTI3LDcgQEAKIAogICAqIDEwLjcgYW5kIDEwLjggU0RLcyB3aXRoIFhjb2RlIDQgc3VwcG9ydCBgYGludGVsYGAgb25seQogCi1UaGUgbWFrZWZpbGUgZm9yIGEgZnJhbWV3b3JrIGJ1aWxkIHdpbGwgYWxzbyBpbnN0YWxsIGBgcHl0aG9uMy4zLTMyYGAKK1RoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjQtMzJgYAogYmluYXJpZXMgd2hlbiB0aGUgdW5pdmVyc2FsIGFyY2hpdGVjdHVyZSBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgMzItYml0CiBhcmNoaXRlY3R1cmUgKHRoYXQgaXMsIGZvciBhbGwgZmxhdm9ycyBidXQgYGA2NC1iaXRgYCkuCiAKQEAgLTE0OSw3ICsxNTEsNyBAQAogbm90IGF1dG9tYXRpY2FsbHkgY2FycnkgdGhyb3VnaCB0byBzdWJwcm9jZXNzZXMgbGF1bmNoZWQgYnkgcHJvZ3JhbXMgYW5kIHRlc3RzCiB1bmRlciB0aGF0IFB5dGhvbi4gIElmIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IFB5dGhvbiBpbnRlcnByZXRlcnMgbGF1bmNoZWQgaW4KIHN1YnByb2Nlc3NlcyBhbHNvIHJ1biBpbiAzMi1iaXQtbW9kZSBpZiB0aGUgbWFpbiBpbnRlcnByZXRlciBkb2VzLCB1c2UKLWEgYGBweXRob24zLjMtMzJgYCBiaW5hcnkgYW5kIHVzZSB0aGUgdmFsdWUgb2YgYGBzeXMuZXhlY3V0YWJsZWBgIGFzIHRoZQorYSBgYHB5dGhvbjMuNC0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCiBgYHN1YnByb2Nlc3NgYCBgYFBvcGVuYGAgZXhlY3V0YWJsZSB2YWx1ZS4KIAogCkBAIC0xNjksNyArMTcxLDcgQEAKIAogQSBzZWNvbmQgcmVhc29uIGZvciB1c2luZyBmcmFtZXdvcmtzIGlzIHRoYXQgdGhleSBwdXQgUHl0aG9uLXJlbGF0ZWQgaXRlbXMgaW4KIG9ubHkgdHdvIHBsYWNlczogIi9MaWJyYXJ5L0ZyYW1ld29yay9QeXRob24uZnJhbWV3b3JrIiBhbmQgCi0iL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjMiLAorIi9BcHBsaWNhdGlvbnMvUHl0aG9uIDxWRVJTSU9OPiIgd2hlcmUgYGA8VkVSU0lPTj5gYCBjYW4gYmUgZS5nLiAiMy40IiwKICIyLjciLCBldGMuICBUaGlzIHNpbXBsaWZpZXMgbWF0dGVycyBmb3IgdXNlcnMgaW5zdGFsbGluZwogUHl0aG9uIGZyb20gYSBiaW5hcnkgZGlzdHJpYnV0aW9uIGlmIHRoZXkgd2FudCB0byBnZXQgcmlkIG9mIGl0IGFnYWluLiBNb3Jlb3ZlciwKIGR1ZSB0byB0aGUgd2F5IGZyYW1ld29ya3Mgd29yaywgYSB1c2VyIHdpdGhvdXQgYWRtaW4gcHJpdmlsZWdlcyBjYW4gaW5zdGFsbCBhCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIzYWNlNC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSIiIlN1aXRlIEhlbHAgSW5kZXhpbmcgVG9vbCBTdWl0ZTogU3BlY2lhbCBldmVudHMgdGhhdCBqdXN0IHRoZSBIZWxwIEluZGV4aW5nIFRvb2wgc3VwcG9ydHMuCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnSElUICcKLQotY2xhc3MgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlX0V2ZW50czoKLQotICAgIGRlZiB0dXJuX2FuY2hvcl9pbmRleGluZyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidHVybiBhbmNob3IgaW5kZXhpbmc6IFR1cm5zIGFuY2hvciBpbmRleGluZyBvbiBvciBvZmYuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIGFuY2hvciBpbmRleGluZyBvbiBvciBvZmYKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndEFuYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCA9IHsKLSAgICAgICAgJ3dpdGhfcm9vdF91cmwnIDogJ3JVUkwnLAotICAgIH0KLQotICAgIGRlZiB0dXJuX3JlbW90ZV9yb290KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIHJlbW90ZSByb290OiBUdXJuIHVzYWdlIG9mIHJlbW90ZSByb290IGZvciBjb250ZW50IG9uIHRoZSB3ZWIgb24gb3Igb2ZmLiBJZiB0dXJuaW5nIFx4ZDJvblx4ZDMsIHN1cHBseSBhIHN0cmluZyBhcyBzZWNvbmQgcGFyYW1ldGVyLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogXHhkMm9uXHhkMyBvciBceGQyb2ZmXHhkMywgdG8gdHVybiByZW1vdGUgcm9vdCBvbiBvciBvZmYKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX3Jvb3RfdXJsOiBUaGUgcmVtb3RlIHJvb3QgdG8gdXNlLCBpbiB0aGUgZm9ybSBvZiBceGQyaHR0cDovL3d3dy5hcHBsZS5jb20vaGVscC9ceGQzLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0UmVtJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3R1cm5fcmVtb3RlX3Jvb3QpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIHVzZV90b2tlbml6ZXIoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInVzZSB0b2tlbml6ZXI6IFRlbGxzIHRoZSBpbmRleGluZyB0b29sIHdoaWNoIHRva2VuaXplciB0byB1c2UuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBTcGVjaWZ5IFx4ZDJFbmdsaXNoXHhkMywgXHhkMkV1cm9wZWFuXHhkMywgXHhkMkphcGFuZXNlXHhkMywgXHhkMktvcmVhblx4ZDMsIG9yIFx4ZDJTaW1wbGVceGQzLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd1VG9rJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBcHBsaWNhdGlvbiBjbGFzcyAiIiIKLSAgICB3YW50ID0gJ2NhcHAnCi1jbGFzcyBfUHJvcF9pZGxlU3RhdHVzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJpZGxlU3RhdHVzIC0gICIiIgotICAgIHdoaWNoID0gJ3NJZGwnCi0gICAgd2FudCA9ICdib29sJwotYXBwbGljYXRpb24uX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1hcHBsaWNhdGlvbi5fcHJpdnByb3BkaWN0ID0gewotICAgICdpZGxlU3RhdHVzJyA6IF9Qcm9wX2lkbGVTdGF0dXMsCi19Ci1hcHBsaWNhdGlvbi5fcHJpdmVsZW1kaWN0ID0gewotfQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ3NJZGwnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTZhZTcwLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIE1pc2NlbGxhbmVvdXMgU3RhbmRhcmRzOiBVc2VmdWwgZXZlbnRzIHRoYXQgYXJlblx4ZDV0IGluIGFueSBvdGhlciBzdWl0ZQotTGV2ZWwgMCwgdmVyc2lvbiAwCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ21pc2MnCi0KLWNsYXNzIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzX0V2ZW50czoKLQotICAgIGRlZiByZXZlcnQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInJldmVydDogUmV2ZXJ0IGFuIG9iamVjdCB0byB0aGUgbW9zdCByZWNlbnRseSBzYXZlZCB2ZXJzaW9uCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBvYmplY3QgdG8gcmV2ZXJ0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ21pc2MnCi0gICAgICAgIF9zdWJjb2RlID0gJ3J2cnQnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOWZlZTAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIiIiU3VpdGUgUmVxdWlyZWQgU3VpdGU6IFRlcm1zIHRoYXQgZXZlcnkgYXBwbGljYXRpb24gc2hvdWxkIHN1cHBvcnQKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdyZXFkJwotCi1mcm9tIFN0ZFN1aXRlcy5SZXF1aXJlZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgUmVxdWlyZWRfU3VpdGVfRXZlbnRzKFJlcXVpcmVkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBwYXNzCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMGI2M2EuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLSIiIlN1aXRlIFN0YW5kYXJkIFN1aXRlOiBDb21tb24gdGVybXMgZm9yIG1vc3QgYXBwbGljYXRpb25zCi1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnQ29SZScKLQotZnJvbSBTdGRTdWl0ZXMuU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWNsYXNzIFN0YW5kYXJkX1N1aXRlX0V2ZW50cyhTdGFuZGFyZF9TdWl0ZV9FdmVudHMpOgotCi0gICAgX2FyZ21hcF9jbG9zZSA9IHsKLSAgICAgICAgJ3NhdmluZycgOiAnc2F2bycsCi0gICAgICAgICdpbl8nIDogJ2tmaWwnLAotICAgIH0KLQotICAgIGRlZiBjbG9zZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiY2xvc2U6IENsb3NlIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdHMgdG8gY2xvc2UKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBzYXZpbmc6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBjaGFuZ2VzIHNob3VsZCBiZSBzYXZlZCBiZWZvcmUgY2xvc2luZwotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2Nsb3MnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfY2xvc2UpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotICAgICAgICBhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnc2F2bycsIF9FbnVtX3Nhdm8pCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgZGF0YV9zaXplKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJkYXRhIHNpemU6IFJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3Qgd2hvc2UgZGF0YSBzaXplIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpbiBieXRlcwotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnZHNpeicKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBnZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImdldDogR2V0IHRoZSBkYXRhIGZvciBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3Qgd2hvc2UgZGF0YSBpcyB0byBiZSByZXR1cm5lZAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IFRoZSBkYXRhIGZyb20gdGhlIG9iamVjdAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnZ2V0ZCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfbWFrZSA9IHsKLSAgICAgICAgJ25ldycgOiAna29jbCcsCi0gICAgICAgICdhdCcgOiAnaW5zaCcsCi0gICAgICAgICd3aXRoX2RhdGEnIDogJ2RhdGEnLAotICAgICAgICAnd2l0aF9wcm9wZXJ0aWVzJyA6ICdwcmR0JywKLSAgICB9Ci0KLSAgICBkZWYgbWFrZShzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJtYWtlOiBNYWtlIGEgbmV3IGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBuZXc6IHRoZSBjbGFzcyBvZiB0aGUgbmV3IGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBhdDogdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRvIGluc2VydCB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfZGF0YTogdGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX3Byb3BlcnRpZXM6IHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiBPYmplY3Qgc3BlY2lmaWVyIGZvciB0aGUgbmV3IGVsZW1lbnQKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2NyZWwnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfbWFrZSkKLSAgICAgICAgaWYgX25vX29iamVjdCBpcyBub3QgTm9uZTogcmFpc2UgVHlwZUVycm9yKCdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJykKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIG9wZW4oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm9wZW46IE9wZW4gdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gb3Blbi4gQ2FuIGJlIGEgbGlzdCBvZiBmaWxlcyBvciBhbiBvYmplY3Qgc3BlY2lmaWVyLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdhZXZ0JwotICAgICAgICBfc3ViY29kZSA9ICdvZG9jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIHByaW50XyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicHJpbnQ6IFByaW50IHRoZSBzcGVjaWZpZWQgb2JqZWN0KHMpCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIHByaW50LiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ3Bkb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3NhdmUgPSB7Ci0gICAgICAgICdpbl8nIDogJ2tmaWwnLAotICAgICAgICAnYXMnIDogJ2ZsdHAnLAotICAgIH0KLQotICAgIGRlZiBzYXZlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzYXZlOiBzYXZlIGEgc2V0IG9mIG9iamVjdHMKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gc2F2ZS4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBpbl86IHRoZSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdChzKQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGFzOiB0aGUgZmlsZSB0eXBlIG9mIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0byBzYXZlIHRoZSBkYXRhCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NhdmUnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2F2ZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3NldCA9IHsKLSAgICAgICAgJ3RvJyA6ICdkYXRhJywKLSAgICB9Ci0KLSAgICBkZWYgc2V0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzZXQ6IFNldCBhbiBvYmplY3RceGQ1cyBkYXRhCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIGNoYW5nZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHRvOiB0aGUgbmV3IHZhbHVlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NldGQnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2V0KQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi1jbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImFwcGxpY2F0aW9uIC0gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSAiIiIKLSAgICB3YW50ID0gJ2NhcHAnCi0jICAgICAgICBlbGVtZW50ICdjd2luJyBhcyBbJ2luZHgnLCAnbmFtZScsICdyZWxlJ10KLSMgICAgICAgIGVsZW1lbnQgJ2RvY3UnIGFzIFsnbmFtZSddCi0KLWNsYXNzIHdpbmRvdyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiIndpbmRvdyAtIEEgV2luZG93ICIiIgotICAgIHdhbnQgPSAnY3dpbicKLWNsYXNzIF9Qcm9wX2JvdW5kcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiYm91bmRzIC0gdGhlIGJvdW5kYXJ5IHJlY3RhbmdsZSBmb3IgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwYm5kJwotICAgIHdhbnQgPSAncWRydCcKLWNsYXNzIF9Qcm9wX2Nsb3NlYWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiY2xvc2VhYmxlIC0gRG9lcyB0aGUgd2luZG93IGhhdmUgYSBjbG9zZSBib3g/ICIiIgotICAgIHdoaWNoID0gJ2hjbGInCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfZmxvYXRpbmcoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImZsb2F0aW5nIC0gRG9lcyB0aGUgd2luZG93IGZsb2F0PyAiIiIKLSAgICB3aGljaCA9ICdpc2ZsJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX2luZGV4KGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJpbmRleCAtIHRoZSBudW1iZXIgb2YgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwaWR4JwotICAgIHdhbnQgPSAnbG9uZycKLWNsYXNzIF9Qcm9wX21vZGFsKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RhbCAtIElzIHRoZSB3aW5kb3cgbW9kYWw/ICIiIgotICAgIHdoaWNoID0gJ3Btb2QnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfbmFtZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibmFtZSAtIHRoZSB0aXRsZSBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BuYW0nCi0gICAgd2FudCA9ICdpdHh0JwotY2xhc3MgX1Byb3BfcG9zaXRpb24oYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInBvc2l0aW9uIC0gdXBwZXIgbGVmdCBjb29yZGluYXRlcyBvZiB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncHBvcycKLSAgICB3YW50ID0gJ1FEcHQnCi1jbGFzcyBfUHJvcF9yZXNpemFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInJlc2l6YWJsZSAtIElzIHRoZSB3aW5kb3cgcmVzaXphYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwcnN6JwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3RpdGxlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIidGl0bGVkIC0gRG9lcyB0aGUgd2luZG93IGhhdmUgYSB0aXRsZSBiYXI/ICIiIgotICAgIHdoaWNoID0gJ3B0aXQnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdmlzaWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIidmlzaWJsZSAtIGlzIHRoZSB3aW5kb3cgdmlzaWJsZT8gIiIiCi0gICAgd2hpY2ggPSAncHZpcycKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF96b29tYWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiem9vbWFibGUgLSBJcyB0aGUgd2luZG93IHpvb21hYmxlPyAiIiIKLSAgICB3aGljaCA9ICdpc3ptJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21lZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiem9vbWVkIC0gSXMgdGhlIHdpbmRvdyB6b29tZWQ/ICIiIgotICAgIHdoaWNoID0gJ3B6dW0nCi0gICAgd2FudCA9ICdib29sJwotCi1jbGFzcyBkb2N1bWVudChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImRvY3VtZW50IC0gQSBEb2N1bWVudCAiIiIKLSAgICB3YW50ID0gJ2RvY3UnCi1jbGFzcyBfUHJvcF9tb2RpZmllZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibW9kaWZpZWQgLSBIYXMgdGhlIGRvY3VtZW50IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3Qgc2F2ZT8gIiIiCi0gICAgd2hpY2ggPSAnaW1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci19Ci1hcHBsaWNhdGlvbi5fcHJpdmVsZW1kaWN0ID0gewotICAgICdkb2N1bWVudCcgOiBkb2N1bWVudCwKLSAgICAnd2luZG93JyA6IHdpbmRvdywKLX0KLXdpbmRvdy5fc3VwZXJjbGFzc25hbWVzID0gW10KLXdpbmRvdy5fcHJpdnByb3BkaWN0ID0gewotICAgICdib3VuZHMnIDogX1Byb3BfYm91bmRzLAotICAgICdjbG9zZWFibGUnIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdmbG9hdGluZycgOiBfUHJvcF9mbG9hdGluZywKLSAgICAnaW5kZXgnIDogX1Byb3BfaW5kZXgsCi0gICAgJ21vZGFsJyA6IF9Qcm9wX21vZGFsLAotICAgICduYW1lJyA6IF9Qcm9wX25hbWUsCi0gICAgJ3Bvc2l0aW9uJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdyZXNpemFibGUnIDogX1Byb3BfcmVzaXphYmxlLAotICAgICd0aXRsZWQnIDogX1Byb3BfdGl0bGVkLAotICAgICd2aXNpYmxlJyA6IF9Qcm9wX3Zpc2libGUsCi0gICAgJ3pvb21hYmxlJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICd6b29tZWQnIDogX1Byb3Bfem9vbWVkLAotfQotd2luZG93Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1kb2N1bWVudC5fc3VwZXJjbGFzc25hbWVzID0gW10KLWRvY3VtZW50Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ21vZGlmaWVkJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICduYW1lJyA6IF9Qcm9wX25hbWUsCi19Ci1kb2N1bWVudC5fcHJpdmVsZW1kaWN0ID0gewotfQotX0VudW1fc2F2byA9IHsKLSAgICAneWVzJyA6ICd5ZXMgJywgICAgICMgU2F2ZSBvYmplY3RzIG5vdwotICAgICdubycgOiAnbm8gICcsICAgICAgIyBEbyBub3Qgc2F2ZSBvYmplY3RzCi0gICAgJ2FzaycgOiAnYXNrICcsICAgICAjIEFzayB0aGUgdXNlciB3aGV0aGVyIHRvIHNhdmUKLX0KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLSAgICAnY3dpbicgOiB3aW5kb3csCi0gICAgJ2RvY3UnIDogZG9jdW1lbnQsCi19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotICAgICdoY2xiJyA6IF9Qcm9wX2Nsb3NlYWJsZSwKLSAgICAnaW1vZCcgOiBfUHJvcF9tb2RpZmllZCwKLSAgICAnaXNmbCcgOiBfUHJvcF9mbG9hdGluZywKLSAgICAnaXN6bScgOiBfUHJvcF96b29tYWJsZSwKLSAgICAncGJuZCcgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ3BpZHgnIDogX1Byb3BfaW5kZXgsCi0gICAgJ3Btb2QnIDogX1Byb3BfbW9kYWwsCi0gICAgJ3BuYW0nIDogX1Byb3BfbmFtZSwKLSAgICAncHBvcycgOiBfUHJvcF9wb3NpdGlvbiwKLSAgICAncHJzeicgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3B0aXQnIDogX1Byb3BfdGl0bGVkLAotICAgICdwdmlzJyA6IF9Qcm9wX3Zpc2libGUsCi0gICAgJ3B6dW0nIDogX1Byb3Bfem9vbWVkLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ3Nhdm8nIDogX0VudW1fc2F2bywKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1OWRmNS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0iIiIKLVBhY2thZ2UgZ2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotIiIiCi1pbXBvcnQgYWV0b29scwotRXJyb3IgPSBhZXRvb2xzLkVycm9yCi1pbXBvcnQgU3RhbmRhcmRfU3VpdGUKLWltcG9ydCBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUKLWltcG9ydCBvZGRzX2FuZF9lbmRzCi1pbXBvcnQgTWlzY2VsbGFuZW91c19TdGFuZGFyZHMKLWltcG9ydCBSZXF1aXJlZF9TdWl0ZQotCi0KLV9jb2RlX3RvX21vZHVsZSA9IHsKLSAgICAnQ29SZScgOiBTdGFuZGFyZF9TdWl0ZSwKLSAgICAnSElUICcgOiBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUsCi0gICAgJ09kZHMnIDogb2Rkc19hbmRfZW5kcywKLSAgICAnbWlzYycgOiBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcywKLSAgICAncmVxZCcgOiBSZXF1aXJlZF9TdWl0ZSwKLX0KLQotCi0KLV9jb2RlX3RvX2Z1bGxuYW1lID0gewotICAgICdDb1JlJyA6ICgnSGVscEluZGV4aW5nVG9vbC5TdGFuZGFyZF9TdWl0ZScsICdTdGFuZGFyZF9TdWl0ZScpLAotICAgICdISVQgJyA6ICgnSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnLCAnSGVscF9JbmRleGluZ19Ub29sX1N1aXRlJyksCi0gICAgJ09kZHMnIDogKCdIZWxwSW5kZXhpbmdUb29sLm9kZHNfYW5kX2VuZHMnLCAnb2Rkc19hbmRfZW5kcycpLAotICAgICdtaXNjJyA6ICgnSGVscEluZGV4aW5nVG9vbC5NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcycsICdNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcycpLAotICAgICdyZXFkJyA6ICgnSGVscEluZGV4aW5nVG9vbC5SZXF1aXJlZF9TdWl0ZScsICdSZXF1aXJlZF9TdWl0ZScpLAotfQotCi1mcm9tIFN0YW5kYXJkX1N1aXRlIGltcG9ydCAqCi1mcm9tIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSBpbXBvcnQgKgotZnJvbSBvZGRzX2FuZF9lbmRzIGltcG9ydCAqCi1mcm9tIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzIGltcG9ydCAqCi1mcm9tIFJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi0KLWRlZiBnZXRiYXNlY2xhc3Nlcyh2KToKLSAgICBpZiBub3QgZ2V0YXR0cih2LCAnX3Byb3BkaWN0JywgTm9uZSk6Ci0gICAgICAgIHYuX3Byb3BkaWN0ID0ge30KLSAgICAgICAgdi5fZWxlbWRpY3QgPSB7fQotICAgICAgICBmb3Igc3VwZXJjbGFzc25hbWUgaW4gZ2V0YXR0cih2LCAnX3N1cGVyY2xhc3NuYW1lcycsIFtdKToKLSAgICAgICAgICAgIHN1cGVyY2xhc3MgPSBldmFsKHN1cGVyY2xhc3NuYW1lKQotICAgICAgICAgICAgZ2V0YmFzZWNsYXNzZXMoc3VwZXJjbGFzcykKLSAgICAgICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfcHJvcGRpY3QnLCB7fSkpCi0gICAgICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cihzdXBlcmNsYXNzLCAnX2VsZW1kaWN0Jywge30pKQotICAgICAgICB2Ll9wcm9wZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZwcm9wZGljdCcsIHt9KSkKLSAgICAgICAgdi5fZWxlbWRpY3QudXBkYXRlKGdldGF0dHIodiwgJ19wcml2ZWxlbWRpY3QnLCB7fSkpCi0KLWltcG9ydCBTdGRTdWl0ZXMKLQotIwotIyBTZXQgcHJvcGVydHkgYW5kIGVsZW1lbnQgZGljdGlvbmFyaWVzIG5vdyB0aGF0IGFsbCBjbGFzc2VzIGhhdmUgYmVlbiBkZWZpbmVkCi0jCi1nZXRiYXNlY2xhc3Nlcyh3aW5kb3cpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLWdldGJhc2VjbGFzc2VzKGRvY3VtZW50KQotZ2V0YmFzZWNsYXNzZXMoYXBwbGljYXRpb24pCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLX0KLQotCi1jbGFzcyBIZWxwSW5kZXhpbmdUb29sKFN0YW5kYXJkX1N1aXRlX0V2ZW50cywKLSAgICAgICAgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlX0V2ZW50cywKLSAgICAgICAgb2Rkc19hbmRfZW5kc19FdmVudHMsCi0gICAgICAgIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzX0V2ZW50cywKLSAgICAgICAgUmVxdWlyZWRfU3VpdGVfRXZlbnRzLAotICAgICAgICBhZXRvb2xzLlRhbGtUbyk6Ci0gICAgX3NpZ25hdHVyZSA9ICdoaXRpJwotCi0gICAgX21vZHVsZU5hbWUgPSAnSGVscEluZGV4aW5nVG9vbCcKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZWNiOTUuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0iIiJTdWl0ZSBvZGRzIGFuZCBlbmRzOiBUaGluZ3MgdGhhdCBzaG91bGQgYmUgaW4gc29tZSBzdGFuZGFyZCBzdWl0ZSwgYnV0IGFyZW5ceGQ1dAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ09kZHMnCi0KLWNsYXNzIG9kZHNfYW5kX2VuZHNfRXZlbnRzOgotCi0gICAgZGVmIHNlbGVjdChzZWxmLCBfb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzZWxlY3Q6IFNlbGVjdCB0aGUgc3BlY2lmaWVkIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB0byBzZWxlY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAnc2xjdCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvUkVBRE1FIGIvTWFjL1Rvb2xzL0RvYy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNGQ1M2QuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1JbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGJ1aWxkIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBpbiBhIGZvcm0gdGhhdAotaXMgc3VpdGFibGUgZm9yIGFjY2VzcyB3aXRoIEFwcGxlIEhlbHAgVmlld2VyLiBUaGlzIHdpbGwgZW5hYmxlIHRoZQotIlB5dGhvbiBEb2N1bWVudGF0aW9uIiBtZW51IGVudHJpZXMgaW4gdGhlIE1hY1B5dGhvbiBJREUgSGVscCBtZW51LgotCi1VbmZvcnR1bmF0ZWx5IHRoZSBwcm9jZWR1cmUgdG8gYnVpbGQgdGhlIGRvY3MgaXMgbm90IHZlcnkgc3RyZWFtbGluZWQuCi0KLUZpcnN0LCBlZGl0IHNldHVwLnB5LiBBdCB0aGUgdG9wLCBlZGl0IE1BSk9SX1ZFUlNJT04gYW5kIE1JTk9SX1ZFUlNJT04sCi1hbmQgY2hlY2sgdGhhdCBERVNURElSIG1ha2VzIHNlbnNlLiBUaGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGluc3RhbGxlZAotaW5zaWRlIFB5dGhvbklERS5hcHAuCi0KLUluIERvY0J1aWxkLmluaXRpYWxpemVfb3B0aW9ucywgc2V0IHNlbGYuZG93bmxvYWQgdG8gVHJ1ZSBpZiB5b3Ugd2FudCB0bwotZG93bmxvYWQgdGhlIGRvY3MuIFNldCBpdCB0byBGYWxzZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgZG9jcyBmcm9tCi10aGUgc291cmNlIHRyZWUsIGJ1dCB0aGlzIHJlcXVpcmVzIExhVGV4IGFuZCBsb3RzIG9mIG90aGVyIHN0dWZmLgotRG9hYmxlLCBidXQgbm90IGVhc3kuCi0KLVNlY29uZCwgaWYgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGRvY3MgeW91IG1heSBuZWVkIHRvIGRvIGEgY291cGxlCi1tb3JlIGVkaXRzLiBUaGUgd2F5IHRoZSBkb2NzIGFyZSBwYWNrYWdlZCB3aWxsIG9mdGVuIGNoYW5nZSBiZXR3ZWVuCi1tYWpvciByZWxlYXNlcy4gRmlkZGxlIERvY0J1aWxkLmRvd25sb2FkRG9jcyB0byBtYWtlIGl0IGRvIHRoZSByaWdodAotdGhpbmcgKGRvd25sb2FkIHRoZSBkb2NzIGZyb20gcHl0aG9uLm9yZywgdW5wYWNrIHRoZW0sIHJlbmFtZSB0aGUKLWRpcmVjdG9yeSB0byAiYnVpbGQvaHRtbCIpLgotCi1BZnRlciB0aGVzZSBlZGl0cyB5b3Ugc2hvdWxkIGJlIHJlYWR5IHRvIHJvbGwuICJweXRob253IHNldHVwLnB5IGJ1aWxkIgotc2hvdWxkIGRvd25sb2FkIGFuZCB1bnBhY2sgKG9yIGJ1aWxkKSB0aGUgZG9jcy4gTmV4dCwgaXQgd2lsbCBkbyBzb21lCi1tYWdpYyB0byBtYWtlIHRoZSBkb2NzIGluZGV4YWJsZS4gRmluYWxseSwgaXQgd2lsbCBydW4gdGhlIEFwcGxlIEhlbHAKLUluZGV4aW5nIFRvb2wuIChUaGlzIGxhc3Qgc3RlcCBpcyB0aGUgcmVhc29uIHlvdSBtdXN0IHVzZSAicHl0aG9udyIgYXMKLW9wcG9zZWQgdG8gInB5dGhvbiIpLiBVc3VhbGx5IGl0IHdpbGwgdGltZSBvdXQgd2hpbGUgd2FpdGluZyBmb3IgQUhJVCB0bwotZG8gaXRzIHdvcmsuIFdhaXQgdW50aWwgQUhJVCBpcyBkb25lLgotCi1Ob3cgeW91J3JlIHJlYWR5IHRvIGluc3RhbGwgd2l0aCAicHl0aG9uIHNldHVwLnB5IGluc3RhbGwiLgotCi1BZnRlciB0aGlzIGlzIGRvbmUgdGVzdCB5b3VyIHdvcmsuIEZpcmUgdXAgUHl0aG9uSURFLCBhbmQgY2hlY2sgdGhhdAotSGVscC0+UHl0aG9uIERvY3VtZW50YXRpb24gYnJpbmdzIHVwIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBIZWxwIFZpZXdlci4KLUFsc28gb3BlbiBhbiBJREUgZWRpdCB3aW5kb3csIHR5cGUgc29tZXRoaW5nIGxpa2UgImltcG9ydCBzeXMiLCBzZWxlY3QKLSJpbXBvcnQiLCBhbmQgdXNlIEhlbHAtPkxvb2t1cCBpbiBQeXRob24gRG9jdW1lbnRhdGlvbiB0byBjaGVjayB0aGF0IHRoZQotaW5kZXggaGFzIGJlZW4gZ2VuZXJhdGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkgYi9NYWMvVG9vbHMvRG9jL3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzUxNTJjLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotIyBCdWlsZCBhbmQgaW5zdGFsbCBhbiBBcHBsZSBIZWxwIFZpZXdlciBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIFB5dGhvbgotIyBkb2N1bWVudGF0aW9uIGludG8gdGhlIGZyYW1ld29yay4KLSMgQ29kZSBieSBCaWxsIEZhbmNoZXIsIHdpdGggc29tZSBtb2RpZmljYXRpb25zIGJ5IEphY2sgSmFuc2VuLgotIwotIyBZb3UgbXVzdCBydW4gdGhpcyBhcyBhIHR3by1zdGVwIHByb2Nlc3MKLSMgMS4gcHl0aG9uIHNldHVwRG9jcy5weSBidWlsZAotIyAyLiBXYWl0IGZvciBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgdG8gZmluaXNoCi0jIDMuIHB5dGhvbiBzZXR1cERvY3MucHkgaW5zdGFsbAotIwotIyBUbyBkbzoKLSMgLSB0ZXN0IHdoZXRoZXIgdGhlIGRvY3MgYXJlIGF2YWlsYWJsZSBsb2NhbGx5IGJlZm9yZSBkb3dubG9hZGluZwotIyAtIGZpeCBidWlsZERvY3NGcm9tU291cmNlCi0jIC0gR2V0IGRvY3VtZW50YXRpb24gdmVyc2lvbiBmcm9tIHN5cy52ZXJzaW9uLCBmYWxsYmFjayB0byAyLjIuMQotIyAtIFNlZSBpZiB3ZSBjYW4gc29tZWhvdyBkZXRlY3QgdGhhdCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgaXMgZmluaXNoZWQKLSMgLSBkYXRhX2ZpbGVzIHRvIHNldHVwKCkgZG9lc24ndCBzZWVtIHRoZSByaWdodCB3YXkgdG8gcGFzcyB0aGUgYXJndW1lbnRzCi0jCi1pbXBvcnQgc3lzLCBvcywgcmUKLWZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZCBpbXBvcnQgYnVpbGQKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IGNvcHlfZmlsZQotZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IGNvcHlfdHJlZQotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBsb2cKLWZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZywgZGVwX3V0aWwKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNoYW5nZV9yb290Ci1pbXBvcnQgSGVscEluZGV4aW5nVG9vbAotaW1wb3J0IENhcmJvbi5GaWxlCi1pbXBvcnQgdGltZQotCi1NQUpPUl9WRVJTSU9OPScyLjQnCi1NSU5PUl9WRVJTSU9OPScyLjQuMScKLURFU1RESVI9Jy9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uLSVzL1B5dGhvbklERS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovUHl0aG9uRG9jdW1lbnRhdGlvbicgJSBNQUpPUl9WRVJTSU9OCi0KLWNsYXNzIERvY0J1aWxkKGJ1aWxkKToKLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBidWlsZC5pbml0aWFsaXplX29wdGlvbnMoc2VsZikKLSAgICAgICAgc2VsZi5idWlsZF9odG1sID0gTm9uZQotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuZG93bmxvYWQgPSAxCi0gICAgICAgIHNlbGYuZG9jX3ZlcnNpb24gPSBNSU5PUl9WRVJTSU9OICMgT25seSBuZWVkZWQgaWYgZG93bmxvYWQgaXMgdHJ1ZQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmZpbmFsaXplX29wdGlvbnMoc2VsZikKLSAgICAgICAgaWYgc2VsZi5idWlsZF9odG1sIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnaHRtbCcpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfZGVzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgJ1B5dGhvbkRvY3VtZW50YXRpb24nKQotCi0gICAgZGVmIHNwYXduKHNlbGYsICphcmdzKToKLSAgICAgICAgc3Bhd24oYXJncywgMSwgIHNlbGYudmVyYm9zZSwgc2VsZi5kcnlfcnVuKQotCi0gICAgZGVmIGRvd25sb2FkRG9jcyhzZWxmKToKLSAgICAgICAgd29ya2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgICMgWFhYIE5vdGU6IHRoZSBuZXh0IHN0cmluZ3MgbWF5IGNoYW5nZSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbgotICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vZG9jLyVzL2h0bWwtJXMudGFyLmJ6MicgJSBcCi0gICAgICAgICAgICAgICAgKHNlbGYuZG9jX3ZlcnNpb24sc2VsZi5kb2NfdmVyc2lvbikKLSAgICAgICAgdGFyZmlsZSA9ICdodG1sLSVzLnRhci5iejInICUgc2VsZi5kb2NfdmVyc2lvbgotICAgICAgICBkaXJuYW1lID0gJ1B5dGhvbi1Eb2NzLSVzJyAlIHNlbGYuZG9jX3ZlcnNpb24KLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCclczogYWxyZWFkeSBleGlzdHMsIHBsZWFzZSByZW1vdmUgYW5kIHRyeSBhZ2FpbicgJSBzZWxmLmJ1aWxkX2h0bWwpCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuYnVpbGRfYmFzZSkKLSAgICAgICAgc2VsZi5zcGF3bignY3VybCcsJy1PJywgdXJsKQotICAgICAgICBzZWxmLnNwYXduKCd0YXInLCAnLXhqZicsIHRhcmZpbGUpCi0gICAgICAgIG9zLnJlbmFtZShkaXJuYW1lLCAnaHRtbCcpCi0gICAgICAgIG9zLmNoZGlyKHdvcmtkaXIpCi0jIyAgICAgICAgcHJpbnQgIioqIFBsZWFzZSB1bnBhY2sgJXMiICUgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgdGFyZmlsZSkKLSMjICAgICAgICBwcmludCAiKiogVW5wYWNrIHRoZSBmaWxlcyBpbnRvICVzIiAlIHNlbGYuYnVpbGRfaHRtbAotIyMgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIllvdSBuZWVkIHRvIHVucGFjayB0aGUgZG9jcyBtYW51YWxseSIKLQotICAgIGRlZiBidWlsZERvY3NGcm9tU291cmNlKHNlbGYpOgotICAgICAgICBzcmNkaXIgPSAnLi4vLi4vLi4nCi0gICAgICAgIGRvY2RpciA9IG9zLnBhdGguam9pbihzcmNkaXIsICdEb2MnKQotICAgICAgICBodG1sZGlyID0gb3MucGF0aC5qb2luKGRvY2RpciwgJ2h0bWwnKQotICAgICAgICBzcGF3bigoJ21ha2UnLCctLWRpcmVjdG9yeScsIGRvY2RpciwgJ2h0bWwnKSwgMSwgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgY29weV90cmVlKGh0bWxkaXIsIHNlbGYuYnVpbGRfaHRtbCkKLQotICAgIGRlZiBlbnN1cmVIdG1sKHNlbGYpOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIGlmIHNlbGYuZG93bmxvYWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kb3dubG9hZERvY3MoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRG9jc0Zyb21Tb3VyY2UoKQotCi0gICAgZGVmIGhhY2tJbmRleChzZWxmKToKLSAgICAgICAgaW5kX2h0bWwgPSAnaW5kZXguaHRtbCcKLSAgICAgICAgI3ByaW50ICdzZWxmLmJ1aWxkX2Rlc3QgPScsIHNlbGYuYnVpbGRfZGVzdAotICAgICAgICBoYWNrZWRJbmRleCA9IGZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwgaW5kX2h0bWwpLCd3JykKLSAgICAgICAgb3JpZ0luZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLGluZF9odG1sKSkKLSAgICAgICAgciA9IHJlLmNvbXBpbGUoJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Lio8L3N0eWxlPicsIHJlLkRPVEFMTCkKLSAgICAgICAgaGFja2VkSW5kZXgud3JpdGUoci5zdWIoJzxNRVRBIE5BTUU9IkFwcGxlVGl0bGUiIENPTlRFTlQ9IlB5dGhvbiBEb2N1bWVudGF0aW9uIj4nLG9yaWdJbmRleC5yZWFkKCkpKQotCi0gICAgZGVmIGhhY2tGaWxlKHNlbGYsZCxmKToKLSAgICAgICAgb3JpZ1BhdGggPSBvcy5wYXRoLmpvaW4oZCxmKQotICAgICAgICBhc3NlcnQob3JpZ1BhdGhbOmxlbihzZWxmLmJ1aWxkX2h0bWwpXSA9PSBzZWxmLmJ1aWxkX2h0bWwpCi0gICAgICAgIG91dFBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBkW2xlbihzZWxmLmJ1aWxkX2h0bWwpKzE6XSwgZikKLSAgICAgICAgKG5hbWUsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGYpCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3JpZ1BhdGgpOgotICAgICAgICAgICAgc2VsZi5ta3BhdGgob3V0UGF0aCkKLSAgICAgICAgZWxpZiBleHQgPT0gJy5odG1sJzoKLSAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZTogcHJpbnQoJ2hhY2tpbmcgJXMgdG8gJXMnICUgKG9yaWdQYXRoLG91dFBhdGgpKQotICAgICAgICAgICAgaGFja2VkRmlsZSA9IGZpbGUob3V0UGF0aCwgJ3cnKQotICAgICAgICAgICAgb3JpZ0ZpbGUgPSBmaWxlKG9yaWdQYXRoLCdyJykKLSAgICAgICAgICAgIGhhY2tlZEZpbGUud3JpdGUoc2VsZi5yLnN1YignPGRsPjxkdD48ZGQ+Jywgb3JpZ0ZpbGUucmVhZCgpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvcHlfZmlsZShvcmlnUGF0aCwgb3V0UGF0aCkKLQotICAgIGRlZiBoYWNrSHRtbChzZWxmKToKLSAgICAgICAgc2VsZi5yID0gcmUuY29tcGlsZSgnPGRsPjxkZD4nKQotICAgICAgICBvcy53YWxrKHNlbGYuYnVpbGRfaHRtbCwgc2VsZi52aXNpdCwgTm9uZSkKLQotICAgIGRlZiB2aXNpdChzZWxmLCBkdW1teSwgZGlybmFtZSwgZmlsZW5hbWVzKToKLSAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgc2VsZi5oYWNrRmlsZShkaXJuYW1lLCBmKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9ICcvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwJwotICAgICAgICBzZWxmLnNwYXduKCdvcGVuJywgJy1hJywgYXBwICwgc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBwcmludCgiUGxlYXNlIHdhaXQgdW50aWwgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIGZpbmlzaGVzIGJlZm9yZSBpbnN0YWxsaW5nIikKLQotICAgIGRlZiBtYWtlSGVscEluZGV4KHNlbGYpOgotICAgICAgICBhcHAgPSBIZWxwSW5kZXhpbmdUb29sLkhlbHBJbmRleGluZ1Rvb2woc3RhcnQ9MSkKLSAgICAgICAgYXBwLm9wZW4oQ2FyYm9uLkZpbGUuRlNTcGVjKHNlbGYuYnVpbGRfZGVzdCkpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhaXRpbmcgZm9yIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBzdGFydC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBub3QgaWRsZTogYnJlYWsKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIi4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhaXRpbmcgZm9yIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2guLi4iKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgIyBUaGlzIGlzIGJhZCBkZXNpZ24gaW4gdGhlIHN1aXRlIGdlbmVyYXRpb24gY29kZSEKLSAgICAgICAgICAgIGlkbGUgPSBhcHAuX2dldChIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5fUHJvcF9pZGxlU3RhdHVzKCkpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQotICAgICAgICAgICAgaWYgaWRsZTogYnJlYWsKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIi4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCi0KLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfYmFzZSkKLSAgICAgICAgc2VsZi5lbnN1cmVIdG1sKCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2FuJ3QgZmluZCBzb3VyY2UgZm9sZGVyIGZvciBkb2N1bWVudGF0aW9uLiIpCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgaWYgZGVwX3V0aWwubmV3ZXIob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfaHRtbCwnaW5kZXguaHRtbCcpLCBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCdpbmRleC5odG1sJykpOgotICAgICAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICAgICAgc2VsZi5oYWNrSHRtbCgpCi0gICAgICAgICAgICBzZWxmLmhhY2tJbmRleCgpCi0gICAgICAgICAgICBzZWxmLm1ha2VIZWxwSW5kZXgoKQotCi1jbGFzcyBBSFZEb2NJbnN0YWxsKENvbW1hbmQpOgotICAgIGRlc2NyaXB0aW9uID0gImluc3RhbGwgQXBwbGUgSGVscCBWaWV3ZXIgaHRtbCBmaWxlcyIKLSAgICB1c2VyX29wdGlvbnMgPSBbKCdpbnN0YWxsLWRvYz0nLCAnZCcsCi0gICAgICAgICAgICAnZGlyZWN0b3J5IHRvIGluc3RhbGwgSFRNTCB0cmVlJyksCi0gICAgICAgICAgICAgKCdyb290PScsIE5vbmUsCi0gICAgICAgICAgICAgImluc3RhbGwgZXZlcnl0aGluZyByZWxhdGl2ZSB0byB0aGlzIGFsdGVybmF0ZSByb290IGRpcmVjdG9yeSIpLAotICAgICAgICAgICAgXQotCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gTm9uZQotICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gTm9uZQotICAgICAgICBzZWxmLnByZWZpeCA9IE5vbmUKLSAgICAgICAgc2VsZi5yb290ID0gTm9uZQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuc2V0X3VuZGVmaW5lZF9vcHRpb25zKCdpbnN0YWxsJywKLSAgICAgICAgICAgICAgICAoJ3ByZWZpeCcsICdwcmVmaXgnKSwKLSAgICAgICAgICAgICAgICAoJ3Jvb3QnLCAncm9vdCcpKQotIyAgICAgICAgICAgICAgIGltcG9ydCBwZGIgOyBwZGIuc2V0X3RyYWNlKCkKLSAgICAgICAgYnVpbGRfY21kID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gYnVpbGRfY21kLmJ1aWxkX2Rlc3QKLSAgICAgICAgaWYgc2VsZi5pbnN0YWxsX2RvYyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pbnN0YWxsX2RvYyA9IG9zLnBhdGguam9pbihzZWxmLnByZWZpeCwgREVTVERJUikKLSAgICAgICAgcHJpbnQoJ0lOU1RBTEwnLCBzZWxmLmJ1aWxkX2Rlc3QsICctPicsIHNlbGYuaW5zdGFsbF9kb2MpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBwcmludCgiUnVubmluZyBJbnN0YWxsZXIiKQotICAgICAgICBpbnN0bG9jID0gc2VsZi5pbnN0YWxsX2RvYwotICAgICAgICBpZiBzZWxmLnJvb3Q6Ci0gICAgICAgICAgICBpbnN0bG9jID0gY2hhbmdlX3Jvb3Qoc2VsZi5yb290LCBpbnN0bG9jKQotICAgICAgICBzZWxmLm1rcGF0aChpbnN0bG9jKQotICAgICAgICBjb3B5X3RyZWUoc2VsZi5idWlsZF9kZXN0LCBpbnN0bG9jKQotICAgICAgICBwcmludCgiSW5zdGFsbGF0aW9uIGNvbXBsZXRlIikKLQotZGVmIG11bmdlVmVyc2lvbihpbmZpbGUsIG91dGZpbGUpOgotICAgIGkgPSBmaWxlKGluZmlsZSwncicpCi0gICAgbyA9IGZpbGUob3V0ZmlsZSwndycpCi0gICAgby53cml0ZShyZS5zdWIoJ1wkXChWRVJTSU9OXCknLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignVkVSU0lPTicpLGkucmVhZCgpKSkKLSAgICBpLmNsb3NlKCkKLSAgICBvLmNsb3NlKCkKLQotZGVmIG1haW4oKToKLSAgICAjIHR1cm4gb2ZmIHdhcm5pbmdzIHdoZW4gZGVwcmVjYXRlZCBtb2R1bGVzIGFyZSBpbXBvcnRlZAotIyMgICAgICBpbXBvcnQgd2FybmluZ3MKLSMjICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQotICAgIHNldHVwKG5hbWUgPSAnRG9jdW1lbnRhdGlvbicsCi0gICAgICAgICAgICB2ZXJzaW9uID0gJyVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLAotICAgICAgICAgICAgY21kY2xhc3MgPSB7J2luc3RhbGxfZGF0YSc6QUhWRG9jSW5zdGFsbCwgJ2J1aWxkJzpEb2NCdWlsZH0sCi0gICAgICAgICAgICBkYXRhX2ZpbGVzID0gWydkdW1teSddLAotICAgICAgICAgICAgKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkgYi9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weQppbmRleCA2Y2MxMzBmLi5mNTY3OWQzIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weQorKysgYi9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weQpAQCAtMjcwLDcgKzI3MCw3IEBACiBkZWwgX19sb2FkCiAiIiIKIAotTUFZTUlTU19NT0RVTEVTID0gWydtYWMnLCAnb3MyJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCitNQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdudCcsICdudHBhdGgnLCAnZG9zJywgJ2Rvc3BhdGgnLAogICAgICd3aW4zMmFwaScsICdjZScsICdfd2lucmVnJywgJ250dXJsMnBhdGgnLCAnc2l0ZWN1c3RvbWl6ZScsCiAgICAgJ29yZy5weXRob24uY29yZScsICdyaXNjb3MnLCAncmlzY29zZW52aXJvbicsICdyaXNjb3NwYXRoJwogXQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5IGIvTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMWQ5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkKQEAgLTAsMCArMSw5NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitmcm9tIENvY29hIGltcG9ydCBOU011dGFibGVEaWN0aW9uYXJ5LCBOU011dGFibGVBcnJheSwgTlNTdHJpbmcsIE5TRGF0ZQorZnJvbSBDb2NvYSBpbXBvcnQgTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0Citmcm9tIENvY29hIGltcG9ydCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wCitmcm9tIENvY29hIGltcG9ydCBDRlVVSURDcmVhdGVGcm9tU3RyaW5nLCBOU051bGwsIE5TVVVJRCwgQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhCitmcm9tIENvY29hIGltcG9ydCBOU1VSTAorCitpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CitpbXBvcnQgYmluYXNjaWkKKworRk9STUFUUz1bCisjICAgICgnb3BlbnN0ZXAnLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0KSwKKyAgICAoJ3BsaXN0bGliLkZNVF9YTUwnLCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wKSwKKyAgICAoJ3BsaXN0bGliLkZNVF9CSU5BUlknLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wKSwKK10KKworZGVmIG5zc3RyKHZhbHVlKToKKyAgICByZXR1cm4gTlNTdHJpbmcuYWxsb2MoKS5pbml0V2l0aFN0cmluZ18odmFsdWUpCisKKworZGVmIG1haW4oKToKKyAgICBwbCA9IE9yZGVyZWREaWN0KCkKKworICAgIHNlY29uZHMgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMsIHR6aW5mbz1kYXRldGltZS50aW1lem9uZShkYXRldGltZS50aW1lZGVsdGEoMCkpKS50aW1lc3RhbXAoKQorICAgIHBsW25zc3RyKCdhRGF0ZScpXSA9IE5TRGF0ZS5kYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MF8oc2Vjb25kcykKKworICAgIHBsW25zc3RyKCdhRGljdCcpXSA9IGQgPSBPcmRlcmVkRGljdCgpCisgICAgZFtuc3N0cignYUZhbHNlVmFsdWUnKV0gPSBGYWxzZQorICAgIGRbbnNzdHIoJ2FUcnVlVmFsdWUnKV0gPSBUcnVlCisgICAgZFtuc3N0cignYVVuaWNvZGVWYWx1ZScpXSA9ICJNXHhlNHNzaWcsIE1hXHhkZiIKKyAgICBkW25zc3RyKCdhbm90aGVyU3RyaW5nJyldID0gIjxoZWxsbyAmICdoaScgdGhlcmUhPiIKKyAgICBkW25zc3RyKCdkZWVwZXJEaWN0JyldID0gZGQgPSBPcmRlcmVkRGljdCgpCisgICAgZGRbbnNzdHIoJ2EnKV0gPSAxNworICAgIGRkW25zc3RyKCdiJyldID0gMzIuNQorICAgIGRkW25zc3RyKCdjJyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoMSkKKyAgICBhLmFwcGVuZCgyKQorICAgIGEuYXBwZW5kKG5zc3RyKCd0ZXh0JykpCisKKyAgICBwbFtuc3N0cignYUZsb2F0JyldID0gMC41CisKKyAgICBwbFtuc3N0cignYUxpc3QnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChuc3N0cignQScpKQorICAgIGEuYXBwZW5kKG5zc3RyKCdCJykpCisgICAgYS5hcHBlbmQoMTIpCisgICAgYS5hcHBlbmQoMzIuNSkKKyAgICBhYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoYWEpCisgICAgYWEuYXBwZW5kKDEpCisgICAgYWEuYXBwZW5kKDIpCisgICAgYWEuYXBwZW5kKDMpCisKKyAgICBwbFtuc3N0cignYVN0cmluZycpXSA9IG5zc3RyKCdEb29kYWgnKQorCisgICAgcGxbbnNzdHIoJ2FuRW1wdHlEaWN0JyldID0gTlNNdXRhYmxlRGljdGlvbmFyeS5hbGxvYygpLmluaXQoKQorCisgICAgcGxbbnNzdHIoJ2FuRW1wdHlMaXN0JyldID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKworICAgIHBsW25zc3RyKCdhbkludCcpXSA9IDcyOAorCisgICAgcGxbbnNzdHIoJ25lc3RlZERhdGEnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChiJycnPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMycnJykKKworCisgICAgcGxbbnNzdHIoJ3NvbWVEYXRhJyldID0gYic8YmluYXJ5IGd1bms+JworCisgICAgcGxbbnNzdHIoJ3NvbWVNb3JlRGF0YScpXSA9IGInJyc8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzJycnCisKKyAgICBwbFtuc3N0cignXHhjNWJlbnJhYScpXSA9IG5zc3RyKCJUaGF0IHdhcyBhIHVuaWNvZGUga2V5LiIpCisKKyAgICBwcmludCgiVEVTVERBVEE9eyIpCisgICAgZm9yIGZtdF9uYW1lLCBmbXRfa2V5IGluIEZPUk1BVFM6CisgICAgICAgIGRhdGEsIGVycm9yID0gTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uLmRhdGFXaXRoUHJvcGVydHlMaXN0X2Zvcm1hdF9vcHRpb25zX2Vycm9yXygKKyAgICAgICAgICAgIHBsLCBmbXRfa2V5LCAwLCBOb25lKQorICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCgiQ2Fubm90IHNlcmlhbGl6ZSIsIGZtdF9uYW1lLCBlcnJvcikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIiAgICAlczogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnXG4gICAgICAgICVzJycnKSwiJShmbXRfbmFtZSwgX2VuY29kZV9iYXNlNjQoYnl0ZXMoZGF0YSkpLmRlY29kZSgnYXNjaWknKVs6LTFdKSkKKworICAgIHByaW50KCJ9IikKKyAgICBwcmludCgpCisKK2RlZiBfZW5jb2RlX2Jhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTYwKToKKyAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKKyAgICBwaWVjZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6CisgICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCisgICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCisgICAgcmV0dXJuIGInICAgICAgICAnLmpvaW4ocGllY2VzKQorCittYWluKCkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgppbmRleCBhNmFhOTc1Li5mODQzYWE1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrIGIvTWFrZWZpbGUucHJlLmluCkBAIC0xMjcsNyArMTI3LDYgQEAKICMgU3ltYm9scyB1c2VkIGZvciB1c2luZyBzaGFyZWQgbGlicmFyaWVzCiBTSExJQl9TVUZGSVg9CUBTSExJQl9TVUZGSVhACiBFWFRfU1VGRklYPQlARVhUX1NVRkZJWEAKLVNPPQkJJChTSExJQl9TVUZGSVgpCiBMRFNIQVJFRD0JQExEU0hBUkVEQCAkKFBZX0xERkxBR1MpCiBCTERTSEFSRUQ9CUBCTERTSEFSRURAICQoUFlfTERGTEFHUykKIExEQ1hYU0hBUkVEPQlATERDWFhTSEFSRURACkBAIC0xNDksMTIgKzE0OCwyMSBAQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPUBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQAogQEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRAZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogCisjIE9wdGlvbiB0byBpbnN0YWxsIHRvIHN0cmlwIGJpbmFyaWVzCitTVFJJUEZMQUc9LXMKKworIyBGbGFncyB0byBsaXBvIHRvIHByb2R1Y2UgYSAzMi1iaXQtb25seSB1bml2ZXJzYWwgZXhlY3V0YWJsZQorTElQT18zMkJJVF9GTEFHUz1ATElQT18zMkJJVF9GTEFHU0AKKwogIyBPcHRpb25zIHRvIGVuYWJsZSBwcmViaW5kaW5nIChmb3IgZmFzdCBzdGFydHVwIHByaW9yIHRvIE1hYyBPUyBYIDEwLjMpCiBPVEhFUl9MSUJUT09MX09QVD1AT1RIRVJfTElCVE9PTF9PUFRACiAKICMgRW52aXJvbm1lbnQgdG8gcnVuIHNoYXJlZCBweXRob24gd2l0aG91dCBpbnN0YWxsZWQgbGlicmFyaWVzCiBSVU5TSEFSRUQ9ICAgICAgIEBSVU5TSEFSRURACiAKKyMgZW5zdXJlcGlwIG9wdGlvbnMKK0VOU1VSRVBJUD0gICAgICBARU5TVVJFUElQQAorCiAjIE1vZGVzIGZvciBkaXJlY3RvcmllcywgZXhlY3V0YWJsZXMgYW5kIGRhdGEgZmlsZXMgY3JlYXRlZCBieSB0aGUKICMgaW5zdGFsbCBwcm9jZXNzLiAgRGVmYXVsdCB0byB1c2VyLW9ubHktd3JpdGFibGUgZm9yIGFsbCBmaWxlIHR5cGVzLgogRElSTU9ERT0JNzU1CkBAIC0yMTYsNiArMjI0LDEyIEBACiBQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgLW4gMiAtLXdpdGgtZ2MgLS13aXRoLXN5c2NoZWNrCiAjUFJPRklMRV9UQVNLPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKIAorIyByZXBvcnQgZmlsZXMgZm9yIGdjb3YgLyBsY292IGNvdmVyYWdlIHJlcG9ydAorQ09WRVJBR0VfSU5GTz0JJChhYnNfYnVpbGRkaXIpL2NvdmVyYWdlLmluZm8KK0NPVkVSQUdFX1JFUE9SVD0kKGFic19idWlsZGRpcikvbGNvdi1yZXBvcnQKK0NPVkVSQUdFX1JFUE9SVF9PUFRJT05TPS0tbm8tYnJhbmNoLWNvdmVyYWdlIC0tdGl0bGUgIkNQeXRob24gbGNvdiByZXBvcnQiCisKKwogIyA9PT0gRGVmaW5pdGlvbnMgYWRkZWQgYnkgbWFrZXNldHVwID09PQogCiAKQEAgLTM2MSw2ICszNzUsNyBAQAogCQlQeXRob24vcHlhcmVuYS5vIFwKIAkJUHl0aG9uL3B5Y3R5cGUubyBcCiAJCVB5dGhvbi9weWZwZS5vIFwKKwkJUHl0aG9uL3B5aGFzaC5vIFwKIAkJUHl0aG9uL3B5bWF0aC5vIFwKIAkJUHl0aG9uL3B5c3RhdGUubyBcCiAJCVB5dGhvbi9weXRob25ydW4ubyBcCkBAIC00NDQsNyArNDU5LDcgQEAKIAogIyBEZWZhdWx0IHRhcmdldAogYWxsOgkJYnVpbGRfYWxsCi1idWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcyBNb2R1bGVzL190ZXN0ZW1iZWQKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZCBweXRob24tY29uZmlnCiAKICMgQ29tcGlsZSBhIGJpbmFyeSB3aXRoIGdjYyBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24uCiBwcm9maWxlLW9wdDoKQEAgLTQ2OCwxMSArNDgzLDU0IEBACiBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6CiAJJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKIAorIyBDb21waWxlIGFuZCBydW4gd2l0aCBnY292CisuUEhPTlk9Y292ZXJhZ2UgY292ZXJhZ2UtbGNvdiBjb3ZlcmFnZS1yZXBvcnQKIGNvdmVyYWdlOgogCUBlY2hvICJCdWlsZGluZyB3aXRoIHN1cHBvcnQgZm9yIGNvdmVyYWdlIGNoZWNraW5nOiIKLQkkKE1BS0UpIGNsZWFuCisJJChNQUtFKSBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtTzAgLXBnIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIgTElCUz0iJChMSUJTKSAtbGdjb3YiCiAKK2NvdmVyYWdlLWxjb3Y6CisJQGVjaG8gIkNyZWF0aW5nIENvdmVyYWdlIEhUTUwgcmVwb3J0IHdpdGggTENPVjoiCisJQHJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlAcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQorCUBsY292IC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAkKGFic19idWlsZGRpcikgXAorCSAgICAtLWJhc2UtZGlyZWN0b3J5ICQocmVhbHBhdGggJChhYnNfYnVpbGRkaXIpKSBcCisJICAgIC0tcGF0aCAkKHJlYWxwYXRoICQoYWJzX3NyY2RpcikpIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJOiAjIHJlbW92ZSAzcmQgcGFydHkgbW9kdWxlcyBhbmQgc3lzdGVtIGhlYWRlcnMKKwlAbGNvdiAtLXJlbW92ZSAkKENPVkVSQUdFX0lORk8pIFwKKwkgICAgJyovTW9kdWxlcy9fY3R5cGVzL2xpYmZmaSovKicgXAorCSAgICAnKi9Nb2R1bGVzL19zaGEzL2tlY2Nhay8qJyBcCisJICAgICcqL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvKicgXAorCSAgICAnKi9Nb2R1bGVzL2V4cGF0LyonIFwKKwkgICAgJyovTW9kdWxlcy96bGliLyonIFwKKwkgICAgJyovSW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9sb2NhbC9pbmNsdWRlLyonIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJQGdlbmh0bWwgJChDT1ZFUkFHRV9JTkZPKSAtLW91dHB1dC1kaXJlY3RvcnkgJChDT1ZFUkFHRV9SRVBPUlQpIFwKKwkgICAgJChDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUykKKwlAZWNobworCUBlY2hvICJsY292IHJlcG9ydCBhdCAkKENPVkVSQUdFX1JFUE9SVCkvaW5kZXguaHRtbCIKKwlAZWNobworCitjb3ZlcmFnZS1yZXBvcnQ6CisJOiAjIGZvcmNlIHJlYnVpbGRpbmcgb2YgcGFyc2VyIGFuZCBpbXBvcnRsaWIKKwlAdG91Y2ggJChHUkFNTUFSX0lOUFVUKQorCUB0b3VjaCAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisJOiAjIGJ1aWxkIHdpdGggY292ZXJhZ2UgaW5mbworCSQoTUFLRSkgY292ZXJhZ2UKKwk6ICMgcnVuIHRlc3RzLCBpZ25vcmUgZmFpbHVyZXMKKwkkKFRFU1RSVU5ORVIpICQoVEVTVE9QVFMpIHx8IHRydWUKKwk6ICMgYnVpbGQgbGNvdiByZXBvcnQKKwkkKE1BS0UpIGNvdmVyYWdlLWxjb3YKKworIyBSdW4gIkFyZ3VtZW50IENsaW5pYyIgb3ZlciBhbGwgc291cmNlIGZpbGVzCisjIChkZXBlbmRzIG9uIHB5dGhvbiBoYXZpbmcgYWxyZWFkeSBiZWVuIGJ1aWx0KQorLlBIT05ZPWNsaW5pYworY2xpbmljOiAkKEJVSUxEUFlUSE9OKQorCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC4vVG9vbHMvY2xpbmljL2NsaW5pYy5weSAtLW1ha2UKIAogIyBCdWlsZCB0aGUgaW50ZXJwcmV0ZXIKICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKQEAgLTY0Niw2ICs3MDQsOCBAQAogTW9kdWxlcy9fdGVzdGVtYmVkLm86ICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCSQoTUFJTkNDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAorTW9kdWxlcy9fc3JlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL19zcmUuYyAkKHNyY2RpcikvTW9kdWxlcy9zcmUuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2xpYi5oCisKIE1vZHVsZXMvcG9zaXhtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCiAKIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dycG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKQEAgLTcxMywyNyArNzczLDMxIEBACiAJCQkJJChzcmNkaXIpL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAogCiBCWVRFU1RSX0RFUFMgPSBcCi0JCSQoc3JjZGlyKS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKIAotVU5JQ09ERV9ERVBTID0gJChCWVRFU1RSX0RFUFMpIFwKK1VOSUNPREVfREVQUyA9IFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKIApAQCAtNzUxLDkgKzgxNSw2IEBACiAKIFB5dGhvbi9jZXZhbC5vOiAkKE9QQ09ERVRBUkdFVFNfSCkgJChzcmNkaXIpL1B5dGhvbi9jZXZhbF9naWwuaAogCi1QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUubzogJChzcmNkaXIpL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIFwKLQkJCQkkKEJZVEVTVFJfREVQUykKLQogUHl0aG9uL2Zyb3plbi5vOiBQeXRob24vaW1wb3J0bGliLmgKIAogT2JqZWN0cy90eXBlb2JqZWN0Lm86IE9iamVjdHMvdHlwZXNsb3RzLmluYwpAQCAtODIzLDYgKzg4NCw3IEBACiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZGVidWcuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZXJyb3JzLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWZwZS5oIFwKKwkJJChzcmNkaXIpL0luY2x1ZGUvcHloYXNoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hdGguaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5Z2V0b3B0LmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hY3JvLmggXApAQCAtOTAwLDE2ICs5NjIsMzggQEAKIAogUVVJQ0tURVNUT1BUUz0JJChURVNUT1BUUykgLXggdGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFwKIAkJdGVzdF9tdWx0aWJ5dGVjb2RlYyB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgdGVzdF9pdGVydG9vbHMgXAotCQl0ZXN0X211bHRpcHJvY2Vzc2luZyB0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKKwkJdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yayB0ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3biBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIgXAorCQl0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKIAkJdGVzdF9zZWxlY3QgdGVzdF96aXBmaWxlIHRlc3RfY29uY3VycmVudF9mdXR1cmVzCiBxdWlja3Rlc3Q6CWFsbCBwbGF0Zm9ybQogCQkkKFRFU1RSVU5ORVIpICQoUVVJQ0tURVNUT1BUUykKIAogCi1pbnN0YWxsOiBhbHRpbnN0YWxsIGJpbmluc3RhbGwgbWFuaW5zdGFsbAoraW5zdGFsbDogQEZSQU1FV09SS0lOU1RBTExGSVJTVEAgY29tbW9uaW5zdGFsbCBiaW5pbnN0YWxsIG1hbmluc3RhbGwgQEZSQU1FV09SS0lOU1RBTExMQVNUQAorCWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljYXNlICQoRU5TVVJFUElQKSBpbiBcCisJCQl1cGdyYWRlKSBlbnN1cmVwaXA9Ii0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9IiIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKIAotYWx0aW5zdGFsbDoJQEZSQU1FV09SS0FMVElOU1RBTExGSVJTVEAgYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKLSAgICAgICAgICAgICAgICBzaGFyZWRpbnN0YWxsIG9sZHNoYXJlZGluc3RhbGwgYWx0bWFuaW5zdGFsbCBARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACithbHRpbnN0YWxsOiBjb21tb25pbnN0YWxsCisJaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNhc2UgJChFTlNVUkVQSVApIGluIFwKKwkJCXVwZ3JhZGUpIGVuc3VyZXBpcD0iLS1hbHRpbnN0YWxsIC0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9Ii0tYWx0aW5zdGFsbCIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKKworY29tbW9uaW5zdGFsbDogIEBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1RAIFwKKwkJYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKKwkJc2hhcmVkaW5zdGFsbCBvbGRzaGFyZWRpbnN0YWxsIGFsdG1hbmluc3RhbGwgXAorCQlARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACiAKICMgSW5zdGFsbCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYnkgU2V0dXAKIERFU1RESVJTPQkkKGV4ZWNfcHJlZml4KSAkKExJQkRJUikgJChCSU5MSUJERVNUKSAkKERFU1RTSEFSRUQpCkBAIC05MzQsNyArMTAxOCw3IEBACiAKICMgSW5zdGFsbCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCAkKFZFUlNJT04pIGFmZml4ZWQKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKLWFsdGJpbmluc3RhbGw6ICQoQlVJTERQWVRIT04pCithbHRiaW5pbnN0YWxsOiAkKEJVSUxEUFlUSE9OKSBARlJBTUVXT1JLUFlUSE9OV0AKIAlAZm9yIGkgaW4gJChCSU5ESVIpICQoTElCRElSKTsgXAogCWRvIFwKIAkJaWYgdGVzdCAhIC1kICQoREVTVERJUikkJGk7IHRoZW4gXApAQCAtOTQzLDE0ICsxMDI3LDE4IEBACiAJCWVsc2UJdHJ1ZTsgXAogCQlmaTsgXAogCWRvbmUKLQkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSkKKwlpZiB0ZXN0ICIkKFBZVEhPTkZSQU1FV09SS0RJUikiID0gIm5vLWZyYW1ld29yayIgOyB0aGVuIFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQoQlVJTERQWVRIT04pICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpOyBcCisJZWxzZSBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgTWFjL3B5dGhvbncgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSk7IFwKKwlmaQogCS1pZiB0ZXN0ICIkKFZFUlNJT04pIiAhPSAiJChMRFZFUlNJT04pIjsgdGhlbiBcCiAJCWlmIHRlc3QgLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpIC1vIC1oICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQl0aGVuIHJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQlmaTsgXAogCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgcHl0aG9uJChMRFZFUlNJT04pJChFWEUpIHB5dGhvbiQoVkVSU0lPTikkKEVYRSkpOyBcCiAJZmkKLQlpZiB0ZXN0IC1mICQoTERMSUJSQVJZKTsgdGhlbiBcCisJaWYgdGVzdCAtZiAkKExETElCUkFSWSkgJiYgdGVzdCAiJChQWVRIT05GUkFNRVdPUktESVIpIiA9ICJuby1mcmFtZXdvcmsiIDsgdGhlbiBcCiAJCWlmIHRlc3QgLW4gIiQoRExMTElCUkFSWSkiIDsgdGhlbiBcCiAJCQkkKElOU1RBTExfU0hBUkVEKSAkKERMTExJQlJBUlkpICQoREVTVERJUikkKEJJTkRJUik7IFwKIAkJZWxzZSBcCkBAIC05NjQsNiArMTA1MiwxMiBAQAogCQlmaTsgXAogCWVsc2UJdHJ1ZTsgXAogCWZpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKTsgXAorCQlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgXAorCQkJLW91dHB1dCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgXAorCQkJJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCisJZmkKIAogYmluaW5zdGFsbDogYWx0YmluaW5zdGFsbAogCS1pZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSk7IFwKQEAgLTk4OSw2ICsxMDgzLDEwIEBACiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIDJ0bzMtJChWRVJTSU9OKSAydG8zKQogCS1ybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dmVudgogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXZlbnYtJChWRVJTSU9OKSBweXZlbnYpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMtMzIkKEVYRSk7IFwKKwkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgcHl0aG9uMy0zMiQoRVhFKSkgXAorCWZpCiAKICMgSW5zdGFsbCB0aGUgdmVyc2lvbmVkIG1hbnVhbCBwYWdlCiBhbHRtYW5pbnN0YWxsOgpAQCAtMTA0MCw4ICsxMTM4LDExIEBACiAJCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkIFwKICAgICAgICAgICAgICAgICB0ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UgXAogICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QgXAorCQlhc3luY2lvIFwKKwkJdGVzdC90ZXN0X2FzeW5jaW8gXAogCQljb2xsZWN0aW9ucyBjb25jdXJyZW50IGNvbmN1cnJlbnQvZnV0dXJlcyBlbmNvZGluZ3MgXAogCQllbWFpbCBlbWFpbC9taW1lIHRlc3QvdGVzdF9lbWFpbCB0ZXN0L3Rlc3RfZW1haWwvZGF0YSBcCisJCWVuc3VyZXBpcCBlbnN1cmVwaXAvX2J1bmRsZWQgXAogCQlodG1sIGpzb24gdGVzdC90ZXN0X2pzb24gaHR0cCBkYm0geG1scnBjIFwKIAkJc3FsaXRlMyBzcWxpdGUzL3Rlc3QgXAogCQlsb2dnaW5nIGNzdiB3c2dpcmVmIHVybGxpYiBcCkBAIC0xMTU5LDEwICsxMjYwLDE5IEBACiAJZmk7IFwKIAljZCAkKHNyY2RpcikvTGliLyQoUExBVERJUik7ICQoUlVOU0hBUkVEKSAuL3JlZ2VuCiAKLXB5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4KK3B5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gTWlzYy9weXRob24tY29uZmlnLnNoCiAJIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKIAkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCi0Jc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCisJc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnLnB5CisJIyBSZXBsYWNlIG1ha2VmaWxlIGNvbXBhdC4gdmFyaWFibGUgcmVmZXJlbmNlcyB3aXRoIHNoZWxsIHNjcmlwdCBjb21wYXQuIG9uZXM7ICQoVkFSKSAtPiAke1ZBUn0KKwlzZWQgLWUgJ3MsXCQkKFwoW0EtWmEtejAtOV9dKlwpKSxcJCRce1wxXH0sZycgPCBNaXNjL3B5dGhvbi1jb25maWcuc2ggPnB5dGhvbi1jb25maWcKKwkjIE9uIERhcndpbiwgYWx3YXlzIHVzZSB0aGUgcHl0aG9uIHZlcnNpb24gb2YgdGhlIHNjcmlwdCwgdGhlIHNoZWxsCisJIyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIHRoZSBjb21waWxlciBjdXN0b21pemF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZAorCSMgaW4gcHl0aG9uIChfb3N4X3N1cHBvcnQucHkpLgorCWlmIHRlc3QgYHVuYW1lIC1zYCA9IERhcndpbjsgdGhlbiBcCisJCWNwIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZzsgXAorCWZpCisKIAogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCkBAIC0xMjIwLDggKzEzMzAsOCBAQAogCSQoSU5TVEFMTF9EQVRBKSBNaXNjL3B5dGhvbi5wYyAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLSQoVkVSU0lPTikucGMKIAkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtlc2V0dXAgJChERVNURElSKSQoTElCUEwpL21ha2VzZXR1cAogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9pbnN0YWxsLXNoICQoREVTVERJUikkKExJQlBMKS9pbnN0YWxsLXNoCisJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZy5weSAkKERFU1RESVIpJChMSUJQTCkvcHl0aG9uLWNvbmZpZy5weQogCSQoSU5TVEFMTF9TQ1JJUFQpIHB5dGhvbi1jb25maWcgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTiktY29uZmlnCi0Jcm0gcHl0aG9uLWNvbmZpZwogCUBpZiBbIC1zIE1vZHVsZXMvcHl0aG9uLmV4cCAtYSBcCiAJCSJgZWNobyAkKE1BQ0hERVApIHwgc2VkICdzL15cKC4uLlwpLiovXDEvJ2AiID0gImFpeCIgXTsgdGhlbiBcCiAJCWVjaG87IGVjaG8gIkluc3RhbGxpbmcgc3VwcG9ydCBmaWxlcyBmb3IgYnVpbGRpbmcgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzIG9uIEFJWDoiOyBcCkBAIC0xMzAzLDcgKzE0MTMsMTQgQEAKIGZyYW1ld29ya2luc3RhbGxhcHBzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxhcHBzIERFU1RESVI9IiQoREVTVERJUikiCiAKLSMgVGhpcyBpbnN0YWxsIHRoZSB1bml4IHB5dGhvbiBhbmQgcHl0aG9udyB0b29scyBpbiAvdXNyL2xvY2FsL2JpbgorIyBCdWlsZCB0aGUgYm9vdHN0cmFwIGV4ZWN1dGFibGUgdGhhdCB3aWxsIHNwYXduIHRoZSBpbnRlcnByZXRlciBpbnNpZGUKKyMgYW4gYXBwIGJ1bmRsZSB3aXRoaW4gdGhlIGZyYW1ld29yay4gIFRoaXMgYWxsb3dzIHRoZSBpbnRlcnByZXRlciB0bworIyBydW4gT1MgWCBHVUkgQVBJcy4KK2ZyYW1ld29ya3B5dGhvbnc6CisJY2QgTWFjICYmICQoTUFLRSkgcHl0aG9udworCisjIFRoaXMgaW5zdGFsbHMgdGhlIHB5dGhvbiogYW5kIG90aGVyIGJpbiBzeW1saW5rcyBpbiAkcHJlZml4L2JpbiBvciBpbgorIyBhIGJpbiBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGZyYW1ld29yayByb290CiBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGx1bml4dG9vbHMgREVTVERJUj0iJChERVNURElSKSIKIApAQCAtMTQwMSw2ICsxNTE4LDggQEAKIAogcHJvZmlsZS1yZW1vdmFsOgogCWZpbmQgLiAtbmFtZSAnKi5nYz8/JyAtZXhlYyBybSAtZiB7fSAnOycKKwlybSAtZiAkKENPVkVSQUdFX0lORk8pCisJcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQogCiBjbG9iYmVyOiBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAktcm0gLWYgJChCVUlMRFBZVEhPTikgJChQR0VOKSAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKERMTExJQlJBUlkpIFwKQEAgLTE0MDgsNiArMTUyNyw3IEBACiAJCWNvbmZpZy5jYWNoZSBjb25maWcubG9nIHB5Y29uZmlnLmggTW9kdWxlcy9jb25maWcuYwogCS1ybSAtcmYgYnVpbGQgcGxhdGZvcm0KIAktcm0gLXJmICQoUFlUSE9ORlJBTUVXT1JLRElSKQorCS1ybSAtZiBweXRob24tY29uZmlnLnB5IHB5dGhvbi1jb25maWcKIAogIyBNYWtlIHRoaW5ncyBleHRyYSBjbGVhbiwgYmVmb3JlIG1ha2luZyBhIGRpc3RyaWJ1dGlvbjoKICMgcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGV2ZW4gTWFrZWZpbGVbLnByZV0KQEAgLTE0NzksNyArMTU5OSw3IEBACiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGwgZnJhbWV3b3JraW5zdGFsbGZyYW1ld29yayBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlCiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scwogLlBIT05ZOiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIHJlY2hlY2sgYXV0b2NvbmYgY2xlYW4gY2xvYmJlciBkaXN0Y2xlYW4KLS5QSE9OWTogc21lbGx5IGZ1bm55IHBhdGNoY2hlY2sgdG91Y2ggYWx0bWFuaW5zdGFsbAorLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsIGNvbW1vbmluc3RhbGwKIC5QSE9OWTogZ2RiaG9va3MKIAogIyBJRiBZT1UgUFVUIEFOWVRISU5HIEhFUkUgSVQgV0lMTCBHTyBBV0FZCmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggMmM5NTdlMy4uNWU2MGY5YiAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtNTYsNiArNTYsNyBAQAogRG9ub3ZhbiBCYWFyZGEKIEFybmUgQmFiZW5oYXVzZXJoZWlkZQogQXR0aWxhIEJhYm8KK01hdHQgQmFjaG1hbm4KIE1hcmNpbiBCYWNocnkKIEFsZm9uc28gQmFjaWVybwogRHdheW5lIEJhaWxleQpAQCAtMTIyLDYgKzEyMyw3IEBACiBNaWNoYWVsIEJpcnR3ZWxsCiBTdHVhcnQgQmlzaG9wCiBSb3kgQml4bGVyCitEYW5pZWwgQmxhY2sKIEpvbmF0aGFuIEJsYWNrCiBSZW5hdWQgQmxhbmNoCiBNaWtlIEJsYW5kCkBAIC0xMzksNiArMTQxLDcgQEAKIEZvcmVzdCBCb25kCiBHcmVnb3J5IEJvbmQKIE1hdGlhcyBCb3JkZXNlCitKb25hcyBCb3Jnc3Ryw7ZtCiBKdXJqZW4gQm9zCiBQZXRlciBCb3NjaAogRGFuIEJvc3dlbGwKQEAgLTE1Myw4ICsxNTYsMTAgQEAKIENocmlzdG9waGVyIEJyYW5ub24KIFRlcnJlbmNlIEJyYW5ub24KIEdlcm3DoW4gTS4gQnJhdm8KK1N2ZW4gQnJhdWNoCiBFcmlrIEJyYXkKIEJyaWFuIEJyYXppbAorRGVtaWFuIEJyZWNodAogRGF2ZSBCcmVubmFuCiBUb20gQnJpZGdtYW4KIEFudGhvbnkgQnJpZ2dzCkBAIC0xNzEsOSArMTc2LDExIEBACiBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpCiBJYW4gQnJ1bnRsZXR0CiBGbG9yaXMgQnJ1eW5vb2doZQorTWF0dCBCcnlhbnQKIFN0YW4gQnVicm91c2tpCiBFcmlrIGRlIEJ1ZWdlcgogSmFuLUhlaW4gQsO8aHJtYW4KK0xhcnMgQnVpdGluY2sKIERpY2sgQnVsdGVybWFuCiBCaWxsIEJ1bWdhcm5lcgogSmltbXkgQnVyZ2V0dApAQCAtMTkzLDYgKzIwMCw3IEBACiBNaWtlIENhcmx0b24KIFBpZXJyZSBDYXJyaWVyCiBUZXJyeSBDYXJyb2xsCitFZHdhcmQgQ2F0bXVyCiBMb3JlbnpvIE0uIENhdHVjY2kKIERvbm4gQ2F2ZQogQ2hhcmxlcyBDYXphYm9uCkBAIC0yMjcsNiArMjM1LDcgQEAKIENyYWlnIENpdHJvCiBHaWxsZXMgQ2l2YXJpbwogQ2hyaXMgQ2xhcmsKK0xhdXJpZSBDbGFyay1NaWNoYWxlawogTWlrZSBDbGFya3NvbgogQW5kcmV3IENsZWdnCiBCcmFkIENsZW1lbnRzCkBAIC0zMTksMTEgKzMyOCwxMyBAQAogSm9obiBEdUJvaXMKIFBhdWwgRHVib2lzCiBKYWNxdWVzIER1Y2Fzc2UKK0FuZHJlaSBEb3JpYW4gRHVtYQogR3JhaGFtIER1bXBsZXRvbgogUXVpbm4gRHVua2FuCiBSb2JpbiBEdW5uCiBMdWtlIER1bnN0YW4KIFZpcmdpbCBEdXByYXMKK0JydW5vIER1cHVpcwogQW5keSBEdXN0bWFuCiBHYXJ5IER1emFuCiBFdWdlbmUgRHZ1cmVjaGVuc2tpCkBAIC0zMzIsNiArMzQzLDcgQEAKIFdhbHRlciBEw7Zyd2FsZAogSGFucyBFY2thcmR0CiBSb2RvbHBobyBFY2toYXJkdAorVWxyaWNoIEVja2hhcmR0CiBEYXZpZCBFZGVsc29obgogSm9obiBFZG1vbmRzCiBHcmFudCBFZHdhcmRzCkBAIC0zNDYsNiArMzU4LDcgQEAKIERhdmlkIEVseQogSmVmZiBFcGxlcgogVG9tIEVwcGVybHkKK0fDtmtjZW4gRXJhc2xhbgogU3RvZmZlbCBFcmFzbXVzCiBKw7xyZ2VuIEEuIEVyaGFyZAogTWljaGFlbCBFcm5zdApAQCAtNDMwLDYgKzQ0Myw3IEBACiBUaG9tYXMgR2VsbGVrdW0KIEdhYnJpZWwgR2VuZWxsaW5hCiBDaHJpc3RvcyBHZW9yZ2lvdQorRWxhemFyIEdlcnNodW5pCiBCZW4gR2VydHpmaWVsZAogTmFkaW0gR2hhem5hdmkKIERpbnUgR2hlcm1hbgpAQCAtNDQxLDYgKzQ1NSw3IEBACiBNYXR0IEdpdWNhCiBXaW0gR2xlbm4KIE1pY2hhZWwgR29kZXJiYXVlcgorSmVyb2VuIFZhbiBHb2V5CiBDaHJpc3RvcGggR29obGtlCiBUaW0gR29sZGVuCiBHdWlsaGVybWUgR29uw6dhbHZlcwpAQCAtNDU5LDYgKzQ3NCw3IEBACiBEYWcgR3J1bmVhdQogRmlsaXAgR3J1c3pjennFhHNraQogVGhvbWFzIEd1ZXR0bGVyCitBbnVqIEd1cHRhCiBNaWNoYWVsIEd1cmF2YWdlCiBMYXJzIEd1c3TDpGJlbAogVGhvbWFzIEfDvHR0bGVyCkBAIC00NjksNiArNDg1LDcgQEAKIFJhc211cyBIYWhuCiBQZXRlciBIYWlnaHQKIFbDoWNsYXYgSGFpc21hbgorWmJpZ25pZXcgSGFsYXMKIFdhbGtlciBIYWxlIElWCiBCb2IgSGFsbGV5CiBKZXNzZSBIYWxsaW8KQEAgLTQ5NCw2ICs1MTEsNyBAQAogUnljaGFyZGUgSGF3a2VzCiBCZW4gSGF5ZGVuCiBKb2NoZW4gSGF5ZWsKK1RpbSBIZWFuZXkKIEhlbnJpayBIZWltYnVlcmdlcgogQ2hyaXN0aWFuIEhlaW1lcwogVGhvbWFzIEhlbGxlcgpAQCAtNTk4LDYgKzYxNiw3IEBACiBGcmVkcmlrIEpvaGFuc3NvbgogR3JlZ29yeSBLLiBKb2huc29uCiBLZW50IEpvaG5zb24KK01pY2hhZWwgSm9obnNvbgogU2ltb24gSm9obnN0b24KIE1hdHQgSm9pbmVyCiBUaG9tYXMgSm9sbGFucwpAQCAtNjE3LDYgKzYzNiw3IEBACiBTYXJhaCBLLgogU3VubnkgSwogQm9odXNsYXYgS2FicmRhCitBbGV4ZXkgS2FjaGF5ZXYKIEJvYiBLYWhuCiBLdXJ0IEIuIEthaXNlcgogVGFtaXRvIEthaml5YW1hCkBAIC02MzgsNiArNjU4LDcgQEAKIE1hZ251cyBLZXNzbGVyCiBMYXdyZW5jZSBLZXN0ZWxvb3QKIFZpdmVrIEtoZXJhCitEaGlydSBLaG9saWEKIE1hZHMgS2lpbGVyaWNoCiBKYXNvbiBLaWxsZW4KIEphbiBLaW0KQEAgLTY5Myw3ICs3MTQsOSBAQAogRXJubyBLdXVzZWxhCiBSb3NzIExhZ2Vyd2FsbAogQ2FtZXJvbiBMYWlyZAorRGF2aWQgTGFtCiBUaG9tYXMgTGFtYgorVmFsZXJpZSBMYW1iZXJ0CiBKZWFuLUJhcHRpc3RlICJKaWJhIiBMYW15CiBSb25hbiBMYW15CiBUb3JzdGVuIExhbmRzY2hvZmYKQEAgLTczMCw5ICs3NTMsMTEgQEAKIE1hdGV1c3ogTGVuaWsKIEpvaG4gTGVudG9uCiBLb3N0eWFudHluIExlc2NoZW5rbworQmVubm8gTGVzbGllCiBDaHJpc3RvcGhlciBUdXIgTGVzbmlld3NraS1MYWFzCiBBbGFpbiBMZXVmcm95CiBNYXJrIExldmluc29uCitNYXJrIExldml0dAogV2lsbGlhbSBMZXdpcwogQWtpcmEgTGkKIFh1YW5qaSBMaQpAQCAtNzU2LDE0ICs3ODEsMTcgQEAKIEFubmUgTG9yZAogVG9tIExvcmVkbwogSnVzdGluIExvdmUKK05lZCBKYWNrc29uIExvdmVseQogSmFzb24gTG93ZQogVG9ueSBMb3duZHMKIFJheSBMb3l6YWdhCitLYW5nLUhhbyAoS2VubnkpIEx1CiBMdWthcyBMdWVnCiBMb3JlbiBMdWtlCiBGcmVkcmlrIEx1bmRoCiBaaG9uZ3l1ZSBMdW8KIE1hcmsgTHV0egorVGFyYXMgTHlhcHVuCiBKaW0gTHluY2gKIE1pa2FlbCBMeW5ndmlnCiBNYXJ0aW4gdm9uIEzDtndpcwpAQCAtNzc0LDkgKzgwMiwxMyBAQAogVGltIE1hY0tlbnppZQogTmljayBNYWNsYXJlbgogRG9uIE1hY01pbGxlbgorVG9tYXN6IE1hxIdrb3dpYWsKIFN0ZXZlIE1hamV3c2tpCitNYXJlayBNYWprb3dza2kKIEdyemVnb3J6IE1ha2FyZXdpY3oKIERhdmlkIE1hbGNvbG0KK0dyZWcgTWFsY29sbQorV2lsbGlhbSBNYWxsYXJkCiBLZW4gTWFuaGVpbWVyCiBWbGFkaW1pciBNYXJhbmdvem92CiBDb2xpbiBNYXJjCkBAIC03OTksNyArODMxLDkgQEAKIERpZXRlciBNYXVyZXIKIERhbmllbCBNYXkKIE1hZGlzb24gTWF5CitMdWNhcyBNYXlzdHJlCiBBcm5hdWQgTWF6aW4KK01hdHQgTWNDbHVyZQogUmViZWNjYSBNY0NyZWFyeQogS2lyayBNY0RvbmFsZAogQ2hyaXMgTWNEb25vdWdoCkBAIC04MzksNiArODczLDcgQEAKIERhbWllbiBNaWxsZXIKIEphc29uIFYuIE1pbGxlcgogSmF5IFQuIE1pbGxlcgorS2F0aWUgTWlsbGVyCiBSb21hbiBNaWxuZXIKIEp1bGllbiBNaW90dGUKIEFuZHJpaSBWLiBNaXNoa292c2t5aQpAQCAtODQ4LDYgKzg4Myw3IEBACiBGbG9yaWFuIE1sYWRpdHNjaAogRG91ZyBNb2VuCiBUaGUgRHJhZ29uIERlIE1vbnN5bmUKK0Jhc3RpZW4gTW9udGFnbmUKIFNraXAgTW9udGFuYXJvCiBQZXRlciBNb29keQogUGF1bCBNb29yZQpAQCAtODU1LDYgKzg5MSw3IEBACiBCZW4gTW9yZ2FuCiBEZXJlayBNb3JyCiBKYW1lcyBBIE1vcnJpc29uCitNYXJ0aW4gTW9ycmlzb24KIERlcmVrIE1jVGF2aXNoIE1vdW5jZQogQWxlc3NhbmRybyBNb3VyYQogUGFibG8gTW91em8KQEAgLTg2OSw2ICs5MDYsNyBAQAogTG91aXMgTXVucm8KIFIuIERhdmlkIE11cnJheQogTWF0dGkgTcOka2kKK0rDtnJnIE3DvGxsZXIKIERhbGUgTmFnYXRhCiBKb2huIE5hZ2xlCiBUYWthaGlybyBOYWtheWFtYQpAQCAtOTMxLDYgKzk2OSw3IEBACiBUb2RkIFIuIFBhbG1lcgogSnVhbiBEYXZpZCBJYsOhw7FleiBQYWxvbWFyCiBKYW4gUGFsdXMKK01hdGhpYXMgUGFuemVuYsO2Y2sKIE0uIFBhcGlsbG9uCiBQZXRlciBQYXJlbnRlCiBBbGV4YW5kcmUgUGFyZW50ZWF1CkBAIC05MzksNiArOTc4LDcgQEAKIEhlaWtraSBQYXJ0YW5lbgogSGFycmkgUGFzYW5lbgogR2HDq2wgUGFzZ3JpbWF1ZAorQXNoaXNoIE5pdGluIFBhdGlsCiBSYW5keSBQYXVzY2gKIFNhbXVlbGUgUGVkcm9uaQogSnVzdGluIFBlZWwKQEAgLTk1Nyw4ICs5OTcsMTAgQEAKIEJlbmphbWluIFBldGVyc29uCiBKb2UgUGV0ZXJzb24KIENocmlzIFBldHJpbGxpCitSb3VtZW4gUGV0cm92CiBCam9ybiBQZXR0ZXJzZW4KIEp1c3RpbiBELiBQZXR0aXQKK0VzYSBQZXVoYQogUm9ubnkgUGZhbm5zY2htaWR0CiBHZW9mZiBQaGlsYnJpY2sKIEdhdnJpZSBQaGlsaXBzb24KQEAgLTk3MiwxMiArMTAxNCwxNSBAQAogRnJhbsOnb2lzIFBpbmFyZAogVG9tIFBpbmNrbmV5CiBaYWNoIFBpbmN1cworWmVybyBQaXJhZXVzCiBNaWNoYWVsIFBpb3Ryb3dza2kKIEFudG9pbmUgUGl0cm91CiBKZWFuLUZyYW7Dp29pcyBQacOpcm9ubmUKIE9sZWcgUGxha2hvdG55dWsKIFJlbWkgUG9pbnRlbAorQXJpZWwgUG9saWFrCiBHdWlsaGVybWUgUG9sbworSWxsaWEgUG9sb3N1a2hpbgogTWljaGFlbCBQb21yYW5pbmcKIE1hcnRpbiBQb29sCiBJdXN0aW4gUG9wCkBAIC05ODgsMTggKzEwMzMsMjIgQEAKIFBhdWwgUHJlc2NvZAogRG9ub3ZhbiBQcmVzdG9uCiBQYXVsIFByaWNlCitJdWxpaWEgUHJvc2t1cm5pYQogSnlya2kgUHVsbGlhaW5lbgogU3RldmUgUHVyY2VsbAogRWR1YXJkbyBQw6lyZXoKIEZlcm5hbmRvIFDDqXJlegogUGllcnJlIFF1ZW50ZWwKIEJyaWFuIFF1aW5sYW4KK0tldmluIEppbmcgUWl1CiBBbmRlcnMgUXZpc3QKIFRob21hcyBSYWNoZWwKK1JhbSBSYWNodW0KIErDqXLDtG1lIFJhZGl4CiBCdXJ0b24gUmFkb25zCiBKZWZmIFJhbW5hbmkKIEJyb2RpZSBSYW8KK1NlbmtvIFJhc2ljCiBBbnR0aSBSYXNpbmVuCiBTcmlkaGFyIFJhdG5ha3VtYXIKIFlzaiBSYXkKQEAgLTEwMzEsNyArMTA4MCw3IEBACiBKZWFuLUNsYXVkZSBSaW1iYXVsdAogVmxhZCBSaXNjdXRpYQogV2VzIFJpc2hlbAotRGFuIFJpdGkKK0RhbmllbCBSaXRpCiBKdWFuIE0uIEJlbGxvIFJpdmFzCiBEYXZpZGUgUml6em8KIEFudGhvbnkgUm9hY2gKQEAgLTExNjAsNiArMTIwOSw3IEBACiBLcmFnZW4gU2l0YWtlcgogTWljaGFlbCBTbG9hbgogTmljayBTbG9hbgorVsOhY2xhdiDFoG1pbGF1ZXIKIENocmlzdG9waGVyIFNtaXRoCiBFcmljIFYuIFNtaXRoCiBHcmVnb3J5IFAuIFNtaXRoCkBAIC0xMTk4LDYgKzEyNDgsNyBAQAogU2VyaGl5IFN0b3JjaGFrYQogS2VuIFN0b3gKIERhbiBTdHJvbWJlcmcKK0RvbmFsZCBTdHVmZnQKIERhbmllbCBTdHV0emJhY2gKIEFuZHJlYXMgU3TDvGhyawogQ29saW4gU3UKQEAgLTEyMTQsNiArMTI2NSw3IEBACiBQw6l0ZXIgU3phYsOzCiBBbWlyIFN6ZWtlbHkKIEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzCitIaWRlYWtpIFRha2FoYXNoaQogSW5kcmEgVGFsaXAKIE5laWwgVGFsbGltCiBHZW9mZiBUYWx2b2xhCkBAIC0xMjI1LDYgKzEyNzcsNyBAQAogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25pawogTWlraGFpbCBUZXJla2hvdgorVmljdG9yIFRlcnLDs24KIFJpY2hhcmQgTS4gVGV3CiBUb2JpYXMgVGhlbGVuCiBGw6l2cnkgVGhpYmF1bHQKQEAgLTEyMzIsNiArMTI4NSw3IEBACiBOaWNvbGFzIE0uIFRoacOpcnkKIEphbWVzIFRob21hcwogUm9iaW4gVGhvbWFzCitCcmlhbiBUaG9ybmUKIFN0ZXBoZW4gVGhvcm5lCiBKZXJlbXkgVGh1cmdvb2QKIEVyaWMgVGllZGVtYW5uCkBAIC0xMzExLDYgKzEzNjUsNyBAQAogUm9kcmlnbyBTdGVpbm11bGxlciBXYW5kZXJsZXkKIEtlIFdhbmcKIEdyZWcgV2FyZAorVG9tIFdhcmRpbGwKIFphY2hhcnkgV2FyZQogSm9uYXMgV2FnbmVyCiBCYXJyeSBXYXJzYXcKQEAgLTEzMzYsNiArMTM5MSw3IEBACiBGZWxpeCBXaWVtYW5uCiBHZXJyeSBXaWVuZXIKIEZyYW5rIFdpZXJ6Ymlja2kKK1NhbnRvc28gV2lqYXlhCiBCcnljZSAiWm9va28iIFdpbGNveC1PJ0hlYXJuCiBUaW1vdGh5IFdpbGQKIEpha3ViIFdpbGsKQEAgLTEzNjgsNiArMTQyNCw3IEBACiBHb3Jkb24gV29ybGV5CiBEYXJyZW4gV29ycmFsbAogVGhvbWFzIFdvdXRlcnMKK0RhbmllbCBXb3puaWFrCiBIZWlrbyBXdW5kcmFtCiBEb3VnIFd5YXR0CiBSb2JlcnQgWGlhbwpAQCAtMTM4MCw2ICsxNDM3LDcgQEAKIERhbm55IFlvbwogUm9yeSBZb3JrZQogR2VvcmdlIFlvc2hpZGEKK0thenVoaXJvIFlvc2hpZGEKIE1hc2F6dW1pIFlvc2hpa2F3YQogQXJuYXVkIFlzbWFsCiBCZXJuYXJkIFl1ZQpkaWZmIC0tZ2l0IGEvTWlzYy9ISVNUT1JZIGIvTWlzYy9ISVNUT1JZCmluZGV4IDAxYzYzNWIuLjQyODA3NjQgMTAwNjQ0Ci0tLSBhL01pc2MvSElTVE9SWQorKysgYi9NaXNjL0hJU1RPUlkKQEAgLTMsMTMgKzMsNDExMCBAQAogCiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlbGVhc2UgbWVzc2FnZXMgZm9yIHByZXZpb3VzIFB5dGhvbiByZWxlYXNlcy4KIEFzIHlvdSByZWFkIG9uIHlvdSBnbyBiYWNrIHRvIHRoZSBkYXJrIGFnZXMgb2YgUHl0aG9uJ3MgaGlzdG9yeS4KLShOb3RlOiBuZXdzIGFib3V0IDIuNWMyIGFuZCBsYXRlciAyLjUgcmVsZWFzZXMgaXMgaW4gdGhlIE1pc2MvTkVXUwotZmlsZSBvZiB0aGUgcmVsZWFzZTI1LW1haW50IGJyYW5jaC4pCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0CisgIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCisgIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpLgorCistIElzc3VlICMxNTkyNjogRml4IGNyYXNoIGFmdGVyIG11bHRpcGxlIHJlaW5pdGlhbGl6YXRpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTU4OTU6IEZpeCBGSUxFIHBvaW50ZXIgbGVhayBpbiBvbmUgZXJyb3IgYnJhbmNoIG9mCisgIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgd2hlbiBmaWxlbmFtZSBwb2ludHMgdG8gYSBweWMvcHlvIGZpbGUsIGNsb3NlaXQKKyAgaXMgZmFsc2UgYW4gYW5kIHNldF9tYWluX2xvYWRlcigpIGZhaWxzLgorCistIEZpeGVzIGZvciBhIGZldyBjcmFzaCBhbmQgbWVtb3J5IGxlYWsgcmVncmVzc2lvbnMgZm91bmQgYnkgQ292ZXJpdHkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4ODI6IENoYW5nZSBfZGVjaW1hbCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KKyAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgd2l0aCBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbAorICAoaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KKworLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gZW1haWwudXRpbCB3aGVyZSB0aGUgcGFyc2VkYXRlKCkgYW5kCisgIHBhcnNlZGF0ZV90eigpIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKKyAgbm90IGJlIHBhcnNlZC4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgorICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KKworLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBkdW1wX3RyYWNlYmFja19sYXRlcigpIGFuZCBjYW5jZWxfZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkuCisKKy0gX2RlY2ltYWwgbW9kdWxlOiB1c2Ugb25seSBDIDg5IHN0eWxlIGNvbW1lbnRzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzOTkyOiBUaGUgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIG5vdyB0aHJlYWQtc2FmZS4gIFRoaXMgZWxpbWluYXRlcworICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvcgorICBjaGFpbnMgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorCistIElzc3VlICMxNTc4MTogRml4IHR3byBzbWFsbCByYWNlIGNvbmRpdGlvbnMgaW4gaW1wb3J0J3MgbW9kdWxlIGxvY2tpbmcuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcworICBhcyBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgorCistIElzc3VlICMxNTgyODogUmVzdG9yZSBzdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMgaW4gaW1wLmxvYWRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gL2Rldi91cmFuZG9tIGNhbm5vdAorICBiZSBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgRGVjaW1hbC5xdWFudGl6ZSgpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSB3aW5kb3cuZ2V0X3djaCgpIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuCisgIGEgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YKKyAgYWx3YXlzIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbAorICBrZXlzIGxpa2Uga2V5cGFkIGtleXMuCisKKy0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworICBsaWtlIGN1cnNlcy5BQ1NfSExJTkU6IHRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goaW50KSBhbmQgYWRkY2goYnl0ZXMpIGlzIG5vdworICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRjaCgpL212d2FkZGNoKCkgKGFzIGl0IHdhcyBkb25lIGluIFB5dGhvbiAzLjIpLAorICBpbnN0ZWFkIG9mIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpLiBUaGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKHN0cikgaXMgc3RpbGwKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkX3djaCgpL212d2FkZF93Y2goKSBpZiB0aGUgUHl0aG9uIGN1cnNlcyBpcyBsaW5rZWQKKyAgdG8gbGlibmN1cnNlc3cuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTgyMjogUmVhbGx5IGVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkCisgIChyZXBsYWNlcyBmaXhlcyBmb3IgSXNzdWUgIzE1NjQ1KS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKKyAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCisgIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5CisgIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI1LUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1NzM6IG1lbW9yeXZpZXcgY29tcGFyaXNvbnMgYXJlIG5vdyBwZXJmb3JtZWQgYnkgdmFsdWUgd2l0aCBmdWxsCisgIHN1cHBvcnQgZm9yIGFueSB2YWxpZCBzdHJ1Y3QgbW9kdWxlIGZvcm1hdCBkZWZpbml0aW9uLgorCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgX19pbXBvcnRfXyBkb2Vzbid0IGV4aXN0LAorICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KKyAgbGV0IHRoYXQgcHJvcGFnYXRlLgorCistIElzc3VlICMxNTc3ODogZW5zdXJlIHRoYXQgc3RyKEltcG9ydEVycm9yKG1zZykpIHJldHVybnMgYSBzdHIKKyAgZXZlbiB3aGVuIG1zZyBpc24ndCBhIHN0ci4KKworLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseQorICBjb3BpZWQgdG8gdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIKKyAgcmVpbnRyb2R1Y2VkIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdAorICBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2gpCisKKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjMTU3MjY6IEZpeCBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nIGluIFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCkgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKKyAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKKyAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMKKyAgY29tcGlsZWQgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyCisKKy0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZAorICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KKworLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgorCistIElzc3VlICMxNTI0OTogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KKyAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgorCistIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgorCistIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorICBjb3JyZWN0bHkgaGFuZGxlIGhpc3RvcmljIGNoYW5nZXMgaW4gVVRDIG9mZnNldHMuCisKKy0gSXNzdWUgIzE1MTk5OiBGaXggSmF2YVNjcmlwdCdzIGRlZmF1bHQgTUlNRSB0eXBlIHRvIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQuCisgIFBhdGNoIGJ5IEJvaHVzbGF2IEthYnJkYS4KKworLSBJc3N1ZSAjMTI2NDM6IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlIG5vdyByZXNwZWN0cyBzeXMuZXhjZXB0aG9vayB3aGVuCisgIGRpc3BsYXlpbmcgZXhjZXB0aW9ucyAoUGF0Y2ggYnkgQWFyb24gSWxlcykKKworLSBJc3N1ZSAjMTM1Nzk6IHN0cmluZy5Gb3JtYXR0ZXIgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQorICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgorCistIElzc3VlICMxNTcxNTogaW1wb3J0bGliLl9faW1wb3J0X18oKSB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUgdXNlCisgIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KKworLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKKyAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgorICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorCistIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCisKKy0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZworICBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyB3aXRob3V0IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyAgaWRpb20uCisKKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQorICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KKworQyBBUEkKKy0tLS0tCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCisKKy0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCisgICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCisgIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZAorICB0ZXh0IHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRvbnMgY2FuIGJlIHJlZmxlY3RlZCB3aXRoCisgIHRoZSBTcGhpbnggYGA6cGxhdGZvcm06YGAgdGFnLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgcGFydCBvZiB0aGUgVGFibGUgb2YKKyAgQ29udGVudHMuCisKKy0gSXNzdWUgIzQ5NjY6IEJyaW5nIHRoZSBzZXF1ZW5jZSBkb2NzIHVwIHRvIGRhdGUgZm9yIHRoZSBQeTNrIHRyYW5zaXRpb24KKyAgYW5kIHRoZSBtYW55IGxhbmd1YWdlIGVuaGFuY2VtZW50cyBzaW5jZSB0aGV5IHdlcmUgb3JpZ2luYWwgd3JpdHRlbgorCistIFRoZSAicGF0aCBpbXBvcnRlciIgbWlzbm9tZXIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBFcmljIFNub3cncworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4KKyAgdGhlIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MKKworLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGltcG9ydGxpYi5hYmMuRmluZGVyIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE1NjMwOiBBZGQgYW4gZXhhbXBsZSBmb3IgImNvbnRpbnVlIiBzdG10IGluIHRoZSB0dXRvcmlhbC4gUGF0Y2ggYnkKKyAgRGFuaWVsIEVsbGlzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAorICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKy0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZworICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQorICBvZiB0ZXN0LgorCistIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiB1cmxsaWIgdGVzdHMuIFBhdGNoIGJ5CisgIEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1NjE1OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZAorICBpbnB1dCBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworQnVpbGQKKy0tLS0tCisKKy0gT3V0cHV0IGxpYiBmaWxlcyBmb3IgUEdPIGJ1aWxkIGludG8gUEdPIGRpcmVjdG9yeS4KKworLSBQaWNrIHVwIDMyLWJpdCBsYXVuY2hlciBmcm9tIFBHTyBkaXJlY3Rvcnkgb24gNjQtYml0IFBHTyBidWlsZC4KKworLSBEcm9wIFBDXHB5dGhvbl9udC5oIGFzIGl0J3Mgbm90IHVzZWQuIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQorICBidWlsZCBzdGVwLgorCistIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsCisgIGFtZDY0IGNvbmZpZ3VyYXRpb24uCisKKy0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCisKKy0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mICJ5aWVsZCBmcm9tIiB3aGVuIFN0b3BJdGVyYXRpb24gaXMKKyAgcmFpc2VkIGJ5IGEgY3VzdG9tIGl0ZXJhdG9yLgorCistIElzc3VlICMxMzExOTogc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCisgIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgorCistIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBfX2ltcG9ydF9fIHRvIGhhdmUgdGhlIHByb3BlciBkZWZhdWx0CisgIHZhbHVlIG9mIDAgZm9yICdsZXZlbCcgYW5kIHRvIG5vdCBtZW50aW9uIG5lZ2F0aXZlIGxldmVscyBzaW5jZSB0aGV5IGFyZSBub3QKKyAgc3VwcG9ydGVkLgorCistIElzc3VlICMxNTQyNTogRWxpbWluYXRlZCB0cmFjZWJhY2sgbm9pc2UgZnJvbSBtb3JlIHNpdHVhdGlvbnMgaW52b2x2aW5nCisgIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ1Nzg6IFN1cHBvcnQgbW9kdWxlcyByZWdpc3RlcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFnYWluLgorCistIElzc3VlICMxNTQ2NjogU3RvcCB1c2luZyBUWVBFX0lOVDY0IGluIG1hcnNoYWwsIHRvIG1ha2UgaW1wb3J0bGliLmggKGFuZCBvdGhlcgorICBieXRlIGNvZGUgZmlsZXMpIGVxdWFsIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGV4Y2VwdGlvbiBhcmdzIGFzc2lnbm1lbnQgdG8KKyAgIkJhc2VFeGNlcHRpb24uX19uZXdfXyIgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzE1NDU2OiBGaXggY29kZSBfX3NpemVvZl9fIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgorCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCisgIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCisKKy0gSXNzdWUgIzE1MzY4OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCBieXRlY29kZSBnZW5lcmF0aW9uIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljCisgIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTIwMjogQ29uc2lzdGVudGx5IHVzZSB0aGUgbmFtZSAiZm9sbG93X3N5bWxpbmtzIiBmb3IgbmV3IHBhcmFtZXRlcnMKKyAgaW4gb3MgYW5kIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MzE0OiBfX21haW5fXy5fX2xvYWRlcl9fIGlzIG5vdyBzZXQgY29ycmVjdGx5IGR1cmluZyBpbnRlcnByZXRlcgorICBzdGFydHVwLgorCistIElzc3VlICMxNTExMTogV2hlbiBhIG1vZHVsZSBpbXBvcnRlZCB1c2luZyAnZnJvbSBpbXBvcnQnIGhhcyBhbiBJbXBvcnRFcnJvcgorICBpbnNpZGUgaXRzZWxmLCBkb24ndCBtYXNrIHRoYXQgZmFjdCBiZWhpbmQgYSBnZW5lcmljIEltcG9ydEVycm9yIGZvciB0aGUKKyAgbW9kdWxlIGl0c2VsZi4KKworLSBJc3N1ZSAjMTUyOTM6IEFkZCBHQyBzdXBwb3J0IHRvIHRoZSBBU1QgYmFzZSBub2RlIHR5cGUuCisKKy0gSXNzdWUgIzE1MjkxOiBGaXggYSBtZW1vcnkgbGVhayB3aGVyZSBBU1Qgbm9kZXMgd2hlcmUgbm90IHByb3Blcmx5CisgIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCisgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCisKKy0gSXNzdWUgIzE1MDIwOiBUaGUgcHJvZ3JhbSBuYW1lIHVzZWQgdG8gc2VhcmNoIGZvciBQeXRob24ncyBwYXRoIGlzIG5vdworICAicHl0aG9uMyIgdW5kZXIgVW5peCwgbm90ICJweXRob24iLgorCistIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGgsCisgIHJldHVybiB0aGUgcHJvcGVyIGZhaWx1cmUgcmV0dXJuIHZhbHVlICgxKS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTUyMjk6IEFuIE9TRXJyb3Igc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKKyAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgorICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCisKKy0gSXNzdWUgMTUzMDc6IFZpcnR1YWwgZW52aXJvbm1lbnRzIG5vdyB1c2Ugc3ltbGlua3Mgd2l0aCBmcmFtZXdvcmsgYnVpbGRzIG9uCisgIE1hYyBPUyBYLCBsaWtlIG90aGVyIFBPU0lYIGJ1aWxkcy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTQyNDogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CisgIEx1ZHdpZyBIw6RobmUuCisKKy0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgorCistIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAorICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCisKKy0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1NTk6IFRvIGF2b2lkIGEgcHJvYmxlbWF0aWMgZmFpbHVyZSBtb2RlIHdoZW4gcGFzc2VkIHRvIHRoZSBieXRlcworICBjb25zdHJ1Y3Rvciwgb2JqZWN0cyBpbiB0aGUgaXBhZGRyZXNzIG1vZHVsZSBubyBsb25nZXIgaW1wbGVtZW50IF9faW5kZXhfXworICAodGhleSBzdGlsbCBpbXBsZW1lbnQgX19pbnRfXyBhcyBhcHByb3ByaWF0ZSkKKworLSBJc3N1ZSAjMTU1NDY6IEZpeCBoYW5kbGluZyBvZiBwYXRob2xvZ2ljYWwgaW5wdXQgZGF0YSBpbiB0aGUgcGVlaygpIGFuZAorICByZWFkMSgpIG1ldGhvZHMgb2YgdGhlIEJaMkZpbGUsIEd6aXBGaWxlIGFuZCBMWk1BRmlsZSBjbGFzc2VzLgorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCAnXCcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCisgIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCisgIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KKworLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCisgIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorCistIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NTAyOiBCcmluZyB0aGUgaW1wb3J0bGliIEFCQ3MgaW50byBsaW5lIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIGltcG9ydCBwcm90b2NvbHMgZ2l2ZW4gUEVQIDQyMC4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KKworLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAorICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KKworLSBJc3N1ZSAjNjA1NjogTWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CisgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KKworLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCisKKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0MTM6IG9zLnRpbWVzKCkgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE1NDAyOiBBbiBpc3N1ZSBpbiB0aGUgc3RydWN0IG1vZHVsZSB0aGF0IGNhdXNlZCBzeXMuZ2V0c2l6ZW9mIHRvCisgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCisgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKKyAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCisKKy0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorICB0aGUgZmlyc3Qgb25lLgorCistIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorCistIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAorICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgorCistIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQorICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCisKKy0gSXNzdWUgIzE0NjM1OiB0ZWxuZXRsaWIgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KKyAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KKworLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgorCistIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKKyAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KKworLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgorCistIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCisgIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCisKKy0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKKyAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KKworLSBJc3N1ZSAjMTUyMzg6IHNodXRpbC5jb3B5c3RhdCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KKworLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KKyAgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MzE1OiBTdXBwb3J0IFZTIDIwMTAgaW4gZGlzdHV0aWxzIGN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICMxNTI5NDogRml4IGEgcmVncmVzc2lvbiBpbiBwa2d1dGlsLmV4dGVuZF9wYXRoKCkncyBoYW5kbGluZyBvZiBuZXN0ZWQKKyAgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMxNTA1NjogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kIHNvdXJjZV9mcm9tX2NhY2hlKCkgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgaW1wLmZpbmRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzU5MzE6IHdzZ2lyZWYgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCisgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAorICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgorICBpcGFkZHJlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCisgIGNvbXBhcmVkIHRvIGFyYml0cmFyeSBvYmplY3RzIGluc3RlYWQgb2YgcmFpc2luZyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE0OTkwOiBDb3JyZWN0bHkgZmFpbCB3aXRoIFN5bnRheEVycm9yIG9uIGludmFsaWQgZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3Mgbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KKyAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCisKKy0gSXNzdWUgIzE1MjQ3OiBGaWxlSU8gbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nCisgIHRvIGEgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCisKKy0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorCistIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorICBfZnJvemVuX2ltcG9ydGxpYiBpbiBzeXMubW9kdWxlcywgbm90IEltcG9ydEVycm9yLgorCistIElzc3VlICMxNTAzMDogaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQorICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KKworLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgorICBmbHVzaCgpLgorCistIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5CisgIEpha3ViIFdpbGsuCisKKy0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKKyAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKKyAgbWFpbGJveC4KKworLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KKworLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKKyAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisgIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjEwOiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpIG5vdyB1c2VzIGEgJ2xldmVsJyBvZiAwIGluc3RlYWQgb2YgLTEuCisKKy0gSXNzdWVzICMxNTE2OSwgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wLnNvdXJjZV9mcm9tX2NhY2hlKCkgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKKyAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKKyAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTY3NjogTm93ICJtbWFwIiBjaGVjayBmb3IgZW1wdHkgZmlsZXMgYmVmb3JlIGRvaW5nIHRoZQorICBvZmZzZXQgY2hlY2suICBQYXRjaCBieSBTdGV2ZW4gV2lsbGlzLgorCistIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzCisgIG9mIHR5cGUgY3R5cGVzLmNfdWludDMyIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDU4OiBweXRob24tY29uZmlnIGdldHMgYSBuZXcgb3B0aW9uIC0tY29uZmlnZGlyIHRvIHByaW50IHRoZSAkTElCUEwKKyAgdmFsdWUuCisKKy0gTW92ZSBpbXBvcnRsaWIudGVzdC5iZW5jaG1hcmsgdG8gVG9vbHMvaW1wb3J0YmVuY2guCisKKy0gSXNzdWUgIzEyNjA1OiBUaGUgZ2RiIGhvb2tzIGZvciBkZWJ1Z2dpbmcgQ1B5dGhvbiAod2l0aGluIFRvb2xzL2dkYikgaGF2ZSBiZWVuCisgIGVuaGFuY2VkIHRvIHNob3cgaW5mb3JtYXRpb24gb24gbW9yZSBDIGZyYW1lcyByZWxldmFudCB0byBDUHl0aG9uIHdpdGhpbiB0aGUKKyAgInB5LWJ0IiBhbmQgInB5LWJ0LWZ1bGwiIGNvbW1hbmRzOgorCisgICogQyBmcmFtZXMgdGhhdCBhcmUgd2FpdGluZyBvbiB0aGUgR0lMCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZ2FyYmFnZS1jb2xsZWN0aW5nCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZHVlIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGEgUHlDRnVuY3Rpb24KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCisKKy0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCisgIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAorICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgorCistIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKKyAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCisgICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5CisgIGltcG9ydCBpdHNlbGYuCisKKy0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGV4ZWMgb3IKKyAgZXhlY2ZpbGUoKS4KKworLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgZmlsZWNtcC5kaXJjbXAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCisgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTUwOTE6IFJlYWN0aXZhdGUgYSB0ZXN0IG9uIFVOSVggd2hpY2ggd2FzIGZhaWxpbmcgdGhhbmtzIHRvIGEKKyAgZm9yZ290dGVuIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGNhbGwuCisKKy0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KKworLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKKyAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KKyAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKKyAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCisgIGJ5IEJyaWFuIEJyYXppbC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKKyAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcworICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcworICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KKworLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgorICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5CisgIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQorICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KKworLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgorCistIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgorICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCisKKy0gSXNzdWUgIzE0MTk3OiBGb3IgT1MgWCBmcmFtZXdvcmsgYnVpbGRzLCBlbnN1cmUgbGlua3MgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5CisgIGFyZSBjcmVhdGVkIHdpdGggdGhlIHByb3BlciBBQkkgc3VmZml4LgorCistIElzc3VlICMxNDMzMDogRm9yIGNyb3NzIGJ1aWxkcywgZG9uJ3QgdXNlIGhvc3QgcHl0aG9uLCB1c2UgaG9zdCBzZWFyY2ggcGF0aHMKKyAgZm9yIGhvc3QgY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1MjM1OiBBbGxvdyBCZXJrbGV5IERCIHZlcnNpb25zIHVwIHRvIDUuMyB0byBidWlsZCB0aGUgZGJtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUyNjg6IFNlYXJjaCBjdXJzZXMuaCBpbiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gRml4IGEgKG1vc3QgbGlrZWx5KSB2ZXJ5IHJhcmUgbWVtb3J5IGxlYWsgd2hlbiBjYWxsaW5nIG1haW4oKSBhbmQgbm90IGJlaW5nCisgIGFibGUgdG8gZGVjb2RlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCistIElzc3VlICMxNDgxNTogVXNlIFB5X3NzaXplX3QgaW5zdGVhZCBvZiBsb25nIGZvciB0aGUgb2JqZWN0IGhhc2gsIHRvCisgIHByZXNlcnZlIGFsbCA2NCBiaXRzIG9mIGhhc2ggb24gV2luNjQuCisKKy0gSXNzdWUgIzEyMjY4OiBGaWxlIHJlYWRsaW5lLCByZWFkbGluZXMgYW5kIHJlYWQoKSBvciByZWFkYWxsKCkgbWV0aG9kcworICBubyBsb25nZXIgbG9zZSBkYXRhIHdoZW4gYW4gdW5kZXJseWluZyByZWFkIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkLgorICBJT0Vycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgZHVlIHRvIGEgcmVhZCBzeXN0ZW0gY2FsbCByZXR1cm5pbmcgRUlOVFIKKyAgZnJvbSB3aXRoaW4gdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCisKKy0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCisgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCisKKy0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgorICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KKyAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzE1MDk2OiBSZW1vdmVkIHN1cHBvcnQgZm9yIHVyJycgYXMgdGhlIHJhdyBub3RhdGlvbiBpc24ndAorICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIueCdzIHJhdyB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNzgzOiBHZW5lcmF0b3Igb2JqZWN0cyBub3cgdXNlIHRoZSBpZGVudGlmaWVyIEFQSXMgaW50ZXJuYWxseQorCistIElzc3VlICMxNDg3NDogUmVzdG9yZSBjaGFybWFwIGRlY29kaW5nIHNwZWVkIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMjY6IHV0Zi0xNiBlbmNvZGluZyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIgKHVwIHRvIDEweCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzExMDIyOiBvcGVuKCkgYW5kIGlvLlRleHRJT1dyYXBwZXIgYXJlIG5vdyBjYWxsaW5nCisgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgaW5zdGVhZCBvZiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICBpbiB0ZXh0IG1vZGUgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIERvbid0IGNoYW5nZSB0ZW1wb3JhcnkgdGhlCisgIGxvY2FsZSBlbmNvZGluZyB1c2luZyBsb2NhbGUuc2V0bG9jYWxlKCksIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcKKyAgaW5zdGVhZCBvZiB0aGUgdXNlciBwcmVmZXJyZWQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE0NjczOiBBZGQgRXJpYyBTbm93J3Mgc3lzLmltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNTAzODogT3B0aW1pemUgcHl0aG9uIExvY2tzIG9uIFdpbmRvd3MuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTgwMzogRG9uJ3QgY2xvc2UgSURMRSBvbiBzYXZpbmcgaWYgYnJlYWtwb2ludCBpcyBvcGVuLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCisgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KKworLSBJc3N1ZSAjMTU1MTI6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHBhcnNlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0Njk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGRlcXVlIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBCeXRlc0lPIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg3OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBidWZmZXJlZCBJL08gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1MTQ6IENvcnJlY3QgX19zaXplb2ZfXyBzdXBwb3J0IGZvciBjcHVfc2V0LgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE4NzogQnVnZml4OiByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRlc3Rfc2h1dGlsIHdhcyBsZWF2aW5nCisgIGJlaGluZC4KKworLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KKworLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgorICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKKyAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KKworLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKKyAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgorCistIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCisgIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKKyAgKHN0cnVjdHNlcSBvYmplY3RzKS4KKworLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAorICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCisgIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCisKKy0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCisKKy0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgorICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCisKKy0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCisgIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCisgIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCistIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKKyAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQorICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgorCistIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KKyAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgorCistIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94CisgIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKKworLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAorICBjbG9zdXJlcworCistIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgorCistIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgorICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKKyAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAorICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55CisgIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKKyAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOworICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCisgIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KKworLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCisgIGFuZCBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKKyAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKKyAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgorCistIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCisgIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCisgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCisgIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgorCistIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCisgIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KKworLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKKworLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KKworLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKKyAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgorCistIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCisKKy0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKKyAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQorICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCisgIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCisgIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgorCistIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQorICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAorICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE0MDU5OiBJbXBsZW1lbnQgbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIuCisKKy0gSXNzdWUgIzE1MDYxOiBUaGUgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGhtYWMuc2VjdXJlX2NvbXBhcmUgaGFzIGJlZW4KKyAgcmVuYW1lZCB0byBobWFjLmNvbXBhcmVfZGlnZXN0LCByZXN0cmljdGVkIHRvIG9wZXJhdGluZyBvbiBieXRlcyBpbnB1dHMKKyAgb25seSBhbmQgaGFkIGl0cyBkb2N1bWVudGF0aW9uIHVwZGF0ZWQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgYm90aCBpdHMKKyAgaW50ZW50IGFuZCBpdHMgbGltaXRhdGlvbnMKKworLSBJc3N1ZSAjMTM4NDE6IE1ha2UgY2hpbGQgcHJvY2Vzc2VzIGV4aXQgdXNpbmcgc3lzLmV4aXQoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNDkzNjogY3Vyc2VzX3BhbmVsIHdhcyBjb252ZXJ0ZWQgdG8gUEVQIDMxMjEgYW5kIFBFUCAzODQgQVBJLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE2Njc1NDY6IE9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRtX3pvbmUgYW5kIHRtX2dtdG9mZiBmaWVsZHMKKyAgaW4gc3RydWN0IHRtLCB0aW1lLnN0cnVjdF90aW1lIG9iamVjdHMgcmV0dXJuZWQgYnkgdGltZS5nbXRpbWUoKSwKKyAgdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5zdHJwdGltZSgpIGZ1bmN0aW9ucyBub3cgaGF2ZSB0bV96b25lIGFuZAorICB0bV9nbXRvZmYgYXR0cmlidXRlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFBhdWwgQm9kZGllLgorCistIFJlbmFtZSBhZGp1c3RlZCBhdHRyaWJ1dGUgdG8gYWRqdXN0YWJsZSBpbiB0aW1lLmdldF9jbG9ja19pbmZvKCkgcmVzdWx0LgorCistIElzc3VlICMzNTE4OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgQmFzZU1hbmFnZXIuZnJvbV9hZGRyZXNzKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxMzg1NzogQWRkZWQgdGV4dHdyYXAuaW5kZW50KCkgZnVuY3Rpb24gKGluaXRpYWwgcGF0Y2ggYnkgRXpyYQorICBCZXJjaCkKKworLSBJc3N1ZSAjMjczNjogQWRkZWQgZGF0ZXRpbWUudGltZXN0YW1wKCkgbWV0aG9kLgorCistIElzc3VlICMxMzg1NDogTWFrZSBtdWx0aXByb2Nlc3NpbmcgcHJvcGVybHkgaGFuZGxlIG5vbi1pbnRlZ2VyCisgIG5vbi1zdHJpbmcgYXJndW1lbnQgdG8gU3lzdGVtRXhpdC4KKworLSBJc3N1ZSAjMTIxNTc6IE1ha2UgcG9vbC5tYXAoKSBlbXB0eSBpdGVyYWJsZXMgY29ycmVjdGx5LiAgSW5pdGlhbAorICBwYXRjaCBieSBtb3VhZC4KKworLSBJc3N1ZSAjMTE4MjM6IGRpc2Fzc2VtYmx5IG5vdyBzaG93cyBhcmd1bWVudCBjb3VudHMgb24gY2FsbHMgd2l0aCBrZXl3b3JkIGFyZ3MuCisKKy0gSXNzdWUgIzE0NzExOiBvcy5zdGF0X2Zsb2F0X3RpbWVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworLSBMWk1BRmlsZSBub3cgYWNjZXB0cyB0aGUgbW9kZXMgInJiIi8id2IiLyJhYiIgYXMgc3lub255bXMgb2YgInIiLyJ3Ii8iYSIuCisKKy0gVGhlIGJ6MiBhbmQgbHptYSBtb2R1bGVzIG5vdyBlYWNoIGNvbnRhaW4gYW4gb3BlbigpIGZ1bmN0aW9uLCBhbGxvd2luZworICBjb21wcmVzc2VkIGZpbGVzIHRvIHJlYWRpbHkgYmUgb3BlbmVkIGluIHRleHQgbW9kZSBhcyB3ZWxsIGFzIGJpbmFyeSBtb2RlLgorCistIEJaMkZpbGUuX19pbml0X18oKSBhbmQgTFpNQUZpbGUuX19pbml0X18oKSBub3cgYWNjZXB0IGEgZmlsZSBvYmplY3QgYXMgdGhlaXIKKyAgZmlyc3QgYXJndW1lbnQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIHNlcGFyYXRlICJmaWxlb2JqIiBhcmd1bWVudC4KKworLSBnemlwLm9wZW4oKSBub3cgYWNjZXB0cyBmaWxlIG9iamVjdHMgYXMgd2VsbCBhcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzE0OTkyOiBvcy5tYWtlZGlycyhwYXRoLCBleGlzdF9vaz1UcnVlKSB3b3VsZCByYWlzZSBhbiBPU0Vycm9yCisgIHdoZW4gdGhlIHBhdGggZXhpc3RlZCBhbmQgaGFkIHRoZSBTX0lTR0lEIG1vZGUgYml0IHNldCB3aGVuIGl0IHdhcworICBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IuICBUaGlzIGlzIG5vIGxvbmdlciBhbiBleGNlcHRpb24gYXMgbWtkaXIKKyAgY2Fubm90IGNvbnRyb2wgaWYgdGhlIE9TIHNldHMgdGhhdCBiaXQgZm9yIGl0IG9yIG5vdC4KKworLSBJc3N1ZSAjMTQ5ODk6IE1ha2UgdGhlIENHSSBlbmFibGUgb3B0aW9uIHRvIGh0dHAuc2VydmVyIGF2YWlsYWJsZSB2aWEgY29tbWFuZAorICBsaW5lLgorCistIElzc3VlICMxNDk4NzogQWRkIGEgbWlzc2luZyBpbXBvcnQgc3RhdGVtZW50IHRvIGluc3BlY3QuCisKKy0gSXNzdWUgIzEwNzk6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGFsbCB0aGUgZXhhbXBsZXMKKyAgaW4gUkZDMjA0Ny4gIFRoZXJlIGlzIGEgbmVjZXNzYXJ5IHZpc2libGUgYmVoYXZpb3IgY2hhbmdlOiB0aGUgbGVhZGluZyBhbmQvb3IKKyAgdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBBU0NJSSBwYXJ0cyBpcyBub3cgcHJlc2VydmVkLgorCistIElzc3VlICMxNDk2OTogQmV0dGVyIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBjaGFpbmluZyBpbiBjb250ZXh0bGliLkV4aXRTdGFjaworCistIElzc3VlICMxNDk2MjogVXBkYXRlIHRleHQgY29sb3JpbmcgaW4gSURMRSBzaGVsbCB3aW5kb3cgYWZ0ZXIgY2hhbmdpbmcKKyAgb3B0aW9ucy4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNDk2MzogQ29udmVydCBjb250ZXh0bGliLkV4aXRTdGFjay5fX2V4aXRfXyB0byB1c2UgYW4gaXRlcmF0aXZlCisgIGFsZ29yaXRobSAoUGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTQ3ODU6IEFkZCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSB0byBoZWxwIGRlYnVnIGxvdy1sZXZlbCBtZW1vcnkKKyAgYWxsb2NhdGlvbiBpc3N1ZXMKKworLSBJc3N1ZSAjMTQ0NDM6IEVuc3VyZSB0aGF0IC5weSBmaWxlcyBhcmUgYnl0ZS1jb21waWxlZCB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbgorICBleGVjdXRhYmxlIHdpdGhpbiBiZGlzdF9ycG0gZXZlbiBvbiBvbGRlciB2ZXJzaW9ucyBvZiBSUE0KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEzNzgzOiBJbmFkdmVydGVudCBhZGRpdGlvbnMgdG8gdGhlIHB1YmxpYyBDIEFQSSBpbiB0aGUgUEVQIDM4MAorICBpbXBsZW1lbnRhdGlvbiBoYXZlIGVpdGhlciBiZWVuIHJlbW92ZWQgb3IgbWFya2VkIGFzIHByaXZhdGUgaW50ZXJmYWNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDAwOiBTdXBwb3J0IHRoZSAidW5pcXVlIiB4MzIgYXJjaGl0ZWN0dXJlIGluIF9wb3NpeHN1YnByb2Nlc3MuYy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTA4MTogRG9jdW1lbnQgUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBBZGRlZCBmaXJzdCBkcmFmdCBvZiBpcGFkZHJlc3MgbW9kdWxlIEFQSSByZWZlcmVuY2UKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcworICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYworICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCisKKy0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKKyAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCisKKy0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKKyAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCisKKy0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgorICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgorICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCisgICAgICBsbHZtLWdjYyBjb21waWxlci4KKyAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93CisgICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKKyAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KKyAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKKyAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKKyAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90CisgICAgICBhdmFpbGFibGUuCisgICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKKyAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAorICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYworICAgICAgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCisKKy0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQorICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCisgIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KKworLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCisgIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgorCistIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCisKKy0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCisgIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgorCistIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KKyAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCisKKy0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCistIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKKyAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgorICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCisKKy0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQorICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCisgIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgorCistIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KKyAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgorCistIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAorICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KKworLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcworICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCisKKy0gSXNzdWUgIzE0NzA1OiBUaGUgUHlBcmdfUGFyc2UoKSBmYW1pbHkgb2YgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IHRoZSAncCcgZm9ybWF0CisgIHVuaXQsIHdoaWNoIGFjY2VwdHMgYSAiYm9vbGVhbiBwcmVkaWNhdGUiIGFyZ3VtZW50LiAgSXQgY29udmVydHMgYW55IFB5dGhvbgorICB2YWx1ZSBpbnRvIGFuIGludGVnZXItLTAgaWYgaXQgaXMgImZhbHNlIiwgYW5kIDEgb3RoZXJ3aXNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NjkwOiBVc2UgbW9ub3RvbmljIGNsb2NrIGluc3RlYWQgb2Ygc3lzdGVtIGNsb2NrIGluIHRoZSBzY2hlZCwKKyAgc3VicHJvY2VzcyBhbmQgdHJhY2UgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ5NTg6IENoYW5nZSBJRExFIHN5c3RheCBoaWdobGlnaHRpbmcgdG8gcmVjb2duaXplIGFsbCBzdHJpbmcgYW5kCisgIGJ5dGUgbGl0ZXJhbHMgc3VwcG9ydGVkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzEwOTk3OiBQcmV2ZW50IGEgZHVwbGljYXRlIGVudHJ5IGluIElETEUncyAiUmVjZW50IEZpbGVzIiBtZW51LgorCistIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KKyAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxNDkyOTogU3RvcCBJZGxlIDMueCBmcm9tIGNsb3Npbmcgb24gVW5pY29kZSBkZWNvZGUgZXJyb3JzIHdoZW4KKyAgZ3JlcHBpbmcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCisgIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCisKKy0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cworICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY3MjU2ODogZW1haWwgbm93IGFsd2F5cyBkZWNvZGVzIGJhc2U2NCBwYXlsb2FkcywgYWRkaW5nIHBhZGRpbmcgYW5kCisgIGlnbm9yaW5nIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpZiBuZWVkZWQsIGFuZCByZWdpc3RlcmluZyBkZWZlY3RzCisgIGZvciBhbnkgc3VjaCBwcm9ibGVtcy4KKworLSBJc3N1ZSAjMTQ5MjU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3Qgd2hlbiB0aGUgcGFyc2VyIGRlY2lkZXMgdGhhdCB0aGVyZQorICBpcyBhIG1pc3NpbmcgaGVhZGVyL2JvZHkgc2VwYXJhdG9yIGxpbmUuICBNYWxmb3JtZWRIZWFkZXJEZWZlY3QsIHdoaWNoIHRoZQorICBleGlzdGluZyBjb2RlIHdvdWxkIG5ldmVyIGFjdHVhbGx5IGdlbmVyYXRlLCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDM2NTogRmlsZSBvcGVuIGRpYWxvZyBub3cgd29ya3MgaW5zdGVhZCBvZiBjcmFzaGluZyBldmVuIHdoZW4KKyAgdGhlIHBhcmVudCB3aW5kb3cgaXMgY2xvc2VkIGJlZm9yZSB0aGUgZGlhbG9nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODczOTogVXBkYXRlZCBzbXRwZCB0byBzdXBwb3J0IFJGQyA1MzIxLCBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlCisgIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLgorCistIElzc3VlICM2NjUxOTQ6IEFkZGVkIGEgbG9jYWx0aW1lIGZ1bmN0aW9uIHRvIGVtYWlsLnV0aWxzIHRvIHByb3ZpZGUgYW4KKyAgYXdhcmUgbG9jYWwgZGF0ZXRpbWUgZm9yIHVzZSBpbiBzZXR0aW5nIERhdGUgaGVhZGVycy4KKworLSBJc3N1ZSAjMTI1ODY6IEFkZGVkIG5ldyBwcm92aXNpb25hbCBwb2xpY2llcyB0aGF0IGltcGxlbWVudCBjb252ZW5pZW50CisgIHVuaWNvZGUgc3VwcG9ydCBmb3IgZW1haWwgaGVhZGVycy4gIFNlZSBXaGF0J3MgTmV3IGZvciBkZXRhaWxzLgorCistIElzc3VlICMxNDczMTogUmVmYWN0b3JlZCBlbWFpbCBQb2xpY3kgZnJhbWV3b3JrIHRvIHN1cHBvcnQgZnVsbCBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMiBieSBkZWZhdWx0IHlldCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZgorICBuZXcgZmVhdHVyZXMgdGhyb3VnaCBuZXcgcG9saWNpZXMuICBOb3RlIHRoYXQgUG9saWN5Lm11c3RfYmVfN2JpdCBpcyByZW5hbWVkCisgIHRvIGN0ZV90eXBlLgorCistIElzc3VlICMxNDg3NjogVXNlIHVzZXItc2VsZWN0ZWQgZm9udCBmb3IgaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24uCisKKy0gSXNzdWUgIzE0OTIwOiBGaXggdGhlIGhlbHAodXJsbGliLnBhcnNlKSBmYWlsdXJlIG9uIGxvY2FsZSBDIG9uIHRlcm1pbmFscy4KKyAgSGF2ZSBhc2NpaSBjaGFyYWN0ZXJzIGluIGhlbHAuCisKKy0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKKyAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCisKKy0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKKyAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCisKKy0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcworICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxNDg2MjogQWRkIG1pc3NpbmcgbmFtZXMgdG8gb3MuX19hbGxfXworCistIElzc3VlICMxNDg3NTogVXNlIGZsb2F0KCdpbmYnKSBpbnN0ZWFkIG9mIGZsb2F0KCcxZTY2NjY2JykgaW4gdGhlIGpzb24gbW9kdWxlLgorCistIElzc3VlICMxMzU4NTogQWRkZWQgY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBQRVAgMzE0NCwgSXNzdWUgIzE0ODE0OiBBZGRlZCB0aGUgaXBhZGRyZXNzIG1vZHVsZQorCistIElzc3VlICMxNDQyNjogQ29ycmVjdCB0aGUgRGF0ZSBmb3JtYXQgaW4gRXhwaXJlcyBhdHRyaWJ1dGUgb2YgU2V0LUNvb2tpZQorICBIZWFkZXIgaW4gQ29va2llLnB5LgorCistIElzc3VlICMxNDU4ODogVGhlIHR5cGVzIG1vZHVsZSBub3cgcHJvdmlkZSBuZXdfY2xhc3MoKSBhbmQgcHJlcGFyZV9jbGFzcygpCisgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFBFUCAzMTE1IGNvbXBsaWFudCBkeW5hbWljIGNsYXNzIGNyZWF0aW9uLiBQYXRjaCBieQorICBEYW5pZWwgVXJiYW4gYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTMxNTI6IEFsbG93IHRvIHNwZWNpZnkgYSBjdXN0b20gdGFic2l6ZSBmb3IgZXhwYW5kaW5nIHRhYnMgaW4KKyAgdGV4dHdyYXAuIFBhdGNoIGJ5IEpvaG4gRmV1ZXJzdGVpbi4KKworLSBJc3N1ZSAjMTQ3MjE6IFNlbmQgdGhlIGNvcnJlY3QgJ0NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgd2hlbiB0aGUgYm9keSBpcyBhbgorICBlbXB0eSBzdHJpbmcgJycuIEluaXRpYWwgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQXJ2ZSBLbnVkc2VuLgorCistIElzc3VlICMxNDA3MjogRml4IHBhcnNpbmcgb2YgJ3RlbCcgVVJJcyBpbiB1cmxwYXJzZSBieSBtYWtpbmcgdGhlIGNoZWNrIGZvcgorICBwb3J0cyBzdHJpY3Rlci4KKworLSBJc3N1ZSAjOTM3NDogR2VuZXJpYyBwYXJzaW5nIG9mIHF1ZXJ5IGFuZCBmcmFnbWVudCBwb3J0aW9ucyBvZiB1cmwgZm9yIGFueQorICBzY2hlbWUuIFN1cHBvcnRlZCBib3RoIGJ5IFJGQzM5ODYgYW5kIFJGQzIzOTYuCisKKy0gSXNzdWUgIzE0Nzk4OiBGaXggdGhlIGZ1bmN0aW9ucyBpbiBweWNsYnIgdG8gcmFpc2UgYW4gSW1wb3J0RXJyb3IKKyAgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzIG5vdCBhIHBhY2thZ2UuIFBhdGNoIGJ5CisgIFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMjA5ODogbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgbm93IHN0YXJ0cyBjaGlsZCBwcm9jZXNzZXMKKyAgdXNpbmcgdGhlIHNhbWUgc3lzLmZsYWdzIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5CisgIFNlcmdleSBNZXplbnRzZXYuCisKKy0gSXNzdWUgIzEzMDMxOiBTbWFsbCBzcGVlZC11cCBmb3IgdGFyZmlsZSB3aGVuIHVuemlwcGluZyB0YXJmaWxlcy4KKyAgUGF0Y2ggYnkgSnVzdGluIFBlZWwuCisKKy0gSXNzdWUgIzE0NzgwOiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgbm93IGhhcyBhIGBgY2FkZWZhdWx0YGAgYXJndW1lbnQKKyAgdG8gdXNlIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBPYWtsZXkuCisKKy0gSXNzdWUgIzE0ODI5OiBGaXggYmlzZWN0IGFuZCByYW5nZSgpIGluZGV4aW5nIHdpdGggbGFyZ2UgaW5kaWNlcworICAoPj0gMiAqKiAzMikgdW5kZXIgNjQtYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0NzMyOiBUaGUgX2NzdiBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODA5OiBBZGQgSFRUUCBzdGF0dXMgY29kZXMgaW50cm9kdWNlZCBieSBSRkMgNjU4NSB0byBodHRwLnNlcnZlcgorICBhbmQgaHR0cC5jbGllbnQuIFBhdGNoIGJ5IEV1bmdKdW4gWWkuCisKKy0gSXNzdWUgIzE0Nzc3OiB0a2ludGVyIG1heSByZXR1cm4gdW5kZWNvZGVkIFVURi04IGJ5dGVzIGFzIGEgc3RyaW5nIHdoZW4KKyAgYWNjZXNzaW5nIHRoZSBUayBjbGlwYm9hcmQuICBNb2RpZnkgY2xpcGJvYWRfZ2V0KCkgdG8gZmlyc3QgcmVxdWVzdCB0eXBlCisgIFVURjhfU1RSSU5HIHdoZW4gbm8gc3BlY2lmaWMgdHlwZSBpcyByZXF1ZXN0ZWQgaW4gYW4gWDExIHdpbmRvd2luZworICBlbnZpcm9ubWVudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQgdHlwZSBTVFJJTkcgaWYgdGhhdCBmYWlscy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzE0NzczOiBGaXggb3MuZndhbGsoKSBmYWlsaW5nIG9uIGRhbmdsaW5nIHN5bWxpbmtzLgorCistIElzc3VlICMxMjU0MTogQmUgbGVuaWVudCB3aXRoIHF1b3RlcyBhcm91bmQgUmVhbG0gZmllbGQgb2YgSFRUUCBCYXNpYworICBBdXRoZW50YXRpb24gaW4gdXJsbGliMi4KKworLSBJc3N1ZSAjMTQ4MDc6IG1vdmUgdW5kb2N1bWVudGVkIHRhcmZpbGUuZmlsZW1vZGUoKSB0byBzdGF0LmZpbGVtb2RlKCkgYW5kIGFkZAorICBkb2MgZW50cnkuIEFkZCB0YXJmaWxlLmZpbGVtb2RlIGFsaWFzIHdpdGggZGVwcmVjYXRpb24gd2FybmluZy4KKworLSBJc3N1ZSAjMTM4MTU6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBub3cgcmV0dXJucyBpby5CdWZmZXJlZFJlYWRlciBvYmplY3RzLgorCistIElzc3VlICMxNDUzMjogQWRkIGEgc2VjdXJlX2NvbXBhcmUoKSBoZWxwZXIgdG8gdGhlIGhtYWMgbW9kdWxlLCB0byBtaXRpZ2F0ZQorICB0aW1pbmcgYXR0YWNrcy4gUGF0Y2ggYnkgSm9uIE9iZXJoZWlkZS4KKworLSBBZGQgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuCisKKy0gSXNzdWUgIzE0MzY2OiBTdXBwb3J0IGx6bWEgY29tcHJlc3Npb24gaW4gemlwIGZpbGVzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzk1OTogSW50cm9kdWNlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIGFuZCBkb2N1bWVudAorICBpbXAuZmluZF9tb2R1bGUvbG9hZF9tb2R1bGUgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTQwODI6IHNodXRpbC5jb3B5MigpIG5vdyBjb3BpZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgcG9zc2libGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkvZ2V0X2ZpbGVuYW1lKCkgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpIGhhdmUgdGhlaXIgc2luZ2xlCisgIGFyZ3VtZW50IGJlIG9wdGlvbmFsLiBBbGxvd3MgZm9yIHRoZSByZXBsYWNlbWVudCAoYW5kIHRodXMgZGVwcmVjYXRpb24pIG9mCisgIGltcC5sb2FkX3NvdXJjZSgpL2xvYWRfcGFja2FnZSgpL2xvYWRfY29tcGlsZWQoKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5nZXRfc3VmZml4ZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbmV3CisgIGF0dHJpYnV0ZXMgb24gaW1wb3J0bGliLm1hY2hpbmVyeTogU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywgYW5kIEVYVEVOU0lPTl9TVUZGSVhFUy4gVGhpcworICBsZWQgdG8gYW4gaW5kaXJlY3QgZGVwcmVjYXRpb24gb2YgaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkuCisKKy0gSXNzdWUgIzE0NjYyOiBQcmV2ZW50IHNodXRpbCBmYWlsdXJlcyBvbiBPUyBYIHdoZW4gZGVzdGluYXRpb24gZG9lcyBub3QKKyAgc3VwcG9ydCBjaGZsYWcgb3BlcmF0aW9ucy4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQxNTc6IEZpeCB0aW1lLnN0cnB0aW1lIGZhaWxpbmcgd2l0aG91dCBhIHllYXIgb24gRmVicnVhcnkgMjl0aC4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDc1MzogTWFrZSBtdWx0aXByb2Nlc3NpbmcncyBoYW5kbGluZyBvZiBuZWdhdGl2ZSB0aW1lb3V0cworICB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uIDMuMi4KKworLSBJc3N1ZSAjMTQ1ODM6IEZpeCBpbXBvcnRsaWIgYnVnIHdoZW4gYSBwYWNrYWdlJ3MgX19pbml0X18ucHkgd291bGQgZmlyc3QKKyAgaW1wb3J0IG9uZSBvZiBpdHMgbW9kdWxlcyB0aGVuIHJhaXNlIGFuIGVycm9yLgorCistIElzc3VlICMxNDc0MTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgRWxsaXBzaXMgKCcuLi4nKSBpbiBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDY5NzogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3Igc2V0IGRpc3BsYXlzIGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgaW4KKyAgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ3MDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yICdyYWlzZSAuLi4gZnJvbScgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGltZW91dHMgdG8gdGhlIGFjcXVpcmUoKSBtZXRob2RzIG9mCisgIG11bHRpcHJvY2Vzc2luZydzIGxvY2svc2VtYXBob3JlL2NvbmRpdGlvbiBwcm94aWVzLgorCistIElzc3VlICMxMzk4OTogQWRkIHN1cHBvcnQgZm9yIHRleHQgbW9kZSB0byBnemlwLm9wZW4oKS4KKworLSBJc3N1ZSAjMTQxMjc6IFRoZSBvcy5zdGF0KCkgcmVzdWx0IG9iamVjdCBub3cgcHJvdmlkZXMgdGhyZWUgYWRkaXRpb25hbAorICBmaWVsZHM6IHN0X2N0aW1lX25zLCBzdF9tdGltZV9ucywgYW5kIHN0X2F0aW1lX25zLCBwcm92aWRpbmcgdGhvc2UgdGltZXMgYXMgYW4KKyAgaW50ZWdlciB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gIFRoZSBmdW5jdGlvbnMgb3MudXRpbWUoKSwgb3MubHV0aW1lcygpLAorICBhbmQgb3MuZnV0aW1lcygpIG5vdyBhY2NlcHQgYSBuZXcgcGFyYW1ldGVyLCBucywgd2hpY2ggYWNjZXB0cyBtdGltZSBhbmQgYXRpbWUKKyAgYXMgaW50ZWdlcnMgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQorICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTU6IEJyaW5nIFRvb2xzL3BhcnNlci91bnBhcnNlLnB5IHN1cHBvcnQgdXAgdG8gZGF0ZSB3aXRoCisgIHRoZSBQeXRob24gMy4zIEdyYW1tYXIuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDQ3MjogVXBkYXRlIC5naXRpZ25vcmUuIFBhdGNoIGJ5IE1hdGVqIENlcGwuCisKKy0gVXBncmFkZSBXaW5kb3dzIGxpYnJhcnkgdmVyc2lvbnM6IGJ6aXAgMS4wLjYsIE9wZW5TU0wgMS4wLjFjLgorCistIElzc3VlICMxNDY5MzogVW5kZXIgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCBoYXNobGliJ3MgZmFsbGJhY2sgbW9kdWxlcyBhcmUKKyAgYWx3YXlzIGNvbXBpbGVkLCBldmVuIGlmIE9wZW5TU0wgaXMgcHJlc2VudCBhdCBidWlsZCB0aW1lLgorCistIElzc3VlICMxMzIxMDogV2luZG93cyBidWlsZCBub3cgdXNlcyBWUzIwMTAsIHBvcnRlZCBmcm9tIFZTMjAwOC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCisgIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgorCistIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5CisgIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgorCistIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgorCistIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAorICBhY3Jvc3MgcGxhdGZvcm1zLgorCistIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCisgIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgorICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdworICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCisgIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KKworLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKKyAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCisgIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KKworLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKKyAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgorCistIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQorICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisKKy0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50CisgIHdpdGggdmFsdWUgMC4KKworLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0MDk4OiBOZXcgZnVuY3Rpb25zIFB5RXJyX0dldEV4Y0luZm8gYW5kIFB5RXJyX1NldEV4Y0luZm8uCisgIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KKyAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCisgIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKKyAgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCisgIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KKworLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgorCistIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCisgIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCisKKy0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgorCistIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cworICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQorICBJc3N1ZSAjMTU1OTU0OS4KKworLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZworICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgorICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgorCistIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCisgIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAorICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5CisgIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKKyAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGEgdW5oYW5kbGVkIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTMwMTk6IEZpeCBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWtzIGluIGJ5dGVhcnJheS5leHRlbmQoKS4gIFBhdGNoCisgIGJ5IFN1bWFuIFNhaGEuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQ3Njg6IG9zLnBhdGguZXhwYW5kdXNlcignfi9hJykgZG9lc24ndCB3b3JrcyBjb3JyZWN0bHkgd2hlbiBIT01FIGlzICcvJy4KKworLSBJc3N1ZSAjMTQzNzE6IFN1cHBvcnQgYnppcDIgaW4gemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzE4MzogRml4IHBkYiBza2lwcGluZyBmcmFtZXMgYWZ0ZXIgaGl0dGluZyBhIGJyZWFrcG9pbnQgYW5kIHJ1bm5pbmcKKyAgc3RlcC4gIFBhdGNoIGJ5IFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxNDY5NjogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCAnbm9ubG9jYWwnIGRlY2xhcmF0aW9ucy4KKworLSBJc3N1ZSAjMTA5NDE6IEZpeCBpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZSB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0IG5lYXIKKyAgdGhlIERTVCB0cmFuc2l0aW9uLiAgUGF0Y2ggYnkgSm9lIFBldGVyc29uLgorCistIElzc3VlICM5MTU0OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kIGZ1bmN0aW9uIGFubm90YXRpb25zLgorCistIElzc3VlICM2MDg1OiBJbiBodHRwLnNlcnZlci5weSBTaW1wbGVIVFRQU2VydmVyLmFkZHJlc3Nfc3RyaW5nIHJldHVybnMgdGhlCisgIGNsaWVudCBpcCBhZGRyZXNzIGluc3RlYWQgY2xpZW50IGhvc3RuYW1lLiBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE0MzA5OiBEZXByZWNhdGUgdGltZS5jbG9jaygpLCB1c2UgdGltZS5wZXJmX2NvdW50ZXIoKSBvcgorICB0aW1lLnByb2Nlc3NfdGltZSgpIGluc3RlYWQuCisKKy0gSXNzdWUgIzE0NDI4OiBJbXBsZW1lbnQgdGhlIFBFUCA0MTguIEFkZCB0aW1lLmdldF9jbG9ja19pbmZvKCksCisgIHRpbWUucGVyZl9jb3VudGVyKCkgYW5kIHRpbWUucHJvY2Vzc190aW1lKCkgZnVuY3Rpb25zLCBhbmQgcmVuYW1lCisgIHRpbWUuc3RlYWR5KCkgdG8gdGltZS5tb25vdG9uaWMoKS4KKworLSBJc3N1ZSAjMTQ2NDY6IGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKCkgbm93IHNldHMgX19sb2FkZXJfXyBhbmQKKyAgX19wYWNrYWdlX18gKHdoZW4gcG9zc2libGUpLgorCistIElzc3VlICMxNDY2NDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBAdW5pdHRlc3Quc2tpcHtJZixVbmxlc3N9IG9uIGEKKyAgdGVzdCBjbGFzcyB0aGF0IGRvZXNuJ3QgaW5oZXJpdCBmcm9tIFRlc3RDYXNlIChpLmUuIGEgbWl4aW4pLgorCistIElzc3VlICM0ODkyOiBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMgY2FuIG5vdyBiZSB0cmFuc2ZlcnJlZCBvdmVyCisgIG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucy4gIFBhdGNoIGJ5IFJpY2hhcmQgT3Vka2VyayAoc2J0KS4KKworLSBJc3N1ZSAjMTQxNjA6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBmYWlsZWQgdG8gcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyB3aGVuCisgIHRoZSBsaW5rcyB3ZXJlIG5vdCBsb2NhdGVkIGluIGFuIGFyY2hpdmUgc3ViZGlyZWN0b3J5LgorCistIElzc3VlICMxNDYzODogcHlkb2Mgbm93IHRyZWF0cyBub24tc3RyaW5nIF9fbmFtZV9fIHZhbHVlcyBhcyBpZiB0aGV5CisgIHdlcmUgbWlzc2luZywgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorCistIElzc3VlICMxMzY4NDogRml4IGh0dHBsaWIgdHVubmVsIGlzc3VlIG9mIGluZmluaXRlIGxvb3BzIGZvciBjZXJ0YWluIHNpdGVzCisgIHdoaWNoIHNlbmQgRU9GIHdpdGhvdXQgdHJhaWxpbmcgXHJcbi4KKworLSBJc3N1ZSAjMTQ2MDU6IEFkZCBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIGltcG9ydGxpYi5tYWNoaW5lcnkuKEZpbGVGaW5kZXIsCisgIFNvdXJjZUZpbGVMb2FkZXIsIFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBFeHRlbnNpb25GaWxlTG9hZGVyKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpL3NvdXJjZV9mcm9tX2NhY2hlKCkgbm93IGZvbGxvdworICBvcy5wYXRoLmpvaW4oKS9zcGxpdCgpIHNlbWFudGljcyBmb3IgcGF0aCBtYW5pcHVsYXRpb24gaW5zdGVhZCBvZiBpdHMgcHJpb3IsCisgIGN1c3RvbSBzZW1hbnRpY3Mgb2YgY2FyaW5nIHRoZSByaWdodC1tb3N0IHBhdGggc2VwYXJhdG9yIGZvcndhcmQgaW4gcGF0aAorICBqb2luaW5nLgorCistIElzc3VlICMyMTkzOiBBbGxvdyAiOiIgY2hhcmFjdGVyIGluIENvb2tpZSBOQU1FIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ2Mjk6IHRva2VuaXplci5kZXRlY3RfZW5jb2Rpbmcgd2lsbCBzcGVjaWZ5IHRoZSBmaWxlbmFtZSBpbiB0aGUKKyAgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlmIGZvdW5kIGF0IHJlYWRsaW5lLl9fc2VsZl9fLm5hbWUuCisKKy0gSXNzdWUgIzE0NjI5OiBSYWlzZSBTeW50YXhFcnJvciBpbiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIGlmIHRoZQorICBmaXJzdCB0d28gbGluZXMgaGF2ZSBub24tVVRGLTggY2hhcmFjdGVycyB3aXRob3V0IGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uLgorCistIElzc3VlICMxNDMwODogRml4IGFuIGV4Y2VwdGlvbiB3aGVuIGEgImR1bW15IiB0aHJlYWQgaXMgaW4gdGhlIHRocmVhZGluZworICBtb2R1bGUncyBhY3RpdmUgbGlzdCBhZnRlciBhIGZvcmsoKS4KKworLSBJc3N1ZSAjMTE3NTA6IFRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgc2NhdHRlcmVkIGluIHRoZSBfc3VicHJvY2VzcyBhbmQKKyAgX211bHRpcHJvY2Vzc2luZy53aW4zMiBtb2R1bGVzIG5vdyBsaXZlIGluIGEgc2luZ2xlIG1vZHVsZSAiX3dpbmFwaSIuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwODc6IG11bHRpcHJvY2Vzc2luZzogYWRkIENvbmRpdGlvbi53YWl0X2ZvcigpLiBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0NTM4OiBIVE1MUGFyc2VyIGNhbiBub3cgcGFyc2UgY29ycmVjdGx5IHN0YXJ0IHRhZ3MgdGhhdCBjb250YWluCisgIGEgYmFyZSAnLycuCisKKy0gSXNzdWUgIzE0NDUyOiBTeXNMb2dIYW5kbGVyIG5vIGxvbmdlciBpbnNlcnRzIGEgVVRGLTggQk9NIGludG8gdGhlIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzE0Mzg2OiBFeHBvc2UgdGhlIGRpY3RfcHJveHkgaW50ZXJuYWwgdHlwZSBhcyB0eXBlcy5NYXBwaW5nUHJveHlUeXBlLgorCistIElzc3VlICMxMzk1OTogTWFrZSBpbXAucmVsb2FkKCkgYWx3YXlzIHVzZSBhIG1vZHVsZSdzIF9fbG9hZGVyX18gdG8gcGVyZm9ybQorICB0aGUgcmVsb2FkLgorCistIElzc3VlICMxMzk1OTogQWRkIGltcC5weSBhbmQgcmVuYW1lIHRoZSBidWlsdC1pbiBtb2R1bGUgdG8gX2ltcCwgYWxsb3dpbmcgZm9yCisgIHJlLWltcGxlbWVudGluZyBwYXJ0cyBvZiB0aGUgbW9kdWxlIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMzQ5NjogRml4IHBvdGVudGlhbCBvdmVyZmxvdyBpbiBiaXNlY3QuYmlzZWN0IGFsZ29yaXRobSB3aGVuIGFwcGxpZWQKKyAgdG8gYSBjb2xsZWN0aW9uIG9mIHNpemUgPiBzeXMubWF4c2l6ZSAvIDIuCisKKy0gSGF2ZSBpbXBvcnRsaWIgdGFrZSBhZHZhbnRhZ2Ugb2YgSW1wb3J0RXJyb3IncyBuZXcgJ25hbWUnIGFuZCAncGF0aCcKKyAgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTQzOTk6IHppcGZpbGUgbm93IHJlY29nbml6ZXMgdGhhdCB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBtb2RpZmllZCBldmVuCisgIGlmIG9ubHkgdGhlIGNvbW1lbnQgaXMgY2hhbmdlZC4gIEluIGFkZGl0aW9uLCB0aGUgVHlwZUVycm9yIHRoYXQgcmVzdWx0cyBmcm9tCisgIHRyeWluZyB0byBzZXQgYSBub24tYmluYXJ5IHZhbHVlIGFzIGEgY29tbWVudCBpcyBub3cgcmFpc2VkIGF0IHRoZSB0aW1lCisgIHRoZSBjb21tZW50IGlzIHNldCByYXRoZXIgdGhhbiBhdCB0aGUgdGltZSB0aGUgemlwZmlsZSBpcyB3cml0dGVuLgorCistIHRyYWNlLkNvdmVyYWdlUmVzdWx0cy5pc19pZ25vcmVkX2ZpbGVuYW1lKCkgbm93IGlnbm9yZXMgYW55IG5hbWUgdGhhdCBzdGFydHMKKyAgd2l0aCAiPCIgYW5kIGVuZHMgd2l0aCAiPiIgaW5zdGVhZCBvZiBzcGVjaWFsLWNhc2luZyAiPHN0cmluZz4iIGFuZAorICAiPGRvY3Rlc3QgIi4KKworLSBJc3N1ZSAjMTI1Mzc6IFRoZSBtYWlsYm94IG1vZHVsZSBubyBsb25nZXIgZGVwZW5kcyBvbiBrbm93bGVkZ2Ugb2YgaW50ZXJuYWwKKyAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZW1haWwgcGFja2FnZSBNZXNzYWdlIG9iamVjdC4KKworLSBJc3N1ZSAjNzk3ODogc29ja2V0c2VydmVyIG5vdyByZXN0YXJ0cyB0aGUgc2VsZWN0KCkgY2FsbCB3aGVuIEVJTlRSIGlzCisgIHJldHVybmVkLiAgVGhpcyBhdm9pZHMgY3Jhc2hpbmcgdGhlIHNlcnZlciBsb29wIHdoZW4gYSBzaWduYWwgaXMgcmVjZWl2ZWQuCisgIFBhdGNoIGJ5IEplcnp5IEtvemVyYS4KKworLSBJc3N1ZSAjMTQ1MjI6IEF2b2lkIGR1cGxpY2F0aW5nIHNvY2tldCBoYW5kbGVzIGluIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLgorICBQYXRjaCBieSBzYnQuCisKKy0gRG9uJ3QgUHlfREVDUkVGIE5VTEwgdmFyaWFibGUgaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci4KKworLSBJc3N1ZSAjODUxNTogU2V0IF9fZmlsZV9fIHdoZW4gcnVuIGZpbGUgaW4gSURMRS4KKyAgSW5pdGlhbCBwYXRjaCBieSBCcnVjZSBGcmVkZXJpa3Nlbi4KKworLSBJc3N1ZSAjMTQ0OTY6IEZpeCB3cm9uZyBuYW1lIGluIGlkbGVsaWIvdGFiYmVkcGFnZXMucHkuCisgIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjMzAzMzogQWRkIGRpc3BsYXlvZiBwYXJhbWV0ZXIgdG8gdGtpbnRlciBmb250LiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTQ0ODI6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfVU5JWCB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgV2luZG93cy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjODAyMzEwOiBHZW5lcmF0ZSBhbHdheXMgdW5pcXVlIHRraW50ZXIgZm9udCBuYW1lcyBpZiBub3QgZGlyZWN0bHkgcGFzc2VkLgorCistIElzc3VlICMxNDE1MTogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQorICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9QSVBFIHR5cGUgYWRkcmVzcyB1bmRlcgorICBub24tV2luZG93cyBwbGF0Zm9ybXMuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzE0NDkzOiBVc2UgZ3Zmcy1vcGVuIG9yIHhkZy1vcGVuIGluIHdlYmJyb3dzZXIuCisKK0J1aWxkCistLS0tLQorCistICJtYWtlIHRvdWNoIiB3aWxsIG5vdyB0b3VjaCBnZW5lcmF0ZWQgZmlsZXMgdGhhdCBhcmUgY2hlY2tlZCBpbnRvIE1lcmN1cmlhbCwKKyAgYWZ0ZXIgYSAiaGcgdXBkYXRlIiB3aGljaCBmYWlsZWQgdG8gYnJpbmcgdGhlIHRpbWVzdGFtcHMgaW50byB0aGUgcmlnaHQgb3JkZXIuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDAyNjogSW4gdGVzdF9jbWRfbGluZV9zY3JpcHQsIGNoZWNrIHRoYXQgc3lzLmFyZ3YgaXMgcG9wdWxhdGVkCisgIGNvcnJlY3RseSBmb3IgdGhlIHZhcmlvdXMgaW52b2NhdGlvbiBhcHByb2FjaGVzIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0MDMyOiBGaXggaW5jb3JyZWN0IHZhcmlhYmxlIG5hbWUgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQgZGVidWdnaW5nCisgIG1lc3NhZ2UgKFBhdGNoIGJ5IEphc29uIFllbykKKworLSBJc3N1ZSAjMTQ1ODk6IFVwZGF0ZSBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3Igc2hhMjU2LnRicy1pbnRlcm5ldC5jb20sIGZpeGluZworICBhIHRlc3QgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTQzNTU6IFJlZ3J0ZXN0IG5vdyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLCBhbmQKKyAgd2lsbCB1c2UgaXQgaWYgYSB0ZXN0IGZpbGUgY29udGFpbnMgbm8gYHRlc3RfbWFpbmAgbWV0aG9kLgorCitUb29scyAvIERlbW9zCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzM1NjE6IFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgaGFzIGFuIG9wdGlvbiwgb2ZmIGJ5IGRlZmF1bHQsIGZvcgorICBwbGFjaW5nIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGludG8gdGhlIHN5c3RlbSAiUGF0aCIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKy0gSXNzdWUgIzEzMTY1OiBzdHJpbmdiZW5jaCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBUb29scy9zdHJpbmdiZW5jaCBmb2xkZXIuCisgIEl0IHVzZWQgdG8gbGl2ZSBpbiBpdHMgb3duIFNWTiBwcm9qZWN0LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwMS1BcHItMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2ODMzNjg6IG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18gcmFpc2UgYSBUeXBlRXJyb3IgaWYgdGhleQorICBhcmUgcGFzc2VkIGFyZ3VtZW50cyBhbmQgdGhlaXIgY29tcGxlbWVudGFyeSBtZXRob2QgaXMgbm90IG92ZXJyaWRkZW4uCisKKy0gSXNzdWUgIzE0Mzc4OiBGaXggY29tcGlsaW5nIGFzdC5JbXBvcnRGcm9tIG5vZGVzIHdpdGggYSAiX19mdXR1cmVfXyIgc3RyaW5nIGFzCisgIHRoZSBtb2R1bGUgbmFtZSB0aGF0IHdhcyBub3QgaW50ZXJuZWQuCisKKy0gSXNzdWUgIzE0MzMxOiBVc2Ugc2lnbmlmaWNhbnRseSBsZXNzIHN0YWNrIHNwYWNlIHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMgYnkKKyAgYWxsb2NhdGluZyBwYXRoIGJ1ZmZlcnMgb24gdGhlIGhlYXAgaW5zdGVhZCBvZiB0aGUgc3RhY2suCisKKy0gSXNzdWUgIzE0MzM0OiBQcmV2ZW50IGluIGEgc2VnZmF1bHQgaW4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fIHdoZW4gaXQgd2FzIG5vdAorICBwYXNzZWQgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQ2OTYyOTogQWxsb3cgY3ljbGVzIHRocm91Z2ggYW4gb2JqZWN0J3MgX19kaWN0X18gc2xvdCB0byBiZQorICBjb2xsZWN0ZWQuIChGb3IgZXhhbXBsZSBpZiBgYHguX19kaWN0X18gaXMgeGBgKS4KKworLSBJc3N1ZSAjMTQyMDU6IGRpY3QgbG9va3VwIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgZGljdCBpcyBtb2RpZmllZAorICBkdXJpbmcgYSBsb29rdXAuCisKKy0gSXNzdWUgIzE0MjIwOiBXaGVuIGEgZ2VuZXJhdG9yIGlzIGRlbGVnYXRpbmcgdG8gYW5vdGhlciBpdGVyYXRvciB3aXRoIHRoZQorICB5aWVsZCBmcm9tIHN5bnRheCwgaXQgbmVlZHMgdG8gaGF2ZSBpdHMgYGBnaV9ydW5uaW5nYGAgZmxhZyBzZXQgdG8gVHJ1ZS4KKworLSBJc3N1ZSAjMTQ0MzU6IFJlbW92ZSBkZWRpY2F0ZWQgYmxvY2sgYWxsb2NhdG9yIGZyb20gZmxvYXRvYmplY3QuYyBhbmQgcmVseQorICBvbiB0aGUgUHlPYmplY3RfTWFsbG9jKCkgYXBpIGxpa2UgYWxsIG90aGVyIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NDcxOiBGaXggYSBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1biBpbiB0aGUgd2lucmVnIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQyODg6IEFsbG93IHRoZSBzZXJpYWxpemF0aW9uIG9mIGJ1aWx0aW4gaXRlcmF0b3JzCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQzMDA6IFVuZGVyIFdpbmRvd3MsIHNvY2tldHMgY3JlYXRlZCB1c2luZyBzb2NrZXQuZHVwKCkgbm93IGFsbG93CisgIG92ZXJsYXBwZWQgSS9PLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzg3Mjogc29ja2V0LmRldGFjaCgpIG5vdyBtYXJrcyB0aGUgc29ja2V0IGNsb3NlZCAoYXMgbWlycm9yZWQKKyAgaW4gdGhlIHNvY2tldCByZXByKCkpLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzE0NDA2OiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIHVzaW5nIGBgY29uY3VycmVudC5mdXR1cmVzLndhaXQoCisgIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpYGAuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjNTEzNjogZGVwcmVjYXRlIG9sZCwgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIuCisKKy0gSXNzdWUgIzE0NDA5OiBJRExFIG5vdyBwcm9wZXJseSBleGVjdXRlcyBjb21tYW5kcyBpbiB0aGUgU2hlbGwgd2luZG93CisgIHdoZW4gaXQgY2Fubm90IHJlYWQgdGhlIG5vcm1hbCBjb25maWcgZmlsZXMgb24gc3RhcnR1cCBhbmQKKyAgaGFzIHRvIHVzZSB0aGUgYnVpbHQtaW4gZGVmYXVsdCBrZXkgYmluZGluZ3MuCisgIFRoZXJlIHdhcyBwcmV2aW91c2x5IGEgYnVnIGluIG9uZSBvZiB0aGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE0NDE2OiBzeXNsb2cgbm93IGRlZmluZXMgdGhlIExPR19PREVMQVkgYW5kIExPR19BVVRIUFJJViBjb25zdGFudHMKKyAgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiA8c3lzbG9nLmg+LgorCistIElETEUgY2FuIGJlIGxhdW5jaGVkIGFzIHB5dGhvbiAtbSBpZGxlbGliCisKKy0gSXNzdWUgIzE0Mjk1OiBBZGQgdW5pdHRlc3QubW9jaworCistIElzc3VlICM3NjUyOiBBZGQgLS13aXRoLXN5c3RlbS1saWJtcGRlYyBvcHRpb24gdG8gY29uZmlndXJlIGZvciBsaW5raW5nCisgIHRoZSBfZGVjaW1hbCBtb2R1bGUgYWdhaW5zdCBhbiBpbnN0YWxsZWQgbGlibXBkZWMuCisKKy0gSXNzdWUgIzE0MzgwOiBNSU1FVGV4dCBub3cgZGVmYXVsdHMgdG8gdXRmLTggd2hlbiBwYXNzZWQgbm9uLUFTQ0lJIHVuaWNvZGUKKyAgd2l0aCBubyBjaGFyc2V0IHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTAzNDA6IGFzeW5jb3JlIC0gcHJvcGVybHkgaGFuZGxlIEVJTlZBTCBpbiBkaXNwYXRjaGVyIGNvbnN0cnVjdG9yIG9uCisgIE9TWDsgYXZvaWQgdG8gY2FsbCBoYW5kbGVfY29ubmVjdCBpbiBjYXNlIG9mIGEgZGlzY29ubmVjdGVkIHNvY2tldCB3aGljaAorICB3YXMgbm90IG1lYW50IHRvIGNvbm5lY3QuCisKKy0gSXNzdWUgIzE0MjA0OiBUaGUgc3NsIG1vZHVsZSBub3cgaGFzIHN1cHBvcnQgZm9yIHRoZSBOZXh0IFByb3RvY29sCisgIE5lZ290aWF0aW9uIGV4dGVuc2lvbiwgaWYgYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIE9wZW5TU0wgbGlicmFyeS4KKyAgUGF0Y2ggYnkgQ29saW4gTWFyYy4KKworLSBJc3N1ZSAjMzAzNTogVW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIgYXJlIG1hcmtlZCBhcyBwZW5kaW5nIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEyNzU3OiBGaXggdGhlIHNraXBwaW5nIG9mIGRvY3Rlc3RzIHdoZW4gcHl0aG9uIGlzIHJ1biB3aXRoIC1PTyBzbworICB0aGF0IGl0IHdvcmtzIGluIHVuaXR0ZXN0J3MgdmVyYm9zZSBtb2RlIGFzIHdlbGwgYXMgbm9uLXZlcmJvc2UgbW9kZS4KKworLSBJc3N1ZSAjNzY1MjogSW50ZWdyYXRlIHRoZSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpYm1wZGVjIGxpYnJhcnkgdG8gc3BlZWQKKyAgdXAgdGhlIGRlY2ltYWwgbW9kdWxlLiBQZXJmb3JtYW5jZSBnYWlucyBvZiB0aGUgbmV3IEMgaW1wbGVtZW50YXRpb24gYXJlCisgIGJldHdlZW4gMTB4IGFuZCAxMDB4LCBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLgorCistIElzc3VlICMzNTczOiBJRExFIGhhbmdzIHdoZW4gcGFzc2luZyBpbnZhbGlkIGNvbW1hbmQgbGluZSBhcmdzCisgIChkaXJlY3RvcnkoaWVzKSBpbnN0ZWFkIG9mIGZpbGUocykpIChQYXRjaCBieSBHdWlsaGVybWUgUG9sbykKKworLSBJc3N1ZSAjMTQyNjk6IFNNVFBEIG5vdyBjb25mb3JtcyB0byB0aGUgUkZDIGFuZCByZXF1aXJlcyBhIEhFTE8gY29tbWFuZAorICBiZWZvcmUgTUFJTCwgUkNQVCwgb3IgREFUQS4KKworLSBJc3N1ZSAjMTM2OTQ6IGFzeW5jaHJvbm91cyBjb25uZWN0IGluIGFzeW5jb3JlLmRpc3BhdGNoZXIgZG9lcyBub3Qgc2V0IGFkZHIKKyAgYXR0cmlidXRlLgorCistIElzc3VlICMxNDM0NDogZml4ZWQgdGhlIHJlcHIgb2YgZW1haWwucG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNjg2OiBBZGRlZCBtaXNzaW5nIGVudHJpZXMgdG8gZW1haWwgcGFja2FnZSBfX2FsbF9fIGxpc3RzCisgIChtb3N0bHkgdGhlIG5ldyBCeXRlcyBjbGFzc2VzKS4KKworLSBJc3N1ZSAjMTQzMzU6IG11bHRpcHJvY2Vzc2luZydzIGN1c3RvbSBQaWNrbGVyIHN1YmNsYXNzIG5vdyBpbmhlcml0cyBmcm9tCisgIHRoZSBDLWFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMDQ4NDogRml4IHRoZSBDR0lIVFRQU2VydmVyJ3MgUEFUSF9JTkZPIGhhbmRsaW5nIHByb2JsZW0uCisKKy0gSXNzdWUgIzExMTk5OiBGaXggdGhlIHdpdGggdXJsbGliIHdoaWNoIGhhbmdzIG9uIHBhcnRpY3VsYXIgZnRwIHVybHMuCisKKy0gSW1wcm92ZSB0aGUgbWVtb3J5IHV0aWxpemF0aW9uIGFuZCBzcGVlZCBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlLgorCistIElzc3VlICMxNDIyMjogVXNlIHRoZSBuZXcgdGltZS5zdGVhZHkoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRpbWUudGltZSgpIGZvcgorICB0aW1lb3V0IGluIHF1ZXVlIGFuZCB0aHJlYWRpbmcgbW9kdWxlcyB0byBub3QgYmUgYWZmZWN0ZWQgb2Ygc3lzdGVtIHRpbWUKKyAgdXBkYXRlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIGxpYjJ0bzMucHl0cmVlLkJhc2UuZ2V0X3ByZWZpeC9zZXRfcHJlZml4LgorCistIElzc3VlICMxNDIzNDogQ1ZFLTIwMTItMDg3NjogUmFuZG9taXplIGhhc2hlcyBvZiB4bWwgYXR0cmlidXRlcyBpbiB0aGUgaGFzaAorICB0YWJsZSBpbnRlcm5hbCB0byB0aGUgcHlleHBhdCBtb2R1bGUncyBjb3B5IG9mIHRoZSBleHBhdCBsaWJyYXJ5IHRvIGF2b2lkIGEKKyAgZGVuaWFsIG9mIHNlcnZpY2UgZHVlIHRvIGhhc2ggY29sbGlzaW9ucy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0gd2l0aCBzb21lCisgIG1vZGlmaWNhdGlvbnMgYnkgdGhlIGV4cGF0IHByb2plY3QuCisKKy0gSXNzdWUgIzE0MjAwOiBJZGxlIHNoZWxsIGNyYXNoIG9uIHByaW50aW5nIG5vbi1CTVAgdW5pY29kZSBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzEyODE4OiBmb3JtYXQgYWRkcmVzcyBubyBsb25nZXIgbmVlZGxlc3NseSBcIGVzY2FwZXMgKClzIGluIG5hbWVzIHdoZW4KKyAgdGhlIG5hbWUgZW5kcyB1cCBiZWluZyBxdW90ZWQuCisKKy0gSXNzdWUgIzE0MDYyOiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IGZvbGRzIEhlYWRlciBvYmplY3RzLAorICBpbmNsdWRpbmcgdXNpbmcgbGluZXNlcCB3aGVuIGZvbGRpbmcuCisKKy0gSXNzdWUgIzEzODM5OiBXaGVuIGludm9rZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIHBzdGF0cyBtb2R1bGUgbm93CisgIGFjY2VwdHMgc2V2ZXJhbCBmaWxlbmFtZXMgb2YgcHJvZmlsZSBzdGF0IGZpbGVzIGFuZCBtZXJnZXMgdGhlbSBhbGwuCisgIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDI5MTogRW1haWwgbm93IGRlZmF1bHRzIHRvIHV0Zi04IGZvciBub24tQVNDSUkgdW5pY29kZSBoZWFkZXJzCisgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIDIuNy4KKworLSBJc3N1ZSAjOTg5NzEyOiBTdXBwb3J0IHVzaW5nIFRrIHdpdGhvdXQgYSBtYWlubG9vcC4KKworLSBJc3N1ZSAjNTIxOTogUHJldmVudCBldmVudCBoYW5kbGVyIGNhc2NhZGUgaW4gSURMRS4KKworLSBJc3N1ZSAjMzgzNTogUmVmdXNlIHRvIHVzZSB1bnRocmVhZGVkIFRjbCBpbiB0aHJlYWRlZCBQeXRob24uCisKKy0gSXNzdWUgIzI4NDM6IEFkZCBuZXcgVGsgQVBJIHRvIFRraW50ZXIuCisKKy0gSXNzdWUgIzE0MTg0OiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCB0byBhdm9pZCBpbnRlcnByZXRlciBjcmFzaGVzIHdoZW4gdXNpbmcgdGhyZWFkcyBvbiAxMC43LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksCisgIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpCisgIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciBpZiBsb2NhbHRpbWUoKSBvciBnbXRpbWUoKSBmYWlsZWQuCisKKy0gSXNzdWUgIzE0MTgwOiB0aW1lLmN0aW1lKCksIGdtdGltZSgpLCB0aW1lLmxvY2FsdGltZSgpLAorICBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yLCBpbnN0ZWFkIG9mCisgIGEgVmFsdWVFcnJvciwgaWYgdGhlIHRpbWVzdGFtcCBkb2VzIG5vdCBmaXQgaW4gdGltZV90LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJvdW5kIG1pY3Jvc2Vjb25kcyB0b3dhcmRzIHplcm8KKyAgaW5zdGVhZCBvZiByb3VuZGluZyB0byBuZWFyZXN0IHdpdGggdGllcyBnb2luZyBhd2F5IGZyb20gemVyby4KKworLSBJc3N1ZSAjMTA1NDM6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSB3aXRoIEp5dGhvbiBieXRlY29kZSBmaWxlcy4KKworLSBJc3N1ZSAjMTE3ODg2MzogU2VwYXJhdGUgaW5pdGlhbGlzYXRpb24gZnJvbSBzZXR0aW5nIHdoZW4gaW5pdGlhbGl6aW5nCisgIFRraW50ZXIuVmFyaWFibGVzOyBoYXJtb25pemUgZXhjZXB0aW9ucyB0byBWYWx1ZUVycm9yOyBvbmx5IGRlbGV0ZSB2YXJpYWJsZXMKKyAgdGhhdCBoYXZlIG5vdCBiZWVuIGRlbGV0ZWQ7IGFzc2VydCB0aGF0IHZhcmlhYmxlIG5hbWVzIGFyZSBzdHJpbmdzLgorCistIElzc3VlICMxNDEwNDogSW1wbGVtZW50IHRpbWUubW9ub3RvbmljKCkgb24gTWFjIE9TIFgsIHBhdGNoIHdyaXR0ZW4gYnkKKyAgTmljaG9sYXMgUmlsZXkuCisKKy0gSXNzdWUgIzEzMzk0OiB0aGUgYWlmYyBtb2R1bGUgbm93IHVzZXMgd2FybmluZ3Mud2FybigpIHRvIHNpZ25hbCB3YXJuaW5ncy4KKworLSBJc3N1ZSAjMTQyNTI6IEZpeCBzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZSgpIHRvIG5vdCByYWlzZSBhbiBlcnJvciB1bmRlcgorICBXaW5kb3dzIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGFscmVhZHkgZXhpdGVkLgorCistIElzc3VlICMxNDIyMzogY3Vyc2VzLmFkZGNoKCkgaXMgbm8gbW9yZSBsaW1pdGVkIHRvIHRoZSByYW5nZSAwLTI1NSB3aGVuIHRoZQorICBQeXRob24gY3Vyc2VzIGlzIG5vdCBsaW5rZWQgdG8gbGlibmN1cnNlc3cuIEl0IHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZAorICBpbiBQeXRob24gMy4zYTEuCisKKy0gSXNzdWUgIzE0MTY4OiBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgRWxlbWVudC5fYXR0cnMgaW4gbWluaWRvbSBiZWZvcmUKKyAgYWNjZXNzaW5nIGl0LgorCistIElzc3VlICMxMjMyODogRml4IG11bHRpcHJvY2Vzc2luZydzIHVzZSBvZiBvdmVybGFwcGVkIEkvTyBvbiBXaW5kb3dzLgorICBBbHNvLCBhZGQgYSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi53YWl0KHJsaXN0LCB0aW1lb3V0PU5vbmUpIGZ1bmN0aW9uCisgIGZvciBwb2xsaW5nIG11bHRpcGxlIG9iamVjdHMgYXQgb25jZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwMDc6IEFjY2VwdCBpbmNvbXBsZXRlIFRyZWVCdWlsZGVyIG9iamVjdHMgKG1pc3Npbmcgc3RhcnQsIGVuZCwKKyAgZGF0YSBvciBjbG9zZSBtZXRob2QpIGZvciB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGFzIHdlbGwuCisgIERyb3AgdGhlIG5vLW9wIFRyZWVCdWlsZGVyKCkueG1sKCkgbWV0aG9kIGZyb20gdGhlIEMgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzE0MjEwOiBwZGIgbm93IGhhcyB0YWItY29tcGxldGlvbiBub3Qgb25seSBmb3IgY29tbWFuZCBuYW1lcywgYnV0CisgIGFsc28gZm9yIHRoZWlyIGFyZ3VtZW50cywgd2hlcmV2ZXIgcG9zc2libGUuCisKKy0gSXNzdWUgIzE0MzEwOiBTb2NrZXRzIGNhbiBub3cgYmUgd2l0aCBvdGhlciBwcm9jZXNzZXMgb24gV2luZG93cyB1c2luZworICB0aGUgYXBpIHNvY2tldC5zb2NrZXQuc2hhcmUoKSBhbmQgc29ja2V0LmZyb21zaGFyZSgpLgorCistIElzc3VlICMxMDU3NjogVGhlIGdjIG1vZHVsZSBub3cgaGFzIGEgJ2NhbGxiYWNrcycgbWVtYmVyIHRoYXQgd2lsbCBnZXQKKyAgY2FsbGVkIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ1NTc6IEZpeCBleHRlbnNpb25zIGJ1aWxkIG9uIEhQLVVYLiBQYXRjaCBieSBBZGkgUm9pYmFuLgorCistIElzc3VlICMxNDM4NzogRG8gbm90IGluY2x1ZGUgYWNjdS5oIGZyb20gUHl0aG9uLmguCisKKy0gSXNzdWUgIzE0MzU5OiBPbmx5IHVzZSBPX0NMT0VYRUMgaW4gX3Bvc2l4bW9kdWxlLmMgaWYgaXQgaXMgZGVmaW5lZC4KKyAgQmFzZWQgb24gcGF0Y2ggZnJvbSBIZXJ2w6kgQ29hdGFuaGF5LgorCistIElzc3VlICMxNDMyMTogRG8gbm90IHJ1biBwZ2VuIGR1cmluZyB0aGUgYnVpbGQgaWYgZmlsZXMgYXJlIHVwIHRvIGRhdGUuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwMzQ6IGFkZGVkIHRoZSBhcmdwYXJzZSB0dXRvcmlhbC4KKworLSBJc3N1ZSAjMTQzMjQ6IEZpeCBjb25maWd1cmUgdGVzdHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTQzMjc6IENhbGwgQUNfQ0FOT05JQ0FMX0hPU1QgaW4gY29uZmlndXJlLmFjIGFuZCBjaGVjayBpbgorICBjb25maWcue2d1ZXNzLHN1Yn0uIERvbid0IHVzZSB1bmFtZSBjYWxscyBmb3IgY3Jvc3MgYnVpbGRzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTA0MTogQW4gaXNzdWUgaW4gY3R5cGVzLmNfbG9uZ2RvdWJsZSwgY3R5cGVzLmNfZG91YmxlLCBhbmQKKyAgY3R5cGVzLmNfZmxvYXQgdGhhdCBjYXVzZWQgYW4gaW5jb3JyZWN0IGV4Y2VwdGlvbiB0byBiZSByZXR1cm5lZCBpbiB0aGUKKyAgY2FzZSBvZiBvdmVyZmxvdyBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTQyMTI6IFRoZSByZSBtb2R1bGUgZGlkbid0IHJldGFpbiBhIHJlZmVyZW5jZSB0byBidWZmZXJzIGl0IHdhcworICBzY2FubmluZywgcmVzdWx0aW5nIGluIHNlZ2ZhdWx0cy4KKworLSBJc3N1ZSAjMTQyNTk6IFRoZSBmaW5kaXRlcigpIG1ldGhvZCBvZiByZSBvYmplY3RzIGRpZCBub3QgdGFrZSBhbnkKKyAga2V5d29yZCBhcmd1bWVudHMsIGNvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxMDE0MjogU3VwcG9ydCBmb3IgU0VFS19IT0xFL1NFRUtfREFUQSAoZm9yIGV4YW1wbGUsIHVuZGVyIFpGUykuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDQ0MjogQWRkIG1pc3NpbmcgZXJybm8gaW1wb3J0IGluIHRlc3Rfc210cGxpYi4KKworLSBJc3N1ZSAjODMxNTogKHBhcnRpYWwgZml4KSBweXRob24gLW0gdW5pdHRlc3QgdGVzdC50ZXN0X2VtYWlsIG5vdyB3b3Jrcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDUtTWFyLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDE3MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gbWFyc2hhbGxpbmcgYSBidWZmZXItbGlrZSBvYmplY3QKKyAgKG90aGVyIHRoYW4gYSBieXRlcyBvYmplY3QpLgorCistIElzc3VlICMxMzUyMTogZGljdC5zZXRkZWZhdWx0KCkgbm93IGRvZXMgb25seSBvbmUgbG9va3VwIGZvciB0aGUgZ2l2ZW4ga2V5LAorICBtYWtpbmcgaXQgImF0b21pYyIgZm9yIG1hbnkgcHVycG9zZXMuICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIFBFUCA0MDksIElzc3VlICM2MjEwOiAicmFpc2UgWCBmcm9tIE5vbmUiIGlzIG5vdyBzdXBwb3J0ZWQgYXMgYSBtZWFucyBvZgorICBzdXBwcmVzc2luZyB0aGUgZGlzcGxheSBvZiB0aGUgY2hhaW5lZCBleGNlcHRpb24gY29udGV4dC4gVGhlIGNoYWluZWQKKyAgY29udGV4dCBzdGlsbCByZW1haW5zIGF2YWlsYWJsZSBhcyB0aGUgX19jb250ZXh0X18gYXR0cmlidXRlLgorCistIElzc3VlICMxMDE4MTogTmV3IG1lbW9yeXZpZXcgaW1wbGVtZW50YXRpb24gZml4ZXMgbXVsdGlwbGUgb3duZXJzaGlwCisgIGFuZCBsaWZldGltZSBpc3N1ZXMgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFB5X2J1ZmZlciBtZW1iZXJzICgjOTk5MCkKKyAgYXMgd2VsbCBhcyBjcmFzaGVzICgjODMwNSwgIzc0MzMpLiBNYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQKKyAgKFNlZSB3aGF0c25ldy8zLjMpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBleHRlbnNpdmVseS4KKyAgVGhlIG5kYXJyYXkgdGVzdCBvYmplY3QgZnJvbSBfdGVzdGJ1ZmZlci5jIGltcGxlbWVudHMgYWxsIGFzcGVjdHMgb2YKKyAgUEVQLTMxMTgsIHNvIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgdG93YXJkcyB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KKyAgb2YgdGhlIFBFUCBjYW4gcHJvY2VlZCBpbiBhIHRlc3QtZHJpdmVuIG1hbm5lci4KKworICBUaGFua3MgdG8gTmljayBDb2dobGFuLCBBbnRvaW5lIFBpdHJvdSBhbmQgUGF1bGkgVmlydGFuZW4gZm9yIHJldmlldworICBhbmQgbWFueSBpZGVhcy4KKworLSBJc3N1ZSAjMTI4MzQ6IEZpeCBpbmNvcnJlY3QgcmVzdWx0cyBvZiBtZW1vcnl2aWV3LnRvYnl0ZXMoKSBmb3IKKyAgbm9uLWNvbnRpZ3VvdXMgYXJyYXlzLgorCistIElzc3VlICM1MjMxOiBJbnRyb2R1Y2UgbWVtb3J5dmlldy5jYXN0KCkgbWV0aG9kIHRoYXQgYWxsb3dzIGNoYW5naW5nCisgIGZvcm1hdCBhbmQgc2hhcGUgd2l0aG91dCBtYWtpbmcgYSBjb3B5IG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKworLSBJc3N1ZSAjMTQwODQ6IEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIHdpdGggYQorICBiYWQgZW5jb2RpbmcuCisKKy0gVXBncmFkZSBVbmljb2RlIGRhdGEgdG8gVW5pY29kZSA2LjEuCisKKy0gSXNzdWUgIzE0MDQwOiBSZW1vdmUgcmFyZWx5IHVzZWQgZmlsZSBuYW1lIHN1ZmZpeGVzIGZvciBDIGV4dGVuc2lvbnMKKyAgKHVuZGVyIFBPU0lYIG1haW5seSkuCisKKy0gSXNzdWUgIzE0MDUxOiBBbGxvdyBhcmJpdHJhcnkgYXR0cmlidXRlcyB0byBiZSBzZXQgb2YgY2xhc3NtZXRob2QgYW5kCisgIHN0YXRpY21ldGhvZC4KKworLSBJc3N1ZSAjMTM3MDM6IG9DRVJULTIwMTEtMDAzOiBSYW5kb21pemUgaGFzaGVzIG9mIHN0ciBhbmQgYnl0ZXMgdG8gcHJvdGVjdAorICBhZ2FpbnN0IGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFja3MgZHVlIHRvIGhhc2ggY29sbGlzaW9ucyB3aXRoaW4gdGhlIGRpY3QgYW5kCisgIHNldCB0eXBlcy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0sIGJhc2VkIG9uIHdvcmsgYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzEzMDIwOiBGaXggYSByZWZlcmVuY2UgbGVhayB3aGVuIGFsbG9jYXRpbmcgYSBzdHJ1Y3RzZXF1ZW5jZSBvYmplY3QKKyAgZmFpbHMuICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzkwODogUmVhZHkgdHlwZXMgcmV0dXJuZWQgZnJvbSBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzExMjM1OiBGaXggT3ZlcmZsb3dFcnJvciB3aGVuIHRyeWluZyB0byBpbXBvcnQgYSBzb3VyY2UgZmlsZSB3aG9zZQorICBtb2RpZmljYXRpb24gdGltZSBkb2Vzbid0IGZpdCBpbiBhIDMyLWJpdCB0aW1lc3RhbXAuCisKKy0gSXNzdWUgIzEyNzA1OiBBIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpcyBub3cgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZyB0bworICBjb21waWxlIG11bHRpcGxlIHN0YXRlbWVudHMgYXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50LgorCistIEZpeCB0aGUgYnVpbHRpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZSB0byBzdG9yZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IKKyAgZnV0dXJlIHJlaW5pdGlhbGl6YXRpb24uCisKKy0gSXNzdWUgIzgwNTI6IFRoZSBwb3NpeCBzdWJwcm9jZXNzIG1vZHVsZSB3b3VsZCB0YWtlIGEgbG9uZyB0aW1lIGNsb3NpbmcKKyAgYWxsIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIGNoaWxkIHByb2Nlc3MgcmF0aGVyIHRoYW4ganVzdCBvcGVuCisgIGZpbGUgZGVzY3JpcHRvcnMuICBJdCBub3cgY2xvc2VzIG9ubHkgdGhlIG9wZW4gZmRzIGlmIHBvc3NpYmxlIGZvciB0aGUKKyAgZGVmYXVsdCBjbG9zZV9mZHM9VHJ1ZSBiZWhhdmlvci4KKworLSBJc3N1ZSAjMTM2Mjk6IFJlbnVtYmVyIHRoZSB0b2tlbnMgaW4gdG9rZW4uaCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIGluZGV4ZXMKKyAgaW50byBfUHlQYXJzZXJfVG9rZW5OYW1lcy4KKworLSBJc3N1ZSAjMTM3NTI6IEFkZCBhIGNhc2Vmb2xkKCkgbWV0aG9kIHRvIHN0ci4KKworLSBJc3N1ZSAjMTM3NjE6IEFkZCBhICJmbHVzaCIga2V5d29yZCBhcmd1bWVudCB0byB0aGUgcHJpbnQoKSBmdW5jdGlvbiwKKyAgdXNlZCB0byBlbnN1cmUgZmx1c2hpbmcgdGhlIG91dHB1dCBzdHJlYW0uCisKKy0gSXNzdWUgIzEzNjQ1OiBweWMgZmlsZXMgbm93IGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlCisgIGNvZGUsIHRvIGF2b2lkIHRpbWVzdGFtcCBjb2xsaXNpb25zIChlc3BlY2lhbGx5IG9uIGZpbGVzeXN0ZW1zIHdpdGggYSBsb3cKKyAgdGltZXN0YW1wIHJlc29sdXRpb24pIHdoZW4gY2hlY2tpbmcgZm9yIGZyZXNobmVzcyBvZiB0aGUgYnl0ZWNvZGUuCisKKy0gUEVQIDM4MCwgSXNzdWUgIzExNjgyOiBBZGQgInlpZWxkIGZyb20gPHg+IiB0byBzdXBwb3J0IGVhc3kgZGVsZWdhdGlvbiB0bworICBzdWJnZW5lcmF0b3JzIChpbml0aWFsIHBhdGNoIGJ5IEdyZWcgRXdpbmcsIGludGVncmF0aW9uIGludG8gMy4zIGJ5CisgIFJlbmF1ZCBCbGFuY2gsIFJ5YW4gS2VsbHksIFpiaWduaWV3IErEmWRyemVqZXdza2ktU3ptZWsgYW5kIE5pY2sgQ29naGxhbikKKworLSBJc3N1ZSAjMTM3NDg6IFJhdyBieXRlcyBsaXRlcmFscyBjYW4gbm93IGJlIHdyaXR0ZW4gd2l0aCB0aGUgYGByYmBgIHByZWZpeAorICBhcyB3ZWxsIGFzIGBgYnJgYC4KKworLSBJc3N1ZSAjMTI3MzY6IFVzZSBmdWxsIHVuaWNvZGUgY2FzZSBtYXBwaW5ncyBmb3IgdXBwZXIsIGxvd2VyLCBhbmQgdGl0bGUgY2FzZS4KKworLSBJc3N1ZSAjMTI3NjA6IEFkZCBhIGNyZWF0ZSBtb2RlIHRvIG9wZW4oKS4gUGF0Y2ggYnkgRGF2aWQgVG93bnNoZW5kLgorCistIElzc3VlICMxMzczODogU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYnl0ZXMubG93ZXIoKSBhbmQgYnl0ZXMudXBwZXIoKS4KKworLSBJc3N1ZSAjMTM1Nzc6IEJ1aWx0LWluIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBub3cgaGF2ZSBhIF9fcXVhbG5hbWVfXy4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICM2Njk1OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zIG5vdyBjbGVhciB0aGUgZnJlZWxpc3Qgb2Ygc2V0CisgIG9iamVjdHMuICBJbml0aWFsIHBhdGNoIGJ5IE1hdHRoaWFzIFRyb2ZmYWVzLgorCistIEZpeCBPU0Vycm9yLl9faW5pdF9fIGFuZCBPU0Vycm9yLl9fbmV3X18gc28gdGhhdCBlYWNoIG9mIHRoZW0gY2FuIGJlCisgIG92ZXJyaWRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KKworLSBGaXggdGhlIGZpeCBmb3IgaXNzdWUgIzEyMTQ5OiBpdCB3YXMgaW5jb3JyZWN0LCBhbHRob3VnaCBpdCBoYWQgdGhlIHNpZGUKKyAgZWZmZWN0IG9mIGFwcGVhcmluZyB0byByZXNvbHZlIHRoZSBpc3N1ZS4gIFRoYW5rcyB0byBNYXJrIFNoYW5ub24gZm9yCisgIG5vdGljaW5nLgorCistIElzc3VlICMxMzUwNTogUGlja2xlIGJ5dGVzIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAgUHl0aG9uIDIgd2hlbiB1c2luZyBwcm90b2NvbHMgPD0gMi4KKworLSBJc3N1ZSAjMTExNDc6IEZpeCBhbiB1bnVzZWQgYXJndW1lbnQgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUi4gIChGaXgKKyAgZ2l2ZW4gYnkgQ2FtcGJlbGwgQmFydG9uKS4KKworLSBJc3N1ZSAjMTM1MDM6IFVzZSBhIG1vcmUgZWZmaWNpZW50IHJlZHVjdGlvbiBmb3JtYXQgZm9yIGJ5dGVhcnJheXMgd2l0aAorICBwaWNrbGUgcHJvdG9jb2wgPj0gMy4gIFRoZSBvbGQgcmVkdWN0aW9uIGZvcm1hdCBpcyBrZXB0IHdpdGggb2xkZXIgcHJvdG9jb2xzCisgIGluIG9yZGVyIHRvIGFsbG93IHVucGlja2xpbmcgdW5kZXIgUHl0aG9uIDIuICBQYXRjaCBieSBJcm1lbiBkZSBKb25nLgorCistIElzc3VlICM3MTExOiBQeXRob24gY2FuIG5vdyBiZSBydW4gd2l0aG91dCBhIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyCisgIHN0cmVhbS4gIEl0IHdhcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggUHl0aG9uIDIuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZworICBzeXMgbW9kdWxlIGVudHJpZXMgYXJlIG5vdyBzZXQgdG8gTm9uZSAoaW5zdGVhZCBvZiBhbiB1bnVzYWJsZSBmaWxlIG9iamVjdCkuCisKKy0gSXNzdWUgIzExODQ5OiBFbnN1cmUgdGhhdCBmcmVlKClkIG1lbW9yeSBhcmVuYXMgYXJlIHJlYWxseSByZWxlYXNlZAorICBvbiBQT1NJWCBzeXN0ZW1zIHN1cHBvcnRpbmcgYW5vbnltb3VzIG1lbW9yeSBtYXBwaW5ncy4gIFBhdGNoIGJ5CisgIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTM0NTI6IFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsKCkgZG9lc24ndCBzdXBwb3J0IGVycm9yIGhhbmRsZXJzCisgIGRpZmZlcmVudCB0aGFuICJzdHJpY3QiIGFueW1vcmUuIFRoZSBjYWxsZXIgd2FzIHVuYWJsZSB0byBjb21wdXRlIHRoZQorICBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyOiBpdCBkZXBlbmRzIG9uIHRoZSBlcnJvciBoYW5kbGVyLgorCistIFBFUCAzMTU1IC8gaXNzdWUgIzEzNDQ4OiBRdWFsaWZpZWQgbmFtZSBmb3IgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgorCistIElzc3VlICMxMzQzNjogRml4IGEgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIGFuIEFTVCBvYmplY3Qgd2FzIHBhc3NlZAorICBhbiBpbnZhbGlkIGludGVnZXIgdmFsdWUuCisKKy0gSXNzdWUgIzEzNDExOiBtZW1vcnl2aWV3IG9iamVjdHMgYXJlIG5vdyBoYXNoYWJsZSB3aGVuIHRoZSB1bmRlcmx5aW5nCisgIG9iamVjdCBpcyBoYXNoYWJsZS4KKworLSBJc3N1ZSAjMTMzMzg6IEhhbmRsZSBhbGwgZW51bWVyYXRpb25zIGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIKKyAgdG8gYWxsb3cgY29tcGlsaW5nIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggLVdzd2l0Y2gtZW51bSBvbiBnY2MuCisgIEluaXRpYWwgcGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzEwMjI3OiBBZGQgYW4gYWxsb2NhdGlvbiBjYWNoZSBmb3IgYSBzaW5nbGUgc2xpY2Ugb2JqZWN0LiAgUGF0Y2ggYnkKKyAgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTMzOTM6IEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKCkgbm93IGFza3MgdGhlIGZ1bGwgcmVxdWVzdGVkIHNpemUgdG8KKyAgdGhlIHJhdyBzdHJlYW0gaW5zdGVhZCBvZiBsaW1pdGluZyBpdHNlbGYgdG8gdGhlIGJ1ZmZlciBzaXplLgorCistIElzc3VlICMxMzM5MjogV3JpdGluZyBhIHB5YyBmaWxlIHNob3VsZCBub3cgYmUgYXRvbWljIHVuZGVyIFdpbmRvd3MgYXMgd2VsbC4KKworLSBJc3N1ZSAjMTMzMzM6IFRoZSBVVEYtNyBkZWNvZGVyIG5vdyBhY2NlcHRzIGxvbmUgc3Vycm9nYXRlcyAodGhlIGVuY29kZXIKKyAgYWxyZWFkeSBhY2NlcHRzIHRoZW0pLgorCistIElzc3VlICMxMzM4OTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzIG5vdyBjbGVhciB0aGUgZnJlZWxpc3RzIGZvcgorICBsaXN0IGFuZCBkaWN0IG9iamVjdHMuICBUaGV5IGFscmVhZHkgY2xlYXJlZCBvdGhlciBmcmVlbGlzdHMgaW4gdGhlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMxMzMyNzogUmVtb3ZlIHRoZSBuZWVkIGZvciBhbiBleHBsaWNpdCBOb25lIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQKKyAgdG8gb3MudXRpbWUsIG9zLmx1dGltZXMsIG9zLmZ1dGltZXMsIG9zLmZ1dGltZW5zLCBvcy5mdXRpbWVzYXQsIGluCisgIG9yZGVyIHRvIHVwZGF0ZSB0byB0aGUgY3VycmVudCB0aW1lLiBBbHNvIGFkZGVkIGtleXdvcmQgYXJndW1lbnQKKyAgaGFuZGxpbmcgdG8gb3MudXRpbWVuc2F0IGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgZXhwbGljaXQgTm9uZS4KKworLSBJc3N1ZSAjMTMzNTA6IFNpbXBsaWZ5IHNvbWUgQyBjb2RlIGJ5IHJlcGxhY2luZyBtb3N0IHVzYWdlcyBvZgorICBQeVVuaWNvZGVfRm9ybWF0IGJ5IFB5VW5pY29kZV9Gcm9tRm9ybWF0LgorCistIElzc3VlICMxMzM0MjogaW5wdXQoKSB1c2VkIHRvIGlnbm9yZSBzeXMuc3RkaW4ncyBhbmQgc3lzLnN0ZG91dCdzIHVuaWNvZGUKKyAgZXJyb3IgaGFuZGxlciBpbiBpbnRlcmFjdGl2ZSBtb2RlICh3aGVuIGNhbGxpbmcgaW50byBQeU9TX1JlYWRsaW5lKCkpLgorCistIElzc3VlICM5ODk2OiBBZGQgc3RhcnQsIHN0b3AsIGFuZCBzdGVwIGF0dHJpYnV0ZXMgdG8gcmFuZ2Ugb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNDM6IEZpeCBhIFN5c3RlbUVycm9yIHdoZW4gYSBsYW1iZGEgZXhwcmVzc2lvbiB1c2VzIGEgZ2xvYmFsCisgIHZhcmlhYmxlIGluIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50OiBgYGxhbWJkYSAqLAorICBhcmc9R0xPQkFMX05BTUU6IE5vbmVgYAorCistIElzc3VlICMxMjc5NzogQWRkZWQgY3VzdG9tIG9wZW5lciBwYXJhbWV0ZXIgdG8gYnVpbHRpbiBvcGVuKCkgYW5kCisgIEZpbGVJTy5vcGVuKCkuCisKKy0gSXNzdWUgIzEwNTE5OiBBdm9pZCB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgaW4KKyAgc2V0b2JqZWN0LmMuCisKKy0gSXNzdWUgIzEwMzYzOiBEZWFsbG9jYXRlIGdsb2JhbCBsb2NrcyBpbiBQeV9GaW5hbGl6ZSgpLgorCistIElzc3VlICMxMzAxODogRml4IHJlZmVyZW5jZSBsZWFrcyBpbiBlcnJvciBwYXRocyBpbiBkaWN0b2JqZWN0LmMuCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjAxOiBEZWZpbmUgJz09JyBhbmQgJyE9JyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHMgYmFzZWQgb24KKyAgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmcgYmFzZWQgb24KKyAgb2JqZWN0IGlkZW50aXR5KS4KKworLSBJc3N1ZSAjMTI5NDIzMjogSW4gYSBmZXcgY2FzZXMgaW52b2x2aW5nIG1ldGFjbGFzcyBpbmhlcml0YW5jZSwgdGhlCisgIGludGVycHJldGVyIHdvdWxkIHNvbWV0aW1lcyBpbnZva2UgdGhlIHdyb25nIG1ldGFjbGFzcyB3aGVuIGJ1aWxkaW5nIGEgbmV3CisgIGNsYXNzIG9iamVjdC4gVGhlc2UgY2FzZXMgbm93IGJlaGF2ZSBjb3JyZWN0bHkuIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjMTI3NTM6IEFkZCBzdXBwb3J0IGZvciBVbmljb2RlIG5hbWUgYWxpYXNlcyBhbmQgbmFtZWQgc2VxdWVuY2VzLgorICBCb3RoIGBgdW5pY29kZWRhdGEubG9va3VwKClgYCBhbmQgJ1xOey4uLn0nIG5vdyByZXNvbHZlIGFsaWFzZXMsCisgIGFuZCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgcmVzb2x2ZXMgbmFtZWQgc2VxdWVuY2VzIHRvby4KKworLSBJc3N1ZSAjMTIxNzA6IFRoZSBjb3VudCgpLCBmaW5kKCksIHJmaW5kKCksIGluZGV4KCkgYW5kIHJpbmRleCgpIG1ldGhvZHMKKyAgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIG5vdyBhY2NlcHQgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NQorICBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjYwNDogVlRSQUNFIG1hY3JvIGV4cGFuZGVkIHRvIG5vLW9wIGluIF9zcmUuYyB0byBhdm9pZCBjb21waWxlcgorICB3YXJuaW5ncy4gUGF0Y2ggYnkgSm9zaCBUcmlwbGV0dCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEyMjgxOiBSZXdyaXRlIHRoZSBNQkNTIGNvZGVjIHRvIGhhbmRsZSBjb3JyZWN0bHkgcmVwbGFjZSBhbmQgaWdub3JlCisgIGVycm9yIGhhbmRsZXJzIG9uIGFsbCBXaW5kb3dzIHZlcnNpb25zLiBUaGUgTUJDUyBjb2RlYyBpcyBub3cgc3VwcG9ydGluZyBhbGwKKyAgZXJyb3IgaGFuZGxlcnMsIGluc3RlYWQgb2Ygb25seSByZXBsYWNlIHRvIGVuY29kZSBhbmQgaWdub3JlIHRvIGRlY29kZS4KKworLSBJc3N1ZSAjMTMxODg6IFdoZW4gY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgdHJhY2ViYWNrIGFyZ3VtZW50LAorICBnZW5lcmF0b3IudGhyb3coKSBub3cgZ2V0cyB0aGUgdHJhY2ViYWNrIGZyb20gdGhlIHBhc3NlZCBleGNlcHRpb24ncworICBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMxNDY6IFdyaXRpbmcgYSBweWMgZmlsZSBpcyBub3cgYXRvbWljIHVuZGVyIFBPU0lYLgorCistIElzc3VlICM3ODMzOiBFeHRlbnNpb24gbW9kdWxlcyBidWlsdCB1c2luZyBkaXN0dXRpbHMgb24gV2luZG93cyB3aWxsIG5vCisgIGxvbmdlciBpbmNsdWRlIGEgIm1hbmlmZXN0IiB0byBwcmV2ZW50IHRoZW0gZmFpbGluZyBhdCBpbXBvcnQgdGltZSBpbiBzb21lCisgIGVtYmVkZGVkIHNpdHVhdGlvbnMuCisKKy0gUEVQIDMxNTEgLyBpc3N1ZSAjMTI1NTU6IHJld29ya2luZyB0aGUgT1MgYW5kIElPIGV4Y2VwdGlvbiBoaWVyYXJjaHkuCisKKy0gSXNzdWUgIzEzNTYwOiBBZGQgUHlVbmljb2RlX0RlY29kZUxvY2FsZSgpLCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlQW5kU2l6ZSgpCisgIGFuZCBQeVVuaWNvZGVfRW5jb2RlTG9jYWxlKCkgZnVuY3Rpb25zIHRvIHRoZSBDIEFQSSB0byBkZWNvZGUvZW5jb2RlIGZyb20vdG8KKyAgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLgorCistIEFkZCBpbnRlcm5hbCBBUEkgZm9yIHN0YXRpYyBzdHJpbmdzIChfUHlfaWRlbnRpZmllciBldCBhbC4pLgorCistIElzc3VlICMxMzA2MzogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfTk9fREFUQSAobnVtYmVyZWQgMjMyIGFuZCBkZXNjcmliZWQKKyAgYXMgIlRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZCIpIGlzIG5vdyBtYXBwZWQgdG8gUE9TSVggZXJybm8gRVBJUEUKKyAgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjMTI5MTE6IEZpeCBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBjYWxjdWxhdGluZyB0aGUgcmVwcigpIG9mIGh1Z2UKKyAgdHVwbGVzIG9yIGxpc3RzLgorCistIFBFUCAzOTM6IGZsZXhpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhhbmtzIHRvIFRvcnN0ZW4gQmVja2VyIGZvciB0aGUKKyAgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIFZpY3RvciBTdGlubmVyIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworLSBJc3N1ZSAjMTQwODE6IFRoZSAnc2VwJyBhbmQgJ21heHNwbGl0JyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0LCBieXRlcy5zcGxpdCwKKyAgYW5kIGJ5dGVhcnJheS5zcGxpdCBtYXkgbm93IGJlIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTMwMTI6IFRoZSAna2VlcGVuZHMnIHBhcmFtZXRlciB0byBzdHIuc3BsaXRsaW5lcyBtYXkgbm93IGJlIHBhc3NlZAorICBhcyBhIGtleXdvcmQgYXJndW1lbnQ6ICAibXlfc3RyaW5nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkiLiAgVGhlIHNhbWUKKyAgY2hhbmdlIGFsc28gYXBwbGllcyB0byBieXRlcy5zcGxpdGxpbmVzIGFuZCBieXRlYXJyYXkuc3BsaXRsaW5lcy4KKworLSBJc3N1ZSAjNzczMjogRG9uJ3Qgb3BlbiBhIGRpcmVjdG9yeSBhcyBhIGZpbGUgYW55bW9yZSB3aGlsZSBpbXBvcnRpbmcgYQorICBtb2R1bGUuIElnbm9yZSB0aGUgZGlyZWNvdHJ5IGlmIGl0cyBuYW1lIG1hdGNocyB0aGUgbW9kdWxlIG5hbWUgKGUuZy4KKyAgIl9faW5pdF9fLnB5IikgYW5kIHJhaXNlIGEgSW1wb3J0RXJyb3IgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTMwMjE6IE1pc3NpbmcgZGVjcmVmIG9uIGFuIGVycm9yIHBhdGguICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IKKyAgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTI5NzM6IEZpeCBvdmVyZmxvdyBjaGVja3MgdGhhdCByZWxpZWQgb24gdW5kZWZpbmVkIGJlaGF2aW91ciBpbgorICBsaXN0X3JlcGVhdCAobGlzdG9iamVjdC5jKSBhbmQgaXNsaWNlX25leHQgKGl0ZXJ0b29sc21vZHVsZS5jKS4gIFRoZXNlIGJ1Z3MKKyAgY2F1c2VkIHRlc3QgZmFpbHVyZXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgQ2xhbmcuCisKKy0gSXNzdWUgIzEyOTA0OiBvcy51dGltZSwgb3MuZnV0aW1lcywgb3MubHV0aW1lcywgYW5kIG9zLmZ1dGltZXNhdCBub3cgd3JpdGUKKyAgYXRpbWUgYW5kIG10aW1lIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gb24gbW9kZXJuIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MDI6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX0RJUkVDVE9SWSAobnVtYmVyZWQgMjY3KSBpcyBub3cKKyAgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVOT1RESVIgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjOTIwMDogVGhlIHN0ci5pcyogbWV0aG9kcyBub3cgd29yayB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIG5vbi1CTVAKKyAgY2hhcmFjdGVycyBldmVuIGluIG5hcnJvdyBVbmljb2RlIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTI3OTE6IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgZWFybHkgd2hlbiBhIGdlbmVyYXRvciBleGl0cyB3aXRoCisgIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTI3NzM6IE1ha2UgX19kb2NfXyBtdXRhYmxlIG9uIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICMxMjc2NjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gY3JlYXRpbmcgYSBjbGFzcyB3aXRoIGEgY2xhc3MgdmFyaWFibGUKKyAgdGhhdCBjb25mbGljdHMgd2l0aCBhIG5hbWUgaW4gX19zbG90c19fLgorCistIElzc3VlICMxMjI2NjogRml4IHN0ci5jYXBpdGFsaXplKCkgdG8gY29ycmVjdGx5IHVwcGVyY2FzZS9sb3dlcmNhc2UKKyAgdGl0bGVjYXNlZCBhbmQgY2FzZWQgbm9uLWxldHRlciBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjczMjogSW4gbmFycm93IHVuaWNvZGUgYnVpbGRzLCBhbGxvdyBVbmljb2RlIGlkZW50aWZpZXJzIHdoaWNoIGZhbGwKKyAgb3V0c2lkZSB0aGUgQk1QLgorCistIElzc3VlICMxMjU3NTogVmFsaWRhdGUgdXNlci1nZW5lcmF0ZWQgQVNUIGJlZm9yZSBpdCBpcyBjb21waWxlZC4KKworLSBNYWtlIHR5cGUoTm9uZSksIHR5cGUoRWxsaXBzaXMpLCBhbmQgdHlwZShOb3RJbXBsZW1lbnRlZCkgY2FsbGFibGUuIFRoZXkKKyAgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCisKKy0gRm9yYmlkIHN1bW1pbmcgYnl0ZXMgd2l0aCBzdW0oKS4KKworLSBWZXJpZnkgdGhlIHR5cGVzIG9mIEFTVCBzdHJpbmdzIGFuZCBpZGVudGlmaWVycyBwcm92aWRlZCBieSB0aGUgdXNlciBiZWZvcmUKKyAgY29tcGlsaW5nIHRoZW0uCisKKy0gSXNzdWUgIzEyNjQ3OiBUaGUgTm9uZSBvYmplY3Qgbm93IGhhcyBhIF9fYm9vbF9fKCkgbWV0aG9kIHRoYXQgcmV0dXJucyBGYWxzZS4KKyAgRm9ybWVybHksIGJvb2woTm9uZSkgcmV0dXJuZWQgRmFsc2Ugb25seSBiZWNhdXNlIG9mIHNwZWNpYWwgY2FzZSBsb2dpYworICBpbiBQeU9iamVjdF9Jc1RydWUoKS4KKworLSBJc3N1ZSAjMTI1Nzk6IHN0ci5mb3JtYXRfbWFwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdXNlZCBvbiBhCisgIGZvcm1hdCBzdHJpbmcgdGhhdCBjb250YWlucyBwb3NpdGlvbmFsIGZpZWxkcy4gSW5pdGlhbCBwYXRjaCBieQorICBKdWxpYW4gQmVybWFuLgorCistIElzc3VlICMxMDI3MTogQWxsb3cgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBiZSBhbnkgY2FsbGFibGUuCisKKy0gSXNzdWUgIzExNjI3OiBGaXggc2VnZmF1bHQgd2hlbiBfX25ld19fIG9uIGEgZXhjZXB0aW9uIHJldHVybnMgYQorICBub24tZXhjZXB0aW9uIGNsYXNzLgorCistIElzc3VlICMxMjE0OTogVXBkYXRlIHRoZSBtZXRob2QgY2FjaGUgYWZ0ZXIgYSB0eXBlJ3MgZGljdGlvbmFyeSBnZXRzCisgIGNsZWFyZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBmaXhlcyBhIHNlZ2ZhdWx0IHdoZW4gYW4gaW5zdGFuY2UKKyAgYW5kIGl0cyB0eXBlIGdldCBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUsIGFuZCB0aGUgaW5zdGFuY2UncworICBkZWFsbG9jYXRvciBjYWxscyBvbmUgb2YgdGhlIG1ldGhvZHMgb24gdGhlIHR5cGUgKGUuZy4gd2hlbiBzdWJjbGFzc2luZworICBJT0Jhc2UpLiAgRGlhZ25vc2lzIGFuZCBwYXRjaCBieSBEYXZpZGUgUml6em8uCisKKy0gSXNzdWUgIzk2MTEsICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KKworLSBJc3N1ZSAjOTY0MjogVW5pZm9ybWl6ZSB0aGUgdGVzdHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWJjcyBjb2RlYywgYWRkCisgIGEgbmV3IEhBVkVfTUJDUyBkZWZpbmUuCisKKy0gSXNzdWUgIzk2NDI6IEZpeCBmaWxlc3lzdGVtIGVuY29kaW5nIGluaXRpYWxpemF0aW9uOiB1c2UgdGhlIEFOU0kgY29kZSBwYWdlCisgIG9uIFdpbmRvd3MgaWYgdGhlIG1iY3MgY29kZWMgaXMgbm90IGF2YWlsYWJsZSwgYW5kIGZhaWwgd2l0aCBhIGZhdGFsIGVycm9yIGlmCisgIHdlIGNhbm5vdCBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZyAoaWYgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm90IGF2YWlsYWJsZSkKKyAgaW5zdGVhZCBvZiB1c2luZyBVVEYtOC4KKworLSBXaGVuIGEgZ2VuZXJhdG9yIHlpZWxkcywgZG8gbm90IHJldGFpbiB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIG9uIHRoZQorICBnZW5lcmF0b3IuCisKKy0gSXNzdWUgIzEyNDc1OiBQcmV2ZW50IGdlbmVyYXRvcnMgZnJvbSBsZWFraW5nIHRoZWlyIGV4Y2VwdGlvbiBzdGF0ZSBpbnRvIHRoZQorICBjYWxsZXIncyBmcmFtZSBhcyB0aGV5IHJldHVybiBmb3IgdGhlIGxhc3QgdGltZS4KKworLSBJc3N1ZSAjMTIyOTE6IFlvdSBjYW4gbm93IGxvYWQgbXVsdGlwbGUgbWFyc2hhbGxlZCBvYmplY3RzIGZyb20gYSBzdHJlYW0sCisgIHdpdGggb3RoZXIgZGF0YSBpbnRlcmxlYXZlZCBiZXR3ZWVuIG1hcnNoYWxsZWQgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTIzNTY6IFdoZW4gcmVxdWlyZWQgcG9zaXRpb25hbCBvciBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIGFyZSBub3QKKyAgZ2l2ZW4sIHByb2R1Y2UgYSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIHdoaWNoIGluY2x1ZGVzIHRoZSBuYW1lKHMpIG9mIHRoZQorICBtaXNzaW5nIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTIzNzA6IEZpeCBzdXBlciB3aXRoIG5vIGFyZ3VtZW50cyB3aGVuIF9fY2xhc3NfXyBpcyBvdmVycmlkZW4gaW4gdGhlCisgIGNsYXNzIGJvZHkuCisKKy0gSXNzdWUgIzEyMDg0OiBvcy5zdGF0IG9uIFdpbmRvd3Mgbm93IHdvcmtzIHByb3Blcmx5IHdpdGggcmVsYXRpdmUgc3ltYm9saWMKKyAgbGlua3Mgd2hlbiBjYWxsZWQgZnJvbSBhbnkgZGlyZWN0b3J5LgorCistIExvb3NlbiB0eXBlIHJlc3RyaWN0aW9ucyBvbiB0aGUgX19kaXJfXyBtZXRob2QuIF9fZGlyX18gY2FuIG5vdyByZXR1cm4gYW55CisgIHNlcXVlbmNlLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGxpc3QgYW5kIHNvcnRlZCBieSBkaXIoKS4KKworLSBJc3N1ZSAjMTIyNjU6IE1ha2UgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQgYnkgcGFzc2luZyBhbiBpbnZhbGlkIHNldCBvZgorICBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBtb3JlIGluZm9ybWF0aXZlLgorCistIElzc3VlICMxMjIyNTogU3RpbGwgYWxsb3cgUHl0aG9uIHRvIGJ1aWxkIGlmIFB5dGhvbiBpcyBub3QgaW4gaXRzIGhnIHJlcG8gb3IKKyAgbWVyY3VyaWFsIGlzIG5vdCBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzExOTU6IG15X2ZnZXRzKCkgbm93IGFsd2F5cyBjbGVhcnMgZXJyb3JzIGJlZm9yZSBjYWxsaW5nIGZnZXRzKCkuIEZpeAorICB0aGUgZm9sbG93aW5nIGNhc2U6IHN5cy5zdGRpbi5yZWFkKCkgc3RvcHBlZCB3aXRoIENUUkwrZCAoZW5kIG9mIGZpbGUpLAorICByYXdfaW5wdXQoKSBpbnRlcnJ1cHRlZCBieSBDVFJMK2MuCisKKy0gSXNzdWUgIzEyMjE2OiBBbGxvdyB1bmV4cGVjdGVkIEVPRiBlcnJvcnMgdG8gaGFwcGVuIG9uIGFueSBsaW5lIG9mIHRoZSBmaWxlLgorCistIElzc3VlICMxMjE5OTogVGhlIFRyeUV4Y2VwdCBhbmQgVHJ5RmluYWxseSBhbmQgQVNUIG5vZGVzIGhhdmUgYmVlbiB1bmlmaWVkCisgIGludG8gYSBUcnkgbm9kZS4KKworLSBJc3N1ZSAjOTY3MDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggYW5kIEZyZWVCU0QgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGEgY3Jhc2ggaW5zdGVhZCBvZiBhCisgICJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCIgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4KKyAgKHBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIxMDY6IFRoZSB1c2Ugb2YgdGhlIG11bHRpcGxlLXdpdGggc2hvcnRoYW5kIHN5bnRheCBpcyBub3cgcmVmbGVjdGVkCisgIGluIHRoZSBBU1QuCisKKy0gSXNzdWUgIzEyMTkwOiBUcnkgdG8gdXNlIHRoZSBzYW1lIGZpbGVuYW1lIG9iamVjdCB3aGVuIGNvbXBpbGluZyB1bm1hcnNoYWxsaW5nCisgIGEgY29kZSBvYmplY3RzIGluIHRoZSBzYW1lIGZpbGUuCisKKy0gSXNzdWUgIzEyMTY2OiBNb3ZlIGltcGxlbWVudGF0aW9ucyBvZiBkaXIoKSBzcGVjaWFsaXplZCBmb3IgdmFyaW91cyB0eXBlcyBpbnRvCisgIHRoZSBfX2Rpcl9fKCkgbWV0aG9kcyBvZiB0aG9zZSB0eXBlcy4KKworLSBJc3N1ZSAjNTcxNTogSW4gc29ja2V0c2VydmVyLCBjbG9zZSB0aGUgc2VydmVyIHNvY2tldCBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBDb3JyZWN0IGxvb2t1cCBvZiBfX2Rpcl9fIG9uIG9iamVjdHMuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYXVzZXMgZXJyb3JzCisgIGJlc2lkZXMgQXR0cmlidXRlRXJyb3IgZm91bmQgb24gbG9va3VwIHRvIGJlIHByb3BhZ2F0ZWQuCisKKy0gSXNzdWUgIzEyMDYwOiBVc2Ugc2lnX2F0b21pY190IHR5cGUgYW5kIHZvbGF0aWxlIGtleXdvcmQgaW4gdGhlIHNpZ25hbAorICBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNzQ2NjU2OiBBZGRlZCB0aGUgaWZfbmFtZWluZGV4LCBpZl9pbmRleHRvbmFtZSwgaWZfbmFtZXRvaW5kZXgKKyAgbWV0aG9kcyB0byB0aGUgc29ja2V0IG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNDQ6IEZpeGVkIHN1YnByb2Nlc3MuUG9wZW4gd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIHRvCisgIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGVuZCB3aGVuIGV4aXRpbmcgdGhlIGNvbnRleHQgdG8gYXZvaWQgdW5pbnRlbnRpb25hbGx5CisgIGxlYXZpbmcgem9tYmllIHByb2Nlc3NlcyBhcm91bmQuCisKKy0gSXNzdWUgIzExOTU6IEZpeCBpbnB1dCgpIGlmIGl0IGlzIGludGVycnVwdGVkIGJ5IENUUkwrZCBhbmQgdGhlbiBDVFJMK2MsCisgIGNsZWFyIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgYWZ0ZXIgQ1RSTCtkLgorCistIElzc3VlICMxODU2OiBBdm9pZCBjcmFzaGVzIGFuZCBsb2NrdXBzIHdoZW4gZGFlbW9uIHRocmVhZHMgcnVuIHdoaWxlIHRoZQorICBpbnRlcnByZXRlciBpcyBzaHV0dGluZyBkb3duOyBpbnN0ZWFkLCB0aGVzZSB0aHJlYWRzIGFyZSBub3cga2lsbGVkIHdoZW4KKyAgdGhleSB0cnkgdG8gdGFrZSB0aGUgR0lMLgorCistIElzc3VlICM5NzU2OiBXaGVuIGNhbGxpbmcgYSBtZXRob2QgZGVzY3JpcHRvciBvciBhIHNsb3Qgd3JhcHBlciBkZXNjcmlwdG9yLAorICB0aGUgY2hlY2sgb2YgdGhlIG9iamVjdCB0eXBlIGRvZXNuJ3QgcmVhZCB0aGUgX19jbGFzc19fIGF0dHJpYnV0ZSBhbnltb3JlLgorICBGaXggYSBjcmFzaCBpZiBhIGNsYXNzIG92ZXJyaWRlIGl0cyBfX2NsYXNzX18gYXR0cmlidXRlIChlLmcuIGEgcHJveHkgb2YgdGhlCisgIHN0ciB0eXBlKS4gUGF0Y2ggd3JpdHRlbiBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzEwNTE3OiBBZnRlciBmb3JrKCksIHJlaW5pdGlhbGl6ZSB0aGUgVExTIHVzZWQgYnkgdGhlIFB5R0lMU3RhdGVfKgorICBBUElzLCB0byBhdm9pZCBhIGNyYXNoIHdpdGggdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gaW4gUkhFTCA1LiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogSW5pdGlhbGl6ZSBjb3JyZWN0bHkgdGhlIGZpbGVzeXN0ZW0gY29kZWMgd2hlbiBjcmVhdGluZyBhIG5ldworICBzdWJpbnRlcnByZXRlciB0byBmaXggYSBib290c3RyYXAgaXNzdWUgd2l0aCBjb2RlY3MgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLCBhcworICB0aGUgSVNPLTg4NTktMTUgY29kZWMuCisKKy0gSXNzdWUgIzExOTE4OiBPUy8yIGFuZCBWTVMgYXJlIG5vIG1vcmUgc3VwcG9ydGVkIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YKKyAgbWFpbnRhaW5lci4KKworLSBJc3N1ZSAjNjc4MDogZml4IHN0YXJ0cy9lbmRzd2l0aCBlcnJvciBtZXNzYWdlIHRvIG1lbnRpb24gdGhhdCB0dXBsZXMgYXJlCisgIGFjY2VwdGVkIHRvby4KKworLSBJc3N1ZSAjNTA1NzogZml4IGEgYnVnIGluIHRoZSBwZWVwaG9sZXIgdGhhdCBsZWQgdG8gbm9uLXBvcnRhYmxlIHB5YyBmaWxlcworICBiZXR3ZWVuIG5hcnJvdyBhbmQgd2lkZSBidWlsZHMgd2hpbGUgb3B0aW1pemluZyBCSU5BUllfU1VCU0NSIG9uIG5vbi1CTVAKKyAgY2hhcnMgKGUuZy4gIlxVMDAwMTIzNDUiWzBdKS4KKworLSBJc3N1ZSAjMTE4NDU6IEZpeCB0eXBvIGluIHJhbmdlb2JqZWN0LmMgdGhhdCBjYXVzZWQgYSBjcmFzaCBpbgorICBjb21wdXRlX3NsaWNlX2luZGljZXMuICBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzU2NzM6IEFkZGVkIGEgYHRpbWVvdXRgIGtleXdvcmQgYXJndW1lbnQgdG8gc3VicHJvY2Vzcy5Qb3Blbi53YWl0LAorICBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlZCwgc3VicHJvY2Vzcy5jYWxsLCBzdWJwcm9jZXNzLmNoZWNrX2NhbGwsIGFuZAorICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dC4gIElmIHRoZSBibG9ja2luZyBvcGVyYXRpb24gdGFrZXMgbW9yZSB0aGFuIGB0aW1lb3V0YAorICBzZWNvbmRzLCB0aGUgYHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKy0gSXNzdWUgIzExNjUwOiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSByZXRyaWVzIGZnZXRzKCkgaWYgaXQgd2FzIGludGVycnVwdGVkCisgIChFSU5UUiksIGZvciBleGFtcGxlIGlmIHRoZSBwcm9ncmFtIGlzIHN0b3BwZWQgd2l0aCBDVFJMK3ogb24gTWFjIE9TIFguIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzkzMTk6IEluY2x1ZGUgdGhlIGZpbGVuYW1lIGluICJOb24tVVRGOCBjb2RlIC4uLiIgc3ludGF4IGVycm9yLgorCistIElzc3VlICMxMDc4NTogU3RvcmUgdGhlIGZpbGVuYW1lIGFzIFVuaWNvZGUgaW4gdGhlIFB5dGhvbiBwYXJzZXIuCisKKy0gSXNzdWUgIzExNjE5OiBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUoKSBkb2Vzbid0IGVuY29kZSB0aGUgcGF0aCB0byBieXRlcworICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDk5ODogUmVtb3ZlIG1lbnRpb25zIG9mIC1RLCBzeXMuZmxhZ3MuZGl2aXNpb25fd2FybmluZyBhbmQKKyAgUHlfRGl2aXNpb25XYXJuaW5nRmxhZyBsZWZ0IG92ZXIgZnJvbSBQeXRob24gMi4KKworLSBJc3N1ZSAjMTEyNDQ6IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBwZWVwaG9sZXIgY2hlY2sgdGhhdCB3YXMgcHJldmVudGluZworICBuZWdhdGl2ZSB6ZXJvcyBmcm9tIGJlaW5nIGNvbnN0YW50LWZvbGRlZCBwcm9wZXJseS4KKworLSBJc3N1ZSAjMTEzOTU6IGlvLkZpbGVJTygpLndyaXRlKCkgY2xhbXBzIHRoZSBkYXRhIGxlbmd0aCB0byAzMiw3NjcgYnl0ZXMgb24KKyAgV2luZG93cyBpZiB0aGUgZmlsZSBpcyBhIFRUWSB0byB3b3JrYXJvdW5kIGEgV2luZG93cyBidWcuIFRoZSBXaW5kb3dzIGNvbnNvbGUKKyAgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdCBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYKKyAgc3Rkb3V0IG1vZGUgaXMgYmluYXJ5IGFuZCB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NiwwMDAgYnl0ZXMgKG9yIGxlc3MsCisgIGRlcGVuZGluZyBvbiBoZWFwIHVzYWdlKS4KKworLSBJc3N1ZSAjMTEzMjA6IGZpeCBib2d1cyBtZW1vcnkgbWFuYWdlbWVudCBpbiBNb2R1bGVzL2dldHBhdGguYywgbGVhZGluZyB0bworICBhIHBvc3NpYmxlIGNyYXNoIHdoZW4gY2FsbGluZyBQeV9TZXRQYXRoKCkuCisKKy0gSXNzdWUgIzExNDMyOiBBIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiBzdWJwcm9jZXNzLlBvcGVuIG9uIHBvc2l4IHN5c3RlbXMgd2l0aAorICAzLjIuMCB3aGVyZSB0aGUgc3Rkb3V0IG9yIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IgYmVpbmcgdGhlIHNhbWUgYXMgdGhlIHN0ZGluCisgIGZpbGUgZGVzY3JpcHRvciB3b3VsZCByYWlzZSBhbiBleGNlcHRpb24uIHdlYmJyb3dzZXIub3BlbiB3b3VsZCBmYWlsLiBmaXhlZC4KKworLSBJc3N1ZSAjOTg1NjogQ2hhbmdlIG9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZworICB0byBiZSBhIERlcHJlY2F0aW9uV2FybmluZy4gSW4gMy4yIGl0IHdhcyBhIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcuCisgIEluIDMuNCBpdCB3aWxsIGJlIGEgVHlwZUVycm9yLgorCistIElzc3VlICMxMTI0NDogVGhlIHBlZXBob2xlIG9wdGltaXplciBpcyBub3cgYWJsZSB0byBjb25zdGFudC1mb2xkCisgIGFyYml0cmFyaWx5IGNvbXBsZXggZXhwcmVzc2lvbnMuICBUaGlzIGFsc28gZml4ZXMgYSAzLjIgcmVncmVzc2lvbiB3aGVyZQorICBvcGVyYXRpb25zIGludm9sdmluZyBuZWdhdGl2ZSBudW1iZXJzIHdlcmUgbm90IGNvbnN0YW50LWZvbGRlZC4KKworLSBJc3N1ZSAjMTE0NTA6IERvbid0IHRydW5jYXRlIGhnIHZlcnNpb24gaW5mbyBpbiBQeV9HZXRCdWlsZEluZm8oKSB3aGVuCisgIHRoZXJlIGFyZSBtYW55IHRhZ3MgKGUuZy4gd2hlbiB1c2luZyBtcSkuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzM1OiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIGxpc3Quc29ydCB3aGVuIHRoZSBrZXkgZnVuY3Rpb24KKyAgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjODkyMzogV2hlbiBhIHN0cmluZyBpcyBlbmNvZGVkIHRvIFVURi04IGluIHN0cmljdCBtb2RlLCB0aGUgcmVzdWx0IGlzCisgIGNhY2hlZCBpbnRvIHRoZSBvYmplY3QuIEV4YW1wbGVzOiBzdHIuZW5jb2RlKCksIHN0ci5lbmNvZGUoJ3V0Zi04JyksCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoKSBhbmQgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1bmljb2RlLCAidXRmLTgiLAorICBOVUxMKS4KKworLSBJc3N1ZSAjMTA4MzE6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgc3VwcG9ydHMgJWxpLCAlbGxpIGFuZCAlemkgZm9ybWF0cy4KKworLSBJc3N1ZSAjMTA4Mjk6IFJlZmFjdG9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCksIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiB0byBwYXJzZQorICB0aGUgZm9ybWF0IHN0cmluZyBpbiB0aGUgMyBzdGVwcywgZml4IGNyYXNocyBvbiBpbnZhbGlkIGZvcm1hdCBzdHJpbmdzLgorCistIElzc3VlICMxMzAwNzogd2hpY2hkYiBzaG91bGQgcmVjb2duaXplIGdkYm0gMS45IG1hZ2ljIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMjQ2OiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVWIikgdG8gZGVjb2RlIHRoZSBieXRlIHN0cmluZyBmcm9tCisgIFVURi04ICh3aXRoIHJlcGxhY2UgZXJyb3IgaGFuZGxlcikgaW5zdGVhZCBvZiBJU08tODg1OS0xIChpbiBzdHJpY3QgbW9kZSkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgUmF5IEFsbGVuLgorCistIElzc3VlICMxMTI4NjogUmFpc2UgYSBWYWx1ZUVycm9yIGZyb20gY2FsbGluZyBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlciB3aXRoCisgIGEgYnVmZmVyIHN0cnVjdCBoYXZpbmcgYSBOVUxMIGRhdGEgcG9pbnRlci4KKworLSBJc3N1ZSAjMTEyNzI6IE9uIFdpbmRvd3MsIGlucHV0KCkgc3RyaXBzICdccicgKGFuZCBub3Qgb25seSAnXG4nKSwgYW5kCisgIHN5cy5zdGRpbiB1c2VzIHVuaXZlcnNhbCBuZXdsaW5lIChyZXBsYWNlICdcclxuJyBieSAnXG4nKS4KKworLSBJc3N1ZSAjMTE4Mjg6IHN0YXJ0c3dpdGggYW5kIGVuZHN3aXRoIG5vdyBhY2NlcHQgTm9uZSBhcyBzbGljZSBpbmRleC4KKyAgUGF0Y2ggYnkgVG9yc3RlbiBCZWNrZXIuCisKKy0gSXNzdWUgIzEwODMwOiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCIlYyIpIGZvciBub24tQk1QIGNoYXJhY3RlcnMgb24KKyAgbmFycm93IGJ1aWxkLgorCistIElzc3VlICMxMTE2ODogUmVtb3ZlIGZpbGVuYW1lIGRlYnVnIHZhcmlhYmxlIGZyb20gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCisgIEl0IGVuY29kZWQgdGhlIFVuaWNvZGUgZmlsZW5hbWUgdG8gVVRGLTgsIGJ1dCB0aGUgZW5jb2RpbmcgZmFpbHMgb24KKyAgdW5kZWNvZGFibGUgZmlsZW5hbWUgKG9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzKSB3aGljaCByYWlzZXMgYW4gdW5leHBlY3RlZAorICBVbmljb2RlRW5jb2RlRXJyb3Igb24gcmVjdXJzaW9uIGxpbWl0LgorCistIElzc3VlICMxMTE4NzogUmVtb3ZlIGJvb3RzdHJhcCBjb2RlICh1c2UgQVNDSUkpIG9mCisgIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSwgaXQgd2FzIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIGZhbGxiYWNrICh1c2UgdGhlCisgIGxvY2FsZSBlbmNvZGluZykgaW4gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdCgpLgorCistIENoZWNrIGZvciBOVUxMIHJlc3VsdCBpbiBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzEwNTE2OiBOZXcgY29weSgpIGFuZCBjbGVhcigpIG1ldGhvZHMgZm9yIGxpc3RzIGFuZCBieXRlYXJyYXlzLgorCistIElzc3VlICMxMTM4NjogYnl0ZWFycmF5LnBvcCgpIG5vdyB0aHJvd3MgSW5kZXhFcnJvciB3aGVuIHRoZSBieXRlYXJyYXkgaXMKKyAgZW1wdHksIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTIzODA6IFRoZSByanVzdCwgbGp1c3QgYW5kIGNlbnRlciBtZXRob2RzIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkKKyAgbm93IGFjY2VwdCBhIGJ5dGVhcnJheSBhcmd1bWVudC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDE5NTogQW4gaXNzdWUgdGhhdCBjYXVzZWQgd2Vha3JlZi5XZWFrU2V0IGluc3RhbmNlcyB0byBpbmNvcnJlY3RseQorICByZXR1cm4gVHJ1ZSBmb3IgYSBXZWFrU2V0IGluc3RhbmNlICdhJyBpbiBib3RoICdhIDwgYScgYW5kICdhID4gYScgaGFzIGJlZW4KKyAgZml4ZWQuCisKKy0gSXNzdWUgIzE0MTY2OiBQaWNrbGVyIG9iamVjdHMgbm93IGhhdmUgYW4gb3B0aW9uYWwgYGBkaXNwYXRjaF90YWJsZWBgCisgIGF0dHJpYnV0ZSB3aGljaCBhbGxvd3MgdG8gc2V0IGN1c3RvbSBwZXItcGlja2xlciByZWR1Y3Rpb24gZnVuY3Rpb25zLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MTc3OiBtYXJzaGFsLmxvYWRzKCkgbm93IHJhaXNlcyBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiB1bmljb2RlCisgIHN0cmluZy4gIFBhdGNoIGJ5IEd1aWxoZXJtZSBHb27Dp2FsdmVzLgorCistIElzc3VlICMxMzU1MDogUmVtb3ZlIHRoZSBkZWJ1ZyBtYWNoaW5lcnkgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZTogcmVtb3ZlCisgIHZlcmJvc2UgYXJndW1lbnRzIGZyb20gYWxsIHRocmVhZGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE0MTU5OiBGaXggdGhlIGxlbigpIG9mIHdlYWsgY29udGFpbmVycyAoV2Vha1NldCwgV2Vha0tleURpY3Rpb25hcnksCisgIFdlYWtWYWx1ZURpY3Rpb25hcnkpIHRvIHJldHVybiBhIGJldHRlciBhcHByb3hpbWF0aW9uIHdoZW4gc29tZSBvYmplY3RzCisgIGFyZSBkZWFkIG9yIGR5aW5nLiAgTW9yZW92ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgTygxKSByYXRoZXIgdGhhbgorICBPKG4pLgorCistIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KKyAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgorCistIElzc3VlICMxMTg0MTogRml4IGNvbXBhcmlzb24gYnVnIHdpdGggJ3JjJyB2ZXJzaW9ucyBpbiBwYWNrYWdpbmcudmVyc2lvbi4KKyAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTM0NDc6IEFkZCBhIHRlc3QgZmlsZSB0byBob3N0IHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGJ1Z3MgaW4gdGhlCisgIHNjcmlwdHMgZm91bmQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjNjg4NDogRml4IGxvbmctc3RhbmRpbmcgYnVncyB3aXRoIE1BTklGRVNULmluIHBhcnNpbmcgaW4gZGlzdHV0aWxzCisgIG9uIFdpbmRvd3MuICBBbHNvIGZpeGVkIGluIHBhY2thZ2luZy4KKworLSBJc3N1ZSAjODAzMzogc3FsaXRlMzogRml4IDY0LWJpdCBpbnRlZ2VyIGhhbmRsaW5nIGluIHVzZXIgZnVuY3Rpb25zCisgIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBJbml0aWFsIHBhdGNoIGJ5IFBoaWxpcHBlIERldmFsa2VuZWVyLgorCistIEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIHNsYXNoZXMgaW4gdGhlIHN0YXJ0IHRhZy4KKworLSBJc3N1ZSAjMTM2NDE6IERlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZTY0IG1vZHVsZSBub3cgYWNjZXB0IEFTQ0lJLW9ubHkKKyAgdW5pY29kZSBzdHJpbmdzLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTQwNDM6IFNwZWVkIHVwIGltcG9ydGxpYidzIF9GaWxlRmluZGVyIGJ5IGF0IGxlYXN0IDh4LCBhbmQgYWRkIGEKKyAgbmV3IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGZ1bmN0aW9uLgorCistIElzc3VlICMxNDAwMTogQ1ZFLTIwMTItMDg0NTogeG1scnBjOiBGaXggYW4gZW5kbGVzcyBsb29wIGluCisgIFNpbXBsZVhNTFJQQ1NlcnZlciB1cG9uIG1hbGZvcm1lZCBQT1NUIHJlcXVlc3QuCisKKy0gSXNzdWUgIzEzOTYxOiBNb3ZlIGltcG9ydGxpYiBvdmVyIHRvIHVzaW5nIG9zLnJlcGxhY2UoKSBmb3IgYXRvbWljIHJlbmFtaW5nLgorCistIERvIGF3YXkgd2l0aCBhbWJpZ3VvdXMgbGV2ZWwgdmFsdWVzIChhcyBzdWdnZXN0ZWQgYnkgUEVQIDMyOCkgaW4KKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKSBieSByYWlzaW5nIFZhbHVlRXJyb3Igd2hlbiBsZXZlbCA8IDAuCisKKy0gSXNzdWUgIzI0ODk6IHB0eS5zcGF3biBjb3VsZCBjb25zdW1lIDEwMCUgY3B1IHdoZW4gaXQgZW5jb3VudGVyZWQgYW4gRU9GLgorCistIElzc3VlICMxMzAxNDogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCisKKy0gSXNzdWUgIzEzNzc3OiBBZGQgUEZfU1lTVEVNIHNvY2tldHMgb24gT1MgWC4KKyAgUGF0Y2ggYnkgTWljaGFlbCBHb2RlcmJhdWVyLgorCistIElzc3VlICMxMzAxNTogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gZGVmYXVsdGRpY3QuX19yZXByX18uCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjYxMTM6IGRpc3R1dGlscycgYW5kIHBhY2thZ2luZydzIGJ1aWxkX2V4dCBjb21tYW5kcyBvcHRpb24gbm93CisgIGNvcnJlY3RseSBwYXJzZXMgbXVsdGlwbGUgdmFsdWVzIChzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBvciBjb21tYXMpIGdpdmVuCisgIHRvIHRoZWlyIC0tbGlicmFyaWVzIG9wdGlvbi4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBmaXJzdCBiZWZvcmUKKyAgc2VuZGluZyBNT0RFIFJFQURFUiwgYW5kIG9ubHkgc2VuZHMgaXQgaWYgbm90IGFscmVhZHkgaW4gUkVBREVSIG1vZGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5OTM6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBlbmQgdGFncyB3aGVuCisgIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTM5MzA6IGxpYjJ0bzMgbm93IHN1cHBvcnRzIHdyaXRpbmcgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4KKworLSBJc3N1ZSAjOTc1MDogRml4IHNxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcCBvbiB0YWJsZXMgYW5kIGZpZWxkcworICB3aXRoIGEgbmFtZSB0aGF0IGlzIGEga2V5d29yZCBvciBjb250YWlucyBxdW90ZXMuIFBhdGNoIGJ5IE1hcmtvCisgIEtvaHRhbGEuCisKKy0gSXNzdWUgIzEwMjg3OiBubnRwbGliIG5vdyBxdWVyaWVzIHRoZSBzZXJ2ZXIncyBDQVBBQklMSVRJRVMgYWdhaW4gYWZ0ZXIKKyAgYXV0aGVudGljYXRpbmcgKHNpbmNlIHRoZSByZXN1bHQgbWF5IGNoYW5nZSwgYWNjb3JkaW5nIHRvIFJGQyA0NjQzKS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk4OTogRG9jdW1lbnQgdGhhdCBHemlwRmlsZSBkb2VzIG5vdCBzdXBwb3J0IHRleHQgbW9kZSwgYW5kIGdpdmUgYQorICBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIG9wZW5lZCB3aXRoIGFuIGludmFsaWQgbW9kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzNTkwOiBPbiBPUyBYIDEwLjcgYW5kIDEwLjYgd2l0aCBYY29kZSA0LjIsIGJ1aWxkaW5nCisgIERpc3R1dGlscy1iYXNlZCBwYWNrYWdlcyB3aXRoIEMgZXh0ZW5zaW9uIG1vZHVsZXMgbWF5IGZhaWwgYmVjYXVzZQorICBBcHBsZSBoYXMgcmVtb3ZlZCBnY2MtNC4yLCB0aGUgdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIHB5dGhvbi5vcmcKKyAgNjQtYml0LzMyLWJpdCBQeXRob25zLiAgSWYgdGhlIHVzZXIgZG9lcyBub3QgZXhwbGljaXRseSBvdmVycmlkZQorICB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGJ5IHNldHRpbmcgdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLAorICBEaXN0dXRpbHMgd2lsbCBub3cgYXR0ZW1wdCB0byBjb21waWxlIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggY2xhbmcKKyAgaWYgZ2NjLTQuMiBpcyByZXF1aXJlZCBidXQgbm90IGZvdW5kLiBBbHNvIGFzIGEgY29udmVuaWVuY2UsIGlmCisgIHRoZSB1c2VyIGRvZXMgZXhwbGljaXRseSBzZXQgQ0MsIHN1YnN0aXR1dGUgaXRzIHZhbHVlIGFzIHRoZSBkZWZhdWx0CisgIGNvbXBpbGVyIGluIHRoZSBEaXN0dXRpbHMgTERTSEFSRUQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgT1MgWC4KKyAgKE5vdGUsIHRoZSBweXRob24ub3JnIDMyLWJpdC1vbmx5IFB5dGhvbnMgdXNlIGdjYy00LjAgYW5kIHRoZSAxMC40dQorICBTREssIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiBYY29kZSA0LiAgVGhpcyBjaGFuZ2UgZG9lcyBub3QKKyAgYXR0ZW1wdCB0byBvdmVycmlkZSBzZXR0aW5ncyB0byBzdXBwb3J0IHRoZWlyIHVzZSB3aXRoIFhjb2RlIDQuKQorCistIElzc3VlICMxMzk2MDogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGNvbW1lbnRzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkyMTogVW5kb2N1bWVudCBhbmQgY2xlYW4gdXAgc3FsaXRlMy5PcHRpbWl6ZWRVbmljb2RlLAorICB3aGljaCBpcyBvYnNvbGV0ZSBpbiBQeXRob24gMy54LiBJdCdzIG5vdyBhbGlhc2VkIHRvIHN0ciBmb3IKKyAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKy0gV2hlbiAnJyBpcyBhIHBhdGggKGUuZy4gaW4gc3lzLnBhdGgpLCBtYWtlIHN1cmUgX19maWxlX18gdXNlcyB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSBpbnN0ZWFkIG9mICcnIGluIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTM2MDk6IEFkZCB0d28gZnVuY3Rpb25zIHRvIHF1ZXJ5IHRoZSB0ZXJtaW5hbCBzaXplOgorICBvcy5nZXRfdGVybWluYWxfc2l6ZSAobG93IGxldmVsKSBhbmQgc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplIChoaWdoIGxldmVsKS4KKyAgUGF0Y2ggYnkgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1lay4KKworLSBJc3N1ZSAjMTM4NDU6IE9uIFdpbmRvd3MsIHRpbWUudGltZSgpIG5vdyB1c2VzIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCkKKyAgaW5zdGVhZCBvZiBmdGltZSgpIHRvIGhhdmUgYSByZXNvbHV0aW9uIG9mIDEwMCBucyBpbnN0ZWFkIG9mIDEgbXMgKHRoZSBjbG9jaworICBhY2N1cmFjeSBpcyBiZXR3ZWVuIDAuNSBtcyBhbmQgMTUgbXMpLgorCistIElzc3VlICMxMzg0NjogQWRkIHRpbWUubW9ub3RvbmljKCksIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjODE4NDogbXVsdGlwcm9jZXNzaW5nOiBPbiBXaW5kb3dzLCBkb24ndCBzZXQgU09fUkVVU0VBRERSIG9uCisgIENvbm5lY3Rpb24gc29ja2V0cywgYW5kIHNldCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSBvbiBuYW1lZCBwaXBlcywgdG8KKyAgbWFrZSBzdXJlIHR3byBsaXN0ZW5lcnMgY2FuJ3QgYmluZCB0byB0aGUgc2FtZSBzb2NrZXQvcGlwZSAob3IgYW55IGV4aXN0aW5nCisgIHNvY2tldC9waXBlKS4KKworLSBJc3N1ZSAjMTA4MTE6IEZpeCByZWN1cnNpdmUgdXNhZ2Ugb2YgY3Vyc29ycy4gSW5zdGVhZCBvZiBjcmFzaGluZywKKyAgcmFpc2UgYSBQcm9ncmFtbWluZ0Vycm9yIG5vdy4KKworLSBJc3N1ZSAjMTA4ODE6IEZpeCB0ZXN0X3NpdGUgZmFpbHVyZSB3aXRoIE9TIFggZnJhbWV3b3JrIGJ1aWxkcy4KKworLSBJc3N1ZSAjOTY0NDM3OiBNYWtlIElETEUgaGVscCB3aW5kb3cgbm9uLW1vZGFsLgorICBQYXRjaCBieSBHdWlsaGVybWUgUG9sbyBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEzNzM0OiBBZGQgb3MuZndhbGsoKSwgYSBkaXJlY3Rvcnkgd2Fsa2luZyBmdW5jdGlvbiB5aWVsZGluZyBmaWxlCisgIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMyOTQ1OiBNYWtlIHRoZSBkaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgYXdhcmUgb2YgYmRpc3RfcnBtIHByb2R1Y3RzLgorCistIElzc3VlICMxMzcxMjogcHlzZXR1cCBjcmVhdGUgc2hvdWxkIG5vdCBjb252ZXJ0IHBhY2thZ2VfZGF0YSB0byBleHRyYV9maWxlcy4KKworLSBJc3N1ZSAjMTE4MDU6IHBhY2thZ2VfZGF0YSBpbiBzZXR1cC5jZmcgc2hvdWxkIGFsbG93IG1vcmUgdGhhbiBvbmUgdmFsdWUuCisKKy0gSXNzdWUgIzEzOTMzOiBJRExFIGF1dG8tY29tcGxldGUgZGlkIG5vdCB3b3JrIHdpdGggc29tZSBpbXBvcnRlZAorICBtb2R1bGUsIGxpa2UgaGFzaGxpYi4gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBJc3N1ZSAjMTM5MDE6IFByZXZlbnQgdGVzdF9kaXN0dXRpbHMgZmFpbHVyZXMgb24gT1MgWCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKworLSBJc3N1ZSAjMTM2NzY6IEhhbmRsZSBzdHJpbmdzIHdpdGggZW1iZWRkZWQgemVyb3MgY29ycmVjdGx5IGluIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzEzNTA2OiBBZGQgJycgdG8gcGF0aCBmb3IgSURMRSBTaGVsbCB3aGVuIHN0YXJ0ZWQgYW5kIHJlc3RhcnRlZCB3aXRoIFJlc3RhcnQgU2hlbGwuCisgIE9yaWdpbmFsIHBhdGNoZXMgYnkgTWFyY28gU2NhdGFnbGluaSBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzg4Mjg6IEFkZCBuZXcgZnVuY3Rpb24gb3MucmVwbGFjZSgpLCBmb3IgY3Jvc3MtcGxhdGZvcm0gcmVuYW1pbmcKKyAgd2l0aCBvdmVyd3JpdGluZy4KKworLSBJc3N1ZSAjMTM4NDg6IG9wZW4oKSBhbmQgdGhlIEZpbGVJTyBjb25zdHJ1Y3RvciBub3cgY2hlY2sgZm9yIE5VTAorICBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIG5hbWUuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzODA2OiBUaGUgc2l6ZSBjaGVjayBpbiBhdWRpb29wIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zIHdhcyB0b28KKyAgc3RyaWN0IGFuZCBjb3VsZCByZWplY3QgdmFsaWQgY29tcHJlc3NlZCBkYXRhLiAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM4MTI6IFdoZW4gYSBtdWx0aXByb2Nlc3NpbmcgUHJvY2VzcyBjaGlsZCByYWlzZXMgYW4gZXhjZXB0aW9uLAorICBmbHVzaCBzdGRlcnIgYWZ0ZXIgcHJpbnRpbmcgdGhlIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzEzODg1OiBDVkUtMjAxMS0zMzg5OiB0aGUgX3NzbCBtb2R1bGUgd291bGQgYWx3YXlzIGRpc2FibGUgdGhlIENCQworICBJViBhdHRhY2sgY291bnRlcm1lYXN1cmUuCisKKy0gSXNzdWUgIzEzODQ3OiB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLmdtdGltZSgpIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQKKyAgb2YgVmFsdWVFcnJvciBvbiBmYWlsdXJlLiB0aW1lLmN0aW1lKCkgYW5kIHRpbWUuYXNjdGltZSgpIG5vdyByYWlzZXMgYW4KKyAgT1NFcnJvciBpZiBsb2NhbHRpbWUoKSBmYWlsZWQuIHRpbWUuY2xvY2soKSBub3cgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBwcm9jZXNzb3IgdGltZSB1c2VkIGlzIG5vdCBhdmFpbGFibGUgb3IgaXRzIHZhbHVlIGNhbm5vdCBiZSByZXByZXNlbnRlZAorCistIElzc3VlICMxMzg2MjogRml4IHNwdXJpb3VzIGZhaWx1cmUgaW4gdGVzdF96bGliIGR1ZSB0byBydW50aW1lL2NvbXBpbGUgdGltZQorICBtaW5vciB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisKKy0gSXNzdWUgIzEyODA0OiBGaXggdGVzdF9zb2NrZXQgYW5kIHRlc3RfdXJsbGliMm5ldCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgb24gYSBzeXN0ZW0gd2l0aG91dCBpbnRlcm5ldCBhY2Nlc3MuCisKKy0gSXNzdWUgIzEzNzcyOiBJbiBvcy5zeW1saW5rKCkgdW5kZXIgV2luZG93cywgZG8gbm90IHRyeSB0byBndWVzcyB0aGUgbGluaworICB0YXJnZXQncyB0eXBlIChmaWxlIG9yIGRpcmVjdG9yeSkuICBUaGUgZGV0ZWN0aW9uIHdhcyBidWdneSBhbmQgbWFkZSB0aGUKKyAgY2FsbCBub24tYXRvbWljICh0aGVyZWZvcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zKS4KKworLSBJc3N1ZSAjNjYzMTogRGlzYWxsb3cgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiB1cmxsaWIgdXJsb3BlbiBtZXRob2RzLgorCistIElzc3VlICMxMzcyMjogQXZvaWQgc2lsZW5jaW5nIEltcG9ydEVycm9ycyB3aGVuIGluaXRpYWxpemluZyB0aGUgY29kZWNzCisgIHJlZ2lzdHJ5LgorCistIElzc3VlICMxMzc4MTogRml4IEd6aXBGaWxlIGJ1ZyB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkIHdoZW4KKyAgb3BlbmluZyBmb3Igd3JpdGluZyB1c2luZyBhIGZpbGVvYmogcmV0dXJuZWQgYnkgb3MuZmRvcGVuKCkuCisKKy0gSXNzdWUgIzEzODAzOiBVbmRlciBTb2xhcmlzLCBkaXN0dXRpbHMgZG9lc24ndCBpbmNsdWRlIGJpdG5lc3MKKyAgaW4gdGhlIGRpcmVjdG9yeSBuYW1lLgorCistIElzc3VlICMxMDI3ODogQWRkIHRpbWUud2FsbGNsb2NrKCkgZnVuY3Rpb24sIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjMTM4MDk6IEZpeCByZWdyZXNzaW9uIHdoZXJlIGJ6MiBtb2R1bGUgd291bGRuJ3Qgd29yayB3aGVuIHRocmVhZHMgYXJlCisgIGRpc2FibGVkLiBPcmlnaW5hbCBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCisgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCisKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYworICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCisKKy0gSXNzdWUgIzEzNzI2OiBGaXggdGhlIGFtYmlndW91cyAtUyBmbGFnIGluIHJlZ3J0ZXN0LiBJdCBpcyAtby8tLXNsb3cgZm9yIHNsb3cKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorICBUaGUgaGFuZyB3b3VsZCBvY2N1ciB3aGVuIHJldHJpZXZpbmcgdGhlIHJlc3VsdCBvZiBhIHNjaGVkdWxlZCBmdXR1cmUgYWZ0ZXIKKyAgdGhlIGV4ZWN1dG9yIGhhZCBiZWVuIHNodXQgZG93bi4KKworLSBJc3N1ZSAjMTM1MDI6IHRocmVhZGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gRXZlbnQud2FpdCgpIHRoYXQgbWFkZSBpdAorICByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgZXZlbnQgd2FzIHNldCBhbmQgY2xlYXJlZCByaWdodCBhZnRlci4KKworLSBJc3N1ZSAjOTk5MzogV2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgb24gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLAorICBhbmQgdGhlIHNvdXJjZSBpcyBhIHN5bWxpbmssIHNodXRpbC5tb3ZlKCkgbm93IHJlY3JlYXRlcyBhIHN5bWxpbmsgb24gdGhlCisgIGRlc3RpbmF0aW9uIGluc3RlYWQgb2YgY29weWluZyB0aGUgZmlsZSBjb250ZW50cy4gIFBhdGNoIGJ5IEpvbmF0aGFuIE5pZWhvZgorICBhbmQgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMjkyNjogRml4IGEgYnVnIGluIHRhcmZpbGUncyBsaW5rIGV4dHJhY3Rpb24uCisKKy0gSXNzdWUgIzEzNjk2OiBGaXggdGhlIDMwMiBSZWxhdGl2ZSBVUkwgUmVkaXJlY3Rpb24gcHJvYmxlbS4KKworLSBJc3N1ZSAjMTM2MzY6IFdlYWsgY2lwaGVycyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHNzbCBtb2R1bGUKKyAgKGV4Y2VwdCB3aGVuIFNTTHYyIGlzIGV4cGxpY2l0bHkgYXNrZWQgZm9yKS4KKworLSBJc3N1ZSAjMTI3MTU6IEFkZCBhbiBvcHRpb25hbCBzeW1saW5rcyBhcmd1bWVudCB0byBzaHV0aWwgZnVuY3Rpb25zCisgIChjb3B5ZmlsZSwgY29weW1vZGUsIGNvcHlzdGF0LCBjb3B5LCBjb3B5MikuICBXaGVuIHRoYXQgcGFyYW1ldGVyIGlzCisgIHRydWUsIHN5bWxpbmtzIGFyZW4ndCBkZXJlZmVyZW5jZWQgYW5kIHRoZSBvcGVyYXRpb24gaW5zdGVhZCBhY3RzIG9uIHRoZQorICBzeW1saW5rIGl0c2VsZiAob3IgY3JlYXRlcyBvbmUsIGlmIHJlbGV2YW50KS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBBZGQgYSBmbGFncyBwYXJhbWV0ZXIgdG8gc2VsZWN0LmVwb2xsLgorCistIElzc3VlICMxMzYyNjogQWRkIHN1cHBvcnQgZm9yIFNTTCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UsIHRocm91Z2ggdGhlCisgIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBtZXRob2QgYW5kIHRoZSBzc2wuT1BfU0lOR0xFX0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzExMDA2OiBEb24ndCBpc3N1ZSBsb3cgbGV2ZWwgd2FybmluZyBpbiBzdWJwcm9jZXNzIHdoZW4gcGlwZTIoKSBmYWlscy4KKworLSBJc3N1ZSAjMTM2MjA6IFN1cHBvcnQgZm9yIENocm9tZSBicm93c2VyIGluIHdlYmJyb3dzZXIuICBQYXRjaCBjb250cmlidXRlZAorICBieSBBcm5hdWQgQ2FsbWV0dGVzLgorCistIElzc3VlICMxMTgyOTogRml4IGNvZGUgZXhlY3V0aW9uIGhvbGVzIGluIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgZm9yCisgIG1ldGFjbGFzc2VzIHdpdGggbWV0YWNsYXNzZXMuIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTI3MDg6IEFkZCBzdGFybWFwKCkgYW5kIHN0YXJtYXBfYXN5bmMoKSBtZXRob2RzIChzaW1pbGFyIHRvCisgIGl0ZXJ0b29scy5zdGFybWFwKCkpIHRvIG11bHRpcHJvY2Vzc2luZy5Qb29sLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNzg1OiBGaXggaW5zcGVjdCBhbmQgcHlkb2Mgd2l0aCBtaXNiZWhhdmluZyBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTM2Mzc6ICJhMmIiIGZ1bmN0aW9ucyBpbiB0aGUgYmluYXNjaWkgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNjM0OiBBZGQgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kIGRpc2FibGluZyBTU0wgY29tcHJlc3Npb24uCisKKy0gSXNzdWUgIzEzNjI3OiBBZGQgc3VwcG9ydCBmb3IgU1NMIEVsbGlwdGljIEN1cnZlLWJhc2VkIERpZmZpZS1IZWxsbWFuCisgIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUgU1NMQ29udGV4dC5zZXRfZWNkaF9jdXJ2ZSgpIG1ldGhvZCBhbmQgdGhlCisgIHNzbC5PUF9TSU5HTEVfRUNESF9VU0Ugb3B0aW9uLgorCistIElzc3VlICMxMzYzNTogQWRkIHNzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIHNvIHRoYXQgU1NMIHNlcnZlcnMKKyAgY2hvb3NlIHRoZSBjaXBoZXIgYmFzZWQgb24gdGhlaXIgb3duIHByZWZlcmVuY2VzLCByYXRoZXIgdGhhbiBvbiB0aGUKKyAgY2xpZW50J3MuCisKKy0gSXNzdWUgIzExODEzOiBGaXggaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IgbW9kdWxlcy4gUGF0Y2ggYnkgQW5kcmVhcworICBTdMO8aHJrLgorCistIElzc3VlICM3NTAyOiBGaXggZXF1YWxpdHkgY29tcGFyaXNvbiBmb3IgRG9jVGVzdENhc2UgaW5zdGFuY2VzLiAgUGF0Y2ggYnkKKyAgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTE4NzA6IHRocmVhZGluZzogUHJvcGVybHkgcmVpbml0aWFsaXplIHRocmVhZHMgaW50ZXJuYWwgbG9ja3MgYW5kCisgIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gYXZvaWQgZGVhZGxvY2tzIGluIGNoaWxkIHByb2Nlc3Nlcy4KKworLSBJc3N1ZSAjODAzNTogdXJsbGliOiBGaXggYSBidWcgd2hlcmUgdGhlIGNsaWVudCBjb3VsZCByZW1haW4gc3R1Y2sgYWZ0ZXIgYQorICByZWRpcmVjdGlvbiBvciBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM1NjA6IG9zLnN0cmVycm9yKCkgbm93IHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YKKyAgVVRGLTguCisKKy0gSXNzdWUgIzgzNzM6IFRoZSBmaWxlc3lzdGVtIHBhdGggb2YgQUZfVU5JWCBzb2NrZXRzIG5vdyB1c2VzIHRoZSBmaWxlc3lzdGVtCisgIGVuY29kaW5nIGFuZCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIHJhdGhlciB0aGFuIFVURi04LiAgUGF0Y2gKKyAgYnkgRGF2aWQgV2F0c29uLgorCistIElzc3VlICMxMDM1MDogUmVhZCBhbmQgc2F2ZSBlcnJubyBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0CisgIG92ZXJ3cml0ZSBpdC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzExNjEwOiBJbnRyb2R1Y2UgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIGRlY2xhcmUgYWJzdHJhY3QgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjMTM1OTE6IEEgYnVnIGluIGltcG9ydGxpYiBoYXMgYmVlbiBmaXhlZCB0aGF0IGNhdXNlZCBpbXBvcnRfbW9kdWxlCisgIHRvIGxvYWQgYSBtb2R1bGUgdHdpY2UuCisKKy0gSXNzdWUgIzQ2MjU6IElmIElETEUgY2Fubm90IHdyaXRlIHRvIGl0cyByZWNlbnQgZmlsZSBvciBicmVha3BvaW50IGZpbGVzLAorICBkaXNwbGF5IGEgbWVzc2FnZSBwb3B1cCBhbmQgY29udGludWUgcmF0aGVyIHRoYW4gY3Jhc2guICBPcmlnaW5hbCBwYXRjaCBieQorICBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM0NDkgc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG1ldGhvZCBoYXMgYSBuZXcgImJsb2NraW5nIiBwYXJhbWV0ZXIgd2hpY2gKKyAgd2hlbiBzZXQgdG8gRmFsc2UgbWFrZXMgcnVuKCkgZXhlY3V0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50cyBkdWUgdG8gZXhwaXJlCisgIHNvb25lc3QgKGlmIGFueSkgYW5kIHRoZW4gcmV0dXJuLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gSXNzdWUgIzg2ODQgc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNhbiBiZSBzYWZlbHkgdXNlZCBpbiBtdWx0aS10aHJlYWRlZAorICBlbnZpcm9ubWVudHMuICBQYXRjaCBieSBKb3NpYWggQ2FybHNvbiBhbmQgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gQWxpYXMgcmVzb3VyY2UuZXJyb3IgdG8gT1NFcnJvciBhbGEgUEVQIDMxNTEuCisKKy0gSXNzdWUgIzU2ODk6IEFkZCBzdXBwb3J0IGZvciBsem1hIGNvbXByZXNzaW9uIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyNDg6IFR1cm4gMy4yJ3MgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBpbnRvIDMuMydzCisgIERlcHJlY2F0aW9uV2FybmluZy4gIEl0IGNvdmVycyAnY2dpLmVzY2FwZScsICdpbXBvcnRsaWIuYWJjLlB5TG9hZGVyJywKKyAgJ2ltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXInLCAnbm50cGxpYi5OTlRQLnhndGl0bGUnLCAnbm50cGxpYi5OTlRQLnhwYXRoJywKKyAgYW5kIHByaXZhdGUgYXR0cmlidXRlcyBvZiAnc210cGQuU01UUENoYW5uZWwnLgorCistIElzc3VlICM1OTA1LCAjMTM1NjA6IHRpbWUuc3RyZnRpbWUoKSBpcyBub3cgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCisgIGVuY29kaW5nLCBpbnN0ZWFkIG9mIFVURi04LCBpZiB0aGUgd2NzZnRpbWUoKSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICM4NjQxOiBVcGRhdGUgSURMRSAzIHN5bnRheCBjb2xvcmluZyB0byByZWNvZ25pemUgYiIuLiIgYW5kIG5vdCB1Ii4uIi4KKyAgUGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxMzQ2NDogQWRkIGEgcmVhZGludG8oKSBtZXRob2QgdG8gaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLiAgUGF0Y2gKKyAgYnkgSm9uIEt1aG4uCisKKy0gdGFyZmlsZS5weTogQ29ycmVjdGx5IGRldGVjdCBiemlwMiBjb21wcmVzc2VkIHN0cmVhbXMgd2l0aCBibG9ja3NpemVzCisgIG90aGVyIHRoYW4gOTAway4KKworLSBJc3N1ZSAjMTM0Mzk6IEZpeCBtYW55IGVycm9ycyBpbiB0dXJ0bGUgZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjNjcxNTogQWRkIGEgbW9kdWxlICdsem1hJyBmb3IgY29tcHJlc3Npb24gdXNpbmcgdGhlIExaTUEgYWxnb3JpdGhtLgorICBUaGFua3MgdG8gUGVyIMOYeXZpbmQgS2FybHNlbiBmb3IgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzEzNDg3OiBNYWtlIGluc3BlY3QuZ2V0bW9kdWxlIHJvYnVzdCBhZ2FpbnN0IGNoYW5nZXMgZG9uZSB0bworICBzeXMubW9kdWxlcyB3aGlsZSBpdCBpcyBpdGVyYXRpbmcgb3ZlciBpdC4KKworLSBJc3N1ZSAjMTI2MTg6IEZpeCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBweV9jb21waWxlIGZyb20gY3JlYXRpbmcgYnl0ZQorICBjb21waWxlZCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBJbml0aWFsIHBhdGNoIGJ5IFNqb2VyZCBkZSBWcmllcy4KKworLSBJc3N1ZSAjMTM0NDQ6IFdoZW4gc3Rkb3V0IGhhcyBiZWVuIGNsb3NlZCBleHBsaWNpdGx5LCB3ZSBzaG91bGQgbm90IGF0dGVtcHQKKyAgdG8gZmx1c2ggaXQgYXQgc2h1dGRvd24gYW5kIHByaW50IGFuIGVycm9yLgorCistIElzc3VlICMxMjU2NzogVGhlIGN1cnNlcyBtb2R1bGUgdXNlcyBVbmljb2RlIGZ1bmN0aW9ucyBmb3IgVW5pY29kZSBhcmd1bWVudHMKKyAgd2hlbiBpdCBpcyBsaW5rZWQgdG8gdGhlIG5jdXJzZXMgbGlicmFyeS4gSXQgZW5jb2RlcyBhbHNvIFVuaWNvZGUgc3RyaW5ncyB0bworICB0aGUgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTguCisKKy0gSXNzdWUgIzEyODU2OiBFbnN1cmUgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBpbmhlcml0IHRoZSBwYXJlbnQncyByYW5kb20KKyAgc2VlZCBmb3IgZmlsZW5hbWUgZ2VuZXJhdGlvbiBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgQnJpYW4KKyAgSGFycmluZy4KKworLSBJc3N1ZSAjOTk1NzogU3Bvb2xlZFRlbXBvcmFyeUZpbGUudHJ1bmNhdGUoKSBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBzaXplCisgIHBhcmFtZXRlciwgYXMgb3RoZXIgZmlsZS1saWtlIG9iamVjdHMuICBQYXRjaCBieSBSeWFuIEtlbGx5LgorCistIElzc3VlICMxMzQ1ODogRml4IGEgbWVtb3J5IGxlYWsgaW4gdGhlIHNzbCBtb2R1bGUgd2hlbiBkZWNvZGluZyBhCisgIGNlcnRpZmljYXRlIHdpdGggYSBzdWJqZWN0QWx0TmFtZS4gIFBhdGNoIGJ5IFJvYmVydCBYaWFvLgorCistIElzc3VlICMxMzQxNTogb3MudW5zZXRlbnYoKSBkb2Vzbid0IGlnbm9yZSBlcnJvcnMgYW55bW9yZS4KKworLSBJc3N1ZSAjMTMyNDU6IHNjaGVkLnNjaGVkdWxlciBjbGFzcyBjb25zdHJ1Y3RvcidzIHRpbWVmdW5jIGFuZAorICBkZWxheWZ1bmN0IHBhcmFtZXRlcnMgYXJlIG5vdyBvcHRpb25hbC4KKyAgc2NoZWR1bGVyLmVudGVyIGFuZCBzY2hlZHVsZXIuZW50ZXJhYnMgbWV0aG9kcyBnYWluZWQgYSBuZXcga3dhcmdzIHBhcmFtZXRlci4KKyAgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsuCisKKy0gSXNzdWUgIzEyMzI4OiBVbmRlciBXaW5kb3dzLCByZWZhY3RvciBoYW5kbGluZyBvZiBDdHJsLUMgZXZlbnRzIGFuZAorICBtYWtlIF9tdWx0aXByb2Nlc3Npbmcud2luMzIuV2FpdEZvck11bHRpcGxlT2JqZWN0cyBpbnRlcnJ1cHRpYmxlIHdoZW4KKyAgdGhlIHdhaXRfZmxhZyBwYXJhbWV0ZXIgaXMgZmFsc2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzIyOiBGaXggQnVmZmVyZWRXcml0ZXIud3JpdGUoKSB0byBlbnN1cmUgdGhhdCBCbG9ja2luZ0lPRXJyb3IgaXMKKyAgcmFpc2VkIHdoZW4gdGhlIHdyYXBwZWQgcmF3IGZpbGUgaXMgbm9uLWJsb2NraW5nIGFuZCB0aGUgd3JpdGUgd291bGQgYmxvY2suCisgIFByZXZpb3VzIGNvZGUgYXNzdW1lZCB0aGF0IHRoZSByYXcgd3JpdGUoKSB3b3VsZCByYWlzZSBCbG9ja2luZ0lPRXJyb3IsIGJ1dAorICBSYXdJT0Jhc2Uud3JpdGUoKSBpcyBkZWZpbmVkIHRvIHJldHVybmVkIE5vbmUgd2hlbiB0aGUgY2FsbCB3b3VsZCBibG9jay4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzM1ODogSFRNTFBhcnNlciBub3cgY2FsbHMgaGFuZGxlX2RhdGEgb25seSBvbmNlIGZvciBlYWNoIENEQVRBLgorCistIElzc3VlICM0MTQ3OiBtaW5pZG9tJ3MgdG9wcmV0dHl4bWwgbm8gbG9uZ2VyIGFkZHMgd2hpdGVzcGFjZSBhcm91bmQgYSB0ZXh0CisgIG5vZGUgd2hlbiBpdCBpcyB0aGUgb25seSBjaGlsZCBvZiBhbiBlbGVtZW50LiAgSW5pdGlhbCBwYXRjaCBieSBEYW4KKyAgS2VuaWdzYmVyZy4KKworLSBJc3N1ZSAjMTMzNzQ6IFRoZSBXaW5kb3dzIGJ5dGVzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHRoZSBvcyBtb2R1bGUuIFVzZQorICBVbmljb2RlIGZpbGVuYW1lcyBpbnN0ZWFkIG9mIGJ5dGVzIGZpbGVuYW1lcyB0byBub3QgZGVwZW5kIG9uIHRoZSBBTlNJIGNvZGUKKyAgcGFnZSBhbnltb3JlIGFuZCB0byBzdXBwb3J0IGFueSBmaWxlbmFtZS4KKworLSBJc3N1ZSAjMTMyOTc6IFVzZSBieXRlcyB0eXBlIHRvIHNlbmQgYW5kIHJlY2VpdmUgYmluYXJ5IGRhdGEgdGhyb3VnaCBYTUxSUEMuCisKKy0gSXNzdWUgIzYzOTc6IFN1cHBvcnQgIi9kZXYvcG9sbCIgcG9sbGluZyBvYmplY3RzIGluIHNlbGVjdCBtb2R1bGUsCisgIHVuZGVyIFNvbGFyaXMgJiBkZXJpdmF0aXZlcy4KKworLSBJc3N1ZXMgIzE3NDU3NjEsICM3NTU2NzAsICMxMzM1NywgIzEyNjI5LCAjMTIwMDMxMzogSFRNTFBhcnNlciBub3cgY29ycmVjdGx5CisgIGhhbmRsZXMgbm9uLXZhbGlkIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBhZGphY2VudCBhbmQgdW5xdW90ZWQgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTMxOTM6IEZpeCBkaXN0dXRpbHMuZmlsZWxpc3QuRmlsZUxpc3QgYW5kIHBhY2thZ2luZy5tYW5pZmVzdC5NYW5pZmVzdAorICB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMzM4NDogUmVtb3ZlIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18gaW1wb3J0IGluIExpYi9yYW5kb20ucHkKKworLSBJc3N1ZSAjMTMxNDk6IFNwZWVkIHVwIGFwcGVuZC1vbmx5IFN0cmluZ0lPIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzczOiBtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0KCkgY291bGQgc29tZXRpbWVzIGJsb2NrIGluZGVmaW5pdGVseQorICB3aGVuIGNhbGxlZCB3aXRoIGEgdGltZW91dC4gIFBhdGNoIGJ5IEFybmF1ZCBZc21hbC4KKworLSBJc3N1ZSAjMTMyNTQ6IEZpeCBNYWlsZGlyIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbWFpbGRpciBjb250ZW50cworICBhcmUgcmVhZCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzMwNjc6IGxvY2FsZS5zZXRsb2NhbGUoKSBub3cgcmFpc2VzIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kCisgIGFyZ3VtZW50IGlzIGFuIGludmFsaWQgaXRlcmFibGUuIEl0cyBkb2N1bWVudGF0aW9uIGFuZCBkb2NzdHJpbmcKKyAgd2VyZSBhbHNvIHVwZGF0ZWQuIEluaXRpYWwgcGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTMxNDA6IEZpeCB0aGUgZGFlbW9uX3RocmVhZHMgYXR0cmlidXRlIG9mIFRocmVhZGluZ01peEluLgorCistIElzc3VlICMxMzMzOTogRml4IGNvbXBpbGUgZXJyb3IgaW4gcG9zaXhtb2R1bGUuYyBkdWUgdG8gbWlzc2luZyBzZW1pY29sb24uCisgIFRoYW5rcyB0byBSb2JlcnQgWGlhby4KKworLSBCeXRlIGNvbXBpbGF0aW9uIGluIHBhY2thZ2luZyBpcyBub3cgaXNvbGF0ZWQgZnJvbSB0aGUgY2FsbGluZyBQeXRob24gLUIgb3IKKyAgLU8gb3B0aW9ucywgaW5zdGVhZCBvZiBiZWluZyBkaXNhbGxvd2VkIHVuZGVyIC1CIG9yIGJ1Z2d5IHVuZGVyIC1PLgorCistIElzc3VlICMxMDU3MDogY3Vyc2VzLnB1dHAoKSBhbmQgY3Vyc2VzLnRwYXJtKCkgYXJlIG5vdyBleHBlY3RpbmcgYSBieXRlCisgIHN0cmluZywgaW5zdGVhZCBvZiBhIFVuaWNvZGUgc3RyaW5nLgorCistIElzc3VlICMxMzI5NTogaHR0cC5zZXJ2ZXIgbm93IHByb2R1Y2VzIHZhbGlkIEhUTUwgNC4wMSBzdHJpY3QuCisKKy0gSXNzdWUgIzI4OTI6IHByZXNlcnZlIGl0ZXJwYXJzZSBldmVudHMgaW4gY2FzZSBvZiBTeW50YXhFcnJvci4KKworLSBJc3N1ZSAjMTMyODc6IHVybGxpYi5yZXF1ZXN0IGFuZCB1cmxsaWIuZXJyb3Igbm93IGNvbnRhaW5zIGFuIF9fYWxsX18KKyAgYXR0cmlidXRlIHRvIGV4cG9zZSBvbmx5IHJlbGV2YW50IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gIFBhdGNoIGJ5IEZsb3JlbnQKKyAgWGljbHVuYS4KKworLSBJc3N1ZSAjNjcwNjY0OiBGaXggSFRNTFBhcnNlciB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjb250ZW50IG9mCisgIGBgPHNjcmlwdD4uLi48L3NjcmlwdD5gYCBhbmQgYGA8c3R5bGU+Li4uPC9zdHlsZT5gYC4KKworLSBJc3N1ZSAjMTA4MTc6IEZpeCB1cmxyZXRyaWV2ZSBmdW5jdGlvbiB0byByYWlzZSBDb250ZW50VG9vU2hvcnRFcnJvciBldmVuCisgIHdoZW4gcmVwb3J0aG9vayBpcyBOb25lLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzI5NjogRml4IElETEUgdG8gY2xlYXIgY29tcGlsZSBfX2Z1dHVyZV9fIGZsYWdzIG9uIHNoZWxsIHJlc3RhcnQuCisgIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBGaXggdGhlIHhtbHJwYy5jbGllbnQgdXNlciBhZ2VudCB0byByZXR1cm4gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgdXJsbGliLnJlcXVlc3QgdXNlciBhZ2VudDogIlB5dGhvbi14bWxycGMvMy4zIi4KKworLSBJc3N1ZSAjMTMyOTM6IEJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIG1hcnNoYWwgYnl0ZXMgdXNpbmcKKyAgeG1scnBjLmNsaWVudC4KKworLSBJc3N1ZSAjMTMyOTE6IE5hbWVFcnJvciBpbiB4bWxycGMgcGFja2FnZS4KKworLSBJc3N1ZSAjMTMyNTg6IFVzZSBjYWxsYWJsZSgpIGJ1aWx0LWluIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgorCistIElzc3VlICMxMzI3MzogZml4IGEgYnVnIHRoYXQgcHJldmVudGVkIEhUTUxQYXJzZXIgdG8gcHJvcGVybHkgZGV0ZWN0IHNvbWUKKyAgdGFncyB3aGVuIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTExODM6IEFkZCBmaW5lci1ncmFpbmVkIGV4Y2VwdGlvbnMgdG8gdGhlIHNzbCBtb2R1bGUsIHNvIHRoYXQKKyAgeW91IGRvbid0IGhhdmUgdG8gaW5zcGVjdCB0aGUgZXhjZXB0aW9uJ3MgYXR0cmlidXRlcyBpbiB0aGUgY29tbW9uIGNhc2UuCisKKy0gSXNzdWUgIzEzMjE2OiBBZGQgY3A2NTAwMSBjb2RlYywgdGhlIFdpbmRvd3MgVVRGLTggKENQX1VURjgpLgorCistIElzc3VlICMxMzIyNjogQWRkIFJUTERfeHh4IGNvbnN0YW50cyB0byB0aGUgb3MgbW9kdWxlLiBUaGVzZSBjb25zdGFudHMgY2FuIGJlCisgIHVzZWQgd2l0aCBzeXMuc2V0ZGxvcGVuZmxhZ3MoKS4KKworLSBJc3N1ZSAjMTAyNzg6IEFkZCBjbG9ja19nZXRyZXMoKSwgY2xvY2tfZ2V0dGltZSgpIGFuZCBDTE9DS194eHggY29uc3RhbnRzIHRvCisgIHRoZSB0aW1lIG1vZHVsZS4gdGltZS5jbG9ja19nZXR0aW1lKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSBwcm92aWRlcyBhCisgIG1vbm90b25pYyBjbG9jaworCistIElzc3VlICMxMDMzMjogbXVsdGlwcm9jZXNzaW5nOiBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgUG9vbCBpcyBjbG9zZWQKKyAgYmVmb3JlIGFsbCB0YXNrcyBoYXZlIGNvbXBsZXRlZC4KKworLSBJc3N1ZSAjMTMyNTU6IHdyb25nIGRvY3N0cmluZ3MgaW4gYXJyYXkgbW9kdWxlLgorCistIElzc3VlICM4NTQwOiBSZW1vdmUgZGVwcmVjYXRlZCBDb250ZXh0Ll9jbGFtcCBhdHRyaWJ1dGUgaW4gRGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjM1OiBBZGRlZCBEZXByZWNhdGlvbldhcm5pbmcgdG8gbG9nZ2luZy53YXJuKCkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KKworLSBJc3N1ZSAjOTE2ODogbm93IHNtdHBkIGlzIGFibGUgdG8gYmluZCBwcml2aWxlZ2VkIHBvcnQuCisKKy0gSXNzdWUgIzEyNTI5OiBmaXggY2dpLnBhcnNlX2hlYWRlciBpc3N1ZSBvbiBzdHJpbmdzIHdpdGggZG91YmxlLXF1b3RlcyBhbmQKKyAgc2VtaWNvbG9ucyB0b2dldGhlci4gUGF0Y2ggYnkgQmVuIERhcm5lbGwgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzIyNzogZnVuY3Rvb2xzLmxydV9jYWNoZSgpIG5vdyBoYXMgYSBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKKyAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCisKKy0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAorICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCisgIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCisgIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCisKKy0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAorICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgorCistIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCisgIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgorCistIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQorICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCisgIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKKyAgZmlsZS4KKworLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKKyAgZmllbGRzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCisgIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgYXQgc3RhcnR1cCBhbnltb3JlLgorCistIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcworICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCisKKy0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KKyAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorCistIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKKyAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCisKKy0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCisgIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCisgIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCisgIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKKyAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZworICBDaXRyby4KKworLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKKyAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCisKKy0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKKyAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KKyAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCisKKy0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKKyAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCisKKy0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKKyAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgorICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KKworLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKKyAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgorCistIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKKyAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgorCistIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgorICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKKyAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAorICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KKworLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQorICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCisKKy0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgorCistIElzc3VlICMxMjQ5NDogT24gZXJyb3IsIGNhbGwoKSwgY2hlY2tfY2FsbCgpLCBjaGVja19vdXRwdXQoKSBhbmQKKyAgZ2V0c3RhdHVzb3V0cHV0KCkgZnVuY3Rpb25zIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cga2lsbCB0aGUgcHJvY2VzcywKKyAgcmVhZCBpdHMgc3RhdHVzICh0byBhdm9pZCB6b21iaXMpIGFuZCBjbG9zZSBwaXBlcy4KKworLSBJc3N1ZSAjMTI3MjA6IEV4cG9zZSBsb3ctbGV2ZWwgTGludXggZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGUgZnVuY3Rpb25zIGluIG9zLgorCistIElzc3VlICMxMDk0NjogVGhlIGRpc3R1dGlscyBjb21tYW5kcyBiZGlzdF9kdW1iLCBiZGlzdF93aW5pbnN0IGFuZCBiZGlzdF9tc2kKKyAgbm93IHJlc3BlY3QgYSAtLXNraXAtYnVpbGQgb3B0aW9uIGdpdmVuIHRvIGJkaXN0LiAgVGhlIHBhY2thZ2luZyBjb21tYW5kcworICB3ZXJlIGZpeGVkIHRvby4KKworLSBJc3N1ZSAjMTI4NDc6IEZpeCBhIGNyYXNoIHdpdGggbmVnYXRpdmUgUFVUIGFuZCBMT05HX0JJTlBVVCBhcmd1bWVudHMgaW4KKyAgdGhlIEMgcGlja2xlIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTU2NDogQXZvaWQgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBwaWNrbGUgaHVnZSBvYmplY3RzIG9yIGNvbnRhaW5lcnMKKyAgKG1vcmUgdGhhbiAyKiozMSBpdGVtcykuICBJbnN0ZWFkLCBpbiBtb3N0IGNhc2VzLCBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTIyODc6IEZpeCBhIHN0YWNrIGNvcnJ1cHRpb24gaW4gb3NzYXVkaW9kZXYgbW9kdWxlIHdoZW4gdGhlIEZEIGlzCisgIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFLgorCistIElzc3VlICMxMjgzOTogRml4IGNyYXNoIGluIHpsaWIgbW9kdWxlIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoLgorICBGaXggYnkgUmljaGFyZCBNLiBUZXcuCisKKy0gSXNzdWUgIzk5MjM6IFRoZSBtYWlsY2FwIG1vZHVsZSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIHBhdGgKKyAgc2VwYXJhdG9yIGZvciB0aGUgTUFJTENBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBub24tUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgzNTogRm9sbG93IHVwIHRvICM2NTYwIHRoYXQgdW5jb25kaXRpb25hbGx5IHByZXZlbnRzIHVzZSBvZiB0aGUKKyAgdW5lbmNyeXB0ZWQgc2VuZG1zZy9yZWN2bXNnIEFQSXMgb24gU1NMIHdyYXBwZWQgc29ja2V0cy4gUGF0Y2ggYnkgRGF2aWQKKyAgV2F0c29uLgorCistIElzc3VlICMxMjgwMzogU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSBub3cgYWNjZXB0cyBhIHBhc3N3b3JkIGFyZ3VtZW50CisgIHRvIGJlIHVzZWQgaWYgdGhlIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIFBhdGNoIGJ5IEFkYW0gU2ltcGtpbnMuCisKKy0gSXNzdWUgIzExNjU3OiBGaXggc2VuZGluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgMjU1IG92ZXIgYSBtdWx0aXByb2Nlc3NpbmcKKyAgUGlwZS4KKworLSBJc3N1ZSAjMTI4MTE6IHRhYm5hbm55LmNoZWNrKCkgbm93IHByb21wdGx5IGNsb3NlcyBjaGVja2VkIGZpbGVzLiBQYXRjaCBieQorICBBbnRob255IEJyaWdncy4KKworLSBJc3N1ZSAjNjU2MDogVGhlIHNlbmRtc2cvcmVjdm1zZyBBUEkgaXMgbm93IGV4cG9zZWQgYnkgdGhlIHNvY2tldCBtb2R1bGUKKyAgd2hlbiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSwgc3VwcG9ydGluZyBwcm9jZXNzaW5nIG9mCisgIGFuY2lsbGFyeSBkYXRhIGluIHB1cmUgUHl0aG9uIGNvZGUuIFBhdGNoIGJ5IERhdmlkIFdhdHNvbiBhbmQgSGVpa28gV3VuZHJhbS4KKworLSBJc3N1ZSAjMTIzMjY6IE9uIExpbnV4LCBzeXMucGxhdGZvcm0gZG9lc24ndCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uCisgIGFueW1vcmUuIEl0IGlzIG5vdyBhbHdheXMgJ2xpbnV4JywgaW5zdGVhZCBvZiAnbGludXgyJyBvciAnbGludXgzJyBkZXBlbmRpbmcKKyAgb24gdGhlIExpbnV4IHZlcnNpb24gdXNlZCB0byBidWlsZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMjEzOiBGaXggYSBidWZmZXJpbmcgYnVnIHdpdGggaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB0aGF0CisgIGNvdWxkIGFwcGVhciBvbiBCdWZmZXJlZFJhbmRvbSBzdHJlYW1zLgorCistIElzc3VlICMxMjc3ODogUmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIEpTT04tZW5jb2RpbmcgYSBsYXJnZQorICBjb250YWluZXIgb2YgbWFueSBzbWFsbCBvYmplY3RzLgorCistIElzc3VlICMxMjY1MDogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzdWJwcm9jZXNzLlBvcGVuIGNvdWxkIGxlYWsKKyAgcmVzb3VyY2VzIChGRC96b21iaWUpIHdoZW4ga2lsbGVkIGF0IHRoZSB3cm9uZyB0aW1lLgorCistIElzc3VlICMxMjc0NDogRml4IGluZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzIGJldHdlZW4gMioqMzEgYW5kCisgIDIqKjYzIG9uIHN5c3RlbXMgd2l0aCBhIDY0LWJpdCBDICJsb25nIi4KKworLSBJc3N1ZSAjMTI2NDY6IEFkZCBhbiAnZW9mJyBhdHRyaWJ1dGUgdG8gemxpYi5EZWNvbXByZXNzLCB0byBtYWtlIGl0IGVhc2llciB0bworICBkZXRlY3QgdHJ1bmNhdGVkIGlucHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzExNTEzOiBGaXggZXhjZXB0aW9uIGhhbmRsaW5nIGBgdGFyZmlsZS5UYXJGaWxlLmd6b3BlbigpYGAgd2hlbgorICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorCistIElzc3VlICMxMjY4NzogRml4IGEgcG9zc2libGUgYnVmZmVyaW5nIGJ1ZyB3aGVuIHVucGlja2xpbmcgdGV4dCBtb2RlCisgIChwcm90b2NvbCAwLCBtb3N0bHkpIHBpY2tsZXMuCisKKy0gSXNzdWUgIzEwMDg3OiBGaXggdGhlIGh0bWwgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgorCistIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcworICBpbiBvcy5raWxsKCkuCisKKy0gSXNzdWUgIzEzMTIxOiBhZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBtYXRoIG9wZXJhdG9ycyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIEFkZCBzdXBwb3J0IGZvciB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIElzc3VlICMxMjY4MzogdXJscGFyc2UgdXBkYXRlZCB0byBpbmNsdWRlIHN2biBhcyBzY2hlbWVzIHRoYXQgdXNlcyByZWxhdGl2ZQorICBwYXRocy4gKHN2biBmcm9tIDEuNSBvbndhcmRzIHN1cHBvcnQgcmVsYXRpdmUgcGF0aCkuCisKKy0gSXNzdWUgIzEyNjU1OiBFeHBvc2UgZnVuY3Rpb25zIGZyb20gc2NoZWQuaCBpbiB0aGUgb3MgbW9kdWxlOiBzY2hlZF95aWVsZCgpLAorICBzY2hlZF9zZXRzY2hlZHVsZXIoKSwgc2NoZWRfZ2V0c2NoZWR1bGVyKCksIHNjaGVkX3NldHBhcmFtKCksCisgIHNjaGVkX2dldF9taW5fcHJpb3JpdHkoKSwgc2NoZWRfZ2V0X21heF9wcmlvcml0eSgpLCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKSwKKyAgc2NoZWRfZ2V0YWZmaW5pdHkoKSwgc2NoZWRfc2V0YWZmaW5pdHkoKS4KKworLSBBZGQgVGhyZWFkRXJyb3IgdG8gdGhyZWFkaW5nLl9fYWxsX18uCisKKy0gSXNzdWVzICMxMTEwNCwgIzg2ODg6IEZpeCB0aGUgYmVoYXZpb3Igb2YgZGlzdHV0aWxzJyBzZGlzdCBjb21tYW5kIHdpdGgKKyAgbWFudWFsbHktbWFpbnRhaW5lZCBNQU5JRkVTVCBmaWxlcy4KKworLSBJc3N1ZSAjMTEyODE6IHNtdHBsaWIuU1RNUCBnZXRzIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciwgd2hpY2ggYWRkcyB0aGUKKyAgYWJpbGl0eSB0byBiaW5kIHRvIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIG9uIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlCisgIGludGVyZmFjZXMuIFBhdGNoIGJ5IFBhdWxvIFNjYXJkaW5lLgorCistIElzc3VlICMxMjQ2NDogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5LmNsZWFudXAoKSBzaG91bGQgbm90IGZvbGxvdworICBzeW1saW5rczogZml4IGl0LiBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjODg4NzogInB5ZG9jIHNvbWVidWlsdGluLnNvbWVtZXRob2QiIChvciBoZWxwKCdzb21lYnVpbHRpbi5zb21lbWV0aG9kJykKKyAgaW4gUHl0aG9uIGNvZGUpIG5vdyBmaW5kcyB0aGUgZG9jIG9mIHRoZSBtZXRob2QuCisKKy0gSXNzdWUgIzEwOTY4OiBSZW1vdmUgaW5kaXJlY3Rpb24gaW4gdGhyZWFkaW5nLiAgVGhlIHB1YmxpYyBuYW1lcyAoRXZlbnQsCisgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgorICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcworICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKKyAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KKworLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgorCistIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCisgIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KKworLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcworICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KKworLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCisKKy0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKKyAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgorCistIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKKyAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKKyAgdW5idWZmZXJlZCB3cml0ZXMuCisKKy0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgorCistIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KKworLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgorCistIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKKyAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKKyAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5CisgIEphY2VrIEtvbmllY3pueS4KKworLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCisgIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgorCistIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKKyAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgorICBMaW51eCAzLjAuCisKKy0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCisgIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCisKKy0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQorICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgorCistIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCisgIFByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgorICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgorCistIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KKyAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCisgIFNlcm5hLgorCistIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCisKKy0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KKworLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhIGVuZGlhbiBkaWZmZXJlbnQgdGhhbgorICB0aGUgcGFyZW50IHN0cnVjdHVyZS4gUGF0Y2ggYnkgVmxhZCBSaXNjdXRpYS4KKworLSBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlIF9DSFVOS19TSVpFIGF0dHJpYnV0ZSBvZiBhCisgIFRleHRJT1dyYXBwZXIgdG8gYSBodWdlIHZhbHVlLCBub3QgVHlwZUVycm9yLgorCistIElzc3VlICMxMjUwNDogQ2xvc2UgZmlsZSBoYW5kbGVzIGluIGEgdGltZWx5IG1hbm5lciBpbiBwYWNrYWdpbmcuZGF0YWJhc2UuCisgIFRoaXMgZml4ZXMgYSBidWcgd2l0aCB0aGUgcmVtb3ZlICh1bmluc3RhbGwpIGZlYXR1cmUgb24gV2luZG93cy4KKworLSBJc3N1ZXMgIzEyMTY5IGFuZCAjMTA1MTA6IEZhY3RvciBvdXQgY29kZSB1c2VkIGJ5IHZhcmlvdXMgcGFja2FnaW5nIGNvbW1hbmRzCisgIHRvIG1ha2UgSFRUUCBQT1NUIHJlcXVlc3RzLCBhbmQgbWFrZSBzdXJlIGl0IHVzZXMgQ1JMRi4KKworLSBJc3N1ZSAjMTIwMTY6IE11bHRpYnl0ZSBDSksgZGVjb2RlcnMgbm93IHJlc3luY2hyb25pemUgZmFzdGVyLiBUaGV5IG9ubHkKKyAgaWdub3JlIHRoZSBmaXJzdCBieXRlIG9mIGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsCisgIGInXHhmZlxuJy5kZWNvZGUoJ2diMjMxMicsICdyZXBsYWNlJykgZ2l2ZXMgJ1x1ZmZmZFxuJyBpbnN0ZWFkIG9mICdcdWZmZmQnLgorCistIElzc3VlICMxMjQ1OTogdGltZS5zbGVlcCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBzbGVlcCBsZW5ndGggaXMKKyAgbmVnYXRpdmUsIGluc3RlYWQgb2YgYW4gaW5maW5pdGUgc2xlZXAgb24gV2luZG93cyBvciByYWlzaW5nIGFuIElPRXJyb3Igb24KKyAgTGludXggZm9yIGV4YW1wbGUsIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIG9uIGFsbCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaHRtbF9nZXRmaWxlKCkgbm93IHVzZXMgdG9rZW5pemUub3BlbigpIHRvIHN1cHBvcnQKKyAgUHl0aG9uIHNjcmlwdHMgdXNpbmcgYSBlbmNvZGluZyBkaWZmZXJlbnQgdGhhbiBVVEYtOCAocmVhZCB0aGUgY29kaW5nIGNvb2tpZQorICBvZiB0aGUgc2NyaXB0KS4KKworLSBJc3N1ZSAjMTI0OTM6IHN1YnByb2Nlc3M6IFBvcGVuLmNvbW11bmljYXRlKCkgbm93IGFsc28gaGFuZGxlcyBFSU5UUiBlcnJvcnMKKyAgaWYgdGhlIHByb2Nlc3MgaGFzIG9ubHkgb25lIHBpcGUuCisKKy0gSXNzdWUgIzEyNDY3OiB3YXJuaW5nczogZml4IGEgcmFjZSBjb25kaXRpb24gaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQKKyAgc2h1dGRvd24sIGlmIGdsb2JhbHMoKVsnX19maWxlX18nXSBpcyBOb25lLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGltcG9ydGZpbGUoKSBub3cgb3BlbnMgdGhlIFB5dGhvbiBzY3JpcHQgaW4gYmluYXJ5IG1vZGUsCisgIGluc3RlYWQgb2YgdGV4dCBtb2RlIHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHJ1bnB5OiBydW5fcGF0aCgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gc3VwcG9ydCBvdGhlciBlbmNvZGluZ3MKKyAgdGhhbiBVVEYtOCAoc2NyaXB0cyB1c2luZyB0aGUgY29kaW5nIGNvb2tpZSkuCisKKy0gSXNzdWUgIzEyNDUxOiB4bWwuZG9tLnB1bGxkb206IHBhcnNlKCkgbm93IG9wZW5zIGZpbGVzIGluIGJpbmFyeSBtb2RlIGluc3RlYWQKKyAgb2YgdGhlIHRleHQgbW9kZSAodXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjE0NzogQWRqdXN0IHRoZSBuZXctaW4tMy4yIHNtdHBsaWIuc2VuZF9tZXNzYWdlIG1ldGhvZCBmb3IgYmV0dGVyCisgIGNvbmZvcm1hbmNlIHRvIHRoZSBSRkNzOiAgY29ycmVjdGx5IGhhbmRsZSBTZW5kZXIgYW5kIFJlc2VudC0gaGVhZGVycy4KKworLSBJc3N1ZSAjMTIzNTI6IEZpeCBhIGRlYWRsb2NrIGluIG11bHRpcHJvY2Vzc2luZy5IZWFwIHdoZW4gYSBibG9jayBpcyBmcmVlZCBieQorICB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hpbGUgdGhlIEhlYXAgbG9jayBpcyBoZWxkLgorCistIElzc3VlICMxMjQ2MjogdGltZS5zbGVlcCgpIG5vdyBpbW1lZGlhdGVseSBjYWxscyB0aGUgKFB5dGhvbikgc2lnbmFsIGhhbmRsZXIKKyAgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGluc3RlYWQgb2YgaGF2aW5nIHRvIHdhaXQgdW50aWwgdGhlIG5leHQKKyAgaW5zdHJ1Y3Rpb24uCisKKy0gSXNzdWUgIzEyNDQyOiBuZXcgc2h1dGlsLmRpc2tfdXNhZ2UgZnVuY3Rpb24sIHByb3ZpZGluZyB0b3RhbCwgdXNlZCBhbmQgZnJlZQorICBkaXNrIHNwYWNlIHN0YXRpc3RpY3MuCisKKy0gSXNzdWUgIzEyNDUxOiBUaGUgWEluY2x1ZGUgZGVmYXVsdCBsb2FkZXIgb2YgeG1sLmV0cmVlIG5vdyBkZWNvZGVzIGZpbGVzIGZyb20KKyAgVVRGLTggaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nIGlmIHRoZSBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkLiBJdCBub3cKKyAgYWxzbyBvcGVucyBYTUwgZmlsZXMgZm9yIHRoZSBwYXJzZXIgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZCBvZiB0aGUgdGV4dCBtb2RlCisgIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IGRvY3Rlc3QuZGVidWdfc2NyaXB0KCkgZG9lc24ndCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZQorICBhbnltb3JlIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jLnN5bm9wc2lzKCkgbm93IHJlYWRzIHRoZSBlbmNvZGluZyBjb29raWUgaWYgYXZhaWxhYmxlLAorICB0byByZWFkIHRoZSBQeXRob24gc2NyaXB0IGZyb20gdGhlIHJpZ2h0IGVuY29kaW5nLgorCistIElzc3VlICMxMjQ1MTogZGlzdHV0aWxzIG5vdyBvcGVucyB0aGUgc2V0dXAgc2NyaXB0IGluIGJpbmFyeSBtb2RlIHRvIHJlYWQgdGhlCisgIGVuY29kaW5nIGNvb2tpZSwgaW5zdGVhZCBvZiBvcGVuaW5nIGl0IGluIFVURi04LgorCistIElzc3VlICM5NTE2OiBPbiBNYWMgT1MgWCwgY2hhbmdlIERpc3R1dGlscyB0byBubyBsb25nZXIgZ2xvYmFsbHkgYXR0ZW1wdCB0bworICBjaGVjayBvciBzZXQgdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlCisgIGludGVycHJldGVyIHByb2Nlc3MuICBUaGlzIGNvdWxkIGNhdXNlIGZhaWx1cmVzIGluIG5vbi1EaXN0dXRpbHMgc3VicHJvY2Vzc2VzCisgIGFuZCB3YXMgdW5yZWxpYWJsZSBzaW5jZSB0ZXN0cyBvciB1c2VyIHByb2dyYW1zIGNvdWxkIG1vZGlmeSB0aGUgaW50ZXJwcmV0ZXIKKyAgZW52aXJvbm1lbnQgYWZ0ZXIgRGlzdHV0aWxzIHNldCBpdC4gIEluc3RlYWQsIGhhdmUgRGlzdHV0aWxzIHNldCB0aGUKKyAgZGVwbG95bWVudCB0YXJnZXQgb25seSBpbiB0aGUgZW52aXJvbm1lbnQgb2YgZWFjaCBidWlsZCBzdWJwcm9jZXNzLiAgSXQgaXMKKyAgc3RpbGwgcG9zc2libGUgdG8gZ2xvYmFsbHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc2V0dGluZworICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgYmVmb3JlIGxhdW5jaGluZyB0aGUgaW50ZXJwcmV0ZXI7IGl0cyB2YWx1ZSBtdXN0IGJlCisgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUsIHRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRoZSBpbnRlcnByZXRlcgorICB3YXMgYnVpbHQuICBBbHNvLCBpbXBsZW1lbnQgdGhlIHNhbWUgaGFuZGxpbmcgaW4gcGFja2FnaW5nLgorCistIElzc3VlICMxMjQyMjogSW4gdGhlIGNvcHkgbW9kdWxlLCBkb24ndCBzdG9yZSBvYmplY3RzIHRoYXQgYXJlIHRoZWlyIG93biBjb3B5CisgIGluIHRoZSBtZW1vIGRpY3QuCisKKy0gSXNzdWUgIzEyMzAzOiBBZGQgc2lnd2FpdGluZm8oKSBhbmQgc2lndGltZWR3YWl0KCkgdG8gdGhlIHNpZ25hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNDA0OiBSZW1vdmUgQzg5IGluY29tcGF0aWJsZSBjb2RlIGZyb20gbW1hcCBtb2R1bGUuIFBhdGNoIGJ5IEFraXJhCisgIEtpdGFkYS4KKworLSBJc3N1ZSAjMTg3NDogZW1haWwgbm93IGRldGVjdHMgYW5kIHJlcG9ydHMgYXMgYSBkZWZlY3QgdGhlIHByZXNlbmNlIG9mCisgIGFueSBDVEUgb3RoZXIgdGhhbiA3Yml0LCA4Yml0LCBvciBiaW5hcnkgb24gYSBtdWx0aXBhcnQuCisKKy0gSXNzdWUgIzEyMzgzOiBGaXggc3VicHJvY2VzcyBtb2R1bGUgd2l0aCBlbnY9e306IGRvbid0IGNvcHkgdGhlIGVudmlyb25tZW50CisgIHZhcmlhYmxlcywgc3RhcnQgd2l0aCBhbiBlbXB0eSBlbnZpcm9ubWVudC4KKworLSBJc3N1ZSAjMTE2Mzc6IEZpeCBzdXBwb3J0IGZvciBpbXBvcnRpbmcgcGFja2FnaW5nIHNldHVwIGhvb2tzIGZyb20gdGhlCisgIHByb2plY3QgZGlyZWN0b3J5LgorCistIElzc3VlICM2NzcxOiBNb3ZlZCB0aGUgY3Vyc2VzLndyYXBwZXIgZnVuY3Rpb24gZnJvbSB0aGUgc2luZ2xlLWZ1bmN0aW9uCisgIHdyYXBwZXIgbW9kdWxlIGludG8gX19pbml0X18sIGVsaW1pbmF0aW5nIHRoZSBtb2R1bGUuICBTaW5jZSBfX2luaXRfXyB3YXMKKyAgYWxyZWFkeSBpbXBvcnRpbmcgdGhlIGZ1bmN0aW9uIHRvIGN1cnNlcy53cmFwcGVyLCB0aGVyZSBpcyBubyBBUEkgY2hhbmdlLgorCistIElzc3VlICMxMTU4NDogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZSBoZWFkZXIKKyAgcGFzc2VkIHRvIGl0IGlzIGEgSGVhZGVyIG9iamVjdCwgYW5kIEhlYWRlci9tYWtlX2hlYWRlciBubyBsb25nZXIgZmFpbAorICBpZiBnaXZlbiBiaW5hcnkgdW5rbm93bi04Yml0IGlucHV0LgorCistIElzc3VlICMxMTcwMDogbWFpbGJveCBwcm94eSBvYmplY3QgY2xvc2UgbWV0aG9kcyBjYW4gbm93IGJlIGNhbGxlZCBtdWx0aXBsZQorICB0aW1lcyB3aXRob3V0IGVycm9yLgorCistIElzc3VlICMxMTc2NzogQ29ycmVjdCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBtYWlsYm94J3MgX19nZXRpdGVtX18gbWV0aG9kLgorCistIElzc3VlICMxMjEzMzogQWJzdHJhY3RIVFRQSGFuZGxlci5kb19vcGVuKCkgb2YgdXJsbGliLnJlcXVlc3QgY2xvc2VzIHRoZSBIVFRQCisgIGNvbm5lY3Rpb24gaWYgaXRzIGdldHJlc3BvbnNlKCkgbWV0aG9kIGZhaWxzIHdpdGggYSBzb2NrZXQgZXJyb3IuIFBhdGNoCisgIHdyaXR0ZW4gYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxMjI0MDogQWxsb3cgbXVsdGlwbGUgc2V0dXAgaG9va3MgaW4gcGFja2FnaW5nJ3Mgc2V0dXAuY2ZnIGZpbGVzLgorICBPcmlnaW5hbCBwYXRjaCBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzkyODQ6IEFsbG93IGluc3BlY3QuZmluZHNvdXJjZSgpIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiBkb2N0ZXN0CisgIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTE1OTU6IEZpeCBhc3NvcnRlZCBidWdzIGluIHBhY2thZ2luZy51dGlsLmNmZ190b19hcmdzLCBhCisgIGNvbXBhdGliaWxpdHkgaGVscGVyIGZvciB0aGUgZGlzdHV0aWxzLXBhY2thZ2luZyB0cmFuc2l0aW9uLiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgRXJpayBCcmF5LgorCistIElzc3VlICMxMjI4NzogSW4gb3NzYXVkaW9kZXYsIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpc24ndCBjbG9zZWQgaW4gc2V2ZXJhbAorICBtZXRob2RzLgorCistIElzc3VlICMxMjAwOTogRml4ZWQgcmVncmVzc2lvbiBpbiBuZXRyYyBmaWxlIGNvbW1lbnQgaGFuZGxpbmcuCisKKy0gSXNzdWUgIzEyMjQ2OiBXYXJuIGFuZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSBwcm9qZWN0IGZyb20KKyAgYW4gdW5pbnN0YWxsZWQgUHl0aG9uIChidWlsdCBpbiBhIHNvdXJjZSBjaGVja291dCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBUc2hlcGFuZyBMZWtob25raG9iZS4KKworLSBJc3N1ZSAjMTA2OTQ6IHppcGZpbGUgbm93IGlnbm9yZXMgZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIGEgemlwZmlsZS4KKworLSBJc3N1ZSAjMTIyODM6IEZpeGVkIHJlZ3Jlc3Npb24gaW4gc210cGxpYiBxdW90aW5nIG9mIGxlYWRpbmcgZG90cyBpbiBEQVRBLgorCistIElzc3VlICMxMDQyNDogQXJncGFyc2Ugbm93IGluY2x1ZGVzIHRoZSBuYW1lcyBvZiB0aGUgbWlzc2luZyByZXF1aXJlZAorICBhcmd1bWVudHMgaW4gdGhlIG1pc3NpbmcgYXJndW1lbnRzIGVycm9yIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzEyMTY4OiBTeXNMb2dIYW5kbGVyIG5vdyBhbGxvd3MgTlVMIHRlcm1pbmF0aW9uIHRvIGJlIGNvbnRyb2xsZWQgdXNpbmcKKyAgYSBuZXcgJ2FwcGVuZF9udWwnIGF0dHJpYnV0ZSBvbiB0aGUgaGFuZGxlci4KKworLSBJc3N1ZSAjMTE1ODM6IFNwZWVkIHVwIG9zLnBhdGguaXNkaXIgb24gV2luZG93cyBieSB1c2luZyBHZXRGaWxlQXR0cmlidXRlcworICBpbnN0ZWFkIG9mIG9zLnN0YXQuCisKKy0gSXNzdWUgIzEyMDIxOiBNYWtlIG1tYXAncyByZWFkKCkgbWV0aG9kIGFyZ3VtZW50IG9wdGlvbmFsLiBQYXRjaCBieSBQZXRyaQorICBMZWh0aW5lbi4KKworLSBJc3N1ZSAjOTIwNTogY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3Igbm93IGRldGVjdHMga2lsbGVkCisgIGNoaWxkcmVuIGFuZCByYWlzZXMgQnJva2VuUHJvY2Vzc1Bvb2wgaW4gc3VjaCBhIHNpdHVhdGlvbi4gIFByZXZpb3VzbHkgaXQKKyAgd291bGQgcmVsaWFibHkgZnJlZXplL2RlYWRsb2NrLgorCistIElzc3VlICMxMjA0MDogRXhwb3NlIGEgbmV3IGF0dHJpYnV0ZSBgYHNlbnRpbmVsYGAgb24gaW5zdGFuY2VzIG9mCisgIGBgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgYC4gIEFsc28sIGZpeCBQcm9jZXNzLmpvaW4oKSB0byBub3QgdXNlIHBvbGxpbmcKKyAgYW55bW9yZSwgd2hlbiBnaXZlbiBhIHRpbWVvdXQuCisKKy0gSXNzdWUgIzExODkzOiBSZW1vdmUgb2Jzb2xldGUgaW50ZXJuYWwgd3JhcHBlciBjbGFzcyBgYFNTTEZha2VGaWxlYGAgaW4gdGhlCisgIHNtdHBsaWIgbW9kdWxlLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTIwODA6IEZpeCBhIERlY2ltYWwucG93ZXIoKSBjYXNlIHRoYXQgdG9vayBhbiB1bnJlYXNvbmFibHkgbG9uZyB0aW1lCisgIHRvIGNvbXB1dGUuCisKKy0gSXNzdWUgIzEyMjIxOiBSZW1vdmUgX192ZXJzaW9uX18gYXR0cmlidXRlcyBmcm9tIHB5ZXhwYXQsIHBpY2tsZSwgdGFyZmlsZSwKKyAgcHlkb2MsIHRraW50ZXIsIGFuZCB4bWwucGFyc2Vycy5leHBhdC4gVGhpcyB3ZXJlIHVzZWxlc3MgdmVyc2lvbiBjb25zdGFudHMKKyAgbGVmdCBvdmVyIGZyb20gdGhlIE1lcmN1cmlhbCB0cmFuc2l0aW9uCisKKy0gTmFtZWQgdHVwbGVzIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIHZhcnMoKS4KKworLSBJc3N1ZSAjMTIwODU6IEZpeCBhbiBhdHRyaWJ1dGUgZXJyb3IgaW4gc3VicHJvY2Vzcy5Qb3BlbiBkZXN0cnVjdG9yIGlmIHRoZQorICBjb25zdHJ1Y3RvciBoYXMgZmFpbGVkLCBlLmcuIGJlY2F1c2Ugb2YgYW4gdW5kZWNsYXJlZCBrZXl3b3JkIGFyZ3VtZW50LiBQYXRjaAorICB3cml0dGVuIGJ5IE9sZWcgT3NobXlhbi4KKworLSBJc3N1ZSAjMTIwMjg6IE1ha2UgdGhyZWFkaW5nLl9nZXRfaWRlbnQoKSBwdWJsaWMsIHJlbmFtZSBpdCB0bworICB0aHJlYWRpbmcuZ2V0X2lkZW50KCkgYW5kIGRvY3VtZW50IGl0LiBUaGlzIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IHVzZWQgdXNpbmcKKyAgX3RocmVhZC5nZXRfaWRlbnQoKS4KKworLSBJc3N1ZSAjMTIxNzE6IEluY3JlbWVudGFsRW5jb2Rlci5yZXNldCgpIG9mIENKSyBjb2RlY3MgKG11bHRpYnl0ZWNvZGVjKSBjYWxscworICBlbmNyZXNldCgpIGluc3RlYWQgb2YgZGVjcmVzZXQoKS4KKworLSBJc3N1ZSAjMTIyMTg6IFJlbW92ZWQgd3NnaXJlZi5lZ2ctaW5mby4KKworLSBJc3N1ZSAjMTIxOTY6IEFkZCBwaXBlMigpIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk4NTA2NDogTWFrZSBwbGlzdGxpYiBtb3JlIHJlc2lsaWVudCB0byBmYXVsdHkgaW5wdXQgcGxpc3RzLgorICBQYXRjaCBieSBNaGVyIE1vdnNpc3lhbi4KKworLSBJc3N1ZSAjMTYyNTogQloyRmlsZSBhbmQgYnoyLmRlY29tcHJlc3MoKSBub3cgc3VwcG9ydCBtdWx0aS1zdHJlYW0gZmlsZXMuCisgIEluaXRpYWwgcGF0Y2ggYnkgTmlyIEFpZGVzLgorCistIElzc3VlICMxMjE3NTogQnVmZmVyZWRSZWFkZXIucmVhZCgtMSkgbm93IGNhbGxzIHJhdy5yZWFkYWxsKCkgaWYgYXZhaWxhYmxlLgorCistIElzc3VlICMxMjE3NTogRmlsZUlPLnJlYWRhbGwoKSBub3cgb25seSByZWFkcyB0aGUgZmlsZSBwb3NpdGlvbiBhbmQgc2l6ZQorICBvbmNlLgorCistIElzc3VlICMxMjE3NTogUmF3SU9CYXNlLnJlYWRhbGwoKSBub3cgcmV0dXJucyBOb25lIGlmIHJlYWQoKSByZXR1cm5zIE5vbmUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gSU9FcnJvcgorICBpZiB0aGUgZmlsZSBpcyBjbG9zZWQuCisKKy0gSXNzdWUgIzExMTA5OiBOZXcgc2VydmljZV9hY3Rpb24gbWV0aG9kIGZvciBCYXNlU2VydmVyLCB1c2VkIGJ5IEZvcmtpbmdNaXhJbgorICBjbGFzcyBmb3IgY2xlYW51cC4gSW5pdGlhbCBQYXRjaCBieSBKdXN0aW4gV2Fya2VudGluLgorCistIElzc3VlICMxMjA0NTogQXZvaWQgZHVwbGljYXRlIGV4ZWN1dGlvbiBvZiBjb21tYW5kIGluCisgIGN0eXBlcy51dGlsLl9nZXRfc29uYW1lKCkuICBQYXRjaCBieSBTaWppbiBKb3NlcGguCisKKy0gSXNzdWUgIzEwODE4OiBSZW1vdmUgdGhlIFRrIEdVSSBhbmQgdGhlIHNlcnZlKCkgZnVuY3Rpb24gb2YgdGhlIHB5ZG9jIG1vZHVsZSwKKyAgcHlkb2MgLWcgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yIGFuZCBpdCBoYXMgYSBuZXcgZW5oYW5jZWQgd2ViCisgIHNlcnZlci4KKworLSBJc3N1ZSAjMTQ0MTUzMDogSW4gaW1hcGxpYiwgcmVhZCB0aGUgZGF0YSBpbiBvbmUgY2h1bmsgdG8gc3BlZWQgdXAgbGFyZ2UKKyAgcmVhZHMgYW5kIHNpbXBsaWZ5IGNvZGUuCisKKy0gSXNzdWUgIzEyMDcwOiBGaXggdGhlIE1ha2VmaWxlIHBhcnNlciBvZiB0aGUgc3lzY29uZmlnIG1vZHVsZSB0byBoYW5kbGUKKyAgY29ycmVjdGx5IHJlZmVyZW5jZXMgdG8gImJvZ3VzIHZhcmlhYmxlIiAoZS5nLiAicHJlZml4PSQvb3B0L3B5dGhvbiIpLgorCistIElzc3VlICMxMjEwMDogRG9uJ3QgcmVzZXQgaW5jcmVtZW50YWwgZW5jb2RlcnMgb2YgQ0pLIGNvZGVjcyBhdCBlYWNoIGNhbGwgdG8KKyAgdGhlaXIgZW5jb2RlKCkgbWV0aG9kIGFueW1vcmUsIGJ1dCBjb250aW51ZSB0byBjYWxsIHRoZSByZXNldCgpIG1ldGhvZCBpZiB0aGUKKyAgZmluYWwgYXJndW1lbnQgaXMgVHJ1ZS4KKworLSBJc3N1ZSAjMTIwNDk6IEFkZCBSQU5EX2J5dGVzKCkgYW5kIFJBTkRfcHNldWRvX2J5dGVzKCkgZnVuY3Rpb25zIHRvIHRoZSBzc2wKKyAgbW9kdWxlLgorCistIElzc3VlICM2NTAxOiBvcy5kZXZpY2VfZW5jb2RpbmcoKSByZXR1cm5zIE5vbmUgb24gV2luZG93cyBpZiB0aGUgYXBwbGljYXRpb24KKyAgaGFzIG5vIGNvbnNvbGUuCisKKy0gSXNzdWUgIzEyMTA1OiBBZGQgT19DTE9FWEVDIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEyMDc5OiBEZWNpbWFsKCdJbmZpbml0eScpLmZtYShEZWNpbWFsKCcwJyksICgzLjkxMjI0MzE4MTI2Nzg2ZSsxOSswaikpCisgIG5vdyByYWlzZXMgVHlwZUVycm9yIChyZWZsZWN0aW5nIHRoZSBpbnZhbGlkIHR5cGUgb2YgdGhlIDNyZCBhcmd1bWVudCkgcmF0aGVyCisgIHRoYW4gRGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLgorCistIElzc3VlICMxMjEyNDogemlwaW1wb3J0IGRvZXNuJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB6bGliLmRlY29tcHJlc3MoKSBhbnltb3JlCisgIHRvIGJlIGFibGUgdG8gdW5sb2FkIHRoZSBtb2R1bGUuCisKKy0gQWRkIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCBhbiBpbXByb3ZlZCBmb3JrIG9mIGRpc3R1dGlscyAoYWxzbyBrbm93biBhcworICBkaXN0dXRpbHMyKS4KKworLSBJc3N1ZSAjMTIwNjU6IGNvbm5lY3RfZXgoKSBvbiBhbiBTU0wgc29ja2V0IG5vdyByZXR1cm5zIHRoZSBvcmlnaW5hbCBlcnJubworICB3aGVuIHRoZSBzb2NrZXQncyB0aW1lb3V0IGV4cGlyZXMgKGl0IHVzZWQgdG8gcmV0dXJuIE5vbmUpLgorCistIElzc3VlICM4ODA5OiBUaGUgU01UUF9TU0wgY29uc3RydWN0b3IgYW5kIFNNVFAuc3RhcnR0bHMoKSBub3cgc3VwcG9ydAorICBwYXNzaW5nIGEgYGBjb250ZXh0YGAgYXJndW1lbnQgcG9pbnRpbmcgdG8gYW4gc3NsLlNTTENvbnRleHQgaW5zdGFuY2UuCisgIFBhdGNoIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTEwODg6IGRvbid0IGNyYXNoIHdoZW4gdXNpbmcgRjUgdG8gcnVuIGEgc2NyaXB0IGluIElETEUgb24gTWFjT1NYCisgIHdpdGggVGsgOC41LgorCistIElzc3VlICM5NTE2OiBJc3N1ZSAjOTUxNjogYXZvaWQgZXJyb3JzIGluIHN5c2NvbmZpZyB3aGVuIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICBpcyBzZXQgaW4gc2hlbGwuCisKKy0gSXNzdWUgIzg2NTA6IE1ha2UgemxpYiBtb2R1bGUgNjQtYml0IGNsZWFuLiBjb21wcmVzcygpLCBkZWNvbXByZXNzKCkgYW5kCisgIHRoZWlyIGluY3JlbWVudGFsIGNvdW50ZXJwYXJ0cyBub3cgcmFpc2UgT3ZlcmZsb3dFcnJvciBpZiBnaXZlbiBhbiBpbnB1dAorICBsYXJnZXIgdGhhbiA0R0IsIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGluZyB0aGUgaW5wdXQgYW5kIHJldHVybmluZworICBhbiBpbmNvcnJlY3QgcmVzdWx0LgorCistIElzc3VlICMxMjA1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBjbGVhcnMgdGhlIHVuY29uc3VtZWRfdGFpbAorICBhdHRyaWJ1dGUgd2hlbiBjYWxsZWQgd2l0aG91dCBhIG1heF9sZW5ndGggYXJndW1lbnQuCisKKy0gSXNzdWUgIzEyMDYyOiBGaXggYSBmbHVzaGluZyBidWcgd2hlbiBkb2luZyBhIGNlcnRhaW4gdHlwZSBvZiBJL08gc2VxdWVuY2UKKyAgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkK3dyaXRlIG1vZGUgKG5hbWVseTogcmVhZGluZywgc2Vla2luZyBhIGJpdCBmb3J3YXJkLAorICB3cml0aW5nLCB0aGVuIHNlZWtpbmcgYmVmb3JlIHRoZSBwcmV2aW91cyB3cml0ZSBidXQgc3RpbGwgd2l0aGluIGJ1ZmZlcmVkCisgIGRhdGEsIGFuZCB3cml0aW5nIGFnYWluKS4KKworLSBJc3N1ZSAjOTk3MTogV3JpdGUgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKCkuCisgIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCisKKy0gSXNzdWUgIzEwMjg6IFRrIHJldHVybnMgaW52YWxpZCBVbmljb2RlIG51bGwgaW4gJUE6IFVuaWNvZGVEZWNvZGVFcnJvci4KKyAgV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZAorICBJRExFIHRvIGV4aXQuICBDb252ZXJ0ZWQgdG8gdmFsaWQgVW5pY29kZSBudWxsIGluIFB5dGhvbkNtZCgpLgorCistIElzc3VlICMxMTc5OTogdXJsbGliLnJlcXVlc3QgQXV0aGVudGljYXRpb24gSGFuZGxlcnMgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3IKKyAgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiB1bnN1cHBvcnRlZCBBdXRoZW50aWNhdGlvbiBTY2hlbWUuIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IFl1dmFsIEdyZWVuZmllbGQuCisKKy0gSXNzdWUgIzEwNDE5LCAjNjAxMTogYnVpbGRfc2NyaXB0cyBjb21tYW5kIG9mIGRpc3R1dGlscyBoYW5kbGVzIGNvcnJlY3RseQorICBub24tQVNDSUkgcGF0aCAocGF0aCB0byB0aGUgUHl0aG9uIGV4ZWN1dGFibGUpLiBPcGVuIGFuZCB3cml0ZSB0aGUgc2NyaXB0IGluCisgIGJpbmFyeSBtb2RlLCBidXQgZW5zdXJlIHRoYXQgdGhlIHNoZWJhbmcgaXMgZGVjb2RhYmxlIGZyb20gVVRGLTggYW5kIGZyb20gdGhlCisgIGVuY29kaW5nIG9mIHRoZSBzY3JpcHQuCisKKy0gSXNzdWUgIzg0OTg6IEluIHNvY2tldC5hY2NlcHQoKSwgYWxsb3cgdG8gc3BlY2lmeSAwIGFzIGEgYmFja2xvZyB2YWx1ZSBpbgorICBvcmRlciB0byBhY2NlcHQgZXhhY3RseSBvbmUgY29ubmVjdGlvbi4gIFBhdGNoIGJ5IERhbmllbCBFdmVycy4KKworLSBJc3N1ZSAjMTIwMTE6IHNpZ25hbC5zaWduYWwoKSBhbmQgc2lnbmFsLnNpZ2ludGVycnVwdCgpIHJhaXNlIGFuIE9TRXJyb3IsCisgIGluc3RlYWQgb2YgYSBSdW50aW1lRXJyb3I6IE9TRXJyb3IgaGFzIGFuIGVycm5vIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMzcwOTogYWRkIGEgZmx1c2hfaGVhZGVycyBtZXRob2QgdG8gQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgd2hpY2gKKyAgbWFuYWdlcyB0aGUgc2VuZGluZyBvZiBoZWFkZXJzIHRvIG91dHB1dCBzdHJlYW0gYW5kIGZsdXNoaW5nIHRoZSBpbnRlcm5hbAorICBoZWFkZXJzIGJ1ZmZlci4gUGF0Y2ggY29udHJpYnV0aW9uIGJ5IEFuZHJldyBTY2hhYWYKKworLSBJc3N1ZSAjMTE3NDM6IFJld3JpdGUgbXVsdGlwcm9jZXNzaW5nIGNvbm5lY3Rpb24gY2xhc3NlcyBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTExNjQ6IFN0b3AgdHJ5aW5nIHRvIHVzZSBfeG1scGx1cyBpbiB0aGUgeG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE4ODg6IEFkZCBsb2cyIGZ1bmN0aW9uIHRvIG1hdGggbW9kdWxlLiBQYXRjaCB3cml0dGVuIGJ5IE1hcmsKKyAgRGlja2luc29uLgorCistIElzc3VlICMxMjAxMjogc3NsLlBST1RPQ09MX1NTTHYyIGJlY29tZXMgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzg0MDc6IFRoZSBzaWduYWwgaGFuZGxlciB3cml0ZXMgdGhlIHNpZ25hbCBudW1iZXIgYXMgYSBzaW5nbGUgYnl0ZQorICBpbnN0ZWFkIG9mIGEgbnVsIGJ5dGUgaW50byB0aGUgd2FrZXVwIGZpbGUgZGVzY3JpcHRvci4gU28gaXQgaXMgcG9zc2libGUgdG8KKyAgd2FpdCBtb3JlIHRoYW4gb25lIHNpZ25hbCBhbmQga25vdyB3aGljaCBzaWduYWxzIHdlcmUgcmFpc2VkLgorCistIElzc3VlICM4NDA3OiBBZGQgcHRocmVhZF9raWxsKCksIHNpZ3BlbmRpbmcoKSBhbmQgc2lnd2FpdCgpIGZ1bmN0aW9ucyB0byB0aGUKKyAgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE5Mjc6IFNNVFBfU1NMIG5vdyB1c2VzIHBvcnQgNDY1IGJ5IGRlZmF1bHQgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCisgIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTIwMDI6IGZ0cGxpYidzIGFib3J0KCkgbWV0aG9kIHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExOTE2OiBBZGQgYSBudW1iZXIgb2YgTWFjT1NYIHNwZWNpZmljIGRlZmluaXRpb25zIHRvIHRoZSBlcnJubyBtb2R1bGUuCisgIFBhdGNoIGJ5IFBpZXJyZSBDYXJyaWVyLgorCistIElzc3VlICMxMTk5OTogZml4ZWQgc3BvcmFkaWMgc3luYyBmYWlsdXJlIG1haWxib3guTWFpbGRpciBkdWUgdG8gaXRzIHRyeWluZyB0bworICBkZXRlY3QgbXRpbWUgY2hhbmdlcyBieSBjb21wYXJpbmcgdG8gdGhlIHN5c3RlbSBjbG9jayBpbnN0ZWFkIG9mIHRvIHRoZQorICBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgbXRpbWUuCisKKy0gSXNzdWUgIzExMDcyOiBhZGRlZCBNTFNEIGNvbW1hbmQgKFJGQy0zNjU5KSBzdXBwb3J0IHRvIGZ0cGxpYi4KKworLSBJc3N1ZSAjODgwODogVGhlIElNQVA0X1NTTCBjb25zdHJ1Y3RvciBub3cgYWxsb3dzIHBhc3NpbmcgYW4gU1NMQ29udGV4dAorICBwYXJhbWV0ZXIgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSBzZWN1cmUgY2hhbm5lbC4gIFBhdGNoIGJ5IFNpamluCisgIEpvc2VwaC4KKworLSBudHBhdGguc2FtZWZpbGUgZmFpbGVkIHRvIG5vdGljZSB0aGF0ICJhLnR4dCIgYW5kICJBLlRYVCIgcmVmZXIgdG8gdGhlIHNhbWUKKyAgZmlsZSBvbiBXaW5kb3dzIFhQLiBBcyBub3RpY2VkIGluIGlzc3VlICMxMDY4NC4KKworLSBJc3N1ZSAjMTIwMDA6IFdoZW4gYSBTU0wgY2VydGlmaWNhdGUgaGFzIGEgc3ViamVjdEFsdE5hbWUgd2l0aG91dCBhbnkKKyAgZE5TTmFtZSBlbnRyeSwgc3NsLm1hdGNoX2hvc3RuYW1lKCkgc2hvdWxkIHVzZSB0aGUgc3ViamVjdCdzIGNvbW1vbk5hbWUuCisgIFBhdGNoIGJ5IE5pY29sYXMgQmFyZWlsLgorCistIElzc3VlICMxMDc3NTogYXNzZXJ0UmFpc2VzLCBhc3NlcnRSYWlzZXNSZWdleCwgYXNzZXJ0V2FybnMsIGFuZAorICBhc3NlcnRXYXJuc1JlZ2V4IG5vdyBhY2NlcHQgYSBrZXl3b3JkIGFyZ3VtZW50ICdtc2cnIHdoZW4gdXNlZCBhcyBjb250ZXh0CisgIG1hbmFnZXJzLiAgSW5pdGlhbCBwYXRjaCBieSBXaW5zdG9uIEV3ZXJ0LgorCistIElzc3VlICMxMDY4NDogc2h1dGlsLm1vdmUgdXNlZCB0byBkZWxldGUgYSBmb2xkZXIgb24gY2FzZSBpbnNlbnNpdGl2ZQorICBmaWxlc3lzdGVtcyB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5hbWUgd2hlcmUgdGhlIHNhbWUgZXhjZXB0CisgIGZvciB0aGUgY2FzZS4KKworLSBJc3N1ZSAjMTE2NDc6IG9iamVjdHMgY3JlYXRlZCB1c2luZyBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyIG5vdyBzdXBwb3J0CisgIG1vcmUgdGhhbiBvbmUgY2FsbCB0byB0aGUgZnVuY3Rpb24gd2hlbiB1c2VkIGFzIGEgZGVjb3JhdG9yLiBJbml0aWFsIHBhdGNoCisgIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzExOTMwOiBSZW1vdmVkIGRlcHJlY2F0ZWQgdGltZS5hY2NlcHQyZHllYXIgdmFyaWFibGUuCisgIFJlbW92ZWQgeWVhciA+PSAxMDAwIHJlc3RyaWN0aW9uIGZyb20gZGF0ZXRpbWUuc3RyZnRpbWUuCisKKy0gbG9nZ2luZzogZG9uJ3QgZGVmaW5lIFF1ZXVlTGlzdGVuZXIgaWYgUHl0aG9uIGhhcyBubyB0aHJlYWQgc3VwcG9ydC4KKworLSBmdW5jdG9vbHMuY21wX3RvX2tleSgpIG5vdyB3b3JrcyB3aXRoIGNvbGxlY3Rpb25zLkhhc2hhYmxlKCkuCisKKy0gSXNzdWUgIzExMjc3OiBtbWFwLm1tYXAoKSBjYWxscyBmY250bChmZCwgRl9GVUxMRlNZTkMpIG9uIE1hYyBPUyBYIHRvIGdldAorICBhcm91bmQgYSBtbWFwIGJ1ZyB3aXRoIHNwYXJzZSBmaWxlcy4gUGF0Y2ggd3JpdHRlbiBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICM4NDA3OiBBZGQgc2lnbmFsLnB0aHJlYWRfc2lnbWFzaygpIGZ1bmN0aW9uIHRvIGZldGNoIGFuZC9vciBjaGFuZ2UgdGhlCisgIHNpZ25hbCBtYXNrIG9mIHRoZSBjYWxsaW5nIHRocmVhZC4KKworLSBJc3N1ZSAjMTE4NTg6IGNvbmZpZ3BhcnNlci5FeHRlbmRlZEludGVycG9sYXRpb24gZXhwZWN0ZWQgbG93ZXItY2FzZSBzZWN0aW9uCisgIG5hbWVzLgorCistIElzc3VlICMxMTMyNDogQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSkgbm93IHdvcmtzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTE4MTE6IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCkgaXMgbm93IElQdjYtY29tcGF0aWJsZS4gIFBhdGNoCisgIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTE3NjM6IGRvbid0IHVzZSBkaWZmbGliIGluIFRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsIGlmIHRoZQorICBzdHJpbmdzIGFyZSB0b28gbG9uZy4KKworLSBJc3N1ZSAjMTEyMzY6IGdldHBhc3MuZ2V0cGFzcyByZXNwb25kcyB0byBjdHJsLWMgb3IgY3RybC16IG9uIHRlcm1pbmFsLgorCistIElzc3VlICMxMTg1NjogU3BlZWQgdXAgcGFyc2luZyBvZiBKU09OIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMDA1OiB0aHJlYWRpbmcuUkxvY2soKS5fcmVsZWFzZV9zYXZlKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBsb2NrIHdhcyBub3QgYWNxdWlyZWQuCisKKy0gSXNzdWUgIzExMjU4OiBTcGVlZCB1cCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSB1bmRlciBMaW51eCBieSBhIGZhY3RvcgorICBvZiA1IHRvIDEwLiAgSW5pdGlhbCBwYXRjaCBieSBKb25hcyBILgorCistIElzc3VlICMxMTM4MjogVHJpdmlhbCBzeXN0ZW0gY2FsbHMsIHN1Y2ggYXMgZHVwKCkgb3IgcGlwZSgpLCBuZWVkbid0CisgIHJlbGVhc2UgdGhlIEdJTC4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEyMjM6IEFkZCB0aHJlYWRpbmcuX2luZm8oKSBmdW5jdGlvbiBwcm92aWRpbmcgaW5mb3JtYXRpb25zIGFib3V0CisgIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzExNzMxOiBzaW1wbGlmeS9lbmhhbmNlIGVtYWlsIHBhcnNlci9nZW5lcmF0b3IgQVBJIGJ5IGludHJvZHVjaW5nCisgIHBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTc2ODogVGhlIHNpZ25hbCBoYW5kbGVyIG9mIHRoZSBzaWduYWwgbW9kdWxlIG9ubHkgY2FsbHMKKyAgUHlfQWRkUGVuZGluZ0NhbGwoKSBmb3IgdGhlIGZpcnN0IHNpZ25hbCB0byBmaXggYSBkZWFkbG9jayBvbiByZWVudHJhbnQgb3IKKyAgcGFyYWxsZWwgY2FsbHMuIFB5RXJyX1NldEludGVycnVwdCgpIHdyaXRlcyBhbHNvIGludG8gdGhlIHdha2UgdXAgZmlsZS4KKworLSBJc3N1ZSAjMTE0OTI6IGZpeCBzZXZlcmFsIGlzc3VlcyB3aXRoIGhlYWRlciBmb2xkaW5nIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxMTg1MjogQWRkIG1pc3NpbmcgaW1wb3J0cyBhbmQgdXBkYXRlIHRlc3RzLgorCistIElzc3VlICMxMTg3NTogY29sbGVjdGlvbnMuT3JkZXJlZERpY3QncyBfX3JlZHVjZV9fIHdhcyB0ZW1wb3JhcmlseQorICBtdXRhdGluZyB0aGUgb2JqZWN0IGluc3RlYWQgb2YganVzdCB3b3JraW5nIG9uIGEgY29weS4KKworLSBJc3N1ZSAjMTE0Njc6IEZpeCB1cmxwYXJzZSBiZWhhdmlvciB3aGVuIGhhbmRsaW5nIHVybHMgd2hpY2ggY29udGFpbnMgc2NoZW1lCisgIHNwZWNpZmljIHBhcnQgb25seSBkaWdpdHMuIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIGNvbGxlY3Rpb25zLkNvdW50ZXIoKS5jb3B5KCkgbm93IHdvcmtzIGNvcnJlY3RseSBmb3Igc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTE0NzQ6IEZpeCB0aGUgYnVnIHdpdGggdXJsMnBhdGhuYW1lKCkgaGFuZGxpbmcgb2YgJy9DfC8nIG9uIFdpbmRvd3MuCisgIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIElzc3VlICMxMTY4NDogY29tcGxldGUgZW1haWwucGFyc2VyIGJ5dGVzIEFQSSBieSBhZGRpbmcgQnl0ZXNIZWFkZXJQYXJzZXIuCisKKy0gVGhlIGJ6MiBtb2R1bGUgbm93IGhhbmRsZXMgNEdpQisgaW5wdXQgYnVmZmVycyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzkyMzM6IEZpeCBqc29uLmxvYWRzKCd7fScpIHRvIHJldHVybiBhIGRpY3QgKGluc3RlYWQgb2YgYSBsaXN0KSwgd2hlbgorICBfanNvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxMTgzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IGludHJvc3BlY3Rpb24gY29kZSBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExNzAzOiB1cmxsaWIyLmdldHVybCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHVybCB3aGVuIHRoZSBvcmlnaW5hbAorICB1cmwgY29udGFpbnMgI2ZyYWdtZW50LgorCistIElzc3VlICMxMDAxOTogRml4ZWQgcmVncmVzc2lvbiBpbiBqc29uIG1vZHVsZSB3aGVyZSBhbiBpbmRlbnQgb2YgMCBzdG9wcGVkCisgIGFkZGluZyBuZXdsaW5lcyBhbmQgYWN0ZWQgaW5zdGVhZCBsaWtlICdOb25lJy4KKworLSBJc3N1ZSAjMTExODY6IHB5ZG9jIGlnbm9yZXMgYSBtb2R1bGUgaWYgaXRzIG5hbWUgY29udGFpbnMgYSBzdXJyb2dhdGUKKyAgY2hhcmFjdGVyIGluIHRoZSBpbmRleCBvZiBtb2R1bGVzLgorCistIElzc3VlICMxMTgxNTogVXNlIGEgbGlnaHQtd2VpZ2h0IFNpbXBsZVF1ZXVlIGZvciB0aGUgcmVzdWx0IHF1ZXVlIGluCisgIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorCistIElzc3VlICM1MTYyOiBUcmVhdCBzZXJ2aWNlcyBsaWtlIGZyb3plbiBleGVjdXRhYmxlcyB0byBhbGxvdyBjaGlsZCBzcGF3bmluZworICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIG9uIFdpbmRvd3MuCisKKy0gbG9nZ2luZy5iYXNpY0NvbmZpZyBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgJ2hhbmRsZXJzJyBhcmd1bWVudCB0YWtpbmcgYW4KKyAgaXRlcmFibGUgb2YgaGFuZGxlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIHJvb3QgbG9nZ2VyLiBBZGRpdGlvbmFsIHBhcmFtZXRlcgorICBjaGVja3Mgd2VyZSBhbHNvIGFkZGVkIHRvIGJhc2ljQ29uZmlnLgorCistIElzc3VlICMxMTgxNDogRml4IGxpa2VseSB0eXBvIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sLl90ZXJtaW5hdGUoKS4KKworLSBJc3N1ZSAjMTE3NDc6IEZpeCByYW5nZSBmb3JtYXR0aW5nIGluIGRpZmZsaWIuY29udGV4dF9kaWZmKCkgYW5kCisgIGRpZmZsaWIudW5pZmllZF9kaWZmKCkuCisKKy0gSXNzdWUgIzg0Mjg6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sIHdoZW4gdGVybWluYXRpbmcKKyAgd29ya2VyIHByb2Nlc3NlczogbmV3IHByb2Nlc3NlcyB3b3VsZCBiZSBzcGF3bmVkIHdoaWxlIHRoZSBwb29sIGlzIGJlaW5nCisgIHNodXQgZG93bi4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMjY1MDogcmUuZXNjYXBlKCkgbm8gbG9uZ2VyIGVzY2FwZXMgdGhlICdfJy4KKworLSBJc3N1ZSAjMTE3NTc6IHNlbGVjdC5zZWxlY3QoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIHRpbWVvdXQKKyAgaXMgcGFzc2VkIChwcmV2aW91c2x5LCBhIHNlbGVjdC5lcnJvciB3aXRoIEVJTlZBTCB3b3VsZCBiZSByYWlzZWQpLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICM3MzExOiBmaXggaHRtbC5wYXJzZXIgdG8gYWNjZXB0IG5vbi1BU0NJSSBhdHRyaWJ1dGUgdmFsdWVzLgorCistIElzc3VlICMxMTYwNTogZW1haWwucGFyc2VyLkJ5dGVzRmVlZFBhcnNlciB3YXMgaW5jb3JyZWN0bHkgY29udmVydGluZworICBtdWx0aXBhcnQgc3VicGFydHMgd2l0aCBhbiA4LWJpdCBDVEUgaW50byB1bmljb2RlIGluc3RlYWQgb2YgcHJlc2VydmluZyB0aGUKKyAgYnl0ZXMuCisKKy0gSXNzdWUgIzE2OTA2MDg6IGVtYWlsLnV0aWwuZm9ybWF0YWRkciBpcyBub3cgUkZDIDIwNDcgYXdhcmU6ICBpdCBub3cgaGFzIGEKKyAgY2hhcnNldCBwYXJhbWV0ZXIgdGhhdCBkZWZhdWx0cyB0byB1dGYtOCBhbmQgaXMgdXNlZCBhcyB0aGUgY2hhcnNldCBmb3IgUkZDCisgIDIwNDcgZW5jb2Rpbmcgd2hlbiB0aGUgcmVhbG5hbWUgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEwOTYzOiBFbnN1cmUgdGhhdCBzdWJwcm9jZXNzLmNvbW11bmljYXRlKCkgbmV2ZXIgcmFpc2VzIEVQSVBFLgorCistIElzc3VlICMxMDc5MTogSW1wbGVtZW50IG1pc3NpbmcgbWV0aG9kIEd6aXBGaWxlLnJlYWQxKCksIGFsbG93aW5nIEd6aXBGaWxlCisgIHRvIGJlIHdyYXBwZWQgaW4gYSBUZXh0SU9XcmFwcGVyLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcwNzogQWRkZWQgYSBmYXN0IEMgdmVyc2lvbiBvZiBmdW5jdG9vbHMuY21wX3RvX2tleSgpLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMTY4ODogQWRkIHNxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfdHJhY2VfY2FsbGJhY2soKS4gIFBhdGNoIGJ5CisgIFRvcnN0ZW4gTGFuZHNjaG9mZi4KKworLSBJc3N1ZSAjMTE3NDY6IEZpeCBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpIHRvIGFjY2VwdCBlbGxpcHRpYyBjdXJ2ZQorICBwcml2YXRlIGtleXMuCisKKy0gSXNzdWUgIzU4NjM6IFJld3JpdGUgQloyRmlsZSBpbiBwdXJlIFB5dGhvbiwgYW5kIGFsbG93IGl0IHRvIGFjY2VwdAorICBmaWxlLWxpa2Ugb2JqZWN0cyB1c2luZyBhIG5ldyBgYGZpbGVvYmpgYCBjb25zdHJ1Y3RvciBhcmd1bWVudC4gIFBhdGNoIGJ5CisgIE5hZGVlbSBWYXdkYS4KKworLSB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTYW1lRWxlbWVudHMgaGFzIGJlZW4gcmVtb3ZlZC4KKworLSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIGluaXRmc2VuY29kaW5nKCkgd2FzIG5vdAorICBjYWxsZWQgeWV0OiBkZXRlY3QgYm9vdHN0cmFwIChzdGFydHVwKSBpc3N1ZXMgZWFybGllci4KKworLSBJc3N1ZSAjMTEzOTM6IEFkZCB0aGUgbmV3IGZhdWx0aGFuZGxlciBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjE4OiBGaXggdGhlIHRpbWVvdXQgbG9naWMgaW4gdGhyZWFkaW5nLkxvY2suYWNxdWlyZSgpIHVuZGVyIFdpbmRvd3MuCisKKy0gUmVtb3ZlZCB0aGUgJ3N0cmljdCcgYXJndW1lbnQgdG8gZW1haWwucGFyc2VyLlBhcnNlciwgd2hpY2ggaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBzaW5jZSBQeXRob24gMi40LgorCistIElzc3VlICMxMTI1NjogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3Mgb24gZnVuY3Rpb25zIHRoYXQgdGFrZSBvbmx5IGtleXdvcmQKKyAgYXJndW1lbnRzLgorCistIElzc3VlICMxMTY5NjogRml4IElEIGdlbmVyYXRpb24gaW4gbXNpbGliLgorCistIGl0ZXJ0b29scy5hY2N1bXVsYXRlIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAqZnVuYyogYXJndW1lbnQgZm9yCisgIGEgdXNlci1zdXBwbGllZCBiaW5hcnkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzExNjkyOiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVtbyBmdW5jdGlvbnMgaW4gc3VicHJvY2VzcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk2OTY6IEZpeCBleGNlcHRpb24gaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IHhkcmxpYi5QYWNrZXIucGFja19pbnQgd2hlbgorICB0cnlpbmcgdG8gcGFjayBhIG5lZ2F0aXZlIChpbi1yYW5nZSkgaW50ZWdlci4KKworLSBJc3N1ZSAjMTE2NzU6IG11bHRpcHJvY2Vzc2luZy5bUmF3XUFycmF5IG9iamVjdHMgY3JlYXRlZCBmcm9tIGFuIGludGVnZXIgc2l6ZQorICBhcmUgbm93IHplcm9lZCBvbiBjcmVhdGlvbi4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIHNwZWNpZmllZCBieSB0aGUKKyAgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNzYzOTogRml4IHNob3J0IGZpbGUgbmFtZSBnZW5lcmF0aW9uIGluIGJkaXN0X21zaQorCistIElzc3VlICMxMTY1OTogRml4IFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3N1YnByb2Nlc3MgaW50cm9kdWNlZCBieSAjMTE0NTkuCisgIFBhdGNoIGJ5IEJlbiBIYXlkZW4uCisKKy0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CisgIGNvbmN1cnJlbnQuZnV0dXJlcy4KKworLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCisgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQorICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCisKKy0gSXNzdWUgIzg3NTQ6IEhhdmUgaW1wb3J0bGliIHVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIGluIGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMTU5MTogUHJldmVudCAiaW1wb3J0IHNpdGUiIGZyb20gbW9kaWZ5aW5nIHN5cy5wYXRoIHdoZW4gcHl0aG9uCisgIHdhcyBzdGFydGVkIHdpdGggLVMuCisKKy0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIG5vdyBhZGRzIGEgX3NvdXJjZSBhdHRyaWJ1dGUgdG8gdGhlIGdlbmVyYXRlZAorICBjbGFzcy4gIFRoaXMgbWFrZSB0aGUgc291cmNlIG1vcmUgYWNjZXNzaWJsZSB0aGFuIHRoZSBvdXRkYXRlZAorICAidmVyYm9zZSIgb3B0aW9uIHdoaWNoIHByaW50cyB0byBzdGRvdXQgYnV0IGRvZXNuJ3QgbWFrZSB0aGUgc291cmNlCisgIHN0cmluZyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExMzcxOiBNYXJrIGdldG9wdCBlcnJvciBtZXNzYWdlcyBhcyBsb2NhbGl6YWJsZS4gIFBhdGNoIGJ5IEZpbGlwCisgIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExMzMzOiBBZGQgX19zbG90c19fIHRvIGNvbGxlY3Rpb25zIEFCQ3MuCisKKy0gSXNzdWUgIzExNjI4OiBjbXBfdG9fa2V5IGdlbmVyYXRlZCBjbGFzcyBzaG91bGQgdXNlIF9fc2xvdHNfXy4KKworLSBJc3N1ZSAjMTE2NjY6IGxldCBoZWxwKCkgZGlzcGxheSBuYW1lZCB0dXBsZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzCisgIHRoYXQgc3RhcnQgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZS4KKworLSBJc3N1ZSAjMTE2NjI6IE1ha2UgdXJsbGliIGFuZCB1cmxsaWIyIGlnbm9yZSByZWRpcmVjdGlvbnMgaWYgdGhlCisgIHNjaGVtZSBpcyBub3QgSFRUUCwgSFRUUFMgb3IgRlRQIChDVkUtMjAxMS0xNTIxKS4KKworLSBJc3N1ZSAjNTUzNzogRml4IHRpbWUyaXNveigpIGFuZCB0aW1lMm5ldHNjYXBlKCkgZnVuY3Rpb25zIG9mCisgIGh0dHBsaWIuY29va2llamFyIGZvciBleHBpcmF0aW9uIHllYXIgZ3JlYXRlciB0aGFuIDIwMzggb24gMzItYml0IHN5c3RlbXMuCisKKy0gSXNzdWUgIzQzOTE6IFVzZSBwcm9wZXIgZ2V0dGV4dCBwbHVyYWwgZm9ybXMgaW4gb3B0cGFyc2UuCisKKy0gSXNzdWUgIzExMTI3OiBSYWlzZSBhIFR5cGVFcnJvciB3aGVuIHRyeWluZyB0byBwaWNrbGUgYSBzb2NrZXQgb2JqZWN0LgorCistIElzc3VlICMxMTU2MzogQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKKyAgY2xhc3Mgd2hpY2ggaGVscHMgaW4gY2xvc2luZyBvZiBzb2NrZXRzIGFmdGVyIGNvbm5lY3Rpb24gaXMgb3Zlci4gUGF0Y2gKKyAgY29udHJpYnV0aW9ucyBieSBKZWZmIE1jTmVpbCBhbmQgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTQ1OTogQSBgYGJ1ZnNpemVgYCB2YWx1ZSBvZiAwIGluIHN1YnByb2Nlc3MuUG9wZW4oKSByZWFsbHkgY3JlYXRlcworICB1bmJ1ZmZlcmVkIHBpcGVzLCBzdWNoIHRoYXQgc2VsZWN0KCkgd29ya3MgcHJvcGVybHkgb24gdGhlbS4KKworLSBJc3N1ZSAjNTQyMTogRml4IG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIG9uZSBvZiBzb2NrZXQuc2VuZHRvKCkncworICBhcmd1bWVudHMgaGFzIHRoZSB3cm9uZyB0eXBlLiAgUGF0Y2ggYnkgTmlraXRhIFZldG9zaGtpbi4KKworLSBJc3N1ZSAjMTA4MTI6IEFkZCBzb21lIGV4dHJhIHBvc2l4IGZ1bmN0aW9ucyB0byB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICMxMDk3OTogdW5pdHRlc3Qgc3Rkb3V0IGJ1ZmZlcmluZyBub3cgd29ya3Mgd2l0aCBjbGFzcyBhbmQgbW9kdWxlCisgIHNldHVwIGFuZCB0ZWFyZG93bi4KKworLSBJc3N1ZSAjMTE1Nzc6IGZpeCBSZXNvdXJjZVdhcm5pbmcgdHJpZ2dlcmVkIGJ5IGltcHJvdmVkIGJpbmhleCB0ZXN0IGNvdmVyYWdlCisKKy0gSXNzdWUgIzExMjQzOiBmaXggdGhlIHBhcmFtZXRlciBxdWVyeWluZyBtZXRob2RzIG9mIE1lc3NhZ2UgdG8gd29yayBpZgorICB0aGUgaGVhZGVycyBjb250YWluIHVuLWVuY29kZWQgbm9uLUFTQ0lJIGRhdGEuCisKKy0gSXNzdWUgIzExNDAxOiBmaXggaGFuZGxpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlOyB0aGlzIGZpeGVzIGEgcmVncmVzc2lvbgorICByZWxhdGl2ZSB0byBQeXRob24yIGFuZCB0aGUgcmVzdWx0IGlzIG5vdyB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uMi4KKworLSBJc3N1ZSAjOTI5ODogYmFzZTY0IGJvZGllcyB3ZXJlbid0IGJlaW5nIGZvbGRlZCB0byBsaW5lIGxlbmd0aHMgbGVzcyB0aGFuIDc4LAorICB3aGljaCB3YXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIuICBVbmxpa2UgUHl0aG9uMiwgdGhlIGxhc3QgbGluZQorICBvZiB0aGUgZm9sZGVkIGJvZHkgbm93IGVuZHMgd2l0aCBhIGNhcnJpYWdlIHJldHVybi4KKworLSBJc3N1ZSAjMTE1NjA6IHNodXRpbC51bnBhY2tfYXJjaGl2ZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGZvcm1hdAorICBwYXJhbWV0ZXIuIFBhdGNoIGJ5IEV2YW4gRGFuZHJlYS4KKworLSBJc3N1ZSAjNTg3MDogQWRkIGBzdWJwcm9jZXNzLkRFVk5VTExgIGNvbnN0YW50LgorCistIElzc3VlICMxMTEzMzogZml4IHR3byBjYXNlcyB3aGVyZSBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGNhbiB0cmlnZ2VyIGNvZGUKKyAgZXhlY3V0aW9uLiBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExNTY5OiB1c2UgYWJzb2x1dGUgcGF0aCB0byB0aGUgc3lzY3RsIGNvbW1hbmQgaW4gbXVsdGlwcm9jZXNzaW5nIHRvCisgIGVuc3VyZSB0aGF0IGl0IHdpbGwgYmUgZm91bmQgcmVnYXJkbGVzcyBvZiB0aGUgc2hlbGwgUEFUSC4gVGhpcyBlbnN1cmVzCisgIHRoYXQgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCB3b3JrcyBvbiBkZWZhdWx0IGluc3RhbGxzIG9mIE1hY09TWC4KKworLSBJc3N1ZSAjMTE1MDE6IGRpc3V0aWxzLmFyY2hpdmVfdXRpbHMubWFrZV96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB6bGliIGlzCisgIG5vdCBpbnN0YWxsZWQuIEluc3RlYWQsIHRoZSB6aXBmaWxlLlpJUF9TVE9SRUQgY29tcHJlc3Npb24gaXMgdXNlZCB0byBjcmVhdGUKKyAgdGhlIFppcEZpbGUuIFBhdGNoIGJ5IE5hdGFsaWEgQi4gQmlkYXJ0LgorCistIElzc3VlICMxMTI4OTogYHNtdHAuU01UUGAgY2xhc3MgaXMgbm93IGEgY29udGV4dCBtYW5hZ2VyIHNvIGl0IGNhbiBiZSB1c2VkCisgIGluIGEgYHdpdGhgIHN0YXRlbWVudC4gIENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEuCisKKy0gSXNzdWUgIzExNTU0OiBGaXhlZCBzdXBwb3J0IGZvciBKYXBhbmVzZSBjb2RlY3M7IHByZXZpb3VzbHkgdGhlIGJvZHkgb3V0cHV0CisgIGVuY29kaW5nIHdhcyBub3QgZG9uZSBpZiBldWMtanAgb3Igc2hpZnQtamlzIHdhcyBzcGVjaWZpZWQgYXMgdGhlIGNoYXJzZXQuCisKKy0gSXNzdWUgIzExNTA5OiBTaWduaWZpY2FudGx5IGluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgZmlsZWlucHV0LgorICBQYXRjaCBieSBEZW52ZXIgQ29uZXliZWFyZSBhdCBQeUNvbiAyMDExIFNwcmludHMuCisKKy0gSXNzdWUgIzExNDA3OiBgVGVzdENhc2UucnVuYCByZXR1cm5zIHRoZSByZXN1bHQgb2JqZWN0IHVzZWQgb3IgY3JlYXRlZC4KKyAgQ29udHJpYnV0ZWQgYnkgSmFuYXRoYW4gSGFydGxleS4KKworLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBPUyBYIHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKKyAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KKworLSBJc3N1ZSAjMTE0OTE6IGRibS5lcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIHdoZW4gZGJtLm9wZW4gaXMgY2FsbGVkIHdpdGgKKyAgdGhlICJuIiBhcyB0aGUgZmxhZyBhcmd1bWVudCBhbmQgdGhlIGZpbGUgZXhpc3RzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcworICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZ2VuZXJhbCBsb2dpYy4KKworLSBJc3N1ZSAjMTE2MjQ3NzogUG9zdGVsIFByaW5jaXBsZSBhZGp1c3RtZW50IHRvIGVtYWlsIGRhdGUgcGFyc2luZzogaGFuZGxlIHRoZQorICBmYWN0IHRoYXQgc29tZSBub24tY29tcGxpYW50IE1VQXMgdXNlICcuJyBpbnN0ZWFkIG9mICc6JyBpbiB0aW1lIHNwZWNzLgorCistIElzc3VlICMxMTEzMTogRml4IHNpZ24gb2YgemVybyBpbiBkZWNpbWFsLkRlY2ltYWwgcGx1cyBhbmQgbWludXMKKyAgb3BlcmF0aW9ucyB3aGVuIHRoZSByb3VuZGluZyBtb2RlIGlzIFJPVU5EX0ZMT09SLgorCistIElzc3VlICM5OTM1OiBTcGVlZCB1cCBwaWNrbGluZyBvZiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMuCisKKy0gSXNzdWUgIzU2MjI6IEZpeCBjdXJzZXMud3JhcHBlciB0byByYWlzZSBjb3JyZWN0IGV4Y2VwdGlvbiBpZiBjdXJzZXMKKyAgaW5pdGlhbGl6YXRpb24gZmFpbHMuCisKKy0gSXNzdWUgIzExNDA4OiBJbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCksIG9ubHkgY2FsbCBnZXR0aW1lb2ZkYXkoKSB3aGVuCisgIHJlYWxseSBuZWNlc3NhcnkuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExMzkxOiBXcml0aW5nIHRvIGEgbW1hcCBvYmplY3QgY3JlYXRlZCB3aXRoCisgIGBgbW1hcC5QUk9UX1JFQUR8bW1hcC5QUk9UX0VYRUNgYCB3b3VsZCBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYQorICBUeXBlRXJyb3IuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzk3OTU6IGFkZCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydCBmb3Igbm50cGxpYi5OTlRQIGNsYXNzLgorCistIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgorICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQorICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgorCistIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycworICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCisKKy0gSXNzdWUgIzExMzc3OiBEZXByZWNhdGUgcGxhdGZvcm0ucG9wZW4oKSBhbmQgcmVpbXBsZW1lbnQgaXQgd2l0aCBvcy5wb3BlbigpLgorCistIElzc3VlICM4NTEzOiBPbiBVTklYLCBzdWJwcm9jZXNzIHN1cHBvcnRzIGJ5dGVzIGNvbW1hbmQgc3RyaW5nLgorCistIElzc3VlICMxMDg2NjogQWRkIHNvY2tldC5zZXRob3N0bmFtZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjMTExNDA6IExvY2sucmVsZWFzZSgpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3Igd2hlbiBhdHRlbXB0aW5nCisgIHRvIHJlbGVhc2UgYW4gdW5hY3F1aXJlZCBsb2NrLCBhcyBjbGFpbWVkIGluIHRoZSB0aHJlYWRpbmcgZG9jdW1lbnRhdGlvbi4KKyAgVGhlIF90aHJlYWQuZXJyb3IgZXhjZXB0aW9uIGlzIG5vdyBhbiBhbGlhcyBvZiBSdW50aW1lRXJyb3IuICBQYXRjaCBieQorICBGaWxpcCBHcnVzemN6ecWEc2tpLiAgUGF0Y2ggZm9yIF9kdW1teV90aHJlYWQgYnkgQXltZXJpYyBBdWd1c3Rpbi4KKworLSBJc3N1ZSAjODU5NDogZnRwbGliIG5vdyBwcm92aWRlcyBhIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHdoaWNoCisgIChhZGRyZXNzLCBwb3J0KSB0byBiaW5kIHRvIGJlZm9yZSBjb25uZWN0aW5nLgorCistIElzc3VlICMxMTMyNjogQWRkIHRoZSBtaXNzaW5nIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbiBmb3IgU1NMIHNvY2tldHMsCisgIGFuZCBtYWtlIGl0IHdvcmsgZm9yIG5vbi1ibG9ja2luZyBjb25uZWN0cy4KKworLSBJc3N1ZSAjMTEyOTc6IEFkZCBjb2xsZWN0aW9ucy5DaGFpbk1hcCgpLgorCistIElzc3VlICMxMDc1NTogQWRkIHRoZSBwb3NpeC5mbGlzdGRpcigpIGZ1bmN0aW9uLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzQ3NjE6IEFkZCB0aGUgYGAqYXQoKWBgIGZhbWlseSBvZiBmdW5jdGlvbnMgKG9wZW5hdCgpLCBldGMuKSB0byB0aGUKKyAgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzczMjI6IFRyeWluZyB0byByZWFkIGZyb20gYSBzb2NrZXQncyBmaWxlLWxpa2Ugb2JqZWN0IGFmdGVyIGEgdGltZW91dAorICBvY2N1cnJlZCBub3cgcmFpc2VzIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbG9zaW5nIGRhdGEuCisKKy0gSXNzdWUgIzExMjkxOiBwb3BsaWIuUE9QIG5vIGxvbmdlciBzdXBwcmVzc2VzIGVycm9ycyBvbiBxdWl0KCkuCisKKy0gSXNzdWUgIzExMTc3OiBhc3luY29yZSdzIGNyZWF0ZV9zb2NrZXQoKSBhcmd1bWVudHMgY2FuIG5vdyBiZSBvbWl0dGVkLgorCistIElzc3VlICM2MDY0OiBBZGQgYSBgYGRhZW1vbmBgIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHRocmVhZGluZy5UaHJlYWQKKyAgYW5kIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGNvbnN0cnVjdG9ycyBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUKKyAgZGVmYXVsdCBiZWhhdmlvdXIgb2YgaW5oZXJpdGluZyB0aGUgZGFlbW9uaWMgcHJvcGVydHkgZnJvbSB0aGUgY3VycmVudAorICB0aHJlYWQvcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTA5NTY6IEJ1ZmZlcmVkIEkvTyBjbGFzc2VzIHJldHJ5IHJlYWRpbmcgb3Igd3JpdGluZyBhZnRlciBhIHNpZ25hbAorICBoYXMgYXJyaXZlZCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorCistIElzc3VlICMxMDc4NDogTmV3IG9zLmdldHByaW9yaXR5KCkgYW5kIG9zLnNldHByaW9yaXR5KCkgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTExNDogRml4IGNhdGFzdHJvcGhpYyBwZXJmb3JtYW5jZSBvZiB0ZWxsKCkgb24gdGV4dCBmaWxlcyAodXAKKyAgdG8gMTAwMHggZmFzdGVyIGluIHNvbWUgY2FzZXMpLiAgSXQgaXMgc3RpbGwgb25lIHRvIHR3byBvcmRlciBvZiBtYWduaXR1ZGVzCisgIHNsb3dlciB0aGFuIGJpbmFyeSB0ZWxsKCkuCisKKy0gSXNzdWUgIzEwODgyOiBBZGQgb3Muc2VuZGZpbGUgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzEwODY4OiBBbGxvdyB1c2FnZSBvZiB0aGUgcmVnaXN0ZXIgbWV0aG9kIG9mIGFuIEFCQyBhcyBhIGNsYXNzCisgIGRlY29yYXRvci4KKworLSBJc3N1ZSAjMTEyMjQ6IEZpeGVkIGEgcmVncmVzc2lvbiBpbiB0YXJmaWxlIHRoYXQgYWZmZWN0ZWQgdGhlIGZpbGUtbGlrZQorICBvYmplY3RzIHJldHVybmVkIGJ5IFRhckZpbGUuZXh0cmFjdGZpbGUoKSByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIG1lbW9yeQorICBjb25zdW1wdGlvbiBhbmQgZmFpbHVyZXMgd2l0aCB0aGUgc3RyZWFtIGludGVyZmFjZS4KKworLSBJc3N1ZSAjMTA5MjQ6IEFkZGluZyBzYWx0IGFuZCBNb2R1bGFyIENyeXB0IEZvcm1hdCB0byBjcnlwdCBsaWJyYXJ5LgorICBNb3ZlZCBvbGQgQyB3cmFwcGVyIHRvIF9jcnlwdCwgYW5kIGFkZGVkIGEgUHl0aG9uIHdyYXBwZXIgd2l0aAorICBlbmhhbmNlZCBzYWx0IGdlbmVyYXRpb24gYW5kIHNpbXBsZXIgQVBJIGZvciBwYXNzd29yZCBnZW5lcmF0aW9uLgorCistIElzc3VlICMxMTA3NDogTWFrZSAndG9rZW5pemUnIHNvIGl0IGNhbiBiZSByZWxvYWRlZC4KKworLSBJc3N1ZSAjMTEwODU6IE1vdmVkIGNvbGxlY3Rpb25zIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBpbnRvIGEgc2VwYXJhdGUKKyAgbW9kdWxlIGNhbGxlZCBjb2xsZWN0aW9ucy5hYmMsIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IGltcG9ydGxpYi5hYmMuCisgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG5hbWVzIGFyZSBpbXBvcnRlZCBpbnRvIHRoZSBjb2xsZWN0aW9ucworICBtb2R1bGUuCisKKy0gSXNzdWUgIzQ2ODE6IEFsbG93IG1tYXAoKSB0byB3b3JrIG9uIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KKyAgNEdCLCBldmVuIG9uIDMyLWJpdCBidWlsZHMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLCBhZGFwdGVkIGZvcgorICAzMi1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTExNjk6IGNvbXBpbGVhbGwgbW9kdWxlIHVzZXMgcmVwcigpIHRvIGZvcm1hdCBmaWxlbmFtZXMgYW5kIHBhdGhzIHRvCisgIGVzY2FwZSBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgc2hvdyBzcGFjZXMuCisKKy0gSXNzdWUgIzExMDg5OiBGaXggcGVyZm9ybWFuY2UgaXNzdWUgbGltaXRpbmcgdGhlIHVzZSBvZiBDb25maWdQYXJzZXIoKQorICB3aXRoIGxhcmdlIGNvbmZpZyBmaWxlcy4KKworLSBJc3N1ZSAjMTAyNzY6IEZpeCB0aGUgcmVzdWx0cyBvZiB6bGliLmNyYzMyKCkgYW5kIHpsaWIuYWRsZXIzMigpIG9uIGJ1ZmZlcnMKKyAgbGFyZ2VyIHRoYW4gNEdCLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTM4ODogQWRkZWQgYSBjbGVhcigpIG1ldGhvZCB0byBNdXRhYmxlU2VxdWVuY2UKKworLSBJc3N1ZSAjMTExNzQ6IEFkZCBhcmdwYXJzZS5NZXRhdmFyVHlwZUhlbHBGb3JtYXR0ZXIsIHdoaWNoIHVzZXMgdHlwZSBuYW1lcworICBmb3IgdGhlIG5hbWVzIG9mIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ4OiBSYWlzZSBhbiBlYXJseSBlcnJvciBpZiBhcmdwYXJzZSBuYXJncyBhbmQgbWV0YXZhciBkb24ndCBtYXRjaC4KKworLSBJc3N1ZSAjODk4MjogSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGFyZ3BhcnNlIE5hbWVzcGFjZSBvYmplY3QuCisKKy0gSXNzdWUgIzkzNDM6IERvY3VtZW50IHRoYXQgYXJncGFyc2UgcGFyZW50IHBhcnNlcnMgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZQorICB0aGVpciBjaGlsZHJlbi4KKworLSBJc3N1ZSAjOTAyNjogRml4IG9yZGVyIG9mIGFyZ3BhcnNlIHN1Yi1jb21tYW5kcyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ3OiBGaXggZm9ybWF0dGluZyBmb3IgdHVwbGVzIGluIGFyZ3BhcnNlIHR5cGU9IGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMjE5MTogQWRkZWQgc2h1dGlsLmNob3duKCkgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG93bmVyIG9mIGEKKyAgZ2l2ZW4gcGF0aCBhbHNvIHNwZWNpZnlpbmcgdGhlaXIgbmFtZXMuCisKKy0gSXNzdWUgIzEzOTg4OiBUaGUgX2VsZW1lbnR0cmVlIGFjY2VsZXJhdG9yIGlzIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlLgorICBOb3cgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBiZWNvbWVzIGEgZGVwcmVjYXRlZCBhbGlhcyB0byBFbGVtZW50VHJlZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzY4MDc6IFJ1biBtc2lzdXBwb3J0Lm1hayBlYXJsaWVyLgorCistIElzc3VlICMxMDU4MDogTWlub3IgZ3JhbW1hciBjaGFuZ2UgaW4gV2luZG93cyBpbnN0YWxsZXIuCisKKy0gSXNzdWUgIzEzMzI2OiBDbGVhbiBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb3JyZWN0bHkgb24gT3BlbkJTRC4KKworLSBQRVAgMzkzOiB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtd2lkZS11bmljb2RlIGlzIHJlbW92ZWQuCisKKy0gSXNzdWUgIzEyODUyOiBTZXQgX1hPUEVOX1NPVVJDRSB0byA3MDAsIGluc3RlYWQgb2YgNjAwLCB0byBnZXQgUE9TSVggMjAwOAorICBmdW5jdGlvbnMgb24gT3BlbkJTRCAoZS5nLiBmZG9wZW5kaXIpLgorCistIElzc3VlICMxMTg2MzogUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBzeXN0ZW1zIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMgorICAoZm9sbG93aW5nIFBFUCAxMSkuICBUaGVzZSBzeXN0ZW1zIGFyZSBzeXN0ZW1zIHVzaW5nIE1hY2ggQyBUaHJlYWRzLAorICBTdW5PUyBsaWdodHdlaWdodCBwcm9jZXNzZXMsIEdOVSBwdGggdGhyZWFkcyBhbmQgSVJJWCB0aHJlYWRzLgorCistIElzc3VlICM4NzQ2OiBDb3JyZWN0IGZhdWx0eSBjb25maWd1cmUgY2hlY2tzIHNvIHRoYXQgb3MuY2hmbGFncygpIGFuZAorICBvcy5sY2hmbGFncygpIGFyZSBvbmNlIGFnYWluIGJ1aWx0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZXNlCisgIGZ1bmN0aW9ucyAoQlNEIGFuZCBPUyBYKS4gIEFsc28gYWRkIG5ldyBzdGF0IGZpbGUgZmxhZ3MgZm9yIE9TIFgKKyAgKFVGX0hJRERFTiBhbmQgVUZfQ09NUFJFU1NFRCkuCisKKy0gSXNzdWUgIzEwNjQ1OiBJbnN0YWxsaW5nIFB5dGhvbiBubyBsb25nZXIgY3JlYXRlcyBhCisgIFB5dGhvbi1YLlkuWi1weVguWS5lZ2ctaW5mbyBmaWxlIGluIHRoZSBsaWItZHlubG9hZCBkaXJlY3RvcnkuCisKKy0gRG8gbm90IGFjY2lkZW50YWxseSBpbmNsdWRlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBzcWxpdGUuaCB0d2ljZSB3aGVuCisgIGJ1aWxkaW5nIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzExMjE3OiBGb3IgNjQtYml0LzMyLWJpdCBNYWMgT1MgWCB1bml2ZXJzYWwgZnJhbWV3b3JrIGJ1aWxkcywKKyAgZW5zdXJlICJtYWtlIGluc3RhbGwiIGNyZWF0ZXMgc3ltbGlua3MgaW4gLS1wcmVmaXggYmluIGZvciB0aGUgIi0zMiIKKyAgZmlsZXMgaW4gdGhlIGZyYW1ld29yayBiaW4gZGlyZWN0b3J5IGxpa2UgdGhlIGluc3RhbGxlciBkb2VzLgorCistIElzc3VlICMxMTM0NzogVXNlIC0tbm8tYXMtbmVlZGVkIHdoZW4gbGlua2luZyBsaWJweXRob24zLnNvLgorCistIElzc3VlICMxMTQxMTogRml4ICdtYWtlIERFU1RESVI9JyB3aXRoIGEgcmVsYXRpdmUgZGVzdGluYXRpb24uCisKKy0gSXNzdWUgIzExMjY4OiBQcmV2ZW50IE1hYyBPUyBYIEluc3RhbGxlciBmYWlsdXJlIGlmIERvY3VtZW50YXRpb24KKyAgcGFja2FnZSBoYWQgcHJldmlvdXNseSBiZWVuIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE0OTU6IE9TRiBzdXBwb3J0IGlzIGVsaW1pbmF0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIuCisKKworSURMRQorLS0tLQorCistIElzc3VlICMxMTcxODogSURMRSdzIG9wZW4gbW9kdWxlIGRpYWxvZyBjb3VsZG4ndCBmaW5kIHRoZSBfX2luaXRfXy5weQorICBmaWxlIGluIGEgcGFja2FnZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDUzOiBwYXRjaGNoZWNrLnB5ICgibWFrZSBwYXRjaGNoZWNrIikgbm93IHdvcmtzIHdpdGggTVEgcGF0Y2hlcy4KKyAgUGF0Y2ggYnkgRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqS4KKworLSBJc3N1ZSAjMTM5MzA6IDJ0bzMgaXMgbm93IGFibGUgdG8gd3JpdGUgaXRzIGNvbnZlcnRlZCBvdXRwdXQgZmlsZXMgdG8gYW5vdGhlcgorICBkaXJlY3RvcnkgdHJlZSBhcyB3ZWxsIGFzIGNvcHlpbmcgdW5jaGFuZ2VkIGZpbGVzIGFuZCBhbHRlcmluZyB0aGUgZmlsZQorICBzdWZmaXguICBTZWUgaXRzIG5ldyAtbywgLVcgYW5kIC0tYWRkLXN1ZmZpeCBvcHRpb25zLiAgVGhpcyBtYWtlcyBpdCBtb3JlCisgIHVzZWZ1bCBpbiBtYW55IGF1dG9tYXRlZCBjb2RlIHRyYW5zbGF0aW9uIHdvcmtmbG93cy4KKworLSBJc3N1ZSAjMTM2Mjg6IHB5dGhvbi1nZGIucHkgaXMgbm93IGFibGUgdG8gcmV0cmlldmUgbW9yZSBmcmFtZXMgaW4gdGhlIFB5dGhvbgorICB0cmFjZWJhY2sgaWYgUHl0aG9uIGlzIG9wdGltaXplZC4KKworLSBJc3N1ZSAjMTE5OTY6IGxpYnB5dGhvbiAoZ2RiKSwgcmVwbGFjZSAicHktYnQiIGNvbW1hbmQgYnkgInB5LWJ0LWZ1bGwiIGFuZAorICBhZGQgYSBzbWFydGVyICJweS1idCIgY29tbWFuZCBwcmludGluZyBhIGNsYXNzaWMgUHl0aG9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTExNzk6IE1ha2UgY2NiZW5jaCB3b3JrIHVuZGVyIFB5dGhvbiAzLjEgYW5kIDIuNyBhZ2Fpbi4KKworLSBJc3N1ZSAjMTA2Mzk6IHJlaW5kZW50LnB5IG5vIGxvbmdlciBjb252ZXJ0cyBuZXdsaW5lcyBhbmQgd2lsbCByYWlzZQorICBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGNvbnZlcnQgYSBmaWxlIHdpdGggbWl4ZWQgbmV3bGluZXMuCisgICItLW5ld2xpbmUiIG9wdGlvbiBhZGRlZCB0byBzcGVjaWZ5IG5ldyBsaW5lIGNoYXJhY3Rlci4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzODQwOiBUaGUgZXJyb3IgbWVzc2FnZSBwcm9kdWNlZCBieSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIKKyAgd2hlbiBnaXZlbiBhIFVuaWNvZGUgc3RyaW5nIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICM5OTc1OiBzb2NrZXQ6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGZsb3dpbmZvIGFuZCBzY29wZV9pZC4gUGF0Y2ggYnkKKyAgVmlsbW9zIE5lYmVoYWouCisKKy0gSXNzdWUgIzc3Nzc6IHNvY2tldDogQWRkIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFBGX1JEUykgc3VwcG9ydC4KKworLSBJc3N1ZSAjMTMxNTk6IEZpbGVJTyBhbmQgQloyQ29tcHJlc3Nvci9CWjJEZWNvbXByZXNzb3Igbm93IHVzZSBhIGxpbmVhci10aW1lCisgIGJ1ZmZlciBncm93dGggc3RyYXRlZ3kgaW5zdGVhZCBvZiBhIHF1YWRyYXRpYy10aW1lIG9uZS4KKworLSBJc3N1ZSAjMTAxNDE6IHNvY2tldDogQWRkIFNvY2tldENBTiAoUEZfQ0FOKSBzdXBwb3J0LiBJbml0aWFsIHBhdGNoIGJ5CisgIE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzMDcwOiBGaXggYSBjcmFzaCB3aGVuIGEgVGV4dElPV3JhcHBlciBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUKKyAgd291bGQgYmUgZmluYWxpemVkIGFmdGVyIHRoZSByZWZlcmVuY2UgdG8gaXRzIHVuZGVybHlpbmcgQnVmZmVyZWRSV1BhaXIncworICB3cml0ZXIgZ290IGNsZWFyZWQgYnkgdGhlIEdDLgorCistIElzc3VlICMxMjg4MTogY3R5cGVzOiBGaXggc2VnZmF1bHQgd2l0aCBsYXJnZSBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMuCisKKy0gSXNzdWUgIzEzMDU4OiBvc3NhdWRpb2RldjogZml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgb24gZXJyb3IuIFBhdGNoIGJ5CisgIFRob21hcyBKYXJvc2NoLgorCistIElzc3VlICMxMzAxMzogY3R5cGVzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiBQeUNBcnJheVR5cGVfZnJvbV9jdHlwZS4KKyAgVGhhbmtzIHRvIFN1bWFuIFNhaGEgZm9yIGZpbmRpbmcgdGhlIGJ1ZyBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKy0gSXNzdWUgIzEzMDIyOiBGaXg6IF9tdWx0aXByb2Nlc3NpbmcucmVjdmZkKCkgZG9lc24ndCBjaGVjayB0aGF0CisgIGZpbGUgZGVzY3JpcHRvciB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCisKKy0gSXNzdWUgIzExNzI3MTE6IEFkZCAnbG9uZyBsb25nJyBzdXBwb3J0IHRvIHRoZSBhcnJheSBtb2R1bGUuCisgIEluaXRpYWwgcGF0Y2ggYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMjQ4MzogY3R5cGVzOiBGaXggYSBjcmFzaCB3aGVuIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGNhbGxiYWNrCisgIG9iamVjdCB0cmlnZ2VycyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKy0gSXNzdWUgIzEyOTUwOiBGaXggcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGluIG11bHRpcHJvY2Vzc2luZywgdW5kZXIKKyAgT3BlbkluZGlhbmEvSWxsdW1vcy4KKworLSBJc3N1ZSAjMTI3NjQ6IEZpeCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHRoZSBuYW1lIG9mIGEgU3RydWN0dXJlIGZpZWxkIGlzIG5vdAorICBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTEyNDE6IHN1YmNsYXNzZXMgb2YgY3R5cGVzLkFycmF5IGNhbiBub3cgYmUgc3ViY2xhc3NlZC4KKworLSBJc3N1ZSAjOTY1MTogRml4IGEgY3Jhc2ggd2hlbiBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoMCkgd2FzIHBhc3NlZCB0bworICBzb21lIGZ1bmN0aW9ucyBsaWtlIGZpbGUud3JpdGUoKS4KKworLSBJc3N1ZSAjMTAzMDk6IERlZmluZSBfR05VX1NPVVJDRSBzbyB0aGF0IG1yZW1hcCgpIGdldHMgdGhlIHByb3BlcgorICBzaWduYXR1cmUuICBXaXRob3V0IHRoaXMsIGFyY2hpdGVjdHVyZXMgd2hlcmUgc2l6ZW9mIHZvaWQqICE9IHNpemVvZiBpbnQgYXJlCisgIGJyb2tlbi4gIFBhdGNoIGdpdmVuIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzEyMDUxOiBGaXggc2VnZmF1bHQgaW4ganNvbi5kdW1wcygpIHdoaWxlIGVuY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjAxNzogRml4IHNlZ2ZhdWx0IGluIGpzb24ubG9hZHMoKSB3aGlsZSBkZWNvZGluZyBoaWdobHktbmVzdGVkCisgIG9iamVjdHMgdXNpbmcgdGhlIEMgYWNjZWxlcmF0aW9ucy4KKworLSBJc3N1ZSAjMTgzODogUHJldmVudCBzZWdmYXVsdCBpbiBjdHlwZXMsIHdoZW4gX2FzX3BhcmFtZXRlcl8gb24gYSBjbGFzcyBpcyBzZXQKKyAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTE2ODk6IEZpeCBhIHZhcmlhYmxlIHNjb3BpbmcgZXJyb3IgaW4gYW4gc3FsaXRlMyB0ZXN0CisKKy0gSXNzdWUgIzEzNzg2OiBSZW1vdmUgdW5pbXBsZW1lbnRlZCAndHJhY2UnIGxvbmcgb3B0aW9uIGZyb20gcmVncnRlc3QucHkuCisKKy0gSXNzdWUgIzEzNzI1OiBGaXggcmVncnRlc3QgdG8gcmVjb2duaXplIHRoZSBkb2N1bWVudGVkIC1kIGZsYWcuCisgIFBhdGNoIGJ5IEVybm8gVHVraWEuCisKKy0gSXNzdWUgIzEzMzA0OiBTa2lwIHRlc3QgY2FzZSBpZiB1c2VyIHNpdGUtcGFja2FnZXMgZGlzYWJsZWQgKC1zIG9yCisgIFBZVEhPTk5PVVNFUlNJVEUpLiAgKFBhdGNoIGJ5IENhcmwgTWV5ZXIpCisKKy0gSXNzdWUgIzU2NjE6IEFkZCBhIHRlc3QgZm9yIEVDT05OUkVTRVQvRVBJUEUgaGFuZGxpbmcgdG8gdGVzdF9hc3luY29yZS4gUGF0Y2gKKyAgYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzEzMjE4OiBGaXggdGVzdF9zc2wgZmFpbHVyZXMgb24gRGViaWFuL1VidW50dS4KKworLSBSZS1lbmFibGUgbGliMnRvMydzIHRlc3RfcGFyc2VyLnB5IHRlc3RzLCB0aG91Z2ggd2l0aCBhbiBleHBlY3RlZCBmYWlsdXJlCisgIChzZWUgaXNzdWUgMTMxMjUpLgorCistIElzc3VlICMxMjY1NjogQWRkIHRlc3RzIGZvciBJUHY2IGFuZCBVbml4IHNvY2tldHMgdG8gdGVzdF9hc3luY29yZS4KKworLSBJc3N1ZSAjNjQ4NDogQWRkIHVuaXQgdGVzdHMgZm9yIG1haWxjYXAgbW9kdWxlIChwYXRjaCBieSBHcmVnb3J5IE5vZmkpCisKKy0gSXNzdWUgIzExNjUxOiBJbXByb3ZlIHRoZSBNYWtlZmlsZSB0ZXN0IHRhcmdldHMgdG8gcnVuIG1vcmUgb2YgdGhlIHRlc3Qgc3VpdGUKKyAgbW9yZSBxdWlja2x5LiBUaGUgLS1tdWx0aXByb2Nlc3Mgb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIHJlZHVjaW5nCisgIHRoZSBhbW91bnQgb2YgdGltZSBuZWVkZWQgdG8gcnVuIHRoZSB0ZXN0cy4gIm1ha2UgdGVzdCIgYW5kICJtYWtlIHF1aWNrdGVzdCIKKyAgbm93IGluY2x1ZGUgc29tZSByZXNvdXJjZS1pbnRlbnNpdmUgdGVzdHMsIGJ1dCBubyBsb25nZXIgcnVuIHRoZSB0ZXN0IHN1aXRlCisgIHR3aWNlIHRvIGNoZWNrIGZvciBidWdzIGluIC5weWMgZ2VuZXJhdGlvbi4gVG9vbHMvc2NyaXB0cy9ydW5fdGVzdC5weSBwcm92aWRlcworICBhbiBlYXN5IHBsYXRmb3JtLWluZGVwZW5kZW50IHdheSB0byBydW4gdGVzdCBzdWl0ZSB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIHRoZSBwYWNrYWdpbmcgbW9kdWxlIGNhbiBub3cgcnVuIGZyb20gYW4KKyAgaW5zdGFsbGVkIFB5dGhvbi4KKworLSBJc3N1ZSAjMTIzMzE6IFRoZSB0ZXN0IHN1aXRlIGZvciBsaWIydG8zIGNhbiBub3cgcnVuIGZyb20gYW4gaW5zdGFsbGVkCisgIFB5dGhvbi4KKworLSBJc3N1ZSAjMTI2MjY6IEluIHJlZ3J0ZXN0LCBhbGxvdyB0byBmaWx0ZXIgdGVzdHMgdXNpbmcgYSBnbG9iIGZpbHRlcgorICB3aXRoIHRoZSBgYC1tYGAgKG9yIGBgLS1tYXRjaGBgKSBvcHRpb24uICBUaGlzIHdvcmtzIHdpdGggYWxsIHRlc3QgY2FzZXMKKyAgdXNpbmcgdGhlIHVuaXR0ZXN0IG1vZHVsZS4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjYyNDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGZhaWwgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUgd2hlbgorICBydW5uaW5nIGluIHZlcmJvc2UgbW9kZSAoYGAtdmBgIG9yIGBgLVdgYCksIGJ5IHVzaW5nIHRoZSBgYC0tZmFpbGZhc3RgYAorICAob3IgYGAtR2BgKSBvcHRpb24gdG8gcmVncnRlc3QuICBUaGlzIGlzIHVzZWZ1bCB3aXRoIGxvbmcgdGVzdCBzdWl0ZXMKKyAgc3VjaCBhcyB0ZXN0X2lvIG9yIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjMTI1ODc6IENvcnJlY3QgZmF1bHR5IHRlc3QgZmlsZSBhbmQgcmVmZXJlbmNlIGluIHRlc3RfdG9rZW5pemUuCisgIChQYXRjaCBieSBSb2JlcnQgWGlhbykKKworLSBJc3N1ZSAjMTI1NzM6IEFkZCByZXNvdXJjZSBjaGVja3MgZm9yIGRhbmdsaW5nIFRocmVhZCBhbmQgUHJvY2VzcyBvYmplY3RzLgorCistIElzc3VlICMxMjU0OTogQ29ycmVjdCB0ZXN0X3BsYXRmb3JtIHRvIG5vdCBmYWlsIHdoZW4gT1MgWCByZXR1cm5zICd4ODZfNjQnCisgIGFzIHRoZSBwcm9jZXNzb3IgdHlwZSBvbiBzb21lIE1hYyBzeXN0ZW1zLgorCistIFNraXAgbmV0d29yayB0ZXN0cyB3aGVuIGdldGFkZHJpbmZvKCkgcmV0dXJucyBFQUlfQUdBSU4sIG1lYW5pbmcgYSB0ZW1wb3JhcnkKKyAgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzExODEyOiBTb2x2ZSB0cmFuc2llbnQgc29ja2V0IGZhaWx1cmUgdG8gY29ubmVjdCB0byAnbG9jYWxob3N0JworICBpbiB0ZXN0X3RlbG5ldGxpYi5weS4KKworLSBTb2x2ZWQgYSBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gdGVzdF90ZWxuZXRsaWIucHkuIFJlbGF0ZWQgdG8gaXNzdWUgIzExODEyLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF9yb2JvdHBhcnNlciB3aGVuIG11ZWJsZXNtb3JhbGVkYS5jb20gaXMgZmxha3kgYW5kCisgIGFuIG92ZXJ6ZWFsb3VzIEROUyBzZXJ2aWNlIChlLmcuIE9wZW5ETlMpIHJlZGlyZWN0cyB0byBhIHBsYWNlaG9sZGVyCisgIFdlYiBzaXRlLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF91cmxsaWJuZXQudGVzdF9iYWRfYWRkcmVzcyB3aGVuIHNvbWUgb3ZlcnplYWxvdXMKKyAgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVzb2x2ZXMgYSBub24tZXhpc3RlbnQgZG9tYWluIG5hbWUuICBUaGUgdGVzdAorICBpcyBub3cgc2tpcHBlZCBpbnN0ZWFkLgorCistIElzc3VlICMxMjQ0MDogV2hlbiB0ZXN0aW5nIHdoZXRoZXIgc29tZSBiaXRzIGluIFNTTENvbnRleHQub3B0aW9ucyBjYW4gYmUKKyAgcmVzZXQsIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGhlYWRlcnMgUHl0aG9uIHdhcyBjb21waWxlZCBhZ2FpbnN0LAorICByYXRoZXIgdGhhbiB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGxpYnJhcnkuCisKKy0gSXNzdWUgIzExNTEyOiBBZGQgYSB0ZXN0IHN1aXRlIGZvciB0aGUgY2dpdGIgbW9kdWxlLiBQYXRjaCBieSBSb2JiaWUgQ2xlbW9ucy4KKworLSBJc3N1ZSAjMTI0OTc6IEluc3RhbGwgdGVzdC9kYXRhIHRvIHByZXZlbnQgZmFpbHVyZXMgb2YgdGhlIHZhcmlvdXMgY29kZWNtYXBzCisgIHRlc3RzLgorCistIElzc3VlICMxMjQ5NjogSW5zdGFsbCB0ZXN0L2NhcGF0aCBkaXJlY3RvcnkgdG8gcHJldmVudCB0ZXN0X2Nvbm5lY3RfY2FwYXRoCisgIHRlc3RjYXNlIGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzEyNDY5OiBSdW4gd2FrZXVwIGFuZCBwZW5kaW5nIHNpZ25hbCB0ZXN0cyBpbiBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZQorICB0ZXN0IGluIGEgZnJlc2ggcHJvY2VzcyB3aXRoIG9ubHkgb25lIHRocmVhZCBhbmQgdG8gbm90IGNoYW5nZSBzaWduYWwKKyAgaGFuZGxpbmcgb2YgdGhlIHBhcmVudCBwcm9jZXNzLgorCistIElzc3VlICM4NzE2OiBBdm9pZCBjcmFzaGVzIGNhdXNlZCBieSBBcXVhIFRrIG9uIE9TWCB3aGVuIGF0dGVtcHRpbmcgdG8gcnVuCisgIHRlc3RfdGsgb3IgdGVzdF90dGtfZ3Vpb25seSB1bmRlciBhIHVzZXJuYW1lIHRoYXQgaXMgbm90IGN1cnJlbnRseSBsb2dnZWQKKyAgaW4gdG8gdGhlIGNvbnNvbGUgd2luZG93c2VydmVyIChhcyBtYXkgYmUgdGhlIGNhc2UgdW5kZXIgYnVpbGRib3Qgb3Igc3NoKS4KKworLSBJc3N1ZSAjMTI0MDc6IEV4cGxpY2l0bHkgc2tpcCB0ZXN0X2NhcGkuRW1iZWRkaW5nVGVzdCB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMjQwMDogcmVncnRlc3QgLVcgZG9lc24ndCByZXJ1biB0aGUgdGVzdHMgdHdpY2UgYW55bW9yZSwgYnV0IGNhcHR1cmVzCisgIHRoZSBvdXRwdXQgYW5kIGRpc3BsYXlzIGl0IG9uIGZhaWx1cmUgaW5zdGVhZC4gcmVncnRlc3QgLXYgZG9lc24ndCBwcmludCB0aGUKKyAgZXJyb3IgdHdpY2UgYW55bW9yZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4KKworLSBJc3N1ZSAjMTIxNDE6IEluc3RhbGwgY29waWVzIG9mIHRlbXBsYXRlIEMgbW9kdWxlIGZpbGUgc28gdGhhdAorICB0ZXN0X2J1aWxkX2V4dCBvZiB0ZXN0X2Rpc3R1dGlscyBhbmQgdGVzdF9jb21tYW5kX2J1aWxkX2V4dCBvZgorICB0ZXN0X3BhY2thZ2luZyBhcmUgbm8gbG9uZ2VyIHNpbGVudGx5IHNraXBwZWQgd2hlbgorICBydW4gb3V0c2lkZSBvZiBhIGJ1aWxkIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjODc0NjogQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIG9zLmNoZmxhZ3MoKSBhbmQgb3MubGNoZmxhZ3MoKS4KKyAgUGF0Y2ggYnkgR2FycmV0dCBDb29wZXIuCisKKy0gSXNzdWUgIzEwNzM2OiBGaXggdGVzdF90dGsgdGVzdF93aWRnZXRzIGZhaWx1cmVzIHdpdGggQ29jb2EgVGsgOC41LjkKKyAgMi44ICsgIG9uIE1hYyBPUyBYLiAgKFBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIwNTc6IEFkZCB0ZXN0cyBmb3IgSVNPIDIwMjIgY29kZWNzIChpc28yMDIyX2pwLCBpc28yMDIyX2pwXzIsCisgIGlzbzIwMjJfa3IpLgorCistIElzc3VlICMxMjA5NjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGVzdF90aHJlYWRpbmcudGVzdF93YWl0Zm9yKCkuIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTYxNDogaW1wb3J0IF9faGVsbG9fXyBwcmludHMgIkhlbGxvIFdvcmxkISIuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICM1NzIzOiBJbXByb3ZlIGpzb24gdGVzdHMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBhbmQgd2l0aG91dCBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjA0MTogTWFrZSB0ZXN0X3dhaXQzIG1vcmUgcm9idXN0LgorCistIElzc3VlICMxMTg3MzogQ2hhbmdlIHJlZ2V4IGluIHRlc3RfY29tcGlsZWFsbCB0byBmaXggb2NjYXNpb25hbCBmYWlsdXJlcyB3aGVuCisgIHdoZW4gdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCisKKy0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCisgIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQorICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KKyAgdGhyZWFkLgorCistIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKKyAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCisKKy0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAorICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKKyAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKKyAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCisgIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCisKKy0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCisKKy0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgorCistIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgorICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgorCistIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCisKKy0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAorICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCisKKy0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgorCistIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KKworLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKKyAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAorCistIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgorCistIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgorICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KKworLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKKyAgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuCisKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQorICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgorCistIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKKyAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgorCistIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5CisgIFBpZXJyZSBRdWVudGVsLgorCistIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgorICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KKworLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KKworLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKKyAgdG8gb3BlbiBkb29yIGZpbGVzLgorCistIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCisKK0MtQVBJCistLS0tLQorCistIEFkZCBQeU9iamVjdF9HZW5lcmljR2V0RGljdCBhbmQgUHlPYmplY3RfR2VuZXJpU2V0RGljdC4gVGhleSBhcmUgZ2VuZXJpYworICBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yIG9mIEMKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzEzNzI3OiBBZGQgMyBtYWNyb3MgdG8gYWNjZXNzIFB5RGF0ZVRpbWVfRGVsdGEgbWVtYmVyczoKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZUywgUHlEYXRlVGltZV9ERUxUQV9HRVRfU0VDT05EUywKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfTUlDUk9TRUNPTkRTLgorCistIElzc3VlICMxMDU0MjogQWRkIDQgbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzOiBQeV9VTklDT0RFX0lTX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURSwgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUy4KKworLSBJc3N1ZSAjMTI3MjQ6IEFkZCBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQgbWFjcm8gZm9yIHJldHVybmluZyBOb3RJbXBsZW1lbnRlZC4KKworLSBQWV9QQVRDSExFVkVMX1JFVklTSU9OIGhhcyBiZWVuIHJlbW92ZWQsIHNpbmNlIGl0J3MgbWVhbmluZ2xlc3Mgd2l0aAorICBNZXJjdXJpYWwuCisKKy0gSXNzdWUgIzEyMTczOiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwgaXMgbm93IGBjb25zdAorICBjaGFyICpgIGluc3RlYWQgb2YgYGNoYXIgKmAuCisKKy0gSXNzdWUgIzEyMzgwOiBQeUFyZ19QYXJzZVR1cGxlIG5vdyBhY2NlcHRzIGEgYnl0ZWFycmF5IGZvciB0aGUgJ2MnIGZvcm1hdC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KKyAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgorCistIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgorCistIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KKworLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCisgIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgorCistIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3CisgIEMgQVBJIGZ1bmN0aW9uLgorCistIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQorICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQorICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCisKKy0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgorCistIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KKworCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCAzYTgzYjE1Li45NmU4OTdkIDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0yLDEwICsyLDEwIEBACiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjQgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpOb3QgeWV0IHJlbGVhc2VkLCBzZWUgc2VjdGlvbnMgYmVsb3cgZm9yIGNoYW5nZXMgcmVsZWFzZWQgaW4gMy4zLjMqCitSZWxlYXNlIGRhdGU6IDIwMTQtMDEtMDUKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOCw2ICsxOCwxMCBAQAogTGlicmFyeQogLS0tLS0tLQogCistIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgc2V0cyBPUF9OT19DT01QUkVTU0lPTiB0byBwcmV2ZW50IENSSU1FLgorCistIElzc3VlICMxOTgwMjogQWRkIHNvY2tldC5TT19QUklPUklUWS4KKwogLSBJc3N1ZSAjMTE1MDg6IEZpeGVkIHV1aWQuZ2V0bm9kZSgpIGFuZCB1dWlkLnV1aWQxKCkgb24gZW52aXJvbm1lbnQgd2l0aAogICB2aXJ0dWFsIGludGVyZmFjZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEtlbnQgRnJhemllci4KIApAQCAtMjYsMjMgKzMwLDIzMSBAQAogLSBJc3N1ZSAjMTk1NDU6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIHN0cmF5ICUgdG8KICAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCiAKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxOTU5NTogUmUtZW5hYmxlZCBhIGxvbmctZGlzYWJsZWQgdGVzdCBpbiB0ZXN0X3dpbnNvdW5kLgorCistIElzc3VlICMxOTU4ODogRml4ZWQgdGVzdHMgaW4gdGVzdF9yYW5kb20gdGhhdCB3ZXJlIHNpbGVudGx5IHNraXBwZWQgbW9zdAorICBvZiB0aGUgdGltZS4gIFBhdGNoIGJ5IEp1bGlhbiBHaW5kaS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE5Nzg4OiBraWxsX3B5dGhvbihfZCkuZXhlIGlzIG5vdyBydW4gYXMgYSBQcmVCdWlsZEV2ZW50IG9uIHRoZQorICBweXRob25jb3JlIHN1Yi1wcm9qZWN0LiAgVGhpcyBzaG91bGQgcHJldmVudCBidWlsZCBlcnJvcnMgZHVlIGEgcHJldmlvdXMKKyAgYnVpbGQncyBweXRob24oX2QpLmV4ZSBzdGlsbCBydW5uaW5nLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5Nzk1OiBJbXByb3ZlZCBtYXJrdXAgb2YgVHJ1ZS9GYWxzZSBjb25zdGFudHMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMTEtMjQKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gVXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gbW9yZSBwbGFjZXMgaW4gaW1wb3J0LCBlc3BlY2lhbGx5CisgIGV4Y2VwdGlvbnMuCisKKy0gSXNzdWUgIzE5NjE5OiBzdHIuZW5jb2RlLCBieXRlcy5kZWNvZGUgYW5kIGJ5dGVhcnJheS5kZWNvZGUgbm93IHVzZSBhbgorICBpbnRlcm5hbCBBUEkgdG8gdGhyb3cgTG9va3VwRXJyb3IgZm9yIGtub3duIG5vbi10ZXh0IGVuY29kaW5ncywgcmF0aGVyCisgIHRoYW4gYXR0ZW1wdGluZyB0aGUgZW5jb2Rpbmcgb3IgZGVjb2Rpbmcgb3BlcmF0aW9uIGFuZCB0aGVuIHRocm93aW5nIGEKKyAgVHlwZUVycm9yIGZvciBhbiB1bmV4cGVjdGVkIG91dHB1dCB0eXBlLiAoVGhlIGxhdHRlciBtZWNoYW5pc20gcmVtYWlucworICBpbiBwbGFjZSBmb3IgdGhpcmQgcGFydHkgbm9uLXRleHQgZW5jb2RpbmdzKQorCistIElzc3VlICMxOTE4MzogSW1wbGVtZW50IFBFUCA0NTYgJ3NlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtJy4KKyAgUHl0aG9uIG5vdyB1c2VzIFNpcEhhc2gyNCBvbiBhbGwgbWFqb3IgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjg5MjogVGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogZW5jb2RlcnMgbm8gbG9uZ2VyIGFsbG93IHN1cnJvZ2F0ZSBjb2RlCisgIHBvaW50cyAoVStEODAwLVUrREZGRikgdG8gYmUgZW5jb2RlZC4gIFRoZSB1dGYtMzIqIGRlY29kZXJzIG5vIGxvbmdlciBkZWNvZGUKKyAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4gIFRoZSBzdXJyb2dhdGVwYXNzCisgIGVycm9yIGhhbmRsZXIgbm93IHdvcmtzIHdpdGggdGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogY29kZWNzLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBWaWN0b3IgU3Rpbm5lciBhbmQgS2FuZy1IYW8gKEtlbm55KSBMdS4KKworLSBJc3N1ZSAjMTc4MDY6IEFkZGVkIGtleXdvcmQtYXJndW1lbnQgc3VwcG9ydCBmb3IgInRhYnNpemUiIHRvCisgIHN0ci9ieXRlcy5leHBhbmR0YWJzKCkuCisKKy0gSXNzdWUgIzE3ODI4OiBPdXRwdXQgdHlwZSBlcnJvcnMgaW4gc3RyLmVuY29kZSgpLCBieXRlcy5kZWNvZGUoKSBhbmQKKyAgYnl0ZWFycmF5LmRlY29kZSgpIG5vdyBkaXJlY3QgdXNlcnMgdG8gY29kZWNzLmVuY29kZSgpIG9yIGNvZGVjcy5kZWNvZGUoKQorICBhcyBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTc4Mjg6IFRoZSBpbnRlcnByZXRlciBub3cgYXR0ZW1wdHMgdG8gY2hhaW4gZXJyb3JzIHRoYXQgb2NjdXIgaW4KKyAgY29kZWMgcHJvY2Vzc2luZyB3aXRoIGEgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIG9mIHRoZSBzYW1lIHR5cGUgdGhhdAorICBpbmNsdWRlcyB0aGUgY29kZWMgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgZW5zdXJlcyBpdCBvbmx5IGRvZXMgdGhpcworICB3aGVuIHRoZSBjcmVhdGlvbiBvZiB0aGUgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIHdvbid0IGxvc2UgYW55IGluZm9ybWF0aW9uLgorCistIElzc3VlICMxOTQ2NjogQ2xlYXIgdGhlIGZyYW1lcyBvZiBkYWVtb24gdGhyZWFkcyBlYXJsaWVyIGR1cmluZyB0aGUKKyAgUHl0aG9uIHNodXRkb3duIHRvIGNhbGwgb2JqZWN0cyBkZXN0cnVjdG9ycy4gU28gInVuY2xvc2VkIGZpbGUiIHJlc291cmNlCisgIHdhcm5pbmdzIGFyZSBub3cgY29ycmV0bHkgZW1pdHRlZCBmb3IgZGFlbW9uIHRocmVhZHMuCisKKy0gSXNzdWUgIzE5NTE0OiBEZWR1cGxpY2F0ZSBzb21lIF9QeV9JREVOVElGSUVSIGRlY2xhcmF0aW9ucy4KKyAgUGF0Y2ggYnkgQW5kcmVpIERvcmlhbiBEdW1hLgorCistIElzc3VlICMxNzkzNjogRml4IE8obioqMikgYmVoYXZpb3VyIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIG1hbnkgc3ViY2xhc3NlcworICBvZiBhIGdpdmVuIHR5cGUuCisKKy0gSXNzdWUgIzE5NDI4OiB6aXBpbXBvcnQgbm93IGhhbmRsZXMgZXJyb3JzIHdoZW4gcmVhZGluZyB0cnVuY2F0ZWQgb3IgaW52YWxpZAorICBaSVAgYXJjaGl2ZS4KKworLSBJc3N1ZSAjMTg0MDg6IEFkZCBhIG5ldyBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcigpIGZ1bmN0aW9uIHRvIGhhbmRsZQorICBleGNlcHRpb25zIHdoZW4gbWVyZ2luZyBmYXN0IGxvY2FscyBpbnRvIGZfbG9jYWxzIG9mIGEgZnJhbWUuCisgIFB5RXZhbF9HZXRMb2NhbHMoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKworLSBJc3N1ZSAjMTkzNjk6IE9wdGltaXplZCB0aGUgdXNhZ2Ugb2YgX19sZW5ndGhfaGludF9fKCkuCisKKy0gSXNzdWUgIzE4NjAzOiBFbnN1cmUgdGhhdCBQeU9TX215c3RyaWNtcCBhbmQgUHlPU19teXN0cm5pY21wIGFyZSBpbiB0aGUKKyAgUHl0aG9uIGV4ZWN1dGFibGUgYW5kIG5vdCByZW1vdmVkIGJ5IHRoZSBsaW5rZXIncyBvcHRpbWl6ZXIuCisKKy0gSXNzdWUgIzE5MzA2OiBBZGQgZXh0cmEgaGludHMgdG8gdGhlIGZhdWx0aGFuZGxlciBtb2R1bGUncyBzdGFjaworICBkdW1wcyB0aGF0IHRoZXNlIGFyZSAidXBzaWRlIGRvd24iLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzMxNTg6IGRvY3Rlc3QgY2FuIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworICB3cml0dGVuIGluIEMuCisKKy0gSXNzdWUgIzEzNDc3OiBBZGRlZCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTk2NzQ6IGluc3BlY3Quc2lnbmF0dXJlKCkgbm93IHByb2R1Y2VzIGEgY29ycmVjdCBzaWduYXR1cmUKKyAgZm9yIHNvbWUgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE5NzIyOiBBZGRlZCBvcGNvZGUuc3RhY2tfZWZmZWN0KCksIHdoaWNoCisgIGNvbXB1dGVzIHRoZSBzdGFjayBlZmZlY3Qgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgorCistIElzc3VlICMxOTczNTogSW1wbGVtZW50IHByaXZhdGUgZnVuY3Rpb24gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKSB0bworICBjcmVhdGUgU1NMQ29udGV4dCBvYmplY3RzIGluIFB5dGhvbidzIHN0ZGxpYiBtb2R1bGUuIEl0IHByb3ZpZGVzIGEgc2luZ2xlCisgIGNvbmZpZ3VyYXRpb24gcG9pbnQgYW5kIG1ha2VzIHVzZSBvZiBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpLgorCistIElzc3VlICMxNjIwMzogQWRkIHJlLmZ1bGxtYXRjaCgpIGZ1bmN0aW9uIGFuZCByZWdleC5mdWxsbWF0Y2goKSBtZXRob2QsCisgIHdoaWNoIGFuY2hvciB0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzU5MjogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IEh1Z28gTG9wZXMgVGF2YXJlcy4KKworLSBJc3N1ZSAjMTk2NDE6IEFkZGVkIHRoZSBhdWRpb29wLmJ5dGVzd2FwKCkgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuCisgIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworLSBJc3N1ZSAjMTUyMDQ6IERlcHJlY2F0ZWQgdGhlICdVJyBtb2RlIGluIGZpbGUtbGlrZSBvYmplY3RzLgorCistIElzc3VlICMxNzgxMDogSW1wbGVtZW50IFBFUCAzMTU0LCBwaWNrbGUgcHJvdG9jb2wgNC4KKworLSBJc3N1ZSAjMTk2Njg6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjcDExMjUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE5Njg5OiBBZGQgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBmYWN0b3J5IGZ1bmN0aW9uLiBJdCBjcmVhdGVzCisgIGEgbmV3IFNTTENvbnRleHQgb2JqZWN0IHdpdGggc2VjdXJlIGRlZmF1bHQgc2V0dGluZ3MuCisKKy0gSXNzdWUgIzE5NzI3OiBvcy51dGltZSguLi4sIE5vbmUpIGlzIG5vdyBwb3RlbnRpYWxseSBtb3JlIHByZWNpc2UKKyAgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTcyMDE6IFpJUDY0IGV4dGVuc2lvbnMgbm93IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBQYXRjaCBieQorICBXaWxsaWFtIE1hbGxhcmQuCisKKy0gSXNzdWUgIzE5MjkyOiBBZGQgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMoKSB0byBsb2FkIGRlZmF1bHQgcm9vdCBDQQorICBjZXJ0aWZpY2F0ZXMgZnJvbSBkZWZhdWx0IHN0b3JlcyBvciBzeXN0ZW0gc3RvcmVzLiBCeSBkZWZhdWx0IHRoZSBtZXRob2QKKyAgbG9hZHMgQ0EgY2VydHMgZm9yIGF1dGhlbnRpY2F0aW9uIG9mIHNlcnZlciBjZXJ0cy4KKworLSBJc3N1ZSAjMTk2NzM6IEFkZCBwYXRobGliIHRvIHRoZSBzdGRsaWIgYXMgYSBwcm92aXNpb25hbCBtb2R1bGUgKFBFUCA0MjgpLgorCistIElzc3VlICMxNjU5NjogcGRiIGluIGEgZ2VuZXJhdG9yIG5vdyBwcm9wZXJseSBza2lwcyBvdmVyIHlpZWxkIGFuZAorICB5aWVsZCBmcm9tIHJhdGhlciB0aGFuIHN0ZXBwaW5nIG91dCBvZiB0aGUgZ2VuZXJhdG9yIGludG8gaXRzCisgIGNhbGxlci4gIChUaGlzIGlzIGVzc2VudGlhbCBmb3Igc3RlcHBpbmcgdGhyb3VnaCBhc3luY2lvIGNvcm91dGluZXMuKQorCistIElzc3VlICMxNzkxNjogQWRkZWQgZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKCkgYW5kCisgIGRpcy5CeXRlY29kZS5jdXJyZW50X29mZnNldCB0byBlYXNpbHkgZGlzcGxheSAiY3VycmVudCBpbnN0cnVjdGlvbiIKKyAgbWFya2VycyBpbiB0aGUgbmV3IGRpc2Fzc2VtYmx5IEFQSSAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKS4KKworLSBJc3N1ZSAjMTk1NTI6IHZlbnYgbm93IHN1cHBvcnRzIGJvb3RzdHJhcHBpbmcgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMKKworLSBJc3N1ZSAjMTcxMzQ6IEZpbmFsaXplIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0aWZpY2F0ZSBzdG9yZS4gQ2VydCBhbmQKKyAgQ1JMIGVudW1lcmF0aW9uIGFyZSBub3cgdHdvIGZ1bmN0aW9ucy4gZW51bV9jZXJ0aWZpY2F0ZXMoKSBhbHNvIHJldHVybnMKKyAgcHVycG9zZSBmbGFncyBhcyBzZXQgb2YgT0lEcy4KKworLSBJc3N1ZSAjMTk1NTU6IFJlc3RvcmUgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLCAoYW5kIHRoZSBkaXN0dXRpbHMKKyAgZXF1aXZhbGVudCkgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyBwb2ludGluZyBwZW9wbGUgYXQgJEVYVF9TVUZGSVguCisKKy0gSXNzdWUgIzg4MTM6IEFkZCBTU0xDb250ZXh0LnZlcmlmeV9mbGFncyB0byBjaGFuZ2UgdGhlIHZlcmlmaWNhdGlvbiBmbGFncworICBvZiB0aGUgY29udGV4dCBpbiBvcmRlciB0byBlbmFibGUgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3QgKENSTCkKKyAgY2hlY2tzIG9yIHN0cmljdCBYNTA5IHJ1bGVzLgorCistIElzc3VlICMxODI5NDogRml4IHRoZSB6bGliIG1vZHVsZSB0byBtYWtlIGl0IDY0LWJpdCBzYWZlLgorCistIElzc3VlICMxOTY4MjogRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBvbGQgdmVyc2lvbiBvZiBPcGVuU1NMIHRoYXQKKyAgd2FzIGludHJvZHVjZWQgYnkgSXNzdWUgIzE4Mzc5LgorCistIElzc3VlICMxNDQ1NTogcGxpc3RsaWIgbm93IHN1cHBvcnRzIGJpbmFyeSBwbGlzdHMgYW5kIGhhcyBhbiB1cGRhdGVkIEFQSS4KKwogLSBJc3N1ZSAjMTk2MzM6IEZpeGVkIHdyaXRpbmcgbm90IGNvbXByZXNzZWQgMTYtIGFuZCAzMi1iaXQgd2F2ZSBmaWxlcyBvbgogICBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTgzNzk6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIHJldHVybnMgQ0EgaXNzdWVyIEFJQSBmaWVsZHMsIE9DU1AKKyAgYW5kIENSTCBkaXN0cmlidXRpb24gcG9pbnRzLgorCistIElzc3VlICMxODEzODogSW1wbGVtZW50IGNhZGF0YSBhcmd1bWVudCBvZiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uKCkKKyAgdG8gbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTCBmcm9tIG1lbW9yeS4gSXQgc3VwcG9ydHMgUEVNIGFuZCBERVIKKyAgZW5jb2RlZCBzdHJpbmdzLgorCistIElzc3VlICMxODc3NTogQWRkIG5hbWUgYW5kIGJsb2NrX3NpemUgYXR0cmlidXRlIHRvIEhNQUMgb2JqZWN0LiBUaGV5IG5vdworICBwcm92aWRlIHRoZSBzYW1lIEFQSSBlbGVtZW50cyBhcyBub24ta2V5ZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTcyNzY6IE1ENSBhcyBkZWZhdWx0IGRpZ2VzdG1vZCBmb3IgSE1BQyBpcyBkZXByZWNhdGVkLiBUaGUgSE1BQworICBtb2R1bGUgc3VwcG9ydHMgZGlnZXN0bW9kIG5hbWVzLCBlLmcuIGhtYWMuSE1BQygnc2hhMScpLgorCiAtIElzc3VlICMxOTQ0OTogaW4gY3N2J3Mgd3JpdGVyb3csIGhhbmRsZSBub24tc3RyaW5nIGtleXMgd2hlbiBnZW5lcmF0aW5nIHRoZQogICBlcnJvciBtZXNzYWdlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3QgaW4gdGhlICdmaWVsZG5hbWVzJyBsaXN0LgogCistIElzc3VlICMxMzYzMzogQWRkZWQgYSBuZXcgY29udmVydF9jaGFycmVmcyBrZXl3b3JkIGFyZyB0byBIVE1MUGFyc2VyIHRoYXQsCisgIHdoZW4gVHJ1ZSwgYXV0b21hdGljYWxseSBjb252ZXJ0cyBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzI5Mjc6IEFkZGVkIHRoZSB1bmVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBodG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjODQwMjogQWRkZWQgdGhlIGVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBnbG9iIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc2MTg6IEFkZCBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcgdG8gdGhlIGJhc2U2NCBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NjM0OiB0aW1lLnN0cmZ0aW1lKCIleSIpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIG9uIEFJWCB3aGVuIGdpdmVuIGEKKyAgeWVhciBiZWZvcmUgMTkwMC4KKwogLSBGaXggdGVzdC5zdXBwb3J0LmJpbmRfcG9ydCgpIHRvIG5vdCBjYXVzZSBhbiBlcnJvciB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQKICAgb24gYSBzeXN0ZW0gd2l0aCBTT19SRVVTRVBPUlQgZGVmaW5lZCBpbiB0aGUgaGVhZGVycyBidXQgcnVuIG9uIGEgc3lzdGVtCiAgIHdpdGggYW4gT1Mga2VybmVsIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0IHJlYXNvbmFibHkgbmV3IHNvY2tldCBvcHRpb24uCiAKIC0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHVuZGVyIGdjYyBvZiB0aGUgY3R5cGVzIG1vZHVsZSBidW5kbGVkIGxpYmZmaSBmb3IgYXJtLgogCistIElzc3VlICMxOTQ0ODogQWRkIHByaXZhdGUgQVBJIHRvIFNTTCBtb2R1bGUgdG8gbG9va3VwIEFTTi4xIG9iamVjdHMgYnkgT0lELAorICBOSUQsIHNob3J0IG5hbWUgYW5kIGxvbmcgbmFtZS4KKworLSBJc3N1ZSAjMTkyODI6IGRibS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAoSW5pdGFsCisgIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworLSBJc3N1ZSAjODMxMTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhaWZjLAorICBzdW5hdSwgYW5kIHdhdmUgbW9kdWxlcy4KKworLSBJc3N1ZSAjNTIwMjogQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcyBpbiB0aGUgd2F2ZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjMTE4MDogUmVzdG9yZSBnbG9iYWwgb3B0aW9uIHRvIGlnbm9yZQorICB+Ly5weWRpc3R1dGlscy5jZmcgaW4gRGlzdHV0aWxzLCBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiBiYWNrb3V0IG9mCisgIGRpc3R1dGlsczIgY2hhbmdlcy4KKwogLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KIAorLSBJc3N1ZSAjMTk1NDQgYW5kICM2NTE2OiBSZXN0b3JlIHN1cHBvcnQgZm9yIC0tdXNlciBhbmQgLS1ncm91cCBwYXJhbWV0ZXJzIHRvCisgIHNkaXN0IGNvbW1hbmQgYWNjaWRlbnRhbGx5IHJvbGxlZCBiYWNrIGFzIHBhcnQgb2YgdGhlIGRpc3R1dGlsczIgcm9sbGJhY2suCisKIC0gSXNzdWUgIzEzNjc0OiBQcmV2ZW50ZWQgdGltZS5zdHJmdGltZSBmcm9tIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBnaXZlbgogICBhIHllYXIgYmVmb3JlIDE5MDAgYW5kIGEgZm9ybWF0IG9mICV5LgogCistIElzc3VlICMxOTQwNjogaW1wbGVtZW50YXRpb24gb2YgdGhlIGVuc3VyZXBpcCBtb2R1bGUgKHBhcnQgb2YgUEVQIDQ1MykuCisgIFBhdGNoIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbi4KKwogLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2Mjg2OiBSZXN0b3JlIHVzZSBvZiB1cmxsaWIgb3ZlciBodHRwIGFsbG93aW5nIHVzZQogICBvZiBodHRwX3Byb3h5IGZvciBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQsIGEgZmVhdHVyZSBhY2NpZGVudGFsbHkgbG9zdAogICBpbiB0aGUgcm9sbGJhY2sgb2YgZGlzdHV0aWxzMi4KQEAgLTUxLDE3NCArMjYzLDczIEBACiAgIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSB1bmRvIG9mCiAgIGRpc3R1dGlsczIuCiAKKy0gSXNzdWUgIzE2Njg1OiBBZGRlZCBzdXBwb3J0IGZvciBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhdWRpb29wIG1vZHVsZS4KKyAgUmVtb3ZlZCBzdXBwb3J0IGZvciBzdHJpbmdzLgorCistIElzc3VlICM3MTcxOiBBZGQgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBgYGluZXRfbnRvcGBgIGFuZCBgYGluZXRfcHRvbmBgCisgIHRvIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxOTI2MTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyAyNC1iaXQgc2FtcGxlcyBpbiB0aGUgc3VuYXUgbW9kdWxlLgorCistIElzc3VlICMxMDk3Nzk3OiBBZGRlZCBDUDI3MyBlbmNvZGluZywgdXNlZCBvbiBJQk0gbWFpbmZyYW1lcyBpbgorICBHZXJtYW55IGFuZCBBdXN0cmlhLiAgTWFwcGluZyBwcm92aWRlZCBieSBNaWNoYWVsIEJpZXJlbmZlbGQuCisKIC0gSXNzdWUgIzE1NzUwMjA6IEZpeGVkIHN1cHBvcnQgb2YgMjQtYml0IHdhdmUgZmlsZXMgb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCiAKLS0gSXNzdWUgIzE5NDgwOiBIVE1MUGFyc2VyIG5vdyBhY2NlcHRzIGFsbCB2YWxpZCBzdGFydC10YWcgbmFtZXMgYXMgZGVmaW5lZAotICBieSB0aGUgSFRNTDUgc3RhbmRhcmQuCistIElzc3VlICMxOTM3ODogRml4ZWQgYSBudW1iZXIgb2YgY2FzZXMgaW4gdGhlIGRpcyBtb2R1bGUgd2hlcmUgdGhlIG5ldworICAiZmlsZSIgcGFyYW1ldGVyIHdhcyBub3QgYmVpbmcgaG9ub3VyZWQgY29ycmVjdGx5CiAKLS0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCistIElzc3VlICMxOTM3ODogUmVtb3ZlZCB0aGUgImRpcy5CeXRlY29kZS5zaG93X2luZm8iIG1ldGhvZAorCistIElzc3VlICMxOTM3ODogUmVuYW1lZCB0aGUgImRpcy5CeXRlY29kZS5kaXNwbGF5X2NvZGUiIG1ldGhvZCB0bworICAiZGlzLkJ5dGVjb2RlLmRpcyIgYW5kIGNvbnZlcnRlZCBpdCB0byByZXR1cm5pbmcgYSBzdHJpbmcgcmF0aGVyIHRoYW4KKyAgcHJpbnRpbmcgb3V0cHV0LgorCistIElzc3VlICMxOTM3ODogdGhlICJsaW5lX29mZnNldCIgcGFyYW1ldGVyIGluIHRoZSBuZXcgImRpcy5nZXRfaW5zdHJ1Y3Rpb25zIgorICBBUEkgaGFzIGJlZW4gcmVuYW1lZCB0byAiZmlyc3RfbGluZSIgKGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgdXNhZ2UKKyAgY2hhbmdlZCBhY2NvcmRpbmdseSkuIFRoaXMgc2hvdWxkIHJlZHVjZSBjb25mdXNpb24gd2l0aCB0aGUgbW9yZSBjb21tb24gdXNlCisgIG9mICJvZmZzZXQiIGluIHRoZSBkaXMgZG9jcyB0byByZWZlciB0byBieXRlY29kZSBvZmZzZXRzLgorCistIElzc3VlICMxODY3ODogQ29ycmVjdGVkIHNwd2Qgc3RydWN0IG1lbWJlciBuYW1lcyBpbiBzcHdkIG1vZHVsZToKKyAgc3BfbmFtLT5zcF9uYW1wLCBhbmQgc3BfcHdkLT5zcF9wd2RwLiAgVGhlIG9sZCBuYW1lcyBhcmUga2VwdCBhcyBleHRyYQorICBzdHJ1Y3RzZXEgbWVtYmVycywgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgdGtpbnRlci5UZXh0LmJib3goKSBub3cgcmFpc2VzCisgIFR5cGVFcnJvciBpbnN0ZWFkIG9mIFRjbEVycm9yIG9uIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuICBPcmlnaW5hbCBwYXRjaAorICBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTAxOTc6IFJld29yayBzdWJwcm9jZXNzLmdldFtzdGF0dXNdb3V0cHV0IHRvIHVzZSBzdWJwcm9jZXNzCisgIGZ1bmN0aW9uYWxpdHkgYW5kIHRodXMgdG8gd29yayBvbiBXaW5kb3dzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4KIAogLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKICAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgogCi0tIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKLSAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KKy0gSXNzdWUgIzE5NDAzOiBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCBpcyBub3cgcmVlbnRyYW50CiAKIC0gSXNzdWUgIzE5Mjg2OiBEaXJlY3RvcmllcyBpbiBgYHBhY2thZ2VfZGF0YWBgIGFyZSBubyBsb25nZXIgYWRkZWQgdG8KICAgdGhlIGZpbGVsaXN0LCBwcmV2ZW50aW5nIGZhaWx1cmUgb3V0bGluZWQgaW4gdGhlIHRpY2tldC4KIAotVGVzdHMKLS0tLS0tCistIElzc3VlICMxOTQ4MDogSFRNTFBhcnNlciBub3cgYWNjZXB0cyBhbGwgdmFsaWQgc3RhcnQtdGFnIG5hbWVzIGFzIGRlZmluZWQKKyAgYnkgdGhlIEhUTUw1IHN0YW5kYXJkLgogCi0tIElzc3VlICMxOTU4ODogRml4ZWQgdGVzdHMgaW4gdGVzdF9yYW5kb20gdGhhdCB3ZXJlIHNpbGVudGx5IHNraXBwZWQgbW9zdAotICBvZiB0aGUgdGltZS4gIFBhdGNoIGJ5IEp1bGlhbiBHaW5kaS4KKy0gSXNzdWUgIzE1MTE0OiBUaGUgaHRtbC5wYXJzZXIgbW9kdWxlIG5vdyByYWlzZXMgYSBEZXByZWNhdGlvbldhcm5pbmcgd2hlbiB0aGUKKyAgc3RyaWN0IGFyZ3VtZW50IG9mIEhUTUxQYXJzZXIgb3IgdGhlIEhUTUxQYXJzZXIuZXJyb3IgbWV0aG9kIGFyZSB1c2VkLgogCi0tIElzc3VlICMxOTU5NjogU2V0IHVudGVzdGFibGUgdGVzdHMgaW4gdGVzdF9pbXBvcnRsaWIgdG8gTm9uZSB0byBhdm9pZAotICByZXBvcnRpbmcgc3VjY2VzcyBvbiBlbXB0eSB0ZXN0cy4KKy0gSXNzdWUgIzE5NDEwOiBVbmRvIHRoZSBzcGVjaWFsLWNhc2luZyByZW1vdmFsIG9mICcnIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuCiAKLS0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXwotICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCi0gIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgd2l0aGluIGEgdW5pdHRlc3QgVGVzdENhc2UuCi0KLS0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KLQotLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxOTc5NTogSW1wcm92ZWQgbWFya3VwIG9mIFRydWUvRmFsc2UgY29uc3RhbnRzLgotCi0tIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKLSAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQotICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxOTc4ODoga2lsbF9weXRob24oX2QpLmV4ZSBpcyBub3cgcnVuIGFzIGEgUHJlQnVpbGRFdmVudCBvbiB0aGUKLSAgcHl0aG9uY29yZSBzdWItcHJvamVjdC4gIFRoaXMgc2hvdWxkIHByZXZlbnQgYnVpbGQgZXJyb3JzIGR1ZSBhIHByZXZpb3VzCi0gIGJ1aWxkJ3MgcHl0aG9uKF9kKS5leGUgc3RpbGwgcnVubmluZy4KLQotLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICi0gIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE3LU5vdi0yMDEzKgotCi1ObyBjaGFuZ2VzIGZyb20gcmVsZWFzZSBjYW5kaWRhdGUgMi4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMyByZWxlYXNlIGNhbmRpZGF0ZSAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTEtTm92LTIwMTMqCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkyMjc6IEFueSByZS1zZWVkaW5nIG9mIHRoZSBPcGVuU1NMIFJORyBvbiBmb3JrIGhhcyBiZWVuIHJlbW92ZWQ7Ci0gIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgT3BlblNTTCBpdHNlbGYgb3IgYnkgdGhlIGFwcGxpY2F0aW9uLgorLSBJc3N1ZSAjMTk0MjQ6IEZpeCB0aGUgd2FybmluZ3MgbW9kdWxlIHRvIGFjY2VwdCBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXJzLgogCiAtIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KIAotVGVzdHMKLS0tLS0tCistIElzc3VlICMxOTIyNzogUmVtb3ZlIHB0aHJlYWRfYXRmb3JrKCkgaGFuZGxlci4gVGhlIGhhbmRsZXIgd2FzIGFkZGVkIHRvCisgIHNvbHZlICMxODc0NyBidXQgaGFzIGNhdXNlZCBpc3N1ZXMuCiAKLS0gSXNzdWUgIzE4OTY0OiBGaXggdGVzdF90Y2wgd2hlbiBydW4gd2l0aCBUY2wvVGsgdmVyc2lvbnMgIDwgOC41LgorLSBJc3N1ZSAjMTk0MjA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBtb2R1bGUgaW5pdGFsaXphdGlvbiBjb2RlIG9mCisgIF9oYXNob3BlbnNzbC5jCiAKLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNTY2MzogUmV2ZXJ0IE9TIFggaW5zdGFsbGVyIGJ1aWx0LWluIFRjbC9UayBzdXBwb3J0IGZvciAzLjMuMy4KLSAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAotICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCi0gIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LU9jdC0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg2MDM6IEVuc3VyZSB0aGF0IFB5T1NfbXlzdHJpY21wIGFuZCBQeU9TX215c3RybmljbXAgYXJlIGluIHRoZQotICBQeXRob24gZXhlY3V0YWJsZSBhbmQgbm90IHJlbW92ZWQgYnkgdGhlIGxpbmtlcidzIG9wdGltaXplci4KLQotLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbW9yZSBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCi0KLS0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKLSAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgotCi0tIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCi0KLS0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0Ci0gIGFic3VyZGx5IGhpZ2guCi0KLS0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgotCi0tIElzc3VlICMxODM2ODogUHlPU19TdGRpb1JlYWRsaW5lKCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSB3aGVuIHJlYWxsb2MoKQotICBmYWlscy4KLQotLSBJc3N1ZSAjMTY3NDE6IEZpeCBhbiBlcnJvciByZXBvcnRpbmcgaW4gaW50KCkuCi0KLS0gSXNzdWUgIzE3ODk5OiBGaXggcmFyZSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBvcy5saXN0ZGlyKCkuCi0KLS0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCi0gIG9iajJhc3Rfb2JqZWN0KCkuCi0KLS0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KLQotLSBJc3N1ZSAjMTU5MDU6IEZpeCB0aGVvcmV0aWNhbCBidWZmZXIgb3ZlcmZsb3cgaW4gaGFuZGxpbmcgb2Ygc3lzLmFyZ3ZbMF0sCi0gIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgdGhlIG9wZXJhdGlvbiBzeXN0ZW0gZG9lcyBub3Qgb2JleSBNQVhQQVRITEVOLgotCi0tIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCi0KLS0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCi0gIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCi0KLS0gSXNzdWUgIzE4NDI2OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEMgZXh0ZW5zaW9uIGltcG9ydCB3aGVuCi0gIFB5TW9kdWxlX0dldERlZigpIHJldHVybnMgYW4gZXJyb3IuCi0KLS0gSXNzdWUgIzE4MzI4OiBSZW9yZGVyIG9wcyBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZSooKSBmdW5jdGlvbnMuIE5vdyB0aGUKLSAgdHN0YXRlIGlzIGZpcnN0IHJlbW92ZWQgZnJvbSBUTFMgYW5kIHRoZW4gZGVhbGxvY2F0ZWQuCi0KLS0gSXNzdWUgIzE4MTg0OiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGFuZCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2UKLSAgT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGFyZ3VtZW50IG9mICVjIGZvcm1hdCBpcyBvdXQgb2YgcmFuZ2UuCi0KLS0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCi0gIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KLQotLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQotICBjb2RlcG9pbnRzLgotCi0tIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgotCi0tIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAotICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCi0KLS0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQotICBicmFja2V0cy4KLQotLSBJc3N1ZSAjMTc5ODM6IFJhaXNlIGEgU3ludGF4RXJyb3IgZm9yIGEgYGBnbG9iYWwgX19jbGFzc19fYGAgc3RhdGVtZW50IGluIGEKLSAgY2xhc3MgYm9keS4KLQotLSBJc3N1ZSAjMTc5Mjc6IEZyYW1lIG9iamVjdHMga2VwdCBhcmd1bWVudHMgYWxpdmUgaWYgdGhleSBoYWQgYmVlbiBjb3BpZWQgaW50bwotICBhIGNlbGwsIGV2ZW4gaWYgdGhlIGNlbGwgd2FzIGNsZWFyZWQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkzOTU6IFJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gcGlja2xlIGEgYnoyIG9yIGx6bWEKLSAgY29tcHJlc3Nvci9kZWNvbXByZXNzb3Igb2JqZWN0LCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIHBpY2tsZSB0aGF0IHdvdWxkCi0gIGNhdXNlIGEgc2VnZmF1bHQgd2hlbiBsb2FkZWQgYW5kIHVzZWQuCistIElzc3VlICMxOTMyOTogT3B0aW1pemVkIGNvbXBpbGluZyBjaGFyc2V0cyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLgogCiAtIElzc3VlICMxOTIyNzogVHJ5IHRvIGZpeCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHJlLXNlZWRpbmcgdGhlbiBPcGVuU1NMCiAgIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvbiBmb3JrKCkuCkBAIC0yNDEsMTIgKzM1MiwzMCBAQAogLSBJc3N1ZSAjMTYwMzk6IENWRS0yMDEzLTE3NTI6IENoYW5nZSB1c2Ugb2YgcmVhZGxpbmUgaW4gaW1hcGxpYiBtb2R1bGUgdG8gbGltaXQKICAgbGluZSBsZW5ndGguICBQYXRjaCBieSBFbWlsIExpbmQuCiAKKy0gSXNzdWUgIzE5MzMwOiB0aGUgdW5uZWNlc3Nhcnkgd3JhcHBlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgYW5kCisgIGNvbnRleHRsaWIuc3VwcHJlc3MgY29udGV4dCBtYW5hZ2Vycywgd2hpY2ggYWxzbyBlbnN1cmVzIHRoZXkgcHJvdmlkZQorICByZWFzb25hYmxlIGhlbHAoKSBvdXRwdXQgb24gaW5zdGFuY2VzCisKIC0gSXNzdWUgIzE5MzkzOiBGaXggc3ltdGFibGUuc3ltdGFibGUgZnVuY3Rpb24gdG8gbm90IGJlIGNvbmZ1c2VkIHdoZW4gdGhlcmUgYXJlCiAgIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWVkICJ0b3AiLgogCistIElzc3VlICMxODY4NTogUmVzdG9yZSByZSBwZXJmb3JtYW5jZSB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisKIC0gSXNzdWUgIzE5MzM5OiB0ZWxuZXRsaWIgbW9kdWxlIGlzIG5vdyB1c2luZyB0aW1lLm1vbm90b25pYygpIHdoZW4gYXZhaWxhYmxlCiAgIHRvIGNvbXB1dGUgdGltZW91dC4KIAorLSBJc3N1ZSAjMTkzOTk6IGZpeCBzcG9yYWRpYyB0ZXN0X3N1YnByb2Nlc3MgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTMyMzQ6IEZpeCBvcy5saXN0ZGlyIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBwYXRocyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTkzNzU6IFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwKKyAgaWYgaXQgZXhpc3RzLCBpcyBub3cgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTkzNzk6IExhemlseSBpbXBvcnQgbGluZWNhY2hlIGluIHRoZSB3YXJuaW5ncyBtb2R1bGUsIHRvIG1ha2UKKyAgc3RhcnR1cCB3aXRoIHdhcm5pbmdzIGZhc3RlciB1bnRpbCBhIHdhcm5pbmcgZ2V0cyBwcmludGVkLgorCiAtIElzc3VlICMxOTI4ODogRml4ZWQgdGhlICJpbiIgb3BlcmF0b3Igb2YgZGJtLmdudSBkYXRhYmFzZXMgZm9yIHN0cmluZwogICBhcmd1bWVudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgogCkBAIC0yNTUsNTIgKzM4NCwyOTkgQEAKIAogLSBJc3N1ZSAjMTkzMjc6IEZpeGVkIHRoZSB3b3JraW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCB0b28gYmlnIGNoYXJzZXQuCiAKKy0gSXNzdWUgIzE3NDAwOiBOZXcgJ2lzX2dsb2JhbCcgYXR0cmlidXRlIGZvciBpcGFkZHJlc3MgdG8gdGVsbCBpZiBhbiBhZGRyZXNzCisgIGlzIGFsbG9jYXRlZCBieSBJQU5BIGZvciBnbG9iYWwgb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KKwogLSBJc3N1ZSAjMTkzNTA6IEluY3JlYXNpbmcgdGhlIHRlc3QgY292ZXJhZ2Ugb2YgbWFjdXJsMnBhdGguIFBhdGNoIGJ5IENvbGluCiAgIFdpbGxpYW1zLgogCistIElzc3VlICMxOTM2NTogT3B0aW1pemVkIHRoZSBwYXJzaW5nIG9mIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nIGluIHJlLnN1YiooKQorICBmdW5jdGlvbnMuCisKIC0gSXNzdWUgIzE5MzUyOiBGaXggdW5pdHRlc3QgZGlzY292ZXJ5IHdoZW4gYSBtb2R1bGUgY2FuIGJlIHJlYWNoZWQKICAgdGhyb3VnaCBzZXZlcmFsIHBhdGhzIChlLmcuIHVuZGVyIERlYmlhbi9VYnVudHUgd2l0aCB2aXJ0dWFsZW52KS4KIAogLSBJc3N1ZSAjMTUyMDc6IEZpeCBtaW1ldHlwZXMgdG8gcmVhZCBmcm9tIGNvcnJlY3QgcGFydCBvZiBXaW5kb3dzIHJlZ2lzdHJ5CiAgIE9yaWdpbmFsIHBhdGNoIGJ5IERhdmUgQ2hhbWJlcnMKIAorLSBJc3N1ZSAjMTY1OTU6IEFkZCBwcmxpbWl0KCkgdG8gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxOTMyNDogRXhwb3NlIExpbnV4LXNwZWNpZmljIGNvbnN0YW50cyBpbiByZXNvdXJjZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE3NDAwOiBpcGFkZHJlc3Mgc2hvdWxkIG1ha2UgaXQgZWFzeSB0byBpZGVudGlmeSByZmM2NTk4IGFkZHJlc3Nlcy4KKworLSBMb2FkIFNTTCdzIGVycm9yIHN0cmluZ3MgaW4gaGFzaGxpYi4KKworLSBJc3N1ZSAjMTg1Mjc6IFVwZ3JhZGUgaW50ZXJuYWwgY29weSBvZiB6bGliIHRvIDEuMi44LgorCistIElzc3VlICMxOTI3NDogQWRkIGEgZmlsdGVyZnVuYyBwYXJhbWV0ZXIgdG8gUHlaaXBGaWxlLndyaXRlcHkuCisKIC0gSXNzdWUgIzg5NjQ6IGZpeCBwbGF0Zm9ybS5fc3lzX3ZlcnNpb24gdG8gaGFuZGxlIElyb25QeXRob24gMi42Ky4KICAgUGF0Y2ggYnkgTWFydGluIE1hdHVzaWFrLgogCistIElzc3VlICMxOTQxMzogUmVzdG9yZSBwcmUtMy4zIHJlbG9hZCgpIHNlbWFudGljcyBvZiByZS1maW5kaW5nIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE4OTU4OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIGEgc3RyaW5nCisgIHRoYXQgc3RhcnRzIHdpdGggYSBVVEYtOCBCT00uCisKKy0gSXNzdWUgIzE5MzA3OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIG9iamVjdHMKKyAgb2YgdGhlIHdyb25nIHR5cGUuCisKIC0gSXNzdWUgIzE2MDM4OiBDVkUtMjAxMy0xNzUyOiBmdHBsaWI6IExpbWl0IGFtb3VudCBvZiBkYXRhIHJlYWQgYnkKICAgbGltaXRpbmcgdGhlIGNhbGwgdG8gcmVhZGxpbmUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pY2hhxYIKICAgSmFzdHJ6xJlic2tpIGFuZCBHaWFtcGFvbG8gUm9kb2xhLgogCistIElzc3VlICMxNzA4NzogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTk2NjQ6IHRlc3RfdXNlcmRpY3QncyByZXByIHRlc3Qgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdGhlIG9yZGVyCisgIG9mIGRpY3QgZWxlbWVudHMuCisKKy0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXworICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCisgIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgYXMgc3ViVGVzdHMgb2YgYSB1bml0dGVzdCBUZXN0Q2FzZSBtZXRob2QuCisKKy0gSXNzdWUgIzE5Mzc4OiB0aGUgbWFpbiBkaXMgbW9kdWxlIHRlc3RzIGFyZSBub3cgcnVuIHdpdGggYm90aCBzdGRvdXQKKyAgcmVkaXJlY3Rpb24gKmFuZCogcGFzc2luZyBhbiBleHBsaWNpdCBmaWxlIHBhcmFtZXRlcgorCistIElzc3VlICMxOTM3ODogcmVtb3ZlZCB0aGUgbm90LWFjdHVhbGx5LWhlbHBmdWwgYXNzZXJ0SW5zdHJ1Y3Rpb25NYXRjaGVzCisgIGFuZCBhc3NlcnRCeXRlY29kZUV4YWN0bHlNYXRjaGVzIGhlbHBlcnMgZnJvbSBieXRlY29kZV9oZWxwZXIKKworLSBJc3N1ZSAjMTg3MDI6IEFsbCBza2lwcGVkIHRlc3RzIG5vdyByZXBvcnRlZCBhcyBza2lwcGVkLgorCistIElzc3VlICMxOTQzOTogaW50ZXJwcmV0ZXIgZW1iZWRkaW5nIHRlc3RzIGFyZSBub3cgZXhlY3V0ZWQgb24gV2luZG93cworICAoUGF0Y2ggYnkgWmFjaGFyeSBXYXJlKQorCistIElzc3VlICMxOTA4NTogQWRkZWQgYmFzaWMgdGVzdHMgZm9yIGFsbCB0a2ludGVyIHdpZGdldCBvcHRpb25zLgorCistIElzc3VlIDE5Mzg0OiBGaXggdGVzdF9weV9jb21waWxlIGZvciByb290IHVzZXIsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKKyAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQorICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTM1ODogIm1ha2UgY2xpbmljIiBub3cgcnVucyB0aGUgQXJndW1lbnQgQ2xpbmljIHByZXByb2Nlc3NvcgorICBvdmVyIGFsbCBDUHl0aG9uIHNvdXJjZSBmaWxlcy4KKworLSBVcGRhdGUgU1FMaXRlIHRvIDMuOC4xLCB4eiB0byA1LjAuNSwgYW5kIFRjbC9UayB0byA4LjYuMSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjYzMjogRW5hYmxlIERFUCBhbmQgQVNMUiBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzc5MTogRHJvcCBQUkVGSVggYW5kIEVYRUNfUFJFRklYIGRlZmluaXRpb25zIGZyb20gUEMvcHljb25maWcuaAorCistIEFkZCB3b3JrYXJvdW5kIGZvciBWUyAyMDEwIG5tYWtlIGNsZWFuIGlzc3VlLiBWUyAyMDEwIGRvZXNuJ3Qgc2V0IHVwIFBBVEgKKyAgZm9yIG5tYWtlLmV4ZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE5NTUwOiBJbXBsZW1lbnQgV2luZG93cyBpbnN0YWxsZXIgY2hhbmdlcyBvZiBQRVAgNDUzIChlbnN1cmVwaXApLgorCistIElzc3VlICMxOTUyMDogRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gdGhlIF9zaGEzIG1vZHVsZSBvbiAzMmJpdCBXaW5kb3dzLgorCistIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKKyAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgorCistIElzc3VlICMxNTc5MjogQ29ycmVjdCBidWlsZCBvcHRpb25zIG9uIFdpbjY0LiBQYXRjaCBieSBKZXJlbXkgS2xvdGguCisKKy0gSXNzdWUgIzE5MzczOiBBcHBseSB1cHN0cmVhbSBjaGFuZ2UgdG8gVGsgOC41LjE1IGZpeGluZyBPUyBYIDEwLjkKKyAgc2NyZWVuIHJlZnJlc2ggcHJvYmxlbSBmb3IgT1MgWCBpbnN0YWxsZXIgYnVpbGQuCisKKy0gSXNzdWUgIzE5NjQ5OiBPbiBPUyBYLCB0aGUgc2FtZSBzZXQgb2YgZmlsZSBuYW1lcyBhcmUgbm93IGluc3RhbGxlZAorICBpbiBiaW4gZGlyZWN0b3JpZXMgZm9yIGFsbCBjb25maWd1cmF0aW9uczogbm9uLWZyYW1ld29yayB2cyBmcmFtZXdvcmssCisgIGFuZCBzaW5nbGUgYXJjaCB2cyB1bml2ZXJzYWwgYnVpbGRzLiAgcHl0aG9ueC55LTMyIGlzIG5vdyBhbHdheXMKKyAgaW5zdGFsbGVkIGZvciA2NC1iaXQvMzItYml0IHVuaXZlcnNhbCBidWlsZHMuICBUaGUgb2Jzb2xldGUgYW5kCisgIHVuZG9jdW1lbnRlZCBweXRob253KiBzeW1saW5rcyBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCBhbnl3aGVyZS4KKworLSBJc3N1ZSAjMTk1NTM6IFBFUCA0NTMgLSAibWFrZSBpbnN0YWxsIiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgbm93IGluc3RhbGwgb3IKKyAgdXBncmFkZSBwaXAgYnkgZGVmYXVsdCwgdXNpbmcgdGhlIGJ1bmRsZWQgcGlwIHByb3ZpZGVkIGJ5IHRoZSBuZXcgZW5zdXJlcGlwCisgIG1vZHVsZS4gIEEgbmV3IGNvbmZpZ3VyZSBvcHRpb24sIC0td2l0aC1lbnN1cmVwaXBbPXVwZ3JhZGV8aW5zdGFsbHxub10sIGlzCisgIGF2YWlsYWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnN1cmVwaXAgIi0tdXBncmFkZSIgb3B0aW9uLiAgVGhlIG9wdGlvbgorICBjYW4gYWxzbyBiZSBzZXQgd2l0aCAibWFrZSBbYWx0XWluc3RhbGwgRU5TVVJFUElQPVt1cGdyYWRlfGluc3RhbGxcbm9dIi4KKworLSBJc3N1ZSAjMTk1NTE6IFBFUCA0NTMgLSB0aGUgT1MgWCBpbnN0YWxsZXIgbm93IGluc3RhbGxzIHBpcCBieSBkZWZhdWx0LgorCistIFVwZGF0ZSB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgZm9yIE9TIFggaW5zdGFsbGVyczoKKyAgICB4eiA1LjAuMyAtPiA1LjAuNQorICAgIFNRTGl0ZSAzLjcuMTMgLT4gMy44LjEKKworLSBJc3N1ZSAjMTU2NjM6IFJldmVydCBPUyBYIGluc3RhbGxlciBidWlsdC1pbiBUY2wvVGsgc3VwcG9ydCBmb3IgMy40LjBiMS4KKyAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAorICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCisgIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxOTczMDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBhbGwgdGhlIGV4aXN0aW5nIFB5QXJnCisgICJmb3JtYXQgdW5pdHMiIGFzIGxlZ2FjeSBjb252ZXJ0ZXJzLCBhcyB3ZWxsIGFzIHR3byBuZXcgZmVhdHVyZXM6CisgICJzZWxmIGNvbnZlcnRlcnMiIGFuZCB0aGUgInZlcnNpb24iIGRpcmVjdGl2ZS4KKworLSBJc3N1ZSAjMTk1NTI6IHB5dmVudiBub3cgYm9vdHN0cmFwcyBwaXAgaW50byB2aXJ0dWFsIGVudmlyb25tZW50cyBieQorICBkZWZhdWx0IChwYXNzIC0td2l0aG91dC1waXAgdG8gcmVxdWVzdCB0aGUgb2xkIGJlaGF2aW91cikKKworLSBJc3N1ZSAjMTkzOTA6IEFyZ3VtZW50IENsaW5pYyBubyBsb25nZXIgYWNjZXB0cyBtYWxmb3JtZWQgUHl0aG9uCisgIGFuZCBDIGlkcy4KKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0xMC0yMAorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTkzMDE6IEdpdmUgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGdsb2JhbCBhCisgIGdsb2JhbCBxdWFsbmFtZS4KKworLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbG9uZ2VyIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTY2MTI6IEFkZCAiQXJndW1lbnQgQ2xpbmljIiwgYSBjb21waWxlLXRpbWUgcHJlcHJvY2Vzc29yIGZvcgorICBDIGZpbGVzIHRvIGdlbmVyYXRlIGFyZ3VtZW50IHBhcnNpbmcgY29kZS4gIChTZWUgUEVQIDQzNi4pCisKKy0gSXNzdWUgIzE4ODEwOiBTaGlmdCBzdGF0IGNhbGxzIGluIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBzdWNoIHRoYXQKKyAgdGhlIGNvZGUgaXMgb3B0aW1pc3RpYyB0aGF0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZXhhY3RseQorICBsaWtlIHRoZSBwb3NzaWJsZSBwYWNrYWdlIGJlaW5nIHNlYXJjaGVkIGZvciB0aGF0IGl0J3MgaW4gYWN0dWFsaXR5IGEKKyAgZGlyZWN0b3J5LgorCistIElzc3VlICMxODQxNjogaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyIG5vdyB0cmVhdHMgJycgYXMgdGhlIGN3ZCBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vIGxvbmdlciBzcGVjaWFsLWNhc2VzICcnIHRvICcuJy4gVGhpcyBsZWFkcworICB0byBtb2R1bGVzIGltcG9ydGVkIGZyb20gY3dkIHRvIG5vdyBwb3NzZXNzIGFuIGFic29sdXRlIGZpbGUgcGF0aCBmb3IKKyAgX19maWxlX18gKHRoaXMgZG9lcyBub3QgYWZmZWN0IG1vZHVsZXMgc3BlY2lmaWVkIGJ5IHBhdGggb24gdGhlIENMSSBidXQgaXQKKyAgZG9lcyBhZmZlY3QgLW0vcnVucHkpLiBJdCBhbHNvIGFsbG93cyBGaWxlRmluZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCBieSBub3QKKyAgaGF2aW5nIGFuIGVkZ2UgY2FzZS4KKworLSBJc3N1ZSAjNDU1NTogQWxsIGV4cG9ydGVkIEMgc3ltYm9scyBhcmUgbm93IHByZWZpeGVkIHdpdGggZWl0aGVyCisgICJQeSIgb3IgIl9QeSIuCisKKy0gSXNzdWUgIzE5MjE5OiBTcGVlZCB1cCBtYXJzaGFsLmxvYWRzKCksIGFuZCBtYWtlIHB5YyBmaWxlcyBzbGlnaHRseQorICAoNSUgdG8gMTAlKSBzbWFsbGVyLgorCistIElzc3VlICMxOTIyMTogVXBncmFkZSBVbmljb2RlIGRhdGFiYXNlIHRvIHZlcnNpb24gNi4zLjAuCisKKy0gSXNzdWUgIzE2NzQyOiBUaGUgcmVzdWx0IG9mIHRoZSBDIGNhbGxiYWNrIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpIG9yIFB5TWVtX1Jhd1JlYWxsb2MoKSAob3IgTlVMTAorICBpZiBhbiBlcnJvciBvY2N1cnJlZCksIGluc3RlYWQgb2YgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX01hbGxvYygpIG9yCisgIFB5TWVtX1JlYWxsb2MoKS4KKworLSBJc3N1ZSAjMTkxOTk6IFJlbW92ZSBgYFB5VGhyZWFkU3RhdGUudGlja19jb3VudGVyYGAgZmllbGQKKworLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAorICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCisKKy0gSXNzdWUgIzE5MDg3OiBJbXByb3ZlIGJ5dGVhcnJheSBhbGxvY2F0aW9uIGluIG9yZGVyIHRvIGFsbG93IGNoZWFwIHBvcHBpbmcKKyAgb2YgZGF0YSBhdCB0aGUgZnJvbnQgKHNsaWNlIGRlbGV0aW9uKS4KKworLSBJc3N1ZSAjMTkwMTQ6IG1lbW9yeXZpZXcuY2FzdCgpIGlzIG5vdyBhbGxvd2VkIG9uIHplcm8tbGVuZ3RoIHZpZXdzLgorCistIElzc3VlICMxODY5MDogbWVtb3J5dmlldyBpcyBub3cgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGgKKyAgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlCisKKy0gSXNzdWUgIzE5MDc4OiBtZW1vcnl2aWV3IG5vdyBjb3JyZWN0bHkgc3VwcG9ydHMgdGhlIHJldmVyc2VkIGJ1aWx0aW4KKyAgKFBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNzQ1NzogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm93IHdvcmtzIHdpdGggbmFtZXNwYWNlIHBhY2thZ2VzLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKIC0gSXNzdWUgIzE4MjM1OiBGaXggdGhlIHN5c2NvbmZpZyB2YXJpYWJsZXMgTERTSEFSRUQgYW5kIEJMRFNIQVJFRCB1bmRlciBBSVguCiAgIFBhdGNoIGJ5IERhdmlkIEVkZWxzb2huLgogCistIElzc3VlICMxODYwNjogQWRkIHRoZSBuZXcgInN0YXRpc3RpY3MiIG1vZHVsZSAoUEVQIDQ1MCkuICBDb250cmlidXRlZAorICBieSBTdGV2ZW4gRCdBcHJhbm8uCisKKy0gSXNzdWUgIzEyODY2OiBUaGUgYXVkaW9vcCBtb2R1bGUgbm93IHN1cHBvcnRzIDI0LWJpdCBzYW1wbGVzLgorCistIElzc3VlICMxOTI1NDogUHJvdmlkZSBhbiBvcHRpbWl6ZWQgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBia2RmMl9obWFjLgorCistIElzc3VlcyAjMTkyMDEsICMxOTIyMiwgIzE5MjIzOiBBZGQgIngiIG1vZGUgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgaW4gb3BlbmluZworICBmaWxlIHRvIGJ6MiwgZ3ppcCBhbmQgbHptYSBtb2R1bGVzLiBQYXRjaGVzIGJ5IFRpbSBIZWFuZXkgYW5kIFZhanJhc2t5IEtvay4KKworLSBGaXggYSByZWZlcmVuY2UgY291bnQgbGVhayBpbiBfc3JlLgorCistIElzc3VlICMxOTI2MjogSW5pdGlhbCBjaGVjayBpbiBvZiB0aGUgJ2FzeW5jaW8nIHBhY2thZ2UgKGEuay5hLiBUdWxpcCwKKyAgYS5rLmEuIFBFUCAzMTU2KS4gIFRoZXJlIGFyZSBubyBkb2NzIHlldCwgYW5kIHRoZSBQRVAgaXMgc2xpZ2h0bHkKKyAgb3V0IG9mIGRhdGUgd2l0aCB0aGUgY29kZS4gIFRoaXMgbW9kdWxlIHdpbGwgaGF2ZSAqcHJvdmlzaW9uYWwqIHN0YXR1cworICBpbiBQeXRob24gMy40LgorCiAtIElzc3VlICMxOTI3NjogRml4ZWQgdGhlIHdhdmUgbW9kdWxlIG9uIDY0LWJpdCBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTkyNjY6IFJlbmFtZSB0aGUgbmV3LWluLTMuNCBgYGNvbnRleHRsaWIuaWdub3JlYGAgY29udGV4dCBtYW5hZ2VyCisgIHRvIGBgY29udGV4dGxpYi5zdXBwcmVzc2BgIGluIG9yZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nCisgIGRlc2NyaXB0aW9ucyBvZiB0aGF0IG9wZXJhdGlvbiBlbHNld2hlcmUgaW4gdGhlIGxhbmd1YWdlIGFuZCBzdGFuZGFyZAorICBsaWJyYXJ5IGRvY3VtZW50YXRpb24gKFBhdGNoIGJ5IFplcm8gUGlyYWV1cykuCisKKy0gSXNzdWUgIzE4ODkxOiBDb21wbGV0ZWQgdGhlIG5ldyBlbWFpbCBwYWNrYWdlIChwcm92aXNpb25hbCkgQVBJIGFkZGl0aW9ucworICBieSBhZGRpbmcgbmV3IGNsYXNzZXMgRW1haWxNZXNzYWdlLCBNSU1FUGFydCwgYW5kIENvbnRlbnRNYW5hZ2VyLgorCistIElzc3VlICMxODI4MTogVW51c2VkIHN0YXQgY29uc3RhbnRzIHJlbW92ZWQgZnJvbSBgdGFyZmlsZWAuCisKKy0gSXNzdWUgIzE4NDY4OiBUaGUgcmUuc3BsaXQsIHJlLmZpbmRhbGwsIGFuZCByZS5zdWIgZnVuY3Rpb25zIGFuZCB0aGUgZ3JvdXAoKQorICBhbmQgZ3JvdXBzKCkgbWV0aG9kcyBvZiBtYXRjaCBvYmplY3Qgbm93IGFsd2F5cyByZXR1cm4gYSBzdHJpbmcgb3IgYSBieXRlcworICBvYmplY3QuCisKKy0gSXNzdWUgIzE4NzI1OiBUaGUgdGV4dHdyYXAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0cnVuY2F0aW5nIG11bHRpbGluZSB0ZXh0LgorCiAtIElzc3VlICMxODc3NjogYXRleGl0IGNhbGxiYWNrcyBub3cgZGlzcGxheSB0aGVpciBmdWxsIHRyYWNlYmFjayB3aGVuIHRoZXkKICAgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAtIElzc3VlICMxNzgyNzogQWRkIHRoZSBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIGBgY29kZWNzLmVuY29kZWBgIGFuZAogICBgYGNvZGVjcy5kZWNvZGVgYC4KIAotLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKLSAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgotICBPcmlnaW5hbCBwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4uCistIElzc3VlICMxOTIxODogUmVuYW1lIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIGluIG9yZGVyIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgogCi0tIElzc3VlICMxODkxOTogSWYgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIGEgd3JpdGVyIGluIHRoZSBzdW5hdSBvciB3YXZlIG1vZHVsZQotICBmYWlsZWQsIHNlY29uZCBpbnZvY2F0aW9uIG9mIGNsb3NlKCkgYW5kIGRlc3RydWN0b3Igbm8gbW9yZSByYWlzZSBhbgotICBleGNlcHRpb24uCistIElzc3VlICMxODU4MjogQWRkICdwYmtkZjJfaG1hYycgdG8gdGhlIGhhc2hsaWIgbW9kdWxlLiBJdCBpbXBsZW1lbnRzIFBLQ1MjNQorICBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgd2l0aCBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAogLSBJc3N1ZSAjMTkxMzE6IFRoZSBhaWZjIG1vZHVsZSBub3cgY29ycmVjdGx5IHJlYWRzIGFuZCB3cml0ZXMgc2FtcHdpZHRoIG9mCiAgIGNvbXByZXNzZWQgc3RyZWFtcy4KIAorLSBJc3N1ZSAjMTkyMDk6IFJlbW92ZSBpbXBvcnQgb2YgY29weXJlZyBmcm9tIHRoZSBvcyBtb2R1bGUgdG8gc3BlZWQgdXAKKyAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gc3RhdF9yZXN1bHQgYW5kIHN0YXR2ZnNfcmVzdWx0IGFyZSBub3cgaGFyZC1jb2RlZCB0bworICByZXNpZGUgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkyMDU6IERvbid0IGltcG9ydCB0aGUgJ3JlJyBtb2R1bGUgaW4gc2l0ZSBhbmQgc3lzY29uZmlnIG1vZHVsZSB0bworICB0byBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KKworLSBJc3N1ZSAjOTU0ODogQWRkIGEgbWluaW1hbCAiX2Jvb3Rsb2NhbGUiIG1vZHVsZSB0aGF0IGlzIGltcG9ydGVkIGJ5IHRoZQorICBfaW8gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg3NjQ6IHJlbW92ZSB0aGUgJ3ByaW50JyBhbGlhcyBmb3IgdGhlIFBEQiAncCcgY29tbWFuZCBzbyB0aGF0IGl0IG5vCisgIGxvbmdlciBzaGFkb3dzIHRoZSBwcmludCBmdW5jdGlvbi4KKwogLSBJc3N1ZSAjMTkxNTg6ICBhIHJhcmUgcmFjZSBpbiBCb3VuZGVkU2VtYXBob3JlIGNvdWxkIGFsbG93IC5yZWxlYXNlKCkgdG9vCiAgIG9mdGVuLgogCistIElzc3VlICMxNTgwNTogQWRkIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KCkuCisKKy0gSXNzdWUgIzE4NzE2OiBEZXByZWNhdGUgdGhlIGZvcm1hdHRlciBtb2R1bGUuCisKKy0gSXNzdWUgIzEwNzEyOiAydG8zIGhhcyBhIG5ldyAiYXNzZXJ0cyIgZml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIG5hbWVzCisgIG9mIHVuaXR0ZXN0IG1ldGhvZHMgKGUuZy4gZmFpbFVubGVzc0VxdWFsIC0+IGFzc2VydEVxdWFsKS4KKwogLSBJc3N1ZSAjMTgwMzc6IDJ0bzMgbm93IGVzY2FwZXMgJ1x1JyBhbmQgJ1xVJyBpbiBuYXRpdmUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTc4Mzk6IGJhc2U2NC5kZWNvZGVieXRlcyBhbmQgYmFzZTY0LmVuY29kZWJ5dGVzIG5vdyBhY2NlcHQgYW55CisgIG9iamVjdCB0aGF0IGV4cG9ydHMgYSAxIGRpbWVuc2lvbmFsIGFycmF5IG9mIGJ5dGVzICh0aGlzIG1lYW5zIHRoZSBzYW1lCisgIGlzIG5vdyBhbHNvIHRydWUgZm9yIGJhc2U2NF9jb2RlYykKKworLSBJc3N1ZSAjMTkxMzI6IFRoZSBwcHJpbnQgbW9kdWxlIG5vdyBzdXBwb3J0cyBjb21wYWN0IG1vZGUuCisKIC0gSXNzdWUgIzE5MTM3OiBUaGUgcHByaW50IG1vZHVsZSBub3cgY29ycmVjdGx5IGZvcm1hdHMgaW5zdGFuY2VzIG9mIHNldCBhbmQKICAgZnJvemVuc2V0IHN1YmNsYXNzZXMuCiAKKy0gSXNzdWUgIzEwMDQyOiBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgbm93IGNvcnJlY3RseSBoYW5kbGVzCisgIE5vdEltcGxlbWVudGVkIGJlaW5nIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gKFBhdGNoCisgIGJ5IEthdGllIE1pbGxlcikKKwogLSBJc3N1ZSAjMTkwOTI6IGNvbnRleHRsaWIuRXhpdFN0YWNrIG5vdyBjb3JyZWN0bHkgcmVyYWlzZXMgZXhjZXB0aW9ucwogICBmcm9tIHRoZSBfX2V4aXRfXyBjYWxsYmFja3Mgb2YgaW5uZXIgY29udGV4dCBtYW5hZ2VycyAoUGF0Y2ggYnkgSHJ2b2plCiAgIE5pa8WhacSHKQpAQCAtMzA4LDE1ICs2ODQsODkgQEAKIC0gSXNzdWUgIzEyNjQxOiBBdm9pZCBwYXNzaW5nICItbW5vLWN5Z3dpbiIgdG8gdGhlIG1pbmd3MzIgY29tcGlsZXIsIGV4Y2VwdAogICB3aGVuIG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IE9zY2FyIEJlbmphbWluLgogCi0tIElzc3VlICMxODU5NDogVGhlIGZhc3QgcGF0aCBmb3IgY29sbGVjdGlvbnMuQ291bnRlcigpIHdhcyBuZXZlciB0YWtlbgotICBkdWUgdG8gYW4gb3Zlci1yZXN0cmljdGl2ZSB0eXBlIGNoZWNrLiAgQW5kIHRoZSBmYWxsYmFjayBwYXRoIGRpZAotICBub3QgaW1wbGVtZW50IHRoZSBzYW1lIGFsZ29yaXRobSBhcyB0aGUgcHVyZSBweXRob24gY29kZS4KKy0gSXNzdWUgIzU4NDU6IEluIHNpdGUucHksIG9ubHkgbG9hZCByZWFkbGluZSBoaXN0b3J5IGZyb20gfi8ucHl0aG9uX2hpc3RvcnkKKyAgaWYgbm8gaGlzdG9yeSBoYXMgYmVlbiByZWFkIGFscmVhZHkuICBUaGlzIGF2b2lkcyBkb3VibGUgd3JpdGVzIHRvIHRoZQorICBoaXN0b3J5IGZpbGUgYXQgc2h1dGRvd24uCiAKIC0gUHJvcGVybHkgaW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIGEgU1NMIG9iamVjdCBhZnRlciBhbGxvY2F0aW9uLgogCistIElzc3VlICMxOTA5NTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHdoZW4gdGhlCisgIFNTTCBoYW5kc2hha2UgaGFzbid0IGJlZW4gZG9uZS4KKwogLSBJc3N1ZSAjNDM2NjogRml4IGJ1aWxkaW5nIGV4dGVuc2lvbnMgb24gYWxsIHBsYXRmb3JtcyB3aGVuIC0tZW5hYmxlLXNoYXJlZAogICBpcyB1c2VkLgogCistIElzc3VlICMxOTAzMDogRml4ZWQgYGluc3BlY3QuZ2V0bWVtYmVyc2AgYW5kIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYAorICB0byBhdHRlbXB0IGFjdGl2YXRpbmcgZGVzY3JpcHRvcnMgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBhIF9fZGljdF9fIHNlYXJjaAorICBmb3IgZmF1bHR5IGRlc2NyaXB0b3JzLiAgYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnNgIG5vIGxvbmdlciByZXR1cm5zCisgIEF0dHJpYnV0ZXMgd2hvc2UgaG9tZSBjbGFzcyBpcyBOb25lLgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTc3MjY3MzogVGhlIHR5cGUgb2YgYGNoYXIqYCBhcmd1bWVudHMgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4KKworLSBJc3N1ZSAjMTYxMjk6IEFkZGVkIGEgYFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgdG8gYWxsb3cgZW1iZWRkaW5nIGFwcGxpY2F0aW9ucyBsaWtlIEJsZW5kZXIgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyCisgIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgSU8gc3RyZWFtcyAoaW5pdGlhbCBwYXRjaCBieQorICBCYXN0aWVuIE1vbnRhZ25lKQorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTkyNzU6IEZpeCB0ZXN0X3NpdGUgb24gQU1ENjQgU25vdyBMZW9wYXJkCisKKy0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCisKKy0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCisgIHdhdmUuCisKKy0gSXNzdWUgIzE4NzE0OiBBZGRlZCB0ZXN0cyBmb3IgYGBwZGIuZmluZF9mdW5jdGlvbigpYGAuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg3NTg6IEZpeGVkIGFuZCBpbXByb3ZlZCBjcm9zcy1yZWZlcmVuY2VzLgorCistIElzc3VlICMxODk3MjogTW9kZXJuaXplIGVtYWlsIGV4YW1wbGVzIGFuZCB1c2UgdGhlIGFyZ3BhcnNlIG1vZHVsZSBpbiB0aGVtLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgorCistIElzc3VlICMxNTY2MzogVXBkYXRlIE9TIFggMTAuNisgaW5zdGFsbGVyIHRvIHVzZSBUY2wvVGsgOC41LjE1LgorCistIElzc3VlICMxNDQ5OTogRml4IHNldmVyYWwgcHJvYmxlbXMgd2l0aCBPUyBYIHVuaXZlcnNhbCBidWlsZCBzdXBwb3J0OgorICAgIDEuIHBwYyBhcmNoIGRldGVjdGlvbiBmb3IgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgYnJva2Ugd2l0aCBYY29kZSA1CisgICAgMi4gcHBjIGFyY2ggZGV0ZWN0aW9uIGluIGNvbmZpZ3VyZSBkaWQgbm90IHdvcmsgb24gT1MgWCAxMC40CisgICAgMy4gLXN5c3Jvb3QgYW5kIC1hcmNoIGZsYWdzIHdlcmUgdW5uZWNlc3NhcmlseSBkdXBsaWNhdGVkCisgICAgNC4gdGhlcmUgd2FzIG5vIG9idmlvdXMgd2F5IHRvIGNvbmZpZ3VyZSBhbiBpbnRlbC0zMiBvbmx5IGJ1aWxkLgorCistIElzc3VlICMxOTAxOTogQ2hhbmdlIHRoZSBPUyBYIGluc3RhbGxlciBidWlsZCBzY3JpcHQgdG8gdXNlIENGTEFHUyBpbnN0ZWFkCisgIG9mIE9QVCBmb3Igc3BlY2lhbCBidWlsZCBvcHRpb25zLiAgQnkgc2V0dGluZyBPUFQsIHNvbWUgY29tcGlsZXItc3BlY2lmaWMKKyAgb3B0aW9ucyBsaWtlIC1md3JhcHYgd2VyZSBvdmVycmlkZGVuIGFuZCB0aHVzIG5vdCB1c2VkLCB3aGljaCBjb3VsZCByZXN1bHQKKyAgaW4gYnJva2VuIGludGVycHJldGVycyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDktMjkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4ODE4OiBUaGUgImVuY29kaW5nbmFtZSIgcGFydCBvZiBQWVRIT05JT0VOQ09ESU5HIGlzIG5vdyBvcHRpb25hbC4KKworLSBJc3N1ZSAjMTkwOTg6IFByZXZlbnQgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBzZXQKKyAgYWJzdXJkbHkgaGlnaC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODkyOTogYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoKWAgbm93IGNvcnJlY3RseSBmaW5kcyBjbGFzcworICBhdHRyaWJ1dGVzIHJldHVybmVkIGJ5IGBkaXIoKWAgdGhhdCBhcmUgbG9jYXRlZCBpbiB0aGUgbWV0YWNsYXNzLgorCiAtIElzc3VlICMxODk1MDogRml4IG1pc2NlbGxhbmVvdXMgYnVncyBpbiB0aGUgc3VuYXUgbW9kdWxlLgogICBBdV9yZWFkLnJlYWRmcmFtZXMoKSBub3cgdXBkYXRlcyBjdXJyZW50IGZpbGUgcG9zaXRpb24gYW5kIHJlYWRzIGNvcnJlY3QKICAgbnVtYmVyIG9mIGZyYW1lcyBmcm9tIG11bHRpY2hhbm5lbCBzdHJlYW0uICBBdV93cml0ZS53cml0ZWZyYW1lc3JhdygpIG5vdwpAQCAtMzI0LDE3ICs3NzQsMjkgQEAKICAgaW50ZWdlciAoYXMgaW4gUHl0aG9uIDIpLiAgQXVfcmVhZCBhbmQgQXVfd3JpdGUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGZpbGUKICAgb2JqZWN0IGlmIHN0YXJ0IGZpbGUgcG9zaXRpb24gaXMgbm90IGEgemVyby4KIAorLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KKyAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4KKwogLSBJc3N1ZSAjMTkwNTM6IFppcEV4dEZpbGUucmVhZDEoKSB3aXRoIG5vbi16ZXJvIGFyZ3VtZW50IG5vIG1vcmUgcmV0dXJucyBlbXB0eQogICBieXRlcyB1bnRpbCBlbmQgb2YgZGF0YS4KIAotLSBJc3N1ZSAjMTkwMjg6IEZpeGVkIHRraW50ZXIuVGthcHAubWVyZ2UoKSBmb3Igbm9uLXN0cmluZyBhcmd1bWVudHMuCistIGxvZ2dpbmc6IGFkZGVkIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgdG8gU29ja2V0SGFuZGxlciBhbmQKKyAgRGF0YWdyYW1IYW5kbGVyLgorCistIElzc3VlICMxODk5NjogVGVzdENhc2UuYXNzZXJ0RXF1YWwoKSBub3cgbW9yZSBjbGV2ZXJseSBzaG9ydGVuIGRpZmZlcmluZworICBzdHJpbmdzIGluIGVycm9yIHJlcG9ydC4KKworLSBJc3N1ZSAjMTkwMzQ6IHJlcHIoKSBmb3IgdGtpbnRlci5UY2xfT2JqIG5vdyBleHBvc2VzIHN0cmluZyByZXBlcmVzZW50YXRpb24uCisKKy0gSXNzdWUgIzE4OTc4OiBgYHVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgYCBub3cgYWxsb3dzIHRoZSBtZXRob2QgdG8gYmUKKyAgaW5kaWNhdGVkIG9uIHRoZSBjbGFzcyBhbmQgbm8gbG9uZ2VyIHNldHMgaXQgdG8gTm9uZSBpbiBgYF9faW5pdF9fYGAuCisKKy0gSXNzdWUgIzE4NjI2OiB0aGUgaW5zcGVjdCBtb2R1bGUgbm93IG9mZmVycyBhIGJhc2ljIGNvbW1hbmQgbGluZQorICBpbnRyb3NwZWN0aW9uIGludGVyZmFjZSAoSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEpCiAKIC0gSXNzdWUgIzMwMTU6IEZpeGVkIHRraW50ZXIgd2l0aCB3YW50b2JqZWN0PUZhbHNlLiAgQW55IFRjbCBjb21tYW5kIGNhbGwKICAgcmV0dXJuZWQgZW1wdHkgc3RyaW5nLgogCi0tIElzc3VlICMxODA1MDogRml4ZWQgYW4gaW5jb21wYXRpYmlsaXR5IG9mIHRoZSByZSBtb2R1bGUgd2l0aCBQeXRob24gMy4zLjAKLSAgYmluYXJpZXMuCi0KIC0gSXNzdWUgIzE5MDM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm93IG1ha2VzIGFsbCBjaGFuZ2VzIHRvIG1haWxkaXIgZmlsZXMKICAgYmVmb3JlIG1vdmluZyB0aGVtIGludG8gcGxhY2UsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zCiAgIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgbWFpbGRpciBkaXJlY3RvcnkuCkBAIC0zNDgsNiArODEwLDEyIEBACiAtIElzc3VlICMxODg3MzogVGhlIHRva2VuaXplIG1vZHVsZSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2RpbmcKICAgb25seSBpbiBjb21tZW50IGxpbmVzLgogCistIElzc3VlICMxNzc2NDogRW5hYmxlIGh0dHAuc2VydmVyIHRvIGJpbmQgdG8gYSB1c2VyIHNwZWNpZmllZCBuZXR3b3JrCisgIGludGVyZmFjZS4gIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1hbHRlIFN3YXJ0LgorCistIElzc3VlICMxODkzNzogQWRkIGFuIGFzc2VydExvZ3MoKSBjb250ZXh0IG1hbmFnZXIgdG8gdW5pdHRlc3QuVGVzdENhc2UKKyAgdG8gZW5zdXJlIHRoYXQgYSBibG9jayBvZiBjb2RlIGVtaXRzIGEgbWVzc2FnZSB1c2luZyB0aGUgbG9nZ2luZyBtb2R1bGUuCisKIC0gSXNzdWUgIzE3MzI0OiBGaXggaHR0cC5zZXJ2ZXIncyByZXF1ZXN0IGhhbmRsaW5nIGNhc2Ugb24gdHJhaWxpbmcgJy8nLiBQYXRjaAogICBjb250cmlidXRlZCBieSBWYWpyYXNreSBLb2suCiAKQEAgLTM1OCwzMyArODI2LDE2OSBAQAogICBpZiBhbGwgbmVjZXNzYXJ5IGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBmb3VuZCBpbiBsaWJ1dWlkLgogICBQYXRjaCBieSBFdmdlbnkgU29sb2d1Ym92LgogCistIFRoZSA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdyBvbmx5IGVuYWJsZXMgdGhlCisgIGZhdWx0aGFuZGxlciBtb2R1bGUgaWYgdGhlIHZhcmlhYmxlIGlzIG5vbi1lbXB0eS4gU2FtZSBiZWhhdmlvdXIgdGhhbiBvdGhlcgorICB2YXJpYWJsZXMgbGlrZSA6ZW52dmFyOmBQWVRIT05ET05UV1JJVEVCWVRFQ09ERWAuCisKKy0gSXNzdWUgIzE1NjU1MjU6IE5ldyBmdW5jdGlvbiBgYHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgYCB3aWxsIGNsZWFyCisgIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgcmVmZXJlbmNlZCBieSBhIHRyYWNlYmFjaworICBvYmplY3QuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KKyAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQorICBXYXJlLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKKyAgbGluZXMuCisKKy0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTcwMDM6IFVuaWZpZWQgdGhlIHNpemUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGlvIG1vZHVsZSB3aXRoIGNvbW1vbgorICBwcmFjdGljZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE4NTk2OiBTdXBwb3J0IHRoZSB1c2Ugb2YgYWRkcmVzcyBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IHZlcnNpb25zCisgIG9mIGNsYW5nIGFuZCBHQ0MgYnkgYXBwcm9wcmlhdGVseSBtYXJraW5nIGtub3duIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvci4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQorICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTA5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODk0Mjogc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgb3V0cHV0IHdhcyBkYW1hZ2VkIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4NzgwOiAlLWZvcm1hdHRpbmcgbm93IHByaW50cyB2YWx1ZSBpbnN0ZWFkIG9mIHN0ciBmb3IKKyAgaW50IHN1YmNsYXNzZXMgd2hlbiB1c2luZyAlZCwgJWksIGFuZCAldSBjb2Rlcy4KKworLSBJc3N1ZSAjMTg1NzE6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBQRVAgNDQ2OiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBmaWxlCisgIGhhbmRsZXMgYXJlIG5vdyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZTsgYWRkIGZ1bmN0aW9ucworICBvcy5nZXQvc2V0X2luaGVyaXRhYmxlKCksIG9zLmdldC9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKCkgYW5kCisgIHNvY2tldC5zb2NrZXQuZ2V0L3NldF9pbmhlcml0YWJsZSgpLgorCistIElzc3VlICMxMTYxOTogVGhlIHBhcnNlciBhbmQgdGhlIGltcG9ydCBtYWNoaW5lcnkgZG8gbm90IGVuY29kZSBVbmljb2RlCisgIGZpbGVuYW1lcyBhbnltb3JlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4ODA4OiBOb24tZGFlbW9uIHRocmVhZHMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IGpvaW5lZCB3aGVuCisgIGEgc3ViLWludGVycHJldGVyIGlzIHNodXRkb3duIChpdCB3b3VsZCBwcmV2aW91c2x5IGR1bXAgYSBmYXRhbCBlcnJvcikuCisKKy0gUmVtb3ZlIHN1cHBvcnRpbmcgZm9yIGNvbXBpbGluZyBvbiBzeXN0ZW1zIHdpdGhvdXQgZ2V0Y3dkKCkuCisKKy0gSXNzdWUgIzE4Nzc0OiBSZW1vdmUgbGFzdCBiaXRzIG9mIEdOVSBQVEggdGhyZWFkIGNvZGUgYW5kIHRocmVhZF9wdGguaC4KKworLSBJc3N1ZSAjMTg3NzE6IEFkZCBvcHRpbWl6YXRpb24gdG8gc2V0IG9iamVjdCBsb29rdXBzIHRvIHJlZHVjZSB0aGUgY29zdAorICBvZiBoYXNoIGNvbGxpc2lvbnMuICBUaGUgY29yZSBpZGVhIGlzIHRvIGluc3BlY3QgYSBzZWNvbmQga2V5L2hhc2ggcGFpcgorICBmb3IgZWFjaCBjYWNoZSBsaW5lIHJldHJpZXZlZC4KKworLSBJc3N1ZSAjMTYxMDU6IFdoZW4gYSBzaWduYWwgaGFuZGxlciBmYWlscyB0byB3cml0ZSB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIHJlZ2lzdGVyZWQgd2l0aCBgYHNpZ25hbC5zZXRfd2FrZXVwX2ZkKClgYCwgcmVwb3J0IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkCisgIG9mIGlnbm9yaW5nIHRoZSBlcnJvci4KKworLSBJc3N1ZSAjMTg3MjI6IFJlbW92ZSB1c2VzIG9mIHRoZSAicmVnaXN0ZXIiIGtleXdvcmQgaW4gQyBjb2RlLgorCistIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE2NDk5OiBBZGQgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgaXNvbGF0ZWQgbW9kZS4KKworLSBJc3N1ZSAjMTUzMDE6IFBhcnNpbmcgZmQsIHVpZCwgYW5kIGdpZCBwYXJhbWV0ZXJzIGZvciBidWlsdGlucworICBpbiBNb2R1bGVzL3Bvc2l4bW9kdWxlLmMgaXMgbm93IGZhciBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMTgzNjg6IFB5T1NfU3RkaW9SZWFkbGluZSgpIG5vIGxvbmdlciBsZWFrcyBtZW1vcnkgd2hlbiByZWFsbG9jKCkKKyAgZmFpbC4KKworLSBJc3N1ZSAjMTc5MzQ6IEFkZCBhIGNsZWFyKCkgbWV0aG9kIHRvIGZyYW1lIG9iamVjdHMsIHRvIGhlbHAgY2xlYW4gdXAKKyAgZXhwZW5zaXZlIGRldGFpbHMgKGxvY2FsIHZhcmlhYmxlcykgYW5kIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisKKy0gSXNzdWUgIzE4NzgwOiAlLWZvcm1hdHRpbmcgY29kZXMgJWQsICVpLCBhbmQgJXUgbm93IHRyZWF0IGludC1zdWJjbGFzc2VzCisgIGFzIGludCAoZGlzcGxheXMgdmFsdWUgb2YgaW50LXN1YmNsYXNzIGluc3RlYWQgb2Ygc3RyKGludC1zdWJjbGFzcykgKS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODgwODogVGhyZWFkLmpvaW4oKSBub3cgd2FpdHMgZm9yIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBzdGF0ZSB0bworICBiZSBkZXN0cm95ZWQgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSBhYm9ydHMgaW4KKyAgUHlfRW5kSW50ZXJwcmV0ZXIoKSB3aGVuIHNvbWUgbm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBzdGlsbCBydW5uaW5nLgorCistIElzc3VlICMxODQ1ODogUHJldmVudCBjcmFzaGVzIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgbGliZWRpdC4gIEl0cyByZWFkbGluZQorICBlbXVsYXRpb24gaGFzIGNoYW5nZWQgZnJvbSAwLWJhc2VkIGluZGV4aW5nIHRvIDEtYmFzZWQgbGlrZSBnbnUgcmVhZGxpbmUuCisKKy0gSXNzdWUgIzE4ODUyOiBIYW5kbGUgY2FzZSBvZiBgYHJlYWRsaW5lLl9fZG9jX19gYCBiZWluZyBgYE5vbmVgYCBpbiB0aGUgbmV3CisgIHJlYWRsaW5lIGFjdGl2YXRpb24gY29kZSBpbiBgYHNpdGUucHlgYC4KKwogLSBJc3N1ZSAjMTg2NzI6IEZpeGVkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBQeV9zc2l6ZV90IGluIGRlYnVnZ2luZyBvdXRwdXQgaW4KICAgdGhlIF9zcmUgbW9kdWxlLgogCiAtIElzc3VlICMxODgzMDogaW5zcGVjdC5nZXRjbGFzc3RyZWUoKSBubyBtb3JlIHByb2R1Y2VzIGR1cGxpY2F0ZWQgZW50cmllcyBldmVuCiAgIHdoZW4gaW5wdXQgbGlzdCBjb250YWlucyBkdXBsaWNhdGVzLgogCistIElzc3VlICMxODg3ODogc3VuYXUub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIEJhc2VkIG9uCisgIHBhdGNoZXMgYnkgQ2xhdWRpdSBQb3BhIGFuZCBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE4OTA5OiBGaXggX3RraW50ZXIudGthcHAuaW50ZXJwYWRkcigpIG9uIFdpbmRvd3MgNjQtYml0LCBkb24ndCBjYXN0CiAgIDY0LWJpdCBwb2ludGVyIHRvIGxvbmcgKDMyIGJpdHMpLgogCiAtIElzc3VlICMxODg3NjogVGhlIEZpbGVJTy5tb2RlIGF0dHJpYnV0ZSBub3cgYmV0dGVyIHJlZmxlY3RzIHRoZSBhY3R1YWwgbW9kZQogICB1bmRlciB3aGljaCB0aGUgZmlsZSB3YXMgb3BlbmVkLiAgUGF0Y2ggYnkgRXJpayBCcmF5LgogCistIElzc3VlICMxNjg1MzogQWRkIG5ldyBzZWxlY3RvcnMgbW9kdWxlLgorCistIElzc3VlICMxODg4MjogQWRkIHRocmVhZGluZy5tYWluX3RocmVhZCgpIGZ1bmN0aW9uLgorCistIElzc3VlICMxODkwMTogVGhlIHN1bmF1IGdldHBhcmFtcyBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuCisgIGEgcGxhaW4gdHVwbGUuICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE3NDg3OiBUaGUgcmVzdWx0IG9mIHRoZSB3YXZlIGdldHBhcmFtcyBtZXRob2Qgbm93IGlzIHBpY2tsZWFibGUgYWdhaW4uCisgIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTg3NTY6IG9zLnVyYW5kb20oKSBub3cgdXNlcyBhIGxhemlseS1vcGVuZWQgcGVyc2lzdGVudCBmaWxlCisgIGRlc2NyaXB0b3IsIHNvIGFzIHRvIGF2b2lkIHVzaW5nIG1hbnkgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIHJ1biBpbgorICBwYXJhbGxlbCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisKIC0gSXNzdWUgIzE4NDE4OiBBZnRlciBmb3JrKCksIHJlaW5pdCBhbGwgdGhyZWFkcyBzdGF0ZXMsIG5vdCBvbmx5IGFjdGl2ZSBvbmVzLgogICBQYXRjaCBieSBBLiBKZXNzZSBKaXJ5dSBEYXZpcy4KIAorLSBJc3N1ZSAjMTc5NzQ6IFN3aXRjaCB1bml0dGVzdCBmcm9tIHVzaW5nIGdldG9wdCB0byB1c2luZyBhcmdwYXJzZS4KKworLSBJc3N1ZSAjMTE3OTg6IFRlc3RTdWl0ZSBub3cgZHJvcHMgcmVmZXJlbmNlcyB0byBvd24gdGVzdHMgYWZ0ZXIgZXhlY3V0aW9uLgorCiAtIElzc3VlICMxNjYxMTogaHR0cC5jb29raWUgbm93IGNvcnJlY3RseSBwYXJzZXMgdGhlICdzZWN1cmUnIGFuZCAnaHR0cG9ubHknCiAgIGNvb2tpZSBmbGFncy4KIAogLSBJc3N1ZSAjMTE5NzM6IEZpeCBhIHByb2JsZW0gaW4ga2V2ZW50LiBUaGUgZmxhZ3MgYW5kIGZmbGFncyBmaWVsZHMgYXJlIG5vdwogICBwcm9wZXJseSBoYW5kbGVkIGFzIHVuc2lnbmVkLgogCistIElzc3VlICMxODgwNzogYGBweXZlbnZgYCBub3cgdGFrZXMgYSAtLWNvcGllcyBhcmd1bWVudCBhbGxvd2luZyBjb3BpZXMKKyAgaW5zdGVhZCBvZiBzeW1saW5rcyBldmVuIHdoZXJlIHN5bWxpbmtzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0LgorCistIElzc3VlICMxODUzODogYGBweXRob24gLW0gZGlzYGAgbm93IHVzZXMgYXJncGFyc2UgZm9yIGFyZ3VtZW50IHByb2Nlc3NpbmcuCisgIFBhdGNoIGJ5IE1pY2hlbGUgT3Jyw7kuCisKKy0gSXNzdWUgIzE4Mzk0OiBDbG9zZSBjZ2kuRmllbGRTdG9yYWdlJ3Mgb3B0aW9uYWwgZmlsZS4KKwogLSBJc3N1ZSAjMTc3MDI6IE9uIGVycm9yLCBvcy5lbnZpcm9uYiBub3cgcmVtb3ZlcyBzdXBwcmVzcyB0aGUgZXhjZXB0IGNvbnRleHQKICAgd2hlbiByYWlzaW5nIGEgbmV3IEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGtleS4KIAotLSBJc3N1ZSAjMTg3NTU6IEZpeGVkIHRoZSBsb2FkZXIgdXNlZCBpbiBpbXAgdG8gYWxsb3cgZ2V0X2RhdGEoKSB0byBiZSBjYWxsZWQKLSAgbXVsdGlwbGUgdGltZXMuCi0KIC0gSXNzdWUgIzE2ODA5OiBGaXhlZCBzb21lIHRraW50ZXIgaW5jb21wYWJpbGl0aWVzIHdpdGggVGNsL1RrIDguNi4KIAogLSBJc3N1ZSAjMTY4MDk6IFRraW50ZXIncyBzcGxpdGxpc3QoKSBhbmQgc3BsaXQoKSBtZXRob2RzIG5vdyBhY2NlcHQgVGNsX09iagpAQCAtMzkzLDYgKzk5Nyw5IEBACiAtIElzc3VlICMxODMyNDogc2V0X3BheWxvYWQgbm93IGNvcnJlY3RseSBoYW5kbGVzIGJpbmFyeSBpbnB1dC4gIFRoaXMgYWxzbwogICBzdXBlcnNlZGVzIHRoZSBwcmV2aW91cyBmaXhlcyBmb3IgIzE0MzYwLCAjMTcxNywgYW5kICMxNjU2NC4KIAorLSBJc3N1ZSAjMTg3OTQ6IEFkZCBhIGZpbGVubygpIG1ldGhvZCBhbmQgYSBjbG9zZWQgYXR0cmlidXRlIHRvIHNlbGVjdC5kZXZwb2xsCisgIG9iamVjdHMuCisKIC0gSXNzdWUgIzE3MTE5OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIHByb2Nlc3NpbmcgbGFyZ2Ugc3RyaW5ncyBhbmQgdHVwbGVzCiAgIGluIHRoZSB0a2ludGVyIG1vZHVsZS4KIApAQCAtNDAzLDkgKzEwMTAsNiBAQAogLSBJc3N1ZSAjODg2NTogQ29uY3VycmVudCBpbnZvY2F0aW9uIG9mIHNlbGVjdC5wb2xsLnBvbGwoKSBub3cgcmFpc2VzIGEKICAgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IENocmlzdGlhbiBTY2h1YmVydC4KIAotLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAotICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgotCiAtIElzc3VlICMxODc3NzogVGhlIHNzbCBtb2R1bGUgbm93IHVzZXMgdGhlIG5ldyBDUllQVE9fVEhSRUFESUQgQVBJIG9mCiAgIE9wZW5TU0wgMS4wLjArIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgQ1JZUFRPIGlkIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC00MjAsNTAgKzEwMjQsNjAxIEBACiAgIHN0cmluZ3MgZm9yIGBgcmZjODIyTmFtZWBgIChlbWFpbCksIGBgZE5TTmFtZWBgIChETlMpIGFuZAogICBgYHVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXJgYCAoVVJJKS4KIAorLSBJc3N1ZSAjMTg3MDE6IFJlbW92ZSBzdXBwb3J0IG9mIG9sZCBDUHl0aG9uIHZlcnNpb25zICg8My4wKSBmcm9tIEMgY29kZS4KKwogLSBJc3N1ZSAjMTg3NTY6IEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGluIG9zLnVyYW5kb20oKSB3aGVuIHRoZSBmYWlsdXJlCiAgIGlzIGR1ZSB0byBzb21ldGhpbmcgZWxzZSB0aGFuIC9kZXYvdXJhbmRvbSBub3QgZXhpc3RpbmcgKGZvciBleGFtcGxlLAogICBleGhhdXN0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgbGltaXQpLgogCistIElzc3VlICMxODY3MzogQWRkIE9fVE1QRklMRSB0byBvcyBtb2R1bGUuIE9fVE1QRklMRSByZXF1aXJlcyBMaW51eCBrZXJuZWwKKyAgMy4xMSBvciBuZXdlci4gSXQncyBvbmx5IGRlZmluZWQgb24gc3lzdGVtIHdpdGggMy4xMSB1YXBpIGhlYWRlcnMsIHRvby4KKworLSBJc3N1ZSAjMTg1MzI6IENoYW5nZSB0aGUgYnVpbHRpbiBoYXNoIGFsZ29yaXRobXMnIG5hbWVzIHRvIGxvd2VyIGNhc2UgbmFtZXMKKyAgYXMgcHJvbWlzZWQgYnkgaGFzaGxpYidzIGRvY3VtZW50YXRpb24uCisKIC0gSXNzdWUgIzE4NDA1OiBJbXByb3ZlIHRoZSBlbnRyb3B5IG9mIGNyeXB0Lm1rc2FsdCgpLgogCistIElzc3VlICMxMjAxNTogVGhlIHRlbXBmaWxlIG1vZHVsZSBub3cgdXNlcyBhIHN1ZmZpeCBvZiA4IHJhbmRvbSBjaGFyYWN0ZXJzCisgIGluc3RlYWQgb2YgNiwgdG8gcmVkdWNlIHRoZSByaXNrIG9mIGZpbGVuYW1lIGNvbGxpc2lvbi4gVGhlIGVudHJvcHkgd2FzCisgIHJlZHVjZWQgd2hlbiB1cHBlcmNhc2UgbGV0dGVycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgY2hhcnNldCB1c2VkIHRvIGdlbmVyYXRlCisgIHJhbmRvbSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxODU4NTogQWRkIDpmdW5jOmB0ZXh0d3JhcC5zaG9ydGVuYCB0byBjb2xsYXBzZSBhbmQgdHJ1bmNhdGUgYQorICBwaWVjZSBvZiB0ZXh0IHRvIGEgZ2l2ZW4gbGVuZ3RoLgorCistIElzc3VlICMxODU5ODogVHdlYWsgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgdG8KKyAgaW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgd2hlbiBhIGtleSBhcmd1bWVudCBpcyBtaXNzaW5nLgorCiAtIElzc3VlICMxOTE1MTogRml4IGRvY3N0cmluZyBhbmQgdXNlIG9mIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpIHRvCiAgIHJlZmxlY3QgMi10dXBsZXMuCiAKKy0gSXNzdWUgIzE5MTUyOiBBZGQgRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWUoKS4KKwogLSBJc3N1ZSAjMTg2NzY6IENoYW5nZSAncG9zaXRpdmUnIHRvICdub24tbmVnYXRpdmUnIGluIHF1ZXVlLnB5IHB1dCBhbmQgZ2V0CiAgIGRvY3N0cmluZ3MgYW5kIFZhbHVlRXJyb3IgbWVzc2FnZXMuIFBhdGNoIGJ5IFpob25neXVlIEx1bwogCi0tIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcC5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKy0gRml4IHJlZmNvdW50aW5nIGlzc3VlIHdpdGggZXh0ZW5zaW9uIHR5cGVzIGluIHRraW50ZXIuCiAKIC0gSXNzdWUgIzgxMTI6IHhsbXJwYy5zZXJ2ZXIncyBEb2NYTUxSUENTZXJ2ZXIgc2VydmVyIG5vIGxvbmdlciByYWlzZXMgYW4gZXJyb3IKICAgaWYgbWV0aG9kcyBoYXZlIGFubm90YXRpb25zOyBpdCBub3cgY29ycmVjdGx5IGRpc3BsYXlzIHRoZSBhbm5vdGF0aW9ucy4KIAorLSBJc3N1ZSAjMTg2MDA6IEFkZGVkIHBvbGljeSBhcmd1bWVudCB0byBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nLAorICBhbmQgYXNfYnl0ZXMgYW5kIF9fYnl0ZXNfXyBtZXRob2RzIHRvIE1lc3NhZ2UuCisKKy0gSXNzdWUgIzE4NjcxOiBPdXRwdXQgbW9yZSBpbmZvcm1hdGlvbiB3aGVuIGxvZ2dpbmcgZXhjZXB0aW9ucyBvY2N1ci4KKworLSBJc3N1ZSAjMTg2MjE6IFByZXZlbnQgdGhlIHNpdGUgbW9kdWxlJ3MgcGF0Y2hlZCBidWlsdGlucyBmcm9tIGtlZXBpbmcKKyAgdG9vIG1hbnkgcmVmZXJlbmNlcyBhbGl2ZSBmb3IgdG9vIGxvbmcuCisKKy0gSXNzdWUgIzQ4ODU6IEFkZCB3ZWFrcmVmIHN1cHBvcnQgdG8gbW1hcCBvYmplY3RzLiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICM4ODYwOiBGaXhlZCByb3VuZGluZyBpbiB0aW1lZGVsdGEgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE4ODQ5OiBGaXhlZCBhIFdpbmRvd3Mtc3BlY2lmaWMgdGVtcGZpbGUgYnVnIHdoZXJlIGNvbGxpc2lvbiB3aXRoIGFuCisgIGV4aXN0aW5nIGRpcmVjdG9yeSBjYXVzZWQgbWtzdGVtcCBhbmQgcmVsYXRlZCBBUElzIHRvIGZhaWwgaW5zdGVhZCBvZgorICByZXRyeWluZy4gUmVwb3J0IGFuZCBmaXggYnkgVmxhZCBTaGNoZXJiaW5hLgorCistIElzc3VlICMxODkyMDogYXJncGFyc2UncyBkZWZhdWx0IGRlc3RpbmF0aW9uIGZvciB0aGUgdmVyc2lvbiBhY3Rpb24gKC12LAorICAtLXZlcnNpb24pIGhhcyBhbHNvIGJlZW4gY2hhbmdlZCB0byBzdGRvdXQsIHRvIG1hdGNoIHRoZSBQeXRob24gZXhlY3V0YWJsZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4NjIzOiBGYWN0b3Igb3V0IHRoZSBfU3VwcHJlc3NDb3JlRmlsZXMgY29udGV4dCBtYW5hZ2VyIGludG8KKyAgdGVzdC5zdXBwb3J0LiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KKworLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAorICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQorICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAorICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgorCistIElzc3VlICMxNjc5OTogU3dpdGNoZWQgZnJvbSBnZXRvcHQgdG8gYXJncGFyc2Ugc3R5bGUgaW4gcmVncnRlc3QncyBhcmd1bWVudAorICBwYXJzaW5nLiAgQWRkZWQgbW9yZSB0ZXN0cyBmb3IgcmVncnRlc3QncyBhcmd1bWVudCBwYXJzaW5nLgorCistIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcworICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cworICB2ZXJzaW9ucy4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODQ4OTogQWRkIHRlc3RzIGZvciBTZWFyY2hFbmdpbmUuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgorCistIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCisgIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgY29uZmlndXJlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCisgIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KKworLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTQgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisgNjQtLzMyLWJpdAorICBpbnN0YWxsZXIuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mCisgIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41CisgIHNoaXBwZWQgaW4gT1MgWCAxMC42IGFuZCBsYXRlciByZWxlYXNlcy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTIyOiBOb3cgVGhlIExpYi9zbXRwZC5weSBhbmQgVG9vbHMvaTE4bi9tc2dmbXQucHkgc2NyaXB0cyB3cml0ZQorICB0aGVpciB2ZXJzaW9uIHN0cmluZ3MgdG8gc3Rkb3V0LCBhbmQgbm90IHRvIHNkZXJyLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA4LTAzCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KKworLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTAyNDE6IENsZWFyIGV4dGVuc2lvbiBtb2R1bGUgZGljdCBjb3BpZXMgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgIFBhdGNoIGJ5IE5laWwgU2NoZW1lbmF1ZXIsIG1pbmltYWxseSBtb2RpZmllZC4KKworLSBJc3N1ZSAjOTAzNTogaXNtb3VudCBub3cgcmVjb2duaXNlcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZSByb290CisgIG9uIFdpbmRvd3MuIE9yaWdpbmFsIHBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxODIxNDogSW1wcm92ZSBmaW5hbGl6YXRpb24gb2YgUHl0aG9uIG1vZHVsZXMgdG8gYXZvaWQgc2V0dGluZworICB0aGVpciBnbG9iYWxzIHRvIE5vbmUsIGluIG1vc3QgY2FzZXMuCisKKy0gSXNzdWUgIzE4MTEyOiBQRVAgNDQyIGltcGxlbWVudGF0aW9uIChzYWZlIG9iamVjdCBmaW5hbGl6YXRpb24pLgorCistIElzc3VlICMxODU1MjogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIFB5QXJlbmFfQWRkUHlPYmplY3QoKSBpbgorICBvYmoyYXN0X29iamVjdCgpLgorCistIElzc3VlICMxODU2MDogRml4IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3VtKCkuCisKKy0gSXNzdWUgIzE4NTIwOiBBZGQgYSBuZXcgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoKSBmdW5jdGlvbiwgc2FtZSB0aGFuCisgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoKSBleGNlcHQgdGhhdCBpdCBoYXMgYSByZXR1cm4gdmFsdWUgKDAgb24gc3VjY2VzcywKKyAgLTEgb24gZXJyb3IpLgorCistIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKKyAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCisKKy0gSXNzdWUgIzE4NDA4OiBGaXggbWFueSB2YXJpb3VzIGJ1Z3MgaW4gY29kZSBoYW5kbGluZyBlcnJvcnMsIGVzcGVjaWFsbHkKKyAgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAoTWVtb3J5RXJyb3IpLgorCistIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCisKKy0gSXNzdWUgIzE4MzQyOiBVc2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSB3aGVuIGFuIGltcG9ydCBmYWlscyB3aGVuIHVzaW5nCisgIGBgZnJvbSAuLi4gaW1wb3J0IC4uLmBgLgorCistIElzc3VlICMxNzg3MjogRml4IGEgc2VnZmF1bHQgaW4gbWFyc2hhbC5sb2FkKCkgd2hlbiBpbnB1dCBzdHJlYW0gcmV0dXJucworICBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgorCistIElzc3VlICMxODMzODogYHB5dGhvbiAtLXZlcnNpb25gIG5vdyBwcmludHMgdmVyc2lvbiBzdHJpbmcgdG8gc3Rkb3V0LCBhbmQKKyAgbm90IHRvIHN0ZGVyci4gIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIE1pY2hhZWwgRGlja2Vucy4KKworLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KKyAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTcyMDY6IE9uIFdpbmRvd3MsIGluY3JlYXNlIHRoZSBzdGFjayBzaXplIGZyb20gMiBNQiB0byA0LjIgTUIgdG8gZml4CisgIGEgc3RhY2sgb3ZlcmZsb3cgaW4gdGhlIG1hcnNoYWwgbW9kdWxlIChmaXggYSBjcmFzaCBpbiB0ZXN0X21hcnNoYWwpLgorICBQYXRjaCB3cml0dGVuIGJ5IEplcmVteSBLbG90aC4KKworLSBJc3N1ZSAjMzMyOTogSW1wbGVtZW50IHRoZSBQRVAgNDQ1OiBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkKKyAgYWxsb2NhdG9ycy4KKworLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQorICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTM0ODM6IFVzZSBWaXJ0dWFsQWxsb2MgaW4gb2JtYWxsb2Mgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQorICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KKworLSBJc3N1ZSAjMTgxMTE6IFRoZSBtaW4oKSBhbmQgbWF4KCkgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IGEgZGVmYXVsdCBhcmd1bWVudAorICB0byBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBWYWx1ZUVycm9yIG9uIGFuIGVtcHR5IHNlcXVlbmNlLgorICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbi4pCisKKy0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCisgIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KKworLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQorICBjb2RlcG9pbnRzLgorCistIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgorCistIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAorICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCisKKy0gSXNzdWUgIzE3OTMxOiBSZXNvbHZlIGNvbmZ1c2lvbiBvbiBXaW5kb3dzIGJldHdlZW4gcGlkcyBhbmQgcHJvY2VzcworICBoYW5kbGVzLgorCistIFR3ZWFrIHRoZSBleGNlcHRpb24gbWVzc2FnZSB3aGVuIHRoZSBtYWdpYyBudW1iZXIgb3Igc2l6ZSB2YWx1ZSBpbiBhIGJ5dGVjb2RlCisgIGZpbGUgaXMgdHJ1bmNhdGVkLgorCistIElzc3VlICMxNzkzMjogRml4IGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgb24gV2luZG93cyA2NC1iaXQgaW4gaXRlcmF0b3JzOgorICBjaGFuZ2UgdGhlIEMgdHlwZSBvZiBzZXFpdGVyb2JqZWN0Lml0X2luZGV4IGZyb20gbG9uZyB0byBQeV9zc2l6ZV90LgorCistIElzc3VlICMxODA2NTogRG9uJ3Qgc2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGZyb3plbiBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMTgwODg6IFdoZW4gcmVsb2FkaW5nIGEgbW9kdWxlLCB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgYWxsIHJlbGV2YW50CisgIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZSAoZS5nLiBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sIF9fZmlsZV9fLAorICBfX2NhY2hlZF9fKS4KKworLSBJc3N1ZSAjMTc5Mzc6IFRyeSBoYXJkZXIgdG8gY29sbGVjdCBjeWNsaWMgZ2FyYmFnZSBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTIzNzA6IFByZXZlbnQgY2xhc3MgYm9kaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgX19jbGFzc19fCisgIGNsb3N1cmUuCisKKy0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQorICBicmFja2V0cy4KKworLSBJc3N1ZSAjMTcyMzc6IEZpeCBjcmFzaCBpbiB0aGUgQVNDSUkgZGVjb2RlciBvbiBtNjhrLgorCistIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuCisgIGNvcGllZCBpbnRvIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKworLSBJc3N1ZSAjMTU0NTQ2MzogQXQgc2h1dGRvd24sIGRlZmVyIGZpbmFsaXphdGlvbiBvZiBjb2RlYyBtb2R1bGVzIHNvCisgIHRoYXQgc3RkZXJyIHJlbWFpbnMgdXNhYmxlLgorCistIElzc3VlICM3MzMwOiBJbXBsZW1lbnQgd2lkdGggYW5kIHByZWNpc2lvbiAoZXg6ICIlNS4zcyIpIGZvciB0aGUgZm9ybWF0CisgIHN0cmluZyBvZiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGZ1bmN0aW9uLCBvcmlnaW5hbCBwYXRjaCB3cml0dGVuIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzE1NDU0NjM6IEdsb2JhbCB2YXJpYWJsZXMgY2F1Z2h0IGluIHJlZmVyZW5jZSBjeWNsZXMgYXJlIG5vdworICBnYXJiYWdlLWNvbGxlY3RlZCBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTcwOTQ6IENsZWFyIHN0YWxlIHRocmVhZCBzdGF0ZXMgYWZ0ZXIgZm9yaygpLiAgTm90ZSB0aGF0IHRoaXMKKyAgaXMgYSBwb3RlbnRpYWxseSBkaXNydXB0aXZlIGNoYW5nZSBzaW5jZSBpdCBtYXkgcmVsZWFzZSBzb21lIHN5c3RlbQorICByZXNvdXJjZXMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHJlbWFpbiBwZXJwZXR1YWxseSBhbGl2ZSAoZS5nLiBkYXRhYmFzZQorICBjb25uZWN0aW9ucyBrZXB0IGluIHRocmVhZC1sb2NhbCBzdG9yYWdlKS4KKworLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCisgIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgorCistIElzc3VlICM1ODQ1OiBFbmFibGUgdGFiLWNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIGJ5CisgIGRlZmF1bHQsIHRoYW5rcyB0byBhIG5ldyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworLSBJc3N1ZSAjMTcxMTUsMTcxMTY6IE1vZHVsZSBpbml0aWFsaXphdGlvbiBub3cgaW5jbHVkZXMgc2V0dGluZyBfX3BhY2thZ2VfXyBhbmQKKyAgX19sb2FkZXJfXyBhdHRyaWJ1dGVzIHRvIE5vbmUuCisKKy0gSXNzdWUgIzE3ODUzOiBFbnN1cmUgbG9jYWxzIG9mIGEgY2xhc3MgdGhhdCBzaGFkb3cgZnJlZSB2YXJpYWJsZXMgYWx3YXlzIHdpbgorICBvdmVyIHRoZSBjbG9zdXJlcy4KKworLSBJc3N1ZSAjMTc4NjM6IEluIHRoZSBpbnRlcmFjdGl2ZSBjb25zb2xlLCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlIGVuY29kaW5nCisgIGNhbid0IGJlIGZldGNoZWQgZnJvbSBzdGRpbi4KKworLSBJc3N1ZSAjMTc4Njc6IFJhaXNlIGFuIEltcG9ydEVycm9yIGlmIF9faW1wb3J0X18gaXMgbm90IGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KKworLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXBvcnRsaWIucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKworLSBJc3N1ZSAjMTc4NTc6IFByZXZlbnQgYnVpbGQgZmFpbHVyZXMgd2l0aCBwcmUtMy41LjAgdmVyc2lvbnMgb2Ygc3FsaXRlMywKKyAgc3VjaCBhcyB3YXMgc2hpcHBlZCB3aXRoIENlbnRvcyA1IGFuZCBNYWMgT1MgWCAxMC40LgorCistIElzc3VlICMxNzQxMzogc3lzLnNldHRyYWNlIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIHBhc3NlZCBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuCisgIGV4Y2VwdGlvbiBpbnN0YW5jZSBmb3IgdGhlICd2YWx1ZScgZWxlbWVudCBvZiB0aGUgYXJnIHR1cGxlIGlmIHRoZSBleGNlcHRpb24KKyAgb3JpZ2luYXRlZCBmcm9tIEMgY29kZTsgbm93IGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBhbHdheXMgcHJvdmlkZWQuCisKKy0gSXNzdWUgIzE3NzgyOiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBwbGF0Zm9ybXMgd2hlcmUKKyAgYGBzdHJ1Y3QgdGltZXNwZWNgYCdzICJ0dl9uc2VjIiBtZW1iZXIgaXMgbm90IGEgQyBsb25nLgorCistIElzc3VlICMxNzcyMjogV2hlbiBsb29raW5nIHVwIF9fcm91bmRfXywgcmVzb2x2ZSBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTYwNjE6IFNwZWVkIHVwIHN0ci5yZXBsYWNlKCkgZm9yIHJlcGxhY2luZyAxLWNoYXJhY3RlciBzdHJpbmdzLgorCistIElzc3VlICMxNzcxNTogRml4IHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGluIGEgX190cnVuY19fCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc2NDM6IEFkZCBfX2NhbGxiYWNrX18gYXR0cmlidXRlIHRvIHdlYWtyZWYucmVmLgorCistIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQorICBjbGFzcy4KKworLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KKworLSBJc3N1ZSAjMTQ0Mzk6IFB5dGhvbiBub3cgcHJpbnRzIHRoZSB0cmFjZWJhY2sgb24gcnVucHkgZmFpbHVyZSBhdCBzdGFydHVwLgorCistIElzc3VlICMxNzQ2OTogRml4IF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSBhbmQgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgIHdoZW4gcnVubmluZyBvbiB2YWxncmluZC4KKworLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzM1NzogQWRkIG1pc3NpbmcgdmVyYm9zaXR5IG1lc3NhZ2VzIGZvciAtdi8tdnYgdGhhdCB3ZXJlIGxvc3QgZHVyaW5nCisgIHRoZSBpbXBvcnRsaWIgdHJhbnNpdGlvbi4KKworLSBJc3N1ZSAjMTc2MTA6IERvbid0IHJlbHkgb24gbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIHRoZSBDIHFzb3J0KCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE3MzIzOiBUaGUgIltYIHJlZnMsIFkgYmxvY2tzXSIgcHJpbnRlZCBieSBkZWJ1ZyBidWlsZHMgaGFzIGJlZW4KKyAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHdpdGggdGhlIGAtWCBzaG93cmVmY291bnRgIG9wdGlvbi4KKworLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KKworLSBJc3N1ZSAjMTcyNzU6IENvcnJlY3RlZCBjbGFzcyBuYW1lIGluIGluaXQgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIEMgdmVyc2lvbiBvZgorICBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20uCisKKy0gSXNzdWUgIzc5NjM6IEZpeGVkIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB0aGF0IGlzc3VlZCB3aGVuIG9iamVjdCBpcworICBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzg3NDU6IFNtYWxsIHNwZWVkIHVwIHppcGltcG9ydCBvbiBXaW5kb3dzLiBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQorICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KKworLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKKyAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNjk2NzogSW4gZnVuY3Rpb24gZGVmaW5pdGlvbiwgZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0cyBiZWZvcmUKKyAga2V5d29yZC1vbmx5IGRlZmF1bHRzLgorCistIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCisgIGluIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCisgIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgorCistIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKKyAgaW5wdXQgYnVmZmVyLgorCistIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKKyAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgYmFzZSBhcmd1bWVudCB0byB0aGUgaW50IGNvbnN0cnVjdG9yIG5vIGxvbmdlciBhY2NlcHRzCisgIGZsb2F0cywgb3Igb3RoZXIgbm9uLWludGVnZXIgb2JqZWN0cyB3aXRoIGFuIF9faW50X18gbWV0aG9kLiAgT2JqZWN0cworICB3aXRoIGFuIF9faW5kZXhfXyBtZXRob2QgYXJlIG5vdyBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMTAxNTY6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCB1bmljb2RlIGdsb2JhbHMKKyAgYXJlIG5vdyBpbml0aWFsaXplZCBkeW5hbWljYWxseSBhcyBuZWVkZWQuCisKKy0gSXNzdWUgIzE2OTgwOiBGaXggcHJvY2Vzc2luZyBvZiBlc2NhcGVkIG5vbi1hc2NpaSBieXRlcyBpbiB0aGUKKyAgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2OTc1OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVnIGluIHRoZSBlc2NhcGUtZGVjb2RlIGJ5dGVzIGRlY29kZXIuCisKKy0gSXNzdWUgIzE0ODUwOiBOb3cgYSBjaGFybWFwIGRlY29kZXIgdHJlYXRzIFUrRkZGRSBhcyAidW5kZWZpbmVkIG1hcHBpbmciCisgIGluIGFueSBtYXBwaW5nLCBub3Qgb25seSBpbiBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTY3MzA6IGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBub3cgbm8gbG9uZ2VycyByYWlzZXMgYW4KKyAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBvcHVsYXRlIGl0cyBjYWNoZSBhbmQgaXQgZmluZHMgb3V0IHRoZSBkaXJlY3RvcnkgaXMKKyAgdW5yZWFkYWJsZSBvciBoYXMgdHVybmVkIGludG8gYSBmaWxlLiBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5CisgIERhdmlkIFByaXRjaGFyZC4KKworLSBJc3N1ZSAjMTY5MDY6IEZpeCBhIGxvZ2ljIGVycm9yIHRoYXQgcHJldmVudGVkIG1vc3Qgc3RhdGljIHN0cmluZ3MgZnJvbSBiZWluZworICBjbGVhcmVkLgorCistIElzc3VlICMxMTQ2MTogRml4IHRoZSBpbmNyZW1lbnRhbCBVVEYtMTYgZGVjb2Rlci4gT3JpZ2luYWwgcGF0Y2ggYnkKKyAgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCisKKy0gSXNzdWUgIzE2ODU2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSBjYWxsaW5nIHJlcHIoKSBvbiBhIGRpY3Qgd2l0aAorICBhIGtleSB3aG9zZSByZXByIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTYzNjc6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIG9uIFdpbmRvd3MgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuCisKKy0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgorCistIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5CisgIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQorICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZworICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KKworLSBJc3N1ZSAjMTE5Mzk6IFNldCB0aGUgc3RfZGV2IGF0dHJpYnV0ZSBvZiBzdGF0X3Jlc3VsdCB0byBhbGxvdyBXaW5kb3dzIHRvCisgIHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcy5wYXRoLnNhbWVmaWxlL3NhbWVvcGVuZmlsZS9zYW1lc3RhdCBpbXBsZW1lbnRhdGlvbnMKKyAgdXNlZCBieSBvdGhlciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgaW50KCkgY29uc3RydWN0b3IncyBzZWNvbmQgYXJndW1lbnQgKGJhc2UpIG5vIGxvbmdlcgorICBhY2NlcHRzIG5vbiBpbnRlZ2VyIHZhbHVlcy4gIENvbnNpc3RlbnQgd2l0aCB0aGUgYmVoYXZpb3IgaW4gUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE0NDcwOiBSZW1vdmUgdzl4cG9wZW4gc3VwcG9ydCBwZXIgUEVQIDExLgorCistIElzc3VlICM5ODU2OiBSZXBsYWNlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0aCByYWlzaW5nIFR5cGVFcnJvcgorICBpbiBvYmplY3QuX19mb3JtYXRfXy4gUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KKyAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KKworLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCisgIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2NDIxOiBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgc2hhcmVkIG9iamVjdCBpcyBub3cKKyAgaGFuZGxlZCBjb3JyZWN0bHkgKHByZXZpb3VzbHksIHRoZSBmaXJzdCBtb2R1bGUgbG9hZGVkIGZyb20gdGhhdCBmaWxlCisgIHdhcyBzaWxlbnRseSByZXR1cm5lZCkuIFBhdGNoIGJ5IFbDoWNsYXYgxaBtaWxhdWVyLgorCistIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgorICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKKyAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCisKKy0gSXNzdWUgIzE2NDk1OiBSZW1vdmUgZXh0cmFuZW91cyBOVUxMIGVuY29kaW5nIGNoZWNrIGZyb20gYnl0ZXNfZGVjb2RlKCkuCisKKy0gSXNzdWUgIzE2NjE5OiBDcmVhdGUgTmFtZUNvbnN0YW50IEFTVCBjbGFzcyB0byByZXByZXNlbnQgTm9uZSwgVHJ1ZSwgYW5kIEZhbHNlCisgIGxpdGVyYWxzLiBBcyBhIHJlc3VsdCwgdGhlc2UgY29uc3RhbnRzIGFyZSBuZXZlciBsb2FkZWQgYXQgcnVudGltZSBmcm9tCisgIGJ1aWx0aW5zLgorCistIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKKyAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvCisgIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKKyAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlcyBhbgorICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIHdoZXJlYXMgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaXMgdXNlZCBpbiBwcmFjdGljZS4KKworLSBJc3N1ZSAjMTY1NjI6IE9wdGltaXplIGRpY3QgZXF1YWxpdHkgdGVzdGluZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NTg4OiBTaWxlbmNlIHVudXNlZC1idXQtc2V0IHdhcm5pbmdzIGluIFB5dGhvbi90aHJlYWRfcHRocmVhZAorCistIElzc3VlICMxNjU5Mjogc3RyaW5nbGliX2J5dGVzX2pvaW4gZG9lc24ndCByYWlzZSBNZW1vcnlFcnJvciBvbiBhbGxvY2F0aW9uCisgIGZhaWx1cmUuCisKKy0gSXNzdWUgIzE2NTQ2OiBGaXg6IGFzdC5ZaWVsZEZyb20gYXJndW1lbnQgaXMgbm93IG1hbmRhdG9yeS4KKworLSBJc3N1ZSAjMTY1MTQ6IEZpeCByZWdyZXNzaW9uIGNhdXNpbmcgYSB0cmFjZWJhY2sgd2hlbiBzeXMucGF0aFswXSBpcyBOb25lCisgIChhY3R1YWxseSwgYW55IG5vbi1zdHJpbmcgb3Igbm9uLWJ5dGVzIHR5cGUpLgorCistIElzc3VlICMxNjMwNjogRml4IG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdW5rbm93biBjb21tYW5kIGxpbmUKKyAgcGFyYW1ldGVycyB3aGVyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgSGlldSBOZ3V5ZW4uCisKKy0gSXNzdWUgIzE2MjE1OiBGaXggcG90ZW50aWFsIGRvdWJsZSBtZW1vcnkgZnJlZSBpbiBzdHIucmVwbGFjZSgpLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyOTA6IEEgZmxvYXQgcmV0dXJuIHZhbHVlIGZyb20gdGhlIF9fY29tcGxleF9fIHNwZWNpYWwgbWV0aG9kIGlzIG5vCisgIGxvbmdlciBhY2NlcHRlZCBpbiB0aGUgY29tcGxleCgpIGNvbnN0cnVjdG9yLgorCistIElzc3VlICMxNjQxNjogT24gTWFjIE9TIFgsIG9wZXJhdGluZyBzeXN0ZW0gZGF0YSBhcmUgbm93IGFsd2F5cworICBlbmNvZGVkL2RlY29kZWQgdG8vZnJvbSBVVEYtOC9zdXJyb2dhdGVlc2NhcGUsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZworICAod2hpY2ggbWF5IGJlIEFTQ0lJIGlmIG5vIGxvY2FsZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLCB0byBhdm9pZAorICBpbmNvbnNpc3RlbmNpZXMgd2l0aCBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGZ1bmN0aW9ucyB3aGljaCBhcmUKKyAgYWxyZWFkeSB1c2luZyBVVEYtOC9zdXJyb2dhdGVlc2NhcGUuCisKKy0gSXNzdWUgIzE2NDUzOiBGaXggZXF1YWxpdHkgdGVzdGluZyBvZiBkZWFkIHdlYWtyZWYgb2JqZWN0cy4KKworLSBJc3N1ZSAjOTUzNTogRml4IHBlbmRpbmcgc2lnbmFscyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBidXQgbm90IHlldAorICBoYW5kbGVkIGJ5IFB5dGhvbiB0byBub3QgcGVyc2lzdCBhZnRlciBvcy5mb3JrKCkgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE0Nzk0OiBGaXggc2xpY2UuaW5kaWNlcyB0byByZXR1cm4gY29ycmVjdCByZXN1bHRzIGZvciBodWdlIHZhbHVlcywKKyAgcmF0aGVyIHRoYW4gcmFpc2luZyBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKKyAgU3Rpbm5lci4KKworLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAorICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04CisgIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgorICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgorCistIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCisgIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdworICByYWlzZXMgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzczMTc6IERpc3BsYXkgZnVsbCB0cmFjZWJhY2tzIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFzeW5jaHJvbm91c2x5LgorICBQYXRjaCBieSBBbG9uIEhvcmV2IHdpdGggdXBkYXRlIGJ5IEFsZXhleSBLYWNoYXlldi4KKworLSBJc3N1ZSAjMTYzMDk6IE1ha2UgUFlUSE9OUEFUSD0iIiBiZWhhdmlvciB0aGUgc2FtZSBhcyBpZiBQWVRIT05QQVRICisgIG5vdCBzZXQgYXQgYWxsLgorCistIElzc3VlICMxMDE4OTogSW1wcm92ZSB0aGUgZXJyb3IgcmVwb3J0aW5nIG9mIFN5bnRheEVycm9ycyByZWxhdGVkIHRvIGdsb2JhbAorICBhbmQgbm9ubG9jYWwgc3RhdGVtZW50cy4KKworLSBGaXggc2VnZmF1bHRzIG9uIHNldHRpbmcgX19xdWFsbmFtZV9fIG9uIGJ1aWx0aW4gdHlwZXMgYW5kIGF0dGVtcHRpbmcgdG8KKyAgZGVsZXRlIGl0IG9uIGFueSB0eXBlLgorCistIElzc3VlICMxNDYyNTogUmV3cml0ZSB0aGUgVVRGLTMyIGRlY29kZXIuIEl0IGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIuIFBhdGNoCisgIHdyaXR0ZW4gYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcworICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKKyAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KKworLSBJc3N1ZSAjMTI4MDU6IE1ha2UgYnl0ZXMuam9pbiBhbmQgYnl0ZWFycmF5LmpvaW4gZmFzdGVyIHdoZW4gdGhlIHNlcGFyYXRvcgorICBpcyBlbXB0eS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzYwNzQ6IEVuc3VyZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZXMgY2FuIGFsd2F5cyBiZSB1cGRhdGVkIGJ5IHRoZQorICB1c2VyIHRoYXQgY3JlYXRlZCB0aGVtLCBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlIGlzIHJlYWQtb25seS4KKworLSBJc3N1ZSAjMTU5NTg6IGJ5dGVzLmpvaW4gYW5kIGJ5dGVhcnJheS5qb2luIG5vdyBhY2NlcHQgYXJiaXRyYXJ5IGJ1ZmZlcgorICBvYmplY3RzLgorCistIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKKyAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KKworLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCisKKy0gVXBncmFkZSBVbmljb2RlIGRhdGEgKFVDRCkgdG8gdmVyc2lvbiA2LjIuCisKKy0gSXNzdWUgIzE1Mzc5OiBGaXggcGFzc2luZyBvZiBub24tQk1QIGNoYXJhY3RlcnMgYXMgaW50ZWdlcnMgZm9yIHRoZSBjaGFybWFwCisgIGRlY29kZXIgKGFscmVhZHkgd29ya2luZyBhcyB1bmljb2RlIHN0cmluZ3MpLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUxNDQ6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gaGFuZGxpbmcgcG9pbnRlcnMgYXMgaW50ZWdlcgorICB2YWx1ZXMsIGJ5IHVzaW5nIGBQeV91aW50cHRyX3RgIGluc3RlYWQgb2YgYHNpemVfdGAuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTk2NTogRXhwbGljaXRseSBjYXN0IGBBVF9GRENXRGAgYXMgKGludCkuICBSZXF1aXJlZCBvbiBTb2xhcmlzIDEwCisgICh3aGljaCBkZWZpbmVzIGBBVF9GRENXRGAgYXMgYGAweGZmZDE5NTUzYGApLCBoYXJtbGVzcyBvbiBvdGhlciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE1ODM5OiBDb252ZXJ0IFN5c3RlbUVycm9ycyBpbiBgc3VwZXIoKWAgdG8gUnVudGltZUVycm9ycy4KKworLSBJc3N1ZSAjMTU0NDg6IEJ1ZmZlcmVkIElPIG5vdyBmcmVlcyB0aGUgYnVmZmVyIHdoZW4gY2xvc2VkLCBpbnN0ZWFkCisgIG9mIHdoZW4gZGVhbGxvY2F0aW5nLgorCistIElzc3VlICMxNTg0NjogRml4IFN5c3RlbUVycm9yIHdoaWNoIGhhcHBlbmVkIHdoZW4gdXNpbmcgYGFzdC5wYXJzZSgpYCBpbiBhbgorICBleGNlcHRpb24gaGFuZGxlciBvbiBjb2RlIHdpdGggc3ludGF4IGVycm9ycy4KKworLSBJc3N1ZSAjMTU4OTc6IHppcGltcG9ydC5jIGRvZXNuJ3QgY2hlY2sgcmV0dXJuIHZhbHVlIG9mIGZzZWVrKCkuCisgIFBhdGNoIGJ5IEZlbGlwZSBDcnV6LgorCistIElzc3VlICMxNTgwMTogTWFrZSBzdXJlIG1hcHBpbmdzIHBhc3NlZCB0byAnJScgZm9ybWF0dGluZyBhcmUgYWN0dWFsbHkKKyAgc3Vic2NyaXB0YWJsZS4KKworLSBJc3N1ZSAjMTUxMTE6IF9faW1wb3J0X18gc2hvdWxkIHByb3BhZ2F0ZSBJbXBvcnRFcnJvciB3aGVuIHJhaXNlZCBhcyBhCisgIHNpZGUtZWZmZWN0IG9mIGEgbW9kdWxlIHRyaWdnZXJlZCBmcm9tIHVzaW5nIGZyb21saXN0LgorCistIElzc3VlICMxNTAyMjogQWRkIHBpY2tsZSBhbmQgY29tcGFyaXNvbiBzdXBwb3J0IHRvIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM0MzMxOiBBZGRlZCBmdW5jdG9vbHMucGFydGlhbG1ldGhvZCAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCistIElzc3VlICMxMzQ2MTogRml4IGEgY3Jhc2ggaW4gdGhlIFRleHRJT1dyYXBwZXIudGVsbCBtZXRob2Qgb24gNjQtYml0CisgIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmkuCisKKy0gSXNzdWUgIzE4NjgxOiBGaXggYSBOYW1lRXJyb3IgaW4gaW1wb3J0bGliLnJlbG9hZCgpIChub3RpY2VkIGJ5IFdlaXpoYW8gTGkpLgorCistIElzc3VlICMxNDMyMzogRXhwYW5kZWQgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlCisgIFJHQiAtLSBZSVEgY29udmVyc2lvbnMgc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBGQ0MgTlRTQyB2ZXJzaW9ucy4KKwogLSBJc3N1ZSAjMTc5OTg6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lLgogCiAtIElzc3VlICMxNzU1NzogRml4IG9zLmdldGdyb3VwcygpIHRvIHdvcmsgd2l0aCB0aGUgbW9kaWZpZWQgYmVoYXZpb3Igb2YKICAgZ2V0Z3JvdXBzKDIpIG9uIE9TIFggMTAuOC4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1hdGV1c3ogTGVuaWsuCiAKKy0gSXNzdWUgIzE4NjA4OiBBdm9pZCBrZWVwaW5nIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgbG9jYWxlIG1vZHVsZQorICBpbnNpZGUgdGhlIF9pbyBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NjE5OiBGaXggYXRleGl0IGxlYWtpbmcgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgZnJvbSBzdWItaW50ZXJwcmV0ZXJzLAorICBhbmQgbWFrZSBpdCBHQy1hd2FyZS4KKworLSBJc3N1ZSAjMTU2OTk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEtc3R5bGUgbW9kdWxlCisgIGluaXRpYWxpemF0aW9uLCBzbyBhcyB0byByZWNsYWltIGFsbG9jYXRlZCByZXNvdXJjZXMgKFB5dGhvbiBjYWxsYmFja3MpCisgIGF0IHNodXRkb3duLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNzYxNjogd2F2ZS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCiAtIElzc3VlICMxODU5OTogRml4IG5hbWUgYXR0cmlidXRlIG9mIF9zaGExLnNoYTEoKSBvYmplY3QuIEl0IG5vdyByZXR1cm5zCiAgICdTSEExJyBpbnN0ZWFkIG9mICdTSEEnLgogCistIElzc3VlICMxMzI2NjogQWRkZWQgaW5zcGVjdC51bndyYXAgdG8gZWFzaWx5IHVucmF2ZWwgX193cmFwcGVkX18gY2hhaW5zCisgIChpbml0aWFsIHBhdGNoIGJ5IERhbmllbCBVcmJhbiBhbmQgQWFyb24gSWxlcykKKwogLSBJc3N1ZSAjMTg1NjE6IFNraXAgbmFtZSBpbiBjdHlwZXMnIF9idWlsZF9jYWxsYXJncygpIGlmIG5hbWUgaXMgTlVMTC4KIAogLSBJc3N1ZSAjMTg1NTk6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZXJyb3IgaW4gX3BpY2tsZSBtb2R1bGUKIAotLSBJc3N1ZSAjMTg1NTY6IENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpIGNhbGwgaW4KLSAgY3R5cGVzJyBVX3NldCgpLgorLSBJc3N1ZSAjMTg1NTY6IENoZWNrIHRoZSByZXR1cm4gdHlwZSBvZiBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpIGluIGN0eXBlJ3MKKyAgVV9zZXQoKS4KKworLSBJc3N1ZSAjMTc4MTg6IGFpZmMuZ2V0cGFyYW1zIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZS4KIAogLSBJc3N1ZSAjMTg1NDk6IEVsaW1pbmF0ZSBkZWFkIGNvZGUgaW4gc29ja2V0X250b2hsKCkKIAorLSBJc3N1ZSAjMTg1MzA6IFJlbW92ZSBhZGRpdGlvbmFsIHN0YXQgY2FsbCBmcm9tIHBvc2l4cGF0aC5pc21vdW50LgorICBQYXRjaCBieSBBbGV4IEdheW5vci4KKwogLSBJc3N1ZSAjMTg1MTQ6IEZpeCB1bnJlYWNoYWJsZSBQeV9ERUNSRUYoKSBjYWxsIGluIFB5Q0RhdGFfRnJvbUJhc2VPYmooKQogCistIElzc3VlICM5MTc3OiBDYWxsaW5nIHJlYWQoKSBvciB3cml0ZSgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciwgbm90CisgIEF0dHJpYnV0ZUVycm9yLCBvbiBhIGNsb3NlZCBTU0wgc29ja2V0LiAgUGF0Y2ggYnkgU2Vua28gUmFzaWMuCisKIC0gSXNzdWUgIzE4NTEzOiBGaXggYmVoYXZpb3VyIG9mIGNtYXRoLnJlY3Qgdy5yLnQuIHNpZ25lZCB6ZXJvcyBvbiBPUyBYIDEwLjggKwogICBnY2MuCiAKKy0gSXNzdWUgIzE4NDc5OiBDaGFuZ2VkIHZlbnYgQWN0aXZhdGUucHMxIHRvIG1ha2UgZGVhY3RpdmF0ZSBhIGZ1bmN0aW9uLCBhbmQKKyAgcmVtb3ZlZCBEZWFjdGl2YXRlLnBzMS4KKwogLSBJc3N1ZSAjMTg0ODA6IEFkZCBtaXNzaW5nIGNhbGwgdG8gUHlUeXBlX1JlYWR5IHRvIHRoZSBfZWxlbWVudHRyZWUgZXh0ZW5zaW9uLgogCiAtIElzc3VlICMxNzc3ODogRml4IHRlc3QgZGlzY292ZXJ5IGZvciB0ZXN0X211bHRpcHJvY2Vzc2luZy4gKFBhdGNoIGJ5CiAgIFphY2hhcnkgV2FyZS4pCiAKKy0gSXNzdWUgIzE4MzkzOiBUaGUgcHJpdmF0ZSBtb2R1bGUgX2dlc3RhbHQgYW5kIHByaXZhdGUgZnVuY3Rpb25zCisgIHBsYXRmb3JtLl9tYWNfdmVyX2dlc3RhbHQsIHBsYXRmb3JtLl9tYWNfdmVyX2xvb2t1cCBhbmQKKyAgcGxhdGZvcm0uX2JjZDJzdHIgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBwdWJsaWMKKyAgaW50ZXJmYWNlIG9mIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzE3NDgyOiBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIgKGFuZCBmdW5jdG9vbHMud3JhcHMpIG5vdyBzZXQgdGhlCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBjb3JyZWN0bHkgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBoYXMgYQorICBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgc2V0LgorCiAtIElzc3VlICMxODQzMTogVGhlIG5ldyBlbWFpbCBoZWFkZXIgcGFyc2VyIG5vdyBkZWNvZGVzIFJGQzIwNDcgZW5jb2RlZCB3b3JkcwogICBpbiBzdHJ1Y3R1cmVkIGhlYWRlcnMuCiAKQEAgLTQ3NywxMSArMTYzMiwxOCBAQAogLSBJc3N1ZSAjMTgxMDE6IFRjbC5zcGxpdCgpIG5vdyBwcm9jZXNzIHN0cmluZ3MgbmVzdGVkIGluIGEgdHVwbGUgYXMgaXQKICAgZG8gd2l0aCBieXRlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE4MTE2OiBnZXRwYXNzIHdhcyBhbHdheXMgZ2V0dGluZyBhbiBlcnJvciB3aGVuIHRlc3RpbmcgL2Rldi90dHksCisgIGFuZCB0aHVzIHdhcyBhbHdheXMgZmFsbGluZyBiYWNrIHRvIHN0ZGluLiAgSXQgYWxzbyBsZWFrZWQgYW4gb3BlbiBmaWxlCisgIHdoZW4gaXQgZGlkIHNvLiAgQm90aCBvZiB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBmaXhlZC4KKwogLSBJc3N1ZSAjMTcxOTg6IEZpeCBhIE5hbWVFcnJvciBpbiB0aGUgZGJtIG1vZHVsZS4gIFBhdGNoIGJ5IFZhbGVudGluYQogICBNdWtoYW1lZHpoYW5vdmEuCiAKIC0gSXNzdWUgIzE4MDEzOiBGaXggY2dpLkZpZWxkU3RvcmFnZSB0byBwYXJzZSB0aGUgVzNDIHNhbXBsZSBmb3JtLgogCistIElzc3VlICMxODAyMDogaW1wcm92ZSBodG1sLmVzY2FwZSBzcGVlZCBieSBhbiBvcmRlciBvZiBtYWduaXR1ZGUuCisgIFBhdGNoIGJ5IE1hdHQgQnJ5YW50LgorCiAtIElzc3VlICMxODM0NzogRWxlbWVudFRyZWUncyBodG1sIHNlcmlhbGl6ZXIgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZgogICBjbG9zaW5nIHRhZ3MuCiAKQEAgLTQ5Niw2ICsxNjU4LDkgQEAKIC0gSXNzdWUgIzE4MzM5OiBOZWdhdGl2ZSBpbnRzIGtleXMgaW4gdW5waWNrbGVyLm1lbW8gZGljdCBubyBsb25nZXIgY2F1c2UgYQogICBzZWdmYXVsdCBpbnNpZGUgdGhlIF9waWNrbGUgQyBleHRlbnNpb24uCiAKKy0gSXNzdWUgMTgyNDA6IFRoZSBITUFDIG1vZHVsZSBpcyBubyBsb25nZXIgcmVzdHJpY3RlZCB0byBieXRlcyBhbmQgYWNjZXB0cworICBhbnkgYnl0ZXMtbGlrZSBvYmplY3QsIGUuZy4gbWVtb3J5dmlldy4gT3JpZ2luYWwgcGF0Y2ggYnkgSm9uYXMgQm9yZ3N0csO2bS4KKwogLSBJc3N1ZSAjMTgyMjQ6IFJlbW92ZWQgcHlkb2Mgc2NyaXB0IGZyb20gY3JlYXRlZCB2ZW52LCBhcyBpdCBjYXVzZXMgcHJvYmxlbXMKICAgb24gV2luZG93cyBhbmQgYWRkcyBubyB2YWx1ZSBvdmVyIGFuZCBhYm92ZSBweXRob24gLW0gcHlkb2MgLi4uCiAKQEAgLTUwNiwzMSArMTY3MSw5MiBAQAogLSBJc3N1ZSAjMTQzNjA6IGVuY29kZV9xdW9wcmkgY2FuIG5vdyBiZSBzdWNjZXNzZnVsbHkgdXNlZCBhcyBhbiBlbmNvZGVyCiAgIHdoZW4gY29uc3RydWN0aW5nIGEgTUlNRUFwcGxpY2F0aW9uIG9iamVjdC4KIAorLSBJc3N1ZSAjMTEzOTA6IEFkZCAtbyBhbmQgLWYgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gdGhlIGRvY3Rlc3QgQ0xJIHRvCisgIHNwZWNpZnkgZG9jdGVzdCBvcHRpb25zIChhbmQgY29udmVydCBpdCB0byB1c2luZyBhcmdwYXJzZSkuCisKIC0gSXNzdWUgIzE4MTM1OiBzc2wuU1NMU29ja2V0LndyaXRlKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yIGlmIHRoZSBpbnB1dAogICBzdHJpbmcgaW4gbG9uZ2VyIHRoYW4gMiBnaWdhYnl0ZXMsIGFuZCBzc2wuU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKQogICByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBwYXNzd29yZCBpcyBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcy4gVGhlIHNzbAogICBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBwYXJ0aWFsIHdyaXRlLgogCistIElzc3VlICMxMTAxNjogQWRkIEMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YXQgbW9kdWxlIGFzIF9zdGF0LgorCiAtIElzc3VlICMxODI0ODogRml4IGxpYmZmaSBidWlsZCBvbiBBSVguCiAKIC0gSXNzdWUgIzE4MjU5OiBEZWNsYXJlIHNldGhvc3RuYW1lIGluIHNvY2tldG1vZHVsZS5jIGZvciBBSVgKIAorLSBJc3N1ZSAjMTgxNDc6IEFkZCBkaWFnbm9zdGljIGZ1bmN0aW9ucyB0byBzc2wuU1NMQ29udGV4dCgpLiBnZXRfY2FfbGlzdCgpCisgIGxpc3RzIGFsbCBsb2FkZWQgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0X3N0b3JlX3N0YXRzKCkgcmV0dXJucyBhbW91bnQgb2YKKyAgbG9hZGVkIFguNTA5IGNlcnRzLCBYLjUwOSBDQSBjZXJ0cyBhbmQgQ1JMcy4KKwogLSBJc3N1ZSAjMTgxNjc6IGNnaS5GaWVsZFN0b3JhZ2Ugbm8gbG9uZ2VyIGZhaWxzIHRvIGhhbmRsZSBtdWx0aXBhcnQvZm9ybS1kYXRhCiAgIHdoZW4gXHJcbiBhcHBlYXJzIGF0IGVuZCBvZiA2NTUzNSBieXRlcyB3aXRob3V0IG90aGVyIG5ld2xpbmVzLgogCistIElzc3VlICMxODA3NjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2UoKS4KKy0gSXNzdWUgIzE4MzU3OiBhZGQgdGVzdHMgZm9yIGRpY3R2aWV3IHNldCBkaWZmZXJlbmNlLgorICBQYXRjaCBieSBGcmFzZXIgVHdlZWRhbGUuCisKKy0gaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpIG5vIGxvbmdlciBjaGFuZ2VzIFN5bnRheEVycm9yIG9yCisgIFVuaWNvZGVEZWNvZGVFcnJvciBpbnRvIEltcG9ydEVycm9yLgorCistIElzc3VlICMxODA1OCwgMTgwNTc6IE1ha2UgdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGxvYWRlciBtZWV0IHRoZQorICBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIgQUJDLCBhbGxvd2luZyBmb3IgbmFtZXNwYWNlIHBhY2thZ2VzIHRvIHdvcmsgd2l0aAorICBydW5weS4KKworLSBJc3N1ZSAjMTcxNzc6IFRoZSBpbXAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uCisKIC0gc3VicHJvY2VzczogUHJldmVudCBhIHBvc3NpYmxlIGRvdWJsZSBjbG9zZSBvZiBwYXJlbnQgcGlwZSBmZHMgd2hlbiB0aGUKICAgc3VicHJvY2VzcyBleGVjIHJ1bnMgaW50byBhbiBlcnJvci4gIFByZXZlbnQgYSByZWd1bGFyIG11bHRpLWNsb3NlIG9mIHRoZQogICAvZGV2L251bGwgZmQgd2hlbiBhbnkgb2Ygc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHdhcyBzZXQgdG8gREVWTlVMTC4KIAorLSBJc3N1ZSAjMTgxOTQ6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgpIGFuZAorICBzb3VyY2VfZnJvbV9jYWNoZSgpIHdoaWxlIGRvY3VtZW50aW5nIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9ucyBpbiBpbXAgYXMKKyAgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTc5MDc6IERvY3VtZW50IGltcC5uZXdfbW9kdWxlKCkgYXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKKyAgdHlwZXMuTW9kdWxlVHlwZS4KKworLSBJc3N1ZSAjMTgxOTI6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIgYW5kIGRvY3VtZW50IGFzIGRlcHJlY2F0ZWQKKyAgaW1wLmdldF9tYWdpYygpLgorCistIElzc3VlICMxODE0OTogQWRkIGZpbGVjbXAuY2xlYXJfY2FjaGUoKSB0byBtYW51YWxseSBjbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4KKyAgUGF0Y2ggYnkgTWFyayBMZXZpdHQKKworLSBJc3N1ZSAjMTgxOTM6IEFkZCBpbXBvcnRsaWIucmVsb2FkKCkuCisKKy0gSXNzdWUgIzE4MTU3OiBTdG9wIHVzaW5nIGltcC5sb2FkX21vZHVsZSgpIGluIHB5ZG9jLgorCiAtIElzc3VlICMxNjEwMjogTWFrZSB1dWlkLl9uZXRiaW9zX2dldG5vZGUoKSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgogCistIElzc3VlICMxNzEzNDogQWRkIHNzbC5lbnVtX2NlcnRfc3RvcmUoKSBhcyBpbnRlcmZhY2UgdG8gV2luZG93cycgY2VydCBzdG9yZS4KKworLSBJc3N1ZSAjMTgxNDM6IEltcGxlbWVudCBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgaW4gb3JkZXIgdG8gZGVidWcKKyAgdGhlIGRlZmF1bHQgbG9jYXRpb25zIGZvciBjYWZpbGUgYW5kIGNhcGF0aC4KKworLSBJc3N1ZSAjMTczMTQ6IE1vdmUgbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb3ZlciB0byBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzExOTU5OiBTTVRQU2VydmVyIGFuZCBTTVRQQ2hhbm5lbCBub3cgdGFrZSBhbiBvcHRpb25hbCBtYXAsIHVzZSBvZgorICB3aGljaCBhdm9pZHMgYWZmZWN0aW5nIGdsb2JhbCBzdGF0ZS4KKwogLSBJc3N1ZSAjMTgxMDk6IG9zLnVuYW1lKCkgbm93IGRlY29kZXMgZmllbGRzIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywgYW5kCiAgIHNvY2tldC5nZXRob3N0bmFtZSgpIG5vdyBkZWNvZGVzIHRoZSBob3N0bmFtZSBmcm9tIHRoZSBsb2NhbGUgZW5jb2RpbmcsCiAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIFVURi04IGVuY29kaW5nIGluIHN0cmljdCBtb2RlLgogCistIElzc3VlICMxODA4OTogSW1wbGVtZW50IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZS4KKworLSBJc3N1ZSAjMTgwODg6IEludHJvZHVjZSBpbXBvcnRsaWIuYWJjLkxvYWRlci5pbml0X21vZHVsZV9hdHRycyBmb3Igc2V0dGluZworICBtb2R1bGUgYXR0cmlidXRlcy4gTGVhZHMgdG8gdGhlIHBlbmRpbmcgZGVwcmVjYXRpb24gb2YKKyAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCisKIC0gSXNzdWUgIzE3NDAzOiB1cmxsaWIucGFyc2Uucm9ib3RwYXJzZXIgbm9ybWFsaXplcyB0aGUgdXJscyBiZWZvcmUgYWRkaW5nIHRvCiAgIHJ1bGVsaW5lLiBUaGlzIGhlbHBzIGluIGhhbmRsaW5nIGNlcnRhaW4gdHlwZXMgaW52YWxpZCB1cmxzIGluIGEgY29uc2VydmF0aXZlCi0gIG1hbm5lci4KKyAgbWFubmVyLiBQYXRjaCBjb250cmlidXRlZCBieSBNaGVyIE1vdnNpc3lhbi4KKworLSBJc3N1ZSAjMTgwNzA6IEhhdmUgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoKSBzZXQgYXR0cmlidXRlcworICB1bmNvbmRpdGlvbmFsbHkgaW4gb3JkZXIgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuCisKKy0gQWRkZWQgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWQgdG8gcmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRvIHByb3ZpZGUgdGhlCisgIHByb3BlciBtb2R1bGUgb2JqZWN0IHRvIGxvYWQuCiAKIC0gSXNzdWUgIzE4MDI1OiBGaXhlZCBhIHNlZ2ZhdWx0IGluIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRpbnRvKCkgd2hlbiByYXcKICAgc3RyZWFtJ3MgcmVhZCgpIHJldHVybnMgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KQEAgLTUzOSwzMSArMTc2NSwyMDQgQEAKICAgbm9uLWFscGhhYmV0IGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQgc3RyaW5nIHRvIGNvbmZvcm0gYSBkb2NzdHJpbmcuCiAgIFVwZGF0ZWQgdGhlIG1vZHVsZSBkb2N1bWVudGF0aW9uLgogCi0tIElzc3VlICMxMzc3MjogUmVzdG9yZWQgZGlyZWN0b3J5IGRldGVjdGlvbiBvZiB0YXJnZXRzIGluIGBgb3Muc3ltbGlua2BgIG9uCi0gIFdpbmRvd3MsIHdoaWNoIHdhcyB0ZW1wb3JhcmlseSByZW1vdmVkIGluIFB5dGhvbiAzLjIuMyBkdWUgdG8gYW4gaW5jb21wbGV0ZQotICBpbXBsZW1lbnRhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIG5vdyB3b3JrcyBldmVuIGlmIHRoZSBzeW1saW5rIGlzIGNyZWF0ZWQKLSAgaW4gYSBsb2NhdGlvbiBvdGhlciB0aGFuIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKy0gSXNzdWUgIzE4MDcyOiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9jb2RlKCkgYW5kCisgIGltcG9ydGxpYi5hYmMuRXhlY3V0aW9uTG9hZGVyLmdldF9jb2RlKCkuCisKKy0gSXNzdWUgIzgyNDA6IFNldCB0aGUgU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVIgZmxhZyBvbiBTU0wKKyAgc29ja2V0cy4KKworLSBJc3N1ZSAjMTcyNjk6IFdvcmthcm91bmQgZm9yIHNvY2tldC5nZXRhZGRyaW5mbyBjcmFzaCBvbiBNYWNPUyBYCisgIHdpdGggcG9ydCBOb25lIG9yICIwIiBhbmQgZmxhZ3MgQUlfTlVNRVJJQ1NFUlYuCiAKIC0gSXNzdWUgIzE2OTg2OiBFbGVtZW50VHJlZSBub3cgY29ycmVjdGx5IHBhcnNlcyBhIHN0cmluZyBpbnB1dCBub3Qgb25seSB3aGVuCiAgIGFuIGludGVybmFsIFhNTCBlbmNvZGluZyBpcyBVVEYtOCBvciBVUy1BU0NJSS4KIAorLSBJc3N1ZSAjMTc5OTY6IHNvY2tldCBtb2R1bGUgbm93IGV4cG9zZXMgQUZfTElOSyBjb25zdGFudCBvbiBCU0QgYW5kIE9TWC4KKworLSBJc3N1ZSAjMTc5MDA6IEFsbG93ZWQgcGlja2xpbmcgb2YgcmVjdXJzaXZlIE9yZGVyZWREaWN0cy4gIERlY3JlYXNlZCBwaWNrbGVkCisgIHNpemUgYW5kIHBpY2tsaW5nIHRpbWUuCisKKy0gSXNzdWUgIzE3OTE0OiBBZGQgb3MuY3B1X2NvdW50KCkuIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmksIGJhc2VkIG9uIGFuCisgIGluaXRpYWwgcGF0Y2ggYnkgVHJlbnQgTmVsc29uLgorCiAtIElzc3VlICMxNzgxMjogRml4ZWQgcXVhZHJhdGljIGNvbXBsZXhpdHkgb2YgYmFzZTY0LmIzMmVuY29kZSgpLgorICBPcHRpbWl6ZSBiYXNlNjQuYjMyZW5jb2RlKCkgYW5kIGJhc2U2NC5iMzJkZWNvZGUoKSAoc3BlZWQgdXAgdG8gM3gpLgogCiAtIElzc3VlICMxNzk4MDogRml4IHBvc3NpYmxlIGFidXNlIG9mIHNzbC5tYXRjaF9ob3N0bmFtZSgpIGZvciBkZW5pYWwgb2YKICAgc2VydmljZSB1c2luZyBjZXJ0aWZpY2F0ZXMgd2l0aCBtYW55IHdpbGRjYXJkcyAoQ1ZFLTIwMTMtMjA5OSkuCiAKKy0gSXNzdWUgIzE1NzU4OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBzbyBpdCBubyBsb25nZXIgaGFzIE8obioqMikgY29tcGxleGl0eS4KKworLSBJc3N1ZSAjMTQ1OTY6IFRoZSBzdHJ1Y3QuU3RydWN0KCkgb2JqZWN0cyBub3cgdXNlIG1vcmUgY29tcGFjdCBpbXBsZW1lbnRhdGlvbi4KKwogLSBJc3N1ZSAjMTc5ODE6IENsb3NlZCBzb2NrZXQgb24gZXJyb3IgaW4gU3lzTG9nSGFuZGxlci4KIAorLSBJc3N1ZSAjMTc5NjQ6IEZpeCBvcy5zeXNjb25mKCk6IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgQyBzeXNjb25mKCkgZnVuY3Rpb24KKyAgaXMgbG9uZywgbm90IGludC4KKwogLSBGaXggdHlwb3MgaW4gdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUuCiAKIC0gSXNzdWUgIzE3NzU0OiBNYWtlIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUuCiAKIC0gSXNzdWUgIzE3OTY4OiBGaXggbWVtb3J5IGxlYWsgaW4gb3MubGlzdHhhdHRyKCkuCiAKLS0gSXNzdWUgIzE3MjY5OiBXb3JrYXJvdW5kIGZvciBzb2NrZXQuZ2V0YWRkcmluZm8gY3Jhc2ggb24gTWFjT1MgWAotICB3aXRoIHBvcnQgTm9uZSBvciAiMCIgYW5kIGZsYWdzIEFJX05VTUVSSUNTRVJWLgorLSBJc3N1ZSAjMTc2MDY6IEZpeGVkIHN1cHBvcnQgb2YgZW5jb2RlZCBieXRlIHN0cmluZ3MgaW4gdGhlIFhNTEdlbmVyYXRvcgorICBjaGFyYWN0ZXJzKCkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBtZXRob2RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ViYXN0aWFuCisgIE9ydGl6IFZhc3F1ZXouCiAKLS0gSXNzdWUgIzE4Njk4OiBFbnN1cmUgaW1wLnJlbG9hZCgpIHJldHVybnMgdGhlIG1vZHVsZSBvdXQgb2Ygc3lzLm1vZHVsZXMuCistIElzc3VlICMxNzczMjogSWdub3JlIGRpc3R1dGlscy5jZmcgb3B0aW9ucyBwZXJ0YWluaW5nIHRvIGluc3RhbGwgcGF0aHMgaWYgYQorICB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZS4KKworLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKKyAgY29kZWNzLm9wZW4oKS4KKworLSBJc3N1ZSAjMTY2MDE6IFJlc3RhcnRpbmcgaXRlcmF0aW9uIG92ZXIgdGFyZmlsZSBubyBtb3JlIGNvbnRpbnVlcyBmcm9tIHdoZXJlCisgIGl0IGxlZnQgb2ZmLiAgUGF0Y2ggYnkgTWljaGFlbCBCaXJ0d2VsbC4KKworLSBJc3N1ZSAjMTcyODk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHBsYXlzIG5pY2VyIHdpdGggZXh0ZXJuYWwgbW9kdWxlcworICBvciBhcHBsaWNhdGlvbnMgY2hhbmdpbmcgdGhlIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgZ2xvYmFsCisgIHZhcmlhYmxlLiAgSW5pdGlhbCBwYXRjaCBieSBCcmFkbGV5IEZyb2VobGUuCisKKy0gSXNzdWUgIzEyMTgxOiBzZWxlY3QgbW9kdWxlOiBGaXggc3RydWN0IGtldmVudCBkZWZpbml0aW9uIG9uIE9wZW5CU0QgNjQtYml0CisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgRmVkZXJpY28gU2Nod2luZHQuCisKKy0gSXNzdWUgIzExODE2OiBtdWx0aXBsZSBpbXByb3ZlbWVudHMgdG8gdGhlIGRpcyBtb2R1bGU6IGdldF9pbnN0cnVjdGlvbnMKKyAgZ2VuZXJhdG9yLCBhYmlsaXR5IHRvIHJlZGlyZWN0IG91dHB1dCB0byBhIGZpbGUsIEJ5dGVjb2RlIGFuZCBJbnN0cnVjdGlvbgorICBhYnN0cmFjdGlvbnMuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbiwgUnlhbiBLZWxseSBhbmQgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzODMxOiBFbWJlZCBzdHJpbmdpZmljYXRpb24gb2YgcmVtb3RlIHRyYWNlYmFjayBpbiBsb2NhbAorICB0cmFjZWJhY2sgcmFpc2VkIHdoZW4gcG9vbCB0YXNrIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzE1NTI4OiBBZGQgd2Vha3JlZi5maW5hbGl6ZSB0byBzdXBwb3J0IGZpbmFsaXphdGlvbiB1c2luZworICB3ZWFrcmVmIGNhbGxiYWNrcy4KKworLSBJc3N1ZSAjMTQxNzM6IEF2b2lkIGNyYXNoaW5nIHdoZW4gcmVhZGluZyBhIHNpZ25hbCBoYW5kbGVyIGR1cmluZworICBpbnRlcnByZXRlciBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTU5MDI6IEZpeCBpbXAubG9hZF9tb2R1bGUoKSBhY2NlcHRpbmcgTm9uZSBhcyBhIGZpbGUgd2hlbiBsb2FkaW5nIGFuCisgIGV4dGVuc2lvbiBtb2R1bGUuCisKKy0gSXNzdWUgIzEzNzIxOiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKSBhbmQgU1NMU29ja2V0LmRvX2hhbmRzaGFrZSgpIG5vdworICByYWlzZSBhbiBPU0Vycm9yIHdpdGggRU5PVENPTk4sIGluc3RlYWQgb2YgYW4gQXR0cmlidXRlRXJyb3IsIHdoZW4gdGhlCisgIFNTTFNvY2tldCBpcyBub3QgY29ubmVjdGVkLgorCistIElzc3VlICMxNDY3OTogYWRkIGFuIF9fYWxsX18gKHRoYXQgY29udGFpbnMgb25seSBIVE1MUGFyc2VyKSB0byBodG1sLnBhcnNlci4KKworLSBJc3N1ZSAjMTc4MDI6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBodG1sLnBhcnNlci4gIEluaXRpYWwgdGVzdHMgYnkKKyAgVGhvbWFzIEJhcmxvdy4KKworLSBJc3N1ZSAjMTczNTg6IE1vZHVsZXMgbG9hZGVkIGJ5IGltcC5sb2FkX3NvdXJjZSgpIGFuZCBsb2FkX2NvbXBpbGVkKCkgKGFuZCBieQorICBleHRlbnRpb24gbG9hZF9tb2R1bGUoKSkgbm93IGhhdmUgYSBiZXR0ZXIgY2hhbmNlIG9mIHdvcmtpbmcgd2hlbiByZWxvYWRlZC4KKworLSBJc3N1ZSAjMTc4MDQ6IE5ldyBmdW5jdGlvbiBgYHN0cnVjdC5pdGVyX3VucGFja2BgIGFsbG93cyBmb3Igc3RyZWFtaW5nCisgIHN0cnVjdCB1bnBhY2tpbmcuCisKKy0gSXNzdWUgIzE3ODMwOiBXaGVuIGtleXdvcmQucHkgaXMgdXNlZCB0byB1cGRhdGUgYSBrZXl3b3JkIGZpbGUsIGl0IG5vdworICBwcmVzZXJ2ZXMgdGhlIGxpbmUgZW5kaW5ncyBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKworLSBJc3N1ZSAjMTcyNzI6IE1ha2luZyB0aGUgdXJsbGliLnJlcXVlc3QncyBSZXF1ZXN0LmZ1bGxfdXJsIGEgZGVzY3JpcHRvci4KKyAgRml4ZXMgYnVncyB3aXRoIGFzc2lnbm1lbnQgdG8gZnVsbF91cmwuIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzE3MzUzOiBQbGlzdGxpYiBlbWl0dGVkIGVtcHR5IGRhdGEgdGFncyB3aXRoIGRlZXBseSBuZXN0ZWQgZGF0YXN0cnVjdHVyZXMKKworLSBJc3N1ZSAjMTE3MTQ6IFVzZSAnd2l0aCcgc3RhdGVtZW50cyB0byBhc3N1cmUgYSBTZW1hcGhvcmUgcmVsZWFzZXMgYQorICBjb25kaXRpb24gdmFyaWFibGUuICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgUmFjaGVsLgorCistIElzc3VlICMxNjYyNDogYHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0YCBub3cgYWNjZXB0cyBhbiBgaW5wdXRgIGFyZ3VtZW50LAorICBhbGxvd2luZyB0aGUgc3VicHJvY2VzcydzIHN0ZGluIHRvIGJlIHByb3ZpZGVkIGFzIGEgKGJ5dGUpIHN0cmluZy4KKyAgUGF0Y2ggYnkgWmFjayBXZWluYmVyZy4KKworLSBJc3N1ZSAjMTc3OTU6IFJldmVydGVkIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlIGluIFN5c0xvZ0hhbmRsZXIgd2l0aAorICBVbml4IGRvbWFpbiBzb2NrZXRzLgorCistIElzc3VlICMxNjY5NDogQWRkIGEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgdGhlIG9wZXJhdG9yIG1vZHVsZS4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMxMTE4MjogcmVtb3ZlIHRoZSB1bnVzZWQgYW5kIHVuZG9jdW1lbnRlZCBweWRvYy5TY2FubmVyIGNsYXNzLgorICBQYXRjaCBieSBNYXJ0aW4gTW9ycmlzb24uCisKKy0gSXNzdWUgIzE3NzQxOiBBZGQgRWxlbWVudFRyZWUuSW5jcmVtZW50YWxQYXJzZXIsIGFuIGV2ZW50LWRyaXZlbiBwYXJzZXIKKyAgZm9yIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuCisKKy0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yaworICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE3NzA3OiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2QgZG9lcyBub3QgYmxvY2sgZm9yIHNob3J0CisgIHRpbWVvdXRzLgorCistIElzdXNlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKKyAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCisKKy0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbGJhY2tzIHRvIHRoZSBQQVRIIGVudmlyb25tZW50CisgIHZhcmlhYmxlIGlmIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgorCistIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0CisgIGludmFsaWQgZ3JvdXAgbmFtZXMuCisKKy0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCisgIFVOSVgpLgorCistIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycworICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZworICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU0ODA6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBhbmQgdW51c2VkIFRZUEVfSU5UNjQgY29kZSBmcm9tIG1hcnNoYWwuCisgIEluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFJpdGkuCisKKy0gSXNzdWUgIzIxMTg6IFNNVFBFeGNlcHRpb24gaXMgbm93IGEgc3ViY2xhc3Mgb2YgSU9FcnJvci4KKworLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKKyAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KKworLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKKyAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjOTU1NjogQWxsb3dlZCBzcGVjaWZ5aW5nIGEgdGltZS1vZi1kYXkgZm9yIGEgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyCisgIHRvIHJvdGF0ZS4KKworLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgorICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTc0ODc6IFRoZSB3YXZlIGdldHBhcmFtcyBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuCisgIGEgcGxhaW4gdHVwbGUuCisKKy0gSXNzdWUgIzE3Njc1OiBzb2NrZXQgcmVwcigpIHByb3ZpZGVzIGxvY2FsIGFuZCByZW1vdGUgYWRkcmVzc2VzIChpZiBhbnkpLgorICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJworCistIElzc3VlICMxNzA5MzogTWFrZSB0aGUgQUJDcyBpbiBpbXBvcnRsaWIuYWJjIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgb3IgcmFpc2UKKyAgcmVhc29uYWJsZSBleGNlcHRpb25zIGZvciB0aGVpciBtZXRob2RzIHRvIG1ha2UgdGhlbSBtb3JlIGFtZW5hYmxlIHRvIHN1cGVyKCkKKyAgY2FsbHMuCisKKy0gSXNzdWUgIzE3NTY2OiBNYWtlIGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByKCkgb3B0aW9uYWwgaW5zdGVhZCBvZiBhbgorICBhYnN0cmFjdG1ldGhvZCBhbmQgcmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIHNvIGFzIHRvIGJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KKworLSBJc3N1ZSAjMTc2Nzg6IFJlbW92ZSB0aGUgdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGluIGh0dHAvY29va2llamFyLnB5LgorICBDaGFuZ2luZyB0aGUgdXNhZ2Ugb2YgZ2V0X29yaWdpbl9yZXFfaG9zdCgpIHRvIG9yaWdpbl9yZXFfaG9zdC4KKworLSBJc3N1ZSAjMTc2NjY6IEZpeCByZWFkaW5nIGd6aXAgZmlsZXMgd2l0aCBhbiBleHRyYSBmaWVsZC4KKworLSBJc3N1ZSAjMTY0NzU6IFN1cHBvcnQgb2JqZWN0IGluc3RhbmNpbmcsIHJlY3Vyc2lvbiBhbmQgaW50ZXJuZWQgc3RyaW5ncworICBpbiBtYXJzaGFsCisKKy0gSXNzdWUgIzE3NTAyOiBQcm9jZXNzIERFRkFVTFQgdmFsdWVzIGluIG1vY2sgc2lkZV9lZmZlY3QgdGhhdCByZXR1cm5zIGl0ZXJhdG9yLgorCistIElzc3VlICMxNjc5NTogT24gdGhlIGFzdC5hcmd1bWVudHMgb2JqZWN0LCB1bmlmeSB2YXJhcmcgd2l0aCB2YXJhcmdhbm5vdGF0aW9uCisgIGFuZCBrd2FyZyBhbmQga3dhcmdhbm5vdGF0aW9uLiBDaGFuZ2UgdGhlIGNvbHVtbiBvZmZzZXQgb2YgYXN0LkF0dHJpYnV0ZSB0byBiZQorICBhdCB0aGUgYXR0cmlidXRlIG5hbWUuCisKKy0gSXNzdWUgIzE3NDM0OiBQcm9wZXJseSByYWlzZSBhIFN5bnRheEVycm9yIHdoZW4gYSBzdHJpbmcgb2NjdXJzIGJldHdlZW4gZnV0dXJlCisgIGltcG9ydHMuCisKKy0gSXNzdWUgIzE3MTE3OiBJbXBvcnQgYW5kIEBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyIG5vdyBzZXQgX19sb2FkZXJfXyB3aGVuCisgIGl0IGhhcyBhIHZhbHVlIG9mIE5vbmUgb3IgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LgorCistIElzc3VlICMxNzAzMjogVGhlICJnbG9iYWwiIGluIHRoZSAiTmFtZUVycm9yOiBnbG9iYWwgbmFtZSAneCcgaXMgbm90IGRlZmluZWQiCisgIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gcmVtb3ZlZC4gIFBhdGNoIGJ5IFJhbSBSYWNodW0uCiAKIC0gSXNzdWUgIzE4MDgwOiBXaGVuIGJ1aWxkaW5nIGEgQyBleHRlbnNpb24gbW9kdWxlIG9uIE9TIFgsIGlmIHRoZSBjb21waWxlcgogICBpcyBvdmVycmlkZW4gd2l0aCB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsIHVzZSB0aGUgbmV3IGNvbXBpbGVyIGFzCkBAIC01NzMsMzEgKzE5NzIsNzE4IEBACiAtIElzc3VlICMxODExMzogRml4ZWQgYSByZWZjb3VudCBsZWFrIGluIHRoZSBjdXJzZXMucGFuZWwgbW9kdWxlJ3MKICAgc2V0X3VzZXJwdHIoKSBtZXRob2QuICBSZXBvcnRlZCBieSBBdHN1byBJc2hpbW90by4KIAotLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KLSAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCi0gIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCistIEltcGxlbWVudCBQRVAgNDQzICJTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMiLgogCi0tIElzc3VlICMxOTQwMDogUHJldmVudCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkIGZhaWx1cmVzIHdpdGggWGNvZGUgNSBvbiBPUyBYCi0gIDEwLjgrIHdoZW4gdXNpbmcgYSB1bml2ZXJzYWwgUHl0aG9uIHRoYXQgaW5jbHVkZWQgYSBQUEMgYXJjaGl0ZWN0dXJlLAotICBzdWNoIGFzIHdpdGggYSBweXRob24ub3JnIDMyLWJpdC1vbmx5IGJpbmFyeSBpbnN0YWxsZXIuCistIEltcGxlbWVudCBQRVAgNDM1ICJBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSIuCiAKLUMgQVBJCi0tLS0tLQorLSBJc3N1ZSAjMTU1OTY6IEZhc3RlciBwaWNrbGluZyBvZiB1bmljb2RlIHN0cmluZ3MuCiAKLS0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgd2l0aCBhIGhlbHBlciBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgdXNlZAotICBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCistIElzc3VlICMxNzU3MjogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoaWxlIHBhc3NpbmcgYmFkIGRpcmVjdGl2ZXMgdG8KKyAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE3NDM1OiB0aHJlYWRpbmcuVGltZXIncyBfX2luaXRfXyBtZXRob2Qgbm8gbG9uZ2VyIHVzZXMgbXV0YWJsZQorICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGFyZ3MgYW5kIGt3YXJncyBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxNzUyNjogZml4IGFuIEluZGV4RXJyb3IgcmFpc2VkIHdoaWxlIHBhc3NpbmcgY29kZSB3aXRob3V0IGZpbGVuYW1lIHRvCisgIGluc3BlY3QuZmluZHNvdXJjZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBUeWxlciBEb3lsZS4KKworLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHRvIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCisKKy0gSXNzdWUgIzE2NjkyOiBUaGUgc3NsIG1vZHVsZSBub3cgc3VwcG9ydHMgVExTIDEuMSBhbmQgVExTIDEuMi4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgTWljaGVsZSBPcnLDuS4KKworLSBJc3N1ZSAjMTcwMjU6IG11bHRpcHJvY2Vzc2luZzogUmVkdWNlIFF1ZXVlIGFuZCBTaW1wbGVRdWV1ZSBjb250ZW50aW9uLgorCistIElzc3VlICMxNzUzNjogQWRkIHRvIHdlYmJyb3dzZXIncyBicm93c2VyIGxpc3Q6IHd3dy1icm93c2VyLCB4LXd3dy1icm93c2VyLAorICBpY2V3ZWFzZWwsIGljZWFwZS4KKworLSBJc3N1ZSAjMTcxNTA6IHBwcmludCBub3cgdXNlcyBsaW5lIGNvbnRpbnVhdGlvbnMgdG8gd3JhcCBsb25nIHN0cmluZworICBsaXRlcmFscy4KKworLSBJc3N1ZSAjMTc0ODg6IENoYW5nZSB0aGUgc3VicHJvY2Vzcy5Qb3BlbiBidWZzaXplIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlCisgIGZyb20gdW5idWZmZXJlZCAoMCkgdG8gYnVmZmVyaW5nICgtMSkgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGV4aXN0aW5nIGNvZGUKKyAgZXhwZWN0cyBhbmQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBpbiBQeXRob24gMiB0byBhdm9pZAorICBpbnRyb2R1Y2luZyBoYXJkIHRvIHRyYWNrIGRvd24gYnVncy4KKworLSBJc3N1ZSAjMTc1MjE6IENvcnJlY3RlZCBub24tZW5hYmxpbmcgb2YgbG9nZ2VyIGZvbGxvd2luZyB0d28gY2FsbHMgdG8KKyAgZmlsZUNvbmZpZygpLgorCistIElzc3VlICMxNzUwODogQ29ycmVjdGVkIE1lbW9yeUhhbmRsZXIgY29uZmlndXJhdGlvbiBpbiBkaWN0Q29uZmlnKCkgd2hlcmUKKyAgdGhlIHRhcmdldCBoYW5kbGVyIHdhc24ndCBjb25maWd1cmVkIGZpcnN0LgorCistIElzc3VlICMxNzIwOTogY3Vyc2VzLndpbmRvdy5nZXRfd2NoKCkgbm93IGhhbmRsZXMgY29ycmVjdGx5IEtleWJvYXJkSW50ZXJydXB0CisgIChDVFJMK2MpLgorCistIElzc3VlICM1NzEzOiBzbXRwbGliIG5vdyBoYW5kbGVzIDQyMSAoY2xvc2luZyBjb25uZWN0aW9uKSBlcnJvciBjb2RlcyB3aGVuCisgIHNlbmRpbmcgbWFpbCBieSBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIHJlcG9ydGluZyB0aGUgNDIxIGVycm9yIGNvZGUgdmlhIHRoZQorICBleGNlcHRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGNvbW1hbmQgdGhhdCByZWNlaXZlZCB0aGUgZXJyb3IgcmVzcG9uc2UuCisKKy0gSXNzdWUgIzE2OTk3OiB1bml0dGVzdC5UZXN0Q2FzZSBub3cgcHJvdmlkZXMgYSBzdWJUZXN0KCkgY29udGV4dCBtYW5hZ2VyCisgIHRvIHByb2NlZHVyYWxseSBnZW5lcmF0ZSwgaW4gYW4gZWFzeSB3YXksIHNtYWxsIHRlc3QgaW5zdGFuY2VzLgorCistIElzc3VlICMxNzQ4NTogQWxzbyBkZWxldGUgdGhlIFJlcXVlc3QgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIHRoZSBkYXRhCisgIGF0dHJpYnV0ZSBpcyBkZWxldGVkLiAgKEZvbGxvdyBvbiB0byBpc3N1ZSAxNjQ2NCkuCisKKy0gSXNzdWUgIzE1OTI3OiBDVlMgbm93IGNvcnJlY3RseSBwYXJzZXMgZXNjYXBlZCBuZXdsaW5lcyBhbmQgY2FycmlhZ2UKKyAgd2hlbiBwYXJzaW5nIHdpdGggcXVvdGluZyB0dXJuZWQgb2ZmLgorCistIElzc3VlICMxNzQ2NzogYWRkIHJlYWRsaW5lIGFuZCByZWFkbGluZXMgc3VwcG9ydCB0byBtb2NrX29wZW4gaW4KKyAgdW5pdHRlc3QubW9jay4KKworLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcworICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCisgIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgorCistIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KKworLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCisgIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKKyAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCisKKy0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCisgICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KKworLSBJc3N1ZSAjMTc0NzQ6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBtZXRob2RzIG9mIFJlcXVlc3QgY2xhc3MuCisKKy0gSXNzdWUgIzE2NzA5OiB1bml0dGVzdCBkaXNjb3ZlciBvcmRlciBpcyBuby1sb25nZXIgZmlsZXN5c3RlbSBzcGVjaWZpYy4gUGF0Y2gKKyAgYnkgSmVmZiBSYW1uYW5pLgorCistIFVzZSB0aGUgSFRUUFMgUHlQSSB1cmwgZm9yIHVwbG9hZCwgb3ZlcnJpZGluZyBhbnkgcGxhaW4gSFRUUCBVUkwgaW4gcHlwaXJjLgorCistIElzc3VlICM1MDI0OiBzbmRoZHIud2hpY2hoZHIgbm93IHJldHVybnMgdGhlIGZyYW1lIGNvdW50IGZvciBXQVYgZmlsZXMKKyAgcmF0aGVyIHRoYW4gLTEuCisKKy0gSXNzdWUgIzE3NDYwOiBSZW1vdmUgdGhlIHN0cmljdCBhcmd1bWVudCBvZiBIVFRQQ29ubmVjdGlvbiBhbmQgcmVtb3ZpbmcgdGhlCisgIERlcHJlY2F0aW9uV2FybmluZyBiZWluZyBpc3N1ZWQgZnJvbSAzLjIgb253YXJkcy4KKworLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgorCistIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCisgIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KKworLSBBZGRlZCBtaXNzaW5nIEZlZWRQYXJzZXIgYW5kIEJ5dGVzRmVlZFBhcnNlciB0byBlbWFpbC5wYXJzZXIuX19hbGxfXy4KKworLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgorCistIElzc3VlICMxMjkyMTogaHR0cC5zZXJ2ZXIncyBzZW5kX2Vycm9yIHRha2VzIGFuIGV4cGxhaW4gYXJndW1lbnQgdG8gc2VuZCBtb3JlCisgIGluZm9ybWF0aW9uIGluIHJlc3BvbnNlLiBQYXRjaCBjb250cmlidXRlZCBieSBLYXJsLgorCistIElzc3VlICMxNzQxNDogQWRkIHRpbWVpdCwgcmVwZWF0LCBhbmQgZGVmYXVsdF90aW1lciB0byB0aW1laXQuX19hbGxfXy4KKworLSBJc3N1ZSAjMTI4NTA4NjogR2V0IHJpZCBvZiB0aGUgcmVmY291bnRpbmcgaGFjayBhbmQgc3BlZWQgdXAKKyAgdXJsbGliLnBhcnNlLnVucXVvdGUoKSBhbmQgdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMoKS4KKworLSBJc3N1ZSAjMTcwOTk6IEhhdmUgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgcmFpc2UgVmFsdWVFcnJvciB3aGVuIF9fbG9hZGVyX18KKyAgaXMgbm90IHNldCwgaGFybW9uaXppbmcgd2l0aCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgYXR0cmlidXRlIGlzIHNldCB0byBOb25lLgorCistIEV4cG9zZSB0aGUgT19QQVRIIGNvbnN0YW50IGluIHRoZSBvcyBtb2R1bGUgaWYgaXQgaXMgYXZhaWxhYmxlLgorCistIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKKyAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcworICBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzE3Mzg1OiBGaXggcXVhZHJhdGljIGJlaGF2aW9yIGluIHRocmVhZGluZy5Db25kaXRpb24uICBUaGUgRklGTworICBxdWV1ZSBub3cgdXNlcyBhIGRlcXVlIGluc3RlYWQgb2YgYSBsaXN0LgorCistIElzc3VlICMxNTgwNjogQWRkIGNvbnRleHRsaWIuaWdub3JlKCkuICBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgaWdub3JlIHNwZWNpZmllZCBleGNlcHRpb25zLCByZXBsYWNpbmcgdGhlICJleGNlcHQgU29tZUV4Y2VwdGlvbjogcGFzcyIgaWRpb20uCisKKy0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQorICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCisgIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCisgIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KKworLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCisgIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgorCistIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAorICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCisKKy0gSXNzdWUgIzE2OTM1OiB1bml0dGVzdCBub3cgY291bnRzIHRoZSBtb2R1bGUgYXMgc2tpcHBlZCBpZiBpdCByYWlzZXMgU2tpcFRlc3QsCisgIGluc3RlYWQgb2YgY291bnRpbmcgaXQgYXMgYW4gZXJyb3IuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgorCistIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCisgIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6CisgIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCisKKy0gSXNzdWUgIzE3MTk3OiBwcm9maWxlL2NQcm9maWxlIG1vZHVsZXMgcmVmYWN0b3JlZCBzbyB0aGF0IGNvZGUgb2YgcnVuKCkgYW5kCisgIHJ1bmN0eCgpIHV0aWxpdHkgZnVuY3Rpb25zIGlzIG5vdCBkdXBsaWNhdGVkIGluIGJvdGggbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ3MjA6IHNxbGl0ZTM6IENvbnZlcnQgZGF0ZXRpbWUgbWljcm9zZWNvbmRzIGNvcnJlY3RseS4KKyAgUGF0Y2ggYnkgTG93ZSBUaGlkZXJtYW4uCisKKy0gSXNzdWUgIzE1MTMyOiBBbGxvdyBhIGxpc3QgZm9yIHRoZSBkZWZhdWx0VGVzdCBhcmd1bWVudCBvZgorICB1bml0dGVzdC5UZXN0UHJvZ3JhbS4gUGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTcyMjU6IEpTT04gZGVjb2RlciBub3cgY291bnRzIGNvbHVtbnMgaW4gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcKKyAgd2l0aCAxLCBhcyBpbiBvdGhlciBsaW5lcy4KKworLSBJc3N1ZSAjNjYyMzogQWRkZWQgZXhwbGljaXQgRGVwcmVjYXRpb25XYXJuaW5nIGZvciBmdHBsaWIubmV0cmMsIHdoaWNoIGhhcworICBiZWVuIGRlcHJlY2F0ZWQgYW5kIHVuZG9jdW1lbnRlZCBmb3IgYSBsb25nIHRpbWUuCisKKy0gSXNzdWUgIzEzNzAwOiBGaXggYnl0ZS9zdHJpbmcgaGFuZGxpbmcgaW4gaW1hcGxpYiBhdXRoZW50aWNhdGlvbiB3aGVuIGFuCisgIGF1dGhvYmplY3QgaXMgc3BlY2lmaWVkLgorCistIElzc3VlICMxMzE1MzogVGtpbnRlciBmdW5jdGlvbnMgbm93IHJhaXNlIFRjbEVycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciB3aGVuCisgIGEgc3RyaW5nIGFyZ3VtZW50IGNvbnRhaW5zIG5vbi1CTVAgY2hhcmFjdGVyLgorCistIElzc3VlICM5NjY5OiBQcm90ZWN0IHJlIGFnYWluc3QgaW5maW5pdGUgbG9vcHMgb24gemVyby13aWR0aCBtYXRjaGluZyBpbgorICBub24tZ3JlZWR5IHJlcGVhdC4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTMxNjk6IFRoZSBtYXhpbWFsIHJlcGV0aXRpb24gbnVtYmVyIGluIGEgcmVndWxhciBleHByZXNzaW9uIGhhcyBiZWVuCisgIGluY3JlYXNlZCBmcm9tIDY1NTM0IHRvIDIxNDc0ODM2NDcgKG9uIDMyLWJpdCBwbGF0Zm9ybSkgb3IgNDI5NDk2NzI5NCAob24KKyAgNjQtYml0KS4KKworLSBJc3N1ZSAjMTcxNDM6IEZpeCBhIG1pc3NpbmcgaW1wb3J0IGluIHRoZSB0cmFjZSBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5CisgIEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE1MjIwOiBlbWFpbC5mZWVkcGFyc2VyJ3MgbGluZSBzcGxpdHRpbmcgYWxnb3JpdGhtIGlzIG5vdyBzaW1wbGVyIGFuZAorICBmYXN0ZXIuCisKKy0gSXNzdWUgIzE2NzQzOiBGaXggbW1hcCBvdmVyZmxvdyBjaGVjayBvbiAzMiBiaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTY5OTY6IHdlYmJyb3dzZXIgbW9kdWxlIG5vdyB1c2VzIHNodXRpbC53aGljaCgpIHRvIGZpbmQgYQorICB3ZWItYnJvd3NlciBvbiB0aGUgZXhlY3V0YWJsZSBzZWFyY2ggcGF0aC4KKworLSBJc3N1ZSAjMTY4MDA6IHRlbXBmaWxlLmdldHRlbXBkaXIoKSBubyBsb25nZXIgbGVmdCB0ZW1wb3JhcnkgZmlsZXMgd2hlbgorICB0aGUgZGlzayBpcyBmdWxsLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQW1pciBTemVrZWx5LgorCistIElzc3VlICMxNzE5MjogSW1wb3J0IGxpYmZmaS0zLjAuMTIuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTcwNTI6IHVuaXR0ZXN0IGRpc2NvdmVyeSBzaG91bGQgdXNlIHNlbGYudGVzdExvYWRlci4KKworLSBJc3N1ZSAjNDU5MTogVWlkIGFuZCBnaWQgdmFsdWVzIGxhcmdlciB0aGFuIDIqKjMxIGFyZSBzdXBwb3J0ZWQgbm93LgorCistIElzc3VlICMxNzE0MTogcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgpIG5vIG1vcmUgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KKworLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgorICBbMCwgMiptYXRoLnBpXS4KKworLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KKworLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCisgIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTM3NzM6IHNxbGl0ZTMuY29ubmVjdCgpIGdldHMgYSBuZXcgYHVyaWAgcGFyYW1ldGVyIHRvIHBhc3MgdGhlCisgIGZpbGVuYW1lIGFzIGEgVVJJLCBhbGxvd2luZyB0byBwYXNzIGN1c3RvbSBvcHRpb25zLgorCistIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKKyAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzEwMzU1OiBJbiBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjbGFzcyBtb2RlLCBuYW1lLCBlbmNvZGluZyBhbmQKKyAgbmV3bGluZXMgcHJvcGVydGllcyBub3cgd29yayBmb3IgdW5yb2xsZWQgZmlsZXMuICBPYnNvbGV0ZWQgYW5kIG5ldmVyCisgIHdvcmtpbmcgb24gUHl0aG9uIDMgeHJlYWRsaW5lIG1ldGhvZCBub3cgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTY2ODY6IEZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gYXVkaW9vcCBtb2R1bGUuICBGaXhlZCBjcmFzaGVzIGluCisgIGF2Z3BwKCksIG1heHBwKCkgYW5kIHJhdGVjdigpLiAgRml4ZWQgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBhZGQoKSwgYmlhcygpLAorICBhbmQgcmF0ZWN2KCkuICByZXZlcnNlKCksIGxpbjJsaW4oKSBhbmQgcmF0ZWN2KCkgbm8gbW9yZSBsb3NlIHByZWNpc2lvbiBmb3IKKyAgMzItYml0IHNhbXBsZXMuICBtYXgoKSBhbmQgcm1zKCkgbm8gbW9yZSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IGFuZAorICB2YXJpb3VzIG90aGVyIGZ1bmN0aW9ucyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAzMi1iaXQgc2FtcGxlIC0weDgwMDAwMDAwLgorCistIElzc3VlICMxNzA3MzogRml4IHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgaW4gc3FsaXRlMyBtb2R1bGUuCisKKy0gSXNzdWUgIzE2NzIzOiBodHRwbGliLkhUVFBSZXNwb25zZSBubyBsb25nZXIgbWFya2VkIGNsb3NlZCB3aGVuIHRoZSBjb25uZWN0aW9uCisgIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgorCistIElzc3VlICMxNTM1OTogQWRkIENBTl9CQ00gcHJvdG9jb2wgc3VwcG9ydCB0byB0aGUgc29ja2V0IG1vZHVsZS4gUGF0Y2ggYnkKKyAgQnJpYW4gVGhvcm5lLgorCistIElzc3VlICMxNjk0ODogRml4IHF1b3RlZCBwcmludGFibGUgYm9keSBlbmNvZGluZyBmb3Igbm9uLWxhdGluMSBjaGFyYWN0ZXIKKyAgc2V0cyBpbiB0aGUgZW1haWwgcGFja2FnZS4KKworLSBJc3N1ZSAjMTY4MTE6IEZpeCBmb2xkaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZSBpbiB0aGUgcHJvdmlzaW9uYWwgZW1haWwKKyAgcG9saWNpZXMuCisKKy0gSXNzdWUgIzE3MTMyOiBVcGRhdGUgc3ltYm9sIGZvciAieWllbGQgZnJvbSIgZ3JhbW1hciBjaGFuZ2VzLgorCistIElzc3VlICMxNzA3NjogTWFrZSBjb3B5aW5nIG9mIHhhdHRycyBtb3JlIHBlcm1pc3NpdmUgb2YgbWlzc2luZyBGUyBzdXBwb3J0LgorICBQYXRjaCBieSBUaG9tYXMgV291dGVycy4KKworLSBJc3N1ZSAjMTcwODk6IEV4cGF0IHBhcnNlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KKyAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLiAgSXQgbm93IGFjY2VwdHMgYnl0ZXMgYW5kCisgIHN0cmluZ3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisKKy0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VyZWQgd2hlbiBQeUFyZ19QYXJzZVR1cGxlCisgIHBhcnNlcyBuZXN0ZWQgbXV0YXRpbmcgc2VxdWVuY2UuCisKKy0gSXNzdWUgIzUyODk6IEZpeCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgb24gU29sYXJpcy4KKworLSBJc3N1ZSAjMTcxMDY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBpby5UZXh0SU9XcmFwcGVyIHdoZW4gYW4gdW5kZXJseWluZworICBzdHJlYW0gb3IgYSBkZWNvZGVyIHByb2R1Y2VzIGRhdGEgb2YgYW4gdW5leHBlY3RlZCB0eXBlIChpLmUuIHdoZW4KKyAgaW8uVGV4dElPV3JhcHBlciBpbml0aWFsaXplZCB3aXRoIHRleHQgc3RyZWFtIG9yIHVzZSBieXRlcy10by1ieXRlcyBjb2RlYykuCisKKy0gSXNzdWUgIzE3MDE1OiBXaGVuIGl0IGhhcyBhIHNwZWMsIGEgTW9jayBvYmplY3Qgbm93IGluc3BlY3RzIGl0cyBzaWduYXR1cmUKKyAgd2hlbiBtYXRjaGluZyBjYWxscywgc28gdGhhdCBhcmd1bWVudHMgY2FuIGJlIG1hdGNoZWQgcG9zaXRpb25hbGx5IG9yCisgIGJ5IG5hbWUuCisKKy0gSXNzdWUgIzE1NjMzOiBodHRwbGliLkhUVFBSZXNwb25zZSBpcyBub3cgbWFyayBjbG9zZWQgd2hlbiB0aGUgc2VydmVyCisgIHNlbmRzIGxlc3MgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBDb250ZW50LUxlbmd0aC4KKworLSBJc3N1ZSAjMTIyNjg6IFRoZSBpbyBtb2R1bGUgZmlsZSBvYmplY3Qgd3JpdGUgbWV0aG9kcyBubyBsb25nZXIgYWJvcnQgZWFybHkKKyAgd2hlbiBvbmUgb2YgaXRzIHdyaXRlIHN5c3RlbSBjYWxscyBpcyBpbnRlcnJ1cHRlZCAoRUlOVFIpLgorCistIElzc3VlICM2OTcyOiBUaGUgemlwZmlsZSBtb2R1bGUgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgZmlsZXMgb3V0c2lkZSBvZgorICBpdHMgZGVzdGluYXRpb24gcGF0aCB3aGVuIGV4dHJhY3RpbmcgbWFsaWNpb3VzIHppcCBmaWxlcy4KKworLSBJc3N1ZSAjNDg0NDogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcEZpbGUgd2hlbiBvcGVucyBhIFpJUCBmaWxlIHdpdGggYW4KKyAgaW5jb21wbGV0ZSAiRW5kIG9mIENlbnRyYWwgRGlyZWN0b3J5IiByZWNvcmQuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUKKyAgUG9sbyBhbmQgQWxhbiBNY0ludHlyZS4KKworLSBJc3N1ZSAjMTcwNzE6IFNpZ25hdHVyZS5iaW5kKCkgbm93IHdvcmtzIHdoZW4gb25lIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cworICBpcyBuYW1lZCBgYHNlbGZgYC4KKworLSBJc3N1ZSAjMTIwMDQ6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBQeVppcEZpbGUgd2hlbiB3cml0aW5nIGFuIGludmFsaWQKKyAgUHl0aG9uIGZpbGUuICBQYXRjaCBieSBCZW4gTW9yZ2FuLgorCistIEhhdmUgcHlfY29tcGlsZSB1c2UgaW1wb3J0bGliIGFzIG11Y2ggYXMgcG9zc2libGUgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4KKyAgQ29kZSBub3cgcmFpc2VzIEZpbGVFeGlzdHNFcnJvciBpZiB0aGUgZmlsZSBwYXRoIHRvIGJlIHVzZWQgZm9yIHRoZQorICBieXRlLWNvbXBpbGVkIGZpbGUgaXMgYSBzeW1saW5rIG9yIG5vbi1yZWd1bGFyIGZpbGUgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0CisgIHdpbGwgbm90IGtlZXAgdGhlIGZpbGUgcGF0aCB0eXBlIGlmIGl0IHdyaXRlcyB0byB0aGF0IHBhdGguCisKKy0gSXNzdWUgIzE4MDAyMjogSGF2ZSBzaXRlLmFkZHBhY2thZ2UoKSBjb25zaWRlciBhbHJlYWR5IGtub3duIHBhdGhzIGV2ZW4gd2hlbgorICBub25lIGFyZSBleHBsaWNpdGx5IHBhc3NlZCBpbi4gQnVnIHJlcG9ydCBhbmQgZml4IGJ5IEtpcmlsbC4KKworLSBJc3N1ZSAjMTYwMjEzMzogb24gTWFjIE9TIFggYSBzaGFyZWQgbGlicmFyeSBidWlsZCAoYGAtLWVuYWJsZS1zaGFyZWRgYCkKKyAgbm93IGZpbGxzIHRoZSBgYG9zLmVudmlyb25gYCB2YXJpYWJsZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE1NTA1OiBgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJgIG5vIGxvbmdlciBhc3N1bWVzIFNJR0lOVCBoYW5kbGVyIGlzCisgIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdC4KKworLSBJc3N1ZSAjMTM0NTQ6IEZpeCBhIGNyYXNoIHdoZW4gZGVsZXRpbmcgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBpdGVydG9vbHMudGVlKCkKKyAgaWYgYWxsIG90aGVyIGl0ZXJhdG9ycyB3ZXJlIHZlcnkgYWR2YW5jZWQgYmVmb3JlLgorCistIElzc3VlICMxMjQxMTogRml4IHRvIGNnaS5wYXJzZV9tdWx0aXBhcnQgdG8gY29ycmVjdGx5IHVzZSBieXRlcyBib3VuZGFyaWVzCisgIGFuZCBieXRlcyBkYXRhLiBQYXRjaCBieSBKb25hcyBXYWduZXIuCisKKy0gSXNzdWUgIzE2OTU3OiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgc2VhcmNoZXMgYSBiYXJlIGZpbGUgbmFtZSBpbiB0aGUKKyAgY3VycmVudCBkaXJlY3Rvcnkgb24gVW5peCBhbmQgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgcmVsYXRpdmUgZmlsZSBwYXRoIHdpdGgKKyAgYSBkaXJlY3RvcnkgcGFydCBpbiBQQVRIIGRpcmVjdG9yaWVzLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzExNTkwNTE6IEd6aXBGaWxlIG5vdyByYWlzZXMgRU9GRXJyb3Igd2hlbiByZWFkaW5nIGEgY29ycnVwdGVkIGZpbGUKKyAgd2l0aCB0cnVuY2F0ZWQgaGVhZGVyIG9yIGZvb3Rlci4KKworLSBJc3N1ZSAjMTY5OTM6IHNodXRpbC53aGljaCgpIG5vdyBwcmVzZXJ2ZXMgdGhlIGNhc2Ugb2YgdGhlIHBhdGggYW5kIGV4dGVuc2lvbgorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjk5MjogT24gV2luZG93cyBpbiBzaWduYWwuc2V0X3dha2V1cF9mZCwgdmFsaWRhdGUgdGhlIGZpbGUKKyAgZGVzY3JpcHRvciBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTY0MjI6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFB5dGhvbiB2ZXJzaW9uLCB0aGUgQyB2ZXJzaW9uIG9mCisgIGRlY2ltYWwgbm93IHVzZXMgc3RyaW5ncyBpbnN0ZWFkIG9mIGludGVnZXJzIGZvciByb3VuZGluZyBtb2RlIGNvbnN0YW50cy4KKworLSBJc3N1ZSAjMTU4NjE6IHRraW50ZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGxpc3RzIGFuZCB0dXBsZXMgY29udGFpbmluZworICBzdHJpbmdzIHdpdGggd2hpdGVzcGFjZXMsIGJhY2tzbGFzaGVzIG9yIHVuYmFsYW5jZWQgYnJhY2VzLgorCistIElzc3VlICM5NzIwOiB6aXBmaWxlIG5vdyB3cml0ZXMgY29ycmVjdCBsb2NhbCBoZWFkZXJzIGZvciBmaWxlcyBsYXJnZXIgdGhhbgorICA0IEdpQi4KKworLSBJc3N1ZSAjMTY5NTU6IEZpeCB0aGUgcG9sbCgpIG1ldGhvZCBmb3IgbXVsdGlwcm9jZXNzaW5nJ3Mgc29ja2V0CisgIGNvbm5lY3Rpb25zIG9uIFdpbmRvd3MuCisKKy0gU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG5vdyBwcm9wZXJseSBjbG9zZXMgdGhlIGlucHV0IGZpbGUuCisKKy0gSXNzdWUgIzE1MDMxOiBSZWZhY3RvciBzb21lIC5weWMgbWFuYWdlbWVudCBjb2RlIHRvIGN1dCBkb3duIG9uIGNvZGUKKyAgZHVwbGljYXRpb24uIFRoYW5rcyB0byBSb25hbiBMYW15IGZvciB0aGUgcmVwb3J0IGFuZCB0YWtpbmcgYW4gaW5pdGlhbCBzdGFiCisgIGF0IHRoZSBwcm9ibGVtLgorCistIElzc3VlICMxNjM5ODogT3B0aW1pemUgZGVxdWUucm90YXRlKCkgc28gdGhhdCBpdCBvbmx5IG1vdmVzIHBvaW50ZXJzCisgIGFuZCBkb2Vzbid0IHRvdWNoIHRoZSB1bmRlcmx5aW5nIGRhdGEgd2l0aCBpbmNyZWZzIGFuZCBkZWNyZWZzLgorCistIElzc3VlICMxNjkwMDogSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiBzc2wgc29ja2V0IGlzIGxlZnQgdW5jbG9zZWQuCisKKy0gSXNzdWUgIzEzODk5OiBcQSwgXFosIGFuZCBcQiBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBBLCBaLCBhbmQgQiBsaXRlcmFscworICB3aGVuIHVzZWQgaW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIChlLmcuICdbXEFdJykuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzE1NTQ1OiBGaXggcmVncmVzc2lvbiBpbiBzcWxpdGUzJ3MgaXRlcmR1bXAgbWV0aG9kIHdoZXJlIGl0IHdhcworICBmYWlsaW5nIGlmIHRoZSBjb25uZWN0aW9uIHVzZWQgYSByb3cgZmFjdG9yeSAoc3VjaCBhcyBzcWxpdGUzLlJvdykgdGhhdAorICBwcm9kdWNlZCB1bnNvcnRhYmxlIG9iamVjdHMuIChSZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGZpeCBmb3IgOTc1MCkuCisKKy0gZmNudGw6IGFkZCBGX0RVUEZEX0NMT0VYRUMgY29uc3RhbnQsIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjQrLgorCistIElzc3VlICMxNTk3MjogRml4IGVycm9yIG1lc3NhZ2VzIHdoZW4gb3MgZnVuY3Rpb25zIGV4cGVjdGluZyBhIGZpbGUgbmFtZSBvcgorICBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSB0aGUgaW5jb3JyZWN0IHR5cGUuCisKKy0gSXNzdWUgIzgxMDk6IFRoZSBzc2wgbW9kdWxlIG5vdyBoYXMgc3VwcG9ydCBmb3Igc2VydmVyLXNpZGUgU05JLCB0aGFua3MKKyAgdG8gYSA6bWV0aDpgU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLiAgUGF0Y2ggYnkgRGFuaWVsCisgIEJsYWNrLgorCistIElzc3VlICMxNjg2MDogSW4gdGVtcGZpbGUsIHVzZSBPX0NMT0VYRUMgd2hlbiBhdmFpbGFibGUgdG8gc2V0IHRoZQorICBjbG9zZS1vbi1leGVjIGZsYWcgYXRvbWljYWxseS4KKworLSBJc3N1ZSAjMTY2NzQ6IHJhbmRvbS5nZXRyYW5kYml0cygpIGlzIG5vdyAyMC00MCUgZmFzdGVyIGZvciBzbWFsbCBpbnRlZ2Vycy4KKworLSBJc3N1ZSAjMTYwMDk6IEpTT04gZXJyb3IgbWVzc2FnZXMgbm93IHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY4Mjg6IEZpeCBlcnJvciBpbmNvcnJlY3RseSByYWlzZWQgYnkgYnoyLmNvbXByZXNzKGInJykgYW5kCisgIGJ6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzKGInJykuIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFBhY2ttYW4uCisKKy0gSXNzdWUgIzE2ODMzOiBJbiBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiwgZG8gbm90IGNvbmNhdGVuYXRlIHRoZSByZXF1ZXN0CisgIGhlYWRlcnMgYW5kIGJvZHkgd2hlbiB0aGUgcGF5bG9hZCBleGNlZWRzIDE2IEtCLCBzaW5jZSBpdCBjYW4gY29uc3VtZSBtb3JlCisgIG1lbW9yeSBmb3Igbm8gYmVuZWZpdC4gIFBhdGNoIGJ5IEJlbm5vIExlc2xpZS4KKworLSBJc3N1ZSAjMTY1NDE6IHRrX3NldFBhbGV0dGUoKSBub3cgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYHBhcnNlci5wb3BpdGVtKClgIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvci4KKyAgVGhpcyBtYWtlcyBgcGFyc2VyLmNsZWFuKClgIHdvcmsgY29ycmVjdGx5LgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnc2VjdGlvbiddID0ge31gYCBub3cgcHJlc2VydmVzCisgIHNlY3Rpb24gb3JkZXIgd2l0aGluIHRoZSBwYXJzZXIuIFRoaXMgbWFrZXMgYHBhcnNlci51cGRhdGUoKWAgcHJlc2VydmUgc2VjdGlvbgorICBvcmRlciBhcyB3ZWxsLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnREVGQVVMVCddID0ge31gYCBub3cgY29ycmVjdGx5CisgIGNsZWFycyBwcmV2aW91cyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0IHNlY3Rpb24uIFNhbWUgZ29lcyBmb3IKKyAgYGBwYXJzZXIudXBkYXRlKHsnREVGQVVMVCc6IHt9fSlgYC4KKworLSBJc3N1ZSAjOTU4NjogUmVkZWZpbmUgU0VNX0ZBSUxFRCBvbiBNYWNPU1ggdG8ga2VlcCBjb21waWxlciBoYXBweS4KKworLSBJc3N1ZSAjMTY3ODc6IEluY3JlYXNlIGFzeW5jb3JlIGFuZCBhc3luY2hhdCBkZWZhdWx0IG91dHB1dCBidWZmZXJzIHNpemUsIHRvCisgIGRlY3JlYXNlIENQVSB1c2FnZSBhbmQgaW5jcmVhc2UgdGhyb3VnaHB1dC4KKworLSBJc3N1ZSAjMTA1Mjc6IG1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE2Njg4OiBOb3cgcmVnZXhlcyBjb250YWluZWQgYmFja3JlZmVyZW5jZXMgY29ycmVjdGx5IHdvcmsgd2l0aAorICBub24tQVNDSUkgc3RyaW5ncy4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTY0ODY6IE1ha2UgYWlmYyBmaWxlcyBhY3QgYXMgY29udGV4dCBtYW5hZ2Vycy4KKworLSBJc3N1ZSAjMTY0ODU6IE5vdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaWYgZmlsZSBoZWFkZXIgcGF0Y2hpbmcgZmFpbGVkCisgIG9uIGNsb3NpbmcgYW4gYWlmYyBmaWxlLgorCistIElzc3VlICMxNjY0MDogUnVuIGxlc3MgY29kZSB1bmRlciBhIGxvY2sgaW4gc2NoZWQgbW9kdWxlLgorCistIElzc3VlICMxNjE2NTogc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG5vIGxvbmdlciBibG9ja3MgYSBzY2hlZHVsZXIgZm9yIG90aGVyCisgIHRocmVhZHMuCisKKy0gSXNzdWUgIzE2NjQxOiBEZWZhdWx0IHZhbHVlcyBvZiBzY2hlZC5zY2hlZHVsZXIuZW50ZXIoKSBhcmUgbm8gbG9uZ2VyCisgIG1vZGlmaWFibGUuCisKKy0gSXNzdWUgIzE2NjE4OiBNYWtlIGdsb2IuZ2xvYiBtYXRjaCBjb25zaXN0ZW50bHkgYWNyb3NzIHN0cmluZ3MgYW5kIGJ5dGVzCisgIHJlZ2FyZGluZyBsZWFkaW5nIGRvdHMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjc4ODogQWRkIHNhbWVzdGF0IHRvIExpYi9udHBhdGgucHkKKworLSBJc3N1ZSAjMTY3MTM6IFBhcnNpbmcgb2YgJ3RlbCcgdXJscyB1c2luZyB1cmxwYXJzZSBzZXBhcmF0ZXMgcGFyYW1zIGZyb20KKyAgcGF0aC4KKworLSBJc3N1ZSAjMTY0NDM6IEFkZCBkb2NzdHJpbmdzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorICBQYXRjaCBieSBBbnRvbiBLYXN5YW5vdi4KKworLSBJc3N1ZSAjMTU3MDE6IEZpeCBIVFRQRXJyb3IgaW5mbyBtZXRob2QgY2FsbCB0byByZXR1cm4gdGhlIGhlYWRlcnMgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzE2NzUyOiBBZGQgYSBtaXNzaW5nIGltcG9ydCB0byBtb2R1bGVmaW5kZXIuIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2NjQ2OiBmdHBsaWIuRlRQLm1ha2Vwb3J0KCkgbWlnaHQgbG9zZSBzb2NrZXQgZXJyb3IgZGV0YWlscy4KKyAgKHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EpCisKKy0gSXNzdWUgIzE2NjI2OiBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGluIGdsb2IuZ2xvYigpIG9uIFdpbmRvd3Mgd2hlbiB0aGUKKyAgcGF0dGVybiBjb250YWlucyBhIHdpbGRjYXJkIGluIHRoZSBkcml2ZSBvciBVTkMgcGF0aC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NzgzOiBFeGNlcHQgZm9yIHRoZSBudW1iZXIgbWV0aG9kcywgdGhlIEMgdmVyc2lvbiBvZiBkZWNpbWFsIG5vdworICBzdXBwb3J0cyBhbGwgTm9uZSBkZWZhdWx0IHZhbHVlcyBwcmVzZW50IGluIGRlY2ltYWwucHkuIFRoZXNlIHZhbHVlcyB3ZXJlCisgIGxhcmdlbHkgdW5kb2N1bWVudGVkLgorCistIElzc3VlICMxMTE3NTogYXJncGFyc2UuRmlsZVR5cGUgbm93IGFjY2VwdHMgZW5jb2RpbmcgYW5kIGVycm9ycworICBhcmd1bWVudHMuIFBhdGNoIGJ5IEx1Y2FzIE1heXN0cmUuCisKKy0gSXNzdWUgIzE2NDg4OiBlcG9sbCgpIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGB3aXRoYCBzdGF0ZW1lbnQuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI5ODogSW4gSFRUUFJlc3BvbnNlLnJlYWQoKSwgY2xvc2UgdGhlIHNvY2tldCB3aGVuIHRoZXJlIGlzIG5vCisgIENvbnRlbnQtTGVuZ3RoIGFuZCB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGZpbmlzaGVkLiAgUGF0Y2ggYnkgRXJhbgorICBSdW5kc3RlaW4uCisKKy0gQWRkIGFiYy5BQkMgY2xhc3MgdG8gdXNlIGluaGVyaXRhbmNlIHJhdGhlciB0aGFuIGEgZGlyZWN0IGludm9jYXRpb24gb2YKKyAgQUJDTWV0YSBtZXRhY2xhc3MuIFBhdGNoIGJ5IEJydW5vIER1cHVpcy4KKworLSBFeHBvc2UgdGhlIFRDUF9GQVNUT1BFTiBhbmQgTVNHX0ZBU1RPUEVOIGZsYWdzIGluIHNvY2tldCB3aGVuIHRoZXkncmUKKyAgYXZhaWxhYmxlLgorCistIElzc3VlICMxNTcwMTogQWRkIGEgLmhlYWRlcnMgYXR0cmlidXRlIHRvIHVybGxpYi5lcnJvci5IVFRQRXJyb3IuIFBhdGNoCisgIGNvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE1ODcyOiBGaXggMy4zIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGUgbmV3IGZkLWJhc2VkIHNodXRpbC5ybXRyZWUKKyAgdGhhdCBjYXVzZWQgaXQgdG8gbm90IGlnbm9yZSBjZXJ0YWluIGVycm9ycyB3aGVuIGlnbm9yZV9lcnJvcnMgd2FzIHNldC4KKyAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYSBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyNDg6IERpc2FibGUgY29kZSBleGVjdXRpb24gZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGJ5CisgIHRraW50ZXIgd2hlbiB0aGUgLUUgZmxhZyBpcyBwYXNzZWQgdG8gUHl0aG9uLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMxMzM5MDogTmV3IGZ1bmN0aW9uIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgIHJldHVybnMgdGhlCisgIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisKKy0gSXNzdWUgIzE2NjI4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBjdHlwZXMucmVzaXplKCkuCisKKy0gSXNzdWUgIzEzNjE0OiBGaXggc2V0dXAucHkgcmVnaXN0ZXIgZmFpbHVyZSB3aXRoIGludmFsaWQgcnN0IGluIGRlc2NyaXB0aW9uLgorICBQYXRjaCBieSBKdWxpZW4gQ291cnRlYXUgYW5kIFBpZXJyZSBQYXVsIExlZmVidnJlLgorCistIElzc3VlICMxMzUxMjogQ3JlYXRlIH4vLnB5cGlyYyBzZWN1cmVseSAoQ1ZFLTIwMTEtNDk0NCkuICBJbml0aWFsIHBhdGNoIGJ5CisgIFBoaWxpcCBKZW52ZXksIHRlc3RlZCBieSBNYWdlaWEgYW5kIERlYmlhbi4KKworLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKKyAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCisKKy0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KKyAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgorCistIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKKyAgUEVQIDM4My4KKworLSBJc3N1ZSAjMTAxODI6IFRoZSByZSBtb2R1bGUgZG9lc24ndCB0cnVuY2F0ZSBpbmRpY2VzIHRvIDMyIGJpdHMgYW55bW9yZS4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzMzM6IHVzZSAoIiwiLCAiOiAiKSBhcyBkZWZhdWx0IHNlcGFyYXRvciB3aGVuIGluZGVudCBpcyBzcGVjaWZpZWQKKyAgdG8gYXZvaWQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NTczOiBJbiAydG8zLCB0cmVhdCBlbnVtZXJhdGUoKSBsaWtlIGEgY29uc3VtaW5nIGNhbGwsIHNvIHN1cGVyZmx1b3VzCisgIGxpc3QoKSBjYWxscyBhcmVuJ3QgYWRkZWQgdG8gZmlsdGVyKCksIG1hcCgpLCBhbmQgemlwKCkgd2hpY2ggYXJlIGRpcmVjdGx5CisgIHBhc3NlZCBlbnVtZXJhdGUoKS4KKworLSBJc3N1ZSAjMTI4NDg6IFRoZSBwdXJlIFB5dGhvbiBwaWNrbGUgaW1wbGVtZW50YXRpb24gbm93IHRyZWF0cyBvYmplY3QKKyAgbGVuZ3RocyBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMsIGxpa2UgdGhlIEMgaW1wbGVtZW50YXRpb24gZG9lcy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY0MjM6IHVybGxpYi5yZXF1ZXN0IG5vdyBoYXMgc3VwcG9ydCBmb3IgYGBkYXRhOmBgIFVSTHMuICBQYXRjaCBieQorICBNYXRoaWFzIFBhbnplbmLDtmNrLgorCistIElzc3VlICM0NDczOiBBZGQgYSBQT1AzLnN0bHMoKSB0byBzd2l0Y2ggYSBjbGVhci10ZXh0IFBPUDMgc2Vzc2lvbiBpbnRvCisgIGFuIGVuY3J5cHRlZCBQT1AzIHNlc3Npb24sIG9uIHN1cHBvcnRlZCBzZXJ2ZXJzLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBBZGQgYSBQT1AzLmNhcGEoKSBtZXRob2QgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcyBhZHZlcnRpc2VkCisgIGJ5IHRoZSBQT1AzIHNlcnZlci4gIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjNDQ3MzogRW5zdXJlIHRoZSBzb2NrZXQgaXMgc2h1dGRvd24gY2xlYW5seSBpbiBQT1AzLmNsb3NlKCkuCisgIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjMTY1MjI6IGFkZGVkIEZBSUxfRkFTVCBmbGFnIHRvIGRvY3Rlc3QuCisKKy0gSXNzdWUgIzE1NjI3OiBBZGQgdGhlIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZSgpIG1ldGhvZC4KKworLSBJc3N1ZSAjMTY0MDg6IEZpeCBmaWxlIGRlc2NyaXB0b3JzIG5vdCBiZWluZyBjbG9zZWQgaW4gZXJyb3IgY29uZGl0aW9ucworICBpbiB0aGUgemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNDYzMTogQWRkIGEgbmV3IDpjbGFzczpgd2Vha3JlZi5XZWFrTWV0aG9kYCB0byBzaW11bGF0ZSB3ZWFrCisgIHJlZmVyZW5jZXMgdG8gYm91bmQgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTY0Njk6IEZpeCBleGNlcHRpb25zIGZyb20gZmxvYXQgLT4gRnJhY3Rpb24gYW5kIERlY2ltYWwgLT4gRnJhY3Rpb24KKyAgY29udmVyc2lvbnMgZm9yIHNwZWNpYWwgdmFsdWVzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aG9zZSBmb3IgZmxvYXQgLT4gaW50CisgIGFuZCBEZWNpbWFsIC0+IGludC4gIFBhdGNoIGJ5IEFsZXhleSBLYWNoYXlldi4KKworLSBJc3N1ZSAjMTY0ODE6IG11bHRpcHJvY2Vzc2luZyBubyBsb25nZXIgbGVha3MgcHJvY2VzcyBoYW5kbGVzIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDI4OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdG9vbHMucGFydGlhbCgpLgorICBQYXRjaCBieSBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2MTQwOiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGRvdWJsZSBjbG9zZXMgaXRzIGNoaWxkCisgIHN1YnByb2Nlc3MuUElQRSBwYXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBvbiBjaGlsZCBlcnJvciBwcmlvciB0byBleGVjKCkuCisKKy0gUmVtb3ZlIGEgYmFyZSBwcmludCB0byBzdGRvdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBtb2R1bGUgdGhhdCBjb3VsZCBoYXZlCisgIGhhcHBlbmVkIGlmIHRoZSBjaGlsZCBwcm9jZXNzIHdyb3RlIGdhcmJhZ2UgdG8gaXRzIHByZS1leGVjIGVycm9yIHBpcGUuCisKKy0gVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vdyByYWlzZXMgaXRzIG93biBTdWJwcm9jZXNzRXJyb3IgaW5zdGVhZCBvZiBhCisgIFJ1bnRpbWVFcnJvciBpbiB2YXJpb3VzIGVycm9yIHNpdHVhdGlvbnMgd2hpY2ggc2hvdWxkIG5vdCBub3JtYWxseSBoYXBwZW4uCisKKy0gSXNzdWUgIzE2MzI3OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMKKyAgdXNlZCBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciBwaXBlcyB0byB0aGUgY2hpbGQgd2hlbiBmb3JrKCkgZmFpbHMuCisKKy0gSXNzdWUgIzE0Mzk2OiBIYW5kbGUgdGhlIG9kZCByYXJlIGNhc2Ugb2Ygd2FpdHBpZCByZXR1cm5pbmcgMCB3aGVuIG5vdAorICBleHBlY3RlZCBpbiBzdWJwcm9jZXNzLlBvcGVuLndhaXQoKS4KKworLSBJc3N1ZSAjMTY0MTE6IEZpeCBhIGJ1ZyB3aGVyZSB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG1pZ2h0IHRyeSB0byBhY2Nlc3MKKyAgcHJldmlvdXNseS1mcmVlZCBtZW1vcnkuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzU3OiBmaXggY2FsbGluZyBhY2NlcHQoKSBvbiBhIFNTTFNvY2tldCBjcmVhdGVkIHRocm91Z2gKKyAgU1NMQ29udGV4dC53cmFwX3NvY2tldCgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgSmVmZiBNY05laWwuCisKKy0gSXNzdWUgIzE2NDA5OiBUaGUgcmVwb3J0aG9vayBjYWxsYmFjayBtYWRlIGJ5IHRoZSBsZWdhY3kKKyAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUgQVBJIG5vdyBwcm9wZXJseSBzdXBwbGllcyBhIGNvbnN0YW50IG5vbi16ZXJvCisgIGJsb2NrX3NpemUgYXMgaXQgZGlkIGluIFB5dGhvbiAzLjIgYW5kIDIuNy4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YKKyAgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnJldHJpZXZlLgorCistIElzc3VlICMxNjQzMTogVXNlIHRoZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gY29uc3RydWN0aW5nIGEgRGVjaW1hbCBzdWJ0eXBlCisgIGZyb20gYSBEZWNpbWFsIGFyZ3VtZW50LgorCistIElzc3VlICMxNTY0MTogQ2xlYW4gdXAgZGVwcmVjYXRlZCBjbGFzc2VzIGZyb20gaW1wb3J0bGliCisgIFBhdGNoIGJ5IFRhcmFzIEx5YXB1bi4KKworLSBJc3N1ZSAjMTYzNTA6IHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoKSBub3cgYWNjdW11bGF0ZXMgZGF0YSBmcm9tCisgIHN1Y2Nlc3NpdmUgY2FsbHMgYWZ0ZXIgRU9GIGluIHVudXNlZF9kYXRhLCBpbnN0ZWFkIG9mIG9ubHkgc2F2aW5nIHRoZSBhcmd1bWVudAorICB0byB0aGUgbGFzdCBjYWxsLiBkZWNvbXByZXNzb2JqKCkuZmx1c2goKSBub3cgY29ycmVjdGx5IHNldHMgdW51c2VkX2RhdGEgYW5kCisgIHVuY29uc3VtZWRfdGFpbC4gQSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIE1lbW9yeUVycm9yIHdoZW4gc2V0dGluZyB0aGUKKyAgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZSBoYXMgYWxzbyBiZWVuIGZpeGVkLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMjc1OTogc3JlX3BhcnNlIG5vdyByYWlzZXMgYSBwcm9wZXIgZXJyb3Igd2hlbiB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAKKyAgaXMgbWlzc2luZy4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYxNTI6IGZpeCB0b2tlbml6ZSB0byBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBjb2RlIHdoZW4KKyAgbm8gbmV3bGluZSBpcyBmb3VuZC4gIFBhdGNoIGJ5IE5lZCBCYXRjaGVsZGVyLgorCistIElzc3VlICMxNjI4NDogUHJldmVudCBrZWVwaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gd29ya2VyIGZ1bmN0aW9ucworICBpbiBjb25jdXJyZW50LmZ1dHVyZXMgVGhyZWFkUG9vbEV4ZWN1dG9yLgorCistIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIHRoZSBsaXN0cyBjaGFuZ2VzCisgIHNpemUgd2hpbGUgaXRlcmF0ZWQgb24uICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjIyODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIHdoZXJlIGEgbGlzdCBjaGFuZ2VzIHNpemUKKyAgd2hpbGUgaXQgaXMgYmVpbmcgZW5jb2RlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzUxOiBOZXcgZnVuY3Rpb24gZ2MuZ2V0X3N0YXRzKCkgcmV0dXJucyBwZXItZ2VuZXJhdGlvbiBjb2xsZWN0aW9uCisgIHN0YXRpc3RpY3MuCisKKy0gSXNzdWUgIzE0ODk3OiBFbmhhbmNlIGVycm9yIG1lc3NhZ2VzIG9mIHN0cnVjdC5wYWNrIGFuZAorICBzdHJ1Y3QucGFja19pbnRvLiBQYXRjaCBieSBNYXR0aSBNw6RraS4KKworLSBJc3N1ZSAjMTYzMTY6IG1pbWV0eXBlcyBub3cgcmVjb2duaXplcyB0aGUgLnh6IGFuZCAudHh6ICgudGFyLnh6KSBleHRlbnNpb25zLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMjg5MDogY2dpdGIgbm8gbG9uZ2VyIHByaW50cyBzcHVyaW91cyA8cD4gdGFncyBpbiB0ZXh0CisgIG1vZGUgd2hlbiB0aGUgbG9nZGlyIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzE2MzA3OiBGaXggbXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwX2FzeW5jIG5vdCBjYWxsaW5nIGl0cyBjYWxsYmFja3MuCisgIFBhdGNoIGJ5IEphbm5lIEthcmlsYS4KKworLSBJc3N1ZSAjMTYzMDU6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvY2N1cnJpbmcgd2hlbiBpbnRlcnJ1cHRpbmcKKyAgbWF0aC5mYWN0b3JpYWwuCisKKy0gSXNzdWUgIzE2MTE2OiBGaXggaW5jbHVkZSBhbmQgbGlicmFyeSBwYXRocyB0byBiZSBjb3JyZWN0IHdoZW4gYnVpbGRpbmcgQworICBleHRlbnNpb25zIGluIHZlbnZzLgorCistIElzc3VlICMxNjI0NTogRml4IHRoZSB2YWx1ZSBvZiBhIGZldyBlbnRpdGllcyBpbiBodG1sLmVudGl0aWVzLmh0bWw1LgorCistIElzc3VlICMxNjMwMTogRml4IHRoZSBsb2NhbGhvc3QgdmVyaWZpY2F0aW9uIGluIHVybGxpYi9yZXF1ZXN0LnB5IGZvciBmaWxlOi8vCisgIHVybHMuCisKKy0gSXNzdWUgIzE2MjUwOiBGaXggdGhlIGludm9jYXRpb25zIG9mIFVSTEVycm9yIHdoaWNoIGhhZCBtaXNwbGFjZWQgZmlsZW5hbWUKKyAgYXR0cmlidXRlIGZvciBleGNlcHRpb24uCisKKy0gSXNzdWUgIzEwODM2OiBGaXggZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGZpbGUgbm90IGZvdW5kIGluIHVybHJldHJpZXZlCisgIEluaXRpYWwgcGF0Y2ggYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxNDM5ODogRml4IHNpemUgdHJ1bmNhdGlvbiBhbmQgb3ZlcmZsb3cgYnVncyBpbiB0aGUgYnoyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI2OTI6IEZpeCByZXNvdXJjZSBsZWFrIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdGFsa2luZyB0byBhbiBIVFRQCisgIHNlcnZlciB0aGF0IGRvZXMgbm90IGluY2x1ZGUgYSBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyIGluIGl0cyByZXNwb25zZXMuCisKKy0gSXNzdWUgIzEyMDM0OiBGaXggYm9ndXMgY2FjaGluZyBvZiByZXN1bHQgaW4gY2hlY2tfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLgorICBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGBsem1hLkxaTUFGaWxlYC4KKworLSBJc3N1ZSAjMTYyMjA6IHdzZ2lyZWYgbm93IGFsd2F5cyBjYWxscyBjbG9zZSgpIG9uIGFuIGl0ZXJhYmxlIHJlc3BvbnNlLgorICBQYXRjaCBieSBCcmVudCBUdWJicy4KKworLSBJc3N1ZSAjMTYyNzA6IHVybGxpYiBtYXkgaGFuZyB3aGVuIHVzZWQgZm9yIHJldHJpZXZpbmcgZmlsZXMgdmlhIEZUUCBieSB1c2luZworICBhIGNvbnRleHQgbWFuYWdlci4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgorCistIElzc3VlICMxNjQ2MTogV2F2ZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCA0R0Igd2F2IGZpbGVzLAorICBhbmQgc2FtcGxlIHJhdGUgb2YgNDQxMDAgSHouCisKKy0gSXNzdWUgIzE2MTc2OiBQcm9wZXJseSBpZGVudGlmeSBXaW5kb3dzIDggdmlhIHBsYXRmb3JtLnBsYXRmb3JtKCkKKworLSBJc3N1ZSAjMTYwODg6IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIncyBzZW5kX2Vycm9yIG1ldGhvZCBpbmNsdWRlcyBhCisgIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpbiBpdCdzIHJlc3BvbnNlIG5vdy4gUGF0Y2ggYnkgQW50b2luZSBQaXRyb3UuCisKKy0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgorICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCisgIGtleXdvcmQgYXJndW1lbnRzIHNwZWNpZmllZCBhIHBhdGggdGhhdCBkaWQgbm90IGV4aXN0LgorCistIElzc3VlICMxNjE2OTogRml4IGN0eXBlcy5XaW5FcnJvcigpJ3MgY29uZnVzaW9uIGJldHdlZW4gZXJybm8gYW5kIHdpbmVycm9yLgorCistIElzc3VlICMxNDkyNzA0OiBzaHV0aWwuY29weWZpbGUoKSByYWlzZXMgYSBkaXN0aW5jdCBTYW1lRmlsZUVycm9yIG5vdyBpZgorICBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTM4OTY6IE1ha2Ugc2hlbGYgaW5zdGFuY2VzIHdvcmsgd2l0aCAnd2l0aCcgYXMgY29udGV4dCBtYW5hZ2Vycy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTU0MTc6IEFkZCBzdXBwb3J0IGZvciBjc2ggYW5kIGZpc2ggaW4gdmVudiBhY3RpdmF0aW9uIHNjcmlwdHMuCisKKy0gSXNzdWUgIzE0Mzc3OiBFbGVtZW50VHJlZS53cml0ZSBhbmQgc29tZSBvZiB0aGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyBoYXZlCisgIGEgbmV3IHBhcmFtZXRlciAtICpzaG9ydF9lbXB0eV9lbGVtZW50cyouIEl0IGNvbnRyb2xzIGhvdyBlbGVtZW50cyB3aXRoIG5vCisgIGNvbnRlbnRzIGFyZSBlbWl0dGVkLgorCistIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKKyAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KKworLSBJc3N1ZSAjOTY1MDogTGlzdCBjb21tb25seSB1c2VkIGZvcm1hdCBjb2RlcyBpbiB0aW1lLnN0cmZ0aW1lIGFuZAorICB0aW1lLnN0cnB0aW1lIGRvY3N0dGluZ3MuICBPcmlnaW5hbCBwYXRjaCBieSBNaWtlIEhveS4KKworLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKKyAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYHB0eS5zcGF3bigpYCBub3cgcmV0dXJucyB0aGUgY2hpbGQgcHJvY2VzcyBzdGF0dXMgcmV0dXJuZWQgYnkgYG9zLndhaXRwaWQoKWAuCisKKy0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCisgIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAorICBvbi4KKworLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgorCistIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgorCistIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgorCistIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgorCistIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKKyAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCisgIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KKworLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAorICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCisKKy0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCisgIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgorCistIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCisgIE1jRG9ub3VnaC4KKworLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKKyAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0CisgIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCisgIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCisKKy0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KKyAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQorICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQorICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKKyAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAorICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKKyAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCisKKy0gSXNzdWUgIzE2MTEzOiBBZGRlZCBzaGEzIG1vZHVsZSBiYXNlZCBvbiB0aGUgS2VjY2FrIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICAzLjIuIFRoZSBgaGFzaGxpYmAgbW9kdWxlIGhhcyBmb3VyIGFkZGl0aW9uYWwgaGFzaCBhbGdvcml0aG1zOiBgc2hhM18yMjRgLAorICBgc2hhM18yNTZgLCBgc2hhM18zODRgIGFuZCBgc2hhM181MTJgLiBBcyBwYXJ0IG9mIHRoZSBwYXRjaCBzb21lIGNvbW1vbgorICBjb2RlIHdhcyBtb3ZlZCBmcm9tIF9oYXNob3BlbnNzbC5jIHRvIGhhc2hsaWIuaC4KKworLSBjdHlwZXMuY2FsbF9jb21tZXRob2Qgd2FzIHJlbW92ZWQsIHNpbmNlIGl0cyBvbmx5IHVzYWdlIHdhcyBpbiB0aGUgZGVmdW5jdAorICBzYW1wbGVzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTY2OTI6IEFkZGVkIFRMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydCBmb3IgdGhlIHNzbCBtb2R1bGVzLgorCistIElzc3VlICMxNjgzMjogYWRkIGFiYy5nZXRfY2FjaGVfdG9rZW4oKSB0byBleHBvc2UgY2FjaGUgdmFsaWRpdHkgY2hlY2tpbmcKKyAgc3VwcG9ydCBpbiBBQkNNZXRhLgogCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCiAtIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKICAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCiAgIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCkBAIC02MjksMzggKzI3MTUsNzMgQEAKIAogLSBJc3N1ZSAjMTQxNDY6IEhpZ2hsaWdodCBzb3VyY2UgbGluZSB3aGlsZSBkZWJ1Z2dpbmcgb24gV2luZG93cy4KIAorLSBJc3N1ZSAjMTc4Mzg6IEFsbG93IHN5cy5zdGRpbiB0byBiZSByZWFzc2lnbmVkLgorCistIElzc3VlICMxMzQ5NTogQXZvaWQgbG9hZGluZyB0aGUgY29sb3IgZGVsZWdhdG9yIHR3aWNlIGluIElETEUuCisKKy0gSXNzdWUgIzE3Nzk4OiBBbGxvdyBJRExFIHRvIGVkaXQgbmV3IGZpbGVzIHdoZW4gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTQ3MzU6IFVwZGF0ZSBJRExFIGRvY3MgdG8gb21pdCAiQ29udHJvbC16IG9uIFdpbmRvd3MiLgorCiAtIElzc3VlICMxNzUzMjogQWx3YXlzIGluY2x1ZGUgT3B0aW9ucyBtZW51IGZvciBJRExFIG9uIE9TIFguCiAgIFBhdGNoIGJ5IEd1aWxoZXJtZSBTaW3DtWVzLgogCistIElzc3VlICMxNzU4NTogRml4ZWQgSURMRSByZWdyZXNzaW9uLiBOb3cgY2xvc2VzIHdoZW4gdXNpbmcgZXhpdCgpIG9yIHF1aXQoKS4KKworLSBJc3N1ZSAjMTc2NTc6IFNob3cgZnVsbCBUayB2ZXJzaW9uIGluIElETEUncyBhYm91dCBkaWFsb2cuCisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNzYxMzogUHJldmVudCB0cmFjZWJhY2sgd2hlbiByZW1vdmluZyBzeW50YXggY29sb3JpemVyIGluIElETEUuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHBhdGNoIGZvciByaWdodC1jbGljayBtZW51IGluIElETEUuCisKKy0gSXNzdWUgIzE2ODg3OiBJRExFIG5vdyBhY2NlcHRzIENhbmNlbCBpbiB0YWJpZnkvdW50YWJpZnkgZGlhbG9nIGJveC4KKworLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgorCistIElzc3VlICMxNDI1NDogSURMRSBub3cgaGFuZGxlcyByZWFkbGluZSBjb3JyZWN0bHkgYWNyb3NzIHNoZWxsIHJlc3RhcnRzLgorCistIElzc3VlICMxNzYxNDogSURMRSBubyBsb25nZXIgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIHF1aWNrbHkgY2xvc2luZyBhIGZpbGUuCisKKy0gSXNzdWUgIzY2OTg6IElETEUgbm93IG9wZW5zIGp1c3QgYW4gZWRpdG9yIHdpbmRvdyB3aGVuIGNvbmZpZ3VyZWQgdG8gZG8gc28uCisKKy0gSXNzdWUgIzg5MDA6IFVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBJRExFIHRvIG9wZW4gYSBmaWxlIG5vIGxvbmdlcgorICByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM2NjQ5OiBGaXhlZCBtaXNzaW5nIGV4aXQgc3RhdHVzIGluIElETEUuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxNzExNDogSURMRSBub3cgdXNlcyBub24tc3RyaWN0IGNvbmZpZyBwYXJzZXIuCisKKy0gSXNzdWUgIzkyOTA6IEluIElETEUgdGhlIHN5cy5zdGQqIHN0cmVhbXMgbm93IGltcGxlbWVudCBpby5UZXh0SU9CYXNlCisgIGludGVyZmFjZSBhbmQgc3VwcG9ydCBhbGwgbWFuZGF0b3J5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCisKKy0gSXNzdWUgIzUwNjY6IFVwZGF0ZSBJRExFIGRvY3MuIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgorICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KKworLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgorCistIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KKworLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCisgIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudQorICBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTYxMjM6IElETEUgLSBkZXByZWNhdGUgcnVubmluZyB3aXRob3V0IGEgc3VicHJvY2Vzcy4KKyAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKIFRlc3RzCiAtLS0tLQogCi0tIElzc3VlICMxNDQwNzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfY29uY3VycmVudF9mdXR1cmVzLgotCi0tIElzc3VlICMxODkxOTogVW5pZmllZCBhbmQgZXh0ZW5kZWQgdGVzdHMgZm9yIGF1ZGlvIG1vZHVsZXM6IGFpZmMsIHN1bmF1IGFuZAotICB3YXZlLgotCi0tIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KLSAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQotICBXYXJlLgotCi0tIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KLQotLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAotICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQotICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAotICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgotCi0tIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcwotICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cwotICB2ZXJzaW9ucy4KLQogLSBJc3N1ZSAjMTY2NjMxODogQWRkIGEgdGVzdCB0aGF0IHNodXRpbC5jb3B5dHJlZSgpIHJldGFpbnMgZGlyZWN0b3J5CiAgIHBlcm1pc3Npb25zLiAgUGF0Y2ggYnkgQ2F0aGVyaW5lIERldmxpbi4KIAotLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCi0gIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KLQogLSBJc3N1ZSAjMTgyNzM6IG1vdmUgdGhlIHRlc3RzIGluIExpYi90ZXN0L2pzb25fdGVzdHMgdG8gTGliL3Rlc3QvdGVzdF9qc29uCiAgIGFuZCBtYWtlIHRoZW0gZGlzY292ZXJhYmxlIGJ5IHVuaXR0ZXN0LiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC02OTIsMjg1ICsyODEzLDEzIEBACiAKIC0gSXNzdWUgIzExMTg1OiBGaXggdGVzdF93YWl0NCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuIFNhYmzDqS4KIAotLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgotICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCistIElzc3VlICMxODIwNzogRml4IHRlc3Rfc3NsIGZvciBzb21lIHZlcnNpb25zIG9mIE9wZW5TU0wgdGhhdCBpZ25vcmUgc2Vjb25kcworICBpbiBBU04xX1RJTUUgZmllbGRzLgogCiAtIElzc3VlICMxODA5NDogdGVzdF91dWlkIG5vIG1vcmUgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KIAotLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxOTM5MjogRG9jdW1lbnQgdGhhdCBgaW1wLnJlbG9hZCgpYCBub3cgYWxzbyByZXF1aXJlcyBgX19sb2FkZXJfX2AgdG8KLSAgYmUgc2V0IG9uIHRoZSBtb2R1bGUgYmVpbmcgcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KLQotLSBJc3N1ZSAjMTg3NDM6IEZpeCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGFudCAiU3RyaW5nSU8iIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTg3ODM6IFJlbW92ZWQgZXhpc3RpbmcgbWVudGlvbnMgb2YgUHl0aG9uIGxvbmcgdHlwZSBpbiBkb2NzdHJpbmdzLAotICBlcnJvciBtZXNzYWdlcyBhbmQgY29tbWVudHMuCi0KLS0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KLSAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCi0KLS0gSXNzdWUgIzE3OTUzOiBNZW50aW9uIHRoYXQgeW91IHNob3VsZG4ndCByZXBsYWNlIHN5cy5tb2R1bGVzIGFuZCBkZWxldGluZyBrZXkKLSAgaXRlbXMgd2lsbCBjYXVzZSBQeXRob24gdG8gbm90IGJlIGhhcHB5LgotCi0tIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgotCi0tIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCi0KLS0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKLSAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQotICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KLQotLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4KLQotLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCi0KLS0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgotCi0tIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KLSAgVG9vbHMvZGVtby9zczEucHkuCi0KLS0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQotICBGw6l2cnkgVGhpYmF1bHQuCi0KLS0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgotCi0tIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCi0gIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCi0gIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KLQotLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgotCi0tIElzc3VlICMxNjA2NzogQWRkIGRlc2NyaXB0aW9uIGludG8gTVNJIGZpbGUgdG8gcmVwbGFjZSBpbnN0YWxsZXIncyB0ZW1wb3JhcnkgbmFtZS4KLQotLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5Ci0gIERhdmlkIEVkZWxzb2huLgotCi0tIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNTg0OiBQcm92aWRlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCi0gIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KLQotLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTUgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisKLSAgNjQtYml0LzMyLWJpdCBpbnN0YWxsZXIgZm9yIDEwLjYrLiAgSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeQotICB0byBpbnN0YWxsIGEgdGhpcmQtcGFydHkgdmVyc2lvbiBvZiBUY2wvVGsgOC41IHRvIHdvcmsgYXJvdW5kIHRoZQotICBwcm9ibGVtcyBpbiB0aGUgQXBwbGUtc3VwcGxpZWQgVGNsL1RrIDguNSBzaGlwcGVkIGluIE9TIFggMTAuNgotICBhbmQgbGF0ZXIgcmVsZWFzZXMuCi0KLS0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKLSAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYwotICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAotICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMy1NYXktMjAxMyoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MjM3OiBGaXggY3Jhc2ggaW4gdGhlIEFTQ0lJIGRlY29kZXIgb24gbTY4ay4KLQotLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCi0gIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgotCi0tIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKLSAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgotCi0tIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgotCi0tIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAotICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCi0KLS0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KLSAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgotICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KLQotLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQotICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCi0KLS0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KLSAgbWV0aG9kLgotCi0tIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQotICBjbGFzcy4KLQotLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KLQotLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjMTczNTc6IEFkZCBtaXNzaW5nIHZlcmJvc2l0eSBvdXRwdXQgd2hlbiB1c2luZyAtdi8tdnYuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc2MDY6IEZpeGVkIHN1cHBvcnQgb2YgZW5jb2RlZCBieXRlIHN0cmluZ3MgaW4gdGhlIFhNTEdlbmVyYXRvcgotICBjaGFyYWN0ZXJzKCkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBtZXRob2RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ViYXN0aWFuCi0gIE9ydGl6IFZhc3F1ZXouCi0KLS0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCi0gIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgotCi0tIElzc3VlICMxMTU5MDUxOiBCYWNrIG91dCBhIGZpeCBmb3IgaGFuZGxpbmcgY29ycnVwdGVkIGd6aXAgZmlsZXMgdGhhdAotICBicm9rZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotLSBJc3N1ZSAjMTY2MDE6IFJlc3RhcnRpbmcgaXRlcmF0aW9uIG92ZXIgdGFyZmlsZSBubyBtb3JlIGNvbnRpbnVlcyBmcm9tIHdoZXJlCi0gIGl0IGxlZnQgb2ZmLiAgUGF0Y2ggYnkgTWljaGFlbCBCaXJ0d2VsbC4KLQotLSBJc3N1ZSAjMTcyODk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHBsYXlzIG5pY2VyIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotICBvciBhcHBsaWNhdGlvbnMgY2hhbmdpbmcgdGhlIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgZ2xvYmFsCi0gIHZhcmlhYmxlLiAgSW5pdGlhbCBwYXRjaCBieSBCcmFkbGV5IEZyb2VobGUuCi0KLS0gSXNzdWUgIzEyMTgxOiBzZWxlY3QgbW9kdWxlOiBGaXggc3RydWN0IGtldmVudCBkZWZpbml0aW9uIG9uIE9wZW5CU0QgNjQtYml0Ci0gIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgRmVkZXJpY28gU2Nod2luZHQuCi0KLS0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKLSAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCi0KLS0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KLQotLSBJc3N1ZSAjMTU5MDI6IEZpeCBpbXAubG9hZF9tb2R1bGUoKSBhY2NlcHRpbmcgTm9uZSBhcyBhIGZpbGUgd2hlbiBsb2FkaW5nIGFuCi0gIGV4dGVuc2lvbiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5Ci0gIFRob21hcyBCYXJsb3cuCi0KLS0gSXNzdWUgIzE1NTM1OiBGaXggbmFtZWR0dXBsZSBwaWNrbGVzIHdoaWNoIHdlcmUgcGlja2luZyB1cCB0aGUgT3JkZXJlZERpY3QKLSAgaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmRlcmx5aW5nIHR1cGxlLgotCi0tIElzc3VlICMxNzE5MjogUmVzdG9yZSB0aGUgcGF0Y2ggZm9yIElzc3VlICMxMTcyOSB3aGljaCB3YXMgb21taXR0ZWQgaW4KLSAgMy4zLjEgd2hlbiB1cGRhdGluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIGxpYmZmaSB1c2VkIGJ5IGN0eXBlcy4gIFVwZGF0ZQotICBtYW55IGxpYmZmaSBmaWxlcyB0aGF0IHdlcmUgbWlzc2VkIGluIDMuMy4xJ3MgdXBkYXRlIHRvIGxpYmZmaS0zLjAuMTMuCi0KLS0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKLSAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE3MzUzOiBQbGlzdGxpYiBlbWl0dGVkIGVtcHR5IGRhdGEgdGFncyB3aXRoIGRlZXBseSBuZXN0ZWQgZGF0YXN0cnVjdHVyZXMKLQotLSBJc3N1ZSAjMTE3MTQ6IFVzZSAnd2l0aCcgc3RhdGVtZW50cyB0byBhc3N1cmUgYSBTZW1hcGhvcmUgcmVsZWFzZXMgYQotICBjb25kaXRpb24gdmFyaWFibGUuICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgUmFjaGVsLgotCi0tIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCi0gIFVuaXggZG9tYWluIHNvY2tldHMuCi0KLS0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yawotICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCi0KLS0gSXNzdWUgIzE3NzA3OiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2QgZG9lcyBub3QgYmxvY2sgZm9yIHNob3J0Ci0gIHRpbWVvdXRzLgotCi0tIElzdXNlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKLSAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCi0KLS0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbGJhY2tzIHRvIHRoZSBQQVRIIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIGlmIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgotCi0tIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0Ci0gIGludmFsaWQgZ3JvdXAgbmFtZXMuCi0KLS0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCi0gIFVOSVgpLgotCi0tIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycwotICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZwotICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKLSAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KLQotLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKLSAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KLQotLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgotICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KLQotLSBJc3N1ZSAjMTc2Nzg6IEZpeCBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhlIGh0dHAvY29va2llamFyLnB5IGJ5IGNoYW5naW5nIHRoZQotICB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgotCi0tIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgotCi0tIElzc3VlICMxNzUwMjogUHJvY2VzcyBERUZBVUxUIHZhbHVlcyBpbiBtb2NrIHNpZGVfZWZmZWN0IHRoYXQgcmV0dXJucyBpdGVyYXRvci4KLSAgUGF0Y2ggYnkgTWljaGFlbCBGb29yZC4KLQotLSBJc3N1ZSAjMTc1NzI6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIGJhZCBkaXJlY3RpdmVzIHRvCi0gIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgotCi0tIElzc3VlICMxNzQzNTogdGhyZWFkaW5nLlRpbWVyJ3MgX19pbml0X18gbWV0aG9kIG5vIGxvbmdlciB1c2VzIG11dGFibGUKLSAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBhcmdzIGFuZCBrd2FyZ3MgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjMTc1MjY6IGZpeCBhbiBJbmRleEVycm9yIHJhaXNlZCB3aGlsZSBwYXNzaW5nIGNvZGUgd2l0aG91dCBmaWxlbmFtZSB0bwotICBpbnNwZWN0LmZpbmRzb3VyY2UoKS4gIEluaXRpYWwgcGF0Y2ggYnkgVHlsZXIgRG95bGUuCi0KLS0gSXNzdWUgIzE2NTUwOiBVcGRhdGUgdGhlIG9wY29kZSBkZXNjcmlwdGlvbnMgb2YgcGlja2xldG9vbHMgdG8gdXNlIHVuc2lnbmVkCi0gIGludGVnZXJzIHdoZXJlIGFwcHJvcHJpYXRlLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgotCi0tIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KLQotLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCi0KLS0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgotCi0tIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgotCi0tIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KLQotLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgotCi0tIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgotCi0tIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKLSAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxNzk5MjogQWRkIHRpbWVvdXRzIHRvIGFzeW5jb3JlIGFuZCBhc3luY2hhdCB0ZXN0cyBzbyB0aGF0IHRoZXkgd29uJ3QKKyAgYWNjaWRlbnRhbGx5IGhhbmcuCiAKIC0gSXNzdWUgIzE3ODMzOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgc2VlbiBvbiBtYWNoaW5lcyB3aGVyZSBkZWJ1ZyBzeW1ib2xzCiAgIGZvciBnbGliYyBhcmUgYXZhaWxhYmxlIChzZWVuIG9uIFBQQzY0IExpbnV4KS4KQEAgLTk3OCw2ICsyODI3LDkgQEAKIC0gSXNzdWUgIzc4NTU6IEFkZCB0ZXN0cyBmb3IgY3R5cGVzL3dpbnJlZyBmb3IgaXNzdWVzIGZvdW5kIGluIElyb25QeXRob24uCiAgIEluaXRpYWwgcGF0Y2ggYnkgRGlubyBWaWVobGFuZC4KIAorLSBJc3N1ZSAjMTEwNzg6IHRlc3RfX19hbGxfXyBub3cgY2hlY2tzIGZvciBkdXBsaWNhdGVzIGluIF9fYWxsX18uCisgIEluaXRpYWwgcGF0Y2ggYnkgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNzcxMjogRml4IHRlc3RfZ2RiIGZhaWx1cmVzIG9uIFVidW50dSAxMy4wNC4KIAogLSBJc3N1ZSAjMTc4MzU6IEZpeCB0ZXN0X2lvIHdoZW4gdGhlIGRlZmF1bHQgT1MgcGlwZSBidWZmZXIgc2l6ZSBpcyBsYXJnZXIKQEAgLTk4OSw2ICsyODQxLDkgQEAKIC0gSXNzdWUgIzEyODIwOiBhZGQgdGVzdHMgZm9yIHRoZSB4bWwuZG9tLm1pbmljb21wYXQgbW9kdWxlLgogICBQYXRjaCBieSBKb2huIENoYW5kbGVyIGFuZCBQaGlsIENvbm5lbGwuCiAKKy0gSXNzdWUgIzE3NjkxOiB0ZXN0X3VuaXZuZXdsaW5lcyBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCiAtIElzc3VlICMxNzc5MDogdGVzdF9zZXQgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTAwNyw3MTUgKzI4NjIsNyBAQAogLSBJc3N1ZSAjMTc2OTI6IHRlc3Rfc3FsaXRlIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKLS0gSXNzdWUgIzE3ODQzOiBSZW1vdmVkIGJ6MiB0ZXN0IGRhdGEgZmlsZSB0aGF0IHdhcyB0cmlnZ2VyaW5nIGZhbHNlLXBvc2l0aXZlCi0gIHZpcnVzIHdhcm5pbmdzIHdpdGggY2VydGFpbiBhbnRpdmlydXMgc29mdHdhcmUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KLQotLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCi0gIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQwotICA0LjguCi0KLS0gSXNzdWUgIzE3OTYyOiBCdWlsZCB3aXRoIE9wZW5TU0wgMS4wLjFlIG9uIFdpbmRvd3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDctQXByLTIwMTMqCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNzU1MDogRml4IHRoZSAtLWVuYWJsZS1wcm9maWxpbmcgY29uZmlndXJlIHN3aXRjaC4KLQotSURMRQotLS0tLS0tLQotCi0tIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjEgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI0LU1hci0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KLQotLSBJc3N1ZSAjMTcyMjM6IEZpeCBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoKSBmb3Igc3RyaW5nIG9mIDEgY2hhcmFjdGVyIG91dHNpZGUKLSAgdGhlIHJhbmdlIFUrMDAwMC1VKzEwZmZmZi4KLQotLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGFyZ3MgYXNzaWdubWVudCB0bwotICBCYXNlRXhjZXB0aW9uLl9fbmV3X18gdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgotCi0tIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCi0gIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KLQotLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCi0gIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNTMwODogUmFpc2UgVmFsdWVFcnJvciB3aGVuIG1hcnNoYWxsaW5nIHRvbyBsYXJnZSBvYmplY3QgKGEgc2VxdWVuY2UKLSAgd2l0aCBzaXplID49IDIqKjMxKSwgaW5zdGVhZCBvZiBwcm9kdWNpbmcgaWxsZWdhbCBtYXJzaGFsIGRhdGEuCi0KLS0gSXNzdWUgIzEyOTgzOiBCeXRlcyBsaXRlcmFscyB3aXRoIGludmFsaWQgXHggZXNjYXBlIG5vdyByYWlzZSBhIFN5bnRheEVycm9yCi0gIGFuZCBhIGZ1bGwgdHJhY2ViYWNrIGluY2x1ZGluZyBsaW5lIG51bWJlci4KLQotLSBJc3N1ZSAjMTcxNzM6IFJlbW92ZSB1c2VzIG9mIGxvY2FsZS1kZXBlbmRlbnQgQyBmdW5jdGlvbnMgKGlzYWxwaGEoKSBldGMuKQotICBpbiB0aGUgaW50ZXJwcmV0ZXIuCi0KLS0gSXNzdWUgIzE3MTM3OiBXaGVuIGFuIFVuaWNvZGUgc3RyaW5nIGlzIHJlc2l6ZWQsIHRoZSBpbnRlcm5hbCB3aWRlIGNoYXJhY3RlcgotICBzdHJpbmcgKHdzdHIpIGZvcm1hdCBpcyBub3cgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTcwNDM6IFRoZSB1bmljb2RlLWludGVybmFsIGRlY29kZXIgbm8gbG9uZ2VyIHJlYWQgcGFzdCB0aGUgZW5kIG9mCi0gIGlucHV0IGJ1ZmZlci4KLQotLSBJc3N1ZSAjMTcwOTg6IEFsbCBtb2R1bGVzIG5vdyBoYXZlIF9fbG9hZGVyX18gc2V0IGV2ZW4gaWYgdGhleSBwcmUtZXhpc3QgdGhlCi0gIGJvb3RzdHJhcHBpbmcgb2YgaW1wb3J0bGliLgotCi0tIElzc3VlICMxNjk3OTogRml4IGVycm9yIGhhbmRsaW5nIGJ1Z3MgaW4gdGhlIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscwotICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KLQotLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQotICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKLSAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgotCi0tIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgotICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcwotICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKLSAgRGF2aWQgUHJpdGNoYXJkLgotCi0tIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCi0gIGNsZWFyZWQuCi0KLS0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQotICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KLQotLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCi0gIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KLQotLSBJc3N1ZSAjMTY0NTU6IE9uIEZyZWVCU0QgYW5kIFNvbGFyaXMsIGlmIHRoZSBsb2NhbGUgaXMgQywgdGhlCi0gIEFTQ0lJL3N1cnJvZ2F0ZWVzY2FwZSBjb2RlYyBpcyBub3cgdXNlZCwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLCB0bwotICBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIFRoaXMgY2hhbmdlIGZpeGVzIGluY29uc2lzdGVuY2llcyB3aXRoCi0gIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZXMgYW4KLSAgQVNDSUkgbG9jYWxlIGVuY29kaW5nLCB3aGVyZWFzIHRoZSBJU08tODg1OS0xIGVuY29kaW5nIGlzIHVzZWQgaW4gcHJhY3RpY2UuCi0KLS0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgotCi0tIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5Ci0gIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQotICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KLQotLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZwotICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KLQotLSBJc3N1ZSAjMTY1OTc6IEluIGJ1ZmZlcmVkIGFuZCB0ZXh0IElPLCBjYWxsIGNsb3NlKCkgb24gdGhlIHVuZGVybHlpbmcgc3RyZWFtCi0gIGlmIGludm9raW5nIGZsdXNoKCkgZmFpbHMuCi0KLS0gSXNzdWUgIzE2NzIyOiBJbiB0aGUgYnl0ZXMoKSBjb25zdHJ1Y3RvciwgdHJ5IHRvIGNhbGwgX19ieXRlc19fIG9uIHRoZQotICBhcmd1bWVudCBiZWZvcmUgX19pbmRleF9fLgotCi0tIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgotICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKLSAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCi0KLS0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCi0gIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCi0gICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCi0gIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQotICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KLQotLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCi0KLS0gSXNzdWUgIzE2NTQ2OiBGaXg6IGFzdC5ZaWVsZEZyb20gYXJndW1lbnQgaXMgbm93IG1hbmRhdG9yeS4KLQotLSBJc3N1ZSAjMTY1MTQ6IEZpeCByZWdyZXNzaW9uIGNhdXNpbmcgYSB0cmFjZWJhY2sgd2hlbiBzeXMucGF0aFswXSBpcyBOb25lCi0gIChhY3R1YWxseSwgYW55IG5vbi1zdHJpbmcgb3Igbm9uLWJ5dGVzIHR5cGUpLgotCi0tIElzc3VlICMxNjMwNjogRml4IG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdW5rbm93biBjb21tYW5kIGxpbmUKLSAgcGFyYW1ldGVycyB3aGVyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgSGlldSBOZ3V5ZW4uCi0KLS0gSXNzdWUgIzE2MjE1OiBGaXggcG90ZW50aWFsIGRvdWJsZSBtZW1vcnkgZnJlZSBpbiBzdHIucmVwbGFjZSgpLiAgUGF0Y2gKLSAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgotCi0tIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0Ci0gIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCi0gIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKLSAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAotICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCi0KLS0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKLSAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KLQotLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQotICBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKLSAgcmFpc2VzIGFuIGVycm9yLgotCi0tIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bwotICBkZWxldGUgaXQgb24gYW55IHR5cGUuCi0KLS0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKLSAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgotCi0tIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCi0gIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCi0KLS0gSXNzdWUgIzYwNzQ6IEVuc3VyZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZXMgY2FuIGFsd2F5cyBiZSB1cGRhdGVkIGJ5IHRoZQotICB1c2VyIHRoYXQgY3JlYXRlZCB0aGVtLCBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlIGlzIHJlYWQtb25seS4KLQotLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCi0gIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCi0KLS0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgotCi0tIElzc3VlICMxNTM3OTogRml4IHBhc3Npbmcgb2Ygbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIGludGVnZXJzIGZvciB0aGUgY2hhcm1hcAotICBkZWNvZGVyIChhbHJlYWR5IHdvcmtpbmcgYXMgdW5pY29kZSBzdHJpbmdzKS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1MTQ0OiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGhhbmRsaW5nIHBvaW50ZXJzIGFzIGludGVnZXIKLSAgdmFsdWVzLCBieSB1c2luZyBgUHlfdWludHB0cl90YCBpbnN0ZWFkIG9mIGBzaXplX3RgLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU5NjU6IEV4cGxpY2l0bHkgY2FzdCBgQVRfRkRDV0RgIGFzIChpbnQpLiAgUmVxdWlyZWQgb24gU29sYXJpcyAxMAotICAod2hpY2ggZGVmaW5lcyBgQVRfRkRDV0RgIGFzIGBgMHhmZmQxOTU1M2BgKSwgaGFybWxlc3Mgb24gb3RoZXIgcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNTgzOTogQ29udmVydCBTeXN0ZW1FcnJvcnMgaW4gYHN1cGVyKClgIHRvIFJ1bnRpbWVFcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCi0gIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgotCi0tIElzc3VlICMxNTgwMTogTWFrZSBzdXJlIG1hcHBpbmdzIHBhc3NlZCB0byAnJScgZm9ybWF0dGluZyBhcmUgYWN0dWFsbHkKLSAgc3Vic2NyaXB0YWJsZS4KLQotLSBJc3N1ZSAjMTUxMTE6IF9faW1wb3J0X18gc2hvdWxkIGxldCBJbXBvcnRFcnJvciBwcm9wYWdhdGUgd2hlbiBhIG1vZHVsZSB0aGF0Ci0gIGlzIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdXNpbmcgZnJvbWxpc3QgdHJpZXMgdG8gaW1wb3J0IGEgbW9kdWxlCi0gIHRoYXQgY2Fubm90IGJlIGZvdW5kLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQwOiBBZGRlZCBzdHlsZSB0byBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiBieSBkaWN0LgotCi0tIElzc3VlICMxNzUzNjogQWRkIHRvIHdlYmJyb3dzZXIncyBicm93c2VyIGxpc3Q6IHd3dy1icm93c2VyLCB4LXd3dy1icm93c2VyLAotICBpY2V3ZWFzZWwsIGljZWFwZS4KLQotLSBJc3N1ZSAjMTc0ODg6IENoYW5nZSB0aGUgc3VicHJvY2Vzcy5Qb3BlbiBidWZzaXplIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlCi0gIGZyb20gdW5idWZmZXJlZCAoMCkgdG8gYnVmZmVyaW5nICgtMSkgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGV4aXN0aW5nIGNvZGUKLSAgZXhwZWN0cyBhbmQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBpbiBQeXRob24gMiB0byBhdm9pZAotICBpbnRyb2R1Y2luZyBoYXJkIHRvIHRyYWNrIGRvd24gYnVncy4KLQotLSBJc3N1ZSAjMTc1MjE6IENvcnJlY3RlZCBub24tZW5hYmxpbmcgb2YgbG9nZ2VyIGZvbGxvd2luZyB0d28gY2FsbHMgdG8KLSAgZmlsZUNvbmZpZygpLgotCi0tIElzc3VlICMxNzUwODogQ29ycmVjdGVkIE1lbW9yeUhhbmRsZXIgY29uZmlndXJhdGlvbiBpbiBkaWN0Q29uZmlnKCkgd2hlcmUKLSAgdGhlIHRhcmdldCBoYW5kbGVyIHdhc24ndCBjb25maWd1cmVkIGZpcnN0LgotCi0tIElzc3VlICMxNzIwOTogY3Vyc2VzLndpbmRvdy5nZXRfd2NoKCkgbm93IGhhbmRsZXMgY29ycmVjdGx5IEtleWJvYXJkSW50ZXJydXB0Ci0gIChDVFJMK2MpLgotCi0tIElzc3VlICM1NzEzOiBzbXRwbGliIG5vdyBoYW5kbGVzIDQyMSAoY2xvc2luZyBjb25uZWN0aW9uKSBlcnJvciBjb2RlcyB3aGVuCi0gIHNlbmRpbmcgbWFpbCBieSBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIHJlcG9ydGluZyB0aGUgNDIxIGVycm9yIGNvZGUgdmlhIHRoZQotICBleGNlcHRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGNvbW1hbmQgdGhhdCByZWNlaXZlZCB0aGUgZXJyb3IgcmVzcG9uc2UuCi0KLS0gSXNzdWUgIzE3MTkyOiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMC4xMy4gIFRoaXMKLSAgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHN0YWNrIG1pc2FsaWdubWVudCBpc3N1ZSBvbiB4ODYgYW5kIGlzc3VlcyBvbgotICBzb21lIG1vcmUgcmVjZW50IHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjODg2MjogRml4ZWQgY3Vyc2VzIGNsZWFudXAgd2hlbiBnZXRrZXkgaXMgaW50ZXJycHV0ZWQgYnkgYSBzaWduYWwuCi0KLS0gSXNzdWUgIzE3NDQzOiBpbWFwbGliLklNQVA0X3N0cmVhbSB3YXMgdXNpbmcgdGhlIGRlZmF1bHQgdW5idWZmZXJlZCBJTwotICBpbiBzdWJwcm9jZXNzLCBidXQgdGhlIGltYXAgY29kZSBhc3N1bWVzIGJ1ZmZlcmVkIElPLiAgSW4gUHl0aG9uMiB0aGlzCi0gIHdvcmtlZCBieSBhY2NpZGVudC4gIElNQVA0X3N0cmVhbSBub3cgZXhwbGljaXRseSB1c2VzIGJ1ZmZlcmVkIElPLgotCi0tIElzc3VlICMxNzQ3NjogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHVuZG9jdW1lbnRlZCBweWRvYwotICAnYWxsbWV0aG9kcyc7IGl0IHdhcyBtaXNzaW5nIHVuYm91bmQgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCi0KLS0gSXNzdWUgIzE2ODgwOiBEbyBub3QgYXNzdW1lIF9pbXAubG9hZF9keW5hbWljKCkgaXMgZGVmaW5lZCBpbiB0aGUgaW1wIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTYzODk6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24gMy4xIGluIHRoZQotICBjYWNoaW5nIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE3NDMxOiBGaXggbWlzc2luZyBpbXBvcnQgb2YgQnl0ZXNGZWVkUGFyc2VyIGluIGVtYWlsLnBhcnNlci4KLQotLSBJc3N1ZSAjMTI4NTA4NjogR2V0IHJpZCBvZiB0aGUgcmVmY291bnRpbmcgaGFjayBhbmQgc3BlZWQgdXAKLSAgdXJsbGliLnBhcnNlLnVucXVvdGUoKSBhbmQgdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMoKS4KLQotLSBJc3N1ZSAjMTczNjg6IEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBQeXRob24gSlNPTiBkZWNvZGVyIHRoYXQgY2F1c2VkCi0gIGEgZmFpbHVyZSB3aGlsZSBkZWNvZGluZyBlbXB0eSBvYmplY3QgbGl0ZXJhbHMgd2hlbiBvYmplY3RfcGFpcnNfaG9vayB3YXMKLSAgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNDY0NTogVGhlIGVtYWlsIGdlbmVyYXRvciBjbGFzc2VzIG5vdyBwcm9kdWNlIG91dHB1dCB1c2luZyB0aGUKLSAgc3BlY2lmaWVkIGxpbmVzZXAgdGhyb3VnaG91dC4gIFByZXZpb3VzbHkgaWYgdGhlIHByb2xvZywgZXBpbG9nLCBvcgotICBib2R5IHdlcmUgc3RvcmVkIHdpdGggYSBkaWZmZXJlbnQgbGluZXNlcCwgdGhhdCBsaW5lc2VwIHdhcyB1c2VkLiAgVGhpcwotICBmaXggY29ycmVjdHMgYW4gUkZDIG5vbi1jb21wbGlhbmNlIGlzc3VlIHdpdGggc210cGxpYi5zZW5kX21lc3NhZ2UuCi0KLS0gSXNzdWUgIzE3Mjc4OiBGaXggYSBjcmFzaCBpbiBoZWFwcS5oZWFwcHVzaCgpIGFuZCBoZWFwcS5oZWFwcG9wKCkgd2hlbgotICB0aGUgbGlzdCBpcyBiZWluZyByZXNpemVkIGNvbmN1cnJlbnRseS4KLQotLSBJc3N1ZSAjMTY5NjI6IFVzZSBnZXRkZW50czY0IGluc3RlYWQgb2YgdGhlIG9ic29sZXRlIGdldGRlbnRzIHN5c2NhbGwKLSAgaW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG9uIExpbnV4LgotCi0tIElzc3VlICMxNzAxODogTWFrZSBQcm9jZXNzLmpvaW4oKSByZXRyeSBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUi4KLQotLSBJc3N1ZSAjMTcyMjM6IGFycmF5IG1vZHVsZTogRml4IGEgY3Jhc2hlciB3aGVuIGNvbnZlcnRpbmcgYW4gYXJyYXkgY29udGFpbmluZwotICBpbnZhbGlkIGNoYXJhY3RlcnMgKG91dHNpZGUgcmFuZ2UgW1UrMDAwMDsgVSsxMGZmZmZdKSB0byBVbmljb2RlOgotICByZXByKGFycmF5KSwgc3RyKGFycmF5KSBhbmQgYXJyYXkudG91bmljb2RlKCkuIFBhdGNoIHdyaXR0ZW4gYnkgTWFudWVsIEphY29iLgotCi0tIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgotICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KLQotLSBJc3N1ZSAjMTcyMjU6IEpTT04gZGVjb2RlciBub3cgY291bnRzIGNvbHVtbnMgaW4gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcKLSAgd2l0aCAxLCBhcyBpbiBvdGhlciBsaW5lcy4KLQotLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KLSAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KLSAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCi0KLS0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCi0gIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KLSAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgotICA2NC1iaXQpLgotCi0tIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKLSAgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgotCi0tIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCi0gIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCi0KLS0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgotICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KLQotLSBJc3N1ZSAjMTcwNTI6IHVuaXR0ZXN0IGRpc2NvdmVyeSBzaG91bGQgdXNlIHNlbGYudGVzdExvYWRlci4KLQotLSBJc3N1ZSAjNDU5MTogVWlkIGFuZCBnaWQgdmFsdWVzIGxhcmdlciB0aGFuIDIqKjMxIGFyZSBzdXBwb3J0ZWQgbm93LgotCi0tIElzc3VlICMxNzE0MTogcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgpIG5vIG1vcmUgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KLQotLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgotICBbMCwgMiptYXRoLnBpXS4KLQotLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KLQotLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCi0gIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV9ub29wIHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxMDM1NTogSW4gU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2xhc3MgbW9kZSwgbmFtZSwgZW5jb2RpbmcgYW5kCi0gIG5ld2xpbmVzIHByb3BlcnRpZXMgbm93IHdvcmsgZm9yIHVucm9sbGVkIGZpbGVzLiAgT2Jzb2xldGVkIGFuZCBuZXZlcgotICB3b3JraW5nIG9uIFB5dGhvbiAzIHhyZWFkbGluZSBtZXRob2Qgbm93IHJlbW92ZWQuCi0KLS0gSXNzdWUgIzE2Njg2OiBGaXhlZCBhIGxvdCBvZiBidWdzIGluIGF1ZGlvb3AgbW9kdWxlLiAgRml4ZWQgY3Jhc2hlcyBpbgotICBhdmdwcCgpLCBtYXhwcCgpIGFuZCByYXRlY3YoKS4gIEZpeGVkIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYWRkKCksIGJpYXMoKSwKLSAgYW5kIHJhdGVjdigpLiAgcmV2ZXJzZSgpLCBsaW4ybGluKCkgYW5kIHJhdGVjdigpIG5vIG1vcmUgbG9zZSBwcmVjaXNpb24gZm9yCi0gIDMyLWJpdCBzYW1wbGVzLiAgbWF4KCkgYW5kIHJtcygpIG5vIG1vcmUgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBhbmQKLSAgdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggMzItYml0IHNhbXBsZSAtMHg4MDAwMDAwMC4KLQotLSBJc3N1ZSAjMTcwNzM6IEZpeCBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGluIHNxbGl0ZTMgbW9kdWxlLgotCi0tIElzc3VlICMxNjcyMzogaHR0cGxpYi5IVFRQUmVzcG9uc2Ugbm8gbG9uZ2VyIG1hcmtlZCBjbG9zZWQgd2hlbiB0aGUgY29ubmVjdGlvbgotICBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KLQotLSBJc3N1ZSAjMTY5NDg6IEZpeCBxdW90ZWQgcHJpbnRhYmxlIGJvZHkgZW5jb2RpbmcgZm9yIG5vbi1sYXRpbjEgY2hhcmFjdGVyCi0gIHNldHMgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCi0KLS0gSXNzdWUgIzE2ODExOiBGaXggZm9sZGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWUgaW4gdGhlIHByb3Zpc2lvbmFsIGVtYWlsCi0gIHBvbGljaWVzLgotCi0tIElzc3VlICMxNzEzMjogVXBkYXRlIHN5bWJvbCBmb3IgInlpZWxkIGZyb20iIGdyYW1tYXIgY2hhbmdlcy4KLQotLSBJc3N1ZSAjMTcwNzY6IE1ha2UgY29weWluZyBvZiB4YXR0cnMgbW9yZSBwZXJtaXNzaXZlIG9mIG1pc3NpbmcgRlMgc3VwcG9ydC4KLSAgUGF0Y2ggYnkgVGhvbWFzIFdvdXRlcnMuCi0KLS0gSXNzdWUgIzE3MDg5OiBFeHBhdCBwYXJzZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCBub3Qgb25seSB3aGVuCi0gIGFuIGludGVybmFsIFhNTCBlbmNvZGluZyBpcyBVVEYtOCBvciBVUy1BU0NJSS4gIEl0IG5vdyBhY2NlcHRzIGJ5dGVzIGFuZAotICBzdHJpbmdzIGxhcmdlciB0aGFuIDIgR2lCLgotCi0tIElzc3VlICM2MDgzOiBGaXggbXVsdGlwbGUgc2VnbWVudGF0aW9uIGZhdWx0cyBvY2N1cmVkIHdoZW4gUHlBcmdfUGFyc2VUdXBsZQotICBwYXJzZXMgbmVzdGVkIG11dGF0aW5nIHNlcXVlbmNlLgotCi0tIElzc3VlICM1Mjg5OiBGaXggY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IG9uIFNvbGFyaXMuCi0KLS0gSXNzdWUgIzE3MTA2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgaW4gaW8uVGV4dElPV3JhcHBlciB3aGVuIGFuIHVuZGVybHlpbmcKLSAgc3RyZWFtIG9yIGEgZGVjb2RlciBwcm9kdWNlcyBkYXRhIG9mIGFuIHVuZXhwZWN0ZWQgdHlwZSAoaS5lLiB3aGVuCi0gIGlvLlRleHRJT1dyYXBwZXIgaW5pdGlhbGl6ZWQgd2l0aCB0ZXh0IHN0cmVhbSBvciB1c2UgYnl0ZXMtdG8tYnl0ZXMgY29kZWMpLgotCi0tIElzc3VlICMxNTYzMzogaHR0cGxpYi5IVFRQUmVzcG9uc2UgaXMgbm93IG1hcmsgY2xvc2VkIHdoZW4gdGhlIHNlcnZlcgotICBzZW5kcyBsZXNzIHRoYW4gdGhlIGFkdmVydGlzZWQgQ29udGVudC1MZW5ndGguCi0KLS0gSXNzdWUgIzEyMjY4OiBUaGUgaW8gbW9kdWxlIGZpbGUgb2JqZWN0IHdyaXRlIG1ldGhvZHMgbm8gbG9uZ2VyIGFib3J0IGVhcmx5Ci0gIHdoZW4gb25lIG9mIGl0cyB3cml0ZSBzeXN0ZW0gY2FsbHMgaXMgaW50ZXJydXB0ZWQgKEVJTlRSKS4KLQotLSBJc3N1ZSAjNjk3MjogVGhlIHppcGZpbGUgbW9kdWxlIG5vIGxvbmdlciBvdmVyd3JpdGVzIGZpbGVzIG91dHNpZGUgb2YKLSAgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2hlbiBleHRyYWN0aW5nIG1hbGljaW91cyB6aXAgZmlsZXMuCi0KLS0gSXNzdWUgIzQ4NDQ6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBGaWxlIHdoZW4gb3BlbnMgYSBaSVAgZmlsZSB3aXRoIGFuCi0gIGluY29tcGxldGUgIkVuZCBvZiBDZW50cmFsIERpcmVjdG9yeSIgcmVjb3JkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lCi0gIFBvbG8gYW5kIEFsYW4gTWNJbnR5cmUuCi0KLS0gSXNzdWUgIzE3MDcxOiBTaWduYXR1cmUuYmluZCgpIG5vdyB3b3JrcyB3aGVuIG9uZSBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMKLSAgaXMgbmFtZWQgYGBzZWxmYGAuCi0KLS0gSXNzdWUgIzEyMDA0OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gUHlaaXBGaWxlIHdoZW4gd3JpdGluZyBhbiBpbnZhbGlkCi0gIFB5dGhvbiBmaWxlLiAgUGF0Y2ggYnkgQmVuIE1vcmdhbi4KLQotLSBJc3N1ZSAjMTYwMjEzMzogb24gTWFjIE9TIFggYSBzaGFyZWQgbGlicmFyeSBidWlsZCAoYGAtLWVuYWJsZS1zaGFyZWRgYCkKLSAgbm93IGZpbGxzIHRoZSBgYG9zLmVudmlyb25gYCB2YXJpYWJsZSBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzE1NTA1OiBgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJgIG5vIGxvbmdlciBhc3N1bWVzIFNJR0lOVCBoYW5kbGVyIGlzCi0gIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdC4KLQotLSBJc3N1ZSAjMTM0NTQ6IEZpeCBhIGNyYXNoIHdoZW4gZGVsZXRpbmcgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBpdGVydG9vbHMudGVlKCkKLSAgaWYgYWxsIG90aGVyIGl0ZXJhdG9ycyB3ZXJlIHZlcnkgYWR2YW5jZWQgYmVmb3JlLgotCi0tIElzc3VlICMxMjQxMTogRml4IHRvIGNnaS5wYXJzZV9tdWx0aXBhcnQgdG8gY29ycmVjdGx5IHVzZSBieXRlcyBib3VuZGFyaWVzCi0gIGFuZCBieXRlcyBkYXRhLiBQYXRjaCBieSBKb25hcyBXYWduZXIuCi0KLS0gSXNzdWUgIzE2OTU3OiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgc2VhcmNoZXMgYSBiYXJlIGZpbGUgbmFtZSBpbiB0aGUKLSAgY3VycmVudCBkaXJlY3Rvcnkgb24gVW5peCBhbmQgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgcmVsYXRpdmUgZmlsZSBwYXRoIHdpdGgKLSAgYSBkaXJlY3RvcnkgcGFydCBpbiBQQVRIIGRpcmVjdG9yaWVzLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCi0KLS0gSXNzdWUgIzE2OTkzOiBzaHV0aWwud2hpY2goKSBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mIHRoZSBwYXRoIGFuZCBleHRlbnNpb24KLSAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTY5OTI6IE9uIFdpbmRvd3MgaW4gc2lnbmFsLnNldF93YWtldXBfZmQsIHZhbGlkYXRlIHRoZSBmaWxlCi0gIGRlc2NyaXB0b3IgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2NDIyOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBQeXRob24gdmVyc2lvbiwgdGhlIEMgdmVyc2lvbiBvZgotICBkZWNpbWFsIG5vdyB1c2VzIHN0cmluZ3MgaW5zdGVhZCBvZiBpbnRlZ2VycyBmb3Igcm91bmRpbmcgbW9kZSBjb25zdGFudHMuCi0KLS0gSXNzdWUgIzE1ODYxOiB0a2ludGVyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBsaXN0cyBhbmQgdHVwbGVzIGNvbnRhaW5pbmcKLSAgc3RyaW5ncyB3aXRoIHdoaXRlc3BhY2VzLCBiYWNrc2xhc2hlcyBvciB1bmJhbGFuY2VkIGJyYWNlcy4KLQotLSBJc3N1ZSAjMTA1Mjc6IFVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBmb3IgbXVsdGlwcm9jZXNzaW5nIHBpcGVzLgotCi0tIElzc3VlICM5NzIwOiB6aXBmaWxlIG5vdyB3cml0ZXMgY29ycmVjdCBsb2NhbCBoZWFkZXJzIGZvciBmaWxlcyBsYXJnZXIgdGhhbgotICA0IEdpQi4KLQotLSBJc3N1ZSAjMTY5NTU6IEZpeCB0aGUgcG9sbCgpIG1ldGhvZCBmb3IgbXVsdGlwcm9jZXNzaW5nJ3Mgc29ja2V0Ci0gIGNvbm5lY3Rpb25zIG9uIFdpbmRvd3MuCi0KLS0gU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG5vdyBwcm9wZXJseSBjbG9zZXMgdGhlIGlucHV0IGZpbGUuCi0KLS0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KLQotLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCi0gIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCi0gIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0Ci0gIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KLQotLSBJc3N1ZSAjMTU5NzI6IEZpeCBlcnJvciBtZXNzYWdlcyB3aGVuIG9zIGZ1bmN0aW9ucyBleHBlY3RpbmcgYSBmaWxlIG5hbWUgb3IKLSAgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgdGhlIGluY29ycmVjdCB0eXBlLgotCi0tIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKLSAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KLQotLSBJc3N1ZSAjMTY1NDE6IHRrX3NldFBhbGV0dGUoKSBub3cgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYHBhcnNlci5wb3BpdGVtKClgIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvci4KLSAgVGhpcyBtYWtlcyBgcGFyc2VyLmNsZWFuKClgIHdvcmsgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnc2VjdGlvbiddID0ge31gYCBub3cgcHJlc2VydmVzCi0gIHNlY3Rpb24gb3JkZXIgd2l0aGluIHRoZSBwYXJzZXIuIFRoaXMgbWFrZXMgYHBhcnNlci51cGRhdGUoKWAgcHJlc2VydmUgc2VjdGlvbgotICBvcmRlciBhcyB3ZWxsLgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnREVGQVVMVCddID0ge31gYCBub3cgY29ycmVjdGx5Ci0gIGNsZWFycyBwcmV2aW91cyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0IHNlY3Rpb24uIFNhbWUgZ29lcyBmb3IKLSAgYGBwYXJzZXIudXBkYXRlKHsnREVGQVVMVCc6IHt9fSlgYC4KLQotLSBJc3N1ZSAjOTU4NjogUmVkZWZpbmUgU0VNX0ZBSUxFRCBvbiBNYWNPU1ggdG8ga2VlcCBjb21waWxlciBoYXBweS4KLQotLSBJc3N1ZSAjMTA1Mjc6IG1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBpZiBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzE2Njg4OiBOb3cgcmVnZXhlcyBjb250YWluZWQgYmFja3JlZmVyZW5jZXMgY29ycmVjdGx5IHdvcmsgd2l0aAotICBub24tQVNDSUkgc3RyaW5ncy4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTY0ODU6IE5vdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaWYgZmlsZSBoZWFkZXIgcGF0Y2hpbmcgZmFpbGVkCi0gIG9uIGNsb3NpbmcgYW4gYWlmYyBmaWxlLgotCi0tIElzc3VlICMxNjE2NTogc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG5vIGxvbmdlciBibG9ja3MgYSBzY2hlZHVsZXIgZm9yIG90aGVyCi0gIHRocmVhZHMuCi0KLS0gSXNzdWUgIzE2NjQxOiBEZWZhdWx0IHZhbHVlcyBvZiBzY2hlZC5zY2hlZHVsZXIuZW50ZXIoKSBhcmUgbm8gbG9uZ2VyCi0gIG1vZGlmaWFibGUuCi0KLS0gSXNzdWUgIzE2NjE4OiBNYWtlIGdsb2IuZ2xvYiBtYXRjaCBjb25zaXN0ZW50bHkgYWNyb3NzIHN0cmluZ3MgYW5kIGJ5dGVzCi0gIHJlZ2FyZGluZyBsZWFkaW5nIGRvdHMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQotICBwYXRoLgotCi0tIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCi0gIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgotCi0tIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KLQotLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgotICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKLQotLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQotICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93Ci0gIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKLSAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCi0KLS0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KLSAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCi0gIFJ1bmRzdGVpbi4KLQotLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQotICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgotICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKLSAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCi0KLS0gSXNzdWUgIzE2NjI4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBjdHlwZXMucmVzaXplKCkuCi0KLS0gSXNzdWUgIzEzNjE0OiBGaXggc2V0dXAucHkgcmVnaXN0ZXIgZmFpbHVyZSB3aXRoIGludmFsaWQgcnN0IGluIGRlc2NyaXB0aW9uLgotICBQYXRjaCBieSBKdWxpZW4gQ291cnRlYXUgYW5kIFBpZXJyZSBQYXVsIExlZmVidnJlLgotCi0tIElzc3VlICMxMzUxMjogQ3JlYXRlIH4vLnB5cGlyYyBzZWN1cmVseSAoQ1ZFLTIwMTEtNDk0NCkuICBJbml0aWFsIHBhdGNoIGJ5Ci0gIFBoaWxpcCBKZW52ZXksIHRlc3RlZCBieSBNYWdlaWEgYW5kIERlYmlhbi4KLQotLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKLSAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCi0KLS0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KLSAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgotCi0tIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKLSAgUEVQIDM4My4KLQotLSBJc3N1ZSAjMTAxODI6IFRoZSByZSBtb2R1bGUgZG9lc24ndCB0cnVuY2F0ZSBpbmRpY2VzIHRvIDMyIGJpdHMgYW55bW9yZS4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKLSAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKLSAgcGFzc2VkIGVudW1lcmF0ZSgpLgotCi0tIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAotICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCi0gIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDgxOiBtdWx0aXByb2Nlc3Npbmcgbm8gbG9uZ2VyIGxlYWtzIHByb2Nlc3MgaGFuZGxlcyBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNjE0MDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBkb3VibGUgY2xvc2VzIGl0cyBjaGlsZAotICBzdWJwcm9jZXNzLlBJUEUgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgb24gY2hpbGQgZXJyb3IgcHJpb3IgdG8gZXhlYygpLgotCi0tIFJlbW92ZSBhIGJhcmUgcHJpbnQgdG8gc3Rkb3V0IGZyb20gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIHRoYXQgY291bGQgaGF2ZQotICBoYXBwZW5lZCBpZiB0aGUgY2hpbGQgcHJvY2VzcyB3cm90ZSBnYXJiYWdlIHRvIGl0cyBwcmUtZXhlYyBlcnJvciBwaXBlLgotCi0tIElzc3VlICMxNjMyNzogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzCi0gIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZXMgdG8gdGhlIGNoaWxkIHdoZW4gZm9yaygpIGZhaWxzLgotCi0tIElzc3VlICMxNDM5NjogSGFuZGxlIHRoZSBvZGQgcmFyZSBjYXNlIG9mIHdhaXRwaWQgcmV0dXJuaW5nIDAgd2hlbiBub3QKLSAgZXhwZWN0ZWQgaW4gc3VicHJvY2Vzcy5Qb3Blbi53YWl0KCkuCi0KLS0gSXNzdWUgIzE2NDExOiBGaXggYSBidWcgd2hlcmUgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goKSBtaWdodCB0cnkgdG8gYWNjZXNzCi0gIHByZXZpb3VzbHktZnJlZWQgbWVtb3J5LiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjM1NzogZml4IGNhbGxpbmcgYWNjZXB0KCkgb24gYSBTU0xTb2NrZXQgY3JlYXRlZCB0aHJvdWdoCi0gIFNTTENvbnRleHQud3JhcF9zb2NrZXQoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEplZmYgTWNOZWlsLgotCi0tIElzc3VlICMxNjQwOTogVGhlIHJlcG9ydGhvb2sgY2FsbGJhY2sgbWFkZSBieSB0aGUgbGVnYWN5Ci0gIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlIEFQSSBub3cgcHJvcGVybHkgc3VwcGxpZXMgYSBjb25zdGFudCBub24temVybwotICBibG9ja19zaXplIGFzIGl0IGRpZCBpbiBQeXRob24gMy4yIGFuZCAyLjcuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCi0gIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZS4KLQotLSBJc3N1ZSAjMTY0MzE6IFVzZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIERlY2ltYWwgc3VidHlwZQotICBmcm9tIGEgRGVjaW1hbCBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTYzNTA6IHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoKSBub3cgYWNjdW11bGF0ZXMgZGF0YSBmcm9tCi0gIHN1Y2Nlc3NpdmUgY2FsbHMgYWZ0ZXIgRU9GIGluIHVudXNlZF9kYXRhLCBpbnN0ZWFkIG9mIG9ubHkgc2F2aW5nIHRoZSBhcmd1bWVudAotICB0byB0aGUgbGFzdCBjYWxsLiBkZWNvbXByZXNzb2JqKCkuZmx1c2goKSBub3cgY29ycmVjdGx5IHNldHMgdW51c2VkX2RhdGEgYW5kCi0gIHVuY29uc3VtZWRfdGFpbC4gQSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIE1lbW9yeUVycm9yIHdoZW4gc2V0dGluZyB0aGUKLSAgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZSBoYXMgYWxzbyBiZWVuIGZpeGVkLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjc1OTogc3JlX3BhcnNlIG5vdyByYWlzZXMgYSBwcm9wZXIgZXJyb3Igd2hlbiB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAKLSAgaXMgbWlzc2luZy4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYxNTI6IGZpeCB0b2tlbml6ZSB0byBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBjb2RlIHdoZW4KLSAgbm8gbmV3bGluZSBpcyBmb3VuZC4gIFBhdGNoIGJ5IE5lZCBCYXRjaGVsZGVyLgotCi0tIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIHRoZSBsaXN0cyBjaGFuZ2VzCi0gIHNpemUgd2hpbGUgaXRlcmF0ZWQgb24uICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjIyODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIHdoZXJlIGEgbGlzdCBjaGFuZ2VzIHNpemUKLSAgd2hpbGUgaXQgaXMgYmVpbmcgZW5jb2RlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE0ODk3OiBFbmhhbmNlIGVycm9yIG1lc3NhZ2VzIG9mIHN0cnVjdC5wYWNrIGFuZAotICBzdHJ1Y3QucGFja19pbnRvLiBQYXRjaCBieSBNYXR0aSBNw6RraS4KLQotLSBJc3N1ZSAjMTI4OTA6IGNnaXRiIG5vIGxvbmdlciBwcmludHMgc3B1cmlvdXMgPHA+IHRhZ3MgaW4gdGV4dAotICBtb2RlIHdoZW4gdGhlIGxvZ2RpciBvcHRpb24gaXMgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNjMwNzogRml4IG11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luYyBub3QgY2FsbGluZyBpdHMgY2FsbGJhY2tzLgotICBQYXRjaCBieSBKYW5uZSBLYXJpbGEuCi0KLS0gSXNzdWUgIzE2MjUwOiBGaXggVVJMRXJyb3IgaW52b2NhdGlvbiB3aXRoIHByb3BlciBhcmdzLgotCi0tIElzc3VlICMxNjExNjogRml4IGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMgdG8gYmUgY29ycmVjdCB3aGVuIGJ1aWxkaW5nIEMKLSAgZXh0ZW5zaW9ucyBpbiB2ZW52cy4KLQotLSBJc3N1ZSAjMTYyNDU6IEZpeCB0aGUgdmFsdWUgb2YgYSBmZXcgZW50aXRpZXMgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KLQotLSBJc3N1ZSAjMTQzOTg6IEZpeCBzaXplIHRydW5jYXRpb24gYW5kIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIGJ6MiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2MjIwOiB3c2dpcmVmIG5vdyBhbHdheXMgY2FsbHMgY2xvc2UoKSBvbiBhbiBpdGVyYWJsZSByZXNwb25zZS4KLSAgUGF0Y2ggYnkgQnJlbnQgVHViYnMuCi0KLS0gSXNzdWUgIzE2MjcwOiB1cmxsaWIgbWF5IGhhbmcgd2hlbiB1c2VkIGZvciByZXRyaWV2aW5nIGZpbGVzIHZpYSBGVFAgYnkgdXNpbmcKLSAgYSBjb250ZXh0IG1hbmFnZXIuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KLQotLSBJc3N1ZSAjMTY0NjE6IFdhdmUgbGlicmFyeSBzaG91bGQgYmUgYWJsZSB0byBkZWFsIHdpdGggNEdCIHdhdiBmaWxlcywKLSAgYW5kIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6LgotCi0tIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCi0KLS0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgotICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCi0gIGtleXdvcmQgYXJndW1lbnRzIHNwZWNpZmllZCBhIHBhdGggdGhhdCBkaWQgbm90IGV4aXN0LgotCi0tIElzc3VlICMxNjE2OTogRml4IGN0eXBlcy5XaW5FcnJvcigpJ3MgY29uZnVzaW9uIGJldHdlZW4gZXJybm8gYW5kIHdpbmVycm9yLgotCi0tIElzc3VlICMxNjA3NjogTWFkZSBfZWxlbWVudHRyZWUuRWxlbWVudCBwaWNrbGVhYmxlIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZQotICB3aXRoIHRoZSBQeXRob24gRWxlbWVudC4gUGlja2xpbmcvdW5waWNrbGluZyBvZiB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudAotICB3b3JrcyBhZ2FpbiAtIHRoaXMgd2FzIGEgdGVtcG9yYXJ5IHJlZ3Jlc3Npb24gZnJvbSAzLjIgd2hlcmUgdGhlIGJ5LWRlZmF1bHQKLSAgaW1wb3J0ZWQgX2VsZW1lbnR0cmVlIGhhZCBubyBwaWNrbGluZyBjYXBhYmlsaXR5LgotCi0tIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKLSAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KLQotLSBJc3N1ZSAjMTY5MTM6IEZpeCBFbGVtZW50Lml0ZXJ0ZXh0KCkncyBoYW5kbGluZyBvZiB0ZXh0IHdpdGggWE1MIGVudGl0aWVzLiwKLQotLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKLSAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTEyOiBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUgZG9lcyBub3QgY29ycmVjdGx5IGVzY2FwZSBhcmd1bWVudCB0bwotICAvdXNyL2Jpbi9maWxlLiAgUGF0Y2ggYnkgRGF2aWQgQmVuamFtaW4uCi0KLS0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCi0gIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAotICBvbi4KLQotLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgotCi0tIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgotCi0tIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgotCi0tIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgotCi0tIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKLSAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KLQotLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAotICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCi0KLS0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCi0gIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCi0KLS0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCi0gIE1jRG9ub3VnaC4KLQotLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKLSAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0Ci0gIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCi0KLS0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCi0gIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCi0KLS0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KLSAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KLQotLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQotICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gIEJlZm9yZSwgdGhlIHR5cGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB0d2ljZSBpbiB0aGUKLSAgY2FzZSB3aGVyZSB0aGUgZGVmYXVsdCB3YXMgc3BlY2lmaWVkIGFuZCB0aGUgYXJndW1lbnQgd2FzIGdpdmVuIGFzIHdlbGwuICBUaGlzCi0gIHdhcyBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGZvciB0aGUgRmlsZVR5cGUgdHlwZSwgYXMgYSBkZWZhdWx0IGZpbGUgd291bGQKLSAgYWx3YXlzIGJlIG9wZW5lZCwgZXZlbiBpZiBhIGZpbGUgYXJndW1lbnQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotCi0tIElzc3VlICMxNTkwNjogRml4IGEgcmVncmVzc2lvbiBpbiBgYXJncGFyc2VgIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKLSAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTcxMTQ6IElETEUgbm93IHVzZXMgbm9uLXN0cmljdCBjb25maWcgcGFyc2VyLgotCi0tIElzc3VlICM5MjkwOiBJbiBJRExFIHRoZSBzeXMuc3RkKiBzdHJlYW1zIG5vdyBpbXBsZW1lbnQgaW8uVGV4dElPQmFzZQotICBpbnRlcmZhY2UgYW5kIHN1cHBvcnQgYWxsIG1hbmRhdG9yeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgotCi0tIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgotICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KLQotLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgotCi0tIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KLQotLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5Ci0gIFJvZ2VyIFNlcnd5LgotCi0tIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCi0gIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudQotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxMTk5NTogdGVzdF9weWRvYyBkb2Vzbid0IGltcG9ydCBhbGwgc3lzLnBhdGggbW9kdWxlcyBhbnltb3JlLgogCiAtIElzc3VlICMxNzQ0ODogdGVzdF9zYXggbm93IHNraXBzIGlmIHRoZXJlIGFyZSBubyB4bWwgcGFyc2VycyBhdmFpbGFibGUKICAgaW5zdGVhZCBvZiByYWlzaW5nIGFuIEltcG9ydEVycm9yLgpAQCAtMTczNCw4ICsyODgxLDE1IEBACiAKIC0gSXNzdWUgIzEzODk4OiB0ZXN0X3NzbCBubyBsb25nZXIgcHJpbnRzIGEgc3B1cmlvdXMgc3RhY2sgdHJhY2Ugb24gVWJ1bnR1LgogCistIElzc3VlICMxNzI4MzogU2hhcmUgY29kZSBiZXR3ZWVuIGBfX21haW5fXy5weWAgYW5kIGByZWdydGVzdC5weWAgaW4KKyAgYExpYi90ZXN0YC4KKwogLSBJc3N1ZSAjMTcyNDk6IGNvbnZlcnQgYSB0ZXN0IGluIHRlc3RfY2FwaSB0byB1c2UgdW5pdHRlc3QgYW5kIHJlYXAgdGhyZWFkcy4KIAorLSBJc3N1ZSAjMTcxMDc6IFRlc3QgY2xpZW50LXNpZGUgU05JIHN1cHBvcnQgaW4gdXJsbGliLnJlcXVlc3QgdGhhbmtzIHRvCisgIHRoZSBuZXcgc2VydmVyLXNpZGUgU05JIHN1cHBvcnQgaW4gdGhlIHNzbCBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5CisgIERhbmllbCBCbGFjay4KKwogLSBJc3N1ZSAjMTcwNDE6IEZpeCB0ZXN0aW5nIHdoZW4gUHl0aG9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUKICAgLS13aXRob3V0LWRvYy1zdHJpbmdzLgogCkBAIC0xNzQzLDYgKzI4OTcsOCBAQAogCiAtIElzc3VlICMxNTUzOTogQWRkZWQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5LgogCistIElzc3VlICMxNjgzNjogRW5hYmxlIElQdjYgc3VwcG9ydCBldmVuIGlmIElQdjYgaXMgZGlzYWJsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisKIC0gSXNzdWUgIzE3NDc5OiB0ZXN0X2lvIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTE4MDIsNiArMjk1OCwxMSBAQAogCiAtIElzc3VlICMxNjc0ODogdGVzdF9oZWFwcSBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KIAorLSBJc3N1ZSAjMTA2NDY6IFRlc3RzIHJlYXJyYW5nZWQgZm9yIG9zLnNhbWVmaWxlL3NhbWVzdGF0IHRvIGNoZWNrIGZvciBub3QKKyAganVzdCBzeW1saW5rcyBidXQgYWxzbyBoYXJkIGxpbmtzLgorCistIElzc3VlICMxNTMwMjogU3dpdGNoIHJlZ3J0ZXN0IGZyb20gdXNpbmcgZ2V0b3B0IHRvIHVzaW5nIGFyZ3BhcnNlLgorCiAtIElzc3VlICMxNTMyNDogRml4IHJlZ3J0ZXN0IHBhcnNpbmcgb2YgLS1mcm9tZmlsZSwgLS1tYXRjaCwgYW5kIC0tcmFuZG9taXplCiAgIG9wdGlvbnMuCiAKQEAgLTE4MTEsNiArMjk3Miw5IEBACiAtIElzc3VlICMxNjY2NDogQWRkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGdsb2IncyBiZWhhdmlvdXIgY29uY2VybmluZyBlbnRyaWVzCiAgIHN0YXJ0aW5nIHdpdGggYSAiLiIuICBQYXRjaCBieSBTZWJhc3RpYW4gS3JlZnQuCiAKKy0gSXNzdWUgIzEzMzkwOiBUaGUgYGAtUmBgIG9wdGlvbiB0byByZWdydGVzdCBub3cgYWxzbyBjaGVja3MgZm9yIG1lbW9yeQorICBhbGxvY2F0aW9uIGxlYWtzLCB1c2luZyA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYC4KKwogLSBJc3N1ZSAjMTY1NTk6IEFkZCBtb3JlIHRlc3RzIGZvciB0aGUganNvbiBtb2R1bGUsIGluY2x1ZGluZyBzb21lIGZyb20gdGhlCiAgIG9mZmljaWFsIHRlc3Qgc3VpdGUgYXQganNvbi5vcmcuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCkBAIC0xODI5LDcgKzI5OTMsNyBAQAogLSBJc3N1ZSAjMTU4MDI6IEZpeCB0ZXN0IGxvZ2ljIGluIGBUZXN0TWFpbGRpci50ZXN0X2NyZWF0ZV90bXAoKWAuIFBhdGNoIGJ5CiAgIFNlcmhpeSBTdG9yY2hha2EuCiAKLS0gSXNzdWUgIzE1NTU3OiBBZGQgYSB0ZXN0IHN1aXRlIGZvciB0aGUgYHdlYmJyb3dzZXJgIG1vZHVsZSwgdGhhbmtzIHRvIEFudG9uCistIElzc3VlICMxNTU1NzogQWRkZWQgYSB0ZXN0IHN1aXRlIGZvciB0aGUgd2ViYnJvd3NlciBtb2R1bGUsIHRoYW5rcyB0byBBbnRvbgogICBCYXJrb3Zza3kuCiAKIC0gSXNzdWUgIzE2Njk4OiBTa2lwIHBvc2l4IHRlc3RfZ2V0Z3JvdXBzIHdoZW4gYnVpbHQgd2l0aCBPUyBYCkBAIC0xODM4LDYgKzMwMDIsMzAgQEAKIEJ1aWxkCiAtLS0tLQogCistIElzc3VlICMxNjA2NzogQWRkIGRlc2NyaXB0aW9uIGludG8gTVNJIGZpbGUgdG8gcmVwbGFjZSBpbnN0YWxsZXIncworICB0ZW1wb3JhcnkgbmFtZS4KKworLSBJc3N1ZSAjMTgyNTc6IEZpeCByZWFkbGluayB1c2FnZSBpbiBweXRob24tY29uZmlnLiAgSW5zdGFsbCB0aGUgcHl0aG9uCisgIHZlcnNpb24gYWdhaW4gb24gRGFyd2luLgorCistIElzc3VlICMxODQ4MTogQWRkIEMgY292ZXJhZ2UgcmVwb3J0aW5nIHdpdGggZ2NvdiBhbmQgbGNvdi4gQSBuZXcgbWFrZSB0YXJnZXQKKyAgImNvdmVyYWdlLXJlcG9ydCIgY3JlYXRlcyBhbiBpbnN0cnVtZW50ZWQgUHl0aG9uIGJ1aWxkLCBydW5zIHVuaXQgdGVzdHMKKyAgYW5kIGNyZWF0ZXMgYSBIVE1MLiBUaGUgcmVwb3J0IGNhbiBiZSB1cGRhdGVkIHdpdGggIm1ha2UgY292ZXJhZ2UtbGNvdiIuCisKKy0gSXNzdWUgIzE3ODQ1OiBDbGFyaWZpZWQgdGhlIG1lc3NhZ2UgcHJpbnRlZCB3aGVuIHNvbWUgbW9kdWxlIGFyZSBub3QgYnVpbHQuCisKKy0gSXNzdWUgIzE4MjU2OiBDb21waWxhdGlvbiBmaXggZm9yIHJlY2VudCBBSVggcmVsZWFzZXMuICBQYXRjaCBieQorICBEYXZpZCBFZGVsc29obi4KKworLSBJc3N1ZSAjMTc1NDc6IEluIGNvbmZpZ3VyZSwgZXhwbGljaXRseSBwYXNzIC1XZm9ybWF0IGZvciB0aGUgYmVuZWZpdCBmb3IgR0NDCisgIDQuOC4KKworLSBJc3N1ZSAjMTUxNzI6IERvY3VtZW50IE5BU00gMi4xMCsgYXMgcmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIE9wZW5TU0wgMS4wLjEKKyAgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTc1OTE6IFVzZSBsb3dlcmNhc2UgZmlsZW5hbWVzIHdoZW4gaW5jbHVkaW5nIFdpbmRvd3MgaGVhZGVyIGZpbGVzLgorICBQYXRjaCBieSBSb3VtZW4gUGV0cm92LgorCiAtIElzc3VlICMxNzU1MDogRml4IHRoZSAtLWVuYWJsZS1wcm9maWxpbmcgY29uZmlndXJlIHN3aXRjaC4KIAogLSBJc3N1ZSAjMTc0MjU6IEJ1aWxkIHdpdGggb3BlbnNzbCAxLjAuMWQgb24gV2luZG93cy4KQEAgLTE4NTMsNiArMzA0MSwxMCBAQAogCiAtIElzc3VlICMzNzE4OiBVc2UgQUNfQVJHX1ZBUiB0byBzZXQgTUFDSERFUCBpbiBjb25maWd1cmUuYWMuCiAKKy0gSXNzdWUgIzE2MjM1OiBJbXBsZW1lbnQgcHl0aG9uLWNvbmZpZyBhcyBhIHNoZWxsIHNjcmlwdC4KKworLSBJc3N1ZSAjMTY3Njk6IFJlbW92ZSBvdXRkYXRlZCBWaXN1YWwgU3R1ZGlvIHByb2plY3RzLgorCiAtIElzc3VlICMxNzAzMTogRml4IHJ1bm5pbmcgcmVnZW4gaW4gY3Jvc3MgYnVpbGRzLgogCiAtIElzc3VlICMzNzU0OiBmaXggdHlwbyBpbiBwdGhyZWFkIEFDX0NBQ0hFX1ZBTC4KQEAgLTE4NjAsMTIgKzMwNTIsMTQgQEAKIC0gSXNzdWUgIzE1NDg0OiBGaXggX1BZVEhPTl9QUk9KRUNUX0JBU0UgZm9yIHNyY2RpciAhPSBidWlsZGRpciBidWlsZHM7CiAgIHVzZSBfUFlUSE9OX1BST0pFQ1RfQkFTRSBpbiBkaXN0dXRpbHMvc3lzY29uZmlnLnB5LgogCistIERyb3Agc3VwcG9ydCBmb3IgV2luZG93cyAyMDAwLgorCiAtIElzc3VlICMxNzAyOTogTGV0IGgycHkgc2VhcmNoIHRoZSBtdWx0aWFyY2ggc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgogCiAtIElzc3VlICMxNjk1MzogRml4IHNvY2tldCBtb2R1bGUgY29tcGlsYXRpb24gb24gcGxhdGZvcm1zIHdpdGgKICAgSEFWRV9CUk9LRU5fUE9MTC4gUGF0Y2ggYnkgSmVmZnJleSBBcm1zdHJvbmcuCiAKLS0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKy0gSXNzdWUgIzE2MzIwOiBSZW1vdmUgcmVkdW5kYW50IE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb3Igc3RyaW5ncyBhbmQgYnl0ZXMuCiAKIC0gQ3Jvc3MgY29tcGlsaW5nIG5lZWRzIGhvc3QgYW5kIGJ1aWxkIHNldHRpbmdzLiBjb25maWd1cmUgbm8gbG9uZ2VyCiAgIGNyZWF0ZXMgYSBicm9rZW4gUFlUSE9OX0ZPUl9CVUlMRCB2YXJpYWJsZSB3aGVuIC0tYnVpbGQgaXMgbWlzc2luZy4KQEAgLTE4ODcsNiArMzA4MSw4IEBACiAtIElzc3VlICMxNTkyMzogRml4IGEgbWlzdGFrZSBpbiBgYGFzZGxfYy5weWBgIHRoYXQgcmVzdWx0ZWQgaW4gYSBUeXBlRXJyb3IKICAgYWZ0ZXIgMjgwMWJmODc1YTI0IChzZWUgIzE1ODAxKS4KIAorLSBJc3N1ZSAjMTYxMzU6IFJlbW92ZSBPUy8yIHN1cHBvcnQuCisKIC0gSXNzdWUgIzE1ODE5OiBNYWtlIHN1cmUgd2UgY2FuIGJ1aWxkIFB5dGhvbiBvdXQtb2YtdHJlZSBmcm9tIGEgcmVhZC1vbmx5CiAgIHNvdXJjZSBkaXJlY3RvcnkuICAoU29tZXdoYXQgcmVsYXRlZCB0byBpc3N1ZSAjOTg2MC4pCiAKQEAgLTE4OTksMTEgKzMwOTUsNTQgQEAKIEMtQVBJCiAtLS0tLQogCistIElzc3VlICMxODM1MTogRml4IHZhcmlvdXMgaXNzdWVzIGluIGEgZnVuY3Rpb24gaW4gaW1wb3J0bGliIHByb3ZpZGVkIHRvIGhlbHAKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgKGFuZCB0aHVzIGJ5IGV4dGVuc2lvbgorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSgpIGFuZCBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KCkpLgorCistIElzc3VlICM5MzY5OiBUaGUgdHlwZXMgb2YgYGNoYXIqYCBhcmd1bWVudHMgb2YgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKCkgYW5kCisgIFB5T2JqZWN0X0NhbGxNZXRob2QoKSBub3cgY2hhbmdlZCB0byBgY29uc3QgY2hhcipgLiAgQmFzZWQgb24gcGF0Y2hlcyBieQorICBKw7ZyZyBNw7xsbGVyIGFuZCBMYXJzIEJ1aXRpbmNrLgorCistIElzc3VlICMxNzIwNjogUHlfQ0xFQVIoKSwgUHlfREVDUkVGKCksIFB5X1hJTkNSRUYoKSBhbmQgUHlfWERFQ1JFRigpIG5vdworICBleHBhbmQgdGhlaXIgYXJndW1lbnRzIG9uY2UgaW5zdGVhZCBvZiBtdWx0aXBsZSB0aW1lcy4gIFBhdGNoIHdyaXR0ZW4gYnkgSWxsaWEKKyAgUG9sb3N1a2hpbi4KKworLSBJc3N1ZSAjMTc1MjI6IEFkZCB0aGUgUHlHSUxTdGF0ZV9DaGVjaygpIEFQSS4KKworLSBJc3N1ZSAjMTczMjc6IEFkZCBQeURpY3RfU2V0RGVmYXVsdC4KKwogLSBJc3N1ZSAjMTY4ODE6IEZpeCBQeV9BUlJBWV9MRU5HVEggbWFjcm8gZm9yIEdDQyA8IDMuMS4KIAorLSBJc3N1ZSAjMTY1MDU6IFJlbW92ZSB1bnVzZWQgUHlfVFBGTEFHU19JTlRfU1VCQ0xBU1MuCisKKy0gSXNzdWUgIzE2MDg2OiBQeVR5cGVPYmplY3QudHBfZmxhZ3MgYW5kIFB5VHlwZV9TcGVjLmZsYWdzIGFyZSBub3cgdW5zaWduZWQKKyAgKHVuc2lnbmVkIGxvbmcgYW5kIHVuc2lnbmVkIGludCkgdG8gYXZvaWQgYW4gdW5kZWZpbmVkIGJlaGF2aW91ciB3aXRoCisgIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAoKDEgPDwgMzEpLiBQeVR5cGVfR2V0RmxhZ3MoKSByZXN1bHQgdHlwZSBpcworICBub3cgdW5zaWduZWQgdG9vICh1bnNpZ25lZCBsb25nLCBpbnN0ZWFkIG9mIGxvbmcpLgorCistIElzc3VlICMxNjE2NjogQWRkIFBZX0xJVFRMRV9FTkRJQU4gYW5kIFBZX0JJR19FTkRJQU4gbWFjcm9zIGFuZCB1bmlmaWVkCisgIGVuZGlhbm5lc3MgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZy4KKwogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCistIElzc3VlICMxNzcwMTogSW1wcm92aW5nIHN0cmZ0aW1lIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE4NDQwOiBDbGFyaWZ5IHRoYXQgYGhhc2goKWAgY2FuIHRydW5jYXRlIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuCisgIG9iamVjdCdzIGN1c3RvbSBgX19oYXNoX18oKWAgbWV0aG9kLgorCistIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgorCistIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCisKKy0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKKyAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgorCistIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKKyAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgorCistIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgorCiAtIElzc3VlIDE3NTM4OiBEb2N1bWVudCBYTUwgdnVsbmVyYWJpbHRpZXMKIAogLSBJc3N1ZSAjMTY2NDI6IHNjaGVkLnNjaGVkdWxlciB0aW1lZnVuYyBpbml0aWFsIGRlZmF1bHQgaXMgdGltZS5tb25vdG9uaWMuCkBAIC0xOTQ4LDggKzMxODcsOCBAQAogCiAtIElzc3VlICMxMzUzODogSW1wcm92ZSBzdHIoKSBhbmQgb2JqZWN0Ll9fc3RyX18oKSBkb2N1bWVudGF0aW9uLgogCi0tIElzc3VlICMxNjQ4OTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgcmVxdWlyZXMgYW55IGFuZAotICBhbGwgcGFja2FnZXMgdG8gYmUgc2VwYXJhdGVseSBpbXBvcnRlZC4KKy0gSXNzdWUgIzE2NDg5OiBNYWtlIGl0IGNsZWFyZXIgdGhhdCBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSBuZWVkcyBwYXJlbnQKKyAgcGFja2FnZXMgdG8gYmUgZXhwbGljaXRseSBpbXBvcnRlZC4KIAogLSBJc3N1ZSAjMTY0MDA6IFVwZGF0ZSB0aGUgZGVzY3JpcHRpb24gb2Ygd2hpY2ggdmVyc2lvbnMgb2YgYSBnaXZlbiBwYWNrYWdlCiAgIFB5UEkgZGlzcGxheXMuCkBAIC0xOTcyLDYgKzMyMTEsOSBAQAogLSBJc3N1ZSAjMTYxMTU6IEltcHJvdmUgc3VicHJvY2Vzcy5Qb3BlbigpIGRvY3VtZW50YXRpb24gYXJvdW5kIGFyZ3MsIHNoZWxsLAogICBhbmQgZXhlY3V0YWJsZSBhcmd1bWVudHMuCiAKKy0gSXNzdWUgIzEzNDk4OiBDbGFyaWZ5IGRvY3Mgb2Ygb3MubWFrZWRpcnMoKSdzIGV4aXN0X29rIGFyZ3VtZW50LiAgRG9uZSB3aXRoCisgIGdyZWF0IG5hdGl2ZS1zcGVha2VyIGhlbHAgZnJvbSBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE1NTMzOiBDbGFyaWZ5IGRvY3MgYW5kIGFkZCB0ZXN0cyBmb3IgYHN1YnByb2Nlc3MuUG9wZW4oKWAncyBjd2QKICAgYXJndW1lbnQuCiAKQEAgLTE5OTIsNiArMzIzNCwyNyBAQAogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzE4ODE3OiBGaXggYSByZXNvdXJjZSB3YXJuaW5nIGluIExpYi9haWZjLnB5IGRlbW8uICBQYXRjaCBieQorICBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzE4NDM5OiBNYWtlIHBhdGNoY2hlY2sgd29yayBvbiBXaW5kb3dzIGZvciBBQ0tTLCBORVdTLgorCistIElzc3VlICMxODQ0ODogRml4IGEgdHlwbyBpbiBUb29scy9kZW1vL2VpZmZlbC5weS4KKworLSBJc3N1ZSAjMTg0NTc6IEZpeGVkIHNhdmluZyBvZiBmb3JtdWxhcyBhbmQgY29tcGxleCBudW1iZXJzIGluCisgIFRvb2xzL2RlbW8vc3MxLnB5LgorCistIElzc3VlICMxODQ0OTogTWFrZSBUb29scy9kZW1vL3NzMS5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLiAgUGF0Y2ggYnkKKyAgRsOpdnJ5IFRoaWJhdWx0LgorCistIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCisgIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxNTIzOTogTWFrZSBta3N0cmluZ3ByZXAucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4KKworLSBJc3N1ZSAjMTcwMjg6IEFsbG93ZWQgUHl0aG9uIGFyZ3VtZW50cyB0byBiZSBzdXBwbGllZCB0byB0aGUgV2luZG93cworICBsYXVuY2hlci4KKwogLSBJc3N1ZSAjMTcxNTY6IHB5Z2V0dGV4dC5weSBub3cgdXNlcyBhbiBlbmNvZGluZyBvZiBzb3VyY2UgZmlsZSBhbmQgY29ycmVjdGx5CiAgIHdyaXRlcyBhbmQgZXNjYXBlcyBub24tYXNjaWkgY2hhcmFjdGVycy4KIApAQCAtMjAwMCw5ICszMjYzLDE4IEBACiAgIGltcHJvcGVyIGluZGVudGF0aW9uLiAgcGluZGVudC5weSBub3cgd29ya3Mgd2l0aCBjb250aW51ZWQgbGluZXMgYnJva2VuIGFmdGVyCiAgICJjbGFzcyIgb3IgImRlZiIga2V5d29yZHMgYW5kIHdpdGggY29udGludWF0aW9ucyBhdCB0aGUgc3RhcnQgb2YgbGluZS4KIAotLSBJc3N1ZSAjMTUzNzg6IEZpeCBUb29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorLSBJc3N1ZSAjMTE3OTc6IEFkZCBhIDJ0bzMgZml4ZXIgdGhhdCBtYXBzIHJlbG9hZCgpIHRvIGltcC5yZWxvYWQoKS4KIAotLSBJc3N1ZSAjMTY0NzY6IEZpeCBqc29uLnRvb2wgdG8gYXZvaWQgaW5jbHVkaW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCistIElzc3VlICMxMDk2NjogUmVtb3ZlIHRoZSBjb25jZXB0IG9mIHVuZXhwZWN0ZWQgc2tpcHBlZCB0ZXN0cy4KKworLSBJc3N1ZSAjOTg5MzogUmVtb3ZlZCB0aGUgTWlzYy9WaW0gZGlyZWN0b3J5LgorCistIFJlbW92ZWQgdGhlIE1pc2MvVGV4dE1hdGUgZGlyZWN0b3J5LgorCistIElzc3VlICMxNjI0NTogQWRkIHRoZSBUb29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5IHNjcmlwdCB0byBwYXJzZQorICB0aGUgbGlzdCBvZiBIVE1MNSBlbnRpdGllcyBhbmQgdXBkYXRlIHRoZSBodG1sLmVudGl0aWVzLmh0bWw1IGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzE1Mzc4OiBGaXggVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAogLSBJc3N1ZSAjMTY1NDk6IE1ha2UganNvbi50b29sIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMgYW5kIGFkZCB0ZXN0cy4KICAgSW5pdGlhbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnIGFuZCBTZXJoaXkgU3RvcmNoYWthLgpAQCAtMjAxMCw2ICszMjgyLDEyIEBACiAtIElzc3VlICMxMzMwMTogdXNlIGFzdC5saXRlcmFsX2V2YWwoKSBpbnN0ZWFkIG9mIGV2YWwoKSBpbiBUb29scy9pMThuL21zZ2ZtdC5weQogICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzE4NTY5OiBUaGUgaW5zdGFsbGVyIG5vdyBhZGRzIC5weSB0byB0aGUgUEFUSEVYVCB2YXJpYWJsZSB3aGVuIGV4dGVuc2lvbnMKKyAgYXJlIHJlZ2lzdGVyZWQuIFBhdGNoIGJ5IFBhdWwgTW9vcmUuCisKIAogV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwOTcsNiArMzM3NSw5IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzE3MTU4OiBBZGQgJ3N5bWJvbHMnIHRvIGhlbHAoKSB3ZWxjb21lIG1lc3NhZ2U7IGNsYXJpZnkKKyAgJ21vZHVsZXMgc3BhbScgbWVzc2FnZXMuCisKIC0gSXNzdWUgIzE1ODQ3OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlLCB3aGljaCBkaWQgbm90IGFjY2VwdCB0dXBsZXMgYXMKICAgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KIApAQCAtMjE3Miw2ICszNDUzLDggQEAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTMyNDg6IHJlbW92ZWQgZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGRpZmZsaWIuaXNianVuaywgaXNicG9wdWxhci4KKwogLSBJc3N1ZSAjMTMzNzA6IEVuc3VyZSB0aGF0IGN0eXBlcyB3b3JrcyBvbiBNYWMgT1MgWCB3aGVuIFB5dGhvbiBpcyBjb21waWxlZAogICB1c2luZyB0aGUgY2xhbmcgY29tcGlsZXIuCiAKQEAgLTI1ODcsNiArMzg3MCwxMCBAQAogLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgYGZpbGVjbXAuZGlyY21wKClgIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgQ2hyaXMgSmVyZG9uZWsuCiAKKy0gSXNzdWUgIzE1NDQyOiBFeHBvc2UgdGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5CisgIGBmaWxlY21wLmRpcmNtcCgpYCBhcyBhIG1vZHVsZSBhdHRyaWJ1dGUsIGFuZCBleHBhbmQgdGhlIGxpc3QgdG8gbW9yZSBtb2Rlcm4KKyAgdmFsdWVzLgorCiBUZXN0cwogLS0tLS0KIApAQCAtMjY5OSw5ICszOTg2LDYgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTYzMDU6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvY2N1cnJpbmcgd2hlbiBpbnRlcnJ1cHRpbmcKLSAgbWF0aC5mYWN0b3JpYWwuCi0KIC0gSXNzdWUgIzEyMjg4OiBDb25zaWRlciAnMCcgYW5kICcwLjAnIGFzIHZhbGlkIGluaXRpYWx2YWx1ZQogICBmb3IgdGtpbnRlciBTaW1wbGVEaWFsb2cuCiAKQEAgLTQzOTYsNyArNTY4MCw3IEBACiAtIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KICAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KIAotLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIGBgdXNlcjpwYXNzd29yZGBgIGR1cmluZyBCYXNpYworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCiAgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KIAogLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCkBAIC00ODU1LDggKzYxMzksOCBAQAogLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcwogICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KIAotLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGUpCi0gIGEgYGBDb25uZWN0aW9uOiBjbG9zZWBgIGhlYWRlci4KKy0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlcykKKyAgYGBDb25uZWN0aW9uOiBjbG9zZWBgIGhlYWRlci4KIAogLSBJc3N1ZSAjMTI1NjA6IEJ1aWxkIGxpYnB5dGhvbi5zbyBvbiBPcGVuQlNELiBQYXRjaCBieSBTdGVmYW4gU3BlcmxpbmcuCiAKQEAgLTU0MTQsNiArNjY5OCw5IEBACiAtIElzc3VlICMxMTYzNTogRG9uJ3QgdXNlIHBvbGxpbmcgaW4gd29ya2VyIHRocmVhZHMgYW5kIHByb2Nlc3NlcyBsYXVuY2hlZCBieQogICBjb25jdXJyZW50LmZ1dHVyZXMuCiAKKy0gSXNzdWUgIzU4NDU6IEF1dG9tYXRpY2FsbHkgcmVhZCByZWFkbGluZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBjb21wbGV0aW9uCisgIGluIGludGVyYWN0aXZlIG1vZGUuCisKIC0gSXNzdWUgIzY4MTE6IEFsbG93IGltcG9ydGxpYiB0byBjaGFuZ2UgYSBjb2RlIG9iamVjdCdzIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZQogICB0byBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgY3VycmVudGx5IGlzLCBub3Qgd2hlcmUgdGhlIGNvZGUKICAgb2JqZWN0IG9yaWdpbmFsbHkgY2FtZSBmcm9tLgpkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUgYi9NaXNjL1JFQURNRQppbmRleCAxMThmNmM3Li5lNzc4MGEyIDEwMDY0NAotLS0gYS9NaXNjL1JFQURNRQorKysgYi9NaXNjL1JFQURNRQpAQCAtMjIsOSArMjIsNyBAQAogUkVBRE1FLmNvdmVyaXR5ICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyBDb3Zlcml0eSdzIFByZXZlbnQgb24gUHl0aG9uCiBSRUFETUUudmFsZ3JpbmQgICAgICAgICBJbmZvcm1hdGlvbiBmb3IgVmFsZ3JpbmQgdXNlcnMsIHNlZSB2YWxncmluZC1weXRob24uc3VwcAogUlBNICAgICAgICAgICAgICAgICAgICAgKE9sZCkgdG9vbHMgdG8gYnVpbGQgUlBNcwotc3ZubWFwLnR4dCAgICAgICAgICAgICAgTWFwIG9mIG9sZCBTVk4gcmV2cyBhbmQgYnJhbmNoZXMgdG8gaGcgY2hhbmdlc2V0IGlkcwogU3BlY2lhbEJ1aWxkcy50eHQgICAgICAgRGVzY3JpYmVzIGV4dHJhIHN5bWJvbHMgeW91IGNhbiBzZXQgZm9yIGRlYnVnIGJ1aWxkcwotVGV4dE1hdGUgICAgICAgICAgICAgICAgQSBUZXh0TWF0ZSBidW5kbGUgZm9yIFB5dGhvbiBkZXZlbG9wbWVudAorc3ZubWFwLnR4dCAgICAgICAgICAgICAgTWFwIG9mIG9sZCBTVk4gcmV2cyBhbmQgYnJhbmNoZXMgdG8gaGcgY2hhbmdlc2V0IGlkcwogdmFsZ3JpbmQtcHl0aG9uLnN1cHAgICAgVmFsZ3JpbmQgc3VwcHJlc3Npb24gZmlsZSwgc2VlIFJFQURNRS52YWxncmluZAogdmdyaW5kZWZzICAgICAgICAgICAgICAgUHl0aG9uIGNvbmZpZ3VyYXRpb24gZm9yIHZncmluZCAoYSBnZW5lcmljIHByZXR0eSBwcmludGVyKQotVmltICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGRldmVsb3BtZW50IHV0aWxpdGllcyBmb3IgdGhlIFZpbSBlZGl0b3IKZGlmZiAtLWdpdCBhL01pc2MvUlBNL3B5dGhvbi0zLjMuc3BlYyBiL01pc2MvUlBNL3B5dGhvbi0zLjQuc3BlYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBNaXNjL1JQTS9weXRob24tMy4zLnNwZWMKcmVuYW1lIHRvIE1pc2MvUlBNL3B5dGhvbi0zLjQuc3BlYwppbmRleCBiOGI1N2UyLi4xNmUwMDljIDEwMDY0NAotLS0gYS9NaXNjL1JQTS9weXRob24tMy4zLnNwZWMKKysrIGIvTWlzYy9SUE0vcHl0aG9uLTMuNC5zcGVjCkBAIC0zOSw4ICszOSw4IEBACiAKICVkZWZpbmUgbmFtZSBweXRob24KICMtLXN0YXJ0IGNvbnN0YW50cy0tCi0lZGVmaW5lIHZlcnNpb24gMy4zLjMKLSVkZWZpbmUgbGlidmVycyAzLjMKKyVkZWZpbmUgdmVyc2lvbiAzLjQuMGIxCislZGVmaW5lIGxpYnZlcnMgMy40CiAjLS1lbmQgY29uc3RhbnRzLS0KICVkZWZpbmUgcmVsZWFzZSAxcHlkb3RvcmcKICVkZWZpbmUgX19wcmVmaXggL3VzcgpAQCAtODMsOCArODMsNyBAQAogbGlicmFyaWVzLCBhcyB3ZWxsIGFzIHRvIHZhcmlvdXMgd2luZG93IHN5c3RlbXMsIGFuZCBpcyBleHRlbnNpYmxlIGluIEMgb3IKIEMrKy4gSXQgaXMgYWxzbyB1c2FibGUgYXMgYW4gZXh0ZW5zaW9uIGxhbmd1YWdlIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkCiBhIHByb2dyYW1tYWJsZSBpbnRlcmZhY2UuICBGaW5hbGx5LCBQeXRob24gaXMgcG9ydGFibGU6IGl0IHJ1bnMgb24gbWFueQotYnJhbmRzIG9mIFVOSVgsIG9uIFBDcyB1bmRlciBXaW5kb3dzLCBNUy1ET1MsIGFuZCBPUy8yLCBhbmQgb24gdGhlCi1NYWMuCiticmFuZHMgb2YgVU5JWCwgb24gUENzIHVuZGVyIFdpbmRvd3MsIE1TLURPUywgYW5kIG9uIHRoZSBNYWMuCiAKICVwYWNrYWdlIGRldmVsCiBTdW1tYXJ5OiBUaGUgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgbmVlZGVkIGZvciBQeXRob24gZXh0ZW5zaW9uIGRldmVsb3BtZW50LgpkaWZmIC0tZ2l0IGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dCBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKaW5kZXggZjg2OWU3Yy4uNjQ2YWMyMyAxMDA2NDQKLS0tIGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAorKysgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CkBAIC0xMDUsNyArMTA1LDkgQEAKIHBbLTIqUzotU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFstUzowXQorcFstU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwWy1TKzE6MF0KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzA6Tl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURSwgdXNlZCB0byBjYXRjaApkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmYWRhOC4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIS91c3IvYmluL3B5dGhvbgotIiIiR2VuZXJhdGUgY29kZSB0byB3YXJuIGFib3V0IGEgbW9kdWxlJ3MgcmVtb3ZhbCBpbiBQeXRob24gMy4wLgotCi1YWFggTm90IHN1cHBvcnRlZDoKLS0gTW9kdWxlJ3MgaW4gYSBwYWNrYWdlIGRvIG5vdCBoYXZlIHRoZWlyIGZ1bGwgbmFtZSBnZW5lcmF0ZWQuCi0tIFBhY2thZ2UncyBfX2luaXRfXyBtb2R1bGU7IHNob3VsZCBkZXRlY3QgYW5kIHVzZSB0aGUgcGFja2FnZSdzIG5hbWUgaW5zdGVhZC4KLQotIiIiCi1weV90ZW1wbGF0ZSA9ICIiImZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi13YXJucHkzaygidGhlICR7MTolc30gbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMCIsIHN0YWNrbGV2ZWw9MikKLWRlbCB3YXJucHkzayQwIiIiCi0KLWNfdGVtcGxhdGUgPSAiIiIKLWlmIChQeUVycl9XYXJuUHkzaygidGhlICR7MTolc30gbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gIgotICAgICAgICAgICAgICAgICAgICJQeXRob24gMy4wIiwgMikgJmx0OyAwKQotICAgIHJldHVybjskMCIiIgotCi0KLWltcG9ydCBpbXAKLWltcG9ydCBvcwotCi1maWxlX25hbWUgPSBvcy5wYXRoLnNwbGl0KG9zLmVudmlyb25bJ1RNX0ZJTEVQQVRIJ10pWzFdCi0KLXB5X3N1ZmZpeGVzID0gcmV2ZXJzZWQoc29ydGVkKChzdWZmaXhbMF0gZm9yIHN1ZmZpeCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaWYgc3VmZml4WzJdID09IGltcC5QWV9TT1VSQ0UpLCBrZXk9bGVuKSkKLWNfc3VmZml4ZXMgPSByZXZlcnNlZChzb3J0ZWQoKG9zLnBhdGguc3BsaXRleHQoc3VmZml4WzBdKVswXSArICcuYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaWYgc3VmZml4WzJdID09IGltcC5DX0VYVEVOU0lPTiksIGtleT1sZW4pKQotCi1wYWlyaW5ncyA9ICgocHlfc3VmZml4ZXMsIHB5X3RlbXBsYXRlKSwgKGNfc3VmZml4ZXMsIGNfdGVtcGxhdGUpKQotCi1kZWYgY3JlYXRlX3RlbXBsYXRlKHN1ZmZpeGVzLCB0ZW1wbGF0ZSk6Ci0gICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKLSAgICAgICAgaWYgbm90IGZpbGVfbmFtZS5lbmRzd2l0aChzdWZmaXgpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbW9kdWxlX25hbWUgPSBmaWxlX25hbWVbOi1sZW4oc3VmZml4KV0KLSAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgbW9kdWxlX25hbWUKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gTm9uZQotCi1mb3IgdGVtcGxhdGUgaW4gKGNyZWF0ZV90ZW1wbGF0ZSgqcGFpcikgZm9yIHBhaXIgaW4gcGFpcmluZ3MpOgotICAgIGlmIG5vdCB0ZW1wbGF0ZToKLSAgICAgICAgY29udGludWUKLSAgICBwcmludCB0ZW1wbGF0ZSwKLSAgICBicmVhawotZWxzZToKLSAgICBwcmludCAnWFhYIENvdWxkIG5vdCBnZW5lcmF0ZSBjb2RlLic8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz4yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb248L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+aW5zZXJ0QXNTbmlwcGV0PC9zdHJpbmc+Ci0JPGtleT50YWJUcmlnZ2VyPC9rZXk+Ci0JPHN0cmluZz4ydG8zbW9kZGVsPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNGQ1M2IuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIExlb3BhcmQtc3BlY2lmaWMgdW5sZXNzIGhhdmUgZWFzeSB3YXkgdG8gc3BlY2lmaWMgYWx0ZXJuYXRpdmUgUHl0aG9uIGV4ZWN1dGFibGUuCi0KLWNkICRUTV9QUk9KRUNUX0RJUkVDVE9SWS9Eb2MKLW1ha2UgaHRtbCAyJmd0OyZhbXA7MSB8IHByZQotCi1yZXNjYW5fcHJvamVjdDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkJ1aWxkIERvY3M8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+c2hvd0FzSFRNTDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZmRhNWMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBUT0RPCi0jIC0gSGlnaGxpZ2h0IGFueSBjb21waWxlciB3YXJuaW5ncyBmb3IgUHl0aG9uIGNvZGUuCi0jIC0gUG9pbnQgb3V0IGlmIGNvbXBpbGUgZmFpbGVkLgotCi1jZCAkVE1fUFJPSkVDVF9ESVJFQ1RPUlkKLW1ha2UgLXMgLWoyIDImZ3Q7JmFtcDsxIHwgcHJlCi0KLXJlc2Nhbl9wcm9qZWN0PC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+QnVpbGQgUHl0aG9uPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPnNob3dBc0hUTUw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWQzMGJjLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+b3BlbiAiaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSQoY2F0KSI8L3N0cmluZz4KLQk8a2V5PmZhbGxiYWNrSW5wdXQ8L2tleT4KLQk8c3RyaW5nPndvcmQ8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5zZWxlY3Rpb248L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkdvIHRvIElzc3VlPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWJlNDMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBTZWFyY2ggb3JkZXI6Ci0jICAtIEN1cnJlbnQgcHJvamVjdC4KLSMgIC0gVE1fUFlUSE9OREVWX0RPQ1MuCi0jICAtIE9ubGluZSBkb2NzIGluIGRldmVsb3BtZW50LgotCi1odG1sX2luZGV4PSRUTV9QUk9KRUNUX0RJUkVDVE9SWS9Eb2MvYnVpbGQvaHRtbC9pbmRleC5odG1sCi1pZiBbWyAtZiAkaHRtbF9pbmRleCBdXTsgdGhlbgotCW9wZW4gJGh0bWxfaW5kZXgKLWVsaWYgW1sgJFRNX1BZVEhPTkRFVl9ET0NTIF1dOyB0aGVuCi0Jb3BlbiAkVE1fUFlUSE9OREVWX0RPQ1MKLWVsc2UKLQlvcGVuIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2LwotZmk8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5rZXlFcXVpdmFsZW50PC9rZXk+Ci0JPHN0cmluZz5ASDwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+T3BlbiBEb2NzPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjU1MzNhLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggV29ydGggc3VwcG9ydGluZyB1c2luZyBhIGxvY2FsIGNvcHk/Ci0KLSMgRHVtYiBsdWNrIHRoYXQgYW4gdW5yZWNvZ25pemVkIG51bWJlciBsZWFkcyB0byBhIDAgYmVpbmcgdXNlZC4KLW9wZW4gYHByaW50ZiAiaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0lMDRkIiAkKGNhdClgPC9zdHJpbmc+Ci0JPGtleT5mYWxsYmFja0lucHV0PC9rZXk+Ci0JPHN0cmluZz53b3JkPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+c2VsZWN0aW9uPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5PcGVuIFBFUDwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgImEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IiAiYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGU4YmFlLi4wMDAwMDAwCi0tLSAiYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmNvbnRlbnQ8L2tleT4KLQk8c3RyaW5nPi4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgIFRoZSA6bW9kOlxgJHsxfVxgIG1vZHVsZSBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjAuCi0kezB9PC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz4yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gKGRvY3MpPC9zdHJpbmc+Ci0JPGtleT50YWJUcmlnZ2VyPC9rZXk+Ci0JPHN0cmluZz4ydG8zZG9jZGVsPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTEwZDVkLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5Pm1haW5NZW51PC9rZXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+aXRlbXM8L2tleT4KLQkJPGFycmF5PgotCQkJPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLQkJCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvc3RyaW5nPgotCQkJPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLQkJCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvc3RyaW5nPgotCQkJPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLQkJCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotCQk8L2FycmF5PgotCQk8a2V5PnN1Ym1lbnVzPC9rZXk+Ci0JCTxkaWN0Lz4KLQk8L2RpY3Q+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5QeXRob24tRGV2PC9zdHJpbmc+Ci0JPGtleT5vcmRlcmluZzwva2V5PgotCTxhcnJheT4KLQkJPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLQkJPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLQkJPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLQkJPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLQkJPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLQkJPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLQkJPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLQk8L2FycmF5PgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QTkzMkVDRDEtRDQzQS00RjU3LUI3RkItQTFDRUMzQjY1RDIwPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vcHl0aG9uLnZpbSBiL01pc2MvVmltL3B5dGhvbi52aW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWU3ZWIuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vcHl0aG9uLnZpbQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0iIEF1dG8tZ2VuZXJhdGVkIFZpbSBzeW50YXggZmlsZSBmb3IgUHl0aG9uICh0cnVuazogcjYwMzc2TSkuCi0iCi0iIFRvIHVzZTogY29weSBvciBzeW1saW5rIHRvIH4vLnZpbS9zeW50YXgvcHl0aG9uLnZpbQotCi0KLWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCi0gIGZpbmlzaAotZW5kaWYKLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpCi0gIGxldCBweXRob25faGlnaGxpZ2h0X251bWJlcnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMgPSAxCi1lbmRpZgotCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgYXMgYXNzZXJ0IGJyZWFrIGNvbnRpbnVlIGRlbCBleGNlcHQgZXhlYyBmaW5hbGx5Ci1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgZ2xvYmFsIGxhbWJkYSBwYXNzIHByaW50IHJhaXNlIHJldHVybiB0cnkgd2l0aAotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIHlpZWxkCi0KLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBkZWYgY2xhc3MgbmV4dGdyb3VwPXB5dGhvbkZ1bmN0aW9uIHNraXB3aGl0ZQotCi1zeW4gbWF0Y2ggcHl0aG9uRnVuY3Rpb24gICAgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiIGNvbnRhaW5lZAotCi1zeW4ga2V5d29yZCBweXRob25SZXBlYXQgICAgZm9yIHdoaWxlCi0KLXN5biBrZXl3b3JkIHB5dGhvbkNvbmRpdGlvbmFsICAgIGlmIGVsaWYgZWxzZQotCi1zeW4ga2V5d29yZCBweXRob25PcGVyYXRvciAgICBhbmQgaW4gaXMgbm90IG9yCi0KLXN5biBrZXl3b3JkIHB5dGhvblByZUNvbmRpdCAgICBpbXBvcnQgZnJvbQotCi1zeW4gbWF0Y2ggcHl0aG9uQ29tbWVudCAgICAiIy4qJCIgY29udGFpbnM9cHl0aG9uVG9kbwotCi1zeW4ga2V5d29yZCBweXRob25Ub2RvICAgIFRPRE8gRklYTUUgWFhYIGNvbnRhaW5lZAotCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9JysgZW5kPSsnKyBza2lwPStcXFxcXHxcXCcrIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPSIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iIiIrIGVuZD0rIiIiKyAgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9JycnKyBlbmQ9KycnJysgIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0nKyBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXSIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdIiIiKyBlbmQ9KyIiIisgIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0nJycrIGVuZD0rJycnKyAgCi0KLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgK1xcW2FiZm5ydHZcJyJcXF0rIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFxcb1x7MSwzfSIgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXHhceFx7Mn0iIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXChcXHVceFx7NH1cfFxcVVx4XHs4fVwpIiBjb250YWluZWQKLQotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFwkIgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDwweFx4XCtbTGxdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrW0xsakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrXC5cKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgRWxsaXBzaXMgRmFsc2UgTm9uZSBOb3RJbXBsZW1lbnRlZCBUcnVlIF9fZGVidWdfXwotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIF9faW1wb3J0X18gYWJzIGFsbCBhbnkgYm9vbAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGJ1ZmZlciBjYWxsYWJsZSBjaHIgY2xhc3NtZXRob2QgY21wCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgY29tcGxleCBjb3B5cmlnaHQgY3JlZGl0cyBkZWxhdHRyIGRpY3QKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBkaXIgZGl2bW9kIGVudW1lcmF0ZSBldmFsIGV4ZWMgZXhpdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGZpbHRlciBmbG9hdCBmcm96ZW5zZXQgZ2V0YXR0ciBnbG9iYWxzIGhhc2F0dHIKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBoYXNoIGhlbHAgaGV4IGlkIGludCBpc2luc3RhbmNlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaWNlbnNlIGxpc3QgbG9jYWxzIG1hcAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIG1heCBtaW4gb2JqZWN0IG9jdCBvcGVuIG9yZCBwb3cgcHJvcGVydHkgcXVpdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHJhbmdlIHJlbG9hZCByZXByIHJldmVyc2VkIHJvdW5kCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc2V0IHNldGF0dHIgc2xpY2Ugc29ydGVkIHN0YXRpY21ldGhvZCBzdHIgc3VtCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc3VwZXIgdHJ1bmMgdHVwbGUgdHlwZSB1bmljb2RlIHZhcnMgCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgemlwCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQXJpdGhtZXRpY0Vycm9yIEFzc2VydGlvbkVycm9yIEF0dHJpYnV0ZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBCYXNlRXhjZXB0aW9uIERlcHJlY2F0aW9uV2FybmluZyBFT0ZFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRW52aXJvbm1lbnRFcnJvciBFeGNlcHRpb24gRmxvYXRpbmdQb2ludEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBGdXR1cmVXYXJuaW5nIEdlbmVyYXRvckV4aXQgSU9FcnJvciBJbXBvcnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgSW1wb3J0V2FybmluZyBJbmRlbnRhdGlvbkVycm9yIEluZGV4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEtleUVycm9yIEtleWJvYXJkSW50ZXJydXB0IExvb2t1cEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBNZW1vcnlFcnJvciBOYW1lRXJyb3IgTm90SW1wbGVtZW50ZWRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgT1NFcnJvciBPdmVyZmxvd0Vycm9yIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFJlZmVyZW5jZUVycm9yIFJ1bnRpbWVFcnJvciBSdW50aW1lV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3ludGF4V2FybmluZyBTeXN0ZW1FcnJvciBTeXN0ZW1FeGl0IFRhYkVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBUeXBlRXJyb3IgVW5ib3VuZExvY2FsRXJyb3IgVW5pY29kZURlY29kZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVbmljb2RlRW5jb2RlRXJyb3IgVW5pY29kZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IgVW5pY29kZVdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVzZXJXYXJuaW5nIFZhbHVlRXJyb3IgV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgWmVyb0RpdmlzaW9uRXJyb3IKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSBleGNsdWRlbmwgIlxTXHNcKyQibXM9cysxCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgIiBcK1x0IgotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5ICJcdFwrICIKLQotZW5kaWYKLQotCi0gIGhpIGRlZiBsaW5rIHB5dGhvblN0YXRlbWVudCBTdGF0ZW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RhdGVtZW50IFN0YXRlbWVudAotICBoaSBkZWYgbGluayBweXRob25GdW5jdGlvbiBGdW5jdGlvbgotICBoaSBkZWYgbGluayBweXRob25SZXBlYXQgUmVwZWF0Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkNvbmRpdGlvbmFsIENvbmRpdGlvbmFsCi0gIGhpIGRlZiBsaW5rIHB5dGhvbk9wZXJhdG9yIE9wZXJhdG9yCi0gIGhpIGRlZiBsaW5rIHB5dGhvblByZUNvbmRpdCBQcmVDb25kaXQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uQ29tbWVudCBDb21tZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvblRvZG8gVG9kbwotICBoaSBkZWYgbGluayBweXRob25TdHJpbmcgU3RyaW5nCi0gIGhpIGRlZiBsaW5rIHB5dGhvbkVzY2FwZSBTcGVjaWFsCi0gIGhpIGRlZiBsaW5rIHB5dGhvbkVzY2FwZSBTcGVjaWFsCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbk51bWJlciBOdW1iZXIKLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbkJ1aWx0aW4gRnVuY3Rpb24KLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uRXhjZXB0aW9uIEV4Y2VwdGlvbgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvblNwYWNlRXJyb3IgRXJyb3IKLSAgZW5kaWYKLQotCi0iIFVuY29tbWVudCB0aGUgJ21pbmxpbmVzJyBzdGF0ZW1lbnQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlICdtYXhsaW5lcycKLSIgc3RhdGVtZW50IGxpbmU7IGNoYW5nZXMgYmVoYXZpb3VyIHRvIGxvb2sgYXQgbGVhc3QgMjAwMCBsaW5lcyBwcmV2aW91c2x5IGZvcgotIiBzeW50YXggbWF0Y2hlcyBpbnN0ZWFkIG9mIGF0IG1vc3QgMjAwIGxpbmVzCi1zeW4gc3luYyBtYXRjaCBweXRob25TeW5jIGdyb3VwaGVyZSBOT05FICIpOiQiCi1zeW4gc3luYyBtYXhsaW5lcz0yMDAKLSJzeW4gc3luYyBtaW5saW5lcz0yMDAwCi0KLWxldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5dGhvbiIKZGlmZiAtLWdpdCBhL01pc2MvVmltL3N5bnRheF90ZXN0LnB5IGIvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjA4NjYuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0iIiJUZXN0IGZpbGUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgb2YgZWRpdG9ycy4KLQotTWVhbnQgdG8gY292ZXIgYSB3aWRlIHJhbmdlIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFuZCBleHByZXNzaW9ucy4KLU5vdCBuZWNlc3NhcmlseSBzZW5zaWNhbCBvciBjb21wcmVoZW5zaXZlIChhc3N1bWUgdGhhdCBpZiBvbmUgZXhjZXB0aW9uIGlzCi1oaWdobGlnaHRlZCB0aGF0IGFsbCBhcmUsIGZvciBpbnN0YW5jZSkuCi0KLUV4dHJhbmVvdXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBjYW4ndCBiZSB0ZXN0ZWQgYmVjYXVzZSBvZiBzdm4gcHJlLWNvbW1pdCBob29rCi1jaGVja3MgZm9yIHN1Y2ggdGhpbmdzLgotCi0iIiIKLSMgQ29tbWVudAotIyBPUFRJT05BTDogWFhYIGNhdGNoIHlvdXIgYXR0ZW50aW9uCi0KLSMgU3RhdGVtZW50cwotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudCAgIyBJbXBvcnQKLWZyb20gc3lzIGltcG9ydCBwYXRoIGFzIHRoaW5nCi1hc3NlcnQgVHJ1ZSAjIGtleXdvcmQKLWRlZiBmb28oKTogICMgZnVuY3Rpb24gZGVmaW5pdGlvbgotICAgIHJldHVybiBbXQotY2xhc3MgQmFyKG9iamVjdCk6ICAjIENsYXNzIGRlZmluaXRpb24KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBwYXNzCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgcGFzcwotZm9vKCkgICMgVU5DT0xPVVJFRDogZnVuY3Rpb24gY2FsbAotd2hpbGUgRmFsc2U6ICAjICd3aGlsZScKLSAgICBjb250aW51ZQotZm9yIHggaW4gZm9vKCk6ICAjICdmb3InCi0gICAgYnJlYWsKLXdpdGggQmFyKCkgYXMgc3R1ZmY6Ci0gICAgcGFzcwotaWYgRmFsc2U6IHBhc3MgICMgJ2lmJwotZWxpZiBGYWxzZTogcGFzcwotZWxzZTogcGFzcwotCi0jIENvbnN0YW50cwotJ3NpbmdsZS1xdW90ZScsIHUndW5pY29kZScgIyBTdHJpbmdzIG9mIGFsbCBraW5kczsgcHJlZml4ZXMgbm90IGhpZ2hsaWdodGVkCi0iZG91YmxlLXF1b3RlIgotIiIidHJpcGxlIGRvdWJsZS1xdW90ZSIiIgotJycndHJpcGxlIHNpbmdsZS1xdW90ZScnJwotcidyYXcnCi11cid1bmljb2RlIHJhdycKLSdlc2NhcGVcbicKLSdcMDQnICAjIG9jdGFsCi0nXHhGRicgIyBoZXgKLSdcdTExMTEnICMgdW5pY29kZSBjaGFyYWN0ZXIKLTEgICMgSW50ZWdyYWwKLTFMCi0xLjAgICMgRmxvYXQKLS4xCi0xKzJqICAjIENvbXBsZXgKLQotIyBFeHByZXNzaW9ucwotMSBhbmQgMiBvciAzICAjIEJvb2xlYW4gb3BlcmF0b3JzCi0yIDwgMyAgIyBVTkNPTE9VUkVEOiBjb21wYXJpc29uIG9wZXJhdG9ycwotc3BhbSA9IDQyICAjIFVOQ09MT1VSRUQ6IGFzc2lnbm1lbnQKLTIgKyAzICAjIFVOQ09MT1VSRUQ6IG51bWJlciBvcGVyYXRvcnMKLVtdICAjIFVOQ09MT1VSRUQ6IGxpc3QKLXt9ICAjIFVOQ09MT1VSRUQ6IGRpY3QKLSgxLCkgICMgVU5DT0xPVVJFRDogdHVwbGUKLWFsbCAgIyBCdWlsdC1pbiBmdW5jdGlvbnMKLUdlbmVyYXRvckV4aXQgICMgRXhjZXB0aW9ucwpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vdmltX3N5bnRheC5weSBiL01pc2MvVmltL3ZpbV9zeW50YXgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MmIzNTAuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vdmltX3N5bnRheC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0jIFhYWChubm9yd2l0eik6IHdoYXQgdmVyc2lvbnMgb2YgcHl0aG9uIGlzIHRoaXMgZmlsZSBzdXBwb3NlZCB0byB3b3JrIHdpdGg/Ci0jIEl0IHVzZXMgdGhlIG9sZCBwcmludCBzdGF0ZW1lbnQgbm90IGluIHB5M2suCi0KLWltcG9ydCBrZXl3b3JkCi1pbXBvcnQgZXhjZXB0aW9ucwotaW1wb3J0IGJ1aWx0aW5zCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLWZyb20gc3lzIGltcG9ydCBzdWJ2ZXJzaW9uCi0KLWNvbW1lbnRfaGVhZGVyID0gJycnIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAoJXM6IHIlcykuCi0iCi0iIFRvIHVzZTogY29weSBvciBzeW1saW5rIHRvIH4vLnZpbS9zeW50YXgvcHl0aG9uLnZpbScnJwotCi1zdGF0ZW1lbnRfaGVhZGVyID0gIiIiCi1pZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQotICBmaW5pc2gKLWVuZGlmIiIiCi0KLXN0YXRlbWVudF9mb290ZXIgPSAnJycKLSIgVW5jb21tZW50IHRoZSAnbWlubGluZXMnIHN0YXRlbWVudCBsaW5lIGFuZCBjb21tZW50IG91dCB0aGUgJ21heGxpbmVzJwotIiBzdGF0ZW1lbnQgbGluZTsgY2hhbmdlcyBiZWhhdmlvdXIgdG8gbG9vayBhdCBsZWFzdCAyMDAwIGxpbmVzIHByZXZpb3VzbHkgZm9yCi0iIHN5bnRheCBtYXRjaGVzIGluc3RlYWQgb2YgYXQgbW9zdCAyMDAgbGluZXMKLXN5biBzeW5jIG1hdGNoIHB5dGhvblN5bmMgZ3JvdXBoZXJlIE5PTkUgIik6JCIKLXN5biBzeW5jIG1heGxpbmVzPTIwMAotInN5biBzeW5jIG1pbmxpbmVzPTIwMDAKLQotbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHl0aG9uIicnJwotCi1sb29waW5nID0gKCdmb3InLCAnd2hpbGUnKQotY29uZGl0aW9uYWxzID0gKCdpZicsICdlbGlmJywgJ2Vsc2UnKQotYm9vbGVhbl9vcHMgPSAoJ2FuZCcsICdpbicsICdpcycsICdub3QnLCAnb3InKQotaW1wb3J0X3N0bXRzID0gKCdpbXBvcnQnLCAnZnJvbScpCi1vYmplY3RfZGVmcyA9ICgnZGVmJywgJ2NsYXNzJykKLQotZXhjZXB0aW9uX25hbWVzID0gc29ydGVkKGV4YyBmb3IgZXhjIGluIGRpcihleGNlcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXhjLnN0YXJ0c3dpdGgoJ19fJykpCi0KLSMgTmVlZCB0byBpbmNsdWRlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggJ19fJyAoZS5nLiwgX19pbXBvcnRfXyksIGJ1dAotIyBub3RoaW5nIHRoYXQgY29tZXMgd2l0aCBtb2R1bGVzIChlLmcuLCBfX25hbWVfXyksIHNvIGp1c3QgZXhjbHVkZSBhbnl0aGluZyBpbgotIyB0aGUgJ2V4Y2VwdGlvbnMnIG1vZHVsZSBzaW5jZSB3ZSB3YW50IHRvIGlnbm9yZSBleGNlcHRpb25zICphbmQqIHdoYXQgYW55Ci0jIG1vZHVsZSB3b3VsZCBoYXZlCi1idWlsdGluX25hbWVzID0gc29ydGVkKGJ1aWx0aW4gZm9yIGJ1aWx0aW4gaW4gZGlyKGJ1aWx0aW5zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1aWx0aW4gbm90IGluIGRpcihleGNlcHRpb25zKSkKLQotZXNjYXBlcyA9IChyJytcXFthYmZucnR2XCciXFxdKycsIHInIlxcXG9cezEsM30iJywgciciXFx4XHhcezJ9IicsCi0gICAgICAgICAgICByJyJcKFxcdVx4XHs0fVx8XFxVXHhcezh9XCkiJywgciciXFwkIicpCi0KLXRvZG9zID0gKCJUT0RPIiwgIkZJWE1FIiwgIlhYWCIpCi0KLSMgWFhYIGNvZGlmeT8KLW51bWJlcnMgPSAociciXDwweFx4XCtbTGxdXD1cPiInLCByJyJcPFxkXCtbTGxqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlwuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJywKLSAgICAgICAgICAgICciXDxcZFwrXC5cKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlw8XGRcK1wuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJykKLQotY29udGFpbmVkID0gbGFtYmRhIHg6ICIlcyBjb250YWluZWQiICUgeAotCi1kZWYgc3RyX3JlZ2V4ZXMoKToKLSAgICAiIiJHZW5lcmF0b3IgdG8geWllbGQgdmFyaW91cyBjb21iaW5hdGlvbnMgb2Ygc3RyaW5ncyByZWdleGVzIiIiCi0gICAgcmVnZXhfdGVtcGxhdGUgPSBUZW1wbGF0ZSgnbWF0Y2hncm91cD1Ob3JtYWwgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydD0rW3VVXVw9JHtyYXd9JHtzZXB9KyAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZD0rJHtzZXB9KyAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyR7c2tpcH0gJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke2NvbnRhaW5zfScpCi0gICAgc2tpcF9yZWdleCA9IFRlbXBsYXRlKHInc2tpcD0rXFxcXFx8XFwke3NlcH0rJykKLSAgICBmb3IgcmF3IGluICgnJywgJ1tyUl0nKToKLSAgICAgICAgZm9yIHNlcGFyYXRvciBpbiAoIiciLCAnIicsICciIiInLCAiJycnIik6Ci0gICAgICAgICAgICBpZiBsZW4oc2VwYXJhdG9yKSA9PSAxOgotICAgICAgICAgICAgICAgIHNraXAgPSBza2lwX3JlZ2V4LnN1YnN0aXR1dGUoc2VwPXNlcGFyYXRvcikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2tpcCA9ICcnCi0gICAgICAgICAgICBjb250YWlucyA9ICdjb250YWlucz1weXRob25Fc2NhcGUnIGlmIG5vdCByYXcgZWxzZSAnJwotICAgICAgICAgICAgeWllbGQgcmVnZXhfdGVtcGxhdGUuc3Vic3RpdHV0ZShyYXc9cmF3LCBzZXA9c2VwYXJhdG9yLCBza2lwPXNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zID0gY29udGFpbnMpCi0KLXNwYWNlX2Vycm9ycyA9IChyJ2V4Y2x1ZGVubCAiXFNcc1wrJCJtcz1zKzEnLCByJyIgXCtcdCInLCByJyJcdFwrICInKQotCi1zdGF0ZW1lbnRzID0gKAotICAgICAgICAgICAgICAgICgnJywKLSAgICAgICAgICAgICAgICAgICAgIyBYWFggTWlnaHQgbmVlZCB0byBjaGFuZ2UgcHl0aG9uU3RhdGVtZW50IHNpbmNlIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWZpYyBSZXBlYXQsIENvbmRpdGlvbmFsLCBPcGVyYXRvciwgZXRjLiBmb3IgJ3doaWxlJywKLSAgICAgICAgICAgICAgICAgICAgIyBldGMuCi0gICAgICAgICAgICAgICAgICAgIFsoIlN0YXRlbWVudCIsICJweXRob25TdGF0ZW1lbnQiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoa3cgZm9yIGt3IGluIGtleXdvcmQua3dsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga3cgbm90IGluIChsb29waW5nICsgY29uZGl0aW9uYWxzICsgYm9vbGVhbl9vcHMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zdG10cyArIG9iamVjdF9kZWZzKSkKLSAgICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICAgKCJTdGF0ZW1lbnQiLCAicHl0aG9uU3RhdGVtZW50IiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihvYmplY3RfZGVmcykgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUnKSksCi0gICAgICAgICAgICAgICAgICAgICAoIkZ1bmN0aW9uIiwicHl0aG9uRnVuY3Rpb24iLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCgnIlthLXpBLVpfXVthLXpBLVowLTlfXSoiJykpLAotICAgICAgICAgICAgICAgICAgICAgKCJSZXBlYXQiLCAicHl0aG9uUmVwZWF0IiwgImtleXdvcmQiLCBsb29waW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICgiQ29uZGl0aW9uYWwiLCAicHl0aG9uQ29uZGl0aW9uYWwiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiT3BlcmF0b3IiLCAicHl0aG9uT3BlcmF0b3IiLCAia2V5d29yZCIsIGJvb2xlYW5fb3BzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiUHJlQ29uZGl0IiwgInB5dGhvblByZUNvbmRpdCIsICJrZXl3b3JkIiwgaW1wb3J0X3N0bXRzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiQ29tbWVudCIsICJweXRob25Db21tZW50IiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIiMuKiQiIGNvbnRhaW5zPXB5dGhvblRvZG8nKSwKLSAgICAgICAgICAgICAgICAgICAgICgiVG9kbyIsICJweXRob25Ub2RvIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCgnICcuam9pbih0b2RvcykpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3RyaW5nIiwgInB5dGhvblN0cmluZyIsICJyZWdpb24iLCBzdHJfcmVnZXhlcygpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3BlY2lhbCIsICJweXRob25Fc2NhcGUiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZWQoZXNjKSBmb3IgZXNjIGluIGVzY2FwZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90ICckJyBpbiBlc2MpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3BlY2lhbCIsICJweXRob25Fc2NhcGUiLCAibWF0Y2giLCByJyJcXCQiJyksCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIiwKLSAgICAgICAgICAgICAgICAgICAgWygiTnVtYmVyIiwgInB5dGhvbk51bWJlciIsICJtYXRjaCIsIG51bWJlcnMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRnVuY3Rpb24iLCAicHl0aG9uQnVpbHRpbiIsICJrZXl3b3JkIiwgYnVpbHRpbl9uYW1lcyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkV4Y2VwdGlvbiIsICJweXRob25FeGNlcHRpb24iLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZXMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkVycm9yIiwgInB5dGhvblNwYWNlRXJyb3IiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgKCJkaXNwbGF5ICIgKyBlcnIgZm9yIGVyciBpbiBzcGFjZV9lcnJvcnMpKV0KLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgKQotCi1kZWYgc3luX3ByZWZpeCh0eXBlXywga2luZCk6Ci0gICAgcmV0dXJuICdzeW4gJXMgJXMgICAgJyAlICh0eXBlXywga2luZCkKLQotZGVmIGZpbGxfc3RtdChpdGVyYWJsZSwgZmlsbF9sZW4pOgotICAgICIiIllpZWxkIGEgc3RyaW5nIHRoYXQgZmlsbHMgYXQgbW9zdCBmaWxsX2xlbiBjaGFyYWN0ZXJzIHdpdGggc3RyaW5ncwotICAgIHJldHVybmVkIGJ5ICdpdGVyYWJsZScgYW5kIHNlcGFyYXRlZCBieSBhIHNwYWNlIiIiCi0gICAgIyBEZWFsIHdpdGggdHJhaWxpbmcgY2hhciB0byBoYW5kbGUgJyAnLmpvaW4oKSBjYWxjdWxhdGlvbgotICAgIGZpbGxfbGVuICs9IDEKLSAgICBvdmVyZmxvdyA9IE5vbmUKLSAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgYnVmZmVyXyA9IFtdCi0gICAgICAgIHRvdGFsX2xlbiA9IDAKLSAgICAgICAgaWYgb3ZlcmZsb3c6Ci0gICAgICAgICAgICBidWZmZXJfLmFwcGVuZChvdmVyZmxvdykKLSAgICAgICAgICAgIHRvdGFsX2xlbiArPSBsZW4ob3ZlcmZsb3cpICsgMQotICAgICAgICAgICAgb3ZlcmZsb3cgPSBOb25lCi0gICAgICAgIHdoaWxlIHRvdGFsX2xlbiA8IGZpbGxfbGVuOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG5ld19pdGVtID0gbmV4dChpdCkKLSAgICAgICAgICAgICAgICBidWZmZXJfLmFwcGVuZChuZXdfaXRlbSkKLSAgICAgICAgICAgICAgICB0b3RhbF9sZW4gKz0gbGVuKG5ld19pdGVtKSArIDEKLSAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgIGlmIGJ1ZmZlcl86Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgb3ZlcmZsb3c6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIG92ZXJmbG93Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHRvdGFsX2xlbiA+IGZpbGxfbGVuOgotICAgICAgICAgICAgb3ZlcmZsb3cgPSBidWZmZXJfLnBvcCgpCi0gICAgICAgICAgICB0b3RhbF9sZW4gLT0gbGVuKG92ZXJmbG93KSAtIDEKLSAgICAgICAgcmV0ID0gJyAnLmpvaW4oYnVmZmVyXykKLSAgICAgICAgYXNzZXJ0IGxlbihyZXQpIDw9IGZpbGxfbGVuCi0gICAgICAgIHlpZWxkIHJldAotCi1GSUxMID0gODAKLQotZGVmIG1haW4oZmlsZV9wYXRoKToKLSAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIEZJTEU6Ci0gICAgICAgICMgQ29tbWVudCBmb3IgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgY29tbWVudF9oZWFkZXIgJSBzdWJ2ZXJzaW9uWzE6XQotICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBTdGF0ZW1lbnRzIGF0IHN0YXJ0IG9mIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIHN0YXRlbWVudF9oZWFkZXIKLSAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgR2VuZXJhdGUgY2FzZSBmb3IgcHl0aG9uX2hpZ2hsaWdodF9hbGwKLSAgICAgICAgcHJpbnQ+PkZJTEUsICdpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYWxsIiknCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGxldCAlcyA9IDEnICUgc3RhdGVtZW50X3ZhcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdlbmRpZicKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEdlbmVyYXRlIFB5dGhvbiBncm91cHMKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJ2lmIGV4aXN0cygiJXMiKScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnJwotICAgICAgICAgICAgZm9yIGNvbG91cl9ncm91cCwgZ3JvdXAsIHR5cGVfLCBhcmd1bWVudHMgaW4gc3RhdGVtZW50X3BhcnRzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3VtZW50cywgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHN5bl9wcmVmaXgodHlwZV8sIGdyb3VwKQotICAgICAgICAgICAgICAgICAgICBpZiB0eXBlXyA9PSAna2V5d29yZCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG10X2l0ZXIgPSBmaWxsX3N0bXQoYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMIC0gbGVuKHByZWZpeCkgLSBsZW4oaW5kZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgcHJlZml4ICsgbmV4dChzdG10X2l0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudCBpbiBhcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHByZWZpeCArIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHN5bl9wcmVmaXgodHlwZV8sIGdyb3VwKSArIGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdlbmRpZicKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBBc3NvY2lhdGluZyBQeXRob24gZ3JvdXAgd2l0aCBWaW0gY29sb3VyIGdyb3VwCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGlmIGV4aXN0cygiJXMiKScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgICAnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICcKLSAgICAgICAgICAgIGZvciBjb2xvdXJfZ3JvdXAsIGdyb3VwLCB0eXBlXywgYXJndW1lbnRzIGluIHN0YXRlbWVudF9wYXJ0czoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgKGluZGVudCArICJoaSBkZWYgbGluayAlcyAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXAsIGNvbG91cl9ncm91cCkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBlbmRpZicKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBTdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIHN0YXRlbWVudF9mb290ZXIKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCJweXRob24udmltIikKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbXJjIGIvTWlzYy9WaW0vdmltcmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOThjY2EuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vdmltcmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0iIHZpbXJjIGZpbGUgZm9yIGZvbGxvd2luZyB0aGUgY29kaW5nIHN0YW5kYXJkcyBzcGVjaWZpZWQgaW4gUEVQIDcgJiA4LgotIgotIiBUbyB1c2UgdGhpcyBmaWxlLCBzb3VyY2UgaXQgaW4geW91ciBvd24gcGVyc29uYWwgLnZpbXJjIGZpbGUgKGBgc291cmNlCi0iIDxmaWxlbmFtZT5gYCkgb3IsIGlmIHlvdSBkb24ndCBoYXZlIGEgLnZpbXJjIGZpbGUsIHlvdSBjYW4ganVzdCBzeW1saW5rIHRvIGl0Ci0iIChgYGxuIC1zIDx0aGlzIGZpbGU+IH4vLnZpbXJjYGApLiAgQWxsIG9wdGlvbnMgYXJlIHByb3RlY3RlZCBieSBhdXRvY21kcwotIiAocmVhZCBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGNvbW1hbmQpIHNvIGJsaW5kIHNvdXJjaW5nIG9mIHRoaXMgZmlsZQotIiBpcyBzYWZlIGFuZCB3aWxsIG5vdCBhZmZlY3QgeW91ciBzZXR0aW5ncyBmb3Igbm9uLVB5dGhvbiBvciBub24tQyBmaWxlcy4KLSIKLSIKLSIgQWxsIHNldHRpbmcgYXJlIHByb3RlY3RlZCBieSAnYXUnICgnYXV0b2NtZCcpIHN0YXRlbWVudHMuICBPbmx5IGZpbGVzIGVuZGluZwotIiBpbiAucHkgb3IgLnB5dyB3aWxsIHRyaWdnZXIgdGhlIFB5dGhvbiBzZXR0aW5ncyB3aGlsZSBmaWxlcyBlbmRpbmcgaW4gKi5jIG9yCi0iICouaCB3aWxsIHRyaWdnZXIgdGhlIEMgc2V0dGluZ3MuICBUaGlzIG1ha2VzIHRoZSBmaWxlICJzYWZlIiBpbiB0ZXJtcyBvZiBvbmx5Ci0iIGFkanVzdGluZyBzZXR0aW5ncyBmb3IgUHl0aG9uIGFuZCBDIGZpbGVzLgotIgotIiBPbmx5IGJhc2ljIHNldHRpbmdzIG5lZWRlZCB0byBlbmZvcmNlIHRoZSBzdHlsZSBndWlkZWxpbmVzIGFyZSBzZXQuCi0iIFNvbWUgc3VnZ2VzdGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBidXQgY29tbWVudGVkIG91dCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KLQotIiBOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSBwcmUtZXhpc3RpbmcgdGFiIGlzIGVxdWFsIHRvLgotIiBGb3IgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBhIG5ldyB0YWIgdXNlIHNoaWZ0d2lkdGguCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKnB5LCpweXcsKi5jLCouaCBzZXQgdGFic3RvcD04Ci0KLSIgV2hhdCB0byB1c2UgZm9yIGFuIGluZGVudC4KLSIgVGhpcyB3aWxsIGFmZmVjdCBDdHJsLVQgYW5kICdhdXRvaW5kZW50Jy4KLSIgUHl0aG9uOiA0IHNwYWNlcwotIiBDOiB0YWJzIChwcmUtZXhpc3RpbmcgZmlsZXMpIG9yIDQgc3BhY2VzIChuZXcgZmlsZXMpCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqcHl3IHNldCBzaGlmdHdpZHRoPTQKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3IHNldCBleHBhbmR0YWIKLWZ1IFNlbGVjdF9jX3N0eWxlKCkKLSAgICBpZiBzZWFyY2goJ15cdCcsICduJywgMTUwKQotICAgICAgICBzZXQgc2hpZnR3aWR0aD04Ci0gICAgICAgIHNldCBub2V4cGFuZHRhYgotICAgIGVsIAotICAgICAgICBzZXQgc2hpZnR3aWR0aD00Ci0gICAgICAgIHNldCBleHBhbmR0YWIKLSAgICBlbgotZW5kZgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouYywqLmggY2FsbCBTZWxlY3RfY19zdHlsZSgpCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgTWFrZWZpbGUqIHNldCBub2V4cGFuZHRhYgotCi0iIFVzZSB0aGUgYmVsb3cgaGlnaGxpZ2h0IGdyb3VwIHdoZW4gZGlzcGxheWluZyBiYWQgd2hpdGVzcGFjZSBpcyBkZXNpcmVkLgotaGlnaGxpZ2h0IEJhZFdoaXRlc3BhY2UgY3Rlcm1iZz1yZWQgZ3VpYmc9cmVkCi0KLSIgRGlzcGxheSB0YWJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGluIFB5dGhvbiBtb2RlIGFzIGJhZC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3IG1hdGNoIEJhZFdoaXRlc3BhY2UgL15cdFwrLwotIiBNYWtlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmUgZmxhZ2dlZCBhcyBiYWQuCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oLCoucnN0IG1hdGNoIEJhZFdoaXRlc3BhY2UgL1xzXCskLwotCi0iIFdyYXAgdGV4dCBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKLSIgUHl0aG9uOiA3OSAKLSIgQzogNzkKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmggc2V0IHRleHR3aWR0aD03OQotCi0iIFR1cm4gb2ZmIHNldHRpbmdzIGluICdmb3JtYXRvcHRpb25zJyByZWxhdGluZyB0byBjb21tZW50IGZvcm1hdHRpbmcuCi0iIC0gYyA6IGRvIG5vdCBhdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiB3cmFwcGluZyBiYXNlZCBvbgotIiAgICAndGV4dHdpZHRoJwotIiAtIG8gOiBkbyBub3QgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIHVzaW5nICdvJyBvciAnTycgZnJvbSBjb21tYW5kIG1vZGUKLSIgLSByIDogZG8gbm90IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiBoaXR0aW5nIDxFbnRlcj4gaW4gaW5zZXJ0IG1vZGUKLSIgUHl0aG9uOiBub3QgbmVlZGVkCi0iIEM6IHByZXZlbnRzIGluc2VydGlvbiBvZiAnKicgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBsaW5lIGluIGEgY29tbWVudAotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouYywqLmggc2V0IGZvcm1hdG9wdGlvbnMtPWMgZm9ybWF0b3B0aW9ucy09byBmb3JtYXRvcHRpb25zLT1yCi0KLSIgVXNlIFVOSVggKFxuKSBsaW5lIGVuZGluZ3MuCi0iIE9ubHkgdXNlZCBmb3IgbmV3IGZpbGVzIHNvIGFzIHRvIG5vdCBmb3JjZSBleGlzdGluZyBmaWxlcyB0byBjaGFuZ2UgdGhlaXIKLSIgbGluZSBlbmRpbmdzLgotIiBQeXRob246IHllcwotIiBDOiB5ZXMKLWF1IEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oIHNldCBmaWxlZm9ybWF0PXVuaXgKLQotCi0iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIgVGhlIGZvbGxvd2luZyBzZWN0aW9uIGNvbnRhaW5zIHN1Z2dlc3RlZCBzZXR0aW5ncy4gIFdoaWxlIGluIG5vIHdheSByZXF1aXJlZAotIiB0byBtZWV0IGNvZGluZyBzdGFuZGFyZHMsIHRoZXkgYXJlIGhlbHBmdWwuCi0KLSIgU2V0IHRoZSBkZWZhdWx0IGZpbGUgZW5jb2RpbmcgdG8gVVRGLTg6IGBgc2V0IGVuY29kaW5nPXV0Zi04YGAKLQotIiBQdXRzIGEgbWFya2VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFVURiBhbmQKLSIgVUNTIGVuY29kaW5nIChXQVJOSU5HOiBjYW4gdHJpY2sgc2hlbGxzIGludG8gdGhpbmtpbmcgYSB0ZXh0IGZpbGUgaXMgYWN0dWFsbHkKLSIgYSBiaW5hcnkgZmlsZSB3aGVuIGV4ZWN1dGluZyB0aGUgdGV4dCBmaWxlKTogYGBzZXQgYm9tYmBgCi0KLSIgRm9yIGZ1bGwgc3ludGF4IGhpZ2hsaWdodGluZzoKLSJgYGxldCBweXRob25faGlnaGxpZ2h0X2FsbD0xYGAKLSJgYHN5bnRheCBvbmBgCi0KLSIgQXV0b21hdGljYWxseSBpbmRlbnQgYmFzZWQgb24gZmlsZSB0eXBlOiBgYGZpbGV0eXBlIGluZGVudCBvbmBgCi0iIEtlZXAgaW5kZW50YXRpb24gbGV2ZWwgZnJvbSBwcmV2aW91cyBsaW5lOiBgYHNldCBhdXRvaW5kZW50YGAKLQotIiBGb2xkaW5nIGJhc2VkIG9uIGluZGVudGF0aW9uOiBgYHNldCBmb2xkbWV0aG9kPWluZGVudGBgCmRpZmYgLS1naXQgYS9NaXNjL2NvdmVyaXR5X21vZGVsLmMgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmM2FlYgotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvY292ZXJpdHlfbW9kZWwuYwpAQCAtMCwwICsxLDEzMiBAQAorLyogQ292ZXJpdHkgU2NhbiBtb2RlbAorICoKKyAqIFRoaXMgaXMgYSBtb2RlbGluZyBmaWxlIGZvciBDb3Zlcml0eSBTY2FuLiBNb2RlbGluZyBoZWxwcyB0byBhdm9pZCBmYWxzZQorICogcG9zaXRpdmVzLgorICoKKyAqIC0gQSBtb2RlbCBmaWxlIGNhbid0IGltcG9ydCBhbnkgaGVhZGVyIGZpbGVzLgorICogLSBUaGVyZWZvcmUgb25seSBzb21lIGJ1aWx0LWluIHByaW1pdGl2ZXMgbGlrZSBpbnQsIGNoYXIgYW5kIHZvaWQgYXJlCisgKiAgIGF2YWlsYWJsZSBidXQgbm90IHdjaGFyX3QsIE5VTEwgZXRjLgorICogLSBNb2RlbGluZyBkb2Vzbid0IG5lZWQgZnVsbCBzdHJ1Y3RzIGFuZCB0eXBlZGVmcy4gUnVkaW1lbnRhcnkgc3RydWN0cworICogICBhbmQgc2ltaWxhciB0eXBlcyBhcmUgc3VmZmljaWVudC4KKyAqIC0gQW4gdW5pbml0aWFsaXplZCBsb2NhbCBwb2ludGVyIGlzIG5vdCBhbiBlcnJvci4gSXQgc2lnbmlmaWVzIHRoYXQgdGhlCisgKiAgIHZhcmlhYmxlIGNvdWxkIGJlIGVpdGhlciBOVUxMIG9yIGhhdmUgc29tZSBkYXRhLgorICoKKyAqIENvdmVyaXR5IFNjYW4gZG9lc24ndCBwaWNrIHVwIG1vZGlmaWNhdGlvbnMgYXV0b21hdGljYWxseS4gVGhlIG1vZGVsIGZpbGUKKyAqIG11c3QgYmUgdXBsb2FkZWQgYnkgYW4gYWRtaW4gaW4gdGhlIGFuYWx5c2lzIHNldHRpbmdzIG9mCisgKiBodHRwOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvMjAwCisgKi8KKworLyogZHVtbXkgZGVmaW5pdGlvbnMsIGluIG1vc3QgY2FzZXMgc3RydWN0IGZpZWxkcyBhcmVuJ3QgcmVxdWlyZWQuICovCisKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNkZWZpbmUgYXNzZXJ0KG9wKSAvKiBlbXB0eSAqLwordHlwZWRlZiBpbnQgc2RpZ2l0OwordHlwZWRlZiBsb25nIFB5X3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZyBQWV9MT05HX0xPTkc7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHdjaGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCB7fSBQeU9iamVjdDsKK3R5cGVkZWYgc3RydWN0IHt9IGdyYW1tYXI7Cit0eXBlZGVmIHN0cnVjdCB7fSBESVI7Cit0eXBlZGVmIHN0cnVjdCB7fSBSRklMRTsKKworLyogUHl0aG9uL3B5dGhvbnJ1bi5jCisgKiByZXNvdXJlY2UgbGVhayBmYWxzZSBwb3NpdGl2ZSAqLworCit2b2lkIFB5X0ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKSB7CisgICAgX19jb3Zlcml0eV9wYW5pY19fKCk7Cit9CisKKy8qIE9iamVjdHMvbG9uZ29iamVjdC5jCisgKiBORUdBVElWRV9SRVRVUk5TIGZhbHNlIHBvc2l0aXZlICovCisKK3N0YXRpYyBQeU9iamVjdCAqZ2V0X3NtYWxsX2ludChzZGlnaXQgaXZhbCkKK3sKKyAgICAvKiBOZXZlciByZXR1cm5zIE5VTEwgKi8KKyAgICBQeU9iamVjdCAqcDsKKyAgICBhc3NlcnQocCAhPSBOVUxMKTsKKyAgICByZXR1cm4gcDsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tTG9uZyhsb25nIGl2YWwpCit7CisgICAgUHlPYmplY3QgKnA7CisgICAgaW50IG1heWJlOworCisgICAgaWYgKChpdmFsID49IC01KSAmJiAoaXZhbCA8IDI1NyArIDUpKSB7CisgICAgICAgIHAgPSBnZXRfc21hbGxfaW50KGl2YWwpOworICAgICAgICBhc3NlcnQocCAhPSBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIGlmIChtYXliZSkKKyAgICAgICAgcmV0dXJuIHA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tTG9uZ0xvbmcoUFlfTE9OR19MT05HIGl2YWwpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpdmFsKTsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tU3NpemVfdChQeV9zc2l6ZV90IGl2YWwpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpdmFsKTsKK30KKworLyogdGFpbnRlZCBzaW5rcworICoKKyAqIENvdmVyaXR5IGNvbnNpZGVycyBhcmd2LCBlbnZpcm9uLCByZWFkKCkgZGF0YSBldGMgYXMgdGFpbmVkLgorICovCisKK1B5T2JqZWN0ICpQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogUHl0aG9uL2ZpbGV1dGlscy5jICovCit3Y2hhcl90ICpfUHlfY2hhcjJ3Y2hhcihjb25zdCBjaGFyKiBhcmcsIHNpemVfdCAqc2l6ZSkKK3sKKyAgIHdjaGFyX3QgKnc7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGFyZyk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKHNpemUpOworICAgcmV0dXJuIHc7Cit9CisKKy8qIFBhcnNlci9wZ2VubWFpbi5jICovCitncmFtbWFyICpnZXRncmFtbWFyKGNoYXIgKmZpbGVuYW1lKQoreworICAgIGdyYW1tYXIgKmc7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gZzsKK30KKworLyogUHl0aG9uL21hcnNoYWwuYyAqLworCitzdGF0aWMgUHlfc3NpemVfdCByX3N0cmluZyhjaGFyICpzLCBQeV9zc2l6ZV90IG4sIFJGSUxFICpwKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9zdHJpbmdfYXJndW1lbnRfXyhzKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgcl9sb25nKFJGSUxFICpwKQoreworICAgIGxvbmcgbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKKworICAgIHJfc3RyaW5nKChjaGFyICopYnVmZmVyLCA0LCBwKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX3Nhbml0aXplX2NvbnRlbnRfXyhidWZmZXIpOworICAgIGwgPSAobG9uZylidWZmZXI7CisgICAgcmV0dXJuIGw7Cit9CisKKy8qIENvdmVyaXR5IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGF0IGZkb3BlbmRpcigpIG1heSB0YWtlIG93bmVyc2hpcCBvZiBmZC4gKi8KKworRElSICpmZG9wZW5kaXIoaW50IGZkKSB7CisgICAgRElSICpkOworICAgIGlmIChkKSB7CisgICAgICAgIF9fY292ZXJpdHlfY2xvc2VfXyhmZCk7CisgICAgfQorICAgIHJldHVybiBkOworfQorCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KaW5kZXggYWMzYTJjNy4uMGI5YjVkYyAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24tY29uZmlnLmluCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgpAQCAtMSw2ICsxLDggQEAKICMhQEVYRU5BTUVACiAjIC0qLSBweXRob24gLSotCiAKKyMgS2VlcCB0aGlzIHNjcmlwdCBpbiBzeW5jIHdpdGggcHl0aG9uLWNvbmZpZy5zaC5pbgorCiBpbXBvcnQgZ2V0b3B0CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWEzZGJlCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24tY29uZmlnLnNoLmluCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKworIyBLZWVwIHRoaXMgc2NyaXB0IGluIHN5bmMgd2l0aCBweXRob24tY29uZmlnLmluCisKK2V4aXRfd2l0aF91c2FnZSAoKQoreworICAgIGVjaG8gIlVzYWdlOiAkMCAtLXByZWZpeHwtLWV4ZWMtcHJlZml4fC0taW5jbHVkZXN8LS1saWJzfC0tY2ZsYWdzfC0tbGRmbGFnc3wtLWV4dGVuc2lvbi1zdWZmaXh8LS1oZWxwfC0tYWJpZmxhZ3N8LS1jb25maWdkaXIiCisgICAgZXhpdCAkMQorfQorCitpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorICAgIGV4aXRfd2l0aF91c2FnZSAxCitmaQorCisjIFJldHVybnMgdGhlIGFjdHVhbCBwcmVmaXggd2hlcmUgdGhpcyBzY3JpcHQgd2FzIGluc3RhbGxlZCB0by4KK2luc3RhbGxlZF9wcmVmaXggKCkKK3sKKyAgICBSRVNVTFQ9JChkaXJuYW1lICQoY2QgJChkaXJuYW1lICIkMSIpICYmIHB3ZCAtUCkpCisgICAgaWYgd2hpY2ggcmVhZGxpbmsgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICBpZiByZWFkbGluayAtZiAiJFJFU1VMVCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgUkVTVUxUPSQocmVhZGxpbmsgLWYgIiRSRVNVTFQiKQorICAgICAgICBmaQorICAgIGZpCisgICAgZWNobyAkUkVTVUxUCit9CisKK3ByZWZpeF9idWlsZD0iQHByZWZpeEAiCitwcmVmaXhfcmVhbD0kKGluc3RhbGxlZF9wcmVmaXggIiQwIikKKworIyBVc2Ugc2VkIHRvIGZpeCBwYXRocyBmcm9tIHRoZWlyIGJ1aWx0LXRvIGxvY2F0aW9ucyB0byB0aGVpciBpbnN0YWxsZWQtdG8KKyMgbG9jYXRpb25zLgorcHJlZml4PSQoZWNobyAiJHByZWZpeF9idWlsZCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2V4ZWNfcHJlZml4X2J1aWxkPSJAZXhlY19wcmVmaXhAIgorZXhlY19wcmVmaXg9JChlY2hvICIkZXhlY19wcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRleGVjX3ByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2luY2x1ZGVkaXI9JChlY2hvICJAaW5jbHVkZWRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitsaWJkaXI9JChlY2hvICJAbGliZGlyQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK0NGTEFHUz0kKGVjaG8gIkBDRkxBR1NAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorVkVSU0lPTj0iQFZFUlNJT05AIgorTElCTT0iQExJQk1AIgorTElCQz0iQExJQkNAIgorU1lTTElCUz0iJExJQk0gJExJQkMiCitBQklGTEFHUz0iQEFCSUZMQUdTQCIKK0xJQlM9IkBMSUJTQCAkU1lTTElCUyAtbHB5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK0JBU0VDRkxBR1M9IkBCQVNFQ0ZMQUdTQCIKK0xETElCUkFSWT0iQExETElCUkFSWUAiCitMSU5LRk9SU0hBUkVEPSJATElOS0ZPUlNIQVJFREAiCitPUFQ9IkBPUFRAIgorUFlfRU5BQkxFX1NIQVJFRD0iQFBZX0VOQUJMRV9TSEFSRURAIgorTERWRVJTSU9OPSJATERWRVJTSU9OQCIKK0xJQkRFU1Q9JHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059CitMSUJQTD0kKGVjaG8gIkBMSUJQTEAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitTTz0iQFNPQCIKK1BZVEhPTkZSQU1FV09SSz0iQFBZVEhPTkZSQU1FV09SS0AiCitJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorUExBVElOQ0RJUj0iLUkkaW5jbHVkZWRpci9weXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCisKKyMgU2NhbiBmb3IgLS1oZWxwIG9yIHVua25vd24gYXJndW1lbnQuCitmb3IgQVJHIGluICQqCitkbworICAgIGNhc2UgJEFSRyBpbgorICAgICAgICAtLWhlbHApCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMAorICAgICAgICA7OworICAgICAgICAtLXByZWZpeHwtLWV4ZWMtcHJlZml4fC0taW5jbHVkZXN8LS1saWJzfC0tY2ZsYWdzfC0tbGRmbGFnc3wtLWV4dGVuc2lvbi1zdWZmaXh8LS1hYmlmbGFnc3wtLWNvbmZpZ2RpcikKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGV4aXRfd2l0aF91c2FnZSAxCisgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitmb3IgQVJHIGluICIkQCIKK2RvCisgICAgY2FzZSAiJEFSRyIgaW4KKyAgICAgICAgLS1wcmVmaXgpCisgICAgICAgICAgICBlY2hvICIkcHJlZml4IgorICAgICAgICA7OworICAgICAgICAtLWV4ZWMtcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJGV4ZWNfcHJlZml4IgorICAgICAgICA7OworICAgICAgICAtLWluY2x1ZGVzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiIKKyAgICAgICAgOzsKKyAgICAgICAgLS1jZmxhZ3MpCisgICAgICAgICAgICBlY2hvICIkSU5DRElSICRQTEFUSU5DRElSICRCQVNFQ0ZMQUdTICRDRkxBR1MgJE9QVCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1saWJzKQorICAgICAgICAgICAgZWNobyAiJExJQlMiCisgICAgICAgIDs7CisgICAgICAgIC0tbGRmbGFncykKKyAgICAgICAgICAgIExJTktGT1JTSEFSRURVU0VEPQorICAgICAgICAgICAgaWYgWyAteiAiJFBZVEhPTkZSQU1FV09SSyIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0kTElOS0ZPUlNIQVJFRAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIExJQlBMVVNFRD0KKyAgICAgICAgICAgIGlmIFsgIiRQWV9FTkFCTEVfU0hBUkVEIiA9ICIwIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIExJQlBMVVNFRD0iLUwkTElCUEwiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWNobyAiJExJQlBMVVNFRCAtTCRsaWJkaXIgJExJQlMgJExJTktGT1JTSEFSRURVU0VEIgorICAgICAgICA7OworICAgICAgICAtLWV4dGVuc2lvbi1zdWZmaXgpCisgICAgICAgICAgICBlY2hvICIkU08iCisgICAgICAgIDs7CisgICAgICAgIC0tYWJpZmxhZ3MpCisgICAgICAgICAgICBlY2hvICIkQUJJRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgIC0tY29uZmlnZGlyKQorICAgICAgICAgICAgZWNobyAiJExJQlBMIgorICAgICAgICA7OworZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24td2luZzUud3ByIGIvTWlzYy9weXRob24td2luZzUud3ByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWFlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi13aW5nNS53cHIKQEAgLTAsMCArMSwxOCBAQAorIyF3aW5nCisjIXZlcnNpb249NS4wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luZyBJREUgcHJvamVjdCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbcHJvamVjdCBhdHRyaWJ1dGVzXQorcHJvai5kaXJlY3RvcnktbGlzdCA9IFt7J2RpcmxvYyc6IGxvYygnLi4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlcyc6IFt1Jy5oZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvdW5pdHRlc3QvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL3VuaXR0ZXN0L3Rlc3QvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0RvYy9idWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcic6ICcqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY3Vyc2l2ZSc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnd2F0Y2hfZm9yX2NoYW5nZXMnOiBUcnVlfV0KK3Byb2ouZmlsZS10eXBlID0gJ3NoYXJlZCcKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLm1hbiBiL01pc2MvcHl0aG9uLm1hbgppbmRleCBiY2IzZWM4Li41MmFlZGVlIDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi5tYW4KKysrIGIvTWlzYy9weXRob24ubWFuCkBAIC0yNiwxMSArMjYsMTQgQEAKIC5CIFwtaQogXQogWwotLkIgXC1tCi0uSSBtb2R1bGUtbmFtZQorLkIgXC1JCiBdCiAuYnIKICAgICAgICBbCisuQiBcLW0KKy5JIG1vZHVsZS1uYW1lCitdCitbCiAuQiBcLXEKIF0KIFsKQEAgLTEzOSw2ICsxNDIsMTMgQEAKIHVzZWZ1bCB0byBpbnNwZWN0IGdsb2JhbCB2YXJpYWJsZXMgb3IgYSBzdGFjayB0cmFjZSB3aGVuIGEgc2NyaXB0CiByYWlzZXMgYW4gZXhjZXB0aW9uLgogLlRQCisuQiBcLUkKK1J1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgXGZCXC1FXGZQIGFuZCBcZkJcLVNcZlAuIEluCitpc29sYXRlZCBtb2RlIHN5cy5wYXRoIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdOKAmXMgZGlyZWN0b3J5IG5vciB0aGUgdXNlcuKAmXMKK3NpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGlnbm9yZWQsIHRvby4KK0Z1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBpbmplY3RpbmcKK21hbGljaW91cyBjb2RlLgorLlRQCiAuQkkgIlwtbSAiIG1vZHVsZS1uYW1lCiBTZWFyY2hlcyAKIC5JIHN5cy5wYXRoIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IGY0NWRlNWMuLjAxZmI4NWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTEwMiw3ICsxMDIsNyBAQAogIyB2YXJpb3VzIHJlYXNvbnM7IHRoZXJlZm9yZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZQogIyBub3JtYWwgb3JkZXIuCiAKLSMgVGhpcyBvbmx5IGNvbnRhaW5zIHRoZSBtaW5pbWFsIHNldCBvZiBtb2R1bGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUgCisjIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlCiAjIHNldHVwLnB5IHNjcmlwdCBpbiB0aGUgcm9vdCBvZiB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgogCiBwb3NpeCBwb3NpeG1vZHVsZS5jCQkjIHBvc2l4IChVTklYKSBzeXN0ZW0gY2FsbHMKQEAgLTExMyw5ICsxMTMsMTEgQEAKIF9jb2RlY3MgX2NvZGVjc21vZHVsZS5jCQkjIGFjY2VzcyB0byB0aGUgYnVpbHRpbiBjb2RlY3MgYW5kIGNvZGVjIHJlZ2lzdHJ5CiBfd2Vha3JlZiBfd2Vha3JlZi5jCQkjIHdlYWsgcmVmZXJlbmNlcwogX2Z1bmN0b29scyBfZnVuY3Rvb2xzbW9kdWxlLmMgICAjIFRvb2xzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zIGFuZCBjYWxsYWJsZSBvYmplY3RzCi1vcGVyYXRvciBvcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCitfb3BlcmF0b3IgX29wZXJhdG9yLmMJICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKIF9jb2xsZWN0aW9ucyBfY29sbGVjdGlvbnNtb2R1bGUuYyAjIENvbnRhaW5lciB0eXBlcwotaXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcgCitpdGVydG9vbHMgaXRlcnRvb2xzbW9kdWxlLmMgICAgIyBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZworYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCitfc3RhdCBfc3RhdC5jCQkJIyBzdGF0LmggaW50ZXJmYWNlCiAKICMgYWNjZXNzIHRvIElTTyBDIGxvY2FsZSBzdXBwb3J0CiBfbG9jYWxlIF9sb2NhbGVtb2R1bGUuYyAgIyAtbGludGwKQEAgLTEzMCwxMiArMTMyLDE1IEBACiAjIGZhdWx0aGFuZGxlciBtb2R1bGUKIGZhdWx0aGFuZGxlciBmYXVsdGhhbmRsZXIuYwogCisjIGRlYnVnIHRvb2wgdG8gdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uCitfdHJhY2VtYWxsb2MgX3RyYWNlbWFsbG9jLmMgaGFzaHRhYmxlLmMKKwogIyBUaGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gdGhpcyBmaWxlIGFyZSBhbGwgY29tbWVudGVkIG91dCBieQogIyBkZWZhdWx0LiAgVXN1YWxseSB0aGV5IGNhbiBiZSBkZXRlY3RlZCBhbmQgYnVpbHQgYXMgZHluYW1pY2FsbHkKICMgbG9hZGVkIG1vZHVsZXMgYnkgdGhlIG5ldyBzZXR1cC5weSBzY3JpcHQgYWRkZWQgaW4gUHl0aG9uIDIuMS4gIElmCi0jIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0byAKLSMgY29tcGlsZSBtb2R1bGVzIHN0YXRpY2FsbHkgaW50byB0aGUgUHl0aG9uIGJpbmFyeSwgb3IgbmVlZCB0byAKLSMgc3BlY2lmeSBzb21lIG9kZCBzZXQgb2YgY29tcGlsZXIgc3dpdGNoZXMsIHlvdSBjYW4gdW5jb21tZW50IHRoZSAKKyMgeW91J3JlIG9uIGEgcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLCB3YW50IHRvCisjIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8KKyMgc3BlY2lmeSBzb21lIG9kZCBzZXQgb2YgY29tcGlsZXIgc3dpdGNoZXMsIHlvdSBjYW4gdW5jb21tZW50IHRoZQogIyBhcHByb3ByaWF0ZSBsaW5lcyBiZWxvdy4KIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNzAsNyArMTc1LDYgQEAKICNfd2Vha3JlZiBfd2Vha3JlZi5jCSMgYmFzaWMgd2VhayByZWZlcmVuY2Ugc3VwcG9ydAogI190ZXN0Y2FwaSBfdGVzdGNhcGltb2R1bGUuYyAgICAjIFB5dGhvbiBDIEFQSSB0ZXN0IG1vZHVsZQogI19yYW5kb20gX3JhbmRvbW1vZHVsZS5jCSMgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IKLSNhdGV4aXQgYXRleGl0bW9kdWxlLmMgICAgICAjIFJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBiZSBydW4gYXQgaW50ZXJwcmV0ZXItc2h1dGRvd24KICNfZWxlbWVudHRyZWUgLUkkKHNyY2RpcikvTW9kdWxlcy9leHBhdCAtREhBVkVfRVhQQVRfQ09ORklHX0ggLURVU0VfUFlFWFBBVF9DQVBJIF9lbGVtZW50dHJlZS5jCSMgZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IKICNfcGlja2xlIF9waWNrbGUuYwkjIHBpY2tsZSBhY2NlbGVyYXRvcgogI19kYXRldGltZSBfZGF0ZXRpbWVtb2R1bGUuYwkjIGRhdGV0aW1lIGFjY2VsZXJhdG9yCkBAIC0xODUsNyArMTg5LDcgQEAKICMgc3VwcG9ydGVkLi4uKQogCiAjZmNudGwgZmNudGxtb2R1bGUuYwkjIGZjbnRsKDIpIGFuZCBpb2N0bCgyKQotI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykgCisjc3B3ZCBzcHdkbW9kdWxlLmMJCSMgc3B3ZCgzKQogI2dycCBncnBtb2R1bGUuYwkJIyBncnAoMykKICNzZWxlY3Qgc2VsZWN0bW9kdWxlLmMJIyBzZWxlY3QoMik7IG5vdCBvbiBhbmNpZW50IFN5c3RlbSBWCiAKQEAgLTMwMSw3ICszMDUsNyBAQAogCiAjX2N1cnNlcyBfY3Vyc2VzbW9kdWxlLmMgLWxjdXJzZXMgLWx0ZXJtY2FwCiAjIFdyYXBwZXIgZm9yIHRoZSBwYW5lbCBsaWJyYXJ5IHRoYXQncyBwYXJ0IG9mIG5jdXJzZXMgYW5kIFNZU1YgY3Vyc2VzLgotI19jdXJzZXNfcGFuZWwgX2N1cnNlc19wYW5lbC5jIC1scGFuZWwgLWxuY3Vyc2VzIAorI19jdXJzZXNfcGFuZWwgX2N1cnNlc19wYW5lbC5jIC1scGFuZWwgLWxuY3Vyc2VzCiAKIAogIyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBzZW1hbnRpY3MuICBZb3Ugd2lsbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwppbmRleCBmYWNhOGNmLi4wMmI1NWQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwpAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogI2luY2x1ZGUgIlB5dGhvbi5oIgogCitfUHlfSURFTlRJRklFUihpbnNlcnQpOworCiBzdGF0aWMgUHlfc3NpemVfdAogaW50ZXJuYWxfYmlzZWN0X3JpZ2h0KFB5T2JqZWN0ICpsaXN0LCBQeU9iamVjdCAqaXRlbSwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSkKIHsKQEAgLTkwLDggKzkyLDYgQEAKICAgICAgICAgaWYgKFB5TGlzdF9JbnNlcnQobGlzdCwgaW5kZXgsIGl0ZW0pIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGluc2VydCk7Ci0KICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChsaXN0LCAmUHlJZF9pbnNlcnQsICJuTyIsIGluZGV4LCBpdGVtKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTUsNyArMTk1LDYgQEAKICAgICAgICAgaWYgKFB5TGlzdF9JbnNlcnQobGlzdCwgaW5kZXgsIGl0ZW0pIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGluc2VydCk7CiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnoybW9kdWxlLmMgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwppbmRleCAzZjdhNmNmLi5mZDA1ZGUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iejJtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwpAQCAtMzYsOCArMzYsNiBAQAogI2RlZmluZSBSRUxFQVNFX0xPQ0sob2JqKQogI2VuZGlmCiAKLSNkZWZpbmUgTUlOKFgsIFkpICgoKFgpIDwgKFkpKSA/IChYKSA6IChZKSkKLQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMTQ5LDcgKzE0Nyw3IEBACiAgICAgYy0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIGMtPmJ6cy5hdmFpbF9pbiA9IDA7CiAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBjLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtMTU3LDcgKzE1NSw3IEBACiAgICAgICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgICAgIERvIGNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9pbiA9PSAwICYmIGxlbiA+IDApIHsKLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGMtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogCkBAIC0xNzMsNyArMTcxLDcgQEAKICAgICAgICAgICAgICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0yNTgsNiArMjU2LDI0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkKgorQloyX01hbGxvYyh2b2lkKiBjdHgsIGludCBpdGVtcywgaW50IHNpemUpCit7CisgICAgaWYgKGl0ZW1zIDwgMCB8fCBzaXplIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKChzaXplX3QpaXRlbXMgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gKHNpemVfdClzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogY29tcHJlc3MoKSBhbmQgZGVjb21wcmVzcygpCisgICAgICAgcmVsZWFzZSB0aGUgR0lMICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorQloyX0ZyZWUodm9pZCogY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiBzdGF0aWMgaW50CiBCWjJDb21wcmVzc29yX2luaXQoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC0yODAsNiArMjk2LDkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIHNlbGYtPmJ6cy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmJ6cy5iemFsbG9jID0gQloyX01hbGxvYzsKKyAgICBzZWxmLT5ienMuYnpmcmVlID0gQloyX0ZyZWU7CiAgICAgYnplcnJvciA9IEJaMl9iekNvbXByZXNzSW5pdCgmc2VsZi0+YnpzLCBjb21wcmVzc2xldmVsLCAwLCAwKTsKICAgICBpZiAoY2F0Y2hfYnoyX2Vycm9yKGJ6ZXJyb3IpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzc5LDEwICszOTgsMTAgQEAKICAgICBkLT5ienMubmV4dF9pbiA9IGRhdGE7CiAgICAgLyogT24gYSA2NC1iaXQgc3lzdGVtLCBsZW4gbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9pbiAoYW4gdW5zaWduZWQgaW50KS4KICAgICAgICBEbyBkZWNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KLSAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKICAgICBkLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgZC0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC00MDgsNyArNDI3LDcgQEAKICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9pbiA9PSAwKSB7CiAgICAgICAgICAgICBpZiAobGVuID09IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KVB5X01JTihsZW4sIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9vdXQgPT0gMCkgewpAQCAtNDE5LDcgKzQzOCw3IEBACiAgICAgICAgICAgICAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKICAgICAgICAgICAgICAgICBidWZmZXJfbGVmdCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSAtIGRhdGFfc2l6ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBNSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkYXRhX3NpemUgIT0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCA0MDAzN2IxLi4wYjA5M2FiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtMTg5LDkgKzE4OSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgICAgICByZWdpc3RlciBjaGFyIGM7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBjaGFyIGM7CisgICAgICAgIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAvKiBUaGVyZSdzIGF0IGxlYXN0IGVub3VnaCByb29tIGZvciBhIGhleCBlc2NhcGUgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCmluZGV4IGM2Yzc5ODMuLjMxMGU2NzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYwpAQCAtMywzMCArMywzMiBAQAogCiAvKiBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgYSBkZXF1ZSgpIGRhdGF0eXBlCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KLSAgIENvcHlyaWdodCAoYykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICovCiAKIC8qIFRoZSBibG9jayBsZW5ndGggbWF5IGJlIHNldCB0byBhbnkgbnVtYmVyIG92ZXIgMS4gIExhcmdlciBudW1iZXJzCi0gKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBidXQgdGFrZSBtb3JlCi0gKiBtZW1vcnkuICBJZGVhbGx5LCBCTE9DS0xFTiBzaG91bGQgYmUgc2V0IHdpdGggYW4gZXllIHRvIHRoZQotICogbGVuZ3RoIG9mIGEgY2FjaGUgbGluZS4KKyAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yLCBnaXZlIGZhc3RlcgorICogaW5kZXhpbmcgYW5kIHJvdGF0aW9uLCBhbmQgcmVkdWNlIHRoZSBsaW5rOjpkYXRhIG92ZXJoZWFkIHJhdGlvLgorICoKKyAqIElkZWFsbHksIHRoZSBibG9jayBsZW5ndGggd2lsbCBiZSBzZXQgdG8gdHdvIGxlc3MgdGhhbiBzb21lCisgKiBtdWx0aXBsZSBvZiB0aGUgY2FjaGUtbGluZSBsZW5ndGggKHNvIHRoYXQgdGhlIGZ1bGwgYmxvY2sKKyAqIGluY2x1ZGluZyB0aGUgbGVmdGxpbmsgYW5kIHJpZ2h0bGluayB3aWxsIGZpdCBuZWF0bHkgaW50bworICogY2FjaGUgbGluZXMpLgogICovCiAKICNkZWZpbmUgQkxPQ0tMRU4gNjIKICNkZWZpbmUgQ0VOVEVSICgoQkxPQ0tMRU4gLSAxKSAvIDIpCiAKIC8qIEEgYGRlcXVlb2JqZWN0YCBpcyBjb21wb3NlZCBvZiBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBgYmxvY2tgIG5vZGVzLgotICogVGhpcyBsaXN0IGlzIG5vdCBjaXJjdWxhciAodGhlIGxlZnRtb3N0IGJsb2NrIGhhcyBsZWZ0bGluaz09TlVMTCwKLSAqIGFuZCB0aGUgcmlnaHRtb3N0IGJsb2NrIGhhcyByaWdodGxpbms9PU5VTEwpLiAgQSBkZXF1ZSBkJ3MgZmlyc3QKLSAqIGVsZW1lbnQgaXMgYXQgZC5sZWZ0YmxvY2tbbGVmdGluZGV4XSBhbmQgaXRzIGxhc3QgZWxlbWVudCBpcyBhdAotICogZC5yaWdodGJsb2NrW3JpZ2h0aW5kZXhdOyBub3RlIHRoYXQsIHVubGlrZSBhcyBmb3IgUHl0aG9uIHNsaWNlCi0gKiBpbmRpY2VzLCB0aGVzZSBpbmRpY2VzIGFyZSBpbmNsdXNpdmUgb24gYm90aCBlbmRzLiAgQnkgYmVpbmcgaW5jbHVzaXZlCi0gKiBvbiBib3RoIGVuZHMsIGFsZ29yaXRobXMgZm9yIGxlZnQgYW5kIHJpZ2h0IG9wZXJhdGlvbnMgYmVjb21lCi0gKiBzeW1tZXRyaWNhbCB3aGljaCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCi0gKgogICogVGhlIGxpc3Qgb2YgYmxvY2tzIGlzIG5ldmVyIGVtcHR5LCBzbyBkLmxlZnRibG9jayBhbmQgZC5yaWdodGJsb2NrCi0gKiBhcmUgbmV2ZXIgZXF1YWwgdG8gTlVMTC4KKyAqIGFyZSBuZXZlciBlcXVhbCB0byBOVUxMLiAgVGhlIGxpc3QgaXMgbm90IGNpcmN1bGFyLgorICoKKyAqIEEgZGVxdWUgZCdzIGZpcnN0IGVsZW1lbnQgaXMgYXQgZC5sZWZ0YmxvY2tbbGVmdGluZGV4XQorICogYW5kIGl0cyBsYXN0IGVsZW1lbnQgaXMgYXQgZC5yaWdodGJsb2NrW3JpZ2h0aW5kZXhdLgorICogVW5saWtlIFB5dGhvbiBzbGljZSBpbmRpY2VzLCB0aGVzZSBpbmRpY2VzIGFyZSBpbmNsdXNpdmUKKyAqIG9uIGJvdGggZW5kcy4gIFRoaXMgbWFrZXMgdGhlIGFsZ29yaXRobXMgZm9yIGxlZnQgYW5kCisgKiByaWdodCBvcGVyYXRpb25zIG1vcmUgc3ltbWV0cmljYWwgYW5kIHNpbXBsaWZpZXMgdGhlIGRlc2lnbi4KICAqCiAgKiBUaGUgaW5kaWNlcywgZC5sZWZ0aW5kZXggYW5kIGQucmlnaHRpbmRleCBhcmUgYWx3YXlzIGluIHRoZSByYW5nZQogICogICAgIDAgPD0gaW5kZXggPCBCTE9DS0xFTi4KQEAgLTQ3LDQyICs0OSw2MCBAQAogCiB0eXBlZGVmIHN0cnVjdCBCTE9DSyB7CiAgICAgc3RydWN0IEJMT0NLICpsZWZ0bGluazsKLSAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKICAgICBQeU9iamVjdCAqZGF0YVtCTE9DS0xFTl07CisgICAgc3RydWN0IEJMT0NLICpyaWdodGxpbms7CiB9IGJsb2NrOwogCisvKiBGb3IgZGVidWcgYnVpbGRzLCBhZGQgZXJyb3IgY2hlY2tpbmcgdG8gdHJhY2sgdGhlIGVuZHBvaW50cworICogaW4gdGhlIGNoYWluIG9mIGxpbmtzLiAgVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHRoYXQgbGluaworICogYXNzaWdubWVudHMgb25seSB0YWtlIHBsYWNlIGF0IGVuZHBvaW50cyBzbyB0aGF0IGxpbmtzIGFscmVhZHkKKyAqIGluIHVzZSBkbyBub3QgZ2V0IG92ZXJ3cml0dGVuLgorICoKKyAqIENIRUNLX0VORCBzaG91bGQgaGFwcGVuIGJlZm9yZSBlYWNoIGFzc2lnbm1lbnQgdG8gYSBibG9jaydzIGxpbmsgZmllbGQuCisgKiBNQVJLX0VORCBzaG91bGQgaGFwcGVuIHdoZW5ldmVyIGEgbGluayBmaWVsZCBiZWNvbWVzIGEgbmV3IGVuZHBvaW50LgorICogVGhpcyBoYXBwZW5zIHdoZW4gbmV3IGJsb2NrcyBhcmUgYWRkZWQgb3Igd2hlbmV2ZXIgYW4gZXhpc3RpbmcKKyAqIGJsb2NrIGlzIGZyZWVkIGxlYXZpbmcgYW5vdGhlciBleGlzdGluZyBibG9jayBhcyB0aGUgbmV3IGVuZHBvaW50LgorICovCisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIE1BUktfRU5EKGxpbmspICBsaW5rID0gTlVMTDsKKyNkZWZpbmUgQ0hFQ0tfRU5EKGxpbmspIGFzc2VydChsaW5rID09IE5VTEwpOworI2RlZmluZSBDSEVDS19OT1RfRU5EKGxpbmspIGFzc2VydChsaW5rICE9IE5VTEwpOworI2Vsc2UKKyNkZWZpbmUgTUFSS19FTkQobGluaykKKyNkZWZpbmUgQ0hFQ0tfRU5EKGxpbmspCisjZGVmaW5lIENIRUNLX05PVF9FTkQobGluaykKKyNlbmRpZgorCisvKiBBIHNpbXBsZSBmcmVlbGlzdGluZyBzY2hlbWUgaXMgdXNlZCB0byBtaW5pbWl6ZSBjYWxscyB0byB0aGUgbWVtb3J5CisgICBhbGxvY2F0b3IuICBJdCBhY2NvbW9kYXRlcyBjb21tb24gdXNlIGNhc2VzIHdoZXJlIG5ldyBibG9ja3MgYXJlIGJlaW5nCisgICBhZGRlZCBhdCBhYm91dCB0aGUgc2FtZSByYXRlIGFzIG9sZCBibG9ja3MgYXJlIGJlaW5nIGZyZWVkLgorICovCisKICNkZWZpbmUgTUFYRlJFRUJMT0NLUyAxMAogc3RhdGljIFB5X3NzaXplX3QgbnVtZnJlZWJsb2NrcyA9IDA7CiBzdGF0aWMgYmxvY2sgKmZyZWVibG9ja3NbTUFYRlJFRUJMT0NLU107CiAKIHN0YXRpYyBibG9jayAqCi1uZXdibG9jayhibG9jayAqbGVmdGxpbmssIGJsb2NrICpyaWdodGxpbmssIFB5X3NzaXplX3QgbGVuKSB7CituZXdibG9jayhQeV9zc2l6ZV90IGxlbikgewogICAgIGJsb2NrICpiOwotICAgIC8qIFRvIHByZXZlbnQgbGVuIGZyb20gb3ZlcmZsb3dpbmcgUFlfU1NJWkVfVF9NQVggb24gNjQtYml0IG1hY2hpbmVzLCB3ZQotICAgICAqIHJlZnVzZSB0byBhbGxvY2F0ZSBuZXcgYmxvY2tzIGlmIHRoZSBjdXJyZW50IGxlbiBpcyBkYW5nZXJvdXNseQotICAgICAqIGNsb3NlLiAgVGhlcmUgaXMgc29tZSBleHRyYSBtYXJnaW4gdG8gcHJldmVudCBzcHVyaW91cyBhcml0aG1ldGljCi0gICAgICogb3ZlcmZsb3dzIGF0IHZhcmlvdXMgcGxhY2VzLiAgVGhlIGZvbGxvd2luZyBjaGVjayBlbnN1cmVzIHRoYXQKLSAgICAgKiB0aGUgYmxvY2tzIGFsbG9jYXRlZCB0byB0aGUgZGVxdWUsIGluIHRoZSB3b3JzdCBjYXNlLCBjYW4gb25seQotICAgICAqIGhhdmUgUFlfU1NJWkVfVF9NQVgtMiBlbnRyaWVzIGluIHRvdGFsLgotICAgICAqLworICAgIC8qIFRvIHByZXZlbnQgbGVuIGZyb20gb3ZlcmZsb3dpbmcgUFlfU1NJWkVfVF9NQVgsIHdlIHJlZnVzZSB0bworICAgICAqIGFsbG9jYXRlIG5ldyBibG9ja3MgaWYgdGhlIGN1cnJlbnQgbGVuIGlzIG5lYXJpbmcgb3ZlcmZsb3cuICovCiAgICAgaWYgKGxlbiA+PSBQWV9TU0laRV9UX01BWCAtIDIqQkxPQ0tMRU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGFkZCBtb3JlIGJsb2NrcyB0byB0aGUgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChudW1mcmVlYmxvY2tzKSB7Ci0gICAgICAgIG51bWZyZWVibG9ja3MgLT0gMTsKLSAgICAgICAgYiA9IGZyZWVibG9ja3NbbnVtZnJlZWJsb2Nrc107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYiA9IFB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spKTsKLSAgICAgICAgaWYgKGIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgIG51bWZyZWVibG9ja3MtLTsKKyAgICAgICAgcmV0dXJuIGZyZWVibG9ja3NbbnVtZnJlZWJsb2Nrc107CiAgICAgfQotICAgIGItPmxlZnRsaW5rID0gbGVmdGxpbms7Ci0gICAgYi0+cmlnaHRsaW5rID0gcmlnaHRsaW5rOwotICAgIHJldHVybiBiOworICAgIGIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSk7CisgICAgaWYgKGIgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk3LDE0ICsxMTcsMTMgQEAKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdF9WQVJfSEVBRAogICAgIGJsb2NrICpsZWZ0YmxvY2s7CiAgICAgYmxvY2sgKnJpZ2h0YmxvY2s7CiAgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXg7ICAgICAgIC8qIGluIHJhbmdlKEJMT0NLTEVOKSAqLwogICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleDsgICAgICAvKiBpbiByYW5nZShCTE9DS0xFTikgKi8KLSAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBsb25nIHN0YXRlOyAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGluZGljZXMgbW92ZSAqLwogICAgIFB5X3NzaXplX3QgbWF4bGVuOwotICAgIGxvbmcgc3RhdGU7ICAgICAgICAgLyogaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGluZGljZXMgbW92ZSAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH0gZGVxdWVvYmplY3Q7CiAKQEAgLTExOCw5ICsxMzcsOSBAQAogICovCiAKICNkZWZpbmUgVFJJTShkLCBwb3BmdW5jdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGQtPm1heGxlbiAhPSAtMSAmJiBkLT5sZW4gPiBkLT5tYXhsZW4pIHsgICAgICAgICAgICAgICAgXAorICAgIGlmIChkLT5tYXhsZW4gIT0gLTEgJiYgUHlfU0laRShkKSA+IGQtPm1heGxlbikgeyAgICAgICBcCiAgICAgICAgIFB5T2JqZWN0ICpydiA9IHBvcGZ1bmN0aW9uKGQsIE5VTEwpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIGFzc2VydChydiAhPSBOVUxMICAmJiAgZC0+bGVuIDw9IGQtPm1heGxlbik7ICAgICAgICBcCisgICAgICAgIGFzc2VydChydiAhPSBOVUxMICAmJiAgUHlfU0laRShkKSA8PSBkLT5tYXhsZW4pOyAgICBcCiAgICAgICAgIFB5X0RFQ1JFRihydik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0xMzcsMTggKzE1NiwyMCBAQAogICAgIGlmIChkZXF1ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGIgPSBuZXdibG9jayhOVUxMLCBOVUxMLCAwKTsKKyAgICBiID0gbmV3YmxvY2soMCk7CiAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoZGVxdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAKICAgICBhc3NlcnQoQkxPQ0tMRU4gPj0gMik7CiAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CiAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOwogICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBDRU5URVIgKyAxOwogICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQ0VOVEVSOwotICAgIGRlcXVlLT5sZW4gPSAwOworICAgIFB5X1NJWkUoZGVxdWUpID0gMDsKICAgICBkZXF1ZS0+c3RhdGUgPSAwOwogICAgIGRlcXVlLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgZGVxdWUtPm1heGxlbiA9IC0xOwpAQCAtMTYyLDE3ICsxODMsMTcgQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBibG9jayAqcHJldmJsb2NrOwogCi0gICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGZyb20gYW4gZW1wdHkgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGl0ZW0gPSBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF07CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXgtLTsKLSAgICBkZXF1ZS0+bGVuLS07CisgICAgUHlfU0laRShkZXF1ZSktLTsKICAgICBkZXF1ZS0+c3RhdGUrKzsKIAogICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKICAgICAgICAgICAgIC8qIHJlLWNlbnRlciBpbnN0ZWFkIG9mIGZyZWVpbmcgYSBibG9jayAqLwpAQCAtMTgyLDcgKzIwMyw4IEBACiAgICAgICAgICAgICBwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgcHJldmJsb2NrLT5yaWdodGxpbmsgPSBOVUxMOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChwcmV2YmxvY2spOworICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQpAQCAtMTk4LDE4ICsyMjAsMTggQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBibG9jayAqcHJldmJsb2NrOwogCi0gICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGZyb20gYW4gZW1wdHkgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IE5VTEwpOwogICAgIGl0ZW0gPSBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdOwogICAgIGRlcXVlLT5sZWZ0aW5kZXgrKzsKLSAgICBkZXF1ZS0+bGVuLS07CisgICAgUHlfU0laRShkZXF1ZSktLTsKICAgICBkZXF1ZS0+c3RhdGUrKzsKIAogICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwogICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCkBAIC0yMTksOCArMjQxLDggQEAKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2stPnJpZ2h0bGluazsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+bGVmdGJsb2NrKTsKLSAgICAgICAgICAgIGFzc2VydChwcmV2YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPmxlZnRsaW5rID0gTlVMTDsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocHJldmJsb2NrKTsKKyAgICAgICAgICAgIE1BUktfRU5EKHByZXZibG9jay0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOwogICAgICAgICB9CkBAIC0yMzUsMTYgKzI1NywxOCBAQAogewogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7Ci0gICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsIGRlcXVlLT5sZW4pOworICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKKyAgICAgICAgYi0+bGVmdGxpbmsgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOworICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOwogICAgIH0KICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgZGVxdWUtPmxlbisrOworICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXgrKzsKICAgICBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF0gPSBpdGVtOwogICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOwpAQCAtMjU4LDE2ICsyODIsMTggQEAKIHsKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywgZGVxdWUtPmxlbik7CisgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKKyAgICAgICAgYi0+cmlnaHRsaW5rID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKKyAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOwogICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CiAgICAgfQogICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICBkZXF1ZS0+bGVuKys7CisgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+bGVmdGluZGV4LS07CiAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07CiAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wKTsKQEAgLTMwOSw2ICszMzUsMTQgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTcGFjZSBzYXZpbmcgaGV1cmlzdGljLiAgU3RhcnQgZmlsbGluZyBmcm9tIHRoZSBsZWZ0ICovCisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKKyAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDE7CisgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gMDsKKyAgICB9CisKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMxOSwxOSArMzUzLDIwIEBACiAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4tMSkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPmxlbik7CisgICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOworICAgICAgICAgICAgYi0+bGVmdGxpbmsgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CiAgICAgICAgIH0KLSAgICAgICAgZGVxdWUtPmxlbisrOworICAgICAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF0gPSBpdGVtOwogICAgICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3BsZWZ0KTsKQEAgLTM2MSw2ICszOTYsMTQgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTcGFjZSBzYXZpbmcgaGV1cmlzdGljLiAgU3RhcnQgZmlsbGluZyBmcm9tIHRoZSByaWdodCAqLworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CisgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTiAtIDE7CisgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAyOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzcxLDE5ICs0MTQsMjAgQEAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPmxlbik7CisgICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKKyAgICAgICAgICAgIGItPnJpZ2h0bGluayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CiAgICAgICAgIH0KLSAgICAgICAgZGVxdWUtPmxlbisrOworICAgICAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgICAgICBkZXF1ZS0+bGVmdGluZGV4LS07CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0gPSBpdGVtOwogICAgICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3ApOwpAQCAtNDEzLDcgKzQ1NywxMyBAQAogc3RhdGljIGludAogX2RlcXVlX3JvdGF0ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5X3NzaXplX3QgbikKIHsKLSAgICBQeV9zc2l6ZV90IG0sIGxlbj1kZXF1ZS0+bGVuLCBoYWxmbGVuPWxlbj4+MTsKKyAgICBibG9jayAqYiA9IE5VTEw7CisgICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7CisgICAgUHlfc3NpemVfdCBsZW49UHlfU0laRShkZXF1ZSksIGhhbGZsZW49bGVuPj4xOworICAgIGludCBydiA9IC0xOwogCiAgICAgaWYgKGxlbiA8PSAxKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQyOSw3NiArNDc5LDEwMyBAQAogCiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgd2hpbGUgKG4gPiAwKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywgbGVuKTsKLSAgICAgICAgICAgIGlmIChiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gMCkgeworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGIgPSBuZXdibG9jayhsZW4pOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGItPnJpZ2h0bGluayA9IGxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChsZWZ0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRibG9jay0+bGVmdGxpbmsgPSBiOworICAgICAgICAgICAgbGVmdGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IEJMT0NLTEVOOworICAgICAgICAgICAgYiA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPiAwKTsKKyAgICAgICAgYXNzZXJ0KGxlZnRpbmRleCA+IDApOworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OworICAgICAgICAgICAgUHlfc3NpemVfdCBtID0gbjsKIAotICAgICAgICBtID0gbjsKLSAgICAgICAgaWYgKG0gPiBkZXF1ZS0+cmlnaHRpbmRleCArIDEpCi0gICAgICAgICAgICBtID0gZGVxdWUtPnJpZ2h0aW5kZXggKyAxOwotICAgICAgICBpZiAobSA+IGRlcXVlLT5sZWZ0aW5kZXgpCi0gICAgICAgICAgICBtID0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7Ci0gICAgICAgIG1lbWNweSgmZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4IC0gbV0sCi0gICAgICAgICAgICAgICAmZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXggKyAxIC0gbV0sCi0gICAgICAgICAgICAgICBtICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggLT0gbTsKLSAgICAgICAgZGVxdWUtPmxlZnRpbmRleCAtPSBtOwotICAgICAgICBuIC09IG07Ci0KLSAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICBibG9jayAqcHJldmJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2stPmxlZnRsaW5rOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+cmlnaHRsaW5rID0gTlVMTDsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcHJldmJsb2NrOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CisgICAgICAgICAgICBpZiAobSA+IHJpZ2h0aW5kZXggKyAxKQorICAgICAgICAgICAgICAgIG0gPSByaWdodGluZGV4ICsgMTsKKyAgICAgICAgICAgIGlmIChtID4gbGVmdGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBsZWZ0aW5kZXg7CisgICAgICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKKyAgICAgICAgICAgIHNyYyA9ICZyaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXhdOworICAgICAgICAgICAgZGVzdCA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4IC0gMV07CisgICAgICAgICAgICByaWdodGluZGV4IC09IG07CisgICAgICAgICAgICBsZWZ0aW5kZXggLT0gbTsKKyAgICAgICAgICAgIG4gLT0gbTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqKGRlc3QtLSkgPSAqKHNyYy0tKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayk7CisgICAgICAgICAgICBhc3NlcnQoYiA9PSBOVUxMKTsKKyAgICAgICAgICAgIGIgPSByaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChyaWdodGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CisgICAgICAgICAgICBNQVJLX0VORChyaWdodGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAobiA8IDApIHsKLSAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOIC0gMSkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwgbGVuKTsKLSAgICAgICAgICAgIGlmIChiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CisgICAgICAgIGlmIChyaWdodGluZGV4ID09IEJMT0NLTEVOIC0gMSkgeworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGIgPSBuZXdibG9jayhsZW4pOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGItPmxlZnRsaW5rID0gcmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChyaWdodGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggPSAtMTsKKyAgICAgICAgICAgIGIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydCAoZGVxdWUtPnJpZ2h0aW5kZXggPCBCTE9DS0xFTiAtIDEpOworICAgICAgICBhc3NlcnQgKHJpZ2h0aW5kZXggPCBCTE9DS0xFTiAtIDEpOworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OworICAgICAgICAgICAgUHlfc3NpemVfdCBtID0gLW47CiAKLSAgICAgICAgbSA9IC1uOwotICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gZGVxdWUtPmxlZnRpbmRleCkKLSAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSAxIC0gZGVxdWUtPnJpZ2h0aW5kZXgpCi0gICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSAxIC0gZGVxdWUtPnJpZ2h0aW5kZXg7Ci0gICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOwotICAgICAgICBtZW1jcHkoJmRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4ICsgMV0sCi0gICAgICAgICAgICAgICAmZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSwKLSAgICAgICAgICAgICAgIG0gKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ICs9IG07Ci0gICAgICAgIGRlcXVlLT5yaWdodGluZGV4ICs9IG07Ci0gICAgICAgIG4gKz0gbTsKLQotICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgYmxvY2sgKm5leHRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2stPnJpZ2h0bGluazsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+bGVmdGJsb2NrKTsKLSAgICAgICAgICAgIGFzc2VydChuZXh0YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBuZXh0YmxvY2stPmxlZnRsaW5rID0gTlVMTDsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBuZXh0YmxvY2s7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMDsKKyAgICAgICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSBsZWZ0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gbGVmdGluZGV4OworICAgICAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIDEgLSByaWdodGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIDEgLSByaWdodGluZGV4OworICAgICAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7CisgICAgICAgICAgICBzcmMgPSAmbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgICAgICBkZXN0ID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleCArIDFdOworICAgICAgICAgICAgbGVmdGluZGV4ICs9IG07CisgICAgICAgICAgICByaWdodGluZGV4ICs9IG07CisgICAgICAgICAgICBuICs9IG07CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKihkZXN0KyspID0gKihzcmMrKyk7CisgICAgICAgICAgICB9IHdoaWxlICgtLW0pOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayk7CisgICAgICAgICAgICBhc3NlcnQoYiA9PSBOVUxMKTsKKyAgICAgICAgICAgIGIgPSBsZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKGxlZnRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOworICAgICAgICAgICAgTUFSS19FTkQobGVmdGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJ2ID0gMDsKK2RvbmU6CisgICAgaWYgKGIgIT0gTlVMTCkKKyAgICAgICAgZnJlZWJsb2NrKGIpOworICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBsZWZ0YmxvY2s7CisgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSByaWdodGJsb2NrOworICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBsZWZ0aW5kZXg7CisgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSByaWdodGluZGV4OworCisgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTIzLDEzICs2MDAsMTUgQEAKICAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKICAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKLSAgICBQeV9zc2l6ZV90IG4gPSAoZGVxdWUtPmxlbikvMjsKKyAgICBQeV9zc2l6ZV90IG4gPSAoUHlfU0laRShkZXF1ZSkpLzI7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICp0bXA7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewogICAgICAgICAvKiBWYWxpZGF0ZSB0aGF0IHBvaW50ZXJzIGhhdmVuJ3QgbWV0IGluIHRoZSBtaWRkbGUgKi8KICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrIHx8IGxlZnRpbmRleCA8IHJpZ2h0aW5kZXgpOworICAgICAgICBDSEVDS19OT1RfRU5EKGxlZnRibG9jayk7CisgICAgICAgIENIRUNLX05PVF9FTkQocmlnaHRibG9jayk7CiAKICAgICAgICAgLyogU3dhcCAqLwogICAgICAgICB0bXAgPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKQEAgLTUzOSw4ICs2MTgsNiBAQAogICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLwogICAgICAgICBsZWZ0aW5kZXgrKzsKICAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKICAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KQEAgLTU0OCw4ICs2MjUsNiBAQAogICAgICAgICAvKiBTdGVwIGJhY2t3YXJkcyB3aXRoIHRoZSByaWdodCBibG9jay9pbmRleCBwYWlyICovCiAgICAgICAgIHJpZ2h0aW5kZXgtLTsKICAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChyaWdodGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmlnaHRibG9jayA9IHJpZ2h0YmxvY2stPmxlZnRsaW5rOwogICAgICAgICAgICAgcmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQpAQCAtNTYzLDkgKzYzOCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVfY291bnQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdikKIHsKLSAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKLSAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgUHlfc3NpemVfdCBuID0gZGVxdWUtPmxlbjsKKyAgICBibG9jayAqYiA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgY291bnQgPSAwOwogICAgIFB5T2JqZWN0ICppdGVtOwpAQCAtNTczLDcgKzY0OCw4IEBACiAgICAgaW50IGNtcDsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7Ci0gICAgICAgIGl0ZW0gPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChiKTsKKyAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdiwgUHlfRVEpOwogICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgIGNvdW50Kys7CkBAIC01ODcsMTIgKzY2MywxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KLSAgICAgICAgbGVmdGluZGV4Kys7Ci0gICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKSAgLyogY2FuIG9jY3VyIHdoZW4gaT09bi0xICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKLSAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGlmIChpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGNvdW50KTsKQEAgLTYwNCwxOSArNjc4LDE5IEBACiBzdGF0aWMgUHlfc3NpemVfdAogZGVxdWVfbGVuKGRlcXVlb2JqZWN0ICpkZXF1ZSkKIHsKLSAgICByZXR1cm4gZGVxdWUtPmxlbjsKKyAgICByZXR1cm4gUHlfU0laRShkZXF1ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9yZW1vdmUoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdmFsdWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuPWRlcXVlLT5sZW47CisgICAgUHlfc3NpemVfdCBpLCBuPVB5X1NJWkUoZGVxdWUpOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdOwogICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHZhbHVlLCBQeV9FUSk7CiAKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gIT0gbikgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgIT0gbikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgImRlcXVlIG11dGF0ZWQgZHVyaW5nIHJlbW92ZSgpLiIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDcsMTQgKzcyMSwxNCBAQAogewogICAgIFB5T2JqZWN0ICppdGVtOwogCi0gICAgd2hpbGUgKGRlcXVlLT5sZW4pIHsKKyAgICB3aGlsZSAoUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgaXRlbSA9IGRlcXVlX3BvcChkZXF1ZSwgTlVMTCk7CiAgICAgICAgIGFzc2VydCAoaXRlbSAhPSBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayAmJgogICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC0gMSA9PSBkZXF1ZS0+cmlnaHRpbmRleCAmJgotICAgICAgICAgICBkZXF1ZS0+bGVuID09IDApOworICAgICAgICAgICBQeV9TSVpFKGRlcXVlKSA9PSAwKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY2NCw3ICs3MzgsNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIFB5X3NzaXplX3QgbiwgaW5kZXg9aTsKIAotICAgIGlmIChpIDwgMCB8fCBpID49IGRlcXVlLT5sZW4pIHsKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NzMsMTkgKzc0NywxOSBAQAogICAgIGlmIChpID09IDApIHsKICAgICAgICAgaSA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIH0gZWxzZSBpZiAoaSA9PSBkZXF1ZS0+bGVuIC0gMSkgeworICAgIH0gZWxzZSBpZiAoaSA9PSBQeV9TSVpFKGRlcXVlKSAtIDEpIHsKICAgICAgICAgaSA9IGRlcXVlLT5yaWdodGluZGV4OwogICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSArPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgICAgICBuID0gaSAvIEJMT0NLTEVOOwogICAgICAgICBpICU9IEJMT0NLTEVOOwotICAgICAgICBpZiAoaW5kZXggPCAoZGVxdWUtPmxlbiA+PiAxKSkgeworICAgICAgICBpZiAoaW5kZXggPCAoUHlfU0laRShkZXF1ZSkgPj4gMSkpIHsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiAtIDEpIC8gQkxPQ0tMRU4gLSBuOworICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxKSAvIEJMT0NLTEVOIC0gbjsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICAgICAgYiA9IGItPmxlZnRsaW5rOwpAQCAtNzA4LDcgKzc4Miw3IEBACiB7CiAgICAgUHlPYmplY3QgKml0ZW07CiAKLSAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgZGVxdWUtPmxlbik7CisgICAgYXNzZXJ0IChpID49IDAgJiYgaSA8IFB5X1NJWkUoZGVxdWUpKTsKICAgICBpZiAoX2RlcXVlX3JvdGF0ZShkZXF1ZSwgLWkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTcyNCw3ICs3OTgsNyBAQAogewogICAgIFB5T2JqZWN0ICpvbGRfdmFsdWU7CiAgICAgYmxvY2sgKmI7Ci0gICAgUHlfc3NpemVfdCBuLCBsZW49ZGVxdWUtPmxlbiwgaGFsZmxlbj0obGVuKzEpPj4xLCBpbmRleD1pOworICAgIFB5X3NzaXplX3QgbiwgbGVuPVB5X1NJWkUoZGVxdWUpLCBoYWxmbGVuPShsZW4rMSk+PjEsIGluZGV4PWk7CiAKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCkBAIC03ODcsMTcgKzg2MSwxNyBAQAogICAgIFB5X3NzaXplX3QgaW5kZXg7CiAgICAgUHlfc3NpemVfdCBpbmRleGxvID0gZGVxdWUtPmxlZnRpbmRleDsKIAotICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gTlVMTDsgYiA9IGItPnJpZ2h0bGluaykgewotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGluZGV4aGkgPSBiID09IGRlcXVlLT5yaWdodGJsb2NrID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4IDoKLSAgICAgICAgICAgICAgICAgICAgIEJMT0NLTEVOIC0gMTsKLQotICAgICAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPD0gaW5kZXhoaTsgKytpbmRleCkgeworICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gZGVxdWUtPnJpZ2h0YmxvY2s7IGIgPSBiLT5yaWdodGxpbmspIHsKKyAgICAgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDwgQkxPQ0tMRU4gOyBpbmRleCsrKSB7CiAgICAgICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgICAgICBQeV9WSVNJVChpdGVtKTsKICAgICAgICAgfQogICAgICAgICBpbmRleGxvID0gMDsKICAgICB9CisgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDw9IGRlcXVlLT5yaWdodGluZGV4OyBpbmRleCsrKSB7CisgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKKyAgICAgICAgUHlfVklTSVQoaXRlbSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC04ODcsOCArOTYxLDggQEAKICAgICB9CiAKICAgICAvKiBTaG9ydGN1dHMgKi8KLSAgICB2cyA9ICgoZGVxdWVvYmplY3QgKil2KS0+bGVuOwotICAgIHdzID0gKChkZXF1ZW9iamVjdCAqKXcpLT5sZW47CisgICAgdnMgPSBQeV9TSVpFKChkZXF1ZW9iamVjdCAqKXYpOworICAgIHdzID0gUHlfU0laRSgoZGVxdWVvYmplY3QgKil3KTsKICAgICBpZiAob3AgPT0gUHlfRVEpIHsKICAgICAgICAgaWYgKHYgPT0gdykKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtOTg5LDggKzEwNjMsOCBAQAogICAgIFB5X3NzaXplX3QgYmxvY2tzOwogCiAgICAgcmVzID0gc2l6ZW9mKGRlcXVlb2JqZWN0KTsKLSAgICBibG9ja3MgPSAoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47Ci0gICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuIC0gMSA9PQorICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47CisgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEgPT0KICAgICAgICAgICAgKGJsb2NrcyAtIDEpICogQkxPQ0tMRU4gKyBkZXF1ZS0+cmlnaHRpbmRleCk7CiAgICAgcmVzICs9IGJsb2NrcyAqIHNpemVvZihibG9jayk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwpAQCAtMTE0Myw3ICsxMjE3LDcgQEAKICAgICBQeV9JTkNSRUYoZGVxdWUpOwogICAgIGl0LT5kZXF1ZSA9IGRlcXVlOwogICAgIGl0LT5zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKLSAgICBpdC0+Y291bnRlciA9IGRlcXVlLT5sZW47CisgICAgaXQtPmNvdW50ZXIgPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQpAQCAtMTE4Miw3ICsxMjU2LDcgQEAKICAgICBpdC0+aW5kZXgrKzsKICAgICBpdC0+Y291bnRlci0tOwogICAgIGlmIChpdC0+aW5kZXggPT0gQkxPQ0tMRU4gJiYgaXQtPmNvdW50ZXIgPiAwKSB7Ci0gICAgICAgIGFzc2VydCAoaXQtPmItPnJpZ2h0bGluayAhPSBOVUxMKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChpdC0+Yi0+cmlnaHRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+cmlnaHRsaW5rOwogICAgICAgICBpdC0+aW5kZXggPSAwOwogICAgIH0KQEAgLTEyMzAsNyArMTMwNCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVpdGVyX3JlZHVjZShkZXF1ZWl0ZXJvYmplY3QgKml0KQogewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIGl0LT5kZXF1ZS0+bGVuIC0gaXQtPmNvdW50ZXIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIFB5X1NJWkUoaXQtPmRlcXVlKSAtIGl0LT5jb3VudGVyKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRlcXVlaXRlcl9tZXRob2RzW10gPSB7CkBAIC0xMjk5LDcgKzEzNzMsNyBAQAogICAgIFB5X0lOQ1JFRihkZXF1ZSk7CiAgICAgaXQtPmRlcXVlID0gZGVxdWU7CiAgICAgaXQtPnN0YXRlID0gZGVxdWUtPnN0YXRlOwotICAgIGl0LT5jb3VudGVyID0gZGVxdWUtPmxlbjsKKyAgICBpdC0+Y291bnRlciA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CkBAIC0xMzI0LDcgKzEzOTgsNyBAQAogICAgIGl0LT5pbmRleC0tOwogICAgIGl0LT5jb3VudGVyLS07CiAgICAgaWYgKGl0LT5pbmRleCA9PSAtMSAmJiBpdC0+Y291bnRlciA+IDApIHsKLSAgICAgICAgYXNzZXJ0IChpdC0+Yi0+bGVmdGxpbmsgIT0gTlVMTCk7CisgICAgICAgIENIRUNLX05PVF9FTkQoaXQtPmItPmxlZnRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+bGVmdGxpbms7CiAgICAgICAgIGl0LT5pbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICB9CkBAIC0xNzQyLDcgKzE4MTYsNyBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBib3VuZF9nZXQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1hcHBpbmcsICJnZXQiKTsKKyAgICAgICAgYm91bmRfZ2V0ID0gX1B5T2JqZWN0X0dldEF0dHJJZChtYXBwaW5nLCAmUHlJZF9nZXQpOwogICAgICAgICBpZiAoYm91bmRfZ2V0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Nzdi5jIGIvTW9kdWxlcy9fY3N2LmMKaW5kZXggNDhhNWNmOC4uMTgzYTlhNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3N2LmMKKysrIGIvTW9kdWxlcy9fY3N2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHR5cGVkZWYgZW51bSB7CiAgICAgU1RBUlRfUkVDT1JELCBTVEFSVF9GSUVMRCwgRVNDQVBFRF9DSEFSLCBJTl9GSUVMRCwKICAgICBJTl9RVU9URURfRklFTEQsIEVTQ0FQRV9JTl9RVU9URURfRklFTEQsIFFVT1RFX0lOX1FVT1RFRF9GSUVMRCwKLSAgICBFQVRfQ1JOTAorICAgIEVBVF9DUk5MLEFGVEVSX0VTQ0FQRURfQ1JOTAogfSBQYXJzZXJTdGF0ZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTU0Niw3ICs1NDYsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZmllbGQgPSB0bXA7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCk7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihmaWVsZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgUHlfREVDUkVGKGZpZWxkKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTY0NCw2ICs2NDcsMTIgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVTQ0FQRURfQ0hBUjoKKyAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjPT0nXHInKSB7CisgICAgICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHNlbGYtPnN0YXRlID0gQUZURVJfRVNDQVBFRF9DUk5MOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgaWYgKGMgPT0gJ1wwJykKICAgICAgICAgICAgIGMgPSAnXG4nOwogICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQpAQCAtNjUxLDYgKzY2MCwxMSBAQAogICAgICAgICBzZWxmLT5zdGF0ZSA9IElOX0ZJRUxEOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgQUZURVJfRVNDQVBFRF9DUk5MOgorICAgICAgICBpZiAoYyA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qZmFsbHRocnUqLworCiAgICAgY2FzZSBJTl9GSUVMRDoKICAgICAgICAgLyogaW4gdW5xdW90ZWQgZmllbGQgKi8KICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXDAnKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCA3ZDBkMjU4Li44MjBhNjA2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTI3OCw4ICsyNzgsMTAgQEAKICAgICBpZiAocHJlZml4KQogICAgICAgICBsZW4gKz0gc3RybGVuKHByZWZpeCk7CiAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKGxlbiArIDEpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIHN0cmNweShyZXN1bHQsIHByZWZpeCk7CiAgICAgZWxzZQpAQCAtNDI4LDEzICs0MzAsNyBAQAogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpmcm9tX2J1ZmZlciIsICZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKG9iaiwgJmJ1ZmZlciwgJmJ1ZmZlcl9sZW4pKQpAQCAtNDQ3LDExICs0NDMsNyBAQAogICAgIH0KICAgICBpZiAoZGljdC0+c2l6ZSA+IGJ1ZmZlcl9sZW4gLSBvZmZzZXQpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCVkIGluc3RlYWQgb2YgYXQgbGVhc3QgJWQgYnl0ZXMpIiwKLSNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglemQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlemQgYnl0ZXMpIiwKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbiwgZGljdC0+c2l6ZSArIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTQ2Miw3ICs0NTQsNiBAQAogCiAgICAgUHlfSU5DUkVGKG9iaik7CiAgICAgaWYgKC0xID09IEtlZXBSZWYoKENEYXRhT2JqZWN0ICopcmVzdWx0LCAtMSwgb2JqKSkgewotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC00ODQsMTMgKzQ3NSw3IEBACiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5VHlwZV9zdGdkaWN0KHR5cGUpOwogICAgIGFzc2VydCAoZGljdCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xpOmZyb21fYnVmZmVyIiwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfG46ZnJvbV9idWZmZXIiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZvZmZzZXQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xuOmZyb21fYnVmZmVyIiwgJm9iaiwgJm9mZnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKC0xID09IFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcihvYmosIChjb25zdCB2b2lkKiopJmJ1ZmZlciwgJmJ1ZmZlcl9sZW4pKQpAQCAtNTA0LDExICs0ODksNyBAQAogCiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzI2LDkgKzEzMDcsMTEgQEAKICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgc3RnZGljdC0+bmRpbSA9IGl0ZW1kaWN0LT5uZGltICsgMTsKLSAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCAqKSAqIHN0Z2RpY3QtPm5kaW0pOwotICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKQorICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSAqIHN0Z2RpY3QtPm5kaW0pOworICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHN0Z2RpY3QtPnNoYXBlWzBdID0gbGVuZ3RoOwogICAgIG1lbW1vdmUoJnN0Z2RpY3QtPnNoYXBlWzFdLCBpdGVtZGljdC0+c2hhcGUsCiAgICAgICAgIHNpemVvZihQeV9zc2l6ZV90KSAqIChzdGdkaWN0LT5uZGltIC0gMSkpOwpAQCAtMTM1OSw3ICsxMzQyLDggQEAKICAgICBpZiAoLTEgPT0gUHlEaWN0X1VwZGF0ZSgoUHlPYmplY3QgKilzdGdkaWN0LCByZXN1bHQtPnRwX2RpY3QpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopc3RnZGljdDsgIC8qIHN0ZWFsIHRoZSByZWZlcmVuY2UgKi8KKyAgICBzdGdkaWN0ID0gTlVMTDsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgY2hhcmFjdGVyIGFycmF5cy4KICAgICAgICBBIHBlcm1hbmVudCBhbm5veWFuY2U6IGNoYXIgYXJyYXlzIGFyZSBhbHNvIHN0cmluZ3MhCkBAIC0yMjYxLDYgKzIyNDUsMTAgQEAKICAgICAgICBhcmd0eXBlcyB3b3VsZCBiZSBhIGN0eXBlcyB0eXBlKS4KICAgICAqLwogICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiWHt9Iik7CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHN0Z2RpY3QtPmZsYWdzIHw9IFRZUEVGTEFHX0lTUE9JTlRFUjsKIAogICAgIC8qIGNyZWF0ZSB0aGUgbmV3IGluc3RhbmNlICh3aGljaCBpcyBhIGNsYXNzLApAQCAtMjM0Myw2ICsyMzMxLDggQEAKICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpIHsKICAgICAgICAgaWYgKHNlbGYtPmJfbGVuZ3RoKSB7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeV9Ob25lOwpAQCAtMjM1NCw3ICsyMzQ0LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogR2V0S2VlcGVkT2JqZWN0cyhDRGF0YU9iamVjdCAqdGFyZ2V0KQogewotICAgIHJldHVybiBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpLT5iX29iamVjdHM7CisgICAgQ0RhdGFPYmplY3QgKmNvbnRhaW5lcjsKKyAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGNvbnRhaW5lci0+Yl9vYmplY3RzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQxMSw2ICsyNDA1LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBvYiA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CisgICAgaWYgKG9iID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGtlZXApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGlmIChvYi0+Yl9vYmplY3RzID09IE5VTEwgfHwgIVB5RGljdF9DaGVja0V4YWN0KG9iLT5iX29iamVjdHMpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2ItPmJfb2JqZWN0cyk7CiAgICAgICAgIG9iLT5iX29iamVjdHMgPSBrZWVwOyAvKiByZWZjb3VudCBjb25zdW1lZCAqLwpAQCAtMjc5Nyw2ICsyNzk1LDkgQEAKICAgICAgICAgICAgIC8qIFhYWCAqLzsKIAogICAgICAgICB2YWx1ZSA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQpAQCAtMjgyMCw2ICsyODIxLDkgQEAKICAgICAgICAgKih2b2lkICoqKXB0ciA9IHNyYy0+Yl9wdHI7CiAKICAgICAgICAga2VlcCA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKGtlZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIC8qCiAgICAgICAgICAgV2UgYXJlIGFzc2lnbmluZyBhbiBhcnJheSBvYmplY3QgdG8gYSBmaWVsZCB3aGljaCByZXByZXNlbnRzCiAgICAgICAgICAgYSBwb2ludGVyLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY29udmVydGluZyBhbiBhcnJheQpAQCAtNDA1MCw4ICs0MDU0LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgewotICAgICAgICBpbnQgcmVzID0gX2luaXRfcG9zX2FyZ3Moc2VsZiwgUHlfVFlQRShzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMsIDApOworICAgICAgICBQeV9zc2l6ZV90IHJlcyA9IF9pbml0X3Bvc19hcmdzKHNlbGYsIFB5X1RZUEUoc2VsZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywga3dkcywgMCk7CiAgICAgICAgIGlmIChyZXMgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChyZXMgPCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7CkBAIC00MjIyLDcgKzQyMjYsNyBAQAogICAgICAgICAgICAgaSArPSBzZWxmLT5iX2xlbmd0aDsKICAgICAgICAgcmV0dXJuIEFycmF5X2l0ZW0obXlzZWxmLCBpKTsKICAgICB9Ci0gICAgZWxzZSBpZiBQeVNsaWNlX0NoZWNrKGl0ZW0pIHsKKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3QsICppdGVtZGljdDsKICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICBQeU9iamVjdCAqbnA7CkBAIC00Mjk4LDYgKzQzMDIsMTAgQEAKICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKICAgICAgICAgICAgICBjdXIgKz0gc3RlcCwgaSsrKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IEFycmF5X2l0ZW0obXlzZWxmLCBjdXIpOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihucCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obnAsIGksIHYpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBucDsKQEAgLTQ4MTIsNiArNDgyMCw5IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGtlZXAgPSBHZXRLZWVwZWRPYmplY3RzKGRzdCk7CisgICAgaWYgKGtlZXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgUHlfSU5DUkVGKGtlZXApOwogICAgIHJldHVybiBLZWVwUmVmKHNlbGYsIDAsIGtlZXApOwogfQpAQCAtNTIxOCw5ICs1MjI5LDE0IEBACiAgICAgICovCiAgICAgaWYgKENEYXRhT2JqZWN0X0NoZWNrKHNyYykpIHsKICAgICAgICAgQ0RhdGFPYmplY3QgKm9iaiA9IChDRGF0YU9iamVjdCAqKXNyYzsKKyAgICAgICAgQ0RhdGFPYmplY3QgKmNvbnRhaW5lcjsKKwogICAgICAgICAvKiBQeUNEYXRhX0dldENvbnRhaW5lciB3aWxsIGluaXRpYWxpemUgc3JjLmJfb2JqZWN0cywgd2UgbmVlZAogICAgICAgICAgICB0aGlzIHNvIGl0IGNhbiBiZSBzaGFyZWQgKi8KLSAgICAgICAgUHlDRGF0YV9HZXRDb250YWluZXIob2JqKTsKKyAgICAgICAgY29udGFpbmVyID0gUHlDRGF0YV9HZXRDb250YWluZXIob2JqKTsKKyAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisKICAgICAgICAgLyogQnV0IHdlIG5lZWQgYSBkaWN0aW9uYXJ5ISAqLwogICAgICAgICBpZiAob2JqLT5iX29iamVjdHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCmluZGV4IGEzZDIzMjEuLmVjOGZkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKQEAgLTk4LDIwICs5OCwzNyBAQAogICAgIFB5T2JqZWN0ICpweV9nbG9iYWxzID0gMDsKICAgICBQeUNvZGVPYmplY3QgKnB5X2NvZGUgPSAwOwogICAgIFB5RnJhbWVPYmplY3QgKnB5X2ZyYW1lID0gMDsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKworICAgIC8qIChTYXZlIGFuZCkgQ2xlYXIgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiBQeXRob24gZnVuY3Rpb25zIG11c3Qgbm90IGJlCisgICAgICAgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldC4gQ2FsbGluZyBQeXRob24gZnVuY3Rpb25zIGhhcHBlbnMgd2hlbgorICAgICAgIHRoZSBjb2RlYyBvZiB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyBpcyBpbXBsZW1lbnRlZCBpbiBwdXJlIFB5dGhvbi4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CiAKICAgICBweV9nbG9iYWxzID0gUHlEaWN0X05ldygpOwotICAgIGlmICghcHlfZ2xvYmFscykgZ290byBiYWQ7CisgICAgaWYgKCFweV9nbG9iYWxzKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9jb2RlID0gUHlDb2RlX05ld0VtcHR5KGZpbGVuYW1lLCBmdW5jbmFtZSwgbGluZW5vKTsKLSAgICBpZiAoIXB5X2NvZGUpIGdvdG8gYmFkOworICAgIGlmICghcHlfY29kZSkKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUgPSBQeUZyYW1lX05ldygKICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQoKSwgLypQeVRocmVhZFN0YXRlICp0c3RhdGUsKi8KICAgICAgICAgcHlfY29kZSwgICAgICAgICAgICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KICAgICAgICAgcHlfZ2xvYmFscywgICAgICAgICAgLypQeU9iamVjdCAqZ2xvYmFscywqLwogICAgICAgICAwICAgICAgICAgICAgICAgICAgICAvKlB5T2JqZWN0ICpsb2NhbHMqLwogICAgICAgICApOwotICAgIGlmICghcHlfZnJhbWUpIGdvdG8gYmFkOworICAgIGlmICghcHlfZnJhbWUpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2ZyYW1lLT5mX2xpbmVubyA9IGxpbmVubzsKKworICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogICAgIFB5VHJhY2VCYWNrX0hlcmUocHlfZnJhbWUpOworCisgICAgUHlfREVDUkVGKHB5X2dsb2JhbHMpOworICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKKyAgICBQeV9ERUNSRUYocHlfZnJhbWUpOworICAgIHJldHVybjsKKwogICBiYWQ6CiAgICAgUHlfWERFQ1JFRihweV9nbG9iYWxzKTsKICAgICBQeV9YREVDUkVGKHB5X2NvZGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwppbmRleCAwOWViNjUzLi43NDExOWEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwpAQCAtMjYxLDE4ICsyNjEsMTggQEAKICAgICAgICAgICAgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGRvZXMgbm90CiAgICAgICAgICAgIGhhdmUgdGhlIGFwcHJvcHJpYXRlIGFjY2Vzcy4gKi8KICAgICAgICAgaWYgKHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblswXSA9PSAwKQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gcmVhZGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gd3JpdGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9CUkVBS1BPSU5UOgogICAgICAgICAvKiBBIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGJyZWFrcG9pbnQgZW5jb3VudGVyZWQiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAgICAgICAgICAgIGFsaWdubWVudC4gRm9yIGV4YW1wbGUsIDE2LWJpdCB2YWx1ZXMgbXVzdCBiZQogICAgICAgICAgICBhbGlnbmVkIG9uIDItYnl0ZSBib3VuZGFyaWVzLCAzMi1iaXQgdmFsdWVzIG9uCiAgICAgICAgICAgIDQtYnl0ZSBib3VuZGFyaWVzLCBhbmQgc28gb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZGF0YXR5cGUgbWlzYWxpZ25tZW50Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU0lOR0xFX1NURVA6CiAgICAgICAgIC8qIEEgdHJhY2UgdHJhcCBvciBvdGhlciBzaW5nbGUtaW5zdHJ1Y3Rpb24gbWVjaGFuaXNtCiAgICAgICAgICAgIHNpZ25hbGVkIHRoYXQgb25lIGluc3RydWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHNpbmdsZSBzdGVwIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQKICAgICAgICAgICAgdGhhdCBpcyBvdXQgb2YgYm91bmRzLCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKICAgICAgICAgICAgc3VwcG9ydHMgYm91bmRzIGNoZWNraW5nLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFycmF5IGJvdW5kcyBleGNlZWRlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMzA2LDI4ICszMDYsMjggQEAKICAgICAgICAgICAgaXMgZGVub3JtYWwuIEEgZGVub3JtYWwgdmFsdWUgaXMgb25lIHRoYXQgaXMgdG9vCiAgICAgICAgICAgIHNtYWxsIHRvIHJlcHJlc2VudCBhcyBhIHN0YW5kYXJkIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgZGVub3JtYWwiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfRElWSURFX0JZX1pFUk86CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlIGJ5IGEgZmxvYXRpbmctcG9pbnQgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lORVhBQ1RfUkVTVUxUOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGNhbm5vdCBiZQogICAgICAgICAgICByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZGVjaW1hbCBmcmFjdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbmV4YWN0Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lOVkFMSURfT1BFUkFUSU9OOgogICAgICAgICAvKiBUaGlzIGV4Y2VwdGlvbiByZXByZXNlbnRzIGFueSBmbG9hdGluZy1wb2ludAogICAgICAgICAgICBleGNlcHRpb24gbm90IGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbnZhbGlkIG9wZXJhdGlvbiIpOwogICAgICAgICBicmVhazsKIApAQCAtMzM1LDIxICszMzUsMjEgQEAKICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzCiAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlCiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9TVEFDS19DSEVDSzoKICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAogICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyL3VuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTcsMjEgKzM1NywyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMgbGVzcwogICAgICAgICAgICB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAgICB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IHVuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGFuIGludGVnZXIgdmFsdWUgYnkKICAgICAgICAgICAgYW4gaW50ZWdlciBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBkaXZpZGUgYnkgemVybyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9PVkVSRkxPVzoKICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhbiBpbnRlZ2VyIG9wZXJhdGlvbiBjYXVzZWQgYSBjYXJyeQogICAgICAgICAgICBvdXQgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSByZXN1bHQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIApAQCAtMzc5LDE0ICszNzksMTQgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZXhlY3V0ZSBhbiBpbnN0cnVjdGlvbgogICAgICAgICAgICB3aG9zZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgICAgbWFjaGluZSBtb2RlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHByaXZpbGVkZ2VkIGluc3RydWN0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgYQogICAgICAgICAgICBub25jb250aW51YWJsZSBleGNlcHRpb24gb2NjdXJyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogbm9jb250aW51YWJsZSIpOwogICAgICAgICBicmVhazsKIApAQCAtNjIwLDYgKzYyMCw4IEBACiAgICAgICAgIGFzc2VydChkaWN0LT5wYXJhbWZ1bmMpOwogICAgICAgICAvKiBJZiBpdCBoYXMgYW4gc3RnZGljdCwgaXQgaXMgYSBDRGF0YU9iamVjdCAqLwogICAgICAgICBjYXJnID0gZGljdC0+cGFyYW1mdW5jKChDRGF0YU9iamVjdCAqKW9iaik7CisgICAgICAgIGlmIChjYXJnID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHBhLT5mZmlfdHlwZSA9IGNhcmctPnBmZmlfdHlwZTsKICAgICAgICAgbWVtY3B5KCZwYS0+dmFsdWUsICZjYXJnLT52YWx1ZSwgc2l6ZW9mKHBhLT52YWx1ZSkpOwogICAgICAgICBwYS0+a2VlcCA9IChQeU9iamVjdCAqKWNhcmc7CkBAIC0xMTA1LDkgKzExMDcsNyBAQAogICAgICAgICBpZiAoYXJndHlwZXMgJiYgYXJndHlwZV9jb3VudCA+IGkpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgY29udmVydGVyID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0eXBlcywgaSk7Ci0gICAgICAgICAgICB2ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICB2ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb252ZXJ0ZXIsIGFyZywgTlVMTCk7CiAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CkBAIC0xMjcyLDYyICsxMjcyLDYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotLyogb2Jzb2xldGUsIHNob3VsZCBiZSByZW1vdmVkICovCi0vKiBPbmx5IHVzZWQgYnkgc2FtcGxlIGNvZGUgKGluIHNhbXBsZXNcV2luZG93c1xDT00ucHkpICovCi1zdGF0aWMgUHlPYmplY3QgKgotY2FsbF9jb21tZXRob2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIElVbmtub3duICpwSXVuazsKLSAgICBpbnQgaW5kZXg7Ci0gICAgUHlPYmplY3QgKmFyZ3VtZW50czsKLSAgICBQUFJPQyAqbHBWdGJsOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgQ0RhdGFPYmplY3QgKnBjb207Ci0gICAgUHlPYmplY3QgKmFyZ3R5cGVzID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiT2lPIXxPISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwY29tLCAmaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd0eXBlcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGFyZ3R5cGVzICYmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3VtZW50cykgIT0gUHlUdXBsZV9HRVRfU0laRShhcmd0eXBlcykpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiTWV0aG9kIHRha2VzICVkIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoYXJndHlwZXMpLCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3VtZW50cykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIUNEYXRhT2JqZWN0X0NoZWNrKHBjb20pIHx8IChwY29tLT5iX3NpemUgIT0gc2l6ZW9mKHZvaWQgKikpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ09NIFBvaW50ZXIgZXhwZWN0ZWQgaW5zdGVhZCBvZiAlcyBpbnN0YW5jZSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHBjb20pLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgQ09NICd0aGlzJyBwb2ludGVyIGlzIE5VTEwiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcEl1bmsgPSAoSVVua25vd24gKikoKih2b2lkICoqKShwY29tLT5iX3B0cikpOwotICAgIGxwVnRibCA9IChQUFJPQyAqKShwSXVuay0+bHBWdGJsKTsKLQotICAgIHJlc3VsdCA9ICBfY3R5cGVzX2NhbGxwcm9jKGxwVnRibFtpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsCi0jaWZkZWYgTVNfV0lOMzIKLSAgICAgICAgICAgICAgICAgICAgICAgIHBJdW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ0ZMQUdfSFJFU1VMVCwgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICBhcmd0eXBlcywgLyogc2VsZi0+YXJndHlwZXMgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCi0gICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgY2hhciBjb3B5X2NvbV9wb2ludGVyX2RvY1tdID0KICJDb3B5Q29tUG9pbnRlcihzcmMsIGRzdCkgLT4gSFJFU1VMVCB2YWx1ZVxuIjsKIApAQCAtMTQ4OSw5ICsxNDMzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNGTEFHX0NERUNMLCAvKiBmbGFncyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPmFyZ3R5cGVzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLwotICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5hcmd0eXBlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODIyLDcgKzE3NjYsNiBAQAogICAgIHsiRm9ybWF0RXJyb3IiLCBmb3JtYXRfZXJyb3IsIE1FVEhfVkFSQVJHUywgZm9ybWF0X2Vycm9yX2RvY30sCiAgICAgeyJMb2FkTGlicmFyeSIsIGxvYWRfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBsb2FkX2xpYnJhcnlfZG9jfSwKICAgICB7IkZyZWVMaWJyYXJ5IiwgZnJlZV9saWJyYXJ5LCBNRVRIX1ZBUkFSR1MsIGZyZWVfbGlicmFyeV9kb2N9LAotICAgIHsiY2FsbF9jb21tZXRob2QiLCBjYWxsX2NvbW1ldGhvZCwgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyJfY2hlY2tfSFJFU1VMVCIsIGNoZWNrX2hyZXN1bHQsIE1FVEhfVkFSQVJHU30sCiAjZWxzZQogICAgIHsiZGxvcGVuIiwgcHlfZGxfb3BlbiwgTUVUSF9WQVJBUkdTLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwppbmRleCBiZjQyMDkzLi45NjgyNmI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwpAQCAtMzgsMTIgKzM4LDEzIEBACiAvKkBvdXRAKi8JZmZpX3R5cGUqCWFyZykKIHsKIC8qQC11c2VkZWZAKi8KKwlmZmlfdHlwZSoqCXB0cjsKIAogCWlmIChhcmcgPT0gTlVMTCB8fCBhcmctPmVsZW1lbnRzID09IE5VTEwgfHwKIAkJYXJnLT5zaXplICE9IDAgfHwgYXJnLT5hbGlnbm1lbnQgIT0gMCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAotCWZmaV90eXBlKioJcHRyID0gJihhcmctPmVsZW1lbnRzWzBdKTsKKyAgICBwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOwogCiAJd2hpbGUgKCgqcHRyKSAhPSBOVUxMKQogCXsKQEAgLTEzNSwxNiArMTM2LDE2IEBACiAvKkBkZXBlbmRlbnRAKi8gLypAb3V0QCovIC8qQHBhcnRpYWxAKi8gZmZpX3R5cGUqCXJ0eXBlLCAKIC8qQGRlcGVuZGVudEAqLwkJCWZmaV90eXBlKioJCWF0eXBlcykKIHsKKwl1bnNpZ25lZCBpbnQJYnl0ZXMJPSAwOworCXVuc2lnbmVkIGludAlpOworCWZmaV90eXBlKioJCXB0cjsKKwogCWlmIChjaWYgPT0gTlVMTCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAogCWlmIChhYmkgPD0gRkZJX0ZJUlNUX0FCSSB8fCBhYmkgPiBGRklfREVGQVVMVF9BQkkpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXVuc2lnbmVkIGludAlieXRlcwk9IDA7Ci0JdW5zaWduZWQgaW50CWk7Ci0JZmZpX3R5cGUqKgkJcHRyOwotCiAJY2lmLT5hYmkgPSBhYmk7CiAJY2lmLT5hcmdfdHlwZXMgPSBhdHlwZXM7CiAJY2lmLT5uYXJncyA9IG5hcmdzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCmluZGV4IDJhZmZiMTQuLmYyNjEwYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKQEAgLTIyNSwxNCArMjI1LDE2IEBACiAJCQkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJCQlmb3IgKHB0ciA9IHR5cGUtPmVsZW1lbnRzOyAqcHRyICE9IE5VTEw7IHB0cisrKQogCQkJeworCQkJCWludCBudW0sIHBvczsKKwogCQkJCWJ5dGVfb2Zmc2V0ID0gQUxJR04oYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIAotCQkJCWludAludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOworCQkJCW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CiAKIAkJCQlpZiAobnVtID09IDApCiAJCQkJCXJldHVybiAwOwogCi0JCQkJaW50IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKKwkJCQlwb3MgPSBieXRlX29mZnNldCAvIDg7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAJCQkJewpAQCAtNTg5LDExICs1OTEsMTIgQEAKIAl2b2lkCQkJKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCiAJdm9pZCoJCQl1c2VyX2RhdGEpCiB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcDsKKwogCWlmIChjaWYtPmFiaSAhPSBGRklfVU5JWDY0KQogCQlyZXR1cm4gRkZJX0JBRF9BQkk7CiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXAgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKKwl0cmFtcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOwogCiAJdHJhbXBbMF0gPSAweGJiNDk7CQkvKiBtb3YgPGNvZGU+LCAlcjExCSovCiAJKih2b2lkKiB2b2xhdGlsZSopJnRyYW1wWzFdID0gZmZpX2Nsb3N1cmVfdW5peDY0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKaW5kZXggMjVkOTk5Ni4uYjk1YjBhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCkBAIC00MTcsNiArNDE3LDggQEAKICAgICAgICAgICAgdGhhdCkuIFVzZSAnQicgZm9yIGJ5dGVzLiAqLwogICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICB9CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKICNkZWZpbmUgcmVhbGRpY3QgKChQeU9iamVjdCAqKSZzdGdkaWN0LT5kaWN0KQogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtNDgzLDcgKzQ4NSw3IEBACiAgICAgICAgICAgICBjaGFyICpmaWVsZGZtdCA9IGRpY3QtPmZvcm1hdCA/IGRpY3QtPmZvcm1hdCA6ICJCIjsKICAgICAgICAgICAgIGNoYXIgKmZpZWxkbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsgCisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAogICAgICAgICAgICAgaWYgKGZpZWxkbmFtZSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwppbmRleCBmNTYwNzAyLi44N2I5YzA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYworKysgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAgICAgbGlzdF9vZl9wYW5lbHMgKm5ldzsKIAotICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopbWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CisgICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHRlbXAgPSBsb3A7CiAgICAgaWYgKHRlbXAtPnBvID09IHBvKSB7CiAgICAgICAgIGxvcCA9IHRlbXAtPm5leHQ7Ci0gICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIFB5TWVtX0ZyZWUodGVtcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgd2hpbGUgKHRlbXAtPm5leHQgPT0gTlVMTCB8fCB0ZW1wLT5uZXh0LT5wbyAhPSBwbykgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgIH0KICAgICBuID0gdGVtcC0+bmV4dC0+bmV4dDsKLSAgICBmcmVlKHRlbXAtPm5leHQpOworICAgIFB5TWVtX0ZyZWUodGVtcC0+bmV4dCk7CiAgICAgdGVtcC0+bmV4dCA9IG47CiAgICAgcmV0dXJuOwogfQpAQCAtNTEzLDYgKzUxMyw4IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGltcG9ydF9jdXJzZXMoKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgLyogRm9yIGV4Y2VwdGlvbiBfY3Vyc2VzX3BhbmVsLmVycm9yICovCiAgICAgX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc0Vycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfY3Vyc2VzX3BhbmVsLmVycm9yIiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IGY1ZGY4MGMuLjk4YjgxZmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAjZGVmaW5lIFNUUklDVF9TWVNWX0NVUlNFUwogI2VuZGlmCiAKKy8qW2NsaW5pY10KK21vZHVsZSBjdXJzZXMKK2NsYXNzIGN1cnNlcy53aW5kb3cKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiAvKiBEZWZpbml0aW9uIG9mIGV4Y2VwdGlvbiBjdXJzZXMuZXJyb3IgKi8KIAogc3RhdGljIFB5T2JqZWN0ICpQeUN1cnNlc0Vycm9yOwpAQCAtMTY4LDEwICsxNzQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgY2FsbCBzdGFydF9jb2xvcigpIGZpcnN0Iik7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIDA7IH0KIAotI2lmbmRlZiBNSU4KLSNkZWZpbmUgTUlOKHgseSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLSNlbmRpZgotCiAvKiBVdGlsaXR5IEZ1bmN0aW9ucyAqLwogCiAvKgpAQCAtNTMzLDcgKzUzNSw3IEBACiAgICAgd28gPSBQeU9iamVjdF9ORVcoUHlDdXJzZXNXaW5kb3dPYmplY3QsICZQeUN1cnNlc1dpbmRvd19UeXBlKTsKICAgICBpZiAod28gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgICAgd28tPndpbiA9IHdpbjsKLSAgICB3by0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOworICAgIHdvLT5lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoZW5jb2RpbmcpOwogICAgIGlmICh3by0+ZW5jb2RpbmcgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYod28pOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNTQ3LDc0ICs1NDksMTQ0IEBACiB7CiAgICAgaWYgKHdvLT53aW4gIT0gc3Rkc2NyKSBkZWx3aW4od28tPndpbik7CiAgICAgaWYgKHdvLT5lbmNvZGluZyAhPSBOVUxMKQotICAgICAgICBmcmVlKHdvLT5lbmNvZGluZyk7CisgICAgICAgIFB5TWVtX0ZyZWUod28tPmVuY29kaW5nKTsKICAgICBQeU9iamVjdF9ERUwod28pOwogfQogCiAvKiBBZGRjaCwgQWRkc3RyLCBBZGRuc3RyICovCiAKKy8qW2NsaW5pY10KKworY3Vyc2VzLndpbmRvdy5hZGRjaAorCisgICAgWworICAgIHg6IGludAorICAgICAgWC1jb29yZGluYXRlLgorICAgIHk6IGludAorICAgICAgWS1jb29yZGluYXRlLgorICAgIF0KKworICAgIGNoOiBvYmplY3QKKyAgICAgIENoYXJhY3RlciB0byBhZGQuCisKKyAgICBbCisgICAgYXR0cjogbG9uZworICAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICBdCisgICAgLworCitQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLgorCitQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLAorb3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi4KK0J5IGRlZmF1bHQsIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMgYXJlIHRoZQorY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfXywKKyJhZGRjaChbeCwgeSxdIGNoLCBbYXR0cl0pXG4iCisiUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci5cbiIKKyJcbiIKKyIgIHhcbiIKKyIgICAgWC1jb29yZGluYXRlLlxuIgorIiAgeVxuIgorIiAgICBZLWNvb3JkaW5hdGUuXG4iCisiICBjaFxuIgorIiAgICBDaGFyYWN0ZXIgdG8gYWRkLlxuIgorIiAgYXR0clxuIgorIiAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLlxuIgorIlxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsXG4iCisib3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi5cbiIKKyJCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGVcbiIKKyJjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4iKTsKKworI2RlZmluZSBDVVJTRVNfV0lORE9XX0FERENIX01FVEhPRERFRiAgICBcCisgICAgeyJhZGRjaCIsIChQeUNGdW5jdGlvbiljdXJzZXNfd2luZG93X2FkZGNoLCBNRVRIX1ZBUkFSR1MsIGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5Q3Vyc2VzV2luZG93X0FkZENoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHgsIGludCB5LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IHJ0biwgeCwgeSwgdXNlX3h5ID0gRkFMU0U7Ci0gICAgUHlPYmplY3QgKmNob2JqOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBncm91cF9sZWZ0XzEgPSAwOworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CisgICAgUHlPYmplY3QgKmNoOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBsb25nIGF0dHIgPSAwOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmFkZGNoIiwgJmNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sOmFkZGNoIiwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpTzphZGRjaCIsICZ4LCAmeSwgJmNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9sOmFkZGNoIiwgJngsICZ5LCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImN1cnNlcy53aW5kb3cuYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybl92YWx1ZSA9IGN1cnNlc193aW5kb3dfYWRkY2hfaW1wbChzZWxmLCBncm91cF9sZWZ0XzEsIHgsIHksIGNoLCBncm91cF9yaWdodF8xLCBhdHRyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB4LCBpbnQgeSwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKQorLypbY2xpbmljIGNoZWNrc3VtOiA0NGVkOTU4Yjg5MWNkZTkxMjA1ZTU4NGM3NjZlMDQ4ZjM5OTk3MTRmXSovCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKmN3c2VsZiA9IChQeUN1cnNlc1dpbmRvd09iamVjdCAqKXNlbGY7CisgICAgaW50IGNvb3JkaW5hdGVzX2dyb3VwID0gZ3JvdXBfbGVmdF8xOworICAgIGludCBhdHRyX2dyb3VwID0gZ3JvdXBfcmlnaHRfMTsKKyAgICBpbnQgcnRuOwogICAgIGludCB0eXBlOwotICAgIGNodHlwZSBjaDsKKyAgICBjaHR5cGUgY2NoOwogI2lmZGVmIEhBVkVfTkNVUlNFU1cKICAgICBjY2hhcl90IHdjaDsKICNlbmRpZgotICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7Ci0gICAgbG9uZyBsYXR0cjsKICAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKIAotICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk87Y2ggb3IgaW50IiwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w7Y2ggb3IgaW50LGF0dHIiLCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU87eSx4LGNoIG9yIGludCIsICZ5LCAmeCwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU9sO3kseCxjaCBvciBpbnQsIGF0dHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFhdHRyX2dyb3VwKQorICAgICAgYXR0ciA9IEFfTk9STUFMOwogCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gsICZ3Y2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gsICZ3Y2gpOwogICAgIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkX3djaCI7CiAgICAgICAgIHdjaC5hdHRyID0gYXR0cjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChzZWxmLT53aW4seSx4LCAmd2NoKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChjd3NlbGYtPndpbix5LHgsICZ3Y2gpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKHNlbGYtPndpbiwgJndjaCk7CisgICAgICAgICAgICBydG4gPSB3YWRkX3djaChjd3NlbGYtPndpbiwgJndjaCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogI2Vsc2UKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoKTsKICNlbmRpZgogICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkY2giOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRjaChzZWxmLT53aW4seSx4LCBjaCB8IGF0dHIpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRjaChjd3NlbGYtPndpbix5LHgsIGNjaCB8IGF0dHIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRjaChzZWxmLT53aW4sIGNoIHwgYXR0cik7CisgICAgICAgICAgICBydG4gPSB3YWRkY2goY3dzZWxmLT53aW4sIGNjaCB8IGF0dHIpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTIxMiw3ICsxMjg0LDcgQEAKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4scnRuLE1JTihuLCAxMDIzKSk7CisgICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgpAQCAtMTIzMiwxMSArMTMwNCwxMSBAQAogI2lmZGVmIFNUUklDVF9TWVNWX0NVUlNFUwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJ0bjIgPSB3bW92ZShzZWxmLT53aW4seSx4KT09RVJSID8gRVJSIDoKLSAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CkBAIC0xMzc0LDcgKzE0NDYsNyBAQAogICAgIGNhc2UgMToKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4scnRuLE1JTihuLDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3kseCIsJnksJngpKQpAQCAtMTM4NCw3ICsxNDU2LDcgQEAKICAgICBjYXNlIDM6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3kseCxuIiwgJnksICZ4LCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IG12d2lubnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnN0ciByZXF1aXJlcyAwIG9yIDMgYXJndW1lbnRzIik7CkBAIC0xNjk4LDI2ICsxNzcwLDI0IEBACiAgICAgLyogV2UgaGF2ZSB0byBzaW11bGF0ZSB0aGlzIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgRklMRSosCiAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMTczMSw3ICsxODAxLDEyIEBACiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBmY2xvc2UoZnApOworCitleGl0OgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CiAgICAgcmVtb3ZlKGZuKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk0MiwyMCArMjAxNywyMCBAQAogICAgIGFzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodmFsdWUpOwogICAgIGlmIChhc2NpaSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgZW5jb2RpbmcgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKKyAgICBlbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKICAgICBQeV9ERUNSRUYoYXNjaWkpOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGCiAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKQEAgLTIyNTYsMTIgKzIzMzEsMTMgQEAKIFB5Q3Vyc2VzX0dldFdpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmVhbSkKIHsKICAgICBjaGFyIGZuWzEwMF07Ci0gICAgaW50IGZkOwotICAgIEZJTEUgKmZwOworICAgIGludCBmZCA9IC0xOworICAgIEZJTEUgKmZwID0gTlVMTDsKICAgICBQeU9iamVjdCAqZGF0YTsKICAgICBzaXplX3QgZGF0YWxlbjsKICAgICBXSU5ET1cgKndpbjsKICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKQEAgLTIyNjksNDQgKzIzNDUsNDcgQEAKICAgICBmZCA9IG1rc3RlbXAoZm4pOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKwogICAgIGRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHN0cmVhbSwgJlB5SWRfcmVhZCwgIiIpOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgJS4xMDBzIGluc3RlYWQgb2YgYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGRhdGFsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOwogICAgIGlmIChmd3JpdGUoUHlCeXRlc19BU19TVFJJTkcoZGF0YSksIDEsIGRhdGFsZW4sIGZwKSAhPSBkYXRhbGVuKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIFB5X0RFQ1JFRihkYXRhKTsKKwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aW4gPSBnZXR3aW4oZnApOwotICAgIGZjbG9zZShmcCk7Ci0gICAgcmVtb3ZlKGZuKTsKICAgICBpZiAod2luID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworICAgIHJlcyA9IFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworCitlcnJvcjoKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICBlbHNlIGlmIChmZCAhPSAtMSkKKyAgICAgICAgY2xvc2UoZmQpOworICAgIHJlbW92ZShmbik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0MTQsNyArMzQ5Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoc3RybmNtcChrZXlfbiwiS0VZX0YoIiw2KT09MCkgewogICAgICAgICAgICAgICAgIGNoYXIgKnAxLCAqcDI7Ci0gICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CisgICAgICAgICAgICAgICAga2V5X24yID0gUHlNZW1fTWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CiAgICAgICAgICAgICAgICAgaWYgKCFrZXlfbjIpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDMzLDcgKzM1MTIsNyBAQAogICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOwogICAgICAgICAgICAgU2V0RGljdEludChrZXlfbjIsa2V5KTsKICAgICAgICAgICAgIGlmIChrZXlfbjIgIT0ga2V5X24pCi0gICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoa2V5X24yKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIFNldERpY3RJbnQoIktFWV9NSU4iLCBLRVlfTUlOKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCmluZGV4IGZhMjMxZDkuLmU0ZGMxYmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwpAQCAtMTYsNiArMTYsMTIgQEAKICNpbmNsdWRlICJkYXRldGltZS5oIgogI3VuZGVmIFB5X0JVSUxEX0NPUkUKIAorLypbY2xpbmljXQorbW9kdWxlIGRhdGV0aW1lCitjbGFzcyBkYXRldGltZS5kYXRldGltZQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIC8qIFdlIHJlcXVpcmUgdGhhdCBDIGludCBiZSBhdCBsZWFzdCAzMiBiaXRzLCBhbmQgdXNlIGludCB2aXJ0dWFsbHkKICAqIGV2ZXJ5d2hlcmUuICBJbiBqdXN0IGEgZmV3IGNhc2VzIHdlIHVzZSBhIHRlbXAgbG9uZywgd2hlcmUgYSBQeXRob24KICAqIEFQSSByZXR1cm5zIGEgQyBsb25nLiAgSW4gc3VjaCBjYXNlcywgd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUKQEAgLTEwNCw2ICsxMTAsMTEgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9UWkluZm9UeXBlOwogc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RpbWVab25lVHlwZTsKIAorX1B5X0lERU5USUZJRVIoYXNfaW50ZWdlcl9yYXRpbyk7CitfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKK19QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7CitfUHlfSURFTlRJRklFUihzdHJmdGltZSk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTWF0aCB1dGlsaXRpZXMuCiAgKi8KQEAgLTE0MCwxOSArMTUxLDYgQEAKICAgICByZXR1cm4gcXVvOwogfQogCi0vKiBSb3VuZCBhIGRvdWJsZSB0byB0aGUgbmVhcmVzdCBsb25nLiAgfHh8IG11c3QgYmUgc21hbGwgZW5vdWdoIHRvIGZpdAotICogaW4gYSBDIGxvbmc7IHRoaXMgaXMgbm90IGNoZWNrZWQuCi0gKi8KLXN0YXRpYyBsb25nCi1yb3VuZF90b19sb25nKGRvdWJsZSB4KQotewotICAgIGlmICh4ID49IDAuMCkKLSAgICAgICAgeCA9IGZsb29yKHggKyAwLjUpOwotICAgIGVsc2UKLSAgICAgICAgeCA9IGNlaWwoeCAtIDAuNSk7Ci0gICAgcmV0dXJuIChsb25nKXg7Ci19Ci0KIC8qIE5lYXJlc3QgaW50ZWdlciB0byBtIC8gbiBmb3IgaW50ZWdlcnMgbSBhbmQgbi4gSGFsZi1pbnRlZ2VyIHJlc3VsdHMKICAqIGFyZSByb3VuZGVkIHRvIGV2ZW4uCiAgKi8KQEAgLTEyOTAsOCArMTI4OCw2IEBACiAgICAgICAgICAgICBnb3RvIERvbmU7CiAgICAgICAgIGZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKG5ld2ZtdCkpOwogICAgICAgICBpZiAoZm9ybWF0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKLQogICAgICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0aW1lLCAmUHlJZF9zdHJmdGltZSwgIk9PIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0aW1ldHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdCk7CkBAIC0xMzk3LDcgKzEzOTMsNyBAQAogICovCiAKIC8qIENvbnZlcnNpb24gZmFjdG9ycy4gKi8KLXN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3VzID0gTlVMTDsgICAgICAvKiAxICovCitzdGF0aWMgUHlPYmplY3QgKm9uZSA9IE5VTEw7ICAgICAgLyogMSAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbXMgPSBOVUxMOyAgICAgIC8qIDEwMDAgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3NlY29uZCA9IE5VTEw7ICAvKiAxMDAwMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9taW51dGUgPSBOVUxMOyAgLyogMWU2ICogNjAgYXMgUHl0aG9uIGludCAqLwpAQCAtMTU3OSw3ICsxNTc1LDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0xNjc4LDcgKzE2NzMsNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpweXVzX2luID0gTlVMTCwgKnRlbXAsICpweXVzX291dDsKICAgICBQeU9iamVjdCAqcmF0aW8gPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOwogCiAgICAgcHl1c19pbiA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcyhkZWx0YSk7CiAgICAgaWYgKHB5dXNfaW4gPT0gTlVMTCkKQEAgLTIxMTksNyArMjExMyw3IEBACiAgICAgICAgIGdvdG8gRG9uZQogCiAgICAgaWYgKHVzKSB7Ci0gICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIHVzX3Blcl91cywgJmxlZnRvdmVyX3VzKTsKKyAgICAgICAgeSA9IGFjY3VtKCJtaWNyb3NlY29uZHMiLCB4LCB1cywgb25lLCAmbGVmdG92ZXJfdXMpOwogICAgICAgICBDTEVBTlVQOwogICAgIH0KICAgICBpZiAobXMpIHsKQEAgLTIxNDgsNyArMjE0MiwzMyBAQAogICAgIH0KICAgICBpZiAobGVmdG92ZXJfdXMpIHsKICAgICAgICAgLyogUm91bmQgdG8gbmVhcmVzdCB3aG9sZSAjIG9mIHVzLCBhbmQgYWRkIGludG8geC4gKi8KLSAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBQeUxvbmdfRnJvbUxvbmcocm91bmRfdG9fbG9uZyhsZWZ0b3Zlcl91cykpOworICAgICAgICBkb3VibGUgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGludCB4X2lzX29kZDsKKyAgICAgICAgUHlPYmplY3QgKnRlbXA7CisKKyAgICAgICAgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGlmIChmYWJzKHdob2xlX3VzIC0gbGVmdG92ZXJfdXMpID09IDAuNSkgeworICAgICAgICAgICAgLyogV2UncmUgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzLiAgSW4gb3JkZXIKKyAgICAgICAgICAgICAqIHRvIGRvIHJvdW5kLWhhbGYtdG8tZXZlbiwgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB4CisgICAgICAgICAgICAgKiBpcyBvZGQuIE5vdGUgdGhhdCB4IGlzIG9kZCB3aGVuIGl0J3MgbGFzdCBiaXQgaXMgMS4gVGhlCisgICAgICAgICAgICAgKiBjb2RlIGJlbG93IHVzZXMgYml0d2lzZSBhbmQgb3BlcmF0aW9uIHRvIGNoZWNrIHRoZSBsYXN0CisgICAgICAgICAgICAgKiBiaXQuICovCisJICAgIHRlbXAgPSBQeU51bWJlcl9BbmQoeCwgb25lKTsgIC8qIHRlbXAgPC0geCAmIDEgKi8KKyAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeF9pc19vZGQgPSBQeU9iamVjdF9Jc1RydWUodGVtcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICBpZiAoeF9pc19vZGQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hvbGVfdXMgPSAyLjAgKiByb3VuZCgobGVmdG92ZXJfdXMgKyB4X2lzX29kZCkgKiAwLjUpIC0geF9pc19vZGQ7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wID0gUHlMb25nX0Zyb21Mb25nKChsb25nKXdob2xlX3VzKTsKKwogICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CiAgICAgICAgICAgICBnb3RvIERvbmU7CkBAIC0yMjM5LDIyICsyMjU5LDE0IEBACiB7CiAgICAgUHlPYmplY3QgKnRvdGFsX3NlY29uZHM7CiAgICAgUHlPYmplY3QgKnRvdGFsX21pY3Jvc2Vjb25kczsKLSAgICBQeU9iamVjdCAqb25lX21pbGxpb247CiAKICAgICB0b3RhbF9taWNyb3NlY29uZHMgPSBkZWx0YV90b19taWNyb3NlY29uZHMoKFB5RGF0ZVRpbWVfRGVsdGEgKilzZWxmKTsKICAgICBpZiAodG90YWxfbWljcm9zZWNvbmRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgb25lX21pbGxpb24gPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMEwpOwotICAgIGlmIChvbmVfbWlsbGlvbiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIG9uZV9taWxsaW9uKTsKKyAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIHVzX3Blcl9zZWNvbmQpOwogCiAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgUHlfREVDUkVGKG9uZV9taWxsaW9uKTsKICAgICByZXR1cm4gdG90YWxfc2Vjb25kczsKIH0KIApAQCAtMjYzMCw4ICsyNjQyLDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRlX3N0cihQeURhdGVUaW1lX0RhdGUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIigpIik7CiB9CiAKQEAgLTI2NzEsNyArMjY4MSw2IEBACiBkYXRlX2Zvcm1hdChQeURhdGVUaW1lX0RhdGUgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpmb3JtYXQ7Ci0gICAgX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTg4LDggKzM1OTcsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRpbWVfc3RyKFB5RGF0ZVRpbWVfVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKCkiKTsKIH0KIApAQCAtNDEzOCwzMSArNDE0NSw3MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8pOwogfQogCi0vKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCi0gKiBwcmVjaXNpb24gb2YgYSB0aW1lc3RhbXAuCi0gKi8KKy8qW2NsaW5pY10KKworQGNsYXNzbWV0aG9kCitkYXRldGltZS5kYXRldGltZS5ub3cKKworICAgIHR6OiBvYmplY3QgPSBOb25lCisgICAgICAgIFRpbWV6b25lIG9iamVjdC4KKworUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouCisKK0lmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX18sCisibm93KHR6PU5vbmUpXG4iCisiUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouXG4iCisiXG4iCisiICB0elxuIgorIiAgICBUaW1lem9uZSBvYmplY3QuXG4iCisiXG4iCisiSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLiIpOworCisjZGVmaW5lIERBVEVUSU1FX0RBVEVUSU1FX05PV19NRVRIT0RERUYgICAgXAorICAgIHsibm93IiwgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX2RhdGV0aW1lX25vdywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN8TUVUSF9DTEFTUywgZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kYXRldGltZV9ub3coUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqY2xzLCBQeU9iamVjdCAqdHopOworCitzdGF0aWMgUHlPYmplY3QgKgorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93KFB5VHlwZU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnR6ID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPOm5vdyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKGNscywgdHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbChQeVR5cGVPYmplY3QgKmNscywgUHlPYmplY3QgKnR6KQorLypbY2xpbmljIGNoZWNrc3VtOiBjYTNkMjZhNDIzYjNmNjMzYjI2MGM3NjIyZTMwM2YwOTE1YTk2ZjdjXSovCiB7CiAgICAgUHlPYmplY3QgKnNlbGY7Ci0gICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzpub3ciLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6aW5mbykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA8IDApCisgICAgLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQorICAgICAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KKyAgICAgKi8KKyAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoY2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7Ci0gICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0emluZm8gIT0gUHlfTm9uZSkgeworICAgIHNlbGYgPSBkYXRldGltZV9iZXN0X3Bvc3NpYmxlKChQeU9iamVjdCAqKWNscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eiA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6KTsKKyAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6ICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAotICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CisgICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6LCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwpAQCAtNDE5OSw3ICs0MjQ2LDYgQEAKICAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKICAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CkBAIC00NDIxLDYgKzQ0NjcsOSBAQAogICAgICAgICAgICAgZGVsdGFfdXMgPSBEQVRFX0dFVF9NSUNST1NFQ09ORChsZWZ0KSAtCiAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX01JQ1JPU0VDT05EKHJpZ2h0KTsKICAgICAgICAgICAgIHJlc3VsdCA9IG5ld19kZWx0YShkZWx0YV9kLCBkZWx0YV9zLCBkZWx0YV91cywgMSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgICAgIGlmIChvZmZkaWZmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZWx0YV9zdWJ0cmFjdChyZXN1bHQsIG9mZmRpZmYpOwpAQCAtNDQ4Miw4ICs0NTMxLDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRldGltZV9zdHIoUHlEYXRlVGltZV9EYXRlVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKHMpIiwgIiAiKTsKIH0KIApAQCAtNDc0OSw3ICs0Nzk2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJlc3VsdCA9IG5ld190aW1lem9uZShkZWx0YSwgbmFtZW8pOwotICAgIFB5X0RFQ1JFRihuYW1lbyk7CisgICAgUHlfWERFQ1JFRihuYW1lbyk7CiAgIGVycm9yOgogICAgIFB5X0RFQ1JFRihkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3NjIsNyArNDgwOSw2IEBACiAgICAgUHlPYmplY3QgKm9mZnNldDsKICAgICBQeU9iamVjdCAqdGVtcDsKICAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAogICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOmFzdGltZXpvbmUiLCBrZXl3b3JkcywKQEAgLTQ4NzMsOSArNDkxOSwxNiBAQAogICAgICAgICB0aW1lLnRtX3dkYXkgPSAtMTsKICAgICAgICAgdGltZS50bV9pc2RzdCA9IC0xOwogICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUoJnRpbWUpOwotICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKLSAgICAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICAgICAgaWYgKHRpbWVzdGFtcCA9PSAodGltZV90KSgtMSkgJiYgdGltZS50bV93ZGF5ID09IC0xKSB7CisgICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLAorICAgICAgICAgICAgICogYnV0IHRtX3dkYXkgY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KKyAgICAgICAgICAgICYmIHRpbWUudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgICAgIC8qIG9uIEFJWCwgdG1fd2RheSBpcyBhbHdheXMgc2V0cywgZXZlbiBvbiBlcnJvciAqLworI2VuZGlmCisgICAgICAgICAgKQorICAgICAgICB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00OTg5LDkgKzUwNDIsNyBAQAogCiAgICAgLyogQ2xhc3MgbWV0aG9kczogKi8KIAotICAgIHsibm93IiwgICAgICAgICAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfbm93LAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTIHwgTUVUSF9DTEFTUywKLSAgICAgUHlEb2NfU1RSKCJbdHpdIC0+IG5ldyBkYXRldGltZSB3aXRoIHR6J3MgbG9jYWwgZGF5IGFuZCB0aW1lLiIpfSwKKyAgICBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGCiAKICAgICB7InV0Y25vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX3V0Y25vdywKICAgICAgTUVUSF9OT0FSR1MgfCBNRVRIX0NMQVNTLApAQCAtNTI5OSw4ICs1MzUwLDggQEAKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbW9kdWxlIGluaXRpYWxpemF0aW9uICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1JTllFQVIiLCBNSU5ZRUFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUFYWUVBUiIsIE1BWFlFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1JTllFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWFlFQVIpOwogCiAgICAgUHlfSU5DUkVGKCZQeURhdGVUaW1lX0RhdGVUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImRhdGUiLCAoUHlPYmplY3QgKikgJlB5RGF0ZVRpbWVfRGF0ZVR5cGUpOwpAQCAtNTM0NCwxMiArNTM5NSwxMiBAQAogICAgIGFzc2VydChESTEwMFkgPT0gMjUgKiBESTRZIC0gMSk7CiAgICAgYXNzZXJ0KERJMTAwWSA9PSBkYXlzX2JlZm9yZV95ZWFyKDEwMCsxKSk7CiAKLSAgICB1c19wZXJfdXMgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDEpOwogICAgIHVzX3Blcl9tcyA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwKTsKICAgICB1c19wZXJfc2Vjb25kID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDApOwogICAgIHVzX3Blcl9taW51dGUgPSBQeUxvbmdfRnJvbUxvbmcoNjAwMDAwMDApOwogICAgIHNlY29uZHNfcGVyX2RheSA9IFB5TG9uZ19Gcm9tTG9uZygyNCAqIDM2MDApOwotICAgIGlmICh1c19wZXJfdXMgPT0gTlVMTCB8fCB1c19wZXJfbXMgPT0gTlVMTCB8fCB1c19wZXJfc2Vjb25kID09IE5VTEwgfHwKKyAgICBpZiAob25lID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CiAgICAgICAgIHVzX3Blcl9taW51dGUgPT0gTlVMTCB8fCBzZWNvbmRzX3Blcl9kYXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RibW1vZHVsZS5jIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKaW5kZXggODNjMDUxYy4uMTBmOGZiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKQEAgLTE0LDExICsxNCw3IEBACiAgKi8KICNpZiBkZWZpbmVkKEhBVkVfTkRCTV9IKQogI2luY2x1ZGUgPG5kYm0uaD4KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLXN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAibmRibSI7Ci0jZWxzZQogc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJHTlUgZ2RibSI7ICAvKiBFTVggcG9ydCBvZiBHREJNICovCi0jZW5kaWYKICNlbGlmIGRlZmluZWQoSEFWRV9HREJNX05EQk1fSCkKICNpbmNsdWRlIDxnZGJtL25kYm0uaD4KIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOwpAQCAtMzIsNiArMjgsMTIgQEAKICNlcnJvciAiTm8gbmRibS5oIGF2YWlsYWJsZSEiCiAjZW5kaWYKIAorLypbY2xpbmljXQorbW9kdWxlIGRibQorY2xhc3MgZGJtLmRibQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgaW50IGRpX3NpemU7ICAgICAgICAvKiAtMSBtZWFucyByZWNvbXB1dGUgKi8KQEAgLTQ3LDggKzQ5LDE2IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqRGJtRXJyb3I7CiAKKy8qW3B5dGhvbl0KK2NsYXNzIGRibW9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiZGJtb2JqZWN0ICoiCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnZHAnCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW5ld2RibW9iamVjdChjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorbmV3ZGJtb2JqZWN0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CiAgICAgZGJtb2JqZWN0ICpkcDsKIApAQCAtNjcsNyArNzcsNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKCBkcC0+ZGlfZGJtICkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtOTUsNyArMTA1LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwogICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CkBAIC0xNzAsNyArMTgwLDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fX2Nsb3NlKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGRibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTE4MCw5ICsxOTAsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2tleXMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9rZXlzKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnYsICppdGVtOworICAgIFB5T2JqZWN0ICp2LCAqaXRlbTsKICAgICBkYXR1bSBrZXk7CiAgICAgaW50IGVycjsKIApAQCAtMjUyLDMxICsyNjIsODAgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfaW5wbGFjZV9yZXBlYXQgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kYm1fZ2V0KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGRhdHVtIGtleSwgdmFsOwotICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IFB5X05vbmU7Ci0gICAgY2hhciAqdG1wX3B0cjsKLSAgICBQeV9zc2l6ZV90IHRtcF9zaXplOworLypbY2xpbmljXQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xPOmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfcHRyLCAmdG1wX3NpemUsICZkZWZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtleS5kcHRyID0gdG1wX3B0cjsKLSAgICBrZXkuZHNpemUgPSB0bXBfc2l6ZTsKLSAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7Ci0gICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGtleSk7Ci0gICAgaWYgKHZhbC5kcHRyICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZhbC5kcHRyLCB2YWwuZHNpemUpOwotICAgIGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoZGVmdmFsdWUpOwotICAgICAgICByZXR1cm4gZGVmdmFsdWU7CitkYm0uZGJtLmdldAorCisgICAgc2VsZjogZGJtb2JqZWN0CisKKyAgICBrZXk6IHN0cihsZW5ndGg9VHJ1ZSkKKyAgICBbCisgICAgZGVmYXVsdDogb2JqZWN0CisgICAgXQorICAgIC8KKworUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGJtX2RibV9nZXRfX2RvY19fLAorImdldChrZXksIFtkZWZhdWx0XSlcbiIKKyJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuIik7CisKKyNkZWZpbmUgREJNX0RCTV9HRVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldCIsIChQeUNGdW5jdGlvbilkYm1fZGJtX2dldCwgTUVUSF9WQVJBUkdTLCBkYm1fZGJtX2dldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgaW50IGdyb3VwX3JpZ2h0XzEsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9kYm1fZ2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmdldCIsICZrZXksICZrZXlfbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjTzpnZXQiLCAma2V5LCAma2V5X2xlbmd0aCwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJkYm0uZGJtLmdldCByZXF1aXJlcyAxIHRvIDIgYXJndW1lbnRzIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtX2RibV9nZXRfaW1wbCgoZGJtb2JqZWN0ICopc2VsZiwga2V5LCBrZXlfbGVuZ3RoLCBncm91cF9yaWdodF8xLCBkZWZhdWx0X3ZhbHVlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc2V0ZGVmYXVsdChyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK2RibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5LCBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIGludCBncm91cF9yaWdodF8xLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBjaGVja3N1bTogMjhjZjg5Mjg4MTFiZGU1MWU1MzVkNjdhZTk4ZWEwMzlkNzlkZjcxN10qLworeworICAgIGRhdHVtIGRibV9rZXksIHZhbDsKKworICAgIGlmICghZ3JvdXBfcmlnaHRfMSkKKyAgICAgICAgZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7CisgICAgZGJtX2tleS5kcHRyID0gKGNoYXIgKilrZXk7CisgICAgZGJtX2tleS5kc2l6ZSA9IGtleV9sZW5ndGg7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOworICAgIHZhbCA9IGRibV9mZXRjaChkcC0+ZGlfZGJtLCBkYm1fa2V5KTsKKyAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7CisKKyAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fc2V0ZGVmYXVsdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBkYXR1bSBrZXksIHZhbDsKICAgICBQeU9iamVjdCAqZGVmdmFsdWUgPSBOVUxMOwpAQCAtMzE3LDE4ICszNzYsMzMgQEAKICAgICByZXR1cm4gZGVmdmFsdWU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCisKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1fbWV0aG9kc1tdID0gewogICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9fY2xvc2UsICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImNsb3NlKClcbkNsb3NlIHRoZSBkYXRhYmFzZS4ifSwKICAgICB7ImtleXMiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fa2V5cywgICAgICAgICAgTUVUSF9OT0FSR1MsCiAgICAgICJrZXlzKCkgLT4gbGlzdFxuUmV0dXJuIGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIn0sCi0gICAgeyJnZXQiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX2dldCwgICAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgImdldChrZXlbLCBkZWZhdWx0XSkgLT4gdmFsdWVcbiIKLSAgICAgIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4ifSwKKyAgICBEQk1fREJNX0dFVF9NRVRIT0RERUYKICAgICB7InNldGRlZmF1bHQiLCAgICAgIChQeUNGdW5jdGlvbilkYm1fc2V0ZGVmYXVsdCwgICAgTUVUSF9WQVJBUkdTLAogICAgICAic2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSkgLT4gdmFsdWVcbiIKICAgICAgIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4gIElmIGtleVxuIgogICAgICAiaXMgbm90IGluIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW5zZXJ0ZWQgd2l0aCBkZWZhdWx0IGFzIHRoZSB2YWx1ZS4ifSwKKyAgICB7Il9fZW50ZXJfXyIsIGRibV9fZW50ZXJfXywgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgZGJtX19leGl0X18sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM2NSwxNiArNDM5LDY4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kYm1vcGVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpuYW1lOwotICAgIGNoYXIgKmZsYWdzID0gInIiOwotICAgIGludCBpZmxhZ3M7Ci0gICAgaW50IG1vZGUgPSAwNjY2OworLypbY2xpbmljXQogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xzaTpvcGVuIiwgJm5hbWUsICZmbGFncywgJm1vZGUpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitkYm0ub3BlbiBhcyBkYm1vcGVuCisKKyAgICBmaWxlbmFtZTogc3RyCisgICAgICAgIFRoZSBmaWxlbmFtZSB0byBvcGVuLgorCisgICAgZmxhZ3M6IHN0cj0iciIKKyAgICAgICAgSG93IHRvIG9wZW4gdGhlIGZpbGUuICAiciIgZm9yIHJlYWRpbmcsICJ3IiBmb3Igd3JpdGluZywgZXRjLgorCisgICAgbW9kZTogaW50KGRvY19kZWZhdWx0PSIwbzY2NiIpID0gMG82NjYKKyAgICAgICAgSWYgY3JlYXRpbmcgYSBuZXcgZmlsZSwgdGhlIG1vZGUgYml0cyBmb3IgdGhlIG5ldyBmaWxlCisgICAgICAgIChlLmcuIG9zLk9fUkRXUikuCisKKyAgICAvCisKK1JldHVybiBhIGRhdGFiYXNlIG9iamVjdC4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGJtb3Blbl9fZG9jX18sCisib3BlbihmaWxlbmFtZSwgZmxhZ3M9XCdyXCcsIG1vZGU9MG82NjYpXG4iCisiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgorIlxuIgorIiAgZmlsZW5hbWVcbiIKKyIgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uXG4iCisiICBmbGFnc1xuIgorIiAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gIFwiclwiIGZvciByZWFkaW5nLCBcIndcIiBmb3Igd3JpdGluZywgZXRjLlxuIgorIiAgbW9kZVxuIgorIiAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGVcbiIKKyIgICAgKGUuZy4gb3MuT19SRFdSKS4iKTsKKworI2RlZmluZSBEQk1PUEVOX01FVEhPRERFRiAgICBcCisgICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywgZGJtb3Blbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3BlbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICpmbGFncyA9ICJyIjsKKyAgICBpbnQgbW9kZSA9IDQzODsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAic3xzaTpvcGVuIiwKKyAgICAgICAgJmZpbGVuYW1lLCAmZmxhZ3MsICZtb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRibW9wZW5faW1wbChtb2R1bGUsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKQorLypbY2xpbmljIGNoZWNrc3VtOiBmYjI2NWY3NTY0MTU1M2NjZDk2M2Y4NGMxNDNiMzVjMTFmOTEyMWZjXSovCit7CisgICAgaW50IGlmbGFnczsKKwogICAgIGlmICggc3RyY21wKGZsYWdzLCAiciIpID09IDAgKQogICAgICAgICBpZmxhZ3MgPSBPX1JET05MWTsKICAgICBlbHNlIGlmICggc3RyY21wKGZsYWdzLCAidyIpID09IDAgKQpAQCAtMzkwLDEzICs1MTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJhcmcgMiB0byBvcGVuIHNob3VsZCBiZSAncicsICd3JywgJ2MnLCBvciAnbiciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBuZXdkYm1vYmplY3QobmFtZSwgaWZsYWdzLCBtb2RlKTsKKyAgICByZXR1cm4gbmV3ZGJtb2JqZWN0KGZpbGVuYW1lLCBpZmxhZ3MsIG1vZGUpOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtbW9kdWxlX21ldGhvZHNbXSA9IHsKLSAgICB7ICJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywKLSAgICAgICJvcGVuKHBhdGhbLCBmbGFnWywgbW9kZV1dKSAtPiBtYXBwaW5nXG4iCi0gICAgICAiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LiJ9LAorICAgIERCTU9QRU5fTUVUSE9EREVGCiAgICAgeyAwLCAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwppbmRleCBmNDU4OTNmLi5iM2I2OTc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCisrKyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKQEAgLTEsNjMgKzEsMjIgQEAKLS8qCi0gKiBFbGVtZW50VHJlZQotICogJElkOiBfZWxlbWVudHRyZWUuYyAzNDczIDIwMDktMDEtMTEgMjI6NTM6NTVaIGZyZWRyaWsgJAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorICogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAgKgotICogZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IKLSAqCi0gKiBIaXN0b3J5OgotICogMTk5OS0wNi0yMCBmbCAgY3JlYXRlZCAoYXMgcGFydCBvZiBzZ21sb3ApCi0gKiAyMDAxLTA1LTI5IGZsICBlZmZkb20gZWRpdGlvbgotICogMjAwMy0wMi0yNyBmbCAgZWxlbWVudHRyZWUgZWRpdGlvbiAoYWxwaGEpCi0gKiAyMDA0LTA2LTAzIGZsICB1cGRhdGVzIGZvciBlbGVtZW50dHJlZSAxLjIKLSAqIDIwMDUtMDEtMDUgZmwgIG1ham9yIG9wdGltaXphdGlvbiBlZmZvcnQKLSAqIDIwMDUtMDEtMTEgZmwgIGZpcnN0IHB1YmxpYyByZWxlYXNlIChjRWxlbWVudFRyZWUgMC44KQotICogMjAwNS0wMS0xMiBmbCAgc3BsaXQgZWxlbWVudCBvYmplY3QgaW50byBiYXNlIGFuZCBleHRyYXMKLSAqIDIwMDUtMDEtMTMgZmwgIHVzZSB0YWdnZWQgcG9pbnRlcnMgZm9yIHRhaWwvdGV4dCAoY0VsZW1lbnRUcmVlIDAuOSkKLSAqIDIwMDUtMDEtMTcgZmwgIGFkZGVkIHRyZWVidWlsZGVyIGNsb3NlIG1ldGhvZAotICogMjAwNS0wMS0xNyBmbCAgZml4ZWQgY3Jhc2ggaW4gZ2V0Y2hpbGRyZW4KLSAqIDIwMDUtMDEtMTggZmwgIHJlbW92ZWQgb2JzZXJ2ZXIgYXBpLCBhZGRlZCBpdGVycGFyc2UgKGNFbGVtZW50VHJlZSAwLjkuMykKLSAqIDIwMDUtMDEtMjMgZmwgIHJldmlzZWQgaXRlcnBhcnNlIGFwaTsgYWRkZWQgbmFtZXNwYWNlIGV2ZW50IHN1cHBvcnQgKDAuOS44KQotICogMjAwNS0wMS0yNiBmbCAgYWRkZWQgVkVSU0lPTiBtb2R1bGUgcHJvcGVydHkgKGNFbGVtZW50VHJlZSAxLjApCi0gKiAyMDA1LTAxLTI4IGZsICBhZGRlZCByZW1vdmUgbWV0aG9kICgxLjAuMSkKLSAqIDIwMDUtMDMtMDEgZmwgIGFkZGVkIGlzZWxlbWVudCBmdW5jdGlvbjsgZml4ZWQgbWFrZWVsZW1lbnQgYWxpYXNpbmcgKDEuMC4yKQotICogMjAwNS0wMy0xMyBmbCAgZXhwb3J0IENvbW1lbnQgYW5kIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi9QSSBoZWxwZXJzCi0gKiAyMDA1LTAzLTI2IGZsICBhZGRlZCBDb21tZW50IGFuZCBQSSBzdXBwb3J0IHRvIFhNTFBhcnNlcgotICogMjAwNS0wMy0yNyBmbCAgZXZlbnQgb3B0aW1pemF0aW9uczsgY29tcGxhaW4gYWJvdXQgYm9ndXMgZXZlbnRzCi0gKiAyMDA1LTA4LTA4IGZsICBmaXhlZCByZWFkIGVycm9yIGhhbmRsaW5nIGluIHBhcnNlCi0gKiAyMDA1LTA4LTExIGZsICBhZGRlZCBydW50aW1lIHRlc3QgZm9yIGNvcHkgd29ya2Fyb3VuZCAoMS4wLjMpCi0gKiAyMDA1LTEyLTEzIGZsICBhZGRlZCBleHBhdF9jYXBpIHN1cHBvcnQgKGZvciB4bWwuZXRyZWUpICgxLjAuNCkKLSAqIDIwMDUtMTItMTYgZmwgIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1zdGFuZGFyZCBlbmNvZGluZ3MKLSAqIDIwMDYtMDMtMDggZmwgIGZpeGVkIGEgY291cGxlIG9mIHBvdGVudGlhbCBudWxsLXJlZnMgYW5kIGxlYWtzCi0gKiAyMDA2LTAzLTEyIGZsICBtZXJnZSBpbiAyLjUgc3NpemVfdCBjaGFuZ2VzCi0gKiAyMDA3LTA4LTI1IGZsICBjYWxsIGN1c3RvbSBidWlsZGVyJ3MgY2xvc2UgbWV0aG9kIGZyb20gWE1MUGFyc2VyCi0gKiAyMDA3LTA4LTMxIGZsICBhZGRlZCBpdGVyLCBleHRlbmQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDEgZmwgIGZpeGVkIFBhcnNlRXJyb3IgZXhjZXB0aW9uLCBzZXRzbGljZSBzb3VyY2UgdHlwZSwgZXRjCi0gKiAyMDA3LTA5LTAzIGZsICBmaXhlZCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBpbnNlcnQgaW5kZXhlcwotICogMjAwNy0wOS0wNCBmbCAgYWRkZWQgaXRlcnRleHQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDYgZmwgIGFkZGVkIHBvc2l0aW9uIGF0dHJpYnV0ZSB0byBQYXJzZUVycm9yIGV4Y2VwdGlvbgotICogMjAwOC0wNi0wNiBmbCAgZGVsYXkgZXJyb3IgcmVwb3J0aW5nIGluIGl0ZXJwYXJzZSAoZnJvbSBIcnZvamUgTmlrc2ljKQotICoKKyAqIF9lbGVtZW50dHJlZSAtIEMgYWNjZWxlcmF0b3IgZm9yIHhtbC5ldHJlZS5FbGVtZW50VHJlZQogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgRnJlZHJpayBMdW5kaC4KICAqCiAgKiBpbmZvQHB5dGhvbndhcmUuY29tCiAgKiBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LiAqLwotLyogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuICovCi0KICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAotI2RlZmluZSBWRVJTSU9OICIxLjAuNiIKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGNvbmZpZ3VyYXRpb24gKi8KIAotLyogTGVhdmUgZGVmaW5lZCB0byBpbmNsdWRlIHRoZSBleHBhdC1iYXNlZCBYTUxQYXJzZXIgdHlwZSAqLwotI2RlZmluZSBVU0VfRVhQQVQKLQogLyogQW4gZWxlbWVudCBjYW4gaG9sZCB0aGlzIG1hbnkgY2hpbGRyZW4gd2l0aG91dCBleHRyYSBtZW1vcnkKICAgIGFsbG9jYXRpb25zLiAqLwogI2RlZmluZSBTVEFUSUNfQ0hJTERSRU4gNApAQCAtMTE5LDEwICs3OCw1MSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBYTUxQYXJzZXJfVHlwZTsKIAogCi0vKiBnbHVlIGZ1bmN0aW9ucyAoc2VlIHRoZSBpbml0IGZ1bmN0aW9uIGZvciBkZXRhaWxzKSAqLwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50cGF0aF9vYmo7CisvKiBQZXItbW9kdWxlIHN0YXRlOyBQRVAgMzEyMSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0ICpwYXJzZWVycm9yX29iajsKKyAgICBQeU9iamVjdCAqZGVlcGNvcHlfb2JqOworICAgIFB5T2JqZWN0ICplbGVtZW50cGF0aF9vYmo7Cit9IGVsZW1lbnR0cmVlc3RhdGU7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGU7CisKKy8qIEdpdmVuIGEgbW9kdWxlIG9iamVjdCAoYXNzdW1lZCB0byBiZSBfZWxlbWVudHRyZWUpLCBnZXQgaXRzIHBlci1tb2R1bGUKKyAqIHN0YXRlLgorICovCisjZGVmaW5lIEVUX1NUQVRFKG1vZCkgKChlbGVtZW50dHJlZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCisKKy8qIEZpbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBpbXBvcnRlZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc3ViLWludGVycHJldGVyCisgKiBhbmQgZ2V0IGl0cyBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURV9HTE9CQUwgXAorICAgICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKSkpCisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX2NsZWFyKFB5T2JqZWN0ICptKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfQ0xFQVIoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZWxlbWVudHRyZWVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfVklTSVQoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2VsZW1lbnR0cmVlX2ZyZWUodm9pZCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZV9jbGVhcigoUHlPYmplY3QgKiltKTsKK30KIAogLyogaGVscGVycyAqLwogCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogZGVlcGNvcHkoUHlPYmplY3QqIG9iamVjdCwgUHlPYmplY3QqIG1lbW8pCiB7CiAgICAgLyogZG8gYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCAqLwotCiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAotICAgIGlmICghZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqKSB7CisgICAgaWYgKCFzdC0+ZGVlcGNvcHlfb2JqKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICJkZWVwY29weSBoZWxwZXIgbm90IGZvdW5kIgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgYXJncyA9IFB5VHVwbGVfUGFjaygyLCBvYmplY3QsIG1lbW8pOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChlbGVtZW50dHJlZV9kZWVwY29weV9vYmosIGFyZ3MpOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3Qoc3QtPmRlZXBjb3B5X29iaiwgYXJncyk7CiAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjksOCArMjI5LDEwIEBACiBjcmVhdGVfZXh0cmEoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGF0dHJpYikKIHsKICAgICBzZWxmLT5leHRyYSA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoRWxlbWVudE9iamVjdEV4dHJhKSk7Ci0gICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoIWF0dHJpYikKICAgICAgICAgYXR0cmliID0gUHlfTm9uZTsKQEAgLTI4MywxMyArMjg1LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+ZXh0cmEgPSBOVUxMOwogCi0gICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKLSAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgewotICAgICAgICAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBQeV9JTkNSRUYodGFnKTsKICAgICBzZWxmLT50YWcgPSB0YWc7CiAKQEAgLTMwMyw2ICsyOTgsMTQgQEAKIAogICAgIEFMTE9DKHNpemVvZihFbGVtZW50T2JqZWN0KSwgImNyZWF0ZSBlbGVtZW50Iik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICBpZiAoYXR0cmliICE9IFB5X05vbmUgJiYgIWlzX2VtcHR5X2RpY3QoYXR0cmliKSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiAoUHlPYmplY3QqKSBzZWxmOwogfQogCkBAIC0zNTgsNiArMzYxLDcgQEAKIAogICAgIFB5X0RFQ1JFRihhdHRyaWJfc3RyKTsKIAorICAgIC8qIGF0dHJpYiBjYW4gYmUgTlVMTCBpZiBQeURpY3RfTmV3IGZhaWxlZCAqLwogICAgIGlmIChhdHRyaWIpCiAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKGF0dHJpYiwga3dkcykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MzMsOCArNDM3LDEwIEBACiAgICAgLyogbWFrZSBzdXJlIHNlbGYtPmNoaWxkcmVuIGNhbiBob2xkIHRoZSBnaXZlbiBudW1iZXIgb2YgZXh0cmEKICAgICAgICBlbGVtZW50cy4gIHNldCBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBpZiBhbGxvY2F0aW9uIGZhaWxlZCAqLwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgc2l6ZSA9IHNlbGYtPmV4dHJhLT5sZW5ndGggKyBleHRyYTsKIApAQCAtNTYxLDggKzU2Nyw5IEBACiAgICAgUHlPYmplY3QqIGF0dHJpYiA9IE5VTEw7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIU98TyE6U3ViRWxlbWVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZFbGVtZW50X1R5cGUsICZwYXJlbnQsICZ0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeURpY3RfVHlwZSwgJmF0dHJpYikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICZQeURpY3RfVHlwZSwgJmF0dHJpYikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKGF0dHJpYikgewogICAgICAgICAvKiBhdHRyaWIgcGFzc2VkIGFzIHBvc2l0aW9uYWwgYXJnICovCkBAIC01ODYsOCArNTkzLDkgQEAKICAgICB9CiAKICAgICBlbGVtID0gY3JlYXRlX25ld19lbGVtZW50KHRhZywgYXR0cmliKTsKLQogICAgIFB5X0RFQ1JFRihhdHRyaWIpOworICAgIGlmIChlbGVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGVsZW1lbnRfYWRkX3N1YmVsZW1lbnQocGFyZW50LCBlbGVtKSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKGVsZW0pOwpAQCAtNjQ1LDcgKzY1Myw2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBtZXRob2RzIChpbiBhbHBoYWJldGljYWwgb3JkZXIpICovCiAKIHN0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfYXBwZW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNjg5LDggKzY5Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZWxlbWVudCA9IChFbGVtZW50T2JqZWN0KikgY3JlYXRlX25ld19lbGVtZW50KAotICAgICAgICBzZWxmLT50YWcsIChzZWxmLT5leHRyYSkgPyBzZWxmLT5leHRyYS0+YXR0cmliIDogUHlfTm9uZQotICAgICAgICApOworICAgICAgICBzZWxmLT50YWcsIChzZWxmLT5leHRyYSkgPyBzZWxmLT5leHRyYS0+YXR0cmliIDogUHlfTm9uZSk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNzAzLDcgKzcwOSw2IEBACiAgICAgUHlfSU5DUkVGKEpPSU5fT0JKKGVsZW1lbnQtPnRhaWwpKTsKIAogICAgIGlmIChzZWxmLT5leHRyYSkgewotCiAgICAgICAgIGlmIChlbGVtZW50X3Jlc2l6ZShlbGVtZW50LCBzZWxmLT5leHRyYS0+bGVuZ3RoKSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzE1LDcgKzcyMCw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50LT5leHRyYS0+bGVuZ3RoID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKLQogICAgIH0KIAogICAgIHJldHVybiAoUHlPYmplY3QqKSBlbGVtZW50OwpAQCAtNzcyLDcgKzc3Niw2IEBACiAgICAgZWxlbWVudC0+dGFpbCA9IEpPSU5fU0VUKHRhaWwsIEpPSU5fR0VUKHNlbGYtPnRhaWwpKTsKIAogICAgIGlmIChzZWxmLT5leHRyYSkgewotCiAgICAgICAgIGlmIChlbGVtZW50X3Jlc2l6ZShlbGVtZW50LCBzZWxmLT5leHRyYS0+bGVuZ3RoKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC03ODYsNyArNzg5LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmV4dHJhLT5sZW5ndGggPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotCiAgICAgfQogCiAgICAgLyogYWRkIG9iamVjdCB0byBtZW1vIGRpY3Rpb25hcnkgKHNvIGRlZXBjb3B5IHdvbid0IHZpc2l0IGl0IGFnYWluKSAqLwpAQCAtMTA3OSw2ICsxMDgxLDcgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKQEAgLTEwODcsNyArMTA5MCw3IEBACiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkgewogICAgICAgICBfUHlfSURFTlRJRklFUihmaW5kKTsKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMTE1LDYgKzExMTgsNyBAQAogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBfUHlfSURFTlRJRklFUihmaW5kdGV4dCk7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgImRlZmF1bHQiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZmluZHRleHQiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJmRlZmF1bHRfdmFsdWUsICZuYW1lc3BhY2VzKSkKQEAgLTExMjIsNyArMTEyNiw3IEBACiAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kdGV4dCwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CkBAIC0xMTMyLDggKzExMzYsOCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykgewogICAgICAgICBFbGVtZW50T2JqZWN0KiBpdGVtID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07Ci0gICAgICAgIGlmIChFbGVtZW50X0NoZWNrRXhhY3QoaXRlbSkgJiYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLT50YWcsIHRhZywgUHlfRVEpID09IDEpKSB7Ci0KKyAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJgorICAgICAgICAgICAgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLT50YWcsIHRhZywgUHlfRVEpID09IDEpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCogdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoaXRlbSk7CiAgICAgICAgICAgICBpZiAodGV4dCA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfTmV3KDAsIDApOwpAQCAtMTE1NCw2ICsxMTU4LDcgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kYWxsIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKQEAgLTExNjIsNyArMTE2Nyw3IEBACiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkgewogICAgICAgICBfUHlfSURFTlRJRklFUihmaW5kYWxsKTsKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMTk0LDE0ICsxMTk5LDE1IEBACiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIF9QeV9JREVOVElGSUVSKGl0ZXJmaW5kKTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzppdGVyZmluZCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2l0ZXJmaW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCi0gICAgICAgICk7CisgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2l0ZXJmaW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMTMxMiw4ICsxMzE4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgaW5kZXggKz0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKQEAgLTE0NTQsOCArMTQ2MiwxMCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086c2V0IiwgJmtleSwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGF0dHJpYiA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICBpZiAoIWF0dHJpYikKQEAgLTE1NzAsOCArMTU4MCwxMCBAQAogICAgICAgICBQeU9iamVjdCogcmVjeWNsZSA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0KiBzZXEgPSBOVUxMOwogCi0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpdGVtLAogICAgICAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGgsCkBAIC0xNzg2LDcgKzE3OTgsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZXh0IikgPT0gMCkgewogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90ZXh0KHNlbGYpOwotICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgUHlfWElOQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIApAQCAtMTgwMSw4ICsxODEzLDEwIEBACiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RhaWwoc2VsZik7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIH0KIApAQCAtMTgxOSwxMCArMTgzMywxMCBAQAogICAgIGNoYXIgKm5hbWUgPSAiIjsKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQogICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lb2JqKTsKLQotICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKKworICAgIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYtPnRhZyk7CiAgICAgICAgIHNlbGYtPnRhZyA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGFnKTsKQEAgLTE4MzUsOCArMTg0OSwxMCBAQAogICAgICAgICBzZWxmLT50YWlsID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWlsKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwogICAgICAgICBzZWxmLT5leHRyYS0+YXR0cmliID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKQEAgLTIxNTIsMTQgKzIxNjgsNiBAQAogICAgIGl0ID0gUHlPYmplY3RfR0NfTmV3KEVsZW1lbnRJdGVyT2JqZWN0LCAmRWxlbWVudEl0ZXJfVHlwZSk7CiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCEoaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpKSkgewotICAgICAgICBQeU9iamVjdF9HQ19EZWwoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQgPSBOVUxMOwotICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4ID0gMDsKLSAgICBpdC0+cGFyZW50X3N0YWNrLT5uZXh0ID0gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodGFnKSkKICAgICAgICAgc3RhciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIqIik7CkBAIC0yMTY4LDE3ICsyMTc2LDI3IEBACiAKICAgICBpZiAoc3RhciAmJiBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodGFnLCBzdGFyLCBQeV9FUSkgPT0gMSkKICAgICAgICAgdGFnID0gUHlfTm9uZTsKLQogICAgIFB5X1hERUNSRUYoc3Rhcik7CisKKyAgICBQeV9JTkNSRUYodGFnKTsKICAgICBpdC0+c291Z2h0X3RhZyA9IHRhZzsKICAgICBpdC0+cm9vdF9kb25lID0gMDsKICAgICBpdC0+Z2V0dGV4dCA9IGdldHRleHQ7CisgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIGl0LT5yb290X2VsZW1lbnQgPSBzZWxmOwogCi0gICAgUHlfSU5DUkVGKHNlbGYpOwotICAgIFB5X0lOQ1JFRih0YWcpOwotCiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOworCisgICAgaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpOworICAgIGlmIChpdC0+cGFyZW50X3N0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGl0KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCA9IE5VTEw7CisgICAgaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXggPSAwOworICAgIGl0LT5wYXJlbnRfc3RhY2stPm5leHQgPSBOVUxMOworCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQogCkBAIC0yMzcxLDYgKzIzODksNyBAQAogewogICAgIFB5T2JqZWN0KiBub2RlOwogICAgIFB5T2JqZWN0KiB0aGlzOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKHNlbGYtPmRhdGEpIHsKICAgICAgICAgaWYgKHNlbGYtPnRoaXMgPT0gc2VsZi0+bGFzdCkgewpAQCAtMjQwMSw3ICsyNDIwLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VsZi0+cm9vdCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLAorICAgICAgICAgICAgICAgIHN0LT5wYXJzZWVycm9yX29iaiwKICAgICAgICAgICAgICAgICAibXVsdGlwbGUgZWxlbWVudHMgb24gdG9wIGxldmVsIgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjY4OCwxMCArMjcwNywxMiBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIHRoZSBleHBhdCBpbnRlcmZhY2UgKi8KIAotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQotCiAjaW5jbHVkZSAiZXhwYXQuaCIKICNpbmNsdWRlICJweWV4cGF0LmgiCisKKy8qIFRoZSBQeUV4cGF0X0NBUEkgc3RydWN0dXJlIGlzIGFuIGltbXV0YWJsZSBkaXNwYXRjaCB0YWJsZSwgc28gaXQgY2FuIGJlCisgKiBjYWNoZWQgZ2xvYmFsbHkgd2l0aG91dCBiZWluZyBpbiBwZXItbW9kdWxlIHN0YXRlLgorICovCiBzdGF0aWMgc3RydWN0IFB5RXhwYXRfQ0FQSSAqZXhwYXRfY2FwaTsKICNkZWZpbmUgRVhQQVQoZnVuYykgKGV4cGF0X2NhcGktPmZ1bmMpCiAKQEAgLTI3NTgsNiArMjc3OSwxMCBAQAogICAgICAgICBpZiAoaSAhPSBzaXplKSB7CiAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIHVuaXZlcnNhbCBuYW1lICovCiAgICAgICAgICAgICB0YWcgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUrMSk7CisgICAgICAgICAgICBpZiAodGFnID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh0YWcpOwogICAgICAgICAgICAgcFswXSA9ICd7JzsKICAgICAgICAgICAgIG1lbWNweShwKzEsIHN0cmluZywgc2l6ZSk7CkBAIC0yNzk3LDYgKzI4MjIsNyBAQAogZXhwYXRfc2V0X2Vycm9yKGVudW0gWE1MX0Vycm9yIGVycm9yX2NvZGUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBjaGFyICptZXNzYWdlKQogewogICAgIFB5T2JqZWN0ICplcnJtc2csICplcnJvciwgKnBvc2l0aW9uLCAqY29kZTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGVycm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlczogbGluZSAlZCwgY29sdW1uICVkIiwKICAgICAgICAgICAgICAgICBtZXNzYWdlID8gbWVzc2FnZSA6IEVYUEFUKEVycm9yU3RyaW5nKShlcnJvcl9jb2RlKSwKQEAgLTI4MDQsNyArMjgzMCw3IEBACiAgICAgaWYgKGVycm1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOworICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHN0LT5wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOwogICAgIFB5X0RFQ1JFRihlcnJtc2cpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MzQsNyArMjg2MCw3IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRihwb3NpdGlvbik7CiAKLSAgICBQeUVycl9TZXRPYmplY3QoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosIGVycm9yKTsKKyAgICBQeUVycl9TZXRPYmplY3Qoc3QtPnBhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CiAgICAgUHlfREVDUkVGKGVycm9yKTsKIH0KIApAQCAtMjg1Miw2ICsyODc4LDkgQEAKICAgICBpZiAoZGF0YV9sZW4gPCAyIHx8IGRhdGFfaW5bMF0gIT0gJyYnKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAga2V5ID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiArIDEsIGRhdGFfbGVuIC0gMiwgInN0cmljdCIpOwogICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm47CkBAIC0yODkyLDYgKzI5MjEsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWI7CiAgICAgaW50IG9rOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8qIHRhZyBuYW1lICovCiAgICAgdGFnID0gbWFrZXVuaXZlcnNhbChzZWxmLCB0YWdfaW4pOwogICAgIGlmICghdGFnKQpAQCAtMjk1MCw2ICsyOTgyLDkgQEAKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBkYXRhX2xlbiwgInN0cmljdCIpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuOyAvKiBwYXJzZXIgd2lsbCBsb29rIGZvciBlcnJvcnMgKi8KQEAgLTI5NzMsNiArMzAwOCw5IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogcmVzID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKQogICAgICAgICAvKiBzaG9ydGN1dCAqLwogICAgICAgICAvKiB0aGUgc3RhbmRhcmQgdHJlZSBidWlsZGVyIGRvZXNuJ3QgbG9vayBhdCB0aGUgZW5kIHRhZyAqLwpAQCAtMjk5Nyw2ICszMDM1LDkgQEAKICAgICBQeU9iamVjdCogc3ByZWZpeCA9IE5VTEw7CiAgICAgUHlPYmplY3QqIHN1cmkgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICh1cmkpCiAgICAgICAgIHN1cmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh1cmksIHN0cmxlbih1cmkpLCAic3RyaWN0Iik7CiAgICAgZWxzZQpAQCAtMzAyNCw2ICszMDY1LDkgQEAKIHN0YXRpYyB2b2lkCiBleHBhdF9lbmRfbnNfaGFuZGxlcihYTUxQYXJzZXJPYmplY3QqIHNlbGYsIGNvbnN0IFhNTF9DaGFyKiBwcmVmaXhfaW4pCiB7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoCiAgICAgICAgIChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwgMCwgTlVMTCwgTlVMTAogICAgICAgICApOwpAQCAtMzAzNSw2ICszMDc5LDkgQEAKICAgICBQeU9iamVjdCogY29tbWVudDsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzZWxmLT5oYW5kbGVfY29tbWVudCkgewogICAgICAgICBjb21tZW50ID0gUHlVbmljb2RlX0RlY29kZVVURjgoY29tbWVudF9pbiwgc3RybGVuKGNvbW1lbnRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGlmIChjb21tZW50KSB7CkBAIC0zMDU3LDYgKzMxMDQsOSBAQAogICAgIFB5T2JqZWN0ICpwYXJzZXJfZG9jdHlwZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZG9jdHlwZV9uYW1lX29iaiA9IG1ha2V1bml2ZXJzYWwoc2VsZiwgZG9jdHlwZV9uYW1lKTsKICAgICBpZiAoIWRvY3R5cGVfbmFtZV9vYmopCiAgICAgICAgIHJldHVybjsKQEAgLTMxMjUsNiArMzE3NSw5IEBACiAgICAgUHlPYmplY3QqIGRhdGE7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX3BpKSB7CiAgICAgICAgIHRhcmdldCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHRhcmdldF9pbiwgc3RybGVuKHRhcmdldF9pbiksICJzdHJpY3QiKTsKICAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4sIHN0cmxlbihkYXRhX2luKSwgInN0cmljdCIpOwpAQCAtMzI5Nyw2ICszMzUwLDcgQEAKIHsKICAgICBpbnQgb2s7CiAKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogICAgIG9rID0gRVhQQVQoUGFyc2UpKHNlbGYtPnBhcnNlciwgZGF0YSwgZGF0YV9sZW4sIGZpbmFsKTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMzMzMSwxMSArMzM4NSwxNCBAQAogICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiB0cmVlYnVpbGRlcl9kb25lKChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCk7Ci0gICAgfSBpZiAoc2VsZi0+aGFuZGxlX2Nsb3NlKSB7CisgICAgfQorICAgIGVsc2UgaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5oYW5kbGVfY2xvc2UsICIiKTsKLSAgICB9IGVsc2UKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIHJldHVybiByZXM7CisgICAgfQogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0zMzczLDEwICszNDMwLDkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgoteG1scGFyc2VyX3BhcnNlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit4bWxwYXJzZXJfcGFyc2Vfd2hvbGUoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKLSAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHVudGlsIGVuZCBvZiBpbnB1dCBzdHJlYW0gKi8KLQorICAgIC8qIChpbnRlcm5hbCkgcGFyc2UgdGhlIHdob2xlIGlucHV0LCB1bnRpbCBlbmQgb2Ygc3RyZWFtICovCiAgICAgUHlPYmplY3QqIHJlYWRlcjsKICAgICBQeU9iamVjdCogYnVmZmVyOwogICAgIFB5T2JqZWN0KiB0ZW1wOwpAQCAtMzQwMyw3ICszNDU5LDcgQEAKIAogICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QoYnVmZmVyKSkgewogICAgICAgICAgICAgLyogQSB1bmljb2RlIG9iamVjdCBpcyBlbmNvZGVkIGludG8gYnl0ZXMgdXNpbmcgVVRGLTggKi8KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUoYnVmZmVyKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoYnVmZmVyKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNDU3LDE0ICszNTEzLDE0IEBACiB4bWxwYXJzZXJfc2V0ZXZlbnRzKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgLyogYWN0aXZhdGUgZWxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGksIHNlcWxlbjsKKyAgICBUcmVlQnVpbGRlck9iamVjdCAqdGFyZ2V0OwogCi0gICAgUHlfc3NpemVfdCBpOwotICAgIFRyZWVCdWlsZGVyT2JqZWN0KiB0YXJnZXQ7Ci0KLSAgICBQeU9iamVjdCogZXZlbnRzOyAvKiBldmVudCBjb2xsZWN0b3IgKi8KLSAgICBQeU9iamVjdCogZXZlbnRfc2V0ID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudF9zZXQpKQorICAgIFB5T2JqZWN0ICpldmVudHNfcXVldWU7CisgICAgUHlPYmplY3QgKmV2ZW50c190b19yZXBvcnQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpldmVudHNfc2VxOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8Tzpfc2V0ZXZlbnRzIiwgICZQeUxpc3RfVHlwZSwgJmV2ZW50c19xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50c190b19yZXBvcnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CkBAIC0zNDc4LDkgKzM1MzQsOSBAQAogCiAgICAgdGFyZ2V0ID0gKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0OwogCi0gICAgUHlfSU5DUkVGKGV2ZW50cyk7CisgICAgUHlfSU5DUkVGKGV2ZW50c19xdWV1ZSk7CiAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmV2ZW50cyk7Ci0gICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHM7CisgICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHNfcXVldWU7CiAKICAgICAvKiBjbGVhciBvdXQgZXhpc3RpbmcgZXZlbnRzICovCiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5zdGFydF9ldmVudF9vYmopOwpAQCAtMzQ4OCw3NSArMzU0NCw3MSBAQAogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKICAgICBQeV9DTEVBUih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmopOwogCi0gICAgaWYgKGV2ZW50X3NldCA9PSBQeV9Ob25lKSB7CisgICAgaWYgKGV2ZW50c190b19yZXBvcnQgPT0gUHlfTm9uZSkgewogICAgICAgICAvKiBkZWZhdWx0IGlzICJlbmQiIG9ubHkgKi8KICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImVuZCIpOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2soZXZlbnRfc2V0KSkgLyogRklYTUU6IGhhbmRsZSBhcmJpdHJhcnkgc2VxdWVuY2VzICovCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCEoZXZlbnRzX3NlcSA9IFB5U2VxdWVuY2VfRmFzdChldmVudHNfdG9fcmVwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50cyBtdXN0IGJlIGEgc2VxdWVuY2UiKSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoZXZlbnRfc2V0KTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0KiBpdGVtID0gUHlUdXBsZV9HRVRfSVRFTShldmVudF9zZXQsIGkpOwotICAgICAgICBjaGFyKiBldmVudDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgZXZlbnQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGl0ZW0pOwotICAgICAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgZXZlbnQgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShldmVudHNfc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKmV2ZW50X25hbWVfb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKGV2ZW50c19zZXEsIGkpOworICAgICAgICBjaGFyICpldmVudF9uYW1lID0gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgeworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGl0ZW07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworCisgICAgICAgIGlmIChldmVudF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBldmVudHMgc2VxdWVuY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOworICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZCIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0LW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gaXRlbTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kLW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kLW5zIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudAotICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50X25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CiAgICAgUHlfUkVUVVJOX05PTkU7Ci0KLSAgZXJyb3I6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICJpbnZhbGlkIGV2ZW50IHR1cGxlIgotICAgICAgICApOwotICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgeG1scGFyc2VyX21ldGhvZHNbXSA9IHsKICAgICB7ImZlZWQiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9mZWVkLCBNRVRIX099LAogICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9jbG9zZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9wYXJzZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiX3BhcnNlX3dob2xlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfcGFyc2Vfd2hvbGUsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJfc2V0ZXZlbnRzIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfc2V0ZXZlbnRzLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZG9jdHlwZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2RvY3R5cGUsIE1FVEhfVkFSQVJHU30sCiAgICAge05VTEwsIE5VTEx9CkBAIC0zNjI4LDggKzM2ODAsNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKLSNlbmRpZgotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogcHl0aG9uIG1vZHVsZSBpbnRlcmZhY2UgKi8KIApAQCAtMzYzOSwyMiArMzY4OSwyOSBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9lbGVtZW50dHJlZW1vZHVsZSA9IHsKLSAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICAgICAiX2VsZW1lbnR0cmVlIiwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgLTEsCi0gICAgICAgIF9mdW5jdGlvbnMsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfZWxlbWVudHRyZWUiLAorICAgIE5VTEwsCisgICAgc2l6ZW9mKGVsZW1lbnR0cmVlc3RhdGUpLAorICAgIF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBlbGVtZW50dHJlZV90cmF2ZXJzZSwKKyAgICBlbGVtZW50dHJlZV9jbGVhciwKKyAgICBlbGVtZW50dHJlZV9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19lbGVtZW50dHJlZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptLCAqdGVtcDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKKyAgICBpZiAobSkgeworICAgICAgICBQeV9JTkNSRUYobSk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgb2JqZWN0IHR5cGVzICovCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudEl0ZXJfVHlwZSkgPCAwKQpAQCAtMzY2MywyMSArMzcyMCwyMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZFbGVtZW50X1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmWE1MUGFyc2VyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIAotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9lbGVtZW50dHJlZW1vZHVsZSk7CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmZWxlbWVudHRyZWVtb2R1bGUpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBFVF9TVEFURShtKTsKIAogICAgIGlmICghKHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHkiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CisgICAgc3QtPmRlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CiAgICAgUHlfWERFQ1JFRih0ZW1wKTsKIAotICAgIGlmICghKGVsZW1lbnRwYXRoX29iaiA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgieG1sLmV0cmVlLkVsZW1lbnRQYXRoIikpKQorICAgIGlmICghKHN0LT5lbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBsaW5rIGFnYWluc3QgcHlleHBhdCAqLwpAQCAtMzY5NywxMSArMzc1MywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKKyAgICBzdC0+cGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCiAgICAgICAgICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvciIsIFB5RXhjX1N5bnRheEVycm9yLCBOVUxMCiAgICAgICAgICk7Ci0gICAgUHlfSU5DUkVGKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7CisgICAgUHlfSU5DUkVGKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgc3QtPnBhcnNlZXJyb3Jfb2JqKTsKIAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkVsZW1lbnQiLCAoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKQEAgLTM3MDksMTAgKzM3NjUsOCBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUcmVlQnVpbGRlciIsIChQeU9iamVjdCAqKSZUcmVlQnVpbGRlcl9UeXBlKTsKIAotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmWE1MUGFyc2VyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiWE1MUGFyc2VyIiwgKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKaW5kZXggOGYwN2E4OS4uNTdiMWFjMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCisrKyBiL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwpAQCAtMTcsNyArMTcsNyBAQAogICAgb2YgZnJvemVuIG1vZHVsZXMgaW5zdGVhZCwgbGVmdCBkZWxpYmVyYXRlbHkgYmxhbmsgc28gYXMgdG8gYXZvaWQKICAgIHVuaW50ZW50aW9uYWwgaW1wb3J0IG9mIGEgc3RhbGUgdmVyc2lvbiBvZiBfZnJvemVuX2ltcG9ydGxpYi4gKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7Citjb25zdCBzdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICB7MCwgMCwgMH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI1LDcgKzI1LDcgQEAKIC8qIE9uIFdpbmRvd3MsIHRoaXMgbGlua3Mgd2l0aCB0aGUgcmVndWxhciBweXRob25YWS5kbGwsIHNvIHRoaXMgdmFyaWFibGUgY29tZXMKICAgIGZyb20gZnJvemVuLm9iai4gSW4gdGhlIE1ha2VmaWxlLCBmcm96ZW4ubyBpcyBub3QgbGlua2VkIGludG8gdGhpcyBleGVjdXRhYmxlLAogICAgc28gd2UgZGVmaW5lIHRoZSB2YXJpYWJsZSBoZXJlLiAqLwotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiBjb25zdCBjaGFyIGhlYWRlcltdID0gIi8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLyI7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIGhlYWRlcik7Ci0gICAgZnByaW50ZihvdXRmaWxlLCAidW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOwogICAgIGZvciAobiA9IDA7IG4gPCBkYXRhX3NpemU7IG4gKz0gMTYpIHsKICAgICAgICAgc2l6ZV90IGksIGVuZCA9IFB5X01JTihuICsgMTYsIGRhdGFfc2l6ZSk7CiAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICAiKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dkYm1tb2R1bGUuYyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwppbmRleCAwYmQ1OWM4Li4yMjllMTZlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCkBAIC03OSw3ICs3OSw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIGRhdHVtIGRyZWMsIGtyZWM7CkBAIC0yMzIsNyArMjMyLDcgQEAKIENsb3NlcyB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9jbG9zZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGlmIChkcC0+ZGlfZGJtKQogICAgICAgICBnZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiBHZXQgYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9rZXlzKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCAqaXRlbTsKKyAgICBQeU9iamVjdCAqdiwgKml0ZW07CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogICAgIGludCBlcnI7CiAKQEAgLTMzNyw5ICszMzcsOSBAQAogcmV0dXJucyB0aGUgc3RhcnRpbmcga2V5LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2ZpcnN0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fZmlyc3RrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXk7CiAKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CkBAIC0zNjcsOSArMzY3LDkgQEAKICAgICAgICAgICBrID0gZGIubmV4dGtleShrKSIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX25leHRrZXkocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fbmV4dGtleShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXksIG5leHRrZXk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOm5leHRrZXkiLCAma2V5LmRwdHIsICZrZXkuZHNpemUpKQpAQCAtMzk2LDcgKzM5Niw3IEBACiBrZXB0IGFuZCByZXVzZWQgYXMgbmV3IChrZXksdmFsdWUpIHBhaXJzIGFyZSBhZGRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9yZW9yZ2FuaXplKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fcmVvcmdhbml6ZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBlcnJubyA9IDA7CkBAIC00MTcsNyArNDE3LDcgQEAKIGFueSB1bndyaXR0ZW4gZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBkaXNrLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N5bmMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9zeW5jKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwogICAgIGdkYm1fc3luYyhkcC0+ZGlfZGJtKTsKQEAgLTQyNSw2ICs0MjUsMjAgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1fbWV0aG9kc1tdID0gewogICAgIHsiY2xvc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKWRibV9jbG9zZSwgICBNRVRIX05PQVJHUywgZGJtX2Nsb3NlX19kb2NfX30sCiAgICAgeyJrZXlzIiwgICAgICAoUHlDRnVuY3Rpb24pZGJtX2tleXMsICAgIE1FVEhfTk9BUkdTLCBkYm1fa2V5c19fZG9jX199LApAQCAtNDM0LDYgKzQ0OCw4IEBACiAgICAgeyJzeW5jIiwgICAgICAoUHlDRnVuY3Rpb24pZGJtX3N5bmMsICAgIE1FVEhfTk9BUkdTLCBkYm1fc3luY19fZG9jX199LAogICAgIHsiZ2V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9nZXQsICAgICBNRVRIX1ZBUkFSR1MsIGRibV9nZXRfX2RvY19ffSwKICAgICB7InNldGRlZmF1bHQiLChQeUNGdW5jdGlvbilkYm1fc2V0ZGVmYXVsdCxNRVRIX1ZBUkFSR1MsIGRibV9zZXRkZWZhdWx0X19kb2NfX30sCisgICAgeyJfX2VudGVyX18iLCBkYm1fX2VudGVyX18sIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgIGRibV9fZXhpdF9fLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZXN0YWx0LmMgYi9Nb2R1bGVzL19nZXN0YWx0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMzA2ODMuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fZ2VzdGFsdC5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk3IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KLVRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLUZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKLUZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi1XSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLUFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi1PRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1hY2ludG9zaCBHZXN0YWx0IGludGVyZmFjZSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0KLS8qIENvbnZlcnQgYSA0LWNoYXIgc3RyaW5nIG9iamVjdCBhcmd1bWVudCB0byBhbiBPU1R5cGUgdmFsdWUgKi8KLXN0YXRpYyBpbnQKLWNvbnZlcnRfdG9fT1NUeXBlKFB5T2JqZWN0ICp2LCBPU1R5cGUgKnByKQotewotICAgIHVpbnQzMl90IHRtcDsKLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh2KSB8fCBQeVVuaWNvZGVfR2V0TGVuZ3RoKHYpICE9IDQpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiT1NUeXBlIGFyZyBtdXN0IGJlIHN0cmluZyBvZiA0IGNoYXJzIik7Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIG1lbWNweSgoY2hhciAqKSZ0bXAsIF9QeVVuaWNvZGVfQXNTdHJpbmcodiksIDQpOwotICAgICpwciA9IChPU1R5cGUpbnRvaGwodG1wKTsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWdlc3RhbHRfZ2VzdGFsdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgT1NFcnIgaUVycjsKLSAgICBPU1R5cGUgc2VsZWN0b3I7Ci0gICAgU0ludDMyIHJlc3BvbnNlOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyYiLCBjb252ZXJ0X3RvX09TVHlwZSwgJnNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaUVyciA9IEdlc3RhbHQoc2VsZWN0b3IsICZyZXNwb25zZSk7Ci0gICAgaWYgKGlFcnIgIT0gMCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZXhpdCBjb2RlISIpOwotICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJlc3BvbnNlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBnZXN0YWx0X21ldGhvZHNbXSA9IHsKLSAgICB7Imdlc3RhbHQiLCBnZXN0YWx0X2dlc3RhbHQsIE1FVEhfVkFSQVJHU30sCi0gICAge05VTEwsIE5VTEx9IC8qIFNlbnRpbmVsICovCi19OwotCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGdlc3RhbHRtb2R1bGUgPSB7Ci0gICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfZ2VzdGFsdCIsCi0gICAgTlVMTCwKLSAgICAtMSwKLSAgICBnZXN0YWx0X21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAotfTsKLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9fZ2VzdGFsdCh2b2lkKQotewotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJmdlc3RhbHRtb2R1bGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faGFzaG9wZW5zc2wuYyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKaW5kZXggM2FiMWMwYy4uYTg2NmZiZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faGFzaG9wZW5zc2wuYworKysgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCkBAIC0xNywzNiArMTcsMTYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJoYXNobGliLmgiCiAKLSNpZmRlZiBXSVRIX1RIUkVBRAotI2luY2x1ZGUgInB5dGhyZWFkLmgiCi0gICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKLSAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCi0gICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0KLSAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCi0gICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCi0gICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCi0gICAgICAgIH0KLSNlbHNlCi0gICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKLSAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQotI2VuZGlmCiAKIC8qIEVWUCBpcyB0aGUgcHJlZmVycmVkIGludGVyZmFjZSB0byBoYXNoaW5nIGluIE9wZW5TU0wgKi8KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgogLyogV2UgdXNlIHRoZSBvYmplY3QgaW50ZXJmYWNlIHRvIGRpc2NvdmVyIHdoYXQgaGFzaGVzIE9wZW5TU0wgc3VwcG9ydHMuICovCiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKIAogI2RlZmluZSBNVU5DSF9TSVpFIElOVF9NQVgKIAotLyogVE9ETyhncHMpOiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgbW9kdWxlIG9yIEVWUG9iamVjdCBhdHRyaWJ1dGUKLSAqIHRvIGFsbG93IHRoZSB1c2VyIHRvIG9wdGltaXplIGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSB0aGV5J3JlIHVzaW5nLiAqLwotI2RlZmluZSBIQVNITElCX0dJTF9NSU5TSVpFIDIwNDgKLQogI2lmbmRlZiBIQVNIX09CSl9DT05TVFJVQ1RPUgogI2RlZmluZSBIQVNIX09CSl9DT05TVFJVQ1RPUiAwCiAjZW5kaWYKQEAgLTQ4OSw2ICs0NjksMjIzIEBACiB9CiAKIAorCisjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMDAwMCAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0hNQUMpIFwKKyAgICAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpKQorCisjZGVmaW5lIFBZX1BCS0RGMl9ITUFDIDEKKworLyogSW1wcm92ZWQgaW1wbGVtZW50YXRpb24gb2YgUEtDUzVfUEJLREYyX0hNQUMoKQorICoKKyAqIFBLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoKSBoYXNoZXMgdGhlIHBhc3N3b3JkIGV4YWN0bHkgb25lIHRpbWUgaW5zdGVhZCBvZgorICogYGl0ZXJgIHRpbWVzLiBUb2RheSAoMjAxMykgdGhlIGl0ZXJhdGlvbiBjb3VudCBpcyB0eXBpY2FsbHkgMTAwLDAwMCBvcgorICogbW9yZS4gVGhlIGltcHJvdmVkIGFsZ29yaXRobSBpcyBub3Qgc3ViamVjdCB0byBhIERlbmlhbC1vZi1TZXJ2aWNlCisgKiB2dWxuZXJhYmlsaXR5IHdpdGggb3Zlcmx5IGxhcmdlIHBhc3N3b3Jkcy4KKyAqCisgKiBBbHNvIE9wZW5TU0wgPCAxLjAgZG9uJ3QgcHJvdmlkZSBQS0NTNV9QQktERjJfSE1BQygpLCBvbmx5CisgKiBQS0NTNV9QQktERjJfU0hBMS4KKyAqLworc3RhdGljIGludAorUEtDUzVfUEJLREYyX0hNQUNfZmFzdChjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVyLCBjb25zdCBFVlBfTUQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIHVuc2lnbmVkIGNoYXIgZGlndG1wW0VWUF9NQVhfTURfU0laRV0sICpwLCBpdG1wWzRdOworICAgIGludCBjcGxlbiwgaiwgaywgdGtleWxlbiwgbWRsZW47CisgICAgdW5zaWduZWQgbG9uZyBpID0gMTsKKyAgICBITUFDX0NUWCBoY3R4X3RwbCwgaGN0eDsKKworICAgIG1kbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICBpZiAobWRsZW4gPCAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhNQUNfQ1RYX2luaXQoJmhjdHhfdHBsKTsKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4KTsKKyAgICBwID0gb3V0OworICAgIHRrZXlsZW4gPSBrZXlsZW47CisgICAgaWYgKCFITUFDX0luaXRfZXgoJmhjdHhfdHBsLCBwYXNzLCBwYXNzbGVuLCBkaWdlc3QsIE5VTEwpKSB7CisgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHdoaWxlKHRrZXlsZW4pIHsKKyAgICAgICAgaWYodGtleWxlbiA+IG1kbGVuKQorICAgICAgICAgICAgY3BsZW4gPSBtZGxlbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3BsZW4gPSB0a2V5bGVuOworICAgICAgICAvKiBXZSBhcmUgdW5saWtlbHkgdG8gZXZlciB1c2UgbW9yZSB0aGFuIDI1NiBibG9ja3MgKDUxMjAgYml0cyEpCisgICAgICAgICAqIGJ1dCBqdXN0IGluIGNhc2UuLi4KKyAgICAgICAgICovCisgICAgICAgIGl0bXBbMF0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gMjQpICYgMHhmZik7CisgICAgICAgIGl0bXBbMV0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGl0bXBbMl0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgaXRtcFszXSA9ICh1bnNpZ25lZCBjaGFyKShpICYgMHhmZik7CisgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFITUFDX1VwZGF0ZSgmaGN0eCwgc2FsdCwgc2FsdGxlbikKKyAgICAgICAgICAgICAgICB8fCAhSE1BQ19VcGRhdGUoJmhjdHgsIGl0bXAsIDQpCisgICAgICAgICAgICAgICAgfHwgIUhNQUNfRmluYWwoJmhjdHgsIGRpZ3RtcCwgTlVMTCkpIHsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgIG1lbWNweShwLCBkaWd0bXAsIGNwbGVuKTsKKyAgICAgICAgZm9yIChqID0gMTsgaiA8IGl0ZXI7IGorKykgeworICAgICAgICAgICAgaWYgKCFITUFDX0NUWF9jb3B5KCZoY3R4LCAmaGN0eF90cGwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFITUFDX1VwZGF0ZSgmaGN0eCwgZGlndG1wLCBtZGxlbikKKyAgICAgICAgICAgICAgICAgICAgfHwgIUhNQUNfRmluYWwoJmhjdHgsIGRpZ3RtcCwgTlVMTCkpIHsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjcGxlbjsgaysrKSB7CisgICAgICAgICAgICAgICAgcFtrXSBePSBkaWd0bXBba107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGtleWxlbi09IGNwbGVuOworICAgICAgICBpKys7CisgICAgICAgIHArPSBjcGxlbjsKKyAgICB9CisgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3NldEV4Y2VwdGlvbihQeU9iamVjdCAqZXhjKQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyY29kZTsKKyAgICBjb25zdCBjaGFyICpsaWIsICpmdW5jLCAqcmVhc29uOworCisgICAgZXJyY29kZSA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoIWVycmNvZGUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgInVua25vd24gcmVhc29ucyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgICBsaWIgPSBFUlJfbGliX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICBmdW5jID0gRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworICAgIHJlYXNvbiA9IEVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworCisgICAgaWYgKGxpYiAmJiBmdW5jKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXM6ICVzXSAlcyIsIGxpYiwgZnVuYywgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSBpZiAobGliKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXNdICVzIiwgbGliLCByZWFzb24pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgcmVhc29uKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihwYmtkZjJfaG1hY19fZG9jX18sCisicGJrZGYyX2htYWMoaGFzaF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywgZGtsZW49Tm9uZSkgLT4ga2V5XG5cCitcblwKK1Bhc3N3b3JkIGJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIgKFBLQ1MgIzUgdjIuMCkgd2l0aCBITUFDIGFzXG5cCitwc2V1ZG9yYW5kb20gZnVuY3Rpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwYmtkZjJfaG1hYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJoYXNoX25hbWUiLCAicGFzc3dvcmQiLCAic2FsdCIsICJpdGVyYXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRrbGVuIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmtleV9vYmogPSBOVUxMLCAqZGtsZW5fb2JqID0gUHlfTm9uZTsKKyAgICBjaGFyICpuYW1lLCAqa2V5OworICAgIFB5X2J1ZmZlciBwYXNzd29yZCwgc2FsdDsKKyAgICBsb25nIGl0ZXJhdGlvbnMsIGRrbGVuOworICAgIGludCByZXR2YWw7CisgICAgY29uc3QgRVZQX01EICpkaWdlc3Q7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJzeSp5Kmx8TzpwYmtkZjJfaG1hYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbmFtZSwgJnBhc3N3b3JkLCAmc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlcmF0aW9ucywgJmRrbGVuX29iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGlnZXN0ID0gRVZQX2dldF9kaWdlc3RieW5hbWUobmFtZSk7CisgICAgaWYgKGRpZ2VzdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5zdXBwb3J0ZWQgaGFzaCB0eXBlIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChwYXNzd29yZC5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoc2FsdC5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInNhbHQgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChpdGVyYXRpb25zIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24gdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGlmIChpdGVyYXRpb25zID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24gdmFsdWUgaXMgdG9vIGdyZWF0LiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoZGtsZW5fb2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgZGtsZW4gPSBFVlBfTURfc2l6ZShkaWdlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRrbGVuID0gUHlMb25nX0FzTG9uZyhka2xlbl9vYmopOworICAgICAgICBpZiAoKGRrbGVuID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGtsZW4gPCAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGlmIChka2xlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgLyogSU5UX01BWCBpcyBhbHdheXMgc21hbGxlciB0aGFuIGRrTGVuIG1heCAoMl4zMiAtIDEpICogaExlbiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAga2V5X29iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZGtsZW4pOworICAgIGlmIChrZXlfb2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGtleSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGtleV9vYmopOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldHZhbCA9IFBLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoKGNoYXIqKXBhc3N3b3JkLmJ1ZiwgKGludClwYXNzd29yZC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNhbHQuYnVmLCAoaW50KXNhbHQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9ucywgZGlnZXN0LCBka2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopa2V5KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgUHlfQ0xFQVIoa2V5X29iaik7CisgICAgICAgIF9zZXRFeGNlcHRpb24oUHlFeGNfVmFsdWVFcnJvcik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICBlbmQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzc3dvcmQpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNhbHQpOworICAgIHJldHVybiBrZXlfb2JqOworfQorCisjZW5kaWYKKwogLyogU3RhdGUgZm9yIG91ciBjYWxsYmFjayBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBhY2N1bXVsYXRlIGEgcmVzdWx0LiAqLwogdHlwZWRlZiBzdHJ1Y3QgX2ludGVybmFsX25hbWVfbWFwcGVyX3N0YXRlIHsKICAgICBQeU9iamVjdCAqc2V0OwpAQCAtNTE3LDkgKzcxNCw5IEBACiAgICAgICAgIHN0YXRlLT5lcnJvciA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5U2V0X0FkZChzdGF0ZS0+c2V0LCBweV9uYW1lKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihweV9uYW1lKTsKICAgICB9CiB9CiAKQEAgLTYxMCw2ICs4MDcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBFVlBfZnVuY3Rpb25zW10gPSB7CiAgICAgeyJuZXciLCAoUHlDRnVuY3Rpb24pRVZQX25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIEVWUF9uZXdfX2RvY19ffSwKKyNpZmRlZiBQWV9QQktERjJfSE1BQworICAgIHsicGJrZGYyX2htYWMiLCAoUHlDRnVuY3Rpb24pcGJrZGYyX2htYWMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICBwYmtkZjJfaG1hY19fZG9jX199LAorI2VuZGlmCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYobWQ1KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGExKSwKICNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCkBAIC02NDMsNiArODQ0LDcgQEAKICAgICBQeU9iamVjdCAqbSwgKm9wZW5zc2xfbWRfbWV0aF9uYW1lczsKIAogICAgIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKCk7CisgICAgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKIAogICAgIC8qIFRPRE8gYnVpbGQgRVZQX2Z1bmN0aW9ucyBvcGVuc3NsXyogZW50cmllcyBkeW5hbWljYWxseSBiYXNlZAogICAgICAqIG9uIHdoYXQgaGFzaGVzIGFyZSBzdXBwb3J0ZWQgcmF0aGVyIHRoYW4gbGlzdGluZyBtYW55CkBAIC02NjcsMTAgKzg2OSw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotI2lmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCi0gICAgUHlfSU5DUkVGKCZFVlB0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJkVWUHR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiSEFTSCIsIChQeU9iamVjdCAqKSZFVlB0eXBlKTsKLSNlbmRpZgogCiAgICAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGJ5IHRoZSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvcnMgKi8KICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhtZDUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKaW5kZXggZjM3N2U5Yy4uOTZhZmNkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faGVhcHFtb2R1bGUuYworKysgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCkBAIC0xNjgsNyArMTY4LDEwIEBACiAKICAgICBsYXN0ZWx0ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIG4tMSkgOwogICAgIFB5X0lOQ1JFRihsYXN0ZWx0KTsKLSAgICBQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKTsKKyAgICBpZiAoUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsYXN0ZWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG4tLTsKIAogICAgIGlmICghbikKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKaW5kZXggNGE3ZTc1OC4uOTg2NmZiZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKQEAgLTEyNiw4ICsxMjYsNyBAQAogIidiJyAgICAgICBiaW5hcnkgbW9kZVxuIgogIid0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpXG4iCiAiJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKVxuIgotIidVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkXG4iCi0iICAgICAgICAgIGZvciBuZXcgY29kZSlcbiIKKyInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZGVwcmVjYXRlZClcbiIKICI9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCiAiXG4iCiAiVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbVxuIgpAQCAtMTQzLDYgKzE0MiwxMCBAQAogInJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGFcbiIKICJwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi5cbiIKICJcbiIKKyInVScgbW9kZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnNcbiIKKyJvZiBQeXRob24uICBJdCBoYXMgbm8gZWZmZWN0IGluIFB5dGhvbiAzLiAgVXNlIG5ld2xpbmUgdG8gY29udHJvbFxuIgorInVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLlxuIgorIlxuIgogImJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LlxuIgogIlBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3RcbiIKICJsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlXG4iCkBAIC0zMTAsNiArMzEzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZWFkaW5nID0gMTsKICAgICB9CiAKQEAgLTUzMyw2ICs1MzksMzEgQEAKIH0KIAogCitQeU9iamVjdCAqCitfUHlJT19nZXRfbG9jYWxlX21vZHVsZShfUHlJT19TdGF0ZSAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKm1vZDsKKyAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgIT0gTlVMTCkgeworICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHN0YXRlLT5sb2NhbGVfbW9kdWxlKSk7CisgICAgICAgIG1vZCA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHN0YXRlLT5sb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKG1vZCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kKTsKKyAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoc3RhdGUtPmxvY2FsZV9tb2R1bGUpOworICAgIH0KKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9ib290bG9jYWxlIik7CisgICAgaWYgKG1vZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5V2Vha3JlZl9OZXdSZWYobW9kLCBOVUxMKTsKKyAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobW9kKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtb2Q7Cit9CisKKwogc3RhdGljIGludAogaW9tb2R1bGVfdHJhdmVyc2UoUHlPYmplY3QgKm1vZCwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpIHsKICAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19NT0RfU1RBVEUobW9kKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKaW5kZXggMGZlOTBhMy4uYjkwYTY1OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKQEAgLTc3LDcgKzc3LDcgQEAKICAgIGxvbmcgd2l0aCAiJWxsZCIgZXZlbiB3aGVuIGJvdGggbG9uZyBhbmQgbG9uZyBsb25nIGhhdmUgdGhlIHNhbWUKICAgIHByZWNpc2lvbi4gKi8KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAKIC8qIFdpbmRvd3MgdXNlcyBsb25nIGxvbmcgZm9yIG9mZnNldHMgKi8KIHR5cGVkZWYgUFlfTE9OR19MT05HIFB5X29mZl90OwpAQCAtMTM3LDYgKzEzNyw4IEBACiAjZGVmaW5lIElPX01PRF9TVEFURShtb2QpICgoX1B5SU9fU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQogI2RlZmluZSBJT19TVEFURSBJT19NT0RfU1RBVEUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZfUHlJT19Nb2R1bGUpKQogCitleHRlcm4gUHlPYmplY3QgKl9QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICopOworCiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZTsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlZDsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2RlY29kZTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwppbmRleCAzYWZlN2IxLi5hMDRiNDhkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKKysrIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCkBAIC01Miw3ICs1Miw2IEBACiAgICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCAqZGF0YTsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyo6cmVhZGludG8iLCAmYnVmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE5MCw3ICsxODksOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkaW9iYXNlX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTIwOSw2ICsyMDksMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtMjIwLDcgKzIzMCw3IEBACiAgICAgaW50IGRldGFjaGVkOwogICAgIGludCByZWFkYWJsZTsKICAgICBpbnQgd3JpdGFibGU7Ci0gICAgaW50IGRlYWxsb2NhdGluZzsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAKICAgICAvKiBUcnVlIGlmIHRoaXMgaXMgYSB2YW5pbGxhIEJ1ZmZlcmVkIG9iamVjdCAocmF0aGVyIHRoYW4gYSB1c2VyIGRlcml2ZWQKICAgICAgICBjbGFzcykgKmFuZCogdGhlIHJhdyBzdHJlYW0gaXMgYSB2YW5pbGxhIEZpbGVJTyBvYmplY3QuICovCkBAIC0zODQsOCArMzk0LDggQEAKIHN0YXRpYyB2b2lkCiBidWZmZXJlZF9kZWFsbG9jKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIHNlbGYtPm9rID0gMDsKQEAgLTQyOCw4ICs0MzgsNiBAQAogc3RhdGljIGludAogYnVmZmVyZWRfY2xlYXIoYnVmZmVyZWQgKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CkBAIC01MDgsNyArNTE2LDcgQEAKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gYnVmZmVyZWRfZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CkBAIC01MjcsNiArNTM1LDExIEBACiAKICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9jbG9zZSwgTlVMTCk7CiAKKyAgICBpZiAoc2VsZi0+YnVmZmVyKSB7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKKyAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKKyAgICB9CisKICAgICBpZiAoZXhjICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9DTEVBUihyZXMpOwpAQCAtNjU4LDYgKzY3MSwxMSBAQAogX3NldF9CbG9ja2luZ0lPRXJyb3IoY2hhciAqbXNnLCBQeV9zc2l6ZV90IHdyaXR0ZW4pCiB7CiAgICAgUHlPYmplY3QgKmVycjsKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICBlcnIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfQmxvY2tpbmdJT0Vycm9yLCAiaXNuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIG1zZywgd3JpdHRlbik7CiAgICAgaWYgKGVycikKQEAgLTE3MzksNiArMTc1Nyw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJlYWRlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMTc3MSw3ICsxNzkwLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHJlYWRlcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTE3OTAsNiArMTgwOSwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJlYWRlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjEyMCw2ICsyMTQ5LDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkd3JpdGVyX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yMTUyLDcgKzIxODIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkd3JpdGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjE3MSw2ICsyMjAxLDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkd3JpdGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yNDA2LDcgKzI0NDYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyogdHBfZmxhZ3MgKi8KICAgICBidWZmZXJlZHJ3cGFpcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZHJ3cGFpcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZHJ3cGFpcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI0MjUsNiArMjQ2NSwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJ3cGFpcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjUxMiw2ICsyNTYyLDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmFuZG9tX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNTQ0LDcgKzI1OTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkcmFuZG9tX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjU2Myw0ICsyNjE0LDE0IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmFuZG9tX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vZmlsZWlvLmMgYi9Nb2R1bGVzL19pby9maWxlaW8uYwppbmRleCBmM2NlNzc2Li4wZTFlNzA5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9maWxlaW8uYworKysgYi9Nb2R1bGVzL19pby9maWxlaW8uYwpAQCAtNTIsMTMgKzUyLDE1IEBACiAgICAgdW5zaWduZWQgaW50IGFwcGVuZGluZyA6IDE7CiAgICAgc2lnbmVkIGludCBzZWVrYWJsZSA6IDI7IC8qIC0xIG1lYW5zIHVua25vd24gKi8KICAgICB1bnNpZ25lZCBpbnQgY2xvc2VmZCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGRlYWxsb2NhdGluZzogMTsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5T2JqZWN0ICpkaWN0OwogfSBmaWxlaW87CiAKIFB5VHlwZU9iamVjdCBQeUZpbGVJT19UeXBlOwogCitfUHlfSURFTlRJRklFUihuYW1lKTsKKwogI2RlZmluZSBQeUZpbGVJT19DaGVjayhvcCkgKFB5T2JqZWN0X1R5cGVDaGVjaygob3ApLCAmUHlGaWxlSU9fVHlwZSkpCiAKIGludApAQCAtMTI5LDcgKzEzMSw3IEBACiAgICAgICAgIHNlbGYtPmZkID0gLTE7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgUHlPYmplY3QgKnIgPSBmaWxlaW9fZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CkBAIC0yMDQsNiArMjA2LDkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmZGVmIE9fQ0xPRVhFQworZXh0ZXJuIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VuZGlmCiAKIHN0YXRpYyBpbnQKIGZpbGVpb19pbml0KFB5T2JqZWN0ICpvc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMjIzLDYgKzIyOCwxMSBAQAogICAgIGludCBmZCA9IC0xOwogICAgIGludCBjbG9zZWZkID0gMTsKICAgICBpbnQgZmRfaXNfb3duID0gMDsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZWxpZiAhZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCiAKICAgICBhc3NlcnQoUHlGaWxlSU9fQ2hlY2sob3NlbGYpKTsKICAgICBpZiAoc2VsZi0+ZmQgPj0gMCkgewpAQCAtMzQzLDYgKzM1MywxMiBAQAogICAgIGZsYWdzIHw9IE9fQklOQVJZOwogI2VuZGlmCiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CisjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZW5kaWYKKwogICAgIGlmIChmZCA+PSAwKSB7CiAgICAgICAgIGlmIChjaGVja19mZChmZCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzY2LDEwICszODIsMTggQEAKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgICAgIHNlbGYtPmZkID0gb3BlbihuYW1lLCBmbGFncywgMDY2Nik7CisKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZmRvYmogPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVyLCAiT2kiLCBuYW1lb2JqLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZmRvYmo7CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgICAgICAgICAgLyogdGhlIG9wZW5lciBtYXkgY2xlYXIgdGhlIGF0b21pYyBmbGFnICovCisgICAgICAgICAgICBhdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKworICAgICAgICAgICAgZmRvYmogPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ob3BlbmVyLCAiT2kiLCBuYW1lb2JqLCBmbGFncyk7CiAgICAgICAgICAgICBpZiAoZmRvYmogPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2soZmRvYmopKSB7CkBAIC0zODgsMTQgKzQxMiwxNCBAQAogCiAgICAgICAgIGZkX2lzX293biA9IDE7CiAgICAgICAgIGlmIChzZWxmLT5mZCA8IDApIHsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICAgICBpZiAod2lkZW5hbWUgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfSU9FcnJvciwgbmFtZW9iaik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgbmFtZSk7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgbmFtZW9iaik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5mZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKGRpcmNoZWNrKHNlbGYsIG5hbWVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTQwNSw3ICs0MjksNyBAQAogICAgIF9zZXRtb2RlKHNlbGYtPmZkLCBPX0JJTkFSWSk7CiAjZW5kaWYKIAotICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXNlbGYsICJuYW1lIiwgbmFtZW9iaikgPCAwKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX25hbWUsIG5hbWVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChzZWxmLT5hcHBlbmRpbmcpIHsKQEAgLTQ0OSw3ICs0NzMsNyBAQAogc3RhdGljIHZvaWQKIGZpbGVpb19kZWFsbG9jKGZpbGVpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOworICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOwogICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwpAQCAtNTM1LDcgKzU1OSw3IEBACiAgICAgICAgIGxlbiA9IHBidWYubGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOwpAQCAtNTU4LDMzICs1ODIsMjcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCisjaWZuZGVmIEhBVkVfRlNUQVQKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihyZWFkYWxsKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3JlYWRhbGwsICJPIiwgc2VsZik7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBzaXplX3QKLW5ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplCi0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICAgICAgICAgLCBQeV9vZmZfdCBwb3MsIFB5X29mZl90IGVuZAotI2VuZGlmCi0gICAgICAgICAgICAgICApCituZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZSkKIHsKICAgICBzaXplX3QgYWRkZW5kOwotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBpZiAoZW5kICE9IChQeV9vZmZfdCktMSkgewotICAgICAgICAvKiBGaWxlcyBjbGFpbWluZyBhIHNpemUgc21hbGxlciB0aGFuIFNNQUxMQ0hVTksgbWF5Ci0gICAgICAgICAgIGFjdHVhbGx5IGJlIHN0cmVhbWluZyBwc2V1ZG8tZmlsZXMuIEluIHRoaXMgY2FzZSwgd2UKLSAgICAgICAgICAgYXBwbHkgdGhlIG1vcmUgYWdncmVzc2l2ZSBhbGdvcml0aG0gYmVsb3cuCi0gICAgICAgICovCi0gICAgICAgIGlmIChlbmQgPj0gU01BTExDSFVOSyAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAvKiBBZGQgMSBzbyBpZiB0aGUgZmlsZSB3ZXJlIHRvIGdyb3cgd2UnZCBub3RpY2UuICovCi0gICAgICAgICAgICBQeV9vZmZfdCBidWZzaXplID0gY3VycmVudHNpemUgKyBlbmQgLSBwb3MgKyAxOwotICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPCBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNpemVfdClidWZzaXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBQWV9TU0laRV9UX01BWDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorCiAgICAgLyogRXhwYW5kIHRoZSBidWZmZXIgYnkgYW4gYW1vdW50IHByb3BvcnRpb25hbCB0byB0aGUgY3VycmVudCBzaXplLAogICAgICAgIGdpdmluZyB1cyBhbW9ydGl6ZWQgbGluZWFyLXRpbWUgYmVoYXZpb3IuICBGb3IgYmlnZ2VyIHNpemVzLCB1c2UgYQogICAgICAgIGxlc3MtdGhhbi1kb3VibGUgZ3Jvd3RoIGZhY3RvciB0byBhdm9pZCBleGNlc3NpdmUgYWxsb2NhdGlvbi4gKi8KKyAgICBhc3NlcnQoY3VycmVudHNpemUgPD0gUFlfU1NJWkVfVF9NQVgpOwogICAgIGlmIChjdXJyZW50c2l6ZSA+IDY1NTM2KQogICAgICAgICBhZGRlbmQgPSBjdXJyZW50c2l6ZSA+PiAzOwogICAgIGVsc2UKQEAgLTU5OCwyNiArNjE2LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWRhbGwoZmlsZWlvICpzZWxmKQogewotI2lmZGVmIEhBVkVfRlNUQVQKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICAgICBQeV9vZmZfdCBwb3MsIGVuZDsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgUHlfc3NpemVfdCBieXRlc19yZWFkID0gMDsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgc2l6ZV90IG5ld3NpemU7CisgICAgc2l6ZV90IGJ1ZnNpemU7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIAotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgU01BTExDSFVOSyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmZGVmIEhBVkVfRlNUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIHBvcyA9IF9sc2Vla2k2NChzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKICNlbHNlCiAgICAgcG9zID0gbHNlZWsoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CkBAIC02MjYsNDQgKzYzNyw0NiBAQAogICAgICAgICBlbmQgPSBzdC5zdF9zaXplOwogICAgIGVsc2UKICAgICAgICAgZW5kID0gKFB5X29mZl90KS0xOwotI2VuZGlmCi0gICAgd2hpbGUgKDEpIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCwgcG9zLCBlbmQpOwotI2Vsc2UKLSAgICAgICAgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobmV3c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IG5ld3NpemUgPD0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgInVuYm91bmRlZCByZWFkIHJldHVybmVkIG1vcmUgYnl0ZXMgIgotICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCAiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpbmV3c2l6ZSkgewotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBuZXdzaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG90YWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoZW5kID4gMCAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwICYmIGVuZCAtIHBvcyA8IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgIC8qIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsIGZpbGUsIHNvIHdlIHRyeSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgIGJ1ZmZlciBvbmUgYnl0ZSBsYXJnZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gIElmIHRoZQorICAgICAgICAgICBjYWxjdWxhdGlvbiBpcyByaWdodCB0aGVuIHdlIHNob3VsZCBnZXQgRU9GIHdpdGhvdXQgaGF2aW5nCisgICAgICAgICAgIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4gKi8KKyAgICAgICAgYnVmc2l6ZSA9IChzaXplX3QpKGVuZCAtIHBvcyArIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZnNpemUgPSBTTUFMTENIVU5LOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChieXRlc19yZWFkID49IChQeV9zc2l6ZV90KWJ1ZnNpemUpIHsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCBieXRlc19yZWFkKTsKKyAgICAgICAgICAgIGlmIChidWZzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgYnVmc2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gc3RyaW5nIGNhbiBob2xkIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBidWZzaXplKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBuID0gbmV3c2l6ZSAtIHRvdGFsOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgbiA9IGJ1ZnNpemUgLSBieXRlc19yZWFkOworI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICAgICAgbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIChpbnQpbik7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgKGludCluKTsKICNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIG4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIG4pOwogI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGlmIChuID09IDApCkBAIC02NzYsNyArNjg5LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG90YWwgPiAwKQorICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPiAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtNjg2LDIyICs2OTksMTkgQEAKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHRvdGFsICs9IG47Ci0jaWZkZWYgSEFWRV9GU1RBVAorICAgICAgICBieXRlc19yZWFkICs9IG47CiAgICAgICAgIHBvcyArPSBuOwotI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IHRvdGFsKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgdG90YWwpIDwgMCkgewotICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQganVzdCBpbiBjYXNlICovCi0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gYnl0ZXNfcmVhZCkgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIGJ5dGVzX3JlYWQpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNlbmRpZiAvKiBIQVZFX0ZTVEFUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fcmVhZChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNzIyLDcgKzczMiw3IEBACiAgICAgICAgIHJldHVybiBmaWxlaW9fcmVhZGFsbChzZWxmKTsKICAgICB9CiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChzaXplID4gSU5UX01BWCkKICAgICAgICAgc2l6ZSA9IElOVF9NQVg7CiAjZW5kaWYKQEAgLTczNCw3ICs3NDQsNyBAQAogICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIChpbnQpc2l6ZSk7CiAjZWxzZQogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKQEAgLTc1NSw3ICs3NjUsNyBAQAogCiAgICAgaWYgKG4gIT0gc2l6ZSkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZieXRlcywgbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICAgICAgUHlfQ0xFQVIoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODIsNyArNzkyLDcgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIGxlbiA9IHBidWYubGVuOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChsZW4gPiAzMjc2NyAmJiBpc2F0dHkoc2VsZi0+ZmQpKSB7CiAgICAgICAgICAgICAvKiBJc3N1ZSAjMTEzOTU6IHRoZSBXaW5kb3dzIGNvbnNvbGUgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdAogICAgICAgICAgICAgICAgZW5vdWdoIHNwYWNlIGVycm9yKSBvbiB3cml0aW5nIGludG8gc3Rkb3V0IGlmIHN0ZG91dCBtb2RlIGlzCkBAIC04NTUsNyArODY1LDcgQEAKIAogICAgIGlmIChfUHlWZXJpZnlfZmQoZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKICNlbHNlCiAgICAgICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CkBAIC0xMDI4LDcgKzEwMzgsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZXByKGZpbGVpbyAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKICAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnJlczsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApCkBAIC0xMjA0LDYgKzEyMTMsMTEgQEAKICAgICB7TlVMTH0sCiB9OwogCitzdGF0aWMgUHlNZW1iZXJEZWYgZmlsZWlvX21lbWJlcnNbXSA9IHsKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihmaWxlaW8sIGZpbmFsaXppbmcpLCAwfSwKKyAgICB7TlVMTH0KK307CisKIFB5VHlwZU9iamVjdCBQeUZpbGVJT19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfaW8uRmlsZUlPIiwKQEAgLTEyMjUsNyArMTIzOSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgZmlsZWlvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZpbGVpb190cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpZmlsZWlvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTIzNCw3ICsxMjQ4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgZmlsZWlvX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZmlsZWlvX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgZmlsZWlvX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KQEAgLTEyNDUsNCArMTI1OSwxMyBAQAogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBmaWxlaW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9pb2Jhc2UuYyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCmluZGV4IGUzODQ3M2EuLjFiN2NiMGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2lvYmFzZS5jCisrKyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSS9PIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBoaWVyYXJjaHkKICAgICBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCi0gICAgCisKICAgICBDbGFzc2VzIGRlZmluZWQgaGVyZTogSU9CYXNlLCBSYXdJT0Jhc2UuCi0gICAgCisKICAgICBXcml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjIGFuZCBBbnRvaW5lIFBpdHJvdQogKi8KIApAQCAtMTksNyArMTksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIAorCiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSBpb2Jhc2U7CkBAIC02Myw2ICs2Myw4IEBACiAjZGVmaW5lIElTX0NMT1NFRChzZWxmKSBcCiAgICAgX1B5T2JqZWN0X0hhc0F0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQpCiAKK19QeV9JREVOVElGSUVSKHJlYWQpOworCiAvKiBJbnRlcm5hbCBtZXRob2RzICovCiBzdGF0aWMgUHlPYmplY3QgKgogaW9iYXNlX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCkBAIC0xODAsNDIgKzE4Miw0NCBAQAogaW9iYXNlX2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fSU9CYXNlX2Nsb3NlZCk7CiAKICAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7Ci0gICAgX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQsIFB5X1RydWUpOwotICAgIGlmIChyZXMgPT0gTlVMTCkgeworCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkLCBQeV9UcnVlKSA8IDApIHsKKyAgICAgICAgUHlfWERFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihyZXMpOworCisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAvKiBGaW5hbGl6YXRpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBzdXBwb3J0ICovCiAKLWludAotX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQorc3RhdGljIHZvaWQKK2lvYmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICp0cCwgKnYsICp0YjsKLSAgICBpbnQgY2xvc2VkID0gMTsKLSAgICBpbnQgaXNfem9tYmllOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisgICAgaW50IGNsb3NlZDsKKyAgICBfUHlfSURFTlRJRklFUihfZmluYWxpemluZyk7CiAKLSAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KLSAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KLSAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOwotICAgIGlmIChpc196b21iaWUpIHsKLSAgICAgICAgKytQeV9SRUZDTlQoc2VsZik7Ci0gICAgfQotICAgIFB5RXJyX0ZldGNoKCZ0cCwgJnYsICZ0Yik7CisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKwogICAgIC8qIElmIGBjbG9zZWRgIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgZXZhbHVhdGVkIGFzIGJvb2wsIHRoZW4gdGhlCiAgICAgICAgb2JqZWN0IGlzIHByb2JhYmx5IGluIGFuIHVudXNhYmxlIHN0YXRlLCBzbyBpZ25vcmUuICovCiAgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLCBfUHlJT19zdHJfY2xvc2VkKTsKLSAgICBpZiAocmVzID09IE5VTEwpCisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGNsb3NlZCA9IC0xOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2xvc2VkID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjIzLDYgKzIyNywxMCBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CiAgICAgaWYgKGNsb3NlZCA9PSAwKSB7CisgICAgICAgIC8qIFNpZ25hbCBjbG9zZSgpIHRoYXQgaXQgd2FzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgZmluYWxpemF0aW9uIHByb2Nlc3MuICovCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19maW5hbGl6aW5nLCBQeV9UcnVlKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKSBzZWxmLCBfUHlJT19zdHJfY2xvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgLyogU2lsZW5jaW5nIEkvTyBlcnJvcnMgaXMgYmFkLCBidXQgcHJpbnRpbmcgc3B1cmlvdXMgdHJhY2ViYWNrcyBpcwpAQCAtMjMzLDMxICsyNDEsMjUgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUodHAsIHYsIHRiKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgIGlmICgtLVB5X1JFRkNOVChzZWxmKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBUaGUgb2JqZWN0IGxpdmVzIGFnYWluLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdGFrZW4gZnJvbQotICAgICAgICAgICAgICAgc2xvdF90cF9kZWwgaW4gdHlwZW9iamVjdC5jLiAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBQeV9SRUZDTlQoc2VsZik7Ci0gICAgICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICAgICAgUHlfUkVGQ05UKHNlbGYpID0gcmVmY250OwotICAgICAgICAgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICAgICAgICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgICAgICAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAgICAgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICAgICAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgICAgICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAgICAgICAgICogdW5kb25lLgotICAgICAgICAgICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKK2ludAorX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBpc196b21iaWU7CisKKyAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KKyAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KKyAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOworICAgIGlmIChpc196b21iaWUpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZik7CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoc2VsZik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjcwLDggKzI3Miw2IEBACiBzdGF0aWMgaW50CiBpb2Jhc2VfY2xlYXIoaW9iYXNlICpzZWxmKQogewotICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwogICAgIHJldHVybiAwOwogfQpAQCAtNDU1LDcgKzQ1NSw2IEBACiAgICAgaW50IGhhc19wZWVrID0gMDsKICAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSAtMTsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKICAgICBfUHlfSURFTlRJRklFUihwZWVrKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKSB7CkBAIC01MzYsNyArNTM1LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBvbGRfc2l6ZSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcik7Ci0gICAgICAgIFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSk7CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnVmZmVyKSArIG9sZF9zaXplLAogICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYiksIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOwogCkBAIC03NDEsNyArNzQzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylpb2Jhc2VfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpaW9iYXNlX2NsZWFyLCAgICAgIC8qIHRwX2NsZWFyICovCkBAIC03NjAsNiArNzYyLDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgKGRlc3RydWN0b3IpaW9iYXNlX2ZpbmFsaXplLCAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC04MzEsMTIgKzg0MywxMSBAQAogICAgIGludCByOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgCisKICAgICBpZiAoY2h1bmtzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgICAgIFB5T2JqZWN0ICpkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLCBERUZBVUxUX0JVRkZFUl9TSVpFKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CkBAIC05MDUsNyArOTE2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICByYXdpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC05MjQsNCArOTM1LDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vdGV4dGlvLmMgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwppbmRleCA2MDNlZTYwLi5mYjg5YTE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby90ZXh0aW8uYworKysgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwpAQCAtMTczLDcgKzE3Myw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvYmFzZV9kb2MsICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTkyLDYgKzE5MywxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC02OTEsNyArNzAyLDcgQEAKICAgICBjaGFyIHNlZWthYmxlOwogICAgIGNoYXIgaGFzX3JlYWQxOwogICAgIGNoYXIgdGVsbGluZzsKLSAgICBjaGFyIGRlYWxsb2NhdGluZzsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAgICAgLyogU3BlY2lhbGl6ZWQgZW5jb2RpbmcgZnVuYyAoc2VlIGJlbG93KSAqLwogICAgIGVuY29kZWZ1bmNfdCBlbmNvZGVmdW5jOwogICAgIC8qIFdoZXRoZXIgb3Igbm90IGl0J3MgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKi8KQEAgLTc1OCw3ICs3NjksNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMTZiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMTZsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC03ODcsNyArNzk4LDcgQEAKIHsKICAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLwotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorI2lmIFBZX0JJR19FTkRJQU4KICAgICAgICAgcmV0dXJuIHV0ZjMyYmVfZW5jb2RlKHNlbGYsIHRleHQpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHV0ZjMybGVfZW5jb2RlKHNlbGYsIHRleHQpOwpAQCAtOTA2LDM1ICs5MTcsMjkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibG9jYWxlIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB1c2VfbG9jYWxlOgotICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQotICAgICAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgotICAgICAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlPYmplY3QgKmxvY2FsZV9tb2R1bGUgPSBfUHlJT19nZXRfbG9jYWxlX21vZHVsZShzdGF0ZSk7CisgICAgICAgIGlmIChsb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCisgICAgICAgICAgICBsb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7CisgICAgICAgIFB5X0RFQ1JFRihsb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCisgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQorICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKICAgICB9CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKQEAgLTExMTIsOCArMTExNyw2IEBACiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTEzMSw5ICsxMTM0LDEwIEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CisgICAgX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZik7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CkBAIC0xOTM3LDEwICsxOTQxLDcgQEAKIAogI2RlZmluZSBDT09LSUVfQlVGX0xFTiAgICAgIChzaXplb2YoUHlfb2ZmX3QpICsgMyAqIHNpemVvZihpbnQpICsgc2l6ZW9mKGNoYXIpKQogCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAwCi0KKyNpZiBQWV9CSUdfRU5ESUFOCiAvKiBXZSB3YW50IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB0byBhbHNvIGJlIHRoZSBsZWFzdAogICAgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgY29va2llLCB3aGljaCBtZWFucyB0aGF0IGluIGJpZy1lbmRpYW4gbW9kZSB3ZQogICAgbXVzdCBjb3B5IHRoZSBmaWVsZHMgaW4gcmV2ZXJzZSBvcmRlci4gKi8KQEAgLTE5NTIsOSArMTk1Myw2IEBACiAjIGRlZmluZSBPRkZfTkVFRF9FT0YgICAgICAgMAogCiAjZWxzZQotCi0jIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMQotCiAvKiBMaXR0bGUtZW5kaWFuIG1vZGU6IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB3aWxsCiAgICBuYXR1cmFsbHkgZW5kIHVwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUuICovCiAKQEAgLTE5NzUsNyArMTk3Myw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChfUHlMb25nX0FzQnl0ZUFycmF5KGNvb2tpZUxvbmcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjb29raWVMb25nKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTIwMDEsOSArMTk5OSw5IEBACiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9DSEFSU19UT19TS0lQLCAmY29va2llLT5jaGFyc190b19za2lwLCBzaXplb2YoY29va2llLT5jaGFyc190b19za2lwKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9ORUVEX0VPRiwgJmNvb2tpZS0+bmVlZF9lb2YsIHNpemVvZihjb29raWUtPm5lZWRfZW9mKSk7CiAKLSAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIElTX0xJVFRMRV9FTkRJQU4sIDApOworICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogc3RhdGljIGludAogX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSh0ZXh0aW8gKnNlbGYsIGNvb2tpZV90eXBlICpjb29raWUpCkBAIC0yMzUzLDcgKzIzNTEsNyBAQAogCiAgICAgLyogTm90ZSBvdXIgaW5pdGlhbCBzdGFydCBwb2ludC4gKi8KICAgICBjb29raWUuc3RhcnRfcG9zICs9IHNraXBfYnl0ZXM7Ci0gICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBjaGFyc190b19za2lwOworICAgIGNvb2tpZS5jaGFyc190b19za2lwID0gUHlfU0FGRV9ET1dOQ0FTVChjaGFyc190b19za2lwLCBQeV9zc2l6ZV90LCBpbnQpOwogICAgIGlmIChjaGFyc190b19za2lwID09IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKIApAQCAtMjU3OSw3ICsyNTc3LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMLCAqdmFsLCAqdGI7Ci0gICAgICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICAgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9fZGVhbGxvY193YXJuLCAiTyIsIHNlbGYpOwogICAgICAgICAgICAgaWYgKHJlcykKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTI3NDAsNiArMjczOCw3IEBACiAgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGVuY29kaW5nKSwgUkVBRE9OTFl9LAogICAgIHsiYnVmZmVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgYnVmZmVyKSwgUkVBRE9OTFl9LAogICAgIHsibGluZV9idWZmZXJpbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgbGluZV9idWZmZXJpbmcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNzc2LDcgKzI3NzUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb3dyYXBwZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKXRleHRpb3dyYXBwZXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpdGV4dGlvd3JhcHBlcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI3OTUsNCArMjc5NCwxNCBAQAogICAgIChpbml0cHJvYyl0ZXh0aW93cmFwcGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fanNvbi5jIGIvTW9kdWxlcy9fanNvbi5jCmluZGV4IDkxNjY2ODAuLjEyNTEwMWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2pzb24uYworKysgYi9Nb2R1bGVzL19qc29uLmMKQEAgLTIsMjAgKzIsNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImFjY3UuaCIKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCAmJiAhZGVmaW5lZChQeV9UWVBFKQotI2RlZmluZSBQeV9UWVBFKG9iKSAgICAgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQotI2VuZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFkZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLSNkZWZpbmUgUFlfU1NJWkVfVF9NQVggSU5UX01BWAotI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCi0jZGVmaW5lIFB5SW50X0Zyb21Tc2l6ZV90IFB5SW50X0Zyb21Mb25nCi0jZGVmaW5lIFB5SW50X0FzU3NpemVfdCBQeUludF9Bc0xvbmcKLSNlbmRpZgotI2lmbmRlZiBQeV9JU19GSU5JVEUKLSNkZWZpbmUgUHlfSVNfRklOSVRFKFgpICghUHlfSVNfSU5GSU5JVFkoWCkgJiYgIVB5X0lTX05BTihYKSkKLSNlbmRpZgotCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKQEAgLTEyOSwzMyArMTE1LDE0IEBACiByYWlzZV9lcnJtc2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOwogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaik7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKIAogI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKICNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0gJ1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQogCi1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlPYmplY3QgdG8gUHlfc3NpemVfdCBjb252ZXJ0ZXIgKi8KLSAgICAqc2l6ZV9wdHIgPSBQeUxvbmdfQXNTc2l6ZV90KG8pOwotICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdCgqc2l6ZV9wdHIpOwotfQotCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX3VuaWNoYXIoUHlfVUNTNCBjLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCiB7CkBAIC0xNzQsMTQgKzE0MSwxMyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIC8qIFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IGMgLSAweDEwMDAwOwotICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOworICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAxMikgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgNCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyAgICAgICkgJiAweGZdOwotICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgICAgICApICYgMHhmXTsKKyAgICAgICAgICAgICAgICBjID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGMpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7CkBAIC0yNjgsMTMgKzIzNCwyMyBAQAogICAgICAgICBpZiAoZXJybXNnX2ZuID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdCwgJmVuZCk7CisgICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPbikiLCBtc2csIHMsIGVuZCk7CiAgICAgaWYgKHB5bXNnKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19WYWx1ZUVycm9yLCBweW1zZyk7CiAgICAgICAgIFB5X0RFQ1JFRihweW1zZyk7CiAgICAgfQogfQogCitzdGF0aWMgdm9pZAorcmFpc2Vfc3RvcF9pdGVyYXRpb24oUHlfc3NpemVfdCBpZHgpCit7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KGlkeCk7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1N0b3BJdGVyYXRpb24sIHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpIHsKICAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCkBAIC0zNDQsNyArMzIwLDcgQEAKICAgICBidWYgPSBQeVVuaWNvZGVfREFUQShweXN0cik7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHB5c3RyKTsKIAotICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8PSBlbmQpIHsKKyAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPCBlbmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbmQgaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQpAQCAtNTE1LDcgKzQ5MSw3IEBACiAgICAgUHlfc3NpemVfdCBlbmQ7CiAgICAgUHlfc3NpemVfdCBuZXh0X2VuZCA9IC0xOwogICAgIGludCBzdHJpY3QgPSAxOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08mfGk6c2NhbnN0cmluZyIsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZlbmQsICZzdHJpY3QpKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsICZlbmQsICZzdHJpY3QpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewpAQCAtNjMwLDEyICs2MDYsMTIgQEAKICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgLyogb25seSBsb29wIGlmIHRoZSBvYmplY3QgaXMgbm9uLWVtcHR5ICovCi0gICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKLSAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4KSB7CisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgeworICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgUHlPYmplY3QgKm1lbW9rZXk7CiAKICAgICAgICAgICAgIC8qIHJlYWQga2V5ICovCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICciJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICciJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcyIsIHB5c3RyLCBpZHgpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTY5MiwxMSArNjY4LDkgQEAKICAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBvYmplY3QgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICd9JykgeworICAgICAgICAgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnfScpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTcwNywxMiArNjgxLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3VsZCBiZSAnfScgKi8KLSAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7Ci0gICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQogICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOwogCiAgICAgaWYgKGhhc19wYWlyc19ob29rKSB7CkBAIC03NjQsOCArNzMyLDggQEAKICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgYXJyYXkgaXMgbm9uLWVtcHR5ICovCi0gICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKLSAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4KSB7CisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICddJykgeworICAgICAgICB3aGlsZSAoMSkgewogCiAgICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRlcm0gICovCiAgICAgICAgICAgICB2YWwgPSBzY2FuX29uY2VfdW5pY29kZShzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgpOwpAQCAtNzgyLDExICs3NTAsOSBAQAogICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIGFycmF5IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnXScpIHsKKyAgICAgICAgICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ10nKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03OTksNyArNzY1LDcgQEAKIAogICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSBzaG91bGQgYmUgJ10nICovCiAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICddJykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7CisgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcHlzdHIsIGVuZF9pZHgpOwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOwpAQCAtODY3LDcgKzgzMyw3IEBACiAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnLScpIHsKICAgICAgICAgaWR4Kys7CiAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSB7Ci0gICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oc3RhcnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC04ODMsNyArODQ5LDcgQEAKICAgICB9CiAgICAgLyogbm8gaW50ZWdlciBkaWdpdHMsIGVycm9yICovCiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKHN0YXJ0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05NzYsNyArOTQyLDcgQEAKICAgICBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChweXN0cik7CiAKICAgICBpZiAoaWR4ID49IGxlbmd0aCkgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihpZHgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEwNzgsNyArMTA0NCw3IEBACiAgICAgUHlTY2FubmVyT2JqZWN0ICpzOwogICAgIGFzc2VydChQeVNjYW5uZXJfQ2hlY2soc2VsZikpOwogICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmlkeCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOnNjYW5fb25jZSIsIGt3bGlzdCwgJnB5c3RyLCAmaWR4KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewpAQCAtMTI3OSw4ICsxMjQ1LDggQEAKIAogICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwogICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOl9pdGVyZW5jb2RlIiwga3dsaXN0LAotICAgICAgICAmb2JqLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmluZGVudF9sZXZlbCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOl9pdGVyZW5jb2RlIiwga3dsaXN0LAorICAgICAgICAmb2JqLCAmaW5kZW50X2xldmVsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzI2LDEzICsxMjkyLDQ1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9sb25nKFB5RW5jb2Rlck9iamVjdCogcyBVTlVTRUQsIFB5T2JqZWN0ICpvYmopCit7CisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlMb25nIGFuZCBQeUxvbmcgc3ViY2xhc3Nlcy4KKyAgICAgICBDYWxscyBpbnQoKSBvbiBQeUxvbmcgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdHIoKSB3YXMgY2hhbmdlZC4KKyAgICAgICBBZGRlZCBzcGVjaWZpY2FsbHkgdG8gZGVhbCB3aXRoIEludEVudW0uICBTZWUgSXNzdWUxODI2NC4gKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmxvbmdvYmo7CisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG9uZ29iaiA9IFB5TnVtYmVyX0xvbmcob2JqKTsKKyAgICAgICAgaWYgKGxvbmdvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBpbnQgc3ViY2xhc3MgdG8gaW50IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihsb25nb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGxvbmdvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKQogewotICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQgKi8KKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0LgorICAgICAgIE1vZGlmaWVkIHRvIGNhbGwgZmxvYXQoKSBvbiBmbG9hdCBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN1YmNsYXNzCisgICAgICAgY2hhbmdlcyB0aGUgcmVwci4gIFNlZSBJc3N1ZTE4MjY0LiAgKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmZsb2F0b2JqOwogICAgIGRvdWJsZSBpID0gUHlGbG9hdF9BU19ET1VCTEUob2JqKTsKICAgICBpZiAoIVB5X0lTX0ZJTklURShpKSkgewogICAgICAgICBpZiAoIXMtPmFsbG93X25hbikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIKKyAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmIChpID4gMCkgewpAQCAtMTM0NSw4ICsxMzQzLDI0IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5hTiIpOwogICAgICAgICB9CiAgICAgfQotICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KLSAgICByZXR1cm4gUHlPYmplY3RfUmVwcihvYmopOworICAgIC8qIGNvZXJjZSBmbG9hdCBzdWJjbGFzc2VzIHRvIGZsb2F0IChwcmltYXJpbHkgZm9yIEVudW0pICovCisgICAgaWYgKFB5RmxvYXRfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZsb2F0b2JqID0gUHlOdW1iZXJfRmxvYXQob2JqKTsKKyAgICAgICAgaWYgKGZsb2F0b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgZmxvYXQgc3ViY2xhc3MgdG8gZmxvYXQiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihmbG9hdG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihmbG9hdG9iaik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTM5MCw3ICsxNDA0LDcgQEAKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7Ci0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gX3N0ZWFsX2FjY3VtdWxhdGUoYWNjLCBlbmNvZGVkKTsKQEAgLTE1NzUsOSArMTU4OSwxMCBAQAogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soa2V5KSkgewotICAgICAgICAgICAga3N0ciA9IFB5T2JqZWN0X1N0cihrZXkpOwotICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGtzdHIgPSBlbmNvZGVyX2VuY29kZV9sb25nKHMsIGtleSk7CisgICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNraXBrZXlzKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYyBiL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCmluZGV4IGNjNjg4YmEuLjQwMGMzNDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCkBAIC0xNDcsMjYgKzE0NywzNCBAQAogICAgIC8qIGhvcGVmdWxseSwgdGhlIGxvY2FsZWNvbnYgcmVzdWx0IHN1cnZpdmVzIHRoZSBDIGxpYnJhcnkgY2FsbHMKICAgICAgICBpbnZvbHZlZCBoZXJlaW4gKi8KIAorI2RlZmluZSBSRVNVTFQoa2V5LCBvYmopXAorICAgIGRvIHsgXAorICAgICAgICBpZiAob2JqID09IE5VTEwpIFwKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOyBcCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsIGtleSwgb2JqKSA8IDApIHsgXAorICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7IFwKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOyBcCisgICAgICAgIH0gXAorICAgICAgICBQeV9ERUNSRUYob2JqKTsgXAorICAgIH0gd2hpbGUgKDApCisKICNkZWZpbmUgUkVTVUxUX1NUUklORyhzKVwKLSAgICB4ID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZShsLT5zLCBOVUxMKTsgICBcCi0gICAgaWYgKCF4KSBnb3RvIGZhaWxlZDtcCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAjcywgeCk7XAotICAgIFB5X1hERUNSRUYoeCkKKyAgICBkbyB7IFwKKyAgICAgICAgeCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUobC0+cywgTlVMTCk7IFwKKyAgICAgICAgUkVTVUxUKCNzLCB4KTsgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVTVUxUX0lOVChpKVwKLSAgICB4ID0gUHlMb25nX0Zyb21Mb25nKGwtPmkpO1wKLSAgICBpZiAoIXgpIGdvdG8gZmFpbGVkO1wKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICNpLCB4KTtcCi0gICAgUHlfWERFQ1JFRih4KQorICAgIGRvIHsgXAorICAgICAgICB4ID0gUHlMb25nX0Zyb21Mb25nKGwtPmkpOyBcCisgICAgICAgIFJFU1VMVCgjaSwgeCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAgICAgLyogTnVtZXJpYyBpbmZvcm1hdGlvbiAqLwogICAgIFJFU1VMVF9TVFJJTkcoZGVjaW1hbF9wb2ludCk7CiAgICAgUkVTVUxUX1NUUklORyh0aG91c2FuZHNfc2VwKTsKICAgICB4ID0gY29weV9ncm91cGluZyhsLT5ncm91cGluZyk7Ci0gICAgaWYgKCF4KQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICJncm91cGluZyIsIHgpOwotICAgIFB5X1hERUNSRUYoeCk7CisgICAgUkVTVUxUKCJncm91cGluZyIsIHgpOwogCiAgICAgLyogTW9uZXRhcnkgaW5mb3JtYXRpb24gKi8KICAgICBSRVNVTFRfU1RSSU5HKGludF9jdXJyX3N5bWJvbCk7CkBAIC0xNzQsMTAgKzE4Miw4IEBACiAgICAgUkVTVUxUX1NUUklORyhtb25fZGVjaW1hbF9wb2ludCk7CiAgICAgUkVTVUxUX1NUUklORyhtb25fdGhvdXNhbmRzX3NlcCk7CiAgICAgeCA9IGNvcHlfZ3JvdXBpbmcobC0+bW9uX2dyb3VwaW5nKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgIm1vbl9ncm91cGluZyIsIHgpOwotICAgIFB5X1hERUNSRUYoeCk7CisgICAgUkVTVUxUKCJtb25fZ3JvdXBpbmciLCB4KTsKKwogICAgIFJFU1VMVF9TVFJJTkcocG9zaXRpdmVfc2lnbik7CiAgICAgUkVTVUxUX1NUUklORyhuZWdhdGl2ZV9zaWduKTsKICAgICBSRVNVTFRfSU5UKGludF9mcmFjX2RpZ2l0cyk7CkBAIC0xOTIsNyArMTk4LDYgQEAKIAogICBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgIFB5X1hERUNSRUYoeCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2xzcHJvZi5jIGIvTW9kdWxlcy9fbHNwcm9mLmMKaW5kZXggYjBhMjI2Yi4uODk0Nzg4OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHNwcm9mLmMKKysrIGIvTW9kdWxlcy9fbHNwcm9mLmMKQEAgLTM2LDEyICszNiw4IEBACiAjZXJyb3IgIlRoaXMgbW9kdWxlIHJlcXVpcmVzIGdldHRpbWVvZmRheSgpIG9uIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyEiCiAjZW5kaWYKIAotI2lmIChkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2Vsc2UKICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxzeXMvdGltZXMuaD4KLSNlbmRpZgogCiBzdGF0aWMgUFlfTE9OR19MT05HCiBocFRpbWVyKHZvaWQpCkBAIC0yMjcsNyArMjIzLDcgQEAKIG5ld1Byb2ZpbGVyRW50cnkoUHJvZmlsZXJPYmplY3QgKnBPYmosIHZvaWQgKmtleSwgUHlPYmplY3QgKnVzZXJPYmopCiB7CiAgICAgUHJvZmlsZXJFbnRyeSAqc2VsZjsKLSAgICBzZWxmID0gKFByb2ZpbGVyRW50cnkqKSBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyRW50cnkpKTsKKyAgICBzZWxmID0gKFByb2ZpbGVyRW50cnkqKSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFByb2ZpbGVyRW50cnkpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzUsNyArMjMxLDcgQEAKICAgICB1c2VyT2JqID0gbm9ybWFsaXplVXNlck9iaih1c2VyT2JqKTsKICAgICBpZiAodXNlck9iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGZyZWUoc2VsZik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZik7CiAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjY4LDcgKzI2NCw3IEBACiBuZXdTdWJFbnRyeShQcm9maWxlck9iamVjdCAqcE9iaiwgIFByb2ZpbGVyRW50cnkgKmNhbGxlciwgUHJvZmlsZXJFbnRyeSogZW50cnkpCiB7CiAgICAgUHJvZmlsZXJTdWJFbnRyeSAqc2VsZjsKLSAgICBzZWxmID0gKFByb2ZpbGVyU3ViRW50cnkqKSBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyU3ViRW50cnkpKTsKKyAgICBzZWxmID0gKFByb2ZpbGVyU3ViRW50cnkqKSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFByb2ZpbGVyU3ViRW50cnkpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yODYsNyArMjgyLDcgQEAKIHN0YXRpYyBpbnQgZnJlZVN1YkVudHJ5KHJvdGF0aW5nX25vZGVfdCAqaGVhZGVyLCB2b2lkICphcmcpCiB7CiAgICAgUHJvZmlsZXJTdWJFbnRyeSAqc3ViZW50cnkgPSAoUHJvZmlsZXJTdWJFbnRyeSopIGhlYWRlcjsKLSAgICBmcmVlKHN1YmVudHJ5KTsKKyAgICBQeU1lbV9GcmVlKHN1YmVudHJ5KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjk1LDcgKzI5MSw3IEBACiAgICAgUHJvZmlsZXJFbnRyeSAqZW50cnkgPSAoUHJvZmlsZXJFbnRyeSopIGhlYWRlcjsKICAgICBSb3RhdGluZ1RyZWVfRW51bShlbnRyeS0+Y2FsbHMsIGZyZWVTdWJFbnRyeSwgTlVMTCk7CiAgICAgUHlfREVDUkVGKGVudHJ5LT51c2VyT2JqKTsKLSAgICBmcmVlKGVudHJ5KTsKKyAgICBQeU1lbV9GcmVlKGVudHJ5KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzA1LDEzICszMDEsMTMgQEAKICAgICBwT2JqLT5wcm9maWxlckVudHJpZXMgPSBFTVBUWV9ST1RBVElOR19UUkVFOwogICAgIC8qIHJlbGVhc2UgdGhlIG1lbW9yeSBob2xkIGJ5IHRoZSBQcm9maWxlckNvbnRleHRzICovCiAgICAgaWYgKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpIHsKLSAgICAgICAgZnJlZShwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0KTsKKyAgICAgICAgUHlNZW1fRnJlZShwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0KTsKICAgICAgICAgcE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCA9IE5VTEw7CiAgICAgfQogICAgIHdoaWxlIChwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCkgewogICAgICAgICBQcm9maWxlckNvbnRleHQgKmMgPSBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dDsKICAgICAgICAgcE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQgPSBjLT5wcmV2aW91czsKLSAgICAgICAgZnJlZShjKTsKKyAgICAgICAgUHlNZW1fRnJlZShjKTsKICAgICB9CiAgICAgcE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQgPSBOVUxMOwogfQpAQCAtMzk3LDcgKzM5Myw3IEBACiAgICAgZWxzZSB7CiAgICAgICAgIC8qIGZyZWUgbGlzdCBleGhhdXN0ZWQsIGFsbG9jYXRlIGEgbmV3IG9uZSAqLwogICAgICAgICBwQ29udGV4dCA9IChQcm9maWxlckNvbnRleHQqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQcm9maWxlckNvbnRleHQpKTsKKyAgICAgICAgICAgIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJDb250ZXh0KSk7CiAgICAgICAgIGlmIChwQ29udGV4dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgICAgICBnb3RvIHJlc3RvcmVQeWVycjsKQEAgLTcxNiw3ICs3MTIsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0ID0gcENvbnRleHQtPnByZXZpb3VzOwogICAgICAgICBpZiAocENvbnRleHQpCi0gICAgICAgICAgICBmcmVlKHBDb250ZXh0KTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUocENvbnRleHQpOwogICAgIH0KIAogfQpAQCAtODg4LDEwICs4ODQsMTIgQEAKICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiUHJvZmlsZXIiLCAoUHlPYmplY3QgKikmUHlQcm9maWxlcl9UeXBlKTsKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdHNFbnRyeVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX2VudHJ5X2Rlc2MpOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0c1N1YkVudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfc3ViZW50cnlfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdHNFbnRyeVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfZW50cnlfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdHNTdWJFbnRyeVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfc3ViZW50cnlfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU3RhdHNFbnRyeVR5cGUpOwogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU3RhdHNTdWJFbnRyeVR5cGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jIGIvTW9kdWxlcy9fbHptYW1vZHVsZS5jCmluZGV4IDY0MzYxNjAuLjEyMTdlZDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2x6bWFtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKKyAgICBsem1hX2FsbG9jYXRvciBhbGxvYzsKICAgICBsem1hX3N0cmVhbSBsenM7CiAgICAgaW50IGZsdXNoZWQ7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTYwLDYgKzYxLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKKyAgICBsem1hX2FsbG9jYXRvciBhbGxvYzsKICAgICBsem1hX3N0cmVhbSBsenM7CiAgICAgaW50IGNoZWNrOwogICAgIGNoYXIgZW9mOwpAQCAtMTE3LDYgKzExOSwyMiBAQAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQqCitQeUx6bWFfTWFsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IGl0ZW1zLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoaXRlbXMgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gc2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogUHlNZW1fTWFsbG9jKCkgY2Fubm90IGJlIHVzZWQ6CisgICAgICAgdGhlIEdJTCBpcyBub3QgaGVsZCB3aGVuIGx6bWFfY29kZSgpIGlzIGNhbGxlZCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1B5THptYV9GcmVlKHZvaWQgKm9wYXF1ZSwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtX1Jhd0ZyZWUocHRyKTsKK30KKwogI2lmIEJVRlNJWiA8IDgxOTIKICNkZWZpbmUgSU5JVElBTF9CVUZGRVJfU0laRSA4MTkyCiAjZWxzZQpAQCAtNjY0LDYgKzY4MiwxMSBAQAogICAgICAgICBpZiAoIXVpbnQzMl9jb252ZXJ0ZXIocHJlc2V0X29iaiwgJnByZXNldCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBzZWxmLT5hbGxvYy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmFsbG9jLmFsbG9jID0gUHlMem1hX01hbGxvYzsKKyAgICBzZWxmLT5hbGxvYy5mcmVlID0gUHlMem1hX0ZyZWU7CisgICAgc2VsZi0+bHpzLmFsbG9jYXRvciA9ICZzZWxmLT5hbGxvYzsKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKICAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMKSB7CkBAIC05MzksNiArOTYyLDExIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBzZWxmLT5hbGxvYy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmFsbG9jLmFsbG9jID0gUHlMem1hX01hbGxvYzsKKyAgICBzZWxmLT5hbGxvYy5mcmVlID0gUHlMem1hX0ZyZWU7CisgICAgc2VsZi0+bHpzLmFsbG9jYXRvciA9ICZzZWxmLT5hbGxvYzsKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKICAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKaW5kZXggOTQ2MGM4OS4uMWFhZjM2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwpAQCAtMTAsMjUgKzEwLDIzIEBACiAjaW5jbHVkZSAibXVsdGlwcm9jZXNzaW5nLmgiCiAKIAotUHlPYmplY3QgKlByb2Nlc3NFcnJvciwgKkJ1ZmZlclRvb1Nob3J0OwotCiAvKgogICogRnVuY3Rpb24gd2hpY2ggcmFpc2VzIGV4Y2VwdGlvbnMgYmFzZWQgb24gZXJyb3IgY29kZXMKICAqLwogCiBQeU9iamVjdCAqCi1tcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSkKK19QeU1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKQogewogICAgIHN3aXRjaCAobnVtKSB7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGNhc2UgTVBfU1RBTkRBUkRfRVJST1I6CiAgICAgICAgIGlmIChUeXBlID09IE5VTEwpCi0gICAgICAgICAgICBUeXBlID0gUHlFeGNfV2luZG93c0Vycm9yOworICAgICAgICAgICAgVHlwZSA9IFB5RXhjX09TRXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFR5cGUsIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1QX1NPQ0tFVF9FUlJPUjoKICAgICAgICAgaWYgKFR5cGUgPT0gTlVMTCkKLSAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19XaW5kb3dzRXJyb3I7CisgICAgICAgICAgICBUeXBlID0gUHlFeGNfT1NFcnJvcjsKICAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoVHlwZSwgV1NBR2V0TGFzdEVycm9yKCkpOwogICAgICAgICBicmVhazsKICNlbHNlIC8qICFNU19XSU5ET1dTICovCkBAIC0xMDEsMTMgKzk5LDE1IEBACiB7CiAgICAgSEFORExFIGhhbmRsZTsKICAgICBQeV9idWZmZXIgYnVmOwotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgbGVuZ3RoOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJ5KjpzZW5kIiAsICZoYW5kbGUsICZidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGxlbmd0aCA9IChpbnQpUHlfTUlOKGJ1Zi5sZW4sIElOVF9NQVgpOworCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJldCA9IHNlbmQoKFNPQ0tFVCkgaGFuZGxlLCBidWYuYnVmLCBidWYubGVuLCAwKTsKKyAgICByZXQgPSBzZW5kKChTT0NLRVQpIGhhbmRsZSwgYnVmLmJ1ZiwgbGVuZ3RoLCAwKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKQEAgLTEyOCw2ICsxMjgsNyBAQAogICAgIHsicmVjdiIsIG11bHRpcHJvY2Vzc2luZ19yZWN2LCBNRVRIX1ZBUkFSR1MsICIifSwKICAgICB7InNlbmQiLCBtdWx0aXByb2Nlc3Npbmdfc2VuZCwgTUVUSF9WQVJBUkdTLCAiIn0sCiAjZW5kaWYKKyAgICB7InNlbV91bmxpbmsiLCBfUHlNcF9zZW1fdW5saW5rLCBNRVRIX1ZBUkFSR1MsICIifSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTE1OSwxOSArMTYwLDEyIEBACiAgICAgaWYgKCFtb2R1bGUpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogR2V0IGNvcHkgb2YgQnVmZmVyVG9vU2hvcnQgKi8KLSAgICB0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJtdWx0aXByb2Nlc3NpbmciKTsKLSAgICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIEJ1ZmZlclRvb1Nob3J0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiQnVmZmVyVG9vU2hvcnQiKTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpKQotICAgIC8qIEFkZCBTZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmU2VtTG9ja1R5cGUpIDwgMCkKKyAgICAvKiBBZGQgX1B5TXBfU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeU1wX1NlbUxvY2tUeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRigmU2VtTG9ja1R5cGUpOworICAgIFB5X0lOQ1JFRigmX1B5TXBfU2VtTG9ja1R5cGUpOwogICAgIHsKICAgICAgICAgUHlPYmplY3QgKnB5X3NlbV92YWx1ZV9tYXg7CiAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBhcyBhbiB1bnNpZ25lZCB2YWx1ZSB0aGF0CkBAIC0xODIsMTAgKzE3NiwxMCBAQAogICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCA9IFB5TG9uZ19Gcm9tTG9uZyhTRU1fVkFMVUVfTUFYKTsKICAgICAgICAgaWYgKHB5X3NlbV92YWx1ZV9tYXggPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhTZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKF9QeU1wX1NlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCk7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmU2VtTG9ja1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmX1B5TXBfU2VtTG9ja1R5cGUpOwogI2VuZGlmCiAKICAgICAvKiBBZGQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaCBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAppbmRleCBlM2RlOWJhLi45YWVlYThkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCkBAIC05MSwyMyArOTEsMTMgQEAKICNkZWZpbmUgTVBfU09DS0VUX0VSUk9SICgtMTAwMikKICNkZWZpbmUgTVBfRVhDRVBUSU9OX0hBU19CRUVOX1NFVCAoLTEwMDMpCiAKLVB5T2JqZWN0ICptcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CitQeU9iamVjdCAqX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pOwogCiAvKgogICogRXh0ZXJucyAtIG5vdCBhbGwgd2lsbCByZWFsbHkgZXhpc3Qgb24gYWxsIHBsYXRmb3JtcwogICovCiAKLWV4dGVybiBQeU9iamVjdCAqQnVmZmVyVG9vU2hvcnQ7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFNlbUxvY2tUeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBQaXBlQ29ubmVjdGlvblR5cGU7Ci0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzCi0gKi8KLQotI2lmbmRlZiBNSU4KLSMgIGRlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/IHggOiB5KQotIyAgZGVmaW5lIE1BWCh4LCB5KSAoKHgpID4gKHkpID8geCA6IHkpCi0jZW5kaWYKK2V4dGVybiBQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGU7CitleHRlcm4gUHlPYmplY3QgKl9QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpOwogCiAjZW5kaWYgLyogTVVMVElQUk9DRVNTSU5HX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwppbmRleCAyYzJiMDIwLi5kZTg1YTkwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgaW50IGNvdW50OwogICAgIGludCBtYXh2YWx1ZTsKICAgICBpbnQga2luZDsKKyAgICBjaGFyICpuYW1lOwogfSBTZW1Mb2NrT2JqZWN0OwogCiAjZGVmaW5lIElTTUlORShvKSAoby0+Y291bnQgPiAwICYmIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSA9PSBvLT5sYXN0X3RpZCkKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKICAgICBsb25nIHByZXZpb3VzOwogCi0gICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRsZSwgMCkpIHsKKyAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3RFeChoYW5kbGUsIDAsIEZBTFNFKSkgewogICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKICAgICAgICAgaWYgKCFSZWxlYXNlU2VtYXBob3JlKGhhbmRsZSwgMSwgJnByZXZpb3VzKSkKICAgICAgICAgICAgIHJldHVybiBNUF9TVEFOREFSRF9FUlJPUjsKQEAgLTk5LDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgd2hldGhlciB3ZSBjYW4gYWNxdWlyZSB3aXRob3V0IHJlbGVhc2luZyB0aGUgR0lMIGFuZCBibG9ja2luZyAqLwotICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHNlbGYtPmhhbmRsZSwgMCkgPT0gV0FJVF9PQkpFQ1RfMCkgeworICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoc2VsZi0+aGFuZGxlLCAwLCBGQUxTRSkgPT0gV0FJVF9PQkpFQ1RfMCkgewogICAgICAgICBzZWxmLT5sYXN0X3RpZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwogICAgICAgICArK3NlbGYtPmNvdW50OwogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTExOCw3ICsxMTksNyBAQAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoc2lnaW50X2V2ZW50ICE9IE5VTEwpCiAgICAgICAgIFJlc2V0RXZlbnQoc2lnaW50X2V2ZW50KTsKLSAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2Vjcyk7CisgICAgcmVzID0gV2FpdEZvck11bHRpcGxlT2JqZWN0c0V4KG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2VjcywgRkFMU0UpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiBoYW5kbGUgcmVzdWx0ICovCkBAIC0yMDAsNyArMjAxLDcgQEAKICNpZm5kZWYgSEFWRV9TRU1fVElNRURXQUlUCiAjICBkZWZpbmUgc2VtX3RpbWVkd2FpdChzZW0sZGVhZGxpbmUpIHNlbV90aW1lZHdhaXRfc2F2ZShzZW0sZGVhZGxpbmUsX3NhdmUpCiAKLWludAorc3RhdGljIGludAogc2VtX3RpbWVkd2FpdF9zYXZlKHNlbV90ICpzZW0sIHN0cnVjdCB0aW1lc3BlYyAqZGVhZGxpbmUsIFB5VGhyZWFkU3RhdGUgKl9zYXZlKQogewogICAgIGludCByZXM7CkBAIC0zOTcsNyArMzk4LDggQEAKICAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlKQorbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlLAorICAgICAgICAgICAgICAgICBjaGFyICpuYW1lKQogewogICAgIFNlbUxvY2tPYmplY3QgKnNlbGY7CiAKQEAgLTQwOSwyMSArNDExLDIyIEBACiAgICAgc2VsZi0+Y291bnQgPSAwOwogICAgIHNlbGYtPmxhc3RfdGlkID0gMDsKICAgICBzZWxmLT5tYXh2YWx1ZSA9IG1heHZhbHVlOworICAgIHNlbGYtPm5hbWUgPSBuYW1lOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZW1sb2NrX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyIGJ1ZmZlclsyNTZdOwogICAgIFNFTV9IQU5ETEUgaGFuZGxlID0gU0VNX0ZBSUxFRDsKLSAgICBpbnQga2luZCwgbWF4dmFsdWUsIHZhbHVlOworICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWUsIHVubGluazsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2luZCIsICJ2YWx1ZSIsICJtYXh2YWx1ZSIsIE5VTEx9OwotICAgIHN0YXRpYyBpbnQgY291bnRlciA9IDA7CisgICAgY2hhciAqbmFtZSwgKm5hbWVfY29weSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgIm5hbWUiLCAidW5saW5rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpaXNpIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSwgJm5hbWUsICZ1bmxpbmspKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChraW5kICE9IFJFQ1VSU0lWRV9NVVRFWCAmJiBraW5kICE9IFNFTUFQSE9SRSkgewpAQCAtNDMxLDE4ICs0MzQsMjMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiL21wJWxkLSVkIiwgKGxvbmcpZ2V0cGlkKCksIGNvdW50ZXIrKyk7CisgICAgaWYgKCF1bmxpbmspIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIHN0cmNweShuYW1lX2NvcHksIG5hbWUpOworICAgIH0KIAogICAgIFNFTV9DTEVBUl9FUlJPUigpOwotICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUoYnVmZmVyLCB2YWx1ZSwgbWF4dmFsdWUpOworICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUobmFtZSwgdmFsdWUsIG1heHZhbHVlKTsKICAgICAvKiBPbiBXaW5kb3dzIHdlIHNob3VsZCBmYWlsIGlmIEdldExhc3RFcnJvcigpPT1FUlJPUl9BTFJFQURZX0VYSVNUUyAqLwogICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCB8fCBTRU1fR0VUX0xBU1RfRVJST1IoKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICBpZiAoU0VNX1VOTElOSyhidWZmZXIpIDwgMCkKKyAgICBpZiAodW5saW5rICYmIFNFTV9VTkxJTksobmFtZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICByZXN1bHQgPSBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCkBAIC00NTEsNyArNDU5LDggQEAKICAgZmFpbHVyZToKICAgICBpZiAoaGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShoYW5kbGUpOwotICAgIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICBQeU1lbV9GcmVlKG5hbWVfY29weSk7CisgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NjAsMTIgKzQ2OSwzMCBAQAogewogICAgIFNFTV9IQU5ETEUgaGFuZGxlOwogICAgIGludCBraW5kLCBtYXh2YWx1ZTsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX1NFTV9IQU5ETEUgImlpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWl6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQorCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGhhbmRsZSA9IHNlbV9vcGVuKG5hbWUsIDApOworICAgICAgICBpZiAoaGFuZGxlID09IFNFTV9GQUlMRUQpIHsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUsIG5hbWVfY29weSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NzMsNiArNTAwLDcgQEAKIHsKICAgICBpZiAoc2VsZi0+aGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShzZWxmLT5oYW5kbGUpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+bmFtZSk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC00OTgsNyArNTI2LDcgQEAKICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgLyogc29tZSBwb3NpeCBpbXBsZW1lbnRhdGlvbnMgdXNlIG5lZ2F0aXZlIG51bWJlcnMgdG8gaW5kaWNhdGUKICAgICAgICB0aGUgbnVtYmVyIG9mIHdhaXRpbmcgdGhyZWFkcyAqLwogICAgIGlmIChzdmFsIDwgMCkKQEAgLTUxNCwxNiArNTQyLDE2IEBACiAgICAgaWYgKHNlbV90cnl3YWl0KHNlbGYtPmhhbmRsZSkgPCAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VtX3Bvc3Qoc2VsZi0+aGFuZGxlKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZylzdmFsID09IDApOwogI2VuZGlmCiB9CkBAIC01NzQsNiArNjAyLDggQEAKICAgICAgIiJ9LAogICAgIHsibWF4dmFsdWUiLCBUX0lOVCwgb2Zmc2V0b2YoU2VtTG9ja09iamVjdCwgbWF4dmFsdWUpLCBSRUFET05MWSwKICAgICAgIiJ9LAorICAgIHsibmFtZSIsIFRfU1RSSU5HLCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBuYW1lKSwgUkVBRE9OTFksCisgICAgICIifSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTU4MSw3ICs2MTEsNyBAQAogICogU2VtYXBob3JlIHR5cGUKICAqLwogCi1QeVR5cGVPYmplY3QgU2VtTG9ja1R5cGUgPSB7CitQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayIsCiAgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKFNlbUxvY2tPYmplY3QpLApAQCAtNjIxLDMgKzY1MSwyMyBAQAogICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCiAgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gc2VtbG9ja19uZXcsCiB9OworCisvKgorICogRnVuY3Rpb24gdG8gdW5saW5rIHNlbWFwaG9yZSBuYW1lcworICovCisKK1B5T2JqZWN0ICoKK19QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoU0VNX1VOTElOSyhuYW1lKSA8IDApIHsKKyAgICAgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX29wY29kZS5jIGIvTW9kdWxlcy9fb3Bjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjZmZlMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX29wY29kZS5jCkBAIC0wLDAgKzEsMTE3IEBACisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAib3Bjb2RlLmgiCisKKy8qW2NsaW5pY10KK21vZHVsZSBfb3Bjb2RlCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworLypbY2xpbmljXQorCitfb3Bjb2RlLnN0YWNrX2VmZmVjdCAtPiBpbnQKKworICBvcGNvZGU6IGludAorCisgIFsKKyAgb3Bhcmc6IGludAorICBdCisgIC8KKworQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mIHRoZSBvcGNvZGUuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfb3Bjb2RlX3N0YWNrX2VmZmVjdF9fZG9jX18sCisic3RhY2tfZWZmZWN0KG9wY29kZSwgW29wYXJnXSlcbiIKKyJDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4iKTsKKworI2RlZmluZSBfT1BDT0RFX1NUQUNLX0VGRkVDVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhY2tfZWZmZWN0IiwgKFB5Q0Z1bmN0aW9uKV9vcGNvZGVfc3RhY2tfZWZmZWN0LCBNRVRIX1ZBUkFSR1MsIF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfX30sCisKK3N0YXRpYyBpbnQKK19vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG9wY29kZSwgaW50IGdyb3VwX3JpZ2h0XzEsIGludCBvcGFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb3Bjb2RlX3N0YWNrX2VmZmVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgb3Bjb2RlOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBpbnQgb3BhcmcgPSAwOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnN0YWNrX2VmZmVjdCIsICZvcGNvZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c3RhY2tfZWZmZWN0IiwgJm9wY29kZSwgJm9wYXJnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiX29wY29kZS5zdGFja19lZmZlY3QgcmVxdWlyZXMgMSB0byAyIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIF9yZXR1cm5fdmFsdWUgPSBfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKG1vZHVsZSwgb3Bjb2RlLCBncm91cF9yaWdodF8xLCBvcGFyZyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQKK19vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG9wY29kZSwgaW50IGdyb3VwX3JpZ2h0XzEsIGludCBvcGFyZykKKy8qW2NsaW5pYyBjaGVja3N1bTogZTg4MGU2MmRjN2IwZGU3MzQwMzAyNmVhZjRmODA3NGFhMTA2MzU4Yl0qLworeworICAgIGludCBlZmZlY3Q7CisgICAgaWYgKEhBU19BUkcob3Bjb2RlKSkgeyAgICAgICAgCisgICAgICAgIGlmICghZ3JvdXBfcmlnaHRfMSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJzdGFja19lZmZlY3Q6IG9wY29kZSByZXF1aXJlcyBvcGFyZyBidXQgb3Bhcmcgd2FzIG5vdCBzcGVjaWZpZWQiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChncm91cF9yaWdodF8xKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJzdGFja19lZmZlY3Q6IG9wY29kZSBkb2VzIG5vdCBwZXJtaXQgb3BhcmcgYnV0IG9wYXJnIHdhcyBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlZmZlY3QgPSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3Qob3Bjb2RlLCBvcGFyZyk7CisgICAgaWYgKGVmZmVjdCA9PSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wY29kZSBvciBvcGFyZyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gZWZmZWN0OworfQorCisKKworCitzdGF0aWMgUHlNZXRob2REZWYKK29wY29kZV9mdW5jdGlvbnNbXSA9ICB7CisgICAgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3Bjb2RlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX29wY29kZSIsCisgICAgIk9wY29kZSBzdXBwb3J0IG1vZHVsZS4iLAorICAgIC0xLAorICAgIG9wY29kZV9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3Bjb2RlKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmb3Bjb2RlbW9kdWxlKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvb3BlcmF0b3IuYyBiL01vZHVsZXMvX29wZXJhdG9yLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gTW9kdWxlcy9vcGVyYXRvci5jCnJlbmFtZSB0byBNb2R1bGVzL19vcGVyYXRvci5jCmluZGV4IDUxNTZiNmIuLmU4YmVmMDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3BlcmF0b3IuYworKysgYi9Nb2R1bGVzL19vcGVyYXRvci5jCkBAIC0yMDgsNiArMjA4LDMxIEBACiAgICAgcmV0dXJuIChyZXN1bHQgPT0gMCk7CiB9CiAKK1B5RG9jX1NUUlZBUihsZW5ndGhfaGludF9fZG9jX18sCisibGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApIC0+IGludFxuIgorIlJldHVybiBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIG9iai5cbiIKKyJUaGlzIGlzIHVzZWZ1bCBmb3IgcHJlc2l6aW5nIGNvbnRhaW5lcnMgd2hlbiBidWlsZGluZyBmcm9tIGFuXG4iCisiaXRlcmFibGUuXG4iCisiXG4iCisiSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBsZW4oKSwgdGhlIHJlc3VsdCB3aWxsIGJlXG4iCisiZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5IG92ZXItIG9yIHVuZGVyLWVzdGltYXRlIGJ5IGFuXG4iCisiYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuIGludGVnZXIgPj0gMC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICpsZW5ndGhfaGludChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSA9IDAsIHJlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpsZW5ndGhfaGludCIsICZvYmosICZkZWZhdWx0dmFsdWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXMgPSBQeU9iamVjdF9MZW5ndGhIaW50KG9iaiwgZGVmYXVsdHZhbHVlKTsKKyAgICBpZiAocmVzID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKworCiBQeURvY19TVFJWQVIoY29tcGFyZV9kaWdlc3RfX2RvY19fLAogImNvbXBhcmVfZGlnZXN0KGEsIGIpIC0+IGJvb2xcbiIKICJcbiIKQEAgLTI5NywxNyArMzIyLDE1IEBACiAvKiBvcGVyYXRvciBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgc3BhbTEoT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0yKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMihPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAogI2RlZmluZSBzcGFtMW8oT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0ybyhPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTJvKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgb3BlcmF0b3JfbWV0aG9kc1tdID0gewogCiBzcGFtMW8odHJ1dGgsCiAgInRydXRoKGEpIC0tIFJldHVybiBUcnVlIGlmIGEgaXMgdHJ1ZSwgRmFsc2Ugb3RoZXJ3aXNlLiIpCi1zcGFtMihjb250YWlucyxfX2NvbnRhaW5zX18sCitzcGFtMihjb250YWlucywKICAiY29udGFpbnMoYSwgYikgLS0gU2FtZSBhcyBiIGluIGEgKG5vdGUgcmV2ZXJzZWQgb3BlcmFuZHMpLiIpCiBzcGFtMShpbmRleE9mLAogICJpbmRleE9mKGEsIGIpIC0tIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIpCkBAIC0zMTYsNTYgKzMzOSw1OCBAQAogCiBzcGFtMShpc18sICJpc18oYSwgYikgLS0gU2FtZSBhcyBhIGlzIGIuIikKIHNwYW0xKGlzX25vdCwgImlzX25vdChhLCBiKSAtLSBTYW1lIGFzIGEgaXMgbm90IGIuIikKLXNwYW0ybyhpbmRleCwgX19pbmRleF9fLCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKLXNwYW0yKGFkZCxfX2FkZF9fLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKLXNwYW0yKHN1YixfX3N1Yl9fLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKLXNwYW0yKG11bCxfX211bF9fLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKLXNwYW0yKGZsb29yZGl2LF9fZmxvb3JkaXZfXywgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCi1zcGFtMih0cnVlZGl2LF9fdHJ1ZWRpdl9fLCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCi1zcGFtMihtb2QsX19tb2RfXywgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCi1zcGFtMm8obmVnLF9fbmVnX18sICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQotc3BhbTJvKHBvcyxfX3Bvc19fLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKLXNwYW0ybyhhYnMsX19hYnNfXywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQotc3BhbTJvKGludixfX2ludl9fLCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0ybyhpbnZlcnQsX19pbnZlcnRfXywgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMihsc2hpZnQsX19sc2hpZnRfXywgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQotc3BhbTIocnNoaWZ0LF9fcnNoaWZ0X18sICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKLXNwYW0ybyhub3RfLF9fbm90X18sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKLXNwYW0yKGFuZF8sX19hbmRfXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQotc3BhbTIoeG9yLF9feG9yX18sICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQotc3BhbTIob3JfLF9fb3JfXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCi1zcGFtMihpYWRkLF9faWFkZF9fLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKLXNwYW0yKGlzdWIsX19pc3ViX18sICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQotc3BhbTIoaW11bCxfX2ltdWxfXywgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCi1zcGFtMihpZmxvb3JkaXYsX19pZmxvb3JkaXZfXywgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCi1zcGFtMihpdHJ1ZWRpdixfX2l0cnVlZGl2X18sICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQotc3BhbTIoaW1vZCxfX2ltb2RfXywgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCi1zcGFtMihpbHNoaWZ0LF9faWxzaGlmdF9fLCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCi1zcGFtMihpcnNoaWZ0LF9faXJzaGlmdF9fLCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCi1zcGFtMihpYW5kLF9faWFuZF9fLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKLXNwYW0yKGl4b3IsX19peG9yX18sICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQotc3BhbTIoaW9yLF9faW9yX18sICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCi1zcGFtMihjb25jYXQsX19jb25jYXRfXywKK3NwYW0ybyhpbmRleCwgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCitzcGFtMihhZGQsICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQorc3BhbTIoc3ViLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKK3NwYW0yKG11bCwgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCitzcGFtMihmbG9vcmRpdiwgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCitzcGFtMih0cnVlZGl2LCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCitzcGFtMihtb2QsICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQorc3BhbTJvKG5lZywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCitzcGFtMm8ocG9zLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKK3NwYW0ybyhhYnMsICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKK3NwYW0ybyhpbnYsICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTJvKGludmVydCwgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMihsc2hpZnQsICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKK3NwYW0yKHJzaGlmdCwgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQorc3BhbTJvKG5vdF8sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKK3NwYW0yKGFuZF8sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKK3NwYW0yKHhvciwgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCitzcGFtMihvcl8sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQorc3BhbTIoaWFkZCwgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCitzcGFtMihpc3ViLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKK3NwYW0yKGltdWwsICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQorc3BhbTIoaWZsb29yZGl2LCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKK3NwYW0yKGl0cnVlZGl2LCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKK3NwYW0yKGltb2QsICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQorc3BhbTIoaWxzaGlmdCwgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQorc3BhbTIoaXJzaGlmdCwgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQorc3BhbTIoaWFuZCwgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCitzcGFtMihpeG9yLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKK3NwYW0yKGlvciwgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKK3NwYW0yKGNvbmNhdCwKICAiY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoaWNvbmNhdCxfX2ljb25jYXRfXywKK3NwYW0yKGljb25jYXQsCiAgImEgPSBpY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGdldGl0ZW0sX19nZXRpdGVtX18sCitzcGFtMihnZXRpdGVtLAogICJnZXRpdGVtKGEsIGIpIC0tIFNhbWUgYXMgYVtiXS4iKQotc3BhbTIoc2V0aXRlbSxfX3NldGl0ZW1fXywKK3NwYW0yKHNldGl0ZW0sCiAgInNldGl0ZW0oYSwgYiwgYykgLS0gU2FtZSBhcyBhW2JdID0gYy4iKQotc3BhbTIoZGVsaXRlbSxfX2RlbGl0ZW1fXywKK3NwYW0yKGRlbGl0ZW0sCiAgImRlbGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBkZWwgYVtiXS4iKQotc3BhbTIocG93LF9fcG93X18sICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKLXNwYW0yKGlwb3csX19pcG93X18sICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKLXNwYW0yKGx0LF9fbHRfXywgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCi1zcGFtMihsZSxfX2xlX18sICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKLXNwYW0yKGVxLF9fZXFfXywgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQotc3BhbTIobmUsX19uZV9fLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCi1zcGFtMihndCxfX2d0X18sICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQotc3BhbTIoZ2UsX19nZV9fLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCitzcGFtMihwb3csICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKK3NwYW0yKGlwb3csICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKK3NwYW0yKGx0LCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKK3NwYW0yKGxlLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCitzcGFtMihlcSwgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQorc3BhbTIobmUsICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKK3NwYW0yKGd0LCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKK3NwYW0yKGdlLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCiAKICAgICB7Il9jb21wYXJlX2RpZ2VzdCIsIChQeUNGdW5jdGlvbiljb21wYXJlX2RpZ2VzdCwgTUVUSF9WQVJBUkdTLAogICAgICBjb21wYXJlX2RpZ2VzdF9fZG9jX199LAorICAgICB7Imxlbmd0aF9oaW50IiwgKFB5Q0Z1bmN0aW9uKWxlbmd0aF9oaW50LCBNRVRIX1ZBUkFSR1MsCisgICAgIGxlbmd0aF9oaW50X19kb2NfX30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIAogfTsKQEAgLTg5MiwxMiArOTE3LDEyIEBACiB9OwogCiAKLS8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9vcGVyYXRvcikgKi8KKy8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9fb3BlcmF0b3IpICovCiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvcGVyYXRvcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIm9wZXJhdG9yIiwKKyAgICAiX29wZXJhdG9yIiwKICAgICBvcGVyYXRvcl9kb2MsCiAgICAgLTEsCiAgICAgb3BlcmF0b3JfbWV0aG9kcywKQEAgLTkwOCw3ICs5MzMsNyBAQAogfTsKIAogUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9vcGVyYXRvcih2b2lkKQorUHlJbml0X19vcGVyYXRvcih2b2lkKQogewogICAgIFB5T2JqZWN0ICptOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19waWNrbGUuYyBiL01vZHVsZXMvX3BpY2tsZS5jCmluZGV4IGJjM2I0MDYuLjYyNzFjNGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3BpY2tsZS5jCisrKyBiL01vZHVsZXMvX3BpY2tsZS5jCkBAIC00LDkgKzQsMzMgQEAKIFB5RG9jX1NUUlZBUihwaWNrbGVfbW9kdWxlX2RvYywKICJPcHRpbWl6ZWQgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBwaWNrbGUgbW9kdWxlLiIpOwogCisvKltjbGluaWNdCittb2R1bGUgX3BpY2tsZQorY2xhc3MgX3BpY2tsZS5QaWNrbGVyCitjbGFzcyBfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyCitjbGFzcyBfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKy8qW3B5dGhvbl0KK2NsYXNzIFBpY2tsZXJPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlBpY2tsZXJPYmplY3QgKiIKKworY2xhc3MgUGlja2xlck1lbW9Qcm94eU9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiUGlja2xlck1lbW9Qcm94eU9iamVjdCAqIgorCitjbGFzcyBVbnBpY2tsZXJPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlVucGlja2xlck9iamVjdCAqIgorCitjbGFzcyBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gIlVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqIgorW3B5dGhvbl0qLworLypbcHl0aG9uIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIC8qIEJ1bXAgdGhpcyB3aGVuIG5ldyBvcGNvZGVzIGFyZSBhZGRlZCB0byB0aGUgcGlja2xlIHByb3RvY29sLiAqLwogZW51bSB7Ci0gICAgSElHSEVTVF9QUk9UT0NPTCA9IDMsCisgICAgSElHSEVTVF9QUk9UT0NPTCA9IDQsCiAgICAgREVGQVVMVF9QUk9UT0NPTCA9IDMKIH07CiAKQEAgLTcxLDE4ICs5NSwyMCBAQAogCiAgICAgLyogUHJvdG9jb2wgMyAoUHl0aG9uIDMueCkgKi8KICAgICBCSU5CWVRFUyAgICAgICA9ICdCJywKLSAgICBTSE9SVF9CSU5CWVRFUyA9ICdDJwotfTsKKyAgICBTSE9SVF9CSU5CWVRFUyA9ICdDJywKIAotLyogVGhlc2UgYXJlbid0IG9wY29kZXMgLS0gdGhleSdyZSB3YXlzIHRvIHBpY2tsZSBib29scyBiZWZvcmUgcHJvdG9jb2wgMgotICogc28gdGhhdCB1bnBpY2tsZXJzIHdyaXR0ZW4gYmVmb3JlIGJvb2xzIHdlcmUgaW50cm9kdWNlZCB1bnBpY2tsZSB0aGVtCi0gKiBhcyBpbnRzLCBidXQgdW5waWNrbGVycyBhZnRlciBjYW4gcmVjb2duaXplIHRoYXQgYm9vbHMgd2VyZSBpbnRlbmRlZC4KLSAqIE5vdGUgdGhhdCBwcm90b2NvbCAyIGFkZGVkIGRpcmVjdCB3YXlzIHRvIHBpY2tsZSBib29scy4KLSAqLwotI3VuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgIkkwMVxuIgotI3VuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICJJMDBcbiIKKyAgICAvKiBQcm90b2NvbCA0ICovCisgICAgU0hPUlRfQklOVU5JQ09ERSA9ICdceDhjJywKKyAgICBCSU5VTklDT0RFOCAgICAgID0gJ1x4OGQnLAorICAgIEJJTkJZVEVTOCAgICAgICAgPSAnXHg4ZScsCisgICAgRU1QVFlfU0VUICAgICAgICA9ICdceDhmJywKKyAgICBBRERJVEVNUyAgICAgICAgID0gJ1x4OTAnLAorICAgIEZST1pFTlNFVCAgICAgICAgPSAnXHg5MScsCisgICAgTkVXT0JKX0VYICAgICAgICA9ICdceDkyJywKKyAgICBTVEFDS19HTE9CQUwgICAgID0gJ1x4OTMnLAorICAgIE1FTU9JWkUgICAgICAgICAgPSAnXHg5NCcsCisgICAgRlJBTUUgICAgICAgICAgICA9ICdceDk1JworfTsKIAogZW51bSB7CiAgICAvKiBLZWVwIGluIHN5bmNoIHdpdGggcGlja2xlLlBpY2tsZXIuX0JBVENIU0laRS4gIFRoaXMgaXMgaG93IG1hbnkgZWxlbWVudHMKQEAgLTk4LDQ4ICsxMjQsMjQ2IEBACiAgICAgLyogSW5pdGlhbCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlci4gKi8KICAgICBXUklURV9CVUZfU0laRSA9IDQwOTYsCiAKLSAgICAvKiBNYXhpbXVtIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyIHdoZW4gcGlja2xpbmcgdG8gYQotICAgICAgIHN0cmVhbS4gIFRoaXMgaXMgaWdub3JlZCBmb3IgaW4tbWVtb3J5IHBpY2tsaW5nLiAqLwotICAgIE1BWF9XUklURV9CVUZfU0laRSA9IDY0ICogMTAyNCwKLQogICAgIC8qIFByZWZldGNoIHNpemUgd2hlbiB1bnBpY2tsaW5nIChkaXNhYmxlZCBvbiB1bnBlZWthYmxlIHN0cmVhbXMpICovCi0gICAgUFJFRkVUQ0ggPSA4MTkyICogMTYKKyAgICBQUkVGRVRDSCA9IDgxOTIgKiAxNiwKKworICAgIEZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0LAorCisgICAgRlJBTUVfSEVBREVSX1NJWkUgPSA5CiB9OwogCi0vKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiBUaGVzZSBzaG91bGQgb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbgotICAgcGlja2xlLnB5LCB3aGVuIHRoZSBDLW9wdGltaXplZCBQaWNrbGVyIGFuZCBVbnBpY2tsZXIgYXJlIHVzZWQuICovCi1zdGF0aWMgUHlPYmplY3QgKlBpY2tsZUVycm9yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqUGlja2xpbmdFcnJvciA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKlVucGlja2xpbmdFcnJvciA9IE5VTEw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGUgPSBOVUxMOwotLyogRm9yIEVYVFsxMjRdIG9wY29kZXMuICovCi0vKiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnksIHsobW9kdWxlX25hbWUsIGZ1bmN0aW9uX25hbWUpOiBjb2RlfSAqLwotc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25fcmVnaXN0cnkgPSBOVUxMOwotLyogY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnksIHtjb2RlOiAobW9kdWxlX25hbWUsIGZ1bmN0aW9uX25hbWUpfSAqLwotc3RhdGljIFB5T2JqZWN0ICppbnZlcnRlZF9yZWdpc3RyeSA9IE5VTEw7Ci0vKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCi1zdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZSA9IE5VTEw7CisvKiBTdGF0ZSBvZiB0aGUgcGlja2xlIG1vZHVsZSwgcGVyIFBFUCAzMTIxLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIEV4Y2VwdGlvbiBjbGFzc2VzIGZvciBwaWNrbGUuICovCisgICAgUHlPYmplY3QgKlBpY2tsZUVycm9yOworICAgIFB5T2JqZWN0ICpQaWNrbGluZ0Vycm9yOworICAgIFB5T2JqZWN0ICpVbnBpY2tsaW5nRXJyb3I7CisgICAgCisgICAgLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KKyAgICBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGU7CiAKLS8qIF9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORywgeyhvbGRtb2R1bGUsIG9sZG5hbWUpOiAobmV3bW9kdWxlLCBuZXduYW1lKX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzJ0bzMgPSBOVUxMOwotLyogX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcsIHtvbGRtb2R1bGU6IG5ld21vZHVsZX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfMnRvMyA9IE5VTEw7Ci0vKiBTYW1lLCBidXQgd2l0aCBSRVZFUlNFX05BTUVfTUFQUElORyAvIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgKi8KLXN0YXRpYyBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzN0bzIgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yID0gTlVMTDsKKyAgICAvKiBGb3IgdGhlIGV4dGVuc2lvbiBvcGNvZGVzIEVYVDEsIEVYVDIgYW5kIEVYVDQuICovCiAKLS8qIFhYWDogQXJlIHRoZXNlIHJlYWxseSBuZXNjZXNzYXJ5PyAqLwotLyogQXMgdGhlIG5hbWUgc2F5cywgYW4gZW1wdHkgdHVwbGUuICovCi1zdGF0aWMgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gTlVMTDsKLS8qIEZvciBsb29raW5nIHVwIG5hbWUgcGFpcnMgaW4gY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LiAqLwotc3RhdGljIFB5T2JqZWN0ICp0d29fdHVwbGUgPSBOVUxMOworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgeyhtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSk6IGNvZGV9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9yZWdpc3RyeTsKKyAgICAvKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZTsKKyAgICAvKiBjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSwge2NvZGU6IChtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSl9ICovCisgICAgUHlPYmplY3QgKmludmVydGVkX3JlZ2lzdHJ5OworCisgICAgLyogSW1wb3J0IG1hcHBpbmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLworCisgICAgLyogX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HLAorICAgICAgIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zOworICAgIC8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzM7CisgICAgLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yOworICAgIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yOworCisgICAgLyogY29kZWNzLmVuY29kZSwgdXNlZCBmb3Igc2F2aW5nIGJ5dGVzIGluIG9sZGVyIHByb3RvY29scyAqLworICAgIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlOworfSBQaWNrbGVTdGF0ZTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgZGVmaW5pdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3BpY2tsZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0LCBnZXQgaXRzIHBlci1tb2R1bGUgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRTdGF0ZShQeU9iamVjdCAqbW9kdWxlKQoreworICAgIHJldHVybiAoUGlja2xlU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpOworfQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICAgYW5kIGdldCBpdHMgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSh2b2lkKQoreworICAgIHJldHVybiBfUGlja2xlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmX3BpY2tsZW1vZHVsZSkpOworfQorCisvKiBDbGVhciB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyB2b2lkCitfUGlja2xlX0NsZWFyU3RhdGUoUGlja2xlU3RhdGUgKnN0KQoreworICAgIFB5X0NMRUFSKHN0LT5QaWNrbGVFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5kaXNwYXRjaF90YWJsZSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9jYWNoZSk7CisgICAgUHlfQ0xFQVIoc3QtPmludmVydGVkX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9DTEVBUihzdC0+Y29kZWNzX2VuY29kZSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdpdmVuIHBpY2tsZSBtb2R1bGUgc3RhdGUuICovCitzdGF0aWMgaW50CitfUGlja2xlX0luaXRTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb21wYXRfcGlja2xlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29kZWNzID0gTlVMTDsKKworICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKKyAgICBpZiAoIWNvcHlyZWcpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmRpc3BhdGNoX3RhYmxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiZGlzcGF0Y2hfdGFibGUiKTsKKyAgICBpZiAoIXN0LT5kaXNwYXRjaF90YWJsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5kaXNwYXRjaF90YWJsZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLmRpc3BhdGNoX3RhYmxlIHNob3VsZCBiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzdC0+ZGlzcGF0Y2hfdGFibGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9yZWdpc3RyeSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5IHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbnZlcnRlZF9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2ludmVydGVkX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX2NhY2hlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9jYWNoZSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9jYWNoZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fY2FjaGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX2NhY2hlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworCisgICAgLyogTG9hZCB0aGUgMi54IC0+IDMueCBzdGRsaWIgbW9kdWxlIG1hcHBpbmcgdGFibGVzICovCisgICAgY29tcGF0X3BpY2tsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2NvbXBhdF9waWNrbGUiKTsKKyAgICBpZiAoIWNvbXBhdF9waWNrbGUpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPm5hbWVfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJOQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfMnRvMykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfMnRvMyktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiSU1QT1JUX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KKyAgICBzdC0+bmFtZV9tYXBwaW5nXzN0bzIgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+bmFtZV9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+bmFtZV9tYXBwaW5nXzN0bzIpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9JTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKworICAgIGNvZGVjcyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7CisgICAgaWYgKGNvZGVjcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHN0LT5jb2RlY3NfZW5jb2RlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY3MsICJlbmNvZGUiKTsKKyAgICBpZiAoc3QtPmNvZGVjc19lbmNvZGUgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soc3QtPmNvZGVjc19lbmNvZGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29kZWNzLmVuY29kZSBzaG91bGQgYmUgYSBjYWxsYWJsZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5jb2RlY3NfZW5jb2RlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvZGVjcyk7CisKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICBQeV9DTEVBUihjb3B5cmVnKTsKKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKyAgICBQeV9DTEVBUihjb2RlY3MpOworICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShzdCk7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBIZWxwZXIgZm9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHF1aWNrbHkuCisKKyAgIFRoaXMgZnVuY3Rpb24gc3RlYWxzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGdpdmVuIGFyZ3VtZW50LiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19QaWNrbGVfRmFzdENhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqYXJnX3R1cGxlID0gUHlUdXBsZV9OZXcoMSk7CisKKyAgICAvKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmV1c2UgdGhlIGFyZ3VtZW50IHR1cGxlLiBUaGlzIHVzZWQgdG8gZ2l2ZQorICAgICAgIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGJvb3N0IHdpdGggb2xkZXIgcGlja2xlIGltcGxlbWVudGF0aW9ucyB3aGVyZSBtYW55CisgICAgICAgdW5idWZmZXJlZCByZWFkcyBvY2N1cnJlZCAodGh1cyBuZWVkaW5nIG1hbnkgZnVuY3Rpb24gY2FsbHMpLgorCisgICAgICAgSG93ZXZlciwgdGhpcyBvcHRpbWl6YXRpb24gd2FzIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgdG8gZ2V0IHJpZ2h0LiBJdCBhYnVzZWQgdGhlIEMgQVBJIGZvciB0dXBsZXMgdG8gbXV0YXRlIHRoZW0gd2hpY2ggbGVkCisgICAgICAgdG8gc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgYnVncy4gRnVydGhlcm1vcmUsIHRoZQorICAgICAgIGludHJvZHVjdGlvbiBvZiBwcm90b2NvbCA0IGFuZCB0aGUgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uIHZpYSBwZWVrKCkKKyAgICAgICBzaWduaWZpY2FudGx5IHJlZHVjZWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB3ZSBkby4gVGh1cywgdGhlCisgICAgICAgYmVuZWZpdHMgYmVjYW1lIG1hcmdpbmFsIGF0IGJlc3QuICovCisKKyAgICBpZiAoYXJnX3R1cGxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ190dXBsZSwgMCwgb2JqKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ190dXBsZSwgTlVMTCk7CisgICAgUHlfQ0xFQVIoYXJnX3R1cGxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAogc3RhY2tfdW5kZXJmbG93KHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInVucGlja2xpbmcgc3RhY2sgdW5kZXJmbG93Iik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTI0MCw4ICs0NjQsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFBkYXRhX3BvcChQZGF0YSAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZi0+ZGF0YVstLVB5X1NJWkUoc2VsZildOwpAQCAtMzIwLDcgKzU0NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsaW5nLiAqLwogICAgIFB5T2JqZWN0ICpwZXJzX2Z1bmM7ICAgICAgICAvKiBwZXJzaXN0ZW50X2lkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTCAqLwogICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsgICAvKiBwcml2YXRlIGRpc3BhdGNoX3RhYmxlLCBjYW4gYmUgTlVMTCAqLwotICAgIFB5T2JqZWN0ICphcmc7CiAKICAgICBQeU9iamVjdCAqd3JpdGU7ICAgICAgICAgICAgLyogd3JpdGUoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXI7ICAgIC8qIFdyaXRlIGludG8gYSBsb2NhbCBieXRlYXJyYXkgYnVmZmVyIGJlZm9yZQpAQCAtMzI5LDcgKzU1MywxMiBAQAogICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9sZW47ICAvKiBBbGxvY2F0aW9uIHNpemUgb2Ygb3V0cHV0X2J1ZmZlci4gKi8KICAgICBpbnQgcHJvdG87ICAgICAgICAgICAgICAgICAgLyogUGlja2xlIHByb3RvY29sIG51bWJlciwgPj0gMCAqLwogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLworICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCisgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm8gZnJhbWUgY3VycmVudGx5IG9wZW4uICovCisKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLwogICAgIGludCBmYXN0OyAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgZmFzdCBtb2RlIGlmIHNldCB0byBhIHRydWUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYXN0IG1vZGUgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgbWVtbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIHNwZWVkaW5nIHRoZSBwaWNrbGluZyBwcm9jZXNzIGJ5CkBAIC0zNDksOSArNTc4LDkgQEAKICAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CiAgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCiAgICAgUHlPYmplY3QgKiptZW1vOwotICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOyAgICAgICAvKiBDYXBhY2l0eSBvZiB0aGUgbWVtbyBhcnJheSAqLworICAgIFB5X3NzaXplX3QgbWVtb19sZW47ICAgICAgICAvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtbyAqLwogCi0gICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KIAogICAgIFB5X2J1ZmZlciBidWZmZXI7CkBAIC0zNjAsNiArNTg5LDcgQEAKICAgICBQeV9zc2l6ZV90IGlucHV0X2xlbjsKICAgICBQeV9zc2l6ZV90IG5leHRfcmVhZF9pZHg7CiAgICAgUHlfc3NpemVfdCBwcmVmZXRjaGVkX2lkeDsgIC8qIGluZGV4IG9mIGZpcnN0IHByZWZldGNoZWQgYnl0ZSAqLworCiAgICAgUHlPYmplY3QgKnJlYWQ7ICAgICAgICAgICAgIC8qIHJlYWQoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcmVhZGxpbmU7ICAgICAgICAgLyogcmVhZGxpbmUoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcGVlazsgICAgICAgICAgICAgLyogcGVlaygpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCBvciBOVUxMICovCkBAIC00MzYsNiArNjY2LDcgQEAKICAgICBuZXctPm10X3RhYmxlID0gUHlNZW1fTUFMTE9DKHNlbGYtPm10X2FsbG9jYXRlZCAqIHNpemVvZihQeU1lbW9FbnRyeSkpOwogICAgIGlmIChuZXctPm10X3RhYmxlID09IE5VTEwpIHsKICAgICAgICAgUHlNZW1fRlJFRShuZXcpOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPm10X2FsbG9jYXRlZDsgaSsrKSB7CkBAIC01MjksNyArNzYwLDcgQEAKICAgICBvbGR0YWJsZSA9IHNlbGYtPm10X3RhYmxlOwogICAgIHNlbGYtPm10X3RhYmxlID0gUHlNZW1fTUFMTE9DKG5ld19zaXplICogc2l6ZW9mKFB5TWVtb0VudHJ5KSk7CiAgICAgaWYgKHNlbGYtPm10X3RhYmxlID09IE5VTEwpIHsKLSAgICAgICAgUHlNZW1fRlJFRShvbGR0YWJsZSk7CisgICAgICAgIHNlbGYtPm10X3RhYmxlID0gb2xkdGFibGU7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC02MDUsNjAgKzgzNiw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBIZWxwZXJzIGZvciBjcmVhdGluZyB0aGUgYXJndW1lbnQgdHVwbGUgcGFzc2VkIHRvIGZ1bmN0aW9ucy4gVGhpcyBoYXMgdGhlCi0gICBwZXJmb3JtYW5jZSBhZHZhbnRhZ2Ugb2YgY2FsbGluZyBQeVR1cGxlX05ldygpIG9ubHkgb25jZS4KLQotICAgWFhYKGF2YXNzYWxvdHRpKTogSW5saW5lIGRpcmVjdGx5IGluIF9QaWNrbGVyX0Zhc3RDYWxsKCkgYW5kCi0gICBfVW5waWNrbGVyX0Zhc3RDYWxsKCkuICovCi0jZGVmaW5lIEFSR19UVVAoc2VsZiwgb2JqKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgoc2VsZiktPmFyZyB8fCAoKHNlbGYpLT5hcmc9UHlUdXBsZV9OZXcoMSkpKSB7ICBcCi0gICAgICAgICAgICBQeV9YREVDUkVGKFB5VHVwbGVfR0VUX0lURU0oKHNlbGYpLT5hcmcsIDApKTsgICBcCi0gICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKChzZWxmKS0+YXJnLCAwLCAob2JqKSk7ICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoKG9iaikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUkVFX0FSR19UVVAoc2VsZikgZG8geyAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoKHNlbGYpLT5hcmctPm9iX3JlZmNudCA+IDEpICAgICAgICAgXAotICAgICAgICAgICAgUHlfQ0xFQVIoKHNlbGYpLT5hcmcpOyAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIEEgdGVtcG9yYXJ5IGNsZWFuZXIgQVBJIGZvciBmYXN0IHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBjYWxsLgotCi0gICBYWFg6IERvZXMgY2FjaGluZyB0aGUgYXJndW1lbnQgdHVwbGUgcHJvdmlkZXMgYW55IHJlYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHM/Ci0KLSAgIEEgcXVpY2sgYmVuY2htYXJrLCBvbiBhIDIuMEdIeiBBdGhsb242NCAzMjAwKyBydW5uaW5nIExpbnV4IDIuNi4yNCB3aXRoCi0gICBnbGliYyAyLjcsIHRlbGxzIG1lIHRoYXQgaXQgdGFrZXMgcm91Z2hseSAyMCwwMDAsMDAwIFB5VHVwbGVfTmV3KDEpIGNhbGxzCi0gICB3aGVuIHRoZSB0dXBsZSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgZnJlZWxpc3QgKGkuZSwgY2FsbCBQeVR1cGxlX05ldygpIHRoZW4KLSAgIGltbWVkaWF0ZWx5IERFQ1JFRiBpdCkgYW5kIDEsMjAwLDAwMCBjYWxscyB3aGVuIGFsbG9jYXRpbmcgYnJhbmQgbmV3IHR1cGxlcwotICAgKGkuZSwgY2FsbCBQeVR1cGxlX05ldygpIGFuZCBzdG9yZSB0aGUgcmV0dXJuZWQgdmFsdWUgaW4gYW4gYXJyYXkpLCB0byBzYXZlCi0gICBvbmUgc2Vjb25kICh3YWxsIGNsb2NrIHRpbWUpLiBFaXRoZXIgd2F5cywgdGhlIGxvYWRpbmcgdGltZSBhIHBpY2tsZSBzdHJlYW0KLSAgIGxhcmdlIGVub3VnaCB0byBnZW5lcmF0ZSB0aGlzIG51bWJlciBvZiBjYWxscyB3b3VsZCBiZSBtYXNzaXZlbHkKLSAgIG92ZXJ3aGVsbWVkIGJ5IG90aGVyIGZhY3RvcnMsIGxpa2UgSS9PIHRocm91Z2hwdXQsIHRoZSBHQyB0cmF2ZXJzYWwgYW5kCi0gICBvYmplY3QgYWxsb2NhdGlvbiBvdmVyaGVhZC4gU28sIEkgcmVhbGx5IGRvdWJ0IHRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGFueQotICAgcmVhbCBiZW5lZml0cy4KLQotICAgT24gdGhlIG90aGVyIGhhbmQsIG9wcm9maWxlIHJlcG9ydHMgdGhhdCBwaWNrbGUgc3BlbmRzIGEgbG90IG9mIHRpbWUgaW4KLSAgIHRoZXNlIGZ1bmN0aW9ucy4gQnV0LCB0aGF0IGlzIHByb2JhYmx5IG1vcmUgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbAotICAgb3ZlcmhlYWQsIHRoYW4gdGhlIGFyZ3VtZW50IHR1cGxlIGFsbG9jYXRpb24uCi0KLSAgIFhYWDogQW5kLCB3aGF0IGlzIHRoZSByZWZlcmVuY2UgYmVoYXZpb3Igb2YgdGhlc2U/IFN0ZWFsLCBib3Jyb3c/IEF0IGZpcnN0Ci0gICBnbGFuY2UsIGl0IHNlZW1zIHRvIHN0ZWFsIHRoZSByZWZlcmVuY2Ugb2YgJ2FyZycgYW5kIGJvcnJvdyB0aGUgcmVmZXJlbmNlCi0gICBvZiAnZnVuYycuICovCi1zdGF0aWMgUHlPYmplY3QgKgotX1BpY2tsZXJfRmFzdENhbGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBBUkdfVFVQKHNlbGYsIGFyZyk7Ci0gICAgaWYgKHNlbGYtPmFyZykgewotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIHNlbGYtPmFyZywgTlVMTCk7Ci0gICAgICAgIEZSRUVfQVJHX1RVUChzZWxmKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAogc3RhdGljIGludAogX1BpY2tsZXJfQ2xlYXJCdWZmZXIoUGlja2xlck9iamVjdCAqc2VsZikKQEAgLTY2OSwxNSArODQ2LDcxIEBACiAgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOworICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitfd3JpdGVfc2l6ZTY0KGNoYXIgKm91dCwgc2l6ZV90IHZhbHVlKQoreworICAgIGludCBpOworCisgICAgYXNzZXJ0KHNpemVvZihzaXplX3QpIDw9IDgpOworCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzaXplX3QpOyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gKHVuc2lnbmVkIGNoYXIpKCh2YWx1ZSA+PiAoOCAqIGkpKSAmIDB4ZmYpOworICAgIH0KKyAgICBmb3IgKGkgPSBzaXplb2Yoc2l6ZV90KTsgaSA8IDg7IGkrKykgeworICAgICAgICBvdXRbaV0gPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK19QaWNrbGVyX1dyaXRlRnJhbWVIZWFkZXIoUGlja2xlck9iamVjdCAqc2VsZiwgY2hhciAqcWRhdGEsIHNpemVfdCBmcmFtZV9sZW4pCit7CisgICAgcWRhdGFbMF0gPSBGUkFNRTsKKyAgICBfd3JpdGVfc2l6ZTY0KHFkYXRhICsgMSwgZnJhbWVfbGVuKTsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfQ29tbWl0RnJhbWUoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBzaXplX3QgZnJhbWVfbGVuOworICAgIGNoYXIgKnFkYXRhOworCisgICAgaWYgKCFzZWxmLT5mcmFtaW5nIHx8IHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmcmFtZV9sZW4gPSBzZWxmLT5vdXRwdXRfbGVuIC0gc2VsZi0+ZnJhbWVfc3RhcnQgLSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBxZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPm91dHB1dF9idWZmZXIpICsgc2VsZi0+ZnJhbWVfc3RhcnQ7CisgICAgX1BpY2tsZXJfV3JpdGVGcmFtZUhlYWRlcihzZWxmLCBxZGF0YSwgZnJhbWVfbGVuKTsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfUGlja2xlcl9PcGNvZGVCb3VuZGFyeShQaWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKCFzZWxmLT5mcmFtaW5nIHx8IHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmcmFtZV9sZW4gPSBzZWxmLT5vdXRwdXRfbGVuIC0gc2VsZi0+ZnJhbWVfc3RhcnQgLSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBpZiAoZnJhbWVfbGVuID49IEZSQU1FX1NJWkVfVEFSR0VUKQorICAgICAgICByZXR1cm4gX1BpY2tsZXJfQ29tbWl0RnJhbWUoc2VsZik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9QaWNrbGVyX0dldFN0cmluZyhQaWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpvdXRwdXRfYnVmZmVyID0gc2VsZi0+b3V0cHV0X2J1ZmZlcjsKIAogICAgIGFzc2VydChzZWxmLT5vdXRwdXRfYnVmZmVyICE9IE5VTEwpOworCisgICAgaWYgKF9QaWNrbGVyX0NvbW1pdEZyYW1lKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHNlbGYtPm91dHB1dF9idWZmZXIgPSBOVUxMOwogICAgIC8qIFJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZvdXRwdXRfYnVmZmVyLCBzZWxmLT5vdXRwdXRfbGVuKSA8IDApCkBAIC02OTIsNjcgKzkyNSw2NCBAQAogCiAgICAgYXNzZXJ0KHNlbGYtPndyaXRlICE9IE5VTEwpOwogCisgICAgLyogVGhpcyB3aWxsIGNvbW1pdCB0aGUgZnJhbWUgZmlyc3QgKi8KICAgICBvdXRwdXQgPSBfUGlja2xlcl9HZXRTdHJpbmcoc2VsZik7CiAgICAgaWYgKG91dHB1dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXN1bHQgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT53cml0ZSwgb3V0cHV0KTsKKyAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPndyaXRlLCBvdXRwdXQpOwogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gKHJlc3VsdCA9PSBOVUxMKSA/IC0xIDogMDsKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLV9QaWNrbGVyX1dyaXRlKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbikKK19QaWNrbGVyX1dyaXRlKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgZGF0YV9sZW4pCiB7Ci0gICAgUHlfc3NpemVfdCBpLCByZXF1aXJlZDsKKyAgICBQeV9zc2l6ZV90IGksIG4sIHJlcXVpcmVkOwogICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICBpbnQgbmVlZF9uZXdfZnJhbWU7CiAKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKKyAgICBuZWVkX25ld19mcmFtZSA9IChzZWxmLT5mcmFtaW5nICYmIHNlbGYtPmZyYW1lX3N0YXJ0ID09IC0xKTsKKworICAgIGlmIChuZWVkX25ld19mcmFtZSkKKyAgICAgICAgbiA9IGRhdGFfbGVuICsgRlJBTUVfSEVBREVSX1NJWkU7CisgICAgZWxzZQorICAgICAgICBuID0gZGF0YV9sZW47CiAKICAgICByZXF1aXJlZCA9IHNlbGYtPm91dHB1dF9sZW4gKyBuOwogICAgIGlmIChyZXF1aXJlZCA+IHNlbGYtPm1heF9vdXRwdXRfbGVuKSB7Ci0gICAgICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMICYmIHJlcXVpcmVkID4gTUFYX1dSSVRFX0JVRl9TSVpFKSB7Ci0gICAgICAgICAgICAvKiBYWFggVGhpcyByZWFsbG9jYXRlcyBhIG5ldyBidWZmZXIgZXZlcnkgdGltZSwgd2hpY2ggaXMgYSBiaXQKLSAgICAgICAgICAgICAgIHdhc3RlZnVsLiAqLwotICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0ZsdXNoVG9GaWxlKHNlbGYpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoX1BpY2tsZXJfQ2xlYXJCdWZmZXIoc2VsZikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgLyogTWFrZSBwbGFjZSBpbiBidWZmZXIgZm9yIHRoZSBwaWNrbGUgY2h1bmsgKi8KKyAgICAgICAgaWYgKHNlbGYtPm91dHB1dF9sZW4gPj0gUFlfU1NJWkVfVF9NQVggLyAyIC0gbikgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiBuID4gTUFYX1dSSVRFX0JVRl9TSVpFKSB7Ci0gICAgICAgICAgICAvKiB3ZSBhbHJlYWR5IGZsdXNoZWQgYWJvdmUsIHNvIHRoZSBidWZmZXIgaXMgZW1wdHkgKi8KLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgICAgICAgICAvKiBYWFggd2UgY291bGQgc3BhcmUgYW4gaW50ZXJtZWRpYXRlIGNvcHkgYW5kIHBhc3MKLSAgICAgICAgICAgICAgIGEgbWVtb3J5dmlldyBpbnN0ZWFkICovCi0gICAgICAgICAgICBQeU9iamVjdCAqb3V0cHV0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBuKTsKLSAgICAgICAgICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA9PSBOVUxMKSA/IC0xIDogMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfbGVuID49IFBZX1NTSVpFX1RfTUFYIC8gMiAtIG4pIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gKHNlbGYtPm91dHB1dF9sZW4gKyBuKSAvIDIgKiAzOwotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+b3V0cHV0X2J1ZmZlciwgc2VsZi0+bWF4X291dHB1dF9sZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSAoc2VsZi0+b3V0cHV0X2xlbiArIG4pIC8gMiAqIDM7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnNlbGYtPm91dHB1dF9idWZmZXIsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPm91dHB1dF9idWZmZXIpOwotICAgIGlmIChuIDwgOCkgeworICAgIGlmIChuZWVkX25ld19mcmFtZSkgeworICAgICAgICAvKiBTZXR1cCBuZXcgZnJhbWUgKi8KKyAgICAgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydCA9IHNlbGYtPm91dHB1dF9sZW47CisgICAgICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gZnJhbWVfc3RhcnQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGUkFNRV9IRUFERVJfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAvKiBXcml0ZSBhbiBpbnZhbGlkIHZhbHVlLCBmb3IgZGVidWdnaW5nICovCisgICAgICAgICAgICBidWZmZXJbZnJhbWVfc3RhcnQgKyBpXSA9IDB4RkU7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBGUkFNRV9IRUFERVJfU0laRTsKKyAgICB9CisgICAgaWYgKGRhdGFfbGVuIDwgOCkgewogICAgICAgICAvKiBUaGlzIGlzIGZhc3RlciB0aGFuIG1lbWNweSB3aGVuIHRoZSBzdHJpbmcgaXMgc2hvcnQuICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuOyBpKyspIHsKICAgICAgICAgICAgIGJ1ZmZlcltzZWxmLT5vdXRwdXRfbGVuICsgaV0gPSBzW2ldOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2VsZi0+b3V0cHV0X2xlbiwgcywgbik7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzZWxmLT5vdXRwdXRfbGVuLCBzLCBkYXRhX2xlbik7CiAgICAgfQotICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gbjsKLSAgICByZXR1cm4gbjsKKyAgICBzZWxmLT5vdXRwdXRfbGVuICs9IGRhdGFfbGVuOworICAgIHJldHVybiBkYXRhX2xlbjsKIH0KIAogc3RhdGljIFBpY2tsZXJPYmplY3QgKgpAQCAtNzY2LDI1ICs5OTYsMjMgQEAKIAogICAgIHNlbGYtPnBlcnNfZnVuYyA9IE5VTEw7CiAgICAgc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPSBOVUxMOwotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+d3JpdGUgPSBOVUxMOwogICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBzZWxmLT5iaW4gPSAwOworICAgIHNlbGYtPmZyYW1pbmcgPSAwOworICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gLTE7CiAgICAgc2VsZi0+ZmFzdCA9IDA7CiAgICAgc2VsZi0+ZmFzdF9uZXN0aW5nID0gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IDA7CiAgICAgc2VsZi0+ZmFzdF9tZW1vID0gTlVMTDsKLQotICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gV1JJVEVfQlVGX1NJWkU7CiAgICAgc2VsZi0+b3V0cHV0X2xlbiA9IDA7CisKKyAgICBzZWxmLT5tZW1vID0gUHlNZW1vVGFibGVfTmV3KCk7CiAgICAgc2VsZi0+b3V0cHV0X2J1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbik7Ci0gICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgeworCisgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCB8fCBzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03OTIsMzQgKzEwMjAsMjkgQEAKIH0KIAogc3RhdGljIGludAotX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvX29iaiwKLSAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0c19vYmopCitfUGlja2xlcl9TZXRQcm90b2NvbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKIHsKLSAgICBsb25nIHByb3RvID0gMDsKLSAgICBpbnQgZml4X2ltcG9ydHM7CisgICAgbG9uZyBwcm90bzsKIAotICAgIGlmIChwcm90b19vYmogPT0gTlVMTCB8fCBwcm90b19vYmogPT0gUHlfTm9uZSkKKyAgICBpZiAocHJvdG9jb2wgPT0gTlVMTCB8fCBwcm90b2NvbCA9PSBQeV9Ob25lKSB7CiAgICAgICAgIHByb3RvID0gREVGQVVMVF9QUk9UT0NPTDsKKyAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b19vYmopOwotICAgICAgICBpZiAocHJvdG8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcHJvdG8gPSBQeUxvbmdfQXNMb25nKHByb3RvY29sKTsKKyAgICAgICAgaWYgKHByb3RvIDwgMCkgeworICAgICAgICAgICAgaWYgKHByb3RvID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcHJvdG8gPSBISUdIRVNUX1BST1RPQ09MOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHByb3RvID4gSElHSEVTVF9QUk9UT0NPTCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgSElHSEVTVF9QUk9UT0NPTCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHByb3RvIDwgMCkKLSAgICAgICAgcHJvdG8gPSBISUdIRVNUX1BST1RPQ09MOwotICAgIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICBISUdIRVNUX1BST1RPQ09MKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBmaXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0c19vYmopOwotICAgIGlmIChmaXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc2VsZi0+cHJvdG8gPSBwcm90bzsKKyAgICBzZWxmLT5wcm90byA9IChpbnQpcHJvdG87CiAgICAgc2VsZi0+YmluID0gcHJvdG8gPiAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHMgJiYgcHJvdG8gPCAzOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg0MSwyMCArMTA2NCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIFNlZSBkb2N1bWVudGF0aW9uIGZvciBfUGlja2xlcl9GYXN0Q2FsbCgpLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLV9VbnBpY2tsZXJfRmFzdENhbGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLQotICAgIEFSR19UVVAoc2VsZiwgYXJnKTsKLSAgICBpZiAoc2VsZi0+YXJnKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgc2VsZi0+YXJnLCBOVUxMKTsKLSAgICAgICAgRlJFRV9BUkdfVFVQKHNlbGYpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiBUaGlzIHRha2VzIGl0cwogICAgb3duIHJlZmVyZW5jZSB0byBgaW5wdXRgLiAqLwogc3RhdGljIFB5X3NzaXplX3QKQEAgLTg3NCwxOCArMTA4MywyMSBAQAogc3RhdGljIGludAogX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBzZWxmLT5uZXh0X3JlYWRfaWR4IC0gc2VsZi0+cHJlZmV0Y2hlZF9pZHg7CisgICAgUHlfc3NpemVfdCBjb25zdW1lZDsKKyAgICBQeU9iamVjdCAqcjsKIAotICAgIGlmIChjb25zdW1lZCA+IDApIHsKLSAgICAgICAgUHlPYmplY3QgKnI7Ci0gICAgICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCi0gICAgICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCi0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7Ci0gICAgICAgIGlmIChyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5X0RFQ1JFRihyKTsKLSAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSBzZWxmLT5uZXh0X3JlYWRfaWR4OwotICAgIH0KKyAgICBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKyAgICBpZiAoY29uc3VtZWQgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLworICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCisgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yZWFkLCAibiIsIGNvbnN1bWVkKTsKKyAgICBpZiAociA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHIpOworCisgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSBzZWxmLT5uZXh0X3JlYWRfaWR4OwogICAgIHJldHVybiAwOwogfQogCkBAIC05MTYsMTMgKzExMjgsMTYgQEAKICAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAobiA9PSBSRUFEX1dIT0xFX0xJTkUpCisgICAgaWYgKG4gPT0gUkVBRF9XSE9MRV9MSU5FKSB7CisgICAgICAgIFB5T2JqZWN0ICplbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICBkYXRhID0gUHlPYmplY3RfQ2FsbChzZWxmLT5yZWFkbGluZSwgZW1wdHlfdHVwbGUsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKmxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKICAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkYXRhID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOworICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5yZWFkLCBsZW4pOwogICAgIH0KICAgICBpZiAoZGF0YSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC05MzUsNyArMTE1MCw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgcHJlZmV0Y2hlZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVlaywgbGVuKTsKKyAgICAgICAgcHJlZmV0Y2hlZCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVlaywgbGVuKTsKICAgICAgICAgaWYgKHByZWZldGNoZWQgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpIHsKICAgICAgICAgICAgICAgICAvKiBwZWVrKCkgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSBvYmplY3QgKi8KQEAgLTEwMDYsOCArMTIyMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdWx0KQogewogICAgIGNoYXIgKmlucHV0X2xpbmUgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmlucHV0X2xpbmUsIGxlbiArIDEpOwotICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpCisgICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWVtY3B5KGlucHV0X2xpbmUsIGxpbmUsIGxlbik7CiAgICAgaW5wdXRfbGluZVtsZW5dID0gJ1wwJzsKQEAgLTEwOTYsNyArMTMxMywxMiBAQAogICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgb2xkX2l0ZW0gPSBzZWxmLT5tZW1vW2lkeF07CiAgICAgc2VsZi0+bWVtb1tpZHhdID0gdmFsdWU7Ci0gICAgUHlfWERFQ1JFRihvbGRfaXRlbSk7CisgICAgaWYgKG9sZF9pdGVtICE9IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9pdGVtKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlbGYtPm1lbW9fbGVuKys7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTA0LDggKzEzMjYsMTAgQEAKIF9VbnBpY2tsZXJfTmV3TWVtbyhQeV9zc2l6ZV90IG5ld19zaXplKQogewogICAgIFB5T2JqZWN0ICoqbWVtbyA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgaWYgKG1lbW8gPT0gTlVMTCkKKyAgICBpZiAobWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBtZW1zZXQobWVtbywgMCwgbmV3X3NpemUgKiBzaXplb2YoUHlPYmplY3QgKikpOwogICAgIHJldHVybiBtZW1vOwogfQpAQCAtMTEzNiwyMSArMTM2MCw2IEBACiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOwotICAgIGlmIChzZWxmLT5zdGFjayA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7Ci0KLSAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKLSAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBzZWxmLT5pbnB1dF9idWZmZXIgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwpAQCAtMTE2Nyw2ICsxMzc2LDE2IEBACiAgICAgc2VsZi0+bWFya3Nfc2l6ZSA9IDA7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKKyAgICBtZW1zZXQoJnNlbGYtPmJ1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOworICAgIHNlbGYtPm1lbW9fbGVuID0gMDsKKyAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CisgICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+c3RhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMTIxMyw4ICsxNDMyLDggQEAKICAgICBpZiAoZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOwogCi0gICAgc2VsZi0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgIHNlbGYtPmVycm9ycyA9IHN0cmR1cChlcnJvcnMpOworICAgIHNlbGYtPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CisgICAgc2VsZi0+ZXJyb3JzID0gX1B5TWVtX1N0cmR1cChlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMIHx8IHNlbGYtPmVycm9ycyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsNyArMTQ3Niw4IEBACiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTkdFVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0xMjc0LDEyOCArMTQ5NCwxNzUgQEAKIHN0YXRpYyBpbnQKIG1lbW9fcHV0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlfc3NpemVfdCB4OwogICAgIGNoYXIgcGRhdGFbMzBdOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIGludCBzdGF0dXMgPSAwOworICAgIFB5X3NzaXplX3QgaWR4OworCisgICAgY29uc3QgY2hhciBtZW1vaXplX29wID0gTUVNT0laRTsKIAogICAgIGlmIChzZWxmLT5mYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOwotICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCB4KSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWR4ID0gUHlNZW1vVGFibGVfU2l6ZShzZWxmLT5tZW1vKTsKKyAgICBpZiAoUHlNZW1vVGFibGVfU2V0KHNlbGYtPm1lbW8sIG9iaiwgaWR4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghc2VsZi0+YmluKSB7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtZW1vaXplX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmICghc2VsZi0+YmluKSB7CiAgICAgICAgIHBkYXRhWzBdID0gUFVUOwogICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHgpOworICAgICAgICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBpZHgpOwogICAgICAgICBsZW4gPSBzdHJsZW4ocGRhdGEpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHggPCAyNTYpIHsKKyAgICAgICAgaWYgKGlkeCA8IDI1NikgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBCSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKXg7CisgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKWlkeDsKICAgICAgICAgICAgIGxlbiA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoeCA8PSAweGZmZmZmZmZmTCkgeworICAgICAgICBlbHNlIGlmIChpZHggPD0gMHhmZmZmZmZmZkwpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gTE9OR19CSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKGlkeCAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gMjQpICYgMHhmZik7CiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTlBVVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotCiAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBsZW4pIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKDApIHsKLSAgZXJyb3I6Ci0gICAgICAgIHN0YXR1cyA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aGljaG1vZHVsZShQeU9iamVjdCAqZ2xvYmFsLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCitnZXRhdHRyaWJ1dGUoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIGludCBhbGxvd19xdWFsbmFtZSkgeworICAgIFB5T2JqZWN0ICpkb3R0ZWRfcGF0aDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9kb3QsICIuIik7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9sb2NhbHMsICI8bG9jYWxzPiIpOworCisgICAgZG90dGVkX3BhdGggPSBQeVVuaWNvZGVfU3BsaXQobmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfZG90KSwgLTEpOworICAgIGlmIChkb3R0ZWRfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBhc3NlcnQoUHlfU0laRShkb3R0ZWRfcGF0aCkgPj0gMSk7CisgICAgaWYgKCFhbGxvd19xdWFsbmFtZSAmJiBQeV9TSVpFKGRvdHRlZF9wYXRoKSA+IDEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBxdWFsaWZpZWQgYXR0cmlidXRlICVSIG9uICVSOyIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgcHJvdG9jb2xzID49IDQgdG8gZW5hYmxlIHN1cHBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihvYmopOworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKGRvdHRlZF9wYXRoKTsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdWJwYXRoID0gUHlMaXN0X0dFVF9JVEVNKGRvdHRlZF9wYXRoLCBpKTsKKyAgICAgICAgUHlPYmplY3QgKnRtcDsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5VW5pY29kZV9SaWNoQ29tcGFyZSgKKyAgICAgICAgICAgIHN1YnBhdGgsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xvY2FscyksIFB5X0VRKTsKKyAgICAgICAgaW50IGlzX2VxdWFsID0gKHJlc3VsdCA9PSBQeV9UcnVlKTsKKyAgICAgICAgYXNzZXJ0KFB5Qm9vbF9DaGVjayhyZXN1bHQpKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIGlmIChpc19lcXVhbCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdWJwYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBvYmogPSB0bXA7CisgICAgfQorICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3doaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKQogewotICAgIFB5X3NzaXplX3QgaSwgajsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm1vZHVsZV9zdHIgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbWFpbl9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKICAgICBQeU9iamVjdCAqbW9kdWxlc19kaWN0OwogICAgIFB5T2JqZWN0ICptb2R1bGU7CiAgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGksIGo7CisgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CisgICAgX1B5X0lERU5USUZJRVIobW9kdWxlcyk7CisgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOwogCi0gICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkgewotICAgICAgICBtb2R1bGVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbW9kdWxlX18iKTsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKKyAgICBtb2R1bGVfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZ2xvYmFsLCAmUHlJZF9fX21vZHVsZV9fKTsKKworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgbWFpbl9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgaWYgKG1haW5fc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtb2R1bGVfbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoZ2xvYmFsLCBtb2R1bGVfc3RyKTsKLQotICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAotICAgICAgIF9fbW9kdWxlX18gY2FuIGJlIE5vbmUuIElmIGl0IGlzIHNvLCB0aGVuIHNlYXJjaCBzeXMubW9kdWxlcwotICAgICAgIGZvciB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gICovCi0gICAgaWYgKG1vZHVsZV9uYW1lID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgZ290byBzZWFyY2g7Ci0gICAgfQotCi0gICAgaWYgKG1vZHVsZV9uYW1lKSB7Ci0gICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKLSAgICB9Ci0gICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBJbiBzb21lIHJhcmUgY2FzZXMgKGUuZy4sIGJvdW5kIG1ldGhvZHMgb2YgZXh0ZW5zaW9uIHR5cGVzKSwKKyAgICAgICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzIGZvcgorICAgICAgICAgICB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gKi8KKyAgICAgICAgaWYgKG1vZHVsZV9uYW1lICE9IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CisgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKKyAgICB9CisgICAgYXNzZXJ0KG1vZHVsZV9uYW1lID09IE5VTEwpOwogCi0gIHNlYXJjaDoKLSAgICBtb2R1bGVzX2RpY3QgPSBQeVN5c19HZXRPYmplY3QoIm1vZHVsZXMiKTsKLSAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpCisgICAgbW9kdWxlc19kaWN0ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX21vZHVsZXMpOworICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpID0gMDsKLSAgICBtb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgd2hpbGUgKChqID0gUHlEaWN0X05leHQobW9kdWxlc19kaWN0LCAmaSwgJm1vZHVsZV9uYW1lLCAmbW9kdWxlKSkpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChtb2R1bGVfbmFtZSwgbWFpbl9zdHIsIFB5X0VRKSA9PSAxKQorICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgbW9kdWxlX25hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbWFpbl9fKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9iaiA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIG9iaiA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBhbGxvd19xdWFsbmFtZSk7CiAgICAgICAgIGlmIChvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9iaiAhPSBnbG9iYWwpIHsKKyAgICAgICAgaWYgKG9iaiA9PSBnbG9iYWwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogICAgICAgICB9Ci0KICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qIElmIG5vIG1vZHVsZSBpcyBmb3VuZCwgdXNlIF9fbWFpbl9fLiAqLwotICAgIGlmICghaikgewotICAgICAgICBtb2R1bGVfbmFtZSA9IG1haW5fc3RyOwotICAgIH0KLQorICAgIG1vZHVsZV9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOwogICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CiAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogfQpAQCAtMTQyNCw3ICsxNjkxLDcgQEAKICAgICAgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7CiAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoUHlEaWN0X0dldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXkpKSB7CisgICAgICAgIGlmIChQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhc3QgbW9kZTogY2FuJ3QgcGlja2xlIGN5Y2xpYyBvYmplY3RzICIKQEAgLTE0MzMsNiArMTcwMCw5IEBACiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXksIFB5X05vbmUpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKQEAgLTE0NzIsNDYgKzE3NDIsNTggQEAKIHN0YXRpYyBpbnQKIHNhdmVfYm9vbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpidWZbMl0gPSB7IEZBTFNFLCBUUlVFIH07Ci0gICAgY29uc3QgY2hhciBsZW5bMl0gPSB7c2l6ZW9mKEZBTFNFKSAtIDEsIHNpemVvZihUUlVFKSAtIDF9OwotICAgIGludCBwID0gKG9iaiA9PSBQeV9UcnVlKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IHAgPyBORVdUUlVFIDogTkVXRkFMU0U7CisgICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IChvYmogPT0gUHlfVHJ1ZSkgPyBORVdUUlVFIDogTkVXRkFMU0U7CiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYm9vbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBlbHNlIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBidWZbcF0sIGxlbltwXSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogVGhlc2UgYXJlbid0IG9wY29kZXMgLS0gdGhleSdyZSB3YXlzIHRvIHBpY2tsZSBib29scyBiZWZvcmUgcHJvdG9jb2wgMgorICAgICAgICAgKiBzbyB0aGF0IHVucGlja2xlcnMgd3JpdHRlbiBiZWZvcmUgYm9vbHMgd2VyZSBpbnRyb2R1Y2VkIHVucGlja2xlIHRoZW0KKyAgICAgICAgICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCisgICAgICAgICAqIE5vdGUgdGhhdCBwcm90b2NvbCAyIGFkZGVkIGRpcmVjdCB3YXlzIHRvIHBpY2tsZSBib29scy4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKmJvb2xfc3RyID0gKG9iaiA9PSBQeV9UcnVlKSA/ICJJMDFcbiIgOiAiSTAwXG4iOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgYm9vbF9zdHIsIHN0cmxlbihib29sX3N0cikpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfaW50KFBpY2tsZXJPYmplY3QgKnNlbGYsIGxvbmcgeCkKK3NhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIGNoYXIgcGRhdGFbMzJdOwotICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKyAgICBQeU9iamVjdCAqcmVwciA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGxvbmcgdmFsOworICAgIGludCBzdGF0dXMgPSAwOwogCi0gICAgaWYgKCFzZWxmLT5iaW4KLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgfHwgeCA+IDB4N2ZmZmZmZmZMIHx8IHggPCAtMHg4MDAwMDAwMEwKLSNlbmRpZgotICAgICAgICApIHsKLSAgICAgICAgLyogVGV4dC1tb2RlIHBpY2tsZSwgb3IgbG9uZyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgNC1ieXRlCi0gICAgICAgICAqIHNpZ25lZCBCSU5JTlQgZm9ybWF0OiAgc3RvcmUgYXMgYSBzdHJpbmcuCi0gICAgICAgICAqLwotICAgICAgICBwZGF0YVswXSA9IExPTkc7ICAgICAgICAvKiB1c2UgTE9ORyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwaWNrbGUucHkgKi8KLSAgICAgICAgUHlPU19zbnByaW50ZihwZGF0YSArIDEsIHNpemVvZihwZGF0YSkgLSAxLCAiJWxkTFxuIiwgeCk7Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgc3RybGVuKHBkYXRhKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIGNvbnN0IGNoYXIgbG9uZ19vcCA9IExPTkc7CisKKyAgICB2YWw9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogb3V0IG9mIHJhbmdlIGZvciBpbnQgcGlja2xpbmcgKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIEJpbmFyeSBwaWNrbGUgYW5kIHggZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50LiAqLwotICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICBlbHNlIGlmIChzZWxmLT5iaW4gJiYKKyAgICAgICAgICAgICAoc2l6ZW9mKGxvbmcpIDw9IDQgfHwKKyAgICAgICAgICAgICAgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gKC0weDdmZmZmZmZmTCAtIDEpKSkpIHsKKyAgICAgICAgLyogcmVzdWx0IGZpdHMgaW4gYSBzaWduZWQgNC1ieXRlIGludGVnZXIuIAorCisgICAgICAgICAgIE5vdGU6IHdlIGNhbid0IHVzZSAtMHg4MDAwMDAwMEwgaW4gdGhlIGFib3ZlIGNvbmRpdGlvbiBiZWNhdXNlIHNvbWUKKyAgICAgICAgICAgY29tcGlsZXJzIChlLmcuLCBNU1ZDKSB3aWxsIHByb21vdGUgMHg4MDAwMDAwMEwgdG8gYW4gdW5zaWduZWQgdHlwZQorICAgICAgICAgICBiZWZvcmUgYXBwbHlpbmcgdGhlIHVuYXJ5IG1pbnVzIHdoZW4gc2l6ZW9mKGxvbmcpIDw9IDQuIFRoZQorICAgICAgICAgICByZXN1bHRpbmcgdmFsdWUgc3RheXMgdW5zaWduZWQgd2hpY2ggaXMgY29tbW9ubHkgbm90IHdoYXQgd2Ugd2FudCwKKyAgICAgICAgICAgc28gTVNWQyBoYXBwaWx5IHdhcm5zIHVzIGFib3V0IGl0LiAgSG93ZXZlciwgdGhhdCByZXN1bHQgd291bGQgaGF2ZQorICAgICAgICAgICBiZWVuIGZpbmUgYmVjYXVzZSB3ZSBndWFyZCBmb3Igc2l6ZW9mKGxvbmcpIDw9IDQgd2hpY2ggdHVybnMgdGhlCisgICAgICAgICAgIGNvbmRpdGlvbiB0cnVlIGluIHRoYXQgcGFydGljdWxhciBjYXNlLiAqLworICAgICAgICBjaGFyIHBkYXRhWzMyXTsKKyAgICAgICAgUHlfc3NpemVfdCBsZW4gPSAwOworCisgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHZhbCAmIDB4ZmYpOworICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDgpICYgMHhmZik7CisgICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWwgPj4gMjQpICYgMHhmZik7CiAKICAgICAgICAgaWYgKChwZGF0YVs0XSA9PSAwKSAmJiAocGRhdGFbM10gPT0gMCkpIHsKICAgICAgICAgICAgIGlmIChwZGF0YVsyXSA9PSAwKSB7CkBAIC0xNTMwLDMxICsxODEyLDEwIEBACiAKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBsZW4pIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2F2ZV9sb25nKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlcHIgPSBOVUxMOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICBsb25nIHZhbCA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKLSAgICBpbnQgc3RhdHVzID0gMDsKLQotICAgIGNvbnN0IGNoYXIgbG9uZ19vcCA9IExPTkc7Ci0KLSAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgLyogb3V0IG9mIHJhbmdlIGZvciBpbnQgcGlja2xpbmcgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICB9Ci0gICAgZWxzZQotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICBpZiAodmFsIDw9IDB4N2ZmZmZmZmZMICYmIHZhbCA+PSAtMHg4MDAwMDAwMEwpCi0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBzYXZlX2ludChzZWxmLCB2YWwpOwotCiAgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKICAgICAgICAgLyogTGluZWFyLXRpbWUgcGlja2xpbmcuICovCiAgICAgICAgIHNpemVfdCBuYml0czsKQEAgLTE3MTksNDAgKzE5ODAsMjUgQEAKICAgICAgICAgICAgUHl0aG9uIDIgKmFuZCogdGhlIGFwcHJvcHJpYXRlICdieXRlcycgb2JqZWN0IHdoZW4gdW5waWNrbGVkCiAgICAgICAgICAgIHVzaW5nIFB5dGhvbiAzLiBBZ2FpbiB0aGlzIGlzIGEgaGFjayBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzCiAgICAgICAgICAgIHdpdGggbmV3ZXIgcHJvdG9jb2xzLiAqLwotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKmNvZGVjc19lbmNvZGUgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlID0gTlVMTDsKICAgICAgICAgaW50IHN0YXR1czsKIAotICAgICAgICBpZiAoY29kZWNzX2VuY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNzX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7Ci0gICAgICAgICAgICBpZiAoY29kZWNzX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29kZWNzX2VuY29kZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29kZWNzX21vZHVsZSwgImVuY29kZSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKGNvZGVjc19tb2R1bGUpOwotICAgICAgICAgICAgaWYgKGNvZGVjc19lbmNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iaikgPT0gMCkgewogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oKSkiLCAoUHlPYmplY3QqKSZQeUJ5dGVzX1R5cGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpsYXRpbjEgPSBOVUxMOworICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgICAgICAgICAgUHlPYmplY3QgKnVuaWNvZGVfc3RyID0KICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0Iik7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihsYXRpbjEpOworCiAgICAgICAgICAgICBpZiAodW5pY29kZV9zdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAobGF0aW4xID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygibGF0aW4xIik7Ci0gICAgICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsIGxhdGluMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3NfZW5jb2RlLCB1bmljb2RlX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbGF0aW4xKSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZV9zdHIpOwogICAgICAgICB9CiAKQEAgLTE3NjYsMTQgKzIwMTIsMTQgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgY2hhciBoZWFkZXJbNV07CisgICAgICAgIGNoYXIgaGVhZGVyWzldOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShvYmopOwogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgaWYgKHNpemUgPCAyNTYpIHsKKyAgICAgICAgaWYgKHNpemUgPD0gMHhmZikgewogICAgICAgICAgICAgaGVhZGVyWzBdID0gU0hPUlRfQklOQllURVM7CiAgICAgICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcilzaXplOwogICAgICAgICAgICAgbGVuID0gMjsKQEAgLTE3ODYsNiArMjAzMiwxMSBAQAogICAgICAgICAgICAgaGVhZGVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwogICAgICAgICAgICAgbGVuID0gNTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBoZWFkZXJbMF0gPSBCSU5CWVRFUzg7CisgICAgICAgICAgICBfd3JpdGVfc2l6ZTY0KGhlYWRlciArIDEsIHNpemUpOworICAgICAgICAgICAgbGVuID0gODsKKyAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgYnl0ZXMgb2JqZWN0IGxhcmdlciB0aGFuIDQgR2lCIik7CkBAIC0xODczLDYzICsyMTI0LDEwNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3dyaXRlX3V0ZjgoUGlja2xlck9iamVjdCAqc2VsZiwgY2hhciAqZGF0YSwgUHlfc3NpemVfdCBzaXplKQogewotICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgY2hhciBoZWFkZXJbOV07CisgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpZiAoc2VsZi0+YmluKSB7Ci0gICAgICAgIGNoYXIgcGRhdGFbNV07Ci0KLSAgICAgICAgZW5jb2RlZCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcob2JqLCAidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKHNpemUgPiAweGZmZmZmZmZmTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNCBHaUIiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7ICAgICAgICAgIC8qIHN0cmluZyB0b28gbGFyZ2UgKi8KLSAgICAgICAgfQotCi0gICAgICAgIHBkYXRhWzBdID0gQklOVU5JQ09ERTsKLSAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7Ci0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCA1KSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoc2l6ZSA8PSAweGZmICYmIHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaGVhZGVyWzBdID0gU0hPUlRfQklOVU5JQ09ERTsKKyAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKKyAgICAgICAgbGVuID0gMjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8PSAweGZmZmZmZmZmVUwpIHsKKyAgICAgICAgaGVhZGVyWzBdID0gQklOVU5JQ09ERTsKKyAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKKyAgICAgICAgaGVhZGVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7CisgICAgICAgIGhlYWRlclszXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgaGVhZGVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBsZW4gPSA1OworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU4OworICAgICAgICBfd3JpdGVfc2l6ZTY0KGhlYWRlciArIDEsIHNpemUpOworICAgICAgICBsZW4gPSA5OwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIHN0cmluZyBsYXJnZXIgdGhhbiA0R2lCIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCBsZW4pIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBkYXRhLCBzaXplKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZV91bmljb2RlX2JpbmFyeShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICplbmNvZGVkID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgY2hhciAqZGF0YTsKKyAgICBpbnQgcjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKG9iaiwgJnNpemUpOworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIHJldHVybiB3cml0ZV91dGY4KHNlbGYsIGRhdGEsIHNpemUpOworCisgICAgLyogSXNzdWUgIzgzODM6IGZvciBzdHJpbmdzIHdpdGggbG9uZSBzdXJyb2dhdGVzLCBmYWxsYmFjayBvbiB0aGUKKyAgICAgICAic3Vycm9nYXRlcGFzcyIgZXJyb3IgaGFuZGxlci4gKi8KKyAgICBQeUVycl9DbGVhcigpOworICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKKyAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByID0gd3JpdGVfdXRmOChzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfdW5pY29kZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGlmIChzZWxmLT5iaW4pIHsKKyAgICAgICAgaWYgKHdyaXRlX3VuaWNvZGVfYmluYXJ5KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICAgICAgY29uc3QgY2hhciB1bmljb2RlX29wID0gVU5JQ09ERTsKIAogICAgICAgICBlbmNvZGVkID0gcmF3X3VuaWNvZGVfZXNjYXBlKG9iaik7CiAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZ1bmljb2RlX29wLCAxKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCiAgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpOwotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJldHVybiAtMTsKIAotICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICByZXR1cm4gMDsKLQotICBlcnJvcjoKLSAgICBQeV9YREVDUkVGKGVuY29kZWQpOwotICAgIHJldHVybiAtMTsKIH0KIAogLyogQSBoZWxwZXIgZm9yIHNhdmVfdHVwbGUuICBQdXNoIHRoZSBsZW4gZWxlbWVudHMgaW4gdHVwbGUgdCBvbiB0aGUgc3RhY2suICovCkBAIC0yNTU3LDM0ICsyODUxLDI1MiBAQAogfQogCiBzdGF0aWMgaW50CitzYXZlX3NldChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICppdGVtOworICAgIGludCBpOworICAgIFB5X3NzaXplX3Qgc2V0X3NpemUsIHBwb3MgPSAwOworICAgIFB5X2hhc2hfdCBoYXNoOworCisgICAgY29uc3QgY2hhciBlbXB0eV9zZXRfb3AgPSBFTVBUWV9TRVQ7CisgICAgY29uc3QgY2hhciBtYXJrX29wID0gTUFSSzsKKyAgICBjb25zdCBjaGFyIGFkZGl0ZW1zX29wID0gQURESVRFTVM7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5U2V0X1R5cGUsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgaWYgKHJlZHVjZV92YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgLyogc2F2ZV9yZWR1Y2UoKSB3aWxsIG1lbW9pemUgdGhlIG9iamVjdCBhdXRvbWF0aWNhbGx5LiAqLworICAgICAgICBzdGF0dXMgPSBzYXZlX3JlZHVjZShzZWxmLCByZWR1Y2VfdmFsdWUsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihyZWR1Y2VfdmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZW1wdHlfc2V0X29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2V0X3NpemUgPSBQeVNldF9HRVRfU0laRShvYmopOworICAgIGlmIChzZXRfc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIC8qIFdyaXRlIGluIGJhdGNoZXMgb2YgQkFUQ0hTSVpFLiAqLworICAgIGRvIHsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShvYmosICZwcG9zLCAmaXRlbSwgJmhhc2gpKSB7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCsraSA9PSBCQVRDSFNJWkUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZhZGRpdGVtc19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlTZXRfR0VUX1NJWkUob2JqKSAhPSBzZXRfc2l6ZSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAic2V0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChpID09IEJBVENIU0laRSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2F2ZV9mcm96ZW5zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlcjsKKworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBmcm96ZW5zZXRfb3AgPSBGUk9aRU5TRVQ7CisKKyAgICBpZiAoc2VsZi0+ZmFzdCAmJiAhZmFzdF9zYXZlX2VudGVyKHNlbGYsIG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChzZWxmLT5wcm90byA8IDQpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9MaXN0KG9iaik7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oTykpIiwgKFB5T2JqZWN0KikmUHlGcm96ZW5TZXRfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKKyAgICBpZiAoaXRlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yICg7OykgeworICAgICAgICBQeU9iamVjdCAqaXRlbTsKKworICAgICAgICBpdGVtID0gUHlJdGVyX05leHQoaXRlcik7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzYXZlKHNlbGYsIGl0ZW0sIDApIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisgICAgUHlfREVDUkVGKGl0ZXIpOworCisgICAgLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4gKi8KKyAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKKyAgICAgICAgY29uc3QgY2hhciBwb3BfbWFya19vcCA9IFBPUF9NQVJLOworCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmcG9wX21hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1lbW9fZ2V0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmZyb3plbnNldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZml4X2ltcG9ydHMoUHlPYmplY3QgKiptb2R1bGVfbmFtZSwgUHlPYmplY3QgKipnbG9iYWxfbmFtZSkKK3sKKyAgICBQeU9iamVjdCAqa2V5OworICAgIFB5T2JqZWN0ICppdGVtOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5uYW1lX21hcHBpbmdfM3RvMiwga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgICBQeU9iamVjdCAqZml4ZWRfbW9kdWxlX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9nbG9iYWxfbmFtZTsKKworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soaXRlbSkgfHwgUHlUdXBsZV9HRVRfU0laRShpdGVtKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgMi10dXBsZXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGZpeGVkX21vZHVsZV9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAwKTsKKyAgICAgICAgZml4ZWRfZ2xvYmFsX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDEpOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaXhlZF9tb2R1bGVfbmFtZSkgfHwKKyAgICAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2soZml4ZWRfZ2xvYmFsX25hbWUpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgcGFpcnMgb2Ygc3RyLCBub3QgKCUuMjAwcywgJS4yMDBzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShmaXhlZF9tb2R1bGVfbmFtZSktPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShmaXhlZF9nbG9iYWxfbmFtZSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgUHlfQ0xFQVIoKm1vZHVsZV9uYW1lKTsKKyAgICAgICAgUHlfQ0xFQVIoKmdsb2JhbF9uYW1lKTsKKyAgICAgICAgUHlfSU5DUkVGKGZpeGVkX21vZHVsZV9uYW1lKTsKKyAgICAgICAgUHlfSU5DUkVGKGZpeGVkX2dsb2JhbF9uYW1lKTsKKyAgICAgICAgKm1vZHVsZV9uYW1lID0gZml4ZWRfbW9kdWxlX25hbWU7CisgICAgICAgICpnbG9iYWxfbmFtZSA9IGZpeGVkX2dsb2JhbF9uYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIsICptb2R1bGVfbmFtZSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHN0cmluZ3MsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgKm1vZHVsZV9uYW1lID0gaXRlbTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIHNhdmVfZ2xvYmFsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbmFtZV9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2xzOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19xdWFsbmFtZV9fKTsKIAogICAgIGNvbnN0IGNoYXIgZ2xvYmFsX29wID0gR0xPQkFMOwogCi0gICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQogICAgIGlmIChuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKICAgICAgICAgZ2xvYmFsX25hbWUgPSBuYW1lOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsX25hbWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZV9zdHIpOwotICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3F1YWxuYW1lX18pOworICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUpOworICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTI1OTgsMjEgKzMxMTAsMjEgQEAKICAgICAgICBleHRyYSBwYXJhbWV0ZXJzIG9mIF9faW1wb3J0X18gdG8gZml4IHRoYXQuICovCiAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0KG1vZHVsZV9uYW1lKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGltcG9ydCBvZiBtb2R1bGUgJVIgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgIGNscyA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTLiVTIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGF0dHJpYnV0ZSBsb29rdXAgJVMgb24gJVMgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIG9iaiwgZ2xvYmFsX25hbWUsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNscyAhPSBvYmopIHsKICAgICAgICAgUHlfREVDUkVGKGNscyk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJVMuJVMiLAogICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjYyMywxOCArMzEzNSwyNyBAQAogICAgICAgICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnksIGFuZCBpZgogICAgICAgICAgKiBzbyBnZW5lcmF0ZSBhbiBFWFQgb3Bjb2RlLgogICAgICAgICAgKi8KKyAgICAgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9rZXk7CiAgICAgICAgIFB5T2JqZWN0ICpjb2RlX29iajsgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBQeXRob24gb2JqZWN0ICovCiAgICAgICAgIGxvbmcgY29kZTsgICAgICAgICAgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBDIHZhbHVlICovCiAgICAgICAgIGNoYXIgcGRhdGFbNV07CiAgICAgICAgIFB5X3NzaXplX3QgbjsKIAotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMCwgbW9kdWxlX25hbWUpOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMSwgZ2xvYmFsX25hbWUpOwotICAgICAgICBjb2RlX29iaiA9IFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbl9yZWdpc3RyeSwgdHdvX3R1cGxlKTsKKyAgICAgICAgZXh0ZW5zaW9uX2tleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBpZiAoZXh0ZW5zaW9uX2tleSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGNvZGVfb2JqID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25fa2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGV4dGVuc2lvbl9rZXkpOwogICAgICAgICAvKiBUaGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnkuCiAgICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IGNvZGUgcGF0aC4gKi8KLSAgICAgICAgaWYgKGNvZGVfb2JqID09IE5VTEwpCisgICAgICAgIGlmIChjb2RlX29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGdlbl9nbG9iYWw7CisgICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IHBpY2tsZS5weSBkb2Vzbid0IGNoZWNrIG5laXRoZXIgdGhlIHR5cGUsIG5vciB0aGUgcmFuZ2UKICAgICAgICAgICAgb2YgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBleHRlbnNpb25fcmVnaXN0cnkuIEl0IHNob3VsZCBmb3IKQEAgLTI2NDIsNyArMzE2Myw3IEBACiAKICAgICAgICAgLyogVmVyaWZ5IGNvZGVfb2JqIGhhcyB0aGUgcmlnaHQgdHlwZSBhbmQgdmFsdWUuICovCiAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGNvZGVfb2JqKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJVIgaXNuJ3QgYW4gaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCBjb2RlX29iaik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjY1MCw5ICszMTcxLDggQEAKICAgICAgICAgY29kZSA9IFB5TG9uZ19BU19MT05HKGNvZGVfb2JqKTsKICAgICAgICAgaWYgKGNvZGUgPD0gMCB8fCBjb2RlID4gMHg3ZmZmZmZmZkwpIHsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJWxkIGlzIG91dCBvZiByYW5nZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgY29kZSk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAiQ2FuJ3QgcGlja2xlICVSOiBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQgaXMgb3V0IG9mIHJhbmdlIiwgb2JqLCBjb2RlKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIApAQCAtMjY4MSwxMjAgKzMyMDEsODQgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQotICAgICAgICAgICBwcm90b2NvbCA8PSAyLCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQotICAgICAgICAgICBleHRlbnNpb24gcmVnaXN0cnkuICovCi0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOwotICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwotCiAgIGdlbl9nbG9iYWw6Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZ2xvYmFsX29wLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgY29uc3QgY2hhciBzdGFja19nbG9iYWxfb3AgPSBTVEFDS19HTE9CQUw7CiAKLSAgICAgICAgLyogU2luY2UgUHl0aG9uIDMuMCBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGlkZW50aWZpZXJzLCB3ZSBlbmNvZGUgYm90aAotICAgICAgICAgICB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28gb25seSB3aGVuCi0gICAgICAgICAgIHdlIGFyZSB1c2luZyB0aGUgcGlja2xlIHByb3RvY29sIG5ld2VyIHRoYW4gdmVyc2lvbiAzLiBUaGlzIGlzIHRvCi0gICAgICAgICAgIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVW5waWNrbGVyIHJ1bm5pbmcgb24gUHl0aG9uIDIueC4gKi8KLSAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDMpIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmc7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBtb2R1bGVfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBnbG9iYWxfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmc3RhY2tfZ2xvYmFsX29wLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOwotICAgICAgICB9CisgICAgICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQorICAgICAgICAgICAgICAgcHJvdG9jb2wgPCA0LCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQorICAgICAgICAgICAgICAgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqLworICAgICAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisgICAgICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwogCi0gICAgICAgIC8qIEZvciBwcm90b2NvbCA8IDMgYW5kIGlmIHRoZSB1c2VyIGRpZG4ndCByZXF1ZXN0IGFnYWluc3QgZG9pbmcgc28sCi0gICAgICAgICAgIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KLSAgICAgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07Ci0KLSAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZnbG9iYWxfb3AsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18zdG8yLCBrZXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAyLXR1cGxlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKworICAgICAgICAgICAgLyogRm9yIHByb3RvY29sIDwgMyBhbmQgaWYgdGhlIHVzZXIgZGlkbid0IHJlcXVlc3QgYWdhaW5zdCBkb2luZworICAgICAgICAgICAgICAgc28sIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA8IDMgJiYgc2VsZi0+Zml4X2ltcG9ydHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZml4X2ltcG9ydHMoJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAwKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobW9kdWxlX25hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2soZ2xvYmFsX25hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgcGFpcnMgb2Ygc3RyLCBub3QgKCUuMjAwcywgJS4yMDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1vZHVsZV9uYW1lKS0+dHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihpbXBvcnRfbWFwcGluZ18zdG8yLCBtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBpdGVtOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZQorICAgICAgICAgICAgICAgYm90aCB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28KKyAgICAgICAgICAgICAgIG9ubHkgd2hlbiB3ZSBhcmUgdXNpbmcgdGhlIHBpY2tsZSBwcm90b2NvbCBuZXdlciB0aGFuIHZlcnNpb24KKyAgICAgICAgICAgICAgIDMuIFRoaXMgaXMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBVbnBpY2tsZXIgcnVubmluZworICAgICAgICAgICAgICAgb24gUHl0aG9uIDIueC4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA9PSAzKSB7CisgICAgICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIHNlbGYtPnByb3RvKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLwotICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgZ2xvYmFsIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLworICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBnbG9iYWwgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAgICAgLyogTWVtb2l6ZSB0aGUgb2JqZWN0LiAqLwogICAgICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjgxMiwzMCArMzI5Niw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfZWxsaXBzaXMoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Ci0gICAgaW50IHJlczsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXMgPSBzYXZlX2dsb2JhbChzZWxmLCBQeV9FbGxpcHNpcywgc3RyKTsKLSAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1zYXZlX25vdGltcGxlbWVudGVkKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfTm90SW1wbGVtZW50ZWQsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAogc2F2ZV9wZXJzKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmdW5jKQogewogICAgIFB5T2JqZWN0ICpwaWQgPSBOVUxMOwpAQCAtMjg0NSw3ICszMzA1LDcgQEAKICAgICBjb25zdCBjaGFyIGJpbnBlcnNpZF9vcCA9IEJJTlBFUlNJRDsKIAogICAgIFB5X0lOQ1JFRihvYmopOwotICAgIHBpZCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGZ1bmMsIG9iaik7CisgICAgcGlkID0gX1BpY2tsZV9GYXN0Q2FsbChmdW5jLCBvYmopOwogICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0yODkzLDE0ICszMzUzLDkgQEAKIGdldF9jbGFzcyhQeU9iamVjdCAqb2JqKQogewogICAgIFB5T2JqZWN0ICpjbHM7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzdHJfY2xhc3M7CisgICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKIAotICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkgewotICAgICAgICBzdHJfY2xhc3MgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgc3RyX2NsYXNzKTsKKyAgICBjbHMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19jbGFzc19fKTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjkyMiwxNyArMzM3NywxOCBAQAogICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmxpc3RpdGVtcyA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKmRpY3RpdGVtcyA9IFB5X05vbmU7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKLQotICAgIGludCB1c2VfbmV3b2JqID0gc2VsZi0+cHJvdG8gPj0gMjsKKyAgICBpbnQgdXNlX25ld29iaiA9IDAsIHVzZV9uZXdvYmpfZXggPSAwOwogCiAgICAgY29uc3QgY2hhciByZWR1Y2Vfb3AgPSBSRURVQ0U7CiAgICAgY29uc3QgY2hhciBidWlsZF9vcCA9IEJVSUxEOwogICAgIGNvbnN0IGNoYXIgbmV3b2JqX29wID0gTkVXT0JKOworICAgIGNvbnN0IGNoYXIgbmV3b2JqX2V4X29wID0gTkVXT0JKX0VYOwogCiAgICAgc2l6ZSA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKICAgICBpZiAoc2l6ZSA8IDIgfHwgc2l6ZSA+IDUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJ0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgInR1cGxlIHJldHVybmVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJfX3JlZHVjZV9fIG11c3QgY29udGFpbiAyIHRocm91Z2ggNSBlbGVtZW50cyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjk0MiwxMiArMzM5OCwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2FsbGFibGUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGNhbGxhYmxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3R1cCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhIHR1cGxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yOTU4LDcgKzM0MTQsNyBAQAogICAgIGlmIChsaXN0aXRlbXMgPT0gUHlfTm9uZSkKICAgICAgICAgbGlzdGl0ZW1zID0gTlVMTDsKICAgICBlbHNlIGlmICghUHlJdGVyX0NoZWNrKGxpc3RpdGVtcykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhbiBpdGVyYXRvciwgbm90ICVzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobGlzdGl0ZW1zKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI5NjcsNDAgKzM0MjMsODEgQEAKICAgICBpZiAoZGljdGl0ZW1zID09IFB5X05vbmUpCiAgICAgICAgIGRpY3RpdGVtcyA9IE5VTEw7CiAgICAgZWxzZSBpZiAoIVB5SXRlcl9DaGVjayhkaWN0aXRlbXMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAiZmlmdGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmaWZ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGFuIGl0ZXJhdG9yLCBub3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShkaWN0aXRlbXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIFByb3RvY29sIDIgc3BlY2lhbCBjYXNlOiBpZiBjYWxsYWJsZSdzIG5hbWUgaXMgX19uZXdvYmpfXywgdXNlCi0gICAgICAgTkVXT0JKLiAqLwotICAgIGlmICh1c2VfbmV3b2JqKSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3b2JqX3N0ciA9IE5VTEwsICpuYW1lX3N0ciA9IE5VTEw7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKICAgICAgICAgUHlPYmplY3QgKm5hbWU7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIAotICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXdvYmpfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmV3b2JqX18iKTsKLSAgICAgICAgICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMIHx8IG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoY2FsbGFibGUsIG5hbWVfc3RyKTsKKyAgICAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2FsbGFibGUsICZQeUlkX19fbmFtZV9fKTsKICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgdXNlX25ld29iaiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX2V4X18pOworICAgICAgICAgICAgdXNlX25ld29ial9leCA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9leF9fKSkgPT0gMDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwogICAgICAgICAgICAgdXNlX25ld29iaiA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKG5hbWUsIG5ld29ial9zdHIpID09IDA7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX18pKSA9PSAwOwogICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh1c2VfbmV3b2JqKSB7CisKKyAgICBpZiAodXNlX25ld29ial9leCkgeworICAgICAgICBQeU9iamVjdCAqY2xzOworICAgICAgICBQeU9iamVjdCAqYXJnczsKKyAgICAgICAgUHlPYmplY3QgKmt3YXJnczsKKworICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApICE9IDMpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHRoZSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4YWN0bHkgMywgbm90ICV6ZCIsIFB5X1NJWkUoYXJndHVwKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CisgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgY2xhc3MsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGNscyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMSk7CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgdHVwbGUsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBrd2FyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMik7CisgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKGt3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUoa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2F2ZShzZWxmLCBjbHMsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIHNhdmUoc2VsZiwga3dhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZuZXdvYmpfZXhfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHVzZV9uZXdvYmopIHsKICAgICAgICAgUHlPYmplY3QgKmNsczsKICAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3R1cDsKICAgICAgICAgUHlPYmplY3QgKm9ial9jbGFzczsKQEAgLTMwMDgsMTMgKzM1MDUsMTMgQEAKIAogICAgICAgICAvKiBTYW5pdHkgY2hlY2tzLiAqLwogICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApIDwgMSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJfX25ld29ial9fIGFyZ2xpc3QgaXMgZW1wdHkiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgIl9fbmV3b2JqX18gYXJnbGlzdCBpcyBlbXB0eSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgY2xzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDApOwogICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX25ld29ial9fIGFyZ3MgaXMgbm90IGEgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0zMDI0LDcgKzM1MjEsNyBAQAogICAgICAgICAgICAgcCA9IG9ial9jbGFzcyAhPSBjbHM7ICAgIC8qIHRydWUgaWZmIGEgcHJvYmxlbSAqLwogICAgICAgICAgICAgUHlfREVDUkVGKG9ial9jbGFzcyk7CiAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19uZXdvYmpfXyBhcmdzIGhhcyB0aGUgd3JvbmcgY2xhc3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC0zMDg0LDggKzM1ODEsMjMgQEAKICAgICAgICB0aGUgY2FsbGVyIGRvIG5vdCB3YW50IHRvIG1lbW9pemUgdGhlIG9iamVjdC4gTm90IHBhcnRpY3VsYXJseSB1c2VmdWwsCiAgICAgICAgYnV0IHRoYXQgaXMgdG8gbWltaWMgdGhlIGJlaGF2aW9yIHNhdmVfcmVkdWNlKCkgaW4gcGlja2xlLnB5IHdoZW4KICAgICAgICBvYmogaXMgTm9uZS4gKi8KLSAgICBpZiAob2JqICYmIG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG9iaiAhPSBOVUxMKSB7CisgICAgICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4gKi8KKyAgICAgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIHBvcF9vcCA9IFBPUDsKKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwb3Bfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAobGlzdGl0ZW1zICYmIGJhdGNoX2xpc3Qoc2VsZiwgbGlzdGl0ZW1zKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTMxMTAsNiArMzYyMiw5IEBACiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgaW50IHN0YXR1cyA9IDA7CiAKKyAgICBpZiAoX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMzEzOCwxNCArMzY1Myw2IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbm9uZShzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQotICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9FbGxpcHNpcykgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X05vdEltcGxlbWVudGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KICAgICBlbHNlIGlmIChvYmogPT0gUHlfRmFsc2UgfHwgb2JqID09IFB5X1RydWUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ib29sKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMxODAsNiArMzY4NywxNCBAQAogICAgICAgICBzdGF0dXMgPSBzYXZlX2RpY3Qoc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeVNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkgeworICAgICAgICBzdGF0dXMgPSBzYXZlX2Zyb3plbnNldChzZWxmLCBvYmopOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5TGlzdF9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbGlzdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC0zMTk0LDE2ICszNzA5LDYgQEAKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGdW5jdGlvbl9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUGlja2xlRXJyb3IpKSB7Ci0gICAgICAgICAgICAvKiBmYWxsIGJhY2sgdG8gcmVkdWNlICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5Q0Z1bmN0aW9uX1R5cGUpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIApAQCAtMzIxNCwxMiArMzcxOSwyMiBAQAogICAgICAqIF9fcmVkdWNlX2V4X18gbWV0aG9kLCBvciB0aGUgb2JqZWN0J3MgX19yZWR1Y2VfXyBtZXRob2QuCiAgICAgICovCiAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpIHsKLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbShkaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7Ci0gICAgICAgIC8qIFB5RGljdF9HZXRJdGVtKCkgdW5saWtlIFB5T2JqZWN0X0dldEl0ZW0oKSBhbmQKLSAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0cigpIHJldHVybnMgYSBib3Jyb3dlZCByZWYgKi8KLSAgICAgICAgUHlfWElOQ1JFRihyZWR1Y2VfZnVuYyk7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+ZGlzcGF0Y2hfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIGlmIChyZWR1Y2VfZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcigpIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UuCisgICAgICAgICAgICAgICBJbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0SXRlbSBhbmQgX1B5T2JqZWN0X0dldEF0dHJJZCB1c2VkIGJlbG93LiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHJlZHVjZV9mdW5jKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXR5cGUpOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0zMjI5LDI1ICszNzQ0LDE2IEBACiAgICAgfQogICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihvYmopOwotICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgb2JqKTsKKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZV9GYXN0Q2FsbChyZWR1Y2VfZnVuYywgb2JqKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlUeXBlX0lzU3VidHlwZSh0eXBlLCAmUHlUeXBlX1R5cGUpKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX3N0ciA9IE5VTEw7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX2V4X3N0ciA9IE5VTEw7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX18pOworICAgICAgICBfUHlfSURFTlRJRklFUihfX3JlZHVjZV9leF9fKTsKIAotICAgICAgICAvKiBDYWNoZSB0aGUgbmFtZSBvZiB0aGUgcmVkdWNlIG1ldGhvZHMuICovCi0gICAgICAgIGlmIChyZWR1Y2Vfc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlZHVjZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yZWR1Y2VfXyIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgcmVkdWNlX2V4X3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9leF9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX2V4X3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IElmIHRoZSBfX3JlZHVjZV9fIG1ldGhvZCBpcyBkZWZpbmVkLCBfX3JlZHVjZV9leF9fIGlzCiAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBfX3JlZHVjZV9fLiBXaGlsZSB0aGlzIGlzIGNvbnZlbmllbnQsIHRoaXMKQEAgLTMyNTgsMjYgKzM3NjQsMzQgQEAKICAgICAgICAgICAgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBjaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KIAogICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZC4gKi8KLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgcmVkdWNlX2V4X3N0cik7CisgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX2V4X18pOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICAgICAgcHJvdG8gPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgaWYgKHByb3RvICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgcHJvdG8pOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVfRmFzdENhbGwocmVkdWNlX2Z1bmMsIHByb3RvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCi0gICAgICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2Vfc3RyKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlPYmplY3RfQ2FsbChyZWR1Y2VfZnVuYywgZW1wdHlfdHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJjYW4ndCBwaWNrbGUgJyUuMjAwcycgb2JqZWN0OiAlUiIsCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLworICAgICAgICAgICAgcmVkdWNlX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19yZWR1Y2VfXyk7CisgICAgICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5T2JqZWN0X0NhbGwocmVkdWNlX2Z1bmMsIGVtcHR5X3R1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVtcHR5X3R1cGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAnJS4yMDBzJyBvYmplY3Q6ICVSIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgb2JqKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQpAQCAtMzI5Myw3ICszODA3LDggQEAKICAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVkdWNlX3ZhbHVlKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19yZWR1Y2VfXyBtdXN0IHJldHVybiBhIHN0cmluZyBvciB0dXBsZSIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTMzMDUsNiArMzgyMCw3IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KICAgZG9uZToKKwogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX2Z1bmMpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX3ZhbHVlKTsKQEAgLTMzMjUsNiArMzg0MSw4IEBACiAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKXNlbGYtPnByb3RvOwogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCAyKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KQorICAgICAgICAgICAgc2VsZi0+ZnJhbWluZyA9IDE7CiAgICAgfQogCiAgICAgaWYgKHNhdmUoc2VsZiwgb2JqLCAwKSA8IDAgfHwKQEAgLTMzMzQsMTYgKzM4NTIsMzUgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfY2xlYXJfbWVtb19kb2MsCi0iY2xlYXJfbWVtbygpIC0+IE5vbmUuIENsZWFycyB0aGUgcGlja2xlcidzIFwibWVtb1wiLiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5QaWNrbGVyLmNsZWFyX21lbW8KKworICBzZWxmOiBQaWNrbGVyT2JqZWN0CisKK0NsZWFycyB0aGUgcGlja2xlcidzICJtZW1vIi4KKworVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlCitwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZQorcGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuCityZS11c2luZyBwaWNrbGVycy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX19kb2NfXywKKyJjbGVhcl9tZW1vKClcbiIKKyJDbGVhcnMgdGhlIHBpY2tsZXJcJ3MgXCJtZW1vXCIuXG4iCiAiXG4iCiAiVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlXG4iCiAicGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmVcbiIKICJwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW5cbiIKICJyZS11c2luZyBwaWNrbGVycy4iKTsKIAorI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtbywgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QaWNrbGVyX2NsZWFyX21lbW8oUGlja2xlck9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDljMzJiZTdlN2ExN2ZmODJhODFhYWU0MDlkMGQ0ZjQ2OTAzM2E1YjJdKi8KIHsKICAgICBpZiAoc2VsZi0+bWVtbykKICAgICAgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZi0+bWVtbyk7CkBAIC0zMzUxLDI3ICszODg4LDM5IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2R1bXBfZG9jLAotImR1bXAob2JqKSAtPiBOb25lLiBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIik7CisvKltjbGluaWNdCisKK19waWNrbGUuUGlja2xlci5kdW1wCisKKyAgc2VsZjogUGlja2xlck9iamVjdAorICBvYmo6IG9iamVjdAorICAvCisKK1dyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX18sCisiZHVtcChvYmopXG4iCisiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYgICAgXAorICAgIHsiZHVtcCIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJfZHVtcCwgTUVUSF9PLCBfcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotUGlja2xlcl9kdW1wKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyX2R1bXAoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBjaGVja3N1bTogYjcyYTY5ZWM5ODczN2ZhYmY2NmRhZTdjNWEzMjEwMTc4YmRiZDNlNl0qLwogewotICAgIFB5T2JqZWN0ICpvYmo7Ci0KICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgKGlzc3VlMzY2NCkuCiAgICAgICAgRGV2ZWxvcGVycyBvZnRlbiBmb3JnZXQgdG8gY2FsbCBfX2luaXRfXygpIGluIHRoZWlyIHN1YmNsYXNzZXMsIHdoaWNoCiAgICAgICAgd291bGQgdHJpZ2dlciBhIHNlZ2ZhdWx0IHdpdGhvdXQgdGhpcyBjaGVjay4gKi8KICAgICBpZiAoc2VsZi0+d3JpdGUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpkdW1wIiwgJm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTMzODUsMTAgKzM5MzQsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFBpY2tsZXJfbWV0aG9kc1tdID0gewotICAgIHsiZHVtcCIsIChQeUNGdW5jdGlvbilQaWNrbGVyX2R1bXAsIE1FVEhfVkFSQVJHUywKLSAgICAgUGlja2xlcl9kdW1wX2RvY30sCi0gICAgeyJjbGVhcl9tZW1vIiwgKFB5Q0Z1bmN0aW9uKVBpY2tsZXJfY2xlYXJfbWVtbywgTUVUSF9OT0FSR1MsCi0gICAgIFBpY2tsZXJfY2xlYXJfbWVtb19kb2N9LAorICAgIF9QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRgorICAgIF9QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzQwMSw3ICszOTQ4LDYgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPndyaXRlKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnBlcnNfZnVuYyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5kaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfWERFQ1JFRihzZWxmLT5hcmcpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+ZmFzdF9tZW1vKTsKIAogICAgIFB5TWVtb1RhYmxlX0RlbChzZWxmLT5tZW1vKTsKQEAgLTM0MTUsNyArMzk2MSw2IEBACiAgICAgUHlfVklTSVQoc2VsZi0+d3JpdGUpOwogICAgIFB5X1ZJU0lUKHNlbGYtPnBlcnNfZnVuYyk7CiAgICAgUHlfVklTSVQoc2VsZi0+ZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgUHlfVklTSVQoc2VsZi0+ZmFzdF9tZW1vKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTM0MjcsNyArMzk3Miw2IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+d3JpdGUpOwogICAgIFB5X0NMRUFSKHNlbGYtPnBlcnNfZnVuYyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X0NMRUFSKHNlbGYtPmFyZyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZmFzdF9tZW1vKTsKIAogICAgIGlmIChzZWxmLT5tZW1vICE9IE5VTEwpIHsKQEAgLTM0MzksMTUgKzM5ODMsNDUgQEAKIH0KIAogCi1QeURvY19TVFJWQVIoUGlja2xlcl9kb2MsCi0iUGlja2xlcihmaWxlLCBwcm90b2NvbD1Ob25lKSIKLSJcbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5QaWNrbGVyLl9faW5pdF9fCisKKyAgc2VsZjogUGlja2xlck9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1RoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KKworVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKK2dpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlCitkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvcgorUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QKK3Byb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlCittb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZQorcHJvZHVjZWQuCisKK1RoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZQorYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKK3dyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdAorbWVldHMgdGhpcyBpbnRlcmZhY2UuCisKK0lmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsCitzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sCisiX19pbml0X18oZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKICJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCiAiXG4iCiAiVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGVcbiIKLSJnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0XG4iCi0icHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yXG4iCi0iUHl0aG9uIDMuMC5cbiIKKyJnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZVxuIgorImRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yXG4iCisiUHl0aG9uIDMuXG4iCiAiXG4iCiAiU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdFxuIgogInByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlXG4iCkBAIC0zNDYwLDM4ICs0MDM0LDU2IEBACiAibWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCiAiXG4iCiAiSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob25cbiIKLSIyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKyJtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLFxuIgorInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLiIpOwogCi1zdGF0aWMgaW50Ci1QaWNrbGVyX2luaXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfX19JTklUX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9faW5pdF9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9fX2luaXRfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKnByb3RvX29iaiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE9wOl9faW5pdF9fIiwgX2tleXdvcmRzLAorICAgICAgICAmZmlsZSwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoKFBpY2tsZXJPYmplY3QgKilzZWxmLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCisvKltjbGluaWMgY2hlY2tzdW06IGM5OWZmNDE3YmQ3MDNhNzRhZmZjNGI3MDgxNjdlNTZlMTM1ZTg5NjldKi8KK3sKICAgICBfUHlfSURFTlRJRklFUihwZXJzaXN0ZW50X2lkKTsKICAgICBfUHlfSURFTlRJRklFUihkaXNwYXRjaF90YWJsZSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpQaWNrbGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZmaWxlLCAmcHJvdG9fb2JqLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBJbiBjYXNlIG9mIG11bHRpcGxlIF9faW5pdF9fKCkgY2FsbHMsIGNsZWFyIHByZXZpb3VzIGNvbnRlbnQuICovCiAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwpCiAgICAgICAgICh2b2lkKVBpY2tsZXJfY2xlYXIoc2VsZik7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9fb2JqLCBmaXhfaW1wb3J0cykgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHNlbGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChfUGlja2xlcl9TZXRPdXRwdXRTdHJlYW0oc2VsZiwgZmlsZSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbWVtbyBhbmQgb3V0cHV0X2J1ZmZlciBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBfUGlja2xlcl9OZXcgKi8KICAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7CiAgICAgICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKICAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CkBAIC0zNDk5LDEwICs0MDkxLDkgQEAKICAgICAgICAgc2VsZi0+b3V0cHV0X2J1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4pOwogICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7CkBAIC0zNTExLDE1ICs0MTAyLDI4IEBACiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9wZXJzaXN0ZW50X2lkKTsKICAgICAgICAgaWYgKHNlbGYtPnBlcnNfZnVuYyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHNlbGYtPmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9kaXNwYXRjaF90YWJsZSkpIHsKICAgICAgICAgc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9kaXNwYXRjaF90YWJsZSk7CiAgICAgICAgIGlmIChzZWxmLT5kaXNwYXRjaF90YWJsZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIFdyYXAgdGhlIENsaW5pYyBnZW5lcmF0ZWQgc2lnbmF0dXJlIHRvIHNsb3QgaXQgaW4gdHBfaW5pdC4gKi8KK3N0YXRpYyBpbnQKK1BpY2tsZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IF9waWNrbGVfUGlja2xlcl9fX2luaXRfXyhzZWxmLCBhcmdzLCBrd2FyZ3MpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zNTM4LDIyICs0MTQyLDQ4IEBACiAgICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsgLyogUGlja2xlciB3aG9zZSBtZW1vIHRhYmxlIHdlJ3JlIHByb3h5aW5nLiAqLwogfSBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0OwogCi1QeURvY19TVFJWQVIocG1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworLypbY2xpbmljXQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5LmNsZWFyCisKKyAgc2VsZjogUGlja2xlck1lbW9Qcm94eU9iamVjdAorCitSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoKVxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA1MDdmMTM5Mzg3MjE5OTJlMTc1YTNlNThiNWFkMDI2MjAwNDVhMWNjXSovCiB7CiAgICAgaWYgKHNlbGYtPnBpY2tsZXItPm1lbW8pCiAgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPnBpY2tsZXItPm1lbW8pOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIocG1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWNdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuY29weQorCisgIHNlbGY6IFBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX18sCisiY29weSgpXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX2NvcHkoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDczYTUxMTdhYjM1NDI5MGViZGJlMDdiZDBiZjcyMzJkMDkzNmE2OWRdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlNZW1vVGFibGUgKm1lbW87CkBAIC0zNTkwLDE0ICs0MjIwLDI3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwbXBfcmVkdWNlX2RvYywKLSJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5fX3JlZHVjZV9fCisKKyAgc2VsZjogUGlja2xlck1lbW9Qcm94eU9iamVjdAorCitJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygpXG4iCisiSW1wbGVtZW50IHBpY2tsZSBzdXBwb3J0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9yZWR1Y2UoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXyhQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA0MGYwYmY3YTliMTYxZTc3MTMwNjc0ZjA0ODFiZGEwYTAxODRkY2NlXSovCiB7CiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSwgKmRpY3RfYXJnczsKLSAgICBQeU9iamVjdCAqY29udGVudHMgPSBwbXBfY29weShzZWxmKTsKKyAgICBQeU9iamVjdCAqY29udGVudHMgPSBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weShzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM2MjAsOSArNDI2Myw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwaWNrbGVycHJveHlfbWV0aG9kc1tdID0gewotICAgIHsiY2xlYXIiLCAgICAgIChQeUNGdW5jdGlvbilwbXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHBtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgIChQeUNGdW5jdGlvbilwbXBfY29weSwgICBNRVRIX05PQVJHUywgIHBtcF9jb3B5X2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXBtcF9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgcG1wX3JlZHVjZV9kb2N9LAorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM4MzQsNyArNDQ3Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgUGlja2xlcl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sICAgIC8qdHBfZG9jKi8KICAgICAodHJhdmVyc2Vwcm9jKVBpY2tsZXJfdHJhdmVyc2UsICAgICAvKnRwX3RyYXZlcnNlKi8KICAgICAoaW5xdWlyeSlQaWNrbGVyX2NsZWFyLCAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KQEAgLTM4NDksNyArNDQ5Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylQaWNrbGVyX2luaXQsICAgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgUGlja2xlcl9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyp0cF9mcmVlKi8KQEAgLTM4NzUsOCArNDUxOCw5IEBACiBzdGF0aWMgUHlfc3NpemVfdAogbWFya2VyKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKHNlbGYtPm51bV9tYXJrcyA8IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgImNvdWxkIG5vdCBmaW5kIE1BUksiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJjb3VsZCBub3QgZmluZCBNQVJLIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTM4OTMsNyArNDUzNyw4IEBACiBzdGF0aWMgaW50CiBiYWRfcmVhZGxpbmUodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAicGlja2xlIGRhdGEgd2FzIHRydW5jYXRlZCIpOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInBpY2tsZSBkYXRhIHdhcyB0cnVuY2F0ZWQiKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTM5NTQsMTcgKzQ1OTksMTUgQEAKICAqIGFzIGEgQyBQeV9zc2l6ZV90LCBvciAtMSBpZiBpdCdzIGhpZ2hlciB0aGFuIFBZX1NTSVpFX1RfTUFYLgogICovCiBzdGF0aWMgUHlfc3NpemVfdAotY2FsY19iaW5zaXplKGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK2NhbGNfYmluc2l6ZShjaGFyICpieXRlcywgaW50IG5ieXRlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilieXRlczsKKyAgICBpbnQgaTsKICAgICBzaXplX3QgeCA9IDA7CiAKLSAgICBhc3NlcnQoc2l6ZSA9PSA0KTsKLQotICAgIHggPSAgKHNpemVfdCkgc1swXTsKLSAgICB4IHw9IChzaXplX3QpIHNbMV0gPDwgODsKLSAgICB4IHw9IChzaXplX3QpIHNbMl0gPDwgMTY7Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzNdIDw8IDI0OworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXMgJiYgaSA8IHNpemVvZihzaXplX3QpOyBpKyspIHsKKyAgICAgICAgeCB8PSAoc2l6ZV90KSBzW2ldIDw8ICg4ICogaSk7CisgICAgfQogCiAgICAgaWYgKHggPiBQWV9TU0laRV9UX01BWCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzk3OCwyMSArNDYyMSwyMSBAQAogICogb2YgeC1wbGF0Zm9ybSBidWdzLgogICovCiBzdGF0aWMgbG9uZwotY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBzaXplKQorY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7Ci0gICAgaW50IGkgPSBzaXplOworICAgIGludCBpOwogICAgIGxvbmcgeCA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHggfD0gKGxvbmcpc1tpXSA8PCAoaSAqIDgpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykgeworICAgICAgICB4IHw9IChsb25nKXNbaV0gPDwgKDggKiBpKTsKICAgICB9CiAKICAgICAvKiBVbmxpa2UgQklOSU5UMSBhbmQgQklOSU5UMiwgQklOSU5UIChtb3JlIGFjY3VyYXRlbHkgQklOSU5UNCkKICAgICAgKiBpcyBzaWduZWQsIHNvIG9uIGEgYm94IHdpdGggbG9uZ3MgYmlnZ2VyIHRoYW4gNCBieXRlcyB3ZSBuZWVkCiAgICAgICogdG8gZXh0ZW5kIGEgQklOSU5UJ3Mgc2lnbiBiaXQgdG8gdGhlIGZ1bGwgd2lkdGguCiAgICAgICovCi0gICAgaWYgKFNJWkVPRl9MT05HID4gNCAmJiBzaXplID09IDQpIHsKKyAgICBpZiAoU0laRU9GX0xPTkcgPiA0ICYmIG5ieXRlcyA9PSA0KSB7CiAgICAgICAgIHggfD0gLSh4ICYgKDFMIDw8IDMxKSk7CiAgICAgfQogCkBAIC00MDkwLDggKzQ3MzMsOSBAQAogCiAgICAgc2l6ZSA9IGNhbGNfYmluaW50KG5ieXRlcywgc2l6ZSk7CiAgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgLyogQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC00MTcxLDM2ICs0ODE1LDI0IEBACiAKICAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAobGVuIDwgMikKLSAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwotICAgIGlmICgocyA9IHN0cmR1cChzKSkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCisgICAgLyogU3RyaXAgdGhlIG5ld2xpbmUgKi8KKyAgICBsZW4tLTsKICAgICAvKiBTdHJpcCBvdXRlcm1vc3QgcXVvdGVzICovCi0gICAgd2hpbGUgKGxlbiA+IDAgJiYgc1tsZW4gLSAxXSA8PSAnICcpCi0gICAgICAgIGxlbi0tOwotICAgIGlmIChsZW4gPiAxICYmIHNbMF0gPT0gJyInICYmIHNbbGVuIC0gMV0gPT0gJyInKSB7Ci0gICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOwotICAgICAgICBwID0gcyArIDE7Ci0gICAgICAgIGxlbiAtPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChsZW4gPiAxICYmIHNbMF0gPT0gJ1wnJyAmJiBzW2xlbiAtIDFdID09ICdcJycpIHsKLSAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7CisgICAgaWYgKGxlbiA+PSAyICYmIHNbMF0gPT0gc1tsZW4gLSAxXSAmJiAoc1swXSA9PSAnXCcnIHx8IHNbMF0gPT0gJyInKSkgewogICAgICAgICBwID0gcyArIDE7CiAgICAgICAgIGxlbiAtPSAyOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZnJlZShzKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnNlY3VyZSBzdHJpbmcgcGlja2xlIik7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGhlIFNUUklORyBvcGNvZGUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBhc3NlcnQobGVuID49IDApOwogCiAgICAgLyogVXNlIHRoZSBQeUJ5dGVzIEFQSSB0byBkZWNvZGUgdGhlIHN0cmluZywgc2luY2UgdGhhdCBpcyB3aGF0IGlzIHVzZWQKICAgICAgICB0byBlbmNvZGUsIGFuZCB0aGVuIGNvZXJjZSB0aGUgcmVzdWx0IHRvIFVuaWNvZGUuICovCiAgICAgYnl0ZXMgPSBQeUJ5dGVzX0RlY29kZUVzY2FwZShwLCBsZW4sIE5VTEwsIDAsIE5VTEwpOwotICAgIGZyZWUocyk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoYnl0ZXMsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwpAQCAtNDIxMywyNyArNDg0NSwyNyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZikKK2xvYWRfY291bnRlZF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5X3NzaXplX3QgeDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgY2hhciAqczsKIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgeCA9IGNhbGNfYmluc2l6ZShzLCA0KTsKLSAgICBpZiAoeCA8IDApIHsKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CisgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWAotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCB4KTsKKworICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBzaXplKTsKICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00MjQyLDc0ICs0ODc0LDI4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfc2hvcnRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeV9zc2l6ZV90IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgeCA9ICh1bnNpZ25lZCBjaGFyKXNbMF07Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCB4KTsKLSAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgYnl0ZXMsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbG9hZF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7CiAgICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9zc2l6ZV90IHg7CisgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHggPSBjYWxjX2JpbmludChzLCA0KTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkJJTlNUUklORyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gdW5pY29kZS4gKi8KLSAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHgsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc3RyLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvYWRfc2hvcnRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gKHVuc2lnbmVkIGNoYXIpc1swXTsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gdW5pY29kZS4gKi8KLSAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHgsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOworICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgc2l6ZSwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQzMzgsMjUgKzQ5MjQsMjMgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9iaW51bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZikKK2xvYWRfY291bnRlZF9iaW51bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKIHsKICAgICBQeU9iamVjdCAqc3RyOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIDQpOworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotCiAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQ0MjgsNiArNTAxMiwxNyBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX2VtcHR5X3NldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnNldDsKKworICAgIGlmICgoc2V0ID0gUHlTZXRfTmV3KE5VTEwpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc2V0LCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfbGlzdChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmxpc3Q7CkBAIC00NDY5LDYgKzUwNjQsMjkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbG9hZF9mcm96ZW5zZXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICBQeU9iamVjdCAqZnJvemVuc2V0OworICAgIFB5X3NzaXplX3QgaTsKKworICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpdGVtcyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBpKTsKKyAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZnJvemVuc2V0ID0gUHlGcm96ZW5TZXRfTmV3KGl0ZW1zKTsKKyAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgIGlmIChmcm96ZW5zZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgZnJvemVuc2V0LCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnN0YW50aWF0ZShQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ1NzYsNiArNTE5NCw3IEBACiAgICAgUHlPYmplY3QgKmNsc3JhdyA9IE5VTEw7CiAgICAgUHlUeXBlT2JqZWN0ICpjbHM7ICAgICAgICAgIC8qIGNsc3JhdyBjYXN0IHRvIGl0cyB0cnVlIHR5cGUgKi8KICAgICBQeU9iamVjdCAqb2JqOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgIC8qIFN0YWNrIGlzIC4uLiBjbHMgYXJndHVwbGUsIGFuZCB3ZSB3YW50IHRvIGNhbGwKICAgICAgKiBjbHMuX19uZXdfXyhjbHMsICphcmd0dXBsZSkuCkBAIC00NTg0LDcgKzUyMDMsOCBAQAogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogZXhwZWN0ZWQgYW4gYXJnICIgInR1cGxlLiIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJORVdPQkogZXhwZWN0ZWQgYW4gYXJnICIgInR1cGxlLiIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIApAQCAtNDU5MywxMiArNTIxMywxMiBAQAogICAgIGlmIChjbHMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaXNuJ3QgYSB0eXBlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2xzLT50cF9uZXcgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgImhhcyBOVUxMIHRwX25ldyIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTQ2MjAsNiArNTI0MCw1OCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX25ld29ial9leChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmNscywgKmFyZ3MsICprd2FyZ3M7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGt3YXJncyk7CisgICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBhcmdzKTsKKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgY2xzKTsKKyAgICBpZiAoY2xzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlVucGlja2xpbmdFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IG11c3QgYmUgYSB0eXBlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBfX25ld19fIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2JqID0gKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcoKFB5VHlwZU9iamVjdCAqKWNscywgYXJncywga3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGNscyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfZ2xvYmFsKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsID0gTlVMTDsKQEAgLTQ2NTYsNiArNTMyOCwzMiBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX3N0YWNrX2dsb2JhbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmdsb2JhbDsKKyAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lOworCisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBnbG9iYWxfbmFtZSk7CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBtb2R1bGVfbmFtZSk7CisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVja0V4YWN0KG1vZHVsZV9uYW1lKSB8fAorICAgICAgICBnbG9iYWxfbmFtZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChnbG9iYWxfbmFtZSkpIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIlNUQUNLX0dMT0JBTCByZXF1aXJlcyBzdHIiKTsKKyAgICAgICAgUHlfWERFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X1hERUNSRUYobW9kdWxlX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGdsb2JhbCA9IGZpbmRfY2xhc3Moc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICBQeV9ERUNSRUYoZ2xvYmFsX25hbWUpOworICAgIFB5X0RFQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgaWYgKGdsb2JhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgZ2xvYmFsLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfcGVyc2lkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcGlkOwpAQCAtNDY3Miw5ICs1MzcwLDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKLSAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CisgICAgICAgIC8qIFRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfUGlja2xlX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gcGlkIGZpcnN0LiAqLworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NjgyLDcgKzUzODAsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDY5OSw5ICs1Mzk4LDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKKyAgICAgICAgLyogVGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9QaWNrbGVfRmFzdENhbGwoKSBzdGVhbHMgdGhlCiAgICAgICAgICAgIHJlZmVyZW5jZSB0byBwaWQgZmlyc3QuICovCi0gICAgICAgIHBpZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVyc19mdW5jLCBwaWQpOworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NzA5LDcgKzU0MDgsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDg2NSw2ICs1NTY1LDcgQEAKICAgICBQeU9iamVjdCAqb2JqOyAgICAgICAgICAgICAgLyogdGhlIG9iamVjdCB0byBwdXNoICovCiAgICAgUHlPYmplY3QgKnBhaXI7ICAgICAgICAgICAgIC8qIChtb2R1bGVfbmFtZSwgY2xhc3NfbmFtZSkgKi8KICAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpjbGFzc19uYW1lOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgIGFzc2VydChuYnl0ZXMgPT0gMSB8fCBuYnl0ZXMgPT0gMiB8fCBuYnl0ZXMgPT0gNCk7CiAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmY29kZWJ5dGVzLCBuYnl0ZXMpIDwgMCkKQEAgLTQ4NzIsNyArNTU3Myw3IEBACiAgICAgY29kZSA9IGNhbGNfYmluaW50KGNvZGVieXRlcywgbmJ5dGVzKTsKICAgICBpZiAoY29kZSA8PSAwKSB7ICAgICAgICAgICAgLyogbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuICovCiAgICAgICAgIC8qIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQ4ODAsMjAgKzU1ODEsMjYgQEAKICAgICBweV9jb2RlID0gUHlMb25nX0Zyb21Mb25nKGNvZGUpOwogICAgIGlmIChweV9jb2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBvYmogPSBQeURpY3RfR2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOworICAgIG9iaiA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOwogICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICAvKiBCaW5nby4gKi8KICAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgICAgICBQREFUQV9BUFBFTkQoc2VsZi0+c3RhY2ssIG9iaiwgLTEpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgLyogTG9vayB1cCB0aGUgKG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKSBwYWlyLiAqLwotICAgIHBhaXIgPSBQeURpY3RfR2V0SXRlbShpbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CisgICAgcGFpciA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CiAgICAgaWYgKHBhaXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQiLCBjb2RlKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVucmVnaXN0ZXJlZCBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCIsIGNvZGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogU2luY2UgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSBpcyBtYW5pcHVsYWJsZSB2aWEgUHl0aG9uIGNvZGUsCkBAIC00OTE0LDcgKzU2MjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIENhY2hlIGNvZGUgLT4gb2JqLiAqLwotICAgIGNvZGUgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CisgICAgY29kZSA9IFB5RGljdF9TZXRJdGVtKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CiAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgIGlmIChjb2RlIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYob2JqKTsKQEAgLTQ5OTksNiArNTcwNiwxOCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX21lbW9pemUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDFdOworCisgICAgcmV0dXJuIF9VbnBpY2tsZXJfTWVtb1B1dChzZWxmLCBzZWxmLT5tZW1vX2xlbiwgdmFsdWUpOworfQorCitzdGF0aWMgaW50CiBkb19hcHBlbmQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHgpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwpAQCAtNTAzNyw3ICs1NzU2LDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKICAgICAgICAgICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbaV07Ci0gICAgICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGFwcGVuZF9mdW5jLCB2YWx1ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKGFwcGVuZF9mdW5jLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOwogICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0geDsKQEAgLTUwNzksOCArNTc5OCwxMCBAQAogICAgIGlmIChsZW4gPT0geCkgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKChsZW4gLSB4KSAlIDIgIT0gMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgIC8qIEN1cnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUgLS0gd2UgbmV2ZXIgd3JpdGUgb25lIGxpa2UgdGhpcy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUxMTQsNiArNTgzNSw1OSBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX2FkZGl0ZW1zKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworICAgIFB5X3NzaXplX3QgbWFyaywgbGVuLCBpOworCisgICAgbWFyayA9ICBtYXJrZXIoc2VsZik7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CisgICAgaWYgKG1hcmsgPiBsZW4gfHwgbWFyayA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgaWYgKGxlbiA9PSBtYXJrKSAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHNldCA9IHNlbGYtPnN0YWNrLT5kYXRhW21hcmsgLSAxXTsKKworICAgIGlmIChQeVNldF9DaGVjayhzZXQpKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBtYXJrKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgc3RhdHVzID0gX1B5U2V0X1VwZGF0ZShzZXQsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICphZGRfZnVuYzsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoYWRkKTsKKworICAgICAgICBhZGRfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoc2V0LCAmUHlJZF9hZGQpOworICAgICAgICBpZiAoYWRkX2Z1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZm9yIChpID0gbWFyazsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgICAgIGl0ZW0gPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYWRkX2Z1bmMsIGl0ZW0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSBtYXJrOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2J1aWxkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqc3RhdGUsICppbnN0LCAqc2xvdHN0YXRlOwpAQCAtNTE0Niw5ICs1OTIwLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAvKiBUaGUgZXhwbGljaXQgX19zZXRzdGF0ZV9fIGlzIHJlc3BvbnNpYmxlIGZvciBldmVyeXRoaW5nLiAqLwotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCi0gICAgICAgICAgIHJlZmVyZW5jZSB0byBzdGF0ZSBmaXJzdC4gKi8KLSAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZXRzdGF0ZSwgc3RhdGUpOworICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKHNldHN0YXRlLCBzdGF0ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZXRzdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTUxNzksNyArNTk1MSw4IEBACiAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKIAogICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoaW5zdCwgJlB5SWRfX19kaWN0X18pOwpAQCAtNTIwOCw3ICs1OTgxLDggQEAKICAgICAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHNsb3RzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xvdCBzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CkBAIC01MzE0LDE0ICs2MDg4LDM5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50Citsb2FkX2ZyYW1lKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyICpzOworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgOCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcmFtZV9sZW4gPSBjYWxjX2JpbnNpemUocywgOCk7CisgICAgaWYgKGZyYW1lX2xlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiRlJBTUUgbGVuZ3RoIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgZnJhbWVfbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFJld2luZCB0byBzdGFydCBvZiBmcmFtZSAqLworICAgIHNlbGYtPm5leHRfcmVhZF9pZHggLT0gZnJhbWVfbGVuOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmVycjsKICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOwogICAgIGNoYXIgKnM7CiAKICAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIApAQCAtNTM0NywxMyArNjE0NiwxNiBAQAogICAgICAgICBPUF9BUkcoTE9ORzQsIGxvYWRfY291bnRlZF9sb25nLCA0KQogICAgICAgICBPUChGTE9BVCwgbG9hZF9mbG9hdCkKICAgICAgICAgT1AoQklORkxPQVQsIGxvYWRfYmluZmxvYXQpCi0gICAgICAgIE9QKEJJTkJZVEVTLCBsb2FkX2JpbmJ5dGVzKQotICAgICAgICBPUChTSE9SVF9CSU5CWVRFUywgbG9hZF9zaG9ydF9iaW5ieXRlcykKLSAgICAgICAgT1AoQklOU1RSSU5HLCBsb2FkX2JpbnN0cmluZykKLSAgICAgICAgT1AoU0hPUlRfQklOU1RSSU5HLCBsb2FkX3Nob3J0X2JpbnN0cmluZykKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDEpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUywgbG9hZF9jb3VudGVkX2JpbmJ5dGVzLCA0KQorICAgICAgICBPUF9BUkcoQklOQllURVM4LCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDgpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDEpCisgICAgICAgIE9QX0FSRyhCSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDQpCiAgICAgICAgIE9QKFNUUklORywgbG9hZF9zdHJpbmcpCiAgICAgICAgIE9QKFVOSUNPREUsIGxvYWRfdW5pY29kZSkKLSAgICAgICAgT1AoQklOVU5JQ09ERSwgbG9hZF9iaW51bmljb2RlKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOVU5JQ09ERSwgbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUsIDEpCisgICAgICAgIE9QX0FSRyhCSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgNCkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREU4LCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgOCkKICAgICAgICAgT1BfQVJHKEVNUFRZX1RVUExFLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDApCiAgICAgICAgIE9QX0FSRyhUVVBMRTEsIGxvYWRfY291bnRlZF90dXBsZSwgMSkKICAgICAgICAgT1BfQVJHKFRVUExFMiwgbG9hZF9jb3VudGVkX3R1cGxlLCAyKQpAQCAtNTM2MywxMCArNjE2NSwxNSBAQAogICAgICAgICBPUChMSVNULCBsb2FkX2xpc3QpCiAgICAgICAgIE9QKEVNUFRZX0RJQ1QsIGxvYWRfZW1wdHlfZGljdCkKICAgICAgICAgT1AoRElDVCwgbG9hZF9kaWN0KQorICAgICAgICBPUChFTVBUWV9TRVQsIGxvYWRfZW1wdHlfc2V0KQorICAgICAgICBPUChBRERJVEVNUywgbG9hZF9hZGRpdGVtcykKKyAgICAgICAgT1AoRlJPWkVOU0VULCBsb2FkX2Zyb3plbnNldCkKICAgICAgICAgT1AoT0JKLCBsb2FkX29iaikKICAgICAgICAgT1AoSU5TVCwgbG9hZF9pbnN0KQogICAgICAgICBPUChORVdPQkosIGxvYWRfbmV3b2JqKQorICAgICAgICBPUChORVdPQkpfRVgsIGxvYWRfbmV3b2JqX2V4KQogICAgICAgICBPUChHTE9CQUwsIGxvYWRfZ2xvYmFsKQorICAgICAgICBPUChTVEFDS19HTE9CQUwsIGxvYWRfc3RhY2tfZ2xvYmFsKQogICAgICAgICBPUChBUFBFTkQsIGxvYWRfYXBwZW5kKQogICAgICAgICBPUChBUFBFTkRTLCBsb2FkX2FwcGVuZHMpCiAgICAgICAgIE9QKEJVSUxELCBsb2FkX2J1aWxkKQpAQCAtNTM3OCw2ICs2MTg1LDcgQEAKICAgICAgICAgT1AoQklOUFVULCBsb2FkX2JpbnB1dCkKICAgICAgICAgT1AoTE9OR19CSU5QVVQsIGxvYWRfbG9uZ19iaW5wdXQpCiAgICAgICAgIE9QKFBVVCwgbG9hZF9wdXQpCisgICAgICAgIE9QKE1FTU9JWkUsIGxvYWRfbWVtb2l6ZSkKICAgICAgICAgT1AoUE9QLCBsb2FkX3BvcCkKICAgICAgICAgT1AoUE9QX01BUkssIGxvYWRfcG9wX21hcmspCiAgICAgICAgIE9QKFNFVElURU0sIGxvYWRfc2V0aXRlbSkKQEAgLTUzODYsNiArNjE5NCw3IEBACiAgICAgICAgIE9QKEJJTlBFUlNJRCwgbG9hZF9iaW5wZXJzaWQpCiAgICAgICAgIE9QKFJFRFVDRSwgbG9hZF9yZWR1Y2UpCiAgICAgICAgIE9QKFBST1RPLCBsb2FkX3Byb3RvKQorICAgICAgICBPUChGUkFNRSwgbG9hZF9mcmFtZSkKICAgICAgICAgT1BfQVJHKEVYVDEsIGxvYWRfZXh0ZW5zaW9uLCAxKQogICAgICAgICBPUF9BUkcoRVhUMiwgbG9hZF9leHRlbnNpb24sIDIpCiAgICAgICAgIE9QX0FSRyhFWFQ0LCBsb2FkX2V4dGVuc2lvbiwgNCkKQEAgLTUzOTYsODEgKzYyMDUsMTM3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ1wwJykKKyAgICAgICAgICAgIGlmIChzWzBdID09ICdcMCcpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0VPRkVycm9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsb2FkIGtleSwgJyVjJy4iLCBzWzBdKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogYW5kIHdlIGFyZSBkb25lISAqLwogICAgIH0KIAotICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogWFhYOiBJdCBpcyBub3QgY2xlYXIgd2hhdCB0aGlzIGlzIGFjdHVhbGx5IGZvci4gKi8KLSAgICBpZiAoKGVyciA9IFB5RXJyX09jY3VycmVkKCkpKSB7Ci0gICAgICAgIGlmIChlcnIgPT0gUHlFeGNfRU9GRXJyb3IpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwotICAgICAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIHZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihVbnBpY2tsZXJfbG9hZF9kb2MsCi0ibG9hZCgpIC0+IG9iamVjdC4gTG9hZCBhIHBpY2tsZS4iCisvKltjbGluaWNdCisKK19waWNrbGUuVW5waWNrbGVyLmxvYWQKKworTG9hZCBhIHBpY2tsZS4KKworUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gZmlsZSBvYmplY3QgZ2l2ZW4gaW4KK3RoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZAordGhlcmVpbi4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX2xvYWRfX2RvY19fLAorImxvYWQoKVxuIgorIkxvYWQgYSBwaWNrbGUuXG4iCiAiXG4iCiAiUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gZmlsZSBvYmplY3QgZ2l2ZW4gaW5cbiIKICJ0aGUgY29uc3RydWN0b3IsIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWRcbiIKLSJ0aGVyZWluLlxuIik7CisidGhlcmVpbi4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyX2xvYWQsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1VbnBpY2tsZXJfbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlcl9sb2FkKFB5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA5YTMwYmE0ZTRkOTIyMWQ0ZGNkNzA1ZTE0NzFhYjExYjJjOWUzYWM2XSovCiB7CisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXIgPSAoVW5waWNrbGVyT2JqZWN0KilzZWxmOworCiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgVW5waWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgcHJldmVudHMKICAgICAgICBzZWdmYXVsdGluZyBpZiBhIHN1YmNsYXNzIG92ZXJyaWRkZW4gX19pbml0X18gd2l0aCBhIGZ1bmN0aW9uIHRoYXQgZG9lcwogICAgICAgIG5vdCBjYWxsIFVucGlja2xlci5fX2luaXRfXygpLiBIZXJlLCB3ZSBzaW1wbHkgZW5zdXJlIHRoYXQgc2VsZi0+cmVhZAogICAgICAgIGlzIG5vdCBOVUxMLiAqLwotICAgIGlmIChzZWxmLT5yZWFkID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFVucGlja2xpbmdFcnJvciwKKyAgICBpZiAodW5waWNrbGVyLT5yZWFkID09IE5VTEwpIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJVbnBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAlcy5fX2luaXRfXygpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bnBpY2tsZXIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmV0dXJuIGxvYWQoc2VsZik7CisgICAgcmV0dXJuIGxvYWQodW5waWNrbGVyKTsKIH0KIAogLyogVGhlIG5hbWUgb2YgZmluZF9jbGFzcygpIGlzIG1pc2xlYWRpbmcuIEluIG5ld2VyIHBpY2tsZSBwcm90b2NvbHMsIHRoaXMKICAgIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGxvYWRpbmcgYW55IGdsb2JhbCAoaS5lLiwgZnVuY3Rpb25zKSwgbm90IGp1c3QKICAgIGNsYXNzZXMuIFRoZSBuYW1lIGlzIGtlcHQgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9maW5kX2NsYXNzX2RvYywKLSJmaW5kX2NsYXNzKG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSkgLT4gb2JqZWN0LlxuIgorLypbY2xpbmljXQorCitfcGlja2xlLlVucGlja2xlci5maW5kX2NsYXNzCisKKyAgc2VsZjogVW5waWNrbGVyT2JqZWN0CisgIG1vZHVsZV9uYW1lOiBvYmplY3QKKyAgZ2xvYmFsX25hbWU6IG9iamVjdAorICAvCisKK1JldHVybiBhbiBvYmplY3QgZnJvbSBhIHNwZWNpZmllZCBtb2R1bGUuCisKK0lmIG5lY2Vzc2FyeSwgdGhlIG1vZHVsZSB3aWxsIGJlIGltcG9ydGVkLiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzCittZXRob2QgKGUuZy4gdG8gcmVzdHJpY3QgdW5waWNrbGluZyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zKS4KKworVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXMKK25lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfXywKKyJmaW5kX2NsYXNzKG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSlcbiIKKyJSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLlxuIgogIlxuIgotIlJldHVybiBhbiBvYmplY3QgZnJvbSBhIHNwZWNpZmllZCBtb2R1bGUsIGltcG9ydGluZyB0aGUgbW9kdWxlIGlmXG4iCi0ibmVjZXNzYXJ5LiAgU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgKGUuZy4gdG8gcmVzdHJpY3RcbiIKLSJ1bnBpY2tsaW5nIG9mIGFyYml0cmFyeSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMpLlxuIgorIklmIG5lY2Vzc2FyeSwgdGhlIG1vZHVsZSB3aWxsIGJlIGltcG9ydGVkLiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzXG4iCisibWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCiAiXG4iCiAiVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKLSJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLlxuIik7CisibmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUl9GSU5EX0NMQVNTX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kX2NsYXNzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3MsIE1FVEhfVkFSQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2ZpbmRfY2xhc3MoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgUHlPYmplY3QgKmdsb2JhbF9uYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKKyAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk9POmZpbmRfY2xhc3MiLAorICAgICAgICAmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoKFVucGlja2xlck9iamVjdCAqKXNlbGYsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgUHlPYmplY3QgKmdsb2JhbF9uYW1lKQorLypbY2xpbmljIGNoZWNrc3VtOiBiN2QwNWQ0ZGQ4YWRjNjk4ZTU3ODBjMWFjMmJlMGY1MDYyZDMzOTE1XSovCiB7CiAgICAgUHlPYmplY3QgKmdsb2JhbDsKICAgICBQeU9iamVjdCAqbW9kdWxlc19kaWN0OwogICAgIFB5T2JqZWN0ICptb2R1bGU7Ci0gICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCAqZ2xvYmFsX25hbWU7Ci0KLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJmaW5kX2NsYXNzIiwgMiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5X0lERU5USUZJRVIobW9kdWxlcyk7CiAKICAgICAvKiBUcnkgdG8gbWFwIHRoZSBvbGQgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54IHRvIHRoZSBuZXcgb25lcyB1c2VkIGluCiAgICAgICAgUHl0aG9uIDMueC4gIFdlIGRvIHRoaXMgb25seSB3aXRoIG9sZCBwaWNrbGUgcHJvdG9jb2xzIGFuZCB3aGVuIHRoZQpAQCAtNTQ3OCwxMyArNjM0MywxNCBAQAogICAgIGlmIChzZWxmLT5wcm90byA8IDMgJiYgc2VsZi0+Zml4X2ltcG9ydHMpIHsKICAgICAgICAgUHlPYmplY3QgKmtleTsKICAgICAgICAgUHlPYmplY3QgKml0ZW07CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgZ2xvYmFsIChpLmUuLCBhIGZ1bmN0aW9uIG9yIGEgY2xhc3MpIHdhcyByZW5hbWVkCiAgICAgICAgICAgIG9yIG1vdmVkIHRvIGFub3RoZXIgbW9kdWxlLiAqLwogICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihuYW1lX21hcHBpbmdfMnRvMywga2V5KTsKKyAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5uYW1lX21hcHBpbmdfMnRvMywga2V5KTsKICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soaXRlbSkgfHwgUHlUdXBsZV9HRVRfU0laRShpdGVtKSAhPSAyKSB7CkBAIC01NTEwLDcgKzYzNzYsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG1vZHVsZSB3YXMgcmVuYW1lZC4gKi8KLSAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKGltcG9ydF9tYXBwaW5nXzJ0bzMsIG1vZHVsZV9uYW1lKTsKKyAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zLCBtb2R1bGVfbmFtZSk7CiAgICAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC01NTI1LDkgKzYzOTEsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG1vZHVsZXNfZGljdCwgbW9kdWxlX25hbWUpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewpAQCAtNTUzNiwyMCArNjQwNCwxOCBAQAogICAgICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnQobW9kdWxlX25hbWUpOwogICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGdsb2JhbCA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIGdsb2JhbCA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICB9CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBVbnBpY2tsZXJfbWV0aG9kc1tdID0gewotICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilVbnBpY2tsZXJfbG9hZCwgTUVUSF9OT0FSR1MsCi0gICAgIFVucGlja2xlcl9sb2FkX2RvY30sCi0gICAgeyJmaW5kX2NsYXNzIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9maW5kX2NsYXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFVucGlja2xlcl9maW5kX2NsYXNzX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUl9GSU5EX0NMQVNTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNTU2Miw3ICs2NDI4LDYgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPnBlZWspOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RhY2spOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVyc19mdW5jKTsKLSAgICBQeV9YREVDUkVGKHNlbGYtPmFyZyk7CiAgICAgaWYgKHNlbGYtPmJ1ZmZlci5idWYgIT0gTlVMTCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWZmZXIpOwogICAgICAgICBzZWxmLT5idWZmZXIuYnVmID0gTlVMTDsKQEAgLTU1NzEsOCArNjQzNiw4IEBACiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPm1hcmtzKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOwotICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVycm9ycyk7CiAKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOwogfQpAQCAtNTU4NSw3ICs2NDUwLDYgQEAKICAgICBQeV9WSVNJVChzZWxmLT5wZWVrKTsKICAgICBQeV9WSVNJVChzZWxmLT5zdGFjayk7CiAgICAgUHlfVklTSVQoc2VsZi0+cGVyc19mdW5jKTsKLSAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01NTk3LDcgKzY0NjEsNiBAQAogICAgIFB5X0NMRUFSKHNlbGYtPnBlZWspOwogICAgIFB5X0NMRUFSKHNlbGYtPnN0YWNrKTsKICAgICBQeV9DTEVBUihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X0NMRUFSKHNlbGYtPmFyZyk7CiAgICAgaWYgKHNlbGYtPmJ1ZmZlci5idWYgIT0gTlVMTCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWZmZXIpOwogICAgICAgICBzZWxmLT5idWZmZXIuYnVmID0gTlVMTDsKQEAgLTU2MDgsMTcgKzY0NzEsNDkgQEAKICAgICBzZWxmLT5tYXJrcyA9IE5VTEw7CiAgICAgUHlNZW1fRnJlZShzZWxmLT5pbnB1dF9saW5lKTsKICAgICBzZWxmLT5pbnB1dF9saW5lID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKICAgICBzZWxmLT5lbmNvZGluZyA9IE5VTEw7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKICAgICBzZWxmLT5lcnJvcnMgPSBOVUxMOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihVbnBpY2tsZXJfZG9jLAotIlVucGlja2xlcihmaWxlLCAqLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIgotIlxuIgorLypbY2xpbmljXQorCitfcGlja2xlLlVucGlja2xlci5fX2luaXRfXworCisgIHNlbGY6IFVucGlja2xlck9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvIGFyZ3VtZW50IGlzIG5lZWRlZC4KKworVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QKK3RoYXQgdGFrZXMgYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdAorcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuCitUaHVzIGZpbGUtbGlrZSBvYmplY3QgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IKK3JlYWRpbmcsIGEgQnl0ZXNJTyBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQKK21lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvCittYXAgdGhlIG9sZCBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZAorJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLAorIl9faW5pdF9fKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPVwnQVNDSUlcJywgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCiAiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgogIlxuIgogIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKQEAgLTU2MzYsNTcgKzY1MzEsNjAgQEAKICJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCiAibWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZVxuIgogIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCi0iaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZFxuIgotIidzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKyJpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMi54OyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmRcbiIKKyJcJ3N0cmljdFwnLCByZXNwZWN0aXZlbHkuIik7CiAKLXN0YXRpYyBpbnQKLVVucGlja2xlcl9pbml0KFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUl9fX0lOSVRfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpfX2luaXRfXyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoKFVucGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgY2hlY2tzdW06IGJlZDBkOGJiZTFjNjQ3OTYwY2NjNmY5OTdiMzNiZjMzOTM1ZmE1NmZdKi8KK3sKICAgICBfUHlfSURFTlRJRklFUihwZXJzaXN0ZW50X2xvYWQpOwogCi0gICAgLyogWFhYOiBUaGF0IGlzIGFuIGhvcnJpYmxlIGVycm9yIG1lc3NhZ2UuIEJ1dCwgSSBkb24ndCBrbm93IGhvdyB0byBkbwotICAgICAgIGJldHRlci4uLiAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcyB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50ICglemQgZ2l2ZW4pIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogQXJndW1lbnRzIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgX19pbml0X18oKSBtZXRob2QgdG8gYWxsb3cKLSAgICAgICBzdWJjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gX19pbml0X18oKSBtZXRob2QsIHdoaWNoIG1heSAob3IgbWF5Ci0gICAgICAgbm90KSBzdXBwb3J0IFVucGlja2xlciBhcmd1bWVudHMuIEhvd2V2ZXIsIHRoaXMgbWVhbnMgd2UgbmVlZCB0byBiZQotICAgICAgIGV4dHJhIGNhcmVmdWwgaW4gdGhlIG90aGVyIFVucGlja2xlciBtZXRob2RzLCBzaW5jZSBhIHN1YmNsYXNzIGNvdWxkCi0gICAgICAgZm9yZ2V0IHRvIGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkgdGh1cyBicmVha2luZyBvdXIgaW50ZXJuYWwKLSAgICAgICBpbnZhcmlhbnRzLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpVbnBpY2tsZXIiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgLyogSW4gY2FzZSBvZiBtdWx0aXBsZSBfX2luaXRfXygpIGNhbGxzLCBjbGVhciBwcmV2aW91cyBjb250ZW50LiAqLwogICAgIGlmIChzZWxmLT5yZWFkICE9IE5VTEwpCiAgICAgICAgICh2b2lkKVVucGlja2xlcl9jbGVhcihzZWxmKTsKIAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0U3RyZWFtKHNlbGYsIGZpbGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2Rpbmcoc2VsZiwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOworICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfcGVyc2lzdGVudF9sb2FkKSkgewogICAgICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfcGVyc2lzdGVudF9sb2FkKTsKICAgICAgICAgaWYgKHNlbGYtPnBlcnNfZnVuYyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwpAQCAtNTY5NCwxNiArNjU5MiwyNyBAQAogCiAgICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKICAgICBpZiAoc2VsZi0+c3RhY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwogICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKICAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogV3JhcCB0aGUgQ2xpbmljIGdlbmVyYXRlZCBzaWduYXR1cmUgdG8gc2xvdCBpdCBpbiB0cF9pbml0LiAqLworc3RhdGljIGludAorVW5waWNrbGVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXyhzZWxmLCBhcmdzLCBrd2FyZ3MpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01NzI1LDExICs2NjM0LDI0IEBACiAgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7CiB9IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKIAotUHlEb2NfU1RSVkFSKHVtcF9jbGVhcl9kb2MsCi0ibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5LmNsZWFyCisKKyAgc2VsZjogVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfX2RvY19fLAorImNsZWFyKClcbiIKKyJSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXIsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NsZWFyKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogNDZmZWNmNGUzM2MwYzg3MzEyNGY4NDVlZGY2Y2MzYTJlOTg2NGJkNV0qLwogewogICAgIF9VbnBpY2tsZXJfTWVtb0NsZWFudXAoc2VsZi0+dW5waWNrbGVyKTsKICAgICBzZWxmLT51bnBpY2tsZXItPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+dW5waWNrbGVyLT5tZW1vX3NpemUpOwpAQCAtNTczOCwxMSArNjY2MCwyNCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIodW1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWNdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5jb3B5CisKKyAgc2VsZjogVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK0NvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX18sCisiY29weSgpXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NvcHkoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IGY4ODU2YzRlOGEzMzU0MDg4NmRmYmIyNDVmMjg2YWYzMDA4ZmEwYWRdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKm5ld19tZW1vID0gUHlEaWN0X05ldygpOwpAQCAtNTc3MiwxNSArNjcwNywyOCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIodW1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWNdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5fX3JlZHVjZV9fCisKKyAgc2VsZjogVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK0ltcGxlbWVudCBwaWNrbGluZyBzdXBwb3J0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygpXG4iCisiSW1wbGVtZW50IHBpY2tsaW5nIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX3JlZHVjZShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXyhVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IGFiNTUxNmE3NzY1OTE0NGUxMTkxYzdkZDcwYTBjNmM3NDU1NjYwYmNdKi8KIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOwogICAgIFB5T2JqZWN0ICpjb25zdHJ1Y3Rvcl9hcmdzOwotICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHVtcF9jb3B5KHNlbGYpOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHkoc2VsZik7CiAgICAgaWYgKGNvbnRlbnRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01ODAzLDkgKzY3NTEsOSBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgdW5waWNrbGVycHJveHlfbWV0aG9kc1tdID0gewotICAgIHsiY2xlYXIiLCAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NsZWFyLCAgTUVUSF9OT0FSR1MsICB1bXBfY2xlYXJfZG9jfSwKLSAgICB7ImNvcHkiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKXVtcF9jb3B5LCAgIE1FVEhfTk9BUkdTLCAgdW1wX2NvcHlfZG9jfSwKLSAgICB7Il9fcmVkdWNlX18iLCAgKFB5Q0Z1bmN0aW9uKXVtcF9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgdW1wX3JlZHVjZV9kb2N9LAorICAgIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTYwMjksNyArNjk3Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgVW5waWNrbGVyX2RvYywgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX19kb2NfXywgIC8qdHBfZG9jKi8KICAgICAodHJhdmVyc2Vwcm9jKVVucGlja2xlcl90cmF2ZXJzZSwgICAvKnRwX3RyYXZlcnNlKi8KICAgICAoaW5xdWlyeSlVbnBpY2tsZXJfY2xlYXIsICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KQEAgLTYwNDQsMjEgKzY5OTIsNTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCi0gICAgKGluaXRwcm9jKVVucGlja2xlcl9pbml0LCAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICBVbnBpY2tsZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLwogfTsKIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9kdW1wX2RvYywKLSJkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gTm9uZVxuIgorLypbY2xpbmljXQorCitfcGlja2xlLmR1bXAKKworICBvYmo6IG9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLgorCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heSBiZSBtb3JlCitlZmZpY2llbnQuCisKK1RoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sCitzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQorYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgorCitTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KK3N1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgorUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisKK1RoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlcworYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGEKK2lvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCisKK0lmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAorc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcF9fZG9jX18sCisiZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLlxuIgogIlxuIgotIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZS4gIFRoaXNcbiIKLSJpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgorIlRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5IGJlIG1vcmVcbiIKICJlZmZpY2llbnQuXG4iCiAiXG4iCi0iVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7XG4iCisiVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2xcbiIKICJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgogImJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC5cbiIKICJcbiIKQEAgLTYwNzIsMzUgKzcwNTIsNDQgQEAKICJcbiIKICJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCiAibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsXG4iCi0ic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9EVU1QX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfZHVtcCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfZHVtcF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmoiLCAiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpwcm90byA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDMpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcCgpIHRha2VzIGF0IG1vc3QgMyBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT098TyRwOmR1bXAiLCBfa2V5d29yZHMsCisgICAgICAgICZvYmosICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2R1bXBfaW1wbChtb2R1bGUsIG9iaiwgZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT3xPTzpkdW1wIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZmaWxlLCAmcHJvdG8sICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiBOVUxMOworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgcGlja2xlciA9IF9QaWNrbGVyX05ldygpOworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBjaGVja3N1bTogZTQ0MjcyMWIxNjA1MmQ5MjFiNWUzZmJkMTQ2ZDBhNjJlOTRhNDU5ZV0qLworeworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKKwogICAgIGlmIChwaWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvLCBmaXhfaW1wb3J0cykgPCAwKQorICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChfUGlja2xlcl9TZXRPdXRwdXRTdHJlYW0ocGlja2xlciwgZmlsZSkgPCAwKQpAQCAtNjEyMCwxMSArNzEwOSwzMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocGlja2xlX2R1bXBzX2RvYywKLSJkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpIC0+IGJ5dGVzXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlc1xuIgotIm9iamVjdCwgaW5zdGVhZCBvZiB3cml0aW5nIGl0IHRvIGEgZmlsZS5cbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5kdW1wcworCisgIG9iajogb2JqZWN0CisgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1JldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LgorCitUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDsKK3N1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhCitiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvbgorc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mCitQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCittYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKK3NvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2R1bXBzX19kb2NfXywKKyJkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlcyBvYmplY3QuXG4iCiAiXG4iCiAiVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7XG4iCiAic3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGFcbiIKQEAgLTYxMzYsMzUgKzcxNDcsNDQgQEAKICJcbiIKICJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKICJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCxcbiIKLSJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7Cisic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBTX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX2R1bXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXBzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX2R1bXBzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98TyRwOmR1bXBzIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2R1bXBzX2ltcGwobW9kdWxlLCBvYmosIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBjaGVja3N1bTogZGY2MjYyYzRjNDg3ZjUzN2Y0N2FlYzhhMTcwOTMxODIwNGMxZTE3NF0qLworewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDIpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcHMoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZHVtcHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKICAgICBpZiAocGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoZHVtcChwaWNrbGVyLCBvYmopIDwgMCkKQEAgLTYxNzksMTUgKzcxOTksNDYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2FkX2RvYywKLSJsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCisvKltjbGluaWNdCisKK19waWNrbGUubG9hZAorCisgIGZpbGU6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JldHVybiBhIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlIGVmZmljaWVudC4KKworVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbAorYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmUKK2lnbm9yZWQuCisKK1RoZSBhcmd1bWVudCBmaWxlIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMgYW4KK2ludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aAorbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZAorZm9yIHJlYWRpbmcsIGEgQnl0ZXNJTyBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcworaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAorYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmQKK2Vycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KKzIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9sb2FkX19kb2NfXywKKyJsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPVwnQVNDSUlcJywgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS5cbiIKICJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlIGFuZFxuIgotInJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLiAgVGhpcyBpc1xuIgotImVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZSBlZmZpY2llbnQuXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LlxuIgogIlxuIgogIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2xcbiIKLSJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgorImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0XCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgogImlnbm9yZWQuXG4iCiAiXG4iCiAiVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhblxuIgpAQCAtNjIwMSwzMiArNzI1Miw0MSBAQAogImJ5IFB5dGhvbiAyLnguICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGRcbiIKICJQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZFxuIgogImVycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob25cbiIKLSIyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS5cbiIpOworIjIueDsgdGhlc2UgZGVmYXVsdCB0byBcJ0FTQ0lJXCcgYW5kIFwnc3RyaWN0XCcsIHJlc3BlY3RpdmVseS4iKTsKKworI2RlZmluZSBfUElDS0xFX0xPQURfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWQiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9sb2FkX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOmxvYWQiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2xvYWRfaW1wbChtb2R1bGUsIGZpbGUsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBjaGVja3N1bTogZTEwNzk2ZjY3NjViMjJjZTQ4ZGNhNjk0MGYxMWIzOTMzODUzY2EzNV0qLworewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7CisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogCi0gICAgLyogZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMgYXJlIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSAhPSAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAicGlja2xlLmxvYWQoKSB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6bG9hZCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAgICAgaWYgKHVucGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNjIzNiw5ICs3Mjk2LDcgQEAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHVucGlja2xlciwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7Ci0gICAgaWYgKHVucGlja2xlci0+Zml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzOwogCiAgICAgcmVzdWx0ID0gbG9hZCh1bnBpY2tsZXIpOwogICAgIFB5X0RFQ1JFRih1bnBpY2tsZXIpOwpAQCAtNjI0OSwxNCArNzMwNywzNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocGlja2xlX2xvYWRzX2RvYywKLSJsb2FkcyhpbnB1dCwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9J0FTQ0lJJywgZXJyb3JzPSdzdHJpY3QnKSAtPiBvYmplY3RcbiIKLSJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgaGllcmFyY2h5IGZyb20gYSBieXRlcyBvYmplY3QgYW5kIHJldHVybiB0aGVcbiIKLSJyZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW5cbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5sb2FkcworCisgIGRhdGE6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JldHVybiBhIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHBpY2tsZSBkYXRhLgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCithcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQoraWdub3JlZC4KKworT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzLCB3aGljaAorYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKK2J5IFB5dGhvbiAyLnguICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQKK1B5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kCitlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uCisyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfbG9hZHNfX2RvY19fLAorImxvYWRzKGRhdGEsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPVwnQVNDSUlcJywgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuXG4iCiAiXG4iCiAiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCisiYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCiAiaWdub3JlZC5cbiIKICJcbiIKICJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoXG4iCkBAIC02MjY0LDQ0ICs3MzQ0LDUxIEBACiAiYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZFxuIgogIlB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kXG4iCiAiZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvblxuIgotIjIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisiMi54OyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJywgcmVzcGVjdGl2ZWx5LiIpOworCisjZGVmaW5lIF9QSUNLTEVfTE9BRFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfbG9hZHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJpbnB1dCIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKLSAgICBQeU9iamVjdCAqaW5wdXQ7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImRhdGEiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZHMiLCBfa2V5d29yZHMsCisgICAgICAgICZkYXRhLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2xvYWRzX2ltcGwobW9kdWxlLCBkYXRhLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGNoZWNrc3VtOiAyOWVlNzI1ZWZjYmY1MWEzNTMzYzE5Y2I4MjYxYThlMjY3YjcwODBhXSovCit7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZHMoKSB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6bG9hZHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBpbnB1dCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHVucGlja2xlciwgZGF0YSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYzMTIsMTM5ICs3Mzk5LDYzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBwaWNrbGVfbWV0aG9kc1tdID0gewotICAgIHsiZHVtcCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXAsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2R1bXBfZG9jfSwKLSAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wc19kb2N9LAotICAgIHsibG9hZCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWQsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2xvYWRfZG9jfSwKLSAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2Fkc19kb2N9LAorICAgIF9QSUNLTEVfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0RVTVBTX01FVEhPRERFRgorICAgIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIGludAotaW5pdG1vZHVsZSh2b2lkKQorcGlja2xlX2NsZWFyKFB5T2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29tcGF0X3BpY2tsZSA9IE5VTEw7Ci0KLSAgICAvKiBYWFg6IFdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdHlwZXMgb2YgdGhlIGRpY3Rpb25hcmllcyBpbXBvcnRlZCBhcmUKLSAgICAgICBleGFjdGx5IFB5RGljdCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIHRvIGNyYXNoIHRoZSBwaWNrbGUKLSAgICAgICBzaW5jZSB3ZSB1c2UgdGhlIFB5RGljdCBBUEkgZGlyZWN0bHkgdG8gYWNjZXNzIHRoZXNlIGRpY3Rpb25hcmllcy4gKi8KLQotICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKLSAgICBpZiAoIWNvcHlyZWcpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOwotICAgIGlmICghZGlzcGF0Y2hfdGFibGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAotICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7Ci0gICAgaWYgKCFleHRlbnNpb25fcmVnaXN0cnkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaW52ZXJ0ZWRfcmVnaXN0cnkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKLSAgICBpZiAoIWludmVydGVkX3JlZ2lzdHJ5KQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGV4dGVuc2lvbl9jYWNoZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9leHRlbnNpb25fY2FjaGUiKTsKLSAgICBpZiAoIWV4dGVuc2lvbl9jYWNoZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLQotICAgIC8qIExvYWQgdGhlIDIueCAtPiAzLnggc3RkbGliIG1vZHVsZSBtYXBwaW5nIHRhYmxlcyAqLwotICAgIGNvbXBhdF9waWNrbGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9jb21wYXRfcGlja2xlIik7Ci0gICAgaWYgKCFjb21wYXRfcGlja2xlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIG5hbWVfbWFwcGluZ18ydG8zID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfMnRvMykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobmFtZV9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW1wb3J0X21hcHBpbmdfMnRvMyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1QT1JUX01BUFBJTkciKTsKLSAgICBpZiAoIWltcG9ydF9tYXBwaW5nXzJ0bzMpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChpbXBvcnRfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KLSAgICBuYW1lX21hcHBpbmdfM3RvMiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfM3RvMikKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18zdG8yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShuYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpbXBvcnRfbWFwcGluZ18zdG8yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7Ci0gICAgaWYgKCFpbXBvcnRfbWFwcGluZ18zdG8yKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QoaW1wb3J0X21hcHBpbmdfM3RvMikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOwotCi0gICAgZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKLSAgICBpZiAoZW1wdHlfdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB0d29fdHVwbGUgPSBQeVR1cGxlX05ldygyKTsKLSAgICBpZiAodHdvX3R1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgLyogV2UgdXNlIHRoaXMgdGVtcCBjb250YWluZXIgd2l0aCBubyByZWdhcmQgdG8gcmVmY291bnRzLCBvciB0bwotICAgICAqIGtlZXBpbmcgY29udGFpbmVlcyBhbGl2ZS4gIEV4ZW1wdCBmcm9tIEdDLCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICogd2FudCBhbnl0aGluZyBsb29raW5nIGF0IHR3b190dXBsZSgpIGJ5IG1hZ2ljLgotICAgICAqLwotICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sodHdvX3R1cGxlKTsKLQorICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShfUGlja2xlX0dldFN0YXRlKG0pKTsKICAgICByZXR1cm4gMDsKK30KIAotICBlcnJvcjoKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLSAgICBQeV9DTEVBUihkaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKLSAgICBQeV9DTEVBUihpbnZlcnRlZF9yZWdpc3RyeSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX2NhY2hlKTsKLSAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKLSAgICBQeV9DTEVBUihuYW1lX21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIoaW1wb3J0X21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIobmFtZV9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGltcG9ydF9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9DTEVBUih0d29fdHVwbGUpOwotICAgIHJldHVybiAtMTsKK3N0YXRpYyBpbnQKK3BpY2tsZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKyAgICBQeV9WSVNJVChzdC0+UGlja2xlRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+ZGlzcGF0Y2hfdGFibGUpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fY2FjaGUpOworICAgIFB5X1ZJU0lUKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMik7CisgICAgUHlfVklTSVQoc3QtPmNvZGVjc19lbmNvZGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9waWNrbGVtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfcGlja2xlIiwKLSAgICBwaWNrbGVfbW9kdWxlX2RvYywKLSAgICAtMSwKLSAgICBwaWNrbGVfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgIl9waWNrbGUiLCAgICAgICAgICAgLyogbV9uYW1lICovCisgICAgcGlja2xlX21vZHVsZV9kb2MsICAgLyogbV9kb2MgKi8KKyAgICBzaXplb2YoUGlja2xlU3RhdGUpLCAvKiBtX3NpemUgKi8KKyAgICBwaWNrbGVfbWV0aG9kcywgICAgICAvKiBtX21ldGhvZHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBtX3JlbG9hZCAqLworICAgIHBpY2tsZV90cmF2ZXJzZSwgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBwaWNrbGVfY2xlYXIsICAgICAgICAvKiBtX2NsZWFyICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgLyogbV9mcmVlICovCiB9OwogCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19waWNrbGUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKKyAgICBQaWNrbGVTdGF0ZSAqc3Q7CisKKyAgICBtID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZfcGlja2xlbW9kdWxlKTsKKyAgICBpZiAobSkgeworICAgICAgICBQeV9JTkNSRUYobSk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KIAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjQ2OSwyNyArNzQ4MCwzMiBAQAogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xlciIsIChQeU9iamVjdCAqKSZVbnBpY2tsZXJfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKwogICAgIC8qIEluaXRpYWxpemUgdGhlIGV4Y2VwdGlvbnMuICovCi0gICAgUGlja2xlRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuUGlja2xlRXJyb3IiLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAoUGlja2xlRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xlRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuUGlja2xlRXJyb3IiLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoc3QtPlBpY2tsZUVycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGluZ0Vycm9yIiwgUGlja2xlRXJyb3IsIE5VTEwpOwotICAgIGlmIChQaWNrbGluZ0Vycm9yID09IE5VTEwpCisgICAgc3QtPlBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsZUVycm9yLCBOVUxMKTsKKyAgICBpZiAoc3QtPlBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgVW5waWNrbGluZ0Vycm9yID0gXAotICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuVW5waWNrbGluZ0Vycm9yIiwgUGlja2xlRXJyb3IsIE5VTEwpOwotICAgIGlmIChVbnBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+VW5waWNrbGluZ0Vycm9yID0gXAorICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuVW5waWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsZUVycm9yLCBOVUxMKTsKKyAgICBpZiAoc3QtPlVucGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgUGlja2xlRXJyb3IpIDwgMCkKKyAgICBQeV9JTkNSRUYoc3QtPlBpY2tsZUVycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGVFcnJvciIsIHN0LT5QaWNrbGVFcnJvcikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgUGlja2xpbmdFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xpbmdFcnJvcik7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xpbmdFcnJvciIsIHN0LT5QaWNrbGluZ0Vycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIFVucGlja2xpbmdFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJVbnBpY2tsaW5nRXJyb3IiLCBzdC0+VW5waWNrbGluZ0Vycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGluaXRtb2R1bGUoKSA8IDApCisgICAgaWYgKF9QaWNrbGVfSW5pdFN0YXRlKHN0KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIG07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19wb3NpeHN1YnByb2Nlc3MuYyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCmluZGV4IDhkNjU1MzAuLmEyZDcwMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCisrKyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCkBAIC0zNSw3ICszNSw3IEBACiAjIGRlZmluZSBGRF9ESVIgIi9wcm9jL3NlbGYvZmQiCiAjZW5kaWYKIAotI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgaWYgKChjYWxsKSA9PSAtMSkgZ290byBlcnJvcgorI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgZG8geyBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yOyB9IHdoaWxlICgwKQogCiAKIC8qIE1heGltdW0gZmlsZSBkZXNjcmlwdG9yLCBpbml0aWFsaXplZCBvbiBtb2R1bGUgbG9hZC4gKi8KQEAgLTg3LDcgKzg3LDcgQEAKICAgICBpZiAoc3RhdCgiL2RldiIsICZkZXZfc3RhdCkgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHN0YXQoRkRfRElSLCAmZGV2X2ZkX3N0YXQpICE9IDApCi0gICAgICAgIHJldHVybiAwOyAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGRldl9zdGF0LnN0X2RldiA9PSBkZXZfZmRfc3RhdC5zdF9kZXYpCiAgICAgICAgIHJldHVybiAwOyAgLyogLyA9PSAvZGV2ID09IC9kZXYvZmQgbWVhbnMgaXQgaXMgc3RhdGljLiAjZmFpbCAqLwogICAgIHJldHVybiAxOwpAQCAtMTM2LDYgKzEzNiwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CittYWtlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpweV9mZHNfdG9fa2VlcCwgaW50IGVycnBpcGVfd3JpdGUpCit7CisgICAgUHlfc3NpemVfdCBpLCBsZW47CisKKyAgICBsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChweV9mZHNfdG9fa2VlcCk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0KiBmZG9iaiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShweV9mZHNfdG9fa2VlcCwgaSk7CisgICAgICAgIGxvbmcgZmQgPSBQeUxvbmdfQXNMb25nKGZkb2JqKTsKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyAgICAgICAgYXNzZXJ0KDAgPD0gZmQgJiYgZmQgPD0gSU5UX01BWCk7CisgICAgICAgIGlmIChmZCA9PSBlcnJwaXBlX3dyaXRlKSB7CisgICAgICAgICAgICAvKiBlcnJwaXBlX3dyaXRlIGlzIHBhcnQgb2YgcHlfZmRzX3RvX2tlZXAuIEl0IG11c3QgYmUgY2xvc2VkIGF0CisgICAgICAgICAgICAgICBleGVjKCksIGJ1dCBrZXB0IG9wZW4gaW4gdGhlIGNoaWxkIHByb2Nlc3MgdW50aWwgZXhlYygpIGlzCisgICAgICAgICAgICAgICBjYWxsZWQuICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZSgoaW50KWZkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAKIC8qIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBzdGFydF9mZCBpbmNsdXNpdmUgdG8KICAqIGVuZF9mZCBleGNsdXNpdmUgZXhjZXB0IGZvciB0aG9zZSBpbiBweV9mZHNfdG9fa2VlcC4gIElmIHRoZQpAQCAtMjA1LDE4ICsyMjgsOCBAQAogICAgIGludCBmZF9kaXJfZmQ7CiAgICAgaWYgKHN0YXJ0X2ZkID49IGVuZF9mZCkKICAgICAgICAgcmV0dXJuOwotI2lmZGVmIE9fQ0xPRVhFQwotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSB8IE9fQ0xPRVhFQywgMCk7Ci0jZWxzZQotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSwgMCk7Ci0jaWZkZWYgRkRfQ0xPRVhFQwotICAgIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGZkX2Rpcl9mZCwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChmZF9kaXJfZmQsIEZfU0VURkQsIG9sZCB8IEZEX0NMT0VYRUMpOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCisKKyAgICBmZF9kaXJfZmQgPSBfUHlfb3BlbihGRF9ESVIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmRfZGlyX2ZkID09IC0xKSB7CiAgICAgICAgIC8qIE5vIHdheSB0byBnZXQgYSBsaXN0IG9mIG9wZW4gZmRzLiAqLwogICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBlbmRfZmQsIHB5X2Zkc190b19rZWVwKTsKQEAgLTM1NiwxNiArMzY5LDE2IEBACiAgICAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgaGV4IGludGVnZXIuICBXZSBjYW4ndCBtYWxsb2MuICovCiAgICAgY2hhciBoZXhfZXJybm9bc2l6ZW9mKHNhdmVkX2Vycm5vKSoyKzFdOwogCisgICAgaWYgKG1ha2VfaW5oZXJpdGFibGUocHlfZmRzX3RvX2tlZXAsIGVycnBpcGVfd3JpdGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKwogICAgIC8qIENsb3NlIHBhcmVudCdzIHBpcGUgZW5kcy4gKi8KLSAgICBpZiAocDJjd3JpdGUgIT0gLTEpIHsKKyAgICBpZiAocDJjd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGMycHJlYWQgIT0gLTEpIHsKKyAgICBpZiAoYzJwcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShjMnByZWFkKSk7Ci0gICAgfQotICAgIGlmIChlcnJyZWFkICE9IC0xKSB7CisgICAgaWYgKGVycnJlYWQgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycmVhZCkpOwotICAgIH0KICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycnBpcGVfcmVhZCkpOwogCiAgICAgLyogV2hlbiBkdXBpbmcgZmRzLCBpZiB0aGVyZSBhcmlzZXMgYSBzaXR1YXRpb24gd2hlcmUgb25lIG9mIHRoZSBmZHMgaXMKQEAgLTM3OSwzOCArMzkyLDM0IEBACiAgICAgICAgZHVwMigpIHJlbW92ZXMgdGhlIENMT0VYRUMgZmxhZyBidXQgd2UgbXVzdCBkbyBpdCBvdXJzZWx2ZXMgaWYgZHVwMigpCiAgICAgICAgd291bGQgYmUgYSBuby1vcCAoaXNzdWUgIzEwODA2KS4gKi8KICAgICBpZiAocDJjcmVhZCA9PSAwKSB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChwMmNyZWFkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKHAyY3JlYWQsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKHAyY3JlYWQgIT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUocDJjcmVhZCwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKHAyY3JlYWQsIDApKTsgIC8qIHN0ZGluICovCi0gICAgfQorCiAgICAgaWYgKGMycHdyaXRlID09IDEpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGMycHdyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGMycHdyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShjMnB3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoYzJwd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoZHVwMihjMnB3cml0ZSwgMSkpOyAgLyogc3Rkb3V0ICovCi0gICAgfQorCiAgICAgaWYgKGVycndyaXRlID09IDIpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGVycndyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGVycndyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkgewotICAgICAgICBQT1NJWF9DQUxMKGR1cDIoZXJyd3JpdGUsIDIpKTsgIC8qIHN0ZGVyciAqLworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShlcnJ3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisgICAgZWxzZSBpZiAoZXJyd3JpdGUgIT0gLTEpCisgICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCiAKICAgICAvKiBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUgc2FtZSBmZCBtb3JlIHRoYW4gKi8KICAgICAvKiBvbmNlLCBvciBzdGFuZGFyZCBmZHMuICovCi0gICAgaWYgKHAyY3JlYWQgPiAyKSB7CisgICAgaWYgKHAyY3JlYWQgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKHAyY3JlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKSB7CisgICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHdyaXRlKSk7Ci0gICAgfQotICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikgeworICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJ3cml0ZSkpOwotICAgIH0KIAogICAgIGlmIChjd2QpCiAgICAgICAgIFBPU0lYX0NBTEwoY2hkaXIoY3dkKSk7CkBAIC00OTIsNyArNTAxLDcgQEAKICAgICAgICAgLyogV2UgY2FuJ3QgY2FsbCBzdHJlcnJvcihzYXZlZF9lcnJubykuICBJdCBpcyBub3QgYXN5bmMgc2lnbmFsIHNhZmUuCiAgICAgICAgICAqIFRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIGxvb2sgdGhlIGVycm9yIG1lc3NhZ2UgdXAuICovCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlJ1bnRpbWVFcnJvcjowOiIsIDE1KTsKKyAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlN1YnByb2Nlc3NFcnJvcjowOiIsIDE4KTsKICAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgZXJyX21zZywgc3RybGVuKGVycl9tc2cpKTsKICAgICB9CiAgICAgaWYgKHVudXNlZCkgcmV0dXJuOyAgLyogc2lsbHk/IHllcyEgYXZvaWRzIGdjYyBjb21waWxlciB3YXJuaW5nLiAqLwpAQCAtNTQ0LDcgKzU1Myw3IEBACiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGlzZW5hYmxlZCk7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGRpc2FibGUpOwotICAgICAgICAKKwogICAgICAgICBnY19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImdjIik7CiAgICAgICAgIGlmIChnY19tb2R1bGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzIxLDUyICs3MzAsNiBAQAogUmFpc2VzOiBPbmx5IG9uIGFuIGVycm9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy5cblwKICIpOwogCi1QeURvY19TVFJWQVIoc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jLAotImNsb2V4ZWNfcGlwZSgpIC0+IChyZWFkX2VuZCwgd3JpdGVfZW5kKVxuXG5cCi1DcmVhdGUgYSBwaXBlIHdob3NlIGVuZHMgaGF2ZSB0aGUgY2xvZXhlYyBmbGFnIHNldC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXN1YnByb2Nlc3NfY2xvZXhlY19waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlczsKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCi0gICAgewotICAgICAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICBsb25nIG9sZGZsYWdzOwotCi0gICAgICAgIHJlcyA9IHBpcGUoZmRzKTsKLQotICAgICAgICBpZiAocmVzID09IDApIHsKLSAgICAgICAgICAgIG9sZGZsYWdzID0gZmNudGwoZmRzWzBdLCBGX0dFVEZELCAwKTsKLSAgICAgICAgICAgIGlmIChvbGRmbGFncyA8IDApIHJlcyA9IG9sZGZsYWdzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICAgIHJlcyA9IGZjbnRsKGZkc1swXSwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLQotICAgICAgICBpZiAocmVzID09IDApIHsKLSAgICAgICAgICAgIG9sZGZsYWdzID0gZmNudGwoZmRzWzFdLCBGX0dFVEZELCAwKTsKLSAgICAgICAgICAgIGlmIChvbGRmbGFncyA8IDApIHJlcyA9IG9sZGZsYWdzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICAgIHJlcyA9IGZjbnRsKGZkc1sxXSwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAocmVzICE9IDApCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci19Ci0KIC8qIG1vZHVsZSBsZXZlbCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKQEAgLTc3NSw3ICs3MzgsNiBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKICAgICB7ImZvcmtfZXhlYyIsIHN1YnByb2Nlc3NfZm9ya19leGVjLCBNRVRIX1ZBUkFSR1MsIHN1YnByb2Nlc3NfZm9ya19leGVjX2RvY30sCi0gICAgeyJjbG9leGVjX3BpcGUiLCBzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZSwgTUVUSF9OT0FSR1MsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwppbmRleCAyMWEyYjA5Li40Mzc3ZWUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYworKysgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwpAQCAtMTY4LDkgKzE2OCw5IEBACiAvKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovCiAvKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1pbml0X2J5X2FycmF5KFJhbmRvbU9iamVjdCAqc2VsZiwgdW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCB1bnNpZ25lZCBsb25nIGtleV9sZW5ndGgpCitpbml0X2J5X2FycmF5KFJhbmRvbU9iamVjdCAqc2VsZiwgdW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCBzaXplX3Qga2V5X2xlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgaiwgazsgICAgICAgLyogd2FzIHNpZ25lZCBpbiB0aGUgb3JpZ2luYWwgY29kZS4gUkRIIDEyLzE2LzIwMDIgKi8KKyAgICBzaXplX3QgaSwgaiwgazsgICAgICAgLyogd2FzIHNpZ25lZCBpbiB0aGUgb3JpZ2luYWwgY29kZS4gUkRIIDEyLzE2LzIwMDIgKi8KICAgICB1bnNpZ25lZCBsb25nICptdDsKIAogICAgIG10ID0gc2VsZi0+c3RhdGU7CkBAIC0xNzksNyArMTc5LDcgQEAKICAgICBrID0gKE4+a2V5X2xlbmd0aCA/IE4gOiBrZXlfbGVuZ3RoKTsKICAgICBmb3IgKDsgazsgay0tKSB7CiAgICAgICAgIG10W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE2NjQ1MjVVTCkpCi0gICAgICAgICAgICAgICAgICsgaW5pdF9rZXlbal0gKyBqOyAvKiBub24gbGluZWFyICovCisgICAgICAgICAgICAgICAgICsgaW5pdF9rZXlbal0gKyAodW5zaWduZWQgbG9uZylqOyAvKiBub24gbGluZWFyICovCiAgICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi8KICAgICAgICAgaSsrOyBqKys7CiAgICAgICAgIGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9CkBAIC0xODcsNyArMTg3LDcgQEAKICAgICB9CiAgICAgZm9yIChrPU4tMTsgazsgay0tKSB7CiAgICAgICAgIG10W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE1NjYwODM5NDFVTCkpCi0gICAgICAgICAgICAgICAgIC0gaTsgLyogbm9uIGxpbmVhciAqLworICAgICAgICAgICAgICAgICAtICh1bnNpZ25lZCBsb25nKWk7IC8qIG5vbiBsaW5lYXIgKi8KICAgICAgICAgbXRbaV0gJj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwogICAgICAgICBpKys7CiAgICAgICAgIGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9CkBAIC0yMDcsMTQgKzIwNywxMSBAQAogcmFuZG9tX3NlZWQoUmFuZG9tT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsgICAgICAgICAgICAvKiBndWlsdHkgdW50aWwgcHJvdmVkIGlubm9jZW50ICovCi0gICAgUHlPYmplY3QgKm1hc2tsb3dlciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRoaXJ0eXR3byA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm4gPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgKm5ld19rZXksICprZXkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcga2V5bWF4OyAgICAgICAgICAgICAgIC8qICMgb2YgYWxsb2NhdGVkIHNsb3RzIGluIGtleSAqLwotICAgIHVuc2lnbmVkIGxvbmcga2V5dXNlZDsgICAgICAgICAgICAgIC8qICMgb2YgdXNlZCBzbG90cyBpbiBrZXkgKi8KLSAgICBpbnQgZXJyOwotCisgICAgdW5zaWduZWQgbG9uZyAqa2V5ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICprZXlfYXNfYnl0ZXMgPSBOVUxMOworICAgIHNpemVfdCBiaXRzLCBrZXl1c2VkLCBpOworICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKmFyZyA9IE5VTEw7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZWVkIiwgMCwgMSwgJmFyZykpCkBAIC0yNDMsNjkgKzI0MCw0NiBAQAogICAgIGlmIChuID09IE5VTEwpCiAgICAgICAgIGdvdG8gRG9uZTsKIAotICAgIC8qIE5vdyBzcGxpdCBuIGludG8gMzItYml0IGNodW5rcywgZnJvbSB0aGUgcmlnaHQuICBFYWNoIHBpZWNlIGlzCi0gICAgICogc3RvcmVkIGludG8ga2V5LCB3aGljaCBoYXMgYSBjYXBhY2l0eSBvZiBrZXltYXggY2h1bmtzLCBvZiB3aGljaAotICAgICAqIGtleXVzZWQgYXJlIGZpbGxlZC4gIEFsYXMsIHRoZSByZXBlYXRlZCBzaGlmdGluZyBtYWtlcyB0aGlzIGEKLSAgICAgKiBxdWFkcmF0aWMtdGltZSBhbGdvcml0aG07IHdlJ2QgcmVhbGx5IGxpa2UgdG8gdXNlCi0gICAgICogX1B5TG9uZ19Bc0J5dGVBcnJheSBoZXJlLCBidXQgdGhlbiB3ZSdkIGhhdmUgdG8gYnJlYWsgaW50byB0aGUKLSAgICAgKiBsb25nIHJlcHJlc2VudGF0aW9uIHRvIGZpZ3VyZSBvdXQgaG93IGJpZyBhbiBhcnJheSB3YXMgbmVlZGVkCi0gICAgICogaW4gYWR2YW5jZS4KLSAgICAgKi8KLSAgICBrZXltYXggPSA4OyAgICAgICAgIC8qIGFyYml0cmFyeTsgZ3Jvd3MgbGF0ZXIgaWYgbmVlZGVkICovCi0gICAga2V5dXNlZCA9IDA7Ci0gICAga2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9NYWxsb2Moa2V5bWF4ICogc2l6ZW9mKCprZXkpKTsKLSAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gKi8KKyAgICBiaXRzID0gX1B5TG9uZ19OdW1CaXRzKG4pOworICAgIGlmIChiaXRzID09IChzaXplX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgbWFza2xvd2VyID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoMHhmZmZmZmZmZlUpOwotICAgIGlmIChtYXNrbG93ZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRoaXJ0eXR3byA9IFB5TG9uZ19Gcm9tTG9uZygzMkwpOwotICAgIGlmICh0aGlydHl0d28gPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHdoaWxlICgoZXJyPVB5T2JqZWN0X0lzVHJ1ZShuKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKm5ld247Ci0gICAgICAgIFB5T2JqZWN0ICpweWNodW5rOwotICAgICAgICB1bnNpZ25lZCBsb25nIGNodW5rOworICAgIC8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgMzItYml0IGNodW5rcyB0aGlzIGdpdmVzIHVzLiAqLworICAgIGtleXVzZWQgPSBiaXRzID09IDAgPyAxIDogKGJpdHMgLSAxKSAvIDMyICsgMTsKIAotICAgICAgICBpZiAoZXJyID09IC0xKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBweWNodW5rID0gUHlOdW1iZXJfQW5kKG4sIG1hc2tsb3dlcik7Ci0gICAgICAgIGlmIChweWNodW5rID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIGNodW5rID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHB5Y2h1bmspOwotICAgICAgICBQeV9ERUNSRUYocHljaHVuayk7Ci0gICAgICAgIGlmIChjaHVuayA9PSAodW5zaWduZWQgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBuZXduID0gUHlOdW1iZXJfUnNoaWZ0KG4sIHRoaXJ0eXR3byk7Ci0gICAgICAgIGlmIChuZXduID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIFB5X0RFQ1JFRihuKTsKLSAgICAgICAgbiA9IG5ld247Ci0gICAgICAgIGlmIChrZXl1c2VkID49IGtleW1heCkgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBiaWdnZXIgPSBrZXltYXggPDwgMTsKLSAgICAgICAgICAgIGlmICgoYmlnZ2VyID4+IDEpICE9IGtleW1heCB8fAotICAgICAgICAgICAgICAgIGJpZ2dlciA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKCprZXkpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXdfa2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9SZWFsbG9jKGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlciAqIHNpemVvZigqa2V5KSk7Ci0gICAgICAgICAgICBpZiAobmV3X2tleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIGtleSA9IG5ld19rZXk7Ci0gICAgICAgICAgICBrZXltYXggPSBiaWdnZXI7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KGtleXVzZWQgPCBrZXltYXgpOwotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IGNodW5rOworICAgIC8qIENvbnZlcnQgc2VlZCB0byBieXRlIHNlcXVlbmNlLiAqLworICAgIGtleV9hc19ieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKChzaXplX3QpNCAqIGtleXVzZWQpOworICAgIGlmIChrZXlfYXNfYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfYXNfYnl0ZXMsIGtleXVzZWQgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgIC8qIGxpdHRsZS1lbmRpYW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOyAvKiB1bnNpZ25lZCAqLworICAgIGlmIChyZXMgPT0gLTEpIHsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CiAgICAgfQogCi0gICAgaWYgKGtleXVzZWQgPT0gMCkKLSAgICAgICAga2V5W2tleXVzZWQrK10gPSAwVUw7CisgICAgLyogRmlsbCBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBmcm9tIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICoga2V5dXNlZCk7CisgICAgaWYgKGtleSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwga2V5dXNlZDsgaSsrKSB7CisgICAgICAgIGtleVtpXSA9CisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDBdIDw8IDApICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMV0gPDwgOCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAyXSA8PCAxNikgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAzXSA8PCAyNCk7CisgICAgfQorICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKICAgICByZXN1bHQgPSBpbml0X2J5X2FycmF5KHNlbGYsIGtleSwga2V5dXNlZCk7CiBEb25lOgotICAgIFB5X1hERUNSRUYobWFza2xvd2VyKTsKLSAgICBQeV9YREVDUkVGKHRoaXJ0eXR3byk7CiAgICAgUHlfWERFQ1JFRihuKTsKICAgICBQeU1lbV9GcmVlKGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4OSw2ICszNjMsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoayA8PSAzMikgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoZ2VucmFuZF9pbnQzMihzZWxmKSA+PiAoMzIgLSBrKSk7CisKICAgICBieXRlcyA9ICgoayAtIDEpIC8gMzIgKyAxKSAqIDQ7CiAgICAgYnl0ZWFycmF5ID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoYnl0ZXMpOwogICAgIGlmIChieXRlYXJyYXkgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9jbGVhbnVwLnB5IGIvTW9kdWxlcy9fc2hhMy9jbGVhbnVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhYmNiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiAgIENocmlzdGlhbiBIZWltZXMgKGNocmlzdGlhbkBweXRob24ub3JnKQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjCisjIGNsZWFudXAgS2VjY2FrIHNvdXJjZXMKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworQ1BQMSA9IHJlLmNvbXBpbGUoIl4vLyguKikiKQorQ1BQMiA9IHJlLmNvbXBpbGUoIlwgLy8oLiopIikKKworU1RBVElDUyA9ICgidm9pZCAiLCAiaW50ICIsICJIYXNoUmV0dXJuICIsICJjb25zdCBVSU5UNjQgIiwgIlVJTlQxNiAiKQorCitIRVJFID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitLRUNDQUsgPSBvcy5wYXRoLmpvaW4oSEVSRSwgImtlY2NhayIpCisKK2RlZiBnZXRmaWxlcygpOgorICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoS0VDQ0FLKToKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihLRUNDQUssIG5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpOgorICAgICAgICAgICAgeWllbGQgbmFtZQorCitkZWYgY2xlYW51cChmKToKKyAgICBidWYgPSBbXQorICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICMgbWFyayBhbGwgZnVuY3Rpb25zIGFuZCBnbG9iYWwgZGF0YSBhcyBzdGF0aWMKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKFNUQVRJQ1MpOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgic3RhdGljICIgKyBsaW5lKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyByZW1vdmUgVUlOVDY0IHR5cGVkZWYsIHdlIGhhdmUgb3VyIG93bgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCIpOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgiLyogJXMgKi9cbiIgJSBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHJlbW92ZSAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIgorICAgICAgICBpZiAiYnJnX2VuZGlhbi5oIiBpbiBsaW5lOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgiLyogJXMgKi9cbiIgJSBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHRyYW5zZm9ybSBDKysgY29tbWVudHMgaW50byBBTlNJIEMgY29tbWVudHMKKyAgICAgICAgbGluZSA9IENQUDEuc3ViKHIiLyogXDEgKi8iLCBsaW5lKQorICAgICAgICBsaW5lID0gQ1BQMi5zdWIociIgLyogXDEgKi8iLCBsaW5lKQorICAgICAgICBidWYuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuICIiLmpvaW4oYnVmKQorCitmb3IgbmFtZSBpbiBnZXRmaWxlcygpOgorICAgIHdpdGggb3BlbihuYW1lKSBhcyBmOgorICAgICAgICByZXMgPSBjbGVhbnVwKGYpCisgICAgd2l0aCBvcGVuKG5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZXMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItcnZrLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzkwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItcnZrLm1hY3JvcwpAQCAtMCwwICsxLDU1NSBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSBSb25ueSBWYW4gS2VlciwKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCitzdGF0aWMgY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50MlsyKjI0XSA9Cit7CisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDg5VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDhiVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDAwMDhiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDA4MDg4VUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDgyVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDgyVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDhiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDhhVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDgxVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDgxVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDgzVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDAzVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDA4MDg4VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDgyVUwKK307CisKKyN1bmRlZiByb3VuZHMKKworI2RlZmluZSByb3VuZHMgXAoreyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEJhLCBCZSwgQmksIEJvLCBCdTsgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEN3LCBDeCwgQ3ksIEN6OyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKwljb25zdCBVSU5UMzIgKiBwUm91bmRDb25zdGFudHMgPSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDI7IFwKKyAgICBVSU5UMzIgaTsgXAorXAorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpIFwKK1wKKyAgICBmb3IoIGkgPSAxMjsgaSAhPSAwOyAtLWkgKSB7IFwKKwkgICAgQ3ggPSBBYnUwXkFndTBeQWt1MF5BbXUwXkFzdTA7IFwKKwkgICAgRHUxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisJICAgIERhMCA9IEN4XlJPTDMyKER1MSwgMSk7IFwKKwkgICAgQ3ogPSBBYnUxXkFndTFeQWt1MV5BbXUxXkFzdTE7IFwKKwkgICAgRHUwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisJICAgIERhMSA9IEN6XkR1MDsgXAorXAorCSAgICBDdyA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorCSAgICBEbzAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgQ3kgPSBBYmkxXkFnaTFeQWtpMV5BbWkxXkFzaTE7IFwKKwkgICAgRG8xID0gQ3leQ3g7IFwKK1wKKwkgICAgQ3ggPSBBYmEwXkFnYTBeQWthMF5BbWEwXkFzYTA7IFwKKwkgICAgRGUwID0gQ3heUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN6ID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisJICAgIERlMSA9IEN6XkN3OyBcCitcCisJICAgIEN5ID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisJICAgIERpMCA9IER1MF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3cgPSBBYm8wXkFnbzBeQWtvMF5BbW8wXkFzbzA7IFwKKwkgICAgRGkxID0gRHUxXkN3OyBcCitcCisJICAgIER1MCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBEdTEgPSBDeV5DeDsgXAorXAorCSAgICBBYmEwIF49IERhMDsgXAorCSAgICBCYSA9IEFiYTA7IFwKKwkgICAgQWdlMCBePSBEZTA7IFwKKwkgICAgQmUgPSBST0wzMihBZ2UwLCAyMik7IFwKKwkgICAgQWtpMSBePSBEaTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2kxLCAyMik7IFwKKwkgICAgQW1vMSBePSBEbzE7IFwKKwkgICAgQm8gPSBST0wzMihBbW8xLCAxMSk7IFwKKwkgICAgQXN1MCBePSBEdTA7IFwKKwkgICAgQnUgPSBST0wzMihBc3UwLCA3KTsgXAorCSAgICBFYmEwID0gICBCYSBeKCh+QmUpJiAgQmkgKSBeICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEViZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEViaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVibzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVidTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFibzAgXj0gRG8wOyBcCisJICAgIEJhID0gUk9MMzIoQWJvMCwgMTQpOyBcCisJICAgIEFndTAgXj0gRHUwOyBcCisJICAgIEJlID0gUk9MMzIoQWd1MCwgMTApOyBcCisJICAgIEFrYTEgXj0gRGExOyBcCisJICAgIEJpID0gUk9MMzIoQWthMSwgMik7IFwKKwkgICAgQW1lMSBePSBEZTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWUxLCAyMyk7IFwKKwkgICAgQXNpMSBePSBEaTE7IFwKKwkgICAgQnUgPSBST0wzMihBc2kxLCAzMSk7IFwKKwkgICAgRWdhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWdlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWdpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWdvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWd1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJlMSBePSBEZTE7IFwKKwkgICAgQmEgPSBST0wzMihBYmUxLCAxKTsgXAorCSAgICBBZ2kwIF49IERpMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnaTAsIDMpOyBcCisJICAgIEFrbzEgXj0gRG8xOyBcCisJICAgIEJpID0gUk9MMzIoQWtvMSwgMTMpOyBcCisJICAgIEFtdTAgXj0gRHUwOyBcCisJICAgIEJvID0gUk9MMzIoQW11MCwgNCk7IFwKKwkgICAgQXNhMCBePSBEYTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2EwLCA5KTsgXAorCSAgICBFa2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFa2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFa2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFa28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFa3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYnUxIF49IER1MTsgXAorCSAgICBCYSA9IFJPTDMyKEFidTEsIDE0KTsgXAorCSAgICBBZ2EwIF49IERhMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnYTAsIDE4KTsgXAorCSAgICBBa2UwIF49IERlMDsgXAorCSAgICBCaSA9IFJPTDMyKEFrZTAsIDUpOyBcCisJICAgIEFtaTEgXj0gRGkxOyBcCisJICAgIEJvID0gUk9MMzIoQW1pMSwgOCk7IFwKKwkgICAgQXNvMCBePSBEbzA7IFwKKwkgICAgQnUgPSBST0wzMihBc28wLCAyOCk7IFwKKwkgICAgRW1hMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRW1lMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRW1pMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRW1vMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRW11MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJpMCBePSBEaTA7IFwKKwkgICAgQmEgPSBST0wzMihBYmkwLCAzMSk7IFwKKwkgICAgQWdvMSBePSBEbzE7IFwKKwkgICAgQmUgPSBST0wzMihBZ28xLCAyOCk7IFwKKwkgICAgQWt1MSBePSBEdTE7IFwKKwkgICAgQmkgPSBST0wzMihBa3UxLCAyMCk7IFwKKwkgICAgQW1hMSBePSBEYTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWExLCAyMSk7IFwKKwkgICAgQXNlMCBePSBEZTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2UwLCAxKTsgXAorCSAgICBFc2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFc2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFc2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFc28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFc3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmExIF49IERhMTsgXAorCSAgICBCYSA9IEFiYTE7IFwKKwkgICAgQWdlMSBePSBEZTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2UxLCAyMik7IFwKKwkgICAgQWtpMCBePSBEaTA7IFwKKwkgICAgQmkgPSBST0wzMihBa2kwLCAyMSk7IFwKKwkgICAgQW1vMCBePSBEbzA7IFwKKwkgICAgQm8gPSBST0wzMihBbW8wLCAxMCk7IFwKKwkgICAgQXN1MSBePSBEdTE7IFwKKwkgICAgQnUgPSBST0wzMihBc3UxLCA3KTsgXAorCSAgICBFYmExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFYmExIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEViZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEViaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVibzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVidTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFibzEgXj0gRG8xOyBcCisJICAgIEJhID0gUk9MMzIoQWJvMSwgMTQpOyBcCisJICAgIEFndTEgXj0gRHUxOyBcCisJICAgIEJlID0gUk9MMzIoQWd1MSwgMTApOyBcCisJICAgIEFrYTAgXj0gRGEwOyBcCisJICAgIEJpID0gUk9MMzIoQWthMCwgMSk7IFwKKwkgICAgQW1lMCBePSBEZTA7IFwKKwkgICAgQm8gPSBST0wzMihBbWUwLCAyMik7IFwKKwkgICAgQXNpMCBePSBEaTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2kwLCAzMCk7IFwKKwkgICAgRWdhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWdlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWdpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWdvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWd1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJlMCBePSBEZTA7IFwKKwkgICAgQmEgPSBBYmUwOyBcCisJICAgIEFnaTEgXj0gRGkxOyBcCisJICAgIEJlID0gUk9MMzIoQWdpMSwgMyk7IFwKKwkgICAgQWtvMCBePSBEbzA7IFwKKwkgICAgQmkgPSBST0wzMihBa28wLCAxMik7IFwKKwkgICAgQW11MSBePSBEdTE7IFwKKwkgICAgQm8gPSBST0wzMihBbXUxLCA0KTsgXAorCSAgICBBc2ExIF49IERhMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzYTEsIDkpOyBcCisJICAgIEVrYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVrZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVraTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVrbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVrdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFidTAgXj0gRHUwOyBcCisJICAgIEJhID0gUk9MMzIoQWJ1MCwgMTMpOyBcCisJICAgIEFnYTEgXj0gRGExOyBcCisJICAgIEJlID0gUk9MMzIoQWdhMSwgMTgpOyBcCisJICAgIEFrZTEgXj0gRGUxOyBcCisJICAgIEJpID0gUk9MMzIoQWtlMSwgNSk7IFwKKwkgICAgQW1pMCBePSBEaTA7IFwKKwkgICAgQm8gPSBST0wzMihBbWkwLCA3KTsgXAorCSAgICBBc28xIF49IERvMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzbzEsIDI4KTsgXAorCSAgICBFbWExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFbWUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFbWkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFbW8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFbXUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmkxIF49IERpMTsgXAorCSAgICBCYSA9IFJPTDMyKEFiaTEsIDMxKTsgXAorCSAgICBBZ28wIF49IERvMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnbzAsIDI3KTsgXAorCSAgICBBa3UwIF49IER1MDsgXAorCSAgICBCaSA9IFJPTDMyKEFrdTAsIDE5KTsgXAorCSAgICBBbWEwIF49IERhMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtYTAsIDIwKTsgXAorCSAgICBBc2UxIF49IERlMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzZTEsIDEpOyBcCisJICAgIEVzYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVzZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVzaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVzbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVzdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEN4ID0gRWJ1MF5FZ3UwXkVrdTBeRW11MF5Fc3UwOyBcCisJICAgIER1MSA9IEViZTFeRWdlMV5Fa2UxXkVtZTFeRXNlMTsgXAorCSAgICBEYTAgPSBDeF5ST0wzMihEdTEsIDEpOyBcCisJICAgIEN6ID0gRWJ1MV5FZ3UxXkVrdTFeRW11MV5Fc3UxOyBcCisJICAgIER1MCA9IEViZTBeRWdlMF5Fa2UwXkVtZTBeRXNlMDsgXAorCSAgICBEYTEgPSBDel5EdTA7IFwKK1wKKwkgICAgQ3cgPSBFYmkwXkVnaTBeRWtpMF5FbWkwXkVzaTA7IFwKKwkgICAgRG8wID0gQ3deUk9MMzIoQ3osIDEpOyBcCisJICAgIEN5ID0gRWJpMV5FZ2kxXkVraTFeRW1pMV5Fc2kxOyBcCisJICAgIERvMSA9IEN5XkN4OyBcCitcCisJICAgIEN4ID0gRWJhMF5FZ2EwXkVrYTBeRW1hMF5Fc2EwOyBcCisJICAgIERlMCA9IEN4XlJPTDMyKEN5LCAxKTsgXAorCSAgICBDeiA9IEViYTFeRWdhMV5Fa2ExXkVtYTFeRXNhMTsgXAorCSAgICBEZTEgPSBDel5DdzsgXAorXAorCSAgICBDeSA9IEVibzFeRWdvMV5Fa28xXkVtbzFeRXNvMTsgXAorCSAgICBEaTAgPSBEdTBeUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN3ID0gRWJvMF5FZ28wXkVrbzBeRW1vMF5Fc28wOyBcCisJICAgIERpMSA9IER1MV5DdzsgXAorXAorCSAgICBEdTAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgRHUxID0gQ3leQ3g7IFwKK1wKKwkgICAgRWJhMCBePSBEYTA7IFwKKwkgICAgQmEgPSBFYmEwOyBcCisJICAgIEVnZTAgXj0gRGUwOyBcCisJICAgIEJlID0gUk9MMzIoRWdlMCwgMjIpOyBcCisJICAgIEVraTEgXj0gRGkxOyBcCisJICAgIEJpID0gUk9MMzIoRWtpMSwgMjIpOyBcCisJICAgIEVtbzEgXj0gRG8xOyBcCisJICAgIEJvID0gUk9MMzIoRW1vMSwgMTEpOyBcCisJICAgIEVzdTAgXj0gRHUwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXN1MCwgNyk7IFwKKwkgICAgQWJhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWJhMCBePSAqKHBSb3VuZENvbnN0YW50cysrKTsgXAorCSAgICBBYmUwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBYmkwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBYm8wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBYnUwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYm8wIF49IERvMDsgXAorCSAgICBCYSA9IFJPTDMyKEVibzAsIDE0KTsgXAorCSAgICBFZ3UwIF49IER1MDsgXAorCSAgICBCZSA9IFJPTDMyKEVndTAsIDEwKTsgXAorCSAgICBFa2ExIF49IERhMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrYTEsIDIpOyBcCisJICAgIEVtZTEgXj0gRGUxOyBcCisJICAgIEJvID0gUk9MMzIoRW1lMSwgMjMpOyBcCisJICAgIEVzaTEgXj0gRGkxOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNpMSwgMzEpOyBcCisJICAgIEFnYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFnZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFnaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFnbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFndTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViZTEgXj0gRGUxOyBcCisJICAgIEJhID0gUk9MMzIoRWJlMSwgMSk7IFwKKwkgICAgRWdpMCBePSBEaTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2kwLCAzKTsgXAorCSAgICBFa28xIF49IERvMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrbzEsIDEzKTsgXAorCSAgICBFbXUwIF49IER1MDsgXAorCSAgICBCbyA9IFJPTDMyKEVtdTAsIDQpOyBcCisJICAgIEVzYTAgXj0gRGEwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNhMCwgOSk7IFwKKwkgICAgQWthMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWtlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWtpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWtvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWt1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJ1MSBePSBEdTE7IFwKKwkgICAgQmEgPSBST0wzMihFYnUxLCAxNCk7IFwKKwkgICAgRWdhMCBePSBEYTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2EwLCAxOCk7IFwKKwkgICAgRWtlMCBePSBEZTA7IFwKKwkgICAgQmkgPSBST0wzMihFa2UwLCA1KTsgXAorCSAgICBFbWkxIF49IERpMTsgXAorCSAgICBCbyA9IFJPTDMyKEVtaTEsIDgpOyBcCisJICAgIEVzbzAgXj0gRG8wOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNvMCwgMjgpOyBcCisJICAgIEFtYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFtZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFtaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFtbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFtdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViaTAgXj0gRGkwOyBcCisJICAgIEJhID0gUk9MMzIoRWJpMCwgMzEpOyBcCisJICAgIEVnbzEgXj0gRG8xOyBcCisJICAgIEJlID0gUk9MMzIoRWdvMSwgMjgpOyBcCisJICAgIEVrdTEgXj0gRHUxOyBcCisJICAgIEJpID0gUk9MMzIoRWt1MSwgMjApOyBcCisJICAgIEVtYTEgXj0gRGExOyBcCisJICAgIEJvID0gUk9MMzIoRW1hMSwgMjEpOyBcCisJICAgIEVzZTAgXj0gRGUwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNlMCwgMSk7IFwKKwkgICAgQXNhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQXNlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQXNpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQXNvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQXN1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJhMSBePSBEYTE7IFwKKwkgICAgQmEgPSBFYmExOyBcCisJICAgIEVnZTEgXj0gRGUxOyBcCisJICAgIEJlID0gUk9MMzIoRWdlMSwgMjIpOyBcCisJICAgIEVraTAgXj0gRGkwOyBcCisJICAgIEJpID0gUk9MMzIoRWtpMCwgMjEpOyBcCisJICAgIEVtbzAgXj0gRG8wOyBcCisJICAgIEJvID0gUk9MMzIoRW1vMCwgMTApOyBcCisJICAgIEVzdTEgXj0gRHUxOyBcCisJICAgIEJ1ID0gUk9MMzIoRXN1MSwgNyk7IFwKKwkgICAgQWJhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWJhMSBePSAqKHBSb3VuZENvbnN0YW50cysrKTsgXAorCSAgICBBYmUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBYmkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBYm8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBYnUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYm8xIF49IERvMTsgXAorCSAgICBCYSA9IFJPTDMyKEVibzEsIDE0KTsgXAorCSAgICBFZ3UxIF49IER1MTsgXAorCSAgICBCZSA9IFJPTDMyKEVndTEsIDEwKTsgXAorCSAgICBFa2EwIF49IERhMDsgXAorCSAgICBCaSA9IFJPTDMyKEVrYTAsIDEpOyBcCisJICAgIEVtZTAgXj0gRGUwOyBcCisJICAgIEJvID0gUk9MMzIoRW1lMCwgMjIpOyBcCisJICAgIEVzaTAgXj0gRGkwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNpMCwgMzApOyBcCisJICAgIEFnYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFnZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFnaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFnbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFndTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViZTAgXj0gRGUwOyBcCisJICAgIEJhID0gRWJlMDsgXAorCSAgICBFZ2kxIF49IERpMTsgXAorCSAgICBCZSA9IFJPTDMyKEVnaTEsIDMpOyBcCisJICAgIEVrbzAgXj0gRG8wOyBcCisJICAgIEJpID0gUk9MMzIoRWtvMCwgMTIpOyBcCisJICAgIEVtdTEgXj0gRHUxOyBcCisJICAgIEJvID0gUk9MMzIoRW11MSwgNCk7IFwKKwkgICAgRXNhMSBePSBEYTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2ExLCA5KTsgXAorCSAgICBBa2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBa2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBa2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBa28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBa3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYnUwIF49IER1MDsgXAorCSAgICBCYSA9IFJPTDMyKEVidTAsIDEzKTsgXAorCSAgICBFZ2ExIF49IERhMTsgXAorCSAgICBCZSA9IFJPTDMyKEVnYTEsIDE4KTsgXAorCSAgICBFa2UxIF49IERlMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrZTEsIDUpOyBcCisJICAgIEVtaTAgXj0gRGkwOyBcCisJICAgIEJvID0gUk9MMzIoRW1pMCwgNyk7IFwKKwkgICAgRXNvMSBePSBEbzE7IFwKKwkgICAgQnUgPSBST0wzMihFc28xLCAyOCk7IFwKKwkgICAgQW1hMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQW1lMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQW1pMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQW1vMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQW11MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJpMSBePSBEaTE7IFwKKwkgICAgQmEgPSBST0wzMihFYmkxLCAzMSk7IFwKKwkgICAgRWdvMCBePSBEbzA7IFwKKwkgICAgQmUgPSBST0wzMihFZ28wLCAyNyk7IFwKKwkgICAgRWt1MCBePSBEdTA7IFwKKwkgICAgQmkgPSBST0wzMihFa3UwLCAxOSk7IFwKKwkgICAgRW1hMCBePSBEYTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWEwLCAyMCk7IFwKKwkgICAgRXNlMSBePSBEZTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2UxLCAxKTsgXAorCSAgICBBc2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBc2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBc2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBc28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBc3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKSBcCit9CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczEubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2Q2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczEubWFjcm9zCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBVSU5UMzIgQWJhMCwgQWJlMCwgQWJpMCwgQWJvMCwgQWJ1MDsgXAorICAgIFVJTlQzMiBBYmExLCBBYmUxLCBBYmkxLCBBYm8xLCBBYnUxOyBcCisgICAgVUlOVDMyIEFnYTAsIEFnZTAsIEFnaTAsIEFnbzAsIEFndTA7IFwKKyAgICBVSU5UMzIgQWdhMSwgQWdlMSwgQWdpMSwgQWdvMSwgQWd1MTsgXAorICAgIFVJTlQzMiBBa2EwLCBBa2UwLCBBa2kwLCBBa28wLCBBa3UwOyBcCisgICAgVUlOVDMyIEFrYTEsIEFrZTEsIEFraTEsIEFrbzEsIEFrdTE7IFwKKyAgICBVSU5UMzIgQW1hMCwgQW1lMCwgQW1pMCwgQW1vMCwgQW11MDsgXAorICAgIFVJTlQzMiBBbWExLCBBbWUxLCBBbWkxLCBBbW8xLCBBbXUxOyBcCisgICAgVUlOVDMyIEFzYTAsIEFzZTAsIEFzaTAsIEFzbzAsIEFzdTA7IFwKKyAgICBVSU5UMzIgQXNhMSwgQXNlMSwgQXNpMSwgQXNvMSwgQXN1MTsgXAorICAgIFVJTlQzMiBCYmEwLCBCYmUwLCBCYmkwLCBCYm8wLCBCYnUwOyBcCisgICAgVUlOVDMyIEJiYTEsIEJiZTEsIEJiaTEsIEJibzEsIEJidTE7IFwKKyAgICBVSU5UMzIgQmdhMCwgQmdlMCwgQmdpMCwgQmdvMCwgQmd1MDsgXAorICAgIFVJTlQzMiBCZ2ExLCBCZ2UxLCBCZ2kxLCBCZ28xLCBCZ3UxOyBcCisgICAgVUlOVDMyIEJrYTAsIEJrZTAsIEJraTAsIEJrbzAsIEJrdTA7IFwKKyAgICBVSU5UMzIgQmthMSwgQmtlMSwgQmtpMSwgQmtvMSwgQmt1MTsgXAorICAgIFVJTlQzMiBCbWEwLCBCbWUwLCBCbWkwLCBCbW8wLCBCbXUwOyBcCisgICAgVUlOVDMyIEJtYTEsIEJtZTEsIEJtaTEsIEJtbzEsIEJtdTE7IFwKKyAgICBVSU5UMzIgQnNhMCwgQnNlMCwgQnNpMCwgQnNvMCwgQnN1MDsgXAorICAgIFVJTlQzMiBCc2ExLCBCc2UxLCBCc2kxLCBCc28xLCBCc3UxOyBcCisgICAgVUlOVDMyIENhMCwgQ2UwLCBDaTAsIENvMCwgQ3UwOyBcCisgICAgVUlOVDMyIENhMSwgQ2UxLCBDaTEsIENvMSwgQ3UxOyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhMCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorICAgIENhMSA9IEFiYTFeQWdhMV5Ba2ExXkFtYTFeQXNhMTsgXAorICAgIENlMCA9IEFiZTBeQWdlMF5Ba2UwXkFtZTBeQXNlMDsgXAorICAgIENlMSA9IEFiZTFeQWdlMV5Ba2UxXkFtZTFeQXNlMTsgXAorICAgIENpMCA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorICAgIENpMSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorICAgIENvMCA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorICAgIENvMSA9IEFibzFeQWdvMV5Ba28xXkFtbzFeQXNvMTsgXAorICAgIEN1MCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorICAgIEN1MSA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCAgQmJlMCB8ICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBDYTAgPSBFIyNiYTA7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApfCAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oICBCYm8wICYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCAgQmJ1MCB8ICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXiggIEJiYTAgJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXiggIEJiZTEgfCAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQ2ExID0gRSMjYmExOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKXwgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCAgQmJvMSAmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXiggIEJidTEgfCAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oICBCYmExICYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBDZTAgXj0gRSMjZ2UwOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXiggIEJndTAgfCAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oICBCZ2kxICYgIEJnbzEgKTsgXAorICAgIENlMSBePSBFIyNnZTE7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oICBCZ2ExICYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCAgQmtlMSB8ICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICh+QmtvMSleKCAgQmt1MSB8ICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXiggIEJtZTAgJiAgQm1pMCApOyBcCisgICAgQ2EwIF49IEUjI21hMDsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCAgQm1pMCB8ICBCbW8wICk7IFwKKyAgICBDZTAgXj0gRSMjbWUwOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCAgQm1hMCB8ICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIENhMSBePSBFIyNtYTE7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXiggIEJtaTEgfCAgQm1vMSApOyBcCisgICAgQ2UxIF49IEUjI21lMTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSl8ICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQ2EwIF49IEUjI3NhMDsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXiggIEJzdTAgfCAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBDYTEgXj0gRSMjc2ExOyBcCisgICAgRSMjc2UxID0gKH5Cc2UxKV4oICBCc2kxIHwgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oICBCc2ExICYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXiggIEJnaTAgJiAgQmdvMCApOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXiggIEJnYTAgJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oICBCZ28xIHwofkJndTEpKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCAgQmtlMCB8ICBCa2kwICk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICh+QmtvMCleKCAgQmt1MCB8ICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCAgQmtpMSAmICBCa28xICk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCAgQmthMSAmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXiggIEJtZTAgJiAgQm1pMCApOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCl8ICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCAgQm1lMSAmICBCbWkxICk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXiggIEJtaTEgfCAgQm1vMSApOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICh+Qm1vMSleKCAgQm11MSAmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBFIyNzZTAgPSAofkJzZTApXiggIEJzaTAgfCAgQnNvMCApOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXiggIEJzYTAgJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oICBCc28xICYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCh+QmJlMCkmICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBDYTAgPSBFIyNiYTA7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXigofkJiZTEpJiAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQ2ExID0gRSMjYmExOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCh+QmdpMCkmICBCZ28wICk7IFwKKyAgICBDZTAgXj0gRSMjZ2UwOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCh+QmdhMCkmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oKH5CZ2kxKSYgIEJnbzEgKTsgXAorICAgIENlMSBePSBFIyNnZTE7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXigofkJnbzEpJiAgQmd1MSApOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oKH5Ca2UwKSYgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gICBCa28wIF4oKH5Ca3UwKSYgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oKH5Ca2kxKSYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oKH5Ca2ExKSYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgQ2EwIF49IEUjI21hMDsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCh+Qm1pMCkmICBCbW8wICk7IFwKKyAgICBDZTAgXj0gRSMjbWUwOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKSYgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oKH5CbWUxKSYgIEJtaTEgKTsgXAorICAgIENhMSBePSBFIyNtYTE7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgQ2UxIF49IEUjI21lMTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gICBCbW8xIF4oKH5CbXUxKSYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQ2EwIF49IEUjI3NhMDsgXAorICAgIEUjI3NlMCA9ICAgQnNlMCBeKCh+QnNpMCkmICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCh+QnNhMCkmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBDYTEgXj0gRSMjc2ExOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXigofkJzbzEpJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCh+QmJlMCkmICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXigofkJiZTEpJiAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIEUjI2dpMCA9ICAgQmdpMCBeKCh+QmdvMCkmICBCZ3UwICk7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorXAorICAgIEEjI2JvMSBePSBEbzE7IFwKKyAgICBCZ2ExID0gUk9MMzIoQSMjYm8xLCAxNCk7IFwKKyAgICBBIyNndTEgXj0gRHUxOyBcCisgICAgQmdlMSA9IFJPTDMyKEEjI2d1MSwgMTApOyBcCisgICAgQSMja2EwIF49IERhMDsgXAorICAgIEJnaTEgPSBST0wzMihBIyNrYTAsIDEpOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oKH5CZ2kxKSYgIEJnbzEgKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBFIyNnbzEgPSAgIEJnbzEgXigofkJndTEpJiAgQmdhMSApOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgRSMja2UwID0gICBCa2UwIF4oKH5Ca2kwKSYgIEJrbzAgKTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgRSMja3UwID0gICBCa3UwIF4oKH5Ca2EwKSYgIEJrZTAgKTsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgRSMja2kxID0gICBCa2kxIF4oKH5Ca28xKSYgIEJrdTEgKTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCitcCisgICAgQSMjYnUxIF49IER1MTsgXAorICAgIEJtYTAgPSBST0wzMihBIyNidTEsIDE0KTsgXAorICAgIEEjI2dhMCBePSBEYTA7IFwKKyAgICBCbWUwID0gUk9MMzIoQSMjZ2EwLCAxOCk7IFwKKyAgICBBIyNrZTAgXj0gRGUwOyBcCisgICAgQm1pMCA9IFJPTDMyKEEjI2tlMCwgNSk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oKH5CbWUwKSYgIEJtaTAgKTsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCh+Qm1pMCkmICBCbW8wICk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgRSMjbW8wID0gICBCbW8wIF4oKH5CbXUwKSYgIEJtYTAgKTsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oKH5CbWkxKSYgIEJtbzEgKTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgRSMjbXUxID0gICBCbXUxIF4oKH5CbWExKSYgIEJtZTEgKTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIEUjI3NpMCA9ICAgQnNpMCBeKCh+QnNvMCkmICBCc3UwICk7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorXAorICAgIEEjI2JpMSBePSBEaTE7IFwKKyAgICBCc2ExID0gUk9MMzIoQSMjYmkxLCAzMSk7IFwKKyAgICBBIyNnbzAgXj0gRG8wOyBcCisgICAgQnNlMSA9IFJPTDMyKEEjI2dvMCwgMjcpOyBcCisgICAgQSMja3UwIF49IER1MDsgXAorICAgIEJzaTEgPSBST0wzMihBIyNrdTAsIDE5KTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBFIyNzbzEgPSAgIEJzbzEgXigofkJzdTEpJiAgQnNhMSApOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorXAorCisjZW5kaWYgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworCitjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbMjRdID0geworICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMIH07CisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVsyNF0gPSB7CisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDgwMDAwMDhiVUwsCisgICAgMHg4MDAwODA4MFVMLAorICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDA4MDAwVUwsCisgICAgMHg4MDAwODA4OFVMLAorICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwYVVMLAorICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwODA4YlVMLAorICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDgwMDAwMDhhVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDA4M1VMLAorICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4OFVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDgyVUwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl1eaW5wdXRbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdXmlucHV0WzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF07IFwKKyAgICBYIyNiYTEgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM107IFwKKyAgICBYIyNiaTAgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl07IFwKKyAgICBYIyNibzEgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV07IFwKKyAgICBYIyNnYTAgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl07IFwKKyAgICBYIyNnZTEgPSBzdGF0ZVsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV07IFwKKyAgICBYIyNnbzAgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNndTEgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNrZTAgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF07IFwKKyAgICBYIyNraTEgPSBzdGF0ZVsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN107IFwKKyAgICBYIyNrdTAgPSBzdGF0ZVsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF07IFwKKyAgICBYIyNtYTEgPSBzdGF0ZVszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IFgjI2JhMDsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JhMTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JlMDsgXAorICAgIHN0YXRlWyAzXSA9IFgjI2JlMTsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2JpMDsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2JpMTsgXAorICAgIHN0YXRlWyA2XSA9IFgjI2JvMDsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2JvMTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2J1MDsgXAorICAgIHN0YXRlWyA5XSA9IFgjI2J1MTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2dhMDsgXAorICAgIHN0YXRlWzExXSA9IFgjI2dhMTsgXAorICAgIHN0YXRlWzEyXSA9IFgjI2dlMDsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2dlMTsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2dpMDsgXAorICAgIHN0YXRlWzE1XSA9IFgjI2dpMTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2dvMDsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2dvMTsgXAorICAgIHN0YXRlWzE4XSA9IFgjI2d1MDsgXAorICAgIHN0YXRlWzE5XSA9IFgjI2d1MTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI2thMDsgXAorICAgIHN0YXRlWzIxXSA9IFgjI2thMTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI2tlMDsgXAorICAgIHN0YXRlWzIzXSA9IFgjI2tlMTsgXAorICAgIHN0YXRlWzI0XSA9IFgjI2tpMDsgXAorICAgIHN0YXRlWzI1XSA9IFgjI2tpMTsgXAorICAgIHN0YXRlWzI2XSA9IFgjI2tvMDsgXAorICAgIHN0YXRlWzI3XSA9IFgjI2tvMTsgXAorICAgIHN0YXRlWzI4XSA9IFgjI2t1MDsgXAorICAgIHN0YXRlWzI5XSA9IFgjI2t1MTsgXAorICAgIHN0YXRlWzMwXSA9IFgjI21hMDsgXAorICAgIHN0YXRlWzMxXSA9IFgjI21hMTsgXAorICAgIHN0YXRlWzMyXSA9IFgjI21lMDsgXAorICAgIHN0YXRlWzMzXSA9IFgjI21lMTsgXAorICAgIHN0YXRlWzM0XSA9IFgjI21pMDsgXAorICAgIHN0YXRlWzM1XSA9IFgjI21pMTsgXAorICAgIHN0YXRlWzM2XSA9IFgjI21vMDsgXAorICAgIHN0YXRlWzM3XSA9IFgjI21vMTsgXAorICAgIHN0YXRlWzM4XSA9IFgjI211MDsgXAorICAgIHN0YXRlWzM5XSA9IFgjI211MTsgXAorICAgIHN0YXRlWzQwXSA9IFgjI3NhMDsgXAorICAgIHN0YXRlWzQxXSA9IFgjI3NhMTsgXAorICAgIHN0YXRlWzQyXSA9IFgjI3NlMDsgXAorICAgIHN0YXRlWzQzXSA9IFgjI3NlMTsgXAorICAgIHN0YXRlWzQ0XSA9IFgjI3NpMDsgXAorICAgIHN0YXRlWzQ1XSA9IFgjI3NpMTsgXAorICAgIHN0YXRlWzQ2XSA9IFgjI3NvMDsgXAorICAgIHN0YXRlWzQ3XSA9IFgjI3NvMTsgXAorICAgIHN0YXRlWzQ4XSA9IFgjI3N1MDsgXAorICAgIHN0YXRlWzQ5XSA9IFgjI3N1MTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEwID0gWSMjYmEwOyBcCisgICAgWCMjYmExID0gWSMjYmExOyBcCisgICAgWCMjYmUwID0gWSMjYmUwOyBcCisgICAgWCMjYmUxID0gWSMjYmUxOyBcCisgICAgWCMjYmkwID0gWSMjYmkwOyBcCisgICAgWCMjYmkxID0gWSMjYmkxOyBcCisgICAgWCMjYm8wID0gWSMjYm8wOyBcCisgICAgWCMjYm8xID0gWSMjYm8xOyBcCisgICAgWCMjYnUwID0gWSMjYnUwOyBcCisgICAgWCMjYnUxID0gWSMjYnUxOyBcCisgICAgWCMjZ2EwID0gWSMjZ2EwOyBcCisgICAgWCMjZ2ExID0gWSMjZ2ExOyBcCisgICAgWCMjZ2UwID0gWSMjZ2UwOyBcCisgICAgWCMjZ2UxID0gWSMjZ2UxOyBcCisgICAgWCMjZ2kwID0gWSMjZ2kwOyBcCisgICAgWCMjZ2kxID0gWSMjZ2kxOyBcCisgICAgWCMjZ28wID0gWSMjZ28wOyBcCisgICAgWCMjZ28xID0gWSMjZ28xOyBcCisgICAgWCMjZ3UwID0gWSMjZ3UwOyBcCisgICAgWCMjZ3UxID0gWSMjZ3UxOyBcCisgICAgWCMja2EwID0gWSMja2EwOyBcCisgICAgWCMja2ExID0gWSMja2ExOyBcCisgICAgWCMja2UwID0gWSMja2UwOyBcCisgICAgWCMja2UxID0gWSMja2UxOyBcCisgICAgWCMja2kwID0gWSMja2kwOyBcCisgICAgWCMja2kxID0gWSMja2kxOyBcCisgICAgWCMja28wID0gWSMja28wOyBcCisgICAgWCMja28xID0gWSMja28xOyBcCisgICAgWCMja3UwID0gWSMja3UwOyBcCisgICAgWCMja3UxID0gWSMja3UxOyBcCisgICAgWCMjbWEwID0gWSMjbWEwOyBcCisgICAgWCMjbWExID0gWSMjbWExOyBcCisgICAgWCMjbWUwID0gWSMjbWUwOyBcCisgICAgWCMjbWUxID0gWSMjbWUxOyBcCisgICAgWCMjbWkwID0gWSMjbWkwOyBcCisgICAgWCMjbWkxID0gWSMjbWkxOyBcCisgICAgWCMjbW8wID0gWSMjbW8wOyBcCisgICAgWCMjbW8xID0gWSMjbW8xOyBcCisgICAgWCMjbXUwID0gWSMjbXUwOyBcCisgICAgWCMjbXUxID0gWSMjbXUxOyBcCisgICAgWCMjc2EwID0gWSMjc2EwOyBcCisgICAgWCMjc2ExID0gWSMjc2ExOyBcCisgICAgWCMjc2UwID0gWSMjc2UwOyBcCisgICAgWCMjc2UxID0gWSMjc2UxOyBcCisgICAgWCMjc2kwID0gWSMjc2kwOyBcCisgICAgWCMjc2kxID0gWSMjc2kxOyBcCisgICAgWCMjc28wID0gWSMjc28wOyBcCisgICAgWCMjc28xID0gWSMjc28xOyBcCisgICAgWCMjc3UwID0gWSMjc3UwOyBcCisgICAgWCMjc3UxID0gWSMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczIubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTE3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczIubWFjcm9zCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBVSU5UMzIgQWJhMCwgQWJlMCwgQWJpMCwgQWJvMCwgQWJ1MDsgXAorICAgIFVJTlQzMiBBYmExLCBBYmUxLCBBYmkxLCBBYm8xLCBBYnUxOyBcCisgICAgVUlOVDMyIEFnYTAsIEFnZTAsIEFnaTAsIEFnbzAsIEFndTA7IFwKKyAgICBVSU5UMzIgQWdhMSwgQWdlMSwgQWdpMSwgQWdvMSwgQWd1MTsgXAorICAgIFVJTlQzMiBBa2EwLCBBa2UwLCBBa2kwLCBBa28wLCBBa3UwOyBcCisgICAgVUlOVDMyIEFrYTEsIEFrZTEsIEFraTEsIEFrbzEsIEFrdTE7IFwKKyAgICBVSU5UMzIgQW1hMCwgQW1lMCwgQW1pMCwgQW1vMCwgQW11MDsgXAorICAgIFVJTlQzMiBBbWExLCBBbWUxLCBBbWkxLCBBbW8xLCBBbXUxOyBcCisgICAgVUlOVDMyIEFzYTAsIEFzZTAsIEFzaTAsIEFzbzAsIEFzdTA7IFwKKyAgICBVSU5UMzIgQXNhMSwgQXNlMSwgQXNpMSwgQXNvMSwgQXN1MTsgXAorICAgIFVJTlQzMiBCYmEwLCBCYmUwLCBCYmkwLCBCYm8wLCBCYnUwOyBcCisgICAgVUlOVDMyIEJiYTEsIEJiZTEsIEJiaTEsIEJibzEsIEJidTE7IFwKKyAgICBVSU5UMzIgQmdhMCwgQmdlMCwgQmdpMCwgQmdvMCwgQmd1MDsgXAorICAgIFVJTlQzMiBCZ2ExLCBCZ2UxLCBCZ2kxLCBCZ28xLCBCZ3UxOyBcCisgICAgVUlOVDMyIEJrYTAsIEJrZTAsIEJraTAsIEJrbzAsIEJrdTA7IFwKKyAgICBVSU5UMzIgQmthMSwgQmtlMSwgQmtpMSwgQmtvMSwgQmt1MTsgXAorICAgIFVJTlQzMiBCbWEwLCBCbWUwLCBCbWkwLCBCbW8wLCBCbXUwOyBcCisgICAgVUlOVDMyIEJtYTEsIEJtZTEsIEJtaTEsIEJtbzEsIEJtdTE7IFwKKyAgICBVSU5UMzIgQnNhMCwgQnNlMCwgQnNpMCwgQnNvMCwgQnN1MDsgXAorICAgIFVJTlQzMiBCc2ExLCBCc2UxLCBCc2kxLCBCc28xLCBCc3UxOyBcCisgICAgVUlOVDMyIENhMCwgQ2UwLCBDaTAsIENvMCwgQ3UwOyBcCisgICAgVUlOVDMyIENhMSwgQ2UxLCBDaTEsIENvMSwgQ3UxOyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhMCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorICAgIENhMSA9IEFiYTFeQWdhMV5Ba2ExXkFtYTFeQXNhMTsgXAorICAgIENlMCA9IEFiZTBeQWdlMF5Ba2UwXkFtZTBeQXNlMDsgXAorICAgIENlMSA9IEFiZTFeQWdlMV5Ba2UxXkFtZTFeQXNlMTsgXAorICAgIENpMCA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorICAgIENpMSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorICAgIENvMCA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorICAgIENvMSA9IEFibzFeQWdvMV5Ba28xXkFtbzFeQXNvMTsgXAorICAgIEN1MCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorICAgIEN1MSA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApfCAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oICBCYm8wICYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCAgQmJ1MCB8ICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXiggIEJiYTAgJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKXwgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCAgQmJvMSAmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXiggIEJidTEgfCAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oICBCYmExICYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oICBCZ2UwIHwgIEJnaTAgKTsgXAorICAgIENhMCBePSBFIyNnYTA7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXiggIEJndTAgfCAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXiggIEJnZTEgfCAgQmdpMSApOyBcCisgICAgQ2ExIF49IEUjI2dhMTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oICBCZ2ExICYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCAgQmtlMSB8ICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICh+QmtvMSleKCAgQmt1MSB8ICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCAgQm1hMCB8ICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSl8ICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXiggIEJzdTAgfCAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gKH5Cc2UxKV4oICBCc2kxIHwgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oICBCc2ExICYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXiggIEJnYTAgJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXiggIEJnZTEgfCAgQmdpMSApOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oICBCZ28xIHwofkJndTEpKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCAgQmtlMCB8ICBCa2kwICk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICh+QmtvMCleKCAgQmt1MCB8ICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCAgQmtpMSAmICBCa28xICk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCAgQmthMSAmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCl8ICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICh+Qm1vMSleKCAgQm11MSAmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBFIyNzZTAgPSAofkJzZTApXiggIEJzaTAgfCAgQnNvMCApOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXiggIEJzYTAgJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oICBCc28xICYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oKH5CZ2UwKSYgIEJnaTAgKTsgXAorICAgIENhMCBePSBFIyNnYTA7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCh+QmdhMCkmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgQ2ExIF49IEUjI2dhMTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXigofkJnbzEpJiAgQmd1MSApOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oKH5Ca2UwKSYgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gICBCa28wIF4oKH5Ca3UwKSYgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oKH5Ca2kxKSYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oKH5Ca2ExKSYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKSYgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gICBCbW8xIF4oKH5CbXUxKSYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICAgQnNlMCBeKCh+QnNpMCkmICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCh+QnNhMCkmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXigofkJzbzEpJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oKH5CZ2UwKSYgIEJnaTAgKTsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dpMCA9ICAgQmdpMCBeKCh+QmdvMCkmICBCZ3UwICk7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorXAorICAgIEEjI2JvMSBePSBEbzE7IFwKKyAgICBCZ2ExID0gUk9MMzIoQSMjYm8xLCAxNCk7IFwKKyAgICBBIyNndTEgXj0gRHUxOyBcCisgICAgQmdlMSA9IFJPTDMyKEEjI2d1MSwgMTApOyBcCisgICAgQSMja2EwIF49IERhMDsgXAorICAgIEJnaTEgPSBST0wzMihBIyNrYTAsIDEpOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oKH5CZ2UxKSYgIEJnaTEgKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBFIyNnbzEgPSAgIEJnbzEgXigofkJndTEpJiAgQmdhMSApOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgRSMja2UwID0gICBCa2UwIF4oKH5Ca2kwKSYgIEJrbzAgKTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgRSMja3UwID0gICBCa3UwIF4oKH5Ca2EwKSYgIEJrZTAgKTsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2kxID0gICBCa2kxIF4oKH5Ca28xKSYgIEJrdTEgKTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCitcCisgICAgQSMjYnUxIF49IER1MTsgXAorICAgIEJtYTAgPSBST0wzMihBIyNidTEsIDE0KTsgXAorICAgIEEjI2dhMCBePSBEYTA7IFwKKyAgICBCbWUwID0gUk9MMzIoQSMjZ2EwLCAxOCk7IFwKKyAgICBBIyNrZTAgXj0gRGUwOyBcCisgICAgQm1pMCA9IFJPTDMyKEEjI2tlMCwgNSk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgRSMjbW8wID0gICBCbW8wIF4oKH5CbXUwKSYgIEJtYTAgKTsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgRSMjbXUxID0gICBCbXUxIF4oKH5CbWExKSYgIEJtZTEgKTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NpMCA9ICAgQnNpMCBeKCh+QnNvMCkmICBCc3UwICk7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorXAorICAgIEEjI2JpMSBePSBEaTE7IFwKKyAgICBCc2ExID0gUk9MMzIoQSMjYmkxLCAzMSk7IFwKKyAgICBBIyNnbzAgXj0gRG8wOyBcCisgICAgQnNlMSA9IFJPTDMyKEEjI2dvMCwgMjcpOyBcCisgICAgQSMja3UwIF49IER1MDsgXAorICAgIEJzaTEgPSBST0wzMihBIyNrdTAsIDE5KTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBFIyNzbzEgPSAgIEJzbzEgXigofkJzdTEpJiAgQnNhMSApOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorXAorCisjZW5kaWYgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworCitjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbMjRdID0geworICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMIH07CisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVsyNF0gPSB7CisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDgwMDAwMDhiVUwsCisgICAgMHg4MDAwODA4MFVMLAorICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDA4MDAwVUwsCisgICAgMHg4MDAwODA4OFVMLAorICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwYVVMLAorICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwODA4YlVMLAorICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDgwMDAwMDhhVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDA4M1VMLAorICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4OFVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDgyVUwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl1eaW5wdXRbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdXmlucHV0WzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF07IFwKKyAgICBYIyNiYTEgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM107IFwKKyAgICBYIyNiaTAgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl07IFwKKyAgICBYIyNibzEgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV07IFwKKyAgICBYIyNnYTAgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl07IFwKKyAgICBYIyNnZTEgPSBzdGF0ZVsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV07IFwKKyAgICBYIyNnbzAgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNndTEgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNrZTAgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF07IFwKKyAgICBYIyNraTEgPSBzdGF0ZVsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN107IFwKKyAgICBYIyNrdTAgPSBzdGF0ZVsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF07IFwKKyAgICBYIyNtYTEgPSBzdGF0ZVszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IFgjI2JhMDsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JhMTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JlMDsgXAorICAgIHN0YXRlWyAzXSA9IFgjI2JlMTsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2JpMDsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2JpMTsgXAorICAgIHN0YXRlWyA2XSA9IFgjI2JvMDsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2JvMTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2J1MDsgXAorICAgIHN0YXRlWyA5XSA9IFgjI2J1MTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2dhMDsgXAorICAgIHN0YXRlWzExXSA9IFgjI2dhMTsgXAorICAgIHN0YXRlWzEyXSA9IFgjI2dlMDsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2dlMTsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2dpMDsgXAorICAgIHN0YXRlWzE1XSA9IFgjI2dpMTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2dvMDsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2dvMTsgXAorICAgIHN0YXRlWzE4XSA9IFgjI2d1MDsgXAorICAgIHN0YXRlWzE5XSA9IFgjI2d1MTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI2thMDsgXAorICAgIHN0YXRlWzIxXSA9IFgjI2thMTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI2tlMDsgXAorICAgIHN0YXRlWzIzXSA9IFgjI2tlMTsgXAorICAgIHN0YXRlWzI0XSA9IFgjI2tpMDsgXAorICAgIHN0YXRlWzI1XSA9IFgjI2tpMTsgXAorICAgIHN0YXRlWzI2XSA9IFgjI2tvMDsgXAorICAgIHN0YXRlWzI3XSA9IFgjI2tvMTsgXAorICAgIHN0YXRlWzI4XSA9IFgjI2t1MDsgXAorICAgIHN0YXRlWzI5XSA9IFgjI2t1MTsgXAorICAgIHN0YXRlWzMwXSA9IFgjI21hMDsgXAorICAgIHN0YXRlWzMxXSA9IFgjI21hMTsgXAorICAgIHN0YXRlWzMyXSA9IFgjI21lMDsgXAorICAgIHN0YXRlWzMzXSA9IFgjI21lMTsgXAorICAgIHN0YXRlWzM0XSA9IFgjI21pMDsgXAorICAgIHN0YXRlWzM1XSA9IFgjI21pMTsgXAorICAgIHN0YXRlWzM2XSA9IFgjI21vMDsgXAorICAgIHN0YXRlWzM3XSA9IFgjI21vMTsgXAorICAgIHN0YXRlWzM4XSA9IFgjI211MDsgXAorICAgIHN0YXRlWzM5XSA9IFgjI211MTsgXAorICAgIHN0YXRlWzQwXSA9IFgjI3NhMDsgXAorICAgIHN0YXRlWzQxXSA9IFgjI3NhMTsgXAorICAgIHN0YXRlWzQyXSA9IFgjI3NlMDsgXAorICAgIHN0YXRlWzQzXSA9IFgjI3NlMTsgXAorICAgIHN0YXRlWzQ0XSA9IFgjI3NpMDsgXAorICAgIHN0YXRlWzQ1XSA9IFgjI3NpMTsgXAorICAgIHN0YXRlWzQ2XSA9IFgjI3NvMDsgXAorICAgIHN0YXRlWzQ3XSA9IFgjI3NvMTsgXAorICAgIHN0YXRlWzQ4XSA9IFgjI3N1MDsgXAorICAgIHN0YXRlWzQ5XSA9IFgjI3N1MTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEwID0gWSMjYmEwOyBcCisgICAgWCMjYmExID0gWSMjYmExOyBcCisgICAgWCMjYmUwID0gWSMjYmUwOyBcCisgICAgWCMjYmUxID0gWSMjYmUxOyBcCisgICAgWCMjYmkwID0gWSMjYmkwOyBcCisgICAgWCMjYmkxID0gWSMjYmkxOyBcCisgICAgWCMjYm8wID0gWSMjYm8wOyBcCisgICAgWCMjYm8xID0gWSMjYm8xOyBcCisgICAgWCMjYnUwID0gWSMjYnUwOyBcCisgICAgWCMjYnUxID0gWSMjYnUxOyBcCisgICAgWCMjZ2EwID0gWSMjZ2EwOyBcCisgICAgWCMjZ2ExID0gWSMjZ2ExOyBcCisgICAgWCMjZ2UwID0gWSMjZ2UwOyBcCisgICAgWCMjZ2UxID0gWSMjZ2UxOyBcCisgICAgWCMjZ2kwID0gWSMjZ2kwOyBcCisgICAgWCMjZ2kxID0gWSMjZ2kxOyBcCisgICAgWCMjZ28wID0gWSMjZ28wOyBcCisgICAgWCMjZ28xID0gWSMjZ28xOyBcCisgICAgWCMjZ3UwID0gWSMjZ3UwOyBcCisgICAgWCMjZ3UxID0gWSMjZ3UxOyBcCisgICAgWCMja2EwID0gWSMja2EwOyBcCisgICAgWCMja2ExID0gWSMja2ExOyBcCisgICAgWCMja2UwID0gWSMja2UwOyBcCisgICAgWCMja2UxID0gWSMja2UxOyBcCisgICAgWCMja2kwID0gWSMja2kwOyBcCisgICAgWCMja2kxID0gWSMja2kxOyBcCisgICAgWCMja28wID0gWSMja28wOyBcCisgICAgWCMja28xID0gWSMja28xOyBcCisgICAgWCMja3UwID0gWSMja3UwOyBcCisgICAgWCMja3UxID0gWSMja3UxOyBcCisgICAgWCMjbWEwID0gWSMjbWEwOyBcCisgICAgWCMjbWExID0gWSMjbWExOyBcCisgICAgWCMjbWUwID0gWSMjbWUwOyBcCisgICAgWCMjbWUxID0gWSMjbWUxOyBcCisgICAgWCMjbWkwID0gWSMjbWkwOyBcCisgICAgWCMjbWkxID0gWSMjbWkxOyBcCisgICAgWCMjbW8wID0gWSMjbW8wOyBcCisgICAgWCMjbW8xID0gWSMjbW8xOyBcCisgICAgWCMjbXUwID0gWSMjbXUwOyBcCisgICAgWCMjbXUxID0gWSMjbXUxOyBcCisgICAgWCMjc2EwID0gWSMjc2EwOyBcCisgICAgWCMjc2ExID0gWSMjc2ExOyBcCisgICAgWCMjc2UwID0gWSMjc2UwOyBcCisgICAgWCMjc2UxID0gWSMjc2UxOyBcCisgICAgWCMjc2kwID0gWSMjc2kwOyBcCisgICAgWCMjc2kxID0gWSMjc2kxOyBcCisgICAgWCMjc28wID0gWSMjc28wOyBcCisgICAgWCMjc28xID0gWSMjc28xOyBcCisgICAgWCMjc3UwID0gWSMjc3UwOyBcCisgICAgWCMjc3UxID0gWSMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzIubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGU2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzIubWFjcm9zCkBAIC0wLDAgKzEsMjYgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWZkZWYgVXNlU2NoZWR1bGUKKyAgICAjaWYgKFVzZVNjaGVkdWxlID09IDEpCisgICAgICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtMzItczEubWFjcm9zIgorICAgICNlbGlmIChVc2VTY2hlZHVsZSA9PSAyKQorICAgICAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXMyLm1hY3JvcyIKKyAgICAjZWxpZiAoVXNlU2NoZWR1bGUgPT0gMykKKyAgICAgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zIgorICAgICNlbHNlCisgICAgICAgICNlcnJvciAiVGhpcyBzY2hlZHVsZSBpcyBub3Qgc3VwcG9ydGVkLiIKKyAgICAjZW5kaWYKKyNlbHNlCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MiCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtNjQubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGY3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtNjQubWFjcm9zCkBAIC0wLDAgKzEsNzI4IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQ2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFVJTlQ2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFVJTlQ2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFVJTlQ2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFVJTlQ2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFVJTlQ2NCBCYmEsIEJiZSwgQmJpLCBCYm8sIEJidTsgXAorICAgIFVJTlQ2NCBCZ2EsIEJnZSwgQmdpLCBCZ28sIEJndTsgXAorICAgIFVJTlQ2NCBCa2EsIEJrZSwgQmtpLCBCa28sIEJrdTsgXAorICAgIFVJTlQ2NCBCbWEsIEJtZSwgQm1pLCBCbW8sIEJtdTsgXAorICAgIFVJTlQ2NCBCc2EsIEJzZSwgQnNpLCBCc28sIEJzdTsgXAorICAgIFVJTlQ2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBVSU5UNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVUlOVDY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVUlOVDY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVUlOVDY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVUlOVDY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVUlOVDY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhIFwKKyAgICBDYSA9IEFiYV5BZ2FeQWthXkFtYV5Bc2E7IFwKKyAgICBDZSA9IEFiZV5BZ2VeQWtlXkFtZV5Bc2U7IFwKKyAgICBDaSA9IEFiaV5BZ2leQWtpXkFtaV5Bc2k7IFwKKyAgICBDbyA9IEFib15BZ29eQWtvXkFtb15Bc287IFwKKyAgICBDdSA9IEFidV5BZ3VeQWt1XkFtdV5Bc3U7IFwKKworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCAgQmJlIHwgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIENhID0gRSMjYmE7IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpfCAgQmJvICk7IFwKKyAgICBDZSA9IEUjI2JlOyBcCisgICAgRSMjYmkgPSAgIEJiaSBeKCAgQmJvICYgIEJidSApOyBcCisgICAgQ2kgPSBFIyNiaTsgXAorICAgIEUjI2JvID0gICBCYm8gXiggIEJidSB8ICBCYmEgKTsgXAorICAgIENvID0gRSMjYm87IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oICBCYmEgJiAgQmJlICk7IFwKKyAgICBDdSA9IEUjI2J1OyBcCitcCisgICAgQSMjYm8gXj0gRG87IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgQSMjZ3UgXj0gRHU7IFwKKyAgICBCZ2UgPSBST0w2NChBIyNndSwgMjApOyBcCisgICAgQSMja2EgXj0gRGE7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBBIyNtZSBePSBEZTsgXAorICAgIEJnbyA9IFJPTDY0KEEjI21lLCA0NSk7IFwKKyAgICBBIyNzaSBePSBEaTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnYSA9ICAgQmdhIF4oICBCZ2UgfCAgQmdpICk7IFwKKyAgICBDYSBePSBFIyNnYTsgXAorICAgIEUjI2dlID0gICBCZ2UgXiggIEJnaSAmICBCZ28gKTsgXAorICAgIENlIF49IEUjI2dlOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCAgQmdvIHwofkJndSkpOyBcCisgICAgQ2kgXj0gRSMjZ2k7IFwKKyAgICBFIyNnbyA9ICAgQmdvIF4oICBCZ3UgfCAgQmdhICk7IFwKKyAgICBDbyBePSBFIyNnbzsgXAorICAgIEUjI2d1ID0gICBCZ3UgXiggIEJnYSAmICBCZ2UgKTsgXAorICAgIEN1IF49IEUjI2d1OyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCAgQmtlIHwgIEJraSApOyBcCisgICAgQ2EgXj0gRSMja2E7IFwKKyAgICBFIyNrZSA9ICAgQmtlIF4oICBCa2kgJiAgQmtvICk7IFwKKyAgICBDZSBePSBFIyNrZTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIENpIF49IEUjI2tpOyBcCisgICAgRSMja28gPSAofkJrbyleKCAgQmt1IHwgIEJrYSApOyBcCisgICAgQ28gXj0gRSMja287IFwKKyAgICBFIyNrdSA9ICAgQmt1IF4oICBCa2EgJiAgQmtlICk7IFwKKyAgICBDdSBePSBFIyNrdTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXiggIEJtZSAmICBCbWkgKTsgXAorICAgIENhIF49IEUjI21hOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCAgQm1pIHwgIEJtbyApOyBcCisgICAgQ2UgXj0gRSMjbWU7IFwKKyAgICBFIyNtaSA9ICAgQm1pIF4oKH5CbW8pfCAgQm11ICk7IFwKKyAgICBDaSBePSBFIyNtaTsgXAorICAgIEUjI21vID0gKH5CbW8pXiggIEJtdSAmICBCbWEgKTsgXAorICAgIENvIF49IEUjI21vOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCAgQm1hIHwgIEJtZSApOyBcCisgICAgQ3UgXj0gRSMjbXU7IFwKK1wKKyAgICBBIyNiaSBePSBEaTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBBIyNnbyBePSBEbzsgXAorICAgIEJzZSA9IFJPTDY0KEEjI2dvLCA1NSk7IFwKKyAgICBBIyNrdSBePSBEdTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBBIyNtYSBePSBEYTsgXAorICAgIEJzbyA9IFJPTDY0KEEjI21hLCA0MSk7IFwKKyAgICBBIyNzZSBePSBEZTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NhID0gICBCc2EgXigofkJzZSkmICBCc2kgKTsgXAorICAgIENhIF49IEUjI3NhOyBcCisgICAgRSMjc2UgPSAofkJzZSleKCAgQnNpIHwgIEJzbyApOyBcCisgICAgQ2UgXj0gRSMjc2U7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oICBCc28gJiAgQnN1ICk7IFwKKyAgICBDaSBePSBFIyNzaTsgXAorICAgIEUjI3NvID0gICBCc28gXiggIEJzdSB8ICBCc2EgKTsgXAorICAgIENvIF49IEUjI3NvOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCAgQnNhICYgIEJzZSApOyBcCisgICAgQ3UgXj0gRSMjc3U7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXiggIEJiZSB8ICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpfCAgQmJvICk7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oICBCYm8gJiAgQmJ1ICk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oICBCYnUgfCAgQmJhICk7IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oICBCYmEgJiAgQmJlICk7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXiggIEJnZSB8ICBCZ2kgKTsgXAorICAgIEUjI2dlID0gICBCZ2UgXiggIEJnaSAmICBCZ28gKTsgXAorICAgIEUjI2dpID0gICBCZ2kgXiggIEJnbyB8KH5CZ3UpKTsgXAorICAgIEUjI2dvID0gICBCZ28gXiggIEJndSB8ICBCZ2EgKTsgXAorICAgIEUjI2d1ID0gICBCZ3UgXiggIEJnYSAmICBCZ2UgKTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXiggIEJrZSB8ICBCa2kgKTsgXAorICAgIEUjI2tlID0gICBCa2UgXiggIEJraSAmICBCa28gKTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIEUjI2tvID0gKH5Ca28pXiggIEJrdSB8ICBCa2EgKTsgXAorICAgIEUjI2t1ID0gICBCa3UgXiggIEJrYSAmICBCa2UgKTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXiggIEJtZSAmICBCbWkgKTsgXAorICAgIEUjI21lID0gICBCbWUgXiggIEJtaSB8ICBCbW8gKTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbyl8ICBCbXUgKTsgXAorICAgIEUjI21vID0gKH5CbW8pXiggIEJtdSAmICBCbWEgKTsgXAorICAgIEUjI211ID0gICBCbXUgXiggIEJtYSB8ICBCbWUgKTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgRSMjc2UgPSAofkJzZSleKCAgQnNpIHwgIEJzbyApOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCAgQnNvICYgIEJzdSApOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCAgQnN1IHwgIEJzYSApOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCAgQnNhICYgIEJzZSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBDdV5ST0w2NChDZSwgMSk7IFwKKyAgICBEZSA9IENhXlJPTDY0KENpLCAxKTsgXAorICAgIERpID0gQ2VeUk9MNjQoQ28sIDEpOyBcCisgICAgRG8gPSBDaV5ST0w2NChDdSwgMSk7IFwKKyAgICBEdSA9IENvXlJPTDY0KENhLCAxKTsgXAorXAorICAgIEEjI2JhIF49IERhOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBBIyNnZSBePSBEZTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBBIyNraSBePSBEaTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtbyBePSBEbzsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBBIyNzdSBePSBEdTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiYSA9ICAgQmJhIF4oKH5CYmUpJiAgQmJpICk7IFwKKyAgICBFIyNiYSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSkmICBCYm8gKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oKH5CYm8pJiAgQmJ1ICk7IFwKKyAgICBDaSA9IEUjI2JpOyBcCisgICAgRSMjYm8gPSAgIEJibyBeKCh+QmJ1KSYgIEJiYSApOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gICBCYnUgXigofkJiYSkmICBCYmUgKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXigofkJnZSkmICBCZ2kgKTsgXAorICAgIENhIF49IEUjI2dhOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCh+QmdpKSYgIEJnbyApOyBcCisgICAgQ2UgXj0gRSMjZ2U7IFwKKyAgICBFIyNnaSA9ICAgQmdpIF4oKH5CZ28pJiAgQmd1ICk7IFwKKyAgICBDaSBePSBFIyNnaTsgXAorICAgIEUjI2dvID0gICBCZ28gXigofkJndSkmICBCZ2EgKTsgXAorICAgIENvIF49IEUjI2dvOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCh+QmdhKSYgIEJnZSApOyBcCisgICAgQ3UgXj0gRSMjZ3U7IFwKK1wKKyAgICBBIyNiZSBePSBEZTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIEEjI2dpIF49IERpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgQSMja28gXj0gRG87IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbXUgXj0gRHU7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBBIyNzYSBePSBEYTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBFIyNrYSA9ICAgQmthIF4oKH5Ca2UpJiAgQmtpICk7IFwKKyAgICBDYSBePSBFIyNrYTsgXAorICAgIEUjI2tlID0gICBCa2UgXigofkJraSkmICBCa28gKTsgXAorICAgIENlIF49IEUjI2tlOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgQ2kgXj0gRSMja2k7IFwKKyAgICBFIyNrbyA9ICAgQmtvIF4oKH5Ca3UpJiAgQmthICk7IFwKKyAgICBDbyBePSBFIyNrbzsgXAorICAgIEUjI2t1ID0gICBCa3UgXigofkJrYSkmICBCa2UgKTsgXAorICAgIEN1IF49IEUjI2t1OyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCh+Qm1lKSYgIEJtaSApOyBcCisgICAgQ2EgXj0gRSMjbWE7IFwKKyAgICBFIyNtZSA9ICAgQm1lIF4oKH5CbWkpJiAgQm1vICk7IFwKKyAgICBDZSBePSBFIyNtZTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbykmICBCbXUgKTsgXAorICAgIENpIF49IEUjI21pOyBcCisgICAgRSMjbW8gPSAgIEJtbyBeKCh+Qm11KSYgIEJtYSApOyBcCisgICAgQ28gXj0gRSMjbW87IFwKKyAgICBFIyNtdSA9ICAgQm11IF4oKH5CbWEpJiAgQm1lICk7IFwKKyAgICBDdSBePSBFIyNtdTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgQ2EgXj0gRSMjc2E7IFwKKyAgICBFIyNzZSA9ICAgQnNlIF4oKH5Cc2kpJiAgQnNvICk7IFwKKyAgICBDZSBePSBFIyNzZTsgXAorICAgIEUjI3NpID0gICBCc2kgXigofkJzbykmICBCc3UgKTsgXAorICAgIENpIF49IEUjI3NpOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCh+QnN1KSYgIEJzYSApOyBcCisgICAgQ28gXj0gRSMjc287IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oKH5Cc2EpJiAgQnNlICk7IFwKKyAgICBDdSBePSBFIyNzdTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXigofkJiZSkmICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpJiAgQmJvICk7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oKH5CYm8pJiAgQmJ1ICk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oKH5CYnUpJiAgQmJhICk7IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oKH5CYmEpJiAgQmJlICk7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXigofkJnZSkmICBCZ2kgKTsgXAorICAgIEUjI2dlID0gICBCZ2UgXigofkJnaSkmICBCZ28gKTsgXAorICAgIEUjI2dpID0gICBCZ2kgXigofkJnbykmICBCZ3UgKTsgXAorICAgIEUjI2dvID0gICBCZ28gXigofkJndSkmICBCZ2EgKTsgXAorICAgIEUjI2d1ID0gICBCZ3UgXigofkJnYSkmICBCZ2UgKTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXigofkJrZSkmICBCa2kgKTsgXAorICAgIEUjI2tlID0gICBCa2UgXigofkJraSkmICBCa28gKTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIEUjI2tvID0gICBCa28gXigofkJrdSkmICBCa2EgKTsgXAorICAgIEUjI2t1ID0gICBCa3UgXigofkJrYSkmICBCa2UgKTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXigofkJtZSkmICBCbWkgKTsgXAorICAgIEUjI21lID0gICBCbWUgXigofkJtaSkmICBCbW8gKTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbykmICBCbXUgKTsgXAorICAgIEUjI21vID0gICBCbW8gXigofkJtdSkmICBCbWEgKTsgXAorICAgIEUjI211ID0gICBCbXUgXigofkJtYSkmICBCbWUgKTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgRSMjc2UgPSAgIEJzZSBeKCh+QnNpKSYgIEJzbyApOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCh+QnNvKSYgIEJzdSApOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCh+QnN1KSYgIEJzYSApOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCh+QnNhKSYgIEJzZSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK3N0YXRpYyBjb25zdCBVSU5UNjQgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1syNF0gPSB7CisgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4MlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwOGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDAwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4YlVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwOGFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDg4VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODlVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAzVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwMlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwODBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDgwVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDhVTEwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddOyBcCisgICAgWCMjbW8gPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNtdSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI3NhID0gc3RhdGVbMjBdOyBcCisgICAgWCMjc2UgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNzaSA9IHN0YXRlWzIyXTsgXAorICAgIFgjI3NvID0gc3RhdGVbMjNdOyBcCisgICAgWCMjc3UgPSBzdGF0ZVsyNF07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV1eaW5wdXRbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYm8gPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF1eaW5wdXRbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjZ2UgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN11eaW5wdXRbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjZ3UgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF1eaW5wdXRbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMja2kgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM11eaW5wdXRbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjbWEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl1eaW5wdXRbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMTUyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XV5pbnB1dFsxOF07IFwKKyAgICBYIyNtdSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmE7IFwKKyAgICBzdGF0ZVsgMV0gPSBYIyNiZTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JpOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYm87IFwKKyAgICBzdGF0ZVsgNF0gPSBYIyNidTsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2dhOyBcCisgICAgc3RhdGVbIDZdID0gWCMjZ2U7IFwKKyAgICBzdGF0ZVsgN10gPSBYIyNnaTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2dvOyBcCisgICAgc3RhdGVbIDldID0gWCMjZ3U7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNrYTsgXAorICAgIHN0YXRlWzExXSA9IFgjI2tlOyBcCisgICAgc3RhdGVbMTJdID0gWCMja2k7IFwKKyAgICBzdGF0ZVsxM10gPSBYIyNrbzsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2t1OyBcCisgICAgc3RhdGVbMTVdID0gWCMjbWE7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNtZTsgXAorICAgIHN0YXRlWzE3XSA9IFgjI21pOyBcCisgICAgc3RhdGVbMThdID0gWCMjbW87IFwKKyAgICBzdGF0ZVsxOV0gPSBYIyNtdTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI3NhOyBcCisgICAgc3RhdGVbMjFdID0gWCMjc2U7IFwKKyAgICBzdGF0ZVsyMl0gPSBYIyNzaTsgXAorICAgIHN0YXRlWzIzXSA9IFgjI3NvOyBcCisgICAgc3RhdGVbMjRdID0gWCMjc3U7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhID0gWSMjYmE7IFwKKyAgICBYIyNiZSA9IFkjI2JlOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dlID0gWSMjZ2U7IFwKKyAgICBYIyNnaSA9IFkjI2dpOyBcCisgICAgWCMjZ28gPSBZIyNnbzsgXAorICAgIFgjI2d1ID0gWSMjZ3U7IFwKKyAgICBYIyNrYSA9IFkjI2thOyBcCisgICAgWCMja2UgPSBZIyNrZTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtZSA9IFkjI21lOyBcCisgICAgWCMjbWkgPSBZIyNtaTsgXAorICAgIFgjI21vID0gWSMjbW87IFwKKyAgICBYIyNtdSA9IFkjI211OyBcCisgICAgWCMjc2EgPSBZIyNzYTsgXAorICAgIFgjI3NlID0gWSMjc2U7IFwKKyAgICBYIyNzaSA9IFkjI3NpOyBcCisgICAgWCMjc28gPSBZIyNzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnQtc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnQtc2V0LmgKQEAgLTAsMCArMSw2IEBACisjZGVmaW5lIFByb3ZpZGVGYXN0NTc2CisjZGVmaW5lIFByb3ZpZGVGYXN0ODMyCisjZGVmaW5lIFByb3ZpZGVGYXN0MTAyNAorI2RlZmluZSBQcm92aWRlRmFzdDEwODgKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMTUyCisjZGVmaW5lIFByb3ZpZGVGYXN0MTM0NApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjcxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha1Blcm11dGF0aW9uSW50ZXJmYWNlX2hfCisjZGVmaW5lIF9LZWNjYWtQZXJtdXRhdGlvbkludGVyZmFjZV9oXworCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludC1zZXQuaCIKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSggdm9pZCApOworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uKHVuc2lnbmVkIGNoYXIgKnN0YXRlKTsKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiNTc2Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiODMyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEwMjRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMTUyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEzNDRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KTsKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1Yzc4MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyNkZWZpbmUgVW5yb2xsaW5nIDIKKyNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisjZGVmaW5lIFVzZUludGVybGVhdmVUYWJsZXMKKyNkZWZpbmUgVXNlU2NoZWR1bGUgMworKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyYmZiNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi5jCkBAIC0wLDAgKzEsNTI0IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorLyogI2luY2x1ZGUgImJyZ19lbmRpYW4uaCIgKi8KKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtb3B0MzItc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOworLyogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJTlQ2NDsgKi8KKworI2lmZGVmIFVzZUludGVybGVhdmVUYWJsZXMKK3N0YXRpYyBpbnQgaW50ZXJsZWF2ZVRhYmxlc0J1aWx0ID0gMDsKK3N0YXRpYyBVSU5UMTYgaW50ZXJsZWF2ZVRhYmxlWzY1NTM2XTsKK3N0YXRpYyBVSU5UMTYgZGVpbnRlcmxlYXZlVGFibGVbNjU1MzZdOworCitzdGF0aWMgdm9pZCBidWlsZEludGVybGVhdmVUYWJsZXMoKQoreworICAgIFVJTlQzMiBpLCBqOworICAgIFVJTlQxNiB4OworCisgICAgaWYgKCFpbnRlcmxlYXZlVGFibGVzQnVpbHQpIHsKKyAgICAgICAgZm9yKGk9MDsgaTw2NTUzNjsgaSsrKSB7CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIGZvcihqPTA7IGo8MTY7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChpICYgKDEgPDwgaikpCisgICAgICAgICAgICAgICAgICAgIHggfD0gKDEgPDwgKGovMiArIDgqKGolMikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludGVybGVhdmVUYWJsZVtpXSA9IHg7CisgICAgICAgICAgICBkZWludGVybGVhdmVUYWJsZVt4XSA9IChVSU5UMTYpaTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcmxlYXZlVGFibGVzQnVpbHQgPSAxOworICAgIH0KK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisKKyNkZWZpbmUgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIGopIFwKKyAgICBpIyNqID0gaW50ZXJsZWF2ZVRhYmxlWygoY29uc3QgVUlOVDE2Kilzb3VyY2UpW2pdXTsgXAorICAgICgoVUlOVDgqKWV2ZW4pW2pdIF49IGkjI2ogJiAweEZGOyBcCisgICAgKChVSU5UOCopb2RkKVtqXSBePSBpIyNqID4+IDg7CisKKyNkZWZpbmUgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCBqKSBcCisgICAgZCMjaiA9IGRlaW50ZXJsZWF2ZVRhYmxlWygoZXZlbiA+PiAoaio4KSkgJiAweEZGKSBeICgoKG9kZCA+PiAoaio4KSkgJiAweEZGKSA8PCA4KV07IFwKKyAgICAoKFVJTlQxNiopZGVzdClbal0gPSBkIyNqOworCisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKworI2RlZmluZSB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgaikgXAorICAgIGkjI2ogPSBpbnRlcmxlYXZlVGFibGVbc291cmNlWzIqal0gXiAoKFVJTlQxNilzb3VyY2VbMipqKzFdIDw8IDgpXTsgXAorICAgICpldmVuIF49IChpIyNqICYgMHhGRikgPDwgKGoqOCk7IFwKKyAgICAqb2RkIF49ICgoaSMjaiA+PiA4KSAmIDB4RkYpIDw8IChqKjgpOworCisjZGVmaW5lIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgaikgXAorICAgIGQjI2ogPSBkZWludGVybGVhdmVUYWJsZVsoKGV2ZW4gPj4gKGoqOCkpICYgMHhGRikgXiAoKChvZGQgPj4gKGoqOCkpICYgMHhGRikgPDwgOCldOyBcCisgICAgZGVzdFsyKmpdID0gZCMjaiAmIDB4RkY7IFwKKyAgICBkZXN0WzIqaisxXSA9IGQjI2ogPj4gODsKKworI2VuZGlmIC8qICBFbmRpYW5uZXNzICovCisKK3N0YXRpYyB2b2lkIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKFVJTlQzMiAqZXZlbiwgVUlOVDMyICpvZGQsIGNvbnN0IFVJTlQ4KiBzb3VyY2UpCit7CisgICAgVUlOVDE2IGkwLCBpMSwgaTIsIGkzOworCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDApCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDEpCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDIpCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDMpCit9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhzdGF0ZStpKjIsIHN0YXRlK2kqMisxLCBpbnB1dCtpKjgpOyBcCisgICAgfQorCitzdGF0aWMgdm9pZCBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhVSU5UOCogZGVzdCwgVUlOVDMyIGV2ZW4sIFVJTlQzMiBvZGQpCit7CisgICAgVUlOVDE2IGQwLCBkMSwgZDIsIGQzOworCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAwKQorICAgIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgMSkKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDIpCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAzKQorfQorCisjZGVmaW5lIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG84Ynl0ZXMoZGF0YStpKjgsICgoVUlOVDMyKilzdGF0ZSlbaSoyXSwgKChVSU5UMzIqKXN0YXRlKVtpKjIrMV0pOyBcCisgICAgfQorCisjZWxzZSAvKiAgTm8gaW50ZXJsZWF2aW5nIHRhYmxlcyAqLworCisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworI2RlZmluZSB4b3JJbnRlcmxlYXZlZExFKHJhdGVJbkxhbmVzLCBzdGF0ZSwgaW5wdXQpIFwKKwl7IFwKKwkJY29uc3QgVUlOVDMyICogcEkgPSAoY29uc3QgVUlOVDMyICopaW5wdXQ7IFwKKwkJVUlOVDMyICogcFMgPSBzdGF0ZTsgXAorCQlVSU5UMzIgdCwgeDAsIHgxOyBcCisJICAgIGludCBpOyBcCisJICAgIGZvciAoaSA9IChyYXRlSW5MYW5lcyktMTsgaSA+PSAwOyAtLWkpIFwKKwkJeyBcCisJCQl4MCA9ICoocEkrKyk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDEpKSAmIDB4MjIyMjIyMjJVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDEpOyBcCisJCQl0ID0gKHgwIF4gKHgwID4+ICAyKSkgJiAweDBDMEMwQzBDVUw7ICB4MCA9IHgwIF4gdCBeICh0IDw8ICAyKTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgNCkpICYgMHgwMEYwMDBGMFVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgNCk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDgpKSAmIDB4MDAwMEZGMDBVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDgpOyBcCisgCQkJeDEgPSAqKHBJKyspOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICAxKSkgJiAweDIyMjIyMjIyVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICAxKTsgXAorCQkJdCA9ICh4MSBeICh4MSA+PiAgMikpICYgMHgwQzBDMEMwQ1VMOyAgeDEgPSB4MSBeIHQgXiAodCA8PCAgMik7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDQpKSAmIDB4MDBGMDAwRjBVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDQpOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICA4KSkgJiAweDAwMDBGRjAwVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICA4KTsgXAorCQkJKihwUysrKSBePSAoVUlOVDE2KXgwIHwgKHgxIDw8IDE2KTsgXAorCQkJKihwUysrKSBePSAoeDAgPj4gMTYpIHwgKHgxICYgMHhGRkZGMDAwMCk7IFwKKwkJfSBcCisJfQorCisjZGVmaW5lIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KSBcCisgICAgeG9ySW50ZXJsZWF2ZWRMRShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkKKworI2Vsc2UgLyogIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pICovCisKKy8qICBDcmVkaXQ6IEhlbnJ5IFMuIFdhcnJlbiwgSGFja2VyJ3MgRGVsaWdodCwgQWRkaXNvbi1XZXNsZXksIDIwMDIgKi8KK1VJTlQ2NCB0b0ludGVybGVhdmluZyhVSU5UNjQgeCkgCit7CisgICBVSU5UNjQgdDsKKworICAgdCA9ICh4IF4gKHggPj4gIDEpKSAmIDB4MjIyMjIyMjIyMjIyMjIyMlVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAxKTsKKyAgIHQgPSAoeCBeICh4ID4+ICAyKSkgJiAweDBDMEMwQzBDMEMwQzBDMENVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgMik7CisgICB0ID0gKHggXiAoeCA+PiAgNCkpICYgMHgwMEYwMDBGMDAwRjAwMEYwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDQpOworICAgdCA9ICh4IF4gKHggPj4gIDgpKSAmIDB4MDAwMEZGMDAwMDAwRkYwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICA4KTsKKyAgIHQgPSAoeCBeICh4ID4+IDE2KSkgJiAweDAwMDAwMDAwRkZGRjAwMDBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAxNik7CisKKyAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhVSU5UMzIqIGV2ZW5BbmRPZGQsIGNvbnN0IFVJTlQ4KiBzb3VyY2UpCit7CisgICAgLyogIFRoaXMgY2FuIGJlIG9wdGltaXplZCAqLworICAgIFVJTlQ2NCBzb3VyY2VXb3JkID0KKyAgICAgICAgKFVJTlQ2NClzb3VyY2VbMF0KKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzFdKSA8PCAgOCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzJdKSA8PCAxNikKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzNdKSA8PCAyNCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzRdKSA8PCAzMikKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzVdKSA8PCA0MCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzZdKSA8PCA0OCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzddKSA8PCA1Nik7CisgICAgVUlOVDY0IGV2ZW5BbmRPZGRXb3JkID0gdG9JbnRlcmxlYXZpbmcoc291cmNlV29yZCk7CisgICAgZXZlbkFuZE9kZFswXSBePSAoVUlOVDMyKWV2ZW5BbmRPZGRXb3JkOworICAgIGV2ZW5BbmRPZGRbMV0gXj0gKFVJTlQzMikoZXZlbkFuZE9kZFdvcmQgPj4gMzIpOworfQorCisjZGVmaW5lIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KSBcCisgICAgeyBcCisgICAgICAgIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgeG9yOGJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoc3RhdGUraSoyLCBpbnB1dCtpKjgpOyBcCisgICAgfQorCisjZW5kaWYgLyogIEVuZGlhbm5lc3MgKi8KKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworVUlOVDY0IGZyb21JbnRlcmxlYXZpbmcoVUlOVDY0IHgpCit7CisgICBVSU5UNjQgdDsKKworICAgdCA9ICh4IF4gKHggPj4gMTYpKSAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8IDE2KTsKKyAgIHQgPSAoeCBeICh4ID4+ICA4KSkgJiAweDAwMDBGRjAwMDAwMEZGMDBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgOCk7CisgICB0ID0gKHggXiAoeCA+PiAgNCkpICYgMHgwMEYwMDBGMDAwRjAwMEYwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDQpOworICAgdCA9ICh4IF4gKHggPj4gIDIpKSAmIDB4MEMwQzBDMEMwQzBDMEMwQ1VMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAyKTsKKyAgIHQgPSAoeCBeICh4ID4+ICAxKSkgJiAweDIyMjIyMjIyMjIyMjIyMjJVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgMSk7CisKKyAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhVSU5UOCogZGVzdCwgVUlOVDMyKiBldmVuQW5kT2RkKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgKChVSU5UNjQqKWRlc3QpWzBdID0gZnJvbUludGVybGVhdmluZygqKFVJTlQ2NCopZXZlbkFuZE9kZCk7CisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKyAgICAvKiAgVGhpcyBjYW4gYmUgb3B0aW1pemVkICovCisgICAgVUlOVDY0IGV2ZW5BbmRPZGRXb3JkID0gKFVJTlQ2NClldmVuQW5kT2RkWzBdIF4gKChVSU5UNjQpZXZlbkFuZE9kZFsxXSA8PCAzMik7CisgICAgVUlOVDY0IGRlc3RXb3JkID0gZnJvbUludGVybGVhdmluZyhldmVuQW5kT2RkV29yZCk7CisgICAgZGVzdFswXSA9IGRlc3RXb3JkICYgMHhGRjsKKyAgICBkZXN0WzFdID0gKGRlc3RXb3JkID4+IDgpICYgMHhGRjsKKyAgICBkZXN0WzJdID0gKGRlc3RXb3JkID4+IDE2KSAmIDB4RkY7CisgICAgZGVzdFszXSA9IChkZXN0V29yZCA+PiAyNCkgJiAweEZGOworICAgIGRlc3RbNF0gPSAoZGVzdFdvcmQgPj4gMzIpICYgMHhGRjsKKyAgICBkZXN0WzVdID0gKGRlc3RXb3JkID4+IDQwKSAmIDB4RkY7CisgICAgZGVzdFs2XSA9IChkZXN0V29yZCA+PiA0OCkgJiAweEZGOworICAgIGRlc3RbN10gPSAoZGVzdFdvcmQgPj4gNTYpICYgMHhGRjsKKyNlbmRpZiAvKiAgRW5kaWFubmVzcyAqLworfQorCisjZGVmaW5lIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIHVuc2lnbmVkIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG84Ynl0ZXMoZGF0YStpKjgsIChVSU5UMzIqKXN0YXRlK2kqMik7IFwKKyAgICB9CisKKyNlbmRpZiAvKiAgV2l0aCBvciB3aXRob3V0IGludGVybGVhdmluZyB0YWJsZXMgKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIFJPTDMyKGEsIG9mZnNldCkgX3JvdGwoYSwgb2Zmc2V0KQorI2VsaWYgKGRlZmluZWQgKF9fYXJtX18pICYmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSkKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSBfX3JvcihhLCAzMi0ob2Zmc2V0KSkKKyNlbHNlCisjZGVmaW5lIFJPTDMyKGEsIG9mZnNldCkgKCgoKFVJTlQzMilhKSA8PCAob2Zmc2V0KSkgXiAoKChVSU5UMzIpYSkgPj4gKDMyLShvZmZzZXQpKSkpCisjZW5kaWYKKworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi5tYWNyb3MiCisKKyNpZiAoVXNlU2NoZWR1bGUgPT0gMykKKworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorI2Vycm9yICJObyBsYW5lIGNvbXBsZW1lbnRpbmcgd2l0aCBzY2hlZHVsZSAzLiIKKyNlbmRpZgorCisjaWYgKFVucm9sbGluZyAhPSAyKQorI2Vycm9yICJPbmx5IHVucm9sbGluZyAyIGlzIHN1cHBvcnRlZCBieSBzY2hlZHVsZSAzLiIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDMyICpzdGF0ZSkKK3sKKyAgICByb3VuZHMKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0LCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoOSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxMywgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDE2LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMTcsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxOCwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDIxLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2Vsc2UgLyogIChTY2hlZHVsZSAhPSAzKSAqLworCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDMyICpzdGF0ZSkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSg5LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxMywgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNiwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNywgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxOCwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgyMSwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemUoKQoreworI2lmZGVmIFVzZUludGVybGVhdmVUYWJsZXMKKyAgICBidWlsZEludGVybGVhdmVUYWJsZXMoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplU3RhdGUodW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgbWVtc2V0KHN0YXRlLCAwLCAyMDApOworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDMyKilzdGF0ZSlbIDJdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWyAzXSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsgNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbIDVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzE2XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsxN10gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMjRdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzI1XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVszNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMzVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzQwXSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVs0MV0gPSB+KFVJTlQzMikwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uKHVuc2lnbmVkIGNoYXIgKnN0YXRlKQoreworICAgIC8qICBXZSBhc3N1bWUgdGhlIHN0YXRlIGlzIGFsd2F5cyBzdG9yZWQgYXMgaW50ZXJsZWF2ZWQgMzItYml0IHdvcmRzICovCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzKChVSU5UMzIqKXN0YXRlKTsKK30KKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI4MzJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTAyNGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTE1MmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTM0NGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKChVSU5UMzIqKXN0YXRlLCBkYXRhLCBsYW5lQ291bnQpOworfQorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgZXh0cmFjdExhbmVzKDE2LCBzdGF0ZSwgZGF0YSkKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQzMiopZGF0YSlbIDJdID0gfigoVUlOVDMyKilkYXRhKVsgMl07CisgICAgKChVSU5UMzIqKWRhdGEpWyAzXSA9IH4oKFVJTlQzMiopZGF0YSlbIDNdOworICAgICgoVUlOVDMyKilkYXRhKVsgNF0gPSB+KChVSU5UMzIqKWRhdGEpWyA0XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbIDVdID0gfigoVUlOVDMyKilkYXRhKVsgNV07CisgICAgKChVSU5UMzIqKWRhdGEpWzE2XSA9IH4oKFVJTlQzMiopZGF0YSlbMTZdOworICAgICgoVUlOVDMyKilkYXRhKVsxN10gPSB+KChVSU5UMzIqKWRhdGEpWzE3XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMjRdID0gfigoVUlOVDMyKilkYXRhKVsyNF07CisgICAgKChVSU5UMzIqKWRhdGEpWzI1XSA9IH4oKFVJTlQzMiopZGF0YSlbMjVdOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBleHRyYWN0TGFuZXMobGFuZUNvdW50LCBzdGF0ZSwgZGF0YSkKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICBpZiAobGFuZUNvdW50ID4gMSkgeworICAgICAgICAoKFVJTlQzMiopZGF0YSlbIDJdID0gfigoVUlOVDMyKilkYXRhKVsgMl07CisgICAgICAgICgoVUlOVDMyKilkYXRhKVsgM10gPSB+KChVSU5UMzIqKWRhdGEpWyAzXTsKKyAgICAgICAgaWYgKGxhbmVDb3VudCA+IDIpIHsKKyAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsgNF0gPSB+KChVSU5UMzIqKWRhdGEpWyA0XTsKKyAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsgNV0gPSB+KChVSU5UMzIqKWRhdGEpWyA1XTsKKyAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiA4KSB7CisgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzE2XSA9IH4oKFVJTlQzMiopZGF0YSlbMTZdOworICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsxN10gPSB+KChVSU5UMzIqKWRhdGEpWzE3XTsKKyAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzI0XSA9IH4oKFVJTlQzMiopZGF0YSlbMjRdOworICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMjVdID0gfigoVUlOVDMyKilkYXRhKVsyNV07CisgICAgICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAxNykgeworICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzM0XSA9IH4oKFVJTlQzMiopZGF0YSlbMzRdOworICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzM1XSA9IH4oKFVJTlQzMiopZGF0YSlbMzVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDIwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzQwXSA9IH4oKFVJTlQzMiopZGF0YSlbNDBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVs0MV0gPSB+KChVSU5UMzIqKWRhdGEpWzQxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LXNldHRpbmdzLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgzZTYzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LXNldHRpbmdzLmgKQEAgLTAsMCArMSw5IEBACisvKgorI2RlZmluZSBVbnJvbGxpbmcgMjQKKyNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisjZGVmaW5lIFVzZVNTRQorI2RlZmluZSBVc2VPbmx5U0lNRDY0CisjZGVmaW5lIFVzZU1NWAorI2RlZmluZSBVc2VTSExECisjZGVmaW5lIFVzZVhPUAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YjE4YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jCkBAIC0wLDAgKzEsNTEwIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorLyogI2luY2x1ZGUgImJyZ19lbmRpYW4uaCIgKi8KKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKKy8qIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBVSU5UNjQ7ICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBBTElHTiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUxJR04gX19kZWNsc3BlYyhhbGlnbigzMikpCisjZWxzZQorI2RlZmluZSBBTElHTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVzZVNTRSkKKyAgICAjaW5jbHVkZSA8eDg2aW50cmluLmg+CisgICAgdHlwZWRlZiBfX20xMjhpIFY2NDsKKyAgICB0eXBlZGVmIF9fbTEyOGkgVjEyODsKKyAgICB0eXBlZGVmIHVuaW9uIHsKKyAgICAgICAgVjEyOCB2MTI4OworICAgICAgICBVSU5UNjQgdjY0WzJdOworICAgIH0gVjY0NjQ7CisKKyAgICAjZGVmaW5lIEFORG51NjQoYSwgYikgICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICAgICBfbW1fbG9hZGxfZXBpNjQoKGNvbnN0IFY2NCAqKSYoYSkpCisgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG8pICAgICAgICAgX21tX29yX3NpMTI4KF9tbV9zbGxpX2VwaTY0KGEsIG8pLCBfbW1fc3JsaV9lcGk2NChhLCA2NC0obykpKQorICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICAgICBfbW1fc3RvcmVsX2VwaTY0KChWNjQgKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTY0KGEsIGIpICAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBTSFVGRkxFQllURVMxMjgoYSwgYikgICBfbW1fc2h1ZmZsZV9lcGk4KGEsIGIpCisKKyAgICAjZGVmaW5lIEFORG51MTI4KGEsIGIpICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0NjQoYSwgYikgICAgICBfbW1fc2V0X2VwaTY0KChfX202NCkoYSksIChfX202NCkoYikpCisgICAgI2RlZmluZSBDT05TVDEyOChhKSAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjgoYSkgICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOHUoYSkgICAgICAgICBfbW1fbG9hZHVfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgUk9MNjRpbjEyOChhLCBvKSAgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBTVE9SRTEyOChhLCBiKSAgICAgIF9tbV9zdG9yZV9zaTEyOCgoVjEyOCAqKSYoYSksIGIpCisgICAgI2RlZmluZSBYT1IxMjgoYSwgYikgICAgICAgIF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxMTI4KGEsIGIpICAgICAgYSA9IF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0TE9MTyhhLCBiKSAgICAgX21tX3VucGFja2xvX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NEhJSEkoYSwgYikgICAgIF9tbV91bnBhY2toaV9lcGk2NChhLCBiKQorICAgICNkZWZpbmUgQ09QWTY0SEkyTE8oYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweEVFKQorICAgICNkZWZpbmUgQ09QWTY0TE8ySEkoYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDQ0KQorICAgICNkZWZpbmUgWkVSTzEyOCgpICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpCisKKyAgICAjaWZkZWYgVXNlT25seVNJTUQ2NAorICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcyIKKyAgICAjZWxzZQorQUxJR04gY29uc3QgVUlOVDY0IHJobzhfNTZbMl0gPSB7MHgwNjA1MDQwMzAyMDEwMDA3LCAweDA4MEYwRTBEMEMwQjBBMDl9OworICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtc2ltZDEyOC5tYWNyb3MiCisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VTU0UiCisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVzZVhPUCkKKyAgICAjaW5jbHVkZSA8eDg2aW50cmluLmg+CisgICAgdHlwZWRlZiBfX20xMjhpIFY2NDsKKyAgICB0eXBlZGVmIF9fbTEyOGkgVjEyODsKKyAgIAorICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICAgICBfbW1fbG9hZGxfZXBpNjQoKGNvbnN0IFY2NCAqKSYoYSkpCisgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIFNUT1JFNjQoYSwgYikgICAgICAgX21tX3N0b3JlbF9lcGk2NCgoVjY0ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjY0KGEsIGIpICAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXE2NChhLCBiKSAgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorCisgICAgI2RlZmluZSBBTkRudTEyOChhLCBiKSAgICAgIF9tbV9hbmRub3Rfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIExPQUQ2NDY0KGEsIGIpICAgICAgX21tX3NldF9lcGk2NCgoX19tNjQpKGEpLCAoX19tNjQpKGIpKQorICAgICNkZWZpbmUgQ09OU1QxMjgoYSkgICAgICAgICBfbW1fbG9hZF9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBMT0FEMTI4KGEpICAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjh1KGEpICAgICAgICAgX21tX2xvYWR1X3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIFNUT1JFMTI4KGEsIGIpICAgICAgX21tX3N0b3JlX3NpMTI4KChWMTI4ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjEyOChhLCBiKSAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXExMjgoYSwgYikgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWkVSTzEyOCgpICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpCisKKyAgICAjZGVmaW5lIFNXQVA2NChhKSAgICAgICAgICAgX21tX3NodWZmbGVfZXBpMzIoYSwgMHg0RSkKKyAgICAjZGVmaW5lIEdFVDY0TE9MTyhhLCBiKSAgICAgX21tX3VucGFja2xvX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NEhJSEkoYSwgYikgICAgIF9tbV91bnBhY2toaV9lcGk2NChhLCBiKQorICAgICNkZWZpbmUgR0VUNjRMT0hJKGEsIGIpICAgICAoKF9fbTEyOGkpX21tX2JsZW5kX3BkKChfX20xMjhkKWEsIChfX20xMjhkKWIsIDIpKQorICAgICNkZWZpbmUgR0VUNjRISUxPKGEsIGIpICAgICBTV0FQNjQoR0VUNjRMT0hJKGIsIGEpKQorICAgICNkZWZpbmUgQ09QWTY0SEkyTE8oYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweEVFKQorICAgICNkZWZpbmUgQ09QWTY0TE8ySEkoYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDQ0KQorIAorICAgICNkZWZpbmUgUk9MNjQ2NHNhbWUoYSwgbykgICBfbW1fcm90aV9lcGk2NChhLCBvKQorICAgICNkZWZpbmUgUk9MNjQ2NChhLCByMSwgcjIpICBfbW1fcm90X2VwaTY0KGEsIENPTlNUMTI4KCByb3RfIyNyMSMjXyMjcjIgKSkKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMF8yMFsyXSAgPSB7IDAsIDIwfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNDRfM1syXSAgPSB7NDQsICAzfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNDNfNDVbMl0gPSB7NDMsIDQ1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMjFfNjFbMl0gPSB7MjEsIDYxfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMTRfMjhbMl0gPSB7MTQsIDI4fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMV8zNlsyXSAgPSB7IDEsIDM2fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNl8xMFsyXSAgPSB7IDYsIDEwfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMjVfMTVbMl0gPSB7MjUsIDE1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfOF81NlsyXSAgPSB7IDgsIDU2fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMThfMjdbMl0gPSB7MTgsIDI3fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNjJfNTVbMl0gPSB7NjIsIDU1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMzlfNDFbMl0gPSB7MzksIDQxfTsKKworI2lmIGRlZmluZWQoVXNlU2ltdWxhdGVkWE9QKQorICAgIC8qICBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3aGVuIFhPUCBpcyBub3QgYXZhaWxhYmxlICovCisgICAgI3VuZGVmIFJPTDY0NjQKKyAgICAjdW5kZWYgUk9MNjQ2NHNhbWUKKyAgICAjZGVmaW5lIFJPTDY0NjRzYW1lKGEsIG8pICAgX21tX29yX3NpMTI4KF9tbV9zbGxpX2VwaTY0KGEsIG8pLCBfbW1fc3JsaV9lcGk2NChhLCA2NC0obykpKQorICAgIFYxMjggUk9MNjQ2NChWMTI4IGEsIGludCByMCwgaW50IHIxKQorICAgIHsKKyAgICAgICAgVjEyOCBhMCA9IFJPTDY0KGEsIHIwKTsKKyAgICAgICAgVjEyOCBhMSA9IENPUFk2NEhJMkxPKFJPTDY0KGEsIHIxKSk7CisgICAgICAgIHJldHVybiBHRVQ2NExPTE8oYTAsIGExKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MiCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VYT1AiCisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICAjaW5jbHVkZSA8bW1pbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTY0IFY2NDsKKyAgICAjZGVmaW5lIEFORG51NjQoYSwgYikgICAgICAgX21tX2FuZG5vdF9zaTY0KGEsIGIpCisKKyAgICAjaWYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpKQorICAgICAgICAjZGVmaW5lIExPQUQ2NChhKSAgICAgICAqKFY2NCopJihhKQorICAgICAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAqKFY2NCopJihhKQorICAgICAgICAjZGVmaW5lIFNUT1JFNjQoYSwgYikgICAqKFY2NCopJihhKSA9IGIKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIExPQUQ2NChhKSAgICAgICAoVjY0KWEKKyAgICAgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgKFY2NClhCisgICAgICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgIGEgPSAoVUlOVDY0KWIKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG8pICAgICAgICAgX21tX29yX3NpNjQoX21tX3NsbGlfc2k2NChhLCBvKSwgX21tX3NybGlfc2k2NChhLCA2NC0obykpKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpNjQoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxNjQoYSwgYikgICAgICAgYSA9IF9tbV94b3Jfc2k2NChhLCBiKQorCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIgorCisgICAgI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICNlcnJvciAiVXNlQmViaWdva2ltaXNhIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggVXNlTU1YIgorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG9mZnNldCkgX3JvdGw2NChhLCBvZmZzZXQpCisgICAgI2VsaWYgZGVmaW5lZChVc2VTSExEKQorICAgICAgI2RlZmluZSBST0w2NCh4LE4pICh7IFwKKyAgICAgICAgcmVnaXN0ZXIgVUlOVDY0IF9fb3V0OyBcCisgICAgICAgIHJlZ2lzdGVyIFVJTlQ2NCBfX2luID0geDsgXAorICAgICAgICBfX2FzbV9fICgic2hsZCAlMiwlMCwlMCIgOiAiPXIiKF9fb3V0KSA6ICIwIihfX2luKSwgImkiKE4pKTsgXAorICAgICAgICBfX291dDsgXAorICAgICAgfSkKKyAgICAjZWxzZQorICAgICNkZWZpbmUgUk9MNjQoYSwgb2Zmc2V0KSAoKCgoVUlOVDY0KWEpIDw8IG9mZnNldCkgXiAoKChVSU5UNjQpYSkgPj4gKDY0LW9mZnNldCkpKQorICAgICNlbmRpZgorCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC02NC5tYWNyb3MiCisjZW5kaWYKKworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIgorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDY0ICpzdGF0ZSkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBqOworCisgICAgZm9yKGo9MDsgajxsYW5lQ291bnQ7IGorKykKKyAgICAgICAgc3RhdGVbal0gXj0gaW5wdXRbal07CQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzU3NmJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSgpCit7Cit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemVTdGF0ZSh1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICBtZW1zZXQoc3RhdGUsIDAsIDIwMCk7CisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgKChVSU5UNjQqKXN0YXRlKVsgMV0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbIDJdID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWyA4XSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsxMl0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbMTddID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWzIwXSA9IH4oVUlOVDY0KTA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgLyogIFdlIGFzc3VtZSB0aGUgc3RhdGUgaXMgYWx3YXlzIHN0b3JlZCBhcyB3b3JkcyAqLworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcygoVUlOVDY0KilzdGF0ZSk7Cit9CisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKQorc3RhdGljIHZvaWQgZnJvbUJ5dGVzVG9Xb3JkKFVJTlQ2NCAqd29yZCwgY29uc3QgVUlOVDggKmJ5dGVzKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgKndvcmQgPSAwOworICAgIGZvcihpPTA7IGk8KDY0LzgpOyBpKyspCisgICAgICAgICp3b3JkIHw9IChVSU5UNjQpKGJ5dGVzW2ldKSA8PCAoOCppKTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiNTc2Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1s5XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8OTsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjgzMmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTNdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxMzsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDI0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTZdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzE3XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8MTc7IGkrKykKKyAgICAgICAgZnJvbUJ5dGVzVG9Xb3JkKGRhdGFBc1dvcmRzK2ksIGRhdGErKGkqOCkpOworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTA4OGJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjExNTJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxOF07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE4OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMzQ0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMjFdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwyMTsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEsIGxhbmVDb3VudCk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1syNV07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPGxhbmVDb3VudDsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzLCBsYW5lQ291bnQpOworI2VuZGlmCit9CisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKQorc3RhdGljIHZvaWQgZnJvbVdvcmRUb0J5dGVzKFVJTlQ4ICpieXRlcywgY29uc3QgVUlOVDY0IHdvcmQpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPCg2NC84KTsgaSsrKQorICAgICAgICBieXRlc1tpXSA9ICh3b3JkID4+ICg4KmkpKSAmIDB4RkY7Cit9CisjZW5kaWYKKworCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUsIDEyOCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQorICAgICAgICBmcm9tV29yZFRvQnl0ZXMoZGF0YSsoaSo4KSwgKChjb25zdCBVSU5UNjQqKXN0YXRlKVtpXSk7CisjZW5kaWYKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQ2NCopZGF0YSlbIDFdID0gfigoVUlOVDY0KilkYXRhKVsgMV07CisgICAgKChVSU5UNjQqKWRhdGEpWyAyXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDJdOworICAgICgoVUlOVDY0KilkYXRhKVsgOF0gPSB+KChVSU5UNjQqKWRhdGEpWyA4XTsKKyAgICAoKFVJTlQ2NCopZGF0YSlbMTJdID0gfigoVUlOVDY0KilkYXRhKVsxMl07CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgbWVtY3B5KGRhdGEsIHN0YXRlLCBsYW5lQ291bnQqOCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTxsYW5lQ291bnQ7IGkrKykKKyAgICAgICAgZnJvbVdvcmRUb0J5dGVzKGRhdGErKGkqOCksICgoY29uc3QgVUlOVDY0KilzdGF0ZSlbaV0pOworI2VuZGlmCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgaWYgKGxhbmVDb3VudCA+IDEpIHsKKyAgICAgICAgKChVSU5UNjQqKWRhdGEpWyAxXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDFdOworICAgICAgICBpZiAobGFuZUNvdW50ID4gMikgeworICAgICAgICAgICAgKChVSU5UNjQqKWRhdGEpWyAyXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDJdOworICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDgpIHsKKyAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDhdID0gfigoVUlOVDY0KilkYXRhKVsgOF07CisgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDEyKSB7CisgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsxMl0gPSB+KChVSU5UNjQqKWRhdGEpWzEyXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbMTddID0gfigoVUlOVDY0KilkYXRhKVsxN107CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbMjBdID0gfigoVUlOVDY0KilkYXRhKVsyMF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU0N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zCkBAIC0wLDAgKzEsNjUxIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFY2NDY0IEFiYWdlLCBBYmVnaSwgQWJpZ28sIEFib2d1LCBBYnVnYTsgXAorICAgIFY2NDY0IEFrYW1lLCBBa2VtaSwgQWtpbW8sIEFrb211LCBBa3VtYTsgXAorICAgIFY2NDY0IEFiYWUsIEFiaW8sIEFnYWUsIEFnaW8sIEFrYWUsIEFraW8sIEFtYWUsIEFtaW8sIEFzYWUsIEFzaW87IFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWNjQgQXNhLCBBc2UsIEFzaSwgQXNvLCBBc3U7IFwKKyAgICBWMTI4IEJiYWdlLCBCYmVnaSwgQmJpZ28sIEJib2d1LCBCYnVnYTsgXAorICAgIFYxMjggQmthbWUsIEJrZW1pLCBCa2ltbywgQmtvbXUsIEJrdW1hOyBcCisgICAgVjY0IEJiYSwgQmJlLCBCYmksIEJibywgQmJ1OyBcCisgICAgVjY0IEJnYSwgQmdlLCBCZ2ksIEJnbywgQmd1OyBcCisgICAgVjY0IEJrYSwgQmtlLCBCa2ksIEJrbywgQmt1OyBcCisgICAgVjY0IEJtYSwgQm1lLCBCbWksIEJtbywgQm11OyBcCisgICAgVjY0IEJzYSwgQnNlLCBCc2ksIEJzbywgQnN1OyBcCisgICAgVjEyOCBDYWUsIENlaSwgQ2lvLCBDb3UsIEN1YSwgRGVpLCBEb3U7IFwKKyAgICBWNjQgQ2EsIENlLCBDaSwgQ28sIEN1OyBcCisgICAgVjY0IERhLCBEZSwgRGksIERvLCBEdTsgXAorICAgIFY2NDY0IEViYWdlLCBFYmVnaSwgRWJpZ28sIEVib2d1LCBFYnVnYTsgXAorICAgIFY2NDY0IEVrYW1lLCBFa2VtaSwgRWtpbW8sIEVrb211LCBFa3VtYTsgXAorICAgIFY2NCBFYmEsIEViZSwgRWJpLCBFYm8sIEVidTsgXAorICAgIFY2NCBFZ2EsIEVnZSwgRWdpLCBFZ28sIEVndTsgXAorICAgIFY2NCBFa2EsIEVrZSwgRWtpLCBFa28sIEVrdTsgXAorICAgIFY2NCBFbWEsIEVtZSwgRW1pLCBFbW8sIEVtdTsgXAorICAgIFY2NCBFc2EsIEVzZSwgRXNpLCBFc28sIEVzdTsgXAorICAgIFYxMjggWmVybzsKKworI2RlZmluZSBwcmVwYXJlVGhldGEKKworI2RlZmluZSBjb21wdXRlRCBcCisgICAgQ3VhID0gR0VUNjRMT0xPKEN1LCBDYWUpOyBcCisgICAgRGVpID0gWE9SMTI4KENhZSwgUk9MNjRpbjEyOChDaW8sIDEpKTsgXAorICAgIERvdSA9IFhPUjEyOChDaW8sIFJPTDY0aW4xMjgoQ3VhLCAxKSk7IFwKKyAgICBEYSA9IFhPUjY0KEN1LCBST0w2NGluMTI4KENPUFk2NEhJMkxPKENhZSksIDEpKTsgXAorICAgIERlID0gRGVpOyBcCisgICAgRGkgPSBDT1BZNjRISTJMTyhEZWkpOyBcCisgICAgRG8gPSBEb3U7IFwKKyAgICBEdSA9IENPUFk2NEhJMkxPKERvdSk7CisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhIFByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIGNvbXB1dGVEIFwKKyAgICBcCisgICAgQSMjYmEgPSBMT0FENjQoQSMjYmFnZS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNiYSwgRGEpOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI2d1LCBEdSk7IFwKKyAgICBCZ2UgPSBST0w2NChBIyNndSwgMjApOyBcCisgICAgQmJhZ2UgPSBHRVQ2NExPTE8oQmJhLCBCZ2UpOyBcCisgICAgQSMjZ2UgPSBMT0FENjQoQSMjYmFnZS52NjRbMV0pOyBcCisgICAgWE9SZXE2NChBIyNnZSwgRGUpOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2thID0gTE9BRDY0KEEjI2thbWUudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEJiZWdpID0gR0VUNjRMT0xPKEJiZSwgQmdpKTsgXAorICAgIFhPUmVxNjQoQSMja2ksIERpKTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtZSA9IExPQUQ2NChBIyNrYW1lLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQmJpZ28gPSBHRVQ2NExPTE8oQmJpLCBCZ28pOyBcCisgICAgRSMjYmFnZS52MTI4ID0gWE9SMTI4KEJiYWdlLCBBTkRudTEyOChCYmVnaSwgQmJpZ28pKTsgXAorICAgIFhPUmVxMTI4KEUjI2JhZ2UudjEyOCwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBDYWUgPSBFIyNiYWdlLnYxMjg7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgWE9SZXE2NChBIyNzaSwgRGkpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEJib2d1ID0gR0VUNjRMT0xPKEJibywgQmd1KTsgXAorICAgIEUjI2JlZ2kudjEyOCA9IFhPUjEyOChCYmVnaSwgQU5EbnUxMjgoQmJpZ28sIEJib2d1KSk7IFwKKyAgICBDZWkgPSBFIyNiZWdpLnYxMjg7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEJidWdhID0gR0VUNjRMT0xPKEJidSwgQmdhKTsgXAorICAgIEUjI2JpZ28udjEyOCA9IFhPUjEyOChCYmlnbywgQU5EbnUxMjgoQmJvZ3UsIEJidWdhKSk7IFwKKyAgICBFIyNiaSA9IEUjI2JpZ28udjEyODsgXAorICAgIEUjI2dvID0gR0VUNjRISUhJKEUjI2JpZ28udjEyOCwgRSMjYmlnby52MTI4KTsgXAorICAgIENpbyA9IEUjI2JpZ28udjEyODsgXAorICAgIEUjI2JvZ3UudjEyOCA9IFhPUjEyOChCYm9ndSwgQU5EbnUxMjgoQmJ1Z2EsIEJiYWdlKSk7IFwKKyAgICBFIyNibyA9IEUjI2JvZ3UudjEyODsgXAorICAgIEUjI2d1ID0gR0VUNjRISUhJKEUjI2JvZ3UudjEyOCwgRSMjYm9ndS52MTI4KTsgXAorICAgIENvdSA9IEUjI2JvZ3UudjEyODsgXAorICAgIEUjI2J1Z2EudjEyOCA9IFhPUjEyOChCYnVnYSwgQU5EbnUxMjgoQmJhZ2UsIEJiZWdpKSk7IFwKKyAgICBFIyNidSA9IEUjI2J1Z2EudjEyODsgXAorICAgIEUjI2dhID0gR0VUNjRISUhJKEUjI2J1Z2EudjEyOCwgRSMjYnVnYS52MTI4KTsgXAorICAgIEN1YSA9IEUjI2J1Z2EudjEyODsgXAorXAorICAgIEEjI2JlID0gTE9BRDY0KEEjI2JlZ2kudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMjYmUsIERlKTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBCa2FtZSA9IEdFVDY0TE9MTyhCa2EsIEJtZSk7IFwKKyAgICBBIyNnaSA9IExPQUQ2NChBIyNiZWdpLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrZSA9IExPQUQ2NChBIyNrZW1pLnY2NFswXSk7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQmtlbWkgPSBHRVQ2NExPTE8oQmtlLCBCbWkpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI21pID0gTE9BRDY0KEEjI2tlbWkudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBCa2ltbyA9IEdFVDY0TE9MTyhCa2ksIEJtbyk7IFwKKyAgICBFIyNrYW1lLnYxMjggPSBYT1IxMjgoQmthbWUsIEFORG51MTI4KEJrZW1pLCBCa2ltbykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBFIyNrYW1lLnYxMjgpOyBcCisgICAgQmtvbXUgPSBHRVQ2NExPTE8oWE9SNjQoQSMjbXUsIER1KSwgWE9SNjQoQSMjc28sIERvKSk7IFwKKyAgICBCa29tdSA9IFNIVUZGTEVCWVRFUzEyOChCa29tdSwgQ09OU1QxMjgocmhvOF81NikpOyBcCisgICAgRSMja2VtaS52MTI4ID0gWE9SMTI4KEJrZW1pLCBBTkRudTEyOChCa2ltbywgQmtvbXUpKTsgXAorICAgIFhPUmVxMTI4KENlaSwgRSMja2VtaS52MTI4KTsgXAorICAgIFhPUmVxNjQoQSMjc2EsIERhKTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBYT1JlcTY0KEEjI2J1LCBEdSk7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQmt1bWEgPSBHRVQ2NExPTE8oQmt1LCBCbWEpOyBcCisgICAgRSMja2ltby52MTI4ID0gWE9SMTI4KEJraW1vLCBBTkRudTEyOChCa29tdSwgQmt1bWEpKTsgXAorICAgIEUjI2tpID0gRSMja2ltby52MTI4OyBcCisgICAgRSMjbW8gPSBHRVQ2NEhJSEkoRSMja2ltby52MTI4LCBFIyNraW1vLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNraW1vLnYxMjgpOyBcCisgICAgRSMja29tdS52MTI4ID0gWE9SMTI4KEJrb211LCBBTkRudTEyOChCa3VtYSwgQmthbWUpKTsgXAorICAgIEUjI2tvID0gRSMja29tdS52MTI4OyBcCisgICAgRSMjbXUgPSBHRVQ2NEhJSEkoRSMja29tdS52MTI4LCBFIyNrb211LnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ291LCBFIyNrb211LnYxMjgpOyBcCisgICAgRSMja3VtYS52MTI4ID0gWE9SMTI4KEJrdW1hLCBBTkRudTEyOChCa2FtZSwgQmtlbWkpKTsgXAorICAgIEUjI2t1ID0gRSMja3VtYS52MTI4OyBcCisgICAgRSMjbWEgPSBHRVQ2NEhJSEkoRSMja3VtYS52MTI4LCBFIyNrdW1hLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNrdW1hLnYxMjgpOyBcCitcCisgICAgWE9SZXE2NChBIyNiaSwgRGkpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIFhPUmVxNjQoQSMjZ28sIERvKTsgXAorICAgIEJzZSA9IFJPTDY0KEEjI2dvLCA1NSk7IFwKKyAgICBYT1JlcTY0KEEjI2t1LCBEdSk7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgRSMjc2EgPSBYT1I2NChCc2EsIEFORG51NjQoQnNlLCBCc2kpKTsgXAorICAgIENhID0gRSMjc2E7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIENlID0gRSMjc2U7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhDYSwgQ2UpKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBDaSA9IEUjI3NpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIENvID0gRSMjc287IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0TE9MTyhDaSwgQ28pKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKKyAgICBDdSA9IEUjI3N1OyBcCitcCisgICAgWmVybyA9IFpFUk8xMjgoKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKEN1YSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NExPTE8oWmVybywgQ2VpKSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0SElISShDZWksIFplcm8pKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKFplcm8sIENvdSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBHRVQ2NEhJSEkoQ291LCBaZXJvKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBDdWEpOyBcCisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IGFuZCAxMjgtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpCisKK3N0YXRpYyBjb25zdCBVSU5UNjQgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1syNF0gPSB7CisgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4MlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwOGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDAwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4YlVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwOGFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDg4VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODlVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAzVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwMlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwODBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDgwVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDhVTEwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNraSA9IFgjI2tpby52MTI4OyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLnYxMjgsIFgjI2tpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvLnYxMjgpOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTVdKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQxMjh1KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbIDBdKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IExPQUQ2NChzdGF0ZVsgNF0pOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gTE9BRDEyOHUoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbIDddKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IEEjI2JhZ2UudjY0WzBdOyBcCisgICAgc3RhdGVbIDFdID0gQSMjYmVnaS52NjRbMF07IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAyXSwgWCMjYmkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgM10sIFgjI2JvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDRdLCBYIyNidSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA1XSwgWCMjZ2EpOyBcCisgICAgc3RhdGVbIDZdID0gQSMjYmFnZS52NjRbMV07IFwKKyAgICBzdGF0ZVsgN10gPSBBIyNiZWdpLnY2NFsxXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBYIyNnbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgWCMjZ3UpOyBcCisgICAgc3RhdGVbMTBdID0gWCMja2FtZS52NjRbMF07IFwKKyAgICBzdGF0ZVsxMV0gPSBYIyNrZW1pLnY2NFswXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTJdLCBYIyNraSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNF0sIFgjI2t1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTVdLCBYIyNtYSk7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNrYW1lLnY2NFsxXTsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2tlbWkudjY0WzFdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOF0sIFgjI21vKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTldLCBYIyNtdSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIwXSwgWCMjc2EpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMV0sIFgjI3NlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjJdLCBYIyNzaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIzXSwgWCMjc28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyNF0sIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmFnZSA9IFkjI2JhZ2U7IFwKKyAgICBYIyNiZWdpID0gWSMjYmVnaTsgXAorICAgIFgjI2JpID0gWSMjYmk7IFwKKyAgICBYIyNibyA9IFkjI2JvOyBcCisgICAgWCMjYnUgPSBZIyNidTsgXAorICAgIFgjI2dhID0gWSMjZ2E7IFwKKyAgICBYIyNnbyA9IFkjI2dvOyBcCisgICAgWCMjZ3UgPSBZIyNndTsgXAorICAgIFgjI2thbWUgPSBZIyNrYW1lOyBcCisgICAgWCMja2VtaSA9IFkjI2tlbWk7IFwKKyAgICBYIyNraSA9IFkjI2tpOyBcCisgICAgWCMja28gPSBZIyNrbzsgXAorICAgIFgjI2t1ID0gWSMja3U7IFwKKyAgICBYIyNtYSA9IFkjI21hOyBcCisgICAgWCMjbW8gPSBZIyNtbzsgXAorICAgIFgjI211ID0gWSMjbXU7IFwKKyAgICBYIyNzYSA9IFkjI3NhOyBcCisgICAgWCMjc2UgPSBZIyNzZTsgXAorICAgIFgjI3NpID0gWSMjc2k7IFwKKyAgICBYIyNzbyA9IFkjI3NvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTMwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcwpAQCAtMCwwICsxLDUxNyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWNjQgQXNhLCBBc2UsIEFzaSwgQXNvLCBBc3U7IFwKKyAgICBWNjQgQmJhLCBCYmUsIEJiaSwgQmJvLCBCYnU7IFwKKyAgICBWNjQgQmdhLCBCZ2UsIEJnaSwgQmdvLCBCZ3U7IFwKKyAgICBWNjQgQmthLCBCa2UsIEJraSwgQmtvLCBCa3U7IFwKKyAgICBWNjQgQm1hLCBCbWUsIEJtaSwgQm1vLCBCbXU7IFwKKyAgICBWNjQgQnNhLCBCc2UsIEJzaSwgQnNvLCBCc3U7IFwKKyAgICBWNjQgQ2EsIENlLCBDaSwgQ28sIEN1OyBcCisgICAgVjY0IERhLCBEZSwgRGksIERvLCBEdTsgXAorICAgIFY2NCBFYmEsIEViZSwgRWJpLCBFYm8sIEVidTsgXAorICAgIFY2NCBFZ2EsIEVnZSwgRWdpLCBFZ28sIEVndTsgXAorICAgIFY2NCBFa2EsIEVrZSwgRWtpLCBFa28sIEVrdTsgXAorICAgIFY2NCBFbWEsIEVtZSwgRW1pLCBFbW8sIEVtdTsgXAorICAgIFY2NCBFc2EsIEVzZSwgRXNpLCBFc28sIEVzdTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EgPSBYT1I2NChBYmEsIFhPUjY0KEFnYSwgWE9SNjQoQWthLCBYT1I2NChBbWEsIEFzYSkpKSk7IFwKKyAgICBDZSA9IFhPUjY0KEFiZSwgWE9SNjQoQWdlLCBYT1I2NChBa2UsIFhPUjY0KEFtZSwgQXNlKSkpKTsgXAorICAgIENpID0gWE9SNjQoQWJpLCBYT1I2NChBZ2ksIFhPUjY0KEFraSwgWE9SNjQoQW1pLCBBc2kpKSkpOyBcCisgICAgQ28gPSBYT1I2NChBYm8sIFhPUjY0KEFnbywgWE9SNjQoQWtvLCBYT1I2NChBbW8sIEFzbykpKSk7IFwKKyAgICBDdSA9IFhPUjY0KEFidSwgWE9SNjQoQWd1LCBYT1I2NChBa3UsIFhPUjY0KEFtdSwgQXN1KSkpKTsgXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhID0gWE9SNjQoQ3UsIFJPTDY0KENlLCAxKSk7IFwKKyAgICBEZSA9IFhPUjY0KENhLCBST0w2NChDaSwgMSkpOyBcCisgICAgRGkgPSBYT1I2NChDZSwgUk9MNjQoQ28sIDEpKTsgXAorICAgIERvID0gWE9SNjQoQ2ksIFJPTDY0KEN1LCAxKSk7IFwKKyAgICBEdSA9IFhPUjY0KENvLCBST0w2NChDYSwgMSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNiYSwgRGEpOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI2dlLCBEZSk7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgWE9SZXE2NChBIyNraSwgRGkpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEUjI2JhID0gWE9SNjQoQmJhLCBBTkRudTY0KEJiZSwgQmJpKSk7IFwKKyAgICBYT1JlcTY0KEUjI2JhLCBDT05TVDY0KEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV0pKTsgXAorICAgIENhID0gRSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgRSMjYmUgPSBYT1I2NChCYmUsIEFORG51NjQoQmJpLCBCYm8pKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmkgPSBYT1I2NChCYmksIEFORG51NjQoQmJvLCBCYnUpKTsgXAorICAgIENpID0gRSMjYmk7IFwKKyAgICBFIyNibyA9IFhPUjY0KEJibywgQU5EbnU2NChCYnUsIEJiYSkpOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gWE9SNjQoQmJ1LCBBTkRudTY0KEJiYSwgQmJlKSk7IFwKKyAgICBDdSA9IEUjI2J1OyBcCitcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBYT1JlcTY0KEEjI2thLCBEYSk7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBFIyNnYSA9IFhPUjY0KEJnYSwgQU5EbnU2NChCZ2UsIEJnaSkpOyBcCisgICAgWE9SZXE2NChDYSwgRSMjZ2EpOyBcCisgICAgWE9SZXE2NChBIyNtZSwgRGUpOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEUjI2dlID0gWE9SNjQoQmdlLCBBTkRudTY0KEJnaSwgQmdvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNnZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2kgPSBYT1I2NChCZ2ksIEFORG51NjQoQmdvLCBCZ3UpKTsgXAorICAgIFhPUmVxNjQoQ2ksIEUjI2dpKTsgXAorICAgIEUjI2dvID0gWE9SNjQoQmdvLCBBTkRudTY0KEJndSwgQmdhKSk7IFwKKyAgICBYT1JlcTY0KENvLCBFIyNnbyk7IFwKKyAgICBFIyNndSA9IFhPUjY0KEJndSwgQU5EbnU2NChCZ2EsIEJnZSkpOyBcCisgICAgWE9SZXE2NChDdSwgRSMjZ3UpOyBcCitcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnaSwgRGkpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEUjI2thID0gWE9SNjQoQmthLCBBTkRudTY0KEJrZSwgQmtpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNrYSk7IFwKKyAgICBYT1JlcTY0KEEjI211LCBEdSk7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBFIyNrZSA9IFhPUjY0KEJrZSwgQU5EbnU2NChCa2ksIEJrbykpOyBcCisgICAgWE9SZXE2NChDZSwgRSMja2UpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2tpID0gWE9SNjQoQmtpLCBBTkRudTY0KEJrbywgQmt1KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNraSk7IFwKKyAgICBFIyNrbyA9IFhPUjY0KEJrbywgQU5EbnU2NChCa3UsIEJrYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMja28pOyBcCisgICAgRSMja3UgPSBYT1I2NChCa3UsIEFORG51NjQoQmthLCBCa2UpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI2t1KTsgXAorXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBYT1JlcTY0KEEjI2dhLCBEYSk7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgWE9SZXE2NChBIyNrZSwgRGUpOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEUjI21hID0gWE9SNjQoQm1hLCBBTkRudTY0KEJtZSwgQm1pKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNtYSk7IFwKKyAgICBYT1JlcTY0KEEjI21pLCBEaSk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgRSMjbWUgPSBYT1I2NChCbWUsIEFORG51NjQoQm1pLCBCbW8pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI21lKTsgXAorICAgIFhPUmVxNjQoQSMjc28sIERvKTsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtaSA9IFhPUjY0KEJtaSwgQU5EbnU2NChCbW8sIEJtdSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjbWkpOyBcCisgICAgRSMjbW8gPSBYT1I2NChCbW8sIEFORG51NjQoQm11LCBCbWEpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI21vKTsgXAorICAgIEUjI211ID0gWE9SNjQoQm11LCBBTkRudTY0KEJtYSwgQm1lKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNtdSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgWE9SZXE2NChDYSwgRSMjc2EpOyBcCisgICAgWE9SZXE2NChBIyNtYSwgRGEpOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEUjI3NlID0gWE9SNjQoQnNlLCBBTkRudTY0KEJzaSwgQnNvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNzZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NlLCBEZSk7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzaSA9IFhPUjY0KEJzaSwgQU5EbnU2NChCc28sIEJzdSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjc2kpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI3NvKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNzdSk7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEgPSBYT1I2NChDdSwgUk9MNjQoQ2UsIDEpKTsgXAorICAgIERlID0gWE9SNjQoQ2EsIFJPTDY0KENpLCAxKSk7IFwKKyAgICBEaSA9IFhPUjY0KENlLCBST0w2NChDbywgMSkpOyBcCisgICAgRG8gPSBYT1I2NChDaSwgUk9MNjQoQ3UsIDEpKTsgXAorICAgIER1ID0gWE9SNjQoQ28sIFJPTDY0KENhLCAxKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ2UsIERlKTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBYT1JlcTY0KEEjI2tpLCBEaSk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgRSMjYmEgPSBYT1I2NChCYmEsIEFORG51NjQoQmJlLCBCYmkpKTsgXAorICAgIFhPUmVxNjQoRSMjYmEsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgWE9SZXE2NChBIyNtbywgRG8pOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEUjI2JlID0gWE9SNjQoQmJlLCBBTkRudTY0KEJiaSwgQmJvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmkgPSBYT1I2NChCYmksIEFORG51NjQoQmJvLCBCYnUpKTsgXAorICAgIEUjI2JvID0gWE9SNjQoQmJvLCBBTkRudTY0KEJidSwgQmJhKSk7IFwKKyAgICBFIyNidSA9IFhPUjY0KEJidSwgQU5EbnU2NChCYmEsIEJiZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBYT1JlcTY0KEEjI2thLCBEYSk7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBFIyNnYSA9IFhPUjY0KEJnYSwgQU5EbnU2NChCZ2UsIEJnaSkpOyBcCisgICAgWE9SZXE2NChBIyNtZSwgRGUpOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEUjI2dlID0gWE9SNjQoQmdlLCBBTkRudTY0KEJnaSwgQmdvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2kgPSBYT1I2NChCZ2ksIEFORG51NjQoQmdvLCBCZ3UpKTsgXAorICAgIEUjI2dvID0gWE9SNjQoQmdvLCBBTkRudTY0KEJndSwgQmdhKSk7IFwKKyAgICBFIyNndSA9IFhPUjY0KEJndSwgQU5EbnU2NChCZ2EsIEJnZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnaSwgRGkpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEUjI2thID0gWE9SNjQoQmthLCBBTkRudTY0KEJrZSwgQmtpKSk7IFwKKyAgICBYT1JlcTY0KEEjI211LCBEdSk7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBFIyNrZSA9IFhPUjY0KEJrZSwgQU5EbnU2NChCa2ksIEJrbykpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2tpID0gWE9SNjQoQmtpLCBBTkRudTY0KEJrbywgQmt1KSk7IFwKKyAgICBFIyNrbyA9IFhPUjY0KEJrbywgQU5EbnU2NChCa3UsIEJrYSkpOyBcCisgICAgRSMja3UgPSBYT1I2NChCa3UsIEFORG51NjQoQmthLCBCa2UpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBYT1JlcTY0KEEjI2dhLCBEYSk7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgWE9SZXE2NChBIyNrZSwgRGUpOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEUjI21hID0gWE9SNjQoQm1hLCBBTkRudTY0KEJtZSwgQm1pKSk7IFwKKyAgICBYT1JlcTY0KEEjI21pLCBEaSk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgRSMjbWUgPSBYT1I2NChCbWUsIEFORG51NjQoQm1pLCBCbW8pKTsgXAorICAgIFhPUmVxNjQoQSMjc28sIERvKTsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtaSA9IFhPUjY0KEJtaSwgQU5EbnU2NChCbW8sIEJtdSkpOyBcCisgICAgRSMjbW8gPSBYT1I2NChCbW8sIEFORG51NjQoQm11LCBCbWEpKTsgXAorICAgIEUjI211ID0gWE9SNjQoQm11LCBBTkRudTY0KEJtYSwgQm1lKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgWE9SZXE2NChBIyNtYSwgRGEpOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEUjI3NlID0gWE9SNjQoQnNlLCBBTkRudTY0KEJzaSwgQnNvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NlLCBEZSk7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzaSA9IFhPUjY0KEJzaSwgQU5EbnU2NChCc28sIEJzdSkpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKK1wKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNrYSA9IExPQUQ2NChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2UgPSBMT0FENjQoc3RhdGVbMTFdKTsgXAorICAgIFgjI2tpID0gTE9BRDY0KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yODMyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEzXSksIExPQUQ2NChpbnB1dFsxM10pKTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFgjI21hID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEzXSksIExPQUQ2NChpbnB1dFsxM10pKTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFgjI21hID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI21pID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBYT1I2NChMT0FENjQoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbW8gPSBYT1I2NChMT0FENjQoc3RhdGVbMThdKSwgTE9BRDY0KGlucHV0WzE4XSkpOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWCMjc2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMjBdKSwgTE9BRDY0KGlucHV0WzIwXSkpOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYSA9IExPQUQ2NChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmUgPSBMT0FENjQoc3RhdGVbIDFdKTsgXAorICAgIFgjI2JpID0gTE9BRDY0KHN0YXRlWyAyXSk7IFwKKyAgICBYIyNibyA9IExPQUQ2NChzdGF0ZVsgM10pOyBcCisgICAgWCMjYnUgPSBMT0FENjQoc3RhdGVbIDRdKTsgXAorICAgIFgjI2dhID0gTE9BRDY0KHN0YXRlWyA1XSk7IFwKKyAgICBYIyNnZSA9IExPQUQ2NChzdGF0ZVsgNl0pOyBcCisgICAgWCMjZ2kgPSBMT0FENjQoc3RhdGVbIDddKTsgXAorICAgIFgjI2dvID0gTE9BRDY0KHN0YXRlWyA4XSk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWCMja2EgPSBMT0FENjQoc3RhdGVbMTBdKTsgXAorICAgIFgjI2tlID0gTE9BRDY0KHN0YXRlWzExXSk7IFwKKyAgICBYIyNraSA9IExPQUQ2NChzdGF0ZVsxMl0pOyBcCisgICAgWCMja28gPSBMT0FENjQoc3RhdGVbMTNdKTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYIyNtYSA9IExPQUQ2NChzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBTVE9SRTY0KHN0YXRlWyAwXSwgWCMjYmEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMV0sIFgjI2JlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAzXSwgWCMjYm8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNF0sIFgjI2J1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDVdLCBYIyNnYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA2XSwgWCMjZ2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgN10sIFgjI2dpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBYIyNnbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgWCMjZ3UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMF0sIFgjI2thKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTFdLCBYIyNrZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEyXSwgWCMja2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxM10sIFgjI2tvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTRdLCBYIyNrdSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE1XSwgWCMjbWEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNl0sIFgjI21lKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTddLCBYIyNtaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgWCMjbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIFgjI211KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjBdLCBYIyNzYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIxXSwgWCMjc2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMl0sIFgjI3NpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjNdLCBYIyNzbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzI0XSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYSA9IFkjI2JhOyBcCisgICAgWCMjYmUgPSBZIyNiZTsgXAorICAgIFgjI2JpID0gWSMjYmk7IFwKKyAgICBYIyNibyA9IFkjI2JvOyBcCisgICAgWCMjYnUgPSBZIyNidTsgXAorICAgIFgjI2dhID0gWSMjZ2E7IFwKKyAgICBYIyNnZSA9IFkjI2dlOyBcCisgICAgWCMjZ2kgPSBZIyNnaTsgXAorICAgIFgjI2dvID0gWSMjZ287IFwKKyAgICBYIyNndSA9IFkjI2d1OyBcCisgICAgWCMja2EgPSBZIyNrYTsgXAorICAgIFgjI2tlID0gWSMja2U7IFwKKyAgICBYIyNraSA9IFkjI2tpOyBcCisgICAgWCMja28gPSBZIyNrbzsgXAorICAgIFgjI2t1ID0gWSMja3U7IFwKKyAgICBYIyNtYSA9IFkjI21hOyBcCisgICAgWCMjbWUgPSBZIyNtZTsgXAorICAgIFgjI21pID0gWSMjbWk7IFwKKyAgICBYIyNtbyA9IFkjI21vOyBcCisgICAgWCMjbXUgPSBZIyNtdTsgXAorICAgIFgjI3NhID0gWSMjc2E7IFwKKyAgICBYIyNzZSA9IFkjI3NlOyBcCisgICAgWCMjc2kgPSBZIyNzaTsgXAorICAgIFgjI3NvID0gWSMjc287IFwKKyAgICBYIyNzdSA9IFkjI3N1OyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjNjk0YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zCkBAIC0wLDAgKzEsMTI0IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmIChVbnJvbGxpbmcgPT0gMjQpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAxLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDIsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMywgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA0LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDUsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggNiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA3LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDgsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggOSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEwLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTEsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxMiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEzLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTQsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE2LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTcsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxOCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE5LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMjAsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgyMSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDIyLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGEoMjMsIEUsIEEpIFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMTIpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz0xMikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyAyLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDMsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA1LCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDYsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA4LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDksIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxMCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzExLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDgpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz04KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzUsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs2LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNywgRSwgQSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSA2KQorI2RlZmluZSByb3VuZHMgXAorICAgIHByZXBhcmVUaGV0YSBcCisgICAgZm9yKGk9MDsgaTwyNDsgaSs9NikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsyLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzQsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs1LCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDQpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz00KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDMpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz0zKSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgY29weVN0YXRlVmFyaWFibGVzKEEsIEUpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMikKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTIpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDEpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKyspIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgY29weVN0YXRlVmFyaWFibGVzKEEsIEUpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbHNlCisjZXJyb3IgIlVucm9sbGluZyBpcyBub3QgY29ycmVjdGx5IHNwZWNpZmllZCEiCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC14b3AubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzYzk0NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC14b3AubWFjcm9zCkBAIC0wLDAgKzEsNTczIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFYxMjggQWJhZ2UsIEFiZWdpLCBBYmlnbywgQWJvZ3UsIEFidWdhOyBcCisgICAgVjEyOCBBa2FtZSwgQWtlbWksIEFraW1vLCBBa29tdSwgQWt1bWE7IFwKKyAgICBWMTI4IEFiYWUsIEFiaW8sIEFnYWUsIEFnaW8sIEFrYWUsIEFraW8sIEFtYWUsIEFtaW87IFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWMTI4IEFzYXNlLCBBc2lzbzsgXAorICAgIFY2NCBBc3U7IFwKKyAgICBWMTI4IEJiYWdlLCBCYmVnaSwgQmJpZ28sIEJib2d1LCBCYnVnYTsgXAorICAgIFYxMjggQmthbWUsIEJrZW1pLCBCa2ltbywgQmtvbXUsIEJrdW1hOyBcCisgICAgVjEyOCBCc2FzZSwgQnNlc2ksIEJzaXNvLCBCc29zdSwgQnN1c2E7IFwKKyAgICBWMTI4IENhZSwgQ2VpLCBDaW8sIENvdSwgQ3VhOyBcCisgICAgVjEyOCBEYXUsIERlYSwgRGllLCBEb2ksIER1bzsgXAorICAgIFYxMjggRHVhLCBEYWUsIERlaSwgRGlvLCBEb3U7IFwKKyAgICBWMTI4IEViYWdlLCBFYmVnaSwgRWJpZ28sIEVib2d1LCBFYnVnYTsgXAorICAgIFYxMjggRWthbWUsIEVrZW1pLCBFa2ltbywgRWtvbXUsIEVrdW1hOyBcCisgICAgVjEyOCBFc2FzZSwgRXNpc287IFwKKyAgICBWNjQgRXN1OyBcCisgICAgVjEyOCBaZXJvOworCisjZGVmaW5lIHByZXBhcmVUaGV0YQorCisjZGVmaW5lIGNvbXB1dGVEIFwKKyAgICBDdWEgPSBHRVQ2NExPTE8oQ3VhLCBDYWUpOyBcCisgICAgRGVpID0gWE9SMTI4KENhZSwgUk9MNjQ2NHNhbWUoQ2lvLCAxKSk7IFwKKyAgICBEb3UgPSBYT1IxMjgoQ2lvLCBST0w2NDY0c2FtZShDdWEsIDEpKTsgXAorICAgIENlaSA9IEdFVDY0SElMTyhDYWUsIENpbyk7IFwKKyAgICBEYWUgPSBYT1IxMjgoQ3VhLCBST0w2NDY0c2FtZShDZWksIDEpKTsgXAorICAgIERhdSA9IEdFVDY0TE9ISShEYWUsIERvdSk7IFwKKyAgICBEZWEgPSBTV0FQNjQoRGFlKTsgXAorICAgIERpZSA9IFNXQVA2NChEZWkpOyBcCisgICAgRG9pID0gR0VUNjRMT0xPKERvdSwgRGllKTsgXAorICAgIER1byA9IFNXQVA2NChEb3UpOworCisvKiAgLS0tIFRoZXRhIFJobyBQaSBDaGkgSW90YSBQcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IGFuZCAxMjgtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBjb21wdXRlRCBcCisgICAgXAorICAgIEJiYWdlID0gWE9SMTI4KEdFVDY0TE9ISShBIyNiYWdlLCBBIyNib2d1KSwgRGF1KTsgXAorICAgIEJiYWdlID0gUk9MNjQ2NChCYmFnZSwgMCwgMjApOyBcCisgICAgQmJlZ2kgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2JhZ2UsIEEjI2thbWUpLCBEZWEpOyBcCisgICAgQmJlZ2kgPSBST0w2NDY0KEJiZWdpLCA0NCwgMyk7IFwKKyAgICBCYmlnbyA9IFhPUjEyOChHRVQ2NExPSEkoQSMja2ltbywgQSMja2FtZSksIERpZSk7IFwKKyAgICBCYmlnbyA9IFJPTDY0NjQoQmJpZ28sIDQzLCA0NSk7IFwKKyAgICBFIyNiYWdlID0gWE9SMTI4KEJiYWdlLCBBTkRudTEyOChCYmVnaSwgQmJpZ28pKTsgXAorICAgIFhPUmVxMTI4KEUjI2JhZ2UsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgQ2FlID0gRSMjYmFnZTsgXAorICAgIEJib2d1ID0gWE9SMTI4KEdFVDY0SElMTyhBIyNraW1vLCBBIyNzaXNvKSwgRG9pKTsgXAorICAgIEJib2d1ID0gUk9MNjQ2NChCYm9ndSwgMjEsIDYxKTsgXAorICAgIEUjI2JlZ2kgPSBYT1IxMjgoQmJlZ2ksIEFORG51MTI4KEJiaWdvLCBCYm9ndSkpOyBcCisgICAgQ2VpID0gRSMjYmVnaTsgXAorICAgIEJidWdhID0gWE9SMTI4KEdFVDY0TE9MTyhBIyNzdSwgQSMjYm9ndSksIER1byk7IFwKKyAgICBCYnVnYSA9IFJPTDY0NjQoQmJ1Z2EsIDE0LCAyOCk7IFwKKyAgICBFIyNiaWdvID0gWE9SMTI4KEJiaWdvLCBBTkRudTEyOChCYm9ndSwgQmJ1Z2EpKTsgXAorICAgIENpbyA9IEUjI2JpZ287IFwKKyAgICBFIyNib2d1ID0gWE9SMTI4KEJib2d1LCBBTkRudTEyOChCYnVnYSwgQmJhZ2UpKTsgXAorICAgIENvdSA9IEUjI2JvZ3U7IFwKKyAgICBFIyNidWdhID0gWE9SMTI4KEJidWdhLCBBTkRudTEyOChCYmFnZSwgQmJlZ2kpKTsgXAorICAgIEN1YSA9IEUjI2J1Z2E7IFwKK1wKKyAgICBCa2FtZSA9IFhPUjEyOChHRVQ2NExPSEkoQSMjYmVnaSwgQSMjYnVnYSksIERlYSk7IFwKKyAgICBCa2FtZSA9IFJPTDY0NjQoQmthbWUsIDEsIDM2KTsgXAorICAgIEJrZW1pID0gWE9SMTI4KEdFVDY0SElMTyhBIyNiZWdpLCBBIyNrZW1pKSwgRGllKTsgXAorICAgIEJrZW1pID0gUk9MNjQ2NChCa2VtaSwgNiwgMTApOyBcCisgICAgQmtpbW8gPSBYT1IxMjgoR0VUNjRMT0hJKEEjI2tvbXUsIEEjI2tlbWkpLCBEb2kpOyBcCisgICAgQmtpbW8gPSBST0w2NDY0KEJraW1vLCAyNSwgMTUpOyBcCisgICAgRSMja2FtZSA9IFhPUjEyOChCa2FtZSwgQU5EbnUxMjgoQmtlbWksIEJraW1vKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEUjI2thbWUpOyBcCisgICAgQmtvbXUgPSBYT1IxMjgoR0VUNjRISUhJKEEjI2tvbXUsIEEjI3Npc28pLCBEdW8pOyBcCisgICAgQmtvbXUgPSBST0w2NDY0KEJrb211LCA4LCA1Nik7IFwKKyAgICBFIyNrZW1pID0gWE9SMTI4KEJrZW1pLCBBTkRudTEyOChCa2ltbywgQmtvbXUpKTsgXAorICAgIFhPUmVxMTI4KENlaSwgRSMja2VtaSk7IFwKKyAgICBCa3VtYSA9IFhPUjEyOChHRVQ2NExPTE8oQSMjc2FzZSwgQSMjYnVnYSksIERhdSk7IFwKKyAgICBCa3VtYSA9IFJPTDY0NjQoQmt1bWEsIDE4LCAyNyk7IFwKKyAgICBFIyNraW1vID0gWE9SMTI4KEJraW1vLCBBTkRudTEyOChCa29tdSwgQmt1bWEpKTsgXAorICAgIFhPUmVxMTI4KENpbywgRSMja2ltbyk7IFwKKyAgICBFIyNrb211ID0gWE9SMTI4KEJrb211LCBBTkRudTEyOChCa3VtYSwgQmthbWUpKTsgXAorICAgIFhPUmVxMTI4KENvdSwgRSMja29tdSk7IFwKKyAgICBFIyNrdW1hID0gWE9SMTI4KEJrdW1hLCBBTkRudTEyOChCa2FtZSwgQmtlbWkpKTsgXAorICAgIFhPUmVxMTI4KEN1YSwgRSMja3VtYSk7IFwKK1wKKyAgICBCc2FzZSA9IFhPUjEyOChBIyNiaWdvLCBTV0FQNjQoRG9pKSk7IFwKKyAgICBCc2FzZSA9IFJPTDY0NjQoQnNhc2UsIDYyLCA1NSk7IFwKKyAgICBCc2lzbyA9IFhPUjEyOChBIyNrdW1hLCBTV0FQNjQoRGF1KSk7IFwKKyAgICBCc2lzbyA9IFJPTDY0NjQoQnNpc28sIDM5LCA0MSk7IFwKKyAgICBCc3VzYSA9IFhPUjY0KENPUFk2NEhJMkxPKEEjI3Nhc2UpLCBEZWkpOyBcCisgICAgQnN1c2EgPSBST0w2NDY0c2FtZShCc3VzYSwgMik7IFwKKyAgICBCc3VzYSA9IEdFVDY0TE9MTyhCc3VzYSwgQnNhc2UpOyBcCisgICAgQnNlc2kgPSBHRVQ2NEhJTE8oQnNhc2UsIEJzaXNvKTsgXAorICAgIEJzb3N1ID0gR0VUNjRISUxPKEJzaXNvLCBCc3VzYSk7IFwKKyAgICBFIyNzYXNlID0gWE9SMTI4KEJzYXNlLCBBTkRudTEyOChCc2VzaSwgQnNpc28pKTsgXAorICAgIFhPUmVxMTI4KENhZSwgRSMjc2FzZSk7IFwKKyAgICBFIyNzaXNvID0gWE9SMTI4KEJzaXNvLCBBTkRudTEyOChCc29zdSwgQnN1c2EpKTsgXAorICAgIFhPUmVxMTI4KENpbywgRSMjc2lzbyk7IFwKKyAgICBFIyNzdSA9IEdFVDY0TE9MTyhYT1IxMjgoQnN1c2EsIEFORG51MTI4KEJzYXNlLCBCc2VzaSkpLCBaZXJvKTsgXAorICAgIFhPUmVxMTI4KEN1YSwgRSMjc3UpOyBcCitcCisgICAgWmVybyA9IFpFUk8xMjgoKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKEN1YSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NExPTE8oWmVybywgQ2VpKSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0SElISShDZWksIFplcm8pKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKFplcm8sIENvdSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBHRVQ2NEhJSEkoQ291LCBaZXJvKSk7IFwKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBMT0FEMTI4KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxN10pLCBMT0FENjQoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzE0XSksIExPQUQxMjgoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDEyOHUoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE5XSksIExPQUQ2NChpbnB1dFsxOV0pKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMjBdKSwgTE9BRDY0KGlucHV0WzIwXSkpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlKFgsIHN0YXRlKSBcCisgICAgWCMjYmFlID0gTE9BRDEyOChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBMT0FEMTI4KHN0YXRlWyAyXSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gTE9BRDY0KHN0YXRlWyA0XSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IExPQUQxMjh1KHN0YXRlWyA1XSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IExPQUQxMjh1KHN0YXRlWyA3XSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gTE9BRDEyOChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBMT0FEMTI4KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBMT0FEMTI4KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIFNUT1JFNjQoc3RhdGVbIDBdLCBYIyNiYWdlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDFdLCBYIyNiZWdpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaWdvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDNdLCBYIyNib2d1KTsgXAorICAgIFNUT1JFMTI4KHN0YXRlWyA0XSwgWCMjYnVnYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA2XSwgQ09QWTY0SEkyTE8oWCMjYmFnZSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgN10sIENPUFk2NEhJMkxPKFgjI2JlZ2kpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBDT1BZNjRISTJMTyhYIyNiaWdvKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgQ09QWTY0SEkyTE8oWCMjYm9ndSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMF0sIFgjI2thbWUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMV0sIFgjI2tlbWkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMl0sIFgjI2tpbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxM10sIFgjI2tvbXUpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbMTRdLCBYIyNrdW1hKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTZdLCBDT1BZNjRISTJMTyhYIyNrYW1lKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE3XSwgQ09QWTY0SEkyTE8oWCMja2VtaSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOF0sIENPUFk2NEhJMkxPKFgjI2tpbW8pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTldLCBDT1BZNjRISTJMTyhYIyNrb211KSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsyMF0sIFgjI3Nhc2UpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbMjJdLCBYIyNzaXNvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjRdLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhZ2UgPSBZIyNiYWdlOyBcCisgICAgWCMjYmVnaSA9IFkjI2JlZ2k7IFwKKyAgICBYIyNiaWdvID0gWSMjYmlnbzsgXAorICAgIFgjI2JvZ3UgPSBZIyNib2d1OyBcCisgICAgWCMjYnVnYSA9IFkjI2J1Z2E7IFwKKyAgICBYIyNrYW1lID0gWSMja2FtZTsgXAorICAgIFgjI2tlbWkgPSBZIyNrZW1pOyBcCisgICAgWCMja2ltbyA9IFkjI2tpbW87IFwKKyAgICBYIyNrb211ID0gWSMja29tdTsgXAorICAgIFgjI2t1bWEgPSBZIyNrdW1hOyBcCisgICAgWCMjc2FzZSA9IFkjI3Nhc2U7IFwKKyAgICBYIyNzaXNvID0gWSMjc2lzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDA4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJLZWNjYWtOSVNUSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIgorCitzdGF0aWMgSGFzaFJldHVybiBJbml0KGhhc2hTdGF0ZSAqc3RhdGUsIGludCBoYXNoYml0bGVuKQoreworICAgIHN3aXRjaChoYXNoYml0bGVuKSB7CisgICAgICAgIGNhc2UgMDogLyogIERlZmF1bHQgcGFyYW1ldGVycywgYXJiaXRyYXJ5IGxlbmd0aCBvdXRwdXQgKi8KKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTAyNCwgNTc2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIyNDoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTE1MiwgNDQ4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTA4OCwgNTEyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4NDoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgODMyLCA3NjgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTEyOgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCA1NzYsIDEwMjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQkFEX0hBU0hMRU47CisgICAgfQorICAgIHN0YXRlLT5maXhlZE91dHB1dExlbmd0aCA9IGhhc2hiaXRsZW47CisgICAgcmV0dXJuIFNVQ0NFU1M7Cit9CisKK3N0YXRpYyBIYXNoUmV0dXJuIFVwZGF0ZShoYXNoU3RhdGUgKnN0YXRlLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuKQoreworICAgIGlmICgoZGF0YWJpdGxlbiAlIDgpID09IDApCisgICAgICAgIHJldHVybiBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbik7CisgICAgZWxzZSB7CisgICAgICAgIEhhc2hSZXR1cm4gcmV0ID0gQWJzb3JiKChzcG9uZ2VTdGF0ZSopc3RhdGUsIGRhdGEsIGRhdGFiaXRsZW4gLSAoZGF0YWJpdGxlbiAlIDgpKTsKKyAgICAgICAgaWYgKHJldCA9PSBTVUNDRVNTKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxhc3RCeXRlOyAKKyAgICAgICAgICAgIC8qICBBbGlnbiB0aGUgbGFzdCBwYXJ0aWFsIGJ5dGUgdG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgKi8KKyAgICAgICAgICAgIGxhc3RCeXRlID0gZGF0YVtkYXRhYml0bGVuLzhdID4+ICg4IC0gKGRhdGFiaXRsZW4gJSA4KSk7CisgICAgICAgICAgICByZXR1cm4gQWJzb3JiKChzcG9uZ2VTdGF0ZSopc3RhdGUsICZsYXN0Qnl0ZSwgZGF0YWJpdGxlbiAlIDgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfQorCitzdGF0aWMgSGFzaFJldHVybiBGaW5hbChoYXNoU3RhdGUgKnN0YXRlLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCkKK3sKKyAgICByZXR1cm4gU3F1ZWV6ZShzdGF0ZSwgaGFzaHZhbCwgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoKTsKK30KKworLyoKK3N0YXRpYyBIYXNoUmV0dXJuIEhhc2goaW50IGhhc2hiaXRsZW4sIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4sIEJpdFNlcXVlbmNlICpoYXNodmFsKQoreworICAgIGhhc2hTdGF0ZSBzdGF0ZTsKKyAgICBIYXNoUmV0dXJuIHJlc3VsdDsKKworICAgIGlmICgoaGFzaGJpdGxlbiAhPSAyMjQpICYmIChoYXNoYml0bGVuICE9IDI1NikgJiYgKGhhc2hiaXRsZW4gIT0gMzg0KSAmJiAoaGFzaGJpdGxlbiAhPSA1MTIpKQorICAgICAgICByZXR1cm4gQkFEX0hBU0hMRU47ICogIE9ubHkgdGhlIGZvdXIgZml4ZWQgb3V0cHV0IGxlbmd0aHMgYXZhaWxhYmxlIHRocm91Z2ggdGhpcyBBUEkgKgorICAgIHJlc3VsdCA9IEluaXQoJnN0YXRlLCBoYXNoYml0bGVuKTsKKyAgICBpZiAocmVzdWx0ICE9IFNVQ0NFU1MpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gVXBkYXRlKCZzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbik7CisgICAgaWYgKHJlc3VsdCAhPSBTVUNDRVNTKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IEZpbmFsKCZzdGF0ZSwgaGFzaHZhbCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyovCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQ0MzFiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWZuZGVmIF9LZWNjYWtOSVNUSW50ZXJmYWNlX2hfCisjZGVmaW5lIF9LZWNjYWtOSVNUSW50ZXJmYWNlX2hfCisKKyNpbmNsdWRlICJLZWNjYWtTcG9uZ2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJpdFNlcXVlbmNlOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YUxlbmd0aDsKK3R5cGVkZWYgZW51bSB7IFNVQ0NFU1MgPSAwLCBGQUlMID0gMSwgQkFEX0hBU0hMRU4gPSAyIH0gSGFzaFJldHVybjsKKwordHlwZWRlZiBzcG9uZ2VTdGF0ZSBoYXNoU3RhdGU7CisKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBLZWNjYWtbciwgY10gc3BvbmdlIGZ1bmN0aW9uLgorICAqIFRoZSByYXRlIHIgYW5kIGNhcGFjaXR5IGMgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGZyb20gQGEgaGFzaGJpdGxlbi4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYmUgaW5pdGlhbGl6ZWQuCisgICogQHBhcmFtICBoYXNoYml0bGVuICBUaGUgZGVzaXJlZCBudW1iZXIgb2Ygb3V0cHV0IGJpdHMsIAorICAqICAgICAgICAgICAgICAgICAgICAgb3IgMCBmb3IgS2VjY2FrW10gd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMKKyAgKiAgICAgICAgICAgICAgICAgICAgIGFuZCBhcmJpdHJhcmlseS1sb25nIG91dHB1dC4KKyAgKiBAcHJlICAgIFRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIG11c3QgYmUgb25lIG9mIDAsIDIyNCwgMjU2LCAzODQgYW5kIDUxMi4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgQkFEX0hBU0hMRU4gaWYgdGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gaXMgaW5jb3JyZWN0LgorICAqLworc3RhdGljIEhhc2hSZXR1cm4gSW5pdChoYXNoU3RhdGUgKnN0YXRlLCBpbnQgaGFzaGJpdGxlbik7CisvKioKKyAgKiBGdW5jdGlvbiB0byBnaXZlIGlucHV0IGRhdGEgZm9yIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYWJzb3JiLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0KCkuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwcmUgICAgSW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gQWJzb3JiKCksIGRhdGFiaXRMZW4gd2FzIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgRkFJTCBvdGhlcndpc2UuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBVcGRhdGUoaGFzaFN0YXRlICpzdGF0ZSwgY29uc3QgQml0U2VxdWVuY2UgKmRhdGEsIERhdGFMZW5ndGggZGF0YWJpdGxlbik7CisvKioKKyAgKiBGdW5jdGlvbiB0byBzcXVlZXplIG91dHB1dCBkYXRhIGZyb20gdGhlIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBJZiBAYSBoYXNoYml0bGVuIHdhcyBub3QgMCBpbiB0aGUgY2FsbCB0byBJbml0KCksIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGJpdHMgaXMgZXF1YWwgdG8gQGEgaGFzaGJpdGxlbi4KKyAgKiBJZiBAYSBoYXNoYml0bGVuIHdhcyAwIGluIHRoZSBjYWxsIHRvIEluaXQoKSwgdGhlIG91dHB1dCBiaXRzIG11c3QgYmUgZXh0cmFjdGVkIHVzaW5nIHRoZSBTcXVlZXplKCkgZnVuY3Rpb24uCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXQoKS4KKyAgKiBAcGFyYW0gIGhhc2h2YWwgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgb3V0cHV0IGRhdGEuCisgICogQHJldHVybiBTVUNDRVNTIGlmIHN1Y2Nlc3NmdWwsIEZBSUwgb3RoZXJ3aXNlLgorICAqLworc3RhdGljIEhhc2hSZXR1cm4gRmluYWwoaGFzaFN0YXRlICpzdGF0ZSwgQml0U2VxdWVuY2UgKmhhc2h2YWwpOworLyoqCisgICogRnVuY3Rpb24gdG8gY29tcHV0ZSBhIGhhc2ggdXNpbmcgdGhlIEtlY2Nha1tyLCBjXSBzcG9uZ2UgZnVuY3Rpb24uCisgICogVGhlIHJhdGUgciBhbmQgY2FwYWNpdHkgYyB2YWx1ZXMgYXJlIGRldGVybWluZWQgZnJvbSBAYSBoYXNoYml0bGVuLgorICAqIEBwYXJhbSAgaGFzaGJpdGxlbiAgVGhlIGRlc2lyZWQgbnVtYmVyIG9mIG91dHB1dCBiaXRzLgorICAqIEBwYXJhbSAgZGF0YSAgICAgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgZGF0YS4gCisgICogICAgICAgICAgICAgICAgICAgICBXaGVuIEBhIGRhdGFiaXRMZW4gaXMgbm90IGEgbXVsdGlwbGUgb2YgOCwgdGhlIGxhc3QgYml0cyBvZiBkYXRhIG11c3QgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGxhc3QgYnl0ZS4KKyAgKiBAcGFyYW0gIGRhdGFiaXRMZW4gIFRoZSBudW1iZXIgb2YgaW5wdXQgYml0cyBwcm92aWRlZCBpbiB0aGUgaW5wdXQgZGF0YS4KKyAgKiBAcGFyYW0gIGhhc2h2YWwgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgb3V0cHV0IGRhdGEuCisgICogQHByZSAgICBUaGUgdmFsdWUgb2YgaGFzaGJpdGxlbiBtdXN0IGJlIG9uZSBvZiAyMjQsIDI1NiwgMzg0IGFuZCA1MTIuCisgICogQHJldHVybiBTVUNDRVNTIGlmIHN1Y2Nlc3NmdWwsIEJBRF9IQVNITEVOIGlmIHRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIGlzIGluY29ycmVjdC4KKyAgKi8KKy8qCitzdGF0aWMgSGFzaFJldHVybiBIYXNoKGludCBoYXNoYml0bGVuLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCk7CisqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNmJmMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIktlY2Nha1Nwb25nZS5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKyNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyNpbmNsdWRlICJkaXNwbGF5SW50ZXJtZWRpYXRlVmFsdWVzLmgiCisjZW5kaWYKKworc3RhdGljIGludCBJbml0U3BvbmdlKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBjYXBhY2l0eSkKK3sKKyAgICBpZiAocmF0ZStjYXBhY2l0eSAhPSAxNjAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHJhdGUgPD0gMCkgfHwgKHJhdGUgPj0gMTYwMCkgfHwgKChyYXRlICUgNjQpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBLZWNjYWtJbml0aWFsaXplKCk7CisgICAgc3RhdGUtPnJhdGUgPSByYXRlOworICAgIHN0YXRlLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIHN0YXRlLT5maXhlZE91dHB1dExlbmd0aCA9IDA7CisgICAgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHN0YXRlLT5zdGF0ZSk7CisgICAgbWVtc2V0KHN0YXRlLT5kYXRhUXVldWUsIDAsIEtlY2Nha01heGltdW1SYXRlSW5CeXRlcyk7CisgICAgc3RhdGUtPmJpdHNJblF1ZXVlID0gMDsKKyAgICBzdGF0ZS0+c3F1ZWV6aW5nID0gMDsKKyAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgQWJzb3JiUXVldWUoc3BvbmdlU3RhdGUgKnN0YXRlKQoreworICAgIC8qICBzdGF0ZS0+Yml0c0luUXVldWUgaXMgYXNzdW1lZCB0byBiZSBlcXVhbCB0byBzdGF0ZS0+cmF0ZSAqLworICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvOCk7CisgICAgI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gNTc2KQorICAgICAgICBLZWNjYWtBYnNvcmI1NzZiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCisgICAgaWYgKHN0YXRlLT5yYXRlID09IDgzMikKKyAgICAgICAgS2VjY2FrQWJzb3JiODMyYml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkKKyAgICAgICAgS2VjY2FrQWJzb3JiMTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CisgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwODgpCisgICAgICAgIEtlY2Nha0Fic29yYjEwODhiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCisgICAgaWYgKHN0YXRlLT5yYXRlID09IDExNTIpCisgICAgICAgIEtlY2Nha0Fic29yYjExNTJiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMzQ0KQorICAgICAgICBLZWNjYWtBYnNvcmIxMzQ0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyAgICAgICAgS2VjY2FrQWJzb3JiKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvNjQpOworICAgIHN0YXRlLT5iaXRzSW5RdWV1ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgQWJzb3JiKHNwb25nZVN0YXRlICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiaXRsZW4pCit7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGksIGosIHdob2xlQmxvY2tzOworICAgIHVuc2lnbmVkIGludCBwYXJ0aWFsQmxvY2ssIHBhcnRpYWxCeXRlOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1ckRhdGE7CisKKyAgICBpZiAoKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpICE9IDApCisgICAgICAgIHJldHVybiAxOyAvKiAgT25seSB0aGUgbGFzdCBjYWxsIG1heSBjb250YWluIGEgcGFydGlhbCBieXRlICovCisgICAgaWYgKHN0YXRlLT5zcXVlZXppbmcpCisgICAgICAgIHJldHVybiAxOyAvKiAgVG9vIGxhdGUgZm9yIGFkZGl0aW9uYWwgaW5wdXQgKi8KKworICAgIGkgPSAwOworICAgIHdoaWxlKGkgPCBkYXRhYml0bGVuKSB7CisgICAgICAgIGlmICgoc3RhdGUtPmJpdHNJblF1ZXVlID09IDApICYmIChkYXRhYml0bGVuID49IHN0YXRlLT5yYXRlKSAmJiAoaSA8PSAoZGF0YWJpdGxlbi1zdGF0ZS0+cmF0ZSkpKSB7CisgICAgICAgICAgICB3aG9sZUJsb2NrcyA9IChkYXRhYml0bGVuLWkpL3N0YXRlLT5yYXRlOworICAgICAgICAgICAgY3VyRGF0YSA9IGRhdGEraS84OworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gNTc2KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz01NzYvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjU3NmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDgzMikgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9ODMyLzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmI4MzJiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTAyNC84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwODgKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDg4KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMDg4LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMDg4Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTE1MgorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDExNTIpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTExNTIvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjExNTJiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTM0NCkgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTM0NC84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTM0NGJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPXN0YXRlLT5yYXRlLzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIoc3RhdGUtPnN0YXRlLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArPSB3aG9sZUJsb2NrcypzdGF0ZS0+cmF0ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnRpYWxCbG9jayA9ICh1bnNpZ25lZCBpbnQpKGRhdGFiaXRsZW4gLSBpKTsKKyAgICAgICAgICAgIGlmIChwYXJ0aWFsQmxvY2src3RhdGUtPmJpdHNJblF1ZXVlID4gc3RhdGUtPnJhdGUpCisgICAgICAgICAgICAgICAgcGFydGlhbEJsb2NrID0gc3RhdGUtPnJhdGUtc3RhdGUtPmJpdHNJblF1ZXVlOworICAgICAgICAgICAgcGFydGlhbEJ5dGUgPSBwYXJ0aWFsQmxvY2sgJSA4OworICAgICAgICAgICAgcGFydGlhbEJsb2NrIC09IHBhcnRpYWxCeXRlOworICAgICAgICAgICAgbWVtY3B5KHN0YXRlLT5kYXRhUXVldWUrc3RhdGUtPmJpdHNJblF1ZXVlLzgsIGRhdGEraS84LCBwYXJ0aWFsQmxvY2svOCk7CisgICAgICAgICAgICBzdGF0ZS0+Yml0c0luUXVldWUgKz0gcGFydGlhbEJsb2NrOworICAgICAgICAgICAgaSArPSBwYXJ0aWFsQmxvY2s7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmJpdHNJblF1ZXVlID09IHN0YXRlLT5yYXRlKQorICAgICAgICAgICAgICAgIEFic29yYlF1ZXVlKHN0YXRlKTsKKyAgICAgICAgICAgIGlmIChwYXJ0aWFsQnl0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2sgPSAoMSA8PCBwYXJ0aWFsQnl0ZSktMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZGF0YVF1ZXVlW3N0YXRlLT5iaXRzSW5RdWV1ZS84XSA9IGRhdGFbaS84XSAmIG1hc2s7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJpdHNJblF1ZXVlICs9IHBhcnRpYWxCeXRlOworICAgICAgICAgICAgICAgIGkgKz0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIFBhZEFuZFN3aXRjaFRvU3F1ZWV6aW5nUGhhc2Uoc3BvbmdlU3RhdGUgKnN0YXRlKQoreworICAgIC8qICBOb3RlOiB0aGUgYml0cyBhcmUgbnVtYmVyZWQgZnJvbSAwPUxTQiB0byA3PU1TQiAqLworICAgIGlmIChzdGF0ZS0+Yml0c0luUXVldWUgKyAxID09IHN0YXRlLT5yYXRlKSB7CisgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzggXSB8PSAxIDw8IChzdGF0ZS0+Yml0c0luUXVldWUgJSA4KTsKKyAgICAgICAgQWJzb3JiUXVldWUoc3RhdGUpOworICAgICAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSwgMCwgc3RhdGUtPnJhdGUvOCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSArIChzdGF0ZS0+Yml0c0luUXVldWUrNykvOCwgMCwgc3RhdGUtPnJhdGUvOCAtIChzdGF0ZS0+Yml0c0luUXVldWUrNykvOCk7CisgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzggXSB8PSAxIDw8IChzdGF0ZS0+Yml0c0luUXVldWUgJSA4KTsKKyAgICB9CisgICAgc3RhdGUtPmRhdGFRdWV1ZVsoc3RhdGUtPnJhdGUtMSkvOF0gfD0gMSA8PCAoKHN0YXRlLT5yYXRlLTEpICUgOCk7CisgICAgQWJzb3JiUXVldWUoc3RhdGUpOworCisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlUZXh0KDEsICItLS0gU3dpdGNoaW5nIHRvIHNxdWVlemluZyBwaGFzZSAtLS0iKTsKKyAgICAjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkgeworICAgICAgICBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSAxMDI0OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIEtlY2Nha0V4dHJhY3Qoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gc3RhdGUtPnJhdGU7CisgICAgfQorICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIGF2YWlsYWJsZSBmb3Igc3F1ZWV6aW5nIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcvOCk7CisgICAgI2VuZGlmCisgICAgc3RhdGUtPnNxdWVlemluZyA9IDE7Cit9CisKK3N0YXRpYyBpbnQgU3F1ZWV6ZShzcG9uZ2VTdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgdW5zaWduZWQgbG9uZyBsb25nIG91dHB1dExlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaTsKKyAgICB1bnNpZ25lZCBpbnQgcGFydGlhbEJsb2NrOworCisgICAgaWYgKCFzdGF0ZS0+c3F1ZWV6aW5nKQorICAgICAgICBQYWRBbmRTd2l0Y2hUb1NxdWVlemluZ1BoYXNlKHN0YXRlKTsKKyAgICBpZiAoKG91dHB1dExlbmd0aCAlIDgpICE9IDApCisgICAgICAgIHJldHVybiAxOyAvKiAgT25seSBtdWx0aXBsZSBvZiA4IGJpdHMgYXJlIGFsbG93ZWQsIHRydW5jYXRpb24gY2FuIGJlIGRvbmUgYXQgdXNlciBsZXZlbCAqLworCisgICAgaSA9IDA7CisgICAgd2hpbGUoaSA8IG91dHB1dExlbmd0aCkgeworICAgICAgICBpZiAoc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPT0gMCkgeworICAgICAgICAgICAgS2VjY2FrUGVybXV0YXRpb24oc3RhdGUtPnN0YXRlKTsKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgICAgICAgICAgS2VjY2FrRXh0cmFjdDEwMjRiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSAxMDI0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgS2VjY2FrRXh0cmFjdChzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IHN0YXRlLT5yYXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayBhdmFpbGFibGUgZm9yIHNxdWVlemluZyIsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nLzgpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcGFydGlhbEJsb2NrID0gc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmc7CisgICAgICAgIGlmICgodW5zaWduZWQgbG9uZyBsb25nKXBhcnRpYWxCbG9jayA+IG91dHB1dExlbmd0aCAtIGkpCisgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgPSAodW5zaWduZWQgaW50KShvdXRwdXRMZW5ndGggLSBpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1dCtpLzgsIHN0YXRlLT5kYXRhUXVldWUrKHN0YXRlLT5yYXRlLXN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nKS84LCBwYXJ0aWFsQmxvY2svOCk7CisgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nIC09IHBhcnRpYWxCbG9jazsKKyAgICAgICAgaSArPSBwYXJ0aWFsQmxvY2s7CisgICAgfQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQ1Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha1Nwb25nZV9oXworI2RlZmluZSBfS2VjY2FrU3BvbmdlX2hfCisKKyNkZWZpbmUgS2VjY2FrUGVybXV0YXRpb25TaXplIDE2MDAKKyNkZWZpbmUgS2VjY2FrUGVybXV0YXRpb25TaXplSW5CeXRlcyAoS2VjY2FrUGVybXV0YXRpb25TaXplLzgpCisjZGVmaW5lIEtlY2Nha01heGltdW1SYXRlIDE1MzYKKyNkZWZpbmUgS2VjY2FrTWF4aW11bVJhdGVJbkJ5dGVzIChLZWNjYWtNYXhpbXVtUmF0ZS84KQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgQUxJR04gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIEFMSUdOIF9fZGVjbHNwZWMoYWxpZ24oMzIpKQorI2Vsc2UKKyNkZWZpbmUgQUxJR04KKyNlbmRpZgorCitBTElHTiB0eXBlZGVmIHN0cnVjdCBzcG9uZ2VTdGF0ZVN0cnVjdCB7CisgICAgQUxJR04gdW5zaWduZWQgY2hhciBzdGF0ZVtLZWNjYWtQZXJtdXRhdGlvblNpemVJbkJ5dGVzXTsKKyAgICBBTElHTiB1bnNpZ25lZCBjaGFyIGRhdGFRdWV1ZVtLZWNjYWtNYXhpbXVtUmF0ZUluQnl0ZXNdOworICAgIHVuc2lnbmVkIGludCByYXRlOworICAgIHVuc2lnbmVkIGludCBjYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbnQgYml0c0luUXVldWU7CisgICAgdW5zaWduZWQgaW50IGZpeGVkT3V0cHV0TGVuZ3RoOworICAgIGludCBzcXVlZXppbmc7CisgICAgdW5zaWduZWQgaW50IGJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmc7Cit9IHNwb25nZVN0YXRlOworCisvKioKKyAgKiBGdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSBvZiB0aGUgS2VjY2FrW3IsIGNdIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBUaGUgc3BvbmdlIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgYWJzb3JiaW5nIHBoYXNlLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBiZSBpbml0aWFsaXplZC4KKyAgKiBAcGFyYW0gIHJhdGUgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgcmF0ZSByLgorICAqIEBwYXJhbSAgY2FwYWNpdHkgICAgVGhlIHZhbHVlIG9mIHRoZSBjYXBhY2l0eSBjLgorICAqIEBwcmUgICAgT25lIG11c3QgaGF2ZSByK2M9MTYwMCBhbmQgdGhlIHJhdGUgYSBtdWx0aXBsZSBvZiA2NCBiaXRzIGluIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICogQHJldHVybiBaZXJvIGlmIHN1Y2Nlc3NmdWwsIDEgb3RoZXJ3aXNlLgorICAqLworc3RhdGljIGludCBJbml0U3BvbmdlKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBjYXBhY2l0eSk7CisvKioKKyAgKiBGdW5jdGlvbiB0byBnaXZlIGlucHV0IGRhdGEgZm9yIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYWJzb3JiLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0U3BvbmdlKCkuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGxhc3QgYnl0ZS4KKyAgKiBAcGFyYW0gIGRhdGFiaXRMZW4gIFRoZSBudW1iZXIgb2YgaW5wdXQgYml0cyBwcm92aWRlZCBpbiB0aGUgaW5wdXQgZGF0YS4KKyAgKiBAcHJlICAgIEluIHRoZSBwcmV2aW91cyBjYWxsIHRvIEFic29yYigpLCBkYXRhYml0TGVuIHdhcyBhIG11bHRpcGxlIG9mIDguCisgICogQHByZSAgICBUaGUgc3BvbmdlIGZ1bmN0aW9uIG11c3QgYmUgaW4gdGhlIGFic29yYmluZyBwaGFzZSwKKyAgKiAgICAgICAgIGkuZS4sIFNxdWVlemUoKSBtdXN0IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZS4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IEFic29yYihzcG9uZ2VTdGF0ZSAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIHNxdWVlemUgb3V0cHV0IGRhdGEgZnJvbSB0aGUgc3BvbmdlIGZ1bmN0aW9uLgorICAqIElmIHRoZSBzcG9uZ2UgZnVuY3Rpb24gd2FzIGluIHRoZSBhYnNvcmJpbmcgcGhhc2UsIHRoaXMgZnVuY3Rpb24gCisgICogc3dpdGNoZXMgaXQgdG8gdGhlIHNxdWVlemluZyBwaGFzZS4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgSW5pdFNwb25nZSgpLgorICAqIEBwYXJhbSAgb3V0cHV0ICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcGFyYW0gIG91dHB1dExlbmd0aCAgICBUaGUgbnVtYmVyIG9mIG91dHB1dCBiaXRzIGRlc2lyZWQuCisgICogICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IFNxdWVlemUoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXRMZW5ndGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL2JyZ19lbmRpYW4uaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL2JyZ19lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjI2ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENvcHlyaWdodCAoYykgMTk5OC0yMDA4LCBCcmlhbiBHbGFkbWFuLCBXb3JjZXN0ZXIsIFVLLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgTElDRU5TRSBURVJNUworCisgVGhlIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSAod2l0aCBvciB3aXRob3V0IGNoYW5nZXMpCisgaXMgYWxsb3dlZCB3aXRob3V0IHRoZSBwYXltZW50IG9mIGZlZXMgb3Igcm95YWx0aWVzIHByb3ZpZGVkIHRoYXQ6CisKKyAgMS4gc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucyBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyOworCisgIDIuIGJpbmFyeSBkaXN0cmlidXRpb25zIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlaXIgZG9jdW1lbnRhdGlvbjsKKworICAzLiB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBpcyBub3QgdXNlZCB0byBlbmRvcnNlIHByb2R1Y3RzCisgICAgIGJ1aWx0IHVzaW5nIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIHBlcm1pc3Npb24uCisKKyBESVNDTEFJTUVSCisKKyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgd2l0aCBubyBleHBsaWNpdCBvciBpbXBsaWVkIHdhcnJhbnRpZXMKKyBpbiByZXNwZWN0IG9mIGl0cyBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgY29ycmVjdG5lc3MKKyBhbmQvb3IgZml0bmVzcyBmb3IgcHVycG9zZS4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJc3N1ZSBEYXRlOiAyMC8xMi8yMDA3CisgQ2hhbmdlcyBmb3IgQVJNIDkvOS8yMDEwCisqLworCisjaWZuZGVmIF9CUkdfRU5ESUFOX0gKKyNkZWZpbmUgX0JSR19FTkRJQU5fSAorCisjZGVmaW5lIElTX0JJR19FTkRJQU4gICAgICA0MzIxIC8qIGJ5dGUgMCBpcyBtb3N0IHNpZ25pZmljYW50IChtYzY4aykgKi8KKyNkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDEyMzQgLyogYnl0ZSAwIGlzIGxlYXN0IHNpZ25pZmljYW50IChpMzg2KSAqLworCisjaWYgMAorLyogSW5jbHVkZSBmaWxlcyB3aGVyZSBlbmRpYW4gZGVmaW5lcyBhbmQgYnl0ZXN3YXAgZnVuY3Rpb25zIG1heSByZXNpZGUgKi8KKyNpZiBkZWZpbmVkKCBfX3N1biApCisjICBpbmNsdWRlIDxzeXMvaXNhX2RlZnMuaD4KKyNlbGlmIGRlZmluZWQoIF9fRnJlZUJTRF9fICkgfHwgZGVmaW5lZCggX19PcGVuQlNEX18gKSB8fCBkZWZpbmVkKCBfX05ldEJTRF9fICkKKyMgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoIEJTRCApICYmICggQlNEID49IDE5OTEwMyApIHx8IGRlZmluZWQoIF9fQVBQTEVfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fQ1lHV0lOMzJfXyApIHx8IGRlZmluZWQoIF9fREpHUFBfXyApIHx8IGRlZmluZWQoIF9fb3NmX18gKQorIyAgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoIF9fbGludXhfXyApIHx8IGRlZmluZWQoIF9fR05VQ19fICkgfHwgZGVmaW5lZCggX19HTlVfTElCUkFSWV9fICkKKyMgIGlmICFkZWZpbmVkKCBfX01JTkdXMzJfXyApICYmICFkZWZpbmVkKCBfQUlYICkKKyMgICAgaW5jbHVkZSA8ZW5kaWFuLmg+CisjICAgIGlmICFkZWZpbmVkKCBfX0JFT1NfXyApCisjICAgICAgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiBOb3cgYXR0ZW1wdCB0byBzZXQgdGhlIGRlZmluZSBmb3IgcGxhdGZvcm0gYnl0ZSBvcmRlciB1c2luZyBhbnkgICovCisvKiBvZiB0aGUgZm91ciBmb3JtcyBTWU1CT0wsIF9TWU1CT0wsIF9fU1lNQk9MICYgX19TWU1CT0xfXywgd2hpY2ggICovCisvKiBzZWVtIHRvIGVuY29tcGFzcyBtb3N0IGVuZGlhbiBzeW1ib2wgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICovCisKKyNpZiBkZWZpbmVkKCBCSUdfRU5ESUFOICkgJiYgZGVmaW5lZCggTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBCWVRFX09SREVSICkgJiYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggQllURV9PUkRFUiApICYmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBMSVRUTEVfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCggX0JJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBfTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBfQllURV9PUkRFUiApICYmIF9CWVRFX09SREVSID09IF9CSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggX0JZVEVfT1JERVIgKSAmJiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggX0JJR19FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2VsaWYgZGVmaW5lZCggX0xJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU4gKQorIyAgaWYgZGVmaW5lZCggX19CWVRFX09SREVSICkgJiYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjICBlbGlmIGRlZmluZWQoIF9fQllURV9PUkRFUiApICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoIF9fQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU5fXyApICYmIGRlZmluZWQoIF9fTElUVExFX0VORElBTl9fICkKKyMgIGlmIGRlZmluZWQoIF9fQllURV9PUkRFUl9fICkgJiYgX19CWVRFX09SREVSX18gPT0gX19CSUdfRU5ESUFOX18KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBfX0JZVEVfT1JERVJfXyApICYmIF9fQllURV9PUkRFUl9fID09IF9fTElUVExFX0VORElBTl9fCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU5fXyApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU5fXyApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworLyogIGlmIHRoZSBwbGF0Zm9ybSBieXRlIG9yZGVyIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLCB0aGVuIHRyeSB0byAqLworLyogIHNldCB0aGlzIGRlZmluZSB1c2luZyBjb21tb24gbWFjaGluZSBkZWZpbmVzICAgICAgICAgICAgICAgICAgICAqLworI2lmICFkZWZpbmVkKFBMQVRGT1JNX0JZVEVfT1JERVIpCisKKyNpZiAgIGRlZmluZWQoIF9fYWxwaGFfXyApIHx8IGRlZmluZWQoIF9fYWxwaGEgKSB8fCBkZWZpbmVkKCBpMzg2ICkgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19pMzg2X18gKSAgfHwgZGVmaW5lZCggX01fSTg2ICkgIHx8IGRlZmluZWQoIF9NX0lYODYgKSAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX09TMl9fICkgICB8fCBkZWZpbmVkKCBzdW4zODYgKSAgfHwgZGVmaW5lZCggX19UVVJCT0NfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIHZheCApICAgICAgIHx8IGRlZmluZWQoIHZtcyApICAgICB8fCBkZWZpbmVkKCBWTVMgKSAgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19WTVMgKSAgICAgfHwgZGVmaW5lZCggX01fWDY0ICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKworI2VsaWYgZGVmaW5lZCggQU1JR0EgKSAgIHx8IGRlZmluZWQoIGFwcGxlYyApICAgIHx8IGRlZmluZWQoIF9fQVM0MDBfXyApICB8fCBcCisgICAgICBkZWZpbmVkKCBfQ1JBWSApICAgfHwgZGVmaW5lZCggX19ocHBhICkgICAgfHwgZGVmaW5lZCggX19ocDkwMDAgKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoIGlibTM3MCApICB8fCBkZWZpbmVkKCBtYzY4MDAwICkgICB8fCBkZWZpbmVkKCBtNjhrICkgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19NUkNfXyApIHx8IGRlZmluZWQoIF9fTVZTX18gKSAgIHx8IGRlZmluZWQoIF9fTVdFUktTX18gKSB8fCBcCisgICAgICBkZWZpbmVkKCBzcGFyYyApICAgfHwgZGVmaW5lZCggX19zcGFyYykgICAgfHwgZGVmaW5lZCggU1lNQU5URUNfQyApIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fVk9TX18gKSB8fCBkZWZpbmVkKCBfX1RJR0NDX18gKSB8fCBkZWZpbmVkKCBfX1RBTkRFTSApICAgfHwgXAorICAgICAgZGVmaW5lZCggVEhJTktfQyApIHx8IGRlZmluZWQoIF9fVk1DTVNfXyApIHx8IGRlZmluZWQoIF9BSVggKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorCisjZWxpZiBkZWZpbmVkKF9fYXJtX18pCisjIGlmZGVmIF9fQklHX0VORElBTgorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyBlbHNlCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjIGVuZGlmCisjZWxpZiAxICAgICAvKiAqKioqIEVESVQgSEVSRSBJRiBORUNFU1NBUlkgKioqKiAqLworIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VsaWYgMCAgICAgLyogKioqKiBFRElUIEhFUkUgSUYgTkVDRVNTQVJZICoqKiogKi8KKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbHNlCisjICBlcnJvciBQbGVhc2UgZWRpdCBsaW5lcyAxMzIgb3IgMTM0IGluIGJyZ19lbmRpYW4uaCB0byBzZXQgdGhlIHBsYXRmb3JtIGJ5dGUgb3JkZXIKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9hLm91dCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL2NyeXB0b19oYXNoLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0CnJlbmFtZSB0byBNb2R1bGVzL19zaGEzL2tlY2Nhay9jcnlwdG9faGFzaC5oCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL3NoYTNtb2R1bGUuYyBiL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTI3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL3NoYTNtb2R1bGUuYwpAQCAtMCwwICsxLDU5MyBAQAorLyogU0hBMyBtb2R1bGUKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIFNIQTMgYWxnb3JpdGhtCisgKgorICogU2VlIGJlbG93IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgY29kZSB0aGlzIG1vZHVsZSB3YXMKKyAqIGJhc2VkIHVwb24uIEFkZGl0aW9uYWwgd29yayBwZXJmb3JtZWQgYnk6CisgKgorICogIEFuZHJldyBLdWNobGluZyAoYW1rQGFtay5jYSkKKyAqICBHcmVnIFN0ZWluIChnc3RlaW5AbHlyYS5vcmcpCisgKiAgVHJldm9yIFBlcnJpbiAodHJldnBAdHJldnAubmV0KQorICogIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyICAgQ2hyaXN0aWFuIEhlaW1lcyAoY2hyaXN0aWFuQHB5dGhvbi5vcmcpCisgKiAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorICoKKyAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAiLi4vaGFzaGxpYi5oIgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQS0zIChLZWNjYWspCisgKgorICogVGhlIGNvZGUgaXMgYmFzZWQgb24gS2VjY2FrUmVmZXJlbmNlQW5kT3B0aW1pemVkLTMuMi56aXAgZnJvbSAyOSBNYXkgMjAxMi4KKyAqCisgKiBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGFsdGVyZWQgaW4gdGhpcyBwb2ludHM6CisgKiAgLSBDKysgY29tbWVudHMgYXJlIGNvbnZlcnRlZCB0byBBTlNJIEMgY29tbWVudHMuCisgKiAgLSBBbGwgZnVuY3Rpb25zIGFuZCBnbG9iYWxzIGFyZSBkZWNsYXJlZCBzdGF0aWMuCisgKiAgLSBUaGUgdHlwZWRlZiBmb3IgVUlOVDY0IGlzIGNvbW1lbnRlZCBvdXQuCisgKiAgLSBLZWNjYWtGLTE2MDAtb3B0WzMyfDY0XS1zZXR0aW5ncy5oIGFyZSBjb21tZW50ZWQgb3V0CisgKiAgLSBTb21lIHVudXNlZCBmdW5jdGlvbnMgYXJlIGNvbW1lbnRlZCBvdXQgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4KKyAqCisgKiBJbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhlciBzb2Z0d2FyZSBJIGhhdmUgdG8gZGVjbGFyZSBhbGwKKyAqIEtlY2NhayBmdW5jdGlvbnMgYW5kIGdsb2JhbCBkYXRhIGFzIHN0YXRpYy4gVGhlIEMgY29kZSBpcyBkaXJlY3RseQorICogaW5jbHVkZWQgaW50byB0aGlzIGZpbGUgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLgorICoKKyAqIEtlY2NhayBjYW4gYmUgdHVuZWQgd2l0aCBzZXZlcmFsIHBhcmFtZW50ZXJzLiBJIHRyeSB0byBleHBsYWluIGFsbCBvcHRpb25zCisgKiBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIHRoZW0uIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYWxzbyBjb250YWlucworICogYXNzZW1ibGVyIGNvZGUgZm9yIEFSTSBwbGF0Zm9ybXMgKE5FT04gaW5zdHJ1Y3Rpb25zKS4KKyAqCisgKiBDb21tb24KKyAqID09PT09PQorICoKKyAqIE9wdGlvbnM6CisgKiAgIFVzZUJlYmlnb2tpbWlzYSwgVW5yb2xsaW5nCisgKgorICogLSBVbnJvbGxpbmc6IGxvb3AgdW5yb2xsaW5nICgyNCwgMTIsIDgsIDYsIDQsIDMsIDIsIDEpCisgKiAtIFVzZUJlYmlnb2tpbWlzYTogbGFuZSBjb21wbGVtZW50aW5nCisgKgorICogNjRiaXQgcGxhdGZvcm1zCisgKiA9PT09PT09PT09PT09PT0KKyAqCisgKiBBZGRpdGlvbmFsIG9wdGlvbnM6CisgKiAgIFVzZVNTRSwgVXNlT25seVNJTUQ2NCwgVXNlTU1YLCBVc2VYT1AsIFVzZVNITEQKKyAqCisgKiBPcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zIChkaXNhYmxlZCBieSBkZWZhdWx0KToKKyAqICAgLSBVc2VTU0U6IHVzZSBTdHJlYW0gU0lNRCBleHRlbnNpb25zCisgKiAgICAgbyBVc2VPbmx5U0lNRDY0OiBsaW1pdCB0byA2NGJpdCBpbnN0cnVjdGlvbnMsIG90aGVyd2lzZSAxMjhiaXQKKyAqICAgICBvIHcvbyBVc2VPbmx5U0lNRDY0OiByZXF1aXJlcyBjb21waWxlciBhZ3VtZW50IC1tc3NzZTMgb3IgLW10dW5lCisgKiAgIC0gVXNlTU1YOiB1c2UgNjRiaXQgTU1YIGluc3RydWN0aW9ucworICogICAtIFVzZVhPUDogdXNlIEFNRCdzIGVYdGVuZGVkIE9wZXJhdGlvbnMgKDEyOGJpdCBTU0UgZXh0ZW5zaW9uKQorICoKKyAqIE90aGVyOgorICogICAtIFVucm9sbGluZzogZGVmYXVsdCAyNAorICogICAtIFVzZUJlYmlnb2tpbWlzYTogZGVmYXVsdCAxCisgKgorICogV2hlbiBuZWl0aGVyIFVzZVNTRSwgVXNlTU1YIG5vciBVc2VYT1AgaXMgY29uZmlndXJlZCwgUk9MNjQgKHJvdGF0ZSBsZWZ0CisgKiA2NCkgaXMgaW1wbGVtZW50ZWQgYXM6CisgKiAgIC0gV2luZG93czogX3JvdGw2NCgpCisgKiAgIC0gVXNlU0hMRDogdXNlIHNobGQgKHNoaWZ0IGxlZnQpIGFzbSBvcHRpbWl6YXRpb24KKyAqICAgLSBvdGhlcndpc2U6IHNoaWZ0IGFuZCB4b3IKKyAqCisgKiBVc2VCZWJpZ29raW1pc2EgY2FuJ3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVNTRSwgVXNlTU1YIG9yCisgKiBVc2VYT1AuIFVzZU9ubHlTSU1ENjQgaGFzIG5vIGVmZmVjdCB1bmxlc3MgVXNlU1NFIGlzIHNwZWNpZmllZC4KKyAqCisgKiBUZXN0cyBoYXZlIHNob3duIHRoYXQgVXNlU1NFICsgVXNlT25seVNJTUQ2NCBpcyBhYm91dCB0aHJlZSB0byBmb3VyCisgKiB0aW1lcyBTTE9XRVIgdGhhbiBVc2VCZWJpZ29raW1pc2EuIFVzZVNTRSBhbmQgVXNlTU1YIGFyZSBhYm91dCB0d28gdGltZXMKKyAqIHNsb3dlci4gKHRlc3RlZCBieSBDSCBhbmQgQVApCisgKgorICogMzJiaXQgcGxhdGZvcm1zCisgKiA9PT09PT09PT09PT09PT0KKyAqCisgKiBBZGRpdGlvbmFsIG9wdGlvbnM6CisgKiAgIFVzZUludGVybGVhdmVUYWJsZXMsIFVzZVNjaGVkdWxlCisgKgorICogICAtIFVucm9sbGluZzogZGVmYXVsdCAyCisgKiAgIC0gVXNlQmViaWdva2ltaXNhOiBkZWZhdWx0IG4vYQorICogICAtIFVzZVNjaGVkdWxlOiA/Pz8sICgxLCAyLCAzOyBkZWZhdWx0IDMpCisgKiAgIC0gVXNlSW50ZXJsZWF2ZVRhYmxlczogdXNlIHR3byA2NGsgbG9va3VwIHRhYmxlcyBmb3IgKGRlKWludGVybGVhdmluZworICogICAgIGRlZmF1bHQ6IG4vYQorICoKKyAqIHNjaGVkdWxlczoKKyAqICAgLSAzOiBubyBVc2VCZWJpZ29raW1pc2EsIFVucm9sbGluZyBtdXN0IGJlIDIKKyAqICAgLSAyICsgMTogPz8/CisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fc3BhcmMKKyAgLyogb3B0NjQgdXNlcyB1bi1hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgdGhhdCBjYXVzZXMgYSBCVVMgZXJyb3Igd2l0aCBtc2cKKyAgICogJ2ludmFsaWQgYWRkcmVzcyBhbGlnbm1lbnQnIG9uIFNQQVJDLiAqLworICAjZGVmaW5lIEtlY2Nha09wdCAzMgorI2VsaWYgU0laRU9GX1ZPSURfUCA9PSA4ICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIG9wdDY0IHdvcmtzIG9ubHkgZm9yIDY0Yml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgS2VjY2FrT3B0IDY0CisjZWxzZQorICAvKiBvcHQzMiBpcyB1c2VkIGZvciB0aGUgcmVtYWluaW5nIDMyIGFuZCA2NGJpdCBwbGF0Zm9ybXMgKi8KKyAgI2RlZmluZSBLZWNjYWtPcHQgMzIKKyNlbmRpZgorCisjaWYgS2VjY2FrT3B0ID09IDY0ICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIDY0Yml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgVW5yb2xsaW5nIDI0CisgICNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisgIHR5cGVkZWYgUFlfVUlOVDY0X1QgVUlOVDY0OworI2VsaWYgS2VjY2FrT3B0ID09IDMyICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIDMyYml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgVW5yb2xsaW5nIDIKKyAgI2RlZmluZSBVc2VTY2hlZHVsZSAzCisgIHR5cGVkZWYgUFlfVUlOVDY0X1QgVUlOVDY0OworI2Vsc2UKKyAgLyogMzIgb3IgNjRiaXQgcGxhdGZvcm1zIHdpdGhvdXQgdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMgorICAjZGVmaW5lIFVzZVNjaGVkdWxlIDMKKyAgI2RlZmluZSBVc2VJbnRlcmxlYXZlVGFibGVzCisjZW5kaWYKKworLyogcmVwbGFjZW1lbnQgZm9yIGJyZ19lbmRpYW4uaCAqLworI2RlZmluZSBJU19CSUdfRU5ESUFOIDQzMjEKKyNkZWZpbmUgSVNfTElUVExFX0VORElBTiAxMjM0CisjaWYgUFlfQklHX0VORElBTgorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2Vsc2UKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisvKiBpbmxpbmUgYWxsIEtlY2NhayBkZXBlbmRlbmNpZXMgKi8KKyNpbmNsdWRlICJrZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oIgorI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMiCisjaW5jbHVkZSAia2VjY2FrL0tlY2Nha1Nwb25nZS5jIgorI2lmIEtlY2Nha09wdCA9PSA2NAorICAjaW5jbHVkZSAia2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jIgorI2VsaWYgS2VjY2FrT3B0ID09IDMyCisgICNpbmNsdWRlICJrZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMiCisjZW5kaWYKKworLyogI2RlZmluZSBTSEEzX0JMT0NLU0laRSAyMDAgLy8gMTYwMCBiaXRzICAqLworI2RlZmluZSBTSEEzX01BWF9ESUdFU1RTSVpFIDY0IC8qIDUxMiBiaXRzICovCisjZGVmaW5lIFNIQTNfc3RhdGUgaGFzaFN0YXRlCisjZGVmaW5lIFNIQTNfaW5pdCBJbml0CisjZGVmaW5lIFNIQTNfcHJvY2VzcyBVcGRhdGUKKyNkZWZpbmUgU0hBM19kb25lIEZpbmFsCisjZGVmaW5lIFNIQTNfY29weXN0YXRlKGRlc3QsIHNyYykgbWVtY3B5KCYoZGVzdCksICYoc3JjKSwgc2l6ZW9mKFNIQTNfc3RhdGUpKQorI2RlZmluZSBTSEEzX2NsZWFyc3RhdGUoc3RhdGUpIG1lbXNldCgmKHN0YXRlKSwgMCwgc2l6ZW9mKFNIQTNfc3RhdGUpKQorCisvKiBUaGUgc3RydWN0dXJlIGZvciBzdG9yaW5nIFNIQTMgaW5mbyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIGludCBoYXNoYml0bGVuOworICAgIFNIQTNfc3RhdGUgaGFzaF9zdGF0ZTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrOworI2VuZGlmCisKK30gU0hBM29iamVjdDsKKworc3RhdGljIFB5VHlwZU9iamVjdCBTSEEzdHlwZTsKKworCitzdGF0aWMgU0hBM29iamVjdCAqCituZXdTSEEzb2JqZWN0KGludCBoYXNoYml0bGVuKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iajsKKworICAgIC8qIGNoZWNrIGhhc2hiaXRsZW4gKi8KKyAgICBzd2l0Y2goaGFzaGJpdGxlbikgeworICAgICAgICAvKiBzdXBwb3J0ZWQgaGFzaCBsZW5ndGggKi8KKyAgICAgICAgY2FzZSAyMjQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzODQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1MTI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgLyogIGFyYml0cmFyaWx5LWxvbmcgb3V0cHV0IGlzbid0IHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogZXZlcnl0aGluZyBlbHNlIGlzIGFuIGVycm9yICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImhhc2hiaXRsZW4gbXVzdCBiZSBvbmUgb2YgMjI0LCAyNTYsIDM4NCBvciA1MTIuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqID0gKFNIQTNvYmplY3QgKilQeU9iamVjdF9OZXcoU0hBM29iamVjdCwgJlNIQTN0eXBlKTsKKyAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld29iai0+aGFzaGJpdGxlbiA9IGhhc2hiaXRsZW47CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBuZXdvYmotPmxvY2sgPSBOVUxMOworI2VuZGlmCisgICAgcmV0dXJuIG5ld29iajsKK30KKworCisvKiBJbnRlcm5hbCBtZXRob2RzIGZvciBhIGhhc2ggb2JqZWN0ICovCisKK3N0YXRpYyB2b2lkCitTSEEzX2RlYWxsb2MoU0hBM29iamVjdCAqc2VsZikKK3sKKyAgICBTSEEzX2NsZWFyc3RhdGUoc2VsZi0+aGFzaF9zdGF0ZSk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jaykgeworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+bG9jayk7CisgICAgfQorI2VuZGlmCisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworfQorCisKKy8qIEV4dGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KKworUHlEb2NfU1RSVkFSKFNIQTNfY29weV9fZG9jX18sICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfY29weShTSEEzb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iajsKKworICAgIGlmICgobmV3b2JqID0gbmV3U0hBM29iamVjdChzZWxmLT5oYXNoYml0bGVuKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRU5URVJfSEFTSExJQihzZWxmKTsKKyAgICBTSEEzX2NvcHlzdGF0ZShuZXdvYmotPmhhc2hfc3RhdGUsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKK30KKworCitQeURvY19TVFJWQVIoU0hBM19kaWdlc3RfX2RvY19fLAorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19kaWdlc3QoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEzX01BWF9ESUdFU1RTSVpFXTsKKyAgICBTSEEzX3N0YXRlIHRlbXA7CisgICAgSGFzaFJldHVybiByZXM7CisKKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKHRlbXAsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmVzID0gU0hBM19kb25lKCZ0ZW1wLCBkaWdlc3QpOworICAgIFNIQTNfY2xlYXJzdGF0ZSh0ZW1wKTsKKyAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImludGVybmFsIGVycm9yIGluIFNIQTMgRmluYWwoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKilkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhc2hiaXRsZW4gLyA4KTsKK30KKworCitQeURvY19TVFJWQVIoU0hBM19oZXhkaWdlc3RfX2RvY19fLAorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfaGV4ZGlnZXN0KFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBM19NQVhfRElHRVNUU0laRV07CisgICAgU0hBM19zdGF0ZSB0ZW1wOworICAgIEhhc2hSZXR1cm4gcmVzOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisgICAgUHlfVUNTMSAqaGV4X2RpZ2VzdDsKKyAgICBpbnQgZGlnZXN0bGVuLCBpLCBqOworCisgICAgLyogR2V0IHRoZSByYXcgKGJpbmFyeSkgZGlnZXN0IHZhbHVlICovCisgICAgRU5URVJfSEFTSExJQihzZWxmKTsKKyAgICBTSEEzX2NvcHlzdGF0ZSh0ZW1wLCBzZWxmLT5oYXNoX3N0YXRlKTsKKyAgICBMRUFWRV9IQVNITElCKHNlbGYpOworICAgIHJlcyA9IFNIQTNfZG9uZSgmdGVtcCwgZGlnZXN0KTsKKyAgICBTSEEzX2NsZWFyc3RhdGUodGVtcCk7CisgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJpbnRlcm5hbCBlcnJvciBpbiBTSEEzIEZpbmFsKCkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIGEgbmV3IHN0cmluZyAqLworICAgIGRpZ2VzdGxlbiA9IHNlbGYtPmhhc2hiaXRsZW4gLyA4OworICAgIHJldHZhbCA9IFB5VW5pY29kZV9OZXcoZGlnZXN0bGVuICogMiwgMTI3KTsKKyAgICBpZiAoIXJldHZhbCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGhleF9kaWdlc3QgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXR2YWwpOworCisgICAgLyogTWFrZSBoZXggdmVyc2lvbiBvZiB0aGUgZGlnZXN0ICovCisgICAgZm9yKGk9aj0wOyBpIDwgZGlnZXN0bGVuOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjOworICAgICAgICBjID0gKGRpZ2VzdFtpXSA+PiA0KSAmIDB4ZjsKKyAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOworICAgICAgICBjID0gKGRpZ2VzdFtpXSAmIDB4Zik7CisgICAgICAgIGhleF9kaWdlc3RbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKKyAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJldHZhbCwgMSkpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworUHlEb2NfU1RSVkFSKFNIQTNfdXBkYXRlX19kb2NfXywKKyJVcGRhdGUgdGhpcyBoYXNoIG9iamVjdCdzIHN0YXRlIHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfdXBkYXRlKFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1cGRhdGUiLCAmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKG9iaiwgJmJ1Zik7CisKKyAgICAvKiBhZGQgbmV3IGRhdGEsIHRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbGVuZ3RoIGluIGJpdHMgbm90IGJ5dGVzICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMICYmIGJ1Zi5sZW4gPj0gSEFTSExJQl9HSUxfTUlOU0laRSkgeworICAgICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIH0KKyAgICAvKiBPbmNlIGEgbG9jayBleGlzdHMgYWxsIGNvZGUgcGF0aHMgbXVzdCBiZSBzeW5jaHJvbml6ZWQuIFdlIGhhdmUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwgZXZlbiBmb3Igc21hbGwgYnVmZmVycyBhcyBhY3F1aXJpbmcgdGhlIGxvY2sgbWF5IHRha2UKKyAgICAgKiBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHRpbWUgd2hlbiBhbm90aGVyIHRocmVhZCB1cGRhdGVzIHRoaXMgb2JqZWN0CisgICAgICogd2l0aCBsb3RzIG9mIGRhdGEuICovCisgICAgaWYgKHNlbGYtPmxvY2spIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9jaywgMSk7CisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+bG9jayk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXMgPSBTSEEzX3Byb2Nlc3MoJnNlbGYtPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyAgICB9CisjZWxzZQorICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworI2VuZGlmCisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKworICAgIGlmIChyZXMgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBTSEEzX21ldGhvZHNbXSA9IHsKKyAgICB7ImNvcHkiLCAgICAgIChQeUNGdW5jdGlvbilTSEEzX2NvcHksICAgICAgTUVUSF9OT0FSR1MsCisgICAgICAgICBTSEEzX2NvcHlfX2RvY19ffSwKKyAgICB7ImRpZ2VzdCIsICAgIChQeUNGdW5jdGlvbilTSEEzX2RpZ2VzdCwgICAgTUVUSF9OT0FSR1MsCisgICAgICAgICBTSEEzX2RpZ2VzdF9fZG9jX199LAorICAgIHsiaGV4ZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTNfaGV4ZGlnZXN0LCBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfaGV4ZGlnZXN0X19kb2NfX30sCisgICAgeyJ1cGRhdGUiLCAgICAoUHlDRnVuY3Rpb24pU0hBM191cGRhdGUsICAgIE1FVEhfVkFSQVJHUywKKyAgICAgICAgIFNIQTNfdXBkYXRlX19kb2NfX30sCisgICAge05VTEwsICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19nZXRfYmxvY2tfc2l6ZShTSEEzb2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICAgIC8qIEhNQUMtU0hBMyBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IGFuZCBubyBvZmZpY2lhbCB0ZXN0IHZlY3RvcnMgYXJlCisgICAgICogYXZhaWxhYmxlLiBUaHVzIGJsb2NrX3NpemUgcmV0dXJucyBOb3RJbXBsZW1lbnRlZCB0byBwcmV2ZW50IHBlb3BsZQorICAgICAqIGZyb20gdXNpbmcgU0hBMyB3aXRoIHRoZSBobWFjIG1vZHVsZS4KKyAgICAgKi8KKyAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9uYW1lKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJzaGEzXyVpIiwgc2VsZi0+aGFzaGJpdGxlbik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9kaWdlc3Rfc2l6ZShTSEEzb2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+aGFzaGJpdGxlbiAvIDgpOworfQorCisKK3N0YXRpYyBQeUdldFNldERlZiBTSEEzX2dldHNldGVyc1tdID0geworICAgIHsiYmxvY2tfc2l6ZSIsIChnZXR0ZXIpU0hBM19nZXRfYmxvY2tfc2l6ZSwgTlVMTCwgTlVMTCwgTlVMTH0sCisgICAgeyJuYW1lIiwgKGdldHRlcilTSEEzX2dldF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7ImRpZ2VzdF9zaXplIiwgKGdldHRlcilTSEEzX2dldF9kaWdlc3Rfc2l6ZSwgTlVMTCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBTSEEzdHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX3NoYTMuU0hBMyIsICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoU0hBM29iamVjdCksIC8qIHRwX3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogIG1ldGhvZHMgICovCisgICAgKGRlc3RydWN0b3IpU0hBM19kZWFsbG9jLCAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIFNIQTNfbWV0aG9kcywgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIFNIQTNfZ2V0c2V0ZXJzLCAgICAgLyogdHBfZ2V0c2V0ICovCit9OworCisKKy8qIGNvbnN0cnVjdG9yIGhlbHBlciAqLworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZmFjdG9yeShQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCwgY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgIGludCBoYXNoYml0bGVuKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iaiA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZGF0YV9vYmogPSBOVUxMOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgSGFzaFJldHVybiByZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsIGZtdCwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKGRhdGFfb2JqLCAmYnVmKTsKKworICAgIGlmICgobmV3b2JqID0gbmV3U0hBM29iamVjdChoYXNoYml0bGVuKSkgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChTSEEzX2luaXQoJm5ld29iai0+aGFzaF9zdGF0ZSwgaGFzaGJpdGxlbikgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoZGF0YV9vYmopIHsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBpZiAoYnVmLmxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgICAgICAvKiBpbnZhcmlhbnQ6IE5ldyBvYmplY3RzIGNhbid0IGJlIGFjY2Vzc2VkIGJ5IG90aGVyIGNvZGUgeWV0LAorICAgICAgICAgICAgICogdGh1cyBpdCdzIHNhZmUgdG8gcmVsZWFzZSB0aGUgR0lMIHdpdGhvdXQgbG9ja2luZyB0aGUgb2JqZWN0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXMgPSBTSEEzX3Byb2Nlc3MoJm5ld29iai0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvciBpbiBTSEEzIFVwZGF0ZSgpIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKKworICBlcnJvcjoKKyAgICBpZiAobmV3b2JqKSB7CisgICAgICAgIFNIQTNfZGVhbGxvYyhuZXdvYmopOworICAgIH0KKyAgICBpZiAoZGF0YV9vYmopIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CisKK30KKworUHlEb2NfU1RSVkFSKHNoYTNfMjI0X19kb2NfXywKKyJzaGEzXzIyNChbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDI4IGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18yMjQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18yMjQiLCAyMjQpOworfQorCisKK1B5RG9jX1NUUlZBUihzaGEzXzI1Nl9fZG9jX18sCisic2hhM18yNTYoW3N0cmluZ10pIC0+IFNIQTMgb2JqZWN0XG5cCitcblwKK1JldHVybiBhIG5ldyBTSEEzIGhhc2ggb2JqZWN0IHdpdGggYSBoYXNoYml0IGxlbmd0aCBvZiAzMiBieXRlcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NoYTNfMjU2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICByZXR1cm4gU0hBM19mYWN0b3J5KGFyZ3MsIGt3ZGljdCwgInxPOnNoYTNfMjU2IiwgMjU2KTsKK30KKworUHlEb2NfU1RSVkFSKHNoYTNfMzg0X19kb2NfXywKKyJzaGEzXzM4NChbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDQ4IGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18zODQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18zODQiLCAzODQpOworfQorCitQeURvY19TVFJWQVIoc2hhM181MTJfX2RvY19fLAorInNoYTNfNTEyKFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgNjQgYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzUxMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzUxMiIsIDUxMik7Cit9CisKKworLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgU0hBM19mdW5jdGlvbnNbXSA9IHsKKyAgICB7InNoYTNfMjI0IiwgKFB5Q0Z1bmN0aW9uKXNoYTNfMjI0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfMjI0X19kb2NfX30sCisgICAgeyJzaGEzXzI1NiIsIChQeUNGdW5jdGlvbilzaGEzXzI1NiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgICBzaGEzXzI1Nl9fZG9jX199LAorICAgIHsic2hhM18zODQiLCAoUHlDRnVuY3Rpb24pc2hhM18zODQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM18zODRfX2RvY19ffSwKKyAgICB7InNoYTNfNTEyIiwgKFB5Q0Z1bmN0aW9uKXNoYTNfNTEyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfNTEyX19kb2NfX30sCisgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLworfTsKKworCisvKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLiAqLworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfU0hBM21vZHVsZSA9IHsKKyAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICAgICAiX3NoYTMiLAorICAgICAgICBOVUxMLAorICAgICAgICAtMSwKKyAgICAgICAgU0hBM19mdW5jdGlvbnMsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3NoYTModm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKworICAgIFB5X1RZUEUoJlNIQTN0eXBlKSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzdHlwZSkgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9TSEEzbW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBM3R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBM1R5cGUiLCAoUHlPYmplY3QgKikmU0hBM3R5cGUpOworICAgIHJldHVybiBtOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwppbmRleCAzNjkzMzYzLi4zNjg5YTRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKaW5kZXggNDUxZWEyNC4uNTBjNmYwYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiY3Vyc29yLmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAKQEAgLTQyLDYgKzQxLDggQEAKICNlbmRpZgogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGN1cnNvcik7CisKIHN0YXRpYyBpbnQgcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfaXNvbGF0aW9uX2xldmVsKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBpc29sYXRpb25fbGV2ZWwpOwogc3RhdGljIHZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpOwogCkBAIC02MCw3ICs2MSwxMSBAQAogCiBpbnQgcHlzcWxpdGVfY29ubmVjdGlvbl9pbml0KHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCBOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7CisgICAgICAgICJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLAorICAgICAgICAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsICJ1cmkiLAorICAgICAgICBOVUxMCisgICAgfTsKIAogICAgIGNoYXIqIGRhdGFiYXNlOwogICAgIGludCBkZXRlY3RfdHlwZXMgPSAwOwpAQCAtNjgsMTEgKzczLDE0IEBACiAgICAgUHlPYmplY3QqIGZhY3RvcnkgPSBOVUxMOwogICAgIGludCBjaGVja19zYW1lX3RocmVhZCA9IDE7CiAgICAgaW50IGNhY2hlZF9zdGF0ZW1lbnRzID0gMTAwOworICAgIGludCB1cmkgPSAwOwogICAgIGRvdWJsZSB0aW1lb3V0ID0gNS4wOwogICAgIGludCByYzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhYmFzZSwgJnRpbWVvdXQsICZkZXRlY3RfdHlwZXMsICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2lwIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhYmFzZSwgJnRpbWVvdXQsICZkZXRlY3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMsICZ1cmkpKQogICAgIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTkxLDggKzk5LDE5IEBACiAgICAgUHlfSU5DUkVGKCZQeVVuaWNvZGVfVHlwZSk7CiAgICAgc2VsZi0+dGV4dF9mYWN0b3J5ID0gKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGU7CiAKKyNpZmRlZiBTUUxJVEVfT1BFTl9VUkkKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmMgPSBzcWxpdGUzX29wZW5fdjIoZGF0YWJhc2UsICZzZWxmLT5kYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTUUxJVEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICh1cmkgPyBTUUxJVEVfT1BFTl9VUkkgOiAwKSwgTlVMTCk7CisjZWxzZQorICAgIGlmICh1cmkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX05vdFN1cHBvcnRlZEVycm9yLCAiVVJJcyBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJjID0gc3FsaXRlM19vcGVuKGRhdGFiYXNlLCAmc2VsZi0+ZGIpOworI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKQEAgLTUwMywxMCArNTIyLDE2IEBACiAgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZmZlcjsKICAgICAgICAgUHlfc3NpemVfdCBidWZsZW47CiAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIocHlfdmFsLCAmYnVmZmVyLCAmYnVmbGVuKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImNvdWxkIG5vdCBjb252ZXJ0IEJMT0IgdG8gYnVmZmVyIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBzcWxpdGUzX3Jlc3VsdF9ibG9iKGNvbnRleHQsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKKyAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTE9CIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzcWxpdGUzX3Jlc3VsdF9ibG9iKGNvbnRleHQsIGJ1ZmZlciwgKGludClidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC02NzksNiArNzA0LDggQEAKICAgICBQeU9iamVjdCoqIGFnZ3JlZ2F0ZV9pbnN0YW5jZTsKICAgICBfUHlfSURFTlRJRklFUihmaW5hbGl6ZSk7CiAgICAgaW50IG9rOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworICAgIGludCByZXN0b3JlOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUdJTFN0YXRlX1NUQVRFIHRocmVhZHN0YXRlOwpAQCAtNjk0LDcgKzcyMSwxMiBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIC8qIEtlZXAgdGhlIGV4Y2VwdGlvbiAoaWYgYW55KSBvZiB0aGUgbGFzdCBjYWxsIHRvIHN0ZXAoKSAqLworICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKKyAgICByZXN0b3JlID0gMTsKKwogICAgIGZ1bmN0aW9uX3Jlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKmFnZ3JlZ2F0ZV9pbnN0YW5jZSwgJlB5SWRfZmluYWxpemUsICIiKTsKKwogICAgIFB5X0RFQ1JFRigqYWdncmVnYXRlX2luc3RhbmNlKTsKIAogICAgIG9rID0gMDsKQEAgLTcwOSw2ICs3NDEsMTcgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIH0KICAgICAgICAgX3NxbGl0ZTNfcmVzdWx0X2Vycm9yKGNvbnRleHQsICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIiwgLTEpOworI2lmIFNRTElURV9WRVJTSU9OX05VTUJFUiA8IDMwMDMwMDMKKyAgICAgICAgLyogd2l0aCBvbGQgU1FMaXRlIHZlcnNpb25zLCBfc3FsaXRlM19yZXN1bHRfZXJyb3IoKSBzZXRzIGEgbmV3IFB5dGhvbgorICAgICAgICAgICBleGNlcHRpb24sIHNvIGRvbid0IHJlc3RvcmUgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiAqLworICAgICAgICByZXN0b3JlID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChyZXN0b3JlKSB7CisgICAgICAgIC8qIFJlc3RvcmUgdGhlIGV4Y2VwdGlvbiAoaWYgYW55KSBvZiB0aGUgbGFzdCBjYWxsIHRvIHN0ZXAoKSwKKyAgICAgICAgICAgYnV0IGNsZWFyIGFsc28gdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGlmIGZpbmFsaXplKCkgZmFpbGVkICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogICAgIH0KIAogZXJyb3I6CkBAIC04NTksMjIgKzkwMiwyOSBAQAogCiAgICAgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKICAgICByZXQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0Kil1c2VyX2FyZywgImlzc3NzIiwgYWN0aW9uLCBhcmcxLCBhcmcyLCBkYm5hbWUsIGFjY2Vzc19hdHRlbXB0X3NvdXJjZSk7CiAKLSAgICBpZiAoIXJldCkgewotICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKSB7CisgICAgaWYgKHJldCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCiAgICAgICAgICAgICBQeUVycl9QcmludCgpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9CiAKICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhyZXQpKSB7CiAgICAgICAgICAgICByYyA9IF9QeUxvbmdfQXNJbnQocmV0KTsKLSAgICAgICAgICAgIGlmIChyYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYocmV0KTsKQEAgLTExODcsOSArMTIzNyw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZzcWwpKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9zdGF0ZW1lbnRfcmVmZXJlbmNlcyhzZWxmKTsKIApAQCAtMTIwNSw3ICsxMjU0LDYgQEAKICAgICBzdGF0ZW1lbnQtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIHJjID0gcHlzcWxpdGVfc3RhdGVtZW50X2NyZWF0ZShzdGF0ZW1lbnQsIHNlbGYsIHNxbCk7Ci0KICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIGlmIChyYyA9PSBQWVNRTElURV9UT09fTVVDSF9TUUwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9XYXJuaW5nLCAiWW91IGNhbiBvbmx5IGV4ZWN1dGUgb25lIHN0YXRlbWVudCBhdCBhIHRpbWUuIik7CkBAIC0xMjE1LDI1ICsxMjYzLDIzIEBACiAgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc3RhdGVtZW50KTsKICAgICAgICAgICAgIF9weXNxbGl0ZV9zZXRlcnJvcihzZWxmLT5kYiwgTlVMTCk7CiAgICAgICAgIH0KLQotICAgICAgICBQeV9DTEVBUihzdGF0ZW1lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdlYWtyZWYgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCopc3RhdGVtZW50LCBOVUxMKTsKLSAgICAgICAgaWYgKCF3ZWFrcmVmKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUihzdGF0ZW1lbnQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPnN0YXRlbWVudHMsIHdlYWtyZWYpICE9IDApIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHdlYWtyZWYpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotCi0gICAgICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLWVycm9yOgorICAgIHdlYWtyZWYgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCopc3RhdGVtZW50LCBOVUxMKTsKKyAgICBpZiAod2Vha3JlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPnN0YXRlbWVudHMsIHdlYWtyZWYpICE9IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9ERUNSRUYod2Vha3JlZik7CisKICAgICByZXR1cm4gKFB5T2JqZWN0KilzdGF0ZW1lbnQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzdGF0ZW1lbnQpOworICAgIHJldHVybiBOVUxMOwogfQogCiBQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpAQCAtMTI0MSw3ICsxMjg3LDYgQEAKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0xMjcxLDcgKzEzMTYsNiBAQAogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEzMDEsNyArMTM0NSw2IEBACiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCmluZGV4IDQ5OTk0MTUuLjhkMTA4OTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfaXRlcm5leHQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKTsKIApAQCAtMzM5LDYgKzMzOCwxMSBAQAogICAgICAgICAgICAgICAgIGlmIChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgPT0gKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHZhbF9zdHIsIG5ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVkKSB7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIGRlYnVnIG1vZGUsIHR5cGVfY2FsbCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lID0gc3FsaXRlM19jb2x1bW5fbmFtZShzZWxmLT5zdGF0ZW1lbnQtPnN0LCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29sbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSAiPHVua25vd24gY29sdW1uIG5hbWU+IjsKQEAgLTg2NywxMCArODcxLDE1IEBACiAgICAgfQogCiAgICAgbmV4dF9yb3dfdHVwbGUgPSBzZWxmLT5uZXh0X3JvdzsKKyAgICBhc3NlcnQobmV4dF9yb3dfdHVwbGUgIT0gTlVMTCk7CiAgICAgc2VsZi0+bmV4dF9yb3cgPSBOVUxMOwogCiAgICAgaWYgKHNlbGYtPnJvd19mYWN0b3J5ICE9IFB5X05vbmUpIHsKICAgICAgICAgbmV4dF9yb3cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cm93X2ZhY3RvcnksICJPTyIsIHNlbGYsIG5leHRfcm93X3R1cGxlKTsKKyAgICAgICAgaWYgKG5leHRfcm93ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNlbGYtPm5leHRfcm93ID0gbmV4dF9yb3dfdHVwbGU7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYobmV4dF9yb3dfdHVwbGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5leHRfcm93ID0gbmV4dF9yb3dfdHVwbGU7CkBAIC04ODcsNiArODk2LDEyIEBACiAKICAgICAgICAgaWYgKHJjID09IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgIHNlbGYtPm5leHRfcm93ID0gX3B5c3FsaXRlX2ZldGNoX29uZV9yb3coc2VsZik7CisgICAgICAgICAgICBpZiAoc2VsZi0+bmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvdyk7CisgICAgICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmNvbm5lY3Rpb24tPmRiLCBOVUxMKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCmluZGV4IGJlYTZkNmEuLjdhN2U4NjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKQEAgLTUwLDE5ICs1MCwyNiBAQAogICAgICAqIEMtbGV2ZWwsIHNvIHRoaXMgY29kZSBpcyByZWR1bmRhbnQgd2l0aCB0aGUgb25lIGluIGNvbm5lY3Rpb25faW5pdCBpbgogICAgICAqIGNvbm5lY3Rpb24uYyBhbmQgbXVzdCBhbHdheXMgYmUgY29waWVkIGZyb20gdGhlcmUgLi4uICovCiAKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgTlVMTCwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geworICAgICAgICAiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwKKyAgICAgICAgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCAidXJpIiwKKyAgICAgICAgTlVMTAorICAgIH07CiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CiAgICAgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbDsKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHM7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAKICAgICBQeU9iamVjdCogcmVzdWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03Nyw3ICs4NCw4IEBACiB9CiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfY29ubmVjdF9kb2MsCi0iY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGlzb2xhdGlvbl9sZXZlbCwgZGV0ZWN0X3R5cGVzLCBmYWN0b3J5XSlcblwKKyJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsXG5cCisgICAgICAgIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50cywgdXJpXSlcblwKIFxuXAogT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZSAqZGF0YWJhc2UqLiBZb3UgY2FuIHVzZVxuXAogXCI6bWVtb3J5OlwiIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluXG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwppbmRleCBmYzY4ODc0Li5mMmM4NWY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKIAogaW50IHB5c3FsaXRlX3ByZXBhcmVfcHJvdG9jb2xfaW5pdChweXNxbGl0ZV9QcmVwYXJlUHJvdG9jb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCmluZGV4IGI1MDY1OGMuLjRhODdhMDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgInJvdy5oIgogI2luY2x1ZGUgImN1cnNvci5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiB2b2lkIHB5c3FsaXRlX3Jvd19kZWFsbG9jKHB5c3FsaXRlX1Jvdyogc2VsZikKIHsKQEAgLTY4LDcgKzY3LDcgQEAKIHsKICAgICBsb25nIF9pZHg7CiAgICAgY2hhcioga2V5OwotICAgIGludCBuaXRlbXMsIGk7CisgICAgUHlfc3NpemVfdCBuaXRlbXMsIGk7CiAgICAgY2hhciogY29tcGFyZV9rZXk7CiAKICAgICBjaGFyKiBwMTsKQEAgLTg5LDcgKzg4LDEwIEBACiAgICAgICAgIG5pdGVtcyA9IFB5VHVwbGVfU2l6ZShzZWxmLT5kZXNjcmlwdGlvbik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7Ci0gICAgICAgICAgICBjb21wYXJlX2tleSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlUdXBsZV9HRVRfSVRFTShQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmRlc2NyaXB0aW9uLCBpKSwgMCkpOworICAgICAgICAgICAgUHlPYmplY3QgKm9iajsKKyAgICAgICAgICAgIG9iaiA9IFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+ZGVzY3JpcHRpb24sIGkpOworICAgICAgICAgICAgb2JqID0gUHlUdXBsZV9HRVRfSVRFTShvYmosIDApOworICAgICAgICAgICAgY29tcGFyZV9rZXkgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG9iaik7CiAgICAgICAgICAgICBpZiAoIWNvbXBhcmVfa2V5KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CkBAIC0xMjEsMTAgKzEyMywxMiBAQAogCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiTm8gaXRlbSB3aXRoIHRoYXQga2V5Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpZHgpKSB7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaWR4KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNsaWNlcyBub3QgaW1wbGVtZW50ZWQsIHlldCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJJbmRleCBtdXN0IGJlIGludCBvciBzdHJpbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oIGIvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIwZjE2Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIHNxbGl0ZWNvbXBhdC5oIC0gY29tcGF0aWJpbGl0eSBtYWNyb3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCi0gKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi0gKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAotICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAotICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgotICoKLSAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90Ci0gKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQotICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi0gKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgotICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKLSAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KLSAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCi0gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaWZuZGVmIFBZU1FMSVRFX0NPTVBBVF9ICi0jZGVmaW5lIFBZU1FMSVRFX0NPTVBBVF9ICi0KLS8qIGRlZmluZSBQeV9zc2l6ZV90IGZvciBwcmUtMi41IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotdHlwZWRlZiBpbnQgKCpsZW5mdW5jKShQeU9iamVjdCopOwotI2VuZGlmCi0KLQotLyogZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0IGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotI2lmbmRlZiBQeURpY3RfQ2hlY2tFeGFjdAotI2RlZmluZSBQeURpY3RfQ2hlY2tFeGFjdChvcCkgKChvcCktPm9iX3R5cGUgPT0gJlB5RGljdF9UeXBlKQotI2VuZGlmCi0KLS8qIGRlZmluZSBQeV9DTEVBUiBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLSNpZm5kZWYgUHlfQ0xFQVIKLSNkZWZpbmUgUHlfQ0xFQVIob3ApCQkJCVwKLSAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAotICAgICAgICAgICAgICAgIGlmIChvcCkgewkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSAoUHlPYmplY3QgKikob3ApOwlcCi0gICAgICAgICAgICAgICAgICAgICAgICAob3ApID0gTlVMTDsJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwkJXAotICAgICAgICAgICAgICAgIH0JCQkJXAotICAgICAgICB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgUHlWYXJPYmplY3RfSEVBRF9JTklUCi0jZGVmaW5lIFB5VmFyT2JqZWN0X0hFQURfSU5JVCh0eXBlLCBzaXplKSBcCi0gICAgUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpIHNpemUsCi0jZW5kaWYKLQotI2lmbmRlZiBQeV9UWVBFCi0jZGVmaW5lIFB5X1RZUEUob2IpICgob2IpLT5vYl90eXBlKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCmluZGV4IDQ3MWEwNjcuLjY2YjRhNTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJtaWNyb3Byb3RvY29scy5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIC8qIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBpbnQgcHlzcWxpdGVfY2hlY2tfcmVtYWluaW5nX3NxbChjb25zdCBjaGFyKiB0YWlsKTsKQEAgLTEzMywxOCArMTMyLDI2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUWVBFX1VOSUNPREU6CiAgICAgICAgICAgICBzdHJpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShwYXJhbWV0ZXIsICZidWZsZW4pOwotICAgICAgICAgICAgaWYgKHN0cmluZyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX3RleHQoc2VsZi0+c3QsIHBvcywgc3RyaW5nLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBpZiAoc3RyaW5nID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBsb25nZXIgdGhhbiBJTlRfTUFYIGJ5dGVzIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIChpbnQpYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfQlVGRkVSOgotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihwYXJhbWV0ZXIsICZidWZmZXIsICZidWZsZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgIT0gMCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChidWZsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTE9CIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5LTk9XTjoKICAgICAgICAgICAgIHJjID0gLTE7CkBAIC0xNzcsNyArMTg0LDcgQEAKICAgICBpbnQgaTsKICAgICBpbnQgcmM7CiAgICAgaW50IG51bV9wYXJhbXNfbmVlZGVkOwotICAgIGludCBudW1fcGFyYW1zOworICAgIFB5X3NzaXplX3QgbnVtX3BhcmFtczsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBudW1fcGFyYW1zX25lZWRlZCA9IHNxbGl0ZTNfYmluZF9wYXJhbWV0ZXJfY291bnQoc2VsZi0+c3QpOwpAQCAtMTkzLDcgKzIwMCw5IEBACiAgICAgICAgICAgICBudW1fcGFyYW1zID0gUHlTZXF1ZW5jZV9TaXplKHBhcmFtZXRlcnMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChudW1fcGFyYW1zICE9IG51bV9wYXJhbXNfbmVlZGVkKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIkluY29ycmVjdCBudW1iZXIgb2YgYmluZGluZ3Mgc3VwcGxpZWQuIFRoZSBjdXJyZW50IHN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICVkIHN1cHBsaWVkLiIsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0ZW1lbnQgdXNlcyAlZCwgYW5kIHRoZXJlIGFyZSAlemQgc3VwcGxpZWQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFyYW1zX25lZWRlZCwgbnVtX3BhcmFtcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI0OSw3ICsyNTgsNyBAQAogICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeURpY3RfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoY3VycmVudF9wYXJhbSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCAoY2hhciopYmluZGluZ19uYW1lKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgYmluZGluZ19uYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY3VycmVudF9wYXJhbSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiWW91IGRpZCBub3Qgc3VwcGx5IGEgdmFsdWUgZm9yIGJpbmRpbmcgJWQuIiwgaSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwppbmRleCBkODhiYzNmLi4zMTJmZTNiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgIH0KICMgZW5kaWYKICNlbmRpZgotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUHlfU0FGRV9ET1dOQ0FTVCh2YWx1ZSwgc3FsaXRlX2ludDY0LCBsb25nKSk7CiB9CiAKIHNxbGl0ZV9pbnQ2NApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3JlLmMgYi9Nb2R1bGVzL19zcmUuYwppbmRleCAxYzc2ZDI0Li41NWE4NmMyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcmUuYworKysgYi9Nb2R1bGVzL19zcmUuYwpAQCAtNCwyNCArNCwyNSBAQAogICogcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGVuZ2luZQogICoKICAqIHBhcnRpYWwgaGlzdG9yeToKLSAqIDE5OTktMTAtMjQgZmwgIGNyZWF0ZWQgKGJhc2VkIG9uIGV4aXN0aW5nIHRlbXBsYXRlIG1hdGNoZXIgY29kZSkKLSAqIDIwMDAtMDMtMDYgZmwgIGZpcnN0IGFscGhhLCBzb3J0IG9mCi0gKiAyMDAwLTA4LTAxIGZsICBmaXhlcyBmb3IgMS42YjEKLSAqIDIwMDAtMDgtMDcgZmwgIHVzZSBQeU9TX0NoZWNrU3RhY2soKSBpZiBhdmFpbGFibGUKLSAqIDIwMDAtMDktMjAgZmwgIGFkZGVkIGV4cGFuZCBtZXRob2QKLSAqIDIwMDEtMDMtMjAgZmwgIGxvdHMgb2YgZml4ZXMgZm9yIDIuMWIyCi0gKiAyMDAxLTA0LTE1IGZsICBleHBvcnQgY29weXJpZ2h0IGFzIFB5dGhvbiBhdHRyaWJ1dGUsIG5vdCBnbG9iYWwKLSAqIDIwMDEtMDQtMjggZmwgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCi0gKiAyMDAxLTA1LTE0IGZsICBmaXhlcyBmb3IgMS41LjIgY29tcGF0aWJpbGl0eQotICogMjAwMS0wNy0wMSBmbCAgYWRkZWQgQklHQ0hBUlNFVCBzdXBwb3J0IChmcm9tIE1hcnRpbiB2b24gTG9ld2lzKQotICogMjAwMS0xMC0xOCBmbCAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQotICogMjAwMS0xMC0yMCBmbCAgYWRkZWQgc3BsaXQgcHJpbWl0aXZlOyByZWVuYWJsZSB1bmljb2RlIGZvciAxLjYvMi4wLzIuMQotICogMjAwMS0xMC0yMSBmbCAgYWRkZWQgc3ViL3N1Ym4gcHJpbWl0aXZlCi0gKiAyMDAxLTEwLTI0IGZsICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKLSAqIDIwMDEtMTItMDcgZmwgIGZpeGVkIG1lbW9yeSBsZWFrIGluIHN1Yi9zdWJuIChHdWlkbyB2YW4gUm9zc3VtKQotICogMjAwMi0xMS0wOSBmbCAgZml4ZWQgZW1wdHkgc3ViL3N1Ym4gcmV0dXJuIHR5cGUKLSAqIDIwMDMtMDQtMTggbXZsIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCi0gKiAyMDAzLTEwLTE3IGduICBpbXBsZW1lbnRlZCBub24gcmVjdXJzaXZlIHNjaGVtZQorICogMTk5OS0xMC0yNCBmbCAgIGNyZWF0ZWQgKGJhc2VkIG9uIGV4aXN0aW5nIHRlbXBsYXRlIG1hdGNoZXIgY29kZSkKKyAqIDIwMDAtMDMtMDYgZmwgICBmaXJzdCBhbHBoYSwgc29ydCBvZgorICogMjAwMC0wOC0wMSBmbCAgIGZpeGVzIGZvciAxLjZiMQorICogMjAwMC0wOC0wNyBmbCAgIHVzZSBQeU9TX0NoZWNrU3RhY2soKSBpZiBhdmFpbGFibGUKKyAqIDIwMDAtMDktMjAgZmwgICBhZGRlZCBleHBhbmQgbWV0aG9kCisgKiAyMDAxLTAzLTIwIGZsICAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKKyAqIDIwMDEtMDQtMTUgZmwgICBleHBvcnQgY29weXJpZ2h0IGFzIFB5dGhvbiBhdHRyaWJ1dGUsIG5vdCBnbG9iYWwKKyAqIDIwMDEtMDQtMjggZmwgICBhZGRlZCBfX2NvcHlfXyBtZXRob2RzICh3b3JrIGluIHByb2dyZXNzKQorICogMjAwMS0wNS0xNCBmbCAgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5CisgKiAyMDAxLTA3LTAxIGZsICAgYWRkZWQgQklHQ0hBUlNFVCBzdXBwb3J0IChmcm9tIE1hcnRpbiB2b24gTG9ld2lzKQorICogMjAwMS0xMC0xOCBmbCAgIGZpeGVkIGdyb3VwIHJlc2V0IGlzc3VlIChmcm9tIE1hdHRoZXcgTXVlbGxlcikKKyAqIDIwMDEtMTAtMjAgZmwgICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCisgKiAyMDAxLTEwLTIxIGZsICAgYWRkZWQgc3ViL3N1Ym4gcHJpbWl0aXZlCisgKiAyMDAxLTEwLTI0IGZsICAgYWRkZWQgZmluZGl0ZXIgcHJpbWl0aXZlIChmb3IgMi4yIG9ubHkpCisgKiAyMDAxLTEyLTA3IGZsICAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCisgKiAyMDAyLTExLTA5IGZsICAgZml4ZWQgZW1wdHkgc3ViL3N1Ym4gcmV0dXJuIHR5cGUKKyAqIDIwMDMtMDQtMTggbXZsICBmdWxseSBzdXBwb3J0IDQtYnl0ZSBjb2RlcworICogMjAwMy0xMC0xNyBnbiAgIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAyMDEzLTAyLTA0IG1yYWIgYWRkZWQgZnVsbG1hdGNoIHByaW1pdGl2ZQogICoKICAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNCw4ICszNSw2IEBACiAgKiBvdGhlciBjb21wYXRpYmlsaXR5IHdvcmsuCiAgKi8KIAotI2lmbmRlZiBTUkVfUkVDVVJTSVZFCi0KIHN0YXRpYyBjaGFyIGNvcHlyaWdodFtdID0KICAgICAiIFNSRSAyLjIuMiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBieSBTZWNyZXQgTGFicyBBQiAiOwogCkBAIC00Niw2ICs0NSw4IEBACiAKICNpbmNsdWRlICJzcmUuaCIKIAorI2RlZmluZSBTUkVfQ09ERV9CSVRTICg4ICogc2l6ZW9mKFNSRV9DT0RFKSkKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKIC8qIG5hbWUgb2YgdGhpcyBtb2R1bGUsIG1pbnVzIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUgKi8KQEAgLTU4LDkgKzU5LDYgQEAKIC8qIGRlZmluaW5nIHRoaXMgb25lIGVuYWJsZXMgdHJhY2luZyAqLwogI3VuZGVmIFZFUkJPU0UKIAotLyogZGVmaW5pbmcgdGhpcyBlbmFibGVzIHVuaWNvZGUgc3VwcG9ydCAoZGVmYXVsdCB1bmRlciAxLjZhMSBhbmQgbGF0ZXIpICovCi0jZGVmaW5lIEhBVkVfVU5JQ09ERQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogb3B0aW9uYWwgZmVhdHVyZXMgKi8KIApAQCAtNzAsMTAgKzY4LDYgQEAKIC8qIGVuYWJsZXMgY29weS9kZWVwY29weSBoYW5kbGluZyAod29yayBpbiBwcm9ncmVzcykgKi8KICN1bmRlZiBVU0VfQlVJTFRJTl9DT1BZCiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDEwNjAwMDAKLSNkZWZpbmUgUHlPYmplY3RfREVMKG9wKSBQeU1lbV9ERUwoKG9wKSkKLSNlbmRpZgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTE1MCw5ICsxNDQsNiBAQAogLyogbG9jYWxlLXNwZWNpZmljIGNoYXJhY3RlciBwcmVkaWNhdGVzICovCiAvKiAhKGMgJiB+TikgPT0gKGMgPCBOKzEpIGZvciBhbnkgdW5zaWduZWQgYywgdGhpcyBhdm9pZHMKICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0jZGVmaW5lIFNSRV9MT0NfSVNfRElHSVQoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzZGlnaXQoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX1NQQUNFKGNoKSAoISgoY2gpICYgfjI1NSkgPyBpc3NwYWNlKChjaCkpIDogMCkKLSNkZWZpbmUgU1JFX0xPQ19JU19MSU5FQlJFQUsoY2gpICgoY2gpID09ICdcbicpCiAjZGVmaW5lIFNSRV9MT0NfSVNfQUxOVU0oY2gpICghKChjaCkgJiB+MjU1KSA/IGlzYWxudW0oKGNoKSkgOiAwKQogI2RlZmluZSBTUkVfTE9DX0lTX1dPUkQoY2gpIChTUkVfTE9DX0lTX0FMTlVNKChjaCkpIHx8IChjaCkgPT0gJ18nKQogCkBAIC0yNTYsMTM4MCArMjQ3LDMyIEBACiAKIC8qIGdlbmVyYXRlIDgtYml0IHZlcnNpb24gKi8KIAotI2RlZmluZSBTUkVfQ0hBUiB1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIFNSRV9DSEFSR0VUKHN0YXRlLCBidWYsIGluZGV4KSAoKHVuc2lnbmVkIGNoYXIqKWJ1ZilbaW5kZXhdCi0jZGVmaW5lIFNSRV9BVCBzcmVfYXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV9jb3VudAotI2RlZmluZSBTUkVfQ0hBUlNFVCBzcmVfY2hhcnNldAotI2RlZmluZSBTUkVfSU5GTyBzcmVfaW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX21hdGNoCi0jZGVmaW5lIFNSRV9NQVRDSF9DT05URVhUIHNyZV9tYXRjaF9jb250ZXh0Ci0jZGVmaW5lIFNSRV9TRUFSQ0ggc3JlX3NlYXJjaAorI2RlZmluZSBTUkVfQ0hBUiBQeV9VQ1MxCisjZGVmaW5lIFNJWkVPRl9TUkVfQ0hBUiAxCisjZGVmaW5lIFNSRShGKSBzcmVfdWNzMV8jI0YKKyNpbmNsdWRlICJzcmVfbGliLmgiCiAKLSNkZWZpbmUgU1JFX1JFQ1VSU0lWRQotI2luY2x1ZGUgIl9zcmUuYyIKLSN1bmRlZiBTUkVfUkVDVVJTSVZFCisvKiBnZW5lcmF0ZSAxNi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSN1bmRlZiBTUkVfU0VBUkNICi0jdW5kZWYgU1JFX01BVENICi0jdW5kZWYgU1JFX01BVENIX0NPTlRFWFQKLSN1bmRlZiBTUkVfSU5GTwotI3VuZGVmIFNSRV9DSEFSU0VUCi0jdW5kZWYgU1JFX0NPVU5UCi0jdW5kZWYgU1JFX0FUCi0jdW5kZWYgU1JFX0NIQVIKLSN1bmRlZiBTUkVfQ0hBUkdFVAorI2RlZmluZSBTUkVfQ0hBUiBQeV9VQ1MyCisjZGVmaW5lIFNJWkVPRl9TUkVfQ0hBUiAyCisjZGVmaW5lIFNSRShGKSBzcmVfdWNzMl8jI0YKKyNpbmNsdWRlICJzcmVfbGliLmgiCiAKLS8qIGdlbmVyYXRlIDgvMTYvMzItYml0IHVuaWNvZGUgdmVyc2lvbiAqLworLyogZ2VuZXJhdGUgMzItYml0IHVuaWNvZGUgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHZvaWQKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpIFwKLSAgICAoKHN0YXRlLT5jaGFyc2l6ZT09MSkgPyAoKFB5X1VDUzEqKWJ1ZilbaW5kZXhdIDogXAotICAgICAoc3RhdGUtPmNoYXJzaXplPT0yKSA/ICgoUHlfVUNTMiopYnVmKVtpbmRleF0gOiBcCi0gICAgICgoUHlfVUNTNCopYnVmKVtpbmRleF0pCi0jZGVmaW5lIFNSRV9BVCBzcmVfdWF0Ci0jZGVmaW5lIFNSRV9DT1VOVCBzcmVfdWNvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV91Y2hhcnNldAotI2RlZmluZSBTUkVfSU5GTyBzcmVfdWluZm8KLSNkZWZpbmUgU1JFX01BVENIIHNyZV91bWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX3VtYXRjaF9jb250ZXh0Ci0jZGVmaW5lIFNSRV9TRUFSQ0ggc3JlX3VzZWFyY2gKLQotI2VuZGlmIC8qIFNSRV9SRUNVUlNJVkUgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFN0cmluZyBtYXRjaGluZyBlbmdpbmUgKi8KLQotLyogdGhlIGZvbGxvd2luZyBzZWN0aW9uIGlzIGNvbXBpbGVkIHR3aWNlLCB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIKLSAgIHNldHRpbmdzICovCi0KLUxPQ0FMKGludCkKLVNSRV9BVChTUkVfU1RBVEUqIHN0YXRlLCBjaGFyKiBwdHIsIFNSRV9DT0RFIGF0KQotewotICAgIC8qIGNoZWNrIGlmIHBvaW50ZXIgaXMgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KLQotICAgIFB5X3NzaXplX3QgdGhpc3AsIHRoYXRwOwotCi0gICAgc3dpdGNoIChhdCkgewotCi0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HOgotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19TVFJJTkc6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyk7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpKTsKLQotICAgIGNhc2UgU1JFX0FUX0VORDoKLSAgICAgICAgcmV0dXJuICgoKHZvaWQqKSAocHRyK3N0YXRlLT5jaGFyc2l6ZSkgPT0gc3RhdGUtPmVuZCAmJgotICAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkgfHwKLSAgICAgICAgICAgICAgICAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX0xJTkU6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCB8fAotICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKTsKLQotICAgIGNhc2UgU1JFX0FUX0VORF9TVFJJTkc6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCk7Ci0KLSAgICBjYXNlIFNSRV9BVF9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX05PTl9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX0xPQ19CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX05PTl9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfVU5JX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotTE9DQUwoaW50KQotU1JFX0NIQVJTRVQoU1JFX0NPREUqIHNldCwgU1JFX0NPREUgY2gpCi17Ci0gICAgLyogY2hlY2sgaWYgY2hhcmFjdGVyIGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBzZXQgKi8KLQotICAgIGludCBvayA9IDE7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHN3aXRjaCAoKnNldCsrKSB7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKLSAgICAgICAgICAgIHJldHVybiAhb2s7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChjaCA9PSBzZXRbMF0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0Kys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCi0gICAgICAgICAgICBpZiAoc3JlX2NhdGVnb3J5KHNldFswXSwgKGludCkgY2gpKQotICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgIHNldCArPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDE2IGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA0XSAmICgxIDw8IChjaCAmIDE1KSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDE2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogPENIQVJTRVQ+IDxiaXRtYXA+ICgzMiBiaXRzIHBlciBjb2RlIHdvcmQpICovCi0gICAgICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmIChzZXRbY2ggPj4gNV0gJiAoMXUgPDwgKGNoICYgMzEpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gODsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1JBTkdFOgotICAgICAgICAgICAgLyogPFJBTkdFPiA8bG93ZXI+IDx1cHBlcj4gKi8KLSAgICAgICAgICAgIGlmIChzZXRbMF0gPD0gY2ggJiYgY2ggPD0gc2V0WzFdKQotICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgIHNldCArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTkVHQVRFOgotICAgICAgICAgICAgb2sgPSAhb2s7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9CSUdDSEFSU0VUOgotICAgICAgICAgICAgLyogPEJJR0NIQVJTRVQ+IDxibG9ja2NvdW50PiA8MjU2IGJsb2NraW5kaWNlcz4gPGJsb2Nrcz4gKi8KLSAgICAgICAgewotICAgICAgICAgICAgUHlfc3NpemVfdCBjb3VudCwgYmxvY2s7Ci0gICAgICAgICAgICBjb3VudCA9ICooc2V0KyspOwotCi0gICAgICAgICAgICBpZiAoc2l6ZW9mKFNSRV9DT0RFKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDEyODsKLSAgICAgICAgICAgICAgICBpZiAoc2V0W2Jsb2NrKjE2ICsgKChjaCAmIDI1NSk+PjQpXSAmICgxIDw8IChjaCAmIDE1KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gY291bnQqMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiAhKGMgJiB+TikgPT0gKGMgPCBOKzEpIGZvciBhbnkgdW5zaWduZWQgYywgdGhpcyBhdm9pZHMKLSAgICAgICAgICAgICAgICAgKiB3YXJuaW5ncyB3aGVuIGMncyB0eXBlIHN1cHBvcnRzIG9ubHkgbnVtYmVycyA8IE4rMSAqLwotICAgICAgICAgICAgICAgIGlmICghKGNoICYgfjY1NTM1KSkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBibG9jayA9IC0xOwotICAgICAgICAgICAgICAgIHNldCArPSA2NDsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2sgPj0wICYmCi0gICAgICAgICAgICAgICAgICAgIChzZXRbYmxvY2sqOCArICgoY2ggJiAyNTUpPj41KV0gJiAoMXUgPDwgKGNoICYgMzEpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gY291bnQqODsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8qIGludGVybmFsIGVycm9yIC0tIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IGl0Ci0gICAgICAgICAgICAgICBoZXJlLCBzbyBsZXQncyBqdXN0IHByZXRlbmQgaXQgZGlkbid0IG1hdGNoLi4uICovCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotTE9DQUwoUHlfc3NpemVfdCkgU1JFX01BVENIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKTsKLQotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9DT1VOVChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICBTUkVfQ09ERSBjaHI7Ci0gICAgY2hhciogcHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotICAgIGNoYXIqIGVuZCA9IChjaGFyICopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0KLSAgICAvKiBhZGp1c3QgZW5kICovCi0gICAgaWYgKG1heGNvdW50IDwgKGVuZCAtIHB0cikgLyBzdGF0ZS0+Y2hhcnNpemUgJiYgbWF4Y291bnQgIT0gU1JFX01BWFJFUEVBVCkKLSAgICAgICAgZW5kID0gcHRyICsgbWF4Y291bnQqc3RhdGUtPmNoYXJzaXplOwotCi0gICAgc3dpdGNoIChwYXR0ZXJuWzBdKSB7Ci0KLSAgICBjYXNlIFNSRV9PUF9JTjoKLSAgICAgICAgLyogcmVwZWF0ZWQgc2V0ICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIElOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJgotICAgICAgICAgICAgICAgU1JFX0NIQVJTRVQocGF0dGVybiArIDIsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfQU5ZOgotICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWVxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9JU19MSU5FQlJFQUsoU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICBza2lwIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldAotICAgICAgICAgICBzdHJpbmcsIGFuZCBiYWNrdHJhY2sgZnJvbSB0aGVyZSAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllfQUxMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgcHRyID0gZW5kOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApID09IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpID09IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6Ci0gICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgIT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICAvKiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgU1VCUEFUVEVSTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlICgoY2hhciopIHN0YXRlLT5wdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGkgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgICAgICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgICAgIHJldHVybiAoKGNoYXIqKXN0YXRlLT5wdHIgLSBwdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLSAgICB9Ci0KLSAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCi0gICAgICAgICAgIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZSkpOwotICAgIHJldHVybiAocHRyIC0gKGNoYXIqKSBzdGF0ZS0+cHRyKS9zdGF0ZS0+Y2hhcnNpemU7Ci19Ci0KLSNpZiAwIC8qIG5vdCB1c2VkIGluIHRoaXMgcmVsZWFzZSAqLwotTE9DQUwoaW50KQotU1JFX0lORk8oU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCi17Ci0gICAgLyogY2hlY2sgaWYgYW4gU1JFX09QX0lORk8gYmxvY2sgbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgU1JFX0NPREUgb2JqZWN0cyB0byBza2lwIGlmIHN1Y2Nlc3NmdWwsIDAKLSAgICAgICBpZiBubyBtYXRjaCAqLwotCi0gICAgY2hhciogZW5kID0gc3RhdGUtPmVuZDsKLSAgICBjaGFyKiBwdHIgPSBzdGF0ZS0+cHRyOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGNoZWNrIG1pbmltYWwgbGVuZ3RoICovCi0gICAgaWYgKHBhdHRlcm5bM10gJiYgKGVuZCAtIHB0cikvc3RhdGUtPmNoYXJzaXplIDwgcGF0dGVyblszXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBjaGVjayBrbm93biBwcmVmaXggKi8KLSAgICBpZiAocGF0dGVyblsyXSAmIFNSRV9JTkZPX1BSRUZJWCAmJiBwYXR0ZXJuWzVdID4gMSkgewotICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybls1XTsgaSsrKQotICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgaSkgIT0gcGF0dGVybls3ICsgaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBwYXR0ZXJuWzBdICsgMiAqIHBhdHRlcm5bNl07Ci0gICAgfQotICAgIHJldHVybiBwYXR0ZXJuWzBdOwotfQotI2VuZGlmCi0KLS8qIFRoZSBtYWNyb3MgYmVsb3cgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqIGNhbGxzIHRoYXQgKmZhaWxlZCogYW5kIGRvICpub3QqIHJldHVybiBpbW1lZGlhdGVseSAoSU9XLCB0aG9zZQotICogdGhhdCB3aWxsIGJhY2t0cmFjaykuIEV4cGxhaW5pbmc6Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgdHJ1ZTogdGhhdCdzIHVzdWFsbHkgYSBzdWNjZXNzCi0gKiAgIChiZXNpZGVzIGF0eXBpY2FsIGNhc2VzIGxpa2UgQVNTRVJUX05PVCksIHRoZXJlZm9yZSB0aGVyZSdzIG5vCi0gKiAgIHJlYXNvbiB0byByZXN0b3JlIGxhc3RtYXJrOwotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIGZhbHNlIGJ1dCB0aGUgY3VycmVudCBTUkVfTUFUQ0goKQotICogICBpcyByZXR1cm5pbmcgdG8gdGhlIGNhbGxlcjogSWYgdGhlIGN1cnJlbnQgU1JFX01BVENIKCkgaXMgdGhlCi0gKiAgIHRvcCBmdW5jdGlvbiBvZiB0aGUgcmVjdXJzaW9uLCByZXR1cm5pbmcgZmFsc2Ugd2lsbCBiZSBhIG1hdGNoaW5nCi0gKiAgIGZhaWx1cmUsIGFuZCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBsYXN0bWFyayBpcyBwb2ludGluZyB0by4KLSAqICAgSWYgaXQncyAqbm90KiB0aGUgdG9wIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGEgcmVjdXJzaXZlIFNSRV9NQVRDSCgpCi0gKiAgIGZhaWx1cmUgYnkgaXRzZWxmLCBhbmQgdGhlIGNhbGxpbmcgU1JFX01BVENIKCkgd2lsbCBoYXZlIHRvIGRlYWwKLSAqICAgd2l0aCB0aGUgZmFpbHVyZSBieSB0aGUgc2FtZSBydWxlcyBleHBsYWluZWQgaGVyZSAoaXQgd2lsbCByZXN0b3JlCi0gKiAgIGxhc3RtYXJrIGJ5IGl0c2VsZiBpZiBuZWNlc3NhcnkpOwotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBjb250aW51ZSB0aGUKLSAqICAgb3V0c2lkZSAnZm9yJyBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCB3aGVuIGJyZWFraW5nLCBzaW5jZSB0aGUgbmV4dAotICogICBPUCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbgotICogICBpbnNpZGUgYSBsb2NhbCBmb3Ivd2hpbGUgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgYmV0d2VlbiBlYWNoCi0gKiAgIGxvb3AgaXRlcmF0aW9uLCBzaW5jZSB0aGUgcmVjdXJzaXZlIFNSRV9NQVRDSCgpIGNvdWxkIGRvIGFueXRoaW5nLAotICogICBhbmQgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgZGlzY3Vzc2lvbiBhdCBTRiBwYXRjaCAjNzEyOTAwLgotICovCi0jZGVmaW5lIExBU1RNQVJLX1NBVkUoKSAgICAgXAotICAgIGRvIHsgXAotICAgICAgICBjdHgtPmxhc3RtYXJrID0gc3RhdGUtPmxhc3RtYXJrOyBcCi0gICAgICAgIGN0eC0+bGFzdGluZGV4ID0gc3RhdGUtPmxhc3RpbmRleDsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIExBU1RNQVJLX1JFU1RPUkUoKSAgXAotICAgIGRvIHsgXAotICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBjdHgtPmxhc3RtYXJrOyBcCi0gICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBjdHgtPmxhc3RpbmRleDsgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVUVVJOX0VSUk9SKGkpIGRvIHsgcmV0dXJuIGk7IH0gd2hpbGUoMCkKLSNkZWZpbmUgUkVUVVJOX0ZBSUxVUkUgZG8geyByZXQgPSAwOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKLSNkZWZpbmUgUkVUVVJOX1NVQ0NFU1MgZG8geyByZXQgPSAxOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKLQotI2RlZmluZSBSRVRVUk5fT05fRVJST1IoaSkgXAotICAgIGRvIHsgaWYgKGkgPCAwKSBSRVRVUk5fRVJST1IoaSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFVFVSTl9PTl9TVUNDRVNTKGkpIFwKLSAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPiAwKSBSRVRVUk5fU1VDQ0VTUzsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX0ZBSUxVUkUoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA9PSAwKSBSRVRVUk5fRkFJTFVSRTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTRlkoeCkgI3gKLQotI2RlZmluZSBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0eXBlLCBwdHIpIFwKLWRvIHsgXAotICAgIGFsbG9jX3BvcyA9IHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2U7IFwKLSAgICBUUkFDRSgoImFsbG9jYXRpbmcgJXMgaW4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBTRlkodHlwZSksIGFsbG9jX3Bvcywgc2l6ZW9mKHR5cGUpKSk7IFwKLSAgICBpZiAoc2l6ZW9mKHR5cGUpID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIGFsbG9jX3BvcykgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplb2YodHlwZSkpOyBcCi0gICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKLSAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKLSAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsgXAotICAgIH0gXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srYWxsb2NfcG9zKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZW9mKHR5cGUpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCB0eXBlLCBwdHIsIHBvcykgXAotZG8geyBcCi0gICAgVFJBQ0UoKCJsb29raW5nIHVwICVzIGF0ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIFNGWSh0eXBlKSwgcG9zKSk7IFwKLSAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK3Bvcyk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBkYXRhLCBzaXplKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImNvcHkgZGF0YSBpbiAlcCB0byAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIHNpemUpKTsgXAotICAgIGlmIChzaXplID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UpIHsgXAotICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgbWVtY3B5KHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIGRhdGEsIHNpemUpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBkYXRhLCBzaXplLCBkaXNjYXJkKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImNvcHkgZGF0YSB0byAlcCBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKLSAgICBtZW1jcHkoZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKTsgXAotICAgIGlmIChkaXNjYXJkKSBcCi0gICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImRpc2NhcmQgZGF0YSBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBEQVRBX1BVU0goeCkgXAotICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSkpCi0jZGVmaW5lIERBVEFfUE9QKHgpIFwKLSAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSksIDEpCi0jZGVmaW5lIERBVEFfUE9QX0RJU0NBUkQoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9BTExPQyh0LHApIFwKLSAgICBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0LCBwKQotI2RlZmluZSBEQVRBX0xPT0tVUF9BVCh0LHAscG9zKSBcCi0gICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsdCxwLHBvcykKLQotI2RlZmluZSBNQVJLX1BVU0gobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgaSA9IGxhc3RtYXJrOyAvKiBjdHgtPmxhc3RtYXJrIG1heSBjaGFuZ2UgaWYgcmVhbGxvY2F0ZWQgKi8gXAotICAgICAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIHN0YXRlLT5tYXJrLCAoaSsxKSpzaXplb2Yodm9pZCopKTsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIE1BUktfUE9QKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDEpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfS0VFUChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAwKTsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIE1BUktfUE9QX0RJU0NBUkQobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBKVU1QX05PTkUgICAgICAgICAgICAwCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzEgICAgIDEKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMiAgICAgMgotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8zICAgICAzCi0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzEgICAgIDQKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMiAgICAgNQotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8zICAgICA2Ci0jZGVmaW5lIEpVTVBfUkVQRUFUICAgICAgICAgIDcKLSNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzEgICAgOAotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMiAgICA5Ci0jZGVmaW5lIEpVTVBfTUlOX1JFUEVBVF9PTkUgIDEwCi0jZGVmaW5lIEpVTVBfQlJBTkNIICAgICAgICAgIDExCi0jZGVmaW5lIEpVTVBfQVNTRVJUICAgICAgICAgIDEyCi0jZGVmaW5lIEpVTVBfQVNTRVJUX05PVCAgICAgIDEzCi0KLSNkZWZpbmUgRE9fSlVNUChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKLSAgICBEQVRBX0FMTE9DKFNSRV9NQVRDSF9DT05URVhULCBuZXh0Y3R4KTsgXAotICAgIG5leHRjdHgtPmxhc3RfY3R4X3BvcyA9IGN0eF9wb3M7IFwKLSAgICBuZXh0Y3R4LT5qdW1wID0ganVtcHZhbHVlOyBcCi0gICAgbmV4dGN0eC0+cGF0dGVybiA9IG5leHRwYXR0ZXJuOyBcCi0gICAgY3R4X3BvcyA9IGFsbG9jX3BvczsgXAotICAgIGN0eCA9IG5leHRjdHg7IFwKLSAgICBnb3RvIGVudHJhbmNlOyBcCi0gICAganVtcGxhYmVsOiBcCi0gICAgd2hpbGUgKDApIC8qIGdjYyBkb2Vzbid0IGxpa2UgbGFiZWxzIGF0IGVuZCBvZiBzY29wZXMgKi8gXAotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlfc3NpemVfdCBsYXN0X2N0eF9wb3M7Ci0gICAgUHlfc3NpemVfdCBqdW1wOwotICAgIGNoYXIqIHB0cjsKLSAgICBTUkVfQ09ERSogcGF0dGVybjsKLSAgICBQeV9zc2l6ZV90IGNvdW50OwotICAgIFB5X3NzaXplX3QgbGFzdG1hcms7Ci0gICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7Ci0gICAgdW5pb24gewotICAgICAgICBTUkVfQ09ERSBjaHI7Ci0gICAgICAgIFNSRV9SRVBFQVQqIHJlcDsKLSAgICB9IHU7Ci19IFNSRV9NQVRDSF9DT05URVhUOwotCi0vKiBjaGVjayBpZiBzdHJpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gIHJldHVybnMgPDAgZm9yCi0gICBlcnJvciwgMCBmb3IgZmFpbHVyZSwgYW5kIDEgZm9yIHN1Y2Nlc3MgKi8KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCi17Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBhbGxvY19wb3MsIGN0eF9wb3MgPSAtMTsKLSAgICBQeV9zc2l6ZV90IGksIHJldCA9IDA7Ci0gICAgUHlfc3NpemVfdCBqdW1wOwotICAgIHVuc2lnbmVkIGludCBzaWdjb3VudD0wOwotCi0gICAgU1JFX01BVENIX0NPTlRFWFQqIGN0eDsKLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogbmV4dGN0eDsKLQotICAgIFRSQUNFKCgifCVwfCVwfEVOVEVSXG4iLCBwYXR0ZXJuLCBzdGF0ZS0+cHRyKSk7Ci0KLSAgICBEQVRBX0FMTE9DKFNSRV9NQVRDSF9DT05URVhULCBjdHgpOwotICAgIGN0eC0+bGFzdF9jdHhfcG9zID0gLTE7Ci0gICAgY3R4LT5qdW1wID0gSlVNUF9OT05FOwotICAgIGN0eC0+cGF0dGVybiA9IHBhdHRlcm47Ci0gICAgY3R4X3BvcyA9IGFsbG9jX3BvczsKLQotZW50cmFuY2U6Ci0KLSAgICBjdHgtPnB0ciA9IChjaGFyICopc3RhdGUtPnB0cjsKLQotICAgIGlmIChjdHgtPnBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IC4uLiAqLwotICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzNdICYmIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplIDwgY3R4LT5wYXR0ZXJuWzNdKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInJlamVjdCAoZ290ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgY2hhcnMsICIKLSAgICAgICAgICAgICAgICAgICAibmVlZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAoZW5kIC0gY3R4LT5wdHIpL3N0YXRlLT5jaGFyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzNdKSk7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgfQotICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdICsgMTsKLSAgICB9Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgICsrc2lnY291bnQ7Ci0gICAgICAgIGlmICgoMCA9PSAoc2lnY291bnQgJiAweGZmZikpICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTlRFUlJVUFRFRCk7Ci0KLSAgICAgICAgc3dpdGNoICgqY3R4LT5wYXR0ZXJuKyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NQVJLOgotICAgICAgICAgICAgLyogc2V0IG1hcmsgKi8KLSAgICAgICAgICAgIC8qIDxNQVJLPiA8Z2lkPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFSSyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBpZiAoaSAmIDEpCi0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGkvMiArIDE7Ci0gICAgICAgICAgICBpZiAoaSA+IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgIC8qIHN0YXRlLT5sYXN0bWFyayBpcyB0aGUgaGlnaGVzdCB2YWxpZCBpbmRleCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFyayBhcnJheS4gIElmIGl0IGlzIGluY3JlYXNlZCBieSBtb3JlIHRoYW4gMSwKLSAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJ2ZW5pbmcgbWFya3MgbXVzdCBiZSBzZXQgdG8gTlVMTCB0byBzaWduYWwKLSAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXNlIG1hcmtzIGhhdmUgbm90IGJlZW4gZW5jb3VudGVyZWQuICovCi0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBqID0gc3RhdGUtPmxhc3RtYXJrICsgMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrW2orK10gPSBOVUxMOwotICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bWFya1tpXSA9IGN0eC0+cHRyOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggbGl0ZXJhbCBzdHJpbmcgKi8KLSAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzBdKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGxpdGVyYWwgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAvKiA8Tk9UX0xJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgPT0gY3R4LT5wYXR0ZXJuWzBdKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9TVUNDRVNTOgotICAgICAgICAgICAgLyogZW5kIG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNVQ0NFU1NcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FUOgotICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxBVD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKCFTUkVfQVQoc3RhdGUsIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBjYXRlZ29yeSAqLwotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfENBVEVHT1JZICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIXNyZV9jYXRlZ29yeShjdHgtPnBhdHRlcm5bMF0sIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAoZXhjZXB0IGEgbmV3bGluZSkgKi8KLSAgICAgICAgICAgIC8qIDxBTlk+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IFNSRV9JU19MSU5FQlJFQUsoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nICovCi0gICAgICAgICAgICAvKiA8QU5ZX0FMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWV9BTExcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9JTjoKLSAgICAgICAgICAgIC8qIG1hdGNoIHNldCBtZW1iZXIgKG9yIG5vbl9tZW1iZXIpICovCi0gICAgICAgICAgICAvKiA8SU4+IDxza2lwPiA8c2V0PiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5cbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4gKyAxLCBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkgIT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSA9PSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOX0lHTk9SRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZAotICAgICAgICAgICAgICAgIHx8ICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4rMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKXN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSlVNUDoKLSAgICAgICAgY2FzZSBTUkVfT1BfSU5GTzoKLSAgICAgICAgICAgIC8qIGp1bXAgZm9yd2FyZCAqLwotICAgICAgICAgICAgLyogPEpVTVA+IDxvZmZzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JSQU5DSDoKLSAgICAgICAgICAgIC8qIGFsdGVybmF0aW9uICovCi0gICAgICAgICAgICAvKiA8QlJBTkNIPiA8MD1za2lwPiBjb2RlIDxKVU1QPiAuLi4gPE5VTEw+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxCUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgZm9yICg7IGN0eC0+cGF0dGVyblswXTsgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXSkgewotICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0xJVEVSQUwgJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IGN0eC0+cGF0dGVyblsyXSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCi0gICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICFTUkVfQ0hBUlNFVChjdHgtPnBhdHRlcm4gKyAzLCAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9CUkFOQ0gsIGp1bXBfYnJhbmNoLCBjdHgtPnBhdHRlcm4rMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0tFRVAoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWF4aW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNQVhfUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxSRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IChlbmQgLSBjdHgtPnB0cikgLyBzdGF0ZS0+Y2hhcnNpemUpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIHJldCA9IFNSRV9DT1VOVChzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsyXSk7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0KLSAgICAgICAgICAgIC8qIHdoZW4gd2UgYXJyaXZlIGhlcmUsIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgIG1hdGNoZXMsIGFuZCBjdHgtPnB0ciBwb2ludHMgdG8gdGhlIHRhaWwgb2YgdGhlIHRhcmdldAotICAgICAgICAgICAgICAgc3RyaW5nLiAgY2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcywKLSAgICAgICAgICAgICAgIGFuZCBiYWNrdHJhY2sgaWYgbm90LiAqLwotCi0gICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX0xJVEVSQUwpIHsKLSAgICAgICAgICAgICAgICAvKiB0YWlsIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbC4gc2tpcCBwb3NpdGlvbnMgd2hlcmUKLSAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBjYW5ub3QgcG9zc2libHkgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUuY2hyID0gY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXSsxXTsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IGN0eC0+dS5jaHIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMSwganVtcF9yZXBlYXRfb25lXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgLT0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01JTl9SRVBFQVRfT05FOgotICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1pbmltaXppbmcgcmVnZXhwKSAqLwotCi0gICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKLSAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKLSAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKLSAgICAgICAgICAgICAgIHVzZSB0aGUgTUlOX1JFUEVBVCBvcGVyYXRvciAqLwotCi0gICAgICAgICAgICAvKiA8TUlOX1JFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fUkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IChlbmQgLSBjdHgtPnB0cikgLyBzdGF0ZS0+Y2hhcnNpemUpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gMCkKLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gMDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGNvdW50IHVzaW5nIHBhdHRlcm4gbWluIGFzIHRoZSBtYXhpbXVtICovCi0gICAgICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICAgICAgLyogZGlkbid0IG1hdGNoIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzICovCi0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBtaW5pbXVtIG1hdGNoZXMgb2YgcmVwZWF0ICovCi0gICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKLSAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPmNvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgICAgIHdoaWxlICgoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVAotICAgICAgICAgICAgICAgICAgICAgICB8fCBjdHgtPmNvdW50IDw9IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fUkVQRUFUX09ORSxqdW1wX21pbl9yZXBlYXRfb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgMSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudCsrOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUOgotICAgICAgICAgICAgLyogY3JlYXRlIHJlcGVhdCBjb250ZXh0LiAgYWxsIHRoZSBoYXJkIHdvcmsgaXMgZG9uZQotICAgICAgICAgICAgICAgYnkgdGhlIFVOVElMIG9wZXJhdG9yIChNQVhfVU5USUwsIE1JTl9VTlRJTCkgKi8KLSAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8VU5USUw+IHRhaWwgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVCAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOwotCi0gICAgICAgICAgICAvKiBpbnN0YWxsIG5ldyByZXBlYXQgY29udGV4dCAqLwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IChTUkVfUkVQRUFUKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZigqY3R4LT51LnJlcCkpOwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gLTE7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuID0gY3R4LT5wYXR0ZXJuOwotICAgICAgICAgICAgY3R4LT51LnJlcC0+cHJldiA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IE5VTEw7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVCwganVtcF9yZXBlYXQsIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBQeU9iamVjdF9GUkVFKGN0eC0+dS5yZXApOwotCi0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NQVhfVU5USUw6Ci0gICAgICAgICAgICAvKiBtYXhpbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNQVhfVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgLyogRklYTUU6IHdlIHByb2JhYmx5IG5lZWQgdG8gZGVhbCB3aXRoIHplcm8td2lkdGgKLSAgICAgICAgICAgICAgIG1hdGNoZXMgaW4gaGVyZS4uLiAqLwotCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFYX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCkpOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7Ci0gICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMSwganVtcF9tYXhfdW50aWxfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gfHwKLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQpICYmCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciAhPSBjdHgtPnUucmVwLT5sYXN0X3B0cikgewotICAgICAgICAgICAgICAgIC8qIHdlIG1heSBoYXZlIGVub3VnaCBtYXRjaGVzLCBidXQgaWYgd2UgY2FuCi0gICAgICAgICAgICAgICAgICAgbWF0Y2ggYW5vdGhlciBpdGVtLCBkbyBzbyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLwotICAgICAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzIsIGp1bXBfbWF4X3VudGlsXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE1BUktfUE9QKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGNhbm5vdCBtYXRjaCBtb3JlIHJlcGVhdGVkIGl0ZW1zIGhlcmUuICBtYWtlIHN1cmUgdGhlCi0gICAgICAgICAgICAgICB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8zLCBqdW1wX21heF91bnRpbF8zLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgUkVUVVJOX09OX1NVQ0NFU1MocmV0KTsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1VOVElMOgotICAgICAgICAgICAgLyogbWluaW1pemluZyByZXBlYXQgKi8KLSAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUlOX1VOVElMPiB0YWlsICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlcFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50LCBjdHgtPnUucmVwLT5wYXR0ZXJuKSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8xLCBqdW1wX21pbl91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIC8qIHNlZSBpZiB0aGUgdGFpbCBtYXRjaGVzICovCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMiwganVtcF9taW5fdW50aWxfMiwgY3R4LT5wYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdCi0gICAgICAgICAgICAgICAgJiYgY3R4LT51LnJlcC0+cGF0dGVyblsyXSAhPSBTUkVfTUFYUkVQRUFUKSB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLwotICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzMsanVtcF9taW5fdW50aWxfMywKLSAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGOgotICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUYgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBTUkVfQ0hBUkdFVChzdGF0ZSwgcCwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgotICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfSUdOT1JFICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogcCA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOwotICAgICAgICAgICAgICAgICAgICBjaGFyKiBlID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcCwgMCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0VYSVNUUzoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0VYSVNUUyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIC8qIDxHUk9VUFJFRl9FWElTVFM+IDxncm91cD4gPHNraXA+IGNvZGV5ZXMgPEpVTVA+IGNvZGVubyAuLi4gKi8KLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOwotICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUOgotICAgICAgICAgICAgLyogYXNzZXJ0IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlQ+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlQgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA8IHN0YXRlLT5iZWdpbm5pbmcpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJULCBqdW1wX2Fzc2VydCwgY3R4LT5wYXR0ZXJuKzIpOwotICAgICAgICAgICAgUkVUVVJOX09OX0ZBSUxVUkUocmV0KTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlRfTk9UOgotICAgICAgICAgICAgLyogYXNzZXJ0IG5vdCBzdWJwYXR0ZXJuICovCi0gICAgICAgICAgICAvKiA8QVNTRVJUX05PVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVF9OT1QgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPnBhdHRlcm5bMV07Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA+PSBzdGF0ZS0+YmVnaW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0FTU0VSVF9OT1QsIGp1bXBfYXNzZXJ0X25vdCwgY3R4LT5wYXR0ZXJuKzIpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgLyogaW1tZWRpYXRlIGZhaWx1cmUgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEZBSUxVUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxVTktOT1dOICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblstMV0pKTsKLSAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSUxMRUdBTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLWV4aXQ6Ci0gICAgY3R4X3BvcyA9IGN0eC0+bGFzdF9jdHhfcG9zOwotICAgIGp1bXAgPSBjdHgtPmp1bXA7Ci0gICAgREFUQV9QT1BfRElTQ0FSRChjdHgpOwotICAgIGlmIChjdHhfcG9zID09IC0xKQotICAgICAgICByZXR1cm4gcmV0OwotICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotCi0gICAgc3dpdGNoIChqdW1wKSB7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKLSAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOwotICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKLSAgICAgICAgY2FzZSBKVU1QX05PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwotfQotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX1NFQVJDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciopc3RhdGUtPnN0YXJ0OwotICAgIGNoYXIqIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3Qgc3RhdHVzID0gMDsKLSAgICBQeV9zc2l6ZV90IHByZWZpeF9sZW4gPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X3NraXAgPSAwOwotICAgIFNSRV9DT0RFKiBwcmVmaXggPSBOVUxMOwotICAgIFNSRV9DT0RFKiBjaGFyc2V0ID0gTlVMTDsKLSAgICBTUkVfQ09ERSogb3ZlcmxhcCA9IE5VTEw7Ci0gICAgaW50IGZsYWdzID0gMDsKLQotICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7Ci0gICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCi0gICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiA8ND1tYXg+IDw1PXByZWZpeCBpbmZvPiAgKi8KLQotICAgICAgICBmbGFncyA9IHBhdHRlcm5bMl07Ci0KLSAgICAgICAgaWYgKHBhdHRlcm5bM10gPiAxKSB7Ci0gICAgICAgICAgICAvKiBhZGp1c3QgZW5kIHBvaW50IChidXQgbWFrZSBzdXJlIHdlIGxlYXZlIGF0IGxlYXN0IG9uZQotICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZXJlLCBzbyBsaXRlcmFsIHNlYXJjaCB3aWxsIHdvcmspICovCi0gICAgICAgICAgICBlbmQgLT0gKHBhdHRlcm5bM10tMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBpZiAoZW5kIDw9IHB0cikKLSAgICAgICAgICAgICAgICBlbmQgPSBwdHIgKyBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19QUkVGSVgpIHsKLSAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXggKi8KLSAgICAgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgICAgICBwcmVmaXhfbGVuID0gcGF0dGVybls1XTsKLSAgICAgICAgICAgIHByZWZpeF9za2lwID0gcGF0dGVybls2XTsKLSAgICAgICAgICAgIHByZWZpeCA9IHBhdHRlcm4gKyA3OwotICAgICAgICAgICAgb3ZlcmxhcCA9IHByZWZpeCArIHByZWZpeF9sZW4gLSAxOwotICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgU1JFX0lORk9fQ0hBUlNFVCkKLSAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLwotICAgICAgICAgICAgLyogPGNoYXJzZXQ+ICovCi0gICAgICAgICAgICBjaGFyc2V0ID0gcGF0dGVybiArIDU7Ci0KLSAgICAgICAgcGF0dGVybiArPSAxICsgcGF0dGVyblsxXTsKLSAgICB9Ci0KLSAgICBUUkFDRSgoInByZWZpeCA9ICVwICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKLSAgICAgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuLCBwcmVmaXhfc2tpcCkpOwotICAgIFRSQUNFKCgiY2hhcnNldCA9ICVwXG4iLCBjaGFyc2V0KSk7Ci0KLSNpZiBkZWZpbmVkKFVTRV9GQVNUX1NFQVJDSCkKLSAgICBpZiAocHJlZml4X2xlbiA+IDEpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeC4gIHVzZSB0aGUgb3ZlcmxhcAotICAgICAgICAgICB0YWJsZSB0byBza2lwIGZvcndhcmQgYXMgZmFzdCBhcyB3ZSBwb3NzaWJseSBjYW4gKi8KLSAgICAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICAgICAgZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gcHJlZml4W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoKytpID09IHByZWZpeF9sZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvdW5kIGEgcG90ZW50aWFsIG1hdGNoICovCi0gICAgICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHIgLSAocHJlZml4X2xlbiAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0ciAtIChwcmVmaXhfbGVuIC0gcHJlZml4X3NraXAgLSAxKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlIGdvdCBhbGwgb2YgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybiArIDIqcHJlZml4X3NraXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBidXQgbm8gY2lnYXIgLS0gdHJ5IGFnYWluICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0xJVEVSQUwpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGxpdGVyYWwgY2hhcmFjdGVyLiAgdGhpcyBpcyB1c2VkCi0gICAgICAgICAgIGZvciBzaG9ydCBwcmVmaXhlcywgYW5kIGlmIGZhc3Qgc2VhcmNoIGlzIGRpc2FibGVkICovCi0gICAgICAgIFNSRV9DT0RFIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgIT0gY2hyKQotICAgICAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBMSVRFUkFMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNoYXJzZXQpIHsKLSAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfQ0hBUlNFVChjaGFyc2V0LCBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIENIQVJTRVRcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgICAgICB3aGlsZSAocHRyIDw9IGVuZCkgewotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotI2lmICFkZWZpbmVkKFNSRV9SRUNVUlNJVkUpCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzQKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDQKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3M0XyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGZhY3RvcmllcyBhbmQgZGVzdHJ1Y3RvcnMgKi8KIAogLyogc2VlIHNyZS5oIGZvciBvYmplY3QgZGVjbGFyYXRpb25zICovCi1zdGF0aWMgUHlPYmplY3QqcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCosIFNSRV9TVEFURSosIGludCk7CitzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCosIFNSRV9TVEFURSosIFB5X3NzaXplX3QpOwogc3RhdGljIFB5T2JqZWN0KnBhdHRlcm5fc2Nhbm5lcihQYXR0ZXJuT2JqZWN0KiwgUHlPYmplY3QqLCBQeU9iamVjdCoga3cpOwogCi1zdGF0aWMgaW50Ci1zcmVfbGl0ZXJhbF90ZW1wbGF0ZShpbnQgY2hhcnNpemUsIGNoYXIqIHB0ciwgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgLyogY2hlY2sgaWYgZ2l2ZW4gc3RyaW5nIGlzIGEgbGl0ZXJhbCB0ZW1wbGF0ZSAoaS5lLiBubyBlc2NhcGVzKSAqLwotICAgIHN0cnVjdCB7Ci0gICAgICAgIGludCBjaGFyc2l6ZTsKLSAgICB9IHN0YXRlID0gewotICAgICAgICBjaGFyc2l6ZQotICAgIH07Ci0gICAgd2hpbGUgKGxlbi0tID4gMCkgewotICAgICAgICBpZiAoU1JFX0NIQVJHRVQoKCZzdGF0ZSksIHB0ciwgMCkgPT0gJ1xcJykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwdHIgKz0gY2hhcnNpemU7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogc3JlX2NvZGVzaXplKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtMTY2NSw3MiArMzA4LDQxIEBACiAKIHN0YXRpYyB2b2lkKgogZ2V0c3RyaW5nKFB5T2JqZWN0KiBzdHJpbmcsIFB5X3NzaXplX3QqIHBfbGVuZ3RoLAotICAgICAgICAgIGludCogcF9sb2dpY2FsX2NoYXJzaXplLCBpbnQqIHBfY2hhcnNpemUsCisgICAgICAgICAgaW50KiBwX2lzYnl0ZXMsIGludCogcF9jaGFyc2l6ZSwKICAgICAgICAgICBQeV9idWZmZXIgKnZpZXcpCiB7CiAgICAgLyogZ2l2ZW4gYSBweXRob24gb2JqZWN0LCByZXR1cm4gYSBkYXRhIHBvaW50ZXIsIGEgbGVuZ3RoIChpbgogICAgICAgIGNoYXJhY3RlcnMpLCBhbmQgYSBjaGFyYWN0ZXIgc2l6ZS4gIHJldHVybiBOVUxMIGlmIHRoZSBvYmplY3QKICAgICAgICBpcyBub3QgYSBzdHJpbmcgKG9yIG5vdCBjb21wYXRpYmxlKSAqLwogCi0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgYnl0ZXM7Ci0gICAgaW50IGNoYXJzaXplOwotICAgIHZvaWQqIHB0cjsKLQogICAgIC8qIFVuaWNvZGUgb2JqZWN0cyBkbyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSS4gU28sIGdldCB0aGUgZGF0YQogICAgICAgIGRpcmVjdGx5IGluc3RlYWQuICovCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhzdHJpbmcpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyaW5nKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBwdHIgPSBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwogICAgICAgICAqcF9sZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpOwogICAgICAgICAqcF9jaGFyc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7Ci0gICAgICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSA0OwotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICAqcF9pc2J5dGVzID0gMDsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgfQogCiAgICAgLyogZ2V0IHBvaW50ZXIgdG8gYnl0ZSBzdHJpbmcgYnVmZmVyICovCi0gICAgdmlldy0+bGVuID0gLTE7Ci0gICAgYnVmZmVyID0gUHlfVFlQRShzdHJpbmcpLT50cF9hc19idWZmZXI7Ci0gICAgaWYgKCFidWZmZXIgfHwgIWJ1ZmZlci0+YmZfZ2V0YnVmZmVyIHx8Ci0gICAgICAgICgqYnVmZmVyLT5iZl9nZXRidWZmZXIpKHN0cmluZywgdmlldywgUHlCVUZfU0lNUExFKSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN0cmluZywgdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnVmZmVyIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8qIGRldGVybWluZSBidWZmZXIgc2l6ZSAqLwotICAgIGJ5dGVzID0gdmlldy0+bGVuOwotICAgIHB0ciA9IHZpZXctPmJ1ZjsKKyAgICAqcF9sZW5ndGggPSB2aWV3LT5sZW47CisgICAgKnBfY2hhcnNpemUgPSAxOworICAgICpwX2lzYnl0ZXMgPSAxOwogCi0gICAgaWYgKGJ5dGVzIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIGhhcyBuZWdhdGl2ZSBzaXplIik7Ci0gICAgICAgIGdvdG8gZXJyOworICAgIGlmICh2aWV3LT5idWYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkJ1ZmZlciBpcyBOVUxMIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7CisgICAgICAgIHZpZXctPmJ1ZiA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAgIC8qIGRldGVybWluZSBjaGFyYWN0ZXIgc2l6ZSAqLwotICAgIHNpemUgPSBQeU9iamVjdF9TaXplKHN0cmluZyk7Ci0KLSAgICBpZiAoUHlCeXRlc19DaGVjayhzdHJpbmcpIHx8IGJ5dGVzID09IHNpemUpCi0gICAgICAgIGNoYXJzaXplID0gMTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBzaXplIG1pc21hdGNoIik7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLQotICAgICpwX2xlbmd0aCA9IHNpemU7Ci0gICAgKnBfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLSAgICAqcF9sb2dpY2FsX2NoYXJzaXplID0gY2hhcnNpemU7Ci0KLSAgICBpZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgaXMgTlVMTCIpOwotICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgfQotICAgIHJldHVybiBwdHI7Ci0gIGVycjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKHZpZXcpOwotICAgIHZpZXctPmJ1ZiA9IE5VTEw7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHZpZXctPmJ1ZjsKIH0KIAogTE9DQUwoUHlPYmplY3QqKQpAQCAtMTc0MCw3ICszNTIsNyBAQAogICAgIC8qIHByZXBhcmUgc3RhdGUgb2JqZWN0ICovCiAKICAgICBQeV9zc2l6ZV90IGxlbmd0aDsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIHZvaWQqIHB0cjsKIAogICAgIG1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKFNSRV9TVEFURSkpOwpAQCAtMTc0OSwxNiArMzYxLDE2IEBACiAgICAgc3RhdGUtPmxhc3RpbmRleCA9IC0xOwogCiAgICAgc3RhdGUtPmJ1ZmZlci5idWYgPSBOVUxMOwotICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZsb2dpY2FsX2NoYXJzaXplLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKKyAgICBwdHIgPSBnZXRzdHJpbmcoc3RyaW5nLCAmbGVuZ3RoLCAmaXNieXRlcywgJmNoYXJzaXplLCAmc3RhdGUtPmJ1ZmZlcik7CiAgICAgaWYgKCFwdHIpCiAgICAgICAgIGdvdG8gZXJyOwogCi0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPT0gMSAmJiBwYXR0ZXJuLT5sb2dpY2FsX2NoYXJzaXplID4gMSkgeworICAgIGlmIChpc2J5dGVzICYmIHBhdHRlcm4tPmlzYnl0ZXMgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIHN0cmluZyBwYXR0ZXJuIG9uIGEgYnl0ZXMtbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQotICAgIGlmIChsb2dpY2FsX2NoYXJzaXplID4gMSAmJiBwYXR0ZXJuLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKKyAgICBpZiAoIWlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA+IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgYSBieXRlcyBwYXR0ZXJuIG9uIGEgc3RyaW5nLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyOwpAQCAtMTc3NSw3ICszODcsNyBAQAogICAgIGVsc2UgaWYgKGVuZCA+IGxlbmd0aCkKICAgICAgICAgZW5kID0gbGVuZ3RoOwogCi0gICAgc3RhdGUtPmxvZ2ljYWxfY2hhcnNpemUgPSBsb2dpY2FsX2NoYXJzaXplOworICAgIHN0YXRlLT5pc2J5dGVzID0gaXNieXRlczsKICAgICBzdGF0ZS0+Y2hhcnNpemUgPSBjaGFyc2l6ZTsKIAogICAgIHN0YXRlLT5iZWdpbm5pbmcgPSBwdHI7CkBAIC0xODE2LDYgKzQyOCwyNCBAQAogICAgICgoKGNoYXIqKShtZW1iZXIpIC0gKGNoYXIqKShzdGF0ZSktPmJlZ2lubmluZykgLyAoc3RhdGUpLT5jaGFyc2l6ZSkKIAogTE9DQUwoUHlPYmplY3QqKQorZ2V0c2xpY2UoaW50IGlzYnl0ZXMsIGNvbnN0IHZvaWQgKnB0ciwKKyAgICAgICAgIFB5T2JqZWN0KiBzdHJpbmcsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQoreworICAgIGlmIChpc2J5dGVzKSB7CisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3Qoc3RyaW5nKSAmJgorICAgICAgICAgICAgc3RhcnQgPT0gMCAmJiBlbmQgPT0gUHlCeXRlc19HRVRfU0laRShzdHJpbmcpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoCisgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilwdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9TdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kKTsKKyAgICB9Cit9CisKK0xPQ0FMKFB5T2JqZWN0KikKIHN0YXRlX2dldHNsaWNlKFNSRV9TVEFURSogc3RhdGUsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0KiBzdHJpbmcsIGludCBlbXB0eSkKIHsKICAgICBQeV9zc2l6ZV90IGksIGo7CkBAIC0xODM1LDExICs0NjUsMTEgQEAKICAgICAgICAgaiA9IFNUQVRFX09GRlNFVChzdGF0ZSwgc3RhdGUtPm1hcmtbaW5kZXgrMV0pOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgaSwgaik7CisgICAgcmV0dXJuIGdldHNsaWNlKHN0YXRlLT5pc2J5dGVzLCBzdGF0ZS0+YmVnaW5uaW5nLCBzdHJpbmcsIGksIGopOwogfQogCiBzdGF0aWMgdm9pZAotcGF0dGVybl9lcnJvcihpbnQgc3RhdHVzKQorcGF0dGVybl9lcnJvcihQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICBzd2l0Y2ggKHN0YXR1cykgewogICAgIGNhc2UgU1JFX0VSUk9SX1JFQ1VSU0lPTl9MSU1JVDoKQEAgLTE4NjgsMTkgKzQ5OCwzOSBAQAogewogICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLSAgICBpZiAoc2VsZi0+dmlldy5idWYpCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPnZpZXcpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGF0dGVybik7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5ncm91cGluZGV4KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmluZGV4Z3JvdXApOwogICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKIH0KIAorTE9DQUwoUHlfc3NpemVfdCkKK3NyZV9tYXRjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9tYXRjaChzdGF0ZSwgcGF0dGVybik7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAyKQorICAgICAgICByZXR1cm4gc3JlX3VjczJfbWF0Y2goc3RhdGUsIHBhdHRlcm4pOworICAgIGFzc2VydChzdGF0ZS0+Y2hhcnNpemUgPT0gNCk7CisgICAgcmV0dXJuIHNyZV91Y3M0X21hdGNoKHN0YXRlLCBwYXR0ZXJuKTsKK30KKworTE9DQUwoUHlfc3NpemVfdCkKK3NyZV9zZWFyY2goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gc3JlX3VjczFfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGFzc2VydChzdGF0ZS0+Y2hhcnNpemUgPT0gNCk7CisgICAgcmV0dXJuIHNyZV91Y3M0X3NlYXJjaChzdGF0ZSwgcGF0dGVybik7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKIAogICAgIFB5T2JqZWN0KiBzdHJpbmc7CiAgICAgUHlfc3NpemVfdCBzdGFydCA9IDA7CkBAIC0xODk4LDExICs1NDgsNDEgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogCi0gICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN0YXRlX2ZpbmkoJnN0YXRlKTsKKworICAgIHJldHVybiBwYXR0ZXJuX25ld19tYXRjaChzZWxmLCAmc3RhdGUsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3BhdHRlcm5fZnVsbG1hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCit7CisgICAgU1JFX1NUQVRFIHN0YXRlOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOworCisgICAgUHlPYmplY3QqIHN0cmluZzsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZCA9IFBZX1NTSVpFX1RfTUFYOworICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInBhdHRlcm4iLCAicG9zIiwgImVuZHBvcyIsIE5VTEwgfTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk98bm46ZnVsbG1hdGNoIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJpbmcsICZzdGFydCwgJmVuZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RyaW5nID0gc3RhdGVfaW5pdCgmc3RhdGUsIHNlbGYsIHN0cmluZywgc3RhcnQsIGVuZCk7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGUubWF0Y2hfYWxsID0gMTsKKyAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKKworICAgIFRSQUNFKCgifCVwfCVwfEZVTExNQVRDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKKworICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0xOTE3LDcgKzU5Nyw3IEBACiBwYXR0ZXJuX3NlYXJjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKQEAgLTE5MzMsMTEgKzYxMyw3IEBACiAKICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICB9CisgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKQEAgLTE5OTcsNTkgKzY3MywxMSBAQAogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKLWpvaW5fbGlzdChQeU9iamVjdCogbGlzdCwgUHlPYmplY3QqIHN0cmluZykKLXsKLSAgICAvKiBqb2luIGxpc3QgZWxlbWVudHMgKi8KLQotICAgIFB5T2JqZWN0KiBqb2luZXI7Ci0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMTA2MDAwMAotICAgIFB5T2JqZWN0KiBmdW5jdGlvbjsKLSAgICBQeU9iamVjdCogYXJnczsKLSNlbmRpZgotICAgIFB5T2JqZWN0KiByZXN1bHQ7Ci0KLSAgICBqb2luZXIgPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgMCwgMCk7Ci0gICAgaWYgKCFqb2luZXIpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgcmV0dXJuIGpvaW5lcjsKLSAgICB9Ci0KLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgZnVuY3Rpb24gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGpvaW5lciwgImpvaW4iKTsKLSAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgYXJncyA9IFB5VHVwbGVfTmV3KDEpOwotICAgIGlmICghYXJncykgewotICAgICAgICBQeV9ERUNSRUYoZnVuY3Rpb24pOwotICAgICAgICBQeV9ERUNSRUYoam9pbmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbGlzdCk7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChmdW5jdGlvbiwgYXJncyk7Ci0gICAgUHlfREVDUkVGKGFyZ3MpOyAvKiBhbHNvIHJlbW92ZXMgbGlzdCAqLwotICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0jZWxzZQotICAgIHJlc3VsdCA9IGNhbGwoCi0gICAgICAgICJzdHJpbmciLCAiam9pbiIsCi0gICAgICAgIFB5VHVwbGVfUGFjaygyLCBsaXN0LCBqb2luZXIpCi0gICAgICAgICk7Ci0jZW5kaWYKLSAgICBQeV9ERUNSRUYoam9pbmVyKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fZmluZGFsbChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKIAogICAgIFB5T2JqZWN0KiBzdHJpbmc7CkBAIC0yMDc4LDEyICs3MDYsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjA5OSw3ICs3MjIsOCBAQAogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICBiID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUuc3RhcnQpOwogICAgICAgICAgICAgZSA9IFNUQVRFX09GRlNFVCgmc3RhdGUsIHN0YXRlLnB0cik7Ci0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGIsIGUpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIGIsIGUpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNDUsNyArNzY5LDYgQEAKIAogfQogCi0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAyMDAwMAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kaXRlcihQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewpAQCAtMjE2Nyw3ICs3OTAsNiBAQAogCiAgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQotI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fc3BsaXQoUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKQEAgLTIxNzUsNyArNzk3LDcgQEAKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlPYmplY3QqIGxpc3Q7CiAgICAgUHlPYmplY3QqIGl0ZW07Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlfc3NpemVfdCBpOwogICAgIHZvaWQqIGxhc3Q7CkBAIC0yMjA2LDEyICs4MjgsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjIzMSw3ICs4NDgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogZ2V0IHNlZ21lbnQgYmVmb3JlIHRoaXMgbWF0Y2ggKi8KLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgICAgICBzdHJpbmcsIFNUQVRFX09GRlNFVCgmc3RhdGUsIGxhc3QpLAogICAgICAgICAgICAgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUuc3RhcnQpCiAgICAgICAgICAgICApOwpAQCAtMjI2MCw3ICs4NzcsNyBAQAogICAgIH0KIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoIChldmVuIGlmIGVtcHR5KSAqLwotICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKAorICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksIHN0YXRlLmVuZHBvcwogICAgICAgICApOwogICAgIGlmICghaXRlbSkKQEAgLTIyODYsMTUgKzkwMywxNiBAQAogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKKyAgICBQeU9iamVjdCogam9pbmVyOwogICAgIFB5T2JqZWN0KiBpdGVtOwogICAgIFB5T2JqZWN0KiBmaWx0ZXI7CiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIG1hdGNoOwogICAgIHZvaWQqIHB0cjsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGksIGIsIGU7Ci0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemUsIGNoYXJzaXplOworICAgIGludCBpc2J5dGVzLCBjaGFyc2l6ZTsKICAgICBpbnQgZmlsdGVyX2lzX2NhbGxhYmxlOwogICAgIFB5X2J1ZmZlciB2aWV3OwogCkBAIC0yMzA3LDEwICs5MjUsMTMgQEAKICAgICAgICAgLyogaWYgbm90IGNhbGxhYmxlLCBjaGVjayBpZiBpdCdzIGEgbGl0ZXJhbCBzdHJpbmcgKi8KICAgICAgICAgaW50IGxpdGVyYWw7CiAgICAgICAgIHZpZXcuYnVmID0gTlVMTDsKLSAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZsb2dpY2FsX2NoYXJzaXplLCAmY2hhcnNpemUsICZ2aWV3KTsKKyAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZpc2J5dGVzLCAmY2hhcnNpemUsICZ2aWV3KTsKICAgICAgICAgYiA9IGNoYXJzaXplOwogICAgICAgICBpZiAocHRyKSB7Ci0gICAgICAgICAgICBsaXRlcmFsID0gc3JlX2xpdGVyYWxfdGVtcGxhdGUoYiwgcHRyLCBuKTsKKyAgICAgICAgICAgIGlmIChjaGFyc2l6ZSA9PSAxKQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBtZW1jaHIocHRyLCAnXFwnLCBuKSA9PSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBQeVVuaWNvZGVfRmluZENoYXIocHRlbXBsYXRlLCAnXFwnLCAwLCBuLCAxKSA9PSAtMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBsaXRlcmFsID0gMDsKQEAgLTIzNTQsMTIgKzk3NSw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMzc1LDcgKzk5MSw4IEBACiAKICAgICAgICAgaWYgKGkgPCBiKSB7CiAgICAgICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBiKTsKKyAgICAgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCisgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBiKTsKICAgICAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgc3RhdHVzID0gUHlMaXN0X0FwcGVuZChsaXN0LCBpdGVtKTsKQEAgLTI0MzAsNyArMTA0Nyw4IEBACiAKICAgICAvKiBnZXQgc2VnbWVudCBmb2xsb3dpbmcgbGFzdCBtYXRjaCAqLwogICAgIGlmIChpIDwgc3RhdGUuZW5kcG9zKSB7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgaSwgc3RhdGUuZW5kcG9zKTsKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgaSwgc3RhdGUuZW5kcG9zKTsKICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgc3RhdHVzID0gUHlMaXN0X0FwcGVuZChsaXN0LCBpdGVtKTsKQEAgLTI0NDQsMTAgKzEwNjIsMjUgQEAKICAgICBQeV9ERUNSRUYoZmlsdGVyKTsKIAogICAgIC8qIGNvbnZlcnQgbGlzdCB0byBzaW5nbGUgc3RyaW5nIChhbHNvIHJlbW92ZXMgbGlzdCkgKi8KLSAgICBpdGVtID0gam9pbl9saXN0KGxpc3QsIHN0cmluZyk7Ci0KLSAgICBpZiAoIWl0ZW0pCisgICAgam9pbmVyID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLCBzdHJpbmcsIDAsIDApOworICAgIGlmICgham9pbmVyKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeUxpc3RfR0VUX1NJWkUobGlzdCkgPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGl0ZW0gPSBqb2luZXI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoc3RhdGUuaXNieXRlcykKKyAgICAgICAgICAgIGl0ZW0gPSBfUHlCeXRlc19Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZW0gPSBQeVVuaWNvZGVfSm9pbihqb2luZXIsIGxpc3QpOworICAgICAgICBQeV9ERUNSRUYoam9pbmVyKTsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoc3VibikKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5uIiwgaXRlbSwgbik7CkBAIC0yNTQxLDEwICsxMTc0LDk0IEBACiAjZW5kaWYKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fcmVwcihQYXR0ZXJuT2JqZWN0ICpvYmopCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIGludCB2YWx1ZTsKKyAgICB9IGZsYWdfbmFtZXNbXSA9IHsKKyAgICAgICAgeyJyZS5URU1QTEFURSIsIFNSRV9GTEFHX1RFTVBMQVRFfSwKKyAgICAgICAgeyJyZS5JR05PUkVDQVNFIiwgU1JFX0ZMQUdfSUdOT1JFQ0FTRX0sCisgICAgICAgIHsicmUuTE9DQUxFIiwgU1JFX0ZMQUdfTE9DQUxFfSwKKyAgICAgICAgeyJyZS5NVUxUSUxJTkUiLCBTUkVfRkxBR19NVUxUSUxJTkV9LAorICAgICAgICB7InJlLkRPVEFMTCIsIFNSRV9GTEFHX0RPVEFMTH0sCisgICAgICAgIHsicmUuVU5JQ09ERSIsIFNSRV9GTEFHX1VOSUNPREV9LAorICAgICAgICB7InJlLlZFUkJPU0UiLCBTUkVfRkxBR19WRVJCT1NFfSwKKyAgICAgICAgeyJyZS5ERUJVRyIsIFNSRV9GTEFHX0RFQlVHfSwKKyAgICAgICAgeyJyZS5BU0NJSSIsIFNSRV9GTEFHX0FTQ0lJfSwKKyAgICB9OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmbGFnX2l0ZW1zOworICAgIGludCBpOworICAgIGludCBmbGFncyA9IG9iai0+ZmxhZ3M7CisKKyAgICAvKiBPbWl0IHJlLlVOSUNPREUgZm9yIHZhbGlkIHN0cmluZyBwYXR0ZXJucy4gKi8KKyAgICBpZiAob2JqLT5pc2J5dGVzID09IDAgJiYKKyAgICAgICAgKGZsYWdzICYgKFNSRV9GTEFHX0xPQ0FMRXxTUkVfRkxBR19VTklDT0RFfFNSRV9GTEFHX0FTQ0lJKSkgPT0KKyAgICAgICAgIFNSRV9GTEFHX1VOSUNPREUpCisgICAgICAgIGZsYWdzICY9IH5TUkVfRkxBR19VTklDT0RFOworCisgICAgZmxhZ19pdGVtcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFmbGFnX2l0ZW1zKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgoZmxhZ19uYW1lcyk7IGkrKykgeworICAgICAgICBpZiAoZmxhZ3MgJiBmbGFnX25hbWVzW2ldLnZhbHVlKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZsYWdfbmFtZXNbaV0ubmFtZSk7CisgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZmxhZ3MgJj0gfmZsYWdfbmFtZXNbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjB4JXgiLCBmbGFncyk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorCisgICAgaWYgKFB5TGlzdF9TaXplKGZsYWdfaXRlbXMpID4gMCkgeworICAgICAgICBQeU9iamVjdCAqZmxhZ3NfcmVzdWx0OworICAgICAgICBQeU9iamVjdCAqc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInwiKTsKKyAgICAgICAgaWYgKCFzZXApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGZsYWdzX3Jlc3VsdCA9IFB5VW5pY29kZV9Kb2luKHNlcCwgZmxhZ19pdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihzZXApOworICAgICAgICBpZiAoIWZsYWdzX3Jlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSLCAlUykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnBhdHRlcm4sIGZsYWdzX3Jlc3VsdCk7CisgICAgICAgIFB5X0RFQ1JFRihmbGFnc19yZXN1bHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSKSIsIG9iai0+cGF0dGVybik7CisgICAgfQorCitkb25lOgorICAgIFB5X0RFQ1JFRihmbGFnX2l0ZW1zKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBQeURvY19TVFJWQVIocGF0dGVybl9tYXRjaF9kb2MsCiAibWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAogICAgIE1hdGNoZXMgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIik7CiAKK1B5RG9jX1NUUlZBUihwYXR0ZXJuX2Z1bGxtYXRjaF9kb2MsCisiZnVsbG1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKSAtPiBtYXRjaCBvYmplY3Qgb3IgTm9uZS5cblwKKyAgICBNYXRjaGVzIGFnYWluc3QgYWxsIG9mIHRoZSBzdHJpbmciKTsKKwogUHlEb2NfU1RSVkFSKHBhdHRlcm5fc2VhcmNoX2RvYywKICJzZWFyY2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAogICAgIFNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCwgYW5kIHJldHVybiBhIGNvcnJlc3BvbmRpbmdcblwKQEAgLTI1ODAsNiArMTI5Nyw4IEBACiBzdGF0aWMgUHlNZXRob2REZWYgcGF0dGVybl9tZXRob2RzW10gPSB7CiAgICAgeyJtYXRjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9tYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fbWF0Y2hfZG9jfSwKKyAgICB7ImZ1bGxtYXRjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9mdWxsbWF0Y2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICBwYXR0ZXJuX2Z1bGxtYXRjaF9kb2N9LAogICAgIHsic2VhcmNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NlYXJjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fc2VhcmNoX2RvY30sCiAgICAgeyJzdWIiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc3ViLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKQEAgLTI1OTAsMTAgKzEzMDksOCBAQAogICAgICAgICBwYXR0ZXJuX3NwbGl0X2RvY30sCiAgICAgeyJmaW5kYWxsIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRhbGwsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBwYXR0ZXJuX2ZpbmRhbGxfZG9jfSwKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiAgICAgeyJmaW5kaXRlciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9maW5kaXRlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGl0ZXJfZG9jfSwKLSNlbmRpZgogICAgIHsic2Nhbm5lciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zY2FubmVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9jb3B5LCBNRVRIX05PQVJHU30sCiAgICAgeyJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZGVlcGNvcHksIE1FVEhfT30sCkBAIC0yNjE4LDcgKzEzMzUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKXBhdHRlcm5fcmVwciwgICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMjY3MSw3ICsxMzg4LDYgQEAKICAgICBzZWxmLT5wYXR0ZXJuID0gTlVMTDsKICAgICBzZWxmLT5ncm91cGluZGV4ID0gTlVMTDsKICAgICBzZWxmLT5pbmRleGdyb3VwID0gTlVMTDsKLSAgICBzZWxmLT52aWV3LmJ1ZiA9IE5VTEw7CiAKICAgICBzZWxmLT5jb2Rlc2l6ZSA9IG47CiAKQEAgLTI2OTIsMTYgKzE0MDgsMjAgQEAKICAgICB9CiAKICAgICBpZiAocGF0dGVybiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHNlbGYtPmxvZ2ljYWxfY2hhcnNpemUgPSAtMTsKLSAgICAgICAgc2VsZi0+Y2hhcnNpemUgPSAtMTsKKyAgICAgICAgc2VsZi0+aXNieXRlcyA9IC0xOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBwX2xlbmd0aDsKLSAgICAgICAgaWYgKCFnZXRzdHJpbmcocGF0dGVybiwgJnBfbGVuZ3RoLCAmc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPmNoYXJzaXplLCAmc2VsZi0+dmlldykpIHsKKyAgICAgICAgaW50IGNoYXJzaXplOworICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgdmlldy5idWYgPSBOVUxMOworICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5pc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnNpemUsICZ2aWV3KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZXcuYnVmKQorICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKHBhdHRlcm4pOwpAQCAtMjc4Nyw3ICsxNTA3LDcgQEAKICAgICAgICAgc2tpcCA9ICpjb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWVFJBQ0UoKCIlbHUgKHNraXAgdG8gJXApXG4iLCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylza2lwLCBjb2RlK3NraXApKTsgICAgICAgIFwKLSAgICAgICAgaWYgKHNraXAtYWRqID4gZW5kLWNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc2tpcC1hZGogPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkgICAgICBcCiAgICAgICAgICAgICBGQUlMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29kZSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCkBAIC0yODE5LDggKzE1MzksOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKLSAgICAgICAgICAgIG9mZnNldCA9IDMyL3NpemVvZihTUkVfQ09ERSk7IC8qIDMyLWJ5dGUgYml0bWFwICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSAyNTYvU1JFX0NPREVfQklUUzsgLyogMjU2LWJpdCBiaXRtYXAgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI4MjgsNyArMTU0OCw3IEBACiAgICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6CiAgICAgICAgICAgICBHRVRfQVJHOyAvKiBOdW1iZXIgb2YgYmxvY2tzICovCiAgICAgICAgICAgICBvZmZzZXQgPSAyNTYvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMjU2LWJ5dGUgdGFibGUgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgZWFjaCBieXRlIHBvaW50cyB0byBhIHZhbGlkIGJsb2NrICovCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTI4MzYsOCArMTU1Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKLSAgICAgICAgICAgIG9mZnNldCA9IGFyZyAqIDMyL3NpemVvZihTUkVfQ09ERSk7IC8qIDMyLWJ5dGUgYml0bWFwIHRpbWVzIGFyZyAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogKDI1Ni9TUkVfQ09ERV9CSVRTKTsgLyogMjU2LWJpdCBiaXRtYXAgdGltZXMgYXJnICovCisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gKFB5X3VpbnRwdHJfdCkoZW5kIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTAwLDcgKzE2MjAsNyBAQAogICAgICAgICAgICAgICAgc3JlX21hdGNoKCkgY29kZSBpcyByb2J1c3QgZXZlbiBpZiB0aGV5IGRvbid0LCBhbmQgdGhlIHdvcnN0CiAgICAgICAgICAgICAgICB5b3UgY2FuIGdldCBpcyBub25zZW5zaWNhbCBtYXRjaCByZXN1bHRzLiAqLwogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPiAyKmdyb3VwcysxKSB7CisgICAgICAgICAgICBpZiAoYXJnID4gMiAqIChzaXplX3QpZ3JvdXBzICsgMSkgewogICAgICAgICAgICAgICAgIFZUUkFDRSgoImFyZz0lZCwgZ3JvdXBzPSVkXG4iLCAoaW50KWFyZywgKGludClncm91cHMpKTsKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgfQpAQCAtMjk4OCwxMSArMTcwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBHRVRfQVJHOyBwcmVmaXhfbGVuID0gYXJnOwogICAgICAgICAgICAgICAgICAgICBHRVRfQVJHOwogICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIGNvbWVzIHRoZSBwcmVmaXggc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gbmV3Y29kZS1jb2RlKQorICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IChQeV91aW50cHRyX3QpKG5ld2NvZGUgLSBjb2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAgICAgICAgIGNvZGUgKz0gcHJlZml4X2xlbjsKICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGhlcmUgY29tZXMgdGhlIG92ZXJsYXAgdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgLyogRWFjaCBvdmVybGFwIHZhbHVlIHNob3VsZCBiZSA8IHByZWZpeF9sZW4gKi8KICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZWZpeF9sZW47IGkrKykgewpAQCAtMzA4Myw3ICsxODAzLDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6CiAgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKICAgICAgICAgICAgIEdFVF9BUkc7Ci0gICAgICAgICAgICBpZiAoYXJnID49IGdyb3VwcykKKyAgICAgICAgICAgIGlmIChhcmcgPj0gKHNpemVfdClncm91cHMpCiAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zMDkyLDcgKzE4MTIsNyBAQAogICAgICAgICAgICAgICAgJ2dyb3VwJyBpcyBlaXRoZXIgYW4gaW50ZWdlciBncm91cCBudW1iZXIgb3IgYSBncm91cCBuYW1lLAogICAgICAgICAgICAgICAgJ3RoZW4nIGFuZCAnZWxzZScgYXJlIHN1Yi1yZWdleGVzLCBhbmQgJ2Vsc2UnIGlzIG9wdGlvbmFsLiAqLwogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgR0VUX1NLSVBfQURKKDEpOwogICAgICAgICAgICAgY29kZS0tOyAvKiBUaGUgc2tpcCBpcyByZWxhdGl2ZSB0byB0aGUgZmlyc3QgYXJnISAqLwpAQCAtMzEyMSw3ICsxODQxLDcgQEAKICAgICAgICAgICAgICAgIHRvIGFsbG93IGFyYml0cmFyeSBqdW1wcyBhbnl3aGVyZSBpbiB0aGUgY29kZTsgc28gd2UganVzdCBsb29rCiAgICAgICAgICAgICAgICBmb3IgYSBKVU1QIG9wY29kZSBwcmVjZWRpbmcgb3VyIHNraXAgdGFyZ2V0LgogICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChza2lwID49IDMgJiYgc2tpcC0zIDwgZW5kLWNvZGUgJiYKKyAgICAgICAgICAgIGlmIChza2lwID49IDMgJiYgc2tpcC0zIDwgKFB5X3VpbnRwdHJfdCkoZW5kIC0gY29kZSkgJiYKICAgICAgICAgICAgICAgICBjb2RlW3NraXAtM10gPT0gU1JFX09QX0pVTVApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYm90aCB0aGVuIGFuZCBlbHNlIHBhcnRzIHByZXNlbnRcbiIpKTsKQEAgLTMyMDUsNiArMTkyNSwxMiBAQAogc3RhdGljIFB5T2JqZWN0KgogbWF0Y2hfZ2V0c2xpY2VfYnlfaW5kZXgoTWF0Y2hPYmplY3QqIHNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0KiBkZWYpCiB7CisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgdm9pZCogcHRyOworCiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzZWxmLT5ncm91cHMpIHsKICAgICAgICAgLyogcmFpc2UgSW5kZXhFcnJvciBpZiB3ZSB3ZXJlIGdpdmVuIGEgYmFkIGdyb3VwIG51bWJlciAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCkBAIC0zMjIyLDkgKzE5NDgsMTQgQEAKICAgICAgICAgcmV0dXJuIGRlZjsKICAgICB9CiAKLSAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRTbGljZSgKLSAgICAgICAgc2VsZi0+c3RyaW5nLCBzZWxmLT5tYXJrW2luZGV4XSwgc2VsZi0+bWFya1tpbmRleCsxXQotICAgICAgICApOworICAgIHB0ciA9IGdldHN0cmluZyhzZWxmLT5zdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZ2aWV3KTsKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IGdldHNsaWNlKGlzYnl0ZXMsIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdKTsKKyAgICBpZiAoaXNieXRlcyAmJiB2aWV3LmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtMzY0NCw2ICsyMzc1LDIyIEBACiAgICAgICAgIHJldHVybiBtYXRjaF9yZWdzKHNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbWF0Y2hfcmVwcihNYXRjaE9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpncm91cDAgPSBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChzZWxmLCAwLCBQeV9Ob25lKTsKKyAgICBpZiAoZ3JvdXAwID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgICAgICAgICAgIjwlcyBvYmplY3Q7IHNwYW49KCVkLCAlZCksIG1hdGNoPSUuNTBSPiIsCisgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLAorICAgICAgICAgICAgc2VsZi0+bWFya1swXSwgc2VsZi0+bWFya1sxXSwgZ3JvdXAwKTsKKyAgICBQeV9ERUNSRUYoZ3JvdXAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKIHN0YXRpYyBQeUdldFNldERlZiBtYXRjaF9nZXRzZXRbXSA9IHsKICAgICB7Imxhc3RpbmRleCIsIChnZXR0ZXIpbWF0Y2hfbGFzdGluZGV4X2dldCwgKHNldHRlcilOVUxMfSwKICAgICB7Imxhc3Rncm91cCIsIChnZXR0ZXIpbWF0Y2hfbGFzdGdyb3VwX2dldCwgKHNldHRlcilOVUxMfSwKQEAgLTM2NzIsNyArMjQxOSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKW1hdGNoX3JlcHIsICAgICAgIC8qIHRwX3JlcHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KQEAgLTM2OTYsNyArMjQ0Myw3IEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QqCi1wYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBpbnQgc3RhdHVzKQorcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCogcGF0dGVybiwgU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBzdGF0dXMpCiB7CiAgICAgLyogY3JlYXRlIG1hdGNoIG9iamVjdCAoZnJvbSBzdGF0ZSBvYmplY3QpICovCiAKQEAgLTM3NzUsMTcgKzI1MjIsMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSBzcmVfdW1hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zODA2LDE3ICsyNTQ5LDEzIEBACiB7CiAgICAgU1JFX1NUQVRFKiBzdGF0ZSA9ICZzZWxmLT5zdGF0ZTsKICAgICBQeU9iamVjdCogbWF0Y2g7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKIAogICAgIHN0YXRlX3Jlc2V0KHN0YXRlKTsKIAogICAgIHN0YXRlLT5wdHIgPSBzdGF0ZS0+c3RhcnQ7CiAKLSAgICBpZiAoc3RhdGUtPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzk2OSw3ICsyNzA4LDUgQEAKICAgICByZXR1cm4gbTsKIH0KIAotI2VuZGlmIC8qICFkZWZpbmVkKFNSRV9SRUNVUlNJVkUpICovCi0KIC8qIHZpbTp0cz00OnN3PTQ6ZXQKICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zc2wuYyBiL01vZHVsZXMvX3NzbC5jCmluZGV4IDM3NGQ5MzAuLjA4NjI3YjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NzbC5jCisrKyBiL01vZHVsZXMvX3NzbC5jCkBAIC00Miw2ICs0Miw3MCBAQAogCiAjZW5kaWYKIAorLyogSW5jbHVkZSBzeW1ib2xzIGZyb20gX3NvY2tldCBtb2R1bGUgKi8KKyNpbmNsdWRlICJzb2NrZXRtb2R1bGUuaCIKKworc3RhdGljIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCBQeVNvY2tldE1vZHVsZTsKKworI2lmIGRlZmluZWQoSEFWRV9QT0xMX0gpCisjaW5jbHVkZSA8cG9sbC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgorCisvKiBJbmNsdWRlIE9wZW5TU0wgaGVhZGVyIGZpbGVzICovCisjaW5jbHVkZSAib3BlbnNzbC9yc2EuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2NyeXB0by5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOS5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOXYzLmgiCisjaW5jbHVkZSAib3BlbnNzbC9wZW0uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisjaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCisKKy8qIFNTTCBlcnJvciBvYmplY3QgKi8KK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7CisKKy8qIEVycm9yIG1hcHBpbmdzICovCitzdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKK3N0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOworc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7CisKK3N0cnVjdCBweV9zc2xfZXJyb3JfY29kZSB7CisgICAgY29uc3QgY2hhciAqbW5lbW9uaWM7CisgICAgaW50IGxpYnJhcnksIHJlYXNvbjsKK307CitzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7CisgICAgY29uc3QgY2hhciAqbGlicmFyeTsKKyAgICBpbnQgY29kZTsKK307CisKKy8qIEluY2x1ZGUgZ2VuZXJhdGVkIGRhdGEgKGVycm9yIGNvZGVzKSAqLworI2luY2x1ZGUgIl9zc2xfZGF0YS5oIgorCisvKiBPcGVuc3NsIGNvbWVzIHdpdGggVExTdjEuMSBhbmQgVExTdjEuMiBiZXR3ZWVuIDEuMC4waCBhbmQgMS4wLjEKKyAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvY2hhbmdlbG9nLmh0bWwKKyAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwMEwKKyMgZGVmaW5lIEhBVkVfVExTdjFfMiAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDAKKyNlbmRpZgorCisvKiBTTkkgc3VwcG9ydCAoY2xpZW50LSBhbmQgc2VydmVyLXNpZGUpIGFwcGVhcmVkIGluIE9wZW5TU0wgMS4wLjAgYW5kIDAuOS44ZgorICogVGhpcyBpbmNsdWRlcyB0aGUgU1NMX3NldF9TU0xfQ1RYKCkgZnVuY3Rpb24uCisgKi8KKyNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjIGRlZmluZSBIQVZFX1NOSSAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9TTkkgMAorI2VuZGlmCisKIGVudW0gcHlfc3NsX2Vycm9yIHsKICAgICAvKiB0aGVzZSBtaXJyb3Igc3NsLmggKi8KICAgICBQWV9TU0xfRVJST1JfTk9ORSwKQEAgLTc1LDU1ICsxMzksMTQgQEAKICNlbmRpZgogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDM9MSwKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMywKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSwKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzIKKyNlbHNlCiAgICAgUFlfU1NMX1ZFUlNJT05fVExTMQotfTsKLQotc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKLSAgICBjb25zdCBjaGFyICptbmVtb25pYzsKLSAgICBpbnQgbGlicmFyeSwgcmVhc29uOwotfTsKLQotc3RydWN0IHB5X3NzbF9saWJyYXJ5X2NvZGUgewotICAgIGNvbnN0IGNoYXIgKmxpYnJhcnk7Ci0gICAgaW50IGNvZGU7Ci19OwotCi0vKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLwotI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgotCi1zdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOwotCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKLSNpbmNsdWRlIDxwb2xsLmg+Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKLSNpbmNsdWRlIDxzeXMvcG9sbC5oPgogI2VuZGlmCi0KLS8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KLSNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKLQotLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCi0jaW5jbHVkZSAiX3NzbF9kYXRhLmgiCi0KLS8qIFNTTCBlcnJvciBvYmplY3QgKi8KLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7Ci0KLS8qIEVycm9yIG1hcHBpbmdzICovCi1zdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKLXN0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOwotc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7Cit9OwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIApAQCAtMTc1LDYgKzE5OCwxMSBAQAogIyBkZWZpbmUgT1BFTlNTTF9OT19DT01QCiAjZW5kaWYKIAorLyogWDUwOV9WRVJJRllfUEFSQU0gZ290IGFkZGVkIHRvIE9wZW5TU0wgaW4gMC45LjggKi8KKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwMGZMCisjIGRlZmluZSBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCisjZW5kaWYKKwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMTgzLDE0ICsyMTEsMTkgQEAKICAgICBjaGFyICpucG5fcHJvdG9jb2xzOwogICAgIGludCBucG5fcHJvdG9jb2xzX2xlbjsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5T2JqZWN0ICpzZXRfaG9zdG5hbWU7CisjZW5kaWYKIH0gUHlTU0xDb250ZXh0OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICpTb2NrZXQ7IC8qIHdlYWtyZWYgdG8gc29ja2V0IG9uIHdoaWNoIHdlJ3JlIGxheWVyZWQgKi8KICAgICBTU0wgKnNzbDsKKyAgICBQeVNTTENvbnRleHQgKmN0eDsgLyogd2Vha3JlZiB0byBTU0wgY29udGV4dCAqLwogICAgIFg1MDkgKnBlZXJfY2VydDsKLSAgICBpbnQgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgaGFuZHNoYWtlX2RvbmU7CiAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZTsKIH0gUHlTU0xTb2NrZXQ7CiAKQEAgLTMxOCwxNCArMzUxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9vYmosIGVycnN0ciwgbGluZW5vKTsKICAgICBlbHNlCiAgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyAoX3NzbC5jOiVkKSIsIGVycnN0ciwgbGluZW5vKTsKLQogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaW5pdF92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoImlOIiwgc3NsX2Vycm5vLCBtc2cpOworICAgIGlmIChpbml0X3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGVycl92YWx1ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QodHlwZSwgaW5pdF92YWx1ZSk7CiAgICAgUHlfREVDUkVGKGluaXRfdmFsdWUpOwogICAgIGlmIChlcnJfdmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaWYgKHJlYXNvbl9vYmogPT0gTlVMTCkKICAgICAgICAgcmVhc29uX29iaiA9IFB5X05vbmU7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoZXJyX3ZhbHVlLCAmUHlJZF9yZWFzb24sIHJlYXNvbl9vYmopKQpAQCAtNDM5LDExICs0NzYsMTMgQEAKICAqLwogCiBzdGF0aWMgUHlTU0xTb2NrZXQgKgotbmV3UHlTU0xTb2NrZXQoU1NMX0NUWCAqY3R4LCBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2ssCituZXdQeVNTTFNvY2tldChQeVNTTENvbnRleHQgKnNzbGN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKICAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKIHsKICAgICBQeVNTTFNvY2tldCAqc2VsZjsKKyAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHgtPmN0eDsKKyAgICBsb25nIG1vZGU7CiAKICAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5U1NMU29ja2V0LCAmUHlTU0xTb2NrZXRfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKQEAgLTQ1Miw3ICs0OTEsMTAgQEAKICAgICBzZWxmLT5wZWVyX2NlcnQgPSBOVUxMOwogICAgIHNlbGYtPnNzbCA9IE5VTEw7CiAgICAgc2VsZi0+U29ja2V0ID0gTlVMTDsKKyAgICBzZWxmLT5jdHggPSBzc2xjdHg7CiAgICAgc2VsZi0+c2h1dGRvd25fc2Vlbl96ZXJvID0gMDsKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDA7CisgICAgUHlfSU5DUkVGKHNzbGN0eCk7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwogICAgICh2b2lkKSBFUlJfZ2V0X3N0YXRlKCk7CkBAIC00NjEsMTIgKzUwMywxNSBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgc29jay0+c29ja19mZCk7CisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsc2VsZik7CisgICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIFB5X1NBRkVfRE9XTkNBU1Qoc29jay0+c29ja19mZCwgU09DS0VUX1QsIGludCkpOworICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCi0gICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwogI2VuZGlmCisgICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgbW9kZSk7CiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICBpZiAoc2VydmVyX2hvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzZWxmLT5zc2wsIHNlcnZlcl9ob3N0bmFtZSk7CiAjZW5kaWYKQEAgLTQ4OCw2ICs1MzMsMTAgQEAKIAogICAgIHNlbGYtPnNvY2tldF90eXBlID0gc29ja2V0X3R5cGU7CiAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgaWYgKHNlbGYtPlNvY2tldCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01NTQsNiArNjAzLDcgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNlbGYtPnNzbCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC05MjAsNiArOTcwLDEyNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorX2dldF9haWFfdXJpKFg1MDkgKmNlcnRpZmljYXRlLCBpbnQgbmlkKSB7CisgICAgUHlPYmplY3QgKmxzdCA9IE5VTEwsICpvc3RyID0gTlVMTDsKKyAgICBpbnQgaSwgcmVzdWx0OworICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKKworICAgIGluZm8gPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfaW5mb19hY2Nlc3MsIE5VTEwsIE5VTEwpOworICAgIGlmICgoaW5mbyA9PSBOVUxMKSB8fCAoc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKGluZm8pOyBpKyspIHsKKyAgICAgICAgQUNDRVNTX0RFU0NSSVBUSU9OICphZCA9IHNrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZShpbmZvLCBpKTsKKyAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKworICAgICAgICBpZiAoKE9CSl9vYmoybmlkKGFkLT5tZXRob2QpICE9IG5pZCkgfHwKKyAgICAgICAgICAgICAgICAoYWQtPmxvY2F0aW9uLT50eXBlICE9IEdFTl9VUkkpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1cmkgPSBhZC0+bG9jYXRpb24tPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgb3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgIGlmIChvc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihvc3RyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKworICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KKworICBmYWlsOgorICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworICAgIFB5X1hERUNSRUYobHN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfY3JsX2RwKFg1MDkgKmNlcnRpZmljYXRlKSB7CisgICAgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmRwczsKKyAgICBpbnQgaSwgaiwgcmVzdWx0OworICAgIFB5T2JqZWN0ICpsc3Q7CisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwMEwKKyAgICBkcHMgPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfY3JsX2Rpc3RyaWJ1dGlvbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyNlbHNlCisgICAgLyogQ2FsbHMgeDUwOXYzX2NhY2hlX2V4dGVuc2lvbnMgYW5kIHNldHMgdXAgY3JsZHAgKi8KKyAgICBYNTA5X2NoZWNrX2NhKGNlcnRpZmljYXRlKTsKKyAgICBkcHMgPSBjZXJ0aWZpY2F0ZS0+Y3JsZHA7CisjZW5kaWYKKworICAgIGlmIChkcHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yIChpPTA7IGkgPCBza19ESVNUX1BPSU5UX251bShkcHMpOyBpKyspIHsKKyAgICAgICAgRElTVF9QT0lOVCAqZHA7CisgICAgICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmduczsKKworICAgICAgICBkcCA9IHNrX0RJU1RfUE9JTlRfdmFsdWUoZHBzLCBpKTsKKyAgICAgICAgZ25zID0gZHAtPmRpc3Rwb2ludC0+bmFtZS5mdWxsbmFtZTsKKworICAgICAgICBmb3IgKGo9MDsgaiA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZ25zKTsgaisrKSB7CisgICAgICAgICAgICBHRU5FUkFMX05BTUUgKmduOworICAgICAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvdXJpOworCisgICAgICAgICAgICBnbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShnbnMsIGopOworICAgICAgICAgICAgaWYgKGduLT50eXBlICE9IEdFTl9VUkkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVyaSA9IGduLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgICAgICBvdXJpID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopdXJpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgICAgICBpZiAob3VyaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3VyaSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3VyaSk7CisgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKIF9kZWNvZGVfY2VydGlmaWNhdGUoWDUwOSAqY2VydGlmaWNhdGUpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwpAQCAtOTI5LDkgKzEwOTksMTAgQEAKICAgICBQeU9iamVjdCAqaXNzdWVyOwogICAgIFB5T2JqZWN0ICp2ZXJzaW9uOwogICAgIFB5T2JqZWN0ICpzbl9vYmo7CisgICAgUHlPYmplY3QgKm9iajsKICAgICBBU04xX0lOVEVHRVIgKnNlcmlhbE51bWJlcjsKICAgICBjaGFyIGJ1ZlsyMDQ4XTsKLSAgICBpbnQgbGVuOworICAgIGludCBsZW4sIHJlc3VsdDsKICAgICBBU04xX1RJTUUgKm5vdEJlZm9yZSwgKm5vdEFmdGVyOwogICAgIFB5T2JqZWN0ICpwbm90QmVmb3JlLCAqcG5vdEFmdGVyOwogCkBAIC0xMDM3LDYgKzEyMDgsNDEgQEAKICAgICAgICAgUHlfREVDUkVGKHBlZXJfYWx0X25hbWVzKTsKICAgICB9CiAKKyAgICAvKiBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzOiBPQ1NQIFVSSXMgKi8KKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9PQ1NQKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgIk9DU1AiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9jYV9pc3N1ZXJzKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNhSXNzdWVycyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENEUCAoQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMpICovCisgICAgb2JqID0gX2dldF9jcmxfZHAoY2VydGlmaWNhdGUpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWwxOworICAgIH0gZWxzZSBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAiY3JsRGlzdHJpYnV0aW9uUG9pbnRzIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCiAgICAgQklPX2ZyZWUoYmlvYnVmKTsKICAgICByZXR1cm4gcmV0dmFsOwogCkBAIC0xMDQ4LDYgKzEyNTQsMjQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK19jZXJ0aWZpY2F0ZV90b19kZXIoWDUwOSAqY2VydGlmaWNhdGUpCit7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisKKyAgICBieXRlc19idWYgPSBOVUxMOworICAgIGxlbiA9IGkyZF9YNTA5KGNlcnRpZmljYXRlLCAmYnl0ZXNfYnVmKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCisgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7CisgICAgT1BFTlNTTF9mcmVlKGJ5dGVzX2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3Rlc3RfZGVjb2RlX2NlcnRpZmljYXRlIChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqYXJncykgewpAQCAtMTA5MywzNCArMTMxNywyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3BlZXJjZXJ0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICBpbnQgbGVuOwogICAgIGludCB2ZXJpZmljYXRpb247CiAgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHA6cGVlcl9jZXJ0aWZpY2F0ZSIsICZiaW5hcnlfbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKCFzZWxmLT5oYW5kc2hha2VfZG9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kc2hha2Ugbm90IGRvbmUgeWV0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAoIXNlbGYtPnBlZXJfY2VydCkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICBpZiAoYmluYXJ5X21vZGUpIHsKICAgICAgICAgLyogcmV0dXJuIGNlcnQgaW4gREVSLWVuY29kZWQgZm9ybWF0ICovCi0KLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKLQotICAgICAgICBieXRlc19idWYgPSBOVUxMOwotICAgICAgICBsZW4gPSBpMmRfWDUwOShzZWxmLT5wZWVyX2NlcnQsICZieXRlc19idWYpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgUHlTU0xfU2V0RXJyb3Ioc2VsZiwgbGVuLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbW11dGFibGUgYnl0ZXMgc2VxdWVuY2UgKi8KLSAgICAgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7Ci0gICAgICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotCisgICAgICAgIHJldHVybiBfY2VydGlmaWNhdGVfdG9fZGVyKHNlbGYtPnBlZXJfY2VydCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoU1NMX2dldF9TU0xfQ1RYKHNlbGYtPnNzbCkpOwogICAgICAgICBpZiAoKHZlcmlmaWNhdGlvbiAmIFNTTF9WRVJJRllfUEVFUikgPT0gMCkKQEAgLTEyMjMsNiArMTQzNiw0MyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBQeVNTTENvbnRleHQgKlB5U1NMX2dldF9jb250ZXh0KFB5U1NMU29ja2V0ICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7CisgICAgUHlfSU5DUkVGKHNlbGYtPmN0eCk7CisgICAgcmV0dXJuIHNlbGYtPmN0eDsKK30KKworc3RhdGljIGludCBQeVNTTF9zZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHZhbHVlLCAmUHlTU0xDb250ZXh0X1R5cGUpKSB7CisjaWYgIUhBVkVfU05JCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAic2V0dGluZyBhIHNvY2tldCdzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYtPmN0eCk7CisgICAgICAgIHNlbGYtPmN0eCA9IChQeVNTTENvbnRleHQgKikgdmFsdWU7CisgICAgICAgIFNTTF9zZXRfU1NMX0NUWChzZWxmLT5zc2wsIHNlbGYtPmN0eC0+Y3R4KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJUaGUgdmFsdWUgbXVzdCBiZSBhIFNTTENvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X2NvbnRleHRfZG9jLAorIl9zZXR0ZXJfY29udGV4dChjdHgpXG5cCitcCitUaGlzIGNoYW5nZXMgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTU0xTb2NrZXQuIFRoaXMgaXMgdHlwaWNhbGx5XG5cCit1c2VkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gc2V0IGJ5IHRoZSBzZXRfc2VydmVybmFtZV9jYWxsYmFja1xuXAorb24gdGhlIFNTTENvbnRleHQgdG8gY2hhbmdlIHRoZSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlXG5cCitTU0xTb2NrZXQgYmVmb3JlIHRoZSBjcnlwdG9ncmFwaGljIGV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlc1xuIik7CisKKworCiBzdGF0aWMgdm9pZCBQeVNTTF9kZWFsbG9jKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5wZWVyX2NlcnQpICAgICAgICAvKiBQb3NzaWJsZSBub3QgdG8gaGF2ZSBvbmU/ICovCkBAIC0xMjMwLDYgKzE0ODAsNyBAQAogICAgIGlmIChzZWxmLT5zc2wpCiAgICAgICAgIFNTTF9mcmVlKHNlbGYtPnNzbCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5Tb2NrZXQpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3R4KTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEyODgsOSArMTUzOSwxMSBAQAogICAgIC8qIFNlZSBpZiB0aGUgc29ja2V0IGlzIHJlYWR5ICovCiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmICh3cml0aW5nKQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmZkcywgTlVMTCwgJnR2KTsKICAgICBlbHNlCi0gICAgICAgIHJjID0gc2VsZWN0KHMtPnNvY2tfZmQrMSwgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCiAKICNpZmRlZiBIQVZFX1BPTEwKQEAgLTE2NzAsNiArMTkyMywxMiBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX0ZJTklTSEVEICovCiAKK3N0YXRpYyBQeUdldFNldERlZiBzc2xfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY29udGV4dCIsIChnZXR0ZXIpIFB5U1NMX2dldF9jb250ZXh0LAorICAgICAgICAgICAgICAgIChzZXR0ZXIpIFB5U1NMX3NldF9jb250ZXh0LCBQeVNTTF9zZXRfY29udGV4dF9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMTWV0aG9kc1tdID0gewogICAgIHsiZG9faGFuZHNoYWtlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTGRvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMd3JpdGUsIE1FVEhfVkFSQVJHUywKQEAgLTE3MjQsNiArMTk4Myw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3NsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogfTsKIAogCkBAIC0xNzQ3LDYgKzIwMDgsMTIgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKICAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfbWV0aG9kKCkpOworI2lmIEhBVkVfVExTdjFfMgorICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8xKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8xX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMikKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMl9tZXRob2QoKSk7CisjZW5kaWYKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCkBAIC0xNzgwLDYgKzIwNDcsOSBAQAogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBzZWxmLT5ucG5fcHJvdG9jb2xzID0gTlVMTDsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIHNlbGYtPnNldF9ob3N0bmFtZSA9IE5VTEw7CisjZW5kaWYKICAgICAvKiBEZWZhdWx0cyAqLwogICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzZWxmLT5jdHgsIFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzZWxmLT5jdHgsCkBAIC0xNzkzLDkgKzIwNjMsMjggQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAorc3RhdGljIGludAorY29udGV4dF90cmF2ZXJzZShQeVNTTENvbnRleHQgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X1ZJU0lUKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29udGV4dF9jbGVhcihQeVNTTENvbnRleHQgKnNlbGYpCit7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogY29udGV4dF9kZWFsbG9jKFB5U1NMQ29udGV4dCAqc2VsZikKIHsKKyAgICBjb250ZXh0X2NsZWFyKHNlbGYpOwogICAgIFNTTF9DVFhfZnJlZShzZWxmLT5jdHgpOwogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBQeU1lbV9GcmVlKHNlbGYtPm5wbl9wcm90b2NvbHMpOwpAQCAtMTk0Niw2ICsyMjM1LDQ2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZsYWdzID0gWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzKHN0b3JlLT5wYXJhbSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGZsYWdzKTsKK30KKworc3RhdGljIGludAorc2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIGZsYWdzLCBzZXQsIGNsZWFyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJrIiwgJm5ld19mbGFncykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIGNsZWFyID0gZmxhZ3MgJiB+bmV3X2ZsYWdzOworICAgIHNldCA9IH5mbGFncyAmIG5ld19mbGFnczsKKyAgICBpZiAoY2xlYXIpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFncyhzdG9yZS0+cGFyYW0sIGNsZWFyKSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNldCkgeworICAgICAgICBpZiAoIVg1MDlfVkVSSUZZX1BBUkFNX3NldF9mbGFncyhzdG9yZS0+cGFyYW0sIHNldCkpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfb3B0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCiB7CkBAIC0yMDE5LDggKzIzNDgsOCBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGZyZWUocHdfaW5mby0+cGFzc3dvcmQpOwotICAgIHB3X2luZm8tPnBhc3N3b3JkID0gbWFsbG9jKHNpemUpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby0+cGFzc3dvcmQpOworICAgIHB3X2luZm8tPnBhc3N3b3JkID0gUHlNZW1fTWFsbG9jKHNpemUpOwogICAgIGlmICghcHdfaW5mby0+cGFzc3dvcmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBhbGxvY2F0ZSBwYXNzd29yZCBidWZmZXIiKTsKQEAgLTIxNjQsNzIgKzI0OTMsMjEyIEBACiAgICAgfQogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF9jYik7CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF91c2VyZGF0YSk7Ci0gICAgZnJlZShwd19pbmZvLnBhc3N3b3JkKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8ucGFzc3dvcmQpOwogICAgIFB5X1hERUNSRUYoa2V5ZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjZXJ0ZmlsZV9ieXRlcyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgcmV0dXJucyAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitfYWRkX2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqZGF0YSwgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgIGludCBmaWxldHlwZSkKK3sKKyAgICBCSU8gKmJpb2J1ZiA9IE5VTEw7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgaW50IHJldHZhbCA9IDAsIGVyciwgbG9hZGVkID0gMDsKKworICAgIGFzc2VydChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSB8fCBmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfUEVNKTsKKworICAgIGlmIChsZW4gPD0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFbXB0eSBjZXJ0aWZpY2F0ZSBkYXRhIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2VydGlmaWNhdGUgZGF0YSBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGJpb2J1ZiA9IEJJT19uZXdfbWVtX2J1ZihkYXRhLCAoaW50KWxlbik7CisgICAgaWYgKGJpb2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcigiQ2FuJ3QgYWxsb2NhdGUgYnVmZmVyIiwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGFzc2VydChzdG9yZSAhPSBOVUxMKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFg1MDkgKmNlcnQgPSBOVUxMOworICAgICAgICBpbnQgcjsKKworICAgICAgICBpZiAoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEpIHsKKyAgICAgICAgICAgIGNlcnQgPSBkMmlfWDUwOV9iaW8oYmlvYnVmLCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShiaW9idWYsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5jdHgtPmRlZmF1bHRfcGFzc3dkX2NhbGxiYWNrX3VzZXJkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2VydCA9PSBOVUxMKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByID0gWDUwOV9TVE9SRV9hZGRfY2VydChzdG9yZSwgY2VydCk7CisgICAgICAgIFg1MDlfZnJlZShjZXJ0KTsKKyAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgICAgICAgICBpZiAoKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9YNTA5KSAmJgorICAgICAgICAgICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFg1MDlfUl9DRVJUX0FMUkVBRFlfSU5fSEFTSF9UQUJMRSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgICAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvYWRlZCsrOworICAgIH0KKworICAgIGVyciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSAmJgorICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0FTTjEpICYmCisgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBBU04xX1JfSEVBREVSX1RPT19MT05HKSkgeworICAgICAgICAvKiBFT0YgQVNOMSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIGlmICgoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAobG9hZGVkID4gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBQRU1fUl9OT19TVEFSVF9MSU5FKSkgeworICAgICAgICAvKiBFT0YgUEVNIGZpbGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgfQorCisgICAgQklPX2ZyZWUoYmlvYnVmKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2FkX3ZlcmlmeV9sb2NhdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqY2FmaWxlID0gTlVMTCwgKmNhcGF0aCA9IE5VTEw7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCAiY2FkYXRhIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMLCAqY2FkYXRhID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2FmaWxlX2J5dGVzID0gTlVMTCwgKmNhcGF0aF9ieXRlcyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqY2FmaWxlX2J1ZiA9IE5VTEwsICpjYXBhdGhfYnVmID0gTlVMTDsKLSAgICBpbnQgcjsKKyAgICBpbnQgciA9IDAsIG9rID0gMTsKIAogICAgIGVycm5vID0gMDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAifE9POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKLSAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCkpCisgICAgICAgICJ8T09POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKKyAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCwgJmNhZGF0YSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKGNhZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICBjYWZpbGUgPSBOVUxMOwogICAgIGlmIChjYXBhdGggPT0gUHlfTm9uZSkKICAgICAgICAgY2FwYXRoID0gTlVMTDsKLSAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwpIHsKKyAgICBpZiAoY2FkYXRhID09IFB5X05vbmUpCisgICAgICAgIGNhZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwgJiYgY2FkYXRhID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUgYW5kIGNhcGF0aCBjYW5ub3QgYmUgYm90aCBvbWl0dGVkIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSwgY2FwYXRoIGFuZCBjYWRhdGEgY2Fubm90IGJlIGFsbCBvbWl0dGVkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYWZpbGUgJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYWZpbGUsICZjYWZpbGVfYnl0ZXMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVzeXN0ZW0gcGF0aCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNhcGF0aCAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGNhcGF0aCwgJmNhcGF0aF9ieXRlcykpIHsKLSAgICAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhcGF0aCBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlmIChjYWZpbGUpCi0gICAgICAgIGNhZmlsZV9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYWZpbGVfYnl0ZXMpOwotICAgIGlmIChjYXBhdGgpCi0gICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOwotICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKLSAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgLyogdmFsaWRhdGEgY2FkYXRhIHR5cGUgYW5kIGxvYWQgY2FkYXRhICovCisgICAgaWYgKGNhZGF0YSkgeworICAgICAgICBQeV9idWZmZXIgYnVmOworICAgICAgICBQeU9iamVjdCAqY2FkYXRhX2FzY2lpID0gTlVMTDsKKworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGNhZGF0YSwgJmJ1ZiwgUHlCVUZfU0lNUExFKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cygmYnVmLCAnQycpIHx8IGJ1Zi5uZGltID4gMSkgeworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBjb250aWd1b3VzIGJ1ZmZlciB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGRpbWVuc2lvbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLCBidWYuYnVmLCBidWYubGVuLCBTU0xfRklMRVRZUEVfQVNOMSk7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgaWYgKHIgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGNhZGF0YV9hc2NpaSA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKGNhZGF0YSk7CisgICAgICAgICAgICBpZiAoY2FkYXRhX2FzY2lpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FkYXRhIHNob3VsZCBiZSBhIEFTQ0lJIHN0cmluZyBvciBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzLWxpa2Ugb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgPSBfYWRkX2NhX2NlcnRzKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2FkYXRhX2FzY2lpKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGxvYWQgY2FmaWxlIG9yIGNhcGF0aCAqLworICAgIGlmIChjYWZpbGUgfHwgY2FwYXRoKSB7CisgICAgICAgIGlmIChjYWZpbGUpCisgICAgICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKKyAgICAgICAgaWYgKGNhcGF0aCkKKyAgICAgICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOworICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHIgPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzZWxmLT5jdHgsIGNhZmlsZV9idWYsIGNhcGF0aF9idWYpOworICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAociAhPSAxKSB7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gMCkgeworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnb3RvIGVuZDsKKworICBlcnJvcjoKKyAgICBvayA9IDA7CisgIGVuZDoKICAgICBQeV9YREVDUkVGKGNhZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjYXBhdGhfYnl0ZXMpOwotICAgIGlmIChyICE9IDEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IDApIHsKLSAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgIH0KKyAgICBpZiAob2spIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjIzOCw3ICsyNzA3LDcgQEAKICAgICBGSUxFICpmOwogICAgIERIICpkaDsKIAotICAgIGYgPSBfUHlfZm9wZW4oZmlsZXBhdGgsICJyYiIpOworICAgIGYgPSBfUHlfZm9wZW5fb2JqKGZpbGVwYXRoLCAicmIiKTsKICAgICBpZiAoZiA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBmaWxlcGF0aCk7CkBAIC0yMjg2LDcgKzI3NTUsNyBAQAogICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICJpZG5hIiwgJmhvc3RuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotI2lmbmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgIUhBVkVfU05JCiAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNlcnZlcl9ob3N0bmFtZSBpcyBub3Qgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICJieSB5b3VyIE9wZW5TU0wgbGlicmFyeSIpOwpAQCAtMjI5NCw3ICsyNzYzLDcgQEAKICNlbmRpZgogICAgIH0KIAotICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLT5jdHgsIHNvY2ssIHNlcnZlcl9zaWRlLAorICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLCBzb2NrLCBzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUpOwogICAgIGlmIChob3N0bmFtZSAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKQEAgLTIzNzksOSArMjg0OCwyNTcgQEAKIH0KICNlbmRpZgogCisjaWYgSEFWRV9TTkkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpCitzdGF0aWMgaW50Citfc2VydmVybmFtZV9jYWxsYmFjayhTU0wgKnMsIGludCAqYWwsIHZvaWQgKmFyZ3MpCit7CisgICAgaW50IHJldDsKKyAgICBQeVNTTENvbnRleHQgKnNzbF9jdHggPSAoUHlTU0xDb250ZXh0ICopIGFyZ3M7CisgICAgUHlTU0xTb2NrZXQgKnNzbDsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9vOworICAgIFB5T2JqZWN0ICpzZXJ2ZXJuYW1lX2lkbmE7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAvKiBUaGUgaGlnaC1sZXZlbCBzc2wuU1NMU29ja2V0IG9iamVjdCAqLworICAgIFB5T2JqZWN0ICpzc2xfc29ja2V0OworICAgIGNvbnN0IGNoYXIgKnNlcnZlcm5hbWUgPSBTU0xfZ2V0X3NlcnZlcm5hbWUocywgVExTRVhUX05BTUVUWVBFX2hvc3RfbmFtZSk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKKworICAgIGlmIChzc2xfY3R4LT5zZXRfaG9zdG5hbWUgPT0gTlVMTCkgeworICAgICAgICAvKiByZW1vdmUgcmFjZSBjb25kaXRpb24gaW4gdGhpcyB0aGUgY2FsbCBiYWNrIHdoaWxlIGlmIHJlbW92aW5nIHRoZQorICAgICAgICAgKiBjYWxsYmFjayBpcyBpbiBwcm9ncmVzcyAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgICAgIHJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKKyAgICB9CisKKyAgICBzc2wgPSBTU0xfZ2V0X2FwcF9kYXRhKHMpOworICAgIGFzc2VydChQeVNTTFNvY2tldF9DaGVjayhzc2wpKTsKKyAgICBzc2xfc29ja2V0ID0gUHlXZWFrcmVmX0dldE9iamVjdChzc2wtPlNvY2tldCk7CisgICAgUHlfSU5DUkVGKHNzbF9zb2NrZXQpOworICAgIGlmIChzc2xfc29ja2V0ID09IFB5X05vbmUpIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoc2VydmVybmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc3NsX2N0eC0+c2V0X2hvc3RuYW1lLCBzc2xfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUsIHNzbF9jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VydmVybmFtZV9vID0gUHlCeXRlc19Gcm9tU3RyaW5nKHNlcnZlcm5hbWUpOworICAgICAgICBpZiAoc2VydmVybmFtZV9vID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZSgoUHlPYmplY3QgKikgc3NsX2N0eCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHNlcnZlcm5hbWVfaWRuYSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzZXJ2ZXJuYW1lX28sICJpZG5hIiwgTlVMTCk7CisgICAgICAgIGlmIChzZXJ2ZXJuYW1lX2lkbmEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9vKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc3NsX2N0eC0+c2V0X2hvc3RuYW1lLCBzc2xfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcm5hbWVfaWRuYSwgc3NsX2N0eCwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX2lkbmEpOworICAgIH0KKyAgICBQeV9ERUNSRUYoc3NsX3NvY2tldCk7CisKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNzbF9jdHgtPnNldF9ob3N0bmFtZSk7CisgICAgICAgICphbCA9IFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKKyAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICphbCA9IChpbnQpIFB5TG9uZ19Bc0xvbmcocmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgKmFsID0gU1NMX0FEX0lOVEVSTkFMX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9PSzsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJldDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jLAorInNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKG1ldGhvZClcblwKK1xuXAorVGhpcyBzZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgc2VydmVyIG5hbWUgaXMgcHJvdmlkZWQgYnlcblwKK3RoZSBTU0wvVExTIGNsaWVudCBpbiB0aGUgU05JIGV4dGVuc2lvbi5cblwKK1xuXAorSWYgdGhlIGFyZ3VtZW50IGlzIE5vbmUgdGhlbiB0aGUgY2FsbGJhY2sgaXMgZGlzYWJsZWQuIFRoZSBtZXRob2QgaXMgY2FsbGVkXG5cCit3aXRoIHRoZSBTU0xTb2NrZXQsIHRoZSBzZXJ2ZXIgbmFtZSBhcyBhIHN0cmluZywgYW5kIHRoZSBTU0xDb250ZXh0IG9iamVjdC5cblwKK1NlZSBSRkMgNjA2NiBmb3IgZGV0YWlscyBvZiB0aGUgU05JIGV4dGVuc2lvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisjaWYgSEFWRV9TTkkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpCisgICAgUHlPYmplY3QgKmNiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNiKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9DTEVBUihzZWxmLT5zZXRfaG9zdG5hbWUpOworICAgIGlmIChjYiA9PSBQeV9Ob25lKSB7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2IpKSB7CisgICAgICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgY2FsbGFibGUgb2JqZWN0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoY2IpOworICAgICAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBjYjsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBfc2VydmVybmFtZV9jYWxsYmFjayk7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2FyZyhzZWxmLT5jdHgsIHNlbGYpOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKKyNlbHNlCisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJUaGUgVExTIGV4dGVuc2lvbiBzZXJ2ZXJuYW1lIGNhbGxiYWNrLCAiCisgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGluIHRoZSBjdXJyZW50IE9wZW5TU0wgbGlicmFyeS4iKTsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X3N0YXRzX2RvYywKKyJjZXJ0X3N0b3JlX3N0YXRzKCkgLT4geydjcmwnOiBpbnQsICd4NTA5X2NhJzogaW50LCAneDUwOSc6IGludH1cblwKK1xuXAorUmV0dXJucyBxdWFudGl0aWVzIG9mIGxvYWRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMuIFguNTA5IGNlcnRpZmljYXRlcyB3aXRoIGFcblwKK0NBIGV4dGVuc2lvbiBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyBpbnNpZGUgdGhlIGNvbnRleHQncyBjZXJ0XG5cCitzdG9yZS5cblwKK05PVEU6IENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlXG5cCitiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NlcnRfc3RvcmVfc3RhdHMoUHlTU0xDb250ZXh0ICpzZWxmKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgaW50IHg1MDkgPSAwLCBjcmwgPSAwLCBwa2V5ID0gMCwgY2EgPSAwLCBpOworCisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZm9yIChpID0gMDsgaSA8IHNrX1g1MDlfT0JKRUNUX251bShzdG9yZS0+b2Jqcyk7IGkrKykgeworICAgICAgICBvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShzdG9yZS0+b2JqcywgaSk7CisgICAgICAgIHN3aXRjaCAob2JqLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfWDUwOToKKyAgICAgICAgICAgICAgICB4NTA5Kys7CisgICAgICAgICAgICAgICAgaWYgKFg1MDlfY2hlY2tfY2Eob2JqLT5kYXRhLng1MDkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX0NSTDoKKyAgICAgICAgICAgICAgICBjcmwrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9QS0VZOgorICAgICAgICAgICAgICAgIHBrZXkrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogSWdub3JlIFg1MDlfTFVfRkFJTCwgWDUwOV9MVV9SRVRSWSwgWDUwOV9MVV9QS0VZLgorICAgICAgICAgICAgICAgICAqIEFzIGZhciBhcyBJIGNhbiB0ZWxsIHRoZXkgYXJlIGludGVybmFsIHN0YXRlcyBhbmQgbmV2ZXIKKyAgICAgICAgICAgICAgICAgKiBzdG9yZWQgaW4gYSBjZXJ0IHN0b3JlICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIntzaXNpc2l9IiwgIng1MDkiLCB4NTA5LCAiY3JsIiwgY3JsLAorICAgICAgICAieDUwOV9jYSIsIGNhKTsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9jYV9jZXJ0c19kb2MsCisiZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKSAtPiBsaXN0IG9mIGxvYWRlZCBjZXJ0aWZpY2F0ZVxuXAorXG5cCitSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlXG5cCitvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfY2FfY2VydHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImJpbmFyeV9mb3JtIiwgTlVMTH07CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgUHlPYmplY3QgKmNpID0gTlVMTCwgKnJsaXN0ID0gTlVMTDsKKyAgICBpbnQgaTsKKyAgICBpbnQgYmluYXJ5X21vZGUgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxwOmdldF9jYV9jZXJ0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmYmluYXJ5X21vZGUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICgocmxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgWDUwOV9PQkpFQ1QgKm9iajsKKyAgICAgICAgWDUwOSAqY2VydDsKKworICAgICAgICBvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShzdG9yZS0+b2JqcywgaSk7CisgICAgICAgIGlmIChvYmotPnR5cGUgIT0gWDUwOV9MVV9YNTA5KSB7CisgICAgICAgICAgICAvKiBub3QgYSB4NTA5IGNlcnQgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIENBIGZvciBhbnkgcHVycG9zZSAqLworICAgICAgICBjZXJ0ID0gb2JqLT5kYXRhLng1MDk7CisgICAgICAgIGlmICghWDUwOV9jaGVja19jYShjZXJ0KSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CisgICAgICAgICAgICBjaSA9IF9jZXJ0aWZpY2F0ZV90b19kZXIoY2VydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaSA9IF9kZWNvZGVfY2VydGlmaWNhdGUoY2VydCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmxpc3QsIGNpKSA9PSAtMSkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihjaSk7CisgICAgfQorICAgIHJldHVybiBybGlzdDsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKGNpKTsKKyAgICBQeV9YREVDUkVGKHJsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiBzdGF0aWMgUHlHZXRTZXREZWYgY29udGV4dF9nZXRzZXRsaXN0W10gPSB7CiAgICAgeyJvcHRpb25zIiwgKGdldHRlcikgZ2V0X29wdGlvbnMsCiAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X29wdGlvbnMsIE5VTEx9LAorI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyAgICB7InZlcmlmeV9mbGFncyIsIChnZXR0ZXIpIGdldF92ZXJpZnlfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X2ZsYWdzLCBOVUxMfSwKKyNlbmRpZgogICAgIHsidmVyaWZ5X21vZGUiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X21vZGUsCiAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfbW9kZSwgTlVMTH0sCiAgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNDA4LDYgKzMxMjUsMTIgQEAKICAgICB7InNldF9lY2RoX2N1cnZlIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfZWNkaF9jdXJ2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9PLCBOVUxMfSwKICNlbmRpZgorICAgIHsic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvY30sCisgICAgeyJjZXJ0X3N0b3JlX3N0YXRzIiwgKFB5Q0Z1bmN0aW9uKSBjZXJ0X3N0b3JlX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X3N0YXRzX2RvY30sCisgICAgeyJnZXRfY2FfY2VydHMiLCAoUHlDRnVuY3Rpb24pIGdldF9jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZ2V0X2NhX2NlcnRzX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjQzMSwxMCArMzE1NCwxMCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgICh0cmF2ZXJzZXByb2MpIGNvbnRleHRfdHJhdmVyc2UsICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAoaW5xdWlyeSkgY29udGV4dF9jbGVhciwgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KQEAgLTI1ODQsNyArMzMwNywzODQgQEAKICNlbmRpZiAvKiBIQVZFX09QRU5TU0xfUkFORCAqLwogCiAKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jLAorImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIC0+IHR1cGxlXG5cCitcblwKK1JldHVybiBzZWFyY2ggcGF0aHMgYW5kIGVudmlyb25tZW50IHZhcnMgdGhhdCBhcmUgdXNlZCBieSBTU0xDb250ZXh0J3NcblwKK3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIHRvIGxvYWQgZGVmYXVsdCBDQXMuIFRoZSB2YWx1ZXMgYXJlXG5cCisnY2VydF9maWxlX2VudicsICdjZXJ0X2ZpbGUnLCAnY2VydF9kaXJfZW52JywgJ2NlcnRfZGlyJy4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqb2ZpbGVfZW52ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2ZpbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZGlyX2VudiA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9kaXIgPSBOVUxMOworCisjZGVmaW5lIGNvbnZlcnQoaW5mbywgdGFyZ2V0KSB7IFwKKyAgICAgICAgY29uc3QgY2hhciAqdG1wID0gKGluZm8pOyBcCisgICAgICAgIHRhcmdldCA9IE5VTEw7IFwKKyAgICAgICAgaWYgKCF0bXApIHsgUHlfSU5DUkVGKFB5X05vbmUpOyB0YXJnZXQgPSBQeV9Ob25lOyB9IFwKKyAgICAgICAgZWxzZSBpZiAoKHRhcmdldCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQodG1wKSkgPT0gTlVMTCkgeyBcCisgICAgICAgICAgICB0YXJnZXQgPSBQeUJ5dGVzX0Zyb21TdHJpbmcodG1wKTsgfSBcCisgICAgICAgIGlmICghdGFyZ2V0KSBnb3RvIGVycm9yOyBcCisgICAgfSB3aGlsZSgwKQorCisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZV9lbnYoKSwgb2ZpbGVfZW52KTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlKCksIG9maWxlKTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCksIG9kaXJfZW52KTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXIoKSwgb2Rpcik7CisjdW5kZWYgY29udmVydAorCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5OTk4iLCBvZmlsZV9lbnYsIG9maWxlLCBvZGlyX2Vudiwgb2Rpcik7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihvZmlsZV9lbnYpOworICAgIFB5X1hERUNSRUYob2ZpbGUpOworICAgIFB5X1hERUNSRUYob2Rpcl9lbnYpOworICAgIFB5X1hERUNSRUYob2Rpcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2FzbjFvYmoycHkoQVNOMV9PQkpFQ1QgKm9iaikKK3sKKyAgICBpbnQgbmlkOworICAgIGNvbnN0IGNoYXIgKmxuLCAqc247CisgICAgY2hhciBidWZbMTAwXTsKKyAgICBpbnQgYnVmbGVuOworCisgICAgbmlkID0gT0JKX29iajJuaWQob2JqKTsKKyAgICBpZiAobmlkID09IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIlVua25vd24gb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzbiA9IE9CSl9uaWQyc24obmlkKTsKKyAgICBsbiA9IE9CSl9uaWQybG4obmlkKTsKKyAgICBidWZsZW4gPSBPQkpfb2JqMnR4dChidWYsIHNpemVvZihidWYpLCBvYmosIDEpOworICAgIGlmIChidWZsZW4gPCAwKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGJ1ZmxlbikgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaXNzcyMiLCBuaWQsIHNuLCBsbiwgYnVmLCBidWZsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NPIiwgbmlkLCBzbiwgbG4sIFB5X05vbmUpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3R4dDJvYmpfZG9jLAorInR4dDJvYmoodHh0LCBuYW1lPUZhbHNlKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULiBCeSBkZWZhdWx0XG5cCitvYmplY3RzIGFyZSBsb29rZWQgdXAgYnkgT0lELiBXaXRoIG5hbWU9VHJ1ZSBzaG9ydCBhbmQgbG9uZyBuYW1lIGFyZSBhbHNvXG5cCittYXRjaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF90eHQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InR4dCIsICJuYW1lIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAqdHh0OworICAgIGludCBuYW1lID0gMDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8cDp0eHQyb2JqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0eHQsICZuYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX3R4dDJvYmoodHh0LCBuYW1lID8gMCA6IDEpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gb2JqZWN0ICclLjEwMHMnIiwgdHh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX25pZDJvYmpfZG9jLAorIm5pZDJvYmoobmlkKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorUHlTU0xfbmlkMm9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaW50IG5pZDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm5pZDJvYmoiLCAmbmlkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG5pZCA8IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk5JRCBtdXN0IGJlIHBvc2l0aXZlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX25pZDJvYmoobmlkKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAlaSIsIG5pZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBhc24xb2JqMnB5KG9iaik7CisgICAgQVNOMV9PQkpFQ1RfZnJlZShvYmopOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorCitzdGF0aWMgUHlPYmplY3QqCitjZXJ0RW5jb2RpbmdUeXBlKERXT1JEIGVuY29kaW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKng1MDlfYXNuID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKnBrY3NfN19hc24gPSBOVUxMOworCisgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpIHsKKyAgICAgICAgeDUwOV9hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygieDUwOV9hc24iKTsKKyAgICAgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkgeworICAgICAgICBwa2NzXzdfYXNuID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoInBrY3NfN19hc24iKTsKKyAgICAgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzd2l0Y2goZW5jb2RpbmdUeXBlKSB7CisgICAgY2FzZSBYNTA5X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHg1MDlfYXNuKTsKKyAgICAgICAgcmV0dXJuIHg1MDlfYXNuOworICAgIGNhc2UgUEtDU183X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHBrY3NfN19hc24pOworICAgICAgICByZXR1cm4gcGtjc183X2FzbjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGVuY29kaW5nVHlwZSk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QqCitwYXJzZUtleVVzYWdlKFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4LCBEV09SRCBmbGFncykKK3sKKyAgICBDRVJUX0VOSEtFWV9VU0FHRSAqdXNhZ2U7CisgICAgRFdPUkQgc2l6ZSwgZXJyb3IsIGk7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGlmICghQ2VydEdldEVuaGFuY2VkS2V5VXNhZ2UocENlcnRDdHgsIGZsYWdzLCBOVUxMLCAmc2l6ZSkpIHsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKworICAgIHVzYWdlID0gKENFUlRfRU5IS0VZX1VTQUdFKilQeU1lbV9NYWxsb2Moc2l6ZSk7CisgICAgaWYgKHVzYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorCisgICAgLyogTm93IGdldCB0aGUgYWN0dWFsIGVuaGFuY2VkIHVzYWdlIHByb3BlcnR5ICovCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIHVzYWdlLCAmc2l6ZSkpIHsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2FnZSk7CisgICAgICAgIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBDUllQVF9FX05PVF9GT1VORCkgeworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm9yKTsKKyAgICB9CisgICAgcmV0dmFsID0gUHlTZXRfTmV3KE5VTEwpOworICAgIGlmIChyZXR2YWwgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXI7ICsraSkgeworICAgICAgICBpZiAodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb2lkOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIG9pZCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHVzYWdlLT5yZ3BzelVzYWdlSWRlbnRpZmllcltpXSk7CisgICAgICAgICAgICBpZiAob2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQocmV0dmFsLCBvaWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG9pZCk7CisgICAgICAgICAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBlcnJvcjoKKyAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jLAorImVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAorJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCitUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4gVGhlIHRydXN0IHNldHRpbmcgaXMgZWl0aGVyIGEgc2V0IG9mIE9JRHMgb3IgdGhlXG5cCitib29sZWFuIFRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NlcnRpZmljYXRlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDRVJUX0NPTlRFWFQgcENlcnRDdHggPSBOVUxMOworICAgIFB5T2JqZWN0ICprZXl1c2FnZSA9IE5VTEwsICpjZXJ0ID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NlcnRpZmljYXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENlcnRDdHggPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ2VydEN0eCkpIHsKKyAgICAgICAgY2VydCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDZXJ0Q3R4LT5wYkNlcnRFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydEN0eC0+Y2JDZXJ0RW5jb2RlZCk7CisgICAgICAgIGlmICghY2VydCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ2VydEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX1BST1BfT05MWV9FTkhLRVlfVVNBR0VfRkxBRyk7CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5dXNhZ2UpOworICAgICAgICAgICAga2V5dXNhZ2UgPSBwYXJzZUtleVVzYWdlKHBDZXJ0Q3R4LCBDRVJUX0ZJTkRfRVhUX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICB9CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygzKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjZXJ0KTsKKyAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMiwga2V5dXNhZ2UpOworICAgICAgICBrZXl1c2FnZSA9IE5VTEw7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENlcnRDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDZXJ0aWZpY2F0ZUNvbnRleHQocENlcnRDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY2VydCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYoa2V5dXNhZ2UpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY3Jsc19kb2MsCisiZW51bV9jcmxzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKKydDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY3JscyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDUkxfQ09OVEVYVCBwQ3JsQ3R4ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY3JsID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NybHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaFN0b3JlID0gQ2VydE9wZW5TeXN0ZW1TdG9yZSgoSENSWVBUUFJPVilOVUxMLCBzdG9yZV9uYW1lKTsKKyAgICBpZiAoaFN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHBDcmxDdHggPSBDZXJ0RW51bUNSTHNJblN0b3JlKGhTdG9yZSwgcENybEN0eCkpIHsKKyAgICAgICAgY3JsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENybEN0eC0+cGJDcmxFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3JsQ3R4LT5jYkNybEVuY29kZWQpOworICAgICAgICBpZiAoIWNybCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ3JsQ3R4LT5kd0NlcnRFbmNvZGluZ1R5cGUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygyKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjcmwpOworICAgICAgICBjcmwgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMSwgZW5jKTsKKyAgICAgICAgZW5jID0gTlVMTDsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICB9CisgICAgaWYgKHBDcmxDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDUkxDb250ZXh0KHBDcmxDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY3JsKTsKKyAgICBQeV9YREVDUkVGKGVuYyk7CisgICAgUHlfWERFQ1JFRih0dXApOworCisgICAgaWYgKCFDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApKSB7CisgICAgICAgIC8qIFRoaXMgZXJyb3IgY2FzZSBtaWdodCBzaGFkb3cgYW5vdGhlciBleGNlcHRpb24uKi8KKyAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogX01TQ19WRVIgKi8KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuICovCiAKQEAgLTI2MDMsNiArMzcwMywxOCBAQAogICAgIHsiUkFORF9zdGF0dXMiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeVNTTF9SQU5EX3N0YXR1cywgTUVUSF9OT0FSR1MsCiAgICAgIFB5U1NMX1JBTkRfc3RhdHVzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIsIChQeUNGdW5jdGlvbilQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMsCisgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jfSwKKyNpZmRlZiBfTVNDX1ZFUgorICAgIHsiZW51bV9jZXJ0aWZpY2F0ZXMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY2VydGlmaWNhdGVzX2RvY30sCisgICAgeyJlbnVtX2NybHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jcmxzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NybHNfZG9jfSwKKyNlbmRpZgorICAgIHsidHh0Mm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF90eHQyb2JqLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF90eHQyb2JqX2RvY30sCisgICAgeyJuaWQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX25pZDJvYmosCisgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfbmlkMm9ial9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTI2NjQsNyArMzc3Niw3IEBACiAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkgewogICAgICAgICBfc3NsX2xvY2tzX2NvdW50ID0gQ1JZUFRPX251bV9sb2NrcygpOwogICAgICAgICBfc3NsX2xvY2tzID0gKFB5VGhyZWFkX3R5cGVfbG9jayAqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKICAgICAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBtZW1zZXQoX3NzbF9sb2NrcywgMCwKQEAgLTI2NzYsNyArMzc4OCw3IEBACiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgIGogPCBpOyAgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhfc3NsX2xvY2tzW2pdKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShfc3NsX2xvY2tzKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKF9zc2xfbG9ja3MpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODMwLDYgKzM5NDIsNjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9PUFRJT05BTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFUlRfUkVRVUlSRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX1JFUVVJUkVEKTsKKyAgICAvKiBDUkwgdmVyaWZpY2F0aW9uIGZvciB2ZXJpZmljYXRpb25fZmxhZ3MgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0RFRkFVTFQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfQ1JMX0NIRUNLX0xFQUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDS3xYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX1g1MDlfU1RSSUNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19YNTA5X1NUUklDVCk7CisKKyAgICAvKiBBbGVydCBEZXNjcmlwdGlvbnMgZnJvbSBzc2wuaCAqLworICAgIC8qIG5vdGUgUkVTRVJWRUQgY29uc3RhbnRzIG5vIGxvbmdlciBpbnRlbmRlZCBmb3IgdXNlIGhhdmUgYmVlbiByZW1vdmVkICovCisgICAgLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNiAqLworCisjZGVmaW5lIEFERF9BRF9DT05TVEFOVChzKSBcCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMRVJUX0RFU0NSSVBUSU9OXyIjcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BRF8jI3MpCisKKyAgICBBRERfQURfQ09OU1RBTlQoQ0xPU0VfTk9USUZZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX1JFQ09SRF9NQUMpOworICAgIEFERF9BRF9DT05TVEFOVChSRUNPUkRfT1ZFUkZMT1cpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPTVBSRVNTSU9OX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChIQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfUkVWT0tFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX0VYUElSRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTktOT1dOKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSUxMRUdBTF9QQVJBTUVURVIpOworICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX0NBKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQUNDRVNTX0RFTklFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09ERV9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ1JZUFRfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChQUk9UT0NPTF9WRVJTSU9OKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5TVUZGSUNJRU5UX1NFQ1VSSVRZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5URVJOQUxfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChVU0VSX0NBTkNFTExFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKE5PX1JFTkVHT1RJQVRJT04pOworICAgIC8qIE5vdCBhbGwgY29uc3RhbnRzIGFyZSBpbiBvbGQgT3BlblNTTCB2ZXJzaW9ucyAqLworI2lmZGVmIFNTTF9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT04KKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQorICAgIEFERF9BRF9DT05TVEFOVChVTlJFQ09HTklaRURfTkFNRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9QU0tfSURFTlRJVFkpOworI2VuZGlmCisKKyN1bmRlZiBBRERfQURfQ09OU1RBTlQKIAogICAgIC8qIHByb3RvY29sIHZlcnNpb25zICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgpAQCAtMjg0Miw2ICs0MDE0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMik7CisjZW5kaWYKIAogICAgIC8qIHByb3RvY29sIG9wdGlvbnMgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQUxMIiwKQEAgLTI4NDksNiArNDAyNywxMCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MiIsIFNTTF9PUF9OT19TU0x2Mik7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYzIiwgU1NMX09QX05PX1NTTHYzKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjEiLCBTU0xfT1BfTk9fVExTdjEpOworI2lmIEhBVkVfVExTdjFfMgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8xIiwgU1NMX09QX05PX1RMU3YxXzEpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8yIiwgU1NMX09QX05PX1RMU3YxXzIpOworI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX1NJTkdMRV9ESF9VU0UiLCBTU0xfT1BfU0lOR0xFX0RIX1VTRSk7CkBAIC0yODYwLDcgKzQwNDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9OT19DT01QUkVTU0lPTik7CiAjZW5kaWYKIAotI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyNpZiBIQVZFX1NOSQogICAgIHIgPSBQeV9UcnVlOwogI2Vsc2UKICAgICByID0gUHlfRmFsc2U7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdGF0LmMgYi9Nb2R1bGVzL19zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMWZhOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3N0YXQuYwpAQCAtMCwwICsxLDU2MyBAQAorLyogc3RhdC5oIGludGVyZmFjZQorICoKKyAqIFRoZSBtb2R1bGUgZGVmaW5lcyBhbGwgU19JRiosIFNfSSosIFVGXyosIFNGXyogYW5kIFNUXyogY29uc3RhbnRzIHRvCisgKiBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlcyBhcyB3ZWxsIGFzIGRlZmluZXMgU19JUyooKSBtYWNyb3MgaW4gb3JkZXIgdG8ga2VlcAorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgc3RhdC5weSBtb2R1bGUuCisgKgorICogTmV3IGNvbnN0YW50cyBhbmQgbWFjcm9zIHN1Y2ggYXMgU19JRkRPT1IgLyBTX0lTRE9PUigpIGFyZSBhbHdheXMgZGVmaW5lZAorICogYXMgaW50IDAuCisgKgorICogTk9URTogUE9TSVggb25seSBkZWZpbmVzIHRoZSB2YWx1ZXMgb2YgdGhlIFNfSSogcGVybWlzc2lvbiBiaXRzLgorICoKKyAqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1RZUEVTX0ggKi8KKworI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU1RBVF9IICovCisKKyNpZmRlZiBNU19XSU5ET1dTCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKKyNlbmRpZgorCisvKiBGcm9tIFB5dGhvbidzIHN0YXQucHkgKi8KKyNpZm5kZWYgU19JTU9ERQorIyAgZGVmaW5lIFNfSU1PREUgMDc3NzcKKyNlbmRpZgorCisvKiBTX0lGWFhYIGNvbnN0YW50cyAoZmlsZSB0eXBlcykKKyAqCisgKiBPbmx5IHRoZSBuYW1lcyBhcmUgZGVmaW5lZCBieSBQT1NJWCBidXQgbm90IHRoZWlyIHZhbHVlLiBBbGwgY29tbW9uIGZpbGUKKyAqIHR5cGVzIHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLCB0aG91Z2guCisgKgorICogcHlwb3J0LmggZ3VhcmFudGVlcyBTX0lGTVQsIFNfSUZESVIsIFNfSUZDSFIsIFNfSUZSRUcgYW5kIFNfSUZMTksKKyAqLworCisjaWZuZGVmIFNfSUZCTEsKKyMgIGRlZmluZSBTX0lGQkxLIDAwNjAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZJRk8KKyMgIGRlZmluZSBTX0lGSUZPIDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZTT0NLCisjICBkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRkRPT1IKKyMgIGRlZmluZSBTX0lGRE9PUiAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGUE9SVAorIyAgZGVmaW5lIFNfSUZQT1JUIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZXSFQKKyMgIGRlZmluZSBTX0lGV0hUIDAKKyNlbmRpZgorCisKKy8qIFNfSVNYWFgoKQorICogcHlwb3J0LmggZGVmaW5lcyBTX0lTRElSKCksIFNfSVNSRUcoKSBhbmQgU19JU0NIUigpCisgKi8KKworI2lmbmRlZiBTX0lTQkxLCisjICBkZWZpbmUgU19JU0JMSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkJMSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNGSUZPCisjICBkZWZpbmUgU19JU0ZJRk8obW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTE5LCisjICBkZWZpbmUgU19JU0xOSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNTT0NLCisjICBkZWZpbmUgU19JU1NPQ0sobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0RPT1IKKyMgIGRlZmluZSBTX0lTRE9PUihtb2RlKSAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTUE9SVAorIyAgZGVmaW5lIFNfSVNQT1JUKG1vZGUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNXSFQKKyMgIGRlZmluZSBTX0lTV0hUKG1vZGUpIDAKKyNlbmRpZgorCisKKy8qIFNfSSogZmlsZSBwZXJtaXNzaW9uCisgKgorICogVGhlIHBlcm1pc3Npb24gYml0IHZhbHVlIGFyZSBkZWZpbmVkIGJ5IFBPU0lYIHN0YW5kYXJkcy4KKyAqLworI2lmbmRlZiBTX0lTVUlECisjICBkZWZpbmUgU19JU1VJRCAwNDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU0dJRAorIyAgZGVmaW5lIFNfSVNHSUQgMDIwMDAKKyNlbmRpZgorCisvKiB3aGF0IGlzIFNfRU5GTVQ/ICovCisjaWZuZGVmIFNfRU5GTVQKKyMgIGRlZmluZSBTX0VORk1UIFNfSVNHSUQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNWVFgKKyMgIGRlZmluZSBTX0lTVlRYIDAxMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSRUFECisjICBkZWZpbmUgU19JUkVBRCAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1JJVEUKKyMgIGRlZmluZSBTX0lXUklURSAwMDIwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRVhFQworIyAgZGVmaW5lIFNfSUVYRUMgMDAxMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWFUKKyMgIGRlZmluZSBTX0lSV1hVIDAwNzAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSVVNSCisjICBkZWZpbmUgU19JUlVTUiAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1VTUgorIyAgZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhVU1IKKyMgIGRlZmluZSBTX0lYVVNSIDAwMTAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hHCisjICBkZWZpbmUgU19JUldYRyAwMDA3MAorI2VuZGlmCisKKyNpZm5kZWYgU19JUkdSUAorIyAgZGVmaW5lIFNfSVJHUlAgMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdHUlAKKyMgIGRlZmluZSBTX0lXR1JQIDAwMDIwCisjZW5kaWYKKworI2lmbmRlZiBTX0lYR1JQCisjICBkZWZpbmUgU19JWEdSUCAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYTworIyAgZGVmaW5lIFNfSVJXWE8gMDAwMDcKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJPVEgKKyMgIGRlZmluZSBTX0lST1RIIDAwMDA0CisjZW5kaWYKKworI2lmbmRlZiBTX0lXT1RICisjICBkZWZpbmUgU19JV09USCAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyAgZGVmaW5lIFNfSVhPVEggMDAwMDEKKyNlbmRpZgorCisKKy8qIE5hbWVzIGZvciBmaWxlIGZsYWdzICovCisjaWZuZGVmIFVGX05PRFVNUAorIyAgZGVmaW5lIFVGX05PRFVNUCAweDAwMDAwMDAxCisjZW5kaWYKKworI2lmbmRlZiBVRl9JTU1VVEFCTEUKKyMgIGRlZmluZSBVRl9JTU1VVEFCTEUgMHgwMDAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgVUZfQVBQRU5ECisjICBkZWZpbmUgVUZfQVBQRU5EIDB4MDAwMDAwMDQKKyNlbmRpZgorCisjaWZuZGVmIFVGX09QQVFVRQorIyAgZGVmaW5lIFVGX09QQVFVRSAweDAwMDAwMDA4CisjZW5kaWYKKworI2lmbmRlZiBVRl9OT1VOTElOSworIyAgZGVmaW5lIFVGX05PVU5MSU5LIDB4MDAwMDAwMTAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0NPTVBSRVNTRUQKKyMgIGRlZmluZSBVRl9DT01QUkVTU0VEIDB4MDAwMDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0hJRERFTgorIyAgZGVmaW5lIFVGX0hJRERFTiAweDAwMDA4MDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUkNISVZFRAorIyAgZGVmaW5lIFNGX0FSQ0hJVkVEIDB4MDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0lNTVVUQUJMRQorIyAgZGVmaW5lIFNGX0lNTVVUQUJMRSAweDAwMDIwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUFBFTkQKKyMgIGRlZmluZSBTRl9BUFBFTkQgMHgwMDA0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfTk9VTkxJTksKKyMgIGRlZmluZSBTRl9OT1VOTElOSyAweDAwMTAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9TTkFQU0hPVAorIyAgZGVmaW5lIFNGX1NOQVBTSE9UIDB4MDAyMDAwMDAKKyNlbmRpZgorCitzdGF0aWMgbW9kZV90CitfUHlMb25nX0FzTW9kZV90KFB5T2JqZWN0ICpvcCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworICAgIG1vZGVfdCBtb2RlOworCisgICAgdmFsdWUgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob3ApOworICAgIGlmICgodmFsdWUgPT0gKHVuc2lnbmVkIGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAobW9kZV90KS0xOworCisgICAgbW9kZSA9IChtb2RlX3QpdmFsdWU7CisgICAgaWYgKCh1bnNpZ25lZCBsb25nKW1vZGUgIT0gdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtb2RlIG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gKG1vZGVfdCktMTsKKyAgICB9CisgICAgcmV0dXJuIG1vZGU7Cit9CisKKworI2RlZmluZSBzdGF0X1NfSVNGVU5DKGlzZnVuYywgZG9jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRfICMjaXNmdW5jIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKSAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgICAgICAgICAgIFwKKyAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGlzZnVuYyhtb2RlKSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQeURvY19TVFJWQVIoc3RhdF8gIyMgaXNmdW5jICMjIF9kb2MsIGRvYykKKworc3RhdF9TX0lTRlVOQyhTX0lTRElSLAorICAgICJTX0lTRElSKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBkaXJlY3RvcnkuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0NIUiwKKyAgICAiU19JU0NIUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0JMSywKKyAgICAiU19JU0JMSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUkVHLAorICAgICJTX0lTUkVHKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSByZWd1bGFyIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0ZJRk8sCisgICAgIlNfSVNGSUZPKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBGSUZPIChuYW1lZCBwaXBlKS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTTE5LLAorICAgICJTX0lTTE5LKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBzeW1ib2xpYyBsaW5rLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNTT0NLLAorICAgICJTX0lTU09DSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgc29ja2V0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNET09SLAorICAgICJTX0lTRE9PUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgZG9vci4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUE9SVCwKKyAgICAiU19JU1BPUlQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNXSFQsCisgICAgIlNfSVNXSFQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHdoaXRlb3V0LiIpOworCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSU1PREVfZG9jLAorIlJldHVybiB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSdzIG1vZGUgdGhhdCBjYW4gYmUgc2V0IGJ5IG9zLmNobW9kKCkuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X1NfSU1PREUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSU1PREUpOworfQorCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSUZNVF9kb2MsCisiUmV0dXJuIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlJ3MgbW9kZSB0aGF0IGRlc2NyaWJlcyB0aGUgZmlsZSB0eXBlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9TX0lGTVQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSUZNVCk7Cit9CisKKy8qIGZpbGUgdHlwZSBjaGFycyBhY2NvcmRpbmcgdG8KKyAgIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQ19Qcm9ncmFtbWluZy9QT1NJWF9SZWZlcmVuY2Uvc3lzL3N0YXQuaCAqLworCitzdGF0aWMgY2hhcgorZmlsZXR5cGUobW9kZV90IG1vZGUpCit7CisgICAgLyogY29tbW9uIGNhc2VzIGZpcnN0ICovCisgICAgaWYgKFNfSVNSRUcobW9kZSkpICByZXR1cm4gJy0nOworICAgIGlmIChTX0lTRElSKG1vZGUpKSAgcmV0dXJuICdkJzsKKyAgICBpZiAoU19JU0xOSyhtb2RlKSkgIHJldHVybiAnbCc7CisgICAgLyogc3BlY2lhbCBmaWxlcyAqLworICAgIGlmIChTX0lTQkxLKG1vZGUpKSAgcmV0dXJuICdiJzsKKyAgICBpZiAoU19JU0NIUihtb2RlKSkgIHJldHVybiAnYyc7CisgICAgaWYgKFNfSVNGSUZPKG1vZGUpKSByZXR1cm4gJ3AnOworICAgIGlmIChTX0lTU09DSyhtb2RlKSkgcmV0dXJuICdzJzsKKyAgICAvKiBub24tc3RhbmRhcmQgdHlwZXMgKi8KKyAgICBpZiAoU19JU0RPT1IobW9kZSkpIHJldHVybiAnRCc7CisgICAgaWYgKFNfSVNQT1JUKG1vZGUpKSByZXR1cm4gJ1AnOworICAgIGlmIChTX0lTV0hUKG1vZGUpKSAgcmV0dXJuICd3JzsKKyAgICAvKiB1bmtub3duICovCisgICAgcmV0dXJuICc/JzsKK30KKworc3RhdGljIHZvaWQKK2ZpbGVwZXJtKG1vZGVfdCBtb2RlLCBjaGFyICpidWYpCit7CisgICAgYnVmWzBdID0gbW9kZSAmIFNfSVJVU1IgPyAncicgOiAnLSc7CisgICAgYnVmWzFdID0gbW9kZSAmIFNfSVdVU1IgPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTVUlEKSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3MnIDogJ1MnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3gnIDogJy0nOworICAgIH0KKyAgICBidWZbM10gPSBtb2RlICYgU19JUkdSUCA/ICdyJyA6ICctJzsKKyAgICBidWZbNF0gPSBtb2RlICYgU19JV0dSUCA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNHSUQpIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAncycgOiAnUyc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAneCcgOiAnLSc7CisgICAgfQorICAgIGJ1Zls2XSA9IG1vZGUgJiBTX0lST1RIID8gJ3InIDogJy0nOworICAgIGJ1Zls3XSA9IG1vZGUgJiBTX0lXT1RIID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU1ZUWCkgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd0JyA6ICdUJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd4JyA6ICctJzsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUihzdGF0X2ZpbGVtb2RlX2RvYywKKyJDb252ZXJ0IGEgZmlsZSdzIG1vZGUgdG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0gJy1yd3hyd3hyd3gnIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X2ZpbGVtb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgY2hhciBidWZbMTBdOworICAgIG1vZGVfdCBtb2RlOworCisgICAgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJ1ZlswXSA9IGZpbGV0eXBlKG1vZGUpOworICAgIGZpbGVwZXJtKG1vZGUsICZidWZbMV0pOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCAxMCk7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIHN0YXRfbWV0aG9kc1tdID0geworICAgIHsiU19JU0RJUiIsICAgICAgICAgc3RhdF9TX0lTRElSLCAgTUVUSF9PLCBzdGF0X1NfSVNESVJfZG9jfSwKKyAgICB7IlNfSVNDSFIiLCAgICAgICAgIHN0YXRfU19JU0NIUiwgIE1FVEhfTywgc3RhdF9TX0lTQ0hSX2RvY30sCisgICAgeyJTX0lTQkxLIiwgICAgICAgICBzdGF0X1NfSVNCTEssICBNRVRIX08sIHN0YXRfU19JU0JMS19kb2N9LAorICAgIHsiU19JU1JFRyIsICAgICAgICAgc3RhdF9TX0lTUkVHLCAgTUVUSF9PLCBzdGF0X1NfSVNSRUdfZG9jfSwKKyAgICB7IlNfSVNGSUZPIiwgICAgICAgIHN0YXRfU19JU0ZJRk8sIE1FVEhfTywgc3RhdF9TX0lTRklGT19kb2N9LAorICAgIHsiU19JU0xOSyIsICAgICAgICAgc3RhdF9TX0lTTE5LLCAgTUVUSF9PLCBzdGF0X1NfSVNMTktfZG9jfSwKKyAgICB7IlNfSVNTT0NLIiwgICAgICAgIHN0YXRfU19JU1NPQ0ssIE1FVEhfTywgc3RhdF9TX0lTU09DS19kb2N9LAorICAgIHsiU19JU0RPT1IiLCAgICAgICAgc3RhdF9TX0lTRE9PUiwgTUVUSF9PLCBzdGF0X1NfSVNET09SX2RvY30sCisgICAgeyJTX0lTUE9SVCIsICAgICAgICBzdGF0X1NfSVNQT1JULCBNRVRIX08sIHN0YXRfU19JU1BPUlRfZG9jfSwKKyAgICB7IlNfSVNXSFQiLCAgICAgICAgIHN0YXRfU19JU1dIVCwgIE1FVEhfTywgc3RhdF9TX0lTV0hUX2RvY30sCisgICAgeyJTX0lNT0RFIiwgICAgICAgICBzdGF0X1NfSU1PREUsICBNRVRIX08sIHN0YXRfU19JTU9ERV9kb2N9LAorICAgIHsiU19JRk1UIiwgICAgICAgICAgc3RhdF9TX0lGTVQsICAgTUVUSF9PLCBzdGF0X1NfSUZNVF9kb2N9LAorICAgIHsiZmlsZW1vZGUiLCAgICAgICAgc3RhdF9maWxlbW9kZSwgTUVUSF9PLCBzdGF0X2ZpbGVtb2RlX2RvY30sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiU19JRk1UXzogZmlsZSB0eXBlIGJpdHNcblwKK1NfSUZESVI6IGRpcmVjdG9yeVxuXAorU19JRkNIUjogY2hhcmFjdGVyIGRldmljZVxuXAorU19JRkJMSzogYmxvY2sgZGV2aWNlXG5cCitTX0lGUkVHOiByZWd1bGFyIGZpbGVcblwKK1NfSUZJRk86IGZpZm8gKG5hbWVkIHBpcGUpXG5cCitTX0lGTE5LOiBzeW1ib2xpYyBsaW5rXG5cCitTX0lGU09DSzogc29ja2V0IGZpbGVcblwKK1NfSUZET09SOiBkb29yXG5cCitTX0lGUE9SVDogZXZlbnQgcG9ydFxuXAorU19JRldIVDogd2hpdGVvdXRcblwKK1xuIgorCisiU19JU1VJRDogc2V0IFVJRCBiaXRcblwKK1NfSVNHSUQ6IHNldCBHSUQgYml0XG5cCitTX0VORk1UOiBmaWxlIGxvY2tpbmcgZW5mb3JjZW1lbnRcblwKK1NfSVNWVFg6IHN0aWNreSBiaXRcblwKK1NfSVJFQUQ6IFVuaXggVjcgc3lub255bSBmb3IgU19JUlVTUlxuXAorU19JV1JJVEU6IFVuaXggVjcgc3lub255bSBmb3IgU19JV1VTUlxuXAorU19JRVhFQzogVW5peCBWNyBzeW5vbnltIGZvciBTX0lYVVNSXG5cCitTX0lSV1hVOiBtYXNrIGZvciBvd25lciBwZXJtaXNzaW9uc1xuXAorU19JUlVTUjogcmVhZCBieSBvd25lclxuXAorU19JV1VTUjogd3JpdGUgYnkgb3duZXJcblwKK1NfSVhVU1I6IGV4ZWN1dGUgYnkgb3duZXJcblwKK1NfSVJXWEc6IG1hc2sgZm9yIGdyb3VwIHBlcm1pc3Npb25zXG5cCitTX0lSR1JQOiByZWFkIGJ5IGdyb3VwXG5cCitTX0lXR1JQOiB3cml0ZSBieSBncm91cFxuXAorU19JWEdSUDogZXhlY3V0ZSBieSBncm91cFxuXAorU19JUldYTzogbWFzayBmb3Igb3RoZXJzIChub3QgaW4gZ3JvdXApIHBlcm1pc3Npb25zXG5cCitTX0lST1RIOiByZWFkIGJ5IG90aGVyc1xuXAorU19JV09USDogd3JpdGUgYnkgb3RoZXJzXG5cCitTX0lYT1RIOiBleGVjdXRlIGJ5IG90aGVyc1xuXAorXG4iCisKKyJVRl9OT0RVTVA6IGRvIG5vdCBkdW1wIGZpbGVcblwKK1VGX0lNTVVUQUJMRTogZmlsZSBtYXkgbm90IGJlIGNoYW5nZWRcblwKK1VGX0FQUEVORDogZmlsZSBtYXkgb25seSBiZSBhcHBlbmRlZCB0b1xuXAorVUZfT1BBUVVFOiBkaXJlY3RvcnkgaXMgb3BhcXVlIHdoZW4gdmlld2VkIHRocm91Z2ggYSB1bmlvbiBzdGFja1xuXAorVUZfTk9VTkxJTks6IGZpbGUgbWF5IG5vdCBiZSByZW5hbWVkIG9yIGRlbGV0ZWRcblwKK1VGX0NPTVBSRVNTRUQ6IE9TIFg6IGZpbGUgaXMgaGZzLWNvbXByZXNzZWRcblwKK1VGX0hJRERFTjogT1MgWDogZmlsZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuXAorU0ZfQVJDSElWRUQ6IGZpbGUgbWF5IGJlIGFyY2hpdmVkXG5cCitTRl9JTU1VVEFCTEU6IGZpbGUgbWF5IG5vdCBiZSBjaGFuZ2VkXG5cCitTRl9BUFBFTkQ6IGZpbGUgbWF5IG9ubHkgYmUgYXBwZW5kZWQgdG9cblwKK1NGX05PVU5MSU5LOiBmaWxlIG1heSBub3QgYmUgcmVuYW1lZCBvciBkZWxldGVkXG5cCitTRl9TTkFQU0hPVDogZmlsZSBpcyBhIHNuYXBzaG90IGZpbGVcblwKK1xuIgorCisiU1RfTU9ERVxuXAorU1RfSU5PXG5cCitTVF9ERVZcblwKK1NUX05MSU5LXG5cCitTVF9VSURcblwKK1NUX0dJRFxuXAorU1RfU0laRVxuXAorU1RfQVRJTUVcblwKK1NUX01USU1FXG5cCitTVF9DVElNRVxuXAorIik7CisKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBzdGF0bW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3N0YXQiLAorICAgIG1vZHVsZV9kb2MsCisgICAgLTEsCisgICAgc3RhdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3N0YXQodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzdGF0bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRElSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZDSFIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkJMSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUkVHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZJRk8pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkxOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGU09DSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRE9PUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUE9SVCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGV0hUKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU1VJRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTR0lEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNWVFgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19FTkZNVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJFQUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV1JJVEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRVhFQykpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWFUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUlVTUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXVVNSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhVU1IpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJHUlApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV0dSUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYR1JQKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYTykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lST1RIKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdPVEgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWE9USCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX05PRFVNUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX09QQVFVRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9OT1VOTElOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9DT01QUkVTU0VEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0hJRERFTikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9BUkNISVZFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PVU5MSU5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX1NOQVBTSE9UKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01PREUiLCAwKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9JTk8iLCAxKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9ERVYiLCAyKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9OTElOSyIsIDMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1VJRCIsIDQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0dJRCIsIDUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1NJWkUiLCA2KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9BVElNRSIsIDcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01USU1FIiwgOCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQ1RJTUUiLCA5KSkgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0cnVjdC5jIGIvTW9kdWxlcy9fc3RydWN0LmMKaW5kZXggYTI0ODc1My4uMWRlOTRlNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3RydWN0LmMKKysrIGIvTW9kdWxlcy9fc3RydWN0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICAgICBjb25zdCBzdHJ1Y3QgX2Zvcm1hdGRlZiAqZm10ZGVmOwogICAgIFB5X3NzaXplX3Qgb2Zmc2V0OwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHJlcGVhdDsKIH0gZm9ybWF0Y29kZTsKIAogLyogU3RydWN0IG9iamVjdCBpbnRlcmZhY2UgKi8KQEAgLTExOTksMTIgKzEyMDAsMTEgQEAKICAgICBjYXNlICchJzogLyogTmV0d29yayBieXRlIG9yZGVyIGlzIGJpZy1lbmRpYW4gKi8KICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKICAgICBjYXNlICc9JzogeyAvKiBIb3N0IGJ5dGUgb3JkZXIgLS0gZGlmZmVyZW50IGZyb20gbmF0aXZlIGluIGFsaWdubWVudCEgKi8KLSAgICAgICAgaW50IG4gPSAxOwotICAgICAgICBjaGFyICpwID0gKGNoYXIgKikgJm47Ci0gICAgICAgIGlmICgqcCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIGxpbGVuZGlhbl90YWJsZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIHJldHVybiBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOworI2VuZGlmCiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIC0tKnBmbXQ7IC8qIEJhY2sgb3V0IG9mIHBvaW50ZXIgaW5jcmVtZW50ICovCkBAIC0xMjQ4LDYgKzEyNDgsOSBAQAogICAgIHJldHVybiBzaXplOwogfQogCisvKgorICogU3RydWN0IG9iamVjdCBpbXBsZW1lbnRhdGlvbi4KKyAqLwogCiAvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBmb3JtYXQgc3RyaW5nICovCiAKQEAgLTEyNjEsNyArMTI2NCw3IEBACiAgICAgY29uc3QgY2hhciAqczsKICAgICBjb25zdCBjaGFyICpmbXQ7CiAgICAgY2hhciBjOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBudW0sIGl0ZW1zaXplOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBuY29kZXMsIG51bSwgaXRlbXNpemU7CiAKICAgICBmbXQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5zX2Zvcm1hdCk7CiAKQEAgLTEyNzAsNiArMTI3Myw3IEBACiAgICAgcyA9IGZtdDsKICAgICBzaXplID0gMDsKICAgICBsZW4gPSAwOworICAgIG5jb2RlcyA9IDA7CiAgICAgd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgewogICAgICAgICBpZiAoUHlfSVNTUEFDRShQeV9DSEFSTUFTSyhjKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOTksOSArMTMwMyw5IEBACiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgICBjYXNlICdzJzogLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlICdwJzogbGVuKys7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6IGxlbisrOyBuY29kZXMrKzsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICd4JzogYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBsZW4gKz0gbnVtOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGxlbiArPSBudW07IGlmIChudW0pIG5jb2RlcysrOyBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGl0ZW1zaXplID0gZS0+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+c2l6ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2OSwxNCArMTkxOSwxOCBAQAogc19zaXplb2YoUHlTdHJ1Y3RPYmplY3QgKnNlbGYsIHZvaWQgKnVudXNlZCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgZm9ybWF0Y29kZSAqY29kZTsKIAotICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpICogKHNlbGYtPnNfbGVuICsgMSk7CisgICAgc2l6ZSA9IHNpemVvZihQeVN0cnVjdE9iamVjdCkgKyBzaXplb2YoZm9ybWF0Y29kZSk7CisgICAgZm9yIChjb2RlID0gc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoZm9ybWF0Y29kZSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKIH0KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBzX21ldGhvZHNbXSA9IHsKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIHNfaXRlcl91bnBhY2ssICBNRVRIX08sIHNfaXRlcl91bnBhY2tfX2RvY19ffSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHNfcGFjaywgICAgICAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19fZG9jX199LAogICAgIHsicGFja19pbnRvIiwgICAgICAgc19wYWNrX2ludG8sICAgIE1FVEhfVkFSQVJHUywgc19wYWNrX2ludG9fX2RvY19ffSwKICAgICB7InVucGFjayIsICAgICAgICAgIHNfdW5wYWNrLCAgICAgICBNRVRIX08sIHNfdW5wYWNrX19kb2NfX30sCkBAIC0yMDI2LDkgKzIxODAsMzQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQeURvY19TVFJWQVIoaXRlcl91bnBhY2tfZG9jLAorIml0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKSAtPiBpdGVyYXRvcih2MSwgdjIsIC4uLilcblwKK1xuXAorUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHR1cGxlcyB1bnBhY2tlZCBmcm9tIHRoZSBnaXZlbiBieXRlc1xuXAorc291cmNlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IHN0cmluZywgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2ZcblwKK3VucGFja19mcm9tKCkuICBSZXF1aXJlcyB0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGVcblwKK2Zvcm1hdCBzdHJ1Y3Qgc2l6ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqc19vYmplY3QsICpmbXQsICppbnB1dCwgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086aXRlcl91bnBhY2siLCAmZm10LCAmaW5wdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNfb2JqZWN0ID0gY2FjaGVfc3RydWN0KGZtdCk7CisgICAgaWYgKHNfb2JqZWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IHNfaXRlcl91bnBhY2soc19vYmplY3QsIGlucHV0KTsKKyAgICBQeV9ERUNSRUYoc19vYmplY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0gewogICAgIHsiX2NsZWFyY2FjaGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWNsZWFyY2FjaGUsICAgICAgICBNRVRIX05PQVJHUywgICAgY2xlYXJjYWNoZV9kb2N9LAogICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgY2FsY3NpemVfZG9jfSwKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIGl0ZXJfdW5wYWNrLCAgICBNRVRIX1ZBUkFSR1MsICAgaXRlcl91bnBhY2tfZG9jfSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHBhY2ssICAgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19kb2N9LAogICAgIHsicGFja19pbnRvIiwgICAgICAgcGFja19pbnRvLCAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2ludG9fZG9jfSwKICAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LApAQCAtMjA5OCwxMyArMjI3NywxMyBAQAogCiAgICAgLyogQ2hlY2sgZW5kaWFuIGFuZCBzd2FwIGluIGZhc3RlciBmdW5jdGlvbnMgKi8KICAgICB7Ci0gICAgICAgIGludCBvbmUgPSAxOwogICAgICAgICBmb3JtYXRkZWYgKm5hdGl2ZSA9IG5hdGl2ZV90YWJsZTsKICAgICAgICAgZm9ybWF0ZGVmICpvdGhlciwgKnB0cjsKLSAgICAgICAgaWYgKChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lKQotICAgICAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG90aGVyID0gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgICAgICAvKiBTY2FuIHRocm91Z2ggdGhlIG5hdGl2ZSB0YWJsZSwgZmluZCBhIG1hdGNoaW5nCiAgICAgICAgICAgIGVudHJ5IGluIHRoZSBlbmRpYW4gdGFibGUgYW5kIHN3YXAgaW4gdGhlCiAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwppbmRleCAzMTY2NjZlLi4wYzZlZjE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKKysrIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogICAgICAgICBpZiAoaW5pdF9zbGljZShiYXNlLCBrZXksIDApIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyX29jY3VycmVkOwogICAgIH0KLSAgICBlbHNlIGlmIFB5VHVwbGVfQ2hlY2soa2V5KSB7CisgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhrZXkpKSB7CiAgICAgICAgIC8qIG11bHRpLWRpbWVuc2lvbmFsIHNsaWNlICovCiAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSA9IGtleTsKICAgICAgICAgUHlfc3NpemVfdCBpLCBuOwpAQCAtMjgzNywzNiArMjgzNywzNiBAQAogICAgIGlmIChzaW1wbGVfZm9ybWF0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX01BWF9ORElNIiwgTkRfTUFYX05ESU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9WQVJFWFBPUlQiLCBORF9WQVJFWFBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9XUklUQUJMRSIsIE5EX1dSSVRBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfRk9SVFJBTiIsIE5EX0ZPUlRSQU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9TQ0FMQVIiLCBORF9TQ0FMQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9QSUwiLCBORF9QSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9HRVRCVUZfRkFJTCIsIE5EX0dFVEJVRl9GQUlMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX1VOREVGSU5FRCIsIE5EX0dFVEJVRl9VTkRFRklORUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9SRURJUkVDVCIsIE5EX1JFRElSRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9NQVhfTkRJTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfVkFSRVhQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfRk9SVFJBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfU0NBTEFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9QSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0dFVEJVRl9GQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9SRURJUkVDVCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU0lNUExFIiwgUHlCVUZfU0lNUExFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEFCTEUiLCBQeUJVRl9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZPUk1BVCIsIFB5QlVGX0ZPUk1BVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX05EIiwgUHlCVUZfTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVTIiwgUHlCVUZfU1RSSURFUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0lORElSRUNUIiwgUHlCVUZfSU5ESVJFQ1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DX0NPTlRJR1VPVVMiLCBQeUJVRl9DX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GX0NPTlRJR1VPVVMiLCBQeUJVRl9GX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9BTllfQ09OVElHVU9VUyIsIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTCIsIFB5QlVGX0ZVTEwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GVUxMX1JPIiwgUHlCVUZfRlVMTF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFMiLCBQeUJVRl9SRUNPUkRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVDT1JEU19STyIsIFB5QlVGX1JFQ09SRFNfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEIiwgUHlCVUZfU1RSSURFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERURfUk8iLCBQeUJVRl9TVFJJREVEX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHIiwgUHlCVUZfQ09OVElHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHX1JPIiwgUHlCVUZfQ09OVElHX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TSU1QTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1dSSVRBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GT1JNQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX05EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9JTkRJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ19DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NPTlRJR19STyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVBRCIsIFB5QlVGX1JFQUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9XUklURSIsIFB5QlVGX1dSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklURSk7CiAKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCmluZGV4IDdkZjNlMTkuLjk2NjJlYjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwpAQCAtNjUsNiArNjUsNjkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgordGVzdF9zaXplb2ZfY190eXBlcyhQeU9iamVjdCAqc2VsZikKK3sKKyNkZWZpbmUgQ0hFQ0tfU0laRU9GKFRZUEUsIEVYUEVDVEVEKSAgICAgICAgIFwKKyAgICBpZiAoRVhQRUNURUQgIT0gc2l6ZW9mKFRZUEUpKSAgeyAgICAgICAgIFwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJzaXplb2YoJXMpID0gJXUgaW5zdGVhZCBvZiAldSIsIFwKKyAgICAgICAgICAgICNUWVBFLCBzaXplb2YoVFlQRSksIEVYUEVDVEVEKTsgIFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIElTX1NJR05FRChUWVBFKSAoKChUWVBFKS0xKSA8IChUWVBFKTApCisjZGVmaW5lIENIRUNLX1NJR05ORVNTKFRZUEUsIFNJR05FRCkgICAgICAgICBcCisgICAgaWYgKElTX1NJR05FRChUWVBFKSAhPSBTSUdORUQpIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJXMgc2lnbm5lc3MgaXMsIGluc3RlYWQgb2YgJWkiLCAgXAorICAgICAgICAgICAgI1RZUEUsIElTX1NJR05FRChUWVBFKSwgU0lHTkVEKTsgXAorICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilOVUxMOyAgICAgICAgICAgICAgXAorICAgIH0KKworICAgIC8qIGludGVnZXIgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTMSwgMSk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzIsIDIpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1M0LCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MxLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MyLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1M0LCAwKTsKKyNpZmRlZiBIQVZFX0lOVDMyX1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UMzJfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQzMl9ULCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UMzJfVCwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVDY0X1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UNjRfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQ2NF9ULCA4KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UNjRfVCwgMCk7CisjZW5kaWYKKworICAgIC8qIHBvaW50ZXIvc2l6ZSB0eXBlcyAqLworICAgIENIRUNLX1NJWkVPRihzaXplX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhzaXplX3QsIDApOworICAgIENIRUNLX1NJWkVPRihQeV9zc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfc3NpemVfdCwgMSk7CisKKyAgICBDSEVDS19TSVpFT0YoUHlfdWludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfdWludHB0cl90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfaW50cHRyX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9pbnRwdHJfdCwgMSk7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7CisKKyN1bmRlZiBJU19TSUdORUQKKyN1bmRlZiBDSEVDS19TSUdORVNTCisjdW5kZWYgQ0hFQ0tfU0laRU9GCit9CisKKworc3RhdGljIFB5T2JqZWN0KgogdGVzdF9saXN0X2FwaShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCogbGlzdDsKQEAgLTE0MjQsNiArMTQ4NywyMCBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTFwiXFxVMDAxMTAwMDBcIiwgMSkgZGlkbid0IGZhaWwiKTsKKworICAgIHdpZGUgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMSk7CisgICAgaWYgKHdpZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlVbmljb2RlX0FTX1VOSUNPREUod2lkZSlbMF0gPSBpbnZhbGlkWzBdOworICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHdpZGUpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX1JlYWR5KCkgZGlkbid0IGZhaWwiKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjQ3NywxNiArMjU1NCwzMzYgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBfUHlMb25nX0Zyb21UaW1lX3Qoc2VjKSwgbnNlYyk7CiB9CiAKK3N0YXRpYyB2b2lkCitzbG90X3RwX2RlbChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihfX3RwX2RlbF9fKTsKKyAgICBQeU9iamVjdCAqZGVsLCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KKyAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOworICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogRXhlY3V0ZSBfX2RlbF9fIG1ldGhvZCwgaWYgYW55LiAqLworICAgIGRlbCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHNlbGYsICZQeUlkX19fdHBfZGVsX18pOworICAgIGlmIChkZWwgIT0gTlVMTCkgeworICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChkZWwsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZGVsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIFB5X0RFQ1JFRihkZWwpOworICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAorICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOworICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQorICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgorICAgICAqIG5ldmVyIGhhcHBlbmVkLgorICAgICAqLworICAgIHsKKyAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7CisgICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKKyAgICB9CisgICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKKyAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KKyAgICBfUHlfREVDX1JFRlRPVEFMOworICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCisgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICogdW5kb25lLgorICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7CisjZW5kaWYKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpdGhfdHBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5VHlwZU9iamVjdCAqdHA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86d2l0aF90cF9kZWwiLCAmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHAgPSAoUHlUeXBlT2JqZWN0ICopIG9iajsKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhvYmopIHx8ICFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IRUFQVFlQRSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJoZWFwIHR5cGUgZXhwZWN0ZWQsIGdvdCAlUiIsIG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0cC0+dHBfZGVsID0gc2xvdF90cF9kZWw7CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK190ZXN0X2luY3JlZihQeU9iamVjdCAqb2IpCit7CisgICAgUHlfSU5DUkVGKG9iKTsKKyAgICByZXR1cm4gb2I7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfWElOQ1JFRihfdGVzdF9pbmNyZWYob2JqKSk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeV9YREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kZWNyZWZfQVBJKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X0luY1JlZihvYik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX2FsbG9jMChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB2b2lkICpwdHI7CisKKyAgICBwdHIgPSBQeU1lbV9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU1lbV9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB0cik7CisKKyAgICBwdHIgPSBQeU9iamVjdF9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU9iamVjdF9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU9iamVjdF9GcmVlKHB0cik7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworCisgICAgc2l6ZV90IG1hbGxvY19zaXplOworICAgIHZvaWQgKnJlYWxsb2NfcHRyOworICAgIHNpemVfdCByZWFsbG9jX25ld19zaXplOworICAgIHZvaWQgKmZyZWVfcHRyOworfSBhbGxvY19ob29rX3Q7CisKK3N0YXRpYyB2b2lkKiBob29rX21hbGxvYyAodm9pZCogY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPm1hbGxvY19zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gaG9vay0+YWxsb2MubWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkKiBob29rX3JlYWxsb2MgKHZvaWQqIGN0eCwgdm9pZCogcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5yZWFsbG9jX3B0ciA9IHB0cjsKKyAgICBob29rLT5yZWFsbG9jX25ld19zaXplID0gbmV3X3NpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLnJlYWxsb2MoaG9vay0+YWxsb2MuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKworc3RhdGljIHZvaWQgaG9va19mcmVlICh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPmZyZWVfcHRyID0gcHRyOworICAgIGhvb2stPmFsbG9jLmZyZWUoaG9vay0+YWxsb2MuY3R4LCBwdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9zZXRhbGxvY2F0b3JzKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbikKK3sKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICplcnJvcl9tc2c7CisgICAgYWxsb2NfaG9va190IGhvb2s7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisgICAgc2l6ZV90IHNpemUsIHNpemUyOworICAgIHZvaWQgKnB0ciwgKnB0cjI7CisKKyAgICBob29rLm1hbGxvY19zaXplID0gMDsKKyAgICBob29rLnJlYWxsb2NfcHRyID0gTlVMTDsKKyAgICBob29rLnJlYWxsb2NfbmV3X3NpemUgPSAwOworICAgIGhvb2suZnJlZV9wdHIgPSBOVUxMOworCisgICAgYWxsb2MuY3R4ID0gJmhvb2s7CisgICAgYWxsb2MubWFsbG9jID0gJmhvb2tfbWFsbG9jOworICAgIGFsbG9jLnJlYWxsb2MgPSAmaG9va19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSAmaG9va19mcmVlOworICAgIFB5TWVtX0dldEFsbG9jYXRvcihkb21haW4sICZob29rLmFsbG9jKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmYWxsb2MpOworCisgICAgc2l6ZSA9IDQyOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0ciA9IFB5TWVtX01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBwdHIgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0ciA9IE5VTEw7IGJyZWFrOworICAgIH0KKworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5tYWxsb2Nfc2l6ZSAhPSBzaXplKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJtYWxsb2MgaW52YWxpZCBzaXplIjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHNpemUyID0gMjAwOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyMiA9IFB5TWVtX1Jhd1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogcHRyMiA9IFB5TWVtX1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyMiA9IFB5T2JqZWN0X1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0cjIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyMiA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5yZWFsbG9jX3B0ciAhPSBwdHIKKyAgICAgICAgfHwgaG9vay5yZWFsbG9jX25ld19zaXplICE9IHNpemUyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGludmFsaWQgcGFyYW1ldGVycyI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IFB5TWVtX1Jhd0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogUHlNZW1fRnJlZShwdHIyKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBQeU9iamVjdF9GcmVlKHB0cjIpOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaG9vay5mcmVlX3B0ciAhPSBwdHIyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJmcmVlIGludmFsaWQgcG9pbnRlciI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmVzID0gUHlfTm9uZTsKKyAgICBnb3RvIGZpbmFsbHk7CisKK2ZhaWw6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgZXJyb3JfbXNnKTsKKworZmluYWxseToKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9SQVcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX01FTSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fT0JKKTsKK30KKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19lbXB0eSwKKyIiCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX25vX3NpZ25hdHVyZSwKKyJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSwKKyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSAoYm9vKVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZShzaWcpXG4iCisiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMocGFyYW1ldGVyKVxuIgorIlxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iCispOwogCiBzdGF0aWMgUHlNZXRob2REZWYgVGVzdE1ldGhvZHNbXSA9IHsKICAgICB7InJhaXNlX2V4Y2VwdGlvbiIsICAgICAgICAgcmFpc2VfZXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InJhaXNlX21lbW9yeWVycm9yIiwgICAoUHlDRnVuY3Rpb24pcmFpc2VfbWVtb3J5ZXJyb3IsICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2NvbmZpZyIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2NvbmZpZywgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3Rfc2l6ZW9mX2NfdHlwZXMiLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfc2l6ZW9mX2NfdHlwZXMsIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGF0ZXRpbWVfY2FwaSIsICB0ZXN0X2RhdGV0aW1lX2NhcGksICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xpc3RfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xpc3RfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGljdF9pdGVyYXRpb24iLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfZGljdF9pdGVyYXRpb24sTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UiLCAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSxNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfeGluY3JlZl9kb2VzbnRfbGVhayIsKFB5Q0Z1bmN0aW9uKXRlc3RfeGluY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayIsIChQeUNGdW5jdGlvbil0ZXN0X2luY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9kZWNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9kZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZGVjcmVmX0FQSSIsICAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZGVjcmVmX0FQSSwgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYW5kX292ZXJmbG93LAogICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXNfZG91YmxlIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXNfZG91YmxlLE1FVEhfTk9BUkdTfSwKQEAgLTI1NzQsNiArMjk3MSwzMiBAQAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1lX3QiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZV90LCAgTUVUSF9WQVJBUkdTfSwKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXZhbCIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1ldmFsLCAgTUVUSF9WQVJBUkdTfSwKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXNwZWMsICBNRVRIX1ZBUkFSR1N9LAorICAgIHsid2l0aF90cF9kZWwiLCAgICAgICAgICAgICB3aXRoX3RwX2RlbCwgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGVzdF9weW1lbSIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX2FsbG9jMCwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9hbGxvYzAiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJub19kb2NzdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1N9LAorICAgIHsiZG9jc3RyaW5nX2VtcHR5IiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfZW1wdHl9LAorICAgIHsiZG9jc3RyaW5nX25vX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX25vX3NpZ25hdHVyZX0sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lc30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCmluZGV4IDUxYjQzOWYuLmEyMWQyNTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RlbWJlZC5jCisrKyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCkBAIC0xLDcgKzEsMjYgQEAKICNpbmNsdWRlIDxQeXRob24uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi12b2lkIHByaW50X3N1YmludGVycCh2b2lkKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW1iZWRkZWQgaW50ZXJwcmV0ZXIgdGVzdHMgdGhhdCBuZWVkIGEgY3VzdG9tIGV4ZQorICoKKyAqIEV4ZWN1dGVkIHZpYSAnRW1iZWRkaW5nVGVzdHMnIGluIExpYi90ZXN0L3Rlc3RfY2FwaS5weQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKHZvaWQpCit7CisgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCisgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KKyAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOworICAgIFB5X0luaXRpYWxpemUoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRlc3QgcmVwZWF0ZWQgaW5pdGFsaXNhdGlvbiBhbmQgc3ViaW50ZXJwcmV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHByaW50X3N1YmludGVycCh2b2lkKQogewogICAgIC8qIEp1c3Qgb3V0cHV0IHNvbWUgZGVidWcgc3R1ZmYgKi8KICAgICBQeVRocmVhZFN0YXRlICp0cyA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CkBAIC0xNCw3ICszMyw3IEBACiAgICAgKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3N0YXRpYyB2b2lkIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKHZvaWQpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqbWFpbnN0YXRlLCAqc3Vic3RhdGU7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTI0LDEwICs0Myw3IEBACiAKICAgICBmb3IgKGk9MDsgaTwzOyBpKyspIHsKICAgICAgICAgcHJpbnRmKCItLS0gUGFzcyAlZCAtLS1cbiIsIGkpOwotICAgICAgICAvKiBIQUNLOiB0aGUgIi4vIiBhdCBmcm9udCBhdm9pZHMgYSBzZWFyY2ggYWxvbmcgdGhlIFBBVEggaW4KLSAgICAgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KLSAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKLSAgICAgICAgUHlfSW5pdGlhbGl6ZSgpOworICAgICAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKICAgICAgICAgbWFpbnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC01NCw1ICs3MCw3MSBAQAogICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZChtYWluc3RhdGUpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IGZvcmNpbmcgYSBwYXJ0aWN1bGFyIElPIGVuY29kaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGNoZWNrX3N0ZGlvX2RldGFpbHMoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKiBlcnJvcnMpCit7CisgICAgLyogT3V0cHV0IGluZm8gZm9yIHRoZSB0ZXN0IGNhc2UgdG8gY2hlY2sgKi8KKyAgICBpZiAoZW5jb2RpbmcpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogJXNcbiIsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yczogJXNcbiIsIGVycm9ycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHRcbiIpOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAvKiBGb3JjZSB0aGUgZ2l2ZW4gSU8gZW5jb2RpbmcgKi8KKyAgICBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGVuY29kaW5nLCBlcnJvcnMpOworICAgIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSgpOworICAgIFB5UnVuX1NpbXBsZVN0cmluZygKKyAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAicHJpbnQoJ3N0ZGluOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRpbikpOyIKKyAgICAgICAgInByaW50KCdzdGRvdXQ6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZG91dCkpOyIKKyAgICAgICAgInByaW50KCdzdGRlcnI6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZGVycikpOyIKKyAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKSIKKyAgICApOworICAgIFB5X0ZpbmFsaXplKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHZvaWQpCit7CisgICAgLyogQ2hlY2sgdmFyaW91cyBjb21iaW5hdGlvbnMgKi8KKyAgICBwcmludGYoIi0tLSBVc2UgZGVmYXVsdHMgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlcnJvcnMgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgInN1cnJvZ2F0ZWVzY2FwZSIpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsICJzdXJyb2dhdGVlc2NhcGUiKTsKKworICAgIC8qIENoZWNrIGNhbGxpbmcgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgKi8KKyAgICBQeV9Jbml0aWFsaXplKCk7CisKKyAgICBpZiAoUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhOVUxMLCBOVUxMKSA9PSAwKSB7CisgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyIpOworICAgIH0KKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCisvKiBEaWZmZXJlbnQgZW1iZWRkaW5nIHRlc3RzICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCisgICAgLyogVE9ETzogQ2hlY2sgdGhlIGFyZ3VtZW50IHN0cmluZyB0byBhbGxvdyBmb3IgbW9yZSB0ZXN0IGNhc2VzICovCisgICAgaWYgKGFyZ2MgPiAxKSB7CisgICAgICAgIC8qIEZvciBub3c6IGFzc3VtZSAiZm9yY2VkX2lvX2VuY29kaW5nICovCisgICAgICAgIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUnVuIHRoZSBvcmlnaW5hbCBlbWJlZGRpbmcgdGVzdCBjYXNlIGJ5IGRlZmF1bHQgKi8KKyAgICAgICAgdGVzdF9yZXBlYXRlZF9pbml0X2FuZF9zdWJpbnRlcnByZXRlcnMoKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYyBiL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWViNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQyBleHRlbnNpb25zIG1vZHVsZSB0byB0ZXN0IGltcG9ydGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkCisgKiBmaWxlIChpc3N1ZTE2NDIxKS4gVGhpcyBmaWxlIGRlZmluZXMgMyBtb2R1bGVzIChfdGVzdGltcG9ydG1vZHVsZSwKKyAqIGZvbywgYmFyKSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIGNhbGxlZCB0aGUgc2FtZSBhcyB0aGUgY29tcGlsZWQgZmlsZS4KKyAqLworI2luY2x1ZGU8UHl0aG9uLmg+CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3Rlc3RpbXBvcnRtdWx0aXBsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGUiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl90ZXN0aW1wb3J0bXVsdGlwbGUpOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9mb29tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfZm9vIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28odm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfZm9vbW9kdWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfYmFybW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2JhciBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyKHZvaWQpeworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9iYXJtb2R1bGUpOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCmluZGV4IGQxZGM2MWQuLmFiMGZlYTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCkBAIC0xNyw2ICsxNyw4IEBACiBzdGF0aWMgbG9uZyBuYl90aHJlYWRzID0gMDsKIHN0YXRpYyBQeU9iamVjdCAqc3RyX2RpY3Q7CiAKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIC8qIExvY2sgb2JqZWN0cyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC02OCw3ICs3MCw3IEBACiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICByID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKGxvY2ssIG1pY3Jvc2Vjb25kcywgMSk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKHIgPT0gUFlfTE9DS19JTlRSKSB7CiAgICAgICAgICAgICAvKiBSdW4gc2lnbmFsIGhhbmRsZXJzIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQuICBQcm9wYWdhdGUKQEAgLTI1NSwxNCArMjU3LDE3IEBACiBzdGF0aWMgdm9pZAogcmxvY2tfZGVhbGxvYyhybG9ja29iamVjdCAqc2VsZikKIHsKLSAgICBhc3NlcnQoc2VsZi0+cmxvY2tfbG9jayk7CiAgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLwotICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCi0gICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICAvKiBzZWxmLT5ybG9ja19sb2NrIGNhbiBiZSBOVUxMIGlmIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSBmYWlsZWQKKyAgICAgICBpbiBybG9ja19uZXcoKSAqLworICAgIGlmIChzZWxmLT5ybG9ja19sb2NrICE9IE5VTEwpIHsKKyAgICAgICAgLyogVW5sb2NrIHRoZSBsb2NrIHNvIGl0J3Mgc2FmZSB0byBmcmVlIGl0ICovCisgICAgICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CiAKLSAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICB9CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIApAQCAtNDUyLDE1ICs0NTcsMTYgQEAKIAogICAgIHNlbGYgPSAocmxvY2tvYmplY3QgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgIT0gTlVMTCkgewotICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB0eXBlLT50cF9mcmVlKHNlbGYpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgICAgICBzZWxmLT5ybG9ja19vd25lciA9IDA7CiAgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gMDsKKworICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc2VsZiwgTlVMTCk7CiAgICAgaWYgKHdyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwotICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3KCZ3cl9jYWxsYmFja19kZWYsIHdyKTsKKyAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZ3cl9jYWxsYmFja19kZWYsIHdyLCBOVUxMKTsKICAgICBQeV9ERUNSRUYod3IpOwogICAgIGlmIChzZWxmLT53cl9jYWxsYmFjayA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKQEAgLTEwMDEsNyArMTAwNyw3IEBACiAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKICAgICAgICAgICAgICAgICAiVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aHJlYWQgc3RhcnRlZCBieSAiKTsKICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWx1ZSwgJnRiKTsKLSAgICAgICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICAgICAgaWYgKGZpbGUgIT0gTlVMTCAmJiBmaWxlICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KGJvb3QtPmZ1bmMsIGZpbGUsIDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTE3Miw2ICsxMTc4LDY2IEBACiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCBhbmQgc3BlY2lhbGl6ZWQgcHVycG9zZXMgb25seS5cblwKIEluIG1vc3QgYXBwbGljYXRpb25zIGB0aHJlYWRpbmcuZW51bWVyYXRlKClgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIik7CiAKK3N0YXRpYyB2b2lkCityZWxlYXNlX3NlbnRpbmVsKHZvaWQgKndyKQoreworICAgIC8qIFRyaWNreTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUKKyAgICAgICBpcyBiZWluZyBkZWxldGVkLiAgVGhlcmVmb3JlLCBvbmx5IHNpbXBsZSBDIGNvZGUgY2FuIHNhZmVseQorICAgICAgIGV4ZWN1dGUgaGVyZS4gKi8KKyAgICBQeU9iamVjdCAqb2JqID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qod3IpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGFzc2VydChQeV9UWVBFKG9iaikgPT0gJkxvY2t0eXBlKTsKKyAgICAgICAgbG9jayA9IChsb2Nrb2JqZWN0ICopIG9iajsKKyAgICAgICAgaWYgKGxvY2stPmxvY2tlZCkgeworICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGxvY2stPmxvY2tfbG9jayk7CisgICAgICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIC8qIERlYWxsb2NhdGluZyBhIHdlYWtyZWYgd2l0aCBhIE5VTEwgY2FsbGJhY2sgb25seSBjYWxscworICAgICAgIFB5T2JqZWN0X0dDX0RlbCgpLCB3aGljaCBjYW4ndCBjYWxsIGFueSBQeXRob24gY29kZS4gKi8KKyAgICBQeV9ERUNSRUYod3IpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGhyZWFkX19zZXRfc2VudGluZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKndyOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisgICAgbG9ja29iamVjdCAqbG9jazsKKworICAgIGlmICh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgLyogV2UgbXVzdCBzdXBwb3J0IHRoZSByZS1jcmVhdGlvbiBvZiB0aGUgbG9jayBmcm9tIGEKKyAgICAgICAgICAgZm9yaygpZWQgY2hpbGQuICovCisgICAgICAgIGFzc2VydCh0c3RhdGUtPm9uX2RlbGV0ZSA9PSAmcmVsZWFzZV9zZW50aW5lbCk7CisgICAgICAgIHdyID0gKFB5T2JqZWN0ICopIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGE7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRih3cik7CisgICAgfQorICAgIGxvY2sgPSBuZXdsb2Nrb2JqZWN0KCk7CisgICAgaWYgKGxvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVGhlIGxvY2sgaXMgb3duZWQgYnkgd2hvZXZlciBjYWxsZWQgX3NldF9zZW50aW5lbCgpLCBidXQgdGhlIHdlYWtyZWYKKyAgICAgICBoYW5ncyB0byB0aGUgdGhyZWFkIHN0YXRlLiAqLworICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgbG9jaywgTlVMTCk7CisgICAgaWYgKHdyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGxvY2spOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9ICh2b2lkICopIHdyOworICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gJnJlbGVhc2Vfc2VudGluZWw7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBsb2NrOworfQorCitQeURvY19TVFJWQVIoX3NldF9zZW50aW5lbF9kb2MsCisiX3NldF9zZW50aW5lbCgpIC0+IGxvY2tcblwKK1xuXAorU2V0IGEgc2VudGluZWwgbG9jayB0aGF0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWRcblwKK3N0YXRlIGlzIGZpbmFsaXplZCAoYWZ0ZXIgaXQgaXMgdW50aWVkIGZyb20gdGhlIGludGVycHJldGVyKS5cblwKK1xuXAorVGhpcyBpcyBhIHByaXZhdGUgQVBJIGZvciB0aGUgdGhyZWFkaW5nIG1vZHVsZS4iKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9zdGFja19zaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTEyNDcsNiArMTMxMyw4IEBACiAgICAgIE1FVEhfTk9BUkdTLCBfY291bnRfZG9jfSwKICAgICB7InN0YWNrX3NpemUiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9zdGFja19zaXplLAogICAgICBNRVRIX1ZBUkFSR1MsIHN0YWNrX3NpemVfZG9jfSwKKyAgICB7Il9zZXRfc2VudGluZWwiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9fc2V0X3NlbnRpbmVsLAorICAgICBNRVRIX05PQVJHUywgX3NldF9zZW50aW5lbF9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RraW50ZXIuYyBiL01vZHVsZXMvX3RraW50ZXIuYwppbmRleCBlY2FkNTQxLi5lMDIyYTdhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190a2ludGVyLmMKKysrIGIvTW9kdWxlcy9fdGtpbnRlci5jCkBAIC0xMjgsNTIgKzEyOCw2MCBAQAogCiAvKiBUaGUgdGhyZWFkaW5nIHNpdHVhdGlvbiBpcyBjb21wbGljYXRlZC4gIFRjbCBpcyBub3QgdGhyZWFkLXNhZmUsIGV4Y2VwdAogICAgd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtdGhyZWFkcy4KLSAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4KLSAgIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLiAgSG9sZGluZyBpdAotICAgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGZvbGxvd2luZyBmb3VyCi0gICBtYWNyb3MgbWFuaXB1bGF0ZSBib3RoIGxvY2tzIHRvZ2V0aGVyLgorICAgU28gd2UgbmVlZCB0byB1c2UgYSBsb2NrIGFyb3VuZCBhbGwgdXNlcyBvZiBUY2wuICBQcmV2aW91c2x5LCB0aGUKKyAgIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIHdhcyB1c2VkIGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMKKyAgIHByb2JsZW1zIHdoZW4gb3RoZXIgUHl0aG9uIHRocmVhZHMgbmVlZCB0byBydW4gd2hpbGUgVGNsIGlzIGJsb2NrZWQKKyAgIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQKLSAgIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBhIGNhbGwgaW50byBUY2wgaXMgbWFkZQotICAgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50IGhhbmRsZXIsIG9yIG90aGVyd2lzZSBhZmZlY3QgdGhlIHN0YXRlIG9mIGEgVGNsCi0gICBpbnRlcnByZXRlci4gIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyB0aGUgUHl0aG9uCi0gICBpbnRlcnByZXRlciBsb2NrOyBpbnNpZGUgdGhlIGJyYWNrZXRzLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgaGFzIGJlZW4KLSAgIHJlbGVhc2VkIGFuZCB0aGUgbG9jayBmb3IgVGNsIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLgorICAgSG9sZGluZyBpdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBob2xkaW5nIFB5dGhvbidzIGludGVycHJldGVyIGxvY2suCisgICBUaGUgZm9sbG93aW5nIGZvdXIgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KIAotICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbCBsb2NrLgotICAgKEZvciBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIFRjbCBpbnRlcnByZXRlciByZXN1bHQgdG8gYQotICAgUHl0aG9uIHN0cmluZyBvYmplY3QuKSAgVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlCi0gICB0aGUgRU5URVJfVENMIGJsb2NrOiBFTlRFUl9PVkVSTEFQIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMKLSAgIHRoZSB0aHJlYWQgc3RhdGUpIGJ1dCBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTAotICAgcmVsZWFzZXMgdGhlIFRjbCBsb2NrLgorICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UKKyAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUKKyAgIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50CisgICBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbCBpbnRlcnByZXRlci4gIFRoZXNlCisgICBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrOworICAgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuIHJlbGVhc2VkCisgICBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbAorICAgbG9jay4gIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wKKyAgIGludGVycHJldGVyIHJlc3VsdCB0byBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkKKyAgIHVzaW5nIGRpZmZlcmVudCBtYWNyb3MgdG8gY2xvc2UgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUAorICAgcmVhY3F1aXJlcyB0aGUgUHl0aG9uIGxvY2sgKGFuZCByZXN0b3JlcyB0aGUgdGhyZWFkIHN0YXRlKSBidXQKKyAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgVGNsIGxvY2s7IExFQVZFX09WRVJMQVBfVENMIHJlbGVhc2VzIHRoZSBUY2wKKyAgIGxvY2suCiAKICAgIEJ5IGNvbnRyYXN0LCBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTiBhcmUgdXNlZCBpbiBUY2wgZXZlbnQKLSAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMgYXJlCi0gICBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIgcHJlc3VtYWJseSBuZWVkcwotICAgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IgVGNsIGFuZCBhY3F1aXJlcwotICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlIGFwcHJvcHJpYXRlIHRocmVhZCBzdGF0ZSwgYW5kCi0gICBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGFuZCByZS1hY3F1aXJlcyB0aGUgbG9jawotICAgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yIEVOVEVSX1RDTC9MRUFWRV9UQ0wgcGFpcnMgdG8gYmUgY29udGFpbmVkIGluc2lkZQotICAgdGhlIGNvZGUgYmV0d2VlbiBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTi4KKyAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMKKyAgIGFyZSBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIKKyAgIHByZXN1bWFibHkgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IKKyAgIFRjbCBhbmQgYWNxdWlyZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlCisgICBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZCBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbgorICAgaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yCisgICBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGNvZGUgYmV0d2VlbgorICAgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCiAKLSAgIFRoZXNlIGxvY2tzIGV4cGFuZCB0byBzZXZlcmFsIHN0YXRlbWVudHMgYW5kIGJyYWNrZXRzOyB0aGV5IHNob3VsZCBub3QgYmUKLSAgIHVzZWQgaW4gYnJhbmNoZXMgb2YgaWYgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuCisgICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQKKyAgIG5vdCBiZSB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgogCi0gICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsIGludGVycHJldGVyIGlzCi0gICBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrIGFjdGl2aXR5IG11c3QgaGFwcGVuIGluIHRoaXMKLSAgIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZSBtYWlubG9vcCBtdXN0IGJlIGludm9rZWQgaW4gdGhlIHRocmVhZCB0aGF0Ci0gICBjcmVhdGVkIHRoZSBpbnRlcnByZXRlci4gSW52b2tpbmcgY29tbWFuZHMgZnJvbSBvdGhlciB0aHJlYWRzIGlzIHBvc3NpYmxlOwotICAgX3RraW50ZXIgd2lsbCBxdWV1ZSBhbiBldmVudCBmb3IgdGhlIGludGVycHJldGVyIHRocmVhZCwgd2hpY2ggd2lsbCB0aGVuCi0gICBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCBwYXNzIGJhY2sgdGhlIHJlc3VsdC4gSWYgdGhlIG1haW4gdGhyZWFkIGlzIG5vdCBpbiB0aGUKLSAgIG1haW5sb29wLCBhbmQgaW52b2tpbmcgY29tbWFuZHMgY2F1c2VzIGFuIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nCi0gICBidXQgbm90IHByb2Nlc3NpbmcgZXZlbnRzLCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCisgICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsCisgICBpbnRlcnByZXRlciBpcyBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrCisgICBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZQorICAgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZQorICAgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKKyAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwKKyAgIHRoZW4gZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluCisgICB0aHJlYWQgaXMgbm90IGluIHRoZSBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbgorICAgZXhjZXB0aW9uOyBpZiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywKKyAgIHRoZSBjb21tYW5kIGludm9jYXRpb24gd2lsbCBibG9jay4KIAotICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QgYmUgc3VmZmljaWVudAotICAgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkgc2ltdWx0YW5lb3VzbHkgZGlzcGF0Y2ggaW4gZGlmZmVyZW50Ci0gICB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMgQVBJLgorICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QKKyAgIGJlIHN1ZmZpY2llbnQgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkKKyAgIHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudCB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMKKyAgIEFQSS4KIAogKi8KIApAQCAtMTgyLDcgKzE5MCw4IEBACiAjaWZkZWYgVENMX1RIUkVBRFMKIHN0YXRpYyBUY2xfVGhyZWFkRGF0YUtleSBzdGF0ZV9rZXk7CiB0eXBlZGVmIFB5VGhyZWFkU3RhdGUgKlRocmVhZFNwZWNpZmljRGF0YTsKLSNkZWZpbmUgdGNsX3RzdGF0ZSAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCisjZGVmaW5lIHRjbF90c3RhdGUgXAorICAgICgqKFB5VGhyZWFkU3RhdGUqKilUY2xfR2V0VGhyZWFkRGF0YSgmc3RhdGVfa2V5LCBzaXplb2YoUHlUaHJlYWRTdGF0ZSopKSkKICNlbHNlCiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqdGNsX3RzdGF0ZSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE5Miw3ICsyMDEsOCBAQAogICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9hY3F1aXJlX2xvY2sodGNsX2xvY2ssIDEpOyB0Y2xfdHN0YXRlID0gdHN0YXRlOwogCiAjZGVmaW5lIExFQVZFX1RDTCBcCi0gICAgdGNsX3RzdGF0ZSA9IE5VTEw7IGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQorICAgIHRjbF90c3RhdGUgPSBOVUxMOyBcCisgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlfRU5EX0FMTE9XX1RIUkVBRFN9CiAKICNkZWZpbmUgRU5URVJfT1ZFUkxBUCBcCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTIwMiw3ICsyMTIsOCBAQAogCiAjZGVmaW5lIEVOVEVSX1BZVEhPTiBcCiAgICAgeyBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSB0Y2xfdHN0YXRlOyB0Y2xfdHN0YXRlID0gTlVMTDsgXAotICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KKyAgICAgICAgaWYodGNsX2xvY2spIFwKKyAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KIAogI2RlZmluZSBMRUFWRV9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsgXApAQCAtMjExLDcgKzIyMiw4IEBACiAjZGVmaW5lIENIRUNLX1RDTF9BUFBBUlRNRU5UIFwKICAgICBpZiAoKChUa2FwcE9iamVjdCAqKXNlbGYpLT50aHJlYWRlZCAmJiBcCiAgICAgICAgICgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsgXAotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsaW5nIFRjbCBmcm9tIGRpZmZlcmVudCBhcHBhcnRtZW50Iik7IFwKICAgICAgICAgcmV0dXJuIDA7IFwKICAgICB9CiAKQEAgLTIzMyw3ICsyNDUsNyBAQAogCiAvKioqKiBUa2FwcCBPYmplY3QgRGVjbGFyYXRpb24gKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa2FwcF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjUzLDcgKzI2NSw2IEBACiAgICAgVGNsX09ialR5cGUgKlN0cmluZ1R5cGU7CiB9IFRrYXBwT2JqZWN0OwogCi0jZGVmaW5lIFRrYXBwX0NoZWNrKHYpIChQeV9UWVBFKHYpID09ICZUa2FwcF9UeXBlKQogI2RlZmluZSBUa2FwcF9JbnRlcnAodikgKCgoVGthcHBPYmplY3QgKikgKHYpKS0+aW50ZXJwKQogI2RlZmluZSBUa2FwcF9SZXN1bHQodikgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAodikpCiAKQEAgLTMyNiwxMTAgKzMzNyw5IEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCi1zdGF0aWMgY2hhciAqCi1Bc1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0bXApCi17Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Bc1N0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc1VURjgodmFsdWUpOwotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqdiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQodG1wLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHYpOwotICAgIH0KLX0KLQotCiAKICNkZWZpbmUgQVJHU1ogNjQKIAotc3RhdGljIGNoYXIgKgotTWVyZ2UoUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7Ci0gICAgY2hhciAqYXJndlN0b3JlW0FSR1NaXTsKLSAgICBjaGFyICoqYXJndiA9IE5VTEw7Ci0gICAgaW50IGZ2U3RvcmVbQVJHU1pdOwotICAgIGludCAqZnYgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgYXJnYyA9IDAsIGZ2YyA9IDAsIGk7Ci0gICAgY2hhciAqcmVzID0gTlVMTDsKLQotICAgIGlmICghKHRtcCA9IFB5TGlzdF9OZXcoMCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGFyZ3YgPSBhcmd2U3RvcmU7Ci0gICAgZnYgPSBmdlN0b3JlOwotCi0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgYXJnYyA9IDA7Ci0KLSAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBhcmdjID0gMTsKLSAgICAgICAgZnZbMF0gPSAwOwotICAgICAgICBpZiAoIShhcmd2WzBdID0gQXNTdHJpbmcoYXJncywgdG1wKSkpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotCi0gICAgICAgIGlmIChhcmdjID4gQVJHU1opIHsKLSAgICAgICAgICAgIGlmICghQ0hFQ0tfU0laRShhcmdjLCBzaXplb2YoY2hhciAqKSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJndiA9IChjaGFyICoqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICAgICAgZnYgPSAoaW50ICopY2thbGxvYygoc2l6ZV90KWFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAoYXJndiA9PSBOVUxMIHx8IGZ2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGkpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IE1lcmdlKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgYXJnYyA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IEFzU3RyaW5nKHYsIHRtcCkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICAgICAgZnZjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzID0gVGNsX01lcmdlKGFyZ2MsIGFyZ3YpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJtZXJnZSBmYWlsZWQiKTsKLQotICBmaW5hbGx5OgotICAgIGZvciAoaSA9IDA7IGkgPCBmdmM7IGkrKykKLSAgICAgICAgaWYgKGZ2W2ldKSB7Ci0gICAgICAgICAgICBja2ZyZWUoYXJndltpXSk7Ci0gICAgICAgIH0KLSAgICBpZiAoYXJndiAhPSBhcmd2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBhcmd2KTsKLSAgICBpZiAoZnYgIT0gZnZTdG9yZSkKLSAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGZ2KTsKLQotICAgIFB5X0RFQ1JFRih0bXApOwotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDQwLDggKzM1MCw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAogICAgIGlmIChUY2xfU3BsaXRMaXN0KChUY2xfSW50ZXJwICopTlVMTCwgbGlzdCwgJmFyZ2MsICZhcmd2KSAhPSBUQ0xfT0spIHsKQEAgLTQ3Myw5ICszODIsOSBAQAogICAgIHJldHVybiB2OwogfQogCi0vKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZQotICAgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nIG9iamVjdHMgdGhhdAotICAgbmVlZCB0byBiZSBzcGxpdC4gKi8KKy8qIEluIHNvbWUgY2FzZXMsIFRjbCB3aWxsIHN0aWxsIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHN1cHBvc2VkIHRvCisgICBiZSBsaXN0cy4gU3BsaXRPYmogd2Fsa3MgdGhyb3VnaCBhIG5lc3RlZCB0dXBsZSwgZmluZGluZyBzdHJpbmcKKyAgIG9iamVjdHMgdGhhdCBuZWVkIHRvIGJlIHNwbGl0LiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogU3BsaXRPYmooUHlPYmplY3QgKmFyZykKQEAgLTYwNyw5ICs1MTYsMTAgQEAKICAgICBUa2FwcE9iamVjdCAqdjsKICAgICBjaGFyICphcmd2MDsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGthcHBPYmplY3QsICZUa2FwcF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrYXBwX1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa2FwcF9UeXBlKTsKIAogICAgIHYtPmludGVycCA9IFRjbF9DcmVhdGVJbnRlcnAoKTsKICAgICB2LT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwpAQCAtNjIwLDcgKzUzMCw4IEBACiAKICNpZm5kZWYgVENMX1RIUkVBRFMKICAgICBpZiAodi0+dGhyZWFkZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGNsIGlzIHRocmVhZGVkIGJ1dCBfdGtpbnRlciBpcyBub3QiKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03NTcsMTYgKzY2OCwxNyBAQAogICAgIFB5T2JqZWN0ICpzdHJpbmc7IC8qIFRoaXMgY2Fubm90IGNhdXNlIGN5Y2xlcy4gKi8KIH0gUHlUY2xPYmplY3Q7CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZTsKLSNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlUY2xPYmplY3RfVHlwZSkKK3N0YXRpYyBQeU9iamVjdCAqUHlUY2xPYmplY3RfVHlwZTsKKyNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgKCh2KS0+b2JfdHlwZSA9PSAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdQeVRjbE9iamVjdChUY2xfT2JqICphcmcpCiB7CiAgICAgUHlUY2xPYmplY3QgKnNlbGY7Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVRjbE9iamVjdCwgJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsIChQeVR5cGVPYmplY3QgKikgUHlUY2xPYmplY3RfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIFRjbF9JbmNyUmVmQ291bnQoYXJnKTsKICAgICBzZWxmLT52YWx1ZSA9IGFyZzsKICAgICBzZWxmLT5zdHJpbmcgPSBOVUxMOwpAQCAtNzc2LDkgKzY4OCwxMSBAQAogc3RhdGljIHZvaWQKIFB5VGNsT2JqZWN0X2RlYWxsb2MoUHlUY2xPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgVGNsX0RlY3JSZWZDb3VudChzZWxmLT52YWx1ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdHJpbmcpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgY2hhcioKQEAgLTgyMyw4ICs3MzcsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVRjbE9iamVjdF9yZXByKFB5VGNsT2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc2VsZi0+dmFsdWUpOworICAgIFB5T2JqZWN0ICpyZXByLCAqc3RyID0gUHlUY2xPYmplY3Rfc3RyKHNlbGYsIE5VTEwpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0OiAlUj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc3RyKTsKKyAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICByZXR1cm4gcmVwcjsKIH0KIAogI2RlZmluZSBURVNUX0NPTkQoY29uZCkgKChjb25kKSA/IFB5X1RydWUgOiBQeV9GYWxzZSkKQEAgLTg5OCw1MCArODE3LDI1IEBACiAgICAgezB9LAogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVRjbE9iamVjdF9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfdGtpbnRlci5UY2xfT2JqIiwgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jLC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHIsICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlLCAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwotICAgIFB5VGNsT2JqZWN0X2dldHNldGxpc3QsICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgUHlUY2xPYmplY3RfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgKHJlcHJmdW5jKVB5VGNsT2JqZWN0X3JlcHJ9LAorICAgIHtQeV90cF9zdHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHJ9LAorICAgIHtQeV90cF9nZXRhdHRybywgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJ9LAorICAgIHtQeV90cF9yaWNoY29tcGFyZSwgUHlUY2xPYmplY3RfcmljaGNvbXBhcmV9LAorICAgIHtQeV90cF9nZXRzZXQsIFB5VGNsT2JqZWN0X2dldHNldGxpc3R9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFB5VGNsT2JqZWN0X1R5cGVfc3BlYyA9IHsKKyAgICAiX3RraW50ZXIuVGNsX09iaiIsCisgICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBQeVRjbE9iamVjdF9UeXBlX3Nsb3RzLAorfTsKKworCiBzdGF0aWMgVGNsX09iaioKIEFzT2JqKFB5T2JqZWN0ICp2YWx1ZSkKIHsKQEAgLTEzNTYsNDIgKzEyNTAsNiBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxDYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICAvKiBDb3VsZCBkbyB0aGUgc2FtZSBoZXJlIGFzIGZvciBUa2FwcF9DYWxsKCksIGJ1dCB0aGlzIGlzIG5vdCB1c2VkCi0gICAgICAgbXVjaCwgc28gSSBjYW4ndCBiZSBib3RoZXJlZC4gIFVuZm9ydHVuYXRlbHkgVGNsIGRvZXNuJ3QgZXhwb3J0IGEKLSAgICAgICB3YXkgZm9yIHRoZSB1c2VyIHRvIGRvIHdoYXQgYWxsIGl0cyBHbG9iYWwqIHZhcmlhbnRzIGRvIChzYXZlIGFuZAotICAgICAgIHJlc2V0IHRoZSBzY29wZSBwb2ludGVyLCBjYWxsIHRoZSBsb2NhbCB2ZXJzaW9uLCByZXN0b3JlIHRoZSBzYXZlZAotICAgICAgIHNjb3BlIHBvaW50ZXIpLiAqLwotCi0gICAgY2hhciAqY21kOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsY2FsbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIGNtZCAgPSBNZXJnZShhcmdzKTsKLSAgICBpZiAoY21kKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIEVOVEVSX1RDTAotICAgICAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIGNtZCk7Ci0gICAgICAgIEVOVEVSX09WRVJMQVAKLSAgICAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgICAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgICAgICBja2ZyZWUoY21kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqc2NyaXB0OwpAQCAtMTQxNSwzNCArMTI3Myw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxFdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzY3JpcHQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGV2YWwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdsb2JhbGV2YWwiLCAmc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIEVOVEVSX1RDTAotICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0KTsKLSAgICBFTlRFUl9PVkVSTEFQCi0gICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWxGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpmaWxlTmFtZTsKQEAgLTE1MDIsOCArMTMzMiw3IEBACiAgICAgVGNsX0FkZEVycm9ySW5mbyhUa2FwcF9JbnRlcnAoc2VsZiksIG1zZyk7CiAgICAgTEVBVkVfVENMCiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMTcwMSw3ICsxNTMwLDggQEAKICAgICB0cmVzID0gVGNsX0dldFZhcjJFeChUa2FwcF9JbnRlcnAoc2VsZiksIG5hbWUxLCBuYW1lMiwgZmxhZ3MpOwogICAgIEVOVEVSX09WRVJMQVAKICAgICBpZiAodHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cykgewogICAgICAgICAgICAgcmVzID0gRnJvbU9iaihzZWxmLCB0cmVzKTsKQEAgLTE3NjAsNyArMTU5MCw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfR2xvYmFsVW5zZXRWYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLCBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CisgICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOwogfQogCiAKQEAgLTIwMjYsMjcgKzE4NTcsNiBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotVGthcHBfTWVyZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKnM7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJtZXJnZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzID0gTWVyZ2UoYXJncyk7Ci0KLSAgICBpZiAocykgewotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzKTsKLSAgICAgICAgY2tmcmVlKHMpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiAvKiogVGNsIENvbW1hbmQgKiovCkBAIC0yMjMyLDggKzIwNDIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjI3NCw4ICsyMDgzLDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJjYW4ndCBkZWxldGUgVGNsIGNvbW1hbmQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yMzc5LDggKzIxODcsNyBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9DcmVhdGVGaWxlSGFuZGxlcih0ZmlsZSwgbWFzaywgRmlsZUhhbmRsZXIsIChDbGllbnREYXRhKSBkYXRhKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDA0LDE1ICsyMjExLDE0IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUZpbGVIYW5kbGVyKHRmaWxlKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9DUkVBVEVGSUxFSEFORExFUiAqLwogCiAKIC8qKioqIFRrdHQgT2JqZWN0ICh0aW1lciB0b2tlbikgKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGU7CitzdGF0aWMgUHlPYmplY3QgKlRrdHRfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI0MzcsOCArMjI0Myw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICAgICAgUHlfREVDUkVGKHYpOyAvKiBTZWUgVGt0dF9OZXcoKSAqLwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUa3R0X21ldGhvZHNbXSA9CkBAIC0yNDUyLDkgKzIyNTcsMTAgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2OwogCi0gICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAmVGt0dF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsIChQeVR5cGVPYmplY3QgKikgVGt0dF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGt0dF9UeXBlKTsKIAogICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICB2LT50b2tlbiA9IE5VTEw7CkBAIC0yNDcwLDEwICsyMjc2LDEyIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdiA9IChUa3R0T2JqZWN0ICopc2VsZjsKICAgICBQeU9iamVjdCAqZnVuYyA9IHYtPmZ1bmM7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAKICAgICBQeV9YREVDUkVGKGZ1bmMpOwogCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDg1LDM4ICsyMjkzLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPmZ1bmMgPT0gTlVMTCA/ICIsIGhhbmRsZXIgZGVsZXRlZCIgOiAiIik7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGt0aW1lcnRva2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa3R0T2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa3R0X0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICBUa3R0X1JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGt0dF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrdHRfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa3R0X0RlYWxsb2N9LAorICAgIHtQeV90cF9yZXByLCBUa3R0X1JlcHJ9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa3R0X21ldGhvZHN9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFRrdHRfVHlwZV9zcGVjID0geworICAgICJ0a3RpbWVydG9rZW4iLAorICAgIHNpemVvZihUa3R0T2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa3R0X1R5cGVfc2xvdHMsCit9OwogCiAKIC8qKiBUaW1lciBIYW5kbGVyICoqLwpAQCAtMjYzOCw4ICsyNDI4LDcgQEAKICAgICAgICAgZXhjSW5DbWQgPSB2YWxJbkNtZCA9IHRyYkluQ21kID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI2NjUsOCArMjQ1NCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcXVpdE1haW5Mb29wID0gMTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzE2LDE1ICsyNTA0LDE1IEBACiAgICAgfQogICAgIGlmIChfdGtfZXhpc3RzID09IE5VTEwgfHwgc3RyY21wKF90a19leGlzdHMsICIxIikgIT0gMCkgICAgIHsKICAgICAgICAgaWYgKFRrX0luaXQoaW50ZXJwKSAgICAgICAgICAgICA9PSBUQ0xfRVJST1IpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCiAgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3MzgsOCArMjUyNiw3IEBACiAgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKTsKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NDgsOCArMjUzNSw3IEBACiAKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+ZGlzcGF0Y2hpbmcgPSAxOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI3NjAsOSArMjU0Niw3IEBACiAgICAgeyJ3aWxsZGlzcGF0Y2giLCAgICAgICBUa2FwcF9XaWxsRGlzcGF0Y2gsIE1FVEhfTk9BUkdTfSwKICAgICB7IndhbnRvYmplY3RzIiwgICAgICAgICAgICBUa2FwcF9XYW50T2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNhbGwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9DYWxsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsY2FsbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbENhbGwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfRXZhbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGV2YWwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxFdmFsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbGZpbGUiLCAgICAgICAgICAgICAgIFRrYXBwX0V2YWxGaWxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmVjb3JkIiwgICAgICAgICAgICAgICAgIFRrYXBwX1JlY29yZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZGVycm9yaW5mbyIsICAgICAgIFRrYXBwX0FkZEVycm9ySW5mbywgTUVUSF9WQVJBUkdTfSwKQEAgLTI3ODEsNyArMjU2NSw2IEBACiAgICAgeyJleHByYm9vbGVhbiIsICAgICAgICBUa2FwcF9FeHByQm9vbGVhbiwgTUVUSF9WQVJBUkdTfSwKICAgICB7InNwbGl0bGlzdCIsICAgICAgICAgICAgICBUa2FwcF9TcGxpdExpc3QsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdCIsICAgICAgICAgICAgICAgICAgVGthcHBfU3BsaXQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJtZXJnZSIsICAgICAgICAgICAgICAgICAgVGthcHBfTWVyZ2UsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjcmVhdGVjb21tYW5kIiwgICAgICBUa2FwcF9DcmVhdGVDb21tYW5kLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZGVsZXRlY29tbWFuZCIsICAgICAgVGthcHBfRGVsZXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICNpZmRlZiBIQVZFX0NSRUFURUZJTEVIQU5ETEVSCkBAIC0yODA0LDQ0ICsyNTg3LDI5IEBACiBzdGF0aWMgdm9pZAogVGthcHBfRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKIHsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKICAgICAvKkNIRUNLX1RDTF9BUFBBUlRNRU5UOyovCiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUludGVycChUa2FwcF9JbnRlcnAoc2VsZikpOwogICAgIExFQVZFX1RDTAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogICAgIERpc2FibGVFdmVudEhvb2soKTsKIH0KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGthcHAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa2FwcE9iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa2FwcF9EZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGthcHBfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrYXBwX1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgVGthcHBfRGVhbGxvY30sCisgICAge1B5X3RwX21ldGhvZHMsIFRrYXBwX21ldGhvZHN9LAorICAgIHswLCAwfQorfTsKKworCitzdGF0aWMgUHlUeXBlX1NwZWMgVGthcHBfVHlwZV9zcGVjID0geworICAgICJ0a2FwcCIsCisgICAgc2l6ZW9mKFRrYXBwT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa2FwcF9UeXBlX3Nsb3RzLAogfTsKIAogCkBAIC0yOTgxLDcgKzI3NDksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgVGthcHBfTmV3KHNjcmVlbk5hbWUsIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSwgd2FudG9iamVjdHMsICAgICB3YW50VGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCB3YW50VGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYywgdXNlKTsKIH0KIApAQCAtMjk5Nyw4ICsyNzY1LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbCA9IG5ld192YWw7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgY2hhciBzZXRidXN5d2FpdGludGVydmFsX2RvY1tdID0KQEAgLTMxMzEsMjcgKzI4OTgsNiBAQAogfQogCiAKLS8qIGFsbCBlcnJvcnMgd2lsbCBiZSBjaGVja2VkIGluIG9uZSBmZWxsIHN3b29wIGluIGluaXRfdGtpbnRlcigpICovCi1zdGF0aWMgdm9pZAotaW5zX2xvbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGxvbmcgdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci1zdGF0aWMgdm9pZAotaW5zX3N0cmluZyhQeU9iamVjdCAqZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsKTsKLSAgICBpZiAodikgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBuYW1lLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLX0KLQotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90a2ludGVybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAiX3RraW50ZXIiLApAQCAtMzE2Nyw0NSArMjkxMywxMTEgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3RraW50ZXIodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp1ZXhlLCAqY2V4ZTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlRrYXBwX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgIFB5T2JqZWN0ICptLCAqdWV4ZSwgKmNleGUsICpvOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB0Y2xfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAodGNsX2xvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl90a2ludGVybW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIFRraW50ZXJfVGNsRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbEVycm9yIiwgVGtpbnRlcl9UY2xFcnJvcik7Ci0KLSAgICBpbnNfbG9uZyhkLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpOwotICAgIGluc19sb25nKGQsICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSk7Ci0gICAgaW5zX2xvbmcoZCwgIkVYQ0VQVElPTiIsIFRDTF9FWENFUFRJT04pOwotICAgIGluc19sb25nKGQsICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIlRJTUVSX0VWRU5UUyIsIFRDTF9USU1FUl9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkRPTlRfV0FJVCIsIFRDTF9ET05UX1dBSVQpOwotICAgIGluc19zdHJpbmcoZCwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKTsKLQotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUa2FwcFR5cGUiLCAoUHlPYmplY3QgKikmVGthcHBfVHlwZSk7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa3R0X1R5cGUpIDwgMCkgeworICAgIG8gPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKG8gPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGt0dFR5cGUiLCAoUHlPYmplY3QgKikmVGt0dF9UeXBlKTsKKyAgICBQeV9JTkNSRUYobyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsRXJyb3IiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRraW50ZXJfVGNsRXJyb3IgPSBvOwogCi0gICAgUHlfVFlQRSgmUHlUY2xPYmplY3RfVHlwZSkgPSAmUHlUeXBlX1R5cGU7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbF9PYmoiLCAoUHlPYmplY3QgKikmUHlUY2xPYmplY3RfVHlwZSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRUFEQUJMRSIsIFRDTF9SRUFEQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIldJTkRPV19FVkVOVFMiLCBUQ0xfV0lORE9XX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklETEVfRVZFTlRTIiwgVENMX0lETEVfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRDTF9WRVJTSU9OIiwgVENMX1ZFUlNJT04pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGthcHBfVHlwZV9zcGVjKTsKKyAgICBpZiAobyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRrYXBwVHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGthcHBfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZUa3R0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa3R0VHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGt0dF9UeXBlID0gbzsKKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlB5VGNsT2JqZWN0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUY2xfT2JqIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVRjbE9iamVjdF9UeXBlID0gbzsKIAogI2lmZGVmIFRLX0FRVUEKICAgICAvKiBUa19NYWNPU1hTZXR1cFRrTm90aWZpZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFRjbCdzIHN1YnN5c3RlbXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjIyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCkBAIC0wLDAgKzEsMTQ0MSBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCisjaW5jbHVkZSAicHl0aHJlYWQuaCIKKyNpbmNsdWRlICJvc2RlZnMuaCIKKworLyogVHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyNkZWZpbmUgVFJBQ0VfUkFXX01BTExPQworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCB0cmFjZW1hbGxvY19zdG9wKHZvaWQpOworc3RhdGljIGludCB0cmFjZW1hbGxvY19hdGV4aXRfcmVnaXN0ZXIodm9pZCk7CitzdGF0aWMgdm9pZCogcmF3X21hbGxvYyhzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCByYXdfZnJlZSh2b2lkICpwdHIpOworCisjaWZkZWYgUHlfREVCVUcKKyMgIGRlZmluZSBUUkFDRV9ERUJVRworI2VuZGlmCisKKyNkZWZpbmUgX1NUUihWQUwpICNWQUwKKyNkZWZpbmUgU1RSKFZBTCkgX1NUUihWQUwpCisKKy8qIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBtZW07CisgICAgUHlNZW1BbGxvY2F0b3IgcmF3OworICAgIFB5TWVtQWxsb2NhdG9yIG9iajsKK30gYWxsb2NhdG9yczsKKworc3RhdGljIHN0cnVjdCB7CisgICAgLyogTW9kdWxlIGluaXRpYWxpemVkPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgZW51bSB7CisgICAgICAgIFRSQUNFTUFMTE9DX05PVF9JTklUSUFMSVpFRCwKKyAgICAgICAgVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQsCisgICAgICAgIFRSQUNFTUFMTE9DX0ZJTkFMSVpFRAorICAgIH0gaW5pdGlhbGl6ZWQ7CisKKyAgICAvKiBhdGV4aXQgaGFuZGxlciByZWdpc3RlcmVkPyAqLworICAgIGludCBhdGV4aXRfcmVnaXN0ZXJlZDsKKworICAgIC8qIElzIHRyYWNlbWFsbG9jIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgaW50IHRyYWNpbmc7CisKKyAgICAvKiBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHRyYWNlYmFjaywgMSBieSBkZWZhdWx0LgorICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworICAgIGludCBtYXhfbmZyYW1lOworfSB0cmFjZW1hbGxvY19jb25maWcgPSB7VFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELCAwLCAwLCAxfTsKKworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKy8qIFRoaXMgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSB0cmFjZW1hbGxvY19mcmVlKCkgaXMgY2FsbGVkIHdpdGhvdXQKKyAgIHRoZSBHSUwgaGVsZCBmcm9tIFB5TWVtX1Jhd0ZyZWUoKS4gSXQgY2Fubm90IGFjcXVpcmUgdGhlIGxvY2sgYmVjYXVzZSBpdAorICAgd291bGQgaW50cm9kdWNlIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCitzdGF0aWMgUHlUaHJlYWRfdHlwZV9sb2NrIHRhYmxlc19sb2NrOworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRhYmxlc19sb2NrLCAxKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKSBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGFibGVzX2xvY2spCisjZWxzZQorICAgLyogdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkKKyMgIGRlZmluZSBUQUJMRVNfVU5MT0NLKCkKKyNlbmRpZgorCisvKiBQYWNrIHRoZSBmcmFtZV90IHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gNjQtYml0CisgICBhcmNoaXRlY3R1cmVzOiAxMiBieXRlcyBpbnN0ZWFkIG9mIDE2LiBUaGlzIG9wdGltaXphdGlvbiBtaWdodCBwcm9kdWNlCisgICBTSUdCVVMgb24gYXJjaGl0ZWN0dXJlcyBub3Qgc3VwcG9ydGluZyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzICg2NC1iaXQKKyAgIElQUyBDUFU/KTogb24gc3VjaCBhcmNoaXRlY3R1cmUsIHRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgcGFja2VkLiAqLworI3ByYWdtYSBwYWNrKDQpCit0eXBlZGVmIHN0cnVjdAorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGludCBsaW5lbm87Cit9IGZyYW1lX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV91aGFzaF90IGhhc2g7CisgICAgaW50IG5mcmFtZTsKKyAgICBmcmFtZV90IGZyYW1lc1sxXTsKK30gdHJhY2ViYWNrX3Q7CisKKyNkZWZpbmUgVFJBQ0VCQUNLX1NJWkUoTkZSQU1FKSBcCisgICAgICAgIChzaXplb2YodHJhY2ViYWNrX3QpICsgc2l6ZW9mKGZyYW1lX3QpICogKE5GUkFNRSAtIDEpKQorCisjZGVmaW5lIE1BWF9ORlJBTUUgXAorICAgICAgICAoKElOVF9NQVggLSBzaXplb2YodHJhY2ViYWNrX3QpKSAvIHNpemVvZihmcmFtZV90KSArIDEpCisKK3N0YXRpYyBQeU9iamVjdCAqdW5rbm93bl9maWxlbmFtZSA9IE5VTEw7CitzdGF0aWMgdHJhY2ViYWNrX3QgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrOworCisvKiBUcmFjZSBvZiBhIG1lbW9yeSBibG9jayAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBpbiBieXRlcyAqLworICAgIHNpemVfdCBzaXplOworCisgICAgLyogVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCAqLworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2s7Cit9IHRyYWNlX3Q7CisKKy8qIFNpemUgaW4gYnl0ZXMgb2YgY3VycmVudGx5IHRyYWNlZCBtZW1vcnkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBzaXplX3QgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA9IDA7CisKKy8qIFBlYWsgc2l6ZSBpbiBieXRlcyBvZiB0cmFjZWQgbWVtb3J5LgorICAgUHJvdGVjdGVkIGJ5IFRBQkxFU19MT0NLKCkuICovCitzdGF0aWMgc2l6ZV90IHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeSA9IDA7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byB0byBpbnRlcm4gZmlsZW5hbWVzOgorICAgUHlPYmplY3QqID0+IFB5T2JqZWN0Ki4KKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY19maWxlbmFtZXMgPSBOVUxMOworCisvKiBCdWZmZXIgdG8gc3RvcmUgYSBuZXcgdHJhY2ViYWNrIGluIHRyYWNlYmFja19uZXcoKS4KKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworc3RhdGljIHRyYWNlYmFja190ICp0cmFjZW1hbGxvY190cmFjZWJhY2sgPSBOVUxMOworCisvKiBIYXNoIHRhYmxlIHVzZWQgYXMgYSBzZXQgdG8gaW50ZXJuIHRyYWNlYmFja3M6CisgICB0cmFjZWJhY2tfdCogPT4gdHJhY2ViYWNrX3QqCisgICBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2ViYWNrcyA9IE5VTEw7CisKKy8qIHBvaW50ZXIgKHZvaWQqKSA9PiB0cmFjZSAodHJhY2VfdCkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX3RyYWNlcyA9IE5VTEw7CisKKyNpZmRlZiBUUkFDRV9ERUJVRworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgZnByaW50ZihzdGRlcnIsICJ0cmFjZW1hbGxvYzogIik7CisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorI2RlZmluZSBSRUVOVFJBTlRfVEhSRUFETE9DQUwKKworLyogSWYgeW91ciBPUyBkb2VzIG5vdCBwcm92aWRlIG5hdGl2ZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSwgeW91IGNhbiBpbXBsZW1lbnQKKyAgIGl0IG1hbnVhbGx5IHVzaW5nIGEgbG9jay4gRnVuY3Rpb25zIG9mIHRocmVhZC5jIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UKKyAgIHRoZXkgdXNlIFB5TWVtX1Jhd01hbGxvYygpIHdoaWNoIGxlYWRzIHRvIGEgcmVlbnRyYW50IGNhbGwuICovCisjaWYgIShkZWZpbmVkKF9QT1NJWF9USFJFQURTKSB8fCBkZWZpbmVkKE5UX1RIUkVBRFMpKQorIyAgZXJyb3IgIm5lZWQgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIgorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleTsKKworLyogQW55IG5vbi1OVUxMIHBvaW50ZXIgY2FuIGJlIHVzZWQgKi8KKyNkZWZpbmUgUkVFTlRSQU5UIFB5X1RydWUKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHZvaWQgKnB0ciA9IFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChwdHIgPT0gUkVFTlRSQU5UKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KHJlZW50cmFudCA9PSAwIHx8IHJlZW50cmFudCA9PSAxKTsKKyAgICBpZiAocmVlbnRyYW50KSB7CisgICAgICAgIGFzc2VydChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpID09IE5VTEwpOworICAgICAgICBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVFTlRSQU5UKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEZJWE1FOiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKCkgY2Fubm90IGJlIHVzZWQgdG8gc2V0IHRoZSBmbGFnCisgICAgICAgICAgIHRvIHplcm8sIGJlY2F1c2UgaXQgZG9lcyBub3RoaW5nIGlmIHRoZSB2YXJpYWJsZSBoYXMgYWxyZWFkeQorICAgICAgICAgICBhIHZhbHVlIHNldC4gKi8KKyAgICAgICAgUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyAgICB9Cit9CisKKyNlbHNlCisKKy8qIFdJVEhfVEhSRUFEIG5vdCBkZWZpbmVkOiBQeXRob24gY29tcGlsZWQgd2l0aG91dCB0aHJlYWRzLAorICAgb3IgVFJBQ0VfUkFXX01BTExPQyBub3QgZGVmaW5lZDogdmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gMDsKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yZWVudHJhbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KCFyZWVudHJhbnQgfHwgIWdldF9yZWVudHJhbnQoKSk7CisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gcmVlbnRyYW50OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2hhc2h0YWJsZV9jb21wYXJlX3VuaWNvZGUoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5KQoreworICAgIGlmIChrZXkgIT0gTlVMTCAmJiBlbnRyeS0+a2V5ICE9IE5VTEwpCisgICAgICAgIHJldHVybiAoUHlVbmljb2RlX0NvbXBhcmUoKFB5T2JqZWN0ICopa2V5LCAoUHlPYmplY3QgKillbnRyeS0+a2V5KSA9PSAwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBrZXkgPT0gZW50cnktPmtleTsKK30KKworc3RhdGljIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgaGFzaHRhYmxlX2FsbG9jID0ge21hbGxvYywgZnJlZX07CisKK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKgoraGFzaHRhYmxlX25ldyhzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9mdW5jLCBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJmhhc2h0YWJsZV9hbGxvYyk7Cit9CisKK3N0YXRpYyB2b2lkKgorcmF3X21hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9ycy5yYXcubWFsbG9jKGFsbG9jYXRvcnMucmF3LmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCityYXdfZnJlZSh2b2lkICpwdHIpCit7CisgICAgYWxsb2NhdG9ycy5yYXcuZnJlZShhbGxvY2F0b3JzLnJhdy5jdHgsIHB0cik7Cit9CisKK3N0YXRpYyBQeV91aGFzaF90CitoYXNodGFibGVfaGFzaF90cmFjZWJhY2soY29uc3Qgdm9pZCAqa2V5KQoreworICAgIGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sgPSBrZXk7CisgICAgcmV0dXJuIHRyYWNlYmFjay0+aGFzaDsKK30KKworc3RhdGljIGludAoraGFzaHRhYmxlX2NvbXBhcmVfdHJhY2ViYWNrKGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpCit7CisgICAgY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazIgPSBoZS0+a2V5OworICAgIGNvbnN0IGZyYW1lX3QgKmZyYW1lMSwgKmZyYW1lMjsKKyAgICBpbnQgaTsKKworICAgIGlmICh0cmFjZWJhY2sxLT5uZnJhbWUgIT0gdHJhY2ViYWNrMi0+bmZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoaT0wOyBpIDwgdHJhY2ViYWNrMS0+bmZyYW1lOyBpKyspIHsKKyAgICAgICAgZnJhbWUxID0gJnRyYWNlYmFjazEtPmZyYW1lc1tpXTsKKyAgICAgICAgZnJhbWUyID0gJnRyYWNlYmFjazItPmZyYW1lc1tpXTsKKworICAgICAgICBpZiAoZnJhbWUxLT5saW5lbm8gIT0gZnJhbWUyLT5saW5lbm8pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZnJhbWUxLT5maWxlbmFtZSAhPSBmcmFtZTItPmZpbGVuYW1lKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NvbXBhcmUoZnJhbWUxLT5maWxlbmFtZSwgZnJhbWUyLT5maWxlbmFtZSkgIT0gMCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2dldF9mcmFtZShQeUZyYW1lT2JqZWN0ICpweWZyYW1lLCBmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeUNvZGVPYmplY3QgKmNvZGU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBmcmFtZS0+ZmlsZW5hbWUgPSB1bmtub3duX2ZpbGVuYW1lOworICAgIGZyYW1lLT5saW5lbm8gPSBQeUZyYW1lX0dldExpbmVOdW1iZXIocHlmcmFtZSk7CisgICAgYXNzZXJ0KGZyYW1lLT5saW5lbm8gPj0gMCk7CisgICAgaWYgKGZyYW1lLT5saW5lbm8gPCAwKQorICAgICAgICBmcmFtZS0+bGluZW5vID0gMDsKKworICAgIGNvZGUgPSBweWZyYW1lLT5mX2NvZGU7CisgICAgaWYgKGNvZGUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBjb2RlIG9iamVjdCBvZiB0aGUgZnJhbWUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvZGUtPmNvX2ZpbGVuYW1lID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgZmlsZW5hbWUgb2YgdGhlIGNvZGUgb2JqZWN0Iik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpbGVuYW1lID0gY29kZS0+Y29fZmlsZW5hbWU7CisgICAgYXNzZXJ0KGZpbGVuYW1lICE9IE5VTEwpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlbmFtZSkpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGFuIHVuaWNvZGUgc3RyaW5nIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVB5VW5pY29kZV9JU19SRUFEWShmaWxlbmFtZSkpIHsKKyAgICAgICAgLyogRG9uJ3QgbWFrZSBhIFVuaWNvZGUgc3RyaW5nIHJlYWR5IHRvIGF2b2lkIHJlZW50cmFudCBjYWxscworICAgICAgICAgICB0byB0cmFjZW1hbGxvY19tYWxsb2MoKSBvciB0cmFjZW1hbGxvY19yZWFsbG9jKCkgKi8KKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGEgcmVhZHkgdW5pY29kZSBzdHJpbmciKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogaW50ZXJuIHRoZSBmaWxlbmFtZSAqLworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkodHJhY2VtYWxsb2NfZmlsZW5hbWVzLCBmaWxlbmFtZSk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSAoUHlPYmplY3QgKillbnRyeS0+a2V5OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogdHJhY2VtYWxsb2NfZmlsZW5hbWVzIGlzIHJlc3BvbnNpYmxlIHRvIGtlZXAgYSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gdGhlIGZpbGVuYW1lICovCisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY19maWxlbmFtZXMsIGZpbGVuYW1lLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSBmaWxlbmFtZSIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0aGUgdHJhY2VtYWxsb2NfZmlsZW5hbWVzIHRhYmxlIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlbmFtZSAqLworICAgIGZyYW1lLT5maWxlbmFtZSA9IGZpbGVuYW1lOworfQorCitzdGF0aWMgUHlfdWhhc2hfdAordHJhY2ViYWNrX2hhc2godHJhY2ViYWNrX3QgKnRyYWNlYmFjaykKK3sKKyAgICAvKiBjb2RlIGJhc2VkIG9uIHR1cGxlaGFzaCgpIG9mIE9iamVjdHMvdHVwbGVvYmplY3QuYyAqLworICAgIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIFB5X2hhc2hfdCB5OworICAgIGludCBsZW4gPSB0cmFjZWJhY2stPm5mcmFtZTsKKyAgICBQeV91aGFzaF90IG11bHQgPSBfUHlIQVNIX01VTFRJUExJRVI7CisgICAgZnJhbWVfdCAqZnJhbWU7CisKKyAgICB4ID0gMHgzNDU2NzhVTDsKKyAgICBmcmFtZSA9IHRyYWNlYmFjay0+ZnJhbWVzOworICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CisgICAgICAgIHkgPSBQeU9iamVjdF9IYXNoKGZyYW1lLT5maWxlbmFtZSk7CisgICAgICAgIHkgXj0gZnJhbWUtPmxpbmVubzsKKyAgICAgICAgZnJhbWUrKzsKKworICAgICAgICB4ID0gKHggXiB5KSAqIG11bHQ7CisgICAgICAgIC8qIHRoZSBjYXN0IG1pZ2h0IHRydW5jYXRlIGxlbjsgdGhhdCBkb2Vzbid0IGNoYW5nZSBoYXNoIHN0YWJpbGl0eSAqLworICAgICAgICBtdWx0ICs9IChQeV9oYXNoX3QpKDgyNTIwVUwgKyBsZW4gKyBsZW4pOworICAgIH0KKyAgICB4ICs9IDk3NTMxVUw7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrKQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKyAgICBQeUZyYW1lT2JqZWN0ICpweWZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICB0c3RhdGUgPSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpOworI2Vsc2UKKyAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworI2VuZGlmCisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAocHlmcmFtZSA9IHRzdGF0ZS0+ZnJhbWU7IHB5ZnJhbWUgIT0gTlVMTDsgcHlmcmFtZSA9IHB5ZnJhbWUtPmZfYmFjaykgeworICAgICAgICB0cmFjZW1hbGxvY19nZXRfZnJhbWUocHlmcmFtZSwgJnRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXSk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0uZmlsZW5hbWUgIT0gTlVMTCk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0ubGluZW5vID49IDApOworICAgICAgICB0cmFjZWJhY2stPm5mcmFtZSsrOworICAgICAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gdHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB0cmFjZWJhY2tfdCAqCit0cmFjZWJhY2tfbmV3KHZvaWQpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgLyogZ2V0IGZyYW1lcyAqLworICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jX3RyYWNlYmFjazsKKyAgICB0cmFjZWJhY2stPm5mcmFtZSA9IDA7CisgICAgdHJhY2ViYWNrX2dldF9mcmFtZXModHJhY2ViYWNrKTsKKyAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gMCkKKyAgICAgICAgcmV0dXJuICZ0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisgICAgdHJhY2ViYWNrLT5oYXNoID0gdHJhY2ViYWNrX2hhc2godHJhY2ViYWNrKTsKKworICAgIC8qIGludGVybiB0aGUgdHJhY2ViYWNrICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2spOworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIHRyYWNlYmFjayA9ICh0cmFjZWJhY2tfdCAqKWVudHJ5LT5rZXk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB0cmFjZWJhY2tfdCAqY29weTsKKyAgICAgICAgc2l6ZV90IHRyYWNlYmFja19zaXplOworCisgICAgICAgIHRyYWNlYmFja19zaXplID0gVFJBQ0VCQUNLX1NJWkUodHJhY2ViYWNrLT5uZnJhbWUpOworCisgICAgICAgIGNvcHkgPSByYXdfbWFsbG9jKHRyYWNlYmFja19zaXplKTsKKyAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBtYWxsb2MgZmFpbGVkIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweShjb3B5LCB0cmFjZWJhY2ssIHRyYWNlYmFja19zaXplKTsKKworICAgICAgICBpZiAoX1B5X2hhc2h0YWJsZV9zZXQodHJhY2VtYWxsb2NfdHJhY2ViYWNrcywgY29weSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICByYXdfZnJlZShjb3B5KTsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIHRyYWNlYmFjazogcHV0ZGF0YSBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdHJhY2ViYWNrID0gY29weTsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlYmFjazsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfbG9nX2FsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKKyAgICB0cmFjZV90IHRyYWNlOworICAgIGludCByZXM7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tfbmV3KCk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0cmFjZS5zaXplID0gc2l6ZTsKKyAgICB0cmFjZS50cmFjZWJhY2sgPSB0cmFjZWJhY2s7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHJlcyA9IF9QeV9IQVNIVEFCTEVfU0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IDw9IFBZX1NJWkVfTUFYIC0gc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgKz0gc2l6ZTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPiB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkpCisgICAgICAgICAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIH0KKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfbG9nX2ZyZWUodm9pZCAqcHRyKQoreworICAgIHRyYWNlX3QgdHJhY2U7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGlmIChfUHlfaGFzaHRhYmxlX3BvcCh0cmFjZW1hbGxvY190cmFjZXMsIHB0ciwgJnRyYWNlLCBzaXplb2YodHJhY2UpKSkgeworICAgICAgICBhc3NlcnQodHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA+PSB0cmFjZS5zaXplKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSAtPSB0cmFjZS5zaXplOworICAgIH0KKyAgICBUQUJMRVNfVU5MT0NLKCk7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUsIGludCBnaWxfaGVsZCkKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfTWFsbG9jKCkgY2FsbHMgUHlNZW1fTWFsbG9jKCkKKyAgICAgICBmb3IgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLiBQeUdJTFN0YXRlX0Vuc3VyZSgpIG1heSBjYWxsCisgICAgICAgUHlNZW1fUmF3TWFsbG9jKCkgaW5kaXJlY3RseSB3aGljaCB3b3VsZCBjYWxsIFB5R0lMU3RhdGVfRW5zdXJlKCkgaWYKKyAgICAgICByZWVudHJhbnQgYXJlIG5vdCBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworI2lmZGVmIFdJVEhfVEhSRUFECisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGlmICghZ2lsX2hlbGQpCisgICAgICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZWxzZQorICAgIGFzc2VydChnaWxfaGVsZCk7CisjZW5kaWYKKyNlbmRpZgorICAgIHB0ciA9IGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2xvZ19hbGxvYyhwdHIsIHNpemUpIDwgMCkgeworICAgICAgICAgICAgLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworICAgICAgICAgICAgcHRyID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBzZXRfcmVlbnRyYW50KDApOworCisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorICAgIGlmICghZ2lsX2hlbGQpCisgICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxfc3RhdGUpOworI2VuZGlmCisKKyAgICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSwgaW50IGdpbF9oZWxkKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyNpZiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpICYmIGRlZmluZWQoV0lUSF9USFJFQUQpCisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxfc3RhdGU7CisjZW5kaWYKKyAgICB2b2lkICpwdHIyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICAvKiBSZWVudHJhbnQgY2FsbCB0byBQeU1lbV9SZWFsbG9jKCkgYW5kIFB5TWVtX1Jhd1JlYWxsb2MoKS4KKyAgICAgICAgICAgRXhhbXBsZTogUHlNZW1fUmF3UmVhbGxvYygpIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHB5bWFsbG9jCisgICAgICAgICAgIChfUHlPYmplY3RfTWFsbG9jKCkgYW5kICBfUHlPYmplY3RfUmVhbGxvYygpKSB0byBhbGxvY2F0ZSBhIG5ldworICAgICAgICAgICBhcmVuYSAobmV3X2FyZW5hKCkpLiAqLworICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICAgICAgaWYgKHB0cjIgIT0gTlVMTCAmJiBwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2xvZ19mcmVlKHB0cik7CisKKyAgICAgICAgcmV0dXJuIHB0cjI7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeU9iamV0X1JlYWxsb2MoKSBjYWxscyBQeU1lbV9SZWFsbG9jKCkgZm9yCisgICAgICAgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLiBQeUdJTFN0YXRlX0Vuc3VyZSgpIG1heSBjYWxsCisgICAgICAgUHlNZW1fUmF3TWFsbG9jKCkgaW5kaXJlY3RseSB3aGljaCB3b3VsZCBjYWxsIFB5R0lMU3RhdGVfRW5zdXJlKCkgaWYKKyAgICAgICByZWVudHJhbnQgYXJlIG5vdCBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworI2lmZGVmIFdJVEhfVEhSRUFECisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGlmICghZ2lsX2hlbGQpCisgICAgICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZWxzZQorICAgIGFzc2VydChnaWxfaGVsZCk7CisjZW5kaWYKKyNlbmRpZgorICAgIHB0cjIgPSBhbGxvYy0+cmVhbGxvYyhhbGxvYy0+Y3R4LCBwdHIsIG5ld19zaXplKTsKKworICAgIGlmIChwdHIyICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiByZXNpemUgKi8KKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2xvZ19mcmVlKHB0cik7CisKKyAgICAgICAgICAgIGlmICh0cmFjZW1hbGxvY19sb2dfYWxsb2MocHRyMiwgbmV3X3NpemUpIDwgMCkgeworICAgICAgICAgICAgICAgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gVGhlIGVycm9yIGNhbm5vdCBiZSByZXBvcnRlZCB0bworICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIsIGJlY2F1c2UgcmVhbGxvYygpIG1heSBhbHJlYWR5IGhhdmUgc2hyaW5rZWQgdGhlCisgICAgICAgICAgICAgICAgICAgbWVtb3J5IGJsb2NrIGFuZCBzbyByZW1vdmVkIGJ5dGVzLgorCisgICAgICAgICAgICAgICAgICAgVGhpcyBjYXNlIGlzIHZlcnkgdW5saWtlbHkgc2luY2Ugd2UganVzdCByZWxlYXNlZCBhbiBoYXNoCisgICAgICAgICAgICAgICAgICAgZW50cnksIHNvIHdlIGhhdmUgZW5vdWdoIGZyZWUgYnl0ZXMgdG8gYWxsb2NhdGUgdGhlIG5ldworICAgICAgICAgICAgICAgICAgIGVudHJ5LiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogbmV3IGFsbG9jYXRpb24gKi8KKyAgICAgICAgICAgIGlmICh0cmFjZW1hbGxvY19sb2dfYWxsb2MocHRyMiwgbmV3X3NpemUpIDwgMCkgeworICAgICAgICAgICAgICAgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICAgICAgICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cjIpOworICAgICAgICAgICAgICAgIHB0cjIgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHNldF9yZWVudHJhbnQoMCk7CisKKyNpZiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpICYmIGRlZmluZWQoV0lUSF9USFJFQUQpCisgICAgaWYgKCFnaWxfaGVsZCkKKyAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CisjZW5kaWYKKworICAgIHJldHVybiBwdHIyOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgICAvKiBHSUwgY2Fubm90IGJlIGxvY2tlZCBpbiBQeU1lbV9SYXdGcmVlKCkgYmVjYXVzZSBpdCB3b3VsZCBpbnRyb2R1Y2UKKyAgICAgICAgYSBkZWFkbG9jayBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKS4gKi8KKworICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cik7CisgICAgdHJhY2VtYWxsb2NfbG9nX2ZyZWUocHRyKTsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19tYWxsb2NfZ2lsKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUsIDEpOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3JlYWxsb2NfZ2lsKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplLCAxKTsKK30KKworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X21hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplLCAwKTsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSwgMCk7Cit9CisjZW5kaWYKKworc3RhdGljIGludAordHJhY2VtYWxsb2NfY2xlYXJfZmlsZW5hbWUoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordHJhY2ViYWNrX2ZyZWVfdHJhY2ViYWNrKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICByYXdfZnJlZSh0cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCisvKiByZWVudHJhbnQgZmxhZyBtdXN0IGJlIHNldCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIEdJTCBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19jbGVhcl90cmFjZXModm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFRoZSBHSUwgcHJvdGVjdHMgdmFyaWFibGVzIGFnYWludCBjb25jdXJyZW50IGFjY2VzcyAqLworICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBEaXNhYmxlIGFsc28gcmVlbnRyYW50IGNhbGxzIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIHRvIG5vdCBhZGQgYSBuZXcKKyAgICAgICB0cmFjZSB3aGlsZSB3ZSBhcmUgY2xlYXJpbmcgdHJhY2VzICovCisgICAgYXNzZXJ0KGdldF9yZWVudHJhbnQoKSk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKyAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSAwOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2ssIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfZmlsZW5hbWVzLCB0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZSwgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY19maWxlbmFtZXMpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19pbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19GSU5BTElaRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGhhcyBiZWVuIHVubG9hZGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9IFB5VGhyZWFkX2NyZWF0ZV9rZXkoKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9PSAtMSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgIHRhYmxlc19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbm5vdCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYylQeU9iamVjdF9IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZSk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyloYXNodGFibGVfaGFzaF90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKWhhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZXMgPSBoYXNodGFibGVfbmV3KHNpemVvZih0cmFjZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19maWxlbmFtZXMgPT0gTlVMTCB8fCB0cmFjZW1hbGxvY190cmFjZWJhY2tzID09IE5VTEwKKyAgICAgICAgfHwgdHJhY2VtYWxsb2NfdHJhY2VzID09IE5VTEwpCisgICAgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdW5rbm93bl9maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKyAgICBpZiAodW5rbm93bl9maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnVua25vd25fZmlsZW5hbWUpOworCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLm5mcmFtZSA9IDE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5saW5lbm8gPSAwOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5oYXNoID0gdHJhY2ViYWNrX2hhc2goJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjayk7CisKKyAgICAvKiBEaXNhYmxlIHRyYWNpbmcgYWxsb2NhdGlvbnMgdW50aWwgaG9va3MgYXJlIGluc3RhbGxlZC4gU2V0CisgICAgICAgYWxzbyB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2RlaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgIT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybjsKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19GSU5BTElaRUQ7CisKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisKKyAgICAvKiBkZXN0cm95IGhhc2ggdGFibGVzICovCisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayh0YWJsZXNfbG9jayk7CisgICAgICAgIHRhYmxlc19sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisjZW5kaWYKKworICAgIFB5X1hERUNSRUYodW5rbm93bl9maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3N0YXJ0KGludCBtYXhfbmZyYW1lKQoreworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykgeworICAgICAgICAvKiBob29rIGFscmVhZHkgaW5zdGFsbGVkOiBkbyBub3RoaW5nICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICh0cmFjZW1hbGxvY19hdGV4aXRfcmVnaXN0ZXIoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydCgxIDw9IG1heF9uZnJhbWUgJiYgbWF4X25mcmFtZSA8PSBNQVhfTkZSQU1FKTsKKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IG1heF9uZnJhbWU7CisKKyAgICAvKiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgKi8KKyAgICBzaXplID0gVFJBQ0VCQUNLX1NJWkUobWF4X25mcmFtZSk7CisgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9PSBOVUxMKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSByYXdfbWFsbG9jKHNpemUpOworICAgIGlmICh0cmFjZW1hbGxvY190cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMucmF3OworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworI2VuZGlmCisKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yZWFsbG9jX2dpbDsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm1lbTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm9iajsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19zdG9wKHZvaWQpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CisKKyAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCisgICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyNlbmRpZgorICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworCisgICAgLyogcmVsZWFzZSBtZW1vcnkgKi8KKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKKyAgICByYXdfZnJlZSh0cmFjZW1hbGxvY190cmFjZWJhY2spOworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2xpbmVub19hc19vYmooaW50IGxpbmVubykKK3sKKyAgICBpZiAobGluZW5vID49IDApCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobGluZW5vKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2MsCisgICAgImlzX3RyYWNpbmcoKS0+Ym9vbFxuIgorICAgICJcbiIKKyAgICAiVHJ1ZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyxcbiIKKyAgICAiRmFsc2Ugb3RoZXJ3aXNlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19pc190cmFjaW5nKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvYywKKyAgICAiY2xlYXJfdHJhY2VzKClcbiIKKyAgICAiXG4iCisgICAgIkNsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKCk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitmcmFtZV90b19weW9iamVjdChmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeU9iamVjdCAqZnJhbWVfb2JqLCAqbGluZW5vX29iajsKKworICAgIGZyYW1lX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChmcmFtZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhbWUtPmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGZyYW1lLT5maWxlbmFtZSA9IFB5X05vbmU7CisgICAgUHlfSU5DUkVGKGZyYW1lLT5maWxlbmFtZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDAsIGZyYW1lLT5maWxlbmFtZSk7CisKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBsaW5lbm9fb2JqID0gbGluZW5vX2FzX29iaihmcmFtZS0+bGluZW5vKTsKKyAgICBpZiAobGluZW5vX29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihmcmFtZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDEsIGxpbmVub19vYmopOworCisgICAgcmV0dXJuIGZyYW1lX29iajsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlYmFja190ICp0cmFjZWJhY2ssIF9QeV9oYXNodGFibGVfdCAqaW50ZXJuX3RhYmxlKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpmcmFtZXMsICpmcmFtZTsKKworICAgIGlmIChpbnRlcm5fdGFibGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9HRVQoaW50ZXJuX3RhYmxlLCB0cmFjZWJhY2ssIGZyYW1lcykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIGZyYW1lczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lcyA9IFB5VHVwbGVfTmV3KHRyYWNlYmFjay0+bmZyYW1lKTsKKyAgICBpZiAoZnJhbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2stPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWVfdG9fcHlvYmplY3QoJnRyYWNlYmFjay0+ZnJhbWVzW2ldKTsKKyAgICAgICAgaWYgKGZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZXMsIGksIGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfU0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZyYW1lcyk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogaW50ZXJuX3RhYmxlIGtlZXBzIGEgbmV3IHJlZmVyZW5jZSB0byBmcmFtZXMgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZyYW1lcyk7CisgICAgfQorICAgIHJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlX3RvX3B5b2JqZWN0KHRyYWNlX3QgKnRyYWNlLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90cmFjZWJhY2tzKQoreworICAgIFB5T2JqZWN0ICp0cmFjZV9vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplLCAqdHJhY2ViYWNrOworCisgICAgdHJhY2Vfb2JqID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHRyYWNlX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNpemUgPSBQeUxvbmdfRnJvbVNpemVfdCh0cmFjZS0+c2l6ZSk7CisgICAgaWYgKHNpemUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAwLCBzaXplKTsKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja190b19weW9iamVjdCh0cmFjZS0+dHJhY2ViYWNrLCBpbnRlcm5fdHJhY2ViYWNrcyk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0cmFjZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cmFjZV9vYmosIDEsIHRyYWNlYmFjayk7CisKKyAgICByZXR1cm4gdHJhY2Vfb2JqOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZXM7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZWJhY2tzOworICAgIFB5T2JqZWN0ICpsaXN0OworfSBnZXRfdHJhY2VzX3Q7CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2dldF90cmFjZXNfZmlsbChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgZ2V0X3RyYWNlc190ICpnZXRfdHJhY2VzID0gdXNlcl9kYXRhOworICAgIHRyYWNlX3QgKnRyYWNlOworICAgIFB5T2JqZWN0ICp0cmFjZW1hbGxvY19vYmo7CisgICAgaW50IHJlczsKKworICAgIHRyYWNlID0gKHRyYWNlX3QgKilfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworCisgICAgdHJhY2VtYWxsb2Nfb2JqID0gdHJhY2VfdG9fcHlvYmplY3QodHJhY2UsIGdldF90cmFjZXMtPnRyYWNlYmFja3MpOworICAgIGlmICh0cmFjZW1hbGxvY19vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXMgPSBQeUxpc3RfQXBwZW5kKGdldF90cmFjZXMtPmxpc3QsIHRyYWNlbWFsbG9jX29iaik7CisgICAgUHlfREVDUkVGKHRyYWNlbWFsbG9jX29iaik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IChQeU9iamVjdCAqKV9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2MsCisgICAgIl9nZXRfdHJhY2VzKCkgLT4gbGlzdFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLlxuIgorICAgICJSZXR1cm4gYSBsaXN0IG9mIChzaXplOiBpbnQsIHRyYWNlYmFjazogdHVwbGUpIHR1cGxlcy5cbiIKKyAgICAidHJhY2ViYWNrIGlzIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGdldF90cmFjZXNfdCBnZXRfdHJhY2VzOworICAgIGludCBlcnI7CisKKyAgICBnZXRfdHJhY2VzLnRyYWNlcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy50cmFjZWJhY2tzID0gTlVMTDsKKyAgICBnZXRfdHJhY2VzLmxpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChnZXRfdHJhY2VzLmxpc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7CisKKyAgICAvKiB0aGUgdHJhY2ViYWNrIGhhc2ggdGFibGUgaXMgdXNlZCB0ZW1wb3JhcmlseSB0byBpbnRlcm4gdHJhY2ViYWNrIHR1cGxlCisgICAgICAgb2YgKGZpbGVuYW1lLCBsaW5lbm8pIHR1cGxlcyAqLworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IGhhc2h0YWJsZV9uZXcoc2l6ZW9mKFB5T2JqZWN0ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBfUHlfaGFzaHRhYmxlX2NvcHkodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9mb3JlYWNoKGdldF90cmFjZXMudHJhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwsICZnZXRfdHJhY2VzKTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBnb3RvIGZpbmFsbHk7CisKK2Vycm9yOgorICAgIFB5X0NMRUFSKGdldF90cmFjZXMubGlzdCk7CisKK2ZpbmFsbHk6CisgICAgaWYgKGdldF90cmFjZXMudHJhY2ViYWNrcyAhPSBOVUxMKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfcHlvYmplY3RfZGVjcmVmX2NiLCBOVUxMKTsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2ViYWNrcyk7CisgICAgfQorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlcyAhPSBOVUxMKQorICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZ2V0X3RyYWNlcy50cmFjZXMpOworCisgICAgcmV0dXJuIGdldF90cmFjZXMubGlzdDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvYywKKyAgICAiX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iailcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0IG9iaiB3YXMgYWxsb2NhdGVkLlxuIgorICAgICJSZXR1cm4gYSB0dXBsZSBvZiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpIHR1cGxlcy5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBOb25lIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgZGlzYWJsZWQgb3IgZGlkIG5vdFxuIgorICAgICJ0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnR5cGU7CisgICAgdm9pZCAqcHRyOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IGZvdW5kOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICB0eXBlID0gUHlfVFlQRShvYmopOworICAgIGlmIChQeVR5cGVfSVNfR0ModHlwZSkpCisgICAgICAgIHB0ciA9ICh2b2lkICopKChjaGFyICopb2JqIC0gc2l6ZW9mKFB5R0NfSGVhZCkpOworICAgIGVsc2UKKyAgICAgICAgcHRyID0gKHZvaWQgKilvYmo7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGZvdW5kID0gX1B5X0hBU0hUQUJMRV9HRVQodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsIHRyYWNlKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHJldHVybiB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UudHJhY2ViYWNrLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfYXRleGl0KFB5T2JqZWN0ICpzZWxmKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKyAgICB0cmFjZW1hbGxvY19kZWluaXQoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGF0ZXhpdF9tZXRob2QgPSB7CisgICAgIl9hdGV4aXQiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfYXRleGl0LCBNRVRIX05PQVJHUywgTlVMTH07CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2F0ZXhpdF9yZWdpc3Rlcih2b2lkKQoreworICAgIFB5T2JqZWN0ICptZXRob2QgPSBOVUxMLCAqYXRleGl0ID0gTlVMTCwgKmZ1bmMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaW50IHJldCA9IC0xOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5hdGV4aXRfcmVnaXN0ZXJlZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdHJhY2VtYWxsb2NfY29uZmlnLmF0ZXhpdF9yZWdpc3RlcmVkID0gMTsKKworICAgIC8qIHByaXZhdGUgZnVuY3Rpb25zICovCisgICAgbWV0aG9kID0gUHlDRnVuY3Rpb25fTmV3KCZhdGV4aXRfbWV0aG9kLCBOVUxMKTsKKyAgICBpZiAobWV0aG9kID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGF0ZXhpdCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYXRleGl0Iik7CisgICAgaWYgKGF0ZXhpdCA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfV2FybihQeUV4Y19JbXBvcnRXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAiYXRleGl0IG1vZHVsZSBpcyBtaXNzaW5nOiAiCisgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYXV0b21hdGljYWxseSBkaXNhYmxlIHRyYWNlbWFsbG9jIGF0IGV4aXQiKSkKKyAgICAgICAgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhhdGV4aXQsICJyZWdpc3RlciIpOworICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jLCAiTyIsIG1ldGhvZCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgICByZXQgPSAwOworCitkb25lOgorICAgIFB5X1hERUNSRUYobWV0aG9kKTsKKyAgICBQeV9YREVDUkVGKGZ1bmMpOworICAgIFB5X1hERUNSRUYoYXRleGl0KTsKKyAgICByZXR1cm4gcmV0OworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2Nfc3RhcnRfZG9jLAorICAgICJzdGFydChuZnJhbWU6IGludD0xKVxuIgorICAgICJcbiIKKyAgICAiU3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zLiBTZXQgYWxzbyB0aGUgbWF4aW11bSBudW1iZXIgXG4iCisgICAgIm9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiBhIHRyYWNlIHRvIG5mcmFtZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2Nfc3RhcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3QgbmZyYW1lID0gMTsKKyAgICBpbnQgbmZyYW1lX2ludDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46c3RhcnQiLCAmbmZyYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobmZyYW1lIDwgMSB8fCBuZnJhbWUgPiBNQVhfTkZSQU1FKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInRoZSBudW1iZXIgb2YgZnJhbWVzIG11c3QgYmUgaW4gcmFuZ2UgWzE7ICVpXSIsCisgICAgICAgICAgICAgICAgICAgICAoaW50KU1BWF9ORlJBTUUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmZyYW1lX2ludCA9IFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBQeV9zc2l6ZV90LCBpbnQpOworCisgICAgaWYgKHRyYWNlbWFsbG9jX3N0YXJ0KG5mcmFtZV9pbnQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0b3BfZG9jLAorICAgICJzdG9wKClcbiIKKyAgICAiXG4iCisgICAgIlN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBjbGVhciB0cmFjZXNcbiIKKyAgICAib2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19zdG9wKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHRyYWNlbWFsbG9jX3N0b3AoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXRfZG9jLAorICAgICJnZXRfdHJhY2ViYWNrX2xpbWl0KCkgLT4gaW50XG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFja1xuIgorICAgICJvZiBhIHRyYWNlLlxuIgorICAgICJcbiIKKyAgICAiQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzXG4iCisgICAgInRoZSBtb3N0IHJlY2VudCBmcmFtZTogdGhlIGxpbWl0IGlzIDEuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSk7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5X2RvYywKKyAgICAiZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpIC0+IGludFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZVxuIgorICAgICJ1c2VkIGludGVybmFsbHkgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHNpemVfdCBzaXplOworICAgIFB5T2JqZWN0ICpzaXplX29iajsKKworICAgIHNpemUgPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisgICAgc2l6ZSArPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfZmlsZW5hbWVzKTsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgc2l6ZSArPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBzaXplX29iaiA9IFB5TG9uZ19Gcm9tU2l6ZV90KHNpemUpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOIiwgc2l6ZV9vYmopOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnlfZG9jLAorICAgICJnZXRfdHJhY2VkX21lbW9yeSgpIC0+IChpbnQsIGludClcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgY3VycmVudCBzaXplIGFuZCBwZWFrIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0cmFjZWRcbiIKKyAgICAiYnkgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBhcyBhIHR1cGxlOiAoY3VycmVudDogaW50LCBwZWFrOiBpbnQpLiIpOworCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHNpemUsIHBlYWtfc2l6ZTsKKyAgICBQeU9iamVjdCAqc2l6ZV9vYmosICpwZWFrX3NpemVfb2JqOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpIiwgMCwgMCk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHNpemUgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBzaXplX29iaiA9IFB5TG9uZ19Gcm9tU2l6ZV90KHNpemUpOworICAgIHBlYWtfc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChwZWFrX3NpemUpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTiIsIHNpemVfb2JqLCBwZWFrX3NpemVfb2JqKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7CisgICAgeyJpc190cmFjaW5nIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2lzX3RyYWNpbmcsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19pc190cmFjaW5nX2RvY30sCisgICAgeyJjbGVhcl90cmFjZXMiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvY30sCisgICAgeyJfZ2V0X3RyYWNlcyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2N9LAorICAgIHsiX2dldF9vYmplY3RfdHJhY2ViYWNrIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrLAorICAgICBNRVRIX08sIHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvY30sCisgICAgeyJzdGFydCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19zdGFydCwKKyAgICAgIE1FVEhfVkFSQVJHUywgdHJhY2VtYWxsb2Nfc3RhcnRfZG9jfSwKKyAgICB7InN0b3AiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2Nfc3RvcCwKKyAgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19zdG9wX2RvY30sCisgICAgeyJnZXRfdHJhY2ViYWNrX2xpbWl0IiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXQsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0X2RvY30sCisgICAgeyJnZXRfdHJhY2VtYWxsb2NfbWVtb3J5IiwgKFB5Q0Z1bmN0aW9uKXRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnksCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5X2RvY30sCisgICAgeyJnZXRfdHJhY2VkX21lbW9yeSIsIChQeUNGdW5jdGlvbil0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeSwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5X2RvY30sCisKKyAgICAvKiBzZW50aW5lbCAqLworICAgIHtOVUxMLCBOVUxMfQorfTsKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiRGVidWcgbW9kdWxlIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBtb2R1bGVfZGVmID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3RyYWNlbWFsbG9jIiwKKyAgICBtb2R1bGVfZG9jLAorICAgIDAsIC8qIG5vbi1uZWdhdGl2ZSBzaXplIHRvIGJlIGFibGUgdG8gdW5sb2FkIHRoZSBtb2R1bGUgKi8KKyAgICBtb2R1bGVfbWV0aG9kcywKKyAgICBOVUxMLAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZtb2R1bGVfZGVmKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh0cmFjZW1hbGxvY19pbml0KCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBtOworfQorCitzdGF0aWMgaW50CitwYXJzZV9zeXNfeG9wdGlvbnMoUHlPYmplY3QgKnZhbHVlKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZWxvbmc7CisgICAgbG9uZyBuZnJhbWU7CisKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSk7CisgICAgaWYgKFB5VW5pY29kZV9HZXRMZW5ndGgodmFsdWUpID09IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHZhbHVlbG9uZyA9IFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdCh2YWx1ZSwgMTApOworICAgIGlmICh2YWx1ZWxvbmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbmZyYW1lID0gUHlMb25nX0FzTG9uZyh2YWx1ZWxvbmcpOworICAgIFB5X0RFQ1JFRih2YWx1ZWxvbmcpOworICAgIGlmIChuZnJhbWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBsb25nLCBpbnQpOworfQorCitpbnQKK19QeVRyYWNlTWFsbG9jX0luaXQodm9pZCkKK3sKKyAgICBjaGFyICpwOworICAgIGludCBuZnJhbWU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTlRSQUNFTUFMTE9DIikpICYmICpwICE9ICdcMCcpIHsKKyAgICAgICAgY2hhciAqZW5kcHRyID0gcDsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICB2YWx1ZSA9IHN0cnRvbChwLCAmZW5kcHRyLCAxMCk7CisgICAgICAgIGlmICgqZW5kcHRyICE9ICdcMCcKKyAgICAgICAgICAgIHx8IHZhbHVlIDwgMQorICAgICAgICAgICAgfHwgdmFsdWUgPiBNQVhfTkZSQU1FCisgICAgICAgICAgICB8fCAoZXJybm8gPT0gRVJBTkdFICYmIHZhbHVlID09IFVMT05HX01BWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlBZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IChpbnQpdmFsdWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICp2YWx1ZTsKKworICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGtleSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ0cmFjZW1hbGxvYyIpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcih4b3B0aW9ucywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIC8qIC1YIHRyYWNlbWFsbG9jIGlzIG5vdCB1c2VkICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IHBhcnNlX3N5c194b3B0aW9ucyh2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGlmIChuZnJhbWUgPCAwKSB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCItWCB0cmFjZW1hbGxvYz1ORlJBTUU6IGludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3N0YXJ0KG5mcmFtZSk7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dlYWtyZWYuYyBiL01vZHVsZXMvX3dlYWtyZWYuYwppbmRleCA4ODk5NWI4Li44MGRlNWRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL193ZWFrcmVmLmMKKysrIGIvTW9kdWxlcy9fd2Vha3JlZi5jCkBAIC00LDI1ICs0LDU2IEBACiAjZGVmaW5lIEdFVF9XRUFLUkVGU19MSVNUUFRSKG8pIFwKICAgICAgICAgKChQeVdlYWtSZWZlcmVuY2UgKiopIFB5T2JqZWN0X0dFVF9XRUFLUkVGU19MSVNUUFRSKG8pKQogCisvKltjbGluaWNdCittb2R1bGUgX3dlYWtyZWYKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLwogCi1QeURvY19TVFJWQVIod2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAotImdldHdlYWtyZWZjb3VudChvYmplY3QpIC0tIHJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlc1xuIgotInRvICdvYmplY3QnLiIpOworLypbY2xpbmljXQorCitfd2Vha3JlZi5nZXR3ZWFrcmVmY291bnQgLT4gUHlfc3NpemVfdAorCisgIG9iamVjdDogb2JqZWN0CisgIC8KKworUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvICdvYmplY3QnLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKKyJnZXR3ZWFrcmVmY291bnQob2JqZWN0KVxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byBcJ29iamVjdFwnLiIpOworCisjZGVmaW5lIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0d2Vha3JlZmNvdW50IiwgKFB5Q0Z1bmN0aW9uKV93ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgTUVUSF9PLCBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCitfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisgICAgX3JldHVybl92YWx1ZSA9IF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKG1vZHVsZSwgb2JqZWN0KTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CiAKLSAgICBpZiAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKFB5X1RZUEUob2JqZWN0KSkpIHsKLSAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IEdFVF9XRUFLUkVGU19MSVNUUFRSKG9iamVjdCk7CitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50KCpsaXN0KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKDApOworc3RhdGljIFB5X3NzaXplX3QKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpCisvKltjbGluaWMgY2hlY2tzdW06IDQzNmU4ZmJlMDI5NzQzNDM3NWYwMzlkOGMyZDlmYzNhOWJiZTc3M2NdKi8KK3sKKyAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoIVB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKKyAgICByZXR1cm4gX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpOwogfQogCiAKQEAgLTc4LDggKzEwOSw3IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZgogd2Vha3JlZl9mdW5jdGlvbnNbXSA9ICB7Ci0gICAgeyJnZXR3ZWFrcmVmY291bnQiLCB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgICAgICAgIE1FVEhfTywKLSAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKyAgICBfV0VBS1JFRl9HRVRXRUFLUkVGQ09VTlRfTUVUSE9EREVGCiAgICAgeyJnZXR3ZWFrcmVmcyIsICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzLCAgICAgICAgICAgIE1FVEhfTywKICAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmc19fZG9jX199LAogICAgIHsicHJveHkiLCAgICAgICAgICAgd2Vha3JlZl9wcm94eSwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCkBAIC0xMDYsNyArMTM2LDcgQEAKICAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJndlYWtyZWZtb2R1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIGlmIChtICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKCZfUHlXZWFrcmVmX1JlZlR5cGUpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInJlZiIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193aW5hcGkuYyBiL01vZHVsZXMvX3dpbmFwaS5jCmluZGV4IGM1M2Q1NWEuLjcyNGE0NzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dpbmFwaS5jCisrKyBiL01vZHVsZXMvX3dpbmFwaS5jCkBAIC02Miw2ICs2Miw4IEBACiAKICNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCiAKKyNkZWZpbmUgRFdPUkRfTUFYIDQyOTQ5NjcyOTVVCisKIC8qIEdyYWIgQ2FuY2VsSW9FeCBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCiBzdGF0aWMgaW50IGhhc19DYW5jZWxJb0V4ID0gLTE7CiBzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKTsKQEAgLTEwNSwxNyArMTA3LDM3IEBACiB7CiAgICAgRFdPUkQgYnl0ZXM7CiAgICAgaW50IGVyciA9IEdldExhc3RFcnJvcigpOworCiAgICAgaWYgKHNlbGYtPnBlbmRpbmcpIHsKLSAgICAgICAgLyogbWFrZSBpdCBhIHByb2dyYW1taW5nIGVycm9yIHRvIGRlYWxsb2NhdGUgd2hpbGUgb3BlcmF0aW9uCi0gICAgICAgICAgIGlzIHBlbmRpbmcsIGV2ZW4gaWYgd2UgY2FuIHNhZmVseSBjYW5jZWwgaXQgKi8KICAgICAgICAgaWYgKGNoZWNrX0NhbmNlbElvRXgoKSAmJgotICAgICAgICAgICAgICAgIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkpCi0gICAgICAgICAgICBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZieXRlcywgVFJVRSk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbnMgc3RpbGwgaW4gZmxpZ2h0IHdoaWxlIGRlc3Ryb3lpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJsYXBwZWQgb2JqZWN0LCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giKTsKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICAgICAgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICAgICAgR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmYnl0ZXMsIFRSVUUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIG5vIGxvbmdlciBwZW5kaW5nIC0tIG5vdGhpbmcgdG8gZG8uICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoX1B5X0ZpbmFsaXppbmcgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nIC0tIGdpdmUgYSB3YXJuaW5nLiAgVGhpcworICAgICAgICAgICAgICAgd2lsbCBwcm9iYWJseSBvbmx5IGhhcHBlbiBvbiBXaW5kb3dzIFhQLiAqLworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbnMgc3RpbGwgaW4gZmxpZ2h0IHdoaWxlIGRlc3Ryb3lpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdmVybGFwcGVkIG9iamVjdCwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIik7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcsIGJ1dCB0aGUgcHJvY2VzcyBpcworICAgICAgICAgICAgICAgcHJvYmFibHkgYWJvdXQgdG8gZXhpdCwgc28gd2UgbmVlZCBub3Qgd29ycnkgdG9vIG11Y2gKKyAgICAgICAgICAgICAgIGFib3V0IG1lbW9yeSBsZWFrcy4gIExlYWtpbmcgc2VsZiBwcmV2ZW50cyBhIHBvdGVudGlhbAorICAgICAgICAgICAgICAgY3Jhc2guICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRhZW1vbiB0aHJlYWQgaXMgY2xlYW5lZAorICAgICAgICAgICAgICAgdXAgYXQgZXhpdCAtLSBzZWUgIzE5NTY1LiAgV2Ugb25seSBleHBlY3QgdG8gZ2V0IGhlcmUKKyAgICAgICAgICAgICAgIG9uIFdpbmRvd3MgWFAuICovCisgICAgICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CisgICAgICAgICAgICBTZXRMYXN0RXJyb3IoZXJyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKwogICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKICAgICBTZXRMYXN0RXJyb3IoZXJyKTsKICAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLm9iaikKQEAgLTExNDIsNyArMTE2NCw3IEBACiAgICAgSEFORExFIGhhbmRsZTsKICAgICBQeV9idWZmZXIgX2J1ZiwgKmJ1ZjsKICAgICBQeU9iamVjdCAqYnVmb2JqOwotICAgIERXT1JEIHdyaXR0ZW47CisgICAgRFdPUkQgbGVuLCB3cml0dGVuOwogICAgIEJPT0wgcmV0OwogICAgIGludCB1c2Vfb3ZlcmxhcHBlZCA9IDA7CiAgICAgRFdPUkQgZXJyOwpAQCAtMTE3MCw3ICsxMTkyLDggQEAKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGJ1Zi0+bGVuLCAmd3JpdHRlbiwKKyAgICBsZW4gPSAoRFdPUkQpUHlfTUlOKGJ1Zi0+bGVuLCBEV09SRF9NQVgpOworICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIGJ1Zi0+YnVmLCBsZW4sICZ3cml0dGVuLAogICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkID8gJm92ZXJsYXBwZWQtPm92ZXJsYXBwZWQgOiBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKaW5kZXggOTZjOWU1Yi4uMzQ2NjA2NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJyYXlpdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpKQogewotICAgIHJlZ2lzdGVyIGFycmF5b2JqZWN0ICphcDsKKyAgICBhcnJheW9iamVjdCAqYXA7CiAgICAgYXNzZXJ0KGFycmF5X0NoZWNrKG9wKSk7CiAgICAgYXAgPSAoYXJyYXlvYmplY3QgKilvcDsKICAgICBhc3NlcnQoaT49MCAmJiBpPFB5X1NJWkUoYXApKTsKQEAgLTk2OCw4ICs5NjgsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgIGNvdW50Kys7CkBAIC05OTAsOCArOTk1LDEzIEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaSk7CkBAIC0xMDE2LDYgKzEwMjYsOCBAQAogCiAgICAgZm9yIChpID0gMCwgY21wID0gMCA7IGNtcCA9PSAwICYmIGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgfQpAQCAtMTAyOCw4ICsxMDQwLDEzIEBACiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLApAQCAtMTA2OCw3ICsxMDg1LDkgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoYXJyYXlfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwgKFB5T2JqZWN0ICopTlVMTCkgIT0gMCkgewogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTExNCwxMyArMTEzMywyNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2J1ZmZlcl9pbmZvKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIFB5T2JqZWN0KiByZXR2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMLCAqdjsKKwogICAgIHJldHZhbCA9IFB5VHVwbGVfTmV3KDIpOwogICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAwLCBQeUxvbmdfRnJvbVZvaWRQdHIoc2VsZi0+b2JfaXRlbSkpOwotICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpKFB5X1NJWkUoc2VsZikpKSk7CisgICAgdiA9IFB5TG9uZ19Gcm9tVm9pZFB0cihzZWxmLT5vYl9pdGVtKTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIHYpOworCisgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykoUHlfU0laRShzZWxmKSkpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMSwgdik7CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQpAQCAtMTIwNiw4ICsxMjM3LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9yZXZlcnNlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqcCwgKnE7CisgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKKyAgICBjaGFyICpwLCAqcTsKICAgICAvKiBsaXR0bGUgYnVmZmVyIHRvIGhvbGQgaXRlbXMgd2hpbGUgc3dhcHBpbmcgKi8KICAgICBjaGFyIHRtcFsyNTZdOyAgICAgIC8qIDggaXMgcHJvYmFibHkgZW5vdWdoIC0tIGJ1dCB3aHkgc2tpbXAgKi8KICAgICBhc3NlcnQoKHNpemVfdClpdGVtc2l6ZSA8PSBzaXplb2YodG1wKSk7CkBAIC0xMzg2LDEzICsxNDE3LDE2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJldHVybiBsaXN0OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUih0b2xpc3RfZG9jLApAQCAtMTY2NCwxMSArMTY5OCw4IEBACiBzdGF0aWMgZW51bSBtYWNoaW5lX2Zvcm1hdF9jb2RlCiB0eXBlY29kZV90b19tZm9ybWF0X2NvZGUoY2hhciB0eXBlY29kZSkKIHsKLSNpZmRlZiBXT1JEU19CSUdFTkRJQU4KLSAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDE7Ci0jZWxzZQotICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gMDsKLSNlbmRpZgorICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gUFlfQklHX0VORElBTjsKKwogICAgIHNpemVfdCBpbnRzaXplOwogICAgIGludCBpc19zaWduZWQ7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCmluZGV4IGY2OGQ4MDQuLjk4ODcwMTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwpAQCAtMTAsOCArMTAsNiBAQAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NsZWFudXApICovCiBzdGF0aWMgUHlPYmplY3QgKmF0ZXhpdF9jbGVhcihQeU9iamVjdCosIFB5T2JqZWN0Kik7Ci0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NhbGxmdW5jcykgKi8KLXN0YXRpYyB2b2lkIGF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0Kik7CiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIG1vZHVsZSBvYmplY3QgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlOwogCkBAIC0zMyw2ICszMSwzNSBAQAogI2RlZmluZSBHRVRfQVRFWElUX1NUQVRFKG1vZCkgKChhdGV4aXRtb2R1bGVfc3RhdGUqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCiAKIAorc3RhdGljIHZvaWQKK2F0ZXhpdF9kZWxldGVfY2IoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSwgaW50IGkpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKworICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOworICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7CisgICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKKyAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOworICAgIFB5TWVtX0ZyZWUoY2IpOworfQorCisvKiBDbGVhciBhbGwgY2FsbGJhY2tzIHdpdGhvdXQgY2FsbGluZyB0aGVtICovCitzdGF0aWMgdm9pZAorYXRleGl0X2NsZWFudXAoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7CisgICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGlmIChjYiA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CisgICAgfQorICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKK30KKwogLyogSW5zdGFsbGVkIGludG8gcHl0aG9ucnVuLmMncyBhdGV4aXQgbWVjaGFuaXNtICovCiAKIHN0YXRpYyB2b2lkCkBAIC03OCwzNCArMTA1LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdGV4aXRfY2xlYW51cChtb2R1bGUpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKIAogICAgIGlmIChleGNfdHlwZSkKICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIpOwogfQogCi1zdGF0aWMgdm9pZAotYXRleGl0X2RlbGV0ZV9jYihQeU9iamVjdCAqc2VsZiwgaW50IGkpCi17Ci0gICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotCi0gICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwotICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07Ci0gICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOwotICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7Ci0gICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKLSAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOwotICAgIFB5TWVtX0ZyZWUoY2IpOwotfQotCi1zdGF0aWMgdm9pZAotYXRleGl0X2NsZWFudXAoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnIgPSBhdGV4aXRfY2xlYXIoc2VsZiwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHIpOwotfQotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIE1vZHVsZSBtZXRob2RzLiAqLwogCkBAIC0xOTQsMjEgKzE5OSw1MCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF0ZXhpdF9jbGVhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKKyAgICBhdGV4aXRfY2xlYW51cChHRVRfQVRFWElUX1NUQVRFKHNlbGYpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfXywKKyJfbmNhbGxiYWNrcygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIGV4aXQgZnVuY3Rpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXRleGl0X25jYWxsYmFja3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotICAgIGludCBpOwogCiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChtb2RzdGF0ZS0+bmNhbGxiYWNrcyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBpbnQgaTsKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworCisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7Ci0gICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGF0ZXhpdF9jYWxsYmFjayAqY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKICAgICAgICAgaWYgKGNiID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICBQeV9WSVNJVChjYi0+ZnVuYyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5hcmdzKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmt3YXJncyk7CiAgICAgfQotICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKLSAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRleGl0X21fY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjE2LDYgKzI1MCw3IEBACiB7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUobSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogICAgIFB5TWVtX0ZyZWUobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MpOwogfQogCkBAIC0yNDYsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGVxIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZXEpCi0gICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjYwLDYgKzI5NSw4IEBACiAgICAgICAgIGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfX30sCiAgICAgeyJfcnVuX2V4aXRmdW5jcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X3J1bl9leGl0ZnVuY3MsIE1FVEhfTk9BUkdTLAogICAgICAgICBhdGV4aXRfcnVuX2V4aXRmdW5jc19fZG9jX199LAorICAgIHsiX25jYWxsYmFja3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9uY2FsbGJhY2tzLCBNRVRIX05PQVJHUywKKyAgICAgICAgYXRleGl0X25jYWxsYmFja3NfX2RvY19ffSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzUsMTUgKzMxMiwxNSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlID0gewotCVB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLQkiYXRleGl0IiwKLQlhdGV4aXRfX2RvY19fLAotCXNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAotCWF0ZXhpdF9tZXRob2RzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCShmcmVlZnVuYylhdGV4aXRfZnJlZQorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiYXRleGl0IiwKKyAgICBhdGV4aXRfX2RvY19fLAorICAgIHNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAorICAgIGF0ZXhpdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgYXRleGl0X21fdHJhdmVyc2UsCisgICAgYXRleGl0X21fY2xlYXIsCisgICAgKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCAzZjA0NzYyLi5hZTNmZjA2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNSwxOCArNSw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmIFNJWkVPRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBQeV9VSW50MzI7Ci0jZWxzZQotI2lmIFNJWkVPRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQeV9VSW50MzI7Ci0jZWxzZQotI2Vycm9yICJObyA0LWJ5dGUgaW50ZWdyYWwgdHlwZSIKLSNlbmRpZgotI2VuZGlmCi0KIHR5cGVkZWYgc2hvcnQgUHlJbnQxNjsKIAogI2lmIGRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pCkBAIC0zOCw3ICsyNiw3IEBACiAgICAgICAgIHZhbCA9IG1heHZhbDsKICAgICBlbHNlIGlmICh2YWwgPCBtaW52YWwgKyAxKQogICAgICAgICB2YWwgPSBtaW52YWw7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICByZXR1cm4gKGludCl2YWw7CiB9CiAKIApAQCAtMTYxLDkgKzE0OSw2IEBACiAgICAgUHlJbnQxNiAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgdXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMjsKLQogICAgIC8qIHUtbGF3IGludmVydHMgYWxsIGJpdHMgKi8KICAgICAvKiBHZXQgdGhlIHNpZ24gYW5kIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZhbHVlLiAqLwogICAgIGlmIChwY21fdmFsIDwgMCkgewpAQCAtMjU4LDkgKzI0Myw2IEBACiAgICAgc2hvcnQgICAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgYXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMzsKLQogICAgIC8qIEEtbGF3IHVzaW5nIGV2ZW4gYml0IGludmVyc2lvbiAqLwogICAgIGlmIChwY21fdmFsID49IDApIHsKICAgICAgICAgbWFzayA9IDB4RDU7ICAgICAgICAgICAgLyogc2lnbiAoN3RoKSBiaXQgPSAxICovCkBAIC0zMDUsMTkgKzI4Nyw5MSBAQAogICAgIDE1Mjg5LCAxNjgxOCwgMTg1MDAsIDIwMzUwLCAyMjM4NSwgMjQ2MjMsIDI3MDg2LCAyOTc5NCwgMzI3NjcKIH07CiAKLSNkZWZpbmUgQ0hBUlAoY3AsIGkpICgoc2lnbmVkIGNoYXIgKikoY3AraSkpCi0jZGVmaW5lIFNIT1JUUChjcCwgaSkgKChzaG9ydCAqKShjcCtpKSkKLSNkZWZpbmUgTE9OR1AoY3AsIGkpICgoUHlfSW50MzIgKikoY3AraSkpCisjZGVmaW5lIEdFVElOVFgoVCwgY3AsIGkpICAoKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkpCisjZGVmaW5lIFNFVElOVFgoVCwgY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkgPSAoVCkodmFsKTsgXAorICAgIH0gd2hpbGUgKDApCiAKIAorI2RlZmluZSBHRVRJTlQ4KGNwLCBpKSAgICAgICAgICBHRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSkpCisjZGVmaW5lIEdFVElOVDE2KGNwLCBpKSAgICAgICAgIEdFVElOVFgoc2hvcnQsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMzIoY3AsIGkpICAgICAgICAgR0VUSU5UWChQWV9JTlQzMl9ULCAoY3ApLCAoaSkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA8PCAxNikgKQorI2Vsc2UKKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA8PCAxNikgKQorI2VuZGlmCisKKworI2RlZmluZSBTRVRJTlQ4KGNwLCBpLCB2YWwpICAgICBTRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQxNihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKHNob3J0LCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQzMihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSwgKHZhbCkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNFVElOVDI0KGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA9IChpbnQpKHZhbCk7ICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPSAoaW50KSh2YWwpID4+IDg7ICAgICBcCisgICAgICAgICgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA9IChpbnQpKHZhbCkgPj4gMTY7ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworCisjZGVmaW5lIEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA6ICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA6ICAgICAgICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUUkFXU0FNUExFKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKKworI2RlZmluZSBHRVRTQU1QTEUzMihzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzaXplID09IDEpID8gKGludClHRVRJTlQ4KChjcCksIChpKSkgPDwgMjQgOiAgIFwKKyAgICAgICAgKHNpemUgPT0gMikgPyAoaW50KUdFVElOVDE2KChjcCksIChpKSkgPDwgMTYgOiAgXAorICAgICAgICAoc2l6ZSA9PSAzKSA/IChpbnQpR0VUSU5UMjQoKGNwKSwgKGkpKSA8PCA4IDogICBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClHRVRJTlQzMigoY3ApLCAoaSkpKQorCisjZGVmaW5lIFNFVFNBTVBMRTMyKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgICBcCisgICAgICAgIGlmIChzaXplID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQ4KChjcCksIChpKSwgKHZhbCkgPj4gMjQpOyAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQxNigoY3ApLCAoaSksICh2YWwpID4+IDE2KTsgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQyNCgoY3ApLCAoaSksICh2YWwpID4+IDgpOyAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQzMigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCiAKIHN0YXRpYyBQeU9iamVjdCAqQXVkaW9vcEVycm9yOwogCiBzdGF0aWMgaW50CiBhdWRpb29wX2NoZWNrX3NpemUoaW50IHNpemUpCiB7Ci0gICAgaWYgKHNpemUgIT0gMSAmJiBzaXplICE9IDIgJiYgc2l6ZSAhPSA0KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTaXplIHNob3VsZCBiZSAxLCAyIG9yIDQiKTsKKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIsIDMgb3IgNCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZQpAQCAtMzM5LDEyMyArMzkzLDEyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfZ2V0c2FtcGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIGludCB2YWw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2luOmdldHNhbXBsZSIsICZjcCwgJmxlbiwgJnNpemUsICZpKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmluOmdldHNhbXBsZSIsICZ2aWV3LCAmc2l6ZSwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGkgPCAwIHx8IGkgPj0gbGVuL3NpemUgKSB7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChpIDwgMCB8fCBpID49IHZpZXcubGVuL3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKjIpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSo0KTsKKyAgICB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkqc2l6ZSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CiAgICAgdW5zaWduZWQgaW50IGFic3ZhbCwgbWF4ID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXgiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bWF4IiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPCAwKSBhYnN2YWwgPSAoLXZhbCk7CiAgICAgICAgIGVsc2UgYWJzdmFsID0gdmFsOwogICAgICAgICBpZiAoYWJzdmFsID4gbWF4KSBtYXggPSBhYnN2YWw7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9taW5tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CiAgICAgLyogLTEgdHJpY2sgYmVsb3cgaXMgbmVlZGVkIG9uIFdpbmRvd3MgdG8gc3VwcG9ydCAtMHg4MDAwMDAwMCB3aXRob3V0CiAgICAgYSB3YXJuaW5nICovCiAgICAgaW50IG1pbiA9IDB4N2ZmZmZmZmYsIG1heCA9IC0weDdGRkZGRkZGLTE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptaW5tYXgiLCAmY3AsICZsZW4sICZzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTptaW5tYXgiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7Ci0gICAgICAgIGlmIChzaXplID09IDEpIHZhbCA9IChpbnQpICpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgdmFsID0gKGludCkgKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkgdmFsID0gKGludCkgKkxPTkdQKGNwLCBpKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPiBtYXgpIG1heCA9IHZhbDsKICAgICAgICAgaWYgKHZhbCA8IG1pbikgbWluID0gdmFsOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1pbiwgbWF4KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYXZnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGF2ZyA9IDAuMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIGF2ZzsKKyAgICBkb3VibGUgc3VtID0gMC4wOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2ZyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTphdmciLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgYXZnICs9IHZhbDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoIGxlbiA9PSAwICkKLSAgICAgICAgdmFsID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkKKyAgICAgICAgc3VtICs9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgaWYgKHZpZXcubGVuID09IDApCisgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGF2ZyAvIChkb3VibGUpKGxlbi9zaXplKSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworICAgICAgICBhdmcgPSAoaW50KWZsb29yKHN1bSAvIChkb3VibGUpKHZpZXcubGVuL3NpemUpKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGF2Zyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX3JtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICB1bnNpZ25lZCBpbnQgcmVzOwogICAgIGRvdWJsZSBzdW1fc3F1YXJlcyA9IDAuMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpybXMiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6cm1zIiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIHN1bV9zcXVhcmVzICs9IChkb3VibGUpdmFsKihkb3VibGUpdmFsOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICggbGVuID09IDAgKQorICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBzdW1fc3F1YXJlcyArPSB2YWwqdmFsOworICAgIH0KKyAgICBpZiAodmlldy5sZW4gPT0gMCkKICAgICAgICAgcmVzID0gMDsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGxlbi9zaXplKSk7CisgICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKHZpZXcubGVuL3NpemUpKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzKTsKIH0KIAotc3RhdGljIGRvdWJsZSBfc3VtMihzaG9ydCAqYSwgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQorc3RhdGljIGRvdWJsZSBfc3VtMihjb25zdCBzaG9ydCAqYSwgY29uc3Qgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBkb3VibGUgc3VtID0gMC4wOwpAQCAtNTAxLDI5ICs1NjEsMjggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2ZpbmRmaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNob3J0ICpjcDEsICpjcDI7CisgICAgUHlfYnVmZmVyIHZpZXcxOworICAgIFB5X2J1ZmZlciB2aWV3MjsKKyAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfMiwgc3VtX2Fpal9yaSwgcmVzdWx0LCBiZXN0X3Jlc3VsdCwgZmFjdG9yOwogCi0gICAgLyogUGFzc2luZyBhIHNob3J0KiogZm9yIGFuICdzJyBhcmd1bWVudCBpcyBjb3JyZWN0IG9ubHkKLSAgICAgICBpZiB0aGUgc3RyaW5nIGNvbnRlbnRzIGlzIGFsaWduZWQgZm9yIGludGVycHJldGF0aW9uCi0gICAgICAgYXMgc2hvcnRbXS4gRHVlIHRvIHRoZSBkZWZpbml0aW9uIG9mIFB5Qnl0ZXNPYmplY3QsCi0gICAgICAgdGhpcyBpcyBjdXJyZW50bHkgKFB5dGhvbiAyLjYpIHRoZSBjYXNlLiAqLwotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAoY2hhcioqKSZjcDIsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgfHwgbGVuMiAmIDEgKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOmZpbmRmaXQiLCAmdmlldzEsICZ2aWV3MikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2aWV3MS5sZW4gJiAxIHx8IHZpZXcyLmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGxlbjEgPj49IDE7Ci0gICAgbGVuMiA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKil2aWV3MS5idWY7CisgICAgbGVuMSA9IHZpZXcxLmxlbiA+PiAxOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXZpZXcyLmJ1ZjsKKyAgICBsZW4yID0gdmlldzIubGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW4xIDwgbGVuMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiRmlyc3Qgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwogICAgIHN1bV9haWpfMiA9IF9zdW0yKGNwMSwgY3AxLCBsZW4yKTsKQEAgLTU1Myw3ICs2MTIsMTQgQEAKIAogICAgIGZhY3RvciA9IF9zdW0yKGNwMStiZXN0X2osIGNwMiwgbGVuMikgLyBzdW1fcmlfMjsKIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihuZikiLCBiZXN0X2osIGZhY3Rvcik7CisKKyAgZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzEpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcyKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTU2MywyOCArNjI5LDM4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9maW5kZmFjdG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaG9ydCAqY3AxLCAqY3AyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBQeV9idWZmZXIgdmlldzE7CisgICAgUHlfYnVmZmVyIHZpZXcyOworICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqX3JpLCByZXN1bHQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjOmZpbmRmYWN0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgKGNoYXIqKikmY3AyLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxIHx8IGxlbjIgJiAxICkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KjpmaW5kZmFjdG9yIiwgJnZpZXcxLCAmdmlldzIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmlldzEubGVuICYgMSB8fCB2aWV3Mi5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAodmlldzEubGVuICE9IHZpZXcyLmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2FtcGxlcyBzaG91bGQgYmUgc2FtZSBzaXplIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBsZW4yID4+PSAxOwotICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwotICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuMik7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopdmlldzEuYnVmOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXZpZXcyLmJ1ZjsKKyAgICBsZW4gPSB2aWV3MS5sZW4gPj4gMTsKKyAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4pOworICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuKTsKIAogICAgIHJlc3VsdCA9IHN1bV9haWpfcmkgLyBzdW1fcmlfMjsKIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC01OTQsMjQgKzY3MCwyNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfZmluZG1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2hvcnQgKmNwMTsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBjb25zdCBzaG9ydCAqY3AxOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgcmVzdWx0LCBiZXN0X3Jlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjbjpmaW5kbWF4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Km46ZmluZG1heCIsICZ2aWV3LCAmbGVuMikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2aWV3LmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGxlbjEgPj49IDE7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopdmlldy5idWY7CisgICAgbGVuMSA9IHZpZXcubGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjIgPCAwIHx8IGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW4yIDwgMCB8fCBsZW4xIDwgbGVuMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5wdXQgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOwpAQCAtNjMyLDM0ICs3MDksMzkgQEAKIAogICAgIH0KIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoYmVzdF9qKTsKKworICBlcnJvcjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYXZncHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAorICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCiAgICAgICAgIHByZXZleHRyZW1lID0gMDsKICAgICBkb3VibGUgc3VtID0gMC4wOwogICAgIHVuc2lnbmVkIGludCBhdmc7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmLCBuZXh0cmVtZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZncHAiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6YXZncHAiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuIDw9IHNpemUpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHZpZXcubGVuIDw9IHNpemUpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHByZXZ2YWwgPSAoaW50KSpDSEFSUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHByZXZ2YWwgPSAoaW50KSpTSE9SVFAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSBwcmV2dmFsID0gKGludCkqTE9OR1AoY3AsIDApOworICAgIH0KKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gc2l6ZTsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgewogICAgICAgICAgICAgZGlmZiA9IHZhbCA8IHByZXZ2YWw7CiAgICAgICAgICAgICBpZiAocHJldmRpZmYgPT0gIWRpZmYpIHsKQEAgLTY2Nyw3ICs3NDksMTIgQEAKICAgICAgICAgICAgICAgICAqKiBleHRyZW1lIHZhbHVlIGFuZCByZW1lbWJlci4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChwcmV2ZXh0cmVtZXZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bSArPSBmYWJzKChkb3VibGUpcHJldnZhbCAtIChkb3VibGUpcHJldmV4dHJlbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldnZhbCA8IHByZXZleHRyZW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IChkb3VibGUpKCh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZ2YWwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUpOwogICAgICAgICAgICAgICAgICAgICBuZXh0cmVtZSsrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcmV2ZXh0cmVtZXZhbGlkID0gMTsKQEAgLTY4MSwzMyArNzY4LDM0IEBACiAgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQogICAgICAgICBhdmcgPSAodW5zaWduZWQgaW50KShzdW0gLyAoZG91YmxlKW5leHRyZW1lKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYXZnKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbWF4cHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAorICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCiAgICAgICAgIHByZXZleHRyZW1lID0gMDsKICAgICB1bnNpZ25lZCBpbnQgbWF4ID0gMCwgZXh0cmVtZWRpZmY7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heHBwIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1heHBwIiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbiA8PSBzaXplKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh2aWV3LmxlbiA8PSBzaXplKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICB9CisgICAgcHJldnZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgMCk7CiAgICAgcHJldmRpZmYgPSAxNzsgLyogQW55dGhpbmcgIT0gMCwgMSAqLwotICAgIGZvciAoIGk9c2l6ZTsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IHNpemU7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC03MzEsNjggKzgxOSw2NyBAQAogICAgICAgICAgICAgcHJldmRpZmYgPSBkaWZmOwogICAgICAgICB9CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9jcm9zcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICBpbnQgcHJldnZhbDsKICAgICBQeV9zc2l6ZV90IG5jcm9zczsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpjcm9zcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcm9zcyIsICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG5jcm9zcyA9IC0xOwogICAgIHByZXZ2YWwgPSAxNzsgLyogQW55dGhpbmcgPD4gMCwxICovCi0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpID4+IDc7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPj4gMTU7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAzMTsKLSAgICAgICAgdmFsID0gdmFsICYgMTsKLSAgICAgICAgaWYgKCB2YWwgIT0gcHJldnZhbCApIG5jcm9zcysrOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpIDwgMDsKKyAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSBuY3Jvc3MrKzsKICAgICAgICAgcHJldnZhbCA9IHZhbDsKICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuY3Jvc3MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tdWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjdG9yLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgZG91YmxlIGZhY3RvciwgbWF4dmFsLCBtaW52YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWQ6bXVsIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhY3RvciApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWQ6bXVsIiwgJnZpZXcsICZzaXplLCAmZmFjdG9yKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwogICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhY3RvcjsKLSAgICAgICAgdmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCl2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIHZhbCAqPSBmYWN0b3I7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGksIChpbnQpdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC04MDIsNDkgKzg4OSwzOCBAQAogICAgIFB5X2J1ZmZlciBwY3A7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDA7Ci0gICAgZG91YmxlIGZhYzEsIGZhYzIsIGZ2YWwsIG1heHZhbCwgbWludmFsOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBpbnQgc2l6ZTsKKyAgICBkb3VibGUgZmFjMSwgZmFjMiwgbWF4dmFsLCBtaW52YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaWRkOnRvbW9ubyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNwLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWRkOnRvbW9ubyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwY3AsICZzaXplLCAmZmFjMSwgJmZhYzIpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjcCA9IHBjcC5idWY7CiAgICAgbGVuID0gcGNwLmxlbjsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKCgobGVuIC8gc2l6ZSkgJiAxKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJub3QgYSB3aG9sZSBudW1iZXIgb2YgZnJhbWVzIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOwogCiAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8yKTsKLSAgICBpZiAoIHJ2ID09IDAgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcCwgaSsxKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AsIGkrMik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AsIGkrNCk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbDEqZmFjMSArIChkb3VibGUpdmFsMipmYWMyOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkvMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpLzIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpLzIpPSAoUHlfSW50MzIpdmFsMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUqMikgeworICAgICAgICBkb3VibGUgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CisgICAgICAgIGRvdWJsZSB2YWwyID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpICsgc2l6ZSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSB2YWwxKmZhYzEgKyB2YWwyKmZhYzI7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGkvMiwgdmFsKTsKICAgICB9CisgIGV4aXQ6CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC04NTIsODkgKzkyOCw3NiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfdG9zdGVyZW8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSwgdmFsMiwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZGQ6dG9zdGVyZW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppZGQ6dG9zdGVyZW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUsICZmYWMxLCAmZmFjMikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OwogCiAgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYLzIpIHsKKyAgICBpZiAodmlldy5sZW4gPiBQWV9TU0laRV9UX01BWC8yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKjIpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMTsKLSAgICAgICAgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhYzI7Ci0gICAgICAgIHZhbDIgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIpID0gKHNpZ25lZCBjaGFyKXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSoyKSA9IChzaG9ydCl2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKSA9IChQeV9JbnQzMil2YWwxOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIrMSkgPSAoc2lnbmVkIGNoYXIpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIrMikgPSAoc2hvcnQpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkqMis0KSA9IChQeV9JbnQzMil2YWwyOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBpbnQgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMxLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBpbnQgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMyLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIsIHZhbDEpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIgKyBzaXplLCB2YWwyKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hZGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDEsICpjcDIsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDAsIG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X2J1ZmZlciB2aWV3MTsKKyAgICBQeV9idWZmZXIgdmlldzI7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyNpOmFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwMSwgJmxlbjEsICZjcDIsICZsZW4yLCAmc2l6ZSApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuMSwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqaTphZGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldzEsICZ2aWV3MiwgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3MS5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKHZpZXcxLmxlbiAhPSB2aWV3Mi5sZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkxlbmd0aHMgc2hvdWxkIGJlIHRoZSBzYW1lIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgbWF4dmFsID0gbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSBtaW52YWxzW3NpemVdOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbjEpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3MS5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4xOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwxID0gKGludCkqQ0hBUlAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDEgPSAoaW50KSpMT05HUChjcDEsIGkpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwyID0gKGludCkqQ0hBUlAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDIgPSAoaW50KSpMT05HUChjcDIsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3MS5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3MS5idWYsIGkpOworICAgICAgICBpbnQgdmFsMiA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3Mi5idWYsIGkpOwogCiAgICAgICAgIGlmIChzaXplIDwgNCkgewogICAgICAgICAgICAgbmV3dmFsID0gdmFsMSArIHZhbDI7CkBAIC05NTAsMTI0ICsxMDEzLDE2NSBAQAogICAgICAgICAgICAgbmV3dmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhciluZXd2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpbmV3dmFsOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpLCBuZXd2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3MSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzIpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYmlhcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaXplLCBiaWFzOwogICAgIHVuc2lnbmVkIGludCB2YWwgPSAwLCBtYXNrOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpiaWFzIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplICwgJmJpYXMpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppaTpiaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplLCAmYmlhcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKICAgICBtYXNrID0gbWFza3Nbc2l6ZV07CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIHNob3J0KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKHVuc2lnbmVkIGludCkoUHlfVUludDMyKSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gMSkKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgY2hhciwgdmlldy5idWYsIGkpOworICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIHNob3J0LCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykKKyAgICAgICAgICAgIHZhbCA9ICgodW5zaWduZWQgaW50KUdFVElOVDI0KHZpZXcuYnVmLCBpKSkgJiAweGZmZmZmZnU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKFBZX1VJTlQzMl9ULCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIH0KIAogICAgICAgICB2YWwgKz0gKHVuc2lnbmVkIGludCliaWFzOwogICAgICAgICAvKiB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgIHZhbCAmPSBtYXNrOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHVuc2lnbmVkIHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKShQeV9VSW50MzIpdmFsOworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBjaGFyLCBuY3AsIGksIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgc2hvcnQsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKQorICAgICAgICAgICAgU0VUSU5UMjQobmNwLCBpLCAoaW50KXZhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICBTRVRJTlRYKFBZX1VJTlQzMl9ULCBuY3AsIGksIHZhbCk7CisgICAgICAgIH0KICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9yZXZlcnNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpyZXZlcnNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpyZXZlcnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBqID0gbGVuIC0gaSAtIHNpemU7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaikgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCB2aWV3LmxlbiAtIGkgLSBzaXplLCB2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2J5dGVzd2FwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICB1bnNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpzd2FwYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykKKyAgICAgICAgICAgIG5jcFtpICsgc2l6ZSAtIDEgLSBqXSA9ICgodW5zaWduZWQgY2hhciAqKXZpZXcuYnVmKVtpICsgal07CisgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbGluMmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBpbnQgc2l6ZSwgc2l6ZTI7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnNpemUyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWk6bGluMmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnNpemUyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplMikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBpZiAobGVuL3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplMikgeworICAgIGlmICh2aWV3Lmxlbi9zaXplID4gUFlfU1NJWkVfVF9NQVgvc2l6ZTIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAobGVuL3NpemUpKnNpemUyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKHZpZXcubGVuL3NpemUpKnNpemUyKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTAsIGo9MDsgaSA8IGxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgMjQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPDwgMTY7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgaWYgKCBzaXplMiA9PSAxICkgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gMiApICpTSE9SVFAobmNwLCBqKSA9IChzaG9ydCkodmFsID4+IDE2KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUyID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gaiA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUyLCBuY3AsIGosIHZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMTA4NSw2ICsxMTg5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX3JhdGVjdihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IHNpemUsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCB3ZWlnaHRBLCB3ZWlnaHRCOwpAQCAtMTA5NCwxNSArMTE5OSwxNSBAQAogCiAgICAgd2VpZ2h0QSA9IDE7CiAgICAgd2VpZ2h0QiA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpaWlPfGlpOnJhdGVjdiIsICZjcCwgJmxlbiwgJnNpemUsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlpaWlPfGlpOnJhdGVjdiIsICZ2aWV3LCAmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5jaGFubmVscywgJmlucmF0ZSwgJm91dHJhdGUsICZzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJndlaWdodEEsICZ3ZWlnaHRCKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIGlmIChuY2hhbm5lbHMgPCAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICIjIG9mIGNoYW5uZWxzIHNob3VsZCBiZSA+PSAxIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIH0KICAgICBpZiAoc2l6ZSA+IElOVF9NQVggLyBuY2hhbm5lbHMpIHsKICAgICAgICAgLyogVGhpcyBvdmVyZmxvdyB0ZXN0IGlzIHJpZ29yb3VzbHkgY29ycmVjdCBiZWNhdXNlCkBAIC0xMTEwLDIxICsxMjE1LDIxIEBACiAgICAgICAgICAgIGZyb20gdGhlIGRvY3MgZm9yIHRoZSBlcnJvciBtc2cuICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoICogbmNoYW5uZWxzIHRvbyBiaWcgZm9yIGEgQyBpbnQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQogICAgIGJ5dGVzX3Blcl9mcmFtZSA9IHNpemUgKiBuY2hhbm5lbHM7CiAgICAgaWYgKHdlaWdodEEgPCAxIHx8IHdlaWdodEIgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsCiAgICAgICAgICAgICAid2VpZ2h0QSBzaG91bGQgYmUgPj0gMSwgd2VpZ2h0QiBzaG91bGQgYmUgPj0gMCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9Ci0gICAgaWYgKGxlbiAlIGJ5dGVzX3Blcl9mcmFtZSAhPSAwKSB7CisgICAgaWYgKHZpZXcubGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQogICAgIGlmIChpbnJhdGUgPD0gMCB8fCBvdXRyYXRlIDw9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgInNhbXBsaW5nIHJhdGUgbm90ID4gMCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9CiAgICAgLyogZGl2aWRlIGlucmF0ZSBhbmQgb3V0cmF0ZSBieSB0aGVpciBncmVhdGVzdCBjb21tb24gZGl2aXNvciAqLwogICAgIGQgPSBnY2QoaW5yYXRlLCBvdXRyYXRlKTsKQEAgLTExMzgsMTYgKzEyNDMsMTYgQEAKICAgICBpZiAoKHNpemVfdCluY2hhbm5lbHMgPiBQWV9TSVpFX01BWC9zaXplb2YoaW50KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQotICAgIHByZXZfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKLSAgICBjdXJfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBwcmV2X2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgY3VyX2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKHByZXZfaSA9PSBOVUxMIHx8IGN1cl9pID09IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBsZW4gLz0gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLworICAgIGxlbiA9IHZpZXcubGVuIC8gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLwogCiAgICAgaWYgKHN0YXRlID09IFB5X05vbmUpIHsKICAgICAgICAgZCA9IC1vdXRyYXRlOwpAQCAtMTE5Nyw2ICsxMzAyLDcgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBuY3AgPSBQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSB2aWV3LmJ1ZjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgd2hpbGUgKGQgPCAwKSB7CkBAIC0xMjI3LDEyICsxMzMzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY2hhbiA9IDA7IGNoYW4gPCBuY2hhbm5lbHM7IGNoYW4rKykgewogICAgICAgICAgICAgICAgIHByZXZfaVtjaGFuXSA9IGN1cl9pW2NoYW5dOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKkNIQVJQKGNwLCAwKSkgPDwgMjQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9ICgoaW50KSpTSE9SVFAoY3AsIDApKSA8PCAxNjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkqTE9OR1AoY3AsIDApOworICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gR0VUU0FNUExFMzIoc2l6ZSwgY3AsIDApOwogICAgICAgICAgICAgICAgIGNwICs9IHNpemU7CiAgICAgICAgICAgICAgICAgLyogaW1wbGVtZW50cyBhIHNpbXBsZSBkaWdpdGFsIGZpbHRlciAqLwogICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkoCkBAIC0xMjQ4LDE4NCArMTM0OSwxNzUgQEAKICAgICAgICAgICAgICAgICBjdXJfbyA9IChpbnQpKCgoZG91YmxlKXByZXZfaVtjaGFuXSAqIChkb3VibGUpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSljdXJfaVtjaGFuXSAqIChkb3VibGUpKG91dHJhdGUgLSBkKSkgLwogICAgICAgICAgICAgICAgICAgICAoZG91YmxlKW91dHJhdGUpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICpDSEFSUChuY3AsIDApID0gKHNpZ25lZCBjaGFyKShjdXJfbyA+PiAyNCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAqU0hPUlRQKG5jcCwgMCkgPSAoc2hvcnQpKGN1cl9vID4+IDE2KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgICpMT05HUChuY3AsIDApID0gKFB5X0ludDMyKShjdXJfbyk7CisgICAgICAgICAgICAgICAgU0VUU0FNUExFMzIoc2l6ZSwgbmNwLCAwLCBjdXJfbyk7CiAgICAgICAgICAgICAgICAgbmNwICs9IHNpemU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkIC09IGlucmF0ZTsKICAgICAgICAgfQogICAgIH0KICAgZXhpdDoKLSAgICBpZiAocHJldl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUocHJldl9pKTsKLSAgICBpZiAoY3VyX2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShjdXJfaSk7CisgICAgUHlNZW1fRnJlZShwcmV2X2kpOworICAgIFB5TWVtX0ZyZWUoY3VyX2kpOworICBleGl0MjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2xpbjJ1bGF3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4ydWxhdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwIDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bGluMnVsYXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4vc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OwotCi0gICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICAqbmNwKysgPSBzdF8xNGxpbmVhcjJ1bGF3KHZhbCA+PiAxOCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfdWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnVsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTp1bGF3MmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYgKHZpZXcubGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4qc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGN2YWwgPSAqY3ArKzsKLSAgICAgICAgdmFsID0gc3RfdWxhdzJsaW5lYXIxNihjdmFsKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFsKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWw8PDE2KTsKKyAgICBjcCA9IHZpZXcuYnVmOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IHN0X3VsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbGluMmFsYXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJhbGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmxpbjJhbGF3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuL3NpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuL3NpemUpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKLQotICAgICAgICAqbmNwKysgPSBzdF9saW5lYXIyYWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0X2xpbmVhcjJhbGF3KHZhbCA+PiAxOSk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2l6ZSwgdmFsOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmFsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTphbGF3MmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYgKHZpZXcubGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4qc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKyAgICBjcCA9IHZpZXcuYnVmOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgdmFsID0gc3RfYWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUsIG5jcCwgaSwgdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9saW4yYWRwY20oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIHN0ZXAsIHZhbHByZWQsIGRlbHRhLAogICAgICAgICBpbmRleCwgc2lnbiwgdnBkaWZmLCBkaWZmOwotICAgIFB5T2JqZWN0ICpydiwgKnN0YXRlLCAqc3RyOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEwsICpzdGF0ZSwgKnN0cjsKICAgICBpbnQgb3V0cHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaU86bGluMmFkcGNtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzdGF0ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlPOmxpbjJhZHBjbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnN0YXRlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8oc2l6ZSoyKSk7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbi8oc2l6ZSoyKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOwogCiAgICAgLyogRGVjb2RlIHN0YXRlLCBzaG91bGQgaGF2ZSAodmFsdWUsIHN0ZXApICovCkBAIC0xNDMzLDIxICsxNTI1LDI0IEBACiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7CiAgICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSkKKyAgICAgICAgZ290byBleGl0OwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAxOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSkgPj4gMTY7CiAKICAgICAgICAgLyogU3RlcCAxIC0gY29tcHV0ZSBkaWZmZXJlbmNlIHdpdGggcHJldmlvdXMgdmFsdWUgKi8KLSAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7Ci0gICAgICAgIHNpZ24gPSAoZGlmZiA8IDApID8gOCA6IDA7Ci0gICAgICAgIGlmICggc2lnbiApIGRpZmYgPSAoLWRpZmYpOworICAgICAgICBpZiAodmFsIDwgdmFscHJlZCkgeworICAgICAgICAgICAgZGlmZiA9IHZhbHByZWQgLSB2YWw7CisgICAgICAgICAgICBzaWduID0gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZmYgPSB2YWwgLSB2YWxwcmVkOworICAgICAgICAgICAgc2lnbiA9IDA7CisgICAgICAgIH0KIAogICAgICAgICAvKiBTdGVwIDIgLSBEaXZpZGUgYW5kIGNsYW1wICovCiAgICAgICAgIC8qIE5vdGU6CkBAIC0xNTA4LDQ4ICsxNjAzLDUzIEBACiAgICAgfQogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwogICAgIFB5X0RFQ1JFRihzdHIpOworICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYWRwY20ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBQeV9zc2l6ZV90IGksIG91dGxlbjsKICAgICBpbnQgc2l6ZSwgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RyLCAqc3RhdGU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTCwgKnN0ciwgKnN0YXRlOwogICAgIGludCBpbnB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmFkcGNtMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlPOmFkcGNtMmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnN0YXRlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIERlY29kZSBzdGF0ZSwgc2hvdWxkIGhhdmUgKHZhbHVlLCBzdGVwKSAqLwogICAgIGlmICggc3RhdGUgPT0gUHlfTm9uZSApIHsKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBpZiAobGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3NpemUpIHsKKyAgICBpZiAodmlldy5sZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qc2l6ZSoyKTsKLSAgICBpZiAoIHN0ciA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgb3V0bGVuID0gdmlldy5sZW4qc2l6ZSoyOworICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0bGVuKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSB2aWV3LmJ1ZjsKIAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMDsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplKjI7IGkgKz0gc2l6ZSApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpICs9IHNpemUpIHsKICAgICAgICAgLyogU3RlcCAxIC0gZ2V0IHRoZSBkZWx0YSB2YWx1ZSBhbmQgY29tcHV0ZSBuZXh0IGluZGV4ICovCiAgICAgICAgIGlmICggYnVmZmVyc3RlcCApIHsKICAgICAgICAgICAgIGRlbHRhID0gaW5wdXRidWZmZXIgJiAweGY7CkBAIC0xNTk0LDEzICsxNjk0LDEzIEBACiAgICAgICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKIAogICAgICAgICAvKiBTdGVwIDYgLSBPdXRwdXQgdmFsdWUgKi8KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFscHJlZCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFscHJlZCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFscHJlZDw8MTYpOworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbHByZWQgPDwgMTYpOwogICAgIH0KIAogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwogICAgIFB5X0RFQ1JFRihzdHIpOworICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMTYyOSw2ICsxNzI5LDcgQEAKICAgICB7ICJ0b3N0ZXJlbyIsIGF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgImdldHNhbXBsZSIsIGF1ZGlvb3BfZ2V0c2FtcGxlLCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7ICJyZXZlcnNlIiwgYXVkaW9vcF9yZXZlcnNlLCBNRVRIX1ZBUkFSR1MgfSwKKyAgICB7ICJieXRlc3dhcCIsIGF1ZGlvb3BfYnl0ZXN3YXAsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgInJhdGVjdiIsIGF1ZGlvb3BfcmF0ZWN2LCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7IDAsICAgICAgICAgIDAgfQogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCBhODRiYWRjNy4uMGY0OTcwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtMzYxLDggKzM2MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CkBAIC00OTEsOCArNDkwLDcgQEAKICAgICAqLwogICAgIGlmIChiaW5fbGVuID4gMCkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgYmluX2xlbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICAgICAgcnYgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtNTYzLDggKzU2MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CkBAIC02NDIsOCArNjM5LDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGJpbl9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBpZiAocnYpIHsKICAgICAgICAgUHlPYmplY3QgKnJydiA9IFB5X0J1aWxkVmFsdWUoIk9pIiwgcnYsIGRvbmUpOwpAQCAtNzEzLDggKzcwOSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtNzcwLDggKzc2NSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CkBAIC04MzQsNyArODI4LDcgQEAKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgMipvdXRfbGVuKSA8IDApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9YREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXApAQCAtODg3LDggKzg4MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICByZXR1cm4gcnY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKaW5kZXggOWU5ZTk2Yy4uMDEzYzNmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwpAQCAtMjMsMTggKzIzLDMzIEBACiAgKiBBODQ0ICAgICAgICAgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICBVKzIwMTUgSE9SSVpPTlRBTCBCQVIKICAqLwogCi0jZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIGFzc2kpIFwKLSAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSAoYXNzaSkgPSAweDIwMTQ7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIChhc3NpKSA9IDB4MjAxNTsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgKGFzc2kpID0gMHgwMGI3OyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgYXNzaSwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCk7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCBhc3NpLCBkYzEsIGRjMik7CisjZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBiNyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCkpIHsgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdia2V4dCwgZGVjb2RlZCwgZGMxLCBkYzIpKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgXAotICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSAoYXNzaSkgPSAweGExYWE7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSAoYXNzaSkgPSAweGE4NDQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSAoYXNzaSkgPSAweGExYTQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkNfQ09ORChnYmNvbW1vbiwgYXNzaSwgY29kZSkpOworI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWFhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTg0NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKSB7IFwKKyAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogLyoKICAqIEdCMjMxMiBjb2RlYwpAQCAtNDIsMjcgKzU3LDMxIEBACiAKIEVOQ09ERVIoZ2IyMzEyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC03MiwyMCArOTEsMjEgQEAKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqKmluYnVmOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk4LDI4ICsxMTgsMzEgQEAKIAogRU5DT0RFUihnYmspCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIHJldHVybiAxOwotCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjgsMjIgKzE1MSwyMiBAQAogREVDT0RFUihnYmspCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgR0JLX0RFQ09ERShjLCBJTjIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBHQktfREVDT0RFKGMsIElOQllURTIsIHdyaXRlcikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTU2LDcyICsxNzksNjMgQEAKIAogRU5DT0RFUihnYjE4MDMwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaWYgKGMgPiAweDEwRkZGRikKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgcmV0dXJuIDI7IC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiAxOwotI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMDAwMCkgewotICAgICAgICAgICAgdWNzNF90IHRjID0gYyAtIDB4MTAwMDA7CisgICAgICAgIGlmIChjID49IDB4MTAwMDApIHsKKyAgICAgICAgICAgIFB5X1VDUzQgdGMgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgICAgIGFzc2VydCAoYyA8PSAweDEwRkZGRik7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsKIAotICAgICAgICAgICAgT1VUNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgT1VUQllURTQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgIE9VVDMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpCisgICAgICAgICAgICBPVVRCWVRFMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSk7CiAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICBPVVQyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICBPVVRCWVRFMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhcikodGMgKyAweDkwKSkKKyAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKSh0YyArIDB4OTApKTsKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICBORVhUKDIsIDQpIC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKLSNlbmRpZgorICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYyk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgKnV0cnJhbmdlOwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7CiAKICAgICAgICAgICAgIGZvciAodXRycmFuZ2UgPSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXM7CiAgICAgICAgICAgICAgICAgIHV0cnJhbmdlLT5maXJzdCAhPSAwOwogICAgICAgICAgICAgICAgICB1dHJyYW5nZSsrKQogICAgICAgICAgICAgICAgIGlmICh1dHJyYW5nZS0+Zmlyc3QgPD0gYyAmJgogICAgICAgICAgICAgICAgICAgICBjIDw9IHV0cnJhbmdlLT5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdGM7CisgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdGM7CiAKICAgICAgICAgICAgICAgICAgICAgdGMgPSBjIC0gdXRycmFuZ2UtPmZpcnN0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHJyYW5nZS0+YmFzZTsKIAotICAgICAgICAgICAgICAgICAgICBPVVQ0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEU0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKXRjICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpdGMgKyAweDgxKTsKIAotICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMwLDEzICsyNDQsMTMgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpKSAvKiBNU0Igc2V0OiBHQksgb3IgR0IxODAzMGV4dCAqLworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyBvciBHQjE4MDMwZXh0ICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCiAKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjQ1LDYxICsyNTksNjIgQEAKIERFQ09ERVIoZ2IxODAzMCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgIGlmIChjMiA+PSAweDMwICYmIGMyIDw9IDB4MzkpIHsgLyogNCBieXRlcyBzZXEgKi8KICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzICp1dHI7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMzLCBjNDsKLSAgICAgICAgICAgIHVjczRfdCBsc2VxOworICAgICAgICAgICAgUHlfVUNTNCBsc2VxOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDQpCi0gICAgICAgICAgICBjMyA9IElOMzsKLSAgICAgICAgICAgIGM0ID0gSU40OworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig0KTsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMzsKKyAgICAgICAgICAgIGM0ID0gSU5CWVRFNDsKICAgICAgICAgICAgIGlmIChjIDwgMHg4MSB8fCBjMyA8IDB4ODEgfHwgYzQgPCAweDMwIHx8IGM0ID4gMHgzOSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIGMgLT0gMHg4MTsgIGMyIC09IDB4MzA7CiAgICAgICAgICAgICBjMyAtPSAweDgxOyBjNCAtPSAweDMwOwogCiAgICAgICAgICAgICBpZiAoYyA8IDQpIHsgLyogVSswMDgwIC0gVStGRkZGICovCi0gICAgICAgICAgICAgICAgbHNlcSA9ICgodWNzNF90KWMgKiAxMCArIGMyKSAqIDEyNjAgKwotICAgICAgICAgICAgICAgICAgICAodWNzNF90KWMzICogMTAgKyBjNDsKKyAgICAgICAgICAgICAgICBsc2VxID0gKChQeV9VQ1M0KWMgKiAxMCArIGMyKSAqIDEyNjAgKworICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCljMyAqIDEwICsgYzQ7CiAgICAgICAgICAgICAgICAgaWYgKGxzZXEgPCAzOTQyMCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHV0ciA9IGdiMTgwMzBfdG9fdW5pYm1wX3JhbmdlczsKICAgICAgICAgICAgICAgICAgICAgICAgICBsc2VxID49ICh1dHIgKyAxKS0+YmFzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHIrKykgOwotICAgICAgICAgICAgICAgICAgICBPVVQxKHV0ci0+Zmlyc3QgLSB1dHItPmJhc2UgKyBsc2VxKQotICAgICAgICAgICAgICAgICAgICBORVhUKDQsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIodXRyLT5maXJzdCAtIHV0ci0+YmFzZSArIGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDE1KSB7IC8qIFUrMTAwMDAgLSBVKzEwRkZGRiAqLwotICAgICAgICAgICAgICAgIGxzZXEgPSAweDEwMDAwICsgKCgodWNzNF90KWMtMTUpICogMTAgKyBjMikKLSAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKHVjczRfdCljMyAqIDEwICsgYzQ7CisgICAgICAgICAgICAgICAgbHNlcSA9IDB4MTAwMDAgKyAoKChQeV9VQ1M0KWMtMTUpICogMTAgKyBjMikKKyAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKFB5X1VDUzQpYzMgKiAxMCArIGM0OwogICAgICAgICAgICAgICAgIGlmIChsc2VxIDw9IDB4MTBGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChsc2VxKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIEdCS19ERUNPREUoYywgYzIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoZ2IxODAzMGV4dCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgR0JLX0RFQ09ERShjLCBjMiwgd3JpdGVyKQorICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMTgwMzBleHQsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTMxOSw0OCArMzM0LDUxIEBACiBFTkNPREVSX1JFU0VUKGh6KQogewogICAgIGlmIChzdGF0ZS0+aSAhPSAwKSB7Ci0gICAgICAgIFdSSVRFMignficsICd9JykKKyAgICAgICAgV1JJVEVCWVRFMignficsICd9Jyk7CiAgICAgICAgIHN0YXRlLT5pID0gMDsKLSAgICAgICAgTkVYVF9PVVQoMikKKyAgICAgICAgTkVYVF9PVVQoMik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSKGh6KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgewotICAgICAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXUklURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMyk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPmkgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7Ci0gICAgICAgICAgICBXUklURTQoJ34nLCAneycsIGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICBXUklURUJZVEU0KCd+JywgJ3snLCBjb2RlID4+IDgsIGNvZGUgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICBzdGF0ZS0+aSA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXUklURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZikKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZik7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODIsMTUgKzQwMCwxNiBAQAogREVDT0RFUihoeikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA9PSAnficpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBJTjI7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gSU5CWVRFMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGlmIChjMiA9PSAnficpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoJ34nKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKCd+Jyk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMyID09ICd7JyAmJiBzdGF0ZS0+aSA9PSAwKQpAQCAtNDAxLDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgOyAvKiBsaW5lLWNvbnRpbnVhdGlvbiAqLwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAwKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MDksMTQgKzQyOCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsgLyogQVNDSUkgbW9kZSAqLwotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsgLyogR0IgbW9kZSAqLwotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKaW5kZXggZDNhZDA0Yi4uYjdhN2ViZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYwpAQCAtMzgsMzUgKzM4LDM5IEBACiAKIEVOQ09ERVIoYmlnNWhrc2NzKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gKippbmJ1ZjsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGluc2l6ZSA9IDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0ID49IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zID49IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IElOQ0hBUjI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gMDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPj0gMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKChjICYgMHhmZmRmKSA9PSAweDAwY2EpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCgqaW5idWYpWzFdICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKGMyICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gYmlnNWhrc2NzX3BhaXJlbmNfdGFibGVbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjID4+IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqaW5idWYpWzFdID4+IDMpKSAmIDNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYzIgPj4gMykpICYgM107CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpemUgPSAyOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlubGVmdCA8IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTc3LDIxICs4MSwyNSBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPCAweDIwMDAwKQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoYmlnNWhrc2NzX25vbmJtcCwgY29kZSwgYyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3Nfbm9uYm1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMDIsMzMgKzExMCwzMiBAQAogREVDT0RFUihiaWc1aGtzY3MpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotICAgICAgICB1Y3M0X3QgZGVjb2RlZDsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGlmICgweGM2ID4gYyB8fCBjID4gMHhjOCB8fCAoYyA8IDB4YzcgJiYgSU4yIDwgMHhhMSkpIHsKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgaWYgKDB4YzYgPiBjIHx8IGMgPiAweGM4IHx8IChjIDwgMHhjNyAmJiBJTkJZVEUyIDwgMHhhMSkpIHsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgVFJZTUFQX0RFQyhiaWc1aGtzY3MsIGRlY29kZWQsIGMsIElOMikKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNWhrc2NzLCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBCSDJTKGMsIElOMik7CisgICAgICAgICAgICBpbnQgcyA9IEJIMlMoYywgSU5CWVRFMik7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoaW50YmFzZTsKIAogICAgICAgICAgICAgYXNzZXJ0KDB4ODcgPD0gYyAmJiBjIDw9IDB4ZmUpOwotICAgICAgICAgICAgYXNzZXJ0KDB4NDAgPD0gSU4yICYmIElOMiA8PSAweGZlKTsKKyAgICAgICAgICAgIGFzc2VydCgweDQwIDw9IElOQllURTIgJiYgSU5CWVRFMiA8PSAweGZlKTsKIAogICAgICAgICAgICAgaWYgKEJIMlMoMHg4NywgMHg0MCkgPD0gcyAmJiBzIDw9IEJIMlMoMHhhMCwgMHhmZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGludGJhc2UgPSBiaWc1aGtzY3NfcGhpbnRfMDsKQEAgLTE0NiwyNSArMTUzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9JTlRFUk5BTDsKIAogICAgICAgICAgICAgaWYgKGhpbnRiYXNlW3MgPj4gM10gJiAoMSA8PCAocyAmIDcpKSkgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCB8IDB4MjAwMDApCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkIHwgMHgyMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgT1VUMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAoKGMgPDwgOCkgfCBJTjIpIHsKLSAgICAgICAgY2FzZSAweDg4NjI6IFdSSVRFMigweDAwY2EsIDB4MDMwNCk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODg2NDogV1JJVEUyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4OGEzOiBXUklURTIoMHgwMGVhLCAweDAzMDQpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4YTU6IFdSSVRFMigweDAwZWEsIDB4MDMwYyk7IGJyZWFrOworICAgICAgICBzd2l0Y2ggKChjIDw8IDgpIHwgSU5CWVRFMikgeworICAgICAgICBjYXNlIDB4ODg2MjogT1VUQ0hBUjIoMHgwMGNhLCAweDAzMDQpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4NjQ6IE9VVENIQVIyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4OGEzOiBPVVRDSEFSMigweDAwZWEsIDB4MDMwNCk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODhhNTogT1VUQ0hBUjIoMHgwMGVhLCAweDAzMGMpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDE7CiAgICAgICAgIH0KIAotICAgICAgICBORVhUKDIsIDIpIC8qIGFsbCBkZWNvZGVkIGNvZGVwb2ludHMgYXJlIHBhaXJzLCBhYm92ZS4gKi8KKyAgICAgICAgTkVYVF9JTigyKTsgLyogYWxsIGRlY29kZWQgY29kZXBvaW50cyBhcmUgcGFpcnMsIGFib3ZlLiAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYwppbmRleCBjYmMxNTQyLi41YzQwMWFhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYwpAQCAtNzMsNyArNzMsNyBAQAogI2RlZmluZSBGX1NISUZURUQgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEZfRVNDVEhST1VHSE9VVCAgICAgICAgIDB4MDIKIAotI2RlZmluZSBTVEFURV9TRVRHKGRuLCB2KSAgICAgICAoKHN0YXRlKS0+Y1tkbl0pID0gKHYpOworI2RlZmluZSBTVEFURV9TRVRHKGRuLCB2KSAgICAgICBkbyB7ICgoc3RhdGUpLT5jW2RuXSkgPSAodik7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRFX0dFVEcoZG4pICAgICAgICAgICgoc3RhdGUpLT5jW2RuXSkKIAogI2RlZmluZSBTVEFURV9HMCAgICAgICAgICAgICAgICBTVEFURV9HRVRHKDApCkBAIC04NSwxMCArODUsMTAgQEAKICNkZWZpbmUgU1RBVEVfU0VURzIodikgICAgICAgICAgU1RBVEVfU0VURygyLCB2KQogI2RlZmluZSBTVEFURV9TRVRHMyh2KSAgICAgICAgICBTVEFURV9TRVRHKDMsIHYpCiAKLSNkZWZpbmUgU1RBVEVfU0VURkxBRyhmKSAgICAgICAgKChzdGF0ZSktPmNbNF0pIHw9IChmKTsKKyNkZWZpbmUgU1RBVEVfU0VURkxBRyhmKSAgICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgfD0gKGYpOyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFURV9HRVRGTEFHKGYpICAgICAgICAoKHN0YXRlKS0+Y1s0XSAmIChmKSkKLSNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHKGYpICAgICAgKChzdGF0ZSktPmNbNF0pICY9IH4oZik7Ci0jZGVmaW5lIFNUQVRFX0NMRUFSRkxBR1MoKSAgICAgICgoc3RhdGUpLT5jWzRdKSA9IDA7CisjZGVmaW5lIFNUQVRFX0NMRUFSRkxBRyhmKSAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pICY9IH4oZik7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNUQVRFX0NMRUFSRkxBR1MoKSAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pID0gMDsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBJU08yMDIyX0NPTkZJRyAgICAgICAgICAoKGNvbnN0IHN0cnVjdCBpc28yMDIyX2NvbmZpZyAqKWNvbmZpZykKICNkZWZpbmUgQ09ORklHX0lTU0VUKGZsYWcpICAgICAgKElTTzIwMjJfQ09ORklHLT5mbGFncyAmIChmbGFnKSkKQEAgLTEwMiw4ICsxMDIsOCBAQAogLyotKi0gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIC0qLSovCiAKIHR5cGVkZWYgaW50ICgqaXNvMjAyMl9pbml0X2Z1bmMpKHZvaWQpOwotdHlwZWRlZiB1Y3M0X3QgKCppc28yMDIyX2RlY29kZV9mdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLXR5cGVkZWYgREJDSEFSICgqaXNvMjAyMl9lbmNvZGVfZnVuYykoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpOwordHlwZWRlZiBQeV9VQ1M0ICgqaXNvMjAyMl9kZWNvZGVfZnVuYykoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cit0eXBlZGVmIERCQ0hBUiAoKmlzbzIwMjJfZW5jb2RlX2Z1bmMpKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCk7CiAKIHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uIHsKICAgICB1bnNpZ25lZCBjaGFyIG1hcms7CkBAIC0xMzIsNTMgKzEzMiw1MiBAQAogCiBFTkNPREVSX0lOSVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9DTEVBUkZMQUdTKCkKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpCisgICAgU1RBVEVfQ0xFQVJGTEFHUygpOworICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpOwogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSX1JFU0VUKGlzbzIwMjIpCiB7CiAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICBXUklURTEoU0kpCi0gICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCisgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICBORVhUX09VVCgxKTsKKyAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CiAgICAgfQogICAgIGlmIChTVEFURV9HMCAhPSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgIFdSSVRFMyhFU0MsICcoJywgJ0InKQotICAgICAgICBORVhUX09VVCgzKQotICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQorICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCAnQicpOworICAgICAgICBORVhUX09VVCgzKTsKKyAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSKGlzbzIwMjIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKICAgICAgICAgREJDSEFSIGVuY29kZWQ7Ci0gICAgICAgIHVjczRfdCBjID0gKippbmJ1ZjsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBpZiAoU1RBVEVfRzAgIT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcoJywgJ0InKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCAnQicpOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgZW5jb2RlZCA9IE1BUF9VTk1BUFBBQkxFOwogICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspIHsKQEAgLTE4NywyNCArMTg2LDE0IEBACiAgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpIHsKICAgICAgICAgICAgICAgICAvKiB0aGlzIGltcGxlbWVudGF0aW9uIHdvbid0IHdvcmsgZm9yIHBhaXIKICAgICAgICAgICAgICAgICAgKiBvZiBub24tYm1wIGNoYXJhY3RlcnMuICovCi0gICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgTUJFTkNfRkxVU0gpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gLTE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMjsKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMikgewotICAgICAgICAgICAgICAgICAgICB1Y3M0X3QgdTRpblsyXTsKLSAgICAgICAgICAgICAgICAgICAgdTRpblswXSA9ICh1Y3M0X3QpSU4xOwotICAgICAgICAgICAgICAgICAgICB1NGluWzFdID0gKHVjczRfdClJTjI7Ci0gICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIodTRpbiwgJmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIoJmMsICZsZW5ndGgpOwotI2Vsc2UKICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKCZjLCAmbGVuZ3RoKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGlmIChlbmNvZGVkICE9IE1BUF9VTk1BUFBBQkxFKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2l6ZSA9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjEsNDcgKzIxMCw0NiBAQAogICAgICAgICBzd2l0Y2ggKGRzZy0+cGxhbmUpIHsKICAgICAgICAgY2FzZSAwOiAvKiBHMCAqLwogICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU1RBVEVfRzAgIT0gZHNnLT5tYXJrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKCcsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJygnLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHNnLT5tYXJrID09IENIQVJTRVRfSklTWDAyMDgpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJyQnLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICckJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBXUklURTQoRVNDLCAnJCcsICcoJywKLSAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEU0KEVTQywgJyQnLCAnKCcsCisgICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOiAvKiBHMSAqLwogICAgICAgICAgICAgaWYgKFNUQVRFX0cxICE9IGRzZy0+bWFyaykgewogICAgICAgICAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBXUklURTQoRVNDLCAnJCcsICcpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEU0KEVTQywgJyQnLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNPKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMShTTyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IC8qIEcyIGFuZCBHMyBpcyBub3Qgc3VwcG9ydGVkOiBubyBlbmNvZGluZyBpbgpAQCAtMjcwLDE0ICsyNTgsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhcillbmNvZGVkKQotICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpZW5jb2RlZCk7CisgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFdSSVRFMihlbmNvZGVkID4+IDgsIGVuY29kZWQgJiAweGZmKQotICAgICAgICAgICAgTkVYVF9PVVQoMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoZW5jb2RlZCA+PiA4LCBlbmNvZGVkICYgMHhmZik7CisgICAgICAgICAgICBORVhUX09VVCgyKTsKICAgICAgICAgfQotICAgICAgICBORVhUX0lOKGluc2l6ZSkKKyAgICAgICAgTkVYVF9JTkNIQVIoaW5zaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI4NSwxNyArMjczLDE3IEBACiAKIERFQ09ERVJfSU5JVChpc28yMDIyKQogewotICAgIFNUQVRFX0NMRUFSRkxBR1MoKQotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMihDSEFSU0VUX0FTQ0lJKQorICAgIFNUQVRFX0NMRUFSRkxBR1MoKTsKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMihDSEFSU0VUX0FTQ0lJKTsKICAgICByZXR1cm4gMDsKIH0KIAogREVDT0RFUl9SRVNFVChpc28yMDIyKQogewotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzE0LDggKzMwMiw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0pJU1gwMjA4X0VYVCkgJiYgaSsxIDwgKmlubGVmdCAmJgotICAgICAgICAgICAgICAgICAoKmluYnVmKVtpXSA9PSAnJicgJiYgKCppbmJ1ZilbaSsxXSA9PSAnQCcpCisgICAgICAgICAgICAgICAgICgqaW5idWYpW2ldID09ICcmJyAmJiAoKmluYnVmKVtpKzFdID09ICdAJykgewogICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGkgPj0gTUFYX0VTQ1NFUUxFTikKQEAgLTMyMywyNyArMzEyLDMzIEBACiAKICAgICBzd2l0Y2ggKGVzY2xlbikgewogICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKElOMiA9PSAnJCcpIHsKLSAgICAgICAgICAgIGNoYXJzZXQgPSBJTjMgfCBDSEFSU0VUX0RCQ1M7CisgICAgICAgIGlmIChJTkJZVEUyID09ICckJykgeworICAgICAgICAgICAgY2hhcnNldCA9IElOQllURTMgfCBDSEFSU0VUX0RCQ1M7CiAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyc2V0ID0gSU4zOwotICAgICAgICAgICAgaWYgKElOMiA9PSAnKCcpIGRlc2lnbmF0aW9uID0gMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKElOMiA9PSAnKScpIGRlc2lnbmF0aW9uID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOMiA9PSAnLicpCisgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMzsKKyAgICAgICAgICAgIGlmIChJTkJZVEUyID09ICcoJykKKyAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChJTkJZVEUyID09ICcpJykKKyAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTkJZVEUyID09ICcuJykKICAgICAgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDI7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAzOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgaWYgKElOMiAhPSAnJCcpCisgICAgICAgIGlmIChJTkJZVEUyICE9ICckJykKICAgICAgICAgICAgIHJldHVybiA0OwogCi0gICAgICAgIGNoYXJzZXQgPSBJTjQgfCBDSEFSU0VUX0RCQ1M7Ci0gICAgICAgIGlmIChJTjMgPT0gJygnKSBkZXNpZ25hdGlvbiA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKElOMyA9PSAnKScpIGRlc2lnbmF0aW9uID0gMTsKLSAgICAgICAgZWxzZSByZXR1cm4gNDsKKyAgICAgICAgY2hhcnNldCA9IElOQllURTQgfCBDSEFSU0VUX0RCQ1M7CisgICAgICAgIGlmIChJTkJZVEUzID09ICcoJykKKyAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKKyAgICAgICAgZWxzZSBpZiAoSU5CWVRFMyA9PSAnKScpCisgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIDY6IC8qIGRlc2lnbmF0aW9uIHdpdGggcHJlZml4ICovCiAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoVVNFX0pJU1gwMjA4X0VYVCkgJiYKQEAgLTM2Myw1OCArMzU4LDY1IEBACiAgICAgaWYgKGNoYXJzZXQgIT0gQ0hBUlNFVF9BU0NJSSkgewogICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogCi0gICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykKKyAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKSB7CiAgICAgICAgICAgICBpZiAoZHNnLT5tYXJrID09IGNoYXJzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFkc2ctPm1hcmspCiAgICAgICAgICAgICByZXR1cm4gZXNjbGVuOwogICAgIH0KIAotICAgIFNUQVRFX1NFVEcoZGVzaWduYXRpb24sIGNoYXJzZXQpCisgICAgU1RBVEVfU0VURyhkZXNpZ25hdGlvbiwgY2hhcnNldCk7CiAgICAgKmlubGVmdCAtPSBlc2NsZW47CiAgICAgKCppbmJ1ZikgKz0gZXNjbGVuOwogICAgIHJldHVybiAwOwogfQogCi0jZGVmaW5lIElTTzg4NTlfN19ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4YTApIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpIDwgMHhjMCAmJiAoMHgyODhmM2JjOUwgJiAoMUwgPDwgKChjKS0weGEwKSkpKSAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID49IDB4YjQgJiYgKGMpIDw9IDB4ZmUgJiYgKChjKSA+PSAweGQ0IHx8ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgKDB4YmZmZmZkNzdMICYgKDFMIDw8ICgoYyktMHhiNCkpKSkpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IDB4MDJkMCArIChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YTEpIChhc3NpKSA9IDB4MjAxODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YTIpIChhc3NpKSA9IDB4MjAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4YWYpIChhc3NpKSA9IDB4MjAxNTsKKyNkZWZpbmUgSVNPODg1OV83X0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4YTApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA8IDB4YzAgJiYgKDB4Mjg4ZjNiYzlMICYgKDFMIDw8ICgoYyktMHhhMCkpKSkgeyBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID49IDB4YjQgJiYgKGMpIDw9IDB4ZmUgJiYgKChjKSA+PSAweGQ0IHx8ICAgICAgIFwKKyAgICAgICAgICAgICAoMHhiZmZmZmQ3N0wgJiAoMUwgPDwgKChjKS0weGI0KSkpKSkgeyAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMmQwICsgKGMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YTEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhMikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxOSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGFmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogc3RhdGljIFB5X3NzaXplX3QKIGlzbzIwMjJwcm9jZXNzZzIoY29uc3Qgdm9pZCAqY29uZmlnLCBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCAqaW5sZWZ0LAotICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90ICpvdXRsZWZ0KQorICAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgLyogbm90IHdyaXR0ZW4gdG8gdXNlIGVuY29kZXIsIGRlY29kZXIgZnVuY3Rpb25zIGJlY2F1c2Ugb25seSBmZXcKICAgICAgKiBlbmNvZGluZ3MgdXNlIEcyIGRlc2lnbmF0aW9ucyBpbiBDSktDb2RlY3MgKi8KICAgICBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9JU084ODU5XzEpIHsKLSAgICAgICAgaWYgKElOMyA8IDB4ODApCi0gICAgICAgICAgICBPVVQxKElOMyArIDB4ODApCisgICAgICAgIGlmIChJTkJZVEUzIDwgMHg4MCkKKyAgICAgICAgICAgIE9VVENIQVIoSU5CWVRFMyArIDB4ODApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMzsKICAgICB9CiAgICAgZWxzZSBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9JU084ODU5XzcpIHsKLSAgICAgICAgSVNPODg1OV83X0RFQ09ERShJTjMgXiAweDgwLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSByZXR1cm4gMzsKKyAgICAgICAgSVNPODg1OV83X0RFQ09ERShJTkJZVEUzIF4gMHg4MCwgd3JpdGVyKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMzsKICAgICB9CiAgICAgZWxzZSBpZiAoU1RBVEVfRzIgPT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICBpZiAoSU4zICYgMHg4MCkgcmV0dXJuIDM7Ci0gICAgICAgIGVsc2UgKipvdXRidWYgPSBJTjM7CisgICAgICAgIGlmIChJTkJZVEUzICYgMHg4MCkKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRDSEFSKElOQllURTMpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQkVSUl9JTlRFUk5BTDsKIAogICAgICgqaW5idWYpICs9IDM7CiAgICAgKmlubGVmdCAtPSAzOwotICAgICgqb3V0YnVmKSArPSAxOwotICAgICpvdXRsZWZ0IC09IDE7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQyMyw1OCArNDI1LDU4IEBACiAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZ2NhY2hlID0gTlVMTDsKIAogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKICAgICAgICAgUHlfc3NpemVfdCBlcnI7CiAKICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKSkgewogICAgICAgICAgICAgLyogRVNDIHRocm91Z2hvdXQgbW9kZToKICAgICAgICAgICAgICAqIGZvciBub24taXNvMjAyMiBlc2NhcGUgc2VxdWVuY2VzICovCi0gICAgICAgICAgICBXUklURTEoYykgLyogYXNzdW1lIGFzIElTTy04ODU5LTEgKi8KLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7IC8qIGFzc3VtZSBhcyBJU08tODg1OS0xICovCisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgaWYgKElTX0VTQ0VORChjKSkgewotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX0VTQ1RIUk9VR0hPVVQpCisgICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfRVNDVEhST1VHSE9VVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICBjYXNlIEVTQzoKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGlmIChJU19JU08yMDIyRVNDKElOMikpIHsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBpZiAoSVNfSVNPMjAyMkVTQyhJTkJZVEUyKSkgewogICAgICAgICAgICAgICAgIGVyciA9IGlzbzIwMjJwcm9jZXNzZXNjKGNvbmZpZywgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOMiA9PSAnTicpIHsvKiBTUzIgKi8KLSAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCisgICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTkJZVEUyID09ICdOJykgey8qIFNTMiAqLworICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CiAgICAgICAgICAgICAgICAgZXJyID0gaXNvMjAyMnByb2Nlc3NnMihjb25maWcsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCwgb3V0YnVmLCAmb3V0bGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCwgd3JpdGVyKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXUklURTEoRVNDKQotICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVTQyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTSToKICAgICAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoTk9fU0hJRlQpKQogICAgICAgICAgICAgICAgIGdvdG8gYnlwYXNzOwotICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIE5FWFRfSU4oMSkKKyAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNPOgogICAgICAgICAgICAgaWYgKENPTkZJR19JU1NFVChOT19TSElGVCkpCiAgICAgICAgICAgICAgICAgZ290byBieXBhc3M7Ci0gICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIE5FWFRfSU4oMSkKKyAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMRjoKLSAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBXUklURTEoTEYpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE9VVENIQVIoTEYpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPCAweDIwKSAvKiBDMCAqLwpAQCAtNDg0LDcgKzQ4Niw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2hhcnNldDsKLSAgICAgICAgICAgICAgICB1Y3M0X3QgZGVjb2RlZDsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKQogICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gU1RBVEVfRzE7CkBAIC00OTIsNDMgKzQ5NCw0NCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gU1RBVEVfRzA7CiAKICAgICAgICAgICAgICAgICBpZiAoY2hhcnNldCA9PSBDSEFSU0VUX0FTQ0lJKSB7Ci1ieXBhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRzZ2NhY2hlICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlLT5tYXJrID09IGNoYXJzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnID0gZHNnY2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZy0+bWFyayAhPSBjaGFyc2V0Ci0jaWZkZWYgUHlfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRzZy0+bWFyayAhPSAnXDAnCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtkc2crKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGRzZy0+bWFyayAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2djYWNoZSA9IGRzZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoZHNnLT53aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGRzZy0+ZGVjb2RlcigqaW5idWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHNnLT53aWR0aDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA8IDB4MTAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURTEoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY29kZWQgPCAweDMwMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8qIEpJUyBYIDAyMTMgcGFpcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgV1JJVEUyKGRlY29kZWQgPj4gMTYsIGRlY29kZWQgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDIpCitieXBhc3M6CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBORVhUX0lOKGRzZy0+d2lkdGgpCisKKyAgICAgICAgICAgICAgICBpZiAoZHNnY2FjaGUgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICBkc2djYWNoZS0+bWFyayA9PSBjaGFyc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgZHNnID0gZHNnY2FjaGU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBkc2ctPm1hcmsgIT0gY2hhcnNldAorI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZHNnLT5tYXJrICE9ICdcMCcKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgIDsgZHNnKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZHNnLT5tYXJrICE9ICdcMCcpOworICAgICAgICAgICAgICAgICAgICBkc2djYWNoZSA9IGRzZzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKGRzZy0+d2lkdGgpOworICAgICAgICAgICAgICAgIGRlY29kZWQgPSBkc2ctPmRlY29kZXIoKmluYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzZy0+d2lkdGg7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVjb2RlZCA8IDB4MTAwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjb2RlZCA8IDB4MzAwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7IC8qIEpJUyBYIDAyMTMgcGFpcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUjIoZGVjb2RlZCA+PiAxNiwgZGVjb2RlZCAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE5FWFRfSU4oZHNnLT53aWR0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTc3LDI1ICs1ODAsMjYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGtzeDEwMDFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1rc3gxMDAxX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitrc3gxMDAxX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGVkLCAqZGF0YSkKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpAQCAtNjEzLDI3ICs2MTcsMjcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjA4X2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwOF9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDhfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKICAgICAgICAgaWYgKCpkYXRhID09IDB4ZmYzYykgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICAgICAgcmV0dXJuIDB4MjE0MDsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgIH0KQEAgLTY1NCwyMyArNjU4LDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhqaXN4MDIxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEyX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQgJiAweDdmZmY7CiAgICAgICAgIH0KQEAgLTcwNSwzMCArNzA5LDM0IEBACiB9CiAKICNkZWZpbmUgY29uZmlnICgodm9pZCAqKTIwMDApCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwMF8xX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEodSwgZGF0YVswXSwgZGF0YVsxXSkKICAgICBlbHNlIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSk7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwMF8yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih1LCBkYXRhWzBdLCBkYXRhWzFdKQotICAgIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTJfQ0hBUih1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CkBAIC03MzYsMjggKzc0NCwzMiBAQAogfQogI3VuZGVmIGNvbmZpZwogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwNF8xX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKKyAgICBQeV9VQ1M0IHU7CiAgICAgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDA0XzJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKQEAgLTc2NSw3ICs3NzcsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM19lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoLCB2b2lkICpjb25maWcpCitqaXN4MDIxM19lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCwgdm9pZCAqY29uZmlnKQogewogICAgIERCQ0hBUiBjb2RlZDsKIApAQCAtNzc0LDI4ICs3ODYsMjggQEAKICAgICAgICAgaWYgKCpkYXRhID49IDB4MTAwMDApIHsKICAgICAgICAgICAgIGlmICgoKmRhdGEpID4+IDE2ID09IDB4MjAwMDAgPj4gMTYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlZCwgKmRhdGEpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZGF0YSkgJiAweGZmZmYpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGVkLCAoKmRhdGEpICYgMHhmZmZmKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICB9CiAKICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZWQsICpkYXRhKQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCA9PSBNVUxUSUMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1BUF9NVUxUSVBMRV9BVkFJTDsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkICYgMHg4MDAwKQogICAgICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIHJldHVybiBjb2RlZDsKKwogICAgIGNhc2UgMjogLyogc2Vjb25kIGNoYXJhY3RlciBvZiB1bmljb2RlIHBhaXIgKi8KICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAodWNzMl90KWRhdGFbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICBpZiAoY29kZWQgPT0gREJDSU5WKSB7CiAgICAgICAgICAgICAqbGVuZ3RoID0gMTsKICAgICAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgMCwKQEAgLTgwNSwyMSArODE3LDI0IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworCiAgICAgY2FzZSAtMTogLyogZmx1c2ggdW50ZXJtaW5hdGVkICovCiAgICAgICAgICpsZW5ndGggPSAxOwogICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICBpZiAoY29kZWQgPT0gREJDSU5WKQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIH0KIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8xX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsICh2b2lkICopMjAwMCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTgzMSw3ICs4NDYsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgUHlfc3NpemVfdCBpbGVuZ3RoID0gKmxlbmd0aDsKQEAgLTg1NCw3ICs4NjksNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgKHZvaWQgKikyMDAwKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODY2LDcgKzg4MSw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8xX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCBOVUxMKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODc4LDcgKzg5Myw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBQeV9zc2l6ZV90IGlsZW5ndGggPSAqbGVuZ3RoOwpAQCAtOTAxLDcgKzkxNiw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDRfMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwNF8yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCBOVUxMKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtOTEyLDM5ICs5MjcsNDMgQEAKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDFfcl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgSklTWDAyMDFfUl9ERUNPREUoKmRhdGEsIHUpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgUHlfVUNTNCB1OworICAgIEpJU1gwMjAxX1JfREVDT0RFX0NIQVIoKmRhdGEsIHUpCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjAxX3JfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjAxX3JfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIEpJU1gwMjAxX1JfRU5DT0RFKCpkYXRhLCBjb2RlZCkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gY29kZWQ7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwMV9rX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBKSVNYMDIwMV9LX0RFQ09ERSgqZGF0YSBeIDB4ODAsIHUpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgUHlfVUNTNCB1OworICAgIEpJU1gwMjAxX0tfREVDT0RFX0NIQVIoKmRhdGEgXiAweDgwLCB1KQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwMV9rX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwMV9rX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBKSVNYMDIwMV9LX0VOQ09ERSgqZGF0YSwgY29kZWQpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIGNvZGVkIC0gMHg4MDsKIH0KIApAQCAtOTYxLDIzICs5ODAsMjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGdiMjMxMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhnYjIzMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1nYjIzMTJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2diMjMxMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmICghKGNvZGVkICYgMHg4MDAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgIH0KQEAgLTk4NiwxNCArMTAwNSwxNCBAQAogfQogCiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBkdW1teV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1kdW1teV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQorZHVtbXlfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCmluZGV4IGE1MDA2OTYuLjJjNzc4OGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKQEAgLTE5LDQwICsxOSw0MSBAQAogCiBFTkNPREVSKGNwOTMyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAgICAgICAgIGlmIChjIDw9IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewotICAgICAgICAgICAgV1JJVEUxKGMgLSAweGZlYzApCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMgLSAweGZlYzApOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmOGYwICYmIGMgPD0gMHhmOGYzKSB7CiAgICAgICAgICAgICAvKiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgIGlmIChjID09IDB4ZjhmMCkKLSAgICAgICAgICAgICAgICBPVVQxKDB4YTApCisgICAgICAgICAgICAgICAgT1VUQllURTEoMHhhMCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT1VUMShjIC0gMHhmZWYxICsgMHhmZCkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRCWVRFMShjIC0gMHhmZWYxICsgMHhmZCk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAotICAgICAgICBUUllNQVBfRU5DKGNwOTMyZXh0LCBjb2RlLCBjKSB7Ci0gICAgICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgICAgIE9VVDIoY29kZSAmIDB4ZmYpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTMyZXh0LCBjb2RlLCBjKSkgeworICAgICAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweGZmKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogSklTIFggMDIxMiAqLwogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC02MSwyMCArNjIsMjAgQEAKICAgICAgICAgICAgIGMyID0gY29kZSAmIDB4ZmY7CiAgICAgICAgICAgICBjMiA9ICgoKGMxIC0gMHgyMSkgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwogICAgICAgICAgICAgYzEgPSAoYzEgLSAweDIxKSA+PiAxOwotICAgICAgICAgICAgT1VUMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpCi0gICAgICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKKyAgICAgICAgICAgIE9VVEJZVEUxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSk7CisgICAgICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhlMDAwICYmIGMgPCAweGU3NTgpIHsKICAgICAgICAgICAgIC8qIFVzZXItZGVmaW5lZCBhcmVhICovCi0gICAgICAgICAgICBjMSA9IChQeV9VTklDT0RFKShjIC0gMHhlMDAwKSAvIDE4ODsKLSAgICAgICAgICAgIGMyID0gKFB5X1VOSUNPREUpKGMgLSAweGUwMDApICUgMTg4OwotICAgICAgICAgICAgT1VUMShjMSArIDB4ZjApCi0gICAgICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKKyAgICAgICAgICAgIGMxID0gKFB5X1VDUzQpKGMgLSAweGUwMDApIC8gMTg4OworICAgICAgICAgICAgYzIgPSAoUHlfVUNTNCkoYyAtIDB4ZTAwMCkgJSAxODg7CisgICAgICAgICAgICBPVVRCWVRFMShjMSArIDB4ZjApOworICAgICAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC04MywzMyArODQsMzQgQEAKIERFQ09ERVIoY3A5MzIpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xLCBjMjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQogICAgICAgICBpZiAoYyA8PSAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhhMCAmJiBjIDw9IDB4ZGYpIHsKICAgICAgICAgICAgIGlmIChjID09IDB4YTApCi0gICAgICAgICAgICAgICAgT1VUMSgweGY4ZjApIC8qIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZjhmMCk7IC8qIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmQvKiAmJiBjIDw9IDB4ZmYqLykgewogICAgICAgICAgICAgLyogV2luZG93cyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgICAgICBPVVQxKDB4ZjhmMSAtIDB4ZmQgKyBjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUigweGY4ZjEgLSAweGZkICsgYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBjMiA9IElOQllURTI7CiAKLSAgICAgICAgVFJZTUFQX0RFQyhjcDkzMmV4dCwgKipvdXRidWYsIGMsIGMyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoY3A5MzJleHQsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhlYSkpewogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTE5LDIxICsxMjEsMjMgQEAKICAgICAgICAgICAgIGMgPSAoMiAqIGMgKyAoYzIgPCAweDVlID8gMCA6IDEpICsgMHgyMSk7CiAgICAgICAgICAgICBjMiA9IChjMiA8IDB4NWUgPyBjMiA6IGMyIC0gMHg1ZSkgKyAweDIxOwogCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZjAgJiYgYyA8PSAweGY5KSB7CiAgICAgICAgICAgICBpZiAoKGMyID49IDB4NDAgJiYgYzIgPD0gMHg3ZSkgfHwKICAgICAgICAgICAgICAgICAoYzIgPj0gMHg4MCAmJiBjMiA8PSAweGZjKSkKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZTAwMCArIDE4OCAqIChjIC0gMHhmMCkgKwotICAgICAgICAgICAgICAgICAgICAgKGMyIDwgMHg4MCA/IGMyIC0gMHg0MCA6IGMyIC0gMHg0MSkpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGUwMDAgKyAxODggKiAoYyAtIDB4ZjApICsKKyAgICAgICAgICAgICAgICAgICAgKGMyIDwgMHg4MCA/IGMyIC0gMHg0MCA6IGMyIC0gMHg0MSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE0NiwyNSArMTUwLDI0IEBACiAKIEVOQ09ERVIoZXVjX2ppc18yMDA0KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgaWYgKGMgPD0gMHhGRkZGKSB7CiAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlLCBjKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE1CRU5DX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCAwLApAQCAtMTc3LDggKzE4MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgYzIgPSBJTkNIQVIyOwogICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsICgqaW5idWYpWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gREJDSU5WKSB7CkBAIC0xOTMsMTEgKzE5NywxMiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewogICAgICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwotICAgICAgICAgICAgICAgIFdSSVRFMigweDhlLCBjIC0gMHhmZWMwKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgICAgICBXUklURUJZVEUyKDB4OGUsIGMgLSAweGZlYzApOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykKQEAgLTIxMSwyMCArMjE2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PiAxNiA9PSBFTVBCQVNFID4+IDE2KSB7CiAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlLCBjKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyAmIDB4ZmZmZikpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgewogICAgICAgICAgICAgLyogQ29kZXNldCAyICovCi0gICAgICAgICAgICBXUklURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoaW5zaXplLCAzKQorICAgICAgICAgICAgV1JJVEVCWVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoaW5zaXplLCAzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIENvZGVzZXQgMSAqLwotICAgICAgICAgICAgV1JJVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzNCwxNCArMjQxLDEyIEBACiBERUNPREVSKGV1Y19qaXNfMjAwNCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0gICAgICAgIHVjczRfdCBjb2RlOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgY29kZSwgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjQ5LDExICsyNTQsMTEgQEAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyID49IDB4YTEgJiYgYzIgPD0gMHhkZikgewotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYzIpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYzIpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNjEsNDcgKzI2Niw1NSBAQAogICAgICAgICBlbHNlIGlmIChjID09IDB4OGYpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIsIGMzOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCi0gICAgICAgICAgICBjMiA9IElOMiBeIDB4ODA7Ci0gICAgICAgICAgICBjMyA9IElOMyBeIDB4ODA7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyIF4gMHg4MDsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMyBeIDB4ODA7CiAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTMgUGxhbmUgMiBvciBKSVMgWCAwMjEyIChzZWUgTk9URVMpICovCi0gICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMigqKm91dGJ1ZiwgYzIsIGMzKQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCAqKm91dGJ1ZiwgYzIsIGMzKSA7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMyLCBjMykgewotICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICBORVhUX0lOKDMpCisgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsIGMyLCBjMykKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIGRlY29kZWQsIGMyLCBjMykpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMyLCBjMykpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEyLCAqKm91dGJ1ZiwgYzIsIGMzKSA7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgzLCAxKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgZGVjb2RlZCwgYzIsIGMzKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAgICAgICAgICAgICBjIF49IDB4ODA7Ci0gICAgICAgICAgICBjMiA9IElOMiBeIDB4ODA7CisgICAgICAgICAgICBjMiA9IElOQllURTIgXiAweDgwOwogCiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEzIFBsYW5lIDEgKi8KLSAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKCoqb3V0YnVmLCBjLCBjMikKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMSAmJiBjMiA9PSAweDQwKSAqKm91dGJ1ZiA9IDB4ZmYzYzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMiAmJiBjMiA9PSAweDMyKSAqKm91dGJ1ZiA9IDB4ZmY1ZTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYywgYzIpIHsKLSAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEod3JpdGVyLCBjLCBjMikKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMSAmJiBjMiA9PSAweDQwKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMiAmJiBjMiA9PSAweDMyKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMsIGMyKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAyKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMxNSwzNSArMzI4LDM3IEBACiAKIEVOQ09ERVIoZXVjX2pwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlIGlmIChjID49IDB4ZmY2MSAmJiBjIDw9IDB4ZmY5ZikgewogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCi0gICAgICAgICAgICBXUklURTIoMHg4ZSwgYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoMHg4ZSwgYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKSAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICAgICAgY29kZSA9IDB4MjE0MDsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGE1KSB7IC8qIFlFTiBTSUdOICovCi0gICAgICAgICAgICBXUklURTEoMHg1Yyk7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKDB4NWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9IGVsc2UgaWYgKGMgPT0gMHgyMDNlKSB7IC8qIE9WRVJMSU5FICovCi0gICAgICAgICAgICBXUklURTEoMHg3ZSk7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKDB4N2UpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTM1MiwxMiArMzY3LDEyIEBACiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTIgKi8KLSAgICAgICAgICAgIFdSSVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAzKQorICAgICAgICAgICAgV1JJVEVCWVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjA4ICovCi0gICAgICAgICAgICBXUklURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjcsMTMgKzM4MiwxMiBAQAogREVDT0RFUihldWNfanApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMzgxLDExICszOTUsMTEgQEAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyID49IDB4YTEgJiYgYzIgPD0gMHhkZikgewotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYzIpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYzIpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0zOTMsMTIgKzQwNywxMyBAQAogICAgICAgICBlbHNlIGlmIChjID09IDB4OGYpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIsIGMzOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpCi0gICAgICAgICAgICBjMiA9IElOMjsKLSAgICAgICAgICAgIGMzID0gSU4zOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMzsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTIgKi8KLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMTIsICoqb3V0YnVmLCBjMiBeIDB4ODAsIGMzIF4gMHg4MCkgewotICAgICAgICAgICAgICAgIE5FWFQoMywgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCBkZWNvZGVkLCBjMiBeIDB4ODAsIGMzIF4gMHg4MCkpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC00MDYsMTkgKzQyMSwyMCBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDggKi8KICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBpZiAoYyA9PSAweGExICYmIGMyID09IDB4YzApCiAgICAgICAgICAgICAgICAgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KLSAgICAgICAgICAgICAgICAqKm91dGJ1ZiA9IDB4ZmYzYzsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXiAweDgwLCBjMiBeIDB4ODApIDsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYyBeIDB4ODAsIGMyIF4gMHg4MCkpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzMiwzNCArNDQ4LDQwIEBACiAKIEVOQ09ERVIoc2hpZnRfamlzKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAjaWZkZWYgU1RSSUNUX0JVSUxECiAgICAgICAgIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGNvZGUpCiAjZWxzZQotICAgICAgICBpZiAoYyA8IDB4ODApIGNvZGUgPSBjOwotICAgICAgICBlbHNlIGlmIChjID09IDB4MDBhNSkgY29kZSA9IDB4NWM7IC8qIFlFTiBTSUdOICovCi0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDNlKSBjb2RlID0gMHg3ZTsgLyogT1ZFUkxJTkUgKi8KKyAgICAgICAgaWYgKGMgPCAweDgwKQorICAgICAgICAgICAgY29kZSA9IGM7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgwMGE1KQorICAgICAgICAgICAgY29kZSA9IDB4NWM7IC8qIFlFTiBTSUdOICovCisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDNlKQorICAgICAgICAgICAgY29kZSA9IDB4N2U7IC8qIE9WRVJMSU5FICovCiAjZW5kaWYKICAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIFVDUzRJTlZBTElEKGMpCi0gICAgICAgIGVsc2UgY29kZSA9IE5PQ0hBUjsKKyAgICAgICAgZWxzZSBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gTk9DSEFSOwogCiAgICAgICAgIGlmIChjb2RlIDwgMHg4MCB8fCAoY29kZSA+PSAweGExICYmIGNvZGUgPD0gMHhkZikpIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKIAotICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhciljb2RlKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpY29kZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoY29kZSA9PSBOT0NIQVIpIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpCiAgICAgICAgICAgICAgICAgY29kZSA9IDB4MjE0MDsgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KQEAgLTQ3NSw5ICs0OTcsOSBAQAogICAgICAgICBjMiA9IGNvZGUgJiAweGZmOwogICAgICAgICBjMiA9ICgoKGMxIC0gMHgyMSkgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwogICAgICAgICBjMSA9IChjMSAtIDB4MjEpID4+IDE7Ci0gICAgICAgIE9VVDEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKQotICAgICAgICBPVVQyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSkKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpOworICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDg2LDIxICs1MDgsMjEgQEAKIERFQ09ERVIoc2hpZnRfamlzKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICNpZmRlZiBTVFJJQ1RfQlVJTEQKLSAgICAgICAgSklTWDAyMDFfUl9ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikKICNlbHNlCi0gICAgICAgIGlmIChjIDwgMHg4MCkgKipvdXRidWYgPSBjOworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICBPVVRDSEFSKGMpOwogI2VuZGlmCi0gICAgICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKQogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZWEpKXsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTUxMiwxMyArNTM0LDE0IEBACiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgaWYgKGMxID09IDB4MjEgJiYgYzIgPT0gMHg0MCkgewogICAgICAgICAgICAgICAgIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCi0gICAgICAgICAgICAgICAgT1VUMSgweGZmM2MpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMxLCBjMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC01MjcsNyArNTUwLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAxKSAvKiBKSVMgWCAwMjAxICovCisgICAgICAgIE5FWFRfSU4oMSk7IC8qIEpJUyBYIDAyMDEgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTU0MCwzMCArNTYzLDI5IEBACiAKIEVOQ09ERVIoc2hpZnRfamlzXzIwMDQpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlID0gTk9DSEFSOwogICAgICAgICBpbnQgYzEsIGMyOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBKSVNYMDIwMV9FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBERUNPREVfU1VSUk9HQVRFKGMpCiAKICAgICAgICAgaWYgKGNvZGUgPCAweDgwIHx8IChjb2RlID49IDB4YTEgJiYgY29kZSA8PSAweGRmKSkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGluc2l6ZSA9IDE7CiAKICAgICAgICAgaWYgKGNvZGUgPT0gTk9DSEFSKSB7CiAgICAgICAgICAgICBpZiAoYyA8PSAweGZmZmYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlLCBjKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE1CRU5DX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVjczJfdCljLCAwLApAQCAtNTc2LDggKzU5OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoMiA9IElOQ0hBUjI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGZpbmRfcGFpcmVuY21hcCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBJTjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgY2gyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBEQkNJTlYpIHsKQEAgLTU5MywxNyArNjE2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIGFiYW5kb24gSklTIFggMDIxMiBjb2RlcyAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID4+IDE2ID09IEVNUEJBU0UgPj4gMTYpIHsKICAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChjb2RlLCBjKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMmMHhmZmZmKTsKLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMmMHhmZmZmKSkKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwpAQCAtNjEyLDIwICs2MzgsMjcgQEAKICAgICAgICAgYzEgPSBjb2RlID4+IDg7CiAgICAgICAgIGMyID0gKGNvZGUgJiAweGZmKSAtIDB4MjE7CiAKLSAgICAgICAgaWYgKGMxICYgMHg4MCkgeyAvKiBQbGFuZSAyICovCi0gICAgICAgICAgICBpZiAoYzEgPj0gMHhlZSkgYzEgLT0gMHg4NzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4YWMgfHwgYzEgPT0gMHhhOCkgYzEgLT0gMHg0OTsKLSAgICAgICAgICAgIGVsc2UgYzEgLT0gMHg0MzsKKyAgICAgICAgaWYgKGMxICYgMHg4MCkgeworICAgICAgICAgICAgLyogUGxhbmUgMiAqLworICAgICAgICAgICAgaWYgKGMxID49IDB4ZWUpCisgICAgICAgICAgICAgICAgYzEgLT0gMHg4NzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4YWMgfHwgYzEgPT0gMHhhOCkKKyAgICAgICAgICAgICAgICBjMSAtPSAweDQ5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGMxIC09IDB4NDM7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBQbGFuZSAxICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogUGxhbmUgMSAqLwogICAgICAgICAgICAgYzEgLT0gMHgyMTsKKyAgICAgICAgfQogCi0gICAgICAgIGlmIChjMSAmIDEpIGMyICs9IDB4NWU7CisgICAgICAgIGlmIChjMSAmIDEpCisgICAgICAgICAgICBjMiArPSAweDVlOwogICAgICAgICBjMSA+Pj0gMTsKLSAgICAgICAgT1VUMShjMSArIChjMSA8IDB4MWYgPyAweDgxIDogMHhjMSkpCi0gICAgICAgIE9VVDIoYzIgKyAoYzIgPCAweDNmID8gMHg0MCA6IDB4NDEpKQorICAgICAgICBPVVRCWVRFMShjMSArIChjMSA8IDB4MWYgPyAweDgxIDogMHhjMSkpOworICAgICAgICBPVVRCWVRFMihjMiArIChjMiA8IDB4M2YgPyAweDQwIDogMHg0MSkpOwogCi0gICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC02MzQsMTYgKzY2NywxNSBAQAogREVDT0RFUihzaGlmdF9qaXNfMjAwNCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKLSAgICAgICAgSklTWDAyMDFfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBKSVNYMDIwMV9ERUNPREUoYywgd3JpdGVyKQogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZmMpKXsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyOwotICAgICAgICAgICAgdWNzNF90IGNvZGU7CisgICAgICAgICAgICBQeV9VQ1M0IGNvZGUsIGRlY29kZWQ7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNjU0LDUwICs2ODYsNDcgQEAKIAogICAgICAgICAgICAgaWYgKGMxIDwgMHg1ZSkgeyAvKiBQbGFuZSAxICovCiAgICAgICAgICAgICAgICAgYzEgKz0gMHgyMTsKLSAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSgqKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURTIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMikKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUjIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBQbGFuZSAyICovCi0gICAgICAgICAgICAgICAgaWYgKGMxID49IDB4NjcpIGMxICs9IDB4MDc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHg2MyB8fCBjMSA9PSAweDVmKSBjMSAtPSAweDM3OwotICAgICAgICAgICAgICAgIGVsc2UgYzEgLT0gMHgzZDsKKyAgICAgICAgICAgICAgICBpZiAoYzEgPj0gMHg2NykKKyAgICAgICAgICAgICAgICAgICAgYzEgKz0gMHgwNzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweDYzIHx8IGMxID09IDB4NWYpCisgICAgICAgICAgICAgICAgICAgIGMxIC09IDB4Mzc7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjMSAtPSAweDNkOwogCi0gICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoKipvdXRidWYsCisgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCAqKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKSA7Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMSwgYzIpKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMSkgLyogSklTIFggMDIwMSAqLworICAgICAgICBORVhUX0lOKDEpOyAvKiBKSVMgWCAwMjAxICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKaW5kZXggZjU2OTdkZC4uMWFkNDFhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYwpAQCAtMzMsNTEgKzMzLDU2IEBACiAKIEVOQ09ERVIoZXVjX2tyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoKGNvZGUgJiAweDgwMDApID09IDApIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMSBjb2RlZCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeyAgICAgICAgICAvKiBNYXBwaW5nIGlzIGZvdW5kIGluIENQOTQ5IGV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgKiBidXQgd2UgZW5jb2RlIGl0IGluIEtTIFggMTAwMToxOTk4IEFubmV4IDMsCi0gICAgICAgICAgICAgICAgICogbWFrZS11cCBzZXF1ZW5jZSBmb3IgRVVDLUtSLiAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE1hcHBpbmcgaXMgZm91bmQgaW4gQ1A5NDkgZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgYnV0IHdlIGVuY29kZSBpdCBpbiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzLAorICAgICAgICAgICAgICAgbWFrZS11cCBzZXF1ZW5jZSBmb3IgRVVDLUtSLiAqLwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig4KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoOCk7CiAKICAgICAgICAgICAgIC8qIHN5bGxhYmxlIGNvbXBvc2l0aW9uIHByZWNlZGVuY2UgKi8KLSAgICAgICAgICAgIE9VVDEoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQyKEVVQ0tSX0pBTU9fRklMTEVSKQorICAgICAgICAgICAgT1VUQllURTEoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTIoRVVDS1JfSkFNT19GSUxMRVIpOwogCiAgICAgICAgICAgICAvKiBBbGwgY29kZXBvaW50cyBpbiBDUDk0OSBleHRlbnNpb24gYXJlIGluIHVuaWNvZGUKICAgICAgICAgICAgICAqIEhhbmd1bCBTeWxsYWJsZSBhcmVhLiAqLwogICAgICAgICAgICAgYXNzZXJ0KDB4YWMwMCA8PSBjICYmIGMgPD0gMHhkN2EzKTsKICAgICAgICAgICAgIGMgLT0gMHhhYzAwOwogCi0gICAgICAgICAgICBPVVQzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUNCh1MmNna19jaG9zZW9uZ1tjIC8gNTg4XSkKLSAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICBPVVRCWVRFMyhFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFNCh1MmNna19jaG9zZW9uZ1tjIC8gNTg4XSk7CisgICAgICAgICAgICBORVhUX09VVCg0KTsKIAotICAgICAgICAgICAgT1VUMShFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDIodTJjZ2tfanVuZ3Nlb25nWyhjIC8gMjgpICUgMjFdKQotICAgICAgICAgICAgT1VUMyhFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDQodTJjZ2tfam9uZ3Nlb25nW2MgJSAyOF0pCi0gICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICBPVVRCWVRFMShFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFMih1MmNna19qdW5nc2VvbmdbKGMgLyAyOCkgJSAyMV0pOworICAgICAgICAgICAgT1VUQllURTMoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTQodTJjZ2tfam9uZ3Nlb25nW2MgJSAyOF0pOworICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyLDI0ICsxMDcsMjMgQEAKIERFQ09ERVIoZXVjX2tyKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCiAgICAgICAgIGlmIChjID09IEVVQ0tSX0pBTU9fRklSU1RCWVRFICYmCi0gICAgICAgICAgICBJTjIgPT0gRVVDS1JfSkFNT19GSUxMRVIpIHsKKyAgICAgICAgICAgIElOQllURTIgPT0gRVVDS1JfSkFNT19GSUxMRVIpIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMToxOTk4IEFubmV4IDMgbWFrZS11cCBzZXF1ZW5jZSAqLwogICAgICAgICAgICAgREJDSEFSIGNobywganVuZywgam9uZzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig4KQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig4KTsKICAgICAgICAgICAgIGlmICgoKmluYnVmKVsyXSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSB8fAogICAgICAgICAgICAgICAgICgqaW5idWYpWzRdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFIHx8CiAgICAgICAgICAgICAgICAgKCppbmJ1ZilbNl0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUpCkBAIC0xNDUsMTEgKzE0OSwxMiBAQAogICAgICAgICAgICAgaWYgKGNobyA9PSBOT05FIHx8IGp1bmcgPT0gTk9ORSB8fCBqb25nID09IE5PTkUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgICAgIE9VVDEoMHhhYzAwICsgY2hvKjU4OCArIGp1bmcqMjggKyBqb25nKTsKLSAgICAgICAgICAgIE5FWFQoOCwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoMHhhYzAwICsgY2hvKjU4OCArIGp1bmcqMjggKyBqb25nKTsKKyAgICAgICAgICAgIE5FWFRfSU4oOCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCkgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTY2LDI3ICsxNzEsMzEgQEAKIAogRU5DT0RFUihjcDk0OSkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMihjb2RlICYgMHhGRikgLyogTVNCIHNldDogQ1A5NDkgKi8KKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBrcyB4IDEwMDEgKi8KLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCisgICAgICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7IC8qIE1TQiBzZXQ6IENQOTQ5ICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBrcyB4IDEwMDEgKi8KKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE5NSwyMiArMjA0LDI0IEBACiBERUNPREVSKGNwOTQ5KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCk7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhjcDk0OWV4dCwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGNwOTQ5ZXh0LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI1MCwxOCArMjYxLDIwIEBACiAKIEVOQ09ERVIoam9oYWIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGMgPj0gMHhhYzAwICYmIGMgPD0gMHhkN2EzKSB7CiAgICAgICAgICAgICBjIC09IDB4YWMwMDsKQEAgLTI3Miw3ICsyODUsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgzMTMxICYmIGMgPD0gMHgzMTYzKQogICAgICAgICAgICAgY29kZSA9IHUyam9oYWJqYW1vW2MgLSAweDMxMzFdOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzEsIGMyLCB0MjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHQxOwogCkBAIC0yODUsOSArMjk4LDkgQEAKICAgICAgICAgICAgICAgICB0MSA9IChjMSA8IDB4NGEgPyAoYzEgLSAweDIxICsgMHgxYjIpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMxIC0gMHgyMSArIDB4MTk3KSk7CiAgICAgICAgICAgICAgICAgdDIgPSAoKHQxICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKLSAgICAgICAgICAgICAgICBPVVQxKHQxID4+IDEpCi0gICAgICAgICAgICAgICAgT1VUMih0MiA8IDB4NGUgPyB0MiArIDB4MzEgOiB0MiArIDB4NDMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKHQxID4+IDEpOworICAgICAgICAgICAgICAgIE9VVEJZVEUyKHQyIDwgMHg0ZSA/IHQyICsgMHgzMSA6IHQyICsgMHg0Myk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTI5Niw5ICszMDksOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhmZikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhmZik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0zNDgsMTggKzM2MSwxNyBAQAogREVDT0RFUihqb2hhYikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICAgIGMgPSBJTjEsIGMyOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogCiAgICAgICAgIGlmIChjIDwgMHhkOCkgewogICAgICAgICAgICAgLyogam9oYWIgaGFuZ3VsICovCkBAIC0zODEsMzMgKzM5MywzMyBAQAogICAgICAgICAgICAgaWYgKGlfY2hvID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoaV9qdW5nID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzAwMCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2pvbmdzZW9uZ1tjX2pvbmddKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qb25nc2VvbmdbY19qb25nXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qdW5nc2VvbmdbY19qdW5nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fanVuZ3Nlb25nW2NfanVuZ10pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChpX2p1bmcgPT0gRklMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19jaG9zZW9uZ1tjX2Nob10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2Nob3Nlb25nW2NfY2hvXSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIE9VVDEoMHhhYzAwICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpX2NobyAqIDU4OCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgaV9qdW5nICogMjggKwotICAgICAgICAgICAgICAgICAgICAgICAgIChpX2pvbmcgPT0gRklMTCA/IDAgOiBpX2pvbmcpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4YWMwMCArCisgICAgICAgICAgICAgICAgICAgICAgICBpX2NobyAqIDU4OCArCisgICAgICAgICAgICAgICAgICAgICAgICBpX2p1bmcgKiAyOCArCisgICAgICAgICAgICAgICAgICAgICAgICAoaV9qb25nID09IEZJTEwgPyAwIDogaV9qb25nKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxIGV4Y2VwdCBoYW5ndWwgamFtb3MgYW5kIHN5bGxhYmxlcyAqLwogICAgICAgICAgICAgaWYgKGMgPT0gMHhkZiB8fCBjID4gMHhmOSB8fApAQCAtNDI0LDkgKzQzNiwxMyBAQAogICAgICAgICAgICAgICAgIHQxID0gdDEgKyAodDIgPCAweDVlID8gMCA6IDEpICsgMHgyMTsKICAgICAgICAgICAgICAgICB0MiA9ICh0MiA8IDB4NWUgPyB0MiA6IHQyIC0gMHg1ZSkgKyAweDIxOwogCi0gICAgICAgICAgICAgICAgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgdDEsIHQyKTsKLSAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCB0MSwgdDIpKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKaW5kZXggOTE2Mjk4ZC4uNzIyYjI2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYwpAQCAtMTMsMjYgKzEzLDMwIEBACiAKIEVOQ09ERVIoYmlnNSkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSAqKmluYnVmOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgICoqb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIpYzsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTQxLDE5ICs0NSwxOSBAQAogREVDT0RFUihiaWc1KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICAgfQpAQCAtNjgsMjUgKzcyLDMwIEBACiAKIEVOQ09ERVIoY3A5NTApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NTBleHQsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTUwZXh0LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtOTUsMjMgKzEwNCwyNSBAQAogREVDT0RFUihjcDk1MCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBUUllNQVBfREVDKGNwOTUwZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhjcDk1MGV4dCwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaAppbmRleCAwYmM3ZGI1Li4zMDM0YjVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaApAQCAtMSwyNCArMSw2NSBAQAogI2RlZmluZSBKSVNYMDIwMV9SX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4ODAgJiYgKGMpICE9IDB4NWMgJiYgKGMpICE9IDB4N2UpICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg4MCAmJiAoYykgIT0gMHg1YyAmJiAoYykgIT0gMHg3ZSkgeyAgICAgXAogICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4MDBhNSkgKGFzc2kpID0gMHg1YzsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHgyMDNlKSAoYXNzaSkgPSAweDdlOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4MDBhNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg1YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4MjAzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg3ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2RlZmluZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA+PSAweGZmNjEgJiYgKGMpIDw9IDB4ZmY5ZikgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gKGMpIC0gMHhmZWMwOworICAgIGlmICgoYykgPj0gMHhmZjYxICYmIChjKSA8PSAweGZmOWYpIHsgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKSAtIDB4ZmVjMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNkZWZpbmUgSklTWDAyMDFfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZWxzZSBKSVNYMDIwMV9LX0VOQ09ERShjLCBhc3NpKQogCi0jZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHg1YykgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSAoYXNzaSkgPSAweDAwYTU7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgKGFzc2kpID0gMHgyMDNlOyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSAoYXNzaSkgPSAweDdmOwotI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzaSkgPSAweGZlYzAgKyAoYyk7Ci0jZGVmaW5lIEpJU1gwMjAxX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgYXNzaSkKKyNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREVfQ0hBUihjLCBhc3NpKSAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4MDBhNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4MjAzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4N2Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDVjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMGE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDdmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHg3Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHhmZWMwICsgKGMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFX0NIQVIoYywgYXNzaSkgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGZlYzAgKyAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBKSVNYMDIwMV9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKaW5kZXggYWIwNjgyYS4uMjViYWI0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKQEAgLTMzLDcgKzMzLDcgQEAKIHR5cGVkZWYgc3RydWN0IGRiY3NfaW5kZXggZGVjb2RlX21hcDsKIAogc3RydWN0IHdpZGVkYmNzX2luZGV4IHsKLSAgICBjb25zdCB1Y3M0X3QgKm1hcDsKKyAgICBjb25zdCBQeV9VQ1M0ICptYXA7CiAgICAgdW5zaWduZWQgY2hhciBib3R0b20sIHRvcDsKIH07CiB0eXBlZGVmIHN0cnVjdCB3aWRlZGJjc19pbmRleCB3aWRlZGVjb2RlX21hcDsKQEAgLTU2LDcgKzU2LDcgQEAKIH07CiAKIHN0cnVjdCBwYWlyX2VuY29kZW1hcCB7Ci0gICAgdWNzNF90IHVuaXNlcTsKKyAgICBQeV9VQ1M0IHVuaXNlcTsKICAgICBEQkNIQVIgY29kZTsKIH07CiAKQEAgLTcyLDcgKzcyLDggQEAKICNkZWZpbmUgRU5DT0RFUihlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2VuY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X3NzaXplX3QgKmlucG9zLCBQeV9zc2l6ZV90IGlubGVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwgaW50IGZsYWdzKQogI2RlZmluZSBFTkNPREVSX1JFU0VUKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZW5jb2RlX3Jlc2V0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODYsMTIwICs4NywxMTggQEAKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2RlY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KQorICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiAjZGVmaW5lIERFQ09ERVJfUkVTRVQoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19kZWNvZGVfcmVzZXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnKQogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDQKLSNkZWZpbmUgVUNTNElOVkFMSUQoY29kZSkgICAgICAgXAotICAgIGlmICgoY29kZSkgPiAweEZGRkYpICAgICAgICBcCi0gICAgcmV0dXJuIDE7Ci0jZWxzZQotI2RlZmluZSBVQ1M0SU5WQUxJRChjb2RlKSAgICAgICBcCi0gICAgaWYgKDApIDsKLSNlbmRpZgotCiAjZGVmaW5lIE5FWFRfSU4oaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCppbmJ1ZikgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGlubGVmdCkgLT0gKGkpOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKmluYnVmKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoaW5sZWZ0KSAtPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE5FWFRfSU5DSEFSKGkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqaW5wb3MpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTkVYVF9PVVQobykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAob3V0bGVmdCkgLT0gKG8pOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAob3V0bGVmdCkgLT0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIE5FWFQoaSwgbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTkVYVF9JTihpKSBORVhUX09VVChvKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX0lOQ0hBUihpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX09VVChvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVRVUlSRV9JTkJVRihuKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoaW5sZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGlubGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFUVVJUkVfT1VUQlVGKG4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIElOMSAoKCppbmJ1ZilbMF0pCi0jZGVmaW5lIElOMiAoKCppbmJ1ZilbMV0pCi0jZGVmaW5lIElOMyAoKCppbmJ1ZilbMl0pCi0jZGVmaW5lIElONCAoKCppbmJ1ZilbM10pCisjZGVmaW5lIElOQllURTEgKCgqaW5idWYpWzBdKQorI2RlZmluZSBJTkJZVEUyICgoKmluYnVmKVsxXSkKKyNkZWZpbmUgSU5CWVRFMyAoKCppbmJ1ZilbMl0pCisjZGVmaW5lIElOQllURTQgKCgqaW5idWYpWzNdKQogCi0jZGVmaW5lIE9VVDEoYykgKCgqb3V0YnVmKVswXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDIoYykgKCgqb3V0YnVmKVsxXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDMoYykgKCgqb3V0YnVmKVsyXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDQoYykgKCgqb3V0YnVmKVszXSkgPSAoYyk7CisjZGVmaW5lIElOQ0hBUjEgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcykpCisjZGVmaW5lIElOQ0hBUjIgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcyArIDEpKQogCi0jZGVmaW5lIFdSSVRFMShjMSkgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigxKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7Ci0jZGVmaW5lIFdSSVRFMihjMSwgYzIpICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsKLSNkZWZpbmUgV1JJVEUzKGMxLCBjMiwgYzMpICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDMpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsyXSA9IChjMyk7Ci0jZGVmaW5lIFdSSVRFNChjMSwgYzIsIGMzLCBjNCkgIFwKLSAgICBSRVFVSVJFX09VVEJVRig0KSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVszXSA9IChjNCk7CisjZGVmaW5lIE9VVENIQVIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcih3cml0ZXIsIChjKSkgPCAwKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotIyBkZWZpbmUgV1JJVEVVQ1M0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gMHhkODAwICsgKCgoYykgLSAweDEwMDAwKSA+PiAxMCk7ICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IDB4ZGMwMCArICgoKGMpIC0gMHgxMDAwMCkgJiAweDNmZik7ICAgICAgICAgIFwKLSAgICBORVhUX09VVCgyKQotI2Vsc2UKLSMgZGVmaW5lIFdSSVRFVUNTNChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICoqb3V0YnVmID0gKFB5X1VOSUNPREUpKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBORVhUX09VVCgxKQotI2VuZGlmCisjZGVmaW5lIE9VVENIQVIyKGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MxID0gKGMxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MyID0gKGMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAyLCBQeV9NQVgoX2MxLCBjMikpIDwgMCkgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIF9jMSk7ICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MgKyAxLCBfYzIpOyBcCisgICAgICAgIHdyaXRlci0+cG9zICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBPVVRCWVRFMShjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzBdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTIoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVsxXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEUzKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMl0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFNChjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzNdKSA9IChjKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBXUklURUJZVEUxKGMxKSAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTIoYzEsIGMyKSAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFMyhjMSwgYzIsIGMzKSAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMyk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEU0KGMxLCBjMiwgYzMsIGM0KSAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbM10gPSAoYzQpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX1RSWU1BUF9FTkMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAogICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtICAgICAgICAgIFwKICAgICAgICAgKG0pLT5ib3R0b21dKSAhPSBOT0NIQVIpCi0jZGVmaW5lIFRSWU1BUF9FTkNfQ09ORChjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBUUllNQVBfRU5DKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICBcCiAgICAgX1RSWU1BUF9FTkMoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIGFzc2ksICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkKIAotI2RlZmluZSBfVFJZTUFQX0RFQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gICAgICAgICAgXAotICAgICAgICAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKLSNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKLQotI2RlZmluZSBfVFJZTUFQX0VOQ19NUExBTkUobSwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdmFsKSAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKGFzc3BsYW5lKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozXSkgIT0gMCAmJiBcCi0gICAgICAgICgoKGFzc2hpKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMV0pLCAxKSAmJiBcCi0gICAgICAgICgoKGFzc2xvKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMl0pLCAxKSkKLSNkZWZpbmUgVFJZTUFQX0VOQ19NUExBTkUoY2hhcnNldCwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdW5pKSBcCi0gICAgaWYgX1RSWU1BUF9FTkNfTVBMQU5FKCZjaGFyc2V0IyNfZW5jbWFwWyh1bmkpID4+IDhdLCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0RFQ19NUExBTkUoY2hhcnNldCwgYXNzaSwgcGxhbmUsIGMxLCBjMikgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbcGxhbmVdW2MxXSwgYXNzaSwgYzIpCi0KLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotI2RlZmluZSBERUNPREVfU1VSUk9HQVRFKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA+PiAxMCA9PSAweGQ4MDAgPj4gMTApIHsgLyogaGlnaCBzdXJyb2dhdGUgKi8gICAgICAgICBcCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoSU4yID4+IDEwID09IDB4ZGMwMCA+PiAxMCkgeyAvKiBsb3cgc3Vycm9nYXRlICovIFwKLSAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKCh1Y3M0X3QpKGMgLSAweGQ4MDApIDw8IDEwKSArIFwKLSAgICAgICAgICAgICgodWNzNF90KShJTjIpIC0gMHhkYzAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSNkZWZpbmUgR0VUX0lOU0laRShjKSAgICgoYykgPiAweGZmZmYgPyAyIDogMSkKLSNlbHNlCi0jZGVmaW5lIERFQ09ERV9TVVJST0dBVEUoYykgezt9Ci0jZGVmaW5lIEdFVF9JTlNJWkUoYykgICAxCi0jZW5kaWYKKyNkZWZpbmUgX1RSWU1BUF9ERUMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobSktPm1hcCAhPSBOVUxMICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKKyNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW2MxXSwgYXNzaSwgYzIpCiAKICNkZWZpbmUgQkVHSU5fTUFQUElOR1NfTElTVCBzdGF0aWMgY29uc3Qgc3RydWN0IGRiY3NfbWFwIF9tYXBwaW5nX2xpc3RbXSA9IHsKICNkZWZpbmUgTUFQUElOR19FTkNPTkxZKGVuYykgeyNlbmMsICh2b2lkKillbmMjI19lbmNtYXAsIE5VTEx9LApAQCAtMzI0LDcgKzMyMyw3IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBhaXJfZW5jb2RlbWFwICpoYXlzdGFjaywgaW50IGhheXN0YWNrc2l6ZSkKIHsKICAgICBpbnQgcG9zLCBtaW4sIG1heDsKLSAgICB1Y3M0X3QgdmFsdWUgPSBib2R5IDw8IDE2IHwgbW9kaWZpZXI7CisgICAgUHlfVUNTNCB2YWx1ZSA9IGJvZHkgPDwgMTYgfCBtb2RpZmllcjsKIAogICAgIG1pbiA9IDA7CiAgICAgbWF4ID0gaGF5c3RhY2tzaXplOwpAQCAtMzU5LDcgKzM1OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm8sICptb2Q7CiAKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoKGNoYXIgKiltb2RuYW1lKTsKKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCmluZGV4IDQyMjdmYjIuLmE1ZDVhNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaApAQCAtMiw3ICsyLDcgQEAKICAqIHN0YW5kYXJkcy4gKi8KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEIDEKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQgMQogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoYXNzaSwgYykgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExLDE3ICsxMSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1MjVEIHx8IChjKSA9PSAweDU0MUUgfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1NjUzIHx8IChjKSA9PSAweDU5RjggfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1QzVCIHx8IChjKSA9PSAweDVFNzcgfHwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgeyAgICAgICAgICAgICAgICAgXAogICAgICAgICAoYXNzaSkgPSAweDgwMDAgfCAweDdkM2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChhc3NpLCBjKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOworICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEIDIKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQgMgogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgIFwKQEAgLTM1LDkgKzM4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QikgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QykgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RCkgfHwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSB7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IDB4OUIxRDsKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLCBjMSwgYzIpICAgICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDlCMUQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTJfQ0hBUihhc3NpLCBjMSwgYzIpICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg5QjFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCmluZGV4IGE2ZGNlYmYuLjFmOGMyOTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaApAQCAtNDA0OSw3ICs0MDQ5LDcgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgewotICAgIFB5X1VOSUNPREUgICBmaXJzdCwgbGFzdDsKKyAgICBQeV9VQ1M0ICAgZmlyc3QsIGxhc3Q7CiAgICAgREJDSEFSICAgICAgIGJhc2U7CiB9IGdiMTgwMzBfdG9fdW5pYm1wX3Jhbmdlc1tdID0gewogezEyOCwxNjMsMH0sezE2NSwxNjYsMzZ9LHsxNjksMTc1LDM4fSx7MTc4LDE4Miw0NX0sezE4NCwyMTQsNTB9LHsyMTYsMjIzLDgxfSx7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKaW5kZXggZWRhOGU5ZS4uNzI5ZTRiYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaApAQCAtMyw3ICszLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggKmppc3gwMjEzX3BhaXJfZGVjbWFwOwogc3RhdGljIGNvbnN0IHN0cnVjdCBwYWlyX2VuY29kZW1hcCAqamlzeDAyMTNfcGFpcl9lbmNtYXA7CiAjZWxzZQotc3RhdGljIGNvbnN0IHVjczRfdCBfX2ppc3gwMjEzX3BhaXJfZGVjbWFwWzQ5XSA9IHsKK3N0YXRpYyBjb25zdCBQeV9VQ1M0IF9famlzeDAyMTNfcGFpcl9kZWNtYXBbNDldID0gewogODEwMjM0MDEwLDgxMDM2NTA4Miw4MTA0OTYxNTQsODEwNjI3MjI2LDgxMDc1ODI5OCw4MTY1MjU0NjYsODE2NjU2NTM4LAogODE2Nzg3NjEwLDgxNjkxODY4Miw4MTcwNDk3NTQsODE3NTc0MDQyLDgxODE2Mzg2Niw4MTg0MjYwMTAsODM4MjgzNDE4LAogMTUwNzQwNDgsVSxVLFUsMzkwNjAyMjQsMzkwNjAyMjUsNDI3MzAyNDAsNDI3MzAyNDEsMzkzODc5MDQsMzkzODc5MDUsMzk0NTM0NDAsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwppbmRleCBjMDMyY2RiLi4wODdhZTliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKQEAgLTEwLDE1ICsxMCwxNiBAQAogI2luY2x1ZGUgIm11bHRpYnl0ZWNvZGVjLmgiCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBQeV9VTklDT0RFICAgICppbmJ1ZiwgKmluYnVmX3RvcCwgKmluYnVmX2VuZDsKKyAgICBQeU9iamVjdCAgICAgICAgICAgICppbm9iajsKKyAgICBQeV9zc2l6ZV90ICAgICAgICAgIGlucG9zLCBpbmxlbjsKICAgICB1bnNpZ25lZCBjaGFyICAgICAgICpvdXRidWYsICpvdXRidWZfZW5kOwogICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iaiwgKm91dG9iajsKIH0gTXVsdGlieXRlRW5jb2RlQnVmZmVyOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsICppbmJ1Zl90b3AsICppbmJ1Zl9lbmQ7Ci0gICAgUHlfVU5JQ09ERSAgICAgICAgICAqb3V0YnVmLCAqb3V0YnVmX2VuZDsKLSAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmosICpvdXRvYmo7CisgICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqOworICAgIF9QeVVuaWNvZGVXcml0ZXIgICAgd3JpdGVyOwogfSBNdWx0aWJ5dGVEZWNvZGVCdWZmZXI7CiAKIFB5RG9jX1NUUlZBUihNdWx0aWJ5dGVDb2RlY19FbmNvZGVfX2RvY19fLApAQCAtNDUsMTEgKzQ2LDEzIEBACiBzdGF0aWMgY2hhciAqc3RyZWFta3dhcmdsaXN0W10gPSB7InN0cmVhbSIsICJlcnJvcnMiLCBOVUxMfTsKIAogc3RhdGljIFB5T2JqZWN0ICptdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKiwKLSAgICAgICAgICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqLCBjb25zdCBQeV9VTklDT0RFICoqLCBQeV9zc2l6ZV90LAorICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIFB5T2JqZWN0ICosIFB5X3NzaXplX3QgKiwKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBpbnQpOwogCiAjZGVmaW5lIE1CRU5DX1JFU0VUICAgICBNQkVOQ19NQVg8PDEgLyogcmVzZXQgYWZ0ZXIgYW4gZW5jb2Rpbmcgc2Vzc2lvbiAqLwogCitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX3R1cGxlKFB5T2JqZWN0ICpvYmplY3QsIFB5X3NzaXplX3QgbGVuKQogewpAQCAtMTk3LDI5ICsyMDAsNiBAQAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi1zdGF0aWMgaW50Ci1leHBhbmRfZGVjb2RlYnVmZmVyKE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmLCBQeV9zc2l6ZV90IGVzaXplKQotewotICAgIFB5X3NzaXplX3Qgb3JncG9zLCBvcmdzaXplOwotCi0gICAgb3JncG9zID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopKTsKLSAgICBvcmdzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLT5vdXRvYmosIG9yZ3NpemUgKyAoCi0gICAgICAgIGVzaXplIDwgKG9yZ3NpemUgPj4gMSkgPyAob3Jnc2l6ZSA+PiAxKSB8IDEgOiBlc2l6ZSkpID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBidWYtPm91dGJ1ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKSArIG9yZ3BvczsKLSAgICBidWYtPm91dGJ1Zl9lbmQgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikKLSAgICAgICAgICAgICAgICAgICAgICArIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNkZWZpbmUgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCBzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKHMpIDwgMSB8fCAoYnVmKS0+b3V0YnVmICsgKHMpID4gKGJ1ZiktPm91dGJ1Zl9lbmQpICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGV4cGFuZF9kZWNvZGVidWZmZXIoYnVmLCBzKSA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQogCiAvKioKICAqIE11bHRpYnl0ZUNvZGVjIG9iamVjdApAQCAtMjQ3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gMDsgLyogcmV0cnkgaXQgKi8KICAgICAgICAgY2FzZSBNQkVSUl9UT09GRVc6CiAgICAgICAgICAgICByZWFzb24gPSAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgc2VxdWVuY2UiOwotICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmKTsKKyAgICAgICAgICAgIGVzaXplID0gKFB5X3NzaXplX3QpYnVmLT5pbnBvczsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1CRVJSX0lOVEVSTkFMOgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTI2MSwxNCArMjQxLDI0IEBACiAgICAgfQogCiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgcmVwbGNoYXIgPSAnPycsICppbmJ1ZiA9ICZyZXBsY2hhcjsKKyAgICAgICAgUHlPYmplY3QgKnJlcGxjaGFyOwogICAgICAgICBQeV9zc2l6ZV90IHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5wb3M7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOwogCisgICAgICAgIHJlcGxjaGFyID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKCc/Jyk7CisgICAgICAgIGlmIChyZXBsY2hhciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXBsY2hhcik7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXBsY2hhcik7CisKKyAgICAgICAgaW5wb3MgPSAwOwogICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG91dGxlZnQ7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCi0gICAgICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKLSAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLCAmaW5idWYsIDEsCisgICAgICAgICAgICByID0gY29kZWMtPmVuY29kZShzdGF0ZSwgY29kZWMtPmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsICZpbnBvcywgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYtPm91dGJ1Ziwgb3V0bGVmdCwgMCk7CiAgICAgICAgICAgICBpZiAociA9PSBNQkVSUl9UT09TTUFMTCkgewogICAgICAgICAgICAgICAgIFJFUVVJUkVfRU5DT0RFQlVGRkVSKGJ1ZiwgLTEpOwpAQCAtMjc4LDI1ICsyNjgsMjcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIFB5X0RFQ1JFRihyZXBsY2hhcik7CisKICAgICAgICAgaWYgKHIgIT0gMCkgewogICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAxKTsKICAgICAgICAgICAgICpidWYtPm91dGJ1ZisrID0gJz8nOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfSUdOT1JFIHx8IGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIGJ1Zi0+aW5idWYgKz0gZXNpemU7CisgICAgICAgIGJ1Zi0+aW5wb3MgKz0gZXNpemU7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHN0YXJ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWYgLSBidWYtPmluYnVmX3RvcCk7CisgICAgc3RhcnQgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgIGVuZCA9IHN0YXJ0ICsgZXNpemU7CiAKICAgICAvKiB1c2UgY2FjaGVkIGV4Y2VwdGlvbiBvYmplY3QgaWYgYXZhaWxhYmxlICovCiAgICAgaWYgKGJ1Zi0+ZXhjb2JqID09IE5VTEwpIHsKLSAgICAgICAgYnVmLT5leGNvYmogPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUoY29kZWMtPmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgcmVhc29uKTsKKyAgICAgICAgYnVmLT5leGNvYmogPSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzT25ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYy0+ZW5jb2RpbmcsIGJ1Zi0+aW5vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOwogICAgICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KQEAgLTMyNSwxMCArMzE3LDEwIEBACiAgICAgfQogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0b2JqKSkgewotICAgICAgICBjb25zdCBQeV9VTklDT0RFICp1cmF3ID0gUHlVbmljb2RlX0FTX1VOSUNPREUodG9iaik7CisgICAgICAgIFB5X3NzaXplX3QgaW5wb3M7CiAKLSAgICAgICAgcmV0c3RyID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGNvZGVjLCBzdGF0ZSwgJnVyYXcsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodG9iaiksIEVSUk9SX1NUUklDVCwKKyAgICAgICAgcmV0c3RyID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGNvZGVjLCBzdGF0ZSwgdG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZpbnBvcywgRVJST1JfU1RSSUNULAogICAgICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0gpOwogICAgICAgICBpZiAocmV0c3RyID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKQEAgLTM0NywxNSArMzM5LDE1IEBACiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmX3RvcCk7Ci0gICAgaWYgKG5ld3BvcyA8IDAgfHwgYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3MgPiBidWYtPmluYnVmX2VuZCkgeworICAgICAgICBuZXdwb3MgKz0gKFB5X3NzaXplX3QpYnVmLT5pbmxlbjsKKyAgICBpZiAobmV3cG9zIDwgMCB8fCBuZXdwb3MgPiBidWYtPmlubGVuKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uICV6ZCBmcm9tIGVycm9yIGhhbmRsZXIgb3V0IG9mIGJvdW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICBuZXdwb3MpOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9Ci0gICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wICsgbmV3cG9zOworICAgIGJ1Zi0+aW5wb3MgPSBuZXdwb3M7CiAKICAgICBQeV9ERUNSRUYocmV0b2JqKTsKICAgICBQeV9ERUNSRUYocmV0c3RyKTsKQEAgLTM3NCw3ICszNjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgUHlfc3NpemVfdCBlKQogewogICAgIFB5T2JqZWN0ICpyZXRvYmogPSBOVUxMLCAqcmV0dW5pID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHJldHVuaXNpemUsIG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlfc3NpemVfdCBlc2l6ZSwgc3RhcnQsIGVuZDsKIApAQCAtMzg1LDcgKzM3Nyw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoZSkgewogICAgICAgICBjYXNlIE1CRVJSX1RPT1NNQUxMOgotICAgICAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAtMSk7CiAgICAgICAgICAgICByZXR1cm4gMDsgLyogcmV0cnkgaXQgKi8KICAgICAgICAgY2FzZSBNQkVSUl9UT09GRVc6CiAgICAgICAgICAgICByZWFzb24gPSAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgc2VxdWVuY2UiOwpAQCAtMzk1LDYgKzM4Niw4IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBjb2RlYyBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjYXNlIE1CRVJSX0VYQ0VQVElPTjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gcnVudGltZSBlcnJvciIpOwpAQCAtNDAzLDggKzM5Niw5IEBACiAgICAgfQogCiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgMSk7Ci0gICAgICAgICpidWYtPm91dGJ1ZisrID0gUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmYnVmLT53cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfSUdOT1JFIHx8IGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7CiAgICAgICAgIGJ1Zi0+aW5idWYgKz0gZXNpemU7CkBAIC00NDcsMTUgKzQ0MSw4IEBACiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGlmIChQeVVuaWNvZGVfQXNVbmljb2RlKHJldHVuaSkgPT0gTlVMTCkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmYnVmLT53cml0ZXIsIHJldHVuaSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICByZXR1bmlzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHJldHVuaSk7Ci0gICAgaWYgKHJldHVuaXNpemUgPiAwKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgcmV0dW5pc2l6ZSk7Ci0gICAgICAgIG1lbWNweSgoY2hhciAqKWJ1Zi0+b3V0YnVmLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShyZXR1bmkpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dW5pc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmICs9IHJldHVuaXNpemU7Ci0gICAgfQogCiAgICAgbmV3cG9zID0gUHlMb25nX0FzU3NpemVfdChQeVR1cGxlX0dFVF9JVEVNKHJldG9iaiwgMSkpOwogICAgIGlmIChuZXdwb3MgPCAwICYmICFQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDc5LDE5ICs0NjYsMjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKmNvZGVjLAogICAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqZGF0YSwgUHlfc3NpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90ICppbnBvc190LAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplcnJvcnMsIGludCBmbGFncykKIHsKICAgICBNdWx0aWJ5dGVFbmNvZGVCdWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgZmluYWxzaXplLCByID0gMDsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGV4dCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGV4dCk7CiAKICAgICBpZiAoZGF0YWxlbiA9PSAwICYmICEoZmxhZ3MgJiBNQkVOQ19SRVNFVCkpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogCiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLm91dG9iaiA9IE5VTEw7Ci0gICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICpkYXRhOwotICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKKyAgICBidWYuaW5vYmogPSB0ZXh0OyAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLworICAgIGJ1Zi5pbnBvcyA9IDA7CisgICAgYnVmLmlubGVuID0gZGF0YWxlbjsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoYnVmLmlub2JqKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoYnVmLmlub2JqKTsKIAogICAgIGlmIChkYXRhbGVuID4gKFBZX1NTSVpFX1RfTUFYIC0gMTYpIC8gMikgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNTA0LDE0ICs1MDEsMTQgQEAKICAgICBidWYub3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhidWYub3V0b2JqKTsKICAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeUJ5dGVzX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCi0gICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7Ci0KKyAgICB3aGlsZSAoYnVmLmlucG9zIDwgYnVmLmlubGVuKSB7CiAgICAgICAgIC8qIHdlIGRvbid0IHJldXNlIGlubGVmdCBhbmQgb3V0bGVmdCBoZXJlLgogICAgICAgICAgKiBlcnJvciBjYWxsYmFja3MgY2FuIHJlbG9jYXRlIHRoZSBjdXJzb3IgYW55d2hlcmUgb24gYnVmZmVyKi8KLSAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5pbmJ1Zl9lbmQgLSBidWYuaW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7Ci0gICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLCAmYnVmLmluYnVmLCBpbmxlZnQsCisgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOworCisgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmlucG9zLCBidWYuaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYub3V0YnVmLCBvdXRsZWZ0LCBmbGFncyk7CiAgICAgICAgIGlmICgociA9PSAwKSB8fCAociA9PSBNQkVSUl9UT09GRVcgJiYgIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTU0Miw3ICs1MzksOCBAQAogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKLSAgICAqZGF0YSA9IGJ1Zi5pbmJ1ZjsKKyAgICBpZiAoaW5wb3NfdCkKKyAgICAgICAgKmlucG9zX3QgPSBidWYuaW5wb3M7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKICAgICByZXR1cm4gYnVmLm91dG9iajsKIApAQCAtNTU3LDcgKzU1NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgc3RhdGU7Ci0gICAgUHlfVU5JQ09ERSAqZGF0YTsKICAgICBQeU9iamVjdCAqZXJyb3JjYiwgKnIsICphcmcsICp1Y3Z0OwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuOwpAQCAtNTgwLDExICs1NzcsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShhcmcsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhcmcpIDwgMCkgewogICAgICAgICBQeV9YREVDUkVGKHVjdnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgZGF0YWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFyZyk7CiAKICAgICBlcnJvcmNiID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoZXJyb3JjYiA9PSBOVUxMKSB7CkBAIC01OTYsNyArNTkzLDcgQEAKICAgICAgICAgc2VsZi0+Y29kZWMtPmVuY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKHNlbGYtPmNvZGVjLCAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBQeV9VTklDT0RFICoqKSZkYXRhLCBkYXRhbGVuLCBlcnJvcmNiLAorICAgICAgICAgICAgICAgICAgICBhcmcsIE5VTEwsIGVycm9yY2IsCiAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQpOwogICAgIGlmIChyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtNjE3LDEwICs2MTQsMTAgQEAKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwotICAgIFB5T2JqZWN0ICplcnJvcmNiOworICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqcmVzOwogICAgIFB5X2J1ZmZlciBwZGF0YTsKICAgICBjb25zdCBjaGFyICpkYXRhLCAqZXJyb3JzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIGZpbmFsc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5Knx6OmRlY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNrd2FyZ2xpc3QsICZwZGF0YSwgJmVycm9ycykpCkBAIC02NDAsMjkgKzYzNywyMyBAQAogICAgICAgICByZXR1cm4gbWFrZV90dXBsZShQeVVuaWNvZGVfTmV3KDAsIDApLCAwKTsKICAgICB9CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJmJ1Zi53cml0ZXIpOworICAgIGJ1Zi53cml0ZXIubWluX2xlbmd0aCA9IGRhdGFsZW47CiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYuaW5idWZfZW5kID0gYnVmLmluYnVmX3RvcCArIGRhdGFsZW47Ci0gICAgYnVmLm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBkYXRhbGVuKTsKLSAgICBpZiAoYnVmLm91dG9iaiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaik7Ci0gICAgaWYgKGJ1Zi5vdXRidWYgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgYnVmLm91dGJ1Zl9lbmQgPSBidWYub3V0YnVmICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCiAgICAgaWYgKHNlbGYtPmNvZGVjLT5kZWNpbml0ICE9IE5VTEwgJiYKICAgICAgICAgc2VsZi0+Y29kZWMtPmRlY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIHdoaWxlIChidWYuaW5idWYgPCBidWYuaW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0LCByOworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgcjsKIAogICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKIAogICAgICAgICByID0gc2VsZi0+Y29kZWMtPmRlY29kZSgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmluYnVmLCBpbmxlZnQsICZidWYub3V0YnVmLCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKHNlbGYtPmNvZGVjLCAmc3RhdGUsCkBAIC02NzAsMjMgKzY2MSwyMCBAQAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKSk7Ci0KLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKLSAgICByZXR1cm4gbWFrZV90dXBsZShidWYub3V0b2JqLCBkYXRhbGVuKTsKKyAgICByZXR1cm4gbWFrZV90dXBsZShyZXMsIGRhdGFsZW4pOwogCiBlcnJvcmV4aXQ6CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKIAogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNzUyLDkgKzc0MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pc3RyLCBpbnQgZmluYWwpCiB7CiAgICAgUHlPYmplY3QgKnVjdnQsICpyID0gTlVMTDsKLSAgICBQeV9VTklDT0RFICppbmJ1ZiwgKmluYnVmX2VuZCwgKmluYnVmX3RtcCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBkYXRhbGVuLCBvcmlncGVuZGluZzsKLSAgICB3Y2hhcl90ICpkYXRhOworICAgIFB5T2JqZWN0ICppbmJ1ZiA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpbnBvcywgZGF0YWxlbjsKKyAgICBQeU9iamVjdCAqb3JpZ3BlbmRpbmcgPSBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh1bmlzdHIpKQogICAgICAgICB1Y3Z0ID0gTlVMTDsKQEAgLTc3MCw2OSArNzU4LDY2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkYXRhID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodW5pc3RyLCAmZGF0YWxlbik7Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmdzaXplOworICAgIGlmIChjdHgtPnBlbmRpbmcpIHsKKyAgICAgICAgUHlPYmplY3QgKmluYnVmX3RtcDsKIAotICAgIGlmIChvcmlncGVuZGluZyA+IDApIHsKLSAgICAgICAgaWYgKGRhdGFsZW4gPiBQWV9TU0laRV9UX01BWCAtIGN0eC0+cGVuZGluZ3NpemUpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAvKiBpbmJ1Zl90bXAgPT0gTlVMTCAqLwotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgaW5idWZfdG1wID0gUHlNZW1fTmV3KFB5X1VOSUNPREUsIGRhdGFsZW4gKyBjdHgtPnBlbmRpbmdzaXplKTsKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIG9yaWdwZW5kaW5nID0gY3R4LT5wZW5kaW5nOworCisgICAgICAgIFB5X0lOQ1JFRihjdHgtPnBlbmRpbmcpOworICAgICAgICBpbmJ1Zl90bXAgPSBjdHgtPnBlbmRpbmc7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJmluYnVmX3RtcCwgdW5pc3RyKTsKICAgICAgICAgaWYgKGluYnVmX3RtcCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAsIGN0eC0+cGVuZGluZywKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGN0eC0+cGVuZGluZ3NpemUpOwotICAgICAgICBtZW1jcHkoaW5idWZfdG1wICsgY3R4LT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0ciksCi0gICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBkYXRhbGVuKTsKLSAgICAgICAgZGF0YWxlbiArPSBjdHgtPnBlbmRpbmdzaXplOwotICAgICAgICBjdHgtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKICAgICAgICAgaW5idWYgPSBpbmJ1Zl90bXA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgaW5idWYgPSAoUHlfVU5JQ09ERSAqKVB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0cik7CisgICAgZWxzZSB7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKIAotICAgIGluYnVmX2VuZCA9IGluYnVmICsgZGF0YWxlbjsKKyAgICAgICAgUHlfSU5DUkVGKHVuaXN0cik7CisgICAgICAgIGluYnVmID0gdW5pc3RyOworICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGluYnVmKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIGlucG9zID0gMDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5idWYpOwogCiAgICAgciA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmluYnVmLCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlucG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcnMsIGZpbmFsID8gTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCA6IDApOwogICAgIGlmIChyID09IE5VTEwpIHsKICAgICAgICAgLyogcmVjb3ZlciB0aGUgb3JpZ2luYWwgcGVuZGluZyBidWZmZXIgKi8KLSAgICAgICAgaWYgKG9yaWdwZW5kaW5nID4gMCkKLSAgICAgICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmX3RtcCwKLSAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBvcmlncGVuZGluZyk7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSBvcmlncGVuZGluZzsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gb3JpZ3BlbmRpbmc7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQorICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOwogCi0gICAgaWYgKGluYnVmIDwgaW5idWZfZW5kKSB7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAoUHlfc3NpemVfdCkoaW5idWZfZW5kIC0gaW5idWYpOwotICAgICAgICBpZiAoY3R4LT5wZW5kaW5nc2l6ZSA+IE1BWEVOQ1BFTkRJTkcpIHsKKyAgICBpZiAoaW5wb3MgPCBkYXRhbGVuKSB7CisgICAgICAgIGlmIChkYXRhbGVuIC0gaW5wb3MgPiBNQVhFTkNQRU5ESU5HKSB7CiAgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KLSAgICAgICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1VuaWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVuZGluZyBidWZmZXIgb3ZlcmZsb3ciKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmLAotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7CisgICAgICAgIGN0eC0+cGVuZGluZyA9IFB5VW5pY29kZV9TdWJzdHJpbmcoaW5idWYsIGlucG9zLCBkYXRhbGVuKTsKKyAgICAgICAgaWYgKGN0eC0+cGVuZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KKyAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGluYnVmX3RtcCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9EZWwoaW5idWZfdG1wKTsKKyAgICBQeV9ERUNSRUYoaW5idWYpOwogICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgcmV0dXJuIHI7CiAKIGVycm9yZXhpdDoKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOwogICAgIFB5X1hERUNSRUYocik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKKyAgICBQeV9YREVDUkVGKG9yaWdwZW5kaW5nKTsKKyAgICBQeV9YREVDUkVGKGluYnVmKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODU5LDE3ICs4NDQsNyBAQAogewogICAgIGJ1Zi0+aW5idWYgPSBidWYtPmluYnVmX3RvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYtPmluYnVmX2VuZCA9IGJ1Zi0+aW5idWZfdG9wICsgc2l6ZTsKLSAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkgeyAvKiBvbmx5IGlmIG91dG9iaiBpcyBub3QgYWxsb2NhdGVkIHlldCAqLwotICAgICAgICBidWYtPm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBzaXplKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0b2JqID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FzVW5pY29kZShidWYtPm91dG9iaik7Ci0gICAgICAgIGlmIChidWYtPm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBidWYtPm91dGJ1Zl9lbmQgPSBidWYtPm91dGJ1ZiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0gICAgfQotCisgICAgYnVmLT53cml0ZXIubWluX2xlbmd0aCArPSBzaXplOwogICAgIHJldHVybiAwOwogfQogCkBAIC04NzgsMTQgKzg1MywxMyBAQAogICAgICAgICAgICAgICAgICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgKmJ1ZikKIHsKICAgICB3aGlsZSAoYnVmLT5pbmJ1ZiA8IGJ1Zi0+aW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0OworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdDsKICAgICAgICAgUHlfc3NpemVfdCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKIAogICAgICAgICByID0gY3R4LT5jb2RlYy0+ZGVjb2RlKCZjdHgtPnN0YXRlLCBjdHgtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgJmJ1Zi0+aW5idWYsIGlubGVmdCwgJmJ1Zi0+d3JpdGVyKTsKICAgICAgICAgaWYgKHIgPT0gMCB8fCByID09IE1CRVJSX1RPT0ZFVykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBlbHNlIGlmIChtdWx0aWJ5dGVjb2RlY19kZWNlcnJvcihjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKQEAgLTkyNyw3ICs5MDEsNyBAQAogICAgICAgICBpZiAociAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtOTYzLDcgKzkzNyw3IEBACiAgICAgfQogCiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgc2VsZi0+cGVuZGluZyA9IE5VTEw7CiAgICAgc2VsZi0+ZXJyb3JzID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMTA1OCw4ICsxMDMyLDkgQEAKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwogICAgIGNoYXIgKmRhdGEsICp3ZGF0YSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIFB5X3NzaXplX3Qgd3NpemUsIGZpbmFsc2l6ZSA9IDAsIHNpemUsIG9yaWdwZW5kaW5nOworICAgIFB5X3NzaXplX3Qgd3NpemUsIHNpemUsIG9yaWdwZW5kaW5nOwogICAgIGludCBmaW5hbCA9IDA7CisgICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGk6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxrd2FyZ2xpc3QsICZwZGF0YSwgJmZpbmFsKSkKQEAgLTEwNjcsNyArMTA0Miw4IEBACiAgICAgZGF0YSA9IHBkYXRhLmJ1ZjsKICAgICBzaXplID0gcGRhdGEubGVuOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgb3JpZ3BlbmRpbmcgPSBzZWxmLT5wZW5kaW5nc2l6ZTsKIAogICAgIGlmIChzZWxmLT5wZW5kaW5nc2l6ZSA9PSAwKSB7CkBAIC0xMDgxLDggKzEwNTcsMTAgQEAKICAgICAgICAgfQogICAgICAgICB3c2l6ZSA9IHNpemUgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKICAgICAgICAgd2RhdGEgPSBQeU1lbV9NYWxsb2Mod3NpemUpOwotICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkKKyAgICAgICAgaWYgKHdkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkod2RhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKICAgICAgICAgbWVtY3B5KHdkYXRhICsgc2VsZi0+cGVuZGluZ3NpemUsIGRhdGEsIHNpemUpOwogICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CkBAIC0xMTA5LDIzICsxMDg3LDIyIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgaWYgKHdkYXRhICE9IE5VTEwgJiYgd2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI2NSwxMyArMTI0MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLCBQeV9zc2l6ZV90IHNpemVoaW50KQogewogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmNyZXM7Ci0gICAgUHlfc3NpemVfdCByc2l6ZSwgZmluYWxzaXplID0gMDsKKyAgICBQeU9iamVjdCAqY3JlcywgKnJlczsKKyAgICBQeV9zc2l6ZV90IHJzaXplOwogCiAgICAgaWYgKHNpemVoaW50ID09IDApCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfTmV3KDAsIDApOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgY3JlcyA9IE5VTEw7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0xMzAzLDE5ICsxMjgxLDE5IEBACiAgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShjcmVzKSA+IFBZX1NTSVpFX1RfTUFYIC0gc2VsZi0+cGVuZGluZ3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICAgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwotICAgICAgICAgICAgICAgICAgICBjcmVzID0gY3RyOwotICAgICAgICAgICAgICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKKyAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOworICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICAgICAgY3RyZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGN0cik7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOworICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY3JlcyksCisgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOworICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOworICAgICAgICAgICAgY3JlcyA9IGN0cjsKKyAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKTsKQEAgLTEzNDAsMjkgKzEzMTgsMjcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwogICAgICAgICBjcmVzID0gTlVMTDsKIAotICAgICAgICBpZiAoc2l6ZWhpbnQgPCAwIHx8IGZpbmFsc2l6ZSAhPSAwIHx8IHJzaXplID09IDApCisgICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgYnVmLndyaXRlci5wb3MgIT0gMCB8fCByc2l6ZSA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc2l6ZWhpbnQgPSAxOyAvKiByZWFkIDEgbW9yZSBieXRlIGFuZCByZXRyeSAqLwogICAgIH0KIAotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlfWERFQ1JFRihjcmVzKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNTk1LDcgKzE1NzEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIpCiB7CiAgICAgUHlPYmplY3QgKnN0ciwgKndyOwotICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgIHN0ciA9IGVuY29kZXJfZW5jb2RlX3N0YXRlZnVsKFNUQVRFRlVMX0VDVFgoc2VsZiksIHVuaXN0ciwgMCk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQpAQCAtMTY0OSwyNSArMTYyNCwyMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ic3RyZWFtd3JpdGVyX3Jlc2V0KE11bHRpYnl0ZVN0cmVhbVdyaXRlck9iamVjdCAqc2VsZikKIHsKLSAgICBjb25zdCBQeV9VTklDT0RFICpwZW5kaW5nOwogICAgIFB5T2JqZWN0ICpwd3J0OwogCi0gICAgcGVuZGluZyA9IHNlbGYtPnBlbmRpbmc7CiAgICAgcHdydCA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShzZWxmLT5jb2RlYywgJnNlbGYtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAmcGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUsIHNlbGYtPmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+cGVuZGluZywgTlVMTCwgc2VsZi0+ZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUKTsKICAgICAvKiBzb21lIHBlbmRpbmcgYnVmZmVyIGNhbiBiZSB0cnVuY2F0ZWQgd2hlbiBVbmljb2RlRW5jb2RlRXJyb3IgaXMKICAgICAgKiByYWlzZWQgb24gJ3N0cmljdCcgbW9kZS4gYnV0LCAncmVzZXQnIG1ldGhvZCBpcyBkZXNpZ25lZCB0bwogICAgICAqIHJlc2V0IHRoZSBwZW5kaW5nIGJ1ZmZlciBvciBzdGF0ZXMgc28gZmFpbGVkIHN0cmluZyBzZXF1ZW5jZQogICAgICAqIG91Z2h0IHRvIGJlIG1pc3NlZCAqLwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBpZiAocHdydCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHB3cnQpKTsKICAgICBpZiAoUHlCeXRlc19TaXplKHB3cnQpID4gMCkgewogICAgICAgICBQeU9iamVjdCAqd3I7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgICAgICB3ciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+c3RyZWFtLCAmUHlJZF93cml0ZSwgIk8iLCBwd3J0KTsKICAgICAgICAgaWYgKHdyID09IE5VTEwpIHsKQEAgLTE3MDYsNyArMTY3OCw3IEBACiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKICAgICBzZWxmLT5zdHJlYW0gPSBzdHJlYW07CiAgICAgUHlfSU5DUkVGKHN0cmVhbSk7Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIHNlbGYtPnBlbmRpbmcgPSBOVUxMOwogICAgIHNlbGYtPmVycm9ycyA9IGludGVybmFsX2Vycm9yX2NhbGxiYWNrKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCmluZGV4IDFiNmVmNTUuLjViOGMyMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaApAQCAtMTAsMTIgKzEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiB1aW50MzJfdAotdHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzNF90OwotI2VuZGlmCi0KICNpZmRlZiB1aW50MTZfdAogdHlwZWRlZiB1aW50MTZfdCB1Y3MyX3QsIERCQ0hBUjsKICNlbHNlCkBAIC0yNywxMyArMjEsMTQgQEAKICAgICBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIGNbOF07CiAgICAgdWNzMl90IHUyWzRdOwotICAgIHVjczRfdCB1NFsyXTsKKyAgICBQeV9VQ1M0IHU0WzJdOwogfSBNdWx0aWJ5dGVDb2RlY19TdGF0ZTsKIAogdHlwZWRlZiBpbnQgKCptYmNvZGVjX2luaXQpKGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmVuY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiB0eXBlZGVmIGludCAoKm1iZW5jb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC00NCw3ICszOSw3IEBACiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiB0eXBlZGVmIGludCAoKm1iZGVjb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVyZXNldF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC04MSw4ICs3Niw3IEBACiAjZGVmaW5lIE1BWEVOQ1BFTkRJTkcgICAyCiAjZGVmaW5lIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRCAgICAgICAgICBcCiAgICAgX011bHRpYnl0ZVN0YXRlZnVsQ29kZWNfSEVBRCAgICAgICAgICAgICAgICBcCi0gICAgUHlfVU5JQ09ERSBwZW5kaW5nW01BWEVOQ1BFTkRJTkddOyAgICAgICAgICBcCi0gICAgUHlfc3NpemVfdCBwZW5kaW5nc2l6ZTsKKyAgICBQeU9iamVjdCAqcGVuZGluZzsKIHR5cGVkZWYgc3RydWN0IHsKICAgICBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQKIH0gTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyQ29udGV4dDsKQEAgLTExOCwxNiArMTEyLDE3IEBACiAjZGVmaW5lIE1CRVJSX1RPT1NNQUxMICAgICAgICAgICgtMSkgLyogaW5zdWZmaWNpZW50IG91dHB1dCBidWZmZXIgc3BhY2UgKi8KICNkZWZpbmUgTUJFUlJfVE9PRkVXICAgICAgICAgICAgKC0yKSAvKiBpbmNvbXBsZXRlIGlucHV0IGJ1ZmZlciAqLwogI2RlZmluZSBNQkVSUl9JTlRFUk5BTCAgICAgICAgICAoLTMpIC8qIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgKi8KKyNkZWZpbmUgTUJFUlJfRVhDRVBUSU9OICAgICAgICAgKC00KSAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkICovCiAKICNkZWZpbmUgRVJST1JfU1RSSUNUICAgICAgICAgICAgKFB5T2JqZWN0ICopKDEpCiAjZGVmaW5lIEVSUk9SX0lHTk9SRSAgICAgICAgICAgIChQeU9iamVjdCAqKSgyKQogI2RlZmluZSBFUlJPUl9SRVBMQUNFICAgICAgICAgICAoUHlPYmplY3QgKikoMykKICNkZWZpbmUgRVJST1JfSVNDVVNUT00ocCkgICAgICAgKChwKSA8IEVSUk9SX1NUUklDVCB8fCBFUlJPUl9SRVBMQUNFIDwgKHApKQotI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpIHsgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7CisjZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOwogCiAjZGVmaW5lIE1CRU5DX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMSAvKiBlbmNvZGUgYWxsIGNoYXJhY3RlcnMgZW5jb2RhYmxlICovCiAjZGVmaW5lIE1CRU5DX01BWCAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNICmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwppbmRleCBjODZhMjdmLi4yN2IxZDU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCisrKyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKQEAgLTIyLDcgKzIyLDE0IEBACiAjICBkZWZpbmUgRkFVTFRIQU5ETEVSX1VTRVIKICNlbmRpZgogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisvKiBjYXN0IHNpemVfdCB0byBpbnQgYmVjYXVzZSB3cml0ZSgpIHRha2VzIGFuIGludCBvbiBXaW5kb3dzCisgICAoYW55d2F5LCB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiAzMCBjaGFyYWN0ZXJzKSAqLworI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCisKK19QeV9JREVOVElGSUVSKGVuYWJsZSk7CitfUHlfSURFTlRJRklFUihmaWxlbm8pOworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogI2lmZGVmIEhBVkVfU0lHQUNUSU9OCiB0eXBlZGVmIHN0cnVjdCBzaWdhY3Rpb24gX1B5X3NpZ2hhbmRsZXJfdDsKQEAgLTc5LDkgKzg2LDYgQEAKIHN0YXRpYyB1c2VyX3NpZ25hbF90ICp1c2VyX3NpZ25hbHM7CiAKIC8qIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGNvbWUgZnJvbSBQeXRob246IE1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2VuZGlmCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC0xMzEsMTMgKzEzNSwxMSBAQAogZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oUHlPYmplY3QgKmZpbGUsIGludCAqcF9mZCkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIF9QeV9JREVOVElGSUVSKGZpbGVubyk7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogICAgIGxvbmcgZmRfbG9uZzsKICAgICBpbnQgZmQ7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMIHx8IGZpbGUgPT0gUHlfTm9uZSkgewotICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMuc3RkZXJyIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ0OCw3ICs0NTAsNyBAQAogICAgICAgICAvKiBnZXQgdGhlIHRocmVhZCBob2xkaW5nIHRoZSBHSUwsIE5VTEwgaWYgbm8gdGhyZWFkIGhvbGQgdGhlIEdJTCAqLwogICAgICAgICBjdXJyZW50ID0gX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwogCi0gICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgdGhyZWFkLmhlYWRlcl9sZW4pOworICAgICAgICB3cml0ZSh0aHJlYWQuZmQsIHRocmVhZC5oZWFkZXIsIChpbnQpdGhyZWFkLmhlYWRlcl9sZW4pOwogCiAgICAgICAgIGVycm1zZyA9IF9QeV9EdW1wVHJhY2ViYWNrVGhyZWFkcyh0aHJlYWQuZmQsIHRocmVhZC5pbnRlcnAsIGN1cnJlbnQpOwogICAgICAgICBvayA9IChlcnJtc2cgPT0gTlVMTCk7CkBAIC00NzYsNyArNDc4LDcgQEAKIAogICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKICAgICBpZiAodGhyZWFkLmhlYWRlcikgewotICAgICAgICBmcmVlKHRocmVhZC5oZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKHRocmVhZC5oZWFkZXIpOwogICAgICAgICB0aHJlYWQuaGVhZGVyID0gTlVMTDsKICAgICB9CiB9CkBAIC01MDUsNyArNTA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAiVGltZW91dCAoJWx1OiUwMmx1OiUwMmx1KSFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMpOwogCi0gICAgcmV0dXJuIHN0cmR1cChidWZmZXIpOworICAgIHJldHVybiBfUHlNZW1fU3RyZHVwKGJ1ZmZlcik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTU3MSw3ICs1NzMsNyBAQAogICAgIGlmIChQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKGZhdWx0aGFuZGxlcl90aHJlYWQsIE5VTEwpID09IC0xKSB7CiAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0aHJlYWQucnVubmluZyk7CiAgICAgICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKLSAgICAgICAgZnJlZShoZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKGhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBzdGFydCB3YXRjaGRvZyB0aHJlYWQiKTsKQEAgLTczMCw5ICs3MzIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpIHsKLSAgICAgICAgdXNlcl9zaWduYWxzID0gY2FsbG9jKE5TSUcsIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CisgICAgICAgIHVzZXJfc2lnbmFscyA9IFB5TWVtX01hbGxvYyhOU0lHICogc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKICAgICAgICAgaWYgKHVzZXJfc2lnbmFscyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIG1lbXNldCh1c2VyX3NpZ25hbHMsIDAsIE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgIH0KICAgICB1c2VyID0gJnVzZXJfc2lnbmFsc1tzaWdudW1dOwogCkBAIC0xMDQ3LDkgKzEwNTAsMTEgQEAKIGZhdWx0aGFuZGxlcl9lbnZfb3B0aW9ucyh2b2lkKQogewogICAgIFB5T2JqZWN0ICp4b3B0aW9ucywgKmtleSwgKm1vZHVsZSwgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihlbmFibGUpOworICAgIGNoYXIgKnA7CiAKLSAgICBpZiAoIVB5X0dFVEVOVigiUFlUSE9ORkFVTFRIQU5ETEVSIikpIHsKKyAgICBpZiAoISgocCA9IFB5X0dFVEVOVigiUFlUSE9ORkFVTFRIQU5ETEVSIikpICYmICpwICE9ICdcMCcpKSB7CisgICAgICAgIC8qIFBZVEhPTkZBVUxUSEFORExFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBtaXNzaW5nCisgICAgICAgICAgIG9yIGFuIGVtcHR5IHN0cmluZyAqLwogICAgICAgICBpbnQgaGFzX2tleTsKIAogICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CkBAIC0xMTM3LDcgKzExNDIsNyBAQAogICAgIGlmICh1c2VyX3NpZ25hbHMgIT0gTlVMTCkgewogICAgICAgICBmb3IgKHNpZ251bT0wOyBzaWdudW0gPCBOU0lHOyBzaWdudW0rKykKICAgICAgICAgICAgIGZhdWx0aGFuZGxlcl91bnJlZ2lzdGVyKCZ1c2VyX3NpZ25hbHNbc2lnbnVtXSwgc2lnbnVtKTsKLSAgICAgICAgZnJlZSh1c2VyX3NpZ25hbHMpOworICAgICAgICBQeU1lbV9GcmVlKHVzZXJfc2lnbmFscyk7CiAgICAgICAgIHVzZXJfc2lnbmFscyA9IE5VTEw7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKaW5kZXggNjc2OTA5OC4uZTU0YzhlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mY250bG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwpAQCAtMzI3LDExICszMjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVub2JqLCAmc3RhcnRvYmosICZ3aGVuY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJsb2NrZiBub3Qgc3VwcG9ydGVkIG9uIE9TLzIgKEVNWCkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSNlbHNlCiAjaWZuZGVmIExPQ0tfU0gKICNkZWZpbmUgTE9DS19TSCAgICAgICAgIDEgICAgICAgLyogc2hhcmVkIGxvY2sgKi8KICNkZWZpbmUgTE9DS19FWCAgICAgICAgIDIgICAgICAgLyogZXhjbHVzaXZlIGxvY2sgKi8KQEAgLTM4NSw3ICszODAsNiBAQAogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7Ci0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiB9CiAKIFB5RG9jX1NUUlZBUihsb2NrZl9kb2MsCkBAIC00MzIsMTg4ICs0MjYsMTc5IEBACiAKIC8qIE1vZHVsZSBpbml0aWFsaXNhdGlvbiAqLwogCi1zdGF0aWMgaW50Ci1pbnMoUHlPYmplY3QqIGQsIGNoYXIqIHN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBQeU9iamVjdCogdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgaWYgKCF2IHx8IFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIHN5bWJvbCwgdikgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9ERUNSRUYodik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSU5TKHgpIGlmIChpbnMoZCwgI3gsIChsb25nKXgpKSByZXR1cm4gLTEKIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCogZCkKK2FsbF9pbnMoUHlPYmplY3QqIG0pCiB7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19TSCIsIChsb25nKUxPQ0tfU0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19FWCIsIChsb25nKUxPQ0tfRVgpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19OQiIsIChsb25nKUxPQ0tfTkIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19VTiIsIChsb25nKUxPQ0tfVU4pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfRVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTkIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfVU4pKSByZXR1cm4gLTE7CiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQgKi8KICNpZmRlZiBMT0NLX01BTkQKLSAgICBpZiAoaW5zKGQsICJMT0NLX01BTkQiLCAobG9uZylMT0NLX01BTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTUFORCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfUkVBRAotICAgIGlmIChpbnMoZCwgIkxPQ0tfUkVBRCIsIChsb25nKUxPQ0tfUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19SRUFEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19XUklURQotICAgIGlmIChpbnMoZCwgIkxPQ0tfV1JJVEUiLCAobG9uZylMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SVwotICAgIGlmIChpbnMoZCwgIkxPQ0tfUlciLCAobG9uZylMT0NLX1JXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBGX0RVUEZECi0gICAgaWYgKGlucyhkLCAiRl9EVVBGRCIsIChsb25nKUZfRFVQRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRFVQRkQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBGX0RVUEZEX0NMT0VYRUMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGRAotICAgIGlmIChpbnMoZCwgIkZfR0VURkQiLCAobG9uZylGX0dFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGRAotICAgIGlmIChpbnMoZCwgIkZfU0VURkQiLCAobG9uZylGX1NFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGTAotICAgIGlmIChpbnMoZCwgIkZfR0VURkwiLCAobG9uZylGX0dFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGTAotICAgIGlmIChpbnMoZCwgIkZfU0VURkwiLCAobG9uZylGX1NFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRMSwotICAgIGlmIChpbnMoZCwgIkZfR0VUTEsiLCAobG9uZylGX0dFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEsiLCAobG9uZylGX1NFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1cKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLVyIsIChsb25nKUZfU0VUTEtXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9HRVRPV04iLCAobG9uZylGX0dFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVE9XTgotICAgIGlmIChpbnMoZCwgIkZfU0VUT1dOIiwgKGxvbmcpRl9TRVRPV04pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUT1dOKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX0dFVFNJRyIsIChsb25nKUZfR0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUU0lHCi0gICAgaWYgKGlucyhkLCAiRl9TRVRTSUciLCAobG9uZylGX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRTSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1JETENLCi0gICAgaWYgKGlucyhkLCAiRl9SRExDSyIsIChsb25nKUZfUkRMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfUkRMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1dSTENLCi0gICAgaWYgKGlucyhkLCAiRl9XUkxDSyIsIChsb25nKUZfV1JMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfV1JMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1VOTENLCi0gICAgaWYgKGlucyhkLCAiRl9VTkxDSyIsIChsb25nKUZfVU5MQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVU5MQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIExGUyBjb25zdGFudHMgKi8KICNpZmRlZiBGX0dFVExLNjQKLSAgICBpZiAoaW5zKGQsICJGX0dFVExLNjQiLCAobG9uZylGX0dFVExLNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEs2NCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEs2NCIsIChsb25nKUZfU0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1c2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXNjQiLCAobG9uZylGX1NFVExLVzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQuICovCiAjaWZkZWYgRkFTWU5DCi0gICAgaWYgKGlucyhkLCAiRkFTWU5DIiwgKGxvbmcpRkFTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGQVNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMRUFTRSIsIChsb25nKUZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMRUFTRSIsIChsb25nKUZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX05PVElGWQotICAgIGlmIChpbnMoZCwgIkZfTk9USUZZIiwgKGxvbmcpRl9OT1RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTk9USUZZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBPbGQgQlNEIGZsb2NrKCkuICovCiAjaWZkZWYgRl9FWExDSwotICAgIGlmIChpbnMoZCwgIkZfRVhMQ0siLCAobG9uZylGX0VYTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0VYTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TSExDSwotICAgIGlmIChpbnMoZCwgIkZfU0hMQ0siLCAobG9uZylGX1NITENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NITENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE9TIFggc3BlY2lmaWNzICovCiAjaWZkZWYgRl9GVUxMRlNZTkMKLSAgICBpZiAoaW5zKGQsICJGX0ZVTExGU1lOQyIsIChsb25nKUZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0ZVTExGU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9DQUNIRQotICAgIGlmIChpbnMoZCwgIkZfTk9DQUNIRSIsIChsb25nKUZfTk9DQUNIRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX3tHRVR8U0VUfUZMICovCiAjaWZkZWYgRkRfQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIkZEX0NMT0VYRUMiLCAobG9uZylGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX05PVElGWSAqLwogI2lmZGVmIEROX0FDQ0VTUwotICAgIGlmIChpbnMoZCwgIkROX0FDQ0VTUyIsIChsb25nKUROX0FDQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQUNDRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTU9ESUZZCi0gICAgaWYgKGlucyhkLCAiRE5fTU9ESUZZIiwgKGxvbmcpRE5fTU9ESUZZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NT0RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9DUkVBVEUKLSAgICBpZiAoaW5zKGQsICJETl9DUkVBVEUiLCAobG9uZylETl9DUkVBVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0NSRUFURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0RFTEVURQotICAgIGlmIChpbnMoZCwgIkROX0RFTEVURSIsIChsb25nKUROX0RFTEVURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fUkVOQU1FCi0gICAgaWYgKGlucyhkLCAiRE5fUkVOQU1FIiwgKGxvbmcpRE5fUkVOQU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9SRU5BTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9BVFRSSUIKLSAgICBpZiAoaW5zKGQsICJETl9BVFRSSUIiLCAobG9uZylETl9BVFRSSUIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0FUVFJJQikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX01VTFRJU0hPVAotICAgIGlmIChpbnMoZCwgIkROX01VTFRJU0hPVCIsIChsb25nKUROX01VTFRJU0hPVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NUUk9QVFNfSAogICAgIC8qIFVuaXggOTggZ3VhcmFudGVlcyB0aGF0IHRoZXNlIGFyZSBpbiBzdHJvcHRzLmguICovCi0gICAgSU5TKElfUFVTSCk7Ci0gICAgSU5TKElfUE9QKTsKLSAgICBJTlMoSV9MT09LKTsKLSAgICBJTlMoSV9GTFVTSCk7Ci0gICAgSU5TKElfRkxVU0hCQU5EKTsKLSAgICBJTlMoSV9TRVRTSUcpOwotICAgIElOUyhJX0dFVFNJRyk7Ci0gICAgSU5TKElfRklORCk7Ci0gICAgSU5TKElfUEVFSyk7Ci0gICAgSU5TKElfU1JET1BUKTsKLSAgICBJTlMoSV9HUkRPUFQpOwotICAgIElOUyhJX05SRUFEKTsKLSAgICBJTlMoSV9GRElOU0VSVCk7Ci0gICAgSU5TKElfU1RSKTsKLSAgICBJTlMoSV9TV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUE9QKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xPT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0hCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRklORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QRUVLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HUkRPUFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTlJFQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkRJTlNFUlQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1RSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NXUk9QVCkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dXUk9QVAogICAgIC8qIGRlc3BpdGUgdGhlIGNvbW1lbnQgYWJvdmUsIG9sZC1pc2ggZ2xpYmNzIG1pc3MgYSBjb3VwbGUuLi4gKi8KLSAgICBJTlMoSV9HV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dXUk9QVCkpIHJldHVybiAtMTsKICNlbmRpZgotICAgIElOUyhJX1NFTkRGRCk7Ci0gICAgSU5TKElfUkVDVkZEKTsKLSAgICBJTlMoSV9MSVNUKTsKLSAgICBJTlMoSV9BVE1BUkspOwotICAgIElOUyhJX0NLQkFORCk7Ci0gICAgSU5TKElfR0VUQkFORCk7Ci0gICAgSU5TKElfQ0FOUFVUKTsKLSAgICBJTlMoSV9TRVRDTFRJTUUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFTkRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9SRUNWRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9BVE1BUkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0tCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0FOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVENMVElNRSkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dFVENMVElNRQotICAgIElOUyhJX0dFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfTElOSyk7Ci0gICAgSU5TKElfVU5MSU5LKTsKLSAgICBJTlMoSV9QTElOSyk7Ci0gICAgSU5TKElfUFVOTElOSyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9VTkxJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUExJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVOTElOSykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgcmV0dXJuIDA7CkBAIC02MzUsNyArNjIwLDcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfZmNudGwodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm07CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gKi8KICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZmY250bG1vZHVsZSk7CkBAIC02NDMsNyArNjI4LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGFsbF9pbnMoZCk7CisgICAgYWxsX2lucyhtKTsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2Ntb2R1bGUuYyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwppbmRleCBmNzgyZGQwLi5hODRkNzUyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2djbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9nY21vZHVsZS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogLyoKICAgIE5PVEU6IGFib3V0IHVudHJhY2tpbmcgb2YgbXV0YWJsZSBvYmplY3RzLgotICAgCisKICAgIENlcnRhaW4gdHlwZXMgb2YgY29udGFpbmVyIGNhbm5vdCBwYXJ0aWNpcGF0ZSBpbiBhIHJlZmVyZW5jZSBjeWNsZSwgYW5kCiAgICBzbyBkbyBub3QgbmVlZCB0byBiZSB0cmFja2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVW50cmFja2luZyB0aGVzZQogICAgb2JqZWN0cyByZWR1Y2VzIHRoZSBjb3N0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbnMuIEhvd2V2ZXIsIGRldGVybWluaW5nCkBAIC0xMzYsMTAgKzEzNiwxMCBAQAogICAgbm90IHN1cnZpdmUgdW50aWwgZ2FyYmFnZSBjb2xsZWN0aW9uLiBJdCBpcyB0aGVyZWZvcmUgbm90IHdvcnRod2hpbGUKICAgIHRvIHVudHJhY2sgZWxpZ2libGUgdHVwbGVzIGF0IGNyZWF0aW9uIHRpbWUuCiAKLSAgIEluc3RlYWQsIGFsbCB0dXBsZXMgZXhjZXB0IHRoZSBlbXB0eSB0dXBsZSBhcmUgdHJhY2tlZCB3aGVuIGNyZWF0ZWQuIAotICAgRHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBpdCBpcyBkZXRlcm1pbmVkIHdoZXRoZXIgYW55IHN1cnZpdmluZyB0dXBsZXMgCi0gICBjYW4gYmUgdW50cmFja2VkLiBBIHR1cGxlIGNhbiBiZSB1bnRyYWNrZWQgaWYgYWxsIG9mIGl0cyBjb250ZW50cyBhcmUgCi0gICBhbHJlYWR5IG5vdCB0cmFja2VkLiBUdXBsZXMgYXJlIGV4YW1pbmVkIGZvciB1bnRyYWNraW5nIGluIGFsbCBnYXJiYWdlIAorICAgSW5zdGVhZCwgYWxsIHR1cGxlcyBleGNlcHQgdGhlIGVtcHR5IHR1cGxlIGFyZSB0cmFja2VkIHdoZW4gY3JlYXRlZC4KKyAgIER1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gaXQgaXMgZGV0ZXJtaW5lZCB3aGV0aGVyIGFueSBzdXJ2aXZpbmcgdHVwbGVzCisgICBjYW4gYmUgdW50cmFja2VkLiBBIHR1cGxlIGNhbiBiZSB1bnRyYWNrZWQgaWYgYWxsIG9mIGl0cyBjb250ZW50cyBhcmUKKyAgIGFscmVhZHkgbm90IHRyYWNrZWQuIFR1cGxlcyBhcmUgZXhhbWluZWQgZm9yIHVudHJhY2tpbmcgaW4gYWxsIGdhcmJhZ2UKICAgIGNvbGxlY3Rpb24gY3ljbGVzLiBJdCBtYXkgdGFrZSBtb3JlIHRoYW4gb25lIGN5Y2xlIHRvIHVudHJhY2sgYSB0dXBsZS4KIAogICAgRGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgb25seSBpbW11dGFibGUgb2JqZWN0cyBhbHNvIGRvIG5vdCBuZWVkIHRvIGJlCkBAIC0xNTIsOCArMTUyLDggQEAKICAgIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhlIHB5dGhvbiBmdW5jdGlvbiBpc190cmFja2VkKG9iaiksIHdoaWNoIHJldHVybnMKICAgIHRoZSBDVVJSRU5UIHRyYWNraW5nIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBTdWJzZXF1ZW50IGdhcmJhZ2UKICAgIGNvbGxlY3Rpb25zIG1heSBjaGFuZ2UgdGhlIHRyYWNraW5nIHN0YXR1cyBvZiB0aGUgb2JqZWN0LgotICAgCi0gICBVbnRyYWNraW5nIG9mIGNlcnRhaW4gY29udGFpbmVycyB3YXMgaW50cm9kdWNlZCBpbiBpc3N1ZSAjNDY4OCwgYW5kIAorCisgICBVbnRyYWNraW5nIG9mIGNlcnRhaW4gY29udGFpbmVycyB3YXMgaW50cm9kdWNlZCBpbiBpc3N1ZSAjNDY4OCwgYW5kCiAgICB0aGUgYWxnb3JpdGhtIHdhcyByZWZpbmVkIGluIHJlc3BvbnNlIHRvIGlzc3VlICMxNDc3NS4KICovCiAKQEAgLTE2OCw2ICsxNjgsMTggQEAKIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgUHlPYmplY3QgKnRtb2QgPSBOVUxMOwogCisvKiBSdW5uaW5nIHN0YXRzIHBlciBnZW5lcmF0aW9uICovCitzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyB7CisgICAgLyogdG90YWwgbnVtYmVyIG9mIGNvbGxlY3Rpb25zICovCisgICAgUHlfc3NpemVfdCBjb2xsZWN0aW9uczsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGVkIG9iamVjdHMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3RlZDsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgdW5jb2xsZWN0YWJsZSBvYmplY3RzIChwdXQgaW50byBnYy5nYXJiYWdlKSAqLworICAgIFB5X3NzaXplX3QgdW5jb2xsZWN0YWJsZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBnZW5lcmF0aW9uX3N0YXRzW05VTV9HRU5FUkFUSU9OU107CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdjX3JlZnMgdmFsdWVzLgogCkBAIC0yMTEsMTAgKzIyMywxMCBAQAogI2RlZmluZSBHQ19SRUFDSEFCTEUgICAgICAgICAgICAgICAgICAgIF9QeUdDX1JFRlNfUkVBQ0hBQkxFCiAjZGVmaW5lIEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFICAgICAgX1B5R0NfUkVGU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRQogCi0jZGVmaW5lIElTX1RSQUNLRUQobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gR0NfVU5UUkFDS0VEKQotI2RlZmluZSBJU19SRUFDSEFCTEUobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKQorI2RlZmluZSBJU19UUkFDS0VEKG8pIChfUHlHQ19SRUZTKG8pICE9IEdDX1VOVFJBQ0tFRCkKKyNkZWZpbmUgSVNfUkVBQ0hBQkxFKG8pIChfUHlHQ19SRUZTKG8pID09IEdDX1JFQUNIQUJMRSkKICNkZWZpbmUgSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUobykgKCBcCi0gICAgKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkKKyAgICBfUHlHQ19SRUZTKG8pID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQogCiAvKioqIGxpc3QgZnVuY3Rpb25zICoqKi8KIApAQCAtMzI5LDggKzM0MSw4IEBACiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGNvbnRhaW5lcnMtPmdjLmdjX25leHQ7CiAgICAgZm9yICg7IGdjICE9IGNvbnRhaW5lcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzID09IEdDX1JFQUNIQUJMRSk7Ci0gICAgICAgIGdjLT5nYy5nY19yZWZzID0gUHlfUkVGQ05UKEZST01fR0MoZ2MpKTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA9PSBHQ19SRUFDSEFCTEUpOworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOwogICAgICAgICAvKiBQeXRob24ncyBjeWNsaWMgZ2Mgc2hvdWxkIG5ldmVyIHNlZSBhbiBpbmNvbWluZyByZWZjb3VudAogICAgICAgICAgKiBvZiAwOiAgaWYgc29tZXRoaW5nIGRlY3JlZidlZCB0byAwLCBpdCBzaG91bGQgaGF2ZSBiZWVuCiAgICAgICAgICAqIGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5IGF0IHRoYXQgdGltZS4KQEAgLTM0OSw3ICszNjEsNyBAQAogICAgICAgICAgKiBzbyBzZXJpb3VzIHRoYXQgbWF5YmUgdGhpcyBzaG91bGQgYmUgYSByZWxlYXNlLWJ1aWxkCiAgICAgICAgICAqIGNoZWNrIGluc3RlYWQgb2YgYW4gYXNzZXJ0PwogICAgICAgICAgKi8KLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzICE9IDApOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOwogICAgIH0KIH0KIApAQCAtMzY0LDkgKzM3Niw5IEBACiAgICAgICAgICAqIGdlbmVyYXRpb24gYmVpbmcgY29sbGVjdGVkLCB3aGljaCBjYW4gYmUgcmVjb2duaXplZAogICAgICAgICAgKiBiZWNhdXNlIG9ubHkgdGhleSBoYXZlIHBvc2l0aXZlIGdjX3JlZnMuCiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7IC8qIGVsc2UgcmVmY291bnQgd2FzIHRvbyBzbWFsbCAqLwotICAgICAgICBpZiAoZ2MtPmdjLmdjX3JlZnMgPiAwKQotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMtLTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgPiAwKQorICAgICAgICAgICAgX1B5R0NIZWFkX0RFQ1JFRihnYyk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzk1LDcgKzQwNyw3IEBACiB7CiAgICAgaWYgKFB5T2JqZWN0X0lTX0dDKG9wKSkgewogICAgICAgICBQeUdDX0hlYWQgKmdjID0gQVNfR0Mob3ApOwotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBnYy0+Z2MuZ2NfcmVmczsKKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCBnY19yZWZzID0gX1B5R0NIZWFkX1JFRlMoZ2MpOwogCiAgICAgICAgIGlmIChnY19yZWZzID09IDApIHsKICAgICAgICAgICAgIC8qIFRoaXMgaXMgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycgbGlzdCwgYnV0CkBAIC00MDMsNyArNDE1LDcgQEAKICAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gZG8gaXMgdGVsbCBtb3ZlX3VucmVhY2hhYmxlIHRoYXQgaXQncwogICAgICAgICAgICAgICogcmVhY2hhYmxlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IDE7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGdjX3JlZnMgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpIHsKICAgICAgICAgICAgIC8qIFRoaXMgaGFkIGdjX3JlZnMgPSAwIHdoZW4gbW92ZV91bnJlYWNoYWJsZSBnb3QKQEAgLTQxMyw3ICs0MjUsNyBAQAogICAgICAgICAgICAgICogYWdhaW4uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgcmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgLyogRWxzZSB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCiAgICAgICAgICAqIElmIGdjX3JlZnMgPiAwLCBpdCBtdXN0IGJlIGluIG1vdmVfdW5yZWFjaGFibGUncyAneW91bmcnCkBAIC00NTcsNyArNDY5LDcgQEAKICAgICB3aGlsZSAoZ2MgIT0geW91bmcpIHsKICAgICAgICAgUHlHQ19IZWFkICpuZXh0OwogCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcykgeworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpKSB7CiAgICAgICAgICAgICAvKiBnYyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIG91dHNpZGUgdGhlCiAgICAgICAgICAgICAgKiBvcmlnaW5hbCAneW91bmcnLiAgTWFyayBpdCBhcyBzdWNoLCBhbmQgdHJhdmVyc2UKICAgICAgICAgICAgICAqIGl0cyBwb2ludGVycyB0byBmaW5kIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWF5CkBAIC00NjgsOCArNDgwLDggQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAgICAgICAgICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2UgPSBQeV9UWVBFKG9wKS0+dHBfdHJhdmVyc2U7Ci0gICAgICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPiAwKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICAgICAgKHZvaWQpIHRyYXZlcnNlKG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aXNpdHByb2MpdmlzaXRfcmVhY2hhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopeW91bmcpOwpAQCAtNDg4LDcgKzUwMCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdW5yZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgICAgIGdjID0gbmV4dDsKICAgICB9CkBAIC01MDgsMjIgKzUyMCwxOSBAQAogICAgIH0KIH0KIAotLyogUmV0dXJuIHRydWUgaWYgb2JqZWN0IGhhcyBhIGZpbmFsaXphdGlvbiBtZXRob2QuICovCisvKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgcHJlLVBFUCA0NDIgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KIHN0YXRpYyBpbnQKLWhhc19maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQoraGFzX2xlZ2FjeV9maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQogewotICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KG9wKSkKLSAgICAgICAgcmV0dXJuIFB5R2VuX05lZWRzRmluYWxpemluZygoUHlHZW5PYmplY3QgKilvcCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb3AtPm9iX3R5cGUtPnRwX2RlbCAhPSBOVUxMOworICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CiB9CiAKLS8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCBfX2RlbF9fIG1ldGhvZHMgaW50byBgZmluYWxpemVyc2AuCisvKiBNb3ZlIHRoZSBvYmplY3RzIGluIHVucmVhY2hhYmxlIHdpdGggdHBfZGVsIHNsb3RzIGludG8gYGZpbmFsaXplcnNgLgogICogT2JqZWN0cyBtb3ZlZCBpbnRvIGBmaW5hbGl6ZXJzYCBoYXZlIGdjX3JlZnMgc2V0IHRvIEdDX1JFQUNIQUJMRTsgdGhlCiAgKiBvYmplY3RzIHJlbWFpbmluZyBpbiB1bnJlYWNoYWJsZSBhcmUgbGVmdCBhdCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRS4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVycyhQeUdDX0hlYWQgKnVucmVhY2hhYmxlLCBQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICBQeUdDX0hlYWQgKmdjOwogICAgIFB5R0NfSGVhZCAqbmV4dDsKQEAgLTUzNywxNCArNTQ2LDE0IEBACiAgICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBuZXh0ID0gZ2MtPmdjLmdjX25leHQ7CiAKLSAgICAgICAgaWYgKGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmIChoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgZmluYWxpemVycyk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZS4gKi8KKy8qIEEgdHJhdmVyc2FsIGNhbGxiYWNrIGZvciBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLwogc3RhdGljIGludAogdmlzaXRfbW92ZShQeU9iamVjdCAqb3AsIFB5R0NfSGVhZCAqdG9saXN0KQogewpAQCAtNTUyLDcgKzU2MSw3IEBACiAgICAgICAgIGlmIChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpIHsKICAgICAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7CiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIHRvbGlzdCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTU2Miw3ICs1NzEsNyBAQAogICogaW50byBmaW5hbGl6ZXJzIHNldC4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2U7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CkBAIC03MzUsNyArNzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBQeV9UWVBFKG9wKS0+dHBfbmFtZSwgb3ApOwogfQogCi0vKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCBmaW5hbGl6ZXJzLCBhbmQgc3R1ZmYgcmVhY2hhYmxlCisvKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCB0cF9kZWwgc2xvdHMsIGFuZCBzdHVmZiByZWFjaGFibGUKICAqIG9ubHkgZnJvbSBzdWNoIGN5Y2xlcykuCiAgKiBJZiBERUJVR19TQVZFQUxMLCBhbGwgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIGFyZSBhcHBlbmRlZCB0byB0aGUgbW9kdWxlCiAgKiBnYXJiYWdlIGxpc3QgKGEgUHl0aG9uIGxpc3QpLCBlbHNlIG9ubHkgdGhlIG9iamVjdHMgaW4gZmluYWxpemVycyB3aXRoCkBAIC03NDUsNyArNzU0LDcgQEAKICAqIFRoZSBmaW5hbGl6ZXJzIGxpc3QgaXMgbWFkZSBlbXB0eSBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLgogICovCiBzdGF0aWMgaW50Ci1oYW5kbGVfZmluYWxpemVycyhQeUdDX0hlYWQgKmZpbmFsaXplcnMsIFB5R0NfSGVhZCAqb2xkKQoraGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CiAKQEAgLTc1Nyw3ICs3NjYsNyBAQAogICAgIGZvciAoOyBnYyAhPSBmaW5hbGl6ZXJzOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfZmluYWxpemVyKG9wKSkgeworICAgICAgICBpZiAoKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgfHwgaGFzX2xlZ2FjeV9maW5hbGl6ZXIob3ApKSB7CiAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtNzY3LDYgKzc3Niw2MiBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorZmluYWxpemVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlLCBQeUdDX0hlYWQgKm9sZCkKK3sKKyAgICBkZXN0cnVjdG9yIGZpbmFsaXplOworICAgIFB5R0NfSGVhZCAqZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsKKworICAgIGZvciAoOyBnYyAhPSBjb2xsZWN0YWJsZTsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKKworICAgICAgICBpZiAoIV9QeUdDSGVhZF9GSU5BTElaRUQoZ2MpICYmCisgICAgICAgICAgICBQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJgorICAgICAgICAgICAgKGZpbmFsaXplID0gUHlfVFlQRShvcCktPnRwX2ZpbmFsaXplKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX0ZJTkFMSVpFRChnYywgMSk7CisgICAgICAgICAgICBQeV9JTkNSRUYob3ApOworICAgICAgICAgICAgZmluYWxpemUob3ApOworICAgICAgICAgICAgaWYgKFB5X1JFRkNOVChvcCkgPT0gMSkgeworICAgICAgICAgICAgICAgIC8qIG9wIHdpbGwgYmUgZGVzdHJveWVkICovCisgICAgICAgICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfcHJldjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIFdhbGsgdGhlIGNvbGxlY3RhYmxlIGxpc3QgYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgcmVhbGx5IHVucmVhY2hhYmxlCisgICBmcm9tIHRoZSBvdXRzaWRlIChzb21lIG9iamVjdHMgY291bGQgaGF2ZSBiZWVuIHJlc3VycmVjdGVkIGJ5IGEKKyAgIGZpbmFsaXplcikuICovCitzdGF0aWMgaW50CitjaGVja19nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUpCit7CisgICAgUHlHQ19IZWFkICpnYzsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOworICAgIH0KKyAgICBzdWJ0cmFjdF9yZWZzKGNvbGxlY3RhYmxlKTsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID49IDApOworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmV2aXZlX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKKyAgICB9Cit9CisKIC8qIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgYnkgY2xlYXJpbmcgdGhlIGNvbnRhaW5lcnMgaW52b2x2ZWQuICBUaGlzIGlzCiAgKiB0cmlja3kgYnVzaW5lc3MgYXMgdGhlIGxpc3RzIGNhbiBiZSBjaGFuZ2luZyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaAogICogb2JqZWN0cyBtYXkgYmUgZnJlZWQuICBJdCBpcyBwb3NzaWJsZSBJIHNjcmV3ZWQgc29tZXRoaW5nIHVwIGhlcmUuCkBAIC03ODAsNyArODQ1LDYgQEAKICAgICAgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OwogICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKIAotICAgICAgICBhc3NlcnQoSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUob3ApKTsKICAgICAgICAgaWYgKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgewogICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCk7CiAgICAgICAgIH0KQEAgLTc5NCw3ICs4NTgsNyBAQAogICAgICAgICBpZiAoY29sbGVjdGFibGUtPmdjLmdjX25leHQgPT0gZ2MpIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBzdGlsbCBhbGl2ZSwgbW92ZSBpdCwgaXQgbWF5IGRpZSBsYXRlciAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBvbGQpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NDEsNyArOTA1LDggQEAKIC8qIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uICBSZWFkIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlCiAgKiBjb2xsZWN0aW9uIHByb2Nlc3Mgd29ya3MuICovCiBzdGF0aWMgUHlfc3NpemVfdAotY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSkKK2NvbGxlY3QoaW50IGdlbmVyYXRpb24sIFB5X3NzaXplX3QgKm5fY29sbGVjdGVkLCBQeV9zc2l6ZV90ICpuX3VuY29sbGVjdGFibGUsCisgICAgICAgIGludCBub2ZhaWwpCiB7CiAgICAgaW50IGk7CiAgICAgUHlfc3NpemVfdCBtID0gMDsgLyogIyBvYmplY3RzIGNvbGxlY3RlZCAqLwpAQCAtODUyLDYgKzkxNyw3IEBACiAgICAgUHlHQ19IZWFkIGZpbmFsaXplcnM7ICAvKiBvYmplY3RzIHdpdGgsICYgcmVhY2hhYmxlIGZyb20sIF9fZGVsX18gKi8KICAgICBQeUdDX0hlYWQgKmdjOwogICAgIGRvdWJsZSB0MSA9IDAuMDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyAqc3RhdHMgPSAmZ2VuZXJhdGlvbl9zdGF0c1tnZW5lcmF0aW9uXTsKIAogICAgIGlmIChkZWJ1ZyAmIERFQlVHX1NUQVRTKSB7CiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJnYzogY29sbGVjdGluZyBnZW5lcmF0aW9uICVkLi4uXG4iLApAQCAtOTE1LDE5ICs5ODEsMTUgQEAKICAgICB9CiAKICAgICAvKiBBbGwgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSBhcmUgdHJhc2gsIGJ1dCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCi0gICAgICogZmluYWxpemVycyBjYW4ndCBzYWZlbHkgYmUgZGVsZXRlZC4gIFB5dGhvbiBwcm9ncmFtbWVycyBzaG91bGQgdGFrZQotICAgICAqIGNhcmUgbm90IHRvIGNyZWF0ZSBzdWNoIHRoaW5ncy4gIEZvciBQeXRob24sIGZpbmFsaXplcnMgbWVhbnMKLSAgICAgKiBpbnN0YW5jZSBvYmplY3RzIHdpdGggX19kZWxfXyBtZXRob2RzLiAgV2Vha3JlZnMgd2l0aCBjYWxsYmFja3MKLSAgICAgKiBjYW4gYWxzbyBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZSBidXQgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggYnkKLSAgICAgKiBoYW5kbGVfd2Vha3JlZnMoKS4KKyAgICAgKiBsZWdhY3kgZmluYWxpemVycyAoZS5nLiB0cF9kZWwpIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLgogICAgICAqLwogICAgIGdjX2xpc3RfaW5pdCgmZmluYWxpemVycyk7Ci0gICAgbW92ZV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOwotICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGZpbmFsaXplcjsKKyAgICBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOworICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGxlZ2FjeSBmaW5hbGl6ZXI7CiAgICAgICogdW5yZWFjaGFibGUgb2JqZWN0cyByZWFjaGFibGUgKmZyb20qIHRob3NlIGFyZSBhbHNvIHVuY29sbGVjdGFibGUsCiAgICAgICogYW5kIHdlIG1vdmUgdGhvc2UgaW50byB0aGUgZmluYWxpemVycyBsaXN0IHRvby4KICAgICAgKi8KLSAgICBtb3ZlX2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOwogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIGNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLgpAQCAtOTQzLDExICsxMDA1LDIwIEBACiAgICAgLyogQ2xlYXIgd2Vha3JlZnMgYW5kIGludm9rZSBjYWxsYmFja3MgYXMgbmVjZXNzYXJ5LiAqLwogICAgIG0gKz0gaGFuZGxlX3dlYWtyZWZzKCZ1bnJlYWNoYWJsZSwgb2xkKTsKIAotICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCi0gICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCi0gICAgICogaW4gZmluYWxpemVycyB0byBiZSBmcmVlZC4KLSAgICAgKi8KLSAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgLyogQ2FsbCB0cF9maW5hbGl6ZSBvbiBvYmplY3RzIHdoaWNoIGhhdmUgb25lLiAqLworICAgIGZpbmFsaXplX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworCisgICAgaWYgKGNoZWNrX2dhcmJhZ2UoJnVucmVhY2hhYmxlKSkgeworICAgICAgICByZXZpdmVfZ2FyYmFnZSgmdW5yZWFjaGFibGUpOworICAgICAgICBnY19saXN0X21lcmdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCisgICAgICAgICAqIHRoZSByZWZlcmVuY2UgY3ljbGVzIHRvIGJlIGJyb2tlbi4gIEl0IG1heSBhbHNvIGNhdXNlIHNvbWUgb2JqZWN0cworICAgICAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgorICAgICAgICAgKi8KKyAgICAgICAgZGVsZXRlX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KIAogICAgIC8qIENvbGxlY3Qgc3RhdGlzdGljcyBvbiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLiAqLwpAQCAtOTc4LDcgKzEwNDksNyBAQAogICAgICAqIHJlYWNoYWJsZSBsaXN0IG9mIGdhcmJhZ2UuICBUaGUgcHJvZ3JhbW1lciBoYXMgdG8gZGVhbCB3aXRoCiAgICAgICogdGhpcyBpZiB0aGV5IGluc2lzdCBvbiBjcmVhdGluZyB0aGlzIHR5cGUgb2Ygc3RydWN0dXJlLgogICAgICAqLwotICAgICh2b2lkKWhhbmRsZV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOworICAgICh2b2lkKWhhbmRsZV9sZWdhY3lfZmluYWxpemVycygmZmluYWxpemVycywgb2xkKTsKIAogICAgIC8qIENsZWFyIGZyZWUgbGlzdCBvbmx5IGR1cmluZyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgaGlnaGVzdAogICAgICAqIGdlbmVyYXRpb24gKi8KQEAgLTk4NywxNiArMTA1OCwyNSBAQAogICAgIH0KIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdjX3N0cik7Ci0gICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgaWYgKG5vZmFpbCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnY19zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZ2FyYmFnZSBjb2xsZWN0aW9uIik7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIC8qIFVwZGF0ZSBzdGF0cyAqLwogICAgIGlmIChuX2NvbGxlY3RlZCkKICAgICAgICAgKm5fY29sbGVjdGVkID0gbTsKICAgICBpZiAobl91bmNvbGxlY3RhYmxlKQogICAgICAgICAqbl91bmNvbGxlY3RhYmxlID0gbjsKKyAgICBzdGF0cy0+Y29sbGVjdGlvbnMrKzsKKyAgICBzdGF0cy0+Y29sbGVjdGVkICs9IG07CisgICAgc3RhdHMtPnVuY29sbGVjdGFibGUgKz0gbjsKICAgICByZXR1cm4gbittOwogfQogCkBAIC0xMDQ1LDcgKzExMjUsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzdWx0LCBjb2xsZWN0ZWQsIHVuY29sbGVjdGFibGU7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdGFydCIsIGdlbmVyYXRpb24sIDAsIDApOwotICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUpOworICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUsIDApOwogICAgIGludm9rZV9nY19jYWxsYmFjaygic3RvcCIsIGdlbmVyYXRpb24sIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEzNDMsNiArMTQyMyw1MiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1B5RG9jX1NUUlZBUihnY19nZXRfc3RhdHNfX2RvY19fLAorImdldF9zdGF0cygpIC0+IFsuLi5dXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBwZXItZ2VuZXJhdGlvbiBzdGF0aXN0aWNzLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnY19nZXRfc3RhdHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgaW50IGk7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBzdGF0c1tOVU1fR0VORVJBVElPTlNdLCAqc3Q7CisKKyAgICAvKiBUbyBnZXQgY29uc2lzdGVudCB2YWx1ZXMgZGVzcGl0ZSBhbGxvY2F0aW9ucyB3aGlsZSBjb25zdHJ1Y3RpbmcKKyAgICAgICB0aGUgcmVzdWx0IGxpc3QsIHdlIHVzZSBhIHNuYXBzaG90IG9mIHRoZSBydW5uaW5nIHN0YXRzLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fR0VORVJBVElPTlM7IGkrKykgeworICAgICAgICBzdGF0c1tpXSA9IGdlbmVyYXRpb25fc3RhdHNbaV07CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpkaWN0OworICAgICAgICBzdCA9ICZzdGF0c1tpXTsKKyAgICAgICAgZGljdCA9IFB5X0J1aWxkVmFsdWUoIntzbnNuc259IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbGxlY3Rpb25zIiwgc3QtPmNvbGxlY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGVkIiwgc3QtPmNvbGxlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29sbGVjdGFibGUiLCBzdC0+dW5jb2xsZWN0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIGRpY3QpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCisKIFB5RG9jX1NUUlZBUihnY19pc190cmFja2VkX19kb2NfXywKICJpc190cmFja2VkKG9iaikgLT4gYm9vbFxuIgogIlxuIgpAQCAtMTM5Myw2ICsxNTE5LDcgQEAKICAgICB7ImNvbGxlY3QiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilnY19jb2xsZWN0LAogICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgICAgICAgZ2NfY29sbGVjdF9fZG9jX199LAogICAgIHsiZ2V0X29iamVjdHMiLCAgICBnY19nZXRfb2JqZWN0cyxNRVRIX05PQVJHUywgIGdjX2dldF9vYmplY3RzX19kb2NfX30sCisgICAgeyJnZXRfc3RhdHMiLCAgICAgIGdjX2dldF9zdGF0cywgTUVUSF9OT0FSR1MsIGdjX2dldF9zdGF0c19fZG9jX199LAogICAgIHsiaXNfdHJhY2tlZCIsICAgICBnY19pc190cmFja2VkLCBNRVRIX08sICAgICAgIGdjX2lzX3RyYWNrZWRfX2RvY19ffSwKICAgICB7ImdldF9yZWZlcnJlcnMiLCAgZ2NfZ2V0X3JlZmVycmVycywgTUVUSF9WQVJBUkdTLAogICAgICAgICBnY19nZXRfcmVmZXJyZXJzX19kb2NfX30sCkBAIC0xNDgwLDggKzE2MDcsMjkgQEAKICAgICByZXR1cm4gbjsKIH0KIAorUHlfc3NpemVfdAorX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKQoreworICAgIFB5X3NzaXplX3QgbjsKKworICAgIC8qIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gaW50ZXJwcmV0ZXIgc2h1dGRvd24sCisgICAgICAgYW5kIHRoZXJlZm9yZSBub3QgcmVjdXJzaXZlbHkuICBVbmZvcnR1bmF0ZWx5LCB3aGVuIHRoZXJlIGFyZSBkYWVtb24KKyAgICAgICB0aHJlYWRzLCBhIGRhZW1vbiB0aHJlYWQgY2FuIHN0YXJ0IGEgY3ljbGljIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biAoYW5kIHRoZW4gbmV2ZXIgZmluaXNoIGl0KS4KKyAgICAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3MTMjbXNnMTk1MTc4IGZvciBhbiBleGFtcGxlLgorICAgICAgICovCisgICAgaWYgKGNvbGxlY3RpbmcpCisgICAgICAgIG4gPSAwOworICAgIGVsc2UgeworICAgICAgICBjb2xsZWN0aW5nID0gMTsKKyAgICAgICAgbiA9IGNvbGxlY3QoTlVNX0dFTkVSQVRJT05TIC0gMSwgTlVMTCwgTlVMTCwgMSk7CisgICAgICAgIGNvbGxlY3RpbmcgPSAwOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwogdm9pZAotX1B5R0NfRmluaSh2b2lkKQorX1B5R0NfRHVtcFNodXRkb3duU3RhdHModm9pZCkKIHsKICAgICBpZiAoIShkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpCiAgICAgICAgICYmIGdhcmJhZ2UgIT0gTlVMTCAmJiBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkgPiAwKSB7CkBAIC0xNDkyLDggKzE2NDAsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWVzc2FnZSA9ICJnYzogJXpkIHVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCAiIFwKICAgICAgICAgICAgICAgICAic2h1dGRvd247IHVzZSBnYy5zZXRfZGVidWcoZ2MuREVCVUdfVU5DT0xMRUNUQUJMRSkgdG8gbGlzdCB0aGVtIjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUmVzb3VyY2VXYXJuaW5nLCAwLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpIDwgMCkKKyAgICAgICAgLyogUHlFcnJfV2FybkZvcm1hdCBkb2VzIHRvbyBtYW55IHRoaW5ncyBhbmQgd2UgYXJlIGF0IHNodXRkb3duLAorICAgICAgICAgICB0aGUgd2FybmluZ3MgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzIChlLmcuIGxpbmVjYWNoZSkgbWF5IGJlIGdvbmUKKyAgICAgICAgICAgYWxyZWFkeS4gKi8KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsICJnYyIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjIiwgTlVMTCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpKQogICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19VTkNPTExFQ1RBQkxFKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqcmVwciA9IE5VTEwsICpieXRlcyA9IE5VTEw7CkBAIC0xNTAyLDcgKzE2NTQsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnYXJiYWdlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKAotICAgICAgICAgICAgICAgICAgICAiICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAiICAgICAgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKQogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQpAQCAtMTUxMCw3ICsxNjYyLDEzIEBACiAgICAgICAgICAgICBQeV9YREVDUkVGKGJ5dGVzKTsKICAgICAgICAgfQogICAgIH0KK30KKwordm9pZAorX1B5R0NfRmluaSh2b2lkKQorewogICAgIFB5X0NMRUFSKGNhbGxiYWNrcyk7CisgICAgUHlfQ0xFQVIodG1vZCk7CiB9CiAKIC8qIGZvciBkZWJ1Z2dpbmcgKi8KQEAgLTE1NjksNyArMTcyNyw4IEBACiAgICAgICAgIHNpemVvZihQeUdDX0hlYWQpICsgYmFzaWNzaXplKTsKICAgICBpZiAoZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBnLT5nYy5nY19yZWZzID0gR0NfVU5UUkFDS0VEOworICAgIGctPmdjLmdjX3JlZnMgPSAwOworICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCBHQ19VTlRSQUNLRUQpOwogICAgIGdlbmVyYXRpb25zWzBdLmNvdW50Kys7IC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgR0Mgb2JqZWN0cyAqLwogICAgIGlmIChnZW5lcmF0aW9uc1swXS5jb3VudCA+IGdlbmVyYXRpb25zWzBdLnRocmVzaG9sZCAmJgogICAgICAgICBlbmFibGVkICYmCkBAIC0xNTk2LDggKzE3NTUsMTUgQEAKIFB5VmFyT2JqZWN0ICoKIF9QeU9iamVjdF9HQ19OZXdWYXIoUHlUeXBlT2JqZWN0ICp0cCwgUHlfc3NpemVfdCBuaXRlbXMpCiB7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7Ci0gICAgUHlWYXJPYmplY3QgKm9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlWYXJPYmplY3QgKm9wOworCisgICAgaWYgKG5pdGVtcyA8IDApIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCBuaXRlbXMpOworICAgIG9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CiAgICAgaWYgKG9wICE9IE5VTEwpCiAgICAgICAgIG9wID0gUHlPYmplY3RfSU5JVF9WQVIob3AsIHRwLCBuaXRlbXMpOwogICAgIHJldHVybiBvcDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggZmYxNGZkZC4uOWU3OWMyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRwYXRoLmMKKysrIGIvTW9kdWxlcy9nZXRwYXRoLmMKQEAgLTEzNCw4ICsxMzQsNiBAQAogc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLXN0YXRpYyBpbnQgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKLXN0YXRpYyB3Y2hhcl90ICpsaWJfcHl0aG9uID0gTCJsaWIvcHl0aG9uIiBWRVJTSU9OOwogCiBzdGF0aWMgdm9pZAogcmVkdWNlKHdjaGFyX3QgKmRpcikKQEAgLTMxNyw3ICszMTUsOCBAQAogICAgYnl0ZXMgbG9uZy4KICovCiBzdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4KQorc2VhcmNoX2Zvcl9wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKmxpYl9weXRob24pCiB7CiAgICAgc2l6ZV90IG47CiAgICAgd2NoYXJfdCAqdnBhdGg7CkBAIC0zNDYsNyArMzQ1LDcgQEAKICAgICAgICAgICAgIHdjc25jcHkocHJlZml4LCBhcmd2MF9wYXRoLCBNQVhQQVRITEVOKTsKICAgICAgICAgICAgIHByZWZpeFtNQVhQQVRITEVOXSA9IEwnXDAnOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCB2cGF0aCk7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHZwYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUodnBhdGgpOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMIkxpYiIpOwogICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMQU5ETUFSSyk7CiAgICAgICAgICAgICBpZiAoaXNtb2R1bGUocHJlZml4KSkKQEAgLTM4Myw3ICszODIsOCBAQAogICAgTUFYUEFUSExFTiBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfZXhlY19wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX2V4ZWNfcHJlZml4KQorc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLAorICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpfZXhlY19wcmVmaXgsIHdjaGFyX3QgKmxpYl9weXRob24pCiB7CiAgICAgc2l6ZV90IG47CiAKQEAgLTQ5MywxMiArNDkzLDE0IEBACiAgICAgY2hhciBleGVjcGF0aFtNQVhQQVRITEVOKzFdOwogI2VuZGlmCiAgICAgd2NoYXJfdCAqX3B5dGhvbnBhdGgsICpfcHJlZml4LCAqX2V4ZWNfcHJlZml4OworICAgIHdjaGFyX3QgKmxpYl9weXRob247CiAKICAgICBfcHl0aG9ucGF0aCA9IF9QeV9jaGFyMndjaGFyKFBZVEhPTlBBVEgsIE5VTEwpOwogICAgIF9wcmVmaXggPSBfUHlfY2hhcjJ3Y2hhcihQUkVGSVgsIE5VTEwpOwogICAgIF9leGVjX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKEVYRUNfUFJFRklYLCBOVUxMKTsKKyAgICBsaWJfcHl0aG9uID0gX1B5X2NoYXIyd2NoYXIoImxpYi9weXRob24iIFZFUlNJT04sIE5VTEwpOwogCi0gICAgaWYgKCFfcHl0aG9ucGF0aCB8fCAhX3ByZWZpeCB8fCAhX2V4ZWNfcHJlZml4KSB7CisgICAgaWYgKCFfcHl0aG9ucGF0aCB8fCAhX3ByZWZpeCB8fCAhX2V4ZWNfcHJlZml4IHx8ICFsaWJfcHl0aG9uKSB7CiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAiVW5hYmxlIHRvIGRlY29kZSBwYXRoIHZhcmlhYmxlcyBpbiBnZXRwYXRoLmM6ICIKICAgICAgICAgICAgICJtZW1vcnkgZXJyb3IiKTsKQEAgLTU2Miw4ICs1NjQsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLSAgICBpZiAocGF0aF9idWZmZXIgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShwYXRoX2J1ZmZlcik7CisgICAgUHlNZW1fUmF3RnJlZShwYXRoX2J1ZmZlcik7CiAgICAgaWYgKHByb2dwYXRoWzBdICE9IFNFUCAmJiBwcm9ncGF0aFswXSAhPSAnXDAnKQogICAgICAgICBhYnNvbHV0aXplKHByb2dwYXRoKTsKICAgICB3Y3NuY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoLCBNQVhQQVRITEVOKTsKQEAgLTYwNSw3ICs2MDYsNyBAQAogICAgICAgICAgICAgLyogVXNlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeSBhcyB0aGUgcHJvZ3BhdGggKi8KICAgICAgICAgICAgIHdjc25jcHkoYXJndjBfcGF0aCwgd2J1ZiwgTUFYUEFUSExFTik7CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNjY3LDcgKzY2OCw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIShwZm91bmQgPSBzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfcHJlZml4KSkpIHsKKyAgICBwZm91bmQgPSBzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIXBmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbGlicmFyaWVzIDxwcmVmaXg+XG4iKTsKQEAgLTY5MCw3ICs2OTIsOSBAQAogICAgIHppcF9wYXRoW2J1ZnN6IC0gNl0gPSBWRVJTSU9OWzBdOwogICAgIHppcF9wYXRoW2J1ZnN6IC0gNV0gPSBWRVJTSU9OWzJdOwogCi0gICAgaWYgKCEoZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLCBfZXhlY19wcmVmaXgpKSkgeworICAgIGVmb3VuZCA9IHNlYXJjaF9mb3JfZXhlY19wcmVmaXgoYXJndjBfcGF0aCwgaG9tZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9leGVjX3ByZWZpeCwgbGliX3B5dGhvbik7CisgICAgaWYgKCFlZm91bmQpIHsKICAgICAgICAgaWYgKCFQeV9Gcm96ZW5GbGFnKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHBsYXRmb3JtIGRlcGVuZGVudCBsaWJyYXJpZXMgPGV4ZWNfcHJlZml4PlxuIik7CkBAIC03MDcsMTMgKzcxMSwxMSBAQAogICAgICAqLwogICAgIGJ1ZnN6ID0gMDsKIAotICAgIGlmIChfcnRweXBhdGgpIHsKKyAgICBpZiAoX3J0cHlwYXRoICYmIF9ydHB5cGF0aFswXSAhPSAnXDAnKSB7CiAgICAgICAgIHNpemVfdCBydHB5cGF0aF9sZW47CiAgICAgICAgIHJ0cHlwYXRoID0gX1B5X2NoYXIyd2NoYXIoX3J0cHlwYXRoLCAmcnRweXBhdGhfbGVuKTsKICAgICAgICAgaWYgKHJ0cHlwYXRoICE9IE5VTEwpCiAgICAgICAgICAgICBidWZzeiArPSBydHB5cGF0aF9sZW4gKyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfcnRweXBhdGggPSBOVUxMOwogICAgIH0KIAogICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKQEAgLTczNyw2MCArNzM5LDU1IEBACiAgICAgYnVmc3ogKz0gd2NzbGVuKHppcF9wYXRoKSArIDE7CiAgICAgYnVmc3ogKz0gd2NzbGVuKGV4ZWNfcHJlZml4KSArIDE7CiAKLSAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOwotCisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoYnVmc3ogKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBMIiIgUFlUSE9OUEFUSDsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRIIik7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBSdW4tdGltZSB2YWx1ZSBvZiAkUFlUSE9OUEFUSCBnb2VzIGZpcnN0ICovCi0gICAgICAgIGlmIChydHB5cGF0aCkgewotICAgICAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwotICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWZbMF0gPSAnXDAnOwogCi0gICAgICAgIC8qIE5leHQgaXMgdGhlIGRlZmF1bHQgemlwIHBhdGggKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KKyAgICBpZiAocnRweXBhdGgpIHsKKyAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwogICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIE5leHQgZ29lcyBtZXJnZSBvZiBjb21waWxlLXRpbWUgJFBZVEhPTlBBVEggd2l0aAotICAgICAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KLSAgICAgICAgICovCi0gICAgICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlZnBhdGhbMF0gIT0gU0VQKSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZW5kID0gd2NzbGVuKGJ1ZikgKyBsZW47Ci0gICAgICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgZXhlY19wcmVmaXgpOwotCi0gICAgICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCi0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMTsKICAgICB9CisgICAgZWxzZQorICAgICAgICBidWZbMF0gPSAnXDAnOworCisgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLworICAgIHdjc2NhdChidWYsIHppcF9wYXRoKTsKKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCisgICAgICogZHluYW1pY2FsbHkgbG9jYXRlZCBwcmVmaXguCisgICAgICovCisgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKKworICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHByZWZpeCk7CisgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlbGltKSB7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKKyAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKKyAgICAgICAgICAgIHdjc25jYXQoYnVmLCBkZWZwYXRoLCBsZW4pOworICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKKyAgICB9CisgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKKworICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KKyAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7CisKKyAgICAvKiBBbmQgcHVibGlzaCB0aGUgcmVzdWx0cyAqLworICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKIAogICAgIC8qIFJlZHVjZSBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IHRvIHRoZWlyIGVzc2VuY2UsCiAgICAgICogZS5nLiAvdXNyL2xvY2FsL2xpYi9weXRob24xLjUgaXMgcmVkdWNlZCB0byAvdXNyL2xvY2FsLgpAQCAtODE4LDExICs4MTUsMTEgQEAKICAgICBlbHNlCiAgICAgICAgIHdjc25jcHkoZXhlY19wcmVmaXgsIF9leGVjX3ByZWZpeCwgTUFYUEFUSExFTik7CiAKLSAgICBQeU1lbV9GcmVlKF9weXRob25wYXRoKTsKLSAgICBQeU1lbV9GcmVlKF9wcmVmaXgpOwotICAgIFB5TWVtX0ZyZWUoX2V4ZWNfcHJlZml4KTsKLSAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShydHB5cGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHl0aG9ucGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKF9leGVjX3ByZWZpeCk7CisgICAgUHlNZW1fUmF3RnJlZShsaWJfcHl0aG9uKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ0cHlwYXRoKTsKIH0KIAogCkBAIC04MzEsMTggKzgyOCwxNSBAQAogUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQogewogICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgewotICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkKQotICAgICAgICAgICAgUHlNZW1fRnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKICAgICAgICAgZXh0ZXJuIHdjaGFyX3QgKlB5X0dldFByb2dyYW1OYW1lKHZvaWQpOwogICAgICAgICB3Y2hhcl90ICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKICAgICAgICAgd2NzbmNweShwcm9ncGF0aCwgcHJvZywgTUFYUEFUSExFTik7CiAgICAgICAgIGV4ZWNfcHJlZml4WzBdID0gcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ncnBtb2R1bGUuYyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKaW5kZXggMDQyY2YwNS4uYTg1YTI3MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ncnBtb2R1bGUuYworKysgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCkBAIC0yMTAsOSArMjEwLDE0IEBACiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdEdycFR5cGUsICZzdHJ1Y3RfZ3JvdXBfdHlwZV9kZXNjKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAic3RydWN0X2dyb3VwIiwgKFB5T2JqZWN0ICopICZTdHJ1Y3RHcnBUeXBlKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0R3JwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfZ3JvdXBfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJzdHJ1Y3RfZ3JvdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmU3RydWN0R3JwVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2hsaWIuaCBiL01vZHVsZXMvaGFzaGxpYi5oCmluZGV4IDQ1OTkxNDYuLjUxYzY4ZjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaGFzaGxpYi5oCisrKyBiL01vZHVsZXMvaGFzaGxpYi5oCkBAIC0yNiwzICsyNiwzNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKICAgICAgICAgfSBcCiAgICAgfSB3aGlsZSgwKTsKKworLyoKKyAqIEhlbHBlciBjb2RlIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgaGFzaCBvYmplY3Qgd2hlbiB0aGUgR0lMIGlzCisgKiByZWxlYXNlZCBhcm91bmQgYSBDUFUgY29uc3VtaW5nIGhhc2hsaWIgb3BlcmF0aW9uLiBBbGwgY29kZSBwYXRocyB0aGF0CisgKiBhY2Nlc3MgYSBtdXRhYmxlIHBhcnQgb2Ygb2JqIG11c3QgYmUgZW5jbG9zZWQgaW4gYSBFTlRFUl9IQVNITElCIC8KKyAqIExFQVZFX0hBU0hMSUIgYmxvY2sgb3IgZXhwbGljaXRseSBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBsb2NrIGluc2lkZQorICogYSBQWV9CRUdJTiAvIEVORF9BTExPV19USFJFQURTIGJsb2NrIGlmIHRoZXkgd2lzaCB0byByZWxlYXNlIHRoZSBHSUwgZm9yCisgKiBhbiBvcGVyYXRpb24uCisgKi8KKworI2lmZGVmIFdJVEhfVEhSRUFECisjaW5jbHVkZSAicHl0aHJlYWQuaCIKKyAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKSBcCisgICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCisgICAgICAgICAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMCkpIHsgXAorICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgXAorICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMSk7IFwKKyAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfQorICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jaygob2JqKS0+bG9jayk7IFwKKyAgICAgICAgfQorI2Vsc2UKKyAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKQorICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopCisjZW5kaWYKKworLyogVE9ETyhncHMpOiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgbW9kdWxlIG9yIEVWUG9iamVjdCBhdHRyaWJ1dGUKKyAqIHRvIGFsbG93IHRoZSB1c2VyIHRvIG9wdGltaXplIGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSB0aGV5J3JlIHVzaW5nLiAqLworI2RlZmluZSBIQVNITElCX0dJTF9NSU5TSVpFIDIwNDgKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9oYXNodGFibGUuYyBiL01vZHVsZXMvaGFzaHRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvaGFzaHRhYmxlLmMKQEAgLTAsMCArMSw1MTggQEAKKy8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGFzaCB0YWJsZSAoX1B5X2hhc2h0YWJsZV90KSBpcyBiYXNlZCBvbiB0aGUgY2Z1aGFzaAorICAgcHJvamVjdDoKKyAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY2Z1LworCisgICBDb3B5cmlnaHQgb2YgY2Z1aGFzaDoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENyZWF0aW9uIGRhdGU6IDIwMDUtMDYtMjQgMjE6MjI6NDAKKyAgIEF1dGhvcnM6IERvbgorICAgQ2hhbmdlIGxvZzoKKworICAgQ29weXJpZ2h0IChjKSAyMDA1IERvbiBPd2VucworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAiaGFzaHRhYmxlLmgiCisKKyNkZWZpbmUgSEFTSFRBQkxFX01JTl9TSVpFIDE2CisjZGVmaW5lIEhBU0hUQUJMRV9ISUdIIDAuNTAKKyNkZWZpbmUgSEFTSFRBQkxFX0xPVyAwLjEwCisjZGVmaW5lIEhBU0hUQUJMRV9SRUhBU0hfRkFDVE9SIDIuMCAvIChIQVNIVEFCTEVfTE9XICsgSEFTSFRBQkxFX0hJR0gpCisKKyNkZWZpbmUgQlVDS0VUU19IRUFEKFNMSVNUKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0hFQUQoJihTTElTVCkpKQorI2RlZmluZSBUQUJMRV9IRUFEKEhULCBCVUNLRVQpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSEVBRCgmKEhUKS0+YnVja2V0c1tCVUNLRVRdKSkKKyNkZWZpbmUgRU5UUllfTkVYVChFTlRSWSkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9JVEVNX05FWFQoRU5UUlkpKQorI2RlZmluZSBIQVNIVEFCTEVfSVRFTV9TSVpFKEhUKSBcCisgICAgICAgIChzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90KSArIChIVCktPmRhdGFfc2l6ZSkKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgaGFzaHRhYmxlX3JlaGFzaChfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9pbml0KF9QeV9zbGlzdF90ICpsaXN0KQoreworICAgIGxpc3QtPmhlYWQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X3ByZXBlbmQoX1B5X3NsaXN0X3QgKmxpc3QsIF9QeV9zbGlzdF9pdGVtX3QgKml0ZW0pCit7CisgICAgaXRlbS0+bmV4dCA9IGxpc3QtPmhlYWQ7CisgICAgbGlzdC0+aGVhZCA9IGl0ZW07Cit9CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfcmVtb3ZlKF9QeV9zbGlzdF90ICpsaXN0LCBfUHlfc2xpc3RfaXRlbV90ICpwcmV2aW91cywKKyAgICAgICAgICAgICAgICAgX1B5X3NsaXN0X2l0ZW1fdCAqaXRlbSkKK3sKKyAgICBpZiAocHJldmlvdXMgIT0gTlVMTCkKKyAgICAgICAgcHJldmlvdXMtPm5leHQgPSBpdGVtLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgbGlzdC0+aGVhZCA9IGl0ZW0tPm5leHQ7Cit9CisKK1B5X3VoYXNoX3QKK19QeV9oYXNodGFibGVfaGFzaF9pbnQoY29uc3Qgdm9pZCAqa2V5KQoreworICAgIHJldHVybiAoUHlfdWhhc2hfdClrZXk7Cit9CisKK1B5X3VoYXNoX3QKK19QeV9oYXNodGFibGVfaGFzaF9wdHIoY29uc3Qgdm9pZCAqa2V5KQoreworICAgIHJldHVybiAoUHlfdWhhc2hfdClfUHlfSGFzaFBvaW50ZXIoKHZvaWQgKilrZXkpOworfQorCitpbnQKK19QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5KQoreworICAgIHJldHVybiBlbnRyeS0+a2V5ID09IGtleTsKK30KKworLyogbWFrZXMgc3VyZSB0aGUgcmVhbCBzaXplIG9mIHRoZSBidWNrZXRzIGFycmF5IGlzIGEgcG93ZXIgb2YgMiAqLworc3RhdGljIHNpemVfdAorcm91bmRfc2l6ZShzaXplX3QgcykKK3sKKyAgICBzaXplX3QgaTsKKyAgICBpZiAocyA8IEhBU0hUQUJMRV9NSU5fU0laRSkKKyAgICAgICAgcmV0dXJuIEhBU0hUQUJMRV9NSU5fU0laRTsKKyAgICBpID0gMTsKKyAgICB3aGlsZSAoaSA8IHMpCisgICAgICAgIGkgPDw9IDE7CisgICAgcmV0dXJuIGk7Cit9CisKK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX25ld19mdWxsKHNpemVfdCBkYXRhX3NpemUsIHNpemVfdCBpbml0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jIGZyZWVfZGF0YV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYyBnZXRfZGF0YV9zaXplX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgKmFsbG9jYXRvcikKK3sKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0OworICAgIHNpemVfdCBidWNrZXRzX3NpemU7CisgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCBhbGxvYzsKKworICAgIGlmIChhbGxvY2F0b3IgPT0gTlVMTCkgeworICAgICAgICBhbGxvYy5tYWxsb2MgPSBQeU1lbV9SYXdNYWxsb2M7CisgICAgICAgIGFsbG9jLmZyZWUgPSBQeU1lbV9SYXdGcmVlOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGFsbG9jID0gKmFsbG9jYXRvcjsKKworICAgIGh0ID0gKF9QeV9oYXNodGFibGVfdCAqKWFsbG9jLm1hbGxvYyhzaXplb2YoX1B5X2hhc2h0YWJsZV90KSk7CisgICAgaWYgKGh0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBodDsKKworICAgIGh0LT5udW1fYnVja2V0cyA9IHJvdW5kX3NpemUoaW5pdF9zaXplKTsKKyAgICBodC0+ZW50cmllcyA9IDA7CisgICAgaHQtPmRhdGFfc2l6ZSA9IGRhdGFfc2l6ZTsKKworICAgIGJ1Y2tldHNfc2l6ZSA9IGh0LT5udW1fYnVja2V0cyAqIHNpemVvZihodC0+YnVja2V0c1swXSk7CisgICAgaHQtPmJ1Y2tldHMgPSBhbGxvYy5tYWxsb2MoYnVja2V0c19zaXplKTsKKyAgICBpZiAoaHQtPmJ1Y2tldHMgPT0gTlVMTCkgeworICAgICAgICBhbGxvYy5mcmVlKGh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbXNldChodC0+YnVja2V0cywgMCwgYnVja2V0c19zaXplKTsKKworICAgIGh0LT5oYXNoX2Z1bmMgPSBoYXNoX2Z1bmM7CisgICAgaHQtPmNvbXBhcmVfZnVuYyA9IGNvbXBhcmVfZnVuYzsKKyAgICBodC0+Y29weV9kYXRhX2Z1bmMgPSBjb3B5X2RhdGFfZnVuYzsKKyAgICBodC0+ZnJlZV9kYXRhX2Z1bmMgPSBmcmVlX2RhdGFfZnVuYzsKKyAgICBodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jID0gZ2V0X2RhdGFfc2l6ZV9mdW5jOworICAgIGh0LT5hbGxvYyA9IGFsbG9jOworICAgIHJldHVybiBodDsKK30KKworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfbmV3KHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpCit7CisgICAgcmV0dXJuIF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoZGF0YV9zaXplLCBIQVNIVEFCTEVfTUlOX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9mdW5jLCBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK3NpemVfdAorX1B5X2hhc2h0YWJsZV9zaXplKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGh2OworCisgICAgc2l6ZSA9IHNpemVvZihfUHlfaGFzaHRhYmxlX3QpOworCisgICAgLyogYnVja2V0cyAqLworICAgIHNpemUgKz0gaHQtPm51bV9idWNrZXRzICogc2l6ZW9mKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKTsKKworICAgIC8qIGVudHJpZXMgKi8KKyAgICBzaXplICs9IGh0LT5lbnRyaWVzICogSEFTSFRBQkxFX0lURU1fU0laRShodCk7CisKKyAgICAvKiBkYXRhIGxpbmtlZCBmcm9tIGVudHJpZXMgKi8KKyAgICBpZiAoaHQtPmdldF9kYXRhX3NpemVfZnVuYykgeworICAgICAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICAgICAgICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBodik7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICAgICAgdm9pZCAqZGF0YTsKKworICAgICAgICAgICAgICAgIGRhdGEgPSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBzaXplICs9IGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNpemU7Cit9CisKKyNpZmRlZiBQeV9ERUJVRwordm9pZAorX1B5X2hhc2h0YWJsZV9wcmludF9zdGF0cyhfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBzaXplOworICAgIHNpemVfdCBjaGFpbl9sZW4sIG1heF9jaGFpbl9sZW4sIHRvdGFsX2NoYWluX2xlbiwgbmNoYWluczsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworICAgIHNpemVfdCBodjsKKyAgICBkb3VibGUgbG9hZDsKKworICAgIHNpemUgPSBfUHlfaGFzaHRhYmxlX3NpemUoaHQpOworCisgICAgbG9hZCA9IChkb3VibGUpaHQtPmVudHJpZXMgLyBodC0+bnVtX2J1Y2tldHM7CisKKyAgICBtYXhfY2hhaW5fbGVuID0gMDsKKyAgICB0b3RhbF9jaGFpbl9sZW4gPSAwOworICAgIG5jaGFpbnMgPSAwOworICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICBlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNoYWluX2xlbiA9IDA7CisgICAgICAgICAgICBmb3IgKDsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICBjaGFpbl9sZW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGFpbl9sZW4gPiBtYXhfY2hhaW5fbGVuKQorICAgICAgICAgICAgICAgIG1heF9jaGFpbl9sZW4gPSBjaGFpbl9sZW47CisgICAgICAgICAgICB0b3RhbF9jaGFpbl9sZW4gKz0gY2hhaW5fbGVuOworICAgICAgICAgICAgbmNoYWlucysrOworICAgICAgICB9CisgICAgfQorICAgIHByaW50ZigiaGFzaCB0YWJsZSAlcDogZW50cmllcz0lenUvJXp1ICglLjBmJSUpLCAiLAorICAgICAgICAgICBodCwgaHQtPmVudHJpZXMsIGh0LT5udW1fYnVja2V0cywgbG9hZCAqIDEwMC4wKTsKKyAgICBpZiAobmNoYWlucykKKyAgICAgICAgcHJpbnRmKCJhdmdfY2hhaW5fbGVuPSUuMWYsICIsIChkb3VibGUpdG90YWxfY2hhaW5fbGVuIC8gbmNoYWlucyk7CisgICAgcHJpbnRmKCJtYXhfY2hhaW5fbGVuPSV6dSwgJXp1IGtCXG4iLAorICAgICAgICAgICBtYXhfY2hhaW5fbGVuLCBzaXplIC8gMTAyNCk7Cit9CisjZW5kaWYKKworLyogR2V0IGFuIGVudHJ5LiBSZXR1cm4gTlVMTCBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LiAqLworX1B5X2hhc2h0YWJsZV9lbnRyeV90ICoKK19QeV9oYXNodGFibGVfZ2V0X2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50CitfaGFzaHRhYmxlX3BvcF9lbnRyeShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKnByZXZpb3VzOworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaW5kZXgpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5X2hhc2ggPT0ga2V5X2hhc2ggJiYgaHQtPmNvbXBhcmVfZnVuYyhrZXksIGVudHJ5KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcmV2aW91cyA9IGVudHJ5OworICAgIH0KKworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIF9QeV9zbGlzdF9yZW1vdmUoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QgKilwcmV2aW91cywKKyAgICAgICAgICAgICAgICAgICAgIChfUHlfc2xpc3RfaXRlbV90ICopZW50cnkpOworICAgIGh0LT5lbnRyaWVzLS07CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPCBIQVNIVEFCTEVfTE9XKQorICAgICAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKKyAgICByZXR1cm4gMTsKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoLiBUaGUga2V5IG11c3Qgbm90IGJlIHByZXNlbnQgaW4gdGhlIGhhc2ggdGFibGUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBtZW1vcnkgZXJyb3IuICovCitpbnQKK19QeV9oYXNodGFibGVfc2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwgfHwgZGF0YV9zaXplID09IDApOworI2lmbmRlZiBOREVCVUcKKyAgICAvKiBEb24ndCB3cml0ZSB0aGUgYXNzZXJ0aW9uIG9uIGEgc2luZ2xlIGxpbmUgYmVjYXVzZSBpdCBpcyBpbnRlcmVzdGluZworICAgICAgIHRvIGtub3cgdGhlIGR1cGxpY2F0ZWQgZW50cnkgaWYgdGhlIGFzc2VydGlvbiBmYWlsZWQuIFRoZSBlbnRyeSBjYW4KKyAgICAgICBiZSByZWFkIHVzaW5nIGEgZGVidWdnZXIuICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBhc3NlcnQoZW50cnkgPT0gTlVMTCk7CisjZW5kaWYKKworICAgIGtleV9oYXNoID0gaHQtPmhhc2hfZnVuYyhrZXkpOworICAgIGluZGV4ID0ga2V5X2hhc2ggJiAoaHQtPm51bV9idWNrZXRzIC0gMSk7CisKKyAgICBlbnRyeSA9IGh0LT5hbGxvYy5tYWxsb2MoSEFTSFRBQkxFX0lURU1fU0laRShodCkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZW50cnktPmtleSA9ICh2b2lkICopa2V5OworICAgIGVudHJ5LT5rZXlfaGFzaCA9IGtleV9oYXNoOworCisgICAgYXNzZXJ0KGRhdGFfc2l6ZSA9PSBodC0+ZGF0YV9zaXplKTsKKyAgICBtZW1jcHkoX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KSwgZGF0YSwgZGF0YV9zaXplKTsKKworICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tpbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgaHQtPmVudHJpZXMrKzsKKworICAgIGlmICgoZmxvYXQpaHQtPmVudHJpZXMgLyAoZmxvYXQpaHQtPm51bV9idWNrZXRzID4gSEFTSFRBQkxFX0hJR0gpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAwOworfQorCisvKiBHZXQgZGF0YSBmcm9tIGFuIGVudHJ5LiBDb3B5IGVudHJ5IGRhdGEgaW50byBkYXRhIGFuZCByZXR1cm4gMSBpZiB0aGUgZW50cnkKKyAgIGV4aXN0cywgcmV0dXJuIDAgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LiAqLworaW50CitfUHlfaGFzaHRhYmxlX2dldChfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEoaHQsIGRhdGEsIGRhdGFfc2l6ZSwgZW50cnkpOworICAgIHJldHVybiAxOworfQorCitpbnQKK19QeV9oYXNodGFibGVfcG9wKF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBhc3NlcnQoZGF0YSAhPSBOVUxMKTsKKyAgICBhc3NlcnQoaHQtPmZyZWVfZGF0YV9mdW5jID09IE5VTEwpOworICAgIHJldHVybiBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBkYXRhLCBkYXRhX3NpemUpOworfQorCisvKiBEZWxldGUgYW4gZW50cnkuIFRoZSBlbnRyeSBtdXN0IGV4aXN0LiAqLwordm9pZAorX1B5X2hhc2h0YWJsZV9kZWxldGUoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgZm91bmQgPSBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyAgICBhc3NlcnQoZm91bmQpOworI2Vsc2UKKyAgICAodm9pZClfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyNlbmRpZgorfQorCisvKiBQcm90b3R5cGUgZm9yIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3JlYWNoCisgICBrZXkvdmFsdWUgcGFpciBpbiB0aGUgaGFzaCBieSBoYXNodGFibGVfZm9yZWFjaCgpLiAgSXRlcmF0aW9uCisgICBzdG9wcyBpZiBhIG5vbi16ZXJvIHZhbHVlIGlzIHJldHVybmVkLiAqLworaW50CitfUHlfaGFzaHRhYmxlX2ZvcmVhY2goX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKSAoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGludCByZXMgPSBmdW5jKGVudHJ5LCBhcmcpOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGFzaHRhYmxlX3JlaGFzaChfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBidWNrZXRzX3NpemUsIG5ld19zaXplLCBidWNrZXQ7CisgICAgX1B5X3NsaXN0X3QgKm9sZF9idWNrZXRzID0gTlVMTDsKKyAgICBzaXplX3Qgb2xkX251bV9idWNrZXRzOworCisgICAgbmV3X3NpemUgPSByb3VuZF9zaXplKChzaXplX3QpKGh0LT5lbnRyaWVzICogSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IpKTsKKyAgICBpZiAobmV3X3NpemUgPT0gaHQtPm51bV9idWNrZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBvbGRfbnVtX2J1Y2tldHMgPSBodC0+bnVtX2J1Y2tldHM7CisKKyAgICBidWNrZXRzX3NpemUgPSBuZXdfc2l6ZSAqIHNpemVvZihodC0+YnVja2V0c1swXSk7CisgICAgb2xkX2J1Y2tldHMgPSBodC0+YnVja2V0czsKKyAgICBodC0+YnVja2V0cyA9IGh0LT5hbGxvYy5tYWxsb2MoYnVja2V0c19zaXplKTsKKyAgICBpZiAoaHQtPmJ1Y2tldHMgPT0gTlVMTCkgeworICAgICAgICAvKiBjYW5jZWwgcmVoYXNoIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKyAgICAgICAgaHQtPmJ1Y2tldHMgPSBvbGRfYnVja2V0cyA7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1lbXNldChodC0+YnVja2V0cywgMCwgYnVja2V0c19zaXplKTsKKworICAgIGh0LT5udW1fYnVja2V0cyA9IG5ld19zaXplOworCisgICAgZm9yIChidWNrZXQgPSAwOyBidWNrZXQgPCBvbGRfbnVtX2J1Y2tldHM7IGJ1Y2tldCsrKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgICAgICBmb3IgKGVudHJ5ID0gQlVDS0VUU19IRUFEKG9sZF9idWNrZXRzW2J1Y2tldF0pOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIHNpemVfdCBlbnRyeV9pbmRleDsKKworICAgICAgICAgICAgYXNzZXJ0KGh0LT5oYXNoX2Z1bmMoZW50cnktPmtleSkgPT0gZW50cnktPmtleV9oYXNoKTsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5X2luZGV4ID0gZW50cnktPmtleV9oYXNoICYgKG5ld19zaXplIC0gMSk7CisKKyAgICAgICAgICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tlbnRyeV9pbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShvbGRfYnVja2V0cyk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqbmV4dDsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaT0wOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGkpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBfUHlfc2xpc3RfaW5pdCgmaHQtPmJ1Y2tldHNbaV0pOworICAgIH0KKyAgICBodC0+ZW50cmllcyA9IDA7CisgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGh0LT5udW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5ID0gaHQtPmJ1Y2tldHNbaV0uaGVhZDsKKyAgICAgICAgd2hpbGUgKGVudHJ5KSB7CisgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICplbnRyeV9uZXh0ID0gZW50cnktPm5leHQ7CisgICAgICAgICAgICBpZiAoaHQtPmZyZWVfZGF0YV9mdW5jKQorICAgICAgICAgICAgICAgIGh0LT5mcmVlX2RhdGFfZnVuYyhfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KSk7CisgICAgICAgICAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisgICAgICAgICAgICBlbnRyeSA9IGVudHJ5X25leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShodC0+YnVja2V0cyk7CisgICAgaHQtPmFsbG9jLmZyZWUoaHQpOworfQorCisvKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIHRhYmxlICovCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9jb3B5KF9QeV9oYXNodGFibGVfdCAqc3JjKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqZHN0OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGJ1Y2tldDsKKyAgICBpbnQgZXJyOworICAgIHZvaWQgKmRhdGEsICpuZXdfZGF0YTsKKworICAgIGRzdCA9IF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoc3JjLT5kYXRhX3NpemUsIHNyYy0+bnVtX2J1Y2tldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5oYXNoX2Z1bmMsIHNyYy0+Y29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy0+Y29weV9kYXRhX2Z1bmMsIHNyYy0+ZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5nZXRfZGF0YV9zaXplX2Z1bmMsICZzcmMtPmFsbG9jKTsKKyAgICBpZiAoZHN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChidWNrZXQ9MDsgYnVja2V0IDwgc3JjLT5udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgZW50cnkgPSBUQUJMRV9IRUFEKHNyYywgYnVja2V0KTsKKyAgICAgICAgZm9yICg7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICBpZiAoc3JjLT5jb3B5X2RhdGFfZnVuYykgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBuZXdfZGF0YSA9IHNyYy0+Y29weV9kYXRhX2Z1bmMoZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld19kYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2RhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVyciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBlcnIgPSBfUHlfaGFzaHRhYmxlX3NldChkc3QsIGVudHJ5LT5rZXksIGRhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZHN0OworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5oIGIvTW9kdWxlcy9oYXNodGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzllNDkwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuaApAQCAtMCwwICsxLDEyOCBAQAorI2lmbmRlZiBQeV9IQVNIVEFCTEVfSAorI2RlZmluZSBQeV9IQVNIVEFCTEVfSAorCisvKiBUaGUgd2hvbGUgQVBJIGlzIHByaXZhdGUgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKwordHlwZWRlZiBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyB7CisgICAgc3RydWN0IF9QeV9zbGlzdF9pdGVtX3MgKm5leHQ7Cit9IF9QeV9zbGlzdF9pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfUHlfc2xpc3RfaXRlbV90ICpoZWFkOworfSBfUHlfc2xpc3RfdDsKKworI2RlZmluZSBfUHlfU0xJU1RfSVRFTV9ORVhUKElURU0pICgoKF9QeV9zbGlzdF9pdGVtX3QgKilJVEVNKS0+bmV4dCkKKworI2RlZmluZSBfUHlfU0xJU1RfSEVBRChTTElTVCkgKCgoX1B5X3NsaXN0X3QgKilTTElTVCktPmhlYWQpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VkIGJ5IF9QeV9oYXNodGFibGVfdC5idWNrZXRzIHRvIGxpbmsgZW50cmllcyAqLworICAgIF9QeV9zbGlzdF9pdGVtX3QgX1B5X3NsaXN0X2l0ZW07CisKKyAgICBjb25zdCB2b2lkICprZXk7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKworICAgIC8qIGRhdGEgZm9sbG93cyAqLworfSBfUHlfaGFzaHRhYmxlX2VudHJ5X3Q7CisKKyNkZWZpbmUgX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSBcCisgICAgICAgICgoY2hhciAqKShFTlRSWSkgKyBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90KSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKEVOVFJZKSBcCisgICAgICAgICgqKHZvaWQgKiopX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShUQUJMRSwgREFUQSwgREFUQV9TSVpFLCBFTlRSWSkgXAorICAgIGRvIHsgXAorICAgICAgICBhc3NlcnQoKERBVEFfU0laRSkgPT0gKFRBQkxFKS0+ZGF0YV9zaXplKTsgXAorICAgICAgICBtZW1jcHkoREFUQSwgX1BZX0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSwgREFUQV9TSVpFKTsgXAorICAgIH0gd2hpbGUgKDApCisKK3R5cGVkZWYgUHlfdWhhc2hfdCAoKl9QeV9oYXNodGFibGVfaGFzaF9mdW5jKSAoY29uc3Qgdm9pZCAqa2V5KTsKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMpIChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpOwordHlwZWRlZiB2b2lkKiAoKl9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMpKHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkICgqX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHNpemVfdCAoKl9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jKSh2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpIChzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiByZWxlYXNlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpwdHIpOworfSBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2l6ZV90IG51bV9idWNrZXRzOworICAgIHNpemVfdCBlbnRyaWVzOyAvKiBUb3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUuICovCisgICAgX1B5X3NsaXN0X3QgKmJ1Y2tldHM7CisgICAgc2l6ZV90IGRhdGFfc2l6ZTsKKworICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jIGZyZWVfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworfSBfUHlfaGFzaHRhYmxlX3Q7CisKKy8qIGhhc2ggYW5kIGNvbXBhcmUgZnVuY3Rpb25zIGZvciBpbnRlZ2VycyBhbmQgcG9pbnRlcnMgKi8KK1B5QVBJX0ZVTkMoUHlfdWhhc2hfdCkgX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfaW50KGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpOworCitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ldygKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpOworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX3QgKikgX1B5X2hhc2h0YWJsZV9uZXdfZnVsbCgKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIHNpemVfdCBpbml0X3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgKmFsbG9jYXRvcik7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2NsZWFyKF9QeV9oYXNodGFibGVfdCAqaHQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMgZnVuYywgdm9pZCAqYXJnKTsKK1B5QVBJX0ZVTkMoc2l6ZV90KSBfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV9lbnRyeV90KikgX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfc2V0KAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9nZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX3BvcCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2RlbGV0ZSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9TRVQoVEFCTEUsIEtFWSwgREFUQSkgXAorICAgIF9QeV9oYXNodGFibGVfc2V0KFRBQkxFLCBLRVksICYoREFUQSksIHNpemVvZihEQVRBKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0dFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9nZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZW5kaWYgICAvKiBQeV9MSU1JVEVEX0FQSSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IDAxMjMxODEuLjhiZTYyY2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICppdDsKLSAgICBpbnQgbnVtcmVhZDsKKyAgICBpbnQgbnVtcmVhZDsgIC8qIDAgPD0gbnVtcmVhZCA8PSBMSU5LQ0VMTFMgKi8KICAgICBQeU9iamVjdCAqbmV4dGxpbms7CiAgICAgUHlPYmplY3QgKih2YWx1ZXNbTElOS0NFTExTXSk7CiB9IHRlZWRhdGFvYmplY3Q7CkBAIC00MDksNyArNDA5LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgdGVlZGF0YW9iamVjdCAqZGF0YW9iajsKLSAgICBpbnQgaW5kZXg7CisgICAgaW50IGluZGV4OyAgICAvKiAwIDw9IGluZGV4IDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gdGVlb2JqZWN0OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IDNjZmM5YzMuLjkxNzEwNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC0yMiwxNSArMjIsMTEgQEAKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKSkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+XFxsaWIiCiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9MaWIiCi0jZWxzZQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD4vcHl0aG9uWC5YIgogI2VuZGlmCi0jZW5kaWYKIAogI2luY2x1ZGUgInB5Z2V0b3B0LmgiCiAKQEAgLTQ3LDcgKzQzLDcgQEAKIHN0YXRpYyBpbnQgIG9yaWdfYXJnYzsKIAogLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KLSNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlKbTpPcVJzU3R1dlZXOnhYOj8iCisjZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk9xUnNTdHV2Vlc6eFg6PyIKIAogI2RlZmluZSBQUk9HUkFNX09QVFMgQkFTRV9PUFRTCiAKQEAgLTY5LDYgKzY1LDcgQEAKIHN0YXRpYyBjaGFyICp1c2FnZV8yID0gIlwKIC1pICAgICA6IGluc3BlY3QgaW50ZXJhY3RpdmVseSBhZnRlciBydW5uaW5nIHNjcmlwdDsgZm9yY2VzIGEgcHJvbXB0IGV2ZW5cblwKICAgICAgICAgIGlmIHN0ZGluIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHRlcm1pbmFsOyBhbHNvIFBZVEhPTklOU1BFQ1Q9eFxuXAorLUkgICAgIDogaXNvbGF0ZSBQeXRob24gZnJvbSB0aGUgdXNlcidzIGVudmlyb25tZW50IChpbXBsaWVzIC1FIGFuZCAtcylcblwKIC1tIG1vZCA6IHJ1biBsaWJyYXJ5IG1vZHVsZSBhcyBhIHNjcmlwdCAodGVybWluYXRlcyBvcHRpb24gbGlzdClcblwKIC1PICAgICA6IG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSBzbGlnaHRseTsgYWxzbyBQWVRIT05PUFRJTUlaRT14XG5cCiAtT08gICAgOiByZW1vdmUgZG9jLXN0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIC1PIG9wdGltaXphdGlvbnNcblwKQEAgLTE0Niw3ICsxNDMsNyBAQAogewogICAgIGNoYXIgKnN0YXJ0dXAgPSBQeV9HRVRFTlYoIlBZVEhPTlNUQVJUVVAiKTsKICAgICBpZiAoc3RhcnR1cCAhPSBOVUxMICYmIHN0YXJ0dXBbMF0gIT0gJ1wwJykgewotICAgICAgICBGSUxFICpmcCA9IGZvcGVuKHN0YXJ0dXAsICJyIik7CisgICAgICAgIEZJTEUgKmZwID0gX1B5X2ZvcGVuKHN0YXJ0dXAsICJyIik7CiAgICAgICAgIGlmIChmcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAodm9pZCkgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoZnAsIHN0YXJ0dXAsIDAsIGNmKTsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0xNjUsNiArMTYyLDMyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBSdW5JbnRlcmFjdGl2ZUhvb2sodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqc3lzLCAqaG9vaywgKnJlc3VsdDsKKyAgICBzeXMgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInN5cyIpOworICAgIGlmIChzeXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzeXMsICJfX2ludGVyYWN0aXZlaG9va19fIik7CisgICAgUHlfREVDUkVGKHN5cyk7CisgICAgaWYgKGhvb2sgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChob29rLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGhvb2spOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuOworCitlcnJvcjoKKyAgICBQeVN5c19Xcml0ZVN0ZGVycigiRmFpbGVkIGNhbGxpbmcgc3lzLl9faW50ZXJhY3RpdmVob29rX19cbiIpOworICAgIFB5RXJyX1ByaW50KCk7CisgICAgUHlFcnJfQ2xlYXIoKTsKK30KKwogCiBzdGF0aWMgaW50IFJ1bk1vZHVsZSh3Y2hhcl90ICptb2RuYW1lLCBpbnQgc2V0X2FyZ3YwKQogewpAQCAtMTcyLDE3ICsxOTUsMjAgQEAKICAgICBydW5weSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgicnVucHkiKTsKICAgICBpZiAocnVucHkgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBpbXBvcnQgcnVucHkgbW9kdWxlXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBydW5tb2R1bGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHJ1bnB5LCAiX3J1bl9tb2R1bGVfYXNfbWFpbiIpOwogICAgIGlmIChydW5tb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhY2Nlc3MgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb2RuYW1lLCB3Y3NsZW4obW9kbmFtZSkpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IG1vZHVsZSBuYW1lIHRvIHVuaWNvZGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9ERUNSRUYocnVucHkpOwogICAgICAgICBQeV9ERUNSRUYocnVubW9kdWxlKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTkxLDYgKzIxNyw3IEBACiAgICAgaWYgKHJ1bmFyZ3MgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGFyZ3VtZW50cyBmb3IgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKQEAgLTIzNSw4ICsyNjIsMTAgQEAKICAgICAvKiBhcmd2MCBpcyB1c2FibGUgYXMgYW4gaW1wb3J0IHNvdXJjZSwgc28gcHV0IGl0IGluIHN5cy5wYXRoWzBdCiAgICAgICAgYW5kIGltcG9ydCBfX21haW5fXyAqLwogICAgIHN5c19wYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7Ci0gICAgaWYgKHN5c19wYXRoID09IE5VTEwpCisgICAgaWYgKHN5c19wYXRoID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnBhdGgiKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKHN5c19wYXRoLCAwLCBhcmd2MCkpIHsKICAgICAgICAgYXJndjAgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzY2LDcgKzM5NSw3IEBACiAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGludGVycHJldC4gKi8KIAogICAgICAgICAgICAgbGVuID0gd2NzbGVuKF9QeU9TX29wdGFyZykgKyAxICsgMTsKLSAgICAgICAgICAgIGNvbW1hbmQgPSAod2NoYXJfdCAqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBsZW4pOworICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CiAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgLWMgYXJndW1lbnQiKTsKQEAgLTM5OCw2ICs0MjcsMTIgQEAKICAgICAgICAgICAgIFB5X0ludGVyYWN0aXZlRmxhZysrOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICBQeV9Jc29sYXRlZEZsYWcrKzsKKyAgICAgICAgICAgIFB5X05vVXNlclNpdGVEaXJlY3RvcnkrKzsKKyAgICAgICAgICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZysrOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgLyogY2FzZSAnSic6IHJlc2VydmVkIGZvciBKeXRob24gKi8KIAogICAgICAgICBjYXNlICdPJzoKQEAgLTQ3NSw3ICs1MTAsNyBAQAogICAgICAgICByZXR1cm4gdXNhZ2UoMCwgYXJndlswXSk7CiAKICAgICBpZiAodmVyc2lvbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlc1xuIiwgUFlfVkVSU0lPTik7CisgICAgICAgIHByaW50ZigiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00OTUsNyArNTMwLDcgQEAKICAgICAgICAgKndwICE9IEwnXDAnKSB7CiAgICAgICAgIHdjaGFyX3QgKmJ1ZiwgKndhcm5pbmc7CiAKLSAgICAgICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKCh3Y3NsZW4od3ApICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKQEAgLTUwNSw3ICs1NDAsNyBAQAogICAgICAgICAgICAgIHdhcm5pbmcgPSB3Y3N0b2soTlVMTCwgTCIsIikpIHsKICAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24od2FybmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTldBUk5JTkdTIikpICYmICpwICE9ICdcMCcpIHsKQEAgLTUxNCwxMiArNTQ5LDEyIEBACiAKICAgICAgICAgLyogc2V0dGxlIGZvciBzdHJ0b2sgaGVyZSBhcyB0aGVyZSdzIG5vIG9uZSBzdGFuZGFyZAogICAgICAgICAgICBDODkgd2NzdG9rICovCi0gICAgICAgIGJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihwKSArIDEpOworICAgICAgICBidWYgPSAoY2hhciAqKVB5TWVtX1Jhd01hbGxvYyhzdHJsZW4ocCkgKyAxKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CiAgICAgICAgIHN0cmNweShidWYsIHApOwotICAgICAgICBvbGRsb2MgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgICAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgICAgICBmb3IgKHAgPSBzdHJ0b2soYnVmLCAiLCIpOyBwICE9IE5VTEw7IHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgewogI2lmZGVmIF9fQVBQTEVfXwpAQCAtNTM3LDggKzU3Miw4IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIH0KICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKLSAgICAgICAgZnJlZShvbGRsb2MpOwotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02MDgsNyArNjQzLDcgQEAKICAgICAgICAgd2NoYXJfdCogYnVmZmVyOwogICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHApICsgMTsKIAotICAgICAgICBidWZmZXIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmZmVyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTkVYRUNVVEFCTEUiKTsKQEAgLTY4Miw3ICs3MTcsNyBAQAogCiAgICAgaWYgKGNvbW1hbmQpIHsKICAgICAgICAgc3RzID0gcnVuX2NvbW1hbmQoY29tbWFuZCwgJmNmKTsKLSAgICAgICAgZnJlZShjb21tYW5kKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShjb21tYW5kKTsKICAgICB9IGVsc2UgaWYgKG1vZHVsZSkgewogICAgICAgICBzdHMgPSAoUnVuTW9kdWxlKG1vZHVsZSwgMSkgIT0gMCk7CiAgICAgfQpAQCAtNjkxLDYgKzcyNiw3IEBACiAgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMICYmIHN0ZGluX2lzX2ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7IC8qIGRvIGV4aXQgb24gU3lzdGVtRXhpdCAqLwogICAgICAgICAgICAgUnVuU3RhcnR1cEZpbGUoJmNmKTsKKyAgICAgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICB9CiAgICAgICAgIC8qIFhYWCAqLwogCkBAIC03NTYsNiArNzkyLDcgQEAKICAgICBpZiAoUHlfSW5zcGVjdEZsYWcgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUgJiYKICAgICAgICAgKGZpbGVuYW1lICE9IE5VTEwgfHwgY29tbWFuZCAhPSBOVUxMIHx8IG1vZHVsZSAhPSBOVUxMKSkgewogICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7CisgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICAvKiBYWFggKi8KICAgICAgICAgc3RzID0gUHlSdW5fQW55RmlsZUZsYWdzKHN0ZGluLCAiPHN0ZGluPiIsICZjZikgIT0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21kNW1vZHVsZS5jIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwppbmRleCAxMmUxODdjLi41Y2IzZDM2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21kNW1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKQEAgLTkxLDEwICs5MSw2IEBACiAgICAgICAgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgXAogICAgICAgICh5KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbMF0gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KIAotI2lmbmRlZiBNSU4KLSAgICNkZWZpbmUgTUlOKHgsIHkpICggKCh4KTwoeSkpPyh4KTooeSkgKQotI2VuZGlmCi0KIAogLyogTUQ1IG1hY3JvcyAqLwogCkBAIC0yNDQsOSArMjQwLDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gTUQ1X0JMT0NLU0laRTsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gTUQ1X0JMT0NLU0laRTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgbiA9IE1JTihpbmxlbiwgKFB5X3NzaXplX3QpKE1ENV9CTE9DS1NJWkUgLSBtZDUtPmN1cmxlbikpOworICAgICAgICAgICBuID0gUHlfTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShtZDUtPmJ1ZiArIG1kNS0+Y3VybGVuLCBpbiwgKHNpemVfdCluKTsKLSAgICAgICAgICAgbWQ1LT5jdXJsZW4gICAgKz0gbjsKKyAgICAgICAgICAgbWQ1LT5jdXJsZW4gICAgKz0gKE1ENV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAobWQ1LT5jdXJsZW4gPT0gTUQ1X0JMT0NLU0laRSkgewpAQCAtNDQzLDcgKzQzOSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogTUQ1X2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIk1ENSIsIDMpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIm1kNSIsIDMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTc2LDggKzU3MiwxNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fbWQ1KHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZNRDV0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZNRDV0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9tZDVtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiTUQ1VHlwZSIsIChQeU9iamVjdCAqKSZNRDV0eXBlKTsKKyAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbW1hcG1vZHVsZS5jIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKaW5kZXggMTEwN2ViOC4uMzY2ZGFjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSA8UHl0aG9uLmg+CisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpZm5kZWYgTVNfV0lORE9XUwogI2RlZmluZSBVTklYCkBAIC0xMDgsNiArMTA5LDcgQEAKICAgICBpbnQgZmQ7CiAjZW5kaWYKIAorICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBhY2Nlc3NfbW9kZSBhY2Nlc3M7CiB9IG1tYXBfb2JqZWN0OwogCkBAIC0xMzQsNiArMTM2LDggQEAKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwogCisgICAgaWYgKG1fb2JqLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtX29iaik7CiAgICAgUHlfVFlQRShtX29iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KiltX29iaik7CiB9CiAKQEAgLTEwMzIsNyArMTAzNiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKG1tYXBfb2JqZWN0LCB3ZWFrcmVmbGlzdCksICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgbW1hcF9vYmplY3RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC0xMTkwLDYgKzExOTQsNyBAQAogICAgIG1fb2JqLT5kYXRhID0gTlVMTDsKICAgICBtX29iai0+c2l6ZSA9IChzaXplX3QpIG1hcF9zaXplOwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOworICAgIG1fb2JqLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgbV9vYmotPmV4cG9ydHMgPSAwOwogICAgIG1fb2JqLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKGZkID09IC0xKSB7CkBAIC0xMjAzLDE4ICsxMjA4LDE4IEBACiAgICAgICAgIGZsYWdzIHw9IE1BUF9BTk9OWU1PVVM7CiAjZWxzZQogICAgICAgICAvKiBTVlI0IG1ldGhvZCB0byBtYXAgYW5vbnltb3VzIG1lbW9yeSBpcyB0byBvcGVuIC9kZXYvemVybyAqLwotICAgICAgICBmZCA9IGRldnplcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworICAgICAgICBmZCA9IGRldnplcm8gPSBfUHlfb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKICAgICAgICAgaWYgKGRldnplcm8gPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9vYmotPmZkID0gZHVwKGZkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1fb2JqLT5mZCA9IF9QeV9kdXAoZmQpOwogICAgICAgICBpZiAobV9vYmotPmZkID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzk0LDYgKzEzOTksNyBAQAogICAgIC8qIHNldCB0aGUgaW5pdGlhbCBwb3NpdGlvbiAqLwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOwogCisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgLyogc2V0IHRoZSB0YWcgbmFtZSAqLwogICAgIGlmICh0YWduYW1lICE9IE5VTEwgJiYgKnRhZ25hbWUgIT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCmluZGV4IDUwZTI2NmYuLmIwYTE2ZGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYworKysgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKQEAgLTExNSw3ICsxMTUsOSBAQAogICAgICAgIG9uZSBvcGVuIGF0IGEgdGltZS4gIFRoaXMgZG9lcyAqbm90KiBhZmZlY3QgbGF0ZXIgSS9POyBPU1MKICAgICAgICBwcm92aWRlcyBhIHNwZWNpYWwgaW9jdGwoKSBmb3Igbm9uLWJsb2NraW5nIHJlYWQvd3JpdGUsIHdoaWNoIGlzCiAgICAgICAgZXhwb3NlZCB2aWEgb3NzX25vbmJsb2NrKCkgYmVsb3cuICovCi0gICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlbmFtZSwgaW1vZGV8T19OT05CTE9DSykpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKTsKKworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE3Nyw3ICsxNzksOCBAQAogICAgICAgICAgICAgZGV2aWNlbmFtZSA9ICIvZGV2L21peGVyIjsKICAgICB9CiAKLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpKSA9PSAtMSkgeworICAgIGZkID0gX1B5X29wZW4oZGV2aWNlbmFtZSwgT19SRFdSKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGRldmljZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDUsNyArMjQ4LDcgQEAKICAgICBpbnQgYXJnOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI3MCw3ICsyNzMsNyBAQAogICAgIGludCBhcmcgPSAwOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5MCw3ICsyOTMsNyBAQAogICAgIGludCBydjsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL292ZXJsYXBwZWQuYyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWM3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL292ZXJsYXBwZWQuYwpAQCAtMCwwICsxLDEzNzggQEAKKy8qCisgKiBTdXBwb3J0IGZvciBvdmVybGFwcGVkIElPCisgKgorICogU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gTW9kdWxlcy9fd2luYXBpLmMgb2YgQ1B5dGhvbgorICovCisKKy8qIFhYWCBjaGVjayBvdmVyZmxvdyBhbmQgRFdPUkQgPC0+IFB5X3NzaXplX3QgY29udmVyc2lvbnMKKyAgIENoZWNrIGl0ZW1zaXplICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKworI2RlZmluZSBXSU5ET1dTX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSA8bXN3c29jay5oPgorCisjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCisjICBkZWZpbmUgRl9QT0lOVEVSICJrIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HCisjZWxzZQorIyAgZGVmaW5lIEZfUE9JTlRFUiAiSyIKKyMgIGRlZmluZSBUX1BPSU5URVIgVF9VTE9OR0xPTkcKKyNlbmRpZgorCisjZGVmaW5lIEZfSEFORExFIEZfUE9JTlRFUgorI2RlZmluZSBGX1VMT05HX1BUUiBGX1BPSU5URVIKKyNkZWZpbmUgRl9EV09SRCAiayIKKyNkZWZpbmUgRl9CT09MICJpIgorI2RlZmluZSBGX1VJTlQgIkkiCisKKyNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCisKK2VudW0ge1RZUEVfTk9ORSwgVFlQRV9OT1RfU1RBUlRFRCwgVFlQRV9SRUFELCBUWVBFX1dSSVRFLCBUWVBFX0FDQ0VQVCwKKyAgICAgIFRZUEVfQ09OTkVDVCwgVFlQRV9ESVNDT05ORUNULCBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRSwKKyAgICAgIFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBPVkVSTEFQUEVEIG92ZXJsYXBwZWQ7CisgICAgLyogRm9yIGNvbnZlbmllbmNlLCB3ZSBzdG9yZSB0aGUgZmlsZSBoYW5kbGUgdG9vICovCisgICAgSEFORExFIGhhbmRsZTsKKyAgICAvKiBFcnJvciByZXR1cm5lZCBieSBsYXN0IG1ldGhvZCBjYWxsICovCisgICAgRFdPUkQgZXJyb3I7CisgICAgLyogVHlwZSBvZiBvcGVyYXRpb24gKi8KKyAgICBEV09SRCB0eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHJlYWRpbmcgKG9wdGlvbmFsKSAqLworICAgICAgICBQeU9iamVjdCAqcmVhZF9idWZmZXI7CisgICAgICAgIC8qIEJ1ZmZlciB1c2VkIGZvciB3cml0aW5nIChvcHRpb25hbCkgKi8KKyAgICAgICAgUHlfYnVmZmVyIHdyaXRlX2J1ZmZlcjsKKyAgICB9OworfSBPdmVybGFwcGVkT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBIQU5ETEUgSW9jcEhhbmRsZTsKKyAgICBjaGFyIEFkZHJlc3NbMV07Cit9IFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dDsKKworLyoKKyAqIE1hcCBXaW5kb3dzIGVycm9yIGNvZGVzIHRvIHN1YmNsYXNzZXMgb2YgT1NFcnJvcgorICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitTZXRGcm9tV2luZG93c0VycihEV09SRCBlcnIpCit7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbl90eXBlOworCisgICAgaWYgKGVyciA9PSAwKQorICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvblJlZnVzZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvbkFib3J0ZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19PU0Vycm9yOworICAgIH0KKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoZXhjZXB0aW9uX3R5cGUsIGVycik7Cit9CisKKy8qCisgKiBTb21lIGZ1bmN0aW9ucyBzaG91bGQgYmUgbG9hZGVkIGF0IHJ1bnRpbWUKKyAqLworCitzdGF0aWMgTFBGTl9BQ0NFUFRFWCBQeV9BY2NlcHRFeCA9IE5VTEw7CitzdGF0aWMgTFBGTl9DT05ORUNURVggUHlfQ29ubmVjdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0RJU0NPTk5FQ1RFWCBQeV9EaXNjb25uZWN0RXggPSBOVUxMOworc3RhdGljIEJPT0wgKENBTExCQUNLICpQeV9DYW5jZWxJb0V4KShIQU5ETEUsIExQT1ZFUkxBUFBFRCkgPSBOVUxMOworCisjZGVmaW5lIEdFVF9XU0FfUE9JTlRFUihzLCB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFNPQ0tFVF9FUlJPUiAhPSBXU0FJb2N0bChzLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3VpZCMjeCwgc2l6ZW9mKEd1aWQjI3gpLCAmUHlfIyN4LCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUHlfIyN4KSwgJmR3Qnl0ZXMsIE5VTEwsIE5VTEwpKQorCitzdGF0aWMgaW50Citpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKHZvaWQpCit7CisgICAgR1VJRCBHdWlkQWNjZXB0RXggPSBXU0FJRF9BQ0NFUFRFWDsKKyAgICBHVUlEIEd1aWRDb25uZWN0RXggPSBXU0FJRF9DT05ORUNURVg7CisgICAgR1VJRCBHdWlkRGlzY29ubmVjdEV4ID0gV1NBSURfRElTQ09OTkVDVEVYOworICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CisgICAgU09DS0VUIHM7CisgICAgRFdPUkQgZHdCeXRlczsKKworICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTsKKyAgICBpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdFVF9XU0FfUE9JTlRFUihzLCBBY2NlcHRFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBDb25uZWN0RXgpIHx8CisgICAgICAgICFHRVRfV1NBX1BPSU5URVIocywgRGlzY29ubmVjdEV4KSkKKyAgICB7CisgICAgICAgIGNsb3Nlc29ja2V0KHMpOworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjbG9zZXNvY2tldChzKTsKKworICAgIC8qIE9uIFdpblhQIHdlIHdpbGwgaGF2ZSBQeV9DYW5jZWxJb0V4ID09IE5VTEwgKi8KKyAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyIik7CisgICAgKihGQVJQUk9DICopJlB5X0NhbmNlbElvRXggPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJDYW5jZWxJb0V4Iik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21wbGV0aW9uIHBvcnQgc3R1ZmYKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlSW9Db21wbGV0aW9uUG9ydF9kb2MsCisgICAgIkNyZWF0ZUlvQ29tcGxldGlvblBvcnQoaGFuZGxlLCBwb3J0LCBrZXksIGNvbmN1cnJlbmN5KSAtPiBwb3J0XG5cbiIKKyAgICAiQ3JlYXRlIGEgY29tcGxldGlvbiBwb3J0IG9yIHJlZ2lzdGVyIGEgaGFuZGxlIHdpdGggYSBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgRmlsZUhhbmRsZTsKKyAgICBIQU5ETEUgRXhpc3RpbmdDb21wbGV0aW9uUG9ydDsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBEV09SRCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzOworICAgIEhBTkRMRSByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUgRl9VTE9OR19QVFIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVIYW5kbGUsICZFeGlzdGluZ0NvbXBsZXRpb25Qb3J0LCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk51bWJlck9mQ29uY3VycmVudFRocmVhZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KEZpbGVIYW5kbGUsIEV4aXN0aW5nQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIHJldCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvYywKKyAgICAiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBtc2VjcykgLT4gKGVyciwgYnl0ZXMsIGtleSwgYWRkcmVzcylcblxuIgorICAgICJHZXQgYSBtZXNzYWdlIGZyb20gY29tcGxldGlvbiBwb3J0LiAgV2FpdCBmb3IgdXAgdG8gbXNlY3MgbWlsbGlzZWNvbmRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQgPSBOVUxMOworICAgIERXT1JEIE51bWJlck9mQnl0ZXMgPSAwOworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5ID0gMDsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkID0gTlVMTDsKKyAgICBEV09SRCBNaWxsaXNlY29uZHM7CisgICAgRFdPUkQgZXJyOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uUG9ydCwgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25LZXksICZPdmVybGFwcGVkLCBNaWxsaXNlY29uZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgaWYgKE92ZXJsYXBwZWQgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJyID09IFdBSVRfVElNRU9VVCkKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9EV09SRCBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXksIE92ZXJsYXBwZWQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBieXRlcywga2V5LCBhZGRyZXNzKSAtPiBOb25lXG5cbiIKKyAgICAiUG9zdCBhIG1lc3NhZ2UgdG8gY29tcGxldGlvbiBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9Qb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0OworICAgIERXT1JEIE51bWJlck9mQnl0ZXM7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXk7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTnVtYmVyT2ZCeXRlcywgJkNvbXBsZXRpb25LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZPdmVybGFwcGVkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsIE51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIGhhbmRsZQorICovCisKK3N0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIHsKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgTFBPVkVSTEFQUEVEIE92ZXJsYXBwZWQ7Cit9OworCitzdGF0aWMgVk9JRCBDQUxMQkFDSworUG9zdFRvUXVldWVDYWxsYmFjayhQVk9JRCBscFBhcmFtZXRlciwgQk9PTCBUaW1lck9yV2FpdEZpcmVkKQoreworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhICpwID0gKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKikgbHBQYXJhbWV0ZXI7CisKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwLT5Db21wbGV0aW9uUG9ydCwgVGltZXJPcldhaXRGaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwLT5PdmVybGFwcGVkKTsKKyAgICAvKiBpZ25vcmUgcG9zc2libGUgZXJyb3IhICovCisgICAgUHlNZW1fRnJlZShwKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlZ2lzdGVyV2FpdFdpdGhRdWV1ZV9kb2MsCisgICAgIlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZShPYmplY3QsIENvbXBsZXRpb25Qb3J0LCBPdmVybGFwcGVkLCBUaW1lb3V0KVxuIgorICAgICIgICAgLT4gV2FpdEhhbmRsZVxuXG4iCisgICAgIlJlZ2lzdGVyIHdhaXQgZm9yIE9iamVjdDsgd2hlbiBjb21wbGV0ZSBDb21wbGV0aW9uUG9ydCBpcyBub3RpZmllZC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBOZXdXYWl0T2JqZWN0OworICAgIEhBTkRMRSBPYmplY3Q7CisgICAgVUxPTkcgTWlsbGlzZWNvbmRzOworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIGRhdGEsICpwZGF0YTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1BPSU5URVIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLk92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZNaWxsaXNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBkYXRhID0gUHlNZW1fTWFsbG9jKHNpemVvZihzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSkpOworICAgIGlmIChwZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisKKyAgICAqcGRhdGEgPSBkYXRhOworCisgICAgaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICAmTmV3V2FpdE9iamVjdCwgT2JqZWN0LCAoV0FJVE9SVElNRVJDQUxMQkFDSylQb3N0VG9RdWV1ZUNhbGxiYWNrLAorICAgICAgICAgICAgcGRhdGEsIE1pbGxpc2Vjb25kcywKKyAgICAgICAgICAgIFdUX0VYRUNVVEVJTldBSVRUSFJFQUQgfCBXVF9FWEVDVVRFT05MWU9OQ0UpKQorICAgIHsKKyAgICAgICAgUHlNZW1fRnJlZShwZGF0YSk7CisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgTmV3V2FpdE9iamVjdCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBVbnJlZ2lzdGVyV2FpdF9kb2MsCisgICAgIlVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJVbnJlZ2lzdGVyIHdhaXQgaGFuZGxlLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgV2FpdEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJldhaXRIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBVbnJlZ2lzdGVyV2FpdChXYWl0SGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIEV2ZW50IGZ1bmN0aW9ucyAtLSBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRlc3RzCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIENyZWF0ZUV2ZW50X2RvYywKKyAgICAiQ3JlYXRlRXZlbnQoRXZlbnRBdHRyaWJ1dGVzLCBNYW51YWxSZXNldCwgSW5pdGlhbFN0YXRlLCBOYW1lKSIKKyAgICAiIC0+IEhhbmRsZVxuXG4iCisgICAgIkNyZWF0ZSBhbiBldmVudC4gIEV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQ3JlYXRlRXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpFdmVudEF0dHJpYnV0ZXM7CisgICAgQk9PTCBNYW51YWxSZXNldDsKKyAgICBCT09MIEluaXRpYWxTdGF0ZTsKKyAgICBQeV9VTklDT0RFICpOYW1lOworICAgIEhBTkRMRSBFdmVudDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIgRl9CT09MIEZfQk9PTCAiWiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZFdmVudEF0dHJpYnV0ZXMsICZNYW51YWxSZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkluaXRpYWxTdGF0ZSwgJk5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChFdmVudEF0dHJpYnV0ZXMgIT0gUHlfTm9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIEV2ZW50ID0gQ3JlYXRlRXZlbnRXKE5VTEwsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoRXZlbnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBFdmVudCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBTZXRFdmVudF9kb2MsCisgICAgIlNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9TZXRFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJkhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBSZXNldEV2ZW50X2RvYywKKyAgICAiUmVzZXRFdmVudChIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJSZXNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZXNldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUmVzZXRFdmVudChIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogQmluZCBzb2NrZXQgaGFuZGxlIHRvIGxvY2FsIHBvcnQgd2l0aG91dCBkb2luZyBzbG93IGdldGFkZHJpbmZvKCkKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQmluZExvY2FsX2RvYywKKyAgICAiQmluZExvY2FsKGhhbmRsZSwgZmFtaWx5KSAtPiBOb25lXG5cbiIKKyAgICAiQmluZCBhIHNvY2tldCBoYW5kbGUgdG8gYW4gYXJiaXRyYXJ5IGxvY2FsIHBvcnQuXG4iCisgICAgImZhbWlseSBzaG91bGQgQUZfSU5FVCBvciBBRl9JTkVUNi5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9CaW5kTG9jYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgaW50IEZhbWlseTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiaSIsICZTb2NrZXQsICZGYW1pbHkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChGYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBhZGRyLnNpbl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW5fYWRkci5TX3VuLlNfYWRkciA9IElOQUREUl9BTlk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgaWYgKEZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IDA7CisgICAgICAgIGFkZHIuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImV4cGVjdGVkIHR1cGxlIG9mIGxlbmd0aCAyIG9yIDQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXaW5kb3dzIGVxdWl2YWxlbnQgb2Ygb3Muc3RyZXJyb3IoKSAtLSBjb21wYXJlIF9jdHlwZXMvY2FsbHByb2MuYworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBGb3JtYXRNZXNzYWdlX2RvYywKKyAgICAiRm9ybWF0TWVzc2FnZShlcnJvcl9jb2RlKSAtPiBlcnJvcl9tZXNzYWdlXG5cbiIKKyAgICAiUmV0dXJuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yIGNvZGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0Zvcm1hdE1lc3NhZ2UoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgRFdPUkQgY29kZSwgbjsKKyAgICBXQ0hBUiAqbHBNc2dCdWY7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0RXT1JELCAmY29kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbiA9IEZvcm1hdE1lc3NhZ2VXKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8CisgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKExQV1NUUikgJmxwTXNnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAobikgeworICAgICAgICB3aGlsZSAoaXN3c3BhY2UobHBNc2dCdWZbbi0xXSkpCisgICAgICAgICAgICAtLW47CisgICAgICAgIGxwTXNnQnVmW25dID0gTCdcMCc7CisgICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoInUiLCBscE1zZ0J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInVua25vd24gZXJyb3IgY29kZSAldSIsIGNvZGUpOworICAgIH0KKyAgICBMb2NhbEZyZWUobHBNc2dCdWYpOworICAgIHJldHVybiByZXM7Cit9CisKKworLyoKKyAqIE1hcmsgb3BlcmF0aW9uIGFzIGNvbXBsZXRlZCAtIHVzZWQgd2hlbiByZWFkaW5nIHByb2R1Y2VzIEVSUk9SX0JST0tFTl9QSVBFCisgKi8KKworc3RhdGljIHZvaWQKK21hcmtfYXNfY29tcGxldGVkKE9WRVJMQVBQRUQgKm92KQoreworICAgIG92LT5JbnRlcm5hbCA9IDA7CisgICAgaWYgKG92LT5oRXZlbnQgIT0gTlVMTCkKKyAgICAgICAgU2V0RXZlbnQob3YtPmhFdmVudCk7Cit9CisKKy8qCisgKiBBIFB5dGhvbiBvYmplY3Qgd3JhcHBpbmcgYW4gT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUgYW5kIG90aGVyIHVzZWZ1bCBkYXRhCisgKiBmb3Igb3ZlcmxhcHBlZCBJL08KKyAqLworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9kb2MsCisgICAgIk92ZXJsYXBwZWQgb2JqZWN0Iik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBPdmVybGFwcGVkT2JqZWN0ICpzZWxmOworICAgIEhBTkRMRSBldmVudCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZXZlbnQiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8IiBGX0hBTkRMRSwga3dsaXN0LCAmZXZlbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChldmVudCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgfQorCisgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhPdmVybGFwcGVkT2JqZWN0LCB0eXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChldmVudCAhPSBOVUxMKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUoZXZlbnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmLT5oYW5kbGUgPSBOVUxMOworICAgIHNlbGYtPmVycm9yID0gMDsKKyAgICBzZWxmLT50eXBlID0gVFlQRV9OT05FOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gTlVMTDsKKyAgICBtZW1zZXQoJnNlbGYtPm92ZXJsYXBwZWQsIDAsIHNpemVvZihPVkVSTEFQUEVEKSk7CisgICAgbWVtc2V0KCZzZWxmLT53cml0ZV9idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKKyAgICBpZiAoZXZlbnQpCisgICAgICAgIHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ID0gZXZlbnQ7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyB2b2lkCitPdmVybGFwcGVkX2RlYWxsb2MoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICBEV09SRCBieXRlczsKKyAgICBEV09SRCBvbGRlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICBzZWxmLT50eXBlICE9IFRZUEVfTk9UX1NUQVJURUQpCisgICAgeworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCAmJiBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpKQorICAgICAgICAgICAgd2FpdCA9IFRSVUU7CisKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXQgPSBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzLCB3YWl0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBzd2l0Y2ggKHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICAgICAgY2FzZSBFUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgICAgICBjYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiVSIHN0aWxsIGhhcyBwZW5kaW5nIG9wZXJhdGlvbiBhdCAiCisgICAgICAgICAgICAgICAgICAgICJkZWFsbG9jYXRpb24sIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIsIHNlbGYpOworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzZWxmLT5vdmVybGFwcGVkLmhFdmVudCAhPSBOVUxMKQorICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CisKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLm9iaikKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgICAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICAgICAgY2FzZSBUWVBFX0FDQ0VQVDoKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRfYnVmZmVyKTsKKyAgICB9CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFNldExhc3RFcnJvcihvbGRlcnIpOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9jYW5jZWxfZG9jLAorICAgICJjYW5jZWwoKSAtPiBOb25lXG5cbiIKKyAgICAiQ2FuY2VsIG92ZXJsYXBwZWQgb3BlcmF0aW9uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2NhbmNlbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIEJPT0wgcmV0ID0gVFJVRTsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9UX1NUQVJURUQKKyAgICAgICAgfHwgc2VsZi0+dHlwZSA9PSBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICBpZiAoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCkKKyAgICAgICAgICAgIHJldCA9IFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IENhbmNlbElvKHNlbGYtPmhhbmRsZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorCisgICAgLyogQ2FuY2VsSW9FeCByZXR1cm5zIEVSUk9SX05PVF9GT1VORCBpZiB0aGUgSS9PIGNvbXBsZXRlZCBpbi1iZXR3ZWVuICovCisgICAgaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9UX0ZPVU5EKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2dldHJlc3VsdF9kb2MsCisgICAgImdldHJlc3VsdCh3YWl0PUZhbHNlKSAtPiByZXN1bHRcblxuIgorICAgICJSZXRyaWV2ZSByZXN1bHQgb2Ygb3BlcmF0aW9uLiAgSWYgd2FpdCBpcyB0cnVlIHRoZW4gaXQgYmxvY2tzXG4iCisgICAgInVudGlsIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQuICBJZiB3YWl0IGlzIGZhbHNlIGFuZCB0aGVcbiIKKyAgICAib3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgdGhlbiBhbiBlcnJvciBpcyByYWlzZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2dldHJlc3VsdChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBEV09SRCB0cmFuc2ZlcnJlZCA9IDA7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8IiBGX0JPT0wsICZ3YWl0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gbm90IHlldCBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBmYWlsZWQgdG8gc3RhcnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJnRyYW5zZmVycmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9NT1JFX0RBVEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIGlmIChzZWxmLT5yZWFkX2J1ZmZlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNlbGYtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBUWVBFX1JFQUQ6CisgICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVja0V4YWN0KHNlbGYtPnJlYWRfYnVmZmVyKSk7CisgICAgICAgICAgICBpZiAodHJhbnNmZXJyZWQgIT0gUHlCeXRlc19HRVRfU0laRShzZWxmLT5yZWFkX2J1ZmZlcikgJiYKKyAgICAgICAgICAgICAgICBfUHlCeXRlc19SZXNpemUoJnNlbGYtPnJlYWRfYnVmZmVyLCB0cmFuc2ZlcnJlZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZi0+cmVhZF9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYtPnJlYWRfYnVmZmVyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB0cmFuc2ZlcnJlZCk7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2MsCisgICAgIlJlYWRGaWxlKGhhbmRsZSwgc2l6ZSkgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVhZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9SZWFkRmlsZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJmhhbmRsZSwgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZWFkRmlsZShoYW5kbGUsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksIHNpemUsICZucmVhZCwKKyAgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2MsCisgICAgIlJlY3ZGaWxlKGhhbmRsZSwgc2l6ZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbbWVzc2FnZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHJlY2VpdmUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV1NBUmVjdihPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworICAgIERXT1JEIG5yZWFkOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEICJ8IiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmc2l6ZSwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgU0laRU9GX1NJWkVfVCA8PSBTSVpFT0ZfTE9ORworICAgIHNpemUgPSBQeV9NSU4oc2l6ZSwgKERXT1JEKVBZX1NTSVpFX1RfTUFYKTsKKyNlbmRpZgorICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgUHlfTUFYKHNpemUsIDEpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfUkVBRDsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisgICAgd3NhYnVmLmxlbiA9IHNpemU7CisgICAgd3NhYnVmLmJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zik7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBUmVjdigoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJm5yZWFkLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV3JpdGVGaWxlX2RvYywKKyAgICAiV3JpdGVGaWxlKGhhbmRsZSwgYnVmKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd3JpdGUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV3JpdGVGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCB3cml0dGVuOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZoYW5kbGUsICZidWZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGJ1Zm9iaiwgInkqIiwgJnNlbGYtPndyaXRlX2J1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgU0laRU9GX1NJWkVfVCA+IFNJWkVPRl9MT05HCisgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5sZW4gPiAoUHlfc3NpemVfdClVTE9OR19NQVgpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJidWZmZXIgdG8gbGFyZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XUklURTsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW4sCisgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2MsCisgICAgIldTQVNlbmQoaGFuZGxlLCBidWYsIGZsYWdzKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgc2VuZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FTZW5kKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCBmbGFnczsKKyAgICBEV09SRCB3cml0dGVuOworICAgIFdTQUJVRiB3c2FidWY7CisgICAgaW50IHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIk8iIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZidWZvYmosICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICB3c2FidWYubGVuID0gKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW47CisgICAgd3NhYnVmLmJ1ZiA9IHNlbGYtPndyaXRlX2J1ZmZlci5idWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBU2VuZCgoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJndyaXR0ZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgJnNlbGYtPm92ZXJsYXBwZWQsIE5VTEwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IChyZXQgPCAwID8gV1NBR2V0TGFzdEVycm9yKCkgOiBFUlJPUl9TVUNDRVNTKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0FjY2VwdEV4X2RvYywKKyAgICAiQWNjZXB0RXgobGlzdGVuX2hhbmRsZSwgYWNjZXB0X2hhbmRsZSkgLT4gT3ZlcmxhcHBlZFthZGRyZXNzX2FzX2J5dGVzXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgY2xpZW50IHRvIGNvbm5lY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQWNjZXB0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIExpc3RlblNvY2tldDsKKyAgICBTT0NLRVQgQWNjZXB0U29ja2V0OworICAgIERXT1JEIEJ5dGVzUmVjZWl2ZWQ7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkxpc3RlblNvY2tldCwgJkFjY2VwdFNvY2tldCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgKyAxNjsKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUqMik7CisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQUNDRVBUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpTGlzdGVuU29ja2V0OworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFB5X0FjY2VwdEV4KExpc3RlblNvY2tldCwgQWNjZXB0U29ja2V0LCBQeUJ5dGVzX0FTX1NUUklORyhidWYpLAorICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemUsIHNpemUsICZCeXRlc1JlY2VpdmVkLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworCitzdGF0aWMgaW50CitwYXJzZV9hZGRyZXNzKFB5T2JqZWN0ICpvYmosIFNPQ0tBRERSICpBZGRyZXNzLCBpbnQgTGVuZ3RoKQoreworICAgIGNoYXIgKkhvc3Q7CisgICAgdW5zaWduZWQgc2hvcnQgUG9ydDsKKyAgICB1bnNpZ25lZCBsb25nIEZsb3dJbmZvOworICAgIHVuc2lnbmVkIGxvbmcgU2NvcGVJZDsKKworICAgIG1lbXNldChBZGRyZXNzLCAwLCBMZW5ndGgpOworCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0giLCAmSG9zdCwgJlBvcnQpKQorICAgIHsKKyAgICAgICAgQWRkcmVzcy0+c2FfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVCwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTiopQWRkcmVzcyktPnNpbl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorICAgIGVsc2UgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0hrayIsICZIb3N0LCAmUG9ydCwgJkZsb3dJbmZvLCAmU2NvcGVJZCkpCisgICAgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVDYsIE5VTEwsIEFkZHJlc3MsICZMZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9mbG93aW5mbyA9IEZsb3dJbmZvOworICAgICAgICAoKFNPQ0tBRERSX0lONiopQWRkcmVzcyktPnNpbjZfc2NvcGVfaWQgPSBTY29wZUlkOworICAgICAgICByZXR1cm4gTGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0RXhfZG9jLAorICAgICJDb25uZWN0RXgoY2xpZW50X2hhbmRsZSwgYWRkcmVzc19hc19ieXRlcykgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdC4gIGNsaWVudF9oYW5kbGUgc2hvdWxkIGJlIHVuYm91bmQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3RFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgQ29ubmVjdFNvY2tldDsKKyAgICBQeU9iamVjdCAqQWRkcmVzc09iajsKKyAgICBjaGFyIEFkZHJlc3NCdWZbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpXTsKKyAgICBTT0NLQUREUiAqQWRkcmVzcyA9IChTT0NLQUREUiopQWRkcmVzc0J1ZjsKKyAgICBpbnQgTGVuZ3RoOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZDb25uZWN0U29ja2V0LCAmQWRkcmVzc09iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIExlbmd0aCA9IHNpemVvZihBZGRyZXNzQnVmKTsKKyAgICBMZW5ndGggPSBwYXJzZV9hZGRyZXNzKEFkZHJlc3NPYmosIEFkZHJlc3MsIExlbmd0aCk7CisgICAgaWYgKExlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKUNvbm5lY3RTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQ29ubmVjdEV4KENvbm5lY3RTb2NrZXQsIEFkZHJlc3MsIExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2MsCisgICAgIkRpc2Nvbm5lY3RFeChoYW5kbGUsIGZsYWdzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfRGlzY29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgRFdPUkQgZmxhZ3M7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsICZTb2NrZXQsICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0RJU0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfRGlzY29ubmVjdEV4KFNvY2tldCwgJnNlbGYtPm92ZXJsYXBwZWQsIGZsYWdzLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlX2RvYywKKyAgICAiQ29ubmVjdE5hbWVkUGlwZShoYW5kbGUpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHdhaXQgZm9yIGEgY2xpZW50IHRvIGNvbm5lY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFBpcGU7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmUGlwZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRTsKKyAgICBzZWxmLT5oYW5kbGUgPSBQaXBlOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENvbm5lY3ROYW1lZFBpcGUoUGlwZSwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1BJUEVfQ09OTkVDVEVEOgorICAgICAgICAgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworLyogVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyB3YXkgdG8gZG8gYW4gb3ZlcmxhcHBlZCBjb25uZWN0IHRvIGEKKyAgIHBpcGUuICBXZSBpbnN0ZWFkIHVzZSBXYWl0TmFtZWRQaXBlKCkgYW5kIENyZWF0ZUZpbGUoKSBpbiBhIHRocmVhZAorICAgcG9vbCB0aHJlYWQuICBJZiBhIGNvbm5lY3Rpb24gc3VjY2VlZHMgd2l0aGluIGEgdGltZSBsaW1pdCAoMTAKKyAgIHNlY29uZHMpIHRoZW4gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKSBpcyB1c2VkIHRvIHJldHVybiB0aGUKKyAgIHBpcGUgaGFuZGxlIHRvIHRoZSBjb21wbGV0aW9uIHBvcnQuICovCisKK3N0YXRpYyBEV09SRCBXSU5BUEkKK1dhaXROYW1lZFBpcGVBbmRDb25uZWN0SW5UaHJlYWQoV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0ICpjdHgpCit7CisgICAgSEFORExFIFBpcGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBEV09SRCBTdGFydCA9IEdldFRpY2tDb3VudCgpOworICAgIERXT1JEIERlYWRsaW5lID0gU3RhcnQgKyAxMCoxMDAwOworICAgIERXT1JEIEVycm9yID0gMDsKKyAgICBEV09SRCBUaW1lb3V0OworICAgIEJPT0wgU3VjY2VzczsKKworICAgIGZvciAoIDsgOyApIHsKKyAgICAgICAgVGltZW91dCA9IERlYWRsaW5lIC0gR2V0VGlja0NvdW50KCk7CisgICAgICAgIGlmICgoaW50KVRpbWVvdXQgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFN1Y2Nlc3MgPSBXYWl0TmFtZWRQaXBlKGN0eC0+QWRkcmVzcywgVGltZW91dCk7CisgICAgICAgIEVycm9yID0gU3VjY2VzcyA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgc3dpdGNoIChFcnJvcikgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICAgICAgICAgIFBpcGVIYW5kbGUgPSBDcmVhdGVGaWxlKGN0eC0+QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX09WRVJMQVBQRUQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChQaXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU0VNX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoY3R4LT5Jb2NwSGFuZGxlLCBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVTE9OR19QVFIpUGlwZUhhbmRsZSwgY3R4LT5PdmVybGFwcGVkKSkKKyAgICAgICAgQ2xvc2VIYW5kbGUoUGlwZUhhbmRsZSk7CisgICAgZnJlZShjdHgpOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdF9kb2MsCisgICAgIldhaXROYW1lZFBpcGVBbmRDb25uZWN0KGFkZHIsIGlvY3BfaGFuZGxlKSAtPiBPdmVybGFwcGVkW3BpcGVfaGFuZGxlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdGlvbiB0byBhZGRyZXNzLCBub3RpZnlpbmcgaW9jcF9oYW5kbGUgd2hlblxuIgorICAgICJmaW5pc2hlZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpBZGRyZXNzOworICAgIFB5X3NzaXplX3QgQWRkcmVzc0xlbmd0aDsKKyAgICBIQU5ETEUgSW9jcEhhbmRsZTsKKyAgICBPVkVSTEFQUEVEIE92ZXJsYXBwZWQ7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworICAgIFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dCAqY3R4OworICAgIFB5X3NzaXplX3QgQ29udGV4dExlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyMiIEZfSEFORExFIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkFkZHJlc3MsICZBZGRyZXNzTGVuZ3RoLCAmSW9jcEhhbmRsZSwgJk92ZXJsYXBwZWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDb250ZXh0TGVuZ3RoID0gKEFkZHJlc3NMZW5ndGggKworICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0LCBBZGRyZXNzKSk7CisgICAgY3R4ID0gY2FsbG9jKDEsIENvbnRleHRMZW5ndGggKyAxKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIG1lbWNweShjdHgtPkFkZHJlc3MsIEFkZHJlc3MsIEFkZHJlc3NMZW5ndGggKyAxKTsKKyAgICBjdHgtPk92ZXJsYXBwZWQgPSAmc2VsZi0+b3ZlcmxhcHBlZDsKKyAgICBjdHgtPklvY3BIYW5kbGUgPSBJb2NwSGFuZGxlOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUXVldWVVc2VyV29ya0l0ZW0oV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RJblRocmVhZCwgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdUX0VYRUNVVEVMT05HRlVOQ1RJT04pOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK092ZXJsYXBwZWRfZ2V0YWRkcmVzcyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoJnNlbGYtPm92ZXJsYXBwZWQpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitPdmVybGFwcGVkX2dldHBlbmRpbmcoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT50eXBlICE9IFRZUEVfTk9UX1NUQVJURUQpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgT3ZlcmxhcHBlZF9tZXRob2RzW10gPSB7CisgICAgeyJnZXRyZXN1bHQiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfZ2V0cmVzdWx0LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfZ2V0cmVzdWx0X2RvY30sCisgICAgeyJjYW5jZWwiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfY2FuY2VsLAorICAgICBNRVRIX05PQVJHUywgT3ZlcmxhcHBlZF9jYW5jZWxfZG9jfSwKKyAgICB7IlJlYWRGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1JlYWRGaWxlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfUmVhZEZpbGVfZG9jfSwKKyAgICB7IldTQVJlY3YiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV1NBUmVjdiwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dTQVJlY3ZfZG9jfSwKKyAgICB7IldyaXRlRmlsZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Xcml0ZUZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Xcml0ZUZpbGVfZG9jfSwKKyAgICB7IldTQVNlbmQiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV1NBU2VuZCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dTQVNlbmRfZG9jfSwKKyAgICB7IkFjY2VwdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0FjY2VwdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQWNjZXB0RXhfZG9jfSwKKyAgICB7IkNvbm5lY3RFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Db25uZWN0RXhfZG9jfSwKKyAgICB7IkRpc2Nvbm5lY3RFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXhfZG9jfSwKKyAgICB7IkNvbm5lY3ROYW1lZFBpcGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGVfZG9jfSwKKyAgICB7IldhaXROYW1lZFBpcGVBbmRDb25uZWN0IiwKKyAgICAgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBPdmVybGFwcGVkX21lbWJlcnNbXSA9IHsKKyAgICB7ImVycm9yIiwgVF9VTE9ORywKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgZXJyb3IpLAorICAgICBSRUFET05MWSwgIkVycm9yIGZyb20gbGFzdCBvcGVyYXRpb24ifSwKKyAgICB7ImV2ZW50IiwgVF9IQU5ETEUsCisgICAgIG9mZnNldG9mKE92ZXJsYXBwZWRPYmplY3QsIG92ZXJsYXBwZWQpICsgb2Zmc2V0b2YoT1ZFUkxBUFBFRCwgaEV2ZW50KSwKKyAgICAgUkVBRE9OTFksICJPdmVybGFwcGVkIGV2ZW50IGhhbmRsZSJ9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIE92ZXJsYXBwZWRfZ2V0c2V0c1tdID0geworICAgIHsiYWRkcmVzcyIsIChnZXR0ZXIpT3ZlcmxhcHBlZF9nZXRhZGRyZXNzLCBOVUxMLAorICAgICAiQWRkcmVzcyBvZiBvdmVybGFwcGVkIHN0cnVjdHVyZSJ9LAorICAgIHsicGVuZGluZyIsIChnZXR0ZXIpT3ZlcmxhcHBlZF9nZXRwZW5kaW5nLCBOVUxMLAorICAgICAiV2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIHBlbmRpbmcifSwKKyAgICB7TlVMTH0sCit9OworCitQeVR5cGVPYmplY3QgT3ZlcmxhcHBlZFR5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl9vdmVybGFwcGVkLk92ZXJsYXBwZWQiLAorICAgIC8qIHRwX2Jhc2ljc2l6ZSAgICAgICovIHNpemVvZihPdmVybGFwcGVkT2JqZWN0KSwKKyAgICAvKiB0cF9pdGVtc2l6ZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2RlYWxsb2MgICAgICAgICovIChkZXN0cnVjdG9yKSBPdmVybGFwcGVkX2RlYWxsb2MsCisgICAgLyogdHBfcHJpbnQgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9nZXRhdHRyICAgICAgICAqLyAwLAorICAgIC8qIHRwX3NldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfcmVzZXJ2ZWQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXByICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX251bWJlciAgICAgICovIDAsCisgICAgLyogdHBfYXNfc2VxdWVuY2UgICAgKi8gMCwKKyAgICAvKiB0cF9hc19tYXBwaW5nICAgICAqLyAwLAorICAgIC8qIHRwX2hhc2ggICAgICAgICAgICovIDAsCisgICAgLyogdHBfY2FsbCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9zdHIgICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHJvICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19idWZmZXIgICAgICAqLyAwLAorICAgIC8qIHRwX2ZsYWdzICAgICAgICAgICovIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICAvKiB0cF9kb2MgICAgICAgICAgICAqLyAiT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUgd3JhcHBlciIsCisgICAgLyogdHBfdHJhdmVyc2UgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jbGVhciAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3JpY2hjb21wYXJlICAgICovIDAsCisgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8gMCwKKyAgICAvKiB0cF9pdGVyICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2l0ZXJuZXh0ICAgICAgICovIDAsCisgICAgLyogdHBfbWV0aG9kcyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZXRob2RzLAorICAgIC8qIHRwX21lbWJlcnMgICAgICAgICovIE92ZXJsYXBwZWRfbWVtYmVycywKKyAgICAvKiB0cF9nZXRzZXQgICAgICAgICAqLyBPdmVybGFwcGVkX2dldHNldHMsCisgICAgLyogdHBfYmFzZSAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kaWN0ICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2Rlc2NyX2dldCAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3Jfc2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kaWN0b2Zmc2V0ICAgICAqLyAwLAorICAgIC8qIHRwX2luaXQgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYWxsb2MgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9uZXcgICAgICAgICAgICAqLyBPdmVybGFwcGVkX25ldywKK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBvdmVybGFwcGVkX2Z1bmN0aW9uc1tdID0geworICAgIHsiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCIsIG92ZXJsYXBwZWRfQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCwKKyAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0X2RvY30sCisgICAgeyJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzIiwgb3ZlcmxhcHBlZF9HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jfSwKKyAgICB7IlBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzIiwgb3ZlcmxhcHBlZF9Qb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cywKKyAgICAgTUVUSF9WQVJBUkdTLCBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiRm9ybWF0TWVzc2FnZSIsIG92ZXJsYXBwZWRfRm9ybWF0TWVzc2FnZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBGb3JtYXRNZXNzYWdlX2RvY30sCisgICAgeyJCaW5kTG9jYWwiLCBvdmVybGFwcGVkX0JpbmRMb2NhbCwKKyAgICAgTUVUSF9WQVJBUkdTLCBCaW5kTG9jYWxfZG9jfSwKKyAgICB7IlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSIsIG92ZXJsYXBwZWRfUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlLAorICAgICBNRVRIX1ZBUkFSR1MsIFJlZ2lzdGVyV2FpdFdpdGhRdWV1ZV9kb2N9LAorICAgIHsiVW5yZWdpc3RlcldhaXQiLCBvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0LAorICAgICBNRVRIX1ZBUkFSR1MsIFVucmVnaXN0ZXJXYWl0X2RvY30sCisgICAgeyJDcmVhdGVFdmVudCIsIG92ZXJsYXBwZWRfQ3JlYXRlRXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlRXZlbnRfZG9jfSwKKyAgICB7IlNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9TZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBTZXRFdmVudF9kb2N9LAorICAgIHsiUmVzZXRFdmVudCIsIG92ZXJsYXBwZWRfUmVzZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBSZXNldEV2ZW50X2RvY30sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG92ZXJsYXBwZWRfbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX292ZXJsYXBwZWQiLAorICAgIE5VTEwsCisgICAgLTEsCisgICAgb3ZlcmxhcHBlZF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworI2RlZmluZSBXSU5BUElfQ09OU1RBTlQoZm10LCBjb24pIFwKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAjY29uLCBQeV9CdWlsZFZhbHVlKGZtdCwgY29uKSkKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptLCAqZDsKKworICAgIC8qIEVuc3VyZSBXU0FTdGFydHVwKCkgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXppbmcgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfc29ja2V0Iik7CisgICAgaWYgKCFtKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYobSk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZV9mdW5jdGlvbl9wb2ludGVycygpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZPdmVybGFwcGVkVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJm92ZXJsYXBwZWRfbW9kdWxlKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPdmVybGFwcGVkIiwgKFB5T2JqZWN0ICopJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX0lPX1BFTkRJTkcpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfTkVUTkFNRV9ERUxFVEVEKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX1NFTV9USU1FT1VUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIElORklOSVRFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIElOVkFMSURfSEFORExFX1ZBTFVFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIE5VTEwpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgVEZfUkVVU0VfU09DS0VUKTsKKworICAgIHJldHVybiBtOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggZTg2ZmU0ZC4uNTM3YTJlOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC04Myw1NCArODMsNzggQEAKICAgICAgICAgICAgaW50IGxpbmVubywgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIGxpbmUgbnVtYmVycz8gICAgICAgICAqLwogICAgICAgICAgICBpbnQgY29sX29mZnNldCkgICAgICAgICAgICAgIC8qIGluY2x1ZGUgY29sdW1uIG9mZnNldHM/ICAgICAgICovCiB7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEwsICp3OworCiAgICAgaWYgKG4gPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiAoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KKwogICAgIGlmIChJU05PTlRFUk1JTkFMKFRZUEUobikpKSB7CiAgICAgICAgIGludCBpOwotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgUHlPYmplY3QgKnc7CiAKLSAgICAgICAgdiA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gKHYpOworICAgICAgICByZXN1bHQgPSBta3NlcSgxICsgTkNIKG4pICsgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7Ci0gICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgMCwgdyk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewogICAgICAgICAgICAgdyA9IG5vZGUydHVwbGUoQ0hJTEQobiwgaSksIG1rc2VxLCBhZGRlbGVtLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgaSsxLCB3KTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpCi0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICByZXR1cm4gKHYpOworICAgICAgICBpZiAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSB7CisgICAgICAgICAgICB3ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChJU1RFUk1JTkFMKFRZUEUobikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSkpOwotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpKTsKLSAgICAgICAgICAgIGlmIChsaW5lbm8gPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubykpOwotICAgICAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpKTsKKyAgICAgICAgcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyArIGNvbF9vZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCisgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCB3KTsKKworICAgICAgICBpZiAobGluZW5vID09IDEpIHsKKyAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcobi0+bl9saW5lbm8pOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCB3KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAzLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVucmVjb2duaXplZCBwYXJzZSB0cmVlIG5vZGUgdHlwZSIpOwogICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwogICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAvKgogICogIEVuZCBvZiBtYXRlcmlhbCBjb3B5cmlnaHRlZCBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCkBAIC00NTMsMzMgKzQ3Nyw0NiBAQAogc3RhdGljIFB5T2JqZWN0KgogcGFyc2VyX2NvbXBpbGVzdChQeVNUX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKLSAgICBQeU9iamVjdCogICAgIHJlcyA9IDA7Ci0gICAgUHlBcmVuYSogICAgICBhcmVuYTsKKyAgICBQeU9iamVjdCogICAgIHJlcyA9IE5VTEw7CisgICAgUHlBcmVuYSogICAgICBhcmVuYSA9IE5VTEw7CiAgICAgbW9kX3R5ICAgICAgICBtb2Q7Ci0gICAgY2hhciogICAgICAgICBzdHIgPSAiPHN5bnRheC10cmVlPiI7CisgICAgUHlPYmplY3QqICAgICBmaWxlbmFtZSA9IE5VTEw7CiAgICAgaW50IG9rOwogCiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InN0IiwgImZpbGVuYW1lIiwgTlVMTH07CiAKICAgICBpZiAoc2VsZiA9PSBOVUxMIHx8IFB5TW9kdWxlX0NoZWNrKHNlbGYpKQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfHM6Y29tcGlsZXN0Iiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLCAmc3RyKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPJjpjb21waWxlc3QiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CiAgICAgZWxzZQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxzOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPJjpjb21waWxlIiwgJmtleXdvcmRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUpOworICAgIGlmICghb2spCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBpZiAob2spIHsKLSAgICAgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgICAgICBpZiAoYXJlbmEpIHsKLSAgICAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUoc2VsZi0+c3Rfbm9kZSwgJihzZWxmLT5zdF9mbGFncyksIHN0ciwgYXJlbmEpOwotICAgICAgICAgICBpZiAobW9kKSB7Ci0gICAgICAgICAgICAgICByZXMgPSAoUHlPYmplY3QgKilQeUFTVF9Db21waWxlKG1vZCwgc3RyLCAmKHNlbGYtPnN0X2ZsYWdzKSwgYXJlbmEpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgICAgIH0KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3ludGF4LXRyZWU+Iik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICByZXR1cm4gKHJlcyk7CisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIGlmICghYXJlbmEpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChzZWxmLT5zdF9ub2RlLCAmc2VsZi0+c3RfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICBpZiAoIW1vZCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWxmLT5zdF9mbGFncywgLTEsIGFyZW5hKTsKK2Vycm9yOgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIGlmIChhcmVuYSAhPSBOVUxMKQorICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOworICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtODA5LDggKzg0NiwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RybiA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgaWYgKHN0cm4gIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChzdHJuID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihlbGVtKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpIG1lbWNweShzdHJuLCB0ZW1wX3N0ciwgbGVuICsgMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIUlTTk9OVEVSTUlOQUwodHlwZSkpIHsKQEAgLTg3MCw3ICs5MTIsNyBAQAogICAgICAgICAgKiAgVGhlIHR1cGxlIGlzIHNpbXBsZSwgYnV0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHN0YXJ0IHN5bWJvbC4KICAgICAgICAgICogIFJhaXNlIGFuIGV4Y2VwdGlvbiBub3cgYW5kIGJlIGRvbmUgd2l0aCBpdC4KICAgICAgICAgICovCi0gICAgICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgib3MiLCB0dXBsZSwKKyAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJPcyIsIHR1cGxlLAogICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBzeW50YXgtdHJlZTsgY2Fubm90IHN0YXJ0IHdpdGggdGVybWluYWwgc3ltYm9sLiIpOwogICAgICAgICBQeUVycl9TZXRPYmplY3QocGFyc2VyX2Vycm9yLCB0dXBsZSk7CiAgICAgICAgIFB5X1hERUNSRUYodHVwbGUpOwpAQCAtOTA2LDggKzk0OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVzLT5uX3N0ciA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyICE9IE5VTEwgJiYgdGVtcCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCBmMzIzNGE0Li4yZjIxY2ViIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCkBAIC0xLDE1ICsxLDE0IEBACiAKIC8qIFBPU0lYIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAqLwogCi0vKiBUaGlzIGZpbGUgaXMgYWxzbyB1c2VkIGZvciBXaW5kb3dzIE5UL01TLVdpbiBhbmQgT1MvMi4gIEluIHRoYXQgY2FzZSB0aGUKLSAgIG1vZHVsZSBhY3R1YWxseSBjYWxscyBpdHNlbGYgJ250JyBvciAnb3MyJywgbm90ICdwb3NpeCcsIGFuZCBhIGZldworLyogVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBmb3IgV2luZG93cyBOVC9NUy1XaW4uICBJbiB0aGF0IGNhc2UgdGhlCisgICBtb2R1bGUgYWN0dWFsbHkgY2FsbHMgaXRzZWxmICdudCcsIG5vdCAncG9zaXgnLCBhbmQgYSBmZXcKICAgIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHVuaW1wbGVtZW50ZWQgb3IgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkuICBUaGUgc291cmNlCiAgICBhc3N1bWVzIHRoYXQgZm9yIFdpbmRvd3MgTlQsIHRoZSBtYWNybyAnTVNfV0lORE9XUycgaXMgZGVmaW5lZCBpbmRlcGVuZGVudAogICAgb2YgdGhlIGNvbXBpbGVyIHVzZWQuICBEaWZmZXJlbnQgY29tcGlsZXJzIGRlZmluZSB0aGVpciBvd24gZmVhdHVyZQotICAgdGVzdCBtYWNybywgZS5nLiAnX19CT1JMQU5EQ19fJyBvciAnX01TQ19WRVInLiAgRm9yIE9TLzIsIHRoZSBjb21waWxlcgotICAgaW5kZXBlbmRlbnQgbWFjcm8gUFlPU19PUzIgc2hvdWxkIGJlIGRlZmluZWQuICBPbiBPUy8yIHRoZSBkZWZhdWx0Ci0gICBjb21waWxlciBpcyBhc3N1bWVkIHRvIGJlIElCTSdzIFZpc3VhbEFnZSBDKysgKFZBQ1BQKS4gIFBZQ0NfR0NDIGlzIHVzZWQKLSAgIGFzIHRoZSBjb21waWxlciBzcGVjaWZpYyBtYWNybyBmb3IgdGhlIEVNWCBwb3J0IG9mIGdjYyB0byBPUy8yLiAqLworICAgdGVzdCBtYWNybywgZS5nLiAnX19CT1JMQU5EQ19fJyBvciAnX01TQ19WRVInLiAqLworCisKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgLyoKQEAgLTQ2LDIyICs0NSw2IEBACiBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY2FsbHMuIik7CiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jZXJyb3IgIlBFUCAxMTogT1MvMiBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jZGVmaW5lICBJTkNMX0RPUwotI2RlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgIElOQ0xfRE9TUFJPQ0VTUwotI2RlZmluZSAgSU5DTF9OT1BNQVBJCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJvc2RlZnMuaCIKLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9TWVNfVUlPX0gKICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjZW5kaWYKQEAgLTEzMiw2ICsxMTUsMTggQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2VuZGlmCiAKKyNpZmRlZiBfX2hwdXgKKyNpbmNsdWRlIDxzeXMvbXBjdGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjICBkZWZpbmUgVEVSTVNJWkVfVVNFX0NPTklPCiAjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpCkBAIC0xNDYsMjkgKzE0MSwxOSBAQAogCiAvKiBWYXJpb3VzIGNvbXBpbGVycyBoYXZlIG9ubHkgY2VydGFpbiBwb3NpeCBmdW5jdGlvbnMgKi8KIC8qIFhYWCBHb3NoIEkgd2lzaCB0aGVzZSB3ZXJlIGFsbCBtb3ZlZCBpbnRvIHB5Y29uZmlnLmggKi8KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2Vsc2UKICNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1FOWF9fKSAgICAgICAgICAgLyogV2F0Y29tIGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQotI2VuZGlmCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2Vsc2UKICNpZmRlZiBfX0JPUkxBTkRDX18gICAgICAgICAgICAgLyogQm9ybGFuZCBjb21waWxlciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQogI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2Vsc2UKICNpZmRlZiBfTVNDX1ZFUiAgICAgICAgIC8qIE1pY3Jvc29mdCBjb21waWxlciAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVExPR0lOICAgMQogI2RlZmluZSBIQVZFX1NQQVdOViAgICAgMQpAQCAtMTc5LDggKzE2NCw4IEBACiAjZGVmaW5lIEhBVkVfRlNZTkMgICAgICAxCiAjZGVmaW5lIGZzeW5jIF9jb21taXQKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgfHwgZGVmaW5lZChfX1ZNUykKLS8qIEV2ZXJ5dGhpbmcgbmVlZGVkIGlzIGRlZmluZWQgaW4gUEMvb3MyZW14L3B5Y29uZmlnLmggb3Igdm1zL3B5Y29uZmlnLmggKi8KKyNpZiBkZWZpbmVkKF9fVk1TKQorLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiB2bXMvcHljb25maWcuaCAqLwogI2Vsc2UgICAgICAgICAgICAgICAgICAgLyogYWxsIG90aGVyIGNvbXBpbGVycyAqLwogLyogVW5peCBmdW5jdGlvbnMgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IGNoZWNrIGZvciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQpAQCAtMTg4LDcgKzE3Myw2IEBACiAjaWYgZGVmaW5lZChfX1VTTENfXykgJiYgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pICAgICAgIC8qIFNDTyBVREsgQ29tcGlsZXIgKi8KICNkZWZpbmUgSEFWRV9GT1JLMSAgICAgIDEKICNlbmRpZgotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgMQpAQCAtMjAwLDE0ICsxODQsMTYgQEAKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKICNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKICNkZWZpbmUgSEFWRV9UVFlOQU1FICAgIDEKLSNlbmRpZiAgLyogUFlPU19PUzIgJiYgUFlDQ19HQ0MgJiYgX19WTVMgKi8KKyNlbmRpZiAgLyogX19WTVMgKi8KICNlbmRpZiAgLyogX01TQ19WRVIgKi8KICNlbmRpZiAgLyogX19CT1JMQU5EQ19fICovCiAjZW5kaWYgIC8qICEgX19XQVRDT01DX18gfHwgX19RTlhfXyAqLwotI2VuZGlmIC8qICEgX19JQk1DX18gKi8KIAogCi0KKy8qW2NsaW5pY10KK21vZHVsZSBvcworW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCiAKICNpZm5kZWYgX01TQ19WRVIKIApAQCAtMzM1LDEwICszMjEsNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogX01TQ19WRVIgKi8KIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmIC8qIE9TMiAqLwotCiAjaWZuZGVmIE1BWFBBVEhMRU4KICNpZiBkZWZpbmVkKFBBVEhfTUFYKSAmJiBQQVRIX01BWCA+IDEwMjQKICNkZWZpbmUgTUFYUEFUSExFTiBQQVRIX01BWApAQCAtMzgwLDcgKzM2Miw3IEBACiAjdW5kZWYgU1RBVAogI3VuZGVmIEZTVEFUCiAjdW5kZWYgU1RSVUNUX1NUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICBkZWZpbmUgU1RBVCB3aW4zMl9zdGF0CiAjICAgICAgIGRlZmluZSBMU1RBVCB3aW4zMl9sc3RhdAogIyAgICAgICBkZWZpbmUgRlNUQVQgd2luMzJfZnN0YXQKQEAgLTQwMyw2ICszODUsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBEV09SRF9NQVggNDI5NDk2NzI5NVUKKwogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIGludApAQCAtNDM2LDEwOCArNDIwLDIxMyBAQAogaW50CiBfUHlfVWlkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIHVpZF90IHVpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1aWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKih1aWRfdCAqKXAgPSAodWlkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCB1aWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodWlkX3QpdXJlc3VsdCA9PSAodWlkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyB1aWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggdWlkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgdWlkID0gKHVpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YodWlkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykodWlkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpdWlkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyB1aWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHVpZCA9ICh1aWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiB1aWQgPT0gKHVpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAodWlkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKHVpZCA9PSAodWlkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpdWlkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICoodWlkX3QgKilwID0gdWlkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJ1c2VyIGlkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7Ci0gICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJ1aWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICBnb3RvIGZhaWw7CiAKLU92ZXJmbG93VXA6CitvdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50CiBfUHlfR2lkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIGdpZF90IGdpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJnaWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCBnaWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZ2lkX3QpdXJlc3VsdCA9PSAoZ2lkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyBnaWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggZ2lkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgZ2lkID0gKGdpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICB9CisKKyAgICAgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLwogICAgICAgICBpZiAoc2l6ZW9mKGdpZF90KSA8IHNpemVvZihsb25nKSAmJgotICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGdpZF90KXVyZXN1bHQgIT0gdXJlc3VsdCkKLSAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpdXJlc3VsdDsKKyAgICAgICAgICAgIChsb25nKWdpZCAhPSByZXN1bHQpCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKyAgICAgICAgZ290byBzdWNjZXNzOwogICAgIH0KKworICAgIGlmIChvdmVyZmxvdyA8IDApCisgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgLyoKKyAgICAgKiBPa2F5LCB0aGUgdmFsdWUgb3ZlcmZsb3dlZCBhIHNpZ25lZCBsb25nLiAgSWYgaXQKKyAgICAgKiBmaXRzIGluIGFuICp1bnNpZ25lZCogbG9uZywgaXQgbWF5IHN0aWxsIGJlIG9rYXksCisgICAgICogYXMgZ2lkX3QgbWF5IGJlIHVuc2lnbmVkIGxvbmcgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICAgKi8KKyAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKGluZGV4KTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBnaWQgPSAoZ2lkX3QpdXJlc3VsdDsKKworICAgIC8qCisgICAgICogSWYgZ2lkID09IChnaWRfdCktMSwgdGhlIHVzZXIgYWN0dWFsbHkgcGFzc2VkIGluIFVMT05HX01BWCwKKyAgICAgKiBidXQgdGhpcyB2YWx1ZSB3b3VsZCBnZXQgaW50ZXJwcmV0ZWQgYXMgKGdpZF90KS0xICBieSBjaG93bgorICAgICAqIGFuZCBpdHMgc2libGluZ3MuICAgVGhhdCdzIG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50ISAgU28gd2UKKyAgICAgKiB0aHJvdyBhbiBvdmVyZmxvdyBleGNlcHRpb24gaW5zdGVhZC4gICAoV2UgYWxyZWFkeQorICAgICAqIGhhbmRsZWQgYSByZWFsIC0xIHdpdGggUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KCkgYWJvdmUuKQorICAgICAqLworICAgIGlmIChnaWQgPT0gKGdpZF90KS0xKQorICAgICAgICBnb3RvIG92ZXJmbG93OworCisgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLworICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCisgICAgICAgICh1bnNpZ25lZCBsb25nKWdpZCAhPSB1cmVzdWx0KQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK3N1Y2Nlc3M6CisgICAgUHlfREVDUkVGKGluZGV4KTsKKyAgICAqKGdpZF90ICopcCA9IGdpZDsKICAgICByZXR1cm4gMTsKIAotT3ZlcmZsb3dEb3duOgordW5kZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCkBAIC01NjAsMjUgKzY0OSwyOSBAQAogX2ZkX2NvbnZlcnRlcihQeU9iamVjdCAqbywgaW50ICpwLCBjb25zdCBjaGFyICphbGxvd2VkKQogewogICAgIGludCBvdmVyZmxvdzsKLSAgICBsb25nIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobywgJm92ZXJmbG93KTsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvKSB8fAotICAgICAgICAobG9uZ192YWx1ZSA9PSAtMSAmJiAhb3ZlcmZsb3cgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBsb25nIGxvbmdfdmFsdWU7CisKKyAgICBQeU9iamVjdCAqaW5kZXggPSBQeU51bWJlcl9JbmRleChvKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgJXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCwgUHlfVFlQRShvKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICBpZiAob3ZlcmZsb3cgPiAwIHx8IGxvbmdfdmFsdWUgPiBJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChvdmVyZmxvdyA8IDAgfHwgbG9uZ192YWx1ZSA8IElOVF9NSU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKICAgICAqcCA9IChpbnQpbG9uZ192YWx1ZTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTYyNiw3ICs3MTksNyBAQAogICogICBwYXRoLmZ1bmN0aW9uX25hbWUKICAqICAgICBJZiBub24tTlVMTCwgcGF0aF9jb252ZXJ0ZXIgd2lsbCB1c2UgdGhhdCBhcyB0aGUgbmFtZQogICogICAgIG9mIHRoZSBmdW5jdGlvbiBpbiBlcnJvciBtZXNzYWdlcy4KLSAqICAgICAoSWYgcGF0aC5hcmd1bWVudF9uYW1lIGlzIE5VTEwgaXQgb21pdHMgdGhlIGZ1bmN0aW9uIG5hbWUuKQorICogICAgIChJZiBwYXRoLmZ1bmN0aW9uX25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCiAgKiAgIHBhdGguYXJndW1lbnRfbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIHBhcmFtZXRlciBpbiBlcnJvciBtZXNzYWdlcy4KQEAgLTY3OCw4ICs3NzEsOCBAQAogICogcGF0aF9jbGVhbnVwKCkuICBIb3dldmVyIGl0IGlzIHNhZmUgdG8gZG8gc28uKQogICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZnVuY3Rpb25fbmFtZTsKLSAgICBjaGFyICphcmd1bWVudF9uYW1lOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWU7CisgICAgY29uc3QgY2hhciAqYXJndW1lbnRfbmFtZTsKICAgICBpbnQgbnVsbGFibGU7CiAgICAgaW50IGFsbG93X2ZkOwogICAgIHdjaGFyX3QgKndpZGU7CkBAIC02OTAsNiArNzgzLDkgQEAKICAgICBQeU9iamVjdCAqY2xlYW51cDsKIH0gcGF0aF90OwogCisjZGVmaW5lIFBBVEhfVF9JTklUSUFMSVpFKGZ1bmN0aW9uX25hbWUsIG51bGxhYmxlLCBhbGxvd19mZCkgXAorICAgIHtmdW5jdGlvbl9uYW1lLCBOVUxMLCBudWxsYWJsZSwgYWxsb3dfZmQsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwsIE5VTEx9CisKIHN0YXRpYyB2b2lkCiBwYXRoX2NsZWFudXAocGF0aF90ICpwYXRoKSB7CiAgICAgaWYgKHBhdGgtPmNsZWFudXApIHsKQEAgLTczOCwxNSArODM0LDE0IEBACiAgICAgaWYgKHVuaWNvZGUpIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdjaGFyX3QgKndpZGU7Ci0gICAgICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDMyNzY3KSB7Ci0gICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICIlcyB0b28gbG9uZyBmb3IgV2luZG93cyIpOworCisgICAgICAgIHdpZGUgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmljb2RlLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCF3aWRlKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotCi0gICAgICAgIHdpZGUgPSBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaWNvZGUpOwotICAgICAgICBpZiAoIXdpZGUpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDMyNzY3KSB7CisgICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICIlcyB0b28gbG9uZyBmb3IgV2luZG93cyIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTgwNCw3ICs4OTksNyBAQAogCiAgICAgbGVuZ3RoID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSCkgeworICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSC0xKSB7CiAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwNSwxMCArMTIwMCw2IEBACiAjZWxzZQogICAgIGNoYXIgKiplOwogI2VuZGlmCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBBUElSRVQgcmM7Ci0gICAgY2hhciAgIGJ1ZmZlclsxMDI0XTsgLyogT1MvMiBQcm92aWRlcyBhIERvY3VtZW50ZWQgTWF4IG9mIDEwMjQgQ2hhcnMgKi8KLSNlbmRpZgogCiAgICAgZCA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoZCA9PSBOVUxMKQpAQCAtMTE3NywyMCArMTI2OCw2IEBACiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICB9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgQkVHSU5fTElCUEFUSCk7Ci0gICAgaWYgKHJjID09IE5PX0VSUk9SKSB7IC8qIChub3QgYSB0eXBlLCBlbnZuYW1lIGlzIE5PVCAnQkVHSU5fTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJCRUdJTkxJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByYyA9IERvc1F1ZXJ5RXh0TElCUEFUSChidWZmZXIsIEVORF9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cG8sIGVudm5hbWUgaXMgTk9UICdFTkRfTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJFTkRMSUJQQVRIIiwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gZDsKIH0KIApAQCAtMTIwMSwyNSArMTI3OCw2IEBACiB7CiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKGNoYXIqIG5hbWUpCi17Ci0gICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLCBuYW1lKTsKLX0KLQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUoUHlPYmplY3QqIG5hbWUpCi17Ci0gICAgUHlPYmplY3QgKm5hbWVfc3RyLCAqcmM7Ci0gICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZShQeUJ5dGVzX0FzU3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShuYW1lKSk7Ci0gICAgUHlfREVDUkVGKG5hbWUpOwotICAgIHJjID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9zdHIpOwotICAgIFB5X1hERUNSRUYobmFtZV9zdHIpOwotICAgIHJldHVybiByYzsKLX0KIAogI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjM4LDI0ICsxMjk2LDEzIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aW4zMl9lcnJvcl91bmljb2RlKGNoYXIqIGZ1bmN0aW9uLCB3Y2hhcl90KiBmaWxlbmFtZSkKLXsKLSAgICAvKiBYWFggLSBzZWUgd2luMzJfZXJyb3IgZm9yIGNvbW1lbnRzIG9uICdmdW5jdGlvbicgKi8KLSAgICBlcnJubyA9IEdldExhc3RFcnJvcigpOwotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZShlcnJubywgZmlsZW5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm5vKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHdpbjMyX2Vycm9yX29iamVjdChjaGFyKiBmdW5jdGlvbiwgUHlPYmplY3QqIGZpbGVuYW1lKQogewogICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwogICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7CiAgICAgaWYgKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgZXJybm8sCiAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKICAgICBlbHNlCkBAIC0xMjY0LDEwOCArMTMxMSwxNyBAQAogCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0vKgotICogU29tZSBmdW5jdGlvbnMgcmV0dXJuIFdpbjMyIGVycm9ycywgb3RoZXJzIG9ubHkgZXZlciB1c2UgcG9zaXhfZXJyb3IKLSAqICh0aGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4Y2VwdGlvbnMpCi0gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX3Bvc2l4X2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKLXsKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoLT5uYXJyb3cpOwotICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcGF0aF9lcnJvcihjaGFyICpmdW5jdGlvbl9uYW1lLCBwYXRoX3QgKnBhdGgpCitwYXRoX2Vycm9yKHBhdGhfdCAqcGF0aCkKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKHBhdGgtPm5hcnJvdykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIHBhdGgtPm5hcnJvdyk7Ci0gICAgaWYgKHBhdGgtPndpZGUpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKGZ1bmN0aW9uX25hbWUsIHBhdGgtPndpZGUpOwotICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jdGlvbl9uYW1lLCBOVUxMKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGF0aC0+b2JqZWN0KTsKICNlbHNlCi0gICAgcmV0dXJuIHBhdGhfcG9zaXhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aCk7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBwYXRoLT5vYmplY3QpOwogI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgSGVscGVyIEZ1bmN0aW9uIHRvIFRyaW0gYW5kIEZvcm1hdCBPUy8yIE1lc3NhZ2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1vczJfZm9ybWF0bXNnKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2xlbiwgY2hhciAqcmVhc29uKQotewotICAgIG1zZ2J1Zlttc2dsZW5dID0gJ1wwJzsgLyogT1MvMiBEb2Vzbid0IEd1YXJhbnRlZSBhIFRlcm1pbmF0b3IgKi8KLQotICAgIGlmIChzdHJsZW4obXNnYnVmKSA+IDApIHsgLyogSWYgTm9uLUVtcHR5IE1zZywgVHJpbSBDUkxGICovCi0gICAgICAgIGNoYXIgKmxhc3RjID0gJm1zZ2J1Zlsgc3RybGVuKG1zZ2J1ZiktMSBdOwotCi0gICAgICAgIHdoaWxlIChsYXN0YyA+IG1zZ2J1ZiAmJiBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKQotICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOyAvKiBUcmltIFRyYWlsaW5nIFdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgfQotCi0gICAgLyogQWRkIE9wdGlvbmFsIFJlYXNvbiBUZXh0ICovCi0gICAgaWYgKHJlYXNvbikgewotICAgICAgICBzdHJjYXQobXNnYnVmLCAiIDogIik7Ci0gICAgICAgIHN0cmNhdChtc2didWYsIHJlYXNvbik7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgRGVjb2RlIGFuIE9TLzIgT3BlcmF0aW5nIFN5c3RlbSBFcnJvciBDb2RlCi0gKgotICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBsb29rdXAgYW4gT1MvMiBlcnJvciBjb2RlIGFuZCByZXR1cm4gYQotICogdGV4dCBtZXNzYWdlIHdlIGNhbiB1c2UgdG8gcmFpc2UgYSBQeXRob24gZXhjZXB0aW9uLgotICoKLSAqIE5vdGVzOgotICogICBUaGUgbWVzc2FnZXMgZm9yIGVycm9ycyByZXR1cm5lZCBmcm9tIHRoZSBPUy8yIGtlcm5lbCByZXNpZGUgaW4KLSAqICAgdGhlIGZpbGUgT1NPMDAxLk1TRyBpbiB0aGUgXE9TMiBkaXJlY3RvcnkgaGllcmFyY2h5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGNoYXIgKgotb3MyX3N0cmVycm9yKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2J1ZmxlbiwgaW50IGVycm9yY29kZSwgY2hhciAqcmVhc29uKQotewotICAgIEFQSVJFVCByYzsKLSAgICBVTE9ORyAgbXNnbGVuOwotCi0gICAgLyogUmV0cmlldmUgS2VybmVsLVJlbGF0ZWQgRXJyb3IgTWVzc2FnZSBmcm9tIE9TTzAwMS5NU0cgRmlsZSAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgbXNnYnVmLCBtc2didWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSwgIm9zbzAwMS5tc2ciLCAmbXNnbGVuKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjID09IE5PX0VSUk9SKQotICAgICAgICBvczJfZm9ybWF0bXNnKG1zZ2J1ZiwgbXNnbGVuLCByZWFzb24pOwotICAgIGVsc2UKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBPUyBlcnJvciAjJWQiLCBlcnJvcmNvZGUpOwotCi0gICAgcmV0dXJuIG1zZ2J1ZjsKLX0KLQotLyogU2V0IGFuIE9TLzItc3BlY2lmaWMgZXJyb3IgYW5kIHJldHVybiBOVUxMLiAgT1MvMiBrZXJuZWwKLSAgIGVycm9ycyBhcmUgbm90IGluIGEgZ2xvYmFsIHZhcmlhYmxlIGUuZy4gJ2Vycm5vJyBub3IgYXJlCi0gICB0aGV5IGNvbmdydWVudCB3aXRoIHBvc2l4IGVycm9yIG51bWJlcnMuICovCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1vczJfZXJyb3IoaW50IGNvZGUpCi17Ci0gICAgY2hhciB0ZXh0WzEwMjRdOwotICAgIFB5T2JqZWN0ICp2OwotCi0gICAgb3MyX3N0cmVycm9yKHRleHQsIHNpemVvZih0ZXh0KSwgY29kZSwgIiIpOwotCi0gICAgdiA9IFB5X0J1aWxkVmFsdWUoIihpcykiLCBjb2RlLCB0ZXh0KTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsgLyogU2lnbmFsIHRvIFB5dGhvbiB0aGF0IGFuIEV4Y2VwdGlvbiBpcyBQZW5kaW5nICovCi19Ci0KLSNlbmRpZiAvKiBPUzIgKi8KIAogLyogUE9TSVggZ2VuZXJpYyBtZXRob2RzICovCiAKQEAgLTEzODksNjUgKzEzNDUsMzEgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4XzFzdHIoUHlPYmplY3QgKmFyZ3MsIGNoYXIgKmZvcm1hdCwgaW50ICgqZnVuYykoY29uc3QgY2hhciopKQorcG9zaXhfMXN0cihjb25zdCBjaGFyICpmdW5jX25hbWUsIFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKIHsKLSAgICBQeU9iamVjdCAqb3BhdGgxID0gTlVMTDsKLSAgICBjaGFyICpwYXRoMTsKKyAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgcmVzOworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSBmdW5jX25hbWU7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aDEgPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoMSk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9ICgqZnVuYykocGF0aDEpOworICAgIHJlcyA9ICgqZnVuYykocGF0aC5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aDEpOwotICAgIFB5X0RFQ1JFRihvcGF0aDEpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXN0YXRpYyBQeU9iamVjdCoKLXdpbjMyXzFzdHIoUHlPYmplY3QqIGFyZ3MsIGNoYXIqIGZ1bmMsCi0gICAgICAgICAgIGNoYXIqIGZvcm1hdCwgQk9PTCAoX19zdGRjYWxsICpmdW5jQSkoTFBDU1RSKSwKLSAgICAgICAgICAgY2hhciogd2Zvcm1hdCwgQk9PTCAoX19zdGRjYWxsICpmdW5jVykoTFBXU1RSKSkKLXsKLSAgICBQeU9iamVjdCAqdW5pOwotICAgIGNvbnN0IGNoYXIgKmFuc2k7Ci0gICAgQk9PTCByZXN1bHQ7Ci0KLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCB3Zm9ybWF0LCAmdW5pKSkKLSAgICB7Ci0gICAgICAgIHdjaGFyX3QgKndzdHIgPSBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaSk7Ci0gICAgICAgIGlmICh3c3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByZXN1bHQgPSBmdW5jVyh3c3RyKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KGZ1bmMsIHVuaSk7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIFB5RXJyX0NsZWFyKCk7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LCAmYW5zaSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICh3aW4zMl93YXJuX2J5dGVzX2FwaSgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzdWx0ID0gZnVuY0EoYW5zaSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmMsIGFuc2kpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLQotfQotCiAvKiBUaGlzIGlzIGEgcmVpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQyBsaWJyYXJ5J3MgY2hkaXIgZnVuY3Rpb24sCiAgICBidXQgb25lIHRoYXQgcHJvZHVjZXMgV2luMzIgZXJyb3JzIGluc3RlYWQgb2YgRE9TIGVycm9yIGNvZGVzLgogICAgY2hkaXIgaXMgZXNzZW50aWFsbHkgYSB3cmFwcGVyIGFyb3VuZCBTZXRDdXJyZW50RGlyZWN0b3J5OyBob3dldmVyLApAQCAtMTQ1NiwxOCArMTM3OCwxOCBAQAogc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl9jaGRpcihMUENTVFIgcGF0aCkKIHsKLSAgICBjaGFyIG5ld19wYXRoW01BWF9QQVRIKzFdOworICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEhdOwogICAgIGludCByZXN1bHQ7CiAgICAgY2hhciBlbnZbNF0gPSAiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5QShwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlBKE1BWF9QQVRIKzEsIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5QShQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAvKiBJbiB0aGUgQU5TSSBBUEksIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IHBhdGhzIGxvbmdlcgotICAgICAgIHRoYW4gTUFYX1BBVEguICovCi0gICAgYXNzZXJ0KHJlc3VsdCA8PSBNQVhfUEFUSCsxKTsKKyAgICAgICB0aGFuIE1BWF9QQVRILTEgKG5vdCBpbmNsdWRpbmcgdGhlIGZpbmFsIG51bGwgY2hhcmFjdGVyKS4gKi8KKyAgICBhc3NlcnQocmVzdWx0IDwgUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSk7CiAgICAgaWYgKHN0cm5jbXAobmV3X3BhdGgsICJcXFxcIiwgMikgPT0gMCB8fAogICAgICAgICBzdHJuY21wKG5ld19wYXRoLCAiLy8iLCAyKSA9PSAwKQogICAgICAgICAvKiBVTkMgcGF0aCwgbm90aGluZyB0byBkby4gKi8KQEAgLTE0ODEsMjQgKzE0MDMsMjQgQEAKIHN0YXRpYyBCT09MIF9fc3RkY2FsbAogd2luMzJfd2NoZGlyKExQQ1dTVFIgcGF0aCkKIHsKLSAgICB3Y2hhcl90IF9uZXdfcGF0aFtNQVhfUEFUSCsxXSwgKm5ld19wYXRoID0gX25ld19wYXRoOworICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIXSwgKm5ld19wYXRoID0gX25ld19wYXRoOwogICAgIGludCByZXN1bHQ7CiAgICAgd2NoYXJfdCBlbnZbNF0gPSBMIj14OiI7CiAKICAgICBpZighU2V0Q3VycmVudERpcmVjdG9yeVcocGF0aCkpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCsxLCBuZXdfcGF0aCk7CisgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcoUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSwgbmV3X3BhdGgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKHJlc3VsdCA+IE1BWF9QQVRIKzEpIHsKLSAgICAgICAgbmV3X3BhdGggPSBtYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBpZiAocmVzdWx0ID4gUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSkgeworICAgICAgICBuZXdfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoIW5ld19wYXRoKSB7CiAgICAgICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfT1VUT0ZNRU1PUlkpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKHJlc3VsdCwgbmV3X3BhdGgpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgZnJlZShuZXdfcGF0aCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKG5ld19wYXRoKTsKICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MDksNyArMTQzMSw3IEBACiAgICAgZW52WzFdID0gbmV3X3BhdGhbMF07CiAgICAgcmVzdWx0ID0gU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoZW52LCBuZXdfcGF0aCk7CiAgICAgaWYgKG5ld19wYXRoICE9IF9uZXdfcGF0aCkKLSAgICAgICAgZnJlZShuZXdfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTE1MjQsMTMgKzE0NDYsMTMgQEAKICNkZWZpbmUgSEFWRV9TVEFUX05TRUMgMQogCiBzdHJ1Y3Qgd2luMzJfc3RhdHsKLSAgICBpbnQgc3RfZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwogICAgIF9faW50NjQgc3RfaW5vOwogICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CiAgICAgaW50IHN0X25saW5rOwogICAgIGludCBzdF91aWQ7CiAgICAgaW50IHN0X2dpZDsKLSAgICBpbnQgc3RfcmRldjsKKyAgICB1bnNpZ25lZCBsb25nIHN0X3JkZXY7CiAgICAgX19pbnQ2NCBzdF9zaXplOwogICAgIHRpbWVfdCBzdF9hdGltZTsKICAgICBpbnQgc3RfYXRpbWVfbnNlYzsKQEAgLTE1ODksNiArMTUxMSw4IEBACiAgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKICAgICByZXN1bHQtPnN0X21vZGUgPSBhdHRyaWJ1dGVzX3RvX21vZGUoaW5mby0+ZHdGaWxlQXR0cmlidXRlcyk7CiAgICAgcmVzdWx0LT5zdF9zaXplID0gKCgoX19pbnQ2NClpbmZvLT5uRmlsZVNpemVIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVTaXplTG93OworICAgIHJlc3VsdC0+c3RfZGV2ID0gaW5mby0+ZHdWb2x1bWVTZXJpYWxOdW1iZXI7CisgICAgcmVzdWx0LT5zdF9yZGV2ID0gcmVzdWx0LT5zdF9kZXY7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdENyZWF0aW9uVGltZSwgJnJlc3VsdC0+c3RfY3RpbWUsICZyZXN1bHQtPnN0X2N0aW1lX25zZWMpOwogICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRMYXN0V3JpdGVUaW1lLCAmcmVzdWx0LT5zdF9tdGltZSwgJnJlc3VsdC0+c3RfbXRpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RBY2Nlc3NUaW1lLCAmcmVzdWx0LT5zdF9hdGltZSwgJnJlc3VsdC0+c3RfYXRpbWVfbnNlYyk7CkBAIC0xNTk2LDkgKzE1MjAsOSBAQAogICAgIHJlc3VsdC0+c3RfaW5vID0gKCgoX19pbnQ2NClpbmZvLT5uRmlsZUluZGV4SGlnaCk8PDMyKSArIGluZm8tPm5GaWxlSW5kZXhMb3c7CiAgICAgaWYgKHJlcGFyc2VfdGFnID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspIHsKICAgICAgICAgLyogZmlyc3QgY2xlYXIgdGhlIFNfSUZNVCBiaXRzICovCi0gICAgICAgIHJlc3VsdC0+c3RfbW9kZSBePSAocmVzdWx0LT5zdF9tb2RlICYgMDE3MDAwMCk7CisgICAgICAgIHJlc3VsdC0+c3RfbW9kZSBePSAocmVzdWx0LT5zdF9tb2RlICYgU19JRk1UKTsKICAgICAgICAgLyogbm93IHNldCB0aGUgYml0cyB0aGF0IG1ha2UgdGhpcyBhIHN5bWxpbmsgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IDAxMjAwMDA7CisgICAgICAgIHJlc3VsdC0+c3RfbW9kZSB8PSBTX0lGTE5LOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTY1MSw3ICsxNTc1LDcgQEAKIH0KIAogLyogR3JhYiBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwotc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gMDsKK3N0YXRpYyBpbnQgaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSA9IC0xOwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVykoSEFORExFLCBMUFdTVFIsIERXT1JELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogc3RhdGljIGludApAQCAtMTY2Miw3ICsxNTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKTsKIAogICAgIC8qIG9ubHkgcmVjaGVjayAqLwotICAgIGlmICghaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSkKKyAgICBpZiAoLTEgPT0gaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSkKICAgICB7CiAgICAgICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZVcoTCJLRVJORUwzMiIpOwogICAgICAgICAqKEZBUlBST0MqKSZQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVBID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLApAQCAtMTY4OCw3ICsxNjEyLDcgQEAKICAgICBpZighYnVmX3NpemUpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgIGJ1ZiA9ICh3Y2hhcl90ICopbWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghYnVmKSB7CiAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTE2OTgsMTIgKzE2MjIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZfc2l6ZSwgVk9MVU1FX05BTUVfRE9TKTsKIAogICAgIGlmKCFyZXN1bHRfbGVuZ3RoKSB7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgaWYoIUNsb3NlSGFuZGxlKGhkbCkpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTE3OTQsNyArMTcxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICAgICAgICAgIGNvZGUgPSB3aW4zMl94c3RhdF9pbXBsX3codGFyZ2V0X3BhdGgsIHJlc3VsdCwgRkFMU0UpOwotICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTE4OTAsNyArMTgxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICAgICAgICAgIGNvZGUgPSB3aW4zMl94c3RhdF9pbXBsX3codGFyZ2V0X3BhdGgsIHJlc3VsdCwgRkFMU0UpOwotICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTIyODksNyArMjIxMyw5IEBACiAjZWxzZQogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMSwgUHlMb25nX0Zyb21Mb25nKChsb25nKXN0LT5zdF9pbm8pKTsKICNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICYmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc3QtPnN0X2RldikpOworI2VsaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpc3QtPnN0X2RldikpOwogI2Vsc2UKQEAgLTI0MjQsNTMgKzIzNTAsMTUxIEBACiAgICAgICAgIHJlc3VsdCA9IFNUQVQocGF0aC0+bmFycm93LCAmc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0ICE9IDApCi0gICAgICAgIHJldHVybiBwYXRoX2Vycm9yKCJzdGF0IiwgcGF0aCk7CisgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOworICAgIH0KIAogICAgIHJldHVybiBfcHlzdGF0X2Zyb21zdHJ1Y3RzdGF0KCZzdCk7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zdGF0X19kb2NfXywKLSJzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkgLT4gc3RhdCByZXN1bHRcblxuXAotUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG5cCi1cblwKLXBhdGggbWF5IGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzdHJpbmcgb3IgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi1cblwKLUlmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCi0gIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi0gIGRpcl9mZCBtYXkgbm90IGJlIHN1cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3JtOyBpZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmdcblwKLSAgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG5cCi0gIGxpbmsgcG9pbnRzIHRvLlxuXAotSXQgaXMgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXNcblwKLSAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7CisjaWZkZWYgSEFWRV9GU1RBVEFUCisgICAgI2RlZmluZSBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfdW5hdmFpbGFibGUKKyNlbmRpZgorCisKKy8qW3B5dGhvbl0KKworY2xhc3MgcGF0aF90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKworICAgIHR5cGUgPSAicGF0aF90IgorICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIHBhcnNlX2J5X3JlZmVyZW5jZSA9IFRydWUKKworICAgIGNvbnZlcnRlciA9ICdwYXRoX2NvbnZlcnRlcicKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBhbGxvd19mZD1GYWxzZSwgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICBkZWYgc3RyaWZ5KHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoaW50KGJvb2wodmFsdWUpKSkKKworICAgICAgICAjIHJpZ2h0IG5vdyBwYXRoX3QgZG9lc24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAjIHRvIHN1cHBvcnQgYSBkZWZhdWx0IHZhbHVlLCB5b3UnbGwgbmVlZCB0byBvdmVycmlkZSBpbml0aWFsaXplKCkuCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuZGVmYXVsdCBpcyB1bnNwZWNpZmllZAorCisgICAgICAgIHNlbGYubnVsbGFibGUgPSBudWxsYWJsZQorICAgICAgICBzZWxmLmFsbG93X2ZkID0gYWxsb3dfZmQKKworICAgICAgICBzZWxmLmNfZGVmYXVsdCA9ICdQQVRIX1RfSU5JVElBTElaRSgie30iLCB7fSwge30pJy5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLm5hbWUsCisgICAgICAgICAgICBzdHJpZnkobnVsbGFibGUpLAorICAgICAgICAgICAgc3RyaWZ5KGFsbG93X2ZkKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICByZXR1cm4gInBhdGhfY2xlYW51cCgmIiArIHNlbGYubmFtZSArICIpO1xuIgorCisKK2NsYXNzIGRpcl9mZF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgY29udmVydGVyID0gJ09TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUicKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmNfZGVmYXVsdCA9ICdERUZBVUxUX0RJUl9GRCcKKworCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworLypbY2xpbmljXQorCitvcy5zdGF0IC0+IG9iamVjdChkb2NfZGVmYXVsdD0nc3RhdF9yZXN1bHQnKQorCisgICAgcGF0aCA6IHBhdGhfdChhbGxvd19mZD1UcnVlKQorICAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LgorCisgICAgKgorCisgICAgZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgICAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgICAgICAgIGFuZCBwYXRoIHNob3VsZCBiZSBhIHJlbGF0aXZlIHN0cmluZzsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8KKyAgICAgICAgdGhhdCBkaXJlY3RvcnkuCisKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssCisgICAgICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlCisgICAgICAgIHRoZSBsaW5rIHBvaW50cyB0by4KKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisKK2Rpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitJdCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzCisgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihvc19zdGF0X19kb2NfXywKKyJzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyJQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cbiIKKyJcbiIKKyIgIHBhdGhcbiIKKyIgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSBhIHJlbGF0aXZlIHN0cmluZzsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG9cbiIKKyIgICAgdGhhdCBkaXJlY3RvcnkuXG4iCisiICBmb2xsb3dfc3ltbGlua3NcbiIKKyIgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayxcbiIKKyIgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorImRpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWRcbiIKKyIgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGFcbiIKKyIgIE5vdEltcGxlbWVudGVkRXJyb3IuXG4iCisiXG4iCisiSXRcJ3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXNcbiIKKyIgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiIpOworCisjZGVmaW5lIE9TX1NUQVRfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YXQiLCAoUHlDRnVuY3Rpb24pb3Nfc3RhdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3N0YXRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3N0YXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3Nfc3RhdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoInN0YXQiLCAwLCAxKTsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyZwOnN0YXQiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotI2lmZGVmIEhBVkVfRlNUQVRBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJnwkTyZwOnN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N0YXRfaW1wbChtb2R1bGUsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLwogICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3RhdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBjaGVja3N1bTogODVhNzFhZDYwMmU4OWY4ZTI4MDExOGRhOTc2ZjcwY2QyZjlhYmRmMV0qLworeworICAgIHJldHVybiBwb3NpeF9kb19zdGF0KCJzdGF0IiwgcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworfQorCiBQeURvY19TVFJWQVIocG9zaXhfbHN0YXRfX2RvY19fLAogImxzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lKSAtPiBzdGF0IHJlc3VsdFxuXG5cCiBMaWtlIHN0YXQoKSwgYnV0IGRvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuXG5cCkBAIC0yNDg2LDYgKzI1MTAsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxzdGF0IjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6bHN0YXQiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfRlNUQVRBVApAQCAtMjQ5NSw0NCArMjUyMCwxMTkgQEAKICNlbmRpZgogICAgICAgICApKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKyAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJsc3RhdCIsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CiAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfYWNjZXNzX19kb2NfXywKLSJhY2Nlc3MocGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGVmZmVjdGl2ZV9pZHM9RmFsc2UsXAotIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuXG5cCi1Vc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLiAgUmV0dXJucyBUcnVlIGlmIGdyYW50ZWQsXG5cCi1GYWxzZSBvdGhlcndpc2UuXG5cCi1cblwKLUlmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCi0gIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi1JZiBlZmZlY3RpdmVfaWRzIGlzIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuXAotICB0aGUgcmVhbCB1aWQvZ2lkLlxuXAotSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG5cCi0gIGxpbmsgcG9pbnRzIHRvLlxuXAotZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWRcblwKLSAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuXAotICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuXAotXG5cCi1Ob3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcblwKLSAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG5cCi0gIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC5cblwKLVRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBGX09LIHRvIHRlc3QgZXhpc3RlbmNlLCBvciB0aGUgaW5jbHVzaXZlLU9SXG5cCi0gIG9mIFJfT0ssIFdfT0ssIGFuZCBYX09LLiIpOworCisjaWZkZWYgSEFWRV9GQUNDRVNTQVQKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBPU19BQ0NFU1NfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfdW5hdmFpbGFibGUKKyNlbmRpZgorLypbY2xpbmljXQorb3MuYWNjZXNzIC0+IG9iamVjdChkb2NfZGVmYXVsdD0nVHJ1ZSBpZiBncmFudGVkLCBGYWxzZSBvdGhlcndpc2UnKQorCisgICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LgorCisgICAgbW9kZTogaW50CisgICAgICAgIE9wZXJhdGluZy1zeXN0ZW0gbW9kZSBiaXRmaWVsZC4gIENhbiBiZSBGX09LIHRvIHRlc3QgZXhpc3RlbmNlLAorICAgICAgICBvciB0aGUgaW5jbHVzaXZlLU9SIG9mIFJfT0ssIFdfT0ssIGFuZCBYX09LLgorCisgICAgKgorCisgICAgZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgICAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgICAgICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdAorICAgICAgICBkaXJlY3RvcnkuCisKKyAgICBlZmZlY3RpdmVfaWRzOiBib29sID0gRmFsc2UKKyAgICAgICAgSWYgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mCisgICAgICAgIHRoZSByZWFsIHVpZC9naWQuCisKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssCisgICAgICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLgorCit7cGFyYW1ldGVyc30KK2Rpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkCisgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEKKyAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworTm90ZSB0aGF0IG1vc3Qgb3BlcmF0aW9ucyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQsIHRoZXJlZm9yZSB0aGlzCisgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlcgorICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguCisKK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKG9zX2FjY2Vzc19fZG9jX18sCisiYWNjZXNzKHBhdGgsIG1vZGUsICosIGRpcl9mZD1Ob25lLCBlZmZlY3RpdmVfaWRzPUZhbHNlLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIG1vZGVcbiIKKyIgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsXG4iCisiICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKKyIgICAgZGlyZWN0b3J5LlxuIgorIiAgZWZmZWN0aXZlX2lkc1xuIgorIiAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcbiIKKyIgICAgdGhlIHJlYWwgdWlkL2dpZC5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcbiIKKyIgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuIgorIiAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLiIpOworCisjZGVmaW5lIE9TX0FDQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiYWNjZXNzIiwgKFB5Q0Z1bmN0aW9uKW9zX2FjY2VzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2FjY2Vzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfYWNjZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2VzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImFjY2VzcyIsIDAsIDEpOwogICAgIGludCBtb2RlOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZWZmZWN0aXZlX2lkcyA9IDA7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJml8JE8mcHA6YWNjZXNzIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2FjY2Vzc19pbXBsKG1vZHVsZSwgJnBhdGgsIG1vZGUsIGRpcl9mZCwgZWZmZWN0aXZlX2lkcywgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19hY2Nlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBjaGVja3N1bTogNjM2ZTgzNWMzNjU2MmEyZmMxMWFjYWI3NTMxNDYzNDEyN2ZkZjc2OV0qLworewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMjU0MSwxNyArMjY0MSw2IEBACiAgICAgaW50IHJlc3VsdDsKICNlbmRpZgogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXwkTyZwcDphY2Nlc3MiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwKLSNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKICAgICBpZiAoZm9sbG93X3N5bWxpbmtzX3NwZWNpZmllZCgiYWNjZXNzIiwgZm9sbG93X3N5bWxpbmtzKSkKICAgICAgICAgZ290byBleGl0OwpAQCAtMjU2NCwxMCArMjY1MywxMCBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocGF0aC53aWRlICE9IE5VTEwpCi0gICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKKyAgICBpZiAocGF0aC0+d2lkZSAhPSBOVUxMKQorICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7CisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC0+bmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyoKQEAgLTI1NzksNyArMjY2OCw3IEBACiAgICAgICogKERpcmVjdG9yaWVzIGNhbm5vdCBiZSByZWFkLW9ubHkgb24gV2luZG93cy4pCiAgICAgKi8KICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoCi0gICAgICAgIChhdHRyICE9IDB4RkZGRkZGRkYpICYmCisgICAgICAgIChhdHRyICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSAmJgogICAgICAgICAgICAgKCEobW9kZSAmIDIpIHx8CiAgICAgICAgICAgICAhKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgfHwKICAgICAgICAgICAgIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkpOwpAQCAtMjU5NSwxMSArMjY4NCwxMSBAQAogICAgICAgICAgICAgZmxhZ3MgfD0gQVRfU1lNTElOS19OT0ZPTExPVzsKICAgICAgICAgaWYgKGVmZmVjdGl2ZV9pZHMpCiAgICAgICAgICAgICBmbGFncyB8PSBBVF9FQUNDRVNTOwotICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLm5hcnJvdywgbW9kZSwgZmxhZ3MpOworICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLT5uYXJyb3csIG1vZGUsIGZsYWdzKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLm5hcnJvdywgbW9kZSk7CisgICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLT5uYXJyb3csIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKCFyZXN1bHQpOwogI2VuZGlmCkBAIC0yNjA3LDcgKzI2OTYsNiBAQAogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogZXhpdDoKICNlbmRpZgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIApAQCAtMjYyNCwzNSArMjcxMiw3NiBAQAogI2RlZmluZSBYX09LIDEKICNlbmRpZgogCisKICNpZmRlZiBIQVZFX1RUWU5BTUUKLVB5RG9jX1NUUlZBUihwb3NpeF90dHluYW1lX19kb2NfXywKLSJ0dHluYW1lKGZkKSAtPiBzdHJpbmdcblxuXAotUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuIik7CisKKy8qW2NsaW5pY10KK29zLnR0eW5hbWUgLT4gRGVjb2RlRlNEZWZhdWx0CisKKyAgICBmZDogaW50CisgICAgICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4KKworICAgIC8KKworUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihvc190dHluYW1lX19kb2NfXywKKyJ0dHluYW1lKGZkKVxuIgorIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byBcJ2ZkXCcuXG4iCisiXG4iCisiICBmZFxuIgorIiAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuIik7CisKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsidHR5bmFtZSIsIChQeUNGdW5jdGlvbilvc190dHluYW1lLCBNRVRIX1ZBUkFSR1MsIG9zX3R0eW5hbWVfX2RvY19ffSwKKworc3RhdGljIGNoYXIgKgorb3NfdHR5bmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBmZCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90dHluYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3R0eW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGlkOwotICAgIGNoYXIgKnJldDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgY2hhciAqX3JldHVybl92YWx1ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTp0dHluYW1lIiwgJmlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJpOnR0eW5hbWUiLAorICAgICAgICAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3R0eW5hbWVfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGNoZWNrc3VtOiAwZjM2ODEzNGRjMGE3ZjIxZjI1MTg1ZTJlNmJhY2Y3Njc1ZmI0NzNhXSovCit7CisgICAgY2hhciAqcmV0OwogCiAjaWYgZGVmaW5lZChfX1ZNUykKICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgMCBvbmx5LCB0aGUgZGVmYXVsdCBpbnB1dCBkZXZpY2UgKHN0ZGluKSAqLwotICAgIGlmIChpZCA9PSAwKSB7CisgICAgaWYgKGZkID09IDApIHsKICAgICAgICAgcmV0ID0gdHR5bmFtZSgpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgcmV0ID0gTlVMTDsKICAgICB9CiAjZWxzZQotICAgIHJldCA9IHR0eW5hbWUoaWQpOworICAgIHJldCA9IHR0eW5hbWUoZmQpOwogI2VuZGlmCiAgICAgaWYgKHJldCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChyZXQpOworICAgICAgICBwb3NpeF9lcnJvcigpOworICAgIHJldHVybiByZXQ7CiB9CisjZWxzZQorI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NURVJNSUQKQEAgLTI2OTQsNiArMjgyMyw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hkaXIiOwogI2lmZGVmIEhBVkVfRkNIRElSCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI3MDksOCArMjgzOSw2IEBACiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSB3aW4zMl9jaGRpcihwYXRoLm5hcnJvdyk7CiAgICAgcmVzdWx0ID0gIXJlc3VsdDsgLyogb24gdW5peCwgc3VjY2VzcyA9IDAsIG9uIHdpbmRvd3MsIHN1Y2Nlc3MgPSAhMCAqLwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXN1bHQgPSBfY2hkaXIyKHBhdGgubmFycm93KTsKICNlbHNlCiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBpZiAocGF0aC5mZCAhPSAtMSkKQEAgLTI3MjIsNyArMjg1MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2hkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0yNzg2LDYgKzI5MTQsNyBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNobW9kIjsKICNpZmRlZiBIQVZFX0ZDSE1PRAogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0yODExLDcgKzI5NDAsNyBAQAogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKLSAgICBpZiAoYXR0ciA9PSAweEZGRkZGRkZGKQorICAgIGlmIChhdHRyID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKQogICAgICAgICByZXN1bHQgPSAwOwogICAgIGVsc2UgewogICAgICAgICBpZiAobW9kZSAmIF9TX0lXUklURSkKQEAgLTI4MjYsNyArMjk1NSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgiY2htb2QiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtMjg4MCw3ICszMDA5LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImNobW9kIiwgJnBhdGgpOworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTI5MjQsMjAgKzMwNTMsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCBpOwogICAgIGludCByZXM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZpKSkKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG1vZCI7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNobW9kKHBhdGgsIGkpOworICAgIHJlcyA9IGxjaG1vZChwYXRoLm5hcnJvdywgaSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE1PRCAqLwpAQCAtMjk2NSw2ICszMDk3LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZrfCRpOmNoZmxhZ3MiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsICZmb2xsb3dfc3ltbGlua3MpKQpAQCAtMjk4NSw3ICszMTE4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaGZsYWdzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzAwOCwyMiArMzE0MSwyNCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaGZsYWdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJms6bGNoZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwgJmZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgsIGZsYWdzKTsKKyAgICByZXMgPSBsY2hmbGFncyhwYXRoLm5hcnJvdywgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENIRkxBR1MgKi8KIApAQCAtMzAzNSw3ICszMTcwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9jaHJvb3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBwb3NpeF8xc3RyKGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOworICAgIHJldHVybiBwb3NpeF8xc3RyKCJjaHJvb3QiLCBhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKIH0KICNlbmRpZgogCkBAIC0zMTE3LDYgKzMyNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hvd24iOwogI2lmZGVmIEhBVkVfRkNIT1dOCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTMxNzQsNyArMzMxMCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigiY2hvd24iLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMjIzLDMwICszMzU5LDMyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNob3duKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1aWRfdCB1aWQ7CiAgICAgZ2lkX3QgZ2lkOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hvd24iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPJk8mOmxjaG93biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJmdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNob3duKHBhdGgsIHVpZCwgZ2lkKTsKKyAgICByZXMgPSBsY2hvd24ocGF0aC5uYXJyb3csIHVpZCwgZ2lkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE9XTiAqLwogCiAKLSNpZmRlZiBIQVZFX0dFVENXRAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2dldGN3ZChpbnQgdXNlX2J5dGVzKQogewpAQCAtMzI2MCwxMiArMzM5OCwxMiBAQAogICAgICAgICBQeU9iamVjdCAqcmVzb2JqOwogICAgICAgICBEV09SRCBsZW47CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdLCB3YnVmKTsKKyAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoUHlfQVJSQVlfTEVOR1RIKHdidWYpLCB3YnVmKTsKICAgICAgICAgLyogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gsIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQogICAgICAgICAgICB0ZXJtaW5hdGluZyBcMC4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGxlbiBpbmNsdWRlcwogICAgICAgICAgICB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdGVybWluYXRvci4gKi8KLSAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0pIHsKLSAgICAgICAgICAgIHdidWYyID0gbWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmIChsZW4gPj0gUHlfQVJSQVlfTEVOR1RIKHdidWYpKSB7CisgICAgICAgICAgICB3YnVmMiA9IFB5TWVtX1Jhd01hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICAgICAgaWYgKHdidWYyKQogICAgICAgICAgICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKGxlbiwgd2J1ZjIpOwogICAgICAgICB9CkBAIC0zMjc1LDExICszNDEzLDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWxlbikgewotICAgICAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOwotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJnZXRjd2R1IiwgTlVMTCk7CisgICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgfQogICAgICAgICByZXNvYmogPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdidWYyLCBsZW4pOwotICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7CisgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmMik7CiAgICAgICAgIHJldHVybiByZXNvYmo7CiAgICAgfQogCkBAIC0zMjg4LDExICszNDI4LDcgQEAKICNlbmRpZgogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmVzID0gX2dldGN3ZDIoYnVmLCBzaXplb2YgYnVmKTsKLSNlbHNlCiAgICAgcmVzID0gZ2V0Y3dkKGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0jZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC0zMzIwLDcgKzM0NTYsNiBAQAogewogICAgIHJldHVybiBwb3NpeF9nZXRjd2QoMSk7CiB9Ci0jZW5kaWYKIAogI2lmICgoIWRlZmluZWQoSEFWRV9MSU5LKSkgJiYgZGVmaW5lZChNU19XSU5ET1dTKSkKICNkZWZpbmUgSEFWRV9MSU5LIDEKQEAgLTMzNTksNiArMzQ5NCw4IEBACiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSAibGluayI7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAibGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnxPJk8mcDpsaW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnNyYywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmZHN0LApAQCAtMzM4OSw3ICszNTI2LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJsaW5rIiwgZHN0Lm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtMzQwNyw3ICszNTQ0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJsaW5rIiwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTM0MzcsNzIgKzM1NzQsMzUgQEAKICAgdGhlIGZpbGUgZGVzY3JpcHRvciBtdXN0IHJlZmVyIHRvIGEgZGlyZWN0b3J5LlxuXAogICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbGlzdGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgcGF0aF90IHBhdGg7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBpbnQgZmQgPSAtMTsKLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCitzdGF0aWMgUHlPYmplY3QgKgorX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyKHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKmxpc3QpCit7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqdjsKICAgICBIQU5ETEUgaEZpbmRGaWxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgQk9PTCByZXN1bHQ7CiAgICAgV0lOMzJfRklORF9EQVRBIEZpbGVEYXRhOwotICAgIGNoYXIgbmFtZWJ1ZltNQVhfUEFUSCs1XTsgLyogT3ZlcmFsbG9jYXRlIGZvciBcXCouKlwwICovCisgICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzRdOyAvKiBPdmVyYWxsb2NhdGUgZm9yICJcKi4qIiAqLwogICAgIGNoYXIgKmJ1ZnB0ciA9IG5hbWVidWY7CiAgICAgLyogb25seSBjbGFpbSB0byBoYXZlIHNwYWNlIGZvciBNQVhfUEFUSCAqLwotICAgIFB5X3NzaXplX3QgbGVuID0gc2l6ZW9mKG5hbWVidWYpLTU7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeV9BUlJBWV9MRU5HVEgobmFtZWJ1ZiktNDsKICAgICBQeU9iamVjdCAqcG8gPSBOVUxMOwogICAgIHdjaGFyX3QgKnduYW1lYnVmID0gTlVMTDsKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jaWZuZGVmIE1BWF9QQVRICi0jZGVmaW5lIE1BWF9QQVRIICAgIENDSE1BWFBBVEgKLSNlbmRpZgotICAgIGNoYXIgKnB0OwotICAgIFB5T2JqZWN0ICp2OwotICAgIGNoYXIgbmFtZWJ1ZltNQVhfUEFUSCs1XTsKLSAgICBIRElSICBoZGlyID0gMTsKLSAgICBVTE9ORyBzcmNoY250ID0gMTsKLSAgICBGSUxFRklOREJVRjMgICBlcDsKLSAgICBBUElSRVQgcmM7Ci0jZWxzZQotICAgIFB5T2JqZWN0ICp2OwotICAgIERJUiAqZGlycCA9IE5VTEw7Ci0gICAgc3RydWN0IGRpcmVudCAqZXA7Ci0gICAgaW50IHJldHVybl9zdHI7IC8qIGlmIGZhbHNlLCByZXR1cm4gYnl0ZXMgKi8KLSNlbmRpZgogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGgubnVsbGFibGUgPSAxOwotI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgcGF0aC5mZCA9IC0xOwotI2VuZGlmCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoCi0gICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogWFhYIFNob3VsZCByZWRvIHRoaXMgcHV0dGluZyB0aGUgKG5vdyBmb3VyKSB2ZXJzaW9ucyBvZiBvcGVuZGlyCi0gICAgICAgaW4gc2VwYXJhdGUgZmlsZXMgaW5zdGVhZCBvZiBoYXZpbmcgdGhlbSBhbGwgaGVyZS4uLiAqLwotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQotICAgIGlmICghcGF0aC5uYXJyb3cpIHsKKyAgICBpZiAoIXBhdGgtPm5hcnJvdykgewogICAgICAgICBXSU4zMl9GSU5EX0RBVEFXIHdGaWxlRGF0YTsKICAgICAgICAgd2NoYXJfdCAqcG9fd2NoYXJzOwogCi0gICAgICAgIGlmICghcGF0aC53aWRlKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgaWYgKCFwYXRoLT53aWRlKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KICAgICAgICAgICAgIHBvX3djaGFycyA9IEwiLiI7CiAgICAgICAgICAgICBsZW4gPSAxOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcG9fd2NoYXJzID0gcGF0aC53aWRlOwotICAgICAgICAgICAgbGVuID0gd2NzbGVuKHBhdGgud2lkZSk7CisgICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLT53aWRlOworICAgICAgICAgICAgbGVuID0gd2NzbGVuKHBhdGgtPndpZGUpOwogICAgICAgICB9CiAgICAgICAgIC8qIFRoZSArNSBpcyBzbyB3ZSBjYW4gYXBwZW5kICJcXCouKlwwIiAqLwotICAgICAgICB3bmFtZWJ1ZiA9IG1hbGxvYygobGVuICsgNSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICB3bmFtZWJ1ZiA9IFB5TWVtX01hbGxvYygobGVuICsgNSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoIXduYW1lYnVmKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMzUxMCw4ICszNjEwLDggQEAKICAgICAgICAgd2NzY3B5KHduYW1lYnVmLCBwb193Y2hhcnMpOwogICAgICAgICBpZiAobGVuID4gMCkgewogICAgICAgICAgICAgd2NoYXJfdCB3Y2ggPSB3bmFtZWJ1ZltsZW4tMV07Ci0gICAgICAgICAgICBpZiAod2NoICE9IEwnLycgJiYgd2NoICE9IEwnXFwnICYmIHdjaCAhPSBMJzonKQotICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IEwnXFwnOworICAgICAgICAgICAgaWYgKHdjaCAhPSBTRVAgJiYgd2NoICE9IEFMVFNFUCAmJiB3Y2ggIT0gTCc6JykKKyAgICAgICAgICAgICAgICB3bmFtZWJ1ZltsZW4rK10gPSBTRVA7CiAgICAgICAgICAgICB3Y3NjcHkod25hbWVidWYgKyBsZW4sIEwiKi4qIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzUyNSw4ICszNjI1LDcgQEAKICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmRGaXJzdEZpbGVXIiwgd25hbWVidWYpOworICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgZG8gewpAQCAtMzU1NSwxOSArMzY1NCwxOSBAQAogICAgICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KICAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmROZXh0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gVFJVRSk7CiAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC5uYXJyb3cpOwotICAgIGxlbiA9IHBhdGgubGVuZ3RoOworICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLT5uYXJyb3cpOworICAgIGxlbiA9IHBhdGgtPmxlbmd0aDsKICAgICBpZiAobGVuID4gMCkgewogICAgICAgICBjaGFyIGNoID0gbmFtZWJ1ZltsZW4tMV07Ci0gICAgICAgIGlmIChjaCAhPSBTRVAgJiYgY2ggIT0gQUxUU0VQICYmIGNoICE9ICc6JykKLSAgICAgICAgICAgIG5hbWVidWZbbGVuKytdID0gJy8nOworICAgICAgICBpZiAoY2ggIT0gJ1xcJyAmJiBjaCAhPSAnLycgJiYgY2ggIT0gJzonKQorICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnXFwnOwogICAgICAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOwogICAgIH0KIApAQCAtMzU4Miw3ICszNjgxLDcgQEAKICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZEZpcnN0RmlsZSIsIG5hbWVidWYpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBkbyB7CkBAIC0zNjEwLDcgKzM3MDksNyBAQAogICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3IoIkZpbmROZXh0RmlsZSIsIG5hbWVidWYpOworICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChyZXN1bHQgPT0gVFJVRSk7CkBAIC0zNjIwLDg4ICszNzE5LDMzIEBACiAgICAgICAgIGlmIChGaW5kQ2xvc2UoaEZpbmRGaWxlKSA9PSBGQUxTRSkgewogICAgICAgICAgICAgaWYgKGxpc3QgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJGaW5kQ2xvc2UiLCBwYXRoLm9iamVjdCk7CisgICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHduYW1lYnVmKQotICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIFB5TWVtX0ZyZWUod25hbWVidWYpOwogCiAgICAgcmV0dXJuIGxpc3Q7Cit9ICAvKiBlbmQgb2YgX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyICovCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgaWYgKHBhdGgubGVuZ3RoID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAicGF0aCB0b28gbG9uZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgZm9yIChwdCA9IG5hbWVidWY7ICpwdDsgcHQrKykKLSAgICAgICAgaWYgKCpwdCA9PSBBTFRTRVApCi0gICAgICAgICAgICAqcHQgPSBTRVA7Ci0gICAgaWYgKG5hbWVidWZbbGVuLTFdICE9IFNFUCkKLSAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSBTRVA7Ci0gICAgc3RyY3B5KG5hbWVidWYgKyBsZW4sICIqLioiKTsKKyNlbHNlICAvKiB0aHVzIFBPU0lYLCBpZTogbm90IChNU19XSU5ET1dTIGFuZCBub3QgSEFWRV9PUEVORElSKSAqLwogCi0gICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgcmMgPSBEb3NGaW5kRmlyc3QobmFtZWJ1ZiwgICAgICAgICAvKiBXaWxkY2FyZCBQYXR0ZXJuIHRvIE1hdGNoICovCi0gICAgICAgICAgICAgICAgICAgICAgJmhkaXIsICAgICAgICAgICAvKiBIYW5kbGUgdG8gVXNlIFdoaWxlIFNlYXJjaCBEaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICBGSUxFX1JFQURPTkxZIHwgRklMRV9ISURERU4gfCBGSUxFX1NZU1RFTSB8IEZJTEVfRElSRUNUT1JZLAotICAgICAgICAgICAgICAgICAgICAgICZlcCwgc2l6ZW9mKGVwKSwgLyogU3RydWN0dXJlIHRvIFJlY2VpdmUgRGlyZWN0b3J5IEVudHJ5ICovCi0gICAgICAgICAgICAgICAgICAgICAgJnNyY2hjbnQsICAgICAgICAvKiBNYXggYW5kIEFjdHVhbCBDb3VudCBvZiBFbnRyaWVzIFBlciBJdGVyYXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICBGSUxfU1RBTkRBUkQpOyAgIC8qIEZvcm1hdCBvZiBFbnRyeSAoRUFzIG9yIE5vdCkgKi8KLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJubyA9IEVOT0VOVDsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICBsaXN0ID0gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoLm5hcnJvdyk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoc3JjaGNudCA+IDApIHsgLyogSWYgRGlyZWN0b3J5IGlzIE5PVCBUb3RhbGx5IEVtcHR5LCAqLwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZXAuYWNoTmFtZVswXSA9PSAnLicKLSAgICAgICAgICAgICYmIChlcC5hY2hOYW1lWzFdID09ICdcMCcgfHwgKGVwLmFjaE5hbWVbMV0gPT0gJy4nICYmIGVwLmFjaE5hbWVbMl0gPT0gJ1wwJykpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBTa2lwIE92ZXIgIi4iIGFuZCAiLi4iIE5hbWVzICovCi0KLSAgICAgICAgICAgIHN0cmNweShuYW1lYnVmLCBlcC5hY2hOYW1lKTsKLQotICAgICAgICAgICAgLyogTGVhdmUgQ2FzZSBvZiBOYW1lIEFsb25lIC0tIEluIE5hdGl2ZSBGb3JtICovCi0gICAgICAgICAgICAvKiAoUmVtb3ZlZCBGb3JjZWQgTG93ZXJjYXNpbmcgQ29kZSkgKi8KLQotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhuYW1lYnVmKTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgfSB3aGlsZSAoRG9zRmluZE5leHQoaGRpciwgJmVwLCBzaXplb2YoZXApLCAmc3JjaGNudCkgPT0gTk9fRVJST1IgJiYgc3JjaGNudCA+IDApOwotICAgIH0KLQotZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0jZWxzZQorc3RhdGljIFB5T2JqZWN0ICoKK19wb3NpeF9saXN0ZGlyKHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKmxpc3QpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgRElSICpkaXJwID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICplcDsKKyAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLworI2lmZGVmIEhBVkVfRkRPUEVORElSCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKIAogICAgIGVycm5vID0gMDsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGlmIChwYXRoLmZkICE9IC0xKSB7CisgICAgaWYgKHBhdGgtPmZkICE9IC0xKSB7CiAgICAgICAgIC8qIGNsb3NlZGlyKCkgY2xvc2VzIHRoZSBGRCwgc28gd2UgZHVwbGljYXRlIGl0ICovCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZmQgPSBkdXAocGF0aC5mZCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KKyAgICAgICAgZmQgPSBfUHlfZHVwKHBhdGgtPmZkKTsKICAgICAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgICAgICBsaXN0ID0gcG9zaXhfZXJyb3IoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM3MTcsMTAgKzM3NjEsMTAgQEAKICNlbmRpZgogICAgIHsKICAgICAgICAgY2hhciAqbmFtZTsKLSAgICAgICAgaWYgKHBhdGgubmFycm93KSB7Ci0gICAgICAgICAgICBuYW1lID0gcGF0aC5uYXJyb3c7CisgICAgICAgIGlmIChwYXRoLT5uYXJyb3cpIHsKKyAgICAgICAgICAgIG5hbWUgPSBwYXRoLT5uYXJyb3c7CiAgICAgICAgICAgICAvKiBvbmx5IHJldHVybiBieXRlcyBpZiB0aGV5IHNwZWNpZmllZCBhIGJ5dGVzIG9iamVjdCAqLwotICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLm9iamVjdCkpOworICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLT5vYmplY3QpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG5hbWUgPSAiLiI7CkBAIC0zNzMzLDE0ICszNzc3LDE0IEBACiAgICAgfQogCiAgICAgaWYgKGRpcnAgPT0gTlVMTCkgewotICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKICAgICAgICAgaWYgKGZkICE9IC0xKSB7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICB9Ci0jZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KKyNlbmRpZgogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKQEAgLTM3NTYsNyArMzgwMCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3ODYsMTcgKzM4MzAsNDQgQEAKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgPiAtMSkKICAgICAgICAgICAgIHJld2luZGRpcihkaXJwKTsKLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGNsb3NlZGlyKGRpcnApOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfcG9zaXhfbGlzdGRpciAqLworI2VuZGlmICAvKiB3aGljaCBPUyAqLwogCi0jZW5kaWYgLyogd2hpY2ggT1MgKi8KLX0gIC8qIGVuZCBvZiBwb3NpeF9saXN0ZGlyICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfbGlzdGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKmxpc3QgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKKworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdGRpciI7CisgICAgcGF0aC5udWxsYWJsZSA9IDE7CisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBwYXRoLmFsbG93X2ZkID0gMTsKKyAgICBwYXRoLmZkID0gLTE7CisjZW5kaWYKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJjpsaXN0ZGlyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKKyAgICByZXR1cm5fdmFsdWUgPSBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIoJnBhdGgsIGxpc3QpOworI2Vsc2UKKyAgICByZXR1cm5fdmFsdWUgPSBfcG9zaXhfbGlzdGRpcigmcGF0aCwgbGlzdCk7CisjZW5kaWYKKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKICNpZmRlZiBNU19XSU5ET1dTCiAvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgYWJzcGF0aCBvbiB3aW4zMiAqLwpAQCAtMzgwNCwxNCArMzg3NSwxNCBAQAogcG9zaXhfX2dldGZ1bGxwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSCoyXTsKKyAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSF07CiAgICAgY2hhciAqdGVtcDsKICAgICBQeU9iamVjdCAqcG87CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldGZ1bGxwYXRobmFtZSIsICZwbykpCiAgICAgewogICAgICAgICB3Y2hhcl90ICp3cGF0aDsKLSAgICAgICAgd2NoYXJfdCB3b3V0YnVmW01BWF9QQVRIKjJdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOworICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEhdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOwogICAgICAgICB3Y2hhcl90ICp3dGVtcDsKICAgICAgICAgRFdPUkQgcmVzdWx0OwogICAgICAgICBQeU9iamVjdCAqdjsKQEAgLTM4MjMsNyArMzg5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfQVJSQVlfTEVOR1RIKHdvdXRidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvdXRidWYsICZ3dGVtcCk7CiAgICAgICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZikpIHsKLSAgICAgICAgICAgIHdvdXRidWZwID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICB3b3V0YnVmcCA9IFB5TWVtX01hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICAgICAgaWYgKCF3b3V0YnVmcCkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7CkBAIC0zODMzLDcgKzM5MDQsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGdWxsUGF0aE5hbWVXIiwgcG8pOwogICAgICAgICBpZiAod291dGJ1ZnAgIT0gd291dGJ1ZikKLSAgICAgICAgICAgIGZyZWUod291dGJ1ZnApOworICAgICAgICAgICAgUHlNZW1fRnJlZSh3b3V0YnVmcCk7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCkBAIC0zOTAzLDcgKzM5NzQsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIiwgcG8pOwogCi0gICAgdGFyZ2V0X3BhdGggPSAod2NoYXJfdCAqKW1hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmKCF0YXJnZXRfcGF0aCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTM5MTcsMzYgKzM5ODgsMTEgQEAKIAogICAgIHRhcmdldF9wYXRoW3Jlc3VsdF9sZW5ndGhdID0gMDsKICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHRhcmdldF9wYXRoLCByZXN1bHRfbGVuZ3RoKTsKLSAgICBmcmVlKHRhcmdldF9wYXRoKTsKKyAgICBQeU1lbV9GcmVlKHRhcmdldF9wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogCiB9IC8qIGVuZCBvZiBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfX2dldGZpbGVpbmZvcm1hdGlvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSEFORExFIGhGaWxlOwotICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGluZm87Ci0gICAgaW50IGZkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOl9nZXRmaWxlaW5mb3JtYXRpb24iLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBoRmlsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOwotICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGhGaWxlLCAmaW5mbykpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiX2dldGZpbGVpbmZvcm1hdGlvbiIsIE5VTEwpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpaSIsIGluZm8uZHdWb2x1bWVTZXJpYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleEhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleExvdyk7Ci19Ci0KIFB5RG9jX1NUUlZBUihwb3NpeF9faXNkaXJfX2RvY19fLAogIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIpOwogCkBAIC0zOTg1LDYgKzQwMzEsNTUgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKIH0KKworUHlEb2NfU1RSVkFSKHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX18sCisiUmV0dXJuIHZvbHVtZSBtb3VudCBwb2ludCBvZiB0aGUgc3BlY2lmaWVkIHBhdGguIik7CisKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBpc21vdW50IG9uIHdpbmRvd3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwbywgKnJlc3VsdDsKKyAgICB3Y2hhcl90ICpwYXRoLCAqbW91bnRwYXRoPU5VTEw7CisgICAgc2l6ZV90IGJ1ZmxlbjsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldHZvbHVtZXBhdGhuYW1lIiwgJnBvKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGF0aCA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHBvLCAmYnVmbGVuKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWZsZW4gKz0gMTsKKworICAgIC8qIFZvbHVtZSBwYXRoIHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gZW50aXJlIHBhdGggKi8KKyAgICBidWZsZW4gPSBQeV9NQVgoYnVmbGVuLCBNQVhfUEFUSCk7CisKKyAgICBpZiAoYnVmbGVuID4gRFdPUkRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicGF0aCB0b28gbG9uZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtb3VudHBhdGggPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChtb3VudHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0Vm9sdW1lUGF0aE5hbWVXKHBhdGgsIG1vdW50cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChidWZsZW4sIHNpemVfdCwgRFdPUkQpKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgcmVzdWx0ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJfZ2V0dm9sdW1lcGF0aG5hbWUiLCBwbyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb3VudHBhdGgsIHdjc2xlbihtb3VudHBhdGgpKTsKKworZXhpdDoKKyAgICBQeU1lbV9GcmVlKG1vdW50cGF0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy8qIGVuZCBvZiBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUgKi8KKwogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogUHlEb2NfU1RSVkFSKHBvc2l4X21rZGlyX19kb2NfXywKQEAgLTQwMDksNiArNDEwNCw3IEBACiAgICAgaW50IHJlc3VsdDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibWtkaXIiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGkkTyY6bWtkaXIiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwKICNpZmRlZiBIQVZFX01LRElSQVQKQEAgLTQwMjgsNyArNDEyNCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgibWtkaXIiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UKQEAgLTQwNDUsNyArNDE0MSw3IEBACiAjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoIm1rZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtNDE2Myw2ICs0MjU5LDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbl9uYW1lOwogICAgIHN0cmNweShmb3JtYXQsICJPJk8mfCRPJk8mOiIpOwogICAgIHN0cmNhdChmb3JtYXQsIGZ1bmN0aW9uX25hbWUpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgZm9ybWF0LCBrZXl3b3JkcywKQEAgLTQxOTYsNyArNDI5NCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdChmdW5jdGlvbl9uYW1lLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDIxMSw3ICs0MzA5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKGZ1bmN0aW9uX25hbWUsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00Mjc1LDYgKzQzNzMsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJybWRpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnJtZGlyIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDMwMyw3ICs0NDAyLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJybWRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTQ0MzEsNiArNDUzMCw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInVubGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnVubGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfVU5MSU5LQVQKQEAgLTQ0NTksNyArNDU1OSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigidW5saW5rIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDc2Miw2ICs0ODYyLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidXRpbWUiOwogICAgIG1lbXNldCgmdXRpbWUsIDAsIHNpemVvZih1dGltZV90KSk7CiAjaWYgVVRJTUVfSEFWRV9GRAogICAgIHBhdGguYWxsb3dfZmQgPSAxOwpAQCAtNDg1NywxOCArNDk1OCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICB3aW4zMl9lcnJvcl9vYmplY3QoInV0aW1lIiwgcGF0aC5vYmplY3QpOworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogICAgIGlmICh1dGltZS5ub3cpIHsKLSAgICAgICAgU1lTVEVNVElNRSBub3c7Ci0gICAgICAgIEdldFN5c3RlbVRpbWUoJm5vdyk7Ci0gICAgICAgIGlmICghU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJm10aW1lKSB8fAotICAgICAgICAgICAgIVN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZub3csICZhdGltZSkpIHsKLSAgICAgICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisgICAgICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZtdGltZSk7CisgICAgICAgIGF0aW1lID0gbXRpbWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB0aW1lX3RfdG9fRklMRV9USU1FKHV0aW1lLmF0aW1lX3MsIHV0aW1lLmF0aW1lX25zLCAmYXRpbWUpOwpAQCAtNDg3OSw3ICs0OTc1LDcgQEAKICAgICAgICAgICAgYXMgdGhhdCBtYXkgY29uZnVzZSB0aGUgdXNlciBpbnRvIGJlbGlldmluZyB0aGF0CiAgICAgICAgICAgIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBmaWxlLCB3aGVuIGl0IGFsc28KICAgICAgICAgICAgY291bGQgYmUgdGhlIHRpbWUgc3RhbXAgdGhhdCBnaXZlcyBhIHByb2JsZW0uICovCi0gICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTQ5NjIsOCArNTA1OCwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAgICAgKm91dCA9IFB5TWVtX01hbGxvYyhzaXplKzEpOwotICAgIGlmICghKm91dCkKKyAgICBpZiAoISpvdXQpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIG1lbWNweSgqb3V0LCBQeUJ5dGVzX0FzU3RyaW5nKGJ5dGVzKSwgc2l6ZSsxKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgIHJldHVybiAxOwpAQCAtNDk5MSw4ICs1MDg5LDEwIEBACiAgICAgfQogICAgIGVudmMgPSAwOwogICAgIGtleXMgPSBQeU1hcHBpbmdfS2V5cyhlbnYpOworICAgIGlmICgha2V5cykKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB2YWxzID0gUHlNYXBwaW5nX1ZhbHVlcyhlbnYpOwotICAgIGlmICgha2V5cyB8fCAhdmFscykKKyAgICBpZiAoIXZhbHMpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUxpc3RfQ2hlY2soa2V5cykgfHwgIVB5TGlzdF9DaGVjayh2YWxzKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTAxMywxMCArNTExMyw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAvKiBPbWl0IFBzZXVkby1FbnYgVmFycyB0aGF0IFdvdWxkIENvbmZ1c2UgUHJvZ3JhbXMgaWYgUGFzc2VkIE9uICovCi0gICAgICAgIGlmIChzdHJpY21wKGssICJCRUdJTkxJQlBBVEgiKSAhPSAwICYmIHN0cmljbXAoaywgIkVORExJQlBBVEgiKSAhPSAwKSB7Ci0jZW5kaWYKICAgICAgICAgayA9IFB5Qnl0ZXNfQXNTdHJpbmcoa2V5Mik7CiAgICAgICAgIHYgPSBQeUJ5dGVzX0FzU3RyaW5nKHZhbDIpOwogICAgICAgICBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGtleTIpICsgUHlCeXRlc19HRVRfU0laRSh2YWwyKSArIDI7CkBAIC01MDMyLDkgKzUxMjgsNiBAQAogICAgICAgICBlbnZsaXN0W2VudmMrK10gPSBwOwogICAgICAgICBQeV9ERUNSRUYoa2V5Mik7CiAgICAgICAgIFB5X0RFQ1JFRih2YWwyKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgUHlfREVDUkVGKHZhbHMpOwogICAgIFB5X0RFQ1JFRihrZXlzKTsKQEAgLTUxNjAsNiArNTI1Myw3IEBACiAgICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJleGVjdmUiOwogI2lmZGVmIEhBVkVfRkVYRUNWRQogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC01MTk5LDcgKzUyOTMsNyBAQAogCiAgICAgLyogSWYgd2UgZ2V0IGhlcmUgaXQncyBkZWZpbml0ZWx5IGFuIGVycm9yICovCiAKLSAgICBwYXRoX3Bvc2l4X2Vycm9yKCJleGVjdmUiLCAmcGF0aCk7CisgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTUyNzUsMTggKzUzNjksMTIgQEAKICAgICB9CiAgICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZW5kaWYKIAogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKICAgICBQeV9ERUNSRUYob3BhdGgpOwpAQCAtNTI5NCwxMSArNTM4Miw3IEBACiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibCIsIChsb25nKSBzcGF3bnZhbCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiB9CiAKIApAQCAtNTM3NCwyNyArNTQ1OCwxNyBAQAogICAgIGlmIChlbnZsaXN0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbF8xOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2Vsc2UKICAgICBpZiAobW9kZSA9PSBfT0xEX1BfT1ZFUkxBWSkKICAgICAgICAgbW9kZSA9IF9QX09WRVJMQVk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc3Bhd252YWwgPSBfc3Bhd252ZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoIkwiLCAoUFlfTE9OR19MT05HKSBzcGF3bnZhbCk7Ci0jZW5kaWYKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTU0MDYsMTgzICs1NDgwLDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBPUy8yIHN1cHBvcnRzIHNwYXdudnAgJiBzcGF3bnZwZSBuYXRpdmVseSAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cF9fZG9jX18sCi0ic3Bhd252cChtb2RlLCBmaWxlLCBhcmdzKVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3Y7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGludCBtb2RlLCBpLCBhcmdjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotCi0gICAgLyogc3Bhd252cCBoYXMgdGhyZWUgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncy4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mTzpzcGF3bnZwIiwgJm1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKLSAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeVR1cGxlX1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7Ci0gICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCFmc2NvbnZlcnRfc3RyZHVwKCgqZ2V0aXRlbSkoYXJndiwgaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJndmxpc3RbaV0pKSB7Ci0gICAgICAgICAgICBmcmVlX3N0cmluZ19hcnJheShhcmd2bGlzdCwgaSk7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJzcGF3bnZwKCkgYXJnIDIgbXVzdCBjb250YWluIG9ubHkgc3RyaW5ncyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIGFyZ3ZsaXN0W2FyZ2NdID0gTlVMTDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZWxzZQotICAgIHNwYXdudmFsID0gX3NwYXdudnAobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLX0KLQotCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cGVfX2RvY19fLAotInNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3MsIGVudilcblxuXAotRXhlY3V0ZSB0aGUgcHJvZ3JhbSAnZmlsZScgaW4gYSBuZXcgcHJvY2VzcywgdXNpbmcgdGhlIGVudmlyb25tZW50XG5cCi1zZWFyY2ggcGF0aCB0byBmaW5kIHRoZSBmaWxlLlxuXAotXG5cCi0gICAgbW9kZTogbW9kZSBvZiBwcm9jZXNzIGNyZWF0aW9uXG5cCi0gICAgZmlsZTogZXhlY3V0YWJsZSBmaWxlIG5hbWVcblwKLSAgICBhcmdzOiB0dXBsZSBvciBsaXN0IG9mIGFyZ3VtZW50c1xuXAotICAgIGVudjogZGljdGlvbmFyeSBvZiBzdHJpbmdzIG1hcHBpbmcgdG8gc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOwotICAgIFB5T2JqZWN0ICphcmd2LCAqZW52OwotICAgIGNoYXIgKiphcmd2bGlzdDsKLSAgICBjaGFyICoqZW52bGlzdDsKLSAgICBQeU9iamVjdCAqcmVzPU5VTEw7Ci0gICAgaW50IG1vZGU7Ci0gICAgUHlfc3NpemVfdCBhcmdjLCBpLCBlbnZjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotICAgIGludCBsYXN0YXJnID0gMDsKLQotICAgIC8qIHNwYXdudnBlIGhhcyBmb3VyIGFyZ3VtZW50czogKG1vZGUsIHBhdGgsIGFyZ3YsIGVudiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncyBhbmQgZW52IGlzIGEgZGljdGlvbmFyeQotICAgICAgIGxpa2UgcG9zaXguZW52aXJvbi4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWV0T086c3Bhd252cGUiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2LCAmZW52KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soZW52KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnBlKCkgYXJnIDMgbXVzdCBiZSBhIG1hcHBpbmcgb2JqZWN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RhcmcgPSBpOwotICAgICAgICAgICAgZ290byBmYWlsXzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGFzdGFyZyA9IGFyZ2M7Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgZW52bGlzdCA9IHBhcnNlX2Vudmxpc3QoZW52LCAmZW52Yyk7Ci0gICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsXzE7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBzcGF3bnZhbCA9IHNwYXdudnBlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChzcGF3bnZhbCA9PSAtMSkKLSAgICAgICAgKHZvaWQpIHBvc2l4X2Vycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLQotICAgIHdoaWxlICgtLWVudmMgPj0gMCkKLSAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwotICAgIFB5TWVtX0RFTChlbnZsaXN0KTsKLSAgZmFpbF8xOgotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKLSAgZmFpbF8wOgotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAKIApAQCAtNjA4NSw3ICs1OTgyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9vcGVucHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotICAgIGludCBtYXN0ZXJfZmQsIHNsYXZlX2ZkOworICAgIGludCBtYXN0ZXJfZmQgPSAtMSwgc2xhdmVfZmQgPSAtMTsKICNpZm5kZWYgSEFWRV9PUEVOUFRZCiAgICAgY2hhciAqIHNsYXZlX25hbWU7CiAjZW5kaWYKQEAgLTYwOTgsMzcgKzU5OTUsNTYgQEAKIAogI2lmZGVmIEhBVkVfT1BFTlBUWQogICAgIGlmIChvcGVucHR5KCZtYXN0ZXJfZmQsICZzbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzbGF2ZV9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAjZWxpZiBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKICAgICBzbGF2ZV9uYW1lID0gX2dldHB0eSgmbWFzdGVyX2ZkLCBPX1JEV1IsIDA2NjYsIDApOwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgc2xhdmVfZmQgPSBvcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CisgICAgc2xhdmVfZmQgPSBfUHlfb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IpOwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAjZWxzZQogICAgIG1hc3Rlcl9mZCA9IG9wZW4oREVWX1BUWV9GSUxFLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gbWFzdGVyICovCiAgICAgaWYgKG1hc3Rlcl9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAgICAgc2lnX3NhdmVkID0gUHlPU19zZXRzaWcoU0lHQ0hMRCwgU0lHX0RGTCk7CisKICAgICAvKiBjaGFuZ2UgcGVybWlzc2lvbiBvZiBzbGF2ZSAqLwogICAgIGlmIChncmFudHB0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIC8qIHVubG9jayBzbGF2ZSAqLwogICAgIGlmICh1bmxvY2twdChtYXN0ZXJfZmQpIDwgMCkgewogICAgICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKICAgICB9CisKICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOworCiAgICAgc2xhdmVfbmFtZSA9IHB0c25hbWUobWFzdGVyX2ZkKTsgLyogZ2V0IG5hbWUgb2Ygc2xhdmUgKi8KICAgICBpZiAoc2xhdmVfbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChIQVZFX0RFVl9QVEMpCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgInB0ZW0iKTsgLyogcHVzaCBwdGVtICovCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgImxkdGVybSIpOyAvKiBwdXNoIGxkdGVybSAqLwpAQCAtNjE0MCw2ICs2MDU2LDE2IEBACiAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1hc3Rlcl9mZCwgc2xhdmVfZmQpOwogCitwb3NpeF9lcnJvcjoKKyAgICBwb3NpeF9lcnJvcigpOworI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKK2Vycm9yOgorI2VuZGlmCisgICAgaWYgKG1hc3Rlcl9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2UobWFzdGVyX2ZkKTsKKyAgICBpZiAoc2xhdmVfZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKHNsYXZlX2ZkKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkgKi8KIApAQCAtNjYzMiwyMyArNjU1OCw4IEBACiAgICAgaW50IHNpZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpraWxsIiwgJnBpZCwgJnNpZykpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzaWcgPT0gWENQVF9TSUdOQUxfSU5UUiB8fCBzaWcgPT0gWENQVF9TSUdOQUxfQlJFQUspIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBpZiAoKHJjID0gRG9zU2VuZFNpZ25hbEV4Y2VwdGlvbihwaWQsIHNpZykpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICB9IGVsc2UgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9LSUxMUFJPQykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NLaWxsUHJvY2VzcyhES1BfUFJPQ0VTUywgcGlkKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsgLyogVW5yZWNvZ25pemVkIFNpZ25hbCBSZXF1ZXN0ZWQgKi8KLSNlbHNlCiAgICAgaWYgKGtpbGwocGlkLCBzaWcpID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSNlbmRpZgogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTY2ODYsMTYgKzY1OTcsMTcgQEAKIHdpbjMyX2tpbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgRFdPUkQgcGlkLCBzaWcsIGVycjsKKyAgICBwaWRfdCBwaWQ7CisgICAgRFdPUkQgc2lnLCBlcnI7CiAgICAgSEFORExFIGhhbmRsZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2s6a2lsbCIsICZwaWQsICZzaWcpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJrOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBDb25zb2xlIHByb2Nlc3NlcyB3aGljaCBzaGFyZSBhIGNvbW1vbiBjb25zb2xlIGNhbiBiZSBzZW50IENUUkwrQyBvcgogICAgICAgIENUUkwrQlJFQUsgZXZlbnRzLCBwcm92aWRlZCB0aGV5IGhhbmRsZSBzYWlkIGV2ZW50cy4gKi8KICAgICBpZiAoc2lnID09IENUUkxfQ19FVkVOVCB8fCBzaWcgPT0gQ1RSTF9CUkVBS19FVkVOVCkgewotICAgICAgICBpZiAoR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50KHNpZywgcGlkKSA9PSAwKSB7CisgICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCAoRFdPUkQpcGlkKSA9PSAwKSB7CiAgICAgICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CiAgICAgICAgIH0KQEAgLTY3MDUsNyArNjYxNyw3IEBACiAKICAgICAvKiBJZiB0aGUgc2lnbmFsIGlzIG91dHNpZGUgb2Ygd2hhdCBHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQgY2FuIHVzZSwKICAgICAgICBhdHRlbXB0IHRvIG9wZW4gYW5kIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gKi8KLSAgICBoYW5kbGUgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZBTFNFLCBwaWQpOworICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIChEV09SRClwaWQpOwogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewogICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CkBAIC03MTExLDcgKzcwMjMsNyBAQAogICAgIFB5X2ludHB0cl90IHBpZDsKICAgICBpbnQgc3RhdHVzLCBvcHRpb25zOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcGlkID0gX2N3YWl0KCZzdGF0dXMsIHBpZCwgb3B0aW9ucyk7CkBAIC03MTIwLDcgKzcwMzIsNyBAQAogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKIAogICAgIC8qIHNoaWZ0IHRoZSBzdGF0dXMgbGVmdCBhIGJ5dGUgc28gdGhpcyBpcyBtb3JlIGxpa2UgdGhlIFBPU0lYIHdhaXRwaWQgKi8KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBzdGF0dXMgPDwgOCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoX1B5X1BBUlNFX0lOVFBUUiAiaSIsIHBpZCwgc3RhdHVzIDw8IDgpOwogfQogI2VuZGlmIC8qIEhBVkVfV0FJVFBJRCB8fCBIQVZFX0NXQUlUICovCiAKQEAgLTcxNzEsNiArNzA4Myw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlYWRsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cmVhZGxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfUkVBRExJTktBVApAQCAtNzE5MSw3ICs3MTA0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigicmVhZGxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03MjI3LDggKzcxNDAsOSBAQAogLyogR3JhYiBDcmVhdGVTeW1ib2xpY0xpbmtXIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0NyZWF0ZVN5bWJvbGljTGlua1cpKExQV1NUUiwgTFBXU1RSLCBEV09SRCkgPSBOVUxMOwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSkoTFBTVFIsIExQU1RSLCBEV09SRCkgPSBOVUxMOworCiBzdGF0aWMgaW50Ci1jaGVja19DcmVhdGVTeW1ib2xpY0xpbmsoKQorY2hlY2tfQ3JlYXRlU3ltYm9saWNMaW5rKHZvaWQpCiB7CiAgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKICAgICAvKiBvbmx5IHJlY2hlY2sgKi8KQEAgLTcyNDIsNTUgKzcxNTYsNTcgQEAKICAgICByZXR1cm4gKFB5X0NyZWF0ZVN5bWJvbGljTGlua1cgJiYgUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSk7CiB9CiAKLXZvaWQgX2Rpcm5hbWVXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZVcoV0NIQVIgKnBhdGgpCit7CiAgICAgV0NIQVIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyB3Y3NsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gKkwiXFwiIHx8ICpwdHIgPT0gKkwiLyIpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09IEwnXFwnIHx8ICpwdHIgPT0gTCcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi12b2lkIF9kaXJuYW1lQShjaGFyICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZUEoY2hhciAqcGF0aCkKK3sKICAgICBjaGFyICpwdHI7CiAKICAgICAvKiB3YWxrIHRoZSBwYXRoIGZyb20gdGhlIGVuZCB1bnRpbCBhIGJhY2tzbGFzaCBpcyBlbmNvdW50ZXJlZCAqLwotICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pCi0gICAgewotICAgICAgICBpZigqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHN0cmxlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAqcHRyID0gMDsKIH0KIAotaW50IF9pc19hYnNXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzVyhjb25zdCBXQ0hBUiAqcGF0aCkKK3sKICAgICByZXR1cm4gcGF0aFswXSA9PSBMJ1xcJyB8fCBwYXRoWzBdID09IEwnLycgfHwgcGF0aFsxXSA9PSBMJzonOwogCiB9CiAKLWludCBfaXNfYWJzQShjaGFyICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzQShjb25zdCBjaGFyICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09ICdcXCcgfHwgcGF0aFswXSA9PSAnLycgfHwgcGF0aFsxXSA9PSAnOic7CiAKIH0KIAotdm9pZCBfam9pblcoV0NIQVIgKmRlc3RfcGF0aCwgY29uc3QgV0NIQVIgKnJvb3QsIGNvbnN0IFdDSEFSICpyZXN0KSB7Ci0gICAgLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KLSAgICBpbnQgcm9vdF9sZW47CisvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLworc3RhdGljIHZvaWQKK19qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpCit7CisgICAgc2l6ZV90IHJvb3RfbGVuOwogCi0gICAgaWYoX2lzX2Fic1cocmVzdCkpIHsKKyAgICBpZiAoX2lzX2Fic1cocmVzdCkpIHsKICAgICAgICAgd2NzY3B5KGRlc3RfcGF0aCwgcmVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03Mjk5LDE3ICs3MjE1LDE5IEBACiAKICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewotICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gKkwiXFwiOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gTCdcXCc7CisgICAgICAgIHJvb3RfbGVuKys7CiAgICAgfQogICAgIHdjc2NweShkZXN0X3BhdGgrcm9vdF9sZW4sIHJlc3QpOwogfQogCi12b2lkIF9qb2luQShjaGFyICpkZXN0X3BhdGgsIGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzQShyZXN0KSkgeworICAgIGlmIChfaXNfYWJzQShyZXN0KSkgewogICAgICAgICBzdHJjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTczMTksMTQgKzcyMzcsMTUgQEAKICAgICBzdHJjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewogICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gJ1xcJzsKLSAgICAgICAgcm9vdF9sZW4gKz0gMTsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgc3RyY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLWludCBfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgV0NIQVIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIFdDSEFSIHNyY19yZXNvbHZlZFtNQVhfUEFUSF0gPSBMIiI7CkBAIC03MzQyLDE4ICs3MjYxLDE5IEBACiAgICAgKTsKIH0KIAotaW50IF9jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyQShjaGFyICpzcmMsIGNoYXIgKmRlc3QpCiB7Ci0gICAgLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHNyY19pbmZvOwogICAgIGNoYXIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIGNoYXIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9ICIiOwogCiAgICAgLyogZGVzdF9wYXJlbnQgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdCkgKi8KICAgICBzdHJjcHkoZGVzdF9wYXJlbnQsIGRlc3QpOwotICAgIF9kaXJuYW1lVyhkZXN0X3BhcmVudCk7CisgICAgX2Rpcm5hbWVBKGRlc3RfcGFyZW50KTsKICAgICAvKiBzcmNfcmVzb2x2ZWQgPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXJlbnQsIHNyYykgKi8KLSAgICBfam9pblcoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKKyAgICBfam9pbkEoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKICAgICByZXR1cm4gKAogICAgICAgICBHZXRGaWxlQXR0cmlidXRlc0V4QShzcmNfcmVzb2x2ZWQsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJnNyY19pbmZvKQogICAgICAgICAmJiBzcmNfaW5mby5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZCkBAIC03Mzc5LDggKzcyOTksMTAgQEAKICNlbmRpZgogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBzcmMuYXJndW1lbnRfbmFtZSA9ICJzcmMiOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAic3ltbGluayI7CiAgICAgZHN0LmFyZ3VtZW50X25hbWUgPSAiZHN0IjsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTc0MzMsNyArNzM1NSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgic3ltbGluayIsIHNyYy5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03NDQ5LDcgKzczNzEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInN5bWxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtNzYxMSwzMSArNzUzMyw3IEBACiB0aW1lcy4gIFRoZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGVzZSBmaWVsZHM6XG5cCiAgICh1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lLCBlbGFwc2VkX3RpbWUpIik7CiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCi1zdGF0aWMgbG9uZwotc3lzdGVtX3VwdGltZSh2b2lkKQotewotICAgIFVMT05HICAgICB2YWx1ZSA9IDA7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgRG9zUXVlcnlTeXNJbmZvKFFTVl9NU19DT1VOVCwgUVNWX01TX0NPVU5ULCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90aW1lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKLXsKLSAgICAvKiBDdXJyZW50bHkgT25seSBVcHRpbWUgaXMgUHJvdmlkZWQgLS0gT3RoZXJzIExhdGVyICovCi0gICAgcmV0dXJuIGJ1aWxkX3RpbWVzX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfdXRpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfc3RpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfY3V0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX2NzdGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpc3lzdGVtX3VwdGltZSgpIC8gMTAwMCk7Ci19Ci0jZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3RpbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewpAQCAtNzY1Nyw3ICs3NTU1LDcgQEAKICAgICAgICAgKGRvdWJsZSkwLAogICAgICAgICAoZG91YmxlKTApOwogfQotI2Vsc2UgLyogTmVpdGhlciBXaW5kb3dzIG5vciBPUy8yICovCisjZWxzZSAvKiBOb3QgV2luZG93cyAqLwogI2RlZmluZSBORUVEX1RJQ0tTX1BFUl9TRUNPTkQKIHN0YXRpYyBsb25nIHRpY2tzX3Blcl9zZWNvbmQgPSAtMTsKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03Nzc3LDYgKzc2NzUsMTAgQEAKIAogLyogRnVuY3Rpb25zIGFjdGluZyBvbiBmaWxlIGRlc2NyaXB0b3JzICovCiAKKyNpZmRlZiBPX0NMT0VYRUMKK2V4dGVybiBpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbmRpZgorCiBQeURvY19TVFJWQVIocG9zaXhfb3Blbl9fZG9jX18sCiAib3BlbihwYXRoLCBmbGFncywgbW9kZT0wbzc3NywgKiwgZGlyX2ZkPU5vbmUpXG5cblwKIE9wZW4gYSBmaWxlIGZvciBsb3cgbGV2ZWwgSU8uICBSZXR1cm5zIGEgZmlsZSBoYW5kbGUgKGludGVnZXIpLlxuXApAQCAtNzc5Niw4ICs3Njk4LDE0IEBACiAgICAgaW50IGZkOwogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZsYWdzIiwgIm1vZGUiLCAiZGlyX2ZkIiwgTlVMTH07CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VsaWYgIWRlZmluZWQoTVNfV0lORE9XUykKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJvcGVuIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJml8aSRPJjpvcGVuIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgJmZsYWdzLCAmbW9kZSwKQEAgLTc4MDksNiArNzcxNywxMiBAQAogICAgICAgICApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmbGFncyB8PSBPX05PSU5IRVJJVDsKKyNlbGlmIGRlZmluZWQoT19DTE9FWEVDKQorICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAocGF0aC53aWRlKQpAQCAtNzgyNCwxNiArNzczOCwxNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoZmQgPT0gLTEpIHsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIC8qIGZvcmNlIHVzZSBvZiBwb3NpeF9lcnJvciBoZXJlIGZvciBleGFjdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICBpZiAocGF0aC53aWRlKQotICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZXJyb3IoKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoIm9wZW4iLCAmcGF0aCk7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBwYXRoLm9iamVjdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIAogZXhpdDoKQEAgLTc4OTAsMTMgKzc4MDUsMTQgQEAKIHBvc2l4X2R1cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgaW50IGZkOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmR1cCIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgZmQgPSBkdXAoZmQpOwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgZmQgPSBfUHlfZHVwKGZkKTsKKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylmZCk7CiB9CiAKQEAgLTc5MDYsMTYgKzc4MjIsODIgQEAKIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9kdXAyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3Bvc2l4X2R1cDIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIGludCBmZCwgZmQyLCByZXM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpkdXAyIiwgJmZkLCAmZmQyKSkKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiZmQiLCAiZmQyIiwgImluaGVyaXRhYmxlIiwgTlVMTH07CisgICAgaW50IGZkLCBmZDI7CisgICAgaW50IGluaGVyaXRhYmxlID0gMTsKKyAgICBpbnQgcmVzOworI2lmIGRlZmluZWQoSEFWRV9EVVAzKSAmJiBcCisgICAgIShkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKSkKKyAgICAvKiBkdXAzKCkgaXMgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNysgYW5kIGdsaWJjIDIuOSAqLworICAgIGludCBkdXAzX3dvcmtzID0gLTE7CisjZW5kaWYKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImlpfGk6ZHVwMiIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZCwgJmZkMiwgJmluaGVyaXRhYmxlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBpZiAoIV9QeVZlcmlmeV9mZF9kdXAyKGZkLCBmZDIpKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIC8qIENoYXJhY3RlciBmaWxlcyBsaWtlIGNvbnNvbGUgY2Fubm90IGJlIG1ha2Ugbm9uLWluaGVyaXRhYmxlICovCisgICAgaWYgKCFpbmhlcml0YWJsZSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKGZkMiwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkMik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2VsaWYgZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgaWYgKCFpbmhlcml0YWJsZSkKKyAgICAgICAgcmVzID0gZmNudGwoZmQsIEZfRFVQMkZEX0NMT0VYRUMsIGZkMik7CisgICAgZWxzZQorICAgICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisjZWxzZQorCisjaWZkZWYgSEFWRV9EVVAzCisgICAgaWYgKCFpbmhlcml0YWJsZSAmJiBkdXAzX3dvcmtzICE9IDApIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBkdXAzKGZkLCBmZDIsIE9fQ0xPRVhFQyk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICBpZiAoZHVwM193b3JrcyA9PSAtMSkKKyAgICAgICAgICAgICAgICBkdXAzX3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgICAgICBpZiAoZHVwM193b3JrcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSB8fCBkdXAzX3dvcmtzID09IDApCisgICAgeworI2VuZGlmCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgICAgICBpZiAoIWluaGVyaXRhYmxlICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoZmQyLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGZkMik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorI2lmZGVmIEhBVkVfRFVQMworICAgIH0KKyNlbmRpZgorCisjZW5kaWYKKwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTc5NTksNyArNzk0MSw3IEBACiBwb3NpeF9sc2VlayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgaW50IGZkLCBob3c7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQWV9MT05HX0xPTkcgcG9zLCByZXM7CiAjZWxzZQogICAgIG9mZl90IHBvcywgcmVzOwpAQCAtNzk4Nyw3ICs3OTY5LDcgQEAKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIHJlcyA9IF9sc2Vla2k2NChmZCwgcG9zLCBob3cpOwogI2Vsc2UKICAgICByZXMgPSBsc2VlayhmZCwgcG9zLCBob3cpOwpAQCAtODE5Myw3ICs4MTc1LDcgQEAKICAgICB9CiAgICAgbGVuID0gcGJ1Zi5sZW47CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKGxlbiA+IElOVF9NQVgpCiAgICAgICAgIGxlbiA9IElOVF9NQVg7CiAgICAgc2l6ZSA9IHdyaXRlKGZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOwpAQCAtODIzMCwxMiArODIxMiwxMyBAQAogICAgIG9mZl90IHNieXRlczsKICAgICBzdHJ1Y3Qgc2ZfaGR0ciBzZjsKICAgICBpbnQgZmxhZ3MgPSAwOwotICAgIHNmLmhlYWRlcnMgPSBOVUxMOwotICAgIHNmLnRyYWlsZXJzID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsib3V0IiwgImluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZnNldCIsICJjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgImZsYWdzIiwgTlVMTH07CiAKKyAgICBzZi5oZWFkZXJzID0gTlVMTDsKKyAgICBzZi50cmFpbGVycyA9IE5VTEw7CisKICNpZmRlZiBfX0FQUExFX18KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJpaU8mTyZ8T09pOnNlbmRmaWxlIiwKICAgICAgICAga2V5d29yZHMsICZvdXQsICZpbiwgX3BhcnNlX29mZl90LCAmb2Zmc2V0LCBfcGFyc2Vfb2ZmX3QsICZzYnl0ZXMsCkBAIC04MzY4LDcgKzgzNTEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyAhPSAwKSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImZzdGF0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogI2VuZGlmCkBAIC04NDAxLDM1ICs4Mzg0LDY5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfcGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEhGSUxFIHJlYWQsIHdyaXRlOwotICAgIEFQSVJFVCByYzsKLQotICAgIHJjID0gRG9zQ3JlYXRlUGlwZSggJnJlYWQsICZ3cml0ZSwgNDA5Nik7Ci0gICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgcmVhZCwgd3JpdGUpOwotI2Vsc2UKLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKQogICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlczsKLSAgICByZXMgPSBwaXBlKGZkcyk7Ci0gICAgaWYgKHJlcyAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLSNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgSEFORExFIHJlYWQsIHdyaXRlOwotICAgIGludCByZWFkX2ZkLCB3cml0ZV9mZDsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIGF0dHI7CiAgICAgQk9PTCBvazsKLSAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgTlVMTCwgMCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJDcmVhdGVQaXBlIiwgTlVMTCk7Ci0gICAgcmVhZF9mZCA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgMCk7Ci0gICAgd3JpdGVfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXdyaXRlLCAxKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWRfZmQsIHdyaXRlX2ZkKTsKLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjZWxzZQorICAgIGludCByZXM7CiAjZW5kaWYKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBhdHRyLm5MZW5ndGggPSBzaXplb2YoYXR0cik7CisgICAgYXR0ci5scFNlY3VyaXR5RGVzY3JpcHRvciA9IE5VTEw7CisgICAgYXR0ci5iSW5oZXJpdEhhbmRsZSA9IEZBTFNFOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIG9rID0gQ3JlYXRlUGlwZSgmcmVhZCwgJndyaXRlLCAmYXR0ciwgMCk7CisgICAgaWYgKG9rKSB7CisgICAgICAgIGZkc1swXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgX09fUkRPTkxZKTsKKyAgICAgICAgZmRzWzFdID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgX09fV1JPTkxZKTsKKyAgICAgICAgaWYgKGZkc1swXSA9PSAtMSB8fCBmZHNbMV0gPT0gLTEpIHsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHJlYWQpOworICAgICAgICAgICAgQ2xvc2VIYW5kbGUod3JpdGUpOworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICB9CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorCisjaWZkZWYgSEFWRV9QSVBFMgorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBwaXBlMihmZHMsIE9fQ0xPRVhFQyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCisgICAgeworI2VuZGlmCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gcGlwZShmZHMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzBdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZHNbMV0sIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1swXSk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzFdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIEhBVkVfUElQRTIKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOwogfQogI2VuZGlmICAvKiBIQVZFX1BJUEUgKi8KIApAQCAtODcyOCw2ICs4NzQ1LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJsZW5ndGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidHJ1bmNhdGUiOwogI2lmZGVmIEhBVkVfRlRSVU5DQVRFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTg3NDUsNyArODc2Myw3IEBACiAgICAgICAgIHJlcyA9IHRydW5jYXRlKHBhdGgubmFycm93LCBsZW5ndGgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInRydW5jYXRlIiwgJnBhdGgpOworICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwpAQCAtOTE2OCw2ICs5MTg2LDEwIEBACiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA4LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfZmxhZykpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgOSwgUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdC5mX25hbWVtYXgpKTsKICNlbmRpZgorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHY7CiB9CkBAIC05MjE3LDYgKzkyMzksNyBAQAogICAgIHN0cnVjdCBzdGF0dmZzIHN0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzdGF0dmZzIjsKICNpZmRlZiBIQVZFX0ZTVEFUVkZTCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTkyNDMsNyArOTI2Niw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigic3RhdHZmcyIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTk0ODAsNiArOTUwMyw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibmFtZSIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJwYXRoY29uZiI7CiAjaWZkZWYgSEFWRV9GUEFUSENPTkYKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTUwMCw3ICs5NTI0LDcgQEAKICAgICAgICAgICAgIC8qIGNvdWxkIGJlIGEgcGF0aCBvciBuYW1lIHByb2JsZW0gKi8KICAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInBhdGhjb25mIiwgJnBhdGgpOworICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKGxpbWl0KTsKQEAgLTk2ODIsNyArOTcwNiw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IG5hbWU7CiAgICAgY2hhciBidWZmZXJbMjU1XTsKLSAgICBpbnQgbGVuOworICAgIHNpemVfdCBsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmNvbmZzdHIiLCBjb252X2NvbmZzdHJfY29uZm5hbWUsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05Njk5LDcgKzk3MjMsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCh1bnNpZ25lZCBpbnQpbGVuID49IHNpemVvZihidWZmZXIpKSB7CisgICAgaWYgKGxlbiA+PSBzaXplb2YoYnVmZmVyKSkgewogICAgICAgICBjaGFyICpidWYgPSBQeU1lbV9NYWxsb2MobGVuKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDIyOSw3ICsxMDI1Myw3IEBACiAgICAgaW50IG5hbWU7CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6c3lzY29uZiIsIGNvbnZfc3lzY29uZl9jb25mbmFtZSwgJm5hbWUpKSB7Ci0gICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgbG9uZyB2YWx1ZTsKIAogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIHZhbHVlID0gc3lzY29uZihuYW1lKTsKQEAgLTEwNTU5LDYgKzEwNTgzLDggQEAKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7CisgICAgYXR0cmlidXRlLmZ1bmN0aW9uX25hbWUgPSAiZ2V0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6Z2V0eGF0dHIiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLApAQCAtMTA1NzUsNyArMTA2MDEsNyBAQAogICAgICAgICBzdGF0aWMgUHlfc3NpemVfdCBidWZmZXJfc2l6ZXNbXSA9IHsxMjgsIFhBVFRSX1NJWkVfTUFYLCAwfTsKICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplc1tpXTsKICAgICAgICAgaWYgKCFidWZmZXJfc2l6ZSkgewotICAgICAgICAgICAgcGF0aF9lcnJvcigiZ2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZmZlcl9zaXplKTsKQEAgLTEwNTk3LDcgKzEwNjIzLDcgQEAKICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRVJBTkdFKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcGF0aF9lcnJvcigiZ2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogCkBAIC0xMDYzNiw2ICsxMDY2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzZXR4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKICAgICBtZW1zZXQoJnZhbHVlLCAwLCBzaXplb2YodmFsdWUpKTsKQEAgLTEwNjYzLDcgKzEwNjkwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigic2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0xMDY5Nyw3ICsxMDcyNCw5IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKKyAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpyZW1vdmV4YXR0ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMsCkBAIC0xMDcxOSw3ICsxMDc0OCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJlbW92ZXhhdHRyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMTA3NTUsNiArMTA3ODQsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIHBhdGguZmQgPSAtMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyYkcDpsaXN0eGF0dHIiLCBrZXl3b3JkcywKQEAgLTEwNzczLDcgKzEwODAzLDcgQEAKICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplc1tpXTsKICAgICAgICAgaWYgKCFidWZmZXJfc2l6ZSkgewogICAgICAgICAgICAgLyogRVJBTkdFICovCi0gICAgICAgICAgICBwYXRoX2Vycm9yKCJsaXN0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5TWVtX01BTExPQyhidWZmZXJfc2l6ZSk7CkBAIC0xMDc5Nyw3ICsxMDgyNyw3IEBACiAgICAgICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImxpc3R4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTA5NzUsMTQgKzExMDA1LDE0NSBAQAogfQogI2VuZGlmIC8qIGRlZmluZWQoVEVSTVNJWkVfVVNFX0NPTklPKSB8fCBkZWZpbmVkKFRFUk1TSVpFX1VTRV9JT0NUTCkgKi8KIAorUHlEb2NfU1RSVkFSKHBvc2l4X2NwdV9jb3VudF9fZG9jX18sCisiY3B1X2NvdW50KCkgLT4gaW50ZWdlclxuXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0sIG9yIE5vbmUgaWYgdGhpcyB2YWx1ZSBjYW5ub3QgYmVcblwKK2VzdGFibGlzaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfY3B1X2NvdW50KFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBuY3B1ID0gMDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgU1lTVEVNX0lORk8gc3lzaW5mbzsKKyAgICBHZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKyAgICBuY3B1ID0gc3lzaW5mby5kd051bWJlck9mUHJvY2Vzc29yczsKKyNlbGlmIGRlZmluZWQoX19ocHV4KQorICAgIG5jcHUgPSBtcGN0bChNUENfR0VUTlVNU1BVUywgTlVMTCwgTlVMTCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfTlBST0NFU1NPUlNfT05MTikKKyAgICBuY3B1ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19PcGVuQlNEX18pICAgfHwgXAorICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICB8fCBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19BUFBMRV9fKQorICAgIGludCBtaWJbMl07CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZihuY3B1KTsKKyAgICBtaWJbMF0gPSBDVExfSFc7CisgICAgbWliWzFdID0gSFdfTkNQVTsKKyAgICBpZiAoc3lzY3RsKG1pYiwgMiwgJm5jcHUsICZsZW4sIE5VTEwsIDApICE9IDApCisgICAgICAgIG5jcHUgPSAwOworI2VuZGlmCisgICAgaWYgKG5jcHUgPj0gMSkKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhuY3B1KTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZ2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAiZ2V0X2luaGVyaXRhYmxlKGZkKSAtPiBib29sXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0X2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgZmQ7CisgICAgaW50IGluaGVyaXRhYmxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmdldF9pbmhlcml0YWJsZSIsICZmZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGluaGVyaXRhYmxlID0gX1B5X2dldF9pbmhlcml0YWJsZShmZCk7CisgICAgaWYgKGluaGVyaXRhYmxlIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpbmhlcml0YWJsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihzZXRfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCisgICAgIlxuIiBcCisgICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0X2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgZmQsIGluaGVyaXRhYmxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfaW5oZXJpdGFibGUiLCAmZmQsICZpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSwgTlVMTCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworCisjaWZkZWYgTVNfV0lORE9XUworUHlEb2NfU1RSVkFSKGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJnZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkKSAtPiBib29sXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgIjpnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgJmhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFHZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWhhbmRsZSwgJmZsYWdzKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhmbGFncyAmIEhBTkRMRV9GTEFHX0lOSEVSSVQpOworfQorCitQeURvY19TVFJWQVIoc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgInNldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCisgICAgIlxuIiBcCisgICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGluaGVyaXRhYmxlID0gMTsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTpzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgIGZsYWdzID0gSEFORExFX0ZMQUdfSU5IRVJJVDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzID0gMDsKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZiAgIC8qIE1TX1dJTkRPV1MgKi8KKworCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwb3NpeF9tZXRob2RzW10gPSB7Ci0gICAgeyJhY2Nlc3MiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfYWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2FjY2Vzc19fZG9jX199LAotI2lmZGVmIEhBVkVfVFRZTkFNRQotICAgIHsidHR5bmFtZSIsICAgICAgICAgcG9zaXhfdHR5bmFtZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF90dHluYW1lX19kb2NfX30sCi0jZW5kaWYKKworICAgIE9TX1NUQVRfTUVUSE9EREVGCisgICAgT1NfQUNDRVNTX01FVEhPRERFRgorICAgIE9TX1RUWU5BTUVfTUVUSE9EREVGCisKICAgICB7ImNoZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9jaGRpciwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9jaGRpcl9fZG9jX199LApAQCAtMTEwMjAsMTIgKzExMTgxLDEwIEBACiAjaWZkZWYgSEFWRV9DVEVSTUlECiAgICAgeyJjdGVybWlkIiwgICAgICAgICBwb3NpeF9jdGVybWlkLCBNRVRIX05PQVJHUywgcG9zaXhfY3Rlcm1pZF9fZG9jX199LAogI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRDV0QKICAgICB7ImdldGN3ZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfdW5pY29kZSwKICAgICBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Y3dkX19kb2NfX30sCiAgICAgeyJnZXRjd2RiIiwgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0Y3dkX2J5dGVzLAogICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RiX19kb2NfX30sCi0jZW5kaWYKICNpZiBkZWZpbmVkKEhBVkVfTElOSykgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIHsibGluayIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2xpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLApAQCAtMTEwNjgsOSArMTEyMjcsNiBAQAogICAgIHsicm1kaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3JtZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3JtZGlyX19kb2NfX30sCi0gICAgeyJzdGF0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9zdGF0X19kb2NfX30sCiAgICAgeyJzdGF0X2Zsb2F0X3RpbWVzIiwgc3RhdF9mbG9hdF90aW1lcywgTUVUSF9WQVJBUkdTLCBzdGF0X2Zsb2F0X3RpbWVzX19kb2NfX30sCiAjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspCiAgICAgeyJzeW1saW5rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfc3ltbGluaywKQEAgLTExMTA1LDEwICsxMTI2MSw2IEBACiAjaWZkZWYgSEFWRV9TUEFXTlYKICAgICB7InNwYXdudiIsICAgICAgICAgIHBvc2l4X3NwYXdudiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZfX2RvY19ffSwKICAgICB7InNwYXdudmUiLCAgICAgICAgIHBvc2l4X3NwYXdudmUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252ZV9fZG9jX199LAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgeyJzcGF3bnZwIiwgICAgICAgICBwb3NpeF9zcGF3bnZwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudnBfX2RvY19ffSwKLSAgICB7InNwYXdudnBlIiwgICAgICAgIHBvc2l4X3NwYXdudnBlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudnBlX19kb2NfX30sCi0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZiAvKiBIQVZFX1NQQVdOViAqLwogI2lmZGVmIEhBVkVfRk9SSzEKICAgICB7ImZvcmsxIiwgICAgICAgcG9zaXhfZm9yazEsIE1FVEhfTk9BUkdTLCBwb3NpeF9mb3JrMV9fZG9jX199LApAQCAtMTEyNTYsNyArMTE0MDgsOCBAQAogICAgIHsiY2xvc2VyYW5nZSIsICAgICAgcG9zaXhfY2xvc2VyYW5nZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9jbG9zZXJhbmdlX19kb2NfX30sCiAgICAgeyJkZXZpY2VfZW5jb2RpbmciLCBkZXZpY2VfZW5jb2RpbmcsIE1FVEhfVkFSQVJHUywgZGV2aWNlX2VuY29kaW5nX19kb2NfX30sCiAgICAgeyJkdXAiLCAgICAgICAgICAgICBwb3NpeF9kdXAsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwX19kb2NfX30sCi0gICAgeyJkdXAyIiwgICAgICAgICAgICBwb3NpeF9kdXAyLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2R1cDJfX2RvY19ffSwKKyAgICB7ImR1cDIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9kdXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgcG9zaXhfZHVwMl9fZG9jX199LAogI2lmZGVmIEhBVkVfTE9DS0YKICAgICB7ImxvY2tmIiwgICAgICAgICAgIHBvc2l4X2xvY2tmLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2xvY2tmX19kb2NfX30sCiAjZW5kaWYKQEAgLTExMzg3LDkgKzExNTQwLDkgQEAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJfZ2V0ZnVsbHBhdGhuYW1lIiwgICAgICAgIHBvc2l4X19nZXRmdWxscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfZ2V0ZmluYWxwYXRobmFtZSIsICAgICAgIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsiX2dldGZpbGVpbmZvcm1hdGlvbiIsICAgICBwb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHsiX2lzZGlyIiwgICAgICAgICAgICAgICAgICBwb3NpeF9faXNkaXIsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2lzZGlyX19kb2NfX30sCiAgICAgeyJfZ2V0ZGlza3VzYWdlIiwgICAgICAgICAgIHdpbjMyX19nZXRkaXNrdXNhZ2UsIE1FVEhfVkFSQVJHUywgd2luMzJfX2dldGRpc2t1c2FnZV9fZG9jX199LAorICAgIHsiX2dldHZvbHVtZXBhdGhuYW1lIiwgICAgICBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lX19kb2NfX30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKICAgICB7ImdldGxvYWRhdmciLCAgICAgIHBvc2l4X2dldGxvYWRhdmcsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRsb2FkYXZnX19kb2NfX30sCkBAIC0xMTQyNSw2OSArMTE1NzgsMjAgQEAKICNpZiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpCiAgICAgeyJnZXRfdGVybWluYWxfc2l6ZSIsIGdldF90ZXJtaW5hbF9zaXplLCBNRVRIX1ZBUkFSR1MsIHRlcm1zaXplX19kb2NfX30sCiAjZW5kaWYKKyAgICB7ImNwdV9jb3VudCIsIChQeUNGdW5jdGlvbilwb3NpeF9jcHVfY291bnQsCisgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgcG9zaXhfY3B1X2NvdW50X19kb2NfX30sCisgICAgeyJnZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgZ2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgc2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisjaWZkZWYgTVNfV0lORE9XUworICAgIHsiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorICAgIHsic2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCAqbW9kdWxlLCBjaGFyICpzeW1ib2wsIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG1vZHVsZSwgc3ltYm9sLCB2YWx1ZSk7Ci19Ci0KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyogSW5zZXJ0IFBsYXRmb3JtLVNwZWNpZmljIENvbnN0YW50IFZhbHVlcyAoU3RyaW5ncyAmIE51bWJlcnMpIG9mIENvbW1vbiBVc2UgKi8KLXN0YXRpYyBpbnQgaW5zZXJ0dmFsdWVzKFB5T2JqZWN0ICptb2R1bGUpCi17Ci0gICAgQVBJUkVUICAgIHJjOwotICAgIFVMT05HICAgICB2YWx1ZXNbUVNWX01BWCsxXTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBjaGFyICAgICAqdmVyLCB0bXBbNTBdOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zUXVlcnlTeXNJbmZvKDFMLCBRU1ZfTUFYLCAmdmFsdWVzWzFdLCBzaXplb2YoVUxPTkcpICogUVNWX01BWCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBvczJfZXJyb3IocmMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1pbnN0YWxsZWQiLCB2YWx1ZXNbUVNWX1RPVFBIWVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVta2VybmVsIiwgICAgdmFsdWVzW1FTVl9UT1RSRVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVtdmlydHVhbCIsICAgdmFsdWVzW1FTVl9UT1RBVkFJTE1FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhwYXRobGVuIiwgICB2YWx1ZXNbUVNWX01BWF9QQVRIX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhuYW1lbGVuIiwgICB2YWx1ZXNbUVNWX01BWF9DT01QX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJyZXZpc2lvbiIsICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fUkVWSVNJT05dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAidGltZXNsaWNlIiwgICAgdmFsdWVzW1FTVl9NSU5fU0xJQ0VdKSkgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoICh2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKSB7Ci0gICAgY2FzZSAwOiAgdmVyID0gIjIuMDAiOyBicmVhazsKLSAgICBjYXNlIDEwOiB2ZXIgPSAiMi4xMCI7IGJyZWFrOwotICAgIGNhc2UgMTE6IHZlciA9ICIyLjExIjsgYnJlYWs7Ci0gICAgY2FzZSAzMDogdmVyID0gIjMuMDAiOyBicmVhazsKLSAgICBjYXNlIDQwOiB2ZXIgPSAiNC4wMCI7IGJyZWFrOwotICAgIGNhc2UgNTA6IHZlciA9ICI1LjAwIjsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUHlPU19zbnByaW50Zih0bXAsIHNpemVvZih0bXApLAotICAgICAgICAgICAgICAgICAgICAgICIlZC0lZCIsIHZhbHVlc1tRU1ZfVkVSU0lPTl9NQUpPUl0sCi0gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW1FTVl9WRVJTSU9OX01JTk9SXSk7Ci0gICAgICAgIHZlciA9ICZ0bXBbMF07Ci0gICAgfQotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiB0aGUgVmVyc2lvbiBvZiB0aGUgT3BlcmF0aW5nIFN5c3RlbSAqLwotICAgIGlmIChQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJ2ZXJzaW9uIiwgdG1wKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIEFkZCBJbmRpY2F0b3Igb2YgV2hpY2ggRHJpdmUgd2FzIFVzZWQgdG8gQm9vdCB0aGUgU3lzdGVtICovCi0gICAgdG1wWzBdID0gJ0EnICsgdmFsdWVzW1FTVl9CT09UX0RSSVZFXSAtIDE7Ci0gICAgdG1wWzFdID0gJzonOwotICAgIHRtcFsyXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobW9kdWxlLCAiYm9vdGRyaXZlIiwgdG1wKTsKLX0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBpbnQKIGVuYWJsZV9zeW1saW5rKCkKQEAgLTExNTE4LDQwMSArMTE2MjIsMzgxIEBACiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykgKi8KIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCAqZCkKK2FsbF9pbnMoUHlPYmplY3QgKm0pCiB7CiAjaWZkZWYgRl9PSwotICAgIGlmIChpbnMoZCwgIkZfT0siLCAobG9uZylGX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUl9PSwotICAgIGlmIChpbnMoZCwgIlJfT0siLCAobG9uZylSX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV19PSwotICAgIGlmIChpbnMoZCwgIldfT0siLCAobG9uZylXX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgWF9PSwotICAgIGlmIChpbnMoZCwgIlhfT0siLCAobG9uZylYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTkdST1VQU19NQVgKLSAgICBpZiAoaW5zKGQsICJOR1JPVVBTX01BWCIsIChsb25nKU5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOR1JPVVBTX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFRNUF9NQVgKLSAgICBpZiAoaW5zKGQsICJUTVBfTUFYIiwgKGxvbmcpVE1QX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVE1QX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdDT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJXQ09OVElOVUVEIiwgKGxvbmcpV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdOT0hBTkcKLSAgICBpZiAoaW5zKGQsICJXTk9IQU5HIiwgKGxvbmcpV05PSEFORykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV05PSEFORykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdVTlRSQUNFRAotICAgIGlmIChpbnMoZCwgIldVTlRSQUNFRCIsIChsb25nKVdVTlRSQUNFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SRE9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1JET05MWSIsIChsb25nKU9fUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JET05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fV1JPTkxZCi0gICAgaWYgKGlucyhkLCAiT19XUk9OTFkiLCAobG9uZylPX1dST05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19XUk9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JEV1IKLSAgICBpZiAoaW5zKGQsICJPX1JEV1IiLCAobG9uZylPX1JEV1IpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRXUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTkRFTEFZCi0gICAgaWYgKGlucyhkLCAiT19OREVMQVkiLCAobG9uZylPX05ERUxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OREVMQVkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTkJMT0NLCi0gICAgaWYgKGlucyhkLCAiT19OT05CTE9DSyIsIChsb25nKU9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FQUEVORAotICAgIGlmIChpbnMoZCwgIk9fQVBQRU5EIiwgKGxvbmcpT19BUFBFTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQVBQRU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19EU1lOQwotICAgIGlmIChpbnMoZCwgIk9fRFNZTkMiLCAobG9uZylPX0RTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SU1lOQwotICAgIGlmIChpbnMoZCwgIk9fUlNZTkMiLCAobG9uZylPX1JTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TWU5DCi0gICAgaWYgKGlucyhkLCAiT19TWU5DIiwgKGxvbmcpT19TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQ1RUWQotICAgIGlmIChpbnMoZCwgIk9fTk9DVFRZIiwgKGxvbmcpT19OT0NUVFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9DVFRZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DUkVBVAotICAgIGlmIChpbnMoZCwgIk9fQ1JFQVQiLCAobG9uZylPX0NSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NSRUFUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWENMCi0gICAgaWYgKGlucyhkLCAiT19FWENMIiwgKGxvbmcpT19FWENMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYQ0wpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RSVU5DCi0gICAgaWYgKGlucyhkLCAiT19UUlVOQyIsIChsb25nKU9fVFJVTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFJVTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgIGlmIChpbnMoZCwgIk9fQklOQVJZIiwgKGxvbmcpT19CSU5BUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQklOQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19URVhUCi0gICAgaWYgKGlucyhkLCAiT19URVhUIiwgKGxvbmcpT19URVhUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RFWFQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1hBVFRSCi0gICAgaWYgKGlucyhkLCAiT19YQVRUUiIsIChsb25nKU9fWEFUVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fWEFUVFIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0xBUkdFRklMRQotICAgIGlmIChpbnMoZCwgIk9fTEFSR0VGSUxFIiwgKGxvbmcpT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTEFSR0VGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TSExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX1NITE9DSyIsIChsb25nKU9fU0hMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NITE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhMT0NLCi0gICAgaWYgKGlucyhkLCAiT19FWExPQ0siLCAobG9uZylPX0VYTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYRUMKLSAgICBpZiAoaW5zKGQsICJPX0VYRUMiLCAobG9uZylPX0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VBUkNICi0gICAgaWYgKGlucyhkLCAiT19TRUFSQ0giLCAobG9uZylPX1NFQVJDSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRUFSQ0gpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1BBVEgKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19QQVRIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19UVFlfSU5JVAotICAgIGlmIChpbnMoZCwgIk9fVFRZX0lOSVQiLCAobG9uZylPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgT19UTVBGSUxFCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVE1QRklMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fUFJPQ0VTUwotICAgIGlmIChpbnMoZCwgIlBSSU9fUFJPQ0VTUyIsIChsb25nKVBSSU9fUFJPQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QR1JQCi0gICAgaWYgKGlucyhkLCAiUFJJT19QR1JQIiwgKGxvbmcpUFJJT19QR1JQKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BHUlApKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1VTRVIKLSAgICBpZiAoaW5zKGQsICJQUklPX1VTRVIiLCAobG9uZylQUklPX1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fVVNFUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIk9fQ0xPRVhFQyIsIChsb25nKU9fQ0xPRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19BQ0NNT0RFCi0gICAgaWYgKGlucyhkLCAiT19BQ0NNT0RFIiwgKGxvbmcpT19BQ0NNT0RFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FDQ01PREUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogCiAjaWZkZWYgU0VFS19IT0xFCi0gICAgaWYgKGlucyhkLCAiU0VFS19IT0xFIiwgKGxvbmcpU0VFS19IT0xFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRUVLX0hPTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRUVLX0RBVEEKLSAgICBpZiAoaW5zKGQsICJTRUVLX0RBVEEiLCAobG9uZylTRUVLX0RBVEEpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfREFUQSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBNUyBXaW5kb3dzICovCiAjaWZkZWYgT19OT0lOSEVSSVQKICAgICAvKiBEb24ndCBpbmhlcml0IGluIGNoaWxkIHByb2Nlc3Nlcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PSU5IRVJJVCIsIChsb25nKU9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PSU5IRVJJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIF9PX1NIT1JUX0xJVkVECiAgICAgLyogT3B0aW1pemUgZm9yIHNob3J0IGxpZmUgKGtlZXAgaW4gbWVtb3J5KS4gKi8KICAgICAvKiBNUyBmb3Jnb3QgdG8gZGVmaW5lIHRoaXMgb25lIHdpdGggYSBub24tdW5kZXJzY29yZSBmb3JtIHRvby4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NIT1JUX0xJVkVEIiwgKGxvbmcpX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPX1NIT1JUX0xJVkVEIiwgX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFTVBPUkFSWQogICAgIC8qIEF1dG9tYXRpY2FsbHkgZGVsZXRlIHdoZW4gbGFzdCBoYW5kbGUgaXMgY2xvc2VkLiAqLwotICAgIGlmIChpbnMoZCwgIk9fVEVNUE9SQVJZIiwgKGxvbmcpT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVNUE9SQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SQU5ET00KICAgICAvKiBPcHRpbWl6ZSBmb3IgcmFuZG9tIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1JBTkRPTSIsIChsb25nKU9fUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VRVUVOVElBTAogICAgIC8qIE9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NFUVVFTlRJQUwiLCAobG9uZylPX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBHTlUgZXh0ZW5zaW9ucy4gKi8KICNpZmRlZiBPX0FTWU5DCiAgICAgLyogU2VuZCBhIFNJR0lPIHNpZ25hbCB3aGVuZXZlciBpbnB1dCBvciBvdXRwdXQKICAgICAgICBiZWNvbWVzIGF2YWlsYWJsZSBvbiBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICBpZiAoaW5zKGQsICJPX0FTWU5DIiwgKGxvbmcpT19BU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRElSRUNUCiAgICAgLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fRElSRUNUIiwgKGxvbmcpT19ESVJFQ1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRElSRUNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1RPUlkKICAgICAvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1RPUlkiLCAobG9uZylPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1RPUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PRk9MTE9XCiAgICAgLyogRG8gbm90IGZvbGxvdyBsaW5rcy4gICAgICAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9GT0xMT1ciLCAobG9uZylPX05PRk9MTE9XKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PRk9MTE9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0xJTktTCiAgICAgLyogRmFpbHMgaWYgbGluayBjb3VudCBvZiB0aGUgbmFtZWQgZmlsZSBpcyBncmVhdGVyIHRoYW4gMSAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9MSU5LUyIsIChsb25nKU9fTk9MSU5LUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0xJTktTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0FUSU1FCiAgICAgLyogRG8gbm90IHVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUuICovCi0gICAgaWYgKGlucyhkLCAiT19OT0FUSU1FIiwgKGxvbmcpT19OT0FUSU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PQVRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIFRoZXNlIGNvbWUgZnJvbSBzeXNleGl0cy5oICovCiAjaWZkZWYgRVhfT0sKLSAgICBpZiAoaW5zKGQsICJFWF9PSyIsIChsb25nKUVYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PSykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PSyAqLwogI2lmZGVmIEVYX1VTQUdFCi0gICAgaWYgKGlucyhkLCAiRVhfVVNBR0UiLCAobG9uZylFWF9VU0FHRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVVNBR0UpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVVNBR0UgKi8KICNpZmRlZiBFWF9EQVRBRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfREFUQUVSUiIsIChsb25nKUVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfREFUQUVSUiAqLwogI2lmZGVmIEVYX05PSU5QVVQKLSAgICBpZiAoaW5zKGQsICJFWF9OT0lOUFVUIiwgKGxvbmcpRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0lOUFVUICovCiAjaWZkZWYgRVhfTk9VU0VSCi0gICAgaWYgKGlucyhkLCAiRVhfTk9VU0VSIiwgKGxvbmcpRVhfTk9VU0VSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1VTRVIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9VU0VSICovCiAjaWZkZWYgRVhfTk9IT1NUCi0gICAgaWYgKGlucyhkLCAiRVhfTk9IT1NUIiwgKGxvbmcpRVhfTk9IT1NUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0hPU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9IT1NUICovCiAjaWZkZWYgRVhfVU5BVkFJTEFCTEUKLSAgICBpZiAoaW5zKGQsICJFWF9VTkFWQUlMQUJMRSIsIChsb25nKUVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VTkFWQUlMQUJMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VTkFWQUlMQUJMRSAqLwogI2lmZGVmIEVYX1NPRlRXQVJFCi0gICAgaWYgKGlucyhkLCAiRVhfU09GVFdBUkUiLCAobG9uZylFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfU09GVFdBUkUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfU09GVFdBUkUgKi8KICNpZmRlZiBFWF9PU0VSUgotICAgIGlmIChpbnMoZCwgIkVYX09TRVJSIiwgKGxvbmcpRVhfT1NFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09TRVJSICovCiAjaWZkZWYgRVhfT1NGSUxFCi0gICAgaWYgKGlucyhkLCAiRVhfT1NGSUxFIiwgKGxvbmcpRVhfT1NGSUxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NGSUxFICovCiAjaWZkZWYgRVhfQ0FOVENSRUFUCi0gICAgaWYgKGlucyhkLCAiRVhfQ0FOVENSRUFUIiwgKGxvbmcpRVhfQ0FOVENSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ0FOVENSRUFUICovCiAjaWZkZWYgRVhfSU9FUlIKLSAgICBpZiAoaW5zKGQsICJFWF9JT0VSUiIsIChsb25nKUVYX0lPRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9JT0VSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9JT0VSUiAqLwogI2lmZGVmIEVYX1RFTVBGQUlMCi0gICAgaWYgKGlucyhkLCAiRVhfVEVNUEZBSUwiLCAobG9uZylFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVEVNUEZBSUwpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVEVNUEZBSUwgKi8KICNpZmRlZiBFWF9QUk9UT0NPTAotICAgIGlmIChpbnMoZCwgIkVYX1BST1RPQ09MIiwgKGxvbmcpRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1BST1RPQ09MKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1BST1RPQ09MICovCiAjaWZkZWYgRVhfTk9QRVJNCi0gICAgaWYgKGlucyhkLCAiRVhfTk9QRVJNIiwgKGxvbmcpRVhfTk9QRVJNKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1BFUk0pKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9QRVJNICovCiAjaWZkZWYgRVhfQ09ORklHCi0gICAgaWYgKGlucyhkLCAiRVhfQ09ORklHIiwgKGxvbmcpRVhfQ09ORklHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DT05GSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ09ORklHICovCiAjaWZkZWYgRVhfTk9URk9VTkQKLSAgICBpZiAoaW5zKGQsICJFWF9OT1RGT1VORCIsIChsb25nKUVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1RGT1VORCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1RGT1VORCAqLwogCiAgICAgLyogc3RhdHZmcyAqLwogI2lmZGVmIFNUX1JET05MWQotICAgIGlmIChpbnMoZCwgIlNUX1JET05MWSIsIChsb25nKVNUX1JET05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX1JET05MWSAqLwogI2lmZGVmIFNUX05PU1VJRAotICAgIGlmIChpbnMoZCwgIlNUX05PU1VJRCIsIChsb25nKVNUX05PU1VJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9TVUlEKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX05PU1VJRCAqLwogCiAgICAgLyogRnJlZUJTRCBzZW5kZmlsZSgpIGNvbnN0YW50cyAqLwogI2lmZGVmIFNGX05PRElTS0lPCi0gICAgaWYgKGlucyhkLCAiU0ZfTk9ESVNLSU8iLCAobG9uZylTRl9OT0RJU0tJTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTk9ESVNLSU8pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRl9NTk9XQUlUCi0gICAgaWYgKGlucyhkLCAiU0ZfTU5PV0FJVCIsIChsb25nKVNGX01OT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX01OT1dBSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRl9TWU5DCi0gICAgaWYgKGlucyhkLCAiU0ZfU1lOQyIsIChsb25nKVNGX1NZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX1NZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3IgcG9zaXhfZmFkdmlzZSAqLwogI2lmZGVmIFBPU0lYX0ZBRFZfTk9STUFMCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9OT1JNQUwiLCAobG9uZylQT1NJWF9GQURWX05PUk1BTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9OT1JNQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1NFUVVFTlRJQUwiLCAobG9uZylQT1NJWF9GQURWX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfUkFORE9NCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9SQU5ET00iLCAobG9uZylQT1NJWF9GQURWX1JBTkRPTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9SQU5ET00pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX05PUkVVU0UKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX05PUkVVU0UiLCAobG9uZylQT1NJWF9GQURWX05PUkVVU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfTk9SRVVTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfV0lMTE5FRUQKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1dJTExORUVEIiwgKGxvbmcpUE9TSVhfRkFEVl9XSUxMTkVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9XSUxMTkVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfRE9OVE5FRUQKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX0RPTlRORUVEIiwgKGxvbmcpUE9TSVhfRkFEVl9ET05UTkVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9ET05UTkVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciB3YWl0aWQgKi8KICNpZiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChIQVZFX1dBSVRJRCkKLSAgICBpZiAoaW5zKGQsICJQX1BJRCIsIChsb25nKVBfUElEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUEdJRCIsIChsb25nKVBfUEdJRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0FMTCIsIChsb25nKVBfQUxMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX1BJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9QR0lEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX0FMTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdFWElURUQKLSAgICBpZiAoaW5zKGQsICJXRVhJVEVEIiwgKGxvbmcpV0VYSVRFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV0VYSVRFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdOT1dBSVQKLSAgICBpZiAoaW5zKGQsICJXTk9XQUlUIiwgKGxvbmcpV05PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV05PV0FJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdTVE9QUEVECi0gICAgaWYgKGlucyhkLCAiV1NUT1BQRUQiLCAobG9uZylXU1RPUFBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV1NUT1BQRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfRVhJVEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0VYSVRFRCIsIChsb25nKUNMRF9FWElURUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9FWElURUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfRFVNUEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0RVTVBFRCIsIChsb25nKUNMRF9EVU1QRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9EVU1QRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfVFJBUFBFRAotICAgIGlmIChpbnMoZCwgIkNMRF9UUkFQUEVEIiwgKGxvbmcpQ0xEX1RSQVBQRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9UUkFQUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0NPTlRJTlVFRAotICAgIGlmIChpbnMoZCwgIkNMRF9DT05USU5VRUQiLCAobG9uZylDTERfQ09OVElOVUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfQ09OVElOVUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIGxvY2tmICovCiAjaWZkZWYgRl9MT0NLCi0gICAgaWYgKGlucyhkLCAiRl9MT0NLIiwgKGxvbmcpRl9MT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0xPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1RMT0NLCi0gICAgaWYgKGlucyhkLCAiRl9UTE9DSyIsIChsb25nKUZfVExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1VMT0NLCi0gICAgaWYgKGlucyhkLCAiRl9VTE9DSyIsIChsb25nKUZfVUxPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVUxPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1RFU1QKLSAgICBpZiAoaW5zKGQsICJGX1RFU1QiLCAobG9uZylGX1RFU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVEVTVCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TUEFXTlYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChpbnMoZCwgIlBfV0FJVCIsIChsb25nKVBfV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVCIsIChsb25nKVBfTk9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfT1ZFUkxBWSIsIChsb25nKVBfT1ZFUkxBWSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFQlVHIiwgKGxvbmcpUF9ERUJVRykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1NFU1NJT04iLCAobG9uZylQX1NFU1NJT04pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERVRBQ0giLCAobG9uZylQX0RFVEFDSCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1BNIiwgKGxvbmcpUF9QTSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFRkFVTFQiLCAobG9uZylQX0RFRkFVTFQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9NSU5JTUlaRSIsIChsb25nKVBfTUlOSU1JWkUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9NQVhJTUlaRSIsIChsb25nKVBfTUFYSU1JWkUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9GVUxMU0NSRUVOIiwgKGxvbmcpUF9GVUxMU0NSRUVOKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfV0lORE9XRUQiLCAobG9uZylQX1dJTkRPV0VEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfRk9SRUdST1VORCIsIChsb25nKVBfRk9SRUdST1VORCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0JBQ0tHUk9VTkQiLCAobG9uZylQX0JBQ0tHUk9VTkQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT0NMT1NFIiwgKGxvbmcpUF9OT0NMT1NFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9TRVNTSU9OIiwgKGxvbmcpUF9OT1NFU1NJT04pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9RVU9URSIsIChsb25nKVBfUVVPVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9USUxERSIsIChsb25nKVBfVElMREUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9VTlJFTEFURUQiLCAobG9uZylQX1VOUkVMQVRFRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFQlVHREVTQyIsIChsb25nKVBfREVCVUdERVNDKSkgcmV0dXJuIC0xOwotI2Vsc2UKLSAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylfUF9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUIiwgKGxvbmcpX1BfTk9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfT1ZFUkxBWSIsIChsb25nKV9PTERfUF9PVkVSTEFZKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUTyIsIChsb25nKV9QX05PV0FJVE8pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERVRBQ0giLCAobG9uZylfUF9ERVRBQ0gpKSByZXR1cm4gLTE7Ci0jZW5kaWYKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfV0FJVCIsIF9QX1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX05PV0FJVCIsIF9QX05PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfT1ZFUkxBWSIsIF9PTERfUF9PVkVSTEFZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9OT1dBSVRPIiwgX1BfTk9XQUlUTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfREVUQUNIIiwgX1BfREVUQUNIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NDSEVEX0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9PVEhFUiIsIChsb25nKVNDSEVEX09USEVSKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZJRk8iLCAobG9uZylTQ0hFRF9GSUZPKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1JSIiwgKGxvbmcpU0NIRURfUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX09USEVSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9GSUZPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9SUikpIHJldHVybiAtMTsKICNpZmRlZiBTQ0hFRF9TUE9SQURJQwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NQT1JBRElDIiwgKGxvbmcpU0NIRURfU1BPUkFESUMpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1BPUkFESUMpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0JBVENICi0gICAgaWYgKGlucyhkLCAiU0NIRURfQkFUQ0giLCAobG9uZylTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfQkFUQ0gpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9JRExFCi0gICAgaWYgKGlucyhkLCAiU0NIRURfSURMRSIsIChsb25nKVNDSEVEX0lETEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0lETEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9SRVNFVF9PTl9GT1JLCi0gICAgaWYgKGlucyhkLCAiU0NIRURfUkVTRVRfT05fRk9SSyIsIChsb25nKVNDSEVEX1JFU0VUX09OX0ZPUkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1JFU0VUX09OX0ZPUkspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9TWVMKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9TWVMiLCAobG9uZylTQ0hFRF9TWVMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1NZUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lBCi0gICAgaWYgKGlucyhkLCAiU0NIRURfSUEiLCAobG9uZylTQ0hFRF9JQSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSUEpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9GU1MKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GU1MiLCAobG9uZylTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZYCi0gICAgaWYgKGlucyhkLCAiU0NIRURfRlgiLCAobG9uZylTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ0hFRF9GWCIsIFNDSEVEX0ZTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBVU0VfWEFUVFJTCi0gICAgaWYgKGlucyhkLCAiWEFUVFJfQ1JFQVRFIiwgKGxvbmcpWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlhBVFRSX1JFUExBQ0UiLCAobG9uZylYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlhBVFRSX1NJWkVfTUFYIiwgKGxvbmcpWEFUVFJfU0laRV9NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX0NSRUFURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfUkVQTEFDRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfU0laRV9NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIFJUTERfTEFaWQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xBWlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTEFaWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9XCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9XKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfR0xPQkFMCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0dMT0JBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTE9DQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9MT0NBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MT0NBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9ERUxFVEUKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0RFTEVURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT0RFTEVURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfTk9MT0FECi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PTE9BRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJUTERfREVFUEJJTkQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9ERUVQQklORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9ERUVQQklORCkpIHJldHVybiAtMTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAoaW5zZXJ0dmFsdWVzKGQpKSByZXR1cm4gLTE7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTE5MjEsMTAgKzEyMDA1LDYgQEAKICNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X250CiAjZGVmaW5lIE1PRE5BTUUgIm50IgogCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTklURlVOQyBQeUluaXRfb3MyCi0jZGVmaW5lIE1PRE5BTUUgIm9zMiIKLQogI2Vsc2UKICNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X3Bvc2l4CiAjZGVmaW5lIE1PRE5BTUUgInBvc2l4IgpAQCAtMTIxMTIsMTkgKzEyMTkyLDIzIEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogI2lmIGRlZmluZWQoSEFWRV9XQUlUSUQpICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICAgICAgICAgd2FpdGlkX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIud2FpdGlkX3Jlc3VsdCI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldhaXRpZFJlc3VsdFR5cGUsICZ3YWl0aWRfcmVzdWx0X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJldhaXRpZFJlc3VsdFR5cGUsICZ3YWl0aWRfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKLSAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXRfcmVzdWx0IjsKKyAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXRfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s3XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7CiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzhdLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOV0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0UmVzdWx0VHlwZSwgJnN0YXRfcmVzdWx0X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHN0cnVjdHNlcV9uZXcgPSBTdGF0UmVzdWx0VHlwZS50cF9uZXc7CiAgICAgICAgIFN0YXRSZXN1bHRUeXBlLnRwX25ldyA9IHN0YXRyZXN1bHRfbmV3OwogCi0gICAgICAgIHN0YXR2ZnNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zdGF0dmZzX3Jlc3VsdCI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRWRlNSZXN1bHRUeXBlLCAmc3RhdHZmc19yZXN1bHRfZGVzYyk7CisgICAgICAgIHN0YXR2ZnNfcmVzdWx0X2Rlc2MubmFtZSA9ICJvcy5zdGF0dmZzX3Jlc3VsdCI7IC8qIHNlZSBpc3N1ZSAjMTkyMDkgKi8KKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0VkZTUmVzdWx0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dmZzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICNpZmRlZiBORUVEX1RJQ0tTX1BFUl9TRUNPTkQKICMgIGlmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19DTEtfVENLKQogICAgICAgICB0aWNrc19wZXJfc2Vjb25kID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7CkBAIC0xMjEzNywxMiArMTIyMjEsMTUgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRQQVJBTSkgfHwgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikKICAgICAgICAgc2NoZWRfcGFyYW1fZGVzYy5uYW1lID0gTU9ETkFNRSAiLnNjaGVkX3BhcmFtIjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU2NoZWRQYXJhbVR5cGUsICZzY2hlZF9wYXJhbV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBTY2hlZFBhcmFtVHlwZS50cF9uZXcgPSBzY2hlZF9wYXJhbV9uZXc7CiAjZW5kaWYKIAogICAgICAgICAvKiBpbml0aWFsaXplIFRlcm1pbmFsU2l6ZV9pbmZvICovCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRlcm1pbmFsU2l6ZVR5cGUsICZUZXJtaW5hbFNpemVfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGVybWluYWxTaXplVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUZXJtaW5hbFNpemVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2lmIGRlZmluZWQoSEFWRV9XQUlUSUQpICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJldhaXRpZFJlc3VsdFR5cGUpOwpAQCAtMTIxNjAsMTEgKzEyMjQ3LDEzIEBACiAjZW5kaWYKIAogICAgIHRpbWVzX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIudGltZXNfcmVzdWx0IjsKLSAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUaW1lc1Jlc3VsdFR5cGUsICZ0aW1lc19yZXN1bHRfZGVzYyk7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUaW1lc1Jlc3VsdFR5cGUsICZ0aW1lc19yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInRpbWVzX3Jlc3VsdCIsIChQeU9iamVjdCAqKSZUaW1lc1Jlc3VsdFR5cGUpOwogCiAgICAgdW5hbWVfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi51bmFtZV9yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlVuYW1lUmVzdWx0VHlwZSwgJnVuYW1lX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlVuYW1lUmVzdWx0VHlwZSwgJnVuYW1lX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidW5hbWVfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlVuYW1lUmVzdWx0VHlwZSk7CiAKICNpZmRlZiBfX0FQUExFX18KQEAgLTEyMjQyLDcgKzEyMzMxLDYgQEAKICAgICBpbml0aWFsaXplZCA9IDE7CiAKICAgICByZXR1cm4gbTsKLQogfQogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCmluZGV4IDI4NWZkOWMuLjk5MDk0MDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwpAQCAtMTY4LDEyICsxNjgsOCBAQAogICAgIHN0cnVjdCBwYXNzd2QgKnA7CiAgICAgaWYgKChkID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoKHAgPSBnZXRwd3VpZCgwKSkgIT0gTlVMTCkgewotI2Vsc2UKICAgICBzZXRwd2VudCgpOwogICAgIHdoaWxlICgocCA9IGdldHB3ZW50KCkpICE9IE5VTEwpIHsKLSNlbmRpZgogICAgICAgICBQeU9iamVjdCAqdiA9IG1rcHdlbnQocCk7CiAgICAgICAgIGlmICh2ID09IE5VTEwgfHwgUHlMaXN0X0FwcGVuZChkLCB2KSAhPSAwKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHYpOwpAQCAtMjIwLDggKzIxNiw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RQd2RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcHdkX3R5cGVfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0UHdkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcHdkX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGluaXRpYWxpemVkID0gMTsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSAmU3RydWN0UHdkVHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B5ZXhwYXQuYyBiL01vZHVsZXMvcHlleHBhdC5jCmluZGV4IDdlNTFkMzUuLjNmNTFjMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHlleHBhdC5jCisrKyBiL01vZHVsZXMvcHlleHBhdC5jCkBAIC0xMCw2ICsxMCw5IEBACiAKICNkZWZpbmUgRklYX1RSQUNFCiAKK3N0YXRpYyBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlIEV4cGF0TWVtb3J5SGFuZGxlciA9IHsKKyAgICBQeU9iamVjdF9NYWxsb2MsIFB5T2JqZWN0X1JlYWxsb2MsIFB5T2JqZWN0X0ZyZWV9OworCiBlbnVtIEhhbmRsZXJUeXBlcyB7CiAgICAgU3RhcnRFbGVtZW50LAogICAgIEVuZEVsZW1lbnQsCkBAIC00MDQsNiArNDA3LDEwIEBACiBteV9DaGFyYWN0ZXJEYXRhSGFuZGxlcih2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKmRhdGEsIGludCBsZW4pCiB7CiAgICAgeG1scGFyc2VvYmplY3QgKnNlbGYgPSAoeG1scGFyc2VvYmplY3QgKikgdXNlckRhdGE7CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICBjYWxsX2NoYXJhY3Rlcl9oYW5kbGVyKHNlbGYsIGRhdGEsIGxlbik7CiAgICAgZWxzZSB7CkBAIC00MzgsNiArNDQ1LDkgQEAKICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciwgKnJ2LCAqYXJnczsKICAgICAgICAgaW50IGksIG1heDsKIAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8qIFNldCBtYXggdG8gdGhlIG51bWJlciBvZiBzbG90cyBmaWxsZWQgaW4gYXR0c1tdOyBtYXgvMiBpcwpAQCAtNTIxLDYgKzUzMSw4IEBACiAgICAgSU5JVCBcCiBcCiAgICAgaWYgKGhhdmVfaGFuZGxlcihzZWxmLCBOQU1FKSkgeyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkgXAogICAgICAgICAgICAgcmV0dXJuIFJFVFVSTjsgXAogICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSBQQVJBTV9GT1JNQVQgO1wKQEAgLTYzNSw2ICs2NDcsOSBAQAogICAgICAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqbW9kZWxvYmosICpuYW1lb2JqOwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICAgICAgbW9kZWxvYmogPSBjb252X2NvbnRlbnRfbW9kZWwobW9kZWwsIChjb252X3N0cmluZ190b191bmljb2RlKSk7CkBAIC04MjAsNyArODM1LDggQEAKICAgICAgICAgcyArPSBNQVhfQ0hVTktfU0laRTsKICAgICAgICAgc2xlbiAtPSBNQVhfQ0hVTktfU0laRTsKICAgICB9Ci0gICAgcmMgPSBYTUxfUGFyc2Uoc2VsZi0+aXRzZWxmLCBzLCBzbGVuLCBpc0ZpbmFsKTsKKyAgICBhc3NlcnQoTUFYX0NIVU5LX1NJWkUgPCBJTlRfTUFYICYmIHNsZW4gPCBJTlRfTUFYKTsKKyAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIChpbnQpc2xlbiwgaXNGaW5hbCk7CiAKIGRvbmU6CiAgICAgaWYgKHZpZXcuYnVmICE9IE5VTEwpCkBAIC0xMDAyLDcgKzEwMTgsNyBAQAogICAgIFB5T2JqZWN0X0dDX1RyYWNrKG5ld19wYXJzZXIpOwogCiAgICAgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IG1hbGxvYyhuZXdfcGFyc2VyLT5idWZmZXJfc2l6ZSk7CisgICAgICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhuZXdfcGFyc2VyLT5idWZmZXJfc2l6ZSk7CiAgICAgICAgIGlmIChuZXdfcGFyc2VyLT5idWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG5ld19wYXJzZXIpOwogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDE5LDcgKzEwMzUsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIG5ld19wYXJzZXItPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIG5ld19wYXJzZXItPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghbmV3X3BhcnNlci0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKG5ld19wYXJzZXIpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTExMjcsMTQgKzExNDMsMTkgQEAKICAgICB2b2lkICpkYXRhOwogICAgIHVuc2lnbmVkIGludCBraW5kOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworCiAgICAgaWYgKHRlbXBsYXRlX2J1ZmZlclsxXSA9PSAwKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgICAgIHRlbXBsYXRlX2J1ZmZlcltpXSA9IGk7CiAgICAgfQogCiAgICAgdSA9IFB5VW5pY29kZV9EZWNvZGUoKGNoYXIqKSB0ZW1wbGF0ZV9idWZmZXIsIDI1NiwgbmFtZSwgInJlcGxhY2UiKTsKLSAgICBpZiAodSA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWSh1KSkKKyAgICBpZiAodSA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWSh1KSkgeworICAgICAgICBQeV9YREVDUkVGKHUpOwogICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodSkgIT0gMjU2KSB7CiAgICAgICAgIFB5X0RFQ1JFRih1KTsKQEAgLTExODAsMjggKzEyMDEsMjYgQEAKICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7CiAgICAgc2VsZi0+bnNfcHJlZml4ZXMgPSAwOwogICAgIHNlbGYtPmhhbmRsZXJzID0gTlVMTDsKLSAgICBpZiAobmFtZXNwYWNlX3NlcGFyYXRvciAhPSBOVUxMKSB7Ci0gICAgICAgIHNlbGYtPml0c2VsZiA9IFhNTF9QYXJzZXJDcmVhdGVOUyhlbmNvZGluZywgKm5hbWVzcGFjZV9zZXBhcmF0b3IpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZShlbmNvZGluZyk7Ci0gICAgfQotI2lmICgoWE1MX01BSk9SX1ZFUlNJT04gPj0gMikgJiYgKFhNTF9NSU5PUl9WRVJTSU9OID49IDEpKSB8fCBkZWZpbmVkKFhNTF9IQVNfU0VUX0hBU0hfU0FMVCkKLSAgICAvKiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHVwc3RyZWFtIGluIGxpYmV4cGF0IDIuMS4wLiAgT3VyIGV4cGF0IGNvcHkKLSAgICAgKiBoYXMgYSBiYWNrcG9ydCBvZiB0aGlzIGZlYXR1cmUgd2hlcmUgd2UgYWxzbyBkZWZpbmUgWE1MX0hBU19TRVRfSEFTSF9TQUxUCi0gICAgICogdG8gaW5kaWNhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgdXNlIGl0LiAqLwotICAgIFhNTF9TZXRIYXNoU2FsdChzZWxmLT5pdHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKV9QeV9IYXNoU2VjcmV0LnByZWZpeCk7Ci0jZW5kaWYKICAgICBzZWxmLT5pbnRlcm4gPSBpbnRlcm47CiAgICAgUHlfWElOQ1JFRihzZWxmLT5pbnRlcm4pOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworCisgICAgLyogbmFtZXNwYWNlX3NlcGFyYXRvciBpcyBlaXRoZXIgTlVMTCBvciBjb250YWlucyBvbmUgY2hhciArIFwwICovCisgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZV9NTShlbmNvZGluZywgJkV4cGF0TWVtb3J5SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9zZXBhcmF0b3IpOwogICAgIGlmIChzZWxmLT5pdHNlbGYgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlhNTF9QYXJzZXJDcmVhdGUgZmFpbGVkIik7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorI2lmICgoWE1MX01BSk9SX1ZFUlNJT04gPj0gMikgJiYgKFhNTF9NSU5PUl9WRVJTSU9OID49IDEpKSB8fCBkZWZpbmVkKFhNTF9IQVNfU0VUX0hBU0hfU0FMVCkKKyAgICAvKiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHVwc3RyZWFtIGluIGxpYmV4cGF0IDIuMS4wLiAgT3VyIGV4cGF0IGNvcHkKKyAgICAgKiBoYXMgYSBiYWNrcG9ydCBvZiB0aGlzIGZlYXR1cmUgd2hlcmUgd2UgYWxzbyBkZWZpbmUgWE1MX0hBU19TRVRfSEFTSF9TQUxUCisgICAgICogdG8gaW5kaWNhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgdXNlIGl0LiAqLworICAgIFhNTF9TZXRIYXNoU2FsdChzZWxmLT5pdHNlbGYsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKV9QeV9IYXNoU2VjcmV0LmV4cGF0Lmhhc2hzYWx0KTsKKyNlbmRpZgogICAgIFhNTF9TZXRVc2VyRGF0YShzZWxmLT5pdHNlbGYsICh2b2lkICopc2VsZik7CiAgICAgWE1MX1NldFVua25vd25FbmNvZGluZ0hhbmRsZXIoc2VsZi0+aXRzZWxmLAogICAgICAgICAgICAgICAgICAgKFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyKSBQeVVua25vd25FbmNvZGluZ0hhbmRsZXIsIE5VTEwpOwpAQCAtMTIwOSw3ICsxMjI4LDcgQEAKICAgICBmb3IgKGkgPSAwOyBoYW5kbGVyX2luZm9baV0ubmFtZSAhPSBOVUxMOyBpKyspCiAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CiAKLSAgICBzZWxmLT5oYW5kbGVycyA9IG1hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBpKTsKKyAgICBzZWxmLT5oYW5kbGVycyA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBpKTsKICAgICBpZiAoIXNlbGYtPmhhbmRsZXJzKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMjM2LDExICsxMjU1LDExIEBACiAgICAgICAgICAgICBzZWxmLT5oYW5kbGVyc1tpXSA9IE5VTEw7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRlbXApOwogICAgICAgICB9Ci0gICAgICAgIGZyZWUoc2VsZi0+aGFuZGxlcnMpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmhhbmRsZXJzKTsKICAgICAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwogICAgIH0KICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CiAgICAgfQogICAgIFB5X1hERUNSRUYoc2VsZi0+aW50ZXJuKTsKQEAgLTE0NDAsNyArMTQ1OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChiKSB7CiAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBtYWxsb2Moc2VsZi0+YnVmZmVyX3NpemUpOworICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTE0NTEsNyArMTQ3MCw3IEBACiAgICAgICAgIGVsc2UgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOwogICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKQEAgLTE1MTMsOSArMTUzMiw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogZnJlZSBleGlzdGluZyBidWZmZXIgKi8KLSAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICB9Ci0gICAgICBzZWxmLT5idWZmZXIgPSBtYWxsb2MobmV3X2J1ZmZlcl9zaXplKTsKKyAgICAgIHNlbGYtPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhuZXdfYnVmZmVyX3NpemUpOwogICAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHl0aG9uLmMgYi9Nb2R1bGVzL3B5dGhvbi5jCmluZGV4IGY3ODFkOWEuLjk4MTFjMDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHl0aG9uLmMKKysrIGIvTW9kdWxlcy9weXRob24uYwpAQCAtMjMsOSArMjMsMTIgQEAKICAgICB3Y2hhcl90ICoqYXJndl9jb3B5MjsKICAgICBpbnQgaSwgcmVzOwogICAgIGNoYXIgKm9sZGxvYzsKKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIGZwX2V4Y2VwdF90IG07CisjZW5kaWYKIAotICAgIGFyZ3ZfY29weSA9ICh3Y2hhcl90ICoqKVB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKihhcmdjKzEpKTsKLSAgICBhcmd2X2NvcHkyID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOworICAgIGFyZ3ZfY29weSA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOworICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIChhcmdjKzEpKTsKICAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICByZXR1cm4gMTsKQEAgLTM3LDE3ICs0MCwyMSBAQAogICAgICAqIGV4Y2VwdGlvbnMgYnkgZGVmYXVsdC4gIEhlcmUgd2UgZGlzYWJsZSB0aGVtLgogICAgICAqLwogI2lmZGVmIF9fRnJlZUJTRF9fCi0gICAgZnBfZXhjZXB0X3QgbTsKLQogICAgIG0gPSBmcGdldG1hc2soKTsKICAgICBmcHNldG1hc2sobSAmIH5GUF9YX09GTCk7CiAjZW5kaWYKLSAgICBvbGRsb2MgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworCisgICAgb2xkbG9jID0gX1B5TWVtX1Jhd1N0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgaWYgKCFvbGRsb2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKICAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CiAgICAgICAgIGlmICghYXJndl9jb3B5W2ldKSB7Ci0gICAgICAgICAgICBmcmVlKG9sZGxvYyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIFB5dGhvbiBlcnJvcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgIyVpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxKTsKQEAgLTU4LDEzICs2NSwxMyBAQAogICAgIGFyZ3ZfY29weTJbYXJnY10gPSBhcmd2X2NvcHlbYXJnY10gPSBOVUxMOwogCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKLSAgICBmcmVlKG9sZGxvYyk7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOwogICAgIHJlcyA9IFB5X01haW4oYXJnYywgYXJndl9jb3B5KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5MltpXSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5MltpXSk7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5KTsKLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTIpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5KTsKKyAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTIpOwogICAgIHJldHVybiByZXM7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvcmVhZGxpbmUuYyBiL01vZHVsZXMvcmVhZGxpbmUuYwppbmRleCAwOTZjNmQxLi5mMjU1YTg3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3JlYWRsaW5lLmMKKysrIGIvTW9kdWxlcy9yZWFkbGluZS5jCkBAIC02LDYgKzYsNyBAQAogCiAvKiBTdGFuZGFyZCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC03Niw2ICs3Nyw1NSBAQAogICAgKHNlZSBpc3N1ZSAjMTcyODkgZm9yIHRoZSBtb3RpdmF0aW9uKS4gKi8KIHN0YXRpYyBjaGFyICpjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzOwogCit0eXBlZGVmIHN0cnVjdCB7CisgIFB5T2JqZWN0ICpjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rOworICBQeU9iamVjdCAqc3RhcnR1cF9ob29rOworICBQeU9iamVjdCAqcHJlX2lucHV0X2hvb2s7CisgIFB5T2JqZWN0ICpjb21wbGV0ZXI7CisgIFB5T2JqZWN0ICpiZWdpZHg7CisgIFB5T2JqZWN0ICplbmRpZHg7Cit9IHJlYWRsaW5lc3RhdGU7CisKKworI2RlZmluZSByZWFkbGluZV9zdGF0ZShvKSAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShvKSkKKworc3RhdGljIGludAorcmVhZGxpbmVfY2xlYXIoUHlPYmplY3QgKm0pCit7CisgICByZWFkbGluZXN0YXRlICpzdGF0ZSA9IHJlYWRsaW5lX3N0YXRlKG0pOworICAgUHlfQ0xFQVIoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgUHlfQ0xFQVIoc3RhdGUtPnN0YXJ0dXBfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+cHJlX2lucHV0X2hvb2spOworICAgUHlfQ0xFQVIoc3RhdGUtPmNvbXBsZXRlcik7CisgICBQeV9DTEVBUihzdGF0ZS0+YmVnaWR4KTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5lbmRpZHgpOworICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRsaW5lX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICByZWFkbGluZXN0YXRlICpzdGF0ZSA9IHJlYWRsaW5lX3N0YXRlKG0pOworICAgIFB5X1ZJU0lUKHN0YXRlLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rKTsKKyAgICBQeV9WSVNJVChzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgICBQeV9WSVNJVChzdGF0ZS0+cHJlX2lucHV0X2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5jb21wbGV0ZXIpOworICAgIFB5X1ZJU0lUKHN0YXRlLT5iZWdpZHgpOworICAgIFB5X1ZJU0lUKHN0YXRlLT5lbmRpZHgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVhZGxpbmVfZnJlZSh2b2lkICptKQoreworICAgIHJlYWRsaW5lX2NsZWFyKChQeU9iamVjdCAqKW0pOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWYgcmVhZGxpbmVtb2R1bGU7CisKKyNkZWZpbmUgcmVhZGxpbmVzdGF0ZV9nbG9iYWwgKChyZWFkbGluZXN0YXRlICopUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZyZWFkbGluZW1vZHVsZSkpKQorCisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHNlbmQgb25lIGxpbmUgdG8gcmVhZGxpbmUncyBpbml0IGZpbGUgcGFyc2VyICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC04NiwxMiArMTM2LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIE1ha2UgYSBjb3B5IC0tIHJsX3BhcnNlX2FuZF9iaW5kKCkgbW9kaWZpZXMgaXRzIGFyZ3VtZW50ICovCiAgICAgLyogQmVybmFyZCBIZXJ6b2cgKi8KLSAgICBjb3B5ID0gbWFsbG9jKDEgKyBzdHJsZW4ocykpOworICAgIGNvcHkgPSBQeU1lbV9NYWxsb2MoMSArIHN0cmxlbihzKSk7CiAgICAgaWYgKGNvcHkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgc3RyY3B5KGNvcHksIHMpOwogICAgIHJsX3BhcnNlX2FuZF9iaW5kKGNvcHkpOwotICAgIGZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KKyAgICBQeU1lbV9GcmVlKGNvcHkpOyAvKiBGcmVlIHRoZSBjb3B5ICovCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTI1MiwyMyArMzAyLDIxIEBACiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IGhvb2sgZnVuY3Rpb25zIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpzdGFydHVwX2hvb2sgPSBOVUxMOwogCiAjaWZkZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwotc3RhdGljIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vayA9IE5VTEw7CisKICNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBzZXRfaG9vaygiY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayIsCi0gICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLCBhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLCBhcmdzKTsKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fRElTUExBWV9NQVRDSEVTX0hPT0sKICAgICAvKiBXZSBjYW5ub3Qgc2V0IHRoaXMgaG9vayBnbG9iYWxseSwgc2luY2UgaXQgcmVwbGFjZXMgdGhlCiAgICAgICAgZGVmYXVsdCBjb21wbGV0aW9uIGRpc3BsYXkuICovCiAgICAgcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9Ci0gICAgICAgIGNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgPworICAgICAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CiAjaWYgZGVmaW5lZChfUkxfRlVOQ1RJT05fVFlQRURFRikKICAgICAgICAgKHJsX2NvbXBkaXNwX2Z1bmNfdCAqKW9uX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgOiAwOwogI2Vsc2UKQEAgLTI4OSw3ICszMzcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9zdGFydHVwX2hvb2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygic3RhcnR1cF9ob29rIiwgJnN0YXJ0dXBfaG9vaywgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3N0YXJ0dXBfaG9vaywKQEAgLTMwNiw3ICszNTQsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wcmVfaW5wdXRfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJwcmVfaW5wdXRfaG9vayIsICZwcmVfaW5wdXRfaG9vaywgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJwcmVfaW5wdXRfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+cHJlX2lucHV0X2hvb2ssIGFyZ3MpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX3NldF9wcmVfaW5wdXRfaG9vaywKQEAgLTMyMSwxMCArMzY5LDEwIEBACiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHNwZWNpZnkgYSB3b3JkIGNvbXBsZXRlciBpbiBQeXRob24gKi8KIAotc3RhdGljIFB5T2JqZWN0ICpjb21wbGV0ZXIgPSBOVUxMOwogCi1zdGF0aWMgUHlPYmplY3QgKmJlZ2lkeCA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKmVuZGlkeCA9IE5VTEw7CisKKworCiAKIAogLyogR2V0IHRoZSBjb21wbGV0aW9uIHR5cGUgZm9yIHRoZSBzY29wZSBvZiB0aGUgdGFiLWNvbXBsZXRpb24gKi8KQEAgLTM0NCw4ICszOTIsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9iZWdpZHgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZykKIHsKLSAgICBQeV9JTkNSRUYoYmVnaWR4KTsKLSAgICByZXR1cm4gYmVnaWR4OworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeDsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfYmVnaWR4LApAQCAtMzU4LDggKzQwNiw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2VuZGlkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihlbmRpZHgpOwotICAgIHJldHVybiBlbmRpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9lbmRpZHgsCkBAIC01MjQsNyArNTcyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soImNvbXBsZXRlciIsICZjb21wbGV0ZXIsIGFyZ3MpOworICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsIGFyZ3MpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX3NldF9jb21wbGV0ZXIsCkBAIC01MzgsMTEgKzU4NiwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaWYgKGNvbXBsZXRlciA9PSBOVUxMKSB7CisgICAgaWYgKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0gICAgUHlfSU5DUkVGKGNvbXBsZXRlcik7Ci0gICAgcmV0dXJuIGNvbXBsZXRlcjsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcik7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXI7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2NvbXBsZXRlciwKQEAgLTc0Niw5ICs3OTQsNiBAQAogICAgIGludCByZXN1bHQgPSAwOwogICAgIGlmIChmdW5jICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnI7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7Ci0jZW5kaWYKICAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jLCBOVUxMKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC03NjUsOSArODEwLDYgQEAKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlfWERFQ1JFRihyKTsKICAgICAgIGRvbmU6Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzc2LDE0ICs4MTgsMzAgQEAKIHN0YXRpYyBpbnQKIG9uX3N0YXJ0dXBfaG9vayh2b2lkKQogewotICAgIHJldHVybiBvbl9ob29rKHN0YXJ0dXBfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5zdGFydHVwX2hvb2spOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByOwogfQogCiAjaWZkZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwogc3RhdGljIGludAogb25fcHJlX2lucHV0X2hvb2sodm9pZCkKIHsKLSAgICByZXR1cm4gb25faG9vayhwcmVfaW5wdXRfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAjZW5kaWYKIApAQCAtODEwLDcgKzg2OCw3IEBACiAgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShtLCBpLCBzKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOwogCiAgICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CkBAIC04NDAsMTMgKzg5OCwxMyBAQAogb25fY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhdGUpCiB7CiAgICAgY2hhciAqcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoY29tcGxldGVyICE9IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCiAgICAgICAgIHJsX2F0dGVtcHRlZF9jb21wbGV0aW9uX292ZXIgPSAxOwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOworICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsICJzaSIsIHRleHQsIHN0YXRlKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChyID09IFB5X05vbmUpIHsKQEAgLTg3OSwyNCArOTM3LDMyIEBACiBzdGF0aWMgY2hhciAqKgogZmxleF9jb21wbGV0ZShjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CisgICAgY2hhciAqKnJlc3VsdDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIKICAgICBybF9jb21wbGV0aW9uX2FwcGVuZF9jaGFyYWN0ZXIgPSdcMCc7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fU1VQUFJFU1NfQVBQRU5ECiAgICAgcmxfY29tcGxldGlvbl9zdXBwcmVzc19hcHBlbmQgPSAwOwogI2VuZGlmCi0gICAgUHlfWERFQ1JFRihiZWdpZHgpOwotICAgIFB5X1hERUNSRUYoZW5kaWR4KTsKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKLSAgICBlbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKKyAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlbmQpOworICAgIHJlc3VsdCA9IGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCiAvKiBIZWxwZXIgdG8gaW5pdGlhbGl6ZSBHTlUgcmVhZGxpbmUgcHJvcGVybHkuICovCiAKIHN0YXRpYyB2b2lkCi1zZXR1cF9yZWFkbGluZSh2b2lkKQorc2V0dXBfcmVhZGxpbmUocmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlKQogewogI2lmZGVmIFNBVkVfTE9DQUxFCiAgICAgY2hhciAqc2F2ZWRfbG9jYWxlID0gc3RyZHVwKHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpOwpAQCAtOTI2LDEwICs5OTIsNiBAQAogICAgIHVzaW5nX2hpc3RvcnkoKTsKIAogICAgIHJsX3JlYWRsaW5lX25hbWUgPSAicHl0aG9uIjsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIC8qIEFsbG93ICRpZiB0ZXJtPSBpbiAuaW5wdXRyYyB0byB3b3JrICovCi0gICAgcmxfdGVybWluYWxfbmFtZSA9IGdldGVudigiVEVSTSIpOwotI2VuZGlmCiAgICAgLyogRm9yY2UgcmViaW5kIG9mIFRBQiB0byBpbnNlcnQtdGFiICovCiAgICAgcmxfYmluZF9rZXkoJ1x0JywgcmxfaW5zZXJ0KTsKICAgICAvKiBCaW5kIGJvdGggRVNDLVRBQiBhbmQgRVNDLUVTQyB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiAqLwpAQCAtOTQ4LDggKzEwMTAsOCBAQAogICAgICAgICBzdHJkdXAoIiBcdFxuYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLDw+Lz8iKTsKICAgICAgICAgLyogQWxsIG5vbmFscGhhbnVtcyBleGNlcHQgJy4nICovCiAKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgIG1vZF9zdGF0ZS0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKICAgICAvKiBJbml0aWFsaXplIChhbGxvd3MgLmlucHV0cmMgdG8gb3ZlcnJpZGUpCiAgICAgICoKICAgICAgKiBYWFg6IEEgYnVnIGluIHRoZSByZWFkbGluZS0yLjIgbGlicmFyeSBjYXVzZXMgYSBtZW1vcnkgbGVhawpAQCAtOTgxLDcgKzEwNDMsNyBAQAogZXh0ZXJuIFB5VGhyZWFkU3RhdGUqIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogCiBzdGF0aWMgY2hhciAqCi1yZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKK3JlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjb25zdCBjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQogewogICAgIGNoYXIgKiBub3RfZG9uZV9yZWFkaW5nID0gIiI7CiAgICAgZmRfc2V0IHNlbGVjdHNldDsKQEAgLTEwODMsNyArMTE0NSw3IEBACiAKIAogc3RhdGljIGNoYXIgKgotY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK2NhbGxfcmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG47CiAgICAgY2hhciAqcCwgKnE7CkBAIC0xMTE0LDcgKzExNzYsNyBAQAogCiAgICAgLyogV2UgZ290IGFuIEVPRiwgcmV0dXJuIGEgZW1wdHkgc3RyaW5nLiAqLwogICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgcCA9IFB5TWVtX01hbGxvYygxKTsKKyAgICAgICAgcCA9IFB5TWVtX1Jhd01hbGxvYygxKTsKICAgICAgICAgaWYgKHAgIT0gTlVMTCkKICAgICAgICAgICAgICpwID0gJ1wwJzsKICAgICAgICAgUkVTVE9SRV9MT0NBTEUoc2F2ZWRfbG9jYWxlKQpAQCAtMTE0Miw3ICsxMjA0LDcgQEAKICAgICAvKiBDb3B5IHRoZSBtYWxsb2MnZWQgYnVmZmVyIGludG8gYSBQeU1lbV9NYWxsb2MnZWQgb25lIGFuZAogICAgICAgIHJlbGVhc2UgdGhlIG9yaWdpbmFsLiAqLwogICAgIHEgPSBwOwotICAgIHAgPSBQeU1lbV9NYWxsb2MobisyKTsKKyAgICBwID0gUHlNZW1fUmF3TWFsbG9jKG4rMik7CiAgICAgaWYgKHAgIT0gTlVMTCkgewogICAgICAgICBzdHJuY3B5KHAsIHEsIG4pOwogICAgICAgICBwW25dID0gJ1xuJzsKQEAgLTExNjgsMTIgKzEyMzAsMTIgQEAKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgInJlYWRsaW5lIiwKICAgICBkb2NfbW9kdWxlLAotICAgIC0xLAorICAgIHNpemVvZihyZWFkbGluZXN0YXRlKSwKICAgICByZWFkbGluZV9tZXRob2RzLAogICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKKyAgICByZWFkbGluZV90cmF2ZXJzZSwKKyAgICByZWFkbGluZV9jbGVhciwKKyAgICByZWFkbGluZV9mcmVlCiB9OwogCiAKQEAgLTExODEsNiArMTI0Myw3IEBACiBQeUluaXRfcmVhZGxpbmUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKKyAgICByZWFkbGluZXN0YXRlICptb2Rfc3RhdGU7CiAKICNpZmRlZiBfX0FQUExFX18KICAgICBpZiAoc3RybmNtcChybF9saWJyYXJ5X3ZlcnNpb24sIGxpYmVkaXRfdmVyc2lvbl90YWcsIHN0cmxlbihsaWJlZGl0X3ZlcnNpb25fdGFnKSkgPT0gMCkgewpAQCAtMTE5Nyw3ICsxMjYwLDggQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIG1vZF9zdGF0ZSA9IChyZWFkbGluZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKG0pOwogICAgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgPSBjYWxsX3JlYWRsaW5lOwotICAgIHNldHVwX3JlYWRsaW5lKCk7CisgICAgc2V0dXBfcmVhZGxpbmUobW9kX3N0YXRlKTsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcmVzb3VyY2UuYyBiL01vZHVsZXMvcmVzb3VyY2UuYwppbmRleCBiMjk0YThjLi5jMTJjZTM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Jlc291cmNlLmMKKysrIGIvTW9kdWxlcy9yZXNvdXJjZS5jCkBAIC0xMDYsNiArMTA2LDQ0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludAorcHkycmxpbWl0KFB5T2JqZWN0ICpjdXJvYmosIFB5T2JqZWN0ICptYXhvYmosIHN0cnVjdCBybGltaXQgKnJsX291dCkKK3sKKyNpZiAhZGVmaW5lZChIQVZFX0xBUkdFRklMRV9TVVBQT1JUKQorICAgIHJsX291dC0+cmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nKGN1cm9iaik7CisgICAgaWYgKHJsX291dC0+cmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmxfb3V0LT5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmdMb25nKGN1cm9iaik7CisgICAgaWYgKHJsX291dC0+cmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmxfb3V0LT5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmdMb25nKG1heG9iaik7CisgICAgaWYgKHJsX291dC0+cmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisjZW5kaWYKKworICAgIHJsX291dC0+cmxpbV9jdXIgPSBybF9vdXQtPnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gcmxfb3V0LT5ybGltX21heCAmIFJMSU1fSU5GSU5JVFk7CisgICAgcmV0dXJuIDA7CisKK30KKworc3RhdGljIFB5T2JqZWN0KgorcmxpbWl0MnB5KHN0cnVjdCBybGltaXQgcmwpCit7CisjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKyAgICBpZiAoc2l6ZW9mKHJsLnJsaW1fY3VyKSA+IHNpemVvZihsb25nKSkgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX2N1ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9tYXgpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsbCIsIChsb25nKSBybC5ybGltX2N1ciwgKGxvbmcpIHJsLnJsaW1fbWF4KTsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIHJlc291cmNlX2dldHJsaW1pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xMjYsMTUgKzE2NCw3IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKLSAgICBpZiAoc2l6ZW9mKHJsLnJsaW1fY3VyKSA+IHNpemVvZihsb25nKSkgewotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTEwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX2N1ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9tYXgpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsbCIsIChsb25nKSBybC5ybGltX2N1ciwgKGxvbmcpIHJsLnJsaW1fbWF4KTsKKyAgICByZXR1cm4gcmxpbWl0MnB5KHJsKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE2NiwyNSArMTk2LDEwIEBACiAgICAgY3Vyb2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDApOwogICAgIG1heG9iaiA9IFB5VHVwbGVfR0VUX0lURU0obGltaXRzLCAxKTsKIAotI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nKGN1cm9iaik7Ci0gICAgaWYgKHJsLnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBpZiAocHkycmxpbWl0KGN1cm9iaiwgbWF4b2JqLCAmcmwpIDwgMCkgewogICAgICAgICBnb3RvIGVycm9yOwotICAgIHJsLnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZWxzZQotICAgIC8qIFRoZSBsaW1pdHMgYXJlIHByb2JhYmx5IGJpZ2dlciB0aGFuIGEgbG9uZyAqLwotICAgIHJsLnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIHJsLnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKLSAgICBpZiAocmwucmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGVycm9yOwotI2VuZGlmCisgICAgfQogCi0gICAgcmwucmxpbV9jdXIgPSBybC5ybGltX2N1ciAmIFJMSU1fSU5GSU5JVFk7Ci0gICAgcmwucmxpbV9tYXggPSBybC5ybGltX21heCAmIFJMSU1fSU5GSU5JVFk7CiAgICAgaWYgKHNldHJsaW1pdChyZXNvdXJjZSwgJnJsKSA9PSAtMSkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0yMDUsNiArMjIwLDQ4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNpZmRlZiBIQVZFX1BSTElNSVQKK3N0YXRpYyBQeU9iamVjdCAqCityZXNvdXJjZV9wcmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBzdHJ1Y3QgcmxpbWl0IG9sZF9saW1pdCwgbmV3X2xpbWl0OworICAgIGludCByZXNvdXJjZSwgcmV0dmFsOworICAgIHBpZF90IHBpZDsKKyAgICBQeU9iamVjdCAqY3Vyb2JqPU5VTEwsICptYXhvYmo9TlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpfChPTyk6cHJsaW1pdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwaWQsICZyZXNvdXJjZSwgJmN1cm9iaiwgJm1heG9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHJlc291cmNlIDwgMCB8fCByZXNvdXJjZSA+PSBSTElNX05MSU1JVFMpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCByZXNvdXJjZSBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGN1cm9iaiAhPSBOVUxMKSB7CisgICAgICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZuZXdfbGltaXQpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCAmbmV3X2xpbWl0LCAmb2xkX2xpbWl0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHZhbCA9IHBybGltaXQocGlkLCByZXNvdXJjZSwgTlVMTCwgJm9sZF9saW1pdCk7CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9PSAtMSkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudCBsaW1pdCBleGNlZWRzIG1heGltdW0gbGltaXQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJsaW1pdDJweShvbGRfbGltaXQpOworfQorI2VuZGlmIC8qIEhBVkVfUFJMSU1JVCAqLworCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cGFnZXNpemUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC0yMjksNiArMjg2LDkgQEAKIHJlc291cmNlX21ldGhvZHNbXSA9IHsKICAgICB7ImdldHJ1c2FnZSIsICAgIHJlc291cmNlX2dldHJ1c2FnZSwgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0cmxpbWl0IiwgICAgcmVzb3VyY2VfZ2V0cmxpbWl0LCAgIE1FVEhfVkFSQVJHU30sCisjaWZkZWYgSEFWRV9QUkxJTUlUCisgICAgeyJwcmxpbWl0IiwgICAgICByZXNvdXJjZV9wcmxpbWl0LCAgICAgTUVUSF9WQVJBUkdTfSwKKyNlbmRpZgogICAgIHsic2V0cmxpbWl0IiwgICAgcmVzb3VyY2Vfc2V0cmxpbWl0LCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRwYWdlc2l6ZSIsICByZXNvdXJjZV9nZXRwYWdlc2l6ZSwgTUVUSF9OT0FSR1N9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTI2Myw4MCArMzIzLDEwNSBAQAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAgICAgUHlfSU5DUkVGKFB5RXhjX09TRXJyb3IpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBQeUV4Y19PU0Vycm9yKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RSVXNhZ2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcnVzYWdlX2Rlc2MpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RSVXNhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgUHlfSU5DUkVGKCZTdHJ1Y3RSVXNhZ2VUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9ydXNhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QqKSAmU3RydWN0UlVzYWdlVHlwZSk7CiAKICAgICAvKiBpbnNlcnQgY29uc3RhbnRzICovCiAjaWZkZWYgUkxJTUlUX0NQVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ1BVIiwgUkxJTUlUX0NQVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0NQVSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9GU0laRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfRlNJWkUiLCBSTElNSVRfRlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9GU0laRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9EQVRBCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9EQVRBIiwgUkxJTUlUX0RBVEEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9EQVRBKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1NUQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9TVEFDSyIsIFJMSU1JVF9TVEFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1NUQUNLKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0NPUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0NPUkUiLCBSTElNSVRfQ09SRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0NPUkUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTk9GSUxFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9OT0ZJTEUiLCBSTElNSVRfTk9GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTk9GSUxFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX09GSUxFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9PRklMRSIsIFJMSU1JVF9PRklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX09GSUxFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1ZNRU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1ZNRU0iLCBSTElNSVRfVk1FTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1ZNRU0pOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQVMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0FTIiwgUkxJTUlUX0FTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQVMpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfUlNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9SU1MiLCBSTElNSVRfUlNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlNTKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX05QUk9DCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9OUFJPQyIsIFJMSU1JVF9OUFJPQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX05QUk9DKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX01FTUxPQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX01FTUxPQ0siLCBSTElNSVRfTUVNTE9DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01FTUxPQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU0JTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9TQlNJWkUiLCBSTElNSVRfU0JTSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU0JTSVpFKTsKICNlbmRpZgogCisvKiBMaW51eCBzcGVjaWZpYyAqLworI2lmZGVmIFJMSU1JVF9NU0dRVUVVRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9NU0dRVUVVRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9OSUNFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX05JQ0UpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfUlRQUklPCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1JUUFJJTyk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFRJTUUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRUSU1FKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1NJR1BFTkRJTkcKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU0lHUEVORElORyk7CisjZW5kaWYKKworLyogdGFyZ2V0ICovCiAjaWZkZWYgUlVTQUdFX1NFTEYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUlVTQUdFX1NFTEYiLCBSVVNBR0VfU0VMRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1NFTEYpOwogI2VuZGlmCiAKICNpZmRlZiBSVVNBR0VfQ0hJTERSRU4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUlVTQUdFX0NISUxEUkVOIiwgUlVTQUdFX0NISUxEUkVOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfQ0hJTERSRU4pOwogI2VuZGlmCiAKICNpZmRlZiBSVVNBR0VfQk9USAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQk9USCIsIFJVU0FHRV9CT1RIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfQk9USCk7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9USFJFQUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUlVTQUdFX1RIUkVBRCIsIFJVU0FHRV9USFJFQUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9USFJFQUQpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKaW5kZXggNjAzYTJiNi4uNjI5MWEyZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCkBAIC00NywxMSArNDcsNiBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHV0aWxzLmg+Ci0jZW5kaWYKLQogI2lmZGVmIE1TX1dJTkRPV1MKICMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjICBpbmNsdWRlIDx3aW5zb2NrLmg+CkBAIC0zMDQsOSArMjk5LDkgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0ID0gUHlUdXBsZV9QYWNrKDMsIGlmZGxpc3QsIG9mZGxpc3QsIGVmZGxpc3QpOwogCi0gICAgICAgIFB5X0RFQ1JFRihpZmRsaXN0KTsKLSAgICAgICAgUHlfREVDUkVGKG9mZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYoZWZkbGlzdCk7CisgICAgICAgIFB5X1hERUNSRUYoaWZkbGlzdCk7CisgICAgICAgIFB5X1hERUNSRUYob2ZkbGlzdCk7CisgICAgICAgIFB5X1hERUNSRUYoZWZkbGlzdCk7CiAgICAgfQogCiAgIGZpbmFsbHk6CkBAIC02ODksNiArNjg0LDEzIEBACiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgZGV2cG9sbF9UeXBlOwogCitzdGF0aWMgUHlPYmplY3QgKgorZGV2cG9sbF9lcnJfY2xvc2VkKHZvaWQpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBkZXZwb2xsIG9iamVjdCIpOworICAgIHJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50IGRldnBvbGxfZmx1c2goZGV2cG9sbE9iamVjdCAqc2VsZikKIHsKICAgICBpbnQgc2l6ZSwgbjsKQEAgLTcyOSw2ICs3MzEsOSBAQAogICAgIFB5T2JqZWN0ICpvOwogICAgIGludCBmZCwgZXZlbnRzID0gUE9MTElOIHwgUE9MTFBSSSB8IFBPTExPVVQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnJlZ2lzdGVyIiwgJm8sICZldmVudHMpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc5Myw2ICs3OTgsOSBAQAogewogICAgIGludCBmZDsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgZmQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKCBvICk7CiAgICAgaWYgKGZkID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgyMiw2ICs4MzAsOSBAQAogICAgIGxvbmcgdGltZW91dDsKICAgICBQeU9iamVjdCAqdmFsdWUsICpudW0xLCAqbnVtMjsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAicG9sbCIsIDAsIDEsICZ0b3V0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC05MDAsNiArOTExLDYwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK2RldnBvbGxfaW50ZXJuYWxfY2xvc2UoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgc2F2ZV9lcnJubyA9IDA7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPj0gMCkgeworICAgICAgICBpbnQgZmQgPSBzZWxmLT5mZF9kZXZwb2xsOworICAgICAgICBzZWxmLT5mZF9kZXZwb2xsID0gLTE7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGNsb3NlKGZkKSA8IDApCisgICAgICAgICAgICBzYXZlX2Vycm5vID0gZXJybm87CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIHJldHVybiBzYXZlX2Vycm5vOworfQorCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgZXJybm8gPSBkZXZwb2xsX2ludGVybmFsX2Nsb3NlKHNlbGYpOworICAgIGlmIChlcnJubyA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihkZXZwb2xsX2Nsb3NlX2RvYywKKyJjbG9zZSgpIC0+IE5vbmVcblwKK1xuXAorQ2xvc2UgdGhlIGRldnBvbGwgZmlsZSBkZXNjcmlwdG9yLiBGdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIGRldnBvbGxcblwKK29iamVjdCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9nZXRfY2xvc2VkKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9maWxlbm8oZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHNlbGYtPmZkX2RldnBvbGwpOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9maWxlbm9fZG9jLAorImZpbGVubygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvci4iKTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRldnBvbGxfbWV0aG9kc1tdID0gewogICAgIHsicmVnaXN0ZXIiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcmVnaXN0ZXIsCiAgICAgIE1FVEhfVkFSQVJHUywgIGRldnBvbGxfcmVnaXN0ZXJfZG9jfSwKQEAgLTkwOSw5ICs5NzQsMTkgQEAKICAgICAgTUVUSF9PLCAgICAgICAgZGV2cG9sbF91bnJlZ2lzdGVyX2RvY30sCiAgICAgeyJwb2xsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9wb2xsLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3BvbGxfZG9jfSwKKyAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2Nsb3NlLCAgICBNRVRIX05PQVJHUywKKyAgICAgZGV2cG9sbF9jbG9zZV9kb2N9LAorICAgIHsiZmlsZW5vIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfZmlsZW5vLCAgICBNRVRIX05PQVJHUywKKyAgICAgZGV2cG9sbF9maWxlbm9fZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAorc3RhdGljIFB5R2V0U2V0RGVmIGRldnBvbGxfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilkZXZwb2xsX2dldF9jbG9zZWQsIE5VTEwsCisgICAgICJUcnVlIGlmIHRoZSBkZXZwb2xsIG9iamVjdCBpcyBjbG9zZWQifSwKKyAgICB7MH0sCit9OworCiBzdGF0aWMgZGV2cG9sbE9iamVjdCAqCiBuZXdEZXZQb2xsT2JqZWN0KHZvaWQpCiB7CkBAIC05MjksNyArMTAwNCw3IEBACiAgICAgKi8KICAgICBsaW1pdF9yZXN1bHQgPSBnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJmxpbWl0KTsKICAgICBpZiAobGltaXRfcmVzdWx0ICE9IC0xKQotICAgICAgICBmZF9kZXZwb2xsID0gb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKKyAgICAgICAgZmRfZGV2cG9sbCA9IF9QeV9vcGVuKCIvZGV2L3BvbGwiLCBPX1JEV1IpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGltaXRfcmVzdWx0ID09IC0xKSB7CkBAIC05NjUsMTIgKzEwNDAsOCBAQAogc3RhdGljIHZvaWQKIGRldnBvbGxfZGVhbGxvYyhkZXZwb2xsT2JqZWN0ICpzZWxmKQogewotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBjbG9zZShzZWxmLT5mZF9kZXZwb2xsKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCisgICAgKHZvaWQpZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKICAgICBQeU1lbV9ERUwoc2VsZi0+ZmRzKTsKLQogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtMTAwNiw2ICsxMDc3LDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgZGV2cG9sbF9tZXRob2RzLCAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBkZXZwb2xsX2dldHNldGxpc3QsICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiB9OwogI2VuZGlmICAvKiBIQVZFX1NZU19ERVZQT0xMX0ggKi8KIApAQCAtMTA4OSw3ICsxMTYyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBweWVwb2xsX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGVwb2xsIGZkIik7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBvYmplY3QiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTEyMSw2ICsxMTk0LDcgQEAKICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfRVBPTExfQ1JFQVRFMQorICAgICAgICBmbGFncyB8PSBFUE9MTF9DTE9FWEVDOwogICAgICAgICBpZiAoZmxhZ3MpCiAgICAgICAgICAgICBzZWxmLT5lcGZkID0gZXBvbGxfY3JlYXRlMShmbGFncyk7CiAgICAgICAgIGVsc2UKQEAgLTExMzYsNiArMTIxMCwxNCBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworI2lmbmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICBpZiAoZmQgPT0gLTEgJiYgX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5lcGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCkBAIC0xMzc3LDcgKzE0NTksNiBAQAogCiAgICAgZXZzID0gUHlNZW1fTmV3KHN0cnVjdCBlcG9sbF9ldmVudCwgbWF4ZXZlbnRzKTsKICAgICBpZiAoZXZzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDE2LDYgKzE0OTcsMjQgQEAKIGluIHNlY29uZHMgKGFzIGZsb2F0KS4gLTEgbWFrZXMgcG9sbCB3YWl0IGluZGVmaW5pdGVseS5cblwKIFVwIHRvIG1heGV2ZW50cyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXBvbGxfZW50ZXIocHlFcG9sbF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChzZWxmLT5lcGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHB5ZXBvbGxfZXJyX2Nsb3NlZCgpOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9leGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBweWVwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7ImZyb21mZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2Zyb21mZCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywgcHllcG9sbF9mcm9tZmRfZG9jfSwKQEAgLTE0MzEsNiArMTUzMCwxMCBAQAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICBweWVwb2xsX3BvbGxfZG9jfSwKKyAgICB7Il9fZW50ZXJfXyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9lbnRlciwgICAgIE1FVEhfTk9BUkdTLAorICAgICBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2V4aXQsICAgICBNRVRIX1ZBUkFSR1MsCisgICAgIE5VTEx9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9LAogfTsKIApAQCAtMTc1OSw3ICsxODYyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfZXJyX2Nsb3NlZCh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIGZkIik7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBrcXVldWUgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE4MDEsMTMgKzE5MDQsMTkgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+a3FmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGtxdWV1ZV9xdWV1ZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0KICAgICBpZiAoKGFyZ3MgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGFyZ3MpKSB8fAogICAgICAgICAgICAgICAgICAgICAoa3dkcyAhPSBOVUxMICYmIFB5T2JqZWN0X1NpemUoa3dkcykpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMjE3OSw3ICsyMjg4LDcgQEAKICN1bmRlZiBQSVBFX0JVRgogI2RlZmluZSBQSVBFX0JVRiA1MTIKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSVBFX0JVRiIsIFBJUEVfQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSVBFX0JVRik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9QT0xMKSAmJiAhZGVmaW5lZChIQVZFX0JST0tFTl9QT0xMKQpAQCAtMjE5NCwyNyArMjMwMywyNyBAQAogI2VuZGlmCiAgICAgICAgIGlmIChQeVR5cGVfUmVhZHkoJnBvbGxfVHlwZSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMSU4iLCBQT0xMSU4pOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFBSSSIsIFBPTExQUkkpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE9VVCIsIFBPTExPVVQpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTEVSUiIsIFBPTExFUlIpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTEhVUCIsIFBPTExIVVApOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE5WQUwiLCBQT0xMTlZBTCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExJTik7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExQUkkpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMT1VUKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTEVSUik7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExIVVApOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMTlZBTCk7CiAKICNpZmRlZiBQT0xMUkROT1JNCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUkROT1JNIiwgUE9MTFJETk9STSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExSRE5PUk0pOwogI2VuZGlmCiAjaWZkZWYgUE9MTFJEQkFORAotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFJEQkFORCIsIFBPTExSREJBTkQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUkRCQU5EKTsKICNlbmRpZgogI2lmZGVmIFBPTExXUk5PUk0KLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExXUk5PUk0iLCBQT0xMV1JOT1JNKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFdSTk9STSk7CiAjZW5kaWYKICNpZmRlZiBQT0xMV1JCQU5ECi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMV1JCQU5EIiwgUE9MTFdSQkFORCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExXUkJBTkQpOwogI2VuZGlmCiAjaWZkZWYgUE9MTE1TRwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE1TRyIsIFBPTExNU0cpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMTVNHKTsKICNlbmRpZgogICAgIH0KICNlbmRpZiAvKiBIQVZFX1BPTEwgKi8KQEAgLTIyMzIsMjUgKzIzNDEsMjUgQEAKICAgICBQeV9JTkNSRUYoJnB5RXBvbGxfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcG9sbCIsIChQeU9iamVjdCAqKSAmcHlFcG9sbF9UeXBlKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTElOIiwgRVBPTExJTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMT1VUIiwgRVBPTExPVVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFBSSSIsIEVQT0xMUFJJKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExFUlIiLCBFUE9MTEVSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMSFVQIiwgRVBPTExIVVApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEVUIiwgRVBPTExFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExJTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUFJJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEVSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExIVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMRVQpOwogI2lmZGVmIEVQT0xMT05FU0hPVAogICAgIC8qIEtlcm5lbCAyLjYuMisgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExPTkVTSE9UIiwgRVBPTExPTkVTSE9UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE9ORVNIT1QpOwogI2VuZGlmCiAgICAgLyogUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMX1JESFVQIiwgRVBPTExSREhVUCk7ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUkROT1JNIiwgRVBPTExSRE5PUk0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFJEQkFORCIsIEVQT0xMUkRCQU5EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExXUk5PUk0iLCBFUE9MTFdSTk9STSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMV1JCQU5EIiwgRVBPTExXUkJBTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE1TRyIsIEVQT0xMTVNHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFJETk9STSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExSREJBTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMV1JOT1JNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFdSQkFORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExNU0cpOwogCiAjaWZkZWYgRVBPTExfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTF9DTE9FWEVDIiwgRVBPTExfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExfQ0xPRVhFQyk7CiAjZW5kaWYKICNlbmRpZiAvKiBIQVZFX0VQT0xMICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhMW1vZHVsZS5jIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKaW5kZXggZDBmMzE4ZC4uYjQ0ZmUxOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGExbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKQEAgLTkyLDEwICs5Miw2IEBACiAgICAgICh5KVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzVdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+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+ZGF0YSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgc2hhX2luZm8tPmxvY2FsID0gY291bnQ7CisgICAgc2hhX2luZm8tPmxvY2FsID0gKGludCljb3VudDsKIH0KIAogLyogZmluaXNoIGNvbXB1dGluZyB0aGUgU0hBIGRpZ2VzdCAqLwpAQCAtNTc3LDkgKzU2Nyw5IEBACiBTSEE1MTJfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgaWYgKCgoU0hBb2JqZWN0ICopc2VsZiktPmRpZ2VzdHNpemUgPT0gNjQpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTUxMiIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGE1MTIiLCA2KTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTM4NCIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEzODQiLCA2KTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIFNIQV9nZXRzZXRlcnNbXSA9IHsKQEAgLTc4MiwxMyArNzcyLDI0IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGE1MTIodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJlNIQTM4NHR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTM4NHR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfVFlQRSgmU0hBNTEydHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBNTEydHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGE1MTJtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEzODR0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTM4NFR5cGUiLCAoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEE1MTJ0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTUxMlR5cGUiLCAoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgcmV0dXJuIG07CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKaW5kZXggZmJlMWJiNy4uOWEwZThlMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCkBAIC05LDcgKzksNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0jaW5jbHVkZSA8V2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpZmRlZiBIQVZFX1BST0NFU1NfSAogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbmRpZgpAQCAtMzcsMTEgKzM3LDYgQEAKICNkZWZpbmUgU0lHX0VSUiAoKFB5T1Nfc2lnaGFuZGxlcl90KSgtMSkpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBOU0lHIDEyCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2VuZGlmCi0KICNpZm5kZWYgTlNJRwogIyBpZiBkZWZpbmVkKF9OU0lHKQogIyAgZGVmaW5lIE5TSUcgX05TSUcgICAgICAgICAgICAvKiBGb3IgQlNEL1N5c1YgKi8KQEAgLTc4LDEwICs3Myw2IEBACiAgICBhIHdvcmtpbmcgaW1wbGVtZW50YXRpb24gdGhhdCB3b3JrcyBpbiBhbGwgdGhyZWUgY2FzZXMgLS0gdGhlCiAgICBoYW5kbGVyIGlnbm9yZXMgc2lnbmFscyBpZiBnZXRwaWQoKSBpc24ndCB0aGUgc2FtZSBhcyBpbiB0aGUgbWFpbgogICAgdGhyZWFkLiAgWFhYIFRoaXMgaXMgYSBoYWNrLgotCi0gICBHTlUgcHRoIGlzIGEgdXNlci1zcGFjZSB0aHJlYWRpbmcgbGlicmFyeSwgYW5kIGFzIHN1Y2gsIGFsbCB0aHJlYWRzCi0gICBydW4gd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MuIEluIHRoaXMgY2FzZSwgaWYgdGhlIGN1cnJlbnRseSBydW5uaW5nCi0gICB0aHJlYWQgaXMgbm90IHRoZSBtYWluX3RocmVhZCwgc2VuZCB0aGUgc2lnbmFsIHRvIHRoZSBtYWluX3RocmVhZC4KICovCiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMTgwLDE1ICsxNzEsMzEgQEAKICAgICByZXR1cm4gUHlFcnJfQ2hlY2tTaWduYWxzKCk7CiB9CiAKK3N0YXRpYyBpbnQKK3JlcG9ydF93YWtldXBfZXJyb3Iodm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworICAgIGVycm5vID0gKGludCkgKFB5X2ludHB0cl90KSBkYXRhOworICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICBQeVN5c19Xcml0ZVN0ZGVycigiRXhjZXB0aW9uIGlnbm9yZWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsIHdha2V1cCBmZDpcbiIpOworICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICBlcnJubyA9IHNhdmVfZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkCiB0cmlwX3NpZ25hbChpbnQgc2lnX251bSkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisgICAgaW50IHJjID0gMDsKIAogICAgIEhhbmRsZXJzW3NpZ19udW1dLnRyaXBwZWQgPSAxOwogICAgIGlmICh3YWtldXBfZmQgIT0gLTEpIHsKICAgICAgICAgYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKXNpZ19udW07Ci0gICAgICAgIHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpOworICAgICAgICB3aGlsZSAoKHJjID0gd3JpdGUod2FrZXVwX2ZkLCAmYnl0ZSwgMSkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgICAgaWYgKHJjID09IC0xKQorICAgICAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwocmVwb3J0X3dha2V1cF9lcnJvciwgKHZvaWQgKikgKFB5X2ludHB0cl90KSBlcnJubyk7CiAgICAgfQogICAgIGlmIChpc190cmlwcGVkKQogICAgICAgICByZXR1cm47CkBAIC0yMDMsMTMgKzIxMCw2IEBACiB7CiAgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKIAotI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIGRlZmluZWQoV0lUSF9QVEgpCi0gICAgaWYgKFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSAhPSBtYWluX3RocmVhZCkgewotICAgICAgICBwdGhfcmFpc2UoKihwdGhfdCAqKSBtYWluX3RocmVhZCwgc2lnX251bSk7Ci0gICAgfQotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIC8qIFNlZSBOT1RFUyBzZWN0aW9uIGFib3ZlICovCiAgICAgaWYgKGdldHBpZCgpID09IG1haW5fcGlkKQpAQCAtMjMxLDcgKzIzMSw2IEBACiAgICAgICogbWFrZXMgdGhpcyB0cnVlLiAgU2VlIGFsc28gaXNzdWU4MzU0LiAqLwogICAgIFB5T1Nfc2V0c2lnKHNpZ19udW0sIHNpZ25hbF9oYW5kbGVyKTsKICNlbmRpZgotICAgIH0KIAogICAgIC8qIElzc3VlICMxMDMxMTogYXN5bmNocm9ub3VzbHkgZXhlY3V0aW5nIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgbm90CiAgICAgICAgbXV0YXRlIGVycm5vIHVuZGVyIHRoZSBmZWV0IG9mIHVuc3VzcGVjdGluZyBDIGNvZGUuICovCkBAIC05ODMsOSArOTgyLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWYgZGVmaW5lZChIQVZFX1NJR1dBSVRJTkZPKSB8fCBkZWZpbmVkKEhBVkVfU0lHVElNRURXQUlUKQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYyk7Ci0KKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU2lnaW5mb1R5cGUsICZzdHJ1Y3Rfc2lnaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTaWdpbmZvVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3Rfc2lnaW5mbyIsIChQeU9iamVjdCopICZTaWdpbmZvVHlwZSk7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKaW5kZXggM2JkZGFhNS4uOWUwZGExMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCkBAIC0xNSw3ICsxNSw3IEBACiAKIE1vZHVsZSBpbnRlcmZhY2U6CiAKLS0gc29ja2V0LmVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBzb2NrZXQgc3BlY2lmaWMgZXJyb3JzCistIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycywgYWxpYXMgZm9yIE9TRXJyb3IKIC0gc29ja2V0LmdhaWVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBnZXRhZGRyaW5mby9nZXRuYW1laW5mbyBlcnJvcnMsCiAgICAgYSBzdWJjbGFzcyBvZiBzb2NrZXQuZXJyb3IKIC0gc29ja2V0LmhlcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0aG9zdGJ5KiBlcnJvcnMsCkBAIC05NSwxOCArOTUsMTYgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAotI3VuZGVmIE1BWAotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLQogLyogU29ja2V0IG9iamVjdCBkb2N1bWVudGF0aW9uICovCiBQeURvY19TVFJWQVIoc29ja19kb2MsCi0ic29ja2V0KFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IHNvY2tldCBvYmplY3RcblwKKyJzb2NrZXQoZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKSAtPiBzb2NrZXQgb2JqZWN0XG5cCiBcblwKIE9wZW4gYSBzb2NrZXQgb2YgdGhlIGdpdmVuIHR5cGUuICBUaGUgZmFtaWx5IGFyZ3VtZW50IHNwZWNpZmllcyB0aGVcblwKIGFkZHJlc3MgZmFtaWx5OyBpdCBkZWZhdWx0cyB0byBBRl9JTkVULiAgVGhlIHR5cGUgYXJndW1lbnQgc3BlY2lmaWVzXG5cCiB3aGV0aGVyIHRoaXMgaXMgYSBzdHJlYW0gKFNPQ0tfU1RSRUFNLCB0aGlzIGlzIHRoZSBkZWZhdWx0KVxuXAogb3IgZGF0YWdyYW0gKFNPQ0tfREdSQU0pIHNvY2tldC4gIFRoZSBwcm90b2NvbCBhcmd1bWVudCBkZWZhdWx0cyB0byAwLFxuXAogc3BlY2lmeWluZyB0aGUgZGVmYXVsdCBwcm90b2NvbC4gIEtleXdvcmQgYXJndW1lbnRzIGFyZSBhY2NlcHRlZC5cblwKK1RoZSBzb2NrZXQgaXMgY3JlYXRlZCBhcyBub24taW5oZXJpdGFibGUuXG5cCiBcblwKIEEgc29ja2V0IG9iamVjdCByZXByZXNlbnRzIG9uZSBlbmRwb2ludCBvZiBhIG5ldHdvcmsgY29ubmVjdGlvbi5cblwKIFxuXApAQCAtMTE3LDcgKzExNSw3IEBACiBjbG9zZSgpIC0tIGNsb3NlIHRoZSBzb2NrZXRcblwKIGNvbm5lY3QoYWRkcikgLS0gY29ubmVjdCB0aGUgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3NcblwKIGNvbm5lY3RfZXgoYWRkcikgLS0gY29ubmVjdCwgcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBhbiBleGNlcHRpb25cblwKLV9kdXAoKSAtLSByZXR1cm4gYSBuZXcgc29ja2V0IGZkIGR1cGxpY2F0ZWQgZnJvbSBmaWxlbm8oKVxuXAorZHVwKCkgLS0gcmV0dXJuIGEgbmV3IHNvY2tldCBmZCBkdXBsaWNhdGVkIGZyb20gZmlsZW5vKClcblwKIGZpbGVubygpIC0tIHJldHVybiB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvclxuXAogZ2V0cGVlcm5hbWUoKSAtLSByZXR1cm4gcmVtb3RlIGFkZHJlc3MgWypdXG5cCiBnZXRzb2NrbmFtZSgpIC0tIHJldHVybiBsb2NhbCBhZGRyZXNzXG5cCkBAIC0yMjMsMTMgKzIyMSw2IEBACiAjZW5kaWYKIAogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSMgZGVmaW5lICBJTkNMX0RPUwotIyBkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jIGRlZmluZSAgSU5DTF9OT1BNQVBJCi0jIGluY2x1ZGUgPG9zMi5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fc2dpKSAmJiBfQ09NUElMRVJfVkVSU0lPTj43MDAgJiYgIV9TR0lBUEkKIC8qIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWVudHJhbnQgKGdldGhvc3RieWFkZHJfciBldGMpCiAgICBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGNvcnJlY3RseSBpZiBjb21waWxpbmcgd2l0aApAQCAtMjg2LDEyICsyNzcsNyBAQAogIyBpbmNsdWRlIDx1bmlzdGQuaD4KIAogLyogSGVhZGVycyBuZWVkZWQgZm9yIGluZXRfbnRvYSgpIGFuZCBpbmV0X2FkZHIoKSAqLwotIyBpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfVkFDUFApCi0jICBpbmNsdWRlIDxuZXRkYi5oPgotdHlwZWRlZiBzaXplX3Qgc29ja2xlbl90OwotIyBlbHNlCiAjICAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jIGVuZGlmCiAKICMgIGluY2x1ZGUgPGZjbnRsLmg+CiAKQEAgLTM3MSwyMiArMzU3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotLyogT24gV2luZG93cyBhIHNvY2tldCBpcyByZWFsbHkgYSBoYW5kbGUgbm90IGFuIGZkICovCi1zdGF0aWMgU09DS0VUCi1kdXBfc29ja2V0KFNPQ0tFVCBoYW5kbGUpCi17Ci0gICAgV1NBUFJPVE9DT0xfSU5GTyBpbmZvOwotCi0gICAgaWYgKFdTQUR1cGxpY2F0ZVNvY2tldChoYW5kbGUsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSwgJmluZm8pKQotICAgICAgICByZXR1cm4gSU5WQUxJRF9TT0NLRVQ7Ci0KLSAgICByZXR1cm4gV1NBU29ja2V0KEZST01fUFJPVE9DT0xfSU5GTywgRlJPTV9QUk9UT0NPTF9JTkZPLAotICAgICAgICAgICAgICAgICAgICAgRlJPTV9QUk9UT0NPTF9JTkZPLCAmaW5mbywgMCwgV1NBX0ZMQUdfT1ZFUkxBUFBFRCk7Ci19CiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3Nlc29ja2V0Ci0jZWxzZQotLyogT24gVW5peCB3ZSBjYW4gdXNlIGR1cCB0byBkdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHNvY2tldCovCi0jZGVmaW5lIGR1cF9zb2NrZXQoZmQpIGR1cChmZCkKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lOMzIKQEAgLTM5NSwxMSArMzY2LDYgQEAKICNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBTT0NLRVRDTE9TRSBzb2Nsb3NlCi0jZGVmaW5lIE5PX0RVUCAvKiBTb2NrZXRzIGFyZSBOb3QgQWN0dWFsIEZpbGUgSGFuZGxlcyB1bmRlciBPUy8yICovCi0jZW5kaWYKLQogI2lmbmRlZiBTT0NLRVRDTE9TRQogI2RlZmluZSBTT0NLRVRDTE9TRSBjbG9zZQogI2VuZGlmCkBAIC00NTksNiArNDI1LDEwIEBACiAjZGVmaW5lIElOVkFMSURfU09DS0VUICgtMSkKICNlbmRpZgogCisjaWZuZGVmIElOQUREUl9OT05FCisjZGVmaW5lIElOQUREUl9OT05FICgtMSkKKyNlbmRpZgorCiAvKiBYWFggVGhlcmUncyBhIHByb2JsZW0gaGVyZTogKnN0YXRpYyogZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9zZWQgdG8gaGF2ZQogICAgYSBQeSBwcmVmaXggKG9yIHVzZSBDYXBpdGFsaXplZFdvcmRzKS4gIExhdGVyLi4uICovCiAKQEAgLTUxOSw2ICs0ODksMTEgQEAKICAgICAoZXJybm8gPT0gZXhwZWN0ZWQpCiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKy8qIERvZXMgV1NBU29ja2V0KCkgc3VwcG9ydCB0aGUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgZmxhZz8gKi8KK3N0YXRpYyBpbnQgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IC0xOworI2VuZGlmCisKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJhaXNlIGFuIGVycm9yIGFjY29yZGluZyB0byBlcnJubwogICAgYW5kIHJldHVybiBhIE5VTEwgcG9pbnRlciBmcm9tIGEgZnVuY3Rpb24uICovCiAKQEAgLTUzNCw0MiArNTA5LDYgQEAKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIGVycl9ubyk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzb2NrX2Vycm5vKCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBVTE9ORyAgbXNnbGVuOwotICAgICAgICBjaGFyIG91dGJ1ZlsxMDBdOwotICAgICAgICBpbnQgbXllcnJvcmNvZGUgPSBzb2NrX2Vycm5vKCk7Ci0KLSAgICAgICAgLyogUmV0cmlldmUgc29ja2V0LXJlbGF0ZWQgZXJyb3IgbWVzc2FnZSBmcm9tIE1QVE4uTVNHIGZpbGUgKi8KLSAgICAgICAgcmMgPSBEb3NHZXRNZXNzYWdlKE5VTEwsIDAsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm9yY29kZSAtIFNPQ0JBU0VFUlIgKyAyNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtcHRuLm1zZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnbGVuKTsKLSAgICAgICAgaWYgKHJjID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdjsKLQotICAgICAgICAgICAgLyogT1MvMiBkb2Vzbid0IGd1YXJhbnRlZSBhIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIG91dGJ1Zlttc2dsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChzdHJsZW4ob3V0YnVmKSA+IDApIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBub24tZW1wdHkgbXNnLCB0cmltIENSTEYgKi8KLSAgICAgICAgICAgICAgICBjaGFyICpsYXN0YyA9ICZvdXRidWZbIHN0cmxlbihvdXRidWYpLTEgXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGFzdGMgPiBvdXRidWYgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqbGFzdGMpKSkgewotICAgICAgICAgICAgICAgICAgICAvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgICAgICAgICAgICAgICAgICpsYXN0Yy0tID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIG15ZXJyb3Jjb2RlLCBvdXRidWYpOwotICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KIApAQCAtNjU4LDIwICs1OTcsMTcgQEAKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZm5kZWYgTVNfV0lORE9XUwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGJsb2NrID0gIWJsb2NrOwotICAgIGlvY3RsKHMtPnNvY2tfZmQsIEZJT05CSU8sIChjYWRkcl90KSZibG9jaywgc2l6ZW9mKGJsb2NrKSk7Ci0jZWxpZiBkZWZpbmVkKF9fVk1TKQorI2lmIGRlZmluZWQoX19WTVMpCiAgICAgYmxvY2sgPSAhYmxvY2s7CiAgICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKHVuc2lnbmVkIGludCAqKSZibG9jayk7Ci0jZWxzZSAgLyogIVBZT1NfT1MyICYmICFfX1ZNUyAqLworI2Vsc2UgIC8qICFfX1ZNUyAqLwogICAgIGRlbGF5X2ZsYWcgPSBmY250bChzLT5zb2NrX2ZkLCBGX0dFVEZMLCAwKTsKICAgICBpZiAoYmxvY2spCiAgICAgICAgIGRlbGF5X2ZsYWcgJj0gKH5PX05PTkJMT0NLKTsKICAgICBlbHNlCiAgICAgICAgIGRlbGF5X2ZsYWcgfD0gT19OT05CTE9DSzsKICAgICBmY250bChzLT5zb2NrX2ZkLCBGX1NFVEZMLCBkZWxheV9mbGFnKTsKLSNlbmRpZiAvKiAhUFlPU19PUzIgKi8KKyNlbmRpZiAvKiAhX19WTVMgKi8KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bHNvY2tldChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodV9sb25nKikmYmxvY2spOwpAQCAtODU1LDggKzc5MSw2IEBACiB7CiAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOwogICAgIGludCBlcnJvcjsKLSAgICBpbnQgZDEsIGQyLCBkMywgZDQ7Ci0gICAgY2hhciBjaDsKIAogICAgIG1lbXNldCgodm9pZCAqKSBhZGRyX3JldCwgJ1wwJywgc2l6ZW9mKCphZGRyX3JldCkpOwogICAgIGlmIChuYW1lWzBdID09ICdcMCcpIHsKQEAgLTkwNSw3ICs4MzksMTAgQEAKICAgICAgICAgZnJlZWFkZHJpbmZvKHJlcyk7CiAgICAgICAgIHJldHVybiBzaXo7CiAgICAgfQotICAgIGlmIChuYW1lWzBdID09ICc8JyAmJiBzdHJjbXAobmFtZSwgIjxicm9hZGNhc3Q+IikgPT0gMCkgeworICAgIC8qIHNwZWNpYWwtY2FzZSBicm9hZGNhc3QgLSBpbmV0X2FkZHIoKSBiZWxvdyBjYW4gcmV0dXJuIElOQUREUl9OT05FIGZvcgorICAgICAqIHRoaXMgKi8KKyAgICBpZiAoc3RyY21wKG5hbWUsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwIHx8CisgICAgICAgIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwogICAgICAgICBpZiAoYWYgIT0gQUZfSU5FVCAmJiBhZiAhPSBBRl9VTlNQRUMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLApAQCAtOTIxLDIwICs4NTgsNTMgQEAKICAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgICAgICByZXR1cm4gc2l6ZW9mKHNpbi0+c2luX2FkZHIpOwogICAgIH0KLSAgICBpZiAoc3NjYW5mKG5hbWUsICIlZC4lZC4lZC4lZCVjIiwgJmQxLCAmZDIsICZkMywgJmQ0LCAmY2gpID09IDQgJiYKLSAgICAgICAgMCA8PSBkMSAmJiBkMSA8PSAyNTUgJiYgMCA8PSBkMiAmJiBkMiA8PSAyNTUgJiYKLSAgICAgICAgMCA8PSBkMyAmJiBkMyA8PSAyNTUgJiYgMCA8PSBkNCAmJiBkNCA8PSAyNTUpIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0gICAgICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKLSAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgKLSAgICAgICAgICAgICgobG9uZykgZDEgPDwgMjQpIHwgKChsb25nKSBkMiA8PCAxNikgfAotICAgICAgICAgICAgKChsb25nKSBkMyA8PCA4KSB8ICgobG9uZykgZDQgPDwgMCkpOwotICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgLyogYXZvaWQgYSBuYW1lIHJlc29sdXRpb24gaW4gY2FzZSBvZiBudW1lcmljIGFkZHJlc3MgKi8KKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgbmFtZSwgJnNpbi0+c2luX2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgotICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQogICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY2IGFkZHJlc3MgLSBpZiB0aGUgYWRkcmVzcyBjb250YWlucyBhIHNjb3BlIElELCB3ZQorICAgICAqIGZhbGxiYWNrIHRvIGdldGFkZHJpbmZvKCksIHdoaWNoIGNhbiBoYW5kbGUgdHJhbnNsYXRpb24gZnJvbSBpbnRlcmZhY2UKKyAgICAgKiBuYW1lIHRvIGludGVyZmFjZSBpbmRleCAqLworICAgIGlmICgoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQ2KSAmJiAhc3RyY2hyKG5hbWUsICclJykpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgbmFtZSwgJnNpbi0+c2luNl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW42X2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisjZWxzZSAvKiBIQVZFX0lORVRfUFRPTiAqLworICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfSU5FVCB8fCBhZiA9PSBBRl9VTlNQRUMpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobmFtZSkpICE9IElOQUREUl9OT05FKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCisKKyAgICAvKiBwZXJmb3JtIGEgbmFtZSByZXNvbHV0aW9uICovCiAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgICAgaGludHMuYWlfZmFtaWx5ID0gYWY7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMTMyOSwxMSArMTI5OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYWRkci0+c3VuX2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGgsIGxlbik7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwotI2Vsc2UKICAgICAgICAgKmxlbl9yZXQgPSBsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKLSNlbmRpZgogICAgICAgICByZXR2YWwgPSAxOwogICAgIHVuaXhfb3V0OgogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CkBAIC0xNjU4LDYgKzE2MjQsOCBAQAogICAgIGNhc2UgQUZfQ0FOOgogICAgICAgICBzd2l0Y2ggKHMtPnNvY2tfcHJvdG8pIHsKICAgICAgICAgY2FzZSBDQU5fUkFXOgorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDQU5fQkNNOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmludGVyZmFjZU5hbWU7CkBAIC0yMDE2LDYgKzE5ODQsMTEgQEAKICAgICBQeU9iamVjdCAqYWRkciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IHRpbWVvdXQ7CisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIC8qIGFjY2VwdDQoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI4KyBhbmQgZ2xpYmMgMi4xMCAqLworICAgIHN0YXRpYyBpbnQgYWNjZXB0NF93b3JrcyA9IC0xOworI2VuZGlmCisKICAgICBpZiAoIWdldHNvY2thZGRybGVuKHMsICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKQEAgLTIwMjQsMTAgKzE5OTcsMjQgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKICAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0NChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0NLX0NMT0VYRUMpOworICAgICAgICAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUICYmIGFjY2VwdDRfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvKiBPbiBMaW51eCBvbGRlciB0aGFuIDIuNi4yOCwgYWNjZXB0NCgpIGZhaWxzIHdpdGggRU5PU1lTICovCisgICAgICAgICAgICAgICAgYWNjZXB0NF93b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzID09IDApCisgICAgICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZWxzZQogICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZW5kaWYKICAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApAQCAtMjA0MCw2ICsyMDI3LDI1IEBACiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICBpZiAoIWFjY2VwdDRfd29ya3MpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG5ld2ZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgc29jayA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChzb2NrID09IE5VTEwpIHsKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtMjYxMyw4ICsyNjE5LDE1IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncyk7CisjZWxzZQogICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MpOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0yODIwLDE0ICsyODMzLDExIEBACiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKICAgICBpZiAoIXRpbWVvdXQpIHsKLSNpZm5kZWYgTVNfV0lORE9XUwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKLSNlbHNlCi0gICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgKGludClsZW4sIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJmFkZHJidWYsICZhZGRybGVuKTsKLSNlbmRpZgogI2Vsc2UKICAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CkBAIC0zMzA1LDEyICszMzE1LDE3IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgewogI2lmZGVmIF9fVk1TCiAgICAgICAgIG4gPSBzZW5kc2VnbWVudGVkKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CkBAIC0zMzYwLDYgKzMzNzUsMTAgQEAKICAgICAgICAgaWYgKCF0aW1lb3V0KSB7CiAjaWZkZWYgX19WTVMKICAgICAgICAgICAgIG4gPSBzZW5kc2VnbWVudGVkKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZW5kaWYKQEAgLTM0NTQsOCArMzQ3MywxNyBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworI2Vsc2UKKyAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZW5kaWYKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTM5NDgsNiArMzk3NiwxMiBAQAogCiAvKiBJbml0aWFsaXplIGEgbmV3IHNvY2tldCBvYmplY3QuICovCiAKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKy8qIHNvY2tldCgpIGFuZCBzb2NrZXRwYWlyKCkgZmFpbCB3aXRoIEVJTlZBTCBvbiBMaW51eCBrZXJuZWwgb2xkZXIKKyAqIHRoYW4gMi42LjI3IGlmIFNPQ0tfQ0xPRVhFQyBmbGFnIGlzIHNldCBpbiB0aGUgc29ja2V0IHR5cGUuICovCitzdGF0aWMgaW50IHNvY2tfY2xvZXhlY193b3JrcyA9IC0xOworI2VuZGlmCisKIC8qQVJHU1VTRUQqLwogc3RhdGljIGludAogc29ja19pbml0b2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0zOTU3LDYgKzM5OTEsMTMgQEAKICAgICBTT0NLRVRfVCBmZCA9IElOVkFMSURfU09DS0VUOwogICAgIGludCBmYW1pbHkgPSBBRl9JTkVULCB0eXBlID0gU09DS19TVFJFQU0sIHByb3RvID0gMDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiZmFtaWx5IiwgInR5cGUiLCAicHJvdG8iLCAiZmlsZW5vIiwgMH07CisjaWZuZGVmIE1TX1dJTkRPV1MKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJnNvY2tfY2xvZXhlY193b3JrczsKKyNlbHNlCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyNlbmRpZgogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifGlpaU86c29ja2V0Iiwga2V5d29yZHMsCkBAIC00MDAxLDE0ICs0MDQyLDc0IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAvKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uICovCisjaWZuZGVmIFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUCisjZGVmaW5lIFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUIDB4ODAKKyNlbmRpZgorCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIGlmIChzdXBwb3J0X3dzYV9ub19pbmhlcml0KSB7CisgICAgICAgICAgICBmZCA9IFdTQVNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTQV9GTEFHX09WRVJMQVBQRUQgfCBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCk7CisgICAgICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIDcgb3IgV2luZG93cyAyMDA4IFIyIHdpdGhvdXQgU1AxIG9yIHRoZSBob3RmaXggKi8KKyAgICAgICAgICAgICAgICBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gMDsKKyAgICAgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CiAgICAgICAgICAgICBzZXRfZXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorCisgICAgICAgIGlmICghc3VwcG9ydF93c2Ffbm9faW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICAgICAgICAgIGNsb3Nlc29ja2V0KGZkKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8qIFVOSVggKi8KKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSB8IFNPQ0tfQ0xPRVhFQywgcHJvdG8pOworICAgICAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgICAgICAgICAvKiBMaW51eCBvbGRlciB0aGFuIDIuNi4yNyBkb2VzIG5vdCBzdXBwb3J0IFNPQ0tfQ0xPRVhFQyAqLworICAgICAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICB9CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgICAgICBzZXRfZXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CisgICAgICAgICAgICBTT0NLRVRDTE9TRShmZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICBpbml0X3NvY2tvYmplY3QocywgZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pOwogCkBAIC00NTc0LDE2ICs0Njc1LDM2IEBACiB7CiAgICAgU09DS0VUX1QgZmQsIG5ld2ZkOwogICAgIFB5T2JqZWN0ICpuZXdmZG9iajsKLQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87CisjZW5kaWYKIAogICAgIGZkID0gUHlMb25nX0FzU29ja2V0X3QoZmRvYmopOwogICAgIGlmIChmZCA9PSAoU09DS0VUX1QpKC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG5ld2ZkID0gZHVwX3NvY2tldChmZCk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoZmQsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSwgJmluZm8pKQorICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisKKyAgICBuZXdmZCA9IFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwogICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOwogCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBjbG9zZXNvY2tldChuZXdmZCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZWxzZQorICAgIC8qIE9uIFVOSVgsIGR1cCBjYW4gYmUgdXNlZCB0byBkdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHNvY2tldCAqLworICAgIG5ld2ZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCiAgICAgbmV3ZmRvYmogPSBQeUxvbmdfRnJvbVNvY2tldF90KG5ld2ZkKTsKICAgICBpZiAobmV3ZmRvYmogPT0gTlVMTCkKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtNDYxMSw2ICs0NzMyLDEyIEBACiAgICAgU09DS0VUX1Qgc3ZbMl07CiAgICAgaW50IGZhbWlseSwgdHlwZSA9IFNPQ0tfU1RSRUFNLCBwcm90byA9IDA7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZzb2NrX2Nsb2V4ZWNfd29ya3M7CisjZWxzZQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisgICAgaW50IHJldDsKIAogI2lmIGRlZmluZWQoQUZfVU5JWCkKICAgICBmYW1pbHkgPSBBRl9VTklYOwpAQCAtNDYyMCw5ICs0NzQ3LDM4IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aWlpOnNvY2tldHBhaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFtaWx5LCAmdHlwZSwgJnByb3RvKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAvKiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBmZHMgKi8KLSAgICBpZiAoc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdikgPCAwKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzICE9IDApIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUgfCBTT0NLX0NMT0VYRUMsIHByb3RvLCBzdik7CisgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgeworICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICAvKiBMaW51eCBvbGRlciB0aGFuIDIuNi4yNyBkb2VzIG5vdCBzdXBwb3J0IFNPQ0tfQ0xPRVhFQyAqLworICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDA7CisgICAgICAgICAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KTsKKyAgICB9CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlswXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHN2WzFdLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICBnb3RvIGZpbmFsbHk7CisKICAgICBzMCA9IG5ld19zb2Nrb2JqZWN0KHN2WzBdLCBmYW1pbHksIHR5cGUsIHByb3RvKTsKICAgICBpZiAoczAgPT0gTlVMTCkKICAgICAgICAgZ290byBmaW5hbGx5OwpAQCAtNDY0NCw3ICs0ODAwLDcgQEAKIH0KIAogUHlEb2NfU1RSVkFSKHNvY2tldHBhaXJfZG9jLAotInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gKHNvY2tldCBvYmplY3QsIHNvY2tldCBvYmplY3QpXG5cCisic29ja2V0cGFpcihbZmFtaWx5WywgdHlwZSBbLCBwcm90b11dXSkgLT4gKHNvY2tldCBvYmplY3QsIHNvY2tldCBvYmplY3QpXG5cCiBcblwKIENyZWF0ZSBhIHBhaXIgb2Ygc29ja2V0IG9iamVjdHMgZnJvbSB0aGUgc29ja2V0cyByZXR1cm5lZCBieSB0aGUgcGxhdGZvcm1cblwKIHNvY2tldHBhaXIoKSBmdW5jdGlvbi5cblwKQEAgLTQ3NzgsOSArNDkzNCw2IEBACiBzdGF0aWMgUHlPYmplY3QqCiBzb2NrZXRfaW5ldF9hdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSNpZm5kZWYgSU5BRERSX05PTkUKLSNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQotI2VuZGlmCiAjaWZkZWYgSEFWRV9JTkVUX0FUT04KICAgICBzdHJ1Y3QgaW5fYWRkciBidWY7CiAjZW5kaWYKQEAgLTQ4MjIsNyArNDk3NSw3IEBACiAgICAgLyogc3BlY2lhbC1jYXNlIHRoaXMgYWRkcmVzcyBhcyBpbmV0X2FkZHIgbWlnaHQgcmV0dXJuIElOQUREUl9OT05FCiAgICAgICogZm9yIHRoaXMgKi8KICAgICBpZiAoc3RyY21wKGlwX2FkZHIsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwKSB7Ci0gICAgICAgIHBhY2tlZF9hZGRyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgcGFja2VkX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgIH0gZWxzZSB7CiAKICAgICAgICAgcGFja2VkX2FkZHIgPSBpbmV0X2FkZHIoaXBfYWRkcik7CkBAIC00ODcwLDcgKzUwMjMsNyBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhpbmV0X250b2EocGFja2VkX2FkZHIpKTsKIH0KIAotI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogCiBQeURvY19TVFJWQVIoaW5ldF9wdG9uX2RvYywKICJpbmV0X3B0b24oYWYsIGlwKSAtPiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmdcblwKQEAgLTQ4NzgsNiArNTAzMSwxMCBAQAogQ29udmVydCBhbiBJUCBhZGRyZXNzIGZyb20gc3RyaW5nIGZvcm1hdCB0byBhIHBhY2tlZCBzdHJpbmcgc3VpdGFibGVcblwKIGZvciB1c2Ugd2l0aCBsb3ctbGV2ZWwgbmV0d29yayBmdW5jdGlvbnMuIik7CiAKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KKwogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9pbmV0X3B0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDg4NSw3ICs1MDQyLDcgQEAKICAgICBjaGFyKiBpcDsKICAgICBpbnQgcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBwYWNrZWRbTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CisgICAgY2hhciBwYWNrZWRbUHlfTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CiAjZWxzZQogICAgIGNoYXIgcGFja2VkW3NpemVvZihzdHJ1Y3QgaW5fYWRkcildOwogI2VuZGlmCkBAIC00OTIyLDEyICs1MDc5LDUyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKworc3RhdGljIFB5T2JqZWN0ICoKK3NvY2tldF9pbmV0X3B0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBhZjsKKyAgICBjaGFyKiBpcDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgSU5UIHJldCwgc2l6ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXM6aW5ldF9wdG9uIiwgJmFmLCAmaXApKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNpemUgPSBzaXplb2YoYWRkcik7CisgICAgcmV0ID0gV1NBU3RyaW5nVG9BZGRyZXNzQShpcCwgYWYsIE5VTEwsIChMUFNPQ0tBRERSKSZhZGRyLCAmc2l6ZSk7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIGlmKGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSZhZGRyOworICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSYoYWRkcjQtPnNpbl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOworICAgIH0gZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikmKGFkZHIuc2luNl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLCAidW5rbm93biBhZGRyZXNzIGZhbWlseSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogCiBQeURvY19TVFJWQVIoaW5ldF9udG9wX2RvYywKICJpbmV0X250b3AoYWYsIHBhY2tlZF9pcCkgLT4gc3RyaW5nIGZvcm1hdHRlZCBJUCBhZGRyZXNzXG5cCiBcblwKIENvbnZlcnQgYSBwYWNrZWQgSVAgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gZmFtaWx5IHRvIHN0cmluZyBmb3JtYXQuIik7CiAKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0lORVRfUFRPTgogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9pbmV0X250b3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDkzNiw3ICs1MTMzLDcgQEAKICAgICBpbnQgbGVuOwogICAgIGNvbnN0IGNoYXIqIHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgIGNoYXIgaXBbTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKKyAgICBjaGFyIGlwW1B5X01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CiAjZWxzZQogICAgIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOICsgMV07CiAjZW5kaWYKQEAgLTQ5ODEsNiArNTE3OCw3MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK3N0YXRpYyBQeU9iamVjdCAqCitzb2NrZXRfaW5ldF9udG9wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYWY7CisgICAgY2hhciogcGFja2VkOworICAgIGludCBsZW47CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIERXT1JEIGFkZHJsZW4sIHJldCwgcmV0bGVuOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgY2hhciBpcFtQeV9NQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOworI2Vsc2UKKyAgICBjaGFyIGlwW0lORVRfQUREUlNUUkxFTiArIDFdOworI2VuZGlmCisKKyAgICAvKiBHdWFyYW50ZWUgTlVMLXRlcm1pbmF0aW9uIGZvciBQeVVuaWNvZGVfRnJvbVN0cmluZygpIGJlbG93ICovCisgICAgbWVtc2V0KCh2b2lkICopICZpcFswXSwgJ1wwJywgc2l6ZW9mKGlwKSk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5IzppbmV0X250b3AiLCAmYWYsICZwYWNrZWQsICZsZW4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZhZGRyOworCisgICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgImludmFsaWQgbGVuZ3RoIG9mIHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KGFkZHI0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgICAgIGFkZHI0LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCYoYWRkcjQtPnNpbl9hZGRyKSwgcGFja2VkLCBzaXplb2YoYWRkcjQtPnNpbl9hZGRyKSk7CisgICAgICAgIGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG1lbWNweSgmKGFkZHIuc2luNl9hZGRyKSwgcGFja2VkLCBzaXplb2YoYWRkci5zaW42X2FkZHIpKTsKKyAgICAgICAgYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJ1bmtub3duIGFkZHJlc3MgZmFtaWx5ICVkIiwgYWYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXRsZW4gPSBzaXplb2YoaXApOworICAgIHJldCA9IFdTQUFkZHJlc3NUb1N0cmluZ0EoKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIGFkZHJsZW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCwgJnJldGxlbik7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGlwKTsKKyAgICB9Cit9CisKICNlbmRpZiAvKiBIQVZFX0lORVRfUFRPTiAqLwogCiAvKiBQeXRob24gaW50ZXJmYWNlIHRvIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQpLiAqLwpAQCAtNTAwMiw3ICs1MjYzLDcgQEAKICAgICBQeU9iamVjdCAqYWxsID0gKFB5T2JqZWN0ICopTlVMTDsKICAgICBQeU9iamVjdCAqaWRuYSA9IE5VTEw7CiAKLSAgICBmYW1pbHkgPSBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOworICAgIHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CiAgICAgZmFtaWx5ID0gQUZfVU5TUEVDOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9PfGlpaWk6Z2V0YWRkcmluZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrd25hbWVzLCAmaG9iaiwgJnBvYmosICZmYW1pbHksICZzb2NrdHlwZSwKQEAgLTU0NDcsNyArNTcwOCw3IEBACiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9hdG9uX2RvY30sCiAgICAgeyJpbmV0X250b2EiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b2EsCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9udG9hX2RvY30sCi0jaWZkZWYgSEFWRV9JTkVUX1BUT04KKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJpbmV0X3B0b24iLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X3B0b24sCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9wdG9uX2RvY30sCiAgICAgeyJpbmV0X250b3AiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b3AsCkBAIC01NTIyLDMyICs1NzgzLDYgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAotI2lmZGVmIFBZT1NfT1MyCi0jZGVmaW5lIE9TX0lOSVRfREVGSU5FRAotCi0vKiBBZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBPUy8yICovCi0KLXN0YXRpYyBpbnQKLW9zX2luaXQodm9pZCkKLXsKLSNpZm5kZWYgUFlDQ19HQ0MKLSAgICBpbnQgcmMgPSBzb2NrX2luaXQoKTsKLQotICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0gICAgfQotCi0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiT1MvMiBUQ1AvSVAgRXJyb3IjICVkIiwgc29ja19lcnJubygpKTsKLQotICAgIHJldHVybiAwOyAgLyogRmFpbHVyZSAqLwotI2Vsc2UKLSAgICAvKiBObyBuZWVkIHRvIGluaXRpYWxpemUgc29ja2V0cyB3aXRoIEdDQy9FTVggKi8KLSAgICByZXR1cm4gMTsgLyogU3VjY2VzcyAqLwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwotCiAKICNpZm5kZWYgT1NfSU5JVF9ERUZJTkVECiBzdGF0aWMgaW50CkBAIC01NjA0LDYgKzU4MzksMTYgQEAKICAgICBpZiAoIW9zX2luaXQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPT0gLTEpIHsKKyAgICAgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKKyAgICAgICAgRFdPUkQgbWFqb3IgPSAoRFdPUkQpTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIERXT1JEIG1pbm9yID0gKERXT1JEKUhJQllURShMT1dPUkQodmVyc2lvbikpOworICAgICAgICAvKiBuZWVkIFdpbmRvd3MgNyBTUDEsIDIwMDggUjIgU1AxIG9yIGxhdGVyICovCisgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAobWFqb3IgPj0gNiAmJiBtaW5vciA+PSAxKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFB5X1RZUEUoJnNvY2tfdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc29ja2V0bW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQpAQCAtNTY1NywxODQgKzU5MDIsMTg3IEBACiAKICAgICAvKiBBZGRyZXNzIGZhbWlsaWVzICh3ZSBvbmx5IHN1cHBvcnQgQUZfSU5FVCBhbmQgQUZfVU5JWCkgKi8KICNpZmRlZiBBRl9VTlNQRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5TUEVDIiwgQUZfVU5TUEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTlNQRUMpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQiLCBBRl9JTkVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUKTsKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUNik7CiAjZW5kaWYgLyogQUZfSU5FVDYgKi8KICNpZiBkZWZpbmVkKEFGX1VOSVgpCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1VOSVgiLCBBRl9VTklYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTklYKTsKICNlbmRpZiAvKiBBRl9VTklYICovCiAjaWZkZWYgQUZfQVgyNQogICAgIC8qIEFtYXRldXIgUmFkaW8gQVguMjUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVgyNSIsIEFGX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVBYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lQWCIsIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JUFgpOyAvKiBOb3ZlbGwgSVBYICovCiAjZW5kaWYKICNpZmRlZiBBRl9BUFBMRVRBTEsKICAgICAvKiBBcHBsZXRhbGsgRERQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FQUExFVEFMSyIsIEFGX0FQUExFVEFMSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVBQTEVUQUxLKTsKICNlbmRpZgogI2lmZGVmIEFGX05FVFJPTQogICAgIC8qIEFtYXRldXIgcmFkaW8gTmV0Uk9NICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVFJPTSIsIEFGX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUUk9NKTsKICNlbmRpZgogI2lmZGVmIEFGX0JSSURHRQogICAgIC8qIE11bHRpcHJvdG9jb2wgYnJpZGdlICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0JSSURHRSIsIEFGX0JSSURHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQlJJREdFKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVBWQwogICAgIC8qIEFUTSBQVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVBWQyIsIEFGX0FUTVBWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNUFZDKTsKICNlbmRpZgogI2lmZGVmIEFGX0FBTDUKICAgICAvKiBSZXNlcnZlZCBmb3IgV2VybmVyJ3MgQVRNICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FBTDUiLCBBRl9BQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BQUw1KTsKICNlbmRpZgogI2lmZGVmIEFGX1gyNQogICAgIC8qIFJlc2VydmVkIGZvciBYLjI1IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfWDI1IiwgQUZfWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9YMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSU5FVDYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVDYiLCBBRl9JTkVUNik7IC8qIElQIHZlcnNpb24gNiAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCiAjZW5kaWYKICNpZmRlZiBBRl9ST1NFCiAgICAgLyogQW1hdGV1ciBSYWRpbyBYLjI1IFBMUCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1NFIiwgQUZfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9TRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ERUNuZXQKICAgICAvKiBSZXNlcnZlZCBmb3IgREVDbmV0IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfREVDbmV0IiwgQUZfREVDbmV0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ERUNuZXQpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUQkVVSQogICAgIC8qIFJlc2VydmVkIGZvciA4MDIuMkxMQyBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVEJFVUkiLCBBRl9ORVRCRVVJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRCRVVJKTsKICNlbmRpZgogI2lmZGVmIEFGX1NFQ1VSSVRZCiAgICAgLyogU2VjdXJpdHkgY2FsbGJhY2sgcHNldWRvIEFGICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NFQ1VSSVRZIiwgQUZfU0VDVVJJVFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NFQ1VSSVRZKTsKICNlbmRpZgogI2lmZGVmIEFGX0tFWQogICAgIC8qIFBGX0tFWSBrZXkgbWFuYWdlbWVudCBBUEkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfS0VZIiwgQUZfS0VZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9LRVkpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUTElOSwogICAgIC8qICAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRMSU5LIiwgQUZfTkVUTElOSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEUiLCBORVRMSU5LX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRMSU5LKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFKTsKICNpZmRlZiBORVRMSU5LX1NLSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19TS0lQIiwgTkVUTElOS19TS0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1NLSVApOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19XMQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1cxIiwgTkVUTElOS19XMSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19XMSk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19VU0VSU09DSyIsIE5FVExJTktfVVNFUlNPQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ZJUkVXQUxMIiwgTkVUTElOS19GSVJFV0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19VU0VSU09DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19GSVJFV0FMTCk7CiAjaWZkZWYgTkVUTElOS19UQ1BESUFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVENQRElBRyIsIE5FVExJTktfVENQRElBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19UQ1BESUFHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfTkZMT0cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ORkxPRyIsIE5FVExJTktfTkZMT0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfTkZMT0cpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19YRlJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfWEZSTSIsIE5FVExJTktfWEZSTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19YRlJNKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfQVJQRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0FSUEQiLCBORVRMSU5LX0FSUEQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfQVJQRCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1JPVVRFNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1JPVVRFNiIsIE5FVExJTktfUk9VVEU2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFNik7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19JUDZfRlciLCBORVRMSU5LX0lQNl9GVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19JUDZfRlcpOwogI2lmZGVmIE5FVExJTktfRE5SVE1TRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ROUlRNU0ciLCBORVRMSU5LX0ROUlRNU0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfRE5SVE1TRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1RBUEJBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQVBCQVNFIiwgTkVUTElOS19UQVBCQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RBUEJBU0UpOwogI2VuZGlmCiAjZW5kaWYgLyogQUZfTkVUTElOSyAqLwogI2lmZGVmIEFGX1JPVVRFCiAgICAgLyogQWxpYXMgdG8gZW11bGF0ZSA0LjRCU0QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUk9VVEUiLCBBRl9ST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9VVEUpOworI2VuZGlmCisjaWZkZWYgQUZfTElOSworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xJTkspOwogI2VuZGlmCiAjaWZkZWYgQUZfQVNICiAgICAgLyogQXNoICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FTSCIsIEFGX0FTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVNIKTsKICNlbmRpZgogI2lmZGVmIEFGX0VDT05FVAogICAgIC8qIEFjb3JuIEVjb25ldCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9FQ09ORVQiLCBBRl9FQ09ORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0VDT05FVCk7CiAjZW5kaWYKICNpZmRlZiBBRl9BVE1TVkMKICAgICAvKiBBVE0gU1ZDcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BVE1TVkMiLCBBRl9BVE1TVkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FUTVNWQyk7CiAjZW5kaWYKICNpZmRlZiBBRl9TTkEKICAgICAvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NOQSIsIEFGX1NOQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU05BKTsKICNlbmRpZgogI2lmZGVmIEFGX0lSREEKICAgICAvKiBJUkRBIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVJEQSIsIEFGX0lSREEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lSREEpOwogI2VuZGlmCiAjaWZkZWYgQUZfUFBQT1gKICAgICAvKiBQUFBvWCBzb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1BQUE9YIiwgQUZfUFBQT1gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1BQUE9YKTsKICNlbmRpZgogI2lmZGVmIEFGX1dBTlBJUEUKICAgICAvKiBXYW5waXBlIEFQSSBTb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1dBTlBJUEUiLCBBRl9XQU5QSVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9XQU5QSVBFKTsKICNlbmRpZgogI2lmZGVmIEFGX0xMQwogICAgIC8qIExpbnV4IExMQyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9MTEMiLCBBRl9MTEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xMQyk7CiAjZW5kaWYKIAogI2lmZGVmIFVTRV9CTFVFVE9PVEgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQkxVRVRPT1RIIiwgQUZfQkxVRVRPT1RIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19MMkNBUCIsIEJUUFJPVE9fTDJDQVApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0hDSSIsIEJUUFJPVE9fSENJKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0hDSSIsIFNPTF9IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0JMVUVUT09USCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19MMkNBUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9IQ0kpOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9GSUxURVIiLCBIQ0lfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfRklMVEVSKTsKICNlbmRpZgogI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9USU1FX1NUQU1QIiwgSENJX1RJTUVfU1RBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9USU1FX1NUQU1QKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfREFUQV9ESVIiLCBIQ0lfREFUQV9ESVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1NDTyIsIEJUUFJPVE9fU0NPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfREFUQV9ESVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fU0NPKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1JGQ09NTSIsIEJUUFJPVE9fUkZDT01NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX1JGQ09NTSk7CiAgICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIkJEQUREUl9BTlkiLCAiMDA6MDA6MDA6MDA6MDA6MDAiKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0xPQ0FMIiwgIjAwOjAwOjAwOkZGOkZGOkZGIik7CiAjZW5kaWYKIAogI2lmZGVmIEFGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0NBTiIsIEFGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQ0FOKTsKICNlbmRpZgogI2lmZGVmIFBGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX0NBTiIsIFBGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfQ0FOKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgQUZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JEUyIsIEFGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUkRTKTsKICNlbmRpZgogI2lmZGVmIFBGX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9SRFMiLCBQRl9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1JEUyk7CiAjZW5kaWYKIAogLyogS2VybmVsIGV2ZW50IG1lc3NhZ2VzICovCiAjaWZkZWYgUEZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1NZU1RFTSIsIFBGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEFGX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TWVNURU0iLCBBRl9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NZU1RFTSk7CiAjZW5kaWYKIAogI2lmZGVmIEFGX1BBQ0tFVApAQCAtNTg2Niw0NDcgKzYxMTQsNDYzIEBACiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfTElOVVhfVElQQ19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1RJUEMiLCBBRl9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9USVBDKTsKIAogICAgIC8qIGZvciBhZGRyZXNzZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUVTRVEiLCBUSVBDX0FERFJfTkFNRVNFUSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9OQU1FIiwgVElQQ19BRERSX05BTUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfSUQiLCBUSVBDX0FERFJfSUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FU0VRKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX0lEKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1pPTkVfU0NPUEUiLCBUSVBDX1pPTkVfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NMVVNURVJfU0NPUEUiLCBUSVBDX0NMVVNURVJfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX05PREVfU0NPUEUiLCBUSVBDX05PREVfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfWk9ORV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DTFVTVEVSX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX05PREVfU0NPUEUpOwogCiAgICAgLyogZm9yIHNldHNvY2tvcHQoKSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVElQQyIsIFNPTF9USVBDKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19JTVBPUlRBTkNFIiwgVElQQ19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TUkNfRFJPUFBBQkxFIiwgVElQQ19TUkNfRFJPUFBBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ERVNUX0RST1BQQUJMRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfREVTVF9EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NPTk5fVElNRU9VVCIsIFRJUENfQ09OTl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVElQQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NSQ19EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfREVTVF9EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ09OTl9USU1FT1VUKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0xPV19JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19MT1dfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTUVESVVNX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ISUdIX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19MT1dfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19NRURJVU1fSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ISUdIX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CiAKICAgICAvKiBmb3Igc3Vic2NyaXB0aW9ucyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9QT1JUUyIsIFRJUENfU1VCX1BPUlRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfU0VSVklDRSIsIFRJUENfU1VCX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1BPUlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9TRVJWSUNFKTsKICNpZmRlZiBUSVBDX1NVQl9DQU5DRUwKICAgICAvKiBkb2Vzbid0IHNlZW0gdG8gYmUgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfQ0FOQ0VMIiwgVElQQ19TVUJfQ0FOQ0VMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9DQU5DRUwpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfV0FJVF9GT1JFVkVSIiwgVElQQ19XQUlUX0ZPUkVWRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1BVQkxJU0hFRCIsIFRJUENfUFVCTElTSEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XSVRIRFJBV04iLCBUSVBDX1dJVEhEUkFXTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCU0NSX1RJTUVPVVQiLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DRkdfU1JWIiwgVElQQ19DRkdfU1JWKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19UT1BfU1JWIiwgVElQQ19UT1BfU1JWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1dBSVRfRk9SRVZFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19QVUJMSVNIRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0lUSERSQVdOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NGR19TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfVE9QX1NSVik7CiAjZW5kaWYKIAogICAgIC8qIFNvY2tldCB0eXBlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1NUUkVBTSIsIFNPQ0tfU1RSRUFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19ER1JBTSIsIFNPQ0tfREdSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU1RSRUFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0RHUkFNKTsKIC8qIFdlIGhhdmUgaW5jb21wbGV0ZSBzb2NrZXQgc3VwcG9ydC4gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SQVciLCBTT0NLX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU0VRUEFDS0VUIiwgU09DS19TRVFQQUNLRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1NFUVBBQ0tFVCk7CiAjaWYgZGVmaW5lZChTT0NLX1JETSkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SRE0iLCBTT0NLX1JETSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SRE0pOwogI2VuZGlmCiAjaWZkZWYgU09DS19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfQ0xPRVhFQyIsIFNPQ0tfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19OT05CTE9DSyIsIFNPQ0tfTk9OQkxPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfTk9OQkxPQ0spOwogI2VuZGlmCiAKICNpZmRlZiAgU09fREVCVUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fREVCVUciLCBTT19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fREVCVUcpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0FDQ0VQVENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQUNDRVBUQ09OTiIsIFNPX0FDQ0VQVENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0FDQ0VQVENPTk4pOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JFVVNFQUREUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SRVVTRUFERFIiLCBTT19SRVVTRUFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JFVVNFQUREUik7CiAjZW5kaWYKICNpZmRlZiBTT19FWENMVVNJVkVBRERSVVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VYQ0xVU0lWRUFERFJVU0UiLCBTT19FWENMVVNJVkVBRERSVVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19FWENMVVNJVkVBRERSVVNFKTsKICNlbmRpZgogCiAjaWZkZWYgIFNPX0tFRVBBTElWRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19LRUVQQUxJVkUiLCBTT19LRUVQQUxJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0tFRVBBTElWRSk7CiAjZW5kaWYKICNpZmRlZiAgU09fRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0RPTlRST1VURSIsIFNPX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBTT19CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQlJPQURDQVNUIiwgU09fQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19CUk9BRENBU1QpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1VTRUxPT1BCQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1VTRUxPT1BCQUNLIiwgU09fVVNFTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1VTRUxPT1BCQUNLKTsKICNlbmRpZgogI2lmZGVmICBTT19MSU5HRVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fTElOR0VSIiwgU09fTElOR0VSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19MSU5HRVIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX09PQklOTElORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19PT0JJTkxJTkUiLCBTT19PT0JJTkxJTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX09PQklOTElORSk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VQT1JUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFUE9SVCIsIFNPX1JFVVNFUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VQT1JUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRCVUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05EQlVGIiwgU09fU05EQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRCVUYpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZCVUYiLCBTT19SQ1ZCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fU05ETE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05ETE9XQVQiLCBTT19TTkRMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05ETE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkxPV0FUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkxPV0FUIiwgU09fUkNWTE9XQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkxPV0FUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRUSU1FTyIsIFNPX1NORFRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWVElNRU8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWVElNRU8iLCBTT19SQ1ZUSU1FTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWVElNRU8pOwogI2VuZGlmCiAjaWZkZWYgIFNPX0VSUk9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VSUk9SIiwgU09fRVJST1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VSUk9SKTsKICNlbmRpZgogI2lmZGVmICBTT19UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1RZUEUiLCBTT19UWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19UWVBFKTsKICNlbmRpZgogI2lmZGVmICBTT19TRVRGSUIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU0VURklCIiwgU09fU0VURklCKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TRVRGSUIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BBU1NDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BBU1NDUkVEIiwgU09fUEFTU0NSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BBU1NDUkVEKTsKICNlbmRpZgogI2lmZGVmICBTT19QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19QRUVSQ1JFRCIsIFNPX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgTE9DQUxfUEVFUkNSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUxfUEVFUkNSRUQiLCBMT0NBTF9QRUVSQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DQUxfUEVFUkNSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JJTkRUT0RFVklDRQogICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JJTkRUT0RFVklDRSk7CiAjZW5kaWYKKyNpZmRlZiAgU09fUFJJT1JJVFkKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QUklPUklUWSk7CisjZW5kaWYKIAogICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciAibGlzdGVuIiAqLwogI2lmZGVmICBTT01BWENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgU09NQVhDT05OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT01BWENPTk4pOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgNSk7IC8qIENvbW1vbiB2YWx1ZSAqLwogI2VuZGlmCiAKICAgICAvKiBBbmNpbGxpYXJ5IG1lc3NhZ2UgdHlwZXMgKi8KICNpZmRlZiAgU0NNX1JJR0hUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fUklHSFRTIiwgU0NNX1JJR0hUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX1JJR0hUUyk7CiAjZW5kaWYKICNpZmRlZiAgU0NNX0NSRURFTlRJQUxTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9DUkVERU5USUFMUyIsIFNDTV9DUkVERU5USUFMUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX0NSRURFTlRJQUxTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURTIiwgU0NNX0NSRURTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFRFMpOwogI2VuZGlmCiAKICAgICAvKiBGbGFncyBmb3Igc2VuZCwgcmVjdiAqLwogI2lmZGVmICBNU0dfT09CCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19PT0IiLCBNU0dfT09CKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfT09CKTsKICNlbmRpZgogI2lmZGVmICBNU0dfUEVFSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfUEVFSyIsIE1TR19QRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfUEVFSyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRST1VURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRE9OVFJPVVRFIiwgTVNHX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRST1VURSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UV0FJVCIsIE1TR19ET05UV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRU9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FT1IiLCBNU0dfRU9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRU9SKTsKICNlbmRpZgogI2lmZGVmICBNU0dfVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1RSVU5DIiwgTVNHX1RSVU5DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NUUlVOQyIsIE1TR19DVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19XQUlUQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19XQUlUQUxMIiwgTVNHX1dBSVRBTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19XQUlUQUxMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQlRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQlRBRyIsIE1TR19CVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQlRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VUQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VUQUciLCBNU0dfRVRBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VUQUcpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19OT1NJR05BTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9TSUdOQUwiLCBNU0dfTk9TSUdOQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19OT1NJR05BTCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PVElGSUNBVElPTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9USUZJQ0FUSU9OIiwgTVNHX05PVElGSUNBVElPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PVElGSUNBVElPTik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NNU0dfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ01TR19DTE9FWEVDIiwgTVNHX0NNU0dfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NNU0dfQ0xPRVhFQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VSUlFVRVVFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FUlJRVUVVRSIsIE1TR19FUlJRVUVVRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VSUlFVRVVFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ09ORklSTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ09ORklSTSIsIE1TR19DT05GSVJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ09ORklSTSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01PUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01PUkUiLCBNU0dfTU9SRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01PUkUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT0YKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPRiIsIE1TR19FT0YpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT0YpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQkNBU1QiLCBNU0dfQkNBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01DQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19NQ0FTVCIsIE1TR19NQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01DQVNUKTsKKyNlbmRpZgorI2lmZGVmIE1TR19GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19GQVNUT1BFTik7CiAjZW5kaWYKIAogICAgIC8qIFByb3RvY29sIGxldmVsIGFuZCBudW1iZXJzLCB1c2FibGUgZm9yIFtnc11ldHNvY2tvcHQgKi8KICNpZmRlZiAgU09MX1NPQ0tFVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfU09DS0VUIiwgU09MX1NPQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1NPQ0tFVCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIFNPTF9JUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQWCIsIFNPTF9JUFgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9JUFgpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BWDI1Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9BWDI1IiwgU09MX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BWDI1KTsKICNlbmRpZgogI2lmZGVmICBTT0xfQVRBTEsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FUQUxLIiwgU09MX0FUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQVRBTEspOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ORVRST00KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX05FVFJPTSIsIFNPTF9ORVRST00pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ST1NFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9ST1NFIiwgU09MX1JPU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ST1NFKTsKICNlbmRpZgogI2lmZGVmICBTT0xfVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCBTT0xfVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCA2KTsKICNlbmRpZgogI2lmZGVmICBTT0xfVURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCBTT0xfVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVURQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX0JBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9CQVNFIiwgU09MX0NBTl9CQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX0JBU0UpOwogI2VuZGlmCiAjaWZkZWYgU09MX0NBTl9SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9SQVciLCBTT0xfQ0FOX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVciLCBDQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBVyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FRkZfRkxBRyIsIENBTl9FRkZfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SVFJfRkxBRyIsIENBTl9SVFJfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FUlJfRkxBRyIsIENBTl9FUlJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUlRSX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FUlJfRkxBRyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1NGRl9NQVNLIiwgQ0FOX1NGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9NQVNLIiwgQ0FOX0VGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9NQVNLIiwgQ0FOX0VSUl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fU0ZGX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX1JBV19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRklMVEVSIiwgQ0FOX1JBV19GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0VSUl9GSUxURVIiLCBDQU5fUkFXX0VSUl9GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0xPT1BCQUNLIiwgQ0FOX1JBV19MT09QQkFDSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfUkVDVl9PV05fTVNHUyIsIENBTl9SQVdfUkVDVl9PV05fTVNHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfRVJSX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19MT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0JDTSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VUVVAiLCBUWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfREVMRVRFIiwgVFhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9SRUFEIiwgVFhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VORCIsIFRYX1NFTkQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NFVFVQIiwgUlhfU0VUVVApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0RFTEVURSIsIFJYX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfUkVBRCIsIFJYX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NUQVRVUyIsIFRYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfRVhQSVJFRCIsIFRYX0VYUElSRUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NUQVRVUyIsIFJYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfVElNRU9VVCIsIFJYX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0NIQU5HRUQiLCBSWF9DSEFOR0VEKTsKICNlbmRpZgogI2lmZGVmIFNPTF9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JEUyIsIFNPTF9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NBTkNFTF9TRU5UX1RPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DQU5DRUxfU0VOVF9UTyIsIFJEU19DQU5DRUxfU0VOVF9UTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUiIsIFJEU19HRVRfTVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0ZSRUVfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0ZSRUVfTVIiLCBSRFNfRlJFRV9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0ZSRUVfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JFQ1ZFUlIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JFQ1ZFUlIiLCBSRFNfUkVDVkVSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JFQ1ZFUlIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NPTkdfTU9OSVRPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ09OR19NT05JVE9SIiwgUkRTX0NPTkdfTU9OSVRPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NPTkdfTU9OSVRPUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfR0VUX01SX0ZPUl9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19HRVRfTVJfRk9SX0RFU1QiLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCBJUFBST1RPX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCAwKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0hPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IT1BPUFRTIiwgSVBQUk9UT19IT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0hPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCBJUFBST1RPX0lDTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCAxKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lHTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JR01QIiwgSVBQUk9UT19JR01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lHTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR0dQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR0dQIiwgSVBQUk9UT19HR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR0dQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY0IiwgSVBQUk9UT19JUFY0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBJUCIsIElQUFJPVE9fSVBJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUElQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1RDUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIElQUFJPVE9fVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1RDUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRUdQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRUdQIiwgSVBQUk9UT19FR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRUdQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BVUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BVUCIsIElQUFJPVE9fUFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BVUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCBJUFBST1RPX1VEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JRFAiLCBJUFBST1RPX0lEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JRFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSEVMTE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IRUxMTyIsIElQUFJPVE9fSEVMTE8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSEVMTE8pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ORCIsIElQUFJPVE9fTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTkQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UUCIsIElQUFJPVE9fVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ST1VUSU5HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUk9VVElORyIsIElQUFJPVE9fUk9VVElORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ST1VUSU5HKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0ZSQUdNRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRlJBR01FTlQiLCBJUFBST1RPX0ZSQUdNRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0ZSQUdNRU5UKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JTVlAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SU1ZQIiwgSVBQUk9UT19SU1ZQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JTVlApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR1JFIiwgSVBQUk9UT19HUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR1JFKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VTUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VTUCIsIElQUFJPVE9fRVNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VTUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19BSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0FIIiwgSVBQUk9UT19BSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19BSCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NT0JJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NT0JJTEUiLCBJUFBST1RPX01PQklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NT0JJTEUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUFY2IiwgSVBQUk9UT19JQ01QVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19OT05FIiwgSVBQUk9UT19OT05FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX05PTkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0RTVE9QVFMiLCBJUFBST1RPX0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19YVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19YVFAiLCBJUFBST1RPX1hUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19YVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRU9OIiwgSVBQUk9UT19FT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRU9OKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BJTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BJTSIsIElQUFJPVE9fUElNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BJTSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUENPTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUENPTVAiLCBJUFBST1RPX0lQQ09NUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUENPTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVlJSUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1ZSUlAiLCBJUFBST1RPX1ZSUlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVlJSUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19TQ1RQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fU0NUUCIsIElQUFJPVE9fU0NUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19TQ1RQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0JJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0JJUCIsIElQUFJPVE9fQklQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0JJUCk7CiAjZW5kaWYKIC8qKi8KICNpZmRlZiAgSVBQUk9UT19SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCBJUFBST1RPX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19SQVcpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCAyNTUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTUFYIiwgSVBQUk9UT19NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTUFYKTsKICNlbmRpZgogCiAjaWZkZWYgIFNZU1BST1RPX0NPTlRST0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1lTUFJPVE9fQ09OVFJPTCIsIFNZU1BST1RPX0NPTlRST0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNZU1BST1RPX0NPTlRST0wpOwogI2VuZGlmCiAKICAgICAvKiBTb21lIHBvcnQgY29uZmlndXJhdGlvbiAqLwogI2lmZGVmICBJUFBPUlRfUkVTRVJWRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgSVBQT1JUX1JFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfUkVTRVJWRUQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgMTAyNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQT1JUX1VTRVJSRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgNTAwMCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcmVzZXJ2ZWQgSVAgdi40IGFkZHJlc3NlcyAqLwogI2lmZGVmICBJTkFERFJfQU5ZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCBJTkFERFJfQU5ZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQU5ZKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCAweDAwMDAwMDAwKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfQlJPQURDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCBJTkFERFJfQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQlJPQURDQVNUKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgSU5BRERSX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTE9PUEJBQ0spOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgMHg3RjAwMDAwMSk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX1VOU1BFQ19HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgMHhlMDAwMDAwMCk7CiAjZW5kaWYKQEAgLTYzMTcsMzU0ICs2NTgxLDM1MyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQUxMSE9TVFNfR1JPVVAiLCAweGUwMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTUFYX0xPQ0FMX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9NQVhfTE9DQUxfR1JPVVAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsIDB4ZTAwMDAwZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9OT05FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgSU5BRERSX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9OT05FKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgMHhmZmZmZmZmZik7CiAjZW5kaWYKIAogICAgIC8qIElQdjQgW2dzXWV0c29ja29wdCBvcHRpb25zICovCiAjaWZkZWYgIElQX09QVElPTlMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfT1BUSU9OUyIsIElQX09QVElPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX09QVElPTlMpOwogI2VuZGlmCiAjaWZkZWYgIElQX0hEUklOQ0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfSERSSU5DTCIsIElQX0hEUklOQ0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0hEUklOQ0wpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RPUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UT1MiLCBJUF9UT1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RPUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RUTCIsIElQX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWT1BUUyIsIElQX1JFQ1ZPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVlJFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVlJFVE9QVFMiLCBJUF9SRUNWUkVUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVlJFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZEU1RBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZEU1RBRERSIiwgSVBfUkVDVkRTVEFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZEU1RBRERSKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRVRPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFVE9QVFMiLCBJUF9SRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRVRPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0lGIiwgSVBfTVVMVElDQVNUX0lGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX1RUTCIsIElQX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9MT09QIiwgSVBfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9BRERfTUVNQkVSU0hJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9BRERfTUVNQkVSU0hJUCIsIElQX0FERF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9BRERfTUVNQkVSU0hJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfRFJPUF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RST1BfTUVNQkVSU0hJUCIsIElQX0RST1BfTUVNQkVSU0hJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfRFJPUF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9NQVhfTUVNQkVSU0hJUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTUFYX01FTUJFUlNISVBTIiwgSVBfTUFYX01FTUJFUlNISVBTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NQVhfTUVNQkVSU0hJUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RSQU5TUEFSRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RSQU5TUEFSRU5UIiwgSVBfVFJBTlNQQVJFTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RSQU5TUEFSRU5UKTsKICNlbmRpZgogCiAgICAgLyogSVB2NiBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDMjU1MyAqLwogI2lmZGVmICBJUFY2X0pPSU5fR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9KT0lOX0dST1VQIiwgSVBWNl9KT0lOX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0pPSU5fR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTEVBVkVfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9MRUFWRV9HUk9VUCIsIElQVjZfTEVBVkVfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTEVBVkVfR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0hPUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSE9QUyIsIElQVjZfTVVMVElDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0hPUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0lGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0lGIiwgSVBWNl9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0lGKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0xPT1AiLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X1VOSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VOSUNBU1RfSE9QUyIsIElQVjZfVU5JQ0FTVF9IT1BTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1VOSUNBU1RfSE9QUyk7CiAjZW5kaWYKICAgICAvKiBBZGRpdGlvbmFsIElQVjYgc29ja2V0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDIDM0OTMgKi8KICNpZmRlZiBJUFY2X1Y2T05MWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1Y2T05MWSIsIElQVjZfVjZPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1Y2T05MWSk7CiAjZW5kaWYKICAgICAvKiBBZHZhbmNlZCBJUFY2IHNvY2tldCBvcHRpb25zLCBmcm9tIFJGQyAzNTQyICovCiAjaWZkZWYgSVBWNl9DSEVDS1NVTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0NIRUNLU1VNIiwgSVBWNl9DSEVDS1NVTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9DSEVDS1NVTSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0RPTlRGUkFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRE9OVEZSQUciLCBJUFY2X0RPTlRGUkFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0RPTlRGUkFHKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0RTVE9QVFMiLCBJUFY2X0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0hPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QTElNSVQiLCBJUFY2X0hPUExJTUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0hPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0hPUE9QVFMiLCBJUFY2X0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X05FWFRIT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ORVhUSE9QIiwgSVBWNl9ORVhUSE9QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X05FWFRIT1ApOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEFUSE1UVSIsIElQVjZfUEFUSE1UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1BLVElORk8iLCBJUFY2X1BLVElORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkRTVE9QVFMiLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkhPUExJTUlUIiwgSVBWNl9SRUNWSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QT1BUUyIsIElQVjZfUkVDVkhPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZQS1RJTkZPIiwgSVBWNl9SRUNWUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZSVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZSVEhEUiIsIElQVjZfUkVDVlJUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZSVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZUQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWVENMQVNTIiwgSVBWNl9SRUNWVENMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZUQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSIiwgSVBWNl9SVEhEUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSRFNUT1BUUyIsIElQVjZfUlRIRFJEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSX1RZUEVfMAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSX1RZUEVfMCIsIElQVjZfUlRIRFJfVFlQRV8wKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSX1RZUEVfMCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBBVEhNVFUiLCBJUFY2X1JFQ1ZQQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVENMQVNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVENMQVNTIiwgSVBWNl9UQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVENMQVNTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVVNFX01JTl9NVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9VU0VfTUlOX01UVSIsIElQVjZfVVNFX01JTl9NVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVVNFX01JTl9NVFUpOwogI2VuZGlmCiAKICAgICAvKiBUQ1Agb3B0aW9ucyAqLwogI2lmZGVmICBUQ1BfTk9ERUxBWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTk9ERUxBWSIsIFRDUF9OT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTk9ERUxBWSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX01BWFNFRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTUFYU0VHIiwgVENQX01BWFNFRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX01BWFNFRyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0NPUksKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0NPUksiLCBUQ1BfQ09SSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0NPUkspOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQSURMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElETEUiLCBUQ1BfS0VFUElETEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQSURMRSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJTlRWTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElOVFZMIiwgVENQX0tFRVBJTlRWTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJTlRWTCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBDTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBDTlQiLCBUQ1BfS0VFUENOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBDTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9TWU5DTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1NZTkNOVCIsIFRDUF9TWU5DTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9TWU5DTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9MSU5HRVIyCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9MSU5HRVIyIiwgVENQX0xJTkdFUjIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9MSU5HRVIyKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfREVGRVJfQUNDRVBUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9ERUZFUl9BQ0NFUFQiLCBUQ1BfREVGRVJfQUNDRVBUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfREVGRVJfQUNDRVBUKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfV0lORE9XX0NMQU1QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9XSU5ET1dfQ0xBTVAiLCBUQ1BfV0lORE9XX0NMQU1QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfV0lORE9XX0NMQU1QKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfSU5GTyIsIFRDUF9JTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfSU5GTyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1FVSUNLQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9RVUlDS0FDSyIsIFRDUF9RVUlDS0FDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1FVSUNLQUNLKTsKICNlbmRpZgotCisjaWZkZWYgIFRDUF9GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9GQVNUT1BFTik7CisjZW5kaWYKIAogICAgIC8qIElQWCBvcHRpb25zICovCiAjaWZkZWYgIElQWF9UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQWF9UWVBFIiwgSVBYX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQWF9UWVBFKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9BUkdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfQVJHUyIsIFJEU19DTVNHX1JETUFfQVJHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfREVTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX0RFU1QiLCBSRFNfQ01TR19SRE1BX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfREVTVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX01BUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX01BUCIsIFJEU19DTVNHX1JETUFfTUFQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX01BUCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1NUQVRVUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1NUQVRVUyIsIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1NUQVRVUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1VQREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1VQREFURSIsIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1VQREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9SRUFEV1JJVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfUkVBRFdSSVRFIiwgUkRTX1JETUFfUkVBRFdSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9SRUFEV1JJVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfRkVOQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfRkVOQ0UiLCBSRFNfUkRNQV9GRU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfRkVOQ0UpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfSU5WQUxJREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9JTlZBTElEQVRFIiwgUkRTX1JETUFfSU5WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfSU5WQUxJREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9VU0VfT05DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9VU0VfT05DRSIsIFJEU19SRE1BX1VTRV9PTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9VU0VfT05DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9ET05UV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9ET05UV0FJVCIsIFJEU19SRE1BX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9ET05UV0FJVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9OT1RJRllfTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfTk9USUZZX01FIiwgUkRTX1JETUFfTk9USUZZX01FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9OT1RJRllfTUUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfU0lMRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1NJTEVOVCIsIFJEU19SRE1BX1NJTEVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfU0lMRU5UKTsKICNlbmRpZgogCiAgICAgLyogZ2V0e2FkZHIsbmFtZX1pbmZvIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBFQUlfQUREUkZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUREUkZBTUlMWSIsIEVBSV9BRERSRkFNSUxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUREUkZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfQUdBSU4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0FHQUlOIiwgRUFJX0FHQUlOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUdBSU4pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREZMQUdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURGTEFHUyIsIEVBSV9CQURGTEFHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREZMQUdTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQUlMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9GQUlMIiwgRUFJX0ZBSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQUlMKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQU1JTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBTUlMWSIsIEVBSV9GQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQU1JTFkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01FTU9SWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUVNT1JZIiwgRUFJX01FTU9SWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01FTU9SWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTk9EQVRBCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9OT0RBVEEiLCBFQUlfTk9EQVRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTk9EQVRBKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT05BTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PTkFNRSIsIEVBSV9OT05BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT05BTUUpOwogI2VuZGlmCiAjaWZkZWYgRUFJX09WRVJGTE9XCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9PVkVSRkxPVyIsIEVBSV9PVkVSRkxPVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX09WRVJGTE9XKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TRVJWSUNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TRVJWSUNFIiwgRUFJX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TRVJWSUNFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TT0NLVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU09DS1RZUEUiLCBFQUlfU09DS1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TT0NLVFlQRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TWVNURU0iLCBFQUlfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEVBSV9CQURISU5UUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQkFESElOVFMiLCBFQUlfQkFESElOVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9CQURISU5UUyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfUFJPVE9DT0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1BST1RPQ09MIiwgRUFJX1BST1RPQ09MKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfUFJPVE9DT0wpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUFYIiwgRUFJX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01BWCk7CiAjZW5kaWYKICNpZmRlZiBBSV9QQVNTSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1BBU1NJVkUiLCBBSV9QQVNTSVZFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9QQVNTSVZFKTsKICNlbmRpZgogI2lmZGVmIEFJX0NBTk9OTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9DQU5PTk5BTUUiLCBBSV9DQU5PTk5BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0NBTk9OTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDSE9TVCIsIEFJX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDU0VSViIsIEFJX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBBSV9NQVNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX01BU0siLCBBSV9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEFJX0FMTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BTEwiLCBBSV9BTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0FMTCk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRF9DRkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfVjRNQVBQRURfQ0ZHIiwgQUlfVjRNQVBQRURfQ0ZHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRF9DRkcpOwogI2VuZGlmCiAjaWZkZWYgQUlfQUREUkNPTkZJRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BRERSQ09ORklHIiwgQUlfQUREUkNPTkZJRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUREUkNPTkZJRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRCIsIEFJX1Y0TUFQUEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRCk7CiAjZW5kaWYKICNpZmRlZiBBSV9ERUZBVUxUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0RFRkFVTFQiLCBBSV9ERUZBVUxUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9ERUZBVUxUKTsKICNlbmRpZgogI2lmZGVmIE5JX01BWEhPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTUFYSE9TVCIsIE5JX01BWEhPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX01BWEhPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhTRVJWIiwgTklfTUFYU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9OT0ZRRE4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTk9GUUROIiwgTklfTk9GUUROKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OT0ZRRE4pOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ0hPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ0hPU1QiLCBOSV9OVU1FUklDSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ0hPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTkFNRVJFUUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTkFNRVJFUUQiLCBOSV9OQU1FUkVRRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTkFNRVJFUUQpOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ1NFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ1NFUlYiLCBOSV9OVU1FUklDU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ1NFUlYpOwogI2VuZGlmCiAjaWZkZWYgTklfREdSQU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfREdSQU0iLCBOSV9ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfREdSQU0pOwogI2VuZGlmCiAKICAgICAvKiBzaHV0ZG93bigpIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBTSFVUX1JECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCBTSFVUX1JEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1JEKTsKICNlbGlmIGRlZmluZWQoU0RfUkVDRUlWRSkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNEX1JFQ0VJVkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIDApOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9XUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgU0hVVF9XUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9XUik7CiAjZWxpZiBkZWZpbmVkKFNEX1NFTkQpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTRF9TRU5EKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCAxKTsKICNlbmRpZgogI2lmZGVmIFNIVVRfUkRXUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEV1IiLCBTSFVUX1JEV1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkRXUik7CiAjZWxpZiBkZWZpbmVkKFNEX0JPVEgpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNEX0JPVEgpOwogI2Vsc2UKQEAgLTY2ODQsMTQgKzY5NDcsMTQgQEAKICAgICAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lc1tpXSwgdG1wKTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09GRiIsIFJDVkFMTF9PRkYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT04iLCBSQ1ZBTExfT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfU09DS0VUTEVWRUxPTkxZIiwgUkNWQUxMX1NPQ0tFVExFVkVMT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09GRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKICNpZmRlZiBSQ1ZBTExfSVBMRVZFTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfSVBMRVZFTCIsIFJDVkFMTF9JUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfSVBMRVZFTCk7CiAjZW5kaWYKICNpZmRlZiBSQ1ZBTExfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9NQVgiLCBSQ1ZBTExfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfTUFYKTsKICNlbmRpZgogI2VuZGlmIC8qIF9NU1RDUElQXyAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAppbmRleCAwNDM1ODc4Li5iODNmOWFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKQEAgLTgsNyArOCw3IEBACiAjICAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogIyBlbmRpZgogIyBpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jIGlmICEoZGVmaW5lZChfX0NZR1dJTl9fKSB8fCAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKSkpCisjIGlmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICBpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgogIyBlbmRpZgogCkBAIC04MCw2ICs4MCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nhbi9yYXcuaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyNpbmNsdWRlIDxsaW51eC9jYW4vYmNtLmg+CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfU1lTX1NZU19ET01BSU5fSAogI2luY2x1ZGUgPHN5cy9zeXNfZG9tYWluLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKaW5kZXggMTk0YWUxOS4uNjhlYTFiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKQEAgLTI2LDIyICsyNiwyNCBAQAogI2lmIGRlZmluZWQoSEFWRV9HRVRTUE5BTSkgfHwgZGVmaW5lZChIQVZFX0dFVFNQRU5UKQogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBzdHJ1Y3Rfc3B3ZF90eXBlX2ZpZWxkc1tdID0gewotICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWUifSwKLSAgICB7InNwX3B3ZCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKKyAgICB7InNwX25hbXAiLCAibG9naW4gbmFtZSJ9LAorICAgIHsic3BfcHdkcCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKICAgICB7InNwX2xzdGNoZyIsICJkYXRlIG9mIGxhc3QgY2hhbmdlIn0sCiAgICAgeyJzcF9taW4iLCAibWluICNkYXlzIGJldHdlZW4gY2hhbmdlcyJ9LAogICAgIHsic3BfbWF4IiwgIm1heCAjZGF5cyBiZXR3ZWVuIGNoYW5nZXMifSwKICAgICB7InNwX3dhcm4iLCAiI2RheXMgYmVmb3JlIHB3IGV4cGlyZXMgdG8gd2FybiB1c2VyIGFib3V0IGl0In0sCi0gICAgeyJzcF9pbmFjdCIsICIjZGF5cyBhZnRlciBwdyBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgYmxvY2tlZCJ9LAotICAgIHsic3BfZXhwaXJlIiwgIiNkYXlzIHNpbmNlIDE5NzAtMDEtMDEgdW50aWwgYWNjb3VudCBpcyBkaXNhYmxlZCJ9LAorICAgIHsic3BfaW5hY3QiLCAiI2RheXMgYWZ0ZXIgcHcgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkIn0sCisgICAgeyJzcF9leHBpcmUiLCAiI2RheXMgc2luY2UgMTk3MC0wMS0wMSB3aGVuIGFjY291bnQgZXhwaXJlcyJ9LAogICAgIHsic3BfZmxhZyIsICJyZXNlcnZlZCJ9LAorICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWU7IGRlcHJlY2F0ZWQifSwgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworICAgIHsic3BfcHdkIiwgImVuY3J5cHRlZCBwYXNzd29yZDsgZGVwcmVjYXRlZCJ9LCAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAgICAgezB9CiB9OwogCiBQeURvY19TVFJWQVIoc3RydWN0X3Nwd2RfX2RvY19fLAogInNwd2Quc3RydWN0X3Nwd2Q6IFJlc3VsdHMgZnJvbSBnZXRzcCooKSByb3V0aW5lcy5cblxuXAogVGhpcyBvYmplY3QgbWF5IGJlIGFjY2Vzc2VkIGVpdGhlciBhcyBhIDktdHVwbGUgb2ZcblwKLSAgKHNwX25hbSxzcF9wd2Qsc3BfbHN0Y2hnLHNwX21pbixzcF9tYXgsc3Bfd2FybixzcF9pbmFjdCxzcF9leHBpcmUsc3BfZmxhZylcblwKKyAgKHNwX25hbXAsc3BfcHdkcCxzcF9sc3RjaGcsc3BfbWluLHNwX21heCxzcF93YXJuLHNwX2luYWN0LHNwX2V4cGlyZSxzcF9mbGFnKVxuXAogb3IgdmlhIHRoZSBvYmplY3QgYXR0cmlidXRlcyBhcyBuYW1lZCBpbiB0aGUgYWJvdmUgdHVwbGUuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgc3RydWN0X3Nwd2RfdHlwZV9kZXNjID0gewpAQCAtODYsNiArODgsOCBAQAogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfaW5hY3QpOwogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfZXhwaXJlKTsKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2ZsYWcpOworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfbmFtcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX25hbSAqLworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfcHdkcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX3B3ZCAqLwogCiAjdW5kZWYgU0VUUwogI3VuZGVmIFNFVEkKQEAgLTE5Niw5ICsyMDAsMTEgQEAKICAgICBtPVB5TW9kdWxlX0NyZWF0ZSgmc3B3ZG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0U3B3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFNwd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9zcHdkIiwgKFB5T2JqZWN0ICopICZTdHJ1Y3RTcHdkVHlwZSk7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmUuaCBiL01vZHVsZXMvc3JlLmgKaW5kZXggMGE4ZjBjZi4uNjIxZTJkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmUuaAorKysgYi9Nb2R1bGVzL3NyZS5oCkBAIC0zMSw5ICszMSw3IEBACiAgICAgUHlPYmplY3QqIHBhdHRlcm47IC8qIHBhdHRlcm4gc291cmNlIChvciBOb25lKSAqLwogICAgIGludCBmbGFnczsgLyogZmxhZ3MgdXNlZCB3aGVuIGNvbXBpbGluZyBwYXR0ZXJuIHNvdXJjZSAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyogcGF0dGVybiBjaGFyc2l6ZSAob3IgLTEpICovCi0gICAgaW50IGNoYXJzaXplOwotICAgIFB5X2J1ZmZlciB2aWV3OworICAgIGludCBpc2J5dGVzOyAvKiBwYXR0ZXJuIHR5cGUgKDEgLSBieXRlcywgMCAtIHN0cmluZywgLTEgLSBOb25lKSAqLwogICAgIC8qIHBhdHRlcm4gY29kZSAqLwogICAgIFB5X3NzaXplX3QgY29kZXNpemU7CiAgICAgU1JFX0NPREUgY29kZVsxXTsKQEAgLTczLDkgKzcxLDggQEAKICAgICAvKiBhdHRyaWJ1dGVzIGZvciB0aGUgbWF0Y2ggb2JqZWN0ICovCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHBvcywgZW5kcG9zOwotICAgIC8qIGNoYXJhY3RlciBzaXplICovCi0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemU7IC8qIGtpbmQgb2YgdGhpbmc6IDEgLSBieXRlcywgMi80IC0gdW5pY29kZSAqLwotICAgIGludCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlczsKKyAgICBpbnQgY2hhcnNpemU7IC8qIGNoYXJhY3RlciBzaXplICovCiAgICAgLyogcmVnaXN0ZXJzICovCiAgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CiAgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKQEAgLTg5LDYgKzg2LDcgQEAKICAgICBTUkVfUkVQRUFUICpyZXBlYXQ7CiAgICAgLyogaG9va3MgKi8KICAgICBTUkVfVE9MT1dFUl9IT09LIGxvd2VyOworICAgIGludCBtYXRjaF9hbGw7CiB9IFNSRV9TVEFURTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggYi9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaAppbmRleCAxM2M4OTU4Li41OTQwZDVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaAorKysgYi9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaApAQCAtODEsNiArODEsOCBAQAogI2RlZmluZSBTUkVfRkxBR19ET1RBTEwgMTYKICNkZWZpbmUgU1JFX0ZMQUdfVU5JQ09ERSAzMgogI2RlZmluZSBTUkVfRkxBR19WRVJCT1NFIDY0CisjZGVmaW5lIFNSRV9GTEFHX0RFQlVHIDEyOAorI2RlZmluZSBTUkVfRkxBR19BU0NJSSAyNTYKICNkZWZpbmUgU1JFX0lORk9fUFJFRklYIDEKICNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAyCiAjZGVmaW5lIFNSRV9JTkZPX0NIQVJTRVQgNApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmVfbGliLmggYi9Nb2R1bGVzL3NyZV9saWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjg2Njk3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9zcmVfbGliLmgKQEAgLTAsMCArMSwxMzQzIEBACisvKgorICogU2VjcmV0IExhYnMnIFJlZ3VsYXIgRXhwcmVzc2lvbiBFbmdpbmUKKyAqCisgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNlZSB0aGUgX3NyZS5jIGZpbGUgZm9yIGluZm9ybWF0aW9uIG9uIHVzYWdlIGFuZCByZWRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBTdHJpbmcgbWF0Y2hpbmcgZW5naW5lICovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcywgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHRpbmdzICovCisKK0xPQ0FMKGludCkKK1NSRShhdCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NIQVIqIHB0ciwgU1JFX0NPREUgYXQpCit7CisgICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLworCisgICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7CisKKyAgICBzd2l0Y2ggKGF0KSB7CisKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6CisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKKworICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKKyAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clstMV0pKTsKKworICAgIGNhc2UgU1JFX0FUX0VORDoKKyAgICAgICAgcmV0dXJuICgoKHZvaWQqKSAocHRyKzEpID09IHN0YXRlLT5lbmQgJiYKKyAgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKSB8fAorICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8CisgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCk7CisKKyAgICBjYXNlIFNSRV9BVF9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTE9DX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfVU5JX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTE9DQUwoaW50KQorU1JFKGNoYXJzZXQpKFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQoreworICAgIC8qIGNoZWNrIGlmIGNoYXJhY3RlciBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gc2V0ICovCisKKyAgICBpbnQgb2sgPSAxOworCisgICAgZm9yICg7OykgeworICAgICAgICBzd2l0Y2ggKCpzZXQrKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICByZXR1cm4gIW9rOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoY2ggPT0gc2V0WzBdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLworICAgICAgICAgICAgaWYgKHNyZV9jYXRlZ29yeShzZXRbMF0sIChpbnQpIGNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKi8KKyAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJgorICAgICAgICAgICAgICAgIChzZXRbY2gvU1JFX0NPREVfQklUU10gJiAoMXUgPDwgKGNoICYgKFNSRV9DT0RFX0JJVFMtMSkpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI1Ni9TUkVfQ09ERV9CSVRTOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6CisgICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLworICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6CisgICAgICAgICAgICBvayA9ICFvazsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLworICAgICAgICB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKKyAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7CisKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDB1KQorICAgICAgICAgICAgICAgIGJsb2NrID0gKCh1bnNpZ25lZCBjaGFyKilzZXQpW2NoID4+IDhdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7CisgICAgICAgICAgICBzZXQgKz0gMjU2L3NpemVvZihTUkVfQ09ERSk7CisgICAgICAgICAgICBpZiAoYmxvY2sgPj0wICYmCisgICAgICAgICAgICAgICAgKHNldFsoYmxvY2sgKiAyNTYgKyAoY2ggJiAyNTUpKS9TUkVfQ09ERV9CSVRTXSAmCisgICAgICAgICAgICAgICAgICAgICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gY291bnQgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKKyAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorCitMT0NBTChQeV9zc2l6ZV90KSBTUkUobWF0Y2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKTsKKworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShjb3VudCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgU1JFX0NPREUgY2hyOworICAgIFNSRV9DSEFSIGM7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5wdHI7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogYWRqdXN0IGVuZCAqLworICAgIGlmIChtYXhjb3VudCA8IGVuZCAtIHB0ciAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQorICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudDsKKworICAgIHN3aXRjaCAocGF0dGVyblswXSkgeworCisgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgIC8qIHJlcGVhdGVkIHNldCAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBJTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgU1JFKGNoYXJzZXQpKHBhdHRlcm4gKyAyLCAqcHRyKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfSVNfTElORUJSRUFLKCpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAgc2tpcCB0byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgc3RyaW5nLCBhbmQgYmFja3RyYWNrIGZyb20gdGhlcmUgKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZX0FMTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHB0ciA9IGVuZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIGMgPSAoU1JFX0NIQVIpIGNocjsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gY2hyKQorICAgICAgICAgICAgOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgPT0gYykKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKCpwdHIpID09IGNocikKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICBwdHIgPSBlbmQ7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgIT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIFNVQlBBVFRFUk5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAoKFNSRV9DSEFSKikgc3RhdGUtPnB0ciA8IGVuZCkgeworICAgICAgICAgICAgaSA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKKyAgICAgICAgICAgICAgIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHIpKTsKKyAgICAgICAgcmV0dXJuIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHI7CisgICAgfQorCisgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICBwdHIgLSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyKSk7CisgICAgcmV0dXJuIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7Cit9CisKKyNpZiAwIC8qIG5vdCB1c2VkIGluIHRoaXMgcmVsZWFzZSAqLworTE9DQUwoaW50KQorU1JFKGluZm8pKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIC8qIGNoZWNrIGlmIGFuIFNSRV9PUF9JTkZPIGJsb2NrIG1hdGNoZXMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNSRV9DT0RFIG9iamVjdHMgdG8gc2tpcCBpZiBzdWNjZXNzZnVsLCAwCisgICAgICAgaWYgbm8gbWF0Y2ggKi8KKworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+ZW5kOworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyOworICAgIFB5X3NzaXplX3QgaTsKKworICAgIC8qIGNoZWNrIG1pbmltYWwgbGVuZ3RoICovCisgICAgaWYgKHBhdHRlcm5bM10gJiYgZW5kIC0gcHRyIDwgcGF0dGVyblszXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBrbm93biBwcmVmaXggKi8KKyAgICBpZiAocGF0dGVyblsyXSAmIFNSRV9JTkZPX1BSRUZJWCAmJiBwYXR0ZXJuWzVdID4gMSkgeworICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybls1XTsgaSsrKQorICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgcHRyW2ldICE9IHBhdHRlcm5bNyArIGldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcGF0dGVyblswXSArIDIgKiBwYXR0ZXJuWzZdOworICAgIH0KKyAgICByZXR1cm4gcGF0dGVyblswXTsKK30KKyNlbmRpZgorCisvKiBUaGUgbWFjcm9zIGJlbG93IHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCisgKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgdHJ1ZTogdGhhdCdzIHVzdWFsbHkgYSBzdWNjZXNzCisgKiAgIChiZXNpZGVzIGF0eXBpY2FsIGNhc2VzIGxpa2UgQVNTRVJUX05PVCksIHRoZXJlZm9yZSB0aGVyZSdzIG5vCisgKiAgIHJlYXNvbiB0byByZXN0b3JlIGxhc3RtYXJrOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSBidXQgdGhlIGN1cnJlbnQgU1JFKG1hdGNoKSgpCisgKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkgaXMgdGhlCisgKiAgIHRvcCBmdW5jdGlvbiBvZiB0aGUgcmVjdXJzaW9uLCByZXR1cm5pbmcgZmFsc2Ugd2lsbCBiZSBhIG1hdGNoaW5nCisgKiAgIGZhaWx1cmUsIGFuZCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBsYXN0bWFyayBpcyBwb2ludGluZyB0by4KKyAqICAgSWYgaXQncyAqbm90KiB0aGUgdG9wIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGEgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogICBmYWlsdXJlIGJ5IGl0c2VsZiwgYW5kIHRoZSBjYWxsaW5nIFNSRShtYXRjaCkoKSB3aWxsIGhhdmUgdG8gZGVhbAorICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKKyAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBjb250aW51ZSB0aGUKKyAqICAgb3V0c2lkZSAnZm9yJyBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCB3aGVuIGJyZWFraW5nLCBzaW5jZSB0aGUgbmV4dAorICogICBPUCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4KKyAqICAgaW5zaWRlIGEgbG9jYWwgZm9yL3doaWxlIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIGJldHdlZW4gZWFjaAorICogICBsb29wIGl0ZXJhdGlvbiwgc2luY2UgdGhlIHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgY291bGQgZG8gYW55dGhpbmcsCisgKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCisgKi8KKyNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCisgICAgZG8geyBcCisgICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKKyAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCisgICAgZG8geyBcCisgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorCisjZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCisgICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAorICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNGWSh4KSAjeAorCisjZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAorZG8geyBcCisgICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAorICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAorICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKKyAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srYWxsb2NfcG9zKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZW9mKHR5cGUpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCB0eXBlLCBwdHIsIHBvcykgXAorZG8geyBcCisgICAgVFJBQ0UoKCJsb29raW5nIHVwICVzIGF0ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIFNGWSh0eXBlKSwgcG9zKSk7IFwKKyAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK3Bvcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBkYXRhLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSBpbiAlcCB0byAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIHNpemUpKTsgXAorICAgIGlmIChzaXplID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIG1lbWNweShzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBkYXRhLCBzaXplKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgZGF0YSwgc2l6ZSwgZGlzY2FyZCkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJjb3B5IGRhdGEgdG8gJXAgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgbWVtY3B5KGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSk7IFwKKyAgICBpZiAoZGlzY2FyZCkgXAorICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZSkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJkaXNjYXJkIGRhdGEgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgREFUQV9QVVNIKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpKQorI2RlZmluZSBEQVRBX1BPUCh4KSBcCisgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpLCAxKQorI2RlZmluZSBEQVRBX1BPUF9ESVNDQVJEKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfQUxMT0ModCxwKSBcCisgICAgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdCwgcCkKKyNkZWZpbmUgREFUQV9MT09LVVBfQVQodCxwLHBvcykgXAorICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLHQscCxwb3MpCisKKyNkZWZpbmUgTUFSS19QVVNIKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIGkgPSBsYXN0bWFyazsgLyogY3R4LT5sYXN0bWFyayBtYXkgY2hhbmdlIGlmIHJlYWxsb2NhdGVkICovIFwKKyAgICAgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGkrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAxKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0tFRVAobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMCk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUF9ESVNDQVJEKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSlVNUF9OT05FICAgICAgICAgICAgMAorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8xICAgICAxCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzIgICAgIDIKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMyAgICAgMworI2RlZmluZSBKVU1QX01JTl9VTlRJTF8xICAgICA0CisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzIgICAgIDUKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMyAgICAgNgorI2RlZmluZSBKVU1QX1JFUEVBVCAgICAgICAgICA3CisjZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8xICAgIDgKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzIgICAgOQorI2RlZmluZSBKVU1QX01JTl9SRVBFQVRfT05FICAxMAorI2RlZmluZSBKVU1QX0JSQU5DSCAgICAgICAgICAxMQorI2RlZmluZSBKVU1QX0FTU0VSVCAgICAgICAgICAxMgorI2RlZmluZSBKVU1QX0FTU0VSVF9OT1QgICAgICAxMworCisjZGVmaW5lIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgbWF0Y2hhbGwpIFwKKyAgICBEQVRBX0FMTE9DKFNSRShtYXRjaF9jb250ZXh0KSwgbmV4dGN0eCk7IFwKKyAgICBuZXh0Y3R4LT5sYXN0X2N0eF9wb3MgPSBjdHhfcG9zOyBcCisgICAgbmV4dGN0eC0+anVtcCA9IGp1bXB2YWx1ZTsgXAorICAgIG5leHRjdHgtPnBhdHRlcm4gPSBuZXh0cGF0dGVybjsgXAorICAgIG5leHRjdHgtPm1hdGNoX2FsbCA9IG1hdGNoYWxsOyBcCisgICAgY3R4X3BvcyA9IGFsbG9jX3BvczsgXAorICAgIGN0eCA9IG5leHRjdHg7IFwKKyAgICBnb3RvIGVudHJhbmNlOyBcCisgICAganVtcGxhYmVsOiBcCisgICAgd2hpbGUgKDApIC8qIGdjYyBkb2Vzbid0IGxpa2UgbGFiZWxzIGF0IGVuZCBvZiBzY29wZXMgKi8gXAorCisjZGVmaW5lIERPX0pVTVAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCisgICAgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCBjdHgtPm1hdGNoX2FsbCkKKworI2RlZmluZSBET19KVU1QMChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKKyAgICBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIDApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgU1JFX0NIQVIqIHB0cjsKKyAgICBTUkVfQ09ERSogcGF0dGVybjsKKyAgICBQeV9zc2l6ZV90IGNvdW50OworICAgIFB5X3NzaXplX3QgbGFzdG1hcms7CisgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CisgICAgdW5pb24geworICAgICAgICBTUkVfQ09ERSBjaHI7CisgICAgICAgIFNSRV9SRVBFQVQqIHJlcDsKKyAgICB9IHU7CisgICAgaW50IG1hdGNoX2FsbDsKK30gU1JFKG1hdGNoX2NvbnRleHQpOworCisvKiBjaGVjayBpZiBzdHJpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gIHJldHVybnMgPDAgZm9yCisgICBlcnJvciwgMCBmb3IgZmFpbHVyZSwgYW5kIDEgZm9yIHN1Y2Nlc3MgKi8KK0xPQ0FMKFB5X3NzaXplX3QpCitTUkUobWF0Y2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgIFB5X3NzaXplX3QgYWxsb2NfcG9zLCBjdHhfcG9zID0gLTE7CisgICAgUHlfc3NpemVfdCBpLCByZXQgPSAwOworICAgIFB5X3NzaXplX3QganVtcDsKKyAgICB1bnNpZ25lZCBpbnQgc2lnY291bnQ9MDsKKworICAgIFNSRShtYXRjaF9jb250ZXh0KSogY3R4OworICAgIFNSRShtYXRjaF9jb250ZXh0KSogbmV4dGN0eDsKKworICAgIFRSQUNFKCgifCVwfCVwfEVOVEVSXG4iLCBwYXR0ZXJuLCBzdGF0ZS0+cHRyKSk7CisKKyAgICBEQVRBX0FMTE9DKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4KTsKKyAgICBjdHgtPmxhc3RfY3R4X3BvcyA9IC0xOworICAgIGN0eC0+anVtcCA9IEpVTVBfTk9ORTsKKyAgICBjdHgtPnBhdHRlcm4gPSBwYXR0ZXJuOworICAgIGN0eC0+bWF0Y2hfYWxsID0gc3RhdGUtPm1hdGNoX2FsbDsKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOworCitlbnRyYW5jZToKKworICAgIGN0eC0+cHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKworICAgIGlmIChjdHgtPnBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKKyAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KKyAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IC4uLiAqLworICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzNdICYmIChQeV91aW50cHRyX3QpKGVuZCAtIGN0eC0+cHRyKSA8IGN0eC0+cGF0dGVyblszXSkgeworICAgICAgICAgICAgVFJBQ0UoKCJyZWplY3QgKGdvdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIGNoYXJzLCAiCisgICAgICAgICAgICAgICAgICAgIm5lZWQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsCisgICAgICAgICAgICAgICAgICAgZW5kIC0gY3R4LT5wdHIsIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgKytzaWdjb3VudDsKKyAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKKworICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX01BUks6CisgICAgICAgICAgICAvKiBzZXQgbWFyayAqLworICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKKyAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQorICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAorICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAorICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOworICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLworICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgY3R4LT5wdHJbMF0gIT0gY3R4LT5wYXR0ZXJuWzBdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyB0aGF0IGlzIG5vdCBsaXRlcmFsIGNoYXJhY3RlciAqLworICAgICAgICAgICAgLyogPE5PVF9MSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSA9PSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9TVUNDRVNTOgorICAgICAgICAgICAgLyogZW5kIG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNVQ0NFU1NcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmICghY3R4LT5tYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX0FUOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxBVD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKCFTUkUoYXQpKHN0YXRlLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gY2F0ZWdvcnkgKi8KKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxDQVRFR09SWSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFzcmVfY2F0ZWdvcnkoY3R4LT5wYXR0ZXJuWzBdLCBjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAoZXhjZXB0IGEgbmV3bGluZSkgKi8KKyAgICAgICAgICAgIC8qIDxBTlk+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nICovCisgICAgICAgICAgICAvKiA8QU5ZX0FMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWV9BTExcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgICAgICAvKiBtYXRjaCBzZXQgbWVtYmVyIChvciBub25fbWVtYmVyKSAqLworICAgICAgICAgICAgLyogPElOPiA8c2tpcD4gPHNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMSwgKmN0eC0+cHRyKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0lOX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOX0lHTk9SRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZAorICAgICAgICAgICAgICAgIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgorICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgorICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCisgICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgorICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpICpjdHgtPnB0ciAhPSBjdHgtPnBhdHRlcm5bMl0pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9JTiAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQlJBTkNILCBqdW1wX2JyYW5jaCwgY3R4LT5wYXR0ZXJuKzEpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9LRUVQKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVRfT05FOgorICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1heGltaXppbmcgcmVnZXhwKSAqLworCisgICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKKyAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKKyAgICAgICAgICAgICAgIHVzZSB0aGUgTUFYX1JFUEVBVCBvcGVyYXRvciAqLworCisgICAgICAgICAgICAvKiA8UkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsyXSk7CisgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICBjdHgtPnB0ciArPSBjdHgtPmNvdW50OworCisgICAgICAgICAgICAvKiB3aGVuIHdlIGFycml2ZSBoZXJlLCBjb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICBtYXRjaGVzLCBhbmQgY3R4LT5wdHIgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgIHN0cmluZy4gIGNoZWNrIGlmIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXMsCisgICAgICAgICAgICAgICBhbmQgYmFja3RyYWNrIGlmIG5vdC4gKi8KKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAoIWN0eC0+bWF0Y2hfYWxsIHx8IGN0eC0+cHRyID09IHN0YXRlLT5lbmQpKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQorICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fCAqY3R4LT5wdHIgIT0gY3R4LT51LmNocikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMSwganVtcF9yZXBlYXRfb25lXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMiwganVtcF9yZXBlYXRfb25lXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6CisgICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCisKKyAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcworICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAorICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCisKKyAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gZW5kIC0gY3R4LT5wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gMCkKKyAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gMDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGNvdW50IHVzaW5nIHBhdHRlcm4gbWluIGFzIHRoZSBtYXhpbXVtICovCisgICAgICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsxXSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KKyAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OworICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgICghY3R4LT5tYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgICAgIHdoaWxlICgoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVAorICAgICAgICAgICAgICAgICAgICAgICB8fCBjdHgtPmNvdW50IDw9IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fUkVQRUFUX09ORSxqdW1wX21pbl9yZXBlYXRfb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIDEpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUOgorICAgICAgICAgICAgLyogY3JlYXRlIHJlcGVhdCBjb250ZXh0LiAgYWxsIHRoZSBoYXJkIHdvcmsgaXMgZG9uZQorICAgICAgICAgICAgICAgYnkgdGhlIFVOVElMIG9wZXJhdG9yIChNQVhfVU5USUwsIE1JTl9VTlRJTCkgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8VU5USUw+IHRhaWwgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVCAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICAvKiBpbnN0YWxsIG5ldyByZXBlYXQgY29udGV4dCAqLworICAgICAgICAgICAgY3R4LT51LnJlcCA9IChTUkVfUkVQRUFUKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZigqY3R4LT51LnJlcCkpOworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gLTE7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuID0gY3R4LT5wYXR0ZXJuOworICAgICAgICAgICAgY3R4LT51LnJlcC0+cHJldiA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IE5VTEw7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVCwganVtcF9yZXBlYXQsIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBQeU9iamVjdF9GUkVFKGN0eC0+dS5yZXApOworCisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NQVhfVU5USUw6CisgICAgICAgICAgICAvKiBtYXhpbWl6aW5nIHJlcGVhdCAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNQVhfVU5USUw+IHRhaWwgKi8KKworICAgICAgICAgICAgLyogRklYTUU6IHdlIHByb2JhYmx5IG5lZWQgdG8gZGVhbCB3aXRoIHplcm8td2lkdGgKKyAgICAgICAgICAgICAgIG1hdGNoZXMgaW4gaGVyZS4uLiAqLworCisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFYX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCkpOworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMSwganVtcF9tYXhfdW50aWxfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gfHwKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQpICYmCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciAhPSBjdHgtPnUucmVwLT5sYXN0X3B0cikgeworICAgICAgICAgICAgICAgIC8qIHdlIG1heSBoYXZlIGVub3VnaCBtYXRjaGVzLCBidXQgaWYgd2UgY2FuCisgICAgICAgICAgICAgICAgICAgbWF0Y2ggYW5vdGhlciBpdGVtLCBkbyBzbyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLworICAgICAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzIsIGp1bXBfbWF4X3VudGlsXzIsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE1BUktfUE9QKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGNhbm5vdCBtYXRjaCBtb3JlIHJlcGVhdGVkIGl0ZW1zIGhlcmUuICBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICB0YWlsIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8zLCBqdW1wX21heF91bnRpbF8zLCBjdHgtPnBhdHRlcm4pOworICAgICAgICAgICAgUkVUVVJOX09OX1NVQ0NFU1MocmV0KTsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1VOVElMOgorICAgICAgICAgICAgLyogbWluaW1pemluZyByZXBlYXQgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUlOX1VOVElMPiB0YWlsICovCisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlcFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50LCBjdHgtPnUucmVwLT5wYXR0ZXJuKSk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8xLCBqdW1wX21pbl91bnRpbF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisKKyAgICAgICAgICAgIC8qIHNlZSBpZiB0aGUgdGFpbCBtYXRjaGVzICovCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMiwganVtcF9taW5fdW50aWxfMiwgY3R4LT5wYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdCisgICAgICAgICAgICAgICAgJiYgY3R4LT51LnJlcC0+cGF0dGVyblsyXSAhPSBTUkVfTUFYUkVQRUFUKSB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLworICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzMsanVtcF9taW5fdW50aWxfMywKKyAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGOgorICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUYgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAqY3R4LT5wdHIgIT0gKnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6CisgICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpICE9IHN0YXRlLT5sb3dlcigqcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9FWElTVFM6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9FWElTVFMgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICAvKiA8R1JPVVBSRUZfRVhJU1RTPiA8Z3JvdXA+IDxza2lwPiBjb2RleWVzIDxKVU1QPiBjb2Rlbm8gLi4uICovCisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVDoKKyAgICAgICAgICAgIC8qIGFzc2VydCBzdWJwYXR0ZXJuICovCisgICAgICAgICAgICAvKiA8QVNTRVJUPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgaWYgKHN0YXRlLT5wdHIgPCBzdGF0ZS0+YmVnaW5uaW5nKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgRE9fSlVNUDAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6CisgICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKKyAgICAgICAgICAgICAgICBET19KVU1QMChKVU1QX0FTU0VSVF9OT1QsIGp1bXBfYXNzZXJ0X25vdCwgY3R4LT5wYXR0ZXJuKzIpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgorICAgICAgICAgICAgLyogaW1tZWRpYXRlIGZhaWx1cmUgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEZBSUxVUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxVTktOT1dOICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblstMV0pKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSUxMRUdBTCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgY3R4X3BvcyA9IGN0eC0+bGFzdF9jdHhfcG9zOworICAgIGp1bXAgPSBjdHgtPmp1bXA7CisgICAgREFUQV9QT1BfRElTQ0FSRChjdHgpOworICAgIGlmIChjdHhfcG9zID09IC0xKQorICAgICAgICByZXR1cm4gcmV0OworICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKworICAgIHN3aXRjaCAoanVtcCkgeworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8yOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8yOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzM6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzM7CisgICAgICAgIGNhc2UgSlVNUF9CUkFOQ0g6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0JSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX2JyYW5jaDsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8xOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVQ6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdDsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8xOworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8yOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1JFUEVBVF9PTkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fcmVwZWF0X29uZTsKKyAgICAgICAgY2FzZSBKVU1QX0FTU0VSVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0OworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUX05PVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUX05PVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydF9ub3Q7CisgICAgICAgIGNhc2UgSlVNUF9OT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVUVVJOICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgcmV0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OyAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KK30KKworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShzZWFyY2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+c3RhcnQ7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOworICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7CisgICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7CisgICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOworICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKKyAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KKyAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD4gPDU9cHJlZml4IGluZm8+ICAqLworCisgICAgICAgIGZsYWdzID0gcGF0dGVyblsyXTsKKworICAgICAgICBpZiAocGF0dGVyblszXSA+IDEpIHsKKyAgICAgICAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgKGJ1dCBtYWtlIHN1cmUgd2UgbGVhdmUgYXQgbGVhc3Qgb25lCisgICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlcmUsIHNvIGxpdGVyYWwgc2VhcmNoIHdpbGwgd29yaykgKi8KKyAgICAgICAgICAgIGVuZCAtPSBwYXR0ZXJuWzNdIC0gMTsKKyAgICAgICAgICAgIGlmIChlbmQgPD0gcHRyKQorICAgICAgICAgICAgICAgIGVuZCA9IHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgeworICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeCAqLworICAgICAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KKyAgICAgICAgICAgIHByZWZpeF9sZW4gPSBwYXR0ZXJuWzVdOworICAgICAgICAgICAgcHJlZml4X3NraXAgPSBwYXR0ZXJuWzZdOworICAgICAgICAgICAgcHJlZml4ID0gcGF0dGVybiArIDc7CisgICAgICAgICAgICBvdmVybGFwID0gcHJlZml4ICsgcHJlZml4X2xlbiAtIDE7CisgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBTUkVfSU5GT19DSEFSU0VUKQorICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCisgICAgICAgICAgICAvKiA8Y2hhcnNldD4gKi8KKyAgICAgICAgICAgIGNoYXJzZXQgPSBwYXR0ZXJuICsgNTsKKworICAgICAgICBwYXR0ZXJuICs9IDEgKyBwYXR0ZXJuWzFdOworICAgIH0KKworICAgIFRSQUNFKCgicHJlZml4ID0gJXAgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAorICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW4sIHByZWZpeF9za2lwKSk7CisgICAgVFJBQ0UoKCJjaGFyc2V0ID0gJXBcbiIsIGNoYXJzZXQpKTsKKworI2lmIGRlZmluZWQoVVNFX0ZBU1RfU0VBUkNIKQorICAgIGlmIChwcmVmaXhfbGVuID4gMSkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4LiAgdXNlIHRoZSBvdmVybGFwCisgICAgICAgICAgIHRhYmxlIHRvIHNraXAgZm9yd2FyZCBhcyBmYXN0IGFzIHdlIHBvc3NpYmx5IGNhbiAqLworICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOworCisgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgICAgIGlmIChwcmVmaXhfbGVuID4gZW5kIC0gcHRyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKQorICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkoU1JFX0NIQVIpIHByZWZpeFtpXSAhPSBwcmVmaXhbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICBTUkVfQ0hBUiBjID0gKFNSRV9DSEFSKSBwcmVmaXhbMF07CisgICAgICAgICAgICB3aGlsZSAoKnB0cisrICE9IGMpIHsKKyAgICAgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaSA9IDE7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKCpwdHIgPT0gKFNSRV9DSEFSKSBwcmVmaXhbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsraSAhPSBwcmVmaXhfbGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIFNDQU5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHIgLSAocHJlZml4X2xlbiAtIDEpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyIC0gKHByZWZpeF9sZW4gLSBwcmVmaXhfc2tpcCAtIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlIGdvdCBhbGwgb2YgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiArIDIqcHJlZml4X3NraXApOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBidXQgbm8gY2lnYXIgLS0gdHJ5IGFnYWluICovCisgICAgICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaSA9IG92ZXJsYXBbaV07CisgICAgICAgICAgICB9IHdoaWxlIChpICE9IDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0xJVEVSQUwpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGxpdGVyYWwgY2hhcmFjdGVyLiAgdGhpcyBpcyB1c2VkCisgICAgICAgICAgIGZvciBzaG9ydCBwcmVmaXhlcywgYW5kIGlmIGZhc3Qgc2VhcmNoIGlzIGRpc2FibGVkICovCisgICAgICAgIFNSRV9DSEFSIGMgPSAoU1JFX0NIQVIpIHBhdHRlcm5bMV07CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IHBhdHRlcm5bMV0pCisgICAgICAgICAgICByZXR1cm4gMDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworI2VuZGlmCisgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlICgqcHRyICE9IGMpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBMSVRFUkFMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSArK3B0cjsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlIGdvdCBhbGwgb2YgaXQgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4gKyAyKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoY2hhcnNldCkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFKGNoYXJzZXQpKGNoYXJzZXQsICpwdHIpKQorICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggQ0hBUlNFVFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybik7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgd2hpbGUgKHB0ciA8PSBlbmQpIHsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyID0gcHRyKys7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI3VuZGVmIFNSRV9DSEFSCisjdW5kZWYgU0laRU9GX1NSRV9DSEFSCisjdW5kZWYgU1JFCisKKy8qIHZpbTp0cz00OnN3PTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMgYi9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKaW5kZXggMzdkZjgyZC4uY2RiNGZmYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwpAQCAtMTEsMTIgKzExLDEyIEBACiAgICAgUHlPYmplY3QgKnQ7CiAKICAgICBjaGFyICpzdHI7Ci0gICAgY2hhciAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogICAgIGNoYXIgKnN0YXJ0c3RyOwogICAgIGludCBzdGFydDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3NzOnN5bXRhYmxlIiwgJnN0ciwgJmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzdHIpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08mczpzeW10YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSwgJnN0YXJ0c3RyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHN0cmNtcChzdGFydHN0ciwgImV4ZWMiKSA9PSAwKQogICAgICAgICBzdGFydCA9IFB5X2ZpbGVfaW5wdXQ7CkBAIC0yNyw5ICsyNywxMSBAQAogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgInN5bXRhYmxlKCkgYXJnIDMgbXVzdCBiZSAnZXhlYycgb3IgJ2V2YWwnIG9yICdzaW5nbGUnIik7CisgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgIGlmIChzdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB0ID0gKFB5T2JqZWN0ICopc3QtPnN0X3RvcDsKQEAgLTY5LDMwICs3MSwzMCBAQAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnN5bXRhYmxlbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVVNFIiwgVVNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0dMT0JBTCIsIERFRl9HTE9CQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTE9DQUwiLCBERUZfTE9DQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfUEFSQU0iLCBERUZfUEFSQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRSIsIERFRl9GUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUVfQ0xBU1MiLCBERUZfRlJFRV9DTEFTUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9JTVBPUlQiLCBERUZfSU1QT1JUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0JPVU5EIiwgREVGX0JPVU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9HTE9CQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9MT0NBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX1BBUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0ZSRUVfQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9JTVBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9CT1VORCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9GVU5DVElPTiIsIEZ1bmN0aW9uQmxvY2spOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0NMQVNTIiwgQ2xhc3NCbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfTU9EVUxFIiwgTW9kdWxlQmxvY2spOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QVF9JTVBPUlRfU1RBUiIsIE9QVF9JTVBPUlRfU1RBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QVF9UT1BMRVZFTCIsIE9QVF9UT1BMRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT1BUX0lNUE9SVF9TVEFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfVE9QTEVWRUwpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPQ0FMIiwgTE9DQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJHTE9CQUxfRVhQTElDSVQiLCBHTE9CQUxfRVhQTElDSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJHTE9CQUxfSU1QTElDSVQiLCBHTE9CQUxfSU1QTElDSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGUkVFIiwgRlJFRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFTEwiLCBDRUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgR0xPQkFMX0VYUExJQ0lUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfSU1QTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZSRUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENFTEwpOwogCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDT1BFX09GRiIsIFNDT1BFX09GRlNFVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDT1BFX01BU0siLCBTQ09QRV9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ09QRV9NQVNLKTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCmluZGV4IDhiODc3Y2YuLjlkNzllZWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwpAQCAtMjc4LDQ0ICsyNzgsNDQgQEAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogCiAgICAgLyogUHJpb3JpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfRU1FUkciLCAgICAgICBMT0dfRU1FUkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQUxFUlQiLCAgICAgICBMT0dfQUxFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ1JJVCIsICAgICAgICBMT0dfQ1JJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FUlIiLCAgICAgICAgIExPR19FUlIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfV0FSTklORyIsIExPR19XQVJOSU5HKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PVElDRSIsICBMT0dfTk9USUNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0lORk8iLCAgICAgICAgTE9HX0lORk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREVCVUciLCAgICAgICBMT0dfREVCVUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19FTUVSRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FMRVJUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ1JJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1dBUk5JTkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OT1RJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19JTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfREVCVUcpOwogCiAgICAgLyogb3BlbmxvZygpIG9wdGlvbiBmbGFncyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfUElEIiwgICAgICAgICBMT0dfUElEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NPTlMiLCAgICAgICAgTE9HX0NPTlMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkRFTEFZIiwgIExPR19OREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19QSUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DT05TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkRFTEFZKTsKICNpZmRlZiBMT0dfT0RFTEFZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19PREVMQVkiLCAgTE9HX09ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX09ERUxBWSk7CiAjZW5kaWYKICNpZmRlZiBMT0dfTk9XQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OT1dBSVQiLCAgTE9HX05PV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PV0FJVCk7CiAjZW5kaWYKICNpZmRlZiBMT0dfUEVSUk9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QRVJST1IiLCAgTE9HX1BFUlJPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BFUlJPUik7CiAjZW5kaWYKIAogICAgIC8qIEZhY2lsaXRpZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0tFUk4iLCAgICAgICAgTE9HX0tFUk4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfVVNFUiIsICAgICAgICBMT0dfVVNFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19NQUlMIiwgICAgICAgIExPR19NQUlMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0RBRU1PTiIsICBMT0dfREFFTU9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEgiLCAgICAgICAgTE9HX0FVVEgpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTFBSIiwgICAgICAgICBMT0dfTFBSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMCIsICBMT0dfTE9DQUwwKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMSIsICBMT0dfTE9DQUwxKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMiIsICBMT0dfTE9DQUwyKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMyIsICBMT0dfTE9DQUwzKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNCIsICBMT0dfTE9DQUw0KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNSIsICBMT0dfTE9DQUw1KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNiIsICBMT0dfTE9DQUw2KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNyIsICBMT0dfTE9DQUw3KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfS0VSTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1VTRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19NQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfREFFTU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xQUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNyk7CiAKICNpZm5kZWYgTE9HX1NZU0xPRwogI2RlZmluZSBMT0dfU1lTTE9HICAgICAgICAgICAgICBMT0dfREFFTU9OCkBAIC0zMzAsMTMgKzMzMCwxMyBAQAogI2RlZmluZSBMT0dfQ1JPTiAgICAgICAgICAgICAgICBMT0dfREFFTU9OCiAjZW5kaWYKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfU1lTTE9HIiwgIExPR19TWVNMT0cpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ1JPTiIsICAgICAgICBMT0dfQ1JPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VVUNQIiwgICAgICAgIExPR19VVUNQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05FV1MiLCAgICAgICAgTE9HX05FV1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19TWVNMT0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUk9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVVDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05FV1MpOwogCiAjaWZkZWYgTE9HX0FVVEhQUklWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BVVRIUFJJViIsICAgIExPR19BVVRIUFJJVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FVVEhQUklWKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCmluZGV4IDQyZWMzNjYuLmQzODc4YjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCkBAIC0zNywxNiArMzcsNiBAQAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICNlbmRpZiAvKiAhX19XQVRDT01DX18gfHwgX19RTlhfXyAqLwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSNkZWZpbmUgSU5DTF9ET1MKLSNkZWZpbmUgSU5DTF9FUlJPUlMKLSNpbmNsdWRlIDxvczIuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CiAjZW5kaWYKQEAgLTU0Myw2ICs1MzMsMjYgQEAKICAgIC8qIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgY29ycmVjdGx5IHRpbWUgem9uZXMsIHNlZSBpc3N1ZSAjMTA2NTMgKi8KICMgIHVuZGVmIEhBVkVfV0NTRlRJTUUKICNlbmRpZgorI2RlZmluZSBTVFJGVElNRV9GT1JNQVRfQ09ERVMgXAorIkNvbW1vbmx5IHVzZWQgZm9ybWF0IGNvZGVzOlxuXAorXG5cCislWSAgWWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlci5cblwKKyVtICBNb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwxMl0uXG5cCislZCAgRGF5IG9mIHRoZSBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwzMV0uXG5cCislSCAgSG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsMjNdLlxuXAorJU0gIE1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw1OV0uXG5cCislUyAgU2Vjb25kIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDYxXS5cblwKKyV6ICBUaW1lIHpvbmUgb2Zmc2V0IGZyb20gVVRDLlxuXAorJWEgIExvY2FsZSdzIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZS5cblwKKyVBICBMb2NhbGUncyBmdWxsIHdlZWtkYXkgbmFtZS5cblwKKyViICBMb2NhbGUncyBhYmJyZXZpYXRlZCBtb250aCBuYW1lLlxuXAorJUIgIExvY2FsZSdzIGZ1bGwgbW9udGggbmFtZS5cblwKKyVjICBMb2NhbGUncyBhcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uLlxuXAorJUkgIEhvdXIgKDEyLWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVwICBMb2NhbGUncyBlcXVpdmFsZW50IG9mIGVpdGhlciBBTSBvciBQTS5cblwKK1xuXAorT3RoZXIgY29kZXMgbWF5IGJlIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtLiAgU2VlIGRvY3VtZW50YXRpb24gZm9yXG5cCit0aGUgQyBsaWJyYXJ5IHN0cmZ0aW1lIGZ1bmN0aW9uLlxuIgogCiAjaWZkZWYgSEFWRV9TVFJGVElNRQogI2lmZGVmIEhBVkVfV0NTRlRJTUUKQEAgLTY0MCw2ICs2NTAsMTkgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQorI2VsaWYgKGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChzdW4pKSAmJiBkZWZpbmVkKEhBVkVfV0NTRlRJTUUpCisgICAgZm9yKG91dGJ1ZiA9IHdjc2NocihmbXQsICclJyk7CisgICAgICAgIG91dGJ1ZiAhPSBOVUxMOworICAgICAgICBvdXRidWYgPSB3Y3NjaHIob3V0YnVmKzIsICclJykpCisgICAgeworICAgICAgICAvKiBJc3N1ZSAjMTk2MzQ6IE9uIEFJWCwgd2NzZnRpbWUoInkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgIHJldHVybnMgIjAvIiBpbnN0ZWFkIG9mICI5OSIgKi8KKyAgICAgICAgaWYgKG91dGJ1ZlsxXSA9PSBMJ3knICYmIGJ1Zi50bV95ZWFyIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCAleSByZXF1aXJlcyB5ZWFyID49IDE5MDAgb24gQUlYIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgZm10bGVuID0gdGltZV9zdHJsZW4oZm10KTsKQEAgLTY5NCwxMyArNzE3LDEzIEBACiAKICN1bmRlZiB0aW1lX2NoYXIKICN1bmRlZiBmb3JtYXRfdGltZQotCiBQeURvY19TVFJWQVIoc3RyZnRpbWVfZG9jLAogInN0cmZ0aW1lKGZvcm1hdFssIHR1cGxlXSkgLT4gc3RyaW5nXG5cCiBcblwKIENvbnZlcnQgYSB0aW1lIHR1cGxlIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uLlxuXAogU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMuIFdoZW4gdGhlIHRpbWUgdHVwbGVcblwKLWlzIG5vdCBwcmVzZW50LCBjdXJyZW50IHRpbWUgYXMgcmV0dXJuZWQgYnkgbG9jYWx0aW1lKCkgaXMgdXNlZC4iKTsKK2lzIG5vdCBwcmVzZW50LCBjdXJyZW50IHRpbWUgYXMgcmV0dXJuZWQgYnkgbG9jYWx0aW1lKCkgaXMgdXNlZC5cblwKK1xuIiBTVFJGVElNRV9GT1JNQVRfQ09ERVMpOwogI2VuZGlmIC8qIEhBVkVfU1RSRlRJTUUgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTcyMyw3ICs3NDYsOSBAQAogInN0cnB0aW1lKHN0cmluZywgZm9ybWF0KSAtPiBzdHJ1Y3RfdGltZVxuXAogXG5cCiBQYXJzZSBhIHN0cmluZyB0byBhIHRpbWUgdHVwbGUgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCi1TZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2RlcyAoc2FtZSBhcyBzdHJmdGltZSgpKS4iKTsKK1NlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzXG5cCitzdHJmdGltZSgpKS5cblwKK1xuIiBTVFJGVElNRV9GT1JNQVRfQ09ERVMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogX2FzY3RpbWUoc3RydWN0IHRtICp0aW1lcHRyKQpAQCAtODAyLDcgKzgyNywxNiBAQAogICAgIHR0ID0gbWt0aW1lKCZidWYpOwogICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQgdG1fd2RheQogICAgICAqIGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCi0gICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKSAmJiBidWYudG1fd2RheSA9PSAtMSkgeworICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkKKyNpZm5kZWYgX0FJWAorICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0CisgICAgICAgICAqIHRtX3dkYXkgY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KKyAgICAgICAgJiYgYnVmLnRtX3dkYXkgPT0gLTEKKyNlbHNlCisgICAgICAgIC8qIG9uIEFJWCwgdG1fd2RheSBpcyBhbHdheXMgc2V0cywgZXZlbiBvbiBlcnJvciAqLworI2VuZGlmCisgICAgICAgKQorICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibWt0aW1lIGFyZ3VtZW50IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgzNyw2ICs4NzEsOCBAQAogICAgIC8qIFJlc2V0IHRpbWV6b25lLCBhbHR6b25lLCBkYXlsaWdodCBhbmQgdHpuYW1lICovCiAgICAgUHlJbml0X3RpbWV6b25lKG0pOwogICAgIFB5X0RFQ1JFRihtKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC0xMjczLDE5ICsxMzA5LDExIEBACiAjaWYgZGVmaW5lZChIQVZFX1RaTkFNRSkgJiYgIWRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQogICAgIFB5T2JqZWN0ICpvdHowLCAqb3R6MTsKICAgICB0enNldCgpOwotI2lmZGVmIFBZT1NfT1MyCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRpbWV6b25lIiwgX3RpbWV6b25lKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aW1lem9uZSIsIHRpbWV6b25lKTsKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2lmZGVmIEhBVkVfQUxUWk9ORQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgYWx0em9uZSk7CiAjZWxzZQotI2lmZGVmIFBZT1NfT1MyCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCBfdGltZXpvbmUtMzYwMCk7Ci0jZWxzZSAvKiAhUFlPU19PUzIgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIHRpbWV6b25lLTM2MDApOwotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiZGF5bGlnaHQiLCBkYXlsaWdodCk7CiAgICAgb3R6MCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUodHpuYW1lWzBdLCAic3Vycm9nYXRlZXNjYXBlIik7CkBAIC0xNDY4LDggKzE0OTYsOSBAQAogICAgIFB5SW5pdF90aW1lem9uZShtKTsKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0VGltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF90aW1lX3R5cGVfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0VGltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3RpbWVfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgd2ludmVyLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2Yod2ludmVyKTsKQEAgLTE1ODEsNyArMTYxMCw3IEBACiAgICAgICAgICAgICBEV09SRCByYzsKICAgICAgICAgICAgIEhBTkRMRSBoSW50ZXJydXB0RXZlbnQgPSBfUHlPU19TaWdpbnRFdmVudCgpOwogICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwotICAgICAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhJbnRlcnJ1cHRFdmVudCwgdWxfbWlsbGlzKTsKKyAgICAgICAgICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdEV4KGhJbnRlcnJ1cHRFdmVudCwgdWxfbWlsbGlzLCBGQUxTRSk7CiAgICAgICAgICAgICBpZiAocmMgPT0gV0FJVF9PQkpFQ1RfMCkgewogICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTlRSOwpAQCAtMTU5MSwxNSArMTYyMCw2IEBACiAgICAgICAgIH0KICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9Ci0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIC8qIFRoaXMgU2xlZXAgKklTKiBJbnRlcnJ1cHRhYmxlIGJ5IEV4Y2VwdGlvbnMgKi8KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaWYgKERvc1NsZWVwKHNlY3MgKiAxMDAwKSAhPSBOT19FUlJPUikgewotICAgICAgICBQeV9CTE9DS19USFJFQURTCi0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAvKiBYWFggQ2FuJ3QgaW50ZXJydXB0IHRoaXMgc2xlZXAgKi8KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKaW5kZXggZjRkMzYwOC4uZWNhMDA1NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YS5jCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwpAQCAtMTcsNiArMTcsMTIgQEAKICNpbmNsdWRlICJ1Y25oYXNoLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKy8qW2NsaW5pY10KK21vZHVsZSB1bmljb2RlZGF0YQorY2xhc3MgdW5pY29kZWRhdGEuVUNECitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogLyogY2hhcmFjdGVyIHByb3BlcnRpZXMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTA3LDI0ICsxMTMsNjEgQEAKIAogLyogLS0tIE1vZHVsZSBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVB5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9kZWNpbWFsX19kb2NfXywKLSJkZWNpbWFsKHVuaWNoclssIGRlZmF1bHRdKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHJcblwKLWFzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmXG5cCi1ub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworLypbY2xpbmljXQorCit1bmljb2RlZGF0YS5VQ0QuZGVjaW1hbAorCisgICAgdW5pY2hyOiBvYmplY3QodHlwZT0nc3RyJykKKyAgICBkZWZhdWx0OiBvYmplY3Q9TlVMTAorICAgIC8KKworQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRlY2ltYWwgdmFsdWUuCisKK1JldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNocgorYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWYKK25vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9fZG9jX18sCisiZGVjaW1hbCh1bmljaHIsIGRlZmF1bHQ9Tm9uZSlcbiIKKyJDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHJcbiIKKyJhcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuIgorIm5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX0RFQ0lNQUxfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY2ltYWwiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2RlY2ltYWwsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVkYXRhX2RlY2ltYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RlY2ltYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5VW5pY29kZU9iamVjdCAqdjsKLSAgICBQeU9iamVjdCAqZGVmb2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdW5pY2hyOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyF8TzpkZWNpbWFsIiwKKyAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdW5pY2hyLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKHNlbGYsIHVuaWNociwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bmljaHIsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGNoZWNrc3VtOiA5NTc2ZmE1NWY0ZWEwYmU4Mjk2OGFmMzlkYzlkMDI4M2U2MzRiZWViXSovCit7CisgICAgUHlVbmljb2RlT2JqZWN0ICp2ID0gKFB5VW5pY29kZU9iamVjdCAqKXVuaWNocjsKICAgICBpbnQgaGF2ZV9vbGQgPSAwOwogICAgIGxvbmcgcmM7CiAgICAgUHlfVUNTNCBjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOmRlY2ltYWwiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYyA9IGdldHVjaGFyKHYpOwogICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE0NSwxNCArMTg4LDE0IEBACiAgICAgaWYgKCFoYXZlX29sZCkKICAgICAgICAgcmMgPSBQeV9VTklDT0RFX1RPREVDSU1BTChjKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGlmIChkZWZvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgZGVjaW1hbCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBkZWZvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJjKTsKQEAgLTEyNTAsNyArMTI5Myw3IEBACiAvKiBYWFggQWRkIGRvYyBzdHJpbmdzLiAqLwogCiBzdGF0aWMgUHlNZXRob2REZWYgdW5pY29kZWRhdGFfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJkZWNpbWFsIiwgdW5pY29kZWRhdGFfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9kZWNpbWFsX19kb2NfX30sCisgICAgVU5JQ09ERURBVEFfVUNEX0RFQ0lNQUxfTUVUSE9EREVGCiAgICAgeyJkaWdpdCIsIHVuaWNvZGVkYXRhX2RpZ2l0LCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RpZ2l0X19kb2NfX30sCiAgICAgeyJudW1lcmljIiwgdW5pY29kZWRhdGFfbnVtZXJpYywgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9udW1lcmljX19kb2NfX30sCiAgICAgeyJjYXRlZ29yeSIsIHVuaWNvZGVkYXRhX2NhdGVnb3J5LCBNRVRIX1ZBUkFSR1MsCkBAIC0xMzI3LDcgKzEzNzAsNiBAQAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgdGhlXG5cCiBVbmljb2RlRGF0YSBGaWxlIEZvcm1hdCAiIFVOSURBVEFfVkVSU0lPTiAiLiIpOwogCi0KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgdW5pY29kZWRhdGFtb2R1bGUgPSB7CiAgICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAgICAgInVuaWNvZGVkYXRhIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaCBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAppbmRleCA1ZDVkY2E4Li5lYzExZmExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCkBAIC0xLDYgKzEsNiBAQAogLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMy4yICovCiAKLSNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI2LjEuMCIKKyNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI2LjMuMCIKIC8qIGEgbGlzdCBvZiB1bmlxdWUgZGF0YWJhc2UgcmVjb3JkcyAqLwogY29uc3QgX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZCBfUHlVbmljb2RlX0RhdGFiYXNlX1JlY29yZHNbXSA9IHsKICAgICB7MCwgMCwgMCwgMCwgMCwgMH0sCkBAIC0xMjAsNiArMTIwLDcgQEAKICAgICB7NCwgMzAsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMzEsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMzIsIDE0LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDUsIDAsIDUsIDB9LAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMH0sCiAgICAgezE4LCAwLCA1LCAwLCA1LCAwfSwKQEAgLTEzNiw3ICsxMzcsNiBAQAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMTM2fSwKICAgICB7NywgMCwgOSwgMCwgNSwgMH0sCiAgICAgezMwLCAwLCA1LCAwLCA1LCAwfSwKLSAgICB7MTQsIDAsIDUsIDAsIDUsIDB9LAogICAgIHs0LCAzNiwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAwLCAxNCwgMCwgNSwgMH0sCiAgICAgezcsIDAsIDQsIDAsIDUsIDB9LApAQCAtMTc3LDYgKzE3Nyw3IEBACiAgICAgezE5LCAwLCAxLCAwLCA1LCA4MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMH0sCiAgICAgezgsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAogICAgIHs1LCA5LCAxLCAwLCA1LCAwfSwKICAgICB7NCwgMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAyMzQsIDE0LCAwLCA1LCAwfSwKQEAgLTE5MCw3ICsxOTEsNiBAQAogICAgIHsyOSwgMCwgMTksIDAsIDUsIDE3MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxMzZ9LAotICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAogICAgIHsxNCwgMCwgMSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCA0LCAwLCA1LCAwfSwKICAgICB7MjEsIDAsIDE5LCAwLCA0LCAwfSwKQEAgLTIxMyw2ICsyMTMsMTAgQEAKICAgICB7MjYsIDAsIDExLCAwLCA1LCAxMzZ9LAogICAgIHsyMCwgMCwgMTksIDAsIDUsIDB9LAogICAgIHsyNywgMCwgMTMsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjAsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjEsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjIsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjMsIDAsIDUsIDB9LAogICAgIHs5LCAwLCA5LCAwLCA1LCAxMzZ9LAogICAgIHsyNywgMCwgMTAsIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxOSwgMCwgNSwgMTM2fSwKQEAgLTYzOCw2ICs2NDIsMTAgQEAKICAgICAiUyIsCiAgICAgIldTIiwKICAgICAiT04iLAorICAgICJMUkkiLAorICAgICJSTEkiLAorICAgICJGU0kiLAorICAgICJQREkiLAogICAgIE5VTEwKIH07CiBjb25zdCBjaGFyICpfUHlVbmljb2RlX0Vhc3RBc2lhbldpZHRoTmFtZXNbXSA9IHsKQEAgLTEyNzMsMzUgKzEyODEsMzUgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAKICAgICAwLCAxMDcsIDEwNywgMTA3LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4LCAxMDgsIAogICAgIDEwOCwgMTA4LCAxMDgsIDAsIDc4LCA3OCwgMTA5LCAxMTAsIDExMCwgMTExLCAxMTIsIDExMywgMjYsIDI2LCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMCwgMCwgMTEzLCAxMTMsIDExNywgMTE3LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTksIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTIwLCAKLSAgICAxMjEsIDEyMiwgMTE0LCAxMTUsIDExNiwgMTIzLCAxMjQsIDEyNSwgMTI1LCAxMjYsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDg2LCA4MSwgODEsIDg2LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDExMCwgCi0gICAgMTI4LCAxMjgsIDExMywgMTE3LCAxMTcsIDEyOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTgsIDExNywgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExOCwgMTEzLCAxMTcsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMTksIDExOSwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAotICAgIDExNywgMTE3LCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDExNywgMTE3LCAKLSAgICAxMTcsIDEzMiwgMTMyLCAxMTcsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMzMsIDExNywgMTM0LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAxMTcsIDAsIDExMywgMTEzLCAxMTgsIDExOCwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTIwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDEyMSwgCisgICAgMTIyLCAxMjMsIDExNCwgMTE1LCAxMTYsIDEyNCwgMTI1LCAxMjYsIDEyNiwgMTI3LCA4NiwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICA4NiwgODEsIDgxLCA4NiwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMTAsIAorICAgIDEyOSwgMTI5LCAxMTMsIDExOCwgMTE4LCAxMzAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE5LCAxMTgsIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTksIDExMywgMTE4LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCisgICAgMTA4LCAyNiwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgMTIwLCAxMjAsIDgxLCA4MSwgMjYsIDg2LCA4MSwgODEsIDg2LCAKKyAgICAxMTgsIDExOCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMTgsIDExOCwgCisgICAgMTE4LCAxMzMsIDEzMywgMTE4LCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAorICAgIDExMywgMTEzLCAxMTMsIDExMywgMCwgMTE3LCAxMTgsIDEzNCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIAogICAgIDg2LCA4NiwgODYsIDgxLCA4NiwgODYsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIAotICAgIDgxLCA4MSwgMCwgMCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgCisgICAgODEsIDgxLCAwLCAwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKICAgICAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4MSwgCkBAIC0xMzE0LDExICsxMzIyLDExIEBACiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODYsIDg2LCA4NiwgCiAgICAgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcsIDAsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgsIDAsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgCi0gICAgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODYsIDg2LCAxMjAsIDEyMSwgMTIyLCA4MSwgODEsIDgxLCAKKyAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMSwgMTIyLCAxMjMsIDgxLCA4MSwgODEsIAogICAgIDg2LCA4MSwgODEsIDg2LCA4NiwgODEsIDgxLCA4MSwgODEsIDAsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIApAQCAtMTQ0NCw0MSArMTQ1Miw0MCBAQAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKICAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCi0gICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKLSAgICA4MSwgODEsIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgODEsIDgxLCAKKyAgICA4MSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTQ5OCwxNSArMTUwNSwxNiBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNjMsIDE2NCwgMCwgCi0gICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAKICAgICAxNDIsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE1MjEsNyArMTUyOSw3IEBACiAgICAgODMsIDUzLCA4MywgODMsIDgzLCA4NSwgNDgsIDgxLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMCwgMCwgMCwgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDEzOCwgMTM4LCAKLSAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTcyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTM4LCAxMzgsIDEzNSwgMTM1LCAxMzUsIDE3NCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTU1MCw3ICsxNTU4LDcgQEAKICAgICAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzksIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM1LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzOSwgMTM1LCAKQEAgLTE1NjYsMTcgKzE1NzQsMTcgQEAKICAgICAxNDAsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAxNDYsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNDcsIDEzNSwgMTQ3LCAxMzksIDEzOSwgMTQ3LCAxNDcsIDEzNSwgMTQ3LCAxNzQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgODYsIDgxLCAKICAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAxMzUsIAogICAgIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzQsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTc1LCAxNDIsIDEzOSwgMTM5LCA0OCwgNDgsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIAotICAgIDEzOSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxNzQsIDE3NCwgMCwgMCwgMCwgCisgICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NSwgMTc1LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIApAQCAtMTU4OCw4ICsxNTk2LDggQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAKLSAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzUsIDg2LCA4NiwgODYsIDg2LCA4NiwgCi0gICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCA0OCwgCisgICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MywgMTc2LCA4NiwgODYsIDg2LCA4NiwgODYsIAorICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDgxLCAxMzksIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDg2LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDgxLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKQEAgLTE2MDIsOSArMTYxMCw5IEBACiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCiAgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCiAgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA4MSwgODEsIDg2LCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgMTc2LCAxNzcsIDg2LCAxNzgsIDgxLCA4MSwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzcsIDE3OCwgODYsIDE3OSwgODEsIDgxLCA4MSwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OSwgODYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MCwgODYsIAogICAgIDgxLCA4NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIApAQCAtMTYxMyw3ICsxNjIxLDcgQEAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgwLCA0NywgNDcsIDQ0LCA0NywgCisgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE4MSwgNDcsIDQ3LCA0NCwgNDcsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIApAQCAtMTYyNSw2NSArMTYzMyw2NSBAQAogICAgIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIAogICAgIDQzLCA0MywgNDMsIDAsIDAsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIAogICAgIDQzLCA0MywgMCwgMzgsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCAKLSAgICA0MywgMTgxLCA0MywgMTgxLCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAKLSAgICAxODIsIDU4LCAxODEsIDU4LCA1OCwgNzYsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4MywgMzgsIDE4MywgMTgyLCAKLSAgICA3NiwgNzYsIDc2LCA0MywgNDMsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAwLCA3NiwgNzYsIAotICAgIDc2LCA0MywgNDMsIDQzLCAxODEsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDM4LCA3NiwgMTg0LCAxODQsIAotICAgIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4MywgMzgsIDE4MywgMTgyLCAxODQsIDU4LCAwLCAxODUsIDE4NSwgCi0gICAgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg3LCAxODcsIDE4NywgMTg4LCAxODksIAorICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCAKKyAgICA0MywgMTgyLCA0MywgMTgyLCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAKKyAgICAxODMsIDU4LCAxODIsIDU4LCA1OCwgNzYsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAKKyAgICA3NiwgNzYsIDc2LCA0MywgNDMsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAwLCA3NiwgNzYsIAorICAgIDc2LCA0MywgNDMsIDQzLCAxODIsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDM4LCA3NiwgMTg1LCAxODUsIAorICAgIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAxODUsIDU4LCAwLCAxODYsIDE4NiwgCisgICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTg4LCAxODksIAogICAgIDE5MCwgMTkxLCA4NCwgMTkwLCAxOTAsIDE5MCwgMjIsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTMsIDE5NCwgMTk1LCAKICAgICAxOTYsIDIyLCAyMiwgMjIsIDEzOCwgMTk3LCAxOTcsIDE5NywgMjIsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIAogICAgIDIwNCwgMjEsIDIwNSwgMTEwLCAyMDUsIDIwNiwgMjA3LCAyMiwgMTkyLCAxOTIsIDEzOCwgMjgsIDM2LCAyMiwgMTkyLCAKICAgICAxMzgsIDE5NywgMjA4LCAyMDgsIDEzOCwgMTM4LCAxMzgsIDIwOSwgMTYzLCAxNjQsIDE5MiwgMTkyLCAxOTIsIDEzOCwgCiAgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA3OCwgMTM4LCAyMDgsIDEzOCwgMTM4LCAxOTIsIDEzOCwgMTM4LCAKLSAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTg2LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMjEwLCA1MSwgMCwgMCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAKLSAgICAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTAsIDM0LCAzNCwgMzQsIDM0LCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKLSAgICA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIxNiwgMjE3LCA4NSwgODUsIAotICAgIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCAxNzUsIDE3NSwgODEsIDgxLCAKLSAgICA4MSwgODEsIDE3NSwgMTc1LCAxNzUsIDgxLCA4MSwgODIsIDgyLCA4MiwgODIsIDgxLCA4MiwgODIsIDgyLCAxNzUsIDE3NSwgCi0gICAgODEsIDg2LCA4MSwgMTc1LCAxNzUsIDg2LCA4NiwgODYsIDg2LCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjE4LCAyMTgsIDQ5LCAyMTksIDI2LCAyMTksIDIxOCwgNDksIDI2LCAyMTksIDM1LCA0OSwgNDksIAotICAgIDQ5LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ2LCAyNiwgNDksIDIxOSwgMjYsIDc4LCA0OSwgNDksIDQ5LCA0OSwgNDksIDI2LCAKLSAgICAyNiwgMjE4LCAyMTksIDIxOSwgMjYsIDQ5LCAyNiwgMjIwLCAyNiwgNDksIDI2LCAxODMsIDIyMCwgNDksIDQ5LCAyMjEsIAotICAgIDM1LCA0OSwgNDksIDQ0LCA0OSwgMzUsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMzUsIDI2LCAyMTgsIDM1LCAzNSwgNDksIDQ5LCAKLSAgICAyMjIsIDc4LCA3OCwgNzgsIDc4LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDI2LCA3OCwgMjYsIDI2LCA0NywgODAsIDIyMywgCi0gICAgMjIzLCAyMjMsIDM3LCAzNywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMzcsIDM3LCAzNywgMzcsIDIyMywgMjI0LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjUsIAotICAgIDIyNSwgMjI1LCAyMjUsIDE3MywgMTczLCAxNzMsIDQ0LCA0NywgMTczLCAxNzMsIDE3MywgMTczLCAzNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDIyNiwgMjI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjYsIDI2LCAyNiwgMjYsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODcsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAwLCAyMTAsIDIxMSwgMjEyLCAKKyAgICAyMTMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDIxNCwgNTEsIDAsIDAsIDM0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIAorICAgIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjE0LCAzNCwgMzQsIDM0LCAzNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE4LCAwLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKKyAgICA1MSwgNTEsIDUxLCA1MSwgMCwgMCwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAyMjAsIDIyMSwgODUsIAorICAgIDg1LCAyMywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NiwgMTc2LCAKKyAgICA4MSwgODEsIDgxLCA4MSwgMTc2LCAxNzYsIDE3NiwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIAorICAgIDE3NiwgMTc2LCA4MSwgODYsIDgxLCAxNzYsIDE3NiwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIsIDIyMiwgNDksIDIyMywgMjYsIDIyMywgMjIyLCA0OSwgMjYsIDIyMywgMzUsIAorICAgIDQ5LCA0OSwgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjIzLCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMjYsIDI2LCAyMjIsIDIyMywgMjIzLCAyNiwgNDksIDI2LCAyMjQsIDI2LCA0OSwgMjYsIDE4NCwgMjI0LCA0OSwgNDksIAorICAgIDIyNSwgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIyMiwgMzUsIDM1LCA0OSwgCisgICAgNDksIDIyNiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjI3LCAKKyAgICAyMjcsIDIyNywgMzcsIDM3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAyMjgsIAorICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgCisgICAgMjI5LCAyMjksIDIyOSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjMwLCAyMzAsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMCwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI3LCAyMjYsIDIyNiwgMjYsIDI2LCA0MCwgMjYsIDQwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzEsIDIzMCwgMjMwLCAyNiwgMjYsIDQwLCAyNiwgNDAsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA0MCwgMjI4LCAyMjksIDIyOSwgMjMwLCA3OCwgNzgsIDQwLCAyMjksIDIzMCwgCi0gICAgMjI4LCAyMjksIDIzMCwgMjI4LCA3OCwgNDAsIDc4LCAyMjksIDIzMSwgMjMyLCA3OCwgMjI5LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDIyOSwgMjI4LCAyMjgsIDIyOSwgNDAsIDIyOSwgMjI5LCAyMjgsIDIyOCwgNDAsIDIzMCwgNDAsIDIzMCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDIyOSwgMjMzLCAyMjIsIDIyOSwgMjIyLCAyMjIsIDIyOCwgMjI4LCAyMjgsIDQwLCA0MCwgNDAsIDQwLCA3OCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjksIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMjksIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjksIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjM0LCA0MCwgMjMwLCA3OCwgMjI5LCAyMjksIDIyOSwgMjI5LCAyMjgsIAotICAgIDIyOCwgMjI5LCAyMjksIDc4LCAyMjYsIDIzNCwgMjM0LCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMjgsIDIyOCwgCi0gICAgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMjksIDIyOSwgMjMwLCAyMzAsIAotICAgIDIyOSwgMjI5LCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNDAsIDc4LCA3OCwgMjI4LCA0MCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDQwLCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjksIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAKLSAgICAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgNzgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgMjI4LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjM1LCAyMzYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMzIsIDIzMywgMjMzLCAyMzQsIDc4LCA3OCwgNDAsIDIzMywgMjM0LCAKKyAgICAyMzIsIDIzMywgMjM0LCAyMzIsIDc4LCA0MCwgNzgsIDIzMywgMjM1LCAyMzYsIDc4LCAyMzMsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgMjMzLCAyMzIsIDIzMiwgMjMzLCA0MCwgMjMzLCAyMzMsIDIzMiwgMjMyLCA0MCwgMjM0LCA0MCwgMjM0LCA0MCwgNDAsIDQwLCAKKyAgICA0MCwgMjMzLCAyMzcsIDIyNiwgMjMzLCAyMjYsIDIyNiwgMjMyLCAyMzIsIDIzMiwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMzIsIAorICAgIDc4LCAyMzIsIDIzMywgMjMzLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMywgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMywgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzgsIDQwLCAyMzQsIDc4LCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMiwgCisgICAgMjMyLCAyMzMsIDIzMywgNzgsIDIzMCwgMjM4LCAyMzgsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMiwgMjMyLCAKKyAgICAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMywgMjMzLCAyMzQsIDIzNCwgCisgICAgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA0MCwgNzgsIDc4LCAyMzIsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNDAsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCA3OCwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCAyMzIsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzksIDI0MCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKQEAgLTE3MDMsMTQgKzE3MTEsMTQgQEAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjIzLCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAotICAgIDIzOCwgMjM4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCisgICAgMzQsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDIyNywgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKKyAgICAyNDIsIDI0MiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIApAQCAtMTc0NSwxNCArMTc1MywxNCBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgCi0gICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDE2MywgMTY0LCAxNjMsIDE2NCwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCiAgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDE2MywgMTY0LCA3OCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDE2MywgMTY0LCA3OCwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKQEAgLTE3NjksMzAgKzE3NzcsMzAgQEAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICAxNjMsIDE2NCwgOSwgMTAsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAKLSAgICAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjIsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIAorICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIyNiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAKLSAgICAyMjIsIDIxMiwgMjEyLCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMzksIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgMjI4LCA3OCwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAKKyAgICAyMjYsIDIxNiwgMjE2LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyNDMsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCkBAIC0xODM4LDEwNSArMTg0NiwxMDUgQEAKICAgICAxMzgsIDUyLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDg0LCA4NCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQxLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDMsIDI0MywgCi0gICAgMjQwLCAyNDQsIDE3MCwgMjQ1LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIAotICAgIDI0MCwgMjQwLCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUwLCAKLSAgICAyNDAsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI1MSwgMjUyLCAyNTMsIDI1NCwgCi0gICAgMjU1LCAyNTUsIDI0OCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0MSwgMjQwLCAyNTYsIDI1NiwgMjU2LCAyNDQsIAotICAgIDE3MCwgMjQzLCAyNDAsIDI2LCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAKLSAgICAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDUsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMjQ2LCAyNDcsIDI0NywgMjQ3LCAKKyAgICAyNDQsIDI0OCwgMTcwLCAyNDksIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgCisgICAgMjQ0LCAyNDQsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTQsIAorICAgIDI0NCwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjU1LCAyNTYsIDI1NywgMjU4LCAKKyAgICAyNTksIDI1OSwgMjUyLCAyNDgsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ1LCAyNDQsIDI2MCwgMjYwLCAyNjAsIDI0OCwgCisgICAgMTcwLCAyNDcsIDI0NCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgCisgICAgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMTcwLCAwLCAwLCAyNTgsIDI1OCwgMjU5LCAyNTksIDI0NCwgMjYwLCAyNjEsIAotICAgIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAKLSAgICAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMCwgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAyNDgsIDI2NCwgMjY1LCAKKyAgICAyNTIsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgCisgICAgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAyNTcsIDE3MCwgMTcwLCAyNTcsIDI1NywgMjU3LCAyNTcsIDI0MywgMjQ0LCAyNDQsIDI2MCwgMjYxLCAwLCAwLCAwLCAwLCAKKyAgICAyNjEsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI0NywgMjQ4LCAyNDgsIDI2NCwgMjY1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIAotICAgIDI2MywgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDE3MCwgMTcwLCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDAsIDI2NiwgMjY2LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDAsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAotICAgIDI2MywgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI0MSwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNjIsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKLSAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjQxLCAyNDEsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAwLCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNDUsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjY2LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCisgICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCkBAIC0xOTYyLDcgKzE5NzAsNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0NCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NzEsMTEgKzE5NzksMTEgQEAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNzAsIDE3MCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDUzLCA1MywgNTMsIDUzLCAKICAgICA1MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgMTM4LCAxMzgsIApAQCAtMTk5OSw3ICsyMDA3LDcgQEAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NCwgNDcsIDQ0LCAKLSAgICA0NywgNDQsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MiwgMjY3LCAyNjcsIDQ0LCA0NywgNDQsIAorICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNzEsIDI3MSwgNDQsIDQ3LCA0NCwgCiAgICAgNDcsIDAsIDQ0LCA0NywgNDQsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMjAwOCw3ICsyMDE2LDcgQEAKICAgICA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgNDgsIDE0MiwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzOSwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDgwLCA4MCwgODUsIDIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjI1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAwLCAwLCAwLCAwLCAKQEAgLTIwMjQsMTMgKzIwMzIsMTMgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCA4NiwgCiAgICAgODYsIDg2LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgMTcwLCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIAogICAgIDAsIDAsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIAotICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NCwgODMsIDgzLCAKKyAgICAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxNzUsIDgzLCA4MywgCiAgICAgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCA1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMjA2MCw0OTcgKzIwNjgsNDk2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDgzLCAxMzksIAogICAgIDE0MiwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDE3MCwgMTcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDE3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMjcxLCAyNzIsIDI3MSwgMjczLCAyNzMsIDI3MywgMjczLCAKLSAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjExLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgCi0gICAgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAwLCAyNzEsIDAsIDI3MSwgMjcxLCAKLSAgICAwLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjczLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc0LCAKKyAgICAwLCAwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzQsIDI3NCwgCiAgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAotICAgIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxOTUsIDI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAxNzAsIDE3MCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAxNzAsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDE3MCwgMTcwLCAxNzAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAwLCAwLCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDI3NiwgMjYsIDAsIDAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3OCwgMjc5LCAKLSAgICAyNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNzcsIDI4MCwgMjgwLCAyODEsIDI4MSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIAotICAgIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNDMsIDI0MywgMjc4LCAyNzksIDI3NywgMjc3LCAKLSAgICAyNzcsIDI3NywgMjgxLCAyODEsIDI4MSwgMjgyLCAyNzcsIDI4MiwgMCwgMjc3LCAyODIsIDI3NywgMjc3LCAyODAsIDI4MywgCi0gICAgMjg0LCAyODMsIDI4NCwgMjgzLCAyODQsIDI4NSwgMjc3LCAyNzcsIDI4NiwgMjg3LCAyODgsIDI4OCwgMjg5LCAwLCAyNzcsIAotICAgIDI5MCwgMjg1LCAyNzcsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDExNywgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAxODcsIDAsIDI5MSwgMjkxLCAyOTIsIDI5MywgMjkyLCAyOTEsIAotICAgIDI5MSwgMjk0LCAyOTUsIDI5MSwgMjk2LCAyOTcsIDI5OCwgMjk3LCAyOTcsIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAKLSAgICAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk3LCAyOTEsIDMwMCwgMzAxLCAzMDAsIDI5MSwgMjkxLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIAotICAgIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMjk0LCAyOTEsIDI5NSwgMzAzLCAKLSAgICAzMDQsIDMwMywgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAotICAgIDI5NCwgMzAxLCAyOTUsIDMwMSwgMjk0LCAyOTUsIDMwNiwgMzA3LCAzMDgsIDMwNiwgMzA2LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMxMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMTAsIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMCwgMCwgMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgCi0gICAgMCwgMCwgMCwgMjkzLCAyOTMsIDMwMSwgMzAzLCAzMTEsIDI5MywgMjkzLCAwLCAzMTIsIDMxMywgMzEzLCAzMTMsIDMxMywgCi0gICAgMzEyLCAzMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNCwgMzE0LCAzMTQsIDI2LCAzMCwgMCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDgzLCAxMzgsIDgzLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE1MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMjc1LCAyNzYsIDI3NSwgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIAorICAgIDI3NywgMjc3LCAyNzcsIDI3NywgMjE1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAKKyAgICAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAwLCAyNzUsIDAsIDI3NSwgMjc1LCAwLCAKKyAgICAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc3LCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMjc4LCAyNzgsIAorICAgIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDE5NSwgMjc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDI4MCwgMjYsIDAsIDAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAorICAgIDcxLCA3MSwgNzEsIDcxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MiwgMjgzLCAyODEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODEsIAorICAgIDI4NCwgMjg0LCAyODUsIDI4NSwgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAKKyAgICAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyNDcsIDI0NywgMjgyLCAyODMsIDI4MSwgMjgxLCAyODEsIDI4MSwgCisgICAgMjg1LCAyODUsIDI4NSwgMjg2LCAyODEsIDI4NiwgMCwgMjgxLCAyODYsIDI4MSwgMjgxLCAyODQsIDI4NywgMjg4LCAyODcsIAorICAgIDI4OCwgMjg3LCAyODgsIDI4OSwgMjgxLCAyODEsIDI5MCwgMjkxLCAyOTIsIDI5MiwgMjkzLCAwLCAyODEsIDI5NCwgMjg5LCAKKyAgICAyODEsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDExOCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxNzQsIDAsIDI5NSwgMjk1LCAyOTYsIDI5NywgMjk2LCAyOTUsIDI5NSwgMjk4LCAKKyAgICAyOTksIDI5NSwgMzAwLCAzMDEsIDMwMiwgMzAxLCAzMDEsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgCisgICAgMzAzLCAzMDMsIDMwMywgMzAxLCAyOTUsIDMwNCwgMzA1LCAzMDQsIDI5NSwgMjk1LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAKKyAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMjk4LCAyOTUsIDI5OSwgMzA3LCAzMDgsIDMwNywgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAorICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDI5OCwgMzA1LCAKKyAgICAyOTksIDMwNSwgMjk4LCAyOTksIDMxMCwgMzExLCAzMTIsIDMxMCwgMzEwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxNCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTQsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgCisgICAgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgMCwgMzEzLCAzMTMsIDMxMywgMCwgMCwgMCwgMjk3LCAKKyAgICAyOTcsIDMwNSwgMzA3LCAzMTUsIDI5NywgMjk3LCAwLCAzMTYsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE2LCAzMTYsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOCwgMzE4LCAzMTgsIDI2LCAzMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDAsIDAsIDAsIDgzLCAxMzgsIDgzLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE1MywgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NiwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NiwgMCwgMCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKLSAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA0LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAzMTYsIDMxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc1LCAKLSAgICA4NiwgMCwgMCwgMCwgMCwgMTQyLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDMxNiwgMzE2LCAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAzMTYsIDMxNiwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIAotICAgIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDAsIDEzOSwgMTM1LCAKLSAgICAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCi0gICAgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCi0gICAgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIAotICAgIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTc0LCAxNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCAKLSAgICA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMTA3LCAwLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDEwNywgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDAsIDEwNCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIAorICAgIDMyMCwgMCwgMCwgMCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTM1LCAxMzUsIDEzNSwgMCwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDEzNSwgODYsIDEzNSwgODEsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgODEsIDE3NiwgODYsIDAsIDAsIDAsIDAsIDE0MiwgCisgICAgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAKKyAgICAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgCisgICAgMTA0LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAxMzksIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNDIsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAorICAgIDgzLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCisgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxNDIsIDE0MSwgODMsIDgzLCAxODgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA4MSwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNDksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzUsIDE1MCwgMTUwLCAxMzUsIDEzNSwgCisgICAgMTM1LCAxNDIsIDE0MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgCisgICAgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCA4MywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAKKyAgICAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE3NSwgMTQ1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAogICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgCi0gICAgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE5LCAzMTksIAotICAgIDE3NSwgMTc1LCAxNzUsIDgwLCA4MCwgODAsIDMyMCwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIAotICAgIDMxOCwgMzE4LCAzMTgsIDMxOCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMywgMzIzLCAxNzYsIDE3NiwgMTc2LCA4MCwgODAsIDgwLCAKKyAgICAzMjQsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgODYsIAorICAgIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDg2LCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDgxLCAKLSAgICA4MSwgODEsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDAsIAorICAgIDQ5LCA0OSwgMCwgMCwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIAorICAgIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIAotICAgIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCAzNSwgMCwgMCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAKLSAgICAwLCAxMzAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAzNSwgMCwgMCwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgCisgICAgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMTMxLCAwLCAxMzEsIAorICAgIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDMyMywgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAyMTgsIDIxOCwgMCwgMCwgMCwgMCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDIzNywgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDMyNywgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAyMjIsIDIyMiwgMCwgMCwgMCwgMCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDI0MSwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDI2OCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKQEAgLTI1NjAsNzcgKzI1NjcsNzYgQEAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKLSAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCkBAIC0yNjQzLDE3ICsyNjQ5LDE3IEBACiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDAsIAotICAgIDAsIAorICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDAsIDAsIAogfTsKIAogLyogZGVjb21wb3NpdGlvbiBkYXRhICovCkBAIC01MTc4LDcgKzUxODQsNiBAQAogCXsgMjU1LCA3LCA4LCAyNTUsIDAgfSwKIAl7IDI1NSwgNywgOSwgMjU1LCAwIH0sCiAJeyAxLCA1LCAyNTUsIDI1NSwgMCB9LAotCXsgMTUsIDE0LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAxMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDE4LCAyNTUsIDI1NSwgMjU1LCAwIH0sCiAJeyAxOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTE5MSw2ICs1MTk2LDcgQEAKIAl7IDI1NSwgMjU1LCA5LCAyNTUsIDAgfSwKIAl7IDE5LCAzMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgOCwgMjU1LCAyNTUsIDAgfSwKKwl7IDI1NSwgMjcsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIyLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMywgMjU1LCAyNTUsIDAgfSwKIAl7IDksIDI1NSwgMjU1LCAyNTUsIDAgfSwKQEAgLTUyMDUsOCArNTIxMSw4IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBjaGFuZ2VzXzNfMl8wX2luZGV4W10gPSB7CiAgICAgMCwgMSwgMiwgMiwgMywgNCwgNSwgNiwgMiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgCiAgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMiwgMiwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAKLSAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCAKLSAgICA1MSwgMiwgNTIsIDIsIDIsIDUzLCA1NCwgNTUsIDU2LCA1NywgMiwgMiwgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCisgICAgMzYsIDIsIDIsIDIsIDM3LCAzOCwgMiwgMzksIDIsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCAKKyAgICA1MCwgMiwgNTEsIDIsIDIsIDUyLCA1MywgNTQsIDU1LCA1NiwgMiwgNTcsIDU4LCA1OSwgNjAsIDIsIDIsIDYxLCA2MiwgNjMsIAogICAgIDY0LCA2NSwgNjUsIDIsIDIsIDIsIDIsIDY2LCAyLCA2NywgNjgsIDY5LCA3MCwgNzEsIDIsIDIsIDIsIDcyLCA3MywgNzQsIAogICAgIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCAyLCAyLCAyLCAyLCAyLCAyLCA4MiwgMiwgMiwgMiwgMiwgMiwgODMsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTIxNyw4ICs1MjIzLDggQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDUwLCA1MCwgCi0gICAgOTcsIDk4LCA1MCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NCwgOTUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk2LCA0OSwgNDksIAorICAgIDk3LCA5OCwgNDksIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjI5LDEzICs1MjM1LDEzIEBACiAgICAgMTE5LCAxMjAsIDEyMSwgMTIyLCAyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMiwgMiwgMiwgMiwgMiwgMiwgMTI4LCAyLCAKICAgICAxMjksIDEzMCwgMTMxLCAyLCAxMzIsIDIsIDEzMywgMiwgMiwgMiwgMTM0LCAyLCAyLCAyLCAxMzUsIDEzNiwgMTM3LCAxMzgsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEzOSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTQwLCAyLCAxNDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgMTQyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCAxNDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCAxNDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDE0NCwgMTQ1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyNjIsOSArNTI2OCw5IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzgsIDUwLCAxNzksIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTc4LCA0OSwgMTc5LCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU1MDUsNyArNTUxMSw3IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDE4MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDE4MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01NjI3LDcgKzU2MzMsNyBAQAogICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAogICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNTc4Nyw3MDkgKzU3OTMsMjY3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCA0LCAwLCAwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAKKyAgICA0LCAzNSwgOCwgNiwgNywgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDUsIDQ2LCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA0LCAwLCAwLCAzNywgMzgsIDM5LCA0MCwgCi0gICAgNDEsIDQyLCAxLCAxLCAwLCAwLCAwLCA0LCAzNiwgOCwgNiwgNywgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgMSwgMSwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIAotICAgIDQ2LCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgCiAgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAxOSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0LCAxNCwgMTQsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgCi0gICAgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCA5LCAwLCAKLSAgICA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NDk3LDE1ICs2MDYxLDIwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNjUxNSwzMyArNjA4NCw0NzAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0LCAxNCwgMTQsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCAKKyAgICA5LCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogc3RhdGljIGNvbnN0IGNoYW5nZV9yZWNvcmQqIGdldF9jaGFuZ2VfM18yXzAoUHlfVUNTNCBuKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCmluZGV4IDM4Mzg4ODIuLjdjY2IxMjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKQEAgLTYsNyArNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZXhpY29uW10gPSB7CiAgICAgNzYsIDY5LCA4NCwgODQsIDY5LCAyMTAsIDg3LCA3MywgODQsIDIwMCwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzYsIAogICAgIDE5NywgODMsIDc3LCA2NSwgNzYsIDIwNCwgODMsIDczLCA3MSwgMjA2LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCAyMDQsIAotICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY3LCA3NCwgMjAzLCA2NSwgODIsIDY1LCA2NiwgNzMsIDE5NSwgNzcsIAorICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA2NywgNzQsIDIwMywgNzcsIAogICAgIDY1LCA4NCwgNzIsIDY5LCA3NywgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgODksIDgwLCA4NCwgNzMsIDY1LCAKICAgICAyMDYsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDIwMCwgNjcsIDc5LCA3NywgODAsIDY1LCA4NCwgNzMsIAogICAgIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA2NywgODUsIDc4LCA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgODMsIDg5LCA3NywgCkBAIC0yNywyNCArMjcsMjQgQEAKICAgICA3NSwgNjUsIDc4LCAxOTMsIDE5NCwgNzcsIDc5LCA2OCwgNzMsIDcwLCA3MywgNjksIDIxMCwgNjgsIDc5LCAyMTIsIDc1LCAKICAgICA2NSwgNzgsIDcxLCA4OCwgMjAxLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODQsIDczLCA2NiwgNjksIAogICAgIDg0LCA2NSwgMjA2LCA3OSwgMTk4LCA3MywgNzgsIDczLCA4NCwgNzMsIDY1LCAyMDQsIDc3LCA2OSwgNjksIDIwNSwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA3NSwgNzIsIDc3LCA2OSwgCi0gICAgMjEwLCA4NSwgMTI4LCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIAotICAgIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA3OSwgMTI4LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA3NywgNjUsIDgyLCA3NSwgCi0gICAgMTI4LCA4OSwgNjksIDIwMCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCA3MiwgCi0gICAgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIDY1LCAKLSAgICA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIDE5NiwgCi0gICAgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCAKLSAgICA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCA4MiwgNjksIAotICAgIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgNzEsIAotICAgIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKKyAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgODUsIDEyOCwgNzUsIAorICAgIDcyLCA3NywgNjksIDIxMCwgODcsIDcyLCA3MywgODQsIDE5NywgNjUsIDY2LCA3OSwgODYsIDE5NywgNjcsIDY1LCA4MiwgCisgICAgODIsIDczLCA2OSwgMjEwLCA3MywgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgODksIDY5LCAyMDAsIDc5LCAxMjgsIAorICAgIDc3LCA2NSwgODIsIDc1LCAxMjgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA4MCwgCisgICAgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTcsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCA2OCwgNjksIDg2LCAKKyAgICA2NSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDg0LCA3MywgNzYsIDE5NywgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDg0LCA3MiwgNjUsIDIwNSwgNzQsIDc5LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIAorICAgIDc5LCA3NSwgNjksIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgCisgICAgODIsIDY5LCAyMTUsIDc3LCA3MywgNjUsIDIwNywgODAsIDc2LCA4NSwgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCAKKyAgICA2NSwgODIsIDY4LCAyMTEsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIAorICAgIDcxLCAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCiAgICAgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgMTk3LCA3MiwgNzksIDc5LCA3NSwgMTI4LCAyMTMsIDg0LCA4NywgCiAgICAgNzksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk2LCAKLSAgICA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDczLCAxOTUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCAxMjgsIDY1LCA3NiwgNjksIDE5OCwgODQsIDg3LCAyMDcsIAotICAgIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgMjEyLCA3OSwgODYsIDY5LCAKLSAgICAyMTAsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODUsIDIwOCwgNzYsIDc5LCAKKyAgICA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDY1LCA3NiwgNjksIDE5OCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgODQsIDg3LCAyMDcsIAorICAgIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDc5LCA4NiwgNjksIDIxMCwgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAKKyAgICAyMTIsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODUsIDIwOCwgNzYsIDc5LCAKICAgICAyMTUsIDcyLCA2NSwgMjAwLCA3OSwgNzgsIDE5NywgNjgsIDc5LCA4NywgMjA2LCA3MiwgNzMsIDcxLCAyMDAsIDcwLCA4NSwgCiAgICAgNzYsIDc2LCA4NywgNzMsIDY4LCA4NCwgMjAwLCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgMTI4LCA2OSwgODEsIDg1LCAKICAgICA2NSwgMjA0LCA4NCwgNjUsIDE5OSwgNjYsIDY1LCA4MiwgMTI4LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgNzgsIDg1LCAKQEAgLTY1LDQ5ICs2NSw0OSBAQAogICAgIDc2LCA4NSwgMTk3LCA4MywgNzIsIDY1LCA4MiwgNjUsIDY4LCAxOTMsIDgzLCA3MywgNzgsIDcyLCA2NSwgNzYsIDE5MywgCiAgICAgNzUsIDY1LCAxMjgsIDgyLCA4NSwgNzgsIDczLCAxOTUsIDgzLCA2NSwgODUsIDgyLCA2NSwgODMsIDcyLCA4NCwgODIsIAogICAgIDE5MywgODQsIDY5LCA4NCwgODIsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDY4LCA2OSwgODMsIDY5LCA4MiwgNjksIDIxMiwgCi0gICAgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCAKLSAgICA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDcwLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2NSwgMTI4LCA4OSwgNjUsIAotICAgIDEyOCwgNzYsIDczLCA3MSwgNzIsIDIxMiwgODMsIDczLCA4OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIAotICAgIDY5LCA4MCwgNjcsIDcyLCAxOTMsIDc4LCA2NSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgNzYsIDc5LCA3OCwgCi0gICAgMTk5LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3NSwgNzMsIDE5NSwgNzIsIDY1LCA3NywgOTAsIDE5MywgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA3OSwgODAsIDY5LCAyMDYsIDgyLCA2NSwgMTI4LCAKLSAgICA4MywgNjUsIDEyOCwgODMsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDg2LCA3MywgNjksIDIxMiwgNzYsIAotICAgIDY1LCAyMDcsIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCA4OCwgCi0gICAgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA2NSwgMTI4LCA5MCwgCi0gICAgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg1LCAKLSAgICA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgODMsIDg5LCA2NSwgMTI4LCAKLSAgICA5MCwgOTAsIDgzLCA2NSwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgOTAsIAotICAgIDc5LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAxMjgsIAotICAgIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIDkwLCAKLSAgICA2OSwgODAsIDEyOCwgOTAsIDkwLCA2OSwgNjksIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgMTI4LCAKLSAgICA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgOTAsIAotICAgIDY1LCAxMjgsIDkwLCA4OSwgNzEsIDc5LCA4MywgMTI4LCA5MCwgODcsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc4LCA3NCwgCi0gICAgMTI4LCA5MCwgODcsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDkwLCA4NywgNzQsIDEyOCwgOTAsIDg3LCA2NSwgODIsIDY1LCAKLSAgICA3NSwgNjUsIDg5LCAxMjgsIDkwLCA4NywgNjUsIDEyOCwgOTAsIDg1LCA4NCwgMTI4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCAKLSAgICA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgODUsIDc5LCAxMjgsIDkwLCA4NSwgNzcsIDEyOCwgOTAsIDg1LCA2NiwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIDg1LCAxODEsIDkwLCA4MywgNzIsIDY1LCAxMjgsIDkwLCA4MiwgNjUsIAotICAgIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDkwLCA3OSwgODQsIDEyOCwgOTAsIDc5LCA3OSwgMTI4LCA5MCwgNzksIAotICAgIDY1LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDkwLCA3NiwgNjUsIDEyOCwgOTAsIDc2LCAxOTMsIDkwLCA3NCwgNjksIAotICAgIDEyOCwgOTAsIDczLCA5MCwgNTAsIDEyOCwgOTAsIDczLCA4MSwgNjUsIDY1LCAxMjgsIDkwLCA3MywgNzgsIDc5LCA4MiwgCi0gICAgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDkwLCA3MywgNzEsIDEyOCwgCi0gICAgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCAyMDEsIAotICAgIDkwLCA3MiwgODksIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCA5MCwgCi0gICAgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAxMjgsIDkwLCA3MiwgODcsIDY5LCAKLSAgICAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDg0LCAxMjgsIDkwLCAKLSAgICA3MiwgODUsIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgNzIsIAotICAgIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDEyOCwgOTAsIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgOTAsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA3OSwgNzksIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCA2OSwgMTI4LCAKLSAgICA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgNjksIAotICAgIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIDEyOCwgOTAsIDcyLCAxOTcsIDkwLCA3MiwgNjUsIAotICAgIDg4LCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDgyLCAxMjgsIDkwLCA3MiwgNjUsIDgwLCAxMjgsIAotICAgIDkwLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCA2NSwgMTI4LCA5MCwgNzIsIDY1LCAxMjgsIDkwLCA3MiwgCi0gICAgMTI4LCA5MCwgNjksIDg0LCA2NSwgMTI4LCA5MCwgNjksIDgyLCA3OSwgMTI4LCA5MCwgNjksIDgyLCAyMDcsIDkwLCA2OSwgCi0gICAgNzgsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA5MCwgNjksIDc3LCA3NiwgNzQsIDY1LCAxMjgsIDkwLCAKLSAgICA2OSwgNTAsIDEyOCwgOTAsIDE5NywgOTAsIDY1LCA4OSwgNzgsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIDkwLCAKLSAgICA2NSwgODksIDczLCAyMDYsIDkwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA5MCwgNjUsIDg0LCA2NSwgCisgICAgNzIsIDY1LCA3NywgOTAsIDE5MywgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDg0LCA3MywgNzYsIDY4LCA2OSwgMTI4LCAKKyAgICA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3NywgNjUsIDEyOCwgNzcsIDY1LCA4OSwgNjksIDIwMywgNzcsIAorICAgIDY5LCA2OSwgODQsIDY5LCAyMDEsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3MywgODYsIDY5LCAKKyAgICAxMjgsIDgwLCA2NSwgMTI4LCA4OSwgNjUsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDIxMiwgODMsIDczLCA4OCwgMTI4LCA2OSwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDY5LCA4MCwgNjcsIDcyLCAxOTMsIDc4LCA2NSwgMTI4LCA4MywgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNzYsIDc5LCA3OCwgMTk5LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3NSwgNzMsIAorICAgIDE5NSwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA3OSwgODAsIDY5LCAyMDYsIDgyLCA2NSwgCisgICAgMTI4LCA4MywgNjUsIDEyOCwgODMsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDg2LCA3MywgNjksIDIxMiwgCisgICAgNzYsIDY1LCAyMDcsIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCAKKyAgICA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA2NSwgMTI4LCAKKyAgICA5MCwgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIAorICAgIDg1LCA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgODMsIDg5LCA2NSwgCisgICAgMTI4LCA5MCwgOTAsIDgzLCA2NSwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgCisgICAgOTAsIDc5LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAKKyAgICAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIAorICAgIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIAorICAgIDkwLCA2OSwgODAsIDEyOCwgOTAsIDkwLCA2OSwgNjksIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgCisgICAgMTI4LCA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgCisgICAgOTAsIDY1LCAxMjgsIDkwLCA4OSwgNzEsIDc5LCA4MywgMTI4LCA5MCwgODcsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc4LCAKKyAgICA3NCwgMTI4LCA5MCwgODcsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDkwLCA4NywgNzQsIDEyOCwgOTAsIDg3LCA2NSwgODIsIAorICAgIDY1LCA3NSwgNjUsIDg5LCAxMjgsIDkwLCA4NywgNjUsIDEyOCwgOTAsIDg1LCA4NCwgMTI4LCA5MCwgODUsIDc5LCA4OCwgCisgICAgMTI4LCA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgODUsIDc5LCAxMjgsIDkwLCA4NSwgNzcsIDEyOCwgOTAsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIDg1LCAxODEsIDkwLCA4MywgNzIsIDY1LCAxMjgsIDkwLCA4MiwgCisgICAgNjUsIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDkwLCA3OSwgODQsIDEyOCwgOTAsIDc5LCA3OSwgMTI4LCA5MCwgCisgICAgNzksIDY1LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDkwLCA3NiwgNjUsIDEyOCwgOTAsIDc2LCAxOTMsIDkwLCA3NCwgCisgICAgNjksIDEyOCwgOTAsIDczLCA5MCwgNTAsIDEyOCwgOTAsIDczLCA4MSwgNjUsIDY1LCAxMjgsIDkwLCA3MywgNzgsIDc5LCAKKyAgICA4MiwgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDkwLCA3MywgNzEsIAorICAgIDEyOCwgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCAKKyAgICAyMDEsIDkwLCA3MiwgODksIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA5MCwgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAxMjgsIDkwLCA3MiwgODcsIAorICAgIDY5LCAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDg0LCAxMjgsIAorICAgIDkwLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgCisgICAgNzIsIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDEyOCwgOTAsIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgOTAsIDcyLCA3OSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA3OSwgNzksIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCA2OSwgCisgICAgMTI4LCA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgCisgICAgNjksIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIDEyOCwgOTAsIDcyLCAxOTcsIDkwLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDgyLCAxMjgsIDkwLCA3MiwgNjUsIDgwLCAKKyAgICAxMjgsIDkwLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCA2NSwgMTI4LCA5MCwgNzIsIDY1LCAxMjgsIDkwLCAKKyAgICA3MiwgMTI4LCA5MCwgNjksIDg0LCA2NSwgMTI4LCA5MCwgNjksIDgyLCA3OSwgMTI4LCA5MCwgNjksIDgyLCAyMDcsIDkwLCAKKyAgICA2OSwgNzgsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA5MCwgNjksIDc3LCA3NiwgNzQsIDY1LCAxMjgsIAorICAgIDkwLCA2OSwgNTAsIDEyOCwgOTAsIDE5NywgOTAsIDY1LCA4OSwgNzgsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIAorICAgIDkwLCA2NSwgODksIDczLCAyMDYsIDkwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA5MCwgNjUsIDg0LCA2NSwgCiAgICAgMTI4LCA5MCwgNjUsIDgyLCA4MSwgNjUsIDEyOCwgOTAsIDY1LCA4MSwgNjksIDE5OCwgOTAsIDY1LCA3NywgODgsIDEyOCwgCiAgICAgOTAsIDY1LCAyMDQsIDkwLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA2NSwgNzMsIDIwNiwgOTAsIDY1LCA3MywgMTI4LCA5MCwgCiAgICAgNjUsIDcyLCAxMjgsIDkwLCA2NSwgMjAwLCA5MCwgNjUsIDcxLCAxMjgsIDkwLCA2NSwgNjksIDcwLCAxMjgsIDkwLCA0OCwgCkBAIC01MjUsNzkgKzUyNSw3OSBAQAogICAgIDg0LCA4NSwgODQsIDg0LCA4OSwgMTI4LCA4NCwgODUsIDg0LCA2OSwgODksIDY1LCA4MywgNjUsIDg0LCAxMjgsIDg0LCA4NSwgCiAgICAgODQsIDEyOCwgODQsIDg1LCA4MiwgODgsIDEyOCwgODQsIDg1LCA4MiwgODUsIDEyOCwgODQsIDg1LCA4MiwgODQsIDc2LCAKICAgICA2OSwgMTI4LCA4NCwgODUsIDgyLCA3OSwgNTAsIDEyOCwgODQsIDg1LCA4MiwgNzgsIDgzLCA4NCwgNzMsIDc2LCA2OSwgCi0gICAgMTI4LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODQsIDg1LCA4MiwgMjA2LCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgODUsIDc5LCA4OCwgMTI4LCA4NCwgODUsIDc5LCAKLSAgICA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAxMjgsIDg0LCA4NSwgNzgsIDc4LCA4OSwgMTI4LCAKLSAgICA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIDc3LCA2NSwgNjksIDEyOCwgODQsIDg1LCA3NywgCi0gICAgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCAKLSAgICA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIAotICAgIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIDY1LCA2OSwgODAsIDEyOCwgODQsIDg1LCA2NSwgCi0gICAgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgODUsIDEyOCwgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgCi0gICAgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAKLSAgICAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCAKLSAgICA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIAotICAgIDgzLCA2NSwgMTI4LCA4NCwgODQsIDc5LCA3OSwgMTI4LCA4NCwgODQsIDczLCA3MywgMTI4LCA4NCwgODQsIDczLCAxMjgsIAotICAgIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCAKLSAgICA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIAotICAgIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgCi0gICAgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCAKLSAgICA4NCwgNjUsIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDczLCAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIAotICAgIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIAotICAgIDgzLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2NSwgMTI4LCA4NCwgODMsIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgCi0gICAgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCAKLSAgICA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIAotICAgIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgCi0gICAgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCAKLSAgICA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIAotICAgIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgCi0gICAgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCAKLSAgICA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgNzksIDgwLCA3MiwgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIAotICAgIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKLSAgICA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgCi0gICAgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgCi0gICAgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NiwgNzYsIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCAKLSAgICA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgCi0gICAgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIDEyOCwgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCAKLSAgICA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA4MywgNzMsIDc3LCA3OSwgCi0gICAgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgODAsIDc5LCA2OCwgMTI4LCAKLSAgICA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCA4NCwgODIsIDczLCA3OSwgCi0gICAgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAKLSAgICAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgCi0gICAgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIDczLCAKLSAgICA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgCi0gICAgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCAKLSAgICA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCAKLSAgICA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIDc4LCA2OCwgCi0gICAgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAxMjgsIDg0LCAKLSAgICA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgCi0gICAgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIAotICAgIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIDc5LCAKLSAgICA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDIxMiwgODQsIDgyLCA2NSwgNzgsIAotICAgIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCAKLSAgICA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgODQsIAotICAgIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCA2NSwgCi0gICAgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIDcwLCAKLSAgICA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgODIsIAotICAgIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAxMjgsIAotICAgIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIDEyOCwgCi0gICAgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDg0LCAKLSAgICA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIDgxLCAxMjgsIAotICAgIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgCi0gICAgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIAotICAgIDcxLCA4NSwgMTk3LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU2LCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTUsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUzLCAKLSAgICAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NywgODAsIDczLCAxMjgsIDg0LCA3OSwgNzcsIDY1LCA4NCwgNzksIAotICAgIDEyOCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc1LCA4OSwgMjA3LCA4NCwgNzksIDczLCA3NiwgCi0gICAgNjksIDg0LCAxMjgsIDg0LCA3OSwgNzEsIDY5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA4NCwgNzksIDY4LCAyMDcsIDg0LCAKLSAgICA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgNzMsIDY1LCA4NCwgMTI4LCA4NCwgNzksIDY1LCAxMjgsIDg0LCA3OCwgCisgICAgMTI4LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODQsIDg1LCA4MiwgMjA2LCA4NCwgODUsIDgyLCA3NSwgNzMsIDgzLCAKKyAgICAyMDAsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIAorICAgIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgCisgICAgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCAKKyAgICA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIAorICAgIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgCisgICAgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgCisgICAgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCAKKyAgICA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIAorICAgIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIAorICAgIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgCisgICAgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAKKyAgICAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCAKKyAgICA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgCisgICAgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIAorICAgIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgCisgICAgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgCisgICAgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIAorICAgIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgCisgICAgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgCisgICAgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAKKyAgICAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCAKKyAgICA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIAorICAgIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCAKKyAgICA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIAorICAgIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCAKKyAgICA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgCisgICAgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCAKKyAgICA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIAorICAgIDczLCA4NCwgNzksIDIxMSwgODQsIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCAKKyAgICA4MCwgNzksIDY4LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIAorICAgIDg0LCA4MiwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgCisgICAgNjUsIDc3LCA3NywgNzksIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIAorICAgIDc5LCA3NiwgNzMsIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgCisgICAgNjksIDc4LCAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCAKKyAgICA4NSwgNzYsIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCAKKyAgICA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIAorICAgIDEyOCwgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgCisgICAgNzgsIDY4LCAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIAorICAgIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgCisgICAgNDUsIDQ5LCAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCAKKyAgICA3MywgNzgsIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIAorICAgIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgCisgICAgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCAKKyAgICA3OCwgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgCisgICAgODMsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCAKKyAgICA4NCwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIAorICAgIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgCisgICAgNzAsIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCAKKyAgICA4MiwgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIAorICAgIDEyOCwgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgCisgICAgMTI4LCA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIAorICAgIDEyOCwgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgCisgICAgODEsIDEyOCwgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCAKKyAgICA2OSwgMTk2LCA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIAorICAgIDc5LCA3OCwgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICA0NSwgNTMsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIAorICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCisgICAgMTI4LCA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCAKKyAgICA3OSwgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIAorICAgIDc2LCA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgCisgICAgODQsIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKICAgICAxMjgsIDg0LCA3NiwgODYsIDEyOCwgODQsIDc2LCA4NSwgMTI4LCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3NiwgNzMsIDEyOCwgCiAgICAgODQsIDc2LCA3MiwgODksIDY1LCAxMjgsIDg0LCA3NiwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA4NSwgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA3OSwgNzksIDEyOCwgODQsIDc2LCA3MiwgNzksIDEyOCwgODQsIDc2LCA3MiwgNzMsIDEyOCwgODQsIApAQCAtNzk2LDQwOSArNzk2LDQxMCBAQAogICAgIDY5LCA4NCwgMTI4LCA4MywgODUsIDY1LCA2OSwgNzgsIDEyOCwgODMsIDg1LCA2NSwgNjksIDEyOCwgODMsIDg1LCA2NSwgCiAgICAgMTI4LCA4MywgMjEzLCA4MywgODQsIDg4LCAxMjgsIDgzLCA4NCwgODcsIDY1LCAxMjgsIDgzLCA4NCwgODUsIDY4LCA4OSwgCiAgICAgMTI4LCA4MywgODQsIDg1LCA2NywgNzUsIDQ1LCA3OSwgODUsIDIxMiwgODMsIDg0LCA4MywgMTI4LCA4MywgODQsIDgyLCAKLSAgICA3OSwgNzUsIDY5LCA4MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1NywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCAKLSAgICA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgCi0gICAgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCAKLSAgICA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIAotICAgIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgCi0gICAgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCAKLSAgICA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCA2OSwgODIsIDgyLCA4OSwgMTI4LCA4MywgODQsIAotICAgIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgNjUsIDIwNiwgODMsIDg0LCA4MiwgNjUsIDczLCAKLSAgICA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIDczLCA3MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgCi0gICAgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgNzksIDg2LCA2OSwgMTI4LCA4MywgODQsIDc5LCAKLSAgICA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCA3MiwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCAKLSAgICAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCAKLSAgICA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAyMDQsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIAotICAgIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIDEyOCwgODMsIDg0LCA2OSwgNzcsIDEyOCwgCi0gICAgODMsIDg0LCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIDg0LCA2OSwgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCAKLSAgICAyMDUsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgCi0gICAgODQsIDg1LCAxOTcsIDgzLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMjEyLCA4MywgODQsIDY1LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA4MywgODQsIDY1LCA4MiwgNzUsIDEyOCwgODMsIDg0LCA2NSwgCi0gICAgODIsIDEyOCwgODMsIDg0LCA2NSwgMjEwLCA4MywgODQsIDY1LCA3OCwgNjgsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCAKLSAgICA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgNzgsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4MywgCi0gICAgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCAKLSAgICA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgCi0gICAgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgCi0gICAgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCA4OSwgMTI4LCA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCAKLSAgICA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4MCwgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIAotICAgIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIDgzLCA4MywgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIAotICAgIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCA3MywgMTI4LCA4MywgODMsIDcyLCA2OSwgMTI4LCA4MywgODMsIDY5LCAKLSAgICA4OCwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDY5LCA2OSwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCAKLSAgICA4MywgODMsIDY1LCA4NSwgMTI4LCA4MywgODMsIDY1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIAotICAgIDY1LCA3OCwgNzEsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDcyLCA3MywgNjksIAotICAgIDg1LCA4NCwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIAotICAgIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjUsIDgyLCA2NSwgNjksIAotICAgIDY1LCAxMjgsIDgzLCA4MywgNjUsIDczLCAxMjgsIDgzLCA4MywgNjUsIDY1LCAxMjgsIDgzLCA4MywgNTEsIDEyOCwgODMsIAotICAgIDgzLCA1MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIDgzLCAyMDAsIDgzLCA4MSwgODUsIDczLCA4MiwgCi0gICAgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAxOTcsIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCAKLSAgICA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDY4LCAxMjgsIDgzLCA4MSwgODUsIAotICAgIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCA4MCwgCi0gICAgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA3OSwgODUsIAotICAgIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgCi0gICAgNzYsIDczLCA4NCwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc2LCA2NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODMsIDgwLCAKLSAgICA3MywgODIsIDczLCA4NCwgODUsIDIxMSwgODMsIDgwLCA3MywgODIsIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIAotICAgIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgCi0gICAgODAsIDczLCA4MiwgNjUsIDIwNCwgODMsIDgwLCA3MywgNjgsIDY5LCA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIAotICAgIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAKLSAgICAyMDcsIDgzLCA4MCwgNjksIDY5LCA2OCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgCi0gICAgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDIwMCwgODMsIDgwLCA2OSwgNjcsIDczLCA2NSwgNzYsIDEyOCwgODMsIDgwLCAKLSAgICA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIAotICAgIDIxMCwgODMsIDgwLCA2OSwgNjUsIDc1LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgODAsIDY1LCA4NCwgCi0gICAgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCAKLSAgICA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgyLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCAxMjgsIDgzLCA4MCwgNjUsIDcxLCA3MiwgNjksIDg0LCA4NCwgNzMsIDEyOCwgODMsIDgwLCA2NSwgNjgsIDY5LCA4MywgCi0gICAgMTI4LCA4MywgODAsIDY1LCA2OCwgMTk3LCA4MywgODAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDY3LCAKLSAgICAxOTcsIDgzLCA4MCwgNjUsIDEyOCwgODMsIDc5LCA4OSwgMTI4LCA4MywgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCAKLSAgICA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDY5LCA4MiwgMjA2LCA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIAotICAgIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgCi0gICAgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgODMsIDc5LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCAKLSAgICA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgODMsIDEyOCwgODMsIDc5LCA4MiwgMTkzLCA4MywgNzksIDgxLCAxMjgsIDgzLCAKLSAgICA3OSwgNzksIDIwNiwgODMsIDc5LCA3OCwgNzQsIDY1LCA3NywgMTI4LCA4MywgNzksIDc4LCA3MSwgMTI4LCA4MywgNzksIAotICAgIDc4LCAxMjgsIDgzLCA3OSwgNzcsIDgwLCA2OSwgNzgsIDE5OSwgODMsIDc5LCA3NywgMTI4LCA4MywgNzksIDc2LCA3MywgCi0gICAgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAyMTEsIDgzLCA3OSwgNzIsIDEyOCwgODMsIDc5LCAKLSAgICA3MSwgNjgsIDczLCA2NSwgMjA2LCA4MywgNzksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgCi0gICAgODQsIDczLCA3OSwgMjA2LCA4MywgNzksIDcwLCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCAKLSAgICA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIDY5LCA4NCwgODksIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIAotICAgIDgzLCA3OSwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgCi0gICAgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgNzgsIDc5LCA4NywgNzAsIDc2LCA2NSwgNzUsIDY5LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg3LCA2NiwgNzksIDY1LCA4MiwgNjgsIDY5LCA4MiwgMTI4LCA4MywgNzgsIDc5LCA4NywgCi0gICAgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgCi0gICAgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgODMsIDc4LCA2NSwgNzMsIDc2LCAxMjgsIDgzLCAKLSAgICA3OCwgMTkzLCA4MywgNzcsIDc5LCA3NSwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDgyLCA3NSwgNzMsIDc4LCAxOTksIAotICAgIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgCi0gICAgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCAKLSAgICA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIAotICAgIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIDIxMiwgODMsIDc2LCA3OSwgODAsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY4LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIAotICAgIDY5LCA2OSwgODAsIDIxNywgODMsIDc2LCA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA2NSwgODYsIDc5LCA3OCwgCi0gICAgNzMsIDE5NSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgNjUsIDgzLCA3MiwgMTI4LCA4MywgNzYsIDY1LCAKLSAgICA4MywgMjAwLCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDgzLCA3NSwgODcsIDY1LCAxMjgsIDgzLCA3NSwgODcsIAotICAgIDEyOCwgODMsIDc1LCA4NSwgNzYsIDc2LCAxMjgsIDgzLCA3NSwgODUsIDc2LCAyMDQsIDgzLCA3NSwgNzYsIDczLCA4MiwgCi0gICAgNzksIDIwNiwgODMsIDc1LCA3MywgNzgsIDEyOCwgODMsIDc1LCA3MywgNjksIDgyLCAxMjgsIDgzLCA3NSwgMjAxLCA4MywgCi0gICAgNzUsIDY5LCA4NywgNjksIDE5NiwgODMsIDc1LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDIxNywgODMsIDczLCA4OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgCi0gICAgNzIsIDIxMSwgODMsIDczLCA4OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAotICAgIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgCi0gICAgODMsIDczLCA4OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIAotICAgIDczLCA3OCwgMTk5LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgCi0gICAgNzMsIDc4LCAxOTcsIDgzLCA3MywgMjE2LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDgzLCA2NSwgMTI4LCA4MywgCi0gICAgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAotICAgIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCAKLSAgICA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgCi0gICAgNjksIDg1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCAKLSAgICA4MywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgNzUsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUxLCAKLSAgICAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNzMsIAotICAgIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNjUsIDY1LCA4NCwgMTI4LCA4MywgNzMsIDc4LCAxOTcsIDgzLCAKLSAgICA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIDIwNiwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgCi0gICAgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCAKLSAgICA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCA3MywgNzcsIDY1LCA3NiwgODUsIDc4LCA3MSwgODUsIDIwNiwgODMsIAotICAgIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgODYsIDY5LCA4MiwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCA4MywgCi0gICAgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDE5NywgODMsIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCA3MSwgNzgsIDgzLCAxMjgsIAotICAgIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIDcxLCA2OSwgMjA0LCA4MywgCi0gICAgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCA2OSwgNjksIDEyOCwgCi0gICAgODMsIDczLCA2OCwgNjksIDg3LCA2NSwgODksIDIxMSwgODMsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNjcsIDc1LCA3NiwgNjksIDEyOCwgODMsIDczLCA2NiwgMTk3LCA4MywgMjAxLCA4MywgNzIsIDg5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDg5LCA4NCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIDEyOCwgODMsIAotICAgIDcyLCA4OSwgODAsIDEyOCwgODMsIDcyLCA4OSwgNjksIDEyOCwgODMsIDcyLCA4OSwgNjUsIDEyOCwgODMsIDcyLCA4OSwgCi0gICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDczLCA3MywgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCAKLSAgICA4MywgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIAotICAgIDcyLCA4NSwgODUsIDEyOCwgODMsIDcyLCA4NSwgODQsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgCi0gICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDEyOCwgODMsIDcyLCA4NSwgNzcsIDEyOCwgODMsIDcyLCA4NSwgNzAsIAotICAgIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCA2OSwgODEsIDEyOCwgODMsIDcyLCA4NSwgNjksIDc4LCA4MywgNzIsIDg1LCA2OSwgCi0gICAgODQsIDEyOCwgODMsIDcyLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA4MywgNzIsIDg1LCAKLSAgICAxNzgsIDgzLCA3MiwgODUsIDEyOCwgODMsIDcyLCAyMTMsIDgzLCA3MiwgODQsIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCAKLSAgICA3MiwgODQsIDY1LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3OCwgNjksIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc3LCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDgyLCA3MywgNzMsIDEyOCwgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgzLCAKLSAgICA3MiwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAyMTEsIAotICAgIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIDc4LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA2NywgNjUsIDc1LCAKLSAgICA2OSwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg5LCA4MiwgMTI4LCA4MywgNzIsIAotICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg0LCA4OSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCAKLSAgICA4NCwgODcsIDczLCA3MSwgNDUsIDgzLCA3OSwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgCi0gICAgNDUsIDc5LCA4MywgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc4LCA2NSwgODUsIAotICAgIDE5NiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjYsIDc0LCA2NSwgODIsIDc1LCA2NSwgMjA2LCA4MywgNzIsIDc5LCAKLSAgICA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY1LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgMTI4LCA4MywgNzIsIAotICAgIDc5LCA4MiwgMjEyLCA4MywgNzIsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDc5LCAyMDksIDgzLCA3MiwgNzksIDgwLCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDc5LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgCi0gICAgMTI4LCA4MywgNzIsIDc5LCA3MSwgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDY5LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDE5NywgODMsIDcyLCA3OSwgNjUsIDEyOCwgODMsIDcyLCA3OSwgMTI4LCA4MywgNzIsIDczLCA4OSwgODksIDY1LCAKLSAgICA2NSwgNzYsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIAotICAgIDcyLCA3MywgODIsIDIxMiwgODMsIDcyLCA3MywgODIsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDczLCAyMTAsIDgzLCA3MiwgNzMsIDgxLCAxMjgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCAKLSAgICA4NCwgMjA3LCA4MywgNzIsIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA2OCwgMTkzLCA4MywgNzIsIAotICAgIDczLCA3OCwgMTI4LCA4MywgNzIsIDczLCAyMDYsIDgzLCA3MiwgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3NywgCi0gICAgMTkzLCA4MywgNzIsIDczLCA3NywgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgzLCA3MiwgNzMsIDczLCA3OCwgMTI4LCA4MywgCi0gICAgNzIsIDczLCA3MywgMTI4LCA4MywgNzIsIDczLCA3MCwgMjEyLCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3MiwgNjUsIDEyOCwgODMsIDcyLCA3MiwgMTkzLCAKLSAgICA4MywgNzIsIDY5LCA4OCwgMTI4LCA4MywgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDg1LCA3OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDg0LCA4NSwgMTI4LCA4MywgCi0gICAgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNjksIDg0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDIxMiwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgNjUsIDc3LCAxMjgsIDgzLCA3MiwgNjksIAotICAgIDgzLCA3MiwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDE5OSwgODMsIDcyLCA2OSwgODMsIDcyLCA1MCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCA3MiwgNjksIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3NiwgMTI4LCA4MywgNzIsIDY5LCA3NiwgMjA0LCAKLSAgICA4MywgNzIsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzMsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgNzEsIDc5LCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCAxOTcsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4OSwgMTI4LCAKLSAgICA4MywgNzIsIDY1LCA4OCwgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDg2LCA3MywgNjUsIDIwNiwgODMsIDcyLCA2NSwgODYsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDg1LCAxMjgsIDgzLCA3MiwgCi0gICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCAKLSAgICA4MiwgODAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgODMsIDcyLCA2NSwgODIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA1MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMTc4LCA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxOTcsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIAotICAgIDc3LCA4MiwgNzksIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA3NSwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAKLSAgICAxOTYsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDY4LCA2OCwgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgCi0gICAgMTI4LCA4MywgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDY3LCAxMjgsIDgzLCA3MSwgCi0gICAgNjUsIDIxNSwgODMsIDcxLCA2NSwgMTk0LCA4MywgNzEsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgMTkzLCA4MywgCi0gICAgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAyMTEsIDgzLCA2OSwgODYsIDY5LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIAotICAgIDc4LCA4NCwgMjE3LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNjksIDg2LCA2OSwgNzgsIDQ1LCAKLSAgICA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAyMDYsIDgzLCA2OSwgODUsIDg4LCAxMjgsIAotICAgIDgzLCA2OSwgODUsIDc4LCA4OSwgNjUsIDc3LCAxMjgsIDgzLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDY5LCA4NCwgCi0gICAgNzAsIDc5LCA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCAKLSAgICA4NSwgNzMsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIAotICAgIDY5LCA4MiwgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgCi0gICAgMjExLCA4MywgNjksIDgxLCA4NSwgNjksIDc4LCA2NywgMTk3LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIAotICAgIDc5LCAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgCi0gICAgODUsIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIAotICAgIDEyOCwgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAKLSAgICAyMTIsIDgzLCA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIAotICAgIDczLCA3OCwgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgCi0gICAgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCAKLSAgICA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgCi0gICAgNzYsIDE5NywgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCAKLSAgICA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCi0gICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAKLSAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKLSAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgCi0gICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCi0gICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDY5LCAxOTYsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAKLSAgICAxOTMsIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCAKLSAgICA4MywgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAorICAgIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA4MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKKyAgICAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgCisgICAgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIAorICAgIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgCisgICAgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIAorICAgIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgCisgICAgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCAKKyAgICA2OSwgODIsIDgyLCA4OSwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIAorICAgIDY1LCA4NCwgODUsIDc3LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgCisgICAgNjUsIDIwNiwgODMsIDg0LCA4MiwgNjUsIDczLCA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIAorICAgIDczLCA3MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgCisgICAgNzksIDg2LCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCAKKyAgICA3MiwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIAorICAgIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIAorICAgIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAKKyAgICAyMDQsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIAorICAgIDEyOCwgODMsIDg0LCA2OSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIDg0LCA2OSwgCisgICAgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCAyMDUsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCAKKyAgICA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIAorICAgIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDg1LCAxOTcsIDgzLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MywgODQsIAorICAgIDY1LCA4MiwgMjEyLCA4MywgODQsIDY1LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA4MywgCisgICAgODQsIDY1LCA4MiwgNzUsIDEyOCwgODMsIDg0LCA2NSwgODIsIDEyOCwgODMsIDg0LCA2NSwgMjEwLCA4MywgODQsIDY1LCAKKyAgICA3OCwgNjgsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIAorICAgIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4MywgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2NywgNjcsIAorICAgIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgCisgICAgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCA4OSwgMTI4LCAKKyAgICA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIAorICAgIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4MCwgCisgICAgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIDgzLCA4MywgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAKKyAgICA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCA3MywgMTI4LCAKKyAgICA4MywgODMsIDcyLCA2OSwgMTI4LCA4MywgODMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIAorICAgIDY5LCA2OSwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCA4MywgODMsIDY1LCA4NSwgMTI4LCA4MywgODMsIDY1LCA4NCwgCisgICAgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKKyAgICA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MCwgCisgICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIAorICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgCisgICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDgzLCAKKyAgICA2NSwgNzgsIDcxLCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgCisgICAgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgCisgICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDgzLCA4MywgNjUsIDczLCAxMjgsIDgzLCA4MywgNjUsIAorICAgIDY1LCAxMjgsIDgzLCA4MywgNTEsIDEyOCwgODMsIDgzLCA1MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIAorICAgIDgzLCAyMDAsIDgzLCA4MSwgODUsIDczLCA4MiwgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAKKyAgICAxOTcsIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIAorICAgIDY1LCA4MiwgNjksIDY4LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgCisgICAgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCA4MCwgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCAKKyAgICA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIAorICAgIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA3OSwgODUsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgCisgICAgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgNzYsIDczLCA4NCwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc2LCAKKyAgICA2NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODMsIDgwLCA3MywgODIsIDczLCA4NCwgODUsIDIxMSwgODMsIDgwLCA3MywgODIsIAorICAgIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgCisgICAgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDIwNCwgODMsIDgwLCA3MywgNjgsIDY5LCAKKyAgICA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIAorICAgIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAyMDcsIDgzLCA4MCwgNjksIDY5LCA2OCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDIwMCwgODMsIDgwLCA2OSwgNjcsIDczLCAKKyAgICA2NSwgNzYsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIAorICAgIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDIxMCwgODMsIDgwLCA2OSwgNjUsIDc1LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCAKKyAgICA3MywgMjA0LCA4MywgODAsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDczLCA3OCwgCisgICAgMTk5LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA4MCwgNjUsIDcxLCA3MiwgNjksIDg0LCA4NCwgNzMsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgNjgsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA2OCwgMTk3LCA4MywgODAsIDY1LCA2NywgCisgICAgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDgzLCA4MCwgNjUsIDEyOCwgODMsIDc5LCA4OSwgMTI4LCA4MywgCisgICAgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDY5LCA4MiwgMjA2LCAKKyAgICA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIAorICAgIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODMsIDc5LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgODMsIDEyOCwgODMsIDc5LCAKKyAgICA4MiwgMTkzLCA4MywgNzksIDgxLCAxMjgsIDgzLCA3OSwgNzksIDIwNiwgODMsIDc5LCA3OCwgNzQsIDY1LCA3NywgMTI4LCAKKyAgICA4MywgNzksIDc4LCA3MSwgMTI4LCA4MywgNzksIDc4LCAxMjgsIDgzLCA3OSwgNzcsIDgwLCA2OSwgNzgsIDE5OSwgODMsIAorICAgIDc5LCA3NywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAKKyAgICAyMTEsIDgzLCA3OSwgNzIsIDEyOCwgODMsIDc5LCA3MSwgNjgsIDczLCA2NSwgMjA2LCA4MywgNzksIDcwLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgNzksIDcwLCA4NCwgNzgsIDY5LCAKKyAgICA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIDY5LCA4NCwgODksIAorICAgIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIDgzLCA3OSwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIAorICAgIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgCisgICAgNzgsIDc5LCA4NywgNzAsIDc2LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA2NiwgNzksIDY1LCA4MiwgNjgsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzgsIDc5LCA4NywgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgCisgICAgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgCisgICAgODMsIDc4LCA2NSwgNzMsIDc2LCAxMjgsIDgzLCA3OCwgMTkzLCA4MywgNzcsIDc5LCA3NSwgNzMsIDc4LCAxOTksIDgzLCAKKyAgICA3NywgNzMsIDgyLCA3NSwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIAorICAgIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgCisgICAgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCAKKyAgICA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDIxMiwgODMsIDc2LCA3OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCAKKyAgICA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIDY5LCA2OSwgODAsIDIxNywgODMsIDc2LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgODMsIDc2LCA2NSwgODYsIDc5LCA3OCwgNzMsIDE5NSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgCisgICAgNjUsIDgzLCA3MiwgMTI4LCA4MywgNzYsIDY1LCA4MywgMjAwLCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDgzLCAKKyAgICA3NSwgODcsIDY1LCAxMjgsIDgzLCA3NSwgODcsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDc2LCAxMjgsIDgzLCA3NSwgODUsIAorICAgIDc2LCAyMDQsIDgzLCA3NSwgNzYsIDczLCA4MiwgNzksIDIwNiwgODMsIDc1LCA3MywgNzgsIDEyOCwgODMsIDc1LCA3MywgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3NSwgMjAxLCA4MywgNzUsIDY5LCA4NywgNjksIDE5NiwgODMsIDc1LCA2NSwgODQsIDY5LCAKKyAgICAxMjgsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIAorICAgIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgODQsIDIxNywgODMsIDczLCA4OCwgCisgICAgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgODMsIDczLCA4OCwgODQsIDcyLCAxMjgsIDgzLCAKKyAgICA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgCisgICAgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDczLCA4OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAorICAgIDEyOCwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCA4MiwgCisgICAgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgMjE2LCA4MywgNzMsIDg0LCAKKyAgICA2OSwgMTI4LCA4MywgNzMsIDgzLCA2NSwgMTI4LCA4MywgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgMTI4LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODMsIDgzLCAKKyAgICA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIAorICAgIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgNzUsIDczLCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OCwgNzEsIAorICAgIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCAKKyAgICA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgCisgICAgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgMTk3LCA4MywgNzMsIDc4LCAKKyAgICA3MSwgNjUsIDY1LCA4NCwgMTI4LCA4MywgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIAorICAgIDIwNiwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgCisgICAgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCAKKyAgICA3MywgNzcsIDY1LCA3NiwgODUsIDc4LCA3MSwgODUsIDIwNiwgODMsIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgODYsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCA4MywgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgCisgICAgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIAorICAgIDE5NywgODMsIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzUsIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIAorICAgIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCA3MSwgNzgsIDgzLCAxMjgsIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgCisgICAgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIDcxLCA2OSwgMjA0LCA4MywgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAKKyAgICAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCA2OSwgNjksIDEyOCwgODMsIDczLCA2OCwgNjksIDg3LCA2NSwgODksIAorICAgIDIxMSwgODMsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA3MywgNjcsIDc1LCA3NiwgNjksIDEyOCwgCisgICAgODMsIDczLCA2NiwgMTk3LCA4MywgMjAxLCA4MywgNzIsIDg5LCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4NCwgMTI4LCA4MywgCisgICAgNzIsIDg5LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIDEyOCwgODMsIDcyLCA4OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA4OSwgNjksIDEyOCwgODMsIDcyLCA4OSwgNjUsIDEyOCwgODMsIDcyLCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgODksIAorICAgIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAxMjgsIDgzLCA3MiwgODcsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgNjUsIDEyOCwgCisgICAgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIDcyLCA4NSwgODUsIDEyOCwgODMsIDcyLCAKKyAgICA4NSwgODQsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgNzksIDEyOCwgODMsIDcyLCA4NSwgNzcsIDEyOCwgODMsIDcyLCA4NSwgNzAsIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCAKKyAgICA2OSwgODEsIDEyOCwgODMsIDcyLCA4NSwgNjksIDc4LCA4MywgNzIsIDg1LCA2OSwgODQsIDEyOCwgODMsIDcyLCA4NSwgNjYsIAorICAgIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA4MywgNzIsIDg1LCAxNzgsIDgzLCA3MiwgODUsIDEyOCwgODMsIAorICAgIDcyLCAyMTMsIDgzLCA3MiwgODQsIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgzLCA3MiwgCisgICAgODIsIDczLCA3OCwgNjksIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc3LCA4MCwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzMsIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgODMsIDcyLCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgzLCA3MiwgNzksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIAorICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA2NywgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzIsIDc5LCA4MiwgCisgICAgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAorICAgIDczLCA3MSwgNDUsIDg0LCA4OSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDgzLCAKKyAgICA3OSwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc5LCA4MywgMjExLCA4MywgNzIsIAorICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc4LCA2NSwgODUsIDE5NiwgODMsIDcyLCA3OSwgODIsIDg0LCAKKyAgICA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjYsIDc0LCA2NSwgODIsIDc1LCA2NSwgMjA2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKKyAgICA3MSwgNDUsIDY1LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgMjEyLCA4MywgNzIsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDc5LCAyMDksIDgzLCA3MiwgNzksIDgwLCAxMjgsIDgzLCA3MiwgNzksIDc5LCA4NCwgCisgICAgNzMsIDc4LCAxOTksIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDc5LCAKKyAgICA3MSwgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDY5LCAxMjgsIDgzLCA3MiwgNzksIDE5NywgODMsIDcyLCAKKyAgICA3OSwgNjUsIDEyOCwgODMsIDcyLCA3OSwgMTI4LCA4MywgNzIsIDczLCA4OSwgODksIDY1LCA2NSwgNzYsIDY1LCA2NSwgCisgICAgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIDcyLCA3MywgODIsIDIxMiwgCisgICAgODMsIDcyLCA3MywgODIsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgNzIsIDczLCAyMTAsIDgzLCAKKyAgICA3MiwgNzMsIDgxLCAxMjgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA4NCwgMjA3LCA4MywgNzIsIAorICAgIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA2OCwgMTkzLCA4MywgNzIsIDczLCA3OCwgMTI4LCA4MywgCisgICAgNzIsIDczLCAyMDYsIDgzLCA3MiwgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3NywgMTkzLCA4MywgNzIsIDczLCAKKyAgICA3NywgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgzLCA3MiwgNzMsIDczLCA3OCwgMTI4LCA4MywgNzIsIDczLCA3MywgMTI4LCAKKyAgICA4MywgNzIsIDczLCA3MCwgMjEyLCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDY4LCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3MiwgNjUsIDEyOCwgODMsIDcyLCA3MiwgMTkzLCA4MywgNzIsIDY5LCA4OCwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg1LCAKKyAgICA3OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDg0LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDIxMiwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgNjUsIDc3LCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDcxLCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDE5OSwgODMsIDcyLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCA4MywgNzIsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCA3MiwgNjksIDgwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3NiwgMTI4LCA4MywgNzIsIDY5LCA3NiwgMjA0LCA4MywgNzIsIDY5LCAKKyAgICA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzMsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAxMjgsIDgzLCA3MiwgNjksIAorICAgIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgMTI4LCA4MywgCisgICAgNzIsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgNzEsIDc5LCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCAxOTcsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4OSwgMTI4LCA4MywgNzIsIAorICAgIDY1LCA4OCwgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgCisgICAgNjUsIDIwNiwgODMsIDcyLCA2NSwgODYsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCA4MiwgODAsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgODMsIDcyLCA2NSwgODIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA1MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMTc4LCA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxOTcsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDc3LCA4MiwgCisgICAgNzksIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA3NSwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIAorICAgIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgCisgICAgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgCisgICAgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDY3LCAxMjgsIDgzLCA3MSwgNjUsIDIxNSwgCisgICAgODMsIDcxLCA2NSwgMTk0LCA4MywgNzEsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgMTkzLCA4MywgNjksIDg4LCAKKyAgICA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAyMTEsIDgzLCA2OSwgODYsIDY5LCA4MiwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgCisgICAgMjE3LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIAorICAgIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAyMDYsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDgzLCA2OSwgCisgICAgODUsIDc4LCA4OSwgNjUsIDc3LCAxMjgsIDgzLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDY5LCA4NCwgNzAsIDc5LCAKKyAgICA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCA4NSwgNzMsIAorICAgIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIDY5LCA4MiwgCisgICAgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgMjExLCAKKyAgICA4MywgNjksIDgxLCA4NSwgNjksIDc4LCA2NywgMTk3LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIAorICAgIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAKKyAgICAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgODUsIAorICAgIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIDEyOCwgCisgICAgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCAKKyAgICA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgCisgICAgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgNzMsIDY3LCAKKyAgICA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCA3NywgNzMsIAorICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgCisgICAgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCA3OSwgNzMsIAorICAgIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKKyAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKKyAgICA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUyLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKKyAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTcsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTEsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDY5LCAxOTYsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAxOTMsIAorICAgIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCA4MywgCisgICAgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAogICAgIDEyOCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNjksIDY5LCA2OCwgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDY5LCA2OSwgCiAgICAgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCAKICAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIApAQCAtMTI5MiwyNzMxICsxMjkzLDI3MzMgQEAKICAgICA2NywgMjAzLCA4MiwgNzksIDY3LCAxMjgsIDgyLCA3OSwgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNzksIDY1LCA4MywgODQsIAogICAgIDY5LCAxOTYsIDgyLCA3OSwgNjUsIDgyLCAxMjgsIDgyLCA3OSwgNjUsIDEyOCwgODIsIDc4LCA4OSwgNzMsIDc4LCAxOTksIAogICAgIDgyLCA3OCwgNzksIDc5LCA3OCwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgMjA2LCA4MiwgNzgsIDY1LCAyMDUsIDgyLCA3NywgCi0gICAgODQsIDEyOCwgODIsIDc2LCA3OSwgMTI4LCA4MiwgNzYsIDc3LCAxMjgsIDgyLCA3NiwgNjksIDEyOCwgODIsIDc0LCA2OSwgCi0gICAgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDczLCA4NCwgCi0gICAgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgNzMsIDg0LCA4MywgNzMsIAotICAgIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCA3MywgODIsIDY1LCAxMjgsIAotICAgIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIDc5LCA4MiwgOTAsIDY1LCA3OCwgCi0gICAgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAxMjgsIDgyLCA3MywgNzUsIDgyLCAKLSAgICA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIAotICAgIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgCi0gICAgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCi0gICAgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIAotICAgIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIAotICAgIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAotICAgIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCAKLSAgICA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgCi0gICAgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAotICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIAotICAgIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAotICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgCi0gICAgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCAKLSAgICA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCAKLSAgICA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIAotICAgIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIAotICAgIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgCi0gICAgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIDcwLCA3NiwgNjksIDIxNiwgODIsIAotICAgIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgMTI4LCA4MiwgNjksIDgzLCA4NSwgCi0gICAgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCA3NywgMTI4LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIAotICAgIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgCi0gICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIAotICAgIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCAKLSAgICA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIAotICAgIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgCi0gICAgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCAKLSAgICA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIAotICAgIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIAotICAgIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgCi0gICAgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCAKLSAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgCi0gICAgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCAKLSAgICA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIAotICAgIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgCi0gICAgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCAKLSAgICA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCi0gICAgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCAKLSAgICA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIAotICAgIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCAKLSAgICA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgCi0gICAgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgCi0gICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCAKLSAgICA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgCi0gICAgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAKLSAgICAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIAotICAgIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgCi0gICAgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAKLSAgICAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIAotICAgIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAKLSAgICAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCAKLSAgICA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIAotICAgIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIAotICAgIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgCi0gICAgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCAKLSAgICA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCAKLSAgICA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIAotICAgIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIAotICAgIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgCi0gICAgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIAotICAgIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgCi0gICAgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgCi0gICAgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIAotICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIAotICAgIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIAotICAgIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgCi0gICAgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIAotICAgIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIAotICAgIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgCi0gICAgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgCi0gICAgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCAKLSAgICA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIAotICAgIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgCi0gICAgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCAKLSAgICA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCAKLSAgICA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIAotICAgIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgCi0gICAgMjA2LCA4MSwgODUsIDY5LCAxMjgsIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCAKLSAgICA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIAotICAgIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgCi0gICAgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIAotICAgIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAKLSAgICAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgCi0gICAgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgCi0gICAgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgCi0gICAgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIAotICAgIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIAotICAgIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIAotICAgIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgCi0gICAgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgCi0gICAgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgCi0gICAgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAKLSAgICAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCAKLSAgICA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIAotICAgIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAKLSAgICAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAKLSAgICAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCAKLSAgICA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIAotICAgIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgCi0gICAgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIAotICAgIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIAotICAgIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIAotICAgIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIAotICAgIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgCi0gICAgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCAKLSAgICA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIAotICAgIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgCi0gICAgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCAKLSAgICA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIAotICAgIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgCi0gICAgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCAKLSAgICA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIAotICAgIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIAotICAgIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgCi0gICAgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIAotICAgIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgCi0gICAgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgCi0gICAgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCAKLSAgICA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgCi0gICAgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCAKLSAgICA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIAotICAgIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgCi0gICAgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCAKLSAgICA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIAotICAgIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgCi0gICAgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCAKLSAgICA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgCi0gICAgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCAKLSAgICA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIAotICAgIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgCi0gICAgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCAKLSAgICA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIAotICAgIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIAotICAgIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgCi0gICAgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIAotICAgIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgCi0gICAgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIAotICAgIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgCi0gICAgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCAKLSAgICA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgCi0gICAgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCi0gICAgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIAotICAgIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgCi0gICAgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCAKLSAgICA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIAotICAgIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgCi0gICAgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCAKLSAgICA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIAotICAgIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgCi0gICAgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCAKLSAgICA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCAKLSAgICA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCAKLSAgICA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIAotICAgIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAKLSAgICAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCAKLSAgICA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIAotICAgIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgCi0gICAgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCAKLSAgICA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIAotICAgIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgCi0gICAgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCAKLSAgICA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIAotICAgIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgCi0gICAgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCAKLSAgICA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIAotICAgIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCAKLSAgICA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIAotICAgIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgCi0gICAgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIAotICAgIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgCi0gICAgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIAotICAgIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIAotICAgIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgCi0gICAgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAKLSAgICAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIAotICAgIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgCi0gICAgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAKLSAgICAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCAKLSAgICA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIAotICAgIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgCi0gICAgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgCi0gICAgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIAotICAgIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgCi0gICAgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIAotICAgIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgCi0gICAgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgCi0gICAgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCAKLSAgICA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIAotICAgIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAKLSAgICAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCAKLSAgICA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIAotICAgIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAKLSAgICAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIAotICAgIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCAKLSAgICA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIAotICAgIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgCi0gICAgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIAotICAgIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgCi0gICAgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIAotICAgIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgCi0gICAgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCAKLSAgICA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIAotICAgIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgCi0gICAgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCAKLSAgICA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCAKLSAgICA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgCi0gICAgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCAKLSAgICA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIAotICAgIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgCi0gICAgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCAKLSAgICA2NywgMTk3LCA4MCwgNjgsIDcwLCAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA2NSwgODksIDY5LCA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgODksIDEyOCwgODAsIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIAotICAgIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgCi0gICAgNzgsIDEyOCwgODAsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCAKLSAgICA4MCwgNjUsIDg0LCA2NSwgNzUsIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIAotICAgIDY1LCA4MywgODUsIDgxLCAxMjgsIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgCi0gICAgODYsIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIAotICAgIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIAotICAgIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDgzLCA2OSwgODEsIDEyOCwgODAsIDY1LCA4MywgNjUsIDc4LCA3MSwgNjUsIDIwNiwgODAsIDY1LCAKLSAgICA4MiwgODUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDg0LCAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIAotICAgIDczLCAyMDgsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCAKLSAgICA2OSwgMTk2LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIAotICAgIDgwLCA2NSwgODIsIDIxMiwgODAsIDY1LCA4MiwgNzMsIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgCi0gICAgODQsIDczLCA3MSwgNzcsIDY5LCA3OCwgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCAKLSAgICA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgCi0gICAgODMsIDczLCAyMTEsIDgwLCA2NSwgODIsIDY1LCA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCAKLSAgICA3NiwgNjksIDc2LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIAotICAgIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAKLSAgICA3MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIAotICAgIDY1LCA3NiwgNjksIDgzLCA3NywgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDIwMCwgODAsIDY1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgCi0gICAgMTI4LCA4MCwgNjUsIDgwLCA2OSwgODIsIDY3LCA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCAKLSAgICA2NSwgODAsIDEyOCwgODAsIDY1LCAyMDgsIDgwLCA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4OSwgNzMsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgODksIDY1LCA3OCwgNzEsIDcxLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIAotICAgIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgNzEsIDgyLCA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIAotICAgIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgCi0gICAgODksIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDY1LCAKLSAgICA4NCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjgsIDE5MywgODAsIDY1LCA3OCwgCi0gICAgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCAKLSAgICA3NSwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MywgNzIsIAotICAgIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgCi0gICAgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCAKLSAgICA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2OCwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgODUsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA3NiwgMjA1LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgNzYsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIAotICAgIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCAKLSAgICA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIAotICAgIDY1LCAyMDMsIDgwLCA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgCi0gICAgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNzIsIDc2LCAKLSAgICA2NSwgODYsIDIwMSwgODAsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODIsIDEyOCwgODAsIDY1LCA3MSwgMTk3LCAKLSAgICA4MCwgNjUsIDY4LCA3NywgMTkzLCA4MCwgNjUsIDY4LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgNjgsIDE5MywgODAsIAotICAgIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNjUsIDcxLCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDY1LCA4NCwgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCAKLSAgICA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgODAsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIAotICAgIDY1LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgCi0gICAgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIDQ4LCAKLSAgICA1NiwgMTI4LCA4MCwgNDgsIDQ4LCA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgMTI4LCAKLSAgICA4MCwgNDgsIDQ4LCA1MiwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgODAsIAotICAgIDQ4LCA0OCwgNTAsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA4OSwgCi0gICAgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDY1LCAKLSAgICAxMjgsIDc5LCA4OCwgNzMsIDE5MywgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIDc5LCAKLSAgICA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgODYsIAotICAgIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCA2OSwgCi0gICAgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDc5LCAKLSAgICA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgODQsIAotICAgIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAKLSAgICAyMTAsIDc5LCA4NSwgODQsIDY2LCA3OSwgMjE2LCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIAotICAgIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIAotICAgIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgCi0gICAgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgMTkzLCA3OSwgODMsIDY3LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzksIDgyLCA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIAotICAgIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgMjEyLCA3OSwgCi0gICAgODIsIDc1LCA3MiwgNzksIDIwNiwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCAKLSAgICA3OCwgMTI4LCA3OSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIAotICAgIDY4LCA2OSwgMjEwLCA3OSwgODIsIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgCi0gICAgODAsIDg0LCA3MywgNzksIDIwNiwgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCAKLSAgICA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIAotICAgIDgwLCA3OSwgODMsIDczLCA3OCwgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgCi0gICAgNjcsIDcyLCA4NSwgODMsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCAKLSAgICA2NSwgODQsIDc5LCAyMTAsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDczLCA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNzMsIAotICAgIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA0NSwgODAsIDEyOCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgODUsIDg0LCA3NiwgCi0gICAgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCAKLSAgICA3OCwgNDUsIDY3LCA3MywgODIsIDY3LCA4NSwgNzMsIDg0LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDc5LCA3OSwgCi0gICAgOTAsIDY5LCAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA3OSwgODUsIDEyOCwgNzksIDc5LCAKLSAgICA3NywgODUsIDEyOCwgNzksIDc5LCA2OSwgMTI4LCA3OSwgNzksIDY2LCA3OSwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDc5LCA3OCwgODUsIDEyOCwgNzksIDc4LCA4MywgODUsIDEyOCwgNzksIDc4LCA3OCwgMTI4LCA3OSwgNzgsIDc1LCA2NSwgCi0gICAgODIsIDEyOCwgNzksIDc4LCA2OSwgODMsIDY5LCA3NiwgNzAsIDEyOCwgNzksIDc4LCA2OSwgNDUsIDg3LCA2NSwgMjE3LCAKLSAgICA3OSwgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3OSwgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3OSwgNzgsIDY1LCA4MCwgMTI4LCA3OSwgNzcsIDczLCAKLSAgICA4MywgODMsIDczLCA3OSwgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIDczLCA2NywgODIsIAotICAgIDc5LCAyMDYsIDc5LCA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgNzcsIDY1LCA3NiwgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDc2LCAKLSAgICA2OCwgMTI4LCA3OSwgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCAKLSAgICA3OSwgNzQsIDczLCA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIDc2LCAxMjgsIAotICAgIDc5LCA3MiwgNzcsIDEyOCwgNzksIDcyLCAyMDUsIDc5LCA3MSwgODIsIDY5LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgCi0gICAgNzUsIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA3MCwgNzAsIDczLCAKLSAgICA2NywgNjksIDgyLCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCAxOTcsIAotICAgIDc5LCA3MCwgNzAsIDEyOCwgNzksIDY5LCA4OSwgMTI4LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIAotICAgIDc5LCA2OCwgMTk2LCA3OSwgNjcsIDg0LCA3OSwgODAsIDg1LCA4MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgCi0gICAgMTI4LCA3OSwgNjcsIDg0LCA2OSwgMjEyLCA3OSwgNjcsIDIxMCwgNzksIDY3LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA3OSwgCi0gICAgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDc5LCA3NiwgMjExLCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgCi0gICAgNzYsIDczLCAxMjgsIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIDE5NywgNzksIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCAKLSAgICA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzksIDY2LCA2OSwgNzYsIDc5LCA4MywgMTI4LCA3OSwgNjYsIDEyOCwgNzksIAotICAgIDY1LCA4OSwgMTI4LCA3OSwgNjUsIDc1LCAxMjgsIDc5LCA2NSwgNjYsIDc5LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDE5MywgNzksIDQ4LCA1MywgNDksIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgMTI4LCA3OSwgNDgsIDUyLCA1NywgMTI4LCA3OSwgNDgsIDUyLCA1NiwgMTI4LCAKLSAgICA3OSwgNDgsIDUyLCA1NSwgMTI4LCA3OSwgNDgsIDUyLCA1NCwgMTI4LCA3OSwgNDgsIDUyLCA1MywgMTI4LCA3OSwgNDgsIAotICAgIDUyLCA1MiwgMTI4LCA3OSwgNDgsIDUyLCA1MSwgMTI4LCA3OSwgNDgsIDUyLCA1MCwgMTI4LCA3OSwgNDgsIDUyLCA0OSwgCi0gICAgMTI4LCA3OSwgNDgsIDUyLCA0OCwgMTI4LCA3OSwgNDgsIDUxLCA1NywgMTI4LCA3OSwgNDgsIDUxLCA1NiwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY3LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTMsIDEyOCwgNzksIDQ4LCA1MSwgNTIsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc5LCA0OCwgCi0gICAgNTEsIDUxLCAxMjgsIDc5LCA0OCwgNTEsIDUwLCAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgMTI4LCA3OSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIAotICAgIDEyOCwgNzksIDQ4LCA1MCwgNTYsIDEyOCwgNzksIDQ4LCA1MCwgNTUsIDEyOCwgNzksIDQ4LCA1MCwgNTQsIDEyOCwgNzksIAotICAgIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCAxMjgsIDc5LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MiwgMTI4LCA3OSwgNDgsIDUwLCA1MSwgMTI4LCA3OSwgNDgsIDUwLCA1MCwgMTI4LCA3OSwgNDgsIDUwLCAKLSAgICA0OSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAxMjgsIDc5LCA0OCwgNDksIDU2LCAxMjgsIDc5LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDc5LCA0OCwgNDksIDU0LCAxMjgsIDc5LCA0OCwgNDksIDUzLCAxMjgsIDc5LCA0OCwgNDksIDUyLCAxMjgsIDc5LCA0OCwgCi0gICAgNDksIDUxLCAxMjgsIDc5LCA0OCwgNDksIDUwLCAxMjgsIDc5LCA0OCwgNDksIDQ5LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAKLSAgICA2NywgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNDksIAotICAgIDQ4LCAxMjgsIDc5LCA0OCwgNDgsIDU3LCAxMjgsIDc5LCA0OCwgNDgsIDU2LCAxMjgsIDc5LCA0OCwgNDgsIDU1LCAxMjgsIAotICAgIDc5LCA0OCwgNDgsIDU0LCA3MCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjksIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY4LCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA3OSwgNDgsIDQ4LCA1MiwgMTI4LCA3OSwgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgCi0gICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDEyOCwgNzksIDQ1LCA4OSwgNjksIDEyOCwgNzksIDQ1LCAKLSAgICA3OSwgNDUsIDczLCAxMjgsIDc5LCA0NSwgNjksIDEyOCwgNzgsIDkwLCA4OSwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA4OSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIAotICAgIDc4LCA5MCwgODksIDEyOCwgNzgsIDkwLCA4NSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgCi0gICAgODUsIDgyLCAxMjgsIDc4LCA5MCwgODUsIDgxLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAxMjgsIDc4LCA5MCwgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAyMDYsIDc4LCA5MCwgODUsIDEyOCwgNzgsIDkwLCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDkwLCA3OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgODgsIDEyOCwgNzgsIDkwLCA3MywgODQsIAotICAgIDEyOCwgNzgsIDkwLCA3MywgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA2OSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIDc4LCA5MCwgNjksIDg4LCAxMjgsIDc4LCA5MCwgCi0gICAgNjksIDg1LCA3NywgMTI4LCA3OCwgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjUsIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgNjUsIDgxLCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAxMjgsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDkwLCAKLSAgICAxOTMsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODUsIDg1LCAxMjgsIDc4LCAKLSAgICA4OSwgODUsIDg0LCAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgNjksIDEyOCwgNzgsIDg5LCA4NSwgCi0gICAgMTI4LCA3OCwgODksIDc5LCA4OCwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgCi0gICAgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMiwgNzgsIDg5LCAKLSAgICA3MywgMjExLCA3OCwgODksIDczLCAyMTAsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIAotICAgIDc5LCAxMjgsIDc4LCA4OSwgNzMsIDczLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgODksIDczLCA2OSwgCi0gICAgODQsIDEyOCwgNzgsIDg5LCA3MywgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDEyOCwgCi0gICAgNzgsIDg5LCAyMDEsIDc4LCA4OSwgNzIsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDg0LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgCi0gICAgNzgsIDg5LCA2OSwgNzIsIDEyOCwgNzgsIDg5LCA2OSwgMjAwLCA3OCwgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDY5LCAKLSAgICAxMjgsIDc4LCA4OSwgMTk2LCA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgODksIDY1LCA4NSwgMTI4LCA3OCwgODksIDY1LCAKLSAgICA3MywgMTI4LCA3OCwgODksIDY1LCA3MiwgMTI4LCA3OCwgODksIDY1LCA2OSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgODksIAotICAgIDY1LCA2NSwgMTI4LCA3OCwgODcsIDc5LCA3OSwgMTI4LCA3OCwgODcsIDc5LCAxMjgsIDc4LCA4NywgNzMsIDczLCAxMjgsIAotICAgIDc4LCA4NywgNzMsIDEyOCwgNzgsIDg3LCA2OSwgMTI4LCA3OCwgODcsIDY1LCA2NSwgMTI4LCA3OCwgODcsIDY1LCAxMjgsIAotICAgIDc4LCA4NywgMTI4LCA3OCwgODYsIDEyOCwgNzgsIDg1LCA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgMTI4LCA3OCwgODUsIAotICAgIDg1LCAxMjgsIDc4LCA4NSwgODQsIDczLCA3NiwgNzYsIDg1LCAxMjgsIDc4LCA4NSwgODQsIDEyOCwgNzgsIDg1LCAyMTIsIAotICAgIDc4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4NSwgODIsIDEyOCwgNzgsIDg1LCA4MCwgMTI4LCA3OCwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3OCwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODUsIDc5LCAxMjgsIDc4LCA4NSwgNzgsIDg1LCA5MCwgMTI4LCA3OCwgCi0gICAgODUsIDc4LCA4NSwgMjE4LCA3OCwgODUsIDc4LCA3MSwgMTI4LCA3OCwgODUsIDc4LCA2NSwgODYsIDg1LCAyMTIsIDc4LCAKLSAgICA4NSwgNzgsIDY1LCA4NiwgNzMsIDIwMywgNzgsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDIwNiwgNzgsIDg1LCA3NywgNjksIAotICAgIDgyLCAyMDcsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCAKLSAgICAyMDQsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDgzLCAxMjgsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIAotICAgIDg1LCA3NywgMTI4LCA3OCwgODUsIDc2LCA3NiwgMTI4LCA3OCwgODUsIDc2LCAyMDQsIDc4LCA4NSwgNzYsIDEyOCwgNzgsIAotICAgIDg1LCA3NSwgODQsIDY1LCAxMjgsIDc4LCA4NSwgNjksIDc4LCA3MSwgMTI4LCA3OCwgODUsIDY5LCAxMjgsIDc4LCA4NSwgCi0gICAgNjYsIDczLCA2NSwgMjA2LCA3OCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA1MCwgNTAsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDY1LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDksIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDc4LCAKLSAgICA4NSwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgCi0gICAgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDQ4LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA4NSwgCi0gICAgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgODQsIDg1LCA4NSwgMTI4LCA3OCwgODQsIDg1LCA3NywgMTI4LCA3OCwgODQsIDIxMywgCi0gICAgNzgsIDg0LCA3OSwgODEsIDgwLCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA3MywgNjksIDE5NywgNzgsIDg0LCA2OSwgODUsIDc4LCAKLSAgICA3MSwgNjYsIDY1LCAxMjgsIDc4LCA4NCwgNjksIDg1LCA3NywgMTI4LCA3OCwgODQsIDY5LCA3OCwgMTI4LCA3OCwgODQsIAotICAgIDY5LCA2OSwgMTI4LCA3OCwgODQsIDY1LCA4MCwgMTI4LCA3OCwgODQsIDY1LCAyMDgsIDc4LCA4NCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA4MywgODUsIDc5LCAyMTIsIDc4LCA4MywgODUsIDc4LCAxMjgsIDc4LCA4MywgODUsIDc3LCAxMjgsIDc4LCA4MywgCi0gICAgNzksIDc3LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4MCwgMTI4LCAKLSAgICA3OCwgODMsIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDc4LCA4MywgNzIsIDg1LCAyMTIsIAotICAgIDc4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDY5LCAxMjgsIDc4LCA4MywgNzIsIDczLCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY1LCA4MSwgMTI4LCA3OCwgODMsIDcyLCAKLSAgICA2NSwgMTI4LCA3OCwgODMsIDY5LCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY5LCA3OCwgMTI4LCA3OCwgODMsIAotICAgIDY1LCAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgCi0gICAgMTI4LCA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgCi0gICAgODUsIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCAKLSAgICA4MiwgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCAKLSAgICA4MiwgNzksIDgwLCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIAotICAgIDEyOCwgNzgsIDgyLCA2OSwgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIAotICAgIDY1LCA4NCwgMTI4LCA3OCwgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODksIDEyOCwgNzgsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAKLSAgICAxMjgsIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIAotICAgIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDE5NiwgNzgsIDc5LCA4NCwgNjksIDY2LCA3OSwgNzksIDc1LCAxMjgsIDc4LCA3OSwgCi0gICAgODQsIDY5LCA2NiwgNzksIDc5LCAyMDMsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDc4LCA3OSwgODQsIDE5NywgNzgsIDc5LCAKLSAgICA4NCwgNjcsIDcyLCA2OSwgMTk2LCA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgMTI4LCA3OCwgNzksIAotICAgIDIxMiwgNzgsIDc5LCA4MywgNjksIDEyOCwgNzgsIDc5LCA4MiwgODQsIDcyLCA4NywgNjksIDgzLCAyMTIsIDc4LCA3OSwgCi0gICAgODIsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDc4LCA3OSwgODIsIDg0LCAyMDAsIDc4LCA3OSwgODIsIDc3LCA2NSwgMjA0LCAKLSAgICA3OCwgNzksIDIxMCwgNzgsIDc5LCA4MCwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgNzgsIDc5LCA3OSwgMTI4LCAKLSAgICA3OCwgNzksIDc4LCA3MCwgNzksIDgyLCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNzksIDc4LCA0NSwgODAsIDc5LCA4NCwgCi0gICAgNjUsIDY2LCA3NiwgMTk3LCA3OCwgNzksIDc4LCA0NSwgNzQsIDc5LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDc4LCAKLSAgICA0NSwgNjYsIDgyLCA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgMjA0LCA3OCwgNzksIAotICAgIDc1LCA3MiwgODUsIDc1LCAxMjgsIDc4LCA3OSwgNjgsIDY5LCAxMjgsIDc4LCA3OSwgNjUsIDEyOCwgNzgsIDc5LCA0NSwgCi0gICAgNjYsIDgyLCA2OSwgNjUsIDIwMywgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc5LCAKLSAgICA3OSwgMTI4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzMsIDczLCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2OSwgMTI4LCA3OCwgCi0gICAgNzgsIDc4LCA2NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNzgsIDc4LCAxMjgsIDc4LCA3OCwgNzIsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIAotICAgIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgCi0gICAgNzgsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDc4LCA3NywgMTI4LCA3OCwgNzYsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDc2LCAKLSAgICA0OCwgNDksIDU3LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIAotICAgIDc4LCA3NiwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUzLCAKLSAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDksIAotICAgIDUwLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgCi0gICAgNDgsIDU3LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDc2LCAKLSAgICA0OCwgNDgsIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDc4LCA3NiwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUwLCAKLSAgICAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNzYsIDEyOCwgNzgsIDc1LCA3OSwgNzcsIDEyOCwgNzgsIDc1LCAKLSAgICAyMDcsIDc4LCA3NSwgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNzgsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIAotICAgIDc0LCA4OSwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODQsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIDEyOCwgNzgsIDc0LCA4NSwgODgsIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDgxLCA2NSwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDEyOCwgNzgsIAotICAgIDc0LCA4NSwgNjksIDgxLCAxMjgsIDc4LCA3NCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAKLSAgICAxMjgsIDc4LCA3NCwgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDEyOCwgNzgsIDc0LCAyMDEsIDc4LCA3NCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgODQsIDEyOCwgCi0gICAgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzgsIDY1LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCAKLSAgICA3NCwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgMTk3LCA3OCwgNzQsIAotICAgIDY5LCAxMjgsIDc4LCA3NCwgNjUsIDgxLCAxMjgsIDc4LCA3NCwgNjUsIDgwLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgCi0gICAgNzYsIDczLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY1LCA2NSwgMTI4LCA3OCwgNzMsIDg4LCAKLSAgICAxMjgsIDc4LCA3MywgODQsIDgyLCA2OSwgMTI4LCA3OCwgNzMsIDgzLCA2NSwgNzEsIDEyOCwgNzgsIDczLCA4MiwgODUsIAotICAgIDcxLCA4NSwgMTI4LCA3OCwgNzMsIDgwLCAxMjgsIDc4LCA3MywgNzgsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgCi0gICAgODQsIDg5LCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgMjE3LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDIwNiwgNzgsIDczLCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgODQsIDg5LCAxMjgsIDc4LCA3MywgNzgsIDE5NywgNzgsIDczLCA3OCwgNjgsIDY1LCA1MCwgMTI4LCA3OCwgNzMsIDc4LCAKLSAgICA2OCwgNjUsIDE3OCwgNzgsIDczLCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgNzMsIAotICAgIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCAxMjgsIDc4LCA3MywgCi0gICAgNzIsIDgzLCA3MiwgODYsIDY1LCA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCAKLSAgICA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3OCwgNzMsIAotICAgIDcxLCA3MiwgMjEyLCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgODUsIAotICAgIDc4LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgNjksIAotICAgIDg1LCA3OCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIDc4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCAKLSAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgCi0gICAgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCA3OCwgCi0gICAgNzMsIDY2LCAxMjgsIDc4LCA3MywgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzIsIDc0LCA2NSwgMTI4LCA3OCwgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgNjksIDEyOCwgCi0gICAgNzgsIDcxLCA4NSwgODUsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA3OSwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMTI4LCA3OCwgNzEsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAyMTMsIDc4LCA3MSwgCi0gICAgNzksIDg0LCAxMjgsIDc4LCA3MSwgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCAKLSAgICA3OCwgNzEsIDIwNywgNzgsIDcxLCA3NSwgODksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA4NywgNjUsIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzEsIDc1LCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNjksIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCi0gICAgMTk3LCA3OCwgNzEsIDc1LCA3MywgNzgsIDY4LCAyMDEsIDc4LCA3MSwgNzUsIDczLCA2OSwgNjksIDEyOCwgNzgsIDcxLCAKLSAgICA3NSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MSwgCi0gICAgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODAsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDY1LCA3NywgNzMsIDEyOCwgNzgsIDcxLCAKLSAgICA3NSwgNjUsIDEyOCwgNzgsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIAotICAgIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcyLCA2NSwgMTI4LCA3OCwgNzEsIDcxLCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgCi0gICAgNzEsIDcxLCA4NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCAKLSAgICA4MSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDIwOSwgNzgsIDcxLCA3MSwgODUsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIAotICAgIDcxLCA4NSwgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCA4MywgNzIsIDY1LCAxOTcsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIAotICAgIDIwNiwgNzgsIDcxLCA3MSwgODUsIDEyOCwgNzgsIDcxLCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIAotICAgIDc4LCA3MSwgNzEsIDczLCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAyMTMsIDc4LCAKLSAgICA3MSwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgNjksIAotICAgIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgCi0gICAgODAsIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIAotICAgIDEyOCwgNzgsIDcxLCA3MSwgMTI4LCA3OCwgNzEsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDY5LCA4NSwgODIsIDY5LCA4NSwgCi0gICAgODQsIDEyOCwgNzgsIDcxLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA2OSwgNjksIDEyOCwgCi0gICAgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgNzYsIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCA2NSwgODUsIAotICAgIDEyOCwgNzgsIDcxLCA2NSwgODQsIDEyOCwgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIAotICAgIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIDcyLCAxMjgsIDc4LCA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgCi0gICAgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCA3OCwgNjksIDg3LCA4MywgODAsIDY1LCAKLSAgICA4MCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODcsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODcsIDEyOCwgNzgsIAotICAgIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgCi0gICAgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDgwLCAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIAotICAgIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgNzksIDEyOCwgNzgsIDY5LCA3OCwgMTI4LCA3OCwgNjksIDc2LCAxMjgsIAotICAgIDc4LCA2OSwgNzMsIDg0LCA3MiwgNjksIDIxMCwgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY5LCA3MSwgCi0gICAgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY3LCA3NSwgODQsIDczLCA2OSwgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIDgzLCAKLSAgICA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIDY4LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzgsIAotICAgIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgyLCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgCi0gICAgODUsIDc4LCAxMjgsIDc4LCA2OCwgMjEzLCA3OCwgNjgsIDc5LCA4OCwgMTI4LCA3OCwgNjgsIDc5LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCA3OSwgMTI4LCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3OCwgNjgsIDc5LCAKLSAgICA3NywgNjYsIDg1LCAxMjgsIDc4LCA2OCwgNzksIDc2LCAxOTcsIDc4LCA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIAotICAgIDg0LCAxMjgsIDc4LCA2OCwgNzMsIDgxLCAxMjgsIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgNjgsIDczLCA2OCwgNjUsIDEyOCwgNzgsIDY4LCA3MywgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODUsIDY1LCA2OSwgODIsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA3OCwgCi0gICAgNjgsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCAxMjgsIDc4LCA2OCwgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAKLSAgICAxMjgsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDc4LCA2OCwgNjUsIDc3LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCA3OCwgNzEsIAotICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY4LCA2NSwgMTkzLCA3OCwgCi0gICAgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIAotICAgIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgCi0gICAgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgCi0gICAgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCAKLSAgICA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIDY2LCA3MywgMTI4LCA3OCwgNjYsIDcyLCAxMjgsIDc4LCAKLSAgICA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAxMjgsIDc4LCA2NiwgNjUsIDgwLCAxMjgsIDc4LCA2NiwgNjUsIAotICAgIDEyOCwgNzgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA4OSwgMTI4LCA3OCwgNjUsIDg4LCA3MywgCi0gICAgNjUsIDIwNiwgNzgsIDY1LCA4OCwgMTI4LCA3OCwgNjUsIDg1LCA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2NSwgODUsIDY4LCAKLSAgICA3MywgMjE4LCA3OCwgNjUsIDg0LCA4NSwgODIsIDY1LCAyMDQsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIAotICAgIDc4LCA2NSwgODMsIDc1LCA2NSwgODAsIDIwMSwgNzgsIDY1LCA4MywgNzIsIDczLCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgCi0gICAgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgODEsIDEyOCwgNzgsIAotICAgIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA4MywgNjUsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgCi0gICAgNzgsIDg0LCA3MiwgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCAKLSAgICA3NywgNjksIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCAKLSAgICA2NSwgNzUsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIDY1LCA3MywgMjA0LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCAKLSAgICA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgNjUsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNjUsIAotICAgIDcxLCAxMjgsIDc4LCA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3NSwgODMsIDczLCA3NSwgODksIDY1LCAKLSAgICA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCAxOTMsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCAKLSAgICA0NSwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNDksIDEyOCwgNzgsIDQ4LCA1MiwgNDgsIAotICAgIDEyOCwgNzgsIDQ4LCA1MSwgNTcsIDEyOCwgNzgsIDQ4LCA1MSwgNTYsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIAotICAgIDc4LCA0OCwgNTEsIDU1LCAxMjgsIDc4LCA0OCwgNTEsIDU0LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA3OCwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OCwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDEyOCwgNzgsIDQ4LCAKLSAgICA1MSwgNTEsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUxLCAxMjgsIDc4LCA0OCwgNTEsIDUwLCAxMjgsIDc4LCA0OCwgNTEsIAotICAgIDQ5LCAxMjgsIDc4LCA0OCwgNTEsIDQ4LCAxMjgsIDc4LCA0OCwgNTAsIDU3LCAxMjgsIDc4LCA0OCwgNTAsIDU2LCAxMjgsIAotICAgIDc4LCA0OCwgNTAsIDU1LCAxMjgsIDc4LCA0OCwgNTAsIDU0LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OCwgCi0gICAgNDgsIDUwLCA1MywgMTI4LCA3OCwgNDgsIDUwLCA1MiwgMTI4LCA3OCwgNDgsIDUwLCA1MSwgMTI4LCA3OCwgNDgsIDUwLCAKLSAgICA1MCwgMTI4LCA3OCwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNDgsIDQ5LCA1NywgMTI4LCAKLSAgICA3OCwgNDgsIDQ5LCA1NiwgNjYsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA0OCwgCi0gICAgNDksIDUyLCAxMjgsIDc4LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA0OCwgNDksIDQ5LCAKLSAgICAxMjgsIDc4LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCAKLSAgICA0OCwgNDgsIDU1LCAxMjgsIDc4LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA0OCwgNDgsIAotICAgIDUyLCAxMjgsIDc4LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA0OCwgNDgsIDQ5LCAxMjgsIAotICAgIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OCwgNDUsIDY1LCA4MiwgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgCi0gICAgODQsIDEyOCwgNzcsIDg5LCA4MywgNzYsIDczLCA4NCwgNjksIDEyOCwgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAKLSAgICAxMjgsIDc3LCA4OSwgMTkzLCA3NywgODksIDEyOCwgNzcsIDIxNywgNzcsIDg3LCA3OSwgNzksIDEyOCwgNzcsIDg3LCA3OSwgCi0gICAgMTI4LCA3NywgODcsIDczLCA3MywgMTI4LCA3NywgODcsIDczLCAxMjgsIDc3LCA4NywgNjksIDY5LCAxMjgsIDc3LCA4NywgCi0gICAgNjksIDEyOCwgNzcsIDg3LCA2NSwgNjUsIDEyOCwgNzcsIDg3LCA2NSwgMTI4LCA3NywgODcsIDEyOCwgNzcsIDIxNSwgNzcsIAotICAgIDg2LCA4MywgMTI4LCA3NywgODYsIDc5LCA4MCwgMTI4LCA3NywgODYsIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgCi0gICAgNjksIDc4LCA3MSwgNjUsIDc3LCAxMjgsIDc3LCA4NiwgMTI4LCA3NywgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgCi0gICAgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIDY1LCA3OCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIAotICAgIDE5MywgNzcsIDg1LCA4NSwgMTI4LCA3NywgODUsIDg0LCAxMjgsIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3NywgODUsIAotICAgIDgzLCA3MywgMTk1LCA3NywgODUsIDgzLCA3MiwgODIsIDc5LCA3OSwgNzcsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDUxLCAKLSAgICAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIDc3LCA4NSwgODMsIDcyLCAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCAKLSAgICA4MiwgODgsIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCA3NywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIAotICAgIDgyLCA2OCwgNjUsIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgCi0gICAgNjUsIDc3LCAxMjgsIDc3LCA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgCi0gICAgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgNzcsIDY1LCA2OSwgMTI4LCA3NywgODUsIDc5LCAxMjgsIDc3LCAKLSAgICA4NSwgNzgsIDgzLCA4NSwgNjYsIDEyOCwgNzcsIDg1LCA3OCwgNjUsIDcyLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIAotICAgIDY5LCA4NCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgMjEyLCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgCi0gICAgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIAotICAgIDg0LCA3MywgNzksIDIwNiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDE5NywgNzcsIDg1LCA3NiwgODQsIDczLCA3OSwgCi0gICAgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDg1LCA3NiwgODQsIDczLCA3NywgNjUsIDgwLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCAKLSAgICAyMDEsIDc3LCA4NSwgNzUsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzcsIDg1LCA3MywgNzgsIDEyOCwgNzcsIAotICAgIDg1LCA3MSwgODMsIDEyOCwgNzcsIDg1LCA3MSwgMTI4LCA3NywgODUsIDE5OSwgNzcsIDg1LCA2OSwgMTI4LCA3NywgODUsIAotICAgIDY3LCA3MiwgMTI4LCA3NywgODUsIDY3LCAyMDAsIDc3LCA4NSwgNjcsIDY1LCA2NSwgNjgsIDEyOCwgNzcsIDg1LCA2NSwgCi0gICAgNzgsIDEyOCwgNzcsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA0NSwgNzEsIDY1LCA2NSwgNzIsIDc2LCA2NSwgMTkzLCAKLSAgICA3NywgMjEzLCA3NywgODMsIDEyOCwgNzcsIDgwLCA2NSwgMTI4LCA3NywgNzksIDg5LCA2NSwgNzMsIDEyOCwgNzcsIDc5LCAKLSAgICA4OCwgMTI4LCA3NywgNzksIDg2LCA3MywgMTk3LCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc3LCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgODMsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAKLSAgICAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCAyMDYsIDc3LCA3OSwgODUsIDc4LCAyMTIsIDc3LCA3OSwgODUsIAotICAgIDc4LCA2OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgCi0gICAgODQsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDg1LCA4NSwgNzcsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCAKLSAgICA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCA3OSwgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCAKLSAgICA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCA3OSwgNzksIDc3LCA4MCwgODUsIDgxLCAxMjgsIAotICAgIDc3LCA3OSwgNzksIDc3LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3OSwgNzksIDEyOCwgNzcsIDc5LCA3OCwgODQsIDczLCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MiwgMTI4LCA3NywgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIDc4LCAKLSAgICA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzksIDc4LCA3OSwgODMsIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIAotICAgIDc5LCA4MywgODAsIDY1LCA2NywgMTk3LCA3NywgNzksIDc4LCA3OSwgODIsIDY1LCA3MywgNzYsIDEyOCwgNzcsIDc5LCA3OCwgCi0gICAgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDc3LCAKLSAgICA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc3LCA3OSwgNzgsIDc5LCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIAotICAgIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgNzksIDc4LCA3NSwgNjksIDg5LCAxMjgsIDc3LCA3OSwgCi0gICAgNzgsIDc1LCA2OSwgMjE3LCA3NywgNzksIDc4LCA3MywgMTI4LCA3NywgNzksIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCAKLSAgICA4MSwgMTI4LCA3NywgNzksIDc4LCA2OSwgMjE3LCA3NywgNzksIDc4LCAxMjgsIDc3LCA3OSwgMjA2LCA3NywgNzksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgNzcsIDY1LCAxOTYsIDc3LCA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIAotICAgIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCi0gICAgMTI4LCA3NywgNzksIDY4LCA2OSwgMTI4LCA3NywgNzksIDY2LCA3MywgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgCi0gICAgMjA3LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgNzcsIDgzLCA4MCwgMTI4LCA3NywgCi0gICAgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgCi0gICAgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIDczLCA4MywgODIsIDY1LCAxMjgsIDc3LCA3MywgCi0gICAgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAKLSAgICAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIAotICAgIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY4LCA3MywgODMsIDY3LCAKLSAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA2NiwgODUsIDgzLCAxMjgsIDc3LCA3MywgNzcsIDY5LCAxMjgsIDc3LCA3MywgNzcsIAotICAgIDEyOCwgNzcsIDczLCA3NiwgNzYsIDczLCA3OSwgNzgsIDIxMSwgNzcsIDczLCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA3NywgCi0gICAgNzMsIDc2LCA3NiwgMTk3LCA3NywgNzMsIDc2LCAyMDQsIDc3LCA3MywgNzYsIDc1LCAyMTcsIDc3LCA3MywgNzYsIDEyOCwgCi0gICAgNzcsIDczLCA3NSwgODUsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDczLCA3NSwgODIsIDc5LCAyMDYsIDc3LCA3MywgNzUsIDgyLCAKLSAgICA3MywgMTI4LCA3NywgNzMsIDczLCA3OCwgMTI4LCA3NywgNzMsIDczLCAxMjgsIDc3LCA3MywgMTk5LCA3NywgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MywgNjksIAotICAgIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA3MywgNjksIAotICAgIDg1LCAyMDUsIDc3LCA3MywgNjksIDgwLCAxMjgsIDc3LCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MywgNjksIDEyOCwgNzcsIAotICAgIDczLCA2OCwgNzYsIDczLCA3OCwgMTk3LCA3NywgNzMsIDY4LCA2OCwgNzYsIDY5LCA0NSwgODcsIDY5LCA3NiwgODMsIDIwMCwgCi0gICAgNzcsIDczLCA2OCwgNjgsIDc2LCAxOTcsIDc3LCA3MywgMTk2LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA2NywgNzksIDgwLCAKLSAgICA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgMjA3LCA3NywgNzMsIDY3LCAyMTAsIDc3LCA3MiwgOTAsIDEyOCwgNzcsIDcyLCA2NSwgMTI4LCA3NywgNzIsIDEyOCwgNzcsIAotICAgIDcxLCA4NSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODQsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDc3LCA3MSwgCi0gICAgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDEyOCwgNzcsIDcxLCA4NSwgMTI4LCA3NywgNzEsIDc5LCA4OCwgMTI4LCAKLSAgICA3NywgNzEsIDc5LCA4NCwgMTI4LCA3NywgNzEsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIDc3LCA3MSwgMjA3LCAKLSAgICA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA3MywgNjksIDEyOCwgNzcsIDcxLCA2OSwgODgsIDEyOCwgNzcsIAotICAgIDcxLCA2OSwgODAsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgCi0gICAgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzksIDcwLCA4NSwgNzcsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDEyOCwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDg1LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIAotICAgIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDgxLCAKLSAgICAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDEyOCwgNzcsIDcxLCA2NSwgODgsIDEyOCwgNzcsIDcxLCA2NSwgODQsIAotICAgIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgMTI4LCA3NywgNzEsIDEyOCwgNzcsIDcwLCA3OSwgNzgsIAotICAgIDEyOCwgNzcsIDcwLCA3OSwgMjA2LCA3NywgNzAsIDc5LCAxMjgsIDc3LCA3MCwgNzMsIDg5LCA2NSwgODEsIDEyOCwgNzcsIAotICAgIDcwLCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDcwLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3NywgNzAsIDY1LCA2NSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4OCwgMTI4LCA3NywgNjksIDg1LCAyMTIsIDc3LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIAotICAgIDc4LCA3NCwgNzksIDc3LCA3OCwgNjgsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDY5LCA4NCwgCi0gICAgODIsIDc5LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgODQsIDgyLCA3MywgNjUsIAotICAgIDEyOCwgNzcsIDY5LCA4NCwgODIsIDY5LCA4NCwgNjksIDIxMSwgNzcsIDY5LCA4NCwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgCi0gICAgMTI4LCA3NywgNjksIDg0LCA2OSwgNzUsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDcxLCAxMjgsIDc3LCA2OSwgODQsIDY1LCAKLSAgICA3NiwgMTI4LCA3NywgNjksIDg0LCAxOTMsIDc3LCA2OSwgODMsIDgzLCA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NywgNjksIAotICAgIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgzLCA4MywgNjUsIDcxLCAxOTcsIDc3LCA2OSwgODMsIDc5LCAKLSAgICAxMjgsIDc3LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2OSwgODMsIDcyLCAxMjgsIDc3LCA2OSwgODIsIDc5LCA3MywgODQsIAotICAgIDczLCAxOTUsIDc3LCA2OSwgODIsIDc1LCA3MiwgNjUsIDEyOCwgNzcsIDY5LCA4MiwgNzUsIDcyLCAxOTMsIDc3LCA2OSwgCi0gICAgODIsIDczLCA2OCwgNzMsIDY1LCA3OCwgODMsIDEyOCwgNzcsIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY5LCA4MiwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDIxNywgNzcsIAotICAgIDY5LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3NywgNjksIDc4LCAxMjgsIDc3LCA2OSwgNzcsIDc5LCAxMjgsIDc3LCA2OSwgCi0gICAgNzcsIDY2LCA2OSwgODIsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCAyMTAsIDc3LCA2OSwgNzcsIDQ1LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA3NywgNjksIDc3LCAxMjgsIAotICAgIDc3LCA2OSwgMjA1LCA3NywgNjksIDc2LCA3OSwgNjgsIDczLCAxOTUsIDc3LCA2OSwgNzYsIDczLCA3NSwgMTI4LCA3NywgCi0gICAgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDg0LCA3OSwgNzgsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDgwLCAKLSAgICA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIAotICAgIDg1LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIDc3LCA4NSwgMTI4LCA3NywgNjksIDY5LCA3NywgCi0gICAgMTI4LCA3NywgNjksIDY5LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCA3NywgMTI4LCA3NywgNjksIDY4LCAKLSAgICA3MywgODUsIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA2NywgNjUsIAotICAgIDIwNCwgNzcsIDY5LCA2NSwgODQsIDEyOCwgNzcsIDY5LCA2NSwgMjEyLCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgCi0gICAgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCAKLSAgICA2OCwgODUsIDIwNiwgNzcsIDE5NiwgNzcsIDY3LCA3MiwgMjEzLCA3NywgNjcsIDcyLCA2NSwgMjA2LCA3NywgMTk1LCA3NywgCi0gICAgNjYsIDg1LCA3OSwgODEsIDEyOCwgNzcsIDY2LCA4NSwgNzksIDEyOCwgNzcsIDY2LCA4NSwgNjksIDEyOCwgNzcsIDY2LCAKLSAgICA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY2LCA3OSwgNzksIDEyOCwgNzcsIAotICAgIDY2LCA3OSwgMTI4LCA3NywgNjYsIDczLCA4NCwgMTI4LCA3NywgNjYsIDczLCAyMTIsIDc3LCA2NiwgNzMsIDgyLCA3MywgCi0gICAgNjksIDY5LCA3OCwgMTI4LCA3NywgNjYsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA4OCwgMTI4LCA3NywgNjYsIDY5LCAKLSAgICA4NSwgODIsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA3NywgMTI4LCA3NywgNjYsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIAotICAgIDc3LCA2NiwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNjksIDY5LCA3NSwgNjksIDY5LCA4NCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgCi0gICAgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDgxLCAxMjgsIDc3LCA2NiwgNjUsIDc4LCA4OSwgNzMsIDEyOCwgCi0gICAgNzcsIDY2LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDc1LCA2OSwgODQsIDEyOCwgNzcsIDY2LCAKLSAgICA2NSwgNjUsIDEyOCwgNzcsIDY2LCA2NSwgMTkzLCA3NywgNjYsIDE5MywgNzcsIDY2LCA1MiwgMTI4LCA3NywgNjYsIDUxLCAKLSAgICAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAxMjgsIDc3LCAxOTQsIDc3LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg4LCAxMjgsIDc3LCAKLSAgICA2NSwgODUsIDEyOCwgNzcsIDY1LCA4NCwgODQsIDc5LCA2NywgNzUsIDEyOCwgNzcsIDY1LCA4NCwgODIsIDczLCA4OCwgCi0gICAgMTI4LCA3NywgNjUsIDg0LCA2OSwgODIsIDczLCA2NSwgNzYsIDgzLCAxMjgsIDc3LCA2NSwgODQsIDEyOCwgNzcsIDY1LCAKLSAgICA4MywgMjEzLCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIDgzLCA4MywgNjUsIDcxLCA2OSwgCi0gICAgMTI4LCA3NywgNjUsIDgzLCA3OSwgODIsIDE5MywgNzcsIDY1LCA4MywgNzUsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDcwLCAKLSAgICA2NSwgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCA2NywgODUsIDc2LCA3MywgNzgsIAotICAgIDE5NywgNzcsIDY1LCA4MiwgODksIDEyOCwgNzcsIDY1LCA4MiwgODUsIDc1LCA4NSwgMTI4LCA3NywgNjUsIDgyLCA4NCwgCi0gICAgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDgyLCA4MiwgNzMsIDY1LCAKLSAgICA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTIsIDEyOCwgNzcsIAotICAgIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUwLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgCi0gICAgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDcyLCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKLSAgICA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgCi0gICAgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODMsIDczLCA4NCwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCAKLSAgICA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgNjUsIDgyLCAxMjgsIDc3LCA2NSwgODEsIAotICAgIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgxLCAxMjgsIDc3LCA2NSwgODAsIDc2LCAxOTcsIDc3LCA2NSwgODAsIDczLCA4MSwgCi0gICAgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OSwgMTI4LCA3NywgNjUsIDc4LCA4MywgODksIDc5LCA3OCwgMTI4LCA3NywgCi0gICAgNjUsIDc4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDIxOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCA3NiwgNzMsIAotICAgIDc4LCAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgCi0gICAgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAxOTcsIDc3LCA2NSwgNzYsIDY5LCAKLSAgICA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgNzYsIDE5NywgNzcsIDY1LCA3NiwgNjUsIAotICAgIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCAKLSAgICAxOTMsIDc3LCA2NSwgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIDc3LCA3OSwgNzUsIDEyOCwgNzcsIAotICAgIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgCi0gICAgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzMsIDc2LCAKLSAgICA2NiwgNzksIDIxNiwgNzcsIDY1LCA3MywgNzUsIDg1LCA4MiwgNzksIDEyOCwgNzcsIDY1LCA3MywgNjgsIDY5LCA3OCwgCi0gICAgMTI4LCA3NywgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3MiwgNzIsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA2NSwgNzUsIAotICAgIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDc3LCA2NSwgNzIsIDEyOCwgCi0gICAgNzcsIDY1LCA3MSwgNzgsIDczLCA3MCwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY1LCAKLSAgICA2OSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgNzQsIDY5LCA4NCwgMTI4LCA3NywgNjUsIDY5LCA3NywgODYsIAotICAgIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDc1LCA4MCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3MSwgCi0gICAgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCAKLSAgICA2OSwgNzcsIDY2LCA2NSwgMTI4LCA3NywgNjUsIDY5LCA3NywgMTI4LCA3NywgNjUsIDY5LCA3NiwgNjksIDY5LCAxMjgsIAotICAgIDc3LCA2NSwgNjksIDc1LCA2OSwgODUsIDgwLCAxMjgsIDc3LCA2NSwgNjgsIDg5LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA4NSwgCi0gICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCAKLSAgICAxOTMsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAotICAgIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjUsIDY3LCAKLSAgICA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCAyMDYsIAotICAgIDc3LCA2NSwgNjcsIDcyLCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2NSwgNjUsIDg5LCA4OSwgNjUsIDY1LCAxMjgsIDc3LCA2NSwgCi0gICAgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNDgsIDUyLCA1MiwgMTI4LCA3NywgCi0gICAgNDgsIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCA1MCwgMTI4LCA3NywgNDgsIDUyLCA0OSwgMTI4LCA3NywgNDgsIDUyLCAKLSAgICA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDEyOCwgNzcsIDQ4LCA1MSwgNTcsIDEyOCwgNzcsIDQ4LCA1MSwgNTYsIAotICAgIDEyOCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgNTQsIDEyOCwgNzcsIDQ4LCA1MSwgNTMsIDEyOCwgNzcsIAotICAgIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY2LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MSwgMTI4LCA3NywgNDgsIDUxLCA1MCwgMTI4LCA3NywgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCAKLSAgICA1MSwgNDksIDEyOCwgNzcsIDQ4LCA1MSwgNDgsIDEyOCwgNzcsIDQ4LCA1MCwgNTcsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIAotICAgIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgNTAsIDU1LCAxMjgsIDc3LCA0OCwgNTAsIDU0LCAxMjgsIAotICAgIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MiwgMTI4LCA3NywgCi0gICAgNDgsIDUwLCA1MSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDEyOCwgNzcsIDQ4LCAKLSAgICA1MCwgNDksIDEyOCwgNzcsIDQ4LCA1MCwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgNzcsIDQ4LCA0OSwgNTYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCA1MywgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTIsIDEyOCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcyLCAxMjgsIDc3LCAKLSAgICA0OCwgNDksIDUwLCA3MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzAsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDUwLCA2OCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjcsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY2LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgMTI4LCA3NywgNDgsIDQ5LCA0OSwgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDEyOCwgNzcsIDQ4LCA0OCwgNTcsIDEyOCwgNzcsIAotICAgIDQ4LCA0OCwgNTYsIDEyOCwgNzcsIDQ4LCA0OCwgNTUsIDEyOCwgNzcsIDQ4LCA0OCwgNTQsIDEyOCwgNzcsIDQ4LCA0OCwgCi0gICAgNTMsIDEyOCwgNzcsIDQ4LCA0OCwgNTIsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDUxLCAKLSAgICAxMjgsIDc3LCA0OCwgNDgsIDUwLCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NiwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjUsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDEyOCwgNzYsIDIxOCwgNzYsIDg5LCA4OSwgMTI4LCA3NiwgODksIDg4LCAxMjgsIDc2LCAKLSAgICA4OSwgODQsIDEyOCwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzYsIDg5LCA4MiwgMTI4LCA3NiwgODksIDgwLCAxMjgsIDc2LCAKLSAgICA4OSwgNjgsIDczLCA2NSwgMjA2LCA3NiwgODksIDY3LCA3MywgNjUsIDIwNiwgNzYsIDg4LCAxMjgsIDc2LCA4NywgNzksIAotICAgIDc5LCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzYsIDg3LCA3MywgNzMsIDEyOCwgNzYsIDg3LCA3MywgMTI4LCA3NiwgODcsIAotICAgIDY5LCAxMjgsIDc2LCA4NywgNjUsIDY1LCAxMjgsIDc2LCA4NywgNjUsIDEyOCwgNzYsIDg1LCA4OCwgMTI4LCA3NiwgODUsIAotICAgIDg1LCAxMjgsIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzYsIDg1LCA4MCwgMTI4LCA3NiwgODUsIAotICAgIDc5LCA4OCwgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3NiwgODUsIDc5LCAxMjgsIAotICAgIDc2LCA4NSwgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA4NSwgMjA1LCA3NiwgCi0gICAgODUsIDc2LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgNzIsIDg1LCA4MiwgMTI4LCA3NiwgODUsIDcyLCAKLSAgICAxMjgsIDc2LCA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgMTI4LCA3NiwgODUsIAotICAgIDcxLCA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgODUsIDUxLCAxMjgsIAotICAgIDc2LCA4NSwgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA4MiwgNzksIDEyOCwgNzYsIDgyLCA3NywgMTI4LCA3NiwgODIsIAotICAgIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgCi0gICAgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCAKLSAgICA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIAotICAgIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgCi0gICAgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCAKLSAgICA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIAotICAgIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIAotICAgIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgCi0gICAgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCAKLSAgICA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCi0gICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIAotICAgIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCAKLSAgICA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgCi0gICAgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCAKLSAgICA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIAotICAgIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgCi0gICAgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCAKLSAgICA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCAKLSAgICA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIAotICAgIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgCi0gICAgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgCi0gICAgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCAKLSAgICA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCAKLSAgICA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIAotICAgIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgCi0gICAgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCAKLSAgICA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgCi0gICAgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIAotICAgIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgCi0gICAgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCAKLSAgICA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCAKLSAgICA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIAotICAgIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKLSAgICAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAKLSAgICAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCAKLSAgICA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIAotICAgIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgCi0gICAgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIAotICAgIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgCi0gICAgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIAotICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgCi0gICAgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAKLSAgICA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCAKLSAgICA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCAKLSAgICA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIAotICAgIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIAotICAgIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgCi0gICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIAotICAgIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgCi0gICAgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCAKLSAgICA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIAotICAgIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgCi0gICAgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgCi0gICAgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAKLSAgICAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCAKLSAgICA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIAotICAgIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCAKLSAgICA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCAKLSAgICA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIAotICAgIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgCi0gICAgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCAKLSAgICA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIAotICAgIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgCi0gICAgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAKLSAgICAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIAotICAgIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIAotICAgIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgCi0gICAgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgCi0gICAgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCAKLSAgICA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgCi0gICAgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCAKLSAgICA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIAotICAgIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAKLSAgICAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCAKLSAgICA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIAotICAgIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgCi0gICAgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgCi0gICAgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgCi0gICAgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCAKLSAgICA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIAotICAgIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIAotICAgIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgCi0gICAgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCAKLSAgICA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIAotICAgIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIAotICAgIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCAKLSAgICA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgCi0gICAgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAKLSAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCAKLSAgICA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCAKLSAgICA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgCi0gICAgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgCi0gICAgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIAotICAgIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAKLSAgICAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIAotICAgIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgCi0gICAgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCAKLSAgICA3NywgMTkzLCA3NSwgNzksIDc3LCAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIAotICAgIDY2LCA4NSwgODYsIDE5MywgNzUsIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgCi0gICAgMTI4LCA3NSwgNzksIDIwMywgNzUsIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIAotICAgIDcxLCA3MiwgNzksIDc3LCAxMjgsIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgCi0gICAgNzksIDY1LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCAKLSAgICA3OCwgNzMsIDcwLCA2OSwgMTI4LCA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCAKLSAgICA3MywgODQsIDc5LCA3OCwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgCi0gICAgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIAotICAgIDc1LCA3MywgMTI4LCA3NSwgNzUsIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIAotICAgIDc1LCAxMjgsIDc1LCA3NCwgNjksIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgCi0gICAgODQsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIAotICAgIDc5LCA3NSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgCi0gICAgODksIDY5LCA3OSwgNzUsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCAKLSAgICA3NSwgNzIsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDc1LCA3MywgODksIDY5LCA3OSwgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgODMsIDczLCA3OCwgMTk5LCA3NSwgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCAKLSAgICA3NywgNTMsIDEyOCwgNzUsIDczLCA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIAotICAgIDY1LCA3NiwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgCi0gICAgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCAKLSAgICA3NSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIAotICAgIDczLCA4MCwgMTI4LCA3NSwgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgNzEsIDY1LCA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCAKLSAgICA3MywgNzMsIDEyOCwgNzUsIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA3NSwgNzMsIDY5LCA2OSwgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCAKLSAgICA3NSwgNzMsIDY3LCA3NSwgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIAotICAgIDg1LCA2OSwgNzgsIDQ1LCA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgCi0gICAgMTI4LCA3NSwgNzIsIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgCi0gICAgNzIsIDc5LCA3OCwgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAKLSAgICAyMDcsIDc1LCA3MiwgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCAKLSAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIAotICAgIDcyLCA3MiwgNjUsIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgNjksIDY5LCAxMjgsIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCAKLSAgICA3NSwgNzIsIDY1LCA4MiwgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIAotICAgIDcyLCA2NSwgNzgsIDY4LCAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgCi0gICAgNzIsIDY1LCA3NSwgNjUsIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAKLSAgICAxMjgsIDc1LCA3MiwgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCAKLSAgICA2NSwgODAsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3NSwgNjksIDg4LCAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDgwLCA4NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgNzUsIDY5LCA4NSwgODQsIDc4LCA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA2NSwgNjksIDg0LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIAotICAgIDg0LCA4NCwgMjAxLCA3NSwgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgCi0gICAgNzksIDg3LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCAKLSAgICA3NywgNjUsIDg0LCAxOTMsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIAotICAgIDc1LCA2OSwgNzgsIDEyOCwgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgCi0gICAgODAsIDg1LCAyMDQsIDc1LCA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCAKLSAgICA2OSwgNzcsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIAotICAgIDY5LCA3NiwgODYsIDczLCAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgCi0gICAgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCAKLSAgICA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIAotICAgIDc1LCA2NiwgMTI4LCA3NSwgNjUsIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgNzUsIDY1LCA4OSwgNjUsIDIwMCwgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCAKLSAgICA4OSwgNzUsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIAotICAgIDEyOCwgNzUsIDY1LCA4NCwgNzksIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgODQsIDcyLCA2NSwgNzUsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCAKLSAgICA2NSwgODYsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgCi0gICAgNzgsIDE5MywgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAKLSAgICAyMDYsIDc1LCA2NSwgODMsIDgyLCA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIAotICAgIDc2LCAxMjgsIDc1LCA2NSwgODMsIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgCi0gICAgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4MiwgMjA3LCA3NSwgNjUsIDgyLCA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIAotICAgIDgyLCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgCi0gICAgMTI4LCA3NSwgNjUsIDgwLCA4MCwgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgCi0gICAgNjUsIDgwLCA2NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCAKLSAgICA3NSwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIAotICAgIDY1LCA3NywgNTIsIDEyOCwgNzUsIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgCi0gICAgMTI4LCA3NSwgNjUsIDc1LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgCi0gICAgNjUsIDczLCA4NCwgNzIsIDIwMSwgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICAyMDEsIDc1LCA2NSwgNzAsIDY1LCAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAKLSAgICAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCAKLSAgICA2OCwgMTc5LCA3NSwgNjUsIDY4LCA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCAKLSAgICA2NiwgMTI4LCA3NSwgNjUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIAotICAgIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIAotICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIAotICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgCi0gICAgMTI4LCA3NCwgODUsIDg1LCAxMjgsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCAKLSAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIAotICAgIDEyOCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIAotICAgIDg1LCA3NiwgODksIDEyOCwgNzQsIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgCi0gICAgODUsIDY4LCA3MSwgNjksIDEyOCwgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCAKLSAgICA3NCwgNzksIDg5LCA3OSwgODUsIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIAotICAgIDIxMiwgNzQsIDc5LCA3OCwgNzEsIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIAotICAgIDc5LCA3MywgNzgsIDY5LCA2OCwgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgCi0gICAgODksIDg4LCAxMjgsIDc0LCA3NCwgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgCi0gICAgNzQsIDc0LCA4NSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCAKLSAgICA3NCwgODUsIDgyLCAxMjgsIDc0LCA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgCi0gICAgMTI4LCA3NCwgNzQsIDc5LCA4NCwgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgCi0gICAgNzMsIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIAotICAgIDY5LCAxMjgsIDc0LCA3NCwgNzMsIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIAotICAgIDY1LCAxMjgsIDc0LCA3MywgNzYsIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgCi0gICAgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA3MiwgNjUsIDc4LCAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCAKLSAgICA3MiwgNjUsIDEyOCwgNzQsIDY5LCA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIAotICAgIDc0LCA2OSwgODIsIDY1LCAyMDYsIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgCi0gICAgMTI4LCA3NCwgNjksIDIwMCwgNzQsIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA2NSwgNzgsIDgzLCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCAKLSAgICA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIAotICAgIDc4LCA2OSwgODMsIDE5NywgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIAotICAgIDY1LCA3MywgMTI4LCA3NCwgNjUsIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgCi0gICAgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCAKLSAgICA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIAotICAgIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgCi0gICAgMTkzLCA3MywgODksIDY5LCA3NSwgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAKLSAgICAxMjgsIDczLCA4NSwgMTI4LCA3MywgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCAKLSAgICA4NCwgNjksIDc3LCAxMjgsIDczLCA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIAotICAgIDgzLCA3OSwgMjA2LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgNjUsIDc1LCA3MywgCi0gICAgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIDQ1LCA2NywgNzksIAotICAgIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgNjksIDE5NiwgCi0gICAgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAxOTMsIDczLCAKLSAgICA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIDgzLCA3MywgNjYsIAotICAgIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgCi0gICAgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCA2NywgNjksIDgyLCAKLSAgICAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIAotICAgIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIAotICAgIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDc5LCA2NywgNzUsIAotICAgIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgCi0gICAgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIDczLCA3OCwgODQsIAotICAgIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIAotICAgIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgNjksIDc4LCA4NCwgCi0gICAgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgCi0gICAgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgNjksIAotICAgIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAyMTAsIAotICAgIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCA3OCwgCi0gICAgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIDY1LCAKLSAgICA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgODUsIAotICAgIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgCi0gICAgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIDczLCAKLSAgICA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCA3MywgCi0gICAgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIDc4LCAKLSAgICA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgNzMsIAotICAgIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDE5NywgCi0gICAgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAxOTksIDczLCAKLSAgICA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCA3OCwgNDUsIAotICAgIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIDY5LCA4MiwgCi0gICAgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDczLCAKLSAgICA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIDczLCA4MywgNjksIAotICAgIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgNzcsIDczLCAyMDYsIAotICAgIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCAKLSAgICA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDY4LCA3MywgNjUsIAotICAgIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCAKLSAgICA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIAotICAgIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDczLCA3NiwgCi0gICAgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCA3NCwgMTI4LCA3MywgCi0gICAgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCA3MywgNzEsIDcxLCAKLSAgICA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCi0gICAgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKLSAgICA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MywgCi0gICAgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCAKLSAgICA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgMTI4LCA3MywgNjgsIAotICAgIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2OCwgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1NCwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA2OSwgNTYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTcsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTIsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NywgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MSwgNjcsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNjUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIDEyOCwgNzMsIAotICAgIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgCi0gICAgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIDg5LCA4MiwgMTI4LCAKLSAgICA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCA0OSwgNTAsIDEyOCwgNzMsIAotICAgIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDEyOCwgNzMsIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIAotICAgIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIDg1LCAxMjgsIDczLCA0NSwgCi0gICAgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgMTI4LCA3MywgNDUsIDg5LCAKLSAgICA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgMTI4LCA3MywgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCA3MywgNDUsIDY2LCA2OSwgCi0gICAgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIDEyOCwgNzIsIDkwLCAKLSAgICA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIDcyLCA5MCwgOTAsIAotICAgIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIDcyLCA5MCwgNzEsIAotICAgIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgNjgsIDczLCA2NSwgCi0gICAgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcyLCAKLSAgICA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgCi0gICAgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDg4LCA4NSwgNzksIAotICAgIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgODAsIDEyOCwgNzIsIAotICAgIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgODgsIDczLCA4MCwgCi0gICAgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIDg4LCAxMjgsIDcyLCAKLSAgICA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIDg4LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIDcyLCA4NywgNjUsIAotICAgIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgODIsIDY1LCA3OCwgCi0gICAgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCA3MiwgODUsIDc4LCAKLSAgICA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIAotICAgIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgNzIsIDg1LCA2NiwgCi0gICAgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCA2NSwgNjgsIDY4LCAKLSAgICA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIDc4LCA3MywgMTkzLCAKLSAgICA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIDg1LCA4MywgMTk3LCAKLSAgICA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgCi0gICAgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCA3NiwgMTI4LCA3MiwgCi0gICAgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgODMsIDY5LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAotICAgIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCAKLSAgICA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCi0gICAgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIAotICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKLSAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCi0gICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIAotICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCAKLSAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgMTkzLCA3MiwgNzksIDc5LCAKLSAgICA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgNzIsIDc5LCA3OSwgNzUsIAotICAgIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCA2OSwgMjE3LCA3MiwgCi0gICAgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIAotICAgIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDc5LCA3NiwgCi0gICAgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCA3OSwgNzMsIDEyOCwgCi0gICAgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIDc5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgMTI4LCA3MiwgNzgsIAotICAgIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgNzgsIDczLCA4MCwgCi0gICAgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIDg4LCAxMjgsIDcyLCAKLSAgICA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIDc4LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgMTI4LCA3MiwgNzcsIAotICAgIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgNzIsIDc3LCA4OSwgCi0gICAgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgODgsIDEyOCwgCi0gICAgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDcyLCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIDcyLCA3NywgNzksIAotICAgIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgNzksIDEyOCwgNzIsIAotICAgIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgNzIsIDc3LCA3MywgCi0gICAgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIDEyOCwgNzIsIDc3LCAKLSAgICA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCAKLSAgICA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgODAsIDEyOCwgNzIsIAotICAgIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgCi0gICAgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIDg1LCAxMjgsIDcyLCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIDc2LCA3MywgODgsIAotICAgIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgCi0gICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCA2NSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCA3MiwgNzUsIDEyOCwgCi0gICAgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIDczLCA4MiwgNzMsIDgxLCAKLSAgICAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MiwgNjksIAotICAgIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIDY5LCA2OSwgNzYsIDY5LCAKLSAgICAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgMjAwLCA3MiwgCi0gICAgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgMTI4LCA3MiwgNzMsIDY4LCAKLSAgICA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAxMjgsIDcyLCA3MywgNjYsIAotICAgIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIDg1LCAxMjgsIDcyLCA3MiwgCi0gICAgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIDY1LCA2NSwgMTI4LCA3MiwgCi0gICAgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA4MiwgNjUsIAotICAgIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCA4NSwgMTI4LCA3MiwgCi0gICAgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDczLCAKLSAgICA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgODIsIDY5LCAxMjgsIAotICAgIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCA3OCwgNzEsIDEyOCwgCi0gICAgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDg0LCAxMjgsIDcyLCAKLSAgICA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgNzksIDgwLCA4NCwgNjksIAotICAgIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA3MywgODMsIDY5LCA3MywgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIDIxNywgNzIsIDY5LCAKLSAgICA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgODIsIDg0LCA4MywgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCA2NSwgODIsIDg0LCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgCi0gICAgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCAKLSAgICA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIDY1LCA4MywgCi0gICAgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgNjUsIDg1LCAKLSAgICA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCA2NSwgODQsIAotICAgIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIDcyLCA2NSwgCi0gICAgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAxMjgsIAotICAgIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MiwgCi0gICAgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgNzIsIDY1LCAKLSAgICA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAyMTEsIAotICAgIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIDY1LCA3OCwgCi0gICAgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIAotICAgIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIDcxLCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgNzYsIDcwLCAKLSAgICA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCA2OSwgODIsIAotICAgIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgMTI4LCA3MiwgCi0gICAgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCA3NiwgNjUsIAotICAgIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIDY1LCA3MCwgCi0gICAgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY1LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NiwgMTI4LCAKLSAgICA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDEyOCwgNzIsIAotICAgIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgODUsIDEyOCwgCi0gICAgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgCi0gICAgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgNzEsIDg5LCAKLSAgICA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgODYsIDEyOCwgCi0gICAgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNjUsIDc3LCAKLSAgICA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA3MSwgODUsIAotICAgIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgODIsIDEyOCwgNzEsIAotICAgIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgMTI4LCA3MSwgODUsIAotICAgIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCA2OCwgCi0gICAgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIAotICAgIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIDcxLCA4NCwgNjksIAotICAgIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIDgyLCA3OSwgODcsIAotICAgIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgNzIsIDczLCA4MywgCi0gICAgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA3MywgNzcsIDY1LCAKLSAgICA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIDY5LCA2OSwgCi0gICAgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCAKLSAgICA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIAotICAgIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgODYsIDY5LCA4OSwgCi0gICAgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDcxLCA4MiwgCi0gICAgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIDgzLCAxMjgsIDcxLCAKLSAgICA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgNjUsIDgwLCA2OSwgODMsIAotICAgIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCA3MSwgODIsIDY1LCA2OCwgCi0gICAgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIDY1LCA2NywgMTk3LCAKLSAgICA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgODQsIAotICAgIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDgzLCA4OSwgCi0gICAgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDcxLCAKLSAgICA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgNzgsIDcxLCAxMjgsIDcxLCAKLSAgICA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgNzEsIDc5LCA2NiwgNzYsIAotICAgIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCA3OSwgNjUsIDEyOCwgNzEsIAotICAgIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzEsIDc2LCA3OSwgCi0gICAgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgNzksIDY2LCAxOTcsIDcxLCAKLSAgICA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIDIwMCwgNzEsIDc2LCA2NSwgNzEsIAotICAgIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIDcxLCA3MywgODgsIDEyOCwgNzEsIAotICAgIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIDcxLCA3MywgODMsIDY1LCA3NiwgCi0gICAgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgMTI4LCA3MSwgNzMsIDgyLCAKLSAgICA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgODIsIDE3OCwgNzEsIDczLCAKLSAgICA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAxMjgsIDcxLCA3MywgNzcsIAotICAgIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCA2OSwgODQsIDEyOCwgNzEsIAotICAgIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIDczLCA2NiwgNjUsIDEyOCwgCi0gICAgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgNzIsIDg1LCAxMjgsIDcxLCAKLSAgICA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAxMjgsIDcxLCA3MiwgNzMsIAotICAgIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3OCwgCi0gICAgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCAKLSAgICA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODUsIAotICAgIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCA3MSwgNzIsIDY5LCA2OSwgCi0gICAgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIDEyOCwgNzEsIDcyLCA2NSwgCi0gICAgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIAotICAgIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCA3NywgNjUsIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNjUsIDEyOCwgNzEsIAotICAgIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDcxLCA3MSwgCi0gICAgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgNzksIAotICAgIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDg0LCAxMjgsIAotICAgIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgNjksIDEyOCwgCi0gICAgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgODAsIDEyOCwgNzEsIDcxLCAKLSAgICA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgNzEsIDY5LCA4NCwgMTkzLCAKLSAgICA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIDEyOCwgNzEsIDY5LCA4MywgNzIsIAotICAgIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgNjksIDgzLCA3MiwgNTAsIDEyOCwgCi0gICAgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCA3NywgNjUsIDIwNiwgNzEsIDY5LCAKLSAgICA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIAotICAgIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgCi0gICAgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIAotICAgIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgCi0gICAgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIAotICAgIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIAotICAgIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIAotICAgIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgCi0gICAgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCAKLSAgICA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIAotICAgIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgCi0gICAgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIAotICAgIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAKLSAgICAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIAotICAgIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgCi0gICAgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCAKLSAgICA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIAotICAgIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIAotICAgIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgCi0gICAgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCAKLSAgICA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIDY1LCA2OCwgMTI4LCA3MSwgNjUsIAotICAgIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzEsIAotICAgIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIDcxLCA0OCwgNTMsIDUwLCAxMjgsIAotICAgIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgNTIsIDU3LCAxMjgsIDcxLCA0OCwgCi0gICAgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgNjUsIAotICAgIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIDQ4LCA1MiwgNDksIDEyOCwgNzEsIAotICAgIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgCi0gICAgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCA3MSwgNDgsIDUxLCA1MSwgMTI4LCAKLSAgICA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIDUxLCA0OCwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCA1MCwgNDksIDEyOCwgNzEsIDQ4LCAKLSAgICA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIDU3LCAxMjgsIDcxLCA0OCwgNDksIAotICAgIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIDcxLCA0OCwgNDksIDUzLCAxMjgsIAotICAgIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgNDksIDUwLCAxMjgsIDcxLCA0OCwgCi0gICAgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCA0OCwgMTI4LCA3MSwgNDgsIDQ4LCAKLSAgICA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgCi0gICAgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAxMjgsIDcwLCA4OSwgODQsIDEyOCwgCi0gICAgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgNzAsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAxMjgsIDcwLCA4NiwgODMsIDUxLCAKLSAgICAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCA4NSwgODgsIDEyOCwgNzAsIDg1LCAKLSAgICA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCA4NSwgODIsIDg4LCAxMjgsIDcwLCAKLSAgICA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIAotICAgIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgCi0gICAgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgCi0gICAgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIDgyLCAxOTMsIDcwLCA4MiwgNzksIDg3LCAKLSAgICA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIAotICAgIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgCi0gICAgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCAKLSAgICA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIAotICAgIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgCi0gICAgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCAKLSAgICA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIAotICAgIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCAKLSAgICA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIAotICAgIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg3LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCAKLSAgICA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIAotICAgIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgCi0gICAgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCAKLSAgICA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIAotICAgIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIAotICAgIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgCi0gICAgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCAKLSAgICA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIDcxLCA4OSwgMTI4LCA3MCwgMjA3LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCAKLSAgICA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgCi0gICAgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCAKLSAgICA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIAotICAgIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgCi0gICAgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCAKLSAgICA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIAotICAgIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgCi0gICAgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCAKLSAgICA3MCwgNzYsIDY1LCA3MSwgODMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIAotICAgIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgCi0gICAgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCAKLSAgICA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIAotICAgIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDczLCA4NiwgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAKLSAgICAxMjgsIDcwLCA3MywgODMsIDg0LCA2OSwgMTk2LCA3MCwgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIAotICAgIDc4LCAxOTksIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgCi0gICAgMjAzLCA3MCwgNzMsIDgzLCA3MiwgNjksIDg5LCA2OSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAKLSAgICAyMDAsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIAotICAgIDgyLCA3NSwgODMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgCi0gICAgNzAsIDczLCA4MiwgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCAKLSAgICA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIAotICAgIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgCi0gICAgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgCi0gICAgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKLSAgICA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCi0gICAgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCAKLSAgICA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgCi0gICAgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgCi0gICAgODUsIDg4LCAxMjgsIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCAKLSAgICA4NiwgNjUsIDc2LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIAotICAgIDY5LCA4MiwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAKLSAgICAyMDAsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIAotICAgIDc4LCAxOTcsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgCi0gICAgNzYsIDc2LCA3OSwgODcsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCAKLSAgICA3MCwgNjksIDcyLCAxMjgsIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIAotICAgIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgCi0gICAgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCAKLSAgICA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODksIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgCi0gICAgNjUsIDIxNiwgNzAsIDY1LCA4NCwgNzMsIDcxLCA4NSwgNjksIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCAKLSAgICA3MCwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIAotICAgIDcyLCA2NSwgODQsIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgCi0gICAgNjUsIDg0LCAxMjgsIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODEsIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgCi0gICAgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCAKLSAgICA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCA3MywgNzgsIDE5OSwgNzAsIDY1LCA3NiwgNzYsIAotICAgIDY5LCAyMDYsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgCi0gICAgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgNzksIDgyLCA4OSwgMTI4LCAKLSAgICA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIAotICAgIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAKLSAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIAotICAgIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgCi0gICAgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCAKLSAgICA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCAKLSAgICA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIAotICAgIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIAotICAgIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAKLSAgICAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCAKLSAgICA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgCi0gICAgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCAKLSAgICA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIAotICAgIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIAotICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgCi0gICAgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgCi0gICAgMTI4LCA2OSwgODksIDY5LCA4MywgMTI4LCA2OSwgODksIDY5LCA3MSwgNzYsIDY1LCA4MywgODMsIDY5LCA4MywgMTI4LCAKLSAgICA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIAotICAgIDg4LCA4NCwgODIsIDY1LCA4NCwgNjksIDgyLCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA2OSwgODgsIDg0LCAKLSAgICA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzIsIDczLCA3MSwgMjAwLCA2OSwgODgsIAotICAgIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY5LCA4OCwgCi0gICAgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCA3NiwgNjksIDgzLCAyMTEsIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIAotICAgIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIDY5LCA4OCwgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIAotICAgIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCi0gICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIAotICAgIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgNjksIDEyOCwgNjksIDg4LCA2NywgNjksIDgzLCA4MywgCi0gICAgMTI4LCA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA4NywgNjksIDEyOCwgNjksIDg2LCAKLSAgICA2OSwgODIsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY5LCA4NSwgODIsIAotICAgIDc5LCA4MCwgNjksIDY1LCAyMDYsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDQ1LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAxMjgsIDY5LCA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIDIxNywgNjksIDg1LCA4MiwgCi0gICAgMjA3LCA2OSwgODUsIDc2LCA2OSwgMjEwLCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA3OSwgMTI4LCA2OSwgCi0gICAgODUsIDQ1LCA2OSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY1LCAxMjgsIDY5LCA4NCwgODgsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCA4NCwgNjUsIDEyOCwgNjksIAotICAgIDg0LCA3MiwgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIDgyLCA3OCwgNzMsIDg0LCA4OSwgCi0gICAgMTI4LCA2OSwgODQsIDY2LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgMTI4LCA2OSwgODMsIDg0LCAKLSAgICA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgMTk2LCA2OSwgODMsIAotICAgIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIDE3OCwgNjksIDgzLCA3MiwgCi0gICAgNDksIDU0LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA2NywgMTI4LCA2OSwgODMsIDY1LCAKLSAgICAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCA2NiwgNjUsIDgyLCA4MiwgNjksIAotICAgIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIDgyLCA3MSwgMTI4LCA2OSwgODIsIAotICAgIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAyMTIsIDY5LCA4MSwgODUsIDczLCA2OCwgCi0gICAgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA2OSwgODEsIDg1LCA2NSwgNzYsIDgzLCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA2OSwgODEsIDg1LCA2NSwgNzYsIDEyOCwgNjksIDgwLCA4MywgNzMsIAotICAgIDc2LCA3OSwgNzgsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgMjA2LCA2OSwgODAsIDc5LCA2NywgNzIsIDEyOCwgCi0gICAgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA2OSwgODAsIDczLCA2OCwgNjUsIDg1LCA4MiwgNjksIAotICAgIDY1LCAyMDYsIDY5LCA4MCwgNjksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNjksIDgwLCA2OSwgNzEsIDY5LCA4MiwgCi0gICAgNzcsIDY1LCAxMjgsIDY5LCA3OSwgODQsIDEyOCwgNjksIDc5LCA3NywgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgCi0gICAgNjksIDc5LCA3NiwgMTI4LCA2OSwgNzksIDcyLCAxMjgsIDY5LCA3OCwgODksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCAKLSAgICA3OSwgODAsIDY5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCAxOTcsIDY5LCA3OCwgODUsIDc3LCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA3OCwgODQsIDgyLCA4OSwgNDUsIDUwLCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgCi0gICAgNDUsIDQ5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2OSwgNzgsIDg0LCAKLSAgICA3MiwgODUsIDgzLCA3MywgNjUsIDgzLCA3NywgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDgwLCA4MiwgNzMsIDgzLCA2OSwgCi0gICAgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDg0LCA2OSwgODIsIDEyOCwgNjksIDc4LCAKLSAgICA4NCwgNjksIDIxMCwgNjksIDc4LCA4MSwgODUsIDczLCA4MiwgODksIDEyOCwgNjksIDc4LCA4MSwgMTI4LCA2OSwgNzgsIAotICAgIDc5LCAyMTEsIDY5LCA3OCwgNzgsIDEyOCwgNjksIDc4LCA3NiwgNjUsIDgyLCA3MSwgNjksIDc3LCA2OSwgNzgsIDg0LCAKLSAgICAxMjgsIDY5LCA3OCwgNzEsIDczLCA3OCwgNjksIDEyOCwgNjksIDc4LCA2OCwgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgCi0gICAgMTI4LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjksIDc4LCA2OCwgNjksIDgwLCAxMjgsIDY5LCA3OCwgNjgsIDY5LCAKLSAgICA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNjksIAotICAgIDc4LCA2NywgNzYsIDc5LCA4MywgODUsIDgyLCA2OSwgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA3MywgNzgsIDE5OSwgCi0gICAgNjksIDc4LCA2NywgMTI4LCA2OSwgNzgsIDY1LCA4MiwgODgsIDczLCAyMTEsIDY5LCA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCAKLSAgICA3MywgNzksIDIxMSwgNjksIDc3LCA4MCwgODQsIDIxNywgNjksIDc3LCA4MCwgNzIsIDY1LCA4NCwgNzMsIDE5NSwgNjksIAotICAgIDc3LCA4MCwgNzIsIDY1LCA4MywgNzMsIDIxMSwgNjksIDc3LCA2NiwgODIsIDc5LCA3MywgNjgsIDY5LCA4MiwgODksIDEyOCwgCi0gICAgNjksIDc3LCA2NiwgNzYsIDY5LCA3NywgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNzYsIDc2LCA3MywgODMsIDcyLCA3NywgNjksIAotICAgIDc4LCA4NCwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDY5LCA3NiwgODQsIDEyOCwgCi0gICAgNjksIDc2LCA3NiwgNzMsIDgwLCA4NCwgNzMsIDE5NSwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNzMsIDgzLCAxMjgsIDY5LCAKLSAgICA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIAotICAgIDc4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDY5LCA3NiwgCi0gICAgNjksIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDY1LCA3OCwgODQsIDEyOCwgNjksIDc2LCA2OSwgNzcsIDY5LCAKLSAgICA3OCwgMjEyLCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIAotICAgIDczLCAxOTUsIDY5LCA3NiwgNjUsIDcwLCA4MiwgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDg0LCA4MiwgNjksIDgwLCA4NCwgCi0gICAgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDEyOCwgNjksIDc1LCA3MCwgNzksIDc4LCA3MywgODQsIDczLCA3NSwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2OSwgNzQsIDY5LCA2NywgMjEyLCA2OSwgNzMsIDgzLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgODksIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAyMTcsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIAotICAgIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDIxMSwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMTI4LCA2OSwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDIwNiwgNjksIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDY5LCAxMjgsIDY5LCA3MiwgODcsIAotICAgIDY1LCAyMTgsIDY5LCA3MSwgODksIDgwLCA4NCwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA3MywgCi0gICAgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgNjksIDc1LCAKLSAgICA2NSwgNjUsIDEyOCwgNjksIDY5LCA3MiwgMTI4LCA2OSwgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAKLSAgICAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgNjksIAotICAgIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCA2OSwgCi0gICAgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIDc3LCAKLSAgICA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgNjgsIAotICAgIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCA0OCwgCi0gICAgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAKLSAgICA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgMTI4LCAKLSAgICA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgNDgsIAotICAgIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCA1MCwgCi0gICAgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIDEyOCwgCi0gICAgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDY5LCAKLSAgICA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgNDksIAotICAgIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIDEyOCwgCi0gICAgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIDQ4LCAKLSAgICA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCA2OSwgCi0gICAgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCAKLSAgICA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCAKLSAgICA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIAotICAgIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIAotICAgIDkwLCA2NSwgNjUsIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCAKLSAgICA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCAKLSAgICA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIAotICAgIDg2LCA2OCwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgCi0gICAgMTI4LCA2OCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIAotICAgIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIAotICAgIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIDIwNCwgNjgsIDg1LCA3MiwgMTI4LCA2OCwgODUsIAotICAgIDcxLCA4NSwgNjgsIDEyOCwgNjgsIDg1LCA2NiwgNTAsIDEyOCwgNjgsIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIAotICAgIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIDgyLCA4NSwgNzcsIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIAotICAgIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgCi0gICAgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA2OCwgODIsIDc5LCA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCAKLSAgICA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDg2LCAxOTcsIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIAotICAgIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgMTI4LCA2OCwgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OCwgCi0gICAgODIsIDY1LCA3NywgMTI4LCA2OCwgODIsIDY1LCAyMDUsIDY4LCA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCAKLSAgICA2NSwgNzEsIDc5LCAyMDYsIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDY1LCA4MywgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAKLSAgICAxOTMsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIAotICAgIDY4LCAyMTEsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDc5LCA4NywgCi0gICAgNzgsIDEyOCwgNjgsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCA4NSwgNzEsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIAotICAgIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgCi0gICAgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKLSAgICA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAKLSAgICA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIAotICAgIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc3LCA2NSwgCi0gICAgNzMsIDIwNiwgNjgsIDc5LCA3NiwgODAsIDcyLCA3MywgNzgsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDgzLCAxMjgsIDY4LCAKLSAgICA3OSwgNzYsIDc2LCA2NSwgMjEwLCA2OCwgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgNzUsIDc3LCA2NSwgNzMsIAotICAgIDEyOCwgNjgsIDc5LCA3MywgODQsIDEyOCwgNjgsIDc5LCA3MSwgMTI4LCA2OCwgNzksIDE5OSwgNjgsIDc5LCA2OSwgMjExLCAKLSAgICA2OCwgNzksIDY4LCA2OSwgNzUsIDY1LCA4NCwgNjUsIDEyOCwgNjgsIDc5LCA2NiwgODIsIDc5LCAxMjgsIDY4LCA3OSwgNjUsIAotICAgIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCAKLSAgICA2OSwgMTk3LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCA3NywgMTI4LCA2OCwgMjA1LCA2OCwgCi0gICAgNzYsIDg1LCAxMjgsIDY4LCA3NiwgNzksIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgCi0gICAgNjgsIDc2LCA3MiwgNjUsIDEyOCwgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIDEyOCwgCi0gICAgNjgsIDc1LCA2NSwgODIsIDEyOCwgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIDY4LCAKLSAgICA3NCwgNjksIDgyLCA4NiwgMTI4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDczLCA5MCwgOTAsIAotICAgIDIxNywgNjgsIDczLCA4NiwgNzksIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDEyOCwgCi0gICAgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTk2LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3MywgODYsIDczLCAKLSAgICA2OCwgMTk3LCA2OCwgNzMsIDg2LCA2OSwgODIsIDcxLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNzMsIDg0LCA4NCwgCi0gICAgMjA3LCA2OCwgNzMsIDgzLCA4NCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc4LCAKLSAgICA3MSwgODUsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgNjgsIDczLCA4MywgODMsIAotICAgIDc5LCA3NiwgODYsIDY5LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCAxMjgsIDY4LCA3MywgCi0gICAgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDc1LCAxMjgsIDY4LCA3MywgODMsIDczLCAKLSAgICA3NywgNzksIDg1LCAxMjgsIDY4LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIAotICAgIDg1LCA3OSwgODUsIDIxMSwgNjgsIDczLCA4MywgMTk1LCA2OCwgNzMsIDgzLCA2NSwgODAsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDE5NiwgNjgsIDczLCA4MywgNjUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDczLCA4MiwgNzEsIDE5MywgNjgsIDczLCAKLSAgICA4MiwgNjksIDY3LCA4NCwgNzYsIDIxNywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIAotICAgIDczLCA4MCwgODQsIDY5LCAxMjgsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDc5LCA4NSwgCi0gICAgNzgsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDczLCAxMjgsIDY4LCA3MywgODAsIDc2LCAyMDEsIDY4LCA3MywgNzgsIDcxLCAKLSAgICA2NiwgNjUsIDIxMiwgNjgsIDczLCAyMDYsIDY4LCA3MywgNzcsIDc3LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNzcsIAotICAgIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCAKLSAgICA3OSwgNzgsIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIAotICAgIDY4LCA3MywgNzcsIDczLCA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA3NywgNzMsIDY4LCAKLSAgICA3MywgMTkzLCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDc3LCA2OSwgNzgsIAotICAgIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA3NywgNTAsIDEyOCwgNjgsIDczLCA3NiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAKLSAgICA3OSwgMjExLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIAotICAgIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAxMjgsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY4LCA3MywgCi0gICAgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCA3MywgNzEsIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAKLSAgICAyMTEsIDY4LCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIAotICAgIDg0LCAyMTcsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgCi0gICAgNzAsIDY5LCA4MiwgNjksIDc4LCA4NCwgNzMsIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIAotICAgIDY3LCAxOTcsIDY4LCA3MywgNzAsIDY1LCA4NCwgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgCi0gICAgNjksIDgzLCA3MywgMjExLCA2OCwgNzMsIDY5LCA4MCwgMTI4LCA2OCwgNzMsIDE5NywgNjgsIDczLCA2NiwgMTI4LCA2OCwgCi0gICAgNzMsIDY1LCA4NCwgNzksIDc4LCA3OSwgMjA2LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjgsIDczLCAKLSAgICA2NSwgODMsIDg0LCA3OSwgNzYsIDIwMSwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIDgzLCAxMjgsIDY4LCA3MywgNjUsIAotICAgIDc3LCA3OSwgNzgsIDY4LCAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDE5NiwgNjgsIDczLCA2NSwgNzcsIDY5LCA4NCwgCi0gICAgNjksIDIxMCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCA2NSwgMTI4LCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCAKLSAgICA3MywgNzUsIDE5MywgNjgsIDczLCA2NSwgNzYsIDY5LCA2NywgODQsIDQ1LCAyMDgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIAotICAgIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgCi0gICAgNzMsIDkwLCA2OSwgMTk2LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDY5LCAKLSAgICA4MiwgNjksIDgzLCA3MywgMjExLCA2OCwgNzIsIDc5LCA4NSwgMTI4LCA2OCwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIAotICAgIDc5LCAxMjgsIDY4LCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgODUsIDEyOCwgNjgsIDcyLCA3MiwgNzksIDc5LCAxMjgsIAotICAgIDY4LCA3MiwgNzIsIDc5LCAxMjgsIDY4LCA3MiwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgCi0gICAgNzIsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA2NSwgMTI4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA4MiwgNzcsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2NSwgODQsIAotICAgIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA3MiwgNjUsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDcyLCA2NSwgCi0gICAgNjUsIDc2LCA4NSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgCi0gICAgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMywgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMSwgNjgsIDY5LCAKLSAgICA4OCwgNzMsIDY1LCAxMjgsIDY4LCA2OSwgODYsIDczLCA2NywgMTk3LCA2OCwgNjksIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIDIwMywgNjgsIDY5LCA4MywgCi0gICAgNzMsIDcxLCA3OCwgMTI4LCA2OCwgNjksIDgzLCA3MywgMTI4LCA2OCwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIAotICAgIDY4LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDY4LCA2OSwgCi0gICAgODIsIDY5LCA4NCwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDY4LCA2OSwgODAsIDY1LCAKLSAgICA4MiwgODQsIDc3LCA2OSwgNzgsIDIxMiwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgNzgsIAotICAgIDg0LCA3MywgODMsIDg0LCA4MiwgMjE3LCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgCi0gICAgNzgsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCAKLSAgICA2OSwgNzgsIDc4LCA2OSwgNzgsIDEyOCwgNjgsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA3OCwgMTk3LCA2OCwgNjksIAotICAgIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA2OCwgNjksIDc2LCA4NCwgNjUsIDEyOCwgNjgsIDY5LCA3NiwgODQsIDE5MywgCi0gICAgNjgsIDY5LCA3NiwgODQsIDEyOCwgNjgsIDY5LCA3NiwgODAsIDcyLCA3MywgMTk1LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCAKLSAgICA4MiwgMjE3LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjgsIDY5LCA3NiwgNzMsIAotICAgIDc3LCA3MywgODQsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDIxMCwgNjgsIDY5LCA3NiwgCi0gICAgNzMsIDY3LCA3MywgNzksIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAKKyAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA3MywgMTI4LCA4MiwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA3NCwgNjksIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgNjksIDgyLCAKKyAgICAxMjgsIDgyLCA3MywgODQsIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIDEyOCwgODIsIAorICAgIDczLCA4NCwgODMsIDczLCAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDgyLCA2NSwgMTI4LCA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzgsIDcwLCAKKyAgICA3OSwgODIsIDkwLCA2NSwgNzgsIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCA2NSwgCisgICAgMTI4LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDgyLCAKKyAgICA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgCisgICAgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgCisgICAgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgCisgICAgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCAKKyAgICA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCAKKyAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgCisgICAgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgCisgICAgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAKKyAgICAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCA2NiwgNjYsIDc5LCA3OCwgMTI4LCAKKyAgICA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCAKKyAgICA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCA3OCwgCisgICAgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA2OSwgODYsIDc5LCA3NiwgODYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDg2LCAKKyAgICA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDg2LCA3NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzMsIAorICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgCisgICAgMTk2LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAxOTcsIDgyLCA2OSwgODUsIDg4LCAxMjgsIDgyLCA2OSwgODUsIDEyOCwgCisgICAgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCAKKyAgICA3MCwgNzYsIDY5LCAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCA4MiwgODQsIAorICAgIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDc5LCA3OSwgCisgICAgNzcsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCAKKyAgICA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCAKKyAgICA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgCisgICAgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDg0LCA3MywgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCAKKyAgICA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIDgwLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgODAsIDY1LCAxMjgsIAorICAgIDgyLCA2OSwgODAsIDE5MywgODIsIDY5LCA3OCwgODQsIDc5LCA3MSwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDEyOCwgCisgICAgODIsIDY5LCAyMDYsIDgyLCA2OSwgNzcsIDg1LCAxMjgsIDgyLCA2OSwgNzcsIDY5LCA2OCwgODksIDEyOCwgODIsIDY5LCAKKyAgICA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA2OSwgODYsIDY5LCAxOTYsIDgyLCA2OSwgNzYsIAorICAgIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3NiwgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIAorICAgIDE5OSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUyLCAxMjgsIDgyLCA2OSwgCisgICAgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTEsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MCwgMTI4LCAKKyAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCAyMTEsIDgyLCA2OSwgNzEsIAorICAgIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIDY5LCA3MSwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3MSwgCisgICAgNzMsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgNzMsIDY1LCAxMjgsIDgyLCA2OSwgNzAsIDc5LCA4MiwgNzcsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA4MiwgNjksIDY4LCA4NSwgODAsIDc2LCA3MywgNjcsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgCisgICAgODksIDY3LCA3NiwgNjksIDE5NiwgODIsIDY5LCA2NywgODQsIDczLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCAKKyAgICA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCA2OSwgCisgICAgMTI4LCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIAorICAgIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgCisgICAgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCAKKyAgICA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgCisgICAgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgCisgICAgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIAorICAgIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgCisgICAgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCAKKyAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgCisgICAgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgMTI4LCAKKyAgICA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNzMsIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIAorICAgIDc5LCA4NywgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCA4OSwgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAKKyAgICAyMTcsIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCAKKyAgICA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgMjAwLCA4MiwgNjUsIDcyLCAxMjgsIDgyLCA2NSwgNzAsIAorICAgIDY5LCAxMjgsIDgyLCA2NSwgNjksIDc3LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDY4LCA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCAKKyAgICA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIDgyLCA2NSwgNjcsIDgxLCA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDg0LCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgCisgICAgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgCisgICAgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCAKKyAgICA1NSwgMTI4LCA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA4MiwgNDgsIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgCisgICAgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgCisgICAgODIsIDQ4LCA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIAorICAgIDU3LCAxMjgsIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDgyLCA0OCwgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgCisgICAgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIAorICAgIDg4LCAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIAorICAgIDgyLCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIAorICAgIDY5LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIAorICAgIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIAorICAgIDY1LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIAorICAgIDg2LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgCisgICAgODksIDY1LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODEsIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIAorICAgIDc1LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA4NCwgNjksIDgzLCA4MywgNjksIDc4LCA2NywgNjksIDEyOCwgODEsIDg1LCA3MywgCisgICAgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIDc4LCA2NywgODUsIDc4LCA4OCwgMTI4LCAKKyAgICA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgNzYsIDc2LCAxMjgsIDgxLCA4NSwgNzMsIAorICAgIDY3LCAyMDMsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgCisgICAgNzgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgNjksIDIwNiwgODEsIDg1LCA2OSwgMTI4LCAKKyAgICA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIAorICAgIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCAKKyAgICA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIAorICAgIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgCisgICAgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIAorICAgIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIAorICAgIDgxLCA3OSwgNzksIDEyOCwgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIAorICAgIDEyOCwgODEsIDc5LCAxMjgsIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKKyAgICA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCAKKyAgICA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCAKKyAgICA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIAorICAgIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgCisgICAgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAxMjgsIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgCisgICAgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgCisgICAgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCAKKyAgICA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIAorICAgIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgCisgICAgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgCisgICAgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIAorICAgIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIAorICAgIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIAorICAgIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIAorICAgIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIAorICAgIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCAKKyAgICA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCA4NSwgMTI4LCA4MCwgODUsIDg0LCA4MiwgNjksIAorICAgIDcwLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgODQsIDEyOCwgODAsIDg1LCAyMTIsIDgwLCA4NSwgCisgICAgODMsIDcyLCA4MCwgNzMsIDc4LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA4MCwgNzMsIDc1LCA2NSwgMTI4LCA4MCwgODUsIDgzLCAKKyAgICA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCA4NSwgODIsIDgzLCA2OSwgMTI4LCA4MCwgODUsIAorICAgIDgyLCA4MCwgNzYsIDE5NywgODAsIDg1LCA4MiwgNzgsIDY1LCA3NywgNjUsIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgCisgICAgMTI4LCA4MCwgODUsIDgyLCA3MywgNzAsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDEyOCwgODAsIDg1LCA4MSwgMTI4LCA4MCwgCisgICAgODUsIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAxMjgsIDgwLCA4NSwgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgCisgICAgODAsIDg1LCA3OCwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCAKKyAgICA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDgwLCA4NSwgNzcsIDgwLCAxMjgsIDgwLCA4NSwgNzcsIDEyOCwgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgCisgICAgNzMsIDE5NSwgODAsIDg1LCA2NSwgODEsIDEyOCwgODAsIDg1LCA2NSwgNjksIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgCisgICAgODUsIDQ5LCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCA2NSwgNzIsIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgCisgICAgODMsIDczLCA3NiwgMjAxLCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAorICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCAKKyAgICA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgNzMsIAorICAgIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIAorICAgIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNjksIDY3LCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgCisgICAgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIAorICAgIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCisgICAgODIsIDc5LCA4MCwgNjksIDgyLCA4NCwgMjE3LCA4MCwgODIsIDc5LCA4MCwgNjksIDc2LCA3NiwgNjksIDIxMCwgODAsIDgyLCAKKyAgICA3OSwgNzksIDcwLCAxMjgsIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA3NiwgNjUsIAorICAgIDg0LCA3MywgNzksIDc4LCAxOTcsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjksIDgzLCA4MywgMTI4LCAKKyAgICA4MCwgODIsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA4MiwgNzksIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MCwgODIsIAorICAgIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIDg2LCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDE5NywgODAsIDgyLCA3MywgODYsIDY1LCA2NywgMjE3LCAKKyAgICA4MCwgODIsIDczLCA4MywgNzIsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODQsIDgyLCAxOTMsIDgwLCA4MiwgNzMsIDc4LCA4NCwgCisgICAgODMsIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc4LCAKKyAgICA2NywgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDczLCA3NywgNjksIDEyOCwgODAsIDgyLCA3MywgNzcsIDE5NywgODAsIAorICAgIDgyLCA2OSwgODYsIDczLCA3OSwgODUsIDIxMSwgODAsIDgyLCA2OSwgODMsIDY5LCA4NCwgMTI4LCA4MCwgODIsIDY5LCA4MywgCisgICAgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgCisgICAgNjksIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDczLCAKKyAgICA4MCwgNzMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDczLCA3OCwgMTk5LCA4MCwgODIsIAorICAgIDY5LCA2NywgNjksIDY4LCA2OSwgODMsIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDIxMSwgODAsIDgyLCA2OSwgCisgICAgNjcsIDY5LCA2OCwgNjksIDE5NiwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCAKKyAgICA2OCwgMTk3LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIAorICAgIDIwMSwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCA4OSwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgCisgICAgNzksIDIxNywgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKKyAgICA4NSwgNzksIDIwNiwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDY5LCAyMDEsIDgwLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA4MiwgNjUsIDIwNSwgODAsIDgyLCAxMjgsIDgwLCA4MCwgODYsIAorICAgIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODAsIDY1LCAxMjgsIDgwLCA3OSwgODksIDEyOCwgODAsIDc5LCA4OCwgMTI4LCAKKyAgICA4MCwgNzksIDg3LCA2OSwgODIsIDIxMSwgODAsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NSwgNzgsIDE5NiwgODAsIDc5LCA4NSwgCisgICAgNzYsIDg0LCA4MiwgMjE3LCA4MCwgNzksIDg1LCA2NywgNzIsIDEyOCwgODAsIDc5LCA4NCwgNjUsIDg0LCA3OSwgMTI4LCAKKyAgICA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDgwLCA3OSwgMjEyLCA4MCwgNzksIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIAorICAgIDg0LCA3MywgNzksIDIwNiwgODAsIDc5LCA4MywgODQsIDY2LCA3OSwgODgsIDEyOCwgODAsIDc5LCA4MywgODQsIDY1LCAKKyAgICAyMDQsIDgwLCA3OSwgODMsIDg0LCAxMjgsIDgwLCA3OSwgODMsIDIxMiwgODAsIDc5LCA4MywgODMsIDY5LCA4MywgODMsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDgyLCA4MiwgCisgICAgNjksIDY3LCA4NCwgODUsIDIxMSwgODAsIDc5LCA4MCwgODAsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDgwLCAxMjgsIDgwLCAKKyAgICA3OSwgMjA4LCA4MCwgNzksIDc5LCA2OCwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIAorICAgIDc5LCAxMjgsIDgwLCA3OSwgMjA2LCA4MCwgNzksIDc3LCA3NywgNjksIDY5LCAxMjgsIDgwLCA3OSwgNzcsIDc3LCA2OSwgCisgICAgMTk3LCA4MCwgNzksIDc2LCA3MywgODMsIDcyLCAxMjgsIDgwLCA3OSwgNzYsIDczLCA2NywgMTk3LCA4MCwgNzksIDc2LCAKKyAgICAyMDEsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzYsIDE5NywgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgNzMsIAorICAgIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAyMTEsIDgwLCA3OSwgCisgICAgNzMsIDc4LCA4NCwgNzksIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAKKyAgICA2OSwgMTk2LCA4MCwgNzksIDczLCA3OCwgODQsIDEyOCwgODAsIDc5LCA3MywgNzgsIDIxMiwgODAsIDc5LCA2OSwgODQsIAorICAgIDgyLCAyMTcsIDgwLCA3OSwgNjksIDg0LCA3MywgMTk1LCA4MCwgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgCisgICAgNzksIDY1LCAxMjgsIDgwLCA3OSwgMTI4LCA4MCwgMjA3LCA4MCwgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgCisgICAgODAsIDc2LCA4NSwgODQsIDc5LCAxMjgsIDgwLCA3NiwgODUsIDgzLCA0NSwgNzcsIDczLCA3OCwgODUsIDIxMSwgODAsIDc2LCAKKyAgICA4NSwgODMsIDEyOCwgODAsIDc2LCA4NSwgODIsIDY1LCA3NiwgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIAorICAgIDc2LCA4NSwgNzcsIDEyOCwgODAsIDc2LCA4NSwgNzUsIDEyOCwgODAsIDc2LCA4NSwgNzEsIDEyOCwgODAsIDc2LCA4NSwgCisgICAgMTI4LCA4MCwgNzYsIDc5LCA4NywgMTI4LCA4MCwgNzYsIDc5LCA4MCwgNzIsIDg1LCAxMjgsIDgwLCA3NiwgNjksIDg0LCAKKyAgICA3MiwgODIsIDc5LCA3OCwgMTI4LCA4MCwgNzYsIDY4LCAxMjgsIDgwLCA3NiwgNjUsIDg5LCA3MywgNzgsIDE5OSwgODAsIAorICAgIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgCisgICAgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCAKKyAgICA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIDY4LCA2OSwgMjEwLCA4MCwgNzYsIDY1LCA2NywgCisgICAgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCAKKyAgICA5MCwgOTAsIDY1LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIAorICAgIDcyLCA3MCwgNzksIDgyLCA3NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgCisgICAgMTI4LCA4MCwgNzMsIDgzLCA4NCwgNzksIDc2LCAxMjgsIDgwLCA3MywgODMsIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCAKKyAgICA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIAorICAgIDgwLCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDgwLCA3MywgODAsIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgCisgICAgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCAKKyAgICA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIAorICAgIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgCisgICAgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgCisgICAgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCAKKyAgICA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAorICAgIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKKyAgICA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCAKKyAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCAKKyAgICA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIAorICAgIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIAorICAgIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgCisgICAgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCAKKyAgICA3MywgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCAKKyAgICA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIAorICAgIDc5LCA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgCisgICAgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIAorICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKKyAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgCisgICAgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA4MCwgNzIsIAorICAgIDY1LCA4MiwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgMTI4LCA4MCwgNzIsIDY1LCA3NywgMTI4LCA4MCwgNzIsIDY1LCA3MywgCisgICAgODMsIDg0LCA3OSwgMjExLCA4MCwgNzIsIDY1LCA3MSwgODMsIDQ1LCA4MCwgMTkzLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCAKKyAgICA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDcwLCAKKyAgICAxMjgsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDgwLCA2OSwgODUsIDg0LCA2NSwgNjksIDEyOCwgODAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgCisgICAgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCAKKyAgICA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIAorICAgIDcyLCA1MCwgMTI4LCA4MCwgNjksIDgzLCA2OSwgODQsIDE5MywgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgCisgICAgMjA3LCA4MCwgNjksIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAKKyAgICA3OCwgNjUsIDIwNCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDIwNiwgODAsIAorICAgIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNjksIDg2LCA2OSwgODIsIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIAorICAgIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCA2OSwgODIsIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgCisgICAgNjksIDgyLCA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIAorICAgIDczLCAxMjgsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgCisgICAgODIsIDc3LCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCAKKyAgICA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIAorICAgIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCAKKyAgICA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCAKKyAgICA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIAorICAgIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgCisgICAgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKKyAgICAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIAorICAgIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIAorICAgIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCAKKyAgICA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIAorICAgIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgCisgICAgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgNjcsIDE5NywgODAsIDY4LCA3MywgMTI4LCA4MCwgNjgsIDcwLCAKKyAgICAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2NSwgODksIDY5LCAKKyAgICA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgODksIDEyOCwgODAsIAorICAgIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgCisgICAgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgODAsIDY1LCAKKyAgICA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCA4MCwgNjUsIDg0LCA2NSwgNzUsIAorICAgIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4MywgODUsIDgxLCAxMjgsIAorICAgIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCAKKyAgICA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgCisgICAgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIAorICAgIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDgzLCA2OSwgCisgICAgODEsIDEyOCwgODAsIDY1LCA4MywgNjUsIDc4LCA3MSwgNjUsIDIwNiwgODAsIDY1LCA4MiwgODUsIDc3LCAxMjgsIDgwLCAKKyAgICA2NSwgODIsIDg0LCAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIDczLCAyMDgsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MCwgNjUsIDgyLCAKKyAgICA4NCwgNzMsIDY1LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDIxMiwgODAsIAorICAgIDY1LCA4MiwgNzMsIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgODQsIDczLCA3MSwgNzcsIDY5LCAKKyAgICA3OCwgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAorICAgIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCAyMTEsIDgwLCA2NSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgCisgICAgNzYsIDY5LCAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4MCwgNjUsIDgyLCAKKyAgICA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgCisgICAgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgODAsIDY1LCA4MiwgNjUsIAorICAgIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgMTI4LCA4MCwgNjUsIDgwLCA2OSwgCisgICAgODIsIDY3LCA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAKKyAgICAyMDgsIDgwLCA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNzMsIAorICAgIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3OCwgCisgICAgNzEsIDcxLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDgyLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIAorICAgIDc4LCA3MSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgODksIDY1LCA4MiwgMTI4LCA4MCwgCisgICAgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCAKKyAgICA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIAorICAgIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjgsIDE5MywgODAsIDY1LCA3OCwgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgCisgICAgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCA3NSwgNjUsIDcyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIAorICAgIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgCisgICAgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA2NSwgNzcsIDY1LCA2OCwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIDEyOCwgODAsIDY1LCA3NiwgODUsIAorICAgIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgODAsIDY1LCA3NiwgMjA1LCA4MCwgCisgICAgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAxMjgsIDgwLCA2NSwgNzYsIDY5LCAKKyAgICA4NCwgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIAorICAgIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIDY1LCAyMDMsIDgwLCA2NSwgNzMsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgCisgICAgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIDIwMSwgODAsIDY1LCAKKyAgICA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODIsIDEyOCwgODAsIDY1LCA3MSwgMTk3LCA4MCwgNjUsIDY4LCA3NywgMTkzLCAKKyAgICA4MCwgNjUsIDY4LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgNjgsIDE5MywgODAsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIAorICAgIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNjUsIDcxLCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA4NCwgCisgICAgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCA2NSwgNjUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgODAsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgCisgICAgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgCisgICAgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIDQ4LCA1NiwgMTI4LCA4MCwgNDgsIDQ4LCAKKyAgICA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgMTI4LCA4MCwgNDgsIDQ4LCA1MiwgMTI4LCAKKyAgICA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgODAsIDQ4LCA0OCwgNTAsIDEyOCwgODAsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA4OSwgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgCisgICAgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDE5MywgCisgICAgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIDc5LCA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgCisgICAgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAKKyAgICAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCAKKyAgICA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAyMTAsIDc5LCA4NSwgODQsIDY2LCA3OSwgCisgICAgMjE2LCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAKKyAgICAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCAKKyAgICA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgCisgICAgMTkzLCA3OSwgODMsIDY3LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKKyAgICA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIAorICAgIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgMjEyLCA3OSwgODIsIDc1LCA3MiwgNzksIDIwNiwgCisgICAgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY5LCAKKyAgICA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDY4LCA2OSwgMjEwLCA3OSwgODIsIAorICAgIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgODAsIDg0LCA3MywgNzksIDIwNiwgCisgICAgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA3OCwgCisgICAgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgNjcsIDcyLCA4NSwgODMsIAorICAgIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCAKKyAgICAyMTAsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDczLCA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNzMsIDc4LCAxOTksIAorICAgIDc5LCA4MCwgNjksIDc4LCA0NSwgODAsIDEyOCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCAKKyAgICA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIAorICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzMsIDg0LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDc5LCA3OSwgOTAsIDY5LCAKKyAgICAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA3OSwgODUsIDEyOCwgNzksIDc5LCA3NywgODUsIAorICAgIDEyOCwgNzksIDc5LCA2OSwgMTI4LCA3OSwgNzksIDY2LCA3OSwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA3OCwgCisgICAgODUsIDEyOCwgNzksIDc4LCA4MywgODUsIDEyOCwgNzksIDc4LCA3OCwgMTI4LCA3OSwgNzgsIDc1LCA2NSwgODIsIDEyOCwgCisgICAgNzksIDc4LCA2OSwgODMsIDY5LCA3NiwgNzAsIDEyOCwgNzksIDc4LCA2OSwgNDUsIDg3LCA2NSwgMjE3LCA3OSwgNzgsIDY5LCAKKyAgICA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3OSwgNzgsIAorICAgIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3OSwgNzgsIDY1LCA4MCwgMTI4LCA3OSwgNzcsIDczLCA4MywgODMsIDczLCA3OSwgCisgICAgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCAyMDYsIDc5LCAKKyAgICA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgNzcsIDY1LCA3NiwgNzksIDc4LCAxMjgsIAorICAgIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDc2LCA2OCwgMTI4LCA3OSwgCisgICAgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCA3OSwgNzQsIDczLCAKKyAgICA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIDc2LCAxMjgsIDc5LCA3MiwgNzcsIAorICAgIDEyOCwgNzksIDcyLCAyMDUsIDc5LCA3MSwgODIsIDY5LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgNzUsIDEyOCwgNzksIAorICAgIDcxLCA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDgyLCAKKyAgICAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCAxOTcsIDc5LCA3MCwgNzAsIAorICAgIDEyOCwgNzksIDY5LCA4OSwgMTI4LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIDc5LCA2OCwgMTk2LCAKKyAgICA3OSwgNjcsIDg0LCA3OSwgODAsIDg1LCA4MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNjcsIAorICAgIDg0LCA2OSwgMjEyLCA3OSwgNjcsIDIxMCwgNzksIDY3LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA3OSwgNjcsIDY3LCA3NiwgCisgICAgODUsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgNjYsIDc5LCA3NiwgMjExLCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIAorICAgIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIDE5NywgNzksIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCA2NiwgNjksIDc2LCA4NSwgCisgICAgODMsIDEyOCwgNzksIDY2LCA2OSwgNzYsIDc5LCA4MywgMTI4LCA3OSwgNjYsIDEyOCwgNzksIDY1LCA4OSwgMTI4LCA3OSwgCisgICAgNjUsIDc1LCAxMjgsIDc5LCA2NSwgNjYsIDc5LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDE5MywgNzksIDQ4LCAKKyAgICA1MywgNDksIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDUzLCA0OCwgMTI4LCA3OSwgNDgsIDUyLCA1NywgMTI4LCA3OSwgNDgsIDUyLCA1NiwgMTI4LCA3OSwgNDgsIDUyLCA1NSwgCisgICAgMTI4LCA3OSwgNDgsIDUyLCA1NCwgMTI4LCA3OSwgNDgsIDUyLCA1MywgMTI4LCA3OSwgNDgsIDUyLCA1MiwgMTI4LCA3OSwgCisgICAgNDgsIDUyLCA1MSwgMTI4LCA3OSwgNDgsIDUyLCA1MCwgMTI4LCA3OSwgNDgsIDUyLCA0OSwgMTI4LCA3OSwgNDgsIDUyLCAKKyAgICA0OCwgMTI4LCA3OSwgNDgsIDUxLCA1NywgMTI4LCA3OSwgNDgsIDUxLCA1NiwgMTI4LCA3OSwgNDgsIDUxLCA1NSwgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NiwgCisgICAgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDEyOCwgNzksIDQ4LCA1MSwgNTMsIDEyOCwgCisgICAgNzksIDQ4LCA1MSwgNTIsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDUxLCAxMjgsIDc5LCAKKyAgICA0OCwgNTEsIDUwLCAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3OSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDEyOCwgNzksIDQ4LCA1MCwgCisgICAgNTYsIDEyOCwgNzksIDQ4LCA1MCwgNTUsIDEyOCwgNzksIDQ4LCA1MCwgNTQsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDY1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTAsIDUzLCAxMjgsIDc5LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA3OSwgNDgsIDUwLCA1MSwgMTI4LCA3OSwgNDgsIDUwLCA1MCwgMTI4LCA3OSwgNDgsIDUwLCA0OSwgMTI4LCA3OSwgNDgsIAorICAgIDUwLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDU3LCAxMjgsIDc5LCA0OCwgNDksIDU2LCAxMjgsIDc5LCA0OCwgNDksIDU1LCAxMjgsIDc5LCA0OCwgNDksIDU0LCAKKyAgICAxMjgsIDc5LCA0OCwgNDksIDUzLCAxMjgsIDc5LCA0OCwgNDksIDUyLCAxMjgsIDc5LCA0OCwgNDksIDUxLCAxMjgsIDc5LCAKKyAgICA0OCwgNDksIDUwLCAxMjgsIDc5LCA0OCwgNDksIDQ5LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NywgMTI4LCA3OSwgNDgsIAorICAgIDQ5LCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAxMjgsIDc5LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc5LCA0OCwgNDgsIDU2LCAxMjgsIDc5LCA0OCwgNDgsIDU1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAKKyAgICA3MCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjksIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDU0LCA2NywgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgMTI4LCA3OSwgNDgsIDQ4LCAKKyAgICA1MiwgMTI4LCA3OSwgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA0OCwgNDksIDEyOCwgNzksIDQ1LCA4OSwgNjksIDEyOCwgNzksIDQ1LCA3OSwgNDUsIDczLCAxMjgsIAorICAgIDc5LCA0NSwgNjksIDEyOCwgNzgsIDkwLCA4OSwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODQsIDEyOCwgNzgsIDkwLCA4OSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIDc4LCA5MCwgODksIDEyOCwgCisgICAgNzgsIDkwLCA4NSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCAxMjgsIDc4LCAKKyAgICA5MCwgODUsIDgxLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAxMjgsIDc4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIAorICAgIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAyMDYsIDc4LCA5MCwgODUsIDEyOCwgNzgsIDkwLCA3OSwgODgsIDEyOCwgNzgsIAorICAgIDkwLCA3OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgODgsIDEyOCwgNzgsIDkwLCA3MywgODQsIDEyOCwgNzgsIDkwLCA3MywgCisgICAgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA2OSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIDc4LCA5MCwgNjksIDg4LCAxMjgsIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCAKKyAgICA3OCwgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjUsIDg0LCAxMjgsIDc4LCA5MCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAxMjgsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDkwLCAxOTMsIDc4LCA4OSwgODcsIAorICAgIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODUsIDg1LCAxMjgsIDc4LCA4OSwgODUsIDg0LCAxMjgsIAorICAgIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgNjksIDEyOCwgNzgsIDg5LCA4NSwgMTI4LCA3OCwgODksIDc5LCAKKyAgICA4OCwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgODksIDc5LCA3OSwgMTI4LCAKKyAgICA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAxMjgsIDc4LCA4OSwgNzMsIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMiwgNzgsIDg5LCA3MywgMjExLCA3OCwgODksIAorICAgIDczLCAyMTAsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIDc5LCAxMjgsIDc4LCA4OSwgCisgICAgNzMsIDczLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgODksIDczLCA2OSwgODQsIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDEyOCwgNzgsIDg5LCAyMDEsIDc4LCAKKyAgICA4OSwgNzIsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDg0LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgNzgsIDg5LCA2OSwgNzIsIAorICAgIDEyOCwgNzgsIDg5LCA2OSwgMjAwLCA3OCwgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDY5LCAxMjgsIDc4LCA4OSwgMTk2LCAKKyAgICA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgODksIDY1LCA4NSwgMTI4LCA3OCwgODksIDY1LCA3MywgMTI4LCA3OCwgODksIAorICAgIDY1LCA3MiwgMTI4LCA3OCwgODksIDY1LCA2OSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgODksIDY1LCA2NSwgMTI4LCA3OCwgCisgICAgODcsIDc5LCA3OSwgMTI4LCA3OCwgODcsIDc5LCAxMjgsIDc4LCA4NywgNzMsIDczLCAxMjgsIDc4LCA4NywgNzMsIDEyOCwgCisgICAgNzgsIDg3LCA2OSwgMTI4LCA3OCwgODcsIDY1LCA2NSwgMTI4LCA3OCwgODcsIDY1LCAxMjgsIDc4LCA4NywgMTI4LCA3OCwgCisgICAgODYsIDEyOCwgNzgsIDg1LCA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA4NSwgCisgICAgODQsIDczLCA3NiwgNzYsIDg1LCAxMjgsIDc4LCA4NSwgODQsIDEyOCwgNzgsIDg1LCAyMTIsIDc4LCA4NSwgODIsIDg4LCAKKyAgICAxMjgsIDc4LCA4NSwgODIsIDEyOCwgNzgsIDg1LCA4MCwgMTI4LCA3OCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODUsIDc5LCAKKyAgICA4MCwgMTI4LCA3OCwgODUsIDc5LCAxMjgsIDc4LCA4NSwgNzgsIDg1LCA5MCwgMTI4LCA3OCwgODUsIDc4LCA4NSwgMjE4LCAKKyAgICA3OCwgODUsIDc4LCA3MSwgMTI4LCA3OCwgODUsIDc4LCA2NSwgODYsIDg1LCAyMTIsIDc4LCA4NSwgNzgsIDY1LCA4NiwgNzMsIAorICAgIDIwMywgNzgsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDIwNiwgNzgsIDg1LCA3NywgNjksIDgyLCAyMDcsIDc4LCA4NSwgNzcsIAorICAgIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCAyMDQsIDc4LCA4NSwgNzcsIDY2LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDg1LCA3NywgMTI4LCA3OCwgODUsIDc2LCAKKyAgICA3NiwgMTI4LCA3OCwgODUsIDc2LCAyMDQsIDc4LCA4NSwgNzYsIDEyOCwgNzgsIDg1LCA3NSwgODQsIDY1LCAxMjgsIDc4LCAKKyAgICA4NSwgNjksIDc4LCA3MSwgMTI4LCA3OCwgODUsIDY5LCAxMjgsIDc4LCA4NSwgNjYsIDczLCA2NSwgMjA2LCA3OCwgODUsIAorICAgIDY1LCA2OSwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ5LCAxNzcsIDc4LCA4NSwgNDgsIDUwLCA1MCwgCisgICAgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTEsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU1LCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUyLCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAorICAgIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCA3OCwgODQsIAorICAgIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIDcxLCA2NiwgCisgICAgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgNzgsIDgzLCAKKyAgICA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCA3OSwgNzcsIAorICAgIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIDc4LCA4MywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgNzgsIDgzLCAKKyAgICA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIDY1LCAKKyAgICAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgNjUsIAorICAgIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCA4NSwgCisgICAgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIDgyLCAKKyAgICAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIDgyLCAKKyAgICA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgMTI4LCAKKyAgICA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgNjUsIAorICAgIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIDEyOCwgCisgICAgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgNzksIDg0LCAKKyAgICA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCA4NCwgNjksIAorICAgIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIDg0LCA2NywgCisgICAgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgMjEyLCA3OCwgCisgICAgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCA4MiwgODQsIDcyLCAKKyAgICA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIDc4LCA3OSwgMjEwLCAKKyAgICA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCA3OSwgNzgsIAorICAgIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAKKyAgICAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA2NiwgODIsIAorICAgIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgNzUsIDcyLCA4NSwgCisgICAgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCA2NiwgODIsIDY5LCAKKyAgICA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCAKKyAgICA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCAKKyAgICA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgCisgICAgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzgsIDY2LCAKKyAgICA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTcsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIAorICAgIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTcsIDEyOCwgCisgICAgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIDIwNywgNzgsIDc1LCAKKyAgICA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg5LCA4OCwgCisgICAgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDEyOCwgCisgICAgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgNzQsIDg1LCA2OSwgCisgICAgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCA3OSwgODgsIDEyOCwgCisgICAgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIDEyOCwgNzgsIDc0LCAKKyAgICA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIDczLCA4MCwgMTI4LCAKKyAgICA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4MCwgCisgICAgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCA3MywgMTI4LCA3OCwgCisgICAgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzQsIDY5LCAKKyAgICA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2OSwgNjksIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgNjksIDEyOCwgNzgsIAorICAgIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCA3NiwgNzMsIDEyOCwgCisgICAgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIDEyOCwgNzgsIDczLCAKKyAgICA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgNzEsIDg1LCAxMjgsIAorICAgIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgODksIDEyOCwgCisgICAgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3OCwgNzMsIDc4LCAKKyAgICA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzgsIAorICAgIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIDY4LCA2NSwgMTc4LCA3OCwgCisgICAgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCAKKyAgICA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCA3MiwgODMsIDcyLCA4NiwgNjUsIAorICAgIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgCisgICAgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc4LCAKKyAgICA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDczLCAKKyAgICA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCisgICAgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCA3MywgNjYsIDEyOCwgNzgsIDczLCAKKyAgICA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCA3MiwgNzQsIDY1LCAxMjgsIDc4LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCA3OCwgNzEsIDg1LCA4NSwgMTI4LCAKKyAgICA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCA3OSwgODQsIDEyOCwgNzgsIDcxLCAKKyAgICA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3OSwgNzcsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIDc4LCA3MSwgMjA3LCA3OCwgNzEsIAorICAgIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKKyAgICA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIAorICAgIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgCisgICAgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCAKKyAgICA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCAKKyAgICA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIAorICAgIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzcsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgMjA2LCA3OCwgNzEsIDcxLCA4NSwgCisgICAgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzMsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCAKKyAgICA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIDcxLCA3MSwgNjksIDc4LCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIAorICAgIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCAKKyAgICA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIAorICAgIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgCisgICAgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCAKKyAgICA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIAorICAgIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgCisgICAgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAKKyAgICAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCAKKyAgICA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCAKKyAgICA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIAorICAgIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgCisgICAgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCAKKyAgICA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCAKKyAgICA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgCisgICAgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIAorICAgIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgCisgICAgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIAorICAgIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCAKKyAgICA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIAorICAgIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIAorICAgIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIAorICAgIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCAKKyAgICA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIAorICAgIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgCisgICAgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCAKKyAgICA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgCisgICAgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgCisgICAgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgCisgICAgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCAKKyAgICA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgCisgICAgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCAKKyAgICA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIAorICAgIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIAorICAgIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgCisgICAgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCAKKyAgICA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgCisgICAgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIAorICAgIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIAorICAgIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgCisgICAgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAKKyAgICAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCAKKyAgICA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgCisgICAgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgCisgICAgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAKKyAgICAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgCisgICAgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAKKyAgICAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIAorICAgIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgCisgICAgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIAorICAgIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIAorICAgIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgCisgICAgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIAorICAgIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgCisgICAgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAKKyAgICAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIAorICAgIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCAKKyAgICA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIAorICAgIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgCisgICAgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgCisgICAgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgCisgICAgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCAKKyAgICA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCAKKyAgICA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIAorICAgIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgCisgICAgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCAKKyAgICA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIAorICAgIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgCisgICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCAKKyAgICA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgCisgICAgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIAorICAgIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgCisgICAgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCAKKyAgICA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIAorICAgIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgCisgICAgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIAorICAgIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgCisgICAgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCAKKyAgICA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIAorICAgIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCisgICAgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCAKKyAgICA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAKKyAgICAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgCisgICAgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgCisgICAgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCAKKyAgICA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgCisgICAgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCAKKyAgICA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIAorICAgIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgCisgICAgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCAKKyAgICA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCAKKyAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgCisgICAgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCAKKyAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIAorICAgIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgCisgICAgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAKKyAgICAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIAorICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgCisgICAgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgCisgICAgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgCisgICAgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIAorICAgIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIAorICAgIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIAorICAgIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgCisgICAgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgCisgICAgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAKKyAgICAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgCisgICAgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIAorICAgIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIAorICAgIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgCisgICAgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgCisgICAgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCAKKyAgICA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIAorICAgIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgCisgICAgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgCisgICAgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCAKKyAgICA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgCisgICAgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCAKKyAgICA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIAorICAgIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgCisgICAgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAKKyAgICAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCAKKyAgICA3NiwgNzMsIDc1LCAxMjgsIDc3LCA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIAorICAgIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgCisgICAgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCAKKyAgICA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIAorICAgIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgCisgICAgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgCisgICAgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgCisgICAgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCAKKyAgICA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIAorICAgIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgCisgICAgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCAKKyAgICA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIAorICAgIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIAorICAgIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgCisgICAgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgCisgICAgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCAKKyAgICA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIAorICAgIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgCisgICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCAKKyAgICA3NywgNjUsIDgzLCA3MiwgNzAsIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIAorICAgIDY3LCA4NSwgNzYsIDczLCA3OCwgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDg0LCA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIAorICAgIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgCisgICAgNzUsIDQ1LCA1MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgCisgICAgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCAKKyAgICA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIAorICAgIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIAorICAgIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCAKKyAgICA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIAorICAgIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgCisgICAgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCAKKyAgICA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIAorICAgIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgCisgICAgNzcsIDc5LCA3NSwgMTI4LCA3NywgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCAKKyAgICA4NSwgMTI4LCA3NywgNjUsIDczLCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIAorICAgIDEyOCwgNzcsIDY1LCA3MywgNzYsIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgCisgICAgNjUsIDczLCA2OCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCAKKyAgICA3NywgNjUsIDcyLCA3MiwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIAorICAgIDcyLCA2NSwgODAsIDY1LCA3NSwgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgCisgICAgNzcsIDY1LCA3MiwgMTI4LCA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCAKKyAgICA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIAorICAgIDc3LCA2NSwgNjksIDc3LCA4NiwgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIAorICAgIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgCisgICAgNjksIDc2LCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNjgsIDg1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCisgICAgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCAKKyAgICA3OSwgNzgsIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIAorICAgIDY3LCA4MiwgNzksIDIwNiwgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY1LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgCisgICAgNTIsIDUyLCAxMjgsIDc3LCA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAKKyAgICAxMjgsIDc3LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDUxLCA1NiwgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIAorICAgIDUxLCA1MywgMTI4LCA3NywgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgCisgICAgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAKKyAgICA2NSwgMTI4LCA3NywgNDgsIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIAorICAgIDQ4LCA1MCwgNTQsIDEyOCwgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgCisgICAgNTAsIDUyLCAxMjgsIDc3LCA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCAKKyAgICA1MCwgMTI4LCA3NywgNDgsIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDQ5LCA1NiwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1MywgMTI4LCA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCAKKyAgICA1MCwgNzIsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIAorICAgIDQ5LCA1MCwgNjksIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1MCwgNjYsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDQ5LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3NywgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3NywgNDgsIDQ4LCA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgCisgICAgNzcsIDQ4LCA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCAKKyAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCAKKyAgICA4OSwgODgsIDEyOCwgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCAKKyAgICA4OSwgODAsIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIAorICAgIDEyOCwgNzYsIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIAorICAgIDczLCAxMjgsIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIAorICAgIDg4LCAxMjgsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIAorICAgIDgwLCAxMjgsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIAorICAgIDc2LCA4NSwgNzksIDEyOCwgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAKKyAgICAxMjgsIDc2LCA4NSwgNzIsIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIAorICAgIDc2LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIAorICAgIDc2LCA4NSwgNTEsIDEyOCwgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIAorICAgIDc3LCAxMjgsIDc2LCA4MiwgNzMsIDEyOCwgNzYsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgCisgICAgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNjksIDgyLCAKKyAgICA2OSwgMTk2LCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3NiwgNzksIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCAKKyAgICA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCA2OCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIAorICAgIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgCisgICAgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCAKKyAgICA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIAorICAgIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCA3OSwgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIAorICAgIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgCisgICAgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIAorICAgIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgCisgICAgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIAorICAgIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCisgICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgNzksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIAorICAgIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCA3MywgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgCisgICAgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCAKKyAgICA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgNzYsIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgCisgICAgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCAKKyAgICA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgNjcsIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIAorICAgIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIAorICAgIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgCisgICAgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCAKKyAgICA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCAKKyAgICA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIDczLCA4NCwgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIAorICAgIDg0LCA2OSwgMjEwLCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIAorICAgIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDczLCA4MSwgMTI4LCA3NiwgNzMsIDgwLCA4MywgCisgICAgODQsIDczLCA2NywgNzUsIDEyOCwgNzYsIDczLCA3OCwgNzUsIDczLCA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCAKKyAgICA3MywgNzgsIDcxLCA4MywgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIAorICAgIDc2LCA3MywgNzgsIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgCisgICAgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCAKKyAgICA3NiwgNzMsIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgCisgICAgMjEzLCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDc3LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCAKKyAgICA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgNzYsIAorICAgIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIAorICAgIDEyOCwgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzYsIDczLCA2OSwgNjksIDEyOCwgNzYsIAorICAgIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCA3MywgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY2LCA2OSwgCisgICAgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIDcyLCA3MywgNzMsIAorICAgIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgCisgICAgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgCisgICAgODYsIDY5LCAyMDQsIDc2LCA2OSwgODUsIDc3LCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCAKKyAgICA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAxMjgsIDc2LCA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIAorICAgIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgCisgICAgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCAKKyAgICA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCA4MCwgNjUsIDgyLCA2OCwgMTI4LCA3NiwgNjksIAorICAgIDc5LCAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAKKyAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgCisgICAgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDE5MywgNzYsIDY5LCA3NywgNzksIDc4LCAKKyAgICAxMjgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNjksIDc2LCA2OSwgODQsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAorICAgIDIxMiwgNzYsIDY5LCAyMDMsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgNzYsIDY5LCA3MywgNzcsIDc3LCAxOTMsIAorICAgIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgNzEsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3MSwgNjksIDg0LCA3OSwgCisgICAgMjExLCA3NiwgNjksIDcxLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNzYsIDY5LCAKKyAgICA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA4NCwgCisgICAgNjksIDIwNSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDcyLCAKKyAgICA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzYsIAorICAgIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIAorICAgIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIDg3LCA2NSwgMTI4LCA3NiwgNjksIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgCisgICAgNjksIDEyOCwgNzYsIDY5LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCAKKyAgICA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCAxOTgsIDc2LCA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIAorICAgIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCAxOTYsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgCisgICAgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgCisgICAgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCA4NywgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgCisgICAgNzYsIDY1LCAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgNjUsIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgCisgICAgMjEwLCA3NiwgNjUsIDgyLCA3MSwgNjksIDEyOCwgNzYsIDY1LCA4MiwgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgCisgICAgNjUsIDgwLCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgMTI4LCA3NiwgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIAorICAgIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgCisgICAgNjksIDEyOCwgNzYsIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgCisgICAgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCAKKyAgICA3NiwgNjUsIDIwNCwgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIAorICAgIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAKKyAgICAxMjgsIDc2LCA2NSwgNzIsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCAKKyAgICA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIAorICAgIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIAorICAgIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA3NiwgNjUsIDY2LCA3MywgNjUsIDIwNCwgNzYsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc2LCA2NSwgNjUsIAorICAgIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgCisgICAgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3NiwgNDgsIDQ4LCAKKyAgICA1MCwgNjUsIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIAorICAgIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzUsIDg5LCA4NSwgMTI4LCA3NSwgODksIDc5LCAxMjgsIDc1LCA4OSwgCisgICAgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OSwgNzMsIDEyOCwgNzUsIDg5LCA2OSwgMTI4LCA3NSwgODksIDY1LCAKKyAgICA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgNjUsIDY1LCAxMjgsIDc1LCA4OSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNzMsIAorICAgIDEyOCwgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2NSwgMTI4LCA3NSwgODgsIDg1LCAxMjgsIDc1LCA4OCwgNzksIDEyOCwgNzUsIDg4LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDY5LCAxMjgsIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgCisgICAgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCA1NiwgMTI4LCA3NSwgODcsIDc5LCA3OSwgMTI4LCA3NSwgODcsIDc5LCAKKyAgICAxMjgsIDc1LCA4NywgNzMsIDczLCAxMjgsIDc1LCA4NywgNzMsIDEyOCwgNzUsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg3LCAKKyAgICA2OSwgMTI4LCA3NSwgODcsIDY1LCA4OSwgMTI4LCA3NSwgODcsIDY1LCA2OSwgODQsIDEyOCwgNzUsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCA3NSwgODYsIDEyOCwgNzUsIDg1LCA4OCwgMTI4LCA3NSwgODUsIDg1LCA3MiwgMTI4LCAKKyAgICA3NSwgODUsIDg0LCAxMjgsIDc1LCA4NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgODUsIDgzLCA3MiwgODUsIDUwLCAxMjgsIAorICAgIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgNzksIDEyOCwgNzUsIDg1LCA4MiwgCisgICAgODQsIDEyOCwgNzUsIDg1LCA4MiwgNzksIDc5LCA3OCwgNjksIDEyOCwgNzUsIDg1LCA4MiwgMTI4LCA3NSwgODUsIDIxMCwgCisgICAgNzUsIDg1LCA4MSwgMTI4LCA3NSwgODUsIDc5LCA4OCwgMTI4LCA3NSwgODUsIDc5LCA4MCwgMTI4LCA3NSwgODUsIDc5LCAKKyAgICAyMDgsIDc1LCA4NSwgNzksIDc3LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgNzUsIDg1LCA3OCwgNzEsIDEyOCwgNzUsIDg1LCAKKyAgICA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCA3NiwgMTI4LCA3NSwgODUsIDIwNCwgNzUsIAorICAgIDg1LCA2OSwgODQsIDEyOCwgNzUsIDg1LCA1NSwgMTI4LCA3NSwgODUsIDUyLCAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIAorICAgIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIDEyOCwgNzUsIDgzLCA4MywgODUsIDg1LCAxMjgsIDc1LCA4MywgODMsIAorICAgIDg1LCAxMjgsIDc1LCA4MywgODMsIDc5LCA3OSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgMTI4LCA3NSwgODMsIDgzLCA3MywgCisgICAgNzMsIDEyOCwgNzUsIDgzLCA4MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjksIDY5LCAxMjgsIDc1LCA4MywgODMsIDY5LCAKKyAgICAxMjgsIDc1LCA4MywgODMsIDY1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAorICAgIDY1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4MywgODMsIDEyOCwgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIAorICAgIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDg5LCA4MCwgNzksIDgyLCAKKyAgICA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgCisgICAgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCAKKyAgICA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIDc1LCA4MCwgNzksIDgxLCAxMjgsIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCAKKyAgICA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDgwLCA2OSwgNjksIAorICAgIDEyOCwgNzUsIDgwLCA2OSwgMTI4LCA3NSwgODAsIDY1LCA4MiwgNjUsIDgxLCAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIAorICAgIDc1LCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NCwgCisgICAgNzksIDEyOCwgNzUsIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCAKKyAgICA3NSwgNzksIDgyLCA2OSwgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgMTk1LCA3NSwgNzksIDgxLCA3OCwgNjgsIAorICAgIDc5LCA3OCwgMTI4LCA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgCisgICAgNzksIDEyOCwgNzUsIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCAKKyAgICA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDE5MywgNzUsIDc5LCA3NywgCisgICAgMjAxLCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCAxOTMsIDc1LCAKKyAgICA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgNzUsIDc5LCAxMjgsIDc1LCA3OSwgNzUsIDEyOCwgNzUsIDc5LCAyMDMsIDc1LCAKKyAgICA3OSwgNzMsIDEyOCwgNzUsIDc5LCAyMDEsIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCA3MSwgNzIsIDc5LCA3NywgMTI4LCAKKyAgICA3NSwgNzksIDY5LCA4NCwgMTI4LCA3NSwgNzksIDY1LCA3NiwgNjUsIDEyOCwgNzUsIDc5LCA2NSwgMTI4LCA3NSwgNzgsIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3NSwgNzgsIDczLCA3MCwgNjksIDEyOCwgCisgICAgNzUsIDc4LCA3MywgNzAsIDE5NywgNzUsIDc3LCAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgNzMsIDg0LCA3OSwgNzgsIDEyOCwgCisgICAgNzUsIDc2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDE5MywgNzUsIDc2LCA2NSwgMTI4LCAKKyAgICA3NSwgNzYsIDEyOCwgNzUsIDc1LCA4NSwgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCA3NSwgNzMsIDEyOCwgNzUsIDc1LCAKKyAgICA2OSwgNjksIDEyOCwgNzUsIDc1LCA2OSwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCA3NSwgMTI4LCA3NSwgNzQsIDY5LCAKKyAgICAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDIwMywgNzUsIDczLCA4OCwgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3MywgODMsIDgzLCA3MywgNzgsIDE5OSwgNzUsIAorICAgIDczLCA4MywgODMsIDEyOCwgNzUsIDczLCA4MywgMjExLCA3NSwgNzMsIDgzLCA3MywgNzcsIDUzLCAxMjgsIDc1LCA3MywgCisgICAgODMsIDczLCA3NywgMTgxLCA3NSwgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzUsIDczLCAKKyAgICA4MiwgNzksIDg3LCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCisgICAgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIAorICAgIDEyOCwgNzUsIDczLCA4MiwgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgxLCAxMjgsIDc1LCA3MywgODAsIDEyOCwgNzUsIAorICAgIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3MywgNzgsIDY4LCA2OSwgODIsIDcxLCA2NSwgCisgICAgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3NywgNzksIDc4LCA3OSwgMTI4LCA3NSwgNzMsIDczLCAxMjgsIDc1LCAKKyAgICA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCA2OSwgODAsIDEyOCwgNzUsIDczLCA2OSwgNjksIAorICAgIDc3LCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIDczLCA2NywgNzUsIAorICAgIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA4NSwgNjksIDc4LCA0NSwgCisgICAgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY4LCA2NSwgNzcsIDEyOCwgNzUsIDcyLCAKKyAgICA4NSwgNjUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDg1LCAxMjgsIDc1LCA3MiwgNzksIDIxMiwgNzUsIDcyLCA3OSwgNzgsIAorICAgIDEyOCwgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgMjA3LCA3NSwgNzIsIAorICAgIDc3LCAyMTMsIDc1LCA3MiwgNzMsIDg0LCAxMjgsIDc1LCA3MiwgNzMsIDc4LCA4OSwgNjUsIDEyOCwgNzUsIDcyLCA3MywgCisgICAgNjksIDg1LCA3NSwgMjAwLCA3NSwgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgNzIsIDY1LCAKKyAgICAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIDY5LCA2OSwgMTI4LCAKKyAgICA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgNzUsIDcyLCA2NSwgODIsIAorICAgIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCA3MiwgNjUsIDc4LCA2OCwgCisgICAgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIDcyLCA2NSwgNzUsIDY1LCAKKyAgICA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgMTI4LCA3NSwgNzIsIAorICAgIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDgwLCAxMjgsIAorICAgIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzUsIDY5LCA4OCwgCisgICAgMTI4LCA3NSwgNjksIDg1LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAKKyAgICA4MCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MCwgODUsIDgxLCAxMjgsIAorICAgIDc1LCA2OSwgODUsIDc5LCAyMTIsIDc1LCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2OSwgODUsIDg0LCA3OCwgCisgICAgNjgsIDY1LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4NCwgNzcsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNzMsIDEyOCwgNzUsIDY5LCA4NCwgODQsIDIwMSwgNzUsIAorICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIDc5LCA4NywgMTI4LCA3NSwgCisgICAgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgMTkzLCAKKyAgICA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCA3NSwgNjksIDc4LCAxMjgsIAorICAgIDc1LCA2OSwgMjA2LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA4NSwgMjA0LCA3NSwgCisgICAgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgNjksIDc3LCA4MCwgNzIsIDgyLCAKKyAgICA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzYsIDg2LCA3MywgCisgICAgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIDY5LCA3MiwgMTI4LCA3NSwgCisgICAgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgNjksIDY5LCA4MCwgNzMsIDc4LCAKKyAgICAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCA3NSwgNjYsIDEyOCwgNzUsIDY1LCAKKyAgICA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODksIDY1LCAyMDAsIAorICAgIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgNzMsIDEyOCwgNzUsIDY1LCA4NiwgODksIDc1LCA2NSwgMTI4LCA3NSwgCisgICAgNjUsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg1LCAxMjgsIDc1LCA2NSwgODQsIDc5LCAKKyAgICAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgODMsIDg0LCA3MywgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNjUsIDc1LCAxOTMsIAorICAgIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDY1LCA4NCwgNjUsIDg2LCAxOTMsIDc1LCA2NSwgCisgICAgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgODMsIAorICAgIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgMjA2LCA3NSwgNjUsIDgzLCA4MiwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIDE5MywgNzUsIDY1LCA4MywgNzUsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgzLCAKKyAgICA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgNzIsIDc3LCA3MywgODIsIDIwMSwgNzUsIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIAorICAgIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA2NSwgODIsIDIwNywgNzUsIDY1LCA4MiwgCisgICAgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDY1LCA4MiwgNjUsIDc4LCAxMjgsIDc1LCAKKyAgICA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgODksIAorICAgIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCAKKyAgICA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA4MCwgODAsIAorICAgIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDc2LCAxMjgsIAorICAgIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNzUsIDY1LCA3OCwgNzEsIDEyOCwgCisgICAgNzUsIDY1LCA3OCwgMTk5LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzcsIDUyLCAxMjgsIDc1LCAKKyAgICA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzcsIDEyOCwgNzUsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NSwgNjUsIAorICAgIDY2LCA2NSwgODQsIDEyOCwgNzUsIDY1LCA3NSwgMTI4LCA3NSwgNjUsIDIwMywgNzUsIDY1LCA3MywgODQsIDcyLCAyMDEsIAorICAgIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgMjAxLCA3NSwgNjUsIDcwLCA2NSwgCisgICAgMTI4LCA3NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCA3NSwgNjUsIDY4LCAxODEsIAorICAgIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIDY1LCA2OCwgCisgICAgNTAsIDEyOCwgNzUsIDY1LCA2OCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgNjYsIDEyOCwgNzUsIDY1LCA2NSwgCisgICAgNzMsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgCisgICAgNzUsIDY1LCAxNzgsIDc1LCA0OCwgNDgsIDU2LCAxMjgsIDc1LCA0OCwgNDgsIDU1LCAxMjgsIDc1LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc1LCA0OCwgNDgsIDUzLCAxMjgsIDc1LCA0OCwgNDgsIDUyLCAxMjgsIDc1LCA0OCwgNDgsIDUxLCAxMjgsIDc1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDc1LCA0OCwgNDgsIDQ5LCAxMjgsIDc0LCA4NywgNjUsIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCAKKyAgICA3NCwgODUsIDg0LCAxMjgsIDc0LCA4NSwgODMsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAxMjgsIDc0LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCA4NSwgNzYsIDg5LCAxMjgsIDc0LCAKKyAgICA4NSwgNjksIDg1LCA3MywgMTI4LCA3NCwgODUsIDY4LCA4NSwgNzYsIDEyOCwgNzQsIDg1LCA2OCwgNzEsIDY5LCAxMjgsIAorICAgIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgODMsIDIwMCwgNzQsIDc5LCA4OSwgNzksIDg1LCAKKyAgICAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAyMTIsIDc0LCA3OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCA3OSwgNzMsIDc4LCA2OSwgNjgsIAorICAgIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIDg5LCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIDc0LCA3NCwgODUsIDg4LCAxMjgsIAorICAgIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgMTI4LCA3NCwgCisgICAgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA3OSwgODQsIAorICAgIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIDczLCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzQsIDc0LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCA2NSwgMTI4LCA3NCwgNzMsIDc2LCAKKyAgICAxMjgsIDc0LCA3MywgNzMsIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIDc2LCA3MywgODksIDY1LCAxMjgsIAorICAgIDc0LCA3MywgNjUsIDEyOCwgNzQsIDcyLCA3OSwgMTI4LCA3NCwgNzIsIDY5LCA3MiwgMTI4LCA3NCwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3NCwgNzIsIDY1LCA3NywgMTI4LCA3NCwgNzIsIDY1LCA2NSwgMTI4LCA3NCwgNzIsIDY1LCAxMjgsIDc0LCA2OSwgCisgICAgODUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgNzYsIDY5LCA3NywgMTI4LCA3NCwgNjksIDgyLCA2NSwgMjA2LCAKKyAgICA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA2OSwgNzIsIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCAKKyAgICA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIDc0LCA2OSwgNjUsIDc4LCA4MywgCisgICAgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzQsIDY1LCA4NSwgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCA3OCwgNjksIDgzLCAxOTcsIAorICAgIDc0LCA2NSwgODAsIDY1LCA3OCwgMTI4LCA3NCwgNjUsIDc4LCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3NCwgNjUsIDc2LCA3NiwgCisgICAgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCA3MiwgNzksIDg1LCAxMjgsIDc0LCA2NSwgNzMsIDEyOCwgNzQsIDY1LCAKKyAgICA3MiwgMTI4LCA3NCwgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjUsIDY3LCA3NSwgNDUsIDc5LCA0NSwgNzYsIDY1LCA3OCwgODQsIAorICAgIDY5LCA4MiwgNzgsIDEyOCwgNzQsIDY1LCA2NywgMjAzLCA3NCwgNDUsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAKKyAgICAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA5MCwgNjUsIDc1LCA2NSwgODksIDE5MywgNzMsIDg5LCA2OSwgNzUsIAorICAgIDEyOCwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODUsIDc0LCA2NSwgMTI4LCA3MywgODUsIDEyOCwgNzMsIAorICAgIDg0LCAyMTEsIDczLCA4NCwgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgODQsIDY5LCA3NywgMTI4LCA3MywgCisgICAgODMsIDgzLCA3MiwgNjUsIDgyLCAxMjgsIDczLCA4MywgNzksIDc4LCAxMjgsIDczLCA4MywgNzksIDIwNiwgNzMsIDgzLCAKKyAgICA3OSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDgzLCA2OSwgNzgsIDQ1LCA3MywgODMsIDY5LCA3OCwgMTI4LCA3MywgODMsIAorICAgIDY1LCA3NSwgNzMsIDE5MywgNzMsIDgzLCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgNzksIDc4LCAKKyAgICA0NSwgNjcsIDc5LCA4MCwgODAsIDY5LCAyMTAsIDczLCA4MiwgNzksIDc4LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgNzMsIAorICAgIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDEyOCwgNzMsIDc5LCA4NCwgCisgICAgMTkzLCA3MywgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDczLCA3OCwgODYsIDczLCAKKyAgICA4MywgNzMsIDY2LCA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDc4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNjksIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCA4MiwgNzksIDY4LCA4NSwgCisgICAgNjcsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA4OSwgNzYsIDc2LCAKKyAgICA2NSwgNjYsIDczLCAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIAorICAgIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCAKKyAgICA2NywgODQsIDczLCA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIAorICAgIDc4LCA4NCwgNjksIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCAKKyAgICA3OSwgNjcsIDc1LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIAorICAgIDg0LCA2OSwgODIsIDc2LCA2NSwgNjcsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCAKKyAgICA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgCisgICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKKyAgICA3MSwgODIsIDY1LCAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIAorICAgIDY5LCA3OCwgODQsIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgCisgICAgNzMsIDc5LCAyMDYsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgNzMsIDc4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCAKKyAgICA3MywgNzksIDc4LCA2NSwgMjA0LCA3MywgNzgsIDgwLCA4NSwgMjEyLCA3MywgNzgsIDc4LCA3OSwgNjcsIDY5LCA3OCwgNjcsIAorICAgIDY5LCAxMjgsIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDc4LCA2OSwgCisgICAgMjEwLCA3MywgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzMsIDc4LCA3MSwgODUsIDEyOCwgNzMsIDc4LCA3MywgMTI4LCA3MywgCisgICAgNzgsIDcyLCA3MywgNjYsIDczLCAyMTIsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIDczLCA3OCwgNzEsIDg3LCAKKyAgICA2NSwgOTAsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA3MCwgNzYsIAorICAgIDg1LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIDEyOCwgNzMsIDc4LCA3MCwgCisgICAgNzMsIDc4LCA3MywgODQsIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA3MywgNzgsIDY4LCAKKyAgICA3MywgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDczLCA3OCwgNjgsIAorICAgIDczLCA2NywgNjUsIDg0LCA3OSwgMjEwLCA3MywgNzgsIDY4LCA3MywgMTk1LCA3MywgNzgsIDY4LCA3MywgNjUsIDIwNiwgCisgICAgNzMsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCAKKyAgICA3OCwgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIAorICAgIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAKKyAgICAxOTcsIDczLCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDc2LCA4NSwgNjgsIDczLCA3OCwgCisgICAgMTk5LCA3MywgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY2LCA3OSwgMjE2LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA3MywgCisgICAgNzgsIDQ1LCA2NSwgNzYsIDY1LCA3MCwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgMjA0LCA3MywgNzcsIDgwLCAKKyAgICA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgCisgICAgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzgsIDEyOCwgNzMsIDc3LCAKKyAgICA3MywgODMsIDY5LCA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIAorICAgIDc3LCA3MywgMjA2LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgCisgICAgODQsIDcyLCA3OSwgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCAKKyAgICA2OCwgNzMsIDY1LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA3MywgNzYsIDg1LCA4NCwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCAKKyAgICA3NywgNzcsIDg1LCA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgCisgICAgMjEzLCA3MywgNzYsIDUwLCAxMjgsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgCisgICAgNzQsIDEyOCwgNzMsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgCisgICAgNzMsIDcxLCA3MSwgODcsIDgzLCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCAKKyAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MywgNjksIDg1LCA3OCwgCisgICAgNzEsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIAorICAgIDg1LCA4MCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIAorICAgIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCAKKyAgICA2NywgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIAorICAgIDEyOCwgNzMsIDY4LCA3MywgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU3LCA0OCwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NiwgNjgsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU1LCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NSwgNTQsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA1MSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNDksIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNjksIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA1MCwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA1MywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNTMsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNTAsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MywgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgCisgICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MywgNjYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MywgNTEsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA2OCwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MiwgNjksIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1NiwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTAsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY3LCA3MiwgNzksIDg1LCAKKyAgICAxMjgsIDczLCA2NywgNzIsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIDgzLCAxMjgsIAorICAgIDczLCA2NywgNzIsIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCA3MywgNjcsIDQ1LCAKKyAgICA4OSwgODIsIDEyOCwgNzMsIDY2LCA3MywgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIAorICAgIDczLCA0OCwgNDksIDUzLCAxMjgsIDczLCA0OCwgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIDczLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDczLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgNDgsIDQ5LCAKKyAgICA0OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCA0OCwgNDgsIAorICAgIDU3LCAxMjgsIDczLCA0OCwgNDgsIDU2LCAxMjgsIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDczLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgMTI4LCA3MywgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MywgNDgsIDQ4LCA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA4NSwgMTI4LCA3MywgNDUsIDg5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIAorICAgIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgCisgICAgNjUsIDEyOCwgNzMsIDQ1LCA3OSwgNDUsIDczLCAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgODUsIDEyOCwgCisgICAgNzMsIDQ1LCA2NiwgNjksIDY1LCA3NywgMTI4LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNDUsIDY1LCAKKyAgICAxMjgsIDcyLCA5MCwgOTAsIDkwLCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgMTI4LCAKKyAgICA3MiwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCAKKyAgICA3MiwgOTAsIDcxLCAxMjgsIDcyLCA4OSwgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNzIsIDg5LCA4MCwgNzksIAorICAgIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDcyLCA4OSwgODAsIAorICAgIDcyLCA2OSwgNzgsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OCwgODcsIDcxLCAxMjgsIDcyLCA4OCwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAxMjgsIDcyLCAKKyAgICA4OCwgODUsIDc5LCAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCA4OCwgNzksIAorICAgIDgwLCAxMjgsIDcyLCA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCA3MywgODQsIDEyOCwgNzIsIAorICAgIDg4LCA3MywgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgODgsIDY5LCAKKyAgICA4OCwgMTI4LCA3MiwgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNjUsIDg4LCAxMjgsIDcyLCAKKyAgICA4OCwgNjUsIDg0LCAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgNzIsIDg3LCA4NSwgMTI4LCAKKyAgICA3MiwgODcsIDY1LCA3MywgODIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MiwgODUsIAorICAgIDgyLCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgCisgICAgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCAKKyAgICA3MiwgODUsIDc3LCA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIAorICAgIDcyLCA4NSwgNjYsIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NiwgMTI4LCA3MiwgODUsIDY1LCA4MiwgCisgICAgNjUsIDY4LCA2OCwgNzksIDEyOCwgNzIsIDg0LCA4MywgMTI4LCA3MiwgODQsIDc0LCAxMjgsIDcyLCA4MiwgODksIDg2LCAKKyAgICA3OCwgNzMsIDE5MywgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgODAsIDEyOCwgNzIsIDc5LCAKKyAgICA4NSwgODMsIDE5NywgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCA4MywgMTI4LCA3MiwgNzksIDg1LCA4MiwgNzEsIAorICAgIDc2LCA2NSwgODMsIDIxMSwgNzIsIDc5LCA4NSwgODIsIDEyOCwgNzIsIDc5LCA4NSwgMjEwLCA3MiwgNzksIDg0LCA2OSwgCisgICAgNzYsIDEyOCwgNzIsIDc5LCA4NCwgNjUsIDEyOCwgNzIsIDc5LCA4MywgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDgzLCA2OSwgMTI4LCA3MiwgNzksIDgyLCA4MywgMTk3LCA3MiwgNzksIDgyLCA3OCwgODMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDU0LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKKyAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgCisgICAgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIAorICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDUxLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCAKKyAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCisgICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAorICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDQ5LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCAKKyAgICA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgCisgICAgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAorICAgIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDE5MywgNzIsIDc5LCA3OSwgODIsIDg1LCAxMjgsIDcyLCA3OSwgNzksIDgwLCAxMjgsIDcyLCA3OSwgNzksIDc4LCAxMjgsIAorICAgIDcyLCA3OSwgNzksIDc1LCA2OSwgMTk2LCA3MiwgNzksIDc4LCA2OSwgODksIDY2LCA2OSwgNjksIDEyOCwgNzIsIDc5LCA3OCwgCisgICAgNjksIDIxNywgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCAKKyAgICA3MiwgNjksIDg0LCA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIAorICAgIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgCisgICAgNzksIDczLCAxMjgsIDcyLCA3OSwgNjcsIDcyLCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzgsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDEyOCwgNzIsIDc4LCA3OSwgODgsIDEyOCwgNzIsIDc4LCA3OSwgODQsIAorICAgIDEyOCwgNzIsIDc4LCA3OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgODgsIDEyOCwgNzIsIDc4LCA3MywgODQsIDEyOCwgNzIsIAorICAgIDc4LCA3MywgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDEyOCwgNzIsIDc4LCA3MywgMTI4LCA3MiwgNzgsIDY5LCAKKyAgICA4OCwgMTI4LCA3MiwgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCA3OCwgNjUsIDg4LCAxMjgsIDcyLCAKKyAgICA3OCwgNjUsIDg0LCAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDEyOCwgNzIsIDc3LCA4OSwgODgsIAorICAgIDEyOCwgNzIsIDc3LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIAorICAgIDcyLCA3NywgODksIDEyOCwgNzIsIDc3LCA4NSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODQsIDEyOCwgNzIsIDc3LCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCAKKyAgICA3MiwgNzcsIDc5LCA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIAorICAgIDc5LCAxMjgsIDcyLCA3NywgNzMsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIAorICAgIDcyLCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDEyOCwgCisgICAgNzIsIDc3LCA3MywgMTI4LCA3MiwgNzcsIDY5LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCA3NywgNjUsIDg0LCAKKyAgICAxMjgsIDcyLCA3NywgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDEyOCwgNzIsIDc2LCA4OSwgODgsIDEyOCwgNzIsIDc2LCAKKyAgICA4OSwgODQsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIAorICAgIDgwLCAxMjgsIDcyLCA3NiwgODksIDEyOCwgNzIsIDc2LCA4NSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODQsIDEyOCwgNzIsIAorICAgIDc2LCA4NSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIDcyLCA3NiwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgMTI4LCA3MiwgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCAKKyAgICA3NiwgNzMsIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDEyOCwgNzIsIDc2LCA3MywgCisgICAgMTI4LCA3MiwgNzYsIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCAxMjgsIDcyLCA3NiwgCisgICAgNjUsIDg4LCAxMjgsIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDEyOCwgCisgICAgNzIsIDc1LCAxMjgsIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODMsIDg0LCA3OSwgODIsIDczLCAxOTUsIDcyLCAKKyAgICA3MywgODIsIDczLCA4MSwgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIAorICAgIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDcyLCAKKyAgICA2OSwgNjksIDc2LCA2OSwgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgNzMsIAorICAgIDc5LCA4MywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgCisgICAgODUsIDIwMCwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIAorICAgIDEyOCwgNzIsIDczLCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY2LCA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCAKKyAgICA4NSwgMTI4LCA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIAorICAgIDY1LCA3MSwgODIsIDY1LCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgCisgICAgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCAKKyAgICA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIAorICAgIDgyLCA2OSwgMTI4LCA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgCisgICAgNzgsIDcxLCAxMjgsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCAKKyAgICA4NCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIAorICAgIDc5LCA4MCwgODQsIDY5LCA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgCisgICAgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAKKyAgICAyMTcsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAyMDYsIDcyLCA2OSwgNjUsIAorICAgIDgyLCA4NCwgODMsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDcyLCA2OSwgCisgICAgNjUsIDgyLCA4NCwgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA4MiwgNDUsIDc4LCA3OSwgNDUsIDY5LCAKKyAgICA4NiwgNzMsIDIwNCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIAorICAgIDgzLCA4NCwgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIDY4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzIsIDY5LCA2NSwgCisgICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCAKKyAgICA2NSwgODMsIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA4NSwgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgCisgICAgNjUsIDg0LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIAorICAgIDEyOCwgNzIsIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIAorICAgIDcyLCA2NSwgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgCisgICAgMjExLCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCAKKyAgICA2NSwgNzgsIDY4LCA2NiwgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIAorICAgIDY1LCA4NCwgMTI4LCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDY1LCA3NywgODMsIDg0LCA2OSwgMjEwLCA3MiwgCisgICAgNjUsIDc3LCA3NywgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA2NiwgODUsIDgyLCAKKyAgICA3MSwgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzYsIDgxLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA3OSwgMTI4LCA3MiwgNjUsIAorICAgIDc2LCA3MCwgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgCisgICAgNjksIDgyLCA2OCwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIAorICAgIDEyOCwgNzIsIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIDY1LCA3MSwgCisgICAgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCAKKyAgICA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIAorICAgIDcyLCA2NSwgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgCisgICAgNTYsIDEyOCwgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDcyLCA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIAorICAgIDg1LCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIAorICAgIDcwLCAyMTMsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIAorICAgIDcxLCA4OSwgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIAorICAgIDY5LCA2OSwgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIAorICAgIDg2LCAxMjgsIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgCisgICAgODIsIDY1LCA3NywgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIDEyOCwgNzEsIDg1LCA3OCwgODUsIAorICAgIDEyOCwgNzEsIDg1LCA3OCwgMjEzLCA3MSwgODUsIDIwNSwgNzEsIDg1LCA3NiwgMTI4LCA3MSwgODUsIDczLCA4NCwgNjUsIAorICAgIDgyLCAxMjgsIDcxLCA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCA4NSwgNjgsIAorICAgIDEyOCwgNzEsIDg1LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgODMsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDg1LCA2NSwgCisgICAgODIsIDY4LCA2OSwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDE5NiwgNzEsIDg1LCAKKyAgICA2NSwgODIsIDY4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxOTMsIDcxLCA4NSwgMTc4LCAKKyAgICA3MSwgODQsIDY5LCAyMTAsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCAKKyAgICA4MiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIAorICAgIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNzMsIDc4LCA3OCwgNzMsIDc4LCAxOTksIDcxLCA4MiwgCisgICAgNzMsIDc3LCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCAKKyAgICA2OSwgNjksIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIAorICAgIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCAKKyAgICA2NSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIDY1LCAyMTIsIDcxLCA4MiwgNjUsIAorICAgIDg2LCA2OSwgODksIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgODIsIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAKKyAgICA4MywgMTI4LCA3MSwgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNjksIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgCisgICAgNzEsIDgyLCA2NSwgNjgsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCAKKyAgICA2NSwgNjcsIDE5NywgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDg0LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgCisgICAgNzEsIDc5LCA4MywgODksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCAKKyAgICA3MSwgNzksIDgyLCA3MSwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIAorICAgIDc4LCA3MSwgMTI4LCA3MSwgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIAorICAgIDcxLCA3OSwgNjYsIDc2LCA3MywgNzgsIDEyOCwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgCisgICAgNzksIDY1LCAxMjgsIDcxLCA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKKyAgICAxMjgsIDcxLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3OSwgODQsIDg0LCA2NSwgMjA0LCA3MSwgNzYsIAorICAgIDc5LCA2NiwgMTk3LCA3MSwgNzYsIDczLCA4MywgODMsIDY1LCA3OCwgNjgsIDIwNywgNzEsIDc2LCA2OSwgNzMsIDY3LCAKKyAgICAyMDAsIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCAxMjgsIDcxLCA3NiwgNjUsIDEyOCwgNzEsIDc0LCA2OSwgMTI4LCAKKyAgICA3MSwgNzMsIDg4LCAxMjgsIDcxLCA3MywgODQsIDEyOCwgNzEsIDczLCA4MywgNzIsIDEyOCwgNzEsIDczLCA4MywgMjAwLCAKKyAgICA3MSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzEsIDczLCA4MiwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzEsIDczLCA4MiwgNzYsIAorICAgIDEyOCwgNzEsIDczLCA4MiwgNTEsIDEyOCwgNzEsIDczLCA4MiwgMTc5LCA3MSwgNzMsIDgyLCA1MCwgMTI4LCA3MSwgNzMsIAorICAgIDgyLCAxNzgsIDcxLCA3MywgODAsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDc3LCA2OSwgMjA0LCA3MSwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNzEsIDY1LCAxMjgsIDcxLCA3MywgCisgICAgNjksIDg0LCAxMjgsIDcxLCA3MywgNjgsIDczLCA3NywgMTI4LCA3MSwgNzMsIDY2LCA2NiwgNzksIDg1LCAyMTEsIDcxLCAKKyAgICA3MywgNjYsIDY1LCAxMjgsIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDcyLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDE5MywgNzEsIAorICAgIDcyLCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIDEyOCwgNzEsIDcyLCA3OSwgCisgICAgMTI4LCA3MSwgNzIsIDczLCAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgCisgICAgNzIsIDY5LCA4NSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODQsIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAKKyAgICAxMjgsIDcxLCA3MiwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgODAsIDEyOCwgNzEsIDcyLCA2NSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgCisgICAgNjUsIDczLCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCAKKyAgICA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIAorICAgIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIAorICAgIDg0LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgCisgICAgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCisgICAgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIAorICAgIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIAorICAgIDcxLCA2OSwgODQsIDE5MywgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAKKyAgICAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIAorICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgCisgICAgNzcsIDY1LCAyMDYsIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCAKKyAgICA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgCisgICAgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIAorICAgIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgCisgICAgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCAKKyAgICA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAxMjgsIDcxLCA2OSwgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIAorICAgIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCA4MiwgMTI4LCA3MSwgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIAorICAgIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA3MywgCisgICAgNjksIDE5NywgNzEsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDcxLCA2NiwgNjksIDg0LCAxMjgsIDcxLCA2NiwgNjUsIDg5LCAKKyAgICA3MywgMTI4LCA3MSwgNjYsIDY1LCA3NSwgODUsIDgyLCA4NSwgNzgsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCA4NCwgODQsIDY1LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIDY1LCA4NSwgNzgsIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIAorICAgIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAKKyAgICAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIAorICAgIDgyLCA2OCwgNjksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA3MSwgCisgICAgNjUsIDIwOCwgNzEsIDY1LCA3OCwgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDcxLCA3MywgNjUsIDEyOCwgNzEsIDY1LCAKKyAgICA3OCwgNjgsIDE5MywgNzEsIDY1LCA3OCwgNTAsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA3NywgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY5LCAxMjgsIAorICAgIDcxLCA2NSwgNzcsIDE5NywgNzEsIDY1LCA3NywgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgCisgICAgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIDY1LCAxOTgsIDcxLCA2NSwgCisgICAgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNjgsIDEyOCwgNzEsIDY1LCAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDE5MywgNzEsIDY1LCAKKyAgICA2NSwgNzAsIDg1LCAxMjgsIDcxLCA2NSwgMTc4LCA3MSwgNDgsIDUzLCA1MiwgMTI4LCA3MSwgNDgsIDUzLCA1MSwgMTI4LCAKKyAgICA3MSwgNDgsIDUzLCA1MCwgMTI4LCA3MSwgNDgsIDUzLCA0OSwgMTI4LCA3MSwgNDgsIDUzLCA0OCwgMTI4LCA3MSwgNDgsIAorICAgIDUyLCA1NywgMTI4LCA3MSwgNDgsIDUyLCA1NiwgMTI4LCA3MSwgNDgsIDUyLCA1NSwgMTI4LCA3MSwgNDgsIDUyLCA1NCwgCisgICAgMTI4LCA3MSwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDEyOCwgNzEsIDQ4LCA1MiwgNTIsIDEyOCwgCisgICAgNzEsIDQ4LCA1MiwgNTEsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUxLCAxMjgsIDcxLCA0OCwgNTIsIDUwLCAxMjgsIDcxLCAKKyAgICA0OCwgNTIsIDQ5LCAxMjgsIDcxLCA0OCwgNTIsIDQ4LCAxMjgsIDcxLCA0OCwgNTEsIDU3LCAxMjgsIDcxLCA0OCwgNTEsIAorICAgIDU2LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgCisgICAgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDEyOCwgNzEsIDQ4LCA1MSwgNTMsIDEyOCwgNzEsIDQ4LCA1MSwgNTIsIDEyOCwgCisgICAgNzEsIDQ4LCA1MSwgNTEsIDEyOCwgNzEsIDQ4LCA1MSwgNTAsIDEyOCwgNzEsIDQ4LCA1MSwgNDksIDEyOCwgNzEsIDQ4LCAKKyAgICA1MSwgNDgsIDEyOCwgNzEsIDQ4LCA1MCwgNTcsIDEyOCwgNzEsIDQ4LCA1MCwgNTYsIDEyOCwgNzEsIDQ4LCA1MCwgNTUsIAorICAgIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAxMjgsIDcxLCA0OCwgNTAsIDUzLCAxMjgsIAorICAgIDcxLCA0OCwgNTAsIDUyLCAxMjgsIDcxLCA0OCwgNTAsIDUxLCAxMjgsIDcxLCA0OCwgNTAsIDUwLCAxMjgsIDcxLCA0OCwgCisgICAgNTAsIDQ5LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA1NywgMTI4LCA3MSwgNDgsIDQ5LCA1NiwgMTI4LCA3MSwgNDgsIDQ5LCA1NSwgMTI4LCA3MSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3MSwgNDgsIDQ5LCA1MywgMTI4LCA3MSwgNDgsIDQ5LCA1MiwgMTI4LCA3MSwgNDgsIDQ5LCA1MSwgMTI4LCA3MSwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDEyOCwgNzEsIDQ4LCA0OSwgCisgICAgNDgsIDEyOCwgNzEsIDQ4LCA0OCwgNTcsIDEyOCwgNzEsIDQ4LCA0OCwgNTYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY2LCAKKyAgICAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgNjUsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDEyOCwgNzEsIDQ4LCA0OCwgNTMsIDEyOCwgNzEsIDQ4LCA0OCwgNTIsIDEyOCwgNzEsIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzEsIDQ4LCA0OCwgNTAsIDEyOCwgNzEsIDQ4LCA0OCwgNDksIDEyOCwgNzAsIDg5LCA4OCwgCisgICAgMTI4LCA3MCwgODksIDg0LCAxMjgsIDcwLCA4OSwgODAsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIAorICAgIDcwLCA4NywgNjksIDY5LCAxMjgsIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgCisgICAgMTI4LCA3MCwgODYsIDgzLCA1MSwgMTI4LCA3MCwgODYsIDgzLCA1MCwgMTI4LCA3MCwgODYsIDgzLCA0OSwgMTI4LCA3MCwgCisgICAgODUsIDg4LCAxMjgsIDcwLCA4NSwgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgMTkzLCA3MCwgCisgICAgODUsIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgwLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIDIwNCwgNzAsIDg1LCAKKyAgICA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIAorICAgIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA3NCwgNzMsIDEyOCwgCisgICAgNzAsIDg1LCA2OSwgODQsIDEyOCwgNzAsIDg1LCA2OSwgMjA0LCA3MCwgODUsIDY5LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCAKKyAgICA4MiwgMTkzLCA3MCwgODMsIDczLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIAorICAgIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgCisgICAgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCAKKyAgICA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIAorICAgIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCAKKyAgICA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIAorICAgIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgCisgICAgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCAKKyAgICA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIAorICAgIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgCisgICAgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCAKKyAgICA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIAorICAgIDczLCA3OCwgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg3LCA2NSwgCisgICAgODIsIDY4LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCAKKyAgICA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgCisgICAgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCAKKyAgICA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgCisgICAgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCAKKyAgICA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIAorICAgIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIAorICAgIDcxLCA4OSwgMTI4LCA3MCwgMjA3LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIAorICAgIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAKKyAgICAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIAorICAgIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgCisgICAgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCAKKyAgICA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIAorICAgIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIDgzLCAKKyAgICAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCA3MCwgNzYsIDY1LCA3MSwgODMsIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCisgICAgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCAKKyAgICA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCAKKyAgICA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgODQsIAorICAgIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDczLCA4NiwgCisgICAgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDg0LCA2OSwgMTk2LCA3MCwgCisgICAgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKKyAgICA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgMjAzLCA3MCwgNzMsIDgzLCA3MiwgNjksIDg5LCA2OSwgCisgICAgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAyMDAsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgCisgICAgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCA3NSwgODMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCAKKyAgICA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgNzAsIDczLCA4MiwgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgCisgICAgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCAKKyAgICA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAorICAgIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCAKKyAgICA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIAorICAgIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCisgICAgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCAKKyAgICA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgODUsIDg4LCAxMjgsIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIAorICAgIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCA4NiwgNjUsIDc2LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgCisgICAgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCAKKyAgICA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAyMDAsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIAorICAgIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAxOTcsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgCisgICAgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCAKKyAgICA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCA3MCwgNjksIDcyLCAxMjgsIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCAKKyAgICA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIAorICAgIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAKKyAgICAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODksIAorICAgIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgNjUsIDIxNiwgNzAsIDY1LCA4NCwgNzMsIDcxLCA4NSwgNjksIDEyOCwgNzAsIAorICAgIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgCisgICAgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCAKKyAgICA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgNjUsIDg0LCAxMjgsIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODEsIAorICAgIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgCisgICAgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCAKKyAgICA3MywgNzgsIDE5OSwgNzAsIDY1LCA3NiwgNzYsIDY5LCAyMDYsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIAorICAgIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgCisgICAgNjUsIDY3LCA4NCwgNzksIDgyLCA4OSwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCAKKyAgICA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgCisgICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCAKKyAgICA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIAorICAgIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAorICAgIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgCisgICAgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAKKyAgICAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIAorICAgIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgCisgICAgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgCisgICAgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIAorICAgIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIAorICAgIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgCisgICAgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCAKKyAgICA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgCisgICAgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgCisgICAgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCAKKyAgICA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCAKKyAgICA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgMTI4LCA2OSwgODksIDY5LCA4MywgMTI4LCA2OSwgODksIDY5LCA3MSwgNzYsIAorICAgIDY1LCA4MywgODMsIDY5LCA4MywgMTI4LCA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgCisgICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA4NCwgNjksIDgyLCA4MiwgNjksIDgzLCA4NCwgODIsIAorICAgIDczLCA2NSwgMjA0LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgCisgICAgNzIsIDczLCA3MSwgMjAwLCA2OSwgODgsIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDY5LCA4OCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCA3NiwgNjksIDgzLCAyMTEsIAorICAgIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIDY5LCA4OCwgCisgICAgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAorICAgIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgNjksIDEyOCwgCisgICAgNjksIDg4LCA2NywgNjksIDgzLCA4MywgMTI4LCA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCAKKyAgICA4NywgNjksIDEyOCwgNjksIDg2LCA2OSwgODIsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIAorICAgIDcxLCAxMjgsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDY1LCAyMDYsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDQ1LCA2NSwgCisgICAgNzAsIDgyLCA3MywgNjcsIDY1LCAxMjgsIDY5LCA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIAorICAgIDIxNywgNjksIDg1LCA4MiwgMjA3LCA2OSwgODUsIDc2LCA2OSwgMjEwLCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIAorICAgIDQ1LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDY5LCAxMjgsIDY5LCA4NSwgNDUsIDY1LCAxMjgsIDY5LCA4NCwgODgsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCAKKyAgICA4NCwgNjUsIDEyOCwgNjksIDg0LCA3MiwgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIAorICAgIDgyLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA2OSwgODQsIDY2LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgCisgICAgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCAKKyAgICA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIAorICAgIDE3OCwgNjksIDgzLCA3MiwgNDksIDU0LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA2NywgCisgICAgMTI4LCA2OSwgODMsIDY1LCAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCAKKyAgICA2NiwgNjUsIDgyLCA4MiwgNjksIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIAorICAgIDgyLCA3MSwgMTI4LCA2OSwgODIsIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAKKyAgICAyMTIsIDY5LCA4MSwgODUsIDczLCA2OCwgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCisgICAgMjEwLCA2OSwgODEsIDg1LCA2NSwgNzYsIDgzLCAxMjgsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA2OSwgODEsIDg1LCAKKyAgICA2NSwgNzYsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgCisgICAgMjA2LCA2OSwgODAsIDc5LCA2NywgNzIsIDEyOCwgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCAKKyAgICA2OSwgODAsIDczLCA2OCwgNjUsIDg1LCA4MiwgNjksIDY1LCAyMDYsIDY5LCA4MCwgNjksIDc4LCA4NCwgNzIsIDY5LCA4NCwgCisgICAgNzMsIDE5NSwgNjksIDgwLCA2OSwgNzEsIDY5LCA4MiwgNzcsIDY1LCAxMjgsIDY5LCA3OSwgODQsIDEyOCwgNjksIDc5LCAKKyAgICA3NywgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgNjksIDc5LCA3NiwgMTI4LCA2OSwgNzksIDcyLCAxMjgsIDY5LCAKKyAgICA3OCwgODksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDY5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIAorICAgIDgwLCAxOTcsIDY5LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA3OCwgODQsIDgyLCA4OSwgCisgICAgNDUsIDUwLCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgNDUsIDQ5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgMTI4LCAKKyAgICA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2OSwgNzgsIDg0LCA3MiwgODUsIDgzLCA3MywgNjUsIDgzLCA3NywgMTI4LCA2OSwgNzgsIAorICAgIDg0LCA2OSwgODIsIDgwLCA4MiwgNzMsIDgzLCA2OSwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA2OSwgCisgICAgNzgsIDg0LCA2OSwgODIsIDEyOCwgNjksIDc4LCA4NCwgNjksIDIxMCwgNjksIDc4LCA4MSwgODUsIDczLCA4MiwgODksIAorICAgIDEyOCwgNjksIDc4LCA4MSwgMTI4LCA2OSwgNzgsIDc5LCAyMTEsIDY5LCA3OCwgNzgsIDEyOCwgNjksIDc4LCA3NiwgNjUsIAorICAgIDgyLCA3MSwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3OCwgNzEsIDczLCA3OCwgNjksIDEyOCwgNjksIDc4LCA2OCwgCisgICAgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjksIDc4LCA2OCwgNjksIDgwLCAKKyAgICAxMjgsIDY5LCA3OCwgNjgsIDY5LCA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCA2NywgNzksIDg1LCA3OCwgODQsIAorICAgIDY5LCA4MiwgODMsIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgODUsIDgyLCA2OSwgMTI4LCA2OSwgNzgsIDY3LCA3NiwgCisgICAgNzksIDgzLCA3MywgNzgsIDE5OSwgNjksIDc4LCA2NywgMTI4LCA2OSwgNzgsIDY1LCA4MiwgODgsIDczLCAyMTEsIDY5LCAKKyAgICA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNzksIDIxMSwgNjksIDc3LCA4MCwgODQsIDIxNywgNjksIDc3LCA4MCwgNzIsIAorICAgIDY1LCA4NCwgNzMsIDE5NSwgNjksIDc3LCA4MCwgNzIsIDY1LCA4MywgNzMsIDIxMSwgNjksIDc3LCA2NiwgODIsIDc5LCA3MywgCisgICAgNjgsIDY5LCA4MiwgODksIDEyOCwgNjksIDc3LCA2NiwgNzYsIDY5LCA3NywgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNzYsIDc2LCAKKyAgICA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDY5LCA3NiwgODQsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4NCwgNzMsIDE5NSwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgCisgICAgNzMsIDgzLCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCAKKyAgICA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgCisgICAgNjksIDc4LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDY1LCA3OCwgODQsIAorICAgIDEyOCwgNjksIDc2LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCAxOTUsIDY5LCA3NiwgNjUsIDcwLCA4MiwgNzksIDc4LCAxMjgsIAorICAgIDY5LCA3NSwgODMsIDg0LCA4MiwgNjksIDgwLCA4NCwgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDEyOCwgNjksIDc1LCA3MCwgCisgICAgNzksIDc4LCA3MywgODQsIDczLCA3NSwgNzksIDc4LCAxMjgsIDY5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2OSwgNzQsIDY5LCAKKyAgICA2NywgMjEyLCA2OSwgNzMsIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgODksIDEyOCwgNjksIDczLCA3MSwgNzIsIAorICAgIDg0LCAyMTcsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDIxMSwgCisgICAgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNjksIDczLCAKKyAgICA3MSwgNzIsIDg0LCA2OSwgNjksIDIwNiwgNjksIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA2OSwgNzMsIDY5LCAxMjgsIDY5LCA3MiwgODcsIDY1LCAyMTgsIDY5LCA3MSwgODksIDgwLCA4NCwgNzksIDc2LCAKKyAgICA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA3MywgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgNjksIDc1LCA2NSwgNjUsIDEyOCwgNjksIDY5LCA3MiwgMTI4LCA2OSwgCisgICAgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCAKKyAgICA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIAorICAgIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgNjksIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAKKyAgICAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCA2OSwgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCAKKyAgICA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIDc3LCA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIAorICAgIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgCisgICAgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCA0OCwgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCAKKyAgICA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgMTI4LCA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCA1MCwgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgCisgICAgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIDEyOCwgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgCisgICAgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCAKKyAgICA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgCisgICAgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIDEyOCwgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgCisgICAgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCAKKyAgICA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCA1MywgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCA2OSwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgCisgICAgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCAKKyAgICA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCAKKyAgICA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIAorICAgIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIDkwLCA2NSwgNjUsIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIAorICAgIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCAKKyAgICA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCAKKyAgICA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIDg2LCA2OCwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgMTI4LCA2OCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgCisgICAgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCAKKyAgICA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIAorICAgIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIAorICAgIDIwNCwgNjgsIDg1LCA3MiwgMTI4LCA2OCwgODUsIDcxLCA4NSwgNjgsIDEyOCwgNjgsIDg1LCA2NiwgNTAsIDEyOCwgNjgsIAorICAgIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIDgyLCA4NSwgNzcsIAorICAgIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDc2LCA2OSwgCisgICAgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA2OCwgODIsIDc5LCAKKyAgICA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDg2LCAxOTcsIAorICAgIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgMTI4LCA2OCwgCisgICAgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OCwgODIsIDY1LCA3NywgMTI4LCA2OCwgODIsIDY1LCAyMDUsIDY4LCAKKyAgICA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCA2NSwgNzEsIDc5LCAyMDYsIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIAorICAgIDc4LCAxOTksIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCA4MywgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAxOTMsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgODMsIAorICAgIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgCisgICAgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDc5LCA4NywgNzgsIDEyOCwgNjgsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCAKKyAgICA4NSwgNzEsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIAorICAgIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKKyAgICA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAKKyAgICAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgCisgICAgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCAKKyAgICA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc3LCA2NSwgNzMsIDIwNiwgNjgsIDc5LCA3NiwgODAsIAorICAgIDcyLCA3MywgNzgsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDgzLCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA2NSwgMjEwLCA2OCwgCisgICAgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgNzUsIDc3LCA2NSwgNzMsIDEyOCwgNjgsIDc5LCA3MywgODQsIAorICAgIDEyOCwgNjgsIDc5LCA3MSwgMTI4LCA2OCwgNzksIDE5OSwgNjgsIDc5LCA2OSwgMjExLCA2OCwgNzksIDY4LCA2OSwgNzUsIAorICAgIDY1LCA4NCwgNjUsIDEyOCwgNjgsIDc5LCA2NiwgODIsIDc5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgCisgICAgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgMTk3LCA2OCwgNzksIDY1LCAKKyAgICAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCA3NywgMTI4LCA2OCwgMjA1LCA2OCwgNzYsIDg1LCAxMjgsIDY4LCA3NiwgCisgICAgNzksIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgNjgsIDc2LCA3MiwgNjUsIDEyOCwgCisgICAgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIDEyOCwgNjgsIDc1LCA2NSwgODIsIDEyOCwgCisgICAgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIDY4LCA3NCwgNjksIDgyLCA4NiwgMTI4LCAKKyAgICA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDczLCA5MCwgOTAsIDIxNywgNjgsIDczLCA4NiwgNzksIAorICAgIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgCisgICAgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAKKyAgICA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgCisgICAgMTk2LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgMTk3LCA2OCwgNzMsIDg2LCAKKyAgICA2OSwgODIsIDcxLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNzMsIDg0LCA4NCwgMjA3LCA2OCwgNzMsIDgzLCA4NCwgNzksIAorICAgIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc4LCA3MSwgODUsIDczLCA4MywgNzIsIDEyOCwgCisgICAgNjgsIDczLCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCA0NSwgNTAsIAorICAgIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCAxMjgsIDY4LCA3MywgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgCisgICAgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDc1LCAxMjgsIDY4LCA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDY4LCAKKyAgICA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIDg1LCA3OSwgODUsIDIxMSwgNjgsIAorICAgIDczLCA4MywgMTk1LCA2OCwgNzMsIDgzLCA2NSwgODAsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgNjgsIDczLCA4MywgCisgICAgNjUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDczLCA4MiwgNzEsIDE5MywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzYsIAorICAgIDIxNywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA4MCwgODQsIDY5LCAKKyAgICAxMjgsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjgsIAorICAgIDczLCA4MCwgNzYsIDczLCAxMjgsIDY4LCA3MywgODAsIDc2LCAyMDEsIDY4LCA3MywgNzgsIDcxLCA2NiwgNjUsIDIxMiwgCisgICAgNjgsIDczLCAyMDYsIDY4LCA3MywgNzcsIDc3LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCAKKyAgICA3MywgNzksIDc4LCA0NSwgNTEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIDY4LCA3MywgNzcsIDczLCAKKyAgICA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA3NywgNzMsIDY4LCA3MywgMTkzLCA2OCwgNzMsIAorICAgIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDIwNiwgCisgICAgNjgsIDczLCA3NywgNTAsIDEyOCwgNjgsIDczLCA3NiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA2OCwgNzMsIAorICAgIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgCisgICAgNzksIDc4LCAxMjgsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY4LCA3MywgNzEsIDY1LCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA3MywgNzEsIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAyMTEsIDY4LCA3MywgNzAsIAorICAgIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCAyMTcsIDY4LCA3MywgCisgICAgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIAorICAgIDc4LCA4NCwgNzMsIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDY4LCA3MywgCisgICAgNzAsIDY1LCA4NCwgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgMjExLCAKKyAgICA2OCwgNzMsIDY5LCA4MCwgMTI4LCA2OCwgNzMsIDE5NywgNjgsIDczLCA2NiwgMTI4LCA2OCwgNzMsIDY1LCA4NCwgNzksIAorICAgIDc4LCA3OSwgMjA2LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgCisgICAgNzYsIDIwMSwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCAKKyAgICAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDE5NiwgNjgsIDczLCA2NSwgNzcsIDY5LCA4NCwgNjksIDIxMCwgNjgsIAorICAgIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCA2NSwgMTI4LCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDE5MywgCisgICAgNjgsIDczLCA2NSwgNzYsIDY5LCA2NywgODQsIDQ1LCAyMDgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCA3NiwgMTI4LCAKKyAgICA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDkwLCA2OSwgCisgICAgMTk2LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKKyAgICA3MywgMjExLCA2OCwgNzIsIDc5LCA4NSwgMTI4LCA2OCwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIDc5LCAxMjgsIDY4LCAKKyAgICA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgODUsIDEyOCwgNjgsIDcyLCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzIsIAorICAgIDc5LCAxMjgsIDY4LCA3MiwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA2OSwgCisgICAgMTI4LCA2OCwgNzIsIDcyLCA2NSwgMTI4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA4MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2NSwgODQsIDcyLCAxMjgsIAorICAgIDY4LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA3MiwgNjUsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDc2LCA4NSwgCisgICAgMTI4LCA2OCwgNzIsIDY1LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgNjgsIDY5LCA4OSwgCisgICAgODQsIDY5LCA4MiwgNzksIDIxMywgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMSwgNjgsIDY5LCA4OCwgNzMsIDY1LCAKKyAgICAxMjgsIDY4LCA2OSwgODYsIDczLCA2NywgMTk3LCA2OCwgNjksIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIDIwMywgNjgsIDY5LCA4MywgNzMsIDcxLCA3OCwgCisgICAgMTI4LCA2OCwgNjksIDgzLCA3MywgMTI4LCA2OCwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA2OSwgCisgICAgODIsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODIsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgNzgsIDg0LCA3MywgCisgICAgODMsIDg0LCA4MiwgMjE3LCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAKKyAgICA4NCwgNzksIDgyLCAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCA2OSwgNzgsIAorICAgIDc4LCA2OSwgNzgsIDEyOCwgNjgsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA3OCwgMTk3LCA2OCwgNjksIDc4LCA2NSwgCisgICAgODIsIDczLCA4NSwgMjExLCA2OCwgNjksIDc2LCA4NCwgNjUsIDEyOCwgNjgsIDY5LCA3NiwgODQsIDE5MywgNjgsIDY5LCAKKyAgICA3NiwgODQsIDEyOCwgNjgsIDY5LCA3NiwgODAsIDcyLCA3MywgMTk1LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgCisgICAgMjE3LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCAKKyAgICA3MywgODQsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDIxMCwgNjgsIDY5LCA3NiwgNzMsIAorICAgIDY3LCA3MywgNzksIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAKICAgICAxOTcsIDY4LCA2OSwgNzUsIDY1LCAxMjgsIDY4LCA2OSwgNzUsIDEyOCwgNjgsIDY5LCA3MywgMTI4LCA2OCwgNjksIDcyLCAKICAgICA3MywgMTI4LCA2OCwgNjksIDcxLCA4MiwgNjksIDE5NywgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIAogICAgIDEyOCwgNjgsIDY5LCA3MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgMjExLCA2OCwgNjksIDY5LCA4MiwgCkBAIC00NTQ3LDk2ICs0NTUwLDk2IEBACiAgICAgNzMsIDc5LCAyMDYsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA2NSwgNzYsIDg0LCA2NSwgMTI4LCAKICAgICA2NSwgNzYsIDgwLCA3MiwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDE5MywgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIAogICAgIDc4LCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY1LCA3NiwgODAsIDY1LCAKLSAgICAxMjgsIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgNzYsIDc2LCA3MywgNjUsIAotICAgIDc4LCA2NywgNjksIDEyOCwgNjUsIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCA2NSwgNzYsIDc1LCA2NSwgCi0gICAgNzYsIDczLCA0NSwgNTAsIDEyOCwgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgMTI4LCA2NSwgNzYsIDczLCA3MSwgNzgsIDY5LCAKLSAgICAxOTYsIDY1LCA3NiwgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzYsIDczLCA2OSwgNzgsIDEyOCwgNjUsIDc2LCA3MywgNjksIAotICAgIDIwNiwgNjUsIDc2LCA3MSwgNzMsIDIxOCwgNjUsIDc2LCA3MCwgNjUsIDEyOCwgNjUsIDc2LCA2OSwgODUsIDIxMiwgNjUsIAotICAgIDc2LCA2OSwgODIsIDg0LCAxMjgsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCA3NywgNjYsIDczLCA2NywgCi0gICAgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIDY1LCA3NiwgNjUsIDg5LCAKLSAgICA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA0NSwgNzYsIAotICAgIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCA3NSwgNjUsIDY2LCAKLSAgICAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIDY1LCA3NSwgNjYsIAotICAgIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgNzMsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIDc5LCAyMDYsIDY1LCAKLSAgICA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCAyMTMsIDY1LCA3MywgNzgsIDc4LCAxMjgsIAotICAgIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDczLCA3MiwgODYsIDg1LCA4MywgCi0gICAgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIDEyOCwgNjUsIDcyLCA4MywgNjUsIDEyOCwgNjUsIDcyLCA2NSwgNzgsIDE5OSwgCi0gICAgNjUsIDcyLCA2NSwgNzEsIDcxLCA2NSwgMjEwLCA2NSwgNzIsIDY1LCA2OCwgMTI4LCA2NSwgNzEsIDg1LCA3OCwgNzEsIAotICAgIDEyOCwgNjUsIDcxLCA3OSwgNzEsIDIwMSwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDcxLCA2NSwgNzMsIDc4LCAxMjgsIAotICAgIDY1LCA3MCwgODQsIDY5LCAyMTAsIDY1LCA3MCwgODMsIDY1LCA2NSwgODEsIDEyOCwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMjA2LCA2NSwgNzAsIDc5LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCA2OSwgNjgsIDEyOCwgNjUsIDcwLCAKLSAgICA3MSwgNzIsIDY1LCA3OCwgMjAxLCA2NSwgNzAsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjksIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDg5LCAxMjgsIDY1LCA2OSwgODMsIDY3LCA4NSwgNzYsIDY1LCA4MCwgCi0gICAgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNjksIDgzLCAxMjgsIDY1LCA2OSwgODIsIDczLCAKLSAgICA2NSwgMjA0LCA2NSwgNjksIDgyLCAxMjgsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIAotICAgIDY1LCA2OSwgNzYsIDEyOCwgNjUsIDY5LCA3NSwgMTI4LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgNjUsIDY5LCA3MSwgCi0gICAgMTI4LCA2NSwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OSwgMTI4LCA2NSwgNjksIDY4LCAKLSAgICA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY4LCAxMjgsIDY1LCA2OSwgNjYsIDEyOCwgNjUsIAotICAgIDY4LCA4NiwgNjUsIDc4LCA4NCwgNjUsIDcxLCA2OSwgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgCi0gICAgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjgsIDY5LCAxOTksIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDgzLCA2OSwgMTk2LCAKLSAgICA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCAyMTEsIDY1LCA2OCwgNjgsIDY1LCA3NSwgMTI4LCA2NSwgNjgsIDY1LCAyMDMsIAotICAgIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA4NSwgODQsIDY5LCAKLSAgICA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDY1LCA2NywgODUsIDg0LCAxOTcsIAotICAgIDY1LCA2NywgODQsIDg1LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA2NywgODQsIDczLCA4NiwgNjUsIDg0LCAxOTcsIDY1LCA2NywgCi0gICAgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNzMsIDE5NSwgNjUsIDY3LCA3NSwgNzgsIDc5LCA4NywgNzYsIDY5LCA2OCwgNzEsIAotICAgIDY5LCAxMjgsIDY1LCA2NywgNjcsIDg1LCA3NywgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA2NywgCi0gICAgNzksIDg1LCA3OCwgMjEyLCA2NSwgNjcsIDY3LCA2OSwgODAsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDQ1LCAKLSAgICA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgNjcsIAotICAgIDY3LCA2OSwgNzgsIDIxMiwgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCA4MywgNzcsIDY1LCAKLSAgICAyMDQsIDY1LCA2NiwgODUsIDc4LCA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIDY1LCA4MywgNzMsIAotICAgIDY1LCAyMDYsIDY1LCA2NiwgNjYsIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjYsIDY1LCA3MCwgCi0gICAgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY1LCAKLSAgICA4OSwgMTI4LCA2NSwgNjUsIDg3LCAxMjgsIDY1LCA2NSwgNzksIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCA2NSwgNjUsIDY2LCAKLSAgICA2NSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDksIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCi0gICAgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCAKLSAgICA1MCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MSwgMTI4LCA2NSwgNjUsIAotICAgIDQ4LCA1MCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OCwgMTI4LCA2NSwgCi0gICAgNjUsIDQ4LCA0OSwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OSwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MiwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCAKLSAgICA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgCi0gICAgNjUsIDY1LCA0OCwgNDgsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA0OCwgNTQsIDU3LCAKLSAgICAxMjgsIDY1LCA0OCwgNTQsIDU2LCAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCA0OCwgNTQsIDU0LCAxMjgsIDY1LCAKLSAgICA0OCwgNTQsIDUzLCAxMjgsIDY1LCA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgNTQsIDUxLCAxMjgsIDY1LCA0OCwgNTQsIAotICAgIDUwLCAxMjgsIDY1LCA0OCwgNTQsIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA0OCwgNTMsIDU3LCAxMjgsIAotICAgIDY1LCA0OCwgNTMsIDU2LCAxMjgsIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCA0OCwgNTMsIDU0LCAxMjgsIDY1LCA0OCwgCi0gICAgNTMsIDUzLCAxMjgsIDY1LCA0OCwgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIDUxLCAxMjgsIDY1LCA0OCwgNTMsIDUwLCAKLSAgICAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIDY1LCA0OCwgNTIsIDU3LCAxMjgsIDY1LCAKLSAgICA0OCwgNTIsIDU2LCAxMjgsIDY1LCA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgNTIsIDU0LCAxMjgsIDY1LCA0OCwgNTIsIAotICAgIDUzLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MywgMTI4LCA2NSwgNDgsIDUyLCA1MiwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgCi0gICAgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUwLCAKLSAgICAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgMTI4LCAKLSAgICA2NSwgNDgsIDUxLCA1NywgMTI4LCA2NSwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNDgsIDUxLCA1NSwgMTI4LCA2NSwgNDgsIAotICAgIDUxLCA1NCwgMTI4LCA2NSwgNDgsIDUxLCA1MywgMTI4LCA2NSwgNDgsIDUxLCA1MiwgMTI4LCA2NSwgNDgsIDUxLCA1MSwgCi0gICAgMTI4LCA2NSwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDUyLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIAotICAgIDUzLCA2NSwgMTI4LCA2NSwgNDUsIDY5LCA4NSwgMTI4LCA0NSwgODUsIDIwNSwgNDUsIDgwLCA3MiwgODIsIDg1LCAxMjgsIAotICAgIDQ1LCA3NSwgNzIsIDg5LCA4NSwgMTk2LCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDQ1LCA2OCwgOTAsIDg1LCAKLSAgICAxOTYsIDQ1LCA2NywgNzIsIDY1LCAyMTAsIDQ1LCA2NywgNzIsIDY1LCA3NiwgMTI4LCAKKyAgICAxMjgsIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NSwgNzYsIDc3LCAxMjgsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCAKKyAgICA3NiwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIAorICAgIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgCisgICAgNzMsIDcxLCA3OCwgNjksIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCAKKyAgICA2NSwgNzYsIDczLCA2OSwgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIAorICAgIDY5LCA4NSwgMjEyLCA2NSwgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDc3LCA2NiwgNzMsIDY3LCAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIAorICAgIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgCisgICAgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCAKKyAgICA3NiwgODMsIDc1LCA2NSwgNjYsIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIAorICAgIDE5NSwgNjUsIDc1LCA2NiwgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIAorICAgIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgCisgICAgNzksIDIwNiwgNjUsIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCAKKyAgICA3OCwgNzgsIDEyOCwgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIAorICAgIDcyLCA4NiwgODUsIDgzLCAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgCisgICAgNzIsIDY1LCA3OCwgMTk5LCA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCAKKyAgICA3MSwgODUsIDc4LCA3MSwgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgCisgICAgNzgsIDEyOCwgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCAKKyAgICA3MywgNjcsIDY1LCAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA2NSwgNzAsIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDY1LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIAorICAgIDg1LCA3NiwgNjUsIDgwLCA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgCisgICAgNjUsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCAKKyAgICA3NiwgNjUsIDEyOCwgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCAKKyAgICA2NSwgNjksIDcxLCAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIAorICAgIDY1LCA2OSwgNjgsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgCisgICAgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAKKyAgICAxMjgsIDY1LCA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIAorICAgIDY5LCAxOTYsIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgCisgICAgNjUsIDIwMywgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgCisgICAgODQsIDE5NywgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIAorICAgIDE5NywgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgCisgICAgNjksIDY4LCA3MSwgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA2NSwgNjcsIDY3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIAorICAgIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIAorICAgIDgzLCA3NywgNjUsIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgCisgICAgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCAKKyAgICA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA2NSwgNjUsIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIAorICAgIDY1LCA2NSwgNjYsIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDUwLCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIAorICAgIDY1LCA2NSwgNDgsIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAKKyAgICAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDksIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDksIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNDksIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAKKyAgICA2NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ4LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCAKKyAgICA1NCwgNTcsIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIAorICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIAorICAgIDQ4LCA1NCwgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgCisgICAgNTcsIDEyOCwgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgCisgICAgNjUsIDQ4LCA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MywgNTAsIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIAorICAgIDEyOCwgNjUsIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIAorICAgIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDUxLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTAsIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDY1LCA0OCwgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTEsIDUxLCAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA0OSwgNTIsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIAorICAgIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgCisgICAgODUsIDEyOCwgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCAKKyAgICA5MCwgODUsIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBsZXhpY29uX29mZnNldFtdID0gewotICAgIDAsIDAsIDYsIDEwLCAxOCwgMjMsIDI3LCAzNCwgMzksIDQxLCA0NCwgNTAsIDYyLCA3MCwgODAsIDkzLCAxMDIsIDEwOCwgCisgICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ3LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKICAgICAxMTMsIDEyMSwgMTMwLCAxMzUsIDE0MCwgMTQzLCAxNDcsIDE1MywgMTU4LCAxNjMsIDE3MSwgMTc4LCAxODYsIDE5MSwgCiAgICAgMTk0LCAyMDAsIDIwOCwgMjE1LCAyMjUsIDIzMCwgMjM3LCAyNDYsIDI0OSwgMjU0LCAyNTcsIDI2MywgMjY3LCAyNzIsIAogICAgIDI4MSwgMjg4LCAyOTUsIDMwMSwgMzEwLCAzMTUsIDMyMSwgMzI3LCAzMzUsIDE0NCwgMzQxLCAzNDksIDM1MCwgMzU4LCAKLSAgICAzNjEsIDM2NywgMzY5LCAzNzUsIDM4MiwgMzg0LCAzOTEsIDM5NSwgNDAzLCA0MTAsIDQxNSwgNDE3LCA0MjIsIDQyOSwgCi0gICAgNDMxLCAyOTksIDQzNywgNDM5LCA0NDQsIDQ0OSwgNDUyLCA0NTcsIDQ2MywgNDcwLCA0NzksIDQ4OSwgNDk0LCA0OTgsIAorICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDEyLCA0MTcsIDQyMiwgNDI3LCAKKyAgICA0MzQsIDQzNiwgMjk5LCA0NDIsIDQ0NSwgNDQ3LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCiAgICAgNTA1LCA1MTgsIDUyMiwgNTMxLCA1MzgsIDU0NSwgNTQ4LCA1NTQsIDU1OCwgNTYyLCA1NzIsIDU4MCwgNTg4LCA1OTYsIAotICAgIDYwNSwgNjEzLCA2MTgsIDYxOSwgNjIzLCA2MzEsIDYzOCwgNjQ4LCA2NTksIDY2MywgNjY2LCA2NzAsIDY3MywgMzQ4LCAKLSAgICA2NzgsIDY4NywgNjkxLCA2OTcsIDcwMywgNzA1LCA3MDgsIDcxMSwgNzE0LCA3MTgsIDcyMiwgNzMxLCA3MzksIDc0NCwgCisgICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1MiwgNjYzLCA2NjcsIDY3MCwgNjczLCA2NzgsIAorICAgIDM0OCwgNjgyLCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKICAgICA3NDcsIDc1MSwgNzU3LCA3NjQsIDc3MSwgNzc2LCA3ODUsIDc5NCwgODAxLCA4MDUsIDgxOCwgODI3LCA4MzUsIDg0MSwgCiAgICAgNTU3LCA4NTAsIDg2MCwgODY3LCA4NzMsIDg3OSwgODg2LCA4OTQsIDg5OCwgNzQ5LCA5MDYsIDkxNSwgNTAzLCA5MjMsIAogICAgIDkyOCwgOTM0LCAxNywgOTQzLCA5NDgsIDk1MSwgOTU1LCA5NTksIDk2NiwgOTY5LCA5NzYsIDk4MCwgOTg4LCA5OTIsIAotICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MSwgCi0gICAgMTA2OSwgMTA3MiwgMTA3NywgMTA4MywgMTA5MSwgMTA5NywgMTEwMiwgMTEwNSwgMTEwOCwgMTExLCAxMTEzLCAxMTE3LCAKLSAgICAxMTIzLCAxMTI5LCAxMTMyLCAxMTM4LCAxMTQyLCAxMTQ3LCAxMTUzLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKKyAgICAxMDAwLCAxMDA0LCAxMDA3LCAxMDE0LCAxMDIxLCAxOTIsIDEwMjQsIDEwMjksIDEwMzksIDEwNDgsIDEwNTUsIDEwNjAsIAorICAgIDEwNjYsIDEwNzIsIDEwODAsIDEwODMsIDEwODgsIDEwOTQsIDExMDIsIDExMDcsIDExMTAsIDExMTMsIDExMSwgMTExOCwgCisgICAgMTEyMiwgMTEyOCwgMTEzNCwgMTEzNywgMTE0MywgMTE0NywgMTE1MiwgMTE1OCwgMTE2OCwgMTE3MiwgMTE3NSwgMTE3OCwgCiAgICAgMTE4NywgMTE5MSwgMTE5NCwgMTE5OSwgMTIwNCwgMTIxMCwgMTIxNSwgMTIyMCwgMTIyNSwgMTIyOSwgMTIzNCwgMTI0MCwgCiAgICAgMTI0NSwgMTI1MCwgMTI1NCwgMTI2MCwgMTI2NSwgMTI3MCwgMTI3NSwgMTI3OSwgMTI4NCwgMTI4OSwgMTI5NCwgMTMwMCwgCiAgICAgMTMwNiwgMTMxMiwgMTMxNywgMTMyMSwgMTMyNiwgMTMzMSwgMTMzNiwgMTM0MCwgMTM0NSwgMTM1MCwgMTM1NSwgMTM2MCwgCkBAIC00NjUwLDcgKzQ2NTMsNyBAQAogICAgIDE2NjUsIDE2NzAsIDE2NzUsIDE2NzksIDE2ODIsIDE2ODcsIDE2OTIsIDE2OTcsIDE3MDIsIDE3MDgsIDE3MTMsIDE3MTcsIAogICAgIDEzMjIsIDE3MjAsIDE3MjUsIDE3MzAsIDEzMjcsIDE3MzQsIDE3MzgsIDE3NDUsIDEzMzIsIDE3NTIsIDEzMzcsIDE3NTYsIAogICAgIDE3NTgsIDE3NjMsIDE3NjksIDEzNDEsIDE3NzQsIDE3ODMsIDEzNDYsIDE3ODgsIDE3OTQsIDEzNTEsIDE3OTksIDE4MDQsIAotICAgIDE4MDcsIDE4MTIsIDE4MTYsIDE4MjAsIDE4MjQsIDE4MjcsIDE4MzEsIDEzNTYsIDEzNjEsIDExNTYsIDE4MzYsIDE4NDIsIAorICAgIDE4MDcsIDE4MTIsIDE4MTYsIDE4MjAsIDE4MjQsIDE4MjcsIDE4MzEsIDEzNTYsIDEzNjEsIDEwNTgsIDE4MzYsIDE4NDIsIAogICAgIDE4NDgsIDE4NTQsIDE4NjAsIDE4NjYsIDE4NzIsIDE4NzgsIDE4ODQsIDE4ODksIDE4OTUsIDE5MDEsIDE5MDcsIDE5MTMsIAogICAgIDE5MTksIDE5MjUsIDE5MzEsIDE5MzcsIDE5NDMsIDE5NDgsIDE5NTMsIDE5NTgsIDE5NjMsIDE5NjgsIDE5NzMsIDE5NzgsIAogICAgIDE5ODMsIDE5ODgsIDE5OTMsIDE5OTksIDIwMDQsIDIwMTAsIDIwMTUsIDIwMjEsIDIwMjcsIDIwMzIsIDIwMzgsIDIwNDQsIApAQCAtNDY3Nyw3ICs0NjgwLDcgQEAKICAgICAzMjQxLCAzMjQ1LCAzMjQ4LCAzMjYxLCAzMjY1LCAzMjY5LCAzMjczLCAzMjc3LCAzMjgxLCAzMjg0LCAzMjg4LCAzMjkyLCAKICAgICAzMjk3LCAzMzAxLCAzMzA2LCAzMzExLCAzMzE2LCAzMzIwLCAzMzIzLCAzMzI2LCAzMzMyLCAzMzM2LCAzMzQwLCAzMzQzLCAKICAgICAzMzQ3LCAzMzUxLCAzMzU0LCAzMzYwLCAzMzY1LCAzMzcwLCAzMzc2LCAzMzgxLCAzMzg2LCAzMzkyLCAzMzk4LCAzNDAzLCAKLSAgICAzNDA4LCAzNDEzLCAxMTE1LCA1NDcsIDM0MTgsIDM0MjEsIDM0MjYsIDM0MzAsIDM0MzMsIDM0MzcsIDM0NDIsIDM0NDcsIAorICAgIDM0MDgsIDM0MTMsIDExMjAsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCiAgICAgMzQ1MSwgMzQ1NiwgMzQ2MCwgMzQ2NSwgMzQ2OSwgMzQ3MywgMzQ3OSwgMzQ4NSwgMzQ4OCwgMzQ5MSwgMzQ5NywgMzUwNCwgCiAgICAgMzUxMSwgMzUxNywgMzUyNCwgMzUyOSwgMzUzMywgMzU0MCwgMzU0NywgMzU1MiwgMzU1NiwgMzU2NiwgMzU3MCwgMzU3NCwgCiAgICAgMzU3OSwgMzU4NCwgMzU5NCwgMjEwNywgMzU5OSwgMzYwMywgMzYwNiwgMzYxMiwgMzYxNywgMzYyMywgMzYyOSwgMzYzNCwgCkBAIC00NzI2LDcgKzQ3MjksNyBAQAogICAgIDY2ODMsIDY2OTgsIDY3MTMsIDY3MjgsIDY3NDMsIDY3NTgsIDY3NzMsIDY3ODgsIDY4MDMsIDY4MTgsIDY4MzMsIDY4NDgsIAogICAgIDY4NjMsIDY4NzgsIDY4OTMsIDY5MDgsIDY5MjMsIDY5MzgsIDY5NTMsIDY5NjgsIDY5ODMsIDY5OTgsIDcwMTMsIDcwMjgsIAogICAgIDcwMzcsIDcwNDYsIDcwNTEsIDcwNTcsIDcwNjcsIDcwNzEsIDcwNzYsIDcwODEsIDcwODksIDcwOTMsIDcwOTYsIDcxMDAsIAotICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDQyLCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKKyAgICAyOTc1LCA3MTAzLCA3MTA4LCAyOTgsIDQyNSwgNzExNCwgNzEyMiwgNzEyNiwgNzEzMCwgNzEzMywgNzEzNywgNzE0MywgCiAgICAgNzE0NywgNzE1NSwgNzE2MSwgNzE2NiwgNzE3MywgNzE4MCwgNzE4NiwgNzE5MSwgNzE5OCwgNzIwNCwgNzIxMiwgNzIxNiwgCiAgICAgNzIyMSwgNzIzMywgNzI0NCwgNzI1MSwgNzI1NSwgNzI1OSwgNzI2NSwgMzIzMywgNzI2OSwgNzI3NSwgNzI4MCwgNzI4NSwgCiAgICAgNzI5MCwgNzI5NiwgNzMwMSwgNzMwNiwgNzMxMSwgNzMxNiwgNzMyMiwgNzMyNywgNzMzMiwgNzMzOCwgNzM0MywgNzM0OSwgCkBAIC00NzU1LDcyNTIgKzQ3NTgsNzI1MCBAQAogICAgIDg2NDUsIDg2NDksIDg2NTMsIDg2NTgsIDg2NjUsIDg2NzYsIDg2ODQsIDg2OTQsIDg3MDAsIDg3MDcsIDg3MTIsIDg3MTYsIAogICAgIDg3MjcsIDg3NDAsIDg3NTEsIDg3NjQsIDg3NzUsIDg3ODcsIDg3OTksIDg4MTEsIDg4MjQsIDg4MzcsIDg4NDQsIDg4NTAsIAogICAgIDg4NjQsIDg4NzEsIDg4NzcsIDg4ODEsIDg4ODYsIDg4OTAsIDg4OTcsIDg5MDUsIDg5MDksIDg5MTUsIDg5MTksIDg5MjUsIAotICAgIDg5MzUsIDg5MzksIDg5NDQsIDg5NDksIDg5NTYsIDg5NjIsIDg5NzIsIDc5MDksIDg5NzgsIDg5ODIsIDg5ODksIDc2OCwgCi0gICAgODk5MywgODk5NywgOTAwMiwgOTAwNywgOTAxMiwgOTAxNiwgOTAyMiwgOTAzMCwgOTAzNiwgOTA0MCwgOTA0NiwgOTA1NiwgCi0gICAgOTA2MCwgOTA2NiwgOTA3MSwgOTA3NSwgOTA4MSwgOTA4NywgMjE2MSwgOTA5MiwgOTA5NCwgOTA5OSwgOTEwNywgOTExNiwgCi0gICAgOTEyMCwgOTEyNiwgOTEzMSwgOTEzNiwgOTE0MSwgOTE0NiwgOTE1MiwgOTE1NywgOTE2MiwgNDAwNiwgOTE2NywgOTE3MiwgCi0gICAgOTE3NiwgOTE4MiwgOTE4NywgOTE5MywgOTE5OCwgOTIwMywgOTIwOSwgOTIxNCwgOTEyMSwgOTIyMCwgOTIyNCwgOTIzMSwgCi0gICAgOTIzNywgOTI0MiwgOTI0NiwgNjE4MywgOTI1MSwgOTI2MCwgOTI2NSwgOTI3MCwgODIxOCwgODIyNSwgOTI3NSwgMjg1MywgCi0gICAgOTI3OSwgOTI4NCwgOTI4OSwgOTEzMiwgOTI5MywgOTI5OCwgOTEzNywgOTE0MiwgOTMwMywgOTMxMCwgOTMxNywgOTMyMywgCi0gICAgOTMyOSwgOTMzNSwgOTM0MCwgOTM0NSwgOTM1MCwgOTE0NywgOTE1MywgOTM1NiwgOTM2MiwgOTM2NywgOTM3NSwgOTE1OCwgCi0gICAgOTM4MCwgOTkwLCA5MzgzLCA5MzkxLCA5Mzk3LCA5NDAzLCA5NDEyLCA5NDIwLCA5NDI1LCA5NDMxLCA5NDM5LCA5NDQ2LCAKLSAgICA5NDYxLCA5NDc4LCA5NDk3LCA5NTA2LCA5NTE0LCA5NTI5LCA5NTQwLCA5NTUwLCA5NTYwLCA5NTY4LCA5NTc0LCA5NTg2LCAKLSAgICA5NTk1LCA5NjAzLCA5NjEwLCA5NjE3LCA5NjIzLCA5NjI4LCA5NjM2LCA5NjQ2LCA5NjUzLCA5NjYzLCA5NjczLCA5NjgzLCAKLSAgICA5NjkxLCA5Njk4LCA5NzA3LCA5NzE3LCA5NzMxLCA5NzQ2LCA5NzU1LCA5NzYzLCA5NzY4LCA5NzcyLCA5NzgxLCA5Nzg3LCAKLSAgICA5NzkyLCA5ODAyLCA5ODEyLCA5ODIyLCA5ODI3LCA5ODMxLCA5ODQwLCA5ODQ1LCA5ODU1LCA5ODY2LCA5ODc5LCA5ODg3LCAKLSAgICA5OTAwLCA5OTEyLCA5OTIwLCA5OTI1LCA5OTI5LCA5OTM1LCA5OTQwLCA5OTQ4LCA5OTU2LCA5OTYzLCA5OTY4LCA5OTc2LCAKLSAgICA5OTgyLCA5OTg1LCA5OTg5LCA5OTk1LCAxMDAwMywgMTAwMDgsIDEwMDEyLCAxMDAyMCwgMTAwMjksIDEwMDM3LCAxMDA0MywgCi0gICAgMTAwNDcsIDEwMDU0LCAxMDA2NSwgMTAwNjksIDEwMDcyLCAxMDA3OCwgOTE2MywgMTAwODMsIDEwMDg5LCAxMDA5NiwgCi0gICAgMTAxMDIsIDEwMTA3LCAxMDExNCwgMTAxMjEsIDEwMTI4LCAxMDEzNSwgMTAxNDIsIDEwMTQ5LCAxMDE1NiwgMTAxNjMsIAotICAgIDEwMTY4LCA5NDc0LCAxMDE3MywgMTAxNzksIDEwMTg2LCAxMDE5MywgMTAxOTgsIDEwMjA1LCAxMDIxNCwgMTAyMTgsIAotICAgIDEwMjMwLCA4MjU2LCAxMDIzNCwgMTAyMzcsIDEwMjQxLCAxMDI0NSwgMTAyNDksIDEwMjUzLCAxMDI1OSwgMTAyNjUsIAotICAgIDEwMjcwLCAxMDI3NiwgMTAyODEsIDEwMjg2LCAxMDI5MiwgMTAyOTcsIDEwMzAyLCA4OTUyLCAxMDMwNywgMTAzMTEsIAotICAgIDEwMzE1LCAxMDMxOSwgMTAzMjQsIDEwMzI5LCAxMDMzNywgMTAzNDMsIDEwMzQ3LCAxMDM1MSwgMTAzNTgsIDEwMzYzLCAKLSAgICAxMDM3MSwgMTAzNzYsIDEwMzgwLCAxMDM4MywgMTAzODksIDEwMzk2LCAxMDQwMCwgMTA0MDMsIDEwNDA4LCAxMDQxMiwgCi0gICAgNDA0NSwgMTA0MTgsIDEwNDI3LCAzNiwgMTA0MzUsIDEwNDQxLCAxMDQ0NiwgODk2NywgMTA0NTEsIDEwNDU2LCAxMDQ2MCwgCi0gICAgMTA0NjMsIDEwNDc4LCAxMDQ5NywgMTA1MDksIDEwNTIyLCAxMDUzNSwgMTA1NDgsIDEwNTYyLCAxMDU3NSwgMTA1OTAsIAotICAgIDEwNTk3LCA5MTY4LCAxMDYwMywgMTA2MTcsIDEwNjIyLCAxMDYyOCwgMTA2MzMsIDEwNjQxLCAxMDY0NiwgODA0MCwgCi0gICAgMTA2NTEsIDEwNjU0LCAxMDY2MSwgMTA2NjYsIDEwNjcwLCAyODU4LCA5OTgsIDEwNjc2LCAxMDY4MCwgMTA2ODYsIDEwNjkyLCAKLSAgICAxMDY5NywgMTA3MDMsIDEwNzA4LCA5MTc3LCAxMDcxNCwgMTA3MjAsIDEwNzI1LCAxMDczMCwgMTA3MzgsIDEwNzQ0LCAKLSAgICAxMDc1NywgMTA3NjUsIDEwNzcyLCA5MTgzLCAxMDc3OCwgMTA3ODYsIDEwNzk0LCAxMDgwMSwgMTA4MTQsIDEwODI2LCAKLSAgICAxMDgzNiwgMTA4NDQsIDEwODUxLCAxMDg1OCwgMTA4NjcsIDEwODc2LCAxMDg4NCwgMTA4OTEsIDEwODk2LCAxMDkwMiwgCi0gICAgOTE4OCwgMTA5MDcsIDEwOTEzLCA5MTk0LCAxMDkxOCwgMTA5MjEsIDEwOTI4LCAxMDkzNCwgMTA5NDcsIDg2NjksIDEwOTU4LCAKLSAgICAxMDk2NCwgMTA5NzMsIDEwOTgxLCAxMDk4OCwgMTA5OTQsIDExMDAwLCAxMTAwNSwgMTEwMDksIDExMDE0LCAxMDQ3MCwgCi0gICAgMTEwMjAsIDkxOTksIDExMDI3LCAxMTAzMiwgMTEwMzksIDExMDQ1LCAxMTA1MSwgMTEwNTYsIDExMDY0LCAxMTA3MiwgCi0gICAgMTEwNzksIDExMDgzLCAxMTA5NywgMTExMDcsIDExMTEyLCAxMTExNiwgMTExMjcsIDExMTMzLCAxMTEzOCwgMTExNDMsIAotICAgIDkyMDQsIDkyMTAsIDExMTQ3LCAxMTE1MCwgMTExNTUsIDExMTY3LCAxMTE3NCwgMTExNzksIDExMTgzLCAxMTE4OCwgCi0gICAgMTExOTIsIDExMTk5LCAxMTIwNSwgOTIxNSwgOTEyMiwgMTEyMTIsIDI4NjMsIDgsIDExMjE5LCAxMTIyNCwgMTEyMjgsIAotICAgIDExMjM0LCAxMTI0MiwgMTEyNTIsIDExMjU3LCAxMTI2MiwgMTEyNjksIDExMjc2LCAxMTI4MCwgMTEyOTEsIDExMzAxLCAKLSAgICAxMTMxMCwgMTEzMjIsIDExMzI3LCAxMTMzMSwgMTEzMzksIDExMzUzLCAxMTM1NywgMTEzNjAsIDExMzY4LCAxMTM3NSwgCi0gICAgMTEzODMsIDExMzg3LCAxMTM5OCwgMTE0MDIsIDExNDA5LCAxMTQxNCwgMTE0MTgsIDExNDI0LCAxMTQyOSwgMTE0MzMsIAotICAgIDExNDM5LCAxMTQ0NCwgMTE0NTUsIDExNDU5LCAxMTQ2MiwgMTE0NjgsIDExNDczLCAxMTQ3OSwgMTE0ODUsIDExNDkyLCAKLSAgICAxMTUwMywgMTE1MTMsIDExNTIzLCAxMTUzMiwgMTE1MzksIDExNTQ4LCA5MjI1LCA5MjMyLCA5MjM4LCA5MjQzLCAxMTU1NCwgCi0gICAgMTE1NjAsIDkyNDcsIDExNTY2LCAxMTU2OSwgMTE1NzYsIDExNTgxLCAxMTU5NiwgMTE2MTIsIDExNjI3LCAxMTYzNSwgCi0gICAgMTE2NDEsIDExNjQ2LCA4MzgsIDQyMCwgMTE2NTEsIDExNjU5LCAxMTY2NiwgMTE2NzIsIDExNjc3LCAxMTY4MiwgOTI1MiwgCi0gICAgMTE2ODQsIDExNjg4LCAxMTY5MywgMTE2OTcsIDExNzA3LCAxMTcxMiwgMTE3MTYsIDExNzI1LCAxMTcyOSwgMTE3MzIsIAotICAgIDkyNjEsIDExNzM5LCAxMTc0MiwgMTE3NTAsIDExNzU3LCAxMTc2NSwgMTE3NjksIDExNzc2LCAxMTc4NSwgMTE3ODgsIAotICAgIDExNzkyLCAxMTc5NiwgMTE4MDIsIDExODA2LCAxMTgxMCwgMTE4MTQsIDExODIwLCAxMTgzMCwgMTE4MzQsIDExODQyLCAKLSAgICAxMTg0NiwgMTE4NTMsIDExODU3LCAxMTg2MiwgMTE4NjYsIDExODczLCAxMTg3OSwgMTE4ODcsIDExODkzLCAxMTg5OCwgCi0gICAgMTE5MDgsIDExOTEzLCAxMTkxOCwgMTE5MjIsIDExOTMwLCAzOTA1LCAxMTkzOCwgMTE5NDMsIDkyNjYsIDExOTQ3LCAKLSAgICAxMTk1MSwgMTE5NTQsIDExOTYyLCAxMTk2OSwgMTE5NzMsIDU5OTEsIDExOTc3LCAxMTk4MiwgMTE5ODYsIDExOTk3LCAKLSAgICAxMjAwNywgMTIwMTIsIDEyMDE4LCAxMjAyMiwgMTIwMjUsIDEyMDMzLCAxMjAzOCwgMTIwNDMsIDEyMDUwLCAxMjA1NSwgCi0gICAgOTI3MSwgMTIwNjAsIDEyMDY0LCAxMjA3MSwgMTcyMiwgNjE0NSwgMTIwNzYsIDEyMDgxLCAxMjA4NiwgMTIwOTEsIDEyMDk3LCAKLSAgICAxMjEwMiwgMTIxMDgsIDEyMTEzLCAxMjExOCwgMTIxMjMsIDEyMTI4LCAxMjEzMywgMTIxMzgsIDEyMTQzLCAxMjE0OCwgCi0gICAgMTIxNTMsIDEyMTU4LCAxMjE2MywgMTIxNjgsIDEyMTczLCAxMjE3OCwgMTIxODMsIDEyMTg4LCAxMjE5NCwgMTIxOTksIAotICAgIDEyMjA0LCAxMjIwOSwgMTIyMTQsIDEyMjE5LCAxMjIyNSwgMTIyMzAsIDEyMjM1LCAxMjI0MSwgMTIyNDYsIDEyMjUyLCAKLSAgICAxMjI1NywgMTIyNjMsIDEyMjY4LCAxMjI3MywgMTIyNzgsIDEyMjgzLCAxMjI4OSwgMTIyOTQsIDEyMjk5LCAxMjMwNCwgCi0gICAgNzM3LCAxMzksIDEyMzEyLCAxMjMxNiwgMTIzMjEsIDEyMzI2LCAxMjMzMCwgMTIzMzQsIDEyMzM4LCAxMjM0MywgMTIzNDcsIAotICAgIDEyMzUyLCAxMjM1NiwgMTIzNTksIDEyMzYzLCAxMjM2NywgMTIzNzMsIDEyMzc4LCAxMjM4OCwgMTIzOTQsIDEyNDAyLCAKLSAgICAxMjQwNiwgMTI0MTAsIDEyNDE3LCAxMjQyNSwgMTI0MzQsIDEyNDQ1LCAxMjQ1MiwgMTI0NTksIDEyNDYzLCAxMjQ3MiwgCi0gICAgMTI0ODEsIDEyNDg5LCAxMjQ5OCwgMTI1MDcsIDEyNTE2LCAxMjUyNSwgMTI1MzUsIDEyNTQ1LCAxMjU1NSwgMTI1NjUsIAotICAgIDEyNTc1LCAxMjU4NCwgMTI1OTQsIDEyNjA0LCAxMjYxNCwgMTI2MjQsIDEyNjM0LCAxMjY0NCwgMTI2NTQsIDEyNjYzLCAKLSAgICAxMjY3MywgMTI2ODMsIDEyNjkzLCAxMjcwMywgMTI3MTMsIDEyNzIzLCAxMjczMiwgMTI3NDIsIDEyNzUyLCAxMjc2MiwgCi0gICAgMTI3NzIsIDEyNzgyLCAxMjc5MiwgMTI4MDIsIDEyODEyLCAxMjgyMiwgMTI4MzEsIDEyODQxLCAxMjg1MSwgMTI4NjEsIAotICAgIDEyODcxLCAxMjg4MSwgMTI4OTEsIDEyOTAxLCAxMjkxMSwgMTI5MjEsIDEyOTMxLCAxMjk0MCwgMTI1NiwgMTI5NDYsIAotICAgIDEyOTQ5LCAxMjk1MywgMTI5NTgsIDEyOTY1LCAxMjk3MSwgMTI5NzYsIDEyOTgwLCAxMjk4NSwgMTI5OTQsIDEzMDAyLCAKLSAgICAxMzAwNywgMTMwMTEsIDEzMDE1LCAxMzAyMSwgMTMwMjYsIDEzMDMyLCA5MjgwLCAxMzAzNywgMTMwNDIsIDEzMDUxLCAKLSAgICA5Mjg1LCAxMzA1NiwgMTMwNTksIDEzMDY1LCAxMzA3MywgOTI5MCwgMTMwODAsIDEzMDg0LCAxMzA4OCwgMTMwOTIsIAotICAgIDEzMTAyLCAxMzEwOCwgMTMxMTQsIDEzMTE5LCAxMzEyOCwgMTMxMzYsIDEzMTQzLCAxMzE1MCwgMTMxNTUsIDEzMTYyLCAKLSAgICAxMzE2NywgMTMxNzEsIDEzMTc0LCAxMzE4NSwgMTMxOTUsIDEzMjA0LCAxMzIxMiwgMTMyMjMsIDEzMjM1LCAxMzI0NSwgCi0gICAgMTMyNTAsIDEzMjU0LCAxMzI1OSwgMTMyNjQsIDEzMjY4LCAxMzI3NCwgMTMyODIsIDEzMjg5LCAxMzMwMCwgMTMzMDUsIAotICAgIDEzMzE1LCAxMzMxOSwgMTMzMjIsIDEzMzI5LCAxMzMzOSwgMTMzNDgsIDEzMzU1LCAxMzM1OSwgMTMzNjYsIDEzMzcyLCAKLSAgICAxMzM3NywgMTMzODIsIDEzMzg2LCAxMzM5NSwgMTM0MDAsIDEzNDA2LCAxMzQxMCwgMTM0MTUsIDEzNDE5LCAxMzQyOCwgCi0gICAgMTM0MzYsIDEzNDQ0LCAxMzQ1MSwgMTM0NTksIDEzNDcxLCAxMzQ4MiwgMTM0OTIsIDEzNDk5LCAxMzUwNSwgMTM1MTQsIAotICAgIDEzNTI1LCAxMzUzNCwgMTM1NDYsIDEzNTU4LCAxMzU3MCwgMTM1ODAsIDEzNTg5LCAxMzU5OCwgMTM2MDYsIDEzNjEzLCAKLSAgICAxMzYyMiwgMTM2MzAsIDEzNjM0LCAxMzY0MCwgMTM2NDYsIDEzNjUxLCA3NzUzLCAxMzY1NSwgMTM2NTcsIDEzNjYxLCAKLSAgICAxMzY2NiwgMTM2NzIsIDEzNjgxLCAxMzY4NSwgMTM2OTMsIDEzNzAwLCAxMzcwOSwgMTM3MTgsIDEzNzI3LCAxMzczNiwgCi0gICAgMTM3NDUsIDEzNzU0LCAxMzc2MywgMTM3NzIsIDEzNzgyLCAxMzc5MiwgMTM4MDEsIDEzODA3LCAxMzgxNCwgMTM4MjEsIAotICAgIDEzODI3LCAxMzg0MSwgMTM4NDgsIDEzODU2LCAxMzg2NSwgMTM4NzEsIDEzODgwLCAxMzg4OSwgMTM5MDAsIDEzOTEwLCAKLSAgICAxMzkxOCwgMTM5MjUsIDEzOTMzLCAxMzk0MiwgMTM5NTUsIDEzOTYzLCAxMzk3MCwgMTM5ODMsIDEzOTg5LCAxMzk5NSwgCi0gICAgMTQwMDUsIDE0MDE0LCAxNDAyMywgMTQwMjgsIDE0MDMyLCAxNDAzOCwgMTQwNDQsIDE0MDUxLCA4OTY2LCAxNDA1NiwgCi0gICAgMTQwNjEsIDE0MDY4LCAxNDA3MywgMTIzNjksIDE0MDc4LCAxNDA4NiwgMTQwOTIsIDE0MDk3LCAxNDEwNSwgMTQxMTMsIAotICAgIDE0MTIwLCAxNDEyOCwgMTQxMzQsIDE0MTQyLCAxNDE1MCwgMTQxNTYsIDE0MTYxLCAxNDE2NywgMTQxNzQsIDE0MTgwLCAKLSAgICAxNDE4NSwgMTQxODksIDE0MjAwLCAxNDIwOCwgMTQyMTQsIDE0MjE5LCAxNDIyOCwgMTQyMzQsIDE0MjM5LCAxNDI0OCwgCi0gICAgMTQyNjIsIDM4NTMsIDE0MjY2LCAxNDI3MSwgMTQyNzYsIDE0MjgyLCAxNDI4NywgMTQyOTIsIDE0Mjk2LCAxNDMwMSwgCi0gICAgMTQzMDYsIDE0MzExLCA3NzUyLCAxNDMxNiwgMTQzMjEsIDE0MzI2LCAxNDMzMSwgMTQzMzYsIDE0MzQwLCAxNDM0NSwgCi0gICAgMTQzNTAsIDE0MzU1LCAxNDM2MCwgMTQzNjYsIDE0MzcyLCAxNDM3NywgMTQzODEsIDE0Mzg2LCAxNDM5MSwgMTQzOTYsIAotICAgIDkyOTQsIDE0NDAxLCAxNDQwNiwgMTQ0MTEsIDE0NDE2LCAxNDQyMSwgMTQ0MzgsIDE0NDU2LCAxNDQ2OCwgMTQ0ODEsIAotICAgIDE0NDk4LCAxNDUxNCwgMTQ1MzEsIDE0NTQxLCAxNDU2MCwgMTQ1NzEsIDE0NTgyLCAxNDU5MywgMTQ2MDQsIDE0NjE2LCAKLSAgICAxNDYyNywgMTQ2MzgsIDE0NjU1LCAxNDY2NiwgMTQ2NzcsIDE0NjgyLCA5Mjk5LCAxNDY4NywgMTQ2OTEsIDIzODEsIAotICAgIDE0Njk1LCAxNDY5OCwgMTQ3MDQsIDE0NzEyLCAxNDcyMCwgMTQ3MjUsIDE0NzMzLCAxNDc0MSwgMTQ3NDgsIDE0NzUzLCAKLSAgICAxNDc1OSwgMTQ3NjYsIDE0Nzc0LCAxNDc4MSwgMTQ3OTMsIDE0ODAxLCAxNDgwNiwgMTE1OTAsIDE0ODEyLCAxNDgyMSwgCi0gICAgMTQ4MzAsIDE0ODM4LCAxNDg0NSwgMTQ4NTEsIDE0ODU5LCAxNDg2NiwgMTQ4NzIsIDE0ODc5LCAxNDg4NSwgMTQ4OTQsIAotICAgIDE0OTAyLCAxNDkxMiwgMTQ5MTksIDE0OTI1LCAxNDkzMywgMTQ5MzksIDE0OTQ3LCAxNDk1NCwgMTQ5NjcsIDE0OTc0LCAKLSAgICAxNDk4MywgMTQ5OTIsIDE1MDAxLCAxNTAwOSwgMTUwMTksIDE1MDI2LCAxNTAzMSwgMzU2MCwgMTUwMzgsIDE1MDQzLCAKLSAgICAxMzcyLCAxNTA0NywgMTQzMTcsIDE1MDUxLCAxNTA1NywgMTUwNjEsIDE1MDY5LCAxNTA4MSwgMTUwODYsIDE1MDkzLCAKLSAgICAxNTA5OSwgMTUxMDQsIDE1MTExLCAxNDMyMiwgMTUxMTUsIDE1MTE5LCAxNTEyMywgMTQzMjcsIDE1MTI3LCAxNDMzMiwgCi0gICAgMTUxMzEsIDE1MTM4LCAxNTE0MywgMTUxNDcsIDE1MTU0LCAxNTE1OCwgMTUxNjYsIDE1MTczLCAxNTE3NywgMTUxODQsIAotICAgIDE1MjAxLCAxNTIxMCwgMTUyMTQsIDE1MjE3LCAxNTIyNSwgMTUyMzEsIDE1MjM2LCAzNjM4LCAxNTI0MCwgMTUyNDIsIAotICAgIDE1MjUwLCAxNTI1NywgMTUyNjcsIDE1Mjc5LCAxNTI4NCwgMTUyOTAsIDE1Mjk1LCAxNTI5OSwgMTUzMDUsIDE1MzEwLCAKLSAgICAxNTMxNiwgMTUzMTksIDE1MzI2LCAxNTMzNCwgMTUzNDEsIDE1MzQ3LCAxNTM1MywgMTUzNTgsIDE1MzY1LCAxNTM3MSwgCi0gICAgMTUzNzYsIDE1MzgzLCAxNTM4NywgMTUzOTMsIDE1Mzk3LCAxNTQwNCwgMTU0MTAsIDE1NDE2LCAxNTQyNCwgMTU0MzAsIAotICAgIDE1NDM1LCAxNTQ0MSwgMTU0NDksIDE1NDU3LCAxNTQ2MywgMTU0NjksIDE1NDc0LCAxNTQ4MSwgMTU0ODYsIDE1NDkwLCAKLSAgICAxNTQ5NiwgMTU1MDEsIDE1NTA4LCAxNTUxMywgMTU1MTksIDE1NTIyLCAxNTUyOCwgMTU1MzQsIDE1NTM3LCAxNTU0MSwgCi0gICAgMTU1NTMsIDE1NTU5LCAxNTU2NCwgMTU1NzEsIDE1NTc3LCAxNTU4MywgMTU1OTQsIDE1NjA0LCAxNTYxMywgMTU2MjEsIAotICAgIDE1NjI4LCAxNTYzOSwgMTU2NDksIDE1NjU5LCAxNTY2NywgMTU2NzAsIDE0MzQ2LCAxNTY3NSwgMTU2ODAsIDE0MzUxLCAKLSAgICAxNDQ4NiwgMTU2ODgsIDE1NzAxLCAxNTcxNiwgMTU3MjcsIDE0NTAzLCAxNTc0NSwgMTU3NTgsIDE1NzcxLCAxNTc4MiwgCi0gICAgMTA0ODUsIDE1NzkzLCAxNTgwNiwgMTU4MjUsIDE1ODM2LCAxNTg0NywgMTU4NTgsIDI2NDksIDE1ODcxLCAxNTg3NSwgCi0gICAgMTU4ODMsIDE1ODk4LCAxNTkxMywgMTU5MjQsIDE1OTMxLCAxNTkzNywgMTU5NDUsIDE1OTQ5LCAxNTk1NSwgMTU5NTgsIAotICAgIDE1OTY4LCAxNTk3NiwgMTU5ODMsIDE1OTkxLCAxNjAwMSwgMTYwMDYsIDE2MDEzLCAxNjAxOCwgMTYwMjUsIDE2MDM2LCAKLSAgICAxNjA0NiwgMTYwNTIsIDE2MDU3LCAxNjA2MiwgMTQzNTYsIDE2MDY2LCAxNjA3MiwgMTYwNzgsIDE2MDgzLCAxNjA4OCwgCi0gICAgMTYwOTMsIDE2MDk3LCAxNDM2MSwgMTQzNjcsIDE2MTAxLCAxNDM3MywgMTYxMDYsIDE2MTE0LCAxNjEyMywgMTYxMzAsIAotICAgIDkxNDMsIDE2MTM0LCAxNjEzNiwgMTYxNDEsIDE2MTQ2LCAxNjE1MiwgMTYxNTcsIDE2MTYyLCAxNjE2NywgMTYxNzIsIAotICAgIDE2MTc2LCAxNjE4MiwgMTYxODgsIDE2MTkzLCAxNjE5OSwgMTYyMDQsIDE2MjA5LCAxNjIxNSwgMTYyMjAsIDE2MjI1LCAKLSAgICAxNjIzMCwgMTYyMzUsIDE2MjQxLCAxNjI0NiwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjgsIDE2MjczLCAxNjI4MCwgCi0gICAgMTYyODYsIDE2Mjk3LCAxNjMwNCwgMTYzMDksIDE2MzEzLCAxNjMxNywgMTYzMjAsIDE2MzI4LCAxNjMzMywgMTYzNDAsIAotICAgIDE2MzQ3LCAxNjM1MywgMTYzNTgsIDE2MzYzLCAxNjM3MCwgMTYzODAsIDE2Mzg1LCAxNjM5MiwgMTYzOTgsIDE2NDA4LCAKLSAgICAxNjQxOCwgMTY0MzIsIDE2NDQ2LCAxNjQ2MCwgMTY0NzQsIDE2NDg5LCAxNjUwNCwgMTY1MjEsIDE2NTM5LCAxNjU1MiwgCi0gICAgMTY1NTgsIDE2NTYzLCAxNjU2OCwgMTY1NzIsIDE2NTc3LCAxNjU4NSwgMTY1OTEsIDE2NTk2LCAxNjYwMSwgMTY2MDUsIAotICAgIDE2NjEwLCAxNjYxNCwgMTY2MTksIDE2NjIzLCAxNjYzNCwgMTY2NDAsIDE2NjQ1LCAxNjY1MCwgMTY2NTcsIDE2NjYyLCAKLSAgICAxNjY2NiwgMTY2NzEsIDE2Njc2LCAxNjY4MiwgMTY2ODksIDE2Njk1LCAxNjcwMCwgMTY3MDQsIDE2NzEwLCAxNjcxNSwgCi0gICAgMTY3MjAsIDE2NzI0LCAxNjczMCwgMTY3MzUsIDE2NzQwLCAxNjc0NywgMTY3NTIsIDEzMTA0LCAxNjc1NiwgMTY3NjEsIAotICAgIDE2NzY1LCAxNjc3MCwgMTY3NzYsIDE2NzgyLCAxNjc4OSwgMTY3OTksIDE2ODA3LCAxNjgxNCwgMTY4MTksIDE2ODIzLCAKLSAgICAxNjgzMiwgMTY4NDAsIDE2ODQ3LCAxNjg1NCwgMTY4NjAsIDE2ODY2LCAxNjg3MSwgMTY4NzYsIDE2ODgyLCAxNjg4NywgCi0gICAgMTY4OTMsIDE2ODk4LCAxNjkwNCwgMTY5MTAsIDE2OTE3LCAxNjkyMywgMTY5MjgsIDE2OTMzLCA5MzQxLCAxNjk0MiwgCi0gICAgMTY5NDUsIDE2OTUxLCAxNjk1NiwgMTY5NjEsIDE2OTcxLCAxNjk3OCwgMTY5ODQsIDE2OTg5LCAxNjk5NCwgMTcwMDAsIAotICAgIDE3MDA1LCAxNzAxMSwgMTcwMTYsIDE3MDIyLCAxNzAyOCwgMTcwMzMsIDE3MDQxLCAxNzA0OCwgMTcwNTMsIDE3MDU4LCAKLSAgICAxNzA2NCwgMTcwNjksIDE3MDczLCAxNzA4MiwgMTcwOTMsIDE3MTAwLCAxNzEwNSwgMTcxMTMsIDE3MTE5LCAxNzEyNiwgCi0gICAgMTcxMzIsIDE3MTM3LCAxNzE0MSwgMTcxNDcsIDE3MTUyLCAxNzE1NywgMTcxNjIsIDE0NDAsIDc3NzcsIDI4NzcsIDE3MTY2LCAKLSAgICAxNzE3MCwgMTcxNzQsIDE3MTc4LCAxNzE4MiwgMTcxODYsIDE3MTg5LCAxNzE5NiwgMTcyMDQsIDE0Mzg3LCAxNzIxMSwgCi0gICAgMTcyMjEsIDE3MjI5LCAxNzIzNiwgMTcyNDQsIDE3MjU0LCAxNzI2MywgMTcyNzYsIDE3MjgxLCAxNzI4NiwgMTcyOTQsIAotICAgIDE3MzAxLCAxMzIwMCwgMTMyMDksIDE3MzA4LCAxNzMxOCwgMTczMzMsIDE3MzM5LCAxNzM0NiwgMTczNTMsIDE3MzU5LCAKLSAgICAxNzM2NywgMTczNzcsIDE3Mzg3LCAxNDM5MiwgMTczOTYsIDE3NDAyLCAxNzQwOCwgMTc0MTYsIDE3NDI0LCAxNzQyOSwgCi0gICAgMTc0MzgsIDE3NDQ2LCAxNzQ1OCwgMTc0NjgsIDE3NDc4LCAxNzQ4OCwgMTc0OTcsIDE3NTA5LCAxNzUxOSwgMTc1MjksIAotICAgIDE3NTQwLCAxNzU0NSwgMTc1NTcsIDE3NTY5LCAxNzU4MSwgMTc1OTMsIDE3NjA1LCAxNzYxNywgMTc2MjksIDE3NjQxLCAKLSAgICAxNzY1MywgMTc2NjUsIDE3Njc2LCAxNzY4OCwgMTc3MDAsIDE3NzEyLCAxNzcyNCwgMTc3MzYsIDE3NzQ4LCAxNzc2MCwgCi0gICAgMTc3NzIsIDE3Nzg0LCAxNzc5NiwgMTc4MDcsIDE3ODE5LCAxNzgzMSwgMTc4NDMsIDE3ODU1LCAxNzg2NywgMTc4NzksIAotICAgIDE3ODkxLCAxNzkwMywgMTc5MTUsIDE3OTI3LCAxNzkzOCwgMTc5NTAsIDE3OTYyLCAxNzk3NCwgMTc5ODYsIDE3OTk4LCAKLSAgICAxODAxMCwgMTgwMjIsIDE4MDM0LCAxODA0NiwgMTgwNTgsIDE4MDY5LCAxODA4MSwgMTgwOTMsIDE4MTA1LCAxODExNywgCi0gICAgMTgxMjksIDE4MTQxLCAxODE1MywgMTgxNjUsIDE4MTc3LCAxODE4OSwgMTgyMDAsIDE4MjEyLCAxODIyNCwgMTgyMzYsIAotICAgIDE4MjQ4LCAxODI2MCwgMTgyNzIsIDE4Mjg0LCAxODI5NiwgMTgzMDgsIDE4MzIwLCAxODMzMSwgMTgzNDMsIDE4MzU1LCAKLSAgICAxODM2NywgMTgzNzksIDE4MzkxLCAxODQwMywgMTg0MTUsIDE4NDI3LCAxODQzOSwgMTg0NTEsIDE4NDYyLCAxODQ3NCwgCi0gICAgMTg0ODYsIDE4NDk4LCAxODUxMCwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAxODU4OCwgMTg2MDEsIAotICAgIDE4NjEzLCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgMTg3MTcsIDE4NzMwLCAKLSAgICAxODc0MywgMTg3NTUsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIDE4ODQ2LCAxODg1OSwgCi0gICAgMTg4NzIsIDE4ODg1LCAxODg5NywgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAxODk3NSwgMTg5ODgsIAotICAgIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDM5LCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgMTkxMDQsIDE5MTE3LCAKLSAgICAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODEsIDE5MTk0LCAxOTIwNywgMTkyMjAsIDE5MjMzLCAxOTI0NiwgCi0gICAgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyMywgMTkzMzQsIDE5MzQ3LCAxOTM2MCwgMTkzNzMsIAotICAgIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NiwgMTk0ODksIDE5NTAyLCAKLSAgICAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIDE5NjE4LCAxOTYzMSwgCi0gICAgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAxOTc0OCwgMTk3NjAsIAotICAgIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgMTk4NzcsIDE5ODkwLCAKLSAgICAxOTkwMiwgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIDIwMDA2LCAyMDAxOSwgCi0gICAgMjAwMzIsIDIwMDQ0LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAyMDEzNSwgMjAxNDgsIAotICAgIDIwMTYxLCAyMDE3NCwgMjAxODYsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgMjAyNjQsIDIwMjc3LCAKLSAgICAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOCwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIDIwMzkzLCAyMDQwNiwgCi0gICAgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcwLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAyMDUyMiwgMjA1MzUsIAotICAgIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTIsIDIwNjI1LCAyMDYzOCwgMjA2NTEsIDIwNjY0LCAKLSAgICAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NCwgMjA3NjUsIDIwNzczLCAyMDc4MSwgCi0gICAgMjA3ODgsIDIwNzk0LCAyMDc5OCwgMjA4MDQsIDIwODEwLCAyMDgxOCwgMjA4MjQsIDIwODI5LCAyMDgzMywgMjA4NDIsIAotICAgIDkxNDgsIDIwODUzLCAyMDg2MCwgMjA4NjgsIDIwODc1LCAyMDg4MiwgMTA5NDEsIDIwODg5LCAyMDg5OCwgMjA5MDMsIAotICAgIDIwOTA4LCA3ODA1LCAyMDkxNSwgMjA5MjAsIDIwOTIzLCAyMDkyOCwgMjA5MzYsIDIwOTQzLCAyMDk1MCwgMjA5NTcsIAotICAgIDIwOTYzLCAyMDk3MiwgMjA5ODEsIDIwOTg3LCAyMDk5NiwgMjEwMDAsIDIxMDA2LCAyMTAxMSwgMjEwMjEsIDIxMDI4LCAKLSAgICAyMTAzNCwgMjEwNDIsIDIxMDQ4LCAyMTA1NSwgMjEwNjUsIDIxMDc0LCAyMTA3OCwgMjEwODUsIDIxMDg5LCAyMTA5NCwgCi0gICAgMjExMDAsIDIxMTA4LCAyMTExMiwgMjExMjIsIDE0NDAyLCAyMTEzMSwgMjExMzcsIDIxMTQxLCAyMTE1MCwgMTQ0MDcsIAotICAgIDIxMTU2LCAyMTE2MywgMjExNzQsIDIxMTgyLCAyMTE5MSwgMjExOTksIDg5MzEsIDIxMjA3LCAyMTIxMiwgMjEyMTgsIAotICAgIDIxMjIzLCAyMTIyNywgMjEyMzEsIDIxMjM1LCA5NjMyLCAyMTI0MCwgMjEyNDgsIDIxMjU1LCAyMTI2NCwgMjEyNzEsIAotICAgIDIxMjc4LCAxMDg3MSwgMjEyODUsIDIxMjkxLCAyMTI5NSwgMjEzMDEsIDIxMzA4LCAyMTMxNCwgMjEzMjIsIDIxMzI4LCAKLSAgICAyMTMzNSwgMjEzNDEsIDIxMzQ3LCAyMTM1NiwgMjEzNjAsIDIxMzY4LCAyMTM3NywgMjEzODQsIDIxMzg5LCAyMTM5MywgCi0gICAgMjE0MDQsIDIxNDA5LCAyMTQxNCwgMjE0MTksIDIxNDMyLCA3OTk1LCAyMTQzNiwgMjE0NDIsIDIxNDUwLCAyMTQ1NCwgCi0gICAgMjE0NjEsIDIxNDcwLCAyMTQ3NSwgMTQ2NzgsIDIxNDgzLCAyMTQ4NywgMjE0OTksIDIxNTA0LCAyMTUwOCwgMjE1MTEsIAotICAgIDIxNTE3LCAyMTUyMywgMjE1MjgsIDIxNTMyLCAyMTUzNSwgMjE1NDYsIDIxNTUxLCA5Mzc2LCAyMTU1OCwgMjE1NjMsIAotICAgIDkzODEsIDIxNTY4LCAyMTU3MywgMjE1NzgsIDIxNTgzLCAyMTU4OCwgMjE1OTMsIDIxNTk4LCAyMTYwMywgMjE2MDgsIAotICAgIDIxNjEzLCAyMTYxOCwgMjE2MjMsIDIxNjI5LCAyMTYzNCwgMjE2MzksIDIxNjQ0LCAyMTY0OSwgMjE2NTQsIDIxNjU5LCAKLSAgICAyMTY2NCwgMjE2NjksIDIxNjc0LCAyMTY4MCwgMjE2ODYsIDIxNjkxLCAyMTY5NiwgMjE3MDEsIDIxNzA2LCAyMTcxMSwgCi0gICAgMjE3MTYsIDIxNzIxLCAyMTcyNiwgMjE3MzEsIDIxNzM3LCAyMTc0MiwgMjE3NDcsIDIxNzUyLCAyMTc1OCwgMjE3NjQsIAotICAgIDIxNzY5LCAyMTc3NCwgMjE3NzksIDIxNzg0LCAyMTc4OSwgMjE3OTQsIDIxNzk5LCAyMTgwNCwgMjE4MTAsIDIxODE1LCAKLSAgICAyMTgyMCwgMjE4MjUsIDIxODMwLCAyMTgzNiwgMjE4NDEsIDIxODQ2LCAyMTg1MCwgMTM2OCwgMTI5LCAyMTg1OCwgMjE4NjIsIAotICAgIDIxODY2LCAyMTg3MCwgMjE4NzUsIDIxODc5LCAxMzExMCwgMTI0NjksIDIxODgzLCAyMTg4OCwgMjE4OTIsIDIxODk3LCAKLSAgICAyMTkwMSwgMjE5MDYsIDIxOTEwLCAyMTkxNiwgMjE5MjEsIDIxOTI1LCAyMTkyOSwgMjE5MzcsIDIxOTQxLCAyMTk0NSwgCi0gICAgMjE5NTAsIDIxOTU1LCAyMTk1OSwgMjE5NjUsIDIxOTcwLCAyMTk3NCwgMjE5NzksIDIxOTg0LCAyMTk4OCwgMjE5OTUsIAotICAgIDIyMDAyLCAyMjAwOSwgMjIwMTMsIDIyMDE3LCAyMjAyMiwgMjIwMjYsIDIyMDI5LCAyMjAzNSwgMjIwNDgsIDIyMDUzLCAKLSAgICAyMjA2MiwgMjIwNjcsIDk0MjEsIDIyMDcyLCAyMjA3NSwgMjcxMiwgMjcxNywgMjIwNzksIDIyMDg1LCAyMjA5MSwgNzIwOSwgCi0gICAgMjIwOTYsIDIyMTAxLCAyMjEwNiwgMjIxMTIsIDIyMTE3LCAxMzg5NiwgMjIxMjIsIDIyMTI3LCAyMjEzMiwgMjIxMzcsIAotICAgIDIyMTQzLCAyMjE0OCwgMjIxNTMsIDIyMTU5LCAyMjE2NCwgMjIxNjgsIDIyMTczLCAyMjE3OCwgMjIxODMsIDIyMTg4LCAKLSAgICAyMjE5MiwgMjIxOTcsIDIyMjAxLCAyMjIwNiwgMjIyMTEsIDIyMjE2LCAyMjIyMSwgMjIyMjUsIDIyMjMwLCAyMjIzNCwgCi0gICAgMjIyMzksIDIyMjQ0LCAyMjI0OSwgMjIyNTQsIDI4ODYsIDIyMTY5LCAyMjI1OCwgMjIyNjYsIDIyMjczLCA5NzI2LCAKLSAgICAyMjI4NSwgMjIyOTMsIDIyMTc0LCAyMjMwMCwgMjIzMDUsIDIyMzEzLCAyMjE3OSwgMjIzMTgsIDIyMzIzLCAyMjMzMSwgCi0gICAgMjIzMzYsIDIyMTg0LCAyMjM0MSwgMjIzNDYsIDIyMzUwLCAyMjM1NiwgMjIzNjQsIDIyMzY3LCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4OCwgMjIzOTUsIDIyNDAwLCA4OTU4LCAxNzI3LCAxNzMyLCAyMjQwNCwgMjI0MTAsIDIyNDE2LCAyMjQyMSwgCi0gICAgMjI0MjUsIDIyNDI5LCAyMjQzMywgMjI0MzcsIDIyNDQxLCAyMjQ0NSwgMjI0NDksIDIyNDUyLCAyMjQ1OCwgMjI0NjUsIAotICAgIDIyNDczLCAyMjQ3OSwgMjI0ODUsIDIyNDkwLCAyMjQ5NSwgMjI0OTksIDEzODE2LCAxMzgyMywgMjI1MDQsIDIyNTE2LCAKLSAgICAyMjUxOSwgMjI1MjYsIDE2MzQ5LCAyMjUzMywgMjI1NDEsIDIyNTUyLCAyMjU2MSwgMjI1NzQsIDIyNTg0LCAyMjU5OCwgCi0gICAgMjI2MTAsIDIyNjI0LCAyMjYzNiwgMjI2NDYsIDIyNjU4LCAyMjY2NCwgMjI2NzksIDIyNzAzLCAyMjcyMSwgMjI3NDAsIAotICAgIDIyNzUzLCAyMjc2NywgMjI3ODUsIDIyODAxLCAyMjgxOCwgMjI4MzYsIDIyODQ3LCAyMjg2NiwgMjI4ODMsIDIyOTAzLCAKLSAgICAyMjkyMSwgMjI5MzMsIDIyOTQ3LCAyMjk2MSwgMjI5NzMsIDIyOTkwLCAyMzAwOSwgMjMwMjcsIDIzMDM5LCAyMzA1NywgCi0gICAgMjMwNzYsIDE0NTQ2LCAyMzA4OSwgMjMxMDksIDIzMTIxLCAxMDUxNiwgMjMxMzMsIDIzMTM4LCAyMzE0MywgMjMxNDgsIAotICAgIDIzMTU0LCAyMzE1OSwgMjMxNjMsIDIzMTcwLCAyMzk4LCAyMzE3NCwgMjMxODAsIDIzMTg0LCAyMzE4NywgMjMxOTEsIAotICAgIDIzMTk5LCAyMzIwNSwgMjIyMDIsIDIzMjA5LCAyMzIxOCwgMjMyMjksIDIzMjM1LCAyMzI0MSwgMjMyNTAsIDIzMjU4LCAKLSAgICAyMzI2NSwgMjMyNzAsIDIzMjc0LCAyMzI4MSwgMjMyODcsIDIzMjk2LCAyMzMwNCwgMjMzMTEsIDIzMzIxLCAyMzMzMCwgCi0gICAgMjMzNDAsIDIzMzQ1LCAyMzM1NCwgMjMzNjMsIDIzMzc0LCAyMzM4NSwgMzk2MywgMjMzOTUsIDIzMzk5LCAyMzQwOSwgCi0gICAgMjM0MTcsIDIzNDI3LCAyMzQzOCwgMjM0NDMsIDIzNDUzLCAyMzQ2MSwgMjM0NjgsIDIzNDc0LCAyMzQ4MSwgMjM0ODYsIAotICAgIDIyMjEyLCAyMzQ5MCwgMjM0OTksIDIzNTAzLCAyMzUwNiwgMjM1MTEsIDIzNTE4LCAyMzUyNywgMjM1MzUsIDIzNTQzLCAKLSAgICAyMzU1MywgMjM1NjIsIDIzNTY4LCAyMzU3NCwgMjIyMTcsIDIyMjIyLCAyMzU3OCwgMjM1ODgsIDIzNTk4LCAyMzYwOCwgCi0gICAgMjM2MTYsIDIzNjIzLCAyMzYzMywgMjM2NDEsIDIzNjQ5LCAyMzY1NSwgMjM2NjMsIDkzMCwgMjM2NzIsIDE0NzM3LCA1NDIsIAotICAgIDIzNjg2LCAyMzY5NSwgMjM3MDMsIDIzNzE0LCAyMzcyNSwgMjM3MzUsIDIzNzQ0LCAyMzc1NiwgMjM3NjUsIDIzNzc0LCAKLSAgICAyMzc4MCwgMjM3ODksIDIzNzk4LCAyMzgwOCwgMjM4MTYsIDIzODI0LCA5MzUzLCAyMzgzMCwgMjM4MzMsIDIzODM3LCAKLSAgICAyMzg0MiwgMjM4NDcsIDk4NDEsIDIyMjM1LCAyMjI0MCwgMjM4NTUsIDIzODYxLCAyMzg2NywgMjM4NzIsIDIzODc3LCAKLSAgICAyMzg4MSwgMjM4ODksIDIzODk1LCAyMzkwMSwgMjM5MDUsIDM1MjUsIDIzOTEzLCAyMzkxOCwgMjM5MjMsIDIzOTI3LCAKLSAgICAyMzkzMSwgOTkyMSwgMjM5MzgsIDIzOTQ2LCAyMzk2MCwgMjM5NjcsIDIzOTczLCA5OTMwLCA5OTM2LCAyMzk4MSwgMjM5ODksIAotICAgIDIzOTk2LCAyNDAwMSwgMjQwMDYsIDIyMjQ1LCAyNDAxMiwgMjQwMjMsIDI0MDI3LCAyNDAzMiwgMjYwMSwgMjQwMzcsIAotICAgIDI0MDQ4LCAyNDA1NCwgMjQwNTksIDI0MDYzLCAyNDA2NywgMjQwNzAsIDI0MDc3LCAyNDA4NCwgMjQwOTEsIDI0MDk3LCAKLSAgICAyNDEwMSwgMjIyNTAsIDI0MTA2LCAyNDExMCwgMjQxMTQsIDEwMzcsIDI0MTE5LCAyNDEyNCwgMjQxMjksIDI0MTM0LCAKLSAgICAyNDEzOSwgMjQxNDQsIDI0MTQ5LCAyNDE1NCwgMjQxNTksIDI0MTY0LCAyNDE2OSwgMjQxNzQsIDI0MTc5LCAyNDE4NCwgCi0gICAgMjQxOTAsIDI0MTk1LCAyNDIwMCwgMjQyMDUsIDI0MjEwLCAyNDIxNSwgMjQyMjAsIDI0MjI2LCAyNDIzMSwgMjQyMzYsIAotICAgIDI0MjQxLCAyNDI0NiwgMjQyNTEsIDI0MjU2LCAyNDI2MSwgMjQyNjcsIDI0MjczLCAyNDI3OCwgMjQyODQsIDI0Mjg5LCAKLSAgICAyNDI5NCwgNSwgMjQzMDAsIDI0MzA0LCAyNDMwOCwgMjQzMTIsIDI0MzE3LCAyNDMyMSwgMjQzMjUsIDI0MzI5LCAyNDMzMywgCi0gICAgMjQzMzgsIDI0MzQyLCAyNDM0NywgMjQzNTEsIDI0MzU0LCAyNDM1OCwgMjQzNjMsIDI0MzY3LCAyNDM3MiwgMjQzNzYsIAotICAgIDI0MzgwLCAyNDM4NCwgMjQzODksIDI0MzkzLCAyNDM5NywgMjQ0MDcsIDI0NDEyLCAyNDQxNiwgMjQ0MjAsIDI0NDI1LCAKLSAgICAyNDQzMCwgMjQ0MzksIDI0NDQ0LCAyNDQ0OSwgMjQ0NTMsIDI0NDU3LCAyNDQ3MCwgMjQ0ODIsIDI0NDkxLCAyNDUwMCwgCi0gICAgMjQ1MDYsIDI0NTExLCAyNDUxNSwgMjQ1MTksIDI0NTI5LCAyNDUzOCwgMjQ1NDYsIDI0NTUyLCAyNDU1NywgMjQ1NjEsIAotICAgIDI0NTY4LCAyNDU3OCwgMjQ1ODcsIDI0NTk1LCAyNDYwMywgMjQ2MTAsIDI0NjE4LCAyNDYyNywgMjQ2MzYsIDI0NjQ0LCAKLSAgICAyNDY0OSwgMjQ2NTMsIDI0NjU3LCAyNDY2MCwgMjQ2NjIsIDI0NjY2LCAyNDY3MCwgMjQ2NzUsIDI0NjgwLCAyNDY4NCwgCi0gICAgMjQ2ODgsIDI0NjkxLCAyNDY5NSwgMjQ2OTgsIDI0NzAyLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxOCwgMjQ3MjIsIAotICAgIDI0NzI2LCAyNDczMCwgMjQ3MzUsIDI0NzQwLCAyNDc0NSwgMjQ3NDksIDI0NzUyLCAyNDc1NywgMjQ3NjMsIDI0NzY4LCAKLSAgICAyNDc3NCwgMjQ3NzksIDI0NzgzLCAyNDc4NywgMjQ3OTEsIDI0Nzk2LCAyNDgwMCwgMjQ4MDUsIDI0ODA5LCAyNDgxMywgCi0gICAgMjQ4MjAsIDI0ODI0LCAyNDgyNywgMjQ4MzEsIDI0ODM3LCAyNDg0MywgMjQ4NDcsIDI0ODUxLCAyNDg1NiwgMjQ4NjMsIAotICAgIDI0ODY5LCAyNDg3MywgMjQ4ODIsIDI0ODg2LCAyNDg5MCwgMjQ4OTMsIDI0ODk5LCAyNDkwNCwgMjQ5MTAsIDE0ODksIAotICAgIDE3OTEsIDI0OTE1LCAyNDkyMCwgMjQ5MjUsIDI0OTMwLCAyNDkzNSwgMjQ5NDAsIDI0OTQ1LCAyMTQ4LCAyMTk0LCAyNDk1MCwgCi0gICAgMjQ5NTMsIDI0OTU3LCAyNDk2MSwgMjQ5NjYsIDI0OTcwLCAyNDk3NCwgMjQ5NzcsIDI0OTgyLCAyNDk4NywgMjQ5OTEsIAotICAgIDI0OTk0LCAyNDk5OSwgMjUwMDMsIDI1MDA4LCAyNTAxMiwgMTQ3NDksIDI1MDE3LCAyNTAyMCwgMjUwMjMsIDI1MDI3LCAKLSAgICAyNTAzMiwgMjUwMzYsIDI1MDQ5LCAyNTA1MywgMjUwNTYsIDI1MDY0LCAyNTA3MywgMjUwODAsIDI1MDg1LCAyNTA5MSwgCi0gICAgMjUwOTcsIDI1MTA1LCAyNTExMiwgMjUxMTksIDI1MTIzLCAyNTEyNywgMjUxMzEsIDI1MTM2LCAyNTE0MSwgMjUxNDUsIAotICAgIDI1MTUzLCAyNTE1OCwgMjUxNzAsIDI1MTgxLCAyNTE4NiwgMjUxOTAsIDI1MTk0LCAyNTIwMCwgMjUyMDUsIDI1MjEwLCAKLSAgICAyNTIxNCwgMjUyMTgsIDI1MjIxLCAyNTIyNywgNzkxNSwgMjMxNiwgMjUyMzEsIDI1MjM2LCAyNTI1MiwgOTQ2OCwgMjUyNzIsIAotICAgIDI1MjgxLCAyNTI5NywgMjUzMDEsIDI1MzA0LCAyNTMxMCwgMjUzMjAsIDI1MzI2LCAyNTMzNSwgMjUzNTAsIDI1MzYyLCAKLSAgICAyNTM3MywgMjUzODEsIDI1MzkwLCAyNTM5NiwgMjU0MDUsIDI1NDE1LCAyNTQyNiwgMjU0MzcsIDI1NDQ2LCAyNTQ1MywgCi0gICAgMjU0NjIsIDI1NDcwLCAyNTQ3NywgMjU0ODUsIDI1NDkyLCAyNTQ5OSwgMjU1MTIsIDI1NTE5LCAyNTUyNSwgMjU1MzAsIAotICAgIDI1NTM5LCAyNTU0NSwgMjU1NTAsIDI1NTU4LCAyNTU2NSwgMjM0MTksIDI1NTc3LCAyNTU4OSwgMjU2MDMsIDI1NjExLCAKLSAgICAyNTYxOCwgMjU2MzAsIDI1NjM5LCAyNTY0OCwgMjU2NTYsIDI1NjY0LCAyNTY3MiwgMjU2NzksIDI1Njg4LCAyNTY5NiwgCi0gICAgMjU3MDYsIDI1NzE1LCAyNTcyNSwgMjU3MzQsIDI1NzQzLCAyNTc1MSwgMjU3NTYsIDI1NzYwLCAyNTc2MywgMjU3NjcsIAotICAgIDI1NzcxLCAyNTc3NSwgMjU3NzksIDI1NzgzLCAyNTc4OSwgMjU3OTUsIDI1ODAzLCAxNDc5NCwgMjU4MTAsIDI1ODE1LCAKLSAgICAyNTgyMiwgMjU4MjgsIDI1ODM1LCAxNDgwMiwgMjU4NDIsIDI1ODQ1LCAyNTg1NywgMjU4NjUsIDI1ODcxLCAyNTg3NiwgCi0gICAgMjU4ODAsIDk4NzEsIDI1ODkxLCAyNTkwMSwgMjU5MTAsIDI1OTE3LCAyNTkyMSwgMTQ4MDcsIDI1OTI0LCAyNTkzMSwgCi0gICAgMjU5MzUsIDI1OTQxLCAyNTk0NCwgMjU5NTEsIDI1OTU3LCAyNTk2NCwgMjU5NzAsIDI1OTc0LCAyNTk3OSwgMjU5ODMsIAotICAgIDI1OTkyLCAyNTk5OSwgMjYwMDUsIDc5NTYsIDI2MDEyLCAyNjAyMCwgMjYwMjcsIDI2MDMzLCAyNjAzOCwgMjYwNDQsIAotICAgIDI2MDUwLCAyNjA1OCwgMjYwNjIsIDI2MDY1LCAyNjA2NywgMjU3NjgsIDI2MDc2LCAyNjA4MiwgMjYwOTIsIDI2MDk3LCAKLSAgICAyNjEwNCwgMjYxMTAsIDI2MTE1LCAyNjEyMCwgMjYxMjUsIDI2MTI5LCAyNjEzNCwgMjYxNDEsIDI2MTUwLCAyNjE1NCwgCi0gICAgMjYxNjEsIDI2MTcwLCAyNjE3NiwgMjYxODEsIDI2MTg3LCAyNjE5MiwgMjYxOTksIDI2MjEwLCAyNjIxNSwgMjYyMTksIAotICAgIDI2MjI5LCAyNjIzNSwgMjYyMzksIDI2MjQ0LCAyNjI1NCwgMjYyNjMsIDI2MjY3LCAyNjI3NCwgMjYyODIsIDI2Mjg5LCAKLSAgICAyNjI5NSwgMjYzMDAsIDI2MzA4LCAyNjMxNSwgMjYzMjcsIDI2MzM2LCAyNjM0MCwgMTMwNDYsIDI2MzQ4LCAyNjM1OCwgCi0gICAgMjYzNjIsIDI1MDYwLCAyNjM3MywgMjYzNzgsIDI2MzgyLCAyNjM4OSwgMjYzOTYsIDIxOTYxLCAyNTY5MywgMjY0MDEsIAotICAgIDI2NDA1LCAyNjQwOCwgMjI4NTMsIDI2NDEzLCAyNjQyNywgMjY0NDMsIDI2NDYxLCAyNjQ4MCwgMjY0OTcsIDI2NTE1LCAKLSAgICAyMjg3MiwgMjY1MzIsIDI2NTUyLCAyMjg4OSwgMjY1NjQsIDI2NTc2LCAxNTczMiwgMjY1ODgsIDIyOTA5LCAyNjYwMiwgCi0gICAgMjY2MTQsIDEwNTI5LCAyNjYyOCwgMjY2MzMsIDI2NjM4LCAyNjY0MywgMjY2NDksIDI2NjU1LCAyNjY2MSwgMjY2NjUsIAotICAgIDI2NjcyLCAyNjY3NywgMjY2ODcsIDI2NjkzLCAxMDE3NiwgMjY2OTksIDI2NzAxLCAyNjcwNiwgMjY3MTQsIDI2NzE4LCAKLSAgICAyNjEzNywgMjY3MjQsIDI2NzMxLCAxMTUxNywgMTE1MjcsIDI2NzM4LCAyNjc0OCwgMjY3NTMsIDI2NzU3LCAyNjc2MCwgCi0gICAgMjY3NjYsIDI2Nzc0LCAyNjc4NiwgMjY3OTYsIDI2ODEyLCAyNjgyNSwgMjY4MzksIDE1NzUwLCAyNjg1MywgMjY4NjAsIAotICAgIDI2ODY0LCAyNjg2NywgMjY4NzIsIDI2ODc2LCAyNjg4MywgMjY4OTAsIDI2OTAwLCAyNjkwNSwgMjY5MTAsIDI2OTE1LCAKLSAgICAyNjkyMywgMjY5MzEsIDI2OTQwLCAyNjk0NSwgOTU2NSwgMjY5NDksIDI2OTUyLCAyNjk1NSwgMjY5NjAsIDI2OTY3LCAKLSAgICAyNjk3MiwgMjY5ODgsIDI2OTk2LCAyNzAwNCwgOTQxNiwgMjcwMTIsIDI3MDE3LCAyNzAyMSwgMjcwMjcsIDI3MDMzLCAKLSAgICAyNzAzNiwgMjcwNDIsIDI3MDU0LCAyNzA2MiwgMjcwNjksIDI3MDc1LCAyNzA4MiwgMjcwOTMsIDI3MTA3LCAyNzEyMCwgCi0gICAgMjcxMjksIDI3MTM4LCAyNzE1MCwgMjcxNjEsIDI3MTcxLCAyNzE4MCwgMjcxODksIDI3MTk3LCAyNzIwOCwgNzkzOCwgCi0gICAgMjcyMTUsIDI3MjIxLCAyNzIyNiwgMjcyMzIsIDI3MjM5LCAyNzI0OSwgMjcyNTksIDI3MjY4LCAyNzI3NCwgMjcyODEsIAotICAgIDI3Mjg2LCAyNzI5MywgMjczMDEsIDI3MzA5LCAyNzMyMSwgNjI0NiwgMjczMjgsIDI3MzM3LCAyNzM0NSwgMjczNTEsIAotICAgIDI3MzU3LCAyNzM2MiwgMjczNjYsIDI3MzY5LCAyNzM3NSwgMjczODIsIDI3Mzg3LCAyNzM5MiwgMjczOTYsIDI3NDA4LCAKLSAgICAyNzQxOSwgMjc0MjgsIDI3NDM2LCAxNDkzNCwgMjc0NDEsIDI3NDQ3LCAyNzQ1MywgMTE1MTAsIDg2MzUsIDI3NDU4LCAKLSAgICAyNzQ2MiwgMjc0NjUsIDI3NDY4LCAyNzQ3NCwgMjc0ODIsIDI3NDkwLCAyNzQ5NCwgMjc0OTgsIDI3NTAzLCAyNzUwNiwgCi0gICAgMjc1MTUsIDI3NTE5LCAyNzUyNywgMjc1MzgsIDI3NTQyLCAyNzU0OCwgMjc1NTQsIDI3NTU4LCAyNzU2NCwgMjc1NzIsIAotICAgIDI3NTk0LCAyNzYxOCwgMjc2MjUsIDI3NjMyLCAyNzYzOCwgMjc2NDYsIDI3NjUyLCAyNzY1NywgMjc2NjgsIDI3Njg2LCAKLSAgICAyNzY5MywgMjc3MDEsIDI3NzA1LCAyNzcxNCwgMjc3MjcsIDI3NzM1LCAyNzc0NywgMjc3NTgsIDI3NzY4LCAyNzc4MiwgCi0gICAgMjc3OTEsIDI3Nzk5LCAyNzgxMSwgOTQ4NSwgMjc4MjIsIDI3ODMzLCAyNzg0NSwgMjc4NTUsIDI3ODY0LCAyNzg2OSwgCi0gICAgMjc4NzMsIDI3ODgxLCAyNzg5MSwgMjc4OTYsIDI3OTAwLCAyNzkwMywgMjc5MDYsIDI3OTE0LCAyNzkyMiwgMjc5MzEsIAotICAgIDI3OTQxLCAyNzk1MCwgMjc5NTYsIDI3OTcwLCAyNjYzLCAyNzk5MiwgMjgwMDMsIDI4MDEyLCAyODAyMiwgMjgwMzQsIAotICAgIDI4MDQzLCAyODA1MiwgMjgwNjIsIDI4MDcwLCAyODA3OCwgMjgwODcsIDI4MDkyLCAyODEwMywgMjgxMDgsIDI4MTE5LCAKLSAgICAyODEyMywgMjgxMzMsIDI4MTQyLCAyODE1MCwgMjgxNjAsIDI4MTcwLCAyODE3OCwgMjgxODcsIDI4MTk0LCAyODIwMiwgCi0gICAgMjgyMDksIDI4MjE4LCAyODIyMiwgMjgyMzAsIDI4MjM3LCAyODI0NSwgMjgyNTIsIDI4MjYzLCAyODI3OCwgMjgyODUsIAotICAgIDI4MjkxLCAyODMwMSwgMjgzMTAsIDI4MzE2LCAyODMyMCwgMjgzMjcsIDI4MzMxLCAxNDAxOCwgMjgzMzcsIDI4MzQxLCAKLSAgICAyODM0NiwgMjgzNTMsIDI4MzU3LCAyODM2MSwgMjgzNjksIDI4Mzc3LCAyODM4MywgMjgzOTIsIDI4Mzk5LCAyODQwNCwgCi0gICAgMjg0MDksIDI4NDE5LCAyMzQ4OCwgMjg0MjMsIDI4NDI2LCAyODQzMSwgMjg0MzYsIDI4NDQxLCAyODQ0NiwgMjg0NTEsIAotICAgIDI4NDU2LCAyODQ2MSwgMjg0NjYsIDI4NDcyLCAyODQ3NywgMjg0ODIsIDI4NDg4LCAxMjE4LCA3MDQsIDI4NDkzLCAyODUwMiwgCi0gICAgMjM2NCwgMjg1MDksIDI4NTE0LCAyODUxOCwgMjg1MjQsIDEyNjcsIDU0NiwgMzE4LCAyODUyOSwgMjg1MzgsIDI4NTQ2LCAKLSAgICAyODU1NSwgMjg1NjMsIDI4NTc0LCAyODU4MywgMjg1OTEsIDI4NTk1LCAyODU5OCwgMjg2MDYsIDI4NjE0LCAyODYxOSwgCi0gICAgMTQ3NjIsIDI4NjI1LCAyODYzMSwgMjg2MzcsIDU4NzIsIDI4NjQyLCAyODY0NiwgMjg2NTIsIDI4NjU2LCAyODY2MywgCi0gICAgMTQ1NSwgMjg2NjksIDI4Njc2LCA5NTcyLCAyODY4MCwgMjg2OTAsIDI4Njk4LCAyODcwNCwgMjg3MTMsIDI4NzIxLCAKLSAgICAyODcyNywgMjg3MzUsIDI4NzQyLCAxMTEwMywgMjg3NDgsIDI4NzU1LCAyODc2MCwgMjg3NjcsIDE0OTYsIDIxNDcsIAotICAgIDI4NzczLCAyODc3OSwgMjg3ODYsIDI4Nzk3LCAyODgwOCwgMjg4MTYsIDI4ODIzLCAyODgzMywgMjg4NDIsIDI4ODUwLCAKLSAgICAyODg1OSwgMjg4NjYsIDI4ODczLCAyODg4NiwgMjg4OTcsIDEyNzIsIDI4OTE2LCAyODkyMSwgMjg5MjksIDM1NzUsIAotICAgIDI4OTMzLCAyODkzOCwgMjg5NDIsIDE0NTksIDI0Njg5LCAyODk1MiwgMjg5NTYsIDI4OTYxLCAyODk2NSwgMzQ5MywgCi0gICAgMjg5NzEsIDI4OTc5LCAyODk4NiwgMjg5OTcsIDI5MDA1LCAyOTAxMywgMzU3NiwgMjc5LCAyOTAxOCwgMjkwMjYsIDI5MDM0LCAKLSAgICAyOTA0MSwgMjkwNDcsIDI5MDUyLCAyMjE2LCAyOTA1OSwgMjkwNjUsIDI1OTc1LCAyNjIwNSwgMjkwNzEsIDEwNiwgMjkwNzUsIAotICAgIDI5MDc5LCAyOTA4NSwgNjE1LCA5MzIxLCAyOTA5MCwgMjkwOTcsIDI5MTAzLCAyMzI3LCAyOTEwNywgMjkxMTEsIDE1MTc0LCAKLSAgICAyOTExNCwgMjkxMTksIDI5MTI2LCAyOTEzMiwgMjkxMzcsIDI5MTQ1LCAyOTE1MiwgMjkxNTgsIDIyMzM4LCAyOTE2MiwgCi0gICAgMjkxNjYsIDM2NDYsIDE2NjEyLCAyOTE3MCwgMjkxNzUsIDI5MTc4LCAyOTE4NiwgMjkxOTQsIDI5MTk5LCAyOTIwMiwgCi0gICAgMjkyMDksIDI5MjE5LCAyOTIzMSwgMjkyMzYsIDI5MjQwLCAyOTI0OCwgMjkyNTUsIDI5MjYxLCAyOTI2OCwgMjkyNzUsIAotICAgIDI5Mjc4LCAyOTI4MiwgMjkyODYsIDE0NjMsIDI5Mjk2LCAyOTI5OCwgMjkzMDMsIDI5MzA5LCAyOTMxNSwgMjkzMjAsIAotICAgIDI5MzI1LCAyOTMzMCwgMjkzMzUsIDI5MzQwLCAyOTM0NSwgMjkzNTAsIDI5MzU1LCAyOTM2MCwgMjkzNjUsIDI5MzcwLCAKLSAgICAyOTM3NSwgMjkzODAsIDI5Mzg1LCAyOTM5MSwgMjkzOTcsIDI5NDAzLCAyOTQwOSwgMjk0MTQsIDI5NDE5LCAyOTQyNCwgCi0gICAgMjk0MzAsIDI5NDM1LCAyOTQ0MCwgMjk0NDUsIDI5NDUxLCAyOTQ1NiwgMjk0NjIsIDI5NDY3LCAyOTQ3MiwgMjk0NzcsIAotICAgIDI5NDgyLCAyOTQ4OCwgMjk0OTMsIDI5NDk5LCAyOTUwNCwgMjk1MDksIDI5NTE0LCAyOTUxOSwgMjk1MjUsIDI5NTMwLCAKLSAgICAyOTUzNiwgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTYsIDI5NTYxLCAyOTU2NiwgMjk1NzEsIDI5NTc2LCAyOTU4MSwgCi0gICAgMjk1ODcsIDI5NTkzLCAyOTU5OSwgMjk2MDQsIDI5NjA5LCAyOTYxNCwgMjk2MTksIDI5NjI1LCAyOTYzMSwgMjk2MzcsIAotICAgIDI5NjQzLCAyOTY0OSwgMjk2NTUsIDI5NjYwLCAyOTY2NiwgMjk2NzEsIDI5Njc2LCAyOTY4MSwgMjk2ODYsIDI5NjkyLCAKLSAgICAyNDQzLCAyOTY5NywgMjQ1MCwgMjQ1NywgMjc1NCwgMjk3MDIsIDI0NjMsIDI0NzMsIDI5NzA4LCAyOTcxMiwgMjk3MTcsIAotICAgIDI5NzIyLCAyOTcyOCwgMjk3MzMsIDI5NzM4LCAyOTc0MiwgMjk3NDcsIDI5NzUzLCAyOTc1OCwgMjk3NjMsIDI5NzY4LCAKLSAgICAyOTc3NCwgMjk3NzksIDI5NzgzLCAyOTc4NywgMjk3OTIsIDI5Nzk3LCAyOTgwMiwgMjk4MDcsIDI5ODEyLCAyOTgxOCwgCi0gICAgMjk4MjQsIDI5ODI5LCAyOTgzMywgMjk4MzgsIDI5ODQ0LCAyOTg0OCwgMjk4NTMsIDI5ODU4LCAyOTg2MywgMjk4NjgsIAotICAgIDI5ODcyLCAyOTg3NSwgMjk4ODAsIDI5ODg1LCAyOTg5MCwgMjk4OTUsIDI5OTAwLCAyOTkwNiwgMjk5MTIsIDI5OTE3LCAKLSAgICAyOTkyMiwgMjk5MjYsIDI5OTMxLCAyOTkzNiwgMjk5NDEsIDI5OTQ2LCAyOTk1MSwgMjk5NTUsIDI5OTYwLCAyOTk2NSwgCi0gICAgMjk5NzAsIDI5OTc0LCAyOTk3OCwgMjk5ODIsIDI5OTg3LCAyOTk5NSwgMzAwMDAsIDMwMDA2LCAzMDAxMiwgMzAwMTgsIAotICAgIDMwMDIzLCAzMDAyNywgMzAwMzAsIDMwMDM1LCAzMDA0MCwgMzAwNDQsIDMwMDQ5LCAzMDA1MywgMzAwNTgsIDMwMDYyLCAKLSAgICAzMDA2NSwgMzAwNzAsIDE3Mjg5LCAzMDA3NSwgMzAwODAsIDMwMDg1LCAzMDA5MywgMjEyNjcsIDI4NjczLCA5MDE5LCAKLSAgICAzMDA5OCwgMzAxMDMsIDMwMTA3LCAzMDExMiwgMzAxMTYsIDMwMTIwLCAzMDEyNSwgMzAxMjksIDMwMTMyLCAzMDEzNSwgCi0gICAgMzAxMzksIDMwMTQ0LCAzMDE0OCwgMzAxNTYsIDMwMTYwLCAzMDE2MywgMzAxNjgsIDMwMTcyLCAzMDE3NiwgMzAxODEsIAotICAgIDMwMTg2LCAzMDE5MCwgMzAxOTYsIDMwMjAxLCAzMDIwNiwgMzAyMTMsIDMwMjIwLCAzMDIyNCwgMzAyMjcsIDMwMjMzLCAKLSAgICAzMDI0MiwgMzAyNDksIDMwMjU3LCAzMDI2NCwgMzAyNjgsIDMwMjczLCAzMDI3NywgMzAyODEsIDMwMjg3LCAzMDI5MywgCi0gICAgMzAyOTcsIDMwMzAzLCAzMDMwOCwgMzAzMTMsIDMwMzIwLCAzMDMyNiwgMzAzMzIsIDMwMzM4LCAzMDM0NCwgMzAzNTEsIAotICAgIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc1LCAzMDM4MSwgMzAzODcsIDMwMzkzLCAzMDQwMCwgMzA0MDYsIDMwNDEzLCAKLSAgICAzMDQxOSwgMzA0MjUsIDMwNDMxLCAzMDQzNywgMzA0NDMsIDMwNDQ5LCAzMDQ1NSwgMzA0NjEsIDMwNDY3LCAxMTQxMSwgCi0gICAgMzA0NzMsIDMwNDc4LCAzMDQ4MywgMzA0ODYsIDMwNDk0LCAzMDQ5OSwgMzA1MDgsIDMwNTE0LCAzMDUxOSwgMzA1MjQsIAotICAgIDMwNTI5LCAzMDUzMywgMzA1MzgsIDMwNTQzLCAzMDU0OCwgMzA1NTMsIDMwNTU4LCAzMDU2NSwgMzA1NzIsIDMwNTc4LCAKLSAgICAzMDU4NCwgMzA1ODksIDE2MjkwLCAzMDU5NiwgMzA2MDIsIDMwNjA5LCAzMDYxNSwgMzA2MjEsIDMwNjI2LCAzMDYzNCwgCi0gICAgMzA2MzksIDE2MDY5LCAzMDY0MywgMzA2NDgsIDMwNjUzLCAzMDY1OSwgMzA2NjQsIDMwNjY5LCAzMDY3MywgMzA2NzgsIAotICAgIDMwNjgzLCAzMDY4OSwgMzA2OTQsIDMwNjk5LCAzMDcwMywgMzA3MDgsIDMwNzEzLCAzMDcxNywgMzA3MjIsIDMwNzI3LCAKLSAgICAzMDczMiwgMzA3MzYsIDMwNzQxLCAzMDc0NiwgMzA3NTEsIDMwNzU1LCAzMDc1OSwgMTUyODAsIDMwNzYzLCAzMDc3MiwgCi0gICAgMzA3NzgsIDMwNzg0LCAzMDc5MywgMzA4MDEsIDMwODEwLCAzMDgxOCwgMzA4MjMsIDMwODI3LCAzMDgzNCwgMzA4NDAsIAotICAgIDMwODQ0LCAzMDg0NywgMzA4NTIsIDMwODYxLCAzMDg2OSwgMzA4NzQsIDE0OTUsIDMwODgwLCAzMDg4MywgMzA4ODcsIAotICAgIDIyNDExLCAyMjQxNywgMzA4OTMsIDMwODk3LCAzMDkwOCwgMzA5MTksIDMwOTMwLCAzMDk0MiwgMzA5NDksIDMwOTU2LCAKLSAgICAzMDk2MSwgMzA5NjUsIDU5MDksIDc1NSwgMjEyNjYsIDMwOTczLCAzMDk3OCwgMzA5ODIsIDMwOTg3LCAzMDk5MSwgMzA5OTcsIAotICAgIDMxMDAyLCAzMTAwOCwgMzEwMTMsIDMxMDE5LCAzMTAyNCwgMzEwMzAsIDMxMDM1LCAzMTA0MSwgMzEwNDcsIDMxMDUzLCAKLSAgICAzMTA1OCwgMzEwMTQsIDMxMDIwLCAzMTA2MiwgMzEwNjcsIDMxMDczLCAzMTA3OCwgMzEwODQsIDMxMDg5LCAzMTA5NSwgCi0gICAgMzExMDAsIDMxMDI1LCAxMDQxNCwgMzExMDQsIDMxMDM2LCAzMTA0MiwgMzEwNDgsIDI4MzEsIDM0MjMsIDMxMTEwLCAKLSAgICAzMTExMywgMzExMTksIDMxMTI1LCAzMTEzMSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgMzExNTYsIDMxMTYyLCAzMTE2OCwgCi0gICAgMzExNzQsIDMxMTgwLCAzMTE4NiwgMzExOTIsIDMxMTk4LCAzMTIwNCwgMzEyMTAsIDMxMjE3LCAzMTIyMywgMzEyMjksIAotICAgIDMxMjM1LCAzMTI0MSwgMzEyNDcsIDMxMjUwLCAzMTI1NSwgMzEyNTgsIDMxMjY1LCAzMTI3MywgMzEyNzgsIDMxMjgzLCAKLSAgICAzMTI4OSwgMzEyOTQsIDMxMjk5LCAzMTMwMywgMzEzMDgsIDMxMzE0LCAzMTMxOSwgMzEzMjUsIDMxMzMwLCAzMTMzNiwgCi0gICAgMzEzNDEsIDMxMzQ3LCAzMTM1MywgMzEzNTcsIDMxMzYyLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODYsIAotICAgIDMxMzkxLCAzMTM5NiwgMzE0MDIsIDMxNDA4LCAzMTQxNCwgMzE0MjAsIDMxNDI1LCAzMTQyOSwgMzE0MzIsIDMxNDM4LCAKLSAgICAzMTQ0NCwgMzE0NTMsIDMxNDYxLCAzMTQ2OCwgMzE0NzMsIDMxNDc3LCAzMTQ4MSwgMzE0ODYsIDE1MTMzLCAzMTQ5MSwgCi0gICAgMzE0OTksIDMxNTA1LCAzNjgzLCAxMzc3LCAzMTUxMCwgMzE1MTQsIDgwMDUsIDMxNTIwLCAzMTUyNiwgMzE1MzMsIDgwMTQsIAotICAgIDMxNTM3LCAzMTU0MywgMzE1NTAsIDMxNTU2LCAzMTU2NSwgMzE1NzMsIDMxNTg1LCAzMTU4OSwgMzE1OTYsIDMxNjAyLCAKLSAgICAzMTYwNiwgMzE2MDksIDMxNjE4LCAzMTYyNiwgMzEwMTUsIDMxNjMxLCAzMTY0MSwgMzE2NTEsIDMxNjYxLCAzMTY2NywgCi0gICAgMzE2NzIsIDMxNjgyLCAzMTY4NywgMzE3MDAsIDMxNzE0LCAzMTcyNSwgMzE3MzcsIDMxNzQ5LCAzMTc2MywgMzE3NzYsIAotICAgIDMxNzg4LCAzMTgwMCwgMTQ1ODcsIDMxODE0LCAzMTgxOSwgMzE4MjQsIDMxODI4LCAzMTgzMiwgMzE4MzYsIDE3ODAsIAotICAgIDI3MTU5LCAzMTg0MCwgMzE4NDUsIDMxMDYzLCAzMTg1MCwgMzE4NTMsIDMxODU4LCAzMTg2MywgMzE4NjgsIDMxODc0LCAKLSAgICAzMTg4MCwgMTAwOTEsIDMxODg1LCAzMTg5MiwgMTU2ODQsIDMxODk4LCAzMTkwMywgMzE5MDgsIDMxOTEyLCAzMTkxNywgCi0gICAgMzE5MjIsIDMxMDY4LCAzMTkyNywgMzE5MzIsIDMxOTM3LCAzMTk0MywgMzEwNzQsIDMxOTQ4LCAzMTk1MSwgMzE5NTgsIAotICAgIDMxOTY2LCAzMTk3MiwgMzE5NzgsIDMxOTg0LCAzMTk5NSwgMzIwMDAsIDMyMDA3LCAzMjAxNCwgMzIwMjEsIDMyMDI5LCAKLSAgICAzMjAzOCwgMzIwNDcsIDMyMDUzLCAzMjA1OSwgMzIwNjcsIDMxMDc5LCAzMjA3MiwgMzIwNzgsIDMyMDg0LCAzMTA4NSwgCi0gICAgMzIwODksIDMyMDk0LCAzMjEwMiwgMzIxMTAsIDMyMTE2LCAzMjEyMywgMzIxMjksIDMyMTM2LCAzMjE0MywgMzIxNDksIAotICAgIDMyMTU3LCAzMjE2NywgMzIxNzQsIDMyMTc5LCAzMjE4NSwgMzIxOTAsIDMyMTk1LCAzMjIwMiwgMzIyMTEsIDMyMjE5LCAKLSAgICAzMjIyNCwgMzIyMzAsIDMyMjM3LCAzMjI0NSwgMzIyNTEsIDMyMjU2LCAzMjI2MiwgMzIyNzEsIDI3OTM2LCAzMjI3OCwgCi0gICAgMzIyODIsIDMyMjg3LCAzMjI5NiwgMzIzMDEsIDMyMzA2LCAzMjMxMSwgMTIzOTgsIDMyMzE5LCAzMjMyNCwgMzIzMjksIAotICAgIDMyMzM0LCAzMjMzOCwgMzIzNDMsIDMyMzQ4LCAzMjM1NSwgMzIzNjAsIDMyMzY1LCAzMjM3MCwgMzEwOTAsIDIxMjAzLCAKLSAgICAzMjM3NiwgMjUxOSwgMjQ0LCAzMjM3OSwgMzIzODIsIDMyMzg2LCAzMjM5MCwgMzI0MDAsIDMyNDA4LCAzMjQxMiwgMzI0MTksIAotICAgIDMyNDI2LCAzMjQzMCwgMzI0MzMsIDMyNDM5LCAzMjQ0NywgMzI0NTUsIDMyNDU5LCAzMjQ2MywgMzI0NjYsIDMyNDczLCAKLSAgICAzMjQ3NywgMzI0ODEsIDMyNDg4LCAzMjQ5NiwgMzEwMjYsIDMyNTAzLCAzMjUxMSwgMTAxNTEsIDY2MCwgMzA4LCAzMjUyMywgCi0gICAgMzI1MjgsIDMyNTMzLCAzMjUzOSwgMzI1NDQsIDMyNTQ5LCAzNzA0LCAzMjU1NCwgMzI1NTcsIDMyNTYyLCAzMjU2NywgCi0gICAgMzI1NzIsIDMyNTc3LCAzMjU4MiwgMzI1ODksIDIyNTEyLCAzMjU5NCwgMzI1OTksIDMyNjA0LCAzMjYwOSwgMzI2MTQsIAotICAgIDMyNjIwLCAzMjYyNSwgMzI2MzEsIDMxMjYxLCAzMjYzNywgMzI2NDIsIDMyNjQ4LCAzMjY1NCwgMzI2NjQsIDMyNjY5LCAKLSAgICAzMjY3NCwgMzI2NzgsIDMyNjgzLCAzMjY4OCwgMzI2OTMsIDMyNjk4LCAzMjcxMSwgMzI3MTYsIDIyMjg5LCAxNjY5MiwgCi0gICAgMzcxMCwgMzI3MjAsIDMyNzI1LCAzMjczMCwgMzI3MzYsIDMyNzQxLCAzMjc0NiwgMzI3NTAsIDMyNzU1LCAzMjc2MCwgCi0gICAgMzI3NjYsIDMyNzcxLCAzMjc3NiwgMTM4MiwgMzI3ODAsIDMyNzg1LCAzMjc5MCwgMzI3OTUsIDMyNzk5LCAzMjgwNCwgCi0gICAgMzI4MDksIDMyODE0LCAzMjgyMCwgMzI4MjYsIDMyODMxLCAzMjgzNSwgMzI4MzksIDMyODQ0LCAzMjg0OSwgMzI4NTQsIAotICAgIDMyODU4LCAzMjg2NiwgMzI4NzAsIDMyODc2LCAzMjg4MCwgMzI4ODcsIDE2NDg1LCAzMTAzNywgMzI4OTMsIDMyOTAwLCAKLSAgICAzMjkwOCwgMzI5MTUsIDMyOTIxLCAzMjkzNCwgMzI5NDYsIDMyOTUyLCAzMjk1NiwgMjc3MywgMzI5NjAsIDMyOTY0LCAKLSAgICAzMjQ2OCwgMzI5NzMsIDMyOTg0LCAzMjk4OSwgMzI5OTQsIDMyOTk5LCAzMzAwMywgMzMwMDgsIDIyNDIyLCAzMzAxMiwgCi0gICAgMzMwMTYsIDMzMDIxLCAzMTA0MywgMjEyODcsIDMzMDI1LCAzMzAzMCwgMzMwMzYsIDMzMDQxLCAzMzA0NSwgMzMwNDksIAotICAgIDMzMDUyLCAzMzA1NiwgMzMwNjIsIDMzMDczLCAzMzA4NSwgMzEwNDksIDMzMDkwLCAzMzA5MywgMzMwOTcsIDM0NywgCi0gICAgMzMxMDIsIDMzMTA3LCAzMzExMiwgMzMxMTcsIDMzMTIyLCAzMzEyNywgMzMxMzMsIDMzMTM4LCAzMzE0MywgMzMxNDksIAotICAgIDMzMTU0LCAzMzE2MCwgMzMxNjUsIDMzMTcxLCAzMzE3NiwgMzMxODEsIDMzMTg2LCAzMzE5MSwgMzMxOTYsIDMzMjAxLCAKLSAgICAzMzIwNiwgMzMyMTEsIDMzMjE3LCAzMzIyMiwgMzMyMjcsIDMzMjMyLCAzMzIzNywgMzMyNDIsIDMzMjQ3LCAzMzI1MiwgCi0gICAgMzMyNTgsIDMzMjY0LCAzMzI2OSwgMzMyNzQsIDMzMjc5LCAzMzI4NCwgMzMyODksIDMzMjk0LCAzMzI5OSwgMzMzMDQsIAotICAgIDMzMzA5LCAzMzMxNCwgMzMzMTksIDMzMzI0LCAzMzMyOSwgMzMzMzQsIDMzMzM5LCAzMzM0NCwgMzMzNDksIDMzMzU0LCAKLSAgICAzMzM2MCwgMzEzLCAyNiwgMzMzNjUsIDMzMzY5LCAzMzM3MywgMzMzODEsIDMzMzg1LCAzMzM4OSwgMzMzOTIsIDMzMzk1LCAKLSAgICAzMzM5NywgMzM0MDIsIDMzNDA2LCAzMzQxMSwgMzM0MTUsIDMzNDIwLCAzMzQyNCwgMzM0MjksIDMzNDMzLCAzMzQzNiwgCi0gICAgMzM0MzgsIDMzNDQyLCAzMzQ0NywgMzM0NTEsIDMzNDYyLCAzMzQ2NSwgMzM0NjcsIDMzNDcxLCAzMzQ4MywgMzM0OTIsIAotICAgIDMzNDk2LCAzMzUwMCwgMzM1MDYsIDMzNTExLCAzMzUyMCwgMzM1MjYsIDMzNTMxLCAzMzUzNiwgMzM1NDAsIDMzNTQ1LCAKLSAgICAzMzU1MiwgMzM1NTcsIDMzNTYzLCAzMzU2OCwgMzM1NzIsIDMzNTc5LCAyNTcwMSwgMjU3MTEsIDMzNTgzLCAzMzU4OCwgCi0gICAgMzM1OTMsIDMzNTk4LCAzMzYwNSwgMzM2MDksIDMzNjE2LCA4MTEzLCAzMzYyMiwgMzM2MzEsIDMzNjM5LCAzMzY1NCwgCi0gICAgMzM2NjgsIDMzNjc2LCAzMzY4NywgMzM2OTYsIDMzNzAxLCA3MjI3LCAzMzcxMSwgMzM3MTYsIDMzNzIxLCAzMzcyNSwgCi0gICAgMzM3MjgsIDMzNzMyLCAzMzczNywgMzM3NDEsIDMzNzQ4LCAzMzc1MywgMzM3NTgsIDg5MTIsIDMzNzY4LCAzMzc3MCwgCi0gICAgMzM3NzMsIDMzNzc3LCAzMzc4MywgMzM3ODcsIDMzNzkyLCAzMzc5NywgMzM4MDMsIDMzODA4LCAzMzgxNCwgMzM4MTksIAotICAgIDMzODI5LCAzMzgzOCwgMzM4NDYsIDMzODUxLCAzMzg1NywgMzM4NjIsIDMzODY5LCAzMzg3MywgMzM4ODEsIDMzODg4LCAKLSAgICAzMzkwMSwgMzM5MDksIDMzOTEzLCAzMzkyMywgMzM5MjgsIDMzOTMyLCAzMzk0MCwgMzM5NDgsIDMzOTUyLCAzMzk2MSwgCi0gICAgMzM5NjcsIDMzOTcyLCAzMzk4MCwgMzM5OTAsIDMzOTk5LCAzNDAwOCwgMzQwMTcsIDM0MDI4LCAzNDAzNiwgMzQwNDcsIAotICAgIDM0MDU2LCAzNDA2MywgMzQwNjksIDM0MDc0LCAzNDA4NSwgMzQwOTAsIDM0MDk0LCAzNDA5NywgMzQxMDEsIDM0MTA5LCAKLSAgICAzNDExNSwgMzQxMjMsIDM0MTMwLCAzNDEzNiwgMzQxNDEsIDM0MTQ3LCAyNDE4LCAzNDE1MSwgMzQxNTMsIDM0MTU4LCAKLSAgICAzNDE2MywgMzQxNjgsIDM0MTcxLCAzNDE3MywgMzQxNzcsIDM0MTgwLCAzNDE4NywgMzQxOTEsIDk4ODQsIDM0MTk1LCAKLSAgICAzNDIwMSwgMzQyMTEsIDM0MjE2LCAzNDIyMiwgMzQyMjYsIDM0MjMxLCAzNDI0NCwgMjYwODcsIDM0MjUwLCAzNDI1OSwgCi0gICAgMTc0NjIsIDM0MjY2LCAzNDI3NSwgMzE2NDcsIDM0MjgzLCAzNDI4OCwgMzQyOTIsIDM0MzAwLCAzNDMwNywgMzQzMTIsIAotICAgIDM0MzE2LCAzNDMyMSwgMzQzMjUsIDM0MzMzLCAzNDMzOSwgMzQzNDUsIDM0MzUwLCAzNDM1NCwgMzQzNTcsIDM0MzYyLCAKLSAgICAzNDM3NSwgMzQzOTEsIDIyOTc5LCAzNDQwOCwgMzQ0MjAsIDM0NDM3LCAzNDQ0OSwgMzQ0NjMsIDIyOTk2LCAyMzAxNSwgCi0gICAgMzQ0NzUsIDM0NDg3LCAyNjgwLCAzNDUwMSwgMzQ1MDYsIDM0NTExLCAzNDUxNiwgMzQ1MjAsIDM0NTI3LCAzNDUzOSwgCi0gICAgMzQ1NDUsIDM0NTQ4LCAzNDU1OSwgMzQ1NzAsIDM0NTc1LCAzMjA2NCwgNjk1LCAzNDU3OSwgMzQ1ODMsIDM0NTg3LCAKLSAgICAzNDU5MCwgMzQ1OTUsIDM0NjAwLCAzNDYwNiwgMzQ2MTEsIDM0NjE2LCAzNDYyMiwgMzQ2MjgsIDM0NjMzLCAzNDYzNywgCi0gICAgMzQ2NDIsIDM0NjQ3LCAzNDY1MiwgMzQ2NTYsIDM0NjU5LCAzNDY2NSwgMzQ2NzAsIDM0Njc1LCAzNDY4MCwgMzQ2ODQsIAotICAgIDM0Njg5LCAzNDY5NSwgMzQ3MDMsIDI2MzIwLCAzNDcwOCwgMzQ3MTMsIDM0NzIwLCAzNDcyNiwgMzQ3MzIsIDM0NzM3LCAKLSAgICAzNDc0NSwgMjI1MjEsIDM0NzUyLCAzNDc1NywgMzQ3NjIsIDM0NzY3LCAzNDc3MSwgMzQ3NzQsIDM0Nzc5LCAzNDc4MywgCi0gICAgMzQ3ODcsIDM0Nzk0LCAzNDgwMCwgMzQ4MDYsIDM0ODEyLCAzNDgxOSwgMzQ4MjQsIDM0ODMwLCAzMzk0MywgMzQ4MzQsIAotICAgIDM0ODM4LCAzNDg0MywgMzQ4NTYsIDM0ODYxLCAzNDg2NywgMzQ4NzUsIDM0ODgyLCAzNDg5MCwgMzQ5MDAsIDM0OTA2LCAKLSAgICAzNDkxMiwgMzQ5MTgsIDM0OTIyLCAzNDkzMSwgMzQ5MzksIDM0OTQ2LCAzNDk1MSwgMzQ5NTYsIDEwNDM3LCAzNDk2MSwgCi0gICAgMzQ5NjksIDM0OTc2LCAzNDk4MiwgMzQ5OTIsIDM0OTk3LCAzNTAwMywgMzUwMTEsIDM2MDgsIDM1MDE4LCAzNTAyNSwgCi0gICAgMzYxNCwgMzUwMjksIDM1MDM0LCAzNTA0NSwgMzUwNTIsIDM1MDU4LCAzNTA2NywgMzUwNzEsIDQwMTUsIDM1MDc0LCAKLSAgICAzNTA4MSwgMzUwODcsIDM1MDkzLCAzNTEwMSwgMzUxMTEsIDI5MDQyLCAzNTExOCwgMzUxMjYsIDM1MTMxLCAzNTEzNywgCi0gICAgMzUxNDIsIDI1OTQ3LCAzNTE0OCwgMzUxNTUsIDM1MTYxLCAzNTE3MCwgMjM2NjAsIDM1MTc3LCAzNTE4MiwgMzUxODYsIAotICAgIDM1MTk0LCAzNTIwMiwgOTYwMCwgNTg5NSwgMzUyMDksIDM1MjEzLCAzNTIxNSwgMzUyMTksIDM1MjI0LCAzNTIyNiwgCi0gICAgMzUyMzIsIDM1MjM3LCAzNTI0MiwgMzUyNDksIDMyNTg1LCAzNTI1NSwgMzUyNjAsIDM1MjY0LCAzNTI2OSwgMzUyNzMsIAotICAgIDM1MjgyLCAzNTI4NiwgMzUyOTIsIDM1Mjk5LCAzNTMwNSwgMzUzMTIsIDM1MzE3LCAzNTMyNiwgMzUzMzEsIDM1MzM1LCAKLSAgICAzNTM0MCwgMzUzNDcsIDM1MzU1LCAzNTM2MywgMzUzNjgsIDIxMzQzLCAzNTM3MiwgMzUzNzUsIDM1Mzc5LCAzNTM4MywgCi0gICAgMzUzODcsIDM1MzkwLCAzNTM5MiwgMzU0MDAsIDM1NDA0LCAzNTQxMSwgMzU0MTUsIDM1NDE5LCAzNTQyNywgMzU0MzQsIAotICAgIDM1NDQ0LCAzNTQ0OCwgMzU0NTIsIDM1NDYwLCAzNTQ2OCwgMzU0NzQsIDM1NDc5LCAzNTQ4OCwgMTMzNTAsIDM1NDk0LCAKLSAgICAzNTUwMywgMzU1MDgsIDM1NTE1LCAzNTUyMywgMzU1MzEsIDM1NTM5LCAzNTU0NiwgMzU1NTMsIDM1NTYwLCAzNTU2NywgCi0gICAgMzU1NzQsIDM1NTc5LCAzNTU4NSwgMzU2MDIsIDM1NjEwLCAzNTYyMCwgMzU2MjgsIDM1NjM1LCA0MDcsIDM1NjM5LCAKLSAgICAzNTY0NSwgMzU2NDksIDM1NjU0LCAzMzY5MiwgMzU2NjAsIDM1NjYzLCAzNTY2NywgMzU2NzUsIDM2MTksIDM1NjgzLCAKLSAgICAzNTY4OSwgMzU2OTUsIDM1NzA0LCAzNTcxNCwgMzU3MjEsIDM1NzI3LCAzNjI1LCAzNjMxLCAzNTczNiwgMzU3NDMsIAotICAgIDM1NzUxLCAzNTc1NiwgMzU3NjAsIDM1NzY3LCAzNTc3NSwgMzU3ODIsIDM1Nzg4LCAzNTc5NywgMzU4MDcsIDM1ODEzLCAKLSAgICAzNTgyMSwgMzU4MzAsIDM1ODM3LCAzNTg0NSwgMzU4NTIsIDIyMDE5LCAzNTg1NiwgMzU4NjMsIDM1ODY5LCAzNTg3OSwgCi0gICAgMzU4ODgsIDM1ODk5LCAzNTkwMywgMzU5MTMsIDM1OTE5LCAzNTkyNiwgMzU5MzQsIDM1OTQzLCAzNTk1MiwgMzU5NjIsIAotICAgIDM1OTczLCAzNTk4MCwgMzU5ODUsIDM1OTkyLCAzMDI5LCAzNjAwMCwgMzYwMDYsIDM2MDExLCAzNjAxNywgMzYwMjMsIAotICAgIDM2MDI4LCAzNjA0MSwgMzYwNTQsIDM2MDY3LCAzNjA3NCwgMzYwODAsIDM2MDg4LCAzNjA5NiwgMzYxMDEsIDM2MTA1LCAKLSAgICAxNDY5LCAzNjEwOSwgMzYxMTQsIDM2MTE5LCAzNjEyNCwgMzYxMjksIDM2MTM1LCAzNjE0MCwgMzYxNDUsIDM2MTUwLCAKLSAgICAzNjE1NSwgMzYxNjAsIDM2MTY1LCAzNjE3MCwgMzYxNzYsIDM2MTgyLCAzNjE4NywgMzYxOTIsIDM2MTk4LCAzNjIwMywgCi0gICAgMzYyMDgsIDM2MjEzLCAzNjIxOSwgMzYyMjQsIDM2MjI5LCAzNjIzNCwgMzYyMzksIDM2MjQ1LCAzNjI1MCwgMzYyNTUsIAotICAgIDM2MjYxLCAzNjI2NiwgMzYyNzEsIDM2Mjc2LCAzNjI4MSwgMzYyODYsIDM2MjkyLCAzNjI5NywgMzYzMDMsIDM2MzA4LCAKLSAgICAzNjMxNCwgMzYzMTksIDM2MzI0LCAzNjMyOSwgMzYzMzUsIDM2MzQxLCAzNjM0NywgMzYzNTMsIDM2MzU5LCAzNjM2NSwgCi0gICAgMzYzNzEsIDM2Mzc3LCAzNjM4MiwgMzYzODcsIDM2MzkzLCAzNjM5OCwgMzY0MDMsIDM2NDA4LCAzNjQxMywgMzY0MTgsIAotICAgIDM2NDIzLCAzNjQyOCwgMzY0MzQsIDM2NDM5LCAzNjQ0NCwgMzY0NTAsIDM2NDU2LCAxMDEsIDM2NDYxLCAzNjQ2MywgCi0gICAgMzY0NjcsIDM2NDcxLCAzNjQ3NSwgMzY0ODAsIDM2NDg0LCA5NTIxLCAzNjQ4OCwgMzY0OTQsIDE3NDEsIDYyODAsIDM2NTAwLCAKLSAgICAzNjUwMywgMzY1MDgsIDM2NTEyLCAzNjUxNywgMzY1MjEsIDM2NTI1LCAzNjUzMCwgMTAyMzgsIDM2NTM0LCAzNjUzOCwgCi0gICAgMzY1NDIsIDM2NTQ2LCAxNTM3MiwgMzY1NTEsIDM2NTU1LCAzNjU2MCwgMzY1NjUsIDM2NTcwLCAzNjU3NCwgMzY1ODEsIAotICAgIDI2MTExLCAzNjU4NywgMzY1OTAsIDM2NTk0LCAzNjU5OSwgMzY2MDUsIDM2NjA5LCAzNjYxNywgMzY2MjMsIDM2NjI4LCAKLSAgICAzNjYzMiwgMzY2MzgsIDM2NjQyLCAzNjY0NiwgMzQ2MiwgMzQ2NywgMjkyMzQsIDM2NjQ5LCAzNjY1MywgMzY2NTcsIAotICAgIDM2NjYxLCAzNjY2OSwgMzY2NzYsIDM2NjgwLCAzNjY4NywgMzY2OTIsIDMxNywgMzY2OTcsIDM2NzAxLCAzNjcwNywgCi0gICAgMzY3MTksIDM2NzI1LCAzNjczMSwgMzY3MzUsIDM2NzQxLCAzNjc1MCwgMzY3NTQsIDM2NzU4LCAzNjc2MywgMzY3NjksIAotICAgIDM2Nzc0LCAzNjc3OCwgMzY3ODMsIDM2Nzg3LCAzNjc5MSwgMzY3OTgsIDM2ODA0LCAzNjgwOSwgMzY4MjQsIDM2ODM5LCAKLSAgICAzNjg1NCwgMzY4NzAsIDM2ODg4LCAxMDE4OCwgMzY5MDIsIDM2OTA5LCAzNjkxMywgMzY5MTYsIDM2OTI1LCAzNjkzMCwgCi0gICAgMzY5MzQsIDM2OTQyLCAzMzg5NCwgMzY5NTAsIDM2OTU0LCAzNjk2NCwgMzY5NzUsIDI5MjA0LCAzNjk4OCwgMzY5OTIsIAotICAgIDM3MDAxLCAzNzAwOSwgOTc3OCwgMTQ5MDAsIDM3MDEzLCAyMjQzNCwgMzcwMTYsIDMwMTUyLCAzNzAyMSwgOTc3NywgCi0gICAgMzcwMjYsIDM3MDMyLCAzNzAzNywgMzcwNDMsIDM3MDQ4LCAzNzA1NCwgMzcwNTksIDM3MDY1LCAzNzA3MCwgMzcwNzYsIAotICAgIDM3MDgyLCAzNzA4OCwgMzcwOTMsIDM3MDQ5LCAzNzA1NSwgMzcwNjAsIDM3MDY2LCAzNzA3MSwgMzcwNzcsIDM3MDgzLCAKLSAgICA4MTI2LCAzODc0LCAzNzA5NywgMzcxMDUsIDM3MTA5LCAzNzExMiwgMzcxMTYsIDM3MTIxLCAzNzEyNiwgMzcxMzIsIAotICAgIDM3MTM4LCAzNzE0MywgMzcxNDcsIDI1OTU5LCAzNzE1MSwgMzcxNTUsIDM3MTYxLCAzNzE2NSwgOTA0MiwgMzcxNzQsIAotICAgIDM3MTgxLCAzNzE4NSwgMTE4NjgsIDM3MTkyLCAzNzE5OCwgMzcyMDMsIDM3MjEwLCAzNzIxNywgMzcyMjQsIDI4NTUwLCAKLSAgICA4MDQ5LCAzNzIzMSwgMzcyMzgsIDM3MjQ1LCAzNzI1MSwgMzcyNTYsIDM3MjYzLCAzNzI3NCwgMzcyODAsIDM3Mjg1LCAKLSAgICAzNzI5MCwgMzcyOTUsIDM3MzAyLCAzNzA1MCwgMzczMDYsIDM3MzE2LCAzNzMyNywgMzczMzMsIDM3MzM4LCAzNzM0MywgCi0gICAgMzczNDgsIDM3MzUzLCAzNzM1OCwgMzczNjIsIDM3MzY2LCAzNzM3MiwgMzczODAsIDIzMTksIDg2NSwgMTAyNTQsIDEwMjY2LCAKLSAgICAxMDI3MSwgMTAyNzcsIDM3Mzg5LCAxMDI4MiwgMTAyODcsIDEwMjkzLCAzNzM5NCwgMzc0MDQsIDM3NDA4LCAxMDI5OCwgCi0gICAgMzc0MTMsIDE2ODkwLCAzNzQxNiwgMzc0MjEsIDM3NDI1LCAzNzQzMCwgMzc0MzUsIDM3NDQyLCAzNzQ0OSwgMzc0NTMsIAotICAgIDM3NDU2LCAzNzQ2NCwgMTAyMDEsIDM3NDcxLCAzNzQ3NCwgMzc0ODAsIDM3NDkwLCA1OTI5LCAzNzQ5OSwgMzc1MDMsIAotICAgIDM3NTExLCAzNzUxNSwgMzc1MjUsIDM3NTMxLCAzNzU0MiwgMzc1NDgsIDM3NTU0LCAzNzU1OSwgMzc1NjUsIDM3NTcxLCAKLSAgICAzNzU3NywgMzc1ODIsIDM3NTg1LCAzNzU5MiwgMzc1OTgsIDM3NjAzLCAzNzYxMCwgMzc2MTcsIDM3NjIxLCAzNzYzMSwgCi0gICAgMzc2NDQsIDM3NjUzLCAzNzY2MiwgMzc2NzMsIDM3Njg2LCAzNzY5NywgMzc3MDYsIDM3NzE3LCAzNzcyMiwgMzc3MzEsIAotICAgIDM3NzM2LCAxMDMwMywgMzc3NDIsIDM3NzQ5LCAzNzc1NywgMzc3NjIsIDM3NzY2LCAzNzc3MywgMzc3ODAsIDM4MjksIDE2LCAKLSAgICAzNzc4NCwgMzc3ODksIDE2NzQ0LCAzNzc5MywgMzc3OTYsIDM3Nzk5LCAyODA1NiwgMzc4MDMsIDI4NTU5LCAzNzgxMSwgCi0gICAgMzc4MTUsIDM3ODE5LCAzNzgyMiwgMzc4MjgsIDM3MDcyLCAzNzgzNCwgMzc4NDIsIDM3ODQ4LCAzNzg1NSwgMjgwMzksIAotICAgIDM3ODU5LCAyODIzMywgMzc4NjMsIDM3ODcyLCAzNzg3OCwgMzc4ODQsIDM3ODg5LCAzNzg5MywgMzc4OTksIDM3OTAzLCAKLSAgICAzNzkxMSwgMzc5MTksIDI2MTc3LCAzNzkyNSwgMzc5MzIsIDM3OTM4LCAzNzk0MywgMzc5NDgsIDM3OTUyLCAzNzk1OCwgCi0gICAgMzc5NjMsIDM3OTY5LCA0MDU2LCA3OTEsIDM3OTc2LCAzNzk4MCwgMzc5ODMsIDE1MjYyLCAzNzk5NSwgMzU4MjYsIDM4MDA2LCAKLSAgICAzODAwOSwgMzgwMTYsIDM4MDIwLCAzODAyNiwgMzgwMzAsIDM4MDM2LCAzODA0MSwgMzgwNDcsIDM4MDUyLCAzODA1NywgCi0gICAgMzgwNjEsIDM4MDY1LCAzODA3MCwgMzgwNzUsIDM4MDg1LCAzODA5MSwgMzgxMDQsIDM4MTEwLCAzODExNiwgMzgxMjMsIAotICAgIDM4MTI4LCAzODEzNCwgMzgxMzksIDE2NjMwLCAxNDcyLCAxMDE5LCAzMTE5MywgMzExOTksIDM4MTQ0LCAzMTIwNSwgCi0gICAgMzEyMTgsIDMxMjI0LCAzMTIzMCwgMzgxNTAsIDMxMjM2LCAzMTI0MiwgMzgxNTYsIDM4MTYyLCAyMiwgMzgxNzAsIDM4MTc3LCAKLSAgICAzODE4MSwgMzgxODUsIDM4MTkzLCAzMTk1MywgMzgxOTcsIDM4MjAxLCAzODIwOCwgMzgyMTMsIDM4MjE3LCAzODIyMiwgCi0gICAgMzgyMjgsIDM4MjMzLCAzODIzOSwgMzgyNDQsIDM4MjQ4LCAzODI1MiwgMzgyNTYsIDM4MjYxLCAzODI2NSwgMzgyNzAsIAotICAgIDM4Mjc0LCAzODI4MSwgMzgyODYsIDM4MjkwLCAzODI5NSwgMzgyOTksIDM4MzA0LCAzODMwOCwgMzgzMTMsIDM4MzE5LCAKLSAgICAxNTQ4MiwgMTU0ODcsIDM4MzI0LCAzODMyOCwgMzgzMzEsIDM4MzM1LCAyMTE3MCwgMzgzNDAsIDM4MzQ0LCAzODM1MCwgCi0gICAgMzgzNTcsIDM4MzYyLCAzODM3MiwgMzgzNzcsIDM4Mzg1LCAzODM4OSwgMzgzOTIsIDMxOTY4LCAzODM5NiwgNDEwOSwgCi0gICAgMzg0MDEsIDM4NDA2LCAzODQxMCwgMzg0MTUsIDM4NDE5LCAzODQyNCwgMTMzNjgsIDM4NDM1LCAzODQzOSwgMzg0NDIsIAotICAgIDM4NDQ3LCAzODQ1MSwgMzg0NTUsIDM4NDU4LCAzODQ2MiwgODE0NSwgMTMzODQsIDM4NDY1LCAzODQ2OCwgMzg0NzQsIAotICAgIDM4NDc5LCAzODQ4NSwgMzg0OTAsIDM4NDk2LCAzODUwMSwgMzg1MDcsIDM4NTEyLCAzODUxOCwgMzg1MjQsIDM4NTMwLCAKLSAgICAzODUzNSwgMzg1MzksIDM4NTQzLCAzODU1MiwgMzg1NjgsIDM4NTg0LCAzODU5NCwgMjc5NDYsIDM4NjAxLCAzODYwNSwgCi0gICAgMzg2MTAsIDM4NjE1LCAzODYxOSwgMzg2MjMsIDM1OTQ3LCAzODYyOSwgMzg2MzQsIDM4NjM4LCAzODY0NSwgMzg2NTAsIAotICAgIDM4NjU0LCAzODY1OCwgMjY5NzksIDM4NjY0LCAyMTQzOCwgMzg2NjksIDM4Njc2LCAzODY4NCwgMzg2OTAsIDM4Njk3LCAKLSAgICAzODcwNSwgMzg3MTEsIDM4NzE1LCAzODcyMSwgMzg3MjksIDM4NzMzLCAzODc0MiwgOTUwMiwgMzg3NTAsIDM4NzU0LCAKLSAgICAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgMzg3ODMsIDM4Nzg2LCAzODc5MCwgMzg3OTMsIDM4Nzk3LCAzODgwNCwgCi0gICAgMzg4MDksIDM4ODE1LCAyNjM5OCwgMzEyNTYsIDM4ODE5LCAzODgyNiwgMzg4MzIsIDM4ODM4LCAzODg0MywgMzg4NDYsIAotICAgIDM4ODQ4LCAzODg1NSwgMzg4NjIsIDM4ODY4LCAzODg3MiwgMzg4NzUsIDM4ODc5LCAzODg4MywgMzg4ODcsIDM4ODkyLCAKLSAgICAzODg5NiwgMzg5MDAsIDM4OTAzLCAzODkwNywgMzg5MjEsIDIzMDQ1LCAzODk0MCwgMzg5NTMsIDM4OTY2LCAzODk3OSwgCi0gICAgMjMwNjMsIDM4OTk0LCAxMDQ5MCwgMzkwMDksIDM5MDE1LCAzOTAxOSwgMzkwMjMsIDM5MDMwLCAzOTAzNSwgMzkwMzksIAotICAgIDM5MDQ2LCAzOTA1MiwgMzkwNTcsIDM5MDYzLCAzOTA3MywgMzkwODUsIDM5MDk2LCAzOTEwMSwgMzkxMDgsIDM5MTEyLCAKLSAgICAzOTExNiwgMzkxMTksIDE1ODc4LCAzNjc3LCAzOTEyNywgMTU1MDksIDM5MTQwLCAzOTE0NywgMzkxNTEsIDM5MTU1LCAKLSAgICAzOTE2MCwgMzkxNjUsIDM5MTcxLCAzOTE3NSwgMzkxNzksIDM5MTgyLCA3NzQyLCAxNTUyMCwgMzkxODcsIDM5MTkxLCAKLSAgICAzOTE5NywgMzkyMDYsIDM5MjExLCAzOTIxOCwgMzU4MDMsIDM5MjI0LCAzOTIyOSwgMzkyMzMsIDM5MjM4LCAzOTI0NSwgCi0gICAgMzkyNDksIDM5MjUyLCAzOTI1NiwgMzkyNjEsIDE0NTUyLCAzOTI2OCwgMzkyNzUsIDEwNjYsIDM5Mjc5LCAzOTI4NCwgCi0gICAgMzkyODksIDM5Mjk1LCAzOTMwMCwgMzkzMDUsIDM5MzA5LCAzOTMxOSwgMzkzMjQsIDM5MzMwLCAzOTMzNSwgMzkzNDEsIAotICAgIDM5MzQ2LCAzOTM1MiwgMzkzNjIsIDM5MzY3LCAzOTM3MiwgMzkzNzYsIDcyMjksIDcyNDEsIDM5MzgxLCAzOTM4NCwgCi0gICAgMzkzOTEsIDM5Mzk3LCAzNDA1OSwgMzQwNjYsIDM5NDA2LCAzOTQxMCwgMzIwMTYsIDM5NDE4LCAzOTQyOSwgMzk0MzcsIAotICAgIDM1OTk1LCAzOTQ0NCwgMzk0NDksIDM5NDU0LCAzOTQ2NSwgMzk0NzIsIDM5NDgzLCAzMjA0MCwgMjE0NDQsIDM5NDkxLCAKLSAgICA3MzUsIDM5NDk2LCAzOTUwMiwgMjgwMzAsIDM5NTA4LCAzOTUxMywgMzk1MjMsIDM5NTMyLCAzOTUzOSwgMzk1NDUsIAotICAgIDM5NTQ5LCAzOTU1MiwgMzk1NTksIDM5NTY1LCAzOTU3MiwgMzk1NzgsIDM5NTg4LCAzOTU5NiwgMzk2MDIsIDM5NjA4LCAKLSAgICAzOTYxMywgMzk2MTcsIDM5NjI0LCAzOTYzMCwgMzk2MzcsIDM4ODg4LCA1MzUsIDEzODA1LCAzOTY0MywgMzk2NDgsIAotICAgIDM5NjUxLCAzOTY1NywgMzk2NjUsIDEzOTYsIDM5NjcwLCAzOTY3NCwgMzk2NzksIDM5Njg2LCAzOTY5MiwgMzk2OTYsIAotICAgIDM5NzAwLCAzOTcwNSwgMzk3MTQsIDM5NzIxLCAzOTczMSwgMzk3MzcsIDI4MDc0LCAzOTc1NCwgMzk3NjMsIDM5NzcxLCAKLSAgICAzOTc3NywgMzk3ODIsIDM5Nzg5LCAzOTc5NSwgMzk4MDMsIDM5ODEyLCAzOTgyMCwgMzk4MjQsIDM5ODI5LCAzOTgzNywgCi0gICAgMzIwNDksIDM5ODQzLCAzOTg2MiwgMTU4MTEsIDM5ODc2LCAzOTg5MiwgMzk5MDYsIDM5OTEyLCAzOTkxNywgMzk5MjIsIAotICAgIDM5OTI3LCAzOTkzMywgMzIwNTUsIDM5OTM4LCAzOTk0NSwgMzk5NTAsIDM5OTU0LCAzNDUsIDI5MzYsIDM5OTYxLCAzOTk2NiwgCi0gICAgMzk5NzEsIDI3MzA1LCAzOTc5MiwgMzk5NzUsIDM5OTgwLCAzOTk4OCwgMzk5OTIsIDM5OTk1LCA0MDAwMSwgNDAwMDcsIAotICAgIDQwMDExLCAyODEyOSwgNDAwMTQsIDQwMDE5LCA0MDAyMywgNDAwMjYsIDQwMDMxLCA0MDAzNSwgNDAwNDAsIDQwMDQ1LCAKLSAgICA0MDA0OSwgNDAwNTQsIDQwMDU4LCA0MDA2MiwgMjExNjYsIDIxMTc3LCA0MDA2NiwgNDAwNzEsIDQwMDc3LCAyNjkzNiwgCi0gICAgNDAwODIsIDQwMDg2LCAyMTI1MywgMTYwNTksIDQwMDg5LCA0MDA5NCwgNDAwOTksIDQwMTA0LCA0MDEwOSwgNDAxMTQsIAotICAgIDQwMTE5LCA0MDEyNCwgNDQ3LCA0MywgMzEyNzQsIDMxMjc5LCAzMTI4NCwgMzEyOTAsIDMxMjk1LCAzMTMwMCwgNDAxMjksIAotICAgIDMxMzA0LCA0MDEzMywgNDAxMzcsIDQwMTQxLCAzMTMwOSwgMzEzMTUsIDQwMTU1LCAzMTMyNiwgMzEzMzEsIDQwMTYzLCAKLSAgICA0MDE2OCwgMzEzMzcsIDQwMTczLCA0MDE3OCwgNDAxODMsIDQwMTg4LCA0MDE5NCwgNDAyMDAsIDQwMjA2LCAzMTM1NCwgCi0gICAgNDAyMTksIDQwMjI1LCAzMTM1OCwgNDAyMjksIDMxMzYzLCA0MDIzNCwgMzEzNjgsIDMxMzczLCA0MDIzNywgNDAyNDIsIAotICAgIDQwMjQ2LCAzMDkyMywgNDAyNTIsIDEzNTkyLCA0MDI1OSwgNDAyNjQsIDMxMzc4LCA0MDI2OCwgNDAyNzMsIDQwMjc4LCAKLSAgICA0MDI4MywgNDAyODcsIDQwMjkyLCA0MDI5NywgNDAzMDMsIDQwMzA4LCA0MDMxMywgNDAzMTksIDQwMzI1LCA0MDMzMCwgCi0gICAgNDAzMzQsIDQwMzM5LCA0MDM0NCwgNDAzNDksIDQwMzUzLCA0MDM1OCwgNDAzNjMsIDQwMzY4LCA0MDM3NCwgNDAzODAsIAotICAgIDQwMzg2LCA0MDM5MSwgNDAzOTUsIDQwNDAwLCA0MDQwNCwgMzEzODIsIDMxMzg3LCAzMTM5MiwgNDA0MDgsIDQwNDEyLCAKLSAgICA0MDQxNiwgMzEzOTcsIDMxNDAzLCAzMTQwOSwgMzE0MjEsIDQwNDI4LCAyNTk5NiwgNDA0MzIsIDQwNDM2LCA0MDQ0MSwgCi0gICAgNDA0NDYsIDQwNDUxLCA0MDQ1NiwgNDA0NjAsIDQwNDY0LCA0MDQ3NCwgNDA0NzksIDQwNDg0LCA0MDQ4OCwgNDA0OTIsIAotICAgIDQwNDk1LCA0MDUwMywgMzE0NjksIDQwNTA4LCAxNDc5LCA0MDUxNCwgNDA1MjIsIDQwNTMxLCA0MDUzNSwgNDA1MzksIAotICAgIDQwNTQ3LCA0MDU1MywgNDA1NjEsIDQwNTc3LCA0MDU4MSwgNDA1ODUsIDQwNTkwLCA0MDYwNSwgMzE1MDYsIDE3NDksIAotICAgIDEyMDQ4LCA0MDYwOSwgMTM3OCwgNDA2MjEsIDQwNjIyLCA0MDYzMCwgNDA2MzcsIDQwNjQyLCA0MDY0OSwgNDA2NTQsIAotICAgIDkzNzIsIDExMTQsIDEwMzI1LCA0MDY2MSwgNDA2NjYsIDQwNjY5LCA0MDY3MiwgNDA2ODEsIDEyODYsIDQwNjg2LCAzOTAzNiwgCi0gICAgNDA2OTMsIDQwNjk4LCAyMjQ4NiwgMjU1NywgNDA3MDIsIDEwNzM0LCA0MDcxMiwgNDA3MTgsIDIzMzcsIDIzNDcsIDQwNzI3LCAKLSAgICA0MDczNiwgNDA3NDYsIDQwNzU3LCAzMjkzLCAzNDIxMiwgMTAzNzcsIDM4MDcsIDE2NjY4LCAxMjkxLCA0MDc2MiwgNDA3NzAsIAotICAgIDQwNzc3LCA0MDc4MiwgNDA3ODYsIDQwNzkwLCAyMzg1OCwgMTA0MDQsIDQwNzk4LCA0MDgwNywgNDA4MTYsIDQwODI0LCAKLSAgICA0MDgzMSwgNDA4NDIsIDQwODQ3LCA0MDg2MCwgNDA4NzMsIDQwODg1LCA0MDg5NywgNDA5MDksIDQwOTIyLCA0MDkzMywgCi0gICAgNDA5NDQsIDQwOTU0LCA0MDk2MiwgNDA5NzAsIDQwOTgyLCA0MDk5NCwgNDEwMDUsIDQxMDE0LCA0MTAyMiwgNDEwMjksIAotICAgIDQxMDQxLCA0MTA0OCwgNDEwNTcsIDQxMDY0LCA0MTA3NywgNDEwODIsIDQxMDkyLCA0MTA5NywgNDExMDMsIDQxMTA4LCAKLSAgICAzNzE4MiwgNDExMTIsIDQxMTE5LCA0MTEyMywgNDExMzAsIDQxMTM4LCAyNTE4LCA0MTE0NSwgNDExNTYsIDQxMTY2LCAKLSAgICA0MTE3NSwgNDExODMsIDQxMTkzLCA0MTIwMSwgNDEyMTEsIDQxMjIwLCA0MTIyNSwgNDEyMzEsIDQxMjM3LCAzNzA5LCAKLSAgICA0MTI0OCwgNDEyNTgsIDQxMjY3LCA0MTI3NiwgNDEyODYsIDQxMjk0LCA0MTMwMywgNDEzMDgsIDQxMzEzLCA0MTMxOCwgCi0gICAgMTcwNSwgMzcsIDQxMzI2LCA0MTMzNCwgNDEzNDUsIDQxMzU2LCAxNjM0MywgNDEzNjYsIDQxMzcwLCA0MTM3NywgNDEzODMsIAotICAgIDQxMzg4LCA0MTM5MiwgNDE0MDMsIDQxNDEzLCA0MTQyMiwgNDE0MzMsIDE2NzE3LCAxNjcyMiwgNDE0MzgsIDQxNDQ3LCAKLSAgICA0MTQ1MiwgNDE0NjIsIDQxNDY3LCA0MTQ3NSwgNDE0ODMsIDQxNDkwLCA0MTQ5NiwgNzA3OCwgMjI4LCA0MTUwMCwgNDE1MDYsIAotICAgIDQxNTExLCA0MTUxNCwgMjExNywgMzkxNTIsIDQxNTIyLCA0MTUyNiwgNDE1MjksIDE1MTIsIDQxNTM1LCAxMzk2NywgMTI5NiwgCi0gICAgNDE1NDAsIDQxNTUzLCA0MTU2NywgMjY0MywgNDE1ODUsIDQxNTk3LCA0MTYwOSwgMjY1NywgMjY3NCwgNDE2MjMsIDQxNjM2LCAKLSAgICAyNjg5LCA0MTY1MCwgNDE2NjIsIDI3MDQsIDQxNjc2LCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1MiwgNDE2ODEsIDQxNjg2LCAKLSAgICA0MTY5MSwgNDE2OTUsIDQxNzEwLCA0MTcyNSwgNDE3NDAsIDQxNzU1LCA0MTc3MCwgNDE3ODUsIDQxODAwLCA0MTgxNSwgCi0gICAgNDE4MzAsIDQxODQ1LCA0MTg2MCwgNDE4NzUsIDQxODkwLCA0MTkwNSwgNDE5MjAsIDQxOTM1LCA0MTk1MCwgNDE5NjUsIAotICAgIDQxOTgwLCA0MTk5NSwgNDIwMTAsIDQyMDI1LCA0MjA0MCwgNDIwNTUsIDQyMDcwLCA0MjA4NSwgNDIxMDAsIDQyMTE1LCAKLSAgICA0MjEzMCwgNDIxNDUsIDQyMTYwLCA0MjE3NSwgNDIxOTAsIDQyMjA1LCA0MjIyMCwgNDIyMzUsIDQyMjUwLCA0MjI2NSwgCi0gICAgNDIyODAsIDQyMjk1LCA0MjMxMCwgNDIzMjUsIDQyMzQwLCA0MjM1NSwgNDIzNzAsIDQyMzg1LCA0MjQwMCwgNDI0MTUsIAotICAgIDQyNDMwLCA0MjQ0NSwgNDI0NjAsIDQyNDc1LCA0MjQ5MCwgNDI1MDUsIDQyNTIwLCA0MjUzNSwgNDI1NTAsIDQyNTY1LCAKLSAgICA0MjU4MCwgNDI1OTUsIDQyNjEwLCA0MjYyNSwgNDI2NDAsIDQyNjU1LCA0MjY3MCwgNDI2ODUsIDQyNzAwLCA0MjcxNSwgCi0gICAgNDI3MzAsIDQyNzQ1LCA0Mjc2MCwgNDI3NzUsIDQyNzkwLCA0MjgwNSwgNDI4MjAsIDQyODM1LCA0Mjg1MCwgNDI4NjUsIAotICAgIDQyODgwLCA0Mjg5NSwgNDI5MTAsIDQyOTI1LCA0Mjk0MCwgNDI5NTUsIDQyOTcwLCA0Mjk4NSwgNDMwMDAsIDQzMDE1LCAKLSAgICA0MzAzMCwgNDMwNDUsIDQzMDYwLCA0MzA3NSwgNDMwOTAsIDQzMTA1LCA0MzEyMCwgNDMxMzUsIDQzMTUwLCA0MzE2NSwgCi0gICAgNDMxODAsIDQzMTk1LCA0MzIxMCwgNDMyMjUsIDQzMjQwLCA0MzI1NSwgNDMyNzAsIDQzMjg1LCA0MzMwMCwgNDMzMTUsIAotICAgIDQzMzMwLCA0MzM0NSwgNDMzNjAsIDQzMzc1LCA0MzM5MCwgNDM0MDUsIDQzNDIwLCA0MzQzNSwgNDM0NTAsIDQzNDY1LCAKLSAgICA0MzQ4MCwgNDM0OTUsIDQzNTEwLCA0MzUyNSwgNDM1NDAsIDQzNTU1LCA0MzU3MCwgNDM1ODUsIDQzNjAwLCA0MzYxNSwgCi0gICAgNDM2MzAsIDQzNjQ1LCA0MzY2MCwgNDM2NzUsIDQzNjkwLCA0MzcwNSwgNDM3MjAsIDQzNzM1LCA0Mzc1MCwgNDM3NjUsIAotICAgIDQzNzgwLCA0Mzc5NSwgNDM4MTAsIDQzODI1LCA0Mzg0MCwgNDM4NTUsIDQzODcwLCA0Mzg4NSwgNDM5MDAsIDQzOTE1LCAKLSAgICA0MzkzMCwgNDM5NDUsIDQzOTYwLCA0Mzk3NSwgNDM5OTAsIDQ0MDA1LCA0NDAyMCwgNDQwMzUsIDQ0MDUwLCA0NDA2NSwgCi0gICAgNDQwODAsIDQ0MDk1LCA0NDExMCwgNDQxMjUsIDQ0MTQwLCA0NDE1NSwgNDQxNzAsIDQ0MTg1LCA0NDIwMCwgNDQyMTUsIAotICAgIDQ0MjMwLCA0NDI0NSwgNDQyNjAsIDQ0Mjc1LCA0NDI5MCwgNDQzMDUsIDQ0MzIwLCA0NDMzNSwgNDQzNTAsIDQ0MzY1LCAKLSAgICA0NDM4MCwgNDQzOTUsIDQ0NDEwLCA0NDQyNSwgNDQ0NDAsIDQ0NDU1LCA0NDQ3MCwgNDQ0ODUsIDQ0NTAwLCA0NDUxNSwgCi0gICAgNDQ1MzAsIDQ0NTQ1LCA0NDU2MCwgNDQ1NzUsIDQ0NTkwLCA0NDYwNSwgNDQ2MjAsIDQ0NjM1LCA0NDY1MCwgNDQ2NjUsIAotICAgIDQ0NjgwLCA0NDY5NSwgNDQ3MTAsIDQ0NzI1LCA0NDc0MCwgNDQ3NTUsIDQ0NzcwLCA0NDc4NSwgNDQ4MDAsIDQ0ODE1LCAKLSAgICA0NDgzMCwgNDQ4NDUsIDQ0ODYwLCA0NDg3NSwgNDQ4OTAsIDQ0OTA1LCA0NDkyMCwgNDQ5MzUsIDQ0OTUwLCA0NDk2NSwgCi0gICAgNDQ5ODAsIDQ0OTk1LCA0NTAxMCwgNDUwMjUsIDQ1MDQwLCA0NTA1NSwgNDUwNzAsIDQ1MDg1LCA0NTEwMCwgNDUxMTUsIAotICAgIDQ1MTMwLCA0NTE0NSwgNDUxNjAsIDQ1MTc1LCA0NTE5MCwgNDUyMDUsIDQ1MjIwLCA0NTIzNSwgNDUyNTAsIDQ1MjY1LCAKLSAgICA0NTI4MCwgNDUyOTUsIDQ1MzEwLCA0NTMyNSwgNDUzNDAsIDQ1MzU1LCA0NTM3MCwgNDUzODUsIDQ1NDAwLCA0NTQxNSwgCi0gICAgNDU0MzAsIDQ1NDQ1LCA0NTQ2MCwgNDU0NzUsIDQ1NDkwLCA0NTUwNSwgNDU1MjAsIDQ1NTM1LCA0NTU1MCwgNDU1NjUsIAotICAgIDQ1NTgwLCA0NTU5NSwgNDU2MTAsIDQ1NjI1LCA0NTY0MCwgNDU2NTUsIDQ1NjcwLCA0NTY4NSwgNDU3MDAsIDQ1NzE1LCAKLSAgICA0NTczMCwgNDU3NDUsIDQ1NzYwLCA0NTc3NSwgNDU3OTAsIDQ1ODA1LCA0NTgyMCwgNDU4MzUsIDQ1ODUwLCA0NTg2NSwgCi0gICAgNDU4ODAsIDQ1ODk1LCA0NTkxMCwgNDU5MjUsIDQ1OTQwLCA0NTk1NSwgNDU5NzAsIDQ1OTg1LCA0NjAwMCwgNDYwMTUsIAotICAgIDQ2MDMwLCA0NjA0NSwgNDYwNjAsIDQ2MDc1LCA0NjA5MCwgNDYxMDUsIDQ2MTIwLCA0NjEzNSwgNDYxNTAsIDQ2MTY1LCAKLSAgICA0NjE4MCwgNDYxOTUsIDQ2MjEwLCA0NjIyNSwgNDYyNDAsIDQ2MjU1LCA0NjI3MCwgNDYyODUsIDQ2MzAwLCA0NjMxNSwgCi0gICAgNDYzMzAsIDQ2MzQ1LCA0NjM2MCwgNDYzNzUsIDQ2MzkwLCA0NjQwNSwgNDY0MjAsIDQ2NDM1LCA0NjQ1MCwgNDY0NjUsIAotICAgIDQ2NDgwLCA0NjQ5NSwgNDY1MTAsIDQ2NTI1LCA0NjU0MCwgNDY1NTUsIDQ2NTcwLCA0NjU4NSwgNDY2MDAsIDQ2NjE1LCAKLSAgICA0NjYzMCwgNDY2NDUsIDQ2NjYwLCA0NjY3NSwgNDY2OTAsIDQ2NzA1LCA0NjcyMCwgNDY3MzUsIDQ2NzUwLCA0Njc2NSwgCi0gICAgNDY3ODAsIDQ2Nzk1LCA0NjgxMCwgNDY4MjUsIDQ2ODQwLCA0Njg1NSwgNDY4NzAsIDQ2ODg1LCA0NjkwMCwgNDY5MTUsIAotICAgIDQ2OTMwLCA0Njk0NSwgNDY5NjAsIDQ2OTc1LCA0Njk5MCwgNDcwMDUsIDQ3MDIwLCA0NzAzNSwgNDcwNTAsIDQ3MDY1LCAKLSAgICA0NzA4MCwgNDcwOTUsIDQ3MTEwLCA0NzEyNSwgNDcxNDAsIDQ3MTU1LCA0NzE3MCwgNDcxODUsIDQ3MjAwLCA0NzIxNSwgCi0gICAgNDcyMzAsIDQ3MjQ1LCA0NzI2MCwgNDcyNzUsIDQ3MjkwLCA0NzMwNSwgNDczMjAsIDQ3MzM1LCA0NzM1MCwgNDczNjUsIAotICAgIDQ3MzgwLCA0NzM5NSwgNDc0MTAsIDQ3NDI1LCA0NzQ0MCwgNDc0NTUsIDQ3NDcwLCA0NzQ4NSwgNDc1MDAsIDQ3NTE1LCAKLSAgICA0NzUzMCwgNDc1NDUsIDQ3NTYwLCA0NzU3NSwgNDc1OTAsIDQ3NjA1LCA0NzYyMCwgNDc2MzUsIDQ3NjUwLCA0NzY2NSwgCi0gICAgNDc2ODAsIDQ3Njk1LCA0NzcxMCwgNDc3MjUsIDQ3NzQwLCA0Nzc1NSwgNDc3NzAsIDQ3Nzg1LCA0NzgwMCwgNDc4MTUsIAotICAgIDQ3ODMwLCA0Nzg0NSwgNDc4NjAsIDQ3ODc1LCA0Nzg5MCwgNDc5MDUsIDQ3OTIwLCA0NzkzNSwgNDc5NTAsIDQ3OTY1LCAKLSAgICA0Nzk4MCwgNDc5OTUsIDQ4MDEwLCA0ODAyNSwgNDgwNDAsIDQ4MDU1LCA0ODA3MCwgNDgwODUsIDQ4MTAwLCA0ODExNSwgCi0gICAgNDgxMzAsIDQ4MTQ1LCA0ODE2MCwgNDgxNzUsIDQ4MTkwLCA0ODIwNSwgNDgyMjAsIDQ4MjM1LCA0ODI1MCwgNDgyNjUsIAotICAgIDQ4MjgwLCA0ODI5NSwgNDgzMTAsIDQ4MzI1LCA0ODM0MCwgNDgzNTUsIDQ4MzcwLCA0ODM4NSwgNDg0MDAsIDQ4NDE1LCAKLSAgICA0ODQzMCwgNDg0NDUsIDQ4NDYwLCA0ODQ3NSwgNDg0OTAsIDQ4NTA1LCA0ODUyMCwgNDg1MzUsIDQ4NTUwLCA0ODU2NSwgCi0gICAgNDg1ODAsIDQ4NTk1LCA0ODYxMCwgNDg2MjUsIDQ4NjQwLCA0ODY1NSwgNDg2NzAsIDQ4Njg1LCA0ODcwMCwgNDg3MTUsIAotICAgIDQ4NzMwLCA0ODc0NSwgNDg3NjAsIDQ4Nzc1LCA0ODc5MCwgNDg4MDUsIDQ4ODIwLCA0ODgzNSwgNDg4NTAsIDQ4ODY1LCAKLSAgICA0ODg4MCwgNDg4OTUsIDQ4OTEwLCA0ODkyNSwgNDg5NDAsIDQ4OTU1LCA0ODk3MCwgNDg5ODUsIDQ5MDAwLCA0OTAxNSwgCi0gICAgNDkwMzAsIDQ5MDQ1LCA0OTA2MCwgNDkwNzUsIDQ5MDkwLCA0OTEwNSwgNDkxMjAsIDQ5MTM1LCA0OTE1MCwgNDkxNjUsIAotICAgIDQ5MTgwLCA0OTE5NSwgNDkyMTAsIDQ5MjI1LCA0OTI0MCwgNDkyNTUsIDQ5MjcwLCA0OTI4NSwgNDkzMDAsIDQ5MzE1LCAKLSAgICA0OTMzMCwgNDkzNDUsIDQ5MzYwLCA0OTM3NSwgNDkzOTAsIDQ5NDA1LCA0OTQyMCwgNDk0MzUsIDQ5NDUwLCA0OTQ2NSwgCi0gICAgNDk0ODAsIDQ5NDk1LCA0OTUxMSwgNDk1MjcsIDQ5NTQzLCA0OTU1OSwgNDk1NzUsIDQ5NTkxLCA0OTYwNywgNDk2MjMsIAotICAgIDQ5NjM5LCA0OTY1NSwgNDk2NzEsIDQ5Njg3LCA0OTcwMywgNDk3MTksIDQ5NzM1LCA0OTc1MSwgNDk3NjcsIDQ5NzgzLCAKLSAgICA0OTc5OSwgNDk4MTUsIDQ5ODMxLCA0OTg0NywgNDk4NjMsIDQ5ODc5LCA0OTg5NSwgNDk5MTEsIDQ5OTI3LCA0OTk0MywgCi0gICAgNDk5NTksIDQ5OTc1LCA0OTk5MSwgNTAwMDcsIDUwMDIzLCA1MDAzOSwgNTAwNTUsIDUwMDcxLCA1MDA4NywgNTAxMDMsIAotICAgIDUwMTE5LCA1MDEzNSwgNTAxNTEsIDUwMTY3LCA1MDE4MywgNTAxOTksIDUwMjE1LCA1MDIzMSwgNTAyNDcsIDUwMjYzLCAKLSAgICA1MDI3OSwgNTAyOTUsIDUwMzExLCA1MDMyNywgNTAzNDMsIDUwMzU5LCA1MDM3NSwgNTAzOTEsIDUwNDA3LCA1MDQyMywgCi0gICAgNTA0MzksIDUwNDU1LCA1MDQ3MSwgNTA0ODcsIDUwNTAzLCA1MDUxOSwgNTA1MzUsIDUwNTUxLCA1MDU2NywgNTA1ODMsIAotICAgIDUwNTk5LCA1MDYxNSwgNTA2MzEsIDUwNjQ3LCA1MDY2MywgNTA2NzksIDUwNjk1LCA1MDcxMSwgNTA3MjcsIDUwNzQzLCAKLSAgICA1MDc1OSwgNTA3NzUsIDUwNzkxLCA1MDgwNywgNTA4MjMsIDUwODM5LCA1MDg1NSwgNTA4NzEsIDUwODg3LCA1MDkwMywgCi0gICAgNTA5MTksIDUwOTM1LCA1MDk1MSwgNTA5NjcsIDUwOTgzLCA1MDk5OSwgNTEwMTUsIDUxMDMxLCA1MTA0NywgNTEwNjMsIAotICAgIDUxMDc5LCA1MTA5NSwgNTExMTEsIDUxMTI3LCA1MTE0MywgNTExNTksIDUxMTc1LCA1MTE5MSwgNTEyMDcsIDUxMjIzLCAKLSAgICA1MTIzOSwgNTEyNTUsIDUxMjcxLCA1MTI4NywgNTEzMDMsIDUxMzE5LCA1MTMzNSwgNTEzNTEsIDUxMzY3LCA1MTM4MywgCi0gICAgNTEzOTksIDUxNDE1LCA1MTQzMSwgNTE0NDcsIDUxNDYzLCA1MTQ3OSwgNTE0OTUsIDUxNTExLCA1MTUyNywgNTE1NDMsIAotICAgIDUxNTU5LCA1MTU3NSwgNTE1OTEsIDUxNjA3LCA1MTYyMywgNTE2MzksIDUxNjU1LCA1MTY3MSwgNTE2ODcsIDUxNzAzLCAKLSAgICA1MTcxOSwgNTE3MzUsIDUxNzUxLCA1MTc2NywgNTE3ODMsIDUxNzk5LCA1MTgxNSwgNTE4MzEsIDUxODQ3LCA1MTg2MywgCi0gICAgNTE4NzksIDUxODk1LCA1MTkxMSwgNTE5MjcsIDUxOTQzLCA1MTk1OSwgNTE5NzUsIDUxOTkxLCA1MjAwNywgNTIwMjMsIAotICAgIDUyMDM5LCA1MjA1NSwgNTIwNzEsIDUyMDg3LCA1MjEwMywgNTIxMTksIDUyMTM1LCA1MjE1MSwgNTIxNjcsIDUyMTgzLCAKLSAgICA1MjE5OSwgNTIyMTUsIDUyMjMxLCA1MjI0NywgNTIyNjMsIDUyMjc5LCA1MjI5NSwgNTIzMTEsIDUyMzI3LCA1MjM0MywgCi0gICAgNTIzNTksIDUyMzc1LCA1MjM5MSwgNTI0MDcsIDUyNDIzLCA1MjQzOSwgNTI0NTUsIDUyNDcxLCA1MjQ4NywgNTI1MDMsIAotICAgIDUyNTE5LCA1MjUzNSwgNTI1NTEsIDUyNTY3LCA1MjU4MywgNTI1OTksIDUyNjE1LCA1MjYzMSwgNTI2NDcsIDUyNjYzLCAKLSAgICA1MjY3OSwgNTI2OTUsIDUyNzExLCA1MjcyNywgNTI3NDMsIDUyNzU5LCA1Mjc3NSwgNTI3OTEsIDUyODA3LCA1MjgyMywgCi0gICAgNTI4MzksIDUyODU1LCA1Mjg3MSwgNTI4ODcsIDUyOTAzLCA1MjkxOSwgNTI5MzUsIDUyOTUxLCA1Mjk2NywgNTI5ODMsIAotICAgIDUyOTk5LCA1MzAxNSwgNTMwMzEsIDUzMDQ3LCA1MzA2MywgNTMwNzksIDUzMDk1LCA1MzExMSwgNTMxMjcsIDUzMTQzLCAKLSAgICA1MzE1OSwgNTMxNzUsIDUzMTkxLCA1MzIwNywgNTMyMjMsIDUzMjM5LCA1MzI1NSwgNTMyNzEsIDUzMjg3LCA1MzMwMywgCi0gICAgNTMzMTksIDUzMzM1LCA1MzM1MSwgNTMzNjcsIDUzMzgzLCA1MzM5OSwgNTM0MTUsIDUzNDMxLCA1MzQ0NywgNTM0NjMsIAotICAgIDUzNDc5LCA1MzQ5NSwgNTM1MTEsIDUzNTI3LCA1MzU0MywgNTM1NTksIDUzNTc1LCA1MzU5MSwgNTM2MDcsIDUzNjIzLCAKLSAgICA1MzYzOSwgNTM2NTUsIDUzNjcxLCA1MzY4NywgNTM3MDMsIDUzNzE5LCA1MzczNSwgNTM3NTEsIDUzNzY3LCA1Mzc4MywgCi0gICAgNTM3OTksIDUzODE1LCA1MzgzMSwgNTM4NDcsIDUzODYzLCA1Mzg3OSwgNTM4OTUsIDUzOTExLCA1MzkyNywgNTM5NDMsIAotICAgIDUzOTU5LCA1Mzk3NSwgNTM5OTEsIDU0MDA3LCA1NDAyMywgNTQwMzksIDU0MDU1LCA1NDA3MSwgNTQwODcsIDU0MTAzLCAKLSAgICA1NDExOSwgNTQxMzUsIDU0MTUxLCA1NDE2NywgNTQxODMsIDU0MTk5LCA1NDIxNSwgNTQyMzEsIDU0MjQ3LCA1NDI2MywgCi0gICAgNTQyNzksIDU0Mjk1LCA1NDMxMSwgNTQzMjcsIDU0MzQzLCA1NDM1OSwgNTQzNzUsIDU0MzkxLCA1NDQwNywgNTQ0MjMsIAotICAgIDU0NDM5LCA1NDQ1NSwgNTQ0NzEsIDU0NDg3LCA1NDUwMywgNTQ1MTksIDU0NTM1LCA1NDU1MSwgNTQ1NjcsIDU0NTgzLCAKLSAgICA1NDU5OSwgNTQ2MTUsIDU0NjMxLCA1NDY0NywgNTQ2NjMsIDU0Njc5LCA1NDY5NSwgNTQ3MTEsIDU0NzI3LCA1NDc0MywgCi0gICAgNTQ3NTksIDU0Nzc1LCA1NDc5MSwgNTQ4MDcsIDU0ODIzLCA1NDgzOSwgNTQ4NTUsIDU0ODcxLCA1NDg4NywgNTQ5MDMsIAotICAgIDU0OTE5LCA1NDkzNSwgNTQ5NTEsIDU0OTY3LCA1NDk4MywgNTQ5OTksIDU1MDE1LCA1NTAzMSwgNTUwNDcsIDU1MDYzLCAKLSAgICA1NTA3OSwgNTUwOTUsIDU1MTExLCA1NTEyNywgNTUxNDMsIDU1MTU5LCA1NTE3NSwgNTUxOTEsIDU1MjA3LCA1NTIyMywgCi0gICAgNTUyMzksIDU1MjU1LCA1NTI3MSwgNTUyODcsIDU1MzAzLCA1NTMxOSwgNTUzMzUsIDU1MzUxLCA1NTM2NywgNTUzODMsIAotICAgIDU1Mzk5LCA1NTQxNSwgNTU0MzEsIDU1NDQ3LCA1NTQ2MywgNTU0NzksIDU1NDk1LCA1NTUxMSwgNTU1MjcsIDU1NTQzLCAKLSAgICA1NTU1OSwgNTU1NzUsIDU1NTkxLCA1NTYwNywgNTU2MjMsIDU1NjM5LCA1NTY1NSwgNTU2NzEsIDU1Njg3LCA1NTcwMywgCi0gICAgNTU3MTksIDU1NzM1LCA1NTc1MSwgNTU3NjcsIDU1NzgzLCA1NTc5OSwgNTU4MTUsIDU1ODMxLCA1NTg0NywgNTU4NjMsIAotICAgIDU1ODc5LCA1NTg5NSwgNTU5MTEsIDU1OTI3LCA1NTk0MywgNTU5NTksIDU1OTc1LCA1NTk5MSwgNTYwMDcsIDU2MDIzLCAKLSAgICA1NjAzOSwgNTYwNTUsIDU2MDcxLCA1NjA4NywgNTYxMDMsIDU2MTE5LCA1NjEzNSwgNTYxNTEsIDU2MTY3LCA1NjE4MywgCi0gICAgNTYxOTksIDU2MjE1LCA1NjIzMSwgNTYyNDcsIDU2MjYzLCA1NjI3OSwgNTYyOTUsIDU2MzExLCA1NjMyNywgNTYzNDMsIAotICAgIDU2MzU5LCA1NjM3NSwgNTYzOTEsIDU2NDA3LCA1NjQyMywgNTY0MzksIDU2NDU1LCA1NjQ3MSwgNTY0ODcsIDU2NTAzLCAKLSAgICA1NjUxOSwgNTY1MzUsIDU2NTUxLCA1NjU2NywgNTY1ODMsIDU2NTk5LCA1NjYxNSwgNTY2MzEsIDU2NjQ3LCA1NjY2MywgCi0gICAgNTY2NzksIDU2Njk1LCA1NjcxMSwgNTY3MjcsIDU2NzQzLCA1Njc1OSwgNTY3NzUsIDU2NzkxLCA1NjgwNywgNTY4MjMsIAotICAgIDU2ODM5LCA1Njg1NSwgNTY4NzEsIDU2ODg3LCA1NjkwMywgNTY5MTksIDU2OTM1LCA1Njk1MSwgNTY5NjcsIDU2OTgzLCAKLSAgICA1Njk5OSwgNTcwMTUsIDU3MDMxLCA1NzA0NywgNTcwNjMsIDU3MDc5LCA1NzA5NSwgNTcxMTEsIDU3MTI3LCA1NzE0MywgCi0gICAgNTcxNTksIDU3MTc1LCA1NzE5MSwgNTcyMDcsIDU3MjIzLCA1NzIzOSwgNTcyNTUsIDU3MjcxLCA1NzI4NywgNTczMDMsIAotICAgIDU3MzE5LCA1NzMzNSwgNTczNTEsIDU3MzY3LCA1NzM4MywgNTczOTksIDU3NDE1LCA1NzQzMSwgNTc0NDcsIDU3NDYzLCAKLSAgICA1NzQ3OSwgNTc0OTUsIDU3NTExLCA1NzUyNywgNTc1NDMsIDU3NTU5LCA1NzU3NSwgNTc1OTEsIDU3NjA3LCA1NzYyMywgCi0gICAgNTc2MzksIDU3NjU1LCA1NzY3MSwgNTc2ODcsIDU3NzAzLCA1NzcxOSwgNTc3MzUsIDU3NzUxLCA1Nzc2NywgNTc3ODMsIAotICAgIDU3Nzk5LCA1NzgxNSwgNTc4MzEsIDU3ODQ3LCA1Nzg2MywgNTc4NzksIDU3ODk1LCA1NzkxMSwgNTc5MjcsIDU3OTQzLCAKLSAgICA1Nzk1OSwgNTc5NzUsIDU3OTkxLCA1ODAwNywgNTgwMjMsIDU4MDM5LCA1ODA1NSwgNTgwNzEsIDU4MDg3LCA1ODEwMywgCi0gICAgNTgxMTksIDU4MTM1LCA1ODE1MSwgNTgxNjcsIDU4MTgyLCAxNjc0OSwgNTgxOTEsIDU4MTk3LCA1ODIwMywgNTgyMTMsIAotICAgIDU4MjIxLCAxNDg4MSwgMTU0MzIsIDk5NTMsIDU4MjM0LCAxNTIwLCA1ODI0MiwgMzc2MSwgMjc0MTUsIDcxODMsIDU4MjQ4LCAKLSAgICA1ODI1MywgNTgyNTgsIDU4MjYzLCA1ODI2OCwgNTgyNzQsIDU4Mjc5LCA1ODI4NSwgNTgyOTAsIDU4Mjk2LCA1ODMwMSwgCi0gICAgNTgzMDYsIDU4MzExLCA1ODMxNiwgNTgzMjIsIDU4MzI3LCA1ODMzMiwgNTgzMzcsIDU4MzQyLCA1ODM0NywgNTgzNTIsIAotICAgIDU4MzU3LCA1ODM2MywgNTgzNjgsIDU4Mzc0LCA1ODM4MSwgMjU2MSwgNTgzODYsIDU4MzkyLCA4NTI2LCA1ODM5NiwgCi0gICAgNTg0MDEsIDU4NDA4LCA1ODQxNiwgNDAsIDU4NDIwLCA1ODQyNiwgNTg0MzEsIDU4NDM2LCA1ODQ0MCwgNTg0NDUsIDU4NDQ5LCAKLSAgICA1ODQ1MywgMTA2NzcsIDU4NDU3LCA1ODQ2NywgNTg0ODAsIDU4NDkxLCA1ODUwNCwgNTg1MTEsIDU4NTE3LCA1ODUyMiwgCi0gICAgNTg1MjgsIDU4NTM0LCA1ODU0MCwgNTg1NDUsIDU4NTUwLCA1ODU1NSwgNTg1NjAsIDU4NTY0LCA1ODU2OSwgNTg1NzQsIAotICAgIDU4NTc5LCA1ODU4NSwgNTg1OTEsIDU4NTk3LCA1ODYwMiwgNTg2MDYsIDU4NjExLCA1ODYxNiwgNTg2MjAsIDU4NjI1LCAKLSAgICA1ODYzMCwgNTg2MzUsIDU4NjM5LCAxMDY5MywgMTA3MDQsIDEwNzA5LCAxNTYzLCA1ODY0MywgMTU2OCwgNTg2NDksIAotICAgIDE2MjI2LCA1ODY1MiwgNTg2NTgsIDE1OTksIDU4NjY0LCAxNjA1LCAxNjExLCAxMDczOSwgNTg2NjksIDU4Njc3LCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4Njk0LCA1ODY5OSwgMzA5NTIsIDU4NzA0LCA1ODcxMSwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgMTYxNiwgCi0gICAgMTYzMTgsIDU4NzMzLCA1ODczNywgMTYzMjksIDExMjAsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCAxNjM1NCwgCi0gICAgMTYyMCwgMzczMjEsIDU4NzYwLCA1ODc2NSwgNTg3NzUsIDU4Nzg0LCA1ODc4OSwgNTg3OTMsIDU4Nzk5LCAxNjI1LCAKLSAgICAzOTIzMCwgNTg4MDQsIDU4ODEzLCA1ODgxOSwgNTg4MjQsIDEwODk3LCAxMDkwMywgNTg4MzAsIDU4ODQyLCA1ODg1OSwgCi0gICAgNTg4NzYsIDU4ODkzLCA1ODkxMCwgNTg5MjcsIDU4OTQ0LCA1ODk2MSwgNTg5NzgsIDU4OTk1LCA1OTAxMiwgNTkwMjksIAotICAgIDU5MDQ2LCA1OTA2MywgNTkwODAsIDU5MDk3LCA1OTExNCwgNTkxMzEsIDU5MTQ4LCA1OTE2NSwgNTkxODIsIDU5MTk5LCAKLSAgICA1OTIxNiwgNTkyMzMsIDU5MjUwLCA1OTI2NywgNTkyODQsIDU5MzAxLCA1OTMxOCwgNTkzMzUsIDU5MzUyLCA1OTM2OSwgCi0gICAgNTkzODYsIDU5NDAzLCA1OTQyMCwgNTk0MzcsIDU5NDU0LCA1OTQ3MSwgNTk0ODgsIDU5NTA1LCA1OTUyMiwgNTk1MzksIAotICAgIDU5NTU2LCA1OTU3MywgNTk1OTAsIDU5NjA3LCA1OTYyNCwgNTk2NDEsIDU5NjU4LCA1OTY3NSwgNTk2ODYsIDU5NjkxLCAKLSAgICAxNjMwLCA1OTY5NSwgNTk3MDEsIDU5NzA2LCA1OTcxMSwgOTMxOSwgMTYzNSwgNTk3MTcsIDU5NzI2LCAyNzcxMCwgNTk3MzEsIAotICAgIDU5NzQyLCA1OTc1MiwgNTk3NTcsIDU5NzY0LCA1OTc3MCwgNTk3NzUsIDU5NzgwLCAxNjYwNiwgNTk3ODQsIDEwOTE0LCAKLSAgICAxNjQwLCAxMDkxOSwgNTk3OTAsIDU5Nzk1LCA1OTgwMSwgNTk4MDYsIDU5ODExLCA1OTgxNiwgNTk4MjEsIDU5ODI2LCAKLSAgICA1OTgzMSwgNTk4MzYsIDU5ODQyLCA1OTg0OCwgNTk4NTQsIDU5ODU5LCA1OTg2MywgNTk4NjgsIDU5ODczLCA1OTg3NywgCi0gICAgNTk4ODIsIDU5ODg3LCA1OTg5MiwgNTk4OTYsIDU5OTAxLCA1OTkwNywgNTk5MTIsIDU5OTE3LCA1OTkyMSwgNTk5MjYsIAotICAgIDU5OTMxLCA1OTkzNywgNTk5NDIsIDU5OTQ3LCA1OTk1MywgNTk5NTksIDU5OTY0LCA1OTk2OCwgNTk5NzMsIDU5OTc4LCAKLSAgICA1OTk4MywgNTk5ODcsIDU5OTkyLCA1OTk5NywgNjAwMDIsIDYwMDA4LCA2MDAxNCwgNjAwMTksIDYwMDIzLCA2MDAyNywgCi0gICAgNjAwMzIsIDYwMDM3LCA2MDA0MiwgMjkxMDgsIDYwMDQ2LCA2MDA1MSwgNjAwNTYsIDYwMDYyLCA2MDA2NywgNjAwNzIsIAotICAgIDYwMDc2LCA2MDA4MSwgNjAwODYsIDYwMDkyLCA2MDA5NywgNjAxMDIsIDYwMTA4LCA2MDExNCwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyOCwgNjAxMzMsIDYwMTM3LCA2MDE0MiwgNjAxNDcsIDYwMTUyLCA2MDE1OCwgNjAxNjQsIDYwMTY5LCA2MDE3MywgCi0gICAgNjAxNzgsIDYwMTgzLCA2MDE4NywgNjAxOTIsIDYwMTk3LCA2MDIwMiwgNjAyMDYsIDYwMjA5LCAzMTYxNCwgNjAyMTQsIAotICAgIDYwMjIyLCAxNjY3MiwgMzY2MywgMTEwMTAsIDYwMjI4LCA2MDIzOCwgNjAyNTMsIDExMDE1LCA2MDI2NCwgNjAyNjksIAotICAgIDYwMjgwLCA2MDI5MiwgNjAzMDQsIDYwMzE2LCAyNjk1LCA2MDMyOCwgNjAzMzMsIDYwMzQ1LCA2MDM0OSwgNjAzNTUsIAotICAgIDYwMzYxLCA2MDM2NiwgMTY1MiwgMTA2NywgNjAzNzUsIDYwMzgwLCAzOTI4MCwgNjAzODQsIDYwMzg4LCA2MDM5MywgCi0gICAgNjAzOTcsIDE2NzU3LCA2MDQwMiwgNjA0MDUsIDYwNDEzLCA2MDQyMSwgMTY1NiwgMTEwNDAsIDExMDQ2LCAxNjYxLCAKLSAgICA2MDQyOSwgNjA0MzYsIDYwNDQxLCA2MDQ1MCwgNjA0NjAsIDYwNDY3LCA2MDQ3MiwgNjA0NzcsIDE2NjYsIDYwNDg0LCAKLSAgICA2MDQ4OSwgMTY4NzIsIDYwNDkzLCA2MDQ5OCwgNjA1MDUsIDYwNTExLCA2MDUxNSwgNjA1MjYsIDYwNTM2LCAxNjg5NCwgCi0gICAgOTIyNywgOTIzNCwgMTY3MSwgNjA1NDMsIDYwNTQ5LCA2MDU1NywgNjA1NjQsIDYwNTcwLCA2MDU3NywgNjA1ODksIDYwNTk1LCAKLSAgICA2MDYwMCwgNjA2MTIsIDYwNjIzLCA2MDYzMiwgNjA2NDIsIDM3NDAsIDMwNzg4LCAzMDc5NywgMTY5MzQsIDE2NzYsIDE2ODAsIAotICAgIDYwNjUwLCA2MDY2MSwgNjA2NjYsIDE2ODMsIDYwNjc0LCA2MDY3OSwgMTY5ODUsIDYwNjkxLCA2MDY5NywgNjA3MDIsIAotICAgIDYwNzEwLCAxNjg4LCA2MDcxNSwgNjA3MjAsIDYwNzI4LCA2MDczNiwgNjA3NDMsIDYwNzUyLCA2MDc2MCwgNjA3NjksIAotICAgIDE2OTMsIDYwNzczLCAxNjk4LCA2MDc3OCwgNjA3ODUsIDE3MDU5LCA2MDc5MywgNjA3OTksIDYwODA0LCA2MDgxMiwgCi0gICAgNjA4MTksIDYwODI3LCAyMjU1NywgNjA4MzIsIDExMTc1LCA2MDg0MSwgNjA4NDcsIDYwODU0LCA2MDg2MSwgNjA4NjcsIAotICAgIDYwODc3LCA2MDg4MywgNjA4ODgsIDYwODk5LCA2MDkwNCwgNjA5MTIsIDExMTg0LCAxMTE4OSwgNjA5MjAsIDYwOTI2LCAKLSAgICA2MDkzNCwgMzgwNSwgMTcxMDEsIDM5MzY4LCA2MDkzOSwgNjA5NDUsIDYwOTUwLCA2MDk1OCwgNjA5NjUsIDEyMDI5LCAKLSAgICA2MDk3MCwgNjA5NzYsIDE3MDksIDYwOTgxLCA2MDk4NCwgMTEyNywgNjA5OTAsIDYwOTk1LCA2MTAwMCwgNjEwMDYsIAotICAgIDYxMDExLCA2MTAxNiwgNjEwMjEsIDYxMDI2LCA2MTAzMSwgNjEwMzYsIDE3MTgsIDksIDYxMDQyLCA2MTA0NiwgNjEwNTEsIAotICAgIDYxMDU1LCA2MTA1OSwgNjEwNjMsIDMxODU0LCA2MTA2OCwgNjEwNzMsIDYxMDc4LCA2MTA4MiwgNjEwODUsIDYxMDg5LCAKLSAgICA2MTA5MywgNjEwOTgsIDYxMTAyLCA2MTEwNywgNjExMTEsIDM0NTkxLCAzNDU5NiwgMzQ2MDEsIDYxMTE0LCA2MTEyMSwgCi0gICAgNjExMjcsIDM5MDg5LCA2MTEzNywgMzQ2MDcsIDMyMTEyLCAzMTg2OSwgMzE4NzUsIDM0NjIzLCAzMTg4MSwgNjExNDIsIAotICAgIDYxMTQ3LCAzMjE0NSwgNjExNTEsIDYxMTU0LCA2MTE1OCwgNjExNjUsIDYxMTY4LCA2MTE3MywgNjExNzcsIDYxMTgxLCAKLSAgICA2MTE4NCwgNjExOTQsIDYxMjA2LCA2MTIxMywgNjEyMTksIDYxMjI2LCAzMzU0OCwgNjEyMjksIDg1NDMsIDg3NywgNjEyMzIsIAotICAgIDYxMjM2LCA2MTI0MSwgMzY5MCwgNjEyNDUsIDYxMjQ4LCAxMzYyNSwgNjEyNTUsIDYxMjYyLCA2MTI3NSwgNjEyODMsIAotICAgIDYxMjkyLCA2MTMwMSwgNjEzMDYsIDYxMzE2LCA2MTMyOSwgNjEzNDEsIDYxMzQ4LCA2MTM1MywgNjEzNjIsIDYxMzc1LCAKLSAgICAzNjAzNSwgNjEzOTMsIDYxMzk4LCA2MTQwNSwgNjE0MTEsIDY1MiwgNjE0MTYsIDYxNDI0LCA2MTQzMSwgMjcyNTQsIDYyNywgCi0gICAgNjE0MzcsIDYxNDQzLCA2MTQ1MywgNjE0NTksIDYxNDY0LCAzMTg5OSwgNjAwMywgMzE5MTMsIDYxNDY4LCA2MTQ3OCwgCi0gICAgNjE0ODMsIDYxNDkzLCA2MTUwOCwgNjE1MTQsIDYxNTIwLCAzMTkyMywgNjE1MjUsIDMxMDY5LCA2MTUyOSwgNjE1MzQsIAotICAgIDYxNTM5LCA2MTU0MywgNjE1NDgsIDE2OTM3LCA2MTU1NSwgNjE1NjAsIDYxNTY0LCA2MDQ0LCAzMTk0OSwgNjE1NjgsIAotICAgIDYxNTc0LCAzMTIsIDYxNTg0LCA2MTU5MSwgNjE1OTgsIDYxNjAzLCA2MTYxMiwgNTg3NjksIDYxNjE4LCA2MTYyNiwgCi0gICAgNjE2MzAsIDYxNjM0LCA2MTYzOCwgNjE2NDIsIDYxNjQ3LCA2MTY1MSwgNjE2NTcsIDYxNjY1LCA2MTY3MCwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4NCwgNjE2ODgsIDYxNjkyLCA2MTY5OCwgNjE3MDQsIDYxNzA5LCA2MTcxMywgMzIwNzMsIDYxNzE4LCAKLSAgICAzMjA3OSwgMzIwODUsIDYxNzIzLCA2MTcyOSwgNjE3MzYsIDYxNzQxLCA2MTc0NSwgMzEwODYsIDE2NTk5LCA2MTc0OCwgCi0gICAgNjE3NTIsIDYxNzU3LCA2MTc2NCwgNjE3NzAsIDYxNzc0LCA2MTc3OSwgMzg3OTksIDYxNzg1LCA2MTc4OSwgNjE3OTMsIAotICAgIDYxNzk4LCA2MTgwNCwgNjE4MTAsIDYxODIyLCA2MTgzMSwgNjE4NDEsIDYxODQ3LCA2MTg1NCwgNjE4NTksIDYxODY0LCAKLSAgICA2MTg2OCwgNjE4NzEsIDYxODc3LCA2MTg4NCwgNjE4ODksIDYxODk0LCA2MTkwMSwgNjE5MDgsIDYxOTE0LCA2MTkxOSwgCi0gICAgNjE5MjQsIDYxOTMyLCAzMjA5MCwgMjQyMywgNjE5MzcsIDYxOTQyLCA2MTk0OCwgNjE5NTMsIDYxOTU5LCA2MTk2NCwgCi0gICAgNjE5NjksIDYxOTc0LCA2MTk4MCwgMzIxMTEsIDYxOTg1LCA2MTk5MSwgNjE5OTcsIDYyMDAzLCAzMjE3NSwgNjIwMDgsIAotICAgIDYyMDEzLCA2MjAxOCwgMzIxODYsIDYyMDIzLCA2MjAyOCwgNjIwMzMsIDYyMDM5LCA2MjA0NSwgMzIxOTEsIDYyMDUwLCAKLSAgICA2MjA1NSwgNjIwNjAsIDMyMjQ2LCAzMjI1MiwgNjIwNjUsIDYyMDcwLCAzMjI1NywgNjIwNzUsIDI3OTM3LCAzMjI3OSwgCi0gICAgMzIyODMsIDYyMDgwLCA2MjA1NiwgNjIwODQsIDYyMDkyLCA2MjA5OCwgNjIxMDYsIDYyMTEzLCA2MjExOSwgNjIxMjksIAotICAgIDYyMTM1LCA2MjE0MiwgMTA2MjQsIDMyMjk3LCA2MjE0OCwgNjIxNjEsIDYyMTcwLCA2MjE3NiwgNjIxODUsIDYyMTkxLCAKLSAgICAyMzQ5NSwgNjIxOTgsIDYyMjA1LCA2MjIxNSwgMzIyNDcsIDYyMjE4LCA2MjIyNSwgNjIyMzAsIDYyMjM0LCA2MjIzOCwgCi0gICAgNjIyNDMsIDYxMjAsIDYyMjQ3LCA2MjI1MiwgNjIyNTcsIDM0Njg1LCAzNDY5MCwgNjIyNjEsIDM0NzA0LCA2MjI2NiwgCi0gICAgMzQ3MDksIDYyMjcxLCA2MjI3NywgMzQ3MjEsIDM0NzI3LCAzNDczMywgNjIyODIsIDYyMjg4LCAyMjUyMiwgNjIyOTksIAotICAgIDYyMzAyLCA2MjMxNCwgNjIzMjIsIDMyMzIwLCA2MjMyNiwgNjIzMzUsIDYyMzQ1LCA2MjM1NCwgMzIzMzAsIDYyMzU5LCAKLSAgICA2MjM2NiwgNjIzNzUsIDYyMzgxLCA2MjM4OSwgNjIzOTYsIDYwOTUsIDQzOTcsIDYyNDAxLCAzMjI1OCwgNjI0MDcsIAotICAgIDYyNDEwLCA2MjQxNiwgNjI0MjMsIDYyNDI4LCA2MjQzMywgMjM0MDUsIDYyNDM3LCA2MjQ0MywgNjI0NDksIDYyNDU0LCAKLSAgICA2MjQ1OSwgNjI0NjMsIDYyNDY5LCA2MjQ3NSwgMzM0NTgsIDg2MywgMzU2OTgsIDM2NjE5LCAzNjYyNSwgMzIzNjYsIAotICAgIDYyNDgwLCA2MjQ4NCwgNjI0ODgsIDYyNDkxLCA2MjUwNCwgNjI1MTAsIDYyNTE0LCA2MjUxNywgNjI1MjIsIDMzNzYxLCAKLSAgICA2MjUyNiwgMzEwOTEsIDIxMjc0LCA2MjUzMiwgNjAyNCwgNjAzMiwgOTA2OCwgNjI1MzUsIDYyNTQwLCA2MjU0NSwgNjI1NTAsIAotICAgIDYyNTU1LCA2MjU2MCwgNjI1NjUsIDYyNTcwLCA2MjU3NSwgNjI1ODAsIDYyNTg2LCA2MjU5MSwgNjI1OTYsIDYyNjAyLCAKLSAgICA2MjYwNywgNjI2MTIsIDYyNjE3LCA2MjYyMiwgNjI2MjcsIDYyNjMyLCA2MjYzOCwgNjI2NDMsIDYyNjQ5LCA2MjY1NCwgCi0gICAgNjI2NTksIDYyNjY0LCA2MjY2OSwgNjI2NzQsIDYyNjc5LCA2MjY4NCwgNjI2ODksIDYyNjk0LCA2MjY5OSwgNjI3MDUsIAotICAgIDYyNzEwLCA2MjcxNSwgNjI3MjAsIDYyNzI1LCA2MjczMCwgNjI3MzUsIDYyNzQxLCA2Mjc0NiwgNjI3NTEsIDYyNzU2LCAKLSAgICA2Mjc2MSwgNjI3NjYsIDYyNzcxLCA2Mjc3NiwgNjI3ODEsIDYyNzg2LCA2Mjc5MiwgNjI3OTcsIDYyODAyLCA2MjgwNywgCi0gICAgNjI4MTIsIDYyODE4LCA2MjgyNCwgNjI4MjksIDYyODM1LCA2Mjg0MCwgNjI4NDUsIDYyODUwLCA2Mjg1NSwgNjI4NjAsIAotICAgIDE1MTMsIDI0NSwgNjI4NjUsIDYyODY5LCA2Mjg3MywgNjI4NzcsIDI1MTE2LCA2Mjg4MSwgNjI4ODUsIDYyODkwLCA2Mjg5NCwgCi0gICAgNjI4OTksIDYyOTAzLCA2MjkwOCwgNjI5MTMsIDYyOTE4LCA2MjkyMiwgNjI5MjYsIDYyOTMxLCA2MjkzNSwgMTMzNjIsIAotICAgIDYyOTQwLCA2Mjk0NCwgNjI5NTEsIDYyOTYxLCAxNTE5MywgNjI5NzAsIDYyOTc5LCA2Mjk4MywgNjI5ODgsIDYyOTkzLCAKLSAgICA2Mjk5NywgMjQ5MDcsIDMwMTksIDYzMDAxLCAxNzM1MCwgNjMwMDcsIDYzMDE2LCA2MzAyNCwgNjMwMzAsIDYzMDQyLCAKLSAgICA2MzA1NCwgNjMwNTgsIDYzMDYzLCA2MzA2NywgNjMwNzMsIDYzMDc5LCA2MzA4NCwgNjMwOTQsIDYzMTA0LCA2MzExMCwgCi0gICAgNjMxMTUsIDYzMTE5LCA2MzEyNCwgNjMxMzAsIDYzMTM5LCA2MzE0OCwgNjMxNTYsIDE1NTQ3LCA2MzE2MCwgNjMxNjksIAotICAgIDYzMTc3LCA2MzE4OSwgNjMyMDAsIDYzMjExLCA2MzIyMCwgNjMyMjQsIDYzMjMzLCA2MzI0MywgNjMyNTEsIDYzMjU3LCAKLSAgICA2MzI2MiwgNjMyNjgsIDYzMjczLCA5OCwgMzA5MDAsIDYzMjg0LCAyNjI0OSwgMjYyNTksIDYzMjkwLCA2MzI5NywgNjMzMDMsIAotICAgIDYzMzA3LCA2MzMxNywgNjMzMjgsIDYzMzM2LCA2MzM0NSwgNjMzNTAsIDYzMzU1LCA2MzM1OSwgMTczMDQsIDYzMzY3LCAKLSAgICA2MzM3MSwgNjMzNzcsIDYzMzg3LCA2MzM5NCwgNjM0MDAsIDM0Nzg0LCA2MzQwNiwgNjM0MDgsIDYzNDExLCA2MzQxNSwgCi0gICAgNjM0MjUsIDYzNDMxLCA2MzQzOCwgMTMzMDgsIDYzNDQ1LCA2MzQ1MSwgNjM0NjAsIDYzNDY5LCA2MzQ3NSwgNjM0ODEsIAotICAgIDYzNDg3LCA2MzQ5MiwgNjM0OTksIDYzNTA2LCA2MzUxMiwgNjM1MjUsIDYzNTM0LCA2MzU0MywgNjM1NDgsIDYzNTUyLCAKLSAgICA2MzU1OCwgNjM1NjUsIDYzNTcyLCA2MzU3OSwgNjM1ODYsIDYzNTkzLCA2MzU5OCwgNjM2MDIsIDYzNjA2LCA2MzYwOSwgCi0gICAgNjM2MTksIDYzNjIzLCA2MzYzNSwgNjM2NDQsIDYzNjQ4LCA2MzY1MywgNjM2NTcsIDYzNjYzLCA2MzY2OCwgNjM2NzUsIAotICAgIDYzNjg0LCA2MzY5MiwgNjM3MDAsIDYzNzA1LCA2MzcwOSwgNjM3MTQsIDYzNzE5LCA2MzcyOSwgNjM3MzcsIDYzNzQyLCAKLSAgICA2Mzc0NiwgNjM3NTAsIDYzNzU2LCA2Mzc2OCwgNjM3NzYsIDYzNzg2LCA2Mzc5MywgNjM3OTksIDYzODA0LCA2MzgwOCwgCi0gICAgNjM4MTIsIDYzODE2LCA2MzgyNSwgNjM4MzQsIDYzODQzLCA2Mzg0OSwgNjM4NTUsIDYzODYxLCA2Mzg2NiwgNjM4NzMsIAotICAgIDYzODc5LCA2Mzg4NywgNjM4OTQsIDEyNDU2LCA2MzkwMCwgNjM5MDYsIDYzOTEwLCAxNDIzMSwgNjM5MTQsIDYzOTE5LCAKLSAgICA2MzkyOSwgNjM5MzgsIDYzOTQ0LCA2Mzk1MCwgNjM5NTgsIDYzOTY1LCA2Mzk2OSwgNjM5NzMsIDYzOTc5LCA2Mzk4NywgCi0gICAgNjM5OTQsIDY0MDAwLCA2NDAxMSwgNjQwMTUsIDY0MDE5LCA2NDAyMywgNjQwMjYsIDY0MDMyLCA2NDAzNywgNjQwNDEsIAotICAgIDY0MDQ1LCA2NDA1NCwgNjQwNjIsIDY0MDY5LCA2NDA3NSwgNjQwODIsIDI0MDI5LCAzODg0MSwgNjQwODcsIDY0MDk1LCAKLSAgICA2NDA5OSwgNjQxMDMsIDY0MTA2LCA2NDExNCwgNjQxMjEsIDY0MTI3LCA2NDEzNiwgNjQxNDQsIDY0MTUwLCA2NDE1NSwgCi0gICAgNjQxNTksIDY0MTY0LCA2NDE2OCwgNjQxNzIsIDY0MTc3LCA2NDE4NiwgNjQxOTAsIDY0MTk3LCA2NDIwNCwgNjQyMTAsIAotICAgIDY0MjE4LCA2NDIyNCwgNjQyMzUsIDY0MjQzLCA2NDI0OSwgMjI2NTIsIDY0MjU4LCA2NDI2NSwgNjQyNzIsIDY0Mjc5LCAKLSAgICA2NDI4NiwgNjQyOTMsIDQxODcwLCAxMzE0NiwgNjQzMDAsIDY0MzA3LCA2NDMxMiwgMzQ4MjAsIDYyMTcsIDY0MzE4LCAKLSAgICA2NDMyMywgNjQzMjgsIDY0MzM0LCA2NDM0MCwgNjQzNDYsIDY0MzUxLCA2NDM1NiwgNjQzNjEsIDY0MzY2LCA2NDM3MiwgCi0gICAgNjQzNzcsIDY0MzgzLCA2NDM4OCwgNjQzOTQsIDY0Mzk5LCA2NDQwNCwgNjQ0MDksIDY0NDE0LCA2NDQxOSwgNjQ0MjQsIAotICAgIDY0NDI5LCA2NDQzNSwgNjQ0NDAsIDY0NDQ2LCA2NDQ1MSwgNjQ0NTYsIDY0NDYxLCA2NDQ2NiwgNjQ0NzEsIDY0NDc2LCAKLSAgICA2NDQ4MiwgNjQ0ODcsIDY0NDkyLCA2NDQ5NywgNjQ1MDIsIDY0NTA3LCA2NDUxMiwgNjQ1MTcsIDY0NTIyLCA2NDUyNywgCi0gICAgNjQ1MzIsIDY0NTM4LCA2NDU0MywgNjQ1NDgsIDY0NTUzLCA2NDU1OCwgNjQ1NjMsIDY0NTY4LCA2NDU3MywgNjQ1NzgsIAotICAgIDY0NTg0LCA2NDU4OSwgNjQ1OTQsIDY0NTk5LCA2NDYwNCwgNjQ2MDksIDY0NjE0LCA2NDYxOSwgNjQ2MjQsIDY0NjI5LCAKLSAgICA2NDYzNCwgNjQ2MzksIDY0NjQ0LCA2NDY1MCwgMTgzNCwgMjI0LCAzNzQxNywgNjQ2NTUsIDY0NjU4LCA2NDY2MywgNjQ2NjcsIAotICAgIDY0NjcwLCA2NDY3NSwgNjM2OTYsIDY0Njg2LCA2NDY5NiwgNjQ3MDMsIDY0NzE5LCA2NDcyOCwgNjQ3MzgsIDY0NzQ4LCAKLSAgICA2NDc1NiwgNjQ3NzAsIDY0Nzc4LCA2NDc4MiwgNjQ3ODUsIDY0NzkyLCA2NDc5OCwgNjQ4MDksIDY0ODIxLCA2NDgzMiwgCi0gICAgNjQ4NDEsIDY0ODQ4LCAxMjk3LCAyMzI5NCwgNjQ4NTgsIDI1OTAsIDY0ODYyLCA2NDg3MSwgMTEzMywgMTcyNzcsIDM4MDU0LCAKLSAgICA2NDg3OSwgNjQ4ODcsIDY0OTAxLCA2NDkxNCwgNjQ5MTgsIDY0OTIzLCA2NDkyOCwgNjQ5MzMsIDY0OTM5LCA2NDk0NSwgCi0gICAgNjQ5NTAsIDg1MzUsIDY0OTU1LCA2NDk1OSwgNjQ5NjcsIDExMDQxLCA2NDk3MiwgNjQ5NzgsIDY0OTg3LCAxNzIxLCAKLSAgICAxMTA1MywgNzM2LCA2NDk5MSwgNjUwMDAsIDY1MDEwLCAyNzAxMywgNjUwMTksIDY1MDI1LCAxNjg0OSwgNjUwMzEsIAotICAgIDY1MDM1LCAzOTY0LCAxMTM4NCwgNjUwNDEsIDY1MDQ4LCA2MDY1NiwgNjUwNTIsIDY1MDU2LCAzOTg4LCAxODksIDE0MTQ2LCAKLSAgICA2NTA2MiwgNjUwNzQsIDY1MDc4LCA2NTA4NCwgMjc3MzAsIDY1MDg4LCAxMTM3MiwgMjczMCwgNCwgNjUwOTMsIDY1MTAzLCAKLSAgICA2NTEwOSwgNjUxMjAsIDY1MTI3LCA2NTEzMywgNjUxMzksIDY1MTQ3LCA2NTE1NCwgNjUxNjAsIDY1MTcwLCA2NTE4MCwgCi0gICAgNjUxOTAsIDIzNDgyLCAxMzA5LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMywgNjUyMTcsIDI3NTMsIDI3NTksIDg1MzIsIAotICAgIDIyNjQsIDY1MjIxLCA2NTIyNSwgNjUyMzQsIDY1MjQyLCA2NTI1MywgNjUyNjEsIDY1MjY5LCA2NTI3NSwgNjUyODAsIAotICAgIDY1MjkxLCA2NTMwMiwgNjUzMTAsIDY1MzE2LCA5Njg3LCA2NTMyMSwgNjUzMjksIDY1MzMzLCA2NTMzNywgNjUzNDEsIAotICAgIDY1MzUzLCAyODExNSwgNjUzNjAsIDY1MzcwLCA2NTM3NiwgNjUzODIsIDk3ODksIDY1MzkyLCA2NTQwMywgNjU0MTMsIAotICAgIDY1NDIyLCA2NTQyNiwgNjU0MzMsIDExMzUsIDExNzAsIDY1NDQzLCA2NTQ0OCwgNjU0NTYsIDY1NDY0LCA2NTQ3NSwgCi0gICAgNjU0ODIsIDY1NDk2LCAxNDA3NSwgMzkzLCA2NTUwNiwgNjU1MTAsIDY1NTE4LCA2NTUyNywgNjU1MzUsIDY1NTQxLCAKLSAgICA2NTU1NSwgNjU1NjIsIDY1NTY4LCA2NTU3NywgNjU1ODQsIDY1NTk0LCA2NTYwMiwgMzgxMiwgMTU2LCA2NTYxMCwgNjU2MjEsIAotICAgIDY1NjI1LCA2NTYzNywgMjc5MjgsIDE2MSwgNjU2NDMsIDY1NjQ4LCA2NTY1MiwgNjU2NTksIDY1NjY1LCA2NTY3MywgCi0gICAgNjU2ODAsIDg4MTgsIDY1Njg3LCA2NTY5NiwgNjU3MDQsIDM4NzgsIDY1NzE3LCA4MTk5LCA2NTcyMSwgMjc5OCwgNDUwLCAKLSAgICA2NTcyNiwgNjU3MzksIDY1NzQ0LCAxODMzLCA2NjgsIDY1NzQ4LCAzODk1LCA2NTc1NiwgNjU3NjIsIDY1NzY2LCA5MzEsIAotICAgIDY1Nzc2LCA2NTc4NSwgNjU3OTAsIDE0OTE1LCAxNDkyMiwgNDUyMzIsIDY1Nzk0LCAzODIyLCAxMzAzNCwgNjU4MDIsIAotICAgIDY1ODA5LCAyMzUzOCwgNjU4MTMsIDY1ODIwLCA2NTgyNiwgNjU4MzEsIDY1ODM2LCAxNDkzNSwgMzcyLCA2NTg0MSwgCi0gICAgNjU4NTMsIDY1ODU5LCA2NTg2NywgMjgxMCwgMTc1MywgNjU4NzUsIDY1ODc3LCA2NTg4MiwgNjU4ODcsIDY1ODkyLCAKLSAgICA2NTg5OCwgNjU5MDMsIDY1OTA4LCA2NTkxMywgNjU5MTgsIDY1OTIzLCA2NTkyOCwgNjU5MzQsIDY1OTM5LCA2NTk0NCwgCi0gICAgNjU5NDksIDY1OTU0LCA2NTk1OSwgNjU5NjQsIDY1OTY5LCA2NTk3NCwgNjU5ODAsIDY1OTg1LCA2NTk5MCwgNjU5OTUsIAotICAgIDY2MDAxLCA2NjAwNiwgNjYwMTIsIDY2MDE3LCA2NjAyMiwgNjYwMjcsIDY2MDMyLCA2NjAzNywgNjYwNDIsIDY2MDQ3LCAKLSAgICA2NjA1MywgNjYwNTgsIDY2MDY0LCA2NjA2OSwgNjYwNzQsIDY2MDc5LCA2NjA4NCwgNjYwODksIDY2MDk0LCA2NjA5OSwgCi0gICAgNjYxMDQsIDY2MTEwLCA2NjExNSwgNjYxMjAsIDY2MTI1LCA2NjEyOSwgNjYxMzMsIDY2MTM4LCA2NjE0MiwgNjYxNDcsIAotICAgIDY2MTUyLCA2NjE1OCwgNjYxNjMsIDY2MTY3LCA2NjE3MiwgNjYxNzYsIDY2MTc5LCA2NjE4MSwgNjYxODUsIDY2MTg4LCAKLSAgICA2NjE5MywgNjYxOTcsIDY2MjAxLCA2NjIwNSwgNjYyMDksIDY2MjE4LCA2NjIyMiwgMzI1MjQsIDY2MjI1LCAzMjUyOSwgCi0gICAgNjYyMzIsIDY2MjM3LCAzMjUzNCwgNjYyNDYsIDY2MjU1LCAzMjU0MCwgNjYyNjAsIDMyNTQ1LCA2NjI2OSwgNjYyNzQsIAotICAgIDExNTcxLCA2NjI3OCwgNjYyODMsIDY2Mjg4LCAzMjU1MCwgNjYyOTIsIDQwMTk2LCA2NjI5NiwgNjYyOTksIDY2MzAzLCAKLSAgICA4MjExLCA2NjMwOSwgNjYzMTQsIDY2MzE4LCAzNzA1LCAzMjU1NSwgNjYzMjEsIDY2MzI1LCA2NjMyOCwgNjYzMzMsIAotICAgIDY2MzM3LCA2NjM0MywgNjYzNTEsIDY2MzY0LCA2NjM3MywgNjYzNzksIDY2Mzg0LCA2NjM5MCwgNjYzOTQsIDY2NDAwLCAKLSAgICA2NjQwOCwgNjY0MTMsIDY2NDE3LCA2NjQyNCwgNjY0MzAsIDY2NDM4LCA2NjQ0NywgNjY0NTUsIDMyNTU4LCA2NjQ2MiwgCi0gICAgNjY0NzIsIDY2NDgxLCA2NjQ5NCwgNjY0OTksIDY2NTA0LCA2NjUxMywgNjY1MTksIDY2NTI2LCA2NjUzNywgNjY1NDksIAotICAgIDY2NTU2LCA2NjU2NSwgNjY1NzQsIDY2NTgzLCA2NjU5MCwgNjY1OTYsIDY2NjAzLCA2NjYxMSwgNjY2MTgsIDY2NjI2LCAKLSAgICA2NjYzNSwgNjY2NDMsIDY2NjUwLCA2NjY1OCwgNjY2NjcsIDY2Njc1LCA2NjY4NCwgNjY2OTQsIDY2NzAzLCA2NjcxMSwgCi0gICAgNjY3MTgsIDY2NzI2LCA2NjczNSwgNjY3NDMsIDY2NzUyLCA2Njc2MiwgNjY3NzEsIDY2Nzc5LCA2Njc4OCwgNjY3OTgsIAotICAgIDY2ODA3LCA2NjgxNywgNjY4MjgsIDY2ODM4LCA2Njg0NywgNjY4NTUsIDY2ODYyLCA2Njg3MCwgNjY4NzksIDY2ODg3LCAKLSAgICA2Njg5NiwgNjY5MDYsIDY2OTE1LCA2NjkyMywgNjY5MzIsIDY2OTQyLCA2Njk1MSwgNjY5NjEsIDY2OTcyLCA2Njk4MiwgCi0gICAgNjY5OTEsIDY2OTk5LCA2NzAwOCwgNjcwMTgsIDY3MDI3LCA2NzAzNywgNjcwNDgsIDY3MDU4LCA2NzA2NywgNjcwNzcsIAotICAgIDY3MDg4LCA2NzA5OCwgNjcxMDksIDY3MTIxLCA2NzEzMiwgNjcxNDIsIDY3MTUxLCA2NzE1OSwgNjcxNjYsIDY3MTc0LCAKLSAgICA2NzE4MywgNjcxOTEsIDY3MjAwLCA2NzIxMCwgNjcyMTksIDY3MjI3LCA2NzIzNiwgNjcyNDYsIDY3MjU1LCA2NzI2NSwgCi0gICAgNjcyNzYsIDY3Mjg2LCA2NzI5NSwgNjczMDMsIDY3MzEyLCA2NzMyMiwgNjczMzEsIDY3MzQxLCA2NzM1MiwgNjczNjIsIAotICAgIDY3MzcxLCA2NzM4MSwgNjczOTIsIDY3NDAyLCA2NzQxMywgNjc0MjUsIDY3NDM2LCA2NzQ0NiwgNjc0NTUsIDY3NDYzLCAKLSAgICA2NzQ3MiwgNjc0ODIsIDY3NDkxLCA2NzUwMSwgNjc1MTIsIDY3NTIyLCA2NzUzMSwgNjc1NDEsIDY3NTUyLCA2NzU2MiwgCi0gICAgNjc1NzMsIDY3NTg1LCA2NzU5NiwgNjc2MDYsIDY3NjE1LCA2NzYyNSwgNjc2MzYsIDY3NjQ2LCA2NzY1NywgNjc2NjksIAotICAgIDY3NjgwLCA2NzY5MCwgNjc3MDEsIDY3NzEzLCA2NzcyNCwgNjc3MzYsIDY3NzQ5LCA2Nzc2MSwgNjc3NzIsIDY3NzgyLCAKLSAgICA2Nzc5MSwgNjc3OTksIDY3ODA2LCA2NzgxNCwgNjc4MjMsIDY3ODMxLCA2Nzg0MCwgNjc4NTAsIDY3ODU5LCA2Nzg2NywgCi0gICAgNjc4NzYsIDY3ODg2LCA2Nzg5NSwgNjc5MDUsIDY3OTE2LCA2NzkyNiwgNjc5MzUsIDY3OTQzLCA2Nzk1MiwgNjc5NjIsIAotICAgIDY3OTcxLCA2Nzk4MSwgNjc5OTIsIDY4MDAyLCA2ODAxMSwgNjgwMjEsIDY4MDMyLCA2ODA0MiwgNjgwNTMsIDY4MDY1LCAKLSAgICA2ODA3NiwgNjgwODYsIDY4MDk1LCA2ODEwMywgNjgxMTIsIDY4MTIyLCA2ODEzMSwgNjgxNDEsIDY4MTUyLCA2ODE2MiwgCi0gICAgNjgxNzEsIDY4MTgxLCA2ODE5MiwgNjgyMDIsIDY4MjEzLCA2ODIyNSwgNjgyMzYsIDY4MjQ2LCA2ODI1NSwgNjgyNjUsIAotICAgIDY4Mjc2LCA2ODI4NiwgNjgyOTcsIDY4MzA5LCA2ODMyMCwgNjgzMzAsIDY4MzQxLCA2ODM1MywgNjgzNjQsIDY4Mzc2LCAKLSAgICA2ODM4OSwgNjg0MDEsIDY4NDEyLCA2ODQyMiwgNjg0MzEsIDY4NDM5LCA2ODQ0OCwgNjg0NTgsIDY4NDY3LCA2ODQ3NywgCi0gICAgNjg0ODgsIDY4NDk4LCA2ODUwNywgNjg1MTcsIDY4NTI4LCA2ODUzOCwgNjg1NDksIDY4NTYxLCA2ODU3MiwgNjg1ODIsIAotICAgIDY4NTkxLCA2ODYwMSwgNjg2MTIsIDY4NjIyLCA2ODYzMywgNjg2NDUsIDY4NjU2LCA2ODY2NiwgNjg2NzcsIDY4Njg5LCAKLSAgICA2ODcwMCwgNjg3MTIsIDY4NzI1LCA2ODczNywgNjg3NDgsIDY4NzU4LCA2ODc2NywgNjg3NzcsIDY4Nzg4LCA2ODc5OCwgCi0gICAgNjg4MDksIDY4ODIxLCA2ODgzMiwgNjg4NDIsIDY4ODUzLCA2ODg2NSwgNjg4NzYsIDY4ODg4LCA2ODkwMSwgNjg5MTMsIAotICAgIDY4OTI0LCA2ODkzNCwgNjg5NDUsIDY4OTU3LCA2ODk2OCwgNjg5ODAsIDY4OTkzLCA2OTAwNSwgNjkwMTYsIDY5MDI4LCAKLSAgICA2OTA0MSwgNjkwNTMsIDY5MDY2LCA2OTA4MCwgNjkwOTMsIDY5MTA1LCA2OTExNiwgNjkxMjYsIDY5MTM1LCA2OTE0MywgCi0gICAgNjkxNTAsIDY5MTU1LCA4MDU4LCA2OTE2MiwgMzI1NjgsIDY5MTY3LCA2OTE3MiwgMzI1NzMsIDY5MTc4LCAyMDkxNiwgCi0gICAgMzI1NzgsIDY5MTgzLCA2OTE4OSwgNjkxOTcsIDY5MjAzLCA2OTIwOSwgNjkyMTYsIDY5MjIzLCA2OTIyOCwgNjkyMzIsIAotICAgIDY5MjM1LCA2OTIzOSwgNjkyNDgsIDY5MjU0LCA2OTI2NiwgNjkyNzcsIDY5MjgxLCAzMDgxLCA4MDMzLCA2OTI4NiwgCi0gICAgNjkyODksIDY5MjkxLCA2OTI5NSwgNjkyOTksIDY5MzAzLCA2OTMwOSwgNjkzMTQsIDI1OTI3LCA2OTMxOSwgNjkzMjMsIAotICAgIDY5MzI2LCA2OTMzMSwgNjkzMzUsIDY5MzQyLCA2OTM0OCwgNjkzNTIsIDYxNzAsIDY5MzU2LCAzMjU5NSwgNjkzNjEsIAotICAgIDY5MzY4LCA2OTM3NywgNjkzODUsIDY5Mzk2LCA2OTQwNCwgNjk0MTIsIDY5NDE5LCA2OTQyNiwgNjk0MzIsIDY5NDQzLCAKLSAgICAzMjYwMCwgNjk0NDgsIDY5NDU5LCA2OTQ3MSwgNjk0NzksIDY5NDkwLCA2OTQ5OSwgNjk1MTAsIDY5NTE1LCA2OTUyMywgCi0gICAgMjU1NiwgNjk1MjgsIDM0MjcwLCA2OTU0MSwgNjk1NDUsIDY5NTU3LCA2OTU2NSwgNjk1NzAsIDY5NTc4LCAxNzQ3MiwgCi0gICAgNjk1ODksIDY5NTk1LCA2OTYwMiwgNjk2MTAsIDY5NjE2LCAzMjYxMCwgNjk2MjEsIDM5MTQsIDU4MjE3LCA2OTYyOCwgCi0gICAgNjk2MzEsIDY5NjM5LCA2OTY1MiwgNjk2NjUsIDY5Njc4LCA2OTY5MSwgNjk2OTgsIDY5NzA5LCA2OTcxOCwgNDE2ODcsIAotICAgIDQxNjkyLCA2OTcyMywgNjk3MjcsIDY5NzM1LCA2OTc0MiwgNjk3NTEsIDY5NzU5LCA2OTc2NSwgNjk3NzQsIDY5NzgyLCAKLSAgICA2OTc5MCwgNjk3OTQsIDY5ODAzLCA2OTgxMiwgNjk4MjIsIDY5ODM1LCA2OTg0OCwgNjk4NTgsIDMyNjE1LCA2OTg2NCwgCi0gICAgNjk4NzEsIDY5ODc3LCAzMjYyMSwgNjk4ODIsIDY5ODg1LCA2OTg4OSwgNjk4OTcsIDY5OTA2LCA0MTQyNSwgNjk5MTQsIAotICAgIDY5OTIzLCA2OTkzMSwgNjk5MzgsIDY5OTQ2LCA2OTk1NiwgNjk5NjUsIDY5OTc0LCA2OTk4MywgNjk5OTEsIDcwMDAyLCAKLSAgICA3MDAxMiwgOTM1OSwgMjE1NTQsIDcwMDIxLCA3MDAyNiwgNzAwMzEsIDcwMDM1LCA3MDAzOSwgNzAwNDQsIDcwMDUwLCAKLSAgICA3MDA1NSwgNzAwNjAsIDcwMDY2LCA3MDA3MSwgNzAwNzYsIDIxNTE5LCA3MDA4MSwgNzAwODgsIDcwMDk2LCA3MDEwNCwgCi0gICAgNzAxMDksIDcwMTE2LCA3MDEyMywgNzAxMjgsIDcwMTMyLCA3MDEzNiwgNzAxNDQsIDcwMTUyLCAzMjYzOCwgNzAxNTgsIAotICAgIDcwMTY0LCA3MDE3NiwgNzAxODIsIDcwMTg2LCA3MDE5MywgNzAxOTgsIDcwMjA5LCA3MDIxOSwgNzAyMjksIDcwMjQxLCAKLSAgICA3MDI0NywgNzAyNTcsIDcwMjY3LCAzMjY2NSwgNzAyNzYsIDcwMjg1LCA3MDI5MSwgNzAzMDMsIDcwMzE0LCA3MDMyMSwgCi0gICAgNzAzMjYsIDcwMzMwLCA3MDMzOCwgNzAzNDQsIDcwMzQ5LCA3MDM1NCwgNzAzNjEsIDcwMzY5LCA3MDM4MSwgNzAzOTEsIAotICAgIDcwNDAwLCA3MDQwOSwgNzA0MTYsIDM0MTMyLCAyMzgzNCwgNzA0MjIsIDcwNDI3LCA3MDQzMSwgNzA0MzUsIDcwNDQwLCAKLSAgICA3MDQ0NiwgNzA0NTcsIDcwNDcwLCA3MDQ3NSwgNzA0ODIsIDMyNjcwLCA3MDQ4NywgNzA0OTksIDcwNTA4LCA3MDUxOCwgCi0gICAgNzA1MjksIDcwNTQyLCA3MDU0OSwgNzA1NTgsIDcwNTY3LCA3MDU3NSwgNzA1ODAsIDcwNTg2LCAxMDU4LCA3MDU5MSwgCi0gICAgNzA1OTYsIDcwNjAxLCA3MDYwNiwgNzA2MTIsIDcwNjE3LCA3MDYyMiwgNzA2MjgsIDcwNjM0LCA3MDYzOSwgNzA2NDMsIAotICAgIDcwNjQ4LCA3MDY1MywgNzA2NTgsIDU4NzI5LCA3MDY2MywgNzA2NjgsIDcwNjczLCA3MDY3OCwgNzA2ODQsIDcwNjkwLCAKLSAgICA3MDY5NSwgNzA2OTksIDcwNzA0LCA3MDcwOSwgNzA3MTQsIDcwNzIwLCA3MDcyNSwgNzA3MzEsIDcwNzM2LCA3MDc0MSwgCi0gICAgNzA3NDYsIDcwNzUxLCA3MDc1NSwgNzA3NjEsIDcwNzY2LCA3MDc3NSwgNzA3ODAsIDcwNzg1LCA3MDc5MCwgNzA3OTUsIAotICAgIDcwNzk5LCA3MDgwNiwgNzA4MTIsIDE3MTIyLCAxNzEyOSwgNzA4MTcsIDcwODIxLCA3MDgyNSwgNzA4MjksIDcwODMzLCAKLSAgICA0NTQ4NywgNzA4MzcsIDcwNzY3LCA3MDgzOSwgNzA4NDksIDMyNjc5LCA3MDg1MiwgNzA4NjEsIDcwODY3LCA2MTQzLCAKLSAgICAzMjY4NCwgNzA4NzEsIDcwODc3LCA3MDg4MiwgNzA4ODgsIDcwODkzLCA3MDg5NywgNzA5MDQsIDcwOTA5LCA3MDkxOSwgCi0gICAgNzA5MjgsIDcwOTMyLCA3MDkzOCwgNzA5NDQsIDcwOTUwLCA3MDk1NCwgNzA5NjIsIDcwOTY5LCA3MDk3NywgNzA5ODUsIAotICAgIDMyNjg5LCA3MDk5MiwgNzA5OTUsIDcxMDAyLCA3MTAwOCwgNzEwMTMsIDcxMDE3LCA3MTAyMywgNzEwMzAsIDcxMDM1LCAKLSAgICA3MTAzOSwgNzEwNDgsIDcxMDU2LCA3MTA2MiwgNzEwNjcsIDMyNjk0LCA3MTA3NCwgNzEwODEsIDcxMDg3LCA3MTA5MiwgCi0gICAgNzEwOTgsIDcxMTA1LCA3MTExMSwgMjEyODEsIDI3NDM4LCA3MTExNywgNzExMjIsIDcxMTI4LCA3MTE0MCwgNzA4MDAsIAotICAgIDcwODA3LCAyMTQ1NywgNzExNTAsIDcxMTU1LCA3MTE2MiwgNzExNjgsIDcxMTc1LCA3MTE4MSwgNzExOTIsIDcxMTk3LCAKLSAgICA5MTAzLCA3MTIwNSwgNzEyMDgsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI1LCA3MTIzMSwgMzI0NDMsIDYxOTQsIDk2NCwgCi0gICAgMTM0MTIsIDcxMjM4LCA3MTI0NCwgNzEyNTAsIDcxMjU2LCA3MTI2MiwgNzEyNjgsIDcxMjc0LCA3MTI4MCwgNzEyODYsIAotICAgIDcxMjkxLCA3MTI5NiwgNzEzMDEsIDcxMzA2LCA3MTMxMSwgNzEzMTYsIDcxMzIxLCA3MTMyNiwgNzEzMzEsIDcxMzM2LCAKLSAgICA3MTM0MSwgNzEzNDYsIDcxMzUxLCA3MTM1NywgNzEzNjIsIDcxMzY3LCA3MTM3MywgNzEzNzgsIDcxMzgzLCA3MTM4OSwgCi0gICAgNzEzOTUsIDcxNDAxLCA3MTQwNywgNzE0MTMsIDcxNDE5LCA3MTQyNSwgNzE0MzEsIDcxNDM3LCA3MTQ0MiwgNzE0NDcsIAotICAgIDcxNDUzLCA3MTQ1OCwgNzE0NjMsIDcxNDY5LCA3MTQ3NCwgNzE0NzksIDcxNDg0LCA3MTQ4OSwgNzE0OTQsIDcxNDk5LCAKLSAgICA3MTUwNCwgNzE1MDksIDcxNTE0LCA3MTUxOSwgNzE1MjQsIDcxNTI5LCA3MTUzNSwgNzE1NDAsIDcxNTQ1LCA3MTU1MCwgCi0gICAgNzE1NTYsIDcxNTYxLCA3MTU2NiwgNzE1NzEsIDcxNTc2LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIAotICAgIDcxNjA3LCA3MTYxMiwgNzE2MTcsIDcxNjIyLCA3MTYyNywgNzE2MzIsIDcxNjM3LCA3MTY0MiwgNzE2NDcsIDcxNjUyLCAKLSAgICA3MTY1NywgNzE2NjIsIDcxNjY3LCA3MTY3MiwgNzE2NzcsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIDcxNjk4LCA3MTcwMywgCi0gICAgNzE3MDgsIDcxNzEzLCA3MTcxOCwgMTg2NCwgMTQyLCA3MTcyMywgNzE3MjcsIDcxNzMxLCA3MTczNiwgNzE3NDQsIDcxNzQ4LCAKLSAgICA3MTc1NSwgNzE3NjMsIDcxNzY3LCA3MTc4MCwgNzE3ODgsIDcxNzkyLCA3MTc5NSwgNzE4MDAsIDcxODA0LCA3MTgwOSwgCi0gICAgNzE4MTMsIDcxODIxLCA3MTgyNSwgMjA5MjQsIDcxODMwLCA3MTgzNCwgNjA5MzAsIDcxODM4LCA3MTg0MSwgNzE4NDksIAotICAgIDcxODU3LCA3MTg2NSwgNzE4NzAsIDcxODc3LCA3MTg4MywgNzE4ODksIDcxODk0LCA3MTkwMSwgNzE5MDYsIDcxOTE0LCAKLSAgICA2NDkwNiwgNzE5MjEsIDcxOTI2LCA3MTkzMSwgNzE5MzUsIDExNjM4LCA3MTkzOSwgNzE5NDQsIDcxOTQ5LCA3MTk1MywgCi0gICAgNzE5NTYsIDcxOTYyLCA3MTk2NiwgNzE5NzYsIDcxOTg1LCA3MTk4OCwgNzE5OTIsIDcxOTk5LCA3MjAxMiwgNzIwMTgsIAotICAgIDcyMDI2LCA3MjAzNywgNzIwNDgsIDcyMDU5LCA3MjA3MCwgNzIwNzksIDcyMDg1LCA3MjA5NCwgNzIxMDIsIDcyMTEyLCAKLSAgICA3MjEyNSwgNzIxMzIsIDcyMTQzLCA3MjE0OSwgNzIxNTQsIDcyMTU5LCA3MjE2NSwgNzIxNzEsIDcyMTgxLCA3MjE5MCwgCi0gICAgNzA0ODksIDcyMTk4LCA3MjIwNCwgNzIyMTIsIDcyMjE4LCA3MjIyNiwgNzIyMjksIDcyMjMzLCA3MjIzNywgNzIyNDAsIAotICAgIDcyMjQ2LCA3MjI1MiwgNzIyNjAsIDcyMjcyLCA3MjI4NCwgNzIyOTEsIDcyMjk1LCA3MjMwNiwgNzIzMTQsIDcyMzIxLCAKLSAgICA3MjMzMywgNzIzNDEsIDcyMzQ5LCA3MjM1NiwgNzIzNjIsIDcyMzcyLCA3MjM4MSwgNzIzODYsIDcyMzk2LCA3MjQwNSwgCi0gICAgNDA3NTEsIDcyNDEyLCA3MjQxNiwgNzI0MjEsIDcyNDI5LCA3MjQzNiwgNzI0NDIsIDcyNDQ2LCA3MjQ1NiwgNzI0NjcsIAotICAgIDcyNDc1LCA3MjQ4MiwgNzI0OTQsIDcyNTA2LCA3MjUxNSwgNjk1MzEsIDcyNTIyLCA3MjUzMywgNzI1NDcsIDcyNTU1LCAKLSAgICA3MjU2NSwgNzI1NzIsIDcyNTgwLCA3MjU5MiwgNzI2MDEsIDcyNjA5LCA3MjYxOSwgNzI2MzAsIDcyNjQyLCA3MjY1MSwgCi0gICAgNzI2NjEsIDcyNjY4LCA3MjY3NywgNzI2OTIsIDcyNzAwLCA3MjcxMCwgNzI3MTksIDcyNzI3LCA3Mjc0MCwgNzI3NTUsIAotICAgIDcyNzU5LCA3Mjc2OCwgNzI3ODAsIDcyNzkxLCA3MjgwMiwgNzI4MTMsIDcyODIzLCA3MjgzNCwgNzI4NDIsIDcyODQ4LCAKLSAgICA3Mjg1OCwgNzI4NjYsIDcyODcyLCAyOTAwNywgNzI4NzcsIDcyODgzLCA3Mjg4OCwgNzI4OTUsIDk3MDEsIDE3NDkyLCAKLSAgICA3MjkwMSwgNzI5MTAsIDcyOTE1LCA3MjkxOSwgNzI5MjYsIDcyOTMyLCA3MjkzNywgNzI5NDIsIDcyOTUwLCA3Mjk1OCwgCi0gICAgNzI5NjIsIDcyOTY1LCA3Mjk2OCwgNzI5NzAsIDcyOTc3LCA3Mjk4MywgNzI5OTQsIDcyOTk5LCA3MzAwMywgNzMwMTAsIAotICAgIDczMDE2LCA3MzAyMSwgNzMwMjksIDY1NDA1LCA2NTQxNSwgNzMwMzUsIDczMDQyLCA3MzA1MiwgMTA2MTEsIDczMDU5LCAKLSAgICA3MzA2NCwgMjkyMDMsIDczMDczLCA3MzA3OCwgNzMwODUsIDczMDk1LCA3MzEwMywgNzMxMTEsIDczMTIwLCA3MzEyNiwgCi0gICAgNzMxMzIsIDczMTM5LCA3MzE0NiwgNzMxNTEsIDczMTU1LCA3MzE2MywgNzMxNjgsIDczMTczLCA3MzE4MSwgNzMxODgsIAotICAgIDczMTkzLCA3MzE5OSwgNzMyMDIsIDczMjA2LCA3MzIxNSwgNzE3NzUsIDczMjI0LCA3MzIyOCwgNzMyMzQsIDczMjQ1LCAKLSAgICA3MzI1NSwgMTc1MDEsIDczMjY2LCA3MzI3NCwgMTc1MTMsIDczMjgxLCA3MzI4NSwgNzMyOTQsIDI3MzI0LCA3MzMwMSwgCi0gICAgNzMzMDUsIDczMzEwLCA3MzMyNywgNzMzMzksIDEwNTY5LCA3MzM1MSwgNzMzNTYsIDczMzYxLCA3MzM2NiwgMjA5OTcsIAotICAgIDczMzcwLCA3MzM3NSwgNzMzODAsIDczMzg2LCA3MzM5MSwgNTg0NiwgMjEwMDEsIDczMzk2LCA3MzQwMSwgNzM0MDcsIAotICAgIDczNDE0LCA3MzQxOSwgNzM0MjQsIDczNDMwLCA3MzQzNiwgNzM0NDIsIDczNDQ3LCA3MzQ1MywgNzM0NTcsIDczNDcxLCAKLSAgICA3MzQ3OSwgNzM0ODcsIDczNDkzLCA3MzQ5OCwgNzM1MDUsIDczNTE1LCA3MzUyNCwgNzM1MjksIDczNTM0LCA3MzU0MiwgCi0gICAgNzM1NDcsIDczNTUzLCA3MzU1OCwgNzM1NjcsIDU5Nzg2LCA3MzU3MiwgNzM1NzUsIDczNTkzLCA3MzYxMiwgNzM2MjUsIAotICAgIDczNjM5LCA3MzY1NSwgNzM2NjIsIDczNjY5LCA3MzY3NSwgNzM2ODIsIDczNjg3LCA3MzY5MywgNzM2OTksIDczNzA3LCAKLSAgICA3MzcxMywgNzM3MTgsIDczNzIzLCA3MzczOSwgMTA1ODIsIDczNzUzLCA3Mzc2MCwgNzM3NjgsIDczNzc0LCA3Mzc3OCwgCi0gICAgNzM3ODEsIDczNzg2LCA3Mzc5MSwgNzM3OTgsIDczODAzLCA3MzgxMiwgNzM4MTcsIDczODIzLCA3MzgzMiwgNzM4NDEsIAotICAgIDczODQ2LCA3Mzg1MCwgNzM4NTgsIDczODY3LCAxMTY2NywgNzM4NzYsIDczODg0LCA3Mzg4OSwgNzM4OTUsIDExNjc4LCAKLSAgICA3MzkwMCwgNzM5MDMsIDczOTA4LCA3MzkxOCwgNzM5MjcsIDczOTMyLCA3MzkzOCwgNzM5NDMsIDczOTUxLCA3Mzk1OCwgCi0gICAgNzM5NjksIDczOTc5LCA3Mzk4NCwgNjQ4MzQsIDczOTg5LCA3Mzk5NSwgNzQwMDAsIDc0MDA3LCA3NDAxNiwgNzQwMjQsIAotICAgIDc0MDMwLCA3NDAzNiwgNzQwNDMsIDc0MDQ5LCA3NDA1MywgMTY5NDcsIDMwNTUsIDc0MDU4LCA3NDA2MiwgNzQwNjYsIAotICAgIDc0MDcyLCA3NDA4MSwgNzQwODcsIDc0MDk0LCA3NDA5OCwgNzQxMTksIDc0MTQxLCA3NDE1NywgNzQxNzQsIDc0MTkzLCAKLSAgICA3NDIwMiwgNzQyMTIsIDc0MjE5LCA3NDIyNiwgMjcyMTEsIDc0MjMyLCA3NDIzNiwgNzQyNDQsIDc0MjU2LCA3NDI2MiwgCi0gICAgNzQyNzAsIDc0Mjc0LCA3NDI4MiwgNzQyODksIDc0MjkzLCA3NDI5OSwgNzQzMDUsIDc0MzEwLCAzNTYzLCA0MTg4NywgCi0gICAgNzQzMTYsIDc0MzIwLCA3NDMyNCwgNzQzMjgsIDc0MzMzLCA3NDMzOCwgNzQzNDMsIDc0MzQ5LCA3NDM1NSwgNzQzNjEsIAotICAgIDc0MzY4LCA3NDM3NCwgNzQzODEsIDc0Mzg3LCA3NDM5MywgNzQzOTgsIDc0NDA0LCA3NDQwOSwgNzQ0MTMsIDc0NDE4LCAKLSAgICA3NDQyMiwgNzQ0MjcsIDQxOTAyLCA3NDQzMSwgNzQ0MzYsIDc0NDQ0LCA3NDQ0OCwgNzQ0NTMsIDc0NDYwLCA3NDQ2OSwgCi0gICAgNzQ0NzUsIDc0NDc5LCA3NDQ4NiwgNzQ0OTAsIDc0NDkzLCA3NDUwMCwgNzQ1MDksIDc0NTE0LCA3NDUxOCwgNzQ1MjYsIAotICAgIDc0NTM1LCA3NDUzOSwgNzQ1NDcsIDc0NTUzLCA3NDU1OCwgNzQ1NjMsIDc0NTY5LCA3NDU3NSwgNzQ1ODAsIDc0NTg0LCAKLSAgICA3NDU5MCwgNzQ1OTUsIDc0NTk5LCA3NDYwMywgNzQ2MDYsIDc0NjExLCA3NDYxOSwgNzQ2MjksIDc0NjM0LCAzOTM4NywgCi0gICAgNzQ2NDIsIDc0NjU0LCA3NDY1OCwgNzQ2NjQsIDc0Njc2LCA3NDY4NywgNzQ2OTQsIDc0NzAwLCA3NDcwNywgNzQ3MTksIAotICAgIDc0NzI2LCA3NDczMiwgMjEwNzUsIDc0NzM2LCA3NDc0MiwgNzQ3NDksIDc0NzU1LCA3NDc2MSwgNzQ3NjYsIDc0NzcxLCAKLSAgICA3NDc3NiwgNzQ3ODUsIDcwMzMsIDc0NzkwLCAxNjQxMywgNzQ3OTYsIDc0ODAwLCA3NDgwNCwgNzQ4MDgsIDc0ODE2LCAKLSAgICA3NDgyNSwgNzQ4MjksIDc0ODM2LCA3NDg0NSwgNzQ4NTgsIDc0ODY0LCA3NDQyMywgMzAwNjcsIDc0ODY5LCA3NDg3MSwgCi0gICAgNzQ4NzYsIDc0ODgxLCA3NDg4NiwgNzQ4OTEsIDc0ODk2LCA3NDkwMSwgNzQ5MDYsIDc0OTExLCA3NDkxNiwgNzQ5MjEsIAotICAgIDc0OTI2LCA3NDkzMSwgNzQ5MzYsIDc0OTQxLCA3NDk0NywgNzQ5NTIsIDc0OTU3LCA3NDk2MiwgNzQ5NjcsIDc0OTcyLCAKLSAgICA3NDk3NywgNzQ5ODIsIDc0OTg3LCA3NDk5MywgNzQ5OTksIDc1MDA1LCA3NTAxMCwgNzUwMTUsIDc1MDI3LCA3NTAzMiwgCi0gICAgMTg3MCwgNDksIDc1MDM3LCA3NTA0MiwgMzI3MjEsIDc1MDQ2LCAzMjcyNiwgMzI3MzEsIDMyNzM3LCAzMjc0MiwgNzUwNTAsIAotICAgIDMyNzQ3LCAyMjA3MCwgNzUwNzIsIDc1MDc2LCA3NTA4MCwgNzUwODUsIDc1MDg5LCAzMjc1MSwgNzUwOTMsIDc1MTAxLCAKLSAgICAzMjc1NiwgNzUxMDgsIDc1MTExLCA3NTExNiwgNzUxMjAsIDk1MzYsIDc1MTI5LCAzMjc2MSwgMjE5MzIsIDc1MTMyLCAKLSAgICA3NTEzNiwgMTQyOCwgNzUxNDEsIDMyNzcyLCA3NTE0NCwgNzUxNDksIDI1NzIwLCAyNTczMCwgMzUyMzMsIDc1MTU0LCAKLSAgICA3NTE1OSwgNzUxNjQsIDc1MTY5LCA3NTE3NSwgNzUxODAsIDc1MTg5LCA3NTE5NCwgNzUyMDEsIDc1MjA3LCA3NTIxMiwgCi0gICAgNzUyMTcsIDc1MjIyLCA3NTIzMiwgNzUyNDEsIDc1MjQ2LCA3NTI1NCwgNzUyNTgsIDc1MjY2LCAzMjU4NiwgMzcyODgsIAotICAgIDc1MjczLCA3NTI3OSwgNzUyODQsIDc1Mjg5LCAxMjAwOSwgNzUyOTQsIDc1MzAwLCA3NTMwNSwgNzUzMTIsIDc1MzE4LCAKLSAgICA3NTMyMywgNzUzMzEsIDc1MzQxLCA3NTM1MSwgNzUzNTcsIDc1MzYyLCA3NTM2OCwgMTc1MjMsIDc1Mzc1LCAzNjA0OCwgCi0gICAgNzUzODgsIDc1MzkzLCA3NTM5OSwgMzA5NjgsIDc1NDEyLCA3NTQxOCwgNzU0MjIsIDc1NDMxLCA3NTQzOCwgNzU0NDQsIAotICAgIDc1NDUyLCA3NTQ2MSwgNzU0NjgsIDc1NDc0LCA3NTQ3NywgNzU0ODEsIDI1ODYxLCA3NTQ4NSwgNzU0OTIsIDc1NDk4LCAKLSAgICA3NTUwNiwgNzU1MTEsIDIzOTc3LCA3NTUxNywgNzU1MjAsIDc1NTI4LCA3NTUzNiwgNzU1NTAsIDc1NTU3LCA3NTU2MywgCi0gICAgNzU1NzAsIDc1NTc2LCAzMjc4NiwgNzU1ODAsIDc1NTg3LCA3NTU5NSwgNzU2MDMsIDc1NjA5LCAzMjc5MSwgNzU2MTcsIAotICAgIDc1NjIzLCA3NTYyOCwgNzU2MzgsIDc1NjQ0LCA3NTY1MywgMzA4MDUsIDM0NjkxLCA3NTY2MSwgNzU2NjYsIDc1NjcxLCAKLSAgICA3NTY3NSwgNzU2ODAsIDc1Njg0LCA3NTY5MiwgMTQ5MDcsIDM5NDAwLCA3NTY5NywgNzU3MDIsIDMyNzk2LCA2MjIzMiwgCi0gICAgNzU3MDYsIDc1NzExLCA3NTcxNSwgNzU3MjQsIDc1NzMyLCA3NTczOCwgNzU3NDMsIDc1NzQ5LCA3NTc1NiwgNzU3NjIsIAotICAgIDc1NzY3LCA3NTc3MiwgNzU3ODEsIDc1NzkzLCA3NTgwOCwgMzMwNTgsIDc1ODE0LCAxNjUzMiwgMzI4MDAsIDc1ODE4LCAKLSAgICA3NTgyNSwgMjQwODcsIDc1ODMxLCA3NTgzOCwgNzU4NDcsIDc1ODU0LCA3NTg2MywgNzU4NjksIDc1ODc0LCA3NTg4MiwgCi0gICAgNzU4ODgsIDMyODEwLCA3NTg5MywgNzU5MDIsIDc0NjgyLCA3NTkxMSwgNzU5MTgsIDc1OTI0LCA3NTkzMCwgNzU5NDAsIAotICAgIDc1OTQ4LCA3NTk1NSwgNzU5NTksIDMyODE1LCA3NTk2MiwgMzI4MjEsIDMyODI3LCA3NTk2NywgNzU5NzUsIDc1OTgzLCAKLSAgICA3NTk5MywgNzYwMDIsIDc2MDEwLCA3NjAxNywgNzYwMjcsIDMyODMyLCA3NjAzMSwgNzYwMzMsIDc2MDM3LCA3NjA0MiwgCi0gICAgNzYwNDYsIDc2MDUwLCA3NjA1NiwgNzYwNjEsIDc2MDY1LCA3NjA3NiwgNzYwODEsIDc2MDg2LCAzMDYwLCA3NjA5MCwgCi0gICAgNzYwOTcsIDc2MTAxLCA3NjExMCwgNzYxMTgsIDc2MTI1LCA3NjEzMCwgNzYxMzUsIDYyMjc4LCA3NjEzOSwgNzYxNDIsIAotICAgIDc2MTQ4LCA3NjE1NiwgNzYxNjIsIDc2MTY2LCA3NjE3MSwgNzYxNzgsIDc2MTgzLCA3NjE4OSwgMzQ3MjIsIDc2MTk0LCAKLSAgICA3NjE5NywgNzYyMDIsIDc2MjA2LCA3NjIxMSwgNzYyMTYsIDc2MjIwLCA3NjIyOCwgNzYyMzIsIDI1NzM5LCAyNTc0OCwgCi0gICAgNzYyMzgsIDc2MjQ0LCA3NjI1MCwgNzYyNTUsIDc2MjU5LCA3NjI2MiwgNzYyNzIsIDc2MjgxLCA3NjI4NiwgNzYyOTIsIAotICAgIDc2Mjk5LCA3NjMwNSwgNzYzMDksIDc2MzE3LCA3NjMyMiwgMzQ3MjgsIDc2MzI2LCA3NjMzNCwgNzYzNDAsIDc2MzQ3LCAKLSAgICA3NjM1MiwgNzYzNTYsIDc2MzYxLCA1ODQwMywgMzQ3MzQsIDc2MzY3LCA3NjM3MiwgNzYzNzYsIDc2MzgxLCA3NjM4NiwgCi0gICAgNzYzOTEsIDc2Mzk1LCA3NjQwMCwgNzY0MDUsIDc2NDExLCA3NjQxNiwgNzY0MjEsIDc2NDI3LCA3NjQzMywgNzY0MzgsIAotICAgIDc2NDQyLCA3NjQ0NywgNzY0NTIsIDc2NDU3LCA3NjQ2MSwgMjQwODYsIDc2NDY2LCA3NjQ3MSwgNzY0NzcsIDc2NDgzLCAKLSAgICA3NjQ4OSwgNzY0OTQsIDc2NDk4LCA3NjUwMywgNzY1MDgsIDc2NTEzLCA3NjUxNywgNzY1MjIsIDc2NTI3LCA3NjUzMiwgCi0gICAgNzY1MzcsIDc2NTQxLCAzMjg0MCwgNzY1NDksIDc2NTUzLCA3NjU2MSwgNzY1NjksIDc2NTgwLCA3NjU4NSwgNzY1ODksIAotICAgIDIyMzg0LCA3NjU5NCwgNzY2MDAsIDc2NjEwLCA3NjYxNywgNzY2MjIsIDc2NjMxLCA3NjYzNiwgNzY2NDAsIDc2NjQ1LCAKLSAgICA3NjY1MywgNzY2NjEsIDc2NjY4LCA2NTA2OCwgNzY2NzQsIDc2NjgyLCA3NjY4OSwgNzY3MDAsIDc2NzA2LCA3NjcxMCwgCi0gICAgNzY3MTYsIDMyODUwLCA3NjcxOSwgNzY3MjYsIDc2NzM0LCA3NjczOSwgMzk1OTEsIDc2NzQzLCA3Njc0OCwgNzY3NTUsIAotICAgIDc2NzYwLCA4OTg1LCA3Njc2NCwgNzY3NzIsIDc2Nzc5LCA3Njc4NiwgNzY3OTIsIDc2ODA2LCA2MzM0MCwgNzY4MTQsIAotICAgIDc2ODIwLCA3NjgyNCwgNzY4MjcsIDc2ODM1LCA3Njg0MiwgNzY4NDcsIDc2ODYwLCA3Njg2NywgNzY4NzEsIDc2ODc4LCAKLSAgICA3Njg4MywgNjA4MjMsIDc2ODg4LCA3Njg5MSwgNzY4OTgsIDc2OTA0LCA3NjkwOCwgNzY5MTYsIDc2OTI1LCA3NjkzNSwgCi0gICAgNzY5NDUsIDc2OTU0LCA3Njk2MiwgNzY5NzMsIDc2OTc4LCA3Njk4MiwgNzY5ODcsIDc2OTkxLCAzNTM2NCwgNzY5OTksIAotICAgIDIxMzQ0LCAzNTM3MywgNzcwMDQsIDc3MDA5LCA3NzAxNCwgNzcwMTksIDc3MDI0LCA3NzAyOSwgNzcwMzQsIDc3MDM4LCAKLSAgICA3NzA0MywgNzcwNDgsIDc3MDUzLCA3NzA1OCwgNzcwNjMsIDc3MDY4LCA3NzA3MiwgNzcwNzcsIDc3MDgyLCA3NzA4NiwgCi0gICAgNzcwOTAsIDc3MDk0LCA3NzA5OCwgNzcxMDMsIDc3MTA4LCA3NzExMiwgNzcxMTcsIDc3MTIxLCA3NzEyNSwgNzcxMzAsIAotICAgIDc3MTM1LCA3NzE0MCwgNzcxNDUsIDc3MTQ5LCA3NzE1NCwgNzcxNTksIDc3MTYzLCA3NzE2OCwgNzcxNzMsIDc3MTc4LCAKLSAgICA3NzE4MywgNzcxODgsIDc3MTkzLCA3NzE5OCwgNzcyMDMsIDc3MjA4LCA3NzIxMywgNzcyMTgsIDc3MjIzLCA3NzIyOCwgCi0gICAgNzcyMzMsIDc3MjM4LCA3NzI0MywgNzcyNDgsIDc3MjUzLCA3NzI1OCwgNzcyNjMsIDc3MjY3LCA3NzI3MiwgNzcyNzcsIAotICAgIDc3MjgyLCA3NzI4NywgNzcyOTIsIDc3Mjk3LCA3NzMwMiwgNzczMDcsIDc3MzEyLCA3NzMxNywgNzczMjIsIDc3MzI2LCAKLSAgICA3NzMzMSwgNzczMzUsIDc3MzQwLCA3NzM0NSwgNzczNTAsIDc3MzU1LCA3NzM2MCwgNzczNjUsIDc3MzcwLCA3NzM3NSwgCi0gICAgNzczODAsIDc3Mzg0LCA3NzM4OCwgNzczOTMsIDc3Mzk4LCA3NzQwMiwgNzc0MDcsIDc3NDEyLCA3NzQxNiwgNzc0MjEsIAotICAgIDc3NDI2LCA3NzQzMSwgNzc0MzYsIDc3NDQwLCA3NzQ0NSwgNzc0NTAsIDc3NDU0LCA3NzQ1OSwgNzc0NjMsIDc3NDY3LCAKLSAgICA3NzQ3MSwgNzc0NzUsIDc3NDgwLCA3NzQ4NCwgNzc0ODgsIDc3NDkyLCA3NzQ5NiwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCi0gICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjYsIDc3NTMxLCA3NzUzNiwgNzc1NDEsIDc3NTQ2LCA3NzU1MSwgNzc1NTYsIAotICAgIDc3NTYxLCA3NzU2NiwgNzc1NzAsIDc3NTc0LCA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTUsIDc3NTk5LCAKLSAgICA3NzYwNCwgNzc2MDgsIDc3NjEzLCA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMSwgNzc2MzUsIDc3NjM5LCA3NzY0MywgCi0gICAgNzc2NDcsIDc3NjUxLCA3NzY1NSwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzEsIDc3Njc1LCA3NzY3OSwgNzc2ODMsIAotICAgIDc3Njg3LCA3NzY5MiwgNzc2OTcsIDc3NzAxLCA3NzcwNSwgNzc3MDksIDc3NzEzLCA3NzcxNywgNzc3MjEsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NSwgNzc3NTksIDc3NzY0LCA3Nzc2OCwgCi0gICAgNzc3NzIsIDc3Nzc2LCA3Nzc4MCwgNzc3ODQsIDc3Nzg4LCA3Nzc5MiwgNzc3OTYsIDc3ODAwLCA3NzgwNCwgNzc4MDgsIAorICAgIDg5MzUsIDg5MzksIDg5NDQsIDg5NDksIDg5NTYsIDg5NjIsIDg5NzIsIDc5MDksIDg5NzgsIDg5ODIsIDg5ODksIDg5OTYsIAorICAgIDc2OCwgOTAwMCwgOTAwNCwgOTAwOSwgOTAxNCwgOTAxOSwgOTAyMywgOTAyOSwgOTAzNywgOTA0MywgOTA0NywgOTA1MywgCisgICAgOTA2MywgOTA2NywgOTA3MywgOTA3OCwgOTA4MiwgOTA4OCwgOTA5NCwgMjE2MSwgOTA5OSwgOTEwMSwgOTEwNiwgOTExNCwgCisgICAgOTEyMywgOTEyNywgOTEzMywgOTEzOCwgOTE0MywgOTE0OCwgOTE1MywgOTE1OSwgOTE2NCwgOTE2OSwgNDAwNiwgOTE3NCwgCisgICAgOTE3OSwgOTE4MywgOTE4OSwgOTE5NCwgOTIwMCwgOTIwNSwgOTIxMCwgOTIxNiwgOTIyMSwgOTEyOCwgOTIyNywgOTIzMSwgCisgICAgOTIzOCwgOTI0NCwgOTI0OSwgOTI1MywgNjE4MywgOTI1OCwgOTI2NywgOTI3MiwgOTI3NywgODIxOCwgODIyNSwgOTI4MiwgCisgICAgMjg1MywgOTI4NiwgOTI5MSwgOTI5NiwgOTEzOSwgOTMwMCwgOTMwNSwgOTE0NCwgOTE0OSwgOTMxMCwgOTMxNywgOTMyNCwgCisgICAgOTMzMCwgOTMzNiwgOTM0MiwgOTM0NywgOTM1MiwgOTM1NywgOTE1NCwgOTE2MCwgOTM2MywgOTM2OSwgOTM3NCwgOTM4MiwgCisgICAgOTE2NSwgOTM4NywgOTkwLCA5MzkwLCA5Mzk4LCA5NDA0LCA5NDEwLCA5NDE5LCA5NDI3LCA5NDMyLCA5NDM4LCA5NDQ2LCAKKyAgICA5NDUzLCA5NDY4LCA5NDg1LCA5NTA0LCA5NTEzLCA5NTIxLCA5NTM2LCA5NTQ3LCA5NTU3LCA5NTY3LCA5NTc1LCA5NTgxLCAKKyAgICA5NTkzLCA5NjAyLCA5NjEwLCA5NjE3LCA5NjI0LCA5NjMwLCA5NjM1LCA5NjQzLCA5NjUzLCA5NjYwLCA5NjcwLCA5NjgwLCAKKyAgICA5NjkwLCA5Njk4LCA5NzA1LCA5NzE0LCA5NzI0LCA5NzM4LCA5NzUzLCA5NzYyLCA5NzcwLCA5Nzc1LCA5Nzc5LCA5Nzg4LCAKKyAgICA5Nzk0LCA5Nzk5LCA5ODA5LCA5ODE5LCA5ODI5LCA5ODM0LCA5ODM4LCA5ODQ3LCA5ODUyLCA5ODYyLCA5ODczLCA5ODg2LCAKKyAgICA5ODk0LCA5OTA3LCA5OTE5LCA5OTI3LCA5OTMyLCA5OTM2LCA5OTQyLCA5OTQ3LCA5OTU1LCA5OTYzLCA5OTcwLCA5OTc1LCAKKyAgICA5OTgzLCA5OTg5LCA5OTkyLCA5OTk2LCAxMDAwMiwgMTAwMTAsIDEwMDE1LCAxMDAxOSwgMTAwMjcsIDEwMDM2LCAxMDA0NCwgCisgICAgMTAwNTAsIDEwMDU0LCAxMDA2MSwgMTAwNzIsIDEwMDc2LCAxMDA3OSwgMTAwODUsIDkxNzAsIDEwMDkwLCAxMDA5NiwgCisgICAgMTAxMDMsIDEwMTA5LCAxMDExNCwgMTAxMjEsIDEwMTI4LCAxMDEzNSwgMTAxNDIsIDEwMTQ5LCAxMDE1NiwgMTAxNjMsIAorICAgIDEwMTcwLCAxMDE3NSwgOTQ4MSwgMTAxODAsIDEwMTg2LCAxMDE5MywgMTAyMDAsIDEwMjA1LCAxMDIxMiwgMTAyMjEsIAorICAgIDEwMjI1LCAxMDIzNywgODI1NiwgMTAyNDEsIDEwMjQ0LCAxMDI0OCwgMTAyNTIsIDEwMjU2LCAxMDI2MCwgMTAyNjYsIAorICAgIDEwMjcyLCAxMDI3NywgMTAyODMsIDEwMjg4LCAxMDI5MywgMTAyOTksIDEwMzA0LCAxMDMwOSwgODk1MiwgMTAzMTQsIAorICAgIDEwMzE4LCAxMDMyMiwgMTAzMjYsIDEwMzMxLCAxMDMzNiwgMTAzNDQsIDEwMzUwLCAxMDM1NCwgMTAzNTgsIDEwMzY1LCAKKyAgICAxMDM3MCwgMTAzNzgsIDEwMzgzLCAxMDM4NywgMTAzOTAsIDEwMzk2LCAxMDQwMywgMTA0MDcsIDEwNDEwLCAxMDQxNSwgCisgICAgMTA0MTksIDQwNDUsIDEwNDI1LCAxMDQzNCwgMzYsIDEwNDQyLCAxMDQ0OCwgMTA0NTMsIDg5NjcsIDEwNDU4LCAxMDQ2MywgCisgICAgMTA0NjcsIDEwNDcwLCAxMDQ4NSwgMTA1MDQsIDEwNTE2LCAxMDUyOSwgMTA1NDIsIDEwNTU1LCAxMDU2OSwgMTA1ODIsIAorICAgIDEwNTk3LCAxMDYwNCwgOTE3NSwgMTA2MTAsIDEwNjI0LCAxMDYyOSwgMTA2MzUsIDEwNjQwLCAxMDY0OCwgMTA2NTMsIAorICAgIDgwNDAsIDEwNjU4LCAxMDY2MSwgMTA2NjgsIDEwNjczLCAxMDY3NywgMjg1OCwgOTk4LCAxMDY4MywgMTA2ODcsIDEwNjkzLCAKKyAgICAxMDY5OSwgMTA3MDQsIDEwNzEwLCAxMDcxNSwgOTE4NCwgMTA3MjEsIDEwNzI3LCAxMDczMiwgMTA3MzcsIDEwNzQ1LCAKKyAgICAxMDc1MSwgMTA3NjQsIDEwNzcyLCAxMDc3OSwgOTE5MCwgMTA3ODUsIDEwNzkzLCAxMDgwMSwgMTA4MDgsIDEwODIxLCAKKyAgICAxMDgzMywgMTA4NDMsIDEwODUxLCAxMDg1OCwgMTA4NjUsIDEwODc0LCAxMDg4MywgMTA4OTEsIDEwODk4LCAxMDkwMywgCisgICAgMTA5MDksIDkxOTUsIDEwOTE0LCAxMDkyMCwgOTIwMSwgMTA5MjUsIDEwOTI4LCAxMDkzNSwgMTA5NDEsIDEwOTU0LCA4NjY5LCAKKyAgICAxMDk2NSwgMTA5NzEsIDEwOTgwLCAxMDk4OCwgMTA5OTUsIDExMDAxLCAxMTAwNywgMTEwMTIsIDExMDE2LCAxMTAyMSwgCisgICAgMTA0NzcsIDExMDI3LCA5MjA2LCAxMTAzNCwgMTEwMzksIDExMDQ2LCAxMTA1MiwgMTEwNTgsIDExMDYzLCAxMTA3MSwgCisgICAgMTEwNzksIDExMDg2LCAxMTA5MCwgMTExMDQsIDExMTE0LCAxMTExOSwgMTExMjMsIDExMTM0LCAxMTE0MCwgMTExNDUsIAorICAgIDExMTUwLCA5MjExLCA5MjE3LCAxMTE1NCwgMTExNTcsIDExMTYyLCAxMTE3NCwgMTExODEsIDExMTg2LCAxMTE5MCwgCisgICAgMTExOTUsIDExMTk5LCAxMTIwNiwgMTEyMTIsIDkyMjIsIDkxMjksIDExMjE5LCAyODYzLCA4LCAxMTIyNiwgMTEyMzEsIAorICAgIDExMjM1LCAxMTI0MSwgMTEyNDksIDExMjU5LCAxMTI2NCwgMTEyNjksIDExMjc2LCAxMTI4MywgMTEyODcsIDExMjk4LCAKKyAgICAxMTMwOCwgMTEzMTcsIDExMzI5LCAxMTMzNCwgMTEzMzgsIDExMzQ2LCAxMTM2MCwgMTEzNjQsIDExMzY3LCAxMTM3NSwgCisgICAgMTEzODIsIDExMzkwLCAxMTM5NCwgMTE0MDUsIDExNDA5LCAxMTQxNiwgMTE0MjEsIDExNDI1LCAxMTQzMSwgMTE0MzYsIAorICAgIDExNDQwLCAxMTQ0NiwgMTE0NTEsIDExNDYyLCAxMTQ2NiwgMTE0NjksIDExNDc1LCAxMTQ4MCwgMTE0ODYsIDExNDkyLCAKKyAgICAxMTQ5OSwgMTE1MTAsIDExNTIwLCAxMTUzMCwgMTE1MzksIDExNTQ2LCAxMTU1NSwgOTIzMiwgOTIzOSwgOTI0NSwgOTI1MCwgCisgICAgMTE1NjEsIDExNTY3LCA5MjU0LCAxMTU3MywgMTE1NzYsIDExNTgzLCAxMTU4OCwgMTE2MDMsIDExNjE5LCAxMTYzNCwgCisgICAgMTE2NDIsIDExNjQ4LCAxMTY1MywgODM4LCA0MjAsIDExNjU4LCAxMTY2NiwgMTE2NzMsIDExNjc5LCAxMTY4NCwgMTE2ODksIAorICAgIDkyNTksIDExNjkxLCAxMTY5NSwgMTE3MDAsIDExNzA0LCAxMTcxNCwgMTE3MTksIDExNzIzLCAxMTczMiwgMTE3MzYsIAorICAgIDExNzM5LCA5MjY4LCAxMTc0NiwgMTE3NDksIDExNzU3LCAxMTc2NCwgMTE3NzIsIDExNzc2LCAxMTc4MywgMTE3OTIsIAorICAgIDExNzk1LCAxMTc5OSwgMTE4MDMsIDExODA5LCAxMTgxMywgMTE4MTcsIDExODIxLCAxMTgyNywgMTE4MzcsIDExODQxLCAKKyAgICAxMTg0OSwgMTE4NTMsIDExODYwLCAxMTg2NCwgMTE4NjksIDExODczLCAxMTg4MCwgMTE4ODYsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDUsIDExOTE1LCAxMTkyMCwgMTE5MjUsIDExOTI5LCAxMTkzNywgMzkwNSwgMTE5NDUsIDExOTUwLCA5MjczLCAKKyAgICAxMTk1NCwgMTE5NTgsIDExOTYxLCAxMTk2OSwgMTE5NzYsIDExOTgwLCA1OTkxLCAxMTk4NCwgMTE5ODksIDExOTkzLCAKKyAgICAxMjAwNCwgMTIwMTQsIDEyMDE5LCAxMjAyNSwgMTIwMjksIDEyMDMyLCAxMjA0MCwgMTIwNDUsIDEyMDUwLCAxMjA1NywgCisgICAgMTIwNjIsIDkyNzgsIDEyMDY3LCAxMjA3MSwgMTIwNzgsIDE3MjIsIDYxNDUsIDEyMDgzLCAxMjA4OCwgMTIwOTMsIDEyMDk4LCAKKyAgICAxMjEwNCwgMTIxMDksIDEyMTE1LCAxMjEyMCwgMTIxMjUsIDEyMTMwLCAxMjEzNSwgMTIxNDAsIDEyMTQ1LCAxMjE1MCwgCisgICAgMTIxNTUsIDEyMTYwLCAxMjE2NSwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAxMjE5NSwgMTIyMDEsIAorICAgIDEyMjA2LCAxMjIxMSwgMTIyMTYsIDEyMjIxLCAxMjIyNiwgMTIyMzIsIDEyMjM3LCAxMjI0MiwgMTIyNDgsIDEyMjUzLCAKKyAgICAxMjI1OSwgMTIyNjQsIDEyMjcwLCAxMjI3NSwgMTIyODAsIDEyMjg1LCAxMjI5MCwgMTIyOTYsIDEyMzAxLCAxMjMwNiwgCisgICAgMTIzMTEsIDczNywgMTM5LCAxMjMxOSwgMTIzMjMsIDEyMzI4LCAxMjMzMywgMTIzMzcsIDEyMzQxLCAxMjM0NSwgMTIzNTAsIAorICAgIDEyMzU0LCAxMjM1OSwgMTIzNjMsIDEyMzY2LCAxMjM3MCwgMTIzNzQsIDEyMzgwLCAxMjM4NSwgMTIzOTUsIDEyNDAxLCAKKyAgICAxMjQwOSwgMTI0MTMsIDEyNDE3LCAxMjQyNCwgMTI0MzIsIDEyNDQxLCAxMjQ1MiwgMTI0NTksIDEyNDY2LCAxMjQ3MCwgCisgICAgMTI0NzksIDEyNDg4LCAxMjQ5NiwgMTI1MDUsIDEyNTE0LCAxMjUyMywgMTI1MzIsIDEyNTQyLCAxMjU1MiwgMTI1NjIsIAorICAgIDEyNTcyLCAxMjU4MiwgMTI1OTEsIDEyNjAxLCAxMjYxMSwgMTI2MjEsIDEyNjMxLCAxMjY0MSwgMTI2NTEsIDEyNjYxLCAKKyAgICAxMjY3MCwgMTI2ODAsIDEyNjkwLCAxMjcwMCwgMTI3MTAsIDEyNzIwLCAxMjczMCwgMTI3MzksIDEyNzQ5LCAxMjc1OSwgCisgICAgMTI3NjksIDEyNzc5LCAxMjc4OSwgMTI3OTksIDEyODA5LCAxMjgxOSwgMTI4MjksIDEyODM4LCAxMjg0OCwgMTI4NTgsIAorICAgIDEyODY4LCAxMjg3OCwgMTI4ODgsIDEyODk4LCAxMjkwOCwgMTI5MTgsIDEyOTI4LCAxMjkzOCwgMTI5NDcsIDEyNTYsIAorICAgIDEyOTUzLCAxMjk1NiwgMTI5NjAsIDEyOTY1LCAxMjk3MiwgMTI5NzgsIDEyOTgzLCAxMjk4NywgMTI5OTIsIDEzMDAxLCAKKyAgICAxMzAwOSwgMTMwMTQsIDEzMDE4LCAxMzAyMiwgMTMwMjgsIDEzMDMzLCAxMzAzOSwgOTI4NywgMTMwNDQsIDEzMDQ5LCAKKyAgICAxMzA1OCwgOTI5MiwgMTMwNjMsIDEzMDY2LCAxMzA3MiwgMTMwODAsIDkyOTcsIDEzMDg3LCAxMzA5MSwgMTMwOTUsIAorICAgIDEzMDk5LCAxMzEwOSwgMTMxMTUsIDEzMTIxLCAxMzEyNiwgMTMxMzUsIDEzMTQzLCAxMzE1MCwgMTMxNTcsIDEzMTYyLCAKKyAgICAxMzE2OSwgMTMxNzQsIDEzMTc4LCAxMzE4MSwgMTMxOTIsIDEzMjAyLCAxMzIxMSwgMTMyMTksIDEzMjMwLCAxMzI0MiwgCisgICAgMTMyNTIsIDEzMjU3LCAxMzI2MSwgMTMyNjYsIDEzMjcxLCAxMzI3NSwgMTMyODEsIDEzMjg5LCAxMzI5NiwgMTMzMDcsIAorICAgIDEzMzEyLCAxMzMyMiwgMTMzMjYsIDEzMzI5LCAxMzMzNiwgMTMzNDYsIDEzMzU1LCAxMzM2MiwgMTMzNjYsIDEzMzczLCAKKyAgICAxMzM3OSwgMTMzODQsIDEzMzg5LCAxMzM5MywgMTM0MDIsIDEzNDA3LCAxMzQxMywgMTM0MTcsIDEzNDIyLCAxMzQyNiwgCisgICAgMTM0MzUsIDEzNDQzLCAxMzQ1MSwgMTM0NTgsIDEzNDY2LCAxMzQ3OCwgMTM0ODksIDEzNDk5LCAxMzUwNiwgMTM1MTIsIAorICAgIDEzNTIxLCAxMzUzMiwgMTM1NDEsIDEzNTUzLCAxMzU2NSwgMTM1NzcsIDEzNTg3LCAxMzU5NiwgMTM2MDUsIDEzNjEzLCAKKyAgICAxMzYyMCwgMTM2MjksIDEzNjM3LCAxMzY0MSwgMTM2NDcsIDEzNjUzLCAxMzY1OCwgNzc1MywgMTM2NjIsIDEzNjY0LCAKKyAgICAxMzY2OCwgMTM2NzMsIDEzNjc5LCAxMzY4OCwgMTM2OTIsIDEzNjk4LCAxMzcwNiwgMTM3MTMsIDEzNzIyLCAxMzczMSwgCisgICAgMTM3NDAsIDEzNzQ5LCAxMzc1OCwgMTM3NjcsIDEzNzc2LCAxMzc4NSwgMTM3OTUsIDEzODA1LCAxMzgxNCwgMTM4MjAsIAorICAgIDEzODI3LCAxMzgzNCwgMTM4NDAsIDEzODU0LCAxMzg2MSwgMTM4NjksIDEzODc4LCAxMzg4NCwgMTM4OTMsIDEzOTAyLCAKKyAgICAxMzkxMywgMTM5MjMsIDEzOTMxLCAxMzkzOCwgMTM5NDYsIDEzOTU1LCAxMzk2OCwgMTM5NzYsIDEzOTgzLCAxMzk5NiwgCisgICAgMTQwMDIsIDE0MDA4LCAxNDAxOCwgMTQwMjcsIDE0MDM2LCAxNDA0MSwgMTQwNDUsIDE0MDUxLCAxNDA1NywgMTQwNjQsIAorICAgIDg5NjYsIDE0MDY5LCAxNDA3NCwgMTQwODEsIDE0MDg2LCAxMjM3NiwgMTQwOTEsIDE0MDk5LCAxNDEwNSwgMTQxMTAsIAorICAgIDE0MTE4LCAxNDEyNiwgMTQxMzMsIDE0MTQxLCAxNDE0NywgMTQxNTUsIDE0MTYzLCAxNDE2OSwgMTQxNzQsIDE0MTgwLCAKKyAgICAxNDE4NywgMTQxOTMsIDE0MTk4LCAxNDIwMiwgMTQyMTMsIDE0MjIxLCAxNDIyNywgMTQyMzIsIDE0MjQxLCAxNDI0NywgCisgICAgMTQyNTIsIDE0MjYxLCAxNDI3NSwgMzg1MywgMTQyNzksIDE0Mjg0LCAxNDI4OSwgMTQyOTUsIDE0MzAwLCAxNDMwNSwgCisgICAgMTQzMDksIDE0MzE0LCAxNDMxOSwgMTQzMjQsIDc3NTIsIDE0MzI5LCAxNDMzNCwgMTQzMzksIDE0MzQ0LCAxNDM0OSwgCisgICAgMTQzNTMsIDE0MzU4LCAxNDM2MywgMTQzNjgsIDE0MzczLCAxNDM3OSwgMTQzODUsIDE0MzkwLCAxNDM5NCwgMTQzOTksIAorICAgIDE0NDA0LCAxNDQwOSwgOTMwMSwgMTQ0MTQsIDE0NDE5LCAxNDQyNCwgMTQ0MjksIDE0NDM0LCAxNDQ1MSwgMTQ0NjksIAorICAgIDE0NDgxLCAxNDQ5NCwgMTQ1MTEsIDE0NTI3LCAxNDU0NCwgMTQ1NTQsIDE0NTczLCAxNDU4NCwgMTQ1OTUsIDE0NjA2LCAKKyAgICAxNDYxNywgMTQ2MjksIDE0NjQwLCAxNDY1MSwgMTQ2NjgsIDE0Njc5LCAxNDY5MCwgMTQ2OTUsIDkzMDYsIDE0NzAwLCAKKyAgICAxNDcwNCwgMjM4MSwgMTQ3MDgsIDE0NzExLCAxNDcxNywgMTQ3MjUsIDE0NzMzLCAxNDczOCwgMTQ3NDYsIDE0NzU0LCAKKyAgICAxNDc2MSwgMTQ3NjYsIDE0NzcyLCAxNDc3OSwgMTQ3ODcsIDE0Nzk0LCAxNDgwNiwgMTQ4MTQsIDE0ODE5LCAxMTU5NywgCisgICAgMTQ4MjUsIDE0ODM0LCAxNDg0MywgMTQ4NTEsIDE0ODU4LCAxNDg2NCwgMTQ4NzIsIDE0ODc5LCAxNDg4NSwgMTQ4OTIsIAorICAgIDE0ODk4LCAxNDkwNywgMTQ5MTUsIDE0OTI1LCAxNDkzMiwgMTQ5MzgsIDE0OTQ2LCAxNDk1MiwgMTQ5NjAsIDE0OTY3LCAKKyAgICAxNDk4MCwgMTQ5ODcsIDE0OTk2LCAxNTAwNSwgMTUwMTQsIDE1MDIyLCAxNTAzMiwgMTUwMzksIDE1MDQ0LCAzNTYwLCAKKyAgICAxNTA1MSwgMTUwNTYsIDEzNzIsIDE1MDYwLCAxNDMzMCwgMTUwNjQsIDE1MDcwLCAxNTA3NCwgMTUwODIsIDE1MDk0LCAKKyAgICAxNTA5OSwgMTUxMDYsIDE1MTEyLCAxNTExNywgMTUxMjQsIDE0MzM1LCAxNTEyOCwgMTUxMzIsIDE1MTM2LCAxNDM0MCwgCisgICAgMTUxNDAsIDE0MzQ1LCAxNTE0NCwgMTUxNTEsIDE1MTU2LCAxNTE2MCwgMTUxNjcsIDE1MTcxLCAxNTE3OSwgMTUxODYsIAorICAgIDE1MTkwLCAxNTE5NywgMTUyMTQsIDE1MjIzLCAxNTIyNywgMTUyMzAsIDE1MjM4LCAxNTI0NCwgMTUyNDksIDM2MzgsIAorICAgIDE1MjUzLCAxNTI1NSwgMTUyNjMsIDE1MjcwLCAxNTI4MCwgMTUyOTIsIDE1Mjk3LCAxNTMwMywgMTUzMDgsIDE1MzEyLCAKKyAgICAxNTMxOCwgMTUzMjMsIDE1MzI5LCAxNTMzMiwgMTUzMzksIDE1MzQ3LCAxNTM1NCwgMTUzNjAsIDE1MzY2LCAxNTM3MSwgCisgICAgMTUzNzgsIDE1Mzg0LCAxNTM4OSwgMTUzOTYsIDE1NDAwLCAxNTQwNiwgMTU0MTAsIDE1NDE3LCAxNTQyMywgMTU0MjksIAorICAgIDE1NDM3LCAxNTQ0MywgMTU0NDgsIDE1NDU0LCAxNTQ2MiwgMTU0NzAsIDE1NDc2LCAxNTQ4MiwgMTU0ODcsIDE1NDk0LCAKKyAgICAxNTQ5OSwgMTU1MDMsIDE1NTA5LCAxNTUxNCwgMTU1MjEsIDE1NTI2LCAxNTUzMiwgMTU1MzUsIDE1NTQxLCAxNTU0NywgCisgICAgMTU1NTAsIDE1NTU0LCAxNTU2NiwgMTU1NzIsIDE1NTc3LCAxNTU4NCwgMTU1OTAsIDE1NTk2LCAxNTYwNywgMTU2MTcsIAorICAgIDE1NjI2LCAxNTYzNCwgMTU2NDEsIDE1NjUyLCAxNTY2MiwgMTU2NzIsIDE1NjgwLCAxNTY4MywgMTQzNTksIDE1Njg4LCAKKyAgICAxNTY5MywgMTQzNjQsIDE0NDk5LCAxNTcwMSwgMTU3MTQsIDE1NzI5LCAxNTc0MCwgMTQ1MTYsIDE1NzU4LCAxNTc3MSwgCisgICAgMTU3ODQsIDE1Nzk1LCAxMDQ5MiwgMTU4MDYsIDE1ODE5LCAxNTgzOCwgMTU4NDksIDE1ODYwLCAxNTg3MSwgMjY0OSwgCisgICAgMTU4ODQsIDE1ODg4LCAxNTg5NiwgMTU5MTEsIDE1OTI2LCAxNTkzNywgMTU5NDQsIDE1OTUwLCAxNTk1OCwgMTU5NjIsIAorICAgIDE1OTY4LCAxNTk3MSwgMTU5ODEsIDE1OTg5LCAxNTk5NiwgMTYwMDQsIDE2MDE0LCAxNjAxOSwgMTYwMjYsIDE2MDMxLCAKKyAgICAxNjAzOCwgMTYwNDksIDE2MDU5LCAxNjA2NSwgMTYwNzAsIDE2MDc1LCAxNDM2OSwgMTYwNzksIDE2MDg1LCAxNjA5MSwgCisgICAgMTYwOTYsIDE2MTAxLCAxNjEwNiwgMTYxMTAsIDE0Mzc0LCAxNDM4MCwgMTYxMTQsIDE0Mzg2LCAxNjExOSwgMTYxMjcsIAorICAgIDE2MTM2LCAxNjE0MywgOTE1MCwgMTYxNDcsIDE2MTQ5LCAxNjE1NCwgMTYxNTksIDE2MTY1LCAxNjE3MCwgMTYxNzUsIAorICAgIDE2MTgwLCAxNjE4NSwgMTYxODksIDE2MTk1LCAxNjIwMSwgMTYyMDYsIDE2MjEyLCAxNjIxNywgMTYyMjIsIDE2MjI4LCAKKyAgICAxNjIzMywgMTYyMzgsIDE2MjQzLCAxNjI0OCwgMTYyNTQsIDE2MjU5LCAxNjI2NCwgMTYyNzAsIDE2Mjc2LCAxNjI4MSwgCisgICAgMTYyODYsIDE2MjkzLCAxNjI5OSwgMTYzMTAsIDE2MzE3LCAxNjMyMiwgMTYzMjYsIDE2MzMwLCAxNjMzMywgMTYzNDEsIAorICAgIDE2MzQ2LCAxNjM1MywgMTYzNjAsIDE2MzY2LCAxNjM3MSwgMTYzNzYsIDE2MzgzLCAxNjM5MywgMTYzOTgsIDE2NDA1LCAKKyAgICAxNjQxMSwgMTY0MjEsIDE2NDMxLCAxNjQ0NSwgMTY0NTksIDE2NDczLCAxNjQ4NywgMTY1MDIsIDE2NTE3LCAxNjUzNCwgCisgICAgMTY1NTIsIDE2NTY1LCAxNjU3MSwgMTY1NzYsIDE2NTgxLCAxNjU4NSwgMTY1OTAsIDE2NTk4LCAxNjYwNCwgMTY2MDksIAorICAgIDE2NjE0LCAxNjYxOCwgMTY2MjMsIDE2NjI3LCAxNjYzMiwgMTY2MzYsIDE2NjQ3LCAxNjY1MywgMTY2NTgsIDE2NjYzLCAKKyAgICAxNjY3MCwgMTY2NzUsIDE2Njc5LCAxNjY4NCwgMTY2ODksIDE2Njk1LCAxNjcwMiwgMTY3MDgsIDE2NzEzLCAxNjcxNywgCisgICAgMTY3MjMsIDE2NzI4LCAxNjczMywgMTY3MzcsIDE2NzQzLCAxNjc0OCwgMTY3NTMsIDE2NzYwLCAxNjc2NSwgMTMxMTEsIAorICAgIDE2NzY5LCAxNjc3NCwgMTY3NzgsIDE2NzgzLCAxNjc4OSwgMTY3OTUsIDE2ODAyLCAxNjgxMiwgMTY4MjAsIDE2ODI3LCAKKyAgICAxNjgzMiwgMTY4MzYsIDE2ODQ1LCAxNjg1MywgMTY4NjAsIDE2ODY3LCAxNjg3MywgMTY4NzksIDE2ODg0LCAxNjg4OSwgCisgICAgMTY4OTUsIDE2OTAwLCAxNjkwNiwgMTY5MTEsIDE2OTE3LCAxNjkyMywgMTY5MzAsIDE2OTM2LCAxNjk0MSwgMTY5NDYsIAorICAgIDkzNDgsIDE2OTU1LCAxNjk1OCwgMTY5NjQsIDE2OTY5LCAxNjk3NCwgMTY5ODQsIDE2OTkxLCAxNjk5NywgMTcwMDIsIAorICAgIDE3MDA3LCAxNzAxMywgMTcwMTgsIDE3MDI0LCAxNzAyOSwgMTcwMzUsIDE3MDQxLCAxNzA0NiwgMTcwNTQsIDE3MDYxLCAKKyAgICAxNzA2NiwgMTcwNzEsIDE3MDc3LCAxNzA4MiwgMTcwODYsIDE3MDk1LCAxNzEwNiwgMTcxMTMsIDE3MTE4LCAxNzEyNiwgCisgICAgMTcxMzIsIDE3MTM5LCAxNzE0NSwgMTcxNTAsIDE3MTU0LCAxNzE2MCwgMTcxNjUsIDE3MTcwLCAxNzE3NSwgMTQ0MCwgCisgICAgNzc3NywgMjg3NywgMTcxNzksIDE3MTgzLCAxNzE4NywgMTcxOTEsIDE3MTk1LCAxNzE5OSwgMTcyMDIsIDE3MjA5LCAKKyAgICAxNzIxNywgMTQ0MDAsIDE3MjI0LCAxNzIzNCwgMTcyNDIsIDE3MjQ5LCAxNzI1NywgMTcyNjcsIDE3Mjc2LCAxNzI4OSwgCisgICAgMTcyOTQsIDE3Mjk5LCAxNzMwNywgMTczMTQsIDEzMjA3LCAxMzIxNiwgMTczMjEsIDE3MzMxLCAxNzM0NiwgMTczNTIsIAorICAgIDE3MzU5LCAxNzM2NiwgMTczNzIsIDE3MzgwLCAxNzM5MCwgMTc0MDAsIDE0NDA1LCAxNzQwOSwgMTc0MTUsIDE3NDIxLCAKKyAgICAxNzQyOSwgMTc0MzcsIDE3NDQyLCAxNzQ1MSwgMTc0NTksIDE3NDcxLCAxNzQ4MSwgMTc0OTEsIDE3NTAxLCAxNzUxMCwgCisgICAgMTc1MjIsIDE3NTMyLCAxNzU0MiwgMTc1NTMsIDE3NTU4LCAxNzU3MCwgMTc1ODIsIDE3NTk0LCAxNzYwNiwgMTc2MTgsIAorICAgIDE3NjMwLCAxNzY0MiwgMTc2NTQsIDE3NjY2LCAxNzY3OCwgMTc2ODksIDE3NzAxLCAxNzcxMywgMTc3MjUsIDE3NzM3LCAKKyAgICAxNzc0OSwgMTc3NjEsIDE3NzczLCAxNzc4NSwgMTc3OTcsIDE3ODA5LCAxNzgyMCwgMTc4MzIsIDE3ODQ0LCAxNzg1NiwgCisgICAgMTc4NjgsIDE3ODgwLCAxNzg5MiwgMTc5MDQsIDE3OTE2LCAxNzkyOCwgMTc5NDAsIDE3OTUxLCAxNzk2MywgMTc5NzUsIAorICAgIDE3OTg3LCAxNzk5OSwgMTgwMTEsIDE4MDIzLCAxODAzNSwgMTgwNDcsIDE4MDU5LCAxODA3MSwgMTgwODIsIDE4MDk0LCAKKyAgICAxODEwNiwgMTgxMTgsIDE4MTMwLCAxODE0MiwgMTgxNTQsIDE4MTY2LCAxODE3OCwgMTgxOTAsIDE4MjAyLCAxODIxMywgCisgICAgMTgyMjUsIDE4MjM3LCAxODI0OSwgMTgyNjEsIDE4MjczLCAxODI4NSwgMTgyOTcsIDE4MzA5LCAxODMyMSwgMTgzMzMsIAorICAgIDE4MzQ0LCAxODM1NiwgMTgzNjgsIDE4MzgwLCAxODM5MiwgMTg0MDQsIDE4NDE2LCAxODQyOCwgMTg0NDAsIDE4NDUyLCAKKyAgICAxODQ2NCwgMTg0NzUsIDE4NDg3LCAxODQ5OSwgMTg1MTEsIDE4NTIzLCAxODUzNiwgMTg1NDksIDE4NTYyLCAxODU3NSwgCisgICAgMTg1ODgsIDE4NjAxLCAxODYxNCwgMTg2MjYsIDE4NjM5LCAxODY1MiwgMTg2NjUsIDE4Njc4LCAxODY5MSwgMTg3MDQsIAorICAgIDE4NzE3LCAxODczMCwgMTg3NDMsIDE4NzU2LCAxODc2OCwgMTg3ODEsIDE4Nzk0LCAxODgwNywgMTg4MjAsIDE4ODMzLCAKKyAgICAxODg0NiwgMTg4NTksIDE4ODcyLCAxODg4NSwgMTg4OTgsIDE4OTEwLCAxODkyMywgMTg5MzYsIDE4OTQ5LCAxODk2MiwgCisgICAgMTg5NzUsIDE4OTg4LCAxOTAwMSwgMTkwMTQsIDE5MDI3LCAxOTA0MCwgMTkwNTIsIDE5MDY1LCAxOTA3OCwgMTkwOTEsIAorICAgIDE5MTA0LCAxOTExNywgMTkxMzAsIDE5MTQzLCAxOTE1NiwgMTkxNjksIDE5MTgyLCAxOTE5NCwgMTkyMDcsIDE5MjIwLCAKKyAgICAxOTIzMywgMTkyNDYsIDE5MjU5LCAxOTI3MiwgMTkyODUsIDE5Mjk4LCAxOTMxMSwgMTkzMjQsIDE5MzM2LCAxOTM0NywgCisgICAgMTkzNjAsIDE5MzczLCAxOTM4NiwgMTkzOTksIDE5NDEyLCAxOTQyNSwgMTk0MzgsIDE5NDUxLCAxOTQ2NCwgMTk0NzcsIAorICAgIDE5NDg5LCAxOTUwMiwgMTk1MTUsIDE5NTI4LCAxOTU0MSwgMTk1NTQsIDE5NTY3LCAxOTU4MCwgMTk1OTMsIDE5NjA2LCAKKyAgICAxOTYxOSwgMTk2MzEsIDE5NjQ0LCAxOTY1NywgMTk2NzAsIDE5NjgzLCAxOTY5NiwgMTk3MDksIDE5NzIyLCAxOTczNSwgCisgICAgMTk3NDgsIDE5NzYxLCAxOTc3MywgMTk3ODYsIDE5Nzk5LCAxOTgxMiwgMTk4MjUsIDE5ODM4LCAxOTg1MSwgMTk4NjQsIAorICAgIDE5ODc3LCAxOTg5MCwgMTk5MDMsIDE5OTE1LCAxOTkyOCwgMTk5NDEsIDE5OTU0LCAxOTk2NywgMTk5ODAsIDE5OTkzLCAKKyAgICAyMDAwNiwgMjAwMTksIDIwMDMyLCAyMDA0NSwgMjAwNTcsIDIwMDcwLCAyMDA4MywgMjAwOTYsIDIwMTA5LCAyMDEyMiwgCisgICAgMjAxMzUsIDIwMTQ4LCAyMDE2MSwgMjAxNzQsIDIwMTg3LCAyMDE5OSwgMjAyMTIsIDIwMjI1LCAyMDIzOCwgMjAyNTEsIAorICAgIDIwMjY0LCAyMDI3NywgMjAyOTAsIDIwMzAzLCAyMDMxNiwgMjAzMjksIDIwMzQxLCAyMDM1NCwgMjAzNjcsIDIwMzgwLCAKKyAgICAyMDM5MywgMjA0MDYsIDIwNDE5LCAyMDQzMiwgMjA0NDUsIDIwNDU4LCAyMDQ3MSwgMjA0ODMsIDIwNDk2LCAyMDUwOSwgCisgICAgMjA1MjIsIDIwNTM1LCAyMDU0OCwgMjA1NjEsIDIwNTc0LCAyMDU4NywgMjA2MDAsIDIwNjEzLCAyMDYyNSwgMjA2MzgsIAorICAgIDIwNjUxLCAyMDY2NCwgMjA2NzcsIDIwNjkwLCAyMDcwMywgMjA3MTYsIDIwNzI5LCAyMDc0MiwgMjA3NTUsIDIwNzY3LCAKKyAgICAyMDc3OCwgMjA3ODYsIDIwNzk0LCAyMDgwMSwgMjA4MDcsIDIwODExLCAyMDgxNywgMjA4MjMsIDIwODMxLCAyMDgzNywgCisgICAgMjA4NDIsIDIwODQ2LCAyMDg1NSwgOTE1NSwgMjA4NjYsIDIwODczLCAyMDg4MSwgMjA4ODgsIDIwODk1LCAxMDk0OCwgCisgICAgMjA5MDIsIDIwOTExLCAyMDkxNiwgMjA5MjEsIDc4MDUsIDIwOTI4LCAyMDkzMywgMjA5MzYsIDIwOTQxLCAyMDk0OSwgCisgICAgMjA5NTYsIDIwOTYzLCAyMDk3MCwgMjA5NzYsIDIwOTg1LCAyMDk5NCwgMjEwMDAsIDIxMDA5LCAyMTAxMywgMjEwMTksIAorICAgIDIxMDI0LCAyMTAzNCwgMjEwNDEsIDIxMDQ3LCAyMTA1NSwgMjEwNjEsIDIxMDY4LCAyMTA3OCwgMjEwODcsIDIxMDkxLCAKKyAgICAyMTA5OCwgMjExMDIsIDIxMTA3LCAyMTExMywgMjExMjEsIDIxMTI1LCAyMTEzNSwgMTQ0MTUsIDIxMTQ0LCAyMTE1MCwgCisgICAgMjExNTQsIDIxMTYzLCAxNDQyMCwgMjExNjksIDIxMTc2LCAyMTE4NywgMjExOTUsIDIxMjA0LCAyMTIxMiwgODkzMSwgCisgICAgMjEyMjAsIDIxMjI1LCAyMTIzMSwgMjEyMzYsIDIxMjQwLCAyMTI0NCwgMjEyNDgsIDk2MzksIDIxMjUzLCAyMTI2MSwgCisgICAgMjEyNjgsIDIxMjc3LCAyMTI4NCwgMjEyOTEsIDEwODc4LCAyMTI5OCwgMjEzMDQsIDIxMzA4LCAyMTMxNCwgMjEzMjEsIAorICAgIDIxMzI3LCAyMTMzNSwgMjEzNDEsIDIxMzQ4LCAyMTM1NCwgMjEzNjAsIDIxMzY5LCAyMTM3MywgMjEzODEsIDIxMzkwLCAKKyAgICAyMTM5NywgMjE0MDIsIDIxNDA2LCAyMTQxNywgMjE0MjIsIDIxNDI3LCAyMTQzMiwgMjE0NDUsIDc5OTUsIDIxNDQ5LCAKKyAgICAyMTQ1NSwgMjE0NjMsIDIxNDY3LCAyMTQ3NCwgMjE0ODMsIDIxNDg4LCAxNDY5MSwgMjE0OTYsIDIxNTAwLCAyMTUxMiwgCisgICAgMjE1MTcsIDIxNTIxLCAyMTUyNCwgMjE1MzAsIDIxNTM2LCAyMTU0MSwgMjE1NDUsIDIxNTQ4LCAyMTU1OSwgMjE1NjQsIAorICAgIDkzODMsIDIxNTcxLCAyMTU3NiwgOTM4OCwgMjE1ODEsIDIxNTg2LCAyMTU5MSwgMjE1OTYsIDIxNjAxLCAyMTYwNiwgCisgICAgMjE2MTEsIDIxNjE2LCAyMTYyMSwgMjE2MjYsIDIxNjMxLCAyMTYzNiwgMjE2NDIsIDIxNjQ3LCAyMTY1MiwgMjE2NTcsIAorICAgIDIxNjYyLCAyMTY2NywgMjE2NzIsIDIxNjc3LCAyMTY4MiwgMjE2ODcsIDIxNjkzLCAyMTY5OSwgMjE3MDQsIDIxNzA5LCAKKyAgICAyMTcxNCwgMjE3MTksIDIxNzI0LCAyMTcyOSwgMjE3MzQsIDIxNzM5LCAyMTc0NCwgMjE3NTAsIDIxNzU1LCAyMTc2MCwgCisgICAgMjE3NjUsIDIxNzcxLCAyMTc3NywgMjE3ODIsIDIxNzg3LCAyMTc5MiwgMjE3OTcsIDIxODAyLCAyMTgwNywgMjE4MTIsIAorICAgIDIxODE3LCAyMTgyMywgMjE4MjgsIDIxODMzLCAyMTgzOCwgMjE4NDMsIDIxODQ5LCAyMTg1NCwgMjE4NTksIDIxODYzLCAKKyAgICAxMzY4LCAxMjksIDIxODcxLCAyMTg3NSwgMjE4NzksIDIxODgzLCAyMTg4OCwgMjE4OTIsIDEzMTE3LCAxMjQ3NiwgMjE4OTYsIAorICAgIDIxOTAxLCAyMTkwNSwgMjE5MTAsIDIxOTE0LCAyMTkxOSwgMjE5MjMsIDIxOTI5LCAyMTkzNCwgMjE5MzgsIDIxOTQyLCAKKyAgICAyMTk1MCwgMjE5NTQsIDIxOTU4LCAyMTk2MywgMjE5NjgsIDIxOTcyLCAyMTk3OCwgMjE5ODMsIDIxOTg3LCAyMTk5MiwgCisgICAgMjE5OTcsIDIyMDAxLCAyMjAwOCwgMjIwMTUsIDIyMDIyLCAyMjAyNiwgMjIwMzAsIDIyMDM1LCAyMjAzOSwgMjIwNDIsIAorICAgIDIyMDQ4LCAyMjA2MSwgMjIwNjYsIDIyMDc1LCAyMjA4MCwgOTQyOCwgMjIwODUsIDIyMDg4LCAyNzEyLCAyNzE3LCAyMjA5MiwgCisgICAgMjIwOTgsIDIyMTA0LCA3MjA5LCAyMjEwOSwgMjIxMTQsIDIyMTE5LCAyMjEyNSwgMjIxMzAsIDEzOTA5LCAyMjEzNSwgCisgICAgMjIxNDAsIDIyMTQ1LCAyMjE1MCwgMjIxNTYsIDIyMTYxLCAyMjE2NiwgMjIxNzIsIDIyMTc3LCAyMjE4MSwgMjIxODYsIAorICAgIDIyMTkxLCAyMjE5NiwgMjIyMDEsIDIyMjA1LCAyMjIxMCwgMjIyMTQsIDIyMjE5LCAyMjIyNCwgMjIyMjksIDIyMjM0LCAKKyAgICAyMjIzOCwgMjIyNDMsIDIyMjQ3LCAyMjI1MiwgMjIyNTcsIDIyMjYyLCAyMjI2NywgMjg4NiwgMjIxODIsIDIyMjcxLCAKKyAgICAyMjI3OSwgMjIyODYsIDk3MzMsIDIyMjk4LCAyMjMwNiwgMjIxODcsIDIyMzEzLCAyMjMxOCwgMjIzMjYsIDIyMTkyLCAKKyAgICAyMjMzMSwgMjIzMzYsIDIyMzQ0LCAyMjM0OSwgMjIxOTcsIDIyMzU0LCAyMjM1OSwgMjIzNjMsIDIyMzY5LCAyMjM3NywgCisgICAgMjIzODAsIDIyMzg3LCAyMjM5MSwgMjIzOTUsIDIyNDAxLCAyMjQwOCwgMjI0MTMsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDE3LCAKKyAgICAyMjQyMywgMjI0MjksIDIyNDM0LCAyMjQzOCwgMjI0NDIsIDIyNDQ2LCAyMjQ1MCwgMjI0NTQsIDIyNDU4LCAyMjQ2MiwgCisgICAgMjI0NjYsIDIyNDY5LCAyMjQ3NSwgMjI0ODIsIDIyNDkwLCAyMjQ5NiwgMjI1MDIsIDIyNTA3LCAyMjUxMiwgMjI1MTYsIAorICAgIDEzODI5LCAxMzgzNiwgMjI1MjEsIDIyNTMzLCAyMjUzNiwgMjI1NDMsIDE2MzYyLCAyMjU1MCwgMjI1NTgsIDIyNTY5LCAKKyAgICAyMjU3OCwgMjI1OTEsIDIyNjAxLCAyMjYxNSwgMjI2MjcsIDIyNjQxLCAyMjY1MywgMjI2NjMsIDIyNjc1LCAyMjY4MSwgCisgICAgMjI2OTYsIDIyNzIwLCAyMjczOCwgMjI3NTcsIDIyNzcwLCAyMjc4NCwgMjI4MDIsIDIyODE4LCAyMjgzNSwgMjI4NTMsIAorICAgIDIyODY0LCAyMjg4MywgMjI5MDAsIDIyOTIwLCAyMjkzOCwgMjI5NTAsIDIyOTY0LCAyMjk3OCwgMjI5OTAsIDIzMDA3LCAKKyAgICAyMzAyNiwgMjMwNDQsIDIzMDU2LCAyMzA3NCwgMjMwOTMsIDE0NTU5LCAyMzEwNiwgMjMxMjYsIDIzMTM4LCAxMDUyMywgCisgICAgMjMxNTAsIDIzMTU1LCAyMzE2MCwgMjMxNjUsIDIzMTcxLCAyMzE3NiwgMjMxODAsIDIzMTg3LCAyMzk4LCAyMzE5MSwgCisgICAgMjMxOTcsIDIzMjAxLCAyMzIwNCwgMjMyMDgsIDIzMjE2LCAyMzIyMiwgMjIyMTUsIDIzMjI2LCAyMzIzNSwgMjMyNDYsIAorICAgIDIzMjUyLCAyMzI1OCwgMjMyNjcsIDIzMjc1LCAyMzI4MiwgMjMyODcsIDIzMjkxLCAyMzI5OCwgMjMzMDQsIDIzMzEzLCAKKyAgICAyMzMyMSwgMjMzMjgsIDIzMzM4LCAyMzM0NywgMjMzNTcsIDIzMzYyLCAyMzM3MSwgMjMzODAsIDIzMzkxLCAyMzQwMiwgCisgICAgMzk2MywgMjM0MTIsIDIzNDE2LCAyMzQyNiwgMjM0MzQsIDIzNDQ0LCAyMzQ1NSwgMjM0NjAsIDIzNDcwLCAyMzQ3OCwgCisgICAgMjM0ODUsIDIzNDkxLCAyMzQ5OCwgMjM1MDMsIDIyMjI1LCAyMzUwNywgMjM1MTYsIDIzNTIwLCAyMzUyMywgMjM1MjgsIAorICAgIDIzNTM1LCAyMzU0NCwgMjM1NTIsIDIzNTYwLCAyMzU3MCwgMjM1NzksIDIzNTg1LCAyMzU5MSwgMjIyMzAsIDIyMjM1LCAKKyAgICAyMzU5NSwgMjM2MDUsIDIzNjE1LCAyMzYyNSwgMjM2MzMsIDIzNjQwLCAyMzY1MCwgMjM2NTgsIDIzNjY2LCAyMzY3MiwgCisgICAgMjM2ODAsIDkzMCwgMjM2ODksIDE0NzUwLCA1NDIsIDIzNzAzLCAyMzcxMiwgMjM3MjAsIDIzNzMxLCAyMzc0MiwgMjM3NTIsIAorICAgIDIzNzYxLCAyMzc3MywgMjM3ODIsIDIzNzkxLCAyMzc5NywgMjM4MDYsIDIzODE1LCAyMzgyNSwgMjM4MzMsIDIzODQxLCAKKyAgICA5MzYwLCAyMzg0NywgMjM4NTAsIDIzODU0LCAyMzg1OSwgMjM4NjQsIDk4NDgsIDIyMjQ4LCAyMjI1MywgMjM4NzIsIAorICAgIDIzODc4LCAyMzg4NCwgMjM4ODksIDIzODk0LCAyMzg5OCwgMjM5MDYsIDIzOTEyLCAyMzkxOCwgMjM5MjIsIDM1MjUsIAorICAgIDIzOTMwLCAyMzkzNSwgMjM5NDAsIDIzOTQ0LCAyMzk0OCwgOTkyOCwgMjM5NTUsIDIzOTYzLCAyMzk3NywgMjM5ODQsIAorICAgIDIzOTkwLCA5OTM3LCA5OTQzLCAyMzk5OCwgMjQwMDYsIDI0MDEzLCAyNDAxOCwgMjQwMjMsIDIyMjU4LCAyNDAyOSwgCisgICAgMjQwNDAsIDI0MDQ0LCAyNDA0OSwgMjYwMSwgMjQwNTQsIDI0MDY1LCAyNDA3MSwgMjQwNzYsIDI0MDgwLCAyNDA4NCwgCisgICAgMjQwODcsIDI0MDk0LCAyNDEwMSwgMjQxMDgsIDI0MTE0LCAyNDExOCwgMjIyNjMsIDI0MTIzLCAyNDEyNywgMjQxMzEsIAorICAgIDEwMzcsIDI0MTM2LCAyNDE0MSwgMjQxNDYsIDI0MTUxLCAyNDE1NiwgMjQxNjEsIDI0MTY2LCAyNDE3MSwgMjQxNzYsIAorICAgIDI0MTgxLCAyNDE4NiwgMjQxOTEsIDI0MTk2LCAyNDIwMSwgMjQyMDcsIDI0MjEyLCAyNDIxNywgMjQyMjIsIDI0MjI3LCAKKyAgICAyNDIzMiwgMjQyMzcsIDI0MjQzLCAyNDI0OCwgMjQyNTMsIDI0MjU4LCAyNDI2MywgMjQyNjgsIDI0MjczLCAyNDI3OCwgCisgICAgMjQyODQsIDI0MjkwLCAyNDI5NSwgMjQzMDEsIDI0MzA2LCAyNDMxMSwgNSwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIAorICAgIDI0MzM0LCAyNDMzOCwgMjQzNDIsIDI0MzQ2LCAyNDM1MCwgMjQzNTUsIDI0MzU5LCAyNDM2NCwgMjQzNjgsIDI0MzcxLCAKKyAgICAyNDM3NSwgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwMSwgMjQ0MDYsIDI0NDEwLCAyNDQxNCwgCisgICAgMjQ0MjQsIDI0NDI5LCAyNDQzMywgMjQ0MzcsIDI0NDQyLCAyNDQ0NywgMjQ0NTYsIDI0NDYxLCAyNDQ2NiwgMjQ0NzAsIAorICAgIDI0NDc0LCAyNDQ4NywgMjQ0OTksIDI0NTA4LCAyNDUxNywgMjQ1MjMsIDI0NTI4LCAyNDUzMiwgMjQ1MzYsIDI0NTQ2LCAKKyAgICAyNDU1NSwgMjQ1NjMsIDI0NTY5LCAyNDU3NCwgMjQ1NzgsIDI0NTg1LCAyNDU5NSwgMjQ2MDQsIDI0NjEyLCAyNDYyMCwgCisgICAgMjQ2MjcsIDI0NjM1LCAyNDY0NCwgMjQ2NTMsIDI0NjYxLCAyNDY2NiwgMjQ2NzAsIDI0Njc0LCAyNDY3NywgMjQ2NzksIAorICAgIDI0NjgzLCAyNDY4NywgMjQ2OTIsIDI0Njk3LCAyNDcwMSwgMjQ3MDUsIDI0NzA4LCAyNDcxMiwgMjQ3MTUsIDI0NzE5LCAKKyAgICAyNDcyMiwgMjQ3MjUsIDI0NzI5LCAyNDczNSwgMjQ3MzksIDI0NzQzLCAyNDc0NywgMjQ3NTIsIDI0NzU3LCAyNDc2MiwgCisgICAgMjQ3NjYsIDI0NzY5LCAyNDc3NCwgMjQ3ODAsIDI0Nzg1LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNCwgMjQ4MDgsIAorICAgIDI0ODEzLCAyNDgxNywgMjQ4MjIsIDI0ODI2LCAyNDgzMCwgMjQ4MzcsIDI0ODQxLCAyNDg0NCwgMjQ4NDgsIDI0ODU0LCAKKyAgICAyNDg2MCwgMjQ4NjQsIDI0ODY4LCAyNDg3MywgMjQ4ODAsIDI0ODg2LCAyNDg5MCwgMjQ4OTksIDI0OTAzLCAyNDkwNywgCisgICAgMjQ5MTAsIDI0OTE2LCAyNDkyMSwgMjQ5MjcsIDE0ODksIDE3OTEsIDI0OTMyLCAyNDkzNywgMjQ5NDIsIDI0OTQ3LCAKKyAgICAyNDk1MiwgMjQ5NTcsIDI0OTYyLCAyMTQ4LCAyMTk0LCAyNDk2NywgMjQ5NzAsIDI0OTc0LCAyNDk3OCwgMjQ5ODMsIAorICAgIDI0OTg3LCAyNDk5MSwgMjQ5OTQsIDI0OTk5LCAyNTAwNCwgMjUwMDgsIDI1MDExLCAyNTAxNiwgMjUwMjAsIDI1MDI1LCAKKyAgICAyNTAyOSwgMTQ3NjIsIDI1MDM0LCAyNTAzNywgMjUwNDAsIDI1MDQ0LCAyNTA0OSwgMjUwNTMsIDI1MDY2LCAyNTA3MCwgCisgICAgMjUwNzMsIDI1MDgxLCAyNTA5MCwgMjUwOTcsIDI1MTAyLCAyNTEwOCwgMjUxMTQsIDI1MTIyLCAyNTEyOSwgMjUxMzYsIAorICAgIDI1MTQwLCAyNTE0NCwgMjUxNDgsIDI1MTUzLCAyNTE1OCwgMjUxNjIsIDI1MTcwLCAyNTE3NSwgMjUxODcsIDI1MTk4LCAKKyAgICAyNTIwMywgMjUyMDcsIDI1MjExLCAyNTIxNywgMjUyMjIsIDI1MjI3LCAyNTIzMSwgMjUyMzUsIDI1MjM4LCAyNTI0NCwgCisgICAgNzkxNSwgMjMxNiwgMjUyNDgsIDI1MjUzLCAyNTI2OSwgOTQ3NSwgMjUyODksIDI1Mjk4LCAyNTMxNCwgMjUzMTgsIDI1MzIxLCAKKyAgICAyNTMyNywgMjUzMzcsIDI1MzQzLCAyNTM1MiwgMjUzNjcsIDI1Mzc5LCAyNTM5MCwgMjUzOTgsIDI1NDA3LCAyNTQxMywgCisgICAgMjU0MjIsIDI1NDMyLCAyNTQ0MywgMjU0NTQsIDI1NDYzLCAyNTQ3MCwgMjU0NzksIDI1NDg3LCAyNTQ5NCwgMjU1MDIsIAorICAgIDI1NTA5LCAyNTUxNiwgMjU1MjksIDI1NTM2LCAyNTU0MiwgMjU1NDcsIDI1NTU2LCAyNTU2MiwgMjU1NjcsIDI1NTc1LCAKKyAgICAyNTU4MiwgMjM0MzYsIDI1NTk0LCAyNTYwNiwgMjU2MjAsIDI1NjI4LCAyNTYzNSwgMjU2NDcsIDI1NjU2LCAyNTY2NSwgCisgICAgMjU2NzMsIDI1NjgxLCAyNTY4OSwgMjU2OTYsIDI1NzA1LCAyNTcxMywgMjU3MjMsIDI1NzMyLCAyNTc0MiwgMjU3NTEsIAorICAgIDI1NzYwLCAyNTc2OCwgMjU3NzMsIDI1Nzc3LCAyNTc4MCwgMjU3ODQsIDI1Nzg4LCAyNTc5MiwgMjU3OTYsIDI1ODAwLCAKKyAgICAyNTgwNiwgMjU4MTIsIDI1ODIwLCAxNDgwNywgMjU4MjcsIDI1ODMyLCAyNTgzOSwgMjU4NDUsIDI1ODUyLCAxNDgxNSwgCisgICAgMjU4NTksIDI1ODYyLCAyNTg3NCwgMjU4ODIsIDI1ODg4LCAyNTg5MywgMjU4OTcsIDk4NzgsIDI1OTA4LCAyNTkxOCwgCisgICAgMjU5MjcsIDI1OTM0LCAyNTkzOCwgMTQ4MjAsIDI1OTQxLCAyNTk0OCwgMjU5NTIsIDI1OTU4LCAyNTk2MSwgMjU5NjgsIAorICAgIDI1OTc0LCAyNTk4MSwgMjU5ODcsIDI1OTkxLCAyNTk5NiwgMjYwMDAsIDI2MDA5LCAyNjAxNiwgMjYwMjIsIDc5NTYsIAorICAgIDI2MDI5LCAyNjAzNywgMjYwNDQsIDI2MDUwLCAyNjA1NSwgMjYwNjEsIDI2MDY3LCAyNjA3NSwgMjYwNzksIDI2MDgyLCAKKyAgICAyNjA4NCwgMjU3ODUsIDI2MDkzLCAyNjA5OSwgMjYxMDksIDI2MTE0LCAyNjEyMSwgMjYxMjcsIDI2MTMyLCAyNjEzNywgCisgICAgMjYxNDIsIDI2MTQ2LCAyNjE1MSwgMjYxNTgsIDI2MTY3LCAyNjE3MSwgMjYxNzgsIDI2MTg3LCAyNjE5MywgMjYxOTgsIAorICAgIDI2MjA0LCAyNjIwOSwgMjYyMTYsIDI2MjI3LCAyNjIzMiwgMjYyMzYsIDI2MjQ2LCAyNjI1MiwgMjYyNTYsIDI2MjYxLCAKKyAgICAyNjI3MSwgMjYyODAsIDI2Mjg0LCAyNjI5MSwgMjYyOTksIDI2MzA2LCAyNjMxMiwgMjYzMTcsIDI2MzI1LCAyNjMzMiwgCisgICAgMjYzNDQsIDI2MzUzLCAyNjM1NywgMTMwNTMsIDI2MzY1LCAyNjM3NSwgMjYzNzksIDI1MDc3LCAyNjM5MCwgMjYzOTUsIAorICAgIDI2Mzk5LCAyNjQwNiwgMjY0MTMsIDIxOTc0LCAyNTcxMCwgMjY0MTgsIDI2NDIyLCAyNjQyNSwgMjI4NzAsIDI2NDMwLCAKKyAgICAyNjQ0NCwgMjY0NjAsIDI2NDc4LCAyNjQ5NywgMjY1MTQsIDI2NTMyLCAyMjg4OSwgMjY1NDksIDI2NTY5LCAyMjkwNiwgCisgICAgMjY1ODEsIDI2NTkzLCAxNTc0NSwgMjY2MDUsIDIyOTI2LCAyNjYxOSwgMjY2MzEsIDEwNTM2LCAyNjY0NSwgMjY2NTAsIAorICAgIDI2NjU1LCAyNjY2MCwgMjY2NjYsIDI2NjcyLCAyNjY3OCwgMjY2ODIsIDI2Njg5LCAyNjY5NCwgMjY3MDQsIDI2NzEwLCAKKyAgICAxMDE4MywgMjY3MTYsIDI2NzE4LCAyNjcyMywgMjY3MzEsIDI2NzM1LCAyNjE1NCwgMjY3NDEsIDI2NzQ4LCAxMTUyNCwgCisgICAgMTE1MzQsIDI2NzU1LCAyNjc2NSwgMjY3NzAsIDI2Nzc0LCAyNjc3NywgMjY3ODMsIDI2NzkxLCAyNjgwMywgMjY4MTMsIAorICAgIDI2ODI5LCAyNjg0MiwgMjY4NTYsIDE1NzYzLCAyNjg3MCwgMjY4NzcsIDI2ODgxLCAyNjg4NCwgMjY4ODksIDI2ODkzLCAKKyAgICAyNjkwMCwgMjY5MDcsIDI2OTE3LCAyNjkyMiwgMjY5MjcsIDI2OTMyLCAyNjk0MCwgMjY5NDgsIDI2OTU3LCAyNjk2MiwgCisgICAgOTU3MiwgMjY5NjYsIDI2OTY5LCAyNjk3MiwgMjY5NzcsIDI2OTg0LCAyNjk4OSwgMjcwMDUsIDI3MDEzLCAyNzAyMSwgCisgICAgOTQyMywgMjcwMjksIDI3MDM0LCAyNzAzOCwgMjcwNDQsIDI3MDUwLCAyNzA1MywgMjcwNTksIDI3MDcxLCAyNzA3OSwgCisgICAgMjcwODYsIDI3MDkyLCAyNzA5OSwgMjcxMTAsIDI3MTI0LCAyNzEzNywgMjcxNDYsIDI3MTU1LCAyNzE2NywgMjcxNzgsIAorICAgIDI3MTg4LCAyNzE5NywgMjcyMDYsIDI3MjE0LCAyNzIyNSwgNzkzOCwgMjcyMzIsIDI3MjM4LCAyNzI0MywgMjcyNDksIAorICAgIDI3MjU2LCAyNzI2NiwgMjcyNzYsIDI3Mjg1LCAyNzI5MSwgMjcyOTgsIDI3MzAzLCAyNzMxMCwgMjczMTgsIDI3MzI2LCAKKyAgICAyNzMzOCwgNjI0NiwgMjczNDUsIDI3MzU0LCAyNzM2MiwgMjczNjgsIDI3Mzc0LCAyNzM3OSwgMjczODMsIDI3Mzg2LCAKKyAgICAyNzM5MiwgMjczOTksIDI3NDA0LCAyNzQwOSwgMjc0MTMsIDI3NDI1LCAyNzQzNiwgMjc0NDUsIDI3NDUzLCAxNDk0NywgCisgICAgMjc0NTgsIDI3NDY0LCAyNzQ3MCwgMTE1MTcsIDg2MzUsIDI3NDc1LCAyNzQ3OSwgMjc0ODMsIDI3NDg2LCAyNzQ4OSwgCisgICAgMjc0OTUsIDI3NTAzLCAyNzUxMSwgMjc1MTUsIDI3NTE5LCAyNzUyNCwgMjc1MjcsIDI3NTM2LCAyNzU0MCwgMjc1NDgsIAorICAgIDI3NTU5LCAyNzU2MywgMjc1NjksIDI3NTc1LCAyNzU3OSwgMjc1ODUsIDI3NTkzLCAyNzYxNSwgMjc2MzksIDI3NjQ2LCAKKyAgICAyNzY1MywgMjc2NTksIDI3NjY3LCAyNzY3MywgMjc2NzgsIDI3Njg5LCAyNzcwNywgMjc3MTQsIDI3NzIyLCAyNzcyNiwgCisgICAgMjc3MzUsIDI3NzQ4LCAyNzc1NiwgMjc3NjgsIDI3Nzc5LCAyNzc4OSwgMjc4MDMsIDI3ODEyLCAyNzgyMCwgMjc4MzIsIAorICAgIDk0OTIsIDI3ODQzLCAyNzg1NCwgMjc4NjYsIDI3ODc2LCAyNzg4NSwgMjc4OTAsIDI3ODk0LCAyNzkwMiwgMjc5MTIsIAorICAgIDI3OTE3LCAyNzkyMSwgMjc5MjQsIDI3OTI3LCAyNzkzNSwgMjc5NDMsIDI3OTUyLCAyNzk2MiwgMjc5NzEsIDI3OTc3LCAKKyAgICAyNzk5MSwgMjY2MywgMjgwMTMsIDI4MDI0LCAyODAzMywgMjgwNDMsIDI4MDU1LCAyODA2NCwgMjgwNzMsIDI4MDgzLCAKKyAgICAyODA5MSwgMjgwOTksIDI4MTA4LCAyODExMywgMjgxMjQsIDI4MTI5LCAyODE0MCwgMjgxNDQsIDI4MTU0LCAyODE2MywgCisgICAgMjgxNzEsIDI4MTgxLCAyODE5MSwgMjgxOTksIDI4MjA4LCAyODIxNSwgMjgyMjMsIDI4MjMwLCAyODIzOSwgMjgyNDMsIAorICAgIDI4MjUxLCAyODI1OCwgMjgyNjYsIDI4MjczLCAyODI4NCwgMjgyOTksIDI4MzA2LCAyODMxMiwgMjgzMjIsIDI4MzMxLCAKKyAgICAyODMzNywgMjgzNDEsIDI4MzQ4LCAyODM1MiwgMTQwMzEsIDI4MzU4LCAyODM2MiwgMjgzNjcsIDI4Mzc0LCAyODM3OCwgCisgICAgMjgzODIsIDI4MzkwLCAyODM5OCwgMjg0MDQsIDI4NDEzLCAyODQyMCwgMjg0MjUsIDI4NDMwLCAyODQ0MCwgMjM1MDUsIAorICAgIDI4NDQ0LCAyODQ0NywgMjg0NTIsIDI4NDU3LCAyODQ2MiwgMjg0NjcsIDI4NDcyLCAyODQ3NywgMjg0ODIsIDI4NDg3LCAKKyAgICAyODQ5MywgMjg0OTgsIDI4NTAzLCAyODUwOSwgMTIxOCwgNzA0LCAyODUxNCwgMjg1MjMsIDIzNjQsIDI4NTMwLCAyODUzNSwgCisgICAgMjg1MzksIDI4NTQ1LCAxMjY3LCA1NDYsIDMxOCwgMjg1NTAsIDI4NTU5LCAyODU2NywgMjg1NzYsIDI4NTg0LCAyODU5NSwgCisgICAgMjg2MDQsIDI4NjEyLCAyODYxNiwgMjg2MTksIDI4NjI3LCAyODYzNSwgMjg2NDAsIDE0Nzc1LCAyODY0NiwgMjg2NTIsIAorICAgIDI4NjU4LCA1ODcyLCAyODY2MywgMjg2NjcsIDI4NjczLCAyODY3NywgMjg2ODQsIDE0NTUsIDI4NjkwLCAyODY5NywgOTU3OSwgCisgICAgMjg3MDEsIDI4NzExLCAyODcxOSwgMjg3MjUsIDI4NzM0LCAyODc0MiwgMjg3NDgsIDI4NzU2LCAyODc2MywgMTExMTAsIAorICAgIDI4NzY5LCAyODc3NiwgMjg3ODEsIDI4Nzg4LCAxNDk2LCAyMTQ3LCAyODc5NCwgMjg4MDAsIDI4ODA3LCAyODgxOCwgCisgICAgMjg4MjksIDI4ODM3LCAyODg0NCwgMjg4NTQsIDI4ODYzLCAyODg3MSwgMjg4ODAsIDI4ODg3LCAyODg5NCwgMjg5MDcsIAorICAgIDI4OTE4LCAxMjcyLCAyODkzNywgMjg5NDIsIDI4OTUwLCAzNTc1LCAyODk1NCwgMjg5NTksIDI4OTYzLCAxNDU5LCAyNDcwNiwgCisgICAgMjg5NzMsIDI4OTc3LCAyODk4MiwgMjg5ODYsIDM0OTMsIDI4OTkyLCAyOTAwMCwgMjkwMDcsIDI5MDE4LCAyOTAyNiwgCisgICAgMjkwMzQsIDM1NzYsIDI3OSwgMjkwMzksIDI5MDQ3LCAyOTA1NSwgMjkwNjIsIDI5MDY4LCAyOTA3MywgMjIxNiwgMjkwODAsIAorICAgIDI5MDg2LCAyNTk5MiwgMjYyMjIsIDI5MDkyLCAxMDYsIDI5MDk2LCAyOTEwMCwgMjkxMDYsIDYxNSwgOTMyOCwgMjkxMTEsIAorICAgIDI5MTE4LCAyOTEyNCwgMjMyNywgMjkxMjgsIDI5MTMyLCAxNTE4NywgMjkxMzUsIDI5MTQwLCAyOTE0NywgMjkxNTMsIAorICAgIDI5MTU4LCAyOTE2NiwgMjkxNzMsIDI5MTc5LCAyMjM1MSwgMjkxODMsIDI5MTg3LCAzNjQ2LCAxNjYyNSwgMjkxOTEsIAorICAgIDI5MTk2LCAyOTE5OSwgMjkyMDcsIDI5MjE1LCAyOTIyMCwgMjkyMjMsIDI5MjMwLCAyOTI0MCwgMjkyNTIsIDI5MjU3LCAKKyAgICAyOTI2MSwgMjkyNjksIDI5Mjc2LCAyOTI4MiwgMjkyODksIDI5Mjk2LCAyOTI5OSwgMjkzMDMsIDI5MzA3LCAxNDYzLCAKKyAgICAyOTMxNywgMjkzMTksIDI5MzI0LCAyOTMzMCwgMjkzMzYsIDI5MzQxLCAyOTM0NiwgMjkzNTEsIDI5MzU2LCAyOTM2MSwgCisgICAgMjkzNjYsIDI5MzcxLCAyOTM3NiwgMjkzODEsIDI5Mzg2LCAyOTM5MSwgMjkzOTYsIDI5NDAxLCAyOTQwNiwgMjk0MTIsIAorICAgIDI5NDE4LCAyOTQyNCwgMjk0MzAsIDI5NDM1LCAyOTQ0MCwgMjk0NDUsIDI5NDUxLCAyOTQ1NiwgMjk0NjEsIDI5NDY2LCAKKyAgICAyOTQ3MiwgMjk0NzcsIDI5NDgzLCAyOTQ4OCwgMjk0OTMsIDI5NDk4LCAyOTUwMywgMjk1MDksIDI5NTE0LCAyOTUyMCwgCisgICAgMjk1MjUsIDI5NTMwLCAyOTUzNSwgMjk1NDAsIDI5NTQ2LCAyOTU1MSwgMjk1NTcsIDI5NTYyLCAyOTU2NywgMjk1NzIsIAorICAgIDI5NTc3LCAyOTU4MiwgMjk1ODcsIDI5NTkyLCAyOTU5NywgMjk2MDIsIDI5NjA4LCAyOTYxNCwgMjk2MjAsIDI5NjI1LCAKKyAgICAyOTYzMCwgMjk2MzUsIDI5NjQwLCAyOTY0NiwgMjk2NTIsIDI5NjU4LCAyOTY2NCwgMjk2NzAsIDI5Njc2LCAyOTY4MSwgCisgICAgMjk2ODcsIDI5NjkyLCAyOTY5NywgMjk3MDIsIDI5NzA3LCAyOTcxMywgMjQ0MywgMjk3MTgsIDI0NTAsIDI0NTcsIDI3NTQsIAorICAgIDI5NzIzLCAyNDYzLCAyNDczLCAyOTcyOSwgMjk3MzMsIDI5NzM4LCAyOTc0MywgMjk3NDksIDI5NzU0LCAyOTc1OSwgCisgICAgMjk3NjMsIDI5NzY4LCAyOTc3NCwgMjk3NzksIDI5Nzg0LCAyOTc4OSwgMjk3OTUsIDI5ODAwLCAyOTgwNCwgMjk4MDgsIAorICAgIDI5ODEzLCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMywgMjk4MzksIDI5ODQ1LCAyOTg1MCwgMjk4NTQsIDI5ODU5LCAKKyAgICAyOTg2NSwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODQsIDI5ODg5LCAyOTg5MywgMjk4OTYsIDI5OTAxLCAyOTkwNiwgCisgICAgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTkzOCwgMjk5NDMsIDI5OTQ3LCAyOTk1MiwgMjk5NTcsIAorICAgIDI5OTYyLCAyOTk2NywgMjk5NzIsIDI5OTc2LCAyOTk4MSwgMjk5ODYsIDI5OTkxLCAyOTk5NSwgMjk5OTksIDMwMDAzLCAKKyAgICAzMDAwOCwgMzAwMTYsIDMwMDIxLCAzMDAyNywgMzAwMzMsIDMwMDM5LCAzMDA0NCwgMzAwNDgsIDMwMDUxLCAzMDA1NiwgCisgICAgMzAwNjEsIDMwMDY1LCAzMDA3MCwgMzAwNzQsIDMwMDc5LCAzMDA4MywgMzAwODYsIDMwMDkxLCAxNzMwMiwgMzAwOTYsIAorICAgIDMwMTAxLCAzMDEwNiwgMzAxMTQsIDIxMjgwLCAyODY5NCwgOTAyNiwgMzAxMTksIDMwMTI0LCAzMDEyOCwgMzAxMzMsIAorICAgIDMwMTM3LCAzMDE0MSwgMzAxNDYsIDMwMTUwLCAzMDE1MywgMzAxNTYsIDMwMTYwLCAzMDE2NSwgMzAxNjksIDMwMTc3LCAKKyAgICAzMDE4MSwgMzAxODQsIDMwMTg5LCAzMDE5MywgMzAxOTcsIDMwMjAyLCAzMDIwNywgMzAyMTEsIDMwMjE3LCAzMDIyMiwgCisgICAgMzAyMjcsIDMwMjM0LCAzMDI0MSwgMzAyNDUsIDMwMjQ4LCAzMDI1NCwgMzAyNjMsIDMwMjcwLCAzMDI3OCwgMzAyODUsIAorICAgIDMwMjg5LCAzMDI5NCwgMzAyOTgsIDMwMzAyLCAzMDMwOCwgMzAzMTQsIDMwMzE4LCAzMDMyNCwgMzAzMjksIDMwMzM0LCAKKyAgICAzMDMzOCwgMzAzNDUsIDMwMzUxLCAzMDM1NywgMzAzNjMsIDMwMzY5LCAzMDM3NiwgMzAzODIsIDMwMzg4LCAzMDM5NCwgCisgICAgMzA0MDAsIDMwNDA2LCAzMDQxMiwgMzA0MTgsIDMwNDI1LCAzMDQzMSwgMzA0MzgsIDMwNDQ0LCAzMDQ1MCwgMzA0NTYsIAorICAgIDMwNDYyLCAzMDQ2OCwgMzA0NzQsIDMwNDgwLCAzMDQ4NiwgMzA0OTIsIDExNDE4LCAzMDQ5OCwgMzA1MDMsIDMwNTA4LCAKKyAgICAzMDUxMSwgMzA1MTksIDMwNTI0LCAzMDUzMywgMzA1MzksIDMwNTQ0LCAzMDU0OSwgMzA1NTQsIDMwNTU4LCAzMDU2MywgCisgICAgMzA1NjgsIDMwNTczLCAzMDU3OCwgMzA1ODMsIDMwNTkwLCAzMDU5NywgMzA2MDMsIDMwNjA5LCAzMDYxNCwgMTYzMDMsIAorICAgIDMwNjIxLCAzMDYyNywgMzA2MzQsIDMwNjQwLCAzMDY0NiwgMzA2NTEsIDMwNjU5LCAzMDY2NCwgMTYwODIsIDMwNjY4LCAKKyAgICAzMDY3MywgMzA2NzgsIDMwNjg0LCAzMDY4OSwgMzA2OTQsIDMwNjk4LCAzMDcwMywgMzA3MDgsIDMwNzE0LCAzMDcxOSwgCisgICAgMzA3MjQsIDMwNzI4LCAzMDczMywgMzA3MzgsIDMwNzQyLCAzMDc0NywgMzA3NTIsIDMwNzU3LCAzMDc2MSwgMzA3NjYsIAorICAgIDMwNzcxLCAzMDc3NiwgMzA3ODAsIDMwNzg0LCAxNTI5MywgMzA3ODgsIDMwNzk3LCAzMDgwMywgMzA4MDksIDMwODE4LCAKKyAgICAzMDgyNiwgMzA4MzUsIDMwODQzLCAzMDg0OCwgMzA4NTIsIDMwODU5LCAzMDg2NSwgMzA4NjksIDMwODcyLCAzMDg3NywgCisgICAgMzA4ODYsIDMwODk0LCAzMDg5OSwgMTQ5NSwgMzA5MDUsIDMwOTA4LCAzMDkxMiwgMjI0MjQsIDIyNDMwLCAzMDkxOCwgCisgICAgMzA5MjIsIDMwOTMzLCAzMDk0NCwgMzA5NTUsIDMwOTY3LCAzMDk3NCwgMzA5ODEsIDMwOTg2LCAzMDk5MCwgNTkwOSwgNzU1LCAKKyAgICAyMTI3OSwgMzA5OTgsIDMxMDAzLCAzMTAwNywgMzEwMTIsIDMxMDE2LCAzMTAyMiwgMzEwMjcsIDMxMDMzLCAzMTAzOCwgCisgICAgMzEwNDQsIDMxMDQ5LCAzMTA1NSwgMzEwNjAsIDMxMDY2LCAzMTA3MiwgMzEwNzgsIDMxMDgzLCAzMTAzOSwgMzEwNDUsIAorICAgIDMxMDg3LCAzMTA5MiwgMzEwOTgsIDMxMTAzLCAzMTEwOSwgMzExMTQsIDMxMTIwLCAzMTEyNSwgMzEwNTAsIDEwNDIxLCAKKyAgICAzMTEyOSwgMzEwNjEsIDMxMDY3LCAzMTA3MywgMjgzMSwgMzQyMywgMzExMzUsIDMxMTM4LCAzMTE0NCwgMzExNTAsIAorICAgIDMxMTU2LCAzMTE2MywgMzExNjksIDMxMTc1LCAzMTE4MSwgMzExODcsIDMxMTkzLCAzMTE5OSwgMzEyMDUsIDMxMjExLCAKKyAgICAzMTIxNywgMzEyMjMsIDMxMjI5LCAzMTIzNSwgMzEyNDIsIDMxMjQ4LCAzMTI1NCwgMzEyNjAsIDMxMjY2LCAzMTI3MiwgCisgICAgMzEyNzUsIDMxMjgwLCAzMTI4MywgMzEyOTAsIDMxMjk4LCAzMTMwMywgMzEzMDgsIDMxMzE0LCAzMTMxOSwgMzEzMjQsIAorICAgIDMxMzI4LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MCwgMzEzNTUsIDMxMzYxLCAzMTM2NiwgMzEzNzIsIDMxMzc4LCAKKyAgICAzMTM4MiwgMzEzODcsIDMxMzkyLCAzMTM5NywgMzE0MDIsIDMxNDA2LCAzMTQxMSwgMzE0MTYsIDMxNDIxLCAzMTQyNywgCisgICAgMzE0MzMsIDMxNDM5LCAzMTQ0NSwgMzE0NTAsIDMxNDU0LCAzMTQ1NywgMzE0NjMsIDMxNDY5LCAzMTQ3OCwgMzE0ODYsIAorICAgIDMxNDkzLCAzMTQ5OCwgMzE1MDIsIDMxNTA2LCAzMTUxMSwgMTUxNDYsIDMxNTE2LCAzMTUyNCwgMzE1MzAsIDM2ODMsIAorICAgIDEzNzcsIDMxNTM1LCAzMTUzOSwgODAwNSwgMzE1NDUsIDMxNTUxLCAzMTU1OCwgODAxNCwgMzE1NjIsIDMxNTY4LCAzMTU3NSwgCisgICAgMzE1ODEsIDMxNTkwLCAzMTU5OCwgMzE2MTAsIDMxNjE0LCAzMTYyMSwgMzE2MjcsIDMxNjMxLCAzMTYzNCwgMzE2NDMsIAorICAgIDMxNjUxLCAzMTA0MCwgMzE2NTYsIDMxNjY2LCAzMTY3NiwgMzE2ODYsIDMxNjkyLCAzMTY5NywgMzE3MDcsIDMxNzEyLCAKKyAgICAzMTcyNSwgMzE3MzksIDMxNzUwLCAzMTc2MiwgMzE3NzQsIDMxNzg4LCAzMTgwMSwgMzE4MTMsIDMxODI1LCAxNDYwMCwgCisgICAgMzE4MzksIDMxODQ0LCAzMTg0OSwgMzE4NTMsIDMxODU3LCAzMTg2MSwgMTc4MCwgMjcxNzYsIDMxODY1LCAzMTg3MCwgCisgICAgMzEwODgsIDMxODc1LCAzMTg3OCwgMzE4ODMsIDMxODg4LCAzMTg5MywgMzE4OTksIDMxOTA1LCAxMDA5OCwgMzE5MTAsIAorICAgIDMxOTE3LCAxNTY5NywgMzE5MjMsIDMxOTI4LCAzMTkzMywgMzE5MzcsIDMxOTQyLCAzMTk0NywgMzEwOTMsIDMxOTUyLCAKKyAgICAzMTk1NywgMzE5NjIsIDMxOTY4LCAzMTA5OSwgMzE5NzMsIDMxOTc2LCAzMTk4MywgMzE5OTEsIDMxOTk3LCAzMjAwMywgCisgICAgMzIwMDksIDMyMDIwLCAzMjAyNSwgMzIwMzIsIDMyMDM5LCAzMjA0NiwgMzIwNTQsIDMyMDYzLCAzMjA3MiwgMzIwNzgsIAorICAgIDMyMDg0LCAzMjA5MiwgMzExMDQsIDMyMDk3LCAzMjEwMywgMzIxMDksIDMxMTEwLCAzMjExNCwgMzIxMTksIDMyMTI3LCAKKyAgICAzMjEzNSwgMzIxNDEsIDMyMTQ4LCAzMjE1NCwgMzIxNjEsIDMyMTY4LCAzMjE3NCwgMzIxODIsIDMyMTkyLCAzMjE5OSwgCisgICAgMzIyMDQsIDMyMjEwLCAzMjIxNSwgMzIyMjAsIDMyMjI3LCAzMjIzNiwgMzIyNDQsIDMyMjQ5LCAzMjI1NSwgMzIyNjIsIAorICAgIDMyMjcwLCAzMjI3NiwgMzIyODEsIDMyMjg3LCAzMjI5NiwgMjc5NTcsIDMyMzAzLCAzMjMwNywgMzIzMTIsIDMyMzIxLCAKKyAgICAzMjMyNiwgMzIzMzEsIDMyMzM2LCAxMjQwNSwgMzIzNDQsIDMyMzQ5LCAzMjM1NCwgMzIzNTksIDMyMzYzLCAzMjM2OCwgCisgICAgMzIzNzMsIDMyMzgwLCAzMjM4NSwgMzIzOTAsIDMyMzk1LCAzMTExNSwgMjEyMTYsIDMyNDAxLCAyNTE5LCAyNDQsIDMyNDA0LCAKKyAgICAzMjQwNywgMzI0MTEsIDMyNDE1LCAzMjQyNSwgMzI0MzMsIDMyNDM3LCAzMjQ0NCwgMzI0NTEsIDMyNDU1LCAzMjQ1OCwgCisgICAgMzI0NjQsIDMyNDcyLCAzMjQ4MCwgMzI0ODQsIDMyNDg4LCAzMjQ5MSwgMzI0OTgsIDMyNTAyLCAzMjUwNiwgMzI1MTMsIAorICAgIDMyNTIxLCAzMTA1MSwgMzI1MjgsIDMyNTM2LCAxMDE1OCwgNjY0LCAzMDgsIDMyNTQ4LCAzMjU1MywgMzI1NTgsIDMyNTY0LCAKKyAgICAzMjU2OSwgMzI1NzQsIDM3MDQsIDMyNTc5LCAzMjU4MiwgMzI1ODcsIDMyNTkyLCAzMjU5NywgMzI2MDIsIDMyNjA3LCAKKyAgICAzMjYxNCwgMjI1MjksIDMyNjE5LCAzMjYyNCwgMzI2MjksIDMyNjM0LCAzMjYzOSwgMzI2NDUsIDMyNjUwLCAzMjY1NiwgCisgICAgMzEyODYsIDMyNjYyLCAzMjY2NywgMzI2NzMsIDMyNjc5LCAzMjY4OSwgMzI2OTQsIDMyNjk5LCAzMjcwMywgMzI3MDgsIAorICAgIDMyNzEzLCAzMjcxOCwgMzI3MjMsIDMyNzM2LCAzMjc0MSwgMjIzMDIsIDE2NzA1LCAzNzEwLCAzMjc0NSwgMzI3NTAsIAorICAgIDMyNzU1LCAzMjc2MSwgMzI3NjYsIDMyNzcxLCAzMjc3NSwgMzI3ODAsIDMyNzg1LCAzMjc5MSwgMzI3OTYsIDMyODAxLCAKKyAgICAxMzgyLCAzMjgwNSwgMzI4MTAsIDMyODE1LCAzMjgyMCwgMzI4MjQsIDMyODI5LCAzMjgzNCwgMzI4MzksIDMyODQ1LCAKKyAgICAzMjg1MSwgMzI4NTYsIDMyODYwLCAzMjg2NCwgMzI4NjksIDMyODc0LCAzMjg3OSwgMzI4ODMsIDMyODkxLCAzMjg5NSwgCisgICAgMzI5MDEsIDMyOTA1LCAzMjkxMiwgMTY0OTgsIDMxMDYyLCAzMjkxOCwgMzI5MjUsIDMyOTMzLCAzMjk0MCwgMzI5NDYsIAorICAgIDMyOTU5LCAzMjk3MSwgMzI5NzcsIDMyOTgxLCAyNzczLCAzMjk4NSwgMzI5ODksIDMyNDkzLCAzMjk5OCwgMzMwMDksIAorICAgIDMzMDE0LCAzMzAxOSwgMzMwMjQsIDMzMDI4LCAzMzAzMywgMjI0MzUsIDMzMDM3LCAzMzA0MSwgMzMwNDYsIDMxMDY4LCAKKyAgICAyMTMwMCwgMzMwNTAsIDMzMDU1LCAzMzA2MSwgMzMwNjYsIDMzMDcwLCAzMzA3NCwgMzMwNzcsIDMzMDgxLCAzMzA4NywgCisgICAgMzMwOTgsIDMzMTEwLCAzMTA3NCwgMzMxMTUsIDMzMTE4LCAzMzEyMiwgMzQ3LCAzMzEyNywgMzMxMzIsIDMzMTM3LCAKKyAgICAzMzE0MiwgMzMxNDcsIDMzMTUyLCAzMzE1OCwgMzMxNjMsIDMzMTY4LCAzMzE3NCwgMzMxNzksIDMzMTg1LCAzMzE5MCwgCisgICAgMzMxOTYsIDMzMjAxLCAzMzIwNiwgMzMyMTEsIDMzMjE2LCAzMzIyMSwgMzMyMjYsIDMzMjMxLCAzMzIzNiwgMzMyNDIsIAorICAgIDMzMjQ3LCAzMzI1MiwgMzMyNTcsIDMzMjYyLCAzMzI2NywgMzMyNzIsIDMzMjc3LCAzMzI4MywgMzMyODksIDMzMjk0LCAKKyAgICAzMzI5OSwgMzMzMDQsIDMzMzA5LCAzMzMxNCwgMzMzMTksIDMzMzI0LCAzMzMyOSwgMzMzMzQsIDMzMzM5LCAzMzM0NCwgCisgICAgMzMzNDksIDMzMzU0LCAzMzM1OSwgMzMzNjQsIDMzMzY5LCAzMzM3NCwgMzMzNzksIDMzMzg1LCAzMTMsIDI2LCAzMzM5MCwgCisgICAgMzMzOTQsIDMzMzk4LCAzMzQwNiwgMzM0MTAsIDMzNDE0LCAzMzQxNywgMzM0MjAsIDMzNDIyLCAzMzQyNywgMzM0MzEsIAorICAgIDMzNDM2LCAzMzQ0MCwgMzM0NDUsIDMzNDQ5LCAzMzQ1NCwgMzM0NTgsIDMzNDYxLCAzMzQ2MywgMzM0NjcsIDMzNDcyLCAKKyAgICAzMzQ3NiwgMzM0ODcsIDMzNDkwLCAzMzQ5MiwgMzM0OTYsIDMzNTA4LCAzMzUxNywgMzM1MjEsIDMzNTI1LCAzMzUzMSwgCisgICAgMzM1MzYsIDMzNTQ1LCAzMzU1MSwgMzM1NTYsIDMzNTYxLCAzMzU2NSwgMzM1NzAsIDMzNTc3LCAzMzU4MiwgMzM1ODgsIAorICAgIDMzNTkzLCAzMzU5NywgMzM2MDQsIDI1NzE4LCAyNTcyOCwgMzM2MDgsIDMzNjEzLCAzMzYxOCwgMzM2MjMsIDMzNjMwLCAKKyAgICAzMzYzNCwgMzM2NDEsIDgxMTMsIDMzNjQ3LCAzMzY1NiwgMzM2NjQsIDMzNjc5LCAzMzY5MywgMzM3MDEsIDMzNzEyLCAKKyAgICAzMzcyMSwgMzM3MjYsIDcyMjcsIDMzNzM2LCAzMzc0MSwgMzM3NDYsIDMzNzUwLCAzMzc1MywgMzM3NTcsIDMzNzYyLCAKKyAgICAzMzc2NiwgMzM3NzMsIDMzNzc4LCAzMzc4MywgODkxMiwgMzM3OTMsIDMzNzk1LCAzMzc5OCwgMzM4MDIsIDMzODA4LCAKKyAgICAzMzgxMiwgMzM4MTcsIDMzODIyLCAzMzgyOCwgMzM4MzMsIDMzODM5LCAzMzg0NCwgMzM4NTQsIDMzODYzLCAzMzg3MSwgCisgICAgMzM4NzYsIDMzODgyLCAzMzg4NywgMzM4OTQsIDMzODk4LCAzMzkwNiwgMzM5MTMsIDMzOTI2LCAzMzkzNCwgMzM5MzgsIAorICAgIDMzOTQ4LCAzMzk1MywgMzM5NTcsIDMzOTY1LCAzMzk3MywgMzM5NzcsIDMzOTg2LCAzMzk5MiwgMzM5OTcsIDM0MDA1LCAKKyAgICAzNDAxNSwgMzQwMjQsIDM0MDMzLCAzNDA0MiwgMzQwNTMsIDM0MDYxLCAzNDA3MiwgMzQwODEsIDM0MDg4LCAzNDA5NCwgCisgICAgMzQwOTksIDM0MTEwLCAzNDExNSwgMzQxMTksIDM0MTIyLCAzNDEyNiwgMzQxMzQsIDM0MTQwLCAzNDE0OCwgMzQxNTUsIAorICAgIDM0MTYxLCAzNDE2NiwgMzQxNzIsIDI0MTgsIDM0MTc2LCAzNDE3OCwgMzQxODMsIDM0MTg4LCAzNDE5MywgMzQxOTYsIAorICAgIDM0MTk4LCAzNDIwMiwgMzQyMDUsIDM0MjEyLCAzNDIxNiwgOTg5MSwgMzQyMjAsIDM0MjI2LCAzNDIzNiwgMzQyNDEsIAorICAgIDM0MjQ3LCAzNDI1MSwgMzQyNTYsIDM0MjY5LCAyNjEwNCwgMzQyNzUsIDM0Mjg0LCAxNzQ3NSwgMzQyOTEsIDM0MzAwLCAKKyAgICAzMTY3MiwgMzQzMDgsIDM0MzEzLCAzNDMxNywgMzQzMjUsIDM0MzMyLCAzNDMzNywgMzQzNDEsIDM0MzQ2LCAzNDM1MCwgCisgICAgMzQzNTgsIDM0MzY0LCAzNDM3MCwgMzQzNzUsIDM0Mzc5LCAzNDM4MiwgMzQzODcsIDM0NDAwLCAzNDQxNiwgMjI5OTYsIAorICAgIDM0NDMzLCAzNDQ0NSwgMzQ0NjIsIDM0NDc0LCAzNDQ4OCwgMjMwMTMsIDIzMDMyLCAzNDUwMCwgMzQ1MTIsIDI2ODAsIAorICAgIDM0NTI2LCAzNDUzMSwgMzQ1MzYsIDM0NTQxLCAzNDU0NSwgMzQ1NTIsIDM0NTY0LCAzNDU3MCwgMzQ1NzMsIDM0NTg0LCAKKyAgICAzNDU5NSwgMzQ2MDAsIDMyMDg5LCA2OTUsIDM0NjA0LCAzNDYwOCwgMzQ2MTIsIDM0NjE1LCAzNDYyMCwgMzQ2MjUsIAorICAgIDM0NjMxLCAzNDYzNiwgMzQ2NDEsIDM0NjQ3LCAzNDY1MywgMzQ2NTgsIDM0NjYyLCAzNDY2NywgMzQ2NzIsIDM0Njc3LCAKKyAgICAzNDY4MSwgMzQ2ODQsIDM0NjkwLCAzNDY5NSwgMzQ3MDAsIDM0NzA1LCAzNDcwOSwgMzQ3MTQsIDM0NzIwLCAzNDcyOCwgCisgICAgMjYzMzcsIDM0NzMzLCAzNDczOCwgMzQ3NDUsIDM0NzUxLCAzNDc1NywgMzQ3NjIsIDM0NzcwLCAyMjUzOCwgMzQ3NzcsIAorICAgIDM0NzgyLCAzNDc4NywgMzQ3OTIsIDM0Nzk2LCAzNDc5OSwgMzQ4MDQsIDM0ODA4LCAzNDgxMiwgMzQ4MTksIDM0ODI1LCAKKyAgICAzNDgzMSwgMzQ4MzcsIDM0ODQ0LCAzNDg0OSwgMzQ4NTUsIDMzOTY4LCAzNDg1OSwgMzQ4NjMsIDM0ODY4LCAzNDg4MSwgCisgICAgMzQ4ODYsIDM0ODkyLCAzNDkwMCwgMzQ5MDcsIDM0OTE1LCAzNDkyNSwgMzQ5MzEsIDM0OTM3LCAzNDk0MywgMzQ5NDcsIAorICAgIDM0OTU2LCAzNDk2NCwgMzQ5NzEsIDM0OTc2LCAzNDk4MSwgMTA0NDQsIDM0OTg2LCAzNDk5NCwgMzUwMDEsIDM1MDA3LCAKKyAgICAzNTAxNywgMzUwMjIsIDM1MDI4LCAzNTAzNiwgMzYwOCwgMzUwNDMsIDM1MDUwLCAzNjE0LCAzNTA1NCwgMzUwNTksIAorICAgIDM1MDcwLCAzNTA3NywgMzUwODMsIDM1MDkyLCAzNTA5NiwgNDAxNSwgMzUwOTksIDM1MTA2LCAzNTExMiwgMzUxMTgsIAorICAgIDM1MTI2LCAzNTEzNiwgMjkwNjMsIDM1MTQzLCAzNTE1MSwgMzUxNTYsIDM1MTYyLCAzNTE2NywgMjU5NjQsIDM1MTczLCAKKyAgICAzNTE4MCwgMzUxODYsIDM1MTk1LCAyMzY3NywgMzUyMDIsIDM1MjA3LCAzNTIxMSwgMzUyMTksIDM1MjI3LCA5NjA3LCAKKyAgICA1ODk1LCAzNTIzNCwgMzUyMzgsIDM1MjQwLCAzNTI0NCwgMzUyNDksIDM1MjUxLCAzNTI1NywgMzUyNjIsIDM1MjY3LCAKKyAgICAzNTI3NCwgMzI2MTAsIDM1MjgwLCAzNTI4NSwgMzUyODksIDM1Mjk0LCAzNTI5OCwgMzUzMDcsIDM1MzExLCAzNTMxNywgCisgICAgMzUzMjQsIDM1MzMwLCAzNTMzNywgMzUzNDIsIDM1MzUxLCAzNTM1NiwgMzUzNjAsIDM1MzY1LCAzNTM3MiwgMzUzODAsIAorICAgIDM1Mzg4LCAzNTM5MywgMjEzNTYsIDM1Mzk3LCAzNTQwMCwgMzU0MDQsIDM1NDA4LCAzNTQxMiwgMzU0MTUsIDM1NDE3LCAKKyAgICAzNTQyNSwgMzU0MjksIDM1NDM2LCAzNTQ0MCwgMzU0NDQsIDM1NDUyLCAzNTQ1OSwgMzU0NjksIDM1NDczLCAzNTQ3NywgCisgICAgMzU0ODUsIDM1NDkzLCAzNTQ5OSwgMzU1MDQsIDM1NTEzLCAxMzM1NywgMzU1MTksIDM1NTI4LCAzNTUzMywgMzU1NDAsIAorICAgIDM1NTQ4LCAzNTU1NiwgMzU1NjQsIDM1NTcxLCAzNTU3OCwgMzU1ODUsIDM1NTkyLCAzNTU5OSwgMzU2MDQsIDM1NjEwLCAKKyAgICAzNTYyNywgMzU2MzUsIDM1NjQ1LCAzNTY1MywgMzU2NjAsIDQwNywgMzU2NjQsIDM1NjcwLCAzNTY3NCwgMzU2NzksIAorICAgIDMzNzE3LCAzNTY4NSwgMzU2ODgsIDM1NjkyLCAzNTcwMCwgMzYxOSwgMzU3MDgsIDM1NzE0LCAzNTcyMCwgMzU3MjksIAorICAgIDM1NzM5LCAzNTc0NiwgMzU3NTIsIDM2MjUsIDM2MzEsIDM1NzYxLCAzNTc2OCwgMzU3NzYsIDM1NzgxLCAzNTc4NSwgCisgICAgMzU3OTIsIDM1ODAwLCAzNTgwNywgMzU4MTMsIDM1ODIyLCAzNTgzMiwgMzU4MzgsIDM1ODQ2LCAzNTg1NSwgMzU4NjIsIAorICAgIDM1ODcwLCAzNTg3NywgMjIwMzIsIDM1ODgxLCAzNTg4OCwgMzU4OTQsIDM1OTA0LCAzNTkxMywgMzU5MjQsIDM1OTI4LCAKKyAgICAzNTkzOCwgMzU5NDQsIDM1OTUxLCAzNTk1OSwgMzU5NjgsIDM1OTc3LCAzNTk4NywgMzU5OTgsIDM2MDA1LCAzNjAxMCwgCisgICAgMzYwMTcsIDMwMjksIDM2MDI1LCAzNjAzMSwgMzYwMzYsIDM2MDQyLCAzNjA0OCwgMzYwNTMsIDM2MDY2LCAzNjA3OSwgCisgICAgMzYwOTIsIDM2MDk5LCAzNjEwNSwgMzYxMTMsIDM2MTIxLCAzNjEyNiwgMzYxMzAsIDE0NjksIDM2MTM0LCAzNjEzOSwgCisgICAgMzYxNDQsIDM2MTQ5LCAzNjE1NCwgMzYxNjAsIDM2MTY1LCAzNjE3MCwgMzYxNzUsIDM2MTgwLCAzNjE4NSwgMzYxOTAsIAorICAgIDM2MTk1LCAzNjIwMSwgMzYyMDcsIDM2MjEyLCAzNjIxNywgMzYyMjMsIDM2MjI4LCAzNjIzMywgMzYyMzgsIDM2MjQ0LCAKKyAgICAzNjI0OSwgMzYyNTQsIDM2MjU5LCAzNjI2NCwgMzYyNzAsIDM2Mjc1LCAzNjI4MCwgMzYyODYsIDM2MjkxLCAzNjI5NiwgCisgICAgMzYzMDEsIDM2MzA2LCAzNjMxMSwgMzYzMTcsIDM2MzIyLCAzNjMyOCwgMzYzMzMsIDM2MzM5LCAzNjM0NCwgMzYzNDksIAorICAgIDM2MzU0LCAzNjM2MCwgMzYzNjYsIDM2MzcyLCAzNjM3OCwgMzYzODQsIDM2MzkwLCAzNjM5NiwgMzY0MDIsIDM2NDA3LCAKKyAgICAzNjQxMiwgMzY0MTgsIDM2NDIzLCAzNjQyOCwgMzY0MzMsIDM2NDM4LCAzNjQ0MywgMzY0NDgsIDM2NDUzLCAzNjQ1OSwgCisgICAgMzY0NjQsIDM2NDY5LCAzNjQ3NSwgMzY0ODEsIDEwMSwgMzY0ODYsIDM2NDg4LCAzNjQ5MiwgMzY0OTYsIDM2NTAwLCAKKyAgICAzNjUwNSwgMzY1MDksIDk1MjgsIDM2NTEzLCAzNjUxOSwgMTc0MSwgNjI4MCwgMzY1MjUsIDM2NTI4LCAzNjUzMywgMzY1MzcsIAorICAgIDM2NTQyLCAzNjU0NiwgMzY1NTAsIDM2NTU1LCAxMDI0NSwgMzY1NTksIDM2NTYzLCAzNjU2NywgMzY1NzEsIDE1Mzg1LCAKKyAgICAzNjU3NiwgMzY1ODAsIDM2NTg1LCAzNjU5MCwgMzY1OTUsIDM2NTk5LCAzNjYwNiwgMjYxMjgsIDM2NjEyLCAzNjYxNSwgCisgICAgMzY2MTksIDM2NjI0LCAzNjYzMCwgMzY2MzQsIDM2NjQyLCAzNjY0OCwgMzY2NTMsIDM2NjU3LCAzNjY2MywgMzY2NjcsIAorICAgIDM2NjcxLCAzNDYyLCAzNDY3LCAyOTI1NSwgMzY2NzQsIDM2Njc4LCAzNjY4MiwgMzY2ODYsIDM2NjkwLCAzNjY5OCwgCisgICAgMzY3MDUsIDM2NzA5LCAzNjcxNiwgMzY3MjEsIDMxNywgMzY3MjYsIDM2NzMwLCAzNjczNiwgMzY3NDgsIDM2NzU0LCAKKyAgICAzNjc2MCwgMzY3NjQsIDM2NzcwLCAzNjc3OSwgMzY3ODMsIDM2Nzg3LCAzNjc5MiwgMzY3OTgsIDM2ODAzLCAzNjgwNywgCisgICAgMzY4MTIsIDM2ODE2LCAzNjgyMCwgMzY4MjcsIDM2ODMzLCAzNjgzOCwgMzY4NTMsIDM2ODY4LCAzNjg4MywgMzY4OTksIAorICAgIDM2OTE3LCAxMDE5NSwgMzY5MzEsIDM2OTM4LCAzNjk0MiwgMzY5NDUsIDM2OTU0LCAzNjk1OSwgMzY5NjMsIDM2OTcxLCAKKyAgICAzMzkxOSwgMzY5NzksIDM2OTgzLCAzNjk5MywgMzcwMDQsIDI5MjI1LCAzNzAxNywgMzcwMjEsIDM3MDMwLCAzNzAzOCwgCisgICAgOTc4NSwgMTQ5MTMsIDM3MDQyLCAyMjQ0NywgMzcwNDUsIDMwMTczLCAzNzA1MCwgOTc4NCwgMzcwNTUsIDM3MDYxLCAKKyAgICAzNzA2NiwgMzcwNzIsIDM3MDc3LCAzNzA4MywgMzcwODgsIDM3MDk0LCAzNzA5OSwgMzcxMDUsIDM3MTExLCAzNzExNywgCisgICAgMzcxMjIsIDM3MDc4LCAzNzA4NCwgMzcwODksIDM3MDk1LCAzNzEwMCwgMzcxMDYsIDM3MTEyLCA4MTI2LCAzODc0LCAKKyAgICAzNzEyNiwgMzcxMzQsIDM3MTM4LCAzNzE0MSwgMzcxNDUsIDM3MTUwLCAzNzE1NSwgMzcxNjEsIDM3MTY3LCAzNzE3MiwgCisgICAgMzcxNzYsIDI1OTc2LCAzNzE4MCwgMzcxODQsIDM3MTkwLCAzNzE5NCwgOTA0OSwgMzcyMDMsIDM3MjEwLCAzNzIxNCwgCisgICAgMTE4NzUsIDM3MjIxLCAzNzIyNywgMzcyMzIsIDM3MjM5LCAzNzI0NiwgMzcyNTMsIDI4NTcxLCA4MDQ5LCAzNzI2MCwgCisgICAgMzcyNjcsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIDM3MjkyLCAzNzMwMywgMzczMDksIDM3MzE0LCAzNzMxOSwgMzczMjQsIAorICAgIDM3MzMxLCAzNzA3OSwgMzczMzUsIDM3MzQ1LCAzNzM1NiwgMzczNjIsIDM3MzY3LCAzNzM3MiwgMzczNzcsIDM3MzgyLCAKKyAgICAzNzM4NywgMzczOTEsIDM3Mzk1LCAzNzQwMSwgMzc0MDksIDIzMTksIDg2NSwgMTAyNjEsIDEwMjczLCAxMDI3OCwgMTAyODQsIAorICAgIDM3NDE4LCAxMDI4OSwgMTAyOTQsIDEwMzAwLCAzNzQyMywgMzc0MzMsIDM3NDM3LCAxMDMwNSwgMzc0NDIsIDE2OTAzLCAKKyAgICAzNzQ0NSwgMzc0NTAsIDM3NDU0LCAzNzQ1OSwgMzc0NjQsIDM3NDcxLCAzNzQ3OCwgMzc0ODIsIDM3NDg1LCAzNzQ5MywgCisgICAgMTAyMDgsIDM3NTAwLCAzNzUwMywgMzc1MDksIDM3NTE5LCA1OTI5LCAzNzUyOCwgMzc1MzIsIDM3NTQwLCAzNzU0NCwgCisgICAgMzc1NTQsIDM3NTYwLCAzNzU3MSwgMzc1NzcsIDM3NTgzLCAzNzU4OCwgMzc1OTQsIDM3NjAwLCAzNzYwNiwgMzc2MTEsIAorICAgIDM3NjE0LCAzNzYyMSwgMzc2MjcsIDM3NjMyLCAzNzYzOSwgMzc2NDYsIDM3NjUwLCAzNzY2MCwgMzc2NzMsIDM3NjgyLCAKKyAgICAzNzY5MSwgMzc3MDIsIDM3NzE1LCAzNzcyNiwgMzc3MzUsIDM3NzQ2LCAzNzc1MSwgMzc3NjAsIDM3NzY1LCAxMDMxMCwgCisgICAgMzc3NzEsIDM3Nzc4LCAzNzc4NiwgMzc3OTEsIDM3Nzk1LCAzNzgwMiwgMzc4MDksIDM4MjksIDE2LCAzNzgxMywgMzc4MTgsIAorICAgIDE2NzU3LCAzNzgyMiwgMzc4MjUsIDM3ODI4LCAyODA3NywgMzc4MzIsIDI4NTgwLCAzNzg0MCwgMzc4NDQsIDM3ODQ4LCAKKyAgICAzNzg1MSwgMzc4NTcsIDM3MTAxLCAzNzg2MywgMzc4NzEsIDM3ODc3LCAzNzg4NCwgMjgwNjAsIDM3ODg4LCAyODI1NCwgCisgICAgMzc4OTIsIDM3OTAxLCAzNzkwNywgMzc5MTMsIDM3OTE4LCAzNzkyMiwgMzc5MjgsIDM3OTMyLCAzNzk0MCwgMzc5NDgsIAorICAgIDI2MTk0LCAzNzk1NCwgMzc5NjEsIDM3OTY3LCAzNzk3MiwgMzc5NzcsIDM3OTgxLCAzNzk4NywgMzc5OTIsIDM3OTk4LCAKKyAgICA0MDU2LCA3OTEsIDM4MDA1LCAzODAwOSwgMzgwMTIsIDE1Mjc1LCAzODAyNCwgMzU4NTEsIDM4MDM1LCAzODAzOCwgMzgwNDUsIAorICAgIDM4MDQ5LCAzODA1NSwgMzgwNTksIDM4MDY1LCAzODA3MCwgMzgwNzYsIDM4MDgxLCAzODA4NiwgMzgwOTAsIDM4MDk0LCAKKyAgICAzODA5OSwgMzgxMDQsIDM4MTE0LCAzODEyMCwgMzgxMzMsIDM4MTM5LCAzODE0NSwgMzgxNTIsIDM4MTU3LCAzODE2MywgCisgICAgMzgxNjgsIDE2NjQzLCAxNDcyLCAxMDE5LCAzMTIxOCwgMzEyMjQsIDM4MTczLCAzMTIzMCwgMzEyNDMsIDMxMjQ5LCAKKyAgICAzMTI1NSwgMzgxNzksIDMxMjYxLCAzMTI2NywgMzgxODUsIDM4MTkxLCAyMiwgMzgxOTksIDM4MjA2LCAzODIxMCwgMzgyMTQsIAorICAgIDM4MjIyLCAzMTk3OCwgMzgyMjYsIDM4MjMwLCAzODIzNywgMzgyNDIsIDM4MjQ2LCAzODI1MSwgMzgyNTcsIDM4MjYyLCAKKyAgICAzODI2OCwgMzgyNzMsIDM4Mjc3LCAzODI4MSwgMzgyODUsIDM4MjkwLCAzODI5NCwgMzgyOTksIDM4MzAzLCAzODMxMCwgCisgICAgMzgzMTUsIDM4MzE5LCAzODMyNCwgMzgzMjgsIDM4MzMzLCAzODMzNywgMzgzNDIsIDM4MzQ4LCAxNTQ5NSwgMTU1MDAsIAorICAgIDM4MzUzLCAzODM1NywgMzgzNjAsIDM4MzY0LCAyMTE4MywgMzgzNjksIDM4MzczLCAzODM3OSwgMzgzODYsIDM4MzkxLCAKKyAgICAzODQwMSwgMzg0MDYsIDM4NDE0LCAzODQxOCwgMzg0MjEsIDMxOTkzLCAzODQyNSwgNDEwOSwgMzg0MzAsIDM4NDM1LCAKKyAgICAzODQzOSwgMzg0NDQsIDM4NDQ4LCAzODQ1MywgMTMzNzUsIDM4NDY0LCAzODQ2OCwgMzg0NzEsIDM4NDc2LCAzODQ4MCwgCisgICAgMzg0ODQsIDM4NDg3LCAzODQ5MSwgODE0NSwgMTMzOTEsIDM4NDk0LCAzODQ5NywgMzg1MDMsIDM4NTA4LCAzODUxNCwgCisgICAgMzg1MTksIDM4NTI1LCAzODUzMCwgMzg1MzYsIDM4NTQxLCAzODU0NywgMzg1NTMsIDM4NTU5LCAzODU2NCwgMzg1NjgsIAorICAgIDM4NTcyLCAzODU4MSwgMzg1OTcsIDM4NjEzLCAzODYyMywgMjc5NjcsIDM4NjMwLCAzODYzNCwgMzg2MzksIDM4NjQ0LCAKKyAgICAzODY0OCwgMzg2NTIsIDM1OTcyLCAzODY1OCwgMzg2NjMsIDM4NjY3LCAzODY3NCwgMzg2NzksIDM4NjgzLCAzODY4NywgCisgICAgMjY5OTYsIDM4NjkzLCAyMTQ1MSwgMzg2OTgsIDM4NzA1LCAzODcxMywgMzg3MTksIDM4NzI2LCAzODczNCwgMzg3NDAsIAorICAgIDM4NzQ0LCAzODc1MCwgMzg3NTgsIDM4NzYyLCAzODc3MSwgOTUwOSwgMzg3NzksIDM4NzgzLCAzODc5MSwgMzg3OTgsIAorICAgIDM4ODAzLCAzODgwOCwgMzg4MTIsIDM4ODE1LCAzODgxOSwgMzg4MjIsIDM4ODI2LCAzODgzMywgMzg4MzgsIDM4ODQ0LCAKKyAgICAyNjQxNSwgMzEyODEsIDM4ODQ4LCAzODg1NSwgMzg4NjEsIDM4ODY3LCAzODg3MiwgMzg4NzUsIDM4ODc3LCAzODg4NCwgCisgICAgMzg4OTEsIDM4ODk3LCAzODkwMSwgMzg5MDQsIDM4OTA4LCAzODkxMiwgMzg5MTYsIDM4OTIxLCAzODkyNSwgMzg5MjksIAorICAgIDM4OTMyLCAzODkzNiwgMzg5NTAsIDIzMDYyLCAzODk2OSwgMzg5ODIsIDM4OTk1LCAzOTAwOCwgMjMwODAsIDM5MDIzLCAKKyAgICAxMDQ5NywgMzkwMzgsIDM5MDQ0LCAzOTA0OCwgMzkwNTIsIDM5MDU5LCAzOTA2NCwgMzkwNjgsIDM5MDc1LCAzOTA4MSwgCisgICAgMzkwODYsIDM5MDkyLCAzOTEwMiwgMzkxMTQsIDM5MTI1LCAzOTEzMCwgMzkxMzcsIDM5MTQxLCAzOTE0NSwgMzkxNDgsIAorICAgIDE1ODkxLCAzNjc3LCAzOTE1NiwgMTU1MjIsIDM5MTY5LCAzOTE3NiwgMzkxODAsIDM5MTg0LCAzOTE4OSwgMzkxOTQsIAorICAgIDM5MjAwLCAzOTIwNCwgMzkyMDgsIDM5MjExLCA3NzQyLCAxNTUzMywgMzkyMTYsIDM5MjIwLCAzOTIyNiwgMzkyMzUsIAorICAgIDM5MjQwLCAzOTI0NywgMzU4MjgsIDM5MjUzLCAzOTI1OCwgMzkyNjIsIDM5MjY3LCAzOTI3NCwgMzkyNzgsIDM5MjgxLCAKKyAgICAzOTI4NSwgMzkyOTAsIDE0NTY1LCAzOTI5NywgMzkzMDQsIDEwNzcsIDM5MzA4LCAzOTMxMywgMzkzMTgsIDM5MzI0LCAKKyAgICAzOTMyOSwgMzkzMzQsIDM5MzM4LCAzOTM0OCwgMzkzNTMsIDM5MzU5LCAzOTM2NCwgMzkzNzAsIDM5Mzc1LCAzOTM4MSwgCisgICAgMzkzOTEsIDM5Mzk2LCAzOTQwMSwgMzk0MDUsIDcyMjksIDcyNDEsIDM5NDEwLCAzOTQxMywgMzk0MjAsIDM5NDI2LCAKKyAgICAzNDA4NCwgMzQwOTEsIDM5NDM1LCAzOTQzOSwgMzIwNDEsIDM5NDQ3LCAzOTQ1OCwgMzk0NjYsIDM2MDIwLCAzOTQ3MywgCisgICAgMzk0NzgsIDM5NDgzLCAzOTQ5NCwgMzk1MDEsIDM5NTEyLCAzMjA2NSwgMjE0NTcsIDM5NTIwLCA3MzUsIDM5NTI1LCAKKyAgICAzOTUzMSwgMjgwNTEsIDM5NTM3LCAzOTU0MiwgMzk1NTIsIDM5NTYxLCAzOTU2OCwgMzk1NzQsIDM5NTc4LCAzOTU4MSwgCisgICAgMzk1ODgsIDM5NTk0LCAzOTYwMSwgMzk2MDcsIDM5NjE3LCAzOTYyNSwgMzk2MzEsIDM5NjM3LCAzOTY0MiwgMzk2NDYsIAorICAgIDM5NjUzLCAzOTY1OSwgMzk2NjYsIDM4OTE3LCA1MzUsIDEzODE4LCAzOTY3MiwgMzk2NzcsIDM5NjgwLCAzOTY4NiwgCisgICAgMzk2OTQsIDEzOTYsIDM5Njk5LCAzOTcwMywgMzk3MDgsIDM5NzE1LCAzOTcyMSwgMzk3MjUsIDM5NzI5LCAzOTczNCwgCisgICAgMzk3NDMsIDM5NzUwLCAzOTc2MCwgMzk3NjYsIDI4MDk1LCAzOTc4MywgMzk3OTIsIDM5ODAwLCAzOTgwNiwgMzk4MTEsIAorICAgIDM5ODE4LCAzOTgyNCwgMzk4MzIsIDM5ODQxLCAzOTg0OSwgMzk4NTMsIDM5ODU4LCAzOTg2NiwgMzIwNzQsIDM5ODcyLCAKKyAgICAzOTg5MSwgMTU4MjQsIDM5OTA1LCAzOTkyMSwgMzk5MzUsIDM5OTQxLCAzOTk0NiwgMzk5NTEsIDM5OTU2LCAzOTk2MiwgCisgICAgMzIwODAsIDM5OTY3LCAzOTk3NCwgMzk5NzksIDM5OTgzLCAzNDUsIDI5MzYsIDM5OTkwLCAzOTk5NSwgNDAwMDAsIDI3MzIyLCAKKyAgICAzOTgyMSwgNDAwMDQsIDQwMDA5LCA0MDAxNywgNDAwMjEsIDQwMDI0LCA0MDAzMCwgNDAwMzYsIDQwMDQwLCAyODE1MCwgCisgICAgNDAwNDMsIDQwMDQ4LCA0MDA1MiwgNDAwNTUsIDQwMDYwLCA0MDA2NCwgNDAwNjksIDQwMDc0LCA0MDA3OCwgNDAwODMsIAorICAgIDQwMDg3LCA0MDA5MSwgMjExNzksIDIxMTkwLCA0MDA5NSwgNDAxMDAsIDQwMTA2LCAyNjk1MywgNDAxMTEsIDQwMTE1LCAKKyAgICAyMTI2NiwgMTYwNzIsIDQwMTE4LCA0MDEyMywgNDAxMjgsIDQwMTMzLCA0MDEzOCwgNDAxNDMsIDQwMTQ4LCA0MDE1MywgCisgICAgNDUwLCA0OSwgMzEyOTksIDMxMzA0LCAzMTMwOSwgMzEzMTUsIDMxMzIwLCAzMTMyNSwgNDAxNTgsIDMxMzI5LCA0MDE2MiwgCisgICAgNDAxNjYsIDQwMTcwLCAzMTMzNCwgMzEzNDAsIDQwMTg0LCAzMTM1MSwgMzEzNTYsIDQwMTkyLCA0MDE5NywgMzEzNjIsIAorICAgIDQwMjAyLCA0MDIwNywgNDAyMTIsIDQwMjE3LCA0MDIyMywgNDAyMjksIDQwMjM1LCAzMTM3OSwgNDAyNDgsIDQwMjU0LCAKKyAgICAzMTM4MywgNDAyNTgsIDMxMzg4LCA0MDI2MywgMzEzOTMsIDMxMzk4LCA0MDI2NiwgNDAyNzEsIDQwMjc1LCAzMDk0OCwgCisgICAgNDAyODEsIDEzNTk5LCA0MDI4OCwgNDAyOTMsIDMxNDAzLCA0MDI5NywgNDAzMDIsIDQwMzA3LCA0MDMxMiwgNDAzMTYsIAorICAgIDQwMzIxLCA0MDMyNiwgNDAzMzIsIDQwMzM3LCA0MDM0MiwgNDAzNDgsIDQwMzU0LCA0MDM1OSwgNDAzNjMsIDQwMzY4LCAKKyAgICA0MDM3MywgNDAzNzgsIDQwMzgyLCA0MDM4NywgNDAzOTIsIDQwMzk3LCA0MDQwMywgNDA0MDksIDQwNDE1LCA0MDQyMCwgCisgICAgNDA0MjQsIDQwNDI5LCA0MDQzMywgMzE0MDcsIDMxNDEyLCAzMTQxNywgNDA0MzcsIDQwNDQxLCA0MDQ0NSwgMzE0MjIsIAorICAgIDMxNDI4LCAzMTQzNCwgMzE0NDYsIDQwNDU3LCAyNjAxMywgNDA0NjEsIDQwNDY1LCA0MDQ3MCwgNDA0NzUsIDQwNDgwLCAKKyAgICA0MDQ4NSwgNDA0ODksIDQwNDkzLCA0MDUwMywgNDA1MDgsIDQwNTEzLCA0MDUxNywgNDA1MjEsIDQwNTI0LCA0MDUzMiwgCisgICAgMzE0OTQsIDQwNTM3LCAxNDc5LCA0MDU0MywgNDA1NTEsIDQwNTYwLCA0MDU2NCwgNDA1NjgsIDQwNTc2LCA0MDU4MiwgCisgICAgNDA1OTAsIDQwNjA2LCA0MDYxMCwgNDA2MTQsIDQwNjE5LCA0MDYzNCwgMzE1MzEsIDE3NDksIDEyMDU1LCA0MDYzOCwgCisgICAgMTM3OCwgNDA2NTAsIDQwNjUxLCA0MDY1OSwgNDA2NjYsIDQwNjcxLCA0MDY3OCwgNDA2ODMsIDkzNzksIDExMTksIDEwMzMyLCAKKyAgICA0MDY5MCwgNDA2OTUsIDQwNjk4LCA0MDcwMSwgNDA3MTAsIDEyODYsIDQwNzE1LCAzOTA2NSwgNDA3MjIsIDQwNzI3LCAKKyAgICA0MDczMSwgMjI1MDMsIDI1NTcsIDQwNzM5LCAxMDc0MSwgNDA3NDksIDQwNzU1LCAyMzM3LCAyMzQ3LCA0MDc2NCwgNDA3NzMsIAorICAgIDQwNzgzLCA0MDc5NCwgMzI5MywgMzQyMzcsIDEwMzg0LCAzODA3LCAxNjY4MSwgMTI5MSwgNDA3OTksIDQwODA3LCA0MDgxNCwgCisgICAgNDA4MTksIDQwODIzLCA0MDgyNywgMjM4NzUsIDEwNDExLCA0MDgzNSwgNDA4NDQsIDQwODUzLCA0MDg2MSwgNDA4NjgsIAorICAgIDQwODc5LCA0MDg4NCwgNDA4OTcsIDQwOTEwLCA0MDkyMiwgNDA5MzQsIDQwOTQ2LCA0MDk1OSwgNDA5NzAsIDQwOTgxLCAKKyAgICA0MDk5MSwgNDA5OTksIDQxMDA3LCA0MTAxOSwgNDEwMzEsIDQxMDQyLCA0MTA1MSwgNDEwNTksIDQxMDY2LCA0MTA3OCwgCisgICAgNDEwODUsIDQxMDk0LCA0MTEwMSwgNDExMTQsIDQxMTE5LCA0MTEyOSwgNDExMzQsIDQxMTQwLCA0MTE0NSwgMzcyMTEsIAorICAgIDQxMTQ5LCA0MTE1NiwgNDExNjAsIDQxMTY3LCA0MTE3NSwgMjUxOCwgNDExODIsIDQxMTkzLCA0MTIwMywgNDEyMTIsIAorICAgIDQxMjIwLCA0MTIzMCwgNDEyMzgsIDQxMjQ4LCA0MTI1NywgNDEyNjIsIDQxMjY4LCA0MTI3NCwgMzcwOSwgNDEyODUsIAorICAgIDQxMjk1LCA0MTMwNCwgNDEzMTMsIDQxMzIzLCA0MTMzMSwgNDEzNDAsIDQxMzQ1LCA0MTM1MCwgNDEzNTUsIDE3MDUsIDM3LCAKKyAgICA0MTM2MywgNDEzNzEsIDQxMzgyLCA0MTM5MywgMTYzNTYsIDQxNDAzLCA0MTQwNywgNDE0MTQsIDQxNDIwLCA0MTQyNSwgCisgICAgNDE0MjksIDQxNDQwLCA0MTQ1MCwgNDE0NTksIDQxNDcwLCAxNjczMCwgMTY3MzUsIDQxNDc1LCA0MTQ4NCwgNDE0ODksIAorICAgIDQxNDk5LCA0MTUwNCwgNDE1MTIsIDQxNTIwLCA0MTUyNywgNDE1MzMsIDcwNzgsIDIyOCwgNDE1MzcsIDQxNTQzLCA0MTU0OCwgCisgICAgNDE1NTEsIDIxMTcsIDM5MTgxLCA0MTU1OSwgNDE1NjMsIDQxNTY2LCAxNTEyLCA0MTU3MiwgMTM5ODAsIDEyOTYsIDQxNTc3LCAKKyAgICA0MTU5MCwgNDE2MDQsIDI2NDMsIDQxNjIyLCA0MTYzNCwgNDE2NDYsIDI2NTcsIDI2NzQsIDQxNjYwLCA0MTY3MywgMjY4OSwgCisgICAgNDE2ODcsIDQxNjk5LCAyNzA0LCA0MTcxMywgMTMwMiwgMTMwOCwgMTMxNCwgMTA2NTksIDQxNzE4LCA0MTcyMywgNDE3MjgsIAorICAgIDQxNzMyLCA0MTc0NywgNDE3NjIsIDQxNzc3LCA0MTc5MiwgNDE4MDcsIDQxODIyLCA0MTgzNywgNDE4NTIsIDQxODY3LCAKKyAgICA0MTg4MiwgNDE4OTcsIDQxOTEyLCA0MTkyNywgNDE5NDIsIDQxOTU3LCA0MTk3MiwgNDE5ODcsIDQyMDAyLCA0MjAxNywgCisgICAgNDIwMzIsIDQyMDQ3LCA0MjA2MiwgNDIwNzcsIDQyMDkyLCA0MjEwNywgNDIxMjIsIDQyMTM3LCA0MjE1MiwgNDIxNjcsIAorICAgIDQyMTgyLCA0MjE5NywgNDIyMTIsIDQyMjI3LCA0MjI0MiwgNDIyNTcsIDQyMjcyLCA0MjI4NywgNDIzMDIsIDQyMzE3LCAKKyAgICA0MjMzMiwgNDIzNDcsIDQyMzYyLCA0MjM3NywgNDIzOTIsIDQyNDA3LCA0MjQyMiwgNDI0MzcsIDQyNDUyLCA0MjQ2NywgCisgICAgNDI0ODIsIDQyNDk3LCA0MjUxMiwgNDI1MjcsIDQyNTQyLCA0MjU1NywgNDI1NzIsIDQyNTg3LCA0MjYwMiwgNDI2MTcsIAorICAgIDQyNjMyLCA0MjY0NywgNDI2NjIsIDQyNjc3LCA0MjY5MiwgNDI3MDcsIDQyNzIyLCA0MjczNywgNDI3NTIsIDQyNzY3LCAKKyAgICA0Mjc4MiwgNDI3OTcsIDQyODEyLCA0MjgyNywgNDI4NDIsIDQyODU3LCA0Mjg3MiwgNDI4ODcsIDQyOTAyLCA0MjkxNywgCisgICAgNDI5MzIsIDQyOTQ3LCA0Mjk2MiwgNDI5NzcsIDQyOTkyLCA0MzAwNywgNDMwMjIsIDQzMDM3LCA0MzA1MiwgNDMwNjcsIAorICAgIDQzMDgyLCA0MzA5NywgNDMxMTIsIDQzMTI3LCA0MzE0MiwgNDMxNTcsIDQzMTcyLCA0MzE4NywgNDMyMDIsIDQzMjE3LCAKKyAgICA0MzIzMiwgNDMyNDcsIDQzMjYyLCA0MzI3NywgNDMyOTIsIDQzMzA3LCA0MzMyMiwgNDMzMzcsIDQzMzUyLCA0MzM2NywgCisgICAgNDMzODIsIDQzMzk3LCA0MzQxMiwgNDM0MjcsIDQzNDQyLCA0MzQ1NywgNDM0NzIsIDQzNDg3LCA0MzUwMiwgNDM1MTcsIAorICAgIDQzNTMyLCA0MzU0NywgNDM1NjIsIDQzNTc3LCA0MzU5MiwgNDM2MDcsIDQzNjIyLCA0MzYzNywgNDM2NTIsIDQzNjY3LCAKKyAgICA0MzY4MiwgNDM2OTcsIDQzNzEyLCA0MzcyNywgNDM3NDIsIDQzNzU3LCA0Mzc3MiwgNDM3ODcsIDQzODAyLCA0MzgxNywgCisgICAgNDM4MzIsIDQzODQ3LCA0Mzg2MiwgNDM4NzcsIDQzODkyLCA0MzkwNywgNDM5MjIsIDQzOTM3LCA0Mzk1MiwgNDM5NjcsIAorICAgIDQzOTgyLCA0Mzk5NywgNDQwMTIsIDQ0MDI3LCA0NDA0MiwgNDQwNTcsIDQ0MDcyLCA0NDA4NywgNDQxMDIsIDQ0MTE3LCAKKyAgICA0NDEzMiwgNDQxNDcsIDQ0MTYyLCA0NDE3NywgNDQxOTIsIDQ0MjA3LCA0NDIyMiwgNDQyMzcsIDQ0MjUyLCA0NDI2NywgCisgICAgNDQyODIsIDQ0Mjk3LCA0NDMxMiwgNDQzMjcsIDQ0MzQyLCA0NDM1NywgNDQzNzIsIDQ0Mzg3LCA0NDQwMiwgNDQ0MTcsIAorICAgIDQ0NDMyLCA0NDQ0NywgNDQ0NjIsIDQ0NDc3LCA0NDQ5MiwgNDQ1MDcsIDQ0NTIyLCA0NDUzNywgNDQ1NTIsIDQ0NTY3LCAKKyAgICA0NDU4MiwgNDQ1OTcsIDQ0NjEyLCA0NDYyNywgNDQ2NDIsIDQ0NjU3LCA0NDY3MiwgNDQ2ODcsIDQ0NzAyLCA0NDcxNywgCisgICAgNDQ3MzIsIDQ0NzQ3LCA0NDc2MiwgNDQ3NzcsIDQ0NzkyLCA0NDgwNywgNDQ4MjIsIDQ0ODM3LCA0NDg1MiwgNDQ4NjcsIAorICAgIDQ0ODgyLCA0NDg5NywgNDQ5MTIsIDQ0OTI3LCA0NDk0MiwgNDQ5NTcsIDQ0OTcyLCA0NDk4NywgNDUwMDIsIDQ1MDE3LCAKKyAgICA0NTAzMiwgNDUwNDcsIDQ1MDYyLCA0NTA3NywgNDUwOTIsIDQ1MTA3LCA0NTEyMiwgNDUxMzcsIDQ1MTUyLCA0NTE2NywgCisgICAgNDUxODIsIDQ1MTk3LCA0NTIxMiwgNDUyMjcsIDQ1MjQyLCA0NTI1NywgNDUyNzIsIDQ1Mjg3LCA0NTMwMiwgNDUzMTcsIAorICAgIDQ1MzMyLCA0NTM0NywgNDUzNjIsIDQ1Mzc3LCA0NTM5MiwgNDU0MDcsIDQ1NDIyLCA0NTQzNywgNDU0NTIsIDQ1NDY3LCAKKyAgICA0NTQ4MiwgNDU0OTcsIDQ1NTEyLCA0NTUyNywgNDU1NDIsIDQ1NTU3LCA0NTU3MiwgNDU1ODcsIDQ1NjAyLCA0NTYxNywgCisgICAgNDU2MzIsIDQ1NjQ3LCA0NTY2MiwgNDU2NzcsIDQ1NjkyLCA0NTcwNywgNDU3MjIsIDQ1NzM3LCA0NTc1MiwgNDU3NjcsIAorICAgIDQ1NzgyLCA0NTc5NywgNDU4MTIsIDQ1ODI3LCA0NTg0MiwgNDU4NTcsIDQ1ODcyLCA0NTg4NywgNDU5MDIsIDQ1OTE3LCAKKyAgICA0NTkzMiwgNDU5NDcsIDQ1OTYyLCA0NTk3NywgNDU5OTIsIDQ2MDA3LCA0NjAyMiwgNDYwMzcsIDQ2MDUyLCA0NjA2NywgCisgICAgNDYwODIsIDQ2MDk3LCA0NjExMiwgNDYxMjcsIDQ2MTQyLCA0NjE1NywgNDYxNzIsIDQ2MTg3LCA0NjIwMiwgNDYyMTcsIAorICAgIDQ2MjMyLCA0NjI0NywgNDYyNjIsIDQ2Mjc3LCA0NjI5MiwgNDYzMDcsIDQ2MzIyLCA0NjMzNywgNDYzNTIsIDQ2MzY3LCAKKyAgICA0NjM4MiwgNDYzOTcsIDQ2NDEyLCA0NjQyNywgNDY0NDIsIDQ2NDU3LCA0NjQ3MiwgNDY0ODcsIDQ2NTAyLCA0NjUxNywgCisgICAgNDY1MzIsIDQ2NTQ3LCA0NjU2MiwgNDY1NzcsIDQ2NTkyLCA0NjYwNywgNDY2MjIsIDQ2NjM3LCA0NjY1MiwgNDY2NjcsIAorICAgIDQ2NjgyLCA0NjY5NywgNDY3MTIsIDQ2NzI3LCA0Njc0MiwgNDY3NTcsIDQ2NzcyLCA0Njc4NywgNDY4MDIsIDQ2ODE3LCAKKyAgICA0NjgzMiwgNDY4NDcsIDQ2ODYyLCA0Njg3NywgNDY4OTIsIDQ2OTA3LCA0NjkyMiwgNDY5MzcsIDQ2OTUyLCA0Njk2NywgCisgICAgNDY5ODIsIDQ2OTk3LCA0NzAxMiwgNDcwMjcsIDQ3MDQyLCA0NzA1NywgNDcwNzIsIDQ3MDg3LCA0NzEwMiwgNDcxMTcsIAorICAgIDQ3MTMyLCA0NzE0NywgNDcxNjIsIDQ3MTc3LCA0NzE5MiwgNDcyMDcsIDQ3MjIyLCA0NzIzNywgNDcyNTIsIDQ3MjY3LCAKKyAgICA0NzI4MiwgNDcyOTcsIDQ3MzEyLCA0NzMyNywgNDczNDIsIDQ3MzU3LCA0NzM3MiwgNDczODcsIDQ3NDAyLCA0NzQxNywgCisgICAgNDc0MzIsIDQ3NDQ3LCA0NzQ2MiwgNDc0NzcsIDQ3NDkyLCA0NzUwNywgNDc1MjIsIDQ3NTM3LCA0NzU1MiwgNDc1NjcsIAorICAgIDQ3NTgyLCA0NzU5NywgNDc2MTIsIDQ3NjI3LCA0NzY0MiwgNDc2NTcsIDQ3NjcyLCA0NzY4NywgNDc3MDIsIDQ3NzE3LCAKKyAgICA0NzczMiwgNDc3NDcsIDQ3NzYyLCA0Nzc3NywgNDc3OTIsIDQ3ODA3LCA0NzgyMiwgNDc4MzcsIDQ3ODUyLCA0Nzg2NywgCisgICAgNDc4ODIsIDQ3ODk3LCA0NzkxMiwgNDc5MjcsIDQ3OTQyLCA0Nzk1NywgNDc5NzIsIDQ3OTg3LCA0ODAwMiwgNDgwMTcsIAorICAgIDQ4MDMyLCA0ODA0NywgNDgwNjIsIDQ4MDc3LCA0ODA5MiwgNDgxMDcsIDQ4MTIyLCA0ODEzNywgNDgxNTIsIDQ4MTY3LCAKKyAgICA0ODE4MiwgNDgxOTcsIDQ4MjEyLCA0ODIyNywgNDgyNDIsIDQ4MjU3LCA0ODI3MiwgNDgyODcsIDQ4MzAyLCA0ODMxNywgCisgICAgNDgzMzIsIDQ4MzQ3LCA0ODM2MiwgNDgzNzcsIDQ4MzkyLCA0ODQwNywgNDg0MjIsIDQ4NDM3LCA0ODQ1MiwgNDg0NjcsIAorICAgIDQ4NDgyLCA0ODQ5NywgNDg1MTIsIDQ4NTI3LCA0ODU0MiwgNDg1NTcsIDQ4NTcyLCA0ODU4NywgNDg2MDIsIDQ4NjE3LCAKKyAgICA0ODYzMiwgNDg2NDcsIDQ4NjYyLCA0ODY3NywgNDg2OTIsIDQ4NzA3LCA0ODcyMiwgNDg3MzcsIDQ4NzUyLCA0ODc2NywgCisgICAgNDg3ODIsIDQ4Nzk3LCA0ODgxMiwgNDg4MjcsIDQ4ODQyLCA0ODg1NywgNDg4NzIsIDQ4ODg3LCA0ODkwMiwgNDg5MTcsIAorICAgIDQ4OTMyLCA0ODk0NywgNDg5NjIsIDQ4OTc3LCA0ODk5MiwgNDkwMDcsIDQ5MDIyLCA0OTAzNywgNDkwNTIsIDQ5MDY3LCAKKyAgICA0OTA4MiwgNDkwOTcsIDQ5MTEyLCA0OTEyNywgNDkxNDIsIDQ5MTU3LCA0OTE3MiwgNDkxODcsIDQ5MjAyLCA0OTIxNywgCisgICAgNDkyMzIsIDQ5MjQ3LCA0OTI2MiwgNDkyNzcsIDQ5MjkyLCA0OTMwNywgNDkzMjIsIDQ5MzM3LCA0OTM1MiwgNDkzNjcsIAorICAgIDQ5MzgyLCA0OTM5NywgNDk0MTIsIDQ5NDI3LCA0OTQ0MiwgNDk0NTcsIDQ5NDcyLCA0OTQ4NywgNDk1MDIsIDQ5NTE3LCAKKyAgICA0OTUzMiwgNDk1NDgsIDQ5NTY0LCA0OTU4MCwgNDk1OTYsIDQ5NjEyLCA0OTYyOCwgNDk2NDQsIDQ5NjYwLCA0OTY3NiwgCisgICAgNDk2OTIsIDQ5NzA4LCA0OTcyNCwgNDk3NDAsIDQ5NzU2LCA0OTc3MiwgNDk3ODgsIDQ5ODA0LCA0OTgyMCwgNDk4MzYsIAorICAgIDQ5ODUyLCA0OTg2OCwgNDk4ODQsIDQ5OTAwLCA0OTkxNiwgNDk5MzIsIDQ5OTQ4LCA0OTk2NCwgNDk5ODAsIDQ5OTk2LCAKKyAgICA1MDAxMiwgNTAwMjgsIDUwMDQ0LCA1MDA2MCwgNTAwNzYsIDUwMDkyLCA1MDEwOCwgNTAxMjQsIDUwMTQwLCA1MDE1NiwgCisgICAgNTAxNzIsIDUwMTg4LCA1MDIwNCwgNTAyMjAsIDUwMjM2LCA1MDI1MiwgNTAyNjgsIDUwMjg0LCA1MDMwMCwgNTAzMTYsIAorICAgIDUwMzMyLCA1MDM0OCwgNTAzNjQsIDUwMzgwLCA1MDM5NiwgNTA0MTIsIDUwNDI4LCA1MDQ0NCwgNTA0NjAsIDUwNDc2LCAKKyAgICA1MDQ5MiwgNTA1MDgsIDUwNTI0LCA1MDU0MCwgNTA1NTYsIDUwNTcyLCA1MDU4OCwgNTA2MDQsIDUwNjIwLCA1MDYzNiwgCisgICAgNTA2NTIsIDUwNjY4LCA1MDY4NCwgNTA3MDAsIDUwNzE2LCA1MDczMiwgNTA3NDgsIDUwNzY0LCA1MDc4MCwgNTA3OTYsIAorICAgIDUwODEyLCA1MDgyOCwgNTA4NDQsIDUwODYwLCA1MDg3NiwgNTA4OTIsIDUwOTA4LCA1MDkyNCwgNTA5NDAsIDUwOTU2LCAKKyAgICA1MDk3MiwgNTA5ODgsIDUxMDA0LCA1MTAyMCwgNTEwMzYsIDUxMDUyLCA1MTA2OCwgNTEwODQsIDUxMTAwLCA1MTExNiwgCisgICAgNTExMzIsIDUxMTQ4LCA1MTE2NCwgNTExODAsIDUxMTk2LCA1MTIxMiwgNTEyMjgsIDUxMjQ0LCA1MTI2MCwgNTEyNzYsIAorICAgIDUxMjkyLCA1MTMwOCwgNTEzMjQsIDUxMzQwLCA1MTM1NiwgNTEzNzIsIDUxMzg4LCA1MTQwNCwgNTE0MjAsIDUxNDM2LCAKKyAgICA1MTQ1MiwgNTE0NjgsIDUxNDg0LCA1MTUwMCwgNTE1MTYsIDUxNTMyLCA1MTU0OCwgNTE1NjQsIDUxNTgwLCA1MTU5NiwgCisgICAgNTE2MTIsIDUxNjI4LCA1MTY0NCwgNTE2NjAsIDUxNjc2LCA1MTY5MiwgNTE3MDgsIDUxNzI0LCA1MTc0MCwgNTE3NTYsIAorICAgIDUxNzcyLCA1MTc4OCwgNTE4MDQsIDUxODIwLCA1MTgzNiwgNTE4NTIsIDUxODY4LCA1MTg4NCwgNTE5MDAsIDUxOTE2LCAKKyAgICA1MTkzMiwgNTE5NDgsIDUxOTY0LCA1MTk4MCwgNTE5OTYsIDUyMDEyLCA1MjAyOCwgNTIwNDQsIDUyMDYwLCA1MjA3NiwgCisgICAgNTIwOTIsIDUyMTA4LCA1MjEyNCwgNTIxNDAsIDUyMTU2LCA1MjE3MiwgNTIxODgsIDUyMjA0LCA1MjIyMCwgNTIyMzYsIAorICAgIDUyMjUyLCA1MjI2OCwgNTIyODQsIDUyMzAwLCA1MjMxNiwgNTIzMzIsIDUyMzQ4LCA1MjM2NCwgNTIzODAsIDUyMzk2LCAKKyAgICA1MjQxMiwgNTI0MjgsIDUyNDQ0LCA1MjQ2MCwgNTI0NzYsIDUyNDkyLCA1MjUwOCwgNTI1MjQsIDUyNTQwLCA1MjU1NiwgCisgICAgNTI1NzIsIDUyNTg4LCA1MjYwNCwgNTI2MjAsIDUyNjM2LCA1MjY1MiwgNTI2NjgsIDUyNjg0LCA1MjcwMCwgNTI3MTYsIAorICAgIDUyNzMyLCA1Mjc0OCwgNTI3NjQsIDUyNzgwLCA1Mjc5NiwgNTI4MTIsIDUyODI4LCA1Mjg0NCwgNTI4NjAsIDUyODc2LCAKKyAgICA1Mjg5MiwgNTI5MDgsIDUyOTI0LCA1Mjk0MCwgNTI5NTYsIDUyOTcyLCA1Mjk4OCwgNTMwMDQsIDUzMDIwLCA1MzAzNiwgCisgICAgNTMwNTIsIDUzMDY4LCA1MzA4NCwgNTMxMDAsIDUzMTE2LCA1MzEzMiwgNTMxNDgsIDUzMTY0LCA1MzE4MCwgNTMxOTYsIAorICAgIDUzMjEyLCA1MzIyOCwgNTMyNDQsIDUzMjYwLCA1MzI3NiwgNTMyOTIsIDUzMzA4LCA1MzMyNCwgNTMzNDAsIDUzMzU2LCAKKyAgICA1MzM3MiwgNTMzODgsIDUzNDA0LCA1MzQyMCwgNTM0MzYsIDUzNDUyLCA1MzQ2OCwgNTM0ODQsIDUzNTAwLCA1MzUxNiwgCisgICAgNTM1MzIsIDUzNTQ4LCA1MzU2NCwgNTM1ODAsIDUzNTk2LCA1MzYxMiwgNTM2MjgsIDUzNjQ0LCA1MzY2MCwgNTM2NzYsIAorICAgIDUzNjkyLCA1MzcwOCwgNTM3MjQsIDUzNzQwLCA1Mzc1NiwgNTM3NzIsIDUzNzg4LCA1MzgwNCwgNTM4MjAsIDUzODM2LCAKKyAgICA1Mzg1MiwgNTM4NjgsIDUzODg0LCA1MzkwMCwgNTM5MTYsIDUzOTMyLCA1Mzk0OCwgNTM5NjQsIDUzOTgwLCA1Mzk5NiwgCisgICAgNTQwMTIsIDU0MDI4LCA1NDA0NCwgNTQwNjAsIDU0MDc2LCA1NDA5MiwgNTQxMDgsIDU0MTI0LCA1NDE0MCwgNTQxNTYsIAorICAgIDU0MTcyLCA1NDE4OCwgNTQyMDQsIDU0MjIwLCA1NDIzNiwgNTQyNTIsIDU0MjY4LCA1NDI4NCwgNTQzMDAsIDU0MzE2LCAKKyAgICA1NDMzMiwgNTQzNDgsIDU0MzY0LCA1NDM4MCwgNTQzOTYsIDU0NDEyLCA1NDQyOCwgNTQ0NDQsIDU0NDYwLCA1NDQ3NiwgCisgICAgNTQ0OTIsIDU0NTA4LCA1NDUyNCwgNTQ1NDAsIDU0NTU2LCA1NDU3MiwgNTQ1ODgsIDU0NjA0LCA1NDYyMCwgNTQ2MzYsIAorICAgIDU0NjUyLCA1NDY2OCwgNTQ2ODQsIDU0NzAwLCA1NDcxNiwgNTQ3MzIsIDU0NzQ4LCA1NDc2NCwgNTQ3ODAsIDU0Nzk2LCAKKyAgICA1NDgxMiwgNTQ4MjgsIDU0ODQ0LCA1NDg2MCwgNTQ4NzYsIDU0ODkyLCA1NDkwOCwgNTQ5MjQsIDU0OTQwLCA1NDk1NiwgCisgICAgNTQ5NzIsIDU0OTg4LCA1NTAwNCwgNTUwMjAsIDU1MDM2LCA1NTA1MiwgNTUwNjgsIDU1MDg0LCA1NTEwMCwgNTUxMTYsIAorICAgIDU1MTMyLCA1NTE0OCwgNTUxNjQsIDU1MTgwLCA1NTE5NiwgNTUyMTIsIDU1MjI4LCA1NTI0NCwgNTUyNjAsIDU1Mjc2LCAKKyAgICA1NTI5MiwgNTUzMDgsIDU1MzI0LCA1NTM0MCwgNTUzNTYsIDU1MzcyLCA1NTM4OCwgNTU0MDQsIDU1NDIwLCA1NTQzNiwgCisgICAgNTU0NTIsIDU1NDY4LCA1NTQ4NCwgNTU1MDAsIDU1NTE2LCA1NTUzMiwgNTU1NDgsIDU1NTY0LCA1NTU4MCwgNTU1OTYsIAorICAgIDU1NjEyLCA1NTYyOCwgNTU2NDQsIDU1NjYwLCA1NTY3NiwgNTU2OTIsIDU1NzA4LCA1NTcyNCwgNTU3NDAsIDU1NzU2LCAKKyAgICA1NTc3MiwgNTU3ODgsIDU1ODA0LCA1NTgyMCwgNTU4MzYsIDU1ODUyLCA1NTg2OCwgNTU4ODQsIDU1OTAwLCA1NTkxNiwgCisgICAgNTU5MzIsIDU1OTQ4LCA1NTk2NCwgNTU5ODAsIDU1OTk2LCA1NjAxMiwgNTYwMjgsIDU2MDQ0LCA1NjA2MCwgNTYwNzYsIAorICAgIDU2MDkyLCA1NjEwOCwgNTYxMjQsIDU2MTQwLCA1NjE1NiwgNTYxNzIsIDU2MTg4LCA1NjIwNCwgNTYyMjAsIDU2MjM2LCAKKyAgICA1NjI1MiwgNTYyNjgsIDU2Mjg0LCA1NjMwMCwgNTYzMTYsIDU2MzMyLCA1NjM0OCwgNTYzNjQsIDU2MzgwLCA1NjM5NiwgCisgICAgNTY0MTIsIDU2NDI4LCA1NjQ0NCwgNTY0NjAsIDU2NDc2LCA1NjQ5MiwgNTY1MDgsIDU2NTI0LCA1NjU0MCwgNTY1NTYsIAorICAgIDU2NTcyLCA1NjU4OCwgNTY2MDQsIDU2NjIwLCA1NjYzNiwgNTY2NTIsIDU2NjY4LCA1NjY4NCwgNTY3MDAsIDU2NzE2LCAKKyAgICA1NjczMiwgNTY3NDgsIDU2NzY0LCA1Njc4MCwgNTY3OTYsIDU2ODEyLCA1NjgyOCwgNTY4NDQsIDU2ODYwLCA1Njg3NiwgCisgICAgNTY4OTIsIDU2OTA4LCA1NjkyNCwgNTY5NDAsIDU2OTU2LCA1Njk3MiwgNTY5ODgsIDU3MDA0LCA1NzAyMCwgNTcwMzYsIAorICAgIDU3MDUyLCA1NzA2OCwgNTcwODQsIDU3MTAwLCA1NzExNiwgNTcxMzIsIDU3MTQ4LCA1NzE2NCwgNTcxODAsIDU3MTk2LCAKKyAgICA1NzIxMiwgNTcyMjgsIDU3MjQ0LCA1NzI2MCwgNTcyNzYsIDU3MjkyLCA1NzMwOCwgNTczMjQsIDU3MzQwLCA1NzM1NiwgCisgICAgNTczNzIsIDU3Mzg4LCA1NzQwNCwgNTc0MjAsIDU3NDM2LCA1NzQ1MiwgNTc0NjgsIDU3NDg0LCA1NzUwMCwgNTc1MTYsIAorICAgIDU3NTMyLCA1NzU0OCwgNTc1NjQsIDU3NTgwLCA1NzU5NiwgNTc2MTIsIDU3NjI4LCA1NzY0NCwgNTc2NjAsIDU3Njc2LCAKKyAgICA1NzY5MiwgNTc3MDgsIDU3NzI0LCA1Nzc0MCwgNTc3NTYsIDU3NzcyLCA1Nzc4OCwgNTc4MDQsIDU3ODIwLCA1NzgzNiwgCisgICAgNTc4NTIsIDU3ODY4LCA1Nzg4NCwgNTc5MDAsIDU3OTE2LCA1NzkzMiwgNTc5NDgsIDU3OTY0LCA1Nzk4MCwgNTc5OTYsIAorICAgIDU4MDEyLCA1ODAyOCwgNTgwNDQsIDU4MDYwLCA1ODA3NiwgNTgwOTIsIDU4MTA4LCA1ODEyNCwgNTgxNDAsIDU4MTU2LCAKKyAgICA1ODE3MiwgNTgxODgsIDU4MjA0LCA1ODIxOSwgMTY3NjIsIDU4MjI4LCA1ODIzNCwgNTgyNDAsIDU4MjUwLCA1ODI1OCwgCisgICAgMTQ4OTQsIDE1NDQ1LCA5OTYwLCA1ODI3MSwgMTUyMCwgNTgyNzksIDM3NjEsIDI3NDMyLCA3MTgzLCA1ODI4NSwgNTgyOTAsIAorICAgIDU4Mjk1LCA1ODMwMCwgNTgzMDUsIDU4MzExLCA1ODMxNiwgNTgzMjIsIDU4MzI3LCA1ODMzMywgNTgzMzgsIDU4MzQzLCAKKyAgICA1ODM0OCwgNTgzNTMsIDU4MzU5LCA1ODM2NCwgNTgzNjksIDU4Mzc0LCA1ODM3OSwgNTgzODQsIDU4Mzg5LCA1ODM5NCwgCisgICAgNTg0MDAsIDU4NDA1LCA1ODQxMSwgNTg0MTgsIDI1NjEsIDU4NDIzLCA1ODQyOSwgODUyNiwgNTg0MzMsIDU4NDM4LCAKKyAgICA1ODQ0NSwgNTg0NTMsIDQwLCA1ODQ1NywgNTg0NjMsIDU4NDY4LCA1ODQ3MywgNTg0NzcsIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIAorICAgIDEwNjg0LCA1ODQ5NCwgNTg1MDQsIDU4NTE3LCA1ODUyOCwgNTg1NDEsIDU4NTQ4LCA1ODU1NCwgNTg1NTksIDU4NTY1LCAKKyAgICA1ODU3MSwgNTg1NzcsIDU4NTgyLCA1ODU4NywgNTg1OTIsIDU4NTk3LCA1ODYwMSwgNTg2MDYsIDU4NjExLCA1ODYxNiwgCisgICAgNTg2MjIsIDU4NjI4LCA1ODYzNCwgNTg2MzksIDU4NjQzLCA1ODY0OCwgNTg2NTMsIDU4NjU3LCA1ODY2MiwgNTg2NjcsIAorICAgIDU4NjcyLCA1ODY3NiwgMTA3MDAsIDEwNzExLCAxMDcxNiwgMTU2MywgNTg2ODAsIDE1NjgsIDU4Njg2LCAxNjIzOSwgCisgICAgNTg2ODksIDU4Njk1LCAxNTk5LCA1ODcwMSwgMTYwNSwgMTYxMSwgMTA3NDYsIDU4NzA2LCA1ODcxNCwgNTg3MjEsIDU4NzI1LCAKKyAgICA1ODczMSwgNTg3MzYsIDMwOTc3LCA1ODc0MSwgNTg3NDgsIDU4NzUzLCA1ODc1NywgNTg3NjEsIDE2MTYsIDE2MzMxLCAKKyAgICA1ODc3MCwgNTg3NzQsIDE2MzQyLCAxMTI1LCA1ODc3OCwgNTg3ODUsIDU4NzkwLCA1ODc5NCwgMTYzNjcsIDE2MjAsIAorICAgIDM3MzUwLCA1ODc5NywgNTg4MDIsIDU4ODEyLCA1ODgyMSwgNTg4MjYsIDU4ODMwLCA1ODgzNiwgMTYyNSwgMzkyNTksIAorICAgIDU4ODQxLCA1ODg1MCwgNTg4NTYsIDU4ODYxLCAxMDkwNCwgMTA5MTAsIDU4ODY3LCA1ODg3OSwgNTg4OTYsIDU4OTEzLCAKKyAgICA1ODkzMCwgNTg5NDcsIDU4OTY0LCA1ODk4MSwgNTg5OTgsIDU5MDE1LCA1OTAzMiwgNTkwNDksIDU5MDY2LCA1OTA4MywgCisgICAgNTkxMDAsIDU5MTE3LCA1OTEzNCwgNTkxNTEsIDU5MTY4LCA1OTE4NSwgNTkyMDIsIDU5MjE5LCA1OTIzNiwgNTkyNTMsIAorICAgIDU5MjcwLCA1OTI4NywgNTkzMDQsIDU5MzIxLCA1OTMzOCwgNTkzNTUsIDU5MzcyLCA1OTM4OSwgNTk0MDYsIDU5NDIzLCAKKyAgICA1OTQ0MCwgNTk0NTcsIDU5NDc0LCA1OTQ5MSwgNTk1MDgsIDU5NTI1LCA1OTU0MiwgNTk1NTksIDU5NTc2LCA1OTU5MywgCisgICAgNTk2MTAsIDU5NjI3LCA1OTY0NCwgNTk2NjEsIDU5Njc4LCA1OTY5NSwgNTk3MTIsIDU5NzIzLCA1OTcyOCwgMTYzMCwgCisgICAgNTk3MzIsIDU5NzM4LCA1OTc0MywgNTk3NDgsIDkzMjYsIDE2MzUsIDU5NzU0LCA1OTc2MywgMjc3MzEsIDU5NzY4LCAKKyAgICA1OTc3OSwgNTk3ODksIDU5Nzk0LCA1OTgwMSwgNTk4MDcsIDU5ODEyLCA1OTgxNywgMTY2MTksIDU5ODIxLCAxMDkyMSwgCisgICAgMTY0MCwgMTA5MjYsIDU5ODI3LCA1OTgzMiwgNTk4MzgsIDU5ODQzLCA1OTg0OCwgNTk4NTMsIDU5ODU4LCA1OTg2MywgCisgICAgNTk4NjgsIDU5ODczLCA1OTg3OSwgNTk4ODUsIDU5ODkxLCA1OTg5NiwgNTk5MDAsIDU5OTA1LCA1OTkxMCwgNTk5MTQsIAorICAgIDU5OTE5LCA1OTkyNCwgNTk5MjksIDU5OTMzLCA1OTkzOCwgNTk5NDQsIDU5OTQ5LCA1OTk1NCwgNTk5NTgsIDU5OTYzLCAKKyAgICA1OTk2OCwgNTk5NzQsIDU5OTc5LCA1OTk4NCwgNTk5OTAsIDU5OTk2LCA2MDAwMSwgNjAwMDUsIDYwMDEwLCA2MDAxNSwgCisgICAgNjAwMjAsIDYwMDI0LCA2MDAyOSwgNjAwMzQsIDYwMDM5LCA2MDA0NSwgNjAwNTEsIDYwMDU2LCA2MDA2MCwgNjAwNjQsIAorICAgIDYwMDY5LCA2MDA3NCwgNjAwNzksIDI5MTI5LCA2MDA4MywgNjAwODgsIDYwMDkzLCA2MDA5OSwgNjAxMDQsIDYwMTA5LCAKKyAgICA2MDExMywgNjAxMTgsIDYwMTIzLCA2MDEyOSwgNjAxMzQsIDYwMTM5LCA2MDE0NSwgNjAxNTEsIDYwMTU2LCA2MDE2MCwgCisgICAgNjAxNjUsIDYwMTcwLCA2MDE3NCwgNjAxNzksIDYwMTg0LCA2MDE4OSwgNjAxOTUsIDYwMjAxLCA2MDIwNiwgNjAyMTAsIAorICAgIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzNCwgNjAyMzksIDYwMjQzLCA2MDI0NiwgMzE2MzksIDYwMjUxLCAKKyAgICA2MDI1OSwgMTY2ODUsIDM2NjMsIDExMDE3LCA2MDI2NSwgNjAyNzUsIDYwMjkwLCAxMTAyMiwgNjAzMDEsIDYwMzA2LCAKKyAgICA2MDMxNywgNjAzMjksIDYwMzQxLCA2MDM1MywgMjY5NSwgNjAzNjUsIDYwMzcwLCA2MDM4MiwgNjAzODYsIDYwMzkyLCAKKyAgICA2MDM5OCwgNjA0MDMsIDE2NTIsIDEwNzgsIDYwNDEyLCA2MDQxNywgMzkzMDksIDYwNDIxLCA2MDQyNSwgNjA0MzAsIAorICAgIDYwNDM0LCAxNjc3MCwgNjA0MzksIDYwNDQyLCA2MDQ1MCwgNjA0NTgsIDE2NTYsIDExMDQ3LCAxMTA1MywgMTY2MSwgCisgICAgNjA0NjYsIDYwNDczLCA2MDQ3OCwgNjA0ODcsIDYwNDk3LCA2MDUwNCwgNjA1MDksIDYwNTE0LCAxNjY2LCA2MDUyMSwgCisgICAgNjA1MjYsIDE2ODg1LCA2MDUzMCwgNjA1MzUsIDYwNTQyLCA2MDU0OCwgNjA1NTIsIDYwNTYzLCA2MDU3MywgMTY5MDcsIAorICAgIDkyMzQsIDkyNDEsIDE2NzEsIDYwNTgwLCA2MDU4NiwgNjA1OTQsIDYwNjAxLCA2MDYwNywgNjA2MTQsIDYwNjI2LCA2MDYzMiwgCisgICAgNjA2MzcsIDYwNjQ5LCA2MDY2MCwgNjA2NjksIDYwNjc5LCAzNzQwLCAzMDgxMywgMzA4MjIsIDE2OTQ3LCAxNjc2LCAxNjgwLCAKKyAgICA2MDY4NywgNjA2OTgsIDYwNzAzLCAxNjgzLCA2MDcxMSwgNjA3MTYsIDE2OTk4LCA2MDcyOCwgNjA3MzQsIDYwNzM5LCAKKyAgICA2MDc0NywgMTY4OCwgNjA3NTIsIDYwNzU3LCA2MDc2NSwgNjA3NzMsIDYwNzgwLCA2MDc4OSwgNjA3OTcsIDYwODA2LCAKKyAgICAxNjkzLCA2MDgxMCwgMTY5OCwgNjA4MTUsIDYwODIyLCAxNzA3MiwgNjA4MzAsIDYwODM2LCA2MDg0MSwgNjA4NDksIAorICAgIDYwODU2LCA2MDg2NCwgMjI1NzQsIDYwODY5LCAxMTE4MiwgNjA4NzgsIDYwODg0LCA2MDg5MSwgNjA4OTgsIDYwOTA0LCAKKyAgICA2MDkxNCwgNjA5MjAsIDYwOTI1LCA2MDkzNiwgNjA5NDEsIDYwOTQ5LCAxMTE5MSwgMTExOTYsIDYwOTU3LCA2MDk2MywgCisgICAgNjA5NzEsIDM4MDUsIDE3MTE0LCAzOTM5NywgNjA5NzYsIDYwOTgyLCA2MDk4NywgNjA5OTUsIDYxMDAyLCAxMjAzNiwgCisgICAgNjEwMDcsIDYxMDEzLCAxNzA5LCA2MTAxOCwgNjEwMjEsIDExMzIsIDYxMDI3LCA2MTAzMiwgNjEwMzcsIDYxMDQzLCAKKyAgICA2MTA0OCwgNjEwNTMsIDYxMDU4LCA2MTA2MywgNjEwNjgsIDYxMDczLCAxNzE4LCA5LCA2MTA3OSwgNjEwODMsIDYxMDg4LCAKKyAgICA2MTA5MiwgNjEwOTYsIDYxMTAwLCAzMTg3OSwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMTksIDYxMTIyLCA2MTEyNiwgCisgICAgNjExMzAsIDYxMTM1LCA2MTEzOSwgNjExNDQsIDYxMTQ4LCAzNDYxNiwgMzQ2MjEsIDM0NjI2LCA2MTE1MSwgNjExNTgsIAorICAgIDYxMTY0LCAzOTExOCwgNjExNzQsIDM0NjMyLCAzMjEzNywgMzE4OTQsIDMxOTAwLCAzNDY0OCwgMzE5MDYsIDYxMTc5LCAKKyAgICA2MTE4NCwgMzIxNzAsIDYxMTg4LCA2MTE5MSwgNjExOTUsIDYxMjAyLCA2MTIwNSwgNjEyMTAsIDYxMjE0LCA2MTIxOCwgCisgICAgNjEyMjEsIDYxMjMxLCA2MTI0MywgNjEyNTAsIDYxMjU2LCA2MTI2MywgMzM1NzMsIDYxMjY2LCA4NTQzLCA4NzcsIDYxMjY5LCAKKyAgICA2MTI3MywgNjEyNzgsIDM2OTAsIDYxMjgyLCA2MTI4NSwgMTM2MzIsIDYxMjkyLCA2MTI5OSwgNjEzMTIsIDYxMzIwLCAKKyAgICA2MTMyOSwgNjEzMzgsIDYxMzQzLCA2MTM1MywgNjEzNjYsIDYxMzc4LCA2MTM4NSwgNjEzOTAsIDYxMzk5LCA2MTQxMiwgCisgICAgMzYwNjAsIDYxNDMwLCA2MTQzNSwgNjE0NDIsIDYxNDQ4LCA2NTYsIDYxNDUzLCA2MTQ2MSwgNjE0NjgsIDI3MjcxLCA2MjcsIAorICAgIDYxNDc0LCA2MTQ4MCwgNjE0OTAsIDYxNDk2LCA2MTUwMSwgMzE5MjQsIDYwMDMsIDMxOTM4LCA2MTUwNSwgNjE1MTUsIAorICAgIDYxNTIwLCA2MTUzMCwgNjE1NDUsIDYxNTUxLCA2MTU1NywgMzE5NDgsIDYxNTYyLCAzMTA5NCwgNjE1NjYsIDYxNTcxLCAKKyAgICA2MTU3NiwgNjE1ODAsIDYxNTg1LCAxNjk1MCwgNjE1OTIsIDYxNTk3LCA2MTYwMSwgNjA0NCwgMzE5NzQsIDYxNjA1LCAKKyAgICA2MTYxMSwgMzEyLCA2MTYyMSwgNjE2MjgsIDYxNjM1LCA2MTY0MCwgNjE2NDksIDU4ODA2LCA2MTY1NSwgNjE2NjMsIAorICAgIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4NCwgNjE2ODgsIDYxNjk0LCA2MTcwMiwgNjE3MDcsIDYxNzEyLCAKKyAgICA2MTcxNiwgNjE3MjEsIDYxNzI1LCA2MTcyOSwgNjE3MzUsIDYxNzQxLCA2MTc0NiwgNjE3NTAsIDMyMDk4LCA2MTc1NSwgCisgICAgMzIxMDQsIDMyMTEwLCA2MTc2MCwgNjE3NjYsIDYxNzczLCA2MTc3OCwgNjE3ODIsIDMxMTExLCAxNjYxMiwgNjE3ODUsIAorICAgIDYxNzg5LCA2MTc5NCwgNjE4MDEsIDYxODA3LCA2MTgxMSwgNjE4MTYsIDM4ODI4LCA2MTgyMiwgNjE4MjYsIDYxODMwLCAKKyAgICA2MTgzNSwgNjE4NDEsIDYxODQ3LCA2MTg1OSwgNjE4NjgsIDYxODc4LCA2MTg4NCwgNjE4OTEsIDYxODk2LCA2MTkwMSwgCisgICAgNjE5MDUsIDYxOTA4LCA2MTkxNCwgNjE5MjEsIDYxOTI2LCA2MTkzMSwgNjE5MzgsIDYxOTQ1LCA2MTk1MSwgNjE5NTYsIAorICAgIDYxOTYxLCA2MTk2OSwgMzIxMTUsIDI0MjMsIDYxOTc0LCA2MTk3OSwgNjE5ODUsIDYxOTkwLCA2MTk5NiwgNjIwMDEsIAorICAgIDYyMDA2LCA2MjAxMSwgNjIwMTcsIDMyMTM2LCA2MjAyMiwgNjIwMjgsIDYyMDM0LCA2MjA0MCwgMzIyMDAsIDYyMDQ1LCAKKyAgICA2MjA1MCwgNjIwNTUsIDMyMjExLCA2MjA2MCwgNjIwNjUsIDYyMDcwLCA2MjA3NiwgNjIwODIsIDMyMjE2LCA2MjA4NywgCisgICAgNjIwOTIsIDYyMDk3LCAzMjI3MSwgMzIyNzcsIDYyMTAyLCA2MjEwNywgMzIyODIsIDYyMTEyLCAyNzk1OCwgMzIzMDQsIAorICAgIDMyMzA4LCA2MjExNywgNjIwOTMsIDYyMTIxLCA2MjEyOSwgNjIxMzUsIDYyMTQzLCA2MjE1MCwgNjIxNTYsIDYyMTY2LCAKKyAgICA2MjE3MiwgNjIxNzksIDEwNjMxLCAzMjMyMiwgNjIxODUsIDYyMTk4LCA2MjIwNywgNjIyMTMsIDYyMjIyLCA2MjIyOCwgCisgICAgMjM1MTIsIDYyMjM1LCA2MjI0MiwgNjIyNTIsIDMyMjcyLCA2MjI1NSwgNjIyNjIsIDYyMjY3LCA2MjI3MSwgNjIyNzUsIAorICAgIDYyMjgwLCA2MTIwLCA2MjI4NCwgNjIyODksIDYyMjk0LCAzNDcxMCwgMzQ3MTUsIDYyMjk4LCAzNDcyOSwgNjIzMDMsIAorICAgIDM0NzM0LCA2MjMwOCwgNjIzMTQsIDM0NzQ2LCAzNDc1MiwgMzQ3NTgsIDYyMzE5LCA2MjMyNSwgMjI1MzksIDYyMzM2LCAKKyAgICA2MjMzOSwgNjIzNTEsIDYyMzU5LCAzMjM0NSwgNjIzNjMsIDYyMzcyLCA2MjM4MiwgNjIzOTEsIDMyMzU1LCA2MjM5NiwgCisgICAgNjI0MDMsIDYyNDEyLCA2MjQxOCwgNjI0MjYsIDYyNDMzLCA2MDk1LCA0Mzk3LCA2MjQzOCwgMzIyODMsIDYyNDQ0LCAKKyAgICA2MjQ0NywgNjI0NTMsIDYyNDYwLCA2MjQ2NSwgNjI0NzAsIDIzNDIyLCA2MjQ3NCwgNjI0ODAsIDYyNDg2LCA2MjQ5MSwgCisgICAgNjI0OTYsIDYyNTAwLCA2MjUwNiwgNjI1MTIsIDMzNDgzLCA4NjMsIDM1NzIzLCAzNjY0NCwgMzY2NTAsIDMyMzkxLCAKKyAgICA2MjUxNywgNjI1MjEsIDYyNTI1LCA2MjUyOCwgNjI1NDEsIDYyNTQ3LCA2MjU1MSwgNjI1NTQsIDYyNTU5LCAzMzc4NiwgCisgICAgNjI1NjMsIDMxMTE2LCAyMTI4NywgNjI1NjksIDYwMjQsIDYwMzIsIDkwNzUsIDYyNTcyLCA2MjU3NywgNjI1ODIsIDYyNTg3LCAKKyAgICA2MjU5MiwgNjI1OTcsIDYyNjAyLCA2MjYwNywgNjI2MTIsIDYyNjE3LCA2MjYyMywgNjI2MjgsIDYyNjMzLCA2MjYzOSwgCisgICAgNjI2NDQsIDYyNjQ5LCA2MjY1NCwgNjI2NTksIDYyNjY0LCA2MjY2OSwgNjI2NzUsIDYyNjgwLCA2MjY4NiwgNjI2OTEsIAorICAgIDYyNjk2LCA2MjcwMSwgNjI3MDYsIDYyNzExLCA2MjcxNiwgNjI3MjEsIDYyNzI2LCA2MjczMSwgNjI3MzYsIDYyNzQyLCAKKyAgICA2Mjc0NywgNjI3NTIsIDYyNzU3LCA2Mjc2MiwgNjI3NjcsIDYyNzcyLCA2Mjc3OCwgNjI3ODMsIDYyNzg4LCA2Mjc5MywgCisgICAgNjI3OTgsIDYyODAzLCA2MjgwOCwgNjI4MTMsIDYyODE4LCA2MjgyMywgNjI4MjksIDYyODM0LCA2MjgzOSwgNjI4NDQsIAorICAgIDYyODQ5LCA2Mjg1NSwgNjI4NjEsIDYyODY2LCA2Mjg3MiwgNjI4NzcsIDYyODgyLCA2Mjg4NywgNjI4OTIsIDYyODk3LCAKKyAgICAxNTEzLCAyNDUsIDYyOTAyLCA2MjkwNiwgNjI5MTAsIDYyOTE0LCAyNTEzMywgNjI5MTgsIDYyOTIyLCA2MjkyNywgNjI5MzEsIAorICAgIDYyOTM2LCA2Mjk0MCwgNjI5NDUsIDYyOTUwLCA2Mjk1NSwgNjI5NTksIDYyOTYzLCA2Mjk2OCwgNjI5NzIsIDEzMzY5LCAKKyAgICA2Mjk3NywgNjI5ODEsIDYyOTg4LCA2Mjk5OCwgMTUyMDYsIDYzMDA3LCA2MzAxNiwgNjMwMjAsIDYzMDI1LCA2MzAzMCwgCisgICAgNjMwMzQsIDI0OTI0LCAzMDE5LCA2MzAzOCwgNjMwNDQsIDE3MzYzLCA2MzA0OCwgNjMwNTcsIDYzMDY1LCA2MzA3MSwgCisgICAgNjMwODMsIDYzMDk1LCA2MzA5OSwgNjMxMDQsIDYzMTA4LCA2MzExNCwgNjMxMjAsIDYzMTI1LCA2MzEzNSwgNjMxNDUsIAorICAgIDYzMTUxLCA2MzE1NiwgNjMxNjAsIDYzMTY1LCA2MzE3MSwgNjMxODAsIDYzMTg5LCA2MzE5NywgMTU1NjAsIDYzMjAxLCAKKyAgICA2MzIxMCwgNjMyMTgsIDYzMjMwLCA2MzI0MSwgNjMyNTIsIDYzMjYxLCA2MzI2NSwgNjMyNzQsIDYzMjg0LCA2MzI5MiwgCisgICAgNjMyOTgsIDYzMzAzLCA2MzMwOSwgNjMzMTQsIDk4LCAzMDkyNSwgNjMzMjUsIDI2MjY2LCAyNjI3NiwgNjMzMzEsIDYzMzM4LCAKKyAgICA2MzM0NCwgNjMzNDgsIDYzMzU4LCA2MzM2OSwgNjMzNzcsIDYzMzg2LCA2MzM5MSwgNjMzOTYsIDYzNDAwLCAxNzMxNywgCisgICAgNjM0MDgsIDYzNDEyLCA2MzQxOCwgNjM0MjgsIDYzNDM1LCA2MzQ0MSwgMzQ4MDksIDYzNDQ3LCA2MzQ0OSwgNjM0NTIsIAorICAgIDYzNDU2LCA2MzQ2NiwgNjM0NzIsIDYzNDc5LCAxMzMxNSwgNjM0ODYsIDYzNDkyLCA2MzUwMSwgNjM1MTAsIDYzNTE2LCAKKyAgICA2MzUyMiwgNjM1MjgsIDYzNTMzLCA2MzU0MCwgNjM1NDcsIDYzNTUzLCA2MzU2NiwgNjM1NzUsIDYzNTg0LCA2MzU4OSwgCisgICAgNjM1OTMsIDYzNTk5LCA2MzYwNiwgNjM2MTMsIDYzNjIwLCA2MzYyNywgNjM2MzQsIDYzNjM5LCA2MzY0MywgNjM2NDcsIAorICAgIDYzNjUwLCA2MzY2MCwgNjM2NjQsIDYzNjc2LCA2MzY4NSwgNjM2ODksIDYzNjk0LCA2MzY5OCwgNjM3MDQsIDYzNzA5LCAKKyAgICA2MzcxNiwgNjM3MjUsIDYzNzMzLCA2Mzc0MSwgNjM3NDYsIDYzNzUwLCA2Mzc1NSwgNjM3NjAsIDYzNzcwLCA2Mzc3OCwgCisgICAgNjM3ODMsIDYzNzg3LCA2Mzc5MSwgNjM3OTcsIDYzODA5LCA2MzgxNywgNjM4MjcsIDYzODM0LCA2Mzg0MCwgNjM4NDUsIAorICAgIDYzODQ5LCA2Mzg1MywgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODQsIDYzODkwLCA2Mzg5NiwgNjM5MDIsIDYzOTA3LCAKKyAgICA2MzkxNCwgNjM5MjAsIDYzOTI4LCA2MzkzNSwgMTI0NjMsIDYzOTQxLCA2Mzk0NywgNjM5NTEsIDE0MjQ0LCA2Mzk1NSwgCisgICAgNjM5NjAsIDYzOTcwLCA2Mzk3OSwgNjM5ODUsIDYzOTkxLCA2Mzk5OSwgNjQwMDYsIDY0MDEwLCA2NDAxNCwgNjQwMjAsIAorICAgIDY0MDI4LCA2NDAzNSwgNjQwNDEsIDY0MDUyLCA2NDA1NiwgNjQwNjAsIDY0MDY0LCA2NDA2NywgNjQwNzMsIDY0MDc4LCAKKyAgICA2NDA4MiwgNjQwODYsIDY0MDk1LCA2NDEwMywgNjQxMTAsIDY0MTE2LCA2NDEyMywgMjQwNDYsIDM4ODcwLCA2NDEyOCwgCisgICAgNjQxMzYsIDY0MTQwLCA2NDE0NCwgNjQxNDcsIDY0MTU1LCA2NDE2MiwgNjQxNjgsIDY0MTc3LCA2NDE4NSwgNjQxOTEsIAorICAgIDY0MTk2LCA2NDIwMCwgNjQyMDUsIDY0MjA5LCA2NDIxMywgNjQyMTgsIDY0MjI3LCA2NDIzMSwgNjQyMzgsIDY0MjQ1LCAKKyAgICA2NDI1MSwgNjQyNTksIDY0MjY1LCA2NDI3NiwgNjQyODQsIDY0MjkwLCAyMjY2OSwgNjQyOTksIDY0MzA2LCA2NDMxMywgCisgICAgNjQzMjAsIDY0MzI3LCA2NDMzNCwgNDE5MDcsIDEzMTUzLCA2NDM0MSwgNjQzNDgsIDY0MzUzLCAzNDg0NSwgNjIxNywgCisgICAgNjQzNTksIDY0MzY0LCA2NDM2OSwgNjQzNzUsIDY0MzgxLCA2NDM4NywgNjQzOTIsIDY0Mzk3LCA2NDQwMiwgNjQ0MDcsIAorICAgIDY0NDEzLCA2NDQxOCwgNjQ0MjQsIDY0NDI5LCA2NDQzNSwgNjQ0NDAsIDY0NDQ1LCA2NDQ1MCwgNjQ0NTUsIDY0NDYwLCAKKyAgICA2NDQ2NSwgNjQ0NzAsIDY0NDc2LCA2NDQ4MSwgNjQ0ODcsIDY0NDkyLCA2NDQ5NywgNjQ1MDIsIDY0NTA3LCA2NDUxMiwgCisgICAgNjQ1MTcsIDY0NTIzLCA2NDUyOCwgNjQ1MzMsIDY0NTM4LCA2NDU0MywgNjQ1NDgsIDY0NTUzLCA2NDU1OCwgNjQ1NjMsIAorICAgIDY0NTY4LCA2NDU3MywgNjQ1NzksIDY0NTg0LCA2NDU4OSwgNjQ1OTQsIDY0NTk5LCA2NDYwNCwgNjQ2MDksIDY0NjE0LCAKKyAgICA2NDYxOSwgNjQ2MjUsIDY0NjMwLCA2NDYzNSwgNjQ2NDAsIDY0NjQ1LCA2NDY1MCwgNjQ2NTUsIDY0NjYwLCA2NDY2NSwgCisgICAgNjQ2NzAsIDY0Njc1LCA2NDY4MCwgNjQ2ODUsIDY0NjkxLCAxODM0LCAyMjQsIDM3NDQ2LCA2NDY5NiwgNjQ2OTksIDY0NzA0LCAKKyAgICA2NDcwOCwgNjQ3MTEsIDY0NzE2LCA2MzczNywgNjQ3MjcsIDY0NzM3LCA2NDc0NCwgNjQ3NjAsIDY0NzY5LCA2NDc3OSwgCisgICAgNjQ3ODksIDY0Nzk3LCA2NDgxMSwgNjQ4MTksIDY0ODIzLCA2NDgyNiwgNjQ4MzMsIDY0ODM5LCA2NDg1MCwgNjQ4NjIsIAorICAgIDY0ODczLCA2NDg4MiwgNjQ4ODksIDEyOTcsIDIzMzExLCA2NDg5OSwgMjU5MCwgNjQ5MDMsIDY0OTEyLCAxMTM4LCAxNzI5MCwgCisgICAgMzgwODMsIDY0OTIwLCA2NDkyOCwgNjQ5NDIsIDY0OTU1LCA2NDk1OSwgNjQ5NjQsIDY0OTY5LCA2NDk3NCwgNjQ5ODAsIAorICAgIDY0OTg2LCA2NDk5MSwgODUzNSwgNjQ5OTYsIDY1MDAwLCA2NTAwOCwgMTEwNDgsIDY1MDEzLCA2NTAxOSwgNjUwMjgsIAorICAgIDE3MjEsIDExMDYwLCA3MzYsIDY1MDMyLCA2NTA0MSwgNjUwNTEsIDI3MDMwLCA2NTA2MCwgNjUwNjYsIDE2ODYyLCA2NTA3MiwgCisgICAgNjUwNzYsIDM5NjQsIDExMzkxLCA2NTA4MiwgNjUwODksIDYwNjkzLCA2NTA5MywgNjUwOTcsIDM5ODgsIDE4OSwgMTQxNTksIAorICAgIDY1MTAzLCA2NTExNSwgNjUxMTksIDY1MTI1LCAyNzc1MSwgNjUxMjksIDExMzc5LCAyNzMwLCA0LCA2NTEzNCwgNjUxNDQsIAorICAgIDY1MTUwLCA2NTE2MSwgNjUxNjgsIDY1MTc0LCA2NTE4MCwgNjUxODgsIDY1MTk1LCA2NTIwMSwgNjUyMTEsIDY1MjIxLCAKKyAgICA2NTIzMSwgMjM0OTksIDEzMDksIDY1MjQwLCA2NTI0NCwgNjUyNDgsIDY1MjU0LCA2NTI1OCwgMjc1MywgMjc1OSwgODUzMiwgCisgICAgMjI2NCwgNjUyNjIsIDY1MjY2LCA2NTI3NSwgNjUyODMsIDY1Mjk0LCA2NTMwMiwgNjUzMTAsIDY1MzE2LCA2NTMyMSwgCisgICAgNjUzMzIsIDY1MzQzLCA2NTM1MSwgNjUzNTcsIDk2OTQsIDY1MzYyLCA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgCisgICAgNjUzOTQsIDI4MTM2LCA2NTQwMSwgNjU0MTEsIDY1NDE3LCA2NTQyMywgOTc5NiwgNjU0MzMsIDY1NDQ0LCA2NTQ1NCwgCisgICAgNjU0NjMsIDY1NDY3LCA2NTQ3NCwgMTE0MCwgMTE3MCwgNjU0ODQsIDY1NDg5LCA2NTQ5NywgNjU1MDUsIDY1NTE2LCAKKyAgICA2NTUyMywgNjU1MzcsIDE0MDg4LCAzOTMsIDY1NTQ3LCA2NTU1MSwgNjU1NTksIDY1NTY4LCA2NTU3NiwgNjU1ODIsIAorICAgIDY1NTk2LCA2NTYwMywgNjU2MDksIDY1NjE4LCA2NTYyNSwgNjU2MzUsIDY1NjQzLCAzODEyLCAxNTYsIDY1NjUxLCA2NTY2MiwgCisgICAgNjU2NjYsIDY1Njc4LCAyNzk0OSwgMTYxLCA2NTY4NCwgNjU2ODksIDY1NjkzLCA2NTcwMCwgNjU3MDYsIDY1NzE0LCAKKyAgICA2NTcyMSwgODgxOCwgNjU3MjgsIDY1NzM3LCA2NTc0NSwgMzg3OCwgNjU3NTgsIDgxOTksIDY1NzYyLCAyNzk4LCA0NDMsIAorICAgIDY1NzY3LCA2NTc4MCwgNjU3ODUsIDE4MzMsIDY1MCwgNjU3ODksIDM4OTUsIDY1Nzk3LCA2NTgwMywgNjU4MDcsIDkzMSwgCisgICAgNjU4MTcsIDY1ODI2LCA2NTgzMSwgMTQ5MjgsIDE0OTM1LCA0NTI2OSwgNjU4MzUsIDM4MjIsIDEzMDQxLCA2NTg0MywgCisgICAgNjU4NTAsIDIzNTU1LCA2NTg1NCwgNjU4NjEsIDY1ODY3LCA2NTg3MiwgNjU4NzcsIDE0OTQ4LCAzNzIsIDY1ODgyLCAKKyAgICA2NTg5NCwgNjU5MDAsIDY1OTA4LCAyODEwLCAxNzUzLCA2NTkxNiwgNjU5MTgsIDY1OTIzLCA2NTkyOCwgNjU5MzMsIAorICAgIDY1OTM5LCA2NTk0NCwgNjU5NDksIDY1OTU0LCA2NTk1OSwgNjU5NjQsIDY1OTY5LCA2NTk3NSwgNjU5ODAsIDY1OTg1LCAKKyAgICA2NTk5MCwgNjU5OTUsIDY2MDAwLCA2NjAwNSwgNjYwMTAsIDY2MDE1LCA2NjAyMSwgNjYwMjYsIDY2MDMxLCA2NjAzNiwgCisgICAgNjYwNDIsIDY2MDQ3LCA2NjA1MywgNjYwNTgsIDY2MDYzLCA2NjA2OCwgNjYwNzMsIDY2MDc4LCA2NjA4MywgNjYwODgsIAorICAgIDY2MDk0LCA2NjA5OSwgNjYxMDUsIDY2MTEwLCA2NjExNSwgNjYxMjAsIDY2MTI1LCA2NjEzMCwgNjYxMzUsIDY2MTQwLCAKKyAgICA2NjE0NSwgNjYxNTEsIDY2MTU2LCA2NjE2MSwgNjYxNjYsIDY2MTcwLCA2NjE3NCwgNjYxNzksIDY2MTgzLCA2NjE4OCwgCisgICAgNjYxOTMsIDY2MTk5LCA2NjIwNCwgNjYyMDgsIDY2MjEzLCA2NjIxNywgNjYyMjAsIDY2MjIyLCA2NjIyNiwgNjYyMjksIAorICAgIDY2MjM0LCA2NjIzOCwgNjYyNDIsIDY2MjQ2LCA2NjI1MCwgNjYyNTksIDY2MjYzLCAzMjU0OSwgNjYyNjYsIDMyNTU0LCAKKyAgICA2NjI3MywgNjYyNzgsIDMyNTU5LCA2NjI4NywgNjYyOTYsIDMyNTY1LCA2NjMwMSwgMzI1NzAsIDY2MzEwLCA2NjMxNSwgCisgICAgMTE1NzgsIDY2MzE5LCA2NjMyNCwgNjYzMjksIDMyNTc1LCA2NjMzMywgNDAyMjUsIDY2MzM3LCA2NjM0MCwgNjYzNDQsIAorICAgIDgyMTEsIDY2MzUwLCA2NjM1NSwgNjYzNTksIDM3MDUsIDMyNTgwLCA2NjM2MiwgNjYzNjYsIDY2MzY5LCA2NjM3NCwgCisgICAgNjYzNzgsIDY2Mzg0LCA2NjM5MiwgNjY0MDUsIDY2NDE0LCA2NjQyMCwgNjY0MjUsIDY2NDMxLCA2NjQzNSwgNjY0NDEsIAorICAgIDY2NDQ5LCA2NjQ1NCwgNjY0NTgsIDY2NDY1LCA2NjQ3MSwgNjY0NzksIDY2NDg4LCA2NjQ5NiwgMzI1ODMsIDY2NTAzLCAKKyAgICA2NjUxMywgNjY1MjIsIDY2NTM1LCA2NjU0MCwgNjY1NDUsIDY2NTU0LCA2NjU2MCwgNjY1NjcsIDY2NTc4LCA2NjU5MCwgCisgICAgNjY1OTcsIDY2NjA2LCA2NjYxNSwgNjY2MjQsIDY2NjMxLCA2NjYzNywgNjY2NDQsIDY2NjUyLCA2NjY1OSwgNjY2NjcsIAorICAgIDY2Njc2LCA2NjY4NCwgNjY2OTEsIDY2Njk5LCA2NjcwOCwgNjY3MTYsIDY2NzI1LCA2NjczNSwgNjY3NDQsIDY2NzUyLCAKKyAgICA2Njc1OSwgNjY3NjcsIDY2Nzc2LCA2Njc4NCwgNjY3OTMsIDY2ODAzLCA2NjgxMiwgNjY4MjAsIDY2ODI5LCA2NjgzOSwgCisgICAgNjY4NDgsIDY2ODU4LCA2Njg2OSwgNjY4NzksIDY2ODg4LCA2Njg5NiwgNjY5MDMsIDY2OTExLCA2NjkyMCwgNjY5MjgsIAorICAgIDY2OTM3LCA2Njk0NywgNjY5NTYsIDY2OTY0LCA2Njk3MywgNjY5ODMsIDY2OTkyLCA2NzAwMiwgNjcwMTMsIDY3MDIzLCAKKyAgICA2NzAzMiwgNjcwNDAsIDY3MDQ5LCA2NzA1OSwgNjcwNjgsIDY3MDc4LCA2NzA4OSwgNjcwOTksIDY3MTA4LCA2NzExOCwgCisgICAgNjcxMjksIDY3MTM5LCA2NzE1MCwgNjcxNjIsIDY3MTczLCA2NzE4MywgNjcxOTIsIDY3MjAwLCA2NzIwNywgNjcyMTUsIAorICAgIDY3MjI0LCA2NzIzMiwgNjcyNDEsIDY3MjUxLCA2NzI2MCwgNjcyNjgsIDY3Mjc3LCA2NzI4NywgNjcyOTYsIDY3MzA2LCAKKyAgICA2NzMxNywgNjczMjcsIDY3MzM2LCA2NzM0NCwgNjczNTMsIDY3MzYzLCA2NzM3MiwgNjczODIsIDY3MzkzLCA2NzQwMywgCisgICAgNjc0MTIsIDY3NDIyLCA2NzQzMywgNjc0NDMsIDY3NDU0LCA2NzQ2NiwgNjc0NzcsIDY3NDg3LCA2NzQ5NiwgNjc1MDQsIAorICAgIDY3NTEzLCA2NzUyMywgNjc1MzIsIDY3NTQyLCA2NzU1MywgNjc1NjMsIDY3NTcyLCA2NzU4MiwgNjc1OTMsIDY3NjAzLCAKKyAgICA2NzYxNCwgNjc2MjYsIDY3NjM3LCA2NzY0NywgNjc2NTYsIDY3NjY2LCA2NzY3NywgNjc2ODcsIDY3Njk4LCA2NzcxMCwgCisgICAgNjc3MjEsIDY3NzMxLCA2Nzc0MiwgNjc3NTQsIDY3NzY1LCA2Nzc3NywgNjc3OTAsIDY3ODAyLCA2NzgxMywgNjc4MjMsIAorICAgIDY3ODMyLCA2Nzg0MCwgNjc4NDcsIDY3ODU1LCA2Nzg2NCwgNjc4NzIsIDY3ODgxLCA2Nzg5MSwgNjc5MDAsIDY3OTA4LCAKKyAgICA2NzkxNywgNjc5MjcsIDY3OTM2LCA2Nzk0NiwgNjc5NTcsIDY3OTY3LCA2Nzk3NiwgNjc5ODQsIDY3OTkzLCA2ODAwMywgCisgICAgNjgwMTIsIDY4MDIyLCA2ODAzMywgNjgwNDMsIDY4MDUyLCA2ODA2MiwgNjgwNzMsIDY4MDgzLCA2ODA5NCwgNjgxMDYsIAorICAgIDY4MTE3LCA2ODEyNywgNjgxMzYsIDY4MTQ0LCA2ODE1MywgNjgxNjMsIDY4MTcyLCA2ODE4MiwgNjgxOTMsIDY4MjAzLCAKKyAgICA2ODIxMiwgNjgyMjIsIDY4MjMzLCA2ODI0MywgNjgyNTQsIDY4MjY2LCA2ODI3NywgNjgyODcsIDY4Mjk2LCA2ODMwNiwgCisgICAgNjgzMTcsIDY4MzI3LCA2ODMzOCwgNjgzNTAsIDY4MzYxLCA2ODM3MSwgNjgzODIsIDY4Mzk0LCA2ODQwNSwgNjg0MTcsIAorICAgIDY4NDMwLCA2ODQ0MiwgNjg0NTMsIDY4NDYzLCA2ODQ3MiwgNjg0ODAsIDY4NDg5LCA2ODQ5OSwgNjg1MDgsIDY4NTE4LCAKKyAgICA2ODUyOSwgNjg1MzksIDY4NTQ4LCA2ODU1OCwgNjg1NjksIDY4NTc5LCA2ODU5MCwgNjg2MDIsIDY4NjEzLCA2ODYyMywgCisgICAgNjg2MzIsIDY4NjQyLCA2ODY1MywgNjg2NjMsIDY4Njc0LCA2ODY4NiwgNjg2OTcsIDY4NzA3LCA2ODcxOCwgNjg3MzAsIAorICAgIDY4NzQxLCA2ODc1MywgNjg3NjYsIDY4Nzc4LCA2ODc4OSwgNjg3OTksIDY4ODA4LCA2ODgxOCwgNjg4MjksIDY4ODM5LCAKKyAgICA2ODg1MCwgNjg4NjIsIDY4ODczLCA2ODg4MywgNjg4OTQsIDY4OTA2LCA2ODkxNywgNjg5MjksIDY4OTQyLCA2ODk1NCwgCisgICAgNjg5NjUsIDY4OTc1LCA2ODk4NiwgNjg5OTgsIDY5MDA5LCA2OTAyMSwgNjkwMzQsIDY5MDQ2LCA2OTA1NywgNjkwNjksIAorICAgIDY5MDgyLCA2OTA5NCwgNjkxMDcsIDY5MTIxLCA2OTEzNCwgNjkxNDYsIDY5MTU3LCA2OTE2NywgNjkxNzYsIDY5MTg0LCAKKyAgICA2OTE5MSwgNjkxOTYsIDgwNTgsIDY5MjAzLCAzMjU5MywgNjkyMDgsIDY5MjEzLCAzMjU5OCwgNjkyMTksIDIwOTI5LCAKKyAgICAzMjYwMywgNjkyMjQsIDY5MjMwLCA2OTIzOCwgNjkyNDQsIDY5MjUwLCA2OTI1NywgNjkyNjQsIDY5MjY5LCA2OTI3MywgCisgICAgNjkyNzYsIDY5MjgwLCA2OTI4OSwgNjkyOTUsIDY5MzA3LCA2OTMxOCwgNjkzMjIsIDMwODEsIDgwMzMsIDY5MzI3LCAKKyAgICA2OTMzMCwgNjkzMzIsIDY5MzM2LCA2OTM0MCwgNjkzNDQsIDY5MzUwLCA2OTM1NSwgMjU5NDQsIDY5MzYwLCA2OTM2NCwgCisgICAgNjkzNjcsIDY5MzcyLCA2OTM3NiwgNjkzODMsIDY5Mzg5LCA2OTM5MywgNjE3MCwgNjkzOTcsIDMyNjIwLCA2OTQwMiwgCisgICAgNjk0MDksIDY5NDE4LCA2OTQyNiwgNjk0MzcsIDY5NDQ1LCA2OTQ1MywgNjk0NjAsIDY5NDY3LCA2OTQ3MywgNjk0ODQsIAorICAgIDMyNjI1LCA2OTQ4OSwgNjk1MDAsIDY5NTEyLCA2OTUyMCwgNjk1MzEsIDY5NTQwLCA2OTU1MSwgNjk1NTYsIDY5NTY0LCAKKyAgICAyNTU2LCA2OTU2OSwgMzQyOTUsIDY5NTgyLCA2OTU4NiwgNjk1OTgsIDY5NjA2LCA2OTYxMSwgNjk2MTksIDE3NDg1LCAKKyAgICA2OTYzMCwgNjk2MzYsIDY5NjQzLCA2OTY1MSwgNjk2NTcsIDMyNjM1LCA2OTY2MiwgMzkxNCwgNTgyNTQsIDY5NjY5LCAKKyAgICA2OTY3MiwgNjk2ODAsIDY5NjkzLCA2OTcwNiwgNjk3MTksIDY5NzMyLCA2OTczOSwgNjk3NTAsIDY5NzU5LCA0MTcyNCwgCisgICAgNDE3MjksIDY5NzY0LCA2OTc2OCwgNjk3NzYsIDY5NzgzLCA2OTc5MiwgNjk4MDAsIDY5ODA2LCA2OTgxNSwgNjk4MjMsIAorICAgIDY5ODMxLCA2OTgzNSwgNjk4NDQsIDY5ODUzLCA2OTg2MywgNjk4NzYsIDY5ODg5LCA2OTg5OSwgMzI2NDAsIDY5OTA1LCAKKyAgICA2OTkxMiwgNjk5MTgsIDMyNjQ2LCA2OTkyMywgNjk5MjYsIDY5OTMwLCA2OTkzOCwgNjk5NDcsIDQxNDYyLCA2OTk1NSwgCisgICAgNjk5NjQsIDY5OTcyLCA2OTk3OSwgNjk5ODcsIDY5OTk3LCA3MDAwNiwgNzAwMTUsIDcwMDI0LCA3MDAzMiwgNzAwNDMsIAorICAgIDcwMDUzLCA5MzY2LCAyMTU2NywgNzAwNjIsIDcwMDY3LCA3MDA3MiwgNzAwNzYsIDcwMDgwLCA3MDA4NSwgNzAwOTEsIAorICAgIDcwMDk2LCA3MDEwMSwgNzAxMDcsIDcwMTEyLCA3MDExNywgMjE1MzIsIDcwMTIyLCA3MDEyOSwgNzAxMzcsIDcwMTQ1LCAKKyAgICA3MDE1MCwgNzAxNTcsIDcwMTY0LCA3MDE2OSwgNzAxNzMsIDcwMTc3LCA3MDE4NSwgNzAxOTMsIDMyNjYzLCA3MDE5OSwgCisgICAgNzAyMDUsIDcwMjE3LCA3MDIyMywgNzAyMjcsIDcwMjM0LCA3MDIzOSwgNzAyNTAsIDcwMjYwLCA3MDI3MCwgNzAyODIsIAorICAgIDcwMjg4LCA3MDI5OCwgNzAzMDgsIDMyNjkwLCA3MDMxNywgNzAzMjYsIDcwMzMyLCA3MDM0NCwgNzAzNTUsIDcwMzYyLCAKKyAgICA3MDM2NywgNzAzNzEsIDcwMzc5LCA3MDM4NSwgNzAzOTAsIDcwMzk1LCA3MDQwMiwgNzA0MTAsIDcwNDIyLCA3MDQzMiwgCisgICAgNzA0NDEsIDcwNDUwLCA3MDQ1NywgMzQxNTcsIDIzODUxLCA3MDQ2MywgNzA0NjgsIDcwNDcyLCA3MDQ3NiwgNzA0ODEsIAorICAgIDcwNDg3LCA3MDQ5OCwgNzA1MTEsIDcwNTE2LCA3MDUyMywgMzI2OTUsIDcwNTI4LCA3MDU0MCwgNzA1NDksIDcwNTU5LCAKKyAgICA3MDU3MCwgNzA1ODMsIDcwNTkwLCA3MDU5OSwgNzA2MDgsIDcwNjE2LCA3MDYyMSwgNzA2MjcsIDEwNjksIDcwNjMyLCAKKyAgICA3MDYzNywgNzA2NDIsIDcwNjQ3LCA3MDY1MywgNzA2NTgsIDcwNjYzLCA3MDY2OSwgNzA2NzUsIDcwNjgwLCA3MDY4NCwgCisgICAgNzA2ODksIDcwNjk0LCA3MDY5OSwgNTg3NjYsIDcwNzA0LCA3MDcwOSwgNzA3MTQsIDcwNzE5LCA3MDcyNSwgNzA3MzEsIAorICAgIDcwNzM2LCA3MDc0MCwgNzA3NDUsIDcwNzUwLCA3MDc1NSwgNzA3NjEsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIDcwNzgyLCAKKyAgICA3MDc4NywgNzA3OTIsIDcwNzk2LCA3MDgwMiwgNzA4MDcsIDcwODE2LCA3MDgyMSwgNzA4MjYsIDcwODMxLCA3MDgzNiwgCisgICAgNzA4NDAsIDcwODQ3LCA3MDg1MywgMTcxMzUsIDE3MTQyLCA3MDg1OCwgNzA4NjIsIDcwODY2LCA3MDg3MCwgNzA4NzQsIAorICAgIDQ1NTI0LCA3MDg3OCwgNzA4MDgsIDcwODgwLCA3MDg5MCwgMzI3MDQsIDcwODkzLCA3MDkwMiwgNzA5MDgsIDYxNDMsIAorICAgIDMyNzA5LCA3MDkxMiwgNzA5MTgsIDcwOTIzLCA3MDkyOSwgNzA5MzQsIDcwOTM4LCA3MDk0NSwgNzA5NTAsIDcwOTYwLCAKKyAgICA3MDk2OSwgNzA5NzMsIDcwOTc5LCA3MDk4NSwgNzA5OTEsIDcwOTk1LCA3MTAwMywgNzEwMTAsIDcxMDE4LCA3MTAyNiwgCisgICAgMzI3MTQsIDcxMDMzLCA3MTAzNiwgNzEwNDMsIDcxMDQ5LCA3MTA1NCwgNzEwNTgsIDcxMDY0LCA3MTA3MSwgNzEwNzYsIAorICAgIDcxMDgwLCA3MTA4OSwgNzEwOTcsIDcxMTAzLCA3MTEwOCwgMzI3MTksIDcxMTE1LCA3MTEyMiwgNzExMjgsIDcxMTMzLCAKKyAgICA3MTEzOSwgNzExNDYsIDcxMTUyLCAyMTI5NCwgMjc0NTUsIDcxMTU4LCA3MTE2MywgNzExNjksIDcxMTgxLCA3MDg0MSwgCisgICAgNzA4NDgsIDIxNDcwLCA3MTE5MSwgNzExOTYsIDcxMjAzLCA3MTIwOSwgNzEyMTYsIDcxMjIyLCA3MTIzMywgNzEyMzgsIAorICAgIDkxMTAsIDcxMjQ2LCA3MTI0OSwgNzEyNTUsIDcxMjU5LCA3MTI2MywgNzEyNjYsIDcxMjcyLCAzMjQ2OCwgNjE5NCwgOTY0LCAKKyAgICAxMzQxOSwgNzEyNzksIDcxMjg1LCA3MTI5MSwgNzEyOTcsIDcxMzAzLCA3MTMwOSwgNzEzMTUsIDcxMzIxLCA3MTMyNywgCisgICAgNzEzMzIsIDcxMzM3LCA3MTM0MiwgNzEzNDcsIDcxMzUyLCA3MTM1NywgNzEzNjIsIDcxMzY3LCA3MTM3MiwgNzEzNzcsIAorICAgIDcxMzgyLCA3MTM4NywgNzEzOTIsIDcxMzk4LCA3MTQwMywgNzE0MDgsIDcxNDE0LCA3MTQxOSwgNzE0MjQsIDcxNDMwLCAKKyAgICA3MTQzNiwgNzE0NDIsIDcxNDQ4LCA3MTQ1NCwgNzE0NjAsIDcxNDY2LCA3MTQ3MiwgNzE0NzgsIDcxNDgzLCA3MTQ4OCwgCisgICAgNzE0OTQsIDcxNDk5LCA3MTUwNCwgNzE1MTAsIDcxNTE1LCA3MTUyMCwgNzE1MjUsIDcxNTMwLCA3MTUzNSwgNzE1NDAsIAorICAgIDcxNTQ1LCA3MTU1MCwgNzE1NTUsIDcxNTYwLCA3MTU2NSwgNzE1NzAsIDcxNTc2LCA3MTU4MSwgNzE1ODYsIDcxNTkxLCAKKyAgICA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgNzE2MTcsIDcxNjIzLCA3MTYyOCwgNzE2MzMsIDcxNjM4LCA3MTY0MywgCisgICAgNzE2NDgsIDcxNjUzLCA3MTY1OCwgNzE2NjMsIDcxNjY4LCA3MTY3MywgNzE2NzgsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIAorICAgIDcxNjk4LCA3MTcwMywgNzE3MDgsIDcxNzEzLCA3MTcxOCwgNzE3MjQsIDcxNzI5LCA3MTczNCwgNzE3MzksIDcxNzQ0LCAKKyAgICA3MTc0OSwgNzE3NTQsIDcxNzU5LCAxODY0LCAxNDIsIDcxNzY0LCA3MTc2OCwgNzE3NzIsIDcxNzc3LCA3MTc4NSwgNzE3ODksIAorICAgIDcxNzk2LCA3MTgwNCwgNzE4MDgsIDcxODIxLCA3MTgyOSwgNzE4MzMsIDcxODM2LCA3MTg0MSwgNzE4NDUsIDcxODUwLCAKKyAgICA3MTg1NCwgNzE4NjIsIDcxODY2LCAyMDkzNywgNzE4NzEsIDcxODc1LCA2MDk2NywgNzE4NzksIDcxODgyLCA3MTg5MCwgCisgICAgNzE4OTgsIDcxOTA2LCA3MTkxMSwgNzE5MTgsIDcxOTI0LCA3MTkzMCwgNzE5MzUsIDcxOTQyLCA3MTk0NywgNzE5NTUsIAorICAgIDY0OTQ3LCA3MTk2MiwgNzE5NjcsIDcxOTcyLCA3MTk3NiwgMTE2NDUsIDcxOTgwLCA3MTk4NSwgNzE5OTAsIDcxOTk0LCAKKyAgICA3MTk5NywgNzIwMDMsIDcyMDA3LCA3MjAxNywgNzIwMjYsIDcyMDI5LCA3MjAzMywgNzIwNDAsIDcyMDUzLCA3MjA1OSwgCisgICAgNzIwNjcsIDcyMDc4LCA3MjA4OSwgNzIxMDAsIDcyMTExLCA3MjEyMCwgNzIxMjYsIDcyMTM1LCA3MjE0MywgNzIxNTMsIAorICAgIDcyMTY2LCA3MjE3MywgNzIxODQsIDcyMTkwLCA3MjE5NSwgNzIyMDAsIDcyMjA2LCA3MjIxMiwgNzIyMjIsIDcyMjMxLCAKKyAgICA3MDUzMCwgNzIyMzksIDcyMjQ1LCA3MjI1MywgNzIyNTksIDcyMjY3LCA3MjI3MCwgNzIyNzQsIDcyMjc4LCA3MjI4MSwgCisgICAgNzIyODcsIDcyMjkzLCA3MjMwMSwgNzIzMTMsIDcyMzI1LCA3MjMzMiwgNzIzMzYsIDcyMzQ3LCA3MjM1NSwgNzIzNjIsIAorICAgIDcyMzc0LCA3MjM4MiwgNzIzOTAsIDcyMzk3LCA3MjQwMywgNzI0MTMsIDcyNDIyLCA3MjQyNywgNzI0MzcsIDcyNDQ2LCAKKyAgICA0MDc4OCwgNzI0NTMsIDcyNDU3LCA3MjQ2MiwgNzI0NzAsIDcyNDc3LCA3MjQ4MywgNzI0ODcsIDcyNDk3LCA3MjUwOCwgCisgICAgNzI1MTYsIDcyNTIzLCA3MjUzNSwgNzI1NDcsIDcyNTU2LCA2OTU3MiwgNzI1NjMsIDcyNTc0LCA3MjU4OCwgNzI1OTYsIAorICAgIDcyNjA2LCA3MjYxMywgNzI2MjEsIDcyNjMzLCA3MjY0MiwgNzI2NTAsIDcyNjYwLCA3MjY3MSwgNzI2ODMsIDcyNjkyLCAKKyAgICA3MjcwMiwgNzI3MDksIDcyNzE4LCA3MjczMywgNzI3NDEsIDcyNzUxLCA3Mjc2MCwgNzI3NjgsIDcyNzgxLCA3Mjc5NiwgCisgICAgNzI4MDAsIDcyODA5LCA3MjgyMSwgNzI4MzIsIDcyODQzLCA3Mjg1NCwgNzI4NjQsIDcyODc1LCA3Mjg4MywgNzI4ODksIAorICAgIDcyODk5LCA3MjkwNywgNzI5MTMsIDI5MDI4LCA3MjkxOCwgNzI5MjQsIDcyOTI5LCA3MjkzNiwgOTcwOCwgMTc1MDUsIAorICAgIDcyOTQyLCA3Mjk1MSwgNzI5NTYsIDcyOTYwLCA3Mjk2NywgNzI5NzMsIDcyOTc4LCA3Mjk4MywgNzI5OTEsIDcyOTk5LCAKKyAgICA3MzAwMywgNzMwMDYsIDczMDA5LCA3MzAxMSwgNzMwMTgsIDczMDI0LCA3MzAzNSwgNzMwNDAsIDczMDQ0LCA3MzA1MSwgCisgICAgNzMwNTcsIDczMDYyLCA3MzA3MCwgNjU0NDYsIDY1NDU2LCA3MzA3NiwgNzMwODMsIDczMDkzLCAxMDYxOCwgNzMxMDAsIAorICAgIDczMTA1LCAyOTIyNCwgNzMxMTQsIDczMTE5LCA3MzEyNiwgNzMxMzYsIDczMTQ0LCA3MzE1MiwgNzMxNjEsIDczMTY3LCAKKyAgICA3MzE3MywgNzMxODAsIDczMTg3LCA3MzE5MiwgNzMxOTYsIDczMjA0LCA3MzIwOSwgNzMyMTQsIDczMjIyLCA3MzIyOSwgCisgICAgNzMyMzQsIDczMjQwLCA3MzI0MywgNzMyNDcsIDczMjU2LCA3MTgxNiwgNzMyNjUsIDczMjY5LCA3MzI3NSwgNzMyODYsIAorICAgIDczMjk2LCAxNzUxNCwgNzMzMDcsIDczMzE1LCAxNzUyNiwgNzMzMjIsIDczMzI2LCA3MzMzNSwgMjczNDEsIDczMzQyLCAKKyAgICA3MzM0NiwgNzMzNTEsIDczMzY4LCA3MzM4MCwgMTA1NzYsIDczMzkyLCA3MzM5NywgNzM0MDIsIDczNDA3LCAyMTAxMCwgCisgICAgNzM0MTEsIDczNDE2LCA3MzQyMSwgNzM0MjcsIDczNDMyLCA1ODQ2LCAyMTAxNCwgNzM0MzcsIDczNDQyLCA3MzQ0OCwgCisgICAgNzM0NTUsIDczNDYwLCA3MzQ2NSwgNzM0NzEsIDczNDc3LCA3MzQ4MywgNzM0ODgsIDczNDk0LCA3MzQ5OCwgNzM1MTIsIAorICAgIDczNTIwLCA3MzUyOCwgNzM1MzQsIDczNTM5LCA3MzU0NiwgNzM1NTYsIDczNTY1LCA3MzU3MCwgNzM1NzUsIDczNTgzLCAKKyAgICA3MzU4OCwgNzM1OTQsIDczNTk5LCA3MzYwOCwgNTk4MjMsIDczNjEzLCA3MzYxNiwgNzM2MzQsIDczNjUzLCA3MzY2NiwgCisgICAgNzM2ODAsIDczNjk2LCA3MzcwMywgNzM3MTAsIDczNzE2LCA3MzcyMywgNzM3MjgsIDczNzM0LCA3Mzc0MCwgNzM3NDgsIAorICAgIDczNzU0LCA3Mzc1OSwgNzM3NjQsIDczNzgwLCAxMDU4OSwgNzM3OTQsIDczODAxLCA3MzgwOSwgNzM4MTUsIDczODE5LCAKKyAgICA3MzgyMiwgNzM4MjcsIDczODMyLCA3MzgzOSwgNzM4NDQsIDczODUzLCA3Mzg1OCwgNzM4NjQsIDczODczLCA3Mzg4MiwgCisgICAgNzM4ODcsIDczODkxLCA3Mzg5OSwgNzM5MDgsIDExNjc0LCA3MzkxNywgNzM5MjUsIDczOTMwLCA3MzkzNiwgMTE2ODUsIAorICAgIDczOTQxLCA3Mzk0NCwgNzM5NDksIDczOTU5LCA3Mzk2OCwgNzM5NzMsIDczOTc5LCA3Mzk4NCwgNzM5OTIsIDczOTk5LCAKKyAgICA3NDAxMCwgNzQwMjAsIDc0MDI1LCA2NDg3NSwgNzQwMzAsIDc0MDM2LCA3NDA0MSwgNzQwNDgsIDc0MDU3LCA3NDA2NSwgCisgICAgNzQwNzEsIDc0MDc3LCA3NDA4NCwgNzQwOTAsIDc0MDk0LCAxNjk2MCwgMzA1NSwgNzQwOTksIDc0MTAzLCA3NDEwNywgCisgICAgNzQxMTMsIDc0MTIyLCA3NDEyOCwgNzQxMzUsIDc0MTM5LCA3NDE2MCwgNzQxODIsIDc0MTk4LCA3NDIxNSwgNzQyMzQsIAorICAgIDc0MjQzLCA3NDI1MywgNzQyNjAsIDc0MjY3LCAyNzIyOCwgNzQyNzMsIDc0Mjc3LCA3NDI4NSwgNzQyOTcsIDc0MzAzLCAKKyAgICA3NDMxMSwgNzQzMTUsIDc0MzIzLCA3NDMzMCwgNzQzMzQsIDc0MzQwLCA3NDM0NiwgNzQzNTEsIDM1NjMsIDQxOTI0LCAKKyAgICA3NDM1NywgNzQzNjEsIDc0MzY1LCA3NDM2OSwgNzQzNzQsIDc0Mzc5LCA3NDM4NCwgNzQzOTAsIDc0Mzk2LCA3NDQwMiwgCisgICAgNzQ0MDksIDc0NDE1LCA3NDQyMiwgNzQ0MjgsIDc0NDM0LCA3NDQzOSwgNzQ0NDUsIDc0NDUwLCA3NDQ1NCwgNzQ0NTksIAorICAgIDc0NDYzLCA3NDQ2OCwgNDE5MzksIDc0NDcyLCA3NDQ3NywgNzQ0ODUsIDc0NDg5LCA3NDQ5NCwgNzQ1MDEsIDc0NTEwLCAKKyAgICA3NDUxNiwgNzQ1MjAsIDc0NTI3LCA3NDUzMSwgNzQ1MzQsIDc0NTQxLCA3NDU1MCwgNzQ1NTUsIDc0NTU5LCA3NDU2NywgCisgICAgNzQ1NzYsIDc0NTgwLCA3NDU4OCwgNzQ1OTQsIDc0NTk5LCA3NDYwNCwgNzQ2MTAsIDc0NjE2LCA3NDYyMSwgNzQ2MjUsIAorICAgIDc0NjMxLCA3NDYzNiwgNzQ2NDAsIDc0NjQ0LCA3NDY0NywgNzQ2NTIsIDc0NjYwLCA3NDY3MCwgNzQ2NzUsIDM5NDE2LCAKKyAgICA3NDY4MywgNzQ2OTUsIDc0Njk5LCA3NDcwNSwgNzQ3MTcsIDc0NzI4LCA3NDczNSwgNzQ3NDEsIDc0NzQ4LCA3NDc2MCwgCisgICAgNzQ3NjcsIDc0NzczLCAyMTA4OCwgNzQ3NzcsIDc0NzgzLCA3NDc5MCwgNzQ3OTYsIDc0ODAyLCA3NDgwNywgNzQ4MTIsIAorICAgIDc0ODE3LCA3NDgyNiwgNzAzMywgNzQ4MzEsIDE2NDI2LCA3NDgzNywgNzQ4NDEsIDc0ODQ1LCA3NDg0OSwgNzQ4NTcsIAorICAgIDc0ODY2LCA3NDg3MCwgNzQ4NzcsIDc0ODg2LCA3NDg5OSwgNzQ5MDUsIDc0NDY0LCAzMDA4OCwgNzQ5MTAsIDc0OTEyLCAKKyAgICA3NDkxNywgNzQ5MjIsIDc0OTI3LCA3NDkzMiwgNzQ5MzcsIDc0OTQyLCA3NDk0NywgNzQ5NTIsIDc0OTU3LCA3NDk2MiwgCisgICAgNzQ5NjcsIDc0OTcyLCA3NDk3NywgNzQ5ODIsIDc0OTg4LCA3NDk5MywgNzQ5OTgsIDc1MDAzLCA3NTAwOCwgNzUwMTMsIAorICAgIDc1MDE4LCA3NTAyMywgNzUwMjgsIDc1MDM0LCA3NTA0MCwgNzUwNDYsIDc1MDUxLCA3NTA1NiwgNzUwNjgsIDc1MDczLCAKKyAgICAxODcwLCA0NiwgNzUwNzgsIDc1MDgzLCAzMjc0NiwgNzUwODcsIDMyNzUxLCAzMjc1NiwgMzI3NjIsIDMyNzY3LCA3NTA5MSwgCisgICAgMzI3NzIsIDIyMDgzLCA3NTExMywgNzUxMTcsIDc1MTIxLCA3NTEyNiwgNzUxMzAsIDMyNzc2LCA3NTEzNCwgNzUxNDIsIAorICAgIDMyNzgxLCA3NTE0OSwgNzUxNTIsIDc1MTU3LCA3NTE2MSwgOTU0MywgNzUxNzAsIDMyNzg2LCAyMTk0NSwgNzUxNzMsIAorICAgIDc1MTc3LCAxNDI4LCA3NTE4MiwgMzI3OTcsIDc1MTg1LCA3NTE5MCwgMjU3MzcsIDI1NzQ3LCAzNTI1OCwgNzUxOTUsIAorICAgIDc1MjAwLCA3NTIwNSwgNzUyMTAsIDc1MjE2LCA3NTIyMSwgNzUyMzAsIDc1MjM1LCA3NTI0MiwgNzUyNDgsIDc1MjUzLCAKKyAgICA3NTI1OCwgNzUyNjMsIDc1MjczLCA3NTI4MiwgNzUyODcsIDc1Mjk1LCA3NTI5OSwgNzUzMDcsIDMyNjExLCAzNzMxNywgCisgICAgNzUzMTQsIDc1MzIwLCA3NTMyNSwgNzUzMzAsIDEyMDE2LCA3NTMzNSwgNzUzNDEsIDc1MzQ2LCA3NTM1MywgNzUzNTksIAorICAgIDc1MzY0LCA3NTM3MiwgNzUzODIsIDc1MzkyLCA3NTM5OCwgNzU0MDMsIDc1NDA5LCAxNzUzNiwgNzU0MTYsIDM2MDczLCAKKyAgICA3NTQyOSwgNzU0MzQsIDc1NDQwLCAzMDk5MywgNzU0NTMsIDc1NDU5LCA3NTQ2MywgNzU0NzIsIDc1NDc5LCA3NTQ4NSwgCisgICAgNzU0OTMsIDc1NTAyLCA3NTUwOSwgNzU1MTUsIDc1NTE4LCA3NTUyMiwgMjU4NzgsIDc1NTI2LCA3NTUzMywgNzU1MzksIAorICAgIDc1NTQ3LCA3NTU1MiwgMjM5OTQsIDc1NTU4LCA3NTU2MSwgNzU1NjksIDc1NTc3LCA3NTU5MSwgNzU1OTgsIDc1NjA0LCAKKyAgICA3NTYxMSwgNzU2MTcsIDMyODExLCA3NTYyMSwgNzU2MjgsIDc1NjM2LCA3NTY0NCwgNzU2NTAsIDMyODE2LCA3NTY1OCwgCisgICAgNzU2NjQsIDc1NjY5LCA3NTY3OSwgNzU2ODUsIDc1Njk0LCAzMDgzMCwgMzQ3MTYsIDc1NzAyLCA3NTcwNywgNzU3MTIsIAorICAgIDc1NzE2LCA3NTcyMSwgNzU3MjUsIDc1NzMzLCAxNDkyMCwgMzk0MjksIDc1NzM4LCA3NTc0MywgMzI4MjEsIDYyMjY5LCAKKyAgICA3NTc0NywgNzU3NTIsIDc1NzU2LCA3NTc2NSwgNzU3NzMsIDc1Nzc5LCA3NTc4NCwgNzU3OTAsIDc1Nzk3LCA3NTgwMywgCisgICAgNzU4MDgsIDc1ODEzLCA3NTgyMiwgNzU4MzQsIDc1ODQ5LCAzMzA4MywgNzU4NTUsIDE2NTQ1LCAzMjgyNSwgNzU4NTksIAorICAgIDc1ODY2LCAyNDEwNCwgNzU4NzIsIDc1ODc5LCA3NTg4OCwgNzU4OTUsIDc1OTA0LCA3NTkxMCwgNzU5MTUsIDc1OTIzLCAKKyAgICA3NTkyOSwgMzI4MzUsIDc1OTM0LCA3NTk0MywgNzQ3MjMsIDc1OTUyLCA3NTk1OSwgNzU5NjUsIDc1OTcxLCA3NTk4MSwgCisgICAgNzU5ODksIDc1OTk2LCA3NjAwMCwgMzI4NDAsIDc2MDAzLCAzMjg0NiwgMzI4NTIsIDc2MDA4LCA3NjAxNiwgNzYwMjQsIAorICAgIDc2MDM0LCA3NjA0MywgNzYwNTEsIDc2MDU4LCA3NjA2OCwgMzI4NTcsIDc2MDcyLCA3NjA3NCwgNzYwNzgsIDc2MDgzLCAKKyAgICA3NjA4NywgNzYwOTEsIDc2MDk3LCA3NjEwMiwgNzYxMDYsIDc2MTE3LCA3NjEyMiwgNzYxMjcsIDMwNjAsIDc2MTMxLCAKKyAgICA3NjEzOCwgNzYxNDIsIDc2MTUxLCA3NjE1OSwgNzYxNjYsIDc2MTcxLCA3NjE3NiwgNjIzMTUsIDc2MTgwLCA3NjE4MywgCisgICAgNzYxODksIDc2MTk3LCA3NjIwMywgNzYyMDcsIDc2MjEyLCA3NjIxOSwgNzYyMjQsIDc2MjMwLCAzNDc0NywgNzYyMzUsIAorICAgIDc2MjM4LCA3NjI0MywgNzYyNDcsIDc2MjUyLCA3NjI1NywgNzYyNjEsIDc2MjY5LCA3NjI3MywgMjU3NTYsIDI1NzY1LCAKKyAgICA3NjI3OSwgNzYyODUsIDc2MjkxLCA3NjI5NiwgNzYzMDAsIDc2MzAzLCA3NjMxMywgNzYzMjIsIDc2MzI3LCA3NjMzMywgCisgICAgNzYzNDAsIDc2MzQ2LCA3NjM1MCwgNzYzNTgsIDc2MzYzLCAzNDc1MywgNzYzNjcsIDc2Mzc1LCA3NjM4MSwgNzYzODgsIAorICAgIDc2MzkzLCA3NjM5NywgNzY0MDIsIDU4NDQwLCAzNDc1OSwgNzY0MDgsIDc2NDEzLCA3NjQxNywgNzY0MjIsIDc2NDI3LCAKKyAgICA3NjQzMiwgNzY0MzYsIDc2NDQxLCA3NjQ0NiwgNzY0NTIsIDc2NDU3LCA3NjQ2MiwgNzY0NjgsIDc2NDc0LCA3NjQ3OSwgCisgICAgNzY0ODMsIDc2NDg4LCA3NjQ5MywgNzY0OTgsIDc2NTAyLCAyNDEwMywgNzY1MDcsIDc2NTEyLCA3NjUxOCwgNzY1MjQsIAorICAgIDc2NTMwLCA3NjUzNSwgNzY1MzksIDc2NTQ0LCA3NjU0OSwgNzY1NTQsIDc2NTU4LCA3NjU2MywgNzY1NjgsIDc2NTczLCAKKyAgICA3NjU3OCwgNzY1ODIsIDMyODY1LCA3NjU5MCwgNzY1OTQsIDc2NjAyLCA3NjYxMCwgNzY2MjEsIDc2NjI2LCA3NjYzMCwgCisgICAgMjIzOTcsIDc2NjM1LCA3NjY0MSwgNzY2NTEsIDc2NjU4LCA3NjY2MywgNzY2NzIsIDc2Njc3LCA3NjY4MSwgNzY2ODYsIAorICAgIDc2Njk0LCA3NjcwMiwgNzY3MDksIDY1MTA5LCA3NjcxNSwgNzY3MjMsIDc2NzMwLCA3Njc0MSwgNzY3NDcsIDc2NzUxLCAKKyAgICA3Njc1NywgMzI4NzUsIDc2NzYwLCA3Njc2NywgNzY3NzUsIDc2NzgwLCAzOTYyMCwgNzY3ODQsIDc2Nzg5LCA3Njc5NiwgCisgICAgNzY4MDEsIDg5OTIsIDc2ODA1LCA3NjgxMywgNzY4MjAsIDc2ODI3LCA3NjgzMywgNzY4NDcsIDYzMzgxLCA3Njg1NSwgCisgICAgNzY4NjEsIDc2ODY1LCA3Njg2OCwgNzY4NzYsIDc2ODgzLCA3Njg4OCwgNzY5MDEsIDc2OTA4LCA3NjkxMiwgNzY5MTksIAorICAgIDc2OTI0LCA2MDg2MCwgNzY5MjksIDc2OTMyLCA3NjkzOSwgNzY5NDUsIDc2OTQ5LCA3Njk1NywgNzY5NjYsIDc2OTc2LCAKKyAgICA3Njk4NiwgNzY5OTUsIDc3MDAzLCA3NzAxNCwgNzcwMTksIDc3MDIzLCA3NzAyOCwgNzcwMzIsIDM1Mzg5LCA3NzA0MCwgCisgICAgMjEzNTcsIDM1Mzk4LCA3NzA0NSwgNzcwNTAsIDc3MDU1LCA3NzA2MCwgNzcwNjUsIDc3MDcwLCA3NzA3NSwgNzcwNzksIAorICAgIDc3MDg0LCA3NzA4OSwgNzcwOTQsIDc3MDk5LCA3NzEwNCwgNzcxMDksIDc3MTEzLCA3NzExOCwgNzcxMjMsIDc3MTI3LCAKKyAgICA3NzEzMSwgNzcxMzUsIDc3MTM5LCA3NzE0NCwgNzcxNDksIDc3MTUzLCA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MSwgCisgICAgNzcxNzYsIDc3MTgxLCA3NzE4NiwgNzcxOTAsIDc3MTk1LCA3NzIwMCwgNzcyMDQsIDc3MjA5LCA3NzIxNCwgNzcyMTksIAorICAgIDc3MjI0LCA3NzIyOSwgNzcyMzQsIDc3MjM5LCA3NzI0NCwgNzcyNDksIDc3MjU0LCA3NzI1OSwgNzcyNjQsIDc3MjY5LCAKKyAgICA3NzI3NCwgNzcyNzksIDc3Mjg0LCA3NzI4OSwgNzcyOTQsIDc3Mjk5LCA3NzMwNCwgNzczMDgsIDc3MzEzLCA3NzMxOCwgCisgICAgNzczMjMsIDc3MzI4LCA3NzMzMywgNzczMzgsIDc3MzQzLCA3NzM0OCwgNzczNTMsIDc3MzU4LCA3NzM2MywgNzczNjcsIAorICAgIDc3MzcyLCA3NzM3NiwgNzczODEsIDc3Mzg2LCA3NzM5MSwgNzczOTYsIDc3NDAxLCA3NzQwNiwgNzc0MTEsIDc3NDE2LCAKKyAgICA3NzQyMSwgNzc0MjUsIDc3NDI5LCA3NzQzNCwgNzc0MzksIDc3NDQzLCA3NzQ0OCwgNzc0NTMsIDc3NDU3LCA3NzQ2MiwgCisgICAgNzc0NjcsIDc3NDcyLCA3NzQ3NywgNzc0ODEsIDc3NDg2LCA3NzQ5MSwgNzc0OTUsIDc3NTAwLCA3NzUwNCwgNzc1MDgsIAorICAgIDc3NTEyLCA3NzUxNiwgNzc1MjEsIDc3NTI1LCA3NzUyOSwgNzc1MzMsIDc3NTM3LCA3NzU0MSwgNzc1NDUsIDc3NTQ5LCAKKyAgICA3NzU1MywgNzc1NTcsIDc3NTYyLCA3NzU2NywgNzc1NzIsIDc3NTc3LCA3NzU4MiwgNzc1ODcsIDc3NTkyLCA3NzU5NywgCisgICAgNzc2MDIsIDc3NjA3LCA3NzYxMSwgNzc2MTUsIDc3NjE5LCA3NzYyMywgNzc2MjcsIDc3NjMxLCA3NzYzNiwgNzc2NDAsIAorICAgIDc3NjQ1LCA3NzY0OSwgNzc2NTQsIDc3NjU5LCA3NzY2MywgNzc2NjcsIDc3NjcyLCA3NzY3NiwgNzc2ODAsIDc3Njg0LCAKKyAgICA3NzY4OCwgNzc2OTIsIDc3Njk2LCA3NzcwMCwgNzc3MDQsIDc3NzA4LCA3NzcxMiwgNzc3MTYsIDc3NzIwLCA3NzcyNCwgCisgICAgNzc3MjgsIDc3NzMzLCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjcsIAorICAgIDc3NzcxLCA3Nzc3NSwgNzc3NzksIDc3NzgzLCA3Nzc4NywgNzc3OTEsIDc3Nzk2LCA3NzgwMCwgNzc4MDUsIDc3ODA5LCAKICAgICA3NzgxMywgNzc4MTcsIDc3ODIxLCA3NzgyNSwgNzc4MjksIDc3ODMzLCA3NzgzNywgNzc4NDEsIDc3ODQ1LCA3Nzg0OSwgCi0gICAgNzc4NTMsIDc3ODU3LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NSwgNzc4ODAsIDc3ODg0LCA3Nzg4OCwgNzc4OTIsIAotICAgIDc3ODk2LCA3NzkwMCwgNzc5MDQsIDc3OTA4LCA3NzkxMiwgNzc5MTcsIDc3OTIxLCA3NzkyNiwgNzc5MzAsIDc3OTM1LCAKLSAgICA3NzkzOSwgNzc5NDQsIDc3OTQ4LCA3Nzk1NCwgNzc5NTksIDc3OTYzLCA3Nzk2OCwgNzc5NzIsIDc3OTc3LCA3Nzk4MSwgCi0gICAgNzc5ODYsIDc3OTkwLCA3Nzk5NSwgMTUyMSwgNzc5OTksIDI4MjQsIDE3NTksIDE3NjQsIDc4MDAzLCA3ODAwNywgMjgyOCwgCi0gICAgNzgwMTEsIDEzOTcsIDc4MDE2LCAxMzQyLCA3ODAyMCwgMjg0MCwgNzgwMjQsIDc4MDMxLCA3ODAzOCwgNzgwNTIsIDI4NDQsIAotICAgIDcxMzEsIDc4MDYxLCA3ODA2OSwgNzgwNzYsIDc4MDg3LCA3ODA5NiwgNzgxMDMsIDc4MTE1LCA3ODEyOCwgNzgxNDEsIAotICAgIDc4MTUyLCA3ODE1NywgNzgxNjQsIDc4MTc2LCA3ODE4MCwgMjg0OCwgMTE3NDAsIDc4MTkwLCA3ODE5NSwgNzgyMDQsIAotICAgIDc4MjE0LCAyODUyLCA3ODIxOSwgNzgyMjMsIDc4MjI4LCA3ODIzNSwgNzgyNDEsIDc4MjQ5LCA3ODI2MSwgMTM0NywgCi0gICAgMTMwMzUsIDc4MjcxLCA3ODI3NSwgNzgyODEsIDc4Mjk1LCA3ODMwNywgNzgzMTksIDc4MzI5LCA3ODMzOCwgNzgzNDcsIAotICAgIDc4MzU2LCA3ODM2NCwgNzgzNzUsIDc4MzgzLCA0MDUxLCA3ODM5MywgNzg0MDQsIDc4NDEzLCA3ODQxOSwgNzg0MzQsIAotICAgIDc4NDQxLCA3ODQ0NywgMzU0ODksIDc4NDUyLCAyODc2LCAxMzAzOSwgNzg0NTYsIDc4NDYzLCA4OTMwLCA3ODQ3MiwgMjg4MSwgCi0gICAgMzIzMzYsIDc4NDc4LCA2MDU3MiwgNzg0ODUsIDc4NDkxLCA3ODUwMiwgNzg1MDgsIDc4NTE1LCA3ODUyMSwgNzg1MjksIAotICAgIDc4NTM2LCA3ODU0MiwgNzg1NTIsIDc4NTYxLCA3ODU3MiwgNzg1NzksIDc4NTg1LCA3ODU5NSwgNzg2MDMsIDc4NjA5LCAKLSAgICA3ODYyNCwgNzg2MzAsIDc4NjM1LCA3ODY0MiwgNzg2NDUsIDc4NjUxLCA3ODY1OCwgNzg2NjQsIDc4NjcyLCA3ODY4MSwgCi0gICAgNzg2ODksIDc4Njk1LCA3ODcwNCwgNDE0MjcsIDc4NzE4LCA3ODcyMywgNzg3MjksIDE0NzQ0LCA3ODczNCwgNzg3NDcsIAotICAgIDc4NzU2LCA3ODc2NCwgNzg3NzEsIDc4Nzc1LCA3ODc3OSwgNzg3ODIsIDc4Nzg5LCA3ODc5NiwgNzg4MDQsIDc4ODEyLCAKLSAgICA3ODgyMSwgNzg4MjksIDE0NjcxLCA3ODgzNywgNzg4NDIsIDc4ODQ2LCA3ODg1OCwgNzg4NjUsIDc4ODc0LCA3NDgsIAotICAgIDc4ODg0LCA3ODg5MywgNzg5MDQsIDI4OTcsIDc4OTA4LCA3ODkxMiwgNzg5MTgsIDc4OTMxLCA3ODk0MywgNzg5NTMsIAotICAgIDc4OTYyLCA3ODk3NCwgMjYzNTIsIDc4OTg1LCA3ODk5MywgNzkwMDIsIDc5MDEzLCA3OTAyNCwgNzkwMzQsIDc5MDQ0LCAKLSAgICA3OTA1MywgNzkwNjEsIDExMzA1LCA3OTA2OCwgNzkwNzIsIDc5MDc1LCA3OTA4MCwgNzkwODUsIDc5MDg5LCA3OTA5NSwgCi0gICAgMTM1MiwgMTE4MTEsIDc5MTAyLCA3OTExMywgNzkxMjIsIDc5MTMwLCA3OTEzOSwgNzkxNDcsIDc5MTYzLCA3OTE3NCwgCi0gICAgNzkxODMsIDc5MTkxLCA3OTIwMywgNzkyMTQsIDc5MjMwLCA3OTI0MCwgNzkyNjEsIDc5Mjc0LCA3OTI4MiwgNzkyODksIAotICAgIDE0ODU1LCA3OTMwMiwgNzkzMDcsIDc5MzEzLCA1OTA4LCA3OTMxOSwgNzkzMjIsIDc5MzI5LCA3OTMzOSwgODE3NiwgCi0gICAgNzkzNDYsIDc5MzUxLCA3OTM1NiwgNzkzNjEsIDc5MzY5LCA3OTM3OCwgNzkzODYsIDk3NDksIDk3NTgsIDc5MzkxLCAKLSAgICA3OTQwMiwgNzk0MDcsIDc5NDEzLCAyOTEzLCAyOTE4LCA3OTQxOSwgMTA4NzIsIDc5NDI1LCA3OTQzMiwgNzk0MzksIAotICAgIDc5NDUyLCAyMjUxLCA2OCwgNzk0NTcsIDc5NDYyLCA3OTQ3MiwgNzk0NzgsIDc5NDg3LCA3OTQ5NSwgNzk1MDUsIDc5NTA5LCAKLSAgICA3OTUxNCwgNzk1MTgsIDc5NTMwLCAyOTQxLCA3OTUzOCwgNzk1NDYsIDc5NTUxLCA3OTU2MiwgNzk1NzMsIDc5NTgyLCAKLSAgICA3OTU4NywgNzk1OTMsIDc5NTk4LCA3OTYwOCwgNzk2MTgsIDc5NjIzLCA3OTYyOSwgNzk2MzQsIDc5NjQzLCAyMTM5NywgCi0gICAgNzk2NDcsIDQxMjgsIDIwLCA3OTY1MiwgNzk2NjEsIDc5NjY4LCA3OTY3NSwgNzk2ODEsIDc5Njg3LCA4NjQsIDc5NjkyLCAKLSAgICA3OTY5NywgNjA5MDAsIDc5NzAyLCA3OTcwNywgNzk3MTMsIDc5NzE5LCA3OTcyNywgNzk3MzIsIDc5NzM5LCA3OTc0NSwgCi0gICAgNzk3NTAsIDM4MDAxLCA0MTMyMSwgNzk3NTYsIDI5NDUsIDMyLCA3OTc2NiwgNzk3NzksIDc5Nzg0LCA3OTc5MiwgNzk3OTcsIAotICAgIDc5ODAzLCAyOTY3LCAyODI4OSwgNzk4MDgsIDc5ODE2LCA3OTgyMywgNzk4MjgsIDU4NjQ1LCA2MTkwMywgNzk4MzcsIAotICAgIDc5ODQxLCAxNzA0LCAxODEzLCA3OTg0NiwgNzk4NTEsIDc5ODU4LCAxODE3LCAyNDcsIDc5ODY1LCA3OTg3MSwgMjk4OSwgCi0gICAgNzk4NzYsIDc5ODgxLCA3OTg4OCwgMTgyMSwgNzk4OTMsIDc5ODk5LCA3OTkwNCwgNzk5MTYsIDYxMTksIDc5OTI2LCAxODI4LCAKLSAgICA3OTkzMiwgNzk5MzcsIDc5OTQ0LCA3OTk1MSwgNzk5NjYsIDc5OTczLCA3OTk4NCwgNzk5OTIsIDI2MTgsIDc5OTk2LCAKLSAgICA4MDAwOCwgODAwMTMsIDgwMDE3LCA4MDAyMywgMjgxMTQsIDIyNTYsIDgwMDI3LCA4MDAzOCwgODAwNDIsIDgwMDQ2LCAKLSAgICA4MDA1MiwgODAwNTYsIDgwMDY1LCA4MDA2OSwgODAwODAsIDgwMDg0LCAyMzAyLCAzMjE2NSwgODAwODgsIDgwMDk4LCAKLSAgICAzMDgwLCA5MzY0LCA4MDEwNiwgODAxMTEsIDgwMTE1LCA4MDEyNCwgODAxMzEsIDgwMTM3LCAzMDUwLCAxNzEzOSwgODAxNDEsIAotICAgIDgwMTU0LCA4MDE3MiwgODAxNzcsIDgwMTg1LCA4MDE5MywgODAyMDMsIDk5NzgsIDEzMTQ3LCA4MDIxNSwgODAyMjgsIAotICAgIDgwMjM1LCA4MDI0MiwgODAyNTgsIDgwMjY1LCA4MDI3MSwgMTA5NSwgODAyNzgsIDgwMjg1LCA4MDI5NSwgODAzMDQsIAotICAgIDgwMzE2LCA0MjI5MSwgODAzMjQsIDMwNjQsIDEyMDIzLCA4MDMyNywgODAzMzUsIDgwMzM5LCA3ODIzMSwgMzA2OCwgCi0gICAgODAzNDMsIDIxMTc4LCAxMjAzOSwgMzc1NiwgODAzNDcsIDMwNzQsIDgwMzUxLCA4MDM2MSwgODAzNjcsIDgwMzczLCAKLSAgICA4MDM3OSwgODAzODUsIDgwMzkxLCA4MDM5NywgODA0MDMsIDgwNDA5LCA4MDQxNSwgODA0MjEsIDgwNDI3LCA4MDQzMywgCi0gICAgODA0MzksIDgwNDQ1LCA4MDQ1MSwgODA0NTcsIDgwNDYzLCA4MDQ2OSwgODA0NzUsIDgwNDgxLCA4MDQ4NywgODA0OTMsIAotICAgIDgwNDk5LCA4MDUwNSwgODA1MTEsIDgwNTE4LCA4MDUyNSwgODA1MzEsIDgwNTM3LCA4MDU0MywgODA1NDksIDgwNTU1LCAKLSAgICA4MDU2MSwgMTM1NywgMTYwNDksIDEyMDYxLCA4MDU2NywgODA1NzIsIDgwNTc3LCA4MDU4MiwgODA1ODcsIDgwNTkyLCAKLSAgICA4MDU5NywgODA2MDIsIDgwNjA3LCA4MDYxMiwgODA2MTcsIDgwNjIyLCA4MDYyNywgODA2MzIsIDgwNjM3LCA4MDY0MiwgCi0gICAgODA2NDcsIDgwNjUyLCA4MDY1NywgODA2NjIsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgyLCA4MDY4NywgODA2OTIsIAotICAgIDgwNjk4LCA4MDcwMywgODA3MDgsIDgwNzE0LCA4MDcxOSwgODA3MjUsIDgwNzMwLCA4MDczNSwgODA3NDEsIDgwNzQ2LCAKLSAgICA4MDc1MSwgODA3NTYsIDgwNzYxLCA4MDc2NiwgODA3NzEsIDgwNzc2LCA4MDc4MSwgODAzNjIsIDgwMzY4LCA4MDM3NCwgCi0gICAgODAzODAsIDgwMzg2LCA4MDM5MiwgODAzOTgsIDgwNDA0LCA4MDQxMCwgODA0MTYsIDgwNDIyLCA4MDQyOCwgODA0MzQsIAotICAgIDgwNDQwLCA4MDQ0NiwgODA3ODcsIDgwNDUyLCA4MDQ1OCwgODA0NjQsIDgwNzkzLCA4MDQ3MCwgODA0NzYsIDgwNDgyLCAKLSAgICA4MDQ4OCwgODA0OTQsIDgwNTAwLCA4MDUwNiwgODA1MjYsIDgwNzk5LCA4MDgwNSwgODA1MzIsIDgwODExLCA4MDUzOCwgCi0gICAgODA1NDQsIDgwNTUwLCA4MDU1NiwgODA1NjIsIDMwOTEsIDMwOTYsIDgwODE3LCA4MDgyMiwgODA4MjUsIDgwODMxLCAKLSAgICA4MDgzNywgODA4NDQsIDgwODQ5LCA4MDg1NCwgMjMwNywgCisgICAgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDMsIDc3OTA3LCA3NzkxMSwgNzc5MTYsIDc3OTIxLCA3NzkyNSwgNzc5MjksIDc3OTMzLCAKKyAgICA3NzkzNywgNzc5NDEsIDc3OTQ1LCA3Nzk0OSwgNzc5NTMsIDc3OTU4LCA3Nzk2MiwgNzc5NjcsIDc3OTcxLCA3Nzk3NiwgCisgICAgNzc5ODAsIDc3OTg1LCA3Nzk4OSwgNzc5OTUsIDc4MDAwLCA3ODAwNCwgNzgwMDksIDc4MDEzLCA3ODAxOCwgNzgwMjIsIAorICAgIDc4MDI3LCA3ODAzMSwgNzgwMzYsIDE1MjEsIDc4MDQwLCAyODI0LCAxNzU5LCAxNzY0LCA3ODA0NCwgNzgwNDgsIDI4MjgsIAorICAgIDc4MDUyLCAxMzk3LCA3ODA1NywgMTM0MiwgNzgwNjEsIDI4NDAsIDc4MDY1LCA3ODA3MiwgNzgwNzksIDc4MDkzLCAyODQ0LCAKKyAgICA3MTMxLCA3ODEwMiwgNzgxMTAsIDc4MTE3LCA3ODEyOCwgNzgxMzcsIDc4MTQ0LCA3ODE1NiwgNzgxNjksIDc4MTgyLCAKKyAgICA3ODE5MywgNzgxOTgsIDc4MjA1LCA3ODIxNywgNzgyMjEsIDI4NDgsIDExNzQ3LCA3ODIzMSwgNzgyMzYsIDc4MjQ1LCAKKyAgICA3ODI1NSwgMjg1MiwgNzgyNjAsIDc4MjY0LCA3ODI2OSwgNzgyNzYsIDc4MjgyLCA3ODI5MCwgNzgzMDIsIDEzNDcsIAorICAgIDEzMDQyLCA3ODMxMiwgNzgzMTYsIDc4MzIyLCA3ODMzNiwgNzgzNDgsIDc4MzYwLCA3ODM3MCwgNzgzNzksIDc4Mzg4LCAKKyAgICA3ODM5NywgNzg0MDUsIDc4NDE2LCA3ODQyNCwgNDA1MSwgNzg0MzQsIDc4NDQ1LCA3ODQ1NCwgNzg0NjAsIDc4NDc1LCAKKyAgICA3ODQ4MiwgNzg0ODgsIDM1NTE0LCA3ODQ5MywgMjg3NiwgMTMwNDYsIDc4NDk3LCA3ODUwNCwgODkzMCwgNzg1MTMsIDI4ODEsIAorICAgIDMyMzYxLCA3ODUxOSwgNjA2MDksIDc4NTI2LCA3ODUzMiwgNzg1NDMsIDc4NTQ5LCA3ODU1NiwgNzg1NjIsIDc4NTcwLCAKKyAgICA3ODU3NywgNzg1ODMsIDc4NTkzLCA3ODYwMiwgNzg2MTMsIDc4NjIwLCA3ODYyNiwgNzg2MzYsIDc4NjQ0LCA3ODY1MCwgCisgICAgNzg2NjUsIDc4NjcxLCA3ODY3NiwgNzg2ODMsIDc4Njg2LCA3ODY5MiwgNzg2OTksIDc4NzA1LCA3ODcxMywgNzg3MjIsIAorICAgIDc4NzMwLCA3ODczNiwgNzg3NDUsIDQxNDY0LCA3ODc1OSwgNzg3NjQsIDc4NzcwLCAxNDc1NywgNzg3NzUsIDc4Nzg4LCAKKyAgICA3ODc5NywgNzg4MDUsIDc4ODEyLCA3ODgxNiwgNzg4MjAsIDc4ODIzLCA3ODgzMCwgNzg4MzcsIDc4ODQ1LCA3ODg1MywgCisgICAgNzg4NjIsIDc4ODcwLCAxNDY4NCwgNzg4NzgsIDc4ODgzLCA3ODg4NywgNzg4OTksIDc4OTA2LCA3ODkxNSwgNzQ4LCAKKyAgICA3ODkyNSwgNzg5MzQsIDc4OTQ1LCAyODk3LCA3ODk0OSwgNzg5NTMsIDc4OTU5LCA3ODk3MiwgNzg5ODQsIDc4OTk0LCAKKyAgICA3OTAwMywgNzkwMTUsIDI2MzY5LCA3OTAyNiwgNzkwMzQsIDc5MDQzLCA3OTA1NCwgNzkwNjUsIDc5MDc1LCA3OTA4NSwgCisgICAgNzkwOTQsIDc5MTAyLCAxMTMxMiwgNzkxMDksIDc5MTEzLCA3OTExNiwgNzkxMjEsIDc5MTI2LCA3OTEzMCwgNzkxMzYsIAorICAgIDEzNTIsIDExODE4LCA3OTE0MywgNzkxNTQsIDc5MTYzLCA3OTE3MSwgNzkxODAsIDc5MTg4LCA3OTIwNCwgNzkyMTUsIAorICAgIDc5MjI0LCA3OTIzMiwgNzkyNDQsIDc5MjU1LCA3OTI3MSwgNzkyODEsIDc5MzAyLCA3OTMxNSwgNzkzMjMsIDc5MzMwLCAKKyAgICAxNDg2OCwgNzkzNDMsIDc5MzQ4LCA3OTM1NCwgNTkwOCwgNzkzNjAsIDc5MzYzLCA3OTM3MCwgNzkzODAsIDgxNzYsIAorICAgIDc5Mzg3LCA3OTM5MiwgNzkzOTcsIDc5NDAyLCA3OTQxMCwgNzk0MTksIDc5NDI3LCA5NzU2LCA5NzY1LCA3OTQzMiwgCisgICAgNzk0NDMsIDc5NDQ4LCA3OTQ1NCwgMjkxMywgMjkxOCwgNzk0NjAsIDEwODc5LCA3OTQ2NiwgNzk0NzMsIDc5NDgwLCAKKyAgICA3OTQ5MywgMjI1MSwgNjgsIDc5NDk4LCA3OTUwMywgNzk1MTMsIDc5NTE5LCA3OTUyOCwgNzk1MzYsIDc5NTQ2LCA3OTU1MCwgCisgICAgNzk1NTUsIDc5NTU5LCA3OTU3MSwgMjk0MSwgNzk1NzksIDc5NTg3LCA3OTU5MiwgNzk2MDMsIDc5NjE0LCA3OTYyMywgCisgICAgNzk2MjgsIDc5NjM0LCA3OTYzOSwgNzk2NDksIDc5NjU5LCA3OTY2NCwgNzk2NzAsIDc5Njc0LCA3OTY3OSwgNzk2ODgsIAorICAgIDIxNDEwLCA3OTY5MiwgNDEyOCwgMjAsIDc5Njk3LCA3OTcwNiwgNzk3MTMsIDc5NzIwLCA3OTcyNiwgNzk3MzIsIDg2NCwgCisgICAgNzk3MzcsIDc5NzQyLCA2MDkzNywgNzk3NDcsIDc5NzUyLCA3OTc1OCwgNzk3NjQsIDc5NzcyLCA3OTc3NywgNzk3ODQsIAorICAgIDc5NzkwLCA3OTc5NSwgMzgwMzAsIDQxMzU4LCA3OTgwMSwgMjk0NSwgMzIsIDc5ODExLCA3OTgyNCwgNzk4MjksIDc5ODM3LCAKKyAgICA3OTg0MiwgNzk4NDgsIDI5NjcsIDI4MzEwLCA3OTg1MywgNzk4NjEsIDc5ODY4LCA3OTg3MywgNTg2ODIsIDYxOTQwLCAKKyAgICA3OTg4MiwgNzk4ODYsIDE3MDQsIDE4MTMsIDc5ODkxLCA3OTg5NiwgNzk5MDMsIDE4MTcsIDI0NywgNzk5MTAsIDc5OTE2LCAKKyAgICAyOTg5LCA3OTkyMSwgNzk5MjYsIDc5OTMzLCAxODIxLCA3OTkzOCwgNzk5NDQsIDc5OTQ5LCA3OTk2MSwgNjExOSwgNzk5NzEsIAorICAgIDE4MjgsIDc5OTc3LCA3OTk4MiwgNzk5ODksIDc5OTk2LCA4MDAxMSwgODAwMTgsIDgwMDI5LCA4MDAzNywgMjYxOCwgCisgICAgODAwNDEsIDgwMDUzLCA4MDA1OCwgODAwNjIsIDgwMDY4LCAyODEzNSwgMjI1NiwgODAwNzIsIDgwMDgzLCA4MDA4NywgCisgICAgODAwOTEsIDgwMDk3LCA4MDEwMSwgODAxMTAsIDgwMTE0LCA4MDEyNSwgODAxMjksIDIzMDIsIDMyMTkwLCA4MDEzMywgCisgICAgODAxNDMsIDMwODAsIDkzNzEsIDgwMTUxLCA4MDE1NiwgODAxNjAsIDgwMTY5LCA4MDE3NiwgODAxODIsIDMwNTAsIDE3MTUyLCAKKyAgICA4MDE4NiwgODAxOTksIDgwMjE3LCA4MDIyMiwgODAyMzAsIDgwMjM4LCA4MDI0OCwgOTk4NSwgMTMxNTQsIDgwMjYwLCAKKyAgICA4MDI3MywgODAyODAsIDgwMjg3LCA4MDMwMywgODAzMTAsIDgwMzE2LCAxMDY0LCA4MDMyMywgODAzMzAsIDgwMzQwLCAKKyAgICA4MDM0OSwgODAzNjEsIDQyMzI4LCA4MDM2OSwgMzA2NCwgMTIwMzAsIDgwMzcyLCA4MDM4MCwgODAzODQsIDc4MjcyLCAKKyAgICAzMDY4LCA4MDM4OCwgMjExOTEsIDEyMDQ2LCAzNzU2LCA4MDM5MiwgMzA3NCwgODAzOTYsIDgwNDA2LCA4MDQxMiwgODA0MTgsIAorICAgIDgwNDI0LCA4MDQzMCwgODA0MzYsIDgwNDQyLCA4MDQ0OCwgODA0NTQsIDgwNDYwLCA4MDQ2NiwgODA0NzIsIDgwNDc4LCAKKyAgICA4MDQ4NCwgODA0OTAsIDgwNDk2LCA4MDUwMiwgODA1MDgsIDgwNTE0LCA4MDUyMCwgODA1MjYsIDgwNTMyLCA4MDUzOCwgCisgICAgODA1NDQsIDgwNTUwLCA4MDU1NiwgODA1NjMsIDgwNTcwLCA4MDU3NiwgODA1ODIsIDgwNTg4LCA4MDU5NCwgODA2MDAsIAorICAgIDgwNjA2LCAxMzU3LCAxNjA2MiwgMTIwNjgsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIAorICAgIDgwNjQyLCA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCAKKyAgICA4MDY5MiwgODA2OTcsIDgwNzAyLCA4MDcwNywgODA3MTIsIDgwNzE3LCA4MDcyMiwgODA3MjcsIDgwNzMyLCA4MDczNywgCisgICAgODA3NDMsIDgwNzQ4LCA4MDc1MywgODA3NTksIDgwNzY0LCA4MDc3MCwgODA3NzUsIDgwNzgwLCA4MDc4NiwgODA3OTEsIAorICAgIDgwNzk2LCA4MDgwMSwgODA4MDYsIDgwODExLCA4MDgxNiwgODA4MjEsIDgwODI2LCA4MDQwNywgODA0MTMsIDgwNDE5LCAKKyAgICA4MDQyNSwgODA0MzEsIDgwNDM3LCA4MDQ0MywgODA0NDksIDgwNDU1LCA4MDQ2MSwgODA0NjcsIDgwNDczLCA4MDQ3OSwgCisgICAgODA0ODUsIDgwNDkxLCA4MDgzMiwgODA0OTcsIDgwNTAzLCA4MDUwOSwgODA4MzgsIDgwNTE1LCA4MDUyMSwgODA1MjcsIAorICAgIDgwNTMzLCA4MDUzOSwgODA1NDUsIDgwNTUxLCA4MDU3MSwgODA4NDQsIDgwODUwLCA4MDU3NywgODA4NTYsIDgwNTgzLCAKKyAgICA4MDU4OSwgODA1OTUsIDgwNjAxLCA4MDYwNywgMzA5MSwgMzA5NiwgODA4NjIsIDgwODY3LCA4MDg3MCwgODA4NzYsIAorICAgIDgwODgyLCA4MDg4OSwgODA4OTQsIDgwODk5LCAyMzA3LCAKIH07CiAKIC8qIGNvZGUtPm5hbWUgcGhyYXNlYm9vayAqLwogI2RlZmluZSBwaHJhc2Vib29rX3NoaWZ0IDcKICNkZWZpbmUgcGhyYXNlYm9va19zaG9ydCAyMDkKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tbXSA9IHsKLSAgICAwLCAyMTksIDE4LCAyNDUsIDMxLCA3OCwgMjIzLCAyNTQsIDc4LCA1NCwgNTAsIDI0NywgMTMyLCA1MCwgMjI1LCAxODIsIAotICAgIDUwLCAyNTQsIDEyNiwgMjU0LCA1NywgNDMsIDIyNiwgMywgNDQsIDIyNiwgMywgMjUzLCAyMTYsIDk2LCA1MCwgMjQ5LCAKLSAgICAyMTksIDI0MCwgMTY3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxOSwgNDYsIDIxLCAyMTAsIDg2LCAyMSwgMTEwLCAyMSwgCi0gICAgMTA1LCAyMSwgMTU4LCAyMSwgMTYxLCAyMSwgMTg5LCAyMSwgMTk0LCAyMSwgMTk4LCAyMSwgMTk1LCAyMSwgMjAwLCAyNDksIAotICAgIDIyNiwgMjIwLCAxNTAsIDIzMywgMTUsIDUwLCAyNDUsIDk4LCA1MCwgMjQyLCAxMzAsIDUwLCAyMjQsIDEzLCA3OCwgMjQ5LCAKLSAgICAyMTcsIDI1MywgMjA2LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNTgsIDcsIDYsIDEsIDI1MSwgNjYsIDcsIDYsIDEsIAotICAgIDI0OSwgNjAsIDcsIDYsIDEsIDc1LCA3LCA2LCAxLCAyNDUsIDYsIDcsIDYsIDEsIDI0MywgMjAyLCA3LCA2LCAxLCAyNDIsIAotICAgIDYwLCA3LCA2LCAxLCA3MywgNywgNiwgMSwgMjM1LCAxNDQsIDcsIDYsIDEsIDIzNSwgMjMsIDcsIDYsIDEsIDE1NiwgNywgNiwgCi0gICAgMSwgMTkzLCA3LCA2LCAxLCAyMzAsIDI1LCA3LCA2LCAxLCA3NiwgNywgNiwgMSwgMjI2LCAxMDUsIDcsIDYsIDEsIDIyNCwgCi0gICAgOTYsIDcsIDYsIDEsIDE1MywgNywgNiwgMSwgMjIyLCA5MSwgNywgNiwgMSwgMjE3LCAxNTIsIDcsIDYsIDEsIDcwLCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgNywgNiwgMSwgMjEyLCA5OCwgNywgNiwgMSwgMjExLCAxNzgsIDcsIDYsIDEsIDIxMSwgMTE3LCA3LCAKLSAgICA2LCAxLCAyMTAsIDE1OSwgNDMsIDQyLCAxMjcsIDIyMywgNTAsIDIxOSwgNDYsIDQ0LCA0MiwgMTI3LCAyNTAsIDMxLCAyNTUsIAotICAgIDE0LCAxMjEsIDIzMiwgMjEzLCAyNDIsIDEzNywgMjU1LCAxNCwgNywgNCwgMSwgNjEsIDcsIDQsIDEsIDI1MywgMTU4LCA3LCAKLSAgICA0LCAxLCAyNTEsIDY2LCA3LCA0LCAxLCAyNDksIDYwLCA3LCA0LCAxLCA3NSwgNywgNCwgMSwgMjQ1LCA2LCA3LCA0LCAxLCAKLSAgICAyNDMsIDIwMiwgNywgNCwgMSwgMjQyLCA2MCwgNywgNCwgMSwgNzMsIDcsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMzUsIAotICAgIDIzLCA3LCA0LCAxLCAxNTYsIDcsIDQsIDEsIDE5MywgNywgNCwgMSwgMjMwLCAyNSwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIAotICAgIDIyNiwgMTA1LCA3LCA0LCAxLCAyMjQsIDk2LCA3LCA0LCAxLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA3LCA0LCAxLCA3MCwgNywgNCwgMSwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxMiwgOTgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKLSAgICA3LCA0LCAxLCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNTksIDQzLCAyNDksIDk5LCAxMjcsIDY3LCAyMzIsIDIxMywgNDQsIAotICAgIDI0OSwgOTksIDEyNywgMTgyLCAyMjgsIDczLCAyMTksIDE4LCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDI1MCwgMTc2LCA1MCwgCi0gICAgMjI0LCAyMjgsIDUwLCAyNDksIDk4LCA1MCwgMjExLCA0MCwgNTAsIDI1MSwgMTM1LCAxMzAsIDIyMSwgMTczLCA1MCwgMjQ4LCAKLSAgICAxLCAyNDksIDE2MywgNTAsIDI0NCwgMTM2LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIzMywgNDIsIDUyLCAyNTQsIDExMCwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjgsIDUyLCA1MCwgMjE5LCA1MiwgMjQwLCAxNjgsIDIyMywgMTAyLCA1MCwgMjMxLCAyMzIsIAotICAgIDI0OCwgNzEsIDUwLCAyMjUsIDIxLCA1MCwgMjE4LCAyMywgMTA1LCAyMTgsIDIzLCAxNTgsIDI1NSwgMywgMjU1LCAxNCwgCi0gICAgMjMwLCAyMjgsIDUwLCAyMjUsIDY4LCA1MCwgMjMwLCAyMjQsIDI0NywgMTIwLCAyNTAsIDE4MywgMjE4LCAyMywgMTEwLCAKLSAgICAyMzEsIDE0OCwgMjI2LCAxNTQsIDIzNSwgMjM4LCAyMjIsIDI0NywgNTIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxMiwgCi0gICAgMTE0LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAyMTIsIDExNCwgMjQ0LCAKLSAgICAyLCAxMzQsIDIyNCwgMTksIDIzNSwgMTkzLCAyMjQsIDEzLCA3OCwgNywgNiwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMTE1LCAyLCAxODIsIDcsIDYsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMjU0LCAyNDMsIDcsIDYsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNiwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQ1LCA1OSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDEsIDIzMCwgODQsIDUwLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIDIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMwLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE0MiwgNywgNiwgMSwgCi0gICAgMjE2LCAxNTEsIDcsIDQsIDEsIDIyMCwgNzYsIDIyMiwgOTEsIDcsIDQsIDEsIDExNSwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDExNSwgMiwgMTgyLCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDI0OCwgMSwgNywgNCwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDI1NCwgMjQzLCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMTYwLCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAxNDIsIAotICAgIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTYwLCAyLCAyNDgsIDEsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMzAsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDI0NSwgNTksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMCwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAyNDcsIDE2OSwgNTAsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgOTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA0LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMTE1LCAyLCAyMzEsIDIzMiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIAotICAgIDE0NiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTE1LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjUxLCAKLSAgICA2NywgMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxNDIsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMzAsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjUxLCA2NywgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgOTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDkxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNjAsIDIsIDI1MSwgMTQ2LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAKLSAgICAzMCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDYsIAotICAgIDEsIDI0MywgMjAzLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MywgMjAzLCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIAotICAgIDMwLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQyLCAKLSAgICA2MSwgMiwgOTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAxODIsIDcsIDYsIDEsIAotICAgIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI0LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNDgsIDcsIDQsIAotICAgIDEsIDI0NywgMTE5LCA3MywgNywgNiwgMjcsIDIzNiwgMzEsIDcsIDQsIDI3LCAyMzYsIDMxLCA3LCA2LCAxLCAyMzUsIDE0NSwgCi0gICAgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCAKLSAgICA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjMzLCAyMzksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxNDIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgCi0gICAgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDkxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE0MiwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA2LCAxLCAyMzAsIDI2LCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMwLCAyNiwgMjI0LCAyMDQsIDI1MSwgNzgsIAotICAgIDI1NCwgNTcsIDcsIDYsIDEsIDI0NSwgMTM4LCA3LCA0LCAxLCAyNDUsIDEzOCwgNywgNiwgMSwgMTQ0LCAyLCAyMzEsIDIzMiwgCi0gICAgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICAyNTEsIDE0NiwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDYsIDI3LCAKLSAgICAyMjYsIDIzNCwgNywgNCwgMjcsIDIyNiwgMjM0LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTQyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMTQyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIAotICAgIDE4MywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDIyMiwgOTIsIDIsIDE0MiwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMjIsIAotICAgIDkyLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjUwLCAxODMsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCAKLSAgICA3LCA2LCAxLCAyMTcsIDE1MywgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNiwgMSwgMTA0LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgMTgyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAxMDQsIAotICAgIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDIyNiwgMjI0LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA2LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIAotICAgIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxOTksIDIyMiwgOTEsIAotICAgIDcsIDQsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgNTcsIDIsIDEwMywgNywgNiwgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDQsIAotICAgIDEsIDU3LCAyLCAyMTYsIDExLCA3LCA2LCAxLCAxMzgsIDE5NCwgNywgNCwgMSwgMTM4LCAxOTQsIDcsIDYsIDEsIDIwNCwgCi0gICAgNzYsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDEwMywgNywgNCwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA2LCAxLCAyNTQsIAotICAgIDIxOSwgMjQ5LCA2MCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAyMTYsIDExLCA3LCAKLSAgICA0LCAxLCAyNDksIDYxLCAyLCAyMTYsIDExLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDgsIDU0LCA3LCA2LCAxLCAyMjMsIDQ5LCAKLSAgICA3NSwgNywgNiwgMSwgMjIxLCAxOTUsIDcsIDYsIDEsIDIwNCwgNzUsIDcsIDYsIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDcsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAxMDcsIDcsIDQsIDEsIAotICAgIDI0MCwgMjAxLCA3LCA2LCAxLCAyMzUsIDE4NSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNCwgMSwgCi0gICAgMjMzLCAxMDAsIDIsIDkxLCA3LCA2LCAxLCAyMTUsIDk0LCAxOTMsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDcsIAotICAgIDQsIDEsIDIzMCwgMjYsIDIsIDE5OSwgNDQsIDIzMywgMzYsIDcsIDYsIDEsIDE0NCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OCwgNywgNiwgMSwgMjI2LCAyMTksIDcsIDQsIAotICAgIDEsIDIyNiwgMjE5LCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMTAzLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMTAzLCA3LCAxLCAKLSAgICAyMTAsIDIxNCwgNywgNiwgMSwgMTM4LCAxMDUsIDcsIDQsIDEsIDEzOCwgMTA1LCA3LCA2LCAxLCAyNDUsIDc1LCA3LCAxLCAKLSAgICAyMjMsIDQ5LCAyNDUsIDc2LCAyMzIsIDEyMywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIyNiwgNjYsIDEwMywgNywgNiwgMSwgCi0gICAgMjE3LCAxNTMsIDIsIDEwMywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDEwMywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OCwgNywgNiwgMSwgCi0gICAgMjE0LCAxNTcsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDQsIDEsIAotICAgIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCAKLSAgICA2LCAxLCAyNDUsIDgsIDcsIDYsIDEsIDI0NSwgOSwgMjIzLCA0OCwgNywgNCwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAKLSAgICAxLCAyNDUsIDksIDIsIDIxNywgNzcsIDcsIDEsIDExMywgMiwgOTEsIDcsIDYsIDEsIDEzOCwgMTg5LCA3LCA0LCAxLCAxMzgsIAotICAgIDE4OSwgNywgMSwgMjM1LCAxOTMsIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDEsIDIxMSwgMTgxLCA3LCAxLCAKLSAgICAyNDgsIDQ3LCAyNTAsIDExLCA3LCAxLCAyMzMsIDc3LCAyNTAsIDExLCA3LCAxLCAyNTQsIDEzNywgMjUwLCAxMSwgNywgMSwgCi0gICAgMjIzLCA1NSwgMjUwLCAxMSwgNywgNiwgMSwgMjQ2LCA0MCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIAotICAgIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ2LCA0MCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMiwgCi0gICAgMTg4LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzMiwgMTg4LCA3LCA2LCAxLCAKLSAgICAyMjgsIDE4NiwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIyOCwgMTg2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIAotICAgIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAyMzEsIDIzMiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIDk0LCA3NSwgNywgNiwgMSwgMTE1LCAyLCAyNDgsIDIsIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNCwgMSwgMTE1LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTE1LCAyLCA1OSwgNzcsIDIyLCAKLSAgICAyMzEsIDIzMiwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjU0LCAyNDQsIDIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCA5MSwgNywgNCwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMjM0LCAKLSAgICA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxNDQsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIyNiwgMjI1LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMjQ1LCA5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ1LCA5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDYsIDM5LCA3LCA2LCAxLCAyNDksIDYxLCAyLCA0LCAxLCAyMTAsIDE1OSwgNywgNCwgMSwgCi0gICAgMjQ2LCAzOSwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDE0MiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDE0MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxOTksIDcsIDYsIDEsIDIxMSwgMTgxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIAotICAgIDIyMiwgMjM0LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjU0LCAyNDQsIDIsIDE0MiwgNywgNCwgMSwgMjU0LCAyNDQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTgsIDEwMywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTgsIDEwMywgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTE1LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIAotICAgIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIAotICAgIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTA0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI0OSwgMjIwLCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA2LCAxLCAyMTcsIAotICAgIDE1MywgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ5LCAyMjAsIDUxLCA3LCA2LCAxLCAyMTAsIAotICAgIDIzMSwgNywgNCwgMSwgMjEwLCAyMzEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDIsIDYxLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDYsIDEsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMjYsIDEzNCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNiwgMSwgMTE1LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAKLSAgICAxNDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIAotICAgIDEwMCwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ0LCA3LCA0LCAxLCAyNDgsIDE0MywgMjQ3LCAyMjAsIDcsIDQsIDEsIAotICAgIDIyNCwgMzEsIDI0NywgMjIwLCA3LCA2LCAxLCAxMTUsIDIsIDkxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgMjUxLCA2NywgMiwgOTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAxMzAsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgNCwgMSwgMjQyLCAxODAsIDIxOCwgCi0gICAgMTI5LCA3LCA2LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMTMwLCA3LCA2LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDYsIDEsIDQsIDIyNCwgOTcsIDIsIDI0MSwgNTIsIDIxNywgNzcsIDcsIDQsIDEsIAotICAgIDIyNCwgOTcsIDIsIDI0MSwgNTIsIDIxNywgNzcsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA5MSwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDkxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgMjE1LCA5NCwgNjEsIDcsIDQsIDEsIDI1NCwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDE0MywgNywgNCwgMSwgNTcsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3NiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDEwMywgNywgNCwgMSwgMjIzLCA0OSwgNzUsIDcsIDQsIDEsIAotICAgIDIyMSwgMTk1LCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc1LCA3LCA0LCAxLCAyMjMsIDQ5LCAKLSAgICAyMDQsIDc1LCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyNTAsIDAsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAxMDMsIAotICAgIDcsIDQsIDEsIDExOSwgMjQzLCAyMDIsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCA3LCA0LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjIzLCAxNTEsIDI0MCwgMjQ4LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAxMDMsIAotICAgIDcsIDQsIDEsIDI0MSwgMjA4LCAyLCAxMDMsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxODUsIAotICAgIDcsIDEsIDQsIDYsIDczLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MiwgNDEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIzMywgMSwgNywgNCwgMSwgCi0gICAgMjE1LCA5NCwgMTkzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIzMiwgCi0gICAgNTAsIDIsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjIzLCA1NSwgCi0gICAgMTAzLCA3LCAxLCA0LCA2LCAyMzAsIDI1LCA3LCA0LCAxLCAyNTIsIDEzNCwgNzYsIDcsIDEsIDQsIDYsIDIyNiwgMjM0LCA3LCAKLSAgICA0LCAxLCAyNTAsIDAsIDIyNiwgMjAxLCA3LCA0LCAxLCAyMjUsIDEzMywgNywgNCwgMSwgMjE1LCA5NCwgMTUzLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgCi0gICAgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIyMywgNDksIDIyMywgMjI0LCAyLCAyNDQsIDg3LCA3LCAKLSAgICAxLCA0LCA2LCAxNTMsIDcsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDEwMywgNywgNCwgCi0gICAgMSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgNywgNCwgMSwgCi0gICAgMjE4LCAyMzEsIDIyMywgNDksIDI0NSwgNzUsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTcsIDE1MiwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMTA0LCAxMzAsIDcsIAotICAgIDQsIDEsIDIxNCwgMTU3LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgCi0gICAgNCwgMSwgMjE1LCA5NCwgMjEyLCA5OCwgNywgNCwgMSwgMjE1LCA5NCwgMjExLCAxMTcsIDcsIDEsIDQsIDYsIDIxMSwgMTE3LCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDAsIDcsIDQsIAotICAgIDEsIDI0NSwgOCwgNywgNCwgMSwgMjQ1LCA5LCAyLCAyNDksIDEwMCwgNywgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCAxLCAKLSAgICAyMjUsIDEzOSwgMjEzLCAxMzUsIDI0MywgMjQ5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCAxLCAKLSAgICAyMTgsIDExMCwgMjUxLCA2NiwgNywgMSwgMjUxLCAyNDYsIDI1MCwgMTEsIDcsIDEsIDQsIDYsIDI1MywgMTU4LCA3LCA0LCAKLSAgICAxLCAyNTAsIDAsIDIwNCwgNzUsIDcsIDEsIDQsIDYsIDI0MywgMjAzLCAyLCAxMDMsIDcsIDEsIDQsIDYsIDI0MiwgNjAsIDcsIAotICAgIDQsIDEsIDIzNSwgMTQ1LCAyLCAyNDksIDEyNywgNywgNCwgMSwgMjE1LCA5NCwgMjM1LCAyMywgNywgMSwgNCwgNiwgMTU2LCAKLSAgICA3LCA0LCAxLCAyMjQsIDk3LCAyLCAxMDMsIDcsIDEsIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDEsIDIyMywgNDksIAotICAgIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDQsIDEsIDI0NiwgNDAsIDI0NywgMjIwLCA3LCA0LCAxLCAyNDgsIDI2LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjEsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTUsIDE4NSwgCi0gICAgMjQ3LCAyMjAsIDcsIDQsIDEsIDIxNiwgMjM1LCAyNDcsIDIyMCwgNywgNCwgMSwgMjE3LCAyOSwgMjQ3LCAyMjEsIDIsIAotICAgIDI0OSwgMTAwLCA3LCA0LCAxLCAyNDQsIDEzNCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDIzMiwgMTAwLCAyNDcsIDIyMCwgNywgNCwgCi0gICAgMSwgMjMyLCA1MSwgMjQ3LCAyMjAsIDcsIDEsIDI1MSwgMjQ2LCAyMjUsIDE4MSwgNywgMSwgMjUxLCAyNTQsIDIyNSwgMTgxLCAKLSAgICA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYxLCAyLCAyNDQsIDg3LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYxLCAyLCAyNDQsIAotICAgIDg4LCAyMiwgMjE3LCA3NywgNTgsIDEsIDQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA0LCAKLSAgICAyMzUsIDE0NCwgNTgsIDEsIDQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgCi0gICAgMjI0LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAyMzUsIDE5MywgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIAotICAgIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTAsIDU4LCAxLCA1MiwgMjI0LCAxOTAsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIxOSwgCi0gICAgNTgsIDEsIDI1NCwgNTcsIDU4LCAxLCAyMjMsIDQ5LCAyNDksIDIxOSwgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjMzLCA1OCwgCi0gICAgMSwgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyMjMsIDQ5LCAyNDIsIAotICAgIDE4MCwgMjE4LCAxMjksIDU4LCAxLCA0MywgMjUzLCAyNDksIDU4LCAxLCA0NCwgMjUzLCAyNDksIDU4LCAxLCAxMjAsIDI1MywgCi0gICAgMjQ5LCA1OCwgMSwgMTI0LCAyNTMsIDI0OSwgNTgsIDEsIDI1MCwgMzEsIDI1NSwgMTQsIDI1MCwgMjM0LCA1OCwgMSwgNjcsIAotICAgIDIzMiwgMjEzLCA1OCwgMSwgMjMxLCAyMzIsIDU4LCAxLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyNDIsIDEzNywgMjU1LCAKLSAgICAxNCwgNTgsIDEsIDEyMSwgNjcsIDIzMiwgMjEzLCA1OCwgMSwgMTIxLCAyMzEsIDIzMiwgNTgsIDEsIDEyMSwgMjQyLCAxMzcsIAotICAgIDI1NSwgMTQsIDU4LCAxLCAxMjEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIxNSwgMjIyLCAyNDksIDIyNiwgNTgsIDEsIAotICAgIDE2MywgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgMjUwLCAxNzMsIDQ0LCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMjUwLCAKLSAgICAxNzMsIDQzLCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMTIwLCAyMTcsIDg3LCA1OCwgMSwgMTI0LCAyMTcsIDg3LCA1OCwgMSwgCi0gICAgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODIsIDUwLCAyNTEsIDE0NiwgNTksIDQ4LCAyMjIsIDIzNCwgNDgsIDIyNiwgMjI0LCA0LCAKLSAgICAxODIsIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyMjMsIDM2LCAxMDMsIDU4LCAxLCAyNDksIDEzMSwgMjU1LCAxNCwgCi0gICAgNTgsIDEsIDQsIDI0MywgMTA3LCA1OCwgMSwgNCwgMTU2LCA1OCwgMSwgNCwgMjIyLCA5MSwgNTgsIDEsIDQsIDIxMSwgMTc4LCAKLSAgICA1OCwgMSwgNCwgMjIzLCA0OSwgMjQyLCAxODAsIDIxOCwgMTI5LCA1OCwgMSwgMjQ1LCAyMCwgMTM4LCAxMzAsIDU4LCAxLCAKLSAgICAxMjUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDI0NSwgMTksIDEzOCwgMTMwLCA1OCwgMSwgMjEwLCAyNTQsIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTEsIDcwLCAKLSAgICAyNDgsIDQ0LCAxMzgsIDc4LCA1OCwgMSwgMjEzLCAxMzMsIDU4LCAxLCAyMTQsIDE4NiwgNTgsIDEsIDUyLCAyNTQsIDU3LCAKLSAgICA1OCwgMSwgMTIxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAxMjAsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCA0MywgCi0gICAgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgMjIyLCAyMzMsIDU4LCAxLCAyMzAsIAotICAgIDIyNCwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAyMzAsIDIyNCwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCA1OCwgMSwgCi0gICAgMjMwLCAyMjQsIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAxMjEsIDE4MiwgNTgsIDEsIDIyMywgMTU3LCAyNDksIAotICAgIDIyNiwgNTgsIDEsIDI1MiwgNTgsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjUsIDIxNiwgMzAsIDU4LCAxLCAKLSAgICAyNTIsIDU4LCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyNDUsIDE0MywgMTIxLCAyMTYsIDMwLCA1OCwgMSwgMjIwLCA1NCwgNTgsIAotICAgIDEsIDIwNCwgMjIwLCA1NCwgNTgsIDEsIDEyMSwgNDMsIDc0LCAzOCwgMjQyLCAxMzcsIDI1NSwgMTQsIDM4LCAyNTUsIDMsIAotICAgIDI1NSwgMTQsIDM4LCAyNTAsIDMxLCAyNTUsIDE0LCAzOCwgMTgyLCAzOCwgMjMxLCAyMzIsIDM4LCAyMjYsIDExOSwgMzgsIAotICAgIDI1MSwgMTQ2LCAzOCwgNTksIDQ4LCAzOCwgMjQ4LCAxLCAzOCwgMjQxLCA1MiwgNDgsIDM4LCAyMjIsIDIzNCwgNDgsIDM4LCAKLSAgICA1MiwgMjU1LCAzLCAyNTUsIDE0LCAzOCwgMjUwLCAyMzQsIDM4LCA2NywgMjMyLCAyMTQsIDQ4LCAzOCwgNTIsIDY3LCAyMzIsIAotICAgIDIxNCwgNDgsIDM4LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDM4LCAyNTAsIDI1NSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0NiwgCi0gICAgMzgsIDIxNSwgOTQsIDI0OSwgMjIwLCA0OCwgMzgsIDI0OSwgMjIwLCA0OCwgMzgsIDIyMywgNDksIDI0OSwgMjIwLCA0OCwgCi0gICAgMzgsIDI0OSwgMjIwLCA3NywgMjIyLCAyNTEsIDM4LCAyNDIsIDEzNywgMjU1LCAxNSwgNTEsIDM4LCAyNTUsIDMsIDI1NSwgCi0gICAgMTUsIDUxLCAzOCwgNDMsIDIxNywgODgsIDUxLCAzOCwgNDQsIDIxNywgODgsIDUxLCAzOCwgNDMsIDI1NCwgMTEwLCA0OCwgCi0gICAgMzgsIDI0MCwgMjQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDUxLCAzOCwgMTIwLCAyMTcsIDg4LCA1MSwgMzgsIDEyNCwgCi0gICAgMjE3LCA4OCwgNTEsIDM4LCA5NiwgNSwgNTEsIDM4LCAyMzAsIDE4MiwgNSwgNTEsIDM4LCAyMjYsIDY0LCAyNDEsIDUyLCAKLSAgICA1MSwgMzgsIDIyMywgNTUsIDI0MSwgNTIsIDUxLCAzOCwgNTksIDUxLCAzOCwgMjQ4LCAyLCA1MSwgMzgsIDIyMiwgMjM0LCAKLSAgICA1MSwgMzgsIDI0OSwgMjIwLCA1MSwgMzgsIDI1MCwgMTgzLCAzOCwgMjI2LCAyMjQsIDM4LCA2NywgMjMyLCAyMTQsIDUxLCAKLSAgICAzOCwgMjUxLCAxNDAsIDUxLCAzOCwgMjM1LCAxOTMsIDUyLCAyNTQsIDI0LCA1MSwgMzgsIDI1MCwgMjM1LCA1MSwgMzgsIAotICAgIDI1MCwgMzEsIDI1NSwgMTUsIDUxLCAzOCwgMjUxLCAxNDcsIDUxLCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ3LCA1MSwgMzgsIAotICAgIDIxNiwgODksIDUxLCAzOCwgMjMxLCAyMzMsIDUxLCAzOCwgMTIxLCAyMzIsIDIxMywgMzgsIDUyLCAxMjEsIDIzMiwgMjEzLCAKLSAgICAzOCwgMjE2LCA4OSwgMjI2LCAxMjAsIDM4LCAyMTksIDI1MSwgMjE4LCAxMDMsIDIyNiwgMTIwLCAzOCwgMTk5LCAyMTgsIAotICAgIDEwMywgMjI2LCAxMjAsIDM4LCAyMTksIDI1MSwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOSwgNDcsIDIyNiwgCi0gICAgMTIwLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDUxLCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQwLCA1MSwgMzgsIDQyLCA1MSwgCi0gICAgMzgsIDIyMSwgMTgwLCA1MSwgMzgsIDIxMSwgMTc5LCA0OCwgMzgsIDY3LCAxODIsIDM4LCA1MiwgMjI2LCAxMTksIDM4LCAKLSAgICAyNDIsIDEzNywgMTM4LCA3OCwgMzgsIDI1NSwgMywgMTM4LCA3OCwgMzgsIDI2LCAyMjUsIDE3NSwgMzgsIDI2LCAyMzQsIDIsIAotICAgIDM4LCAyNiwgMjQ3LCAyNTIsIDIxNiwgMTgsIDM4LCAyNiwgMjEwLCAyMTksIDM4LCAyNTEsIDE0MCwgNDgsIDM4LCAyNDUsIAotICAgIDk4LCA1LCA1MSwgMzgsIDUyLCA2NywgMjMyLCAyMTQsIDUxLCAzOCwgNDMsIDI1NCwgMTEwLCA1MSwgMzgsIDIyOCwgNTIsIAotICAgIDIxNiwgODksIDQ4LCAzOCwgMjQxLCA1OCwgNDgsIDM4LCAyNTQsIDE0OCwgMTI4LCAyMTYsIDQyLCA0OCwgMzgsIDQzLCA0NCwgCi0gICAgODAsIDUxLCAzOCwgMjE0LCAxNTMsIDgwLCA1MSwgMzgsIDI0MiwgMTQyLCAyMzUsIDYzLCAzOCwgNDQsIDI1MywgMjUwLCAKLSAgICA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM0LCA0OCwgMzgsIDI0NCwgMTMxLCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIAotICAgIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgNTEsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjAsIDI1MywgMjUwLCAKLSAgICA1MSwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM0LCA0OCwgMzgsIDU5LCA3NywgMjIyLCAyNTEsIDM4LCAyNTMsIDIxNywgNTEsIAotICAgIDM4LCA1MiwgMjIyLCAyMzQsIDUxLCAzOCwgMjEwLCAzNSwgNDgsIDM4LCA1MiwgMjUxLCAxNDcsIDUxLCAzOCwgNTIsIDI1MSwgCi0gICAgMTQ2LCAzOCwgNTIsIDIzMSwgMjMyLCAzOCwgNTIsIDIzMSwgMjMzLCA1MSwgMzgsIDUyLCAxODIsIDM4LCA1MiwgMjM1LCAKLSAgICAxOTMsIDI1MSwgMTQ2LCAzOCwgNTIsIDk3LCA4MCwgNTEsIDM4LCA3LCA0LCAxLCA2MSwgMzgsIDcsIDQsIDEsIDc1LCAzOCwgCi0gICAgNywgNCwgMSwgNzMsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDcwLCAzOCwgNywgNCwgMSwgMjUxLCA2NiwgMzgsIAotICAgIDcsIDQsIDEsIDI0OSwgNjAsIDM4LCA3LCA0LCAxLCAyNDIsIDYwLCAzOCwgNywgNCwgMSwgMTkzLCAzOCwgNywgNCwgMSwgCi0gICAgMTUzLCAzOCwgNywgNCwgMSwgMjE3LCAxNTIsIDM4LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKLSAgICAyNiwgNiwgMSwgMjQxLCAxOTYsIDI2LCA0LCAxLCAyNDEsIDE5NiwgMjYsIDYsIDEsIDI1NCwgMjMsIDIyMSwgMjQ2LCAyNiwgCi0gICAgNCwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAyMjcsIDE5OCwgNTAsIDI2LCAyMzIsIDEwOCwgMjI3LCAxOTgsIDUwLCAKLSAgICAyNiwgNiwgMSwgMjI2LCA1MSwgMjQ3LCAyMjcsIDI2LCA0LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDIxMCwgMjE5LCAKLSAgICAyNiwgNCwgMjIzLCA0OSwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNCwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgCi0gICAgMTc4LCA4NywgMjYsIDQsIDIyMywgNDksIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAyMjQsIDEzLCAKLSAgICA3OCwgMjYsIDIxNiwgMTgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAKLSAgICAyNiwgMjU0LCA5NywgMjE3LCAyLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAKLSAgICAxOCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDMsIDI2LCA2LCAxLCAKLSAgICAyNTIsIDI2LCAyNiwgNiwgMSwgMjQzLCAxMDcsIDI2LCA2LCAxLCAyNDgsIDU0LCAyNiwgNiwgMSwgMjQ1LCAxMDAsIDI2LCAKLSAgICA2LCAxLCAyMTAsIDg1LCAyNiwgNiwgMSwgMjQ1LCA2MywgMjYsIDYsIDEsIDIxNiwgMTc5LCAyNiwgNiwgMSwgMjM1LCAxODUsIAotICAgIDI2LCA2LCAxLCAyMzQsIDIyMiwgMjYsIDYsIDEsIDIzMywgOTgsIDI2LCA2LCAxLCAyMzAsIDEwMiwgMjYsIDYsIDEsIDIyNywgCi0gICAgMjM3LCAyNiwgNiwgMSwgMjExLCAxNTcsIDI2LCA2LCAxLCAyMjYsIDE5OSwgMjYsIDYsIDEsIDIyNSwgMTA4LCAyNiwgNiwgCi0gICAgMSwgMjIzLCAzNywgMjYsIDYsIDEsIDIxOSwgMTc3LCAyNiwgNiwgMSwgMjE3LCA0MSwgMjYsIDYsIDEsIDIxNCwgMTU3LCAKLSAgICAyNiwgNiwgMSwgMjI1LCAxMzMsIDI2LCA2LCAxLCAyNTAsIDExMCwgMjYsIDYsIDEsIDIyNCwgMTYxLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDEsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjQ1LCA2NCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDI1NCwgMTQzLCAyNiwgNCwgMSwgMjUyLCAyNiwgMjYsIAotICAgIDQsIDEsIDI0MywgMTA3LCAyNiwgNCwgMSwgMjQ4LCA1NCwgMjYsIDQsIDEsIDI0NSwgMTAwLCAyNiwgNCwgMSwgMjEwLCA4NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjMsIDI2LCA0LCAxLCAyMTYsIDE3OSwgMjYsIDQsIDEsIDIzNSwgMTg1LCAyNiwgNCwgMSwgMjM0LCAKLSAgICAyMjIsIDI2LCA0LCAxLCAyMzMsIDk4LCAyNiwgNCwgMSwgMjMwLCAxMDIsIDI2LCA0LCAxLCAyMjcsIDIzNywgMjYsIDQsIDEsIAotICAgIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAxOTksIDI2LCA0LCAxLCAyMjUsIDEwOCwgMjYsIDQsIDEsIDIyMywgMzcsIDI2LCAKLSAgICA0LCAxLCA0MCwgMjE5LCAxNzcsIDI2LCA0LCAxLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxNywgNDEsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1NywgMjYsIDQsIDEsIDIyNSwgMTMzLCAyNiwgNCwgMSwgMjUwLCAxMTAsIDI2LCA0LCAxLCAyMjQsIDE2MSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAxLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUxLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgCi0gICAgMjUxLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDE4LCAyNiwgNiwgMjM0LCAyNDcsIDg3LCAyNiwgMjUyLCAyNywgODcsIDI2LCAKLSAgICAyMTYsIDE4MCwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQxLCA1MiwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjU1LCAzLCAyMiwgCi0gICAgMjQxLCA1MiwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAyLCAyMiwgMjQxLCA1MiwgODcsIDI2LCAyMjUsIDEzNCwgODcsIAotICAgIDI2LCAyMjUsIDEwOSwgODcsIDI2LCAyMzQsIDI0NywgODcsIDI2LCAxLCAyNTQsIDIzLCAyMzQsIDYsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDIzLCAyMzQsIDYsIDI2LCAxLCAyMTgsIDEzNywgMjYsIDQsIDEsIDIxOCwgMTM3LCAyNiwgMSwgMjQ3LCAyMjcsIAotICAgIDI2LCA0LCAxLCAyNDcsIDIyNywgMjYsIDEsIDIzNCwgNiwgMjYsIDQsIDEsIDIzNCwgNiwgMjYsIDEsIDIyMSwgMjQ2LCAyNiwgCi0gICAgNCwgMSwgMjIxLCAyNDYsIDgxLCA2LCAxLCAyMjAsIDU1LCA4MSwgNCwgMSwgMjIwLCA1NSwgODEsIDYsIDEsIDI0NCwgMTQwLCAKLSAgICA4MSwgNCwgMSwgMjQ0LCAxNDAsIDgxLCA2LCAxLCAyMzQsIDExNywgODEsIDQsIDEsIDIzNCwgMTE3LCA4MSwgNiwgMSwgCi0gICAgMjQxLCA0NSwgODEsIDQsIDEsIDI0MSwgNDUsIDgxLCA2LCAxLCAyNDMsIDEwMiwgODEsIDQsIDEsIDI0MywgMTAyLCA4MSwgCi0gICAgNiwgMSwgMjIwLCAyMiwgODEsIDQsIDEsIDIyMCwgMjIsIDgxLCA2LCAxLCAyNDgsIDY5LCA4MSwgNCwgMSwgMjQ4LCA2OSwgCi0gICAgMjYsIDIzNCwgMjIzLCA4NywgMjYsIDIyMywgMzgsIDg3LCAyNiwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgMSwgMjEwLCAKLSAgICAyMjQsIDI2LCA2LCAyMTYsIDE4MCwgODcsIDI2LCAyMzIsIDgzLCAyNDUsIDEwMSwgODcsIDI2LCAyMjMsIDQ5LCAyMzIsIAotICAgIDgzLCAyNDUsIDEwMSwgODcsIDI2LCA2LCAxLCAyMjAsIDcsIDI2LCA0LCAxLCAyMjAsIDcsIDI2LCA2LCAyMzIsIDgzLCAKLSAgICAyMTksIDE3OCwgODcsIDI2LCA2LCAxLCAyMjEsIDI0MywgMjYsIDQsIDEsIDIyMSwgMjQzLCAyNiwgMjIzLCAzOCwgMiwgCi0gICAgMjE4LCAxMDMsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjQ2LCAxMTgsIAotICAgIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDYsIDIyMywgNDksIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIAotICAgIDMzLCA2LCAxLCAyMzYsIDYxLCAyLCAyNDIsIDEzNiwgMzMsIDYsIDEsIDIzNSwgMTg5LCAzMywgNiwgMSwgMjQ3LCAxNjIsIAotICAgIDMzLCA2LCAxLCAyNDIsIDE4NywgMzMsIDYsIDEsIDIxNCwgMjAyLCAyMzYsIDYwLCAzMywgNiwgMSwgMjQ2LCAzNiwgMzMsIAotICAgIDYsIDEsIDI1MSwgNzYsIDczLCAzMywgNiwgMSwgMjExLCA4LCAzMywgNiwgMSwgMjM1LCAxMjYsIDMzLCA2LCAxLCAyMzIsIAotICAgIDE4NywgMzMsIDYsIDEsIDIyOCwgMTc4LCAzMywgNiwgMSwgMjE1LCAxNzQsIDMzLCA2LCAxLCAyMzQsIDQ4LCAzMywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjE5LCAyNTEsIDcwLCAzMywgNiwgMSwgMjQ2LCAzMiwgMzMsIDYsIAotICAgIDEsIDYxLCAzMywgNiwgMSwgMjUyLCA3NSwgMzMsIDYsIDEsIDIxMywgMjU1LCAzMywgNiwgMSwgMjQyLCAyMzYsIDMzLCA2LCAKLSAgICAxLCAyNDgsIDkwLCAzMywgNiwgMSwgMjM2LCA2MCwgMzMsIDYsIDEsIDIxMCwgNzQsIDMzLCA2LCAxLCAyMTAsIDk0LCAzMywgCi0gICAgNiwgMSwgNzMsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzMsIDMzLCA2LCAxLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NCwgMzMsIAotICAgIDYsIDEsIDI0NSwgMTU5LCAzMywgNiwgMSwgMjQ1LCAxNTAsIDMzLCA2LCAxLCA3NiwgMzMsIDYsIDEsIDIyNSwgMjIxLCAzMywgCi0gICAgNiwgMSwgMjQ1LCA5MiwgMzMsIDYsIDEsIDI0NSwgODIsIDMzLCA2LCAxLCAyMTcsIDIyLCAzMywgNiwgMSwgNzAsIDMzLCA2LCAKLSAgICAxLCAyNDUsIDIwMiwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc4LCAzMywgNiwgMSwgMjUwLCAxMzEsIDMzLCAKLSAgICA2LCAxLCAyMjAsIDEwMiwgMzMsIDYsIDEsIDIyMCwgNjUsIDMzLCA2LCAxLCAyNDIsIDMsIDUwLCAzMywgNiwgMSwgMjExLCAKLSAgICAyNywgMzMsIDYsIDEsIDIxOSwgNTIsIDUwLCAzMywgNiwgMSwgNzUsIDMzLCA2LCAxLCAyMTAsIDIxMiwgMzMsIDYsIDEsIAotICAgIDE5MSwgMzMsIDQsIDEsIDYxLCAzMywgNCwgMSwgMjUyLCA3NSwgMzMsIDQsIDEsIDIxMywgMjU1LCAzMywgNCwgMSwgMjQyLCAKLSAgICAyMzYsIDMzLCA0LCAxLCAyNDgsIDkwLCAzMywgNCwgMSwgMjM2LCA2MCwgMzMsIDQsIDEsIDIxMCwgNzQsIDMzLCA0LCAxLCAKLSAgICAyMTAsIDk0LCAzMywgNCwgMSwgNzMsIDMzLCA0LCAxLCAyMTksIDI1MSwgNzMsIDMzLCA0LCAxLCAxNzYsIDMzLCA0LCAxLCAKLSAgICAyNDUsIDE3NCwgMzMsIDQsIDEsIDI0NSwgMTU5LCAzMywgNCwgMSwgMjQ1LCAxNTAsIDMzLCA0LCAxLCA3NiwgMzMsIDQsIDEsIAotICAgIDIyNSwgMjIxLCAzMywgNCwgMSwgMjQ1LCA5MiwgMzMsIDQsIDEsIDI0NSwgODIsIDMzLCA0LCAxLCAyMTcsIDIyLCAzMywgNCwgCi0gICAgMSwgNzAsIDMzLCA0LCAxLCAyNDUsIDIwMiwgMzMsIDQsIDEsIDE2MiwgMzMsIDQsIDEsIDIxNSwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMjAsIDEwMiwgMzMsIDQsIDEsIDIyMCwgNjUsIDMzLCA0LCAxLCAyNDIsIDMsIDUwLCAKLSAgICAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTIsIDUwLCAzMywgNCwgMSwgNzUsIDMzLCA0LCAxLCAyMTAsIAotICAgIDIxMiwgMzMsIDQsIDEsIDE5MSwgMzMsIDQsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNCwgMSwgMjM1LCAxODksIAotICAgIDMzLCA0LCAxLCAyNDcsIDE2MiwgMzMsIDQsIDEsIDI0MiwgMTg3LCAzMywgNCwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCAKLSAgICA0LCAxLCAyNDYsIDM2LCAzMywgNCwgMSwgMjUxLCA3NiwgNzMsIDMzLCA0LCAxLCAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIAotICAgIDEyNiwgMzMsIDQsIDEsIDIzMiwgMTg3LCAzMywgNCwgMSwgMjI4LCAxNzgsIDMzLCA0LCAxLCAyMTUsIDE3NCwgMzMsIDQsIAotICAgIDEsIDIzNCwgNDgsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMTksIDI1MSwgNzAsIDMzLCAKLSAgICA0LCAxLCAyNDYsIDMyLCAzMywgNiwgMSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIxMSwgNTksIAotICAgIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxODMsIDc1LCAzMywgNCwgMSwgMjM1LCAxODMsIDc1LCAzMywgNiwgCi0gICAgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIAotICAgIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDIzMywgMjMzLCAzMywgNCwgMSwgMjMzLCAyMzMsIDMzLCA2LCAxLCAyMjQsIDE2MSwgMzMsIDQsIDEsIDIyNCwgMTYxLCAzMywgCi0gICAgNiwgMSwgMjQ0LCA4MiwgMzMsIDQsIDEsIDI0NCwgODIsIDMzLCA2LCAxLCAyMzUsIDE0NiwgMzMsIDQsIDEsIDIzNSwgMTQ2LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxNDcsIDIsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDQsIDEsIDIzNSwgMTQ3LCAyLCA1MiwgCi0gICAgMjQyLCAxMzcsIDI1NSwgMTQsIDMzLCA2LCAxLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIxNCwgMjA1LCAzMywgNiwgMSwgMjIyLCAKLSAgICAxODUsIDIyNiwgMjAxLCAzMywgNCwgMSwgMjIyLCAxODUsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgCi0gICAgNjUsIDMzLCA0LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCA2NSwgMzMsIDYsIDEsIDIyNiwgMTQwLCAzMywgNCwgMSwgMjI2LCAKLSAgICAxNDAsIDMzLCA2LCAxLCAyMzQsIDYsIDMzLCA0LCAxLCAyMzQsIDYsIDMzLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjE2LCAKLSAgICA2NSwgMzgsIDMzLCAyMjYsIDY1LCAzOCwgMzMsIDI0OCwgMTU0LCAyMjUsIDE4LCAzOCwgMzMsIDIyNCwgMTU1LCAyMjUsIAotICAgIDE4LCAzOCwgMzMsIDIyNSwgMywgMzgsIDMzLCAyNDAsIDIxMSwgMjE2LCAxNDYsIDUwLCAzOCwgMzMsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzMsIDYsIDEsIDIxOSwgMjUxLCAyNDAsIDE1NCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDIxOSwgMjUxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDIyMCwgMTQ2LCA1MCwgMzMsIDQsIDEsIDIyMCwgMTQ2LCA1MCwgMzMsIDYsIDEsIAotICAgIDI0NSwgOTMsIDIsIDIxNiwgMTE0LCAzMywgNCwgMSwgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA2LCAxLCAyNDIsIDIzNywgCi0gICAgMiwgMjE0LCAxNTYsIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjE0LCAxNTYsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgOTEsIAotICAgIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIAotICAgIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIAotICAgIDIxMCwgNzUsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxMywgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgNjcsIDkxLCAzMywgNiwgMSwgCi0gICAgMjM1LCAxMywgMiwgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA5MSwgMzMsIDYsIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA0LCAKLSAgICAxLCAyNTIsIDEyNCwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDYsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIDMzLCA0LCAyNywgMjQ1LCAxNTEsIDI0MiwgMjM2LCAKLSAgICAzMywgNiwgMSwgMjI1LCAyMjIsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIAotICAgIDEwMywgMzMsIDYsIDEsIDI1NSwgMjAsIDE2MiwgMzMsIDQsIDEsIDI1NSwgMjAsIDE2MiwgMzMsIDYsIDEsIDI0NSwgODMsIAotICAgIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDUsIDgzLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDQsIDEsIDIxNywgMjMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTgsIDEyMSwgNzAsIDMzLCA0LCAxLCAyMTgsIAotICAgIDEyMSwgNzAsIDMzLCA2LCAxLCAyMTgsIDEyMSwgMTA0LCAyLCA5MSwgMzMsIDQsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAKLSAgICAzMywgNiwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDI0OCwgMzksIDMzLCA2LCAyNywgCi0gICAgMjE3LCAyMywgMjE1LCAxNzgsIDMzLCA0LCAyNywgMjE3LCAyMywgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgCi0gICAgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMjAsIDMzLCAzMywgNCwgMSwgMjIwLCAzMywgMzMsIAotICAgIDYsIDEsIDI1NSwgMjAsIDI1MCwgMTMxLCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNTUsIDIwLCAKLSAgICAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI1NSwgMjAsIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgMSwgCi0gICAgMjI2LCA1OCwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTQ2LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCAxMDMsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgCi0gICAgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIAotICAgIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjM0LCAxMjcsIDI1MCwgMTMxLCAzMywgNCwgMSwgMjM0LCAxMjcsIAotICAgIDI1MCwgMTMxLCAzMywgNiwgMSwgMjQ1LCAxNjAsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgCi0gICAgMzMsIDQsIDEsIDIyNiwgNTgsIDMzLCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCAzMywgNCwgMSwgMTE1LCAyLCAyNTEsIAotICAgIDE0NiwgMzMsIDYsIDEsIDExNSwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA2LCAyNywgMTE1LCAKLSAgICAyMzYsIDYwLCAzMywgNCwgMjcsIDExNSwgMjM2LCA2MCwgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI1MSwgMTQ2LCAzMywgNCwgCi0gICAgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA2LCAxLCAyMjEsIDE5NSwgMzMsIDQsIDEsIDIyMSwgMTk1LCAzMywgNiwgCi0gICAgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIyMSwgMTk2LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyMTAsIDc1LCAKLSAgICAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDEsIAotICAgIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyNTUsIDIwLCAyNDYsIDM2LCAzMywgNCwgMSwgMjU1LCAKLSAgICAyMCwgMjQ2LCAzNiwgMzMsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIAotICAgIDIzMiwgMzMsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCAzMywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1MiwgMTM0LCA3NiwgMzMsIAotICAgIDQsIDEsIDI1MiwgMTM0LCA3NiwgMzMsIDYsIDEsIDI1MiwgMTM0LCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI1MiwgCi0gICAgMTM0LCAxNDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTYwLCAyLCAyNDgsIDEsIAotICAgIDMzLCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgMzMsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDMzLCA0LCAxLCAKLSAgICAxMDQsIDIsIDUyLCAxNDIsIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIAotICAgIDI0OCwgMSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAKLSAgICAyNDIsIDIzNywgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCAxMDMsIDMzLCA2LCAxLCAyNDIsIDQ5LCAKLSAgICAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDkxLCAzMywgNiwgMSwgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDQsIDEsIAotICAgIDIzNCwgMTQsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDcsIDE2MiwgMzMsIDQsIDEsIDIzNCwgMTQsIDI0NywgCi0gICAgMTYyLCAzMywgNiwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDQsIDEsIDIzNCwgMTQsIDIxMCwgMjcsIDMzLCA2LCAxLCAKLSAgICAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ2LCAzMCwgMzMsIDYsIDEsIDIzNCwgMTQsIDIzMiwgCi0gICAgMTg3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjMyLCAxODcsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMjgsIDE3OCwgMzMsIDQsIDEsIAotICAgIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE5LCAxMDksIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTksIAotICAgIDEwOSwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTYsIDYwLCAzMywgNiwgMSwgCi0gICAgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDQsIDEsIDIyMywgNDksIDIxMCwgOTQsIDMzLCA2LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDEwMywgMzMsIDYsIDEsIDIzMiwgMjU0LCAzMywgNCwgMSwgMjMyLCAyNTQsIDMzLCAKLSAgICA2LCAxLCAyMjMsIDM5LCAzMywgNCwgMSwgMjIzLCAzOSwgMzMsIDYsIDEsIDIxMSwgOTIsIDMzLCA0LCAxLCAyMTEsIDkyLCAKLSAgICAzMywgNiwgMSwgMjI0LCA4OCwgMzMsIDQsIDEsIDIyNCwgODgsIDMzLCA2LCAxLCAyMTIsIDIyLCAzMywgNCwgMSwgMjEyLCAKLSAgICAyMiwgMzMsIDYsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA0LCAxLCAyNTQsIDE2NiwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNzUsIAotICAgIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDI0NSwgCi0gICAgMTUxLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAKLSAgICAyMjUsIDIyMiwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjIwLCAzNCwgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIyMCwgMzQsIDIsIDI0OCwgMzksIDE1MCwgNiwgMSwgMjUzLCAxNjQsIDE1MCwgNiwgCi0gICAgMSwgMjUyLCAzOSwgMTUwLCA2LCAxLCAyNDIsIDIwMywgMTUwLCA2LCAxLCAyNDgsIDIyMSwgMTUwLCA2LCAxLCAyNDUsIAotICAgIDIxMywgMTUwLCA2LCAxLCAyMTAsIDExNiwgMTUwLCA2LCAxLCAyNDUsIDE5NywgMTUwLCA2LCAxLCAyNDUsIDY1LCAxNTAsIAotICAgIDYsIDEsIDExMSwgMTUwLCA2LCAxLCAyMTAsIDc0LCAxNTAsIDYsIDEsIDIzNSwgMjI3LCAxNTAsIDYsIDEsIDIzMiwgMTkwLCAKLSAgICAxNTAsIDYsIDEsIDIxMSwgMTYwLCAxNTAsIDYsIDEsIDI1MSwgMzMsIDE1MCwgNiwgMSwgMjM0LCAxNjUsIDE1MCwgNiwgMSwgCi0gICAgMjQxLCA2OCwgMTUwLCA2LCAxLCAyMzUsIDE0MSwgMTUwLCA2LCAxLCAyNDIsIDI0NiwgMTUwLCA2LCAxLCAyNTAsIDEyNiwgCi0gICAgMTUwLCA2LCAxLCAyMzEsIDU4LCAxNTAsIDYsIDEsIDIxMSwgOCwgMTUwLCA2LCAxLCAyMjgsIDM5LCAxNTAsIDYsIDEsIAotICAgIDIyMCwgMTAyLCAxNTAsIDYsIDEsIDIxMywgMTM4LCAxNTAsIDYsIDEsIDI1MCwgMTU3LCAxNTAsIDYsIDEsIDIyNSwgMjA1LCAKLSAgICAxNTAsIDYsIDEsIDIzNSwgMTEwLCAxNTAsIDYsIDEsIDIwNSwgMTUwLCA2LCAxLCAyMjEsIDE2MSwgMTUwLCA2LCAxLCAyMTMsIAotICAgIDE3OSwgMTUwLCA2LCAxLCAyMTYsIDYyLCAxNTAsIDYsIDEsIDIyMywgOTUsIDE1MCwgNiwgMSwgMjQ5LCAyMzgsIDE1MCwgNiwgCi0gICAgMSwgMjEwLCAyNDksIDE1MCwgNiwgMSwgMjI1LCA0NiwgMTUwLCA2LCAxLCAyMzQsIDE3NiwgMTUwLCA2LCAxLCAyMjYsIAotICAgIDIyMiwgMTUwLCA2LCAxLCAyNDQsIDE0MiwgMTUwLCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzMsIDE1MCwgMjU0LCA1NywgCi0gICAgMTUwLCAyNDUsIDE1NCwgNzgsIDE1MCwgMjQ1LCAzMSwgNzgsIDE1MCwgMjQ5LCAyMTksIDE1MCwgMjI0LCAxMywgNzgsIAotICAgIDE1MCwgMjU1LCAyMSwgNzgsIDE1MCwgNCwgMSwgMjUzLCAxNjQsIDE1MCwgNCwgMSwgMjUyLCAzOSwgMTUwLCA0LCAxLCAKLSAgICAyNDIsIDIwMywgMTUwLCA0LCAxLCAyNDgsIDIyMSwgMTUwLCA0LCAxLCAyNDUsIDIxMywgMTUwLCA0LCAxLCAyMTAsIDExNiwgCi0gICAgMTUwLCA0LCAxLCAyNDUsIDE5NywgMTUwLCA0LCAxLCAyNDUsIDY1LCAxNTAsIDQsIDEsIDExMSwgMTUwLCA0LCAxLCAyMTAsIAotICAgIDc0LCAxNTAsIDQsIDEsIDIzNSwgMjI3LCAxNTAsIDQsIDEsIDIzMiwgMTkwLCAxNTAsIDQsIDEsIDIxMSwgMTYwLCAxNTAsIAotICAgIDQsIDEsIDI1MSwgMzMsIDE1MCwgNCwgMSwgMjM0LCAxNjUsIDE1MCwgNCwgMSwgMjQxLCA2OCwgMTUwLCA0LCAxLCAyMzUsIAotICAgIDE0MSwgMTUwLCA0LCAxLCAyNDIsIDI0NiwgMTUwLCA0LCAxLCAyNTAsIDEyNiwgMTUwLCA0LCAxLCAyMzEsIDU4LCAxNTAsIAotICAgIDQsIDEsIDIxMSwgOCwgMTUwLCA0LCAxLCAyMjgsIDM5LCAxNTAsIDQsIDEsIDIyMCwgMTAyLCAxNTAsIDQsIDEsIDIxMywgCi0gICAgMTM4LCAxNTAsIDQsIDEsIDI1MCwgMTU3LCAxNTAsIDQsIDEsIDIyNSwgMjA1LCAxNTAsIDQsIDEsIDIzNSwgMTEwLCAxNTAsIAotICAgIDQsIDEsIDIwNSwgMTUwLCA0LCAxLCAyMjEsIDE2MSwgMTUwLCA0LCAxLCAyMTMsIDE3OSwgMTUwLCA0LCAxLCAyMTYsIDYyLCAKLSAgICAxNTAsIDQsIDEsIDIyMywgOTUsIDE1MCwgNCwgMSwgMjQ5LCAyMzgsIDE1MCwgNCwgMSwgMjEwLCAyNDksIDE1MCwgNCwgMSwgCi0gICAgMjI1LCA0NiwgMTUwLCA0LCAxLCAyMzQsIDE3NiwgMTUwLCA0LCAxLCAyMjYsIDIyMiwgMTUwLCA0LCAxLCAyNDQsIDE0MiwgCi0gICAgMTUwLCA0LCAyNywgMjQ1LCAyMTQsIDIxMCwgMjQ5LCAxNTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTUwLCAyNDAsIDE2OCwgCi0gICAgMTUwLCAyNDYsIDk1LCA1MCwgOTQsIDI1NSwgMTUsIDI0NSwgNTcsIDk0LCAyNTUsIDE1LCAyMjEsIDE2MiwgOTQsIDI1NSwgCi0gICAgMTUsIDIyMCwgODgsIDk0LCAyNTUsIDE1LCAyMTAsIDEwNCwgMjI0LCA3MSwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyNDMsIAotICAgIDEyNSwgOTQsIDI1NSwgMTUsIDIxNiwgNzUsIDk0LCAyNTUsIDE1LCAyMjMsIDQ3LCA5NCwgMjU1LCAxNSwgMjEwLCAxMDMsIAotICAgIDk0LCAyNTUsIDE1LCAyMjUsIDI0NSwgOTQsIDI1NSwgMTUsIDIxMSwgMjAsIDk0LCAyNTUsIDE1LCAyMTYsIDIxNCwgOTQsIAotICAgIDI1NSwgMTUsIDI0MywgNDEsIDk0LCAyNTUsIDE1LCAyNDMsIDQyLCAyMzAsIDY5LCA5NCwgMjU1LCAxNSwgMjQzLCAzOSwgCi0gICAgOTQsIDI1NSwgMTUsIDIyNCwgNzIsIDIyNiwgMTYsIDk0LCAyNTUsIDE1LCAyMTYsIDI1MywgMjQzLCA1NiwgOTQsIDI1NSwgCi0gICAgMTUsIDIyNSwgMjI2LCA5NCwgMjU1LCAxNSwgMjUzLCAyMDAsIDI0MiwgNDEsIDk0LCAyNTUsIDE1LCAyMzAsIDc5LCA5NCwgCi0gICAgMjU1LCAxNSwgMjMxLCAyMDgsIDk0LCAyNTUsIDE1LCAyMzEsIDQ5LCA5NCwgMjU1LCAxNSwgMjMxLCA1MCwgMjM0LCAxNzcsIAotICAgIDk0LCAyNTUsIDE1LCAyNDgsIDE2MywgOTQsIDI1NSwgMTUsIDIyNCwgODMsIDk0LCAyNTUsIDE1LCAyMTYsIDI1MywgMjI0LCAKLSAgICA2NywgOTQsIDI1NSwgMTUsIDIxMSwgMzAsIDI1MiwgNDAsIDIxMCwgMjMwLCA5NCwgMjU1LCAxNSwgMjI2LCAyMDcsIDk0LCAKLSAgICAyNTUsIDE1LCAyMzYsIDE5LCA5NCwgMjU1LCAxNSwgMjQ4LCA3MCwgOTQsIDI1NSwgMTUsIDIxMCwgMzMsIDk0LCAxNjQsIAotICAgIDIzMSwgMTQzLCAyNTAsIDM1LCA5NCwgMjI1LCAxMSwgMjIwLCAzNiwgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjEsIDE2MiwgCi0gICAgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjQsIDc2LCA5NCwgMjI1LCAKLSAgICAxMSwgMjQxLCAxNTgsIDk0LCAyMjUsIDExLCAyMTUsIDE3NiwgOTQsIDIyNSwgMTEsIDIyMSwgMTYyLCA5NCwgMjI1LCAxMSwgCi0gICAgMjI1LCAyMzksIDk0LCAyMjUsIDExLCAyMjQsIDc2LCA5NCwgMjI1LCAxMSwgMjQxLCA2MSwgOTQsIDIyNSwgMTEsIDI0MSwgCi0gICAgNjIsIDI0MSwgMjUyLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxMSwgMjI0LCAxNywgOTQsIDIyNSwgMTEsIDI0OCwgMjA4LCAKLSAgICAxNzcsIDIzMSwgMTcxLCA5NCwgMjI1LCAxMSwgMjMxLCAzOCwgOTQsIDIyNCwgMTQxLCAyMzEsIDE2OCwgOTQsIDIyNSwgMTEsIAotICAgIDIyMywgMTY5LCA5NCwgMjI0LCAxNDEsIDIyNSwgMjQ3LCA5NCwgMjI1LCAxMSwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAKLSAgICAyMjUsIDExLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjE5LCA1MywgMjI1LCAyNDEsIDk0LCAxNjQsIAotICAgIDIxNCwgMTYwLCAyNDcsIDEyMCwgOTQsIDE2NCwgMjMyLCAxMDgsIDI0NywgMTIwLCA5NCwgMjI0LCAxNDEsIDIyNywgMTk1LCAKLSAgICAyNDIsIDQwLCA5NCwgMjI1LCAxMSwgMjI0LCA3NywgMjI0LCA3MSwgOTQsIDEsIDI1NCwgMTcwLCA5NCwgMSwgMjUyLCAyOCwgCi0gICAgOTQsIDEsIDI0MiwgMjAxLCA5NCwgMSwgMjQ4LCAxODksIDk0LCAxLCAyNDEsIDIzOCwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIAotICAgIDIxMCwgOTcsIDk0LCAxLCAyNDEsIDE5NywgOTQsIDEsIDIxNiwgMjMwLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgCi0gICAgMjM0LCAyNTAsIDk0LCAxLCAyMzQsIDI1MCwgOTQsIDEsIDIzMywgOTQsIDk0LCAxLCA0MCwgMjMxLCA2NSwgOTQsIDEsIAotICAgIDIzMSwgNjUsIDk0LCAxLCA0MCwgMjI3LCAxOTQsIDk0LCAxLCAyMjcsIDE5NCwgOTQsIDEsIDIyMSwgMjQ5LCA5NCwgMSwgCi0gICAgMjUzLCAxNjIsIDk0LCAxLCA0MCwgMjI1LCAyMjEsIDk0LCAxLCAyMjUsIDIyMSwgOTQsIDEsIDQwLCAyMTUsIDE3OSwgOTQsIAotICAgIDEsIDIxNSwgMTc5LCA5NCwgMSwgMjI0LCAzOSwgOTQsIDEsIDIyMywgNjcsIDk0LCAxLCAyMjAsIDIwLCA5NCwgMSwgMjE3LCAKLSAgICAzOCwgOTQsIDI3LCAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIAotICAgIDIxMSwgNiwgNTIsIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDEsIDI0MywgNDEsIDk0LCAyMjQsIDE0MSwgMjQzLCAzOSwgMTAsIAotICAgIDU0LCA1MCwgMTAsIDUsIDIyMSwgMjQyLCAxMCwgMjQ0LCAzMCwgMjMxLCAxNTQsIDEwLCA1LCAyMjIsIDIzLCAxMCwgNSwgCi0gICAgMjIxLCAyNDUsIDI1NCwgMzcsIDI0OSwgMTA5LCAyMjIsIDE5MywgMjU0LCAzNywgMjQ0LCA0LCAyMjIsIDE5MywgMTAsIAotICAgIDIyMywgMTM0LCAyNTQsIDM3LCAyMjUsIDE4MywgMjMwLCAxOTMsIDUwLCAyNTQsIDM3LCAyMjUsIDE4MywgMjE2LCAyNDgsIAotICAgIDIxNiwgMTQ4LCA1MCwgMjU0LCAyMjEsIDUwLCAxMCwgMjQ5LCAyMTksIDEwLCAyNDgsIDE1MCwgMjIwLCAxMzcsIDEwLCAKLSAgICAyMjUsIDEzLCAyMTMsIDI0MSwgNTAsIDEwLCA1LCAyMzAsIDE3NCwgMTAsIDUsIDIyMiwgMywgMjU0LCAxNzIsIDIxMiwgNDUsIAotICAgIDEwLCA1LCAyNTQsIDE3MiwgMjUzLCAyMjEsIDEwLCA1LCAyMjMsIDE2NywgMjU0LCAxNzEsIDEwLCA1LCAyMjMsIDE3NSwgCi0gICAgMjU0LCAxNTIsIDI1NCwgMTA0LCAxMCwgNSwgMjE3LCA3MCwgMTAsIDQsIDEyNSwgMjE3LCA4MCwgMTAsIDQsIDEyNSwgMjcsIAotICAgIDExMiwgMiwgMjMzLCAxMDMsIDIsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMCwgMTA4LCAxMCwgNCwgMjQ0LCAxNjUsIDEwLCAKLSAgICA0LCAyNDgsIDE4NCwgMTAsIDQsIDIzNCwgMjA1LCAxMCwgMjIwLCAxNTAsIDEwLCAyMTUsIDIxMSwgNTksIDIyNCwgMTQxLCAKLSAgICA3OCwgMTAsIDIyNCwgMTMsIDc4LCAxMCwgMSwgMjM0LCAyMDksIDIxMSwgNDMsIDEwLCAxLCAyNDIsIDE5LCAxMCwgMSwgCi0gICAgMTEyLCAyLCAyMzEsIDIyOCwgNDgsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNDgsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDQ4LCAKLSAgICAxMCwgMSwgMTEyLCAyLCAyMDIsIDUxLCAxMCwgMSwgNzksIDIsIDIwMiwgNDgsIDEwLCAxLCAyNTQsIDE3MCwgMTAsIDEsIAotICAgIDI1MiwgNTQsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY0LCAxMCwgMSwgMjE3LCA3LCAxMCwgMSwgMjE2LCAxOTIsIDEwLCAxLCAKLSAgICAyMzUsIDEyMywgMTAsIDEsIDI0MiwgMzcsIDEwLCAxLCAyMzQsIDEyOSwgMTAsIDEsIDI0OCwgMTk1LCAxMCwgMSwgMjE2LCAKLSAgICAyMDIsIDEwLCAxLCAyMjMsIDk1LCAxMCwgMSwgMjEwLCAxMDgsIDEwLCAxLCAyMjEsIDE2NiwgMTAsIDEsIDIyMCwgNTksIAotICAgIDEwLCAxLCAyMjIsIDI2LCAxMCwgMSwgMjQ4LCAyMTYsIDEwLCAxLCAyMTcsIDgwLCAxMCwgMSwgMjEwLCAxMTEsIDEwLCAxLCAKLSAgICAyNTQsIDE5NiwgMTAsIDEsIDI0MiwgMjQ0LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCA3OSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAyMTcsIDQzLCAxMCwgMSwgMjQ0LCAxNDIsIDEwLCAxLCAyMjQsIDgxLCAxMCwgMSwgMjM0LCAyNTAsIDEwLCAxLCAyMzMsIAotICAgIDEwMiwgMTAsIDEsIDIzMSwgNzgsIDEwLCAxLCAyMjgsIDYyLCAxMCwgMSwgMjQxLCAyMTgsIDEwLCAxLCAyMTIsIDMwLCAxMCwgCi0gICAgMSwgMTEyLCAyMzEsIDE5MiwgMTAsIDEsIDIxMSwgNDMsIDEwLCAyNDQsIDE2MywgMTAsIDI0OCwgMTgyLCAxMCwgMjM0LCAKLSAgICAyMDMsIDEwLCAyNDQsIDE2NSwgMTAsIDI0OCwgMTg0LCAxMCwgMjM0LCAyMDUsIDEwLCAyMjAsIDkzLCAxMCwgMjE4LCA0NSwgCi0gICAgMTAsIDIzMSwgMjI2LCA0OCwgMTAsIDIwMiwgNDgsIDEwLCAyMDIsIDUxLCAxMCwgMjE4LCA2NSwgMjU0LCAxNzAsIDEwLCAKLSAgICAyMzUsIDE5MywgMjQ4LCAxODQsIDEwLCAxNjQsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMjA5LCAyNTUsIDEwLCAyNSwgNSwgCi0gICAgNCwgMjE0LCAxMDYsIDQ4LCAxMCwgMjUsIDUsIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgNTksIDUxLCAKLSAgICAxMCwgMjIzLCA0OSwgMjQ4LCAxODQsIDEwLCAyNDQsIDE2NiwgMiwgMTEzLCAyNDcsIDExOCwgMTAsIDIxMiwgMzIsIDIwMiwgCi0gICAgNTEsIDI1NCwgMzcsIDIxLCAyMTAsIDg2LCAyNTQsIDM3LCAyMSwgMTEwLCAyNTQsIDM3LCAyMSwgMTA1LCAyNTQsIDM3LCAKLSAgICAyMSwgMTU4LCAyNTQsIDM3LCAyMSwgMTYxLCAyNTQsIDM3LCAyMSwgMTg5LCAyNTQsIDM3LCAyMSwgMTk0LCAyNTQsIDM3LCAKLSAgICAyMSwgMTk4LCAyNTQsIDM3LCAyMSwgMTk1LCAyNTQsIDM3LCAyMSwgMjAwLCAxMCwgMjI1LCAxODIsIDUwLCAxMCwgMjQ4LCAKLSAgICA4MywgMjIwLCAxMzcsIDEwLCAyMTYsIDE0NiwgMjIwLCAxMzcsIDEwLCAyNDQsIDgxLCAyMjUsIDksIDIxOCwgMTU2LCAxMCwgCi0gICAgMSwgMjQ3LCAxMTksIDI1MiwgNTQsIDEwLCAxLCAyNDcsIDExOSwgMjI0LCA4MSwgMTAsIDEsIDIxOCwgMjMsIDI1NCwgMTcwLCAKLSAgICAxMCwgMSwgMTEyLCAyMTIsIDQ2LCAxMCwgMSwgMTEyLCAyLCAyMTIsIDMyLCAyMDIsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyMTIsIAotICAgIDMyLCAyMDIsIDUxLCAxMCwgMSwgMTI1LCAyNDIsIDE5LCAxMCwgMSwgMTI1LCAyMDIsIDI1NCwgMTcwLCAxMCwgMSwgMTI1LCAKLSAgICAyMDIsIDIxMiwgMzAsIDEwLCAxLCAxMDQsIDIsIDIwMiwgNDgsIDEwLCAxLCAxMjUsIDIwMiwgMjExLCA0MywgMTAsIDEsIAotICAgIDIxNSwgMTQ4LCAxMCwgMSwgMjE1LCAxNDYsIDEwLCAxLCAyNTIsIDY0LCAxMCwgMSwgMjE3LCA4LCAyLCAyMjIsIDIzMywgCi0gICAgMTAsIDEsIDIxNywgOCwgMiwgMTM0LCAxNzAsIDc3LCAyNDYsIDEwMywgMTAsIDEsIDIyNSwgMjA1LCAxMCwgMSwgMjE3LCA1LCAKLSAgICAxMCwgMSwgMjUyLCA1MiwgMTAsIDEsIDEyMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTEzLCAxNzAsIDY3LCA0OCwgCi0gICAgMTAsIDEsIDIyNywgMTUzLCAxMCwgMSwgMjQ2LCA0MywgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCAKLSAgICAyNiwgMTAsIDEsIDIxNywgMjQsIDEwLCAxLCAyNDgsIDEzMCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAyMjIsIDIzMywgMTAsIDEsIAotICAgIDI0OCwgMTk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDgsIDE5NiwgMiwgNTksIDI1MiwgNDMsIDIyLCA0LCAyMTcsIDgwLCAxMCwgCi0gICAgMSwgMjQ4LCAyMDEsIDEwLCAxLCAyNDgsIDEzMiwgMTAsIDEsIDI0NiwgNzAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMTM0LCAKLSAgICAxNzAsIDc3LCAyNDYsIDEwMywgMTAsIDEsIDI0OCwgMTk2LCAyLCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjIyLCAxNzEsIAotICAgIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIyMywgOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjIzLCAKLSAgICA5NiwgMiwgNTksIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgNTksIAotICAgIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMzUsIDEyMCwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgNTksIDI1MiwgNDMsIDIyLCAKLSAgICA1OSwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDEzNCwgMTcwLCAKLSAgICAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjIyLCAyNywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjIyLCAKLSAgICAyNywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCA4MSwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgMjMwLCAKLSAgICAxMDksIDUxLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCA1MSwgMTAsIDEsIDIxMywgMjQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIAotICAgIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDIyNSwgMjAzLCAxMCwgMSwgMjI0LCA4MiwgMiwgNTksIDQ4LCAxMCwgMSwgMjI0LCA4MiwgCi0gICAgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAxNzQsIDEwLCAxLCAyMTcsIDI1MCwgMjM0LCAyNTAsIDEwLCAxLCAyMzQsIAotICAgIDI1MSwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMzQsIDI1MSwgMiwgNTksIDQ4LCAxMCwgMSwgMjI5LCA3OSwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyNDMsIDEyMiwgMTAsIDEsIDI0MywgMTIzLCAyLCAyMjIsIDIzMywgMTAsIAotICAgIDEsIDIyOSwgMiwgMTAsIDEsIDI0MywgMTIzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyNDIsIDEwMSwgMTAsIDEsIDI0MywgCi0gICAgMTIzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCAxMzQsIAotICAgIDE3MCwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyLCA1OSwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOCwgMTAsIDEsIDIyMiwgCi0gICAgMjE0LCAxMCwgMSwgMjI4LCA2MywgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjgsIDYzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDEsIDEwLCAxLCAyMTcsIDI3LCAyLCA1OSwgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMiwgNzksIAotICAgIDQ4LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcxLCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAyLCAyMDIsIDQ4LCAxMCwgCi0gICAgMSwgMjE3LCA4LCAyMzEsIDE2NSwgMjQyLCAxNzEsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgCi0gICAgNzMsIDIyNiwgMjM0LCAxMCwgMSwgMjI2LCAyMzQsIDEwLCAxLCA3MCwgMTAsIDEsIDIxMCwgMjEyLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjEwLCAyMTIsIDEwLCAxLCAyMTIsIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTMsIDI1NSwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCAyMTEsIDQzLCAxMCwgMSwgNzksIDIsIDIxNywgNzcsIDEwLCAxLCA3OSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCAyLCA1OSwgNDgsIDEwLCAxLCA3NSwgMTAsIDEsIDc5LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCA3OSwgCi0gICAgMjUyLCAxMzIsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDIwMiwgNDgsIDEwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwLCAxLCAKLSAgICAyNTQsIDI0MywgMTAsIDQsIDEyNSwgMjcsIDIyMiwgMjcsIDIsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkyLCAxMCwgNCwgCi0gICAgMTI1LCAyNywgMjI0LCA4MiwgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAxMjUsIDY2LCA2NSwgMTcsIAotICAgIDEwLCA0LCAxMjUsIDIzMywgMTAzLCAyNTQsIDE3MCwgMTAsIDQsIDEyNSwgMjM1LCAxMjMsIDEwLCA0LCAxMjUsIDEzNCwgCi0gICAgMjQ3LCAxMTgsIDEwLCA0LCAxMjUsIDIyMSwgMTY2LCAxMCwgMjQ1LCAxNDMsIDY0LCAyNTMsIDE2NiwgMTAsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjIyLCAxMzgsIDI0NSwgMTc1LCAyNDEsIDE1NSwgMTAsIDQsIDEyNSwgMjIyLCAxODMsIDIxMCwgODYsIDEwLCA0LCAKLSAgICAxMjUsIDIxNCwgMTU5LCAyMjMsIDExNSwgMjEwLCA4NiwgMTAsIDQsIDEyNSwgMjQ3LCAxMTksIDI0MSwgMjM2LCA2NCwgCi0gICAgMjM0LCAxMjksIDEwLCA0LCAxMjUsIDY2LCA1MywgMTcsIDEwLCA0LCAxMjEsIDIyMSwgMTY2LCAxMCwgNCwgMTI1LCAyMzEsIAotICAgIDIyNywgMTAsIDQsIDIxMiwgMzAsIDEwLCA0LCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAKLSAgICAyMjgsIDYyLCAxMCwgMjI1LCA0MSwgNjQsIDIyMiwgMTMsIDEwLCAyNDUsIDE1MiwgMjUwLCAxNzUsIDEyMSwgMjE4LCAxMjksIAotICAgIDEwLCAyNDUsIDE1MiwgMjUwLCAxNzUsIDEyNSwgMjE4LCAxMjksIDEwLCAyMjIsIDE4MywgMTI1LCAyMTgsIDEzMCwgMiwgCi0gICAgMjQ0LCAxMDQsIDI1MCwgMTc0LCAxMCwgNCwgMTIxLCAyMzEsIDc4LCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTAsIDEsIDIyMywgOTYsIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDIxMCwgODYsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTAsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMDUsIDI0NSwgMjIsIAotICAgIDI1NCwgMzcsIDIxLCAxNTgsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxNjEsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxODksIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxOTQsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxOTgsIDI0NSwgMjIsIDI1NCwgMzcsIAotICAgIDIxLCAxOTUsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAxLCAyMjAsIDYwLCAyLCA1OSwgNTEsIDEwLCAxLCAKLSAgICAyNDgsIDIxNywgMiwgNTksIDUxLCAxMCwgMSwgMjQyLCAyNDUsIDIsIDU5LCA1MSwgMTAsIDUsIDIxOSwgMTU4LCAyNTQsIAotICAgIDEyNiwgMTAsIDUsIDIxOSwgMTU4LCAyMjQsIDIzNSwgMjMxLCA1OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCAyMzUsIDE5MywgCi0gICAgMjE0LCAxMDUsIDE4OCwgMjQ1LCAxNDMsIDY0LCAyMjYsIDE0LCAxODgsIDIxOCwgMTksIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMTg4LCAyMTgsIDY3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDE4OCwgMjE4LCAxOSwgMjQ5LCAyMjYsIDE4OCwgMjE4LCA2NywgCi0gICAgMjQ5LCAyMjYsIDE4OCwgMjAzLCAyNDksIDIyNiwgMTg4LCAyNDksIDIyNywgMjE5LCAxMDYsIDIzMywgNDYsIDE4OCwgMjQ5LCAKLSAgICAyMjcsIDIxOSwgMTA2LCAyMjIsIDI1MSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNywgMjE5LCAxMDYsIDIzMywgNDYsIDE4OCwgCi0gICAgMjE4LCA2NywgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMjIsIDI1MSwgMTg4LCAyNDksIDE4MCwgMTg4LCAyNDIsIDEsIDIyNiwgCi0gICAgMjUwLCAxODgsIDI0MiwgMSwgMjMxLCAzNiwgMTg4LCAyNDIsIDEsIDI1MywgMjE4LCAxODgsIDI1NSwgMjEsIDc4LCAxODgsIAotICAgIDEsIDI1NCwgMTc0LCAxODgsIDEsIDIxOCwgMjMsIDI1NCwgMTc0LCAxODgsIDEsIDI1MiwgMjUsIDE4OCwgMSwgMjQzLCAKLSAgICAxMTMsIDE4OCwgMSwgMjQzLCAxMTQsIDI0MywgOTEsIDE4OCwgMSwgMjQ4LCAxOTIsIDE4OCwgMSwgMjQ3LCAxMTksIDI0OCwgCi0gICAgMTkzLCAyMjIsIDIyOSwgMTg4LCAxLCAyNDEsIDIzOCwgMTg4LCAxLCAyMTIsIDMwLCAxODgsIDEsIDIxMCwgMTA4LCAxODgsIAotICAgIDEsIDI0MSwgMTk1LCAxODgsIDEsIDIxNiwgMjI2LCAxODgsIDEsIDIxNiwgMjI3LCAyNDMsIDkxLCAxODgsIDEsIDIxMCwgCi0gICAgMTk5LCAxODgsIDEsIDIxMCwgMjAwLCAyNDEsIDIzOCwgMTg4LCAxLCAyMzQsIDIyNSwgMTg4LCAxLCAyMzMsIDEwMSwgMTg4LCAKLSAgICAxLCAyMzAsIDE5MCwgMTg4LCAxLCAyMjcsIDE5NCwgMTg4LCAxLCAyMjAsIDE0MywgMTg4LCAxLCA0MCwgMjIwLCAxNDMsIAotICAgIDE4OCwgMSwgNzUsIDE4OCwgMSwgMjI1LCAyMjEsIDE4OCwgMSwgMjIzLCA0OSwgMjI1LCAyMjEsIDE4OCwgMSwgMjIyLCAyNCwgCi0gICAgMTg4LCAxLCAyMjQsIDc1LCAxODgsIDEsIDIyMiwgMjI5LCAxODgsIDEsIDIyMCwgMjAsIDE4OCwgMSwgMjE3LCAzNiwgMTg4LCAKLSAgICAxLCAyMjUsIDE2OSwgMjUyLCAxMiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQyLCAyNDIsIDE4OCwgMSwgMjI1LCAxNjksIDI0OCwgCi0gICAgMjAsIDE4OCwgMjI0LCAxNTEsIDQ4LCAxODgsIDIyNCwgMTUxLCA1MSwgMTg4LCAyMjQsIDE1MSwgMjQ2LCAxMTcsIDE4OCwgCi0gICAgMjEwLCAxNywgNDgsIDE4OCwgMjEwLCAxNywgNTEsIDE4OCwgMjEwLCAxNywgMjQ2LCAxMTcsIDE4OCwgMjIzLCAxMzEsIDQ4LCAKLSAgICAxODgsIDIyMywgMTMxLCA1MSwgMTg4LCAyNDYsIDExOCwgMjEwLCAyNCwgMjQxLCA0NCwgMTg4LCAyNDYsIDExOCwgMjEwLCAKLSAgICAyNCwgMjU0LCAxMDUsIDE4OCwgMjQxLCAyNDEsIDQ4LCAxODgsIDI0MSwgMjQxLCA1MSwgMTg4LCAyNDEsIDI0MCwgMjQ2LCAKLSAgICAxMTcsIDE4OCwgMjQ1LCA3OSwgNDgsIDE4OCwgMjQ1LCA3OSwgNTEsIDE4OCwgMjIyLCAxMDcsIDE4OCwgMjQ0LCAxMzYsIAotICAgIDI0NywgMTIwLCAxODgsIDIyMywgMjQ4LCAxODgsIDIyMiwgMTM0LCAxODgsIDExMywgNjcsIDE3MCwgNDgsIDE4OCwgMTEzLCAKLSAgICA2NywgMTcwLCA1MSwgMTg4LCAxMzQsIDE3MCwgNDgsIDE4OCwgMTM0LCAxNzAsIDUxLCAxODgsIDIyNiwgMjQ4LCAyMzIsIAotICAgIDIxNCwgNDgsIDE4OCwgMjI2LCAyNDgsIDIzMiwgMjE0LCA1MSwgMTg4LCAyMzAsIDU2LCAxODgsIDI1MiwgMTMxLCAxODgsIAotICAgIDEsIDIxOSwgNDksIDIxMCwgODAsIDE4OCwgMSwgMjE5LCA0OSwgMjM0LCAxMjIsIDE4OCwgMSwgMjE5LCA0OSwgMjQ0LCAKLSAgICAxNTQsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjQwLCAyNTAsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNTksIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgCi0gICAgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgMjUyLCA0MywgMjIsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDExMywgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMTIyLCAyLCAKLSAgICAxMTMsIDE3MCwgNDgsIDEwLCAxLCAxMjIsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDI0OCwgCi0gICAgMTk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDI1MiwgNDMsIDIyLCA0LCAyMTcsIDgwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIAotICAgIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA5MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAKLSAgICAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAKLSAgICAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAKLSAgICA0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgMTM0LCAxNzAsIDIyNSwgCi0gICAgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjM0LCAxNzUsIDIsIDU5LCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgNjYsIAotICAgIDIsIDU5LCA0OCwgMTAsIDEsIDY2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAKLSAgICAyMjgsIDYzLCAyLCA0LCAyMTcsIDgwLCAxMCwgMSwgMjI4LCA2MywgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgMiwgMTMwLCAxMCwgMSwgMjIzLCA5NiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIAotICAgIDIwMiwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgMTAsIDEsIDEyMiwgMiwgNCwgCi0gICAgMTAsIDEsIDIxNywgODEsIDUxLCAxMCwgMSwgMTIyLCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIAotICAgIDEwLCAxLCAyMjEsIDE2NywgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAxMCwgMSwgMjIzLCA5NiwgCi0gICAgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAxMCwgMSwgMTIyLCAyLCA0LCAxMCwgMSwgMjE3LCAKLSAgICA4MSwgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyNDUsIAotICAgIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDExMywgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjQ0LCAxMSwgNTEsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAxMzQsIDQ4LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIAotICAgIDc5LCAyNTIsIDEzMywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAxMjIsIDIsIDI0NSwgMjIsIAotICAgIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjQ0LCAKLSAgICAxMSwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgMjM0LCAyNTEsIDIsIDExMywgCi0gICAgMTcwLCA0OCwgMjE2LCAyMDUsIDEsIDI0MiwgNDYsIDIxNiwgMjA1LCAxLCAyMjAsIDY4LCAyMTYsIDIwNSwgMSwgMjI4LCAKLSAgICA2MSwgMjE2LCAyMDUsIDEsIDIyMywgMTg0LCAyMTYsIDIwNSwgMSwgMjUyLCAxODksIDIxNiwgMjA1LCAxLCAyMzIsIDI1MSwgCi0gICAgMjE2LCAyMDUsIDEsIDIzNSwgOCwgMjE2LCAyMDUsIDEsIDI1NCwgMTU5LCAyMTYsIDIwNSwgMSwgMjE0LCAyNSwgMjE2LCAKLSAgICAyMDUsIDEsIDIzMSwgNzcsIDIxNiwgMjA1LCAxLCAyNDQsIDE5NCwgMjE2LCAyMDUsIDEsIDI0OCwgMjMsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDUsIDEsIDIzMywgMTMxLCAyMTYsIDIwNSwgMSwgMjQzLCAxMzEsIDIxNiwgMjA1LCAxLCAKLSAgICAyNDIsIDE3NywgMjE2LCAyMDUsIDEsIDIyMSwgMTY1LCAyMTYsIDIwNSwgMSwgMjQ4LCAxNDgsIDIxNiwgMjA1LCAxLCAyMTAsIAotICAgIDEwMCwgMjE2LCAyMDUsIDEsIDIxNywgMzcsIDIxNiwgMjA1LCAxLCAyMTEsIDEwMywgMjE2LCAyMDUsIDEsIDIyNSwgMjMzLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCAxMjgsIDIxNiwgMjA1LCAxLCAyNTAsIDEzNCwgMjE2LCAyMDUsIDEsIDIxNSwgMTU1LCAyMTYsIAotICAgIDIwNSwgMSwgMjQxLCAxODgsIDIxNiwgMjA1LCAxLCAyMzQsIDEzMSwgMjE2LCAyMDUsIDEsIDIxNiwgMjA2LCAyMTYsIDIwNSwgCi0gICAgMSwgMjEwLCAxMTUsIDIxNiwgMjA1LCAxLCAyMjAsIDU4LCAyMTYsIDIwNSwgMSwgMjIyLCAzMCwgMjE2LCAyMDUsIDEsIAotICAgIDI0OCwgMjE5LCAyMTYsIDIwNSwgMSwgMTExLCAyMTYsIDIwNSwgMSwgMjEwLCAyMywgMjE2LCAyMDUsIDEsIDI1NCwgMTkzLCAKLSAgICAyMTYsIDIwNSwgMSwgMjQyLCAyNDMsIDIxNiwgMjA1LCAxLCAyMjQsIDg1LCAyMTYsIDIwNSwgMSwgMjEyLCA2MywgMjE2LCAKLSAgICAyMDUsIDI1NSwgMjIsIDIxNiwgMjA1LCAyNTUsIDM4LCAyMTYsIDIwNSwgMjQwLCAxMTQsIDIxNiwgMjA1LCAyNDUsIDIwOCwgCi0gICAgMjE2LCAyMDUsIDIxNCwgMjIyLCAyMTYsIDIwNSwgMjI2LCAxODIsIDIxNiwgMjA1LCAyNDUsIDIxNiwgMjE2LCAyMDUsIAotICAgIDI0NSwgMTYsIDIxNiwgMjA1LCAyMjYsIDI0NywgMjE2LCAyMDUsIDIyNiwgMjU1LCAyMTYsIDIwNSwgMjE4LCA0NSwgMjE2LCAKLSAgICAyMDUsIDEsIDIyOSwgMjI1LCAyMjgsIDEzNywgMjEsIDIxMCwgODYsIDIyOCwgMTM3LCAyMSwgMTEwLCAyMjgsIDEzNywgMjEsIAotICAgIDEwNSwgMjI4LCAxMzcsIDIxLCAxNTgsIDIyOCwgMTM3LCAyMSwgMTYxLCAyMjgsIDEzNywgMjEsIDE4OSwgMjI4LCAxMzcsIAotICAgIDIxLCAxOTQsIDIyOCwgMTM3LCAyMSwgMTk4LCAyMjgsIDEzNywgMjEsIDE5NSwgMjI4LCAxMzcsIDIxLCAyMDAsIDIyOCwgCi0gICAgMTM3LCAxLCA2MSwgMjI4LCAxMzcsIDEsIDI0NSwgMjA5LCAyMjgsIDEzNywgMSwgNzMsIDIyOCwgMTM3LCAxLCA3NSwgMjI4LCAKLSAgICAxMzcsIDEsIDcwLCAyMjgsIDEzNywgMSwgMjI2LCAxODMsIDIyOCwgMTM3LCAxLCA3NiwgMjI4LCAxMzcsIDEsIDI0OCwgCi0gICAgMjA5LCAyMjgsIDEzNywgMSwgMjMwLCAyNSwgMjI4LCAxMzcsIDEsIDI1MiwgMTkxLCAyMjgsIDEzNywgMSwgMTkwLCAyMjgsIAotICAgIDEzNywgMSwgMjE3LCAxMDUsIDIyOCwgMTM3LCAxLCAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDI1MCwgMTU3LCAyMjgsIDEzNywgCi0gICAgMSwgMjQ4LCAyMjEsIDIyOCwgMTM3LCAxLCAyMDUsIDIyOCwgMTM3LCAxLCAyMjIsIDE3OSwgMjI4LCAxMzcsIDEsIDIwNiwgCi0gICAgMjI4LCAxMzcsIDEsIDI0MywgNzksIDIyOCwgMTM3LCAxLCAyNDQsIDE5NiwgMjI4LCAxMzcsIDEsIDE3NiwgMjI4LCAxMzcsIAotICAgIDEsIDIzMywgMTM1LCAyMjgsIDEzNywgMSwgMjI5LCAyMjksIDIxMSwgMjIzLCAyMjgsIDEzNywgMSwgMTg0LCAyMjgsIDEzNywgCi0gICAgMSwgMjI3LCAxNjUsIDIyOCwgMTM3LCAxLCAxOTcsIDIyOCwgMTM3LCAxLCAxNjIsIDIyOCwgMTM3LCAxLCAyMTIsIDY1LCAKLSAgICAyMjgsIDEzNywgMSwgMTkxLCAyMjgsIDEzNywgMSwgMjI3LCAxNjYsIDIxMSwgMjIzLCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgCi0gICAgMjM1LCAxNDEsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAyNTAsIDE1NywgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDIwNSwgMjI4LCAKLSAgICAxMzcsIDM4LCAyMTksIDI1MSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDIxOSwgMjUxLCAxMjEsIDIxNiwgMzAsIAotICAgIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDIyMiwgMjI4LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjQ4LCAzOCwgCi0gICAgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDEyNSwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDEyMSwgMjE2LCAKLSAgICAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDIyMiwgMjI4LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDIyOSwgMTkzLCA3OCwgCi0gICAgMjI4LCAxMzcsIDM4LCA1MiwgNTksIDQ4LCAyMjgsIDEzNywgMTI1LCAxMzgsIDI1NCwgNTcsIDIyOCwgMTM3LCAxMjEsIAotICAgIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDE2LCAyMjYsIDE4NCwgMjQ4LCA1MCwgMjI4LCAxMzcsIDE2LCAyNDMsIDc4LCAKLSAgICAyMjgsIDEzNywgMjQ5LCAyMTksIDIyOCwgMTM3LCAyNDUsIDMxLCA3OCwgMjI4LCAxMzcsIDIzMywgMTA4LCAyMjEsIDI1MiwgCi0gICAgMSwgMjU0LCAxNzYsIDIyMSwgMjUyLCAxLCAyNTEsIDIyOCwgMjIxLCAyNTIsIDEsIDI0MywgMTEyLCAyMjEsIDI1MiwgMSwgCi0gICAgMjQ4LCAxOTQsIDIyMSwgMjUyLCAxLCAyMzUsIDE1MiwgMjIxLCAyNTIsIDEsIDI1MiwgMTg5LCAyMjEsIDI1MiwgMSwgMjEwLCAKLSAgICA4OSwgMjIxLCAyNTIsIDEsIDIzNSwgMTYwLCAyMjEsIDI1MiwgMSwgMjE2LCA2NywgMjIxLCAyNTIsIDEsIDIxMCwgMTgyLCAKLSAgICAyMjEsIDI1MiwgMSwgMjM1LCA5LCAyMjEsIDI1MiwgMSwgMjMzLCAxMjgsIDIyMSwgMjUyLCAxLCAyMzAsIDE5MCwgMjIxLCAKLSAgICAyNTIsIDEsIDIyNywgMTk0LCAyMjEsIDI1MiwgMSwgMjE5LCAxNTYsIDIyMSwgMjUyLCAxLCAyMzUsIDI1NSwgMjIxLCAyNTIsIAotICAgIDEsIDI0NCwgMTIxLCAyMjEsIDI1MiwgMSwgMjE1LCAxODEsIDIyMSwgMjUyLCAxLCAyMjQsIDEwLCAyMjEsIDI1MiwgMSwgCi0gICAgMjIyLCAyMjksIDIyMSwgMjUyLCAxLCAyMjAsIDg1LCAyMjEsIDI1MiwgMSwgMjE3LCAxMDAsIDIyMSwgMjUyLCAxNjQsIAotICAgIDIzNSwgMjU1LCAyMjEsIDI1MiwgMTY0LCAyMzUsIDI1NCwgMjIxLCAyNTIsIDE2NCwgMjI2LCAyNDMsIDIyMSwgMjUyLCAKLSAgICAxNjQsIDI0OCwgMjA3LCAyMjEsIDI1MiwgNTgsIDEsIDI0NSwgMTA1LCAyMTAsIDE4MiwgMjIxLCAyNTIsIDE2NCwgMjQ1LCAKLSAgICAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzUsIDIyMSwgMjUyLCAyNSwgNSwgNzUsIDIyMSwgMjUyLCAKLSAgICAyNSwgNSwgMjI2LCAxMTgsIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgMjI2LCAxMTgsIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNjEsIDIyMSwgCi0gICAgMjUyLCAyNSwgNSwgNjEsIDIyMSwgMjUyLCA1OCwgMSwgMjE5LCAyNTEsIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDIxOSwgMjUxLCAKLSAgICA2MSwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDcwLCAyMjEsIDI1MiwgMjUsIDUsIDcwLCAyMjEsIDI1MiwgNTgsIDEsIDczLCAKLSAgICAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgNzYsIDIyMSwgCi0gICAgMjUyLCAyNSwgNSwgMjE4LCA0NSwgMjIxLCAyNTIsIDE2NCwgMjI5LCA5MiwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMjksIDkyLCAKLSAgICAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMjE4LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMTE0LCAyMjEsIDI1MiwgCi0gICAgMjI0LCAxNDEsIDI1MiwgMTE0LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1MywgMjAxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIAotICAgIDIyMCwgOCwgMjIxLCAyNTIsIDI1NSwgMjEsIDc4LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIzMSwgNjgsIDIyNCwgNDUsIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjEwLCAzMSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMjQsIDQ1LCAyMjEsIDI1MiwgMjI0LCAxNDEsIAotICAgIDIxMCwgMTE0LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIxNSwgOTAsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCA5LCAyMjEsIAotICAgIDI1MiwgMjI0LCAxNDEsIDIxOSwgNTMsIDIzMSwgMTQ1LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMTAwLCAyMzEsIDE4MiwgCi0gICAgMSwgMjQyLCAyNCwgMjMxLCAxODIsIDEsIDI1NSwgMjUsIDIzMSwgMTgyLCAxLCAyNTQsIDIxNiwgMjMxLCAxODIsIDEsIAotICAgIDI1NCwgMjU1LCAyMzEsIDE4MiwgMSwgMjU0LCAyMDksIDIzMSwgMTgyLCAxLCAyMTQsIDEyNCwgMjMxLCAxODIsIDEsIDI1MywgCi0gICAgMTYwLCAyMzEsIDE4MiwgMSwgMjM1LCAxNjAsIDIzMSwgMTgyLCAxLCAyNTMsIDE5OCwgMjMxLCAxODIsIDEsIDI1NCwgMTgxLCAKLSAgICAyMzEsIDE4MiwgMSwgMjU0LCAxODYsIDIzMSwgMTgyLCAxLCAyNTQsIDE3OCwgMjMxLCAxODIsIDEsIDI1NCwgMTM2LCAyMzEsIAotICAgIDE4MiwgMSwgMjU0LCAxMjMsIDIzMSwgMTgyLCAxLCAyNTMsIDIzNywgMjMxLCAxODIsIDEsIDIzNSwgMjU1LCAyMzEsIDE4MiwgCi0gICAgMSwgMjU0LCA3MiwgMjMxLCAxODIsIDEsIDI1MywgMjA4LCAyMzEsIDE4MiwgMSwgMjU0LCA0NSwgMjMxLCAxODIsIDEsIAotICAgIDI1NCwgNDEsIDIzMSwgMTgyLCAxLCAyNTMsIDIzMSwgMjMxLCAxODIsIDEsIDI1MywgMjA2LCAyMzEsIDE4MiwgMSwgMjQ2LCAKLSAgICA1NSwgMjMxLCAxODIsIDEsIDIzNSwgMiwgMjMxLCAxODIsIDEsIDI1NCwgMTk2LCAyMzEsIDE4MiwgMjU0LCAyMjIsIDc4LCAKLSAgICAyMzEsIDE4MiwgMjEzLCAxMzYsIDc4LCAyMzEsIDE4MiwgMjQzLCA1MywgNzgsIDIzMSwgMTgyLCAyMjQsIDE0MCwgMTAsIDEsIAotICAgIDI1MiwgNTUsIDIsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDE1MSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCA4MSwgCi0gICAgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgCi0gICAgMSwgMjI0LCA4MiwgMiwgNTksIDUxLCAxMCwgMSwgMjMzLCAxMDMsIDIsIDUyLCAxMzAsIDEwLCAxLCA2NiwgMiwgMTM0LCAKLSAgICAxNzAsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgMTcwLCAyNTIsIDQzLCAyMiwgMjAyLCA0OCwgMTAsIDEsIDc5LCAyLCAxMTMsIAotICAgIDE3MCwgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDIzMiwgMTIzLCAxMCwgMSwgMjEyLCAzMSwgMiwgCi0gICAgNTksIDIxMSwgMjMxLCAxMCwgMSwgMjIyLCAyMDEsIDIxMSwgNDMsIDEwLCAyNDksIDk5LCAyNDQsIDE2NSwgMTAsIDI0OSwgCi0gICAgOTksIDI0OCwgMTg0LCAxMCwgMjQ5LCA5OSwgMjM0LCAyMDUsIDEwLCAyNDksIDk5LCAyNDQsIDE2MywgMTAsIDI0OSwgOTksIAotICAgIDI0OCwgMTgyLCAxMCwgMjQ5LCA5OSwgMjM0LCAyMDMsIDEwLCAxMzgsIDEyMywgNTksIDQ4LCAxMCwgMTM4LCAxMTMsIDE3MCwgCi0gICAgNDgsIDEwLCAxMzgsIDIzMiwgMTI0LCA0OCwgMTAsIDEzOCwgMTIzLCA1OSwgNTEsIDEwLCAxMzgsIDExMywgMTcwLCA1MSwgCi0gICAgMTAsIDEzOCwgMjMyLCAxMjQsIDUxLCAxMCwgMjA0LCAyNDQsIDE2MywgMTAsIDIwNCwgMjQ4LCAxODIsIDEwLCAyMDQsIAotICAgIDIzNCwgMjAzLCAxMCwgNCwgMTI1LCAyMTIsIDMwLCAxMCwgMjQ0LCAxNjYsIDIsIDIyMiwgMjMzLCAxMCwgMjQ0LCAxNjYsIAotICAgIDIsIDU5LCA0OCwgMTAsIDIzNCwgMjA2LCAyLCA1OSwgNTEsIDEwLCA0MywgMjUzLCAyNTAsIDQ4LCAxMCwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDQzLCAyNTMsIDI1MCwgNTEsIDEwLCA0NCwgMjUzLCAyNTAsIDUxLCAxMCwgNTIsIDQ0LCAyNTMsIAotICAgIDI1MCwgNDgsIDEwLCA1MiwgNDQsIDI1MywgMjUwLCA3NywgMiwgMjQ3LCAxMjAsIDEwLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAKLSAgICAyNDcsIDEyMCwgMTAsIDI0OCwgMTg1LCAyLCAyNDcsIDEyMCwgODQsIDUsIDIzNSwgMTkzLCAyNTAsIDI1NSwgODQsIDUsIAotICAgIDI1MCwgMjU1LCA4NCwgNSwgMjU0LCA3NSwgODQsIDUsIDIxMywgMTQ3LCA4NCwgMSwgMjE5LCAyNTEsIDYxLCA4NCwgMSwgCi0gICAgNjEsIDg0LCAxLCAyNTUsIDczLCA4NCwgMSwgNzMsIDg0LCAxLCAyMzYsIDMzLCA4NCwgMSwgNzAsIDg0LCAxLCAyMTQsIAotICAgIDExOCwgODQsIDEsIDE0OSwgMTUzLCA4NCwgMSwgMTQ5LCAxNTYsIDg0LCAxLCAyNTEsIDIsIDc1LCA4NCwgMSwgMjE5LCAKLSAgICAyNTEsIDc1LCA4NCwgMSwgNzUsIDg0LCAxLCAyNTQsIDIwMSwgODQsIDEsIDI1MSwgMiwgNzYsIDg0LCAxLCAyMTksIDI1MSwgCi0gICAgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1MywgMTkyLCA4NCwgMSwgMTc2LCA4NCwgMSwgMjM0LCAxMzIsIDg0LCAxLCAyNDMsIAotICAgIDEzNSwgODQsIDEsIDI0MiwgMjQ5LCA4NCwgMSwgMjI5LCA3NywgODQsIDEsIDI1MSwgMzMsIDg0LCAxLCAyNTAsIDE1NywgCi0gICAgODQsIDEsIDIzNSwgMTQxLCA4NCwgMSwgMjM1LCAxMTQsIDg0LCAxLCAyMjcsIDE2NSwgODQsIDEsIDIxNSwgMTU2LCA4NCwgCi0gICAgMSwgMjE1LCAxNDQsIDg0LCAxLCAyNDgsIDEzNSwgODQsIDEsIDI0OCwgMTE5LCA4NCwgMSwgMjI4LCAxMTAsIDg0LCAxLCAKLSAgICAyMTcsIDEwNSwgODQsIDEsIDIxNiwgMjA4LCA4NCwgMSwgMjQ4LCAyMjEsIDg0LCAxLCAyNDgsIDI1LCA4NCwgMSwgMTk3LCAKLSAgICA4NCwgMSwgMjI4LCA5MiwgODQsIDEsIDE5MCwgODQsIDEsIDIyNSwgMTQ3LCA4NCwgMSwgMjUyLCAxOTEsIDg0LCAxLCAyNTIsIAotICAgIDE4LCA4NCwgMSwgMTg0LCA4NCwgMSwgMTkxLCA4NCwgMSwgMjA1LCA4NCwgMSwgMjIyLCAxNzksIDg0LCAxLCAyMzMsIDEzNSwgCi0gICAgODQsIDEsIDIzMiwgMTg0LCA4NCwgMSwgMjMyLCAxNzUsIDg0LCAxLCAyMTQsIDI3LCA4NCwgMSwgMjIwLCAxMDIsIDg0LCAxLCAKLSAgICAyMTgsIDIyMywgODQsIDEsIDIwNiwgODQsIDEsIDE2MiwgODQsIDI1LCA1LCAyMjYsIDIzNCwgODQsIDI1LCA1LCAyMjYsIAotICAgIDE4MSwgODQsIDUsIDIyNywgMjA1LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCAyNSwgNSwgMjU1LCA3MywgODQsIDI1LCA1LCA3MywgCi0gICAgODQsIDI1LCA1LCAyMzYsIDMzLCA4NCwgMjUsIDUsIDcwLCA4NCwgMjUsIDUsIDIxNCwgMTE4LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMTUzLCA4NCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDg0LCAyNSwgNSwgMjUxLCAyLCA3NSwgODQsIDI1LCA1LCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAyNSwgNSwgNzUsIDg0LCAyNSwgNSwgMjU0LCAyMDEsIDg0LCAyNSwgNSwgMjUxLCAyLCA3NiwgODQsIAotICAgIDI1LCA1LCAyMTksIDI1MSwgNzYsIDg0LCAyNSwgNSwgNzYsIDg0LCAyNSwgNSwgMjUzLCAxOTIsIDg0LCA1LCAyMTMsIDE1MiwgCi0gICAgODQsIDI1LCA1LCAyMjQsIDE4NSwgNzUsIDg0LCAyNSwgNSwgMjUzLCAxNzEsIDg0LCAyMjYsIDIwNCwgODQsIDIxOCwgMTExLCAKLSAgICA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTExLCA1LCAyNTQsIDc3LCA4NCwgMjQyLCAxMzcsIDI1NSwgMTQsIDg0LCAyNTUsIDMsIAotICAgIDI1NSwgMTQsIDg0LCAyNSwgNSwgMjUxLCAyLCAxOTksIDc1LCA4NCwgMjUsIDUsIDIxNCwgMjE0LCA4NCwgMjUsIDUsIDIxNCwgCi0gICAgMTE3LCA4NCwgMSwgMjI0LCA4OCwgODQsIDEsIDIzNCwgMTE1LCA4NCwgMSwgMjQyLCAyMjYsIDg0LCAxLCAyMTAsIDExNiwgCi0gICAgODQsIDEsIDI0OCwgMTI0LCA4NCwgMSwgMjIzLCAzOSwgODQsIDEsIDI0NCwgMTk2LCA4NCwgMSwgMjEwLCAxNjgsIDg0LCAxLCAKLSAgICAxNDksIDIyMiwgMTgwLCA4NCwgMSwgMTQ5LCAyMzIsIDE4NSwgODQsIDI1LCA1LCAxNDksIDE1NiwgODQsIDI1LCA1LCAxNDksIAotICAgIDIzMiwgMTg1LCA4NCwgMjQ4LCAxNzgsIDg0LCA1MiwgMjQ4LCAxNzgsIDg0LCAyMSwgMjEwLCA4NiwgODQsIDIxLCAxMTAsIAotICAgIDg0LCAyMSwgMTA1LCA4NCwgMjEsIDE1OCwgODQsIDIxLCAxNjEsIDg0LCAyMSwgMTg5LCA4NCwgMjEsIDE5NCwgODQsIDIxLCAKLSAgICAxOTgsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDIwMCwgODQsIDI1NSwgMjEsIDUwLCA4NCwgNSwgMTI1LCAyMTksIDE3LCAyNDcsIAotICAgIDEyMCwgODQsIDEsIDI1MSwgMiwgNjEsIDg0LCAxLCAyMjYsIDIzNCwgODQsIDEsIDIyNiwgMTgxLCA4NCwgMSwgMjUzLCAKLSAgICAxNzEsIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkxLCAKLSAgICA4NCwgMSwgMjQzLCAyOSwgODQsIDEsIDIzNSwgOTYsIDg0LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDg0LCAxLCAyNDgsIAotICAgIDEyNSwgODQsIDEsIDI1MiwgMTExLCAxNDYsIDUsIDI1MCwgMjU1LCAxNDYsIDUsIDI1NCwgNzUsIDE0NiwgNSwgMjEzLCAKLSAgICAxNDcsIDE0NiwgMSwgNjEsIDE0NiwgMSwgMjU1LCA3MywgMTQ2LCAxLCA3MywgMTQ2LCAxLCAyMzYsIDMzLCAxNDYsIDEsIAotICAgIDcwLCAxNDYsIDEsIDIxNCwgMTE4LCAxNDYsIDEsIDE0OSwgMTUzLCAxNDYsIDEsIDE0OSwgMTU2LCAxNDYsIDEsIDc1LCAKLSAgICAxNDYsIDEsIDI1NCwgMjAxLCAxNDYsIDEsIDc2LCAxNDYsIDEsIDI1MywgMTkyLCAxNDYsIDEsIDE3NiwgMTQ2LCAxLCAyMzQsIAotICAgIDEzMiwgMTQ2LCAxLCAyNDMsIDEzNSwgMTQ2LCAxLCAyNDIsIDI0OSwgMTQ2LCAxLCAyMjksIDc3LCAxNDYsIDEsIDI1MSwgCi0gICAgMzMsIDE0NiwgMSwgMjUwLCAxNTcsIDE0NiwgMSwgMjM1LCAxNDEsIDE0NiwgMSwgMjM1LCAxMTQsIDE0NiwgMSwgMjI3LCAKLSAgICAxNjUsIDE0NiwgMSwgMjE1LCAxNTYsIDE0NiwgMSwgMjE1LCAxNDQsIDE0NiwgMSwgMjQ4LCAxMzUsIDE0NiwgMSwgMjQ4LCAKLSAgICAxMTksIDE0NiwgMSwgMjI4LCAxMTAsIDE0NiwgMSwgMjE3LCAxMDUsIDE0NiwgMSwgMjE2LCAyMDgsIDE0NiwgMSwgMjQ4LCAKLSAgICAyMjEsIDE0NiwgMSwgMjQ4LCAyNSwgMTQ2LCAxLCAxOTcsIDE0NiwgMSwgMTkwLCAxNDYsIDEsIDIyNSwgMTQ3LCAxNDYsIDEsIAotICAgIDI1MiwgMTkxLCAxNDYsIDEsIDI1MiwgMTgsIDE0NiwgMSwgMTg0LCAxNDYsIDEsIDE5MSwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgCi0gICAgMjMzLCAxMzUsIDE0NiwgMSwgMjIwLCAxMDIsIDE0NiwgMSwgMjE4LCAyMjMsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgCi0gICAgMTQ2LCA1LCAyMjcsIDIwNSwgMTQ2LCA1LCAyNTMsIDE3NSwgMTQ2LCAyNSwgNSwgMjU1LCA3MywgMTQ2LCAyNSwgNSwgNzMsIAotICAgIDE0NiwgMjUsIDUsIDIzNiwgMzMsIDE0NiwgMjUsIDUsIDcwLCAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgCi0gICAgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE0NiwgMjUsIDUsIDc1LCAxNDYsIDI1LCA1LCAyNTQsIAotICAgIDIwMSwgMTQ2LCAyNSwgNSwgNzYsIDE0NiwgMjUsIDUsIDI1MywgMTkyLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgCi0gICAgMTI0LCAyMTcsIDEwNSwgMTQ2LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE0NiwgMSwgMjIyLCAxNzksIDE0NiwgMSwgMjIzLCAKLSAgICAzOSwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIDIyMiwgMTgwLCAxNDYsIDEsIDE0OSwgMjMyLCAxODUsIDE0NiwgCi0gICAgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAKLSAgICAxMTAsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE4OSwgMTQ2LCAyMSwgCi0gICAgMTk0LCAxNDYsIDIxLCAxOTgsIDE0NiwgMjEsIDE5NSwgMTQ2LCAyMSwgMjAwLCAxNDYsIDEsIDIyMywgMTg4LCAyLCAyMzAsIAotICAgIDIyNCwgMjQ3LCAyNTQsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMiwgMTA4LCAyNDcsIDI1NCwgMTQ2LCAyMjIsIDExOCwgCi0gICAgNzgsIDE0NiwgMjIyLCAxMTgsIDUwLCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxMTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAKLSAgICAxOTcsIDEwNSwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTU4LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNjEsIDE0NiwgCi0gICAgMjQ5LCA5OCwgMjI3LCAxOTcsIDEyMywgMjMzLCAxNiwgMjE2LCAyMDEsIDIxNiwgMTk2LCAyNDgsIDQ4LCAxNDYsIDI0OSwgCi0gICAgOTgsIDI0OCwgNDksIDIxOSwgMTE5LCAxNDYsIDIzNSwgMTYxLCAxNDYsIDI0MywgMTAzLCA3OCwgMTgzLCA1LCAyNTQsIAotICAgIDI1NCwgMjUxLCAyNDMsIDE4MywgNSwgMjUxLCAyNDMsIDE4MywgNSwgMjEzLCAxNDcsIDE4MywgMSwgNjEsIDE4MywgMSwgCi0gICAgMjU1LCA3MywgMTgzLCAxLCA3MywgMTgzLCAxLCAyMzYsIDMzLCAxODMsIDEsIDcwLCAxODMsIDEsIDIxNCwgMTE4LCAxODMsIAotICAgIDEsIDI0NSwgMjA5LCAxODMsIDEsIDI1NCwgMjAxLCAxODMsIDEsIDIyNiwgMTgzLCAxODMsIDEsIDI1MywgMTkyLCAxODMsIAotICAgIDEsIDE3NiwgMTgzLCAxLCAyMzQsIDEzMiwgMTgzLCAxLCAyNDMsIDEzNSwgMTgzLCAxLCAyNDIsIDI0OSwgMTgzLCAxLCAKLSAgICAyMjksIDc3LCAxODMsIDEsIDI1MSwgMzMsIDE4MywgMSwgMjUwLCAxNTcsIDE4MywgMSwgMjM1LCAxNDEsIDE4MywgMSwgCi0gICAgMjM1LCAxMTQsIDE4MywgMSwgMjI3LCAxNjUsIDE4MywgMSwgMjE1LCAxNTYsIDE4MywgMSwgMjE1LCAxNDQsIDE4MywgMSwgCi0gICAgMjQ4LCAxMzUsIDE4MywgMSwgMjQ4LCAxMTksIDE4MywgMSwgMjI4LCAxMTAsIDE4MywgMSwgMjE3LCAxMDUsIDE4MywgMSwgCi0gICAgMjE2LCAyMDgsIDE4MywgMSwgMjQ4LCAyMjEsIDE4MywgMSwgMjQ4LCAyNSwgMTgzLCAxLCAxOTcsIDE4MywgMSwgMTkwLCAKLSAgICAxODMsIDEsIDIyNSwgMTQ3LCAxODMsIDEsIDI1MiwgMTkxLCAxODMsIDEsIDI1MiwgMTgsIDE4MywgMSwgMTg0LCAxODMsIDEsIAotICAgIDE5MSwgMTgzLCAxLCAyMDUsIDE4MywgMSwgMjMzLCAxMzUsIDE4MywgMSwgMjMyLCAxODQsIDE4MywgMSwgMjE0LCAyNywgCi0gICAgMTgzLCAxLCAyMjAsIDEwMiwgMTgzLCAxLCAyMDYsIDE4MywgMSwgMTYyLCAxODMsIDUsIDIyNywgMjA1LCAxODMsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxODMsIDI1LCA1LCA3MywgMTgzLCAyNSwgNSwgMjM2LCAzMywgMTgzLCAyNSwgNSwgNzAsIDE4MywgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxODMsIDI1LCA1LCAyNDUsIDIwOSwgMTgzLCAyNSwgNSwgMjU0LCAyMDEsIDE4MywgMjUsIDUsIDIyNiwgCi0gICAgMTgzLCAxODMsIDI1LCA1LCAyNTMsIDE5MiwgMTgzLCA1LCAyMTMsIDE1MiwgMTgzLCA1LCAyMTQsIDIxOCwgMTgzLCAxLCAKLSAgICAyMzQsIDExNSwgMTgzLCAxLCAyNDIsIDIyNiwgMTgzLCAxLCAyMTAsIDExNiwgMTgzLCAxLCAyMjIsIDE3OSwgMTgzLCAxLCAKLSAgICAyNDQsIDE5NiwgMTgzLCAyMSwgMjEwLCA4NiwgMTgzLCAyMSwgMTEwLCAxODMsIDIxLCAxMDUsIDE4MywgMjEsIDE1OCwgCi0gICAgMTgzLCAyMSwgMTYxLCAxODMsIDIxLCAxODksIDE4MywgMjEsIDE5NCwgMTgzLCAyMSwgMTk4LCAxODMsIDIxLCAxOTUsIAotICAgIDE4MywgMjEsIDIwMCwgMTgzLCAyMTYsIDc0LCAxODMsIDI1NCwgMjUzLCAxODMsIDIzNSwgMTc4LCAxODMsIDIxNCwgMTQ2LCAKLSAgICAxODMsIDI0NSwgMTgxLCAyMjYsIDE4OCwgMTgzLCA1LCAyMTEsIDc4LCAxNzEsIDUsIDI1MCwgMjU1LCAxNzEsIDUsIDI1NCwgCi0gICAgNzUsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCA3MywgMTcxLCAxLCA3MywgMTcxLCAxLCAKLSAgICAyMzYsIDMzLCAxNzEsIDEsIDcwLCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgCi0gICAgMTU2LCAxNzEsIDI1LCAyNTEsIDIsIDc1LCAxNzEsIDEsIDc1LCAxNzEsIDEsIDI1NCwgMjAxLCAxNzEsIDI1LCAyNTEsIDIsIAotICAgIDc2LCAxNzEsIDEsIDc2LCAxNzEsIDEsIDI1MywgMTkyLCAxNzEsIDEsIDE3NiwgMTcxLCAxLCAyMzQsIDEzMiwgMTcxLCAxLCAKLSAgICAyNDMsIDEzNSwgMTcxLCAxLCAyNDIsIDI0OSwgMTcxLCAxLCAyMjksIDc3LCAxNzEsIDEsIDI1MSwgMzMsIDE3MSwgMSwgCi0gICAgMjUwLCAxNTcsIDE3MSwgMSwgMjM1LCAxNDEsIDE3MSwgMSwgMjM1LCAxMTQsIDE3MSwgMSwgMjI3LCAxNjUsIDE3MSwgMSwgCi0gICAgMjE1LCAxNTYsIDE3MSwgMSwgMjE1LCAxNDQsIDE3MSwgMSwgMjQ4LCAxMzUsIDE3MSwgMSwgMjQ4LCAxMTksIDE3MSwgMSwgCi0gICAgMjI4LCAxMTAsIDE3MSwgMSwgMjE3LCAxMDUsIDE3MSwgMSwgMjE2LCAyMDgsIDE3MSwgMSwgMjQ4LCAyMjEsIDE3MSwgMSwgCi0gICAgMjQ4LCAyNSwgMTcxLCAxLCAxOTcsIDE3MSwgMSwgMTkwLCAxNzEsIDEsIDIyNSwgMTQ3LCAxNzEsIDEsIDI1MiwgMTkxLCAKLSAgICAxNzEsIDEsIDI1MiwgMTgsIDE3MSwgMSwgMTg0LCAxNzEsIDEsIDE5MSwgMTcxLCAxLCAyMDUsIDE3MSwgMSwgMjMzLCAxMzUsIAotICAgIDE3MSwgMSwgMjMyLCAxODQsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIDEwMiwgMTcxLCAxLCAyMTgsIDIyMywgCi0gICAgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA1LCAxNzEsIDUsIDI1MywgMTc1LCAxNzEsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxNzEsIDI1LCA1LCA3MywgMTcxLCAyNSwgNSwgMjM2LCAzMywgMTcxLCAyNSwgNSwgNzAsIDE3MSwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTcxLCAyNSwgNSwgCi0gICAgMjUxLCAyLCA3NSwgMTcxLCAyNSwgNSwgNzUsIDE3MSwgMjUsIDUsIDI1NCwgMjAxLCAxNzEsIDI1LCA1LCAyNTEsIDIsIDc2LCAKLSAgICAxNzEsIDI1LCA1LCA3NiwgMTcxLCAyNSwgNSwgMjUzLCAxOTIsIDE3MSwgNSwgMjEzLCAxNTIsIDE3MSwgMjI2LCAyMDQsIAotICAgIDE3MSwgMSwgMTQ5LCAyMjIsIDE4MCwgMTcxLCAxLCAxNDksIDIzMiwgMTg1LCAxNzEsIDI1LCA1LCAxNDksIDE1NiwgMTcxLCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTcxLCAyMSwgMjEwLCA4NiwgMTcxLCAyMSwgMTEwLCAxNzEsIDIxLCAxMDUsIDE3MSwgCi0gICAgMjEsIDE1OCwgMTcxLCAyMSwgMTYxLCAxNzEsIDIxLCAxODksIDE3MSwgMjEsIDE5NCwgMTcxLCAyMSwgMTk4LCAxNzEsIDIxLCAKLSAgICAxOTUsIDE3MSwgMjEsIDIwMCwgMTcxLCAyNTUsIDIxLCA1MCwgMTcxLCAyMjIsIDExOCwgNTAsIDE1NywgNSwgMjUwLCAyNTUsIAotICAgIDE1NywgNSwgMjU0LCA3NSwgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCA2MSwgMTU3LCAxLCAyNTUsIDczLCAxNTcsIDEsIAotICAgIDczLCAxNTcsIDEsIDIzNiwgMzMsIDE1NywgMSwgNzAsIDE1NywgMSwgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgCi0gICAgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzUsIDE1NywgMSwgMjU0LCAyMDEsIDE1NywgMSwgNzYsIDE1NywgMSwgMjUzLCAxOTIsIAotICAgIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTMyLCAxNTcsIDEsIDI0MywgMTM1LCAxNTcsIDEsIDI0MiwgMjQ5LCAxNTcsIAotICAgIDEsIDIyOSwgNzcsIDE1NywgMSwgMjUxLCAzMywgMTU3LCAxLCAyNTAsIDE1NywgMTU3LCAxLCAyMzUsIDE0MSwgMTU3LCAxLCAKLSAgICAyMzUsIDExNCwgMTU3LCAxLCAyMjcsIDE2NSwgMTU3LCAxLCAyMTUsIDE1NiwgMTU3LCAxLCAyMTUsIDE0NCwgMTU3LCAxLCAKLSAgICAyNDgsIDEzNSwgMTU3LCAxLCAyNDgsIDExOSwgMTU3LCAxLCAyMjgsIDExMCwgMTU3LCAxLCAyMTcsIDEwNSwgMTU3LCAxLCAKLSAgICAyMTYsIDIwOCwgMTU3LCAxLCAyNDgsIDIyMSwgMTU3LCAxLCAyNDgsIDI1LCAxNTcsIDEsIDE5NywgMTU3LCAxLCAxOTAsIAotICAgIDE1NywgMSwgMjI1LCAxNDcsIDE1NywgMSwgMjUyLCAxOTEsIDE1NywgMSwgMjUyLCAxOCwgMTU3LCAxLCAxODQsIDE1NywgMSwgCi0gICAgMTkxLCAxNTcsIDEsIDIwNSwgMTU3LCAxLCAyMzMsIDEzNSwgMTU3LCAxLCAyMzIsIDE4NCwgMTU3LCAxLCAyMTQsIDI3LCAKLSAgICAxNTcsIDEsIDIyMCwgMTAyLCAxNTcsIDEsIDIxOCwgMjIzLCAxNTcsIDEsIDIwNiwgMTU3LCAxLCAxNjIsIDE1NywgNSwgCi0gICAgMjI3LCAyMDUsIDE1NywgNSwgMjUzLCAxNzUsIDE1NywgMjUsIDUsIDI1NSwgNzMsIDE1NywgMjUsIDUsIDczLCAxNTcsIDI1LCAKLSAgICA1LCAyMzYsIDMzLCAxNTcsIDI1LCA1LCA3MCwgMTU3LCAyNSwgNSwgMjE0LCAxMTgsIDE1NywgMjUsIDUsIDE0OSwgMTUzLCAKLSAgICAxNTcsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNTcsIDI1LCA1LCA3NSwgMTU3LCAyNSwgNSwgMjU0LCAyMDEsIDE1NywgMjUsIAotICAgIDUsIDc2LCAxNTcsIDI1LCA1LCAyNTMsIDE5MiwgMTU3LCA1LCAyMTMsIDE1MiwgMTU3LCAyNTQsIDIwMiwgMjMzLCAyMywgCi0gICAgNzgsIDE1NywgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAxNTcsIDEsIDIyMiwgMTc5LCAxNTcsIDEsIDIyMywgMzksIDE1NywgCi0gICAgMSwgMjEwLCAxNjgsIDE1NywgMSwgMTQ5LCAyMjIsIDE4MCwgMTU3LCAxLCAxNDksIDIzMiwgMTg1LCAxNTcsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgMTU3LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTU3LCAyMSwgMjEwLCA4NiwgMTU3LCAyMSwgMTEwLCAxNTcsIAotICAgIDIxLCAxMDUsIDE1NywgMjEsIDE1OCwgMTU3LCAyMSwgMTYxLCAxNTcsIDIxLCAxODksIDE1NywgMjEsIDE5NCwgMTU3LCAyMSwgCi0gICAgMTk4LCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDIwMCwgMTU3LCAyMzUsIDE2MSwgMTU3LCAxLCAyMTIsIDY1LCAxNTcsIAotICAgIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxNTcsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAxNTcsIDI0NCwgMiwgMTM0LCAyMjQsIAotICAgIDE5LCAxNTcsIDI0NCwgMiwgMTIzLCAyMTksIDExNywgMTU3LCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDE1NywgMjQ0LCAyLCAKLSAgICAxMzQsIDIxOSwgMTE2LCAzNiwgNSwgMjU0LCA3NSwgMzYsIDUsIDIxMywgMTQ3LCAzNiwgMSwgNjEsIDM2LCAxLCAyNTUsIAotICAgIDczLCAzNiwgMSwgNzMsIDM2LCAxLCAyMzYsIDMzLCAzNiwgMSwgNzAsIDM2LCAxLCAyMTQsIDExOCwgMzYsIDEsIDc1LCAzNiwgCi0gICAgMSwgMjQ1LCAyMDksIDM2LCAxLCAyNTQsIDIwMSwgMzYsIDEsIDc2LCAzNiwgMSwgMjI2LCAxODMsIDM2LCAxLCAyNTMsIAotICAgIDE5MiwgMzYsIDEsIDE3NiwgMzYsIDEsIDIyOSwgNzcsIDM2LCAxLCAyNTEsIDMzLCAzNiwgMSwgMjM1LCAxNDEsIDM2LCAxLCAKLSAgICAyMjcsIDE2NSwgMzYsIDEsIDIxNSwgMTU2LCAzNiwgMSwgMjI4LCAxMTAsIDM2LCAxLCAyMTcsIDEwNSwgMzYsIDEsIDE5NywgCi0gICAgMzYsIDEsIDIyOCwgOTIsIDM2LCAxLCAxOTAsIDM2LCAxLCAxODQsIDM2LCAxLCAxOTEsIDM2LCAxLCAyMDUsIDM2LCAxLCAKLSAgICAyMjIsIDE3OSwgMzYsIDEsIDIzMywgMTM1LCAzNiwgMSwgMjMyLCAxODQsIDM2LCAxLCAyMzIsIDE3NSwgMzYsIDEsIDIxNCwgCi0gICAgMjcsIDM2LCAxLCAyMjAsIDEwMiwgMzYsIDEsIDIxOCwgMjIzLCAzNiwgMSwgMjA2LCAzNiwgMSwgMTYyLCAzNiwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDM2LCAyNSwgNSwgNzMsIDM2LCAyNSwgNSwgMjM2LCAzMywgMzYsIDI1LCA1LCA3MCwgMzYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMzYsIDI1LCA1LCA3NSwgMzYsIDI1LCA1LCAyNDUsIDIwOSwgMzYsIDI1LCA1LCAyNTQsIDIwMSwgMzYsIAotICAgIDI1LCA1LCA3NiwgMzYsIDI1LCA1LCAyMjYsIDE4MywgMzYsIDI1LCA1LCAyNTMsIDE5MiwgMzYsIDUsIDIxMywgMTUyLCAzNiwgCi0gICAgMjI2LCAyMDQsIDM2LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDM2LCAyMSwgMjEwLCA4NiwgMzYsIDIxLCAxMTAsIDM2LCAKLSAgICAyMSwgMTA1LCAzNiwgMjEsIDE1OCwgMzYsIDIxLCAxNjEsIDM2LCAyMSwgMTg5LCAzNiwgMjEsIDE5NCwgMzYsIDIxLCAxOTgsIAotICAgIDM2LCAyMSwgMTk1LCAzNiwgMjEsIDIwMCwgMzYsIDU0LCAyMTYsIDI0NywgMzYsIDU0LCAxMjMsIDI0MCwgMjEwLCAzNiwgCi0gICAgNTQsIDEyMywgMjE2LCAxNDcsIDM2LCAyNDgsIDE0NiwgNTAsIDM2LCAyMzAsIDEzNSwgNTAsIDM2LCAyMTEsIDQ1LCA1MCwgCi0gICAgMzYsIDI0OCwgODcsIDUwLCAzNiwgMjQ5LCAxMzksIDUwLCAzNiwgMjUzLCAyMzgsIDc3LCA1MCwgMzYsIDIyMiwgMTE4LCAKLSAgICA1MCwgMzYsIDU0LCA1MCwgMTQ4LCA1LCAyNTAsIDI1NSwgMTQ4LCA1LCAyNTQsIDc1LCAxNDgsIDUsIDIxMywgMTQ3LCAxNDgsIAotICAgIDEsIDYxLCAxNDgsIDEsIDI1NSwgNzMsIDE0OCwgMSwgNzMsIDE0OCwgMSwgMjM2LCAzMywgMTQ4LCAxLCA3MCwgMTQ4LCAxLCAKLSAgICAyMTQsIDExOCwgMTQ4LCAxLCAxNDksIDE1MywgMTQ4LCAxLCAxNDksIDE1NiwgMTQ4LCAxLCA3NSwgMTQ4LCAxLCAyNDUsIAotICAgIDIwOSwgMTQ4LCAxLCAyNTQsIDIwMSwgMTQ4LCAxLCA3NiwgMTQ4LCAxLCAyMjYsIDE4MywgMTQ4LCAxLCAyNTMsIDE5MiwgCi0gICAgMTQ4LCAxLCAxNzYsIDE0OCwgMSwgMjM0LCAxMzIsIDE0OCwgMSwgMjQzLCAxMzUsIDE0OCwgMSwgMjQyLCAyNDksIDE0OCwgCi0gICAgMSwgMjI5LCA3NywgMTQ4LCAxLCAyNTEsIDMzLCAxNDgsIDEsIDI1MCwgMTU3LCAxNDgsIDEsIDIzNSwgMTQxLCAxNDgsIDEsIAotICAgIDIzNSwgMTE0LCAxNDgsIDEsIDIyNywgMTY1LCAxNDgsIDEsIDIxNSwgMTU2LCAxNDgsIDEsIDIxNSwgMTQ0LCAxNDgsIDEsIAotICAgIDI0OCwgMTM1LCAxNDgsIDEsIDI0OCwgMTE5LCAxNDgsIDEsIDIyOCwgMTEwLCAxNDgsIDEsIDIxNywgMTA1LCAxNDgsIDEsIAotICAgIDIxNiwgMjA4LCAxNDgsIDEsIDI0OCwgMjIxLCAxNDgsIDEsIDI0OCwgMjUsIDE0OCwgMSwgMTk3LCAxNDgsIDEsIDE5MCwgCi0gICAgMTQ4LCAxLCAyMjUsIDE0NywgMTQ4LCAxLCAyNTIsIDE5MSwgMTQ4LCAxLCAyNTIsIDE4LCAxNDgsIDEsIDE4NCwgMTQ4LCAxLCAKLSAgICAxOTEsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTc5LCAxNDgsIDEsIDIzMywgMTM1LCAxNDgsIDEsIDIzMiwgMTg0LCAKLSAgICAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDIsIDE0OCwgMSwgMjE4LCAyMjMsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIAotICAgIDE2MiwgMTQ4LCA1LCAyNTMsIDE3NSwgMTQ4LCAyNSwgNSwgMjU1LCA3MywgMTQ4LCAyNSwgNSwgNzMsIDE0OCwgMjUsIDUsIAotICAgIDIzNiwgMzMsIDE0OCwgMjUsIDUsIDcwLCAxNDgsIDI1LCA1LCAyMTQsIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgCi0gICAgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE0OCwgMjUsIDUsIDc1LCAxNDgsIDI1LCA1LCAyNDUsIDIwOSwgMTQ4LCAyNSwgNSwgCi0gICAgMjU0LCAyMDEsIDE0OCwgMjUsIDUsIDc2LCAxNDgsIDI1LCA1LCAyMjYsIDE4MywgMTQ4LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyMywgNzgsIDE0OCwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNDgsIDEsIAotICAgIDIxNSwgMTgzLCAxNDgsIDEsIDI0NiwgMzgsIDE0OCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAKLSAgICAyMSwgMTEwLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxODksIDE0OCwgMjEsIAotICAgIDE5NCwgMTQ4LCAyMSwgMTk4LCAxNDgsIDIxLCAxOTUsIDE0OCwgMjEsIDIwMCwgMTQ4LCAyNDQsIDIsIDIxLCAyMTAsIDg3LCAKLSAgICAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEyMywgMzEsIDIyNiwgMjM3LCAyMjQsIAotICAgIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMTMsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEyMywgCi0gICAgMzEsIDI0NSwgNDIsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDI0NSwgNDIsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEzNCwgMzEsIDI0NSwgNDIsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIAotICAgIDUsIDIxNSwgODQsIDE2NSwgNSwgMjU0LCA3NSwgMTY1LCA1LCAyMTMsIDE0NywgMTY1LCAxLCA2MSwgMTY1LCAxLCAyNTUsIAotICAgIDczLCAxNjUsIDEsIDczLCAxNjUsIDEsIDIzNiwgMzMsIDE2NSwgMSwgNzAsIDE2NSwgMSwgMjE0LCAxMTgsIDE2NSwgMSwgCi0gICAgMTQ5LCAxNTMsIDE2NSwgMSwgMTQ5LCAxNTYsIDE2NSwgMSwgNzUsIDE2NSwgMSwgMjQ1LCAyMDksIDE2NSwgMSwgMjU0LCAKLSAgICAyMDEsIDE2NSwgMSwgNzYsIDE2NSwgMSwgMjI2LCAxODMsIDE2NSwgMSwgMjUzLCAxOTIsIDE2NSwgMSwgMTc2LCAxNjUsIDEsIAotICAgIDIzNCwgMTMyLCAxNjUsIDEsIDI0MywgMTM1LCAxNjUsIDEsIDI0MiwgMjQ5LCAxNjUsIDEsIDIyOSwgNzcsIDE2NSwgMSwgCi0gICAgMjUxLCAzMywgMTY1LCAxLCAyNTAsIDE1NywgMTY1LCAxLCAyMzUsIDE0MSwgMTY1LCAxLCAyMzUsIDExNCwgMTY1LCAxLCAKLSAgICAyMjcsIDE2NSwgMTY1LCAxLCAyMTUsIDE1NiwgMTY1LCAxLCAyMTUsIDE0NCwgMTY1LCAxLCAyNDgsIDEzNSwgMTY1LCAxLCAKLSAgICAyNDgsIDExOSwgMTY1LCAxLCAyMjgsIDExMCwgMTY1LCAxLCAyMTcsIDEwNSwgMTY1LCAxLCAyMTYsIDIwOCwgMTY1LCAxLCAKLSAgICAyNDgsIDIyMSwgMTY1LCAxLCAyNDgsIDI1LCAxNjUsIDEsIDE5NywgMTY1LCAxLCAxOTAsIDE2NSwgMSwgMjI1LCAxNDcsIAotICAgIDE2NSwgMSwgMjUyLCAxOTEsIDE2NSwgMSwgMjUyLCAxOCwgMTY1LCAxLCAxODQsIDE2NSwgMSwgMTkxLCAxNjUsIDEsIDIwNSwgCi0gICAgMTY1LCAxLCAyMjIsIDE3OSwgMTY1LCAxLCAyMzMsIDEzNSwgMTY1LCAxLCAyMzIsIDE4NCwgMTY1LCAxLCAyMTQsIDI3LCAKLSAgICAxNjUsIDEsIDIyMCwgMTAyLCAxNjUsIDEsIDIxOCwgMjIzLCAxNjUsIDEsIDIwNiwgMTY1LCAxLCAxNjIsIDE2NSwgNSwgCi0gICAgMjI3LCAyMDUsIDE2NSwgNSwgMjUzLCAxNzUsIDE2NSwgMjUsIDUsIDI1NSwgNzMsIDE2NSwgMjUsIDUsIDczLCAxNjUsIDI1LCAKLSAgICA1LCAyMzYsIDMzLCAxNjUsIDI1LCA1LCA3MCwgMTY1LCAyNSwgNSwgMjE0LCAxMTgsIDE2NSwgMjUsIDUsIDE0OSwgMTUzLCAKLSAgICAxNjUsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNjUsIDI1LCA1LCA3NSwgMTY1LCAyNSwgNSwgMjQ1LCAyMDksIDE2NSwgMjUsIAotICAgIDUsIDI1NCwgMjAxLCAxNjUsIDI1LCA1LCA3NiwgMTY1LCAyNSwgNSwgMjI2LCAxODMsIDE2NSwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxNjUsIDUsIDIxMywgMTUyLCAxNjUsIDIzMywgMjMsIDc4LCAxNjUsIDI1NCwgMjAyLCAyMzMsIDIzLCA3OCwgMTY1LCAxLCAKLSAgICAyNDQsIDE5NiwgMTY1LCAxLCAxNDksIDIyMiwgMTgwLCAxNjUsIDEsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjUsIDUsIDE0OSwgCi0gICAgMTU2LCAxNjUsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNjUsIDIxLCAyMTAsIDg2LCAxNjUsIDIxLCAxMTAsIDE2NSwgMjEsIAotICAgIDEwNSwgMTY1LCAyMSwgMTU4LCAxNjUsIDIxLCAxNjEsIDE2NSwgMjEsIDE4OSwgMTY1LCAyMSwgMTk0LCAxNjUsIDIxLCAKLSAgICAxOTgsIDE2NSwgMjEsIDE5NSwgMTY1LCAyMSwgMjAwLCAxNjUsIDUsIDIzNSwgMTAyLCAxNjUsIDUsIDIxNCwgMTYxLCAxMzYsIAotICAgIDUsIDI1NCwgNzUsIDEzNiwgNSwgMjEzLCAxNDcsIDEzNiwgMSwgNjEsIDEzNiwgMSwgMjU1LCA3MywgMTM2LCAxLCA3MywgCi0gICAgMTM2LCAxLCAyMzYsIDMzLCAxMzYsIDEsIDcwLCAxMzYsIDEsIDIxNCwgMTE4LCAxMzYsIDEsIDE0OSwgMTUzLCAxMzYsIDEsIAotICAgIDE0OSwgMTU2LCAxMzYsIDEsIDc1LCAxMzYsIDEsIDI0NSwgMjA5LCAxMzYsIDEsIDI1NCwgMjAxLCAxMzYsIDEsIDc2LCAKLSAgICAxMzYsIDEsIDIyNiwgMTgzLCAxMzYsIDEsIDI1MywgMTkyLCAxMzYsIDEsIDE3NiwgMTM2LCAxLCAyMzQsIDEzMiwgMTM2LCAKLSAgICAxLCAyNDMsIDEzNSwgMTM2LCAxLCAyNDIsIDI0OSwgMTM2LCAxLCAyMjksIDc3LCAxMzYsIDEsIDI1MSwgMzMsIDEzNiwgMSwgCi0gICAgMjUwLCAxNTcsIDEzNiwgMSwgMjM1LCAxNDEsIDEzNiwgMSwgMjM1LCAxMTQsIDEzNiwgMSwgMjI3LCAxNjUsIDEzNiwgMSwgCi0gICAgMjE1LCAxNTYsIDEzNiwgMSwgMjE1LCAxNDQsIDEzNiwgMSwgMjQ4LCAxMzUsIDEzNiwgMSwgMjQ4LCAxMTksIDEzNiwgMSwgCi0gICAgMjI4LCAxMTAsIDEzNiwgMSwgMjE3LCAxMDUsIDEzNiwgMSwgMjE2LCAyMDgsIDEzNiwgMSwgMjQ4LCAyMjEsIDEzNiwgMSwgCi0gICAgMjQ4LCAyNSwgMTM2LCAxLCAxOTcsIDEzNiwgMSwgMjI4LCA5MiwgMTM2LCAxLCAxOTAsIDEzNiwgMSwgMjI1LCAxNDcsIAotICAgIDEzNiwgMSwgMjUyLCAxOTEsIDEzNiwgMSwgMjUyLCAxOCwgMTM2LCAxLCAxODQsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIwNSwgCi0gICAgMTM2LCAxLCAyMjIsIDE3OSwgMTM2LCAxLCAyMzMsIDEzNSwgMTM2LCAxLCAyMzIsIDE4NCwgMTM2LCAxLCAyMzIsIDE3NSwgCi0gICAgMTM2LCAxLCAyMTQsIDI3LCAxMzYsIDEsIDIyMCwgMTAyLCAxMzYsIDEsIDIxOCwgMjIzLCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAKLSAgICAxNjIsIDEzNiwgMSwgMjE1LCAxMjUsIDEzNiwgNSwgMjUzLCAxNzUsIDEzNiwgMjUsIDUsIDI1NSwgNzMsIDEzNiwgMjUsIDUsIAotICAgIDczLCAxMzYsIDI1LCA1LCAyMzYsIDMzLCAxMzYsIDI1LCA1LCA3MCwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIAotICAgIDUsIDE0OSwgMTUzLCAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxMzYsIDI1LCA1LCA3NSwgMTM2LCAyNSwgNSwgMjQ1LCAKLSAgICAyMDksIDEzNiwgMjUsIDUsIDI1NCwgMjAxLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjI2LCAxODMsIDEzNiwgMjUsIAotICAgIDUsIDI1MywgMTkyLCAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDczLCAxMzYsIDI1MywgMTkzLCAyMzMsIAotICAgIDIzLCA3OCwgMTM2LCAxLCAxNDksIDIyMiwgMTgwLCAxMzYsIDEsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjUsIDUsIDE0OSwgCi0gICAgMTU2LCAxMzYsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTAsIDEzNiwgMjEsIAotICAgIDEwNSwgMTM2LCAyMSwgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE4OSwgMTM2LCAyMSwgMTk0LCAxMzYsIDIxLCAKLSAgICAxOTgsIDEzNiwgMjEsIDE5NSwgMTM2LCAyMSwgMjAwLCAxMzYsIDU0LCAyMTYsIDI0NywgMTM2LCA1NCwgMTIzLCAyNDAsIAotICAgIDIxMCwgMTM2LCA1NCwgMTIzLCAyMTYsIDE0NywgMTM2LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMTM2LCAyNDQsIDIsIDEyMywgCi0gICAgMjQyLCAyNywgMTM2LCAyNDQsIDIsIDEzNCwgMjI0LCAxOSwgMTM2LCAyNDgsIDE1MCwgNzgsIDEzNiwgMSwgMjUwLCA5OSwgCi0gICAgMjI4LCAxMTEsIDEzNiwgMSwgMjUwLCA5OSwgMjMwLCAyNSwgMTM2LCAxLCAyNTAsIDk5LCAyMjIsIDE4MCwgMTM2LCAxLCAKLSAgICAyNTAsIDk5LCAxNTYsIDEzNiwgMSwgMjUwLCA5OSwgMjMyLCAxODUsIDEzNiwgMSwgMjUwLCA5OSwgMjM1LCAyMywgMTc1LCAKLSAgICA1LCAyNTQsIDc0LCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTY1LCAxNzUsIDEsIDI1NSwgMjcsIDE3NSwgMSwgCi0gICAgMjU0LCAyMjMsIDE3NSwgMSwgMjU0LCAyMzgsIDE3NSwgMSwgMjM1LCAxNTEsIDE3NSwgMSwgMjM2LCAzMiwgMTc1LCAxLCAKLSAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE3MywgMTc1LCAxLCAyMzUsIDE3NCwgMTc1LCAxLCAKLSAgICAyMzYsIDE4LCAxNzUsIDEsIDIzNiwgMjAsIDE3NSwgMSwgMjQ1LCAxNywgMTc1LCAxLCAyNDUsIDIwNCwgMTc1LCAxLCAyNTQsIAotICAgIDE4OCwgMTc1LCAxLCAyMjYsIDEwOCwgMTc1LCAxLCAyMjYsIDE3NywgMTc1LCAxLCAyNTMsIDE3OCwgMTc1LCAxLCAyNTQsIAotICAgIDE0NiwgMjM0LCAxODcsIDE3NSwgMSwgMjMxLCAyMDksIDIzNCwgMTg3LCAxNzUsIDEsIDI1NCwgMTQ2LCAyNDMsIDgyLCAKLSAgICAxNzUsIDEsIDIzMSwgMjA5LCAyNDMsIDgyLCAxNzUsIDEsIDIzNCwgMjI5LCAyMjksIDIyMiwgMTc1LCAxLCAyMjEsIDIzNiwgCi0gICAgMjQzLCA4MiwgMTc1LCAxLCAyNTQsIDE0NiwgMjUwLCAyMTYsIDE3NSwgMSwgMjMxLCAyMDksIDI1MCwgMjE2LCAxNzUsIDEsIAotICAgIDI1NCwgMTQ2LCAyMzUsIDEyNywgMTc1LCAxLCAyMzEsIDIwOSwgMjM1LCAxMjcsIDE3NSwgMSwgMjE3LCA5OCwgMjI5LCAKLSAgICAyMjIsIDE3NSwgMSwgMjE3LCA5OCwgMjIxLCAyMzUsIDIyOSwgMjIzLCAxNzUsIDEsIDIyMSwgMjM2LCAyMzUsIDEyNywgCi0gICAgMTc1LCAxLCAyNTQsIDE0NiwgMjE1LCAxNTIsIDE3NSwgMSwgMjMxLCAyMDksIDIxNSwgMTUyLCAxNzUsIDEsIDI1NCwgMTQ2LCAKLSAgICAyNDgsIDEyNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjQ4LCAxMjYsIDE3NSwgMSwgMjMwLCA1MywgMjI5LCAxODAsIDE3NSwgMSwgCi0gICAgMjIxLCAyMzYsIDI0OCwgMTI2LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMTcsIDMwLCAxNzUsIDEsIDIzMSwgMjA5LCAyMTcsIDMwLCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyNDgsIDE0NCwgMTc1LCAxLCAyMzEsIDIwOSwgMjQ4LCAxNDQsIDE3NSwgMSwgMjQ4LCAxNzQsIAotICAgIDIyOSwgMTgwLCAxNzUsIDEsIDIyMSwgMjM2LCAyNDgsIDE0NCwgMTc1LCAxLCAyNTQsIDE0NiwgMjI1LCAyMjgsIDE3NSwgMSwgCi0gICAgMjMxLCAyMDksIDIyNSwgMjI4LCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTIsIDExMiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUyLCAKLSAgICAxMTIsIDE3NSwgMSwgMjMxLCAxMzEsIDE3NSwgMSwgMjU0LCAxMzEsIDI1MiwgMTEyLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCi0gICAgMSwgMjIzLCAxMzMsIDE3NSwgMSwgMjQ4LCAxNzQsIDIzMywgNjcsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTgsIAotICAgIDIyMSwgMjEwLCAxNzUsIDEsIDIzMCwgNTMsIDIyMSwgMjEwLCAxNzUsIDEsIDI0OCwgMTc0LCAyMjEsIDIxMCwgMTc1LCAxLCAKLSAgICAyNDEsIDI0MiwgMTc1LCAxLCAyMzAsIDUzLCAyMzMsIDY3LCAxNzUsIDEsIDI0NCwgMTU2LCAxNzUsIDUsIDI1NCwgMTc3LCAKLSAgICAxNzUsIDI1LCA1LCAyNTQsIDIzMywgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDI1NCwgMjQwLCAxNzUsIDI1LCA1LCAyNDcsIAotICAgIDIyOCwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMzUsIDE3MCwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIzNSwgCi0gICAgMTcwLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjI2LCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIyNiwgODgsIDE3NSwgCi0gICAgMjUsIDUsIDI0MywgMTI0LCAxNzUsIDI1LCA1LCAyMzQsIDE1LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM0LCAxNSwgMTc1LCAKLSAgICAyNSwgNSwgMjM0LCAxNywgMjQ4LCA2NywgMTc1LCAyNSwgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjU0LCAyMzMsIDE3NSwgMjUsIAotICAgIDUsIDIzNCwgMTYsIDI0MiwgNDcsIDI0NywgMjI4LCAyNTQsIDIzMywgMTc1LCAyNSwgNSwgMjM0LCAxNiwgMjQyLCA0NywgCi0gICAgMjQzLCA4MSwgMTc1LCAyNSwgNSwgMjQzLCA4MSwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDI0MywgMTI0LCAxNzUsIDI1LCA1LCAKLSAgICAyNDcsIDIyOCwgMjQzLCA4MSwgMTc1LCAyMjQsIDE0MSwgMjMzLCAyMDcsIDE2OCwgMTM1LCAyMzQsIDI5LCAyMzQsIDI0NiwgCi0gICAgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEyOCwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDk5LCAxNjgsIDEzNSwgMjM0LCAKLSAgICAxMDYsIDIzNCwgOTUsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCAxMDMsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjIzLCAxNTQsIAotICAgIDE2OCwgMTM1LCAyMjksIDUsIDIyOCwgMjQ4LCAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCAxNDcsIDE2OCwgMTM1LCAyNTAsIAotICAgIDg3LCAyNTAsIDk1LCAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCAxNDYsIDE2OCwgMTM1LCAyMTksIDU5LCAyMTksIDU4LCAKLSAgICAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCA4MywgMTY4LCAxMzUsIDIxMCwgMjQ1LCAyMTAsIDI1MiwgMTY4LCAxMzUsIDI0NywgCi0gICAgMTQ2LCAyNTAsIDE1NCwgMTY4LCAxMzUsIDIxNiwgNDIsIDIyNSwgMjM4LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjAwLCAKLSAgICAxNjgsIDEzNSwgMjE2LCAxNTcsIDIyOSwgMjAxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIyNSwgMTExLCAxNjgsIDEzNSwgCi0gICAgMjI4LCA3NSwgMjI5LCA5OCwgMTY4LCAxMzUsIDI0NywgMTQ2LCAyNDgsIDY4LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjE3LCAKLSAgICA1NSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDEzMSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDIwNCwgMTY4LCAxMzUsIAotICAgIDIxNiwgMTU3LCAyMTYsIDE1NCwgMTY4LCAxMzUsIDIyOCwgNzUsIDIyNywgMjM3LCAxNjgsIDEzNSwgMjUxLCAyMDYsIDI1MiwgCi0gICAgMTY0LCAxNjgsIDEzNSwgMjI1LCAxNywgMjI1LCA0MiwgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjUsIDExMywgMTY4LCAxMzUsIAotICAgIDI0NCwgNDQsIDI0NCwgMTk2LCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTQxLCAxNjgsIDEzNSwgMjQ0LCA0NCwgMjQ0LCAKLSAgICAxNzMsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjIxLCAyNDcsIDE2OCwgMTM1LCAyMzAsIDE2MiwgMTg0LCAxNjgsIDEzNSwgCi0gICAgMjEwLCAyNDUsIDIxMSwgNzksIDE2OCwgMTM1LCAyMjIsIDIxMiwgMjIyLCAxMzksIDE2OCwgMTM1LCAyMjIsIDE0MCwgMTY4LCAKLSAgICAxMzUsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMTY4LCAxMzUsIDIzMiwgOTgsIDE2OCwgMTM1LCAyMTEsIDIyOCwgMjEyLCA2MSwgCi0gICAgMTY4LCAxMzUsIDIxOSwgNTksIDIyMiwgNiwgMTY4LCAxMzUsIDIxOSwgNTksIDIyMiwgMTE0LCAxNjgsIDEzNSwgMjE5LCAKLSAgICA1OSwgMjE4LCA4MiwgMTY4LCAxMzUsIDI0MSwgNjksIDI0MSwgMTU5LCAxNjgsIDEzNSwgMjMyLCAxNTcsIDI1MCwgNjgsIAotICAgIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTE1LCAxNjgsIDEzNSwgMjQxLCA2OSwgMjI4LCA3MCwgMTY4LCAxMzUsIDIyNiwgNjgsIAotICAgIDE2OCwgMTM1LCAyMjEsIDIzMCwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjQyLCAxNywgMTY4LCAxMzUsIDIyMSwgMjMwLCAKLSAgICAyNTUsIDczLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMTM2LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDczLCAxNjgsIDEzNSwgCi0gICAgMjIxLCAyMzAsIDIzNiwgMzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAKLSAgICAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzAsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAxMTgsIDE2OCwgMTM1LCAyMjUsIAotICAgIDEyNCwgMTY4LCAyNDksIDk4LCAxNiwgMjUyLCAxNjUsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzUsIDE2OCwgMTM1LCAyMjEsIAotICAgIDIzMCwgMjU0LCAyNDMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgCi0gICAgMTk4LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMjAyLCAyMzEsIDE5OSwgMTY4LCAxMzUsIDIzMywgMTA2LCAxNjgsIAotICAgIDEzNSwgMjMxLCAxOTUsIDE2OCwgMTM1LCAyMzEsIDE5NiwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMTY4LCAKLSAgICAxMzUsIDIzMSwgMjA0LCAyMTYsIDE1NiwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyMTUsIDIyOCwgMTY4LCAxMzUsIDIzMSwgCi0gICAgMjA0LCAyNTAsIDEzNSwgMTY4LCAxMzUsIDIxNiwgMTk4LCAxNjgsIDEzNSwgMjI4LCAyMDUsIDE2OCwgMTM1LCAyMTEsIDczLCAKLSAgICAxNjgsIDEzNSwgMjQ0LCAzNSwgMTY4LCAyMSwgMjEwLCA4NiwgMTY4LCAyMSwgMTEwLCAxNjgsIDIxLCAxMDUsIDE2OCwgMjEsIAotICAgIDE1OCwgMTY4LCAyMSwgMTYxLCAxNjgsIDIxLCAxODksIDE2OCwgMjEsIDE5NCwgMTY4LCAyMSwgMTk4LCAxNjgsIDIxLCAKLSAgICAxOTUsIDE2OCwgMjEsIDIwMCwgMTY4LCAxMzUsIDI1NCwgMTExLCAxNjgsIDEzNSwgMjM0LCAxMDQsIDIwOSwgMjA5LCAxLCAKLSAgICAyMzQsIDI4LCAyMDksIDIwOSwgMSwgMjM0LCAxMDYsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE3LCA2MiwgCi0gICAgMjA5LCAyMDksIDEsIDIyOSwgNCwgMjA5LCAyMDksIDEsIDI0OSwgMjM4LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE3LCAKLSAgICA2MiwgMjA5LCAyMDksIDEsIDIyNywgMTM0LCAyMDksIDIwOSwgMSwgMjQ3LCAxNDUsIDIwOSwgMjA5LCAxLCAxMTEsIDIwOSwgCi0gICAgMjA5LCAxLCAyMTYsIDE1NywgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIxNiwgMTU3LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgCi0gICAgMjI4LCA3NCwgMjA5LCAyMDksIDEsIDI1MSwgMjA1LCAyMDksIDIwOSwgMSwgMjI1LCAxNiwgMjA5LCAyMDksIDEsIDIyNSwgCi0gICAgMTIyLCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjE3LCA2MiwgMjA5LCAyMDksIDEsIDIyNSwgMTIyLCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgCi0gICAgMjEwLCAyNDQsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NywgMjMyLCAyMDYsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NywgMjMyLCAKLSAgICAxMjEsIDIwOSwgMjA5LCAxLCAyMTEsIDIyNywgMjA5LCAyMDksIDEsIDIxOSwgNTksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAKLSAgICAyNDEsIDY5LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgNzYsIDIwOSwgMjA5LCAxLCAyNDEsIDY5LCAyMTcsIDYyLCAyMDksIAotICAgIDIwOSwgMjQ1LCAxNjMsIDIwOSwgMjA5LCAyNSwgNSwgNjEsIDIwOSwgMjA5LCAyNSwgNSwgMjMxLCAyMDQsIDIzNCwgMjM0LCAKLSAgICAyMDksIDIwOSwgMjUsIDUsIDI1NSwgNzMsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAxMzYsIDIwOSwgMjA5LCAyNSwgNSwgNzMsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjM2LCAzMywgMjA5LCAyMDksIDI1LCA1LCAyMTEsIDExNywgMjA5LCAyMDksIDI1LCA1LCAKLSAgICAyMTAsIDE2OSwgMjA5LCAyMDksIDI1LCA1LCA3MCwgMjA5LCAyMDksIDI1LCA1LCAyMTQsIDExOCwgMjA5LCAyMDksIDI1LCAKLSAgICA1LCAyMzEsIDIwNCwgMjM0LCAxMywgMjA5LCAyMDksIDIyMCwgMTQ1LCA1LCAyMzIsIDE1NiwgMjA5LCAyMDksIDIyMCwgCi0gICAgMTQ1LCA1LCAyMjcsIDEzNCwgMjA5LCAyMDksIDI1LCA1LCA3NSwgMjA5LCAyMDksIDI1LCA1LCAyNDUsIDE5NSwgMjA5LCAKLSAgICAyMDksIDI1LCA1LCA3NiwgMjA5LCAyMDksIDI1LCA1LCAyNTMsIDE2NywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDIwMSwgCi0gICAgMjA5LCAyMDksIDIzNCwgMjksIDIzMywgMTM1LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjQ1LCAxODAsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyMTYsIDE1NiwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTE3LCAyMDksIDIwOSwgCi0gICAgMTM4LCAyMzEsIDIwNCwgMjUwLCAyMjMsIDIwOSwgMjA5LCAyNTEsIDQsIDc4LCAyMDksIDIwOSwgMjI4LCAyMTQsIDIwOSwgCi0gICAgMjA5LCAyMSwgMjEwLCA4NiwgMjA5LCAyMDksIDIxLCAxMTAsIDIwOSwgMjA5LCAyMSwgMTA1LCAyMDksIDIwOSwgMjEsIAotICAgIDE1OCwgMjA5LCAyMDksIDIxLCAxNjEsIDIwOSwgMjA5LCAyMSwgMTg5LCAyMDksIDIwOSwgMjEsIDE5NCwgMjA5LCAyMDksIAotICAgIDIxLCAxOTgsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgMjEsIDIwMCwgMjA5LCAyMDksIDI0MSwgNjksIDIyOCwgCi0gICAgNzQsIDIwOSwgMjA5LCAyNDEsIDY5LCAyMzAsIDE2MSwgMjA5LCAyMDksIDEsIDIzNCwgMTA3LCAyNDIsIDE3NCwgMjA5LCAKLSAgICAyMDksIDEsIDIzNCwgMTA3LCAyMjcsIDEzNCwgNjMsIDMsIDIyNiwgMjA0LCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAKLSAgICAyMzAsIDI0OCwgMjE1LCAxODksIDYxLCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAyMzAsIDI0OCwgMjU1LCAxNTksIAotICAgIDIyMiwgMjE2LCAyNTIsIDc3LCAxODQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjQyLCAxMTUsIDIxNSwgMTczLCAxODQsIDYzLCAxNjQsIDY1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAKLSAgICAxNjQsIDI0OSwgMjUyLCAyMTEsIDAsIDIzMCwgMjQ4LCAyMjAsIDEwOSwgMTg0LCA2MywgMTY0LCAyNTAsIDIzOSwgMjExLCAKLSAgICAwLCAyMzAsIDI0OCwgMjI1LCAxMTIsIDIyMCwgOTYsIDE4NCwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI0OCwgMjE1LCAxNzMsIAotICAgIDIyMCwgOTYsIDE4NCwgNjMsIDE2NCwgMjIxLCAyMDgsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MSwgMTI4LCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ3LCA2MywgMTY0LCAyNTEsIDIyMywgMjIwLCAzLCAyMTEsIDAsIDIzMCwgMjQ3LCA2MywgMTY0LCAyMzUsIDE5NywgMjE1LCAKLSAgICAxNzIsIDYzLCAxNjQsIDI0OCwgNjEsIDIxNSwgMTczLCAyNTEsIDEyNywgNjMsIDE2NCwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjI3LCAxMzksIDIyMCwgOTUsIDYzLCAxNjQsIDIxNSwgMTczLCAyMjAsIDk1LCA2MywgMTY0LCAyMjcsIDEzOSwgMjE1LCAKLSAgICAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyMiwgMjM2LCAyNTAsIDEyMiwgMjE4LCAyMzYsIDIyMCwgOTUsIDYzLCAxNjQsIAotICAgIDIyMywgNDIsIDI0MiwgMTQ2LCAyMjAsIDk1LCA2MywgMTY0LCAyNTAsIDIzOSwgMjU1LCAxNjMsIDIyMiwgMTQ0LCAyMzEsIAotICAgIDkyLCAxOTksIDI1MSwgNywgNjMsIDE2NCwgMjQyLCAxMTUsIDIxNSwgMTcyLCA2MywgMjMyLCAxNDQsIDUsIDI1MCwgMTU1LCAKLSAgICAyMjIsIDE0MywgNjMsIDIzMiwgMTQ0LCA1LCAyMzIsIDI1MiwgMjIyLCAxNDMsIDYzLCAyNTMsIDIxMiwgNSwgMjIwLCAxMDUsIAotICAgIDI0MywgNjUsIDI1NSwgMTY0LCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyNTUsIDE2MSwgMTkwLCA2MywgMjUzLCAKLSAgICAyMTIsIDUsIDIyMSwgMTgyLCAyMTUsIDE2OCwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQzLCA2NCwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxNzYsIDYzLCA1LCAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MiwgMTE2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDMsIDY0LCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDIsIDE3NiwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyNDcsIDE1OSwgMjIzLCAxMzAsIDIyOSwgMjE4LCA2MywgMjEsIDIxMCwgODYsIDYzLCAyMSwgMTEwLCA2MywgCi0gICAgMjEsIDEwNSwgNjMsIDIxLCAxNTgsIDYzLCAyMSwgMTYxLCA2MywgMjEsIDE4OSwgNjMsIDIxLCAxOTQsIDYzLCAyMSwgMTk4LCAKLSAgICA2MywgMjEsIDE5NSwgNjMsIDIxLCAyMDAsIDYzLCAyMSwgMTYzLCAxMTAsIDYzLCAyMSwgMTYzLCAxMDUsIDYzLCAyMSwgCi0gICAgMTYzLCAxNTgsIDYzLCAyMSwgMTYzLCAxNjEsIDYzLCAyMSwgMTYzLCAxODksIDYzLCAyMSwgMTYzLCAxOTQsIDYzLCAyMSwgCi0gICAgMTYzLCAxOTgsIDYzLCAyMSwgMTYzLCAxOTUsIDYzLCAyMSwgMTYzLCAyMDAsIDYzLCAyMSwgMTYzLCAyMTAsIDg2LCA2MywgCi0gICAgMTY0LCAyNTEsIDEzMCwgMjIyLCAxNDMsIDYzLCAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyNywgMTQ5LCAyMTAsIDI1LCAKLSAgICA2MywgMTY0LCAyNTAsIDIzOSwgMjU1LCAxNjMsIDIyMiwgMTQ0LCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCA2MywgCi0gICAgMTY0LCAyMjksIDY4LCAyNTEsIDY4LCAyMjAsIDEwNiwgMjIyLCAxNDMsIDYzLCAxNjQsIDI1MCwgMTMyLCAyMzAsIDI0NywgCi0gICAgNjMsIDE2NCwgMjE1LCAxODQsIDI1NSwgMTYwLCA2MywgMTY0LCAyNDIsIDEwMCwgMjIyLCAxNDQsIDI0MiwgNjMsIDYzLCAKLSAgICAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2OSwgNjMsIDE2NCwgMjU0LCAxMTYsIDIzNCwgMTIzLCAyNDIsIDYzLCAKLSAgICA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjksIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MSwgNjMsIDUsIAotICAgIDIzMSwgMTY3LCAyMTUsIDE3MSwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTMyLCA2MywgMSwgMjQzLCAxMzUsIDYzLCAxLCAKLSAgICAyNDIsIDI0OSwgNjMsIDEsIDIyOSwgNzcsIDYzLCAxLCAyNTEsIDMzLCA2MywgMSwgMjUwLCAxNTcsIDYzLCAxLCAyMzUsIAotICAgIDE0MSwgNjMsIDEsIDIyNywgMTY1LCA2MywgMSwgMjE1LCAxNTYsIDYzLCAxLCAyMTUsIDE0NCwgNjMsIDEsIDI0OCwgMTM1LCAKLSAgICA2MywgMSwgMjQ4LCAxMTksIDYzLCAxLCAyMjgsIDExMCwgNjMsIDEsIDIxNywgMTA1LCA2MywgMSwgMjE2LCAyMDgsIDYzLCAKLSAgICAxLCAyNDgsIDIyMSwgNjMsIDEsIDI0OCwgMjUsIDYzLCAxLCAxOTcsIDYzLCAxLCAxOTAsIDYzLCAxLCAyMjUsIDE0NywgNjMsIAotICAgIDEsIDI1MiwgMTkxLCA2MywgMSwgMjUyLCAxOCwgNjMsIDEsIDE4NCwgNjMsIDEsIDIxNSwgMTgzLCA2MywgMSwgMjE1LCAKLSAgICAxNzUsIDYzLCAxLCAyNDYsIDM4LCA2MywgMSwgMjQ2LCAzMywgNjMsIDEsIDIxMiwgNjUsIDYzLCAxLCAyMTAsIDgyLCA2MywgCi0gICAgMSwgMjEwLCAxMTYsIDYzLCAxLCAyNTUsIDE2NiwgNjMsIDEsIDE5MSwgNjMsIDEsIDIwNSwgNjMsIDEsIDIzMywgMTM1LCAKLSAgICA2MywgMSwgMjIwLCAxMDIsIDYzLCAxLCAyMTgsIDIyMywgNjMsIDEsIDIwNiwgNjMsIDEsIDE2MiwgNjMsIDEsIDYxLCA2MywgCi0gICAgMSwgMjMzLCAyMzEsIDYzLCAxLCAyNDQsIDc3LCAyMDUsIDYzLCAxLCAyMzQsIDQ2LCA2MywgMSwgMjIyLCAxNzksIDYzLCAKLSAgICAyNSwgNSwgMjU1LCA3MywgNjMsIDI1LCA1LCA3MywgNjMsIDI1LCA1LCAyMzYsIDMzLCA2MywgMjUsIDUsIDcwLCA2MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCA2MywgMjUsIDUsIDE0OSwgMTUzLCA2MywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDYzLCAyNSwgNSwgCi0gICAgMTQ5LCAxNTYsIDYzLCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjMsIDI1LCA1LCA3NSwgNjMsIDI1LCA1LCAyNDUsIDIwOSwgCi0gICAgNjMsIDI1LCA1LCA3NiwgNjMsIDI1LCA1LCAyMjYsIDE4MywgNjMsIDUsIDIyMiwgMjIxLCAyMTgsIDg0LCAyMjksIDc4LCAKLSAgICAyMjIsIDIxMSwgNjMsIDUsIDIyMiwgMjE2LCAyNTIsIDc2LCA2MywgMjUsIDUsIDIyMywgNDksIDczLCA2MywgMjUsIDUsIAotICAgIDIyMywgNDksIDIzNiwgMzMsIDYzLCA1LCAyMjcsIDE0OSwgMjEwLCAyNiwgMjI5LCAyMjYsIDI0OCwgMjIxLCA2MywgNSwgCi0gICAgMjE5LCA3MSwgMjMzLCA2MCwgNjMsIDE2NCwgMjQyLCAyOSwgNjMsIDE2NCwgMjI2LCA1NywgNjMsIDUsIDIzMywgNjMsIAotICAgIDIyMiwgMTQzLCA2MywgNSwgMjExLCA3MCwgMjIyLCAxNDMsIDYzLCA1LCAyMzMsIDY0LCAyMTUsIDE4NCwgMjUxLCA3LCA2MywgCi0gICAgNSwgMjMxLCA5NSwgMjUxLCA3LCA2MywgNSwgMjQyLCAxMTksIDI1MSwgOCwgMjIzLCA0MCwgNjMsIDUsIDI0MiwgMTE5LCAKLSAgICAyMzEsIDg1LCAyMjMsIDQwLCA2MywgNSwgMjM1LCAxOTMsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMywgCi0gICAgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAKLSAgICAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgMSwgMTc2LCA2MywgMjE4LCA3MywgMSwgMjM0LCAxMzIsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNDMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0MiwgMjQ5LCA2MywgMjE4LCA3MywgMSwgMjI5LCAKLSAgICA3NywgNjMsIDIxOCwgNzMsIDEsIDI1MSwgMzMsIDYzLCAyMTgsIDczLCAxLCAyNTAsIDE1NywgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIzNSwgMTQxLCA2MywgMjE4LCA3MywgMSwgMjI3LCAxNjUsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE1NiwgNjMsIDIxOCwgCi0gICAgNzMsIDEsIDIxNSwgMTQ0LCA2MywgMjE4LCA3MywgMSwgMjQ4LCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDExOSwgNjMsIAotICAgIDIxOCwgNzMsIDEsIDIyOCwgMTEwLCA2MywgMjE4LCA3MywgMSwgMjE3LCAxMDUsIDYzLCAyMTgsIDczLCAxLCAyMTYsIDIwOCwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMjIxLCA2MywgMjE4LCA3MywgMSwgMjQ4LCAyNSwgNjMsIDIxOCwgNzMsIDEsIDE5NywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDE5MCwgNjMsIDIxOCwgNzMsIDEsIDIyNSwgMTQ3LCA2MywgMjE4LCA3MywgMSwgMjUyLCAxOTEsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE4LCA2MywgMjE4LCA3MywgMSwgMTg0LCA2MywgMjE4LCA3MywgMSwgMjE1LCAxODMsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE3NSwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgMzgsIDYzLCAyMTgsIDczLCAxLCAyNDYsIAotICAgIDMzLCA2MywgMjE4LCA3MywgMSwgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIDEsIDIxMCwgODIsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMTAsIDExNiwgNjMsIDIxOCwgNzMsIDEsIDI1NSwgMTY2LCA2MywgMjE4LCA3MywgMSwgMTkxLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjA1LCA2MywgMjE4LCA3MywgMSwgMjMzLCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyMjAsIDEwMiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxOCwgMjIzLCA2MywgMjE4LCA3MywgMSwgMjA2LCA2MywgMjE4LCA3MywgMSwgMTYyLCA2MywgMjE4LCA3MywgMSwgNjEsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyMzMsIDIzMSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIxMiwgNjUsIDYzLCAyMTgsIDczLCAKLSAgICAxLCAyNDQsIDc3LCAxOTEsIDYzLCAyMTgsIDczLCAxLCAyNDQsIDc3LCAyMDUsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIAotICAgIDIzNCwgMTMyLCA2MywgMjMzLCAyMTgsIDIyMiwgMTQxLCAyMzQsIDEzMywgMjUxLCA2OSwgMjMwLCAyMDIsIDI1MSwgNywgCi0gICAgNjMsIDI1MCwgMjUyLCA1LCAxMTQsIDI1MiwgNzAsIDYzLCAyNTAsIDI1MiwgNSwgMTkyLCAyNTIsIDcwLCA2MywgMjUwLCAKLSAgICAyNTIsIDUsIDI1MCwgMjUzLCAyMTcsIDIwLCA2MywgMjUwLCAyNTIsIDUsIDIyMSwgMjA3LCAyNTUsIDE2NSwgNjMsIDE2LCAKLSAgICAyNDYsIDkxLCAyNTEsIDEyNSwgNjMsIDE2LCAyMjMsIDEyOSwgMjIyLCAyMjIsIDYzLCAxNiwgMjI2LCA3NywgMjQzLCA2MywgCi0gICAgNjMsIDE2LCAyMjMsIDEyOSwgMjIyLCAyMjMsIDIyMywgNDIsIDI0MiwgMTQ1LCA2MywgMTYsIDIyNSwgMTEyLCAxOTAsIDYzLCAKLSAgICAxNiwgMjI4LCA1OSwgMjUxLCAxMjUsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIDIyNywgMTM5LCAyNTUsIDE2MiwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjQyLCAxMTcsIDI1NSwgMTYyLCA2MywgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAKLSAgICAyNTEsIDY5LCAyNTUsIDE2MiwgNjMsIDUsIDIyMywgMTMwLCAyMjksIDIxOSwgMjIzLCAxMzAsIDI0NywgMTU4LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDIsIDExNiwgNjMsIDE2NCwgMjUxLCAxMjksIDIyMCwgMywgMjQyLCAyMTUsIDIzMCwgCi0gICAgMjQ4LCAyMjMsIDQxLCA2MywgMTY0LCAyMzAsIDE2MywgMjExLCAwLCAyNDIsIDIxNSwgMjMwLCAyNDgsIDIyMywgNDEsIDYzLCAKLSAgICAxNjQsIDIyNywgMTM5LCAyMTUsIDE3MiwgNjMsIDE2NCwgNjUsIDI1MSwgMTUyLCAyMjIsIDIxMywgMjExLCAwLCAyMzAsIAotICAgIDI0OCwgMjMxLCA5MywgMTg0LCA2MywgMTY0LCAyNDksIDI1MiwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMjAsIDEwOSwgMTg0LCAyMjIsIDI1MCwgMjE3LCAyNTUsIDUwLCAyMzMsIDQ1LCAyMTcsIDI1NSwgNTAsIDIyMiwgCi0gICAgMjUwLCAyMTcsIDI1NSwgNSwgMiwgMjQ3LCAxMTgsIDIzMywgNDUsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgNjMsIAotICAgIDE2NCwgMjMzLCA1NSwgMjMxLCA5NiwgMjIyLCAxNDMsIDYzLCAxNjQsIDIxNSwgMjUwLCAyMzEsIDk2LCAyMjIsIDE0MywgCi0gICAgNjgsIDEsIDE3NiwgNjgsIDEsIDIzNCwgMTMyLCA2OCwgMSwgMjQzLCAxMzUsIDY4LCAxLCAyNDIsIDI0OSwgNjgsIDEsIAotICAgIDIyOSwgNzcsIDY4LCAxLCAyNTEsIDMzLCA2OCwgMSwgMjUwLCAxNTcsIDY4LCAxLCAyMzUsIDE0MSwgNjgsIDEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjI3LCAxNjUsIDY4LCAxLCAyMjgsIDc2LCA2OCwgMSwgMjE1LCAxNTYsIDY4LCAxLCAyMTUsIDE0NCwgCi0gICAgNjgsIDEsIDI0OCwgMTM1LCA2OCwgMSwgMjQ4LCAxMTksIDY4LCAxLCAyMjgsIDExMCwgNjgsIDEsIDIxNywgMTA1LCA2OCwgCi0gICAgMSwgMjE2LCAyMDgsIDY4LCAxLCAyNDgsIDIyMSwgNjgsIDEsIDI0OCwgMjUsIDY4LCAxLCAxOTcsIDY4LCAxLCAxOTAsIDY4LCAKLSAgICAxLCAyMjUsIDE0NywgNjgsIDEsIDI1MiwgMTkxLCA2OCwgMSwgMjUyLCAxOCwgNjgsIDEsIDE4NCwgNjgsIDEsIDE5MSwgNjgsIAotICAgIDEsIDIwNSwgNjgsIDEsIDIzMywgMTM1LCA2OCwgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIAotICAgIDIzMiwgMTg0LCA2OCwgMSwgNjEsIDY4LCAxLCAyMjAsIDg2LCA2MSwgNjgsIDEsIDczLCA2OCwgMSwgMjM2LCAzMywgNjgsIAotICAgIDEsIDcwLCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAxLCA3NSwgNjgsIDEsIDIzMCwgMTUxLCA3NSwgNjgsIDEsIDc2LCA2OCwgMSwgCi0gICAgMjUzLCAxOTIsIDY4LCAyNSwgNSwgMjE3LCA2NCwgMjU1LCA3MywgNjgsIDI1LCA1LCAyNTUsIDczLCA2OCwgMjUsIDUsIDczLCAKLSAgICA2OCwgMjUsIDUsIDIzNiwgMzMsIDY4LCAyNSwgNSwgNzAsIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzUsIAotICAgIDY4LCAyNSwgNSwgMjU0LCAyMDEsIDY4LCAyNSwgNSwgMjMwLCAxNTEsIDIzNiwgMzMsIDY4LCAyNSwgNSwgMjMwLCAxNTEsIAotICAgIDc2LCA2OCwgMjUsIDUsIDE2MCwgNDgsIDY4LCA1LCAyNTQsIDc1LCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIAotICAgIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIDI1MywgMjM1LCA2OCwgMTE2LCA1LCAxNDcsIDE5MSwgNjgsIDExNiwgNSwgMTQ3LCAKLSAgICAyMDUsIDY4LCAxMTYsIDUsIDE0NywgMjEyLCA2NSwgNjgsIDExNiwgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzMiwgCi0gICAgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAyMSwgMTEwLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCAKLSAgICA2OCwgMjEsIDE4OSwgNjgsIDIxLCAxOTQsIDY4LCAyMSwgMTk4LCA2OCwgMjEsIDE5NSwgNjgsIDIxLCAyMDAsIDY4LCA1LCAKLSAgICAyMzIsIDE5MiwgMjIxLCAxNzIsIDY4LCA1LCAyMjEsIDE3MiwgNjgsIDE2LCAyMzIsIDE1MywgNjgsIDE2LCAyNDksIDIxMywgCi0gICAgNjgsIDE2LCAyNTQsIDIyMCwgNjgsIDE2LCAyNDMsIDQ4LCA2OCwgMSwgMjIwLCAxMDIsIDY4LCAxLCAyMTgsIDIyMywgNjgsIAotICAgIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAyMjIsIDE4MCwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE4NSwgCi0gICAgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgCi0gICAgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDY4LCAxLCAyMzAsIDE1MSwgMjI5LCA3NywgNjgsIDEsIDIzMCwgMTUxLCAyMzUsIAotICAgIDExNCwgNjgsIDEsIDIzMCwgMTUxLCAyNTIsIDExMSwgNjgsIDEsIDIzMCwgMTUxLCAyNTIsIDEwNiwgNjgsIDExNiwgNSwgCi0gICAgMjMwLCAxNTEsIDE0NywgMTk3LCA2OCwgMTE2LCA1LCAyMzAsIDE1MSwgMTQ3LCAxODQsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAKLSAgICAxNDcsIDIzMywgMTM1LCA2OCwgMSwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyMjAsIDEwMiwgNjgsIDI1LCA1LCAyMjAsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDI0NSwgNTUsIDY4LCAxMzgsIDE2NCwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyNDEsIDI0NywgNjgsIDEzOCwgCi0gICAgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIzNCwgMTgzLCAyMjUsIDEyMSwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMDgsIAotICAgIDIzNCwgMjEzLCAyMTYsIDIwOCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjQsIDExNCwgNjgsIDI1LCAKLSAgICA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIAotICAgIDIxMywgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyOSwgNjgsIDUsIDIxMiwgNywgCi0gICAgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI4LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjcsIAotICAgIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNiwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTYsIDI1LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgMjI4LCAxMTAsIDY4LCAxLCAyNDUsIAotICAgIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIAotICAgIDI0MiwgMjE3LCA2OCwgMjUsIDUsIDI0MywgNTksIDIzNCwgMjEzLCA3MywgNjgsIDI1LCA1LCAyMzQsIDE4OCwgMjI2LCAKLSAgICAyMzQsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDcwLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyNDUsIDIwOSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDE3NiwgNjgsIDEsIDIyMCwgODYsIDIzNCwgMTMyLCA2OCwgMSwgMjIwLCA4NiwgMjQzLCAxMzUsIDY4LCAxLCAyMjAsIAotICAgIDg2LCAyNTEsIDMzLCA2OCwgMSwgMjIwLCA4NiwgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg2LCAyMjcsIDE2NSwgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0OCwgMjIxLCA2OCwgMSwgMjIwLCA4NiwgMTk3LCA2OCwgMSwgMjIwLCA4NiwgMjI1LCAxNDcsIDY4LCAxLCAKLSAgICAyMjAsIDg2LCAyNDQsIDE5NiwgNjgsIDEsIDIyMCwgODYsIDI1MiwgMTkxLCA2OCwgMSwgMjIwLCA4NiwgMjE2LCAyMDgsIAotICAgIDY4LCAxLCAyMjAsIDg2LCAxNjIsIDY4LCAxMTYsIDUsIDIyMCwgODYsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIAotICAgIDg2LCAyNTUsIDczLCA2OCwgMjUsIDUsIDIyMCwgODYsIDc1LCA2OCwgMjUsIDUsIDIyMCwgODYsIDE2MCwgNDgsIDY4LCAyNSwgCi0gICAgNSwgMjIwLCA4NiwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODYsIDIxNiwgCi0gICAgMjcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI1LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyNCwgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjQ5LCAxNTIsIDIxNiwgMjcsIDY4LCA1LCAyMjAsIDg2LCAKLSAgICAyNDksIDE1MiwgMjQ1LCAxNTMsIDIxNiwgMzAsIDY4LCAxLCAyMjIsIDEyOCwgMjI2LCA2MywgMjQ0LCAxOTYsIDY4LCA1LCAKLSAgICAyMjIsIDEyOCwgMjI2LCA2MywgMjE2LCAyNSwgNjgsIDIyMCwgODYsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4NiwgMjEsIAotICAgIDExMCwgNjgsIDIyMCwgODYsIDIxLCAxMDUsIDY4LCAyMjAsIDg2LCAyMSwgMTU4LCA2OCwgMjIwLCA4NiwgMjEsIDE2MSwgCi0gICAgNjgsIDIyMCwgODYsIDIxLCAxODksIDY4LCAyMjAsIDg2LCAyMSwgMTk0LCA2OCwgMjIwLCA4NiwgMjEsIDE5OCwgNjgsIAotICAgIDIyMCwgODYsIDIxLCAxOTUsIDY4LCAyMjAsIDg2LCAyMSwgMjAwLCA2OCwgNSwgMjM0LCAxMjYsIDIxNiwgMjksIDY4LCA1LCAKLSAgICAyMzQsIDEyNiwgMjE2LCAyNywgNjgsIDI1LCA1LCAyNTQsIDE5MCwgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTAsIDI1NCwgCi0gICAgMjAxLCA2OCwgMTYsIDIyMCwgODYsIDExMCwgNjgsIDE2LCAyMjAsIDg2LCAyNDUsIDMwLCA5OCwgNiwgMSwgMjU0LCAxMjMsIAotICAgIDk4LCA2LCAxLCAyNTIsIDE1MiwgOTgsIDYsIDEsIDI0MywgMTA2LCA5OCwgNiwgMSwgMjQ3LCAxMjgsIDk4LCA2LCAxLCAKLSAgICAyNDUsIDE1MCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCA4OSwgOTgsIDYsIDEsIDIxNywgNjAsIDk4LCAKLSAgICA2LCAxLCAyMzUsIDI1NSwgOTgsIDYsIDEsIDIzNCwgMjM0LCA5OCwgNiwgMSwgMjMzLCA4MSwgOTgsIDYsIDEsIDIzMSwgCi0gICAgMTg1LCA5OCwgNiwgMSwgMjI5LCAxOTUsIDk4LCA2LCAxLCAyMjYsIDE5NiwgOTgsIDYsIDEsIDIyNiwgMTcsIDk4LCA2LCAxLCAKLSAgICAyMTAsIDc4LCA5OCwgNiwgMSwgMjIzLCAxNzEsIDk4LCA2LCAxLCAyMjEsIDI0MywgOTgsIDYsIDEsIDIxNywgNTAsIDk4LCAKLSAgICA2LCAxLCAyMTQsIDE5MCwgOTgsIDYsIDEsIDIyNSwgMTQwLCA5OCwgNiwgMSwgMjM0LCAxMjEsIDk4LCA2LCAxLCAyNDIsIAotICAgIDI0MSwgOTgsIDYsIDEsIDIyNCwgNzMsIDk4LCA2LCAxLCAyMjAsIDIwLCA5OCwgNiwgMSwgMjUwLCA5NywgOTgsIDYsIDEsIAotICAgIDI1MSwgNywgOTgsIDYsIDEsIDIzNSwgMTAwLCA5OCwgNiwgMSwgMjUwLCA0MCwgOTgsIDYsIDEsIDI1MCwgMTQzLCA5OCwgNiwgCi0gICAgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExMSwgOTgsIDYsIDEsIDI0MiwgNDMsIDk4LCA2LCAxLCAyNDEsIDIzOCwgCi0gICAgOTgsIDYsIDEsIDI0MSwgMTc1LCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIDI0MiwgNCwgOTgsIDYsIDEsIDI0MSwgCi0gICAgNjUsIDk4LCA2LCAxLCAyMTAsIDI0NiwgOTgsIDYsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjU0LCAxMjMsIDk4LCAxLCAyNTIsIAotICAgIDE1MiwgOTgsIDEsIDI0MywgMTA2LCA5OCwgMSwgMjQ3LCAxMjgsIDk4LCAxLCAyNDUsIDE1MCwgOTgsIDEsIDIxMywgMTYwLCAKLSAgICA5OCwgMSwgMjEwLCA4OSwgOTgsIDEsIDIxNywgNjAsIDk4LCAxLCAyMzUsIDI1NSwgOTgsIDEsIDIzNCwgMjM0LCA5OCwgMSwgCi0gICAgMjMzLCA4MSwgOTgsIDEsIDIzMSwgMTg1LCA5OCwgMSwgMjI5LCAxOTUsIDk4LCAxLCAyMjYsIDE5NiwgOTgsIDEsIDIyNiwgCi0gICAgMTcsIDk4LCAxLCAyMTAsIDc4LCA5OCwgMSwgMjIzLCAxNzEsIDk4LCAxLCAyMjEsIDI0MywgOTgsIDEsIDIxNywgNTAsIDk4LCAKLSAgICAxLCAyMTQsIDE5MCwgOTgsIDEsIDIyNSwgMTQwLCA5OCwgMSwgMjM0LCAxMjEsIDk4LCAxLCAyNDIsIDI0MSwgOTgsIDEsIAotICAgIDIyNCwgNzMsIDk4LCAxLCAyMjAsIDIwLCA5OCwgMSwgMjUwLCA5NywgOTgsIDEsIDI1MSwgNywgOTgsIDEsIDIzNSwgMTAwLCAKLSAgICA5OCwgMSwgMjUwLCA0MCwgOTgsIDEsIDI1MCwgMTQzLCA5OCwgMSwgMjExLCAxNjMsIDk4LCAxLCAyMzUsIDExMSwgOTgsIDEsIAotICAgIDI0MiwgNDMsIDk4LCAxLCAyNDEsIDIzOCwgOTgsIDEsIDI0MSwgMTc1LCA5OCwgMSwgMjEyLCAyMiwgOTgsIDEsIDI0MiwgNCwgCi0gICAgOTgsIDEsIDI0MSwgNjUsIDk4LCAxLCAyNDQsIDEyMSwgOTgsIDEsIDIxMCwgMjQ2LCA5OCwgMSwgMjQ1LCAxNjUsIDk4LCAxLCAKLSAgICAyMTUsIDk0LCAyNDMsIDEwNiwgOTgsIDEsIDI1NCwgMTk2LCA5OCwgMjI2LCAxNSwgMjIwLCAxMzcsIDU4LCAxLCA5OCwgCi0gICAgMjI5LCAxOTUsIDk4LCAxLCAyNTQsIDIzMiwgOTgsIDEsIDI0MiwgMywgNTAsIDk4LCAxLCAyMzMsIDEyNywgNTAsIDI0LCAKLSAgICAxMDAsIDIzNCwgNTgsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAyMjgsIDIyNiwgMjQsIDEwMCwgMjE2LCAxMDEsIAotICAgIDI0LCAxMDAsIDIxOCwgMjA0LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMzAsIDIxNywgMjQsIDEwMCwgMjI1LCA5NSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMTIsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTgsIDIwOSwgMjQsIDEwMCwgMjM2LCAKLSAgICA1NiwgMjQsIDEwMCwgMjUwLCA0NiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDI1MCwgMTA2LCAyNCwgMTAwLCAyMzQsIAotICAgIDExMCwgMjQsIDEwMCwgMjE2LCAxNzMsIDI0LCAxMDAsIDIyNSwgMTMxLCAyNCwgMTAwLCAyNDEsIDE3MiwgMjQsIDEwMCwgCi0gICAgMjI4LCAyMjIsIDI0LCAxMDAsIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjgsIDIxNiwgMjQsIDEwMCwgMjI4LCAyMjAsIDI0LCAKLSAgICAxMDAsIDIxNiwgOTgsIDI0LCAxMDAsIDIyMywgMTQsIDI0LCAxMDAsIDIxOCwgMjExLCAyNCwgMTAwLCAyMjMsIDI0LCAyNCwgCi0gICAgMTAwLCAyMzQsIDIxOCwgMjQsIDEwMCwgMjMwLCAyMTAsIDI0LCAxMDAsIDIzNCwgMjIxLCAyNCwgMTAwLCAyMjUsIDkwLCAKLSAgICAyNCwgMTAwLCAyMjUsIDg4LCAyNCwgMTAwLCAyMjUsIDc2LCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgMTAwLCAyMjUsIDgyLCAKLSAgICAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDc4LCAyNCwgMTAwLCAyMjUsIDgzLCAKLSAgICAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDk0LCAyNCwgMTAwLCAyMjUsIDc3LCAyNCwgMTAwLCAyMjUsIDg3LCAKLSAgICAyNCwgMTAwLCAyMzQsIDIxOSwgMjQsIDEwMCwgMjM0LCAyMTcsIDI0LCAxMDAsIDIxOSwgMTQxLCAyNCwgMTAwLCAyMTksIAotICAgIDEzOSwgMjQsIDEwMCwgMjE5LCAxMzEsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDE0MCwgMjQsIDEwMCwgCi0gICAgMjE5LCAxMzYsIDI0LCAxMDAsIDIxOSwgMTM1LCAyNCwgMTAwLCAyMTksIDEzMywgMjQsIDEwMCwgMjE5LCAxNDQsIDI0LCAKLSAgICAxMDAsIDIxOSwgMTQ2LCAyNCwgMTAwLCAyMTksIDE0NywgMjQsIDEwMCwgMjE5LCAxNDIsIDI0LCAxMDAsIDIxOSwgMTMyLCAKLSAgICAyNCwgMTAwLCAyMTksIDEzNywgMjQsIDEwMCwgMjE5LCAxNDUsIDI0LCAxMDAsIDI1MCwgOTAsIDI0LCAxMDAsIDI1MCwgODgsIAotICAgIDI0LCAxMDAsIDI1MCwgMTY4LCAyNCwgMTAwLCAyNTAsIDE2NiwgMjQsIDEwMCwgMjI2LCAzMiwgMjQsIDEwMCwgMjM2LCA1MSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MiwgMjQsIDEwMCwgMjM2LCA1MCwgMjQsIDEwMCwgMjM2LCA0NywgMjQsIDEwMCwgMjM2LCA0NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjE4LCAyMTYsIDI0LCAxMDAsIDIzNiwgNTQsIDI0LCAxMDAsIDIzNiwgNTUsIAotICAgIDI0LCAxMDAsIDIzNiwgNDMsIDI0LCAxMDAsIDIzNiwgNDgsIDI0LCAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNDUsIAotICAgIDI0LCAxMDAsIDI1MCwgOTEsIDI0LCAxMDAsIDI1MCwgODksIDI0LCAxMDAsIDI1MCwgMTY5LCAyNCwgMTAwLCAyNTAsIDE2NywgCi0gICAgMjQsIDEwMCwgMjUwLCAxMDQsIDI0LCAxMDAsIDI1MCwgMTA1LCAyNCwgMTAwLCAyNTAsIDkyLCAyNCwgMTAwLCAyNTAsIAotICAgIDE3MCwgMjQsIDEwMCwgMjI1LCAxMjksIDI0LCAxMDAsIDIzNCwgMjIwLCAyNCwgMTAwLCAyMTgsIDIxNywgMjQsIDEwMCwgCi0gICAgMjExLCAzMiwgMjQsIDEwMCwgMjM0LCA0OSwgMjQsIDEwMCwgMjI4LCAyMTgsIDI0LCAxMDAsIDIyOCwgMjI0LCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMywgMjQsIDEwMCwgMjE2LCA5NSwgMjQsIDEwMCwgMjQ0LCAxMDMsIDI0LCAxNDMsIDI0NCwgMTAzLCAyNCwgCi0gICAgMTQzLCA2MSwgMjQsIDE0MywgMjU0LCAyNDMsIDI0LCAxNDMsIDE5MSwgMjQsIDE0MywgMjExLCA5MiwgMjQsIDE0MywgMjQ1LCAKLSAgICAxMTcsIDI0LCAxNDMsIDc1LCAyNCwgMTQzLCAyMTEsIDM2LCAyNCwgMTQzLCAyMTEsIDQ3LCAyNCwgMTQzLCA3NiwgMjQsIAotICAgIDE0MywgMjEyLCA2NSwgMjQsIDE0MywgMjEyLCA2MiwgMjQsIDE0MywgMjI2LCAyMzQsIDI0LCAxNDMsIDIxMCwgMjQ0LCAyNCwgCi0gICAgMTQzLCA3MCwgMjQsIDE0MywgMjEyLCAxMSwgMjQsIDE0MywgMjEyLCAyMiwgMjQsIDE0MywgMjExLCAyNTAsIDI0LCAxNDMsIAotICAgIDIxMCwgMjEyLCAyNCwgMTQzLCAyNDUsIDU1LCAyNCwgMTQzLCAyMTEsIDgsIDI0LCAxNDMsIDczLCAyNCwgMTQzLCAyNTUsIAotICAgIDE1NywgMjQsIDE0MywgMjU1LCAxNTYsIDI0LCAxNDMsIDIxMSwgMTA2LCAyNCwgMTQzLCAyMTEsIDEwNCwgMjQsIDE0MywgCi0gICAgMjQ1LCAxMTUsIDI0LCAxNDMsIDI0NSwgMTE0LCAyNCwgMTQzLCAyNDUsIDExNiwgMjQsIDE0MywgMjExLCAzNSwgMjQsIAotICAgIDE0MywgMjExLCAzNCwgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgMjI3LCA4NSwgMjQsIDE0MywgMjI3LCA3OCwgMjQsIAotICAgIDE0MywgMjI3LCA4MywgMjQsIDE0MywgMjI3LCA4MSwgMjQsIDE0MywgMjEwLCAyMzgsIDI0LCAxNDMsIDIxMCwgMjM3LCAyNCwgCi0gICAgMTQzLCAyMTAsIDIzNiwgMjQsIDE0MywgMjEwLCAyMzksIDI0LCAxNDMsIDIxMCwgMjQwLCAyNCwgMTQzLCAyMTUsIDMwLCAKLSAgICAyNCwgMTQzLCAyMTUsIDI5LCAyNCwgMTQzLCAyMTUsIDI3LCAyNCwgMTQzLCAyMTUsIDI0LCAyNCwgMTQzLCAyMTUsIDI1LCAKLSAgICAyNCwgMTQzLCAyMTAsIDIxMSwgMjQsIDE0MywgMjEwLCAyMDgsIDI0LCAxNDMsIDIxMCwgMjA5LCAyNCwgMTQzLCAyMTAsIAotICAgIDIwMywgMjQsIDE0MywgMjEwLCAyMDQsIDI0LCAxNDMsIDIxMCwgMjA1LCAyNCwgMTQzLCAyMTAsIDIwNywgMjQsIDE0MywgCi0gICAgMjQ1LCA0OSwgMjQsIDE0MywgMjQ1LCA1MSwgMjQsIDE0MywgMjExLCA3LCAyNCwgMTQzLCAyNDAsIDE1MywgMjQsIDE0MywgCi0gICAgMjQwLCAxNDUsIDI0LCAxNDMsIDI0MCwgMTQ4LCAyNCwgMTQzLCAyNDAsIDE0NiwgMjQsIDE0MywgMjQwLCAxNTAsIDI0LCAKLSAgICAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNTQsIDM0LCAyNCwgMTQzLCAyNTQsIDMxLCAyNCwgMTQzLCAyNTQsIDI5LCAyNCwgCi0gICAgMTQzLCAyNTQsIDMwLCAyNCwgMTQzLCAyMTgsIDIyMCwgMjQsIDE0MywgMjU1LCAxNTgsIDI0LCAxNDMsIDIxMSwgMTA1LCAKLSAgICAyNCwgMTQzLCAyMTEsIDMzLCAyNCwgMTQzLCAyMjcsIDgwLCAyNCwgMTQzLCAyMjcsIDc5LCAyNCwgOTAsIDIzNCwgNTgsIAotICAgIDI0LCA5MCwgMjE4LCAyMTUsIDI0LCA5MCwgMjM0LCA1MSwgMjQsIDkwLCAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyNCwgCi0gICAgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAyMTYsIDEwMSwgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgMjEsIDI0LCAKLSAgICA5MCwgMjIzLCAxOCwgMjQsIDkwLCAyMjMsIDExLCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDEsIDI0LCA5MCwgCi0gICAgMjIzLCAxMiwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIyNSwgOTUsIDI0LCA5MCwgMjI1LCAKLSAgICA4NCwgMjQsIDkwLCAyMTksIDE0OCwgMjQsIDkwLCAyMTgsIDIwOSwgMjQsIDkwLCAyMzYsIDU2LCAyNCwgOTAsIDI1MCwgNDYsIAotICAgIDI0LCA5MCwgMjUwLCAxMDYsIDI0LCA5MCwgMjM0LCAxMTAsIDI0LCA5MCwgMjE2LCAxNzMsIDI0LCA5MCwgMjI1LCAxMzEsIAotICAgIDI0LCA5MCwgMjQxLCAxNzIsIDI0LCA5MCwgMjM0LCA1MiwgMjQsIDkwLCAyMzQsIDUwLCAyNCwgOTAsIDIyOCwgMjIyLCAyNCwgCi0gICAgOTAsIDIyOCwgMjE2LCAyNCwgOTAsIDIyOCwgMjE4LCAyNCwgOTAsIDIyOCwgMjIxLCAyNCwgOTAsIDIyOCwgMjE3LCAyNCwgCi0gICAgOTAsIDIxNiwgOTgsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAyMjMsIDE5LCAyNCwgOTAsIDIyMywgMTQsIDI0LCA5MCwgCi0gICAgMjIzLCAwLCAyNCwgOTAsIDIyMiwgMjU1LCAyNCwgOTAsIDIxOCwgMjExLCAyNCwgOTAsIDIyMywgMTYsIDI0LCA5MCwgMjIzLCAKLSAgICAxNSwgMjQsIDkwLCAyMjMsIDgsIDI0LCA5MCwgMjIzLCAxMCwgMjQsIDkwLCAyMjMsIDIzLCAyNCwgOTAsIDIyMywgMywgMjQsIAotICAgIDkwLCAyMjMsIDEzLCAyNCwgOTAsIDIyMywgMjIsIDI0LCA5MCwgMjIyLCAyNTQsIDI0LCA5MCwgMjMwLCAyMTMsIDI0LCA5MCwgCi0gICAgMjMwLCAyMDgsIDI0LCA5MCwgMjMwLCAyMTAsIDI0LCA5MCwgMjMwLCAyMDcsIDI0LCA5MCwgMjMwLCAyMDUsIDI0LCA5MCwgCi0gICAgMjMwLCAyMTEsIDI0LCA5MCwgMjMwLCAyMTYsIDI0LCA5MCwgMjMwLCAyMTQsIDI0LCA5MCwgMjM0LCAyMjEsIDI0LCA5MCwgCi0gICAgMjI1LCA4NiwgMjQsIDkwLCAyMjUsIDg3LCAyNCwgOTAsIDIyNSwgOTIsIDI0LCA5MCwgMjM0LCAyMTksIDI0LCA5MCwgMjE5LCAKLSAgICAxNDEsIDI0LCA5MCwgMjE5LCAxMzEsIDI0LCA5MCwgMjE5LCAxMzQsIDI0LCA5MCwgMjE5LCAxMzYsIDI0LCA5MCwgMjI2LCAKLSAgICAzMiwgMjQsIDkwLCAyMzYsIDUxLCAyNCwgOTAsIDIzNiwgNDQsIDI0LCA5MCwgMjE4LCAyMTYsIDI0LCA5MCwgMjM2LCA1MiwgCi0gICAgMjQsIDkwLCAyMTEsIDI2LCAyNCwgOTAsIDIxMSwgMjIsIDI0LCA5MCwgMjExLCAyMywgMjQsIDkwLCAyMjUsIDEyOSwgMjQsIAotICAgIDkwLCAyMzQsIDIyMCwgMjQsIDkwLCAyNDEsIDE3MCwgMjQsIDkwLCAyNDEsIDE2OCwgMjQsIDkwLCAyNDEsIDE3MSwgMjQsIAotICAgIDkwLCAyNDEsIDE2OSwgMjQsIDkwLCAyMTEsIDMyLCAyNCwgOTAsIDIzNCwgNTQsIDI0LCA5MCwgMjM0LCA1MywgMjQsIDkwLCAKLSAgICAyMzQsIDU3LCAyNCwgOTAsIDIzNCwgNTUsIDI0LCA5MCwgMjM0LCA1NiwgMjQsIDkwLCAyMTgsIDIxMywgMjksIDMsIDE2MiwgCi0gICAgMjksIDMsIDI0MCwgMjIyLCAyOSwgMywgMjQxLCAxODAsIDI5LCAzLCAyNDIsIDQ2LCAyOSwgMywgMjQxLCAyMjAsIDI5LCAzLCAKLSAgICAyNDEsIDIzOCwgMjksIDMsIDI0MSwgNjgsIDI5LCAzLCAyNDEsIDY3LCAyOSwgMywgMjMzLCAxMzUsIDI5LCAzLCAyMzIsIAotICAgIDk4LCAyOSwgMywgMjMyLCAyNDEsIDI5LCAzLCAyMzMsIDEzNCwgMjksIDMsIDIzMywgNTAsIDI5LCAzLCAyMzMsIDU4LCAyOSwgCi0gICAgMywgMjMyLCAxNTYsIDI5LCAzLCAyMzIsIDcwLCAyOSwgMywgMjQxLCAxODksIDI5LCAzLCAyNDEsIDE4MywgMjksIDMsIAotICAgIDI0MSwgMTg1LCAyOSwgMywgMjQxLCAxODgsIDI5LCAzLCAyNDEsIDE4NiwgMjksIDMsIDI0MSwgMTg3LCAyOSwgMywgMjQxLCAKLSAgICAxODQsIDI5LCAzLCAyNDEsIDE4MiwgMjksIDMsIDE4NCwgMjksIDMsIDIzMCwgMTAyLCAyOSwgMywgMjMwLCAyMzAsIDI5LCAKLSAgICAzLCAyMzEsIDIzNywgMjksIDMsIDIzMSwgODAsIDI5LCAzLCAyMzEsIDkxLCAyOSwgMywgMjMwLCAxNjEsIDI5LCAzLCAyMzAsIAotICAgIDQyLCAyOSwgMywgMjE3LCAxNjMsIDI5LCAzLCAyMTcsIDE1NywgMjksIDMsIDIxNywgMTU5LCAyOSwgMywgMjE3LCAxNjIsIAotICAgIDI5LCAzLCAyMTcsIDE2MCwgMjksIDMsIDIxNywgMTYxLCAyOSwgMywgMjE3LCAxNTgsIDI5LCAzLCAyMTcsIDE1NiwgMjksIAotICAgIDMsIDIwNSwgMjksIDMsIDIyMiwgMTQwLCAyOSwgMywgMjIzLCAzNSwgMjksIDMsIDIyMywgMTg0LCAyOSwgMywgMjIzLCAKLSAgICAxMDgsIDI5LCAzLCAyMjMsIDEyOCwgMjksIDMsIDIyMiwgMjExLCAyOSwgMywgMjIyLCAxMDksIDI5LCAzLCAyMDYsIDI5LCAKLSAgICAzLCAyMTgsIDgzLCAyOSwgMywgMjE5LCAxOTEsIDI5LCAzLCAyMjIsIDMxLCAyOSwgMywgMjIxLCAxNzAsIDI5LCAzLCAyMjEsIAotICAgIDE4MSwgMjksIDMsIDIxOSwgNTgsIDI5LCAzLCAyMTcsIDI1MywgMjksIDMsIDIyMCwgMTAyLCAyOSwgMywgMjE5LCAyMjUsIAotICAgIDI5LCAzLCAyMjAsIDMyLCAyOSwgMywgMjIwLCA5OCwgMjksIDMsIDIyMCwgNjEsIDI5LCAzLCAyMjAsIDYzLCAyOSwgMywgCi0gICAgMjIwLCA3LCAyOSwgMywgMjE5LCAyMDgsIDI5LCAzLCAyMjQsIDg4LCAyOSwgMywgMjI0LCAzMCwgMjksIDMsIDIyNCwgNTMsIAotICAgIDI5LCAzLCAyMjQsIDg3LCAyOSwgMywgMjI0LCA2OCwgMjksIDMsIDIyNCwgNjksIDI5LCAzLCAyMjQsIDQyLCAyOSwgMywgCi0gICAgMjI0LCA0MSwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAyMzgsIDI5LCAzLCAyMjMsIDI0MSwgMjksIDMsIDIyMywgCi0gICAgMjM5LCAyOSwgMywgMjIzLCAyNDAsIDI5LCAzLCAyMjQsIDY1LCAyOSwgMywgMjI0LCA1OSwgMjksIDMsIDIyNCwgNjEsIDI5LCAKLSAgICAzLCAyMjQsIDY0LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjMsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCAKLSAgICA1OCwgMjksIDMsIDIyNCwgNTQsIDI5LCAzLCAyMjQsIDU3LCAyOSwgMywgMjI0LCA1NSwgMjksIDMsIDIyNCwgNTYsIDI5LCAKLSAgICAzLCAyNTIsIDE5MSwgMjksIDMsIDI1MSwgMTI1LCAyOSwgMywgMjUyLCA2LCAyOSwgMywgMjUyLCAxODksIDI5LCAzLCAyNTIsIAotICAgIDY2LCAyOSwgMywgMjUyLCA3NSwgMjksIDMsIDI1MSwgMjA1LCAyOSwgMywgMjUxLCA4MywgMjksIDMsIDIxNCwgMjcsIDI5LCAKLSAgICAzLCAyMTIsIDExNiwgMjksIDMsIDIxMywgMTc2LCAyOSwgMywgMjE0LCAyNiwgMjksIDMsIDIxMywgMjUwLCAyOSwgMywgCi0gICAgMjEzLCAyNTUsIDI5LCAzLCAyMTMsIDEzOCwgMjksIDMsIDIxMiwgMTA3LCAyOSwgMywgMjE3LCAxMDUsIDI5LCAzLCAyMTUsIAotICAgIDExOCwgMjksIDMsIDIxNiwgMTE3LCAyOSwgMywgMjE3LCAxMDEsIDI5LCAzLCAyMTcsIDExLCAyOSwgMywgMjE3LCAyMiwgCi0gICAgMjksIDMsIDExMSwgMjksIDMsIDIxNSwgODAsIDI5LCAzLCAyNTEsIDMzLCAyOSwgMywgMjQ5LCAxMTIsIDI5LCAzLCAyNTAsIAotICAgIDUxLCAyOSwgMywgMjUxLCAzMiwgMjksIDMsIDI1MCwgMTgyLCAyOSwgMywgMjUwLCAxOTAsIDI5LCAzLCAyNDksIDIzOCwgCi0gICAgMjksIDMsIDI0OSwgODEsIDI5LCAzLCAyMTEsIDE2NSwgMjksIDMsIDIxMSwgMTQxLCAyOSwgMywgMjExLCAxNTcsIDI5LCAzLCAKLSAgICAyMTEsIDE2NCwgMjksIDMsIDIxMSwgMTYxLCAyOSwgMywgMjExLCAxNjIsIDI5LCAzLCAyMTEsIDE0OCwgMjksIDMsIDIxMSwgCi0gICAgMTQ3LCAyOSwgMywgMjExLCAxMzYsIDI5LCAzLCAyMTEsIDEzMiwgMjksIDMsIDIxMSwgMTM1LCAyOSwgMywgMjExLCAxMzMsIAotICAgIDI5LCAzLCAyMTEsIDEzNCwgMjksIDMsIDE5NywgMjksIDMsIDIyNywgMjM3LCAyOSwgMywgMjI4LCAyMzMsIDI5LCAzLCAKLSAgICAyMjksIDIyNSwgMjksIDMsIDIyOSwgMTAzLCAyOSwgMywgMjI5LCAxMDcsIDI5LCAzLCAyMjgsIDc0LCAyOSwgMywgMjI3LCAKLSAgICAxNzQsIDI5LCAzLCAyMjcsIDE2NSwgMjksIDMsIDIyNywgMTI4LCAyOSwgMywgMjI3LCAxNDgsIDI5LCAzLCAyMjcsIDE2NCwgCi0gICAgMjksIDMsIDIyNywgMTU1LCAyOSwgMywgMjI3LCAxNTYsIDI5LCAzLCAyMjcsIDEzNCwgMjksIDMsIDIyNywgMTE5LCAyOSwgCi0gICAgMywgMjQyLCAxODAsIDYxLCAyOSwgMywgMjQyLCAxODAsIDcwLCAyOSwgMywgMjQyLCAxODAsIDczLCAyOSwgMywgMjQyLCAKLSAgICAxODAsIDI1NSwgNzMsIDI5LCAzLCAyNDIsIDE4MCwgMjQ1LCAyMDksIDI5LCAzLCAyNDIsIDE4MCwgNzUsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgNzYsIDI5LCAzLCAyNDIsIDE4MCwgMjEyLCA2NSwgMjksIDMsIDE3NiwgMjksIDMsIDIzMywgMjE3LCAyOSwgMywgCi0gICAgMjM0LCA5MiwgMjksIDMsIDIzNSwgMTAsIDI5LCAzLCAyMzQsIDE4MSwgMjksIDMsIDIzNCwgMTgyLCAyOSwgMywgMjM0LCAKLSAgICAyOCwgMjksIDMsIDIzNCwgMjcsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTc2LCAyOSwgMywgMjMzLCAxODEsIAotICAgIDI5LCAzLCAyMzMsIDE3NywgMjksIDMsIDIzMywgMTc4LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE2NSwgMjksIAotICAgIDMsIDIzMywgMTY3LCAyOSwgMywgMjMzLCAxNzAsIDI5LCAzLCAyMzMsIDE2OCwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgCi0gICAgMjMzLCAxNjYsIDI5LCAzLCAyMzMsIDE2NCwgMjksIDMsIDIzMywgMTYwLCAyOSwgMywgMjMzLCAxNjMsIDI5LCAzLCAyMzMsIAotICAgIDE2MSwgMjksIDMsIDIzMywgMTYyLCAyOSwgMywgMjEyLCA2NSwgMjksIDMsIDIxMSwgMTk1LCAyOSwgMywgMjExLCAyNTAsIAotICAgIDI5LCAzLCAyMTIsIDY0LCAyOSwgMywgMjEyLCAxNywgMjksIDMsIDIxMiwgMjIsIDI5LCAzLCAyMTEsIDIyNywgMjksIDMsIAotICAgIDIxMSwgMjI2LCAyOSwgMywgMjI1LCAxMzksIDYxLCAyOSwgMywgMjI1LCAxMzksIDcwLCAyOSwgMywgMjI1LCAxMzksIDczLCAKLSAgICAyOSwgMywgMjI1LCAxMzksIDI1NSwgNzMsIDI5LCAzLCAyMjUsIDEzOSwgMjQ1LCAyMDksIDI5LCAzLCAyMjUsIDEzOSwgNzUsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgNzYsIDI5LCAzLCAyMTAsIDExNiwgMjksIDMsIDIxMCwgMTMsIDI5LCAzLCAyMTAsIDQ0LCAyOSwgCi0gICAgMywgMjEwLCAxMTUsIDI5LCAzLCAyMTAsIDkyLCAyOSwgMywgMjEwLCA5NCwgMjksIDMsIDIxMCwgMjMsIDI5LCAzLCAyMTAsIAotICAgIDAsIDI5LCAzLCAyMTAsIDgyLCAyOSwgMywgMjEwLCA2MiwgMjksIDMsIDIxMCwgNjksIDI5LCAzLCAyMTAsIDgxLCAyOSwgMywgCi0gICAgMjEwLCA3MywgMjksIDMsIDIxMCwgNzQsIDI5LCAzLCAyMTAsIDY3LCAyOSwgMywgMjEwLCA1MywgMjksIDMsIDE5MSwgMjksIAotICAgIDMsIDIxMCwgMjEyLCAyOSwgMywgMjExLCA4LCAyOSwgMywgMjExLCAxMDMsIDI5LCAzLCAyMTEsIDQ0LCAyOSwgMywgMjExLCAKLSAgICA0NywgMjksIDMsIDIxMCwgMjQ0LCAyOSwgMywgMjEwLCAyMzUsIDI5LCAzLCAyNDgsIDIyMSwgMjksIDMsIDI0NiwgNzgsIAotICAgIDI5LCAzLCAyNDgsIDMsIDI5LCAzLCAyNDgsIDIyMCwgMjksIDMsIDI0OCwgNzcsIDI5LCAzLCAyNDgsIDkwLCAyOSwgMywgCi0gICAgMjQ3LCAxNDUsIDI5LCAzLCAyNDYsIDQ3LCAyOSwgMywgMjQ4LCAxMzUsIDI5LCAzLCAyNDgsIDEwMCwgMjksIDMsIDI0OCwgCi0gICAgMTEyLCAyOSwgMywgMjQ4LCAxMzQsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0OCwgMTIzLCAyOSwgMywgMjQ4LCAxMDUsIAotICAgIDI5LCAzLCAyNDgsIDkxLCAyOSwgMywgMjM1LCAxNDEsIDI5LCAzLCAyMzUsIDUxLCAyOSwgMywgMjM1LCAxMDgsIDI5LCAzLCAKLSAgICAyMzUsIDE0MCwgMjksIDMsIDIzNSwgMTI0LCAyOSwgMywgMjM1LCAxMjYsIDI5LCAzLCAyMzUsIDY4LCAyOSwgMywgMjM1LCAKLSAgICAzMSwgMjksIDMsIDI0MywgMTM1LCAyOSwgMywgMjQyLCAxMTMsIDI5LCAzLCAyNDIsIDIxNCwgMjksIDMsIDI0MywgMTMyLCAKLSAgICAyOSwgMywgMjQzLCA1NSwgMjksIDMsIDI0MywgNjIsIDI5LCAzLCAyNDIsIDE3NCwgMjksIDMsIDI0MiwgMTczLCAyOSwgMywgCi0gICAgMjQyLCA3OCwgMjksIDMsIDI0MiwgNzQsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NSwgMjksIDMsIDI0MiwgNzYsIAotICAgIDI5LCAzLCAyNDMsIDI5LCAyOSwgMywgMjQzLCA5LCAyOSwgMywgMjQzLCAxOSwgMjksIDMsIDI0MywgMjgsIDI5LCAzLCAKLSAgICAyNDMsIDIzLCAyOSwgMywgMjQzLCAyNCwgMjksIDMsIDI0MywgMTMsIDI5LCAzLCAyNDIsIDI1NCwgMjksIDMsIDIxNiwgCi0gICAgMjA4LCAyOSwgMywgMjE2LCAxMzYsIDI5LCAzLCAyMTYsIDE3NSwgMjksIDMsIDIxNiwgMjA3LCAyOSwgMywgMjE2LCAxOTQsIAotICAgIDI5LCAzLCAyMTYsIDE5NSwgMjksIDMsIDIxNiwgMTU2LCAyOSwgMywgMjE2LCAxMjgsIDI5LCAzLCAyNTAsIDE1NywgMjksIAotICAgIDMsIDI1MCwgNjksIDI5LCAzLCAyNTAsIDExMCwgMjksIDMsIDI1MCwgMTU2LCAyOSwgMywgMjUwLCAxMjgsIDI5LCAzLCAKLSAgICAyNTAsIDEzMSwgMjksIDMsIDI1MCwgODYsIDI5LCAzLCAyNTAsIDU4LCAyOSwgMywgMjI1LCAxNDcsIDI5LCAzLCAyMjUsIAotICAgIDExNCwgMjksIDMsIDIyNSwgMTMzLCAyOSwgMywgMjI1LCAxNDYsIDI5LCAzLCAyMjUsIDEzNSwgMjksIDMsIDIyNSwgMTM2LCAKLSAgICAyOSwgMywgMjI1LCAxMjEsIDI5LCAzLCAyMjUsIDExMCwgMjksIDMsIDIxNSwgMTgzLCAyOSwgMywgMjE1LCAxNjMsIDI5LCAKLSAgICAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTgyLCAyOSwgMywgMjE1LCAxNzcsIDI5LCAzLCAyMTUsIDE3OCwgMjksIDMsIAotICAgIDIxNSwgMTY2LCAyOSwgMywgMjE1LCAxNjEsIDI5LCAzLCAyMTUsIDM5LCAyOSwgMywgMjE1LCAzMSwgMjksIDMsIDIxNSwgCi0gICAgMzUsIDI5LCAzLCAyMTUsIDM4LCAyOSwgMywgMjE1LCAzNiwgMjksIDMsIDIxNSwgMzcsIDI5LCAzLCAyMTUsIDMzLCAyOSwgCi0gICAgMywgMjE1LCAzMiwgMjksIDMsIDI0NCwgMTk2LCAyOSwgMywgMjQzLCAyMzQsIDI5LCAzLCAyNDQsIDEyMSwgMjksIDMsIAotICAgIDI0NCwgMTk1LCAyOSwgMywgMjQ0LCAxNDcsIDI5LCAzLCAyNDQsIDE1NCwgMjksIDMsIDI0NCwgNDMsIDI5LCAzLCAyNDMsIAotICAgIDIxMywgMjksIDMsIDE5MCwgMjksIDMsIDIyNCwgMTUwLCAyOSwgMywgMjI1LCAxMDgsIDI5LCAzLCAyMjYsIDg5LCAyOSwgMywgCi0gICAgMjI1LCAyMTEsIDI5LCAzLCAyMjUsIDIyMSwgMjksIDMsIDIyNSwgMTYsIDI5LCAzLCAyMjQsIDExNCwgMjksIDMsIDIyMiwgCi0gICAgOTksIDI5LCAzLCAyMzAsIDMxLCAyOSwgMywgMjQzLCAyMDcsIDI5LCAzOCwgMjQzLCA1MywgMjIsIDI1LCAyMzMsIDIzLCAKLSAgICA3OCwgMjksIDM4LCAyNSwgMjMzLCAyMywgNzgsIDI5LCAzOCwgMjQzLCA1MywgNzgsIDI5LCAyMjEsIDE3MywgNzgsIDI5LCAKLSAgICAyMTEsIDIwOCwgMjksIDI0MywgMjI5LCAyMTgsIDEyOSwgMjksIDI0OSwgMjE5LCAyOSwgMjIwLCAxNTAsIDI5LCAyNDksIAotICAgIDIyNiwgMjksIDIyNCwgMTk5LCAyNDksIDIyNiwgMjksIDIyNCwgMTMsIDc4LCAyOSwgMjI2LCAxNSwgMjIwLCAxMzcsIDI5LCAKLSAgICAyMSwgMTEwLCAyOSwgMjEsIDEwNSwgMjksIDIxLCAxNTgsIDI5LCAyMSwgMTYxLCAyOSwgMjEsIDE4OSwgMjksIDIxLCAxOTQsIAotICAgIDI5LCAyMSwgMTk4LCAyOSwgMjEsIDE5NSwgMjksIDIxLCAyMDAsIDI5LCA1NCwgMjE2LCAyNDcsIDI5LCA1NCwgMjE1LCA3MywgCi0gICAgMjksIDU0LCAyMTYsIDE2MiwgMjksIDU0LCAyNDQsIDE1LCAyOSwgNTQsIDI0NCwgMTE0LCAyOSwgNTQsIDIxOSwgMTExLCAKLSAgICAyOSwgNTQsIDIyMCwgMTE2LCAyOSwgNTQsIDI0NSwgMTg0LCAyOSwgNTQsIDIyOCwgMTk1LCAyOSwgNTQsIDI0MCwgMjEwLCAKLSAgICAyOSwgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjksIDMsIDIyMSwgMTc3LCAyMzAsIDQyLCAyOSwgMywgMjMwLCAzOCwgMjksIAotICAgIDMsIDIzMCwgMzksIDI5LCAzLCAyMzAsIDQwLCAyOSwgMywgMjIxLCAxNzcsIDI1MSwgODMsIDI5LCAzLCAyNTEsIDgwLCAyOSwgCi0gICAgMywgMjUxLCA4MSwgMjksIDMsIDI1MSwgODIsIDI5LCAzLCAyMjEsIDE3NywgMjQzLCAyMTMsIDI5LCAzLCAyNDMsIDIwOSwgCi0gICAgMjksIDMsIDI0MywgMjEwLCAyOSwgMywgMjQzLCAyMTEsIDI5LCAzLCAyMjEsIDE3NywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIAotICAgIDExMCwgMjksIDMsIDIyNCwgMTExLCAyOSwgMywgMjI0LCAxMTIsIDI5LCAyMTYsIDMxLCAxNjQsIDIxMCwgMjQ3LCAyOSwgCi0gICAgMjE2LCAzMSwgMTY0LCAyNDgsIDQxLCAyOSwgMjE2LCAzMSwgMTY0LCAyMjIsIDIzOCwgMjksIDIxNiwgMzEsIDE2NCwgMjE5LCAKLSAgICAyNTEsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyNDcsIDIzNSwgMjksIDIxNiwgMzEsIDE2NCwgMjM0LCAxNjQsIAotICAgIDI5LCAyMTYsIDMxLCAxNjQsIDI1MCwgOTQsIDI5LCAyMTYsIDMxLCAxNjQsIDI0MSwgMTc3LCAyOSwgMjE2LCAzMSwgMTY0LCAKLSAgICAyNDgsIDQwLCAyOSwgMjE2LCAzMSwgMTY0LCAyMzMsIDE5NCwgMTY5LCAxLCA2MSwgMTY5LCAxLCA3NSwgMTY5LCAxLCA3MywgCi0gICAgMTY5LCAxLCA3NiwgMTY5LCAxLCA3MCwgMTY5LCAxLCAyMTQsIDEwNSwgMTY5LCAxLCAyNDMsIDEzNSwgMTY5LCAxLCAxNzYsIAotICAgIDE2OSwgMSwgMjQzLCA2MiwgMTY5LCAxLCAyNDIsIDIxNCwgMTY5LCAxLCAyNDIsIDE3NCwgMTY5LCAxLCAyNDIsIDExMywgCi0gICAgMTY5LCAxLCAyNDIsIDc5LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIDIzOCwgMTY5LCAxLCAyNDEsIDE4MCwgMTY5LCAxLCAKLSAgICAyNDEsIDY4LCAxNjksIDEsIDI0MCwgMjIyLCAxNjksIDEsIDI0MCwgMjAxLCAxNjksIDEsIDIzMywgMTM1LCAxNjksIDEsIAotICAgIDIzMywgNTgsIDE2OSwgMSwgMjMyLCAyNDEsIDE2OSwgMSwgMjMyLCAxNTYsIDE2OSwgMSwgMjMyLCA5OCwgMTY5LCAxLCAKLSAgICAyMzIsIDcxLCAxNjksIDEsIDE4NCwgMTY5LCAxLCAyMzEsIDkxLCAxNjksIDEsIDIzMCwgMjMwLCAxNjksIDEsIDIzMCwgCi0gICAgMTYxLCAxNjksIDEsIDIzMCwgMTAyLCAxNjksIDEsIDE5NywgMTY5LCAxLCAyNDEsIDkwLCAxNjksIDEsIDIyOSwgMjEzLCAKLSAgICAxNjksIDEsIDIyOSwgMTA3LCAxNjksIDEsIDIyOCwgMjMzLCAxNjksIDEsIDIyOCwgNzQsIDE2OSwgMSwgMjI3LCAyMzcsIAotICAgIDE2OSwgMSwgMjI3LCAxNzYsIDE2OSwgMSwgMjI0LCAyOSwgMTY5LCAxLCAyMjQsIDE2LCAxNjksIDEsIDIyNCwgOSwgMTY5LCAKLSAgICAxLCAyMjQsIDEsIDE2OSwgMSwgMjIzLCAyNDYsIDE2OSwgMSwgMjIzLCAyNDQsIDE2OSwgMSwgMjA2LCAxNjksIDEsIDIyMiwgCi0gICAgOTEsIDE2OSwgMSwgMjIxLCAxODEsIDE2OSwgMSwgMjE5LCAxOTEsIDE2OSwgMSwgMjE5LCA1OCwgMTY5LCAxLCAyMTgsIDgzLCAKLSAgICAxNjksIDEsIDIxOCwgMiwgMTY5LCAxLCAyNDgsIDIyMSwgMTY5LCAxLCAyMTcsIDEwNSwgMTY5LCAxLCAyNDgsIDkwLCAxNjksIAotICAgIDEsIDIxNywgMjIsIDE2OSwgMSwgMjQ4LCAzLCAxNjksIDEsIDIxNiwgMTE3LCAxNjksIDEsIDI0NywgMTQ1LCAxNjksIDEsIAotICAgIDI0NiwgNzgsIDE2OSwgMSwgMjQ2LCA1MCwgMTY5LCAxLCAyNDcsIDE1NiwgMTY5LCAxLCAyMTYsIDU5LCAxNjksIDEsIDIxNiwgCi0gICAgNTgsIDE2OSwgMSwgMjE2LCA0NywgMTY5LCAxLCAyMTYsIDQ2LCAxNjksIDEsIDIxNiwgNDUsIDE2OSwgMSwgMjE2LCA0NCwgCi0gICAgMTY5LCAxLCAyMTUsIDE4MywgMTY5LCAxLCAyMTUsIDE3OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NiwgCi0gICAgMTY5LCAxLCAyMTUsIDE2MywgMTY5LCAxLCAyMTUsIDE2MiwgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIAotICAgIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIAotICAgIDE2OSwgMSwgMTkxLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIAotICAgIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIDI0MCwgMTY4LCAxOCwgMTksIDc1LCAxOCwgMTksIDI1NSwgCi0gICAgMzcsIDE4LCAxOSwgNzMsIDE4LCAxOSwgMjM2LCAzMywgMTgsIDE5LCA3NiwgMTgsIDE5LCAyMjYsIDE4MywgMTgsIDE5LCAKLSAgICAyMTEsIDExNiwgMjI2LCAxODMsIDE4LCAxOSwgNzIsIDI0NSwgMjA5LCAxOCwgMTksIDcyLCA3MywgMTgsIDE5LCA2MSwgMTgsIAotICAgIDE5LCAyNTUsIDczLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgCi0gICAgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIAotICAgIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxMSwgMjE1LCAxOCwgMTksIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIAotICAgIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgMTksIDIyOSwgMTkwLCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgCi0gICAgMjAxLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgMTksIDI0MiwgMTgwLCAyMTgsIDEyOSwgMTgsIDE5LCA0MCwgCi0gICAgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDEzNiwgMTgsIDE5LCA0MCwgMjUxLCAxNzUsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgCi0gICAgNDAsIDIxNiwgMTQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDQ0LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCAKLSAgICAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCA0MCwgNTIsIDIxOSwgMjUxLCA2NywgMjE4LCA5MCwgMTgsIAotICAgIDE5LCA0MCwgMjMwLCAyMjQsIDI0NywgMTIwLCAxOCwgMTksIDQwLCAyMTksIDI1MSwgMjAzLCA5MSwgMTgsIDE5LCA0MCwgCi0gICAgMjI1LCAyMiwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg3LCAxOCwgMTksIDI0NSwgMTUwLCAxOCwgMTksIDIzNSwgMjU1LCAKLSAgICAxOCwgMTksIDIyNiwgMTk2LCAxOCwgMTksIDI1NCwgMTIzLCAxOCwgMTksIDIyNSwgMjIxLCAxOCwgMTksIDIyNiwgODcsIAotICAgIDE4LCAxOSwgMjI1LCAxMDgsIDE4LCAxOSwgMjI1LCA3MSwgMTgsIDE5LCAyMjUsIDE2LCAxOCwgMTksIDIyNCwgMjQ5LCAxOCwgCi0gICAgMTksIDIxMSwgMTE2LCAyMjQsIDI0OSwgMTgsIDE5LCA3MiwgMjQxLCAyMjAsIDE4LCAxOSwgNzIsIDI0MSwgMTgwLCAxOCwgCi0gICAgMTksIDE5MCwgMTgsIDE5LCAyMjYsIDg5LCAxOCwgMTksIDIyNCwgMTEyLCAxOCwgMTksIDE1OSwgMjI0LCAxMTIsIDE4LCAKLSAgICAxOSwgMjI0LCAxMTAsIDE4LCAxOSwgMTU5LCAyMjQsIDExMCwgMTgsIDE5LCAyMjQsIDEwOSwgMTgsIDE5LCAxNTksIDIyNCwgCi0gICAgMTA5LCAxOCwgMTksIDIyNCwgMTA3LCAxOCwgMTksIDE1OSwgMjI0LCAxMDcsIDE4LCAxOSwgMjI0LCAxMDYsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjQsIDEwNiwgMTgsIDE5LCAyMjQsIDExNCwgMTgsIDE5LCAxNTksIDIyNCwgMTE0LCAxOCwgMTksIDIyNCwgMTEzLCAKLSAgICAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAxOSwgMjExLCAxMTYsIDIyNCwgMTEzLCAxOCwgMTksIDIyNiwgMTA1LCAxOCwgCi0gICAgMTksIDE1OSwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgNjAsIDE4LCAxOSwgMjE3LCAyMiwgMTgsIDE5LCAyMTcsIDk5LCAKLSAgICAxOCwgMTksIDIxNiwgMTE3LCAxOCwgMTksIDIxNiwgMTAzLCAxOCwgMTksIDExMSwgMTgsIDE5LCAyMTYsIDE3LCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMTYsIDE3LCAxOCwgMTksIDcyLCAyNDgsIDc3LCAxOCwgMTksIDcyLCAyNDgsIDMsIDE4LCAxOSwgMjE3LCAKLSAgICAxMDUsIDE4LCAxOSwgMjE3LCAxMDEsIDE4LCAxOSwgMjE1LCA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgCi0gICAgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAKLSAgICAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIAotICAgIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTUsIDc5LCAxOCwgMTksIDIxNywgMTUyLCAxOCwgMTksIDIxNSwgMTUxLCAxOCwgMTksIDIxNSwgCi0gICAgMTM1LCAxOCwgMTksIDIxNSwgMTMzLCAxOCwgMTksIDIxNSwgMTU2LCAxOCwgMTksIDIzNCwgMTgyLCAxOCwgMTksIDIzNSwgCi0gICAgNywgMTgsIDE5LCAyMzQsIDkyLCAxOCwgMTksIDIzNCwgODMsIDE4LCAxOSwgMjM0LCAyOCwgMTgsIDE5LCAyMzQsIDEwLCAKLSAgICAxOCwgMTksIDIxMSwgMTE2LCAyMzQsIDEwLCAxOCwgMTksIDE3NiwgMTgsIDE5LCAyMzUsIDEwLCAxOCwgMTksIDIzMywgCi0gICAgMTc4LCAxOCwgMTksIDE1OSwgMjMzLCAxNzgsIDE4LCAxOSwgMjMzLCAxNzYsIDE4LCAxOSwgMTU5LCAyMzMsIDE3NiwgMTgsIAotICAgIDE5LCAyMzMsIDE3NSwgMTgsIDE5LCAxNTksIDIzMywgMTc1LCAxOCwgMTksIDIzMywgMTc0LCAxOCwgMTksIDE1OSwgMjMzLCAKLSAgICAxNzQsIDE4LCAxOSwgMjMzLCAxNzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE3MywgMTgsIDE5LCAyMzMsIDE4MiwgMTgsIDE5LCAKLSAgICAxNTksIDIzMywgMTgyLCAxOCwgMTksIDIzMywgMTgxLCAxOCwgMTksIDE1OSwgMjMzLCAxODEsIDE4LCAxOSwgMjI5LCAxOTAsIAotICAgIDIzMywgMTgxLCAxOCwgMTksIDIzNSwgMjMsIDE4LCAxOSwgMjMzLCAxODMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAxNzYsIAotICAgIDE4LCAxOSwgMjE5LCAyNywgMjM0LCA4NCwgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDIzLCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgCi0gICAgMjQ4LCAxOCwgMTksIDI1MCwgMTkwLCAxOCwgMTksIDI1MSwgMzEsIDE4LCAxOSwgMjUwLCA1MSwgMTgsIDE5LCAyNTAsIDQxLCAKLSAgICAxOCwgMTksIDI0OSwgMjM4LCAxOCwgMTksIDI0OSwgMTc0LCAxOCwgMTksIDIxMSwgMTE2LCAyNDksIDE3NCwgMTgsIDE5LCAKLSAgICAyNTEsIDMzLCAxOCwgMTksIDI1MSwgMzIsIDE4LCAxOSwgMjQ5LCA3OSwgMTgsIDE5LCAxNTksIDI0OSwgNzksIDE4LCAxOSwgCi0gICAgMjQ5LCA3NywgMTgsIDE5LCAxNTksIDI0OSwgNzcsIDE4LCAxOSwgMjQ5LCA3NiwgMTgsIDE5LCAxNTksIDI0OSwgNzYsIDE4LCAKLSAgICAxOSwgMjQ5LCA3NSwgMTgsIDE5LCAxNTksIDI0OSwgNzUsIDE4LCAxOSwgMjQ5LCA3NCwgMTgsIDE5LCAxNTksIDI0OSwgNzQsIAotICAgIDE4LCAxOSwgMjQ5LCA4MSwgMTgsIDE5LCAxNTksIDI0OSwgODEsIDE4LCAxOSwgMjQ5LCA4MCwgMTgsIDE5LCAxNTksIDI0OSwgCi0gICAgODAsIDE4LCAxOSwgMjI5LCAxOTAsIDI0OSwgODAsIDE4LCAxOSwgMjUxLCA2NiwgMTgsIDE5LCAyMjEsIDIwOSwgMjE2LCAKLSAgICAyMTAsIDE4LCAxOSwgMjMxLCA5MSwgMTgsIDE5LCAyMzEsIDIzNiwgMTgsIDE5LCAyMzAsIDIzMCwgMTgsIDE5LCAyMzAsIAotICAgIDIwMSwgMTgsIDE5LCAyMzAsIDE2MSwgMTgsIDE5LCAyMzAsIDEzMiwgMTgsIDE5LCAyMTEsIDExNiwgMjMwLCAxMzIsIDE4LCAKLSAgICAxOSwgMTg0LCAxOCwgMTksIDIzMSwgMjM3LCAxOCwgMTksIDIzMCwgNDAsIDE4LCAxOSwgMTU5LCAyMzAsIDQwLCAxOCwgMTksIAotICAgIDIzMCwgMzgsIDE4LCAxOSwgMTU5LCAyMzAsIDM4LCAxOCwgMTksIDIzMCwgMzcsIDE4LCAxOSwgMTU5LCAyMzAsIDM3LCAxOCwgCi0gICAgMTksIDIzMCwgMzYsIDE4LCAxOSwgMTU5LCAyMzAsIDM2LCAxOCwgMTksIDIzMCwgMzUsIDE4LCAxOSwgMTU5LCAyMzAsIDM1LCAKLSAgICAxOCwgMTksIDIzMCwgNDIsIDE4LCAxOSwgMTU5LCAyMzAsIDQyLCAxOCwgMTksIDIzMCwgNDEsIDE4LCAxOSwgMTU5LCAyMzAsIAotICAgIDQxLCAxOCwgMTksIDIyOSwgMTkwLCAyMzAsIDQxLCAxOCwgMTksIDE5MywgMTgsIDE5LCAxNTksIDE5MywgMTgsIDE5LCAKLSAgICAyMzAsIDIzNCwgMTgsIDE5LCAyNTMsIDIwNSwgMTkzLCAxOCwgMTksIDIyMSwgMjA5LCAxOTMsIDE4LCAxOSwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgMjI5LCAyMjQsIDE4LCAxOSwgMjI4LCAyMzMsIDE4LCAxOSwgMjI4LCAyMDgsIDE4LCAxOSwgMjI4LCA3NCwgCi0gICAgMTgsIDE5LCAyMjgsIDY0LCAxOCwgMTksIDIxMSwgMTE2LCAyMjgsIDY0LCAxOCwgMTksIDE5NywgMTgsIDE5LCAyMjksIAotICAgIDIyNSwgMTgsIDE5LCAyMjcsIDE3MiwgMTgsIDE5LCAxNTksIDIyNywgMTcyLCAxOCwgMTksIDIyNywgMTc0LCAxOCwgMTksIAotICAgIDE1OSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI3LCAxNzMsIDE4LCAxOSwgMTU5LCAyMjcsIDE3MywgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjI3LCAxNzMsIDE4LCAxOSwgMjMwLCAyNSwgMTgsIDE5LCA3MiwgMjI5LCA3OSwgMTgsIDE5LCAyMjgsIDIzOCwgMTgsIDE5LCAKLSAgICAyMzMsIDU4LCAxOCwgMTksIDIzMywgMTMzLCAxOCwgMTksIDIzMiwgMjQxLCAxOCwgMTksIDIzMiwgMjI3LCAxOCwgMTksIAotICAgIDIzMiwgMTU2LCAxOCwgMTksIDIzMiwgMTI3LCAxOCwgMTksIDIxMSwgMTE2LCAyMzIsIDEyNywgMTgsIDE5LCAyMzMsIDEzNSwgCi0gICAgMTgsIDE5LCAyMzMsIDEzNCwgMTgsIDE5LCAyMzIsIDY4LCAxOCwgMTksIDE1OSwgMjMyLCA2OCwgMTgsIDE5LCAyMzIsIDY3LCAKLSAgICAxOCwgMTksIDE1OSwgMjMyLCA2NywgMTgsIDE5LCAyMzIsIDY2LCAxOCwgMTksIDE1OSwgMjMyLCA2NiwgMTgsIDE5LCAyMzIsIAotICAgIDY1LCAxOCwgMTksIDE1OSwgMjMyLCA2NSwgMTgsIDE5LCAyMzIsIDY0LCAxOCwgMTksIDE1OSwgMjMyLCA2NCwgMTgsIDE5LCAKLSAgICAyMzIsIDcwLCAxOCwgMTksIDE1OSwgMjMyLCA3MCwgMTgsIDE5LCAyMzIsIDY5LCAxOCwgMTksIDE1OSwgMjMyLCA2OSwgMTgsIAotICAgIDE5LCAxNTYsIDE4LCAxOSwgMTU5LCAxNTYsIDE4LCAxOSwgMTQ3LCAxNTYsIDE4LCAxOSwgMjIxLCAxODEsIDE4LCAxOSwgCi0gICAgMjIyLCAyOSwgMTgsIDE5LCAyMTksIDE5MSwgMTgsIDE5LCAyMTksIDE3NSwgMTgsIDE5LCAyMTksIDU4LCAxOCwgMTksIAotICAgIDIxOSwgNDAsIDE4LCAxOSwgMjExLCAxMTYsIDIxOSwgNDAsIDE4LCAxOSwgMjA2LCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgCi0gICAgMjE3LCAyNDksIDE4LCAxOSwgMTU5LCAyMTcsIDI0OSwgMTgsIDE5LCAyMTcsIDI0MywgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAKLSAgICAxOCwgMTksIDIxNywgMjQyLCAxOCwgMTksIDE1OSwgMjE3LCAyNDIsIDE4LCAxOSwgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAKLSAgICAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDIzNywgMTgsIDE5LCAxNTksIDIxNywgMjM3LCAxOCwgMTksIDIxNywgMjUzLCAxOCwgCi0gICAgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjE3LCAyNTIsIDE4LCAxOSwgMTU5LCAyMTcsIDI1MiwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE3LCAyNTIsIDE4LCAxOSwgMjIyLCA5MSwgMTgsIDE5LCAyNTMsIDIwNSwgMjIyLCA5MSwgMTgsIDE5LCAyMTcsIAotICAgIDI1NCwgMTgsIDE5LCAyNTEsIDIxOCwgMjIyLCA5MSwgMTgsIDE5LCAyMzAsIDEyNywgMjE5LCAxMDgsIDE4LCAxOSwgMjI5LCAKLSAgICAxOTAsIDIxOSwgOTksIDE4LCAxOSwgMjI5LCAxOTAsIDIyMiwgODksIDE4LCAxOSwgMjI5LCAxOTAsIDIxOCwgMjM1LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTgsIDg2LCAxOCwgMTksIDIyOSwgMTkwLCAyMTksIDk4LCAxOCwgMTksIDIyOSwgMTkwLCAyMjEsIAotICAgIDE4NCwgMTgsIDE5LCAyMjAsIDYzLCAxOCwgMTksIDIyMCwgMzIsIDE4LCAxOSwgMjIwLCAyNywgMTgsIDE5LCAyMjAsIDcsIAotICAgIDE4LCAxOSwgMjIwLCAxLCAxOCwgMTksIDIyMCwgMTAyLCAxOCwgMTksIDIyMCwgOTgsIDE4LCAxOSwgMjE5LCAyMDYsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTksIDIwNiwgMTgsIDE5LCAyMTksIDIwNSwgMTgsIDE5LCAxNTksIDIxOSwgMjA1LCAxOCwgMTksIDIxOSwgCi0gICAgMjA0LCAxOCwgMTksIDE1OSwgMjE5LCAyMDQsIDE4LCAxOSwgMjE5LCAyMDMsIDE4LCAxOSwgMTU5LCAyMTksIDIwMywgMTgsIAotICAgIDE5LCAyMTksIDIwMiwgMTgsIDE5LCAxNTksIDIxOSwgMjAyLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAKLSAgICAyMDgsIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMjAsIDEwNCwgMTgsIDE5LCAKLSAgICAyMTEsIDQ3LCAxOCwgMTksIDIxMSwgMTAxLCAxOCwgMTksIDIxMSwgOCwgMTgsIDE5LCAyMTAsIDI1NSwgMTgsIDE5LCAyMTAsIAotICAgIDI0NCwgMTgsIDE5LCAyMTAsIDIyOSwgMTgsIDE5LCAyMTEsIDExNiwgMjEwLCAyMjksIDE4LCAxOSwgMTkxLCAxOCwgMTksIAotICAgIDIxMSwgMTAzLCAxOCwgMTksIDIxMCwgMTc0LCAxOCwgMTksIDE1OSwgMjEwLCAxNzQsIDE4LCAxOSwgMjEwLCAxNzMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTAsIDE3MywgMTgsIDE5LCAyMTAsIDE3MiwgMTgsIDE5LCAxNTksIDIxMCwgMTcyLCAxOCwgMTksIDIxMCwgCi0gICAgMTcxLCAxOCwgMTksIDE1OSwgMjEwLCAxNzEsIDE4LCAxOSwgMjEwLCAxNzAsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MCwgMTgsIAotICAgIDE5LCAyMTAsIDE3NiwgMTgsIDE5LCAxNTksIDIxMCwgMTc2LCAxOCwgMTksIDIxMCwgMTc1LCAxOCwgMTksIDE1OSwgMjEwLCAKLSAgICAxNzUsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMCwgMTc1LCAxOCwgMTksIDIxMSwgMTE3LCAxOCwgMTksIDI1MiwgNCwgMjExLCAKLSAgICAxMTcsIDE4LCAxOSwgMTU5LCAyMTEsIDExNywgMTgsIDE5LCAyMjEsIDIwOSwgMjExLCA4LCAxOCwgMTksIDIyMywgMTI4LCAKLSAgICAxOCwgMTksIDIyMywgMjIzLCAyMjMsIDEyOCwgMTgsIDE5LCAxNTksIDIzMywgNTgsIDE4LCAxOSwgMjIzLCAxODMsIDE4LCAKLSAgICAxOSwgMjIzLCAzNSwgMTgsIDE5LCAyMjIsIDIzOSwgMTgsIDE5LCAyMjIsIDIxMSwgMTgsIDE5LCAyMjIsIDE5NywgMTgsIAotICAgIDE5LCAxNTksIDIzMiwgMTU2LCAxOCwgMTksIDIwNSwgMTgsIDE5LCAyMjMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjIyLCAxMDgsIDE4LCAxOSwgMTUzLCAxOCwgMTksIDE1OSwgMTUzLCAKLSAgICAxOCwgMTksIDE0NywgMTUzLCAxOCwgMTksIDI0NCwgMTU0LCAxOCwgMTksIDI0NCwgMTkzLCAxOCwgMTksIDI0NCwgMTIxLCAKLSAgICAxOCwgMTksIDI0NCwgMTA4LCAxOCwgMTksIDI0NCwgNDMsIDE4LCAxOSwgMjQ0LCAzNCwgMTgsIDE5LCAyNDQsIDE5NiwgMTgsIAotICAgIDE5LCAyNDQsIDE5NSwgMTgsIDE5LCAyNDMsIDIxMiwgMTgsIDE5LCAxNTksIDI0MywgMjEyLCAxOCwgMTksIDI0NSwgNiwgCi0gICAgMTgsIDE5LCAyMTYsIDE5NSwgMTgsIDE5LCAyMzAsIDIzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTYsIDE3NSwgMTgsIDE5LCAKLSAgICAyMzAsIDIzLCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDE3MSwgMTgsIDE5LCAyMzAsIDIzLCAyMTYsIDE3MSwgMTgsIDE5LCAKLSAgICAyMTYsIDE1NiwgMTgsIDE5LCAyMTYsIDE1MywgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIwNywgMTgsIDE5LCAKLSAgICAyMTYsIDEyNywgMTgsIDE5LCAxNTksIDIxNiwgMTI3LCAxOCwgMTksIDIxNiwgMjEwLCAxOCwgMTksIDIxNSwgMTQyLCAxOCwgCi0gICAgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTM5LCAxOCwgMTksIDIxNSwgMTQ0LCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgCi0gICAgMTksIDIxNSwgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgCi0gICAgMjI3LCAxOTMsIDI0MSwgMjM4LCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDE4MCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCAKLSAgICAxNjEsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgNjgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgNTMsIDE4LCAxOSwgMjI3LCAKLSAgICAxOTMsIDE2MiwgMTgsIDE5LCAyMjcsIDE5MywgMjQyLCA0NiwgMTgsIDE5LCAyMjcsIDE5MywgMjQyLCA2MCwgMTgsIDE5LCAKLSAgICAyMjcsIDE5MiwgMjQyLCA2MCwgMTgsIDE5LCAyNDEsIDE1NCwgMTgsIDE5LCAyMjQsIDg0LCAxOCwgMTksIDIyNCwgNTMsIAotICAgIDE4LCAxOSwgMjI0LCA0OCwgMTgsIDE5LCAyMjQsIDQyLCAxOCwgMTksIDIyNCwgMzcsIDE4LCAxOSwgMjI0LCA4OCwgMTgsIAotICAgIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgOTYsIDE4LCAxOSwgMjE2LCA1NSwgMTgsIDE5LCAyMTYsIDUzLCAxOCwgMTksIAotICAgIDIxNiwgNTIsIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAxNTksIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjIzLCAzNSwgCi0gICAgMTgsIDE5LCAxNTksIDIyMiwgMjExLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgNzUsIDE4LCAxOSwgMjI5LCAKLSAgICAyNywgMTgsIDE5LCAyMjksIDIzLCAxOCwgMTksIDIyOSwgNCwgMTgsIDE5LCAyMjgsIDI1NSwgMTgsIDE5LCAyMjksIDc3LCAKLSAgICAxOCwgMTksIDIyOSwgNzYsIDE4LCAxOSwgMjI5LCA3OSwgMTgsIDE5LCAyMjgsIDEwMywgMTgsIDE5LCAyMjEsIDIwOSwgCi0gICAgMjIwLCA2MywgMTgsIDE5LCAyMjEsIDIwOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjEsIDIwOSwgMjIwLCA3LCAxOCwgMTksIAotICAgIDIyMSwgMjA5LCAyMjAsIDEwMiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxOTUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCi0gICAgMTc1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE1NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMDgsIDE4LCAxOSwgMjExLCAKLSAgICAyMTMsIDIxNiwgMjEwLCAxOCwgMTksIDIzMiwgMjQ4LCAxOCwgMTksIDIzMiwgMjQ3LCAxOCwgMTksIDIzMiwgMjQ2LCAxOCwgCi0gICAgMTksIDIzMiwgMjQ1LCAxOCwgMTksIDIzMiwgMjU0LCAxOCwgMTksIDIzMiwgMjUzLCAxOCwgMTksIDIzMiwgMjU1LCAxOCwgCi0gICAgMTksIDIxNiwgMjA5LCAyMTYsIDE5NSwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNzUsIDE4LCAxOSwgMjE2LCAyMDksIAotICAgIDIxNiwgMTcxLCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1NiwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNTMsIDE4LCAxOSwgCi0gICAgMjE2LCAyMDksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDIwNywgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAKLSAgICAyMTAsIDE4LCAxOSwgMjU0LCAxODksIDI1MywgMTU4LCAxOCwgMTksIDI1MSwgMjE4LCA3NSwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgNzMsIDE4LCAxOSwgMjUxLCAyMTgsIDc2LCAxOCwgMTksIDI1MSwgMjE4LCA2MSwgMTgsIDE5LCAyNTEsIDIxOCwgMjEyLCAKLSAgICAyMiwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyNTAsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMSwgMjI3LCAxOCwgMTksIDI1MSwgCi0gICAgMjE4LCAyMTIsIDY1LCAxOCwgMTksIDI1MSwgMjE4LCAyMjksIDEwNywgMTgsIDE5LCAyNTEsIDIxOCwgMjI4LCAyMzMsIDE4LCAKLSAgICAxOSwgMjUxLCAyMTgsIDIyOCwgNzQsIDE4LCAxOSwgMjUxLCAyMTgsIDE5NywgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAxODIsIAotICAgIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgOTIsIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgMjgsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDE3NiwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAyMzgsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgMTgwLCAxOCwgMTksIDIyMSwgCi0gICAgMjA5LCAyNDEsIDY4LCAxOCwgMTksIDIyMSwgMjA5LCAxNjIsIDE4LCAxOSwgNzIsIDI0MiwgMjIwLCAxOCwgMTksIDcyLCAKLSAgICAyNDIsIDIyNCwgMTgsIDE5LCA3MiwgMjQyLCAyMzYsIDE4LCAxOSwgNzIsIDI0MiwgMjM1LCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDIyNSwgMTgsIDE5LCA3MiwgMjQyLCAyNDksIDE4LCAxOSwgNzIsIDIyMiwgMTQwLCAxOCwgMTksIDcyLCAyMjIsIDIxMSwgCi0gICAgMTgsIDE5LCA3MiwgMjIzLCAxMjgsIDE4LCAxOSwgNzIsIDIyMywgMTA4LCAxOCwgMTksIDcyLCAyMjMsIDM1LCAxOCwgMTksIAotICAgIDcyLCAyMDUsIDE4LCAxOSwgNzIsIDIxMSwgMTk1LCAxOCwgMTksIDcyLCAyMTEsIDIyNywgMTgsIDE5LCA3MiwgMjEyLCAyMiwgCi0gICAgMTgsIDE5LCA3MiwgMjEyLCAxNywgMTgsIDE5LCA3MiwgMjExLCAyNTAsIDE4LCAxOSwgNzIsIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgNzIsIDI0MCwgMTk0LCAxOCwgMTksIDcyLCAyNDAsIDE5NSwgMTgsIDE5LCA3MiwgMjQwLCAxOTgsIDE4LCAxOSwgNzIsIAotICAgIDI0MCwgMTk3LCAxOCwgMTksIDcyLCAyNDAsIDE5NiwgMTgsIDE5LCA3MiwgMjQwLCAyMDAsIDE4LCAxOSwgNzIsIDIxNiwgCi0gICAgMTM2LCAxOCwgMTksIDcyLCAyMTYsIDE1NiwgMTgsIDE5LCA3MiwgMjE2LCAxOTUsIDE4LCAxOSwgNzIsIDIxNiwgMTk0LCAKLSAgICAxOCwgMTksIDcyLCAyMTYsIDE3NSwgMTgsIDE5LCA3MiwgMjE2LCAyMDgsIDE4LCAxOSwgNzIsIDIxNSwgMTIzLCAxOCwgMTksIAotICAgIDcyLCAyMTUsIDEzMywgMTgsIDE5LCA3MiwgMjE1LCAxNTEsIDE4LCAxOSwgNzIsIDIxNSwgMTUwLCAxOCwgMTksIDcyLCAKLSAgICAyMTUsIDEzNSwgMTgsIDE5LCA3MiwgMjE1LCAxNTYsIDE4LCAxOSwgNzIsIDIyNCwgMTUwLCAxOCwgMTksIDcyLCAyMjUsIAotICAgIDE2LCAxOCwgMTksIDcyLCAyMjUsIDIyMSwgMTgsIDE5LCA3MiwgMjI1LCAyMTEsIDE4LCAxOSwgNzIsIDIyNSwgMTA4LCAxOCwgCi0gICAgMTksIDcyLCAxOTAsIDE4LCAxOSwgNzIsIDIyNiwgMTA1LCAxOCwgMTksIDcyLCAyNDIsIDExMywgMTgsIDE5LCA3MiwgMjQyLCAKLSAgICAxNzQsIDE4LCAxOSwgNzIsIDI0MywgNjIsIDE4LCAxOSwgNzIsIDI0MywgNTUsIDE4LCAxOSwgNzIsIDI0MiwgMjE0LCAxOCwgCi0gICAgMTksIDcyLCAyNDMsIDEzNSwgMTgsIDE5LCA3MiwgMjM0LCAxMDAsIDE4LCAxOSwgNzIsIDIzNCwgMTA1LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDExOSwgMTgsIDE5LCA3MiwgMjM0LCAxMTgsIDE4LCAxOSwgNzIsIDIzNCwgMTEyLCAxOCwgMTksIDcyLCAyMzQsIAotICAgIDEzMiwgMTgsIDE5LCA3MiwgMjM0LCA0MSwgMTgsIDE5LCA3MiwgMjM0LCA0MiwgMTgsIDE5LCA3MiwgMjM0LCA0NSwgMTgsIAotICAgIDE5LCA3MiwgMjM0LCA0NCwgMTgsIDE5LCA3MiwgMjM0LCA0MywgMTgsIDE5LCA3MiwgMjM0LCA0NiwgMTgsIDE5LCA3MiwgCi0gICAgMjM0LCA0NywgMTgsIDE5LCA3MiwgMjI3LCAyMzcsIDE4LCAxOSwgNzIsIDIyOCwgNzQsIDE4LCAxOSwgNzIsIDIyOSwgMTA3LCAKLSAgICAxOCwgMTksIDcyLCAyMjksIDEwMywgMTgsIDE5LCA3MiwgMjI4LCAyMzMsIDE4LCAxOSwgNzIsIDE5NywgMTgsIDE5LCA3MiwgCi0gICAgMjMwLCAxMDIsIDE4LCAxOSwgNzIsIDIzMCwgMTYxLCAxOCwgMTksIDcyLCAyMzEsIDkxLCAxOCwgMTksIDcyLCAyMzEsIDgwLCAKLSAgICAxOCwgMTksIDcyLCAyMzAsIDIzMCwgMTgsIDE5LCA3MiwgMTg0LCAxOCwgMTksIDcyLCAyMTAsIDIxMiwgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyNDQsIDE4LCAxOSwgNzIsIDIxMSwgNDcsIDE4LCAxOSwgNzIsIDIxMSwgNDQsIDE4LCAxOSwgNzIsIDIxMSwgOCwgCi0gICAgMTgsIDE5LCA3MiwgMTkxLCAxOCwgMTksIDcyLCAyMzUsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMzUsIDUxLCAxOCwgMTksIAotICAgIDcyLCAyMzUsIDY4LCAxOCwgMTksIDcyLCAyMzUsIDEyNiwgMTgsIDE5LCA3MiwgMjM1LCAxMjQsIDE4LCAxOSwgNzIsIDIzNSwgCi0gICAgMTA4LCAxOCwgMTksIDIyMSwgMjA5LCAyMzUsIDEwOCwgMTgsIDE5LCA3MiwgMjM1LCAxNDEsIDE4LCAxOSwgNzIsIDIzNSwgCi0gICAgODEsIDE4LCAxOSwgNzIsIDIzNSwgODUsIDE4LCAxOSwgNzIsIDIzNSwgOTUsIDE4LCAxOSwgNzIsIDIzNSwgOTQsIDE4LCAKLSAgICAxOSwgNzIsIDIzNSwgOTMsIDE4LCAxOSwgNzIsIDIzNSwgOTYsIDE4LCAxOSwgNzIsIDIzMiwgOTgsIDE4LCAxOSwgNzIsIAotICAgIDIzMiwgMTU2LCAxOCwgMTksIDcyLCAyMzMsIDU4LCAxOCwgMTksIDcyLCAyMzMsIDUwLCAxOCwgMTksIDcyLCAyMzIsIDI0MSwgCi0gICAgMTgsIDE5LCA3MiwgMjMzLCAxMzUsIDE4LCAxOSwgNzIsIDI0NywgMTQ5LCAxOCwgMTksIDcyLCAyNDcsIDE1MCwgMTgsIDE5LCAKLSAgICA3MiwgMjQ3LCAxNTUsIDE4LCAxOSwgNzIsIDI0NywgMTU0LCAxOCwgMTksIDcyLCAyNDcsIDE1MSwgMTgsIDE5LCA3MiwgCi0gICAgMjQ3LCAxNTYsIDE4LCAxOSwgNzIsIDIzMiwgMjQ0LCAxOCwgMTksIDcyLCAyMzIsIDI0NiwgMTgsIDE5LCA3MiwgMjMyLCAKLSAgICAyNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQ5LCAxOCwgMTksIDcyLCAyMzIsIDI0OCwgMTgsIDE5LCA3MiwgMjMyLCAyNTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgNTAsIDE4LCAxOSwgNzIsIDIxNiwgNTIsIDE4LCAxOSwgNzIsIDIxNiwgNTUsIDE4LCAxOSwgCi0gICAgNzIsIDIxNiwgNTQsIDE4LCAxOSwgNzIsIDIxNiwgNTMsIDE4LCAxOSwgNzIsIDIxNiwgNTYsIDE4LCAxOSwgNzIsIDIxNiwgCi0gICAgNDUsIDE4LCAxOSwgNzIsIDIxNiwgNDYsIDE4LCAxOSwgNzIsIDIxNiwgNTgsIDE4LCAxOSwgNzIsIDIxNiwgNTcsIDE4LCAKLSAgICAxOSwgNzIsIDIxNiwgNDcsIDE4LCAxOSwgNzIsIDIxNiwgNTksIDE4LCAxOSwgNzIsIDIxMCwgMTMsIDE4LCAxOSwgNzIsIAotICAgIDIxMCwgMjMsIDE4LCAxOSwgNzIsIDIxMCwgOTQsIDE4LCAxOSwgNzIsIDIxMCwgOTIsIDE4LCAxOSwgNzIsIDIxMCwgNDQsIAotICAgIDE4LCAxOSwgNzIsIDIxMCwgMTE2LCAxOCwgMTksIDcyLCAyMTAsIDE1OSwgMTgsIDE5LCA3MiwgNjUsIDIxMCwgMTU5LCAxOCwgCi0gICAgMTksIDcyLCAyNDYsIDI4LCAxOCwgMTksIDcyLCAyNDYsIDI5LCAxOCwgMTksIDcyLCAyNDYsIDM2LCAxOCwgMTksIDcyLCAKLSAgICAyNDYsIDM1LCAxOCwgMTksIDcyLCAyNDYsIDMxLCAxOCwgMTksIDcyLCAyNDYsIDM4LCAxOCwgMTksIDcyLCAyMTgsIDgzLCAKLSAgICAxOCwgMTksIDcyLCAyMTksIDU4LCAxOCwgMTksIDcyLCAyMjEsIDE4MSwgMTgsIDE5LCA3MiwgMjIxLCAxNzAsIDE4LCAxOSwgCi0gICAgNzIsIDIxOSwgMTkxLCAxOCwgMTksIDcyLCAyMDYsIDE4LCAxOSwgNzIsIDIxOSwgMjI1LCAxOCwgMTksIDcyLCAyMjAsIDcsIAotICAgIDE4LCAxOSwgNzIsIDIyMCwgNjMsIDE4LCAxOSwgNzIsIDIyMCwgNjEsIDE4LCAxOSwgNzIsIDIyMCwgMzIsIDE4LCAxOSwgCi0gICAgNzIsIDIyMCwgMTAyLCAxOCwgMTksIDcyLCAyMjAsIDEwNCwgMTgsIDE5LCA3MiwgMjE1LCAxNjMsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTY2LCAxOCwgMTksIDcyLCAyMTUsIDE3OCwgMTgsIDE5LCA3MiwgMjE1LCAxNzcsIDE4LCAxOSwgNzIsIDIxNSwgCi0gICAgMTY3LCAxOCwgMTksIDcyLCAyMTUsIDE4MywgMTgsIDE5LCA3MiwgMjUwLCA2OSwgMTgsIDE5LCA3MiwgMjUwLCA4NiwgMTgsIAotICAgIDE5LCA3MiwgMjUwLCAxMzEsIDE4LCAxOSwgNzIsIDI1MCwgMTI4LCAxOCwgMTksIDcyLCAyNTAsIDExMCwgMTgsIDE5LCA3MiwgCi0gICAgMjUwLCAxNTcsIDE4LCAxOSwgNzIsIDIxNSwgMTI2LCAxOCwgMTksIDcyLCAyMTUsIDEyNywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxMzAsIDE4LCAxOSwgNzIsIDIxNSwgMTI5LCAxOCwgMTksIDcyLCAyMTUsIDEyOCwgMTgsIDE5LCA3MiwgMjE1LCAxMzEsIAotICAgIDE4LCAxOSwgMjUwLCAxMTEsIDUwLCAxOCwgMTksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTgsIDE5LCAyMjQsIDgwLCAxOCwgCi0gICAgMTksIDIyOSwgNzMsIDE4LCAxOSwgMjI4LCAxMDAsIDE4LCAxOSwgMjI4LCA5OSwgMTgsIDE5LCAyMjgsIDk4LCAxOCwgMTksIAotICAgIDIyOCwgOTcsIDE4LCAxOSwgMjI4LCAxMDIsIDE4LCAxOSwgMjI4LCAxMDEsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAKLSAgICAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIAotICAgIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgCi0gICAgMjExLCAyMTMsIDIxNiwgMTI3LCAxOCwgMTksIDIxMSwgMjEzLCA0MCwgMjE2LCAyMTAsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDIxMiwgOTgsIDIyNiwgMjI2LCAyMTksIDE5LCA3OCwgMjI2LCAyMjYsIDEsIDI1MiwgNDgsIDIyNiwgMjI2LCAxLCAyMzIsIAotICAgIDg3LCAyMjYsIDIyNiwgMSwgMjQ0LCAxNTEsIDIyNiwgMjI2LCAxLCAyMjIsIDE1LCAyMjYsIDIyNiwgMSwgMjI4LCAxOTMsIAotICAgIDIyNiwgMjI2LCAxLCAyMTQsIDIyNiwgMjI2LCAyMjYsIDEsIDI0OCwgMTk3LCAyMjYsIDIyNiwgMSwgMjE2LCA4MCwgMjI2LCAKLSAgICAyMjYsIDEsIDI0OSwgMjI5LCAyMjYsIDIyNiwgMSwgMjUwLCAxODAsIDIyNiwgMjI2LCAxLCAyMzAsIDkxLCAyMjYsIDIyNiwgCi0gICAgMSwgMjQyLCAxNTYsIDIyNiwgMjI2LCAxLCAyMjksIDYzLCAyMjYsIDIyNiwgMSwgMjE4LCAxMjIsIDIyNiwgMjI2LCAxLCAKLSAgICAyMjIsIDEzNSwgMjI2LCAyMjYsIDEsIDI1NCwgMTk4LCAyMjYsIDIyNiwgMSwgMjI2LCAxODcsIDIyNiwgMjI2LCAxLCAyMTQsIAotICAgIDE1MCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMxLCAyMjYsIDIyNiwgMSwgMjM1LCAxODgsIDIyNiwgMjI2LCAxLCAyNDUsIDIzMiwgCi0gICAgMjI2LCAyMjYsIDEsIDIyNiwgMTU4LCAyMjYsIDIyNiwgMSwgMjE0LCAyMDYsIDIyNiwgMjI2LCAxLCAyMzYsIDM5LCAyMjYsIAotICAgIDIyNiwgMSwgMjQ1LCAyMjksIDIyNiwgMjI2LCAxLCAyMjUsIDIwMiwgMjI2LCAyMjYsIDI0NCwgMTUwLCA3OCwgMjI2LCAKLSAgICAyMjYsIDIyMywgNDksIDI0NCwgMTUwLCA3OCwgMTc4LCAxLCAyNDQsIDE0MSwgMjQ0LCAxMzMsIDI0NCwgMTU1LCAyNDUsIDYsIAotICAgIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA3MCwgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAKLSAgICAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMwLCAyMTYsIDEyOSwgMjE2LCAxNTEsIDE3OCwgCi0gICAgMSwgMjQ1LCA1OSwgMTc4LCAxLCAyNTQsIDkzLCA2MSwgMTc4LCAxLCAyMjYsIDE0MywgNzYsIDE3OCwgMSwgMjU1LCAxNywgCi0gICAgNjEsIDE3OCwgMSwgMjU0LCAyMjcsIDE3OCwgMSwgMjMyLCAxMzMsIDc2LCAxNzgsIDEsIDIxOSwgMjQ0LCA3NiwgMTc4LCAxLCAKLSAgICA3NiwgMTc4LCAxLCAyMjYsIDIzNCwgMTc4LCAxLCAyMjYsIDE5NiwgMTc4LCAxLCAyMjMsIDE2NCwgMjIzLCAxNzcsIDIyMywgCi0gICAgOTQsIDE1MywgMTc4LCAxLCAyMzQsIDE5MywgMTc4LCAxLCAyNTAsIDE3NywgMTc4LCAxLCAyMzQsIDE5NCwgMjM1LCAyMywgCi0gICAgMTc4LCAxLCAyNDMsIDIwMiwgMTc4LCAxLCAyNDUsIDEzOCwgMTc4LCAxLCAyNDMsIDU4LCAyNDIsIDY2LCAyNDMsIDIwMiwgCi0gICAgMTc4LCAxLCAyNDMsIDk2LCAxNzgsIDEsIDIxMSwgMTg4LCAyMTEsIDE4MiwgMjEyLCA5OCwgMTc4LCAxLCAyNDIsIDM4LCAKLSAgICAyNDIsIDYwLCAxNzgsIDEsIDI0MiwgNDIsIDI0MiwgNjAsIDE3OCwgMSwgMjMyLCAxMzUsIDI0MiwgNjAsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDcsIDI0MiwgNjAsIDE3OCwgMSwgMjI5LCAxODUsIDIyNywgMTU3LCAyMjksIDE4NiwgMjMwLCAyNSwgMTc4LCAxLCAKLSAgICAyMTksIDI0NSwgMjMwLCAyNSwgMTc4LCAxLCAyNDYsIDExNSwgMTc4LCAxLCAyMzUsIDE2OCwgMjM1LCAxNzIsIDIzNSwgCi0gICAgMTYyLCA3MywgMTc4LCAxLCA3NSwgMTc4LCAxLCAyMzUsIDExNywgMjM1LCAxNDQsIDE3OCwgMSwgMjQzLCA0MywgMTc4LCAxLCAKLSAgICAyMzIsIDEzNiwgMjU0LCAyNDMsIDE3OCwgMSwgMjE5LCAyNDksIDYxLCAxNzgsIDEsIDIzNSwgMTU0LCAyNDUsIDExMywgCi0gICAgMTc4LCAxLCAyMjUsIDE2NCwgMjI1LCAxODYsIDIyNiwgMTA1LCAxNzgsIDEsIDI1NCwgMTYzLCAyNDUsIDExMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0LCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMTc5LCAyMzIsIDEzMiwgMjIyLCA5MSwgMTc4LCAxLCAyMTksIDI0MywgCi0gICAgMjIyLCA5MSwgMTc4LCAxLCAyNTEsIDY2LCAxNzgsIDEsIDIxMCwgMTU5LCAxNzgsIDEsIDIxNiwgNjMsIDIxNiwgNzMsIAotICAgIDIxNSwgNDEsIDIxNywgMTUyLCAxNzgsIDEsIDIxOSwgMjQyLCAyMTcsIDE1MiwgMTc4LCAxLCAyNDksIDYwLCAxNzgsIDEsIAotICAgIDI1MiwgMzEsIDI1MiwgMzQsIDI1MSwgMjI0LCAyNTMsIDE1OCwgMTc4LCAxLCAyMTksIDI0OCwgMjUzLCAxNTgsIDE3OCwgMSwgCi0gICAgMjQ2LCAxMTQsIDE3OCwgMSwgMjI2LCAxNzEsIDE3OCwgMSwgMjQ1LCAxOTYsIDI0NSwgMTk4LCA3NSwgMTc4LCAxLCAyMzEsIAotICAgIDE3OCwgMjMxLCAxODYsIDE5MywgMTc4LCAxLCAyMzIsIDEzNCwgMTkzLCAxNzgsIDEsIDIxOSwgMjQ2LCAxOTMsIDE3OCwgMSwgCi0gICAgMjMzLCA3MywgMjMzLCAxMTQsIDIzMiwgMTQzLCAxNTYsIDE3OCwgMSwgMjQ2LCAxMTYsIDE3OCwgMSwgMjM1LCAyMzAsIAotICAgIDE3OCwgMSwgMjM1LCAyMzEsIDE3OCwgMSwgMjQ4LCAyMTAsIDI0OCwgMjE1LCAyNDksIDYwLCAxNzgsIDEsIDIyNiwgMTM4LCAKLSAgICAyNDUsIDU4LCA3NiwgMTc4LCAxLCAyNDUsIDIyNywgMTc4LCAxLCAyMzUsIDE4NywgMTc4LCAxLCAyNDksIDc4LCAxNzgsIDEsIAotICAgIDI1MSwgMTcsIDE3OCwgMSwgMjUwLCAxODksIDE3OCwgMSwgMjE4LCAxNjEsIDE3OCwgMSwgMjMyLCAxMzEsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDEsIDE3OCwgMSwgMjQwLCAxMTAsIDE3OCwgMSwgMjI0LCA5NiwgMTc4LCAxLCAyMTEsIDE3OCwgMTc4LCAyMTksIAotICAgIDE1NSwgMjI0LCAxNDAsIDE3OCwgMjMwLCA4NSwgMjI0LCAxNDAsIDE3OCwgMjQ5LCAxMzEsIDIyNCwgMTQwLCAxNzgsIDI1NCwgCi0gICAgNiwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA0NiwgODcsIDIxNywgODMsIDEsIDYxLCAyMTcsIDgzLCAxLCAKLSAgICA3MywgMjE3LCA4MywgMSwgNzAsIDIxNywgODMsIDEsIDE3NiwgMjE3LCA4MywgMSwgMjQzLCAxMzUsIDIxNywgODMsIDEsIAotICAgIDIyOSwgNzcsIDIxNywgODMsIDEsIDIxNywgMTA1LCAyMTcsIDgzLCAxLCAyNDgsIDIyMSwgMjE3LCA4MywgMSwgMTk3LCAKLSAgICAyMTcsIDgzLCAxLCAxOTAsIDIxNywgODMsIDEsIDI1MiwgMTkxLCAyMTcsIDgzLCAxLCAxODQsIDIxNywgODMsIDEsIDE5MSwgCi0gICAgMjE3LCA4MywgMSwgMjMzLCAxMzUsIDIxNywgODMsIDEsIDIxMiwgNjUsIDIxNywgODMsIDEsIDIwNiwgMjE3LCA4MywgMSwgCi0gICAgMTYyLCAyMTcsIDgzLCAyNSwgNSwgNzMsIDIxNywgODMsIDI1LCA1LCA3MCwgMjE3LCA4MywgNSwgMjEzLCAxNTIsIDI0MiwgCi0gICAgNywgMSwgNjEsIDI0MiwgNywgMSwgNzMsIDI0MiwgNywgMSwgNzAsIDI0MiwgNywgMSwgMTc2LCAyNDIsIDcsIDEsIDI0MywgCi0gICAgMTM1LCAyNDIsIDcsIDEsIDIyOSwgNzcsIDI0MiwgNywgMSwgMjE3LCAxMDUsIDI0MiwgNywgMSwgMjQ4LCAyMjEsIDI0MiwgCi0gICAgNywgMSwgMTk3LCAyNDIsIDcsIDEsIDE5MCwgMjQyLCA3LCAxLCAyNTIsIDE5MSwgMjQyLCA3LCAxLCAxODQsIDI0MiwgNywgCi0gICAgMSwgMTkxLCAyNDIsIDcsIDEsIDIwNSwgMjQyLCA3LCAxLCAyMzMsIDEzNSwgMjQyLCA3LCAxLCAyMTIsIDY1LCAyNDIsIDcsIAotICAgIDEsIDIwNiwgMjQyLCA3LCAxLCAxNjIsIDI0MiwgNywgMjUsIDUsIDczLCAyNDIsIDcsIDI1LCA1LCA3MCwgMjQyLCA3LCA1LCAKLSAgICAyMjYsIDQ5LCAyMjUsIDEyNiwgMjE5LCAxNTUsIDIyNCwgMTQwLCAyMjUsIDEyNiwgNTIsIDIyNCwgMTQwLCAyNTEsIDEyMCwgCi0gICAgMSwgNjEsIDI1MSwgMTIwLCAxLCA3MywgMjUxLCAxMjAsIDEsIDcwLCAyNTEsIDEyMCwgMSwgMTc2LCAyNTEsIDEyMCwgMSwgCi0gICAgMjQzLCAxMzUsIDI1MSwgMTIwLCAxLCAyMjksIDc3LCAyNTEsIDEyMCwgMSwgMjE3LCAxMDUsIDI1MSwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjUxLCAxMjAsIDEsIDE5NywgMjUxLCAxMjAsIDEsIDE5MCwgMjUxLCAxMjAsIDEsIDI1MiwgMTkxLCAyNTEsIDEyMCwgCi0gICAgMSwgMTg0LCAyNTEsIDEyMCwgMSwgMTkxLCAyNTEsIDEyMCwgMSwgMjA1LCAyNTEsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MSwgCi0gICAgMTIwLCAxLCAyMTIsIDY1LCAyNTEsIDEyMCwgMSwgMjA2LCAyNTEsIDEyMCwgMSwgMTYyLCAyNTEsIDEyMCwgMjUsIDUsIDczLCAKLSAgICAyNTEsIDEyMCwgMjUsIDUsIDcwLCAyMTcsIDgyLCAxLCA2MSwgMjE3LCA4MiwgMSwgNzMsIDIxNywgODIsIDEsIDcwLCAyMTcsIAotICAgIDgyLCAxLCAxNzYsIDIxNywgODIsIDEsIDI0MywgMTM1LCAyMTcsIDgyLCAxLCAyMjksIDc3LCAyMTcsIDgyLCAxLCAyMTcsIAotICAgIDEwNSwgMjE3LCA4MiwgMSwgMjQ4LCAyMjEsIDIxNywgODIsIDEsIDE5NywgMjE3LCA4MiwgMSwgMTkwLCAyMTcsIDgyLCAxLCAKLSAgICAyNTIsIDE5MSwgMjE3LCA4MiwgMSwgMTg0LCAyMTcsIDgyLCAxLCAxOTEsIDIxNywgODIsIDEsIDIzMywgMTM1LCAyMTcsIAotICAgIDgyLCAxLCAyMTIsIDY1LCAyMTcsIDgyLCAxLCAyMDYsIDIxNywgODIsIDI1LCA1LCA3MywgMjE3LCA4MiwgMjUsIDUsIDcwLCAKLSAgICA2OSwgMSwgMTc2LCA2OSwgMSwgMjM0LCAxMzIsIDY5LCAxLCAyMzQsIDI4LCA2OSwgMSwgMjM0LCAxMDUsIDY5LCAxLCAyMjksIAotICAgIDQsIDY5LCAxLCAyNTEsIDMzLCA2OSwgMSwgMjUwLCAxNTcsIDY5LCAxLCAyNDksIDIzOCwgNjksIDEsIDI1MCwgODYsIDY5LCAKLSAgICAxLCAyMjcsIDEzNCwgNjksIDEsIDI0OCwgMjIxLCA2OSwgMSwgMjE1LCAxNDQsIDY5LCAxLCAyNDcsIDE0NSwgNjksIDEsIAotICAgIDIxNSwgMTM5LCA2OSwgMSwgMjI4LCA4MCwgNjksIDEsIDIxNywgMTA1LCA2OSwgMSwgMjE2LCAyMDgsIDY5LCAxLCAxMTEsIAotICAgIDY5LCAxLCAyMTYsIDE1NiwgNjksIDEsIDIyOCwgNzQsIDY5LCAxLCAyNTIsIDE5MSwgNjksIDEsIDIyNSwgMTQ3LCA2OSwgMSwgCi0gICAgMjI1LCAxNiwgNjksIDEsIDIyNSwgMTIxLCA2OSwgMSwgMjMwLCAxNjEsIDY5LCAxLCAyMTAsIDI0NCwgNjksIDEsIDIyMiwgCi0gICAgMjExLCA2OSwgMSwgMjMyLCAxNTYsIDY5LCAxLCAyMTMsIDEzOCwgNjksIDEsIDIyMCwgMTAyLCA2OSwgMSwgMjE4LCAxODQsIAotICAgIDY5LCAxLCAyMDYsIDY5LCAxLCAxNjIsIDY5LCAxLCAyMzMsIDEzNSwgNjksIDEsIDIyNCwgODgsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyNCwgNzQsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgODcsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNTMsIDY5LCAKLSAgICAyMzUsIDI0MywgMjUsIDIyNCwgNDgsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgCi0gICAgMiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDYsIDY5LCAyMzUsIDI0MywgMjUsIDIyMywgMjQ1LCA2OSwgMjM1LCAyNDMsIAotICAgIDI1LCAyMjIsIDEwMCwgNjksIDIzNSwgMjQzLCAyNSwgMjIyLCA5MywgNjksIDIzNSwgMjQzLCAyNSwgMjMyLCA2MiwgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjMyLCA1MiwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA2OSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICA4MCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzOCwgMjE1LCA0OSwgMTEwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAKLSAgICAyMTUsIDQ5LCAxMDUsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNzAsIDY5LCAyNSwgMjM1LCAyMjksIDI1NCwgNDUsIDY5LCAKLSAgICAyNSwgMjM1LCAyMjksIDI1NSwgNzMsIDY5LCAyNSwgNSwgMjU1LCA3MywgNjksIDI1LCA1LCA3MywgNjksIDI1LCA1LCAyMzYsIAotICAgIDMzLCA2OSwgMjUsIDUsIDIxMSwgMTE3LCA2OSwgMjUsIDUsIDIxMCwgMTY5LCA2OSwgMjUsIDUsIDcwLCA2OSwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCA2OSwgMjUsIDUsIDIxNCwgMjI5LCA2OSwgMjUsIDUsIDIyNiwgMjM0LCA2OSwgMjUsIDUsIDE5MSwgNjksIAotICAgIDI1LCA1LCAyMzYsIDYwLCA2OSwgMjUsIDUsIDc1LCA2OSwgMjUsIDUsIDI1NCwgMjQzLCA2OSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICA2OSwgMjUsIDUsIDIyNiwgMTgzLCA2OSwgMjUsIDUsIDI1MywgMTkyLCA2OSwgNSwgMjI4LCAyMDYsIDY5LCA1LCAyMjMsIAotICAgIDEyNiwgNjksIDUsIDIxMCwgMTgwLCA2OSwgNSwgMjMwLCA1MiwgNjksIDUsIDIxNSwgMjEzLCA2OSwgNSwgMjUyLCAxNDMsIAotICAgIDY5LCA1LCAyMjIsIDIwNiwgNjksIDUsIDIxNiwgNDAsIDY5LCA1LCAyMzQsIDI0MSwgNjksIDUsIDI1NCwgMjAzLCA2OSwgNSwgCi0gICAgMjIxLCAyNDQsIDIyMSwgMjM4LCA2OSwgNSwgMjEzLCAxNDksIDY5LCA1LCAyNDksIDIzMiwgNjksIDUsIDI1MiwgMTE3LCAKLSAgICA2OSwgNSwgMjM0LCAxMjUsIDY5LCA1LCAyNTIsIDEzNywgNjksIDUsIDI1MSwgOSwgMjI1LCA3MiwgMjMzLCAxODcsIDY5LCAKLSAgICA1LCAyMzMsIDMwLCAyMTYsIDE3LCA2OSwgNSwgMjUyLCAyMCwgNjksIDUsIDIyNSwgMTIzLCAyMzAsIDk5LCA2OSwgNSwgCi0gICAgMjM0LCA5LCA2OSwgMjQ5LCA5OCwgMTYsIDIyMywgMjgsIDY5LCA1LCAyNTMsIDE3NCwgNjksIDUsIDI1MywgMTk1LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDY5LCAyMSwgMTEwLCA2OSwgMjEsIDEwNSwgNjksIDIxLCAxNTgsIDY5LCAyMSwgMTYxLCA2OSwgMjEsIAotICAgIDE4OSwgNjksIDIxLCAxOTQsIDY5LCAyMSwgMTk4LCA2OSwgMjEsIDE5NSwgNjksIDIxLCAyMDAsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIxOSwgNDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIzMCwgNzEsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNSwgNzEsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDI1MiwgNDksIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDI1MSwgMTAzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxNSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI0LCAyMDksIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjA3LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIxMywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMTEsIDgzLCAyNTEsIDIzNiwgCi0gICAgODMsIDI0NSwgMTYzLCA4MywgMjQ5LCAyMTksIDgzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgzLCAyNDksIDIyNiwgODMsIAotICAgIDI0NCwgMTEsIDI0NywgMTE4LCA4MywgMjE2LCAzOSwgMjE5LCA1MiwgMjQwLCAxNjgsIDgzLCAyMTksIDE5MCwgMywgMjUxLCAKLSAgICAxNzIsIDIzMSwgMTU0LCA4MywgMjMxLCAxODMsIDI0OSwgMjE5LCA4MywgMjMxLCAxODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgODMsIDIyOCwgMTkxLCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIDE1NywgMTEwLCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIAotICAgIDE1NywgMTA1LCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIDE1NywgMTU4LCA4MywgMjUsIDIyMCwgMTM3LCA4MywgMjEsIDIxMCwgCi0gICAgODYsIDgzLCAyMSwgMTEwLCA4MywgMjEsIDEwNSwgODMsIDIxLCAxNTgsIDgzLCAyMSwgMTYxLCA4MywgMjEsIDE4OSwgODMsIAotICAgIDIxLCAxOTQsIDgzLCAyMSwgMTk4LCA4MywgMjEsIDE5NSwgODMsIDIxLCAyMDAsIDgzLCAxLCA2MSwgODMsIDEsIDc1LCA4MywgCi0gICAgMSwgNzMsIDgzLCAxLCA3NiwgODMsIDEsIDcwLCA4MywgMSwgMjI2LCAyMzQsIDgzLCAxLCAyMTQsIDIxNCwgODMsIDEsIAotICAgIDI0NSwgMjA5LCA4MywgMSwgMTk3LCA4MywgMSwgMjU0LCAxMTUsIDgzLCAxLCAyNTIsIDE5MSwgODMsIDEsIDE5MCwgODMsIAotICAgIDEsIDIyNCwgODgsIDgzLCAxLCAyNDMsIDEzNSwgODMsIDEsIDE4NCwgODMsIDEsIDIzMywgMTM1LCA4MywgMSwgMjA2LCA4MywgCi0gICAgMSwgMjIwLCAxMDIsIDgzLCAxLCAyMTcsIDEwNSwgODMsIDEsIDI0OCwgMjIxLCA4MywgMSwgMjUwLCAxNTcsIDgzLCAxLCAKLSAgICAyMzUsIDE0MSwgODMsIDEsIDE5MSwgODMsIDEsIDIwNSwgODMsIDEsIDIxMiwgNjUsIDgzLCAxLCAyNDQsIDE5NiwgODMsIDEsIAotICAgIDE3NiwgODMsIDEsIDIzNCwgMTMyLCA4MywgMSwgMjE1LCAxODMsIDgzLCAxLCAyMTAsIDExNiwgODMsIDEsIDI0MiwgNDYsIAotICAgIDgzLCAxLCAyMTAsIDE2LCA4MywgMSwgMjMyLCAyNTQsIDgzLCAxLCAyMTAsIDY5LCA4MywgMSwgMjUwLCAxMTAsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTksIDI1LCA1MCwgODMsIDEsIDIxNiwgMzksIDc1LCA4MywgMSwgMjE2LCAzOSwgNzMsIDgzLCAxLCAyMTYsIAotICAgIDM5LCA3NiwgODMsIDEsIDIxNiwgMzksIDcwLCA4MywgMSwgMjE2LCAzOSwgMjI2LCAyMzQsIDgzLCAxLCAyMTYsIDM5LCAKLSAgICAyMTQsIDIxNCwgODMsIDEsIDIxNiwgMzksIDI1NCwgMTE1LCA4MywgMSwgMjE2LCAzOSwgMjUyLCAxOTEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAxOTAsIDgzLCAxLCAyMTYsIDM5LCAyMjQsIDg4LCA4MywgMSwgMjE2LCAzOSwgMjQzLCAxMzUsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAxODQsIDgzLCAxLCAyMTYsIDM5LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI0OCwgMjIxLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjUwLCAxNTcsIDgzLCAxLCAyMTYsIDM5LCAyMzUsIDE0MSwgODMsIDEsIDIxNiwgMzksIDIxNSwgMTgzLCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMTkxLCA4MywgMSwgMjE2LCAzOSwgMjEyLCA2NSwgODMsIDEsIDIxNiwgMzksIDE3NiwgODMsIDEsIDIxNiwgCi0gICAgMzksIDI0MywgMTMyLCA4MywgMSwgMjE2LCAzOSwgMjQyLCA0NiwgODMsIDEsIDIxNiwgMzksIDIzNSwgMTA3LCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMjI4LCAyMzEsIDgzLCAxLCAyMTYsIDM5LCAyNDYsIDM4LCA4MywgMSwgMjE5LCAxOTAsIDc1LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDczLCA4MywgMSwgMjE5LCAxOTAsIDIzNSwgMTUyLCA4MywgMSwgMjE5LCAxOTAsIDIxNCwgMjE0LCA4MywgCi0gICAgMSwgMjE5LCAxOTAsIDcwLCA4MywgMSwgMjE5LCAxOTAsIDI1NCwgMTE1LCA4MywgMSwgMjE5LCAxOTAsIDE3NiwgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyNDMsIDEzNSwgODMsIDEsIDIxOSwgMTkwLCAxNjIsIDgzLCAxLCAyMTksIDE5MCwgMTkwLCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDIyMCwgMTAyLCA4MywgMSwgMjE5LCAxOTAsIDIxNywgMTA1LCA4MywgMSwgMjE5LCAxOTAsIDI0OCwgMjIxLCAKLSAgICA4MywgMSwgMjE5LCAxOTAsIDIzNSwgMTQxLCA4MywgMSwgMjE5LCAxOTAsIDI0NCwgMTk2LCA4MywgMSwgMjE5LCAxOTAsIAotICAgIDI0MywgMTMyLCA4MywgMSwgMjE5LCAxOTAsIDI0MiwgNDYsIDgzLCAxLCAyMTksIDE5MCwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjEwLCAxMTYsIDgzLCAxLCAyMTksIDE5MCwgMjIzLCAxODQsIDgzLCAxLCAyMTksIDE5MCwgMjUwLCAxNTcsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCA3MywgODMsIDEsIDIzMSwgMTgzLCAxNzYsIDgzLCAKLSAgICAxLCAyMzEsIDE4MywgMjA1LCA4MywgMSwgMjMxLCAxODMsIDI0NCwgMTk2LCA4MywgMSwgMjMxLCAxODMsIDIxMCwgODIsIAotICAgIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgNzYsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEzLCAKLSAgICAxNDgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAxODYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDE5MywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MiwgMTU1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxMzQsIDI1MiwgMTU1LCA4MywgMSwgMjU0LCAKLSAgICAxNjIsIDI0MywgMTE2LCA2MSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgNzMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDE3NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjUxLCAzMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE1LCAxNTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxNSwgMTQ0LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDEzNSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjI4LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNDgsIDIyMSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTkwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjUsIAotICAgIDE0NywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE4LCAyMjMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgCi0gICAgODIsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTQsIAotICAgIDIwOSwgODMsIDEsIDIxNiwgMzksIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyMTYsIDM5LCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDIsIDI0OSwgCi0gICAgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyOSwgNzcsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIAotICAgIDI0MywgMTE2LCAyNTEsIDMzLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjM1LCAxMTQsIDgzLCAxLCAKLSAgICAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDI0OCwgMTE5LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyMzEsIAotICAgIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDI1LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE4LCAyMjMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDksIDcyLCA4MywgMSwgMjMxLCAxODMsIAotICAgIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgCi0gICAgMTE2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxNjMsIDcwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxNjMsIAotICAgIDE5MSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1MiwgMTgsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDI0OCwgMjExLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjMyLCAyNTQsIDE4LCAxOSwgCi0gICAgMjI2LCAxMDksIDE4LCAxOSwgMjUzLCAxNjcsIDE4LCAxOSwgMjU1LCAyOCwgMTgsIDE5LCAyMTIsIDI1LCAxOCwgMTksIAotICAgIDIyNCwgMjIxLCAxOCwgMTksIDIyNSwgMjI5LCAxOCwgMTksIDIyNCwgMTA1LCAxOCwgMTksIDIxNywgMzEsIDE4LCAxOSwgCi0gICAgMjM0LCAxODksIDE4LCAxOSwgMjMzLCAxNzksIDE4LCAxOSwgMjMxLCAxMzIsIDE4LCAxOSwgMjI4LCAzNywgMTgsIDE5LCAKLSAgICAyMjksIDE4MSwgMTgsIDE5LCAyMzMsIDY4LCAxOCwgMTksIDIxOSwgMjIsIDE4LCAxOSwgMjIxLCAyMTEsIDE4LCAxOSwgCi0gICAgMjE5LCAyMzIsIDE4LCAxOSwgMjIwLCA2NiwgMTgsIDE5LCAyMTksIDIwMSwgMTgsIDE5LCAyMTAsIDIyMCwgMTgsIDE5LCAKLSAgICAyMTEsIDUyLCAxOCwgMTksIDIyMywgMTM0LCAxOCwgMTksIDIyNywgMTcxLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MSwgCi0gICAgMTgsIDE5LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNzAsIDE4LCAxOSwgMjI3LCAxNjksIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDIyNywgMTY5LCAxOCwgMTksIDIyNywgMTY4LCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE2OCwgMTgsIDE5LCAKLSAgICAyMjIsIDEwNSwgMTgsIDE5LCAyMjIsIDEwNCwgMTgsIDE5LCAyMjIsIDEwMywgMTgsIDE5LCAyMjIsIDEwMiwgMTgsIDE5LCAKLSAgICAyMjIsIDEwMSwgMTgsIDE5LCAyMjIsIDEwOSwgMTgsIDE5LCAyMjYsIDIxNiwgMjI2LCAxMDUsIDE4LCAxOSwgMjI2LCAyMTYsIAotICAgIDIxNywgMTUyLCAxOCwgMTksIDIyNiwgMjE2LCAyMzUsIDIzLCAxOCwgMTksIDIyNiwgMjE2LCAyNTEsIDY2LCAxOCwgMTksIAotICAgIDIyNiwgMjE2LCAxOTMsIDE4LCAxOSwgMjI2LCAyMTYsIDIzMCwgMjUsIDE4LCAxOSwgMjI2LCAyMTYsIDIyMiwgOTEsIDE4LCAKLSAgICAxOSwgMjI2LCAyMTYsIDIyMCwgMTA0LCAxOCwgMTksIDI0NSwgMjE5LCAyMTIsIDk4LCAxOCwgMTksIDIxMiwgNywgMjEyLCAKLSAgICA5OCwgMTgsIDE5LCA0MCwgNCwgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDIyMywgMTU3LCAyNDcsIDEyMCwgMTgsIDE5LCAyMjMsIAotICAgIDIyMywgMjIyLCAxMDYsIDE4LCAxOSwgMTU5LCAyMzIsIDEyNywgMTgsIDE5LCAxNTksIDIzMywgMTM0LCAxOCwgMTksIDIxNiwgCi0gICAgMTI2LCAxOCwgMTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM4LCAxOCwgMTksIDIxNSwgCi0gICAgMTQzLCAxOCwgMTksIDIxNiwgNDksIDE4LCAxOSwgMjE2LCA1MSwgMTgsIDE5LCAyMjEsIDIwOSwgMjE5LCAyMDYsIDE4LCAKLSAgICAxOSwgMjIxLCAyMDksIDIyMCwgMSwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCA1MywgMTgsIDE5LCA3MiwgMjQyLCA3MywgMTgsIAotICAgIDE5LCA3MiwgMjQ4LCA1MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQzLCAxMzIsIDE4LCAxOSwgNzIsIDI0MiwgNzgsIDE4LCAKLSAgICAxOSwgMjIxLCAyMDksIDIzNSwgMzMsIDE4LCAxOSwgNzIsIDIzNSwgMzEsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgCi0gICAgMTU2LCAxOCwgMTksIDI1MiwgNjgsIDI0OCwgNTIsIDE1MywgMTgsIDE5LCA3MiwgMjQ4LCA0NywgMjIyLCA5MSwgMjMyLCAKLSAgICAyMjMsIDIxMywgMTIyLCAyMzMsIDEwLCAyMzIsIDIyMywgMSwgMTc2LCAyMzIsIDIyMywgMSwgMjM0LCAxMzIsIDIzMiwgCi0gICAgMjIzLCAxLCAyNDMsIDEzNSwgMjMyLCAyMjMsIDEsIDI0MiwgMjQ5LCAyMzIsIDIyMywgMSwgMjI5LCA3NywgMjMyLCAyMjMsIAotICAgIDEsIDI1MSwgMzMsIDIzMiwgMjIzLCAxLCAyNTAsIDE1NywgMjMyLCAyMjMsIDEsIDIzNSwgMTQxLCAyMzIsIDIyMywgMSwgCi0gICAgMjM1LCAxMTQsIDIzMiwgMjIzLCAxLCAyMTEsIDcxLCAyMzIsIDIyMywgMSwgMjE3LCAxMDUsIDIzMiwgMjIzLCAxLCAyMTYsIAotICAgIDIwOCwgMjMyLCAyMjMsIDEsIDI0OCwgMjIxLCAyMzIsIDIyMywgMSwgMjQ4LCAyNSwgMjMyLCAyMjMsIDEsIDE5NywgMjMyLCAKLSAgICAyMjMsIDEsIDE5MCwgMjMyLCAyMjMsIDEsIDIyNSwgMTQ3LCAyMzIsIDIyMywgMSwgMjUyLCAxOTEsIDIzMiwgMjIzLCAxLCAKLSAgICAyNTIsIDE4LCAyMzIsIDIyMywgMSwgMTg0LCAyMzIsIDIyMywgMSwgMTkxLCAyMzIsIDIyMywgMSwgMjA1LCAyMzIsIDIyMywgCi0gICAgMSwgMjMzLCAxMzUsIDIzMiwgMjIzLCAxLCAyMTIsIDY1LCAyMzIsIDIyMywgMSwgMjIwLCAxMDIsIDIzMiwgMjIzLCAxLCAKLSAgICAyMTgsIDIyMywgMjMyLCAyMjMsIDEsIDIwNiwgMjMyLCAyMjMsIDEsIDE2MiwgMjMyLCAyMjMsIDI1LCA1LCA2MSwgMjMyLCAKLSAgICAyMjMsIDI1LCA1LCA3MywgMjMyLCAyMjMsIDI1LCA1LCA3MCwgMjMyLCAyMjMsIDI1LCA1LCAyNDUsIDIwOSwgMjMyLCAyMjMsIAotICAgIDI1LCA1LCAyNTQsIDIwMSwgMjMyLCAyMjMsIDI1LCA1LCAyMjYsIDE4MywgMjMyLCAyMjMsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMjMyLCAyMjMsIDI1LCA1LCA3NSwgMjMyLCAyMjMsIDI1LCA1LCA3NiwgMjMyLCAyMjMsIDIxOCwgNzMsIDEsIDE5MSwgMjMyLCAKLSAgICAyMjMsIDIxOCwgNzMsIDEsIDIwNSwgMjMyLCAyMjMsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCA0LCAxLCAxNzYsIAotICAgIDIzMiwgMjIzLCA0LCAxLCAyMjksIDc3LCAyMzIsIDIyMywgNCwgMSwgMjU0LCA3NSwgMjMyLCAyMjMsIDQsIDEsIDIxNywgCi0gICAgMTA1LCAyMzIsIDIyMywgNCwgMSwgMTk3LCAyMzIsIDIyMywgNCwgMSwgMTkwLCAyMzIsIDIyMywgNCwgMSwgMTg0LCAyMzIsIAotICAgIDIyMywgNCwgMSwgMjA1LCAyMzIsIDIyMywgNCwgMSwgMjMzLCAxMzUsIDIzMiwgMjIzLCA1LCAyMzAsIDg5LCAyMzIsIDIyMywgCi0gICAgNSwgMjM0LCAxNzEsIDIzMiwgMjIzLCA1LCAyMjIsIDMyLCAyMzIsIDIyMywgNSwgMjMyLCAxMjcsIDIzMiwgMjIzLCAyNDUsIAotICAgIDMxLCA3OCwgMjMyLCAyMjMsIDIyNCwgMTMsIDc4LCAyMzIsIDIyMywgMjEsIDIxMCwgODYsIDIzMiwgMjIzLCAyMSwgMTEwLCAKLSAgICAyMzIsIDIyMywgMjEsIDEwNSwgMjMyLCAyMjMsIDIxLCAxNTgsIDIzMiwgMjIzLCAyMSwgMTYxLCAyMzIsIDIyMywgMjEsIAotICAgIDE4OSwgMjMyLCAyMjMsIDIxLCAxOTQsIDIzMiwgMjIzLCAyMSwgMTk4LCAyMzIsIDIyMywgMjEsIDE5NSwgMjMyLCAyMjMsIAotICAgIDIxLCAyMDAsIDM5LCAyMzMsIDU5LCAxLCAxNzYsIDM5LCAyMzMsIDU5LCAxLCAyMTEsIDE2NSwgMzksIDIzMywgNTksIDEsIAotICAgIDIyOSwgNzcsIDM5LCAyMzMsIDU5LCAxLCAyMTUsIDE4MywgMzksIDIzMywgNTksIDEsIDIwNiwgMzksIDIzMywgNTksIDEsIAotICAgIDE5MSwgMzksIDIzMywgNTksIDEsIDIxNywgMTA1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyMDgsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMzMsIDEzNSwgMzksIDIzMywgNTksIDEsIDE5MCwgMzksIDIzMywgNTksIDEsIDIyNSwgMTQ3LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTg0LCAzOSwgMjMzLCA1OSwgMSwgMjQ0LCAxOTYsIDM5LCAyMzMsIDU5LCAxLCAyMTQsIDI3LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTYyLCAzOSwgMjMzLCA1OSwgMSwgMjI0LCA4OCwgMzksIDIzMywgNTksIDEsIDIzNCwgMTMyLCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjE1LCAxNzUsIDM5LCAyMzMsIDU5LCAxLCAxOTcsIDM5LCAyMzMsIDU5LCAxLCA2MSwgMzksIDIzMywgNTksIDEsIDczLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjQ1LCAyMDksIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDE5NywgMzksIDIzMywgNTksIDEsIDcwLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjI2LCAxODMsIDM5LCAyMzMsIDU5LCAxLCA3NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjE0LCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgNzUsIDM5LCAyMzMsIDU5LCAxLCAyNTMsIDE5MCwgMzksIDIzMywgNTksIDEsIDI1NCwgMjAxLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNTksIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIAotICAgIDI2LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNSwgMzksIDIzMywgNTksIDEsIDIxNiwgMjQsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTI1LCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI0LCA4OCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE3NiwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI5LCA3NywgMTY2LCAzOSwgCi0gICAgMTczLCAxLCAxMjEsIDE3NiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjI5LCA3NywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNSwgMTgzLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjA2LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTcsIDEwNSwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTk3LCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMjE3LCAxMDUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTYsIDIwOCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNSwgMTQ3LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI1LCAxNDcsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDQsIDE5NiwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDEzNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTM1LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjQ4LCAyMjEsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0OCwgCi0gICAgMjIxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjUyLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDE4NCwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxODQsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTIxLCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMTgsIDgyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNSwgMjE5LCAyMzksIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgNzMsIAotICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNiwgMzMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDcwLCAxNjYsIDM5LCAxNzMsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzUsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NCwgMjQzLCAxNjYsIAotICAgIDM5LCAxNzMsIDI1LCA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI3LCAwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKLSAgICAyMTQsIDIxNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUzLCAxNjcsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgMjgsIAotICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTExLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjYsIDEwOSwgMTY2LCAzOSwgCi0gICAgMTczLCAyNSwgNSwgMjI2LCAyNTMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKLSAgICAyMzUsIDE1MiwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgNzksIAotICAgIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMjUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDE5MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICA0MCwgMjM1LCAyMywgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCA2MCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNTgsIAotICAgIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE1OCwgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU3LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAKLSAgICAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgMzksIDE3MywgMjEsIDE4OSwgMTY2LCAzOSwgMTczLCAyMSwgCi0gICAgMTk0LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTgsIDE2NiwgMzksIDE3MywgMjEsIDE5NSwgMTY2LCAzOSwgMTczLCAyMSwgMjAwLCAKLSAgICAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTEwLCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTIwLCAxNjYsIDM5LCAxNzMsIDUsIAotICAgIDIzMywgMTE5LCA2OSwgMTYsIDIyNSwgMjM2LCA2OSwgMTYsIDIzMCwgNzIsIDIzNCwgMjUsIDY5LCAxNiwgMjI1LCA3MiwgCi0gICAgMjM0LCAyNSwgNjksIDE2LCAyNTIsIDUwLCAyMzQsIDI1LCA2OSwgMTYsIDI1MSwgMTA0LCAyMzQsIDI1LCA2OSwgMTYsIAotICAgIDIyNCwgMjE2LCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjA4LCAyMzQsIDI1LCAKLSAgICA2OSwgMTYsIDIyNCwgMjE0LCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTczLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY5LCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMzQsIDI1LCA2OSwgMTYsIAotICAgIDI0OCwgMTcxLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTcwLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMzQsIDI1LCAKLSAgICA2OSwgMTYsIDIxNSwgODcsIDY5LCAxNiwgMjMwLCA3MiwgMjIyLCAyMDUsIDY5LCAxNiwgMjI1LCA3MiwgMjIyLCAyMDUsIAotICAgIDY5LCAxNiwgMjUyLCA1MCwgMjIyLCAyMDUsIDY5LCAxNiwgMjUxLCAxMDQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjE2LCAKLSAgICAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxMCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMDgsIDIyMiwgMjA1LCA2OSwgMTYsIAotICAgIDIyNCwgMjE0LCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxMiwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzMsIDIyMiwgCi0gICAgMjA1LCA2OSwgMTYsIDI0OCwgMTY5LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE2OCwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAKLSAgICAxNzEsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTcwLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE2NywgMjIyLCAyMDUsIAotICAgIDI1MSwgMTIxLCAxLCAxNzYsIDI1MSwgMTIxLCAxLCAyNDMsIDEzNSwgMjUxLCAxMjEsIDEsIDIyOSwgNzcsIDI1MSwgMTIxLCAKLSAgICAxLCAyMjksIDIyLCAyNTEsIDEyMSwgMSwgMTkwLCAyNTEsIDEyMSwgMSwgMjUyLCAxOTEsIDI1MSwgMTIxLCAxLCAxODQsIAotICAgIDI1MSwgMTIxLCAxLCAyMzAsIDEwNSwgMjUxLCAxMjEsIDEsIDIxNywgMTA1LCAyNTEsIDEyMSwgMSwgMjQ4LCAyMjEsIDI1MSwgCi0gICAgMTIxLCAxLCAxOTcsIDI1MSwgMTIxLCAxLCAyMjgsIDM2LCAyNTEsIDEyMSwgMSwgMjUxLCAzMywgMjUxLCAxMjEsIDEsIAotICAgIDIzNSwgMTQxLCAyNTEsIDEyMSwgMSwgMjI3LCAxNjUsIDI1MSwgMTIxLCAxLCAyMjcsIDE1OCwgMjUxLCAxMjEsIDEsIDE5MSwgCi0gICAgMjUxLCAxMjEsIDEsIDIwNSwgMjUxLCAxMjEsIDEsIDIzMywgMTM1LCAyNTEsIDEyMSwgMSwgMjE0LCAyNywgMjUxLCAxMjEsIAotICAgIDEsIDIwNiwgMjUxLCAxMjEsIDEsIDYxLCAyNTEsIDEyMSwgMSwgMTYyLCAyNTEsIDEyMSwgMjUsIDUsIDczLCAyNTEsIDEyMSwgCi0gICAgMjUsIDUsIDcwLCAyNTEsIDEyMSwgMjUsIDUsIDc1LCAyNTEsIDEyMSwgMjUsIDUsIDc2LCAyNTEsIDEyMSwgMjUsIDUsIAotICAgIDI1NCwgMjQzLCAyNTEsIDEyMSwgMjI2LCA2MCwgMjUxLCAxMjEsIDI0NSwgMTQzLCA2NCwgMjIxLCAxNzIsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzMiwgMzksIDg5LCAxLCAxMjUsIDIzMywgMTcxLCAzOSwgODksIDEsIAotICAgIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzMiwgMzksIDg5LCAxLCAKLSAgICAyMjksIDc3LCAzOSwgODksIDEsIDEyNSwgMjUxLCAzMywgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTU3LCAzOSwgODksIDEsIAotICAgIDEyMSwgMjUxLCAzMywgMzksIDg5LCAxLCAxMjEsIDIwNiwgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTU3LCAzOSwgODksIDEsIAotICAgIDIyNywgMTY1LCAzOSwgODksIDEsIDIyMywgMTQwLCAzOSwgODksIDEsIDEyNSwgMjIzLCAxMzgsIDM5LCA4OSwgMSwgMjQ4LCAKLSAgICAyMjEsIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyMjMsIDE0OSwgMzksIDg5LCAxLCAxMjUsIDIxNywgCi0gICAgMTA1LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTIxLCAyMTcsIDEwNSwgMzksIDg5LCAxLCAxMjEsIAotICAgIDIxNiwgMjA4LCAzOSwgODksIDEsIDE5NywgMzksIDg5LCAxLCAyNTIsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjUsIDIyNSwgMTQ3LCAzOSwgODksIDEsIDEyNSwgMjQ0LCAxOTYsIDM5LCA4OSwgMSwgMTIxLCAxOTAsIDM5LCAKLSAgICA4OSwgMSwgMTIxLCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDIyNSwgMTQ3LCAzOSwgODksIDEsIDE4NCwgMzksIDg5LCAKLSAgICAxLCAxMjEsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzcsIAotICAgIDM5LCA4OSwgMSwgMjMzLCAxMzUsIDM5LCA4OSwgMSwgMjMyLCA5MywgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIAotICAgIDEyNSwgMjIwLCAxMDIsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIDIyMywgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE4NCwgMzksIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIAotICAgIDg5LCAxLCA3MywgMzksIDg5LCAxLCAyMzYsIDMzLCAzOSwgODksIDEsIDcwLCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgCi0gICAgODksIDEsIDI0NSwgMjA5LCAzOSwgODksIDEsIDIyNiwgMTgzLCAzOSwgODksIDEsIDIzMywgMTIwLCAzOSwgODksIDEsIAotICAgIDI0MiwgMTMyLCAyMDYsIDM5LCA4OSwgMTE2LCA1LCAxNDcsIDIwNSwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjMzLCAxMzUsIAotICAgIDM5LCA4OSwgMTE2LCA1LCAyMzMsIDEzNiwgMjE3LCA1OCwgMjMzLCAxMDksIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIzNCwgCi0gICAgMjMxLCAyMzMsIDEwOSwgMzksIDg5LCAxMTYsIDUsIDQwLCAyMjksIDc3LCAzOSwgODksIDExNiwgNSwgMTIxLCAxOTAsIDM5LCAKLSAgICA4OSwgMTE2LCA1LCAxMjUsIDIyMywgMTM5LCAxNzcsIDEyMSwgMTkwLCAzOSwgODksIDExNiwgNSwgMTg0LCAzOSwgODksIAotICAgIDExNiwgNSwgMjUyLCAxOTEsIDM5LCA4OSwgMTE2LCA1LCAyMDYsIDM5LCA4OSwgNSwgMjIyLCAxMCwgMzksIDg5LCAyNSwgNSwgCi0gICAgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA0LCAyMjEsIDIyNiwgMzksIDg5LCAyNSwgNSwgMjU1LCA3MywgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE3LCA2NCwgMjU1LCA3MywgMzksIDg5LCAyNSwgNSwgNzMsIDM5LCA4OSwgMjUsIDUsIDIzNiwgMzMsIDM5LCAKLSAgICA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIDExNywgMzksIDg5LCAyNSwgNSwgNzAsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3NiwgMzksIDg5LCAyNSwgNSwgMjI3LCAxLCA1MSwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjI2LCAxMDksIDM5LCA4OSwgMjUsIDUsIDc1LCAzOSwgODksIDI1LCA1LCAyNTQsIDI0MywgMzksIDg5LCAyNSwgCi0gICAgNSwgMjI2LCAxODMsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjAxLCAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMDEsIDM5LCAKLSAgICA4OSwgMjUsIDUsIDIyNywgMSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIzNCwgMjMwLCAzOSwgODksIDUsIDIxNiwgMjksIAotICAgIDM5LCA4OSwgNSwgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI3LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgCi0gICAgMjYsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAyNSwgMzksIDg5LCA1LCAyMjMsIDE4OCwgMjQyLCA0NSwgMzksIDg5LCA1LCAKLSAgICAyMzEsIDIwNCwgMjIxLCAyNTMsIDM5LCA4OSwgNSwgMjM0LCA5NiwgMjM0LCAyMTUsIDM5LCA4OSwgMzgsIDI0OSwgMTE1LCAKLSAgICAyNDcsIDEyMCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjEwLCA4NiwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTEwLCAzOSwgODksIAotICAgIDI0MSwgNDYsIDIxLCAxMDUsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE1OCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTYxLCAzOSwgCi0gICAgODksIDI0MSwgNDYsIDIxLCAxODksIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk4LCAKLSAgICAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDIwMCwgMzksIDg5LCA4OSwgMjEsIDIxMCwgCi0gICAgODYsIDM5LCA4OSwgODksIDIxLCAxMTAsIDM5LCA4OSwgODksIDIxLCAxMDUsIDM5LCA4OSwgODksIDIxLCAxNTgsIDM5LCAKLSAgICA4OSwgODksIDIxLCAxNjEsIDM5LCA4OSwgODksIDIxLCAxODksIDM5LCA4OSwgODksIDIxLCAxOTQsIDM5LCA4OSwgODksIAotICAgIDIxLCAxOTgsIDM5LCA4OSwgODksIDIxLCAxOTUsIDM5LCA4OSwgODksIDIxLCAyMDAsIDM5LCA4OSwgNSwgMjExLCAyNDksIAotICAgIDM5LCA4OSwgNSwgMjExLCAyNDgsIDM5LCA4OSwgNSwgMjIxLCAyMTUsIDM5LCA4OSwgNSwgMjM0LCAxNjAsIDM5LCA4OSwgNSwgCi0gICAgMjQwLCAyMzIsIDM5LCA4OSwgNSwgMjQ3LCAxMzQsIDM5LCA4OSwgNSwgMjIzLCA0OSwgMjIyLCAxODcsIDIyMywgMTQ5LCAKLSAgICAzOSwgODksIDUsIDIzMSwgMjA0LCAyMTEsIDcyLCAzOSwgODksIDUsIDIzNSwgNiwgMzksIDg5LCA1LCAyMzUsIDUsIDM5LCAKLSAgICA4OSwgNSwgMjIxLCAyMjIsIDM5LCA4OSwgNSwgMjIxLCAyMjEsIDM5LCA4OSwgNSwgMjQyLCA5LCAzOSwgODksIDUsIDI1MSwgCi0gICAgMzAsIDEwMiwgNSwgMjE0LCAyMDAsIDIyMywgMzAsIDEwMiwgNSwgMjE0LCAyMDAsIDI1MSwgMSwgMTAyLCA1LCAyNTAsIAotICAgIDE4NiwgMTAyLCA1LCAyMTgsIDE1LCAxMDIsIDUsIDI1MSwgMjMzLCAxMDIsIDEsIDI1NCwgMTg0LCAxMDIsIDEsIDI1NCwgCi0gICAgMTg1LCAyMTcsIDEzLCAxMDIsIDEsIDIzNiwgMjksIDEwMiwgMSwgMjM2LCAzMCwgMjE3LCAxMywgMTAyLCAxLCAyMTQsIAotICAgIDIwMywgMTAyLCAxLCAyMTQsIDIwNCwgMjE3LCAxMywgMTAyLCAxLCAyMjMsIDE4OCwgMjIzLCA3OSwgMTAyLCAxLCAyMjMsIAotICAgIDE4OCwgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAxLCAyMzMsIDEzNiwgMjMzLCAyNCwgMTAyLCAxLCAyMzMsIDEzNiwgMjMzLCAKLSAgICAyNSwgMjE3LCAxMywgMTAyLCAxLCAyNDUsIDE3OSwgMTAyLCAxLCAyNTQsIDE5OSwgMTAyLCAxLCAyMjYsIDIxMiwgMTAyLCAKLSAgICAxLCAyMjYsIDIxMywgMjE3LCAxMywgMTAyLCAxLCAxNzYsIDEwMiwgMSwgMjM1LCAxMywgMjMxLCAyMDcsIDEwMiwgMSwgCi0gICAgMjQzLCAxMzUsIDEwMiwgMSwgMjQzLCAxMzYsIDI0MiwgMTYxLCAxMDIsIDEsIDIyOSwgNzcsIDEwMiwgMSwgMjUxLCAzMywgCi0gICAgMTAyLCAxLCAyNTEsIDM0LCAyMzMsIDEyMywgMTAyLCAxLCAyMzUsIDE0MSwgMTAyLCAxLCAyMzUsIDE0MiwgMjM1LCAxMTgsIAotICAgIDEwMiwgMSwgMjI3LCAxNjUsIDEwMiwgMSwgMjE3LCAxMDYsIDIzMywgNzYsIDEwMiwgMSwgMjE3LCAxMDYsIDIzMCwgNjcsIAotICAgIDIzMSwgMjA3LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAyNTQsIDE0NSwgMTAyLCAxLCAyNDgsIDIyMiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjI5LCAyMjksIDIyMywgMTUyLCAxMDIsIDEsIDIxNywgMTA1LCAxMDIsIDEsIDIxNywgMTA2LCAKLSAgICAyMTcsIDM1LCAxMDIsIDEsIDI0OCwgMjIxLCAxMDIsIDEsIDI0OCwgMjIyLCAyMzEsIDIyNSwgMTAyLCAxLCAxOTcsIDEwMiwgCi0gICAgMSwgMTkwLCAxMDIsIDEsIDIyNiwgOTAsIDIzNCwgMjI2LCAxMDIsIDEsIDI1MiwgMTkxLCAxMDIsIDEsIDI1MiwgMTkyLCAKLSAgICAyMzQsIDE3MiwgMTAyLCAxLCAxODQsIDEwMiwgMSwgMTkxLCAxMDIsIDEsIDIwNSwgMTAyLCAxLCAyMzMsIDEzNSwgMTAyLCAKLSAgICAxLCAyMTIsIDY1LCAxMDIsIDEsIDIyMiwgMzQsIDIyMiwgMjAsIDEwMiwgMSwgMjIyLCAzNCwgMjIxLCAyMzMsIDEwMiwgMSwgCi0gICAgMjA2LCAxMDIsIDEsIDE2MiwgMTAyLCA1LCAyMjMsIDcwLCAxMDIsIDI1LCA1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTQsIAotICAgIDE5OSwgMTAyLCAyNSwgNSwgMjE0LCAyMDAsIDIyMSwgMjI5LCAxMDIsIDI1LCA1LCAyMTgsIDQ3LCAxMDIsIDI1LCA1LCAKLSAgICAyMTgsIDQ4LCAyMzYsIDIxLCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgMjIzLCA3OSwgMTAyLCAyNSwgNSwgMjIzLCAxODgsIAotICAgIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDI1LCA1LCAyMzMsIDEzNiwgCi0gICAgMjMzLCAyNSwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE3LCA2NSwgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMjIzLCA3OSwgMTAyLCAKLSAgICAyNSwgNSwgMjE3LCA2NiwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgCi0gICAgNSwgMjI1LCAxODQsIDEwMiwgMjUsIDUsIDIyNSwgMTg1LCAyMTcsIDEzLCAxMDIsIDI1NCwgMjUwLCAyNTQsIDI0OSwgMTAyLCAKLSAgICAxLCAyMzQsIDI1MSwgMjIxLCAyMjgsIDEwMiwgMSwgMjM0LCAxMDIsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNSwgMzQsIDIyMSwgCi0gICAgMjI4LCAxMDIsIDEsIDI0NSwgMjAzLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTQsIDAsIDIyMSwgMjI4LCAxMDIsIDEsIDIxMCwgCi0gICAgMTA3LCAyMjEsIDIyOCwgMTAyLCAxLCAyNTMsIDIwOSwgMjIxLCAyMjgsIDEwMiwgMjEsIDIxMCwgODYsIDEwMiwgMjEsIAotICAgIDExMCwgMTAyLCAyMSwgMTA1LCAxMDIsIDIxLCAxNTgsIDEwMiwgMjEsIDE2MSwgMTAyLCAyMSwgMTg5LCAxMDIsIDIxLCAKLSAgICAxOTQsIDEwMiwgMjEsIDE5OCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAyMDAsIDEwMiwgMjI2LCAyOSwgMTAyLCAyMjYsIAotICAgIDU1LCAxMDIsIDIxMSwgMjM4LCAxMDIsIDI1MCwgMjM2LCAyMjYsIDQ4LCAxMDIsIDI1MCwgMjM2LCAyMTksIDE3MiwgMTAyLCAKLSAgICAyNTAsIDIzNiwgMjI2LCAyLCAxMDIsIDIyNiwgNTQsIDEwMiwgMjgsIDE2LCAyNDcsIDEyNiwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgNTEsIDEwMiwgMjgsIDE2LCAyNDYsIDY0LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzYsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NywgCi0gICAgMjE4LCAxNSwgMTAyLCAyOCwgMTYsIDI0NywgMjA1LCAxMDIsIDI4LCAxNiwgMjQ4LCAyMTQsIDEwMiwgMjgsIDE2LCAyNDgsIAotICAgIDMzLCAxMDIsIDI4LCAxNiwgMjQ4LCAxOTgsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NywgMjQzLCA1NywgMTAyLCAyOCwgMTYsIAotICAgIDM4LCAyMTcsIDksIDEwMiwgMjgsIDE2LCAzOCwgMjQ1LCAxNDEsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNjcsIDEwMiwgCi0gICAgMjgsIDE2LCAzOCwgMjM0LCAxNjksIDEwMiwgMjgsIDE2LCAzOCwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAKLSAgICAxNjgsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTcwLCAyLCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIAotICAgIDM4LCAyNTIsIDM3LCAxMDIsIDI4LCAxNiwgMzgsIDI0MiwgMTY1LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ2LCAKLSAgICA3NCwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyMDQsIDI0OCwgMjEyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDI1MCwgMCwgCi0gICAgMjE1LCAxMTEsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAyMTcsIDczLCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjA0LCAyMjYsIDQzLCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjA0LCAyMjQsIDEzOSwgMTAyLCAyOCwgMTYsIDIzMywgNDQsIAotICAgIDI1MCwgMCwgMjI1LCAzOCwgMTAyLCAyOCwgMTYsIDIzMywgNDQsIDI1MCwgMCwgMjI1LCAyNiwgMTAyLCAyOCwgMTYsIDIzMywgCi0gICAgNDQsIDIwNCwgMjI1LCA2MSwgMjA3LCA1LCAyMjYsIDI2LCAyMDcsIDUsIDIyNiwgMzksIDIwNywgNSwgMjI2LCAzNSwgMjA3LCAKLSAgICAxLCA2MSwgMjA3LCAxLCA3MywgMjA3LCAxLCA3MCwgMjA3LCAxLCAyNTQsIDI0MywgMjA3LCAxLCA3NiwgMjA3LCAxLCA3NSwgCi0gICAgMjA3LCAxLCAyNDUsIDU1LCAyMDcsIDEsIDE3NiwgMjA3LCAxLCAyMjQsIDg4LCAyMDcsIDEsIDI0MywgMTM1LCAyMDcsIDEsIAotICAgIDIyOSwgNzcsIDIwNywgMSwgMjUxLCAzMywgMjA3LCAxLCAyMzUsIDE0MSwgMjA3LCAxLCAyMTAsIDExNiwgMjA3LCAxLCAKLSAgICAyMjcsIDE2NSwgMjA3LCAxLCAyMTcsIDEwNSwgMjA3LCAxLCAyNDgsIDIyMSwgMjA3LCAxLCAxOTcsIDIwNywgMSwgMTkwLCAKLSAgICAyMDcsIDEsIDI0NCwgMTk2LCAyMDcsIDEsIDIxNCwgMjcsIDIwNywgMSwgMjUyLCAxOTEsIDIwNywgMSwgMTg0LCAyMDcsIDEsIAotICAgIDE5MSwgMjA3LCAxLCAyMDUsIDIwNywgMSwgMjMzLCAxMzUsIDIwNywgMSwgMjEyLCA2NSwgMjA3LCAxLCAyMDYsIDIwNywgMSwgCi0gICAgMjExLCAxNjUsIDIwNywgMSwgMTYyLCAyMDcsIDExNiwgNSwgMjI2LCA1MiwgMjA3LCAxMTYsIDUsIDIyNiwgMjgsIDIwNywgCi0gICAgMTE2LCA1LCAyMjYsIDI1LCAyMDcsIDI1LCA1LCAyMjYsIDQyLCAyMDcsIDI1LCA1LCAyMjYsIDI0LCAyMDcsIDI1LCA1LCAKLSAgICAyMjYsIDQ2LCAyMDcsIDI1LCA1LCAyMjYsIDM0LCAyMDcsIDI1LCA1LCAyMjYsIDUzLCAyMDcsIDI1LCA1LCAyMjYsIDQ0LCAKLSAgICAyMDcsIDUsIDIyNiwgNTYsIDIwNywgNSwgMjEzLCAxNTIsIDIwNywgMTE2LCA1LCAyMjUsIDI0OCwgMTg0LCAyMDcsIDExNiwgCi0gICAgNSwgMjI1LCAyNDgsIDIxMiwgNjUsIDIwNywgMSwgMjM0LCAxMzIsIDIwNywgMSwgMjE3LCAyMzEsIDIwNywgMjEsIDIxMCwgCi0gICAgODYsIDIwNywgMjEsIDExMCwgMjA3LCAyMSwgMTA1LCAyMDcsIDIxLCAxNTgsIDIwNywgMjEsIDE2MSwgMjA3LCAyMSwgMTg5LCAKLSAgICAyMDcsIDIxLCAxOTQsIDIwNywgMjEsIDE5OCwgMjA3LCAyMSwgMTk1LCAyMDcsIDIxLCAyMDAsIDIwNywgMjUzLCAxNzUsIAotICAgIDIwNywgMSwgMjIzLCA1MiwgMjA3LCAxLCAyMzMsIDcsIDIwNywgMSwgMjUyLCAxOCwgMjA3LCAxLCA0MCwgMjM1LCAyMywgCi0gICAgMjA3LCAxLCA0MCwgMTkzLCAyNTIsIDEyMCwgMSwgNjEsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgNjEsIDI1MiwgMTIwLCAxLCAKLSAgICAxNjIsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMTYyLCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE2MiwgMjUyLCAxMjAsIDEsIAotICAgIDI1MiwgMTkxLCAyNTIsIDEyMCwgMSwgMjM0LCAyMTIsIDI1MiwgMTkxLCAyNTIsIDEyMCwgMSwgMTkwLCAyNTIsIDEyMCwgMSwgCi0gICAgMjE5LCAxNjQsIDE5MCwgMjUyLCAxMjAsIDEsIDE5NywgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAxOTcsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTIsIDY1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMjYsIDY3LCAyMTIsIDY1LCAKLSAgICAyNTIsIDEyMCwgMSwgMjQzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjQzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMzUsIAotICAgIDE0MSwgMjUyLCAxMjAsIDEsIDI0OCwgMjIxLCAyNTIsIDEyMCwgMSwgMjA1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDIwNSwgCi0gICAgMjUyLCAxMjAsIDEsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxODQsIDI1MiwgMTIwLCAxLCAyMTksIDI2LCAyMTcsIAotICAgIDEwNSwgMjUyLCAxMjAsIDEsIDIyOCwgNTUsIDIxNywgMTA1LCAyNTIsIDEyMCwgMSwgMjA2LCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDIwNiwgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAyMDYsIDI1MiwgMTIwLCAxLCAxOTEsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMTkxLCAyNTIsIDEyMCwgMSwgMjI5LCA3NywgMjUyLCAxMjAsIDEsIDIzMywgMTM1LCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDIzMywgMTM1LCAyNTIsIDEyMCwgMSwgMjI3LCAxNjUsIDI1MiwgMTIwLCAxLCAyNTEsIDMzLCAyNTIsIDEyMCwgMSwgCi0gICAgMjI5LCAxNDgsIDI1MiwgMTIwLCAxLCAyMzEsIDEyNCwgMjUyLCAxMjAsIDEsIDczLCAyNTIsIDEyMCwgMSwgNzAsIDI1MiwgCi0gICAgMTIwLCA1LCAyMTYsIDMzLCAyNTIsIDEyMCwgMjUsIDUsIDc1LCAyNTIsIDEyMCwgMjUsIDUsIDIyNiwgNjcsIDc1LCAyNTIsIAotICAgIDEyMCwgMjUsIDUsIDI0NSwgMjA5LCAyNTIsIDEyMCwgMjUsIDUsIDczLCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3MywgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCA3NiwgMjUyLCAxMjAsIDI1LCA1LCAyMzQsIDIxMiwgNzYsIDI1MiwgMTIwLCAyNSwgNSwgNzAsIAotICAgIDI1MiwgMTIwLCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAxNjQsIDIwNiwgMjUyLCAxMjAsIDExNiwgNSwgMjI5LCA3OSwgMjUyLCAKLSAgICAxMjAsIDExNiwgNSwgMjQyLCA2MCwgMjUyLCAxMjAsIDIyNiwgMzcsIDI1MiwgMTIwLCAyMjYsIDMzLCAyNTIsIDEyMCwgMTYsIAotICAgIDI1MSwgMjQxLCAyMjksIDIyOSwgMjMxLCAzNywgMjUyLCAxMjAsIDE2LCAyNTEsIDI0MSwgMjI1LCA2NCwgMjUyLCAxMjAsIAotICAgIDE2LCAyNTEsIDI0MSwgMjM1LCA0OCwgMjUyLCAxMjAsIDE2LCAyNTEsIDI0MSwgMjI2LCAzNywgMTk2LCAxLCAxNzYsIDE5NiwgCi0gICAgMSwgMjM0LCAzOSwgMTk2LCAxLCAyMzQsIDEzMiwgMTk2LCAxLCAyNDMsIDEzNSwgMTk2LCAxLCAyNDIsIDE4NiwgMTk2LCAxLCAKLSAgICAyMjksIDc3LCAxOTYsIDEsIDI1MSwgMzMsIDE5NiwgMSwgMjUwLCAxNTcsIDE5NiwgMSwgMjM1LCAxNDEsIDE5NiwgMSwgCi0gICAgMjI3LCAxNjUsIDE5NiwgMSwgMjE3LCAxMDUsIDE5NiwgMSwgMjE2LCAyMDgsIDE5NiwgMSwgMjQ4LCAyMjEsIDE5NiwgMSwgCi0gICAgMTk3LCAxOTYsIDEsIDE5MCwgMTk2LCAxLCAyMjUsIDQyLCAxOTYsIDEsIDIyNSwgMTQ3LCAxOTYsIDEsIDI0NCwgMTk2LCAKLSAgICAxOTYsIDEsIDI0NCwgNzUsIDE5NiwgMSwgMjUyLCAxOTEsIDE5NiwgMSwgMjUxLCAyMjIsIDE5NiwgMSwgMTg0LCAxOTYsIDEsIAotICAgIDIzMCwgMTY4LCAxOTYsIDEsIDIxNSwgMTgzLCAxOTYsIDEsIDIxNSwgMTc1LCAxOTYsIDEsIDI0NiwgMzgsIDE5NiwgMSwgCi0gICAgMTkxLCAxOTYsIDEsIDIwNSwgMTk2LCAxLCAyMzMsIDEzNSwgMTk2LCAxLCAxNjIsIDE5NiwgMSwgMjQxLCAxNTMsIDE5NiwgCi0gICAgMSwgMjE0LCAyNywgMTk2LCAxLCAyMDYsIDE5NiwgMSwgMjIwLCAxMDIsIDE5NiwgMSwgMjEyLCA2NSwgMTk2LCAxLCA2MSwgCi0gICAgMTk2LCAyMTgsIDczLCAxLCAxOTEsIDE5NiwgMjE4LCA3MywgMSwgMjA1LCAxOTYsIDI1LCA1LCAyNTUsIDczLCAxOTYsIDI1LCAKLSAgICA1LCA3MywgMTk2LCAyNSwgNSwgNzYsIDE5NiwgMjUsIDUsIDIyNiwgMTgzLCAxOTYsIDI1LCA1LCA3MCwgMTk2LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE5NiwgMjUsIDUsIDc1LCAxOTYsIDExNiwgNSwgMjM1LCAyMywgMTk2LCAxMTYsIDUsIDE5MywgMTk2LCAKLSAgICAxMTYsIDUsIDE1NiwgMTk2LCAxMTYsIDUsIDIzMCwgMjUsIDE5NiwgMTE2LCA1LCAyMjYsIDEwNSwgMTk2LCAxMTYsIDUsIAotICAgIDE1MywgMTk2LCAxMTYsIDUsIDIxNywgMTUyLCAxOTYsIDExNiwgNSwgMjI3LCAxNDIsIDE5NiwgMTE2LCA1LCAyMzQsIDIzMCwgCi0gICAgMTk2LCA1LCAyMjMsIDE1MCwgMTk2LCA1LCAyMjcsIDIwNSwgMTk2LCAyMjQsIDE0MSwgMjE3LCAxMDMsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIyNywgMTUyLCAyMTYsIDEyMCwgMjE3LCAxMDMsIDE5NiwgMjI0LCAxNDEsIDI1MCwgMTY0LCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyMTUsIDE3MCwgMjUwLCAxNjQsIDE5NiwgMjI0LCAxNDEsIDIxNSwgMTY5LCAxOTYsIDIxLCAyMTAsIDg2LCAxOTYsIAotICAgIDIxLCAxMTAsIDE5NiwgMjEsIDEwNSwgMTk2LCAyMSwgMTU4LCAxOTYsIDIxLCAxNjEsIDE5NiwgMjEsIDE4OSwgMTk2LCAyMSwgCi0gICAgMTk0LCAxOTYsIDIxLCAxOTgsIDE5NiwgMjEsIDE5NSwgMTk2LCAyMSwgMjAwLCAxOTYsIDEsIDIxNSwgMTU2LCAxOTYsIDEsIAotICAgIDIxNSwgMTQ0LCAxOTYsIDEsIDI0OCwgMTM1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMTAsIDg2LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxMTAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDEwNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTU4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxNjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE4OSwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAyMSwgMTk0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIAotICAgIDE5NSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMjAwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMywgMTM1LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDI1MywgMjA2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NCwgMjE2LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDI1NCwgMTE1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NCwgMTc4LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIzMywgMTM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjU1LCAzNiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMjksIAotICAgIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCAyNDEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjM1LCAxNzEsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjM2LCAzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE5MCwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyMzUsIDE3OSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDk4LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIxNCwgMjIxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIxNCwgMjE5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIAotICAgIDIxNCwgMTY4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIxNCwgMTExLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMywgCi0gICAgNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAxMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAyMTIsIAotICAgIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAxNTAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCA4NiwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDE1NiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMjYsIDEzNywgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyMjYsIDI1MiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMjYsIDEyNSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMjYsIDIyMiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMzAsIDEwMywgMjE1LCAxMjEsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMjQzLCAxMzAsIDIxNSwgMTIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAxLCAyMTUsIDEyMiwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAyMjMsIDkyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNSwgMTQ1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIAotICAgIDI1NCwgMjA4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNCwgMTQxLCAyMzAsIDk4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNCwgCi0gICAgMTQxLCA1MiwgMjMwLCA5OCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIxOCwgOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAKLSAgICAyNDEsIDIyNiwgMzgsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMjQsIDEyOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIAotICAgIDI1MSwgMTksIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMzMsIDgsIDIyMSwgMjI1LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjM1LCAxMywgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyNDgsIDIyMiwgMjIxLCAyMjUsIDIwNywgCi0gICAgMjI0LCAxNDEsIDI1MSwgMjQxLCAyNTIsIDE5MiwgMjIxLCAyMjUsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjEwLCAyMTMsIAotICAgIDI1MiwgMTM4LCAyMjAsIDc3LCAyMTMsIDI1MiwgMTM4LCAyMjQsIDE5OCwgMjEzLCAyNTIsIDUsIDIyOCwgMjA5LCAyMTMsIAotICAgIDI1MiwgNSwgMjExLCA4MCwgMjMwLCAyMjIsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjU0LCAyMTMsIDIzNSwgCi0gICAgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIAotICAgIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDIsIDUxLCAyMTMsIDI1MiwgCi0gICAgMTM4LCAyMTEsIDgwLCAyMzQsIDE5OCwgMjM1LCAyNDMsIDIxOCwgMSwgMjIxLCAxOTcsIDIxMywgMjUyLCAxMzgsIDUyLCAKLSAgICAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxNSwgMjExLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIzNCwgMTk4LCAyNTQsIAotICAgIDc3LCAyMTMsIDI1MiwgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMTM0LCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MCwgMjM0LCAyMDksIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDI1MywgMjA0LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNDksIDIxMywgMTQ4LCAyMTQsIDIxNiwgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIDc3LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDI1NCwgNzcsIAotICAgIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCAKLSAgICA3OCwgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1NCwgOTEsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyNTIsIAotICAgIDE2NiwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyMTQsIDIxLCAyLCAKLSAgICAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjE2LCA2OCwgMjEzLCAyNTIsIDUsIDI0MSwgMTkxLCAxOTksIDI1NCwgNzUsIDIxMywgCi0gICAgMjUyLCA1LCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAyMjIsIDE0MiwgMTk5LCAyNTQsIDc1LCAyMTMsIDI1MiwgNSwgCi0gICAgMjU0LCA3NiwgMjE0LCAyMjMsIDIzMCwgOTAsIDIxMywgMjUyLCA1LCAyNTQsIDIwLCAyMTMsIDI1MiwgNSwgMjIyLCAxODcsIAotICAgIDI1NCwgMjAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNDgsIDIxMywgMjUyLCA1LCAyMzUsIDEwMiwgMjEzLCAyNTIsIDUsIAotICAgIDIxNCwgMTYxLCA3LCAxLCA0LCA2LCA2MSwgNywgMSwgNCwgNiwgMjU0LCAyNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgCi0gICAgMjQzLCA3LCAxLCA0LCA2LCAyNTIsIDEzNCwgMjUzLCAxNTgsIDcsIDEsIDQsIDYsIDI1MSwgNjYsIDcsIDEsIDQsIDYsIAotICAgIDI0OSwgNjAsIDcsIDEsIDQsIDYsIDI0NSwgNTksIDcsIDEsIDQsIDYsIDc1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMDQsIDc1LCAKLSAgICA3LCA0LCAxLCAyMTUsIDk0LCA3MywgNywgMSwgNCwgNiwgMjM1LCAxNDQsIDcsIDEsIDQsIDYsIDIzNSwgMjMsIDcsIDEsIDQsIAotICAgIDYsIDIzMywgMTQ5LCAyLCA5MSwgNywgMSwgNCwgNiwgMTkzLCA3LCAxLCA0LCA2LCAyMjMsIDQ5LCAyMzAsIDI1LCA3LCAxLCAKLSAgICA0LCA2LCA3NiwgNywgMSwgNCwgNiwgMjA0LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgCi0gICAgMjA0LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDIyNiwgMjM0LCA3LCAxLCAKLSAgICA0LCA2LCAyMjYsIDEzNCwgNywgNCwgMSwgMjE2LCAxNCwgMTYzLCA3NiwgNywgNCwgMSwgMjUxLCAxNzUsIDE2MywgNzYsIDcsIAotICAgIDEsIDQsIDYsIDIyNiwgMTA1LCA3LCAxLCA0LCA2LCAyMjMsIDQ5LCAxNTMsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE1MywgNywgCi0gICAgMSwgNCwgNiwgMjE3LCAxNTIsIDcsIDEsIDQsIDYsIDcwLCA3LCA0LCAxLCAyMTksIDE4NywgNzAsIDcsIDQsIDEsIDIxOSwgCi0gICAgMTg3LCAyNDgsIDAsIDcwLCA3LCA0LCAxLCAyMTksIDE4NywgMjE1LCA5NCwgMTkzLCA3LCAxLCA0LCA2LCAyMTQsIDEwNSwgCi0gICAgNywgMSwgNCwgNiwgMjEyLCA5OCwgNywgMSwgNCwgNiwgMjEwLCAxNTksIDcsIDEsIDQsIDYsIDI0NSwgOCwgNywgMSwgMjEzLCAKLSAgICAxMzUsIDIzMywgODIsIDIxOCwgMjUwLCA3LCAxLCAyNTQsIDE5NiwgMjYsIDEsIDQsIDYsIDI0MywgMTA3LCAyNiwgMSwgNCwgCi0gICAgNiwgMjMzLCA5OCwgMjYsIDEsIDQsIDYsIDIyNSwgMTA4LCAyNiwgMSwgNCwgNiwgMjIzLCAzNywgMjYsIDEsIDQsIDYsIAotICAgIDIyNCwgMTYxLCAzMywgMSwgNCwgNiwgMjQ1LCAxNzQsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjQzLCA1OCwgMSwgCi0gICAgNiwgMjUzLCAxNTgsIDU4LCAxLCA2LCAyNTIsIDEzNCwgMjUzLCAxNTgsIDU4LCAxLCA2LCAyNDksIDYwLCA1OCwgMSwgNiwgCi0gICAgNzUsIDU4LCAxLCA2LCAyMjMsIDQ5LCA3NSwgNTgsIDEsIDYsIDI0MywgMjAyLCA1OCwgMSwgNiwgMjQyLCA2MCwgNTgsIDEsIAotICAgIDYsIDczLCA1OCwgMSwgNiwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMzUsIDIzLCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgCi0gICAgMTkzLCA1OCwgMSwgNiwgMjMwLCAyNSwgNTgsIDEsIDYsIDIyMywgNDksIDIzMCwgMjUsIDU4LCAxLCA2LCA3NiwgNTgsIDEsIAotICAgIDYsIDIyNiwgMTM0LCA1OCwgMSwgNiwgMjI2LCAxMDUsIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MiwgNTgsIAotICAgIDEsIDYsIDcwLCA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCAKLSAgICA0LCAyNTQsIDE0MywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjQzLCA1OCwgMSwgNCwgMjUzLCAxNTgsIDU4LCAxLCA0LCAKLSAgICAyNDksIDYwLCA1OCwgMSwgNCwgNzUsIDU4LCAxLCA0LCAyMjEsIDE5NSwgNTgsIDEsIDQsIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyMTUsIDk0LCAyMDQsIDc1LCA1OCwgMSwgNCwgMjQzLCAyMDIsIDU4LCAxLCA0LCAyMTUsIDk0LCA3MywgNTgsIDEsIDQsIAotICAgIDIzNSwgMjMsIDU4LCAxLCA0LCAxOTMsIDU4LCAxLCA0LCAyNDUsIDEzOCwgNTgsIDEsIDQsIDc2LCA1OCwgMSwgNCwgMjA0LCAKLSAgICA3NiwgNTgsIDEsIDQsIDIxNiwgMTQsIDE2MywgNzYsIDU4LCAxLCA0LCAyNTEsIDE3NSwgMTYzLCA3NiwgNTgsIDEsIDQsIAotICAgIDIyNiwgMTA1LCA1OCwgMSwgNCwgMjE3LCAxNTIsIDU4LCAxLCA0LCA3MCwgNTgsIDEsIDQsIDIxOSwgMTg3LCA3MCwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDE5MywgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAxOTYsIDU4LCAxLCA0LCAKLSAgICAyNTIsIDI2LCA1OCwgMSwgNCwgMjYsIDI0MywgMTA3LCA1OCwgMSwgNCwgMjQ4LCA1NCwgNTgsIDEsIDQsIDI2LCAyMjUsIAotICAgIDEzMywgNTgsIDEsIDQsIDI1MCwgMTEwLCA3LCAyMTgsIDY1LCA0LCAxLCA3MywgNywgMjE4LCA2NSwgNCwgMSwgMTUzLCA3LCAKLSAgICAyMTgsIDY1LCA0LCAxLCA3MCwgNywgMjE4LCA2NSwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNTIsIAotICAgIDI2LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjQzLCAxMDcsIDI2LCAyMTgsIDY1LCA0LCAxLCAyMjMsIDM3LCAyNiwgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjI1LCAxMzMsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNTAsIDExMCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMCwgCi0gICAgMjYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI0NCwgODgsIDIyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjMwLCAyMjQsIDE4MiwgCi0gICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MywgMjAyLCA1OCwgMSwgCi0gICAgMzMsIDI0NSwgMTUwLCA3LCA0LCAxLCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIDEsIDIxNiwgMjExLCAyLCAyMTgsIAotICAgIDEwNywgNywgNCwgNiwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NiwgMiwgOTEsIDcsIDQsIDEsIDIyNiwgCi0gICAgMTA2LCAyLCA5MSwgNywgNCwgNiwgMSwgMTA0LCAyLCA5MSwgNywgNCwgMSwgMjE0LCAxNTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICA1NywgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0NSwgNywgCi0gICAgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjExLCAxNzksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMTE1LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI0MSwgNTIsIDIyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNjAsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjA0LCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjIzLCA0OSwgMjA0LCAxNjAsIAotICAgIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIAotICAgIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgCi0gICAgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQ1LCA5LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDE0MywgNTgsIDEsIDQsIDI1MSwgNjYsIDU4LCAxLCA0LCAyNTEsIDY3LCAKLSAgICAyLCAyNDksIDEwMCwgNTgsIDEsIDQsIDI0NSwgNTksIDU4LCAxLCA0LCAyMjMsIDQ5LCAyMDQsIDc1LCA1OCwgMSwgNCwgCi0gICAgMjQ1LCA2LCA1OCwgMSwgNCwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNTgsIDEsIDQsIDExOSwgMjQzLCAyMDIsIDU4LCAKLSAgICAxLCA0LCAyMTUsIDk0LCAyNDIsIDYwLCA1OCwgMSwgNCwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxODUsIAotICAgIDU4LCAxLCA0LCA2LCA3MywgNTgsIDEsIDQsIDYsIDI0MCwgMTU0LCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTQ1LCAyLCAKLSAgICAyNDksIDEyNywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMzMsIDE0OSwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA1OCwgMSwgNCwgNiwgMTU2LCA1OCwgMSwgNCwgMjMyLCA1MCwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCAKLSAgICA5NCwgMjMyLCA1MCwgMiwgMTk5LCAyMzMsIDM2LCA1OCwgMSwgNCwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzMCwgMjYsIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDYsIDIzMCwgMjUsIDU4LCAxLCA0LCAyNTIsIDEzNCwgNzYsIAotICAgIDU4LCAxLCA0LCAyMjUsIDEzMywgNTgsIDEsIDQsIDIyMiwgOTIsIDIsIDEwMywgNTgsIDEsIDQsIDI0NSwgNzUsIDU4LCAxLCAKLSAgICA0LCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA1OCwgMSwgNCwgMTA0LCAxMzAsIDU4LCAxLCA0LCAyMTQsIDE1NywgNTgsIAotICAgIDEsIDQsIDYsIDcwLCA1OCwgMSwgNCwgMjE0LCAxMDYsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIxNCwgMTA1LCA1OCwgCi0gICAgMSwgNCwgMjEwLCAxNTksIDU4LCAxLCA0LCAyMTAsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgMjEwLCAxNjAsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA4LCA1OCwgMSwgNCwgMjE2LCAxNzksIDM4LCAyNDYsIDExOCwgMjQyLCAKLSAgICAxMzcsIDI1NSwgMTQsIDM4LCAyNDYsIDExOCwgMjU1LCAzLCAyNTUsIDE0LCAzOCwgMjE5LCA2OSwgNTEsIDM4LCAyMTgsIDYsIAotICAgIDc4LCAzOCwgMjMxLCAyMzEsIDM4LCAyNDIsIDEzNCwgMzgsIDIzMSwgMjI5LCAzOCwgMjU1LCAxLCAzOCwgMjQyLCAxMzUsIAotICAgIDM4LCAyNTUsIDIsIDM4LCA3LCA0LCAxLCAyMjMsIDIyNCwgNTEsIDM4LCAyNTEsIDE0NSwgMzgsIDIzMSwgMjMwLCAzOCwgCi0gICAgNTIsIDI1MCwgMzEsIDQ4LCAzOCwgMjI2LCAyMjUsIDQ4LCAzOCwgMjEwLCAzNSwgNTEsIDM4LCAyMzUsIDE3MiwgNTEsIDM4LCAKLSAgICAyMTQsIDE1MSwgNDgsIDM4LCAyMTQsIDEzNCwgNDgsIDM4LCA3LCA0LCAxLCAyNDQsIDYzLCAyMDQsIDExNSwgNDgsIDM4LCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0MywgMzgsIDcsIDQsIDEsIDI1NCwgNzMsIDM4LCA3LCA0LCAxLCAyNTMsIDE3NiwgMzgsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDI1MCwgMTgzLCAzOCwgNywgNCwgMSwgMjM1LCAyMTMsIDI0OSwgNjAsIDM4LCA3LCA0LCAxLCAyNDUsIAotICAgIDU5LCAzOCwgNywgNCwgMSwgMjQzLCAyMDIsIDM4LCA3LCAxLCA0LCA2LCAyNDMsIDIwMiwgMzgsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDM4LCA3LCA0LCAxLCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxOTMsIDM4LCA3LCA0LCAKLSAgICAxLCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMjMwLCAyNSwgMzgsIDcsIDEsIDQsIDYsIDE1MywgMzgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyMjIsIDE4NiwgMzgsIDcsIDQsIDEsIDIyMiwgOTEsIDM4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTEsIDM4LCAKLSAgICA3LCA0LCAxLCAyMTAsIDE1OSwgMzgsIDUyLCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgMjU0LCAxNDgsIDEyOCwgCi0gICAgMjE2LCA0MiwgNTEsIDM4LCA0MywgMjUzLCAyNTAsIDQ4LCAzOCwgNDQsIDI1MywgMjUwLCAyMiwgMTI0LCAyNTMsIDI1MCwgCi0gICAgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA1MSwgNywgNiwgCi0gICAgMSwgNTcsIDIsIDU5LCA0OCwgNywgNCwgMSwgNTcsIDIsIDU5LCA0OCwgNywgNiwgMSwgNTcsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDU5LCA1MSwgNywgNiwgMSwgNTcsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgNTcsIDIsIDIzMiwgMjE0LCAKLSAgICA1MSwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAxODQsIDIyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI1MCwgCi0gICAgMTg0LCAyMiwgMTQyLCA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgCi0gICAgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyNDksIDYxLCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIAotICAgIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgCi0gICAgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIAotICAgIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODQsIDIyLCAyNTEsIDE0NiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDUsIDcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAKLSAgICA3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNiwgMSwgCi0gICAgMjQyLCA2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIAotICAgIDI0OCwgMSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNCwgCi0gICAgMSwgMjQyLCA2MSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MSwgMTQ3LCA1MSwgNywgNCwgMSwgMjQyLCAKLSAgICA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKLSAgICAyMzUsIDI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMjMzLCAxNDksIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgCi0gICAgNywgNiwgMSwgMjMyLCA1MCwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIAotICAgIDU5LCA0OCwgNywgNCwgMSwgMjMyLCA1MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDUwLCAyLCA1OSwgNTEsIDcsIDQsIAotICAgIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA2LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyMTYsIDg5LCAyMiwgMjQ4LCAxLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA2LCAKLSAgICAxLCAyMjYsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgNTksIAotICAgIDQ4LCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgCi0gICAgNTksIDUxLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIAotICAgIDQsIDEsIDIyMywgMjI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDU5LCAKLSAgICA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjU1LCAzLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIAotICAgIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDkyLCAKLSAgICAyLCAyNTAsIDIzNSwgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIAotICAgIDQsIDEsIDIyMiwgOTIsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAyMTcsIDE1MywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MywgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIAotICAgIDYsIDEsIDEwNCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA4OSwgMjIsIAotICAgIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTgyLCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTQsIAotICAgIDEwNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQyLCAKLSAgICAxMzYsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA2LCAxLCAyMTIsIAotICAgIDk5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNCwgMSwgMjEyLCAKLSAgICA5OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgNTksIAotICAgIDQ4LCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIAotICAgIDIxMCwgMTYwLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjE3LCAxNTMsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDQ0LCAxNjMsIDIyMiwgMjMzLCA3LCA0LCAxLCAxOTksIAotICAgIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTk5LCAyMjIsIDkyLCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMjQ4LCA1NCwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI0MSwgNTIsIDQ4LCAKLSAgICA3LCA0LCAxLCAxMTUsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIAotICAgIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAKLSAgICA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgCi0gICAgMjUxLCAxNDcsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTgyLCA3LCAKLSAgICA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgNTksIAorICAgIDAsIDIxOSwgMjAsIDI0NSwgMzksIDc5LCAyMjQsIDEsIDc5LCA1NCwgNTAsIDI0NywgMTQwLCA1MCwgMjI1LCAxODUsIDUwLCAKKyAgICAyNTQsIDEzNCwgMjU0LCA2NSwgNDMsIDIyNiwgNywgNDQsIDIyNiwgNywgMjUzLCAyMjQsIDk2LCA1MCwgMjQ5LCAyMjcsIAorICAgIDI0MCwgMTc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxOSwgNDgsIDIxLCAyMTAsIDg2LCAyMSwgMTExLCAyMSwgMTA1LCAyMSwgCisgICAgMTU4LCAyMSwgMTYxLCAyMSwgMTkwLCAyMSwgMTk1LCAyMSwgMTk5LCAyMSwgMTk2LCAyMSwgMjAxLCAyNDksIDIzNCwgMjIwLCAKKyAgICAxNTIsIDIzMywgMjEsIDUwLCAyNDUsIDEwNiwgNTAsIDI0MiwgMTM3LCA1MCwgMjI0LCAxNiwgNzksIDI0OSwgMjI1LCAyNTMsIAorICAgIDIxNCwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgMTY2LCA3LCA2LCAxLCAyNTEsIDc0LCA3LCA2LCAxLCAyNDksIDY4LCAKKyAgICA3LCA2LCAxLCA3NiwgNywgNiwgMSwgMjQ1LCAxNCwgNywgNiwgMSwgMjQzLCAyMDksIDcsIDYsIDEsIDI0MiwgNjcsIDcsIDYsIAorICAgIDEsIDc0LCA3LCA2LCAxLCAyMzUsIDE1MCwgNywgNiwgMSwgMjM1LCAyOSwgNywgNiwgMSwgMTU2LCA3LCA2LCAxLCAxOTQsIAorICAgIDcsIDYsIDEsIDIzMCwgMzAsIDcsIDYsIDEsIDc4LCA3LCA2LCAxLCAyMjYsIDEwOSwgNywgNiwgMSwgMjI0LCA5OSwgNywgNiwgCisgICAgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkzLCA3LCA2LCAxLCAyMTcsIDE1MywgNywgNiwgMSwgNjksIDcsIDYsIDEsIDIxNCwgCisgICAgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIDYsIDEsIAorICAgIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MywgMjE5LCA0OCwgNDQsIDQyLCAxMjcsIDI1MCwgMzksIDI1NSwgMjMsIAorICAgIDEyMSwgMjMyLCAyMTksIDI0MiwgMTQ0LCAyNTUsIDIzLCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNjYsIDcsIDQsIAorICAgIDEsIDI1MSwgNzQsIDcsIDQsIDEsIDI0OSwgNjgsIDcsIDQsIDEsIDc2LCA3LCA0LCAxLCAyNDUsIDE0LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgNywgNCwgMSwgMjQyLCA2NywgNywgNCwgMSwgNzQsIDcsIDQsIDEsIDIzNSwgMTUwLCA3LCA0LCAxLCAyMzUsIAorICAgIDI5LCA3LCA0LCAxLCAxNTYsIDcsIDQsIDEsIDE5NCwgNywgNCwgMSwgMjMwLCAzMCwgNywgNCwgMSwgNzgsIDcsIDQsIDEsIAorICAgIDIyNiwgMTA5LCA3LCA0LCAxLCAyMjQsIDk5LCA3LCA0LCAxLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTMsIDcsIDQsIDEsIDIxNywgCisgICAgMTUzLCA3LCA0LCAxLCA2OSwgNywgNCwgMSwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxMiwgOTgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKKyAgICA3LCA0LCAxLCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNTksIDQzLCAyNDksIDEwNywgMTI3LCA2NywgMjMyLCAyMTksIAorICAgIDQ0LCAyNDksIDEwNywgMTI3LCAxODQsIDIyOCwgNzgsIDIxOSwgMjAsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgMjUwLCAKKyAgICAxODQsIDUwLCAyMjQsIDIzMSwgNTAsIDI0OSwgMTA2LCA1MCwgMjExLCA0MCwgNTAsIDI1MSwgMTQzLCAxMzAsIDIyMSwgCisgICAgMTc1LCA1MCwgMjQ4LCA5LCAyNDksIDE3MSwgNTAsIDI0NCwgMTQ0LCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIzMywgNDgsIDUyLCAKKyAgICAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjI4LCA1NywgNTAsIDIxOSwgNTQsIDI0MCwgMTc1LCAyMjMsIDEwNSwgNTAsIDIzMSwgCisgICAgMjM3LCAyNDgsIDc5LCA1MCwgMjI1LCAyNCwgNTAsIDIxOCwgMjQsIDEwNSwgMjE4LCAyNCwgMTU4LCAyNTUsIDEyLCAyNTUsIAorICAgIDIzLCAyMzAsIDIzMywgNTAsIDIyNSwgNzEsIDUwLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDI1MCwgMTkxLCAyMTgsIDI0LCAKKyAgICAxMTEsIDIzMSwgMTUzLCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIyMiwgMjUwLCA1MiwgMjU0LCAxMTgsIDIyNCwgMSwgNzksIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIxMiwgCisgICAgMTE0LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIzNSwgMjAwLCAyMjQsIDE2LCA3OSwgNywgNiwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNiwgMSwgMTE2LCAyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA2LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQ1LCA2NywgNywgNiwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNDQsIDIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDIzMCwgODksIAorICAgIDUwLCA3LCA2LCAxLCAxNDQsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDE0MiwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIAorICAgIDE0MiwgNywgNiwgMSwgMjE2LCAxNTIsIDcsIDQsIDEsIDIyMCwgNzgsIDIyMiwgOTMsIDcsIDQsIDEsIDExNiwgMiwgMjQyLCAKKyAgICAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDExNiwgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgOSwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIAorICAgIDI1NCwgMjUyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMTYwLCAyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDcsIDQsIDEsIDI0NSwgNjcsIDcsIDQsIDEsIDIzMCwgCisgICAgMzEsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTQ0LCAyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAyNDcsIDE3NywgCisgICAgNTAsIDcsIDQsIDEsIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA0LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI1MCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDU5LCA0OCwgNywgNCwgCisgICAgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjUxLCA3NSwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNTAsIAorICAgIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDkxLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNjAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAyNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIxMCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgOTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxODQsIDcsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAxODQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgCisgICAgMjM3LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgCisgICAgNiwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIAorICAgIDI0MCwgMTYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NywgMTI3LCA3NCwgNywgNiwgMjcsIDIzNiwgMzgsIDcsIDQsIDI3LCAKKyAgICAyMzYsIDM4LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMzgsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAKKyAgICAyNDUsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMywgCisgICAgMTU1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAyNDcsIDEyOCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDE0MiwgNywgNCwgMSwgMjMwLCAzMSwgCisgICAgMiwgMTQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMjI0LCAyMDcsIDI1MSwgODYsIDI1NCwgNjUsIDcsIDYsIDEsIDI0NSwgMTQ2LCA3LCA0LCAxLCAyNDUsIDE0NiwgNywgCisgICAgNiwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyNTEsIAorICAgIDE1NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxNDQsIAorICAgIDIsIDUyLCAxNDIsIDcsIDYsIDI3LCAyMjYsIDIzOCwgNywgNCwgMjcsIDIyNiwgMjM4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMTQyLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMTQyLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMjMsIDIyNywgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDE0MiwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAKKyAgICAyNTAsIDE5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjE3LCAxNTQsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxMDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyMjIsIDIzNywgNDgsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCAKKyAgICA0LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTIsIDk5LCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzgsIAorICAgIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDIxMCwgCisgICAgMTYwLCAyLCAxNDIsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKKyAgICAyMDAsIDIyMiwgOTMsIDcsIDQsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgNTcsIDIsIDEwMywgNywgNiwgMSwgNTcsIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDU3LCAyLCAyMTYsIDEyLCA3LCA2LCAxLCAxMzgsIDE5NSwgNywgNCwgMSwgMTM4LCAxOTUsIAorICAgIDcsIDYsIDEsIDIwNCwgNzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEwMywgNywgNCwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCAKKyAgICA2LCAxLCAyNTQsIDIyOCwgMjQ5LCA2OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICAyMTYsIDEyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTYsIDEyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAyMjMsIDUyLCA3NiwgNywgNiwgMSwgMjIxLCAxOTcsIDcsIDYsIDEsIDIwNCwgNzYsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIAorICAgIDExNCwgNywgNCwgMSwgMjQwLCAyMDgsIDcsIDYsIDEsIDIzNSwgMTkyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgOTEsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDEwMywgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA0LCAxLCAyMzMsIDEwNiwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5NCwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgNDMsIDEwMywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjAwLCA0NCwgMjMzLCA0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIAorICAgIDIyOSwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA2LCAxLCAKKyAgICAyMjYsIDIyMywgNywgNCwgMSwgMjI2LCAyMjMsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAxMDMsIDcsIDEsIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIAorICAgIDEsIDI0NSwgODMsIDcsIDEsIDIyMywgNTIsIDI0NSwgODQsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjI2LCAKKyAgICA3MCwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA2LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxMDQsIDIsIAorICAgIDI0MCwgMjU1LCA3LCA2LCAxLCAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDEwMywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDYsIDEsIDI0NSwgMTYsIDcsIDYsIDEsIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDIxNywgNzgsIDcsIDEsIDExMywgMiwgOTEsIDcsIDYsIAorICAgIDEsIDEzOCwgMTkwLCA3LCA0LCAxLCAxMzgsIDE5MCwgNywgMSwgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgCisgICAgOTEsIDcsIDEsIDIxMSwgMTgxLCA3LCAxLCAyNDgsIDU1LCAyNTAsIDE5LCA3LCAxLCAyMzMsIDgzLCAyNTAsIDE5LCA3LCAxLCAKKyAgICAyNTQsIDE0NSwgMjUwLCAxOSwgNywgMSwgMjIzLCA1OCwgMjUwLCAxOSwgNywgNiwgMSwgMjQ2LCA0OCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQ2LCA0OCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIAorICAgIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMjgsIDE5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIAorICAgIDQsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDc2LCAKKyAgICA3LCA2LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyNDgsIDEwLCAyMiwgCisgICAgMjMxLCAyMzcsIDcsIDYsIDEsIDExNiwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgNTksIDcyLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI1NCwgMjUzLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgCisgICAgMjM3LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNiwgMSwgMjQzLCAKKyAgICAyMTAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNCwgCisgICAgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKKyAgICAyNDUsIDE3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDYsIDQ3LCAKKyAgICA3LCA2LCAxLCAyNDksIDY5LCAyLCA0LCAxLCAyMTAsIDE1OSwgNywgNCwgMSwgMjQ2LCA0NywgNywgNiwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDE0MiwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAyMDYsIDcsIDYsIDEsIDIxMSwgMTgxLCAKKyAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAorICAgIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA3MiwgMjIsIDE0MiwgNywgCisgICAgNiwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTgsIDEwNSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCA1MiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIAorICAgIDE1NCwgNywgNCwgMSwgMTE2LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgCisgICAgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNCwgCisgICAgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTAsIDIzMSwgNywgNCwgMSwgMjEwLCAyMzEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjAwLCA0NCwgMjMzLCA0MiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIDIyNiwgMTM4LCA3LCA0LCAKKyAgICAxLCAyMjYsIDEzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNiwgCisgICAgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDExNiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCAKKyAgICA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIAorICAgIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIxMSwgMTE4LCAKKyAgICAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDksIAorICAgIDEwOCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTAsIDcsIDQsIAorICAgIDEsIDI0OCwgMTUxLCAyNDcsIDIyOCwgNywgNCwgMSwgMjI0LCAzNCwgMjQ3LCAyMjgsIDcsIDYsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDEzMCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAKKyAgICAyMTcsIDc4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIDI0MiwgMTg3LCAyMTgsIAorICAgIDEzMSwgNywgNCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCA2LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMTMwLCAKKyAgICA3LCA2LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgNiwgMSwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMTYwLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAxNTEsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDYsIDEsIDQsIDIyNCwgMTAwLCAyLCAKKyAgICAyNDEsIDU5LCAyMTcsIDc4LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjQxLCA1OSwgMjE3LCA3OCwgNywgNiwgMSwgMjIzLCAKKyAgICAyMjcsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgCisgICAgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNTEsIDcsIDQsIDEsIDIxNSwgCisgICAgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCA1NywgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc4LCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAKKyAgICAyNDksIDEwOCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjE3LCA3OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDUyLCA3NiwgNywgNCwgMSwgMjIxLCAxOTcsIDcsIDQsIDEsIDIyMSwgMTk4LCAyLCAxMDMsIDcsIDQsIDEsIAorICAgIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgMTYwLCAyLCAxMDMsIAorICAgIDcsIDQsIDEsIDI1MCwgOCwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUxLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQzLCAyMTAsIDIsIDEwMywgNywgNCwgMSwgMTE5LCAyNDMsIDIwOSwgNywgMSwgNCwgNiwgMjQzLCAyMDksIDcsIAorICAgIDQsIDEsIDI0MywgMTE0LCA3LCA0LCAxLCAyMjMsIDE1NCwgMjQwLCAyNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIAorICAgIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDEwMywgNywgNCwgMSwgMjQxLCAyMTUsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE5MiwgNywgMSwgNCwgNiwgNzQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUyLCA0OSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIyMywgNTgsIDEwMywgCisgICAgNywgNCwgMSwgMjMzLCA3LCA3LCA0LCAxLCAyMTUsIDk0LCAxOTQsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIAorICAgIDIwMCwgMjMzLCA0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA0MywgMTAzLCA3LCAKKyAgICA0LCAxLCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMzAsIDcsIDQsIDEsIDI1MiwgMTQyLCAKKyAgICA3OCwgNywgMSwgNCwgNiwgMjI2LCAyMzgsIDcsIDQsIDEsIDI1MCwgOCwgMjI2LCAyMDUsIDcsIDQsIDEsIDIyNSwgMTM2LCAKKyAgICA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgNCwgMSwgMjIzLCA1MiwgCisgICAgMjIzLCAyMjcsIDIsIDI0NCwgOTUsIDcsIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAyMDAsIDE1MywgNywgNCwgCisgICAgMSwgMjIyLCA5NCwgMiwgMTAzLCA3LCA0LCAxLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIAorICAgIDIxOCwgMTA1LCAyMiwgMTAzLCA3LCA0LCAxLCAyMTgsIDIzMywgMjIzLCA1MiwgMjQ1LCA4MywgNywgNCwgMSwgMjQ1LCA4NCwgCisgICAgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNywgMTUzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgCisgICAgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIAorICAgIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAKKyAgICAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ1LCAxNiwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjQ5LCAKKyAgICAxMDgsIDcsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjI1LCAxNDIsIDIxMywgMTM1LCAyNDQsIDEsIDcsIDEsIAorICAgIDIzNSwgMjAwLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDEsIDIxOCwgMTEyLCAyNTEsIDc0LCA3LCAxLCAyNTEsIDI1NCwgCisgICAgMjUwLCAxOSwgNywgMSwgNCwgNiwgMjUzLCAxNjYsIDcsIDQsIDEsIDI1MCwgOCwgMjA0LCA3NiwgNywgMSwgNCwgNiwgMjQzLCAKKyAgICAyMTAsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2NywgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA3LCA0LCAKKyAgICAxLCAyMTUsIDk0LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAxNTYsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAxMDMsIDcsIDEsIAorICAgIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIDEsIDIyMywgNTIsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIAorICAgIDQsIDEsIDI0NiwgNDgsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDgsIDM0LCAyNDcsIDIyOCwgNywgNCwgMSwgMjQ2LCA0OCwgCisgICAgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMTUsIDE4NiwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIxNiwgMjM2LCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjE3LCAzMCwgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDQsIDE0MiwgCisgICAgMjQ3LCAyMjgsIDcsIDQsIDEsIDIzMiwgMTA1LCAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCA1NiwgMjQ3LCAyMjgsIDcsIDEsIAorICAgIDI1MSwgMjU0LCAyMjUsIDE4NCwgNywgMSwgMjUyLCA2LCAyMjUsIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgCisgICAgMjQ0LCA5NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgMjQ0LCA5NiwgMjIsIDIxNywgNzgsIDU4LCAxLCA0LCAKKyAgICAyNDIsIDY3LCA1OCwgMSwgNCwgMjQyLCA2OCwgMiwgMTAzLCA1OCwgMSwgNCwgMjM1LCAxNTAsIDU4LCAxLCA0LCAxNTMsIAorICAgIDU4LCAxLCA0LCAyMTUsIDk0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMTAzLCA1OCwgMSwgNCwgNiwgCisgICAgMjM1LCAyMDAsIDE1MywgNTgsIDEsIDQsIDIxMiwgOTgsIDU4LCAxLCA0LCAyMTEsIDExNywgNTgsIDEsIDIyNCwgMTkzLCAKKyAgICA1OCwgMSwgNTIsIDIyNCwgMTkzLCA1OCwgMSwgMjE1LCA5NCwgMjQ5LCAyMjcsIDU4LCAxLCAyNTQsIDY1LCA1OCwgMSwgCisgICAgMjIzLCA1MiwgMjQ5LCAyMjcsIDU4LCAxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAKKyAgICA1OCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgNDMsIAorICAgIDI1NCwgMSwgNTgsIDEsIDQ0LCAyNTQsIDEsIDU4LCAxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyNCwgMjU0LCAxLCA1OCwgMSwgCisgICAgMjUwLCAzOSwgMjU1LCAyMywgMjUwLCAyNDIsIDU4LCAxLCA2NywgMjMyLCAyMTksIDU4LCAxLCAyMzEsIDIzNywgNTgsIDEsIAorICAgIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgNjcsIDIzMiwgMjE5LCA1OCwgCisgICAgMSwgMTIxLCAyMzEsIDIzNywgNTgsIDEsIDEyMSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAxMjEsIDI1NSwgMTIsIAorICAgIDI1NSwgMjMsIDU4LCAxLCAyMTUsIDIyMywgMjQ5LCAyMzQsIDU4LCAxLCAxNjMsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIAorICAgIDEsIDI1MCwgMTgxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDI1MCwgMTgxLCA0MywgMTYzLCAyMjIsIDIzNiwgNTgsIAorICAgIDEsIDEyMCwgMjE3LCA4OCwgNTgsIDEsIDEyNCwgMjE3LCA4OCwgNTgsIDEsIDk2LCA1MCwgNTgsIDEsIDIzMCwgMTg3LCA1MCwgCisgICAgMjUxLCAxNTQsIDU5LCA0OCwgMjIyLCAyMzcsIDQ4LCAyMjYsIDIyOCwgNCwgMTg0LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgCisgICAgNTgsIDEsIDIyMywgMzksIDEwMywgNTgsIDEsIDI0OSwgMTM5LCAyNTUsIDIzLCA1OCwgMSwgNCwgMjQzLCAxMTQsIDU4LCAxLCAKKyAgICA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkzLCA1OCwgMSwgNCwgMjExLCAxNzgsIDU4LCAxLCA0LCAyMjMsIDUyLCAyNDIsIAorICAgIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyNDUsIDI4LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAKKyAgICAyMzAsIDIzMCwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyMTAsIDI1NCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIDIxMSwgNzAsIDI0OCwgNTIsIDEzOCwgNzksIDU4LCAxLCAKKyAgICAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNjUsIDU4LCAxLCAxMjEsIDEyNCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDMsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDQsIDI1NCwgMSwgCisgICAgNTgsIDEsIDEyMSwgMjIyLCAyMzYsIDU4LCAxLCAyMzAsIDIyOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIAorICAgIDIyOSwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMjMwLCAyMjksIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCA1OCwgMSwgCisgICAgMTIxLCAxODQsIDU4LCAxLCAyMjMsIDE2MCwgMjQ5LCAyMzQsIDU4LCAxLCAyNTIsIDY2LCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAKKyAgICAyNDUsIDE1MSwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgMjUyLCA2NiwgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjQ1LCAxNTEsIAorICAgIDEyMSwgMjE2LCAzMSwgNTgsIDEsIDIyMCwgNTYsIDU4LCAxLCAyMDQsIDIyMCwgNTYsIDU4LCAxLCAxMjEsIDQzLCA3NSwgCisgICAgMzgsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzOCwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDI1MCwgMzksIDI1NSwgMjMsIDM4LCAKKyAgICAxODQsIDM4LCAyMzEsIDIzNywgMzgsIDIyNiwgMTIzLCAzOCwgMjUxLCAxNTQsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDksIAorICAgIDM4LCAyNDEsIDU5LCA0OCwgMzgsIDIyMiwgMjM3LCA0OCwgMzgsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAKKyAgICAyNDIsIDM4LCA2NywgMjMyLCAyMjAsIDQ4LCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgMjQyLCAxNDQsIAorICAgIDI1NSwgMjMsIDM4LCAyNTEsIDcsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCAyMTUsIDk0LCAyNDksIDIyOCwgNDgsIAorICAgIDM4LCAyNDksIDIyOCwgNDgsIDM4LCAyMjMsIDUyLCAyNDksIDIyOCwgNDgsIDM4LCAyNDksIDIyOCwgNzIsIDIyMiwgMjU0LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjQsIDUxLCAzOCwgMjU1LCAxMiwgMjU1LCAyNCwgNTEsIDM4LCA0MywgMjE3LCA4OSwgNTEsIAorICAgIDM4LCA0NCwgMjE3LCA4OSwgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDQ4LCAzOCwgMjQwLCAyNTUsIDM4LCA0MywgMTYzLCAKKyAgICAyMjIsIDIzNywgNTEsIDM4LCAxMjAsIDIxNywgODksIDUxLCAzOCwgMTI0LCAyMTcsIDg5LCA1MSwgMzgsIDk2LCA1LCA1MSwgCisgICAgMzgsIDIzMCwgMTg3LCA1LCA1MSwgMzgsIDIyNiwgNjgsIDI0MSwgNTksIDUxLCAzOCwgMjIzLCA1OCwgMjQxLCA1OSwgNTEsIAorICAgIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDEwLCA1MSwgMzgsIDIyMiwgMjM3LCA1MSwgMzgsIDI0OSwgMjI4LCA1MSwgMzgsIDI1MCwgCisgICAgMTkxLCAzOCwgMjI2LCAyMjgsIDM4LCA2NywgMjMyLCAyMjAsIDUxLCAzOCwgMjUxLCAxNDgsIDUxLCAzOCwgMjM1LCAyMDAsIAorICAgIDUyLCAyNTQsIDMyLCA1MSwgMzgsIDI1MCwgMjQzLCA1MSwgMzgsIDI1MCwgMzksIDI1NSwgMjQsIDUxLCAzOCwgMjUxLCAKKyAgICAxNTUsIDUxLCAzOCwgMjM1LCAyMDAsIDI1MSwgMTU1LCA1MSwgMzgsIDIxNiwgOTAsIDUxLCAzOCwgMjMxLCAyMzgsIDUxLCAKKyAgICAzOCwgMTIxLCAyMzIsIDIxOSwgMzgsIDUyLCAxMjEsIDIzMiwgMjE5LCAzOCwgMjE2LCA5MCwgMjI2LCAxMjQsIDM4LCAyMTksIAorICAgIDI1MywgMjE4LCAxMDUsIDIyNiwgMTI0LCAzOCwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMTksIDI1MywgMjE5LCAKKyAgICA0OSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDUxLCAzOCwgCisgICAgMjM1LCAyMDAsIDI1MSwgMTQ4LCA1MSwgMzgsIDQyLCA1MSwgMzgsIDIyMSwgMTgyLCA1MSwgMzgsIDIxMSwgMTc5LCA0OCwgCisgICAgMzgsIDY3LCAxODQsIDM4LCA1MiwgMjI2LCAxMjMsIDM4LCAyNDIsIDE0NCwgMTM4LCA3OSwgMzgsIDI1NSwgMTIsIDEzOCwgCisgICAgNzksIDM4LCAyNiwgMjI1LCAxNzgsIDM4LCAyNiwgMjM0LCA4LCAzOCwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMzgsIDI2LCAKKyAgICAyMTAsIDIxOSwgMzgsIDI1MSwgMTQ4LCA0OCwgMzgsIDI0NSwgMTA2LCA1LCA1MSwgMzgsIDUyLCA2NywgMjMyLCAyMjAsIAorICAgIDUxLCAzOCwgNDMsIDI1NCwgMTE4LCA1MSwgMzgsIDIyOCwgNTcsIDIxNiwgOTAsIDQ4LCAzOCwgMjQxLCA2NSwgNDgsIDM4LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA0OCwgMzgsIDQzLCA0NCwgODAsIDUxLCAzOCwgMjE0LCAxNTMsIDgwLCA1MSwgMzgsIAorICAgIDI0MiwgMTQ5LCAyMzUsIDY5LCAzOCwgNDQsIDI1NCwgMiwgNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCAKKyAgICAyNDQsIDEzOSwgMzgsIDIxMSwgMTc5LCA1MSwgMzgsIDQzLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDI1NCwgMiwgNTEsIDM4LCAKKyAgICA0NCwgMjU0LCAyLCAyMiwgMTIwLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDQ4LCAzOCwgNTksIDcyLCAKKyAgICAyMjIsIDI1NCwgMzgsIDI1MywgMjI1LCA1MSwgMzgsIDUyLCAyMjIsIDIzNywgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIAorICAgIDUyLCAyNTEsIDE1NSwgNTEsIDM4LCA1MiwgMjUxLCAxNTQsIDM4LCA1MiwgMjMxLCAyMzcsIDM4LCA1MiwgMjMxLCAyMzgsIAorICAgIDUxLCAzOCwgNTIsIDE4NCwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIAorICAgIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzYsIDM4LCA3LCA0LCAxLCA3NCwgMzgsIDcsIDQsIDEsIDc4LCAzOCwgNywgNCwgMSwgCisgICAgNjksIDM4LCA3LCA0LCAxLCAyNTEsIDc0LCAzOCwgNywgNCwgMSwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0MiwgNjcsIDM4LCAKKyAgICA3LCA0LCAxLCAxOTQsIDM4LCA3LCA0LCAxLCAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MywgMzgsIDcsIDQsIDEsIDIxNCwgCisgICAgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIDI2LCA2LCAxLCAyNDEsIDIwMywgMjYsIDQsIDEsIDI0MSwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjU0LCAzMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDIyNywgMjAyLCA1MCwgCisgICAgMjYsIDIzMiwgMTE0LCAyMjcsIDIwMiwgNTAsIDI2LCA2LCAxLCAyMjYsIDU1LCAyNDcsIDIzNSwgMjYsIDQsIDEsIDIyNiwgCisgICAgNTUsIDI0NywgMjM1LCAyNiwgMjEwLCAyMTksIDI2LCA0LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNCwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMjYsIDIyNCwgMTYsIDc5LCAyNiwgMjE2LCAxOSwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgMjU0LCAxMDUsIDIxNywgMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTYsIAorICAgIDE5LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTYsIDE5LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIxNiwgMTksIDI2LCA2LCAxLCAKKyAgICAyNTQsIDE1MSwgMjYsIDYsIDEsIDI1MiwgMzQsIDI2LCA2LCAxLCAyNDMsIDExNCwgMjYsIDYsIDEsIDI0OCwgNjIsIDI2LCAKKyAgICA2LCAxLCAyNDUsIDEwOCwgMjYsIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDcxLCAyNiwgNiwgMSwgMjE2LCAxODAsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MiwgMjYsIDYsIDEsIDIzNCwgMjI4LCAyNiwgNiwgMSwgMjMzLCAxMDQsIDI2LCA2LCAxLCAKKyAgICAyMzAsIDEwNywgMjYsIDYsIDEsIDIyNywgMjQyLCAyNiwgNiwgMSwgMjExLCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwMywgMjYsIAorICAgIDYsIDEsIDIyNSwgMTExLCAyNiwgNiwgMSwgMjIzLCA0MCwgMjYsIDYsIDEsIDIxOSwgMTc5LCAyNiwgNiwgMSwgMjE3LCA0MiwgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU3LCAyNiwgNiwgMSwgMjI1LCAxMzYsIDI2LCA2LCAxLCAyNTAsIDExOCwgMjYsIDYsIDEsIAorICAgIDIyNCwgMTY0LCAyNiwgNiwgMSwgMjI2LCAyMDUsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAzLCAyNiwgNiwgMSwgCisgICAgMjE0LCAxNTgsIDIsIDI0OCwgMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjQ1LCAxMDksIAorICAgIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgCisgICAgMTksIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI1NCwgMTUxLCAyNiwgCisgICAgNCwgMSwgMjUyLCAzNCwgMjYsIDQsIDEsIDI0MywgMTE0LCAyNiwgNCwgMSwgMjQ4LCA2MiwgMjYsIDQsIDEsIDI0NSwgMTA4LCAKKyAgICAyNiwgNCwgMSwgMjEwLCA4NSwgMjYsIDQsIDEsIDI0NSwgNzEsIDI2LCA0LCAxLCAyMTYsIDE4MCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkyLCAyNiwgNCwgMSwgMjM0LCAyMjgsIDI2LCA0LCAxLCAyMzMsIDEwNCwgMjYsIDQsIDEsIDIzMCwgMTA3LCAyNiwgNCwgCisgICAgMSwgMjI3LCAyNDIsIDI2LCA0LCAxLCAyMTEsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjAzLCAyNiwgNCwgMSwgMjI1LCAxMTEsIAorICAgIDI2LCA0LCAxLCAyMjMsIDQwLCAyNiwgNCwgMSwgNDAsIDIxOSwgMTc5LCAyNiwgNCwgMSwgMjE5LCAxNzksIDI2LCA0LCAxLCAKKyAgICAyMTcsIDQyLCAyNiwgNCwgMSwgMjE0LCAxNTcsIDI2LCA0LCAxLCAyMjUsIDEzNiwgMjYsIDQsIDEsIDI1MCwgMTE4LCAyNiwgCisgICAgNCwgMSwgMjI0LCAxNjQsIDI2LCA0LCAxLCAyMjYsIDIwNSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMTQsIAorICAgIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNiwgMjM0LCAyNTMsIDg3LCAyNiwgCisgICAgMjUyLCAzNSwgODcsIDI2LCAyMTYsIDE4MSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIAorICAgIDE1OCwgMiwgMjU1LCAxMiwgMjIsIDI0MSwgNTksIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0OCwgMTAsIDIyLCAyNDEsIDU5LCAKKyAgICA4NywgMjYsIDIyNSwgMTM3LCA4NywgMjYsIDIyNSwgMTEyLCA4NywgMjYsIDIzNCwgMjUzLCA4NywgMjYsIDEsIDI1NCwgMzEsIAorICAgIDIzNCwgMTIsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMzQsIDEyLCAyNiwgMSwgMjE4LCAxMzksIDI2LCA0LCAxLCAyMTgsIDEzOSwgCisgICAgMjYsIDEsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjQ3LCAyMzUsIDI2LCAxLCAyMzQsIDEyLCAyNiwgNCwgMSwgMjM0LCAxMiwgCisgICAgMjYsIDEsIDIyMSwgMjQ4LCAyNiwgNCwgMSwgMjIxLCAyNDgsIDgxLCA2LCAxLCAyMjAsIDU3LCA4MSwgNCwgMSwgMjIwLCAKKyAgICA1NywgODEsIDYsIDEsIDI0NCwgMTQ4LCA4MSwgNCwgMSwgMjQ0LCAxNDgsIDgxLCA2LCAxLCAyMzQsIDEyMywgODEsIDQsIDEsIAorICAgIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQxLCA1MiwgODEsIDQsIDEsIDI0MSwgNTIsIDgxLCA2LCAxLCAyNDMsIDEwOSwgODEsIAorICAgIDQsIDEsIDI0MywgMTA5LCA4MSwgNiwgMSwgMjIwLCAyNCwgODEsIDQsIDEsIDIyMCwgMjQsIDgxLCA2LCAxLCAyNDgsIDc3LCAKKyAgICA4MSwgNCwgMSwgMjQ4LCA3NywgMjYsIDIzNCwgMjI5LCA4NywgMjYsIDIyMywgNDEsIDg3LCAyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMSwgMjEwLCAyMjQsIDI2LCA2LCAyMTYsIDE4MSwgODcsIDI2LCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIAorICAgIDI2LCAyMjMsIDUyLCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIDI2LCA2LCAxLCAyMjAsIDksIDI2LCA0LCAxLCAyMjAsIDksIAorICAgIDI2LCA2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAxLCAyMjEsIDI0NSwgMjYsIDQsIDEsIDIyMSwgMjQ1LCAyNiwgCisgICAgMjIzLCA0MSwgMiwgMjE4LCAxMDUsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgCisgICAgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDIyMywgNTIsIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDMzLCA2LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgMzMsIDYsIDEsIDIzNSwgMTk2LCAzMywgNiwgMSwgCisgICAgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyNDIsIDE5NCwgMzMsIDYsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNiwgMSwgMjQ2LCAKKyAgICA0NCwgMzMsIDYsIDEsIDI1MSwgODQsIDc0LCAzMywgNiwgMSwgMjExLCA4LCAzMywgNiwgMSwgMjM1LCAxMzIsIDMzLCA2LCAKKyAgICAxLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjE1LCAxNzUsIDMzLCA2LCAxLCAyMzQsIDU0LCAKKyAgICAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNiwgMSwgMjQ2LCAKKyAgICA0MCwgMzMsIDYsIDEsIDYxLCAzMywgNiwgMSwgMjUyLCA4MywgMzMsIDYsIDEsIDIxMywgMjU1LCAzMywgNiwgMSwgMjQyLCAKKyAgICAyNDMsIDMzLCA2LCAxLCAyNDgsIDk4LCAzMywgNiwgMSwgMjM2LCA2NywgMzMsIDYsIDEsIDIxMCwgNzQsIDMzLCA2LCAxLCAKKyAgICAyMTAsIDk0LCAzMywgNiwgMSwgNzQsIDMzLCA2LCAxLCAyMTksIDI1MywgNzQsIDMzLCA2LCAxLCAxNzYsIDMzLCA2LCAxLCAKKyAgICAyNDUsIDE4MiwgMzMsIDYsIDEsIDI0NSwgMTY3LCAzMywgNiwgMSwgMjQ1LCAxNTgsIDMzLCA2LCAxLCA3OCwgMzMsIDYsIDEsIAorICAgIDIyNSwgMjI0LCAzMywgNiwgMSwgMjQ1LCAxMDAsIDMzLCA2LCAxLCAyNDUsIDkwLCAzMywgNiwgMSwgMjE3LCAyMywgMzMsIAorICAgIDYsIDEsIDY5LCAzMywgNiwgMSwgMjQ1LCAyMTAsIDMzLCA2LCAxLCAxNjIsIDMzLCA2LCAxLCAyMTUsIDE3OSwgMzMsIDYsIAorICAgIDEsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjIwLCAxMDQsIDMzLCA2LCAxLCAyMjAsIDY3LCAzMywgNiwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDMzLCA2LCAxLCAyMTEsIDI3LCAzMywgNiwgMSwgMjE5LCA1NCwgNTAsIDMzLCA2LCAxLCA3NiwgMzMsIDYsIDEsIAorICAgIDIxMCwgMjEyLCAzMywgNiwgMSwgMTkyLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDgzLCAzMywgNCwgMSwgMjEzLCAKKyAgICAyNTUsIDMzLCA0LCAxLCAyNDIsIDI0MywgMzMsIDQsIDEsIDI0OCwgOTgsIDMzLCA0LCAxLCAyMzYsIDY3LCAzMywgNCwgMSwgCisgICAgMjEwLCA3NCwgMzMsIDQsIDEsIDIxMCwgOTQsIDMzLCA0LCAxLCA3NCwgMzMsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDQsIAorICAgIDEsIDE3NiwgMzMsIDQsIDEsIDI0NSwgMTgyLCAzMywgNCwgMSwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyNDUsIDE1OCwgMzMsIAorICAgIDQsIDEsIDc4LCAzMywgNCwgMSwgMjI1LCAyMjQsIDMzLCA0LCAxLCAyNDUsIDEwMCwgMzMsIDQsIDEsIDI0NSwgOTAsIDMzLCAKKyAgICA0LCAxLCAyMTcsIDIzLCAzMywgNCwgMSwgNjksIDMzLCA0LCAxLCAyNDUsIDIxMCwgMzMsIDQsIDEsIDE2MiwgMzMsIDQsIDEsIAorICAgIDIxNSwgMTc5LCAzMywgNCwgMSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyMjAsIDEwNCwgMzMsIDQsIDEsIDIyMCwgNjcsIDMzLCAKKyAgICA0LCAxLCAyNDIsIDEwLCA1MCwgMzMsIDQsIDEsIDIxMSwgMjcsIDMzLCA0LCAxLCAyMTksIDU0LCA1MCwgMzMsIDQsIDEsIAorICAgIDc2LCAzMywgNCwgMSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAxOTIsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgCisgICAgMzMsIDQsIDEsIDIzNSwgMTk2LCAzMywgNCwgMSwgMjQ3LCAxNzAsIDMzLCA0LCAxLCAyNDIsIDE5NCwgMzMsIDQsIDEsIAorICAgIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNCwgMSwgMjQ2LCA0NCwgMzMsIDQsIDEsIDI1MSwgODQsIDc0LCAzMywgNCwgMSwgCisgICAgMjExLCA4LCAzMywgNCwgMSwgMjM1LCAxMzIsIDMzLCA0LCAxLCAyMzIsIDE5MywgMzMsIDQsIDEsIDIyOCwgMTgzLCAzMywgCisgICAgNCwgMSwgMjE1LCAxNzUsIDMzLCA0LCAxLCAyMzQsIDU0LCAzMywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgCisgICAgNCwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNCwgMSwgMjQ2LCA0MCwgMzMsIDYsIDEsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjI2LCAKKyAgICAyMDUsIDMzLCA2LCAxLCAyMTEsIDU5LCAzMywgNCwgMSwgMjExLCA1OSwgMzMsIDYsIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDQsIAorICAgIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDYsIDEsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzMiwgMTk4LCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjMyLCAKKyAgICAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIAorICAgIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjMzLCAyMzksIDMzLCA0LCAxLCAyMzMsIDIzOSwgMzMsIDYsIDEsIDIyNCwgMTY0LCAzMywgNCwgCisgICAgMSwgMjI0LCAxNjQsIDMzLCA2LCAxLCAyNDQsIDkwLCAzMywgNCwgMSwgMjQ0LCA5MCwgMzMsIDYsIDEsIDIzNSwgMTUyLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxNTIsIDMzLCA2LCAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNCwgCisgICAgMSwgMjM1LCAxNTMsIDIsIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAKKyAgICAyMDUsIDMzLCA2LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjE2LCA2NiwgMzMsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNiwgMSwgMjI2LCAKKyAgICAxNDQsIDMzLCA0LCAxLCAyMjYsIDE0NCwgMzMsIDYsIDEsIDIzNCwgMTIsIDMzLCA0LCAxLCAyMzQsIDEyLCAzMywgMjE2LCAKKyAgICAxNDcsIDUwLCAzOCwgMzMsIDIxNiwgNjYsIDM4LCAzMywgMjI2LCA2OSwgMzgsIDMzLCAyNDgsIDE2MiwgMjI1LCAyMSwgMzgsIAorICAgIDMzLCAyMjQsIDE1OCwgMjI1LCAyMSwgMzgsIDMzLCAyMjUsIDYsIDM4LCAzMywgMjQwLCAyMTgsIDIxNiwgMTQ3LCA1MCwgCisgICAgMzgsIDMzLCAyMzAsIDE5NiwgNTAsIDMzLCA2LCAxLCAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKKyAgICAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMjAsIDE0OCwgNTAsIDMzLCA0LCAxLCAyMjAsIAorICAgIDE0OCwgNTAsIDMzLCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxMTUsIDMzLCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAKKyAgICAxMTUsIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIAorICAgIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDI0NCwgCisgICAgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjEwLCAKKyAgICA3NSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIAorICAgIDQ3LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjM1LCAxOSwgCisgICAgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDYsIDEsIAorICAgIDI1MiwgMTMyLCAxNzYsIDMzLCA0LCAxLCAyNTIsIDEzMiwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNTksIDIsIDI0OCwgNDcsIAorICAgIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA0LCAyNywgCisgICAgMjQ1LCAxNTksIDI0MiwgMjQzLCAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMjUsIAorICAgIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDI1NSwgMjksIDE2MiwgMzMsIDQsIDEsIDI1NSwgMjksIDE2MiwgCisgICAgMzMsIDYsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDUsIDkxLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxNywgMjQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTgsIDEyMywgCisgICAgNjksIDMzLCA0LCAxLCAyMTgsIDEyMywgNjksIDMzLCA2LCAxLCAyMTgsIDEyMywgMTA0LCAyLCA5MSwgMzMsIDQsIDEsIAorICAgIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCA1NiwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0MiwgNTYsIAorICAgIDIsIDI0OCwgNDcsIDMzLCA2LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIDMzLCA0LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIAorICAgIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMjAsIDM1LCAKKyAgICAzMywgNCwgMSwgMjIwLCAzNSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTM5LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxMzksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1NSwgMjksIDI1MCwgCisgICAgMTQwLCAyLCAyNDgsIDQ3LCAzMywgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTU0LCAzMywgNCwgCisgICAgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCAxMDMsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCAKKyAgICAxMDMsIDMzLCA2LCAxLCAyNDUsIDE4MywgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgCisgICAgNiwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE1OSwgCisgICAgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMTcsIDc4LCAzMywgNiwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAKKyAgICAzMywgNCwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjQ1LCAxNjgsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKKyAgICAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDIyNiwgNjIsIDMzLCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgCisgICAgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTE2LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNCwgMjcsIDExNiwgMjM2LCA2NywgMzMsIDYsIDEsIDIzNiwgNjgsIAorICAgIDIsIDI1MSwgMTU0LCAzMywgNCwgMSwgMjM2LCA2OCwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMjEsIDE5NywgMzMsIDQsIAorICAgIDEsIDIyMSwgMTk3LCAzMywgNiwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIyMSwgMTk4LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAKKyAgICAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNDYsIAorICAgIDQ0LCAzMywgNCwgMSwgMjU1LCAyOSwgMjQ2LCA0NCwgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIAorICAgIDYsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDQsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDYsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIAorICAgIDI0OCwgOSwgMzMsIDQsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCAzMywgNCwgMSwgMTA0LCAyLCAyMzEsIAorICAgIDIzNywgMzMsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIAorICAgIDIsIDUyLCAxNDIsIDMzLCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCAKKyAgICAyNDQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAxMDUsIDIyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAKKyAgICAxMDUsIDIyLCAxMDMsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDIsIDU2LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ4LCAKKyAgICA5OCwgMzMsIDQsIDEsIDIzNCwgMjAsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDcsIDE3MCwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNiwgMSwgMjM0LCAyMCwgMjEwLCAyNywgMzMsIDQsIDEsIDIzNCwgMjAsIDIxMCwgCisgICAgMjcsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ2LCAzOCwgMzMsIDYsIDEsIAorICAgIDIzNCwgMjAsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMjgsIAorICAgIDE4MywgMzMsIDQsIDEsIDIzNCwgMjAsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE5LCAxMTEsIDMzLCA0LCAxLCAKKyAgICAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDYsIDEsIDIzNCwgMjAsIDIxNiwgNjEsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMTYsIAorICAgIDYxLCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgOTQsIDMzLCA2LCAxLCAKKyAgICAyNDUsIDE4MywgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDEwMywgMzMsIDYsIDEsIDIzMywgNCwgMzMsIDQsIDEsIAorICAgIDIzMywgNCwgMzMsIDYsIDEsIDIyMywgNDIsIDMzLCA0LCAxLCAyMjMsIDQyLCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIAorICAgIDEsIDIxMSwgOTIsIDMzLCA2LCAxLCAyMjQsIDkxLCAzMywgNCwgMSwgMjI0LCA5MSwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCAKKyAgICA0LCAxLCAyMTIsIDIyLCAzMywgNiwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTc1LCAxNzYsIDMzLCA2LCAKKyAgICAxLCAyNDUsIDE4MywgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgCisgICAgNiwgMSwgMjQ1LCAxNTksIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgCisgICAgMzMsIDYsIDEsIDIyNSwgMjI1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjIwLCAzNiwgMiwgMjQ4LCA0NywgMTUwLCA2LCAxLCAyNTMsIDE3MiwgCisgICAgMTUwLCA2LCAxLCAyNTIsIDQ3LCAxNTAsIDYsIDEsIDI0MiwgMjEwLCAxNTAsIDYsIDEsIDI0OCwgMjI5LCAxNTAsIDYsIDEsIAorICAgIDI0NSwgMjIxLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMjA1LCAxNTAsIDYsIDEsIDI0NSwgNzMsIAorICAgIDE1MCwgNiwgMSwgMTEyLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMzQsIDE1MCwgNiwgMSwgMjMyLCAKKyAgICAxOTYsIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCA0MSwgMTUwLCA2LCAxLCAyMzQsIDE3MSwgMTUwLCAKKyAgICA2LCAxLCAyNDEsIDc1LCAxNTAsIDYsIDEsIDIzNSwgMTQ3LCAxNTAsIDYsIDEsIDI0MiwgMjUzLCAxNTAsIDYsIDEsIDI1MCwgCisgICAgMTM0LCAxNTAsIDYsIDEsIDIzMSwgNjMsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgNDQsIDE1MCwgNiwgCisgICAgMSwgMjIwLCAxMDQsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNjUsIDE1MCwgNiwgMSwgMjI1LCAKKyAgICAyMDgsIDE1MCwgNiwgMSwgMjM1LCAxMTYsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYzLCAxNTAsIDYsIDEsIAorICAgIDIxMywgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjMsIDE1MCwgNiwgMSwgMjIzLCA5OCwgMTUwLCA2LCAxLCAyNDksIDI0NiwgCisgICAgMTUwLCA2LCAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ5LCAxNTAsIDYsIDEsIDIzNCwgMTgyLCAxNTAsIDYsIDEsIAorICAgIDIyNiwgMjI2LCAxNTAsIDYsIDEsIDI0NCwgMTUwLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzNiwgMTUwLCAyNTQsIAorICAgIDY1LCAxNTAsIDI0NSwgMTYyLCA3OSwgMTUwLCAyNDUsIDM5LCA3OSwgMTUwLCAyNDksIDIyNywgMTUwLCAyMjQsIDE2LCA3OSwgCisgICAgMTUwLCAyNTUsIDMwLCA3OSwgMTUwLCA0LCAxLCAyNTMsIDE3MiwgMTUwLCA0LCAxLCAyNTIsIDQ3LCAxNTAsIDQsIDEsIAorICAgIDI0MiwgMjEwLCAxNTAsIDQsIDEsIDI0OCwgMjI5LCAxNTAsIDQsIDEsIDI0NSwgMjIxLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKKyAgICAxNTAsIDQsIDEsIDI0NSwgMjA1LCAxNTAsIDQsIDEsIDI0NSwgNzMsIDE1MCwgNCwgMSwgMTEyLCAxNTAsIDQsIDEsIDIxMCwgCisgICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMzQsIDE1MCwgNCwgMSwgMjMyLCAxOTYsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCisgICAgNCwgMSwgMjUxLCA0MSwgMTUwLCA0LCAxLCAyMzQsIDE3MSwgMTUwLCA0LCAxLCAyNDEsIDc1LCAxNTAsIDQsIDEsIDIzNSwgCisgICAgMTQ3LCAxNTAsIDQsIDEsIDI0MiwgMjUzLCAxNTAsIDQsIDEsIDI1MCwgMTM0LCAxNTAsIDQsIDEsIDIzMSwgNjMsIDE1MCwgCisgICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgNDQsIDE1MCwgNCwgMSwgMjIwLCAxMDQsIDE1MCwgNCwgMSwgMjEzLCAKKyAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNjUsIDE1MCwgNCwgMSwgMjI1LCAyMDgsIDE1MCwgNCwgMSwgMjM1LCAxMTYsIDE1MCwgCisgICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYzLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjMsIAorICAgIDE1MCwgNCwgMSwgMjIzLCA5OCwgMTUwLCA0LCAxLCAyNDksIDI0NiwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKKyAgICAyMjUsIDQ5LCAxNTAsIDQsIDEsIDIzNCwgMTgyLCAxNTAsIDQsIDEsIDIyNiwgMjI2LCAxNTAsIDQsIDEsIDI0NCwgMTUwLCAKKyAgICAxNTAsIDQsIDI3LCAyNDUsIDIyMiwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxNTAsIDI0MCwgMTc1LCAKKyAgICAxNTAsIDI0NiwgMTAzLCA1MCwgOTQsIDI1NSwgMjQsIDI0NSwgNjUsIDk0LCAyNTUsIDI0LCAyMjEsIDE2NCwgOTQsIDI1NSwgCisgICAgMjQsIDIyMCwgOTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwNCwgMjI0LCA3NCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyNDMsIAorICAgIDEzMiwgOTQsIDI1NSwgMjQsIDIxNiwgNzYsIDk0LCAyNTUsIDI0LCAyMjMsIDUwLCA5NCwgMjU1LCAyNCwgMjEwLCAxMDMsIAorICAgIDk0LCAyNTUsIDI0LCAyMjUsIDI0OSwgOTQsIDI1NSwgMjQsIDIxMSwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDIxNSwgOTQsIAorICAgIDI1NSwgMjQsIDI0MywgNDgsIDk0LCAyNTUsIDI0LCAyNDMsIDQ5LCAyMzAsIDc0LCA5NCwgMjU1LCAyNCwgMjQzLCA0NiwgCisgICAgOTQsIDI1NSwgMjQsIDIyNCwgNzUsIDIyNiwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjQzLCA2MywgOTQsIDI1NSwgCisgICAgMjQsIDIyNSwgMjMwLCA5NCwgMjU1LCAyNCwgMjUzLCAyMDgsIDI0MiwgNDgsIDk0LCAyNTUsIDI0LCAyMzAsIDg0LCA5NCwgCisgICAgMjU1LCAyNCwgMjMxLCAyMTMsIDk0LCAyNTUsIDI0LCAyMzEsIDU0LCA5NCwgMjU1LCAyNCwgMjMxLCA1NSwgMjM0LCAxODMsIAorICAgIDk0LCAyNTUsIDI0LCAyNDgsIDE3MSwgOTQsIDI1NSwgMjQsIDIyNCwgODYsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjI0LCAKKyAgICA3MCwgOTQsIDI1NSwgMjQsIDIxMSwgMzAsIDI1MiwgNDgsIDIxMCwgMjMwLCA5NCwgMjU1LCAyNCwgMjI2LCAyMTEsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzYsIDI2LCA5NCwgMjU1LCAyNCwgMjQ4LCA3OCwgOTQsIDI1NSwgMjQsIDIxMCwgMzMsIDk0LCAxNjQsIAorICAgIDIzMSwgMTQ4LCAyNTAsIDQzLCA5NCwgMjI1LCAxNCwgMjIwLCAzOCwgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjIxLCAxNjQsIAorICAgIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNSwgMjQzLCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgCisgICAgMjQxLCAxNjUsIDk0LCAyMjUsIDE0LCAyMTUsIDE3NywgOTQsIDIyNSwgMTQsIDIyMSwgMTY0LCA5NCwgMjI1LCAxNCwgMjI1LCAKKyAgICAyNDMsIDk0LCAyMjUsIDE0LCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgMjQxLCA2OCwgOTQsIDIyNSwgMTQsIDI0MSwgNjksIAorICAgIDI0MiwgMywgMzEsIDIxNCwgMywgOTQsIDIyNSwgMTQsIDIyNCwgMjAsIDk0LCAyMjUsIDE0LCAyNDgsIDIxNiwgMTc3LCAKKyAgICAyMzEsIDE3NiwgOTQsIDIyNSwgMTQsIDIzMSwgNDMsIDk0LCAyMjQsIDE0NCwgMjMxLCAxNzMsIDk0LCAyMjUsIDE0LCAyMjMsIAorICAgIDE3MiwgOTQsIDIyNCwgMTQ0LCAyMjUsIDI1MSwgOTQsIDIyNSwgMTQsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMjI1LCAxNCwgCisgICAgMjE5LCAxNjEsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIyNSwgMjQ1LCA5NCwgMTY0LCAyMTQsIDE2MCwgCisgICAgMjQ3LCAxMjgsIDk0LCAxNjQsIDIzMiwgMTE0LCAyNDcsIDEyOCwgOTQsIDIyNCwgMTQ0LCAyMjcsIDE5OSwgMjQyLCA0NywgCisgICAgOTQsIDIyNSwgMTQsIDIyNCwgODAsIDIyNCwgNzQsIDk0LCAxLCAyNTQsIDE3OSwgOTQsIDEsIDI1MiwgMzYsIDk0LCAxLCAKKyAgICAyNDIsIDIwOCwgOTQsIDEsIDI0OCwgMTk3LCA5NCwgMSwgMjQxLCAyNDUsIDk0LCAxLCAyMTQsIDMsIDk0LCAxLCAyMTAsIAorICAgIDk3LCA5NCwgMSwgMjQxLCAyMDQsIDk0LCAxLCAyMTYsIDIzMSwgOTQsIDEsIDIxMCwgMjMzLCA5NCwgMSwgNDAsIDIzNSwgMCwgCisgICAgOTQsIDEsIDIzNSwgMCwgOTQsIDEsIDIzMywgMTAwLCA5NCwgMSwgNDAsIDIzMSwgNzAsIDk0LCAxLCAyMzEsIDcwLCA5NCwgCisgICAgMSwgNDAsIDIyNywgMTk4LCA5NCwgMSwgMjI3LCAxOTgsIDk0LCAxLCAyMjEsIDI1MSwgOTQsIDEsIDI1MywgMTcwLCA5NCwgCisgICAgMSwgNDAsIDIyNSwgMjI0LCA5NCwgMSwgMjI1LCAyMjQsIDk0LCAxLCA0MCwgMjE1LCAxODAsIDk0LCAxLCAyMTUsIDE4MCwgCisgICAgOTQsIDEsIDIyNCwgNDIsIDk0LCAxLCAyMjMsIDcwLCA5NCwgMSwgMjIwLCAyMiwgOTQsIDEsIDIxNywgMzksIDk0LCAyNywgCisgICAgMjExLCA2LCA1MiwgMjE0LCAzLCA5NCwgMjcsIDIxMSwgNiwgMjE0LCA0LCAyMTAsIDIzMywgOTQsIDI3LCAyMTEsIDYsIDUyLCAKKyAgICAyMTAsIDIzMywgOTQsIDIyNCwgMTQ0LCAyNDMsIDQ4LCA5NCwgMjI0LCAxNDQsIDI0MywgNDYsIDksIDU0LCA1MCwgOSwgNSwgCisgICAgMjIxLCAyNDQsIDksIDI0NCwgMzgsIDIzMSwgMTU5LCA5LCA1LCAyMjIsIDI1LCA5LCA1LCAyMjEsIDI0NywgMjU0LCA0NSwgCisgICAgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNTQsIDQ1LCAyNDQsIDEyLCAyMjIsIDE5NSwgOSwgMjIzLCAxMzcsIDI1NCwgNDUsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDI1NCwgNDUsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyNTQsIAorICAgIDIzMCwgNTAsIDksIDI0OSwgMjI3LCA5LCAyNDgsIDE1OCwgMjIwLCAxMzksIDksIDIyNSwgMTYsIDIxMywgMjQxLCA1MCwgOSwgCisgICAgNSwgMjMwLCAxNzksIDksIDUsIDIyMiwgNSwgMjU0LCAxODEsIDIxMiwgNDUsIDksIDUsIDI1NCwgMTgxLCAyNTMsIDIyOSwgCisgICAgOSwgNSwgMjIzLCAxNzAsIDI1NCwgMTgwLCA5LCA1LCAyMjMsIDE3OCwgMjU0LCAxNjEsIDI1NCwgMTEyLCA5LCA1LCAyMTcsIAorICAgIDcxLCA5LCA0LCAxMjUsIDIxNywgODEsIDksIDQsIDEyNSwgMjcsIDEwOSwgMiwgMjMzLCAxMDksIDIsIDIxMSwgNDMsIDksIAorICAgIDQsIDEyNSwgMjEwLCAxMDgsIDksIDQsIDI0NCwgMTczLCA5LCA0LCAyNDgsIDE5MiwgOSwgNCwgMjM0LCAyMTEsIDksIDIyMCwgCisgICAgMTUyLCA5LCAxLCA3OSwgOSwgMjE1LCAyMTIsIDU5LCAyMjQsIDE0NCwgNzksIDksIDIyNCwgMTYsIDc5LCA5LCAxLCAyMzQsIAorICAgIDIxNSwgMjExLCA0MywgOSwgMSwgMjQyLCAyNiwgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNDgsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCA0OCwgOSwgMSwgMjEyLCAzMSwgMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAxODIsIDUxLCA5LCAxLCA3NywgMiwgCisgICAgMTgyLCA0OCwgOSwgMSwgMjU0LCAxNzksIDksIDEsIDI1MiwgNjIsIDksIDEsIDIxNywgOSwgMjMxLCAxNjksIDksIDEsIAorICAgIDIxNywgOCwgOSwgMSwgMjE2LCAxOTMsIDksIDEsIDIzNSwgMTI5LCA5LCAxLCAyNDIsIDQ0LCA5LCAxLCAyMzQsIDEzNSwgOSwgCisgICAgMSwgMjQ4LCAyMDMsIDksIDEsIDIxNiwgMjAzLCA5LCAxLCAyMjMsIDk4LCA5LCAxLCAyMTAsIDEwOCwgOSwgMSwgMjIxLCAKKyAgICAxNjgsIDksIDEsIDIyMCwgNjEsIDksIDEsIDIyMiwgMjgsIDksIDEsIDI0OCwgMjI0LCA5LCAxLCAyMTcsIDgxLCA5LCAxLCAKKyAgICAyMTAsIDExMSwgOSwgMSwgMjU0LCAyMDUsIDksIDEsIDI0MiwgMjUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgMTEzLCAxNzAsIAorICAgIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgCisgICAgMTM0LCAxNzAsIDQ4LCA5LCAyMTcsIDQ0LCA5LCAxLCAyNDQsIDE1MCwgOSwgMSwgMjI0LCA4NCwgOSwgMSwgMjM1LCAwLCA5LCAKKyAgICAxLCAyMzMsIDEwOCwgOSwgMSwgMjMxLCA4MywgOSwgMSwgMjI4LCA2NywgOSwgMSwgMjQxLCAyMjUsIDksIDEsIDIxMiwgMzAsIAorICAgIDksIDEsIDEwOSwgMjMxLCAxOTcsIDksIDEsIDIxMSwgNDMsIDksIDI0NCwgMTcxLCA5LCAyNDgsIDE5MCwgOSwgMjM0LCAKKyAgICAyMDksIDksIDI0NCwgMTczLCA5LCAyNDgsIDE5MiwgOSwgMjM0LCAyMTEsIDksIDIyMCwgOTUsIDksIDIxOCwgNDYsIDksIAorICAgIDIzMSwgMjMxLCA0OCwgOSwgMTgyLCA0OCwgOSwgMTgyLCA1MSwgOSwgMjE4LCA2NiwgMjU0LCAxNzksIDksIDIzNSwgMjAwLCAKKyAgICAyNDgsIDE5MiwgOSwgMTY0LCAyMjgsIDY4LCAyNDIsIDIyNSwgOSwgMjA5LCAyNTUsIDksIDI1LCA1LCA0LCAyMTQsIDEwNiwgCisgICAgNDgsIDksIDI1LCA1LCAyMzUsIDIwMCwgNCwgMjE0LCAxMDYsIDQ4LCA5LCAyNSwgNSwgNTksIDUxLCA5LCAyMjMsIDUyLCAKKyAgICAyNDgsIDE5MiwgOSwgMjQ0LCAxNzQsIDIsIDExMywgMjQ3LCAxMjYsIDksIDIxMiwgMzIsIDE4MiwgNTEsIDI1NCwgNDUsIAorICAgIDIxLCAyMTAsIDg2LCAyNTQsIDQ1LCAyMSwgMTExLCAyNTQsIDQ1LCAyMSwgMTA1LCAyNTQsIDQ1LCAyMSwgMTU4LCAyNTQsIAorICAgIDQ1LCAyMSwgMTYxLCAyNTQsIDQ1LCAyMSwgMTkwLCAyNTQsIDQ1LCAyMSwgMTk1LCAyNTQsIDQ1LCAyMSwgMTk5LCAyNTQsIAorICAgIDQ1LCAyMSwgMTk2LCAyNTQsIDQ1LCAyMSwgMjAxLCA5LCAyMjUsIDE4NSwgNTAsIDksIDI0OCwgOTEsIDIyMCwgMTM5LCA5LCAKKyAgICAyMTYsIDE0NywgMjIwLCAxMzksIDksIDI0NCwgODksIDIyNSwgMTIsIDIxOCwgMTU4LCA5LCAxLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDEsIDIxOCwgMjQsIDI1NCwgMTc5LCA5LCAxLCAxMDksIDIxMiwgNDYsIAorICAgIDksIDEsIDEwOSwgMiwgMjEyLCAzMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDUxLCA5LCAxLCAKKyAgICAxMjUsIDI0MiwgMjYsIDksIDEsIDEyNSwgMTgyLCAyNTQsIDE3OSwgOSwgMSwgMTI1LCAxODIsIDIxMiwgMzAsIDksIDEsIAorICAgIDEwNCwgMiwgMTgyLCA0OCwgOSwgMSwgMTI1LCAxODIsIDIxMSwgNDMsIDksIDEsIDIxNSwgMTQ5LCA5LCAxLCAyMTUsIDE0NywgCisgICAgOSwgMSwgMjUyLCA3MiwgOSwgMSwgMjE3LCA5LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjE3LCA5LCAyLCAxMzQsIDE3MCwgNzIsIAorICAgIDI0NiwgMTExLCA5LCAxLCAyMjUsIDIwOCwgOSwgMSwgMjE3LCA2LCA5LCAxLCAyNTIsIDYwLCA5LCAxLCAxMjIsIDIsIDE4MiwgCisgICAgNDgsIDksIDEsIDEyMiwgMiwgMTEzLCAxNzAsIDY3LCA0OCwgOSwgMSwgMjI3LCAxNTcsIDksIDEsIDI0NiwgNTEsIDksIDEsIAorICAgIDEyMiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMTcsIDI3LCA5LCAxLCAyMTcsIDI1LCA5LCAxLCAyNDgsIDEzOCwgOSwgMSwgCisgICAgMjQ4LCAyMDQsIDIsIDIyMiwgMjM2LCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIDUxLCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIAorICAgIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwOSwgOSwgMSwgMjQ4LCAxNDAsIDksIDEsIDI0NiwgNzgsIAorICAgIDksIDEsIDI0OCwgMjA0LCAyLCAxMzQsIDE3MCwgNzIsIDI0NiwgMTExLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjQ0LCAxOSwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjIyLCAxNzMsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMjMsIDk5LCAyLCAKKyAgICAyMjIsIDIzNiwgOSwgMSwgMjIzLCA5OSwgMiwgNTksIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIAorICAgIDEsIDIyMywgOTksIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIzNSwgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgCisgICAgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyMSwgMTY5LCAKKyAgICAyLCAxMzQsIDE3MCwgMjUyLCA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjIyLCAyOSwgMiwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxLCAyMjIsIDI5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgODIsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgCisgICAgMjU0LCAyMDYsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxLCAyNDQsIDE1MSwgMiwgCisgICAgNTksIDIzMCwgMTE0LCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCA1MSwgOSwgMSwgMjEzLCAyNDgsIDksIDEsIDI0NCwgCisgICAgMTUxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyNSwgMjA2LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNDgsIDksIDEsIAorICAgIDIyNCwgODUsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjM0LCAxODAsIDksIDEsIDIxNywgMjUxLCAyMzUsIDAsIDksIDEsIAorICAgIDIzNSwgMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNSwgMSwgMiwgNTksIDQ4LCA5LCAxLCAyMjksIDg0LCA5LCAxLCAyMzUsIAorICAgIDEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjQzLCAxMjksIDksIDEsIDI0MywgMTMwLCAyLCAyMjIsIDIzNiwgOSwgMSwgCisgICAgMjI5LCA3LCA5LCAxLCAyNDMsIDEzMCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyNDIsIDEwOCwgOSwgMSwgMjQzLCAxMzAsIAorICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgNTksIAorICAgIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAKKyAgICAxLCAyMjgsIDY4LCAyLCA1OSwgNTEsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAxLCAyMjIsIDIxNiwgOSwgMSwgCisgICAgMjI4LCA2OCwgMiwgMjIyLCAyMzYsIDksIDEsIDIyOCwgNjgsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQxLCAyMjYsIAorICAgIDI0NywgMTQ5LCA5LCAxLCAyMTcsIDI4LCAyLCA1OSwgNDgsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNDgsIDksIDEsIDI0MSwgCisgICAgMjI2LCAyNDIsIDE3OCwgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMTcsIDksIDIzMSwgCisgICAgMTcwLCAyNDIsIDE3OCwgOSwgMSwgMjEyLCAzMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNCwgNzksIDIyNiwgMjM4LCA5LCAxLCAKKyAgICAyMjYsIDIzOCwgOSwgMSwgNjksIDksIDEsIDIxMCwgMjEyLCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMiwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyMTMsIDI1NSwgOSwgMSwgMjQ0LCAxNzYsIDIxMSwgNDMsIDksIDEsIDc3LCAKKyAgICAyLCAyMTcsIDc4LCA5LCAxLCA3NywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgOSwgMSwgNzYsIAorICAgIDksIDEsIDc3LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDc3LCAyNTIsIDE0MCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAKKyAgICAxODIsIDQ4LCA5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDksIDEsIDI1NCwgMjUyLCA5LCA0LCAxMjUsIDI3LCAyMjIsIDI5LCAKKyAgICAyLCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCAyNywgMjI0LCA4NSwgMiwgMjMzLCAxMDksIDIsIAorICAgIDEwOSwgMjMxLCAxOTcsIDksIDQsIDEyNSwgNjYsIDY1LCAxNywgOSwgNCwgMTI1LCAyMzMsIDEwOSwgMjU0LCAxNzksIDksIAorICAgIDQsIDEyNSwgMjM1LCAxMjksIDksIDQsIDEyNSwgMTM0LCAyNDcsIDEyNiwgOSwgNCwgMTI1LCAyMjEsIDE2OCwgOSwgMjQ1LCAKKyAgICAxNTEsIDY0LCAyNTMsIDE3NCwgOSwgMjE4LCAxNTQsIDY0LCAyMjIsIDE0MCwgMjQ1LCAxODMsIDI0MSwgMTYyLCA5LCA0LCAKKyAgICAxMjUsIDIyMiwgMTg1LCAyMTAsIDg2LCA5LCA0LCAxMjUsIDIxNCwgMTU5LCAyMjMsIDExOCwgMjEwLCA4NiwgOSwgNCwgCisgICAgMTI1LCAyNDcsIDEyNywgMjQxLCAyNDMsIDY0LCAyMzQsIDEzNSwgOSwgNCwgMTI1LCA2NiwgNTMsIDE3LCA5LCA0LCAxMjEsIAorICAgIDIyMSwgMTY4LCA5LCA0LCAxMjUsIDIzMSwgMjMyLCA5LCA0LCAyMTIsIDMwLCA5LCA0LCAyMTEsIDQzLCA5LCA0LCAxMjUsIAorICAgIDIxMSwgNDMsIDksIDQsIDEyNSwgMjI4LCA2NywgOSwgMjI1LCA0NCwgNjQsIDIyMiwgMTUsIDksIDI0NSwgMTYwLCAyNTAsIAorICAgIDE4MywgMTIxLCAyMTgsIDEzMSwgOSwgMjQ1LCAxNjAsIDI1MCwgMTgzLCAxMjUsIDIxOCwgMTMxLCA5LCAyMjIsIDE4NSwgCisgICAgMTI1LCAyMTgsIDEzMiwgMiwgMjQ0LCAxMTIsIDI1MCwgMTgyLCA5LCA0LCAxMjEsIDIzMSwgODMsIDksIDEsIDI0OCwgMjA0LCAKKyAgICAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgMjQ1LCAzMCwgCisgICAgMjU0LCA0NSwgMjEsIDIxMCwgODYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTEsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAKKyAgICAxMDUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNTgsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNjEsIDI0NSwgMzAsIDI1NCwgCisgICAgNDUsIDIxLCAxOTAsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTksIDI0NSwgCisgICAgMzAsIDI1NCwgNDUsIDIxLCAxOTYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDEsIDIyMCwgNjIsIDIsIDU5LCAKKyAgICA1MSwgOSwgMSwgMjQ4LCAyMjUsIDIsIDU5LCA1MSwgOSwgMSwgMjQyLCAyNTIsIDIsIDU5LCA1MSwgOSwgNSwgMjE5LCAxNjAsIAorICAgIDI1NCwgMTM0LCA5LCA1LCAyMTksIDE2MCwgMjI0LCAyMzgsIDIzMSwgNjMsIDksIDEsIDI0MSwgMjI2LCAyLCAyMzUsIDIwMCwgCisgICAgMjE0LCAxMDUsIDE4MywgMjQ1LCAxNTEsIDY0LCAyMjYsIDE4LCAxODMsIDIxOCwgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgCisgICAgMTgzLCAyMTgsIDY4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE4MywgMjE4LCAyMCwgMjQ5LCAyMzQsIDE4MywgMjE4LCA2OCwgCisgICAgMjQ5LCAyMzQsIDE4MywgMjAzLCAyNDksIDIzNCwgMTgzLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgMjQ5LCAKKyAgICAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgCisgICAgMjE4LCA2OCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyNDksIDE4OCwgMTgzLCAyNDIsIDgsIDIyNiwgCisgICAgMjU0LCAxODMsIDI0MiwgOCwgMjMxLCA0MSwgMTgzLCAyNDIsIDgsIDI1MywgMjI2LCAxODMsIDI1NSwgMzAsIDc5LCAxODMsIAorICAgIDEsIDI1NCwgMTgzLCAxODMsIDEsIDIxOCwgMjQsIDI1NCwgMTgzLCAxODMsIDEsIDI1MiwgMzMsIDE4MywgMSwgMjQzLCAKKyAgICAxMjAsIDE4MywgMSwgMjQzLCAxMjEsIDI0MywgOTgsIDE4MywgMSwgMjQ4LCAyMDAsIDE4MywgMSwgMjQ3LCAxMjcsIDI0OCwgCisgICAgMjAxLCAyMjIsIDIzMiwgMTgzLCAxLCAyNDEsIDI0NSwgMTgzLCAxLCAyMTIsIDMwLCAxODMsIDEsIDIxMCwgMTA4LCAxODMsIAorICAgIDEsIDI0MSwgMjAyLCAxODMsIDEsIDIxNiwgMjI3LCAxODMsIDEsIDIxNiwgMjI4LCAyNDMsIDk4LCAxODMsIDEsIDIxMCwgCisgICAgMTk5LCAxODMsIDEsIDIxMCwgMjAwLCAyNDEsIDI0NSwgMTgzLCAxLCAyMzQsIDIzMSwgMTgzLCAxLCAyMzMsIDEwNywgMTgzLCAKKyAgICAxLCAyMzAsIDE5NSwgMTgzLCAxLCAyMjcsIDE5OCwgMTgzLCAxLCAyMjAsIDE0NSwgMTgzLCAxLCA0MCwgMjIwLCAxNDUsIAorICAgIDE4MywgMSwgNzYsIDE4MywgMSwgMjI1LCAyMjQsIDE4MywgMSwgMjIzLCA1MiwgMjI1LCAyMjQsIDE4MywgMSwgMjIyLCAyNiwgCisgICAgMTgzLCAxLCAyMjQsIDc4LCAxODMsIDEsIDIyMiwgMjMyLCAxODMsIDEsIDIyMCwgMjIsIDE4MywgMSwgMjE3LCAzNywgMTgzLCAKKyAgICAxLCAyMjUsIDE3MiwgMjUyLCAyMCwgMTgzLCAxLCAyMjUsIDE3MiwgMjQyLCAyNDksIDE4MywgMSwgMjI1LCAxNzIsIDI0OCwgCisgICAgMjgsIDE4MywgMjI0LCAxNTQsIDQ4LCAxODMsIDIyNCwgMTU0LCA1MSwgMTgzLCAyMjQsIDE1NCwgMjQ2LCAxMjUsIDE4MywgCisgICAgMjEwLCAxNywgNDgsIDE4MywgMjEwLCAxNywgNTEsIDE4MywgMjEwLCAxNywgMjQ2LCAxMjUsIDE4MywgMjIzLCAxMzQsIDQ4LCAKKyAgICAxODMsIDIyMywgMTM0LCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAyNCwgMjQxLCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAKKyAgICAyNCwgMjU0LCAxMTMsIDE4MywgMjQxLCAyNDgsIDQ4LCAxODMsIDI0MSwgMjQ4LCA1MSwgMTgzLCAyNDEsIDI0NywgMjQ2LCAKKyAgICAxMjUsIDE4MywgMjQ1LCA4NywgNDgsIDE4MywgMjQ1LCA4NywgNTEsIDE4MywgMjIyLCAxMDksIDE4MywgMjQ0LCAxNDQsIAorICAgIDI0NywgMTI4LCAxODMsIDIyMywgMjUxLCAxODMsIDIyMiwgMTM2LCAxODMsIDExMywgNjcsIDE3MCwgNDgsIDE4MywgMTEzLCAKKyAgICA2NywgMTcwLCA1MSwgMTgzLCAxMzQsIDE3MCwgNDgsIDE4MywgMTM0LCAxNzAsIDUxLCAxODMsIDIyNiwgMjUyLCAyMzIsIAorICAgIDIyMCwgNDgsIDE4MywgMjI2LCAyNTIsIDIzMiwgMjIwLCA1MSwgMTgzLCAyMzAsIDYxLCAxODMsIDI1MiwgMTM5LCAxODMsIAorICAgIDEsIDIxOSwgNTEsIDIxMCwgODAsIDE4MywgMSwgMjE5LCA1MSwgMjM0LCAxMjgsIDE4MywgMSwgMjE5LCA1MSwgMjQ0LCAKKyAgICAxNjIsIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyNDEsIDEsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA1OSwgMjUyLCAKKyAgICA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgCisgICAgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCAyNTIsIDUxLCAyMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMjM1LCAKKyAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjUyLCA2MywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDEyMiwgMiwgMTEzLCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAxMjIsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIDksIDEsIDI0OCwgMjA0LCAKKyAgICAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjM1LCAKKyAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjIzLCA5OSwgMiwgOTEsIDksIDEsIDIyMSwgMTY5LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIAorICAgIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIAorICAgIDI0NCwgMTUxLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTUxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAKKyAgICAxNTMsIDUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgNTksIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAKKyAgICAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgNjYsIDIsIDU5LCA0OCwgOSwgCisgICAgMSwgNjYsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAKKyAgICAyMTcsIDgxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjMzLCAxMDksIDIsIDEzMCwgOSwgMSwgCisgICAgMjIzLCA5OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMTgyLCA0OCwgOSwgMSwgMjIxLCAKKyAgICAxNjksIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNTEsIDksIDEsIAorICAgIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgMjQ3LCAxMjYsIDksIDEsIDIyMSwgMTY5LCAyLCA0LCA5LCAxLCAKKyAgICAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIzLCA5OSwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgCisgICAgMjQ3LCAxMjYsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDExMywgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgCisgICAgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDI0NCwgMTksIDUxLCA5LCAxLCAyMTIsIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgCisgICAgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgCisgICAgNDgsIDksIDEsIDEyMiwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDUxLCA5LCAxLCAyMjEsIDE2OSwgMiwgCisgICAgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAKKyAgICA5LCAxLCAyMzUsIDEsIDIsIDExMywgMTcwLCA0OCwgMjE2LCAyMDYsIDEsIDI0MiwgNTMsIDIxNiwgMjA2LCAxLCAyMjAsIAorICAgIDcwLCAyMTYsIDIwNiwgMSwgMjI4LCA2NiwgMjE2LCAyMDYsIDEsIDIyMywgMTg3LCAyMTYsIDIwNiwgMSwgMjUyLCAxOTcsIAorICAgIDIxNiwgMjA2LCAxLCAyMzMsIDEsIDIxNiwgMjA2LCAxLCAyMzUsIDE0LCAyMTYsIDIwNiwgMSwgMjU0LCAxNjgsIDIxNiwgCisgICAgMjA2LCAxLCAyMTQsIDI1LCAyMTYsIDIwNiwgMSwgMjMxLCA4MiwgMjE2LCAyMDYsIDEsIDI0NCwgMjAyLCAyMTYsIDIwNiwgCisgICAgMSwgMjQ4LCAzMSwgMjE2LCAyMDYsIDEsIDIxNiwgMjA4LCAyMTYsIDIwNiwgMSwgMjMzLCAxMzcsIDIxNiwgMjA2LCAxLCAKKyAgICAyNDMsIDEzOCwgMjE2LCAyMDYsIDEsIDI0MiwgMTg0LCAyMTYsIDIwNiwgMSwgMjIxLCAxNjcsIDIxNiwgMjA2LCAxLCAyNDgsIAorICAgIDE1NiwgMjE2LCAyMDYsIDEsIDIxMCwgMTAwLCAyMTYsIDIwNiwgMSwgMjE3LCAzOCwgMjE2LCAyMDYsIDEsIDIxMSwgMTAzLCAKKyAgICAyMTYsIDIwNiwgMSwgMjI1LCAyMzcsIDIxNiwgMjA2LCAxLCAyMzUsIDEzNCwgMjE2LCAyMDYsIDEsIDI1MCwgMTQyLCAyMTYsIAorICAgIDIwNiwgMSwgMjE1LCAxNTYsIDIxNiwgMjA2LCAxLCAyNDEsIDE5NSwgMjE2LCAyMDYsIDEsIDIzNCwgMTM3LCAyMTYsIDIwNiwgCisgICAgMSwgMjE2LCAyMDcsIDIxNiwgMjA2LCAxLCAyMTAsIDExNSwgMjE2LCAyMDYsIDEsIDIyMCwgNjAsIDIxNiwgMjA2LCAxLCAKKyAgICAyMjIsIDMyLCAyMTYsIDIwNiwgMSwgMjQ4LCAyMjcsIDIxNiwgMjA2LCAxLCAxMTIsIDIxNiwgMjA2LCAxLCAyMTAsIDIzLCAKKyAgICAyMTYsIDIwNiwgMSwgMjU0LCAyMDIsIDIxNiwgMjA2LCAxLCAyNDIsIDI1MCwgMjE2LCAyMDYsIDEsIDIyNCwgODgsIDIxNiwgCisgICAgMjA2LCAxLCAyMTIsIDYzLCAyMTYsIDIwNiwgMjU1LCAzMSwgMjE2LCAyMDYsIDI1NSwgNDcsIDIxNiwgMjA2LCAyNDAsIAorICAgIDEyMSwgMjE2LCAyMDYsIDI0NSwgMjE2LCAyMTYsIDIwNiwgMjE0LCAyMjIsIDIxNiwgMjA2LCAyMjYsIDE4NiwgMjE2LCAKKyAgICAyMDYsIDI0NSwgMjI0LCAyMTYsIDIwNiwgMjQ1LCAyNCwgMjE2LCAyMDYsIDIyNiwgMjUxLCAyMTYsIDIwNiwgMjI3LCAzLCAKKyAgICAyMTYsIDIwNiwgMjE4LCA0NiwgMjE2LCAyMDYsIDEsIDIyOSwgMjMwLCAyMjgsIDE0MiwgMjEsIDIxMCwgODYsIDIyOCwgCisgICAgMTQyLCAyMSwgMTExLCAyMjgsIDE0MiwgMjEsIDEwNSwgMjI4LCAxNDIsIDIxLCAxNTgsIDIyOCwgMTQyLCAyMSwgMTYxLCAKKyAgICAyMjgsIDE0MiwgMjEsIDE5MCwgMjI4LCAxNDIsIDIxLCAxOTUsIDIyOCwgMTQyLCAyMSwgMTk5LCAyMjgsIDE0MiwgMjEsIAorICAgIDE5NiwgMjI4LCAxNDIsIDIxLCAyMDEsIDIyOCwgMTQyLCAxLCA2MSwgMjI4LCAxNDIsIDEsIDI0NSwgMjE3LCAyMjgsIDE0MiwgCisgICAgMSwgNzQsIDIyOCwgMTQyLCAxLCA3NiwgMjI4LCAxNDIsIDEsIDY5LCAyMjgsIDE0MiwgMSwgMjI2LCAxODcsIDIyOCwgMTQyLCAKKyAgICAxLCA3OCwgMjI4LCAxNDIsIDEsIDI0OCwgMjE3LCAyMjgsIDE0MiwgMSwgMjMwLCAzMCwgMjI4LCAxNDIsIDEsIDI1MiwgCisgICAgMTk5LCAyMjgsIDE0MiwgMSwgMTkxLCAyMjgsIDE0MiwgMSwgMjE3LCAxMDYsIDIyOCwgMTQyLCAxLCAyMzUsIDE0NywgMjI4LCAKKyAgICAxNDIsIDEsIDI1MCwgMTY1LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMjksIDIyOCwgMTQyLCAxLCAyMDUsIDIyOCwgMTQyLCAxLCAKKyAgICAyMjIsIDE4MSwgMjI4LCAxNDIsIDEsIDIwNiwgMjI4LCAxNDIsIDEsIDI0MywgODYsIDIyOCwgMTQyLCAxLCAyNDQsIDIwNCwgCisgICAgMjI4LCAxNDIsIDEsIDE3NiwgMjI4LCAxNDIsIDEsIDIzMywgMTQxLCAyMjgsIDE0MiwgMSwgMjI5LCAyMzQsIDIxMSwgMjIzLCAKKyAgICAyMjgsIDE0MiwgMSwgMTg2LCAyMjgsIDE0MiwgMSwgMjI3LCAxNjksIDIyOCwgMTQyLCAxLCAxOTgsIDIyOCwgMTQyLCAxLCAKKyAgICAxNjIsIDIyOCwgMTQyLCAxLCAyMTIsIDY1LCAyMjgsIDE0MiwgMSwgMTkyLCAyMjgsIDE0MiwgMSwgMjI3LCAxNzAsIDIxMSwgCisgICAgMjIzLCAyMjgsIDE0MiwgMSwgMjM1LCA2NywgMjM1LCAxNDcsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyNTAsIDE2NSwgMjI4LCAKKyAgICAxNDIsIDEsIDIzNSwgNjcsIDIwNSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMTI1LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIAorICAgIDIxOSwgMjUzLCAxMjEsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjE5LCAyNTMsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMjQ4LCA0NiwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDEyNSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMDAsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIyOSwgMTk4LCA3OSwgMjI4LCAxNDIsIDM4LCA1MiwgNTksIDQ4LCAyMjgsIDE0MiwgMTI1LCAxMzgsIDI1NCwgCisgICAgNjUsIDIyOCwgMTQyLCAxMjEsIDEzOCwgMjU0LCA2NSwgMjI4LCAxNDIsIDE2LCAyMjYsIDE4OCwgMjQ4LCA1OCwgMjI4LCAKKyAgICAxNDIsIDE2LCAyNDMsIDg1LCAyMjgsIDE0MiwgMjQ5LCAyMjcsIDIyOCwgMTQyLCAyNDUsIDM5LCA3OSwgMjI4LCAxNDIsIAorICAgIDIzMywgMTE0LCAyMjEsIDI1NCwgMSwgMjU0LCAxODUsIDIyMSwgMjU0LCAxLCAyNTEsIDIzNiwgMjIxLCAyNTQsIDEsIDI0MywgCisgICAgMTE5LCAyMjEsIDI1NCwgMSwgMjQ4LCAyMDIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1OCwgMjIxLCAyNTQsIDEsIDI1MiwgMTk3LCAKKyAgICAyMjEsIDI1NCwgMSwgMjEwLCA4OSwgMjIxLCAyNTQsIDEsIDIzNSwgMTY2LCAyMjEsIDI1NCwgMSwgMjE2LCA2OCwgMjIxLCAKKyAgICAyNTQsIDEsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMSwgMjM1LCAxNSwgMjIxLCAyNTQsIDEsIDIzMywgMTM0LCAyMjEsIDI1NCwgCisgICAgMSwgMjMwLCAxOTUsIDIyMSwgMjU0LCAxLCAyMjcsIDE5OCwgMjIxLCAyNTQsIDEsIDIxOSwgMTU4LCAyMjEsIDI1NCwgMSwgCisgICAgMjM2LCA2LCAyMjEsIDI1NCwgMSwgMjQ0LCAxMjksIDIyMSwgMjU0LCAxLCAyMTUsIDE4MiwgMjIxLCAyNTQsIDEsIDIyNCwgCisgICAgMTMsIDIyMSwgMjU0LCAxLCAyMjIsIDIzMiwgMjIxLCAyNTQsIDEsIDIyMCwgODcsIDIyMSwgMjU0LCAxLCAyMTcsIDEwMSwgCisgICAgMjIxLCAyNTQsIDE2NCwgMjM2LCA2LCAyMjEsIDI1NCwgMTY0LCAyMzYsIDUsIDIyMSwgMjU0LCAxNjQsIDIyNiwgMjQ3LCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyNDgsIDIxNSwgMjIxLCAyNTQsIDU4LCAxLCAyNDUsIDExMywgMjEwLCAxODIsIDIyMSwgMjU0LCAKKyAgICAxNjQsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc2LCAyMjEsIDI1NCwgMjUsIDUsIDc2LCAKKyAgICAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgMjU1LCA4MiwgMjIxLCAKKyAgICAyNTQsIDI1LCA1LCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIAorICAgIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDYxLCAyMjEsIDI1NCwgNTgsIDEsIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAKKyAgICAyMTksIDI1MywgNjEsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA2OSwgMjIxLCAyNTQsIDI1LCA1LCA2OSwgMjIxLCAyNTQsIAorICAgIDU4LCAxLCA3NCwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDc0LCAyMjEsIDI1NCwgMjUsIAorICAgIDUsIDc4LCAyMjEsIDI1NCwgMjUsIDUsIDIxOCwgNDYsIDIyMSwgMjU0LCAxNjQsIDIyOSwgOTcsIDIyMSwgMjU0LCAyMjQsIAorICAgIDE0NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDIyNywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDEyMiwgCisgICAgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTIsIDEyMiwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTMsIDIwOSwgMjIxLCAyNTQsIAorICAgIDIyNCwgMTQ0LCAyMjAsIDEwLCAyMjEsIDI1NCwgMjU1LCAzMCwgNzksIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjMxLCA3MywgCisgICAgMjI0LCA0OCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTAsIDMxLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIyNCwgNDgsIDIyMSwgCisgICAgMjU0LCAyMjQsIDE0NCwgMjEwLCAxMTQsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE1LCA5MCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAKKyAgICAyNTQsIDE3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIzMSwgMTUwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgCisgICAgMTA4LCAyMzEsIDE4NywgMSwgMjQyLCAzMSwgMjMxLCAxODcsIDEsIDI1NSwgMzQsIDIzMSwgMTg3LCAxLCAyNTQsIDIyNSwgCisgICAgMjMxLCAxODcsIDEsIDI1NSwgOCwgMjMxLCAxODcsIDEsIDI1NCwgMjE4LCAyMzEsIDE4NywgMSwgMjE0LCAxMjQsIDIzMSwgCisgICAgMTg3LCAxLCAyNTMsIDE2OCwgMjMxLCAxODcsIDEsIDIzNSwgMTY2LCAyMzEsIDE4NywgMSwgMjUzLCAyMDYsIDIzMSwgMTg3LCAKKyAgICAxLCAyNTQsIDE5MCwgMjMxLCAxODcsIDEsIDI1NCwgMTk1LCAyMzEsIDE4NywgMSwgMjU0LCAxODcsIDIzMSwgMTg3LCAxLCAKKyAgICAyNTQsIDE0NCwgMjMxLCAxODcsIDEsIDI1NCwgMTMxLCAyMzEsIDE4NywgMSwgMjUzLCAyNDUsIDIzMSwgMTg3LCAxLCAyMzYsIAorICAgIDYsIDIzMSwgMTg3LCAxLCAyNTQsIDgwLCAyMzEsIDE4NywgMSwgMjUzLCAyMTYsIDIzMSwgMTg3LCAxLCAyNTQsIDUzLCAKKyAgICAyMzEsIDE4NywgMSwgMjU0LCA0OSwgMjMxLCAxODcsIDEsIDI1MywgMjM5LCAyMzEsIDE4NywgMSwgMjUzLCAyMTQsIDIzMSwgCisgICAgMTg3LCAxLCAyNDYsIDYzLCAyMzEsIDE4NywgMSwgMjM1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMDUsIDIzMSwgMTg3LCAKKyAgICAyNTQsIDIzMSwgNzksIDIzMSwgMTg3LCAyMTMsIDEzNiwgNzksIDIzMSwgMTg3LCAyNDMsIDYwLCA3OSwgMjMxLCAxODcsIAorICAgIDIyNCwgMTQzLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDE1MSwgMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyMTcsIDgyLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTUxLCAyLCA1OSwgMjUyLCA1MSwgMjIsIDEzNCwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjI0LCA4NSwgMiwgNTksIDUxLCA5LCAxLCAyMzMsIDEwOSwgMiwgNTIsIDEzMCwgOSwgMSwgNjYsIAorICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgNzcsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgMTgyLCA0OCwgOSwgMSwgNzcsIAorICAgIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAyMzIsIDEyOSwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgNTksIDIxMSwgMjMxLCA5LCAxLCAyMjIsIDIwMywgMjExLCA0MywgOSwgMjQ5LCAxMDcsIDI0NCwgMTczLCA5LCAKKyAgICAyNDksIDEwNywgMjQ4LCAxOTIsIDksIDI0OSwgMTA3LCAyMzQsIDIxMSwgOSwgMjQ5LCAxMDcsIDI0NCwgMTcxLCA5LCAyNDksIAorICAgIDEwNywgMjQ4LCAxOTAsIDksIDI0OSwgMTA3LCAyMzQsIDIwOSwgOSwgMTM4LCAxMjMsIDU5LCA0OCwgOSwgMTM4LCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEzOCwgMjMyLCAxMzAsIDQ4LCA5LCAxMzgsIDEyMywgNTksIDUxLCA5LCAxMzgsIDExMywgMTcwLCA1MSwgCisgICAgOSwgMTM4LCAyMzIsIDEzMCwgNTEsIDksIDIwNCwgMjQ0LCAxNzEsIDksIDIwNCwgMjQ4LCAxOTAsIDksIDIwNCwgMjM0LCAKKyAgICAyMDksIDksIDQsIDEyNSwgMjEyLCAzMCwgOSwgMjQ0LCAxNzQsIDIsIDIyMiwgMjM2LCA5LCAyNDQsIDE3NCwgMiwgNTksIAorICAgIDQ4LCA5LCAyMzQsIDIxMiwgMiwgNTksIDUxLCA5LCA0MywgMjU0LCAyLCA0OCwgOSwgNDQsIDI1NCwgMiwgNDgsIDksIDQzLCAKKyAgICAyNTQsIDIsIDUxLCA5LCA0NCwgMjU0LCAyLCA1MSwgOSwgNTIsIDQ0LCAyNTQsIDIsIDQ4LCA5LCA1MiwgNDQsIDI1NCwgMiwgCisgICAgNzIsIDIsIDI0NywgMTI4LCA5LCA0NCwgMjU0LCAyLCA3MiwgMiwgMjQ3LCAxMjgsIDksIDI0OCwgMTkzLCAyLCAyNDcsIAorICAgIDEyOCwgODQsIDUsIDIzNSwgMjAwLCAyNTEsIDcsIDg0LCA1LCAyNTEsIDcsIDg0LCA1LCAyNTQsIDgzLCA4NCwgNSwgMjEzLCAKKyAgICAxNDcsIDg0LCAxLCAyMTksIDI1MywgNjEsIDg0LCAxLCA2MSwgODQsIDEsIDI1NSwgODIsIDg0LCAxLCA3NCwgODQsIDEsIAorICAgIDIzNiwgNDAsIDg0LCAxLCA2OSwgODQsIDEsIDIxNCwgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgCisgICAgODQsIDEsIDI1MSwgMTAsIDc2LCA4NCwgMSwgMjE5LCAyNTMsIDc2LCA4NCwgMSwgNzYsIDg0LCAxLCAyNTQsIDIxMCwgODQsIAorICAgIDEsIDI1MSwgMTAsIDc4LCA4NCwgMSwgMjE5LCAyNTMsIDc4LCA4NCwgMSwgNzgsIDg0LCAxLCAyNTMsIDIwMCwgODQsIDEsIAorICAgIDE3NiwgODQsIDEsIDIzNCwgMTM4LCA4NCwgMSwgMjQzLCAxNDIsIDg0LCAxLCAyNDMsIDAsIDg0LCAxLCAyMjksIDgyLCA4NCwgCisgICAgMSwgMjUxLCA0MSwgODQsIDEsIDI1MCwgMTY1LCA4NCwgMSwgMjM1LCAxNDcsIDg0LCAxLCAyMzUsIDEyMCwgODQsIDEsIAorICAgIDIyNywgMTY5LCA4NCwgMSwgMjE1LCAxNTcsIDg0LCAxLCAyMTUsIDE0NSwgODQsIDEsIDI0OCwgMTQzLCA4NCwgMSwgMjQ4LCAKKyAgICAxMjcsIDg0LCAxLCAyMjgsIDExNSwgODQsIDEsIDIxNywgMTA2LCA4NCwgMSwgMjE2LCAyMDksIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgODQsIDEsIDI0OCwgMzMsIDg0LCAxLCAxOTgsIDg0LCAxLCAyMjgsIDk3LCA4NCwgMSwgMTkxLCA4NCwgMSwgMjI1LCAxNTAsIAorICAgIDg0LCAxLCAyNTIsIDE5OSwgODQsIDEsIDI1MiwgMjYsIDg0LCAxLCAxODYsIDg0LCAxLCAxOTIsIDg0LCAxLCAyMDUsIDg0LCAKKyAgICAxLCAyMjIsIDE4MSwgODQsIDEsIDIzMywgMTQxLCA4NCwgMSwgMjMyLCAxOTAsIDg0LCAxLCAyMzIsIDE4MSwgODQsIDEsIAorICAgIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwNCwgODQsIDEsIDIxOCwgMjI1LCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgCisgICAgMjUsIDUsIDIyNiwgMjM4LCA4NCwgMjUsIDUsIDIyNiwgMTg1LCA4NCwgNSwgMjI3LCAyMDksIDg0LCA1LCAyNTMsIDE4MywgCisgICAgODQsIDI1LCA1LCAyNTUsIDgyLCA4NCwgMjUsIDUsIDc0LCA4NCwgMjUsIDUsIDIzNiwgNDAsIDg0LCAyNSwgNSwgNjksIDg0LCAKKyAgICAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgODQsIDI1LCAKKyAgICA1LCAyNTEsIDEwLCA3NiwgODQsIDI1LCA1LCAyMTksIDI1MywgNzYsIDg0LCAyNSwgNSwgNzYsIDg0LCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDg0LCAyNSwgNSwgMjUxLCAxMCwgNzgsIDg0LCAyNSwgNSwgMjE5LCAyNTMsIDc4LCA4NCwgMjUsIDUsIDc4LCA4NCwgCisgICAgMjUsIDUsIDI1MywgMjAwLCA4NCwgNSwgMjEzLCAxNTIsIDg0LCAyNSwgNSwgMjI0LCAxODgsIDc2LCA4NCwgMjUsIDUsIAorICAgIDI1MywgMTc5LCA4NCwgMjI2LCAyMDgsIDg0LCAyMTgsIDExMywgNSwgMjE0LCAyMTYsIDg0LCAyMTgsIDExMywgNSwgMjU0LCAKKyAgICA4NSwgODQsIDI0MiwgMTQ0LCAyNTUsIDIzLCA4NCwgMjU1LCAxMiwgMjU1LCAyMywgODQsIDI1LCA1LCAyNTEsIDEwLCAyMDAsIAorICAgIDc2LCA4NCwgMjUsIDUsIDIxNCwgMjE0LCA4NCwgMjUsIDUsIDIxNCwgMTE3LCA4NCwgMSwgMjI0LCA5MSwgODQsIDEsIDIzNCwgCisgICAgMTIxLCA4NCwgMSwgMjQyLCAyMzMsIDg0LCAxLCAyMTAsIDExNiwgODQsIDEsIDI0OCwgMTMyLCA4NCwgMSwgMjIzLCA0MiwgCisgICAgODQsIDEsIDI0NCwgMjA0LCA4NCwgMSwgMjEwLCAxNjgsIDg0LCAxLCAxNDksIDIyMiwgMTgyLCA4NCwgMSwgMTQ5LCAyMzIsIAorICAgIDE5MSwgODQsIDI1LCA1LCAxNDksIDE1NiwgODQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA4NCwgMjQ4LCAxODYsIDg0LCA1MiwgCisgICAgMjQ4LCAxODYsIDg0LCAyMSwgMjEwLCA4NiwgODQsIDIxLCAxMTEsIDg0LCAyMSwgMTA1LCA4NCwgMjEsIDE1OCwgODQsIDIxLCAKKyAgICAxNjEsIDg0LCAyMSwgMTkwLCA4NCwgMjEsIDE5NSwgODQsIDIxLCAxOTksIDg0LCAyMSwgMTk2LCA4NCwgMjEsIDIwMSwgODQsIAorICAgIDI1NSwgMzAsIDUwLCA4NCwgNSwgMTI1LCAyMTksIDE5LCAyNDcsIDEyOCwgODQsIDEsIDI1MSwgMTAsIDYxLCA4NCwgMSwgCisgICAgMjI2LCAyMzgsIDg0LCAxLCAyMjYsIDE4NSwgODQsIDEsIDI1MywgMTc5LCA4NCwgMSwgMjE0LCAyMTQsIDg0LCAxLCAyMTQsIAorICAgIDExNywgODQsIDEsIDIxMCwgODIsIDg0LCAxLCAxMTQsIDE5MiwgODQsIDEsIDI0MywgMzYsIDg0LCAxLCAyMzUsIDEwMiwgCisgICAgODQsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgODQsIDEsIDI0OCwgMTMzLCA4NCwgMSwgMjUyLCAxMTksIDE0NiwgNSwgMjUxLCAKKyAgICA3LCAxNDYsIDUsIDI1NCwgODMsIDE0NiwgNSwgMjEzLCAxNDcsIDE0NiwgMSwgNjEsIDE0NiwgMSwgMjU1LCA4MiwgMTQ2LCAKKyAgICAxLCA3NCwgMTQ2LCAxLCAyMzYsIDQwLCAxNDYsIDEsIDY5LCAxNDYsIDEsIDIxNCwgMTE4LCAxNDYsIDEsIDE0OSwgMTUzLCAKKyAgICAxNDYsIDEsIDE0OSwgMTU2LCAxNDYsIDEsIDc2LCAxNDYsIDEsIDI1NCwgMjEwLCAxNDYsIDEsIDc4LCAxNDYsIDEsIDI1MywgCisgICAgMjAwLCAxNDYsIDEsIDE3NiwgMTQ2LCAxLCAyMzQsIDEzOCwgMTQ2LCAxLCAyNDMsIDE0MiwgMTQ2LCAxLCAyNDMsIDAsIAorICAgIDE0NiwgMSwgMjI5LCA4MiwgMTQ2LCAxLCAyNTEsIDQxLCAxNDYsIDEsIDI1MCwgMTY1LCAxNDYsIDEsIDIzNSwgMTQ3LCAKKyAgICAxNDYsIDEsIDIzNSwgMTIwLCAxNDYsIDEsIDIyNywgMTY5LCAxNDYsIDEsIDIxNSwgMTU3LCAxNDYsIDEsIDIxNSwgMTQ1LCAKKyAgICAxNDYsIDEsIDI0OCwgMTQzLCAxNDYsIDEsIDI0OCwgMTI3LCAxNDYsIDEsIDIyOCwgMTE1LCAxNDYsIDEsIDIxNywgMTA2LCAKKyAgICAxNDYsIDEsIDIxNiwgMjA5LCAxNDYsIDEsIDI0OCwgMjI5LCAxNDYsIDEsIDI0OCwgMzMsIDE0NiwgMSwgMTk4LCAxNDYsIDEsIAorICAgIDE5MSwgMTQ2LCAxLCAyMjUsIDE1MCwgMTQ2LCAxLCAyNTIsIDE5OSwgMTQ2LCAxLCAyNTIsIDI2LCAxNDYsIDEsIDE4NiwgCisgICAgMTQ2LCAxLCAxOTIsIDE0NiwgMSwgMjA1LCAxNDYsIDEsIDIzMywgMTQxLCAxNDYsIDEsIDIyMCwgMTA0LCAxNDYsIDEsIAorICAgIDIxOCwgMjI1LCAxNDYsIDEsIDIwNiwgMTQ2LCAxLCAxNjIsIDE0NiwgNSwgMjI3LCAyMDksIDE0NiwgNSwgMjUzLCAxODMsIAorICAgIDE0NiwgMjUsIDUsIDI1NSwgODIsIDE0NiwgMjUsIDUsIDc0LCAxNDYsIDI1LCA1LCAyMzYsIDQwLCAxNDYsIDI1LCA1LCA2OSwgCisgICAgMTQ2LCAyNSwgNSwgMjE0LCAxMTgsIDE0NiwgMjUsIDUsIDE0OSwgMTUzLCAxNDYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjU0LCAyMTAsIDE0NiwgMjUsIDUsIDc4LCAxNDYsIDI1LCA1LCAyNTMsIAorICAgIDIwMCwgMTQ2LCA1LCAyMTMsIDE1MiwgMTQ2LCAxLCAyMzQsIDEzMCwgMjE3LCAxMDYsIDE0NiwgMjUzLCAyMDEsIDIzMywgCisgICAgMjksIDc5LCAxNDYsIDEsIDIyMiwgMTgxLCAxNDYsIDEsIDIyMywgNDIsIDE0NiwgMSwgMjEwLCAxNjgsIDE0NiwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ2LCAxLCAxNDksIDIzMiwgMTkxLCAxNDYsIDI1LCA1LCAxNDksIDE1NiwgMTQ2LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ2LCAyMSwgMjEwLCA4NiwgMTQ2LCAyMSwgMTExLCAxNDYsIDIxLCAxMDUsIDE0NiwgMjEsIDE1OCwgCisgICAgMTQ2LCAyMSwgMTYxLCAxNDYsIDIxLCAxOTAsIDE0NiwgMjEsIDE5NSwgMTQ2LCAyMSwgMTk5LCAxNDYsIDIxLCAxOTYsIAorICAgIDE0NiwgMjEsIDIwMSwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgMjMwLCAyMjksIDI0OCwgNiwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgCisgICAgMjMyLCAxMTQsIDI0OCwgNiwgMTQ2LCAyMjIsIDEyMCwgNzksIDE0NiwgMjIyLCAxMjAsIDUwLCAxNDYsIDI0OSwgMTA2LCAKKyAgICAyMjcsIDIwMSwgMTExLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTA1LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgCisgICAgMTU4LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTYxLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTIzLCAyMzMsIDIyLCAKKyAgICAyMTYsIDIwMiwgMjE2LCAxOTcsIDI0OCwgNTYsIDE0NiwgMjQ5LCAxMDYsIDI0OCwgNTcsIDIxOSwgMTIxLCAxNDYsIDIzNSwgCisgICAgMTY3LCAxNDYsIDI0MywgMTEwLCA3OSwgMTg1LCA1LCAyNTUsIDcsIDI1MSwgMjUxLCAxODUsIDUsIDI1MSwgMjUxLCAxODUsIAorICAgIDUsIDIxMywgMTQ3LCAxODUsIDEsIDYxLCAxODUsIDEsIDI1NSwgODIsIDE4NSwgMSwgNzQsIDE4NSwgMSwgMjM2LCA0MCwgCisgICAgMTg1LCAxLCA2OSwgMTg1LCAxLCAyMTQsIDExOCwgMTg1LCAxLCAyNDUsIDIxNywgMTg1LCAxLCAyNTQsIDIxMCwgMTg1LCAxLCAKKyAgICAyMjYsIDE4NywgMTg1LCAxLCAyNTMsIDIwMCwgMTg1LCAxLCAxNzYsIDE4NSwgMSwgMjM0LCAxMzgsIDE4NSwgMSwgMjQzLCAKKyAgICAxNDIsIDE4NSwgMSwgMjQzLCAwLCAxODUsIDEsIDIyOSwgODIsIDE4NSwgMSwgMjUxLCA0MSwgMTg1LCAxLCAyNTAsIDE2NSwgCisgICAgMTg1LCAxLCAyMzUsIDE0NywgMTg1LCAxLCAyMzUsIDEyMCwgMTg1LCAxLCAyMjcsIDE2OSwgMTg1LCAxLCAyMTUsIDE1NywgCisgICAgMTg1LCAxLCAyMTUsIDE0NSwgMTg1LCAxLCAyNDgsIDE0MywgMTg1LCAxLCAyNDgsIDEyNywgMTg1LCAxLCAyMjgsIDExNSwgCisgICAgMTg1LCAxLCAyMTcsIDEwNiwgMTg1LCAxLCAyMTYsIDIwOSwgMTg1LCAxLCAyNDgsIDIyOSwgMTg1LCAxLCAyNDgsIDMzLCAKKyAgICAxODUsIDEsIDE5OCwgMTg1LCAxLCAxOTEsIDE4NSwgMSwgMjI1LCAxNTAsIDE4NSwgMSwgMjUyLCAxOTksIDE4NSwgMSwgCisgICAgMjUyLCAyNiwgMTg1LCAxLCAxODYsIDE4NSwgMSwgMTkyLCAxODUsIDEsIDIwNSwgMTg1LCAxLCAyMzMsIDE0MSwgMTg1LCAxLCAKKyAgICAyMzIsIDE5MCwgMTg1LCAxLCAyMTQsIDI3LCAxODUsIDEsIDIyMCwgMTA0LCAxODUsIDEsIDIwNiwgMTg1LCAxLCAxNjIsIAorICAgIDE4NSwgNSwgMjI3LCAyMDksIDE4NSwgMjUsIDUsIDI1NSwgODIsIDE4NSwgMjUsIDUsIDc0LCAxODUsIDI1LCA1LCAyMzYsIAorICAgIDQwLCAxODUsIDI1LCA1LCA2OSwgMTg1LCAyNSwgNSwgMjE0LCAxMTgsIDE4NSwgMjUsIDUsIDI0NSwgMjE3LCAxODUsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTg1LCAyNSwgNSwgMjI2LCAxODcsIDE4NSwgMjUsIDUsIDI1MywgMjAwLCAxODUsIDUsIDIxMywgCisgICAgMTUyLCAxODUsIDUsIDIxNCwgMjE4LCAxODUsIDEsIDIzNCwgMTIxLCAxODUsIDEsIDI0MiwgMjMzLCAxODUsIDEsIDIxMCwgCisgICAgMTE2LCAxODUsIDEsIDIyMiwgMTgxLCAxODUsIDEsIDI0NCwgMjA0LCAxODUsIDIxLCAyMTAsIDg2LCAxODUsIDIxLCAxMTEsIAorICAgIDE4NSwgMjEsIDEwNSwgMTg1LCAyMSwgMTU4LCAxODUsIDIxLCAxNjEsIDE4NSwgMjEsIDE5MCwgMTg1LCAyMSwgMTk1LCAKKyAgICAxODUsIDIxLCAxOTksIDE4NSwgMjEsIDE5NiwgMTg1LCAyMSwgMjAxLCAxODUsIDIxNiwgNzUsIDE4NSwgMjU1LCA2LCAxODUsIAorICAgIDIzNSwgMTg1LCAxODUsIDIxNCwgMTQ2LCAxODUsIDI0NSwgMTg5LCAyMjYsIDE5MiwgMTg1LCA1LCAyMTEsIDc4LCAxNzEsIAorICAgIDUsIDI1MSwgNywgMTcxLCA1LCAyNTQsIDgzLCAxNzEsIDUsIDIxMywgMTQ3LCAxNzEsIDEsIDYxLCAxNzEsIDEsIDI1NSwgCisgICAgODIsIDE3MSwgMSwgNzQsIDE3MSwgMSwgMjM2LCA0MCwgMTcxLCAxLCA2OSwgMTcxLCAxLCAyMTQsIDExOCwgMTcxLCAxLCAKKyAgICAxNDksIDE1MywgMTcxLCAxLCAxNDksIDE1NiwgMTcxLCAyNSwgMjUxLCAxMCwgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgCisgICAgMjU0LCAyMTAsIDE3MSwgMjUsIDI1MSwgMTAsIDc4LCAxNzEsIDEsIDc4LCAxNzEsIDEsIDI1MywgMjAwLCAxNzEsIDEsIAorICAgIDE3NiwgMTcxLCAxLCAyMzQsIDEzOCwgMTcxLCAxLCAyNDMsIDE0MiwgMTcxLCAxLCAyNDMsIDAsIDE3MSwgMSwgMjI5LCA4MiwgCisgICAgMTcxLCAxLCAyNTEsIDQxLCAxNzEsIDEsIDI1MCwgMTY1LCAxNzEsIDEsIDIzNSwgMTQ3LCAxNzEsIDEsIDIzNSwgMTIwLCAKKyAgICAxNzEsIDEsIDIyNywgMTY5LCAxNzEsIDEsIDIxNSwgMTU3LCAxNzEsIDEsIDIxNSwgMTQ1LCAxNzEsIDEsIDI0OCwgMTQzLCAKKyAgICAxNzEsIDEsIDI0OCwgMTI3LCAxNzEsIDEsIDIyOCwgMTE1LCAxNzEsIDEsIDIxNywgMTA2LCAxNzEsIDEsIDIxNiwgMjA5LCAKKyAgICAxNzEsIDEsIDI0OCwgMjI5LCAxNzEsIDEsIDI0OCwgMzMsIDE3MSwgMSwgMTk4LCAxNzEsIDEsIDE5MSwgMTcxLCAxLCAyMjUsIAorICAgIDE1MCwgMTcxLCAxLCAyNTIsIDE5OSwgMTcxLCAxLCAyNTIsIDI2LCAxNzEsIDEsIDE4NiwgMTcxLCAxLCAxOTIsIDE3MSwgMSwgCisgICAgMjA1LCAxNzEsIDEsIDIzMywgMTQxLCAxNzEsIDEsIDIzMiwgMTkwLCAxNzEsIDEsIDIxNCwgMjcsIDE3MSwgMSwgMjIwLCAKKyAgICAxMDQsIDE3MSwgMSwgMjE4LCAyMjUsIDE3MSwgMSwgMjA2LCAxNzEsIDEsIDE2MiwgMTcxLCA1LCAyMjcsIDIwOSwgMTcxLCAKKyAgICA1LCAyNTMsIDE4MywgMTcxLCAyNSwgNSwgMjU1LCA4MiwgMTcxLCAyNSwgNSwgNzQsIDE3MSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDE3MSwgMjUsIDUsIDY5LCAxNzEsIDI1LCA1LCAyMTQsIDExOCwgMTcxLCAyNSwgNSwgMTQ5LCAxNTMsIDE3MSwgMjUsIDUsIAorICAgIDE0OSwgMjIyLCAxODIsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc2LCAxNzEsIDI1LCA1LCA3NiwgMTcxLCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc4LCAxNzEsIDI1LCA1LCA3OCwgMTcxLCAyNSwgNSwgMjUzLCAyMDAsIDE3MSwgCisgICAgNSwgMjEzLCAxNTIsIDE3MSwgMjI2LCAyMDgsIDE3MSwgMSwgMTQ5LCAyMjIsIDE4MiwgMTcxLCAxLCAxNDksIDIzMiwgMTkxLCAKKyAgICAxNzEsIDI1LCA1LCAxNDksIDE1NiwgMTcxLCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTcxLCAyMSwgMjEwLCA4NiwgMTcxLCAKKyAgICAyMSwgMTExLCAxNzEsIDIxLCAxMDUsIDE3MSwgMjEsIDE1OCwgMTcxLCAyMSwgMTYxLCAxNzEsIDIxLCAxOTAsIDE3MSwgMjEsIAorICAgIDE5NSwgMTcxLCAyMSwgMTk5LCAxNzEsIDIxLCAxOTYsIDE3MSwgMjEsIDIwMSwgMTcxLCAyNTUsIDMwLCA1MCwgMTcxLCAKKyAgICAyMjIsIDEyMCwgNTAsIDE1NywgNSwgMjUxLCA3LCAxNTcsIDUsIDI1NCwgODMsIDE1NywgNSwgMjEzLCAxNDcsIDE1NywgMSwgCisgICAgNjEsIDE1NywgMSwgMjU1LCA4MiwgMTU3LCAxLCA3NCwgMTU3LCAxLCAyMzYsIDQwLCAxNTcsIDEsIDY5LCAxNTcsIDEsIAorICAgIDIxNCwgMTE4LCAxNTcsIDEsIDE0OSwgMTUzLCAxNTcsIDEsIDE0OSwgMTU2LCAxNTcsIDEsIDc2LCAxNTcsIDEsIDI1NCwgCisgICAgMjEwLCAxNTcsIDEsIDc4LCAxNTcsIDEsIDI1MywgMjAwLCAxNTcsIDEsIDE3NiwgMTU3LCAxLCAyMzQsIDEzOCwgMTU3LCAxLCAKKyAgICAyNDMsIDE0MiwgMTU3LCAxLCAyNDMsIDAsIDE1NywgMSwgMjI5LCA4MiwgMTU3LCAxLCAyNTEsIDQxLCAxNTcsIDEsIDI1MCwgCisgICAgMTY1LCAxNTcsIDEsIDIzNSwgMTQ3LCAxNTcsIDEsIDIzNSwgMTIwLCAxNTcsIDEsIDIyNywgMTY5LCAxNTcsIDEsIDIxNSwgCisgICAgMTU3LCAxNTcsIDEsIDIxNSwgMTQ1LCAxNTcsIDEsIDI0OCwgMTQzLCAxNTcsIDEsIDI0OCwgMTI3LCAxNTcsIDEsIDIyOCwgCisgICAgMTE1LCAxNTcsIDEsIDIxNywgMTA2LCAxNTcsIDEsIDIxNiwgMjA5LCAxNTcsIDEsIDI0OCwgMjI5LCAxNTcsIDEsIDI0OCwgCisgICAgMzMsIDE1NywgMSwgMTk4LCAxNTcsIDEsIDE5MSwgMTU3LCAxLCAyMjUsIDE1MCwgMTU3LCAxLCAyNTIsIDE5OSwgMTU3LCAxLCAKKyAgICAyNTIsIDI2LCAxNTcsIDEsIDE4NiwgMTU3LCAxLCAxOTIsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTQxLCAxNTcsIDEsIAorICAgIDIzMiwgMTkwLCAxNTcsIDEsIDIxNCwgMjcsIDE1NywgMSwgMjIwLCAxMDQsIDE1NywgMSwgMjE4LCAyMjUsIDE1NywgMSwgCisgICAgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAyMjcsIDIwOSwgMTU3LCA1LCAyNTMsIDE4MywgMTU3LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTU3LCAyNSwgNSwgNzQsIDE1NywgMjUsIDUsIDIzNiwgNDAsIDE1NywgMjUsIDUsIDY5LCAxNTcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE1NywgMjUsIDUsIDc2LCAKKyAgICAxNTcsIDI1LCA1LCAyNTQsIDIxMCwgMTU3LCAyNSwgNSwgNzgsIDE1NywgMjUsIDUsIDI1MywgMjAwLCAxNTcsIDUsIDIxMywgCisgICAgMTUyLCAxNTcsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTU3LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDE1NywgMSwgMjIyLCAKKyAgICAxODEsIDE1NywgMSwgMjIzLCA0MiwgMTU3LCAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgyLCAxNTcsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDE1NywgMjUsIDUsIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNTcsIDIxLCAKKyAgICAyMTAsIDg2LCAxNTcsIDIxLCAxMTEsIDE1NywgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIAorICAgIDE5MCwgMTU3LCAyMSwgMTk1LCAxNTcsIDIxLCAxOTksIDE1NywgMjEsIDE5NiwgMTU3LCAyMSwgMjAxLCAxNTcsIDIzNSwgCisgICAgMTY3LCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxNTcsIDI0NCwgMTAsIDEyMywgMjQyLCAKKyAgICAzNCwgMTU3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMTksIDExOSwgMTU3LCAyNDQsIAorICAgIDEwLCAxMjMsIDI0NSwgMTk2LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjE5LCAxMTgsIDM2LCA1LCAyNTQsIDgzLCAzNiwgNSwgCisgICAgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgODIsIDM2LCAxLCA3NCwgMzYsIDEsIDIzNiwgNDAsIDM2LCAxLCAKKyAgICA2OSwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzYsIDM2LCAxLCAyNDUsIDIxNywgMzYsIDEsIDI1NCwgMjEwLCAzNiwgMSwgCisgICAgNzgsIDM2LCAxLCAyMjYsIDE4NywgMzYsIDEsIDI1MywgMjAwLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA4MiwgMzYsIDEsIAorICAgIDI1MSwgNDEsIDM2LCAxLCAyMzUsIDE0NywgMzYsIDEsIDIyNywgMTY5LCAzNiwgMSwgMjE1LCAxNTcsIDM2LCAxLCAyMjgsIAorICAgIDExNSwgMzYsIDEsIDIxNywgMTA2LCAzNiwgMSwgMTk4LCAzNiwgMSwgMjI4LCA5NywgMzYsIDEsIDE5MSwgMzYsIDEsIDE4NiwgCisgICAgMzYsIDEsIDE5MiwgMzYsIDEsIDIwNSwgMzYsIDEsIDIyMiwgMTgxLCAzNiwgMSwgMjMzLCAxNDEsIDM2LCAxLCAyMzIsIAorICAgIDE5MCwgMzYsIDEsIDIzMiwgMTgxLCAzNiwgMSwgMjE0LCAyNywgMzYsIDEsIDIyMCwgMTA0LCAzNiwgMSwgMjE4LCAyMjUsIAorICAgIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgMjU1LCA4MiwgMzYsIDI1LCA1LCA3NCwgMzYsIDI1LCA1LCAKKyAgICAyMzYsIDQwLCAzNiwgMjUsIDUsIDY5LCAzNiwgMjUsIDUsIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIAorICAgIDI0NSwgMjE3LCAzNiwgMjUsIDUsIDI1NCwgMjEwLCAzNiwgMjUsIDUsIDc4LCAzNiwgMjUsIDUsIDIyNiwgMTg3LCAzNiwgCisgICAgMjUsIDUsIDI1MywgMjAwLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAyMjYsIDIwOCwgMzYsIDI1MywgMjAxLCAyMzMsIDI5LCAKKyAgICA3OSwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMSwgMzYsIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgCisgICAgMzYsIDIxLCAxOTAsIDM2LCAyMSwgMTk1LCAzNiwgMjEsIDE5OSwgMzYsIDIxLCAxOTYsIDM2LCAyMSwgMjAxLCAzNiwgNTQsIAorICAgIDIxNiwgMjQ4LCAzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDM2LCA1NCwgMTIzLCAyMTYsIDE0OCwgMzYsIDI0OCwgMTU0LCA1MCwgCisgICAgMzYsIDIzMCwgMTQwLCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAzNiwgMjQ4LCA5NSwgNTAsIDM2LCAyNDksIDE0NywgNTAsIDM2LCAKKyAgICAyNTMsIDI0NiwgNzIsIDUwLCAzNiwgMjIyLCAxMjAsIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MSwgNywgMTQ4LCA1LCAKKyAgICAyNTQsIDgzLCAxNDgsIDUsIDIxMywgMTQ3LCAxNDgsIDEsIDYxLCAxNDgsIDEsIDI1NSwgODIsIDE0OCwgMSwgNzQsIDE0OCwgCisgICAgMSwgMjM2LCA0MCwgMTQ4LCAxLCA2OSwgMTQ4LCAxLCAyMTQsIDExOCwgMTQ4LCAxLCAxNDksIDE1MywgMTQ4LCAxLCAxNDksIAorICAgIDE1NiwgMTQ4LCAxLCA3NiwgMTQ4LCAxLCAyNDUsIDIxNywgMTQ4LCAxLCAyNTQsIDIxMCwgMTQ4LCAxLCA3OCwgMTQ4LCAxLCAKKyAgICAyMjYsIDE4NywgMTQ4LCAxLCAyNTMsIDIwMCwgMTQ4LCAxLCAxNzYsIDE0OCwgMSwgMjM0LCAxMzgsIDE0OCwgMSwgMjQzLCAKKyAgICAxNDIsIDE0OCwgMSwgMjQzLCAwLCAxNDgsIDEsIDIyOSwgODIsIDE0OCwgMSwgMjUxLCA0MSwgMTQ4LCAxLCAyNTAsIDE2NSwgCisgICAgMTQ4LCAxLCAyMzUsIDE0NywgMTQ4LCAxLCAyMzUsIDEyMCwgMTQ4LCAxLCAyMjcsIDE2OSwgMTQ4LCAxLCAyMTUsIDE1NywgCisgICAgMTQ4LCAxLCAyMTUsIDE0NSwgMTQ4LCAxLCAyNDgsIDE0MywgMTQ4LCAxLCAyNDgsIDEyNywgMTQ4LCAxLCAyMjgsIDExNSwgCisgICAgMTQ4LCAxLCAyMTcsIDEwNiwgMTQ4LCAxLCAyMTYsIDIwOSwgMTQ4LCAxLCAyNDgsIDIyOSwgMTQ4LCAxLCAyNDgsIDMzLCAKKyAgICAxNDgsIDEsIDE5OCwgMTQ4LCAxLCAxOTEsIDE0OCwgMSwgMjI1LCAxNTAsIDE0OCwgMSwgMjUyLCAxOTksIDE0OCwgMSwgCisgICAgMjUyLCAyNiwgMTQ4LCAxLCAxODYsIDE0OCwgMSwgMTkyLCAxNDgsIDEsIDIwNSwgMTQ4LCAxLCAyMjIsIDE4MSwgMTQ4LCAxLCAKKyAgICAyMzMsIDE0MSwgMTQ4LCAxLCAyMzIsIDE5MCwgMTQ4LCAxLCAyMTQsIDI3LCAxNDgsIDEsIDIyMCwgMTA0LCAxNDgsIDEsIAorICAgIDIxOCwgMjI1LCAxNDgsIDEsIDIwNiwgMTQ4LCAxLCAxNjIsIDE0OCwgNSwgMjUzLCAxODMsIDE0OCwgMjUsIDUsIDI1NSwgCisgICAgODIsIDE0OCwgMjUsIDUsIDc0LCAxNDgsIDI1LCA1LCAyMzYsIDQwLCAxNDgsIDI1LCA1LCA2OSwgMTQ4LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE0OCwgMjUsIDUsIDE0OSwgMTUzLCAxNDgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxNDgsIDI1LCA1LCA3NiwgCisgICAgMTQ4LCAyNSwgNSwgMjQ1LCAyMTcsIDE0OCwgMjUsIDUsIDI1NCwgMjEwLCAxNDgsIDI1LCA1LCA3OCwgMTQ4LCAyNSwgNSwgCisgICAgMjI2LCAxODcsIDE0OCwgMjUsIDUsIDI1MywgMjAwLCAxNDgsIDUsIDIxMywgMTUyLCAxNDgsIDIzMywgMjksIDc5LCAxNDgsIAorICAgIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTQ4LCAxLCAyMTUsIDE4NCwgMTQ4LCAxLCAyNDYsIDQ2LCAxNDgsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE0OCwgMSwgMTQ5LCAyMzIsIDE5MSwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTYsIDE0OCwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE0OCwgMjEsIDIxMCwgODYsIDE0OCwgMjEsIDExMSwgMTQ4LCAyMSwgMTA1LCAxNDgsIDIxLCAxNTgsIAorICAgIDE0OCwgMjEsIDE2MSwgMTQ4LCAyMSwgMTkwLCAxNDgsIDIxLCAxOTUsIDE0OCwgMjEsIDE5OSwgMTQ4LCAyMSwgMTk2LCAKKyAgICAxNDgsIDIxLCAyMDEsIDE0OCwgMjQ0LCAxMCwgMjEsIDIxMCwgODcsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIAorICAgIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgCisgICAgMTEzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMzQsIDMxLCAyMjYsIAorICAgIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgCisgICAgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMTMsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAKKyAgICAyMSwgMTM0LCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIAorICAgIDgzLCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgODIsIDE2NSwgMSwgNzQsIDE2NSwgMSwgCisgICAgMjM2LCA0MCwgMTY1LCAxLCA2OSwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAxNDksIDE1MywgMTY1LCAxLCAxNDksIAorICAgIDE1NiwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyNDUsIDIxNywgMTY1LCAxLCAyNTQsIDIxMCwgMTY1LCAxLCA3OCwgMTY1LCAxLCAKKyAgICAyMjYsIDE4NywgMTY1LCAxLCAyNTMsIDIwMCwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgMjM0LCAxMzgsIDE2NSwgMSwgMjQzLCAKKyAgICAxNDIsIDE2NSwgMSwgMjQzLCAwLCAxNjUsIDEsIDIyOSwgODIsIDE2NSwgMSwgMjUxLCA0MSwgMTY1LCAxLCAyNTAsIDE2NSwgCisgICAgMTY1LCAxLCAyMzUsIDE0NywgMTY1LCAxLCAyMzUsIDEyMCwgMTY1LCAxLCAyMjcsIDE2OSwgMTY1LCAxLCAyMTUsIDE1NywgCisgICAgMTY1LCAxLCAyMTUsIDE0NSwgMTY1LCAxLCAyNDgsIDE0MywgMTY1LCAxLCAyNDgsIDEyNywgMTY1LCAxLCAyMjgsIDExNSwgCisgICAgMTY1LCAxLCAyMTcsIDEwNiwgMTY1LCAxLCAyMTYsIDIwOSwgMTY1LCAxLCAyNDgsIDIyOSwgMTY1LCAxLCAyNDgsIDMzLCAKKyAgICAxNjUsIDEsIDE5OCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjI1LCAxNTAsIDE2NSwgMSwgMjUyLCAxOTksIDE2NSwgMSwgCisgICAgMjUyLCAyNiwgMTY1LCAxLCAxODYsIDE2NSwgMSwgMTkyLCAxNjUsIDEsIDIwNSwgMTY1LCAxLCAyMjIsIDE4MSwgMTY1LCAxLCAKKyAgICAyMzMsIDE0MSwgMTY1LCAxLCAyMzIsIDE5MCwgMTY1LCAxLCAyMTQsIDI3LCAxNjUsIDEsIDIyMCwgMTA0LCAxNjUsIDEsIAorICAgIDIxOCwgMjI1LCAxNjUsIDEsIDIwNiwgMTY1LCAxLCAxNjIsIDE2NSwgNSwgMjI3LCAyMDksIDE2NSwgNSwgMjUzLCAxODMsIAorICAgIDE2NSwgMjUsIDUsIDI1NSwgODIsIDE2NSwgMjUsIDUsIDc0LCAxNjUsIDI1LCA1LCAyMzYsIDQwLCAxNjUsIDI1LCA1LCA2OSwgCisgICAgMTY1LCAyNSwgNSwgMjE0LCAxMTgsIDE2NSwgMjUsIDUsIDE0OSwgMTUzLCAxNjUsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNjUsIDI1LCA1LCA3NiwgMTY1LCAyNSwgNSwgMjQ1LCAyMTcsIDE2NSwgMjUsIDUsIDI1NCwgMjEwLCAxNjUsIDI1LCA1LCAKKyAgICA3OCwgMTY1LCAyNSwgNSwgMjI2LCAxODcsIDE2NSwgMjUsIDUsIDI1MywgMjAwLCAxNjUsIDUsIDIxMywgMTUyLCAxNjUsIAorICAgIDIzMywgMjksIDc5LCAxNjUsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTY1LCAxLCAyNDQsIDIwNCwgMTY1LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNjUsIDEsIDE0OSwgMjMyLCAxOTEsIDE2NSwgMjUsIDUsIDE0OSwgMTU2LCAxNjUsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNjUsIDIxLCAyMTAsIDg2LCAxNjUsIDIxLCAxMTEsIDE2NSwgMjEsIDEwNSwgMTY1LCAyMSwgMTU4LCAKKyAgICAxNjUsIDIxLCAxNjEsIDE2NSwgMjEsIDE5MCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAxOTksIDE2NSwgMjEsIDE5NiwgCisgICAgMTY1LCAyMSwgMjAxLCAxNjUsIDUsIDIzNSwgMTA4LCAxNjUsIDUsIDIxNCwgMTYxLCAxMzYsIDUsIDI1NCwgODMsIDEzNiwgCisgICAgNSwgMjEzLCAxNDcsIDEzNiwgMSwgNjEsIDEzNiwgMSwgMjU1LCA4MiwgMTM2LCAxLCA3NCwgMTM2LCAxLCAyMzYsIDQwLCAKKyAgICAxMzYsIDEsIDY5LCAxMzYsIDEsIDIxNCwgMTE4LCAxMzYsIDEsIDE0OSwgMTUzLCAxMzYsIDEsIDE0OSwgMTU2LCAxMzYsIDEsIAorICAgIDc2LCAxMzYsIDEsIDI0NSwgMjE3LCAxMzYsIDEsIDI1NCwgMjEwLCAxMzYsIDEsIDc4LCAxMzYsIDEsIDIyNiwgMTg3LCAKKyAgICAxMzYsIDEsIDI1MywgMjAwLCAxMzYsIDEsIDE3NiwgMTM2LCAxLCAyMzQsIDEzOCwgMTM2LCAxLCAyNDMsIDE0MiwgMTM2LCAKKyAgICAxLCAyNDMsIDAsIDEzNiwgMSwgMjI5LCA4MiwgMTM2LCAxLCAyNTEsIDQxLCAxMzYsIDEsIDI1MCwgMTY1LCAxMzYsIDEsIAorICAgIDIzNSwgMTQ3LCAxMzYsIDEsIDIzNSwgMTIwLCAxMzYsIDEsIDIyNywgMTY5LCAxMzYsIDEsIDIxNSwgMTU3LCAxMzYsIDEsIAorICAgIDIxNSwgMTQ1LCAxMzYsIDEsIDI0OCwgMTQzLCAxMzYsIDEsIDI0OCwgMTI3LCAxMzYsIDEsIDIyOCwgMTE1LCAxMzYsIDEsIAorICAgIDIxNywgMTA2LCAxMzYsIDEsIDIxNiwgMjA5LCAxMzYsIDEsIDI0OCwgMjI5LCAxMzYsIDEsIDI0OCwgMzMsIDEzNiwgMSwgCisgICAgMTk4LCAxMzYsIDEsIDIyOCwgOTcsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIyNSwgMTUwLCAxMzYsIDEsIDI1MiwgMTk5LCAKKyAgICAxMzYsIDEsIDI1MiwgMjYsIDEzNiwgMSwgMTg2LCAxMzYsIDEsIDE5MiwgMTM2LCAxLCAyMDUsIDEzNiwgMSwgMjIyLCAxODEsIAorICAgIDEzNiwgMSwgMjMzLCAxNDEsIDEzNiwgMSwgMjMyLCAxOTAsIDEzNiwgMSwgMjMyLCAxODEsIDEzNiwgMSwgMjE0LCAyNywgCisgICAgMTM2LCAxLCAyMjAsIDEwNCwgMTM2LCAxLCAyMTgsIDIyNSwgMTM2LCAxLCAyMDYsIDEzNiwgMSwgMTYyLCAxMzYsIDEsIAorICAgIDIxNSwgMTI2LCAxMzYsIDUsIDI1MywgMTgzLCAxMzYsIDI1LCA1LCAyNTUsIDgyLCAxMzYsIDI1LCA1LCA3NCwgMTM2LCAyNSwgCisgICAgNSwgMjM2LCA0MCwgMTM2LCAyNSwgNSwgNjksIDEzNiwgMjUsIDUsIDIxNCwgMTE4LCAxMzYsIDI1LCA1LCAxNDksIDE1MywgCisgICAgMTM2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAyNSwgNSwgNzYsIDEzNiwgMjUsIDUsIDI0NSwgMjE3LCAxMzYsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTM2LCAyNSwgNSwgNzgsIDEzNiwgMjUsIDUsIDIyNiwgMTg3LCAxMzYsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTM2LCA1LCAyMTMsIDE1MiwgMTM2LCAxLCA1OSwgMjIzLCA3NiwgMTM2LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDEzNiwgCisgICAgMSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAxLCAxNDksIDIzMiwgMTkxLCAxMzYsIDI1LCA1LCAxNDksIDE1NiwgMTM2LCAyNSwgCisgICAgNSwgMTQ5LCAyMzIsIDE5MSwgMTM2LCAyMSwgMjEwLCA4NiwgMTM2LCAyMSwgMTExLCAxMzYsIDIxLCAxMDUsIDEzNiwgMjEsIAorICAgIDE1OCwgMTM2LCAyMSwgMTYxLCAxMzYsIDIxLCAxOTAsIDEzNiwgMjEsIDE5NSwgMTM2LCAyMSwgMTk5LCAxMzYsIDIxLCAKKyAgICAxOTYsIDEzNiwgMjEsIDIwMSwgMTM2LCA1NCwgMjE2LCAyNDgsIDEzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDEzNiwgNTQsIAorICAgIDEyMywgMjE2LCAxNDgsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxMzYsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgCisgICAgMTM2LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDEzNiwgMjQ4LCAxNTgsIDc5LCAxMzYsIDEsIDI1MCwgMTA3LCAyMjgsIAorICAgIDExNiwgMTM2LCAxLCAyNTAsIDEwNywgMjMwLCAzMCwgMTM2LCAxLCAyNTAsIDEwNywgMjIyLCAxODIsIDEzNiwgMSwgMjUwLCAKKyAgICAxMDcsIDE1NiwgMTM2LCAxLCAyNTAsIDEwNywgMjMyLCAxOTEsIDEzNiwgMSwgMjUwLCAxMDcsIDIzNSwgMjksIDE3NSwgNSwgCisgICAgMjU0LCA4MiwgMTc1LCA1LCAyMTMsIDE0NiwgMTc1LCAxLCAyNTMsIDE3MywgMTc1LCAxLCAyNTUsIDM2LCAxNzUsIDEsIAorICAgIDI1NCwgMjMyLCAxNzUsIDEsIDI1NCwgMjQ3LCAxNzUsIDEsIDIzNSwgMTU3LCAxNzUsIDEsIDIzNiwgMzksIDE3NSwgMSwgCisgICAgMjE0LCAxMTAsIDE3NSwgMSwgMjE0LCAxMTIsIDE3NSwgMSwgMjM1LCAxODAsIDE3NSwgMSwgMjM1LCAxODEsIDE3NSwgMSwgCisgICAgMjM2LCAyNSwgMTc1LCAxLCAyMzYsIDI3LCAxNzUsIDEsIDI0NSwgMjUsIDE3NSwgMSwgMjQ1LCAyMTIsIDE3NSwgMSwgMjU0LCAKKyAgICAxOTcsIDE3NSwgMSwgMjI2LCAxMTIsIDE3NSwgMSwgMjI2LCAxODEsIDE3NSwgMSwgMjUzLCAxODYsIDE3NSwgMSwgMjU0LCAKKyAgICAxNTQsIDIzNCwgMTkzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMzQsIDE5MywgMTc1LCAxLCAyNTQsIDE1NCwgMjQzLCA4OSwgCisgICAgMTc1LCAxLCAyMzEsIDIxNCwgMjQzLCA4OSwgMTc1LCAxLCAyMzQsIDIzNSwgMjI5LCAyMjcsIDE3NSwgMSwgMjIxLCAyMzgsIAorICAgIDI0MywgODksIDE3NSwgMSwgMjU0LCAxNTQsIDI1MCwgMjI0LCAxNzUsIDEsIDIzMSwgMjE0LCAyNTAsIDIyNCwgMTc1LCAxLCAKKyAgICAyNTQsIDE1NCwgMjM1LCAxMzMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNSwgMTMzLCAxNzUsIDEsIDIxNywgOTksIDIyOSwgCisgICAgMjI3LCAxNzUsIDEsIDIxNywgOTksIDIyMSwgMjM3LCAyMjksIDIyOCwgMTc1LCAxLCAyMjEsIDIzOCwgMjM1LCAxMzMsIAorICAgIDE3NSwgMSwgMjU0LCAxNTQsIDIxNSwgMTUzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTUsIDE1MywgMTc1LCAxLCAyNTQsIDE1NCwgCisgICAgMjQ4LCAxMzQsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTM0LCAxNzUsIDEsIDIzMCwgNTgsIDIyOSwgMTg1LCAxNzUsIDEsIAorICAgIDIyMSwgMjM4LCAyNDgsIDEzNCwgMTc1LCAxLCAyNTQsIDE1NCwgMjE3LCAzMSwgMTc1LCAxLCAyMzEsIDIxNCwgMjE3LCAzMSwgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTUyLCAxNzUsIDEsIDI0OCwgMTgyLCAKKyAgICAyMjksIDE4NSwgMTc1LCAxLCAyMjEsIDIzOCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjU0LCAxNTQsIDIyNSwgMjMyLCAxNzUsIDEsIAorICAgIDIzMSwgMjE0LCAyMjUsIDIzMiwgMTc1LCAxLCAyNTQsIDE1NCwgMjUyLCAxMjAsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MiwgCisgICAgMTIwLCAxNzUsIDEsIDIzMSwgMTM2LCAxNzUsIDEsIDI1NCwgMTM5LCAyNTIsIDEyMCwgMTc1LCAxLCAyMTEsIDUxLCAxNzUsIAorICAgIDEsIDIyMywgMTM2LCAxNzUsIDEsIDI0OCwgMTgyLCAyMzMsIDczLCAxNzUsIDEsIDIxNCwgMSwgMTc1LCAxLCAyMTcsIDk5LCAKKyAgICAyMjEsIDIxMiwgMTc1LCAxLCAyMzAsIDU4LCAyMjEsIDIxMiwgMTc1LCAxLCAyNDgsIDE4MiwgMjIxLCAyMTIsIDE3NSwgMSwgCisgICAgMjQxLCAyNDksIDE3NSwgMSwgMjMwLCA1OCwgMjMzLCA3MywgMTc1LCAxLCAyNDQsIDE2NCwgMTc1LCA1LCAyNTQsIDE4NiwgCisgICAgMTc1LCAyNSwgNSwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyNTQsIDI0OSwgMTc1LCAyNSwgNSwgMjQ3LCAKKyAgICAyMzYsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjM1LCAxNzcsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMzUsIAorICAgIDE3NywgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDIyNiwgOTIsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMjYsIDkyLCAxNzUsIAorICAgIDI1LCA1LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgMjM0LCAyMSwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNCwgMjEsIDE3NSwgCisgICAgMjUsIDUsIDIzNCwgMjMsIDI0OCwgNzUsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI1NCwgMjQyLCAxNzUsIDI1LCAKKyAgICA1LCAyMzQsIDIyLCAyNDIsIDU0LCAyNDcsIDIzNiwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIAorICAgIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgCisgICAgMjQ3LCAyMzYsIDI0MywgODgsIDE3NSwgMjI0LCAxNDQsIDIzMywgMjEzLCAxNjgsIDEzNSwgMjM0LCAzNSwgMjM0LCAyNTIsIAorICAgIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMzQsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDUsIDE2OCwgMTM1LCAKKyAgICAyMzQsIDExMiwgMjM0LCAxMDEsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDksIDE2OCwgMTM1LCAyMzQsIDExMiwgCisgICAgMjIzLCAxNTcsIDE2OCwgMTM1LCAyMjksIDEwLCAyMjgsIDI1MywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU1LCAxNjgsIAorICAgIDEzNSwgMjUwLCA5NSwgMjUwLCAxMDMsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDE1NCwgMTY4LCAxMzUsIDIxOSwgNjEsIAorICAgIDIxOSwgNjAsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDkxLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIAorICAgIDEzNSwgMjQ3LCAxNTQsIDI1MCwgMTYyLCAxNjgsIDEzNSwgMjE2LCA0MywgMjI1LCAyNDIsIDE2OCwgMTM1LCAyMTYsIDE1OCwgCisgICAgMjE2LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI5LCAyMDYsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI1LCAxMTQsIAorICAgIDE2OCwgMTM1LCAyMjgsIDgwLCAyMjksIDEwMywgMTY4LCAxMzUsIDI0NywgMTU0LCAyNDgsIDc2LCAxNjgsIDEzNSwgMjE2LCAKKyAgICA0MywgMjE3LCA1NiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDEzMiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDIwNSwgCisgICAgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDE1NSwgMTY4LCAxMzUsIDIyOCwgODAsIDIyNywgMjQyLCAxNjgsIDEzNSwgMjUxLCAKKyAgICAyMTQsIDI1MiwgMTcyLCAxNjgsIDEzNSwgMjI1LCAyMCwgMjI1LCA0NSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjUsIDExNiwgCisgICAgMTY4LCAxMzUsIDI0NCwgNTIsIDI0NCwgMjA0LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTQ0LCAxNjgsIDEzNSwgMjQ0LCAKKyAgICA1MiwgMjQ0LCAxODEsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjIxLCAyNDksIDE2OCwgMTM1LCAyMzAsIDE2NywgMTg2LCAxNjgsIAorICAgIDEzNSwgMjEwLCAyNDUsIDIxMSwgNzksIDE2OCwgMTM1LCAyMjIsIDIxNCwgMjIyLCAxNDEsIDE2OCwgMTM1LCAyMjIsIDE0MiwgCisgICAgMTY4LCAxMzUsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMTY4LCAxMzUsIDIzMiwgMTAzLCAxNjgsIDEzNSwgMjExLCAyMjgsIAorICAgIDIxMiwgNjEsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDgsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDExNiwgMTY4LCAKKyAgICAxMzUsIDIxOSwgNjEsIDIxOCwgODMsIDE2OCwgMTM1LCAyNDEsIDc2LCAyNDEsIDE2NiwgMTY4LCAxMzUsIDIzMiwgMTYzLCAKKyAgICAyNTAsIDc2LCAxNjgsIDEzNSwgMTQ0LCAyNTQsIDEyMywgMTY4LCAxMzUsIDI0MSwgNzYsIDIyOCwgNzUsIDE2OCwgMTM1LCAKKyAgICAyMjYsIDcyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDYxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0MiwgMjQsIDE2OCwgMTM1LCAKKyAgICAyMjEsIDIzMiwgMjU1LCA4MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDE0NCwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NCwgCisgICAgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMzYsIDQwLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMjE0LCAxNjgsIDEzNSwgMjIxLCAKKyAgICAyMzIsIDIxNCwgMjEyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDY5LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMTE4LCAxNjgsIAorICAgIDEzNSwgMjI1LCAxMjcsIDE2OCwgMjQ5LCAxMDYsIDE2LCAyNTIsIDE3MywgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NiwgMTY4LCAKKyAgICAxMzUsIDIyMSwgMjMyLCAyNTQsIDI1MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3OCwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIAorICAgIDIxMSwgMjMxLCAyMDMsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAyMTEsIDIzMSwgMjA0LCAxNjgsIDEzNSwgMjMzLCAKKyAgICAxMTIsIDE2OCwgMTM1LCAyMzEsIDIwMCwgMTY4LCAxMzUsIDIzMSwgMjAxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0NSwgCisgICAgMTg4LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNiwgMTU3LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNSwgMjI5LCAxNjgsIAorICAgIDEzNSwgMjMxLCAyMDksIDI1MCwgMTQzLCAxNjgsIDEzNSwgMjE2LCAxOTksIDE2OCwgMTM1LCAyMjgsIDIxMCwgMTY4LCAKKyAgICAxMzUsIDIxMSwgNzMsIDE2OCwgMTM1LCAyNDQsIDQzLCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTEsIDE2OCwgMjEsIAorICAgIDEwNSwgMTY4LCAyMSwgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE5MCwgMTY4LCAyMSwgMTk1LCAxNjgsIDIxLCAKKyAgICAxOTksIDE2OCwgMjEsIDE5NiwgMTY4LCAyMSwgMjAxLCAxNjgsIDEzNSwgMjU0LCAxMTksIDE2OCwgMTM1LCAyMzQsIDExMCwgCisgICAgMjA5LCAyMDksIDEsIDIzNCwgMzQsIDIwOSwgMjA5LCAxLCAyMzQsIDExMiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIzNCwgCisgICAgMTEyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI5LCA5LCAyMDksIDIwOSwgMSwgMjQ5LCAyNDYsIDIwOSwgMjA5LCAxLCAKKyAgICAyMTksIDYxLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAxLCAyNDcsIDE1MywgMjA5LCAyMDksIAorICAgIDEsIDExMiwgMjA5LCAyMDksIDEsIDIxNiwgMTU4LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxNywgNjMsIAorICAgIDIwOSwgMjA5LCAxLCAyMjgsIDc5LCAyMDksIDIwOSwgMSwgMjUxLCAyMTMsIDIwOSwgMjA5LCAxLCAyMjUsIDE5LCAyMDksIAorICAgIDIwOSwgMSwgMjI1LCAxMjUsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgCisgICAgMjI1LCAxMjUsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjMwLCAxNjYsIAorICAgIDIwOSwgMjA5LCAxLCAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMjA5LCAyMDksIDEsIDIzMiwgCisgICAgMTYzLCAyMzIsIDEyNywgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA2MSwgMjE4LCAzNiwgMjA5LCAKKyAgICAyMDksIDEsIDI0MSwgNzYsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCA3OCwgMjA5LCAyMDksIDEsIDI0MSwgNzYsIDIxNywgNjMsIAorICAgIDIwOSwgMjA5LCAyNDUsIDE3MSwgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwOSwgMjM0LCAKKyAgICAyNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA4MiwgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDE0NCwgMjA5LCAyMDksIDI1LCAKKyAgICA1LCA3NCwgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDQwLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDY5LCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgCisgICAgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIDE5LCAyMDksIDIwOSwgMjIwLCAxNDcsIDUsIDIzMiwgMTYyLCAyMDksIDIwOSwgMjIwLCAKKyAgICAxNDcsIDUsIDIyNywgMTM4LCAyMDksIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMjAzLCAyMDksIAorICAgIDIwOSwgMjUsIDUsIDc4LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTc1LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAyMDksIDIwOSwgMjM0LCAzNSwgMjMzLCAxNDEsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyNTAsIDIzMSwgMjA5LCAyMDksIDI1MSwgMTIsIDc5LCAyMDksIDIwOSwgMjI4LCAyMTksIDIwOSwgCisgICAgMjA5LCAyMSwgMjEwLCA4NiwgMjA5LCAyMDksIDIxLCAxMTEsIDIwOSwgMjA5LCAyMSwgMTA1LCAyMDksIDIwOSwgMjEsIAorICAgIDE1OCwgMjA5LCAyMDksIDIxLCAxNjEsIDIwOSwgMjA5LCAyMSwgMTkwLCAyMDksIDIwOSwgMjEsIDE5NSwgMjA5LCAyMDksIAorICAgIDIxLCAxOTksIDIwOSwgMjA5LCAyMSwgMTk2LCAyMDksIDIwOSwgMjEsIDIwMSwgMjA5LCAyMDksIDI0MSwgNzYsIDIyOCwgCisgICAgNzksIDIwOSwgMjA5LCAyNDEsIDc2LCAyMzAsIDE2NiwgMjA5LCAyMDksIDEsIDIzNCwgMTEzLCAyNDIsIDE4MSwgMjA5LCAKKyAgICAyMDksIDEsIDIzNCwgMTEzLCAyMjcsIDEzOCwgNjMsIDMsIDIyNiwgMjA4LCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjE1LCAxOTAsIDYxLCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAyMzAsIDI1MywgMjU1LCAxNjgsIAorICAgIDIyMiwgMjE4LCAyNTIsIDg1LCAxODYsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjQyLCAxMjIsIDIxNSwgMTc0LCAxODYsIDYzLCAxNjQsIDY1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMzEsIDk4LCAxODYsIDYzLCAKKyAgICAxNjQsIDI1MCwgNCwgMjExLCAwLCAyMzAsIDI1MywgMjIwLCAxMTEsIDE4NiwgNjMsIDE2NCwgMjUwLCAyNDcsIDIxMSwgMCwgCisgICAgMjMwLCAyNTMsIDIyNSwgMTE1LCAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIxMSwgMCwgMjMwLCAyNTMsIDIxNSwgMTc0LCAKKyAgICAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIyMSwgMjEwLCAyMjAsIDk3LCA2MywgMTY0LCAyNTEsIDEzNiwgMjExLCAwLCAyMzAsIAorICAgIDI1MiwgNjMsIDE2NCwgMjUxLCAyMzEsIDIyMCwgNSwgMjExLCAwLCAyMzAsIDI1MiwgNjMsIDE2NCwgMjM1LCAyMDQsIDIxNSwgCisgICAgMTczLCA2MywgMTY0LCAyNDgsIDY5LCAyMTUsIDE3NCwgMjUxLCAxMzUsIDYzLCAxNjQsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyNywgMTQzLCAyMjAsIDk3LCA2MywgMTY0LCAyMTUsIDE3NCwgMjIwLCA5NywgNjMsIDE2NCwgMjI3LCAxNDMsIDIxNSwgCisgICAgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjIsIDIzOSwgMjUwLCAxMzAsIDIxOCwgMjM4LCAyMjAsIDk3LCA2MywgMTY0LCAKKyAgICAyMjMsIDQ1LCAyNDIsIDE1MywgMjIwLCA5NywgNjMsIDE2NCwgMjUwLCAyNDcsIDI1NSwgMTcyLCAyMjIsIDE0NiwgMjMxLCAKKyAgICA5NywgMjAwLCAyNTEsIDE1LCA2MywgMTY0LCAyNDIsIDEyMiwgMjE1LCAxNzMsIDYzLCAyMzIsIDE1MCwgNSwgMjUwLCAxNjMsIAorICAgIDIyMiwgMTQ1LCA2MywgMjMyLCAxNTAsIDUsIDIzMywgMiwgMjIyLCAxNDUsIDYzLCAyNTMsIDIyMCwgNSwgMjIwLCAxMDcsIAorICAgIDI0MywgNzIsIDI1NSwgMTczLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyNTUsIDE3MCwgMTkxLCA2MywgMjUzLCAKKyAgICAyMjAsIDUsIDIyMSwgMTg0LCAyMTUsIDE2OSwgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQzLCA3MSwgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxODMsIDYzLCA1LCAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MiwgMTIzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDMsIDcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDIsIDE4MywgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjIzLCAxMzMsIDIyOSwgMjIzLCA2MywgMjEsIDIxMCwgODYsIDYzLCAyMSwgMTExLCA2MywgCisgICAgMjEsIDEwNSwgNjMsIDIxLCAxNTgsIDYzLCAyMSwgMTYxLCA2MywgMjEsIDE5MCwgNjMsIDIxLCAxOTUsIDYzLCAyMSwgMTk5LCAKKyAgICA2MywgMjEsIDE5NiwgNjMsIDIxLCAyMDEsIDYzLCAyMSwgMTYzLCAxMTEsIDYzLCAyMSwgMTYzLCAxMDUsIDYzLCAyMSwgCisgICAgMTYzLCAxNTgsIDYzLCAyMSwgMTYzLCAxNjEsIDYzLCAyMSwgMTYzLCAxOTAsIDYzLCAyMSwgMTYzLCAxOTUsIDYzLCAyMSwgCisgICAgMTYzLCAxOTksIDYzLCAyMSwgMTYzLCAxOTYsIDYzLCAyMSwgMTYzLCAyMDEsIDYzLCAyMSwgMTYzLCAyMTAsIDg2LCA2MywgCisgICAgMTY0LCAyNTEsIDEzOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDIyOSwgNzMsIDI1MSwgNzYsIDIyNywgMTUzLCAyMTAsIDI1LCAKKyAgICA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAxNSwgNjMsIAorICAgIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjIwLCAxMDgsIDIyMiwgMTQ1LCA2MywgMTY0LCAyNTAsIDE0MCwgMjMwLCAyNTIsIAorICAgIDYzLCAxNjQsIDIxNSwgMTg1LCAyNTUsIDE2OSwgNjMsIDE2NCwgMjQyLCAxMDcsIDIyMiwgMTQ2LCAyNDIsIDcwLCA2MywgCisgICAgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzYsIDYzLCAxNjQsIDI1NCwgMTI0LCAyMzQsIDEyOSwgMjQyLCA3MCwgCisgICAgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDc2LCA2MywgNSwgMjExLCA2NSwgMjE1LCAxNzIsIDYzLCA1LCAKKyAgICAyMzEsIDE3MiwgMjE1LCAxNzIsIDYzLCAxLCAxNzYsIDYzLCAxLCAyMzQsIDEzOCwgNjMsIDEsIDI0MywgMTQyLCA2MywgMSwgCisgICAgMjQzLCAwLCA2MywgMSwgMjI5LCA4MiwgNjMsIDEsIDI1MSwgNDEsIDYzLCAxLCAyNTAsIDE2NSwgNjMsIDEsIDIzNSwgMTQ3LCAKKyAgICA2MywgMSwgMjI3LCAxNjksIDYzLCAxLCAyMTUsIDE1NywgNjMsIDEsIDIxNSwgMTQ1LCA2MywgMSwgMjQ4LCAxNDMsIDYzLCAKKyAgICAxLCAyNDgsIDEyNywgNjMsIDEsIDIyOCwgMTE1LCA2MywgMSwgMjE3LCAxMDYsIDYzLCAxLCAyMTYsIDIwOSwgNjMsIDEsIAorICAgIDI0OCwgMjI5LCA2MywgMSwgMjQ4LCAzMywgNjMsIDEsIDE5OCwgNjMsIDEsIDE5MSwgNjMsIDEsIDIyNSwgMTUwLCA2MywgMSwgCisgICAgMjUyLCAxOTksIDYzLCAxLCAyNTIsIDI2LCA2MywgMSwgMTg2LCA2MywgMSwgMjE1LCAxODQsIDYzLCAxLCAyMTUsIDE3NiwgCisgICAgNjMsIDEsIDI0NiwgNDYsIDYzLCAxLCAyNDYsIDQxLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAxLCAKKyAgICAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTc1LCA2MywgMSwgMTkyLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxNDEsIDYzLCAKKyAgICAxLCAyMjAsIDEwNCwgNjMsIDEsIDIxOCwgMjI1LCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAxLCAKKyAgICAyMzMsIDIzNywgNjMsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDEsIDIzNCwgNTIsIDYzLCAxLCAyMjIsIDE4MSwgNjMsIDI1LCAKKyAgICA1LCAyNTUsIDgyLCA2MywgMjUsIDUsIDc0LCA2MywgMjUsIDUsIDIzNiwgNDAsIDYzLCAyNSwgNSwgNjksIDYzLCAyNSwgNSwgCisgICAgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjMsIDI1LCA1LCAxNDksIAorICAgIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDI0NSwgMjE3LCA2MywgCisgICAgMjUsIDUsIDc4LCA2MywgMjUsIDUsIDIyNiwgMTg3LCA2MywgNSwgMjIyLCAyMjQsIDIxOCwgODUsIDIyOSwgODMsIDIyMiwgCisgICAgMjEzLCA2MywgNSwgMjIyLCAyMTgsIDI1MiwgODQsIDYzLCAyNSwgNSwgMjIzLCA1MiwgNzQsIDYzLCAyNSwgNSwgMjIzLCAKKyAgICA1MiwgMjM2LCA0MCwgNjMsIDUsIDIyNywgMTUzLCAyMTAsIDI2LCAyMjksIDIzMSwgMjQ4LCAyMjksIDYzLCA1LCAyMTksIAorICAgIDczLCAyMzMsIDY2LCA2MywgMTY0LCAyNDIsIDM2LCA2MywgMTY0LCAyMjYsIDYxLCA2MywgNSwgMjMzLCA2OSwgMjIyLCAKKyAgICAxNDUsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0NSwgNjMsIDUsIDIzMywgNzAsIDIxNSwgMTg1LCAyNTEsIDE1LCA2MywgNSwgCisgICAgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCA1LCAyNDIsIDEyNiwgMjUxLCAxNiwgMjIzLCA0MywgNjMsIDUsIDI0MiwgMTI2LCAKKyAgICAyMzEsIDkwLCAyMjMsIDQzLCA2MywgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgNSwgCisgICAgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgCisgICAgNzQsIDUsIDIzNSwgMjAwLCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDEsIDE3NiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDIzNCwgMTM4LCA2MywgMjE4LCA3NCwgMSwgMjQzLCAxNDIsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDAsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMjksIDgyLCA2MywgMjE4LCA3NCwgMSwgMjUxLCA0MSwgNjMsIDIxOCwgNzQsIDEsIDI1MCwgMTY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjM1LCAxNDcsIDYzLCAyMTgsIDc0LCAxLCAyMjcsIDE2OSwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTU3LCA2MywgCisgICAgMjE4LCA3NCwgMSwgMjE1LCAxNDUsIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDE0MywgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTI3LCAKKyAgICA2MywgMjE4LCA3NCwgMSwgMjI4LCAxMTUsIDYzLCAyMTgsIDc0LCAxLCAyMTcsIDEwNiwgNjMsIDIxOCwgNzQsIDEsIDIxNiwgCisgICAgMjA5LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAyMjksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDMzLCA2MywgMjE4LCA3NCwgMSwgCisgICAgMTk4LCA2MywgMjE4LCA3NCwgMSwgMTkxLCA2MywgMjE4LCA3NCwgMSwgMjI1LCAxNTAsIDYzLCAyMTgsIDc0LCAxLCAyNTIsIAorICAgIDE5OSwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgMjYsIDYzLCAyMTgsIDc0LCAxLCAxODYsIDYzLCAyMTgsIDc0LCAxLCAyMTUsIAorICAgIDE4NCwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgMjQ2LCA0NiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDI0NiwgNDEsIDYzLCAyMTgsIDc0LCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3NCwgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIxMCwgMTE2LCA2MywgMjE4LCA3NCwgMSwgMjU1LCAxNzUsIDYzLCAyMTgsIDc0LCAxLCAxOTIsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMDUsIDYzLCAyMTgsIDc0LCAxLCAyMzMsIDE0MSwgNjMsIDIxOCwgNzQsIDEsIDIyMCwgMTA0LCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjE4LCAyMjUsIDYzLCAyMTgsIDc0LCAxLCAyMDYsIDYzLCAyMTgsIDc0LCAxLCAxNjIsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICA2MSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMjM3LCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjEyLCA2NSwgNjMsIDIxOCwgCisgICAgNzQsIDEsIDI0NCwgODUsIDE5MiwgNjMsIDIxOCwgNzQsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDIzMywgMjI0LCAyMjIsIAorICAgIDE0MywgMjM0LCAxMzgsIDYzLCAyMzMsIDIyNCwgMjIyLCAxNDMsIDIzNCwgMTM5LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAKKyAgICAxNSwgNjMsIDI1MSwgNCwgNSwgMTE0LCAyNTIsIDc4LCA2MywgMjUxLCA0LCA1LCAxOTMsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIAorICAgIDUsIDI1MSwgNSwgMjE3LCAyMSwgNjMsIDI1MSwgNCwgNSwgMjIxLCAyMDksIDI1NSwgMTc0LCA2MywgMTYsIDI0NiwgOTksIAorICAgIDI1MSwgMTMzLCA2MywgMTYsIDIyMywgMTMyLCAyMjIsIDIyNSwgNjMsIDE2LCAyMjYsIDgxLCAyNDMsIDcwLCA2MywgMTYsIAorICAgIDIyMywgMTMyLCAyMjIsIDIyNiwgMjIzLCA0NSwgMjQyLCAxNTIsIDYzLCAxNiwgMjI1LCAxMTUsIDE5MSwgNjMsIDE2LCAKKyAgICAyMjgsIDY0LCAyNTEsIDEzMywgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjI3LCAxNDMsIDI1NSwgMTcxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTM0LCAyNDIsIDEyNCwgMjU1LCAxNzEsIDYzLCAxNiwgMjI4LCA2NCwgMjUxLCAxMzQsIDI1MSwgCisgICAgNzcsIDI1NSwgMTcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyMjMsIDEzMywgMjQ3LCAxNjYsIDYzLCA1LCAyMjMsIAorICAgIDEzMywgMjI5LCAyMjQsIDI0MiwgMTIzLCA2MywgMTY0LCAyNTEsIDEzNywgMjIwLCA1LCAyNDIsIDIyMiwgMjMwLCAyNTMsIAorICAgIDIyMywgNDQsIDYzLCAxNjQsIDIzMCwgMTY4LCAyMTEsIDAsIDI0MiwgMjIyLCAyMzAsIDI1MywgMjIzLCA0NCwgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIxNSwgMTczLCA2MywgMTY0LCA2NSwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAKKyAgICAyMzEsIDk4LCAxODYsIDYzLCAxNjQsIDI1MCwgNCwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIAorICAgIDExMSwgMTg2LCAyMjIsIDI1MywgMjE4LCAwLCA1MCwgMjMzLCA1MSwgMjE4LCAwLCA1MCwgMjIyLCAyNTMsIDIxOCwgMCwgNSwgCisgICAgMiwgMjQ3LCAxMjYsIDIzMywgNTEsIDIxOCwgMCwgNSwgMiwgMjQ3LCAxMjYsIDYzLCAxNjQsIDIzMywgNjEsIDIzMSwgMTAxLCAKKyAgICAyMjIsIDE0NSwgNjMsIDE2NCwgMjE1LCAyNTEsIDIzMSwgMTAxLCAyMjIsIDE0NSwgNjgsIDEsIDE3NiwgNjgsIDEsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjQzLCAxNDIsIDY4LCAxLCAyNDMsIDAsIDY4LCAxLCAyMjksIDgyLCA2OCwgMSwgMjUxLCA0MSwgNjgsIAorICAgIDEsIDI1MCwgMTY1LCA2OCwgMSwgMjM1LCAxNDcsIDY4LCAxLCAyMzUsIDEyMCwgNjgsIDEsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjI4LCA4MSwgNjgsIDEsIDIxNSwgMTU3LCA2OCwgMSwgMjE1LCAxNDUsIDY4LCAxLCAyNDgsIDE0MywgNjgsIDEsIDI0OCwgCisgICAgMTI3LCA2OCwgMSwgMjI4LCAxMTUsIDY4LCAxLCAyMTcsIDEwNiwgNjgsIDEsIDIxNiwgMjA5LCA2OCwgMSwgMjQ4LCAyMjksIAorICAgIDY4LCAxLCAyNDgsIDMzLCA2OCwgMSwgMTk4LCA2OCwgMSwgMTkxLCA2OCwgMSwgMjI1LCAxNTAsIDY4LCAxLCAyNTIsIDE5OSwgCisgICAgNjgsIDEsIDI1MiwgMjYsIDY4LCAxLCAxODYsIDY4LCAxLCAxOTIsIDY4LCAxLCAyMDUsIDY4LCAxLCAyMzMsIDE0MSwgNjgsIAorICAgIDEsIDIxMiwgNjUsIDY4LCAxLCAyMDYsIDY4LCAxLCAxNjIsIDY4LCAxLCAyMzIsIDE5MCwgNjgsIDEsIDYxLCA2OCwgMSwgCisgICAgMjIwLCA4OCwgNjEsIDY4LCAxLCA3NCwgNjgsIDEsIDIzNiwgNDAsIDY4LCAxLCA2OSwgNjgsIDEsIDIxNCwgMTE4LCA2OCwgCisgICAgMSwgNzYsIDY4LCAxLCAyMzAsIDE1NiwgNzYsIDY4LCAxLCA3OCwgNjgsIDEsIDI1MywgMjAwLCA2OCwgMjUsIDUsIDIxNywgCisgICAgNjUsIDI1NSwgODIsIDY4LCAyNSwgNSwgMjU1LCA4MiwgNjgsIDI1LCA1LCA3NCwgNjgsIDI1LCA1LCAyMzYsIDQwLCA2OCwgCisgICAgMjUsIDUsIDY5LCA2OCwgMjUsIDUsIDIxNCwgMTE4LCA2OCwgMjUsIDUsIDc2LCA2OCwgMjUsIDUsIDI1NCwgMjEwLCA2OCwgCisgICAgMjUsIDUsIDIzMCwgMTU2LCAyMzYsIDQwLCA2OCwgMjUsIDUsIDIzMCwgMTU2LCA3OCwgNjgsIDI1LCA1LCAxNjAsIDQ4LCAKKyAgICA2OCwgNSwgMjU0LCA4MywgNjgsIDUsIDU5LCA1MSwgNjgsIDUsIDIxMywgMTQ3LCA2OCwgNSwgMjEzLCAxNTIsIDY4LCA1LCAKKyAgICAyNTMsIDI0MywgNjgsIDExNywgNSwgMTQ3LCAxOTIsIDY4LCAxMTcsIDUsIDE0NywgMjA1LCA2OCwgMTE3LCA1LCAxNDcsIAorICAgIDIxMiwgNjUsIDY4LCAxMTcsIDUsIDE0NywgMTYyLCA2OCwgMSwgMjQyLCAxMzksIDIwNiwgNjgsIDIxLCAyMTAsIDg2LCA2OCwgCisgICAgMjEsIDExMSwgNjgsIDIxLCAxMDUsIDY4LCAyMSwgMTU4LCA2OCwgMjEsIDE2MSwgNjgsIDIxLCAxOTAsIDY4LCAyMSwgMTk1LCAKKyAgICA2OCwgMjEsIDE5OSwgNjgsIDIxLCAxOTYsIDY4LCAyMSwgMjAxLCA2OCwgNSwgMjMyLCAxOTgsIDIyMSwgMTc0LCA2OCwgNSwgCisgICAgMjIxLCAxNzQsIDY4LCAxNiwgMjMyLCAxNTksIDY4LCAxNiwgMjQ5LCAyMjEsIDY4LCAxNiwgMjU0LCAyMjksIDY4LCAxNiwgCisgICAgMjQzLCA1NSwgNjgsIDEsIDIyMCwgMTA0LCA2OCwgMSwgMjE4LCAyMjUsIDY4LCAxLCAxNDksIDE1MywgNjgsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDY4LCAxLCAxNDksIDE1NiwgNjgsIDEsIDE0OSwgMjMyLCAxOTEsIDY4LCAyNSwgNSwgMTQ5LCAxNTMsIDY4LCAKKyAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjgsIDI1LCA1LCAxNDksIDE1NiwgNjgsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2OCwgCisgICAgMSwgMjMwLCAxNTYsIDIyOSwgODIsIDY4LCAxLCAyMzAsIDE1NiwgMjM1LCAxMjAsIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAKKyAgICAxMTksIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAxMTQsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDE5OCwgNjgsIDExNywgCisgICAgNSwgMjMwLCAxNTYsIDE0NywgMTg2LCA2OCwgMTE3LCA1LCAyMzAsIDE1NiwgMTQ3LCAyMzMsIDE0MSwgNjgsIDEsIDIyMCwgCisgICAgMTEwLCAyMzQsIDIxOSwgMjIwLCAxMDQsIDY4LCAyNSwgNSwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDUsIDYzLCA2OCwgMTM4LCAKKyAgICAxNjQsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjQxLCAyNTQsIDY4LCAxMzgsIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyMzQsIAorICAgIDE4OSwgMjI1LCAxMjQsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyMDksIDY4LCAxLCAyMTIsIAorICAgIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI0LCAxMTcsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIAorICAgIDI0NSwgNjMsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNCwgMjE0LCA2OCwgNSwgMjEyLCA3LCAKKyAgICAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMzAsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyOSwgCisgICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI4LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAKKyAgICAyMTksIDIxNiwgMjcsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyNiwgNjgsIDEsIDI0NSwgCisgICAgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIyOCwgMTE1LCA2OCwgMSwgMjQ1LCAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjEwLCAxNzYsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyNDIsIDIyNCwgNjgsIDI1LCA1LCAyNDMsIAorICAgIDY2LCAyMzQsIDIxOSwgNzQsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDIyNiwgMjM4LCA2OCwgMjUsIDUsIDIzNCwgMTk0LCA2OSwgCisgICAgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjQ1LCAyMTcsIDY4LCAxLCAyMjAsIDg4LCAxNzYsIDY4LCAxLCAyMjAsIDg4LCAyMzQsIAorICAgIDEzOCwgNjgsIDEsIDIyMCwgODgsIDI0MywgMTQyLCA2OCwgMSwgMjIwLCA4OCwgMjUxLCA0MSwgNjgsIDEsIDIyMCwgODgsIAorICAgIDIxMCwgMTE2LCA2OCwgMSwgMjIwLCA4OCwgMjI3LCAxNjksIDY4LCAxLCAyMjAsIDg4LCAyNDgsIDIyOSwgNjgsIDEsIDIyMCwgCisgICAgODgsIDE5OCwgNjgsIDEsIDIyMCwgODgsIDIyNSwgMTUwLCA2OCwgMSwgMjIwLCA4OCwgMjQ0LCAyMDQsIDY4LCAxLCAyMjAsIAorICAgIDg4LCAyNTIsIDE5OSwgNjgsIDEsIDIyMCwgODgsIDIxNiwgMjA5LCA2OCwgMSwgMjIwLCA4OCwgMTYyLCA2OCwgMTE3LCA1LCAKKyAgICAyMjAsIDg4LCAxNDcsIDIxMiwgNjUsIDY4LCAyNSwgNSwgMjIwLCA4OCwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAKKyAgICA3NiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAxNjAsIDQ4LCA2OCwgMjUsIDUsIDIyMCwgODgsIDQwLCAyMTEsIDExNywgNjgsIDUsIAorICAgIDIyMCwgODgsIDIxNiwgMjksIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjE2LCAyNiwgNjgsIAorICAgIDUsIDIyMCwgODgsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIAorICAgIDI0OSwgMTYwLCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjQ5LCAxNjAsIDI0NSwgMTYxLCAyMTYsIDMxLCA2OCwgMSwgCisgICAgMjIyLCAxMzAsIDIyNiwgNjcsIDI0NCwgMjA0LCA2OCwgNSwgMjIyLCAxMzAsIDIyNiwgNjcsIDIxNiwgMjYsIDY4LCAyMjAsIAorICAgIDg4LCAyMSwgMjEwLCA4NiwgNjgsIDIyMCwgODgsIDIxLCAxMTEsIDY4LCAyMjAsIDg4LCAyMSwgMTA1LCA2OCwgMjIwLCA4OCwgCisgICAgMjEsIDE1OCwgNjgsIDIyMCwgODgsIDIxLCAxNjEsIDY4LCAyMjAsIDg4LCAyMSwgMTkwLCA2OCwgMjIwLCA4OCwgMjEsIAorICAgIDE5NSwgNjgsIDIyMCwgODgsIDIxLCAxOTksIDY4LCAyMjAsIDg4LCAyMSwgMTk2LCA2OCwgMjIwLCA4OCwgMjEsIDIwMSwgCisgICAgNjgsIDUsIDIzNCwgMTMyLCAyMTYsIDMwLCA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMjgsIDY4LCAyNSwgNSwgMjU0LCAxOTksIAorICAgIDYxLCA2OCwgMjUsIDUsIDI1NCwgMTk5LCAyNTQsIDIxMCwgNjgsIDE2LCAyMjAsIDg4LCAxMTEsIDY4LCAxNiwgMjIwLCA4OCwgCisgICAgMjQ1LCAzOCwgOTgsIDYsIDEsIDI1NCwgMTMxLCA5OCwgNiwgMSwgMjUyLCAxNjAsIDk4LCA2LCAxLCAyNDMsIDExMywgOTgsIAorICAgIDYsIDEsIDI0NywgMTM2LCA5OCwgNiwgMSwgMjQ1LCAxNTgsIDk4LCA2LCAxLCAyMTMsIDE2MCwgOTgsIDYsIDEsIDIxMCwgCisgICAgODksIDk4LCA2LCAxLCAyMTcsIDYxLCA5OCwgNiwgMSwgMjM2LCA2LCA5OCwgNiwgMSwgMjM0LCAyNDAsIDk4LCA2LCAxLCAKKyAgICAyMzMsIDg3LCA5OCwgNiwgMSwgMjMxLCAxOTAsIDk4LCA2LCAxLCAyMjksIDIwMCwgOTgsIDYsIDEsIDIyNiwgMjAwLCA5OCwgCisgICAgNiwgMSwgMjI2LCAyMSwgOTgsIDYsIDEsIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3NCwgOTgsIDYsIDEsIDIyMSwgMjQ1LCAKKyAgICA5OCwgNiwgMSwgMjE3LCA1MSwgOTgsIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDMsIDk4LCA2LCAxLCAyMzQsIAorICAgIDEyNywgOTgsIDYsIDEsIDI0MiwgMjQ4LCA5OCwgNiwgMSwgMjI0LCA3NiwgOTgsIDYsIDEsIDIyMCwgMjIsIDk4LCA2LCAxLCAKKyAgICAyNTAsIDEwNSwgOTgsIDYsIDEsIDI1MSwgMTUsIDk4LCA2LCAxLCAyMzUsIDEwNiwgOTgsIDYsIDEsIDI1MCwgNDgsIDk4LCAKKyAgICA2LCAxLCAyNTAsIDE1MSwgOTgsIDYsIDEsIDIxMSwgMTYzLCA5OCwgNiwgMSwgMjM1LCAxMTcsIDk4LCA2LCAxLCAyNDIsIAorICAgIDUwLCA5OCwgNiwgMSwgMjQxLCAyNDUsIDk4LCA2LCAxLCAyNDEsIDE4MiwgOTgsIDYsIDEsIDIxMiwgMjIsIDk4LCA2LCAxLCAKKyAgICAyNDIsIDExLCA5OCwgNiwgMSwgMjQxLCA3MiwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyNDEsIDk4LCAKKyAgICAxLCAyNTQsIDEzMSwgOTgsIDEsIDI1MiwgMTYwLCA5OCwgMSwgMjQzLCAxMTMsIDk4LCAxLCAyNDcsIDEzNiwgOTgsIDEsIAorICAgIDI0NSwgMTU4LCA5OCwgMSwgMjEzLCAxNjAsIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MSwgOTgsIDEsIDIzNiwgNiwgCisgICAgOTgsIDEsIDIzNCwgMjQwLCA5OCwgMSwgMjMzLCA4NywgOTgsIDEsIDIzMSwgMTkwLCA5OCwgMSwgMjI5LCAyMDAsIDk4LCAxLCAKKyAgICAyMjYsIDIwMCwgOTgsIDEsIDIyNiwgMjEsIDk4LCAxLCAyMTAsIDc4LCA5OCwgMSwgMjIzLCAxNzQsIDk4LCAxLCAyMjEsIAorICAgIDI0NSwgOTgsIDEsIDIxNywgNTEsIDk4LCAxLCAyMTQsIDE5MCwgOTgsIDEsIDIyNSwgMTQzLCA5OCwgMSwgMjM0LCAxMjcsIAorICAgIDk4LCAxLCAyNDIsIDI0OCwgOTgsIDEsIDIyNCwgNzYsIDk4LCAxLCAyMjAsIDIyLCA5OCwgMSwgMjUwLCAxMDUsIDk4LCAxLCAKKyAgICAyNTEsIDE1LCA5OCwgMSwgMjM1LCAxMDYsIDk4LCAxLCAyNTAsIDQ4LCA5OCwgMSwgMjUwLCAxNTEsIDk4LCAxLCAyMTEsIAorICAgIDE2MywgOTgsIDEsIDIzNSwgMTE3LCA5OCwgMSwgMjQyLCA1MCwgOTgsIDEsIDI0MSwgMjQ1LCA5OCwgMSwgMjQxLCAxODIsIAorICAgIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCAxMSwgOTgsIDEsIDI0MSwgNzIsIDk4LCAxLCAyNDQsIDEyOSwgOTgsIDEsIAorICAgIDIxMCwgMjQ2LCA5OCwgMSwgMjQ1LCAxNzMsIDk4LCAxLCAyMTUsIDk0LCAyNDMsIDExMywgOTgsIDEsIDI1NCwgMjA1LCA5OCwgCisgICAgMjI2LCAxOSwgMjIwLCAxMzksIDU4LCAxLCA5OCwgMjI5LCAyMDAsIDk4LCAxLCAyNTQsIDI0MSwgOTgsIDEsIDI0MiwgMTAsIAorICAgIDUwLCA5OCwgMSwgMjMzLCAxMzMsIDUwLCAyNCwgMTAwLCAyMzQsIDY0LCAyNCwgMTAwLCAyMTgsIDIxNywgMjQsIDEwMCwgCisgICAgMjI4LCAyMzEsIDI0LCAxMDAsIDIxNiwgMTAyLCAyNCwgMTAwLCAyMTgsIDIwNiwgMjQsIDEwMCwgMjIzLCAyOSwgMjQsIAorICAgIDEwMCwgMjMwLCAyMjIsIDI0LCAxMDAsIDIyNSwgOTgsIDI0LCAxMDAsIDIxOCwgMjE0LCAyNCwgMTAwLCAyMTksIDE1MCwgCisgICAgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIzNiwgNjMsIDI0LCAxMDAsIDI1MCwgNTQsIDI0LCAxMDAsIDIxOCwgMjIxLCAKKyAgICAyNCwgMTAwLCAyNTAsIDExNCwgMjQsIDEwMCwgMjM0LCAxMTYsIDI0LCAxMDAsIDIxNiwgMTc0LCAyNCwgMTAwLCAyMjUsIAorICAgIDEzNCwgMjQsIDEwMCwgMjQxLCAxNzksIDI0LCAxMDAsIDIyOCwgMjI3LCAyNCwgMTAwLCAyMTgsIDIxNSwgMjQsIDEwMCwgCisgICAgMjI4LCAyMjEsIDI0LCAxMDAsIDIyOCwgMjI1LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDE3LCAyNCwgMTAwLCAKKyAgICAyMTgsIDIxMywgMjQsIDEwMCwgMjIzLCAyNywgMjQsIDEwMCwgMjM0LCAyMjQsIDI0LCAxMDAsIDIzMCwgMjE1LCAyNCwgCisgICAgMTAwLCAyMzQsIDIyNywgMjQsIDEwMCwgMjI1LCA5MywgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA3OSwgMjQsIAorICAgIDEwMCwgMjI1LCA4NywgMjQsIDEwMCwgMjI1LCA4NSwgMjQsIDEwMCwgMjI1LCA4MiwgMjQsIDEwMCwgMjI1LCA4NCwgMjQsIAorICAgIDEwMCwgMjI1LCA4MSwgMjQsIDEwMCwgMjI1LCA4NiwgMjQsIDEwMCwgMjI1LCA5NiwgMjQsIDEwMCwgMjI1LCA5NywgMjQsIAorICAgIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MCwgMjQsIDEwMCwgMjM0LCAyMjUsIDI0LCAxMDAsIDIzNCwgMjIzLCAyNCwgCisgICAgMTAwLCAyMTksIDE0MywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDEzNiwgCisgICAgMjQsIDEwMCwgMjE5LCAxNDIsIDI0LCAxMDAsIDIxOSwgMTM4LCAyNCwgMTAwLCAyMTksIDEzNywgMjQsIDEwMCwgMjE5LCAKKyAgICAxMzUsIDI0LCAxMDAsIDIxOSwgMTQ2LCAyNCwgMTAwLCAyMTksIDE0OCwgMjQsIDEwMCwgMjE5LCAxNDksIDI0LCAxMDAsIAorICAgIDIxOSwgMTQ0LCAyNCwgMTAwLCAyMTksIDEzNCwgMjQsIDEwMCwgMjE5LCAxMzksIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgCisgICAgMTAwLCAyNTAsIDk4LCAyNCwgMTAwLCAyNTAsIDk2LCAyNCwgMTAwLCAyNTAsIDE3NiwgMjQsIDEwMCwgMjUwLCAxNzQsIDI0LCAKKyAgICAxMDAsIDIyNiwgMzYsIDI0LCAxMDAsIDIzNiwgNTgsIDI0LCAxMDAsIDIzNiwgNDksIDI0LCAxMDAsIDIzNiwgNTcsIDI0LCAKKyAgICAxMDAsIDIzNiwgNTQsIDI0LCAxMDAsIDIzNiwgNTIsIDI0LCAxMDAsIDIzNiwgNTYsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgCisgICAgMTAwLCAyMzYsIDYxLCAyNCwgMTAwLCAyMzYsIDYyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDU1LCAyNCwgCisgICAgMTAwLCAyMTEsIDI2LCAyNCwgMTAwLCAyNTAsIDUzLCAyNCwgMTAwLCAyNTAsIDk5LCAyNCwgMTAwLCAyNTAsIDk3LCAyNCwgCisgICAgMTAwLCAyNTAsIDE3NywgMjQsIDEwMCwgMjUwLCAxNzUsIDI0LCAxMDAsIDI1MCwgMTEyLCAyNCwgMTAwLCAyNTAsIDExMywgCisgICAgMjQsIDEwMCwgMjUwLCAxMDAsIDI0LCAxMDAsIDI1MCwgMTc4LCAyNCwgMTAwLCAyMjUsIDEzMiwgMjQsIDEwMCwgMjM0LCAKKyAgICAyMjYsIDI0LCAxMDAsIDIxOCwgMjE5LCAyNCwgMTAwLCAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDU1LCAyNCwgMTAwLCAyMjgsIAorICAgIDIyMywgMjQsIDEwMCwgMjI4LCAyMjksIDI0LCAxMDAsIDIyOCwgMjI4LCAyNCwgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAKKyAgICAyNDQsIDExMSwgMjQsIDE0MywgMjQ0LCAxMTEsIDI0LCAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI1MiwgMjQsIDE0MywgCisgICAgMTkyLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIDEyNSwgMjQsIDE0MywgNzYsIDI0LCAxNDMsIDIxMSwgMzYsIAorICAgIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc4LCAyNCwgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgCisgICAgMTQzLCAyMjYsIDIzOCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAxNDMsIDY5LCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAKKyAgICAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNjMsIDI0LCAxNDMsIAorICAgIDIxMSwgOCwgMjQsIDE0MywgNzQsIDI0LCAxNDMsIDI1NSwgMTY2LCAyNCwgMTQzLCAyNTUsIDE2NSwgMjQsIDE0MywgMjExLCAKKyAgICAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAyNDUsIDEyMywgMjQsIDE0MywgMjQ1LCAxMjIsIDI0LCAxNDMsIAorICAgIDI0NSwgMTI0LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg4LCAyNCwgMTQzLCAKKyAgICAyMjcsIDg5LCAyNCwgMTQzLCAyMjcsIDgyLCAyNCwgMTQzLCAyMjcsIDg3LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAKKyAgICAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIAorICAgIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAKKyAgICAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIAorICAgIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIAorICAgIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAyNDUsIDU3LCAyNCwgMTQzLCAyNDUsIDU5LCAyNCwgMTQzLCAyMTEsIDcsIAorICAgIDI0LCAxNDMsIDI0MCwgMTYwLCAyNCwgMTQzLCAyNDAsIDE1MiwgMjQsIDE0MywgMjQwLCAxNTUsIDI0LCAxNDMsIDI0MCwgCisgICAgMTUzLCAyNCwgMTQzLCAyNDAsIDE1NywgMjQsIDE0MywgMjQwLCAxNTksIDI0LCAxNDMsIDI1NCwgNDIsIDI0LCAxNDMsIAorICAgIDI1NCwgMzksIDI0LCAxNDMsIDI1NCwgMzcsIDI0LCAxNDMsIDI1NCwgMzgsIDI0LCAxNDMsIDIxOCwgMjIyLCAyNCwgMTQzLCAKKyAgICAyNTUsIDE2NywgMjQsIDE0MywgMjExLCAxMDUsIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODQsIDI0LCAxNDMsIAorICAgIDIyNywgODMsIDI0LCA5MCwgMjM0LCA2NCwgMjQsIDkwLCAyMTgsIDIxNywgMjQsIDkwLCAyMzQsIDU3LCAyNCwgOTAsIDIyOCwgCisgICAgMjMxLCAyNCwgOTAsIDIyOCwgMjI5LCAyNCwgOTAsIDIyOCwgMjI4LCAyNCwgOTAsIDIxNiwgMTAyLCAyNCwgOTAsIDIyMywgCisgICAgMjksIDI0LCA5MCwgMjIzLCAyNCwgMjQsIDkwLCAyMjMsIDIxLCAyNCwgOTAsIDIyMywgMTQsIDI0LCA5MCwgMjIzLCA5LCAKKyAgICAyNCwgOTAsIDIyMywgNCwgMjQsIDkwLCAyMjMsIDE1LCAyNCwgOTAsIDIyMywgMjcsIDI0LCA5MCwgMjMwLCAyMjIsIDI0LCAKKyAgICA5MCwgMjI1LCA5OCwgMjQsIDkwLCAyMjUsIDg3LCAyNCwgOTAsIDIxOSwgMTUwLCAyNCwgOTAsIDIxOCwgMjExLCAyNCwgOTAsIAorICAgIDIzNiwgNjMsIDI0LCA5MCwgMjUwLCA1NCwgMjQsIDkwLCAyNTAsIDExNCwgMjQsIDkwLCAyMzQsIDExNiwgMjQsIDkwLCAKKyAgICAyMTYsIDE3NCwgMjQsIDkwLCAyMjUsIDEzNCwgMjQsIDkwLCAyNDEsIDE3OSwgMjQsIDkwLCAyMzQsIDU4LCAyNCwgOTAsIAorICAgIDIzNCwgNTYsIDI0LCA5MCwgMjI4LCAyMjcsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMjMsIDI0LCA5MCwgCisgICAgMjI4LCAyMjYsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCA5MCwgMjE2LCA5OSwgMjQsIDkwLCAyMTYsIDk2LCAyNCwgOTAsIAorICAgIDIyMywgMjIsIDI0LCA5MCwgMjIzLCAxNywgMjQsIDkwLCAyMjMsIDMsIDI0LCA5MCwgMjIzLCAyLCAyNCwgOTAsIDIxOCwgCisgICAgMjEzLCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxOCwgMjQsIDkwLCAyMjMsIDExLCAyNCwgOTAsIDIyMywgMTMsIAorICAgIDI0LCA5MCwgMjIzLCAyNiwgMjQsIDkwLCAyMjMsIDYsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIDI1LCAyNCwgCisgICAgOTAsIDIyMywgMSwgMjQsIDkwLCAyMzAsIDIxOCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAyMzAsIDIxNSwgMjQsIDkwLCAKKyAgICAyMzAsIDIxMiwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIyMSwgMjQsIDkwLCAKKyAgICAyMzAsIDIxOSwgMjQsIDkwLCAyMzQsIDIyNywgMjQsIDkwLCAyMjUsIDg5LCAyNCwgOTAsIDIyNSwgOTAsIDI0LCA5MCwgCisgICAgMjI1LCA5NSwgMjQsIDkwLCAyMzQsIDIyNSwgMjQsIDkwLCAyMTksIDE0MywgMjQsIDkwLCAyMTksIDEzMywgMjQsIDkwLCAKKyAgICAyMTksIDEzNiwgMjQsIDkwLCAyMTksIDEzOCwgMjQsIDkwLCAyMjYsIDM2LCAyNCwgOTAsIDIzNiwgNTgsIDI0LCA5MCwgCisgICAgMjM2LCA1MSwgMjQsIDkwLCAyMTgsIDIxOCwgMjQsIDkwLCAyMzYsIDU5LCAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAKKyAgICAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTMyLCAyNCwgOTAsIDIzNCwgMjI2LCAyNCwgOTAsIDI0MSwgCisgICAgMTc3LCAyNCwgOTAsIDI0MSwgMTc1LCAyNCwgOTAsIDI0MSwgMTc4LCAyNCwgOTAsIDI0MSwgMTc2LCAyNCwgOTAsIDIxMSwgCisgICAgMzIsIDI0LCA5MCwgMjM0LCA2MCwgMjQsIDkwLCAyMzQsIDU5LCAyNCwgOTAsIDIzNCwgNjMsIDI0LCA5MCwgMjM0LCA2MSwgCisgICAgMjQsIDkwLCAyMzQsIDYyLCAyNCwgOTAsIDIxOCwgMjE1LCAyOSwgMywgMTYyLCAyOSwgMywgMjQwLCAyMjksIDI5LCAzLCAKKyAgICAyNDEsIDE4NywgMjksIDMsIDI0MiwgNTMsIDI5LCAzLCAyNDEsIDIyNywgMjksIDMsIDI0MSwgMjQ1LCAyOSwgMywgMjQxLCAKKyAgICA3NSwgMjksIDMsIDI0MSwgNzQsIDI5LCAzLCAyMzMsIDE0MSwgMjksIDMsIDIzMiwgMTAzLCAyOSwgMywgMjMyLCAyNDcsIAorICAgIDI5LCAzLCAyMzMsIDE0MCwgMjksIDMsIDIzMywgNTYsIDI5LCAzLCAyMzMsIDY0LCAyOSwgMywgMjMyLCAxNjIsIDI5LCAzLCAKKyAgICAyMzIsIDc1LCAyOSwgMywgMjQxLCAxOTYsIDI5LCAzLCAyNDEsIDE5MCwgMjksIDMsIDI0MSwgMTkyLCAyOSwgMywgMjQxLCAKKyAgICAxOTUsIDI5LCAzLCAyNDEsIDE5MywgMjksIDMsIDI0MSwgMTk0LCAyOSwgMywgMjQxLCAxOTEsIDI5LCAzLCAyNDEsIDE4OSwgCisgICAgMjksIDMsIDE4NiwgMjksIDMsIDIzMCwgMTA3LCAyOSwgMywgMjMwLCAyMzUsIDI5LCAzLCAyMzEsIDI0MiwgMjksIDMsIAorICAgIDIzMSwgODUsIDI5LCAzLCAyMzEsIDk2LCAyOSwgMywgMjMwLCAxNjYsIDI5LCAzLCAyMzAsIDQ3LCAyOSwgMywgMjE3LCAKKyAgICAxNjQsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjMsIDI5LCAzLCAyMTcsIDE2MSwgCisgICAgMjksIDMsIDIxNywgMTYyLCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE1NywgMjksIDMsIDIwNSwgMjksIDMsIAorICAgIDIyMiwgMTQyLCAyOSwgMywgMjIzLCAzOCwgMjksIDMsIDIyMywgMTg3LCAyOSwgMywgMjIzLCAxMTEsIDI5LCAzLCAyMjMsIAorICAgIDEzMSwgMjksIDMsIDIyMiwgMjEzLCAyOSwgMywgMjIyLCAxMTEsIDI5LCAzLCAyMDYsIDI5LCAzLCAyMTgsIDg0LCAyOSwgMywgCisgICAgMjE5LCAxOTMsIDI5LCAzLCAyMjIsIDMzLCAyOSwgMywgMjIxLCAxNzIsIDI5LCAzLCAyMjEsIDE4MywgMjksIDMsIDIxOSwgCisgICAgNjAsIDI5LCAzLCAyMTcsIDI1NCwgMjksIDMsIDIyMCwgMTA0LCAyOSwgMywgMjE5LCAyMjcsIDI5LCAzLCAyMjAsIDM0LCAKKyAgICAyOSwgMywgMjIwLCAxMDAsIDI5LCAzLCAyMjAsIDYzLCAyOSwgMywgMjIwLCA2NSwgMjksIDMsIDIyMCwgOSwgMjksIDMsIAorICAgIDIxOSwgMjEwLCAyOSwgMywgMjI0LCA5MSwgMjksIDMsIDIyNCwgMzMsIDI5LCAzLCAyMjQsIDU2LCAyOSwgMywgMjI0LCA5MCwgCisgICAgMjksIDMsIDIyNCwgNzEsIDI5LCAzLCAyMjQsIDcyLCAyOSwgMywgMjI0LCA0NSwgMjksIDMsIDIyNCwgNDQsIDI5LCAzLCAKKyAgICAyMjMsIDI0NSwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAyNDQsIDI5LCAzLCAyMjMsIDI0MiwgMjksIDMsIDIyMywgCisgICAgMjQzLCAyOSwgMywgMjI0LCA2OCwgMjksIDMsIDIyNCwgNjIsIDI5LCAzLCAyMjQsIDY0LCAyOSwgMywgMjI0LCA2NywgMjksIAorICAgIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDY2LCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjEsIDI5LCAzLCAyMjQsIAorICAgIDU3LCAyOSwgMywgMjI0LCA2MCwgMjksIDMsIDIyNCwgNTgsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjUyLCAxOTksIDI5LCAKKyAgICAzLCAyNTEsIDEzMywgMjksIDMsIDI1MiwgMTQsIDI5LCAzLCAyNTIsIDE5NywgMjksIDMsIDI1MiwgNzQsIDI5LCAzLCAyNTIsIAorICAgIDgzLCAyOSwgMywgMjUxLCAyMTMsIDI5LCAzLCAyNTEsIDkxLCAyOSwgMywgMjE0LCAyNywgMjksIDMsIDIxMiwgMTE2LCAyOSwgCisgICAgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAyMTMsIDI1NSwgMjksIDMsIAorICAgIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNiwgMjksIDMsIDIxNSwgMTE5LCAyOSwgMywgMjE2LCAKKyAgICAxMTgsIDI5LCAzLCAyMTcsIDEwMiwgMjksIDMsIDIxNywgMTIsIDI5LCAzLCAyMTcsIDIzLCAyOSwgMywgMTEyLCAyOSwgMywgCisgICAgMjE1LCA4MCwgMjksIDMsIDI1MSwgNDEsIDI5LCAzLCAyNDksIDEyMCwgMjksIDMsIDI1MCwgNTksIDI5LCAzLCAyNTEsIDQwLCAKKyAgICAyOSwgMywgMjUwLCAxOTAsIDI5LCAzLCAyNTAsIDE5OCwgMjksIDMsIDI0OSwgMjQ2LCAyOSwgMywgMjQ5LCA4OSwgMjksIDMsIAorICAgIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIDIxMSwgMTY0LCAyOSwgMywgMjExLCAKKyAgICAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgCisgICAgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgMjksIDMsIDIxMSwgMTM0LCAyOSwgCisgICAgMywgMTk4LCAyOSwgMywgMjI3LCAyNDIsIDI5LCAzLCAyMjgsIDIzOCwgMjksIDMsIDIyOSwgMjMwLCAyOSwgMywgMjI5LCAKKyAgICAxMDgsIDI5LCAzLCAyMjksIDExMiwgMjksIDMsIDIyOCwgNzksIDI5LCAzLCAyMjcsIDE3OCwgMjksIDMsIDIyNywgMTY5LCAKKyAgICAyOSwgMywgMjI3LCAxMzIsIDI5LCAzLCAyMjcsIDE1MiwgMjksIDMsIDIyNywgMTY4LCAyOSwgMywgMjI3LCAxNTksIDI5LCAKKyAgICAzLCAyMjcsIDE2MCwgMjksIDMsIDIyNywgMTM4LCAyOSwgMywgMjI3LCAxMjMsIDI5LCAzLCAyNDIsIDE4NywgNjEsIDI5LCAKKyAgICAzLCAyNDIsIDE4NywgNjksIDI5LCAzLCAyNDIsIDE4NywgNzQsIDI5LCAzLCAyNDIsIDE4NywgMjU1LCA4MiwgMjksIDMsIAorICAgIDI0MiwgMTg3LCAyNDUsIDIxNywgMjksIDMsIDI0MiwgMTg3LCA3NiwgMjksIDMsIDI0MiwgMTg3LCA3OCwgMjksIDMsIDI0MiwgCisgICAgMTg3LCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMjMsIDI5LCAzLCAyMzQsIDk4LCAyOSwgMywgMjM1LCAKKyAgICAxNiwgMjksIDMsIDIzNCwgMTg3LCAyOSwgMywgMjM0LCAxODgsIDI5LCAzLCAyMzQsIDM0LCAyOSwgMywgMjM0LCAzMywgMjksIAorICAgIDMsIDIzMywgMTg4LCAyOSwgMywgMjMzLCAxODIsIDI5LCAzLCAyMzMsIDE4NywgMjksIDMsIDIzMywgMTgzLCAyOSwgMywgCisgICAgMjMzLCAxODQsIDI5LCAzLCAyMzMsIDE3NywgMjksIDMsIDIzMywgMTcxLCAyOSwgMywgMjMzLCAxNzMsIDI5LCAzLCAyMzMsIAorICAgIDE3NiwgMjksIDMsIDIzMywgMTc0LCAyOSwgMywgMjMzLCAxNzUsIDI5LCAzLCAyMzMsIDE3MiwgMjksIDMsIDIzMywgMTcwLCAKKyAgICAyOSwgMywgMjMzLCAxNjYsIDI5LCAzLCAyMzMsIDE2OSwgMjksIDMsIDIzMywgMTY3LCAyOSwgMywgMjMzLCAxNjgsIDI5LCAKKyAgICAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIAorICAgIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDE0MiwgCisgICAgNjEsIDI5LCAzLCAyMjUsIDE0MiwgNjksIDI5LCAzLCAyMjUsIDE0MiwgNzQsIDI5LCAzLCAyMjUsIDE0MiwgMjU1LCA4MiwgCisgICAgMjksIDMsIDIyNSwgMTQyLCAyNDUsIDIxNywgMjksIDMsIDIyNSwgMTQyLCA3NiwgMjksIDMsIDIyNSwgMTQyLCA3OCwgMjksIAorICAgIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgCisgICAgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAKKyAgICAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgCisgICAgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkyLCAyOSwgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIAorICAgIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAKKyAgICAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjI5LCAyOSwgMywgMjQ2LCA4NiwgMjksIDMsIDI0OCwgMTEsIDI5LCAzLCAyNDgsIAorICAgIDIyOCwgMjksIDMsIDI0OCwgODUsIDI5LCAzLCAyNDgsIDk4LCAyOSwgMywgMjQ3LCAxNTMsIDI5LCAzLCAyNDYsIDU1LCAyOSwgCisgICAgMywgMjQ4LCAxNDMsIDI5LCAzLCAyNDgsIDEwOCwgMjksIDMsIDI0OCwgMTIwLCAyOSwgMywgMjQ4LCAxNDIsIDI5LCAzLCAKKyAgICAyNDgsIDEzMCwgMjksIDMsIDI0OCwgMTMxLCAyOSwgMywgMjQ4LCAxMTMsIDI5LCAzLCAyNDgsIDk5LCAyOSwgMywgMjM1LCAKKyAgICAxNDcsIDI5LCAzLCAyMzUsIDU3LCAyOSwgMywgMjM1LCAxMTQsIDI5LCAzLCAyMzUsIDE0NiwgMjksIDMsIDIzNSwgMTMwLCAKKyAgICAyOSwgMywgMjM1LCAxMzIsIDI5LCAzLCAyMzUsIDc0LCAyOSwgMywgMjM1LCAzNywgMjksIDMsIDI0MywgMTQyLCAyOSwgMywgCisgICAgMjQyLCAxMjAsIDI5LCAzLCAyNDIsIDIyMSwgMjksIDMsIDI0MywgMTM5LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MywgCisgICAgNjksIDI5LCAzLCAyNDIsIDE4MSwgMjksIDMsIDI0MiwgMTgwLCAyOSwgMywgMjQyLCA4NSwgMjksIDMsIDI0MiwgODEsIDI5LCAKKyAgICAzLCAyNDIsIDg0LCAyOSwgMywgMjQyLCA4MiwgMjksIDMsIDI0MiwgODMsIDI5LCAzLCAyNDMsIDM2LCAyOSwgMywgMjQzLCAKKyAgICAxNiwgMjksIDMsIDI0MywgMjYsIDI5LCAzLCAyNDMsIDM1LCAyOSwgMywgMjQzLCAzMCwgMjksIDMsIDI0MywgMzEsIDI5LCAKKyAgICAzLCAyNDMsIDIwLCAyOSwgMywgMjQzLCA1LCAyOSwgMywgMjE2LCAyMDksIDI5LCAzLCAyMTYsIDEzNywgMjksIDMsIDIxNiwgCisgICAgMTc2LCAyOSwgMywgMjE2LCAyMDgsIDI5LCAzLCAyMTYsIDE5NSwgMjksIDMsIDIxNiwgMTk2LCAyOSwgMywgMjE2LCAxNTcsIAorICAgIDI5LCAzLCAyMTYsIDEyOSwgMjksIDMsIDI1MCwgMTY1LCAyOSwgMywgMjUwLCA3NywgMjksIDMsIDI1MCwgMTE4LCAyOSwgMywgCisgICAgMjUwLCAxNjQsIDI5LCAzLCAyNTAsIDEzNiwgMjksIDMsIDI1MCwgMTM5LCAyOSwgMywgMjUwLCA5NCwgMjksIDMsIDI1MCwgCisgICAgNjYsIDI5LCAzLCAyMjUsIDE1MCwgMjksIDMsIDIyNSwgMTE3LCAyOSwgMywgMjI1LCAxMzYsIDI5LCAzLCAyMjUsIDE0OSwgCisgICAgMjksIDMsIDIyNSwgMTM4LCAyOSwgMywgMjI1LCAxMzksIDI5LCAzLCAyMjUsIDEyNCwgMjksIDMsIDIyNSwgMTEzLCAyOSwgCisgICAgMywgMjE1LCAxODQsIDI5LCAzLCAyMTUsIDE2NCwgMjksIDMsIDIxNSwgMTY4LCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAKKyAgICAyMTUsIDE3OCwgMjksIDMsIDIxNSwgMTc5LCAyOSwgMywgMjE1LCAxNjcsIDI5LCAzLCAyMTUsIDE2MiwgMjksIDMsIDIxNSwgCisgICAgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgCisgICAgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAyMDQsIDI5LCAzLCAyNDMsIAorICAgIDI0MSwgMjksIDMsIDI0NCwgMTI5LCAyOSwgMywgMjQ0LCAyMDMsIDI5LCAzLCAyNDQsIDE1NSwgMjksIDMsIDI0NCwgMTYyLCAKKyAgICAyOSwgMywgMjQ0LCA1MSwgMjksIDMsIDI0MywgMjIwLCAyOSwgMywgMTkxLCAyOSwgMywgMjI0LCAxNTMsIDI5LCAzLCAyMjUsIAorICAgIDExMSwgMjksIDMsIDIyNiwgOTMsIDI5LCAzLCAyMjUsIDIxNCwgMjksIDMsIDIyNSwgMjI0LCAyOSwgMywgMjI1LCAxOSwgCisgICAgMjksIDMsIDIyNCwgMTE3LCAyOSwgMywgMjIyLCAxMDEsIDI5LCAzLCAyMzAsIDM2LCAyOSwgMywgMjQzLCAyMTQsIDI5LCAKKyAgICAzOCwgMjQzLCA2MCwgMjIsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNSwgMjMzLCAyOSwgNzksIDI5LCAzOCwgMjQzLCAKKyAgICA2MCwgNzksIDI5LCAyMjEsIDE3NSwgNzksIDI5LCAyMTEsIDIwOCwgMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMjksIDI0OSwgCisgICAgMjI3LCAyOSwgMjIwLCAxNTIsIDI5LCAyNDksIDIzNCwgMjksIDIyNCwgMjAyLCAyNDksIDIzNCwgMjksIDIyNCwgMTYsIDc5LCAKKyAgICAyOSwgMjI2LCAxOSwgMjIwLCAxMzksIDI5LCAyMSwgMTExLCAyOSwgMjEsIDEwNSwgMjksIDIxLCAxNTgsIDI5LCAyMSwgCisgICAgMTYxLCAyOSwgMjEsIDE5MCwgMjksIDIxLCAxOTUsIDI5LCAyMSwgMTk5LCAyOSwgMjEsIDE5NiwgMjksIDIxLCAyMDEsIDI5LCAKKyAgICA1NCwgMjE2LCAyNDgsIDI5LCA1NCwgMjE1LCA3MywgMjksIDU0LCAyMTYsIDE2MywgMjksIDU0LCAyNDQsIDIzLCAyOSwgNTQsIAorICAgIDI0NCwgMTIyLCAyOSwgNTQsIDIxOSwgMTEzLCAyOSwgNTQsIDIyMCwgMTE4LCAyOSwgNTQsIDI0NSwgMTkyLCAyOSwgNTQsIAorICAgIDIyOCwgMjAwLCAyOSwgNTQsIDI0MCwgMjE3LCAyOSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyMzAsIDQ3LCAyOSwgMywgMjMwLCA0MywgMjksIDMsIDIzMCwgNDQsIDI5LCAzLCAyMzAsIDQ1LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDI1MSwgOTEsIDI5LCAzLCAyNTEsIDg4LCAyOSwgMywgMjUxLCA4OSwgMjksIDMsIDI1MSwgOTAsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjQzLCAyMjAsIDI5LCAzLCAyNDMsIDIxNiwgMjksIDMsIDI0MywgMjE3LCAyOSwgMywgMjQzLCAyMTgsIDI5LCAzLCAyMjEsIAorICAgIDE3OSwgMjI0LCAxMTcsIDI5LCAzLCAyMjQsIDExMywgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjI0LCAxMTUsIDI5LCAKKyAgICAyMTYsIDMyLCAxNjQsIDIxMCwgMjQ3LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ5LCAyOSwgMjE2LCAzMiwgMTY0LCAyMjIsIAorICAgIDI0MSwgMjksIDIxNiwgMzIsIDE2NCwgMjE5LCAyNTMsIDIyMiwgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyNDcsIDI0MywgCisgICAgMjksIDIxNiwgMzIsIDE2NCwgMjM0LCAxNzAsIDI5LCAyMTYsIDMyLCAxNjQsIDI1MCwgMTAyLCAyOSwgMjE2LCAzMiwgMTY0LCAKKyAgICAyNDEsIDE4NCwgMjksIDIxNiwgMzIsIDE2NCwgMjQ4LCA0OCwgMjksIDIxNiwgMzIsIDE2NCwgMjMzLCAyMDAsIDE2OSwgMSwgCisgICAgNjEsIDE2OSwgMSwgNzYsIDE2OSwgMSwgNzQsIDE2OSwgMSwgNzgsIDE2OSwgMSwgNjksIDE2OSwgMSwgMjE0LCAxMDUsIAorICAgIDE2OSwgMSwgMjQzLCAxNDIsIDE2OSwgMSwgMTc2LCAxNjksIDEsIDI0MywgNjksIDE2OSwgMSwgMjQyLCAyMjEsIDE2OSwgMSwgCisgICAgMjQyLCAxODEsIDE2OSwgMSwgMjQyLCAxMjAsIDE2OSwgMSwgMjQyLCA4NiwgMTY5LCAxLCAxNjIsIDE2OSwgMSwgMjQxLCAKKyAgICAyNDUsIDE2OSwgMSwgMjQxLCAxODcsIDE2OSwgMSwgMjQxLCA3NSwgMTY5LCAxLCAyNDAsIDIyOSwgMTY5LCAxLCAyNDAsIAorICAgIDIwOCwgMTY5LCAxLCAyMzMsIDE0MSwgMTY5LCAxLCAyMzMsIDY0LCAxNjksIDEsIDIzMiwgMjQ3LCAxNjksIDEsIDIzMiwgCisgICAgMTYyLCAxNjksIDEsIDIzMiwgMTAzLCAxNjksIDEsIDIzMiwgNzYsIDE2OSwgMSwgMTg2LCAxNjksIDEsIDIzMSwgOTYsIAorICAgIDE2OSwgMSwgMjMwLCAyMzUsIDE2OSwgMSwgMjMwLCAxNjYsIDE2OSwgMSwgMjMwLCAxMDcsIDE2OSwgMSwgMTk4LCAxNjksIAorICAgIDEsIDI0MSwgOTcsIDE2OSwgMSwgMjI5LCAyMTgsIDE2OSwgMSwgMjI5LCAxMTIsIDE2OSwgMSwgMjI4LCAyMzgsIDE2OSwgMSwgCisgICAgMjI4LCA3OSwgMTY5LCAxLCAyMjcsIDI0MiwgMTY5LCAxLCAyMjcsIDE4MCwgMTY5LCAxLCAyMjQsIDMyLCAxNjksIDEsIAorICAgIDIyNCwgMTksIDE2OSwgMSwgMjI0LCAxMiwgMTY5LCAxLCAyMjQsIDQsIDE2OSwgMSwgMjIzLCAyNDksIDE2OSwgMSwgMjIzLCAKKyAgICAyNDcsIDE2OSwgMSwgMjA2LCAxNjksIDEsIDIyMiwgOTMsIDE2OSwgMSwgMjIxLCAxODMsIDE2OSwgMSwgMjE5LCAxOTMsIAorICAgIDE2OSwgMSwgMjE5LCA2MCwgMTY5LCAxLCAyMTgsIDg0LCAxNjksIDEsIDIxOCwgMywgMTY5LCAxLCAyNDgsIDIyOSwgMTY5LCAKKyAgICAxLCAyMTcsIDEwNiwgMTY5LCAxLCAyNDgsIDk4LCAxNjksIDEsIDIxNywgMjMsIDE2OSwgMSwgMjQ4LCAxMSwgMTY5LCAxLCAKKyAgICAyMTYsIDExOCwgMTY5LCAxLCAyNDcsIDE1MywgMTY5LCAxLCAyNDYsIDg2LCAxNjksIDEsIDI0NiwgNTgsIDE2OSwgMSwgCisgICAgMjQ3LCAxNjQsIDE2OSwgMSwgMjE2LCA2MCwgMTY5LCAxLCAyMTYsIDU5LCAxNjksIDEsIDIxNiwgNDgsIDE2OSwgMSwgMjE2LCAKKyAgICA0NywgMTY5LCAxLCAyMTYsIDQ2LCAxNjksIDEsIDIxNiwgNDUsIDE2OSwgMSwgMjE1LCAxODQsIDE2OSwgMSwgMjE1LCAxNzksIAorICAgIDE2OSwgMSwgMjE1LCAxNjgsIDE2OSwgMSwgMjE1LCAxNjcsIDE2OSwgMSwgMjE1LCAxNjQsIDE2OSwgMSwgMjE1LCAxNjMsIAorICAgIDE2OSwgMSwgMjEyLCA2NSwgMTY5LCAxLCAyMTIsIDIyLCAxNjksIDEsIDIxMSwgMjUwLCAxNjksIDEsIDIxMSwgMjI3LCAKKyAgICAxNjksIDEsIDIxMSwgMTk1LCAxNjksIDEsIDIxMSwgMTgzLCAxNjksIDEsIDE5MiwgMTY5LCAxLCAyMTEsIDQ3LCAxNjksIDEsIAorICAgIDIxMSwgOCwgMTY5LCAxLCAyMTAsIDI0NCwgMTY5LCAxLCAyMTAsIDIxMiwgMTY5LCAxLCAyMTAsIDE3NywgMTgsIDE5LCAKKyAgICAyNDAsIDE3NSwgMTgsIDE5LCA3NiwgMTgsIDE5LCAyNTUsIDQ2LCAxOCwgMTksIDc0LCAxOCwgMTksIDIzNiwgNDAsIDE4LCAKKyAgICAxOSwgNzgsIDE4LCAxOSwgMjI2LCAxODcsIDE4LCAxOSwgMjExLCAxMTYsIDIyNiwgMTg3LCAxOCwgMTksIDczLCAyNDUsIAorICAgIDIxNywgMTgsIDE5LCA3MywgNzQsIDE4LCAxOSwgNjEsIDE4LCAxOSwgMjU1LCA4MiwgMTgsIDE5LCAyMTIsIDIyLCAxOCwgCisgICAgMTksIDE1OSwgMjEyLCAyMiwgMTgsIDE5LCAyMTEsIDI1MCwgMTgsIDE5LCAxNTksIDIxMSwgMjUwLCAxOCwgMTksIDIxMSwgCisgICAgMjQyLCAxOCwgMTksIDE1OSwgMjExLCAyNDIsIDE4LCAxOSwgMjExLCAyMjcsIDE4LCAxOSwgMTU5LCAyMTEsIDIyNywgMTgsIAorICAgIDE5LCAyMTEsIDIxNSwgMTgsIDE5LCAxNTksIDIxMSwgMjE1LCAxOCwgMTksIDIyOSwgMTk1LCAyMTEsIDIxNSwgMTgsIDE5LCAKKyAgICAyMTIsIDY1LCAxOCwgMTksIDE1OSwgMjEyLCA2NSwgMTgsIDE5LCAyMTIsIDY0LCAxOCwgMTksIDE1OSwgMjEyLCA2NCwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjEyLCA2NCwgMTgsIDE5LCAyNTQsIDIxMCwgMTgsIDE5LCAyMTEsIDExNiwgMjEyLCA5OCwgMTgsIAorICAgIDE5LCAyNDIsIDE4NywgMjE4LCAxMzEsIDE4LCAxOSwgNDAsIDE0MiwgMTgsIDE5LCA0MCwgMjQyLCAxNDMsIDE4LCAxOSwgCisgICAgNDAsIDI1MSwgMTgzLCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMTYsIDE1LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIAorICAgIDQwLCA0NCwgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDUyLCAxNDIsIDE4LCAxOSwgCisgICAgNDAsIDUyLCAyMTksIDI1MywgNjcsIDIxOCwgOTIsIDE4LCAxOSwgNDAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTgsIDE5LCAKKyAgICA0MCwgMjE5LCAyNTMsIDIwMywgOTEsIDE4LCAxOSwgNDAsIDIyNSwgMjUsIDE4LCAxOSwgNDAsIDEyNCwgMjE3LCA4OCwgMTgsIAorICAgIDE5LCAyNDUsIDE1OCwgMTgsIDE5LCAyMzYsIDYsIDE4LCAxOSwgMjI2LCAyMDAsIDE4LCAxOSwgMjU0LCAxMzEsIDE4LCAxOSwgCisgICAgMjI1LCAyMjQsIDE4LCAxOSwgMjI2LCA5MSwgMTgsIDE5LCAyMjUsIDExMSwgMTgsIDE5LCAyMjUsIDc0LCAxOCwgMTksIAorICAgIDIyNSwgMTksIDE4LCAxOSwgMjI0LCAyNTIsIDE4LCAxOSwgMjExLCAxMTYsIDIyNCwgMjUyLCAxOCwgMTksIDczLCAyNDEsIAorICAgIDIyNywgMTgsIDE5LCA3MywgMjQxLCAxODcsIDE4LCAxOSwgMTkxLCAxOCwgMTksIDIyNiwgOTMsIDE4LCAxOSwgMjI0LCAKKyAgICAxMTUsIDE4LCAxOSwgMTU5LCAyMjQsIDExNSwgMTgsIDE5LCAyMjQsIDExMywgMTgsIDE5LCAxNTksIDIyNCwgMTEzLCAxOCwgCisgICAgMTksIDIyNCwgMTEyLCAxOCwgMTksIDE1OSwgMjI0LCAxMTIsIDE4LCAxOSwgMjI0LCAxMTAsIDE4LCAxOSwgMTU5LCAyMjQsIAorICAgIDExMCwgMTgsIDE5LCAyMjQsIDEwOSwgMTgsIDE5LCAxNTksIDIyNCwgMTA5LCAxOCwgMTksIDIyNCwgMTE3LCAxOCwgMTksIAorICAgIDE1OSwgMjI0LCAxMTcsIDE4LCAxOSwgMjI0LCAxMTYsIDE4LCAxOSwgMTU5LCAyMjQsIDExNiwgMTgsIDE5LCAyMTEsIDExNiwgCisgICAgMjI0LCAxMTYsIDE4LCAxOSwgMjI2LCAxMDksIDE4LCAxOSwgMTU5LCAyMjYsIDEwOSwgMTgsIDE5LCA3MywgMjQyLCA2NywgCisgICAgMTgsIDE5LCAyMTcsIDIzLCAxOCwgMTksIDIxNywgMTAwLCAxOCwgMTksIDIxNiwgMTE4LCAxOCwgMTksIDIxNiwgMTA0LCAKKyAgICAxOCwgMTksIDExMiwgMTgsIDE5LCAyMTYsIDE4LCAxOCwgMTksIDIxMSwgMTE2LCAyMTYsIDE4LCAxOCwgMTksIDczLCAyNDgsIAorICAgIDg1LCAxOCwgMTksIDczLCAyNDgsIDExLCAxOCwgMTksIDIxNywgMTA2LCAxOCwgMTksIDIxNywgMTAyLCAxOCwgMTksIDIxNSwgCisgICAgNzgsIDE4LCAxOSwgMTU5LCAyMTUsIDc4LCAxOCwgMTksIDIxNSwgNjIsIDE4LCAxOSwgMTU5LCAyMTUsIDYyLCAxOCwgMTksIAorICAgIDIxNSwgNjEsIDE4LCAxOSwgMTU5LCAyMTUsIDYxLCAxOCwgMTksIDEwNSwgMTgsIDE5LCAxNTksIDEwNSwgMTgsIDE5LCAKKyAgICAyMTUsIDU0LCAxOCwgMTksIDE1OSwgMjE1LCA1NCwgMTgsIDE5LCAyMTUsIDgwLCAxOCwgMTksIDE1OSwgMjE1LCA4MCwgMTgsIAorICAgIDE5LCAyMTUsIDc5LCAxOCwgMTksIDE1OSwgMjE1LCA3OSwgMTgsIDE5LCAyMjksIDE5NSwgMjE1LCA3OSwgMTgsIDE5LCAKKyAgICAyMTcsIDE1MywgMTgsIDE5LCAyMTUsIDE1MiwgMTgsIDE5LCAyMTUsIDEzNiwgMTgsIDE5LCAyMTUsIDEzNCwgMTgsIDE5LCAKKyAgICAyMTUsIDE1NywgMTgsIDE5LCAyMzQsIDE4OCwgMTgsIDE5LCAyMzUsIDEzLCAxOCwgMTksIDIzNCwgOTgsIDE4LCAxOSwgCisgICAgMjM0LCA4OSwgMTgsIDE5LCAyMzQsIDM0LCAxOCwgMTksIDIzNCwgMTYsIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTYsIDE4LCAKKyAgICAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTYsIDE4LCAxOSwgMjMzLCAxODQsIDE4LCAxOSwgMTU5LCAyMzMsIDE4NCwgMTgsIAorICAgIDE5LCAyMzMsIDE4MiwgMTgsIDE5LCAxNTksIDIzMywgMTgyLCAxOCwgMTksIDIzMywgMTgxLCAxOCwgMTksIDE1OSwgMjMzLCAKKyAgICAxODEsIDE4LCAxOSwgMjMzLCAxODAsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MCwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAKKyAgICAxNTksIDIzMywgMTc5LCAxOCwgMTksIDIzMywgMTg4LCAxOCwgMTksIDE1OSwgMjMzLCAxODgsIDE4LCAxOSwgMjMzLCAxODcsIAorICAgIDE4LCAxOSwgMTU5LCAyMzMsIDE4NywgMTgsIDE5LCAyMjksIDE5NSwgMjMzLCAxODcsIDE4LCAxOSwgMjM1LCAyOSwgMTgsIAorICAgIDE5LCAyMzMsIDE4OSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDE4MiwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDkwLCAxOCwgCisgICAgMTksIDIxOSwgMjksIDIzNCwgMjksIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCAyNTQsIDE4LCAxOSwgMjUwLCAxOTgsIDE4LCAKKyAgICAxOSwgMjUxLCAzOSwgMTgsIDE5LCAyNTAsIDU5LCAxOCwgMTksIDI1MCwgNDksIDE4LCAxOSwgMjQ5LCAyNDYsIDE4LCAxOSwgCisgICAgMjQ5LCAxODIsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTgyLCAxOCwgMTksIDI1MSwgNDEsIDE4LCAxOSwgMjUxLCA0MCwgCisgICAgMTgsIDE5LCAyNDksIDg3LCAxOCwgMTksIDE1OSwgMjQ5LCA4NywgMTgsIDE5LCAyNDksIDg1LCAxOCwgMTksIDE1OSwgMjQ5LCAKKyAgICA4NSwgMTgsIDE5LCAyNDksIDg0LCAxOCwgMTksIDE1OSwgMjQ5LCA4NCwgMTgsIDE5LCAyNDksIDgzLCAxOCwgMTksIDE1OSwgCisgICAgMjQ5LCA4MywgMTgsIDE5LCAyNDksIDgyLCAxOCwgMTksIDE1OSwgMjQ5LCA4MiwgMTgsIDE5LCAyNDksIDg5LCAxOCwgMTksIAorICAgIDE1OSwgMjQ5LCA4OSwgMTgsIDE5LCAyNDksIDg4LCAxOCwgMTksIDE1OSwgMjQ5LCA4OCwgMTgsIDE5LCAyMjksIDE5NSwgCisgICAgMjQ5LCA4OCwgMTgsIDE5LCAyNTEsIDc0LCAxOCwgMTksIDIyMSwgMjExLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzEsIDk2LCAKKyAgICAxOCwgMTksIDIzMSwgMjQxLCAxOCwgMTksIDIzMCwgMjM1LCAxOCwgMTksIDIzMCwgMjA2LCAxOCwgMTksIDIzMCwgMTY2LCAKKyAgICAxOCwgMTksIDIzMCwgMTM3LCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzNywgMTgsIDE5LCAxODYsIDE4LCAxOSwgMjMxLCAKKyAgICAyNDIsIDE4LCAxOSwgMjMwLCA0NSwgMTgsIDE5LCAxNTksIDIzMCwgNDUsIDE4LCAxOSwgMjMwLCA0MywgMTgsIDE5LCAxNTksIAorICAgIDIzMCwgNDMsIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAKKyAgICAxNTksIDIzMCwgNDEsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgMjMwLCA0NywgMTgsIAorICAgIDE5LCAxNTksIDIzMCwgNDcsIDE4LCAxOSwgMjMwLCA0NiwgMTgsIDE5LCAxNTksIDIzMCwgNDYsIDE4LCAxOSwgMjI5LCAKKyAgICAxOTUsIDIzMCwgNDYsIDE4LCAxOSwgMTk0LCAxOCwgMTksIDE1OSwgMTk0LCAxOCwgMTksIDIzMCwgMjM5LCAxOCwgMTksIAorICAgIDI1MywgMjEzLCAxOTQsIDE4LCAxOSwgMjIxLCAyMTEsIDE5NCwgMTgsIDE5LCAyMjksIDExMiwgMTgsIDE5LCAyMjksIDIyOSwgCisgICAgMTgsIDE5LCAyMjgsIDIzOCwgMTgsIDE5LCAyMjgsIDIxMywgMTgsIDE5LCAyMjgsIDc5LCAxOCwgMTksIDIyOCwgNjksIDE4LCAKKyAgICAxOSwgMjExLCAxMTYsIDIyOCwgNjksIDE4LCAxOSwgMTk4LCAxOCwgMTksIDIyOSwgMjMwLCAxOCwgMTksIDIyNywgMTc2LCAKKyAgICAxOCwgMTksIDE1OSwgMjI3LCAxNzYsIDE4LCAxOSwgMjI3LCAxNzgsIDE4LCAxOSwgMTU5LCAyMjcsIDE3OCwgMTgsIDE5LCAKKyAgICAyMjcsIDE3NywgMTgsIDE5LCAxNTksIDIyNywgMTc3LCAxOCwgMTksIDIyOSwgMTk1LCAyMjcsIDE3NywgMTgsIDE5LCAyMzAsIAorICAgIDMwLCAxOCwgMTksIDczLCAyMjksIDg0LCAxOCwgMTksIDIyOCwgMjQzLCAxOCwgMTksIDIzMywgNjQsIDE4LCAxOSwgMjMzLCAKKyAgICAxMzksIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyMzMsIDE4LCAxOSwgMjMyLCAxNjIsIDE4LCAxOSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTMzLCAxOCwgMTksIDIzMywgMTQxLCAxOCwgMTksIDIzMywgMTQwLCAxOCwgCisgICAgMTksIDIzMiwgNzMsIDE4LCAxOSwgMTU5LCAyMzIsIDczLCAxOCwgMTksIDIzMiwgNzIsIDE4LCAxOSwgMTU5LCAyMzIsIDcyLCAKKyAgICAxOCwgMTksIDIzMiwgNzEsIDE4LCAxOSwgMTU5LCAyMzIsIDcxLCAxOCwgMTksIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgMTksIDIzMiwgNzUsIDE4LCAxOSwgMTU5LCAKKyAgICAyMzIsIDc1LCAxOCwgMTksIDIzMiwgNzQsIDE4LCAxOSwgMTU5LCAyMzIsIDc0LCAxOCwgMTksIDE1NiwgMTgsIDE5LCAxNTksIAorICAgIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MywgMTgsIDE5LCAyMjIsIDMxLCAxOCwgMTksIDIxOSwgCisgICAgMTkzLCAxOCwgMTksIDIxOSwgMTc3LCAxOCwgMTksIDIxOSwgNjAsIDE4LCAxOSwgMjE5LCA0MiwgMTgsIDE5LCAyMTEsIAorICAgIDExNiwgMjE5LCA0MiwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMywgMTgsIDE5LCAyMTcsIDI1MCwgMTgsIDE5LCAKKyAgICAxNTksIDIxNywgMjUwLCAxOCwgMTksIDIxNywgMjQ0LCAxOCwgMTksIDE1OSwgMjE3LCAyNDQsIDE4LCAxOSwgMjE3LCAyNDMsIAorICAgIDE4LCAxOSwgMTU5LCAyMTcsIDI0MywgMTgsIDE5LCAyMTcsIDIzOSwgMTgsIDE5LCAxNTksIDIxNywgMjM5LCAxOCwgMTksIAorICAgIDIxNywgMjM4LCAxOCwgMTksIDE1OSwgMjE3LCAyMzgsIDE4LCAxOSwgMjE3LCAyNTQsIDE4LCAxOSwgMTU5LCAyMTcsIDI1NCwgCisgICAgMTgsIDE5LCAyMTcsIDI1MywgMTgsIDE5LCAxNTksIDIxNywgMjUzLCAxOCwgMTksIDIyOSwgMTk1LCAyMTcsIDI1MywgMTgsIAorICAgIDE5LCAyMjIsIDkzLCAxOCwgMTksIDI1MywgMjEzLCAyMjIsIDkzLCAxOCwgMTksIDIxNywgMjU1LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAyMjIsIDkzLCAxOCwgMTksIDIzMCwgMTMyLCAyMTksIDExMCwgMTgsIDE5LCAyMjksIDE5NSwgMjE5LCAxMDEsIDE4LCAKKyAgICAxOSwgMjI5LCAxOTUsIDIyMiwgOTEsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgMjM3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTgsIAorICAgIDg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMCwgMTgsIDE5LCAyMjksIDE5NSwgMjIxLCAxODYsIDE4LCAxOSwgMjIwLCAKKyAgICA2NSwgMTgsIDE5LCAyMjAsIDM0LCAxOCwgMTksIDIyMCwgMjksIDE4LCAxOSwgMjIwLCA5LCAxOCwgMTksIDIyMCwgMywgMTgsIAorICAgIDE5LCAyMjAsIDEwNCwgMTgsIDE5LCAyMjAsIDEwMCwgMTgsIDE5LCAyMTksIDIwOCwgMTgsIDE5LCAxNTksIDIxOSwgMjA4LCAKKyAgICAxOCwgMTksIDIxOSwgMjA3LCAxOCwgMTksIDE1OSwgMjE5LCAyMDcsIDE4LCAxOSwgMjE5LCAyMDYsIDE4LCAxOSwgMTU5LCAKKyAgICAyMTksIDIwNiwgMTgsIDE5LCAyMTksIDIwNSwgMTgsIDE5LCAxNTksIDIxOSwgMjA1LCAxOCwgMTksIDIxOSwgMjA0LCAxOCwgCisgICAgMTksIDE1OSwgMjE5LCAyMDQsIDE4LCAxOSwgMjE5LCAyMTAsIDE4LCAxOSwgMTU5LCAyMTksIDIxMCwgMTgsIDE5LCAyMTksIAorICAgIDIwOSwgMTgsIDE5LCAxNTksIDIxOSwgMjA5LCAxOCwgMTksIDIyMCwgMTA2LCAxOCwgMTksIDIxMSwgNDcsIDE4LCAxOSwgCisgICAgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgMjQ0LCAxOCwgMTksIAorICAgIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTIsIDE4LCAxOSwgMjExLCAxMDMsIDE4LCAKKyAgICAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIDE5LCAxNTksIDIxMCwgCisgICAgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAxNzEsIDE4LCAxOSwgCisgICAgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgMTksIDIxMCwgMTc2LCAKKyAgICAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NSwgMTgsIDE5LCAKKyAgICAyMjksIDE5NSwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCAxMiwgMjExLCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMTEsIDExNywgMTgsIDE5LCAyMjEsIDIxMSwgMjExLCA4LCAxOCwgMTksIDIyMywgMTMxLCAxOCwgMTksIDIyMywgCisgICAgMjI2LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIzMywgNjQsIDE4LCAxOSwgMjIzLCAxODYsIDE4LCAxOSwgMjIzLCAzOCwgCisgICAgMTgsIDE5LCAyMjIsIDI0MiwgMTgsIDE5LCAyMjIsIDIxMywgMTgsIDE5LCAyMjIsIDE5OSwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgMTYyLCAxOCwgMTksIDIwNSwgMTgsIDE5LCAyMjMsIDE4NywgMTgsIDE5LCAxNTksIDIzMywgMTQxLCAxOCwgMTksIDIyMiwgCisgICAgMTEwLCAxOCwgMTksIDE1OSwgMjIyLCAxMTAsIDE4LCAxOSwgMTUzLCAxOCwgMTksIDE1OSwgMTUzLCAxOCwgMTksIDE0NywgCisgICAgMTUzLCAxOCwgMTksIDI0NCwgMTYyLCAxOCwgMTksIDI0NCwgMjAxLCAxOCwgMTksIDI0NCwgMTI5LCAxOCwgMTksIDI0NCwgCisgICAgMTE2LCAxOCwgMTksIDI0NCwgNTEsIDE4LCAxOSwgMjQ0LCA0MiwgMTgsIDE5LCAyNDQsIDIwNCwgMTgsIDE5LCAyNDQsIAorICAgIDIwMywgMTgsIDE5LCAyNDMsIDIxOSwgMTgsIDE5LCAxNTksIDI0MywgMjE5LCAxOCwgMTksIDI0NSwgMTQsIDE4LCAxOSwgCisgICAgMjE2LCAxOTYsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxOTYsIDE4LCAxOSwgMjE2LCAxNzYsIDE4LCAxOSwgMjMwLCAyOCwgCisgICAgMjE2LCAxNzYsIDE4LCAxOSwgMjE2LCAxNzIsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAxNTcsIAorICAgIDE4LCAxOSwgMjE2LCAxNTQsIDE4LCAxOSwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAxMjgsIAorICAgIDE4LCAxOSwgMTU5LCAyMTYsIDEyOCwgMTgsIDE5LCAyMTYsIDIxMSwgMTgsIDE5LCAyMTUsIDE0MywgMTgsIDE5LCAyMTUsIAorICAgIDE0MSwgMTgsIDE5LCAyMTUsIDE0MCwgMTgsIDE5LCAyMTUsIDE0NSwgMTgsIDE5LCAyMTUsIDE0NiwgMTgsIDE5LCAyMTUsIAorICAgIDUyLCAxOCwgMTksIDIxNSwgNTEsIDE4LCAxOSwgMjE1LCA1MCwgMTgsIDE5LCAyMTUsIDUzLCAxOCwgMTksIDIyNywgMTk3LCAKKyAgICAyNDEsIDI0NSwgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxODcsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgMTY4LCAxOCwgMTksIAorICAgIDIyNywgMTk3LCAyNDEsIDc1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDYwLCAxOCwgMTksIDIyNywgMTk3LCAxNjIsIDE4LCAKKyAgICAxOSwgMjI3LCAxOTcsIDI0MiwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MiwgNjcsIDE4LCAxOSwgMjI3LCAxOTYsIDI0MiwgCisgICAgNjcsIDE4LCAxOSwgMjQxLCAxNjEsIDE4LCAxOSwgMjI0LCA4NywgMTgsIDE5LCAyMjQsIDU2LCAxOCwgMTksIDIyNCwgNTEsIAorICAgIDE4LCAxOSwgMjI0LCA0NSwgMTgsIDE5LCAyMjQsIDQwLCAxOCwgMTksIDIyNCwgOTEsIDE4LCAxOSwgMjI0LCA5MCwgMTgsIAorICAgIDE5LCAyMjQsIDk5LCAxOCwgMTksIDIxNiwgNTYsIDE4LCAxOSwgMjE2LCA1NCwgMTgsIDE5LCAyMTYsIDUzLCAxOCwgMTksIAorICAgIDIxNiwgNTcsIDE4LCAxOSwgMTU5LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIyMywgMzgsIDE4LCAxOSwgMTU5LCAyMjIsIAorICAgIDIxMywgMTgsIDE5LCAxNTksIDIwNSwgMTgsIDE5LCAyMjksIDgwLCAxOCwgMTksIDIyOSwgMzIsIDE4LCAxOSwgMjI5LCAyOCwgCisgICAgMTgsIDE5LCAyMjksIDksIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOSwgODIsIDE4LCAxOSwgMjI5LCA4MSwgMTgsIDE5LCAKKyAgICAyMjksIDg0LCAxOCwgMTksIDIyOCwgMTA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDY1LCAxOCwgMTksIDIyMSwgMjExLCAKKyAgICAyMjAsIDM0LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDksIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgMTA0LCAxOCwgMTksIAorICAgIDIxMSwgMjEzLCAyMTYsIDE5NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxNzYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCisgICAgMTU3LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMTEsIDE4LCAxOSwgMjMyLCAKKyAgICAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTIsIDE4LCAxOSwgMjMyLCAyNTEsIDE4LCAxOSwgMjMzLCAKKyAgICA0LCAxOCwgMTksIDIzMywgMywgMTgsIDE5LCAyMzMsIDUsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTk2LCAxOCwgMTksIAorICAgIDIxNiwgMjEwLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgCisgICAgMTU3LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAKKyAgICAyMTAsIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIxMSwgMTgsIDE5LCAyNTQsIDE5OCwgMjUzLCAxNjYsIAorICAgIDE4LCAxOSwgMjUxLCAyMjYsIDc2LCAxOCwgMTksIDI1MSwgMjI2LCA3NCwgMTgsIDE5LCAyNTEsIDIyNiwgNzgsIDE4LCAxOSwgCisgICAgMjUxLCAyMjYsIDYxLCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDIyLCAxOCwgMTksIDI1MSwgMjI2LCAyMTEsIDI1MCwgMTgsIAorICAgIDE5LCAyNTEsIDIyNiwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOSwgCisgICAgMTEyLCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDIzOCwgMTgsIDE5LCAyNTEsIDIyNiwgMjI4LCA3OSwgMTgsIDE5LCAyNTEsIAorICAgIDIyNiwgMTk4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDE4OCwgMTgsIDE5LCAyNTEsIDIyNiwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgMjM0LCAzNCwgMTgsIDE5LCAyNTEsIDIyNiwgMTc2LCAxOCwgMTksIDIyMSwgMjExLCAyNDEsIDI0NSwgMTgsIAorICAgIDE5LCAyMjEsIDIxMSwgMjQxLCAxODcsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgNzUsIDE4LCAxOSwgMjIxLCAyMTEsIDE2MiwgCisgICAgMTgsIDE5LCA3MywgMjQyLCAyMjcsIDE4LCAxOSwgNzMsIDI0MiwgMjMxLCAxOCwgMTksIDczLCAyNDIsIDI0MywgMTgsIDE5LCAKKyAgICA3MywgMjQyLCAyNDIsIDE4LCAxOSwgNzMsIDI0MiwgMjMyLCAxOCwgMTksIDczLCAyNDMsIDAsIDE4LCAxOSwgNzMsIDIyMiwgCisgICAgMTQyLCAxOCwgMTksIDczLCAyMjIsIDIxMywgMTgsIDE5LCA3MywgMjIzLCAxMzEsIDE4LCAxOSwgNzMsIDIyMywgMTExLCAKKyAgICAxOCwgMTksIDczLCAyMjMsIDM4LCAxOCwgMTksIDczLCAyMDUsIDE4LCAxOSwgNzMsIDIxMSwgMTk1LCAxOCwgMTksIDczLCAKKyAgICAyMTEsIDIyNywgMTgsIDE5LCA3MywgMjEyLCAyMiwgMTgsIDE5LCA3MywgMjEyLCAxNywgMTgsIDE5LCA3MywgMjExLCAyNTAsIAorICAgIDE4LCAxOSwgNzMsIDIxMiwgNjUsIDE4LCAxOSwgNzMsIDI0MCwgMjAxLCAxOCwgMTksIDczLCAyNDAsIDIwMiwgMTgsIDE5LCAKKyAgICA3MywgMjQwLCAyMDUsIDE4LCAxOSwgNzMsIDI0MCwgMjA0LCAxOCwgMTksIDczLCAyNDAsIDIwMywgMTgsIDE5LCA3MywgCisgICAgMjQwLCAyMDcsIDE4LCAxOSwgNzMsIDIxNiwgMTM3LCAxOCwgMTksIDczLCAyMTYsIDE1NywgMTgsIDE5LCA3MywgMjE2LCAKKyAgICAxOTYsIDE4LCAxOSwgNzMsIDIxNiwgMTk1LCAxOCwgMTksIDczLCAyMTYsIDE3NiwgMTgsIDE5LCA3MywgMjE2LCAyMDksIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTI0LCAxOCwgMTksIDczLCAyMTUsIDEzNCwgMTgsIDE5LCA3MywgMjE1LCAxNTIsIDE4LCAxOSwgCisgICAgNzMsIDIxNSwgMTUxLCAxOCwgMTksIDczLCAyMTUsIDEzNiwgMTgsIDE5LCA3MywgMjE1LCAxNTcsIDE4LCAxOSwgNzMsIAorICAgIDIyNCwgMTUzLCAxOCwgMTksIDczLCAyMjUsIDE5LCAxOCwgMTksIDczLCAyMjUsIDIyNCwgMTgsIDE5LCA3MywgMjI1LCAKKyAgICAyMTQsIDE4LCAxOSwgNzMsIDIyNSwgMTExLCAxOCwgMTksIDczLCAxOTEsIDE4LCAxOSwgNzMsIDIyNiwgMTA5LCAxOCwgMTksIAorICAgIDczLCAyNDIsIDEyMCwgMTgsIDE5LCA3MywgMjQyLCAxODEsIDE4LCAxOSwgNzMsIDI0MywgNjksIDE4LCAxOSwgNzMsIDI0MywgCisgICAgNjIsIDE4LCAxOSwgNzMsIDI0MiwgMjIxLCAxOCwgMTksIDczLCAyNDMsIDE0MiwgMTgsIDE5LCA3MywgMjM0LCAxMDYsIDE4LCAKKyAgICAxOSwgNzMsIDIzNCwgMTExLCAxOCwgMTksIDczLCAyMzQsIDEyNSwgMTgsIDE5LCA3MywgMjM0LCAxMjQsIDE4LCAxOSwgNzMsIAorICAgIDIzNCwgMTE4LCAxOCwgMTksIDczLCAyMzQsIDEzOCwgMTgsIDE5LCA3MywgMjM0LCA0NywgMTgsIDE5LCA3MywgMjM0LCA0OCwgCisgICAgMTgsIDE5LCA3MywgMjM0LCA1MSwgMTgsIDE5LCA3MywgMjM0LCA1MCwgMTgsIDE5LCA3MywgMjM0LCA0OSwgMTgsIDE5LCAKKyAgICA3MywgMjM0LCA1MiwgMTgsIDE5LCA3MywgMjM0LCA1MywgMTgsIDE5LCA3MywgMjI3LCAyNDIsIDE4LCAxOSwgNzMsIDIyOCwgCisgICAgNzksIDE4LCAxOSwgNzMsIDIyOSwgMTEyLCAxOCwgMTksIDczLCAyMjksIDEwOCwgMTgsIDE5LCA3MywgMjI4LCAyMzgsIDE4LCAKKyAgICAxOSwgNzMsIDE5OCwgMTgsIDE5LCA3MywgMjMwLCAxMDcsIDE4LCAxOSwgNzMsIDIzMCwgMTY2LCAxOCwgMTksIDczLCAyMzEsIAorICAgIDk2LCAxOCwgMTksIDczLCAyMzEsIDg1LCAxOCwgMTksIDczLCAyMzAsIDIzNSwgMTgsIDE5LCA3MywgMTg2LCAxOCwgMTksIAorICAgIDczLCAyMTAsIDIxMiwgMTgsIDE5LCA3MywgMjEwLCAyNDQsIDE4LCAxOSwgNzMsIDIxMSwgNDcsIDE4LCAxOSwgNzMsIDIxMSwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDIxMSwgOCwgMTgsIDE5LCA3MywgMTkyLCAxOCwgMTksIDczLCAyMzUsIDU3LCAxOCwgMTksIAorICAgIDIyMSwgMjExLCAyMzUsIDU3LCAxOCwgMTksIDczLCAyMzUsIDc0LCAxOCwgMTksIDczLCAyMzUsIDEzMiwgMTgsIDE5LCA3MywgCisgICAgMjM1LCAxMzAsIDE4LCAxOSwgNzMsIDIzNSwgMTE0LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDExNCwgMTgsIDE5LCA3MywgCisgICAgMjM1LCAxNDcsIDE4LCAxOSwgNzMsIDIzNSwgODcsIDE4LCAxOSwgNzMsIDIzNSwgOTEsIDE4LCAxOSwgNzMsIDIzNSwgMTAxLCAKKyAgICAxOCwgMTksIDczLCAyMzUsIDEwMCwgMTgsIDE5LCA3MywgMjM1LCA5OSwgMTgsIDE5LCA3MywgMjM1LCAxMDIsIDE4LCAxOSwgCisgICAgNzMsIDIzMiwgMTAzLCAxOCwgMTksIDczLCAyMzIsIDE2MiwgMTgsIDE5LCA3MywgMjMzLCA2NCwgMTgsIDE5LCA3MywgMjMzLCAKKyAgICA1NiwgMTgsIDE5LCA3MywgMjMyLCAyNDcsIDE4LCAxOSwgNzMsIDIzMywgMTQxLCAxOCwgMTksIDczLCAyNDcsIDE1NywgMTgsIAorICAgIDE5LCA3MywgMjQ3LCAxNTgsIDE4LCAxOSwgNzMsIDI0NywgMTYzLCAxOCwgMTksIDczLCAyNDcsIDE2MiwgMTgsIDE5LCA3MywgCisgICAgMjQ3LCAxNTksIDE4LCAxOSwgNzMsIDI0NywgMTY0LCAxOCwgMTksIDczLCAyMzIsIDI1MCwgMTgsIDE5LCA3MywgMjMyLCAKKyAgICAyNTIsIDE4LCAxOSwgNzMsIDIzMywgMCwgMTgsIDE5LCA3MywgMjMyLCAyNTUsIDE4LCAxOSwgNzMsIDIzMiwgMjU0LCAxOCwgCisgICAgMTksIDczLCAyMzMsIDQsIDE4LCAxOSwgNzMsIDIxNiwgNTEsIDE4LCAxOSwgNzMsIDIxNiwgNTMsIDE4LCAxOSwgNzMsIAorICAgIDIxNiwgNTYsIDE4LCAxOSwgNzMsIDIxNiwgNTUsIDE4LCAxOSwgNzMsIDIxNiwgNTQsIDE4LCAxOSwgNzMsIDIxNiwgNTcsIAorICAgIDE4LCAxOSwgNzMsIDIxNiwgNDYsIDE4LCAxOSwgNzMsIDIxNiwgNDcsIDE4LCAxOSwgNzMsIDIxNiwgNTksIDE4LCAxOSwgCisgICAgNzMsIDIxNiwgNTgsIDE4LCAxOSwgNzMsIDIxNiwgNDgsIDE4LCAxOSwgNzMsIDIxNiwgNjAsIDE4LCAxOSwgNzMsIDIxMCwgCisgICAgMTMsIDE4LCAxOSwgNzMsIDIxMCwgMjMsIDE4LCAxOSwgNzMsIDIxMCwgOTQsIDE4LCAxOSwgNzMsIDIxMCwgOTIsIDE4LCAKKyAgICAxOSwgNzMsIDIxMCwgNDQsIDE4LCAxOSwgNzMsIDIxMCwgMTE2LCAxOCwgMTksIDczLCAyMTAsIDE1OSwgMTgsIDE5LCA3MywgCisgICAgNjUsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAyNDYsIDM2LCAxOCwgMTksIDczLCAyNDYsIDM3LCAxOCwgMTksIDczLCAyNDYsIAorICAgIDQ0LCAxOCwgMTksIDczLCAyNDYsIDQzLCAxOCwgMTksIDczLCAyNDYsIDM5LCAxOCwgMTksIDczLCAyNDYsIDQ2LCAxOCwgCisgICAgMTksIDczLCAyMTgsIDg0LCAxOCwgMTksIDczLCAyMTksIDYwLCAxOCwgMTksIDczLCAyMjEsIDE4MywgMTgsIDE5LCA3MywgCisgICAgMjIxLCAxNzIsIDE4LCAxOSwgNzMsIDIxOSwgMTkzLCAxOCwgMTksIDczLCAyMDYsIDE4LCAxOSwgNzMsIDIxOSwgMjI3LCAKKyAgICAxOCwgMTksIDczLCAyMjAsIDksIDE4LCAxOSwgNzMsIDIyMCwgNjUsIDE4LCAxOSwgNzMsIDIyMCwgNjMsIDE4LCAxOSwgNzMsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgNzMsIDIyMCwgMTA0LCAxOCwgMTksIDczLCAyMjAsIDEwNiwgMTgsIDE5LCA3MywgMjE1LCAKKyAgICAxNjQsIDE4LCAxOSwgNzMsIDIxNSwgMTY3LCAxOCwgMTksIDczLCAyMTUsIDE3OSwgMTgsIDE5LCA3MywgMjE1LCAxNzgsIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTY4LCAxOCwgMTksIDczLCAyMTUsIDE4NCwgMTgsIDE5LCA3MywgMjUwLCA3NywgMTgsIDE5LCAKKyAgICA3MywgMjUwLCA5NCwgMTgsIDE5LCA3MywgMjUwLCAxMzksIDE4LCAxOSwgNzMsIDI1MCwgMTM2LCAxOCwgMTksIDczLCAyNTAsIAorICAgIDExOCwgMTgsIDE5LCA3MywgMjUwLCAxNjUsIDE4LCAxOSwgNzMsIDIxNSwgMTI3LCAxOCwgMTksIDczLCAyMTUsIDEyOCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMzEsIDE4LCAxOSwgNzMsIDIxNSwgMTMwLCAxOCwgMTksIDczLCAyMTUsIDEyOSwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxMzIsIDE4LCAxOSwgMjUwLCAxMTksIDUwLCAxOCwgMTksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjQsIDgzLCAxOCwgMTksIDIyOSwgNzgsIDE4LCAxOSwgMjI4LCAxMDUsIDE4LCAxOSwgMjI4LCAxMDQsIDE4LCAxOSwgCisgICAgMjI4LCAxMDMsIDE4LCAxOSwgMjI4LCAxMDIsIDE4LCAxOSwgMjI4LCAxMDcsIDE4LCAxOSwgMjI4LCAxMDYsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTI2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxMjQsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIzLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMiwgMTgsIDE5LCAyMTEsIAorICAgIDIxMywgMjE2LCAxMjksIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI4LCAxOCwgMTksIDIxMSwgMjEzLCA0MCwgMjE2LCAKKyAgICAyMTEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgOTgsIDIyNiwgMjMwLCAyMTksIDIxLCA3OSwgMjI2LCAyMzAsIDEsIDI1MiwgCisgICAgNTYsIDIyNiwgMjMwLCAxLCAyMzIsIDkyLCAyMjYsIDIzMCwgMSwgMjQ0LCAxNTksIDIyNiwgMjMwLCAxLCAyMjIsIDE3LCAKKyAgICAyMjYsIDIzMCwgMSwgMjI4LCAxOTgsIDIyNiwgMjMwLCAxLCAyMTQsIDIyNiwgMjI2LCAyMzAsIDEsIDI0OCwgMjA1LCAyMjYsIAorICAgIDIzMCwgMSwgMjE2LCA4MSwgMjI2LCAyMzAsIDEsIDI0OSwgMjM3LCAyMjYsIDIzMCwgMSwgMjUwLCAxODgsIDIyNiwgMjMwLCAKKyAgICAxLCAyMzAsIDk2LCAyMjYsIDIzMCwgMSwgMjQyLCAxNjMsIDIyNiwgMjMwLCAxLCAyMjksIDY4LCAyMjYsIDIzMCwgMSwgCisgICAgMjE4LCAxMjQsIDIyNiwgMjMwLCAxLCAyMjIsIDEzNywgMjI2LCAyMzAsIDEsIDI1NCwgMjA3LCAyMjYsIDIzMCwgMSwgMjI2LCAKKyAgICAxOTEsIDIyNiwgMjMwLCAxLCAyMTQsIDE1MCwgMjI2LCAyMzAsIDEsIDI0NSwgMjM5LCAyMjYsIDIzMCwgMSwgMjM1LCAxOTUsIAorICAgIDIyNiwgMjMwLCAxLCAyNDUsIDI0MCwgMjI2LCAyMzAsIDEsIDIyNiwgMTYyLCAyMjYsIDIzMCwgMSwgMjE0LCAyMDYsIDIyNiwgCisgICAgMjMwLCAxLCAyMzYsIDQ2LCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzcsIDIyNiwgMjMwLCAxLCAyMjUsIDIwNSwgMjI2LCAyMzAsIAorICAgIDI0NCwgMTU4LCA3OSwgMjI2LCAyMzAsIDIyMywgNTIsIDI0NCwgMTU4LCA3OSwgMTc4LCAxLCAyNDQsIDE0OSwgMjQ0LCAKKyAgICAxNDEsIDI0NCwgMTYzLCAyNDUsIDE0LCAxNzgsIDEsIDIxNCwgMTA1LCAxNzgsIDEsIDIxNCwgMTM1LCAyMTQsIDE1MSwgNjksIAorICAgIDE3OCwgMSwgMjEwLCAyMTQsIDE3OCwgMSwgMjExLCAxMTcsIDE3OCwgMSwgMjEyLCA5OCwgMTc4LCAxLCAyMTYsIDEzMSwgCisgICAgMjE2LCAxMzAsIDIxNiwgMTUyLCAxNzgsIDEsIDI0NSwgNjcsIDE3OCwgMSwgMjU0LCAxMDEsIDYxLCAxNzgsIDEsIDIyNiwgCisgICAgMTQ3LCA3OCwgMTc4LCAxLCAyNTUsIDI2LCA2MSwgMTc4LCAxLCAyNTQsIDIzNiwgMTc4LCAxLCAyMzIsIDEzOSwgNzgsIAorICAgIDE3OCwgMSwgMjE5LCAyNDYsIDc4LCAxNzgsIDEsIDc4LCAxNzgsIDEsIDIyNiwgMjM4LCAxNzgsIDEsIDIyNiwgMjAwLCAKKyAgICAxNzgsIDEsIDIyMywgMTY3LCAyMjMsIDE4MCwgMjIzLCA5NywgMTUzLCAxNzgsIDEsIDIzNCwgMTk5LCAxNzgsIDEsIDI1MCwgCisgICAgMTg1LCAxNzgsIDEsIDIzNCwgMjAwLCAyMzUsIDI5LCAxNzgsIDEsIDI0MywgMjA5LCAxNzgsIDEsIDI0NSwgMTQ2LCAxNzgsIAorICAgIDEsIDI0MywgNjUsIDI0MiwgNzMsIDI0MywgMjA5LCAxNzgsIDEsIDI0MywgMTAzLCAxNzgsIDEsIDIxMSwgMTg4LCAyMTEsIAorICAgIDE4MiwgMjEyLCA5OCwgMTc4LCAxLCAyNDIsIDQ1LCAyNDIsIDY3LCAxNzgsIDEsIDI0MiwgNDksIDI0MiwgNjcsIDE3OCwgMSwgCisgICAgMjMyLCAxNDEsIDI0MiwgNjcsIDE3OCwgMSwgMjE5LCAyNDksIDI0MiwgNjcsIDE3OCwgMSwgMjI5LCAxOTAsIDIyNywgMTYxLCAKKyAgICAyMjksIDE5MSwgMjMwLCAzMCwgMTc4LCAxLCAyMTksIDI0NywgMjMwLCAzMCwgMTc4LCAxLCAyNDYsIDEyMywgMTc4LCAxLCAKKyAgICAyMzUsIDE3NSwgMjM1LCAxNzksIDIzNSwgMTY4LCA3NCwgMTc4LCAxLCA3NiwgMTc4LCAxLCAyMzUsIDEyMywgMjM1LCAxNTAsIAorICAgIDE3OCwgMSwgMjQzLCA1MCwgMTc4LCAxLCAyMzIsIDE0MiwgMjU0LCAyNTIsIDE3OCwgMSwgMjE5LCAyNTEsIDYxLCAxNzgsIAorICAgIDEsIDIzNSwgMTYwLCAyNDUsIDEyMSwgMTc4LCAxLCAyMjUsIDE2NywgMjI1LCAxODksIDIyNiwgMTA5LCAxNzgsIDEsIDI1NCwgCisgICAgMTcyLCAyNDUsIDExOSwgMTc4LCAxLCAyMTksIDI2LCAyMjIsIDkzLCAxNzgsIDEsIDIxOSwgMTgxLCAyMzIsIDEzOCwgMjIyLCAKKyAgICA5MywgMTc4LCAxLCAyMTksIDI0NSwgMjIyLCA5MywgMTc4LCAxLCAyNTEsIDc0LCAxNzgsIDEsIDIxMCwgMTU5LCAxNzgsIDEsIAorICAgIDIxNiwgNjQsIDIxNiwgNzQsIDIxNSwgNDEsIDIxNywgMTUzLCAxNzgsIDEsIDIxOSwgMjQ0LCAyMTcsIDE1MywgMTc4LCAxLCAKKyAgICAyNDksIDY4LCAxNzgsIDEsIDI1MiwgMzksIDI1MiwgNDIsIDI1MSwgMjMyLCAyNTMsIDE2NiwgMTc4LCAxLCAyMTksIDI1MCwgCisgICAgMjUzLCAxNjYsIDE3OCwgMSwgMjQ2LCAxMjIsIDE3OCwgMSwgMjI2LCAxNzUsIDE3OCwgMSwgMjQ1LCAyMDQsIDI0NSwgMjA2LCAKKyAgICA3NiwgMTc4LCAxLCAyMzEsIDE4MywgMjMxLCAxOTEsIDE5NCwgMTc4LCAxLCAyMzIsIDE0MCwgMTk0LCAxNzgsIDEsIDIxOSwgCisgICAgMjQ4LCAxOTQsIDE3OCwgMSwgMjMzLCA3OSwgMjMzLCAxMjAsIDIzMiwgMTQ5LCAxNTYsIDE3OCwgMSwgMjQ2LCAxMjQsIAorICAgIDE3OCwgMSwgMjM1LCAyMzcsIDE3OCwgMSwgMjM1LCAyMzgsIDE3OCwgMSwgMjQ4LCAyMTgsIDI0OCwgMjIzLCAyNDksIDY4LCAKKyAgICAxNzgsIDEsIDIyNiwgMTQyLCAyNDUsIDY2LCA3OCwgMTc4LCAxLCAyNDUsIDIzNSwgMTc4LCAxLCAyMzUsIDE5NCwgMTc4LCAKKyAgICAxLCAyNDksIDg2LCAxNzgsIDEsIDI1MSwgMjUsIDE3OCwgMSwgMjUwLCAxOTcsIDE3OCwgMSwgMjE4LCAxNjMsIDE3OCwgMSwgCisgICAgMjMyLCAxMzcsIDE3OCwgMSwgMjE5LCAyNDMsIDE3OCwgMSwgMjQwLCAxMTcsIDE3OCwgMSwgMjI0LCA5OSwgMTc4LCAxLCAKKyAgICAyMTEsIDE3OCwgMTc4LCAyMTksIDE1NywgMjI0LCAxNDMsIDE3OCwgMjMwLCA5MCwgMjI0LCAxNDMsIDE3OCwgMjQ5LCAxMzksIAorICAgIDIyNCwgMTQzLCAxNzgsIDI1NCwgMTQsIDg3LCAxNzgsIDIxNSwgODIsIDg3LCAxNzgsIDI1MiwgNTQsIDg3LCAyMTcsIDg0LCAKKyAgICAxLCA2MSwgMjE3LCA4NCwgMSwgNzQsIDIxNywgODQsIDEsIDY5LCAyMTcsIDg0LCAxLCAxNzYsIDIxNywgODQsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDg0LCAxLCAyMjksIDgyLCAyMTcsIDg0LCAxLCAyMTcsIDEwNiwgMjE3LCA4NCwgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODQsIDEsIDE5OCwgMjE3LCA4NCwgMSwgMTkxLCAyMTcsIDg0LCAxLCAyNTIsIDE5OSwgMjE3LCA4NCwgMSwgMTg2LCAKKyAgICAyMTcsIDg0LCAxLCAxOTIsIDIxNywgODQsIDEsIDIzMywgMTQxLCAyMTcsIDg0LCAxLCAyMTIsIDY1LCAyMTcsIDg0LCAxLCAKKyAgICAyMDYsIDIxNywgODQsIDEsIDE2MiwgMjE3LCA4NCwgMjUsIDUsIDc0LCAyMTcsIDg0LCAyNSwgNSwgNjksIDIxNywgODQsIDUsIAorICAgIDIxMywgMTUyLCAyNDIsIDE0LCAxLCA2MSwgMjQyLCAxNCwgMSwgNzQsIDI0MiwgMTQsIDEsIDY5LCAyNDIsIDE0LCAxLCAKKyAgICAxNzYsIDI0MiwgMTQsIDEsIDI0MywgMTQyLCAyNDIsIDE0LCAxLCAyMjksIDgyLCAyNDIsIDE0LCAxLCAyMTcsIDEwNiwgCisgICAgMjQyLCAxNCwgMSwgMjQ4LCAyMjksIDI0MiwgMTQsIDEsIDE5OCwgMjQyLCAxNCwgMSwgMTkxLCAyNDIsIDE0LCAxLCAyNTIsIAorICAgIDE5OSwgMjQyLCAxNCwgMSwgMTg2LCAyNDIsIDE0LCAxLCAxOTIsIDI0MiwgMTQsIDEsIDIwNSwgMjQyLCAxNCwgMSwgMjMzLCAKKyAgICAxNDEsIDI0MiwgMTQsIDEsIDIxMiwgNjUsIDI0MiwgMTQsIDEsIDIwNiwgMjQyLCAxNCwgMSwgMTYyLCAyNDIsIDE0LCAyNSwgCisgICAgNSwgNzQsIDI0MiwgMTQsIDI1LCA1LCA2OSwgMjQyLCAxNCwgNSwgMjI2LCA1MywgMjI1LCAxMjksIDIxOSwgMTU3LCAyMjQsIAorICAgIDE0MywgMjI1LCAxMjksIDUyLCAyMjQsIDE0MywgMjUxLCAxMjgsIDEsIDYxLCAyNTEsIDEyOCwgMSwgNzQsIDI1MSwgMTI4LCAKKyAgICAxLCA2OSwgMjUxLCAxMjgsIDEsIDE3NiwgMjUxLCAxMjgsIDEsIDI0MywgMTQyLCAyNTEsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUxLCAxMjgsIDEsIDIxNywgMTA2LCAyNTEsIDEyOCwgMSwgMjQ4LCAyMjksIDI1MSwgMTI4LCAxLCAxOTgsIDI1MSwgMTI4LCAKKyAgICAxLCAxOTEsIDI1MSwgMTI4LCAxLCAyNTIsIDE5OSwgMjUxLCAxMjgsIDEsIDE4NiwgMjUxLCAxMjgsIDEsIDE5MiwgMjUxLCAKKyAgICAxMjgsIDEsIDIwNSwgMjUxLCAxMjgsIDEsIDIzMywgMTQxLCAyNTEsIDEyOCwgMSwgMjEyLCA2NSwgMjUxLCAxMjgsIDEsIAorICAgIDIwNiwgMjUxLCAxMjgsIDEsIDE2MiwgMjUxLCAxMjgsIDI1LCA1LCA3NCwgMjUxLCAxMjgsIDI1LCA1LCA2OSwgMjE3LCA4MywgCisgICAgMSwgNjEsIDIxNywgODMsIDEsIDc0LCAyMTcsIDgzLCAxLCA2OSwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIAorICAgIDE0MiwgMjE3LCA4MywgMSwgMjI5LCA4MiwgMjE3LCA4MywgMSwgMjE3LCAxMDYsIDIxNywgODMsIDEsIDI0OCwgMjI5LCAKKyAgICAyMTcsIDgzLCAxLCAxOTgsIDIxNywgODMsIDEsIDE5MSwgMjE3LCA4MywgMSwgMjUyLCAxOTksIDIxNywgODMsIDEsIDE4NiwgCisgICAgMjE3LCA4MywgMSwgMTkyLCAyMTcsIDgzLCAxLCAyMzMsIDE0MSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgCisgICAgMjA2LCAyMTcsIDgzLCAyNSwgNSwgNzQsIDIxNywgODMsIDI1LCA1LCA2OSwgNzAsIDEsIDE3NiwgNzAsIDEsIDIzNCwgMTM4LCAKKyAgICA3MCwgMSwgMjM0LCAzNCwgNzAsIDEsIDIzNCwgMTExLCA3MCwgMSwgMjI5LCA5LCA3MCwgMSwgMjUxLCA0MSwgNzAsIDEsIAorICAgIDI1MCwgMTY1LCA3MCwgMSwgMjQ5LCAyNDYsIDcwLCAxLCAyNTAsIDk0LCA3MCwgMSwgMjI3LCAxMzgsIDcwLCAxLCAyNDgsIAorICAgIDIyOSwgNzAsIDEsIDIxNSwgMTQ1LCA3MCwgMSwgMjQ3LCAxNTMsIDcwLCAxLCAyMTUsIDE0MCwgNzAsIDEsIDIyOCwgODUsIAorICAgIDcwLCAxLCAyMTcsIDEwNiwgNzAsIDEsIDIxNiwgMjA5LCA3MCwgMSwgMTEyLCA3MCwgMSwgMjE2LCAxNTcsIDcwLCAxLCAKKyAgICAyMjgsIDc5LCA3MCwgMSwgMjUyLCAxOTksIDcwLCAxLCAyMjUsIDE1MCwgNzAsIDEsIDIyNSwgMTksIDcwLCAxLCAyMjUsIAorICAgIDEyNCwgNzAsIDEsIDIzMCwgMTY2LCA3MCwgMSwgMjEwLCAyNDQsIDcwLCAxLCAyMjIsIDIxMywgNzAsIDEsIDIzMiwgMTYyLCAKKyAgICA3MCwgMSwgMjEzLCAxMzgsIDcwLCAxLCAyMjAsIDEwNCwgNzAsIDEsIDIxOCwgMTg2LCA3MCwgMSwgMjA2LCA3MCwgMSwgCisgICAgMTYyLCA3MCwgMSwgMjMzLCAxNDEsIDcwLCAxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDc3LCA3MCwgMjM1LCAKKyAgICAyNTAsIDI1LCAyMjQsIDkwLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDU2LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUxLCAKKyAgICA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDMzLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUsIDcwLCAyMzUsIDI1MCwgMjUsIAorICAgIDIyMywgMjQ5LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjMsIDI0OCwgNzAsIDIzNSwgMjUwLCAyNSwgMjIyLCAxMDIsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyMiwgOTUsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgNjcsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgCisgICAgNTcsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzIsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgODMsIDcwLCAyMzUsIDI1MCwgCisgICAgMjUsIDIyNCwgNDEsIDIxNSwgNDksIDExMSwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTA1LCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCAyMjQsIDczLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTQsIDUzLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTUsIAorICAgIDgyLCA3MCwgMjUsIDUsIDI1NSwgODIsIDcwLCAyNSwgNSwgNzQsIDcwLCAyNSwgNSwgMjM2LCA0MCwgNzAsIDI1LCA1LCAKKyAgICAyMTEsIDExNywgNzAsIDI1LCA1LCAyMTAsIDE2OSwgNzAsIDI1LCA1LCA2OSwgNzAsIDI1LCA1LCAyMTQsIDExOCwgNzAsIAorICAgIDI1LCA1LCAyMTQsIDIyOSwgNzAsIDI1LCA1LCAyMjYsIDIzOCwgNzAsIDI1LCA1LCAxOTIsIDcwLCAyNSwgNSwgMjM2LCA2NywgCisgICAgNzAsIDI1LCA1LCA3NiwgNzAsIDI1LCA1LCAyNTQsIDI1MiwgNzAsIDI1LCA1LCAyNTQsIDIxMCwgNzAsIDI1LCA1LCAyMjYsIAorICAgIDE4NywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgNzAsIDUsIDIyOCwgMjExLCA3MCwgNSwgMjIzLCAxMjksIDcwLCA1LCAyMTAsIAorICAgIDE4MCwgNzAsIDUsIDIzMCwgNTcsIDcwLCA1LCAyMTUsIDIxNCwgNzAsIDUsIDI1MiwgMTUxLCA3MCwgNSwgMjIyLCAyMDgsIAorICAgIDcwLCA1LCAyMTYsIDQxLCA3MCwgNSwgMjM0LCAyNDcsIDcwLCA1LCAyNTQsIDIxMiwgNzAsIDUsIDIyMSwgMjQ2LCAyMjEsIAorICAgIDI0MCwgNzAsIDUsIDIxMywgMTQ5LCA3MCwgNSwgMjQ5LCAyNDAsIDcwLCA1LCAyNTIsIDEyNSwgNzAsIDUsIDIzNCwgMTMxLCAKKyAgICA3MCwgNSwgMjUyLCAxNDUsIDcwLCA1LCAyNTEsIDE3LCAyMjUsIDc1LCAyMzMsIDE5MywgNzAsIDUsIDIzMywgMzYsIDIxNiwgCisgICAgMTgsIDcwLCA1LCAyNTIsIDI4LCA3MCwgNSwgMjI1LCAxMjYsIDIzMCwgMTA0LCA3MCwgNSwgMjM0LCAxNSwgNzAsIDI0OSwgCisgICAgMTA2LCAxNiwgMjIzLCAzMSwgNzAsIDUsIDI1MywgMTgyLCA3MCwgNSwgMjUzLCAyMDMsIDcwLCAyMSwgMjEwLCA4NiwgNzAsIAorICAgIDIxLCAxMTEsIDcwLCAyMSwgMTA1LCA3MCwgMjEsIDE1OCwgNzAsIDIxLCAxNjEsIDcwLCAyMSwgMTkwLCA3MCwgMjEsIDE5NSwgCisgICAgNzAsIDIxLCAxOTksIDcwLCAyMSwgMTk2LCA3MCwgMjEsIDIwMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjE5LCAKKyAgICA0NSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjMwLCA3NiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI1LCAKKyAgICA3NCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUyLCA1NywgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUxLCAKKyAgICAxMTEsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE4LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIAorICAgIDIxMiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTAsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjE2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxNCwgODMsIDI1MSwgMjQ0LCA4MywgMjQ1LCAxNzEsIDgzLCAKKyAgICAyNDksIDIyNywgODMsIDI0MywgMjM2LCAyMTgsIDEzMSwgODMsIDI0OSwgMjM0LCA4MywgMjQ0LCAxOSwgMjQ3LCAxMjYsIAorICAgIDgzLCAyMTYsIDQwLCAyMTksIDU0LCAyNDAsIDE3NSwgODMsIDIxOSwgMTkyLCAzLCAyNTEsIDE4MCwgMjMxLCAxNTksIDgzLCAKKyAgICAyMzEsIDE4OCwgMjQ5LCAyMjcsIDgzLCAyMzEsIDE4OCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjI4LCAxOTYsIDgzLCAKKyAgICAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTExLCA4MywgMjQ0LCA1LCA0NSwgMjIxLCAxNTksIDEwNSwgODMsIDI0NCwgNSwgNDUsIAorICAgIDIyMSwgMTU5LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzksIDgzLCAyMSwgMjEwLCA4NiwgODMsIDIxLCAxMTEsIDgzLCAyMSwgCisgICAgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTkwLCA4MywgMjEsIDE5NSwgODMsIDIxLCAxOTksIDgzLCAKKyAgICAyMSwgMTk2LCA4MywgMjEsIDIwMSwgODMsIDEsIDYxLCA4MywgMSwgNzYsIDgzLCAxLCA3NCwgODMsIDEsIDc4LCA4MywgMSwgCisgICAgNjksIDgzLCAxLCAyMjYsIDIzOCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgMjQ1LCAyMTcsIDgzLCAxLCAxOTgsIDgzLCAxLCAKKyAgICAyNTQsIDEyMywgODMsIDEsIDI1MiwgMTk5LCA4MywgMSwgMTkxLCA4MywgMSwgMjI0LCA5MSwgODMsIDEsIDI0MywgMTQyLCAKKyAgICA4MywgMSwgMTg2LCA4MywgMSwgMjMzLCAxNDEsIDgzLCAxLCAyMDYsIDgzLCAxLCAyMjAsIDEwNCwgODMsIDEsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjQ4LCAyMjksIDgzLCAxLCAyNTAsIDE2NSwgODMsIDEsIDIzNSwgMTQ3LCA4MywgMSwgMTkyLCA4MywgCisgICAgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMjA0LCA4MywgMSwgMTc2LCA4MywgMSwgMjM0LCAxMzgsIDgzLCAKKyAgICAxLCAyMTUsIDE4NCwgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA1MywgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzMsIAorICAgIDQsIDgzLCAxLCAyMTAsIDY5LCA4MywgMSwgMjUwLCAxMTgsIDgzLCAxLCAyMTYsIDQwLCAyMDAsIDI1LCA1MCwgODMsIDEsIAorICAgIDIxNiwgNDAsIDc2LCA4MywgMSwgMjE2LCA0MCwgNzQsIDgzLCAxLCAyMTYsIDQwLCA3OCwgODMsIDEsIDIxNiwgNDAsIDY5LCAKKyAgICA4MywgMSwgMjE2LCA0MCwgMjI2LCAyMzgsIDgzLCAxLCAyMTYsIDQwLCAyMTQsIDIxNCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCisgICAgMTIzLCA4MywgMSwgMjE2LCA0MCwgMjUyLCAxOTksIDgzLCAxLCAyMTYsIDQwLCAxOTEsIDgzLCAxLCAyMTYsIDQwLCAyMjQsIAorICAgIDkxLCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxNDIsIDgzLCAxLCAyMTYsIDQwLCAxODYsIDgzLCAxLCAyMTYsIDQwLCAyMTcsIAorICAgIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI0OCwgMjI5LCA4MywgMSwgMjE2LCA0MCwgMjUwLCAxNjUsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMzUsIDE0NywgODMsIDEsIDIxNiwgNDAsIDIxNSwgMTg0LCA4MywgMSwgMjE2LCA0MCwgMTkyLCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjEyLCA2NSwgODMsIDEsIDIxNiwgNDAsIDE3NiwgODMsIDEsIDIxNiwgNDAsIDI0MywgMTM5LCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxNiwgNDAsIDIzNSwgMTEzLCA4MywgMSwgMjE2LCA0MCwgMjI4LCAyMzYsIDgzLCAxLCAyMTYsIAorICAgIDQwLCAyNDYsIDQ2LCA4MywgMSwgMjE5LCAxOTIsIDc2LCA4MywgMSwgMjE5LCAxOTIsIDc0LCA4MywgMSwgMjE5LCAxOTIsIAorICAgIDIzNSwgMTU4LCA4MywgMSwgMjE5LCAxOTIsIDIxNCwgMjE0LCA4MywgMSwgMjE5LCAxOTIsIDY5LCA4MywgMSwgMjE5LCAKKyAgICAxOTIsIDI1NCwgMTIzLCA4MywgMSwgMjE5LCAxOTIsIDE3NiwgODMsIDEsIDIxOSwgMTkyLCAyNDMsIDE0MiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAxNjIsIDgzLCAxLCAyMTksIDE5MiwgMTkxLCA4MywgMSwgMjE5LCAxOTIsIDIyMCwgMTA0LCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDIxNywgMTA2LCA4MywgMSwgMjE5LCAxOTIsIDI0OCwgMjI5LCA4MywgMSwgMjE5LCAxOTIsIDIzNSwgMTQ3LCAKKyAgICA4MywgMSwgMjE5LCAxOTIsIDI0NCwgMjA0LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTM5LCA4MywgMSwgMjE5LCAxOTIsIAorICAgIDI0MiwgNTMsIDgzLCAxLCAyMTksIDE5MiwgMjE1LCAxODQsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCAxMTYsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjIzLCAxODcsIDgzLCAxLCAyMTksIDE5MiwgMjUwLCAxNjUsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCA4MiwgCisgICAgODMsIDEsIDIzMSwgMTg4LCA3NCwgODMsIDEsIDIzMSwgMTg4LCAxNzYsIDgzLCAxLCAyMzEsIDE4OCwgMjA1LCA4MywgMSwgCisgICAgMjMxLCAxODgsIDI0NCwgMjA0LCA4MywgMSwgMjMxLCAxODgsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDI1NCwgODQsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEzLCAxNDgsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjQ4LCAxOTQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMzUsIDIwMCwgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MiwgMTYzLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAxMzQsIDI1MiwgMTYzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCA2MSwgODMsIDEsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgNzQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDE3NiwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjI5LCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE1LCAxNTcsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNSwgMTQ1LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE0MywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjI4LCAxMTUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIyOSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMTkxLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjUsIDE1MCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTQsIDIxOCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCisgICAgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKKyAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDMsIDAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMjksIDgyLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDIzMSwgCisgICAgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzNSwgMTIwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjE1LCAxNTcsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDEyNywgODMsIDEsIDIzMSwgMTg4LCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAKKyAgICAzMywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxOCwgMjI1LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgCisgICAgMTcxLCAyNDMsIDEyMywgMjQ5LCA4MCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKKyAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMTYzLCA2OSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTYzLCAxOTIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNTIsIDI2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIxOSwgODMsIDEsIDIzMSwgMTg4LCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzMywgNCwgMTgsIDE5LCAyMjYsIDExMywgMTgsIDE5LCAyNTMsIDE3NSwgMTgsIDE5LCAKKyAgICAyNTUsIDM3LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgMjI0LCAyMjQsIDE4LCAxOSwgMjI1LCAyMzMsIDE4LCAxOSwgCisgICAgMjI0LCAxMDgsIDE4LCAxOSwgMjE3LCAzMiwgMTgsIDE5LCAyMzQsIDE5NSwgMTgsIDE5LCAyMzMsIDE4NSwgMTgsIDE5LCAKKyAgICAyMzEsIDEzNywgMTgsIDE5LCAyMjgsIDQyLCAxOCwgMTksIDIyOSwgMTg2LCAxOCwgMTksIDIzMywgNzQsIDE4LCAxOSwgCisgICAgMjE5LCAyNCwgMTgsIDE5LCAyMjEsIDIxMywgMTgsIDE5LCAyMTksIDIzNCwgMTgsIDE5LCAyMjAsIDY4LCAxOCwgMTksIAorICAgIDIxOSwgMjAzLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzcsIDE4LCAxOSwgCisgICAgMjI3LCAxNzUsIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTc1LCAxOCwgMTksIDIyNywgMTc0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzMsIDE4LCAxOSwgMjI3LCAxNzIsIAorICAgIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTcyLCAxOCwgMTksIDIyMiwgMTA3LCAxOCwgMTksIDIyMiwgMTA2LCAxOCwgMTksIAorICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTExLCAxOCwgMTksIAorICAgIDIyNiwgMjIwLCAyMjYsIDEwOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjE3LCAxNTMsIDE4LCAxOSwgMjI2LCAyMjAsIDIzNSwgCisgICAgMjksIDE4LCAxOSwgMjI2LCAyMjAsIDI1MSwgNzQsIDE4LCAxOSwgMjI2LCAyMjAsIDE5NCwgMTgsIDE5LCAyMjYsIDIyMCwgCisgICAgMjMwLCAzMCwgMTgsIDE5LCAyMjYsIDIyMCwgMjIyLCA5MywgMTgsIDE5LCAyMjYsIDIyMCwgMjIwLCAxMDYsIDE4LCAxOSwgCisgICAgMjQ1LCAyMjcsIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzNiwgMTgsIAorICAgIDE5LCA0MCwgMjIzLCAxNjAsIDI0NywgMTI4LCAxOCwgMTksIDIyMywgMjI2LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgMTMzLCAxOCwgMTksIDE1OSwgMjMzLCAxNDAsIDE4LCAxOSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAxMjksIDE4LCAxOSwgCisgICAgMjE1LCAxMzcsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE2LCA1MCwgMTgsIDE5LCAKKyAgICAyMTYsIDUyLCAxOCwgMTksIDIyMSwgMjExLCAyMTksIDIwOCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAzLCAxOCwgMTksIAorICAgIDIyMSwgMjExLCAyNDEsIDYwLCAxOCwgMTksIDczLCAyNDIsIDgwLCAxOCwgMTksIDczLCAyNDgsIDYwLCAyNDMsIDYyLCAxOCwgCisgICAgMTksIDczLCAyNDMsIDEzOSwgMTgsIDE5LCA3MywgMjQyLCA4NSwgMTgsIDE5LCAyMjEsIDIxMSwgMjM1LCAzOSwgMTgsIDE5LCAKKyAgICA3MywgMjM1LCAzNywgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAxNTYsIDE4LCAxOSwgMjUyLCA3NiwgMjQ4LCA2MCwgCisgICAgMTUzLCAxOCwgMTksIDczLCAyNDgsIDU1LCAyMjIsIDkzLCAyMzIsIDIyOSwgMjEzLCAxMjIsIDIzMywgMTYsIDIzMiwgMjI5LCAKKyAgICAxLCAxNzYsIDIzMiwgMjI5LCAxLCAyMzQsIDEzOCwgMjMyLCAyMjksIDEsIDI0MywgMTQyLCAyMzIsIDIyOSwgMSwgMjQzLCAKKyAgICAwLCAyMzIsIDIyOSwgMSwgMjI5LCA4MiwgMjMyLCAyMjksIDEsIDI1MSwgNDEsIDIzMiwgMjI5LCAxLCAyNTAsIDE2NSwgCisgICAgMjMyLCAyMjksIDEsIDIzNSwgMTQ3LCAyMzIsIDIyOSwgMSwgMjM1LCAxMjAsIDIzMiwgMjI5LCAxLCAyMTEsIDcxLCAyMzIsIAorICAgIDIyOSwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCAxLCAyMTYsIDIwOSwgMjMyLCAyMjksIDEsIDI0OCwgMjI5LCAyMzIsIDIyOSwgCisgICAgMSwgMjQ4LCAzMywgMjMyLCAyMjksIDEsIDE5OCwgMjMyLCAyMjksIDEsIDE5MSwgMjMyLCAyMjksIDEsIDIyNSwgMTUwLCAKKyAgICAyMzIsIDIyOSwgMSwgMjUyLCAxOTksIDIzMiwgMjI5LCAxLCAyNTIsIDI2LCAyMzIsIDIyOSwgMSwgMTg2LCAyMzIsIDIyOSwgCisgICAgMSwgMTkyLCAyMzIsIDIyOSwgMSwgMjA1LCAyMzIsIDIyOSwgMSwgMjMzLCAxNDEsIDIzMiwgMjI5LCAxLCAyMTIsIDY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjIwLCAxMDQsIDIzMiwgMjI5LCAxLCAyMTgsIDIyNSwgMjMyLCAyMjksIDEsIDIwNiwgMjMyLCAyMjksIAorICAgIDEsIDE2MiwgMjMyLCAyMjksIDI1LCA1LCA2MSwgMjMyLCAyMjksIDI1LCA1LCA3NCwgMjMyLCAyMjksIDI1LCA1LCA2OSwgCisgICAgMjMyLCAyMjksIDI1LCA1LCAyNDUsIDIxNywgMjMyLCAyMjksIDI1LCA1LCAyNTQsIDIxMCwgMjMyLCAyMjksIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMjMyLCAyMjksIDI1LCA1LCAyNTMsIDIwMCwgMjMyLCAyMjksIDI1LCA1LCA3NiwgMjMyLCAyMjksIDI1LCAKKyAgICA1LCA3OCwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDE5MiwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDIwNSwgMjMyLCAyMjksIAorICAgIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIzMiwgMjI5LCA0LCAxLCAxNzYsIDIzMiwgMjI5LCA0LCAxLCAyMjksIDgyLCAyMzIsIAorICAgIDIyOSwgNCwgMSwgMjU0LCA4MywgMjMyLCAyMjksIDQsIDEsIDIxNywgMTA2LCAyMzIsIDIyOSwgNCwgMSwgMTk4LCAyMzIsIAorICAgIDIyOSwgNCwgMSwgMTkxLCAyMzIsIDIyOSwgNCwgMSwgMTg2LCAyMzIsIDIyOSwgNCwgMSwgMjA1LCAyMzIsIDIyOSwgNCwgMSwgCisgICAgMjMzLCAxNDEsIDIzMiwgMjI5LCA1LCAyMzAsIDk0LCAyMzIsIDIyOSwgNSwgMjM0LCAxNzcsIDIzMiwgMjI5LCA1LCAyMjIsIAorICAgIDM0LCAyMzIsIDIyOSwgNSwgMjMyLCAxMzMsIDIzMiwgMjI5LCAyNDUsIDM5LCA3OSwgMjMyLCAyMjksIDIyNCwgMTYsIDc5LCAKKyAgICAyMzIsIDIyOSwgMjEsIDIxMCwgODYsIDIzMiwgMjI5LCAyMSwgMTExLCAyMzIsIDIyOSwgMjEsIDEwNSwgMjMyLCAyMjksIAorICAgIDIxLCAxNTgsIDIzMiwgMjI5LCAyMSwgMTYxLCAyMzIsIDIyOSwgMjEsIDE5MCwgMjMyLCAyMjksIDIxLCAxOTUsIDIzMiwgCisgICAgMjI5LCAyMSwgMTk5LCAyMzIsIDIyOSwgMjEsIDE5NiwgMjMyLCAyMjksIDIxLCAyMDEsIDM5LCAyMzMsIDY1LCAxLCAxNzYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTEsIDE2NSwgMzksIDIzMywgNjUsIDEsIDIyOSwgODIsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIAorICAgIDE4NCwgMzksIDIzMywgNjUsIDEsIDIwNiwgMzksIDIzMywgNjUsIDEsIDE5MiwgMzksIDIzMywgNjUsIDEsIDIxNywgMTA2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyMDksIDM5LCAyMzMsIDY1LCAxLCAyMzMsIDE0MSwgMzksIDIzMywgNjUsIDEsIDE5MSwgCisgICAgMzksIDIzMywgNjUsIDEsIDIyNSwgMTUwLCAzOSwgMjMzLCA2NSwgMSwgMTg2LCAzOSwgMjMzLCA2NSwgMSwgMjQ0LCAyMDQsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTQsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMTYyLCAzOSwgMjMzLCA2NSwgMSwgMjI0LCA5MSwgCisgICAgMzksIDIzMywgNjUsIDEsIDIzNCwgMTM4LCAzOSwgMjMzLCA2NSwgMSwgMjE1LCAxNzYsIDM5LCAyMzMsIDY1LCAxLCAxOTgsIAorICAgIDM5LCAyMzMsIDY1LCAxLCA2MSwgMzksIDIzMywgNjUsIDEsIDc0LCAzOSwgMjMzLCA2NSwgMSwgMjQ1LCAyMTcsIDM5LCAKKyAgICAyMzMsIDY1LCAxLCAyNDUsIDIwNSwgMzksIDIzMywgNjUsIDEsIDY5LCAzOSwgMjMzLCA2NSwgMSwgMjI2LCAxODcsIDM5LCAKKyAgICAyMzMsIDY1LCAxLCA3OCwgMzksIDIzMywgNjUsIDEsIDIxNCwgMjE0LCAzOSwgMjMzLCA2NSwgMSwgNzYsIDM5LCAyMzMsIAorICAgIDY1LCAxLCAyNTMsIDE5OCwgMzksIDIzMywgNjUsIDEsIDI1NCwgMjEwLCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyOSwgMzksIAorICAgIDIzMywgNjUsIDEsIDIxNiwgMjgsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNiwgMjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMjI0LCA5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE3NiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTY1LCAKKyAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE3NiwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjEsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIAorICAgIDIxNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkyLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEsIDEyMSwgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAxOTIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNiwgMjA5LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE3LCAxMDYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMTYsIDIwOSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MSwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDIyNSwgMTUwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTg2LCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxODYsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDQsIDIwNCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTI1LCAyMzMsIDE0MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCisgICAgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTYyLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNTIsIDE5OSwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjEsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0OCwgMjI5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjUyLCAKKyAgICAxOTksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTM4LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTgsIDgzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNSwgCisgICAgMjE5LCAyNDEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNiwgNDAsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDY5LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExOCwgMTY2LCAzOSwgMTczLCAyNSwgCisgICAgNSwgNzYsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NCwgMjUyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3OCwgMTY2LCAzOSwgCisgICAgMTczLCAyNSwgNSwgMjI3LCA0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDIxNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCisgICAgMjUzLCAxNzUsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgMzcsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTExLCAKKyAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjYsIDExMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI3LCAxLCAxNjYsIDM5LCAxNzMsIAorICAgIDI1LCA1LCAyMTQsIDIxMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM1LCAxNTgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIxNCwgCisgICAgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMjksIDg0LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzAsIDMwLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEsIDQwLCAxOTQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzNSwgMjksIDE2NiwgMzksIDE3MywgMSwgNDAsIDI0OSwgCisgICAgNjgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI1MywgMTY2LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNjMsIDE2NiwgMzksIAorICAgIDE3MywgMTM4LCAyMzEsIDE2MiwgMTY2LCAzOSwgMTczLCAyMSwgMjEwLCA4NiwgMTY2LCAzOSwgMTczLCAyMSwgMTExLCAKKyAgICAxNjYsIDM5LCAxNzMsIDIxLCAxMDUsIDE2NiwgMzksIDE3MywgMjEsIDE1OCwgMTY2LCAzOSwgMTczLCAyMSwgMTYxLCAxNjYsIAorICAgIDM5LCAxNzMsIDIxLCAxOTAsIDE2NiwgMzksIDE3MywgMjEsIDE5NSwgMTY2LCAzOSwgMTczLCAyMSwgMTk5LCAxNjYsIDM5LCAKKyAgICAxNzMsIDIxLCAxOTYsIDE2NiwgMzksIDE3MywgMjEsIDIwMSwgMTY2LCAzOSwgMTczLCA4OSwgMjEsIDExMSwgMTY2LCAzOSwgCisgICAgMTczLCA1LCAyMzMsIDEyNiwgMTY2LCAzOSwgMTczLCA1LCAyMzMsIDEyNSwgNzAsIDE2LCAyMjUsIDI0MCwgNzAsIDE2LCAKKyAgICAyMzAsIDc3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNSwgNzUsIDIzNCwgMzEsIDcwLCAxNiwgMjUyLCA1OCwgMjM0LCAzMSwgNzAsIAorICAgIDE2LCAyNTEsIDExMiwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxOSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxMywgMjM0LCAKKyAgICAzMSwgNzAsIDE2LCAyMjQsIDIxMSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxNywgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIAorICAgIDIxNSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE4MSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3NywgMjM0LCAzMSwgNzAsIAorICAgIDE2LCAyNDgsIDE3NiwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OCwgMjM0LCAKKyAgICAzMSwgNzAsIDE2LCAyNDgsIDE3NSwgMjM0LCAzMSwgNzAsIDE2LCAyMTUsIDg3LCA3MCwgMTYsIDIzMCwgNzcsIDIyMiwgCisgICAgMjA3LCA3MCwgMTYsIDIyNSwgNzUsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MiwgNTgsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MSwgCisgICAgMTEyLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxOSwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTMsIDIyMiwgMjA3LCAKKyAgICA3MCwgMTYsIDIyNCwgMjExLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNywgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTUsIAorICAgIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTgxLCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3NywgMjIyLCAyMDcsIDcwLCAxNiwgCisgICAgMjQ4LCAxNzYsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc5LCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3OCwgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjQ4LCAxNzUsIDIyMiwgMjA3LCAyNTEsIDEyOSwgMSwgMTc2LCAyNTEsIDEyOSwgMSwgMjQzLCAxNDIsIAorICAgIDI1MSwgMTI5LCAxLCAyMjksIDgyLCAyNTEsIDEyOSwgMSwgMjI5LCAyNywgMjUxLCAxMjksIDEsIDE5MSwgMjUxLCAxMjksIAorICAgIDEsIDI1MiwgMTk5LCAyNTEsIDEyOSwgMSwgMTg2LCAyNTEsIDEyOSwgMSwgMjMwLCAxMTAsIDI1MSwgMTI5LCAxLCAyMTcsIAorICAgIDEwNiwgMjUxLCAxMjksIDEsIDI0OCwgMjI5LCAyNTEsIDEyOSwgMSwgMTk4LCAyNTEsIDEyOSwgMSwgMjI4LCA0MSwgMjUxLCAKKyAgICAxMjksIDEsIDI1MSwgNDEsIDI1MSwgMTI5LCAxLCAyMzUsIDE0NywgMjUxLCAxMjksIDEsIDIyNywgMTY5LCAyNTEsIDEyOSwgCisgICAgMSwgMjI3LCAxNjIsIDI1MSwgMTI5LCAxLCAxOTIsIDI1MSwgMTI5LCAxLCAyMDUsIDI1MSwgMTI5LCAxLCAyMzMsIDE0MSwgCisgICAgMjUxLCAxMjksIDEsIDIxNCwgMjcsIDI1MSwgMTI5LCAxLCAyMDYsIDI1MSwgMTI5LCAxLCA2MSwgMjUxLCAxMjksIDEsIAorICAgIDE2MiwgMjUxLCAxMjksIDI1LCA1LCA3NCwgMjUxLCAxMjksIDI1LCA1LCA2OSwgMjUxLCAxMjksIDI1LCA1LCA3NiwgMjUxLCAKKyAgICAxMjksIDI1LCA1LCA3OCwgMjUxLCAxMjksIDI1LCA1LCAyNTQsIDI1MiwgMjUxLCAxMjksIDIyNiwgNjQsIDI1MSwgMTI5LCAKKyAgICAyNDUsIDE1MSwgNjQsIDIyMSwgMTc0LCAzOSwgODksIDEsIDEyNSwgMTc2LCAzOSwgODksIDEsIDEyNSwgMjM0LCAxMzgsIAorICAgIDM5LCA4OSwgMSwgMTI1LCAyMzMsIDE3NywgMzksIDg5LCAxLCAxMjEsIDE3NiwgMzksIDg5LCAxLCAxMjEsIDIzMywgMTc3LCAKKyAgICAzOSwgODksIDEsIDEyMSwgMjM0LCAxMzgsIDM5LCA4OSwgMSwgMjI5LCA4MiwgMzksIDg5LCAxLCAxMjUsIDI1MSwgNDEsIAorICAgIDM5LCA4OSwgMSwgMTI1LCAyNTAsIDE2NSwgMzksIDg5LCAxLCAxMjEsIDI1MSwgNDEsIDM5LCA4OSwgMSwgMTIxLCAyMDYsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyNTAsIDE2NSwgMzksIDg5LCAxLCAyMjcsIDE2OSwgMzksIDg5LCAxLCAyMjMsIDE0MywgMzksIAorICAgIDg5LCAxLCAxMjUsIDIyMywgMTQxLCAzOSwgODksIDEsIDI0OCwgMjI5LCAzOSwgODksIDEsIDEyMSwgMjIzLCAxNDEsIDM5LCAKKyAgICA4OSwgMSwgMjIzLCAxNTIsIDM5LCA4OSwgMSwgMTI1LCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjUsIDIxNiwgMjA5LCAzOSwgCisgICAgODksIDEsIDEyMSwgMjE3LCAxMDYsIDM5LCA4OSwgMSwgMTIxLCAyMTYsIDIwOSwgMzksIDg5LCAxLCAxOTgsIDM5LCA4OSwgCisgICAgMSwgMjUyLCAxOTksIDM5LCA4OSwgMSwgMTI1LCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAyMjUsIDE1MCwgMzksIDg5LCAxLCAKKyAgICAxMjUsIDI0NCwgMjA0LCAzOSwgODksIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyMSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgCisgICAgMTIxLCAyMjUsIDE1MCwgMzksIDg5LCAxLCAxODYsIDM5LCA4OSwgMSwgMTIxLCAxOTIsIDM5LCA4OSwgMSwgMTI1LCAxOTIsIAorICAgIDM5LCA4OSwgMSwgMjA1LCAzOSwgODksIDEsIDIyMiwgMTM5LCAzOSwgODksIDEsIDIzMywgMTQxLCAzOSwgODksIDEsIDIzMiwgCisgICAgOTgsIDM5LCA4OSwgMSwgMjEyLCA2NSwgMzksIDg5LCAxLCAxMjUsIDIyMCwgMTA0LCAzOSwgODksIDEsIDEyNSwgMjE4LCAKKyAgICAyMjUsIDM5LCA4OSwgMSwgMTI1LCAyMDYsIDM5LCA4OSwgMSwgMTI1LCAxNjIsIDM5LCA4OSwgMSwgMjMyLCAxOTAsIDM5LCAKKyAgICA4OSwgMSwgNjEsIDM5LCA4OSwgMSwgMTIxLCAxNjIsIDM5LCA4OSwgMSwgNzQsIDM5LCA4OSwgMSwgMjM2LCA0MCwgMzksIAorICAgIDg5LCAxLCA2OSwgMzksIDg5LCAxLCAyMTQsIDExOCwgMzksIDg5LCAxLCAyNDUsIDIxNywgMzksIDg5LCAxLCAyMjYsIDE4NywgCisgICAgMzksIDg5LCAxLCAyMzMsIDEyNiwgMzksIDg5LCAxLCAyNDIsIDEzOSwgMjA2LCAzOSwgODksIDExNywgNSwgMTQ3LCAyMDUsIAorICAgIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIzMywgMTQxLCAzOSwgODksIDExNywgNSwgMjMzLCAxNDIsIDIxNywgNTksIDIzMywgCisgICAgMTE1LCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMzQsIDIzNywgMjMzLCAxMTUsIDM5LCA4OSwgMTE3LCA1LCA0MCwgMjI5LCAKKyAgICA4MiwgMzksIDg5LCAxMTcsIDUsIDEyMSwgMTkxLCAzOSwgODksIDExNywgNSwgMTI1LCAyMjMsIDE0MiwgMTc3LCAxMjEsIAorICAgIDE5MSwgMzksIDg5LCAxMTcsIDUsIDE4NiwgMzksIDg5LCAxMTcsIDUsIDI1MiwgMTk5LCAzOSwgODksIDExNywgNSwgMjA2LCAKKyAgICAzOSwgODksIDUsIDIyMiwgMTIsIDM5LCA4OSwgMjUsIDUsIDYxLCAzOSwgODksIDI1LCA1LCAyMzEsIDIwOSwgMjIxLCAyMjgsIAorICAgIDM5LCA4OSwgMjUsIDUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIDIxNywgNjUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIAorICAgIDc0LCAzOSwgODksIDI1LCA1LCAyMzYsIDQwLCAzOSwgODksIDI1LCA1LCAyMTQsIDIxNCwgMzksIDg5LCAyNSwgNSwgMjE0LCAKKyAgICAxMTcsIDM5LCA4OSwgMjUsIDUsIDY5LCAzOSwgODksIDI1LCA1LCAyMTQsIDExOCwgMzksIDg5LCAyNSwgNSwgNzgsIDM5LCAKKyAgICA4OSwgMjUsIDUsIDIyNywgNSwgNTEsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTEzLCAzOSwgODksIDI1LCA1LCA3NiwgMzksIAorICAgIDg5LCAyNSwgNSwgMjU0LCAyNTIsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTg3LCAzOSwgODksIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMzksIDg5LCAyNSwgNSwgODksIDI1NCwgMjEwLCAzOSwgODksIDI1LCA1LCAyMjcsIDUsIDQ4LCAzOSwgODksIDUsIDIzMSwgCisgICAgMjA5LCAyMzQsIDIzNiwgMzksIDg5LCA1LCAyMTYsIDMwLCAzOSwgODksIDUsIDIxNiwgMjksIDM5LCA4OSwgNSwgMjM0LCAKKyAgICAxMDMsIDIxNiwgMjgsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjYsIAorICAgIDM5LCA4OSwgNSwgMjIzLCAxOTEsIDI0MiwgNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIyMSwgMjU1LCAzOSwgODksIDUsIAorICAgIDIzNCwgMTAyLCAyMzQsIDIyMSwgMzksIDg5LCAzOCwgMjQ5LCAxMjMsIDI0NywgMTI4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAKKyAgICAyMTAsIDg2LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxMTEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDEwNSwgMzksIDg5LCAyNDEsIAorICAgIDUzLCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxNjEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5MCwgMzksIDg5LCAKKyAgICAyNDEsIDUzLCAyMSwgMTk1LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTksIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5NiwgMzksIAorICAgIDg5LCAyNDEsIDUzLCAyMSwgMjAxLCAzOSwgODksIDg5LCAyMSwgMjEwLCA4NiwgMzksIDg5LCA4OSwgMjEsIDExMSwgMzksIAorICAgIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgCisgICAgMjEsIDE5MCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDE5OSwgMzksIDg5LCA4OSwgMjEsIDE5NiwgCisgICAgMzksIDg5LCA4OSwgMjEsIDIwMSwgMzksIDg5LCA1LCAyMTEsIDI0OSwgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAKKyAgICAyMjEsIDIxNywgMzksIDg5LCA1LCAyMzQsIDE2NiwgMzksIDg5LCA1LCAyNDAsIDIzOSwgMzksIDg5LCA1LCAyNDcsIDE0MiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDUyLCAyMjIsIDE4OSwgMjIzLCAxNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIxMSwgNzIsIDM5LCAKKyAgICA4OSwgNSwgMjM1LCAxMiwgMzksIDg5LCA1LCAyMzUsIDExLCAzOSwgODksIDUsIDIyMSwgMjI0LCAzOSwgODksIDUsIDIyMSwgCisgICAgMjIzLCAzOSwgODksIDUsIDI0MiwgMTYsIDM5LCA4OSwgNSwgMjUxLCAzOCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMywgCisgICAgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCA5LCAxMDIsIDUsIDI1MCwgMTk0LCAxMDIsIDUsIDIxOCwgMTYsIDEwMiwgNSwgMjUxLCAKKyAgICAyNDEsIDEwMiwgMSwgMjU0LCAxOTMsIDEwMiwgMSwgMjU0LCAxOTQsIDIxNywgMTQsIDEwMiwgMSwgMjM2LCAzNiwgMTAyLCAKKyAgICAxLCAyMzYsIDM3LCAyMTcsIDE0LCAxMDIsIDEsIDIxNCwgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDE0LCAxMDIsIDEsIAorICAgIDIyMywgMTkxLCAyMjMsIDgyLCAxMDIsIDEsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDEsIDIzMywgMTQyLCAKKyAgICAyMzMsIDMwLCAxMDIsIDEsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDEsIDI0NSwgMTg3LCAxMDIsIDEsIAorICAgIDI1NCwgMjA4LCAxMDIsIDEsIDIyNiwgMjE2LCAxMDIsIDEsIDIyNiwgMjE3LCAyMTcsIDE0LCAxMDIsIDEsIDE3NiwgMTAyLCAKKyAgICAxLCAyMzUsIDE5LCAyMzEsIDIxMiwgMTAyLCAxLCAyNDMsIDE0MiwgMTAyLCAxLCAyNDMsIDE0MywgMjQyLCAxNjgsIDEwMiwgCisgICAgMSwgMjI5LCA4MiwgMTAyLCAxLCAyNTEsIDQxLCAxMDIsIDEsIDI1MSwgNDIsIDIzMywgMTI5LCAxMDIsIDEsIDIzNSwgMTQ3LCAKKyAgICAxMDIsIDEsIDIzNSwgMTQ4LCAyMzUsIDEyNCwgMTAyLCAxLCAyMjcsIDE2OSwgMTAyLCAxLCAyMTcsIDEwNywgMjMzLCA4MiwgCisgICAgMTAyLCAxLCAyMTcsIDEwNywgMjMwLCA3MiwgMjMxLCAyMTIsIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDI1NCwgMTUzLCAKKyAgICAxMDIsIDEsIDI0OCwgMjMwLCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyMjksIDIzNCwgMjIzLCAxNTUsIDEwMiwgMSwgCisgICAgMjE3LCAxMDYsIDEwMiwgMSwgMjE3LCAxMDcsIDIxNywgMzYsIDEwMiwgMSwgMjQ4LCAyMjksIDEwMiwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjMwLCAxMDIsIDEsIDE5OCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjI2LCA5NCwgMjM0LCAyMzIsIDEwMiwgMSwgCisgICAgMjUyLCAxOTksIDEwMiwgMSwgMjUyLCAyMDAsIDIzNCwgMTc4LCAxMDIsIDEsIDE4NiwgMTAyLCAxLCAxOTIsIDEwMiwgMSwgCisgICAgMjA1LCAxMDIsIDEsIDIzMywgMTQxLCAxMDIsIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNiwgMjIyLCAyMiwgMTAyLCAxLCAKKyAgICAyMjIsIDM2LCAyMjEsIDIzNSwgMTAyLCAxLCAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzMsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNCwgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMzEsIDEwMiwgMjUsIAorICAgIDUsIDIxOCwgNDgsIDEwMiwgMjUsIDUsIDIxOCwgNDksIDIzNiwgMjgsIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgyLCAKKyAgICAxMDIsIDI1LCA1LCAyMjMsIDE5MSwgMjIzLCA4MywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzAsIAorICAgIDEwMiwgMjUsIDUsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAxMDIsIDI1LCA1LCAKKyAgICAyMTcsIDY3LCAyMjMsIDgyLCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMjMsIAorICAgIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMjUsIDE4NywgMTAyLCAyNSwgNSwgMjI1LCAxODgsIDIxNywgMTQsIDEwMiwgCisgICAgMjU1LCAzLCAyNTUsIDIsIDEwMiwgMSwgMjM1LCAxLCAyMjEsIDIzMCwgMTAyLCAxLCAyMzQsIDEwOCwgMjIxLCAyMzAsIAorICAgIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAyMzAsIDEwMiwgMSwgMjQ1LCAyMTEsIDIyMSwgMjMwLCAxMDIsIDEsIDIxNCwgMCwgCisgICAgMjIxLCAyMzAsIDEwMiwgMSwgMjEwLCAxMDcsIDIyMSwgMjMwLCAxMDIsIDEsIDI1MywgMjE3LCAyMjEsIDIzMCwgMTAyLCAKKyAgICAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgMTExLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIAorICAgIDIxLCAxOTAsIDEwMiwgMjEsIDE5NSwgMTAyLCAyMSwgMTk5LCAxMDIsIDIxLCAxOTYsIDEwMiwgMjEsIDIwMSwgMTAyLCAKKyAgICAyMjYsIDMzLCAxMDIsIDIyNiwgNTksIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNTIsIDEwMiwgMjUwLCAKKyAgICAyNDQsIDIxOSwgMTc0LCAxMDIsIDI1MCwgMjQ0LCAyMjYsIDYsIDEwMiwgMjI2LCA1OCwgMTAyLCAyOCwgMTYsIDI0NywgCisgICAgMTM0LCAxMDIsIDI4LCAxNiwgMjQ4LCA1OSwgMTAyLCAyOCwgMTYsIDI0NiwgNzIsIDEwMiwgMjgsIDE2LCAyNDgsIDE4NCwgCisgICAgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAyMTgsIDE2LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMTMsIDEwMiwgMjgsIDE2LCAyNDgsIAorICAgIDIyMiwgMTAyLCAyOCwgMTYsIDI0OCwgNDEsIDEwMiwgMjgsIDE2LCAyNDgsIDIwNiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAKKyAgICAyNDMsIDY0LCAxMDIsIDI4LCAxNiwgMzgsIDIxNywgMTAsIDEwMiwgMjgsIDE2LCAzOCwgMjQ1LCAxNDksIDEwMiwgMjgsIAorICAgIDE2LCAzOCwgMjM0LCAxNzMsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzUsIDEwMiwgMjgsIDE2LCAzOCwgMjM1LCAxMjgsIAorICAgIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzQsIDIsIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc2LCAyLCAKKyAgICAyMzUsIDEyOCwgMTAyLCAyOCwgMTYsIDM4LCAyNTIsIDQ1LCAxMDIsIDI4LCAxNiwgMzgsIDI0MiwgMTcyLCAxMDIsIDI4LCAKKyAgICAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ2LCA4MiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyMDQsIDI0OCwgMjIwLCAxMDIsIAorICAgIDI4LCAxNiwgMjIyLCAyNTIsIDI1MCwgOCwgMjE1LCAxMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTcsIAorICAgIDc0LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjYsIDQ3LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjQsIAorICAgIDE0MiwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgMjI1LCA0MSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgCisgICAgMjI1LCAyOSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI1LCA2NCwgMjA3LCA1LCAyMjYsIDMwLCAyMDcsIDUsIAorICAgIDIyNiwgNDMsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCAxLCA2MSwgMjA3LCAxLCA3NCwgMjA3LCAxLCA2OSwgMjA3LCAxLCAKKyAgICAyNTQsIDI1MiwgMjA3LCAxLCA3OCwgMjA3LCAxLCA3NiwgMjA3LCAxLCAyNDUsIDYzLCAyMDcsIDEsIDE3NiwgMjA3LCAxLCAKKyAgICAyMjQsIDkxLCAyMDcsIDEsIDI0MywgMTQyLCAyMDcsIDEsIDIyOSwgODIsIDIwNywgMSwgMjUxLCA0MSwgMjA3LCAxLCAyMzUsIAorICAgIDE0NywgMjA3LCAxLCAyMTAsIDExNiwgMjA3LCAxLCAyMjcsIDE2OSwgMjA3LCAxLCAyMTcsIDEwNiwgMjA3LCAxLCAyNDgsIAorICAgIDIyOSwgMjA3LCAxLCAxOTgsIDIwNywgMSwgMTkxLCAyMDcsIDEsIDI0NCwgMjA0LCAyMDcsIDEsIDIxNCwgMjcsIDIwNywgMSwgCisgICAgMjUyLCAxOTksIDIwNywgMSwgMTg2LCAyMDcsIDEsIDE5MiwgMjA3LCAxLCAyMDUsIDIwNywgMSwgMjMzLCAxNDEsIDIwNywgCisgICAgMSwgMjEyLCA2NSwgMjA3LCAxLCAyMDYsIDIwNywgMSwgMjExLCAxNjUsIDIwNywgMSwgMTYyLCAyMDcsIDExNywgNSwgMjI2LCAKKyAgICA1NiwgMjA3LCAxMTcsIDUsIDIyNiwgMzIsIDIwNywgMTE3LCA1LCAyMjYsIDI5LCAyMDcsIDI1LCA1LCAyMjYsIDQ2LCAyMDcsIAorICAgIDI1LCA1LCAyMjYsIDI4LCAyMDcsIDI1LCA1LCAyMjYsIDUwLCAyMDcsIDI1LCA1LCAyMjYsIDM4LCAyMDcsIDI1LCA1LCAKKyAgICAyMjYsIDU3LCAyMDcsIDI1LCA1LCAyMjYsIDQ4LCAyMDcsIDUsIDIyNiwgNjAsIDIwNywgNSwgMjEzLCAxNTIsIDIwNywgCisgICAgMTE3LCA1LCAyMjUsIDI1MiwgMTg2LCAyMDcsIDExNywgNSwgMjI1LCAyNTIsIDIxMiwgNjUsIDIwNywgMSwgMjM0LCAxMzgsIAorICAgIDIwNywgMSwgMjE3LCAyMzIsIDIwNywgMjEsIDIxMCwgODYsIDIwNywgMjEsIDExMSwgMjA3LCAyMSwgMTA1LCAyMDcsIDIxLCAKKyAgICAxNTgsIDIwNywgMjEsIDE2MSwgMjA3LCAyMSwgMTkwLCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDE5OSwgMjA3LCAyMSwgCisgICAgMTk2LCAyMDcsIDIxLCAyMDEsIDIwNywgMjUzLCAxODMsIDIwNywgMSwgMjIzLCA1NSwgMjA3LCAxLCAyMzMsIDEzLCAyMDcsIAorICAgIDEsIDI1MiwgMjYsIDIwNywgMSwgNDAsIDIzNSwgMjksIDIwNywgMSwgNDAsIDE5NCwgMjUyLCAxMjgsIDEsIDYxLCAyNTIsIAorICAgIDEyOCwgMSwgMjE5LCAxNjYsIDYxLCAyNTIsIDEyOCwgMSwgMTYyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE2MiwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxNjIsIDI1MiwgMTI4LCAxLCAyNTIsIDE5OSwgMjUyLCAxMjgsIDEsIDIzNCwgMjE4LCAyNTIsIAorICAgIDE5OSwgMjUyLCAxMjgsIDEsIDE5MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxOTEsIDI1MiwgMTI4LCAxLCAxOTgsIDI1MiwgCisgICAgMTI4LCAxLCAyMzEsIDE4NiwgMTk4LCAyNTIsIDEyOCwgMSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMTIsIAorICAgIDY1LCAyNTIsIDEyOCwgMSwgMjI2LCA3MSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgCisgICAgMjE5LCAxNjYsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgMjM1LCAxNDcsIDI1MiwgMTI4LCAxLCAyNDgsIDIyOSwgMjUyLCAKKyAgICAxMjgsIDEsIDIwNSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDUsIDI1MiwgMTI4LCAxLCAxODYsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMTg2LCAyNTIsIDEyOCwgMSwgMjE5LCAyOCwgMjE3LCAxMDYsIDI1MiwgMTI4LCAxLCAyMjgsIDYwLCAyMTcsIAorICAgIDEwNiwgMjUyLCAxMjgsIDEsIDIwNiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDYsIDI1MiwgMTI4LCAxLCAyMzEsIDE4NiwgCisgICAgMjA2LCAyNTIsIDEyOCwgMSwgMTkyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MiwgMjUyLCAxMjgsIDEsIDIyOSwgODIsIAorICAgIDI1MiwgMTI4LCAxLCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIyNywgCisgICAgMTY5LCAyNTIsIDEyOCwgMSwgMjUxLCA0MSwgMjUyLCAxMjgsIDEsIDIyOSwgMTUzLCAyNTIsIDEyOCwgMSwgMjMxLCAxMjksIAorICAgIDI1MiwgMTI4LCAxLCA3NCwgMjUyLCAxMjgsIDEsIDY5LCAyNTIsIDEyOCwgNSwgMjE2LCAzNCwgMjUyLCAxMjgsIDI1LCA1LCAKKyAgICA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyMjYsIDcxLCA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyNDUsIDIxNywgMjUyLCAxMjgsIAorICAgIDI1LCA1LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCAyMzQsIDIxOCwgNzQsIDI1MiwgMTI4LCAyNSwgNSwgNzgsIDI1MiwgMTI4LCAKKyAgICAyNSwgNSwgMjM0LCAyMTgsIDc4LCAyNTIsIDEyOCwgMjUsIDUsIDY5LCAyNTIsIDEyOCwgMjUsIDUsIDEwNCwgMzEsIDIxOSwgCisgICAgMTY2LCAyMDYsIDI1MiwgMTI4LCAxMTcsIDUsIDIyOSwgODQsIDI1MiwgMTI4LCAxMTcsIDUsIDI0MiwgNjcsIDI1MiwgMTI4LCAKKyAgICAyMjYsIDQxLCAyNTIsIDEyOCwgMjI2LCAzNywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI5LCAyMzQsIDIzMSwgNDIsIAorICAgIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIyNSwgNjcsIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIzNSwgNTQsIDI1MiwgCisgICAgMTI4LCAxNiwgMjUxLCAyNDksIDIyNiwgNDEsIDE5NywgMSwgMTc2LCAxOTcsIDEsIDIzNCwgNDUsIDE5NywgMSwgMjM0LCAKKyAgICAxMzgsIDE5NywgMSwgMjQzLCAxNDIsIDE5NywgMSwgMjQyLCAxOTMsIDE5NywgMSwgMjI5LCA4MiwgMTk3LCAxLCAyNTEsIAorICAgIDQxLCAxOTcsIDEsIDI1MCwgMTY1LCAxOTcsIDEsIDIzNSwgMTQ3LCAxOTcsIDEsIDIyNywgMTY5LCAxOTcsIDEsIDIxNywgCisgICAgMTA2LCAxOTcsIDEsIDIxNiwgMjA5LCAxOTcsIDEsIDI0OCwgMjI5LCAxOTcsIDEsIDE5OCwgMTk3LCAxLCAxOTEsIDE5NywgCisgICAgMSwgMjI1LCA0NSwgMTk3LCAxLCAyMjUsIDE1MCwgMTk3LCAxLCAyNDQsIDIwNCwgMTk3LCAxLCAyNDQsIDgzLCAxOTcsIDEsIAorICAgIDI1MiwgMTk5LCAxOTcsIDEsIDI1MSwgMjMwLCAxOTcsIDEsIDE4NiwgMTk3LCAxLCAyMzAsIDE3MywgMTk3LCAxLCAyMTUsIAorICAgIDE4NCwgMTk3LCAxLCAyMTUsIDE3NiwgMTk3LCAxLCAyNDYsIDQ2LCAxOTcsIDEsIDE5MiwgMTk3LCAxLCAyMDUsIDE5NywgMSwgCisgICAgMjMzLCAxNDEsIDE5NywgMSwgMTYyLCAxOTcsIDEsIDI0MSwgMTYwLCAxOTcsIDEsIDIxNCwgMjcsIDE5NywgMSwgMjA2LCAKKyAgICAxOTcsIDEsIDIyMCwgMTA0LCAxOTcsIDEsIDIxMiwgNjUsIDE5NywgMSwgNjEsIDE5NywgMjE4LCA3NCwgMSwgMTkyLCAxOTcsIAorICAgIDIxOCwgNzQsIDEsIDIwNSwgMTk3LCAyNSwgNSwgMjU1LCA4MiwgMTk3LCAyNSwgNSwgNzQsIDE5NywgMjUsIDUsIDc4LCAKKyAgICAxOTcsIDI1LCA1LCAyMjYsIDE4NywgMTk3LCAyNSwgNSwgNjksIDE5NywgMjUsIDUsIDIxNCwgMTE4LCAxOTcsIDI1LCA1LCAKKyAgICA3NiwgMTk3LCAxMTcsIDUsIDIzNSwgMjksIDE5NywgMTE3LCA1LCAxOTQsIDE5NywgMTE3LCA1LCAxNTYsIDE5NywgMTE3LCAKKyAgICA1LCAyMzAsIDMwLCAxOTcsIDExNywgNSwgMjI2LCAxMDksIDE5NywgMTE3LCA1LCAxNTMsIDE5NywgMTE3LCA1LCAyMTcsIAorICAgIDE1MywgMTk3LCAxMTcsIDUsIDIyNywgMTQ2LCAxOTcsIDExNywgNSwgMjM0LCAyMzYsIDE5NywgNSwgMjIzLCAxNTMsIDE5NywgCisgICAgNSwgMjI3LCAyMDksIDE5NywgMjI0LCAxNDQsIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyMjcsIDE1NiwgMjE2LCAxMjEsIAorICAgIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyNTAsIDE3MiwgMTk3LCAyMjQsIDE0NCwgMjE1LCAxNzEsIDI1MCwgMTcyLCAKKyAgICAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MCwgMTk3LCAyMSwgMjEwLCA4NiwgMTk3LCAyMSwgMTExLCAxOTcsIDIxLCAxMDUsIAorICAgIDE5NywgMjEsIDE1OCwgMTk3LCAyMSwgMTYxLCAxOTcsIDIxLCAxOTAsIDE5NywgMjEsIDE5NSwgMTk3LCAyMSwgMTk5LCAKKyAgICAxOTcsIDIxLCAxOTYsIDE5NywgMjEsIDIwMSwgMTk3LCAxLCAyMTUsIDE1NywgMTk3LCAxLCAyMTUsIDE0NSwgMTk3LCAxLCAKKyAgICAyNDgsIDE0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMjEwLCA4NiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTExLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMDUsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE1OCwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMTYxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTAsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NSwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTYsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjEsIDIwMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKKyAgICAyNTMsIDIxNCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDIyNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIAorICAgIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDE4NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MCwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDQ0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDUsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMSwgMjU1LCA0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDM4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIAorICAgIDEsIDIzMiwgMjQ3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTc4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNiwgCisgICAgNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxOTcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxODYsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAxMDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMjEsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAxNjgsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMSwgMjE0LCAxMTEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCA2NCwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAxLCAyNDUsIDExNiwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDIyMCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKKyAgICAyNDUsIDE1OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDk0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMiwgCisgICAgMTYyLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNywgMCwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDEyOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDIyNiwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAyMzAsIDEwOCwgMjE1LCAxMjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjQzLCAxMzcsIDIxNSwgMTIzLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIzMCwgMTA2LCAyMTUsIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjMsIDk1LCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDIyNSwgMTQ4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDI1NCwgMjE3LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIyNCwgMTQ0LCAyMzAsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjQsIDE0NCwgNTIsIDIzMCwgMTAzLCAyMDcsIAorICAgIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjE4LCA5LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjI2LCA0MiwgMjA3LCAyMjQsIAorICAgIDE0NCwgMjUxLCAyNDksIDIyNCwgMTMyLCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjUxLCAyNywgMjA3LCAyMjQsIDE0NCwgCisgICAgMjUxLCAyNDksIDIzMywgMTQsIDIyMSwgMjI3LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjM1LCAxOSwgMjIxLCAyMjcsIAorICAgIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNDgsIDIzMCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAKKyAgICAyNTIsIDIwMCwgMjIxLCAyMjcsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjE2LCAyMTMsIDI1MiwgMTM4LCAyMjAsIDc5LCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMjQsIDIwMSwgMjEzLCAyNTIsIDUsIDIyOCwgMjE0LCAyMTMsIDI1MiwgNSwgMjExLCA4MCwgMjMwLCAKKyAgICAyMjcsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjU0LCAyMjIsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxMSwgODAsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDIzNCwgMjA0LCAKKyAgICAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDEwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgCisgICAgMjM0LCAyMDQsIDIzNSwgMjUwLCAyMTgsIDIsIDIyMSwgMTk5LCAyMTMsIDI1MiwgMTM4LCA1MiwgMjE4LCAxLCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMTUsIDIxMiwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIwNCwgMjU0LCA4NSwgMjEzLCAyNTIsIAorICAgIDEzOCwgNTksIDUxLCAyMTMsIDI1MiwgMTM4LCAxMTMsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDEzNCwgMTcwLCA1MSwgCisgICAgMjEzLCAyNTIsIDEzOCwgMjIyLCAyNDMsIDIzNCwgMjE1LCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTMsIAorICAgIDIxMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTgsIDEsIDIxMywgMjUyLCA1LCAyMTMsIAorICAgIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAyMjMsIDUyLCAyMTMsIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjU0LCA4NSwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgCisgICAgMjEzLCAxNDgsIDIxNCwgMjE3LCAyLCAyMTcsIDc4LCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgODYsIDIsIDIxNywgCisgICAgNzgsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTQsIDk5LCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjUyLCAxNzQsIDIxMywgCisgICAgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIwLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAyMSwgMiwgMjE3LCA3OCwgMjEzLCAKKyAgICAyNTIsIDUsIDIxNiwgNjksIDIxMywgMjUyLCA1LCAyNDEsIDE5OCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjAwLCAKKyAgICAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjIyLCAxNDQsIDIwMCwgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDIxNCwgCisgICAgMjIzLCAyMzAsIDk1LCAyMTMsIDI1MiwgNSwgMjU0LCAyOCwgMjEzLCAyNTIsIDUsIDIyMiwgMTg5LCAyNTQsIDI4LCAyMTMsIAorICAgIDI1MiwgMTM4LCAyNTEsIDEwLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTA4LCAyMTMsIDI1MiwgNSwgMjE0LCAxNjEsIDcsIAorICAgIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI1MiwgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAyNTIsIDcsIDEsIDQsIAorICAgIDYsIDI1MiwgMTQyLCAyNTMsIDE2NiwgNywgMSwgNCwgNiwgMjUxLCA3NCwgNywgMSwgNCwgNiwgMjQ5LCA2OCwgNywgMSwgNCwgCisgICAgNiwgMjQ1LCA2NywgNywgMSwgNCwgNiwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDc0LCA3LCAxLCA0LCA2LCAyMzUsIDE1MCwgNywgMSwgNCwgNiwgMjM1LCAyOSwgNywgMSwgNCwgNiwgMjMzLCAxNTUsIDIsIAorICAgIDkxLCA3LCAxLCA0LCA2LCAxOTQsIDcsIDEsIDQsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDcsIDEsIDQsIDYsIDc4LCA3LCAxLCAKKyAgICA0LCA2LCAyMDQsIDc4LCA3LCA0LCAxLCAyMTksIDE4OSwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCAyMDQsIDc4LCA3LCA0LCAKKyAgICAxLCAyMTksIDE4OSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzgsIDcsIDEsIDQsIDYsIDIyNiwgCisgICAgMTM4LCA3LCA0LCAxLCAyMTYsIDE1LCAxNjMsIDc4LCA3LCA0LCAxLCAyNTEsIDE4MywgMTYzLCA3OCwgNywgMSwgNCwgNiwgCisgICAgMjI2LCAxMDksIDcsIDEsIDQsIDYsIDIyMywgNTIsIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAxLCA0LCA2LCAKKyAgICAyMTcsIDE1MywgNywgMSwgNCwgNiwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDI0OCwgCisgICAgOCwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCAyMTUsIDk0LCAxOTQsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCA3LCAxLCA0LCA2LCAKKyAgICAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCAxNiwgNywgMSwgMjEzLCAxMzUsIDIzMywgCisgICAgODgsIDIxOCwgMjUyLCA3LCAxLCAyNTQsIDIwNSwgMjYsIDEsIDQsIDYsIDI0MywgMTE0LCAyNiwgMSwgNCwgNiwgMjMzLCAKKyAgICAxMDQsIDI2LCAxLCA0LCA2LCAyMjUsIDExMSwgMjYsIDEsIDQsIDYsIDIyMywgNDAsIDI2LCAxLCA0LCA2LCAyMjQsIDE2NCwgCisgICAgMzMsIDEsIDQsIDYsIDI0NSwgMTgyLCA1OCwgMSwgNiwgNjEsIDU4LCAxLCA2LCAyNTQsIDI1MiwgNTgsIDEsIDYsIDI1MywgCisgICAgMTY2LCA1OCwgMSwgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA1OCwgMSwgNiwgMjQ5LCA2OCwgNTgsIDEsIDYsIDc2LCA1OCwgCisgICAgMSwgNiwgMjIzLCA1MiwgNzYsIDU4LCAxLCA2LCAyNDMsIDIwOSwgNTgsIDEsIDYsIDI0MiwgNjcsIDU4LCAxLCA2LCA3NCwgCisgICAgNTgsIDEsIDYsIDIzNSwgMTUwLCA1OCwgMSwgNiwgMjM1LCAyOSwgNTgsIDEsIDYsIDE1NiwgNTgsIDEsIDYsIDE5NCwgNTgsIAorICAgIDEsIDYsIDIzMCwgMzAsIDU4LCAxLCA2LCAyMjMsIDUyLCAyMzAsIDMwLCA1OCwgMSwgNiwgNzgsIDU4LCAxLCA2LCAyMjYsIAorICAgIDEzOCwgNTgsIDEsIDYsIDIyNiwgMTA5LCA1OCwgMSwgNiwgMTUzLCA1OCwgMSwgNiwgMjE3LCAxNTMsIDU4LCAxLCA2LCA2OSwgCisgICAgNTgsIDEsIDYsIDIxMiwgOTgsIDU4LCAxLCA0LCA2MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDYxLCA1OCwgMSwgNCwgMjU0LCAKKyAgICAxNTEsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDI1MiwgNTgsIDEsIDQsIDI1MywgMTY2LCA1OCwgMSwgNCwgMjQ5LCA2OCwgCisgICAgNTgsIDEsIDQsIDc2LCA1OCwgMSwgNCwgMjIxLCAxOTcsIDU4LCAxLCA0LCAyMDQsIDc2LCA1OCwgMSwgNCwgMjE1LCA5NCwgCisgICAgMjA0LCA3NiwgNTgsIDEsIDQsIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgNzQsIDU4LCAxLCA0LCAyMzUsIDI5LCAKKyAgICA1OCwgMSwgNCwgMTk0LCA1OCwgMSwgNCwgMjQ1LCAxNDYsIDU4LCAxLCA0LCA3OCwgNTgsIDEsIDQsIDIwNCwgNzgsIDU4LCAKKyAgICAxLCA0LCAyMTYsIDE1LCAxNjMsIDc4LCA1OCwgMSwgNCwgMjUxLCAxODMsIDE2MywgNzgsIDU4LCAxLCA0LCAyMjYsIDEwOSwgCisgICAgNTgsIDEsIDQsIDIxNywgMTUzLCA1OCwgMSwgNCwgNjksIDU4LCAxLCA0LCAyMTksIDE4OSwgNjksIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAxOTQsIDU4LCAxLCA0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDI1NCwgMjA1LCA1OCwgMSwgNCwgMjUyLCAzNCwgNTgsIAorICAgIDEsIDQsIDI2LCAyNDMsIDExNCwgNTgsIDEsIDQsIDI0OCwgNjIsIDU4LCAxLCA0LCAyNiwgMjI1LCAxMzYsIDU4LCAxLCA0LCAKKyAgICAyNTAsIDExOCwgNywgMjE4LCA2NiwgNCwgMSwgNzQsIDcsIDIxOCwgNjYsIDQsIDEsIDE1MywgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgNjksIDcsIDIxOCwgNjYsIDQsIDEsIDIxNCwgMTA1LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjUyLCAzNCwgMjYsIDIxOCwgNjYsIAorICAgIDQsIDEsIDI0MywgMTE0LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjIzLCA0MCwgMjYsIDIxOCwgNjYsIDQsIDEsIDIyNSwgMTM2LCAKKyAgICAyNiwgMjE4LCA2NiwgNCwgMSwgMjUwLCAxMTgsIDcsIDQsIDEsIDIxNCwgMjE0LCA3LCA0LCAxLCA1NywgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NiwgMjIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTAsIDE2MCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDksIDU4LCAxLCAzMywgMjQ1LCAxNTgsIDcsIDQsIAorICAgIDEsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE2LCAyMTIsIDIsIDIxOCwgMTA5LCA3LCA0LCA2LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkzLCAyLCA5MSwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA0LCA2LCAKKyAgICAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIDU3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIAorICAgIDQsIDEsIDI0OSwgNjksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyNDMsIDIxMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMwLCAzMSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMjMsIDIyNywgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDI0NSwgODQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjExLCAxNzksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI0MSwgNTksIDIyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjA0LCAKKyAgICAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjIxLCAxOTgsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjA0LCAxNDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCA4NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDU4LCAxLCA0LCAyNTEsIDc0LCA1OCwgMSwgNCwgMjUxLCA3NSwgMiwgMjQ5LCAxMDgsIDU4LCAxLCAKKyAgICA0LCAyNDUsIDY3LCA1OCwgMSwgNCwgMjIzLCA1MiwgMjA0LCA3NiwgNTgsIDEsIDQsIDI0NSwgMTQsIDU4LCAxLCA0LCAyNDcsIAorICAgIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwOSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI0MiwgCisgICAgNjcsIDU4LCAxLCA0LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE5MiwgNTgsIDEsIDQsIDYsIDc0LCA1OCwgCisgICAgMSwgNCwgNiwgMjQwLCAxNjEsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA1OCwgMSwgNCwgMjMzLCAKKyAgICAxNTUsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAxNTYsIDU4LCAxLCA0LCAyMzIsIDU1LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMzIsIDU1LCAyLCAyMDAsIDIzMywgCisgICAgNDIsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgMjMwLCAzMSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA1OCwgMSwgNCwgNiwgMjMwLCAzMCwgNTgsIDEsIDQsIDI1MiwgMTQyLCA3OCwgNTgsIDEsIDQsIDIyNSwgMTM2LCA1OCwgMSwgCisgICAgNCwgMjIyLCA5NCwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA4MywgNTgsIDEsIDQsIDIxNywgMTU0LCAyLCAyMjYsIDcwLCAKKyAgICAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgMSwgNCwgNiwgNjksIDU4LCAxLCA0LCAKKyAgICAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIAorICAgIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDgsIDU4LCAxLCA0LCAKKyAgICAyNDUsIDE2LCA1OCwgMSwgNCwgMjE2LCAxODAsIDM4LCAyNDYsIDEyNiwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNDYsIAorICAgIDEyNiwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDIxOSwgNzEsIDUxLCAzOCwgMjE4LCA3LCA3OSwgMzgsIDIzMSwgMjM2LCAzOCwgCisgICAgMjQyLCAxNDEsIDM4LCAyMzEsIDIzNCwgMzgsIDI1NSwgMTAsIDM4LCAyNDIsIDE0MiwgMzgsIDI1NSwgMTEsIDM4LCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgNTEsIDM4LCAyNTEsIDE1MywgMzgsIDIzMSwgMjM1LCAzOCwgNTIsIDI1MCwgMzksIDQ4LCAzOCwgCisgICAgMjI2LCAyMjksIDQ4LCAzOCwgMjEwLCAzNSwgNTEsIDM4LCAyMzUsIDE3OSwgNTEsIDM4LCAyMTQsIDE1MSwgNDgsIDM4LCAKKyAgICAyMTQsIDEzNCwgNDgsIDM4LCA3LCA0LCAxLCAyNDQsIDcxLCAyMDQsIDExNiwgNDgsIDM4LCA3LCA0LCAxLCAyNTQsIDI1MiwgCisgICAgMzgsIDcsIDQsIDEsIDI1NCwgODEsIDM4LCA3LCA0LCAxLCAyNTMsIDE4NCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDI1MCwgCisgICAgMTkxLCAzOCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDM4LCA3LCA0LCAxLCAyNDUsIDY3LCAzOCwgNywgNCwgMSwgCisgICAgMjQzLCAyMDksIDM4LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgMzgsIDcsIDQsIDEsIDIzNSwgMjksIDM4LCA3LCA0LCAxLCAKKyAgICAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxOTQsIDM4LCA3LCA0LCAxLCAyMzAsIDMwLCAzOCwgCisgICAgNywgMSwgNCwgNiwgMjMwLCAzMCwgMzgsIDcsIDEsIDQsIDYsIDE1MywgMzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIAorICAgIDE4OCwgMzgsIDcsIDQsIDEsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMTAsIAorICAgIDE1OSwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgNTEsIDM4LCAKKyAgICA0MywgMjU0LCAyLCA0OCwgMzgsIDQ0LCAyNTQsIDIsIDIyLCAxMjQsIDI1NCwgMiwgNTEsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjIyLCAyMzcsIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA1MSwgNywgNiwgMSwgNTcsIDIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgNTcsIDIsIDU5LCA0OCwgNywgNiwgMSwgNTcsIDIsIDU5LCA1MSwgNywgNCwgMSwgNTcsIDIsIDU5LCA1MSwgNywgCisgICAgNiwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjUxLCAKKyAgICA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkyLCAyMiwgMTQyLCA3LCA2LCAKKyAgICAxLCAyNDksIDY5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAyNDksIDY5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDIzMiwgMjIwLCA1MSwgCisgICAgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNCwgCisgICAgMSwgMjQ5LCA2OSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyNDksIAorICAgIDY5LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgMjE2LCA5MCwgCisgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTIsIDIyLCAyNTEsIDE1NCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgCisgICAgMjIsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDUsIDE1LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCA1OSwgCisgICAgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAKKyAgICAyNTAsIDE5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUxLCAxNTUsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTEsIAorICAgIDE1NSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgCisgICAgOTAsIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIAorICAgIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDE0MiwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjM1LCAzMCwgCisgICAgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgCisgICAgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIAorICAgIDIzMiwgNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTQyLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjMyLCA1NSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzIsIAorICAgIDU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIAorICAgIDkwLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjQ4LCA5LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAKKyAgICAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDE0MiwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDE0MiwgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIzLCAKKyAgICAyMjcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgCisgICAgOTQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIAorICAgIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIAorICAgIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDk0LCAKKyAgICAyLCAyNTAsIDI0MywgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTcsIAorICAgIDE1NCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgCisgICAgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNiwgMSwgMTA0LCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIAorICAgIDIyLCAyNDgsIDksIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODQsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIxMiwgOTksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAKKyAgICA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDYsIAorICAgIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgCisgICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDIxMSwgCisgICAgMTE4LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDExNiwgMiwgNDQsIDE2MywgMjIyLCAyMzYsIDcsIDQsIDEsIDIwMCwgCisgICAgMjIyLCA5NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIwMCwgCisgICAgMjIyLCA5NCwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMjQ4LCA2MiwgNywgNiwgCisgICAgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCisgICAgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjUxLCAxNTUsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCAKKyAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCAKKyAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIAogICAgIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMTgyLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCi0gICAgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDEsIDUyLCA0OCwgNywgCi0gICAgNCwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAxMDQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTA0LCAKLSAgICAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQyLCAxMzYsIDcsIDQsIAotICAgIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgCi0gICAgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzMCwgMjIzLCAyMzIsIDE4NSwgNywgNCwgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA2LCAxLCAyMzAsIDIyMywgCi0gICAgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjIzLCAyMTQsIDEwNSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTIzLCA3LCAKLSAgICA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgCi0gICAgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1MywgMjYsIDQsIAotICAgIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NCwgMjYsIAotICAgIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAKLSAgICAxNTQsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMzUsIDE4NiwgCi0gICAgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTUzLCAyNiwgNiwgCi0gICAgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIAotICAgIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAKLSAgICAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAKLSAgICAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCi0gICAgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIAotICAgIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgCi0gICAgMTAxLCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjI2LCAxMTAsIDI2LCAKLSAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIAotICAgIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAKLSAgICAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgCi0gICAgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAKLSAgICAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIAotICAgIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgCi0gICAgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIAotICAgIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIAotICAgIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAKLSAgICAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjMxLCAyMzIsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgCi0gICAgNCwgMSwgMjU0LCAxNDQsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNiwgMTExLCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI1LCAxNzYsIAotICAgIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAKLSAgICAyMzEsIDIzMiwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTY3LCAyNiwgMjM0LCAyLCAyNiwgMjI0LCAxNjcsIDI2LCAyMjQsIAotICAgIDE1NCwgMjYsIDIyNSwgMTc1LCAyNiwgMjQ3LCAyNTIsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCAKLSAgICA2NCwgMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjQ1LCAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNjcsIDI2LCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIAotICAgIDI2LCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTg2LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAKLSAgICAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNSwgCi0gICAgMTc1LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAxMTAsIDI2LCAyNDgsIAotICAgIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzMiwgMjYsIDQsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyMywgMzgsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjQ4LCAKLSAgICAxNTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIAotICAgIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAKLSAgICAyMzEsIDIzMiwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjIzLCAzOCwgMiwgMjQ4LCAxNTMsIDI2LCAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCAyNDcsIAotICAgIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTEsIAotICAgIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE2NywgMjYsIDIyNiwgMTEwLCAyNiwgMjQ4LCAxNTMsIAotICAgIDI0NSwgMTUxLCAyMjQsIDI3LCAyNDUsIDE2MCwgMjI0LCAyNywgMjQ1LCAxNTEsIDIxOSwgMTgsIDI0NSwgMTYwLCAyMTksIAotICAgIDE4LCAyMTYsIDE0MSwgMjE5LCAxOCwgMjQ0LCA5LCAyMTksIDE4LCAyMTksIDEyMywgMjE5LCAxOCwgMjQ0LCAxMTIsIDIxOSwgCi0gICAgMTgsIDIyNCwgMTQxLCAyMTksIDE4LCAyMTYsIDE3MCwgMjE5LCAxOCwgMjQyLCAzNSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAKLSAgICAyNDUsIDIxOSwgMTgsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDY3LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjM1LCA2MywgCi0gICAgMjMzLCAzOCwgNzgsIDIyMiwgMjQzLCA3OCwgMjQwLCAxNjgsIDIyOCwgNjgsIDI0MCwgMTY4LCAyNDQsIDExMiwgMjQ4LCAKLSAgICAxNTYsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjQ1LCAxNjAsIDI0OCwgMTU2LCAyMDMsIDEzMCwgNTIsIDY3LCAyMzIsIDIxMywgCi0gICAgNTIsIDEyMSwgMjMyLCAyMTMsIDQzLCAyMTksIDE1NSwgMjIzLCAyNTQsIDc4LCA0NCwgMjE5LCAxNTUsIDIyMywgMjU0LCAKLSAgICA3OCwgMjE5LCAxNTUsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAKLSAgICA0MywgNTIsIDIyMywgMjU0LCA3OCwgNDQsIDUyLCAyMjMsIDI1NCwgNzgsIDUyLCAyMzIsIDEwOSwgMjIzLCAyNTQsIDc4LCAKLSAgICA1MiwgMjQxLCAxNjMsIDIyMywgMjU0LCA3OCwgMjQ4LCAyMDUsIDUyLCAyNDgsIDIwNSwgMjUxLCAxMTMsIDIxNSwgMjIyLCAKLSAgICAyNTEsIDExMywgMTIzLCA1OSwgMjMzLCA1NiwgMTEzLCA1OSwgMjMzLCA1NiwgMjAzLCAyNDUsIDE2MywgMjQwLCAxNjYsIAotICAgIDIyNSwgMTAsIDIzMiwgMjE0LCAyMjAsIDEzNywgMjI2LCAxNSwgMjIwLCAxMzcsIDIzMywgMzgsIDI0NSwgMTU4LCAyMjIsIAotICAgIDI0MywgMjQ1LCAxNTgsIDIyNCwgMjQ2LCAyNDcsIDE5NiwgMjQ0LCAxOSwgMjMzLCAzOCwgMjI2LCAxMTcsIDIyMiwgMjQzLCAKLSAgICAyMjYsIDExNywgMjI5LCAxOTQsIDIyOCwgNzMsIDIxOSwgMTgsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDIyNSwgMTgzLCAKLSAgICAyMTYsIDI0OCwgMjE2LCAxNDgsIDUwLCAyMjQsIDE5MCwgNTIsIDIyNCwgMTkwLCAyMTUsIDIxMSwgMjI0LCAxOTAsIDIyMywgCi0gICAgNDksIDIyNCwgMTkwLCAyMjMsIDQ5LCA1MiwgMjI0LCAxOTAsIDIyMywgNDksIDIxNSwgMjExLCAyMjQsIDE5MCwgMjUwLCAKLSAgICAyMzgsIDIxOSwgMTU1LCAyMzMsIDQyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDc4LCAyMTksIDE1NSwgMjIyLCAyNDcsIDI1NCwgCi0gICAgMTEwLCAyMjMsIDI1NCwgNzgsIDIyMywgMTA3LCA3OCwgNTIsIDI0NSwgMzEsIDc4LCAyMzUsIDIwMSwgMjI2LCAxMTksIAotICAgIDIxNCwgMTgwLCAxMzUsIDIxNiwgMTExLCAyNTAsIDIzOSwgMjM1LCAyMTYsIDIyNSwgMTAsIDI1MywgMjE0LCAyNDAsIDE2OSwgCi0gICAgMjUxLCAxMTMsIDI0NCwgMiwgMjE5LCA5NSwgNDMsIDQyLCAyNTEsIDE1OCwgMiwgMjI0LCA3LCA0NCwgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMjQsIDcsIDUyLCAyMjQsIDEzLCA3OCwgMjI0LCAxMywgMjQ1LCAzMSwgNzgsIDI0NSwgMzEsIDIyNCwgMTMsIDc4LCAKLSAgICAyMTYsIDcwLCA1LCAyNDUsIDY1LCAyMjMsIDQ5LCAyMjUsIDY4LCA1MCwgODUsIDE0MCwgMjUxLCAxMTMsIDg1LCA5NywgCi0gICAgMjUxLCAxMTMsIDEyMSwgMjUzLCAyMTYsIDIyMywgNDksIDIyMCwgMTUwLCAyNTAsIDEsIDIxNCwgMTYzLCAxMTMsIDI1MywgCi0gICAgMjE1LCAyNTQsIDE1OCwgMjEzLCAxODgsIDI0OSwgMjE3LCAyMzAsIDE4MiwgNTAsIDIxNywgMjM0LCAyNDgsIDE1NiwgMjM1LCAKLSAgICAxOTMsIDIxNCwgMTgwLCAyNDQsIDUyLCAyMjQsIDE0MSwgNzgsIDEzNCwgNTksIDIyNCwgMTQwLCAyMjQsIDI0LCAyMjQsIAotICAgIDE5MCwgMjQ0LCAxMSwgNTksIDIyNCwgMTQwLCAyNDQsIDgxLCA1OSwgMjI0LCAxNDAsIDExMywgNTksIDIyNCwgMTQwLCAKLSAgICAyNDQsIDExLCA1OSwgNzgsIDI0NiwgMTE4LCAyNDksIDEzMCwgMjE1LCAyMjEsIDY3LCAyNDQsIDExLCAyNDcsIDExOCwgCi0gICAgMjMxLCA4MiwgMTEsIDIxOSwgMTgsIDIxMSwgMjA5LCAyMzUsIDYzLCAyNDMsIDIyNywgMjU0LCA1MiwgMjM1LCAxOTEsIAotICAgIDIxNiwgODUsIDIzNSwgMTkxLCAyMjAsIDEzNywgMjM1LCAxOTEsIDIyNSwgMjIsIDIzNSwgMjI4LCAyMTcsIDE4MiwgMjE3LCAKLSAgICAyNTEsIDI1NSwgNSwgMjE3LCAxODIsIDIxNywgMjUxLCAyMzUsIDIyOCwgMTAsIDI0NCwgMjAsIDIyMCwgODAsIDI1NSwgNSwgCi0gICAgMTAsIDI0NCwgMjAsIDIyMCwgODAsIDIyOSwgMTg5LCAyMSwgMjIwLCA4MSwgMjI4LCA2OSwgMjEsIDIyMCwgODEsIDIxOCwgCi0gICAgMjMsIDIxMCwgODYsIDIxOCwgMjMsIDcsIDQsIDEsIDczLCAyMTgsIDIzLCAxNjEsIDIxOCwgMjMsIDE4OSwgMjE4LCAyMywgCi0gICAgMTk0LCAyMTgsIDIzLCAxOTgsIDIxOCwgMjMsIDE5NSwgMjE4LCAyMywgMjAwLCAyMTgsIDIzLCA5NiwgNTAsIDIxOCwgMjMsIAotICAgIDIzMCwgMTgxLCAyMTgsIDIzLCAyNDUsIDk4LCA1MCwgMjE4LCAyMywgNDMsIDIyNiwgMywgMjE4LCAyMywgNDQsIDIyNiwgMywgCi0gICAgMjE4LCAyMywgNywgNCwgMSwgMjMwLCAyNSwgMjE4LCA2NSwgMjEwLCA4NiwgMjE4LCA2NSwgMTEwLCAyMTgsIDY1LCAxMDUsIAotICAgIDIxOCwgNjUsIDE1OCwgMjE4LCA2NSwgMTYxLCAyMTgsIDY1LCAxODksIDIxOCwgNjUsIDE5NCwgMjE4LCA2NSwgMTk4LCAKLSAgICAyMTgsIDY1LCAxOTUsIDIxOCwgNjUsIDIwMCwgMjE4LCA2NSwgOTYsIDUwLCAyMTgsIDY1LCAyMzAsIDE4MSwgMjE4LCA2NSwgCi0gICAgMjQ1LCA5OCwgNTAsIDIxOCwgNjUsIDQzLCAyMjYsIDMsIDIxOCwgNjUsIDQ0LCAyMjYsIDMsIDcsIDIxOCwgNjUsIDQsIDEsIAotICAgIDYxLCA3LCAyMTgsIDY1LCA0LCAxLCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgNzYsIDcsIDIxOCwgNjUsIDQsIDEsIDIxMSwgCi0gICAgMTc4LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjEsIDE5NSwgNywgMjE4LCA2NSwgNCwgMSwgMjQyLCA2MCwgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjM1LCAyMywgNywgMjE4LCA2NSwgNCwgMSwgMTU2LCA3LCAyMTgsIDY1LCA0LCAxLCAxOTMsIDcsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIzMCwgMjUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyNiwgMTA1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjIsIDkxLCA3LCAKLSAgICAyMTgsIDY1LCA0LCAxLCAyMTcsIDE1MiwgMjQ1LCA0NiwgNTAsIDI0OSwgMjI3LCA1MCwgMjQ5LCAxMTcsIDUwLCAyNDMsIAotICAgIDI1MSwgMjQzLCAyNTQsIDUwLCAyMzIsIDE5OCwgNTAsIDIzMCwgMTk0LCA1MCwgMjI5LCAyMTAsIDUwLCAyMjUsIDE2MiwgCi0gICAgNTAsIDIyMiwgMTE4LCA1MCwgMjExLCAyMTcsIDUwLCAxNjYsIDIyMCwgNDksIDUwLCAyNDcsIDEyNywgNTAsIDI0NSwgNDcsIAotICAgIDUwLCAyMzQsIDc2LCA1MCwgMjE1LCAxMTIsIDUwLCAyNDYsIDEwMSwgNTAsIDI0MywgNDAsIDIyNSwgMTkzLCA1MCwgMjI1LCAKLSAgICAxNjAsIDUwLCAyNDIsIDEwOSwgNTAsIDI1MywgMTgyLCA1MCwgMjQwLCAyMjgsIDUwLCAyNTAsIDE4NSwgNTAsIDIzMiwgCi0gICAgMTkxLCAyMTYsIDMsIDUwLCAyMTksIDAsIDUwLCAyMTYsIDI0NSwgNTAsIDIzNSwgMjQxLCAyMjIsIDExOCwgNTAsIDM4LCAKLSAgICA0MywgMjQxLCAyNTUsIDQ4LCAzOCwgNDQsIDI0MSwgMjU1LCA0OCwgMzgsIDE5OSwgNjcsIDIzMiwgMjE0LCAyMjYsIDEyMCwgCi0gICAgMzgsIDIxOSwgMjUxLCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAzOCwgMjU0LCA4OCwgODAsIDQ4LCAzOCwgMjUwLCAyLCAKLSAgICA4MCwgNDgsIDM4LCA0MywgODAsIDQ4LCAzOCwgNDQsIDgwLCA0OCwgMzgsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDI1MCwgCi0gICAgMiwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjU0LCA4OCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMTM0LCAxNzAsIDQ4LCAKLSAgICAzOCwgMjQ0LCAxMSwgMTcwLCA0OCwgMzgsIDI0NSwgMTQ2LCAyNTAsIDM1LCAzOCwgMjQ1LCAxNDYsIDIxOCwgMjM0LCAzOCwgCi0gICAgMjQ1LCAxNDYsIDI0NywgMjQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzYsIDI1MiwgMTgwLCAzOCwgNDMsIDQ0LCA4MCwgNDgsIAotICAgIDM4LCAyNDUsIDE0NiwgMjIxLCAxODgsIDM4LCAyNDUsIDE0NiwgMjM0LCAxMzUsIDM4LCAyNDUsIDE0NiwgMjE0LCAxNTUsIAotICAgIDIyNSwgNywgMjE1LCAyMjUsIDM4LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDUyLCA2NywgMjE4LCAxMDMsIAotICAgIDIyNiwgMTIwLCAzOCwgMjU0LCA5OCwgODcsIDM4LCAyMTUsIDIxMSwgMjE0LCAxODIsIDM4LCAyMTEsIDI0NywgMjUxLCAKLSAgICAxNDAsIDQ4LCAzOCwgMTQwLCA4MCwgMjI2LCAxMjAsIDM4LCAxOTksIDUyLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDk3LCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTAzLCAzOCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgCi0gICAgMTAzLCAzOCwgNDMsIDgwLCA1MSwgMzgsIDQ0LCA4MCwgNTEsIDM4LCAyNTMsIDIxNywgNDgsIDI1NSwgMTEsIDIyNiwgMjMxLCAKLSAgICAyNTQsIDI1MSwgMjE2LCA0MiwgMjE2LCAxOTYsIDIxOCwgNzQsIDEzOSwgNiwgMjUxLCA2NiwgMjQ4LCA3MSwgMjUwLCAxNzgsIAotICAgIDI1MCwgMTc1LCAyMzIsIDIxNCwgODcsIDI1MCwgMjQwLCAyMjYsIDIzMSwgMjUxLCAyNiwgMjE0LCAxODksIDI0NSwgNDgsIAotICAgIDI0OSwgMTkxLCAyMjEsIDE4NSwgMjQ4LCA3MSwgMjQ0LCAxNzksIDExOSwgNCwgMjQzLCAyMDIsIDExOSwgNiwgMjQyLCA2MCwgCi0gICAgMjUxLCAyMTksIDYsIDI0MiwgNjAsIDEzOSwgNiwgMjQyLCA2MCwgMjI1LCAzNywgMjQ5LCAxOTEsIDIyNSwgMzcsIDI0OSwgCi0gICAgMTkyLCAxMTcsIDExMywgMjI1LCAxMDgsIDExOSwgNiwgNzMsIDI1MSwgMjE5LCA2LCA3MywgMTE5LCA2LCAxNTYsIDExOSwgCi0gICAgNCwgMTU2LCAyMzMsIDE0OSwgNTcsIDI1MiwgMTQxLCA4NywgMTM5LCA2LCAyMzAsIDI1LCAyMjcsIDE5NiwgNTAsIDIxOSwgCi0gICAgMzEsIDIyMywgMTE5LCAyNDksIDE2MiwgMTE5LCA2LCAyMjYsIDEwNSwgMTM5LCA2LCAyMjYsIDEwNSwgMTM5LCA2LCAyMjQsIAotICAgIDk2LCAxMTksIDYsIDE1MywgMjUxLCAyMTksIDYsIDE1MywgMTM5LCA2LCAxNTMsIDIyNCwgMTk2LCAyMTcsIDcxLCAyMjMsIAotICAgIDYyLCAyMjAsIDEzMiwgNzgsIDIxNywgMSwgNTAsIDIxNSwgMjUzLCAxNjQsIDUwLCAyMTMsIDI0MCwgMTM5LCA2LCAyMTAsIAotICAgIDE1OSwgMjI2LCAxMzMsIDUwLCAyMjYsIDIyMSwgNTAsIDIzNSwgMTkzLCAyMjYsIDIyMSwgNTAsIDI1MSwgMjE5LCA2LCAKLSAgICAyMTAsIDE1OSwgMjE1LCA5NCwgMjYsIDQsIDEsIDIzNSwgMTg1LCAyMzQsIDE3MywgNTAsIDI1NCwgMTA3LCA1MCwgMTE5LCAKLSAgICA2LCAyNTMsIDE1OCwgMjUxLCAyMTksIDYsIDI1MSwgNjYsIDI0NSwgNjgsIDg3LCAxMTksIDQsIDc1LCAxMTksIDYsIDc1LCAKLSAgICAxMTksIDYsIDI0NSwgNiwgMjE1LCA5NCwgNiwgMjQ1LCA2LCAxMTksIDYsIDE5MywgMTE5LCA0LCA3NiwgMTEyLCA4NywgCi0gICAgMjUyLCAyOSwgODcsIDI0MiwgMjAyLCA4NywgMjQ4LCAxOTAsIDg3LCAyMzUsIDIzMiwgMjE5LCAyOSwgMjIyLCAxODcsIDYsIAotICAgIDIyNCwgOTYsIDI0NCwgMTgyLCA1MCwgMTM5LCA0LCAyMjUsIDEwOCwgMTM5LCA0LCAyNDMsIDEwNywgMTM5LCA2LCAyNDMsIAotICAgIDEwNywgMTM5LCA2LCAyMjUsIDEwOCwgMTM5LCAyMzAsIDI0LCAyMTgsIDQwLCAyMTUsIDk0LCAzNSwgNiwgMjQzLCAyMDIsIAotICAgIDIxNSwgOTQsIDM1LCA2LCAxNTYsIDIyMywgNDksIDM1LCA2LCAxNTYsIDIxNSwgOTQsIDM1LCA2LCAyMTEsIDExNywgMTM5LCAKLSAgICAzMiwgNiwgMjQ5LCA2MCwgMTM5LCAzMiwgNCwgMjQ5LCA2MCwgMTM5LCAzMiwgNCwgNzUsIDEzOSwgMzIsIDQsIDczLCAxMzksIAotICAgIDMyLCA0LCAyMzUsIDE0NCwgMjI0LCAxNzAsIDIzMiwgMjEzLCAyMTUsIDk0LCAyNTQsIDEyNiwgMjI1LCAxODMsIDUwLCAKLSAgICAyNTQsIDE4MCwgMjE1LCA5NCwgNCwgMjQ1LCA2LCAxNiwgMzEsIDIyMSwgMjUyLCAyMTksIDI5LCAyMTIsIDExNCwgMjQ0LCAKLSAgICAyLCAxMjMsIDIyMCwgMTE4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIyOCwgMTk0LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxNiwgMjQxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxNiwgMTY4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMTMsIDIxNiwgCi0gICAgMTY2LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0NCwgMTE3LCAyMTIsIDExNCwgMjQ0LCAyLCAxMTMsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMzQsIDI0NCwgMTE2LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDExLCAyNDQsIDExNiwgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMTksIDExNSwgMjEyLCAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjE5LCAxMTMsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ1LCAxODYsIDIxMiwgCi0gICAgMTE0LCAyNDQsIDIsIDI0NCwgODEsIDI0NSwgMTg2LCAyMTIsIDExNCwgMjQ0LCAyLCAyMjAsIDEyMiwgMjQ1LCAxODYsIAotICAgIDI0NCwgMiwgMjI3LCAxOTcsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTA1LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDE1OCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxNjEsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMTg5LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTgsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMTk1LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIwMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTYsIDI0NywgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAyNDUsIDE2NywgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTUsIDc2LCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDI0NCwgMTE0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgCi0gICAgMjQwLCAyMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0NywgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMTAsIAotICAgIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTA1LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE1OCwgNCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxNjEsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTg5LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NCwgNCwgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAxOTgsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk1LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDIwMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTYsIDI0NywgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDUsIDE2NywgNCwgCi0gICAgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTUsIDc2LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTAsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjQwLCAyMTAsIAotICAgIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ4LCAKLSAgICAyNTEsIDY3LCAyNDksIDYwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAyMjMsIDQ5LCAxMjMsIDI0MCwgMjEwLCA3LCAKLSAgICA0LCAxLCAyMjMsIDQ5LCAyNTEsIDY2LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxOSwgMTI1LCAyMzMsIDc4LCAxNywgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAyNDQsIDExNSwgMjQ1LCAyMjYsIDE3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyMTYsIAotICAgIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjExLCAyMTYsIDE0NywgMjEyLCAxMTQsIDI0NCwgMiwgMjEwLCAKLSAgICA4NywgMjE2LCAxNjYsIDE0MCwgNzQsIDIxNCwgMTUzLCA3NCwgOTcsIDc0LCAyNDYsIDEwNCwgNzQsIDQzLCA0NCwgNzQsIAotICAgIDEyMCwgMTI0LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIDE0MCwgODAsIDIsIDkxLCA5NywgODAsIDIsIDkxLCAxNDAsIDIxMiwgCi0gICAgMzYsIDc0LCA5NywgMjEyLCAzNiwgNzQsIDE0MCwgMTEzLCAyNDEsIDIzNCwgNzQsIDIxNCwgMTUzLCAxMTMsIDI0MSwgMjM0LCAKLSAgICA3NCwgOTcsIDExMywgMjQxLCAyMzQsIDc0LCAyNDYsIDEwNCwgMTEzLCAyNDEsIDIzNCwgNzQsIDE0MCwgODAsIDIsIDIxNywgCi0gICAgNzcsIDk3LCA4MCwgMiwgMjE3LCA3NywgMTQwLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDgwLCAyNDMsIDI0MywgCi0gICAgMTMwLCA5NywgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTIwLCAxMjQsIDgwLCAyLCAKLSAgICAyNTIsIDEyNywgMTQwLCA4MCwgMiwgMTAzLCA5NywgODAsIDIsIDEwMywgMTQwLCA4MCwgMiwgMjMyLCAxMjMsIDk3LCA4MCwgCi0gICAgMiwgMjMyLCAxMjMsIDQzLCA0NCwgMjEyLCAzNiwgNzQsIDQzLCA0NCwgODAsIDIsIDkxLCAyNDYsIDEwNCwgMjEwLCAzNSwgCi0gICAgNzQsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3NywgMjMzLCAzNywgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMjIsIAotICAgIDI0MSwgMjQ2LCAxMDQsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCA5NywgODAsIDIsIDI0OSwgMTYxLCAyNDYsIDEwMywgMjQ2LCAxMDQsIDgwLCAyLCAyNDksIDE2MSwgMjMzLCAzNywgCi0gICAgMjU0LCA4OCwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyNTAsIDIsIDIxNiwgMTQsIDIyMCwgMTUzLCA3NCwgMjI4LCA1NiwgCi0gICAgMjEyLCA5LCA4MCwgMjE2LCA0MiwgMTk5LCAxMzAsIDE0MCwgODAsIDIxNiwgNDIsIDI1MiwgMTQxLCAxMTcsIDk3LCA4MCwgCi0gICAgMjE2LCA0MiwgMTMwLCAyNTQsIDg4LCAyMDQsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDIwNCwgMjUwLCAzNiwgNzQsIDE0MCwgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTAzLCAKLSAgICAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI0MSwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjMzLCAzNywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjE0LCAxNTIsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDI0NiwgMTAzLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI0MSwgMjQ2LCAxMDQsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgMjMzLCAzNywgOTcsIDgwLCAxMTcsIDE0MCwgNzQsIDIxNCwgMTUzLCA4MCwgMTQwLCA2NCwgCi0gICAgMjQ2LCAxMDQsIDc0LCAxNDAsIDgwLCAxMTcsIDk3LCA3NCwgMTQwLCAyMjYsIDcwLCAyNTMsIDI0NywgMjE0LCAxNTMsIAotICAgIDIyNiwgNzAsIDI1MywgMjQ3LCA5NywgMjI2LCA3MCwgMjUzLCAyNDcsIDI0NiwgMTA0LCAyMjYsIDcwLCAyNTMsIDI0NywgCi0gICAgMTQwLCAyNDEsIDI1NSwgMTE3LCA5NywgMjQxLCAyNTQsIDk3LCAyNDEsIDI1NSwgMTE3LCAxNDAsIDI0MSwgMjU0LCAxNDAsIAotICAgIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc0LCAKLSAgICAyMTQsIDE1MywgNTIsIDc0LCA5NywgNTIsIDc0LCAyNDYsIDEwNCwgNTIsIDc0LCA0MywgNDQsIDUyLCA3NCwgMTIwLCAxMjQsIAotICAgIDUyLCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA1MiwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA1MiwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA1MiwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgNTIsIDc0LCAxNDAsIDIxNSwgMjExLCA3NCwgOTcsIDIxNSwgMjExLCAKLSAgICA3NCwgMTQwLCAyMTgsIDIzMCwgNzQsIDk3LCAyMTgsIDIzMCwgNzQsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIAotICAgIDEwNCwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE1NSwgNzQsIDIxNCwgMTUzLCAyNDgsIDE1NSwgNzQsIDk3LCAyNDgsIAotICAgIDE1NSwgNzQsIDI0NiwgMTA0LCAyNDgsIDE1NSwgNzQsIDE0MCwgODAsIDIxNiwgNDIsIDEzMCwgOTcsIDgwLCAyMTYsIDQyLCAKLSAgICAxMzAsIDE0MCwgNzEsIDc0LCAyMTQsIDE1MywgNzEsIDc0LCA5NywgNzEsIDc0LCAyNDYsIDEwNCwgNzEsIDc0LCAyMTQsIAotICAgIDE1MywgNzEsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgMjI1LCAyMTQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNSwgMiwgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAKLSAgICAyMjUsIDIxNSwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCA1MiwgNzQsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIAotICAgIDE5NywgMjI1LCAyMTQsIDk3LCA3MSwgODAsIDI0MywgMjQzLCAyMTIsIDU2LCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyMTYsIAotICAgIDQyLCAyNDksIDE2MCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMTYsIDQyLCAyNDksIDE2MCwgMTIwLCAxMjQsIDcxLCA3NCwgCi0gICAgNDQsIDgwLCAyLCA0LCAyNTAsIDM1LCAyNDYsIDEwNCwgODAsIDE0MCwgNjQsIDIxNCwgMTUzLCA3NCwgMTM0LCA5NywgMjUzLCAKLSAgICAyNDcsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCAKLSAgICA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIAotICAgIDIyNiwgMTczLCA3NCwgOTcsIDIyNiwgMTczLCA3NCwgNDMsIDQ0LCAyMjYsIDE3MywgNzQsIDMxLCAyNTQsIDE1NCwgMjQ5LCAKLSAgICAyMTQsIDIyNSwgMjUzLCAyNDcsIDIzMywgMjE2LCAxODcsIDI0NSwgMjcsIDIxNiwgMTg3LCAyNDcsIDEzOCwgMjI4LCA1MiwgCi0gICAgMjQ1LCAyOCwgMjQ1LCAxNTIsIDIyMCwgMTI3LCAyMzUsIDI0NSwgMjI5LCAyMjEsIDI0NSwgMTcwLCAyMjYsIDIzMSwgMjI4LCAKLSAgICA1MiwgMjU0LCAxMjQsIDI0NSwgMTcwLCAyMjYsIDIzMSwgNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyNDksIDE4NiwgMjUzLCAKLSAgICAyMzgsIDIzMSwgNjIsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIzMSwgNjIsIDQsIDI0OSwgCi0gICAgMTg2LCAyNTMsIDIzOCwgMjMxLCA2MiwgMjQ1LCAxNDMsIDY0LCAyMjQsIDE3MiwgMjMwLCAyNCwgMjI0LCAxODAsIDIzMCwgCi0gICAgMjQsIDI0OSwgMTY1LCAyMzAsIDI0LCAyMTgsIDQwLCAyMzAsIDE4MiwgNTAsIDIzMCwgMTgwLCA1MCwgNTksIDIyNSwgMjIsIAotICAgIDI0NywgMTY5LCAyMTksIDk1LCAyMjAsIDEyOCwgMjMwLCAxODEsIDI1MywgMjE3LCAyMjYsIDE2NywgMjIyLCAyMzQsIDIyNiwgCi0gICAgMTY3LCAyNTEsIDExNCwgMjI2LCAxNjcsIDQyLCAyMjIsIDE5MywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNDQsIDQsIDIyMiwgCi0gICAgMTkzLCAyMjQsIDE2OCwgMTExLCAyMzUsIDIzNCwgNDQsIDI1NCwgMTA5LCAyNTQsIDEwOSwgMjMxLCA4OCwgMjU0LCAxMDksIAotICAgIDIxOCwgMjU1LCAyNTQsIDEwOSwgMjQ3LCAxNzEsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIDE3NCwgMjI2LCA4LCAxMTEsIAotICAgIDIyOCwgNTIsIDIyNiwgOCwgMTExLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjM1LCAxOTgsIAotICAgIDIxNCwgMTc1LCAyMzUsIDIxMSwgNTIsIDIzNSwgMjExLCAyMTUsIDIxMSwgMjM1LCAyMTEsIDI0OSwgMTgyLCAyMzUsIDIxMSwgCi0gICAgMjE4LCAxMywgMjM1LCAyMTEsIDIxMywgMTI5LCAyMzUsIDIxMSwgMjUwLCAyLCAyMzUsIDIxMSwgMjUwLCAyLCAyNDksIAotICAgIDE4MiwgMjM1LCAyMTEsIDI1NCwgODgsIDI0OSwgMTgyLCAyMzUsIDIxMSwgMjE2LCAxODYsIDI1MiwgNjcsIDIyMywgMTM3LCAKLSAgICAyMjQsIDE2OSwgNTksIDIzMCwgMTgxLCAyNDUsIDMzLCAyNDMsIDQ2LCAyMjQsIDE2OSwgMjQxLCA1NywgMjE2LCA4OSwgCi0gICAgMjI2LCAxNjcsIDIyMywgNDksIDE4MiwgMjM1LCAxOTMsIDIzMywgNjUsIDIyMiwgOTEsIDIxOSwgMTU3LCAyMTIsIDM1LCAKLSAgICAyMTEsIDIwMCwgMjI0LCAxODAsIDIyOCwgNTIsIDE4MiwgMjMwLCAxODIsIDE4MiwgMjUzLCAyMTAsIDEyOCwgMTExLCAyMjgsIAotICAgIDUyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDI1NCwgNDgsIDEyOCwgMTExLCAyNTQsIDQ4LCAyNTEsIDg4LCAyMjgsIDUyLCAKLSAgICAyNTUsIDQsIDEyOCwgMTExLCAyMjksIDEwMCwgMjU0LCA0OCwgMjI4LCA1OSwgMjU1LCA0LCAxMjgsIDExMSwgMjU0LCAxNDgsIAotICAgIDEyOCwgMTExLCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDI1NCwgMTQ4LCAxMjgsIDE3NywgMTI4LCAxMTEsIDIxNSwgCi0gICAgMjExLCAxODIsIDI1NCwgMTU1LCAxMjgsIDExMSwgMjQ1LCA5NCwgMTExLCAyNDMsIDQ1LCAyNDUsIDk0LCAxMTEsIDI0NywgCi0gICAgMjM0LCAyNTIsIDIzLCAyNTQsIDUwLCAyMTYsIDE5NiwgMjMyLCAyMjEsIDI0MywgNDUsIDEyOCwgMTExLCAyNTQsIDQ4LCAKLSAgICAxMjgsIDIxNiwgNDIsIDE3NywgMjE2LCAxOTYsIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzYsIDE1LCA2NCwgMTc3LCAyNTQsIAotICAgIDQ4LCAxMjgsIDExMSwgMjQ5LCAyMjcsIDI0NSwgOTcsIDI0NSwgOTgsIDI0OSwgMjI2LCAyMjIsIDIzNCwgMjM2LCAwLCAKLSAgICAxMjgsIDExMSwgMjIyLCAyMzQsIDEyOCwgMTExLCAyNDksIDE1NCwgMTExLCAyNDUsIDY3LCAyNDUsIDk2LCAxMTEsIDIxOCwgCi0gICAgMTU3LCAyNDUsIDk3LCAyNDgsIDU1LCAxMjgsIDExMSwgMTI4LCAyMTYsIDQyLCAyNTEsIDc4LCAyNDgsIDcyLCAyMzEsIDg4LCAKLSAgICAyNTEsIDc3LCAyMjQsIDExLCAxMjgsIDExMSwgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MCwgMTA0LCAxMTEsIDIyOCwgNTIsIAotICAgIDI0MCwgMTA0LCAxMTEsIDIxOCwgMTA5LCAyNDUsIDk0LCAxMTEsIDIzMywgMTUsIDE3NywgMTI4LCAxMTEsIDI0MiwgMTMwLCAKLSAgICAxNzcsIDEyOCwgMTExLCAyMzMsIDE1LCAxMTcsIDEyOCwgMTExLCAyNDIsIDEzMCwgMTE3LCAxMjgsIDExMSwgMjMzLCAxNSwgCi0gICAgMjUxLCA4OCwgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCAKLSAgICA5NywgMjMzLCAxNCwgMjMwLCA5NywgMjQyLCAxMjksIDI1MiwgMjMsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjMzLCAxNCwgMjI4LCA1MiwgMjQyLCAxMjksIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAKLSAgICAxMDAsIDI0MiwgMTMwLCAyMjgsIDU5LCAxMjgsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDUsIDk0LCAxMTEsIDI0MiwgMTMwLCAKLSAgICAxNzcsIDI0NSwgOTQsIDExMSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjI5LCAxMDAsIAotICAgIDI0MiwgMTMwLCAyMjgsIDU5LCAyNDUsIDk0LCAxMTEsIDIzMywgMTUsIDE3NywgMjQyLCAxMjksIDI0MiwgMTMwLCAxNzcsIAotICAgIDIzMywgMTQsIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAyNDIsIDEyOSwgMjI5LCAxMDAsIDI0MiwgMTMwLCAyMjgsIAotICAgIDU5LCAyMzMsIDE0LCAyMjQsIDIwMiwgMjE4LCA1NSwgMjI0LCAyMDMsIDE3NywgMTI4LCAxMTEsIDIxOCwgNTYsIDE3NywgCi0gICAgMTI4LCAxMTEsIDIyNCwgMjAzLCAxNzcsIDI0NSwgOTQsIDExMSwgMjE4LCA1NiwgMTc3LCAyNDUsIDk0LCAxMTEsIDI0NywgCi0gICAgMTM4LCAyMjgsIDUyLCAyMjQsIDIwNSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIxOCwgNTcsIDIxOCwgNjQsIDIyNiwgMjMxLCAKLSAgICAyMTgsIDIyLCAyMjYsIDIzMSwgMjI4LCA1MiwgMTE1LCAyMTgsIDY0LCAyMjYsIDIzMSwgMjI4LCA1MiwgMTE1LCAyMTgsIAotICAgIDIyLCAyMjYsIDIzMSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMTExLCAKLSAgICAyMjksIDEwMCwgMTE1LCAyMTgsIDY0LCA2NCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIyOSwgMTAwLCAxMTUsIDIxOCwgMjIsIAotICAgIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjE4LCA2NCwgNjQsIDIsIDIyOCwgNTIsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgMiwgCi0gICAgMjI4LCA1MiwgMTI4LCAxMTEsIDIzMCwgODEsIDIzMCwgODIsIDIzMCwgODMsIDIzMCwgODIsIDIxNCwgMTc1LCA0MiwgMjM2LCAKLSAgICAxNSwgMjI2LCAyMzEsIDQyLCAyMjYsIDE1MCwgMjI2LCAyMzEsIDQyLCAyMzYsIDE1LCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIAotICAgIDIyNiwgMTUwLCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIDI1MCwgMjUxLCA0MiwgMjQ5LCAxMDIsIDM3LCAyMjUsIDIyLCAzNywgCi0gICAgMjMwLCAxODEsIDM3LCAyMTYsIDg1LCAzNywgMjQ3LCAxNjksIDIxOSwgOTUsIDM3LCA1OSwgMjI2LCAxNjcsIDM3LCAyMjIsIAotICAgIDIzNCwgMjI2LCAxNjcsIDM3LCAyNTMsIDIxNywgMjI2LCAxNjcsIDM3LCAyNDUsIDk3LCAzNywgMjQ4LCAxNTYsIDkyLCAKLSAgICAyMjUsIDIyLCA5MiwgMjMwLCAxODEsIDkyLCAyMTYsIDg1LCA5MiwgNTksIDIyNiwgMTY3LCA0NCwgMjE3LCA4NywgNDMsIAotICAgIDIxNywgODcsIDEyNCwgMjE3LCA4NywgMTIwLCAyMTcsIDg3LCAyNTMsIDIyMCwgMjMwLCAxNTYsIDIxNSwgMTkxLCAyNDQsIAotICAgIDI1LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIAotICAgIDkzLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjI0LCAxNjMsIDIyOCwgNTIsIDIxNSwgMTkxLCAyNDcsIDEzOCwgMjI4LCA1MiwgCi0gICAgMjQ0LCAyNiwgMjI5LCAxMDIsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDMsIDIxNCwgMTg0LCAKLSAgICAyMjMsIDkxLCAyMTgsIDU2LCAyMTQsIDE4NCwgMjIzLCA5MSwgMjI4LCA1NywgMjE4LCA3NywgMjI2LCAyMzEsIDI0OSwgCi0gICAgMTg2LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NiwgMjI4LCA1NywgMjE4LCA3NywgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDI0OSwgMTg2LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NywgMTc3LCAxMjgsIDExMSwgMjI2LCAxNTAsIDIyNiwgMjMxLCAKLSAgICAyMzYsIDE1LCAyMjYsIDIzMSwgMjMwLCA4NywgMjQxLCAyMDAsIDI0OSwgMTk2LCAyMzEsIDEzNywgMjM1LCAyMDgsIDIxMSwgCi0gICAgMTQ1LCAyMjksIDIwMiwgMjI4LCA1OCwgNDQsIDI1NCwgMTEwLCAyLCAyNTQsIDI1LCA0NCwgMjE1LCAyMjUsIDIzMCwgMjQsIAotICAgIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMwLCAyNCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzAsIDI0LCAyMzUsIDE5OCwgMjMwLCAKLSAgICAyNCwgMjE0LCAxNzUsIDI0NywgMjQ5LCAyMjYsIDE2NywgNTksIDIyNiwgMTY3LCAyMTgsIDE1NywgMjI2LCAxNjcsIDI0NywgCi0gICAgMTY5LCAyMTYsIDg1LCAyNTEsIDE2NCwgNDMsIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAKLSAgICAyMjgsIDU3LCAyNDQsIDE4MSwgMjIwLCAxNDksIDIyNCwgMTgwLCA0MywgMjIwLCAxNDksIDIyNCwgMTgwLCA0NCwgMjIwLCAKLSAgICAxNDksIDIyNCwgMTgwLCAyMjMsIDQ5LCAyMTYsIDg5LCAyNDUsIDk3LCAyNDksIDk5LCAyMzIsIDE0NiwgMjI2LCAxNTgsIAotICAgIDI0OSwgOTksIDIzMiwgMTQ2LCAyNTQsIDExOCwgNTIsIDIxOCwgNjMsIDUyLCAyMTgsIDIxLCA1MiwgMjM1LCAxOTgsIDUyLCAKLSAgICAyMTQsIDE3NSwgMjI1LCA0NywgMTI4LCAyMiwgMjI2LCA4LCAxMTEsIDIzMywgMTUsIDIsIDI0NywgMTIwLCAyNDIsIDEzMCwgCi0gICAgMiwgMjQ3LCAxMjAsIDIxMywgMTg3LCAyMzAsIDk3LCAyMzMsIDE0LCAyMTMsIDE4NywgMjMwLCA5NywgMjQyLCAxMjksIAotICAgIDIzMywgMTUsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIAotICAgIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAxMjgsIDIxNiwgCi0gICAgNDIsIDE3NywgMjI0LCAyMDIsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTgsIDU1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjI0LCAKLSAgICAyMDYsIDE3NywgMjQ1LCA5OSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIxOCwgNTgsIDE3NywgMjQ1LCA5OSwgMjI4LCA1MiwgNDIsIAotICAgIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCAyMjgsIDUyLCA0MiwgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMjI4LCA1MiwgMTI4LCAKLSAgICAxMTEsIDIzMywgMTUsIDI1MSwgODgsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI0NSwgOTQsIDExMSwgMjI0LCAyMDMsIDI1MSwgODgsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjE4LCA1NiwgMjUxLCA4OCwgCi0gICAgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ3LCAxMzgsIAotICAgIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NiwgMjI4LCA1MiwgMjI4LCA1NywgMjE4LCA3NywgCi0gICAgNjQsIDE3NywgMTI4LCAxMTEsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgCi0gICAgNzcsIDE3NywgMjQ1LCA5OSwgNjcsIDI0NSwgMTYzLCAyMzAsIDIyMiwgMjAzLCAyNDUsIDE2MywgMTIwLCA0NCwgMjQ3LCAKLSAgICAyNTUsIDI0NSwgMTYzLCAxMjQsIDQ0LCAyNDcsIDI1NSwgMjQ1LCAxNjMsIDI0NSwgMTcwLCA2NCwgMiwgMTk5LCAyMDMsIAotICAgIDkxLCAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgNCwgCi0gICAgMjQ1LCAxNzAsIDY0LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0NSwgMTcwLCAKLSAgICA2NCwgMiwgNTksIDQ4LCAyNDUsIDE3MCwgNjQsIDIsIDIyNiwgMTIzLCA0LCAyNDUsIDE3MCwgNjQsIDIsIDIyNiwgMTIzLCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDIxNCwgMTgzLCAyNDUsIDE3MCwgNjQsIDIsIDExMywgMjAzLCAyMTgsIDkwLCAyNDksIDE4NiwgCi0gICAgMiwgMTk5LCAyMDMsIDkxLCAyNDksIDE4NiwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIAotICAgIDkxLCA0LCAyNDksIDE4NiwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCAyNDksIAotICAgIDE4NiwgMiwgMjI2LCAxMjMsIDQsIDI0OSwgMTg2LCAyLCAyMjYsIDEyMywgMjEwLCAxNjAsIDE4NywgMjUyLCAxNzMsIDIzMSwgCi0gICAgNjEsIDI0NywgMjUwLCA1MCwgMjQ1LCAxNzIsIDc0LCAyNDAsIDIzNCwgMTIwLCAyNTMsIDI0OSwgMTI0LCAyNTMsIDI0OSwgCi0gICAgMjI0LCAxNzUsIDIyNSwgMTY1LCAyMTIsIDMyLCAyMzIsIDIxMywgNDMsIDI1MCwgMTgxLCA0NCwgMjUwLCAxODEsIDQzLCAKLSAgICAyNDQsIDU3LCA0NCwgMjQ0LCA1NywgMjUxLCAxNzUsIDQ0LCAyNDksIDEzMiwgMjUxLCAxNzUsIDQzLCAyNDksIDEzMiwgCi0gICAgMjE2LCAxNCwgNDQsIDI0OSwgMTMyLCAyMTYsIDE0LCA0MywgMjQ5LCAxMzIsIDIyMywgNDksIDIyOCwgNTIsIDUwLCA0MiwgCi0gICAgMjMyLCAxMDQsIDI1NCwgMjUsIDIyMSwgMTY0LCAyMjEsIDE3MSwgMjE3LCAxLCAyMjMsIDEyMCwgMjI0LCAyNDEsIDIzNSwgCi0gICAgMjM4LCAyMTMsIDE2NSwgMjE4LCAyMzQsIDIyNSwgNDEsIDY0LCAyMzUsIDIwNywgNTAsIDIxNSwgOTQsIDIyOCwgNTIsIDUwLCAKLSAgICAyMTIsIDQyLCAyNDAsIDIzNiwgMjE2LCAxNCwgNDMsIDI0OSwgMTYwLCAyMTYsIDE0LCA0NCwgMjQ5LCAxNjAsIDI1MSwgCi0gICAgMTc1LCA0MywgMjQ5LCAxNjAsIDI1MSwgMTc1LCA0NCwgMjQ5LCAxNjAsIDIxNiwgMTQsIDE2MywgMjM1LCAyMTEsIDI1MSwgCi0gICAgMTc1LCAxNjMsIDIzNSwgMjExLCAyNDMsIDI0MCwgMjE5LCA3NSwgMTIwLCAyNTMsIDI1MCwgMjUyLCAyNCwgMTEzLCAyMDMsIAotICAgIDI1MiwgMTI5LCAyMjYsIDE2MCwgMjM0LCAxMzgsIDI0NSwgOTAsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMjIsIDI1MSwgMjExLCAKLSAgICAxNzksIDIzNiwgMCwgMTE1LCAyMjMsIDExNywgMjUxLCAxNjMsIDIzNCwgMTM3LCAyMzMsIDQyLCAyNTQsIDExMCwgMTI3LCAKLSAgICAyMjIsIDI0NywgMjU0LCAxMTAsIDEyNywgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIzMywgNDYsIDI1MiwgMzUsIAotICAgIDIyMiwgMjMzLCAyNDksIDcwLCAyNTQsIDE1NSwgMjU0LCAxLCAyMTcsIDE4MSwgMjE2LCA0LCAyMjIsIDEyMywgMjQ3LCAKLSAgICAyMTUsIDIyNiwgMTUxLCAyNDksIDE5OCwgMjE3LCA1MiwgMjE5LCA4NiwgMjQ5LCAxNTEsIDI0OSwgMTUwLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDI0MCwgMTUxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxOCwgMjI4LCAyMjQsIDI3LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NSwgOTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ3LCAKLSAgICAxNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ3LCAyNDgsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNTAsIDM1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIzNSwgNTYsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjE5LCA5NiwgMTMwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MiwgMTgxLCAxMzAsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjE5LCA5NSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyNTIsIDE4MCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMzMsIDE0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDI0MiwgMTI5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDE0MCwgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCA5NywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAxNDAsIDc0LCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDk3LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNTIsIDE4MCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDIxNywgODgsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI0OCwgNTUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDEyNCwgMjUwLCAyMzgsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ4LCA1NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDIxNywgODgsIAotICAgIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE0LCAxNTMsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjE0LCAxNTMsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjI2LCAxMjMsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA2NiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMTIwLCAyNTAsIDIzOCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDY1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDYsIDEwNCwgMjE0LCAxOSwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDYsIDEwNCwgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIzLCAKLSAgICAyNTMsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgNTUsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI0NywgMjQ5LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMzUsIDU3LCAyMTQsIDE4MywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIAotICAgIDIyMCwgNSwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIDI1MywgMjI0LCAyNywgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNTAsIDM2LCAyMTgsIDE1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDksIDIyNiwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIAotICAgIDY2LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAxNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAyMzUsIDU3LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjQ4LCAxLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDEyNCwgMjIwLCA1LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCA0MywgMjIwLCA1LCAKLSAgICAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTYsIDg5LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQyLCAxMzAsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDksIDIyMCwgMTMwLCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI0OCwgNjYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTAsIDM0LCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIxOCwgMTM2LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIwLCAxNTEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIyOCwgNTIsIDI0NSwgOTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMjI0LCAxMiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMTIwLCAyNTAsIDIzOSwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgMTg1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDIyMywgMzcsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI2LCAyMDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjU0LCAxNDQsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NSwgMTAxLCAyMTQsIDE4MywgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMzUsIDE4NiwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI2LCAyMDIsIDIxNCwgCi0gICAgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1NCwgMTQzLCAyMjgsIDUyLCAyNTAsIDEzMCwgNzgsIDQ0LCAyNTQsIAotICAgIDExMCwgMiwgMjQ2LCAxMDQsIDIxMCwgMzUsIDc0LCAyMTksIDIzNSwgMjA0LCAyNTEsIDE2MywgMjUyLCA0NSwgODcsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCAyMzUsIDIxNiwgODcsIDI0OSwgMTgzLCAyMTQsIDE4MSwgODcsIAotICAgIDI0NywgMTg5LCAyMTQsIDE4MSwgODcsIDI0NSwgMTU0LCA4NywgMjQ5LCAyMTAsIDg3LCA3MSwgNDIsIDIsIDI1MCwgMTc1LCAKLSAgICA2NywgMjMyLCAyMTMsIDI0NSwgMTMwLCA4NywgMjU0LCAxMzksIDIzNCwgMTM5LCA4NywgMjQxLCAyMTMsIDg3LCAzNywgCi0gICAgMjAzLCAyNTIsIDE0MSwgMiwgMjI4LCA1MCwgMzcsIDIxNSwgMjI2LCAyNDYsIDEwNiwgMjUxLCAxMzUsIDI1MCwgMzYsIDIsIAotICAgIDIyOCwgNTQsIDc0LCAyMTQsIDE3OSwgODcsIDIzMCwgMTM3LCA4NywgMjQwLCAxNjQsIDg3LCAyMjYsIDE3NCwgMjQyLCA1OSwgCi0gICAgODcsIDIyNiwgMTc0LCAyMzMsIDE0NywgODcsIDIyNSwgMjQ0LCA4NywgMjI1LCAyNDMsIDg3LCAyNDcsIDE5NywgMjQ5LCAKLSAgICA5NywgMTYsIDI0NCwgMjAsIDEwNSwgMjE5LCA1MCwgODcsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyNywgMjQ4LCAKLSAgICA4MywgMjIwLCAxMzgsIDIzNCwgMTM5LCA4NywgMjI0LCAxOTIsIDIyNiwgNzUsIDIyOSwgODIsIDIyNiwgNzUsIDIyNCwgCi0gICAgMTg4LCAyMjEsIDE4OSwgODcsIDI1MCwgMTcsIDIyMSwgMTg5LCA4NywgNDMsIDIyNiwgNCwgMjE0LCAxNjAsIDEwMywgNDMsIAotICAgIDIyNiwgNCwgMjQ1LCAyMSwgNDMsIDIyNiwgNCwgMjMyLCAxMDgsIDEwMywgNDQsIDIyNiwgNCwgMjE0LCAxNjAsIDEwMywgCi0gICAgNDQsIDIyNiwgNCwgMjQ1LCAyMSwgNDQsIDIyNiwgNCwgMjMyLCAxMDgsIDEwMywgNDMsIDQyLCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyNDUsIDIxLCA0MywgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgCi0gICAgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIxNCwgMTYwLCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjQ1LCAKLSAgICAyMSwgNDQsIDQyLCAyNTEsIDE1OCwgMjMyLCAxMDgsIDI0OSwgMTYwLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIxNCwgCi0gICAgMTYwLCAxMDMsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjMwLCAyMjQsIDIyNSwgMTAxLCA0MywgMjQ5LCA5OSwgMjUxLCAKLSAgICAxNTgsIDIzMiwgMTA4LCAxMDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyNDUsIDIxLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIAotICAgIDIxNCwgMTYwLCAxMDMsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgMjMwLCAyMjQsIDIyNSwgMTAxLCA0NCwgMjQ5LCA5OSwgCi0gICAgMjUxLCAxNTgsIDIzMiwgMTA4LCAxMDMsIDIzNSwgMjEyLCAyNDUsIDIxLCAyMDMsIDIzMiwgMjE0LCAyNDUsIDIxLCAyMTQsIAotICAgIDE2MCwgNDMsIDE3NywgMjMyLCAxMDgsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgMjIxLCAxNzIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMTc3LCAyMzIsIDEwOCwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE4LCA0MSwgMjE2LCAxMywgMjE4LCAKLSAgICA0MSwgMjUxLCAxNzQsIDIxNiwgMTQsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMTI3LCAyNTEsIDE3NSwgNDIsIDI1MSwgCi0gICAgMTU4LCAxMTcsIDIxNiwgMTQsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxNzQsIDQzLCA2NywgOTMsIDIzMiwgMjEzLCA0NCwgCi0gICAgNjcsIDkzLCAyMzIsIDIxMywgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTIsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjExLCAyMDMsIAotICAgIDIyMSwgMjA1LCAyMzIsIDIxMCwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMDksIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjE2LCAxNCwgMjIyLCAyNTEsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjUxLCAxNzUsIDIyMiwgMjUxLCAyNDgsIDQ2LCAKLSAgICAxNiwgMTkyLCA2NywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjAzLCAyLCAyNTAsIDM1LCAyNDgsIAotICAgIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyLCAyMTUsIDIyNSwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgCi0gICAgMjAzLCAyLCAyMTUsIDIyNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyMTIsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAKLSAgICAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyMTYsIDE0LCAyMzMsIDQ2LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIAotICAgIDI1MSwgMTc1LCAyMzMsIDQ2LCA0MiwgMjQ0LCAzMiwgMjIzLCA1NCwgODcsIDI0NSwgMTgyLCA4NywgNjcsIDIzMiwgMjE0LCAKLSAgICAyNDUsIDIxLCAyMzEsIDMzLCAyNTEsIDE0NiwgMjMxLCAzMywgMTk5LCAxMTcsIDIxOSwgMjUwLCAyMzEsIDMzLCAyMTksIAotICAgIDI1MSwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTk5LCAxMTcsIDExMywgMjE5LCAyMzcsIDIzMSwgMzMsIDExMywgMjE5LCAKLSAgICAyMzgsIDExNywgMjMyLCAxMzcsIDIzMSwgMzMsIDExMywgMjE5LCAyMzgsIDIzNSwgNjQsIDIzMSwgMzMsIDIxNSwgMjA4LCAKLSAgICAyMzEsIDMzLCAyMTYsIDIyMywgMjMxLCAzMywgMjI1LCAxODgsIDI0NSwgMjI0LCAyNDIsIDEyMiwgMjQzLCAyMTksIDIxNiwgCi0gICAgMTQsIDIyNiwgMywgMjUxLCAxNzUsIDIyNiwgMywgMjE2LCAxNCwgMjQ5LCA5OSwgMTI3LCAyNTEsIDE3NSwgMjQ5LCA5OSwgCi0gICAgMTI3LCAyMTYsIDE0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjUxLCAxNzUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA3MSwgCi0gICAgMjE1LCAyMzksIDI1MiwgMzUsIDIyMiwgMjM0LCAyLCAyNTAsIDM1LCAyMTgsIDEyMCwgMjQ0LCA2NCwgMjU1LCAxNywgMjQ5LCAKLSAgICA5NiwgMjQ1LCAxNzEsIDIzNSwgMTk4LCAyNDgsIDgzLCAyNDUsIDI0LCA4NywgODUsIDIyMiwgMjQ3LCA1MiwgMjE1LCAyMjUsIAotICAgIDg1LCAyMzMsIDQyLCA1MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI1LCA4NSwgMjQ2LCAxMDUsIDUyLCAKLSAgICAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCA1MiwgMjE1LCAyMjYsIDIsIDY3LCAxMzAsIDg1LCAyMzMsIDQyLCA1MiwgMjE1LCAKLSAgICAyMjYsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjYsIDIsIDUyLCA2NywgMTMwLCAyNTQsIDE3MywgMjUwLCAKLSAgICAzLCAyMTgsIDEyNiwgMjE2LCA4NiwgMjUwLCAzLCAyNDAsIDIzNywgMiwgMjQ0LCA1MCwgMjIxLCAyNDEsIDE2LCAzMSwgCi0gICAgMjI3LCAyMDIsIDE2LCAzMSwgMjE4LCAxNTIsIDY0LCAyNDEsIDIzMywgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDIxNiwgMjEyLCAKLSAgICAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0MywgMTYsIDMxLCAKLSAgICAyNDUsIDEzMiwgMTYsIDMxLCAyNTUsIDcsIDE2LCAzMSwgMjUyLCA0NCwgMTYsIDMxLCAyNTIsIDE3OSwgMTYsIDMxLCAyMDMsIAotICAgIDIxNywgODksIDE2LCAzMSwgMjMyLCAyMTQsIDI0NCwgMTQ1LCAxNiwgMzEsIDY3LCAyMTcsIDg5LCAxNiwgMzEsIDI0NCwgCi0gICAgMjAsIDI0NCwgMTQ1LCAxNiwgMzEsIDI1MCwgMjMwLCAyMjMsIDUzLCAxNiwgMzEsIDIyMCwgMjgsIDIyNiwgMTMwLCAxNiwgCi0gICAgMzEsIDIyMCwgMjgsIDIzNSwgMjU1LCAxNiwgMzEsIDI0OCwgMTUxLCAyMzIsIDIwNCwgMjQ1LCA3NywgMTYsIDMxLCAyNDgsIAotICAgIDMxLCAyNDksIDE3OCwgMTEwLCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxMDUsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE1OCwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIDE3OCwgMTYxLCAxNiwgMzEsIDE1MiwgMjU1LCA3LCAxNiwgMzEsIAotICAgIDIxNywgMTc3LCAyMzYsIDYyLCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDQsIDI1MSwgMjEzLCAxNiwgMzEsIDI1MSwgCi0gICAgNSwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIzMSwgODEsIDE2LCAzMSwgMjE4LCA2MSwgMTYsIDMxLCAyNDUsIDc3LCAxNiwgCi0gICAgMzEsIDI0NCwgMTA3LCAyMjAsIDEzNywgMTYsIDMxLCAyNDIsIDEyMSwgMjIwLCAxMzcsIDE2LCAzMSwgMjIzLCAxMjEsIAotICAgIDIyMCwgMTM3LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzNywgMTYsIDMxLCAyMTksIDE4LCAxNiwgMzEsIDI0OCwgNjMsIAotICAgIDI1MSwgMjE2LCA4NywgMjA0LCAyNTEsIDE2MywgMTYsIDMxLCAyMjksIDg1LCAxNiwgMzEsIDI0OCwgNjQsIDI0NCwgMjAsIAotICAgIDEwNSwgMTYsIDMxLCAyMTgsIDYyLCAyNDQsIDIwLCAxMDUsIDIyNiwgMjQxLCAxMDMsIDIyNiwgMjQxLCAyNTAsIDE1MiwgCi0gICAgMjI2LCAyNDEsIDI0NCwgMjMsIDIyNiwgMjQxLCAyMzUsIDE5MywgMjQ0LCAyMywgMjI2LCAyNDEsIDI1MiwgNDIsIDI1MSwgCi0gICAgMTI0LCAyMjYsIDI0MSwgMjUxLCAxNzAsIDIxNiwgMTExLCAyMjYsIDI0MSwgMjUxLCAxNTUsIDI1MiwgMTQ2LCAyNDAsIAotICAgIDEwMywgMjI2LCAyNDEsIDI1NCwgMTI3LCA2NCwgMjUwLCAxMjksIDIyNiwgMjQxLCAyNDgsIDE1NiwgMjI2LCAyNDEsIDI0OSwgCi0gICAgODcsIDI1NSwgMTEsIDIyNywgMjAwLCAyMjYsIDI0MSwgNTIsIDI1MiwgMTgwLCAzNywgMjEsIDExMCwgMzcsIDIxLCAxMDUsIAotICAgIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxODksIDM3LCAyMSwgMTk0LCAzNywgMjEsIDE5OCwgMzcsIDIxLCAKLSAgICAxOTUsIDM3LCAyMSwgMjAwLCAzNywgNTQsIDIxNiwgMjQ3LCAzNywgNTQsIDI0NSwgMTY3LCAzNywgNTQsIDIxNSwgNzYsIAotICAgIDM3LCA1NCwgMjE2LCAxNjQsIDM3LCA1NCwgMjQ0LCA1LCAzNywgNTQsIDI0NCwgMTE4LCAzNywgNTQsIDIxOSwgMTE5LCAzNywgCi0gICAgNTQsIDIyMCwgMTE5LCAzNywgNTQsIDI0NSwgMTkwLCAzNywgNTQsIDIyOCwgMTk3LCAzNywgNTQsIDIxNSwgNzMsIDg4LCAKLSAgICAyMSwgMTEwLCA4OCwgMjEsIDEwNSwgODgsIDIxLCAxNTgsIDg4LCAyMSwgMTYxLCA4OCwgMjEsIDE4OSwgODgsIDIxLCAxOTQsIAotICAgIDg4LCAyMSwgMTk4LCA4OCwgMjEsIDE5NSwgODgsIDIxLCAyMDAsIDg4LCA1NCwgMjE2LCAyNDcsIDg4LCA1NCwgMjQ1LCAKLSAgICAxNjcsIDg4LCA1NCwgMjE1LCA3NiwgODgsIDU0LCAyMTYsIDE2NCwgODgsIDU0LCAyNDQsIDUsIDg4LCA1NCwgMjQ0LCAxMTgsIAotICAgIDg4LCA1NCwgMjE5LCAxMTksIDg4LCA1NCwgMjIwLCAxMTksIDg4LCA1NCwgMjQ1LCAxOTAsIDg4LCA1NCwgMjI4LCAxOTcsIAotICAgIDg4LCA1NCwgMjE1LCA3MywgMjEsIDEyMywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMTEzLCAyNDMsIDIyOSwgMjE4LCAKLSAgICAxMjksIDIxLCAxMzQsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDI0NCwgMTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIAotICAgIDI0NCwgODEsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxOSwgMTI1LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMjAsIAotICAgIDEyMiwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ1LCAxOTMsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyOCwgMjAwLCAKLSAgICAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMTYsIDI0OCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ1LCAxNjgsIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNSwgNzcsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMTY1LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDU0LCAyNDQsIDYsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDI0NCwgMTE5LCAyNDMsIDIyOSwgMjE4LCAKLSAgICAxMjksIDU0LCAyMTksIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjIwLCAxMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgNTQsIDI0NSwgMTkxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjgsIDE5OCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgCi0gICAgMjE1LCA3NCwgMjQzLCAyMjksIDIxOCwgMTI5LCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCA0LCAxLCAyNTMsIDE1OCwgODgsIAotICAgIDcsIDQsIDEsIDI1MSwgNjYsIDg4LCA3LCA0LCAxLCAyNDksIDYwLCA4OCwgNywgNCwgMSwgNzUsIDg4LCA3LCA0LCAxLCAKLSAgICAyNDUsIDYsIDg4LCA3LCA0LCAxLCAyNDMsIDIwMiwgODgsIDcsIDQsIDEsIDI0MiwgNjAsIDg4LCA3LCA0LCAxLCA3MywgODgsIAotICAgIDcsIDQsIDEsIDIzNSwgMTQ0LCA4OCwgNywgNCwgMSwgMjM1LCAyMywgODgsIDcsIDQsIDEsIDE1NiwgODgsIDcsIDQsIDEsIAotICAgIDE5MywgODgsIDcsIDQsIDEsIDIzMCwgMjUsIDg4LCA3LCA0LCAxLCA3NiwgODgsIDcsIDQsIDEsIDIyNiwgMTA1LCA4OCwgNywgCi0gICAgNCwgMSwgMjI0LCA5NiwgODgsIDcsIDQsIDEsIDE1MywgODgsIDcsIDQsIDEsIDIyMiwgOTEsIDg4LCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgODgsIDcsIDQsIDEsIDcwLCA4OCwgNywgNCwgMSwgMjE0LCAxMDUsIDg4LCA3LCA0LCAxLCAyMTIsIDk4LCA4OCwgNywgCi0gICAgNCwgMSwgMjExLCAxNzgsIDg4LCA3LCA0LCAxLCAyMTEsIDExNywgODgsIDcsIDQsIDEsIDIxMCwgMTU5LCAzNywgNywgNiwgCi0gICAgMSwgNjEsIDM3LCA3LCA2LCAxLCAyNTMsIDE1OCwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDM3LCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICAzNywgNywgNiwgMSwgNzUsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDM3LCA3LCA2LCAxLCAyNDMsIDIwMiwgMzcsIDcsIDYsIDEsIAotICAgIDI0MiwgNjAsIDM3LCA3LCA2LCAxLCA3MywgMzcsIDcsIDYsIDEsIDIzNSwgMTQ0LCAzNywgNywgNiwgMSwgMjM1LCAyMywgCi0gICAgMzcsIDcsIDYsIDEsIDE1NiwgMzcsIDcsIDYsIDEsIDE5MywgMzcsIDcsIDYsIDEsIDIzMCwgMjUsIDM3LCA3LCA2LCAxLCAKLSAgICA3NiwgMzcsIDcsIDYsIDEsIDIyNiwgMTA1LCAzNywgNywgNiwgMSwgMjI0LCA5NiwgMzcsIDcsIDYsIDEsIDE1MywgMzcsIDcsIAotICAgIDYsIDEsIDIyMiwgOTEsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAzNywgNywgNiwgMSwgMjE0LCAKLSAgICAxMDUsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgCi0gICAgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAzNywgNywgNCwgMSwgNjEsIDM3LCA3LCA0LCAxLCAyNTMsIDE1OCwgMzcsIDcsIDQsIAotICAgIDEsIDI1MSwgNjYsIDM3LCA3LCA0LCAxLCAyNDksIDYwLCAzNywgNywgNCwgMSwgNzUsIDM3LCA3LCA0LCAxLCAyNDUsIDYsIAotICAgIDM3LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzcsIDcsIDQsIDEsIDI0MiwgNjAsIDM3LCA3LCA0LCAxLCA3MywgMzcsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ0LCAzNywgNywgNCwgMSwgMjM1LCAyMywgMzcsIDcsIDQsIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5MywgCi0gICAgMzcsIDcsIDQsIDEsIDIzMCwgMjUsIDM3LCA3LCA0LCAxLCA3NiwgMzcsIDcsIDQsIDEsIDIyNiwgMTA1LCAzNywgNywgNCwgCi0gICAgMSwgMjI0LCA5NiwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgOTEsIDM3LCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgMzcsIDcsIDQsIDEsIDcwLCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCA0LCAxLCAyMTIsIDk4LCAzNywgNywgCi0gICAgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIDIxMCwgMTU5LCAzNywgMjEsIAotICAgIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE2NywgMTUyLCAzNywgNTQsIDIxNSwgNzYsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDE2NCwgMTUyLCAzNywgNTQsIDI0NCwgNSwgMTUyLCAzNywgNTQsIDI0NCwgMTE4LCAxNTIsIDM3LCA1NCwgMjE5LCAxMTksIAotICAgIDE1MiwgMzcsIDU0LCAyMjAsIDExOSwgMTUyLCAzNywgNTQsIDI0NSwgMTkwLCAxNTIsIDM3LCA1NCwgMjI4LCAxOTcsIDE1MiwgCi0gICAgMzcsIDU0LCAyMTUsIDczLCA1MiwgMzcsIDIxLCAxMTAsIDUyLCAzNywgMjEsIDEwNSwgNTIsIDM3LCAyMSwgMTU4LCA1MiwgCi0gICAgMzcsIDIxLCAxNjEsIDUyLCAzNywgMjEsIDE4OSwgNTIsIDM3LCAyMSwgMTk0LCA1MiwgMzcsIDIxLCAxOTgsIDUyLCAzNywgCi0gICAgMjEsIDE5NSwgNTIsIDM3LCAyMSwgMjAwLCA1MiwgMzcsIDU0LCAyMTYsIDI0NywgMTUyLCAzNywgMjEsIDIxMCwgODYsIDkzLCAKLSAgICA5OSwgMTkyLCAyNDEsIDQ0LCA5MywgOTksIDExNCwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxMywgMjM5LCA5MywgOTksIAotICAgIDExNCwgMjEzLCAyMzksIDkzLCA5OSwgMTkyLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAKLSAgICAyMTUsIDIxMSwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCAKLSAgICA5MywgOTksIDExNCwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIyNCwgMjQsIDI0OCwgCi0gICAgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDExNCwgMjI0LCAyNCwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMjQsIAotICAgIDI0LCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTkyLCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIAotICAgIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMTI0LCAKLSAgICAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIAotICAgIDQzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAyMzIsIAotICAgIDIzMCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIAotICAgIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMTQsIDEyMCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAKLSAgICAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTI0LCAxOTIsIDIyLCA0NCwgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQ0LCAxMjQsIDI0MSwgCi0gICAgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAKLSAgICA2NywgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCAKLSAgICA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0MywgMTI0LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyNCwgMjIsIDI0MSwgNDQsIAotICAgIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTI0LCAKLSAgICAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAyMDMsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgCi0gICAgNDQsIDEyNCwgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMTIwLCAyMiwgCi0gICAgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAKLSAgICAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIAotICAgIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIAotICAgIDIyLCA0NCwgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA2NywgCi0gICAgMjIsIDI0MSwgNDQsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCA2NywgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIAotICAgIDQzLCA2NywgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIAotICAgIDIyLCAxMjQsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAxMjAsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgNjcsIDExNCwgMjIsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgNDMsIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgNDQsIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDMsIDEyNCwgMTE0LCAyMiwgCi0gICAgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgMTI0LCAxOTIsIDIyLCAxMjAsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAxMjQsIDIwMywgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCA2NywgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgMjIsIDQ0LCA2NywgCi0gICAgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA1MiwgMjQ4LCAxNTcsIDI0MSwgCi0gICAgNDQsIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA1MiwgMjQ4LCAxNTcsIDIxMywgCi0gICAgMjM5LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCA1MiwgMjQxLCA0NCwgOTMsIDk5LCAKLSAgICA1MiwgMjEzLCAyMzksIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAKLSAgICAyMiwgNDQsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAKLSAgICAyMiwgNDMsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIAotICAgIDIzMywgNDYsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgCi0gICAgNDQsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgCi0gICAgNDMsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIAotICAgIDIzMywgNDYsIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDQ0LCAKLSAgICAyMTksIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0MywgCi0gICAgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIzMywgNDYsIAotICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAKLSAgICAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDIwMywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDI0MSwgNDQsIAotICAgIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCAyMDMsIDIxOSwgCi0gICAgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjQsIDIyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAyNDcsIAotICAgIDI1NSwgMjE0LCAxNjAsIDQ0LCAyMTYsIDQyLCAyMzIsIDEwOCwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI0NywgMjU1LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgMjU1LCAyNDksIAotICAgIDEzMCwgOTMsIDk5LCAxOTIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyMTQsIDE2MywgOTMsIDk5LCAxOTIsIDIyMiwgMjUxLCAKLSAgICA5MywgOTksIDE5MiwgMjQ2LCAxMDYsIDkzLCA5OSwgMTE0LCAyMzMsIDQ2LCA5MywgOTksIDExNCwgMjE0LCAxNjMsIDkzLCAKLSAgICA5OSwgMTE0LCAyMjIsIDI1MSwgOTMsIDk5LCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDE5MiwgNDMsIDIyLCAxMTQsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMTE0LCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDQzLCAyMiwgMTkyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDE5MiwgMjQ2LCAxMDYsIDIxNCwgMTYwLCAxNjMsIDI1MSwgMjEzLCAyMzIsIAotICAgIDEwOCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCAyMzIsIDEwOCwgCi0gICAgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxNjMsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjQ0LCA4MSwgMjQ1LCAKLSAgICAxODcsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTM0LCAyMjQsIDIwLCAyNTEsIDIxMywgMjMyLCAxMDgsIDIyMCwgMTIyLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDI0MywgMjI5LCAyNTEsIDIxMywgNDMsIDIyMCwgMTIyLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAKLSAgICAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCA0MywgMjQ0LCA4MSwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgMTYzLCAyNTEsIAotICAgIDIxMywgNDMsIDEzNCwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgMTIzLCAyMjQsIDIyLCAyNTEsIDIxMywgNDMsIDEyMywgCi0gICAgMjQ1LCAxODksIDI1MSwgMjEzLCA0NCwgMTYzLCAyNTEsIDIxMywgMTkyLCAyMjAsIDkyLCAyMzEsIDgyLCAyMjAsIDkyLCAKLSAgICAyNDgsIDE2MiwgMjIwLCA5MiwgMjE0LCAxNjAsIDEyMywgMjQ1LCAxODksIDI1MSwgMjEzLCA0NCwgMTIzLCAyNDUsIDE4OSwgCi0gICAgMjUxLCAyMTMsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgCi0gICAgMjYsIDIxNCwgMTYwLCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIAotICAgIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgCi0gICAgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCAKLSAgICA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDIyMiwgCi0gICAgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMiwgMjMyLCAxMDgsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA4NSwgMjE4LCAyMzQsIDcxLCAyMTgsIDIzNCwgNzEsIAotICAgIDQyLCAyLCAyMjIsIDE4MywgMjQ5LCAxNTksIDcxLCA0MiwgMjQ5LCAxODcsIDg1LCA0LCAyMTgsIDIzNCwgNDIsIDIsIDIwMywgCi0gICAgMjQ0LCAxMDUsIDQyLCAyLCA2NywgMjQ0LCAxMDUsIDQyLCAyLCAyMjYsIDE0NCwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA0MiwgCi0gICAgMiwgMjE0LCAxNjAsIDQzLCAyMTYsIDQyLCAyMzIsIDEwOCwgNDQsIDI0NCwgMTA1LCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTYsIDQyLCAyMzIsIDEwOCwgNDMsIDI0NCwgMTA1LCA0MiwgMiwgMjQ3LCAyNTUsIDI0OSwgMTI2LCAyNDQsIDEwNSwgODUsIAotICAgIDQsIDIxOCwgMjM0LCA3MSwgNCwgMjE4LCAyMzQsIDg1LCAyMjMsIDExNiwgNzEsIDIyMywgMTE2LCA4NSwgNjcsIDIyMywgCi0gICAgMTE2LCA3MSwgNjcsIDIyMywgMTE2LCA4NSwgMjI2LCA2LCA3MSwgMjI2LCA2LCA4NSwgMjE0LCAxNjIsIDIxNSwgMjI1LCAKLSAgICA3MSwgMjE0LCAxNjIsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjIsIDQsIDIxNSwgMjI1LCA3MSwgMjE0LCAxNjIsIDQsIDIxNSwgCi0gICAgMjI1LCA4NSwgMjIyLCAyNDcsIDIxNSwgMjI1LCA3MSwgMjIyLCAyNDcsIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDQsIAotICAgIDIxNSwgMjI1LCA3MSwgMjIyLCAyNDcsIDQsIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDIyNSwgOCwgNzEsIDIyMiwgMjQ3LCAKLSAgICAyMjUsIDgsIDg1LCAyNDYsIDEwNSwgMjE1LCAyMjUsIDcxLCAyNDYsIDEwNSwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyNDYsIDEwNSwgNCwgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjMzLCA0MiwgNCwgMjE1LCAyMjUsIDcxLCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgODUsIDIzMywgCi0gICAgNDIsIDIyNSwgOCwgNzEsIDIzMywgNDIsIDIyNSwgOCwgODUsIDI0NywgMjQ4LCA3MSwgMjQ3LCAyNDgsIDcxLCAyNDcsIAotICAgIDI0OSwgMjQ5LCAxODcsIDg1LCA0LCAyNDcsIDI0OCwgMjQ0LCA4OSwgMjMyLCAxMDQsIDcxLCAyNTAsIDM1LCAyNDYsIDExOCwgCi0gICAgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNjcsIDI0NCwgMTA1LCAyNTEsIDExMSwgODUsIDI1MCwgMzUsIDI1MCwgMzYsIDIsIDQzLCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjMyLCAxMDgsIDE2MywgCi0gICAgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIyNCwgMjYsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyNTQsIDE1NSwgMjUxLCA4OCwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAKLSAgICAyNTEsIDIyMSwgNDMsIDE2MywgODUsIDI1MCwgMzUsIDQ0LCAxNjMsIDg1LCAyNTAsIDM1LCAyMzUsIDE5NCwgMjUxLCAxMTMsIAotICAgIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDE2MywgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMzIsIDEwOCwgCi0gICAgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIxNCwgMTYwLCA0MywgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjE0LCAKLSAgICAxNjAsIDQ0LCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMzIsIDEwOCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgCi0gICAgMjUsIDIzMiwgMTA4LCA0MywgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjE0LCAxNjAsIDE2MywgMjUwLCAzNSwgMjMyLCAKLSAgICAxMDgsIDE2MywgMjUwLCAzNSwgODUsIDIzMiwgMTA4LCA0NCwgMjE1LCAyMjUsIDg1LCAyMzIsIDEwOCwgNDMsIDIxNSwgCi0gICAgMjI1LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjUsIDcxLCAyNTEsIAotICAgIDExMywgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMTQsIDE2MCwgCi0gICAgNDMsIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyNDcsIDI1NSwgMTYzLCAyNTEsIAotICAgIDIyMSwgNzEsIDQyLCAyLCA2NywgMjUxLCAyMzIsIDIzMiwgMjEzLCA3MSwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCAyNDcsIAotICAgIDEyMCwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCA0NCwgCi0gICAgMTYzLCAyNTEsIDIyMSwgMjMzLCA4NSwgMjUwLCAzNSwgNzEsIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjUsIDcxLCAKLSAgICA0MiwgMiwgMjMyLCAxMDgsIDQzLCAyMjQsIDI1LCA3MSwgNDIsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjUsIDcxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjUsIDcxLCAyNTAsIAotICAgIDM2LCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgNDQsIDIyNCwgMjUsIDcxLCAKLSAgICAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjUsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjE1LCAyMjUsIDIzMiwgMTA4LCA0MywgMjE1LCAyMjUsIDcxLCAyMzEsIDgyLCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIAotICAgIDIxOCwgMjM0LCA3MSwgMjMxLCA4MiwgNCwgMjE4LCAyMzQsIDg1LCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgMjMyLCAxMDgsIAotICAgIDQ0LCAyMTUsIDIyNSwgODUsIDIxOCwgMzgsIDIsIDIyMywgMTMyLCAyNDksIDI0NywgMjE0LCAxOTQsIDIxOSwgNjAsIDI0OSwgCi0gICAgMjIyLCA4NSwgMjE4LCAxNTYsIDcxLCAyMTgsIDE1NiwgMjMyLCAyMjgsIDIxNiwgMTMyLCAyMTgsIDM3LCAyNTMsIDIzNCwgCi0gICAgMjI4LCA3MSwgMjQ4LCAzOCwgMjI4LCA3MSwgMjQ5LCAxOTUsIDIyNiwgMTYzLCA4NSwgMjE3LCAwLCA3MSwgMjE3LCAwLCAKLSAgICAyNTIsIDE1NiwgMjUxLCAxNjMsIDI1MiwgMTU2LCA5MywgMiwgMjUwLCAxMjksIDI1MiwgMTU2LCA5MywgMiwgMjExLCAxNzgsIAotICAgIDIyMSwgMjU0LCAyMTQsIDE5NSwgMiwgMjIzLCAxNjAsIDI0NiwgODQsIDI0MCwgMjQzLCAyNTIsIDIyLCA3MSwgMjIwLCAyLCAKLSAgICAyMjUsIDEwMSwgODUsIDIyMCwgMiwgMjI1LCAxMDEsIDIyMCwgODcsIDIyMywgNDksIDIyMiwgMTg3LCAyNDQsIDU1LCAyNDEsIAotICAgIDIyOCwgMjUxLCAxMTMsIDg1LCA0MywgMjI1LCA3LCAyMzUsIDI0MiwgODUsIDQ0LCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgCi0gICAgNDMsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAxMjAsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyMzUsIAotICAgIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyMzUsIDI0MiwgMjE5LCAxMDEsIDIyLCAyNDksIDEyOSwgMjUwLCAyMTksIDUwLCAKLSAgICAyMjMsIDE3MiwgNTAsIDI1MSwgMjM5LCA1MCwgMjUxLCAyNSwgMjU0LCAxMDIsIDIyNiwgMTQ1LCAyNDksIDEzMCwgMjUwLCAKLSAgICAxMTEsIDIyMywgMzcsIDI0OSwgMTMxLCA2NCwgMjMyLCAxMTgsIDI0OSwgMTMxLCA2NCwgMjM1LCAxMTYsIDIxOCwgMTU3LCAKLSAgICAyMiwgMjQ5LCAxMzYsIDI0NCwgMTY4LCA4NywgMjU0LCAyNDgsIDIyMCwgODksIDI0MiwgMjIsIDIyLCAyMTksIDE4OSwgCi0gICAgMjI1LCAyMjAsIDg3LCAyMTAsIDI1NCwgMjExLCA2OSwgMjE1LCAyMTUsIDMxLCAyNDEsIDIyMywgMjE1LCAyMTUsIDMxLCAKLSAgICAyMzMsIDEwNywgMjE1LCAyMTUsIDMxLCAyNDQsIDk2LCAyMTUsIDIxNSwgMzEsIDIxNiwgMTMzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIxMSwgMjM5LCAyMTUsIDIxNSwgMzEsIDIxMiwgNDAsIDIxNSwgMjE1LCAzMSwgMjMwLCAxMTUsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjQ1LCAyMjMsIDIxMiwgMSwgNjQsIDI0OCwgMTgsIDcxLCAyNDMsIDIzOSwgMjQ0LCAxOTAsIDcxLCAyMTksIDc0LCAyNDQsIAotICAgIDE5MCwgODUsIDIxOSwgNzQsIDI0NCwgMTkwLCA3MSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0NCwgOTIsIDIyNCwgMjIsIAotICAgIDIzMCwgMTI4LCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIDEyOCwgMjMxLCA1NCwgMjQ0LCAxMzgsIDUwLCAyNDUsIDIyMywgCi0gICAgMjMxLCAxOTAsIDUwLCAyMzUsIDM4LCAyMjEsIDIyMCwgMjE0LCAxNDUsIDIyOSwgOTMsIDIyNSwgMjAsIDI1NCwgMTIsIAotICAgIDIxNywgNDAsIDI0MywgNTIsIDI1MSwgMywgMjMzLCAxOSwgMjEzLCAxNTAsIDIzMiwgMjM4LCAyMjEsIDE5MSwgMjIyLCAxOSwgCi0gICAgMjUwLCAyNDgsIDI1NCwgNDIsIDIyNSwgNTIsIDcxLCAyNTAsIDExNywgMjM0LCA3OCwgNzEsIDI1MCwgMTE3LCAyMjQsIDE0LCAKLSAgICA3MSwgMjUwLCAxMTcsIDIyMiwgMTk1LCA3MSwgMjUwLCAxMTcsIDI1MSwgMjMxLCA3MSwgMjUwLCAxMTcsIDIzNCwgMzAsIAotICAgIDcxLCAyNTAsIDExNywgMjI1LCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCA3OCwgODUsIDI1MCwgMTE3LCAyMjQsIDE0LCA4NSwgCi0gICAgMjUwLCAxMTcsIDIyMiwgMTk1LCA4NSwgMjUwLCAxMTcsIDI1MSwgMjMxLCA4NSwgMjUwLCAxMTcsIDIzNCwgMzAsIDg1LCAKLSAgICAyNTAsIDExNywgMjI1LCAyMzEsIDg1LCAyMTksIDE2LCAyMTgsIDUwLCA3MSwgMjQxLCAyMjgsIDIxOCwgNTAsIDcxLCAyNDcsIAotICAgIDI0OSwgMjE4LCA1MCwgODUsIDI0OSwgMjQ1LCAyMTgsIDUwLCA3MSwgMjE5LCAxNiwgMjE4LCA1MCwgODUsIDI0MSwgMjI4LCAKLSAgICAyMTgsIDUwLCA4NSwgMjQ3LCAyNDksIDIxOCwgNTAsIDcxLCAyNDksIDI0NSwgMjE4LCA1MCwgMjQwLCAyNDMsIDIxOCwgCi0gICAgMjM4LCAyMjQsIDIyLCAyMjgsIDQ3LCAyNDUsIDE4OSwgMjI4LCA0NywgMjUyLCA3MywgMjQ1LCAxODksIDIyOCwgNDIsIAotICAgIDI1MiwgNzMsIDIxOSwgMTE4LCAyMjgsIDQyLCAyMzAsIDU3LCAyNDQsIDY2LCA1MCwgMjMwLCA1NywgMjI5LCAxODgsIDUwLCAKLSAgICAyMzAsIDU3LCAyMjAsIDc2LCA1MCwgMjEyLCA5LCAxODgsIDI0OSwgMTMwLCAyNDUsIDIyMCwgMTg4LCAyNDksIDEzMCwgCi0gICAgMjE0LCAxNzEsIDIyMywgMTEyLCA4NywgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0OCwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0NywgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0NiwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0NSwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0NCwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0MywgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0MiwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjQzLCA1MCwgMjMxLCAxMzgsIDg1LCAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMywgMjI2LCAyMCwgODcsIAotICAgIDIyNSwgMjUyLCAyMjYsIDIwLCA4NywgMjI1LCAxNzQsIDIyNiwgMjAsIDUwLCAyMTEsIDI1NSwgODcsIDI0NywgMjQxLCAKLSAgICAyNDQsIDE4OSwgMjQ3LCAyNDEsIDI0NCwgMTg4LCAyNDcsIDI0MSwgMjQ0LCAxODcsIDI0NywgMjQxLCAyNDQsIDE4NiwgCi0gICAgMjQ3LCAyNDEsIDI0NCwgMTg1LCAyNDcsIDI0MSwgMjQ0LCAxODQsIDcxLCAyNTAsIDM2LCAyLCA1OSwgMjIyLCAyNTEsIDcxLCAKLSAgICAyNTAsIDM2LCAyLCAxMTMsIDI0NywgMTE4LCA4NSwgMjUwLCAzNiwgMiwgNzEsIDU5LCAyMjIsIDI1MSwgODUsIDI1MCwgMzYsIAotICAgIDIsIDExMywgNzEsIDI0NywgMTE4LCAyMzAsIDE0MiwgMzEsIDIxMSwgNjksIDIzMCwgMTQyLCAzMSwgMjEwLCAyNTMsIDI0NywgCi0gICAgMjI0LCAzMSwgMjQyLCAxMzEsIDIxMSwgNjksIDI0NywgMjI0LCAzMSwgMjMzLCAxMywgMjEwLCAyNTMsIDI0NywgMjI0LCAKLSAgICAzMSwgMjMzLCAxMywgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyNDIsIDEzMSwgMjEwLCAyNTMsIDcxLCAyNDQsIDczLCA4NSwgCi0gICAgMjQ0LCA3MywgMjQyLCAyMiwgMjIsIDIyNSwgMTA0LCAyNTQsIDEyMCwgMjQ5LCAxMjgsIDIxNywgMjM1LCAyMTgsIDE2NCwgCi0gICAgNjQsIDI1NCwgMjI2LCAyMjEsIDIwNiwgMjU0LCAxNjksIDI0NCwgNTEsIDI0MywgNjAsIDIxOCwgMTY0LCA2NCwgMjQxLCAKLSAgICAyMDIsIDI1MywgMTk5LCA4NywgMjQ0LCA2MiwgMjI2LCAxMjYsIDcxLCAyMTgsIDE1NiwgMTM0LCAyMzIsIDIwOCwgMjQ5LCAKLSAgICAxNzUsIDIyMiwgMjUxLCAxMzQsIDIzMiwgMjA4LCAyNDksIDE3NSwgMjMzLCA0NiwgMjEyLCA1MCwgNTAsIDEyNSwgMjEzLCAKLSAgICAxMzAsIDUwLCAyNDYsIDExMCwgMjQ0LCAxMzgsIDUwLCAyNDYsIDExMCwgMjMxLCAxOTAsIDUwLCAyMzUsIDIwMywgMjQ0LCAKLSAgICAxMzgsIDIyLCAyMzEsIDE5MCwgNTAsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIAotICAgIDUwLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDIyLCAyMzEsIDE5MCwgMjIsIDI0NCwgMTM4LCA1MCwgNjcsIDIzMSwgMTkwLCAKLSAgICAyLCAyMTgsIDEwMywgNTAsIDIwMywgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCA1MCwgMjMxLCA4MiwgNzEsIDI1MCwgMzUsIAotICAgIDIzMSwgODIsIDg1LCAyNTAsIDM1LCAyMzEsIDgyLCA0LCA3MSwgMjUwLCAzNSwgMjMxLCAxNTMsIDg3LCAyNDcsIDE2NywgCi0gICAgODcsIDIxNCwgMTY5LCAyMjUsIDI1MSwgODcsIDI0OSwgMjMxLCAyNDMsIDIyNCwgMjE0LCAxNDEsIDIyOSwgODgsIDI1MCwgCi0gICAgMTYxLCAyMjYsIDYxLCAyMzUsIDQ0LCAyMTMsIDE4NSwgMjUwLCA5MywgODUsIDIzMCwgMTI5LCAyMzIsIDIyNSwgMjIwLCAKLSAgICAxMTIsIDIyMCwgMTQ3LCAyMjQsIDUsIDIyMCwgMTMwLCAyMTksIDU1LCAyNTIsIDE1OSwgMjUyLCAxMjYsIDkyLCAyMzQsIAotICAgIDEzOCwgNzEsIDI0NiwgOTMsIDIzMSwgMTg1LCA3MSwgMjQ2LCA5MywgMjM0LCA3OCwgODUsIDI0NiwgOTMsIDIzMSwgMTg1LCAKLSAgICA4NSwgMjQ2LCA5MywgMjM0LCA3OCwgMjE5LCA2MSwgMjExLCAyMzAsIDIxOSwgNjQsIDIxOCwgMzgsIDI1MiwgNTEsIDI0OSwgCi0gICAgMjQ3LCAyMjMsIDE1OSwgODUsIDIxOSwgNjAsIDIxNiwgMTM0LCAyNDksIDI0OCwgMjIsIDIyMywgMTU5LCAyMTUsIDk0LCAKLSAgICA3MSwgMjIwLCAyLCAyMjUsIDEwMSwgMjE1LCA5NCwgODUsIDIyMCwgMiwgMjI1LCAxMDEsIDcxLCAyNDcsIDI0OSwgMjM2LCAKLSAgICAwLCAyMTgsIDIzNCwgMjQ5LCAxMjUsIDIzMywgOTEsIDI0NywgMTkzLCAyNTAsIDI0NCwgMjI2LCAxNjYsIDIyNSwgMTA0LCAKLSAgICAyNTAsIDI0NSwgMjE5LCA4OCwgMjQxLCAyMTIsIDIsIDcxLCAyNDksIDEzMCwgMzcsIDI0OSwgMTI1LCAyMzMsIDkxLCAyNTAsIAotICAgIDE1MywgMjI4LCA3NSwgMjQ1LCAxMjQsIDI1NCwgMTQxLCAyMjYsIDE5MSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA4NSwgCi0gICAgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA4NSwgCi0gICAgNDMsIDIzMywgOTIsIDIzMSwgNTMsIDcxLCA0MywgMjMzLCA5MiwgMjMxLCA1MywgMjQ2LCA4OSwgMjE5LCA4MiwgNTAsIAotICAgIDExNCwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNDMsIDI1MCwgMCwgMjQ1LCAxMjQsIDkyLCAyMjEsIDI1NCwgMjQ0LCAKLSAgICAxNzUsIDI0NywgMjU1LCAyMzYsIDAsIDcxLCAyNTAsIDM2LCAyMzYsIDAsIDg1LCAyMTgsIDIzNCwgODUsIDIxNSwgMTkyLCAKLSAgICAyMjMsIDYwLCA0MywgMjQ1LCAxMjMsIDIyMywgNjAsIDQzLCAyNDUsIDEyMiwgMjUzLCAyMTEsIDE2LCAzMSwgMjE0LCAxNDUsIAotICAgIDExNCwgMjUwLCAzNiwgMiwgMjE4LCAxMDMsIDIyLCAxMTMsIDE3MCwgNDgsIDIyNSwgMTg5LCAyMjIsIDI0OCwgMjM1LCAKLSAgICAyMDUsIDIyNSwgMTg5LCAyMzMsIDQzLCAyMzUsIDIwNSwgMjI1LCAxODksIDIzNSwgMTkzLCAyMjUsIDE4OSwgODUsIDI0OSwgCi0gICAgMTMxLCAyMjYsIDE5NywgMjIwLCAyOSwgMjIwLCAxNywgMjE5LCAyMjksIDI1MCwgNjEsIDI1MCwgMjI2LCAyNDEsIDE1NywgCi0gICAgMjE5LCAxMjYsIDI0MywgNjEsIDIxMSwgMjMwLCAyNDAsIDIyMCwgMjQzLCA2MSwgMiwgMjQyLCAxMiwgMjMxLCAxNzMsIDE2LCAKLSAgICAzMSwgMjMyLCAyMjksIDIzMCwgMTE1LCAyMTQsIDE5NSwgMjI2LCAxOTcsIDI0MiwgMTIyLCAyNDQsIDEyLCAyNDQsIDc0LCAKLSAgICAyMzYsIDAsIDI0MSwgNTksIDI0NCwgMTI5LCAyMjIsIDE0LCA0MiwgMjQ0LCAxMSwgMjQ5LCAxNTksIDIxOSwgMTA0LCAyNDAsIAotICAgIDExMiwgMjE5LCAxMDcsIDIyNSwgMTY4LCAyLCAyNTIsIDE1OSwgMjE2LCAyNDIsIDIzNSwgMTMxLCAyNTIsIDE0NiwgODcsIAotICAgIDI0MSwgMjMxLCAyNDIsIDEzMywgODcsIDI0MywgMjMyLCAyMjQsIDE0MiwgMjQ5LCAxMDMsIDIyNiwgMTk3LCA4NSwgMjE4LCAKLSAgICAyMzQsIDcxLCAyNDQsIDc0LCAyLCAyMDMsIDIzMCwgMjI0LCA4NSwgMjE4LCAxMDQsIDIxNCwgMTYwLCAyNTEsIDIxNywgCi0gICAgMjIxLCAxOTMsIDg1LCAyMjEsIDE5MywgMjMyLCAxMDgsIDI1MSwgMjE3LCAyMjEsIDE5MywgNzEsIDIyMSwgMTkzLCA3MSwgCi0gICAgMTE0LCAyNTAsIDEzMCwgNzgsIDIxNywgMSwgMjMyLCAxNTQsIDUwLCAyMTcsIDUzLCAyNDYsIDg4LCAyNTQsIDE5MSwgMjQ1LCAKLSAgICAxMTksIDIyMywgMTU3LCAyNDQsIDg1LCAyMjMsIDE1NywgMjQyLCAxNSwgMjEzLCAxNzQsIDI0MiwgMTUsIDIxMSwgMTk4LCAKLSAgICAyNDIsIDE1LCAyMzIsIDEwOCwgNDQsIDIyNSwgMTk4LCAyMjUsIDE5OCwgMjE0LCAxNjAsIDQ0LCAyMjUsIDE5OCwgNzEsIAotICAgIDIyOCwgMjMwLCA4NSwgMjI4LCAyMzAsIDI1MCwgMTMwLCA3OCwgMTE0LCAyNTAsIDEzMCwgNzgsIDIzMCwgODQsIDIxMSwgCi0gICAgMTc4LCAxMTQsIDIzMCwgODQsIDIxMSwgMTc4LCAyNTIsIDE1NiwgMjExLCAxNzgsIDExNCwgMjUyLCAxNTYsIDIxMSwgMTc4LCAKLSAgICAyMjYsIDEyNiwgMjYsIDI0OSwgMTMwLCAxMTQsIDI2LCAyNDksIDEzMCwgMjA0LCAyNTAsIDE3NSwgMjQ5LCAxMzAsIDExNCwgCi0gICAgMjA0LCAyNTAsIDE3NSwgMjQ5LCAxMzAsIDcsIDI0OSwgMTMwLCAyMjAsIDkxLCA3MSwgNywgMjQ5LCAxMzAsIDIyNiwgMTI2LCAKLSAgICA3LCAyNDksIDEzMCwgMjMxLCAxODcsIDI0OSwgMTMwLCAyMTgsIDE1NywgNjQsIDI0OCwgMTQ5LCAyNDQsIDExLCAyMTcsIAotICAgIDE1LCAyNTMsIDIxNiwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgMjE2LCAxMTQsIDI0NCwgMTEsIDI1MiwgMTU3LCAyNTMsIAotICAgIDIxNiwgMjQ0LCAxMSwgMjQ5LCAyNDMsIDI1MywgMjE2LCA4NSwgMjQ0LCAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgNzEsIDI0NCwgCi0gICAgMTEsIDIyNSwgOSwgMjE4LCAxNTYsIDIxOSwgMTEsIDIxOCwgMTExLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAzNywgNzEsIAotICAgIDIxOCwgMTU2LCAyMDQsIDI1MCwgMTc1LCA4NSwgMjE4LCAxNTYsIDg1LCAyNTAsIDE3NSwgNzEsIDIxOCwgMTU2LCAyMjYsIAotICAgIDEyNiwgODUsIDIxOCwgMTU2LCAxMTQsIDIyNiwgMTI2LCA4NSwgMjE4LCAxNTYsIDIyNSwgNjAsIDIxOCwgMTU2LCAyMjAsIAotICAgIDkxLCA3MSwgMjE4LCAxNTYsIDExNCwgMjUzLCAyMTYsIDIwNCwgMjUwLCAxNzUsIDI1MywgMjE2LCAyNDUsIDE5MywgMjE4LCAKLSAgICAyNDQsIDI1MywgMjE2LCAyNDUsIDE5MywgMjI1LCA5LCA4NSwgMjE4LCAxNTYsIDI0NSwgMTkzLCAyMjUsIDksIDIyNSwgNjAsIAotICAgIDIxOCwgMTU2LCAyMTksIDEyNSwgMjI1LCA5LCA4NSwgMjE4LCAxNTYsIDI0NSwgMTkzLCAyMjUsIDksIDIyMywgMTE0LCA4NSwgCi0gICAgMjE4LCAxNTYsIDExNCwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAyMTgsIDE1NiwgMjE1LCA3NywgMjI1LCA5LCAKLSAgICA4NSwgMjE4LCAxNTYsIDIxOSwgMTIwLCAyMjUsIDksIDI1MywgMjE2LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjA0LCAyNTAsIAotICAgIDE3NSwgMjE3LCAxNSwgMjUzLCAyMTYsIDExNCwgMjE3LCAxNSwgMjUzLCAyMTYsIDIxOSwgMTI1LCAyMjUsIDE1NywgODUsIAotICAgIDIyLCA3MSwgMjQ0LCA1NCwgODUsIDI0NCwgNTQsIDcxLCAyNDQsIDU0LCAyNDUsIDE5MywgMjI1LCAxNTcsIDIyNiwgMTI2LCAKLSAgICA4NSwgMjQ0LCA1NCwgMzcsIDIwNCwgMjUwLCAxNzUsIDI0NSwgMTkzLCAyMjUsIDksIDIxOCwgMTU2LCAxMTQsIDIxNywgMTUsIAotICAgIDIyNSwgNjAsIDI1MywgMjE2LCAyMTksIDYyLCAyMTYsIDEwNSwgMjE1LCAyMTgsIDIxOSwgNjIsIDExNCwgMjUwLCAxMTQsIAotICAgIDIxOSwgNjIsIDIxOSwgMTMsIDExNCwgMjE5LCAxMywgMjUyLCAxNTcsIDI1MywgMjE2LCAyNDUsIDE5MywgMjE3LCAxNSwgCi0gICAgMjI0LCAxNzEsIDI1MywgMjE2LCAxMTQsIDI0NSwgMTkzLCAyMTcsIDE1LCAyMjQsIDE3MSwgMjUzLCAyMTYsIDI0OSwgMTMxLCAKLSAgICA3OCwgMjIwLCA5MSwgNzEsIDI1MCwgMzUsIDE1MiwgOTIsIDI0OSwgMTMxLCA3OCwgMjMyLCAxMDgsIDQ0LCAyNDYsIDg2LCAKLSAgICA3MSwgMjE4LCAyMzQsIDIxNCwgMTYwLCA0NCwgMjQ2LCA4NiwgNzEsIDIxOCwgMjM0LCAyMzIsIDEwOCwgNDQsIDIyMCwgOTEsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyMjAsIDkxLCA3MSwgMjE4LCAyMzQsIDg1LCAyMjQsIDEzLCAxNjQsIDIyNiwgCi0gICAgMTQ3LCA3MSwgMjI0LCAxMywgMTY0LCAyMjYsIDE0NywgNzEsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDg1LCAyNDcsIAotICAgIDI0OSwgMjMwLCAxODIsIDcxLCAyMTEsIDE3OCwgMTE0LCAyNDUsIDMxLCAxNjQsIDg3LCAxOTIsIDY3LCAxMzAsIDIzMSwgCi0gICAgODIsIDY3LCAxMzAsIDExNCwgNjcsIDEzMCwgMTE0LCAyMTksIDE1NSwgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIxOSwgMTU1LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgNTIsIAotICAgIDIxNSwgOTQsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgMjQ5LCAyMjAsIDIyMywgMjU0LCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDEyMSwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgCi0gICAgMTE0LCAxMjEsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDI0OSwgOTEsIDIxOCwgMTQwLCAyMjYsIAotICAgIDE1LCA1LCAyMjYsIDE0NywgMTE0LCAyNDUsIDMxLCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDI0MSwgMjI4LCAyNDUsIDMxLCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDg1LCAyNDEsIDIyNywgMjIyLCAxODcsIDExNCwgODUsIDI0MSwgMjI4LCAyNTEsIDExMywgCi0gICAgMjQ0LCA1NSwgMjQxLCAyMjcsIDIyMiwgMTg3LCAyNDQsIDU1LCAyNDEsIDIyOCwgMjUxLCAxMTMsIDIzMSwgODIsIDQzLCAKLSAgICAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCA0NCwgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDI0NCwgNjMsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyMzMsIAotICAgIDQyLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyMjIsIDI0NywgMjU0LCAxMTAsIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMTE0LCAyMzMsIDQyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjIyLCAyNDcsIAotICAgIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMzMsIDQyLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgCi0gICAgMTQ3LCAxMTQsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQzLCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgMTkyLCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1OCwgMjI2LCAxNDcsIAotICAgIDIzMSwgODIsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjI2LCAxNDcsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTEwLCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDEwNSwgMjQ3LCAKLSAgICAyMDQsIDE1MiwgMzcsIDIxLCAxNTgsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTYxLCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTQsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTk4LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAyMDAsIDI0NywgMjA0LCAxNTIsIDM3LCA1NCwgMjE2LCAKLSAgICAyNDcsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxMDUsIDI0NywgMjA0LCAzNywgCi0gICAgMzUsIDIxLCAxNTgsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxODksIDI0NywgCi0gICAgMjA0LCAzNywgMzUsIDIxLCAxOTQsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxOTgsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAKLSAgICAxOTUsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAyMDAsIDI0NywgMjA0LCAzNywgMzUsIDU0LCAyMTYsIDI0NywgMjQ3LCAyMDQsIAotICAgIDE1MiwgMzcsIDM1LCAyMSwgMTEwLCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxMDUsIDI0NywgMjA0LCAxNTIsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAKLSAgICAxODksIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk4LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgCi0gICAgMzcsIDM1LCA1NCwgMjE2LCAyNDcsIDExNCwgMjExLCAyNDYsIDk3LCA3NCwgMTE0LCA5NiwgNTAsIDExNCwgMjMwLCAxODIsIAotICAgIDUwLCAxMTQsIDI0NywgMTY5LCA1MCwgMTE0LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgOTcsIDc0LCAxMTQsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3NCwgMjQ2LCA5OCwgMjI1LCAxMSwgOTcsIDc0LCAxMTQsIDIyMiwgMTg0LCA5NywgNzQsIDIxNSwgCi0gICAgMjI0LCA5NywgNzQsIDExNCwgMjE1LCAyMjQsIDk3LCA3NCwgMjQ4LCAxNTUsIDIxNSwgMjI0LCA5NywgNzQsIDExNCwgMjQ4LCAKLSAgICAxNTUsIDIxNSwgMjI0LCA5NywgNzQsIDg1LCA5NywgNzQsIDIxNiwgMTQ0LCAyMTYsIDEyLCA5NywgMjUzLCAyNDksIDIxNiwgCi0gICAgMTQ0LCAyNTEsIDE3MywgOTcsIDI1MywgMjQ5LCA4NSwgOTcsIDI1MywgMjQ5LCAxMTQsIDg1LCAyNDksIDkxLCAyNDYsIAotICAgIDEwNCwgMjIsIDk3LCA3NCwgMTE0LCA4NSwgMjQ5LCA5MSwgMjE0LCAxNTMsIDIyLCA5NywgNzQsIDIxOCwgMjMxLCA4NSwgCi0gICAgOTcsIDc0LCAxMTQsIDI0OSwgMjA2LCA4NSwgOTcsIDc0LCAyMjIsIDI0NiwgNzEsIDk3LCA3NCwgMjMzLCA0MSwgNzEsIDk3LCAKLSAgICA3NCwgMjUyLCAxODMsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDI0MywgMjQxLCAyMjAsIDkxLCA3MSwgOTcsIDc0LCAxMTQsIAotICAgIDIzMiwgMTA4LCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMTE0LCAyMTQsIDE2MCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDIyOCwgCi0gICAgNDksIDIzMiwgMTA4LCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjQ5LCA5OSwgMjMyLCAxMjMsIDIyOCwgNDksIDIxNCwgMTYwLCAKLSAgICAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMzcsIDExNCwgNzEsIDk3LCA3NCwgMjExLCAyNTIsIDk3LCA3NCwgMjUxLCAyMjAsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjUxLCAyMjAsIDk3LCA3NCwgMjUxLCAyMjAsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgCi0gICAgMTE0LCAyNTEsIDIyMCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAxMTQsIDI1MSwgMjIwLCA5NywgNzQsIDExNCwgMjUxLCAKLSAgICAyMjAsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjE3LCAxNywgOTcsIDc0LCAxMTQsIDIxNywgMTYsIDk3LCA3NCwgMjEyLCAKLSAgICAxOCwgOTcsIDc0LCAxMTQsIDIxMiwgMTgsIDk3LCA3NCwgMjI2LCAxNzIsIDk3LCA3NCwgNTIsIDI0OSwgOTksIDIzMiwgCi0gICAgMTIzLCAxMzQsIDI0NywgMjE0LCAyNTQsIDEwOSwgNzEsIDIxNSwgMjI2LCAyNDksIDE4NywgNCwgNzEsIDIxNSwgMjI1LCAKLSAgICAyMjUsIDE3MSwgMjA0LCAyMTgsIDYzLCAyMDQsIDIxOCwgMjEsIDQzLCAyMjIsIDkwLCAyNTIsIDE3MywgMjQ4LCA2MCwgNDQsIAotICAgIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCAxNzcsIDIsIDU5LCAyMzUsIDIxNSwgMjIzLCA1MCwgMjE5LCA0NywgMjI0LCAKLSAgICAyMDEsIDIxOCwgNjMsIDIxOCwgMjIsIDIyNCwgMjAxLCAyMTksIDQ2LCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDExLCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTQsIDE5OSwgMjQ3LCAxNjgsIDExLCAyNDQsIDE3NSwgMjQ3LCAyNTQsIDkyLCAyMzIsIDE0NiwgCi0gICAgMjU0LCAxMTgsIDkyLCAyMzIsIDE0NiwgMjI2LCAxNTgsIDcxLCAyNDcsIDI0OSwgMiwgMjUwLCAxNzMsIDI0NywgMTIwLCAKLSAgICAyMiwgMiwgMjQ3LCAxMjAsIDI0NSwgMTcwLCA2NCwgMjI2LCAxNzAsIDIxNCwgMTUyLCAyMzIsIDEwOCwgNDQsIDI0OSwgCi0gICAgMTYxLCAyLCAyNDcsIDEyMCwgMjE0LCAxNjAsIDQzLCAyNDksIDE2MSwgMiwgMjQ3LCAxMjAsIDQzLCAyMjYsIDEyOCwgMjM1LCAKLSAgICA2NiwgNDQsIDIyNiwgMTI4LCAyMzUsIDY2LCAyNDMsIDIyOSwgMjI2LCAxMjgsIDIzNSwgNjYsIDIzMywgODUsIDEyMCwgCi0gICAgMjE3LCA4NywgMjMzLCA4NSwgMTI0LCAyMTcsIDg3LCA0MywgMjIsIDQ0LCA1MiwgMjE1LCA5MywgNDMsIDIyLCA0NCwgMjE3LCAKLSAgICA4NywgNDMsIDIzMCwgODcsIDE5OSwgNDQsIDIxNywgODcsIDE5OSwgNDMsIDIxNywgODcsIDEyMCwgMjE3LCA4OCwgMiwgCi0gICAgMjUwLCAzNiwgNDgsIDIzMiwgMTA1LCAyNDcsIDE3MywgMjUxLCA3OCwgMjAzLCAyMjIsIDEzMywgNzEsIDI0OSwgMjA1LCAKLSAgICAyNDcsIDI0OCwgNzEsIDI0OSwgMjA1LCAyNDcsIDI0OSwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDI0OSwgMjA1LCAyNDcsIAotICAgIDI0OSwgMiwgOTcsIDIxNiwgMTE0LCA3MSwgNDIsIDIsIDE0MCwgMjE2LCAxMTQsIDcxLCA0MiwgMiwgOTcsIDIxNiwgMTE0LCAKLSAgICAxMSwgNDMsIDcxLCA0MiwgMTI3LCAxMSwgNDQsIDcxLCA0MiwgMTI3LCAxMSwgNDMsIDI1NCwgMTEwLCAxMjcsIDExLCA0NCwgCi0gICAgMjU0LCAxMTAsIDEyNywgMTEsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgMTEsIAotICAgIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0NCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAxMSwgNDMsIAotICAgIDI0NCwgNjMsIDIyNiwgMywgMTEsIDQ0LCAyNDQsIDYzLCAyMjYsIDMsIDIxNCwgMTUzLCAyMjQsIDI0LCA3NCwgMjQ2LCAKLSAgICAxMDQsIDIyNCwgMjQsIDc0LCAyNTQsIDg4LCAyNDMsIDk4LCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyNDMsIDk4LCAyNTAsIAotICAgIDM2LCA3NCwgNDQsIDgwLCAyLCAzNywgMjI1LCAyMiwgMTk5LCAxNDAsIDc0LCAxOTksIDk3LCA3NCwgMTk5LCA0MywgNDQsIAotICAgIDc0LCAxOTksIDE0MCwgNTIsIDc0LCAxOTksIDk3LCA1MiwgNzQsIDE5OSwgNDMsIDQ0LCA1MiwgNzQsIDE5OSwgMTQwLCA4MCwgCi0gICAgMjQzLCAyNDMsIDEzMCwgMTk5LCA5NywgODAsIDI0MywgMjQzLCAxMzAsIDE5OSwgMTQwLCA1MiwgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDE5OSwgOTcsIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCA5NywgMjE4LCAyMzAsIDc0LCA0NiwgNDcsIDI1MSwgCi0gICAgMjE1LCA0NiwgNDcsIDI0NywgMTE3LCA0NiwgNDcsIDI0NiwgMjQ1LCA0NiwgNDcsIDI0NywgMTE2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgxLCA0NiwgNDcsIDI0NywgNTIsIDQ2LCA0NywgMjQ2LCAyNDQsIDQ2LCA0NywgMjQ3LCAxMTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNDksIDQ2LCA0NywgMjQ3LCAyMCwgNDYsIDQ3LCAyNDYsIDIxMiwgNDYsIDQ3LCAyNDcsIDgzLCA0NiwgNDcsIDI0NiwgCi0gICAgMTgwLCA0NiwgNDcsIDI0NywgNTEsIDQ2LCA0NywgMjQ2LCAyNDMsIDQ2LCA0NywgMjQ3LCAxMTQsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMzMsIDQ2LCA0NywgMjQ3LCA0LCA0NiwgNDcsIDI0NiwgMTk2LCA0NiwgNDcsIDI0NywgNjcsIDQ2LCA0NywgMjQ2LCAxNjQsIAotICAgIDQ2LCA0NywgMjQ3LCAzNSwgNDYsIDQ3LCAyNDYsIDIyNywgNDYsIDQ3LCAyNDcsIDk4LCA0NiwgNDcsIDI0NiwgMTQ4LCA0NiwgCi0gICAgNDcsIDI0NywgMTksIDQ2LCA0NywgMjQ2LCAyMTEsIDQ2LCA0NywgMjQ3LCA4MiwgNDYsIDQ3LCAyNDYsIDE3OSwgNDYsIDQ3LCAKLSAgICAyNDcsIDUwLCA0NiwgNDcsIDI0NiwgMjQyLCA0NiwgNDcsIDI0NywgMTEzLCA0NiwgNDcsIDI0NiwgMTI1LCA0NiwgNDcsIAotICAgIDI0NiwgMjUyLCA0NiwgNDcsIDI0NiwgMTg4LCA0NiwgNDcsIDI0NywgNTksIDQ2LCA0NywgMjQ2LCAxNTYsIDQ2LCA0NywgCi0gICAgMjQ3LCAyNywgNDYsIDQ3LCAyNDYsIDIxOSwgNDYsIDQ3LCAyNDcsIDkwLCA0NiwgNDcsIDI0NiwgMTQwLCA0NiwgNDcsIAotICAgIDI0NywgMTEsIDQ2LCA0NywgMjQ2LCAyMDMsIDQ2LCA0NywgMjQ3LCA3NCwgNDYsIDQ3LCAyNDYsIDE3MSwgNDYsIDQ3LCAKLSAgICAyNDcsIDQyLCA0NiwgNDcsIDI0NiwgMjM0LCA0NiwgNDcsIDI0NywgMTA1LCA0NiwgNDcsIDI0NiwgMTMyLCA0NiwgNDcsIAotICAgIDI0NywgMywgNDYsIDQ3LCAyNDYsIDE5NSwgNDYsIDQ3LCAyNDcsIDY2LCA0NiwgNDcsIDI0NiwgMTYzLCA0NiwgNDcsIDI0NywgCi0gICAgMzQsIDQ2LCA0NywgMjQ2LCAyMjYsIDQ2LCA0NywgMjQ3LCA5NywgNDYsIDQ3LCAyNDYsIDE0NywgNDYsIDQ3LCAyNDcsIDE4LCAKLSAgICA0NiwgNDcsIDI0NiwgMjEwLCA0NiwgNDcsIDI0NywgODEsIDQ2LCA0NywgMjQ2LCAxNzgsIDQ2LCA0NywgMjQ3LCA0OSwgNDYsIAotICAgIDQ3LCAyNDYsIDI0MSwgNDYsIDQ3LCAyNDcsIDExMiwgNDYsIDQ3LCAyNDYsIDEyMSwgNDYsIDQ3LCAyNDYsIDI0OCwgNDYsIAotICAgIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIDI0NiwgMTUyLCA0NiwgNDcsIDI0NywgMjMsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMTUsIDQ2LCA0NywgMjQ3LCA4NiwgNDYsIDQ3LCAyNDYsIDEzNiwgNDYsIDQ3LCAyNDcsIDcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTksIDQ2LCA0NywgMjQ3LCA3MCwgNDYsIDQ3LCAyNDYsIDE2NywgNDYsIDQ3LCAyNDcsIDM4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjMwLCA0NiwgNDcsIDI0NywgMTAxLCA0NiwgNDcsIDI0NiwgMTI4LCA0NiwgNDcsIDI0NiwgMjU1LCA0NiwgNDcsIDI0NiwgCi0gICAgMTkxLCA0NiwgNDcsIDI0NywgNjIsIDQ2LCA0NywgMjQ2LCAxNTksIDQ2LCA0NywgMjQ3LCAzMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIyMiwgNDYsIDQ3LCAyNDcsIDkzLCA0NiwgNDcsIDI0NiwgMTQzLCA0NiwgNDcsIDI0NywgMTQsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDYsIDQ2LCA0NywgMjQ3LCA3NywgNDYsIDQ3LCAyNDYsIDE3NCwgNDYsIDQ3LCAyNDcsIDQ1LCA0NiwgNDcsIDI0NiwgCi0gICAgMjM3LCA0NiwgNDcsIDI0NywgMTA4LCA0NiwgNDcsIDI0NiwgMTI0LCA0NiwgNDcsIDI0NiwgMjUxLCA0NiwgNDcsIDI0NiwgCi0gICAgMTg3LCA0NiwgNDcsIDI0NywgNTgsIDQ2LCA0NywgMjQ2LCAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIAotICAgIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIDI0NiwgCi0gICAgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAyNDYsIAotICAgIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIDI0NiwgCi0gICAgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAyNDYsIAotICAgIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDExOSwgNDYsIDQ3LCAyNDYsIDI0NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE4MiwgNDYsIDQ3LCAyNDcsIDUzLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDEzNCwgNDYsIDQ3LCAyNDcsIDUsIDQ2LCA0NywgMjQ2LCAxOTcsIAotICAgIDQ2LCA0NywgMjQ3LCA2OCwgNDYsIDQ3LCAyNDYsIDE2NSwgNDYsIDQ3LCAyNDcsIDM2LCA0NiwgNDcsIDI0NiwgMjI4LCA0NiwgCi0gICAgNDcsIDI0NywgOTksIDQ2LCA0NywgMjQ2LCAxMjYsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ2LCAxODksIDQ2LCAKLSAgICA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIAotICAgIDI0NywgOTEsIDQ2LCA0NywgMjQ2LCAxNDEsIDQ2LCA0NywgMjQ3LCAxMiwgNDYsIDQ3LCAyNDYsIDIwNCwgNDYsIDQ3LCAKLSAgICAyNDcsIDc1LCA0NiwgNDcsIDI0NiwgMTcyLCA0NiwgNDcsIDI0NywgNDMsIDQ2LCA0NywgMjQ2LCAyMzUsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMDYsIDQ2LCA0NywgMjQ2LCAxMjIsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ2LCAxODUsIDQ2LCA0NywgCi0gICAgMjQ3LCA1NiwgNDYsIDQ3LCAyNDYsIDE1MywgNDYsIDQ3LCAyNDcsIDI0LCA0NiwgNDcsIDI0NiwgMjE2LCA0NiwgNDcsIAotICAgIDI0NywgODcsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgCi0gICAgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIAotICAgIDEwMiwgNDYsIDQ3LCAyNDYsIDEyOSwgNDYsIDQ3LCAyNDcsIDAsIDQ2LCA0NywgMjQ2LCAxOTIsIDQ2LCA0NywgMjQ3LCA2MywgCi0gICAgNDYsIDQ3LCAyNDYsIDE2MCwgNDYsIDQ3LCAyNDcsIDMxLCA0NiwgNDcsIDI0NiwgMjIzLCA0NiwgNDcsIDI0NywgOTQsIDQ2LCAKLSAgICA0NywgMjQ2LCAxNDQsIDQ2LCA0NywgMjQ3LCAxNSwgNDYsIDQ3LCAyNDYsIDIwNywgNDYsIDQ3LCAyNDcsIDc4LCA0NiwgNDcsIAotICAgIDI0NiwgMTc1LCA0NiwgNDcsIDI0NywgNDYsIDQ2LCA0NywgMjQ2LCAyMzgsIDQ2LCA0NywgMjQ3LCAxMDksIDQ2LCA0NywgCi0gICAgMjQ2LCAxMjAsIDQ2LCA0NywgMjQ2LCAyNDcsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKLSAgICAyNDYsIDE1MSwgNDYsIDQ3LCAyNDcsIDIyLCA0NiwgNDcsIDI0NiwgMjE0LCA0NiwgNDcsIDI0NywgODUsIDQ2LCA0NywgCi0gICAgMjQ2LCAxMzUsIDQ2LCA0NywgMjQ3LCA2LCA0NiwgNDcsIDI0NiwgMTk4LCA0NiwgNDcsIDI0NywgNjksIDQ2LCA0NywgMjQ2LCAKLSAgICAxNjYsIDQ2LCA0NywgMjQ3LCAzNywgNDYsIDQ3LCAyNDYsIDIyOSwgNDYsIDQ3LCAyNDcsIDEwMCwgNDYsIDQ3LCAyNDYsIAotICAgIDEyNywgNDYsIDQ3LCAyNDYsIDI1NCwgNDYsIDQ3LCAyNDYsIDE5MCwgNDYsIDQ3LCAyNDcsIDYxLCA0NiwgNDcsIDI0NiwgCi0gICAgMTU4LCA0NiwgNDcsIDI0NywgMjksIDQ2LCA0NywgMjQ2LCAyMjEsIDQ2LCA0NywgMjQ3LCA5MiwgNDYsIDQ3LCAyNDYsIAotICAgIDE0MiwgNDYsIDQ3LCAyNDcsIDEzLCA0NiwgNDcsIDI0NiwgMjA1LCA0NiwgNDcsIDI0NywgNzYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNzMsIDQ2LCA0NywgMjQ3LCA0NCwgNDYsIDQ3LCAyNDYsIDIzNiwgNDYsIDQ3LCAyNDcsIDEwNywgNDYsIDQ3LCAyNDYsIAotICAgIDEyMywgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDYsIDE4NiwgNDYsIDQ3LCAyNDcsIDU3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgCi0gICAgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTMwLCAKLSAgICA0NiwgNDcsIDI0NywgMSwgNDYsIDQ3LCAyNDYsIDE5MywgNDYsIDQ3LCAyNDcsIDY0LCA0NiwgNDcsIDI0NiwgMTYxLCA0NiwgCi0gICAgNDcsIDI0NywgMzIsIDQ2LCA0NywgMjQ2LCAyMjQsIDQ2LCA0NywgMjQ3LCA5NSwgNDYsIDQ3LCAyNDYsIDE0NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDE2LCA0NiwgNDcsIDI0NiwgMjA4LCA0NiwgNDcsIDI0NywgNzksIDQ2LCA0NywgMjQ2LCAxNzYsIDQ2LCA0NywgCi0gICAgMjQ3LCA0NywgNDYsIDQ3LCAyNDYsIDIzOSwgNDYsIDQ3LCAyNDcsIDExMCwgOTcsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIAotICAgIDk3LCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDUyLCA4MCwgMiwgCi0gICAgNjcsIDkxLCA0MywgNDQsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgCi0gICAgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgODAsIDIsIDIwMywgCi0gICAgOTEsIDIxNCwgMTUzLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDIxNSwgMjExLCA3NCwgMjQ2LCAxMDQsIDIxNSwgMjExLCAKLSAgICA3NCwgMTQwLCA1MiwgMjQ4LCAxNTcsIDc0LCA5NywgNTIsIDI0OCwgMTU3LCA3NCwgMTQwLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIAotICAgIDc0LCA5NywgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIDIxNSwgNTgsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIDk3LCAKLSAgICA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAyMTQsIDE1MywgODAsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgCi0gICAgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3NywgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIAotICAgIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyNTMsIDI1MSwgOTcsIDI1MywgMjUxLCAKLSAgICAxNDAsIDUyLCAyNTMsIDI1MSwgOTcsIDUyLCAyNTMsIDI1MSwgMTQwLCA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCA5NywgCi0gICAgODAsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMTQwLCA4MCwgMjQzLCAyNDMsIDI1MiwgMTQxLCAyMTYsIDQyLCA4NSwgMjQ3LCAKLSAgICAyNDgsIDk3LCA4MCwgMjQzLCAyNDMsIDI1MiwgMTQxLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDIyOCwgNTYsIDIxMiwgOSwgCi0gICAgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDIyLCAyMTksIDI4LCAyMTIsIDksIDc0LCAKLSAgICAyMjgsIDU2LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgODAsIDIsIDEwMywgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyMiwgCi0gICAgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDIyLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyNDQsIDE3NSwgMjQ3LCAyNTQsIAotICAgIDI0NCwgMTc1LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIyMiwgMjI4LCAyNDcsIDI1NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAKLSAgICAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDI0OSwgMTI1LCAyMTksIAotICAgIDI4LCAyNDUsIDIyMCwgNzQsIDI0NCwgMTc1LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjIyLCAyMjgsIDI0NywgMjU1LCAyNDksIDEyNSwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgCi0gICAgODAsIDI0OSwgMTI1LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyNDksIDEyNSwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjIyLCAyNTEsIDgwLCAyMjUsIDcsIAotICAgIDk3LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjE0LCAxNTIsIDgwLCAyMjUsIDcsIDk3LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjQ2LCAKLSAgICAxMDMsIDgwLCAyMjUsIDcsIDI0NiwgMTA0LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjMzLCAzNywgODAsIDIyNSwgNywgMjQ2LCAKLSAgICAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMjIsIDI0MSwgMjIyLCAyNDQsIDI1NCwgMjYsIDI1MCwgMiwgNzQsIDIzMywgNDAsIAotICAgIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyMTYsIDE0LCAyNTQsIDI2LCAyNTQsIDg4LCA3NCwgMjUxLCAxNzUsIDI1NCwgMjYsIAotICAgIDI1NCwgODgsIDc0LCAyMTYsIDE0LCAyNTQsIDI2LCAyNTAsIDIsIDgwLCAyLCAyMzAsIDE4MSwgMjE2LCAxNCwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgODAsIDIsIDIyNSwgMjIsIDIzMiwgMTA4LCA0NCwgMjIwLCAxNTIsIDI1MCwgMiwgNzQsIDIzMiwgMTA4LCAKLSAgICA0MywgMjIwLCAxNTIsIDI1NCwgODgsIDc0LCAyNTQsIDg4LCAyNTAsIDAsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI1MCwgMCwgCi0gICAgMjUwLCAzNiwgNzQsIDk3LCA4MCwgNzcsIDIxOSwgMjUxLCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjE5LCAyNTEsIDk3LCAKLSAgICA3NCwgMjE5LCAyNTEsIDk3LCA4MCwgNzcsIDE0MCwgNzQsIDk3LCA4MCwgMiwgOTYsIDUxLCAxNDAsIDgwLCAyLCA5NiwgNTEsIAotICAgIDk3LCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCA0MywgNDQsIDgwLCAyMTYsIDEzOSwgNCwgMjUwLCAzNSwgMjE0LCAxNTMsIAotICAgIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgNCwgMjUwLCAzNSwgNDMsIDI1MiwgMTM5LCAxMjAsIDQ0LCAyNTIsIDEzOSwgMTI0LCAKLSAgICAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjQsIDQ0LCAyNTIsIDEzOSwgMTIwLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgCi0gICAgNDQsIDEyNCwgMjUyLCAxMzksIDQzLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgNDMsIDEyNCwgMjUyLCAxMzksIDQ0LCAKLSAgICAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjAsIDQ0LCAyNTIsIDEzOSwgMTIwLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgCi0gICAgNDQsIDEyNCwgMjUyLCAxMzksIDQ0LCAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjQsIDQ0LCAyNTIsIDEzOSwgMTI0LCAKLSAgICAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgNDMsIDEyNCwgMjUyLCAxMzksIDQzLCAyNDEsIDI1NCwgMTQwLCAyNDEsIDI1NSwgCi0gICAgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDIxNiwgNDIsIAotICAgIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDIxNiwgNDIsIDEzMCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCAKLSAgICA0MiwgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDIxNiwgNDIsIDEzMCwgMjE0LCAxNTMsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIAotICAgIDIxNiwgNDIsIDEzMCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAKLSAgICA0NCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDI0MywgMjQzLCAxMzAsIAotICAgIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI0MywgMjQzLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAKLSAgICAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNDMsIDI0MywgMTMwLCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTA2LCAyMTQsIDE1MywgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAKLSAgICAyNTEsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgCi0gICAgMTA2LCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjIyLCAyNTEsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjE0LCAxNjMsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyNDYsIDEwNiwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE5OSwgMjQ4LCAxNTYsIAotICAgIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI1MiwgNDMsIDE5OSwgMjQ4LCAxNTYsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDEyMCwgNzcsIDE5OSwgMjQ4LCAxNTYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCAKLSAgICA0MywgMTk5LCAyNDgsIDE1NiwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDI0NiwgCi0gICAgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjUxLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAKLSAgICA0MywgMjUyLCAzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDQ0LCA1MiwgODAsIDIsIAotICAgIDIyMiwgMTgzLCAyNDEsIDIzNSwgMjQ1LCA5OCwgNSwgNzcsIDk3LCA3NCwgMjE2LCA4OSwgMjI2LCAxNjgsIDc3LCA5NywgCi0gICAgNzQsIDE0MCwgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIDgwLCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCAKLSAgICA4MCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjMzLCAxNSwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDIxNiwgMTM5LCAyMzMsIAotICAgIDE0LCAyNDIsIDEzMCwgNzcsIDk3LCA3NCwgMjE4LCA2NCwgNzcsIDk3LCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIxOCwgCi0gICAgNjMsIDIxOCwgMjIsIDc3LCAxNDAsIDc0LCA0MywgMjQ0LCA5MSwgMjE3LCA3NywgNDQsIDI0NCwgOTEsIDIxNywgNzcsIAotICAgIDEyMCwgMjQ0LCA5MSwgMjE3LCA3NywgMTI0LCAyNDQsIDkxLCAyMTcsIDc3LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAKLSAgICAyNDgsIDYwLCAyMTAsIDE2MCwgMTg3LCAyMTgsIDI0MiwgMjEwLCAxNjAsIDE4NywgMjE1LCA0OSwgMjQ5LCAyMjYsIDQzLCAKLSAgICA3MSwgMjQ5LCA5OSwgMTI3LCA0NCwgNzEsIDI0OSwgOTksIDEyNywgNDMsIDcxLCAyMjYsIDMsIDQ0LCA3MSwgMjI2LCAzLCAKLSAgICAyMTAsIDE2MCwgMTg3LCA0MywgMjM2LCAxNSwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjM2LCAxNSwgMTI3LCAyMTAsIAotICAgIDE2MCwgMTg3LCA0MywgMjUxLCAyNDIsIDEyNywgMjEwLCAxNjAsIDE4NywgNDQsIDI1MSwgMjQyLCAxMjcsIDQzLCA0MiwgCi0gICAgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTQsIDE4MywgNDMsIDQyLCAyNTEsIDE1OCwgCi0gICAgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjE2LCAxNCwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAKLSAgICAyMzYsIDAsIDI1MSwgMTc1LCAyNDksIDE2MCwgNDMsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjUxLCAKLSAgICAxNzUsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgCi0gICAgNDMsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIDQ0LCAyNTQsIDExMCwgMjUxLCAxNTgsIDIsIDI0NywgMTIwLCAKLSAgICA0MywgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0NCwgMjU0LCAyNiwgMjQyLCAxMzAsIDEyNywgNTIsIDQzLCAyNTQsIDI2LCAKLSAgICAyNDIsIDEzMCwgMTI3LCA1MiwgNDQsIDI1NCwgMjYsIDIzMywgMTUsIDEyNywgNDMsIDg1LCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNDQsIDg1LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjQ2LCAxMTgsIDI0NCwgMTM1LCA2NywgMjEwLCAzNSwgMjMyLCAKLSAgICAyMTMsIDIzMSwgODgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjMzLCA0NiwgNDQsIDI1NCwgMTEwLCAyMTQsIDEyLCAyLCAyMTgsIAotICAgIDIzNCwgMjMxLCA4OCwgNDQsIDI1NCwgMTEwLCAyLCAyNDcsIDEyMCwgMjU0LCAxMTAsIDIsIDIyMiwgOTIsIDIzNSwgMjE1LCAKLSAgICAyNTUsIDMsIDI1NCwgMTA5LCAyMTgsIDI1NSwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCAyMTgsIDI1NSwgMjU0LCAKLSAgICAxMTAsIDIyNiwgMTcwLCAyMTQsIDE2MywgMjE1LCA5NCwgMjU0LCAxMDksIDIyMywgNDksIDI1NCwgMTA5LCAyNTQsIDExMCwgCi0gICAgMiwgMjE0LCAxODMsIDIyMywgNDksIDI1NCwgMTEwLCAyLCAyMTQsIDE4MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIAotICAgIDE3MCwgMjE0LCAxNjMsIDIyNiwgMjQ4LCAyNTQsIDExMCwgMjI2LCAxNzAsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIDExMCwgCi0gICAgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyMCwgMjIsIDIyMiwgMjUxLCAyMzEsIDg4LCAKLSAgICAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyMCwgMjIsIDIzMywgNDYsIAotICAgIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTI0LCAyMiwgCi0gICAgMjIyLCAyNTEsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgCi0gICAgNywgMTI0LCAyMiwgMjMzLCA0NiwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCAKLSAgICA4MCwgMjI1LCA3LCA0NCwgMjIsIDIxNCwgMTYzLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgCi0gICAgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIAotICAgIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDQsIDIyLCAyNDYsIDEwNiwgMjMxLCA4OCwgMjU0LCAKLSAgICAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0MywgMjIsIDI0NiwgMTA2LCAyMjMsIAotICAgIDQ5LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDI0NSwgMTUyLCAyMjAsIDEyOCwgMiwgMjI2LCAxMjMsIDI0NSwgMTUyLCAyMjAsIAotICAgIDEyOCwgMiwgNCwgMjUwLCAzNiwgNDgsIDI0NSwgMTUyLCAyMjAsIDEyOCwgMiwgNDQsIDgwLCA0OCwgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0MywgODAsIDQ4LCAyNTAsIDM2LCAyLCAyMDMsIDEzMCwgMzcsIDY3LCAxMzAsIDM3LCAyMjYsIDcsIDM3LCAKLSAgICAyMjMsIDUwLCAyMTksIDQ2LCAzNywgMjI1LCAxNzEsIDI1MCwgMzYsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDI1MiwgCi0gICAgMTQxLCAyMiwgMjE2LCAxNCwgMTYzLCAyNDcsIDE3MywgMjUxLCA3OCwgNjcsIDEzMCwgMjUwLCAzNiwgMiwgMjE4LCAyNCwgCi0gICAgMjExLCAxNzgsIDM3LCAyNTQsIDg3LCAyNDcsIDE2OSwgNTAsIDEyMCwgODAsIDIxNiwgMTM5LCAyNTAsIDM1LCAzNywgNzEsIAotICAgIDI1MSwgMTEzLCAzNywgMjUxLCAxMTMsIDM3LCAyMzMsIDE0LCAzNywgMjQyLCAxMjksIDI1MCwgMzYsIDIsIDQsIDI1MCwgCi0gICAgMzYsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMjIsIDI1MSwgMjUwLCAzNiwgMiwgMTEzLCAyMDMsIDIxOCwgOTEsIDIxNiwgNDIsIAotICAgIDIxNiwgMTk2LCAyMjIsIDI1MSwgOTIsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjE5LCA5NSwgOTIsIDI0NCwgMTc1LCAyNDcsIAotICAgIDI1NSwgMjE5LCA5NSwgOTIsIDI1MywgMjE2LCA5MiwgNCwgMjUwLCAzNSwgOTIsIDIxOCwgMjM0LCAxMTMsIDIzNSwgNjUsIAotICAgIDIxOCwgMjMyLCAyMTUsIDIyNiwgMiwgNTksIDQ4LCAyMTUsIDIyNiwgMiwgMjE0LCAxODMsIDIyMiwgOTIsIDIzNiwgMCwgCi0gICAgMjE1LCAyMjUsIDIxNSwgMjI2LCAyLCAyMjAsIDEzNCwgMjUzLCAyMDcsIDI1MSwgMTc0LCA0NCwgMjE1LCAyMjYsIDc3LCAKLSAgICA0MywgMjE1LCAyMjUsIDQzLCAyMTUsIDIyNiwgMjUyLCAzMCwgNjcsIDEzMCwgNjcsIDI1MiwgMTQxLCAyNTIsIDMwLCA0NCwgCi0gICAgMjE1LCAyMjUsIDI1MSwgMTY1LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjUxLCAxNjUsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAKLSAgICA4NSwgMjUxLCAxNjQsIDMwLCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMzAsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA3MSwgCi0gICAgMjQwLCAyMzYsIDg1LCAyNDAsIDIzNiwgNDMsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgCi0gICAgNDMsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDQ0LCA1MiwgMjExLCAyNDQsIDI0NCwgMTM1LCAyMzUsIDI0OCwgMjM1LCAKLSAgICAyMzQsIDIxNiwgMTEyLCAxMTcsIDIzNSwgMjM0LCAyMzUsIDIzNSwgMjI5LCAxMDIsIDIsIDY3LCAxMzAsIDI0NiwgMTEyLCAKLSAgICAyMzAsIDg3LCA0MiwgMiwgMjQ5LCAxODEsIDIyNiwgMTI3LCAyMzUsIDI0NiwgMjUzLCAyMzcsIDIxOSwgMjE5LCAyMjQsIAotICAgIDE4MCwgMjQ1LCA5OCwgNSwgMjIsIDIxOSwgOTcsIDIyNiwgNywgMjQ1LCA5OCwgNSwgMjIsIDIxOSwgOTcsIDIyNiwgOCwgMiwgCi0gICAgMjE2LCA4OSwgNDgsIDI0MCwgMTA0LCAyMTYsIDQyLCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDIsIDE4MywgMjE4LCAxNTUsIAotICAgIDIxNiwgMTg1LCAyNDYsIDEwNSwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNDYsIDEwNSwgMjE1LCAyMjYsIAotICAgIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA4NSwgMjQ3LCAyNDksIDIsIDEyNCwgNzQsIDg1LCAyMzIsIDEwNCwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDEyNCwgNzQsIDg1LCAyNTAsIDM2LCAyLCAxMjQsIDc0LCAyNDUsIDg1LCA3MSwgMjE4LCAyMzQsIDI0NSwgODUsIAotICAgIDg1LCAyMTgsIDIzNCwgMjQ1LCA4NSwgNzEsIDI0NywgMjQ4LCAyNDUsIDg1LCA4NSwgMjQ3LCAyNDgsIDI0NSwgODUsIDcxLCAKLSAgICAyNTAsIDM1LCAyNDUsIDg1LCA4NSwgMjUwLCAzNSwgMjIyLCAxMzIsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTY3LCAyMTksIAotICAgIDQ3LCAyLCAyMjYsIDEyMywgMjIzLCA1MCwgMjE5LCA0NywgMiwgMjAzLCA5MSwgMjUxLCAyNDksIDIxOSwgNDYsIDI1MSwgCi0gICAgMjQ5LCAyMjMsIDUwLCAyMTksIDQ2LCA1MiwgMjI1LCAyMiwgMjE1LCAyMTEsIDIyNSwgMjIsIDIzMywgNDIsIDI0OSwgOTEsIAotICAgIDI1NCwgMTEwLCAxMjcsIDIyMiwgMjQ3LCAyNDksIDkxLCAyNTQsIDExMCwgMTI3LCAyMTYsIDc4LCAyMzAsIDE3OSwgMjMwLCAKLSAgICAyNCwgMzcsIDU5LCAyMjYsIDE2NywgMjMwLCAyNCwgMzcsIDk2LCAyMjYsIDE2NywgMjMwLCAyNCwgMzcsIDMwLCAyMjYsIAotICAgIDE2NywgMjMwLCAyNCwgMjE0LCAxNzYsIDIyNiwgMTY4LCAyLCAyNDcsIDEyMCwgMjMwLCAyNCwgMjE0LCAxNzYsIDIyNiwgCi0gICAgMTY4LCAyLCAyMjUsIDIyLCAyMzAsIDI0LCA0MiwgMjM1LCAxOTksIDIyNiwgMTY3LCAyMzAsIDI0LCA0MiwgMjE0LCAxNzYsIAotICAgIDIyNiwgMTY3LCAxMTMsIDIzMiwgMTQ2LCAyMiwgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDE3NywgMjI2LCAxNjcsIDIzMCwgCi0gICAgMjQsIDMwLCAyMjYsIDE2NywgMjMwLCAxNTQsIDExMywgMjE4LCA0MywgMjE4LCA0MSwgMiwgMjM1LCAyMTEsIDIyNCwgMjQsIAotICAgIDIzNSwgMjEyLCAyMjYsIDE2NywgMjQ0LCA5OSwgMjI1LCAyNTUsIDIzNSwgMjExLCAyMzUsIDIxMiwgMiwgNTIsIDkxLCAKLSAgICAyMzUsIDIxMiwgMjUzLCAxNzMsIDIsIDIxOSwgOTUsIDI1MCwgMzIsIDI0MywgMjI2LCAyNTQsIDg4LCAyMzUsIDIwOSwgCi0gICAgMjMyLCAyMTQsIDIzNSwgMjEwLCAyLCAyMjMsIDExNSwgMjI1LCAyMzcsIDI1NCwgMiwgMjI1LCAxLCAyMzIsIDIxNCwgMjM1LCAKLSAgICAyMTAsIDIsIDIyMCwgMTUyLCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIDIxMCwgMjI4LCA1MiwgCi0gICAgMjM1LCAyNTAsIDIxNiwgMTk2LCAyMjUsIDEsIDIzNSwgMjEyLCAyNTQsIDIsIDExNSwgMjI1LCAxMSwgMjI2LCAxNjcsIAotICAgIDIyNCwgMTgsIDIzNSwgMjEyLCAyMjYsIDE2NywgMjM1LCAyMTIsIDIsIDE0MCwgODAsIDIsIDEwMywgMjM1LCAyMTIsIDIsIAotICAgIDMwLCA1MCwgMjM1LCAyMTIsIDIsIDIzNSwgMTk4LCAyMzUsIDIxMiwgMiwgMjE0LCAxNzUsIDIzNSwgMjEyLCAyLCAyMjYsIAotICAgIDEyMywgMjM1LCAyMTIsIDIsIDIxNCwgMTgzLCAyMzUsIDY2LCAyMzMsIDg1LCA0MywgMjE1LCAyMjYsIDIyNiwgMTY3LCAKLSAgICAyMTAsIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjQ5LCAyMDksIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjUsIDU2LCAyMTAsIAotICAgIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjI0LCAxNzYsIDk2LCA1LCAyLCA0LCAyNTAsIDM2LCA0OCwgOTYsIDUsIDIsIDI1MCwgCi0gICAgMzEsIDI1NSwgMTUsIDQ4LCA5NiwgNSwgMiwgMjE2LCA4OSwgNDgsIDk2LCA1LCAyLCA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIAotICAgIDg5LCA1MSwgOTYsIDUsIDIsIDIxOCwgNjUsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIDIyNSwgMjMwLCAxODIsIDUsIDIsIAotICAgIDI0OSwgMjIwLCA0OCwgMjMwLCAxODIsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODIsIDUsIDIsIDI0NCwgMTc1LCAyNDcsIDExOCwgCi0gICAgMjMwLCAxODIsIDUsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgOTYsIDUsIDIzNiwgMCwgNDMsIDE2MywgMjUwLCAzNSwgOTYsIAotICAgIDUsIDIzNiwgMCwgNDQsIDE2MywgMjUwLCAzNSwgMjEzLCAyNTQsIDE3NywgMjQ5LCAxMzEsIDIyNCwgMTgwLCAyMzAsIDg0LCAKLSAgICA1LCAyLCA1OSwgNDgsIDIzMCwgODQsIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE0OSwgMjI0LCAxODEsIDIsIDI1MSwgMTc1LCAKLSAgICAyNDksIDI1NSwgMjE5LCA3NywgMjI0LCAxODAsIDIzMCwgODQsIDUsIDIzNiwgMCwgNDMsIDE2MywgMjUwLCAzNSwgMjMwLCAKLSAgICA4NCwgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAzNywgMjMwLCA4NCwgNSwgMiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMjMwLCA4NCwgNSwgMjM2LCAwLCA1MiwgMjUwLCAzNSwgMzcsIDI0NywgMTY5LCA1MCwgOTYsIDUsIDIzNiwgMCwgMjE1LCAKLSAgICAyMjUsIDIzMCwgMTgyLCA1LCAyMzYsIDAsIDIxNSwgMjI1LCAyMzAsIDg0LCA1LCAyMzYsIDAsIDIxNSwgMjI1LCAyMzUsIAotICAgIDIwNiwgMjI0LCAxODAsIDIyMiwgMjQyLCAyMzUsIDIwNiwgMjI0LCAxODAsIDIxMCwgMTYwLCAxODcsIDIyMywgOTAsIDI0OSwgCi0gICAgMjA5LCAyNTQsIDEzNCwgMTc3LCAyNDksIDE2NSwgMjM1LCAxOTksIDIsIDI0NywgMTIwLCAyMTQsIDE3NiwgMiwgMjMwLCAKLSAgICAxODIsIDUwLCAyMTQsIDE3NiwgMiwgMjI2LCAxMjMsIDIzNSwgMTk5LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIzMiwgCi0gICAgMTQ2LCAyNTQsIDExOCwgMjE0LCAxNzYsIDIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjE0LCAxNzYsIDc3LCAyMzUsIDE5OCwgCi0gICAgMjM1LCAxOTksIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDc3LCAyNTIsIDE0MSwgNzcsIDIzNSwgMTk4LCAyMzUsIDE5OSwgCi0gICAgNzcsIDI1MiwgMTQxLCA3NywgMjE0LCAxNzUsIDIxNCwgMTc2LCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMiwgMjE0LCAxNzUsIAotICAgIDIzNSwgMTk5LCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMiwgMjM1LCAxOTgsIDI1MCwgMCwgMjE0LCAxNzYsIDIsIDIyMCwgCi0gICAgMTMzLCAyNTAsIDAsIDIzNSwgMTk5LCAyLCAyMjAsIDEzMywgNTIsIDQyLCAyMzUsIDE5OCwgNTIsIDQyLCAyMTQsIDE3NSwgCi0gICAgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAxMzQsIDIyLCAyMTksIDc3LCAyMjQsIDE4MCwgMjMyLCAxNDYsIDIyLCAyLCAKLSAgICA1OSwgNDgsIDIzMiwgMTQ2LCAxNzcsIDIsIDU5LCA0OCwgNTIsIDIzMiwgMTQ2LCAyNTQsIDExOCwgNTIsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMTEzLCAyMzUsIDIwMCwgMjMyLCAxNDYsIDI1NCwgMTE4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgCi0gICAgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDIyNiwgMTU4LCAyMTksIDg1LCAyMzMsIDg1LCAyNTQsIDExOCwgMjMyLCAKLSAgICAxNDYsIDE3NywgMjI2LCAxMjEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyLCAyLCAyMzAsIDIyNCwgMjE4LCAKLSAgICAxMzksIDIzMiwgMTQ2LCAxNzcsIDIsIDIzMCwgMjI0LCAyMTgsIDEzOSwgMjMyLCAxNDYsIDIyLCAyLCAyMDMsIDI0OCwgCi0gICAgMTU2LCAyMzIsIDE0NiwgMTc3LCAyLCAyMDMsIDI0OCwgMTU2LCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMjYsIDEyMywgMjMyLCAKLSAgICAxNDYsIDIyLCAyLCAyMTQsIDE4MywgMjMyLCAxNDYsIDIyLCAyLCA1MiwgMjE0LCAxODMsIDQsIDIxMywgMjUxLCAyLCAyMTQsIAotICAgIDE4MywgMjMyLCAxNDYsIDE3NywgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjE0LCAxODMsIDIxMCwgCi0gICAgMTYwLCAxODcsIDI0NywgMTI5LCAyNTQsIDc5LCAyMTAsIDE2MCwgMTg3LCAyMjMsIDE0OCwgMjU0LCA3OSwgMjQ1LCA5OCwgCi0gICAgNSwgMiwgNTksIDUxLCAyNDAsIDEwNCwgMiwgNTksIDQ4LCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgNTIsIDY3LCAKLSAgICA5MSwgMjE1LCAyMTEsIDIwMywgMjUyLCAxNDEsIDIsIDIxNSwgMjExLCA2NywgOTEsIDIxNiwgODksIDIyNiwgMTY4LCAyLCAKLSAgICA1OSwgNDgsIDIxNiwgODksIDIyNiwgMTY4LCAyLCAyMjIsIDIyOCwgMjQ3LCAxMTgsIDIxOSwgMTYyLCAyMzAsIDE4MiwgCi0gICAgMjE5LCAxNjEsIDI0OSwgMTk5LCAyLCA1OSwgNDgsIDI0NSwgOTgsIDIsIDI1MywgMjE2LCAyNTQsIDE0OCwgMTI4LCAyMTYsIAotICAgIDQyLCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAyNTQsIDQ4LCAxMjgsIDE3NywgMTI4LCAxMTEsIDI0NSwgOTgsIDUsIDc3LCA5NiwgCi0gICAgNTAsIDk2LCA1LCA3NywgMjQ1LCA5OCwgNTAsIDI0NSwgOTgsIDUsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgNTIsIDI0OSwgCi0gICAgMjI3LCAyNDUsIDk5LCAxMTMsIDI0OSwgMTk0LCAyNDUsIDk4LCAyMTksIDE3NiwgMTM0LCAyNDksIDE5NCwgMjQ1LCA5OCwgCi0gICAgMjE5LCAxNzYsIDI0NSwgOTgsIDUsIDIsIDExMywgMTcwLCA3NywgMjIsIDExMywgMTcwLCA1MSwgMjQ1LCA5NCwgMiwgMjQ0LCAKLSAgICAxMSwgMTcwLCA0OCwgMjMzLCAxNSwgMiwgMjUwLCAzNiwgMjM1LCAyMTUsIDI0MiwgMTMwLCAyLCAyNTAsIDM2LCAyMzUsIAotICAgIDIxNSwgMjMzLCAxNSwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjQyLCAxMzAsIDIsIDIyNCwgMTMsIDE2NCwgNDgsIDIzMywgCi0gICAgMTUsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIAotICAgIDIxNiwgNDIsIDIsIDU5LCAyMzUsIDIxNSwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgCi0gICAgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIDIzMywgMTUsIDE3NywgMjE5LCA5NywgCi0gICAgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNzcsIDIyMiwgMjUxLCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIAotICAgIDIsIDU5LCA3NywgMjMzLCA0NiwgMjMzLCAxNSwgMTc3LCAyNTQsIDQ5LCAyNDIsIDEzMCwgMTc3LCAyNTQsIDQ5LCAyMzMsIAotICAgIDE1LCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDIsIDEzMCwgMjIsIDIxOSwgMTUzLCAyMjgsIDUyLCAKLSAgICAxMjgsIDExMSwgMjMzLCAxNSwgMjIsIDIyOCwgNTIsIDI1NCwgNDksIDI0MiwgMTMwLCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgCi0gICAgMjMzLCAxNSwgNzcsIDI0NiwgMTExLCAxMjgsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyNDYsIDExMSwgMTI4LCAKLSAgICA3NywgMjMzLCAxNCwgMjMzLCAxNSwgNzcsIDIxOSwgMTYyLCAxNzcsIDI0NSwgOTksIDI0MiwgMTMwLCA3NywgMjE5LCAxNjIsIAotICAgIDE3NywgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgMTYyLCA3NywgMjQyLCAxMjksIDI0MiwgMTMwLCA3NywgMjE5LCAKLSAgICAxNjIsIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjQyLCAxMzAsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjQyLCAxMzAsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDI0NSwgOTksIDIzMywgMTUsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyNDIsIAotICAgIDEzMCwgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCA3NywgMjE5LCA5NywgMTI4LCA3NywgMjMzLCAxNSwgNzcsIAotICAgIDIxOSwgOTcsIDI0NSwgOTksIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyMTksIDk3LCAxMjgsIDIxNiwgCi0gICAgNDIsIDE3NywgMjQyLCAxMjksIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE1LCAyLCA1OSwgMjM1LCAyMTUsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEzMCwgMiwgNTksIDIzNSwgMjE1LCAyNDYsIDExMSwgMTI4LCAKLSAgICAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDI0NiwgMTExLCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDI0NiwgMTExLCAKLSAgICAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIDE3NywgMjMzLCAxNCwgMjE5LCAxNjIsIDE3NywgMjQyLCAxMjksIDIxOSwgMTYyLCAKLSAgICA3NywgMjMzLCAxNSwgNzcsIDI0NSwgOTgsIDUwLCAyMTksIDE2MiwgNzcsIDI0MiwgMTMwLCA3NywgMjQ1LCA5OCwgNTAsIAotICAgIDUyLCAyMjksIDkxLCAyMzMsIDE0LCA1MiwgMjI5LCA5MSwgMjQyLCAxMjksIDUyLCAyMjksIDkxLCAyMzMsIDE1LCAyLCAKLSAgICAyMTQsIDE4MywgMjQyLCAxMzAsIDIyNiwgMTIxLCAyMzMsIDE0LCAyNDIsIDEzMCwgMjUyLCAzMCwgMjMzLCAxNCwgMjMzLCAKLSAgICAxNSwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkyLCAyNDIsIDEzMCwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkyLCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyNDIsIDEzMCwgMjUwLCAwLCAKLSAgICAyNTEsIDc4LCAyNDksIDkzLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA3OCwgMjE2LCAyMDAsIDIzMywgODMsIDIxNiwgCi0gICAgMjAwLCAyMTksIDc4LCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgMjMzLCA4MywgMjE2LCAyMDEsIDE3NywgMTI4LCAxMTEsIAotICAgIDI0NSwgOTgsIDUsIDIsIDI1MSwgMTA4LCA0OCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyMTksIDE1MywgMjQ1LCA5OCwgNTAsIDIyNCwgMjAzLCA3NywgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAKLSAgICAyMTgsIDU2LCA3NywgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIAotICAgIDU2LCA3NywgMjQ1LCA5OCwgNTAsIDIyNCwgMjAzLCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjI4LCA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjI4LCAKLSAgICA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCA1MiwgMjI0LCAyMDIsIDUyLCAyMTgsIDU1LCAyMTgsIDY0LCAyLCAyNDcsIDEyMCwgCi0gICAgMjE4LCAyMiwgMiwgMjQ3LCAxMjAsIDIxOCwgNjQsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMiwgMiwgOTYsIDUsIDUxLCAyMTgsIAotICAgIDY0LCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCAyMiwgMiwgMjMwLCA4NCwgNSwgNTEsIDIxOCwgNjQsIDY0LCAxNzcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDIyLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjE4LCA2NCwgCi0gICAgNjQsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCAyMiwgNjQsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCA2NCwgNjQsIDc3LCAyMTYsIAotICAgIDg5LCAyMjYsIDE2NywgMjE4LCAyMiwgNjQsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgMjE4LCA2NCwgNjQsIDc3LCAyNTQsIAotICAgIDE0OCwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgNzcsIDIyOCwgNTIsIDEyOCwgMTExLCA0MiwgNDMsIDIwNCwgOTMsIDIyNiwgCi0gICAgMTY3LCA0MiwgNDQsIDIwNCwgOTMsIDIyNiwgMTY3LCAyNTAsIDAsIDIxOCwgNjMsIDI1MCwgMCwgMjE4LCAyMSwgMjUwLCAwLCAKLSAgICAyMTgsIDY0LCAxNzcsIDEyOCwgMTExLCAyNTAsIDAsIDIxOCwgMjIsIDE3NywgMTI4LCAxMTEsIDIxOCwgNjQsIDc3LCAyMTgsIAotICAgIDIxLCAyMTgsIDIyLCA3NywgMjE4LCA2MywgMjE4LCA2NCwgNzcsIDIxOCwgNjMsIDIxOCwgMjIsIDc3LCAyMTgsIDIxLCAKLSAgICAyMTgsIDIyLCAyNTIsIDMwLCAyMTgsIDYzLCAyMTgsIDIyLCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMjUxLCA3OCwgMjQ4LCAKLSAgICAxNTcsIDIsIDIxOCwgNjMsIDI0NSwgMTcwLCA2NCwgMjI2LCAxNzAsIDI0NiwgMTAzLCAyMjUsIDQ4LCAyLCAyMTcsIDEyLCAKLSAgICAyMTYsIDEzLCAyMTUsIDI0MCwgMjM1LCAxOTgsIDI0NCwgMjEsIDIyOCwgNjUsIDIxOSwgMjUxLCA0MywgMjE3LCA4NywgCi0gICAgMjE5LCAyNTEsIDEyNCwgMjE3LCA4NywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4NywgMjI1LCAxNzIsIDIsIDIyMiwgOTEsIDY3LCAKLSAgICAyNTIsIDE0MSwgMjE1LCAyMTEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA0MywgMjE1LCA5MywgNjcsIDI1MiwgCi0gICAgMTQxLCA1MiwgNDMsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0MywgMjE1LCA5MywgMTk5LCAyNDgsIDE1NywgCi0gICAgMjQzLCAyNDMsIDQzLCAyMzEsIDYzLCA2NCwgNTIsIDIxMywgMjM5LCAyMTksIDI1MSwgMTI0LCAyMTcsIDg4LCAyLCAyMjYsIAotICAgIDEyMywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgMiwgMjE0LCAxODMsIDIxOSwgMjUxLCAxMjAsIDIxNywgODgsIDc3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCA1MiwgMTI0LCAyMTcsIDg3LCA1MiwgMTIwLCAyMTcsIDg3LCA1MiwgMjE4LCAxMDMsIAotICAgIDIyOCwgNTIsIDUwLCAyMjMsIDQ5LCA1MiwgMjE4LCAxMDMsIDIyOCwgNTIsIDUwLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ3LCAKLSAgICAxNzUsIDIsIDIyMywgNDksIDIyOSwgMTAxLCAyMTksIDk1LCA2NywgMjMyLCAyMTQsIDIsIDI1MCwgMzYsIDQ4LCA2NywgCi0gICAgMjMyLCAyMTQsIDIsIDI1MCwgMzYsIDUxLCAxMjQsIDIxNywgODgsIDIsIDI1MCwgMzYsIDUxLCAyMjYsIDgsIDIsIDIwMywgCi0gICAgOTEsIDIyNiwgOCwgMiwgMjE2LCA4OSwgMjI2LCAxNjcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDI1MSwgMjQ0LCAyMjMsIAotICAgIDkxLCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAyLCAyMDMsIDkxLCAyMTUsIDIxMSwgMjQ5LCAyMjcsIDIyNiwgMTY3LCAKLSAgICAyMTUsIDIxMSwgMjI5LCA5MSwgMjMzLCAxNCwgMjE1LCAyMTEsIDIyOSwgOTEsIDI0MiwgMTI5LCAyNDYsIDExMSwgMjE5LCAKLSAgICA5NywgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQ2LCAxMTEsIDIxOSwgOTcsIDI0MiwgMTMwLCAxNzcsIDEyOCwgMTExLCAKLSAgICAyMTUsIDIxMSwgMjE5LCA0NywgMjUxLCAyNDQsIDIyMywgOTEsIDIzMywgODUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDIyNiwgMTY3LCA1MiwgMjE5LCA0NywgMjI2LCAxNjcsIDcxLCA2NywgMTMwLCAyMzAsIDI0LCA3MSwgNjcsIDEzMCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDcxLCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA3MSwgNzQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3MSwgNzQsIAotICAgIDIxOSwgMjgsIDIxMiwgOSwgNzEsIDc0LCA0MywgNDQsIDcxLCA3NCwgMTQwLCA4NSwgNzQsIDIxNCwgMTUzLCA4NSwgNzQsIAotICAgIDI0NiwgMTA0LCA4NSwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4NSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODUsIDc0LCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgODUsIDc0LCAyMTksIDI4LCAyMTIsIDksIDg1LCA3NCwgNDMsIDQ0LCA4NSwgNzQsIDEyMCwgCi0gICAgMTI0LCA4NSwgNzQsIDk3LCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDk3LCA4MCwgMiwgMjE2LCA3NywgMjE0LCAxNTIsIAotICAgIDE0MCwgODAsIDIsIDIxNiwgNzcsIDI0NiwgMTAzLCAxNDAsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgNDIsIDIsIDIxNiwgCi0gICAgMTQsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyNTEsIDE3NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCAKLSAgICAyNDcsIDI0OSwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIAotICAgIDIsIDIxNiwgMTQsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAyLCAyNTEsIDE3NSwgMTYzLCAyNTEsIDIyMSwgMjQ2LCAKLSAgICAxMTgsIDIxOCwgMjM0LCA4NSwgMjMzLCA4NSwgMjE4LCAyMzQsIDcxLCAyMzMsIDg1LCAyMTgsIDIzNCwgODUsIDIxMywgCi0gICAgMTg3LCA0LCAyMTgsIDIzNCwgNzEsIDIxMywgMTg3LCA0LCAyMTgsIDIzNCwgODUsIDIyNSwgMTkwLCA3MSwgMjI1LCAxOTAsIAotICAgIDcxLCAyNDEsIDE5MywgODUsIDI0MSwgMTkzLCAyMDMsIDg1LCAyNDEsIDE5MywgODUsIDIzMywgODUsIDI1MCwgMzUsIDg1LCAKLSAgICAyMzEsIDgyLCAyNDcsIDI0OCwgNzEsIDIzMSwgODIsIDI0NywgMjQ4LCA4NSwgMjMxLCA4MiwgMjMyLCAxMDQsIDcxLCAyMzEsIAotICAgIDgyLCAyMzIsIDEwNCwgODUsIDQsIDI0NywgMjQ4LCA4NSwgNCwgMjMyLCAxMDQsIDcxLCA0LCAyMzIsIDEwNCwgODUsIDIwMywgCi0gICAgMjQ1LCAxNjQsIDcxLCAyMDMsIDI0NSwgMTY0LCA4NSwgNjcsIDI0NSwgMTY0LCA3MSwgNjcsIDI0NSwgMTY0LCA0MywgODAsIAotICAgIDIsIDQsIDI1MCwgMzUsIDEzNCwgMTQwLCAyNTMsIDI0NywgNDMsIDgwLCAyLCAzNywgMjI1LCAyMiwgMTk5LCAxNDAsIDIxOCwgCi0gICAgMjMwLCA3NCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAKLSAgICAxNDAsIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgMTMwLCAxNDAsIDIxNSwgNTgsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIAotICAgIDE0MCwgODAsIDIsIDI0NiwgMTE4LCAyMTgsIDEzOSwgMTQwLCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAxNDAsIDgwLCAKLSAgICAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDIxNSwgNTgsIAotICAgIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgODAsIDIxNiwgMTM5LCAyMTEsIDE3OCwgMjEyLCAzNiwgODAsIDIyNSwgNywgMjQ3LCAxOTUsIDIzMywgNDYsIDI0NSwgCi0gICAgOTgsIDUsIDc3LCAxNDAsIDc0LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAKLSAgICAyMjMsIDUwLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDk3LCA4MCwgMjE2LCAxMzksIDI0MiwgMTI5LCA5NywgODAsIDIxNiwgCi0gICAgMTM5LCAyMTgsIDIxLCAxNDAsIDIyNCwgMjQsIDc0LCA5NywgMjI0LCAyNCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgCi0gICAgMTY4LCA3NywgOTcsIDc0LCA5NywgODAsIDc3LCAyMjMsIDUwLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxNiwgODksIDIyNiwgCi0gICAgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMTQwLCA4MCwgNzcsIDIyMywgNTAsIAotICAgIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIDE2NywgNzEsIDIzMSwgODIsIAotICAgIDIxOCwgMTU2LCA4NSwgNCwgMjE4LCAxNTYsIDcxLCA0LCAyMTgsIDE1NiwgODUsIDIyMiwgMjQ3LCAyMjUsIDE5MCwgNzEsIAotICAgIDIyMiwgMjQ3LCAyMjUsIDE5MCwgMTE0LCAyMzMsIDg1LCAyNTAsIDM1LCAxMTQsIDIyNiwgMTI0LCAyLCAyMjYsIDEyNCwgCi0gICAgMjM1LCAyMTUsIDExNCwgMjUwLCAzNiwgMiwgMjUwLCAzNiwgMjM1LCAyMTUsIDExNCwgMjUwLCAzNSwgMTE0LCAzNywgMjIxLCAKLSAgICAyNTQsIDE0NSwgNiwgMSwgMjUzLCAxNTksIDE0NSwgNiwgMSwgMjUxLCAxMTcsIDE0NSwgNiwgMSwgMjEzLCAyNTMsIDE0NSwgCi0gICAgNiwgMSwgMjQyLCAxODUsIDE0NSwgNiwgMSwgMjQ3LCAxNDAsIDE0NSwgNiwgMSwgMjExLCAyMSwgMTQ1LCA2LCAxLCAyMTAsIAotICAgIDY4LCAxNDUsIDYsIDEsIDI0NiwgMzQsIDE0NSwgNiwgMSwgMjEwLCA5MSwgMTQ1LCA2LCAxLCAyMzUsIDE0OCwgMTQ1LCA2LCAKLSAgICAxLCA2NSwgMjM1LCAxNDgsIDE0NSwgNiwgMSwgNzMsIDE0NSwgNiwgMSwgMjQ3LCAxNjAsIDE0NSwgNiwgMSwgMjM0LCAyNDAsIAotICAgIDE0NSwgNiwgMSwgMjMyLCAxODYsIDE0NSwgNiwgMSwgMjMwLCAyOSwgMTQ1LCA2LCAxLCAyMjksIDE5MSwgMTQ1LCA2LCAxLCAKLSAgICAyMjYsIDE4NSwgMTQ1LCA2LCAxLCAyMjUsIDQsIDE0NSwgNiwgMSwgMjIyLCAyMjcsIDE0NSwgNiwgMSwgMjE5LCA4MywgCi0gICAgMTQ1LCA2LCAxLCAyMTUsIDgxLCAxNDUsIDYsIDEsIDIxNCwgMjAxLCAxNDUsIDYsIDEsIDI0MywgMjQ2LCAxNDUsIDYsIDEsIAotICAgIDI0MSwgMTk5LCAxNDUsIDYsIDEsIDIyNiwgMTM1LCAxNDUsIDYsIDEsIDIyNSwgMjIxLCAxNDUsIDYsIDEsIDIxOSwgMjI4LCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgMTY3LCAxNDUsIDYsIDEsIDI1MCwgNzUsIDE0NSwgNiwgMSwgMjIwLCAxMDIsIDE0NSwgNiwgMSwgCi0gICAgMjExLCAyNywgMTQ1LCA2LCAxLCAyMTEsIDI5LCAxNDUsIDYsIDEsIDIxMSwgNTcsIDE0NSwgNiwgMSwgMjE4LCAyNTMsIAotICAgIDE2MiwgMTQ1LCA2LCAxLCAyMTAsIDIxMiwgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4NCwgCi0gICAgMiwgMjE3LCA3NywgMTQ1LCA2LCAxLCAyMTAsIDI0NCwgMTQ1LCA2LCAxLCAyMzUsIDE4NCwgNCwgMjEwLCAxODMsIDE0NSwgCi0gICAgNiwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDIzNSwgMTg0LCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgCi0gICAgNiwgMSwgMjQ0LCA4MiwgMTQ1LCA2LCAxLCAyMzUsIDE0NiwgMTQ1LCA2LCAxLCAyMTksIDIyNywgMTQ1LCA2LCAxLCAyMTUsIAotICAgIDIwMiwgNjEsIDE0NSwgNiwgMSwgMjMzLCA3NSwgMjMwLCAyOSwgMTQ1LCA0LCAxLCAyNTMsIDE1OSwgMTQ1LCA0LCAxLCAKLSAgICAyNTEsIDExNywgMTQ1LCA0LCAxLCAyMTMsIDI1MywgMTQ1LCA0LCAxLCAyNDIsIDE4NSwgMTQ1LCA0LCAxLCAyNDcsIDE0MCwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCAzNCwgMTQ1LCA0LCAxLCAKLSAgICAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA0LCAxLCA3MywgCi0gICAgMTQ1LCA0LCAxLCAyNDcsIDE2MCwgMTQ1LCA0LCAxLCAyMzQsIDI0MCwgMTQ1LCA0LCAxLCAyMzIsIDE4NiwgMTQ1LCA0LCAxLCAKLSAgICAyMzAsIDI5LCAxNDUsIDQsIDEsIDIyOSwgMTkxLCAxNDUsIDQsIDEsIDIyNiwgMTg1LCAxNDUsIDQsIDEsIDIyNSwgNCwgCi0gICAgMTQ1LCA0LCAxLCAyMjIsIDIyNywgMTQ1LCA0LCAxLCAyMTksIDgzLCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgCi0gICAgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNDYsIDE0NSwgNCwgMSwgMjQxLCAxOTksIDE0NSwgNCwgMSwgMjI2LCAxMzUsIAotICAgIDE0NSwgNCwgMSwgMjI1LCAyMjEsIDE0NSwgNCwgMSwgMjE5LCAyMjgsIDE0NSwgNCwgMSwgMjE1LCAxNjcsIDE0NSwgNCwgMSwgCi0gICAgMjUwLCA3NSwgMTQ1LCA0LCAxLCAyMjAsIDEwMiwgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIAotICAgIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAyMTgsIDI1MywgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIAotICAgIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTg0LCAyLCAyMTcsIDc3LCAxNDUsIDQsIDEsIDIxMCwgCi0gICAgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIAotICAgIDE0NSwgNCwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyNDQsIDgyLCAxNDUsIDQsIDEsIAotICAgIDIzNSwgMTQ2LCAxNDUsIDQsIDEsIDIxOSwgMjI3LCAxNDUsIDQsIDEsIDIxNSwgMjAyLCA2MSwgMTQ1LCA0LCAxLCAyMzMsIAotICAgIDc1LCAyMzAsIDI5LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgNTIsIDEzMCwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDUyLCAKLSAgICAxMzAsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgOTEsIDcsIDYsIAotICAgIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxMTUsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ3LCAKLSAgICAyNTUsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMzUsIDI0LCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyMTAsIAotICAgIDE2MCwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1NCwgMTQzLCA3LCA2LCAKLSAgICAxLCAyMzIsIDUwLCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNTQsIDE0MywgNywgCi0gICAgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDAsIDcsIDYsIDEsIDE2MywgMjQyLCA2MCwgNywgNCwgMSwgCi0gICAgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAyMTcsIDc1LCAyMjUsIDEzMywgNywgNCwgMSwgMTYwLCAyLCAyMjgsIDUwLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgNywgNCwgMSwgMTQ0LCAyLCAxMjEsIDIyMiwgMjM0LCAyMzUsIAotICAgIDIxNSwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzUsIDcsIDIxOCwgNjUsIDQsIDEsIDIzNSwgMTQ0LCA1OCwgMSwgNiwgMjE0LCAKLSAgICAxMDUsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjE3LCAKLSAgICAyNTAsIDIxNywgNzcsIDgxLCA2LCAxLCAyNTQsIDE2NCwgODEsIDQsIDEsIDI1NCwgMTY0LCA4MSwgNiwgMSwgMjEzLCAxNzMsIAotICAgIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTA3LCA4MSwgNCwgMSwgMjQzLCAxMDcsIDgxLCA2LCAxLCAKLSAgICAyNDgsIDE5MSwgODEsIDQsIDEsIDI0OCwgMTkxLCA4MSwgNiwgMSwgMjQ1LCAxOTQsIDgxLCA0LCAxLCAyNDUsIDE5NCwgODEsIAotICAgIDYsIDEsIDIxOSwgMzMsIDgxLCA0LCAxLCAyMTksIDMzLCA4MSwgNiwgMSwgMjEwLCAxMDEsIDgxLCA0LCAxLCAyMTAsIDEwMSwgCi0gICAgODEsIDYsIDEsIDI0MSwgMjQ4LCA4MSwgNCwgMSwgMjQxLCAyNDgsIDgxLCA2LCAxLCAyMTYsIDE3NywgODEsIDQsIDEsIAotICAgIDIxNiwgMTc3LCA4MSwgNiwgMSwgMjQwLCAxMTYsIDgxLCA0LCAxLCAyNDAsIDExNiwgODEsIDYsIDEsIDIzNCwgMjI3LCA4MSwgCi0gICAgNCwgMSwgMjM0LCAyMjcsIDgxLCA2LCAxLCAyMzMsIDcyLCA4MSwgNCwgMSwgMjMzLCA3MiwgODEsIDYsIDEsIDIzMCwgMjMwLCAKLSAgICA4MSwgNCwgMSwgMjMwLCAyMzAsIDgxLCA2LCAxLCAyMjgsIDIzMywgODEsIDQsIDEsIDIyOCwgMjMzLCA4MSwgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDgxLCA0LCAxLCAyMzMsIDIzMywgODEsIDYsIDEsIDc2LCA4MSwgNCwgMSwgNzYsIDgxLCA2LCAxLCAyMjUsIAotICAgIDEwOCwgODEsIDQsIDEsIDIyNSwgMTA4LCA4MSwgNiwgMSwgMjIyLCAyMTEsIDgxLCA0LCAxLCAyMjIsIDIxMSwgODEsIDYsIAotICAgIDEsIDIxOSwgMTY1LCA4MSwgNCwgMSwgMjE5LCAxNjUsIDgxLCA2LCAxLCAyMTcsIDQxLCA4MSwgNCwgMSwgMjE3LCA0MSwgCi0gICAgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIDEyMSwgODEsIDQsIDEsIAotICAgIDI0NCwgMTIxLCA4MSwgNiwgMSwgMjM0LCAxMTIsIDgxLCA0LCAxLCAyMzQsIDExMiwgODEsIDYsIDEsIDIyNCwgMTYxLCA4MSwgCi0gICAgNCwgMSwgMjI0LCAxNjEsIDgxLCA2LCAxLCAyMjYsIDE3OCwgODEsIDQsIDEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjQ3LCAKLSAgICAyNTMsIDI1NCwgMTcwLCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDI1NCwgMTcwLCA4MSwgNiwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjU0LCAxOTYsIDgxLCA2LCAxLCAyNDksIDExNSwgMjQ1LCAxOTQsIDgxLCA0LCAxLCAyNDksIAotICAgIDExNSwgMjQ1LCAxOTQsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjM0LCAyMjcsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjM0LCAKLSAgICAyMjcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjI4LCAyMzMsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjI4LCAyMzMsIDgxLCA2LCAKLSAgICAxLCAyNDksIDExNSwgMjI4LCAyMzMsIDgxLCA0LCAxLCAyNDksIDExNSwgMjI4LCAyMzMsIDgxLCA2LCAxLCA1NSwgODEsIAotICAgIDIyNiwgMTc4LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE3OCwgODEsIDYsIDEsIDIyMSwgMjQ2LCA4MSwgNCwgMSwgMjIxLCAKLSAgICAyNDYsIDgxLCA2LCAxLCAyNDksIDEyOCwgMjIwLCA1NSwgODEsIDQsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNiwgMSwgCi0gICAgNTUsIDgxLCAyMjAsIDU1LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU1LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDc1LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDc1LCA4MSwgNiwgMSwgMjU0LCAxODIsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjU0LCAKLSAgICAxODIsIDIzNCwgMTE3LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDI0MSwgNDUsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgCi0gICAgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCA0NSwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCA0NSwgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMTYyLCA4MSwgNCwgMSwgNTUsIDgxLCAxNjIsIDgxLCA2LCAxLCAyMzMsIDE0OCwgMTYyLCA4MSwgNCwgMSwgMjMzLCAxNDgsIAotICAgIDE2MiwgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjE3LCA4MSwgNiwgMSwgCi0gICAgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyNTEsIDgxLCA2LCAxLCA1NSwgODEsIDI0MywgMTAyLCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDMsIDEwMiwgODEsIDYsIDEsIDU1LCA4MSwgMjQ3LCAxNjMsIDgxLCA0LCAxLCA1NSwgODEsIAotICAgIDI0NywgMTYzLCA4MSwgNiwgMSwgNTUsIDgxLCAyMjAsIDIyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDIyLCA4MSwgNiwgMSwgCi0gICAgNTUsIDIyNywgMjA4LCAyMjAsIDIyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjAsIDIyLCA4MSwgNiwgMSwgNTUsIAotICAgIDIyNywgMjA4LCAyMjksIDI3LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjksIDI3LCA4MSwgNiwgMSwgNTUsIDIyNywgCi0gICAgMjA4LCAyMjcsIDE0OCwgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjI3LCAxNDgsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMDgsIAotICAgIDIxMiwgMzcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIxMiwgMzcsIDgxLCAxNiwgMjM0LCAyNDYsIDgxLCAxNiwgMjMwLCAKLSAgICAyMzEsIDIyMiwgMjExLCA4MSwgMTYsIDIyNSwgMTA5LCAyMjIsIDIxMSwgODEsIDE2LCAyMTgsIDE0NywgODEsIDE2LCAyMTcsIAotICAgIDQyLCAyMjIsIDIxMSwgODEsIDE2LCAyMzQsIDExMywgMjIyLCAyMTEsIDgxLCAxNiwgMjIwLCAyMywgMjE5LCAxNjUsIDgxLCAKLSAgICA2LCAxLCAyNDksIDExNSwgMjIwLCA1NSwgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ5LCAxMTUsIAotICAgIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDI0MywgMTAyLCA4MSwgMzgsIDIyOCwgMjM0LCA0OCwgODEsIDM4LCAKLSAgICAyMTgsIDI0NywgMjUzLCAyMjQsIDgxLCAzOCwgMjE4LCAyNDcsIDIzMywgMjEsIDgxLCA2LCAxLCAyNTEsIDE5OSwgMjM0LCAKLSAgICAxMTcsIDgxLCA0LCAxLCAyNTEsIDE5OSwgMjM0LCAxMTcsIDgxLCA1NSwgMjI3LCAyMDgsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgODEsIDU1LCAyMjcsIDIwOCwgMjQ3LCAxOTcsIDIyNCwgMTMsIDc4LCA4MSwgNTUsIDIyNywgMjA4LCAyMzUsIDIzNywgMjI0LCAKLSAgICAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIxMywgMjQxLCAyNDcsIDE3MiwgODEsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAKLSAgICA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA4MSwgMjMwLCAxMjQsIDI0NywgMTcyLCA5OCwgNCwgMSwgMjU0LCAxMjMsIDk4LCAKLSAgICA0LCAxLCAyNTIsIDE1MiwgOTgsIDQsIDEsIDI0MywgMTA2LCA5OCwgNCwgMSwgMjQ3LCAxMjgsIDk4LCA0LCAxLCAyNDUsIAotICAgIDE1MCwgOTgsIDQsIDEsIDIxMywgMTYwLCA5OCwgNCwgMSwgMjEwLCA4OSwgOTgsIDQsIDEsIDIxNywgNjAsIDk4LCA0LCAxLCAKLSAgICAyMzUsIDI1NSwgOTgsIDQsIDEsIDIzNCwgMjM0LCA5OCwgNCwgMSwgMjMzLCA4MSwgOTgsIDQsIDEsIDIzMSwgMTg1LCA5OCwgCi0gICAgNCwgMSwgMjI5LCAxOTUsIDk4LCA0LCAxLCAyMjYsIDE5NiwgOTgsIDQsIDEsIDIyNiwgMTcsIDk4LCA0LCAxLCAyMTAsIDc4LCAKLSAgICA5OCwgNCwgMSwgMjIzLCAxNzEsIDk4LCA0LCAxLCAyMjEsIDI0MywgOTgsIDQsIDEsIDIxNywgNTAsIDk4LCA0LCAxLCAyMTQsIAotICAgIDE5MCwgOTgsIDQsIDEsIDIyNSwgMTQwLCA5OCwgNCwgMSwgMjM0LCAxMjEsIDk4LCA0LCAxLCAyNDIsIDI0MSwgOTgsIDQsIAotICAgIDEsIDIyNCwgNzMsIDk4LCA0LCAxLCAyMjAsIDIwLCA5OCwgNCwgMSwgMjUwLCA5NywgOTgsIDQsIDEsIDI1MSwgNywgOTgsIAotICAgIDQsIDEsIDIzNSwgMTAwLCA5OCwgNCwgMSwgMjUwLCA0MCwgOTgsIDQsIDEsIDI1MCwgMTQzLCA5OCwgNCwgMSwgMjExLCAKLSAgICAxNjMsIDk4LCA0LCAxLCAyMzUsIDExMSwgOTgsIDQsIDEsIDI0MiwgNDMsIDk4LCA0LCAxLCAyNDEsIDIzOCwgOTgsIDQsIDEsIAotICAgIDI0MSwgMTc1LCA5OCwgNCwgMSwgMjEyLCAyMiwgOTgsIDQsIDEsIDI0MiwgNCwgOTgsIDQsIDEsIDI0MSwgNjUsIDk4LCA0LCAKLSAgICAxLCAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjMyLCAyMTYsIDEwOCwgMSwgMTkxLCAyMTYsIDEwOCwgMSwgMjExLCA5OSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgOTgsIDIxNiwgMTA4LCAxLCAyMTEsIDg4LCAyMTYsIDEwOCwgMSwgMjExLCA4NiwgMjE2LCAKLSAgICAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAyMTEsIDgxLCAyMTYsIDEwOCwgMSwgCi0gICAgMjExLCA5NiwgMjE2LCAxMDgsIDEsIDIxMSwgOTMsIDIxNiwgMTA4LCAxLCAyMTEsIDk1LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA5NCwgMjE2LCAxMDgsIDEsIDIxMSwgMTIsIDIxNiwgMTA4LCAxLCAyMTEsIDkwLCAyMTYsIDEwOCwgMSwgMjExLCA3OSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDc5LCAyMTYsIDEwOCwgMSwgMjExLCA3NiwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgODQsIDIxNiwgMTA4LCAxLCAyNTIsIDMyLCAyNTUsIDE2LCAyMTEsIDg0LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODQsIDIxNiwgMTA4LCAxLCAyMTEsIDgzLCAyMTYsIDEwOCwgMSwgMjExLCAxMDMsIDIxNiwgMTA4LCAxLCAyMTEsIDc3LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzcsIDIxNiwgMTA4LCAxLCAyMTEsIDY2LCAyMTYsIDEwOCwgMSwgMjE1LCAKLSAgICAxMTUsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTEsIDgsIDIxNiwgMTA4LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgCi0gICAgMjU0LCAyMDcsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxMSwgNzUsIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDc0LCAyMTYsIDEwOCwgMSwgMjExLCA3MSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIAotICAgIDg1LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNjksIDIxNiwgMTA4LCAxLCAyMTEsIDY3LCAyMTYsIDEwOCwgMSwgCi0gICAgMjEwLCAyMTIsIDIxNiwgMTA4LCAxLCAyMTEsIDY0LCAyMTYsIDEwOCwgMSwgMjExLCA2MywgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgODcsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA4NywgMjE2LCAxMDgsIDEsIDI1MywgMTYzLCAyMTEsIDg3LCAyMTYsIAotICAgIDEwOCwgMSwgMjExLCA2MiwgMjE2LCAxMDgsIDEsIDIxMSwgNjAsIDIxNiwgMTA4LCAxLCAyMTEsIDYxLCAyMTYsIDEwOCwgMSwgCi0gICAgMjExLCA1OSwgMjE2LCAxMDgsIDEsIDIxMSwgNTgsIDIxNiwgMTA4LCAxLCAyMTEsIDk3LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA1NiwgMjE2LCAxMDgsIDEsIDIxMSwgNTQsIDIxNiwgMTA4LCAxLCAyMTEsIDUzLCAyMTYsIDEwOCwgMSwgMjExLCA1MiwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTcsIDM0LCAyMTEsIDUwLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA0OCwgMjE2LCAxMDgsIDEsIDIxMSwgNDcsIDIxNiwgMTA4LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDgsIDU4LCAxLCAyMzMsIAotICAgIDEyNiwgNzgsIDIxNiwgMTA4LCAyMjAsIDEzOCwgNzgsIDIxNiwgMTA4LCAxMTYsIDIzNSwgNjMsIDI5LCAzLCAyMzIsIDE1NSwgCi0gICAgMjksIDMsIDIzMCwgMTYwLCAyOSwgMywgMjIyLCAyMDksIDI5LCAzLCAyMTksIDU3LCAyOSwgMywgMjIwLCA2LCAyOSwgMywgCi0gICAgMjUxLCAyMDQsIDI5LCAzLCAyMTYsIDQxLCAyOSwgMywgMjQ5LCAyMzcsIDI5LCAzLCAyMjgsIDcyLCAyOSwgMywgMjI3LCAKLSAgICAxMzMsIDI5LCAzLCAyNDIsIDE4MCwgMjI3LCAwLCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTQzLCAyOSwgMywgCi0gICAgMjQ4LCAxMDQsIDI5LCAzLCAyMzUsIDY3LCAyOSwgMywgMjE2LCAxNTUsIDI5LCAzLCAyNTAsIDg1LCAyOSwgMywgMjI1LCAKLSAgICAxMjAsIDI5LCAzLCAyMjUsIDE1LCAyOSwgMywgMjQyLCAyNTUsIDI5LCAzLCAyNDIsIDI1MSwgMjksIDMsIDI0MiwgMjUyLCAKLSAgICAyOSwgMywgMjQyLCAyNTMsIDI5LCAzLCAyMTgsIDIyMywgMjksIDMsIDIxOCwgMTc5LCAyOSwgMywgMjE4LCAxOTIsIDI5LCAKLSAgICAzLCAyMTgsIDIyMiwgMjksIDMsIDIxOCwgMTk2LCAyOSwgMywgMjE4LCAxOTcsIDI5LCAzLCAyMTgsIDE4NCwgMjksIDMsIAotICAgIDI1MCwgMjEzLCAyOSwgMywgMjUwLCAxOTIsIDI5LCAzLCAyNTAsIDE5NCwgMjksIDMsIDI1MCwgMjEyLCAyOSwgMywgMjUwLCAKLSAgICAyMTAsIDI5LCAzLCAyNTAsIDIxMSwgMjksIDMsIDI1MCwgMTkzLCAyOSwgMywgMjA5LCAyNDMsIDI5LCAzLCAyMDksIDIyMSwgCi0gICAgMjksIDMsIDIwOSwgMjM0LCAyOSwgMywgMjA5LCAyNDIsIDI5LCAzLCAyMDksIDIzNywgMjksIDMsIDIwOSwgMjM4LCAyOSwgCi0gICAgMywgMjA5LCAyMjYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMTk1LCAyOSwgMywgMjUwLCAxOTcsIDI5LCAzLCAKLSAgICAyNTAsIDIwNywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDE5NiwgMjksIDMsIDIyMywgCi0gICAgMjM2LCAyOSwgMywgMjIzLCAyMjYsIDI5LCAzLCAyMjMsIDIzMiwgMjksIDMsIDIyMywgMjM1LCAyOSwgMywgMjIzLCAyMzMsIAotICAgIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIyMywgMjMxLCAyOSwgMywgMjMzLCAxNTksIDI5LCAzLCAyMzMsIDE1MSwgMjksIAotICAgIDMsIDIzMywgMTU0LCAyOSwgMywgMjMzLCAxNTgsIDI5LCAzLCAyMzMsIDE1NSwgMjksIDMsIDIzMywgMTU2LCAyOSwgMywgCi0gICAgMjMzLCAxNTIsIDI5LCAzLCAyMTEsIDEzMCwgMjksIDMsIDIxMSwgMTIwLCAyOSwgMywgMjExLCAxMjYsIDI5LCAzLCAyMTEsIAotICAgIDEyOSwgMjksIDMsIDIxMSwgMTI3LCAyOSwgMywgMjExLCAxMjgsIDI5LCAzLCAyMTEsIDEyNSwgMjksIDMsIDI0MiwgNzEsIAotICAgIDI5LCAzLCAyNDIsIDYyLCAyOSwgMywgMjQyLCA2NSwgMjksIDMsIDI0MiwgNzAsIDI5LCAzLCAyNDIsIDY3LCAyOSwgMywgCi0gICAgMjQyLCA2OCwgMjksIDMsIDI0MiwgNjQsIDM4LCAzMywgMSwgMjUyLCA3NSwgMzgsIDMzLCAxLCAyMTMsIDI1NSwgMzgsIDMzLCAKLSAgICAxLCAyNDIsIDIzNiwgMzgsIDMzLCAxLCAyNDgsIDkwLCAzOCwgMzMsIDEsIDIxMCwgNzQsIDM4LCAzMywgMSwgMjEwLCA5NCwgCi0gICAgMzgsIDMzLCAxLCAxNzYsIDM4LCAzMywgMSwgMjQ1LCAxNzQsIDM4LCAzMywgMSwgMjQ1LCAxNTksIDM4LCAzMywgMSwgMjQ1LCAKLSAgICAxNTAsIDM4LCAzMywgMSwgNzYsIDM4LCAzMywgMSwgMjI1LCAyMjEsIDM4LCAzMywgMSwgMjQ1LCA5MiwgMzgsIDMzLCAxLCAKLSAgICAyNDUsIDgyLCAzOCwgMzMsIDEsIDIxNywgMjIsIDM4LCAzMywgMSwgMTYyLCAzOCwgMzMsIDEsIDIxNSwgMTc4LCAzOCwgMzMsIAotICAgIDEsIDI1MCwgMTMxLCAzOCwgMzMsIDEsIDIyMCwgMTAyLCAzOCwgMzMsIDEsIDIyMCwgNjUsIDM4LCAzMywgMSwgMjQ0LCA4MiwgCi0gICAgMzgsIDMzLCAxLCAyNDUsIDgxLCAzOCwgMzMsIDEsIDYxLCAzOCwgMzMsIDEsIDIzNiwgNjAsIDM4LCAzMywgMSwgMjQ3LCAKLSAgICAxNjEsIDM4LCAzMywgMSwgMjMwLCAxNDAsIDIxNCwgMjA1LCAzOCwgMzMsIDEsIDIxMSwgNTksIDM4LCAzMywgMSwgMjEwLCAKLSAgICAyMTIsIDM4LCAzMywgMSwgMjM1LCAxODMsIDYxLCAzOCwgMzMsIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzgsIDMzLCAxLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxODMsIDI1MSwgMjQ5LCAyMTAsIDE4MywgNDQsIDI1NCwgCi0gICAgMTEwLCAyMTgsIDYwLCAyMzEsIDE1NCwgNDQsIDI1NCwgMTEwLCAyNDYsIDExOCwgMjE4LCA2MCwgMjMxLCAxNTQsIDQzLCAKLSAgICAyMTgsIDYwLCAxMjcsIDQ0LCAyMTgsIDYwLCAxMjcsIDQzLCAyNDYsIDExOCwgMjE4LCA2MCwgMTI3LCA0NCwgMjQ2LCAxMTgsIAotICAgIDIxOCwgNjAsIDEyNywgMjIzLCAxNTcsIDIzNSwgMjAyLCAyMzEsIDE1NCwgMjIzLCAxNTcsIDI0NiwgMTE4LCAyMzUsIDIwMiwgCi0gICAgMjMxLCAxNTQsIDI0NiwgMTE4LCAyMTUsIDI0MSwgMjMxLCAxNTQsIDQzLCAyMTUsIDI0MSwgMTI3LCA0NCwgMjE1LCAyNDEsIAotICAgIDEyNywgMjIzLCAxNTcsIDIxOCwgMjM0LCA0MywgMjIzLCAxNTcsIDIyNiwgMTk4LCAxMjcsIDQ0LCAyMjMsIDE1NywgMjI2LCAKLSAgICAxOTgsIDEyNywgMjQ1LCAyMTAsIDI0OSwgMTU4LCAyMjYsIDEzLCAyNDQsIDIyLCAyMjYsIDEzLCAyMjMsIDQ5LCAyNDQsIAotICAgIDIyLCAyMjYsIDEzLCAyNDAsIDE2NSwgMjQ2LCAxMTgsIDIyNiwgMjUxLCAyNDYsIDEwNCwgMjU0LCAxMTksIDIxNCwgMTUzLCAKLSAgICAyNTQsIDExOSwgMjQ2LCAxMTgsIDIyMiwgMjQ3LCAyNTQsIDEwOSwgNTIsIDIyNiwgMjQ4LCAyNDAsIDE2OCwgMjM1LCAxOTMsIAotICAgIDIzNSwgMjAxLCAyMjYsIDU5LCAyNTEsIDE1NCwgMjQwLCAxNjksIDIsIDI0OCwgMSwgMjE2LCA4OSwgMiwgMjIyLCAyMzQsIAotICAgIDQ4LCA0MywgMTIxLCAyMjYsIDUsIDEyNywgNDQsIDEyMSwgMjI2LCA1LCAxMjcsIDIxNiwgODksIDIsIDU5LCA0OCwgMjE2LCAKLSAgICA4OSwgMiwgNTksIDUxLCA0MywgNjcsIDI1MiwgMTQxLCAyLCAyMjQsIDcsIDQ0LCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgCi0gICAgMjE2LCAxNCwgNDMsIDE2MywgMTI3LCAyMTYsIDE0LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTc1LCA0MywgMTYzLCAxMjcsIAotICAgIDI1MSwgMTc1LCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4NywgMTA0LCAxMjcsIDQ0LCAyMTksIDE4NywgMTA0LCAxMjcsIAotICAgIDQzLCA1MiwgMjI2LCAzLCA0NCwgNTIsIDIyNiwgMywgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDEyMywgCi0gICAgNTksIDExNywgMTEzLCAxNzAsIDIyNCwgMTQwLCA5MiwgMjQ0LCAxMSwgNTksIDIyNCwgMTQwLCAyNDQsIDgxLCA1OSwgNzgsIAotICAgIDIyMywgNDksIDIyNCwgMTMsIDc4LCA2NywgMTgyLCAyMjIsIDIzNCwgMjI1LCAxMCwgMjExLCAyMDksIDIyMCwgMTM4LCAKLSAgICAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIxNSwgOTQsIDI0OSwgMjE5LCAyMjMsIDE1NywgMjQ3LCAxMjAsIDIyMywgMTU3LCAyNDksIAotICAgIDIxOSwgMjE1LCA5NCwgMjIwLCAxNTAsIDI0OCwgMjA2LCAyLCA0MywgMjQyLCAxMDgsIDI0OCwgMjA2LCAyLCA0NCwgMjQyLCAKLSAgICAxMDgsIDIxNSwgOTQsIDI0OCwgMjA1LCAyMTYsIDE0LCAxNjMsIDIyMSwgMTczLCA1MCwgMjE1LCA1OSwgMjQ4LCAxNTYsIAotICAgIDIxNiwgMTQzLCAyNDgsIDE1NiwgOSwgMzQsIDIyMywgNzYsIDksIDM0LCAyNTAsIDEwLCA5LCAzNCwgMjIxLCAxNzYsIDExMCwgCi0gICAgOSwgMzQsIDIyMSwgMTc2LCAxMDUsIDksIDM0LCAyMjEsIDE3NiwgMTU4LCA5LCAzNCwgMjI1LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDE2MywgOSwgMzQsIDIxNywgOTIsIDksIDM0LCAyMzQsIDMzLCAxMTAsIDksIDM0LCAyMzQsIDMzLCAxMDUsIDksIDM0LCAKLSAgICAyNDcsIDE3MCwgOSwgMzQsIDIyMSwgMTc5LCA5LCAzNCwgNCwgMTEwLCA5LCAzNCwgNCwgMTA1LCA5LCAzNCwgMjMzLCA5NywgCi0gICAgMTEwLCA5LCAzNCwgMjMzLCA5NywgMTA1LCA5LCAzNCwgMjMzLCA5NywgMTU4LCA5LCAzNCwgMjMzLCA5NywgMTYxLCA5LCAKLSAgICAzNCwgMjE5LCA2OCwgOSwgMzQsIDIxNiwgMTQ1LCA5LCAzNCwgMjE5LCA2NiwgMTEwLCA5LCAzNCwgMjE5LCA2NiwgMTA1LCAKLSAgICA5LCAzNCwgMjQxLCAyMjgsIDExMCwgOSwgMzQsIDI0MSwgMjI4LCAxMDUsIDksIDM0LCAyNDIsIDE1LCA5LCAzNCwgMjIzLCAKLSAgICAxNDcsIDksIDM0LCAyNTAsIDgyLCA5LCAzNCwgMjE4LCAzNywgOSwgMzQsIDIzMCwgMTI4LCA5LCAzNCwgMjQ4LCA4OCwgOSwgCi0gICAgMzQsIDIzMCwgMTIwLCA5LCAzNCwgMjUwLCAyNSwgOSwgMzQsIDIxMiwgNDEsIDExMCwgOSwgMzQsIDIxMiwgNDEsIDEwNSwgCi0gICAgOSwgMzQsIDI0NCwgOTYsIDksIDM0LCAyMjUsIDIzMiwgMTEwLCA5LCAzNCwgMjI1LCAyMzIsIDEwNSwgOSwgMzQsIDIxOSwgCi0gICAgMTYwLCAxNjMsIDIxNSwgMjM2LCAyMTUsIDE4OCwgOSwgMzQsIDI0OSwgMTQ1LCA5LCAzNCwgMjQ3LCAxMzYsIDksIDM0LCAKLSAgICAyMzUsIDEzNywgOSwgMzQsIDI1MSwgMTk4LCA2NCwgMjQ5LCAyNTAsIDksIDM0LCAyNDUsIDE1LCA5LCAzNCwgMjE4LCAyNDksIAotICAgIDExMCwgOSwgMzQsIDIxOCwgMjQ5LCAxMDUsIDksIDM0LCAyNTIsIDE1NCwgOSwgMzQsIDIxOSwgMTY3LCA5LCAzNCwgMjUxLCAKLSAgICA2MywgMjE5LCAxNjcsIDksIDM0LCAyMjksIDkwLCAxMTAsIDksIDM0LCAyMjksIDkwLCAxMDUsIDksIDM0LCAyMjksIDkwLCAKLSAgICAxNTgsIDksIDM0LCAyMjksIDkwLCAxNjEsIDksIDM0LCAyMzEsIDQ2LCA5LCAzNCwgMjIwLCA1NywgOSwgMzQsIDIyMywgCi0gICAgMTUzLCA5LCAzNCwgMjQ1LCAzNywgOSwgMzQsIDIyNiwgMjA5LCA5LCAzNCwgMjUxLCAxMzMsIDExMCwgOSwgMzQsIDI1MSwgCi0gICAgMTMzLCAxMDUsIDksIDM0LCAyMzEsIDg2LCA5LCAzNCwgMjMwLCAxMjMsIDksIDM0LCAyNDIsIDE0MCwgMTEwLCA5LCAzNCwgCi0gICAgMjQyLCAxNDAsIDEwNSwgOSwgMzQsIDI0MiwgMTQwLCAxNTgsIDksIDM0LCAyMTYsIDEwNiwgOSwgMzQsIDI0OSwgMjQ5LCA5LCAKLSAgICAzNCwgMjEyLCA5LCAxMTAsIDksIDM0LCAyMTIsIDksIDEwNSwgOSwgMzQsIDI1MSwgNjMsIDIyMSwgMTcwLCA5LCAzNCwgCi0gICAgMjE5LCAxNjAsIDI0MCwgMjQ4LCA5LCAzNCwgMjQwLCAyNDgsIDksIDM0LCAyNTEsIDYzLCAyMTksIDIsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMjAsIDUyLCA5LCAzNCwgMjQ0LCAzMiwgOSwgMzQsIDI1MSwgNjMsIDI1MCwgMjI4LCA5LCAzNCwgMjE5LCAxNjAsIAotICAgIDIxMiwgNTcsIDksIDM0LCAyMTIsIDU4LCAxMTAsIDksIDM0LCAyMTIsIDU4LCAxMDUsIDksIDM0LCAyNTAsIDI3LCA5LCAzNCwgCi0gICAgMjUxLCA2MywgMjQyLCAxNjYsIDksIDM0LCAxOTksIDExMCwgOSwgMzQsIDE5OSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjMyLCAKLSAgICAxMzcsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDg4LCA5LCAzNCwgMjMwLCAxMTksIDExMCwgOSwgMzQsIDIzMCwgMTE5LCAxMDUsIAotICAgIDksIDM0LCAyMjMsIDE1OSwgOSwgMzQsIDI1MSwgMjA3LCA5LCAzNCwgMjUxLCA2MywgMjE3LCA1NiwgMjMzLCA1MiwgOSwgCi0gICAgMzQsIDI1MSwgNjMsIDIzMywgNTMsIDksIDM0LCAyNTEsIDYzLCAyMTEsIDIzOSwgOSwgMzQsIDI1MSwgNjMsIDI0NCwgNDYsIAotICAgIDksIDM0LCAyNDUsIDIxOCwgMTEwLCA5LCAzNCwgMjQ1LCAyMTgsIDEwNSwgOSwgMzQsIDI0NSwgMjE4LCAxNTgsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDUsIDIxNywgOSwgMzQsIDI0MSwgMjM1LCA5LCAzNCwgMjUxLCA2MywgMjQwLCAyNDUsIDksIDM0LCAyNTEsIAotICAgIDE5NCwgOSwgMzQsIDI0MiwgMjIyLCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA5MCwgOSwgMzQsIDI1MSwgNjMsIDI1MSwgMjM3LCAKLSAgICA5LCAzNCwgMjUxLCA2MywgMjIyLCAxLCA5LCAzNCwgMjE5LCAxNjAsIDIxMiwgMiwgOSwgMzQsIDIxOSwgMTYwLCAyMTEsIAotICAgIDQxLCA5LCAzNCwgMjUxLCA2MywgMjQzLCAyNDQsIDksIDM0LCAyMzUsIDE0MywgMjQ1LCA0MSwgOSwgMzQsIDI1MSwgNjMsIAotICAgIDI0NSwgNDEsIDksIDM0LCAyMzUsIDE0MywgMjE2LCAxNSwgOSwgMzQsIDI1MSwgNjMsIDIxNiwgMTUsIDksIDM0LCAyMzUsIAotICAgIDE0MywgMjQ2LCA5NiwgOSwgMzQsIDI1MSwgNjMsIDI0NiwgOTYsIDksIDM0LCAyMTUsIDkxLCA5LCAzNCwgMjM1LCAxNDMsIAotICAgIDIxNSwgOTEsIDksIDM0LCAyNTEsIDYzLCAyMTUsIDkxLCA2MCwgMzQsIDExMCwgNjAsIDM0LCAyMzIsIDIxMywgNjAsIDM0LCAKLSAgICAyNDcsIDEyMCwgNjAsIDM0LCAyMTksIDk1LCA2MCwgMzQsIDIyMSwgMTc1LCA2MCwgMzQsIDEwMywgNjAsIDM0LCAxMDUsIAotICAgIDYwLCAzNCwgMjMyLCAyMzcsIDYwLCAzNCwgMjMxLCAxODUsIDYwLCAzNCwgMjMzLCAzMywgNjAsIDM0LCAyNDUsIDEyOSwgCi0gICAgNjAsIDM0LCAxOTUsIDYwLCAzNCwgMTI0LCAyNTEsIDE2MywgNjAsIDM0LCAyNDksIDE0NywgNjAsIDM0LCAyNDAsIDExMSwgCi0gICAgNjAsIDM0LCAyMTcsIDkyLCA2MCwgMzQsIDIwNCwgMjUxLCAxNjMsIDYwLCAzNCwgMjM0LCAzMiwgNjAsIDM0LCAyMjQsIAotICAgIDIyNCwgNjAsIDM0LCAyMTEsIDIwMiwgNjAsIDM0LCAyMTgsIDI0MywgNjAsIDM0LCA0NCwgMjA0LCAyNTEsIDE2MywgNjAsIAotICAgIDM0LCAyNDEsIDE3NiwgMjQ1LCAxNDUsIDYwLCAzNCwgMjE2LCAyNDcsIDYwLCAzNCwgMjQ3LCAxNzAsIDYwLCAzNCwgMjIxLCAKLSAgICAxNzksIDYwLCAzNCwgMjUwLCAxMCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyNTQsIDIxNSwgNjAsIDM0LCAyMzAsIAotICAgIDExMCwgNjAsIDM0LCAyNDUsIDE0NSwgNjAsIDM0LCAyNDUsIDIyMywgNjAsIDM0LCAyMjEsIDIwMCwgNjAsIDM0LCAyNDIsIAotICAgIDE3NCwgNjAsIDM0LCAyNDIsIDE3NSwgMjE5LCA4MSwgNjAsIDM0LCAyNDUsIDQwLCA2MCwgMzQsIDI1MSwgMjQ4LCA2MCwgCi0gICAgMzQsIDIxMSwgMjIxLCA2MCwgMzQsIDI1MCwgMTAxLCA2MCwgMzQsIDIyMiwgMTk2LCA2MCwgMzQsIDIzNSwgMjUxLCA2MCwgCi0gICAgMzQsIDIxOSwgNzksIDYwLCAzNCwgMjMzLCA5NiwgNjAsIDM0LCAyNDksIDE1NiwgNjAsIDM0LCAyMTgsIDIzNywgNjAsIDM0LCAKLSAgICAyMzAsIDExNSwgNjAsIDM0LCAyMjIsIDIyNCwgNjAsIDM0LCAyMTEsIDIwNiwgNjAsIDM0LCAyMjYsIDE5MCwgNjAsIDM0LCAKLSAgICAyMTUsIDk3LCA2MCwgMzQsIDI0NiwgODAsIDYwLCAzNCwgMjE5LCAyNTEsIDIxNiwgMTQ1LCA2MCwgMzQsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDEwLCA2MCwgMzQsIDE5OSwgMjE4LCAxMDgsIDYwLCAzNCwgMTEzLCAyNDIsIDEwLCA2MCwgMzQsIDIyMCwgMCwgNjAsIAotICAgIDM0LCAyNTEsIDE2OSwgNjAsIDM0LCAyMTksIDY1LCA2MCwgMzQsIDI1MSwgMTM3LCA2MCwgMzQsIDIxOCwgMTM4LCA2MCwgCi0gICAgMzQsIDI0MSwgMjI3LCA2MCwgMzQsIDI0MiwgMjgsIDYwLCAzNCwgMjQ3LCAxMjMsIDYwLCAzNCwgMjQyLCAxNSwgNjAsIDM0LCAKLSAgICAyNTEsIDE1NCwgNjAsIDM0LCAyMjMsIDE0NywgNjAsIDM0LCAyMjEsIDE4NywgNjAsIDM0LCAyNDcsIDE5OSwgNjAsIDM0LCAKLSAgICAyNTMsIDE2OCwgNjAsIDM0LCAyMTgsIDIzNCwgNjAsIDM0LCAyMjgsIDUxLCA2MCwgMzQsIDIxOCwgMzcsIDYwLCAzNCwgCi0gICAgMjIxLCAyMTEsIDYwLCAzNCwgMjMwLCAxMjgsIDYwLCAzNCwgMjE1LCAyMzUsIDYwLCAzNCwgMjMzLCAxMjIsIDYwLCAzNCwgCi0gICAgMjE4LCAxMjksIDYwLCAzNCwgMjQ4LCA4OCwgNjAsIDM0LCAyMTIsIDIxLCA2MCwgMzQsIDI0NywgMTQ2LCAyMjgsIDUxLCAKLSAgICA2MCwgMzQsIDI0OSwgMjE1LCA2MCwgMzQsIDI0MywgMjIyLCA2MCwgMzQsIDI1MCwgMjEsIDYwLCAzNCwgMjE4LCAxNDIsIAotICAgIDYwLCAzNCwgMjEyLCA0MCwgNjAsIDM0LCAyNDQsIDk2LCA2MCwgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjQ0LCAxNjEsIDYwLCAKLSAgICAzNCwgNTIsIDIxMSwgMTc4LCA2MCwgMzQsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA2MCwgMzQsIDIxOSwgODksIDYwLCAKLSAgICAzNCwgMjQ0LCAxNzEsIDYwLCAzNCwgMjQ5LCAxNDUsIDYwLCAzNCwgMjQ3LCAxMzYsIDYwLCAzNCwgMjI0LCAxNzksIDYwLCAKLSAgICAzNCwgMjM1LCAxMzcsIDYwLCAzNCwgMjMxLCA2NywgNjAsIDM0LCAyMTYsIDg4LCA2MCwgMzQsIDIxNywgMjQ1LCA2MCwgMzQsIAotICAgIDIzMiwgMjMxLCA2MCwgMzQsIDIxNCwgMTMxLCA2MCwgMzQsIDI0NCwgMTIwLCA2MCwgMzQsIDI1MSwgMTk4LCA2NCwgMjQ5LCAKLSAgICAyNTAsIDYwLCAzNCwgMjE5LCAxODgsIDYwLCAzNCwgMjQ2LCAxMTgsIDIxNiwgMjQyLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgCi0gICAgMzQsIDIxOSwgMTAzLCA2MCwgMzQsIDI0NywgMTg3LCA2MCwgMzQsIDI0NSwgMTUsIDYwLCAzNCwgMjE5LCA1LCA2MCwgMzQsIAotICAgIDc0LCA2MCwgMzQsIDIxOCwgMTMxLCA2MCwgMzQsIDIxOCwgMjQ4LCA2MCwgMzQsIDIxNSwgMjU1LCA2MCwgMzQsIDI0MiwgCi0gICAgMTQ3LCA2MCwgMzQsIDI1MCwgMjE4LCA2MCwgMzQsIDIxOCwgMTYwLCA2MCwgMzQsIDI1MiwgMTU0LCA2MCwgMzQsIDIyMywgCi0gICAgMzEsIDYwLCAzNCwgMjE5LCAxNjcsIDYwLCAzNCwgMjM1LCAxMzAsIDYwLCAzNCwgMjI5LCA4OSwgNjAsIDM0LCAyMjAsIDU3LCAKLSAgICA2MCwgMzQsIDI0NCwgMTQ5LCA2MCwgMzQsIDIyNiwgMjA5LCA2MCwgMzQsIDI1NCwgMTE4LCA2MCwgMzQsIDIyNSwgMjksIAotICAgIDYwLCAzNCwgMjQ1LCAyMjcsIDYwLCAzNCwgMjUxLCAxMzIsIDYwLCAzNCwgMjMxLCA4NiwgNjAsIDM0LCAyMzAsIDE4MywgCi0gICAgNjAsIDM0LCAyMjAsIDE1NiwgNjAsIDM0LCAyNTMsIDI1MiwgNjAsIDM0LCAyMzAsIDEyMywgNjAsIDM0LCAyMTYsIDE5LCAKLSAgICA2MCwgMzQsIDIyNiwgMTY1LCA2MCwgMzQsIDI1MSwgMjAxLCA2MCwgMzQsIDIxOCwgMTI3LCA2MCwgMzQsIDI0OSwgMjI1LCAKLSAgICA2MCwgMzQsIDI0MiwgMTM5LCA2MCwgMzQsIDIxNiwgMTA2LCA2MCwgMzQsIDIzNSwgMjE3LCA2MCwgMzQsIDI1MSwgMjExLCAKLSAgICA2MCwgMzQsIDIxMiwgNTgsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0OSwgMjQ5LCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIAotICAgIDE3MCwgNjAsIDM0LCAyNDAsIDI0OCwgNjAsIDM0LCAyMTksIDIsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDcyLCAKLSAgICA2MCwgMzQsIDIyNSwgNzMsIDYwLCAzNCwgMjUyLCAxNzQsIDYwLCAzNCwgMjIwLCA1MiwgNjAsIDM0LCAyMjMsIDExMCwgNjAsIAotICAgIDM0LCAyMjIsIDEyNiwgNjAsIDM0LCAyNDQsIDMyLCA2MCwgMzQsIDI1MSwgMjAwLCA2MCwgMzQsIDI1MCwgMjI4LCA2MCwgCi0gICAgMzQsIDI1MSwgMjI2LCA2MCwgMzQsIDIzMCwgMTI1LCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAyNywgNjAsIDM0LCAKLSAgICAyMTEsIDIzNiwgNjAsIDM0LCAyNDcsIDE4MCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE2NiwgNjAsIDM0LCAKLSAgICAyMzIsIDEzNywgNjAsIDM0LCAyNDMsIDg4LCA2MCwgMzQsIDIzMCwgMTE4LCA2MCwgMzQsIDIxOSwgOTQsIDYwLCAzNCwgCi0gICAgMjE5LCAyNTEsIDIxNywgNzYsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMywgMTU5LCA2MCwgMzQsIDI1MSwgMjA3LCA2MCwgMzQsIAotICAgIDIxMSwgMTk3LCA2MCwgMzQsIDI0NCwgMTkwLCA2MCwgMzQsIDIzMywgNTIsIDYwLCAzNCwgMjE3LCA1NiwgMjMzLCA1MiwgCi0gICAgNjAsIDM0LCAyMzMsIDQ4LCA2MCwgMzQsIDIxOSwgMzAsIDYwLCAzNCwgMjMzLCA1MywgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIAotICAgIDM0LCAyNDQsIDQ2LCA2MCwgMzQsIDI0NSwgMjE3LCA2MCwgMzQsIDI0MSwgMjM1LCA2MCwgMzQsIDI0NCwgMCwgNjAsIDM0LCAKLSAgICAyNDAsIDI0NSwgNjAsIDM0LCAyNTEsIDE5NCwgNjAsIDM0LCAyMTcsIDYzLCA2MCwgMzQsIDI0MiwgMzQsIDYwLCAzNCwgCi0gICAgMjQ0LCAxMTMsIDYwLCAzNCwgMjIyLCAyOCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjAsIDYwLCAzNCwgMjQyLCAyMjIsIAotICAgIDYwLCAzNCwgMjQ0LCA5MCwgNjAsIDM0LCAyNTEsIDIzNywgNjAsIDM0LCAyMjIsIDEsIDYwLCAzNCwgMjQ4LCA3NCwgNjAsIAotICAgIDM0LCAyMTIsIDIsIDYwLCAzNCwgMjQxLCAyMTAsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5MiwgNjAsIDM0LCAKLSAgICAyNTEsIDIyMSwgNjAsIDM0LCAyNDUsIDE1NSwgNjAsIDM0LCAyNDMsIDI0NCwgNjAsIDM0LCAyMTUsIDIwOSwgNjAsIDM0LCAKLSAgICAyNDYsIDgyLCA2MCwgMzQsIDIyMywgMTQxLCA2MCwgMzQsIDIyOCwgNTMsIDYwLCAzNCwgMjQ1LCA0MSwgNjAsIDM0LCAyMTYsIAotICAgIDE1LCA2MCwgMzQsIDI0NiwgOTYsIDYwLCAzNCwgMjE1LCA5MSwgNjAsIDM0LCAyNDQsIDQ4LCAxMDksIDI0OCwgMzcsIDEzNSwgCi0gICAgNDMsIDIxNiwgNDIsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgNzcsIDIxNiwgNDIsIDUxLCAxMDksIDI0OCwgMzcsIAotICAgIDEzNSwgNDMsIDIxNiwgNDIsIDIzMCwgMjI0LCAyMiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgCi0gICAgMjMwLCAyMjQsIDIyLCA1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDI0MywgMjI5LCAyMTgsIDEwLCAxMDksIDI0OCwgMzcsIAotICAgIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDQ4LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDUxLCAKLSAgICAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDIzMywgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIAotICAgIDExLCAyNDMsIDI0MywgMjE0LCAxNjAsIDIzMywgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgCi0gICAgMjE0LCAxNjAsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDIzMiwgMTA4LCAyMzMsIAotICAgIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjI2LCAxMjIsIDEwOSwgMjE5LCAxOCwgMTA5LCAyNDksIDIxOSwgMTA5LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDI0NywgMTc3LCA3OCwgMjM1LCAxMzEsIDIzNSwgMjM2LCAyMTgsIDE1OSwgODcsIDEwOSwgMjM1LCAKLSAgICAxNTgsIDc4LCAxMDksIDI0OSwgMjUyLCA3OCwgMTA5LCA1NCwgMjEwLCA4NiwgNDMsIDI1NCwgMTEwLCAxMjcsIDQ0LCAyNTQsIAotICAgIDExMCwgMTI3LCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgNDMsIDI0OSwgMTYxLCAKLSAgICAxMjcsIDQ0LCAyNDksIDE2MSwgMTI3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgNDMsIAotICAgIDg1LCAyMzMsIDIwLCAxMjcsIDQ0LCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDIzNywgNzgsIDI0MywgMzIsIDc4LCA0MywgCi0gICAgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDMsIDcxLCAyMzMsIDIwLCAxMjcsIDQ0LCAKLSAgICA3MSwgMjMzLCAyMCwgMTI3LCA0MywgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0NCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0MywgNzEsIDQyLCAxMjcsIDQ0LCA3MSwgNDIsIDEyNywgMjEyLCAzNiwgMjQ4LCAxNTYsIDIyMywgNDksIDUyLCAKLSAgICAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCA1MiwgMjI0LCAxOTEsIDIyMywgMjU0LCA3OCwgMTIxLCA1MiwgMjI0LCAxOTEsIAotICAgIDIyMywgMjU0LCA3OCwgMjI0LCAyMzcsIDE2NCwgMjQ0LCAxOTAsIDI0MiwgOCwgMjI3LCAxOTgsIDExMCwgMjQyLCA4LCAKLSAgICAyMjcsIDE5OCwgMTA1LCAyNDIsIDgsIDIyNywgMTk4LCAxNTgsIDI0MiwgOCwgMjI3LCAxOTgsIDE2MSwgMjQyLCA4LCAyMjcsIAotICAgIDE5OCwgMTg5LCAyNDIsIDgsIDIyNywgMTk4LCAxOTQsIDI0MiwgOCwgMjI3LCAxOTgsIDE5OCwgMjQyLCA4LCAyMjcsIDE5OCwgCi0gICAgMTk1LCAyNDIsIDgsIDIyNywgMTk4LCAyMDAsIDEwOSwgMjMzLCAzLCAxMzgsIDc4LCAxMDksIDIyMiwgMjI4LCAxMzgsIDc4LCAKLSAgICAxMDksIDI0OCwgNDQsIDEzOCwgNzgsIDEwOSwgMjQ1LCAxMjgsIDEzOCwgNzgsIDI0LCAyMTksIDE1NSwgNTksIDEzOCwgNzgsIAotICAgIDI0LCA1MiwgNTksIDEzOCwgNzgsIDIxMiwgMzIsIDI0OCwgMTU2LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDc4LCA2NywgCi0gICAgMjM0LCAyMzMsIDIyMywgNzcsIDIsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAxNjQsIAotICAgIDIxNCwgMTYwLCAyNDIsIDI3LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDIsIDIxMywgMTM1LCAyMTksIDMxLCAxNjQsIDIxNCwgCi0gICAgMTYwLCAyNDIsIDI3LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgMjMyLCAxMDgsIDI0MiwgMjcsIDM3LCAyMjQsIAotICAgIDIzNywgNzgsIDEwOSwgMjE3LCAzLCAyMzIsIDIxNCwgMjQ0LCAxNDYsIDIyMCwgMTM4LCA4NywgMjQyLCA4LCAyMjcsIDE5OCwgCi0gICAgMjE2LCAyNDcsIDI0MiwgOCwgMjI3LCAxOTgsIDIxNSwgNzMsIDI0MiwgOCwgMjI3LCAxOTgsIDIxNiwgMTYyLCA2NywgMTA5LCAKLSAgICAyMzUsIDE1OCwgNzgsIDIzMSwgMTQwLCA3OCwgMjI1LCAyNTUsIDI1NCwgMTQwLCA3OCwgMTA5LCA0NSwgMjM1LCAyMzgsIAotICAgIDEwOSwgMTYzLCAyNDQsIDEwNiwgMjE5LCAxOCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCA3MywgCi0gICAgMTQxLCAxLCA3MywgMTQxLCAxLCA0LCA3MCwgMTQxLCAxLCA3MCwgMTQxLCAxLCA0LCA3NSwgMTQxLCAxLCA3NSwgMTQxLCAxLCAKLSAgICA0LCA3NiwgMTQxLCAxLCA3NiwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxMzUsIDE0MSwgMSwgMjM0LCA5MiwgMTQxLCAKLSAgICAxLCAyNDIsIDIxNCwgMTQxLCAxLCAyMzMsIDIxNywgMTQxLCAxLCAyNDIsIDExMywgMTQxLCAxLCAyMzQsIDE4MiwgMTQxLCAKLSAgICAxLCAyNDMsIDYyLCAxNDEsIDEsIDIzNCwgMjgsIDE0MSwgMSwgMjQyLCAxNzQsIDE0MSwgMSwgMjA2LCAxNDEsIDEsIDIxMCwgCi0gICAgMTE2LCAxNDEsIDEsIDIxOSwgMTkxLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4MywgMTQxLCAxLCAyMTAsIDEzLCAKLSAgICAxNDEsIDEsIDIyMSwgMTgxLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA1OCwgMTQxLCAxLCAyMTAsIDIzLCAxNDEsIAotICAgIDEsIDIxNywgMTA1LCAxNDEsIDEsIDI0OCwgMjIxLCAxNDEsIDEsIDIxNiwgMTE3LCAxNDEsIDEsIDI0OCwgMywgMTQxLCAxLCAKLSAgICA0LCAyMTUsIDExOCwgMTQxLCAxLCAyMTUsIDExOCwgMTQxLCAxLCAyNDYsIDc4LCAxNDEsIDEsIDIxNywgMjIsIDE0MSwgMSwgCi0gICAgMjQ4LCA5MCwgMTQxLCAxLCAxMTEsIDE0MSwgMSwgMjQ3LCAxNDUsIDE0MSwgMSwgMTk3LCAxNDEsIDEsIDIyOCwgMjMzLCAKLSAgICAxNDEsIDEsIDIyNywgMjM3LCAxNDEsIDEsIDIyOSwgMTA3LCAxNDEsIDEsIDIyOCwgNzQsIDE0MSwgMSwgMTYyLCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAxNDEsIDEsIDE5MCwgMTQxLCAxLCAyNDEsIDE4MCwgMTQxLCAxLCAyNTIsIDYsIDE0MSwgMSwgMjI1LCAKLSAgICAxMDgsIDE0MSwgMSwgMjQwLCAyMjIsIDE0MSwgMSwgMjUxLCAxMjUsIDE0MSwgMSwgMjI0LCAxNTAsIDE0MSwgMSwgMjQxLCAKLSAgICAyMzgsIDE0MSwgMSwgMjUyLCA3NSwgMTQxLCAxLCAyMjUsIDIyMSwgMTQxLCAxLCAyNDEsIDY4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjA1LCAxNDEsIDEsIDIyNSwgMTYsIDE0MSwgMSwgMTg0LCAxNDEsIDEsIDIzMCwgMjMwLCAxNDEsIDEsIDIzMCwgMTAyLCAKLSAgICAxNDEsIDEsIDIzMSwgOTEsIDE0MSwgMSwgMjMwLCAxNjEsIDE0MSwgMSwgNCwgMTkxLCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAKLSAgICA0LCAyMTAsIDIxMiwgMTQxLCAxLCAyMTAsIDIxMiwgMTQxLCAxLCA0LCAyMTAsIDI0NCwgMTQxLCAxLCAyMTAsIDI0NCwgCi0gICAgMTQxLCAxLCAyMDUsIDE0MSwgMSwgMjIzLCAzNSwgMTQxLCAxLCAyMjIsIDE0MCwgMTQxLCAxLCAyMjMsIDEyOCwgMTQxLCAxLCAKLSAgICAyMjIsIDIxMSwgMTQxLCAxLCA0LCAyMTIsIDY1LCAxNDEsIDEsIDIxMiwgNjUsIDE0MSwgMSwgMjExLCAyNTAsIDE0MSwgMSwgCi0gICAgMjEyLCAyMiwgMTQxLCAxLCAyMTEsIDIyNywgMTQxLCAxLCAyMzAsIDI1LCAxNDEsIDEsIDIxMiwgMTE2LCAxNDEsIDEsIDQsIAotICAgIDE3NiwgMTQxLCAxLCA0LCAyMzQsIDE4MiwgMzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDM4LCAyMzQsIAotICAgIDIwMSwgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAyMzQsIDIwMSwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAyMzQsIDIwMSwgCi0gICAgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAxNDEsIDIzNSwgMTU4LCA3OCwgMTQxLCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCAKLSAgICAxNDEsIDI0NywgMjIxLCAyMTAsIDIyNSwgMjM0LCAyMDEsIDUyLCAyNDAsIDE2OCwgNTYsIDEsIDQsIDYxLCA1NiwgMSwgNjEsIAotICAgIDU2LCAxLCA0LCA3MywgNTYsIDEsIDczLCA1NiwgMSwgNCwgNzAsIDU2LCAxLCA3MCwgNTYsIDEsIDQsIDc1LCA1NiwgMSwgCi0gICAgNzUsIDU2LCAxLCA0LCA3NiwgNTYsIDEsIDc2LCA1NiwgMSwgMTc2LCA1NiwgMSwgMjQzLCAxMzUsIDU2LCAxLCAyMzQsIDkyLCAKLSAgICA1NiwgMSwgMjQyLCAyMTQsIDU2LCAxLCAyMzMsIDIxNywgNTYsIDEsIDI0MiwgMTEzLCA1NiwgMSwgMjM0LCAxODIsIDU2LCAKLSAgICAxLCAyNDMsIDYyLCA1NiwgMSwgMjM0LCAyOCwgNTYsIDEsIDI0MiwgMTc0LCA1NiwgMSwgMjA2LCA1NiwgMSwgMjEwLCAxMTYsIAotICAgIDU2LCAxLCAyMTksIDE5MSwgNTYsIDEsIDIxMCwgNDQsIDU2LCAxLCAyMTgsIDgzLCA1NiwgMSwgMjEwLCAxMywgNTYsIDEsIAotICAgIDIyMSwgMTgxLCA1NiwgMSwgMjEwLCA5NCwgNTYsIDEsIDIxOSwgNTgsIDU2LCAxLCAyMTAsIDIzLCA1NiwgMSwgMjE3LCAKLSAgICAxMDUsIDU2LCAxLCAyNDgsIDIyMSwgNTYsIDEsIDIxNiwgMTE3LCA1NiwgMSwgMjQ4LCAzLCA1NiwgMSwgNCwgMjE1LCAxMTgsIAotICAgIDU2LCAxLCAyMTUsIDExOCwgNTYsIDEsIDI0NiwgNzgsIDU2LCAxLCAyMTcsIDIyLCA1NiwgMSwgMjQ4LCA5MCwgNTYsIDEsIAotICAgIDExMSwgNTYsIDEsIDI0NywgMTQ1LCA1NiwgMSwgMTk3LCA1NiwgMSwgMjI4LCAyMzMsIDU2LCAxLCAyMjcsIDIzNywgNTYsIAotICAgIDEsIDIyOSwgMTA3LCA1NiwgMSwgMjI4LCA3NCwgNTYsIDEsIDE2MiwgNTYsIDEsIDI1MiwgMTkxLCA1NiwgMSwgMTkwLCA1NiwgCi0gICAgMSwgMjQxLCAxODAsIDU2LCAxLCAyNTIsIDYsIDU2LCAxLCAyMjUsIDEwOCwgNTYsIDEsIDI0MCwgMjIyLCA1NiwgMSwgMjUxLCAKLSAgICAxMjUsIDU2LCAxLCAyMjQsIDE1MCwgNTYsIDEsIDI0MSwgMjM4LCA1NiwgMSwgMjUyLCA3NSwgNTYsIDEsIDIyNSwgMjIxLCAKLSAgICA1NiwgMSwgMjQxLCA2OCwgNTYsIDEsIDI1MSwgMjA1LCA1NiwgMSwgMjI1LCAxNiwgNTYsIDEsIDE4NCwgNTYsIDEsIDIzMCwgCi0gICAgMjMwLCA1NiwgMSwgMjMwLCAxMDIsIDU2LCAxLCAyMzEsIDkxLCA1NiwgMSwgMjMwLCAxNjEsIDU2LCAxLCA0LCAxOTEsIDU2LCAKLSAgICAxLCAxOTEsIDU2LCAxLCA0LCAyMTAsIDIxMiwgNTYsIDEsIDIxMCwgMjEyLCA1NiwgMSwgNCwgMjEwLCAyNDQsIDU2LCAxLCAKLSAgICAyMTAsIDI0NCwgNTYsIDEsIDIwNSwgNTYsIDEsIDIyMywgMzUsIDU2LCAxLCAyMjIsIDE0MCwgNTYsIDEsIDIyMywgMTI4LCAKLSAgICA1NiwgMSwgMjIyLCAyMTEsIDU2LCAxLCA0LCAyMTIsIDY1LCA1NiwgMSwgMjEyLCA2NSwgNTYsIDEsIDIxMSwgMjUwLCA1NiwgCi0gICAgMSwgMjEyLCAyMiwgNTYsIDEsIDIxMSwgMjI3LCA1NiwgMSwgMjMwLCAyNSwgNTYsIDEsIDIxMiwgMTE2LCA1NiwgMSwgNCwgCi0gICAgMTc2LCA1NiwgMSwgNCwgMjM0LCAxODIsIDU2LCAxLCAyMTQsIDI3LCA1NiwgMSwgMjEzLCAxNzYsIDU2LCAxLCAyMTMsIAotICAgIDI1NSwgNTYsIDEsIDIxMywgMTM4LCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAyMzQsIDIwMSwgMjI0LCAxNzMsIDIxOSwgCi0gICAgMzEsIDc4LCA1NiwgMjM1LCAxNTgsIDc4LCA1NiwgMjEzLCAxMzUsIDIzNSwgMTU4LCA3OCwgNTYsIDI0NywgMjIxLCAyMzMsIAotICAgIDI1NSwgMjUxLCAxODQsIDEsIDI1MywgMTU4LCAyNTEsIDE4NCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCAxLCAxOTMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDYsIDI1MSwgMTg0LCAxLCAyNDksIDYwLCAyNTEsIDE4NCwgMSwgMjE3LCAxNTIsIDI1MSwgMTg0LCAxLCAKLSAgICAyMzAsIDI1LCAyNTEsIDE4NCwgMSwgMTU2LCAyNTEsIDE4NCwgMSwgMjQzLCAyMDIsIDI1MSwgMTg0LCAxLCAyMzUsIDIzLCAKLSAgICAyNTEsIDE4NCwgMSwgMjQyLCA2MCwgMjUxLCAxODQsIDEsIDIzNSwgMTQ0LCAyNTEsIDE4NCwgMSwgMjI0LCA5NiwgMjUxLCAKLSAgICAxODQsIDEsIDIxMSwgMTc4LCAyNTEsIDE4NCwgMSwgMjEwLCA4MywgMjUxLCAxODQsIDEsIDI1MCwgMTU4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjIwLCAxMDQsIDI1MSwgMTg0LCAxLCAxNTMsIDI1MSwgMTg0LCAxLCAyMTAsIDE1OSwgMjUxLCAxODQsIDEsIDI1MSwgCi0gICAgNjYsIDI1MSwgMTg0LCAxLCAyMjIsIDkxLCAyNTEsIDE4NCwgMSwgNjEsIDI1MSwgMTg0LCAxLCA3NiwgMjUxLCAxODQsIDEsIAotICAgIDc1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTcsIDI1MSwgMTg0LCAxLCAyNTQsIDIwMSwgMjUxLCAxODQsIDEsIDI0NSwgMTk1LCAKLSAgICAyNTEsIDE4NCwgMSwgMjUzLCAxOTIsIDI1MSwgMTg0LCAxLCAyMjYsIDEzNCwgMjUxLCAxODQsIDEsIDI1NCwgMTIzLCAyNTEsIAotICAgIDE4NCwgMSwgMjQ1LCAxNTAsIDI1MSwgMTg0LCAxLCAyNTQsIDExNSwgMjUxLCAxODQsIDEsIDI0NSwgMTM4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQ1LCA5MiwgMjUxLCAxODQsIDEsIDczLCAyNTEsIDE4NCwgMSwgNzAsIDI1MSwgMTg0LCAxLCAyMzUsIDE1NiwgMjUxLCAKLSAgICAxODQsIDEsIDIxNCwgMTA1LCAyNTEsIDE4NCwgMSwgMjI5LCA3OSwgMjUxLCAxODQsIDEsIDI0MiwgMTc4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM2LCAzNCwgMjQsIDEsIDIzNCwgNTgsIDI0LCAxLCAyMTgsIDIxNSwgMjQsIDEsIDIzNCwgNTEsIDI0LCAxLCAyMjgsIAotICAgIDIyNiwgMjQsIDEsIDIyOCwgMjI0LCAyNCwgMSwgMjI4LCAyMjMsIDI0LCAxLCAyMTYsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAKLSAgICAyNCwgMSwgMjIzLCAyNiwgMjQsIDEsIDIyMywgMjEsIDI0LCAxLCAyMjMsIDE4LCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIAotICAgIDIyMywgNiwgMjQsIDEsIDIyMywgMSwgMjQsIDEsIDIyMywgMTIsIDI0LCAxLCAyMjMsIDI0LCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDI0LCAxLCAyMjUsIDk1LCAyNCwgMSwgMjE4LCAyMTIsIDI0LCAxLCAyMjUsIDg0LCAyNCwgMSwgMjE5LCAxNDgsIDI0LCAxLCAKLSAgICAyMTgsIDIwOSwgMjQsIDEsIDIzNiwgNTYsIDI0LCAxLCAyNTAsIDQ2LCAyNCwgMSwgMjE4LCAyMTksIDI0LCAxLCAyNTAsIAotICAgIDEwNiwgMjQsIDEsIDIzNCwgMTEwLCAyNCwgMSwgMjE2LCAxNzMsIDI0LCAxLCAyMjUsIDEzMSwgMjQsIDEsIDI0MSwgMTcyLCAKLSAgICAyNCwgMSwgNjEsIDI0LCAxLCAyNTQsIDI0MywgMjQsIDEsIDE5MSwgMjQsIDEsIDIxMSwgOTIsIDI0LCAxLCAyNDUsIDExNywgCi0gICAgMjQsIDEsIDc1LCAyNCwgMSwgMjExLCAzNiwgMjQsIDEsIDIxMSwgNDcsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMiwgNjUsIDI0LCAKLSAgICAxLCAyMTIsIDYyLCAyNCwgMSwgMjI2LCAyMzQsIDI0LCAxLCAyMTAsIDI0NCwgMjQsIDEsIDcwLCAyNCwgMSwgMjEyLCAxMSwgCi0gICAgMjQsIDEsIDIxMiwgMjIsIDI0LCAxLCAyMTEsIDI1MCwgMjQsIDEsIDIxMCwgMjEyLCAyNCwgMSwgMjQ1LCA1NSwgMjQsIDEsIAotICAgIDIxMSwgOCwgMjQsIDEsIDczLCAyNCwgMjQ0LCAxMDMsIDI0LCAxLCAyMTgsIDIxMywgMjQsIDEsIDIyOCwgMjE2LCAyNCwgMSwgCi0gICAgMjI4LCAyMTgsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyMywgMTksIDI0LCAxLCAyMjMsIDAsIDI0LCAxLCAyMjMsIDgsIAotICAgIDI0LCAxLCAyMjMsIDEzLCAyNCwgMSwgMjIyLCAyNTQsIDI0LCAxLCAyMzAsIDIxMCwgMjQsIDEsIDIzMCwgMjA3LCAyNCwgMSwgCi0gICAgMjMwLCAyMTEsIDI0LCAxLCAyMzQsIDIyMSwgMjQsIDEsIDIyNSwgOTAsIDI0LCAxLCAyMjUsIDc2LCAyNCwgMSwgMjI1LCAKLSAgICA4MiwgMjQsIDEsIDIyNSwgNzksIDI0LCAxLCAyMjUsIDkzLCAyNCwgMSwgMjI1LCA3NywgMjQsIDEsIDIzNCwgMjE5LCAyNCwgCi0gICAgMSwgMjM0LCAyMTcsIDI0LCAxLCAyMTksIDE0MSwgMjQsIDEsIDIxOSwgMTM5LCAyNCwgMSwgMjE5LCAxMzEsIDI0LCAxLCAKLSAgICAyMTksIDEzNiwgMjQsIDEsIDIxOSwgMTQ2LCAyNCwgMSwgMjI2LCAzMiwgMjQsIDEsIDIxOCwgMjE2LCAyNCwgMSwgMjExLCAKLSAgICAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjAsIDI0LCAxLCAyMTgsIDIxNywgMjQsIAotICAgIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAKLSAgICAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDM0LCAyNCwgMSwgMjU0LCAKLSAgICAyOCwgMTA5LCAyNTQsIDk5LCAyMzIsIDIwMywgNzgsIDEwOSwgMjU0LCA5OSwgMjIzLCA1MCwgNzgsIDEwOSwgMjU0LCA5OSwgCi0gICAgMTIzLCA3OCwgMTA5LCAyNTQsIDk5LCAxMTMsIDc4LCAxMDksIDI1NCwgOTksIDEzNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCAKLSAgICAxMSwgNzgsIDEwOSwgMjU0LCA5OSwgMjE2LCAxNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjMwLCAyMjQsIDc4LCAxMDksIDI1NCwgCi0gICAgOTksIDI1MSwgMTc1LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIDkyLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjEsIDE3NiwgNzgsIAotICAgIDEwOSwgMjU0LCA5OSwgMjE2LCAxNjksIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQxLCAKLSAgICAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDI0NSwgMjI0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzEsIDE4NiwgNzgsIDI1MSwgCi0gICAgMTg0LCAxLCAyNTEsIDEyNSwgMjUxLCAxODQsIDEsIDIxMCwgNDQsIDI1MSwgMTg0LCAxLCAyMzUsIDEwOCwgMjUxLCAxODQsIAotICAgIDEsIDI0MiwgMTEzLCAyNTEsIDE4NCwgMSwgMjQ1LCAyMDksIDI1MSwgMTg0LCAxLCAyNDUsIDEzNSwgMjUxLCAxODQsIDEsIAotICAgIDIyNiwgMTgzLCAyNTEsIDE4NCwgMSwgMjI2LCAxODcsIDI1MSwgMTg0LCAxLCAyMzUsIDE3OSwgMjUxLCAxODQsIDEsIDI1NCwgCi0gICAgMTAxLCAyNTEsIDE4NCwgMSwgMjM1LCAyMjQsIDI1MSwgMTg0LCAxLCAyMTQsIDE2OCwgMjUxLCAxODQsIDEsIDIzNiwgMTYsIAotICAgIDI1MSwgMTg0LCAxLCAyMjksIDU3LCAyNTEsIDE4NCwgMSwgMjU0LCAxOTUsIDI1MSwgMTg0LCAxLCAyNTMsIDE4NywgMjUxLCAKLSAgICAxODQsIDEsIDI1NCwgMTM2LCAyNTEsIDE4NCwgMSwgMjI2LCAyMDQsIDI1MSwgMTg0LCAxLCAyMjYsIDE4OSwgMjUxLCAxODQsIAotICAgIDEsIDIzNSwgMjIxLCAyNTEsIDE4NCwgNDAsIDEsIDIyNiwgMTA1LCAyNTEsIDE4NCwgNDAsIDEsIDIxNywgMTUyLCAyNTEsIAotICAgIDE4NCwgNDAsIDEsIDIzNSwgMjMsIDI1MSwgMTg0LCA0MCwgMSwgMjQyLCA2MCwgMjUxLCAxODQsIDEsIDI0MiwgMjUwLCAKLSAgICAyNTEsIDE4NCwgMSwgMjMyLCAyNTUsIDI1MSwgMTg0LCAxLCAyMDksIDI1MCwgOSwgMjE4LCAxMDMsIDIxNywgMTUyLCA5LCAKLSAgICAyMTgsIDEwMywgMjEyLCA0LCA5LCAyMTgsIDEwMywgMjExLCAxNTgsIDksIDIxOCwgMTAzLCAyNTEsIDc5LCA5LCAyMTgsIAotICAgIDEwMywgMjE3LCAyNTQsIDksIDIxOCwgMTAzLCAyNDAsIDE1OCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYyLCA5LCAyMTgsIDEwMywgCi0gICAgMjQwLCAyMzEsIDksIDIxOCwgMTAzLCAyNDAsIDE1OSwgOSwgMjE4LCAxMDMsIDIxNywgMTU1LCA5LCAyMTgsIDEwMywgMjQwLCAKLSAgICAxNjEsIDksIDIxOCwgMTAzLCAyNDAsIDE1NywgOSwgMjE4LCAxMDMsIDI0MCwgMjI5LCA5LCAyMTgsIDEwMywgMjQwLCAxNjAsIAotICAgIDksIDIxOCwgMTAzLCAyNDAsIDE1NiwgOSwgMjE4LCAxMDMsIDIzMCwgMjUsIDksIDIxOCwgMTAzLCAyNDIsIDYwLCA5LCAKLSAgICAyMTgsIDEwMywgMjIyLCA5MSwgOSwgMjE4LCAxMDMsIDIyNiwgMTA1LCA5LCAyMTgsIDEwMywgMjE5LCAyMSwgOSwgMjE4LCAKLSAgICAxMDMsIDI0OSwgNjAsIDksIDIxOCwgMTAzLCAyNDAsIDE2MywgOSwgMjE4LCAxMDMsIDI0MSwgMTkwLCA5LCAyMTgsIDEwMywgCi0gICAgMjE3LCAxNjQsIDksIDIxOCwgMTAzLCAyMTcsIDIzMywgOSwgMjE4LCAxMDMsIDIxOCwgMTY4LCA5LCAyMTgsIDEwMywgMjIwLCAKLSAgICAxMTAsIDksIDIxOCwgMTAzLCAyMjUsIDIyNCwgOSwgMjE4LCAxMDMsIDIyNCwgOTgsIDksIDIxOCwgMTAzLCAyMTYsIDQzLCAKLSAgICA5LCAyMTgsIDEwMywgMjE3LCAxNTQsIDksIDIxOCwgMTAzLCAyMTcsIDI0NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTcwLCA5LCAKLSAgICAyMTgsIDEwMywgMjQwLCAxNTUsIDksIDIxOCwgMTAzLCAyMjUsIDE0OSwgOSwgMjE4LCAxMDMsIDIyNCwgOTYsIDU2LCAxLCAKLSAgICA0LCAyMzMsIDIxNywgNTYsIDEsIDQsIDIxOSwgMTkxLCA1NiwgMSwgNCwgMjE4LCA4MywgNTYsIDEsIDQsIDExMSwgNTYsIDEsIAotICAgIDQsIDIyNywgMjM3LCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAxODAsIDU2LCAxLCA0LCAyNDAsIDIyMiwgNTYsIAotICAgIDEsIDQsIDI0MSwgMjM4LCA1NiwgMSwgNCwgMjQxLCA2OCwgNTYsIDEsIDQsIDIzMCwgMTAyLCA1NiwgMSwgNCwgMjA1LCA1NiwgCi0gICAgMSwgNCwgMjIzLCAzNSwgNTYsIDEsIDQsIDIyMiwgMTQwLCA1NiwgMSwgNCwgMjIzLCAxMjgsIDU2LCAxLCA0LCAyMjIsIAotICAgIDIxMSwgODgsIDI0LCAyMzQsIDU4LCA4OCwgMjQsIDIyOCwgMjI2LCA4OCwgMjQsIDIxNiwgMTAxLCA4OCwgMjQsIDIyMywgCi0gICAgMjYsIDg4LCAyNCwgMjMwLCAyMTcsIDg4LCAyNCwgMjI1LCA5NSwgODgsIDI0LCAyMTksIDE0OCwgODgsIDI0LCAyMzYsIDU2LCAKLSAgICA4OCwgMjQsIDI1MCwgNDYsIDg4LCAyNCwgMjUwLCAxMDYsIDg4LCAyNCwgMjM0LCAxMTAsIDg4LCAyNCwgMjE2LCAxNzMsIAotICAgIDg4LCAyNCwgMjI1LCAxMzEsIDg4LCAyNCwgMjQxLCAxNzIsIDg4LCAyNCwgMjM0LCA1OSwgNjEsIDg4LCAyNCwgMjI4LCAKLSAgICAyMjcsIDYxLCA4OCwgMjQsIDIxNiwgMTAyLCA2MSwgODgsIDI0LCAyMjMsIDI3LCA2MSwgODgsIDI0LCAyMzAsIDIxOCwgNjEsIAotICAgIDg4LCAyNCwgMjI1LCA5NiwgNjEsIDg4LCAyNCwgMjE5LCAxNDksIDYxLCA4OCwgMjQsIDIzNiwgNTcsIDYxLCA4OCwgMjQsIAotICAgIDI1MCwgNDcsIDYxLCA4OCwgMjQsIDI1MCwgMTA3LCA2MSwgODgsIDI0LCAyMzQsIDExMSwgNjEsIDg4LCAyNCwgMjE2LCAKLSAgICAxNzQsIDYxLCA4OCwgMjQsIDIyNSwgMTMyLCA2MSwgODgsIDI0LCAyNDEsIDE3MywgNjEsIDg4LCAyNCwgMjUwLCA0NywgNzAsIAotICAgIDg4LCAyMzQsIDMsIDEzNSwgMjI2LCAyMTcsIDg4LCAyMzQsIDMsIDEzNSwgMTQ0LCAyNDAsIDIyMiwgODgsIDE1NCwgMTEwLCAKLSAgICA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgMTU0LCAxODksIDg4LCAxNTQsIDE5NCwgODgsIAotICAgIDE1NCwgMTk4LCA4OCwgMTU0LCAxOTUsIDg4LCAxNTQsIDIwMCwgODgsIDE1NCwgMjE2LCAyNDcsIDg4LCAxNTQsIDIzMCwgCi0gICAgMTI4LCA4OCwgMTU0LCAyNDQsIDk2LCA4OCwgMTU0LCAyMTIsIDQwLCA4OCwgMTU0LCAyMTEsIDIxNCwgODgsIDE1NCwgMjMxLCAKLSAgICAzOSwgODgsIDE1NCwgMjQ1LCAyMjMsIDg4LCAxNTQsIDIxOCwgMzcsIDg4LCAxNTQsIDIxOCwgMTMyLCA4OCwgMTU0LCAyNDEsIAotICAgIDI0NCwgODgsIDE1NCwgMjE5LCA1NCwgODgsIDE1NCwgMjI5LCAyMDQsIDg4LCAxNTQsIDIxOSwgNCwgODgsIDE1NCwgMjQ0LCAKLSAgICAxMDIsIDg4LCAxNTQsIDI0OSwgMjAwLCA4OCwgMTU0LCAyMzMsIDEyNSwgODgsIDE1NCwgMjIzLCA3MSwgODgsIDE1NCwgCi0gICAgMjUxLCAxNSwgODgsIDE1NCwgMjE4LCA4NywgODgsIDE1NCwgMjE4LCAyMCwgODgsIDE1NCwgMjQ1LCAxMjcsIDg4LCAxNTQsIAotICAgIDIyMywgNjMsIDg4LCAxNTQsIDI1NCwgMTUwLCA4OCwgMTU0LCAyNDQsIDEyOCwgODgsIDE1NCwgMjIzLCA2MSwgODgsIDE1NCwgCi0gICAgMjIwLCAxNTYsIDg4LCAxNTQsIDIyMywgMTI3LCAzNywgMTU0LCAyMjQsIDEyLCAzNywgMTU0LCAyMzQsIDgwLCAzNywgMTU0LCAKLSAgICAyMjEsIDE5OCwgMzcsIDE1NCwgMjMzLCAyNTUsIDM3LCA1NCwgMjE2LCAyNDgsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDM3LCA1NCwgMjE1LCA3NCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMTYsIDE2MywgMjI2LCAxOTcsIDg1LCAKLSAgICAyMTgsIDIzNCwgMzcsIDU0LCAyNDQsIDE2LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTE1LCAyMjYsIAotICAgIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxOSwgMTEyLCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIyMCwgCi0gICAgMTE3LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDI0NSwgMTg1LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAKLSAgICAyMjUsIDI1MSwgNTAsIDM3LCA1NCwgMjE1LCA3NCwgMTEwLCAzNywgNTQsIDIxNSwgNzQsIDEwNSwgMzcsIDU0LCAyMTUsIAotICAgIDc0LCAxNTgsIDM3LCA1NCwgMjE1LCA3NCwgMTYxLCAzNywgNTQsIDIxNSwgNzQsIDE4OSwgMzcsIDU0LCAyMTUsIDc0LCAKLSAgICAxOTQsIDM3LCA1NCwgMjE1LCA3NCwgMTk4LCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAyMDAsIAotICAgIDM3LCA1NCwgMjE2LCAxNjIsIDM3LCA1NCwgMjE2LCAxNjMsIDExMCwgMzcsIDU0LCAyMTYsIDE2MywgMTA1LCAzNywgNTQsIAotICAgIDIxNiwgMTYzLCAxNTgsIDM3LCA1NCwgMjE2LCAxNjMsIDE2MSwgMzcsIDU0LCAyMTYsIDE2MywgMTg5LCAzNywgMjQsIDIzNCwgCi0gICAgNTgsIDM3LCAyNCwgMjI4LCAyMjYsIDM3LCAyNCwgMjE2LCAxMDEsIDM3LCAyNCwgMjIzLCAyNiwgMzcsIDI0LCAyMzAsIAotICAgIDIxNywgMzcsIDI0LCAyMjUsIDk1LCAzNywgMjQsIDIxOSwgMTQ4LCAzNywgMjQsIDIzNiwgNTYsIDM3LCAyNCwgMjUwLCA0NiwgCi0gICAgMzcsIDI0LCAyNTAsIDEwNiwgMzcsIDI0LCAyMzQsIDExMCwgMzcsIDI0LCAyMTYsIDE3MywgMzcsIDI0LCAyMjUsIDEzMSwgCi0gICAgMzcsIDI0LCAyNDEsIDE3MiwgMzcsIDI0LCAyMzQsIDU5LCA2MSwgMzcsIDI0LCAyMjgsIDIyNywgNjEsIDM3LCAyNCwgMjE2LCAKLSAgICAxMDIsIDYxLCAzNywgMjQsIDIyMywgMjcsIDYxLCAzNywgMjQsIDIzMCwgMjE4LCA2MSwgMzcsIDI0LCAyMjUsIDk2LCA2MSwgCi0gICAgMzcsIDI0LCAyMTksIDE0OSwgNjEsIDM3LCAyNCwgMjM2LCA1NywgNjEsIDM3LCAyNCwgMjUwLCA0NywgNjEsIDM3LCAyNCwgCi0gICAgMjUwLCAxMDcsIDYxLCAzNywgMjQsIDIzNCwgMTExLCA2MSwgMzcsIDI0LCAyMTYsIDE3NCwgNjEsIDM3LCAyNCwgMjI1LCAKLSAgICAxMzIsIDYxLCAzNywgMjQsIDI0MSwgMTczLCA2MSwgMzcsIDIzNCwgMywgMTM1LCAyNTAsIDE0OCwgMzcsIDIzNCwgMywgCi0gICAgMTM1LCAyMzUsIDQ3LCAzNywgMjQsIDIzNiwgNTcsIDcwLCAyMzQsIDMsIDIxOCwgMTU5LCA4NywgMzcsIDE1NCwgMTEwLCAKLSAgICAzNywgMTU0LCAxMDUsIDM3LCAxNTQsIDE1OCwgMzcsIDE1NCwgMTYxLCAzNywgMTU0LCAxODksIDM3LCAxNTQsIDE5NCwgMzcsIAotICAgIDE1NCwgMTk4LCAzNywgMTU0LCAxOTUsIDM3LCAxNTQsIDIwMCwgMzcsIDE1NCwgMjE2LCAyNDcsIDM3LCAxNTQsIDIzMCwgCi0gICAgMTI4LCAzNywgMTU0LCAyNDQsIDk2LCAzNywgMTU0LCAyMTIsIDQwLCAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCAKLSAgICAzOSwgMzcsIDE1NCwgMjQ1LCAyMjMsIDM3LCAxNTQsIDIxOCwgMzcsIDM3LCAxNTQsIDIxOCwgMTMyLCAzNywgMTU0LCAyNDEsIAotICAgIDI0NCwgMzcsIDE1NCwgMjE5LCA1NCwgMzcsIDE1NCwgMjI5LCAyMDQsIDM3LCAxNTQsIDIxOSwgNCwgMzcsIDE1NCwgMjQ0LCAKLSAgICAxMDIsIDM3LCAxNTQsIDI0OSwgMjAwLCAzNywgMTU0LCAyMzMsIDEyNSwgMzcsIDE1NCwgMjIxLCAxNzQsIDM3LCAxNTQsIAotICAgIDIzMSwgMTg5LCAzNywgMTU0LCAyNDQsIDEzNywgMzcsIDE1NCwgMjE4LCA0OSwgMzcsIDE1NCwgMjQ1LCAzNCwgMzcsIDE1NCwgCi0gICAgMjI0LCAxODcsIDM3LCAxNTQsIDI1MywgMTk2LCAzNywgMTU0LCAyMzUsIDE1OSwgMzcsIDE1NCwgMjIzLCA2MSwgMzcsIAotICAgIDE1NCwgMjQ5LCAxNjQsIDM3LCAxNTQsIDI0OSwgMTU1LCAzNywgMTU0LCAyNDEsIDE2NSwgMzcsIDE1NCwgMjUwLCAxNzQsIAotICAgIDM3LCAxNTQsIDIzMiwgMTEwLCAzNywgMTU0LCAyMzMsIDQ2LCAzNywgMTU0LCAyMjIsIDI1MSwgMzcsIDE1NCwgMjMxLCA4MywgCi0gICAgMzcsIDE1NCwgMjIzLCA4NywgMzcsIDE1NCwgMjE4LCA4NywgMzcsIDE1NCwgMjE4LCAyMCwgMzcsIDE1NCwgMjQ1LCAxMjcsIAotICAgIDM3LCAxNTQsIDIyMywgNjMsIDM3LCAxNTQsIDI1NCwgMTUwLCAzNywgMTU0LCAyMjgsIDIxMiwgMzcsIDU0LCAyMTYsIDE2MywgCi0gICAgMTk0LCAzNywgNTQsIDIxNiwgMTYzLCAxOTgsIDM3LCA1NCwgMjE2LCAxNjMsIDE5NSwgMzcsIDU0LCAyMTYsIDE2MywgMjAwLCAKLSAgICAzNywgNTQsIDI0NCwgMTUsIDM3LCA1NCwgMjQ0LCAxNiwgMTEwLCAzNywgNTQsIDI0NCwgMTYsIDEwNSwgMzcsIDU0LCAyNDQsIAotICAgIDE2LCAxNTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTYxLCAzNywgNTQsIDI0NCwgMTYsIDE4OSwgMzcsIDU0LCAyNDQsIDE2LCAKLSAgICAxOTQsIDM3LCA1NCwgMjQ0LCAxNiwgMTk4LCAzNywgNTQsIDI0NCwgMTYsIDE5NSwgMzcsIDU0LCAyNDQsIDE2LCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxMTQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgMTMzLCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDQsIDE0OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxNjAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1NCwgNDcsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzMSwgMTMyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzUsIDQ1LCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyMzUsIDQ2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNTMsIDE4OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjIwLCAKLSAgICAxMzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyNiwgMjM5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjgsIDQwLCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDgsIDg1LCA0MiwgMjQxLCAxOTAsIDQyLCAyNDUsIDg4LCA0MiwgMjQ1LCA0MywgMjMyLCAKLSAgICAyMTksIDIzMiwgMjQwLCA1MCwgMzcsIDU2LCA2MSwgMzcsIDU2LCA3MywgMzcsIDU2LCA3MCwgMzcsIDU2LCA3NSwgMzcsIAotICAgIDU2LCA3NiwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5MiwgMzcsIDU2LCAyMzMsIDIxNywgMzcsIDU2LCAyMzQsIDE4MiwgCi0gICAgMzcsIDU2LCAyMzQsIDI4LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAyMTksIDE5MSwgMzcsIDU2LCAyMTgsIDgzLCAzNywgNTYsIAotICAgIDIyMSwgMTgxLCAzNywgNTYsIDIxOSwgNTgsIDM3LCA1NiwgMjE3LCAxMDUsIDM3LCA1NiwgMjE2LCAxMTcsIDM3LCA1NiwgCi0gICAgMjE1LCAxMTgsIDM3LCA1NiwgMjE3LCAyMiwgMzcsIDU2LCAxMTEsIDM3LCA1NiwgMTk3LCAzNywgNTYsIDIyOCwgMjMzLCAKLSAgICAzNywgNTYsIDIyNywgMjM3LCAzNywgNTYsIDIyOSwgMTA3LCAzNywgNTYsIDIyOCwgNzQsIDM3LCA1NiwgMTYyLCAzNywgNTYsIAotICAgIDI0MSwgMTgwLCAzNywgNTYsIDI0MCwgMjIyLCAzNywgNTYsIDI0MSwgMjM4LCAzNywgNTYsIDI0MSwgNjgsIDM3LCA1NiwgCi0gICAgMTg0LCAzNywgNTYsIDIzMCwgMjMwLCAzNywgNTYsIDIzMCwgMTAyLCAzNywgNTYsIDIzMSwgOTEsIDM3LCA1NiwgMjMwLCAKLSAgICAxNjEsIDM3LCA1NiwgMTkxLCAzNywgNTYsIDIxMCwgMjEyLCAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIAotICAgIDU2LCAyMjMsIDM1LCAzNywgNTYsIDIyMiwgMTQwLCAzNywgNTYsIDIyMywgMTI4LCAzNywgNTYsIDIyMiwgMjExLCAzNywgCi0gICAgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIAotICAgIDI1NCwgNzEsIDQyLCAyNTMsIDIzOSwgNDIsIDI1NCwgOTUsIDQyLCAyNTUsIDMxLCA0MiwgMjM1LCAyMjYsIDQyLCAyMzUsIAotICAgIDE5NiwgNDIsIDIxNCwgMTY2LCA0MiwgMjQ1LCA2NiwgNDIsIDI0NSwgMjA2LCA0MiwgMjI2LCAxODYsIDQyLCAyMjYsIDE4MCwgCi0gICAgNDIsIDIzNCwgMjQ1LCA0MiwgMjM0LCAyMTQsIDQyLCAyMzQsIDIxMSwgNDIsIDI0MywgOTIsIDQyLCAyNDMsIDEwMSwgNDIsIAotICAgIDI0MiwgMjA0LCA0MiwgMjQyLCAyMDAsIDQyLCAyMzMsIDE1MCwgNDIsIDI0MiwgMTkzLCA0MiwgMjM0LCA3MiwgNDIsIDIzNCwgCi0gICAgNzEsIDQyLCAyMzQsIDcwLCA0MiwgMjM0LCA2OSwgNDIsIDI0MiwgODYsIDQyLCAyNDIsIDg1LCA0MiwgMjMzLCAxOTMsIDQyLCAKLSAgICAyMzMsIDE5NSwgNDIsIDIzNCwgMTc4LCA0MiwgMjM0LCAxLCA0MiwgMjM0LCA4LCA0MiwgMjIyLCAxNiwgNDIsIDIyMSwgCi0gICAgMjM3LCA0MiwgMjE5LCAxMjksIDQyLCAyMjAsIDE0MSwgNDIsIDIyMCwgMTQwLCA0MiwgMjQ4LCAyMTgsIDQyLCAyNDgsIDM2LCAKLSAgICA0MiwgMjQ3LCAxMjEsIDQyLCAyMTYsIDMyLCA0MiwgMjI5LCAyMDAsIDQyLCAyMjgsIDQxLCA0MiwgMjQyLCAzMiwgNDIsIAotICAgIDIyNiwgODQsIDQyLCAyMjYsIDgzLCA0MiwgMjUyLCAxODgsIDQyLCAyMjUsIDEwNSwgNDIsIDIyNSwgNjksIDQyLCAyMjUsIAotICAgIDcwLCA0MiwgMjUxLCAyMzQsIDQyLCAyNDAsIDIyMSwgNDIsIDI0MCwgMjE3LCA0MiwgMjUxLCA5MSwgNDIsIDI0MCwgMjA0LCAKLSAgICA0MiwgMjQxLCAyMTUsIDQyLCAyMjUsIDE1OSwgNDIsIDIyNSwgMTk0LCA0MiwgMjQxLCAxOTgsIDQyLCAyMjUsIDE5MSwgNDIsIAotICAgIDIyNSwgMjA3LCA0MiwgMjUyLCA2MSwgNDIsIDIyNSwgNiwgNDIsIDI1MSwgMTgwLCA0MiwgMjQxLCA1NiwgNDIsIDIyNCwgCi0gICAgMjUwLCA0MiwgMjQxLCA0OCwgNDIsIDI0MSwgNTAsIDQyLCAyMzEsIDIwMSwgNDIsIDIzMSwgMTk3LCA0MiwgMjMxLCAyMDYsIAotICAgIDQyLCAyMzEsIDE1MCwgNDIsIDIzMSwgMTc1LCA0MiwgMjMwLCAxOTcsIDQyLCAyMzAsIDE3NiwgNDIsIDIzMCwgMTc1LCA0MiwgCi0gICAgMjMxLCA3NCwgNDIsIDIzMSwgNzEsIDQyLCAyMzEsIDc1LCA0MiwgMjExLCAxMDIsIDQyLCAyMTEsIDEwMCwgNDIsIDIxMCwgCi0gICAgMjAxLCA0MiwgMjIyLCAyMjYsIDQyLCAyMjIsIDIzMCwgNDIsIDIyMiwgMTE3LCA0MiwgMjIyLCAxMTEsIDQyLCAyMjMsIDg1LCAKLSAgICA0MiwgMjIzLCA4MiwgNDIsIDIxMiwgMzgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTAsIDg2LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTEwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTA1LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTU4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTYxLCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTg5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk0LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk1LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjAwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE2LCAyNDcsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDUsIDE2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIAotICAgIDIxNSwgNzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDE2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzksIDI0NCwgNSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NCwgMTE4LCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDAsIDIzOSwgMjE5LCAxMTksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjAsIDExOSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTkwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjI4LCAKLSAgICAxOTcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDczLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIAotICAgIDIzOSwgMjE1LCA2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNjMsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0MCwgMjM5LCAyMTUsIDY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2OSwgNDIsIDI0MCwgCi0gICAgMjMwLCA0MiwgMjQ4LCAyMjEsIDQyLCAyNTMsIDE5MiwgNDIsIDEzMCwgNDIsIDIyNiwgMTI1LCA0MiwgMjI1LCAyMjUsIDQyLCAKLSAgICAyNDcsIDE0NywgNDIsIDI0NywgMTQ4LCAyMTgsIDIzMywgNDIsIDI0NywgMTQ4LCAyNDksIDEwOCwgNDIsIDIzNSwgMTU2LCAKLSAgICA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDI0MSwgMjE2LCA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDIxNywgMTc0LCA0MiwgCi0gICAgMjQ1LCA5MSwgMjI5LCAyMDUsIDIxNywgNzQsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjMxLCA3MCwgNDIsIDI0OSwgMTU3LCAKLSAgICA0MiwgMjI2LCA5MCwgMjU0LCAxMjUsIDQyLCAxOTcsIDQyLCAyMzAsIDEwMywgNjEsIDQyLCAxODQsIDQyLCAxNzYsIDQyLCAKLSAgICAyMzQsIDE4NSwgNDIsIDIzMSwgMTI5LCA0MiwgMjQzLCA4MCwgNDIsIDI1MSwgMTgsIDQyLCAyMzQsIDE4NCwgNDIsIDIyNSwgCi0gICAgMTUwLCA0MiwgMjI5LCA4MSwgNDIsIDIzMCwgMTAzLCAyNDUsIDYsIDQyLCAyMzAsIDEwMywgMjQzLCAyMDIsIDQyLCAyMzEsIAotICAgIDE1LCA0MiwgMjM0LCAxMzQsIDQyLCAyNDAsIDE2MywgNDIsIDIzNCwgOTQsIDQyLCAyMzAsIDIzMiwgNDIsIDI0MiwgMjE2LCAKLSAgICA0MiwgMjE2LCAxMTksIDQyLCAyMzAsIDEwMywgMTU2LCA0MiwgMjMwLCAxNjksIDQyLCAyNDcsIDE1NywgNDIsIDIzNCwgNDAsIAotICAgIDQyLCAyNDQsIDQ1LCA0MiwgMjI4LCAxMTIsIDQyLCAyMzAsIDEwMywgMTkzLCA0MiwgMjMwLCAxNjYsIDQyLCAyNDksIDIzOSwgCi0gICAgNDIsIDIzNCwgMzQsIDQyLCAyMzAsIDE2NywgMjE4LCAyMzMsIDQyLCAyNDksIDI0MCwgMjE4LCAyMzMsIDQyLCAyMzIsIDUwLCAKLSAgICAyMTgsIDIzMywgNDIsIDIzNCwgMzUsIDIxOCwgMjMzLCA0MiwgMjMwLCAxNjcsIDI0OSwgMTA4LCA0MiwgMjQ5LCAyNDAsIAotICAgIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMjQ5LCAxMDgsIDQyLCAyMzQsIDM1LCAyNDksIDEwOCwgNDIsIDIzMiwgNTAsIDExNywgCi0gICAgMjIyLCA5MSwgNDIsIDIzMiwgNTAsIDExNywgMjIyLCA5MiwgMjE4LCAyMzMsIDQyLCAxOTAsIDQyLCAyMzMsIDI1MSwgNDIsIAotICAgIDIzMCwgMTA1LCA0MiwgMjQyLCAxNTEsIDQyLCAyMjMsIDE3NiwgNDIsIDIyMywgMTc3LCAxMTcsIDIyMiwgOTEsIDQyLCAKLSAgICAyMjMsIDE3NywgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDIyNCwgMTYyLCA0MiwgMjI4LCAxMywgNDIsIDIzMCwgCi0gICAgMTAzLCAyMjIsIDkxLCA0MiwgMjMwLCAxMDQsIDQyLCAyMjQsIDExNiwgNDIsIDIyNywgMTc2LCA0MiwgMjMwLCAxMDMsIAotICAgIDIxNCwgMTA1LCA0MiwgMjMwLCA0OSwgNDIsIDIzMywgMTg1LCA0MiwgMjMwLCA1MCwgMjMxLCA3NCwgNDIsIDIyNCwgMTE1LCAKLSAgICA0MiwgMjI3LCAxNzUsIDQyLCAyMzAsIDEwMywgMjEyLCA5OCwgNDIsIDIzMCwgNDMsIDQyLCAyMzMsIDE4MywgNDIsIDIzMCwgCi0gICAgNDQsIDIzMSwgNzQsIDQyLCAyMzUsIDI0LCAyMjYsIDIyMCwgNDIsIDIzMiwgNTAsIDIyNiwgMjIwLCA0MiwgMjU0LCAxMzYsIAotICAgIDQyLCAyNTEsIDE2MCwgNDIsIDI1MCwgMjE0LCA0MiwgMjUwLCAxOTEsIDQyLCAyNTEsIDY3LCAxMTcsIDIzNCwgMTM0LCA0MiwgCi0gICAgMjQ5LCAyMzgsIDQyLCAyNDgsIDE0MiwgNDIsIDI0MiwgNzIsIDQyLCAxNjIsIDQyLCAyNDAsIDIzMSwgNDIsIDIzNSwgMjU1LCAKLSAgICA0MiwgMjM0LCA0NywgNDIsIDIzNCwgMzUsIDI1MCwgMjUwLCA0MiwgMjMzLCAyMTksIDQyLCAyMzIsIDE1OSwgNDIsIDIzMiwgCi0gICAgMTU4LCA0MiwgMjMyLCAxNDcsIDQyLCAyMzIsIDYzLCA0MiwgMjMxLCAxMzAsIDIxOSwgNzksIDQyLCAyMzAsIDE5NiwgNDIsIAotICAgIDIzMCwgMTUyLCA0MiwgMjI1LCAxNDgsIDQyLCAyMjUsIDE5LCA0MiwgMjI0LCAyMTksIDQyLCAyMjQsIDIxNywgNDIsIDIxOCwgCi0gICAgMjI3LCA0MiwgMjE4LCAyLCA0MiwgMjEyLCAyNCwgNDIsIDIxNCwgMTA2LCAxMTcsIDE5MywgNDIsIDExNSwgMTE3LCAxOTMsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxMDUsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxNjEsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTQsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTUsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIAotICAgIDI0NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIAotICAgIDE0NiwgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDgsIDE0NiwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAKLSAgICAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIyMCwgMTE5LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAKLSAgICAyMjgsIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0OCwgMTQ2LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgCi0gICAgNjUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIAotICAgIDE0NiwgMjE1LCA3MiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjgsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2MiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYxLCA0MiwgMjQzLCAKLSAgICAxMTgsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0OSwgMTQwLCAyNDEsIDIyMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjIzLCAxMjIsIDI0NSwgMjIzLCAyNDEsIDE5MiwgMzEsIDI0NywgMjMxLCAyNTMsIDIwNywgMjE2LCAxOTYsIDI1MiwgNTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjEwLCAyMjMsIDI0NCwgMzgsIDI0MSwgMTkyLCAzMSwgMjEyLCA1OSwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDksIDIwMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjU0LCAzLCAyNDEsIDE5MiwgMzEsIDI0MSwgNjAsIDIxNiwgMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgNCwgMjE3LCA2MSwgMjQxLCAxOTIsIDMxLCAyMTUsIDIzNywgMjQxLCAxOTIsIDMxLCAyMjUsIDIxOSwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTgsIDE1OCwgMjQxLCAxOTIsIDMxLCAyNDQsIDEzOSwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgCi0gICAgMjI0LCAyNDAsIDI0MSwgMTkyLCAzMSwgMjMwLCAxNTUsIDI0MSwgMTkyLCAzMSwgMjQ1LCAxMjYsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ0LCAzOSwgMjQxLCAxOTIsIDMxLCAyMTEsIDIwNywgMjI2LCAxOTcsIDIxNiwgMTk2LCAyNDgsIDg2LCAyNDEsIDE5MiwgCi0gICAgMzEsIDI1NCwgNTEsIDI0MSwgMTkyLCAzMSwgMjQ5LCAxODUsIDI0MSwgMTkyLCAzMSwgMjUxLCAyMjcsIDIxNiwgMTM4LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTQ5LCAyNDEsIDE5MiwgMzEsIDIxOCwgMjQ1LCAyNTQsIDcwLCAyNDEsIDE5MiwgMzEsIAotICAgIDIyMywgNTMsIDI0MSwgMTkyLCAzMSwgMjM1LCAyMjAsIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIxNywgNjEsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjMwLCAxMTEsIDI0OSwgMTU5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDE5NywgMjQxLCAxOTIsIAotICAgIDMxLCAyMTYsIDE5NiwgMjU1LCAxOCwgMjEyLCA0MCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUwLCA4LCAyNDQsIDk2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIzNSwgMjMzLCAyNDEsIDE5MiwgMzEsIDI0NiwgNTcsIDI0MSwgMTkyLCAzMSwgMjIzLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjI0LCAyMjQsIDI0MSwgMTkyLCAzMSwgMjI0LCAxNzcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ4LCAxNjEsIDY0LCAyMTYsIDE5NiwgMjMyLCAyMzAsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0NCwgMTc0LCAyNDEsIAotICAgIDE5MiwgMzEsIDIyNiwgMTYzLCAyNDEsIDE5MiwgMzEsIDIyNiwgMjQ0LCAyNDEsIDE5MiwgMzEsIDI0OCwgNTksIDI0MSwgCi0gICAgMTkyLCAzMSwgMjQ4LCA3OSwgMjQxLCAxOTIsIDMxLCAyMzUsIDI0NywgMjQxLCAxOTIsIDMxLCAyNTEsIDE0OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDksIDIyMSwgMjE2LCA0MiwgMjMxLCA3NiwgMjQxLCAxOTIsIDMxLCAyNDMsIDg3LCAyMTYsIDM4LCAyNDEsIAotICAgIDE5MiwgMzEsIDIyNCwgMTI1LCAyMTQsIDE1NCwgMjQxLCAxOTIsIDMxLCAyMjYsIDE2MiwgMjQxLCAxOTIsIDMxLCAyMTYsIAotICAgIDE5NiwgMjEyLCAxMywgMjQxLCAxOTIsIDMxLCAyMjMsIDQ1LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDIyMCwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUzLCAyNTUsIDIxNiwgMTMzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyMzQsIAotICAgIDE3OSwgMjE4LCAxMzQsIDIzMCwgMTE1LCAyNDEsIDE5MiwgMzEsIDI0OCwgMzIsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIzMSwgMTUyLCAyMzEsIDIwMiwgMjQxLCAxOTIsIDMxLCAyNTUsIDE5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyMTIsIAotICAgIDU0LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDMsIDQ3LCAyMTEsIDIzOSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjM1LCA1MiwgMjMzLCAxMDcsIDI0MSwgMTkyLCAzMSwgMjQ3LCAxODQsIDI0MSwgMTkyLCAzMSwgMjMyLCAyMjAsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjM1LCAyMjMsIDIxNSwgMTg3LCAyNDEsIDE5MiwgMzEsIDQsIDIyNCwgMTk3LCAyNDEsIDE5MiwgMzEsIAotICAgIDI1NCwgMjE3LCAyNDksIDIxMiwgMjQxLCAxOTIsIDMxLCAyNTIsIDU5LCAyNDksIDIxMiwgOCwgMywgMjM1LCAxNjAsIDgsIAotICAgIDMsIDIzNSwgMTUzLCA4LCAzLCA3MywgOCwgMywgMjM1LCAxODIsIDgsIDMsIDIzNiwgNTgsIDgsIDMsIDIzNiwgNDEsIDgsIAotICAgIDMsIDIzNiwgNjAsIDgsIDMsIDIzNiwgNTksIDgsIDMsIDI1MywgMjA2LCA4LCAzLCAyNTMsIDE2OSwgOCwgMywgNjEsIDgsIAotICAgIDMsIDI1NCwgNzIsIDgsIDMsIDIxNCwgMTY0LCA4LCAzLCAyMTQsIDE2NywgOCwgMywgMjE0LCAxNjUsIDgsIDMsIDIyNiwgCi0gICAgMTQwLCA4LCAzLCAyMjYsIDExNCwgOCwgMywgNzYsIDgsIDMsIDIyNiwgMTc1LCA4LCAzLCAyNDUsIDM1LCA4LCAzLCA3NSwgCi0gICAgOCwgMywgMjExLCAxOTUsIDgsIDMsIDI1MSwgMjI4LCA4LCAzLCAyNTEsIDIyNSwgOCwgMywgMjUyLCA2LCA4LCAzLCAyNTEsIAotICAgIDIzOCwgOCwgMywgMjUxLCAyNTEsIDgsIDMsIDI1MSwgMjUwLCA4LCAzLCAyNTEsIDI1MywgOCwgMywgMjUxLCAyNTIsIDgsIAotICAgIDMsIDI1MiwgMTIxLCA4LCAzLCAyNTIsIDExMywgOCwgMywgMjUyLCAxOTEsIDgsIDMsIDI1MiwgMTQyLCA4LCAzLCAyNTEsIAotICAgIDEwMSwgOCwgMywgMjUxLCAxMDUsIDgsIDMsIDI1MSwgMTAyLCA4LCAzLCAyNTEsIDE3OSwgOCwgMywgMjUxLCAxNjMsIDgsIAotICAgIDMsIDI1MSwgMjA1LCA4LCAzLCAyNTEsIDE4NSwgOCwgMywgMjUyLCAyMSwgOCwgMywgMjUyLCA3NSwgOCwgMywgMjUyLCAzMywgCi0gICAgOCwgMywgMjUxLCA4NywgOCwgMywgMjUxLCA4NCwgOCwgMywgMjUxLCAxMjUsIDgsIDMsIDI1MSwgMTAwLCA4LCAzLCAyNTEsIAotICAgIDk0LCA4LCAzLCAyNTEsIDk4LCA4LCAzLCAyNTEsIDcyLCA4LCAzLCAyNTEsIDcwLCA4LCAzLCAyNTEsIDc3LCA4LCAzLCAKLSAgICAyNTEsIDc1LCA4LCAzLCAyNTEsIDczLCA4LCAzLCAyNTEsIDc0LCA4LCAzLCAyMjUsIDQ5LCA4LCAzLCAyMjUsIDQ1LCA4LCAKLSAgICAzLCAyMjUsIDEwOCwgOCwgMywgMjI1LCA1OSwgOCwgMywgMjI1LCA3NSwgOCwgMywgMjI1LCAxMDIsIDgsIDMsIDIyNSwgOTgsIAotICAgIDgsIDMsIDIyNSwgMjQwLCA4LCAzLCAyMjUsIDIzMCwgOCwgMywgMTkwLCA4LCAzLCAyMjYsIDIxLCA4LCAzLCAyMjQsIDEzNSwgCi0gICAgOCwgMywgMjI0LCAxMzcsIDgsIDMsIDIyNCwgMTM2LCA4LCAzLCAyMjQsIDIzMywgOCwgMywgMjI0LCAyMjIsIDgsIDMsIAotICAgIDIyNSwgMTYsIDgsIDMsIDIyNCwgMjQ1LCA4LCAzLCAyMjQsIDEyMSwgOCwgMywgMjI0LCAxMTcsIDgsIDMsIDIyNCwgMTUwLCAKLSAgICA4LCAzLCAyMjQsIDEzNCwgOCwgMywgMjI0LCAxMjYsIDgsIDMsIDIyNCwgMTMyLCA4LCAzLCAyMjQsIDEwMCwgOCwgMywgCi0gICAgMjI0LCA5OSwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTAzLCA4LCAzLCAyMjQsIDEwMSwgOCwgMywgMjI0LCAxMDIsIAotICAgIDgsIDMsIDI1MiwgOTYsIDgsIDMsIDI1MiwgOTUsIDgsIDMsIDI1MiwgMTAyLCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIAotICAgIDk5LCA4LCAzLCAyNTIsIDk4LCA4LCAzLCAyNTIsIDEwMSwgOCwgMywgMjUyLCAxMDAsIDgsIDMsIDI1MiwgMTA4LCA4LCAzLCAKLSAgICAyNTIsIDEwNywgOCwgMywgMjUyLCAxMTEsIDgsIDMsIDI1MiwgMTA5LCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg5LCAKLSAgICA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIAotICAgIDkzLCA4LCAzLCAyNTIsIDEwMywgOCwgMywgMjUyLCAxMDYsIDgsIDMsIDI1MiwgMTA0LCA4LCAzLCAyNTIsIDgzLCA4LCAzLCAKLSAgICAyNTIsIDgyLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDg2LCA4LCAzLCAyNTIsIDg0LCA4LCAzLCAyNTIsIDg1LCA4LCAKLSAgICAzLCAyNTIsIDc5LCA4LCAzLCAyNTIsIDc4LCA4LCAzLCAyNTIsIDgxLCA4LCAzLCAyNTIsIDgwLCA4LCAzLCAyMjksIDE2OSwgCi0gICAgOCwgMywgMjI5LCAxNjgsIDgsIDMsIDIyOSwgMTc0LCA4LCAzLCAyMjksIDE3MCwgOCwgMywgMjI5LCAxNzEsIDgsIDMsIAotICAgIDIyOSwgMTczLCA4LCAzLCAyMjksIDE3MiwgOCwgMywgMjI5LCAxNzcsIDgsIDMsIDIyOSwgMTc2LCA4LCAzLCAyMjksIDE3OSwgCi0gICAgOCwgMywgMjI5LCAxNzgsIDgsIDMsIDIyOSwgMTY1LCA4LCAzLCAyMjksIDE2NCwgOCwgMywgMjI5LCAxNjcsIDgsIDMsIAotICAgIDIyOSwgMTY2LCA4LCAzLCAyMjksIDE1OCwgOCwgMywgMjI5LCAxNTcsIDgsIDMsIDIyOSwgMTYyLCA4LCAzLCAyMjksIDE2MSwgCi0gICAgOCwgMywgMjI5LCAxNTksIDgsIDMsIDIyOSwgMTYwLCA4LCAzLCAyMjksIDE1MiwgOCwgMywgMjI5LCAxNTEsIDgsIDMsIAotICAgIDIyOSwgMTU2LCA4LCAzLCAyMjksIDE1NSwgOCwgMywgMjI5LCAxNTMsIDgsIDMsIDIyOSwgMTU0LCA4LCAzLCAyNDEsIDExMCwgCi0gICAgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTE1LCA4LCAzLCAyNDEsIDExMSwgOCwgMywgMjQxLCAxMTIsIDgsIDMsIAotICAgIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDExMywgOCwgMywgMjQxLCAxMTgsIDgsIDMsIDI0MSwgMTE3LCA4LCAzLCAyNDEsIDEyMCwgCi0gICAgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTAxLCA4LCAzLCAyNDEsIDEwMywgOCwgMywgMjQxLCAxMDIsIDgsIDMsIAotICAgIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDEwNSwgOCwgMywgMjQxLCAxMDgsIDgsIDMsIDI0MSwgMTA3LCA4LCAzLCAyNDEsIDk3LCAKLSAgICA4LCAzLCAyNDEsIDk2LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDAsIDgsIDMsIDI0MSwgOTgsIDgsIDMsIDI0MSwgCi0gICAgOTksIDgsIDMsIDI0MSwgOTEsIDgsIDMsIDI0MSwgOTUsIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIAotICAgIDI0MSwgOTMsIDgsIDMsIDIzMCwgMTcyLCA4LCAzLCAyMzAsIDE3MSwgOCwgMywgMjMwLCAyMzAsIDgsIDMsIDIzMCwgMTc4LCAKLSAgICA4LCAzLCAyMzAsIDIwMywgOCwgMywgMjMwLCAyMjEsIDgsIDMsIDIzMCwgMjE5LCA4LCAzLCAyMzEsIDEzOSwgOCwgMywgCi0gICAgMjMxLCAxMzQsIDgsIDMsIDE4NCwgOCwgMywgMjMxLCAxNzIsIDgsIDMsIDIzMCwgNzQsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIAotICAgIDIzMCwgNzcsIDgsIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgMTIxLCA4LCAzLCAyMzAsIDEwNywgOCwgMywgMjMwLCAxNjEsIAotICAgIDgsIDMsIDIzMCwgMTI2LCA4LCAzLCAyMzEsIDI2LCA4LCAzLCAyMzEsIDkxLCA4LCAzLCAyMzAsIDU1LCA4LCAzLCAyMzAsIAotICAgIDUxLCA4LCAzLCAyMzAsIDEwMiwgOCwgMywgMjMwLCA3MCwgOCwgMywgMjMwLCA2MywgOCwgMywgMjMwLCA2OCwgOCwgMywgCi0gICAgMjMwLCAyOCwgOCwgMywgMjMwLCAyNywgOCwgMywgMjMwLCAzMywgOCwgMywgMjMwLCAzMCwgOCwgMywgMjQ0LCA4MywgOCwgCi0gICAgMywgMjQ0LCA3OCwgOCwgMywgMjQ0LCAxMjEsIDgsIDMsIDI0NCwgOTgsIDgsIDMsIDI0NCwgMTY3LCA4LCAzLCAyNDQsIAotICAgIDE1OCwgOCwgMywgMjQ0LCAxOTYsIDgsIDMsIDI0NCwgMTcwLCA4LCAzLCAyNDQsIDMsIDgsIDMsIDI0NCwgNDMsIDgsIDMsIAotICAgIDI0NCwgMjcsIDgsIDMsIDI0MywgMjE4LCA4LCAzLCAyNDMsIDIxNywgOCwgMywgMjQzLCAyMzQsIDgsIDMsIDI0MywgMjIzLCAKLSAgICA4LCAzLCAyNDMsIDIyMSwgOCwgMywgMjQzLCAyMjIsIDgsIDMsIDI0MywgMjA1LCA4LCAzLCAyNDMsIDIwNCwgOCwgMywgCi0gICAgMjQzLCAyMDgsIDgsIDMsIDI0MywgMjA2LCA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCAKLSAgICA4LCAzLCAyMTMsIDE1MywgOCwgMywgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgCi0gICAgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAKLSAgICAyMTMsIDEyNSwgOCwgMywgMjEzLCAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIAotICAgIDgsIDMsIDIxMywgMjQ0LCA4LCAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAKLSAgICAyMTIsIDExMywgOCwgMywgMjEyLCAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIAotICAgIDgsIDMsIDIxMiwgMTA2LCA4LCAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAKLSAgICAyNDcsIDE3OCwgOCwgMywgMjQ3LCAxNjYsIDgsIDMsIDI0OCwgMywgOCwgMywgMjQ3LCAyMDMsIDgsIDMsIDI0NywgMjM2LCAKLSAgICA4LCAzLCAyNDcsIDI0MCwgOCwgMywgMjQ3LCAyMzksIDgsIDMsIDI0OCwgMTUyLCA4LCAzLCAyNDgsIDE0NywgOCwgMywgCi0gICAgMjQ4LCAyMjEsIDgsIDMsIDI0OCwgMTcyLCA4LCAzLCAyNDYsIDYyLCA4LCAzLCAyNDYsIDYzLCA4LCAzLCAyNDcsIDEyMCwgCi0gICAgOCwgMywgMjQ2LCAxMDIsIDgsIDMsIDI0NywgMTQ1LCA4LCAzLCAyNDcsIDEyMiwgOCwgMywgMjQ4LCAzMCwgOCwgMywgMjQ4LCAKLSAgICA5MCwgOCwgMywgMjQ4LCA0NSwgOCwgMywgMjQ2LCA1MywgOCwgMywgMjQ2LCA1MSwgOCwgMywgMjQ2LCA3OCwgOCwgMywgCi0gICAgMjQ2LCA2MSwgOCwgMywgMjQ2LCA1NiwgOCwgMywgMjQ2LCA1OSwgOCwgMywgMjE2LCA2NywgOCwgMywgMjE2LCA2MSwgOCwgCi0gICAgMywgMjE2LCAxMTcsIDgsIDMsIDIxNiwgNzYsIDgsIDMsIDIxNiwgMTA5LCA4LCAzLCAyMTYsIDExMSwgOCwgMywgMjE2LCAKLSAgICAxMTAsIDgsIDMsIDIxNywgNDYsIDgsIDMsIDIxNywgMzMsIDgsIDMsIDIxNywgMTA1LCA4LCAzLCAyMTcsIDU0LCA4LCAzLCAKLSAgICAyMTUsIDEwMiwgOCwgMywgMjE1LCAxMDEsIDgsIDMsIDIxNSwgMTA0LCA4LCAzLCAyMTUsIDEwMywgOCwgMywgMjE2LCA1LCAKLSAgICA4LCAzLCAyMTYsIDEsIDgsIDMsIDExMSwgOCwgMywgMjE2LCAxMywgOCwgMywgMjE2LCAyMTMsIDgsIDMsIDIxNywgMjIsIDgsIAotICAgIDMsIDIxNiwgMjM3LCA4LCAzLCAyMTUsIDg4LCA4LCAzLCAyMTUsIDgzLCA4LCAzLCAyMTUsIDExOCwgOCwgMywgMjE1LCAKLSAgICAxMDAsIDgsIDMsIDIxNSwgODksIDgsIDMsIDIxNSwgOTgsIDgsIDMsIDI0OCwgMTA3LCA4LCAzLCAyNDgsIDEwNiwgOCwgMywgCi0gICAgMjQ4LCAxMTIsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTEsIDgsIDMsIDI0OCwgMTEwLCAKLSAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMjcsIDgsIDMsIDI0OCwgMTM1LCA4LCAzLCAyNDgsIDEyOSwgOCwgMywgCi0gICAgMjQ4LCA5NywgOCwgMywgMjQ4LCA5OSwgOCwgMywgMjQ4LCA5OCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAxLCA4LCAKLSAgICAzLCAyNDgsIDEwNSwgOCwgMywgMjQ4LCAxMDMsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDEyMywgOCwgMywgMjQ4LCAKLSAgICAxMjEsIDgsIDMsIDI0OCwgOTMsIDgsIDMsIDI0OCwgOTIsIDgsIDMsIDI0OCwgMTAwLCA4LCAzLCAyNDgsIDk2LCA4LCAzLCAKLSAgICAyNDgsIDk0LCA4LCAzLCAyNDgsIDk1LCA4LCAzLCAyMjksIDEyNiwgOCwgMywgMjI5LCAxMjUsIDgsIDMsIDIyOSwgMTMzLCAKLSAgICA4LCAzLCAyMjksIDEyOCwgOCwgMywgMjI5LCAxMjksIDgsIDMsIDIyOSwgMTMwLCA4LCAzLCAyMjksIDE0MiwgOCwgMywgCi0gICAgMjI5LCAxNDEsIDgsIDMsIDIyOSwgMTQ4LCA4LCAzLCAyMjksIDE0MywgOCwgMywgMjI5LCAxMTgsIDgsIDMsIDIyOSwgMTE3LCAKLSAgICA4LCAzLCAyMjksIDEyNCwgOCwgMywgMjI5LCAxMTksIDgsIDMsIDIyOSwgMTM0LCA4LCAzLCAyMjksIDE0MCwgOCwgMywgCi0gICAgMjI5LCAxMzgsIDgsIDMsIDIyOSwgMTEwLCA4LCAzLCAyMjksIDEwOSwgOCwgMywgMjI5LCAxMTUsIDgsIDMsIDIyOSwgMTEzLCAKLSAgICA4LCAzLCAyMjksIDExMSwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDI0MSwgNzYsIDgsIDMsIDI0MSwgCi0gICAgODMsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgNzksIDgsIDMsIDI0MSwgODIsIDgsIDMsIAotICAgIDI0MSwgODEsIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODksIDgsIAotICAgIDMsIDI0MSwgNzEsIDgsIDMsIDI0MSwgNzIsIDgsIDMsIDI0MSwgNzQsIDgsIDMsIDI0MSwgNzMsIDgsIDMsIDI0MSwgNzUsIAotICAgIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODUsIDgsIDMsIDI0MSwgNzAsIDgsIDMsIDIyOCwgCi0gICAgMTg5LCA4LCAzLCAyMjgsIDE4NywgOCwgMywgMjI4LCAyMzMsIDgsIDMsIDIyOCwgMTkyLCA4LCAzLCAyMjgsIDIxNSwgOCwgCi0gICAgMywgMjI4LCAyMjksIDgsIDMsIDIyOCwgMjI4LCA4LCAzLCAyMjksIDE4MywgOCwgMywgMTk3LCA4LCAzLCAyMjksIDE5NywgCi0gICAgOCwgMywgMjI3LCAxODYsIDgsIDMsIDIyNywgMTg4LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgMjI4LCA1MSwgOCwgMywgMjI4LCAKLSAgICAzOCwgOCwgMywgMjI4LCA3NCwgOCwgMywgMjI4LCA2MCwgOCwgMywgMjI5LCA4MywgOCwgMywgMjI5LCAxMDcsIDgsIDMsIAotICAgIDIyOSwgOTQsIDgsIDMsIDIyNywgMTgxLCA4LCAzLCAyMjcsIDE3NywgOCwgMywgMjI3LCAyMzcsIDgsIDMsIDIyNywgMTg1LCAKLSAgICA4LCAzLCAyMjcsIDE4MywgOCwgMywgMjI3LCAxODQsIDgsIDMsIDI0MSwgMTQxLCA4LCAzLCAyNDEsIDE0MCwgOCwgMywgCi0gICAgMjQxLCAxNDYsIDgsIDMsIDI0MSwgMTQyLCA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxNDUsIDgsIDMsIDI0MSwgMTQ0LCAKLSAgICA4LCAzLCAyNDEsIDE1MSwgOCwgMywgMjQxLCAxNTAsIDgsIDMsIDI0MSwgMTUzLCA4LCAzLCAyNDEsIDE1MiwgOCwgMywgCi0gICAgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTM1LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzcsIDgsIDMsIDI0MSwgMTM5LCAKLSAgICA4LCAzLCAyNDEsIDEzOCwgOCwgMywgMjQxLCAxNDcsIDgsIDMsIDI0MSwgMTQ5LCA4LCAzLCAyNDEsIDE0OCwgOCwgMywgCi0gICAgMjQxLCAxMjksIDgsIDMsIDI0MSwgMTI4LCA4LCAzLCAyNDEsIDEzNiwgOCwgMywgMjQxLCAxMzIsIDgsIDMsIDI0MSwgMTMwLCAKLSAgICA4LCAzLCAyNDEsIDEzMSwgOCwgMywgMjQxLCAxMjMsIDgsIDMsIDI0MSwgMTIyLCA4LCAzLCAyNDEsIDEyNywgOCwgMywgCi0gICAgMjQxLCAxMjYsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNSwgOCwgMywgMjMyLCAxOTUsIDgsIDMsIDIzMiwgMTg5LCAKLSAgICA4LCAzLCAyMzIsIDI0MSwgOCwgMywgMjMyLCAyMDIsIDgsIDMsIDIzMiwgMjMzLCA4LCAzLCAyMzIsIDIzMiwgOCwgMywgCi0gICAgMjMyLCAyMzYsIDgsIDMsIDIzMiwgMjM0LCA4LCAzLCAyMzMsIDc5LCA4LCAzLCAyMzMsIDY5LCA4LCAzLCAyMzMsIDEzNSwgCi0gICAgOCwgMywgMjMzLCA4OCwgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3OCwgOCwgMywgMjMyLCA4MSwgOCwgMywgMjMyLCAKLSAgICA4MCwgOCwgMywgMjMyLCAxMTYsIDgsIDMsIDIzMiwgMTA2LCA4LCAzLCAyMzIsIDE1NiwgOCwgMywgMjMyLCAxMjAsIDgsIDMsIAotICAgIDIzMywgMiwgOCwgMywgMjMzLCA1OCwgOCwgMywgMjMzLCAxNywgOCwgMywgMjMyLCA3NCwgOCwgMywgMjMyLCA3MiwgOCwgMywgCi0gICAgMjMyLCA5OCwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCA3NSwgOCwgMywgMjMyLCA3NiwgOCwgMywgMjMyLCA1NCwgOCwgCi0gICAgMywgMjMyLCA1MywgOCwgMywgMjMyLCA2MiwgOCwgMywgMjMyLCA1NywgOCwgMywgMjMyLCA1NSwgOCwgMywgMjMyLCA1NiwgCi0gICAgOCwgMywgMjQyLCAxODksIDgsIDMsIDI0MiwgMTg4LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQyLCAxOTksIDgsIDMsIAotICAgIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIwNSwgOCwgMywgMjQyLCAyMDgsIDgsIDMsIDI0MiwgMjA3LCA4LCAzLCAyNDMsIDg5LCAKLSAgICA4LCAzLCAyNDMsIDg0LCA4LCAzLCAyNDMsIDEzNSwgOCwgMywgMjQzLCA5OSwgOCwgMywgMjQyLCA5MSwgOCwgMywgMjQyLCAKLSAgICA5MCwgOCwgMywgMjQyLCA5MywgOCwgMywgMjQyLCA5MiwgOCwgMywgMjQyLCAxNTQsIDgsIDMsIDI0MiwgMTUyLCA4LCAzLCAKLSAgICAyNDIsIDE3NCwgOCwgMywgMjQyLCAxNjIsIDgsIDMsIDI0MywgMzMsIDgsIDMsIDI0MywgMzEsIDgsIDMsIDI0MywgNjIsIDgsIAotICAgIDMsIDI0MywgNDQsIDgsIDMsIDI0MiwgODEsIDgsIDMsIDI0MiwgODAsIDgsIDMsIDI0MiwgMTEzLCA4LCAzLCAyNDIsIDg5LCAKLSAgICA4LCAzLCAyNDIsIDgyLCA4LCAzLCAyNDIsIDg4LCA4LCAzLCAyMzQsIDYxLCA4LCAzLCAyMzQsIDYwLCA4LCAzLCAyMzQsIAotICAgIDkyLCA4LCAzLCAyMzQsIDc1LCA4LCAzLCAyMzQsIDg1LCA4LCAzLCAyMzQsIDg4LCA4LCAzLCAyMzQsIDg2LCA4LCAzLCAKLSAgICAyMzQsIDIwMiwgOCwgMywgMjM0LCAxOTAsIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMjgsIDgsIDMsIDIzMywgMjAwLCA4LCAKLSAgICAzLCAyMzMsIDIwNSwgOCwgMywgMjMzLCAyMDIsIDgsIDMsIDIzNCwgMCwgOCwgMywgMjMzLCAyNTIsIDgsIDMsIDIzNCwgMjgsIAotICAgIDgsIDMsIDIzNCwgNywgOCwgMywgMjM0LCAxNTYsIDgsIDMsIDIzNCwgMTQwLCA4LCAzLCAyMzQsIDE4MiwgOCwgMywgMjM0LCAKLSAgICAxNTksIDgsIDMsIDIzMywgMTg5LCA4LCAzLCAyMzMsIDE4NiwgOCwgMywgMjMzLCAyMTcsIDgsIDMsIDIzMywgMTk5LCA4LCAKLSAgICAzLCAyMzMsIDE5MiwgOCwgMywgMjMzLCAxOTYsIDgsIDMsIDI0MywgMTUsIDgsIDMsIDI0MywgMTQsIDgsIDMsIDI0MywgMTksIAotICAgIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTgsIDgsIDMsIDI0MywgMTcsIDgsIDMsIDI0MywgMjYsIDgsIDMsIDI0MywgCi0gICAgMjUsIDgsIDMsIDI0MywgMjksIDgsIDMsIDI0MywgMjcsIDgsIDMsIDI0MywgNiwgOCwgMywgMjQzLCA1LCA4LCAzLCAyNDMsIAotICAgIDgsIDgsIDMsIDI0MywgNywgOCwgMywgMjQzLCAxMSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAKLSAgICAxMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAyMiwgOCwgMywgCi0gICAgMjQzLCAxLCA4LCAzLCAyNDMsIDAsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCA0LCA4LCAzLCAyNDMsIDIsIDgsIDMsIAotICAgIDI0MywgMywgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUwLCA4LCAzLCAyMzEsIDEyLCA4LCAzLCAyMzEsIDExLCA4LCAKLSAgICAzLCAyMzEsIDE0LCA4LCAzLCAyMzEsIDEzLCA4LCAzLCAyMzAsIDI0MCwgOCwgMywgMjMwLCAyNDIsIDgsIDMsIDIzMCwgCi0gICAgMjQxLCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQ3LCA4LCAzLCAyMzAsIDI0NiwgOCwgCi0gICAgMywgMjMwLCAyNTEsIDgsIDMsIDIzMCwgMjUzLCA4LCAzLCAyMzAsIDI1MiwgOCwgMywgMjMwLCAyMzYsIDgsIDMsIDIzMCwgCi0gICAgMjM1LCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjMwLCAyMzksIDgsIDMsIDIzMCwgMjM3LCA4LCAzLCAyMzAsIDIzOCwgOCwgCi0gICAgMywgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTc5LCA4LCAzLCAyNDAsIDE4NiwgOCwgMywgMjQwLCAxODEsIDgsIDMsIDI0MCwgCi0gICAgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCA4LCAzLCAyNDAsIDE5MSwgOCwgCi0gICAgMywgMjQwLCAxOTAsIDgsIDMsIDI0MCwgMTkzLCA4LCAzLCAyNDAsIDE5MiwgOCwgMywgMjQwLCAxNzIsIDgsIDMsIDI0MCwgCi0gICAgMTcxLCA4LCAzLCAyNDAsIDE3NCwgOCwgMywgMjQwLCAxNzMsIDgsIDMsIDI0MCwgMTc2LCA4LCAzLCAyNDAsIDE3NSwgOCwgCi0gICAgMywgMjQwLCAxNzgsIDgsIDMsIDI0MCwgMTc3LCA4LCAzLCAyNDAsIDE4NywgOCwgMywgMjQwLCAxODksIDgsIDMsIDI0MCwgCi0gICAgMTg4LCA4LCAzLCAyMjksIDI0LCA4LCAzLCAyMjksIDI2LCA4LCAzLCAyMjksIDI1LCA4LCAzLCAyMjksIDY3LCA4LCAzLCAKLSAgICAyMjksIDY1LCA4LCAzLCAyMjksIDc3LCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjgsIDI0MywgOCwgMywgMjI4LCAyNDIsIDgsIAotICAgIDMsIDIyOCwgMjQ0LCA4LCAzLCAyMjgsIDI1MiwgOCwgMywgMjI4LCAyNDksIDgsIDMsIDIyOSwgNCwgOCwgMywgMjI4LCAKLSAgICAyNTQsIDgsIDMsIDIyOSwgNTgsIDgsIDMsIDIyOSwgNjQsIDgsIDMsIDIyOSwgNjAsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAKLSAgICAyNDEsIDE2NiwgOCwgMywgMjQxLCAxNzUsIDgsIDMsIDI0MSwgMjUxLCA4LCAzLCAyNDEsIDI0MywgOCwgMywgMTYyLCA4LCAKLSAgICAzLCAyNDIsIDYsIDgsIDMsIDI0MCwgMjA2LCA4LCAzLCAyNDAsIDIwNSwgOCwgMywgMjQwLCAyMDgsIDgsIDMsIDI0MCwgCi0gICAgMjA3LCA4LCAzLCAyNDAsIDI0MiwgOCwgMywgMjQwLCAyMzMsIDgsIDMsIDI0MSwgNjgsIDgsIDMsIDI0MSwgNDcsIDgsIDMsIAotICAgIDI0MSwgMTk0LCA4LCAzLCAyNDEsIDIzOCwgOCwgMywgMjQxLCAyMDYsIDgsIDMsIDIxMiwgNDMsIDgsIDMsIDIxMiwgMjgsIAotICAgIDgsIDMsIDIxMiwgNjUsIDgsIDMsIDIxMiwgNTEsIDgsIDMsIDIxMSwgMTg1LCA4LCAzLCAyMTEsIDE4NywgOCwgMywgMjExLCAKLSAgICAxODYsIDgsIDMsIDIxMSwgMjAzLCA4LCAzLCAyMTEsIDIyNywgOCwgMywgMjExLCAyMTAsIDgsIDMsIDIxMiwgNSwgOCwgMywgCi0gICAgMjEyLCAyMiwgOCwgMywgMjEyLCAxMCwgOCwgMywgMjEwLCAzMCwgOCwgMywgMjEwLCAyOSwgOCwgMywgMjEwLCA0NCwgOCwgCi0gICAgMywgMjEwLCAzMiwgOCwgMywgMjEwLCAzNywgOCwgMywgMjEwLCAzOSwgOCwgMywgMjEwLCAzOCwgOCwgMywgMjEwLCAxMDIsIAotICAgIDgsIDMsIDIxMCwgOTksIDgsIDMsIDIxMCwgMTE2LCA4LCAzLCAyMTAsIDEwNSwgOCwgMywgMjEwLCA2LCA4LCAzLCAyMTAsIAotICAgIDgsIDgsIDMsIDIxMCwgNywgOCwgMywgMjEwLCAxOSwgOCwgMywgMjEwLCAxOCwgOCwgMywgMjEwLCAyMywgOCwgMywgMjEwLCAKLSAgICAyMCwgOCwgMywgMjEwLCA4NCwgOCwgMywgMjEwLCA5NCwgOCwgMywgMjEwLCA4OCwgOCwgMywgMjEwLCAyLCA4LCAzLCAyMTAsIAotICAgIDEsIDgsIDMsIDIxMCwgMTMsIDgsIDMsIDIxMCwgNSwgOCwgMywgMjEwLCAzLCA4LCAzLCAyMTAsIDQsIDgsIDMsIDIwOSwgCi0gICAgMjQ1LCA4LCAzLCAyMDksIDI0NCwgOCwgMywgMjA5LCAyNTAsIDgsIDMsIDIwOSwgMjQ4LCA4LCAzLCAyMDksIDI0NiwgOCwgCi0gICAgMywgMjA5LCAyNDcsIDgsIDMsIDI1MCwgMjgsIDgsIDMsIDI1MCwgMjQsIDgsIDMsIDI1MCwgNTEsIDgsIDMsIDI1MCwgMzcsIAotICAgIDgsIDMsIDI1MCwgNDgsIDgsIDMsIDI1MCwgNDIsIDgsIDMsIDI1MCwgNTAsIDgsIDMsIDI1MCwgNDksIDgsIDMsIDI1MCwgCi0gICAgMjI0LCA4LCAzLCAyNTAsIDIxNywgOCwgMywgMjUxLCAzMywgOCwgMywgMjUwLCAyNTEsIDgsIDMsIDI0OSwgMTA0LCA4LCAzLCAKLSAgICAyNDksIDEwNiwgOCwgMywgMjQ5LCAxMDUsIDgsIDMsIDI0OSwgMTUzLCA4LCAzLCAyNDksIDE0NCwgOCwgMywgMjQ5LCAyMzgsIAotICAgIDgsIDMsIDI0OSwgMTY5LCA4LCAzLCAyNTAsIDE2MCwgOCwgMywgMjUwLCAxOTAsIDgsIDMsIDI1MCwgMTY1LCA4LCAzLCAKLSAgICAyNDksIDg0LCA4LCAzLCAyNDksIDgyLCA4LCAzLCAyNDksIDExMiwgOCwgMywgMjQ5LCAxMDIsIDgsIDMsIDI0OSwgODksIDgsIAotICAgIDMsIDI0OSwgMTAxLCA4LCAzLCAyNDksIDYzLCA4LCAzLCAyNDksIDYyLCA4LCAzLCAyNDksIDczLCA4LCAzLCAyNDksIDY5LCAKLSAgICA4LCAzLCAyNDksIDY0LCA4LCAzLCAyNDksIDY2LCA4LCAzLCAyMDksIDIyOCwgOCwgMywgMjA5LCAyMjcsIDgsIDMsIDIwOSwgCi0gICAgMjM0LCA4LCAzLCAyMDksIDIyOSwgOCwgMywgMjA5LCAyMzEsIDgsIDMsIDIwOSwgMjMwLCA4LCAzLCAyMDksIDIzMywgOCwgCi0gICAgMywgMjA5LCAyMzIsIDgsIDMsIDIwOSwgMjQwLCA4LCAzLCAyMDksIDIzOSwgOCwgMywgMjA5LCAyNDMsIDgsIDMsIDIwOSwgCi0gICAgMjQxLCA4LCAzLCAyMDksIDIyNCwgOCwgMywgMjA5LCAyMjYsIDgsIDMsIDIwOSwgMjI1LCA4LCAzLCAyMDksIDIzNSwgOCwgCi0gICAgMywgMjA5LCAyMzgsIDgsIDMsIDIwOSwgMjM2LCA4LCAzLCAyMDksIDIxNywgOCwgMywgMjA5LCAyMjEsIDgsIDMsIDIwOSwgCi0gICAgMjIwLCA4LCAzLCAyMDksIDIxOCwgOCwgMywgMjA5LCAyMTksIDgsIDMsIDIwOSwgMjExLCA4LCAzLCAyMDksIDIxMCwgOCwgCi0gICAgMywgMjA5LCAyMTYsIDgsIDMsIDIwOSwgMjE0LCA4LCAzLCAyMDksIDIxMiwgOCwgMywgMjA5LCAyMTMsIDgsIDMsIDIyNywgCi0gICAgMTA0LCA4LCAzLCAyMjcsIDEwMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgCi0gICAgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIDExNCwgOCwgMywgMjI3LCAxMTMsIDgsIDMsIDIyNywgCi0gICAgMTE3LCA4LCAzLCAyMjcsIDExNiwgOCwgMywgMjI3LCA5NywgOCwgMywgMjI3LCA5OCwgOCwgMywgMjI3LCAxMDEsIDgsIDMsIAotICAgIDIyNywgMTAyLCA4LCAzLCAyMjcsIDExMCwgOCwgMywgMjI3LCAxMTIsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgMTAwLCAKLSAgICA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDkzLCA4LCAzLCAyMjcsIDk0LCA4LCAzLCAyMjcsIDg3LCA4LCAzLCAyMjcsIAotICAgIDg2LCA4LCAzLCAyMjcsIDkxLCA4LCAzLCAyMjcsIDkwLCA4LCAzLCAyMjcsIDg4LCA4LCAzLCAyMjcsIDg5LCA4LCAzLCAKLSAgICAyMTksIDEyNywgOCwgMywgMTk0LCA4LCAzLCAyMTksIDE5MSwgOCwgMywgMjE5LCAxMzAsIDgsIDMsIDIxOSwgMTgzLCA4LCAKLSAgICAzLCAyMTksIDE4NiwgOCwgMywgMjE5LCAxODQsIDgsIDMsIDIyMSwgMjI2LCA4LCAzLCAyMjEsIDIxNCwgOCwgMywgMjA2LCAKLSAgICA4LCAzLCAyMjEsIDIzNCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAzMCwgOCwgMywgMjE4LCAyOSwgOCwgMywgMjE5LCAKLSAgICAzNCwgOCwgMywgMjE5LCAyMywgOCwgMywgMjE5LCA1OCwgOCwgMywgMjE5LCAzOCwgOCwgMywgMjIwLCAxMTQsIDgsIDMsIAotICAgIDIyMSwgMTgxLCA4LCAzLCAyMjAsIDEzOSwgOCwgMywgMjE4LCA1LCA4LCAzLCAyMTgsIDMsIDgsIDMsIDIxOCwgODMsIDgsIAotICAgIDMsIDIxOCwgMjcsIDgsIDMsIDIxOCwgOSwgOCwgMywgMjE4LCAxNywgOCwgMywgMjE3LCAxNjYsIDgsIDMsIDIxNywgMTY1LCAKLSAgICA4LCAzLCAyMTcsIDIzMiwgOCwgMywgMjE3LCAxNzMsIDgsIDMsIDIxNywgMTY4LCA4LCAzLCAyMTcsIDE3MiwgOCwgMywgCi0gICAgMjE4LCAxODYsIDgsIDMsIDIxOCwgMTg1LCA4LCAzLCAyMTgsIDE5MiwgOCwgMywgMjE4LCAxODcsIDgsIDMsIDIxOCwgMTg5LCAKLSAgICA4LCAzLCAyMTgsIDE5MSwgOCwgMywgMjE4LCAxOTAsIDgsIDMsIDIxOCwgMjAwLCA4LCAzLCAyMTgsIDE5OCwgOCwgMywgCi0gICAgMjE4LCAyMjMsIDgsIDMsIDIxOCwgMjAxLCA4LCAzLCAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTg0LCAKLSAgICA4LCAzLCAyMTgsIDE4MiwgOCwgMywgMjE4LCAxOTQsIDgsIDMsIDIxOCwgMTk3LCA4LCAzLCAyMTgsIDE5NSwgOCwgMywgCi0gICAgMjE4LCAxNzcsIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3OSwgOCwgMywgMjE4LCAxNzgsIDgsIDMsIDIxOCwgMTcwLCAKLSAgICA4LCAzLCAyMTgsIDE2OSwgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxOCwgMTczLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgCi0gICAgMjE4LCAxNzIsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIAotICAgIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIAotICAgIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgCi0gICAgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIAotICAgIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIAotICAgIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTM2LCAKLSAgICA4LCAzLCAyNTAsIDEzMywgOCwgMywgMjUwLCAxNTcsIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDY1LCA4LCAzLCAyNTAsIAotICAgIDY0LCA4LCAzLCAyNTAsIDY3LCA4LCAzLCAyNTAsIDY2LCA4LCAzLCAyNTAsIDc5LCA4LCAzLCAyNTAsIDc4LCA4LCAzLCAKLSAgICAyNTAsIDg2LCA4LCAzLCAyNTAsIDgxLCA4LCAzLCAyNTAsIDExNSwgOCwgMywgMjUwLCAxMTMsIDgsIDMsIDI1MCwgMTMxLCAKLSAgICA4LCAzLCAyNTAsIDEyMSwgOCwgMywgMjUwLCA1OSwgOCwgMywgMjUwLCA2OSwgOCwgMywgMjUwLCA2MywgOCwgMywgMjUwLCAKLSAgICA2MCwgOCwgMywgMjUwLCA2MiwgOCwgMywgMjUwLCA1MywgOCwgMywgMjUwLCA1MiwgOCwgMywgMjUwLCA1NywgOCwgMywgCi0gICAgMjUwLCA1NiwgOCwgMywgMjUwLCA1NCwgOCwgMywgMjUwLCA1NSwgOCwgMywgMjIyLCAxNzUsIDgsIDMsIDIyMiwgMTc5LCA4LCAKLSAgICAzLCAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTYyLCA4LCAzLCAyMjIsIDE2MSwgOCwgMywgMjIyLCAKLSAgICAxNjUsIDgsIDMsIDIyMiwgMTYzLCA4LCAzLCAyMjIsIDE2OSwgOCwgMywgMjIyLCAxNjgsIDgsIDMsIDIyMiwgMTc0LCA4LCAKLSAgICAzLCAyMjIsIDE3MCwgOCwgMywgMjIyLCAxNTQsIDgsIDMsIDIyMiwgMTUyLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAKLSAgICAxNTcsIDgsIDMsIDIyMiwgMTU1LCA4LCAzLCAyMjIsIDE1NiwgOCwgMywgMjIyLCAxNDcsIDgsIDMsIDIyMiwgMTQ2LCA4LCAKLSAgICAzLCAyMjIsIDE1MSwgOCwgMywgMjIyLCAxNTAsIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE0OSwgOCwgMywgMjI4LCAKLSAgICAzNCwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAzNSwgOCwgMywgMjI4LCAyNiwgOCwgMywgCi0gICAgMjI4LCAyOCwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAzMiwgOCwgCi0gICAgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAyMSwgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAyNCwgCi0gICAgOCwgMywgMjI4LCAyMiwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAxNSwgOCwgMywgMjI4LCAxNCwgOCwgMywgMjI4LCAKLSAgICAxOSwgOCwgMywgMjI4LCAxOCwgOCwgMywgMjI4LCAxNiwgOCwgMywgMjI4LCAxNywgOCwgMywgMjIwLCA3MiwgOCwgMywgCi0gICAgMjIwLCA2NywgOCwgMywgMjIwLCAxMDIsIDgsIDMsIDIyMCwgODMsIDgsIDMsIDIxOSwgMjE1LCA4LCAzLCAyMTksIDIxNywgCi0gICAgOCwgMywgMjE5LCAyMTYsIDgsIDMsIDIxOSwgMjM2LCA4LCAzLCAyMTksIDIzMywgOCwgMywgMjIwLCA3LCA4LCAzLCAyMTksIAotICAgIDI1NCwgOCwgMywgMjIwLCA0MiwgOCwgMywgMjIwLCAzNSwgOCwgMywgMjIwLCA2MywgOCwgMywgMjIwLCA1MCwgOCwgMywgCi0gICAgMjE5LCAyMTEsIDgsIDMsIDIxOSwgMjA5LCA4LCAzLCAyMTksIDIyNSwgOCwgMywgMjE5LCAyMTQsIDgsIDMsIDIxOSwgMjEyLCAKLSAgICA4LCAzLCAyMTksIDIxMywgOCwgMywgMjE5LCAxOTQsIDgsIDMsIDIxOSwgMTkzLCA4LCAzLCAyMTksIDIwMCwgOCwgMywgCi0gICAgMjE5LCAxOTcsIDgsIDMsIDIxOSwgMTk1LCA4LCAzLCAyMTksIDE5NiwgOCwgMywgMjIzLCAxNDEsIDgsIDMsIDIyMywgMTM1LCAKLSAgICA4LCAzLCAyMDUsIDgsIDMsIDIyMywgMTQ3LCA4LCAzLCAyMjIsIDEyMCwgOCwgMywgMjIyLCAxMjIsIDgsIDMsIDIyMiwgCi0gICAgMTIxLCA4LCAzLCAyMjIsIDE4OCwgOCwgMywgMjIyLCAxODEsIDgsIDMsIDIyMiwgMjExLCA4LCAzLCAyMjIsIDE5MiwgOCwgCi0gICAgMywgMjIzLCA0MywgOCwgMywgMjIzLCAxMjgsIDgsIDMsIDIyMywgODEsIDgsIDMsIDIyMiwgMTEzLCA4LCAzLCAyMjIsIAotICAgIDExMCwgOCwgMywgMjIyLCAxNDAsIDgsIDMsIDIyMiwgMTE5LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTYsIDgsIAotICAgIDMsIDIyMiwgOTUsIDgsIDMsIDIyMiwgOTQsIDgsIDMsIDIyMiwgMTAwLCA4LCAzLCAyMjIsIDk4LCA4LCAzLCAyMjIsIDk2LCAKLSAgICA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMzUsIDk4LCA4LCAzLCAyMzUsIDk3LCA4LCAzLCAyMzUsIDEwOCwgOCwgMywgMjM1LCAKLSAgICA5OSwgOCwgMywgMjM1LCAxMDQsIDgsIDMsIDIzNSwgMTAzLCA4LCAzLCAyMzUsIDEwNiwgOCwgMywgMjM1LCAxMDUsIDgsIDMsIAotICAgIDIzNSwgNDEsIDgsIDMsIDIzNSwgNDAsIDgsIDMsIDIzNSwgNDMsIDgsIDMsIDIzNSwgNDIsIDgsIDMsIDIzNSwgNTYsIDgsIAotICAgIDMsIDIzNSwgNTQsIDgsIDMsIDIzNSwgNjgsIDgsIDMsIDIzNSwgNTgsIDgsIDMsIDIzNSwgMzQsIDgsIDMsIDIzNSwgMzIsIAotICAgIDgsIDMsIDIzNSwgNTEsIDgsIDMsIDIzNSwgMzksIDgsIDMsIDIzNSwgMzYsIDgsIDMsIDIzNSwgMzcsIDgsIDMsIDIzNSwgCi0gICAgMjYsIDgsIDMsIDIzNSwgMjUsIDgsIDMsIDIzNSwgMzAsIDgsIDMsIDIzNSwgMjksIDgsIDMsIDIzNSwgMjcsIDgsIDMsIAotICAgIDIzNSwgMjgsIDgsIDMsIDIyNCwgNDYsIDgsIDMsIDIyNCwgNDQsIDgsIDMsIDIyNCwgNTMsIDgsIDMsIDIyNCwgNDcsIDgsIAotICAgIDMsIDIyNCwgNTAsIDgsIDMsIDIyNCwgNDksIDgsIDMsIDIyNCwgNTIsIDgsIDMsIDIyNCwgNTEsIDgsIDMsIDIyMywgMjU1LCAKLSAgICA4LCAzLCAyMjMsIDI1MiwgOCwgMywgMjI0LCAxLCA4LCAzLCAyMjQsIDAsIDgsIDMsIDIyNCwgMzMsIDgsIDMsIDIyNCwgMzIsIAotICAgIDgsIDMsIDIyNCwgNDIsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyMywgMjQ3LCA4LCAzLCAyMjMsIDI0MywgOCwgMywgMjI0LCAKLSAgICAzMCwgOCwgMywgMjIzLCAyNTEsIDgsIDMsIDIyMywgMjQ5LCA4LCAzLCAyMjMsIDI1MCwgOCwgMywgMjIzLCAyMjcsIDgsIDMsIAotICAgIDIyMywgMjI1LCA4LCAzLCAyMjMsIDIzNywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDIyOSwgCi0gICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA4OCwgOCwgMywgMjM1LCAKLSAgICA5MCwgOCwgMywgMjM1LCA4OSwgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA3OCwgOCwgMywgCi0gICAgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCA4NSwgOCwgCi0gICAgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCA3MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA3NywgCi0gICAgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3NiwgOCwgMywgMjM1LCA3MCwgOCwgMywgMjM1LCA2OSwgOCwgMywgMjM1LCAKLSAgICA3MiwgOCwgMywgMjM1LCA3MSwgOCwgMywgMjI4LCAxNjIsIDgsIDMsIDIyOCwgMTYxLCA4LCAzLCAyMjgsIDE2OSwgOCwgMywgCi0gICAgMjI4LCAxNjMsIDgsIDMsIDIyOCwgMTY1LCA4LCAzLCAyMjgsIDE2NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTY2LCAKLSAgICA4LCAzLCAyMjgsIDE1MSwgOCwgMywgMjI4LCAxNTIsIDgsIDMsIDIyOCwgMTU3LCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgCi0gICAgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU4LCA4LCAzLCAyMjgsIDE0NiwgOCwgMywgMjI4LCAxNTUsIDgsIDMsIDIyOCwgMTUwLCAKLSAgICA4LCAzLCAyMjgsIDE0NywgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyOCwgMTQxLCA4LCAzLCAyMjgsIDE0MCwgOCwgMywgCi0gICAgMjI4LCAxNDUsIDgsIDMsIDIyOCwgMTQ0LCA4LCAzLCAyMjgsIDE0MiwgOCwgMywgMjI4LCAxNDMsIDgsIDMsIDIyNywgMTM3LCAKLSAgICA4LCAzLCAyMjcsIDEzNiwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0NSwgOCwgMywgCi0gICAgMjI3LCAxNDQsIDgsIDMsIDIyNywgMTQ3LCA4LCAzLCAyMjcsIDE0NiwgOCwgMywgMjI3LCAxMjQsIDgsIDMsIDIyNywgMTI2LCAKLSAgICA4LCAzLCAyMjcsIDEyNSwgOCwgMywgMjI3LCAxMzAsIDgsIDMsIDIyNywgMTI5LCA4LCAzLCAyMjcsIDEzNCwgOCwgMywgCi0gICAgMjI3LCAxMzEsIDgsIDMsIDIyNywgMTIyLCA4LCAzLCAyMjcsIDEyMCwgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTIzLCAKLSAgICA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgCi0gICAgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCAKLSAgICA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgCi0gICAgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCAKLSAgICA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgCi0gICAgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgCi0gICAgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgCi0gICAgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIAotICAgIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgCi0gICAgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIAotICAgIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIDM0LCAyMjQsIDMzLCA4LCAzNCwgMjMyLCAKLSAgICAyNDEsIDgsIDM0LCAyMzQsIDYxLCA4LCAzNCwgMjI3LCAxNDEsIDgsIDM0LCAyNDksIDY5LCA4LCAzNCwgMjE4LCAxOTIsIDgsIAotICAgIDM0LCAyNDMsIDEyLCA4LCAzNCwgMjQzLCA0NCwgOCwgMzQsIDIzMCwgMjMwLCA4LCAzNCwgMjQwLCAxODAsIDgsIDM0LCAKLSAgICAyMzIsIDU2LCA4LCAzNCwgMjUyLCA4MywgOCwgMzQsIDIzMCwgMTI2LCA4LCAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIAotICAgIDEyMSwgOCwgMzQsIDI0MCwgMTc0LCA4LCAzNCwgMjE3LCA0NiwgOCwgMzQsIDI0MywgMTM1LCA4LCAzNCwgMjEwLCA1LCA4LCAKLSAgICAzNCwgMjQ5LCA2MywgOCwgMzQsIDI0OCwgOTUsIDgsIDM0LCAyNTEsIDk4LCA4LCAzNCwgMjQzLCA4LCA4LCAzNCwgMjI3LCAKLSAgICAxMzEsIDgsIDM0LCAyMTUsIDExOCwgOCwgMzQsIDIyNiwgMTc1LCA4LCAzNCwgMjM1LCA3NCwgOCwgMzQsIDIxMCwgMTksIDgsIAotICAgIDM0LCAyMjQsIDEwMCwgOCwgMzQsIDI0MSwgMTA4LCA4LCAzNCwgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIAotICAgIDIxOSwgMjAwLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIDExNiwgOCwgMzQsIDIzNSwgNjgsIDgsIDM0LCAyMjcsIAotICAgIDk2LCA4LCAzNCwgMjM1LCA3MiwgOCwgMzQsIDI0MiwgMTU0LCA4LCAzNCwgMjM1LCA5MiwgOCwgMzQsIDIxMSwgMjI3LCA4LCAKLSAgICAzNCwgMjQ2LCA3OCwgOCwgMzQsIDIxOSwgMjEzLCA4LCAzNCwgMjMyLCAyMzYsIDgsIDM0LCAyNDksIDczLCA4LCAzNCwgCi0gICAgMjQ5LCAxMDUsIDgsIDM0LCAyNTAsIDM3LCA4LCAzNCwgMjQwLCAxNzcsIDgsIDM0LCAyMjAsIDcyLCA4LCAzNCwgMjEwLCA0LCAKLSAgICA4LCAzNCwgMjE5LCAyNTQsIDgsIDM0LCAyNTAsIDEzMSwgOCwgMzQsIDIwOSwgMjMxLCA4LCAzNCwgMjI5LCAxNzMsIDgsIAotICAgIDM0LCAyMzQsIDE4MiwgMjMyLCAxOTYsIDEsIDI1MiwgMTkxLCAyMzIsIDE5NiwgMSwgMTkwLCAyMzIsIDE5NiwgMSwgMjI1LCAKLSAgICAxNDcsIDIzMiwgMTk2LCAxLCAyNDgsIDIyMSwgMjMyLCAxOTYsIDEsIDIxNywgMTA1LCAyMzIsIDE5NiwgMSwgMjE2LCAyMDgsIAotICAgIDIzMiwgMTk2LCAxLCAyNDMsIDEzNSwgMjMyLCAxOTYsIDEsIDE3NiwgMjMyLCAxOTYsIDEsIDIzNCwgMTMyLCAyMzIsIDE5NiwgCi0gICAgMSwgMjM1LCAxNDEsIDIzMiwgMTk2LCAxLCAyNTEsIDMzLCAyMzIsIDE5NiwgMSwgMjUwLCAxNTcsIDIzMiwgMTk2LCAxLCAKLSAgICAyNDYsIDM4LCAyMzIsIDE5NiwgMSwgMjE1LCAxODMsIDIzMiwgMTk2LCAxLCAyMTUsIDE3NSwgMjMyLCAxOTYsIDEsIDE4NCwgCi0gICAgMjMyLCAxOTYsIDEsIDE5NywgMjMyLCAxOTYsIDEsIDIzMywgMTM1LCAyMzIsIDE5NiwgMSwgMjA2LCAyMzIsIDE5NiwgMSwgCi0gICAgMjEwLCA4MiwgMjMyLCAxOTYsIDEsIDIxMCwgMTE2LCAyMzIsIDE5NiwgMSwgMjI5LCA3NywgMjMyLCAxOTYsIDEsIDE2MiwgCi0gICAgMjMyLCAxOTYsIDEsIDIxMSwgMTY1LCAyMzIsIDE5NiwgMSwgMjQxLCAxODksIDIzMiwgMTk2LCAxLCAyNDQsIDE5NiwgMjMyLCAKLSAgICAxOTYsIDEsIDIxMiwgNjUsIDIzMiwgMTk2LCAxLCAyMjAsIDEwMiwgMjMyLCAxOTYsIDEsIDE5MSwgMjMyLCAxOTYsIDEsIAotICAgIDI0MiwgMjQ5LCAyMzIsIDE5NiwgMSwgNjEsIDIzMiwgMTk2LCAxLCAyNTQsIDI0MywgMjMyLCAxOTYsIDEsIDc1LCAyMzIsIAotICAgIDE5NiwgMSwgMjQ1LCA1NSwgMjMyLCAxOTYsIDEsIDczLCAyMzIsIDE5NiwgMSwgNzYsIDIzMiwgMTk2LCAxLCA3MCwgMjMyLCAKLSAgICAxOTYsIDEsIDIxNCwgMjE0LCAyMzIsIDE5NiwgMSwgMjE0LCAyMDgsIDIzMiwgMTk2LCAxLCAyMjYsIDIzNCwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMjE2LCAxMTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIyOSwgMjI5LCAyMjUsIDE2LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyNDksIDcyLCAyMzIsIDE5NiwgMSwgMTM4LCAyMzAsIDMyLCAyNTEsIDIwNSwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMTk3LCAyMzIsIDE5NiwgMSwgMTM4LCAyMzAsIDMyLCAyMzUsIDExNSwgMjMyLCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyNDksIDIxOSwgMjMyLCAxOTYsIDIyNCwgMTQxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDQxLCAzLCAyNDUsIDIwOSwgCi0gICAgNDEsIDMsIDI0NSwgMjA1LCA0MSwgMywgMjQxLCAyMjAsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIAotICAgIDIyNSwgMjExLCA0MSwgMywgMjUyLCAxMywgNDEsIDMsIDI1MiwgNjYsIDQxLCAzLCAyMzEsIDExNiwgNDEsIDMsIDIzMywgCi0gICAgMjQ3LCA0MSwgMywgMjMxLCA2LCA0MSwgMywgMjQzLCA3NSwgNDEsIDMsIDI0NCwgMTQ3LCA0MSwgMywgMjEzLCAyNTAsIDQxLCAKLSAgICAzLCAyMTcsIDExLCA0MSwgMywgMjE2LCAxOTQsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAxMywgNDEsIDMsIDIzMywgCi0gICAgNTAsIDQxLCAzLCAyMjMsIDEwOCwgNDEsIDMsIDI0OCwgNzcsIDQxLCAzLCAyMjksIDEzOSwgNDEsIDMsIDIyMSwgMTcwLCAKLSAgICA0MSwgMywgMjIwLCA2MSwgNDEsIDMsIDIxMCwgOTIsIDQxLCAzLCAyMTAsIDczLCA0MSwgMywgMjUwLCAxODIsIDQxLCAzLCAKLSAgICAyMzUsIDEyNCwgNDEsIDMsIDIyOCwgMTc2LCA0MSwgMywgMjExLCA0NCwgNDEsIDMsIDIzNCwgMTgxLCA0MSwgMywgMjI5LCAKLSAgICA1MSwgNDEsIDMsIDI0MywgNTUsIDQxLCAzLCAyMzEsIDgwLCA0MSwgMywgMjI5LCAxMDMsIDQxLCAzLCAyMjcsIDE1NSwgNDEsIAotICAgIDMsIDczLCA0MSwgMywgMjM1LCAyNTUsIDQxLCAzLCAyNDEsIDE4MCwgNDEsIDMsIDI0MSwgMTYwLCA0MSwgMywgMjExLCAKLSAgICAyNTAsIDQxLCAzLCAyMTEsIDI0MSwgNDEsIDMsIDIyNSwgMTA4LCA0MSwgMywgMjUyLCAxMSwgNDEsIDMsIDI1MiwgNiwgNDEsIAotICAgIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDQsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDcxLCA0MSwgMywgMjQ0LCAKLSAgICAxMjEsIDQxLCAzLCAyMTMsIDE3NiwgNDEsIDMsIDIxNiwgMTE3LCA0MSwgMywgMjE2LCAxNzUsIDQxLCAzLCAyNDgsIDgsIAotICAgIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjMyLCAyNDEsIDQxLCAzLCAyMjMsIDM1LCA0MSwgMywgMjQ4LCAzLCA0MSwgMywgCi0gICAgMjI5LCAxMzMsIDQxLCAzLCAyMTksIDE5MSwgNDEsIDMsIDIyMCwgMzIsIDQxLCAzLCAyMTAsIDQ0LCA0MSwgMywgMjEwLCAKLSAgICA2OSwgNDEsIDMsIDI1MCwgNTEsIDQxLCAzLCAyMzUsIDEwOCwgNDEsIDMsIDIyOCwgMTY5LCA0MSwgMywgMjExLCA4LCA0MSwgCi0gICAgMywgMjM0LCA5MiwgNDEsIDMsIDIyOSwgNDMsIDQxLCAzLCAyNDIsIDIxNCwgNDEsIDMsIDIzMCwgMjMwLCA0MSwgMywgMjI4LCAKLSAgICAyMzMsIDQxLCAzLCAyMjcsIDE0OCwgNDEsIDMsIDYxLCA0MSwgMywgMjU0LCAxMjMsIDQxLCAzLCAyMjksIDcyLCA0MSwgMywgCi0gICAgMTYyLCA0MSwgMywgMjQyLCAxOCwgNDEsIDMsIDIxMiwgNjUsIDQxLCAzLCAyMTIsIDU1LCA0MSwgMywgMTkwLCA0MSwgMywgCi0gICAgMjUyLCAxOCwgNDEsIDMsIDI1MiwgMTkxLCA0MSwgMywgMjMxLCAxMjQsIDQxLCAzLCAyMzMsIDI1MSwgNDEsIDMsIDIzMywgCi0gICAgMjUwLCA0MSwgMywgMjMxLCAxMCwgNDEsIDMsIDI0MywgNzksIDQxLCAzLCAyNDQsIDE5NiwgNDEsIDMsIDIxNCwgMjcsIDQxLCAKLSAgICAzLCAyMTcsIDEwNSwgNDEsIDMsIDIxNiwgMjA4LCA0MSwgMywgMjQ4LCAyNSwgNDEsIDMsIDI0OCwgMTUsIDQxLCAzLCAyMzMsIAotICAgIDEzNSwgNDEsIDMsIDIwNSwgNDEsIDMsIDI0OCwgMjIxLCA0MSwgMywgMjI5LCAxNDgsIDQxLCAzLCAyMDYsIDQxLCAzLCAKLSAgICAyMjAsIDEwMiwgNDEsIDMsIDIxMCwgMTE2LCA0MSwgMywgMjEwLCA4MiwgNDEsIDMsIDI1MSwgMzMsIDQxLCAzLCAyMzUsIAotICAgIDE0MSwgNDEsIDMsIDIyOCwgMTg1LCA0MSwgMywgMTkxLCA0MSwgMywgMTc2LCA0MSwgMywgMjM0LCAyMzQsIDQxLCAzLCAKLSAgICAyMjksIDU2LCA0MSwgMywgMjQzLCAxMzUsIDQxLCAzLCAxODQsIDQxLCAzLCAxOTcsIDQxLCAzLCAyMjcsIDE2NSwgNDEsIDMsIAotICAgIDIyNiwgMTgzLCA0MSwgMywgMjI2LCAxNzksIDQxLCAzLCAyNDEsIDUzLCA0MSwgMywgMjExLCAyMTUsIDQxLCAzLCAyMTEsIAotICAgIDIxMSwgNDEsIDMsIDIyNCwgMjQ5LCA0MSwgMywgMjUyLCA5LCA0MSwgMywgMjUxLCAxOTMsIDQxLCAzLCAyMzEsIDEwNCwgCi0gICAgNDEsIDMsIDIzMywgMjQyLCA0MSwgMywgMjMwLCAyNTUsIDQxLCAzLCAyNDMsIDY3LCA0MSwgMywgMjQ0LCAzNCwgNDEsIDMsIAotICAgIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxNywgNDEsIDMsIDIxNiwgMTUzLCA0MSwgMywgMjQ4LCA2LCA0MSwgMywgMjQ4LCAxMCwgCi0gICAgNDEsIDMsIDIzMiwgMTI3LCA0MSwgMywgMjIyLCAxOTcsIDQxLCAzLCAyNDcsIDEyNSwgNDEsIDMsIDIyOSwgMTIwLCA0MSwgCi0gICAgMywgMjE5LCA0MCwgNDEsIDMsIDIyMCwgMSwgNDEsIDMsIDIxMCwgMjEsIDQxLCAzLCAyMTAsIDY2LCA0MSwgMywgMjQ5LCAKLSAgICAxNzQsIDQxLCAzLCAyMzUsIDU5LCA0MSwgMywgMjI4LCAxNTksIDQxLCAzLCAyMTAsIDIyOSwgNDEsIDMsIDIzNCwgMTAsIAotICAgIDQxLCAzLCAyMjksIDQxLCA0MSwgMywgMjQyLCAxNjQsIDQxLCAzLCAyMzAsIDEzMiwgNDEsIDMsIDIyOCwgNjQsIDQxLCAzLCAKLSAgICAyMjcsIDEzMiwgNDEsIDMsIDcwLCA0MSwgMywgMjE0LCAxOTAsIDQxLCAzLCAyNDAsIDIyMiwgNDEsIDMsIDI0MCwgMjEyLCAKLSAgICA0MSwgMywgMjExLCAxOTUsIDQxLCAzLCAyMTEsIDE4OSwgNDEsIDMsIDIyNCwgMTUwLCA0MSwgMywgMjUyLCA4LCA0MSwgMywgCi0gICAgMjUxLCAxMjUsIDQxLCAzLCAyMzEsIDEwMywgNDEsIDMsIDIzMywgMjQwLCA0MSwgMywgMjMwLCAyNTQsIDQxLCAzLCAyNDMsIAotICAgIDY2LCA0MSwgMywgMjQzLCAyMzQsIDQxLCAzLCAyMTIsIDExNiwgNDEsIDMsIDIxNSwgMTE4LCA0MSwgMywgMjE2LCAxMzYsIAotICAgIDQxLCAzLCAyNDgsIDQsIDQxLCAzLCAyNDgsIDksIDQxLCAzLCAyMzIsIDk4LCA0MSwgMywgMjIyLCAxNDAsIDQxLCAzLCAKLSAgICAyNDYsIDc4LCA0MSwgMywgMjI5LCAxMTUsIDQxLCAzLCAyMTgsIDgzLCA0MSwgMywgMjE5LCAyMjUsIDQxLCAzLCAyMTAsIAotICAgIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgMTEyLCA0MSwgMywgMjM1LCA1MSwgNDEsIDMsIDIyOCwgMTU1LCA0MSwgCi0gICAgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIxNywgNDEsIDMsIDIyOSwgNDAsIDQxLCAzLCAyNDIsIDExMywgNDEsIDMsIAotICAgIDIzMCwgMTAyLCA0MSwgMywgMjI3LCAyMzcsIDQxLCAzLCAyMjcsIDEyOCwgNDEsIDMsIDc2LCA0MSwgMywgMjI2LCAxOTYsIAotICAgIDQxLCAzLCAyMjksIDAsIDQxLCAzLCAyNDEsIDY4LCA0MSwgMywgMjQxLCA1NiwgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgCi0gICAgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE2LCA0MSwgMywgMjUyLCAxMCwgNDEsIDMsIDI1MSwgMjA1LCA0MSwgMywgMjMxLCAKLSAgICAxMDUsIDQxLCAzLCAyMzMsIDI0MywgNDEsIDMsIDIzMSwgMSwgNDEsIDMsIDI0MywgNjksIDQxLCAzLCAyNDMsIDY4LCA0MSwgCi0gICAgMywgMjQ0LCA0MywgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTExLCA0MSwgMywgMjE2LCAxNTYsIDQxLCAzLCAyNDgsIDcsIAotICAgIDQxLCAzLCAyNDgsIDExLCA0MSwgMywgMjMyLCAxNTYsIDQxLCAzLCAyMjIsIDIxMSwgNDEsIDMsIDI0NywgMTQ1LCA0MSwgMywgCi0gICAgMjI5LCAxMjQsIDQxLCAzLCAyMTksIDU4LCA0MSwgMywgMjIwLCA3LCA0MSwgMywgMjEwLCAyMywgNDEsIDMsIDIxMCwgNjcsIAotICAgIDQxLCAzLCAyNDksIDIzOCwgNDEsIDMsIDIzNSwgNjgsIDQxLCAzLCAyMjgsIDE2MCwgNDEsIDMsIDIxMCwgMjQ0LCA0MSwgMywgCi0gICAgMjM0LCAyOCwgNDEsIDMsIDIyOSwgNDIsIDQxLCAzLCAyNDIsIDE3NCwgNDEsIDMsIDIzMCwgMTYxLCA0MSwgMywgMjI4LCAKLSAgICA3NCwgNDEsIDMsIDIyNywgMTM0LCA0MSwgMywgNzUsIDQxLCAzLCAyNDUsIDE1MCwgNDEsIDMsIDIyOSwgNjEsIDQxLCAzLCAKLSAgICAyNDEsIDIzOCwgNDEsIDMsIDI0MSwgMjA5LCA0MSwgMywgMjEyLCAyMiwgNDEsIDMsIDIxMiwgMTIsIDQxLCAzLCAyMjUsIAotICAgIDIyMSwgNDEsIDMsIDI1MiwgMTQsIDQxLCAzLCAyNTIsIDc1LCA0MSwgMywgMjMxLCAxMTcsIDQxLCAzLCAyMzMsIDI0OCwgCi0gICAgNDEsIDMsIDIzMywgMjQ2LCA0MSwgMywgMjMxLCA3LCA0MSwgMywgMjQzLCA3NiwgNDEsIDMsIDI0MywgNzQsIDQxLCAzLCAKLSAgICAyNDQsIDE1NCwgNDEsIDMsIDIxMywgMjU1LCA0MSwgMywgMjE3LCAyMiwgNDEsIDMsIDIxNiwgMTk1LCA0MSwgMywgMjQ4LCAKLSAgICAxNywgNDEsIDMsIDI0OCwgMTQsIDQxLCAzLCAyMzMsIDU4LCA0MSwgMywgMjIzLCAxMjgsIDQxLCAzLCAyNDgsIDkwLCA0MSwgCi0gICAgMywgMjI5LCAxNDAsIDQxLCAzLCAyMjEsIDE4MSwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIDk0LCA0MSwgMywgMjEwLCAKLSAgICA3NCwgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMjYsIDQxLCAzLCAyMjgsIDE3OCwgNDEsIDMsIDIxMSwgNDcsIAotICAgIDQxLCAzLCAyMzQsIDE4MiwgNDEsIDMsIDIyOSwgNTIsIDQxLCAzLCAyMjksIDQ4LCA0MSwgMywgMjQzLCA2MiwgNDEsIDMsIAotICAgIDI0MywgNTEsIDQxLCAzLCAyMzEsIDkxLCA0MSwgMywgMjI5LCAxMDcsIDQxLCAzLCAyMjcsIDE1NiwgNDEsIDMsIDIyOSwgCi0gICAgNzksIDQxLCAzLCAyMzMsIDIyLCA0MSwgMjQ5LCAyMTksIDQxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDQxLCAyMjQsIDEzLCAKLSAgICA3OCwgNDEsIDMsIDIyOSwgMTIzLCAyNDQsIDE5NiwgNDEsIDMsIDIyOSwgMTIzLCAxNzYsIDQxLCAzLCAyMjksIDEyMywgCi0gICAgMjE5LCA0MCwgNDEsIDE2LCAyNDQsIDE0NCwgNDEsIDE2LCAyMzQsIDE4MCwgNDEsIDE2LCAyMTYsIDgxLCA0MSwgMTYsIAotICAgIDIyOCwgMjA4LCA0MSwgMTYsIDI1MiwgMTQ3LCA0MSwgMTYsIDI0NCwgMTk1LCA0MSwgMTYsIDIxNywgMTAxLCA0MSwgMTYsIAotICAgIDI0OCwgMTc2LCA0MSwgMTYsIDI0NywgMTI0LCA0MSwgMTYsIDIzMywgMjA2LCA0MSwgMTYsIDIxNiwgMjEsIDQxLCAxNiwgCi0gICAgMjQ3LCAxNDQsIDQxLCAxNiwgMjM1LCA2MCwgNDEsIDIxLCAyMTAsIDg2LCA0MSwgMjEsIDExMCwgNDEsIDIxLCAxMDUsIDQxLCAKLSAgICAyMSwgMTU4LCA0MSwgMjEsIDE2MSwgNDEsIDIxLCAxODksIDQxLCAyMSwgMTk0LCA0MSwgMjEsIDE5OCwgNDEsIDIxLCAxOTUsIAotICAgIDQxLCAyMSwgMjAwLCA0MSwgMywgMjI5LCAxMjMsIDE4NCwgNDEsIDMsIDIyOSwgMTIzLCAyNDcsIDE0NSwgMzMsIDYsIDEsIAotICAgIDIxMCwgOTAsIDMzLCA0LCAxLCAyMTAsIDkwLCAzMywgNiwgMSwgMjQ2LCAzNCwgMzMsIDQsIDEsIDI0NiwgMzQsIDMzLCA2LCAKLSAgICAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNCwgMSwgMjIzLCA0OSwgMjQ2LCAzNiwgMzMsIDYsIDEsIDIzNSwgMTg1LCAzMywgCi0gICAgNCwgMSwgMjM1LCAxODUsIDMzLCA2LCAxLCAyNDcsIDE2MSwgMzMsIDQsIDEsIDI0NywgMTYxLCAzMywgNiwgMSwgMjMwLCAKLSAgICAxNDAsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjMwLCAxNDAsIDIxNCwgMjA1LCAzMywgNiwgMSwgMjUxLCAxMzYsIDIyNiwgCi0gICAgMjAxLCAzMywgNCwgMSwgMjUxLCAxMzYsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjI5LCA4NywgMjExLCAzMSwgMzMsIDQsIDEsIAotICAgIDIyOSwgODcsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNTIsIDE4NSwgMjExLCAzMSwgMzMsIDQsIDEsIDIxMSwgCi0gICAgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNiwgMSwgMjM1LCAxODMsIDIxMSwgNTksIDMzLCA0LCAxLCAyMzUsIAotICAgIDE4MywgMjExLCA1OSwgMzMsIDYsIDEsIDIyMywgNDksIDIxMCwgMjEyLCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE4MywgNjEsIDMzLCA0LCAxLCAyMzUsIDE4MywgNjEsIDMzLCA2LCAxLCAyNTAsIDAsIDIzMiwgCi0gICAgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MCwgMCwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUxLCAyMTQsIAotICAgIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyMTQsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDI1MCwgMCwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjEwLCAyNDYsIDMzLCA0LCAxLCAyMTAsIDI0NiwgMzMsIDYsIDEsIDIyMywgNDksIDIxNSwgMTc4LCAzMywgNCwgMSwgMjIzLCAKLSAgICA0OSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ4LCA5MCwgMzMsIAotICAgIDYsIDEsIDIxOSwgNTIsIDI0NSwgMTc0LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA2LCAxLCAyMTksIDUyLCAKLSAgICAyNDUsIDE1OSwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0NSwgMTU5LCAzMywgNiwgMSwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgCi0gICAgMjMwLCAxNDQsIDc2LCAzMywgNiwgMSwgMjUxLCAyNDAsIDc2LCAzMywgNCwgMSwgMjUxLCAyNDAsIDc2LCAzMywgNiwgMSwgCi0gICAgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDQsIDEsIDUyLCAyMzAsIDE0NCwgNzYsIDMzLCAxLCAyMzAsIDg2LCA3NiwgMzgsIDMzLCAKLSAgICAyMTIsIDEwMCwgMzgsIDMzLCAyMTYsIDI0OCwgMjMwLCAxOTEsIDUwLCAzOCwgMzMsIDI0MCwgMjExLCAyMzAsIDE5MSwgNTAsIAotICAgIDM4LCAzMywgMjE2LCAxNDgsIDIzMCwgMTkxLCA1MCwgMjE5LCA5MywgMjUzLCAyMTYsIDM4LCAzMywgMSwgMjE0LCAyMDIsIAotICAgIDIzNiwgNjAsIDM4LCAzMywgMSwgNzMsIDM4LCAzMywgMSwgMjExLCA4LCAzOCwgMzMsIDEsIDcwLCAzOCwgMzMsIDEsIDI0MiwgCi0gICAgMywgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgMzgsIDMzLCAxLCAyMTksIDUyLCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwMSwgCi0gICAgMzgsIDMzLCAyMzQsIDE5MiwgMzgsIDMzLCAyMjUsIDIyNywgMzMsIDIzNCwgMTkyLCAzMywgMjI1LCAyMjcsIDMzLCA2LCAxLCAKLSAgICAyNDYsIDQ2LCAzMywgNCwgMSwgMjQ2LCA0NiwgMzMsIDYsIDEsIDI0NiwgMjcsIDMzLCA0LCAxLCAyNDYsIDI3LCAzMywgNiwgCi0gICAgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIwNiwgMzMsIDQsIDEsIDI1MCwgMjA2LCAKLSAgICAzMywgNiwgMSwgMjQ2LCAyNSwgMzMsIDQsIDEsIDI0NiwgMjUsIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAKLSAgICAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjAsIDMzLCA0LCAxLCAyMTUsIDE2MCwgMzMsIDYsIDEsIDIxNSwgMTY0LCAzMywgCi0gICAgNCwgMSwgMjE1LCAxNjQsIDMzLCA2LCAxLCAyMTcsIDI4LCAzMywgNCwgMSwgMjE3LCAyOCwgMzMsIDYsIDEsIDI0MCwgMTk4LCAKLSAgICAzMywgNCwgMSwgMjQwLCAxOTgsIDMzLCA2LCAxLCAyMTksIDIwNiwgMzMsIDQsIDEsIDIxOSwgMjA2LCAzOCwgMzMsIDEsIAotICAgIDIzNSwgMTgzLCA3NSwgMjAsIDEsIDYxLCAyMCwgMSwgMTc2LCAyMCwgMSwgNzAsIDIwLCAxLCAyMzMsIDIxNywgMjAsIDEsIAotICAgIDI0NSwgMjA5LCAyMCwgMSwgMjIzLCAxMDgsIDIwLCAxLCAyMTcsIDg2LCAyMCwgMSwgNzYsIDIwLCAxLCAyMjcsIDE0OCwgCi0gICAgMjAsIDEsIDczLCAyMCwgMSwgMjMzLCAxMzUsIDIwLCAxLCAxOTAsIDIwLCAxLCAyMjIsIDIzOSwgMjAsIDEsIDIyMywgMjksIAotICAgIDIwLCAxLCAyMzMsIDQ5LCAyMCwgMSwgMjMxLCA3OSwgMjAsIDEsIDIxNywgMTAxLCAyMCwgMSwgMjI5LCAxNDYsIDIwLCAxLCAKLSAgICAyMjgsIDE4MywgMjAsIDEsIDE5MywgMjAsIDEsIDIxOCwgNCwgMjAsIDEsIDIzMCwgMTAyLCAyMCwgMSwgMjIwLCAyNywgMjAsIAotICAgIDEsIDIxOSwgMTkxLCAyMCwgMSwgMjIwLCAzNywgMjAsIDEsIDIyMCwgMTIzLCAyMCwgMSwgMjMzLCAxNTUsIDIwLCAxLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDIyNywgMjA5LCAyMCwgMSwgMjI3LCAyMzcsIDIwLCAxLCAyMjgsIDE1NCwgMjAsIDEsIDIxMCwgCi0gICAgMjI2LCAyMCwgMSwgMjE5LCAyMjUsIDIwLCAxLCAyMTAsIDE4NywgMjAsIDEsIDE5MSwgMjAsIDEsIDIyOCwgOSwgMjAsIDEsIAotICAgIDIzNCwgMTQyLCAyMCwgMSwgMjI1LCAxNTEsIDIwLCAxLCAyMjgsIDE3NiwgMjAsIDEsIDIyNywgMjQ2LCAyMCwgMSwgMjI0LCAKLSAgICAxNDQsIDIwLCAxLCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMjExLCAyMCwgMSwgMjQ0LCAxNDcsIDIwLCAxLCAyMjIsIDE0MCwgCi0gICAgMjAsIDEsIDIzMiwgOTgsIDIwLCAxLCAyMzAsIDIzMCwgMjAsIDEsIDIyOCwgMjMzLCAyMCwgMSwgMjIzLCA1MSwgMjAsIDEsIAotICAgIDIyMywgMTcxLCAyMCwgMSwgMjM0LCAxNjUsIDIwLCAxLCAyMjksIDcsIDIwLCAxLCAyMjksIDU2LCAyMCwgMSwgMjI5LCA3NywgCi0gICAgMjAsIDEsIDIyMCwgNywgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjQzLCAyMzQsIDIwLCAxLCAyNDQsIDM3LCAyMCwgMSwgCi0gICAgMjEyLCA2NSwgMjAsIDEsIDE5NywgMjAsIDEsIDIzMiwgMjQxLCAyMCwgMSwgMjI1LCAxMDgsIDIwLCAxLCAyMzIsIDExOSwgCi0gICAgMjAsIDEsIDIzNCwgMjgsIDIwLCAxLCAyMzEsIDExNCwgMjAsIDEsIDIyMywgODMsIDIwLCAxLCAyMzEsIDU4LCAyMCwgMSwgCi0gICAgMTg0LCAyMCwgMSwgMjE2LCAxMTcsIDIwLCAxLCAyMzQsIDkyLCAyMCwgMSwgMjMwLCAxNjEsIDIwLCAxLCAyMzEsIDEyMiwgCi0gICAgMjAsIDEsIDIxNiwgMjMwLCAyMCwgMSwgMjMzLCAyNTEsIDIwLCAxLCAyMTYsIDI0NywgMjAsIDEsIDIyNywgMjM4LCAyMCwgCi0gICAgMSwgMjIxLCAyNTEsIDIwLCAxLCAyNDQsIDE5MiwgMjAsIDEsIDIzMywgMjUzLCAyMCwgMSwgMjM0LCAyNCwgMjAsIDM4LCAKLSAgICAxNjQsIDIzNCwgNSwgMjAsIDM4LCAxNjQsIDIxNSwgMTEwLCAyMCwgMjI4LCAxODIsIDIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDIwLCAyNDksIDIyNiwgMjAsIDI0OSwgMjE5LCAyMCwgMjIwLCAxNTAsIDIwLCAyMjQsIDEzLCA3OCwgNTgsIDEsIDI1MCwgCi0gICAgOTYsIDEzOCwgMjEwLCAyNTQsIDIyNSwgNjEsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyNSwgNjEsIDU4LCAxLCAKLSAgICAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjAsIDg0LCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAyMjAsIDg0LCAKLSAgICA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjI0LCAzMCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgCi0gICAgMjI0LCAzMCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMiwgMTQwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAKLSAgICAyMTEsIDcwLCAyMjIsIDE0MCwgNTgsIDEsIDI0NSwgMjAsIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAKLSAgICAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMTgsIAotICAgIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIAotICAgIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIAotICAgIDIyNSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAKLSAgICAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyMzMsIAotICAgIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjMzLCAzOSwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjMzLCAzOSwgMTM4LCAKLSAgICAxMzAsIDU4LCAxLCA1OSwgNjcsIDEzMCwgNTgsIDEsIDU5LCAyMTksIDk1LCA1OCwgMSwgNTksIDIwMywgMTMwLCA1OCwgMSwgCi0gICAgMjMyLCAxMDgsIDQ0LCAyNDksIDE2MSwgMjU0LCAxMDksIDU4LCAxLCAyMjMsIDE1NywgMTIwLCA3NCwgNTgsIDEsIDIyMywgCi0gICAgMTU3LCAxMjQsIDc0LCA1OCwgMSwgMjIzLCAxNTcsIDI0NSwgMzEsIDc4LCA1OCwgMSwgMjIzLCAxNTcsIDIzNSwgMTkzLCAKLSAgICAyNDUsIDMxLCA3OCwgNTgsIDEsIDEyMSwgMjM1LCAxOTMsIDI0NSwgMzEsIDc4LCA1OCwgMSwgMjE4LCAxMTEsIDIyLCAxMjUsIAotICAgIDIxNiwgMzAsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyMSwgMjE2LCAzMCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTcwLCAKLSAgICA3LCA0LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIDcsIDYsIDEsIDI0NSwgMTk5LCAyNTQsIDE5NiwgNywgNCwgMSwgMjQ1LCAKLSAgICAxOTksIDI1NCwgMTk2LCA3LCA2LCAxLCAyNDEsIDIwNywgNywgNCwgMSwgMjQxLCAyMDcsIDcsIDYsIDEsIDIxNSwgNDAsIDcsIAotICAgIDQsIDEsIDIxNSwgNDAsIDcsIDYsIDEsIDIxNSwgMjI5LCA3LCA0LCAxLCAyMTUsIDIyOSwgNywgNiwgMSwgMjQ5LCAxMTAsIAotICAgIDcsIDQsIDEsIDI0OSwgMTEwLCA3LCA2LCAxLCAyNDksIDExMSwgMiwgMjQ5LCAyMTksIDcsIDQsIDEsIDI0OSwgMTExLCAyLCAKLSAgICAyNDksIDIxOSwgNywgMSwgNCwgNiwgMjQ1LCA2LCA3LCAxLCA0LCA2LCAyMjIsIDkxLCA3LCA2LCAxLCAyNTUsIDczLCA3LCAKLSAgICA0LCAxLCAyNTUsIDczLCA3LCA2LCAxLCAyNTQsIDczLCA3LCA0LCAxLCAyNTQsIDczLCA3LCA2LCAxLCAyNTMsIDE5MiwgNywgCi0gICAgNCwgMSwgMjUzLCAxOTIsIDcsIDYsIDEsIDI1MywgMTc2LCA3LCA0LCAxLCAyNTMsIDE3NiwgNywgNiwgMSwgMjUzLCAxNzcsIAotICAgIDIsIDIwMywgMTMwLCA3LCA0LCAxLCAyNTMsIDE3NywgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTY3LCA3LCA0LCAxLCAKLSAgICAyNTMsIDE2NywgNywgNiwgMSwgMjIzLCA0OSwgMjUxLCA2NywgMiwgMjQ3LCAxMjAsIDcsIDQsIDEsIDIyMywgNDksIDI1MSwgCi0gICAgNjcsIDIsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgOTEsIDcsIDYsIAotICAgIDEsIDIzNSwgMjQsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAKLSAgICAyMzUsIDI0LCAyLCAyMTgsIDEwMywgMjIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjE4LCAxMDMsIAotICAgIDIyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIDI1MSwgMTM1LCAxNTYsIDcsIDQsIDEsIDI1MSwgMTM1LCAxNTYsIDcsIDYsIAotICAgIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAxOTksIDIxOCwgMTAzLCAyMjYsIDEyMCwgNywgNCwgMSwgMTQ0LCAyLCAxOTksIDIxOCwgMTAzLCAyMjYsIDEyMCwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyMzIsIDEyMywgNywgNCwgMSwgMTQ0LCAyLCAyMzIsIDEyMywgNywgNiwgMSwgMjI2LCAxODMsIDcsIDQsIAotICAgIDEsIDIyNiwgMTgzLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAKLSAgICAyMjYsIDEwNiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgCi0gICAgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDI0NCwgNTMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDIyOSwgMjE3LCA3NywgCi0gICAgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCA3LCA2LCAxLCAyMjQsIDk3LCAyLCAyMTgsIDEwMywgCi0gICAgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgCi0gICAgNiwgMSwgMjI0LCA5NywgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIAotICAgIDEsIDIyMywgMjI0LCAyMjIsIDE4NiwgNywgNCwgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMjIsIDEzMCwgCi0gICAgMjIyLCAxODYsIDcsIDQsIDEsIDIyMiwgMTMwLCAyMjIsIDE4NiwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDI0NywgMjU1LCAKLSAgICA5MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgCi0gICAgMTA2LCA3LCA2LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgCi0gICAgMjE2LCAxNTIsIDIsIDkxLCA3LCA0LCAxLCAyMTYsIDE1MiwgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUyLCAyLCAyMTgsIAotICAgIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgCi0gICAgMzksIDcsIDYsIDEsIDIxMywgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA2NSwgNywgNCwgMSwgMjQ1LCAKLSAgICA2NSwgNywgNiwgMSwgMjM1LCAxNzEsIDcsIDQsIDEsIDIzNSwgMTcxLCA3LCA2LCAxLCAyNDksIDIwNywgNywgNCwgMSwgCi0gICAgMjQ5LCAyMDcsIDU4LCAxLCAyMTQsIDEzMywgNywgNCwgMSwgMjQ2LCA2OSwgNywgNCwgMSwgMjMyLCA4NCwgNywgNCwgMSwgCi0gICAgMjMwLCA4MCwgNywgNCwgMSwgMjI3LCAyMDEsIDcsIDQsIDEsIDIyMiwgMTI5LCA3LCAxLCA0LCA2LCAyMjIsIDEyOSwgNywgCi0gICAgNCwgMSwgMjE1LCAxMDgsIDcsIDQsIDEsIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNCwgMSwgCi0gICAgMjM1LCAyMTMsIDI0OSwgNjAsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDUsIDYsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDUsIDYsIAotICAgIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDYsIDEsIDIxNSwgOTQsIDE1NiwgNywgNCwgMSwgMjE1LCA5NCwgCi0gICAgMTU2LCA3LCA2LCAxLCAyMzUsIDIxMywgMTUzLCA3LCA0LCAxLCAyMzUsIDIxMywgMTUzLCA3LCA2LCAxLCAyMzUsIDIxMywgCi0gICAgMjIyLCA5MSwgNywgNCwgMSwgMjM1LCAyMTMsIDIyMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjEzLCAyMTcsIDE1MiwgNywgNCwgCi0gICAgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA1OCwgMSwgMTIxLCAyNTAsIDMxLCAyNTUsIDE0LCA1OCwgMSwgMjQ5LCAyMjYsIDU4LCAKLSAgICAxLCAyMTksIDI1MSwgMjQ1LCA5OCwgNTAsIDcsIDYsIDEsIDIyMSwgMjU1LCA3LCA0LCAxLCAyMjEsIDI1NSwgNywgNiwgMSwgCi0gICAgMjE1LCA5NCwgMjQyLCA2MCwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDI0MSwgNTIsIDIyLCAyNTIsIDQxLCA3LCAKLSAgICA2LCAxLCAyMzAsIDI2LCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxMzAsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDEzMCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgMjQ4LCA5MSwgCi0gICAgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCAKLSAgICA0LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgCi0gICAgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMTAzLCA1OCwgMSwgNiwgMjQyLCA2MSwgMiwgCi0gICAgOTEsIDU4LCAxLCA0LCAyNywgMjI2LCAyMzQsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE5MywgNywgMjQ1LCAxMDMsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNiwgNywgMjQ1LCAxMDMsIDEsIDIyMywgNDksIDIyNiwgMTA1LCA3LCAyNDUsIDEwMywgMSwgMjM1LCAKLSAgICAxOTMsIDE5MywgNywgMjQ1LCAxMDMsIDEsIDI0MCwgMTU0LCAyMzIsIDEyOSwgNywgMjQ1LCAxMDMsIDEsIDI1NCwgMjMsIAotICAgIDE5MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA2MSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3MywgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCA1LCAyNDYsIDQ4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDcwLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDc1LCAKLSAgICAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDc2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDUsIDI0MSwgMjUzLCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDIzNCwgMjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM0LCAxMDUsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMjQyLCAxNzQsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQyLCAyMjQsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgCi0gICAgMjU0LCA3NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDksIDIzOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTAsIDg2LCAKLSAgICAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNSwgNjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCAxMDksIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjE1LCAxMzMsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE1LCAxMzksIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjQ4LCAxMDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCAxMTQsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMTExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxNiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0NywgCi0gICAgMTQ1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OCwgNywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjgsIDc0LCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDEsIDIyNSwgMTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxMjEsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjUxLCAyMDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjUyLCAxMCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyMzAsIDE2MSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjIsIDIxMSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAKLSAgICAyMzIsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjIsIDE2NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTksIAotICAgIDU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0MSwgNjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDYxLCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNzAsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMjUsIDUsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCAyMjYsIDE4MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAKLSAgICAyMjUsIDEyLCAyMzEsIDE1OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NywgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NSwgMjI4LCA1NiwgCi0gICAgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEzNCwgMjI0LCAxOSwgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAKLSAgICAyMTksIDExNywgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjI4LCA1NiwgMjM1LCAyNDAsIAotICAgIDI0NCwgMiwgMTM0LCAyMTksIDExNiwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjIsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjI1LCA0MCwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjIsIDExOCwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjQsIDIzLCAKLSAgICA3OCwgMjI1LCAxNDQsIDEsIDE3NiwgMjI1LCAxNDQsIDEsIDIzNCwgMTMyLCAyMjUsIDE0NCwgMSwgMjQzLCAxMzUsIDIyNSwgCi0gICAgMTQ0LCAxLCAyMjksIDc3LCAyMjUsIDE0NCwgMSwgMjUxLCAzMywgMjI1LCAxNDQsIDEsIDI1MCwgMTU3LCAyMjUsIDE0NCwgCi0gICAgMSwgMjM1LCAxNDEsIDIyNSwgMTQ0LCAxLCAyMjcsIDE2NSwgMjI1LCAxNDQsIDEsIDIxNywgMTA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjE2LCAyMDgsIDIyNSwgMTQ0LCAxLCAyNDgsIDIyMSwgMjI1LCAxNDQsIDEsIDE5NywgMjI1LCAxNDQsIDEsIDE5MCwgMjI1LCAKLSAgICAxNDQsIDEsIDIyNSwgMTQ3LCAyMjUsIDE0NCwgMSwgMjUyLCAxOTEsIDIyNSwgMTQ0LCAxLCAxODQsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTUsIDE4MywgMjI1LCAxNDQsIDEsIDIxNSwgMTc1LCAyMjUsIDE0NCwgMSwgMjQ2LCAzOCwgMjI1LCAxNDQsIDEsIDIxMiwgCi0gICAgNjUsIDIyNSwgMTQ0LCAxLCAyMTAsIDgyLCAyMjUsIDE0NCwgMSwgMjEwLCAxMTYsIDIyNSwgMTQ0LCAxLCA0LCA2MSwgMjI1LCAKLSAgICAxNDQsIDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIwNSwgMjI1LCAxNDQsIDEsIDIzMywgMTM1LCAyMjUsIDE0NCwgMSwgMjIwLCAKLSAgICAxMDIsIDIyNSwgMTQ0LCAxLCAyMDYsIDIyNSwgMTQ0LCAxLCAxNjIsIDIyNSwgMTQ0LCAxLCA2MSwgMjI1LCAxNDQsIDEsIAotICAgIDczLCAyMjUsIDE0NCwgMSwgNzAsIDIyNSwgMTQ0LCAxLCA3NSwgMjI1LCAxNDQsIDEsIDc2LCAyMjUsIDE0NCwgMSwgMjI0LCAKLSAgICA4OCwgMjI1LCAxNDQsIDEsIDIxMSwgMTY1LCAyMjUsIDE0NCwgMSwgMjQ0LCAxOTYsIDIyNSwgMTQ0LCAxLCAyNDMsIDI5LCAKLSAgICAyMjUsIDE0NCwgMSwgMjQ1LCAyMDksIDIyNSwgMTQ0LCAyMTgsIDczLCAxLCAyMTIsIDY1LCAyMjUsIDE0NCwgMjE4LCA3MywgCi0gICAgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjE1LCAxNTYsIDIyNSwgMTQ0LCAxLCAyMTUsIDE0NCwgMjI1LCAxNDQsIDEsIDI0OCwgCi0gICAgMTM1LCAyMjUsIDE0NCwgMSwgMjI4LCAxMTAsIDIyNSwgMTQ0LCAxLCAyNTQsIDE0MSwgMTkxLCAyMjUsIDE0NCwgMSwgMjEzLCAKLSAgICAxMzQsIDIyMCwgMTAyLCAyMjUsIDE0NCwgMSwgMjEzLCAxMzUsIDE2MiwgMjI1LCAxNDQsIDEsIDI1MywgMjIzLCAyNDQsIAotICAgIDE5NiwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIwNSwgMjI1LCAxNDQsIDIxOCwgMjUsIDEsIDIwNSwgMjI1LCAxNDQsIDEsIAotICAgIDI1MCwgMjU1LCAyMjUsIDE0NCwgMjE5LCAxNTUsIDI0MSwgMjM2LCA3OCwgMjI1LCAxNDQsIDUyLCAyNDEsIDIzNiwgNzgsIAotICAgIDIyNSwgMTQ0LCAxNjQsIDIyMCwgOTUsIDIyNSwgMTQ0LCAxNjQsIDUyLCAyMjAsIDk1LCAxNzksIDUsIDI1NCwgNzUsIDE3OSwgCi0gICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA3MywgMTc5LCAxLCA3MywgMTc5LCAxLCAyMzYsIDMzLCAKLSAgICAxNzksIDEsIDcwLCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODAsIAotICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTc5LCAxLCA3NSwgMTc5LCAxLCAyNDUsIDIwOSwgCi0gICAgMTc5LCAxLCAyNTQsIDIwMSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyMjYsIDE4MywgMTc5LCAxLCAyNTMsIDE5MiwgMTc5LCAxLCAKLSAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzIsIDE3OSwgMSwgMjQzLCAxMzUsIDE3OSwgMSwgMjQyLCAyNDksIDE3OSwgMSwgMjI5LCAKLSAgICA3NywgMTc5LCAxLCAyNTEsIDMzLCAxNzksIDEsIDI1MCwgMTU3LCAxNzksIDEsIDIzNSwgMTQxLCAxNzksIDEsIDIzNSwgCi0gICAgMTE0LCAxNzksIDEsIDIyNywgMTY1LCAxNzksIDEsIDIxNSwgMTU2LCAxNzksIDEsIDIxNSwgMTQ0LCAxNzksIDEsIDI0OCwgCi0gICAgMTM1LCAxNzksIDEsIDI0OCwgMTE5LCAxNzksIDEsIDIyOCwgMTEwLCAxNzksIDEsIDIxNywgMTA1LCAxNzksIDEsIDIxNiwgCi0gICAgMjA4LCAxNzksIDEsIDI0OCwgMjIxLCAxNzksIDEsIDI0OCwgMjUsIDE3OSwgMSwgMTk3LCAxNzksIDEsIDE5MCwgMTc5LCAxLCAKLSAgICAyMjUsIDE0NywgMTc5LCAxLCAyNTIsIDE5MSwgMTc5LCAxLCAyNTIsIDE4LCAxNzksIDEsIDE4NCwgMTc5LCAxLCAxOTEsIAotICAgIDE3OSwgMSwgMjA1LCAxNzksIDEsIDIzMywgMTM1LCAxNzksIDEsIDIxNCwgMjcsIDE3OSwgMSwgMjIwLCAxMDIsIDE3OSwgMSwgCi0gICAgMjE4LCAyMjMsIDE3OSwgMSwgMjA2LCAxNzksIDEsIDE2MiwgMTc5LCAxLCAyMzIsIDE4NCwgMTc5LCAxMTYsIDUsIDI0MiwgCi0gICAgNDQsIDE3OSwgMjUsIDUsIDI1NSwgNzMsIDE3OSwgMjUsIDUsIDczLCAxNzksIDI1LCA1LCAyMzYsIDMzLCAxNzksIDI1LCA1LCAKLSAgICA3MCwgMTc5LCAyNSwgNSwgMjE0LCAxMTgsIDE3OSwgMjUsIDUsIDE0OSwgMTUzLCAxNzksIDI1LCA1LCAxNDksIDIyMiwgCi0gICAgMTgwLCAxNzksIDI1LCA1LCAxNDksIDE1NiwgMTc5LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTc5LCAyNSwgNSwgNzUsIAotICAgIDE3OSwgMjUsIDUsIDI0NSwgMjA5LCAxNzksIDI1LCA1LCAyNTQsIDIwMSwgMTc5LCAyNSwgNSwgNzYsIDE3OSwgMjUsIDUsIAotICAgIDIyNiwgMTgzLCAxNzksIDI1LCA1LCAyNTMsIDE5MiwgMTc5LCA1LCAyMTMsIDE1MiwgMTc5LCAyNDgsIDE3OCwgMTc5LCA1MiwgCi0gICAgMjQ4LCAxNzgsIDE3OSwgMjEsIDIxMCwgODYsIDE3OSwgMjEsIDExMCwgMTc5LCAyMSwgMTA1LCAxNzksIDIxLCAxNTgsIAotICAgIDE3OSwgMjEsIDE2MSwgMTc5LCAyMSwgMTg5LCAxNzksIDIxLCAxOTQsIDE3OSwgMjEsIDE5OCwgMTc5LCAyMSwgMTk1LCAKLSAgICAxNzksIDIxLCAyMDAsIDM4LCA4NCwgMjEsIDIxMCwgODYsIDM4LCA4NCwgMjEsIDExMCwgMzgsIDg0LCAyMSwgMTA1LCAzOCwgCi0gICAgODQsIDIxLCAxNTgsIDM4LCA4NCwgMjEsIDE2MSwgMzgsIDg0LCAyMSwgMTg5LCAzOCwgODQsIDIxLCAxOTQsIDM4LCA4NCwgCi0gICAgMjEsIDE5OCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAyMDAsIDM4LCA4NCwgMSwgNjEsIDM4LCA4NCwgMSwgNzAsIAotICAgIDM4LCA4NCwgMSwgMTc2LCAzOCwgODQsIDEsIDE5NywgMzgsIDg0LCAxLCAxOTAsIDM4LCA4NCwgMSwgMjA1LCAzOCwgODQsIAotICAgIDEsIDIxMywgMTc2LCAzOCwgODQsIDUsIDI1MywgMTc1LCA4NCwgNSwgMjE5LCAxNywgMjUwLCAyNTUsIDg0LCA1LCAyNTEsIAotICAgIDAsIDIxMywgMTUyLCA4NCwgNSwgNTIsIDI1MSwgMCwgMjEzLCAxNTIsIDg0LCA1LCAyNTEsIDAsIDEwNSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMTU4LCA4NCwgNSwgMjUxLCAwLCAyNTMsIDE3NSwgODQsIDUsIDIyNCwgMTI0LCA4NCwgMjQzLCAxMDAsIDI0NCwgMTAzLCAKLSAgICA4NCwgMjUwLCAyMzgsIDg0LCAyNDEsIDIzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjEwLCA4NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTEwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxMDUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE1OCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTYxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxODksIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMjEsIDE5NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTk4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAKLSAgICAxOTUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDIwMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxNzYsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMjM0LCAxMzIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQzLCAxMzUsIDIzNCwgMTg4LCAyMzIsIAotICAgIDI0MiwgMSwgMjI5LCA3NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjIwLCAKLSAgICAxMDIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjEwLCAxMTYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI3LCAxNjUsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE3LCAxMDUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQwLCAyMjYsIDIzNCwgCi0gICAgMTg4LCAyMzIsIDI0MiwgMSwgMTk3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE5MCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICAyMjUsIDE0NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxODQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQ4LCAyMjEsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUyLCAxOTEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjA1LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMzMsIDEzNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICAyMTIsIDY1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNiwgMjA4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE2MiwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTQsIDI3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI1MSwgMzMsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI2LCAyMzQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgNzMsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI2LCAxODMsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDIxNCwgMjE0LCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzAsIDIzNCwgMTg4LCAyMzIsIAotICAgIDI0MiwgMjUsIDI0NSwgMjA5LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3NiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIAotICAgIDIyNSwgMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIDEyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgMjUxLCAKLSAgICAxMywgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCA1LCAyNDksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDIxOSwgCi0gICAgMTk5LCAyMjMsIDkzLCAxLCAxNzYsIDIyMywgOTMsIDEsIDI0MywgMTM1LCAyMjMsIDkzLCAxLCAyMjksIDc3LCAyMjMsIDkzLCAKLSAgICAxLCAyMTcsIDEwNSwgMjIzLCA5MywgMSwgMjQ4LCAyMjEsIDIyMywgOTMsIDEsIDE5NywgMjIzLCA5MywgMSwgMTkwLCAyMjMsIAotICAgIDkzLCAxLCAyNTIsIDE5MSwgMjIzLCA5MywgMSwgMTg0LCAyMjMsIDkzLCAxLCAyNTEsIDMzLCAyMjMsIDkzLCAxLCAyMzUsIAotICAgIDE0MSwgMjIzLCA5MywgMSwgMjI3LCAxNjUsIDIyMywgOTMsIDEsIDIwNiwgMjIzLCA5MywgMSwgMjA1LCAyMjMsIDkzLCAxLCAKLSAgICAyMzMsIDEzNSwgMjIzLCA5MywgMSwgMTkxLCAyMjMsIDkzLCAxLCAyMTIsIDY1LCAyMjMsIDkzLCAxLCAxNjIsIDIyMywgOTMsIAotICAgIDEsIDIzMSwgMTI0LCAyMjMsIDkzLCAxLCAyMjksIDU2LCAyMjMsIDkzLCAxLCAyMjksIDE0OCwgMjIzLCA5MywgMSwgMjI3LCAKLSAgICAxMzUsIDIyMywgOTMsIDEsIDYxLCAyMjMsIDkzLCAyNSwgNSwgNzMsIDIyMywgOTMsIDI1LCA1LCA3MCwgMjIzLCA5MywgMjUsIAotICAgIDUsIDc1LCAyMjMsIDkzLCAyNSwgNSwgMjU0LCAyMDEsIDIyMywgOTMsIDI1LCA1LCA3NiwgMjIzLCA5MywgMjUsIDUsIDI1MywgCi0gICAgMTkyLCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCA1NSwgMjIzLCA5MywgMjUsIDUsIDI0NSwgMjMzLCAyMjMsIDkzLCAxMTYsIDUsIAotICAgIDIyOSwgNzksIDIyMywgOTMsIDExNiwgNSwgMjMwLCAyNSwgMjIzLCA5MywgMTE2LCA1LCAxNTMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjQyLCA2MCwgMjIzLCA5MywgMjEzLCAxNTIsIDIyMywgOTMsIDIyMSwgMTczLCA3OCwgMjQsIDEwMCwgMjE2LCA5NywgMjQsIAotICAgIDEwMCwgMjE2LCA5NiwgMjQsIDEwMCwgMjE2LCA5NCwgMjQsIDEwMCwgMjE2LCA5OSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIAotICAgIDEwMCwgMjIzLCA1LCAyNCwgMTAwLCAyMjMsIDAsIDI0LCAxMDAsIDIyMywgMiwgMjQsIDEwMCwgMjIzLCAxOCwgMjQsIDEwMCwgCi0gICAgMjIzLCAxMSwgMjQsIDEwMCwgMjIzLCA0LCAyNCwgMTAwLCAyMjMsIDIzLCAyNCwgMTAwLCAyMjMsIDYsIDI0LCAxMDAsIAotICAgIDIyMywgMjUsIDI0LCAxMDAsIDIyMywgMjIsIDI0LCAxMDAsIDIzMCwgMjEzLCAyNCwgMTAwLCAyMzAsIDIwNCwgMjQsIDEwMCwgCi0gICAgMjMwLCAyMDcsIDI0LCAxMDAsIDIyNSwgODAsIDI0LCAxMDAsIDIyNSwgOTEsIDI0LCAxMDAsIDIyNSwgOTIsIDI0LCAxMDAsIAotICAgIDIxOCwgMjA3LCAyNCwgMTAwLCAyMzYsIDQ2LCAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMTgsIDIxOCwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDUsIDI0LCAxMDAsIDIyNSwgMTMwLCAyNCwgMTAwLCAyNDEsIDE2NywgMjQsIDEwMCwgMjE4LCAyMDIsIDE1NSwgCi0gICAgNSwgMjI2LCAyNywgMTU1LCA1LCAyNTAsIDE4NywgMTU1LCA1LCAyMzMsIDY2LCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIAotICAgIDYxLCAxNTUsIDEsIDI0MCwgMTU0LCAyMzQsIDE5MSwgMTU1LCAxLCA3MywgMTU1LCAxLCAyMzYsIDMzLCAxNTUsIDEsIDcwLCAKLSAgICAxNTUsIDEsIDIyNiwgOTAsIDI1MCwgMTYzLCAxNTUsIDEsIDIyOSwgNzgsIDIzMywgMjgsIDE1NSwgMSwgMjI5LCA3OCwgCi0gICAgMjMzLCAyOSwgMjIzLCAxNDIsIDE1NSwgMSwgNzUsIDE1NSwgMSwgMjU0LCAyMDEsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMTc2LCAKLSAgICAxNTUsIDEsIDIzNSwgMTMsIDIyMSwgMjI4LCAxNTUsIDEsIDIzNSwgMTMsIDIzMCwgNjYsIDE1NSwgMSwgMjQzLCAxMzUsIAotICAgIDE1NSwgMSwgMjQzLCAxMzYsIDIzMCwgNjYsIDE1NSwgMSwgMjI5LCA3NywgMTU1LCAxLCAyNTEsIDMzLCAxNTUsIDEsIDI1MSwgCi0gICAgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjM1LCAxNDEsIDE1NSwgMSwgMjI3LCAxNjYsIDIzMCwgNjYsIDE1NSwgMSwgMjM1LCAKLSAgICAxNDIsIDIzMSwgMjA3LCAxNTUsIDEsIDIyNywgMTY1LCAxNTUsIDEsIDIxNSwgMTU2LCAxNTUsIDEsIDIxNSwgMTU3LCAyMzEsIAotICAgIDIwNywgMTU1LCAxLCAyNDgsIDEzNSwgMTU1LCAxLCAyNDgsIDEzNiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI5LCAyMjksIDIzMCwgCi0gICAgNjYsIDE1NSwgMSwgMjE3LCAxMDUsIDE1NSwgMSwgMjE3LCAxMDYsIDIzMCwgNjYsIDE1NSwgMSwgMjQ4LCAyMjEsIDE1NSwgCi0gICAgMSwgMjQ4LCAyMjIsIDIzMSwgMjA3LCAxNTUsIDEsIDE5NywgMTU1LCAxLCAxOTAsIDE1NSwgMSwgMjI2LCA5MCwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyNTIsIDE5MSwgMTU1LCAxLCAyNTIsIDE5MiwgMjMwLCA2NiwgMTU1LCAxLCAxODQsIDE1NSwgMSwgCi0gICAgMTkxLCAxNTUsIDEsIDIwNSwgMTU1LCAxLCAyMjMsIDE4OCwgMjU0LCAyMTAsIDE1NSwgMSwgMjMzLCAxMzUsIDE1NSwgMSwgCi0gICAgMjEyLCA2NSwgMTU1LCAxLCAyMjIsIDM0LCAyMzAsIDY2LCAxNTUsIDEsIDIyMiwgMzQsIDIzMSwgMjA3LCAxNTUsIDEsIAotICAgIDIwNiwgMTU1LCAxLCAxNjIsIDE1NSwgNSwgMjUwLCAxODgsIDIxNiwgMjUwLCAxNTUsIDI1LCA1LCAyMTcsIDQ3LCAxNTUsIAotICAgIDI1LCA1LCAyMTYsIDM1LCAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNjksIDE1NSwgCi0gICAgMjUsIDUsIDIxOCwgNDcsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIDIzMSwgNTcsIDE1NSwgMjUsIDUsIDIxNywgNjUsIDE1NSwgCi0gICAgMjUsIDUsIDI0NywgMTk0LCAyMzAsIDY1LCAxNTUsIDI1LCA1LCAyMjUsIDE4NCwgMTU1LCAxMTYsIDUsIDIzNCwgMTU4LCAKLSAgICAxNTUsIDExNiwgNSwgMjI1LCAxOTYsIDE1NSwgMTE2LCA1LCAyNTEsIDE5LCAxNTUsIDIyNiwgNDAsIDE1NSwgNDMsIDIyMywgCi0gICAgNjksIDE1NSwgNDQsIDIyMywgNjksIDE1NSwgMjI2LCA3OSwgMjU0LCAxMTcsIDE1NSwgMjI2LCA3OSwgMjMxLCAyMjQsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCA4OCwgMTU1LCAyMjYsIDc5LCAyMTEsIDIzOCwgMTU1LCAyMjYsIDc5LCAyMjYsIDQxLCAKLSAgICAxNTUsIDIyNiwgNzksIDIzMiwgMjA1LCAxNTUsIDIyNiwgNzksIDIzMiwgODIsIDE1NSwgMjI2LCA3OSwgMjU0LCAyNDksIAotICAgIDE1NSwgMjI2LCA3OSwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxNTUsIDIyNiwgNzksIDIyNSwgNTEsIDE1NSwgMjE1LCA5NCwgCi0gICAgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMjYsIDM2LCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTAsIDE1NSwgMjEsIAotICAgIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAxNjEsIDE1NSwgMjEsIDE4OSwgMTU1LCAyMSwgMTk0LCAxNTUsIDIxLCAKLSAgICAxOTgsIDE1NSwgMjEsIDE5NSwgMTU1LCAyMSwgMjAwLCAxNTUsIDIyNiwgNzksIDIxNiwgNjksIDIxNSwgMTA2LCAxNTUsIAotICAgIDIyNiwgNzksIDIzNSwgMTY3LCAxNzIsIDEsIDYxLCAxNzIsIDEsIDczLCAxNzIsIDEsIDcwLCAxNzIsIDEsIDc1LCAxNzIsIAotICAgIDEsIDI1NCwgMjAxLCAxNzIsIDEsIDc2LCAxNzIsIDEsIDE3NiwgMTcyLCAxLCAyMzQsIDEzMiwgMTcyLCAxLCAyNDMsIDEzNSwgCi0gICAgMTcyLCAxLCAyNDIsIDI0OSwgMTcyLCAxLCAyMjgsIDI0NSwgMTcyLCAxLCAyMjksIDc3LCAxNzIsIDEsIDI1MCwgMTU3LCAKLSAgICAxNzIsIDEsIDI1MCwgMTEyLCAxNzIsIDEsIDIzNSwgMTQxLCAxNzIsIDEsIDIzNSwgMTE0LCAxNzIsIDEsIDIyOCwgMjM1LCAKLSAgICAxNzIsIDEsIDIyOCwgMjM3LCAxNzIsIDEsIDIyOCwgMjM2LCAxNzIsIDEsIDIxNywgMTA1LCAxNzIsIDEsIDIxNiwgMjA4LCAKLSAgICAxNzIsIDEsIDI0OCwgMjIxLCAxNzIsIDEsIDI0OCwgMjUsIDE3MiwgMSwgMjI3LCAyMDcsIDE3MiwgMSwgMTk3LCAxNzIsIDEsIAotICAgIDI0OCwgMTM1LCAxNzIsIDEsIDE5MCwgMTcyLCAxLCAyMjQsIDIyMCwgMTcyLCAxLCAyMjUsIDE0NywgMTcyLCAxLCAyNTIsIAotICAgIDE5MSwgMTcyLCAxLCAyNTIsIDE4LCAxNzIsIDEsIDIzMCwgOTUsIDE3MiwgMSwgMTg0LCAxNzIsIDEsIDI1MiwgMTExLCAKLSAgICAxNzIsIDEsIDE5MSwgMTcyLCAxLCAyMDUsIDE3MiwgMSwgMjMzLCAxMzUsIDE3MiwgMSwgMjE0LCAyNywgMTcyLCAxLCAyMTgsIAotICAgIDIyMywgMTcyLCAxLCAyMDYsIDE3MiwgMSwgMTYyLCAxNzIsIDI1LCA1LCAyNTUsIDczLCAxNzIsIDI1LCA1LCA3MywgMTcyLCAKLSAgICAyNSwgNSwgMjM2LCAzMywgMTcyLCAyNSwgNSwgMjQ1LCAxOTUsIDE3MiwgMjUsIDUsIDcwLCAxNzIsIDI1LCA1LCAyMjYsIAotICAgIDIzNCwgMTcyLCAyNSwgNSwgNzYsIDE3MiwgMjUsIDUsIDI1NCwgMjAxLCAxNzIsIDI1LCA1LCAyNTMsIDE5MiwgMTcyLCAyNSwgCi0gICAgNSwgMjE0LCAyMTQsIDE3MiwgMTE2LCA1LCAxOTEsIDE3MiwgMTE2LCA1LCAyMDUsIDE3MiwgMTE2LCA1LCAyMzMsIDEzNSwgCi0gICAgMTcyLCAxMTYsIDUsIDIxMiwgNjUsIDE3MiwgMSwgNDAsIDIzNSwgMjMsIDE3MiwgMSwgNDAsIDI0MywgMjAyLCAxNzIsIDEsIAotICAgIDQwLCAyMjksIDc5LCAxNzIsIDExNiwgNSwgNDAsIDIyOSwgNzksIDE3MiwgMSwgNDAsIDI1MCwgMTU4LCAxNzIsIDEsIDQwLCAKLSAgICAyMTcsIDE1MiwgMTcyLCAxLCA0MCwgMjMwLCAyNSwgMTcyLCAxLCA0MCwgMjI2LCAxMDUsIDE3MiwgMSwgNDAsIDIxMSwgCi0gICAgMTE3LCAxNzIsIDEsIDQwLCAxNTMsIDE3MiwgMSwgNDAsIDE1NiwgMTcyLCAxLCA0MCwgMjE4LCAyMjYsIDE3MiwgMTE2LCA1LCAKLSAgICA0MCwgMTkzLCAxNzIsIDExNiwgNSwgNDAsIDI0MiwgNjAsIDE3MiwgMjEsIDIxMCwgODYsIDE3MiwgMjEsIDExMCwgMTcyLCAKLSAgICAyMSwgMTA1LCAxNzIsIDIxLCAxNTgsIDE3MiwgMjEsIDE2MSwgMTcyLCAyMSwgMTg5LCAxNzIsIDIxLCAxOTQsIDE3MiwgMjEsIAotICAgIDE5OCwgMTcyLCAyMSwgMTk1LCAxNzIsIDIxLCAyMDAsIDE3MiwgMjI0LCAxNDEsIDIxOCwgMjUxLCAxNzIsIDIyNCwgMTQxLCAKLSAgICAyNDgsIDE3OCwgMTcyLCAyMjQsIDE0MSwgNTIsIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCAyMTUsIDIxMSwgMjQ4LCAxNzgsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjQzLCAxMzUsIDY4LCAxLCAyMzQsIDEyNiwgMjUxLCAzMywgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAyNTAsIDE1NywgNjgsIDEsIDIzNCwgMTI2LCAyMzUsIDE0MSwgNjgsIDEsIDIzNCwgMTI2LCAyMzUsIDExNCwgNjgsIDEsIAotICAgIDIzNCwgMTI2LCAyMjcsIDE2NSwgNjgsIDEsIDIzNCwgMTI2LCAyMTUsIDE1NiwgNjgsIDEsIDIzNCwgMTI2LCAyMTUsIDE0NCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDgsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNDgsIDExOSwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAyNDgsIDI1LCA2OCwgMSwgMjM0LCAxMjYsIDE5NywgNjgsIDEsIDIzNCwgMTI2LCAyMDYsIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMTYyLCA2OCwgMSwgMjM0LCAxMjYsIDI0MSwgMTg5LCA2OCwgMSwgMjM0LCAxMjYsIDI0NCwgMTk2LCA2OCwgNTgsIDEsIAotICAgIDIzNCwgMTI2LCAyMjMsIDEwOSwgNjgsIDEsIDIzNCwgMTI2LCAyMTEsIDE2NSwgNjgsIDEsIDIzNCwgMTI2LCAyMTAsIDExNiwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyMDUsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDIyNiwgMjUzLCA2OCwgMjMyLCAxNDUsIAotICAgIDIzNCwgMTI2LCAyMjQsIDQzLCA2OCwgMjMyLCAxNDUsIDIzNCwgMTI2LCAyNDEsIDEyMSwgNjgsIDE2LCAyNTQsIDE5MCwgCi0gICAgMjQ1LCAzMCwgNjgsIDE2LCAyNTQsIDE5MCwgMTEwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMDUsIDY4LCAxLCAyNTQsIDE5MCwgCi0gICAgMjA1LCA2OCwgNSwgMjI2LCAyMywgMjM0LCAyMTMsIDIxNiwgMzAsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAyOCwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMzQsIDI4LCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMTA1LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgCi0gICAgMTA1LCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMTE0LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTE0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDI0MiwgMTc0LCAzOSwgMjA4LCAxLCAxMjUsIDI0MiwgMTc0LCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgNCwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjksIDQsIDM5LCAyMDgsIDEsIDEyMSwgMjQ5LCAyMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAKLSAgICAyMzgsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA4NiwgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjEsIAotICAgIDIxOSwgNTgsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzNCwgMzksIDIwOCwgMSwgCi0gICAgMTI1LCAyMjcsIDEzNCwgMzksIDIwOCwgMSwgMTIxLCAyNDcsIDE0NSwgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE0NSwgMzksIAotICAgIDIwOCwgMSwgMTIxLCAxMTEsIDM5LCAyMDgsIDEsIDEyNSwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU2LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIxNiwgMTU2LCAzOSwgMjA4LCAxLCAxMjEsIDIyOCwgNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCAKLSAgICA3NCwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIDIwNSwgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIwNSwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyMjUsIDE2LCAzOSwgMjA4LCAxLCAxMjUsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjI1LCAxMjEsIDM5LCAyMDgsIDEsIDEyMSwgMjQ0LCA0MywgMzksIDIwOCwgMSwgMTI1LCAyNDQsIAotICAgIDQzLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgMTYxLCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTYxLCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjExLCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyMiwgMjExLCAzOSwgMjA4LCAxLCAxMjEsIDIzMiwgMTU2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgCi0gICAgMTU2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDI0MSwgNjgsIDM5LCAyMDgsIDEsIDEyNSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTIxLCA3NiwgMzksIDIwOCwgMSwgCi0gICAgMTI1LCA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMjMwLCAzOSwgMjA4LCAyNSwgMjU1LCA3MywgMzksIDIwOCwgMjUsIAotICAgIDczLCAzOSwgMjA4LCAyNSwgMjE0LCAyMTQsIDM5LCAyMDgsIDI1LCA3MCwgMzksIDIwOCwgMjUsIDc1LCAzOSwgMjA4LCAyNSwgCi0gICAgNzYsIDM5LCAyMDgsIDIzMSwgMjA0LCAyMzQsIDEwOCwgMzksIDIwOCwgMjUsIDI0MCwgMTE5LCAzOSwgMjA4LCAyNSwgMjE0LCAKLSAgICAyMTMsIDM5LCAyMDgsIDI1LCAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTkwLCAzOSwgMjA4LCAyNSwgMjUzLCAxNjcsIAotICAgIDM5LCAyMDgsIDI1LCAyNTQsIDEyMywgMzksIDIwOCwgMjUsIDI1NCwgMTM2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAKLSAgICAyNDUsIDE4MCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjI3LCAyMDYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxNiwgCi0gICAgMTU2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMTksIDQyLCAzOSwgMjA4LCAxNiwgMjM0LCAxMywgMzksIDIwOCwgMTYsIAotICAgIDIyNywgMjA2LCAzOSwgMjA4LCAxNiwgMjIxLCAyNTMsIDM5LCAyMDgsIDE2LCAyNDEsIDY5LCAyNDEsIDY0LCAzOSwgMjA4LCAKLSAgICAxNiwgMjM0LCAyMiwgMjM0LCAyMSwgMTg2LCAxODUsIDEsIDc1LCAxODYsIDE4NSwgMSwgNzYsIDE4NiwgMTg1LCAxLCAyNTAsIAotICAgIDE1NywgMTg2LCAxODUsIDEsIDIyNywgMTY1LCAxODYsIDE4NSwgMSwgMjE1LCAxNTYsIDE4NiwgMTg1LCAxLCAyMTUsIDE0NCwgCi0gICAgMTg2LCAxODUsIDEsIDI0OCwgMTM1LCAxODYsIDE4NSwgMSwgMjQ4LCAxMTksIDE4NiwgMTg1LCAxLCAyMjgsIDExMCwgMTg2LCAKLSAgICAxODUsIDEsIDIyMCwgMTAyLCAxODYsIDE4NSwgMSwgMjE4LCAyMjMsIDE4NiwgMTg1LCAyNSwgNSwgMjM2LCAzMywgMTg2LCAKLSAgICAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg2LCAxODUsIDI1LCA1LCAyNTUsIDM3LCAxODYsIDE4NSwgMjUsIDUsIDI1MywgCi0gICAgMTkyLCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzAsIDE4NiwgMTg1LCAyNTAsIDEyNSwgMTg2LCAxODUsIDI1NCwgMjA2LCAKLSAgICAyMzQsIDk4LCAxODYsIDE4NSwgMjU0LCAxMDMsIDE4NiwgMTg1LCAzLCAyMjMsIDc0LCA3OCwgMTg2LCAxODUsIDIxMSwgCi0gICAgMjA5LCAyMjMsIDc0LCA3OCwgMTg2LCAxODUsIDI1LCA1LCAyMTMsIDE0NywgMTg2LCAxODUsIDIxMywgMTUyLCAyOSwgMywgCi0gICAgMjE1LCAxMzcsIDI5LCAzLCAyMTUsIDE0MCwgMjksIDMsIDIxNSwgMTQzLCAyOSwgMywgMjE1LCAxNDEsIDI5LCAzLCAyMTUsIAotICAgIDE0MiwgMjksIDMsIDIxNSwgMTM5LCAyOSwgMywgMjQ4LCAxMTMsIDI5LCAzLCAyNDgsIDExNSwgMjksIDMsIDI0OCwgMTE4LCAKLSAgICAyOSwgMywgMjQ4LCAxMTYsIDI5LCAzLCAyNDgsIDExNywgMjksIDMsIDI0OCwgMTE0LCAyOSwgMywgMjQ2LCAyOCwgMjksIDMsIAotICAgIDI0NiwgMzEsIDI5LCAzLCAyNDYsIDM3LCAyOSwgMywgMjQ2LCAzNSwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDI5LCAKLSAgICAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyNTAsIDE5OCwgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDMsIDI5LCAKLSAgICAzLCAyNTAsIDIwMSwgMjksIDMsIDI1MCwgMjAyLCAyOSwgMywgMjUwLCAxOTksIDI5LCAzLCAyNTIsIDExMSwgMjksIDMsIAotICAgIDI1MiwgOTAsIDI5LCAzLCAyNTIsIDEwMiwgMjksIDMsIDI1MiwgMTEwLCAyOSwgMywgMjUyLCAxMDUsIDI5LCAzLCAyNTIsIAotICAgIDEwNiwgMjksIDMsIDI1MiwgOTQsIDE4NiwgMTg1LCAxLCAyMzQsIDE5LCAxODYsIDE4NSwgMSwgMjIxLCAyNTMsIDE4NiwgCi0gICAgMTg1LCAxLCAyMzMsIDEwOSwgMTg2LCAxODUsIDEsIDIzMCwgMTcyLCAxODYsIDE4NSwgMSwgMTkwLCAxODYsIDE4NSwgMSwgCi0gICAgMTk3LCAxODYsIDE4NSwgMSwgMjUwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTYsIDkwLCAxODYsIDE4NSwgMSwgMjM0LCAxMDEsIAotICAgIDE4NiwgMTg1LCAxLCAyMjgsIDI1MCwgMTg2LCAxODUsIDEsIDIxNiwgMTUwLCAxODYsIDE4NSwgMSwgMjEyLCA2MCwgMTg2LCAKLSAgICAxODUsIDEsIDIxMSwgNjksIDE4NiwgMTg1LCAxLCAyNDAsIDIxNiwgMTg2LCAxODUsIDEsIDIxNCwgMTkwLCAxODYsIDE4NSwgCi0gICAgMSwgNzMsIDE4NiwgMTg1LCAxLCAyMjUsIDE0MiwgMTg2LCAxODUsIDEsIDI1MywgMjAyLCAxODYsIDE4NSwgMSwgMjQyLCAKLSAgICAxNjcsIDE4NiwgMTg1LCAxLCAyMzUsIDExMiwgMTg2LCAxODUsIDEsIDIyMywgMTY2LCAxODYsIDE4NSwgMSwgMjUyLCAxOTEsIAotICAgIDE4NiwgMTg1LCAxLCAyMzUsIDEwMCwgMTg2LCAxODUsIDEsIDI0NywgMjE5LCAxODYsIDE4NSwgMSwgMjQyLCAyMjEsIDE4NiwgCi0gICAgMTg1LCAxLCAyNDgsIDUsIDE4NiwgMTg1LCAxLCAyNTIsIDE2LCAxODYsIDE4NSwgMSwgMjM0LCAyMCwgMjMyLCAxMjgsIAotICAgIDE4NiwgMTg1LCAxLCAyMzMsIDExMCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMzAsIDE3MywgMjMyLCAxMjgsIDE4NiwgCi0gICAgMTg1LCAxLCAyMjYsIDkwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIyOSwgMjI5LCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIAotICAgIDIxNiwgOTEsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI4LCAyNTEsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjQwLCAKLSAgICAxNTQsIDIzMiwgMTI4LCAxODYsIDE4NSwgMjUsIDUsIDIyNiwgMTk1LCAxODYsIDE4NSwgMjUsIDUsIDIzNSwgMjUzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDI1NCwgMTIyLCAxODYsIDE4NSwgMjUsIDUsIDIxMSwgMzgsIDE4NiwgMTg1LCAyNSwgNSwgMjE5LCAzMiwgCi0gICAgMTg2LCAxODUsIDI1LCA1LCAyMTQsIDE4NywgMTg2LCAxODUsIDI1LCA1LCAyNTAsIDEyMywgMTg2LCAxODUsIDI1LCA1LCAKLSAgICAyMjcsIDE5MSwgMTg2LCAxODUsIDI1MCwgMTI0LCAxODYsIDE4NSwgMjMyLCA4NSwgMjM1LCAxNTAsIDE4NiwgMTg1LCAyNTQsIAotICAgIDQ2LCAyMzUsIDE1MCwgMTg2LCAxODUsIDIxLCAyMTAsIDg2LCAxODYsIDE4NSwgMjEsIDExMCwgMTg2LCAxODUsIDIxLCAKLSAgICAxMDUsIDE4NiwgMTg1LCAyMSwgMTU4LCAxODYsIDE4NSwgMjEsIDE2MSwgMTg2LCAxODUsIDIxLCAxODksIDE4NiwgMTg1LCAKLSAgICAyMSwgMTk0LCAxODYsIDE4NSwgMjEsIDE5OCwgMTg2LCAxODUsIDIxLCAxOTUsIDE4NiwgMTg1LCAyMSwgMjAwLCAyNCwgCi0gICAgMTQzLCAyMjcsIDc3LCAyNCwgMTQzLCAyMjcsIDgyLCAyNCwgMTQzLCAyMTAsIDI0MywgMjQsIDE0MywgMjEwLCAyNDIsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjQxLCAyNCwgMTQzLCAyMTUsIDIzLCAyNCwgMTQzLCAyMTUsIDI2LCAyNCwgMTQzLCAyMTAsIDIxMCwgMjQsIAotICAgIDE0MywgMjEwLCAyMDYsIDI0LCAxNDMsIDI0NSwgNTQsIDI0LCAxNDMsIDI0NSwgNTIsIDI0LCAxNDMsIDI0NSwgNTMsIDI0LCAKLSAgICAxNDMsIDI0NSwgNTAsIDI0LCAxNDMsIDI0MCwgMTQ0LCAyNCwgMTQzLCAyNDAsIDE0MywgMjQsIDE0MywgMjQwLCAxNDEsIAotICAgIDI0LCAxNDMsIDI0MCwgMTQyLCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDAsIDI0LCAxNDMsIDI0MCwgCi0gICAgMTM5LCAyNCwgMTQzLCAyNDAsIDE0OSwgMjQsIDE0MywgMjU0LCAzMywgMjQsIDE0MywgMjU0LCAzMiwgMjQsIDkwLCAyMjgsIAotICAgIDIxOSwgMjQsIDkwLCAyMjgsIDIyNSwgMjQsIDkwLCAyMTgsIDIwNCwgMjQsIDkwLCAyMTgsIDIwMywgMjQsIDkwLCAyMTYsIAotICAgIDk2LCAyNCwgOTAsIDIxNiwgOTQsIDI0LCA5MCwgMjE2LCA5MywgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgMTAwLCAKLSAgICAyNCwgOTAsIDIxNiwgOTIsIDI0LCA5MCwgMjIzLCA1LCAyNCwgOTAsIDIyMywgMjAsIDI0LCA5MCwgMjE4LCAyMTAsIDI0LCAKLSAgICA5MCwgMjIzLCAxNywgMjQsIDkwLCAyMjMsIDcsIDI0LCA5MCwgMjIzLCA5LCAyNCwgOTAsIDIyMiwgMjUyLCAyNCwgOTAsIAotICAgIDIyMiwgMjUzLCAyNCwgOTAsIDIzNCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjA2LCAyNCwgOTAsIAotICAgIDIxOCwgMjE0LCAyNCwgOTAsIDIzMCwgMjA5LCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIDIyNSwgNzYsIDI0LCA5MCwgCi0gICAgMjI1LCA4NSwgMjQsIDkwLCAyMjUsIDg5LCAyNCwgOTAsIDIxOCwgMjEyLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCAKLSAgICA5MywgMjQsIDkwLCAyMjUsIDk0LCAyNCwgOTAsIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOCwgCi0gICAgMjA4LCAyNCwgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIxOSwgMTQ2LCAyNCwgOTAsIDIxOSwgCi0gICAgMTQ3LCAyNCwgOTAsIDIxOSwgMTMyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIyNiwgMzAsIDI0LCA5MCwgMjI2LCAKLSAgICAzMSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgMjUsIDI0LCA5MCwgMjUwLCA0NCwgMjQsIDkwLCAyNTAsIDQzLCAKLSAgICAyNCwgOTAsIDIxOCwgMjE5LCAyNCwgOTAsIDIyNSwgMTI4LCAyNCwgOTAsIDIyNSwgMTI3LCA5LCAxNCwgMjM4LCAyNCwgOSwgCi0gICAgMTQsIDIzOCwgMjMsIDksIDE0LCAyMzgsIDIyLCA5LCAxNCwgMjM4LCAyMSwgOSwgMTQsIDIzOCwgMjAsIDksIDE0LCAyMzgsIAotICAgIDE5LCA5LCAxNCwgMjM4LCAxOCwgOSwgMTQsIDIzOCwgMTcsIDksIDE0LCAyMzgsIDE2LCA5LCAxNCwgMjM4LCAxNSwgOSwgCi0gICAgMTQsIDIzOCwgMTQsIDksIDE0LCAyMzgsIDEzLCA5LCAxNCwgMjM4LCAxMiwgOSwgMTQsIDIzOCwgMTEsIDksIDE0LCAyMzgsIAotICAgIDEwLCA5LCAxNCwgMjM4LCA5LCA5LCAxNCwgMjM4LCA4LCA5LCAxNCwgMjM4LCA3LCA5LCAxNCwgMjM4LCA2LCA5LCAxNCwgCi0gICAgMjM4LCA1LCA5LCAxNCwgMjM4LCA0LCA5LCAxNCwgMjM4LCAzLCA5LCAxNCwgMjM4LCAyLCA5LCAxNCwgMjM4LCAxLCA5LCAKLSAgICAxNCwgMjM4LCAwLCA5LCAxNCwgMjM3LCAyNTUsIDksIDE0LCAyMzcsIDI1NCwgOSwgMTQsIDIzNywgMjUzLCA5LCAxNCwgCi0gICAgMjM3LCAyNTIsIDksIDE0LCAyMzcsIDI1MSwgOSwgMTQsIDIzNywgMjUwLCA5LCAxNCwgMjM3LCAyNDksIDksIDE0LCAyMzcsIAotICAgIDI0OCwgOSwgMTQsIDIzNywgMjQ3LCA5LCAxNCwgMjM3LCAyNDYsIDksIDE0LCAyMzcsIDI0NSwgOSwgMTQsIDIzNywgMjQ0LCAKLSAgICA5LCAxNCwgMjM3LCAyNDMsIDksIDE0LCAyMzcsIDI0MiwgOSwgMTQsIDIzNywgMjQxLCA5LCAxNCwgMjM3LCAyNDAsIDksIAotICAgIDE0LCAyMzcsIDIzOSwgOSwgMTQsIDIzNywgMjM4LCA5LCAxNCwgMjM3LCAyMzcsIDksIDE0LCAyMzcsIDIzNiwgOSwgMTQsIAotICAgIDIzNywgMjM1LCA5LCAxNCwgMjM3LCAyMzQsIDksIDE0LCAyMzcsIDIzMywgOSwgMTQsIDIzNywgMjMyLCA5LCAxNCwgMjM3LCAKLSAgICAyMzEsIDksIDE0LCAyMzcsIDIzMCwgOSwgMTQsIDIzNywgMjI5LCA5LCAxNCwgMjM3LCAyMjgsIDksIDE0LCAyMzcsIDIyNywgCi0gICAgOSwgMTQsIDIzNywgMjI2LCA5LCAxNCwgMjM3LCAyMjUsIDksIDE0LCAyMzcsIDIyNCwgOSwgMTQsIDIzNywgMjIzLCA5LCAKLSAgICAxNCwgMjM3LCAyMjIsIDksIDE0LCAyMzcsIDIyMSwgOSwgMTQsIDIzNywgMjIwLCA5LCAxNCwgMjM3LCAyMTksIDksIDE0LCAKLSAgICAyMzcsIDIxOCwgOSwgMTQsIDIzNywgMjE3LCA5LCAxNCwgMjM3LCAyMTYsIDksIDE0LCAyMzcsIDIxNSwgOSwgMTQsIDIzNywgCi0gICAgMjE0LCA5LCAxNCwgMjM3LCAyMTMsIDksIDE0LCAyMzcsIDIxMiwgOSwgMTQsIDIzNywgMjExLCA5LCAxNCwgMjM3LCAyMTAsIAotICAgIDksIDE0LCAyMzcsIDIwOSwgOSwgMTQsIDIzNywgMjA4LCA5LCAxNCwgMjM3LCAyMDcsIDksIDE0LCAyMzcsIDIwNiwgOSwgCi0gICAgMTQsIDIzNywgMjA1LCA5LCAxNCwgMjM3LCAyMDQsIDksIDE0LCAyMzcsIDIwMywgOSwgMTQsIDIzNywgMjAyLCA5LCAxNCwgCi0gICAgMjM3LCAyMDEsIDksIDE0LCAyMzcsIDIwMCwgOSwgMTQsIDIzNywgMTk5LCA5LCAxNCwgMjM3LCAxOTgsIDksIDE0LCAyMzcsIAotICAgIDE5NywgOSwgMTQsIDIzNywgMTk2LCA5LCAxNCwgMjM3LCAxOTUsIDksIDE0LCAyMzcsIDE5NCwgOSwgMTQsIDIzNywgMTkzLCAKLSAgICA5LCAxNCwgMjM3LCAxOTIsIDksIDE0LCAyMzcsIDE5MSwgOSwgMTQsIDIzNywgMTkwLCA5LCAxNCwgMjM3LCAxODksIDksIAotICAgIDE0LCAyMzcsIDE4OCwgOSwgMTQsIDIzNywgMTg3LCA5LCAxNCwgMjM3LCAxODYsIDksIDE0LCAyMzcsIDE4NSwgOSwgMTQsIAotICAgIDIzNywgMTg0LCA5LCAxNCwgMjM3LCAxODMsIDksIDE0LCAyMzcsIDE4MiwgOSwgMTQsIDIzNywgMTgxLCA5LCAxNCwgMjM3LCAKLSAgICAxODAsIDksIDE0LCAyMzcsIDE3OSwgOSwgMTQsIDIzNywgMTc4LCA5LCAxNCwgMjM3LCAxNzcsIDksIDE0LCAyMzcsIDE3NiwgCi0gICAgOSwgMTQsIDIzNywgMTc1LCA5LCAxNCwgMjM3LCAxNzQsIDksIDE0LCAyMzcsIDE3MywgOSwgMTQsIDIzNywgMTcyLCA5LCAKLSAgICAxNCwgMjM3LCAxNzEsIDksIDE0LCAyMzcsIDE3MCwgOSwgMTQsIDIzNywgMTY5LCA5LCAxNCwgMjM3LCAxNjgsIDksIDE0LCAKLSAgICAyMzcsIDE2NywgOSwgMTQsIDIzNywgMTY2LCA5LCAxNCwgMjM3LCAxNjUsIDksIDE0LCAyMzcsIDE2NCwgOSwgMTQsIDIzNywgCi0gICAgMTYzLCA5LCAxNCwgMjM3LCAxNjIsIDksIDE0LCAyMzcsIDE2MSwgOSwgMTQsIDIzNywgMTYwLCA5LCAxNCwgMjM3LCAxNTksIAotICAgIDksIDE0LCAyMzcsIDE1OCwgOSwgMTQsIDIzNywgMTU3LCA5LCAxNCwgMjM3LCAxNTYsIDksIDE0LCAyMzcsIDE1NSwgOSwgCi0gICAgMTQsIDIzNywgMTU0LCA5LCAxNCwgMjM3LCAxNTMsIDksIDE0LCAyMzcsIDE1MiwgOSwgMTQsIDIzNywgMTUxLCA5LCAxNCwgCi0gICAgMjM3LCAxNTAsIDksIDE0LCAyMzcsIDE0OSwgOSwgMTQsIDIzNywgMTQ4LCA5LCAxNCwgMjM3LCAxNDcsIDksIDE0LCAyMzcsIAotICAgIDE0NiwgOSwgMTQsIDIzNywgMTQ1LCA5LCAxNCwgMjM3LCAxNDQsIDksIDE0LCAyMzcsIDE0MywgOSwgMTQsIDIzNywgMTQyLCAKLSAgICA5LCAxNCwgMjM3LCAxNDEsIDksIDE0LCAyMzcsIDE0MCwgOSwgMTQsIDIzNywgMTM5LCA5LCAxNCwgMjM3LCAxMzgsIDksIAotICAgIDE0LCAyMzcsIDEzNywgOSwgMTQsIDIzNywgMTM2LCA5LCAxNCwgMjM3LCAxMzUsIDksIDE0LCAyMzcsIDEzNCwgOSwgMTQsIAotICAgIDIzNywgMTMzLCA5LCAxNCwgMjM3LCAxMzIsIDksIDE0LCAyMzcsIDEzMSwgOSwgMTQsIDIzNywgMTMwLCA5LCAxNCwgMjM3LCAKLSAgICAxMjksIDksIDE0LCAyMzcsIDEyOCwgOSwgMTQsIDIzNywgMTI3LCA5LCAxNCwgMjM3LCAxMjYsIDksIDE0LCAyMzcsIDEyNSwgCi0gICAgOSwgMTQsIDIzNywgMTI0LCA5LCAxNCwgMjM3LCAxMjMsIDksIDE0LCAyMzcsIDEyMiwgOSwgMTQsIDIzNywgMTIxLCA5LCAKLSAgICAxNCwgMjM3LCAxMjAsIDksIDE0LCAyMzcsIDExOSwgOSwgMTQsIDIzNywgMTE4LCA5LCAxNCwgMjM3LCAxMTcsIDksIDE0LCAKLSAgICAyMzcsIDExNiwgOSwgMTQsIDIzNywgMTE1LCA5LCAxNCwgMjM3LCAxMTQsIDksIDE0LCAyMzcsIDExMywgOSwgMTQsIDIzNywgCi0gICAgMTEyLCA5LCAxNCwgMjM3LCAxMTEsIDksIDE0LCAyMzcsIDExMCwgOSwgMTQsIDIzNywgMTA5LCA5LCAxNCwgMjM3LCAxMDgsIAotICAgIDksIDE0LCAyMzcsIDEwNywgOSwgMTQsIDIzNywgMTA2LCA5LCAxNCwgMjM3LCAxMDUsIDksIDE0LCAyMzcsIDEwNCwgOSwgCi0gICAgMTQsIDIzNywgMTAzLCA5LCAxNCwgMjM3LCAxMDIsIDksIDE0LCAyMzcsIDEwMSwgOSwgMTQsIDIzNywgMTAwLCA5LCAxNCwgCi0gICAgMjM3LCA5OSwgOSwgMTQsIDIzNywgOTgsIDksIDE0LCAyMzcsIDk3LCA5LCAxNCwgMjM3LCA5NiwgOSwgMTQsIDIzNywgOTUsIAotICAgIDksIDE0LCAyMzcsIDk0LCA5LCAxNCwgMjM3LCA5MywgOSwgMTQsIDIzNywgOTIsIDksIDE0LCAyMzcsIDkxLCA5LCAxNCwgCi0gICAgMjM3LCA5MCwgOSwgMTQsIDIzNywgODksIDksIDE0LCAyMzcsIDg4LCA5LCAxNCwgMjM3LCA4NywgOSwgMTQsIDIzNywgODYsIAotICAgIDksIDE0LCAyMzcsIDg1LCA5LCAxNCwgMjM3LCA4NCwgOSwgMTQsIDIzNywgODMsIDksIDE0LCAyMzcsIDgyLCA5LCAxNCwgCi0gICAgMjM3LCA4MSwgOSwgMTQsIDIzNywgODAsIDksIDE0LCAyMzcsIDc5LCA5LCAxNCwgMjM3LCA3OCwgOSwgMTQsIDIzNywgNzcsIAotICAgIDksIDE0LCAyMzcsIDc2LCA5LCAxNCwgMjM3LCA3NSwgOSwgMTQsIDIzNywgNzQsIDksIDE0LCAyMzcsIDczLCA5LCAxNCwgCi0gICAgMjM3LCA3MiwgOSwgMTQsIDIzNywgNzEsIDksIDE0LCAyMzcsIDcwLCA5LCAxNCwgMjM3LCA2OSwgOSwgMTQsIDIzNywgNjgsIAotICAgIDksIDE0LCAyMzcsIDY3LCA5LCAxNCwgMjM3LCA2NiwgOSwgMTQsIDIzNywgNjUsIDksIDE0LCAyMzcsIDY0LCA5LCAxNCwgCi0gICAgMjM3LCA2MywgOSwgMTQsIDIzNywgNjIsIDksIDE0LCAyMzcsIDYxLCA5LCAxNCwgMjM3LCA2MCwgOSwgMTQsIDIzNywgNTksIAotICAgIDksIDE0LCAyMzcsIDU4LCA5LCAxNCwgMjM3LCA1NywgOSwgMTQsIDIzNywgNTYsIDksIDE0LCAyMzcsIDU1LCA5LCAxNCwgCi0gICAgMjM3LCA1NCwgOSwgMTQsIDIzNywgNTMsIDksIDE0LCAyMzcsIDUyLCA5LCAxNCwgMjM3LCA1MSwgOSwgMTQsIDIzNywgNTAsIAotICAgIDksIDE0LCAyMzcsIDQ5LCA5LCAxNCwgMjM3LCA0OCwgOSwgMTQsIDIzNywgNDcsIDksIDE0LCAyMzcsIDQ2LCA5LCAxNCwgCi0gICAgMjM3LCA0NSwgOSwgMTQsIDIzNywgNDQsIDksIDE0LCAyMzcsIDQzLCA5LCAxNCwgMjM3LCA0MiwgOSwgMTQsIDIzNywgNDEsIAotICAgIDksIDE0LCAyMzcsIDQwLCA5LCAxNCwgMjM3LCAzOSwgOSwgMTQsIDIzNywgMzgsIDksIDE0LCAyMzcsIDM3LCA5LCAxNCwgCi0gICAgMjM3LCAzNiwgOSwgMTQsIDIzNywgMzUsIDksIDE0LCAyMzcsIDM0LCA5LCAxNCwgMjM3LCAzMywgOSwgMTQsIDIzNywgMzIsIAotICAgIDksIDE0LCAyMzcsIDMxLCA5LCAxNCwgMjM3LCAzMCwgOSwgMTQsIDIzNywgMjksIDksIDE0LCAyMzcsIDI4LCA5LCAxNCwgCi0gICAgMjM3LCAyNywgOSwgMTQsIDIzNywgMjYsIDksIDE0LCAyMzcsIDI1LCA5LCAxNCwgMjM3LCAyNCwgOSwgMTQsIDIzNywgMjMsIAotICAgIDksIDE0LCAyMzcsIDIyLCA5LCAxNCwgMjM3LCAyMSwgOSwgMTQsIDIzNywgMjAsIDksIDE0LCAyMzcsIDE5LCA5LCAxNCwgCi0gICAgMjM3LCAxOCwgOSwgMTQsIDIzNywgMTcsIDksIDE0LCAyMzcsIDE2LCA5LCAxNCwgMjM3LCAxNSwgOSwgMTQsIDIzNywgMTQsIAotICAgIDksIDE0LCAyMzcsIDEzLCA5LCAxNCwgMjM3LCAxMiwgOSwgMTQsIDIzNywgMTEsIDksIDE0LCAyMzcsIDEwLCA5LCAxNCwgCi0gICAgMjM3LCA5LCA5LCAxNCwgMjM3LCA4LCA5LCAxNCwgMjM3LCA3LCA5LCAxNCwgMjM3LCA2LCA5LCAxNCwgMjM3LCA1LCA5LCAKLSAgICAxNCwgMjM3LCA0LCA5LCAxNCwgMjM3LCAzLCA5LCAxNCwgMjM3LCAyLCA5LCAxNCwgMjM3LCAxLCA5LCAxNCwgMjM3LCAwLCAKLSAgICA5LCAxNCwgMjM2LCAyNTUsIDksIDE0LCAyMzYsIDI1NCwgOSwgMTQsIDIzNiwgMjUzLCA5LCAxNCwgMjM2LCAyNTIsIDksIAotICAgIDE0LCAyMzYsIDI1MSwgOSwgMTQsIDIzNiwgMjUwLCA5LCAxNCwgMjM2LCAyNDksIDksIDE0LCAyMzYsIDI0OCwgOSwgMTQsIAotICAgIDIzNiwgMjQ3LCA5LCAxNCwgMjM2LCAyNDYsIDksIDE0LCAyMzYsIDI0NSwgOSwgMTQsIDIzNiwgMjQ0LCA5LCAxNCwgMjM2LCAKLSAgICAyNDMsIDksIDE0LCAyMzYsIDI0MiwgOSwgMTQsIDIzNiwgMjQxLCA5LCAxNCwgMjM2LCAyNDAsIDksIDE0LCAyMzYsIDIzOSwgCi0gICAgOSwgMTQsIDIzNiwgMjM4LCA5LCAxNCwgMjM2LCAyMzcsIDksIDE0LCAyMzYsIDIzNiwgOSwgMTQsIDIzNiwgMjM1LCA5LCAKLSAgICAxNCwgMjM2LCAyMzQsIDksIDE0LCAyMzYsIDIzMywgOSwgMTQsIDIzNiwgMjMyLCA5LCAxNCwgMjM2LCAyMzEsIDksIDE0LCAKLSAgICAyMzYsIDIzMCwgOSwgMTQsIDIzNiwgMjI5LCA5LCAxNCwgMjM2LCAyMjgsIDksIDE0LCAyMzYsIDIyNywgOSwgMTQsIDIzNiwgCi0gICAgMjI2LCA5LCAxNCwgMjM2LCAyMjUsIDksIDE0LCAyMzYsIDIyNCwgOSwgMTQsIDIzNiwgMjIzLCA5LCAxNCwgMjM2LCAyMjIsIAotICAgIDksIDE0LCAyMzYsIDIyMSwgOSwgMTQsIDIzNiwgMjIwLCA5LCAxNCwgMjM2LCAyMTksIDksIDE0LCAyMzYsIDIxOCwgOSwgCi0gICAgMTQsIDIzNiwgMjE3LCA5LCAxNCwgMjM2LCAyMTYsIDksIDE0LCAyMzYsIDIxNSwgOSwgMTQsIDIzNiwgMjE0LCA5LCAxNCwgCi0gICAgMjM2LCAyMTMsIDksIDE0LCAyMzYsIDIxMiwgOSwgMTQsIDIzNiwgMjExLCA5LCAxNCwgMjM2LCAyMTAsIDksIDE0LCAyMzYsIAotICAgIDIwOSwgOSwgMTQsIDIzNiwgMjA4LCA5LCAxNCwgMjM2LCAyMDcsIDksIDE0LCAyMzYsIDIwNiwgOSwgMTQsIDIzNiwgMjA1LCAKLSAgICA5LCAxNCwgMjM2LCAyMDQsIDksIDE0LCAyMzYsIDIwMywgOSwgMTQsIDIzNiwgMjAyLCA5LCAxNCwgMjM2LCAyMDEsIDksIAotICAgIDE0LCAyMzYsIDIwMCwgOSwgMTQsIDIzNiwgMTk5LCA5LCAxNCwgMjM2LCAxOTgsIDksIDE0LCAyMzYsIDE5NywgOSwgMTQsIAotICAgIDIzNiwgMTk2LCA5LCAxNCwgMjM2LCAxOTUsIDksIDE0LCAyMzYsIDE5NCwgOSwgMTQsIDIzNiwgMTkzLCA5LCAxNCwgMjM2LCAKLSAgICAxOTIsIDksIDE0LCAyMzYsIDE5MSwgOSwgMTQsIDIzNiwgMTkwLCA5LCAxNCwgMjM2LCAxODksIDksIDE0LCAyMzYsIDE4OCwgCi0gICAgOSwgMTQsIDIzNiwgMTg3LCA5LCAxNCwgMjM2LCAxODYsIDksIDE0LCAyMzYsIDE4NSwgOSwgMTQsIDIzNiwgMTg0LCA5LCAKLSAgICAxNCwgMjM2LCAxODMsIDksIDE0LCAyMzYsIDE4MiwgOSwgMTQsIDIzNiwgMTgxLCA5LCAxNCwgMjM2LCAxODAsIDksIDE0LCAKLSAgICAyMzYsIDE3OSwgOSwgMTQsIDIzNiwgMTc4LCA5LCAxNCwgMjM2LCAxNzcsIDksIDE0LCAyMzYsIDE3NiwgOSwgMTQsIDIzNiwgCi0gICAgMTc1LCA5LCAxNCwgMjM2LCAxNzQsIDksIDE0LCAyMzYsIDE3MywgOSwgMTQsIDIzNiwgMTcyLCA5LCAxNCwgMjM2LCAxNzEsIAotICAgIDksIDE0LCAyMzYsIDE3MCwgOSwgMTQsIDIzNiwgMTY5LCA5LCAxNCwgMjM2LCAxNjgsIDksIDE0LCAyMzYsIDE2NywgOSwgCi0gICAgMTQsIDIzNiwgMTY2LCA5LCAxNCwgMjM2LCAxNjUsIDksIDE0LCAyMzYsIDE2NCwgOSwgMTQsIDIzNiwgMTYzLCA5LCAxNCwgCi0gICAgMjM2LCAxNjIsIDksIDE0LCAyMzYsIDE2MSwgOSwgMTQsIDIzNiwgMTYwLCA5LCAxNCwgMjM2LCAxNTksIDksIDE0LCAyMzYsIAotICAgIDE1OCwgOSwgMTQsIDIzNiwgMTU3LCA5LCAxNCwgMjM2LCAxNTYsIDksIDE0LCAyMzYsIDE1NSwgOSwgMTQsIDIzNiwgMTU0LCAKLSAgICA5LCAxNCwgMjM2LCAxNTMsIDksIDE0LCAyMzYsIDE1MiwgOSwgMTQsIDIzNiwgMTUxLCA5LCAxNCwgMjM2LCAxNTAsIDksIAotICAgIDE0LCAyMzYsIDE0OSwgOSwgMTQsIDIzNiwgMTQ4LCA5LCAxNCwgMjM2LCAxNDcsIDksIDE0LCAyMzYsIDE0NiwgOSwgMTQsIAotICAgIDIzNiwgMTQ1LCA5LCAxNCwgMjM2LCAxNDQsIDksIDE0LCAyMzYsIDE0MywgOSwgMTQsIDIzNiwgMTQyLCA5LCAxNCwgMjM2LCAKLSAgICAxNDEsIDksIDE0LCAyMzYsIDE0MCwgOSwgMTQsIDIzNiwgMTM5LCA5LCAxNCwgMjM2LCAxMzgsIDksIDE0LCAyMzYsIDEzNywgCi0gICAgOSwgMTQsIDIzNiwgMTM2LCA5LCAxNCwgMjM2LCAxMzUsIDksIDE0LCAyMzYsIDEzNCwgOSwgMTQsIDIzNiwgMTMzLCA5LCAKLSAgICAxNCwgMjM2LCAxMzIsIDksIDE0LCAyMzYsIDEzMSwgOSwgMTQsIDIzNiwgMTMwLCA5LCAxNCwgMjM2LCAxMjksIDksIDE0LCAKLSAgICAyMzYsIDEyOCwgOSwgMTQsIDIzNiwgMTI3LCA5LCAxNCwgMjM2LCAxMjYsIDksIDE0LCAyMzYsIDEyNSwgOSwgMTQsIDIzNiwgCi0gICAgMTI0LCA5LCAxNCwgMjM2LCAxMjMsIDksIDE0LCAyMzYsIDEyMiwgOSwgMTQsIDIzNiwgMTIxLCA5LCAxNCwgMjM2LCAxMjAsIAotICAgIDksIDE0LCAyMzYsIDExOSwgOSwgMTQsIDIzNiwgMTE4LCA5LCAxNCwgMjM2LCAxMTcsIDksIDE0LCAyMzYsIDExNiwgOSwgCi0gICAgMTQsIDIzNiwgMTE1LCA5LCAxNCwgMjM2LCAxMTQsIDksIDE0LCAyMzYsIDExMywgOSwgMTQsIDIzNiwgMTEyLCA5LCAxNCwgCi0gICAgMjM2LCAxMTEsIDksIDE0LCAyMzYsIDExMCwgOSwgMTQsIDIzNiwgMTA5LCA5LCAxNCwgMjM2LCAxMDgsIDksIDE0LCAyMzYsIAotICAgIDEwNywgOSwgMTQsIDIzNiwgMTA2LCA5LCAxNCwgMjM2LCAxMDUsIDksIDE0LCAyMzYsIDEwNCwgOSwgMTQsIDIzNiwgMTAzLCAKLSAgICA5LCAxNCwgMjM2LCAxMDIsIDksIDE0LCAyMzYsIDEwMSwgOSwgMTQsIDIzNiwgMTAwLCA5LCAxNCwgMjM2LCA5OSwgOSwgMTQsIAotICAgIDIzNiwgOTgsIDksIDE0LCAyMzYsIDk3LCA5LCAxNCwgMjM2LCA5NiwgOSwgMTQsIDIzNiwgOTUsIDksIDE0LCAyMzYsIDk0LCAKLSAgICA5LCAxNCwgMjM2LCA5MywgOSwgMTQsIDIzNiwgOTIsIDksIDE0LCAyMzYsIDkxLCA5LCAxNCwgMjM2LCA5MCwgOSwgMTQsIAotICAgIDIzNiwgODksIDksIDE0LCAyMzYsIDg4LCA5LCAxNCwgMjM2LCA4NywgOSwgMTQsIDIzNiwgODYsIDksIDE0LCAyMzYsIDg1LCAKLSAgICA5LCAxNCwgMjM2LCA4NCwgOSwgMTQsIDIzNiwgODMsIDksIDE0LCAyMzYsIDgyLCA5LCAxNCwgMjM2LCA4MSwgOSwgMTQsIAotICAgIDIzNiwgODAsIDksIDE0LCAyMzYsIDc5LCA5LCAxNCwgMjM2LCA3OCwgOSwgMTQsIDIzNiwgNzcsIDksIDE0LCAyMzYsIDc2LCAKLSAgICA5LCAxNCwgMjM2LCA3NSwgOSwgMTQsIDIzNiwgNzQsIDksIDE0LCAyMzYsIDczLCA5LCAxNCwgMjM2LCA3MiwgOSwgMTQsIAotICAgIDIzNiwgNzEsIDksIDE0LCAyMzYsIDcwLCA5LCAxNCwgMjM2LCA2OSwgOSwgMTQsIDIzNiwgNjgsIDksIDE0LCAyMzYsIDY3LCAKLSAgICA5LCAxNCwgMjM2LCA2NiwgOSwgMTQsIDIzNiwgNjUsIDcsIDQsIDI3LCAyNDQsIDEyNSwgNywgNCwgMjcsIDI0NCwgMTIxLCAKLSAgICA3LCA0LCAyNywgMjQ0LCA3NiwgNywgNCwgMjcsIDI0NCwgMTI0LCA3LCA0LCAyNywgMjQ0LCAxMjMsIDcsIDQsIDI3LCAxOTksIAotICAgIDIyMiwgOTIsIDIxNywgMTUyLCA3LCA0LCAyNywgMjE4LCAxNjgsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIyOCwgMzksIDE1MCwgCi0gICAgNCwgMjcsIDIzMSwgNTksIDI0NSwgMjEzLCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMzUsIDIyNywgMTUwLCA0LCAyNywgMjEzLCAKLSAgICAxODAsIDIyOCwgMzksIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIxMSwgMTYwLCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0MSwgCi0gICAgMTU4LCA5NCwgMjI1LCAxMSwgMjM1LCA1MCwgMjE0LCAxMSwgOTQsIDI3LCAyMTEsIDYsIDIxMCwgMjM0LCAyMTAsIDIzNCwgCi0gICAgMjI1LCAyMzksIDk0LCAxLCAyNTQsIDEzOSwgMjUzLCAxNjIsIDk0LCAxLCAyMTEsIDI0NywgMjU0LCAxNzAsIDk0LCAxLCAKLSAgICAyMTEsIDI0NywgMjQ4LCAxODksIDk0LCAxLCAyMTEsIDI0NywgMjQxLCAyMzgsIDk0LCAxLCAyMTEsIDI0NywgMjM0LCAyNTAsIAotICAgIDk0LCAxLCAyMTEsIDI0NywgMjMzLCA5NCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCA2NSwgOTQsIDEsIDIxMSwgMjQ3LCAKLSAgICAyMjMsIDY3LCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzgsIDk0LCAxLCAyNTQsIDEzOSwgOTYsIDUwLCA5NCwgMSwgMjIwLCAKLSAgICAyMSwgMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAxLCAKLSAgICAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgMjIsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDgsIAotICAgIDIyLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAxLCAxMTIsIDIsIDIyNSwgMjM5LCA5NCwgMSwgMTEyLCAyLCAyMjQsIDc2LCAKLSAgICA5NCwgMSwgMTEyLCAyLCAyMzEsIDE3MSwgOTQsIDEsIDI1MiwgMjksIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjQyLCAyMDIsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjQ4LCAxOTAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjQxLCAyMzksIDIsIDIzMSwgMTcxLCA5NCwgCi0gICAgMSwgMjE0LCA0LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxMCwgOTgsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjE2LCAyMzEsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgNDAsIDIzNCwgMjUxLCAyLCAyNDgsIDIwNywgCi0gICAgOTQsIDEsIDIzNCwgMjUxLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIzMywgOTUsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMxLCAKLSAgICA2NiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjcsIDE5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjEsIDI1MCwgMiwgMjQ4LCAKLSAgICAyMDcsIDk0LCAxLCA0MCwgMjI1LCAyMjIsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMjA3LCA5NCwgCi0gICAgMSwgMjE1LCAxODAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI0LCA0MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjMsIDY4LCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDIyMCwgMjEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjE3LCAzOSwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0MSwgNjEsIDk0LCAxLCAyNTIsIDI5LCAyLCAyMjMsIDE2OSwgOTQsIDEsIDIzNCwgMjUxLCAyLCAKLSAgICAyMjMsIDE2OSwgOTQsIDEsIDIyNSwgMjIyLCAyLCAyMjMsIDE2OSwgOTQsIDI3LCAxMTIsIDIzMywgOTQsIDEwLCAxLCAxMTIsIAotICAgIDIxMiwgNDcsIDUzLCAxNywgMTAsIDEsIDExMiwgMjEyLCA0NywgNDAsIDE3LCAxMCwgMSwgMjUyLCA2NSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjUyLCA2NSwgNDAsIDE3LCAxMCwgMSwgMjUyLCA2NSwgNjUsIDE3LCAxMCwgMSwgMjUyLCA2NSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDIyNSwgMjA2LCA1MywgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNDAsIDE3LCAxMCwgMSwgMjI1LCAyMDYsIDY1LCAxNywgCi0gICAgMTAsIDEsIDIyNSwgMjA2LCAxNDcsIDE3LCAxMCwgMSwgMjUyLCA1MywgNTMsIDE3LCAxMCwgMSwgMjUyLCA1MywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjUyLCA1MywgNjUsIDE3LCAxMCwgMSwgMjUyLCA1MywgMTQ3LCAxNywgMTAsIDEsIDIxNSwgMTQ3LCA1MywgMTcsIAotICAgIDEwLCAxLCAyMTUsIDE0NywgNDAsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDY1LCAxNywgMTAsIDEsIDIxNSwgMTQ3LCAxNDcsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA2LCA1MywgMTcsIDEwLCAxLCAyMTcsIDYsIDQwLCAxNywgMTAsIDEsIDIxNywgNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjE3LCA2LCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDUzLCAxNywgMTAsIDEsIDIxNSwgMTQ5LCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMTUsIDE0OSwgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDE0NywgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEzLCAyNDksIDQwLCAxNywgMTAsIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDEwLCAxLCAyMTMsIDI0OSwgCi0gICAgMTQ3LCAxNywgMTAsIDEsIDIyNSwgMjA0LCA1MywgMTcsIDEwLCAxLCAyMjUsIDIwNCwgNDAsIDE3LCAxMCwgMSwgMjI1LCAKLSAgICAyMDQsIDY1LCAxNywgMTAsIDEsIDIyNSwgMjA0LCAxNDcsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjQ2LCA0NCwgNDAsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgNjUsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyNywgMTU0LCA1MywgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNDAsIDE3LCAxMCwgMSwgMjI3LCAxNTQsIDY1LCAxNywgMTAsIAotICAgIDEsIDIyNywgMTU0LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNywgNTMsIDE3LCAxMCwgMSwgMjE3LCAyNywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNywgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgMjUsIDUzLCAxNywgMTAsIAotICAgIDEsIDIxNywgMjUsIDQwLCAxNywgMTAsIDEsIDIxNywgMjUsIDY1LCAxNywgMTAsIDEsIDIxNywgMjUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDgsIDEzMywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzMsIDQwLCAxNywgMTAsIDEsIDI0OCwgMjAyLCA1MywgMTcsIAotICAgIDEwLCAxLCAyNDgsIDIwMiwgNDAsIDE3LCAxMCwgMSwgMjQ2LCA3MSwgNTMsIDE3LCAxMCwgMSwgMjQ2LCA3MSwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjQ4LCAxMzEsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTMxLCA0MCwgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMjM1LCAxMjEsIDQwLCAxNywgMTAsIDEsIDIyMiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyMjIsIDE3MiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgMTc1LCA0MCwgMTcsIDEwLCAxLCAyMzQsIAotICAgIDE3NSwgNjUsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDE0NywgMTcsIDEwLCAxLCAyNDMsIDEyMywgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjQzLCAxMjMsIDQwLCAxNywgMTAsIDEsIDI0MywgMTIzLCA2NSwgMTcsIDEwLCAxLCAyNDMsIDEyMywgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0MiwgMTAyLCA1MywgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNDAsIDE3LCAxMCwgMSwgMjQyLCAxMDIsIDY1LCAxNywgCi0gICAgMTAsIDEsIDI0MiwgMTAyLCAxNDcsIDE3LCAxMCwgMSwgMjI5LCAzLCA1MywgMTcsIDEwLCAxLCAyMjksIDMsIDQwLCAxNywgCi0gICAgMTAsIDEsIDIyOSwgMywgNjUsIDE3LCAxMCwgMSwgMjI5LCAzLCAxNDcsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIAotICAgIDUzLCAxNywgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE5LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyMTUsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA2NSwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0MSwgMjE5LCAyLCA3OSwgNzcsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgNzcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQyLCAxNzIsIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDIsIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDcsIDE0MiwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDc5LCAyNTIsIDEzMywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIAotICAgIDIsIDIwMiwgNzcsIDUzLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMTYsIDU5LCAKLSAgICA0OCwgMTAsIDE2LCA1OSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIDQ4LCAxMCwgMTYsIDExMywgMTcwLCA1MSwgMTAsIDE2LCAKLSAgICAxMzQsIDE3MCwgNDgsIDEwLCAxNiwgMTM0LCAxNzAsIDUxLCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCAKLSAgICA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgNTEsIDEwLCAxNiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIAotICAgIDE2LCAyNDQsIDExLCAxNzAsIDUxLCAxMCwgMTYsIDUyLCA2NywgMjUyLCAxNDEsIDUxLCAxMCwgMTYsIDExMywgMTcwLCAKLSAgICAyMTMsIDE4OSwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA1MSwgMTAsIDE2LCAyMjIsIDIzMywgMTAsIDE2LCAKLSAgICA0LCAyMTcsIDgxLCA0OCwgMTAsIDE2LCA0LCAyMTcsIDgxLCA1MSwgMTAsIDEsIDIyOSwgODAsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyOSwgODAsIDQwLCAxNywgMTAsIDEsIDIyOSwgODAsIDY1LCAxNywgMTAsIDEsIDIyOSwgODAsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMDQsIDUzLCAxNywgMTAsIDEsIDEwNCwgNDAsIDE3LCAxMCwgMSwgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIyNiwgCi0gICAgMjM1LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDEwNCwgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgMjE0LCAwLCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDQwLCAxNywgCi0gICAgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA1MywgMTcsIDEwLCAxLCAyMzQsIDczLCAyMjYsIDIzNSwgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAxNjAsIDUzLCAxNywgMTAsIDEsIDE2MCwgNDAsIDE3LCAxMCwgMSwgMTYwLCA2NSwgMTcsIDEwLCAxLCAxNjAsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTQsIDIwNywgMjM0LCAxODYsIDIzNCwgNzMsIDExMiwgMjMxLCAxOTMsIDY1LCAxNywgMTAsIDEsIDIxNCwgCi0gICAgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgMTQ3LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAyNTQsIDI0NCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyNTQsIDI0NCwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDIxMiwgMzEsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTA0LCA1MywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDEwNCwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjYsIDIzNSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjYsIDIzNSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAKLSAgICAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA0MCwgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNjUsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgMjAyLCAKLSAgICA3NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA1MywgMTcsIDEwLCAxLCAyNDQsIDE2OCwgCi0gICAgNzksIDQwLCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTIyLCAKLSAgICA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyNTIsIDU1LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAKLSAgICAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAKLSAgICAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMTUxLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTIyLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAKLSAgICAyMTcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgCi0gICAgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTAsIDExMiwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxNTEsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMjQsIDgyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjQsIDgyLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMjUxLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjM0LCAyNTEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIzMywgMTAzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTIyLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCA1MywgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjgsIDYzLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjgsIAotICAgIDYzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQxLCAKLSAgICAyMTksIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMjAzLCAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjMsIDk2LCAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAxMTIsIDIzMSwgMTkzLCAyLCAyMTgsIDIzLCAxMTIsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4MywgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDIzNCwgCi0gICAgMjA0LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ0LCAxNjYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDIzNCwgMjA2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgCi0gICAgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEwLCAxMDksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMjI4LCA2MywgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgCi0gICAgMTAzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgCi0gICAgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMjgsIDYzLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMjgsIDYzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMTIsIDIzMSwgMTkzLCAyLCAyMTgsIDIzLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyNDEsIDIxOSwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1MiwgNTUsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgCi0gICAgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzQsIAotICAgIDEzMCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgCi0gICAgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMTAsIDExMiwgMiwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDI0NCwgMTQzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAKLSAgICAxNDMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI0LCAKLSAgICA4MiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgCi0gICAgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzQsIAotICAgIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNjUsIAotICAgIDE3LCAxMCwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAKLSAgICA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgCi0gICAgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDIxOCwgCi0gICAgMjMsIDExMiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxNiwgMTkzLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgMTQ3LCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCA3OSwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgCi0gICAgMjIwLCA5NCwgMiwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIwLCAKLSAgICA2MCwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIAotICAgIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgCi0gICAgODEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDI1NCwgMTk3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAxNTEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjM0LCAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIyMywgOTYsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIyMywgOTYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDEyMiwgMTQ3LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTAsIDExMiwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMTEyLCAyLCAyNDQsIDE2NCwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDExMiwgMiwgMjQ0LCAxNjQsIDUzLCAxNywgMjI2LCAxNDYsIDQzLCAyMjYsIDMsIDIyNiwgMTQ2LCA0NCwgMjI2LCAzLCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgCi0gICAgMTY3LCAyLCAxNTEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDEyMiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIAotICAgIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgCi0gICAgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDYwLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgCi0gICAgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgCi0gICAgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgMTUxLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAKLSAgICAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzMsIAotICAgIDEwMywgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMjM0LCAxMzAsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgCi0gICAgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAxNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIAotICAgIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxNTEsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAKLSAgICAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAKLSAgICAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjUyLCAKLSAgICA1NSwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNjUsIAotICAgIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIyLCA0LCAyMTQsIDEyOCwgMjUzLCAyMzgsIDIzNCwgNCwgMjE4LCAxMzAsIAotICAgIDUsIDUzLCAxNywgMTAsIDI3LCAyMjQsIDc4LCAyMTQsIDEyOCwgMjUzLCAyMzgsIDIzNCwgNCwgMjE4LCAxMzAsIDUsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNTQsIDE1MywgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjMwLCAxNTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMjIsIDUsIDUzLCAxNywgMTAsIDI3LCAyMjMsIDE0MywgNTMsIDE3LCAxMCwgMjcsIDI1NCwgCi0gICAgMTcyLCA1MywgMTcsIDEwLCAyNywgMjEyLCA0OSwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMywgMjU0LCAxNzIsIDIxMiwgNDgsIDEwLCAyNywgMjM1LCAxMzQsIDIyMywgMzQsIDUwLCAxMCwgMjcsIDI1MSwgCi0gICAgMjMwLCAyNTQsIDM5LCAyNTQsIDQwLCA0NSwgMjIxLCAxNTYsIDQ1LCAyMjEsIDQ1LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIAotICAgIDIyMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAKLSAgICAxNjcsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgCi0gICAgMTExLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDg5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDksIDIxOSwgMjI0LCAKLSAgICAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMTA5LCAyNDksIDIxOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMTA5LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjI2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMjAsIDE1MCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAzMSwgNzgsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDIyNCwgMTMsIDc4LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgCi0gICAgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAyNTEsIDE1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIAotICAgIDMxLCA2NywgMjAzLCAyNDUsIDE2MywgMzgsIDI3LCA0MywgMjQyLCAyNywgMzgsIDI3LCA0NCwgMjQyLCAyNywgMzgsIDUyLCAKLSAgICAyMTYsIDg5LCA0MywgMjQyLCAyNywgMzgsIDUyLCAyMTYsIDg5LCA0NCwgMjQyLCAyNywgMzgsIDIzMSwgMjMzLCA0MywgCi0gICAgMjQyLCAyNywgMzgsIDIzMSwgMjMzLCA0NCwgMjQyLCAyNywgMzgsIDI0OSwgMTk3LCAyMzEsIDIzMiwgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCA1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAxNjAsIAotICAgIDI0OCwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE1MSwgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDEyMSwgMjMyLCAyMTMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyMjYsIDMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIAotICAgIDQ0LCAyMjYsIDMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyNDksIDk5LCAxMjcsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDQ0LCAyNDksIDk5LCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0MywgODUsIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDg1LCAKLSAgICAyMzMsIDIwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgCi0gICAgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyNDksIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDcxLCAyNDksIDE2MSwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDI0OSwgMTYxLCAxMjcsIDIyMCwgMTMxLCAyNDcsIDEyMCwgNzEsIDIyMCwgMTMxLCAKLSAgICAyNDcsIDEyMCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDQyLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgCi0gICAgNjcsIDQ0LCA0MiwgMTI3LCAyNDgsIDE1NSwgMjI2LCAxMTksIDI1MCwgMTcyLCAyMjYsIDExOSwgMjEyLCAzMiwgMjI2LCAKLSAgICAxMTksIDUyLCAyMTIsIDMyLCAyMjYsIDExOSwgMjQ4LCAxNTUsIDEyMSwgMjMyLCAyMTMsIDI1MCwgMTcyLCAxMjEsIDIzMiwgCi0gICAgMjEzLCAyMTIsIDMyLCAxMjEsIDIzMiwgMjEzLCA0LCAyNDksIDIxOSwgNCwgMTA5LCAyNDksIDIxOSwgNCwgMjQzLCAyMjksIAotICAgIDIxOCwgMTI5LCA0LCAyMjAsIDE1MCwgNCwgMjQ5LCAyMjYsIDQsIDIyNCwgMTMsIDc4LCA0LCAyNDUsIDMxLCA3OCwgNCwgCi0gICAgMjQ1LCAxNjAsIDI0OCwgMTU2LCA0LCA0MywgMjI2LCAzLCA0LCA0NCwgMjI2LCAzLCA0LCA0MywgMjQ5LCA5OSwgMTI3LCA0LCAKLSAgICA0NCwgMjQ5LCA5OSwgMTI3LCA0LCA0MywgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNCwgNTQsIDUwLCA0LCAyNTQsIDEyNiwgNCwgMjUzLCAyMTYsIDQsIDk2LCA1MCwgNCwgMjQwLCAxNjcsIDQsIDIzMywgCi0gICAgMTUsIDUwLCA0LCAyNDIsIDEzMCwgNTAsIDQsIDI0NSwgOTgsIDUwLCA0LCAyMjMsIDUwLCAyMTksIDQ2LCA0LCAyNDcsIAotICAgIDEzMiwgNTAsIDQsIDIyNSwgMTgyLCA1MCwgNCwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMCwgMjQ0LCAxNjQsIDUzLCAxNywgCi0gICAgMTAsIDIxNywgNDQsIDIsIDI0NCwgMTY0LCA0OCwgMTAsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyMTcsIDc4LCAyNDQsIDEsIAotICAgIDEwLCAyMzQsIDIwNCwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDUzLCAxNywgMTAsIDI0NCwgMTY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjQ4LCAxODUsIDUzLCAxNywgMTAsIDI0OCwgMTg1LCAxNDcsIDE3LCAxMCwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDIzNCwgCi0gICAgMjA2LCAxNDcsIDE3LCAxMCwgMjIwLCA5NCwgNTMsIDE3LCAxMCwgMjIwLCA5NCwgMTQ3LCAxNywgMTAsIDIxOCwgNDYsIDUzLCAKLSAgICAxNywgMTAsIDIxOCwgNDYsIDE0NywgMTcsIDEwLCAxLCAyMDIsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIAotICAgIDc3LCA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDc3LCAKLSAgICA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNzcsIDUzLCAKLSAgICAxNywgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA1MywgCi0gICAgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNjUsIDE3LCAxMCwgMSwgNzksIAotICAgIDIsIDIwMiwgNzcsIDE0NywgMTcsIDEwLCAxLCAxMTIsIDUzLCAxNywgMTAsIDEsIDExMiwgNDAsIDE3LCAxMCwgMSwgMjUyLCAKLSAgICA1NSwgNTMsIDE3LCAxMCwgMSwgMjUyLCA1NSwgNDAsIDE3LCAxMCwgMSwgMjUyLCA1NSwgNjUsIDE3LCAxMCwgMSwgMjUyLCAKLSAgICA1NSwgMTQ3LCAxNywgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjUsIDUzLCAxNywgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjUsIAotICAgIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDgsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIxNywgOCwgMTQ3LCAxNywgMTAsIDEsIDIxNiwgMTkzLCA1MywgMTcsIDEwLCAxLCAyMTYsIDE5MywgNDAsIAotICAgIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDY1LCAxNywgMTAsIDEsIDIxNiwgMTkzLCAxNDcsIDE3LCAxMCwgMSwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAxNTEsIDQwLCAxNywgMTAsIDEsIDE1MSwgNjUsIDE3LCAxMCwgMSwgMTUxLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMTIyLCA1MywgMTcsIDEwLCAxLCAxMjIsIDQwLCAxNywgMTAsIDEsIDEyMiwgNjUsIDE3LCAxMCwgMSwgMTIyLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAxLCAyMzQsIDEzMCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxOTYsIAotICAgIDQwLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA1MywgMTcsIDEwLCAxLCAyMTYsIDIwMywgNDAsIDE3LCAxMCwgMSwgMjIzLCA5NiwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMSwgMjEwLCAxMDksIDUzLCAxNywgMTAsIDEsIDIxMCwgMTA5LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMjEsIDE2NywgNTMsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDQwLCAxNywgMTAsIDEsIDIyMSwgCi0gICAgMTY3LCA2NSwgMTcsIDEwLCAxLCAyMjEsIDE2NywgMTQ3LCAxNywgMTAsIDEsIDIyMCwgNjAsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyMCwgNjAsIDQwLCAxNywgMTAsIDEsIDIyMCwgNjAsIDY1LCAxNywgMTAsIDEsIDIyMCwgNjAsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDI3LCA1MywgMTcsIDEwLCAxLCAyMjIsIDI3LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDI3LCA2NSwgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDUzLCAxNywgMTAsIDEsIDI0OCwgMjE3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDgsIDIxNywgNjUsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDgxLCA1MywgMTcsIAotICAgIDEwLCAxLCAyMTcsIDgxLCA0MCwgMTcsIDEwLCAxLCAyMTcsIDgxLCA2NSwgMTcsIDEwLCAxLCAyMTcsIDgxLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjEwLCAxMTIsIDUzLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyMTAsIDExMiwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDE0NywgMTcsIDEwLCAxLCAyNTQsIDE5NywgNTMsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIAotICAgIDQwLCAxNywgMTAsIDEsIDI1NCwgMTk3LCA2NSwgMTcsIDEwLCAxLCAyNTQsIDE5NywgMTQ3LCAxNywgMTAsIDEsIDI0MiwgCi0gICAgMjQ1LCA1MywgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNDAsIDE3LCAxMCwgMSwgMjQyLCAyNDUsIDY1LCAxNywgMTAsIDEsIAotICAgIDI0MiwgMjQ1LCAxNDcsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDUzLCAxNywgMTAsIDEsIDI0NCwgMTQzLCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDQsIDE0MywgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDE0NywgMTcsIDEwLCAxLCAyMjQsIDgyLCA1MywgMTcsIAotICAgIDEwLCAxLCAyMjQsIDgyLCA0MCwgMTcsIDEwLCAxLCAyMjQsIDgyLCA2NSwgMTcsIDEwLCAxLCAyMjQsIDgyLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCAyNTEsIDUzLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA0MCwgMTcsIDEwLCAxLCAyMzQsIDI1MSwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDE0NywgMTcsIDEwLCAxLCAyMzMsIDEwMywgNTMsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDQwLCAxNywgMTAsIDEsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAxLCAyMzMsIDEwMywgMTQ3LCAxNywgMTAsIDEsIDY2LCA1MywgCi0gICAgMTcsIDEwLCAxLCA2NiwgNDAsIDE3LCAxMCwgMSwgNjYsIDY1LCAxNywgMTAsIDEsIDY2LCAxNDcsIDE3LCAxMCwgMSwgMjI4LCAKLSAgICA2MywgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMSwgMjI4LCA2MywgNjUsIDE3LCAxMCwgMSwgMjI4LCAKLSAgICA2MywgMTQ3LCAxNywgMTAsIDEsIDI0MSwgMjE5LCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMSwgMjEyLCAzMSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMSwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMzEsIDE5MywgCi0gICAgNDAsIDE3LCAxMCwgMSwgNzksIDUzLCAxNywgMTAsIDEsIDc5LCA0MCwgMTcsIDEwLCAxLCA3OSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgNzksIDE0NywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgCi0gICAgMjAyLCA3NywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDI1MiwgNDMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDExMiwgNDAsIDE3LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MywgMjE5LCAxOCwgMTI2LCAyNDUsIDMxLCA3OCwgCi0gICAgMTI2LCAyMjMsIDI1NCwgNzgsIDEyNiwgNTQsIDUwLCAxMjYsIDI0NywgMTMyLCA1MCwgMTI2LCAyMjUsIDE4MiwgNTAsIAotICAgIDEyNiwgMjU0LCAxMjYsIDEyNiwgMjU0LCA1NywgMTI2LCA0MywgMjI2LCAzLCAxMjYsIDQ0LCAyMjYsIDMsIDEyNiwgMjUzLCAKLSAgICAyMTYsIDEyNiwgOTYsIDUwLCAxMjYsIDI0OSwgMjE5LCAxMjYsIDI0MCwgMTY3LCAxMjYsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMTI2LCAyMTksIDQ2LCAxMjYsIDIxLCAyMTAsIDg2LCAxMjYsIDIxLCAxMTAsIDEyNiwgMjEsIDEwNSwgMTI2LCAyMSwgMTU4LCAKLSAgICAxMjYsIDIxLCAxNjEsIDEyNiwgMjEsIDE4OSwgMTI2LCAyMSwgMTk0LCAxMjYsIDIxLCAxOTgsIDEyNiwgMjEsIDE5NSwgCi0gICAgMTI2LCAyMSwgMjAwLCAxMjYsIDI0OSwgMjI2LCAxMjYsIDIyMCwgMTUwLCAxMjYsIDIzMywgMTUsIDUwLCAxMjYsIDI0NSwgCi0gICAgOTgsIDUwLCAxMjYsIDI0MiwgMTMwLCA1MCwgMTI2LCAyMjQsIDEzLCA3OCwgMTI2LCAyNDksIDIxNywgMjUzLCAyMDYsIAotICAgIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgMSwgMjUzLCAxNTgsIDEyNiwgNywgNiwgMSwgMjUxLCA2NiwgMTI2LCA3LCAKLSAgICA2LCAxLCAyNDksIDYwLCAxMjYsIDcsIDYsIDEsIDc1LCAxMjYsIDcsIDYsIDEsIDI0NSwgNiwgMTI2LCA3LCA2LCAxLCAyNDMsIAotICAgIDIwMiwgMTI2LCA3LCA2LCAxLCAyNDIsIDYwLCAxMjYsIDcsIDYsIDEsIDczLCAxMjYsIDcsIDYsIDEsIDIzNSwgMTQ0LCAKLSAgICAxMjYsIDcsIDYsIDEsIDIzNSwgMjMsIDEyNiwgNywgNiwgMSwgMTU2LCAxMjYsIDcsIDYsIDEsIDE5MywgMTI2LCA3LCA2LCAKLSAgICAxLCAyMzAsIDI1LCAxMjYsIDcsIDYsIDEsIDc2LCAxMjYsIDcsIDYsIDEsIDIyNiwgMTA1LCAxMjYsIDcsIDYsIDEsIDIyNCwgCi0gICAgOTYsIDEyNiwgNywgNiwgMSwgMTUzLCAxMjYsIDcsIDYsIDEsIDIyMiwgOTEsIDEyNiwgNywgNiwgMSwgMjE3LCAxNTIsIAotICAgIDEyNiwgNywgNiwgMSwgNzAsIDEyNiwgNywgNiwgMSwgMjE0LCAxMDUsIDEyNiwgNywgNiwgMSwgMjEyLCA5OCwgMTI2LCA3LCAKLSAgICA2LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA2LCAxLCAyMTEsIDExNywgMTI2LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgCi0gICAgNDIsIDEyNywgMTI2LCAyMjMsIDUwLCAyMTksIDQ2LCAxMjYsIDQ0LCA0MiwgMTI3LCAxMjYsIDI1MCwgMzEsIDI1NSwgMTQsIAotICAgIDEyNiwgMTIxLCAyMzIsIDIxMywgMTI2LCAyNDIsIDEzNywgMjU1LCAxNCwgMTI2LCA3LCA0LCAxLCA2MSwgMTI2LCA3LCA0LCAKLSAgICAxLCAyNTMsIDE1OCwgMTI2LCA3LCA0LCAxLCAyNTEsIDY2LCAxMjYsIDcsIDQsIDEsIDI0OSwgNjAsIDEyNiwgNywgNCwgMSwgCi0gICAgNzUsIDEyNiwgNywgNCwgMSwgMjQ1LCA2LCAxMjYsIDcsIDQsIDEsIDI0MywgMjAyLCAxMjYsIDcsIDQsIDEsIDI0MiwgNjAsIAotICAgIDEyNiwgNywgNCwgMSwgNzMsIDEyNiwgNywgNCwgMSwgMjM1LCAxNDQsIDEyNiwgNywgNCwgMSwgMjM1LCAyMywgMTI2LCA3LCAKLSAgICA0LCAxLCAxNTYsIDEyNiwgNywgNCwgMSwgMTkzLCAxMjYsIDcsIDQsIDEsIDIzMCwgMjUsIDEyNiwgNywgNCwgMSwgNzYsIAotICAgIDEyNiwgNywgNCwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNCwgMSwgMjI0LCA5NiwgMTI2LCA3LCA0LCAxLCAxNTMsIDEyNiwgNywgCi0gICAgNCwgMSwgMjIyLCA5MSwgMTI2LCA3LCA0LCAxLCAyMTcsIDE1MiwgMTI2LCA3LCA0LCAxLCA3MCwgMTI2LCA3LCA0LCAxLCAKLSAgICAyMTQsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMTIsIDk4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDQsIDEsIAotICAgIDIxMSwgMTE3LCAxMjYsIDcsIDQsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAyNDksIDk5LCAxMjcsIDEyNiwgNjcsIDIzMiwgCi0gICAgMjEzLCAxMjYsIDQ0LCAyNDksIDk5LCAxMjcsIDEyNiwgMTgyLCAxMjYsIDQzLCA3MSwgMjI2LCAzLCAxMjYsIDQ0LCA3MSwgCi0gICAgMjI2LCAzLCAxMDEsIDEwOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMDEsIDQzLCAyNDksIDE2MSwgMTI3LCAxMDEsIDQ0LCAKLSAgICAyNDksIDE2MSwgMTI3LCAxMDEsIDEwOSwgMjQ5LCAyMTksIDEwMSwgNTYsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMTAxLCA1NiwgCi0gICAgMSwgMjExLCAyMjcsIDEwMSwgNTYsIDEsIDQsIDYxLCAxMDEsIDU2LCAxLCA0LCA3MywgMTAxLCA1NiwgMSwgNCwgNzAsIAotICAgIDEwMSwgNTYsIDEsIDQsIDc1LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgMSwgNCwgMTkxLCAxMDEsIDU2LCAxLCA0LCAKLSAgICAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDQsIDIxNSwgMTE4LCAxMDEsIDIzNCwgCi0gICAgMjAxLCAyMjQsIDE3MywgMjE5LCAzMSwgNzgsIDEwMSwgNTYsIDEsIDYxLCAxMDEsIDU2LCAxLCA3MywgMTAxLCA1NiwgMSwgCi0gICAgNzAsIDEwMSwgNTYsIDEsIDc1LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgMSwgMTc2LCAxMDEsIDU2LCAxLCAyMzQsIDkyLCAKLSAgICAxMDEsIDU2LCAxLCAyMzMsIDIxNywgMTAxLCA1NiwgMSwgMjM0LCAxODIsIDEwMSwgNTYsIDEsIDIzNCwgMjgsIDEwMSwgNTYsIAotICAgIDEsIDIwNiwgMTAxLCA1NiwgMSwgMjE5LCAxOTEsIDEwMSwgNTYsIDEsIDIxOCwgODMsIDEwMSwgNTYsIDEsIDIyMSwgMTgxLCAKLSAgICAxMDEsIDU2LCAxLCAyMTksIDU4LCAxMDEsIDU2LCAxLCAyMTcsIDEwNSwgMTAxLCA1NiwgMSwgMjE2LCAxMTcsIDEwMSwgNTYsIAotICAgIDEsIDIxNSwgMTE4LCAxMDEsIDU2LCAxLCAyMTcsIDIyLCAxMDEsIDU2LCAxLCAxMTEsIDEwMSwgNTYsIDEsIDE5NywgMTAxLCAKLSAgICA1NiwgMSwgMjI4LCAyMzMsIDEwMSwgNTYsIDEsIDIyNywgMjM3LCAxMDEsIDU2LCAxLCAyMjksIDEwNywgMTAxLCA1NiwgMSwgCi0gICAgMjI4LCA3NCwgMTAxLCA1NiwgMSwgMTYyLCAxMDEsIDU2LCAxLCAyNDEsIDE4MCwgMTAxLCA1NiwgMSwgMjQwLCAyMjIsIAotICAgIDEwMSwgNTYsIDEsIDI0MSwgMjM4LCAxMDEsIDU2LCAxLCAyNDEsIDY4LCAxMDEsIDU2LCAxLCAxODQsIDEwMSwgNTYsIDEsIAotICAgIDIzMCwgMjMwLCAxMDEsIDU2LCAxLCAyMzAsIDEwMiwgMTAxLCA1NiwgMSwgMjMxLCA5MSwgMTAxLCA1NiwgMSwgMjMwLCAKLSAgICAxNjEsIDEwMSwgNTYsIDEsIDE5MSwgMTAxLCA1NiwgMSwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDIxMCwgMjQ0LCAxMDEsIAotICAgIDU2LCAxLCAyMDUsIDEwMSwgNTYsIDEsIDIyMywgMzUsIDEwMSwgNTYsIDEsIDIyMiwgMTQwLCAxMDEsIDU2LCAxLCAyMjMsIAotICAgIDEyOCwgMTAxLCA1NiwgMSwgMjIyLCAyMTEsIDEwMSwgNTYsIDEsIDIxMiwgNjUsIDEwMSwgNTYsIDEsIDIzMCwgMjUsIDEwMSwgCi0gICAgNTYsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAxMDEsIDI0LCAyNDQsIAotICAgIDEwMywgMTAxLCAyNCwgMSwgMjM0LCA1OCwgMTAxLCAyNCwgMSwgMjE4LCAyMTUsIDEwMSwgMjQsIDEsIDIzNCwgNTEsIDEwMSwgCi0gICAgMjQsIDEsIDIyOCwgMjI2LCAxMDEsIDI0LCAxLCAyMjgsIDIyNCwgMTAxLCAyNCwgMSwgMjI4LCAyMjMsIDEwMSwgMjQsIDEsIAotICAgIDIxNiwgMTAxLCAxMDEsIDI0LCAxLCAyMTgsIDIwNCwgMTAxLCAyNCwgMSwgMjIzLCAyNiwgMTAxLCAyNCwgMSwgMjIzLCAyMSwgCi0gICAgMTAxLCAyNCwgMSwgMjIzLCAxOCwgMTAxLCAyNCwgMSwgMjIzLCAxMSwgMTAxLCAyNCwgMSwgMjIzLCA2LCAxMDEsIDI0LCAxLCAKLSAgICAyMjMsIDEsIDEwMSwgMjQsIDEsIDIyMywgMTIsIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIzMCwgMjE3LCAKLSAgICAxMDEsIDI0LCAxLCAyMjUsIDk1LCAxMDEsIDI0LCAxLCAyMTgsIDIxMiwgMTAxLCAyNCwgMSwgMjI1LCA4NCwgMTAxLCAyNCwgCi0gICAgMSwgMjE5LCAxNDgsIDEwMSwgMjQsIDEsIDIxOCwgMjA5LCAxMDEsIDI0LCAxLCAyMzYsIDU2LCAxMDEsIDI0LCAxLCAyNTAsIAotICAgIDQ2LCAxMDEsIDI0LCAxLCAyMTgsIDIxOSwgMTAxLCAyNCwgMSwgMjUwLCAxMDYsIDEwMSwgMjQsIDEsIDIzNCwgMTEwLCAKLSAgICAxMDEsIDI0LCAxLCAyMTYsIDE3MywgMTAxLCAyNCwgMSwgMjI1LCAxMzEsIDEwMSwgMjQsIDEsIDI0MSwgMTcyLCAxMDEsIAotICAgIDI0LCAxLCA2MSwgMTAxLCAyNCwgMSwgMjU0LCAyNDMsIDEwMSwgMjQsIDEsIDE5MSwgMTAxLCAyNCwgMSwgMjExLCA5MiwgCi0gICAgMTAxLCAyNCwgMSwgMjQ1LCAxMTcsIDEwMSwgMjQsIDEsIDc1LCAxMDEsIDI0LCAxLCAyMTEsIDM2LCAxMDEsIDI0LCAxLCAKLSAgICAyMTEsIDQ3LCAxMDEsIDI0LCAxLCA3NiwgMTAxLCAyNCwgMSwgMjEyLCA2NSwgMTAxLCAyNCwgMSwgMjEyLCA2MiwgMTAxLCAKLSAgICAyNCwgMSwgMjI2LCAyMzQsIDEwMSwgMjQsIDEsIDIxMCwgMjQ0LCAxMDEsIDI0LCAxLCA3MCwgMTAxLCAyNCwgMSwgMjEyLCAKLSAgICAxMSwgMTAxLCAyNCwgMSwgMjEyLCAyMiwgMTAxLCAyNCwgMSwgMjExLCAyNTAsIDEwMSwgMjQsIDEsIDIxMCwgMjEyLCAxMDEsIAotICAgIDI0LCAxLCAyNDUsIDU1LCAxMDEsIDI0LCAxLCAyMTEsIDgsIDEwMSwgMjQsIDEsIDczLCAxMjYsIDI1MCwgMTc2LCA1MCwgCi0gICAgMTI2LCAyMjQsIDIyOCwgNTAsIDEyNiwgMjI4LCA1MiwgNTAsIDEyNiwgMjMxLCAyMzIsIDEyNiwgMjUxLCAxMzUsIDEzMCwgCi0gICAgMTI2LCAyMTEsIDQwLCA1MCwgMTI2LCAyMTEsIDIxNywgNTAsIDEwMSwgMjQ0LCAxOCwgMTkyLCAyMTMsIDIzOSwgMTAxLCAKLSAgICAxNDAsIDc0LCAxMDEsIDIxNCwgMTUzLCA3NCwgMTAxLCA5NywgNzQsIDEwMSwgMjQ2LCAxMDQsIDc0LCAxMDEsIDg1LCAyMTgsIAotICAgIDIzNCwgMTAxLCA3MSwgMjUwLCAzNSwgMjM1LCAyMDQsIDI1NCwgOTksIDI1NCwgMTIwLCAyMzUsIDIwNCwgMjU0LCA5OSwgCi0gICAgMjIwLCAxMzcsIDIzNSwgMjA0LCAyNTQsIDk5LCAyMTYsIDIzNiwgMjI2LCAyNDksIDIyMywgNzIsIDI1MCwgMTQyLCAyMjMsIAotICAgIDcyLCAyNTAsIDE0MiwgNjIsIDU3LCAzLCAyNTMsIDE0MiwgNjEsIDYyLCA1NywgMywgMjUzLCAxMTEsIDc1LCA2MiwgNTcsIAotICAgIDMsIDI1MywgMTIwLCA3MywgNjIsIDU3LCAzLCAyNTMsIDg4LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEzOCwgNzAsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxNTcsIDI0OCwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTA0LCAyNDgsIDkwLCA2MiwgNTcsIDMsIDI1MywgMTQ0LCAKLSAgICAyNDgsIDMsIDYyLCA1NywgMywgMjUzLCAxMzQsIDI0NywgMTQ1LCA2MiwgNTcsIDMsIDI1MywgOTgsIDI0NiwgNzgsIDYyLCAKLSAgICA1NywgMywgMjUzLCA5MiwgMjM1LCAxNDEsIDYyLCA1NywgMywgMjUzLCAxMDMsIDIzNSwgMTI2LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTEzLCAyMzUsIDY4LCA2MiwgNTcsIDMsIDI1MywgODQsIDIzNSwgNTEsIDYyLCA1NywgMywgMjUzLCA3MiwgMTc2LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTA1LCAyMzQsIDE4MiwgNjIsIDU3LCAzLCAyNTMsIDgyLCAyMzQsIDkyLCA2MiwgNTcsIDMsIDI1MywgCi0gICAgNzksIDIzNCwgMjgsIDYyLCA1NywgMywgMjUzLCA2OCwgMjMzLCAyMTcsIDYyLCA1NywgMywgMjUzLCA2OSwgMTg0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTM1LCAyMzEsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzYsIDIzMCwgMjMwLCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTMzLCAyMzAsIDE2MSwgNjIsIDU3LCAzLCAyNTMsIDEyNSwgMjMwLCAxMDIsIDYyLCA1NywgMywgMjUzLCAxNDYsIDE5NywgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDEyNCwgMjI5LCAxMDcsIDYyLCA1NywgMywgMjUzLCAxMTgsIDIyOCwgMjMzLCA2MiwgNTcsIDMsIAotICAgIDI1MywgOTcsIDIyOCwgNzQsIDYyLCA1NywgMywgMjUzLCA5NCwgMjI3LCAyMzcsIDYyLCA1NywgMywgMjUzLCAxNTMsIDE5MCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDc3LCAyMjUsIDIyMSwgNjIsIDU3LCAzLCAyNTMsIDExMCwgMjI1LCAxMDgsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMzcsIDIyNSwgMTYsIDYyLCA1NywgMywgMjUzLCA5OSwgMjI0LCAxNTAsIDYyLCA1NywgMywgMjUzLCAxMzIsIAotICAgIDIyNCwgODgsIDYyLCA1NywgMywgMjUzLCA3MSwgMjI0LCA2OSwgNjIsIDU3LCAzLCAyNTMsIDEyNywgMjI0LCA1MywgNjIsIAotICAgIDU3LCAzLCAyNTMsIDExNiwgMjI0LCA0MiwgNjIsIDU3LCAzLCAyNTMsIDg5LCAyMDUsIDYyLCA1NywgMywgMjUzLCAxMjEsIAotICAgIDIyMywgMTI4LCA2MiwgNTcsIDMsIDI1MywgOTYsIDIyMywgMzUsIDYyLCA1NywgMywgMjUzLCAxNTUsIDIyMiwgMjExLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTIyLCAyMjIsIDE0MCwgNjIsIDU3LCAzLCAyNTMsIDExNywgMjA2LCA2MiwgNTcsIDMsIDI1MywgMTQwLCAKLSAgICAyMjEsIDE4MSwgNjIsIDU3LCAzLCAyNTMsIDEwOCwgMjE5LCAxOTEsIDYyLCA1NywgMywgMjUzLCAxMzYsIDIxOSwgNTgsIAotICAgIDYyLCA1NywgMywgMjUzLCA5MSwgMjE4LCA4MywgNjIsIDU3LCAzLCAyNTMsIDkwLCAyMTcsIDEwNSwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDE1MSwgMjE3LCAyMiwgNjIsIDU3LCAzLCAyNTMsIDExMiwgMjE2LCAxMTcsIDYyLCA1NywgMywgMjUzLCAxNDksIAotICAgIDExMSwgNjIsIDU3LCAzLCAyNTMsIDgwLCAyMTUsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDk1LCAyMTIsIDY1LCA2MiwgNTcsIAotICAgIDMsIDI1MywgNzQsIDIxMiwgMjIsIDYyLCA1NywgMywgMjUzLCAxMDksIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTA3LCAKLSAgICAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA3NSwgMjEwLCA5NCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEyOCwgMjEwLCAyMywgNjIsIDU3LCAzLCAyNTMsIDEyMywgMjU1LCA3NSwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDEwNiwgMjU1LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDY1LCAyNTMsIDE5MiwgNjIsIDU3LCAzLCAyNTMsIDc4LCAyNDYsIDQ2LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNjEsIDI0NiwgNDUsIDYyLCA1NywgMywgMjUzLCAxMDEsIDIyNywgMTc0LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTE5LCAyMjQsIDE0OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMjQsIDE1MiwgNjIsIDU3LCAzLCAyNTMsIDczLCAKLSAgICAyMjMsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDExNSwgMjIzLCAxODUsIDYyLCA1NywgMywgMjUzLCA4MSwgMjIyLCAyMTAsIAotICAgIDYyLCA1NywgMywgMjUzLCA4MywgMjE3LCAxMDIsIDYyLCA1NywgMywgMjUzLCA2MywgMjE1LCA3OCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDYwLCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTMwLCA2MiwgNTcsIDE2LCAyNTMsIDEyOSwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCAxMjYsIDYyLCA1NywgMTYsIDI1MywgMTE0LCA2MiwgNTcsIDE2LCAyNTMsIDEwMiwgNjIsIDU3LCAxNiwgMjUzLCAKLSAgICAxMDAsIDYyLCA1NywgMTYsIDI1MywgOTMsIDYyLCA1NywgMTYsIDI1MywgODYsIDYyLCA1NywgMTYsIDI1MywgODUsIDYyLCAKLSAgICA1NywgMTYsIDI1MywgNzAsIDYyLCA1NywgMTYsIDI1MywgNjcsIDYyLCA1NywgMTYsIDI1MywgNjYsIDYyLCA1NywgMTYsIAotICAgIDI1MywgNjQsIDYyLCA1NywgMTYsIDI1MywgNjIsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMzEsIDE4NSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNTgsIDIxMSwgMjIxLCA2MiwgNTcsIDEwNiwgMjUzLCA1NywgMjQ4LCA3NCwgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgNTYsIDI0NSwgOTUsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyMzEsIDE1OSwgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDIxOCwgCi0gICAgMTYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjQ1LCAzNywgNjIsIDU3LCAxMDYsIDI1MywgNTIsIDIyMywgMTUzLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCA1MSwgMjIwLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDI0MSwgMjM3LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCA0OSwgMjE5LCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgNDgsIDI1MSwgMjAzLCA2MiwgNTcsIDEwNiwgMjUzLCA0NywgCi0gICAgMjQ5LCAxNDUsIDYyLCA1NywgMTA2LCAyNTMsIDQ2LCAyNTEsIDExNSwgNjIsIDU3LCAxMDYsIDI1MywgNDUsIDIxMiwgMiwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNDQsIDI1MiwgMTM2LCA2MiwgNTcsIDEwNiwgMjUzLCA0MywgMjI2LCAyMDUsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDQyLCAyMTgsIDI1NCwgNjIsIDU3LCAxMDYsIDI1MywgNDEsIDI0OSwgNjgsIDYyLCA1NywgMjMwLCAxNDIsIAotICAgIDI1MywgNDAsIDIzNCwgMjI0LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDM5LCAyMzQsIDIzMiwgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMzgsIDIyNiwgMjE4LCA2MiwgNTcsIDEwNiwgMjUzLCAzNywgMjExLCAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgCi0gICAgNTcsIDIzMCwgMTQyLCAyNTMsIDM1LCAyNTQsIDE3LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDM0LCAyMzEsIDUyLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCAzMywgMjUxLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDMyLCAyNDIsIDE2NiwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgMzEsIDYyLCA1NywgMTA2LCAyNTMsIDMwLCAyMTEsIDIxMiwgNjIsIDU3LCAxMDYsIDI1MywgMjksIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDI4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNywgMjQwLCAyNDgsIDYyLCA1NywgMTA2LCAyNTMsIDI2LCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMjIsIDIxNSwgCi0gICAgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDIxLCA2MiwgNTcsIDEwNiwgMjUzLCAyMCwgNjIsIDU3LCAxMDYsIDI1MywgMTksIAotICAgIDI0OSwgMjUwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOCwgNjIsIDU3LCAxMDYsIDI1MywgMTcsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDE2LCAyNDMsIDkzLCA2MiwgNTcsIDEwNiwgMjUzLCAxNSwgMjU0LCA0LCA2MiwgNTcsIDEwNiwgMjUzLCAxNCwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMTMsIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgMTAsIDYyLCA1NywgMTA2LCAyNTMsIDksIDYyLCA1NywgMTA2LCAyNTMsIDgsIDYyLCA1NywgMTA2LCAyNTMsIDcsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDYsIDYyLCA1NywgMTA2LCAyNTMsIDUsIDIzMCwgMTM0LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCAyMTUsIDIzNSwgNjIsIDU3LCAxMDYsIDI1MywgMiwgNjIsIDU3LCAxMDYsIDI1MywgMSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyNTQsIDYyLCAKLSAgICA1NywgMTA2LCAyNTIsIDI1MywgNjIsIDU3LCAxMDYsIDI1MiwgMjUyLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTEsIDYyLCA1NywgCi0gICAgMTA2LCAyNTIsIDI1MCwgNjIsIDU3LCAxMDYsIDI1MiwgMjQ5LCA2MiwgNTcsIDEwNiwgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAKLSAgICAyNTIsIDI0NywgMjQxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjQ0LCAyOCwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMjIzLCAyNTIsIDExNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE4LCAyMTksIDUsIDYyLCA1NywgMTA2LCAyNTIsIDIxNywgNzQsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE1LCAyMTcsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMjE0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTMsIDYyLCA1NywgMTA2LCAyNTIsIDIxMiwgMjExLCAyNTQsIDI1MCwgMTM5LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMTEsIDI1MCwgMTM5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTAsIDI1MCwgMTQwLCAyNDMsIAotICAgIDI1NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA5LCAyMTIsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDIwOCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjA3LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTIsIDIwNiwgMjQ3LCAxOTgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjA0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDIsIDYyLCA1NywgMTA2LCAyNTIsIDIwMSwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjAwLCA2MiwgNTcsIDEwNiwgMjUyLCAxOTksIDI0OCwgMTU5LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAxOTgsIDYyLCA1NywgMTA2LCAyNTIsIDE5NywgNjIsIDU3LCAxMDYsIDI1MiwgMTk2LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTUsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDE5NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTMsIDIzLCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjQ2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAotICAgIDI1MiwgMjQ0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCi0gICAgMjQyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQwLCAKLSAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM4LCA2MiwgNTcsIAotICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjEzLCAxODYsIDI1MiwgMjM1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM0LCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjMzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAotICAgIDI1MiwgMjMxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCi0gICAgMjI5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI3LCAKLSAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI0LCA2MiwgNTcsIAotICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjIyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgCi0gICAgMjEzLCAxODYsIDI1MiwgMjIwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjE5LCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjAzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMTkzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgCi0gICAgMTM4LCAyMzIsIDIxMywgMjU0LCAyMzYsIDIxMSwgMjA5LCAyMjAsIDEzOCwgMjQ3LCAxMjAsIDI1NCwgMjM2LCAyNTAsIAotICAgIDEzMCwgNzgsIDI1NCwgMjM2LCA1NCwgMTEwLCAyNTQsIDIzNiwgNTQsIDEwNSwgMjU0LCAyMzYsIDU0LCAxNTgsIDI1NCwgCi0gICAgMjM2LCA1NCwgMTYxLCAyNTQsIDIzNiwgNTQsIDE4OSwgMjU0LCAyMzYsIDU0LCAxOTQsIDI1NCwgMjM2LCA1NCwgMTk4LCAKLSAgICAyNTQsIDIzNiwgNTQsIDE5NSwgMjU0LCAyMzYsIDU0LCAyMDAsIDI1NCwgMjM2LCA1NCwgMjE2LCAyNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMjE1LCA3MywgMjU0LCAyMzYsIDU0LCAyMTYsIDE2MiwgMjU0LCAyMzYsIDU0LCAyNDQsIDE1LCAyNTQsIDIzNiwgNTQsIAotICAgIDI0NCwgMTE0LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTExLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTE2LCAyNTQsIDIzNiwgNTQsIAotICAgIDI0NSwgMTg0LCAyNTQsIDIzNiwgNTQsIDIyOCwgMTk1LCAyNTQsIDIzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAxMzQsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyNDAsIAotICAgIDIxMCwgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDI0MCwgMjEwLCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDExMywgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMTM0LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDExLCAKLSAgICAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDgxLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTksIDEyNSwgMjE2LCAKLSAgICAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMjIsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0NywgCi0gICAgMjU0LCAyMzYsIDU0LCAyMjgsIDIwMCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyNTQsIAotICAgIDIzNiwgNTQsIDIxNSwgNzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYzLCAyMTYsIDE0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyNDQsIDE2LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDExNSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjE5LCAxMTIsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyMCwgMTE3LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDUsIAotICAgIDE4NSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgMjEyLCAxNCwgMjUyLCAKLSAgICAxMjgsIDIxNCwgMTczLCAyNTQsIDIzNiwgMjEyLCAxNCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgMTQsIAotICAgIDIyMSwgMTc2LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgMjE2LCAxNjksIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIAotICAgIDE0LCAyNDQsIDQsIDIxOCwgNTksIDI1NCwgMjM2LCAyNDYsIDgxLCAyMzEsIDkwLCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIAotICAgIDIzNiwgMjMyLCAxOTksIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgMjM2LCAyMzEsIDkwLCAyMjEsIDE3NiwgCi0gICAgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIxNiwgMTY5LCAyMTgsIDU5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyMjQsIDIxLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyNDIsIDI3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyNDYsIDEwMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDE4OSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE0LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTYsIAotICAgIDE0NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgCi0gICAgODEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAKLSAgICAxOTQsIDI0NCwgMTE1LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyNDAsIDIxMSwgMjE3LCA2NywgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyMTYsIDE0OCwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjE4LCAKLSAgICAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0MCwgMjExLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjExLCAyMTgsIDE1MCwgCi0gICAgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAKLSAgICAyNDgsIDIxNiwgMTQ4LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTYsIDE0OCwgMjE4LCAKLSAgICAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjMwLCAxNjQsIDI2LCAyNTUsIDYsIDI0MSwgMjA1LCAxMjMsIAotICAgIDIyNSwgMzEsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMTAsIDI2LCAyNTUsIDYsIDI0MSwgMjAxLCAxMTAsIDI2LCAyNTUsIAotICAgIDYsIDI0NSwgMTA0LCAxMDUsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMDUsIDI2LCAyNTUsIDYsIDI0OSwgNjUsIDExMywgCi0gICAgMjQ2LCA5OSwgMjYsIDI1NSwgNiwgMjQ1LCAxMDQsIDExMywgMjQ2LCA5OSwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDE4OSwgCi0gICAgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDgsIDI1NCwgMTQxLCAKLSAgICAxNywgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMzEsIDQxLCAyMTYsIDI0NywgMjYsIAotICAgIDI1NSwgNiwgMjE2LCAxODEsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAxNjIsIDI2LCAyNTUsIDYsIAotICAgIDIxNSwgMjAzLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDI0NCwgMTE1LCAyNTQsIDE0MSwgMTcsIDI2LCAKLSAgICAyNTUsIDYsIDI0MSwgMjAxLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAKLSAgICAyMTYsIDE4MSwgMTIzLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEzNCwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIAotICAgIDI0NSwgMTA0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDI1MCwgMjI3LCAyNDQsIDgxLCAyNDAsIAotICAgIDIxMCwgMjYsIDI1NSwgNiwgMjI5LCAxODIsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTIzLCAKLSAgICAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNDgsIDU3LCAKLSAgICAyNDQsIDgxLCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjE4LCAxMTgsIDI0NCwgMTE1LCAyMzAsIDE2NCwgMjYsIDEyMywgCi0gICAgMTYzLCA1MCwgMjYsIDEyMywgMTYzLCA1LCAyNTQsIDE0MSwgMTcsIDI2LCAxMTMsIDIxNiwgMTY3LCA1MCwgMjYsIDEzNCwgCi0gICAgMjI0LCAyMCwgNTAsIDI2LCAyMTEsIDQ1LCA1MCwgMjYsIDIxNywgNjgsIDUwLCAyNiwgMjQ2LCAxMDEsIDUwLCAyNiwgMjI2LCAKLSAgICAyNDYsIDUwLCAyNiwgMTEzLCAyMjYsIDI0NSwgNTAsIDI2LCAxMzQsIDIyNiwgMjQ1LCA1MCwgMjYsIDI0NCwgMTEsIDIyNiwgCi0gICAgMjQ1LCA1MCwgMjYsIDI0NCwgODEsIDIyNiwgMjQ1LCA1MCwgMjYsIDIzMSwgMzUsIDUwLCAyNiwgMjMzLCAxNTcsIDI1MiwgCi0gICAgMTI4LCA1MCwgMjYsIDIzMiwgMTk0LCA1MCwgMjYsIDIyNiwgMTMxLCA1MCwgMjYsIDIxMSwgMTU5LCA1MCwgMjYsIDI1MywgCi0gICAgMjQzLCA1MCwgMjYsIDI1NCwgMCwgNTAsIDI2LCAyNDIsIDE0NCwgNTAsIDI2LCAyMTUsIDE4NiwgMjUyLCAxMjgsIDUwLCAKLSAgICAyNiwgMjEwLCA4NywgNTAsIDIyMiwgMTk4LCAyMjAsIDExMywgNTAsIDIyMiwgMTk4LCAyMTQsIDE4NSwgNTAsIDIyMiwgCi0gICAgMTk4LCAyMjAsIDE0MiwgNTAsIDIyMiwgMTk4LCAyMjAsIDExMSwgNTAsIDIyMiwgMTk4LCAyNDcsIDIxMywgMjIwLCAxMTEsIAotICAgIDUwLCAyMjIsIDE5OCwgMjE5LCAxNjgsIDUwLCAyMjIsIDE5OCwgMjQ4LCA1MywgNTAsIDIyMiwgMTk4LCAyMjQsIDYsIDUwLCAKLSAgICAyMjIsIDE5OCwgMjIwLCAxMjksIDUwLCAyMjIsIDE5OCwgMjQ2LCA2MCwgNTAsIDIyMiwgMTk4LCAyNTMsIDIzOCwgNTAsIAotICAgIDIyMiwgMTk4LCAyNTAsIDE3MSwgNTAsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI1LCAyMTMsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjI1LCAyNCwgMjQxLCAyMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE3LCA0NSwgMjQxLCAyMzUsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyNDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAxMDEsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjExLCAyMjEsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAyMTEsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjQzLCA4NSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTYsIDExNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICA3NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTEsIDE2OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjAsIDI5LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI0OSwgMjQ0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMSwgMTg0LCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDIzMSwgMTM2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMSwgMjE2LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIzMiwgMjM3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTg4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI1MCwgMjMxLCAyMjUsIDM1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NywgMTMzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIAotICAgIDUsIDI0OSwgMjIzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOSwgODcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAKLSAgICAyMjQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUyLCA2MywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjAsIDE2LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI0MCwgMjQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0MSwgMTc4LCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDI1MSwgMTEyLCAyMzMsIDM2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMjI0LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDIyMywgMTUzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NSwgMjMwLCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDI0NiwgMTA3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNSwgMTA1LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDI1MiwgNjYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI1LCAzNiwgMjE1LCAyMzUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjEzLCAxNTksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI2LCAxOCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyMjIsIDE5MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMzIsIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIAotICAgIDExNSwgMjUyLCAxODQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ0LCA0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyNDIsIDEzOCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTgsIDExOSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCA0LCAyNTMsIAotICAgIDE2OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTIsIDMyLCAyNTIsIDE0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAzOCwgCi0gICAgMjI2LCAyNDgsIDkxLCAyMzIsIDYwLCAxLCA2MSwgMjMyLCA2MCwgMSwgNzUsIDIzMiwgNjAsIDEsIDI1MywgMTU4LCAyMzIsIAotICAgIDYwLCAxLCAyNTIsIDE5LCAyMzIsIDYwLCAxLCAyNDMsIDIwMiwgMjMyLCA2MCwgMSwgMjQ5LCA2MCwgMjMyLCA2MCwgMSwgCi0gICAgNzMsIDIzMiwgNjAsIDEsIDIxMiwgOTgsIDIzMiwgNjAsIDEsIDIxMCwgMTU5LCAyMzIsIDYwLCAxLCAyMTYsIDIxMCwgMjMyLCAKLSAgICA2MCwgMSwgMjM1LCAxNDQsIDIzMiwgNjAsIDEsIDIzNSwgMjMsIDIzMiwgNjAsIDEsIDIyNCwgOTYsIDIzMiwgNjAsIDEsIAotICAgIDE1NiwgMjMyLCA2MCwgMSwgMTkzLCAyMzIsIDYwLCAxLCAyMzAsIDI1LCAyMzIsIDYwLCAxLCAyMzAsIDE2NiwgMjMyLCA2MCwgCi0gICAgMSwgMjI4LCAxMTEsIDIzMiwgNjAsIDEsIDcwLCAyMzIsIDYwLCAxLCAyMjYsIDEwNSwgMjMyLCA2MCwgMSwgMjM0LCA0NywgCi0gICAgMjMyLCA2MCwgMSwgMTUzLCAyMzIsIDYwLCAxLCAyMjIsIDkxLCAyMzIsIDYwLCAxLCAyMTcsIDE1MiwgMjMyLCA2MCwgMSwgCi0gICAgMjE1LCAxNTksIDIzMiwgNjAsIDEsIDI1NCwgMTIzLCAyMzIsIDYwLCAxLCAyNDUsIDE1MCwgMjMyLCA2MCwgMSwgMjQyLCAKLSAgICA2MCwgMjMyLCA2MCwgMSwgMjExLCAxNzgsIDI1MCwgMjM3LCAxLCA2MSwgMjUwLCAyMzcsIDEsIDIyNiwgOTEsIDI1MCwgCi0gICAgMjM3LCAxLCAyNDksIDYwLCAyNTAsIDIzNywgMSwgMTU2LCAyNTAsIDIzNywgMSwgMjE0LCAxMTYsIDI1MCwgMjM3LCAxLCAKLSAgICAxNTMsIDI1MCwgMjM3LCAxLCAyMzMsIDYyLCAyNTAsIDIzNywgMSwgMjU1LCA3NSwgMjUwLCAyMzcsIDEsIDIyNCwgOTYsIAotICAgIDI1MCwgMjM3LCAxLCAyNTMsIDE1OCwgMjUwLCAyMzcsIDEsIDE5MywgMjUwLCAyMzcsIDEsIDc2LCAyNTAsIDIzNywgMSwgCi0gICAgMjQ4LCAyMjMsIDI1MCwgMjM3LCAxLCAyMTcsIDE1MiwgMjUwLCAyMzcsIDEsIDIyMCwgMTA0LCAyNTAsIDIzNywgMSwgMjIwLCAKLSAgICAxMDMsIDI1MCwgMjM3LCAxLCAyMjIsIDkxLCAyNTAsIDIzNywgMSwgMjUxLCA2NSwgMjUwLCAyMzcsIDEsIDcwLCAyNTAsIAotICAgIDIzNywgMSwgMjI4LCAxMTEsIDI1MCwgMjM3LCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDIzMCwgMjUsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTUsIDE1OCwgMjUwLCAyMzcsIDEsIDIyNiwgMTA1LCAyNTAsIDIzNywgMSwgMjE4LCAyMjYsIDI1MCwgMjM3LCAxLCAKLSAgICA3MywgMjUwLCAyMzcsIDEsIDc1LCAyNTAsIDIzNywgMSwgMjE0LCAxMTMsIDI1MCwgMjM3LCAxLCAyMzUsIDIzLCAyNTAsIAotICAgIDIzNywgMSwgMjM1LCAxNCwgMjUwLCAyMzcsIDEsIDIyOSwgMTUwLCAyNTAsIDIzNywgMSwgMjE0LCAxMTgsIDI1MCwgMjM3LCAKLSAgICAxLCAyNDMsIDIwMiwgMjUwLCAyMzcsIDEsIDI0MywgMTM3LCAyNTAsIDIzNywgMSwgMjE4LCAxNjgsIDI1MCwgMjM3LCAxLCAKLSAgICAyMTgsIDE2NywgMjUwLCAyMzcsIDEsIDIyOSwgNzksIDI1MCwgMjM3LCAxLCAyMzYsIDMzLCAyNTAsIDIzNywgMSwgMjUxLCAKLSAgICA2NCwgMjUwLCAyMzcsIDEsIDIxNSwgMTU5LCAyNTAsIDIzNywgMSwgMjE0LCAxMTUsIDI1MCwgMjM3LCAxLCAyMjIsIDE4MCwgCi0gICAgMjUwLCAyMzcsIDEsIDIzMSwgMTI5LCAyNTAsIDIzNywgMSwgMjMxLCAxMjgsIDI1MCwgMjM3LCAxLCAyMzEsIDEyNywgMjUwLCAKLSAgICAyMzcsIDEsIDIzMSwgMTI2LCAyNTAsIDIzNywgMSwgMjMzLCA2MSwgMjUwLCAyMzcsIDEsIDI0NSwgMjM0LCAyNTAsIDIzNywgCi0gICAgMSwgMjE0LCAxMTQsIDU1LCAzMiwgMSwgNjEsIDU1LCAzMiwgMSwgMjUyLCA3NSwgNTUsIDMyLCAxLCAyMzQsIDE4MiwgNTUsIAotICAgIDMyLCAxLCAyNDgsIDkwLCA1NSwgMzIsIDEsIDc1LCA1NSwgMzIsIDEsIDIxMywgMjU1LCA1NSwgMzIsIDEsIDIxMCwgOTQsIAotICAgIDU1LCAzMiwgMSwgMjQxLCAyMzgsIDU1LCAzMiwgMSwgMjE2LCAxOTUsIDU1LCAzMiwgMSwgNzMsIDU1LCAzMiwgMSwgMTc2LCAKLSAgICA1NSwgMzIsIDEsIDI0NSwgMTc0LCA1NSwgMzIsIDEsIDI0NSwgMTU5LCA1NSwgMzIsIDEsIDI0NSwgMTUwLCA1NSwgMzIsIDEsIAotICAgIDI0NSwgNzUsIDU1LCAzMiwgMSwgNzYsIDU1LCAzMiwgMSwgMjI1LCAyMjEsIDU1LCAzMiwgMSwgMjIwLCA2MywgNTUsIDMyLCAKLSAgICAxLCAyMzMsIDIxNywgNTUsIDMyLCAxLCAyNDUsIDkyLCA1NSwgMzIsIDEsIDI0NSwgODIsIDU1LCAzMiwgMSwgMjE3LCAyMiwgCi0gICAgNTUsIDMyLCAxLCA3MCwgNTUsIDMyLCAxLCAyNDUsIDE3NywgNTUsIDMyLCAxLCAyMjUsIDEzNiwgNTUsIDMyLCAxLCAyMzQsIAotICAgIDExOSwgNTUsIDMyLCAxLCAyNDUsIDIwMiwgNTUsIDMyLCAxLCAyNDUsIDg0LCA1NSwgMzIsIDEsIDI1MCwgMTMxLCA1NSwgCi0gICAgMzIsIDEsIDIzNiwgMzMsIDU1LCAzMiwgMSwgMjE0LCAxMTgsIDU1LCAzMiwgMjI3LCAxOTgsIDExMCwgNTUsIDMyLCAyMjcsIAotICAgIDE5OCwgMTg5LCA1NSwgMzIsIDIyNywgMTk4LCAyMTYsIDI0NywgNTUsIDMyLCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDI0MiwgCi0gICAgMTUzLCAxLCAyNTQsIDIwNCwgMjQyLCAxNTMsIDEsIDI1MiwgMTYzLCAyNDIsIDE1MywgMSwgMjQyLCAyMTEsIDI0MiwgMTUzLCAKLSAgICAxLCAyNDgsIDIwNCwgMjQyLCAxNTMsIDEsIDI1NCwgMjAwLCAyNDIsIDE1MywgMSwgMjI0LCA3OSwgMjQyLCAxNTMsIDEsIAotICAgIDIzNSwgMTU1LCAyNDIsIDE1MywgMSwgMjQyLCAzOSwgMjQyLCAxNTMsIDEsIDIxNiwgMTU4LCAyNDIsIDE1MywgMSwgMjQ1LCAKLSAgICAxODMsIDI0MiwgMTUzLCAxLCAyMzMsIDE5MCwgMjQyLCAxNTMsIDEsIDIzMywgMTEzLCAyNDIsIDE1MywgMSwgMjMxLCAxNzksIAotICAgIDI0MiwgMTUzLCAxLCAyMjksIDE4NCwgMjQyLCAxNTMsIDEsIDIzNSwgMTE5LCAyNDIsIDE1MywgMSwgMjE0LCAxMzYsIDI0MiwgCi0gICAgMTUzLCAxLCAyMjYsIDY5LCAyNDIsIDE1MywgMSwgMjI4LCAxOTUsIDI0MiwgMTUzLCAxLCAyMjMsIDE2NSwgMjQyLCAxNTMsIAotICAgIDEsIDIyMSwgMjE4LCAyNDIsIDE1MywgMSwgMjE3LCA0LCAyNDIsIDE1MywgMSwgMjExLCAyMzQsIDI0MiwgMTUzLCAxLCAKLSAgICAyNDQsIDE3OCwgMjQyLCAxNTMsIDEsIDIzNiwgMzcsIDI0MiwgMTUzLCAxLCAyNDAsIDE5OSwgMjQyLCAxNTMsIDEsIDIyNiwgCi0gICAgMTM5LCAyNDIsIDE1MywgMSwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyMTQsIDIwOSwgMSwgMjU0LCAxNDcsIDIxNCwgMjA5LCAxLCAKLSAgICAyNTIsIDI2LCAyMTQsIDIwOSwgMSwgMjQzLCAxMDgsIDIxNCwgMjA5LCAxLCAyMzQsIDEzMiwgMjE0LCAyMDksIDEsIDI0OCwgCi0gICAgNTQsIDIxNCwgMjA5LCAxLCAyNDEsIDY4LCAyMTQsIDIwOSwgMSwgMjExLCAyMjcsIDIxNCwgMjA5LCAxLCAyMTAsIDg1LCAKLSAgICAyMTQsIDIwOSwgMSwgMjQwLCAyNDEsIDIxNCwgMjA5LCAxLCAyMTYsIDIzMCwgMjE0LCAyMDksIDEsIDIxMCwgMjMzLCAyMTQsIAotICAgIDIwOSwgMSwgMjM0LCAyNTAsIDIxNCwgMjA5LCAxLCAyMjAsIDIwLCAyMTQsIDIwOSwgMSwgMjMzLCA5OCwgMjE0LCAyMDksIAotICAgIDEsIDIzMSwgNjUsIDIxNCwgMjA5LCAxLCAyNDgsIDIxLCAyMTQsIDIwOSwgMSwgMjI3LCAxOTQsIDIxNCwgMjA5LCAxLCAKLSAgICAyMTAsIDEzLCAyMTQsIDIwOSwgMSwgMjIxLCAyNDgsIDIxNCwgMjA5LCAxLCAyNTQsIDE5NiwgMjE0LCAyMDksIDEsIDIyNCwgCi0gICAgMTUwLCAyMTQsIDIwOSwgMSwgMjIyLCAyNSwgMjE0LCAyMDksIDEsIDIyNCwgMzUsIDIxNCwgMjA5LCAxLCAyMjMsIDE0NCwgCi0gICAgMjE0LCAyMDksIDEsIDIxNiwgMTk5LCAyMTQsIDIwOSwgMSwgMjQyLCAyNDQsIDIxNCwgMjA5LCAxLCAxMTEsIDIxNCwgMjA5LCAKLSAgICAxLCA3MywgMjE0LCAyMDksIDEsIDcwLCAyMTQsIDIwOSwgMSwgMjE4LCAxNzksIDIxNCwgMjA5LCAyMTEsIDIwOSwgMjQ3LCAKLSAgICAxNzIsIDU1LCAyMjUsIDE2OSwgNSwgNjEsIDU1LCAyMjUsIDE2OSwgNSwgNzMsIDU1LCAyMjUsIDE2OSwgNSwgNzAsIDU1LCAKLSAgICAyMjUsIDE2OSwgNSwgMTc2LCA1NSwgMjI1LCAxNjksIDUsIDIzMywgMjE3LCA1NSwgMjI1LCAxNjksIDUsIDI0MywgMTM1LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI0MiwgMTEzLCA1NSwgMjI1LCAxNjksIDUsIDIxMSwgMTY1LCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI1MSwgMzMsIDU1LCAyMjUsIDE2OSwgNSwgMjM1LCAxNDEsIDU1LCAyMjUsIDE2OSwgNSwgMjM1LCAxMDgsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMjE3LCAxMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjE1LCAxMTgsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAyMjEsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAzLCA1NSwgMjI1LCAxNjksIDUsIDI0NiwgNzgsIDU1LCAyMjUsIDE2OSwgNSwgMjE2LCAKLSAgICAyMDgsIDU1LCAyMjUsIDE2OSwgNSwgMTkwLCA1NSwgMjI1LCAxNjksIDUsIDI1MiwgMTkxLCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI0NCwgMTk2LCA1NSwgMjI1LCAxNjksIDUsIDE5NywgNTUsIDIyNSwgMTY5LCA1LCAyMjcsIDIzNywgNTUsIDIyNSwgMTY5LCAKLSAgICA1LCAxODQsIDU1LCAyMjUsIDE2OSwgNSwgMjMwLCAyMzAsIDU1LCAyMjUsIDE2OSwgNSwgMjMwLCAxMDIsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMTkxLCA1NSwgMjI1LCAxNjksIDUsIDIxNCwgMjcsIDU1LCAyMjUsIDE2OSwgNSwgMjEzLCAxNzYsIDU1LCAKLSAgICAyMjUsIDE2OSwgNSwgMjA1LCA1NSwgMjI1LCAxNjksIDUsIDIyMiwgMTQwLCA1NSwgMjI1LCAxNjksIDUsIDIzMywgMTM1LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDIwNiwgNTUsIDIyNSwgMTY5LCA1LCAyMTAsIDExNiwgNTUsIDIyNSwgMTY5LCA1LCAyMjAsIAotICAgIDEwMiwgNTUsIDIyNSwgMTY5LCA1LCAyMTgsIDIyMywgNTUsIDIyNSwgMTY5LCA1LCAxNjIsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUzLCAxODYsIDU1LCAyMjUsIDE2OSwgNSwgMjUzLCAxODUsIDU1LCAyMjUsIDE2OSwgNSwgMjUzLCAxODQsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMjExLCAxNDIsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAyMDAsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAxOTksIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxNzAsIDU1LCAyMjUsIDE2OSwgNSwgMjUxLCA4NSwgNTUsIDIyNSwgMTY5LCAyMTEsIAotICAgIDIwOSwgMjQ3LCAxNzIsIDU1LCAyMjUsIDE2OSwgNTQsIDExMCwgNTUsIDIyNSwgMTY5LCA1NCwgMTA1LCA1NSwgMjI1LCAKLSAgICAxNjksIDU0LCAyMTYsIDI0NywgNTUsIDIyNSwgMTY5LCA1NCwgMjE1LCA3MywgNTUsIDIyNSwgMTY5LCA1NCwgMjQwLCAyMTAsIAotICAgIDE4MSwgNiwgMSwgMTk5LCA3MywgMTgxLCA2LCAxLCAxOTksIDc1LCAxODEsIDYsIDEsIDE5OSwgNjEsIDE4MSwgNiwgMSwgCi0gICAgMTk5LCAyNTQsIDIwOSwgMTgxLCA2LCAxLCAxOTksIDc2LCAxODEsIDYsIDEsIDE5OSwgMjI2LCAxODMsIDE4MSwgNiwgMSwgCi0gICAgMjE5LCAyNTEsIDczLCAxODEsIDYsIDEsIDIxOSwgMjUxLCA3NSwgMTgxLCA2LCAxLCAyMTksIDI1MSwgNjEsIDE4MSwgNiwgCi0gICAgMSwgMjE5LCAyNTEsIDI1NCwgMjA5LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA3NiwgMTgxLCA2LCAxLCAyMTksIDI1MSwgMjI2LCAKLSAgICAxODMsIDE4MSwgNiwgMSwgMjUzLCAxNjcsIDE4MSwgNiwgMSwgMjI2LCAxMTYsIDE4MSwgNiwgMSwgMjExLCAxOTUsIDE4MSwgCi0gICAgNiwgMSwgMjExLCA0NCwgMTgxLCA2LCAxLCAyNDIsIDYwLCAxODEsIDYsIDEsIDIyNSwgMjExLCAxODEsIDYsIDEsIDI1MiwgCi0gICAgNjYsIDE4MSwgNiwgMSwgMjE3LCAxMSwgMTgxLCA2LCAxLCAyNDgsIDc3LCAxODEsIDYsIDEsIDI1MCwgMTI4LCAxODEsIDYsIAotICAgIDEsIDIzNSwgMTI0LCAxODEsIDYsIDEsIDIzNCwgMTg5LCAxODEsIDYsIDEsIDI0MywgODMsIDE4MSwgNiwgMSwgMjQ1LCAKLSAgICAyMDIsIDE4MSwgNiwgMSwgMjEzLCAyNTAsIDE4MSwgNiwgMSwgMjQ1LCA1OSwgMTgxLCA2LCAxLCAyMTYsIDE5NCwgMTgxLCAKLSAgICA2LCAxLCAyNDUsIDgyLCAxODEsIDYsIDEsIDIxMCwgOTIsIDE4MSwgNiwgMSwgMjQ1LCA3NSwgMTgxLCA2LCAxLCAyMTAsIAotICAgIDczLCAxODEsIDYsIDEsIDI0NSwgOTIsIDE4MSwgNiwgMSwgMjQ1LCAxNzQsIDE4MSwgNiwgMSwgMjQ1LCAxNTksIDE4MSwgNiwgCi0gICAgMSwgMjQ1LCAxNTAsIDE4MSwgNiwgMSwgMjQ1LCAxMzgsIDE4MSwgNiwgMSwgMjI2LCAyMTksIDE4MSwgNiwgMSwgMjQ1LCAKLSAgICAzOCwgMTgxLCA0LCAxLCAxOTksIDczLCAxODEsIDQsIDEsIDE5OSwgNzUsIDE4MSwgNCwgMSwgMTk5LCA2MSwgMTgxLCA0LCAKLSAgICAxLCAxOTksIDI1NCwgMjA5LCAxODEsIDQsIDEsIDE5OSwgNzYsIDE4MSwgNCwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA0LCAKLSAgICAxLCAyMTksIDI1MSwgNzMsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDQsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCAKLSAgICA0LCAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUxLCAKLSAgICAyMjYsIDE4MywgMTgxLCA0LCAxLCAyNTMsIDE2NywgMTgxLCA0LCAxLCAyMjYsIDExNiwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgCi0gICAgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgNjAsIDE4MSwgNCwgMSwgMjI1LCAyMTEsIDE4MSwgNCwgMSwgCi0gICAgMjUyLCA2NiwgMTgxLCA0LCAxLCAyMTcsIDExLCAxODEsIDQsIDEsIDI0OCwgNzcsIDE4MSwgNCwgMSwgMjUwLCAxMjgsIAotICAgIDE4MSwgNCwgMSwgMjM1LCAxMjQsIDE4MSwgNCwgMSwgMjM0LCAxODksIDE4MSwgNCwgMSwgMjQzLCA4MywgMTgxLCA0LCAxLCAKLSAgICAyNDUsIDIwMiwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCA0LCAxLCAyNDUsIDU5LCAxODEsIDQsIDEsIDIxNiwgMTk0LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgODIsIDE4MSwgNCwgMSwgMjEwLCA5MiwgMTgxLCA0LCAxLCAyNDUsIDc1LCAxODEsIDQsIDEsIAotICAgIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCA5MiwgMTgxLCA0LCAxLCAyNDUsIDE3NCwgMTgxLCA0LCAxLCAyNDUsIDE1OSwgCi0gICAgMTgxLCA0LCAxLCAyNDUsIDE1MCwgMTgxLCA0LCAxLCAyNDUsIDEzOCwgMTgxLCA0LCAxLCAyMjYsIDIxOSwgMTgxLCA0LCAxLCAKLSAgICAyNDUsIDM4LCAyMjAsIDY5LCAxLCAyMjUsIDIwOSwgMjIwLCA2OSwgMSwgMjE2LCA1LCAyMjAsIDY5LCAxLCAyMzQsIDkxLCAKLSAgICAyMjAsIDY5LCAxLCAyNDQsIDE0NywgMjIwLCA2OSwgMSwgMjE2LCAxNzIsIDIyMCwgNjksIDEsIDIxOSwgNTgsIDIyMCwgNjksIAotICAgIDEsIDIxOCwgMTQsIDIyMCwgNjksIDEsIDI1MCwgNjEsIDIyMCwgNjksIDEsIDIxMSwgNDYsIDIyMCwgNjksIDEsIDI0MCwgCi0gICAgMjA5LCAyMjAsIDY5LCAxLCAyNTIsIDUsIDIyMCwgNjksIDEsIDI0OCwgODksIDIyMCwgNjksIDEsIDI0MywgMTIxLCAyMjAsIAotICAgIDY5LCAxLCAyMTMsIDEyMywgMjIwLCA2OSwgMSwgMjE2LCAxNzYsIDIyMCwgNjksIDEsIDIxMCwgMjEsIDIyMCwgNjksIDEsIAotICAgIDIzMSwgODksIDIyMCwgNjksIDEsIDIzNSwgNDksIDIyMCwgNjksIDEsIDIxMSwgMjI1LCAyMjAsIDY5LCAxLCAyNDIsIDQ4LCAKLSAgICAyMjAsIDY5LCAxLCAyMzIsIDE0MiwgMjIwLCA2OSwgMSwgMjMwLCAxODksIDIyMCwgNjksIDEsIDIzNiwgNDAsIDIyMCwgNjksIAotICAgIDEsIDI0NSwgMjAxLCAyMjAsIDY5LCAxLCAyNTMsIDIzMSwgMjIwLCA2OSwgMSwgMjU0LCAyNDcsIDIyMCwgNjksIDEsIDIyNiwgCi0gICAgMTk2LCAyMjAsIDY5LCAxLCAyMTEsIDIxMiwgMjIwLCA2OSwgMSwgMjI2LCAxMzAsIDIyMCwgNjksIDEsIDI1NCwgMjA5LCAKLSAgICAyMjAsIDY5LCAxLCAyMjIsIDIwOCwgMjIwLCA2OSwgMSwgMjI3LCAxOTQsIDIyMCwgNjksIDEsIDI0NSwgMjE3LCAyMjAsIAotICAgIDY5LCAxLCAyNTQsIDIxNCwgMjIwLCA2OSwgMSwgMjQwLCAxMTEsIDIyMCwgNjksIDEsIDIxNCwgMTYzLCAyMjAsIDY5LCAxLCAKLSAgICAyMjYsIDI1NCwgMjIwLCA2OSwgMSwgMjI2LCAxNzYsIDIyMCwgNjksIDEsIDIyNiwgMjE4LCAyMjAsIDY5LCAxLCAyNTMsIAotICAgIDE3MCwgMjIwLCA2OSwgMSwgMjU0LCAxOSwgMjIwLCA2OSwgMSwgMjI2LCAxNTgsIDIyMCwgNjksIDEsIDI1NCwgMTkyLCAKLSAgICAyMjAsIDY5LCAxLCAyNDUsIDg2LCAyMjAsIDY5LCAxLCAyNTMsIDI1MywgMjIwLCA2OSwgMSwgMjQ1LCAyMjcsIDIyMCwgNjksIAotICAgIDEsIDI0MCwgMTE4LCAyMjAsIDY5LCAxLCAyMTEsIDEzLCAyMjYsIDE0MSwgMSwgMjU0LCAxNzAsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTIsIDE5MSwgMjI2LCAxNDEsIDEsIDIxNywgMTA1LCAyMjYsIDE0MSwgMSwgMjM1LCAxNDEsIDIyNiwgMTQxLCAxLCAyMTEsIAotICAgIDE2NSwgMjI2LCAxNDEsIDEsIDIzNCwgMTMyLCAyMjYsIDE0MSwgMSwgMjQ4LCA3NiwgMjI2LCAxNDEsIDEsIDIwNSwgMjI2LCAKLSAgICAxNDEsIDEsIDIwNiwgMjI2LCAxNDEsIDEsIDIyMCwgMjYsIDIyNiwgMTQxLCAxLCAyNDgsIDI1LCAyMjYsIDE0MSwgMSwgCi0gICAgMjUwLCAyMTUsIDIyNiwgMTQxLCAxLCAyNDMsIDEzNSwgMjI2LCAxNDEsIDEsIDI0NCwgMTk2LCAyMjYsIDE0MSwgMSwgMjI0LCAKLSAgICA4NiwgMjI2LCAxNDEsIDEsIDIzNSwgOSwgMjI2LCAxNDEsIDEsIDIzMywgMTMwLCAyMjYsIDE0MSwgMSwgMjMwLCAyMDAsIAotICAgIDIyNiwgMTQxLCAxLCAyMjcsIDE3OCwgMjI2LCAxNDEsIDEsIDIxMiwgMzAsIDIyNiwgMTQxLCAxLCAxNjIsIDIyNiwgMTQxLCAKLSAgICAxLCAxOTEsIDIyNiwgMTQxLCAxLCA2MSwgMjI2LCAxNDEsIDEsIDc1LCAyMjYsIDE0MSwgMSwgNzMsIDIyNiwgMTQxLCAxLCAKLSAgICA3NiwgMjI2LCAxNDEsIDEsIDcwLCAyMjYsIDE0MSwgMSwgMjU1LCA3MywgMjI2LCAxNDEsIDEsIDI0NSwgMjA5LCAyMjYsIAotICAgIDE0MSwgMSwgMjI2LCAxODMsIDIyNiwgMTQxLCAyMSwgMjEwLCA4NiwgMjI2LCAxNDEsIDIxLCAxMTAsIDIyNiwgMTQxLCAyMSwgCi0gICAgMTA1LCAyMjYsIDE0MSwgMjEsIDE1OCwgMjI2LCAxNDEsIDIxLCAxNjEsIDIyNiwgMTQxLCAyMSwgMTg5LCAyMjYsIDE0MSwgCi0gICAgMjEsIDE5NCwgMjI2LCAxNDEsIDIxLCAxOTgsIDIyNiwgMTQxLCAyMSwgMTk1LCAyMjYsIDE0MSwgMjEsIDIwMCwgMjQ5LCAKLSAgICA2NywgMywgNjEsIDI0OSwgNjcsIDMsIDc1LCAyNDksIDY3LCAzLCA3MywgMjQ5LCA2NywgMywgNzYsIDI0OSwgNjcsIDMsIAotICAgIDcwLCAyNDksIDY3LCAzLCAyMzUsIDE0MSwgMjQ5LCA2NywgMywgMjM1LCA2OCwgMjQ5LCA2NywgMywgMTc2LCAyNDksIDY3LCAKLSAgICAzLCAyMzQsIDE4MiwgMjQ5LCA2NywgMywgMjM0LCA5MiwgMjQ5LCA2NywgMywgMjM0LCAyOCwgMjQ5LCA2NywgMywgMjMzLCAKLSAgICAyMTcsIDI0OSwgNjcsIDMsIDIzMywgMTM1LCAyNDksIDY3LCAzLCAyMzMsIDU4LCAyNDksIDY3LCAzLCAyMzIsIDI0MSwgCi0gICAgMjQ5LCA2NywgMywgMjMyLCAxNTYsIDI0OSwgNjcsIDMsIDIzMiwgOTgsIDI0OSwgNjcsIDMsIDE4NCwgMjQ5LCA2NywgMywgCi0gICAgMjMxLCA5MSwgMjQ5LCA2NywgMywgMjMwLCAyMzAsIDI0OSwgNjcsIDMsIDIzMCwgMTYxLCAyNDksIDY3LCAzLCAyMzAsIAotICAgIDEwMiwgMjQ5LCA2NywgMywgMTk3LCAyNDksIDY3LCAzLCAyMjksIDEwNywgMjQ5LCA2NywgMywgMjI4LCAyMzMsIDI0OSwgCi0gICAgNjcsIDMsIDIyOCwgNzQsIDI0OSwgNjcsIDMsIDIyNywgMjM3LCAyNDksIDY3LCAzLCAxOTAsIDI0OSwgNjcsIDMsIDIyNSwgCi0gICAgMjIxLCAyNDksIDY3LCAzLCAyMjUsIDEwOCwgMjQ5LCA2NywgMywgMjI1LCAxNiwgMjQ5LCA2NywgMywgMjI0LCAxNTAsIAotICAgIDI0OSwgNjcsIDMsIDIwNSwgMjQ5LCA2NywgMywgMjIzLCAxMjgsIDI0OSwgNjcsIDMsIDIyMywgMzUsIDI0OSwgNjcsIDMsIAotICAgIDIyMiwgMjExLCAyNDksIDY3LCAzLCAyMjIsIDE0MCwgMjQ5LCA2NywgMywgMjA2LCAyNDksIDY3LCAzLCAyMjEsIDE4MSwgCi0gICAgMjQ5LCA2NywgMywgMjE5LCAxOTEsIDI0OSwgNjcsIDMsIDIxOSwgNTgsIDI0OSwgNjcsIDMsIDIxOCwgODMsIDI0OSwgNjcsIAotICAgIDMsIDIxNywgMTA1LCAyNDksIDY3LCAzLCAyMTcsIDIyLCAyNDksIDY3LCAzLCAyMTYsIDExNywgMjQ5LCA2NywgMywgMTExLCAKLSAgICAyNDksIDY3LCAzLCAyMTUsIDExOCwgMjQ5LCA2NywgMywgMjEyLCA2NSwgMjQ5LCA2NywgMywgMjEyLCAyMiwgMjQ5LCA2NywgCi0gICAgMywgMjExLCAyNTAsIDI0OSwgNjcsIDMsIDIxMSwgMjI3LCAyNDksIDY3LCAzLCAyMTEsIDE2NSwgMjQ5LCA2NywgMywgMjExLCAKLSAgICAxNjIsIDI0OSwgNjcsIDMsIDIxMCwgMTE2LCAyNDksIDY3LCAzLCAyMTAsIDIzLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI1NCwgCi0gICAgMTY4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI1MiwgMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQyLCAyMDEsIDIzNiwgMSwgCi0gICAgMjU0LCAyNywgMSwgMjQ4LCAxODgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAyMzgsIDIzNiwgMSwgMjU0LCAyNywgMSwgCi0gICAgMjEyLCAzMCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTAsIDk3LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MSwgMTk1LCAyMzYsIAotICAgIDEsIDI1NCwgMjcsIDEsIDIxNiwgMjI2LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgMjMyLCAyMzYsIDEsIDI1NCwgMjcsIAotICAgIDEsIDIzNCwgMjI1LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIzMywgOTMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMxLCA2NSwgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjcsIDE5NCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjEsIDI0OSwgMjM2LCAxLCAyNTQsIAotICAgIDI3LCAxLCAyNTMsIDE2MiwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjUsIDIyMSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjIsIAotICAgIDI0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNCwgMzQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIzLCA2NywgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyMjAsIDIwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxNywgMzYsIDIzNiwgMSwgMjU0LCAyNywgMjIxLCAKLSAgICAxNzMsIDUwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEwNSwgMjM2LCAxLCAyNTQsIAotICAgIDI3LCA1NCwgMTU4LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0NywgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE1LCA3MywgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjUsIDExOSwgMSwgMjU0LCAxNjUsIDIyNSwgMTE5LCAKLSAgICAxLCAyNTIsIDI4LCAyMjUsIDExOSwgMSwgMjQzLCAxMDksIDIyNSwgMTE5LCAxLCAyNDgsIDU2LCAyMjUsIDExOSwgMSwgCi0gICAgMjQxLCAyMzgsIDIyNSwgMTE5LCAxLCAyMTIsIDM3LCAyMjUsIDExOSwgMSwgMjEwLCAxMTAsIDIyNSwgMTE5LCAxLCAyNDEsIAotICAgIDE5NywgMjI1LCAxMTksIDEsIDIxNiwgMjMwLCAyMjUsIDExOSwgMSwgMjEwLCAyMzMsIDIyNSwgMTE5LCAxLCAyMzQsIDI1MCwgCi0gICAgMjI1LCAxMTksIDEsIDIzMywgOTksIDIyNSwgMTE5LCAxLCAyMzEsIDY1LCAyMjUsIDExOSwgMSwgMjI3LCAxOTQsIDIyNSwgCi0gICAgMTE5LCAxLCAyMjAsIDE0NCwgMjI1LCAxMTksIDEsIDI1NCwgMTk2LCAyMjUsIDExOSwgMSwgMjI1LCAyMjEsIDIyNSwgMTE5LCAKLSAgICAxLCAyMjIsIDI1LCAyMjUsIDExOSwgMSwgMjI0LCAzOSwgMjI1LCAxMTksIDEsIDIyMiwgMTg5LCAyMjUsIDExOSwgMSwgCi0gICAgMjIwLCAyMCwgMjI1LCAxMTksIDEsIDIxNywgNDEsIDIyNSwgMTE5LCA1NCwgMTEwLCAyMjUsIDExOSwgNTQsIDIxNiwgMjQ3LCAKLSAgICAyMjUsIDExOSwgNTQsIDIxNSwgNzMsIDIyNSwgMTE5LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjI1LCAxMTksIDU0LCAxMDUsIAotICAgIDIyNSwgMTE5LCA1NCwgMTU4LCAyMjUsIDExOSwgMjExLCAyMDksIDIyMCwgMTM3LCAyMzIsIDU5LCAxLCA2MSwgMjMyLCA1OSwgCi0gICAgMSwgMjUzLCAxNTgsIDIzMiwgNTksIDEsIDI0MywgMjAyLCAyMzIsIDU5LCAxLCAyNDksIDYwLCAyMzIsIDU5LCAxLCA3NSwgCi0gICAgMjMyLCA1OSwgMSwgMjE0LCAxMDUsIDIzMiwgNTksIDEsIDczLCAyMzIsIDU5LCAxLCAyMTEsIDExNywgMjMyLCA1OSwgMSwgCi0gICAgMjM1LCAyMywgMjMyLCA1OSwgMSwgMTU2LCAyMzIsIDU5LCAxLCAxOTMsIDIzMiwgNTksIDEsIDIzMCwgMjUsIDIzMiwgNTksIAotICAgIDEsIDc2LCAyMzIsIDU5LCAxLCAxNTMsIDIzMiwgNTksIDEsIDIxOCwgMjI2LCAyMzIsIDU5LCAxLCAyMTcsIDE1MiwgMjMyLCAKLSAgICA1OSwgMSwgNzAsIDIzMiwgNTksIDEsIDI0NSwgNiwgMjMyLCA1OSwgMSwgMjI0LCA5NiwgMjMyLCA1OSwgMSwgMjIyLCA5MSwgCi0gICAgMjMyLCA1OSwgMSwgMjE1LCAxNTksIDIzMiwgNTksIDEsIDI1NCwgMTIzLCAyMzIsIDU5LCAxLCAyNDUsIDE1MCwgMjMyLCAKLSAgICA1OSwgMSwgMjMyLCA2MiwgMjMyLCA1OSwgMSwgMjI4LCAxMTEsIDIzMiwgNTksIDEsIDI1MSwgNjYsIDIzMiwgNTksIDIxNSwgCi0gICAgMjIyLCA3OCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDYxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzUsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCA3MywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTkxLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjEyLCA2NSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI1MiwgMTkxLCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjUyLCAxOTAsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTAsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAxODQsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDIyOCwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDIyOSwgMTA3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI5LCAxMDYsIDIzMSwgNDgsIDI0MSwgMTc0LCAKLSAgICAxLCAyMDUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjMsIDE4NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIzMywgMTM1LCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjM0LCAxMzIsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDIwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMiwgMzMsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAyMjEsIDE4MSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE3NiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyNCwgODgsIDIzMSwgCi0gICAgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDEwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA0LCAyMzEsIDQ4LCAyNDEsIAotICAgIDE3NCwgMSwgMjE3LCAyMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAxMTEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNDgsIDIyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDE2LCAyMTMsIDE3MCwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDE2LCAyMTMsIDE2OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNjEsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDc1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3MywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjEyLCA2NSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjUyLCAKLSAgICAxOTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE5MCwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTg0LCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAxOTcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyOSwgMTA3LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMDUsIDIzMSwgCi0gICAgNDgsIDI0OSwgOTQsIDEsIDIzMywgMTM1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgMjQxLCAxODksIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjU0LCAyMywgCi0gICAgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMjEsIDE4MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTc2LCAyMzEsIDQ4LCAKLSAgICAyNDksIDk0LCAxLCAyMjQsIDg4LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTcsIDEwNSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgCi0gICAgMjE3LCAyMiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTExLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNDgsIDIyMSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMjMyLCAxNDUsIDIyMiwgMjE3LCAyMzEsIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjM2LCA2LCAyMzQsIAotICAgIDEyMCwgMSwgNjEsIDIzNCwgMTIwLCAyNSwgNSwgNzMsIDIzNCwgMTIwLCAyNSwgNSwgNzAsIDIzNCwgMTIwLCAyNSwgNSwgCi0gICAgMTQ5LCAxNTMsIDIzNCwgMTIwLCAyNSwgNSwgNzUsIDIzNCwgMTIwLCAyNSwgNSwgNzYsIDIzNCwgMTIwLCAyNSwgMjMzLCAKLSAgICAyMywgNzgsIDIzNCwgMTIwLCA1LCA1MiwgMjIyLCAyMzQsIDUxLCAyMzQsIDEyMCwgNSwgMjU0LCA3NSwgMjM0LCAxMjAsIDUsIAotICAgIDIxMywgMTQ3LCAyMzQsIDEyMCwgMSwgMTc2LCAyMzQsIDEyMCwgMSwgMjM0LCAxMzIsIDIzNCwgMTIwLCAxLCAyNDMsIDEzNSwgCi0gICAgMjM0LCAxMjAsIDEsIDI0MiwgMjQ5LCAyMzQsIDEyMCwgMSwgMjUxLCAzMywgMjM0LCAxMjAsIDEsIDI1MCwgMTU3LCAyMzQsIAotICAgIDEyMCwgMSwgMjM1LCAxNDEsIDIzNCwgMTIwLCAxLCAyMjcsIDE2NSwgMjM0LCAxMjAsIDEsIDIxNSwgMTU2LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE1LCAxNDQsIDIzNCwgMTIwLCAxLCAyNDgsIDEzNSwgMjM0LCAxMjAsIDEsIDI0OCwgMTE5LCAyMzQsIDEyMCwgMSwgCi0gICAgMjI4LCAxMTAsIDIzNCwgMTIwLCAxLCAyMTcsIDEwNSwgMjM0LCAxMjAsIDEsIDIxNiwgMjA4LCAyMzQsIDEyMCwgMSwgMjQ4LCAKLSAgICAyMjEsIDIzNCwgMTIwLCAxLCAyNDgsIDI1LCAyMzQsIDEyMCwgMSwgMTk3LCAyMzQsIDEyMCwgMSwgMTkwLCAyMzQsIDEyMCwgCi0gICAgMSwgMjI1LCAxNDcsIDIzNCwgMTIwLCAxLCAyNTIsIDE5MSwgMjM0LCAxMjAsIDEsIDI1MiwgMTgsIDIzNCwgMTIwLCAxLCAKLSAgICAxODQsIDIzNCwgMTIwLCAxLCAxOTEsIDIzNCwgMTIwLCAxLCAyMDUsIDIzNCwgMTIwLCAxLCAyMzMsIDEzNSwgMjM0LCAxMjAsIAotICAgIDEsIDIxNCwgMjcsIDIzNCwgMTIwLCAxLCAyMjAsIDEwMiwgMjM0LCAxMjAsIDEsIDIxOCwgMjIzLCAyMzQsIDEyMCwgMSwgCi0gICAgMjA2LCAyMzQsIDEyMCwgMSwgMjEwLCAxMTYsIDIzNCwgMTIwLCAxLCAxNjIsIDIzNCwgMTIwLCAxLCAyMzQsIDQ2LCAyMzQsIAotICAgIDEyMCwgMSwgMjE1LCAxMjQsIDIzNCwgMTIwLCA1LCAyNTIsIDE0MSwgNDgsIDIzNCwgMTIwLCA1LCAyNTAsIDIyMSwgMjM0LCAKLSAgICAxMjAsIDUsIDU5LCA1MSwgMjM0LCAxMjAsIDIxMywgMTUyLCAyMzQsIDEyMCwgMjEsIDExMCwgMjM0LCAxMjAsIDIxLCAxMDUsIAotICAgIDIzNCwgMTIwLCAyMSwgMTU4LCAyMzQsIDEyMCwgMjEsIDE2MSwgMjM0LCAxMjAsIDU0LCAyMTYsIDI0NywgMjM0LCAxMjAsIAotICAgIDU0LCAyMTUsIDczLCAyMzQsIDEyMCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNCwgMTIwLCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDcsIDEyMCwgMjM0LCAxMjAsIDIyNCwgMTQxLCA0LCAyNTAsIDM1LCAyMzQsIDEyMCwgCi0gICAgMjI0LCAxNDEsIDI1MCwgMzUsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ5LCAxMzcsIDEzMCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAKLSAgICAyMzEsIDE4MCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDExNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDgsIDE3OCwgCi0gICAgMjM0LCAxMjAsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjMyLCAyMDcsIDU1LCAyMTksIAotICAgIDI4LCAyNTQsIDM4LCAxLCAyNDEsIDIzOCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzMywgOTMsIDU1LCAyMTksIDI4LCAKLSAgICAyNTQsIDM4LCAxLCAyNDEsIDE5NSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzMSwgNjUsIDU1LCAyMTksIDI4LCAyNTQsIAotICAgIDM4LCAxLCAyMjQsIDM0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEyLCAzMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIyMCwgMjAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjMsIDY3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgCi0gICAgMjUyLCAyNSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxNywgMzYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjEsIAotICAgIDIyNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMjI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjI3LCAKLSAgICAxOTQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzQsIDExNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMiwgMjQsIAotICAgIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjEsIDI0OSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0NCwgMTU0LCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjU0LCAxNzAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTMsIDE2MSwgNTUsIAotICAgIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0OCwgMjIsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIwMSwgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0OCwgMTg4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQyLCAyMzgsIDU1LCAyMTksIDI4LCAKLSAgICAyNTQsIDM4LCAxLCAyMTYsIDIyNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMCwgOTYsIDU1LCAyMTksIDI4LCAyNTQsIAotICAgIDM4LCAxLCAyNDgsIDE5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCAyMzIsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAKLSAgICAxLCAyMTYsIDE5NywgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxNiwgMTc4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIAotICAgIDExMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDU0LCAyNDQsIDExNCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEzMiwgMjM1LCAKLSAgICAyMzgsIDI1MywgMTcyLCAxLCA2MSwgMjUzLCAxNzIsIDEsIDI1NSwgNzMsIDI1MywgMTcyLCAxLCAyNTQsIDczLCAyNTMsIAotICAgIDE3MiwgMSwgMjU1LCAzMiwgMjUzLCAxNzIsIDEsIDI1NCwgMTIzLCAyNTMsIDE3MiwgMSwgMjU1LCAzMywgMjUzLCAxNzIsIAotICAgIDEsIDI1NCwgMjQzLCAyNTMsIDE3MiwgMSwgMjU0LCAyMzksIDI1MywgMTcyLCAxLCA3NSwgMjUzLCAxNzIsIDEsIDI0NSwgCi0gICAgMjA5LCAyNTMsIDE3MiwgMSwgNzYsIDI1MywgMTcyLCAxLCAyMjYsIDE4MywgMjUzLCAxNzIsIDEsIDczLCAyNTMsIDE3MiwgCi0gICAgMSwgMjM2LCAzMywgMjUzLCAxNzIsIDEsIDcwLCAyNTMsIDE3MiwgMSwgMjE0LCAxMTgsIDI1MywgMTcyLCAxLCAyMzQsIAotICAgIDE4MiwgMjUzLCAxNzIsIDEsIDIxMSwgMTYyLCAyNTMsIDE3MiwgMSwgMjExLCAxMjgsIDI1MywgMTcyLCAxLCAyMTEsIDEzNywgCi0gICAgMjUzLCAxNzIsIDEsIDI0MywgNjIsIDI1MywgMTcyLCAxLCAyNDMsIDI0LCAyNTMsIDE3MiwgMSwgMjQyLCAyMzYsIDI1MywgCi0gICAgMTcyLCAxLCAyNTAsIDE5MCwgMjUzLCAxNzIsIDEsIDIzNSwgMTI2LCAyNTMsIDE3MiwgMSwgMjE3LCAyMiwgMjUzLCAxNzIsIAotICAgIDEsIDIxNiwgMTk1LCAyNTMsIDE3MiwgMSwgMjQ4LCA5MCwgMjUzLCAxNzIsIDEsIDI0OCwgMTcsIDI1MywgMTcyLCAxLCAKLSAgICAyMTUsIDE1MSwgMjUzLCAxNzIsIDEsIDIyNSwgMjIxLCAyNTMsIDE3MiwgMSwgMjQ0LCAxNTQsIDI1MywgMTcyLCAxLCAyNTIsIAotICAgIDc1LCAyNTMsIDE3MiwgMSwgMjUyLCAxNCwgMjUzLCAxNzIsIDEsIDIyOSwgNjQsIDI1MywgMTcyLCAxLCAyMjgsIDIzOSwgCi0gICAgMjUzLCAxNzIsIDEsIDIyOCwgMjQwLCAyNTMsIDE3MiwgMSwgMjI5LCAxMDcsIDI1MywgMTcyLCAxLCAyMjcsIDE1NiwgMjUzLCAKLSAgICAxNzIsIDEsIDIyOCwgMTA1LCAyNTMsIDE3MiwgMSwgMjMxLCA5MSwgMjUzLCAxNzIsIDEsIDI0MSwgMTE2LCAyNTMsIDE3MiwgCi0gICAgMSwgMjEwLCAxNjYsIDI1MywgMTcyLCAxLCAyMTEsIDQ3LCAyNTMsIDE3MiwgMSwgMjEzLCAyNTUsIDI1MywgMTcyLCAxLCAKLSAgICAyMjMsIDEyOCwgMjUzLCAxNzIsIDEsIDIzMywgNTgsIDI1MywgMTcyLCAxLCAyMjEsIDE4MSwgMjUzLCAxNzIsIDEsIDIxMCwgCi0gICAgOTQsIDI1MywgMTcyLCAxLCAyMjAsIDYzLCAyNTMsIDE3MiwgMSwgMjEwLCA3NCwgMjUzLCAxNzIsIDEsIDIxOSwgMTk4LCAKLSAgICAyNTMsIDE3MiwgMSwgMjE4LCAxOTMsIDI1MywgMTcyLCAxLCAyNDEsIDIzOCwgMjUzLCAxNzIsIDI1NSwgMjEsIDc4LCAyMTYsIAotICAgIDc5LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgNCwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAKLSAgICAxNDAsIDIzMywgODUsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCAyMzMsIDg1LCAxMjMsIDU5LCAxMTcsIAotICAgIDExMywgMTcwLCAyMjQsIDE0MCwgMjMzLCA4NSwgMTEzLCAyMjIsIDIzMiwgMTE3LCAxMjMsIDIyMiwgMjM0LCAyMjQsIDE0MCwgCi0gICAgMjMzLCA4NSwgMTIzLCAyMjIsIDIzNCwgMTE3LCAxMTMsIDIyMiwgMjMyLCAyMjQsIDE0MCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTIsIDI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0MiwgCi0gICAgMjAxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0OCwgMTg4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0MSwgMjM4LCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxMiwgMzAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIAotICAgIDIyNSwgMjU0LCAxLCAyNDEsIDE5NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTYsIDIyNiwgMjM1LCAyMTgsIDIyNSwgCi0gICAgMjU0LCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMzQsIDIyNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAKLSAgICAyMzMsIDkzLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzMSwgNjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjI3LCAxOTQsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIxLCAyNDksIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjUzLCAxNjIsIDIzNSwgCi0gICAgMjE4LCAyMjUsIDI1NCwgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIyLCAyNCwgMjM1LCAyMTgsIAotICAgIDIyNSwgMjU0LCAxLCAyMjQsIDM0LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMywgNjcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgCi0gICAgMSwgMjIwLCAyMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTcsIDM2LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMTAsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTU4LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDU0LCAxNjEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAKLSAgICAyMTUsIDczLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAKLSAgICAxMjMsIDIxNiwgMTQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjU0LCAxNjgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTIsIAotICAgIDI1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQyLCAyMDEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDgsIDE4OCwgMjM1LCAKLSAgICAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMjM4LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjEyLCAyOSwgMjM1LCAyMTgsIDIyNiwgCi0gICAgNzIsIDEsIDIxMCwgOTcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDEsIDE5NSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIAotICAgIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjEwLCAyMzIsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzQsIDIyNSwgCi0gICAgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMywgOTMsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzEsIDY0LCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgMSwgMjI3LCAxOTQsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNiwgNzIsIAotICAgIDEsIDIyNSwgMjIxLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIyLCAyNCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMCwgCi0gICAgMjAsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTcsIDM2LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDExMCwgMjM1LCAyMTgsIAotICAgIDIyNiwgNzIsIDU0LCAxMDUsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTU4LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDE2MSwgCi0gICAgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAyMTYsIDI0NywgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAyMTUsIDczLCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA2MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3MywgNTUsIDIwMSwgMSwgMjExLCAzNywgNzMsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDc1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNzYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDIzNCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzQsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTUsIDI1LCA1NSwgMjAxLCAxLCAKLSAgICAyMTEsIDM3LCAyNTUsIDI1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMjQyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMTYsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjE2LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjM3LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjU1LCA1NSwgMjAxLCAxLCAyMjYsIAotICAgIDE0OSwgMjU0LCAyNDEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIAotICAgIDEyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAxNjcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMTY3LCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjI0LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjM1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMjMzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAxNzgsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMTc4LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzQsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDUsIDE2MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTU5LCA1NSwgMjAxLCAxLCAyMjYsIAotICAgIDE0OSwgMjU0LCAxMjMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzMiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAKLSAgICAyMzIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzMSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxMzEsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxNDcsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxMTgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMTE1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMzgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjMxLCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMDgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE3NSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0MCwgMTEzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIxMSwgCi0gICAgMzcsIDI0NSwgMjE1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCA0NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAKLSAgICA0NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIzNSwgMTgxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMzUsIDE4MSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDE1OSwgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI1NCwgNDEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgNDEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTQsIDIzMCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjM3LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjgsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDIzMSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMzEsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDUsIDc1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDc1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMjA2LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjUsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjI1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNDAsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTIsIDEyNSwgMjIyLCAxMjcsIDIxLCAxMTAsIDIyMiwgMTI3LCAyMSwgMTA1LCAyMjIsIDEyNywgCi0gICAgMjEsIDE1OCwgMjIyLCAxMjcsIDIxLCAxNjEsIDIyMiwgMTI3LCAyMSwgMTg5LCAyMjIsIDEyNywgMjEsIDE5NCwgMjIyLCAKLSAgICAxMjcsIDIxLCAxOTgsIDIyMiwgMTI3LCAyMSwgMTk1LCAyMjIsIDEyNywgMjEsIDIwMCwgMjIyLCAxMjcsIDU0LCAyMTYsIAotICAgIDI0NywgMjIyLCAxMjcsIDU0LCAyMTUsIDczLCAyMjIsIDEyNywgNTQsIDIxNiwgMTYyLCAyMjIsIDEyNywgNTQsIDI0NCwgCi0gICAgMTUsIDIyMiwgMTI3LCA1NCwgMjQ0LCAxMTQsIDIyMiwgMTI3LCA1NCwgMjE5LCAxMTEsIDIyMiwgMTI3LCA1NCwgMjIwLCAKLSAgICAxMTYsIDIyMiwgMTI3LCA1NCwgMjQ1LCAxODQsIDIyMiwgMTI3LCA1NCwgMjI4LCAxOTUsIDIyMiwgMTI3LCA1NCwgMTIzLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAxMTMsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDEzNCwgMjQwLCAyMTAsIDIyMiwgCi0gICAgMTI3LCA1NCwgMjQ0LCAxMSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDIyMiwgMTI3LCAKLSAgICA1NCwgMjE5LCAxMjUsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAKLSAgICAyNDUsIDE5MywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyMjIsIDEyNywgMjQ0LCAyLCAKLSAgICAxMjMsIDI0MiwgMjcsIDIyMiwgMTI3LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMTYsIAotICAgIDE2OCwgMjIyLCAxMjcsIDI0NCwgMiwgMTEzLCAyMTYsIDE2NiwgMTE4LCA1LCAyNTAsIDI1NSwgMTE4LCA1LCAyNTQsIDc1LCAKLSAgICAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTAyLCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAxMTgsIDEsIAotICAgIDI1NSwgNzMsIDExOCwgMSwgNzMsIDExOCwgMSwgMjM2LCAzMywgMTE4LCAxLCA3MCwgMTE4LCAxLCAyMTQsIDExOCwgMTE4LCAKLSAgICAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgwLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIDE0OSwgMjMyLCAKLSAgICAxODUsIDExOCwgMSwgNzUsIDExOCwgMSwgMjU0LCAyMDEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjUzLCAxOTIsIDExOCwgMSwgCi0gICAgMTc2LCAxMTgsIDEsIDIzNCwgMTMyLCAxMTgsIDEsIDI0MywgMTM1LCAxMTgsIDEsIDI0MiwgMjQ5LCAxMTgsIDEsIDIyOSwgCi0gICAgNzcsIDExOCwgMSwgMjUxLCAzMywgMTE4LCAxLCAyNTAsIDE1NywgMTE4LCAxLCAyMzUsIDE0MSwgMTE4LCAxLCAyMzUsIAotICAgIDExNCwgMTE4LCAxLCAyMjcsIDE2NSwgMTE4LCAxLCAyMTUsIDE1NiwgMTE4LCAxLCAyMTUsIDE0NCwgMTE4LCAxLCAyNDgsIAotICAgIDEzNSwgMTE4LCAxLCAyNDgsIDExOSwgMTE4LCAxLCAyMjgsIDExMCwgMTE4LCAxLCAyMTcsIDEwNSwgMTE4LCAxLCAyMTYsIAotICAgIDIwOCwgMTE4LCAxLCAyNDgsIDIyMSwgMTE4LCAxLCAyNDgsIDI1LCAxMTgsIDEsIDE5NywgMTE4LCAxLCAxOTAsIDExOCwgMSwgCi0gICAgMjI1LCAxNDcsIDExOCwgMSwgMjUyLCAxOTEsIDExOCwgMSwgMjUyLCAxOCwgMTE4LCAxLCAxODQsIDExOCwgMSwgMTkxLCAKLSAgICAxMTgsIDEsIDIwNSwgMTE4LCAxLCAyMzMsIDEzNSwgMTE4LCAxLCAyMTQsIDI3LCAxMTgsIDEsIDIyMCwgMTAyLCAxMTgsIDEsIAotICAgIDIxOCwgMjIzLCAxMTgsIDEsIDIwNiwgMTE4LCAxLCAxNjIsIDExOCwgMSwgMjMyLCAxODQsIDExOCwgMSwgNTUsIDM2LCAKLSAgICAyMzIsIDE3NSwgMTE4LCAxLCA1NSwgMzYsIDIyMiwgMTc5LCAxMTgsIDEsIDU1LCAzNiwgMjI4LCA5MiwgMTE4LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTE4LCAyNSwgNSwgMjUyLCAxNSwgMjU1LCA3MywgMTE4LCAyNSwgNSwgNzMsIDExOCwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDExOCwgMjUsIDUsIDcwLCAxMTgsIDI1LCA1LCAyMTQsIDExOCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTMsIDExOCwgMjUsIAotICAgIDUsIDE0OSwgMjIyLCAxODAsIDExOCwgMjUsIDUsIDE0OSwgMTU2LCAxMTgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxMTgsIAotICAgIDI1LCA1LCA3NSwgMTE4LCAyNSwgNSwgMjU0LCAyMDEsIDExOCwgMjUsIDUsIDc2LCAxMTgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTE4LCAyMTMsIDE1MiwgMTE4LCAyNDgsIDE3OCwgMTE4LCA1MiwgMjQ4LCAxNzgsIDExOCwgMjI0LCAxNDEsIDI0NywgMTIwLCAKLSAgICAxMTgsIDIyNCwgMTQxLCA1MiwgMjQ3LCAxMjAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMjEzLCAxMTgsIDIyNCwgMTQxLCAyNDksIAotICAgIDEzNywgMTMwLCAxMTgsIDIyNCwgMTQxLCAyMzIsIDExNSwgMTE4LCA1NCwgMTEwLCAxMTgsIDU0LCAxMDUsIDExOCwgNTQsIAotICAgIDE1OCwgMTE4LCA1NCwgMTYxLCAxMTgsIDU0LCAxODksIDExOCwgNTQsIDE5NCwgMTE4LCA1NCwgMTk4LCAxMTgsIDU0LCAKLSAgICAxOTUsIDExOCwgNTQsIDIwMCwgMTE4LCA1NCwgMjE2LCAyNDcsIDExOCwgNTQsIDIxNSwgNzMsIDExOCwgNTQsIDIxNiwgCi0gICAgMTYyLCAxMTgsIDU0LCAyNDQsIDE1LCAxMTgsIDU0LCAyNDQsIDExNCwgMTE4LCA1NCwgMjE5LCAxMTEsIDExOCwgNTQsIAotICAgIDIyMCwgMTE2LCAxMTgsIDU0LCAyNDUsIDE4NCwgMTE4LCA1NCwgMjI4LCAxOTUsIDExOCwgNTQsIDEyMywgMjQwLCAyMTAsIAotICAgIDExOCwgNTQsIDEyMywgMjE2LCAxNDcsIDExOCwgMjEsIDIxMCwgODYsIDExOCwgMjEsIDExMCwgMTE4LCAyMSwgMTA1LCAKLSAgICAxMTgsIDIxLCAxNTgsIDExOCwgMjEsIDE2MSwgMTE4LCAyMSwgMTg5LCAxMTgsIDIxLCAxOTQsIDExOCwgMjEsIDE5OCwgCi0gICAgMTE4LCAyMSwgMTk1LCAxMTgsIDIxLCAyMDAsIDIzNCwgMjQ0LCA1LCAyNTAsIDI1NSwgMjM0LCAyNDQsIDUsIDI1NCwgNzUsIAotICAgIDIzNCwgMjQ0LCA1LCAyMTMsIDE0NywgMjM0LCAyNDQsIDEsIDYxLCAyMzQsIDI0NCwgMSwgMjU1LCA3MywgMjM0LCAyNDQsIAotICAgIDEsIDczLCAyMzQsIDI0NCwgMSwgMjM2LCAzMywgMjM0LCAyNDQsIDEsIDcwLCAyMzQsIDI0NCwgMSwgMjE0LCAxMTgsIDIzNCwgCi0gICAgMjQ0LCAxLCA3NSwgMjM0LCAyNDQsIDEsIDI1NCwgMjAxLCAyMzQsIDI0NCwgMSwgNzYsIDIzNCwgMjQ0LCAxLCAyNTMsIAotICAgIDE5MiwgMjM0LCAyNDQsIDEsIDE3NiwgMjM0LCAyNDQsIDEsIDIzNCwgMTMyLCAyMzQsIDI0NCwgMSwgMjQzLCAxMzUsIDIzNCwgCi0gICAgMjQ0LCAxLCAyNDIsIDI0OSwgMjM0LCAyNDQsIDEsIDIyOSwgNzcsIDIzNCwgMjQ0LCAxLCAyNTEsIDMzLCAyMzQsIDI0NCwgCi0gICAgMSwgMjUwLCAxNTcsIDIzNCwgMjQ0LCAxLCAyMzUsIDE0MSwgMjM0LCAyNDQsIDEsIDIzNSwgMTE0LCAyMzQsIDI0NCwgMSwgCi0gICAgMjI3LCAxNjUsIDIzNCwgMjQ0LCAxLCAyMTUsIDE1NiwgMjM0LCAyNDQsIDEsIDIxNSwgMTQ0LCAyMzQsIDI0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIzNCwgMjQ0LCAxLCAyNDgsIDEyNCwgMjM0LCAyNDQsIDEsIDI0OCwgMTE5LCAyMzQsIDI0NCwgMSwgMjIzLCAzOSwgCi0gICAgMjM0LCAyNDQsIDEsIDIyOCwgMTEwLCAyMzQsIDI0NCwgMSwgMjE3LCAxMDUsIDIzNCwgMjQ0LCAxLCAyMTYsIDIwOCwgMjM0LCAKLSAgICAyNDQsIDEsIDI0OCwgMjIxLCAyMzQsIDI0NCwgMSwgMjQ4LCAyNSwgMjM0LCAyNDQsIDEsIDE5NywgMjM0LCAyNDQsIDEsIAotICAgIDE5MCwgMjM0LCAyNDQsIDEsIDIyNSwgMTQ3LCAyMzQsIDI0NCwgMSwgMjUyLCAxOTEsIDIzNCwgMjQ0LCAxLCAyNTIsIDE4LCAKLSAgICAyMzQsIDI0NCwgMSwgMTg0LCAyMzQsIDI0NCwgMSwgMTkxLCAyMzQsIDI0NCwgMSwgMjA1LCAyMzQsIDI0NCwgMSwgMjMzLCAKLSAgICAxMzUsIDIzNCwgMjQ0LCAxLCAyMTQsIDI3LCAyMzQsIDI0NCwgMSwgMjIwLCAxMDIsIDIzNCwgMjQ0LCAxLCAyMTgsIDIyMywgCi0gICAgMjM0LCAyNDQsIDEsIDIwNiwgMjM0LCAyNDQsIDEsIDE2MiwgMjM0LCAyNDQsIDI1LCA1LCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMjUsIDUsIDczLCAyMzQsIDI0NCwgMjUsIDUsIDIzNiwgMzMsIDIzNCwgMjQ0LCAyNSwgNSwgNzAsIDIzNCwgMjQ0LCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDIzNCwgMjQ0LCAyNSwgNSwgNzUsIDIzNCwgMjQ0LCAyNSwgNSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzYsIDIzNCwgMjQ0LCAyNSwgNSwgMjUzLCAxOTIsIDIzNCwgMjQ0LCA1LCAyMTMsIDE1MiwgMjM0LCAyNDQsIDUsIAotICAgIDIyNywgMjA1LCAyMzQsIDI0NCwgMjU1LCAyMSwgNTAsIDIzNCwgMjQ0LCAyNDUsIDEyMSwgNTAsIDIzNCwgMjQ0LCA1NCwgCi0gICAgNTAsIDIzNCwgMjQ0LCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCA1MiwgMjIxLCAxNzMsIDc4LCAyMzQsIDI0NCwgMjQ4LCAKLSAgICAxNzgsIDIzNCwgMjQ0LCA1MiwgMjQ4LCAxNzgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyMiwgMTgsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIxNywgODAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MiwgMTY4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNTEsIAotICAgIDIzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDgsIDIwMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQzLCAxMjAsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDIzMSwgMjEwLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDc0LCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAxLCAyMzMsIDExMiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI5LCAyMTMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxNCwgMjQsIAotICAgIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgNzMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxMSwgODQsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIyMywgMTY4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDIsIDM3LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzQsIAotICAgIDI0OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjM1LCAxMzYsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNywgMTYyLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAxLCAyNTQsIDIwOSwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ1LCAyMDcsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIzNiwgMzQsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxNCwgMjA4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjYsIAotICAgIDIyMiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ1LCAxOTcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzMSwgMjIzLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAyMSwgMjEwLCA4NiwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDExMCwgMjE5LCAzNiwgMjE5LCA0NCwgCi0gICAgMjEsIDEwNSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE1OCwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE2MSwgMjE5LCAzNiwgCi0gICAgMjE5LCA0NCwgMjEsIDE4OSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5NCwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5OCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5NSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDIwMCwgMjUwLCAxNTEsIDUsIDI1MCwgCi0gICAgMjU1LCAyNTAsIDE1MSwgNSwgMjU0LCA3NSwgMjUwLCAxNTEsIDUsIDIxMywgMTQ3LCAyNTAsIDE1MSwgMSwgMjU1LCA3MywgCi0gICAgMjUwLCAxNTEsIDEsIDczLCAyNTAsIDE1MSwgMSwgNzAsIDI1MCwgMTUxLCAxLCA3NSwgMjUwLCAxNTEsIDEsIDIzNSwgMTAsIAotICAgIDI1MCwgMTUxLCAxLCAyMzQsIDEzMSwgMjUwLCAxNTEsIDEsIDI0MywgMTMyLCAyNTAsIDE1MSwgMSwgMjQyLCAyNDgsIDI1MCwgCi0gICAgMTUxLCAxLCAyMjksIDc2LCAyNTAsIDE1MSwgMSwgMjUxLCAzMiwgMjUwLCAxNTEsIDEsIDI1MCwgMTU2LCAyNTAsIDE1MSwgCi0gICAgMSwgMjM1LCAxNDAsIDI1MCwgMTUxLCAxLCAyMzUsIDExMywgMjUwLCAxNTEsIDEsIDIyNywgMTY0LCAyNTAsIDE1MSwgMSwgCi0gICAgMjE1LCAxNTUsIDI1MCwgMTUxLCAxLCAyMTUsIDE0MywgMjUwLCAxNTEsIDEsIDI0OCwgMTM0LCAyNTAsIDE1MSwgMSwgMjQ4LCAKLSAgICAxMTgsIDI1MCwgMTUxLCAxLCAyMjgsIDEwOSwgMjUwLCAxNTEsIDEsIDIxNywgMTAxLCAyNTAsIDE1MSwgMSwgMjE2LCAyMDcsIAotICAgIDI1MCwgMTUxLCAxLCAyNDgsIDIyMCwgMjUwLCAxNTEsIDEsIDI0OCwgMjQsIDI1MCwgMTUxLCAxLCAyMjksIDIyNSwgMjUwLCAKLSAgICAxNTEsIDEsIDIyNiwgODksIDI1MCwgMTUxLCAxLCAyMjUsIDE0NiwgMjUwLCAxNTEsIDEsIDI1MiwgMTg5LCAyNTAsIDE1MSwgCi0gICAgMSwgMjUyLCAxNywgMjUwLCAxNTEsIDEsIDIzMSwgMjM3LCAyNTAsIDE1MSwgMSwgMjEwLCAxNjcsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTEsIDEwMywgMjUwLCAxNTEsIDEsIDIyMywgMTg0LCAyNTAsIDE1MSwgMSwgMjMzLCAxMzQsIDI1MCwgMTUxLCAxLCAyMTIsIAotICAgIDY0LCAyNTAsIDE1MSwgMSwgMjIyLCAzMSwgMjUwLCAxNTEsIDEsIDI0MiwgNDYsIDI1MCwgMTUxLCAyNSwgNSwgNjEsIDI1MCwgCi0gICAgMTUxLCAyNSwgNSwgNzMsIDI1MCwgMTUxLCAyNSwgNSwgMjM2LCAzMywgMjUwLCAxNTEsIDI1LCA1LCA3MCwgMjUwLCAxNTEsIAotICAgIDI1LCA1LCAyMTQsIDExOCwgMjUwLCAxNTEsIDI1LCA1LCA3NSwgMjUwLCAxNTEsIDI1LCA1LCAyNTQsIDIwMSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3NiwgMjUwLCAxNTEsIDI1LCA1LCAyNTMsIDE5MiwgMjUwLCAxNTEsIDI1LCA1LCAyMjYsIDIxOSwgCi0gICAgMjUwLCAxNTEsIDE0NCwgNzgsIDI1MCwgMTUxLCAyNTMsIDE5MywgNzgsIDI1MCwgMTUxLCAyMTMsIDE1MiwgMjUwLCAxNTEsIAotICAgIDIzMSwgMjM1LCAyNTAsIDE1MSwgMjEsIDIxMCwgODYsIDI1MCwgMTUxLCAyMSwgMTEwLCAyNTAsIDE1MSwgMjEsIDEwNSwgCi0gICAgMjUwLCAxNTEsIDIxLCAxNTgsIDI1MCwgMTUxLCAyMSwgMTYxLCAyNTAsIDE1MSwgMjEsIDE4OSwgMjUwLCAxNTEsIDIxLCAKLSAgICAxOTQsIDI1MCwgMTUxLCAyMSwgMTk4LCAyNTAsIDE1MSwgMjEsIDE5NSwgMjUwLCAxNTEsIDIxLCAyMDAsIDI1MCwgMTUxLCAKLSAgICAyMjEsIDE3MywgNzgsIDI1MCwgMTUxLCAyNDgsIDE3OCwgMjUwLCAxNTEsIDUyLCAyNDgsIDE3OCwgMjUwLCAxNTEsIDIyNCwgCi0gICAgMTMsIDc4LCAxNzQsIDUsIDI1MCwgMjU1LCAxNzQsIDUsIDI1NCwgNzUsIDE3NCwgNSwgMjEzLCAxNDcsIDE3NCwgMSwgNjEsIAotICAgIDE3NCwgMSwgMjU1LCA3MywgMTc0LCAxLCA3MywgMTc0LCAxLCAyMzYsIDMzLCAxNzQsIDEsIDcwLCAxNzQsIDEsIDIxNCwgCi0gICAgMTE4LCAxNzQsIDEsIDE0OSwgMTUzLCAxNzQsIDEsIDE0OSwgMjIyLCAxODAsIDE3NCwgMSwgMTQ5LCAxNTYsIDE3NCwgMSwgCi0gICAgMTQ5LCAyMzIsIDE4NSwgMTc0LCAxLCA3NSwgMTc0LCAxLCAyNTQsIDIwMSwgMTc0LCAxLCA3NiwgMTc0LCAxLCAyNTMsIAotICAgIDE5MiwgMTc0LCAxLCAxNzYsIDE3NCwgMSwgMjM0LCAxMzIsIDE3NCwgMSwgMjQzLCAxMzUsIDE3NCwgMSwgMjQyLCAyNDksIAotICAgIDE3NCwgMSwgMjI5LCA3NywgMTc0LCAxLCAyNTEsIDMzLCAxNzQsIDEsIDI1MCwgMTU3LCAxNzQsIDEsIDIzNSwgMTQxLCAKLSAgICAxNzQsIDEsIDIzNSwgMTE0LCAxNzQsIDEsIDIyNywgMTY1LCAxNzQsIDEsIDIxNSwgMTU2LCAxNzQsIDEsIDIxNSwgMTQ0LCAKLSAgICAxNzQsIDEsIDI0OCwgMTM1LCAxNzQsIDEsIDI0OCwgMTE5LCAxNzQsIDEsIDIyOCwgMTEwLCAxNzQsIDEsIDIxNywgMTA1LCAKLSAgICAxNzQsIDEsIDIxNiwgMjA4LCAxNzQsIDEsIDI0OCwgMjIxLCAxNzQsIDEsIDI0OCwgMjUsIDE3NCwgMSwgMTk3LCAxNzQsIDEsIAotICAgIDE5MCwgMTc0LCAxLCAyMjUsIDE0NywgMTc0LCAxLCAyNTIsIDE5MSwgMTc0LCAxLCAyNTIsIDE4LCAxNzQsIDEsIDE4NCwgCi0gICAgMTc0LCAxLCAxOTEsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTM1LCAxNzQsIDEsIDIzMiwgMTg0LCAxNzQsIDEsIAotICAgIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDIsIDE3NCwgMSwgMjE4LCAyMjMsIDE3NCwgMSwgMjA2LCAxNzQsIDEsIDE2MiwgCi0gICAgMTc0LCAyNSwgNSwgMjU1LCA3MywgMTc0LCAyNSwgNSwgNzMsIDE3NCwgMjUsIDUsIDIzNiwgMzMsIDE3NCwgMjUsIDUsIDcwLCAKLSAgICAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIAotICAgIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzQsIDI1LCA1LCA3NSwgMTc0LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE3NCwgMjUsIDUsIDc2LCAxNzQsIDI1LCA1LCAyNTMsIDE5MiwgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCAKLSAgICA1LCAyNTMsIDE3NSwgMTc0LCA1LCAyMzUsIDEwMiwgMTc0LCA1LCAyMTQsIDE2MSwgMTc0LCAyMjYsIDIwNCwgMTc0LCAyNDgsIAotICAgIDE3OCwgMTc0LCA1MiwgMjQ4LCAxNzgsIDE3NCwgMjU1LCAyMSwgNTAsIDE3NCwgMjIwLCAxMzcsIDE3NCwgMjEsIDIxMCwgCi0gICAgODYsIDE3NCwgMjEsIDExMCwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTg5LCAKLSAgICAxNzQsIDIxLCAxOTQsIDE3NCwgMjEsIDE5OCwgMTc0LCAyMSwgMTk1LCAxNzQsIDIxLCAyMDAsIDIxNywgNjksIDEsIDYxLCAKLSAgICAyMTcsIDY5LCAxLCAyNTUsIDczLCAyMTcsIDY5LCAxLCA3MywgMjE3LCA2OSwgMSwgMjM2LCAzMywgMjE3LCA2OSwgMSwgNzAsIAotICAgIDIxNywgNjksIDEsIDIxNCwgMTE4LCAyMTcsIDY5LCAxLCA3NSwgMjE3LCA2OSwgMSwgMjU0LCAyMDEsIDIxNywgNjksIDEsIAotICAgIDc2LCAyMTcsIDY5LCAxLCAyNTMsIDE5MiwgMjE3LCA2OSwgMSwgMTc2LCAyMTcsIDY5LCAxLCAyMzQsIDEzMiwgMjE3LCA2OSwgCi0gICAgMSwgMjQzLCAxMzUsIDIxNywgNjksIDEsIDI0MiwgMjQ5LCAyMTcsIDY5LCAxLCAyMjksIDc3LCAyMTcsIDY5LCAxLCAyNTEsIAotICAgIDMzLCAyMTcsIDY5LCAxLCAyNTAsIDE1NywgMjE3LCA2OSwgMSwgMjM1LCAxNDEsIDIxNywgNjksIDEsIDIzNSwgMTE0LCAKLSAgICAyMTcsIDY5LCAxLCAyMjcsIDE2NSwgMjE3LCA2OSwgMSwgMjE1LCAxNTYsIDIxNywgNjksIDEsIDIxNSwgMTQ0LCAyMTcsIAotICAgIDY5LCAxLCAyNDgsIDEzNSwgMjE3LCA2OSwgMSwgMjQ4LCAxMTksIDIxNywgNjksIDEsIDIyOCwgMTEwLCAyMTcsIDY5LCAxLCAKLSAgICAyMTcsIDEwNSwgMjE3LCA2OSwgMSwgMjE2LCAyMDgsIDIxNywgNjksIDEsIDI0OCwgMjIxLCAyMTcsIDY5LCAxLCAyNDgsIAotICAgIDI1LCAyMTcsIDY5LCAxLCAxOTcsIDIxNywgNjksIDEsIDE5MCwgMjE3LCA2OSwgMSwgMjI1LCAxNDcsIDIxNywgNjksIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDY5LCAxLCAyNTIsIDE4LCAyMTcsIDY5LCAxLCAxODQsIDIxNywgNjksIDEsIDE5MSwgMjE3LCA2OSwgCi0gICAgMSwgMjA1LCAyMTcsIDY5LCAxLCAyMzMsIDEzNSwgMjE3LCA2OSwgMSwgMjE0LCAyNywgMjE3LCA2OSwgMSwgMjIwLCAxMDIsIAotICAgIDIxNywgNjksIDEsIDIwNiwgMjE3LCA2OSwgMSwgMTYyLCAyMTcsIDY5LCAxLCAyMjIsIDE3OSwgMjE3LCA2OSwgNSwgMjU0LCAKLSAgICA3NSwgMjE3LCA2OSwgNSwgMjEzLCAxNDcsIDIxNywgNjksIDI1LCA1LCAyNTUsIDczLCAyMTcsIDY5LCAyNSwgNSwgNzMsIAotICAgIDIxNywgNjksIDI1LCA1LCAyMzYsIDMzLCAyMTcsIDY5LCAyNSwgNSwgNzAsIDIxNywgNjksIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDc1LCAyMTcsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIDIxNywgNjksIDI1LCA1LCA3NiwgMjE3LCAKLSAgICA2OSwgMjUsIDUsIDI1MywgMTkyLCAyMTcsIDY5LCA1LCAyMTMsIDE1MiwgMjE3LCA2OSwgNSwgMjI3LCAyMDUsIDIxNywgNjksIAotICAgIDIxLCAyMTAsIDg2LCAyMTcsIDY5LCAyMSwgMTEwLCAyMTcsIDY5LCAyMSwgMTA1LCAyMTcsIDY5LCAyMSwgMTU4LCAyMTcsIAotICAgIDY5LCAyMSwgMTYxLCAyMTcsIDY5LCAyMSwgMTg5LCAyMTcsIDY5LCAyMSwgMTk0LCAyMTcsIDY5LCAyMSwgMTk4LCAyMTcsIAotICAgIDY5LCAyMSwgMTk1LCAyMTcsIDY5LCAyMSwgMjAwLCAxNSwgNSwgNjEsIDE1LCA1LCAxMTUsIDMwLCA2MSwgMTUsIDUsIDExNSwgCi0gICAgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMTE1LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMTE1LCAzMCwgMTYyLCAKLSAgICAxNSwgNSwgMTE1LCAzMCwgMjM2LCAzNSwgMTUsIDUsIDExNSwgMzAsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjMwLCA2MSwgMTUsIDUsIDExNSwgMzAsIDIyMiwgMjEsIDE1LCA1LCAyNTUsIDc1LCAxNSwgNSwgMjU1LCAyNSwgMTUsIAotICAgIDUsIDI1NSwgMjYsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDI1NSwgMjYsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1NSwgMjYsIAotICAgIDMwLCAyMzYsIDksIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjIwLCA0OCwgCi0gICAgMTUsIDUsIDI1NSwgMjYsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDI1NSwgMjYsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDIzLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjIwLCAKLSAgICAxMDAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDI1NCwgMjU1LCAxNSwgNSwgMjU0LCAxODYsIDE1LCAKLSAgICA1LCAyNTQsIDE4NywgMzAsIDI0NSwgODcsIDE1LCA1LCAyNTQsIDE4NywgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MCwgMTUsIAotICAgIDUsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQ3LCAKLSAgICAyMTYsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAxNjIsIDE1LCA1LCAyNTQsIAotICAgIDE3OSwgMzAsIDIzNCwgMjU1LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDI1NCwgMTc1LCAxNSwgNSwgMjU0LCAxNjgsIAotICAgIDE1LCA1LCAyNTQsIDEzMiwgMTUsIDUsIDI1NCwgMTMzLCAzMCwgMjIwLCA2MywgMTUsIDUsIDI1NCwgMTIzLCAxNSwgNSwgCi0gICAgMjU0LCAxMjQsIDExNywgMjU0LCAxMjMsIDE1LCA1LCAyNTQsIDEyNCwgMTM0LCAyMTYsIDg1LCAxNSwgNSwgMjU0LCAxMjQsIAotICAgIDk2LCAyMjksIDIxNywgMjI2LCAxNjQsIDI1NCwgMTI0LCA5NiwgMjI5LCAyMTYsIDE1LCA1LCAyNTQsIDEyNCwgOTYsIDIyOSwgCi0gICAgMjE3LCAyMTgsIDIzMywgMTUsIDUsIDI1NCwgOTQsIDE1LCA1LCAyNTQsIDY3LCAxNSwgNSwgMjU0LCAzNSwgMTUsIDUsIAotICAgIDI1NCwgMzYsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDI1NCwgOCwgMTUsIDUsIDI1MywgMjM2LCAxNSwgNSwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyNTMsIDIzMiwgMjEwLCA0MCwgMjE2LCAyMzksIDE1LCA1LCAyNTMsIDIzMiwgMjM1LCAzLCAyMTYsIDIzOSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAyMTUsIDExNCwgMTE3LCAyMTUsIDExNCwgMjE1LCAxMTQsIDExNywgCi0gICAgMjE1LCAxMTQsIDIyNiwgMjEsIDE1LCA1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIAotICAgIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAyNDksIDEyNSwgMjUzLCAyMzIsIDExNywgMjUzLCAKLSAgICAyMzIsIDExNywgMjUzLCAyMzEsIDE1LCA1LCAyNTMsIDIyOSwgMTUsIDUsIDI1MywgMjI2LCAxNSwgNSwgMjUyLCAxOTEsIAotICAgIDE1LCA1LCAyNTIsIDE3NiwgMTUsIDUsIDI1MiwgMTcxLCAxNSwgNSwgMjUyLCAxNjcsIDE1LCA1LCAyNTIsIDE2MSwgMTUsIAotICAgIDUsIDI1MiwgMTYyLCAxMTcsIDI1MiwgMTYxLCAxNSwgNSwgMjUyLCAxNjAsIDE1LCA1LCAxMzAsIDE1LCA1LCAyNTIsIDE0MCwgCi0gICAgMTUsIDUsIDI1MiwgNiwgMTUsIDUsIDI1MiwgNywgMzAsIDYxLCAxNSwgNSwgMjUyLCA3LCAzMCwgMjQzLCA5NiwgMTUsIDUsIAotICAgIDI1MiwgNywgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNTEsIDEyNSwgMTUsIDUsIDI1MSwgMTI2LCAxMTcsIDI1MSwgCi0gICAgMTI2LCAyNTUsIDI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAxMjYsIDIxNCwgMTkwLCAxNSwgNSwgMjUxLCAxMjYsIAotICAgIDI0OSwgMTI1LCAyNTEsIDEyNSwgMTUsIDUsIDI1MSwgMTA5LCAxNSwgNSwgMjUxLCAxMTAsIDExNywgMjUxLCAxMDksIDE1LCAKLSAgICA1LCAyNTEsIDk4LCAxNSwgNSwgMjUxLCA5NywgMTUsIDUsIDI0OCwgMjIxLCAxNSwgNSwgMjQ4LCAyMTIsIDE1LCA1LCAyNDgsIAotICAgIDIxMywgMjM0LCA2NiwgMzAsIDExNSwgOTYsIDIzMSwgMTQ3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTQsIAotICAgIDEzMiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgCi0gICAgMzAsIDI1MiwgNiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCAKLSAgICA2NiwgMzAsIDI0MywgMTM2LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMjE0LCAKLSAgICAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjQyLCAxMDMsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDE2MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjM1LCAxNzksIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzNSwgMTgwLCA5NiwgMjMyLCA5OCwgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMywgMTM1LCAKLSAgICAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIAotICAgIDk5LCA5NiwgMjMxLCAxNDYsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgODQsIDE1LCA1LCAyNDgsIDIxMywgCi0gICAgMjM0LCA2NiwgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMjYsIDIyLCA5NiwgMjI2LCAKLSAgICAyMSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE5LCAxOTEsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIAotICAgIDIxNywgNzIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxNCwgMjMxLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAKLSAgICAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjQ4LCAxODcsIDE1LCA1LCAyNDgsIDE2NiwgMTUsIDUsIAotICAgIDI0OCwgMTY1LCAxNSwgNSwgMjQ4LCAxNjQsIDE1LCA1LCAyNDgsIDMsIDE1LCA1LCAyNDcsIDI0MiwgMTUsIDUsIDI0NywgCi0gICAgMjE3LCAxNSwgNSwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ3LCAyMTYsIDE1LCA1LCAyNDcsIDIwNiwgMTUsIAotICAgIDUsIDI0NywgMjA3LCAyMzQsIDIwOCwgMTA0LCAyNDIsIDk1LCAyNDcsIDE4NywgMTUsIDUsIDI0NywgMTg3LCAxNSwgNSwgCi0gICAgMjQ2LCA3OCwgMTUsIDUsIDI0NiwgNzksIDExNywgMjQ2LCA3OCwgMTUsIDUsIDI0NiwgNzksIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNDYsIDc5LCAyMjAsIDQ1LCAxNSwgNSwgMjQ2LCA3NiwgMTUsIDUsIDI0NiwgNzcsIDMwLCAyNDUsIDcyLCAxNSwgNSwgCi0gICAgMjQ2LCA3NSwgMTUsIDUsIDI0NiwgNzQsIDE1LCA1LCAyNDYsIDczLCAxNSwgNSwgMjQ2LCA3MiwgMTUsIDUsIDI0NiwgNjgsIAotICAgIDE1LCA1LCAyNDYsIDY2LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NiwgNjcsIDI0MiwgOTUsIDI0MiwgCi0gICAgOTQsIDE1LCA1LCAyNDYsIDY1LCAxNSwgNSwgMjQ2LCA1OCwgMTUsIDUsIDc1LCAxNSwgNSwgMTYwLCAzMCwgMjI2LCAyMSwgCi0gICAgMTUsIDUsIDE2MCwgMTE3LCAxNjAsIDIyNywgMTk1LCAxMTcsIDIyNywgMTk0LCAxNSwgNSwgMjQ1LCAyMzQsIDE1LCA1LCAKLSAgICAyNDUsIDIzNSwgMzAsIDExNSwgOTYsIDI0MiwgNDksIDk2LCAyNDgsIDIyMSwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDIyMiwgOCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0NSwgMjM1LCAzMCwgNzAsIDE1LCA1LCAyNDUsIDIxMSwgMTUsIDUsIAotICAgIDI0NSwgMjAwLCAxNSwgNSwgMjQ1LCAxNzQsIDE1LCA1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAKLSAgICAxMDQsIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjMxLCAKLSAgICA5MSwgMTUsIDUsIDI0NSwgMTUxLCAyNDksIDEyNSwgMjQ1LCAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjI2LCAxNjQsIDI0NSwgCi0gICAgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCA4OSwgMTUsIDUsIDI0NSwgODcsIDE1LCA1LCAKLSAgICAyNDUsIDcyLCAxNSwgNSwgMjQ1LCAxMCwgMTUsIDUsIDI0NSwgMTEsIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAxMTUsIAotICAgIDk2LCAyMzMsIDEwNCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAxMTUsIDk2LCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NSwgMTEsIDMwLCAxNjIsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzNCwgMjA4LCAyMTgsIDIzMywgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzMsIDIxNSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzMsIDEzNSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjE0LCAyMzAsIDE1LCAKLSAgICA1LCAyNDUsIDExLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDIsIDk0LCAxNSwgCi0gICAgNSwgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDExNSwgOTYsIDI0OCwgMjIyLCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDExNSwgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI1NSwgMjQsIDIxNiwgMjQwLCA5NiwgMjE3LCA5MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjU0LCAxMjMsIAotICAgIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTMsIDIzMCwgOTYsIDI0MywgCi0gICAgMTE4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUyLCAxNDEsIDk2LCAKLSAgICAyMDUsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MSwgOTksIDk2LCAyMDUsIAotICAgIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMjIxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDgsIDMsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0NywgMjE4LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ1LCAxNzQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTc1LCA5NiwgMjMzLCAxMzUsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDUsIDE1MSwgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxNCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAyMTIsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDI0MiwgMjEzLCA5NiwgNjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMTk4LCA5NiwgMjE4LCAKLSAgICA4MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCA0OSwgOTYsIDIzMiwgOTksIDk2LCAyNDUsIDcyLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDMxLCA5NiwgMjMzLCAxMzUsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MSwgMTgxLCA5NiwgMjMyLCAyNDEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MCwgMjE4LCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzUsIDE2NiwgOTYsIDI0MCwgCi0gICAgMjIzLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCA4OSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCA5MCwgOTYsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzMsIDIxNiwgOTYsIDI1NCwgMTIzLCAxNSwgNSwgMjQzLCAxMzQsIAotICAgIDMwLCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIyNywgMTk1LCAxMTcsIDIyNywgMTk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxOTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIyMiwgOCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIxLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgNjMsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgNjQsIDk2LCAyMTUsIDk4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDMwLCAxNSwgCi0gICAgNSwgMjQzLCAxMzQsIDMwLCAyMTgsIDQzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjQzLCAxMzQsIAotICAgIDMwLCA3MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNCwgMjIwLCA5NiwgCi0gICAgMjQ2LCA3OCwgMTUsIDUsIDI0MywgMTM0LCAxMTcsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIAotICAgIDEyOSwgMjQ5LCAxMjUsIDI0MywgMTI4LCAxNSwgNSwgMjQzLCAxMjYsIDE1LCA1LCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgCi0gICAgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTgsIDE1LCA1LCAyNDMsIDExOSwgMjQzLCAxMjcsIDExNywgCi0gICAgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDI0MywgMTE3LCAxNSwgNSwgMjQzLCAxMTUsIDE1LCA1LCAKLSAgICAyNDMsIDEwNiwgMTUsIDUsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQzLCAxMDUsIAotICAgIDExNywgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjQ5LCAxMjUsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCA5NiwgMTUsIAotICAgIDUsIDI0MywgOTUsIDE1LCA1LCAyNDMsIDkwLCAxNSwgNSwgMjQzLCAzNiwgMTUsIDUsIDI0MywgMzcsIDMwLCAyMzMsIDE5NiwgCi0gICAgMTUsIDUsIDI0MiwgMjE0LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3NSwgMTUsIDUsIDI0MiwgMjE1LCAzMCwgNzAsIDE1LCA1LCAKLSAgICAyNDIsIDIxNSwgMjQ5LCAxMjUsIDI0MiwgMjE0LCAxNSwgNSwgMjQyLCAyMTIsIDE1LCA1LCAyNDIsIDIxMywgMTE3LCAyNDIsIAotICAgIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAyNDksIDEyNSwgMjQyLCAyMTIsIDE1LCA1LCAyNDIsIDIwOSwgMTUsIDUsIDI0MiwgCi0gICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDE5NSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMTE1LCAKLSAgICA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyMzIsIDk5LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAKLSAgICAzMCwgMTkwLCAxNSwgNSwgMjQyLCAxOTIsIDE1LCA1LCAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAyNDksIDEyNSwgCi0gICAgMjQyLCAxOTAsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQyLCAxOTEsIDMwLCAyMTcsIDcyLCAKLSAgICAxNSwgNSwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExNCwgMjQ5LCAxMjUsIAotICAgIDI0MiwgMTEzLCAxNSwgNSwgMjQyLCAxMTEsIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQyLCAKLSAgICAxMTIsIDMwLCAyMzQsIDI0MywgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyNywgMTk0LCAKLSAgICAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMjIsIDksIDk2LCAyMTUsIDExMywgMTUsIDUsIDI0MiwgMTEyLCAyNDIsIDk0LCAxNSwgCi0gICAgNSwgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDExNSwgOTYsIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAKLSAgICAyMzMsIDE5NiwgMTUsIDUsIDI0MiwgMTA0LCAxMTcsIDI0MiwgMTA0LCAyMzIsIDkxLCAxNSwgNSwgMjQyLCA5OCwgMTUsIDUsIAotICAgIDI0MiwgOTYsIDE1LCA1LCAyNDIsIDk3LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0MiwgODgsIDE1LCA1LCAyNDIsIDg3LCAxNSwgCi0gICAgNSwgMjQyLCA4NCwgMTUsIDUsIDI0MiwgODMsIDE1LCA1LCAxNjIsIDE1LCA1LCAyNDIsIDQ5LCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDI0MiwgNDksIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDMwLCAxNSwgNSwgMjQxLCAxODAsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIAotICAgIDI1MywgMjMxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjUyLCAxNzYsIAotICAgIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0NywgMTg3LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNDMsIDEyNiwgMTUsIDUsIDI0MSwgCi0gICAgMTgxLCAzMCwgMjM0LCA4MSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDcwLCAxNSwgNSwgMjQwLCAyMjIsIDE1LCA1LCAyNDAsIDIxOCwgMTUsIAotICAgIDUsIDI0MCwgMjE5LCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDAsIDIxOSwgCi0gICAgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMzIsIDE5NywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjE0LCAKLSAgICAyMTksIDE1LCA1LCAyNDAsIDIxNSwgMTUsIDUsIDczLCAxNSwgNSwgMjQwLCAxNTQsIDYxLCAxNSwgNSwgMjQwLCAxMTUsIAotICAgIDE1LCA1LCAyMzYsIDYzLCAxNSwgNSwgMjM2LCA2NCwgMTE3LCAyMzYsIDY0LCAyNTEsIDk4LCAxNSwgNSwgMjM2LCA2NCwgCi0gICAgMTE3LCAyMzYsIDY0LCAyMTgsIDIzMywgMTUsIDUsIDIzNiwgMzgsIDE1LCA1LCAyMzYsIDM1LCAxNSwgNSwgMjM2LCAzNiwgCi0gICAgMjQ3LCAyNDIsIDE1LCA1LCAyMzYsIDM2LCAyMjMsIDM1LCAxNSwgNSwgMjM2LCAzNiwgMTE3LCAyMzYsIDM2LCAyMjAsIDE0LCAKLSAgICAxMTcsIDIyMCwgMTQsIDIxNCwgMjIwLCAxMTcsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDIzNiwgMjcsIDE1LCA1LCAyMzYsIDI4LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjM2LCAyNiwgMTUsIDUsIAotICAgIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDE3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzNiwgMTcsIDI0OSwgMTI1LCAyMzYsIDE2LCAKLSAgICAxNSwgNSwgMjM2LCAxNywgMjI2LCAxNjQsIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDE3LCAyMTgsIDIzMywgMTUsIDUsIDIzNiwgCi0gICAgOSwgMTUsIDUsIDIzNSwgMjU1LCAxNSwgNSwgMjM1LCAxNzksIDE1LCA1LCAyMzUsIDE2NSwgMTUsIDUsIDE3NiwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTQsIDI1NSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTUsIAotICAgIDAsIDk2LCAyMzMsIDIxNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTIsIAotICAgIDE3NiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAxMzAsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjUyLCA2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0NSwgODcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA3MiwgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDExOCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzNSwgMTMsIAotICAgIDMwLCAyNDMsIDk3LCA5NiwgMjIwLCAxMDEsIDk2LCA2MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDIxNCwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDE5MSwgOTYsIDIyMSwgMjMxLCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCAyNDksIDEyNSwgMjQyLCAxOTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAxMTMsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCA5MiwgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMiwgMjQxLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCA5MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIAotICAgIDkyLCA5NiwgMjQ2LCA3OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjQyLCAyMTQsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMxLCA5MiwgOTYsIDIxNywgMjIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMwLCAyMzEsIDk2LCAyMjcsIDE4OSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjUsIDEwOCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjIsIAotICAgIDE0MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIxLCAyMzEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIwLCA2MywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIAotICAgIDMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxOSwgMTgyLCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxOCwgNTEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE3LCA1MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAKLSAgICA3MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMTAsIDQ0LCAxNSwgNSwgMjM1LCAxMSwgMTUsIDUsIDIzNSwgMTIsIDI0OSwgMTI1LCAyMzUsIDExLCAxNSwgCi0gICAgNSwgMjM1LCA0LCAxNSwgNSwgMjM1LCAxLCAxNSwgNSwgMjM0LCAyNTUsIDE1LCA1LCAyMzQsIDI1NCwgMTUsIDUsIDIzNCwgCi0gICAgMjUyLCAxNSwgNSwgMjM0LCAyNTMsIDExNywgMjM0LCAyNTIsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIDIzNCwgMjQzLCAKLSAgICAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzNCwgMjM4LCAxNSwgNSwgMjM0LCAyMzksIDMwLCAyNTIsIDE3NiwgMTUsIAotICAgIDUsIDIzNCwgMjM5LCAyNDksIDEyNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzNiwgMTUsIDUsIDIzNCwgMjM1LCAxNSwgNSwgCi0gICAgMjM0LCAyMDcsIDE1LCA1LCAyMzQsIDIwOCwgMjMzLCAxMTgsIDMwLCAxMDQsIDExNywgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIAotICAgIDUsIDIzNCwgMjA4LCAxMTcsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAxNTcsIDE1LCA1LCAyMzQsIDkyLCAxNSwgNSwgMjM0LCA5MywgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjM0LCAKLSAgICA5MywgMzAsIDcwLCAxNSwgNSwgMjM0LCA5MywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCA4OSwgMTUsIDUsIDIzNCwgODEsIAotICAgIDE1LCA1LCAyMzQsIDY4LCAxNSwgNSwgMjM0LCA2NywgMTUsIDUsIDIzNCwgNjUsIDE1LCA1LCAyMzQsIDY2LCAxMTcsIDIzNCwgCi0gICAgNjUsIDE1LCA1LCAyMzMsIDIxNywgMTUsIDUsIDIzMywgMjE4LCAxMTcsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMzAsIDIzMywgCi0gICAgMjE4LCAxMTcsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjEzLCAxNSwgCi0gICAgNSwgMjMzLCAyMTQsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTIsIDE1LCA1LCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgCi0gICAgMjEwLCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAyMDgsIDE1LCA1LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTk3LCAyMjYsIAotICAgIDE2NCwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDE5MSwgMTUsIDUsIDIzMywgMTcyLCAxNSwgNSwgMjMzLCAxMzUsIDE1LCA1LCAKLSAgICAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0OCwgCi0gICAgMjIyLCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMTUsIDk2LCAyNDMsIDk2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAxMTUsIDk2LCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDI1NCwgMTIzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIzMiwgMjEwLCA0MCwgMjE2LCAyMzksIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0OCwgCi0gICAgMTY2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDUsIDE1MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyNDIsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MSwgMTgxLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIzNiwgMTcsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNiwgMTcsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMDksIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMjEwLCAKLSAgICA5NiwgMjQxLCAxODEsIDk2LCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMiwgMTk3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzIsIDg2LCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMCwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkxLCA5NiwgCi0gICAgMjQ1LCA4NywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkxLCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxOSwgMjI0LCA5NiwgMjE5LCAyMjMsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNywgODQsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIxNywgNzIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNywgMjMsIDk2LCAxMTUsIDk2LCAyMTgsIDg0LCA5NiwgMTk3LCAKLSAgICAxNSwgNSwgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgCi0gICAgMjMxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMjE4LCAyMzMsIDE1LCA1LCAyMzMsIDExNSwgMTUsIDUsIDIzMywgMTE2LCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIzMywgMTE2LCAzMCwgMjIwLCA2NCwgOTYsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE2LCAyNDIsIDk1LCAxMTcsIDIzMywgMTE2LCAyNDIsIDk1LCAyMjAsIDYzLCAxNSwgNSwgMjMzLCAxMTEsIDE1LCA1LCAKLSAgICAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDEwMiwgMTUsIDUsIDIzMywgCi0gICAgMTAzLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDEwMywgMzAsIDIzMywgMTk3LCA5NiwgMjIyLCAxNDAsIDE1LCA1LCAKLSAgICAyMzIsIDI0MSwgMTUsIDUsIDIzMiwgMjI2LCAxNSwgNSwgMjMyLCAyMTYsIDE1LCA1LCAyMzIsIDE5NywgMTUsIDUsIDIzMiwgCi0gICAgOTgsIDE1LCA1LCAyMzIsIDk5LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMzAsIAotICAgIDI1NCwgMTc4LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0NSwgNzIsIDE1LCAKLSAgICA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MywgMjE2LCAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0MSwgMTgxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM2LCAKLSAgICAxNiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzUsIDEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjM1LCAwLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzMsIDEzNiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMjcsIDIzNywgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTksIDE5MiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIxOSwgMTc0LCA5NiwgMjUxLCAxMjUsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjE1LCAxMTMsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDI0OSwgMTI1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjI2LCAKLSAgICAxNjQsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMTgsIDIzMywgMTUsIDUsIDIzMiwgOTcsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMzIsIDk1LCAxNSwgNSwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIDExNywgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIAotICAgIDIyNiwgMTY0LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMjIwLCA0NSwgMTUsIDUsIDIzMiwgODksIDE1LCA1LCAyMzIsIAotICAgIDg2LCAxNSwgNSwgMjMyLCA4NCwgMTUsIDUsIDIzMiwgODUsIDExNywgMjMyLCA4NCwgMTUsIDUsIDIzMiwgODUsIDExNywgCi0gICAgMjMyLCA4NSwgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMTg0LCAxNSwgNSwgMjMxLCAyMzksIDMwLCAyMTcsIDcyLCAKLSAgICAxNSwgNSwgMjMxLCAyMzksIDI0MiwgOTQsIDE1LCA1LCAyMzEsIDIzOCwgMTUsIDUsIDIzMSwgMjEwLCAxNSwgNSwgMjMxLCAKLSAgICAxNjYsIDE1LCA1LCAyMzEsIDE0NywgMTUsIDUsIDIzMSwgMTQ2LCAxNSwgNSwgMjMxLCA5MSwgMTUsIDUsIDIzMSwgNDcsIAotICAgIDE1LCA1LCAyMzAsIDIzMCwgMTUsIDUsIDIzMCwgMTg4LCAxNSwgNSwgMjMwLCAxMDIsIDE1LCA1LCAyMzAsIDEwMywgMTE3LCAKLSAgICAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgOTMsIDE1LCA1LCAyMzAsIDk0LCAyNDIsIDk0LCAxNSwgNSwgMjMwLCA3OCwgMTUsIDUsIAotICAgIDIzMCwgNjQsIDE1LCA1LCAyMzAsIDYxLCAxNSwgNSwgMjMwLCA2MiwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2MiwgMzAsIDIzMywgCi0gICAgMTk2LCAxNSwgNSwgMjMwLCA2MiwgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2MiwgMTE3LCAyMzAsIDYxLCAxNSwgNSwgCi0gICAgMjMwLCA2MiwgMTE3LCAyMzAsIDYyLCAzMCwgMTE1LCA5NiwgMTk3LCAxNSwgNSwgMjMwLCA2MiwgMjQ5LCAxMjUsIDIzMCwgCi0gICAgNjEsIDE1LCA1LCAyMzAsIDU5LCAxNSwgNSwgMjMwLCA2MCwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDExNSwgOTYsIAotICAgIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDMwLCAyNDgsIDMsIDE1LCA1LCAyMzAsIDYwLCAyNDIsIDk0LCAxNSwgNSwgMTk3LCAKLSAgICAxNSwgNSwgMjI5LCAyMjcsIDE1LCA1LCAyMjksIDIxNiwgMTUsIDUsIDIyOSwgMjE3LCAyMzUsIDE5MiwgMTUsIDUsIDIyOSwgCi0gICAgMjE3LCAzMCwgMjE5LCAyMjYsIDIxNiwgMjM5LCAxNSwgNSwgMjI5LCAyMTcsIDIyNiwgMTY0LCAyMjksIDIxNiwgMTUsIDUsIAotICAgIDIyOSwgMjE1LCAxNSwgNSwgMjI5LCAyMDgsIDIyNywgMTgwLCAxNSwgNSwgMjI5LCAyMDcsIDE1LCA1LCAyMjksIDIwNiwgCi0gICAgMTUsIDUsIDIyOSwgMTA3LCAxNSwgNSwgMjI5LCAxMDgsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTA4LCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMjksIDEwOCwgMjIwLCA0NSwgMTUsIDUsIDIyOCwgMjMzLCAxNSwgNSwgMjI4LCAyMzQsIDMwLCA3NSwgMTUsIAotICAgIDUsIDIyOCwgMjMyLCAxNSwgNSwgMjI4LCAyMDMsIDE1LCA1LCAyMjgsIDIwNCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgCi0gICAgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCA5NywgOTYsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIyOCwgMjAxLCAKLSAgICAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTQsIDEyMywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIAotICAgIDIwMiwgMzAsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgCi0gICAgMjI4LCAyMDIsIDMwLCAyMzEsIDkyLCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIDk2LCAxMTUsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCAKLSAgICA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIDk2LCAyNTMsIDIzMiwgOTYsIDI1MywgMjMxLCAKLSAgICAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMTQsIAotICAgIDEyNiwgMTUsIDUsIDIyOCwgMTkwLCAxNSwgNSwgMjI3LCAyMzcsIDE1LCA1LCAyMjcsIDIxMCwgMTUsIDUsIDIyNywgMTk0LCAKLSAgICAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIAotICAgIDIzMSwgMTQ3LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgCi0gICAgMTE2LCAzMCwgMjIyLCA5LCAxMTcsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyNywgMTk1LCAKLSAgICAyMzMsIDExNiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI3LCAxOTUsIDIxNiwgMjM5LCAxNSwgNSwgMjI3LCAxOTUsIDExNywgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIDIyNywgMTk0LCAxNSwgNSwgMjI3LCAxOTUsIDI0OSwgMTI1LCAKLSAgICAyMjcsIDE5NSwgMjMzLCAxMTYsIDExNywgMjMzLCAxMTUsIDE1LCA1LCAyMjcsIDE4OSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIAotICAgIDI0LCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIyNywgMTkwLCAKLSAgICAyNTUsIDI0LCAzMCwgMjQ2LCA3NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjU1LCAyNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzNCwgCi0gICAgMjU1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMzMsIDEzNSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAKLSAgICAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIxOSwgMTcxLCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNywgMTkwLCAyMzQsIDY2LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAKLSAgICAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDcsIDcwLCAxNSwgNSwgMTkwLCAxNSwgNSwgMjI2LCA4MCwgMTUsIDUsIDIyNiwgNDcsIAotICAgIDE1LCA1LCAyMjYsIDIxLCAxNSwgNSwgMjI1LCAxNjEsIDE1LCA1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgCi0gICAgNjEsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI1NSwgMjUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI1MiwgNiwgMTUsIDUsIAotICAgIDIyNSwgMTA5LCAzMCwgMjUxLCAxMjUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDc1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3MywgCi0gICAgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjQwLCAxMTUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDcwLCAxNSwgNSwgMjI1LCAxMDksIAotICAgIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNSwgMTA5LCAyNDksIDEyNSwgMjI1LCAxMDgsIDE1LCA1LCAyMjUsIDUzLCAxNSwgNSwgCi0gICAgMjI1LCA1NCwgMzAsIDIzNCwgMjM4LCAxNSwgNSwgMjI1LCA1NCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjI1LCA1NCwgMzAsIAotICAgIDIxMCwgMTE2LCAxNSwgNSwgMjI1LCA1NCwgMjI2LCAxNjQsIDIyNSwgNTMsIDE1LCA1LCAyMDUsIDE1LCA1LCAyMjMsIDE4MiwgCi0gICAgMTUsIDUsIDIyMywgMzUsIDE1LCA1LCAyMjIsIDE0MCwgMTUsIDUsIDIwNiwgMTUsIDUsIDIyMiwgMjIsIDIyNywgMTgwLCAKLSAgICAxNSwgNSwgMjIyLCAyMSwgMTUsIDUsIDIyMiwgMjIsIDMwLCA2MSwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyNDYsIDc4LCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMTYyLCAxNSwgNSwgMjIyLCAyMiwgMzAsIAotICAgIDIzNCwgMjQyLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIzMiwgODQsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMjIsIDIyLCAKLSAgICAzMCwgMjIyLCA4LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIyMCwgMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE3LCA5MywgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDIyNSwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDEyNiwgCi0gICAgMTUsIDUsIDIyMiwgMjIsIDExNywgMjIyLCAyMSwgMTUsIDUsIDIyMiwgMjIsIDI0MiwgOTQsIDE1LCA1LCAyMjIsIDgsIDE1LCAKLSAgICA1LCAyMjIsIDksIDIzMywgMTE4LCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMjEsIDIzOSwgMTUsIDUsIDIyMSwgMjMxLCAxNSwgCi0gICAgNSwgMjIwLCAxMDIsIDE1LCA1LCAyMjAsIDEwMCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDEwMSwgCi0gICAgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyNDIsIDE5MCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjI5LCAKLSAgICAxMDcsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxOSwgMjIzLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMTUsIDk4LCAxNSwgNSwgCi0gICAgMjIwLCAxMDEsIDMwLCA3MCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMjAsIDk5LCAxNSwgCi0gICAgNSwgMjIwLCA5NywgMTUsIDUsIDIyMCwgNzgsIDE1LCA1LCAyMjAsIDYzLCAxNSwgNSwgMjIwLCA2NCwgMjQwLCAyMjIsIDE1LCAKLSAgICA1LCAyMjAsIDY0LCAxMTcsIDIyMCwgNjQsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIAotICAgIDE1LCA1LCAyMjAsIDY0LCAxMTcsIDIyMCwgNjQsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjQzLCA5NywgMTE3LCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjIwLCA1NiwgMTUsIDUsIDIyMCwgNTEsIDE1LCA1LCAyMjAsIDQ4LCAxNSwgNSwgMjIwLCA0NywgMTUsIAotICAgIDUsIDIyMCwgNDQsIDE1LCA1LCAyMjAsIDMwLCAxNSwgNSwgMjIwLCAzMSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAzMSwgMzAsIAotICAgIDIzNiwgMTYsIDE1LCA1LCAyMjAsIDI0LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI1MiwgCi0gICAgMTYxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI1MSwgMTA5LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI0NywgMjA2LCAxNSwgNSwgCi0gICAgMjIwLCAyNSwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAKLSAgICAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMywgMTkxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMwLCA5MywgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjAsIAotICAgIDE4LCAxNSwgNSwgMjIwLCAxMywgMTUsIDUsIDIyMCwgMTQsIDIxNiwgMjM5LCAxNSwgNSwgMjIwLCAxNCwgMTE3LCAyMjAsIAotICAgIDE0LCAyNTEsIDk5LCAxMTcsIDI1MSwgOTgsIDE1LCA1LCAyMjAsIDksIDE1LCA1LCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCi0gICAgMjI2LCAxMTcsIDIzNSwgMTkzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAyMjIsIDE1LCA1LCAKLSAgICAyMTksIDE5MSwgMTUsIDUsIDIxOSwgMTkyLCAyNDIsIDk0LCAxNSwgNSwgMjE5LCAxODIsIDE1LCA1LCAyMTksIDE4MCwgMTUsIAotICAgIDUsIDIxOSwgMTgxLCAxMTcsIDIxOSwgMTgxLCAyMTksIDIyMywgMTUsIDUsIDIxOSwgMTczLCAxNSwgNSwgMjE5LCAxNzEsIAotICAgIDE1LCA1LCAyMTgsIDgzLCAxNSwgNSwgMjE4LCA4NCwgMTE3LCAyMTgsIDgzLCAxNSwgNSwgMjE4LCA1NCwgMTUsIDUsIDIxOCwgCi0gICAgNTMsIDE1LCA1LCAyMTgsIDUxLCAxNSwgNSwgMjE4LCA0MywgMTUsIDUsIDIxOCwgNDIsIDE1LCA1LCAyMTgsIDE3LCAxNSwgCi0gICAgNSwgMjE4LCAxNiwgMTUsIDUsIDIxNywgMTA1LCAxNSwgNSwgMjE3LCAxMDYsIDI1MywgMjE2LCAxNSwgNSwgMjE3LCAxMDYsIAotICAgIDMwLCAyNDEsIDE4MCwgMTUsIDUsIDIxNywgMTA2LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMTcsIDEwNiwgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNywgOTMsIDE1LCA1LCAyMTcsIDk0LCAxMTcsIDIxNywgOTQsIDIyOCwgMjM0LCAxMTcsIDIyOCwgMjM0LCAKLSAgICAyNDcsIDE4OCwgMTE3LCAyNDcsIDE4NywgMTUsIDUsIDIxNywgOTQsIDIxOCwgMjMzLCAxNSwgNSwgMjE3LCA4NCwgMTUsIDUsIAotICAgIDEyOSwgMzAsIDI1MiwgNiwgMTUsIDUsIDEyOSwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMTI5LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDEyOSwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMTI5LCAzMCwgMjE1LCAxMTMsIDE1LCA1LCAxMjksIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNywgNzIsIDE1LCA1LCAyMTcsIDUwLCAxNSwgNSwgMjE3LCAyMiwgMTUsIDUsIDIxNywgMjMsIDI0MiwgOTQsIAotICAgIDE1LCA1LCAyMTYsIDExNywgMTUsIDUsIDIxNiwgMTE4LCAyMTYsIDIzOSwgMTUsIDUsIDIxNiwgOTAsIDE1LCA1LCAyMTYsIAotICAgIDcyLCAxNSwgNSwgMjE2LCA3MywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMTYsIDczLCAxMTcsIDIxNiwgNzIsIDE1LCA1LCAKLSAgICAyMTYsIDczLCAxMTcsIDIxNiwgNzMsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIAotICAgIDE1LCA1LCAyMTUsIDExOCwgMTUsIDUsIDIxNSwgMTEzLCAxNSwgNSwgMjE1LCAxMTEsIDE1LCA1LCAyMTUsIDEwOCwgMTUsIAotICAgIDUsIDIxNSwgOTgsIDE1LCA1LCAyMTUsIDk5LCAxMTcsIDIxNSwgOTksIDIxMCwgMTE3LCAxMTcsIDIxMCwgMTE2LCAxNSwgNSwgCi0gICAgNzAsIDE1LCA1LCAxMDQsIDI0MiwgMTAzLCAxNSwgNSwgMTA0LCAxMDQsIDcwLCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMjI2LCAKLSAgICA5MCwgMTE3LCAyMjYsIDkwLCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMTgsIDE4LCAKLSAgICAxMTcsIDIxOCwgMTcsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAxMDQsIDIyMywgNDksIDExNywgMTA0LCAyMjMsIDQ4LCAxNSwgCi0gICAgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTkxLCAKLSAgICAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMTQsIAotICAgIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAKLSAgICAxMDQsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDIyMCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ1LCAxNSwgNSwgCi0gICAgMjE0LCAyMjAsIDIyMCwgNDYsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIxNCwgMjE1LCAxNSwgNSwgMjE0LCAxOTcsIDE1LCA1LCAKLSAgICAyMTQsIDE5OCwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzEsIDkyLCA5NiwgMjQ4LCAyMjEsIDE1LCAKLSAgICA1LCAyMTQsIDE5OCwgMzAsIDIyMCwgMTAwLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCA3MCwgMTUsIDUsIDIxNCwgMTk2LCAxNSwgCi0gICAgNSwgMjE0LCAxOTIsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAxOTAsIDE1LCAKLSAgICA1LCAyMTQsIDE5MCwgMTUsIDUsIDIxNCwgMTkxLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgCi0gICAgMjQ5LCAxMjUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDUsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMTE1LCA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAKLSAgICAyMTQsIDE0OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIAotICAgIDIyNywgMTk0LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDYsIDE1LCA1LCAyMTQsIDE0NywgCi0gICAgMTUsIDUsIDIxNCwgMTQ0LCAxNSwgNSwgMjE0LCAxNDMsIDE1LCA1LCAyMTQsIDEzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgNjEsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI1MywgMjI2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMzAsIDE1LCA1LCAyMTQsIAotICAgIDE0MCwgMzAsIDI0NiwgNjgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyNDMsIDExOCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyNDMsIDk2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDIsIDExMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTYyLCAxNSwgNSwgCi0gICAgMjE0LCAxNDAsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMzUsIDE2NSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIxNCwgMTQwLCAzMCwgMjMwLCAxODgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE5MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE5LCAxODAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNSwgMTE4LCAKLSAgICAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMDQsIDk2LCAyNDIsIDEwMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzOCwgMzAsIDcwLCAKLSAgICAxNSwgNSwgMjE0LCAxMjYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDYxLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDIxNywgCi0gICAgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMTQsIAotICAgIDEyMiwgMTUsIDUsIDIxNCwgMTI1LCAxNSwgNSwgMjE0LCAxMjMsIDE1LCA1LCAyMTQsIDExOSwgMTUsIDUsIDIxNCwgMTA4LCAKLSAgICAxNSwgNSwgMjE0LCAxMDksIDMwLCAyMzQsIDIwNywgMTUsIDUsIDIxNCwgMTA3LCAxNSwgNSwgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICAyMTAsIDExNywgMjE2LCAyMzksIDE1LCA1LCAyMTAsIDExNywgOTIsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxMCwgMTEzLCAKLSAgICAxNSwgNSwgMjEwLCAxMDYsIDE1LCA1LCAyMTAsIDkzLCAxNSwgNSwgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDUsIDExNywgCi0gICAgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDMsIDE1LCA1LCAyMTAsIDQxLCAxNSwgNSwgMjEwLCA0MiwgMjM1LCAzLCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDIxMCwgMzYsIDE1LCA1LCAyMTAsIDI4LCAxNSwgNSwgMjEwLCAxMywgMTUsIDUsIDIxMCwgMTEsIDE1LCAKLSAgICA1LCAyMTAsIDEyLCAzMCwgNjEsIDE1LCA1LCAyMTAsIDEwLCAxNSwgNSwgMjEwLCA5LCAxNSwgMTMyLCA1LCAxMTMsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTMsIDIzMSwgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNTMsIAotICAgIDIzMSwgMTUsIDEzMiwgNSwgMTM0LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjQ3LCAxODcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyMCwgCi0gICAgMTIyLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjQ3LCAKLSAgICAxODcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDcwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCA3MCwgMTUsIDEzMiwgNSwgMjE5LCAKLSAgICAxMjUsIDcwLCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgNzAsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCA3MCwgMTUsIDEzMiwgNSwgCi0gICAgMjI4LCAyMDAsIDcwLCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzOCwgMTUsIAotICAgIDEzMiwgNSwgMTM0LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAKLSAgICAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDI0MywgMzgsIAotICAgIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgCi0gICAgMTIzLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCAzNSwgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTEzLCAKLSAgICAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OSwgMjE0LCAxMiwgMTcsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIAotICAgIDIxOSwgMTI1LCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMjMsIDIyMCwgNzMsIDE1LCAKLSAgICAxMzIsIDUsIDExMywgMjIwLCA3MywgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzQsIAotICAgIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMjAsIDczLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgMjQzLCAxMTksIDk2LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCA3OSwgMzAsIAotICAgIDI0MywgMTE5LCA5NiwgMjMwLCAxODgsIDE1LCAxMzIsIDUsIDEyMywgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIAotICAgIDk1LCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NiwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDI0NCwgMTEsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDEzNCwgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgMjQ1LCA3NCwgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDcxLCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTUsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgCi0gICAgMjE4LCA2MSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTgsIDI1MywgMTU4LCAxNSwgCi0gICAgMTMyLCA1LCAyMTksIDEyNSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjUzLCAyMjgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIAotICAgIDEyLCAyNDQsIDIwLCAyMzYsIDgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDEwLCA2MSwgCi0gICAgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDI1MywgMTU4LCAxNSwgMTMyLCA1LCAKLSAgICAyNDUsIDE5MywgMjE0LCAxMiwgMjQ0LCAyMCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIAotICAgIDIwLCAyMTQsIDEyMCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjQsIDE1LCAxMzIsIAotICAgIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDIzLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgCi0gICAgMjQ0LCAyMCwgMjM2LCAyMiwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjUsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAxMTMsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDIzMiwgMjE2LCAyMzksIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUzLCAyMzIsIAotICAgIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgCi0gICAgMTUwLCAxNSwgMTMyLCA1LCAxMTMsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAKLSAgICAyNDQsIDExLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUyLCAxNTEsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUyLCAxNTEsIDIxNCwgMTIsIDE3LCAxNSwgCi0gICAgMTMyLCA1LCAyMjgsIDIxMCwgMTUsIDEzMiwgNSwgMjI4LCAyMTEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3MCwgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyNDUsIDcwLCAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgCi0gICAgMTEzLCAyMTYsIDE2NywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIxOSwgMTE0LCAyNDcsIDE4NywgMTUsIAotICAgIDEzMiwgNSwgMTIzLCAyMTYsIDE2OSwgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjcsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDYxLCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgMTg5LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgCi0gICAgMTIzLCAyMjQsIDIyLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgNTUsIDI1MywgMjE5LCAxMjMsIDIxOSwgMTE1LCAxNSwgMTMyLCAKLSAgICA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjI0LCAyMSwgMTUsIDIyNCwgMTQxLCA1LCA1NSwgMjUzLCAyMTksIDIxMSwgMjA5LCAKLSAgICAyNDcsIDE3MiwgMTUsIDIyNCwgMTQxLCA1LCA2NywgMjQ5LCAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMjI2LCAxNSwgMjI0LCAxNDEsIDUsIDI0NywgMjU1LCAyMTUsIDIyMSwgMTIsIDEzLCAyNTUsIDE1NSwgMTIsIDEzLCAyNTUsIAotICAgIDE1NCwgMTIsIDEzLCAyNTUsIDE1MywgMTIsIDEzLCAyNTUsIDE1MiwgMTIsIDEzLCAyNTUsIDE1MSwgMTIsIDEzLCAyNTUsIAotICAgIDE1MCwgMTIsIDEzLCAyNTUsIDE0OSwgMTIsIDEzLCAyNTUsIDE0OCwgMTIsIDEzLCAyNTUsIDE0NywgMTIsIDEzLCAyNTUsIAotICAgIDE0NiwgMTIsIDEzLCAyNTUsIDE0NSwgMTIsIDEzLCAyNTUsIDE0NCwgMTIsIDEzLCAyNTUsIDE0MywgMTIsIDEzLCAyNTUsIAotICAgIDE0MiwgMTIsIDEzLCAyNTUsIDE0MSwgMTIsIDEzLCAyNTUsIDE0MCwgMTIsIDEzLCAyNTUsIDEzOSwgMTIsIDEzLCAyNTUsIAotICAgIDEzOCwgMTIsIDEzLCAyNTUsIDEzNywgMTIsIDEzLCAyNTUsIDEzNiwgMTIsIDEzLCAyNTUsIDEzNSwgMTIsIDEzLCAyNTUsIAotICAgIDEzNCwgMTIsIDEzLCAyNTUsIDEzMywgMTIsIDEzLCAyNTUsIDEzMiwgMTIsIDEzLCAyNTUsIDEzMSwgMTIsIDEzLCAyNTUsIAotICAgIDEzMCwgMTIsIDEzLCAyNTUsIDEyOSwgMTIsIDEzLCAyNTUsIDEyOCwgMTIsIDEzLCAyNTUsIDEyNywgMTIsIDEzLCAyNTUsIAotICAgIDEyNiwgMTIsIDEzLCAyNTUsIDEyNSwgMTIsIDEzLCAyNTUsIDEyNCwgMTIsIDEzLCAyNTUsIDEyMywgMTIsIDEzLCAyNTUsIAotICAgIDEyMiwgMTIsIDEzLCAyNTUsIDEyMSwgMTIsIDEzLCAyNTUsIDEyMCwgMTIsIDEzLCAyNTUsIDExOSwgMTIsIDEzLCAyNTUsIAotICAgIDExOCwgMTIsIDEzLCAyNTUsIDExNywgMTIsIDEzLCAyNTUsIDExNiwgMTIsIDEzLCAyNTUsIDExNSwgMTIsIDEzLCAyNTUsIAotICAgIDExNCwgMTIsIDEzLCAyNTUsIDExMywgMTIsIDEzLCAyNTUsIDExMiwgMTIsIDEzLCAyNTUsIDExMSwgMTIsIDEzLCAyNTUsIAotICAgIDExMCwgMTIsIDEzLCAyNTUsIDEwOSwgMTIsIDEzLCAyNTUsIDEwOCwgMTIsIDEzLCAyNTUsIDEwNywgMTIsIDEzLCAyNTUsIAotICAgIDEwNiwgMTIsIDEzLCAyNTUsIDEwNSwgMTIsIDEzLCAyNTUsIDEwNCwgMTIsIDEzLCAyNTUsIDEwMywgMTIsIDEzLCAyNTUsIAotICAgIDEwMiwgMTIsIDEzLCAyNTUsIDEwMSwgMTIsIDEzLCAyNTUsIDEwMCwgMTIsIDEzLCAyNTUsIDk5LCAxMiwgMTMsIDI1NSwgCi0gICAgOTgsIDEyLCAxMywgMjU1LCA5NywgMTIsIDEzLCAyNTUsIDk2LCAxMiwgMTMsIDI1NSwgOTUsIDEyLCAxMywgMjU1LCA5NCwgCi0gICAgMTIsIDEzLCAyNTUsIDkzLCAxMiwgMTMsIDI1NSwgOTIsIDEyLCAxMywgMjU1LCA5MSwgMTIsIDEzLCAyNTUsIDkwLCAxMiwgCi0gICAgMTMsIDI1NSwgODksIDEyLCAxMywgMjU1LCA4OCwgMTIsIDEzLCAyNTUsIDg3LCAxMiwgMTMsIDI1NSwgODYsIDEyLCAxMywgCi0gICAgMjU1LCA4NSwgMTIsIDEzLCAyNTUsIDg0LCAxMiwgMTMsIDI1NSwgODMsIDEyLCAxMywgMjU1LCA4MiwgMTIsIDEzLCAyNTUsIAotICAgIDgxLCAxMiwgMTMsIDI1NSwgODAsIDEyLCAxMywgMjU1LCA3OSwgMTIsIDEzLCAyNTUsIDc4LCAxMiwgMTMsIDI1NSwgNzcsIAotICAgIDEyLCAxMywgMjU1LCA3NiwgMTIsIDEzLCAyNTMsIDE1NiwgMTIsIDEzLCAyNTMsIDE1NCwgMTIsIDEzLCAyNTMsIDE1MiwgCi0gICAgMTIsIDEzLCAyNTMsIDE1MCwgMTIsIDEzLCAyNTMsIDE0OCwgMTIsIDEzLCAyNTMsIDE0NywgMTIsIDEzLCAyNTMsIDE0NSwgCi0gICAgMTIsIDEzLCAyNTMsIDE0MywgMTIsIDEzLCAyNTMsIDE0MSwgMTIsIDEzLCAyNTMsIDEzOSwgMTIsIDEzLCAyNTEsIDYyLCAKLSAgICAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAKLSAgICAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAKLSAgICAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgCi0gICAgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgCi0gICAgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIDEyLCAxMywgMjUxLCA0MiwgMTIsIDEzLCAyNTEsIDQxLCAxMiwgCi0gICAgMTMsIDI1MSwgNDAsIDEyLCAxMywgMjUxLCAzOSwgMTIsIDEzLCAyNTEsIDM4LCAxMiwgMTMsIDI1MSwgMzcsIDEyLCAxMywgCi0gICAgMjUxLCAzNiwgMTIsIDEzLCAyNTEsIDM1LCAxMiwgMTMsIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIAotICAgIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIAotICAgIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIAotICAgIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIAotICAgIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCAKLSAgICA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAKLSAgICAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAKLSAgICAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAKLSAgICAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgCi0gICAgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgCi0gICAgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgCi0gICAgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgCi0gICAgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIAotICAgIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIAotICAgIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAKLSAgICAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAKLSAgICAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAKLSAgICAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgMjQ4LCAyMzEsIDEyLCAxMywgMjQ4LCAyMzAsIDEyLCAxMywgMjQ4LCAKLSAgICAyMjksIDEyLCAxMywgMjQ4LCAyMjgsIDEyLCAxMywgMjQ4LCAyMjcsIDEyLCAxMywgMjQ4LCAyMjYsIDEyLCAxMywgMjQ4LCAKLSAgICAyMjUsIDEyLCAxMywgMjQ4LCAyMjQsIDEyLCAxMywgMjQ2LCAyMywgMTIsIDEzLCAyNDYsIDIyLCAxMiwgMTMsIDI0NiwgMjEsIAotICAgIDEyLCAxMywgMjQ2LCAyMCwgMTIsIDEzLCAyNDYsIDE5LCAxMiwgMTMsIDI0NiwgMTgsIDEyLCAxMywgMjQ2LCAxNywgMTIsIAotICAgIDEzLCAyNDYsIDE2LCAxMiwgMTMsIDI0NiwgMTUsIDEyLCAxMywgMjQ2LCAxNCwgMTIsIDEzLCAyNDYsIDEzLCAxMiwgMTMsIAotICAgIDI0NiwgMTIsIDEyLCAxMywgMjQ2LCAxMSwgMTIsIDEzLCAyNDYsIDEwLCAxMiwgMTMsIDI0NiwgOSwgMTIsIDEzLCAyNDYsIAotICAgIDgsIDEyLCAxMywgMjQ2LCA3LCAxMiwgMTMsIDI0NiwgNiwgMTIsIDEzLCAyNDYsIDUsIDEyLCAxMywgMjQ2LCA0LCAxMiwgCi0gICAgMTMsIDI0NiwgMywgMTIsIDEzLCAyNDYsIDIsIDEyLCAxMywgMjQ2LCAxLCAxMiwgMTMsIDI0NiwgMCwgMTIsIDEzLCAyNDUsIAotICAgIDI1NSwgMTIsIDEzLCAyNDUsIDI1NCwgMTIsIDEzLCAyNDUsIDI1MywgMTIsIDEzLCAyNDUsIDI1MiwgMTIsIDEzLCAyNDUsIAotICAgIDI1MSwgMTIsIDEzLCAyNDUsIDI1MCwgMTIsIDEzLCAyNDUsIDI0OSwgMTIsIDEzLCAyNDUsIDI0OCwgMTIsIDEzLCAyNDUsIAotICAgIDI0NywgMTIsIDEzLCAyNDUsIDI0NiwgMTIsIDEzLCAyNDUsIDI0NSwgMTIsIDEzLCAyNDUsIDI0NCwgMTIsIDEzLCAyNDUsIAotICAgIDI0MywgMTIsIDEzLCAyNDUsIDI0MiwgMTIsIDEzLCAyNDUsIDI0MSwgMTIsIDEzLCAyNDUsIDI0MCwgMTIsIDEzLCAyNDUsIAotICAgIDIzOSwgMTIsIDEzLCAyNDUsIDIzOCwgMTIsIDEzLCAyNDUsIDIzNywgMTIsIDEzLCAyNDUsIDIzNiwgMTIsIDEzLCAyNDUsIAotICAgIDUsIDEyLCAxMywgMjQ1LCA0LCAxMiwgMTMsIDI0NSwgMywgMTIsIDEzLCAyNDUsIDIsIDEyLCAxMywgMjQ1LCAxLCAxMiwgCi0gICAgMTMsIDI0NSwgMCwgMTIsIDEzLCAyNDQsIDI1NSwgMTIsIDEzLCAyNDQsIDI1NCwgMTIsIDEzLCAyNDQsIDI1MywgMTIsIDEzLCAKLSAgICAyNDQsIDI1MiwgMTIsIDEzLCAyNDQsIDI1MSwgMTIsIDEzLCAyNDQsIDI1MCwgMTIsIDEzLCAyNDQsIDI0OSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0OCwgMTIsIDEzLCAyNDQsIDI0NywgMTIsIDEzLCAyNDQsIDI0NiwgMTIsIDEzLCAyNDQsIDI0NSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0NCwgMTIsIDEzLCAyNDQsIDI0MywgMTIsIDEzLCAyNDQsIDI0MiwgMTIsIDEzLCAyNDQsIDI0MSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0MCwgMTIsIDEzLCAyNDQsIDIzOSwgMTIsIDEzLCAyNDQsIDIzOCwgMTIsIDEzLCAyNDQsIDIzNywgMTIsIDEzLCAKLSAgICAyNDQsIDIzNiwgMTIsIDEzLCAyNDQsIDIzNSwgMTIsIDEzLCAyNDQsIDIzNCwgMTIsIDEzLCAyNDQsIDIzMywgMTIsIDEzLCAKLSAgICAyNDQsIDIzMiwgMTIsIDEzLCAyNDQsIDIzMSwgMTIsIDEzLCAyNDQsIDIzMCwgMTIsIDEzLCAyNDQsIDIyOSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyOCwgMTIsIDEzLCAyNDQsIDIyNywgMTIsIDEzLCAyNDQsIDIyNiwgMTIsIDEzLCAyNDQsIDIyNSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyNCwgMTIsIDEzLCAyNDQsIDIyMywgMTIsIDEzLCAyNDQsIDIyMiwgMTIsIDEzLCAyNDQsIDIyMSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyMCwgMTIsIDEzLCAyNDQsIDIxOSwgMTIsIDEzLCAyNDQsIDIxOCwgMTIsIDEzLCAyNDQsIDIxNywgMTIsIDEzLCAKLSAgICAyNDQsIDIxNiwgMTIsIDEzLCAyNDQsIDIxNSwgMTIsIDEzLCAyNDQsIDIxNCwgMTIsIDEzLCAyNDQsIDIxMywgMTIsIDEzLCAKLSAgICAyNDQsIDIxMiwgMTIsIDEzLCAyNDQsIDIxMSwgMTIsIDEzLCAyNDQsIDIxMCwgMTIsIDEzLCAyNDQsIDIwOSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwOCwgMTIsIDEzLCAyNDQsIDIwNywgMTIsIDEzLCAyNDQsIDIwNiwgMTIsIDEzLCAyNDQsIDIwNSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwNCwgMTIsIDEzLCAyNDQsIDIwMywgMTIsIDEzLCAyNDQsIDIwMiwgMTIsIDEzLCAyNDQsIDIwMSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwMCwgMTIsIDEzLCAyNDQsIDE5OSwgMTIsIDEzLCAyNDQsIDE5OCwgMTIsIDEzLCAyNDQsIDE5NywgMTIsIDEzLCAKKyAgICAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgCisgICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0MSwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDI0MCwgMTYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCisgICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgCisgICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgCisgICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgCisgICAgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIAorICAgIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIAorICAgIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAKKyAgICAwLCAyMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIAorICAgIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIAorICAgIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAKKyAgICAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDIxMSwgMTE4LCAKKyAgICAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAyMTEsIDExOCwgMiwgMTg0LCA3LCA2LCAxLCAyMzAsIDIyOCwgMjMyLCAxOTEsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMzIsIAorICAgIDE5MSwgNywgNiwgMSwgMjMwLCAyMjgsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE4LCAyLCAyMzIsIDEyOSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1NywgCisgICAgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDEwOSwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgCisgICAgNCwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAKKyAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjEsIDI2LCAKKyAgICA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIAorICAgIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1NywgMjYsIDYsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgCisgICAgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgCisgICAgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAKKyAgICAxNjEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgCisgICAgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYxLCAKKyAgICAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAKKyAgICAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIAorICAgIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICAxMDksIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAKKyAgICAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE0LCAxMywgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMTQsIDEzLCAyNiwgNCwgCisgICAgMSwgMjI2LCAyMDQsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIAorICAgIDE1OCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIAorICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNDUsIDcyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgCisgICAgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAKKyAgICAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAKKyAgICAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgCisgICAgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgCisgICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIzMSwgMjM3LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAKKyAgICAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE3MCwgMjYsIDIzNCwgOCwgMjYsIDIyNCwgCisgICAgMTcwLCAyNiwgMjI0LCAxNTcsIDI2LCAyMjUsIDE3OCwgMjYsIDI0OCwgNCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI1LCAxNzgsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE3MCwgMjYsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIzMSwgMjM3LCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTMsIDIsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjI2LCAxMTQsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjYsIDExNCwgMjYsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAKKyAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjM3LCAyNiwgNCwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjMsIDQxLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAKKyAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjM3LCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMjMsIDQxLCAyLCAyNDgsIDE2MSwgMjYsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDQsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCAKKyAgICA0LCAxLCAyMjYsIDIwNiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIyNiwgMTE0LCAyNiwgCisgICAgNiwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjI0LCAxNzAsIDI2LCAyMjYsIDExNCwgMjYsIDI0OCwgMTYxLCAyNDUsIDE1OSwgMjI0LCAzMCwgCisgICAgMjQ1LCAxNjgsIDIyNCwgMzAsIDI0NSwgMTU5LCAyMTksIDIwLCAyNDUsIDE2OCwgMjE5LCAyMCwgMjE2LCAxNDIsIDIxOSwgCisgICAgMjAsIDI0NCwgMTcsIDIxOSwgMjAsIDIxOSwgMTI1LCAyMTksIDIwLCAyNDQsIDEyMCwgMjE5LCAyMCwgMjI0LCAxNDQsIAorICAgIDIxOSwgMjAsIDIxNiwgMTcxLCAyMTksIDIwLCAyNDIsIDQyLCAyMTksIDIwLCAyMTAsIDg3LCAyMTEsIDI0NSwgMjE5LCAyMCwgCisgICAgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNzIsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDY5LCAyMzMsIDQ0LCA3OSwgMjIyLCAKKyAgICAyNDYsIDc5LCAyNDAsIDE3NSwgMjI4LCA3MywgMjQwLCAxNzUsIDI0NCwgMTIwLCAyNDgsIDE2NCwgMjQ1LCAxNTksIDI0OCwgCisgICAgMTY0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjE5LCA1MiwgMTIxLCAyMzIsIDIxOSwgCisgICAgNDMsIDIxOSwgMTU3LCAyMjQsIDEsIDc5LCA0NCwgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDIxOSwgMTU3LCAyMzIsIDExNSwgCisgICAgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDI0MSwgMTcwLCAyMjQsIDEsIDc5LCA0MywgNTIsIDIyNCwgMSwgNzksIDQ0LCA1MiwgCisgICAgMjI0LCAxLCA3OSwgNTIsIDIzMiwgMTE1LCAyMjQsIDEsIDc5LCA1MiwgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDI0OCwgMjEzLCAKKyAgICA1MiwgMjQ4LCAyMTMsIDI1MSwgMTIxLCAyMTUsIDIyMywgMjUxLCAxMjEsIDEyMywgNTksIDIzMywgNjIsIDExMywgNTksIAorICAgIDIzMywgNjIsIDIwMywgMjQ1LCAxNzEsIDI0MCwgMTczLCAyMjUsIDEzLCAyMzIsIDIyMCwgMjIwLCAxMzksIDIyNiwgMTksIAorICAgIDIyMCwgMTM5LCAyMzMsIDQ0LCAyNDUsIDE2NiwgMjIyLCAyNDYsIDI0NSwgMTY2LCAyMjQsIDI0OSwgMjQ3LCAyMDQsIDI0NCwgCisgICAgMjcsIDIzMywgNDQsIDIyNiwgMTIxLCAyMjIsIDI0NiwgMjI2LCAxMjEsIDIyOSwgMTk5LCAyMjgsIDc4LCAyMTksIDIwLCAKKyAgICAyMjUsIDE4NiwgMjMwLCAxOTgsIDUwLCAyMjUsIDE4NiwgMjE2LCAyNDksIDIxNiwgMTQ5LCA1MCwgMjI0LCAxOTMsIDUyLCAKKyAgICAyMjQsIDE5MywgMjE1LCAyMTIsIDIyNCwgMTkzLCAyMjMsIDUyLCAyMjQsIDE5MywgMjIzLCA1MiwgNTIsIDIyNCwgMTkzLCAKKyAgICAyMjMsIDUyLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDI1MCwgMjQ2LCAyMTksIDE1NywgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgCisgICAgMSwgNzksIDIxOSwgMTU3LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgNzksIDIyMywgMTEwLCA3OSwgNTIsIDI0NSwgCisgICAgMzksIDc5LCAyMzUsIDIwOCwgMjI2LCAxMjMsIDIxNCwgMTgwLCAxMzUsIDIxNiwgMTEyLCAyNTAsIDI0NywgMjM1LCAyMjMsIAorICAgIDIyNSwgMTMsIDI1MywgMjIyLCAyNDAsIDE3NiwgMjUxLCAxMjEsIDI0NCwgMTAsIDIxOSwgOTcsIDQzLCA0MiwgMjUxLCAKKyAgICAxNjYsIDIsIDIyNCwgMTAsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIyNCwgMTAsIDUyLCAyMjQsIDE2LCA3OSwgMjI0LCAxNiwgCisgICAgMjQ1LCAzOSwgNzksIDI0NSwgMzksIDIyNCwgMTYsIDc5LCAyMTYsIDcxLCA1LCAyNDUsIDczLCAyMjMsIDUyLCAyMjUsIDcxLCAKKyAgICA1MCwgODUsIDE0MCwgMjUxLCAxMjEsIDg1LCA5NywgMjUxLCAxMjEsIDEyMSwgMjUzLCAyMjQsIDIyMywgNTIsIDIyMCwgCisgICAgMTUyLCAyNTAsIDksIDIxNCwgMTYzLCAxMTMsIDI1MywgMjIzLCAyNTQsIDE2NywgMjEzLCAxODgsIDI0OSwgMjI1LCAyMzAsIAorICAgIDE4NywgNTAsIDIxNywgMjM1LCAyNDgsIDE2NCwgMjM1LCAyMDAsIDIxNCwgMTgwLCAyNDQsIDYwLCAyMjQsIDE0NCwgNzksIAorICAgIDEzNCwgNTksIDIyNCwgMTQzLCAyMjQsIDI3LCAyMjQsIDE5MywgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgCisgICAgMjI0LCAxNDMsIDExMywgNTksIDIyNCwgMTQzLCAyNDQsIDE5LCA1OSwgNzksIDI0NiwgMTI2LCAyNDksIDEzOCwgMjE1LCAKKyAgICAyMjIsIDY3LCAyNDQsIDE5LCAyNDcsIDEyNiwgMjMxLCA4NywgMTEsIDIxOSwgMjAsIDIxMSwgMjA5LCAyMzUsIDY5LCAyNDMsIAorICAgIDIzNCwgMjU0LCA2MCwgMjM1LCAxOTgsIDIxNiwgODYsIDIzNSwgMTk4LCAyMjAsIDEzOSwgMjM1LCAxOTgsIDIyNSwgMjUsIAorICAgIDIzMywgNDQsIDIzNSwgMTcxLCAyMjIsIDI0NiwgMjM1LCAxNzEsIDI0NCwgMTAwLCAyMTgsIDkxLCAyMzUsIDE3MSwgMjI0LCAKKyAgICAyNDksIDI0NywgMjA0LCAyMzUsIDE3MSwgMjM1LCAyMzUsIDIxNywgMTgzLCAyMTcsIDI1MiwgMjU1LCAxNCwgMjE3LCAxODMsIAorICAgIDIxNywgMjUyLCAyMzUsIDIzNSwgOSwgMjQ0LCAyOCwgMjIwLCA4MiwgMjU1LCAxNCwgOSwgMjQ0LCAyOCwgMjIwLCA4MiwgCisgICAgMjI5LCAxOTQsIDIxLCAyMjAsIDgzLCAyMjgsIDc0LCAyMSwgMjIwLCA4MywgMjE4LCAyNCwgMjEwLCA4NiwgMjE4LCAyNCwgCisgICAgNywgNCwgMSwgNzQsIDIxOCwgMjQsIDE2MSwgMjE4LCAyNCwgMTkwLCAyMTgsIDI0LCAxOTUsIDIxOCwgMjQsIDE5OSwgMjE4LCAKKyAgICAyNCwgMTk2LCAyMTgsIDI0LCAyMDEsIDIxOCwgMjQsIDk2LCA1MCwgMjE4LCAyNCwgMjMwLCAxODYsIDIxOCwgMjQsIDI0NSwgCisgICAgMTA2LCA1MCwgMjE4LCAyNCwgNDMsIDIyNiwgNywgMjE4LCAyNCwgNDQsIDIyNiwgNywgMjE4LCAyNCwgNywgNCwgMSwgMjMwLCAKKyAgICAzMCwgMjE4LCA2NiwgMjEwLCA4NiwgMjE4LCA2NiwgMTExLCAyMTgsIDY2LCAxMDUsIDIxOCwgNjYsIDE1OCwgMjE4LCA2NiwgCisgICAgMTYxLCAyMTgsIDY2LCAxOTAsIDIxOCwgNjYsIDE5NSwgMjE4LCA2NiwgMTk5LCAyMTgsIDY2LCAxOTYsIDIxOCwgNjYsIAorICAgIDIwMSwgMjE4LCA2NiwgOTYsIDUwLCAyMTgsIDY2LCAyMzAsIDE4NiwgMjE4LCA2NiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY2LCAKKyAgICA0MywgMjI2LCA3LCAyMTgsIDY2LCA0NCwgMjI2LCA3LCA3LCAyMTgsIDY2LCA0LCAxLCA2MSwgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDc4LCA3LCAyMTgsIDY2LCA0LCAxLCAyMTEsIDE3OCwgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgMjIxLCAxOTcsIDcsIDIxOCwgNjYsIDQsIDEsIDI0MiwgNjcsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgMjksIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDE1NiwgNywgMjE4LCA2NiwgNCwgMSwgMTk0LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzAsIDMwLCA3LCAyMTgsIAorICAgIDY2LCA0LCAxLCAyMjYsIDEwOSwgNywgMjE4LCA2NiwgNCwgMSwgMjIyLCA5MywgNywgMjE4LCA2NiwgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDI0NSwgNTQsIDUwLCAyNDksIDIzNSwgNTAsIDI0OSwgMTI1LCA1MCwgMjQ0LCAzLCAyNDQsIDYsIDUwLCAyMzIsIAorICAgIDIwNCwgNTAsIDIzMCwgMTk5LCA1MCwgMjI5LCAyMTUsIDUwLCAyMjUsIDE2NSwgNTAsIDIyMiwgMTIwLCA1MCwgMjExLCAKKyAgICAyMTcsIDUwLCAxNjYsIDIyMCwgNTEsIDUwLCAyNDcsIDEzNSwgNTAsIDI0NSwgNTUsIDUwLCAyMzQsIDgyLCA1MCwgMjE1LCAKKyAgICAxMTMsIDUwLCAyNDYsIDEwOSwgNTAsIDI0MywgNDcsIDIyNSwgMTk2LCA1MCwgMjI1LCAxNjMsIDUwLCAyNDIsIDExNiwgNTAsIAorICAgIDI1MywgMTkwLCA1MCwgMjQwLCAyMzUsIDUwLCAyNTAsIDE5MywgNTAsIDIzMiwgMTk3LCAyMTYsIDQsIDUwLCAyMTksIDIsIAorICAgIDUwLCAyMTYsIDI0NiwgNTAsIDIzNSwgMjQ4LCAyMjIsIDEyMCwgNTAsIDIxNSwgOTcsIDIzMiwgMjA0LCA1MCwgMzgsIDQzLCAKKyAgICAyNDIsIDYsIDQ4LCAzOCwgNDQsIDI0MiwgNiwgNDgsIDM4LCAyMDAsIDY3LCAyMzIsIDIyMCwgMjI2LCAxMjQsIDM4LCAyMTksIAorICAgIDI1MywgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDI1NCwgOTYsIDgwLCA0OCwgMzgsIDI1MCwgMTAsIDgwLCA0OCwgCisgICAgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzcsIDIyNiwgMTI0LCAzOCwgMjUwLCAxMCwgMjIyLCAKKyAgICAyMzcsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgMjIyLCAyMzcsIDIyNiwgMTI0LCAzOCwgMTM0LCAxNzAsIDQ4LCAzOCwgCisgICAgMjQ0LCAxOSwgMTcwLCA0OCwgMzgsIDI0NSwgMTU0LCAyNTAsIDQzLCAzOCwgMjQ1LCAxNTQsIDIxOCwgMjM2LCAzOCwgMjQ1LCAKKyAgICAxNTQsIDI0OCwgMCwgMzgsIDI0NSwgMTU0LCAyNTAsIDQ0LCAyNTIsIDE4OCwgMzgsIDQzLCA0NCwgODAsIDQ4LCAzOCwgCisgICAgMjQ1LCAxNTQsIDIyMSwgMTkwLCAzOCwgMjQ1LCAxNTQsIDIzNCwgMTQxLCAzOCwgMjQ1LCAxNTQsIDIxNCwgMTU1LCAyMjUsIAorICAgIDEwLCAyMTUsIDIyNiwgMzgsIDIyMywgNTMsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgNTIsIDY3LCAyMTgsIDEwNSwgMjI2LCAKKyAgICAxMjQsIDM4LCAyNTQsIDEwNiwgODcsIDM4LCAyMTUsIDIxMiwgMjE0LCAxODIsIDM4LCAyMTEsIDI0NywgMjUxLCAxNDgsIAorICAgIDQ4LCAzOCwgMTQwLCA4MCwgMjI2LCAxMjQsIDM4LCAyMDAsIDUyLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDM4LCA0MywgCisgICAgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjI1LCA0OCwgMjU1LCAyMCwgMjI2LCAyMzUsIDI1NSwgNCwgMjE2LCAKKyAgICA0MywgMjE2LCAxOTcsIDIxOCwgNzUsIDEzOSwgNiwgMjUxLCA3NCwgMjQ4LCA3OSwgMjUwLCAxODYsIDI1MCwgMTgzLCAyMzIsIAorICAgIDIyMCwgODcsIDI1MCwgMjQ4LCAyMjYsIDIzNSwgMjUxLCAzNCwgMjE0LCAxODksIDI0NSwgNTYsIDI0OSwgMTk5LCAyMjEsIAorICAgIDE4NywgMjQ4LCA3OSwgMjQ0LCAxODcsIDExOSwgNCwgMjQzLCAyMDksIDExOSwgNiwgMjQyLCA2NywgMjUxLCAyMjcsIDYsIAorICAgIDI0MiwgNjcsIDEzOSwgNiwgMjQyLCA2NywgMjI1LCA0MCwgMjQ5LCAxOTksIDIyNSwgNDAsIDI0OSwgMjAwLCAxMTUsIDExMywgCisgICAgMjI1LCAxMTEsIDExOSwgNiwgNzQsIDI1MSwgMjI3LCA2LCA3NCwgMTE5LCA2LCAxNTYsIDExOSwgNCwgMTU2LCAyMzMsIAorICAgIDE1NSwgNTcsIDI1MiwgMTQ5LCA4NywgMTM5LCA2LCAyMzAsIDMwLCAyMjcsIDIwMCwgNTAsIDIxOSwgMzMsIDIyMywgMTIyLCAKKyAgICAyNDksIDE3MCwgMTE5LCA2LCAyMjYsIDEwOSwgMTM5LCA2LCAyMjYsIDEwOSwgMTM5LCA2LCAyMjQsIDk5LCAxMTksIDYsIAorICAgIDE1MywgMjUxLCAyMjcsIDYsIDE1MywgMTM5LCA2LCAxNTMsIDIyNCwgMTk5LCAyMTcsIDcyLCAyMjMsIDY1LCAyMjAsIDEzNCwgCisgICAgNzksIDIxNywgMiwgNTAsIDIxNSwgMjU0LCAxNjQsIDUwLCAyMTMsIDI0MCwgMTM5LCA2LCAyMTAsIDE1OSwgMjI2LCAxMzcsIAorICAgIDUwLCAyMjYsIDIyNSwgNTAsIDIzNSwgMjAwLCAyMjYsIDIyNSwgNTAsIDI1MSwgMjI3LCA2LCAyMTAsIDE1OSwgMjE1LCA5NCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkyLCAyMzQsIDE3OSwgNTAsIDI1NCwgMTE1LCA1MCwgMTE5LCA2LCAyNTMsIDE2NiwgMjUxLCAKKyAgICAyMjcsIDYsIDI1MSwgNzQsIDI0NSwgNzYsIDg3LCAxMTksIDQsIDc2LCAxMTksIDYsIDc2LCAxMTksIDYsIDI0NSwgMTQsIAorICAgIDIxNSwgOTQsIDYsIDI0NSwgMTQsIDExOSwgNiwgMTk0LCAxMTksIDQsIDc4LCAxMDksIDg3LCAyNTIsIDM3LCA4NywgMjQyLCAKKyAgICAyMDksIDg3LCAyNDgsIDE5OCwgODcsIDIzNSwgMjM5LCAyMTksIDMxLCAyMjIsIDE4OSwgNiwgMjI0LCA5OSwgMjQ0LCAxOTAsIAorICAgIDUwLCAxMzksIDQsIDIyNSwgMTExLCAxMzksIDQsIDI0MywgMTE0LCAxMzksIDYsIDI0MywgMTE0LCAxMzksIDYsIDIyNSwgCisgICAgMTExLCAxMzksIDIzMCwgMjksIDIxOCwgNDEsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwOSwgMjE1LCA5NCwgMzUsIDYsIAorICAgIDE1NiwgMjIzLCA1MiwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIDMyLCA2LCAyNDksIDY4LCAKKyAgICAxMzksIDMyLCA0LCAyNDksIDY4LCAxMzksIDMyLCA0LCA3NiwgMTM5LCAzMiwgNCwgNzQsIDEzOSwgMzIsIDQsIDIzNSwgCisgICAgMTUwLCAyMjQsIDE3MywgMjMyLCAyMTksIDIxNSwgOTQsIDI1NCwgMTM0LCAyMjUsIDE4NiwgNTAsIDI1NCwgMTg5LCAyMTUsIAorICAgIDk0LCA0LCAyNDUsIDE0LCAxNiwgMzEsIDIyMSwgMjU0LCAyMTksIDMxLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjAsIAorICAgIDEyMCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI4LCAxOTksIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMjQyLCAKKyAgICAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMTYsIDE2OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDExMywgMjE2LCAxNjcsIDIxMiwgCisgICAgMTE0LCAyNDQsIDEwLCAxMjMsIDI0NCwgMTI1LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyNDQsIDEyNCwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEzNCwgMjQ0LCAxMjQsIDIxMiwgMTE0LCAyNDQsIDEwLCAyNDQsIDE5LCAyNDQsIDEyNCwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEyMywgMjE5LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDEwLCAyNDQsIDg5LCAyMTksIDExNSwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMzQsIDI0NSwgMTk0LCAyMTIsIDExNCwgMjQ0LCAKKyAgICAxMCwgMjQ0LCA4OSwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDEwLCAyMjAsIDEyNCwgMjQ1LCAxOTQsIDI0NCwgMTAsIAorICAgIDIyNywgMjAxLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTExLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEwNSwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxNTgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTYxLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTUsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk5LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDE5NiwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMDEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE2LCAyNDgsIDIyMiwgMjAwLCAKKyAgICAyMjcsIDIwMiwgMjQ1LCAxNzUsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE1LCA3NiwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIAorICAgIDEyMiwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDI0MCwgCisgICAgMjE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDgsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTExLCA0LCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDEwNSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNTgsIDQsIDIyMiwgMjAwLCAyMjcsIAorICAgIDIwMiwgMTYxLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5MCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTUsIDQsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTk5LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NiwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAKKyAgICAyMDEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE2LCAyNDgsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ1LCAxNzUsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE1LCA3NiwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMiwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE3LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDI0MCwgMjE3LCAKKyAgICA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OSwgCisgICAgMjUxLCA3NSwgMjQ5LCA2OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAyMTYsIDI0OSwgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjIzLCA1MiwgMTIzLCAyNDAsIDIxNywgNywgCisgICAgNCwgMSwgMjIzLCA1MiwgMjUxLCA3NCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTksIDEyNywgMjMzLCA4NCwgMTcsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjMsIDI0NSwgMjM0LCAxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE2LCAxNDgsIDIxMiwgMTE0LCAyNDQsIDEwLCAyMTAsIAorICAgIDg3LCAyMTYsIDE2NywgMTQwLCA3NSwgMjE0LCAxNTMsIDc1LCA5NywgNzUsIDI0NiwgMTEyLCA3NSwgNDMsIDQ0LCA3NSwgCisgICAgMTIwLCAxMjQsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKKyAgICAzNiwgNzUsIDk3LCAyMTIsIDM2LCA3NSwgMTQwLCAxMTMsIDI0MSwgMjQxLCA3NSwgMjE0LCAxNTMsIDExMywgMjQxLCAyNDEsIAorICAgIDc1LCA5NywgMTEzLCAyNDEsIDI0MSwgNzUsIDI0NiwgMTEyLCAxMTMsIDI0MSwgMjQxLCA3NSwgMTQwLCA4MCwgMiwgMjE3LCAKKyAgICA3OCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAorICAgIDI1MiwgMTM1LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyOSwgOTcsIDgwLCAKKyAgICAyLCAyMzIsIDEyOSwgNDMsIDQ0LCAyMTIsIDM2LCA3NSwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTEyLCAyMTAsIDM1LCAKKyAgICA3NSwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc4LCAyMzMsIDQzLCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIyMiwgCisgICAgMjQ0LCAyNDYsIDExMiwgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDk3LCA4MCwgMiwgMjQ5LCAxNjksIDI0NiwgMTExLCAyNDYsIDExMiwgODAsIDIsIDI0OSwgMTY5LCAyMzMsIDQzLCAKKyAgICAyNTQsIDk2LCAyMTYsIDE1LCAyMjAsIDE1NSwgNzUsIDI1MCwgMTAsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjE2LCA0MywgMjAwLCAxMzAsIDE0MCwgODAsIDIxNiwgNDMsIDI1MiwgMTQ5LCAxMTUsIDk3LCA4MCwgCisgICAgMjE2LCA0MywgMTMwLCAyNTQsIDk2LCAyMDQsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyMDQsIDI1MCwgNDQsIDc1LCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTUyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAyMTQsIAorICAgIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMzMsIAorICAgIDQzLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjQ0LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgMjMzLCA0MywgOTcsIDgwLCAxMTUsIDE0MCwgNzUsIDIxNCwgMTUzLCA4MCwgMTQwLCA2NCwgMjQ2LCAxMTIsIDc1LCAxNDAsIAorICAgIDgwLCAxMTUsIDk3LCA3NSwgMTQwLCAyMjYsIDc0LCAyNTMsIDI1NSwgMjE0LCAxNTMsIDIyNiwgNzQsIDI1MywgMjU1LCA5NywgCisgICAgMjI2LCA3NCwgMjUzLCAyNTUsIDI0NiwgMTEyLCAyMjYsIDc0LCAyNTMsIDI1NSwgMTQwLCAyNDIsIDYsIDExNSwgOTcsIAorICAgIDI0MiwgNSwgOTcsIDI0MiwgNiwgMTE1LCAxNDAsIDI0MiwgNSwgMTQwLCA1MiwgODAsIDIsIDkxLCA0MywgNDQsIDUyLCA4MCwgCisgICAgMiwgOTEsIDk3LCA1MiwgODAsIDIsIDkxLCAxNDAsIDUyLCA3NSwgMjE0LCAxNTMsIDUyLCA3NSwgOTcsIDUyLCA3NSwgMjQ2LCAKKyAgICAxMTIsIDUyLCA3NSwgNDMsIDQ0LCA1MiwgNzUsIDEyMCwgMTI0LCA1MiwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNTIsIDc1LCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgNTIsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNTIsIDc1LCAyMTksIDMwLCAyMTIsIDksIAorICAgIDUyLCA3NSwgMTQwLCAyMTUsIDIxMiwgNzUsIDk3LCAyMTUsIDIxMiwgNzUsIDE0MCwgMjE4LCAyMzIsIDc1LCA5NywgMjE4LCAKKyAgICAyMzIsIDc1LCAyMTQsIDE1MywgODAsIDIsIDUyLCA5MSwgMjQ2LCAxMTIsIDgwLCAyLCA1MiwgOTEsIDE0MCwgMjQ4LCAxNjMsIAorICAgIDc1LCAyMTQsIDE1MywgMjQ4LCAxNjMsIDc1LCA5NywgMjQ4LCAxNjMsIDc1LCAyNDYsIDExMiwgMjQ4LCAxNjMsIDc1LCAKKyAgICAxNDAsIDgwLCAyMTYsIDQzLCAxMzAsIDk3LCA4MCwgMjE2LCA0MywgMTMwLCAxNDAsIDcxLCA3NSwgMjE0LCAxNTMsIDcxLCAKKyAgICA3NSwgOTcsIDcxLCA3NSwgMjQ2LCAxMTIsIDcxLCA3NSwgMjE0LCAxNTMsIDcxLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE3LCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTgsIDIsIAorICAgIDIwMywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTgsIDIsIDY3LCAxMzAsIDIxNCwgMTUzLCA3MSwgCisgICAgNTIsIDc1LCAyMTQsIDE1MywgNzEsIDUyLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE3LCA5NywgNzEsIDgwLCAyNDMsIDI1MSwgCisgICAgMjEyLCA1NiwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjE2LCA0MywgMjQ5LCAxNjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgCisgICAgMjE2LCA0MywgMjQ5LCAxNjgsIDEyMCwgMTI0LCA3MSwgNzUsIDQ0LCA4MCwgMiwgNCwgMjUwLCA0MywgMjQ2LCAxMTIsIDgwLCAKKyAgICAxNDAsIDY0LCAyMTQsIDE1MywgNzUsIDEzNCwgOTcsIDI1MywgMjU1LCAxNDAsIDgwLCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgCisgICAgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA2NywgOTEsIDE0MCwgODAsIDIsIDUyLCA2NywgOTEsIDk3LCA4MCwgMiwgNTIsIDY3LCAKKyAgICA5MSwgNDMsIDQ0LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMjYsIDE3NywgNzUsIDk3LCAyMjYsIDE3NywgNzUsIDQzLCAKKyAgICA0NCwgMjI2LCAxNzcsIDc1LCAzMSwgMjU0LCAxNjMsIDI0OSwgMjIyLCAyMjYsIDEsIDI0NywgMjQxLCAyMTYsIDE4OCwgCisgICAgMjQ1LCAzNSwgMjE2LCAxODgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDUsIDM2LCAyNDUsIDE2MCwgMjIwLCAxMjksIDIzNSwgCisgICAgMjUyLCAyMjksIDIyNiwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAyMjgsIDU3LCAyNTQsIDEzMiwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAKKyAgICA0LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjMxLCA2NywgMjQ3LCAxNDYsIDIyOCwgNTcsIAorICAgIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjMxLCA2NywgNCwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDUsIDE1MSwgCisgICAgNjQsIDIyNCwgMTc1LCAyMzAsIDI5LCAyMjQsIDE4MywgMjMwLCAyOSwgMjQ5LCAxNzMsIDIzMCwgMjksIDIxOCwgNDEsIAorICAgIDIzMCwgMTg3LCA1MCwgMjMwLCAxODUsIDUwLCA1OSwgMjI1LCAyNSwgMjQ3LCAxNzcsIDIxOSwgOTcsIDIyMCwgMTMwLCAKKyAgICAyMzAsIDE4NiwgMjUzLCAyMjUsIDIyNiwgMTcxLCAyMjIsIDIzNywgMjI2LCAxNzEsIDI1MSwgMTIyLCAyMjYsIDE3MSwgNDIsIAorICAgIDIyMiwgMTk1LCAyNDksIDExNywgMjIyLCAxOTUsIDI0NCwgMTIsIDIyMiwgMTk1LCAyMjQsIDE3MSwgMTEyLCAyMzUsIDI0MSwgCisgICAgNDQsIDI1NCwgMTE3LCAyNTQsIDExNywgMjMxLCA5MywgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTcsIDI0NywgMTc5LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjQ3LCAxODIsIDIyNiwgMTIsIDExMiwgMjI4LCA1NywgMjI2LCAxMiwgMTEyLCAyMzIsIAorICAgIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjM1LCAyMDUsIDIxNCwgMTc1LCAyMzUsIDIxOCwgNTIsIDIzNSwgCisgICAgMjE4LCAyMTUsIDIxMiwgMjM1LCAyMTgsIDI0OSwgMTkwLCAyMzUsIDIxOCwgMjE4LCAxNCwgMjM1LCAyMTgsIDIxMywgMTI5LCAKKyAgICAyMzUsIDIxOCwgMjUwLCAxMCwgMjM1LCAyMTgsIDI1MCwgMTAsIDI0OSwgMTkwLCAyMzUsIDIxOCwgMjU0LCA5NiwgMjQ5LCAKKyAgICAxOTAsIDIzNSwgMjE4LCAyMTYsIDE4NywgMjUyLCA3NSwgMjIzLCAxNDAsIDIyNCwgMTcyLCA1OSwgMjMwLCAxODYsIDI0NSwgCisgICAgNDEsIDI0MywgNTMsIDIyNCwgMTcyLCAyNDEsIDY0LCAyMTYsIDkwLCAyMjYsIDE3MSwgMjIzLCA1MiwgMTg0LCAyMzUsIAorICAgIDIwMCwgMjMzLCA3MSwgMjIyLCA5MywgMjE5LCAxNTksIDIxMiwgMzUsIDIxMSwgMjAwLCAyMjQsIDE4MywgMjI4LCA1NywgCisgICAgMTg0LCAyMzAsIDE4NywgMTg0LCAyNTMsIDIxOCwgMTI4LCAxMTIsIDIyOCwgNTcsIDI1MywgMjE4LCAxMjgsIDExMiwgMjU0LCAKKyAgICA1NiwgMTI4LCAxMTIsIDI1NCwgNTYsIDI1MSwgOTYsIDIyOCwgNTcsIDI1NSwgMTMsIDEyOCwgMTEyLCAyMjksIDEwNSwgCisgICAgMjU0LCA1NiwgMjI4LCA2NCwgMjU1LCAxMywgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjI4LCA1NywgMjU0LCAKKyAgICAxNTYsIDEyOCwgMTEyLCAyNTQsIDE1NiwgMTI4LCAxNzcsIDEyOCwgMTEyLCAyMTUsIDIxMiwgMTg0LCAyNTQsIDE2NCwgCisgICAgMTI4LCAxMTIsIDI0NSwgMTAyLCAxMTIsIDI0MywgNTIsIDI0NSwgMTAyLCAxMTIsIDI0NywgMjQyLCAyNTIsIDMxLCAyNTQsIAorICAgIDU4LCAyMTYsIDE5NywgMjMyLCAyMjcsIDI0MywgNTIsIDEyOCwgMTEyLCAyNTQsIDU2LCAxMjgsIDIxNiwgNDMsIDE3NywgCisgICAgMjE2LCAxOTcsIDIzNiwgMjIsIDIyNiwgMjM1LCAyMzYsIDIyLCA2NCwgMTc3LCAyNTQsIDU2LCAxMjgsIDExMiwgMjQ5LCAKKyAgICAyMzUsIDI0NSwgMTA1LCAyNDUsIDEwNiwgMjQ5LCAyMzQsIDIyMiwgMjM3LCAyMzYsIDcsIDEyOCwgMTEyLCAyMjIsIDIzNywgCisgICAgMTI4LCAxMTIsIDI0OSwgMTYyLCAxMTIsIDI0NSwgNzUsIDI0NSwgMTA0LCAxMTIsIDIxOCwgMTU5LCAyNDUsIDEwNSwgMjQ4LCAKKyAgICA2MywgMTI4LCAxMTIsIDEyOCwgMjE2LCA0MywgMjUxLCA4NiwgMjQ4LCA4MCwgMjMxLCA5MywgMjUxLCA4NSwgMjI0LCAxNCwgCisgICAgMTI4LCAxMTIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyNDAsIDExMSwgMTEyLCAyMjgsIDU3LCAyNDAsIDExMSwgMTEyLCAyMTgsIAorICAgIDExMSwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMTI4LCAxMTIsIDIzMywgCisgICAgMjEsIDExNSwgMTI4LCAxMTIsIDI0MiwgMTM3LCAxMTUsIDEyOCwgMTEyLCAyMzMsIDIxLCAyNTEsIDk2LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjQyLCAxMzcsIDI1MSwgOTYsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzAsIDEwMiwgMjMzLCAyMCwgMjMwLCAKKyAgICAxMDIsIDI0MiwgMTM2LCAyNTIsIDMxLCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyMjgsIDU3LCAyMzMsIDIwLCAyMjgsIAorICAgIDU3LCAyNDIsIDEzNiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMjQyLCAxMzcsIAorICAgIDIyOCwgNjQsIDEyOCwgMTEyLCAyMzMsIDIxLCAxNzcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAxNzcsIDI0NSwgMTAyLCAKKyAgICAxMTIsIDIyOSwgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAyNDUsIDEwMiwgMTEyLCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgCisgICAgNjQsIDI0NSwgMTAyLCAxMTIsIDIzMywgMjEsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxNzcsIDIzMywgMjAsIDIyOSwgCisgICAgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAyNDIsIDEzNiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAyMjgsIDY0LCAyMzMsIDIwLCAKKyAgICAyMjQsIDIwNSwgMjE4LCA1NiwgMjI0LCAyMDYsIDE3NywgMTI4LCAxMTIsIDIxOCwgNTcsIDE3NywgMTI4LCAxMTIsIDIyNCwgCisgICAgMjA2LCAxNzcsIDI0NSwgMTAyLCAxMTIsIDIxOCwgNTcsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQ3LCAxNDYsIDIyOCwgNTcsIAorICAgIDIyNCwgMjA4LCAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OCwgMjE4LCA2NSwgMjI2LCAyMzUsIDIxOCwgMjMsIDIyNiwgCisgICAgMjM1LCAyMjgsIDU3LCAxMTYsIDIxOCwgNjUsIDIyNiwgMjM1LCAyMjgsIDU3LCAxMTYsIDIxOCwgMjMsIDIyNiwgMjM1LCAKKyAgICAyMTgsIDY1LCA2NCwgMTc3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDE3NywgMTI4LCAxMTIsIDIyOSwgMTA1LCAxMTYsIAorICAgIDIxOCwgNjUsIDY0LCAyMjgsIDY0LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgMjE4LCAyMywgNjQsIDIyOCwgNjQsIDEyOCwgCisgICAgMTEyLCAyMTgsIDY1LCA2NCwgMiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIAorICAgIDExMiwgMjMwLCA4NiwgMjMwLCA4NywgMjMwLCA4OCwgMjMwLCA4NywgMjE0LCAxNzUsIDQyLCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgNDIsIDIyNiwgMTU0LCAyMjYsIDIzNSwgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjI2LCAxNTQsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCA0MiwgMjUxLCAzLCA0MiwgMjQ5LCAxMTAsIDM3LCAyMjUsIDI1LCAzNywgMjMwLCAxODYsIDM3LCAKKyAgICAyMTYsIDg2LCAzNywgMjQ3LCAxNzcsIDIxOSwgOTcsIDM3LCA1OSwgMjI2LCAxNzEsIDM3LCAyMjIsIDIzNywgMjI2LCAxNzEsIAorICAgIDM3LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDM3LCAyNDUsIDEwNSwgMzcsIDI0OCwgMTY0LCA5MiwgMjI1LCAyNSwgOTIsIDIzMCwgCisgICAgMTg2LCA5MiwgMjE2LCA4NiwgOTIsIDU5LCAyMjYsIDE3MSwgNDQsIDIxNywgODgsIDQzLCAyMTcsIDg4LCAxMjQsIDIxNywgCisgICAgODgsIDEyMCwgMjE3LCA4OCwgMjUzLCAyMjgsIDIzMCwgMTYxLCAyMTUsIDE5MiwgMjQ0LCAzMywgMjE1LCAyMTIsIDY3LCAKKyAgICAyNTIsIDE0OSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjQ3LCAxNDYsIDIyOCwgCisgICAgNTcsIDIyNCwgMTY2LCAyMjgsIDU3LCAyMTUsIDE5MiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NCwgMzQsIDIyOSwgMTA3LCAKKyAgICA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDQsIDIxNSwgOTMsIDIyNCwgMjA2LCAyMTQsIDE4NCwgMjIzLCA5NCwgMjE4LCA1NywgCisgICAgMjE0LCAxODQsIDIyMywgOTQsIDIyOCwgNjIsIDIxOCwgNzgsIDIyNiwgMjM1LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIyOCwgCisgICAgNjIsIDIxOCwgNzcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAxNzcsIDEyOCwgMTEyLCAyNDksIDE5NCwgMjUzLCAyNDYsIAorICAgIDIyOCwgNjIsIDIxOCwgNzgsIDE3NywgMTI4LCAxMTIsIDIyNiwgMTU0LCAyMjYsIDIzNSwgMjM2LCAyMiwgMjI2LCAyMzUsIAorICAgIDIzMCwgOTIsIDI0MSwgMjA3LCAyNDksIDIwNCwgMjMxLCAxNDIsIDIzNSwgMjE1LCAyMTEsIDE0NSwgMjI5LCAyMDcsIDIyOCwgCisgICAgNjMsIDQ0LCAyNTQsIDExOCwgMiwgMjU0LCAzMywgNDQsIDIxNSwgMjI2LCAyMzAsIDI5LCAyMzIsIDE1MiwgMjU0LCAxMjYsIAorICAgIDIzMCwgMjksIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjMwLCAyOSwgMjM1LCAyMDUsIDIzMCwgMjksIDIxNCwgMTc1LCAyNDgsIAorICAgIDEsIDIyNiwgMTcxLCA1OSwgMjI2LCAxNzEsIDIxOCwgMTU5LCAyMjYsIDE3MSwgMjQ3LCAxNzcsIDIxNiwgODYsIDI1MSwgCisgICAgMTcyLCA0MywgMjI4LCA2MiwgMjQ0LCAxODksIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyOCwgNjIsIDI0NCwgMTg5LCAKKyAgICAyMjAsIDE1MSwgMjI0LCAxODMsIDQzLCAyMjAsIDE1MSwgMjI0LCAxODMsIDQ0LCAyMjAsIDE1MSwgMjI0LCAxODMsIDIyMywgCisgICAgNTIsIDIxNiwgOTAsIDI0NSwgMTA1LCAyNDksIDEwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyNDksIDEwNywgMjMyLCAxNTIsIAorICAgIDI1NCwgMTI2LCA1MiwgMjE4LCA2NCwgNTIsIDIxOCwgMjIsIDUyLCAyMzUsIDIwNSwgNTIsIDIxNCwgMTc1LCAyMjUsIDUwLCAKKyAgICAxMjgsIDIyLCAyMjYsIDEyLCAxMTIsIDIzMywgMjEsIDIsIDI0NywgMTI4LCAyNDIsIDEzNywgMiwgMjQ3LCAxMjgsIDIxMywgCisgICAgMTg3LCAyMzAsIDEwMiwgMjMzLCAyMCwgMjEzLCAxODcsIDIzMCwgMTAyLCAyNDIsIDEzNiwgMjMzLCAyMSwgMTI4LCAyMTYsIAorICAgIDQzLCAxNzcsIDI0MiwgMTM2LCAyNDIsIDEzNywgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgCisgICAgMTc3LCAyMzMsIDIwLCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDEyOCwgMjE2LCA0MywgMTc3LCAyMjQsIDIwNSwgCisgICAgMTI4LCAyMTYsIDQzLCAxNzcsIDIxOCwgNTYsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMjQsIDIwOSwgMTc3LCAyNDUsIDEwNywgCisgICAgMjQ3LCAxNDYsIDIyOCwgNTcsIDIxOCwgNTksIDE3NywgMjQ1LCAxMDcsIDIyOCwgNTcsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgNDIsIDIyNiwgMTU0LCA2NCwgMTc3LCAxMjgsIDExMiwgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDIyOCwgNTcsIDEyOCwgMTEyLCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAKKyAgICAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI0LCAyMDYsIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIxOCwgNTcsIDI1MSwgOTYsIDIyOCwgCisgICAgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDIyNiwgMjM1LCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc3LCAyMjgsIDU3LCAyMjgsIDYyLCAyMTgsIDc4LCA2NCwgCisgICAgMTc3LCAxMjgsIDExMiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjI4LCA2MiwgMjE4LCA3OCwgCisgICAgMTc3LCAyNDUsIDEwNywgNjcsIDI0NSwgMTcxLCAyMzAsIDIyNywgMjAzLCAyNDUsIDE3MSwgMTIwLCA0NCwgMjQ4LCA3LCAKKyAgICAyNDUsIDE3MSwgMTI0LCA0NCwgMjQ4LCA3LCAyNDUsIDE3MSwgMjQ1LCAxNzgsIDY0LCAyLCAyMDAsIDIwMywgOTEsIDI0NSwgCisgICAgMTc4LCA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCA0LCAyNDUsIDE3OCwgCisgICAgNjQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzgsIDY0LCAyLCAKKyAgICA1OSwgNDgsIDI0NSwgMTc4LCA2NCwgMiwgMjI2LCAxMjcsIDQsIDI0NSwgMTc4LCA2NCwgMiwgMjI2LCAxMjcsIDI0NSwgCisgICAgMTc4LCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTc4LCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTIsIDI0OSwgMTk0LCAyLCAKKyAgICAyMDAsIDIwMywgOTEsIDI0OSwgMTk0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIAorICAgIDQsIDI0OSwgMTk0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDI0OSwgMTk0LCAKKyAgICAyLCAyMjYsIDEyNywgNCwgMjQ5LCAxOTQsIDIsIDIyNiwgMTI3LCAyMTAsIDE2MCwgMTg5LCAyNTIsIDE4MSwgMjMxLCA2NiwgCisgICAgMjQ4LCAyLCA1MCwgMjQ1LCAxODAsIDc1LCAyNDAsIDI0MSwgMTIwLCAyNTQsIDEsIDEyNCwgMjU0LCAxLCAyMjQsIDE3OCwgCisgICAgMjI1LCAxNjgsIDIxMiwgMzIsIDIzMiwgMjE5LCA0MywgMjUwLCAxODksIDQ0LCAyNTAsIDE4OSwgNDMsIDI0NCwgNjUsIDQ0LCAKKyAgICAyNDQsIDY1LCAyNTEsIDE4MywgNDQsIDI0OSwgMTQwLCAyNTEsIDE4MywgNDMsIDI0OSwgMTQwLCAyMTYsIDE1LCA0NCwgCisgICAgMjQ5LCAxNDAsIDIxNiwgMTUsIDQzLCAyNDksIDE0MCwgMjIzLCA1MiwgMjI4LCA1NywgNTAsIDQyLCAyMzIsIDExMCwgMjU0LCAKKyAgICAzMywgMjIxLCAxNjYsIDIyMSwgMTczLCAyMTcsIDIsIDIyMywgMTIzLCAyMjQsIDI0NCwgMjM1LCAyNDUsIDIxMywgMTY1LCAKKyAgICAyMTgsIDIzNiwgMjI1LCA0NCwgNjQsIDIzNSwgMjE0LCA1MCwgMjE1LCA5NCwgMjI4LCA1NywgNTAsIDIxMiwgNDIsIDI0MCwgCisgICAgMjQzLCAyMTYsIDE1LCA0MywgMjQ5LCAxNjgsIDIxNiwgMTUsIDQ0LCAyNDksIDE2OCwgMjUxLCAxODMsIDQzLCAyNDksIAorICAgIDE2OCwgMjUxLCAxODMsIDQ0LCAyNDksIDE2OCwgMjE2LCAxNSwgMTYzLCAyMzUsIDIxOCwgMjUxLCAxODMsIDE2MywgMjM1LCAKKyAgICAyMTgsIDI0MywgMjQ4LCAyMTksIDc3LCAxMjAsIDI1NCwgMiwgMjUyLCAzMiwgMTEzLCAyMDMsIDI1MiwgMTM3LCAyMjYsIAorICAgIDE2NCwgMjM0LCAxNDQsIDI0NSwgOTgsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgMjExLCAxNzksIDIzNiwgNywgCisgICAgMTE2LCAyMjMsIDEyMCwgMjUxLCAxNzEsIDIzNCwgMTQzLCAyMzMsIDQ4LCAyNTQsIDExOCwgMTI3LCAyMjIsIDI1MCwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIzMywgNTIsIDI1MiwgNDMsIDIyMiwgMjM2LCAyNDksIAorICAgIDc4LCAyNTQsIDE2NCwgMjU0LCA5LCAyMTcsIDE4MiwgMjE2LCA1LCAyMjIsIDEyNSwgMjQ3LCAyMjMsIDIyNiwgMTU1LCAKKyAgICAyNDksIDIwNiwgMjE3LCA1MywgMjE5LCA4OCwgMjQ5LCAxNTksIDI0OSwgMTU4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI0MCwgMTU4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMjMwLCAyMjQsIDMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDI0NSwgMTA3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0NywgMTgyLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0OCwgMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMzUsIDYyLCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI1MCwgNDMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgCisgICAgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMTksIDk4LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUyLCAxODksIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMjQsIDMxLCAyMTksIDk3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI1MiwgMTg4LCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzMywgMjAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQyLCAxMzYsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDk3LCAyMTQsIDE5LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDE0MCwgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgOTcsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDI1MiwgMTg4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDEyNCwgMjE3LCA4OSwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA2MywgMjE4LCAxMzcsIDI1NCwgCisgICAgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTI0LCAyNTAsIDI0NiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICAyNDgsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjE3LCA4OSwgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMTQsIDE1MywgNzUsIDI1NCwgCisgICAgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyMjYsIDEyNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjAsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzEsIDI0OCwgNzMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyMzUsIDYyLCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0NiwgMTEyLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0NiwgMTEyLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDAsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDI0OCwgNjMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgMSwgMjE0LCAxODMsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE0LCAKKyAgICAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMjAsIDcsIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjI0LCAwLCAyMjQsIDMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIxOCwgMTU4LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzEsIDI0OSwgMjM0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjQ4LCA5LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDE1OSwgCisgICAgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgNjMsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNTAsIDQ0LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMjAsIDcsIDIxOCwgMTM3LCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDQzLCAyMjAsIDcsIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxNiwgOTAsIDI0OCwgCisgICAgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDIsIDEzNywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OSwgCisgICAgMjI4LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxMCwgMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAxMzgsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjAsIDE1MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjI4LCA1NywgMjQ1LCAxMDcsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjI0LCAxNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDI1MCwgCisgICAgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyNTAsIDI0NywgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIzNSwgMTkyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyMywgNDAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI2LCAKKyAgICAyMDUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTIsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI0NSwgMTA5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMzUsIDE5MywgMjE0LCAxODMsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI2LCAyMDYsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1NCwgMTUxLCAyMjgsIAorICAgIDU3LCAyNTAsIDEzOCwgNzksIDQ0LCAyNTQsIDExOCwgMiwgMjQ2LCAxMTIsIDIxMCwgMzUsIDc1LCAyMTksIDIzNywgMjA0LCAKKyAgICAyNTEsIDE3MSwgMjUyLCA1MywgODcsIDY3LCAyMzIsIDIyMCwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDIyMywgODcsIAorICAgIDI0OSwgMTkxLCAyMTQsIDE4MSwgODcsIDI0NywgMTk3LCAyMTQsIDE4MSwgODcsIDI0NSwgMTYyLCA4NywgMjQ5LCAyMTgsIAorICAgIDg3LCA3MSwgNDIsIDIsIDI1MCwgMTgzLCA2NywgMjMyLCAyMTksIDI0NSwgMTM4LCA4NywgMjU0LCAxNDcsIDIzNCwgMTQ1LCAKKyAgICA4NywgMjQxLCAyMjAsIDg3LCAzNywgMjAzLCAyNTIsIDE0OSwgMiwgMjI4LCA1NSwgMzcsIDIxNSwgMjI3LCAyNDYsIDExNCwgCisgICAgMjUxLCAxNDMsIDI1MCwgNDQsIDIsIDIyOCwgNTksIDc1LCAyMTQsIDE3OSwgODcsIDIzMCwgMTQyLCA4NywgMjQwLCAxNzEsIAorICAgIDg3LCAyMjYsIDE3OCwgMjQyLCA2NiwgODcsIDIyNiwgMTc4LCAyMzMsIDE1MywgODcsIDIyNSwgMjQ4LCA4NywgMjI1LCAKKyAgICAyNDcsIDg3LCAyNDcsIDIwNSwgMjQ5LCAxMDUsIDE2LCAyNDQsIDI4LCAxMDUsIDIxOSwgNTIsIDg3LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzAsIDI0OCwgOTEsIDIyMCwgMTQwLCAyMzQsIDE0NSwgODcsIDIyNCwgMTk1LCAyMjYsIDc5LCAKKyAgICAyMjksIDg3LCAyMjYsIDc5LCAyMjQsIDE5MSwgMjIxLCAxOTEsIDg3LCAyNTAsIDI1LCAyMjEsIDE5MSwgODcsIDQzLCAyMjYsIAorICAgIDgsIDIxNCwgMTYwLCAxMDMsIDQzLCAyMjYsIDgsIDI0NSwgMjksIDQzLCAyMjYsIDgsIDIzMiwgMTE0LCAxMDMsIDQ0LCAKKyAgICAyMjYsIDgsIDIxNCwgMTYwLCAxMDMsIDQ0LCAyMjYsIDgsIDI0NSwgMjksIDQ0LCAyMjYsIDgsIDIzMiwgMTE0LCAxMDMsIAorICAgIDQzLCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDMsIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDMsIDQyLCAKKyAgICAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMjQ5LCAxNjgsIDQ0LCAKKyAgICA0MiwgMjUxLCAxNjYsIDI0NSwgMjksIDQ0LCA0MiwgMjUxLCAxNjYsIDIzMiwgMTE0LCAyNDksIDE2OCwgNDMsIDI0OSwgCisgICAgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgMTA0LCAKKyAgICA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyNDksIDEwNywgMjUxLCAxNjYsIDI0NSwgMjksIDQ0LCAKKyAgICAyNDksIDEwNywgMjUxLCAxNjYsIDIxNCwgMTYwLCAxMDMsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMCwgMjI5LCAyMjUsIAorICAgIDEwNCwgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMyLCAxMTQsIDEwMywgMjM1LCAyMTksIDI0NSwgMjksIDIwMywgMjMyLCAKKyAgICAyMjAsIDI0NSwgMjksIDIxNCwgMTYwLCA0MywgMTc3LCAyMzIsIDExNCwgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjIxLCAKKyAgICAxNzQsIDIxNCwgMTYwLCA0NCwgMTc3LCAyMzIsIDExNCwgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjIxLCAxNzQsIDIxOCwgCisgICAgNDIsIDIxNiwgMTQsIDIxOCwgNDIsIDI1MSwgMTgyLCAyMTYsIDE1LCA0MiwgMTI3LCAyNTEsIDE4MywgNDIsIDEyNywgMjUxLCAKKyAgICAxODMsIDQyLCAyNTEsIDE2NiwgMTE1LCAyMTYsIDE1LCA0MiwgMTI3LCAzNCwgMTYsIDI1MSwgMTgyLCA0MywgNjcsIDkzLCAKKyAgICAyMzIsIDIxOSwgNDQsIDY3LCA5MywgMjMyLCAyMTksIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE4LCAyMDMsIDIyMSwgMjA3LCAKKyAgICAyMzIsIDIxNywgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTYsIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE1LCAyNDgsIDU0LCAxNiwgCisgICAgMTkzLCA2NywgMjIsIDIxNiwgMTUsIDIyMiwgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMjIsIAorICAgIDI1NCwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgCisgICAgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAKKyAgICA2NywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIAorICAgIDE2LCAxOTMsIDEyMCwgMjIsIDIwMywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjEyLCAzNSwgCisgICAgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAKKyAgICAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDI0MSwgNTEsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDEyMCwgMjIsIDI0MSwgNTEsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjMzLCA1MiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgNjcsIDIyLCAyNTEsIDE4MywgMjMzLCA1MiwgNDIsIDI0NCwgNDAsIDIyMywgNTcsIDg3LCAyNDUsIDE5MCwgCisgICAgODcsIDY3LCAyMzIsIDIyMCwgMjQ1LCAyOSwgMjMxLCAzOCwgMjUxLCAxNTQsIDIzMSwgMzgsIDIwMCwgMTE1LCAyMTksIAorICAgIDI1MiwgMjMxLCAzOCwgMjE5LCAyNTMsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDIwMCwgMTE1LCAxMTMsIDIxOSwgMjM5LCAKKyAgICAyMzEsIDM4LCAxMTMsIDIxOSwgMjQwLCAxMTUsIDIzMiwgMTQzLCAyMzEsIDM4LCAxMTMsIDIxOSwgMjQwLCAyMzUsIDcwLCAKKyAgICAyMzEsIDM4LCAyMTUsIDIwOSwgMjMxLCAzOCwgMjE2LCAyMjQsIDIzMSwgMzgsIDIyNSwgMTkxLCAyNDUsIDIzMiwgMjQyLCAKKyAgICAxMjksIDI0MywgMjI2LCAyMTYsIDE1LCAyMjYsIDcsIDI1MSwgMTgzLCAyMjYsIDcsIDIxNiwgMTUsIDI0OSwgMTA3LCAxMjcsIAorICAgIDI1MSwgMTgzLCAyNDksIDEwNywgMTI3LCAyMTYsIDE1LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjUxLCAxODMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA3MSwgMjE1LCAyNDAsIDI1MiwgNDMsIDIyMiwgMjM3LCAyLCAyNTAsIDQzLCAyMTgsIDEyMiwgMjQ0LCAKKyAgICA3MiwgMjU1LCAyNiwgMjQ5LCAxMDQsIDI0NSwgMTc5LCAyMzUsIDIwNSwgMjQ4LCA5MSwgMjQ1LCAzMiwgODcsIDg1LCAyMjIsIAorICAgIDI1MCwgNTIsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNTIsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjIsIDUyLCAyMTUsIDIyNiwgCisgICAgODUsIDI0NiwgMTEzLCA1MiwgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgNTIsIDIxNSwgMjI3LCAyLCA2NywgMTMwLCA4NSwgCisgICAgMjMzLCA0OCwgNTIsIDIxNSwgMjI3LCAyLCA2NywgMTMwLCA4NSwgMjIyLCAyNTAsIDIxNSwgMjI3LCAyLCA1MiwgNjcsIAorICAgIDEzMCwgMjU0LCAxODIsIDI1MCwgMTEsIDIxOCwgMTI4LCAyMTYsIDg3LCAyNTAsIDExLCAyNDAsIDI0NCwgMiwgMjQ0LCA1OCwgCisgICAgMjIxLCAyNDMsIDE2LCAzMSwgMjI3LCAyMDYsIDE2LCAzMSwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMTYsIDMxLCAyMTgsIAorICAgIDE1NCwgNjQsIDIxNiwgMjEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMTUsIDI0NCwgMTYsIDMxLCAyNDUsIDE0MCwgMTYsIDMxLCAyNTUsIDE2LCAxNiwgMzEsIDI1MiwgNTIsIDE2LCAzMSwgCisgICAgMjUyLCAxODcsIDE2LCAzMSwgMjAzLCAyMTcsIDkwLCAxNiwgMzEsIDIzMiwgMjIwLCAyNDQsIDE1MywgMTYsIDMxLCA2NywgCisgICAgMjE3LCA5MCwgMTYsIDMxLCAyNDQsIDI4LCAyNDQsIDE1MywgMTYsIDMxLCAyNTAsIDIzOCwgMjIzLCA1NiwgMTYsIDMxLCAKKyAgICAyMjAsIDMwLCAyMjYsIDEzNCwgMTYsIDMxLCAyMjAsIDMwLCAyMzYsIDYsIDE2LCAzMSwgMjQ4LCAxNTksIDIzMiwgMjEwLCAKKyAgICAyNDUsIDg1LCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxMTEsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDEwNSwgCisgICAgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTU4LCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNjEsIDE2LCAzMSwgCisgICAgMTUyLCAyNTUsIDE2LCAxNiwgMzEsIDIxNywgMTc4LCAyMzYsIDY5LCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjE1LCAyNDUsIAorICAgIDI1MSwgMjIxLCAxNiwgMzEsIDI1MSwgMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMzEsIDg2LCAxNiwgMzEsIDIxOCwgCisgICAgNjIsIDE2LCAzMSwgMjQ1LCA4NSwgMTYsIDMxLCAyNDQsIDExNSwgMjIwLCAxMzksIDE2LCAzMSwgMjQyLCAxMjgsIDIyMCwgCisgICAgMTM5LCAxNiwgMzEsIDIyMywgMTI0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTQsIDE3NCwgMjIwLCAxMzksIDE2LCAzMSwgMjE5LCAKKyAgICAyMCwgMTYsIDMxLCAyNDgsIDcxLCAyNTEsIDIyNCwgODcsIDIwNCwgMjUxLCAxNzEsIDE2LCAzMSwgMjI5LCA5MCwgMTYsIAorICAgIDMxLCAyNDgsIDcyLCAyNDQsIDI4LCAxMDUsIDE2LCAzMSwgMjE4LCA2MywgMjQ0LCAyOCwgMTA1LCAyMjYsIDI0NSwgMTAzLCAKKyAgICAyMjYsIDI0NSwgMjUwLCAxNjAsIDIyNiwgMjQ1LCAyNDQsIDMxLCAyMjYsIDI0NSwgMjM1LCAyMDAsIDI0NCwgMzEsIDIyNiwgCisgICAgMjQ1LCAyNTIsIDUwLCAyNTEsIDEzMiwgMjI2LCAyNDUsIDI1MSwgMTc4LCAyMTYsIDExMiwgMjI2LCAyNDUsIDI1MSwgMTYzLCAKKyAgICAyNTIsIDE1NCwgMjQwLCAxMTAsIDIyNiwgMjQ1LCAyNTQsIDEzNSwgNjQsIDI1MCwgMTM3LCAyMjYsIDI0NSwgMjQ4LCAxNjQsIAorICAgIDIyNiwgMjQ1LCAyNDksIDk1LCAyNTUsIDIwLCAyMjcsIDIwNCwgMjI2LCAyNDUsIDUyLCAyNTIsIDE4OCwgMzcsIDIxLCAKKyAgICAxMTEsIDM3LCAyMSwgMTA1LCAzNywgMjEsIDE1OCwgMzcsIDIxLCAxNjEsIDM3LCAyMSwgMTkwLCAzNywgMjEsIDE5NSwgMzcsIAorICAgIDIxLCAxOTksIDM3LCAyMSwgMTk2LCAzNywgMjEsIDIwMSwgMzcsIDU0LCAyMTYsIDI0OCwgMzcsIDU0LCAyNDUsIDE3NSwgCisgICAgMzcsIDU0LCAyMTUsIDc2LCAzNywgNTQsIDIxNiwgMTY1LCAzNywgNTQsIDI0NCwgMTMsIDM3LCA1NCwgMjQ0LCAxMjYsIDM3LCAKKyAgICA1NCwgMjE5LCAxMjEsIDM3LCA1NCwgMjIwLCAxMjEsIDM3LCA1NCwgMjQ1LCAxOTgsIDM3LCA1NCwgMjI4LCAyMDIsIDM3LCAKKyAgICA1NCwgMjE1LCA3MywgODgsIDIxLCAxMTEsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgCisgICAgMTkwLCA4OCwgMjEsIDE5NSwgODgsIDIxLCAxOTksIDg4LCAyMSwgMTk2LCA4OCwgMjEsIDIwMSwgODgsIDU0LCAyMTYsIAorICAgIDI0OCwgODgsIDU0LCAyNDUsIDE3NSwgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY1LCA4OCwgNTQsIDI0NCwgCisgICAgMTMsIDg4LCA1NCwgMjQ0LCAxMjYsIDg4LCA1NCwgMjE5LCAxMjEsIDg4LCA1NCwgMjIwLCAxMjEsIDg4LCA1NCwgMjQ1LCAKKyAgICAxOTgsIDg4LCA1NCwgMjI4LCAyMDIsIDg4LCA1NCwgMjE1LCA3MywgMjEsIDEyMywgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgCisgICAgMTEzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAxMzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NCwgMTksIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NCwgODksIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxOSwgMTI3LCAyNDMsIDIzNiwgCisgICAgMjE4LCAxMzEsIDIxLCAyMjAsIDEyNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ1LCAyMDEsIDI0MywgMjM2LCAyMTgsIAorICAgIDEzMSwgMjEsIDIyOCwgMjA1LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTYsIDI0OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICA1NCwgMjQ1LCAxNzYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNSwgNzcsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIAorICAgIDIxNiwgMTY2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDQsIDE0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDQsIAorICAgIDEyNywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE5LCAxMjIsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIyMCwgMTIyLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDUsIDE5OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjI4LCAyMDMsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNSwgNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgODgsIDcsIDQsIDEsIDYxLCA4OCwgNywgCisgICAgNCwgMSwgMjUzLCAxNjYsIDg4LCA3LCA0LCAxLCAyNTEsIDc0LCA4OCwgNywgNCwgMSwgMjQ5LCA2OCwgODgsIDcsIDQsIDEsIAorICAgIDc2LCA4OCwgNywgNCwgMSwgMjQ1LCAxNCwgODgsIDcsIDQsIDEsIDI0MywgMjA5LCA4OCwgNywgNCwgMSwgMjQyLCA2NywgCisgICAgODgsIDcsIDQsIDEsIDc0LCA4OCwgNywgNCwgMSwgMjM1LCAxNTAsIDg4LCA3LCA0LCAxLCAyMzUsIDI5LCA4OCwgNywgNCwgCisgICAgMSwgMTU2LCA4OCwgNywgNCwgMSwgMTk0LCA4OCwgNywgNCwgMSwgMjMwLCAzMCwgODgsIDcsIDQsIDEsIDc4LCA4OCwgNywgCisgICAgNCwgMSwgMjI2LCAxMDksIDg4LCA3LCA0LCAxLCAyMjQsIDk5LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5MywgODgsIDcsIDQsIDEsIDIxNywgMTUzLCA4OCwgNywgNCwgMSwgNjksIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIAorICAgIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDM3LCA3LCA2LCAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTY2LCAzNywgNywgNiwgMSwgMjUxLCA3NCwgCisgICAgMzcsIDcsIDYsIDEsIDI0OSwgNjgsIDM3LCA3LCA2LCAxLCA3NiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDMsIDIwOSwgMzcsIDcsIDYsIDEsIDI0MiwgNjcsIDM3LCA3LCA2LCAxLCA3NCwgMzcsIDcsIDYsIDEsIDIzNSwgMTUwLCAKKyAgICAzNywgNywgNiwgMSwgMjM1LCAyOSwgMzcsIDcsIDYsIDEsIDE1NiwgMzcsIDcsIDYsIDEsIDE5NCwgMzcsIDcsIDYsIDEsIAorICAgIDIzMCwgMzAsIDM3LCA3LCA2LCAxLCA3OCwgMzcsIDcsIDYsIDEsIDIyNiwgMTA5LCAzNywgNywgNiwgMSwgMjI0LCA5OSwgCisgICAgMzcsIDcsIDYsIDEsIDE1MywgMzcsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MywgMzcsIDcsIDYsIAorICAgIDEsIDY5LCAzNywgNywgNiwgMSwgMjE0LCAxMDUsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAzNywgNywgNiwgMSwgMjExLCAKKyAgICAxNzgsIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAzNywgNywgNCwgMSwgNjEsIDM3LCAKKyAgICA3LCA0LCAxLCAyNTMsIDE2NiwgMzcsIDcsIDQsIDEsIDI1MSwgNzQsIDM3LCA3LCA0LCAxLCAyNDksIDY4LCAzNywgNywgNCwgCisgICAgMSwgNzYsIDM3LCA3LCA0LCAxLCAyNDUsIDE0LCAzNywgNywgNCwgMSwgMjQzLCAyMDksIDM3LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICAzNywgNywgNCwgMSwgNzQsIDM3LCA3LCA0LCAxLCAyMzUsIDE1MCwgMzcsIDcsIDQsIDEsIDIzNSwgMjksIDM3LCA3LCA0LCAKKyAgICAxLCAxNTYsIDM3LCA3LCA0LCAxLCAxOTQsIDM3LCA3LCA0LCAxLCAyMzAsIDMwLCAzNywgNywgNCwgMSwgNzgsIDM3LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgMzcsIDcsIDQsIDEsIDIyNCwgOTksIDM3LCA3LCA0LCAxLCAxNTMsIDM3LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCAzNywgNywgNCwgMSwgMjE3LCAxNTMsIDM3LCA3LCA0LCAxLCA2OSwgMzcsIDcsIDQsIDEsIDIxNCwgMTA1LCAzNywgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTc4LCAzNywgNywgNCwgMSwgMjExLCAxMTcsIDM3LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDIxLCAyMTAsIDg2LCAxNTIsIDM3LCA1NCwgMjQ1LCAxNzUsIDE1MiwgMzcsIDU0LCAyMTUsIDc2LCAKKyAgICAxNTIsIDM3LCA1NCwgMjE2LCAxNjUsIDE1MiwgMzcsIDU0LCAyNDQsIDEzLCAxNTIsIDM3LCA1NCwgMjQ0LCAxMjYsIDE1MiwgCisgICAgMzcsIDU0LCAyMTksIDEyMSwgMTUyLCAzNywgNTQsIDIyMCwgMTIxLCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTgsIDE1MiwgMzcsIAorICAgIDU0LCAyMjgsIDIwMiwgMTUyLCAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMSwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgCisgICAgMzcsIDIxLCAxNTgsIDUyLCAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTkwLCA1MiwgMzcsIDIxLCAxOTUsIDUyLCAzNywgCisgICAgMjEsIDE5OSwgNTIsIDM3LCAyMSwgMTk2LCA1MiwgMzcsIDIxLCAyMDEsIDUyLCAzNywgNTQsIDIxNiwgMjQ4LCAxNTIsIDM3LCAKKyAgICAyMSwgMjEwLCA4NiwgOTMsIDk5LCAxOTMsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjQxLCAKKyAgICA1MSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIDIxNSwgMjEyLCAyNDgsIAorICAgIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDE5MywgCisgICAgMjI0LCAyNywgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDIyNCwgMjcsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDQsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTkzLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAKKyAgICAxOTMsIDEyMCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDEyMCwgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTE0LCAyMiwgNDQsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAxMjAsIAorICAgIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCisgICAgNDMsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDY3LCAyMiwgMjIyLCAKKyAgICAyNTQsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQ0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIAorICAgIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgMjIsIAorICAgIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQ0LCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTkzLCAKKyAgICAyMiwgNDQsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgNjcsIAorICAgIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgCisgICAgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIAorICAgIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDE5MywgMjIsIDQzLCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgCisgICAgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIAorICAgIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCAKKyAgICAxMjQsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCAxMjQsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCAKKyAgICA5OSwgMTkzLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIAorICAgIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCAKKyAgICA5MywgOTksIDEyMCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyMCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCAKKyAgICA1MSwgOTMsIDk5LCAxOTMsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzNiwgCisgICAgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDY3LCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTkzLCAyMiwgMjAzLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDEyNCwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgCisgICAgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIAorICAgIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzNiwgOTMsIAorICAgIDk5LCA0MywgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgCisgICAgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDEyMCwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDE5MywgMjIsIDEyNCwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDY3LCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCA0MywgMTkzLCAyMiwgNDQsIDY3LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxOTMsIDUyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxOTMsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIAorICAgIDUyLCAyNDEsIDUxLCA5MywgOTksIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIAorICAgIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIAorICAgIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCA2NywgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjU0LCA5MywgCisgICAgOTksIDY3LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTYsIDkzLCAKKyAgICA5OSwgNTIsIDY3LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIAorICAgIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxMjAsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA2NywgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIAorICAgIDI1NCwgMzQsIDEyNCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMjU0LCAzNCwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIAorICAgIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjAsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCAxOTMsIDI0OCwgNywgMjE0LCAxNjAsIDQ0LCAyMTYsIDQzLCAyMzIsIDExNCwgMjMzLCA1MiwgOTMsIAorICAgIDk5LCAxOTMsIDI0OCwgNywgMjE0LCAxNjAsIDQzLCAyMTYsIDQzLCAyMzIsIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAKKyAgICAyNDgsIDcsIDI0OSwgMTM4LCA5MywgOTksIDE5MywgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDIxNCwgMTYzLCA5MywgOTksIAorICAgIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNDYsIDExNCwgOTMsIDk5LCAxMTQsIDIzMywgNTIsIDkzLCA5OSwgMTE0LCAKKyAgICAyMTQsIDE2MywgOTMsIDk5LCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTkzLCA0MywgCisgICAgMjIsIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgNDMsIAorICAgIDIyLCAxOTMsIDIyMiwgMjU0LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkzLCAyNDYsIDExNCwgMjE0LCAxNjAsIDE2MywgCisgICAgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjI0LCAyNSwgMjUxLCAKKyAgICAyMjEsIDIzMiwgMTE0LCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyNDQsIDg5LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMzQsIDIyNCwgMjMsIDI1MSwgMjIxLCAyMzIsIAorICAgIDExNCwgMjIwLCAxMjQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjQzLCAyMzYsIDI1MSwgMjIxLCA0MywgMjIwLCAxMjQsIDI0NSwgCisgICAgMTk1LCAyNTEsIDIyMSwgNDMsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDQzLCAyNDQsIDg5LCAyNDUsIDE5NSwgMjUxLCAKKyAgICAyMjEsIDQzLCAxNjMsIDI1MSwgMjIxLCA0MywgMTM0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDQzLCAxMjMsIDIyNCwgMjUsIAorICAgIDI1MSwgMjIxLCA0MywgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDQ0LCAxNjMsIDI1MSwgMjIxLCAxOTMsIDIyMCwgOTQsIAorICAgIDIzMSwgODcsIDIyMCwgOTQsIDI0OCwgMTcwLCAyMjAsIDk0LCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIAorICAgIDQ0LCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgMjI0LCAyOSwgMjMyLCAxMTQsIDIzMywgNTIsIDIyNCwgMjksIDIzMiwgCisgICAgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDIzMywgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIAorICAgIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgCisgICAgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAKKyAgICAyMjQsIDI5LCAyMTQsIDE2MCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAyMzMsIAorICAgIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgNDMsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIDg1LCAKKyAgICAyMTgsIDIzNiwgNzEsIDIxOCwgMjM2LCA3MSwgNDIsIDIsIDIyMiwgMTg1LCAyNDksIDE2NywgNzEsIDQyLCAyNDksIDE5NSwgCisgICAgODUsIDQsIDIxOCwgMjM2LCA0MiwgMiwgMjAzLCAyNDQsIDExMywgNDIsIDIsIDY3LCAyNDQsIDExMywgNDIsIDIsIDIyNiwgCisgICAgMTQ4LCAyNDksIDEzNCwgMjQ0LCAxMTMsIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCA0NCwgMjQ0LCAKKyAgICAxMTMsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCA0MywgMjQ0LCAxMTMsIDQyLCAyLCAyNDgsIDcsIAorICAgIDI0OSwgMTM0LCAyNDQsIDExMywgODUsIDQsIDIxOCwgMjM2LCA3MSwgNCwgMjE4LCAyMzYsIDg1LCAyMjMsIDExOSwgNzEsIAorICAgIDIyMywgMTE5LCA4NSwgNjcsIDIyMywgMTE5LCA3MSwgNjcsIDIyMywgMTE5LCA4NSwgMjI2LCAxMCwgNzEsIDIyNiwgMTAsIAorICAgIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjYsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAKKyAgICAyMjYsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjYsIDcxLCAyMjIsIDI1MCwgCisgICAgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgNCwgMjE1LCAyMjYsIDcxLCAyMjIsIDI1MCwgNCwgMjE1LCAyMjYsIDg1LCAyMjIsIAorICAgIDI1MCwgMjI1LCAxMSwgNzEsIDIyMiwgMjUwLCAyMjUsIDExLCA4NSwgMjQ2LCAxMTMsIDIxNSwgMjI2LCA3MSwgMjQ2LCAKKyAgICAxMTMsIDIxNSwgMjI2LCA4NSwgMjQ2LCAxMTMsIDQsIDIxNSwgMjI2LCA3MSwgMjQ2LCAxMTMsIDQsIDIxNSwgMjI2LCA4NSwgCisgICAgMjMzLCA0OCwgMjE1LCAyMjYsIDcxLCAyMzMsIDQ4LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDQsIDIxNSwgMjI2LCA3MSwgCisgICAgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCAyMjUsIDExLCA3MSwgMjMzLCA0OCwgMjI1LCAxMSwgODUsIAorICAgIDI0OCwgMCwgNzEsIDI0OCwgMCwgNzEsIDI0OCwgMSwgMjQ5LCAxOTUsIDg1LCA0LCAyNDgsIDAsIDI0NCwgOTcsIDIzMiwgCisgICAgMTEwLCA3MSwgMjUwLCA0MywgMjQ2LCAxMjYsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDY3LCAyNDQsIDExMywgMjUxLCAxMTksIAorICAgIDg1LCAyNTAsIDQzLCAyNTAsIDQ0LCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgNDQsIDE2MywgMjUxLCAKKyAgICAyMjksIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgMjU0LCAxNjQsIAorICAgIDI1MSwgOTYsIDIxNCwgMTYwLCA0MywgMjI0LCAyOSwgMjUxLCAyMjksIDQzLCAxNjMsIDg1LCAyNTAsIDQzLCA0NCwgMTYzLCAKKyAgICA4NSwgMjUwLCA0MywgMjM1LCAyMDEsIDI1MSwgMTIxLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAxNjMsIAorICAgIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMTQsIDE2MCwgCisgICAgNDMsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAyMzIsIDExNCwgNDMsIDIyNCwgMjksIDI1MCwgNDEsIAorICAgIDI1NCwgMzMsIDIxNCwgMTYwLCAxNjMsIDI1MCwgNDMsIDIzMiwgMTE0LCAxNjMsIDI1MCwgNDMsIDg1LCAyMzIsIDExNCwgCisgICAgNDQsIDIxNSwgMjI2LCA4NSwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjYsIDg1LCAKKyAgICAyMTQsIDE2MCwgNDQsIDIxNSwgMjI2LCA3MSwgMjUxLCAxMjEsIDQyLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDQ0LCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAKKyAgICAyMzIsIDExNCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNzEsIDQyLCAyLCA2NywgMjUxLCAyNDAsIDIzMiwgMjE5LCAKKyAgICA3MSwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCAyNDcsIDEyOCwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCA0MywgMTYzLCAyNTEsIAorICAgIDIyOSwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgMjMzLCA5MSwgMjUwLCA0MywgNzEsIDQyLCAKKyAgICAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgMjMyLCAxMTQsIDQzLCAyMjQsIDI4LCA3MSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAKKyAgICAyMTQsIDE2MCwgNDMsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCAyNTAsIAorICAgIDQ0LCAyLCAyMzIsIDExNCwgNDQsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjgsIDIxNCwgCisgICAgMTYwLCA0MywgMjE1LCAyMjYsIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDIzMiwgMTE0LCA0MywgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzEsIDg3LCAyMTgsIDIzNiwgODUsIDIzMSwgODcsIDIxOCwgMjM2LCA3MSwgMjMxLCA4NywgNCwgMjE4LCAyMzYsIDg1LCAKKyAgICAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgMjMyLCAxMTQsIDQ0LCAyMTUsIDIyNiwgODUsIDIxOCwgMzksIDIsIDIyMywgMTM1LCAKKyAgICAyNDksIDI1NSwgMjE0LCAxOTQsIDIxOSwgNjIsIDI0OSwgMjMwLCA4NSwgMjE4LCAxNTgsIDcxLCAyMTgsIDE1OCwgMjMyLCAKKyAgICAyMzQsIDIxNiwgMTMzLCAyMTgsIDM4LCAyNTMsIDI0MiwgMjI4LCA3NiwgMjQ4LCA0NiwgMjI4LCA3NiwgMjQ5LCAyMDMsIAorICAgIDIyNiwgMTY3LCA4NSwgMjE3LCAxLCA3MSwgMjE3LCAxLCAyNTIsIDE2NCwgMjUxLCAxNzEsIDI1MiwgMTY0LCA5MywgMiwgCisgICAgMjUwLCAxMzcsIDI1MiwgMTY0LCA5MywgMiwgMjExLCAxNzgsIDIyMiwgMCwgMjE0LCAxOTUsIDIsIDIyMywgMTYzLCAyNDYsIAorICAgIDkyLCAyNDAsIDI1MCwgMjUyLCAzMCwgNzEsIDIyMCwgNCwgMjI1LCAxMDQsIDg1LCAyMjAsIDQsIDIyNSwgMTA0LCAyMjAsIAorICAgIDg5LCAyMjMsIDUyLCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAyMzUsIDI1MSwgMTIxLCA4NSwgNDMsIDIyNSwgMTAsIDIzNSwgCisgICAgMjQ5LCA4NSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTIwLCAyMjUsIAorICAgIDEwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjM1LCAyNDksIDIxOSwgCisgICAgMTAzLCAyMiwgMjQ5LCAxMzcsIDI1MCwgMjI3LCA1MCwgMjIzLCAxNzUsIDUwLCAyNTEsIDI0NywgNTAsIDI1MSwgMzMsIAorICAgIDI1NCwgMTEwLCAyMjYsIDE0OSwgMjQ5LCAxMzgsIDI1MCwgMTE5LCAyMjMsIDQwLCAyNDksIDEzOSwgNjQsIDIzMiwgMTI0LCAKKyAgICAyNDksIDEzOSwgNjQsIDIzNSwgMTIyLCAyMTgsIDE1OSwgMjIsIDI0OSwgMTQ0LCAyNDQsIDE3NiwgODcsIDI1NSwgMSwgCisgICAgMjIwLCA5MSwgMjQyLCAyOSwgMjIsIDIxOSwgMTkxLCAyMjUsIDIyMywgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIAorICAgIDIxNiwgMzEsIDI0MSwgMjMwLCAyMTUsIDIxNiwgMzEsIDIzMywgMTEzLCAyMTUsIDIxNiwgMzEsIDI0NCwgMTA0LCAyMTUsIAorICAgIDIxNiwgMzEsIDIxNiwgMTM0LCAyMTUsIDIxNiwgMzEsIDIxMSwgMjM5LCAyMTUsIDIxNiwgMzEsIDIxMiwgNDAsIDIxNSwgCisgICAgMjE2LCAzMSwgMjMwLCAxMjAsIDIxNSwgMjE2LCAzMSwgMjQ1LCAyMzEsIDIxMiwgMSwgNjQsIDI0OCwgMjYsIDcxLCAyNDMsIAorICAgIDI0NywgMjQ0LCAxOTgsIDcxLCAyMTksIDc2LCAyNDQsIDE5OCwgODUsIDIxOSwgNzYsIDI0NCwgMTk4LCA3MSwgMjE4LCAzOSwgCisgICAgMiwgMjIzLCAxMzUsIDI0NCwgMTAwLCAyMjQsIDI1LCAyMzAsIDEzMywgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzMsIAorICAgIDIzMSwgNTksIDI0NCwgMTQ2LCA1MCwgMjQ1LCAyMzEsIDIzMSwgMTk1LCA1MCwgMjM1LCA0NCwgMjIxLCAyMjIsIDIxNCwgCisgICAgMTQ1LCAyMjksIDk4LCAyMjUsIDIzLCAyNTQsIDIwLCAyMTcsIDQxLCAyNDMsIDU5LCAyNTEsIDExLCAyMzMsIDI1LCAyMTMsIAorICAgIDE1MCwgMjMyLCAyNDQsIDIyMSwgMTkzLCAyMjIsIDIxLCAyNTEsIDAsIDI1NCwgNTAsIDIyNSwgNTUsIDcxLCAyNTAsIDEyNSwgCisgICAgMjM0LCA4NCwgNzEsIDI1MCwgMTI1LCAyMjQsIDE3LCA3MSwgMjUwLCAxMjUsIDIyMiwgMTk3LCA3MSwgMjUwLCAxMjUsIAorICAgIDI1MSwgMjM5LCA3MSwgMjUwLCAxMjUsIDIzNCwgMzYsIDcxLCAyNTAsIDEyNSwgMjI1LCAyMzUsIDg1LCAyNTAsIDEyNSwgCisgICAgMjM0LCA4NCwgODUsIDI1MCwgMTI1LCAyMjQsIDE3LCA4NSwgMjUwLCAxMjUsIDIyMiwgMTk3LCA4NSwgMjUwLCAxMjUsIAorICAgIDI1MSwgMjM5LCA4NSwgMjUwLCAxMjUsIDIzNCwgMzYsIDg1LCAyNTAsIDEyNSwgMjI1LCAyMzUsIDg1LCAyMTksIDE4LCAKKyAgICAyMTgsIDUxLCA3MSwgMjQxLCAyMzUsIDIxOCwgNTEsIDcxLCAyNDgsIDEsIDIxOCwgNTEsIDg1LCAyNDksIDI1MywgMjE4LCAKKyAgICA1MSwgNzEsIDIxOSwgMTgsIDIxOCwgNTEsIDg1LCAyNDEsIDIzNSwgMjE4LCA1MSwgODUsIDI0OCwgMSwgMjE4LCA1MSwgNzEsIAorICAgIDI0OSwgMjUzLCAyMTgsIDUxLCAyNDAsIDI1MCwgMjE4LCAyNDAsIDIyNCwgMjUsIDIyOCwgNTIsIDI0NSwgMTk3LCAyMjgsIAorICAgIDUyLCAyNTIsIDgxLCAyNDUsIDE5NywgMjI4LCA0NywgMjUyLCA4MSwgMjE5LCAxMjAsIDIyOCwgNDcsIDIzMCwgNjIsIDI0NCwgCisgICAgNzQsIDUwLCAyMzAsIDYyLCAyMjksIDE5MywgNTAsIDIzMCwgNjIsIDIyMCwgNzgsIDUwLCAyMTIsIDksIDE4MywgMjQ5LCAKKyAgICAxMzgsIDI0NSwgMjI4LCAxODMsIDI0OSwgMTM4LCAyMTQsIDE3MSwgMjIzLCAxMTUsIDg3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ4LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQ3LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ2LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQ1LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ0LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQzLCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQyLCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyNDMsIDU3LCAyMzEsIDE0MywgODUsIDIxNCwgMTcxLCAyMjMsIAorICAgIDExNSwgODcsIDIyMywgMTE2LCAyMjYsIDI0LCA4NywgMjI2LCAwLCAyMjYsIDI0LCA4NywgMjI1LCAxNzcsIDIyNiwgMjQsIAorICAgIDUwLCAyMTEsIDI1NSwgODcsIDI0NywgMjQ5LCAyNDQsIDE5NywgMjQ3LCAyNDksIDI0NCwgMTk2LCAyNDcsIDI0OSwgMjQ0LCAKKyAgICAxOTUsIDI0NywgMjQ5LCAyNDQsIDE5NCwgMjQ3LCAyNDksIDI0NCwgMTkzLCAyNDcsIDI0OSwgMjQ0LCAxOTIsIDcxLCAyNTAsIAorICAgIDQ0LCAyLCA1OSwgMjIyLCAyNTQsIDcxLCAyNTAsIDQ0LCAyLCAxMTMsIDI0NywgMTI2LCA4NSwgMjUwLCA0NCwgMiwgNzEsIAorICAgIDU5LCAyMjIsIDI1NCwgODUsIDI1MCwgNDQsIDIsIDExMywgNzEsIDI0NywgMTI2LCAyMzAsIDE0NywgMzEsIDIxMSwgNjksIAorICAgIDIzMCwgMTQ3LCAzMSwgMjEwLCAyNTMsIDI0NywgMjMyLCAzMSwgMjQyLCAxMzgsIDIxMSwgNjksIDI0NywgMjMyLCAzMSwgCisgICAgMjMzLCAxOSwgMjEwLCAyNTMsIDI0NywgMjMyLCAzMSwgMjMzLCAxOSwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAyNDIsIAorICAgIDEzOCwgMjEwLCAyNTMsIDcxLCAyNDQsIDgxLCA4NSwgMjQ0LCA4MSwgMjQyLCAyOSwgMjIsIDIyNSwgMTA3LCAyNTQsIDEyOCwgCisgICAgMjQ5LCAxMzYsIDIxNywgMjM2LCAyMTgsIDE2NiwgNjQsIDI1NCwgMjM1LCAyMjEsIDIwOCwgMjU0LCAxNzgsIDI0NCwgNTksIAorICAgIDI0MywgNjcsIDIxOCwgMTY2LCA2NCwgMjQxLCAyMDksIDI1MywgMjA3LCA4NywgMjQ0LCA3MCwgMjI2LCAxMzAsIDcxLCAKKyAgICAyMTgsIDE1OCwgMTM0LCAyMzIsIDIxNCwgMjQ5LCAxODMsIDIyMiwgMjU0LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgCisgICAgMjMzLCA1MiwgMjEyLCA1MCwgNTAsIDEyNSwgMjEzLCAxMzAsIDUwLCAyNDYsIDExOCwgMjQ0LCAxNDYsIDUwLCAyNDYsIAorICAgIDExOCwgMjMxLCAxOTUsIDUwLCAyMzUsIDIxMCwgMjQ0LCAxNDYsIDIyLCAyMzEsIDE5NSwgNTAsIDIzMSwgMTk1LCAyMiwgCisgICAgMjQ0LCAxNDYsIDUwLCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDUwLCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDIyLCAyMzEsIAorICAgIDE5NSwgMjIsIDI0NCwgMTQ2LCA1MCwgNjcsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIwMywgMjMxLCAxOTUsIDIsIAorICAgIDIxOCwgMTA1LCA1MCwgMjMxLCA4NywgNzEsIDI1MCwgNDMsIDIzMSwgODcsIDg1LCAyNTAsIDQzLCAyMzEsIDg3LCA0LCA3MSwgCisgICAgMjUwLCA0MywgMjMxLCAxNTgsIDg3LCAyNDcsIDE3NSwgODcsIDIxNCwgMTY5LCAyMjUsIDI1NSwgODcsIDI0OSwgMjM5LCAKKyAgICAyNDMsIDIzMSwgMjE0LCAxNDEsIDIyOSwgOTMsIDI1MCwgMTY5LCAyMjYsIDY1LCAyMzUsIDUwLCAyMTMsIDE4NSwgMjUwLCAKKyAgICAxMDEsIDg1LCAyMzAsIDEzNCwgMjMyLCAyMzEsIDIyMCwgMTE0LCAyMjAsIDE0OSwgMjI0LCA4LCAyMjAsIDEzMiwgMjE5LCAKKyAgICA1NywgMjUyLCAxNjcsIDI1MiwgMTM0LCA5MiwgMjM0LCAxNDQsIDcxLCAyNDYsIDEwMSwgMjMxLCAxOTAsIDcxLCAyNDYsIAorICAgIDEwMSwgMjM0LCA4NCwgODUsIDI0NiwgMTAxLCAyMzEsIDE5MCwgODUsIDI0NiwgMTAxLCAyMzQsIDg0LCAyMTksIDYzLCAKKyAgICAyMTEsIDIzMCwgMjE5LCA2NiwgMjE4LCAzOSwgMjUyLCA1OSwgMjQ5LCAyNTUsIDIyMywgMTYyLCA4NSwgMjE5LCA2MiwgCisgICAgMjE2LCAxMzUsIDI1MCwgMCwgMjIsIDIyMywgMTYyLCAyMTUsIDk0LCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgMjE1LCA5NCwgCisgICAgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDcxLCAyNDgsIDEsIDIzNiwgNywgMjE4LCAyMzYsIDI0OSwgMTMzLCAyMzMsIDk3LCAKKyAgICAyNDcsIDIwMSwgMjUwLCAyNTIsIDIyNiwgMTcwLCAyMjUsIDEwNywgMjUwLCAyNTMsIDIxOSwgOTAsIDI0MSwgMjE5LCAyLCAKKyAgICA3MSwgMjQ5LCAxMzgsIDM3LCAyNDksIDEzMywgMjMzLCA5NywgMjUwLCAxNjEsIDIyOCwgODAsIDI0NSwgMTMyLCAyNTQsIAorICAgIDE0OSwgMjI2LCAxOTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgODUsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgCisgICAgNzEsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgODUsIDQzLCAyMzMsIDk4LCAyMzEsIDU4LCA3MSwgNDMsIAorICAgIDIzMywgOTgsIDIzMSwgNTgsIDI0NiwgOTcsIDIxOSwgODQsIDUwLCAxMTQsIDcxLCAyNDYsIDExMywgMjE1LCAyMjYsIDQzLCAKKyAgICAyNTAsIDgsIDI0NSwgMTMyLCA5MiwgMjIyLCAwLCAyNDQsIDE4MywgMjQ4LCA3LCAyMzYsIDcsIDcxLCAyNTAsIDQ0LCAyMzYsIAorICAgIDcsIDg1LCAyMTgsIDIzNiwgODUsIDIxNSwgMTkzLCAyMjMsIDYzLCA0MywgMjQ1LCAxMzEsIDIyMywgNjMsIDQzLCAyNDUsIAorICAgIDEzMCwgMjUzLCAyMTksIDE2LCAzMSwgMjE0LCAxNDUsIDExNCwgMjUwLCA0NCwgMiwgMjE4LCAxMDUsIDIyLCAxMTMsIDE3MCwgCisgICAgNDgsIDIyNSwgMTkyLCAyMjIsIDI1MSwgMjM1LCAyMTIsIDIyNSwgMTkyLCAyMzMsIDQ5LCAyMzUsIDIxMiwgMjI1LCAxOTIsIAorICAgIDIzNSwgMjAwLCAyMjUsIDE5MiwgODUsIDI0OSwgMTM5LCAyMjYsIDIwMSwgMjIwLCAzMSwgMjIwLCAxOSwgMjE5LCAyMzEsIAorICAgIDI1MCwgNjksIDI1MCwgMjM0LCAyNDEsIDE2NCwgMjE5LCAxMjgsIDI0MywgNjgsIDIxMSwgMjMwLCAyNDAsIDIyNywgMjQzLCAKKyAgICA2OCwgMiwgMjQyLCAxOSwgMjMxLCAxNzgsIDE2LCAzMSwgMjMyLCAyMzUsIDIzMCwgMTIwLCAyMTQsIDE5NSwgMjI2LCAyMDEsIAorICAgIDI0MiwgMTI5LCAyNDQsIDIwLCAyNDQsIDgyLCAyMzYsIDcsIDI0MSwgNjYsIDI0NCwgMTM3LCAyMjIsIDE2LCA0MiwgMjQ0LCAKKyAgICAxOSwgMjQ5LCAxNjcsIDIxOSwgMTA2LCAyNDAsIDExOSwgMjE5LCAxMDksIDIyNSwgMTcxLCAyLCAyNTIsIDE2NywgMjE2LCAKKyAgICAyNDMsIDIzNSwgMTM3LCAyNTIsIDE1NCwgODcsIDI0MSwgMjM4LCAyNDIsIDE0MCwgODcsIDI0MywgMjM5LCAyMjQsIDE0NSwgCisgICAgMjQ5LCAxMTEsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDcxLCAyNDQsIDgyLCAyLCAyMDMsIDIzMCwgMjI5LCA4NSwgMjE4LCAKKyAgICAxMDYsIDIxNCwgMTYwLCAyNTEsIDIyNSwgMjIxLCAxOTUsIDg1LCAyMjEsIDE5NSwgMjMyLCAxMTQsIDI1MSwgMjI1LCAyMjEsIAorICAgIDE5NSwgNzEsIDIyMSwgMTk1LCA3MSwgMTE0LCAyNTAsIDEzOCwgNzksIDIxNywgMiwgMjMyLCAxNjAsIDUwLCAyMTcsIDU0LCAKKyAgICAyNDYsIDk2LCAyNTQsIDIwMCwgMjQ1LCAxMjcsIDIyMywgMTYwLCAyNDQsIDkzLCAyMjMsIDE2MCwgMjQyLCAyMiwgMjEzLCAKKyAgICAxNzQsIDI0MiwgMjIsIDIxMSwgMTk4LCAyNDIsIDIyLCAyMzIsIDExNCwgNDQsIDIyNSwgMjAxLCAyMjUsIDIwMSwgMjE0LCAKKyAgICAxNjAsIDQ0LCAyMjUsIDIwMSwgNzEsIDIyOCwgMjM1LCA4NSwgMjI4LCAyMzUsIDI1MCwgMTM4LCA3OSwgMTE0LCAyNTAsIAorICAgIDEzOCwgNzksIDIzMCwgODksIDIxMSwgMTc4LCAxMTQsIDIzMCwgODksIDIxMSwgMTc4LCAyNTIsIDE2NCwgMjExLCAxNzgsIAorICAgIDExNCwgMjUyLCAxNjQsIDIxMSwgMTc4LCAyMjYsIDEzMCwgMjYsIDI0OSwgMTM4LCAxMTQsIDI2LCAyNDksIDEzOCwgMjA0LCAKKyAgICAyNTAsIDE4MywgMjQ5LCAxMzgsIDExNCwgMjA0LCAyNTAsIDE4MywgMjQ5LCAxMzgsIDcsIDI0OSwgMTM4LCAyMjAsIDkzLCAKKyAgICA3MSwgNywgMjQ5LCAxMzgsIDIyNiwgMTMwLCA3LCAyNDksIDEzOCwgMjMxLCAxOTIsIDI0OSwgMTM4LCAyMTgsIDE1OSwgNjQsIAorICAgIDI0OCwgMTU3LCAyNDQsIDE5LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NCwgMTksIDI1MiwgMTY1LCAyNTMsIDIyNCwgMjQ0LCAxOSwgMjQ5LCAyNTEsIDI1MywgMjI0LCA4NSwgMjQ0LCAxOSwgCisgICAgMjI1LCAxMiwgMjE4LCAxNTgsIDcxLCAyNDQsIDE5LCAyMjUsIDEyLCAyMTgsIDE1OCwgMjE5LCAxMywgMjE4LCAxMTMsIAorICAgIDIyNiwgMTMwLCA3MSwgMjE4LCAxNTgsIDM3LCA3MSwgMjE4LCAxNTgsIDIwNCwgMjUwLCAxODMsIDg1LCAyMTgsIDE1OCwgCisgICAgODUsIDI1MCwgMTgzLCA3MSwgMjE4LCAxNTgsIDIyNiwgMTMwLCA4NSwgMjE4LCAxNTgsIDExNCwgMjI2LCAxMzAsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjI1LCA2MywgMjE4LCAxNTgsIDIyMCwgOTMsIDcxLCAyMTgsIDE1OCwgMTE0LCAyNTMsIDIyNCwgMjA0LCAKKyAgICAyNTAsIDE4MywgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMTgsIDI0NiwgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMjUsIDEyLCA4NSwgCisgICAgMjE4LCAxNTgsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMjUsIDYzLCAyMTgsIDE1OCwgMjE5LCAxMjcsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyMywgMTE3LCA4NSwgMjE4LCAxNTgsIDExNCwgMjQ1LCAyMDEsIDIyNSwgCisgICAgMTIsIDIyMywgMTE3LCA4NSwgMjE4LCAxNTgsIDIxNSwgNzcsIDIyNSwgMTIsIDg1LCAyMTgsIDE1OCwgMjE5LCAxMjIsIAorICAgIDIyNSwgMTIsIDI1MywgMjI0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjA0LCAyNTAsIDE4MywgMjE3LCAxNiwgMjUzLCAyMjQsIAorICAgIDExNCwgMjE3LCAxNiwgMjUzLCAyMjQsIDIxOSwgMTI3LCAyMjUsIDE2MCwgODUsIDIyLCA3MSwgMjQ0LCA2MiwgODUsIDI0NCwgCisgICAgNjIsIDcxLCAyNDQsIDYyLCAyNDUsIDIwMSwgMjI1LCAxNjAsIDIyNiwgMTMwLCA4NSwgMjQ0LCA2MiwgMzcsIDIwNCwgMjUwLCAKKyAgICAxODMsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMTgsIDE1OCwgMTE0LCAyMTcsIDE2LCAyMjUsIDYzLCAyNTMsIDIyNCwgMjE5LCAKKyAgICA2NCwgMjE2LCAxMDYsIDIxNSwgMjE5LCAyMTksIDY0LCAxMTQsIDI1MCwgMTIyLCAyMTksIDY0LCAyMTksIDE1LCAxMTQsIAorICAgIDIxOSwgMTUsIDI1MiwgMTY1LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxNywgMTYsIDIyNCwgMTc0LCAyNTMsIDIyNCwgMTE0LCAKKyAgICAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAyNDksIDEzOSwgNzksIDIyMCwgOTMsIDcxLCAyNTAsIAorICAgIDQzLCAxNTIsIDkyLCAyNDksIDEzOSwgNzksIDIzMiwgMTE0LCA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMTQsIDE2MCwgCisgICAgNDQsIDI0NiwgOTQsIDcxLCAyMTgsIDIzNiwgMjMyLCAxMTQsIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjIwLCA5MywgNzEsIDIxOCwgMjM2LCA4NSwgMjI0LCAxNiwgMTY0LCAyMjYsIDE1MSwgNzEsIDIyNCwgMTYsIDE2NCwgCisgICAgMjI2LCAxNTEsIDcxLCAyNDUsIDM5LCAxNjQsIDIyNiwgMTUxLCA4NSwgMjQ4LCAxLCAyMzAsIDE4NywgNzEsIDIxMSwgMTc4LCAKKyAgICAxMTQsIDI0NSwgMzksIDE2NCwgODcsIDE5MywgNjcsIDEzMCwgMjMxLCA4NywgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIAorICAgIDIxOSwgMTU3LCAyMTUsIDk0LCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDIxOSwgMTU3LCAyNDksIAorICAgIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDUyLCAyMTUsIDk0LCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAxMTQsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDEyMSwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCA1MiwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMjQ5LCA5OSwgMjE4LCAxNDIsIDIyNiwgMTksIDUsIDIyNiwgMTUxLCAxMTQsIDI0NSwgMzksIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgMjQxLCAyMzUsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDExNCwgODUsIDI0MSwgMjM0LCAyMjIsIDE4OSwgCisgICAgMTE0LCA4NSwgMjQxLCAyMzUsIDI1MSwgMTIxLCAyNDQsIDYzLCAyNDEsIDIzNCwgMjIyLCAxODksIDI0NCwgNjMsIDI0MSwgCisgICAgMjM1LCAyNTEsIDEyMSwgMjMxLCA4NywgNDMsIDIyNiwgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDQ0LCAyMjYsIDgsIDIyNiwgCisgICAgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjQ0LCA3MSwgNDQsIDIyNiwgCisgICAgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDIzMywgNDgsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIAorICAgIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIzMywgNDgsIDI1NCwgMTE4LCAyMjQsIDEsIAorICAgIDE2NCwgMjI2LCAxNTEsIDExNCwgMjIyLCAyNTAsIDI1NCwgMTE4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjMzLCAKKyAgICA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIAorICAgIDE1MSwgMTkzLCA0MywgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDE5MywgNDQsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIDg3LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCAKKyAgICA4NywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTExLCAyNDcsIAorICAgIDIxMiwgMTUyLCAzNywgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxNTgsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgCisgICAgMTYxLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTUsIDI0NywgMjEyLCAKKyAgICAxNTIsIDM3LCAyMSwgMTk5LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAyMDEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAzNywgCisgICAgMzUsIDIxLCAxMDUsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxNTgsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgCisgICAgMjEyLCAzNywgMzUsIDIxLCAxOTAsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAKKyAgICAxOTksIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxOTYsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAyMDEsIDI0NywgMjEyLCAzNywgCisgICAgMzUsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTExLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIAorICAgIDIxLCAxMDUsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTYxLCAKKyAgICAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTAsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDM1LCAyMSwgMTk5LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTYsIDI0NywgMjEyLCAxNTIsIDM3LCAKKyAgICAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCA1NCwgMjE2LCAyNDgsIDExNCwgMjExLCAyNDYsIDk3LCA3NSwgCisgICAgMTE0LCA5NiwgNTAsIDExNCwgMjMwLCAxODcsIDUwLCAxMTQsIDI0NywgMTc3LCA1MCwgMTE0LCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDExNCwgOTcsIDc1LCAxMTQsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjQ2LCAxMDYsIDIyNSwgMTQsIDk3LCAKKyAgICA3NSwgMTE0LCAyMjIsIDE4NiwgOTcsIDc1LCAyMTUsIDIyNSwgOTcsIDc1LCAxMTQsIDIxNSwgMjI1LCA5NywgNzUsIDI0OCwgCisgICAgMTYzLCAyMTUsIDIyNSwgOTcsIDc1LCAxMTQsIDI0OCwgMTYzLCAyMTUsIDIyNSwgOTcsIDc1LCA4NSwgOTcsIDc1LCAyMTYsIAorICAgIDE0NSwgMjE2LCAxMywgOTcsIDI1NCwgMSwgMjE2LCAxNDUsIDI1MSwgMTgxLCA5NywgMjU0LCAxLCA4NSwgOTcsIDI1NCwgMSwgCisgICAgMTE0LCA4NSwgMjQ5LCA5OSwgMjQ2LCAxMTIsIDIyLCA5NywgNzUsIDExNCwgODUsIDI0OSwgOTksIDIxNCwgMTUzLCAyMiwgCisgICAgOTcsIDc1LCAyMTgsIDIzMywgODUsIDk3LCA3NSwgMTE0LCAyNDksIDIxNCwgODUsIDk3LCA3NSwgMjIyLCAyNDksIDcxLCAKKyAgICA5NywgNzUsIDIzMywgNDcsIDcxLCA5NywgNzUsIDI1MiwgMTkxLCAyMjAsIDkzLCA3MSwgOTcsIDc1LCAyNDMsIDI0OSwgCisgICAgMjIwLCA5MywgNzEsIDk3LCA3NSwgMTE0LCAyMzIsIDExNCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDExNCwgMjE0LCAxNjAsIAorICAgIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAyMjgsIDU0LCAyMzIsIDExNCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDI0OSwgMTA3LCAKKyAgICAyMzIsIDEyOSwgMjI4LCA1NCwgMjE0LCAxNjAsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAzNywgMTE0LCA3MSwgOTcsIDc1LCAKKyAgICAyMTEsIDI1MiwgOTcsIDc1LCAyNTEsIDIyOCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyNTEsIDIyOCwgOTcsIDc1LCAyNTEsIAorICAgIDIyOCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDExNCwgCisgICAgMjUxLCAyMjgsIDk3LCA3NSwgMTE0LCAyNTEsIDIyOCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTcsIDE4LCA5NywgNzUsIAorICAgIDExNCwgMjE3LCAxNywgOTcsIDc1LCAyMTIsIDE4LCA5NywgNzUsIDExNCwgMjEyLCAxOCwgOTcsIDc1LCAyMjYsIDE3NiwgCisgICAgOTcsIDc1LCA1MiwgMjQ5LCAxMDcsIDIzMiwgMTI5LCAxMzQsIDI0NywgMjIyLCAyNTQsIDExNywgNzEsIDIxNSwgMjI3LCAKKyAgICAyNDksIDE5NSwgNCwgNzEsIDIxNSwgMjI2LCAyMjUsIDE3NCwgMjA0LCAyMTgsIDY0LCAyMDQsIDIxOCwgMjIsIDQzLCAyMjIsIAorICAgIDkyLCAyNTIsIDE4MSwgMjQ4LCA2OCwgNDQsIDIyMiwgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCAxNzcsIDIsIDU5LCAyMzUsIAorICAgIDIyMiwgMjIzLCA1MywgMjE5LCA0OSwgMjI0LCAyMDQsIDIxOCwgNjQsIDIxOCwgMjMsIDIyNCwgMjA0LCAyMTksIDQ4LCA2NywgCisgICAgMjUyLCAxNDksIDIsIDIwMywgOTEsIDExLCAyMjIsIDIzMSwgMjQ4LCA2LCAyMDAsIDI0NywgMTc2LCAxMSwgMjQ0LCAxODMsIAorICAgIDI0OCwgNiwgOTIsIDIzMiwgMTUyLCAyNTQsIDEyNiwgOTIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgNzEsIDI0OCwgMSwgMiwgCisgICAgMjUwLCAxODEsIDI0NywgMTI4LCAyMiwgMiwgMjQ3LCAxMjgsIDI0NSwgMTc4LCA2NCwgMjI2LCAxNzQsIDIxNCwgMTUyLCAKKyAgICAyMzIsIDExNCwgNDQsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgMjE0LCAxNjAsIDQzLCAyNDksIDE2OSwgMiwgMjQ3LCAxMjgsIAorICAgIDQzLCAyMjYsIDEzMiwgMjM1LCA3MiwgNDQsIDIyNiwgMTMyLCAyMzUsIDcyLCAyNDMsIDIzNiwgMjI2LCAxMzIsIDIzNSwgCisgICAgNzIsIDIzMywgOTEsIDEyMCwgMjE3LCA4OCwgMjMzLCA5MSwgMTI0LCAyMTcsIDg4LCA0MywgMjIsIDQ0LCA1MiwgMjE1LCAKKyAgICA5MywgNDMsIDIyLCA0NCwgMjE3LCA4OCwgNDMsIDIzMCwgOTIsIDIwMCwgNDQsIDIxNywgODgsIDIwMCwgNDMsIDIxNywgODgsIAorICAgIDEyMCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNDgsIDIzMiwgMTExLCAyNDcsIDE4MSwgMjUxLCA4NiwgMjAzLCAyMjIsIDEzNSwgCisgICAgNzEsIDI0OSwgMjEzLCAyNDgsIDAsIDcxLCAyNDksIDIxMywgMjQ4LCAxLCAyLCAxNDAsIDIxNiwgMTE1LCA3MSwgMjQ5LCAKKyAgICAyMTMsIDI0OCwgMSwgMiwgOTcsIDIxNiwgMTE1LCA3MSwgNDIsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCA0MiwgMiwgOTcsIAorICAgIDIxNiwgMTE1LCAxMSwgNDMsIDcxLCA0MiwgMTI3LCAxMSwgNDQsIDcxLCA0MiwgMTI3LCAxMSwgNDMsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDExLCA0NCwgMjU0LCAxMTgsIDEyNywgMTEsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgMTEsIDQ0LCA1MiwgMjU0LCAKKyAgICAxMTgsIDEyNywgMTEsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDExLCA0NCwgNzEsIDIxNiwgNywgMjIwLCA1NSwgCisgICAgMTI3LCAxMSwgNDMsIDI0NCwgNzEsIDIyNiwgNywgMTEsIDQ0LCAyNDQsIDcxLCAyMjYsIDcsIDIxNCwgMTUzLCAyMjQsIDI3LCAKKyAgICA3NSwgMjQ2LCAxMTIsIDIyNCwgMjcsIDc1LCAyNTQsIDk2LCAyNDMsIDEwNSwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDI0MywgCisgICAgMTA1LCAyNTAsIDQ0LCA3NSwgNDQsIDgwLCAyLCAzNywgMjI1LCAyNSwgMjAwLCAxNDAsIDc1LCAyMDAsIDk3LCA3NSwgMjAwLCAKKyAgICA0MywgNDQsIDc1LCAyMDAsIDE0MCwgNTIsIDc1LCAyMDAsIDk3LCA1MiwgNzUsIDIwMCwgNDMsIDQ0LCA1MiwgNzUsIDIwMCwgCisgICAgMTQwLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgMTQwLCA1MiwgODAsIAorICAgIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDUyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgMjE4LCAyMzIsIDc1LCA0NiwgCisgICAgNDcsIDI1MSwgMjIzLCA0NiwgNDcsIDI0NywgMTI1LCA0NiwgNDcsIDI0NiwgMjUzLCA0NiwgNDcsIDI0NywgMTI0LCA0NiwgCisgICAgNDcsIDI0NiwgMTg5LCA0NiwgNDcsIDI0NywgNjAsIDQ2LCA0NywgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ3LCAxMjMsIDQ2LCAKKyAgICA0NywgMjQ2LCAxNTcsIDQ2LCA0NywgMjQ3LCAyOCwgNDYsIDQ3LCAyNDYsIDIyMCwgNDYsIDQ3LCAyNDcsIDkxLCA0NiwgNDcsIAorICAgIDI0NiwgMTg4LCA0NiwgNDcsIDI0NywgNTksIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ3LCAxMjIsIDQ2LCA0NywgCisgICAgMjQ2LCAxNDEsIDQ2LCA0NywgMjQ3LCAxMiwgNDYsIDQ3LCAyNDYsIDIwNCwgNDYsIDQ3LCAyNDcsIDc1LCA0NiwgNDcsIAorICAgIDI0NiwgMTcyLCA0NiwgNDcsIDI0NywgNDMsIDQ2LCA0NywgMjQ2LCAyMzUsIDQ2LCA0NywgMjQ3LCAxMDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxNTYsIDQ2LCA0NywgMjQ3LCAyNywgNDYsIDQ3LCAyNDYsIDIxOSwgNDYsIDQ3LCAyNDcsIDkwLCA0NiwgNDcsIAorICAgIDI0NiwgMTg3LCA0NiwgNDcsIDI0NywgNTgsIDQ2LCA0NywgMjQ2LCAyNTAsIDQ2LCA0NywgMjQ3LCAxMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAxMzMsIDQ2LCA0NywgMjQ3LCA0LCA0NiwgNDcsIDI0NiwgMTk2LCA0NiwgNDcsIDI0NywgNjcsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNjQsIDQ2LCA0NywgMjQ3LCAzNSwgNDYsIDQ3LCAyNDYsIDIyNywgNDYsIDQ3LCAyNDcsIDk4LCA0NiwgNDcsIDI0NiwgCisgICAgMTQ4LCA0NiwgNDcsIDI0NywgMTksIDQ2LCA0NywgMjQ2LCAyMTEsIDQ2LCA0NywgMjQ3LCA4MiwgNDYsIDQ3LCAyNDYsIAorICAgIDE3OSwgNDYsIDQ3LCAyNDcsIDUwLCA0NiwgNDcsIDI0NiwgMjQyLCA0NiwgNDcsIDI0NywgMTEzLCA0NiwgNDcsIDI0NiwgCisgICAgMTQwLCA0NiwgNDcsIDI0NywgMTEsIDQ2LCA0NywgMjQ2LCAyMDMsIDQ2LCA0NywgMjQ3LCA3NCwgNDYsIDQ3LCAyNDYsIAorICAgIDE3MSwgNDYsIDQ3LCAyNDcsIDQyLCA0NiwgNDcsIDI0NiwgMjM0LCA0NiwgNDcsIDI0NywgMTA1LCA0NiwgNDcsIDI0NiwgCisgICAgMTU1LCA0NiwgNDcsIDI0NywgMjYsIDQ2LCA0NywgMjQ2LCAyMTgsIDQ2LCA0NywgMjQ3LCA4OSwgNDYsIDQ3LCAyNDYsIAorICAgIDE4NiwgNDYsIDQ3LCAyNDcsIDU3LCA0NiwgNDcsIDI0NiwgMjQ5LCA0NiwgNDcsIDI0NywgMTIwLCA0NiwgNDcsIDI0NiwgCisgICAgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCA0NiwgNDcsIDI0NiwgMTYwLCAKKyAgICA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIDQ3LCAyNDYsIDE0NCwgNDYsIAorICAgIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgMjQ2LCAxNzUsIDQ2LCA0NywgCisgICAgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAyNDYsIDEzNiwgNDYsIDQ3LCAKKyAgICAyNDcsIDcsIDQ2LCA0NywgMjQ2LCAxOTksIDQ2LCA0NywgMjQ3LCA3MCwgNDYsIDQ3LCAyNDYsIDE2NywgNDYsIDQ3LCAyNDcsIAorICAgIDM4LCA0NiwgNDcsIDI0NiwgMjMwLCA0NiwgNDcsIDI0NywgMTAxLCA0NiwgNDcsIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgCisgICAgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAyNDYsIDE4MiwgNDYsIDQ3LCAyNDcsIDUzLCAKKyAgICA0NiwgNDcsIDI0NiwgMjQ1LCA0NiwgNDcsIDI0NywgMTE2LCA0NiwgNDcsIDI0NiwgMTMyLCA0NiwgNDcsIDI0NywgMywgNDYsIAorICAgIDQ3LCAyNDYsIDE5NSwgNDYsIDQ3LCAyNDcsIDY2LCA0NiwgNDcsIDI0NiwgMTYzLCA0NiwgNDcsIDI0NywgMzQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjYsIDQ2LCA0NywgMjQ3LCA5NywgNDYsIDQ3LCAyNDYsIDE0NywgNDYsIDQ3LCAyNDcsIDE4LCA0NiwgNDcsIAorICAgIDI0NiwgMjEwLCA0NiwgNDcsIDI0NywgODEsIDQ2LCA0NywgMjQ2LCAxNzgsIDQ2LCA0NywgMjQ3LCA0OSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MSwgNDYsIDQ3LCAyNDcsIDExMiwgNDYsIDQ3LCAyNDYsIDEzOSwgNDYsIDQ3LCAyNDcsIDEwLCA0NiwgNDcsIAorICAgIDI0NiwgMjAyLCA0NiwgNDcsIDI0NywgNzMsIDQ2LCA0NywgMjQ2LCAxNzAsIDQ2LCA0NywgMjQ3LCA0MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMywgNDYsIDQ3LCAyNDcsIDEwNCwgNDYsIDQ3LCAyNDYsIDE1NCwgNDYsIDQ3LCAyNDcsIDI1LCA0NiwgNDcsIAorICAgIDI0NiwgMjE3LCA0NiwgNDcsIDI0NywgODgsIDQ2LCA0NywgMjQ2LCAxODUsIDQ2LCA0NywgMjQ3LCA1NiwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0OCwgNDYsIDQ3LCAyNDcsIDExOSwgNDYsIDQ3LCAyNDYsIDEyNywgNDYsIDQ3LCAyNDYsIDI1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MCwgNDYsIDQ3LCAyNDcsIDYxLCA0NiwgNDcsIDI0NiwgMTU4LCA0NiwgNDcsIDI0NywgMjksIDQ2LCA0NywgCisgICAgMjQ2LCAyMjEsIDQ2LCA0NywgMjQ3LCA5MiwgNDYsIDQ3LCAyNDYsIDE0MiwgNDYsIDQ3LCAyNDcsIDEzLCA0NiwgNDcsIAorICAgIDI0NiwgMjA1LCA0NiwgNDcsIDI0NywgNzYsIDQ2LCA0NywgMjQ2LCAxNzMsIDQ2LCA0NywgMjQ3LCA0NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNiwgNDYsIDQ3LCAyNDcsIDEwNywgNDYsIDQ3LCAyNDYsIDEzNCwgNDYsIDQ3LCAyNDcsIDUsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTcsIDQ2LCA0NywgMjQ3LCA2OCwgNDYsIDQ3LCAyNDYsIDE2NSwgNDYsIDQ3LCAyNDcsIDM2LCA0NiwgNDcsIAorICAgIDI0NiwgMjI4LCA0NiwgNDcsIDI0NywgOTksIDQ2LCA0NywgMjQ2LCAxNDksIDQ2LCA0NywgMjQ3LCAyMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMiwgNDYsIDQ3LCAyNDcsIDgzLCA0NiwgNDcsIDI0NiwgMTgwLCA0NiwgNDcsIDI0NywgNTEsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDMsIDQ2LCA0NywgMjQ3LCAxMTQsIDQ2LCA0NywgMjQ2LCAxMzAsIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIAorICAgIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIDI0NywgMTYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAyNDcsIDQ3LCA0NiwgNDcsIAorICAgIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA0NiwgNDcsIDI0NiwgMTM3LCA0NiwgNDcsIDI0NywgOCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMCwgNDYsIDQ3LCAyNDcsIDcxLCA0NiwgNDcsIDI0NiwgMTY4LCA0NiwgNDcsIDI0NywgMzksIDQ2LCA0NywgCisgICAgMjQ2LCAyMzEsIDQ2LCA0NywgMjQ3LCAxMDIsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTgzLCA0NiwgNDcsIDI0NywgNTQsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDYsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIAorICAgIDI0NiwgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMzUsIDQ2LCA0NywgMjQ3LCA2LCA0NiwgNDcsIAorICAgIDI0NiwgMTk4LCA0NiwgNDcsIDI0NywgNjksIDQ2LCA0NywgMjQ2LCAxNjYsIDQ2LCA0NywgMjQ3LCAzNywgNDYsIDQ3LCAKKyAgICAyNDYsIDIyOSwgNDYsIDQ3LCAyNDcsIDEwMCwgNDYsIDQ3LCAyNDYsIDE1MCwgNDYsIDQ3LCAyNDcsIDIxLCA0NiwgNDcsIAorICAgIDI0NiwgMjEzLCA0NiwgNDcsIDI0NywgODQsIDQ2LCA0NywgMjQ2LCAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIDEzMSwgNDYsIDQ3LCAyNDcsIDIsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTQsIDQ2LCA0NywgMjQ3LCA2NSwgNDYsIDQ3LCAyNDYsIDE2MiwgNDYsIDQ3LCAyNDcsIDMzLCA0NiwgNDcsIAorICAgIDI0NiwgMjI1LCA0NiwgNDcsIDI0NywgOTYsIDQ2LCA0NywgMjQ2LCAxNDYsIDQ2LCA0NywgMjQ3LCAxNywgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOSwgNDYsIDQ3LCAyNDcsIDgwLCA0NiwgNDcsIDI0NiwgMTc3LCA0NiwgNDcsIDI0NywgNDgsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDAsIDQ2LCA0NywgMjQ3LCAxMTEsIDQ2LCA0NywgMjQ2LCAxMzgsIDQ2LCA0NywgMjQ3LCA5LCA0NiwgNDcsIAorICAgIDI0NiwgMjAxLCA0NiwgNDcsIDI0NywgNzIsIDQ2LCA0NywgMjQ2LCAxNjksIDQ2LCA0NywgMjQ3LCA0MCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMiwgNDYsIDQ3LCAyNDcsIDEwMywgNDYsIDQ3LCAyNDYsIDE1MywgNDYsIDQ3LCAyNDcsIDI0LCA0NiwgNDcsIAorICAgIDI0NiwgMjE2LCA0NiwgNDcsIDI0NywgODcsIDQ2LCA0NywgMjQ2LCAxODQsIDQ2LCA0NywgMjQ3LCA1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NywgNDYsIDQ3LCAyNDcsIDExOCwgOTcsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgCisgICAgMiwgNTIsIDY3LCA5MSwgMTQwLCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDUyLCA4MCwgMiwgNjcsIDkxLCA0MywgNDQsIDUyLCAKKyAgICA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIDI0MywgMjUxLCAxMzAsIDE0MCwgNTIsIDgwLCAyNDMsIDI1MSwgCisgICAgMTMwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDIsIDIwMywgOTEsIDIxNCwgMTUzLCA4MCwgCisgICAgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDIxNSwgMjEyLCA3NSwgMjQ2LCAxMTIsIDIxNSwgMjEyLCA3NSwgMTQwLCA1MiwgMjQ4LCAKKyAgICAxNjUsIDc1LCA5NywgNTIsIDI0OCwgMTY1LCA3NSwgMTQwLCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCAyMTIsIAorICAgIDI0OCwgMTY1LCA3NSwgOTcsIDIxNSwgNTgsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCA4MCwgMiwgMjQ2LCAxMjYsIAorICAgIDIxOCwgMTQxLCAyMTQsIDE1MywgODAsIDIxNiwgNDMsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyMTYsIDQzLCAxMzAsIDk3LCA4MCwgCisgICAgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCAKKyAgICA4MCwgMiwgMjE3LCA3OCwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgCisgICAgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyNTQsIDMsIDk3LCAyNTQsIDMsIDE0MCwgNTIsIDI1NCwgMywgOTcsIAorICAgIDUyLCAyNTQsIDMsIDE0MCwgODAsIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgCisgICAgMTQwLCA4MCwgMjQzLCAyNTEsIDI1MiwgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCA5NywgODAsIDI0MywgMjUxLCAyNTIsIAorICAgIDE0OSwgMjE2LCA0MywgODUsIDI0OCwgMCwgMjI4LCA2MSwgMjEyLCA5LCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgMjIsIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIsIDEwMywgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMiwgMTAzLCAyMTksIDMwLCAKKyAgICAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIyLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjIsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyMiwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyMiwgCisgICAgMjMxLCAyNDgsIDcsIDI0OSwgMTMzLCAyNDQsIDE4MywgMjQ4LCA2LCAyNDQsIDE4MywgMjQ4LCA3LCAyNDksIDEzMywgMjIyLCAKKyAgICAyMzEsIDI0OCwgNiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgCisgICAgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyMiwgMjMxLCAyNDgsIDcsIDI0OSwgMTMzLCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIAorICAgIDIxMiwgOSwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxMiwgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIAorICAgIDIwMywgMjIyLCAyNTQsIDgwLCAyMjUsIDEwLCA5NywgMjE2LCAxODksIDI0OSwgOTgsIDIxNCwgMTUyLCA4MCwgMjI1LCAxMCwgCisgICAgOTcsIDIxNiwgMTg5LCAyNDksIDk4LCAyNDYsIDExMSwgODAsIDIyNSwgMTAsIDI0NiwgMTEyLCAyMTYsIDE4OSwgMjQ5LCAKKyAgICA5OCwgMjMzLCA0MywgODAsIDIyNSwgMTAsIDI0NiwgMTEyLCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjIyLCAyNDQsIDIyMiwgCisgICAgMjQ3LCAyNTQsIDM0LCAyNTAsIDEwLCA3NSwgMjMzLCA0NiwgMjU0LCAzNCwgMjU0LCA5NiwgNzUsIDIxNiwgMTUsIDI1NCwgCisgICAgMzQsIDI1NCwgOTYsIDc1LCAyNTEsIDE4MywgMjU0LCAzNCwgMjU0LCA5NiwgNzUsIDIxNiwgMTUsIDI1NCwgMzQsIDI1MCwgCisgICAgMTAsIDgwLCAyLCAyMzAsIDE4NiwgMjE2LCAxNSwgMjU0LCAzNCwgMjU0LCA5NiwgODAsIDIsIDIyNSwgMjUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjIwLCAxNTQsIDI1MCwgMTAsIDc1LCAyMzIsIDExNCwgNDMsIDIyMCwgMTU0LCAyNTQsIDk2LCA3NSwgMjU0LCA5NiwgCisgICAgMjUwLCA4LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjUwLCA4LCAyNTAsIDQ0LCA3NSwgOTcsIDgwLCA3MiwgMjE5LCAyNTMsIAorICAgIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMTksIDI1MywgOTcsIDc1LCAyMTksIDI1MywgOTcsIDgwLCA3MiwgMTQwLCA3NSwgCisgICAgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgOTcsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDQzLCAKKyAgICA0NCwgODAsIDIxNiwgMTQwLCA0LCAyNTAsIDQzLCAyMTQsIDE1MywgMjE1LCA1OCwgODAsIDI0MywgMjUxLCA0LCAyNTAsIAorICAgIDQzLCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAxMjQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAxMjQsIDQ0LCAKKyAgICAyNTIsIDE0NywgMTIwLCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQ0LCAxMjQsIDI1MiwgMTQ3LCA0MywgMjQyLCA1LCAxMjAsIAorICAgIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAxMjAsIDQ0LCAyNTIsIDE0NywgCisgICAgMTIwLCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQ0LCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIAorICAgIDEyNCwgNDQsIDI1MiwgMTQ3LCAxMjQsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDMsIDEyNCwgMjUyLCAxNDcsIDQzLCAKKyAgICAyNDIsIDUsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIAorICAgIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyNCwgMjE2LCA0MywgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDIxNiwgNDMsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDI0MywgMjUxLCAxMzAsIDk3LCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICA0NCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyNDMsIDI1MSwgMTMwLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjQzLCAyNTEsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNDMsIDI1MSwgMTMwLCAyNDYsIAorICAgIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgMTIwLCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDk3LCAyNDIsIDYsIDIsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDI0NiwgMTEyLCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE2MywgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCA5NywgMjQyLCA2LCAKKyAgICAyLCAyNTIsIDE0NywgMTI0LCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMTQwLCAyNDIsIDYsIDIsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDcyLCAyMDAsIDI0OCwgMTY0LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgCisgICAgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI1MiwgNTEsIDIwMCwgMjQ4LCAxNjQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjUyLCAzOCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCAyNDYsIDExMiwgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgNDQsIAorICAgIDUyLCA4MCwgMiwgMjIyLCAxODUsIDI0MSwgMjQyLCAyNDUsIDEwNiwgNSwgNzIsIDk3LCA3NSwgMjE2LCA5MCwgMjI2LCAKKyAgICAxNzIsIDcyLCA5NywgNzUsIDE0MCwgODAsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjE2LCA5MCwgCisgICAgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjMzLCAyMSwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIAorICAgIDIxNiwgMTQwLCAyMzMsIDIwLCAyNDIsIDEzNywgNzIsIDk3LCA3NSwgMjE4LCA2NSwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIxOCwgNjQsIDIxOCwgMjMsIDcyLCAxNDAsIDc1LCA0MywgMjQ0LCA5OSwgMjE3LCA3OCwgNDQsIDI0NCwgCisgICAgOTksIDIxNywgNzgsIDEyMCwgMjQ0LCA5OSwgMjE3LCA3OCwgMTI0LCAyNDQsIDk5LCAyMTcsIDc4LCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCAyNDgsIDY4LCAyMTAsIDE2MCwgMTg5LCAyMTgsIDI0NCwgMjEwLCAxNjAsIDE4OSwgMjE1LCA0OSwgMjQ5LCAKKyAgICAyMzQsIDQzLCA3MSwgMjQ5LCAxMDcsIDEyNywgNDQsIDcxLCAyNDksIDEwNywgMTI3LCA0MywgNzEsIDIyNiwgNywgNDQsIAorICAgIDcxLCAyMjYsIDcsIDIxMCwgMTYwLCAxODksIDQzLCAyMzYsIDIyLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyMzYsIDIyLCAKKyAgICAxMjcsIDIxMCwgMTYwLCAxODksIDQzLCAyNTEsIDI1MCwgMTI3LCAyMTAsIDE2MCwgMTg5LCA0NCwgMjUxLCAyNTAsIDEyNywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIxNCwgMTgzLCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCA3LCAyMTYsIDE1LCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgCisgICAgMjE2LCAxMTYsIDIzNiwgNywgMjUxLCAxODMsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCAKKyAgICA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIAorICAgIDI0OSwgMTY4LCA0MywgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAyNDcsIDEyOCwgNDQsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMiwgCisgICAgMjQ3LCAxMjgsIDQzLCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQ0LCAyNTQsIDM0LCAyNDIsIDEzNywgMTI3LCA1MiwgNDMsIAorICAgIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0NCwgMjU0LCAzNCwgMjMzLCAyMSwgMTI3LCA0MywgODUsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA0NCwgODUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNDYsIDEyNiwgMjQ0LCAxNDMsIDY3LCAyMTAsIAorICAgIDM1LCAyMzIsIDIxOSwgMjMxLCA5MywgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCA0NCwgMjU0LCAxMTgsIDIxNCwgCisgICAgMTIsIDIsIDIxOCwgMjM2LCAyMzEsIDkzLCA0NCwgMjU0LCAxMTgsIDIsIDI0NywgMTI4LCAyNTQsIDExOCwgMiwgMjIyLCAKKyAgICA5NCwgMjM1LCAyMjIsIDI1NSwgMTIsIDI1NCwgMTE3LCAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjMzLCA1MiwgCisgICAgMjE5LCAxLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDExNywgMjIzLCA1MiwgMjU0LCAKKyAgICAxMTcsIDI1NCwgMTE4LCAyLCAyMTQsIDE4MywgMjIzLCA1MiwgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjYsIDI1MiwgCisgICAgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMTQsIDE2MywgMjI2LCAyNTIsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjQ2LCAxMTQsIAorICAgIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjAsIAorICAgIDIyLCAyMjIsIDI1NCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIAorICAgIDIyNSwgMTAsIDEyMCwgMjIsIDIzMywgNTIsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAKKyAgICAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjQsIDIyLCAyMjIsIDI1NCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAKKyAgICAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIzMywgNTIsIDIzMSwgOTMsIDI1NCwgMTE4LCAKKyAgICAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0NCwgMjIsIDIxNCwgMTYzLCAyMzEsIAorICAgIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgNDMsIDIyLCAKKyAgICAyMTQsIDE2MywgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgCisgICAgMTAsIDQ0LCAyMiwgMjQ2LCAxMTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIAorICAgIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIDI0NiwgMTE0LCAyMjMsIDUyLCAyNDUsIDE2MCwgMjIwLCAxMjksIDI0NSwgMTYwLCAKKyAgICAyMjAsIDEzMCwgMiwgMjI2LCAxMjcsIDI0NSwgMTYwLCAyMjAsIDEzMCwgMiwgNCwgMjUwLCA0NCwgNDgsIDI0NSwgMTYwLCAKKyAgICAyMjAsIDEzMCwgMiwgNDQsIDgwLCA0OCwgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0MywgODAsIDQ4LCAyNTAsIDQ0LCAyLCAKKyAgICAyMDMsIDEzMCwgMzcsIDY3LCAxMzAsIDM3LCAyMjYsIDExLCAzNywgMjIzLCA1MywgMjE5LCA0OCwgMzcsIDIyNSwgMTc0LCAKKyAgICAyNTAsIDQ0LCAyNDcsIDE4MSwgMjUxLCA4NiwgMjAzLCAyNTIsIDE0OSwgMjIsIDIxNiwgMTUsIDE2MywgMjQ3LCAxODEsIAorICAgIDI1MSwgODYsIDY3LCAxMzAsIDI1MCwgNDQsIDIsIDIxOCwgMjUsIDIxMSwgMTc4LCAzNywgMjU0LCA5NSwgMjQ3LCAxNzcsIAorICAgIDUwLCAxMjAsIDgwLCAyMTYsIDE0MCwgMjUwLCA0MywgMzcsIDcxLCAyNTEsIDEyMSwgMzcsIDI1MSwgMTIxLCAzNywgMjMzLCAKKyAgICAyMCwgMzcsIDI0MiwgMTM2LCAyNTAsIDQ0LCAyLCA0LCAyNTAsIDQ0LCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIAorICAgIDI1MCwgNDQsIDIsIDExMywgMjAzLCAyMTgsIDkzLCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIDkyLCAyMjIsIDIzMSwgCisgICAgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjQ0LCAxODMsIDI0OCwgNywgMjE5LCA5NywgOTIsIDI1MywgMjI0LCA5MiwgNCwgMjUwLCAKKyAgICA0MywgOTIsIDIxOCwgMjM2LCAxMTMsIDIzNSwgNzEsIDIxOCwgMjM0LCAyMTUsIDIyNywgMiwgNTksIDQ4LCAyMTUsIDIyNywgCisgICAgMiwgMjE0LCAxODMsIDIyMiwgOTQsIDIzNiwgNywgMjE1LCAyMjYsIDIxNSwgMjI3LCAyLCAyMjAsIDEzNiwgMjUzLCAyMTUsIAorICAgIDI1MSwgMTgyLCA0NCwgMjE1LCAyMjcsIDcyLCA0MywgMjE1LCAyMjYsIDQzLCAyMTUsIDIyNywgMjUyLCAzOCwgNjcsIDEzMCwgCisgICAgNjcsIDI1MiwgMTQ5LCAyNTIsIDM4LCA0NCwgMjE1LCAyMjYsIDI1MSwgMTczLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMjUxLCAKKyAgICAxNzMsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCA4NSwgMjUxLCAxNzIsIDMwLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMzAsIDIsIAorICAgIDQ0LCAxNjMsIDI1MSwgMjI5LCA3MSwgMjQwLCAyNDMsIDg1LCAyNDAsIDI0MywgNDMsIDIxMSwgMjQ0LCAyNDQsIDE0MywgCisgICAgNDQsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDMsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxNDMsIDQ0LCA1MiwgMjExLCAyNDQsIAorICAgIDI0NCwgMTQzLCAyMzUsIDI1NSwgMjM1LCAyNDEsIDIxNiwgMTEzLCAxMTUsIDIzNSwgMjQxLCAyMzUsIDI0MiwgMjI5LCAKKyAgICAxMDcsIDIsIDY3LCAxMzAsIDI0NiwgMTIwLCAyMzAsIDkyLCA0MiwgMiwgMjQ5LCAxODksIDIyNiwgMTMxLCAyMzUsIDI1MywgCisgICAgMjUzLCAyNDUsIDIxOSwgMjIxLCAyMjQsIDE4MywgMjQ1LCAxMDYsIDUsIDIyLCAyMTksIDk5LCAyMjYsIDExLCAyNDUsIAorICAgIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTIsIDIsIDIxNiwgOTAsIDQ4LCAyNDAsIDExMSwgMjE2LCA0MywgMjIsIDIxOSwgCisgICAgOTksIDIyNiwgMTEsIDI0MiwgMTkwLCAyMTgsIDE1NywgMjE2LCAxODYsIDI0NiwgMTEzLCAyMTUsIDIyNywgMiwgNDMsIAorICAgIDE2MywgMjUxLCAyMjksIDI0NiwgMTEzLCAyMTUsIDIyNywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNDgsIDEsIDIsIAorICAgIDEyNCwgNzUsIDg1LCAyMzIsIDExMCwgNzEsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIDg1LCAyNTAsIDQ0LCAyLCAxMjQsIDc1LCAKKyAgICAyNDUsIDkzLCA3MSwgMjE4LCAyMzYsIDI0NSwgOTMsIDg1LCAyMTgsIDIzNiwgMjQ1LCA5MywgNzEsIDI0OCwgMCwgMjQ1LCAKKyAgICA5MywgODUsIDI0OCwgMCwgMjQ1LCA5MywgNzEsIDI1MCwgNDMsIDI0NSwgOTMsIDg1LCAyNTAsIDQzLCAyMjIsIDEzNCwgCisgICAgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxNzEsIDIxOSwgNDksIDIsIDIyNiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ5LCAyLCAKKyAgICAyMDMsIDkxLCAyNTIsIDEsIDIxOSwgNDgsIDI1MiwgMSwgMjIzLCA1MywgMjE5LCA0OCwgNTIsIDIyNSwgMjUsIDIxNSwgCisgICAgMjEyLCAyMjUsIDI1LCAyMzMsIDQ4LCAyNDksIDk5LCAyNTQsIDExOCwgMTI3LCAyMjIsIDI1MCwgMjQ5LCA5OSwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjE2LCA3OSwgMjMwLCAxODQsIDIzMCwgMjksIDM3LCA1OSwgMjI2LCAxNzEsIDIzMCwgMjksIDM3LCA5NiwgCisgICAgMjI2LCAxNzEsIDIzMCwgMjksIDM3LCAzMCwgMjI2LCAxNzEsIDIzMCwgMjksIDIxNCwgMTc2LCAyMjYsIDE3MiwgMiwgMjQ3LCAKKyAgICAxMjgsIDIzMCwgMjksIDIxNCwgMTc2LCAyMjYsIDE3MiwgMiwgMjI1LCAyNSwgMjMwLCAyOSwgNDIsIDIzNSwgMjA2LCAyMjYsIAorICAgIDE3MSwgMjMwLCAyOSwgNDIsIDIxNCwgMTc2LCAyMjYsIDE3MSwgMTEzLCAyMzIsIDE1MiwgMjIsIDIyNiwgMTcxLCAxMTMsIAorICAgIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTcxLCAyMzAsIDI5LCAzMCwgMjI2LCAxNzEsIDIzMCwgMTU5LCAxMTMsIDIxOCwgNDQsIAorICAgIDIxOCwgNDIsIDIsIDIzNSwgMjE4LCAyMjQsIDI3LCAyMzUsIDIxOSwgMjI2LCAxNzEsIDI0NCwgMTA3LCAyMjYsIDMsIDIzNSwgCisgICAgMjE4LCAyMzUsIDIxOSwgMiwgNTIsIDkxLCAyMzUsIDIxOSwgMjUzLCAxODEsIDIsIDIxOSwgOTcsIDI1MCwgNDAsIDI0MywgCisgICAgMjMzLCAyNTQsIDk2LCAyMzUsIDIxNiwgMjMyLCAyMjAsIDIzNSwgMjE3LCAyLCAyMjMsIDExOCwgMjI1LCAyNDEsIDI1NCwgCisgICAgMTAsIDIyNSwgNCwgMjMyLCAyMjAsIDIzNSwgMjE3LCAyLCAyMjAsIDE1NCwgMjI1LCAyNDEsIDI1NCwgMTAsIDIyNSwgNCwgCisgICAgMjMyLCAyMjAsIDIzNSwgMjE3LCAyMjgsIDU3LCAyMzYsIDEsIDIxNiwgMTk3LCAyMjUsIDQsIDIzNSwgMjE5LCAyNTQsIDEwLCAKKyAgICAxMTYsIDIyNSwgMTQsIDIyNiwgMTcxLCAyMjQsIDIxLCAyMzUsIDIxOSwgMjI2LCAxNzEsIDIzNSwgMjE5LCAyLCAxNDAsIAorICAgIDgwLCAyLCAxMDMsIDIzNSwgMjE5LCAyLCAzMCwgNTAsIDIzNSwgMjE5LCAyLCAyMzUsIDIwNSwgMjM1LCAyMTksIDIsIDIxNCwgCisgICAgMTc1LCAyMzUsIDIxOSwgMiwgMjI2LCAxMjcsIDIzNSwgMjE5LCAyLCAyMTQsIDE4MywgMjM1LCA3MiwgMjMzLCA5MSwgNDMsIAorICAgIDIxNSwgMjI3LCAyMjYsIDE3MSwgMjEwLCAxNjAsIDE4OSwgMjIxLCAyMDMsIDI0OSwgMjE3LCAyMTAsIDE2MCwgMTg5LCAKKyAgICAyMjEsIDIwMywgMjI1LCA1OSwgMjEwLCAxNjAsIDE4OSwgMjIxLCAyMDMsIDIyNCwgMTc5LCA5NiwgNSwgMiwgNCwgMjUwLCAKKyAgICA0NCwgNDgsIDk2LCA1LCAyLCAyNTAsIDM5LCAyNTUsIDI0LCA0OCwgOTYsIDUsIDIsIDIxNiwgOTAsIDQ4LCA5NiwgNSwgMiwgCisgICAgNTksIDUxLCA5NiwgNSwgMiwgMjE2LCA5MCwgNTEsIDk2LCA1LCAyLCAyMTgsIDY2LCAxMDUsIDk2LCA1LCAyLCA4NSwgMjE1LCAKKyAgICAyMjYsIDIzMCwgMTg3LCA1LCAyLCAyNDksIDIyOCwgNDgsIDIzMCwgMTg3LCA1LCAyLCA1OSwgNTEsIDIzMCwgMTg3LCA1LCAKKyAgICAyLCAyNDQsIDE4MywgMjQ3LCAxMjYsIDIzMCwgMTg3LCA1LCAyLCAyMjIsIDIzMSwgMjQ3LCAxMjYsIDk2LCA1LCAyMzYsIDcsIAorICAgIDQzLCAxNjMsIDI1MCwgNDMsIDk2LCA1LCAyMzYsIDcsIDQ0LCAxNjMsIDI1MCwgNDMsIDIxMywgMjU0LCAxNzcsIDI0OSwgCisgICAgMTM5LCAyMjQsIDE4MywgMjMwLCA4OSwgNSwgMiwgNTksIDQ4LCAyMzAsIDg5LCA1LCAyLCAyMTQsIDE4MywgMjIwLCAxNTEsIAorICAgIDIyNCwgMTg0LCAyLCAyNTEsIDE4MywgMjUwLCA3LCAyMTksIDc5LCAyMjQsIDE4MywgMjMwLCA4OSwgNSwgMjM2LCA3LCA0MywgCisgICAgMTYzLCAyNTAsIDQzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQ0LCAxNjMsIDI1MCwgNDMsIDM3LCAyMzAsIDg5LCA1LCAyLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDUyLCAyNTAsIDQzLCAzNywgMjQ3LCAxNzcsIDUwLCA5NiwgCisgICAgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCAxODcsIDUsIDIzNiwgNywgMjE1LCAyMjYsIDIzMCwgODksIDUsIDIzNiwgNywgCisgICAgMjE1LCAyMjYsIDIzNSwgMjEzLCAyMjQsIDE4MywgMjIyLCAyNDUsIDIzNSwgMjEzLCAyMjQsIDE4MywgMjEwLCAxNjAsIAorICAgIDE4OSwgMjIzLCA5MywgMjQ5LCAyMTcsIDI1NCwgMTQyLCAxNzcsIDI0OSwgMTczLCAyMzUsIDIwNiwgMiwgMjQ3LCAxMjgsIAorICAgIDIxNCwgMTc2LCAyLCAyMzAsIDE4NywgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyNywgMjM1LCAyMDYsIDIsIDIyNiwgMTI3LCAKKyAgICAyMzUsIDIwNiwgMiwgMjMyLCAxNTIsIDI1NCwgMTI2LCAyMTQsIDE3NiwgMiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTQsIAorICAgIDE3NiwgNzIsIDIzNSwgMjA1LCAyMzUsIDIwNiwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzIsIDI1MiwgMTQ5LCA3MiwgCisgICAgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjUyLCAxNDksIDcyLCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzgsIDIyLCAKKyAgICAyMzUsIDcxLCAyLCAyMTQsIDE3NSwgMjM1LCAyMDYsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyLCAyMzUsIDIwNSwgMjUwLCAKKyAgICA4LCAyMTQsIDE3NiwgMiwgMjIwLCAxMzUsIDI1MCwgOCwgMjM1LCAyMDYsIDIsIDIyMCwgMTM1LCA1MiwgNDIsIDIzNSwgCisgICAgMjA1LCA1MiwgNDIsIDIxNCwgMTc1LCAyNTAsIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNiwgMjIsIDIxOSwgNzksIDIyNCwgCisgICAgMTgzLCAyMzIsIDE1MiwgMjIsIDIsIDU5LCA0OCwgMjMyLCAxNTIsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNTIsIAorICAgIDI1NCwgMTI2LCA1MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAxMTMsIDIzNSwgMjA3LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDExMywgCisgICAgMjM1LCAyMDcsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCA5MSwgMjI2LCAxNjIsIDIxOSwgODcsIDIzMywgCisgICAgOTEsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMTc3LCAyMjYsIDEyNSwgMjMyLCAxNTIsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMjIsIAorICAgIDIsIDIzMCwgMjI5LCAyMTgsIDE0MSwgMjMyLCAxNTIsIDE3NywgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgCisgICAgMjIsIDIsIDIwMywgMjQ4LCAxNjQsIDIzMiwgMTUyLCAxNzcsIDIsIDIwMywgMjQ4LCAxNjQsIDIzMiwgMTUyLCAyMiwgMiwgCisgICAgNTIsIDIyNiwgMTI3LCAyMzIsIDE1MiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE1MiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgCisgICAgNCwgMjEzLCAyNTEsIDIsIDIxNCwgMTgzLCAyMzIsIDE1MiwgMTc3LCAyLCA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAxNzcsIAorICAgIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAxNjAsIDE4OSwgMjQ3LCAxMzcsIDI1NCwgODcsIDIxMCwgMTYwLCAxODksIDIyMywgCisgICAgMTUxLCAyNTQsIDg3LCAyNDUsIDEwNiwgNSwgMiwgNTksIDUxLCAyNDAsIDExMSwgMiwgNTksIDQ4LCAyMTUsIDIxMiwgMjAzLCAKKyAgICAyNTIsIDE0OSwgMiwgNTIsIDY3LCA5MSwgMjE1LCAyMTIsIDIwMywgMjUyLCAxNDksIDIsIDIxNSwgMjEyLCA2NywgOTEsIAorICAgIDIxNiwgOTAsIDIyNiwgMTcyLCAyLCA1OSwgNDgsIDIxNiwgOTAsIDIyNiwgMTcyLCAyLCAyMjIsIDIzMSwgMjQ3LCAxMjYsIAorICAgIDIxOSwgMTY0LCAyMzAsIDE4NywgMjE5LCAxNjMsIDI0OSwgMjA3LCAyLCA1OSwgNDgsIDI0NSwgMTA2LCAyLCAyNTMsIDIyNCwgCisgICAgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgMiwgMjUwLCAzOSwgMjU1LCAyMywgMjU0LCA1NiwgMTI4LCAxNzcsIDEyOCwgMTEyLCAKKyAgICAyNDUsIDEwNiwgNSwgNzIsIDk2LCA1MCwgOTYsIDUsIDcyLCAyNDUsIDEwNiwgNTAsIDI0NSwgMTA2LCA1LCA3MiwgMjE2LCAKKyAgICA5MCwgMjI2LCAxNzEsIDUyLCAyNDksIDIzNSwgMjQ1LCAxMDcsIDExMywgMjQ5LCAyMDIsIDI0NSwgMTA2LCAyMTksIDE3OCwgCisgICAgMTM0LCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAyNDUsIDEwNiwgNSwgMiwgMTEzLCAxNzAsIDcyLCAyMiwgMTEzLCAKKyAgICAxNzAsIDUxLCAyNDUsIDEwMiwgMiwgMjQ0LCAxOSwgMTcwLCA0OCwgMjMzLCAyMSwgMiwgMjUwLCA0NCwgMjM1LCAyMjIsIAorICAgIDI0MiwgMTM3LCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgMjMzLCAyMSwgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjQyLCAxMzcsIAorICAgIDIsIDIyNCwgMTYsIDE2NCwgNDgsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAxMTIsIDI0MiwgMTM3LCAxNzcsIDIxOSwgCisgICAgOTksIDEyOCwgMTEyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyNDIsIAorICAgIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCAyMzUsIDIyMiwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAKKyAgICAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjQyLCAxMzcsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIAorICAgIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNzIsIDIyMiwgMjU0LCAyNDIsIDEzNywgMTc3LCAKKyAgICAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjMzLCA1MiwgMjMzLCAyMSwgMTc3LCAyNTQsIDU3LCAyNDIsIAorICAgIDEzNywgMTc3LCAyNTQsIDU3LCAyMzMsIDIxLCAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyNDIsIDEzNywgCisgICAgMjIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMzLCAyMSwgMjIsIDIyOCwgNTcsIDI1NCwgNTcsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjMzLCAyMSwgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyNDIsIDEzNiwgMjQyLCAxMzcsIAorICAgIDcyLCAyNDYsIDExOSwgMTI4LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDIxOSwgMTY0LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCAxNzcsIDI0NSwgMTA3LCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDcyLCAyNDIsIAorICAgIDEzNiwgMjQyLCAxMzcsIDcyLCAyMTksIDE2NCwgNzIsIDIzMywgMjAsIDIzMywgMjEsIDcyLCAyNDIsIDEzNywgNzIsIDI0NiwgCisgICAgMTE5LCAyNDUsIDEwNywgMjQyLCAxMzcsIDcyLCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDI0NSwgMTA3LCAyMzMsIDIxLCAKKyAgICA3MiwgMjE5LCA5OSwgMTI4LCA3MiwgMjQyLCAxMzcsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjQyLCAxMzcsIDcyLCAyMTksIAorICAgIDk5LCAxMjgsIDcyLCAyMzMsIDIxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMzMsIDIwLCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgCisgICAgMTc3LCAyMzMsIDIxLCAyLCA1OSwgMjM1LCAyMjIsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNywgMiwgCisgICAgNTksIDIzNSwgMjIyLCAyNDYsIDExOSwgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDI0NiwgMTE5LCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0NiwgMTE5LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAKKyAgICAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDE3NywgMjMzLCAyMCwgMjE5LCAKKyAgICAxNjQsIDE3NywgMjQyLCAxMzYsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMSwgNzIsIDI0NSwgMTA2LCA1MCwgMjE5LCAxNjQsIAorICAgIDcyLCAyNDIsIDEzNywgNzIsIDI0NSwgMTA2LCA1MCwgNTIsIDIyOSwgOTYsIDIzMywgMjAsIDUyLCAyMjksIDk2LCAyNDIsIAorICAgIDEzNiwgNTIsIDIyOSwgOTYsIDIzMywgMjEsIDIsIDIxNCwgMTgzLCAyNDIsIDEzNywgMjI2LCAxMjUsIDIzMywgMjAsIDI0MiwgCisgICAgMTM3LCAyNTIsIDM4LCAyMzMsIDIwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyNDIsIDEzNywgMjUwLCAKKyAgICA4LCAyNTEsIDg2LCAyNDksIDEwMCwgMjMzLCAyMSwgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMSwgNzIsIDIxOSwgOTksIAorICAgIDI0NSwgMTA3LCAyNDIsIDEzNywgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMSwgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAKKyAgICAyMTksIDgwLCAyMTYsIDIwMSwgMjMzLCA4OSwgMjE2LCAyMDEsIDIxOSwgODAsIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAKKyAgICAyMzMsIDg5LCAyMTYsIDIwMiwgMTc3LCAxMjgsIDExMiwgMjQ1LCAxMDYsIDUsIDIsIDI1MSwgMTE2LCA0OCwgMjI0LCAyMDYsIAorICAgIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMTgsIDU3LCA3MiwgMjE5LCAxNTUsIDI0NSwgMTA2LCA1MCwgMjI0LCAKKyAgICAyMDYsIDcyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjI4LCA1NywgCisgICAgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDU3LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgCisgICAgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIDIyOCwgCisgICAgNTcsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIyOCwgNTcsIDI1NCwgMTU2LCAxMjgsIDExMiwgNTIsIAorICAgIDIyNCwgMjA1LCA1MiwgMjE4LCA1NiwgMjE4LCA2NSwgMiwgMjQ3LCAxMjgsIDIxOCwgMjMsIDIsIDI0NywgMTI4LCAyMTgsIAorICAgIDY1LCAyLCA5NiwgNSwgNTEsIDIxOCwgMjMsIDIsIDk2LCA1LCA1MSwgMjE4LCA2NSwgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgCisgICAgMjMsIDIsIDIzMCwgODksIDUsIDUxLCAyMTgsIDY1LCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCAKKyAgICAyMywgNjQsIDE3NywgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDIxOCwgNjUsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIAorICAgIDIzLCA2NCwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCA2NSwgNjQsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgMjE4LCA2NSwgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDY1LCA2NCwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCA0MiwgNDMsIDIwNCwgOTMsIDIyNiwgMTcxLCA0MiwgNDQsIDIwNCwgOTMsIAorICAgIDIyNiwgMTcxLCAyNTAsIDgsIDIxOCwgNjQsIDI1MCwgOCwgMjE4LCAyMiwgMjUwLCA4LCAyMTgsIDY1LCAxNzcsIDEyOCwgCisgICAgMTEyLCAyNTAsIDgsIDIxOCwgMjMsIDE3NywgMTI4LCAxMTIsIDIxOCwgNjUsIDcyLCAyMTgsIDIyLCAyMTgsIDIzLCA3MiwgCisgICAgMjE4LCA2NCwgMjE4LCA2NSwgNzIsIDIxOCwgNjQsIDIxOCwgMjMsIDcyLCAyMTgsIDIyLCAyMTgsIDIzLCAyNTIsIDM4LCAKKyAgICAyMTgsIDY0LCAyMTgsIDIzLCAyNTIsIDM4LCAyMiwgMjM1LCA3MSwgMjUxLCA4NiwgMjQ4LCAxNjUsIDIsIDIxOCwgNjQsIAorICAgIDI0NSwgMTc4LCA2NCwgMjI2LCAxNzQsIDI0NiwgMTExLCAyMjUsIDUxLCAyLCAyMTcsIDEzLCAyMTYsIDE0LCAyMTUsIDI0MSwgCisgICAgMjM1LCAyMDUsIDI0NCwgMjksIDIyOCwgNzAsIDIxOSwgMjUzLCA0MywgMjE3LCA4OCwgMjE5LCAyNTMsIDEyNCwgMjE3LCAKKyAgICA4OCwgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OCwgMjI1LCAxNzUsIDIsIDIyMiwgOTMsIDY3LCAyNTIsIDE0OSwgMjE1LCAyMTIsIAorICAgIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA0MywgMjE1LCA5MywgNjcsIDI1MiwgMTQ5LCA1MiwgNDMsIDIxNSwgCisgICAgOTMsIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCA5MywgMjAwLCAyNDgsIDE2NSwgMjQzLCAyNTEsIDQzLCAyMzEsIAorICAgIDY4LCA2NCwgNTIsIDIxMywgMjM5LCAyMTksIDI1MywgMTI0LCAyMTcsIDg5LCAyLCAyMjYsIDEyNywgMjE5LCAyNTMsIDEyMCwgCisgICAgMjE3LCA4OSwgMiwgMjE0LCAxODMsIDIxOSwgMjUzLCAxMjAsIDIxNywgODksIDcyLCAyMTksIDI1MywgMTI0LCAyMTcsIDg4LCAKKyAgICA1MiwgMTI0LCAyMTcsIDg4LCA1MiwgMTIwLCAyMTcsIDg4LCA1MiwgMjE4LCAxMDUsIDIyOCwgNTcsIDUwLCAyMjMsIDUyLCAKKyAgICA1MiwgMjE4LCAxMDUsIDIyOCwgNTcsIDUwLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ3LCAxODMsIDIsIDIyMywgNTIsIDIyOSwgCisgICAgMTA2LCAyMTksIDk3LCA2NywgMjMyLCAyMjAsIDIsIDI1MCwgNDQsIDQ4LCA2NywgMjMyLCAyMjAsIDIsIDI1MCwgNDQsIDUxLCAKKyAgICAxMjQsIDIxNywgODksIDIsIDI1MCwgNDQsIDUxLCAyMjYsIDEyLCAyLCAyMDMsIDkxLCAyMjYsIDEyLCAyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgMjE1LCAyMTIsIDY3LCAyNTIsIDE0OSwgMjUxLCAyNTIsIDIyMywgOTQsIDIxNSwgMjEyLCA2NywgMjUyLCAKKyAgICAxNDksIDIsIDIwMywgOTEsIDIxNSwgMjEyLCAyNDksIDIzNSwgMjI2LCAxNzEsIDIxNSwgMjEyLCAyMjksIDk2LCAyMzMsIAorICAgIDIwLCAyMTUsIDIxMiwgMjI5LCA5NiwgMjQyLCAxMzYsIDI0NiwgMTE5LCAyMTksIDk5LCAyMzMsIDIxLCAxNzcsIDEyOCwgCisgICAgMTEyLCAyNDYsIDExOSwgMjE5LCA5OSwgMjQyLCAxMzcsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAyMTksIDQ5LCAyNTEsIAorICAgIDI1MiwgMjIzLCA5NCwgMjMzLCA5MSwgMjE1LCAyMTIsIDY3LCAyNTIsIDE0OSwgMjI2LCAxNzEsIDUyLCAyMTksIDQ5LCAKKyAgICAyMjYsIDE3MSwgNzEsIDY3LCAxMzAsIDIzMCwgMjksIDcxLCA2NywgMTMwLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzEsIDc1LCAKKyAgICAyMjgsIDYxLCAyMTIsIDksIDcxLCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDcxLCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA3MSwgCisgICAgNzUsIDQzLCA0NCwgNzEsIDc1LCAxNDAsIDg1LCA3NSwgMjE0LCAxNTMsIDg1LCA3NSwgMjQ2LCAxMTIsIDg1LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDg1LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4NSwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA4NSwgNzUsIAorICAgIDIxOSwgMzAsIDIxMiwgOSwgODUsIDc1LCA0MywgNDQsIDg1LCA3NSwgMTIwLCAxMjQsIDg1LCA3NSwgOTcsIDgwLCAyLCAKKyAgICAyMTYsIDc4LCAyNDYsIDExMSwgOTcsIDgwLCAyLCAyMTYsIDc4LCAyMTQsIDE1MiwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgCisgICAgMjQ2LCAxMTEsIDE0MCwgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAxNSwgMTYzLCAyNTEsIDIyOSwgCisgICAgNDIsIDIsIDI1MSwgMTgzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyNDgsIDcsIDE2MywgMjUxLCAKKyAgICAyMjksIDQyLCAyLCAyMzIsIDExNCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgMjQ4LCAxLCAyLCA0MywgMTYzLCAyNTEsIAorICAgIDIyOSwgMjQ4LCAxLCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgMjQ4LCAxLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICAyNDgsIDEsIDIsIDI1MSwgMTgzLCAxNjMsIDI1MSwgMjI5LCAyNDYsIDEyNiwgMjE4LCAyMzYsIDg1LCAyMzMsIDkxLCAyMTgsIAorICAgIDIzNiwgNzEsIDIzMywgOTEsIDIxOCwgMjM2LCA4NSwgMjEzLCAxODcsIDQsIDIxOCwgMjM2LCA3MSwgMjEzLCAxODcsIDQsIAorICAgIDIxOCwgMjM2LCA4NSwgMjI1LCAxOTMsIDcxLCAyMjUsIDE5MywgNzEsIDI0MSwgMjAwLCA4NSwgMjQxLCAyMDAsIDIwMywgCisgICAgODUsIDI0MSwgMjAwLCA4NSwgMjMzLCA5MSwgMjUwLCA0MywgODUsIDIzMSwgODcsIDI0OCwgMCwgNzEsIDIzMSwgODcsIAorICAgIDI0OCwgMCwgODUsIDIzMSwgODcsIDIzMiwgMTEwLCA3MSwgMjMxLCA4NywgMjMyLCAxMTAsIDg1LCA0LCAyNDgsIDAsIDg1LCAKKyAgICA0LCAyMzIsIDExMCwgNzEsIDQsIDIzMiwgMTEwLCA4NSwgMjAzLCAyNDUsIDE3MiwgNzEsIDIwMywgMjQ1LCAxNzIsIDg1LCAKKyAgICA2NywgMjQ1LCAxNzIsIDcxLCA2NywgMjQ1LCAxNzIsIDQzLCA4MCwgMiwgNCwgMjUwLCA0MywgMTM0LCAxNDAsIDI1MywgCisgICAgMjU1LCA0MywgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgMjE4LCAyMzIsIDc1LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAKKyAgICA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjUxLCAxMzAsIAorICAgIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgMTQwLCA4MCwgMiwgMjQ2LCAxMjYsIDIxOCwgMTQxLCAKKyAgICAxNDAsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgCisgICAgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCA4MCwgMjE2LCAxNDAsIDIxMSwgMTc4LCAyMTIsIAorICAgIDM2LCA4MCwgMjI1LCAxMCwgMjQ3LCAyMDMsIDIzMywgNTIsIDI0NSwgMTA2LCA1LCA3MiwgMTQwLCA3NSwgMjIzLCA1MywgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjIzLCA1MywgMjU0LCAxNTYsIDEyOCwgMTEyLCAKKyAgICA5NywgODAsIDIxNiwgMTQwLCAyNDIsIDEzNiwgOTcsIDgwLCAyMTYsIDE0MCwgMjE4LCAyMiwgMTQwLCAyMjQsIDI3LCA3NSwgCisgICAgOTcsIDIyNCwgMjcsIDc1LCAyMjMsIDUzLCAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDk3LCA3NSwgOTcsIDgwLCA3MiwgMjIzLCAKKyAgICA1MywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjIzLCAKKyAgICA1MywgMjE2LCA5MCwgMjI2LCAxNzEsIDcxLCAyMzEsIDg3LCAyMTgsIDE1OCwgODUsIDQsIDIxOCwgMTU4LCA3MSwgNCwgCisgICAgMjE4LCAxNTgsIDg1LCAyMjIsIDI1MCwgMjI1LCAxOTMsIDcxLCAyMjIsIDI1MCwgMjI1LCAxOTMsIDExNCwgMjMzLCA5MSwgCisgICAgMjUwLCA0MywgMTE0LCAyMjYsIDEyOCwgMiwgMjI2LCAxMjgsIDIzNSwgMjIyLCAxMTQsIDI1MCwgNDQsIDIsIDI1MCwgNDQsIAorICAgIDIzNSwgMjIyLCAxMTQsIDI1MCwgNDMsIDExNCwgMzcsIDIyMiwgMCwgMTQ1LCA2LCAxLCAyNTMsIDE2NywgMTQ1LCA2LCAxLCAKKyAgICAyNTEsIDEyNSwgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCA2LCAxLCAyNDIsIDE5MiwgMTQ1LCA2LCAxLCAyNDcsIDE0OCwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgNjgsIDE0NSwgNiwgMSwgMjQ2LCA0MiwgMTQ1LCA2LCAxLCAKKyAgICAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA2LCAxLCA3NCwgCisgICAgMTQ1LCA2LCAxLCAyNDcsIDE2OCwgMTQ1LCA2LCAxLCAyMzQsIDI0NiwgMTQ1LCA2LCAxLCAyMzIsIDE5MiwgMTQ1LCA2LCAxLCAKKyAgICAyMzAsIDM0LCAxNDUsIDYsIDEsIDIyOSwgMTk2LCAxNDUsIDYsIDEsIDIyNiwgMTg5LCAxNDUsIDYsIDEsIDIyNSwgNywgCisgICAgMTQ1LCA2LCAxLCAyMjIsIDIzMCwgMTQ1LCA2LCAxLCAyMTksIDg1LCAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgCisgICAgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNTQsIDE0NSwgNiwgMSwgMjQxLCAyMDYsIDE0NSwgNiwgMSwgMjI2LCAxMzksIAorICAgIDE0NSwgNiwgMSwgMjI1LCAyMjQsIDE0NSwgNiwgMSwgMjE5LCAyMzAsIDE0NSwgNiwgMSwgMjE1LCAxNjgsIDE0NSwgNiwgMSwgCisgICAgMjUwLCA4MywgMTQ1LCA2LCAxLCAyMjAsIDEwNCwgMTQ1LCA2LCAxLCAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIAorICAgIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1NSwgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIAorICAgIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDYsIDEsIDIxMCwgCisgICAgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIAorICAgIDYsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI0NCwgOTAsIDE0NSwgNiwgMSwgMjM1LCAKKyAgICAxNTIsIDE0NSwgNiwgMSwgMjE5LCAyMjksIDE0NSwgNiwgMSwgMjE1LCAyMDMsIDYxLCAxNDUsIDYsIDEsIDIzMywgODEsIAorICAgIDIzMCwgMzQsIDE0NSwgNCwgMSwgMjUzLCAxNjcsIDE0NSwgNCwgMSwgMjUxLCAxMjUsIDE0NSwgNCwgMSwgMjEzLCAyNTMsIAorICAgIDE0NSwgNCwgMSwgMjQyLCAxOTIsIDE0NSwgNCwgMSwgMjQ3LCAxNDgsIDE0NSwgNCwgMSwgMjExLCAyMSwgMTQ1LCA0LCAxLCAKKyAgICAyMTAsIDY4LCAxNDUsIDQsIDEsIDI0NiwgNDIsIDE0NSwgNCwgMSwgMjEwLCA5MSwgMTQ1LCA0LCAxLCAyMzUsIDE1NCwgCisgICAgMTQ1LCA0LCAxLCA2NSwgMjM1LCAxNTQsIDE0NSwgNCwgMSwgNzQsIDE0NSwgNCwgMSwgMjQ3LCAxNjgsIDE0NSwgNCwgMSwgCisgICAgMjM0LCAyNDYsIDE0NSwgNCwgMSwgMjMyLCAxOTIsIDE0NSwgNCwgMSwgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyMjksIDE5NiwgCisgICAgMTQ1LCA0LCAxLCAyMjYsIDE4OSwgMTQ1LCA0LCAxLCAyMjUsIDcsIDE0NSwgNCwgMSwgMjIyLCAyMzAsIDE0NSwgNCwgMSwgCisgICAgMjE5LCA4NSwgMTQ1LCA0LCAxLCAyMTUsIDgxLCAxNDUsIDQsIDEsIDIxNCwgMjAxLCAxNDUsIDQsIDEsIDI0MywgMjU0LCAKKyAgICAxNDUsIDQsIDEsIDI0MSwgMjA2LCAxNDUsIDQsIDEsIDIyNiwgMTM5LCAxNDUsIDQsIDEsIDIyNSwgMjI0LCAxNDUsIDQsIDEsIAorICAgIDIxOSwgMjMwLCAxNDUsIDQsIDEsIDIxNSwgMTY4LCAxNDUsIDQsIDEsIDI1MCwgODMsIDE0NSwgNCwgMSwgMjIwLCAxMDQsIAorICAgIDE0NSwgNCwgMSwgMjExLCAyNywgMTQ1LCA0LCAxLCAyMTEsIDI5LCAxNDUsIDQsIDEsIDIxMSwgNTcsIDE0NSwgNCwgMSwgCisgICAgMjE4LCAyNTUsIDE2MiwgMTQ1LCA0LCAxLCAyMTAsIDIxMiwgMTQ1LCA0LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCA0LCAKKyAgICAyMTAsIDE4NCwgMiwgMjE3LCA3OCwgMTQ1LCA0LCAxLCAyMTAsIDI0NCwgMTQ1LCA0LCAxLCAyMzUsIDE5MSwgNCwgMjEwLCAKKyAgICAxODMsIDE0NSwgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyMzUsIDE5MSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMTQ1LCA0LCAxLCAyNDQsIDkwLCAxNDUsIDQsIDEsIDIzNSwgMTUyLCAxNDUsIDQsIDEsIDIxOSwgMjI5LCAxNDUsIDQsIDEsIAorICAgIDIxNSwgMjAzLCA2MSwgMTQ1LCA0LCAxLCAyMzMsIDgxLCAyMzAsIDM0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgCisgICAgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDUyLCAxMzAsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA2LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAxMTYsIDIsIDkxLCAKKyAgICA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjQ4LCA0NywgNywgNiwgMSwgMjM1LCAzMCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjQ4LCA0NywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDQ3LCA3LCAKKyAgICA2LCAxLCAyNTQsIDE1MSwgNywgNiwgMSwgMjMyLCA1NSwgMiwgMTAzLCA3LCA2LCAxLCAyMTUsIDk0LCA2MSwgNywgNiwgMSwgCisgICAgMjE1LCA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCA0NCwgMTAzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAKKyAgICAxMDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0OSwgMTA4LCA3LCA2LCAxLCAKKyAgICAxNjMsIDI0MiwgNjcsIDcsIDQsIDEsIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMjE3LCA3NiwgMjI1LCAxMzYsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjI4LCA1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgMTIxLCAyMjIsIDIzNywgMjM1LCAyMjIsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDc2LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzUsIAorICAgIDE1MCwgNTgsIDEsIDYsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgCisgICAgMjEwLCAxNjAsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA4MSwgNiwgMSwgMjU0LCAxNzMsIDgxLCA0LCAxLCAyNTQsIDE3MywgCisgICAgODEsIDYsIDEsIDIxMywgMTczLCA4MSwgNCwgMSwgMjEzLCAxNzMsIDgxLCA2LCAxLCAyNDMsIDExNCwgODEsIDQsIDEsIAorICAgIDI0MywgMTE0LCA4MSwgNiwgMSwgMjQ4LCAxOTksIDgxLCA0LCAxLCAyNDgsIDE5OSwgODEsIDYsIDEsIDI0NSwgMjAyLCA4MSwgCisgICAgNCwgMSwgMjQ1LCAyMDIsIDgxLCA2LCAxLCAyMTksIDM1LCA4MSwgNCwgMSwgMjE5LCAzNSwgODEsIDYsIDEsIDIxMCwgMTAxLCAKKyAgICA4MSwgNCwgMSwgMjEwLCAxMDEsIDgxLCA2LCAxLCAyNDEsIDI1NSwgODEsIDQsIDEsIDI0MSwgMjU1LCA4MSwgNiwgMSwgCisgICAgMjE2LCAxNzgsIDgxLCA0LCAxLCAyMTYsIDE3OCwgODEsIDYsIDEsIDI0MCwgMTIzLCA4MSwgNCwgMSwgMjQwLCAxMjMsIDgxLCAKKyAgICA2LCAxLCAyMzQsIDIzMywgODEsIDQsIDEsIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjMzLCA3OCwgODEsIDQsIDEsIDIzMywgNzgsIAorICAgIDgxLCA2LCAxLCAyMzAsIDIzNSwgODEsIDQsIDEsIDIzMCwgMjM1LCA4MSwgNiwgMSwgMjI4LCAyMzgsIDgxLCA0LCAxLCAKKyAgICAyMjgsIDIzOCwgODEsIDYsIDEsIDIzMywgMjM5LCA4MSwgNCwgMSwgMjMzLCAyMzksIDgxLCA2LCAxLCA3OCwgODEsIDQsIDEsIAorICAgIDc4LCA4MSwgNiwgMSwgMjI1LCAxMTEsIDgxLCA0LCAxLCAyMjUsIDExMSwgODEsIDYsIDEsIDIyMiwgMjEzLCA4MSwgNCwgMSwgCisgICAgMjIyLCAyMTMsIDgxLCA2LCAxLCAyMTksIDE2NywgODEsIDQsIDEsIDIxOSwgMTY3LCA4MSwgNiwgMSwgMjE3LCA0MiwgODEsIAorICAgIDQsIDEsIDIxNywgNDIsIDgxLCA2LCAxLCAyMTQsIDIyOSwgODEsIDQsIDEsIDIxNCwgMjI5LCA4MSwgNiwgMSwgMjQ0LCAKKyAgICAxMjksIDgxLCA0LCAxLCAyNDQsIDEyOSwgODEsIDYsIDEsIDIzNCwgMTE4LCA4MSwgNCwgMSwgMjM0LCAxMTgsIDgxLCA2LCAKKyAgICAxLCAyMjQsIDE2NCwgODEsIDQsIDEsIDIyNCwgMTY0LCA4MSwgNiwgMSwgMjI2LCAxODIsIDgxLCA0LCAxLCAyMjYsIDE4MiwgCisgICAgODEsIDYsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA0LCAxLCAyNDgsIDUsIDI1NCwgMTc5LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyNTQsIDIwNSwgODEsIDQsIDEsIDU1LCA4MSwgMjU0LCAyMDUsIDgxLCA2LCAxLCAyNDksIDEyMywgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDksIDEyMywgMjQ1LCAyMDIsIDgxLCA2LCAxLCAyNDgsIDUsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjQ4LCA1LCAKKyAgICAyMzQsIDIzMywgODEsIDYsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDgsIDUsIDIyOCwgMjM4LCA4MSwgNiwgCisgICAgMSwgMjQ5LCAxMjMsIDIyOCwgMjM4LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDIyOCwgMjM4LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyMjYsIDE4MiwgODEsIDQsIDEsIDU1LCA4MSwgMjI2LCAxODIsIDgxLCA2LCAxLCAyMjEsIDI0OCwgODEsIDQsIDEsIDIyMSwgCisgICAgMjQ4LCA4MSwgNiwgMSwgMjQ5LCAxMzYsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDYsIDEsIAorICAgIDU1LCA4MSwgMjIwLCA1NywgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCA1NywgODEsIDYsIDEsIDU1LCA4MSwgMjQ1LCA4MywgCisgICAgODEsIDQsIDEsIDU1LCA4MSwgMjQ1LCA4MywgODEsIDYsIDEsIDI1NCwgMTkxLCAyMzQsIDEyMywgODEsIDQsIDEsIDI1NCwgCisgICAgMTkxLCAyMzQsIDEyMywgODEsIDYsIDEsIDI0OCwgNSwgMjQxLCA1MiwgODEsIDQsIDEsIDI0OCwgNSwgMjQxLCA1MiwgODEsIAorICAgIDYsIDEsIDU1LCA4MSwgMjQxLCA1MiwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCA1MiwgODEsIDYsIDEsIDU1LCA4MSwgMTYyLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAxNjIsIDgxLCA2LCAxLCAyMzMsIDE1NCwgMTYyLCA4MSwgNCwgMSwgMjMzLCAxNTQsIDE2MiwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjI0LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyNDIsIDIsIDgxLCA0LCAxLCA1NSwgODEsIDI0MiwgMiwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA0LCAxLCAKKyAgICA1NSwgODEsIDI0MywgMTA5LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgODEsIDQsIDEsIDU1LCA4MSwgMjQ3LCAxNzEsIAorICAgIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjQsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjQsIDgxLCA2LCAxLCA1NSwgMjI3LCAKKyAgICAyMTIsIDIyMCwgMjQsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyMCwgMjQsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIAorICAgIDIyOSwgMzIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyOSwgMzIsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgCisgICAgMTUyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjcsIDE1MiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjEyLCAzNywgCisgICAgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI1MiwgODEsIDE2LCAyMzAsIDIzNiwgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjI1LCAxMTIsIDIyMiwgMjEzLCA4MSwgMTYsIDIxOCwgMTQ5LCA4MSwgMTYsIDIxNywgNDMsIDIyMiwgCisgICAgMjEzLCA4MSwgMTYsIDIzNCwgMTE5LCAyMjIsIDIxMywgODEsIDE2LCAyMjAsIDI1LCAyMTksIDE2NywgODEsIDYsIDEsIAorICAgIDI0OSwgMTIzLCAyMjAsIDU3LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA2LCAxLCAyNDksIDEyMywgMjQzLCAKKyAgICAxMDksIDgxLCA0LCAxLCAyNDksIDEyMywgMjQzLCAxMDksIDgxLCAzOCwgMjI4LCAyMzksIDQ4LCA4MSwgMzgsIDIxOCwgCisgICAgMjQ5LCAyNTMsIDIzMiwgODEsIDM4LCAyMTgsIDI0OSwgMjMzLCAyNywgODEsIDYsIDEsIDI1MSwgMjA3LCAyMzQsIDEyMywgCisgICAgODEsIDQsIDEsIDI1MSwgMjA3LCAyMzQsIDEyMywgODEsIDU1LCAyMjcsIDIxMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MSwgCisgICAgNTUsIDIyNywgMjEyLCAyNDcsIDIwNSwgMjI0LCAxNiwgNzksIDgxLCA1NSwgMjI3LCAyMTIsIDIzNSwgMjQ0LCAyMjQsIDE2LCAKKyAgICA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjEzLCAyNDEsIDI0NywgMTgwLCA4MSwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCA4MSwgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MSwgMjMwLCAxMjksIDI0NywgMTgwLCA5OCwgNCwgMSwgMjU0LCAxMzEsIDk4LCA0LCAxLCAKKyAgICAyNTIsIDE2MCwgOTgsIDQsIDEsIDI0MywgMTEzLCA5OCwgNCwgMSwgMjQ3LCAxMzYsIDk4LCA0LCAxLCAyNDUsIDE1OCwgOTgsIAorICAgIDQsIDEsIDIxMywgMTYwLCA5OCwgNCwgMSwgMjEwLCA4OSwgOTgsIDQsIDEsIDIxNywgNjEsIDk4LCA0LCAxLCAyMzYsIDYsIAorICAgIDk4LCA0LCAxLCAyMzQsIDI0MCwgOTgsIDQsIDEsIDIzMywgODcsIDk4LCA0LCAxLCAyMzEsIDE5MCwgOTgsIDQsIDEsIDIyOSwgCisgICAgMjAwLCA5OCwgNCwgMSwgMjI2LCAyMDAsIDk4LCA0LCAxLCAyMjYsIDIxLCA5OCwgNCwgMSwgMjEwLCA3OCwgOTgsIDQsIDEsIAorICAgIDIyMywgMTc0LCA5OCwgNCwgMSwgMjIxLCAyNDUsIDk4LCA0LCAxLCAyMTcsIDUxLCA5OCwgNCwgMSwgMjE0LCAxOTAsIDk4LCAKKyAgICA0LCAxLCAyMjUsIDE0MywgOTgsIDQsIDEsIDIzNCwgMTI3LCA5OCwgNCwgMSwgMjQyLCAyNDgsIDk4LCA0LCAxLCAyMjQsIAorICAgIDc2LCA5OCwgNCwgMSwgMjIwLCAyMiwgOTgsIDQsIDEsIDI1MCwgMTA1LCA5OCwgNCwgMSwgMjUxLCAxNSwgOTgsIDQsIDEsIAorICAgIDIzNSwgMTA2LCA5OCwgNCwgMSwgMjUwLCA0OCwgOTgsIDQsIDEsIDI1MCwgMTUxLCA5OCwgNCwgMSwgMjExLCAxNjMsIDk4LCAKKyAgICA0LCAxLCAyMzUsIDExNywgOTgsIDQsIDEsIDI0MiwgNTAsIDk4LCA0LCAxLCAyNDEsIDI0NSwgOTgsIDQsIDEsIDI0MSwgCisgICAgMTgyLCA5OCwgNCwgMSwgMjEyLCAyMiwgOTgsIDQsIDEsIDI0MiwgMTEsIDk4LCA0LCAxLCAyNDEsIDcyLCA5OCwgNCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCA0LCAxLCAyNTQsIDI0MSwgMjE2LCAxMDksIDEsIDE5MiwgMjE2LCAxMDksIDEsIDIxMSwgOTksIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDk4LCAyMTYsIDEwOSwgMSwgMjExLCA4OCwgMjE2LCAxMDksIDEsIDIxMSwgODYsIDIxNiwgCisgICAgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgMjExLCA4MSwgMjE2LCAxMDksIDEsIAorICAgIDIxMSwgOTYsIDIxNiwgMTA5LCAxLCAyMTEsIDkzLCAyMTYsIDEwOSwgMSwgMjExLCA5NSwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgOTQsIDIxNiwgMTA5LCAxLCAyMTEsIDEyLCAyMTYsIDEwOSwgMSwgMjExLCA5MCwgMjE2LCAxMDksIDEsIDIxMSwgNzksIAorICAgIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA3OSwgMjE2LCAxMDksIDEsIDIxMSwgNzYsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDg0LCAyMTYsIDEwOSwgMSwgMjUyLCA0MCwgMjU1LCAyNSwgMjExLCA4NCwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg0LCAyMTYsIDEwOSwgMSwgMjExLCA4MywgMjE2LCAxMDksIDEsIDIxMSwgMTAzLCAyMTYsIDEwOSwgMSwgMjExLCA3NywgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc3LCAyMTYsIDEwOSwgMSwgMjExLCA2NiwgMjE2LCAxMDksIDEsIDIxNSwgCisgICAgMTE2LCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjExLCA4LCAyMTYsIDEwOSwgMSwgMjExLCA0OSwgMjE2LCAxMDksIDEsIAorICAgIDI1NCwgMjE2LCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTEsIDc1LCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA3NCwgMjE2LCAxMDksIDEsIDIxMSwgNzEsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCAKKyAgICA4NSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDY5LCAyMTYsIDEwOSwgMSwgMjExLCA2NywgMjE2LCAxMDksIDEsIAorICAgIDIxMCwgMjEyLCAyMTYsIDEwOSwgMSwgMjExLCA2NCwgMjE2LCAxMDksIDEsIDIxMSwgNjMsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDg3LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgODcsIDIxNiwgMTA5LCAxLCAyNTMsIDE3MSwgMjExLCA4NywgMjE2LCAKKyAgICAxMDksIDEsIDIxMSwgNjIsIDIxNiwgMTA5LCAxLCAyMTEsIDYwLCAyMTYsIDEwOSwgMSwgMjExLCA2MSwgMjE2LCAxMDksIDEsIAorICAgIDIxMSwgNTksIDIxNiwgMTA5LCAxLCAyMTEsIDU4LCAyMTYsIDEwOSwgMSwgMjExLCA5NywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgNTYsIDIxNiwgMTA5LCAxLCAyMTEsIDU0LCAyMTYsIDEwOSwgMSwgMjExLCA1MywgMjE2LCAxMDksIDEsIDIxMSwgNTIsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjE3LCAzNSwgMjExLCA1MCwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgNDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ3LCAyMTYsIDEwOSwgMSwgMjEwLCAyNDQsIDIxNiwgMTA5LCA1OCwgMSwgMjMzLCAKKyAgICAxMzIsIDc5LCAyMTYsIDEwOSwgMjIwLCAxNDAsIDc5LCAyMTYsIDEwOSwgMTE3LCAyMzUsIDY5LCAyOSwgMywgMjMyLCAxNjEsIAorICAgIDI5LCAzLCAyMzAsIDE2NSwgMjksIDMsIDIyMiwgMjExLCAyOSwgMywgMjE5LCA1OSwgMjksIDMsIDIyMCwgOCwgMjksIDMsIAorICAgIDI1MSwgMjEyLCAyOSwgMywgMjE2LCA0MiwgMjksIDMsIDI0OSwgMjQ1LCAyOSwgMywgMjI4LCA3NywgMjksIDMsIDIyNywgCisgICAgMTM3LCAyOSwgMywgMjQyLCAxODcsIDIyNywgNCwgMjksIDMsIDIxMCwgMjIsIDI5LCAzLCAyNDcsIDE1MSwgMjksIDMsIAorICAgIDI0OCwgMTEyLCAyOSwgMywgMjM1LCA3MywgMjksIDMsIDIxNiwgMTU2LCAyOSwgMywgMjUwLCA5MywgMjksIDMsIDIyNSwgCisgICAgMTIzLCAyOSwgMywgMjI1LCAxOCwgMjksIDMsIDI0MywgNiwgMjksIDMsIDI0MywgMiwgMjksIDMsIDI0MywgMywgMjksIDMsIAorICAgIDI0MywgNCwgMjksIDMsIDIxOCwgMjI1LCAyOSwgMywgMjE4LCAxODEsIDI5LCAzLCAyMTgsIDE5NCwgMjksIDMsIDIxOCwgCisgICAgMjI0LCAyOSwgMywgMjE4LCAxOTgsIDI5LCAzLCAyMTgsIDE5OSwgMjksIDMsIDIxOCwgMTg2LCAyOSwgMywgMjUwLCAyMjEsIAorICAgIDI5LCAzLCAyNTAsIDIwMCwgMjksIDMsIDI1MCwgMjAyLCAyOSwgMywgMjUwLCAyMjAsIDI5LCAzLCAyNTAsIDIxOCwgMjksIAorICAgIDMsIDI1MCwgMjE5LCAyOSwgMywgMjUwLCAyMDEsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAyOSwgMywgCisgICAgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAzLCAyMDksIAorICAgIDIyNiwgMjksIDMsIDI1MCwgMjE2LCAyOSwgMywgMjUwLCAyMDMsIDI5LCAzLCAyNTAsIDIwNSwgMjksIDMsIDI1MCwgMjE1LCAKKyAgICAyOSwgMywgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDIxNCwgMjksIDMsIDI1MCwgMjA0LCAyOSwgMywgMjIzLCAyMzksIDI5LCAKKyAgICAzLCAyMjMsIDIyOSwgMjksIDMsIDIyMywgMjM1LCAyOSwgMywgMjIzLCAyMzgsIDI5LCAzLCAyMjMsIDIzNiwgMjksIDMsIAorICAgIDIyMywgMjM3LCAyOSwgMywgMjIzLCAyMzQsIDI5LCAzLCAyMzMsIDE2NSwgMjksIDMsIDIzMywgMTU3LCAyOSwgMywgMjMzLCAKKyAgICAxNjAsIDI5LCAzLCAyMzMsIDE2NCwgMjksIDMsIDIzMywgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMzMsIDE1OCwgCisgICAgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgMTI5LCAyOSwgCisgICAgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3OCwgMjksIDMsIAorICAgIDI0MiwgNjksIDI5LCAzLCAyNDIsIDcyLCAyOSwgMywgMjQyLCA3NywgMjksIDMsIDI0MiwgNzQsIDI5LCAzLCAyNDIsIDc1LCAKKyAgICAyOSwgMywgMjQyLCA3MSwgMzgsIDMzLCAxLCAyNTIsIDgzLCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIDEsIDI0MiwgCisgICAgMjQzLCAzOCwgMzMsIDEsIDI0OCwgOTgsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAzOCwgMzMsIAorICAgIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE4MiwgMzgsIDMzLCAxLCAyNDUsIDE2NywgMzgsIDMzLCAxLCAyNDUsIDE1OCwgCisgICAgMzgsIDMzLCAxLCA3OCwgMzgsIDMzLCAxLCAyMjUsIDIyNCwgMzgsIDMzLCAxLCAyNDUsIDEwMCwgMzgsIDMzLCAxLCAyNDUsIAorICAgIDkwLCAzOCwgMzMsIDEsIDIxNywgMjMsIDM4LCAzMywgMSwgMTYyLCAzOCwgMzMsIDEsIDIxNSwgMTc5LCAzOCwgMzMsIDEsIAorICAgIDI1MCwgMTM5LCAzOCwgMzMsIDEsIDIyMCwgMTA0LCAzOCwgMzMsIDEsIDIyMCwgNjcsIDM4LCAzMywgMSwgMjQ0LCA5MCwgCisgICAgMzgsIDMzLCAxLCAyNDUsIDg5LCAzOCwgMzMsIDEsIDYxLCAzOCwgMzMsIDEsIDIzNiwgNjcsIDM4LCAzMywgMSwgMjQ3LCAKKyAgICAxNjksIDM4LCAzMywgMSwgMjMwLCAxNDUsIDIxNCwgMjA1LCAzOCwgMzMsIDEsIDIxMSwgNTksIDM4LCAzMywgMSwgMjEwLCAKKyAgICAyMTIsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDYxLCAzOCwgMzMsIDEsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAKKyAgICAyNTIsIDEsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCA0NCwgMjU0LCAxMTgsIAorICAgIDIxOCwgNjEsIDIzMSwgMTU5LCA0NCwgMjU0LCAxMTgsIDI0NiwgMTI2LCAyMTgsIDYxLCAyMzEsIDE1OSwgNDMsIDIxOCwgCisgICAgNjEsIDEyNywgNDQsIDIxOCwgNjEsIDEyNywgNDMsIDI0NiwgMTI2LCAyMTgsIDYxLCAxMjcsIDQ0LCAyNDYsIDEyNiwgMjE4LCAKKyAgICA2MSwgMTI3LCAyMjMsIDE2MCwgMjM1LCAyMDksIDIzMSwgMTU5LCAyMjMsIDE2MCwgMjQ2LCAxMjYsIDIzNSwgMjA5LCAyMzEsIAorICAgIDE1OSwgMjQ2LCAxMjYsIDIxNSwgMjQyLCAyMzEsIDE1OSwgNDMsIDIxNSwgMjQyLCAxMjcsIDQ0LCAyMTUsIDI0MiwgMTI3LCAKKyAgICAyMjMsIDE2MCwgMjE4LCAyMzYsIDQzLCAyMjMsIDE2MCwgMjI2LCAyMDIsIDEyNywgNDQsIDIyMywgMTYwLCAyMjYsIDIwMiwgCisgICAgMTI3LCAyNDUsIDIxOCwgMjQ5LCAxNjYsIDIyNiwgMTcsIDI0NCwgMzAsIDIyNiwgMTcsIDIyMywgNTIsIDI0NCwgMzAsIAorICAgIDIyNiwgMTcsIDI0MCwgMTcyLCAyNDYsIDEyNiwgMjI2LCAyNTUsIDI0NiwgMTEyLCAyNTQsIDEyNywgMjE0LCAxNTMsIDI1NCwgCisgICAgMTI3LCAyNDYsIDEyNiwgMjIyLCAyNTAsIDI1NCwgMTE3LCA1MiwgMjI2LCAyNTIsIDI0MCwgMTc1LCAyMzUsIDIwMCwgMjM1LCAKKyAgICAyMDgsIDIyNiwgNjMsIDI1MSwgMTYyLCAyNDAsIDE3NiwgMiwgMjQ4LCA5LCAyMTYsIDkwLCAyLCAyMjIsIDIzNywgNDgsIAorICAgIDQzLCAxMjEsIDIyNiwgOSwgMTI3LCA0NCwgMTIxLCAyMjYsIDksIDEyNywgMjE2LCA5MCwgMiwgNTksIDQ4LCAyMTYsIDkwLCAKKyAgICAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDksIDIsIDIyNCwgMTAsIDQ0LCA2NywgMjUyLCAxNDksIDIsIDIyNCwgMTAsIAorICAgIDIxNiwgMTUsIDQzLCAxNjMsIDEyNywgMjE2LCAxNSwgNDQsIDE2MywgMTI3LCAyNTEsIDE4MywgNDMsIDE2MywgMTI3LCAKKyAgICAyNTEsIDE4MywgNDQsIDE2MywgMTI3LCA0MywgMjE5LCAxODksIDEwNCwgMTI3LCA0NCwgMjE5LCAxODksIDEwNCwgMTI3LCAKKyAgICA0MywgNTIsIDIyNiwgNywgNDQsIDUyLCAyMjYsIDcsIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAxMjMsIAorICAgIDU5LCAxMTUsIDExMywgMTcwLCAyMjQsIDE0MywgOTIsIDI0NCwgMTksIDU5LCAyMjQsIDE0MywgMjQ0LCA4OSwgNTksIDc5LCAKKyAgICAyMjMsIDUyLCAyMjQsIDE2LCA3OSwgNjcsIDE4NCwgMjIyLCAyMzcsIDIyNSwgMTMsIDIxMSwgMjA5LCAyMjAsIDE0MCwgCisgICAgMjMwLCAyMjksIDI0NywgMTI4LCAyMTUsIDk0LCAyNDksIDIyNywgMjIzLCAxNjAsIDI0NywgMTI4LCAyMjMsIDE2MCwgMjQ5LCAKKyAgICAyMjcsIDIxNSwgOTQsIDIyMCwgMTUyLCAyNDgsIDIxNCwgMiwgNDMsIDI0MiwgMTE1LCAyNDgsIDIxNCwgMiwgNDQsIDI0MiwgCisgICAgMTE1LCAyMTUsIDk0LCAyNDgsIDIxMywgMjE2LCAxNSwgMTYzLCAyMjEsIDE3NSwgNTAsIDIxNSwgNTksIDI0OCwgMTY0LCAKKyAgICAyMTYsIDE0NCwgMjQ4LCAxNjQsIDEwLCAzNCwgMjIzLCA3OSwgMTAsIDM0LCAyNTAsIDE4LCAxMCwgMzQsIDIyMSwgMTc4LCAKKyAgICAxMTEsIDEwLCAzNCwgMjIxLCAxNzgsIDEwNSwgMTAsIDM0LCAyMjEsIDE3OCwgMTU4LCAxMCwgMzQsIDIyNSwgMTcwLCAxMCwgCisgICAgMzQsIDI1MSwgMTcxLCAxMCwgMzQsIDIxNywgOTMsIDEwLCAzNCwgMjM0LCAzOSwgMTExLCAxMCwgMzQsIDIzNCwgMzksIAorICAgIDEwNSwgMTAsIDM0LCAyNDcsIDE3OCwgMTAsIDM0LCAyMjEsIDE4MSwgMTAsIDM0LCA0LCAxMTEsIDEwLCAzNCwgNCwgMTA1LCAKKyAgICAxMCwgMzQsIDIzMywgMTAzLCAxMTEsIDEwLCAzNCwgMjMzLCAxMDMsIDEwNSwgMTAsIDM0LCAyMzMsIDEwMywgMTU4LCAxMCwgCisgICAgMzQsIDIzMywgMTAzLCAxNjEsIDEwLCAzNCwgMjE5LCA3MCwgMTAsIDM0LCAyMTYsIDE0NiwgMTAsIDM0LCAyMTksIDY4LCAKKyAgICAxMTEsIDEwLCAzNCwgMjE5LCA2OCwgMTA1LCAxMCwgMzQsIDI0MSwgMjM1LCAxMTEsIDEwLCAzNCwgMjQxLCAyMzUsIDEwNSwgCisgICAgMTAsIDM0LCAyNDIsIDIyLCAxMCwgMzQsIDIyMywgMTUwLCAxMCwgMzQsIDI1MCwgOTAsIDEwLCAzNCwgMjE4LCAzOCwgMTAsIAorICAgIDM0LCAyMzAsIDEzMywgMTAsIDM0LCAyNDgsIDk2LCAxMCwgMzQsIDIzMCwgMTI1LCAxMCwgMzQsIDI1MCwgMzMsIDEwLCAzNCwgCisgICAgMjEyLCA0MSwgMTExLCAxMCwgMzQsIDIxMiwgNDEsIDEwNSwgMTAsIDM0LCAyNDQsIDEwNCwgMTAsIDM0LCAyMjUsIDIzNiwgCisgICAgMTExLCAxMCwgMzQsIDIyNSwgMjM2LCAxMDUsIDEwLCAzNCwgMjE5LCAxNjIsIDE2MywgMjE1LCAyMzcsIDIxNSwgMTg5LCAKKyAgICAxMCwgMzQsIDI0OSwgMTUzLCAxMCwgMzQsIDI0NywgMTQ0LCAxMCwgMzQsIDIzNSwgMTQzLCAxMCwgMzQsIDI1MSwgMjA2LCAKKyAgICA2NCwgMjUwLCAyLCAxMCwgMzQsIDI0NSwgMjMsIDEwLCAzNCwgMjE4LCAyNTEsIDExMSwgMTAsIDM0LCAyMTgsIDI1MSwgCisgICAgMTA1LCAxMCwgMzQsIDI1MiwgMTYyLCAxMCwgMzQsIDIxOSwgMTY5LCAxMCwgMzQsIDI1MSwgNzEsIDIxOSwgMTY5LCAxMCwgCisgICAgMzQsIDIyOSwgOTUsIDExMSwgMTAsIDM0LCAyMjksIDk1LCAxMDUsIDEwLCAzNCwgMjI5LCA5NSwgMTU4LCAxMCwgMzQsIAorICAgIDIyOSwgOTUsIDE2MSwgMTAsIDM0LCAyMzEsIDUxLCAxMCwgMzQsIDIyMCwgNTksIDEwLCAzNCwgMjIzLCAxNTYsIDEwLCAzNCwgCisgICAgMjQ1LCA0NSwgMTAsIDM0LCAyMjYsIDIxMywgMTAsIDM0LCAyNTEsIDE0MSwgMTExLCAxMCwgMzQsIDI1MSwgMTQxLCAxMDUsIAorICAgIDEwLCAzNCwgMjMxLCA5MSwgMTAsIDM0LCAyMzAsIDEyOCwgMTAsIDM0LCAyNDIsIDE0NywgMTExLCAxMCwgMzQsIDI0MiwgCisgICAgMTQ3LCAxMDUsIDEwLCAzNCwgMjQyLCAxNDcsIDE1OCwgMTAsIDM0LCAyMTYsIDEwNywgMTAsIDM0LCAyNTAsIDEsIDEwLCAKKyAgICAzNCwgMjEyLCA5LCAxMTEsIDEwLCAzNCwgMjEyLCA5LCAxMDUsIDEwLCAzNCwgMjUxLCA3MSwgMjIxLCAxNzIsIDEwLCAzNCwgCisgICAgMjE5LCAxNjIsIDI0MCwgMjU1LCAxMCwgMzQsIDI0MCwgMjU1LCAxMCwgMzQsIDI1MSwgNzEsIDIxOSwgNCwgMTAsIDM0LCAKKyAgICAyNTEsIDcxLCAyMjAsIDU0LCAxMCwgMzQsIDI0NCwgNDAsIDEwLCAzNCwgMjUxLCA3MSwgMjUwLCAyMzYsIDEwLCAzNCwgCisgICAgMjE5LCAxNjIsIDIxMiwgNTcsIDEwLCAzNCwgMjEyLCA1OCwgMTExLCAxMCwgMzQsIDIxMiwgNTgsIDEwNSwgMTAsIDM0LCAKKyAgICAyNTAsIDM1LCAxMCwgMzQsIDI1MSwgNzEsIDI0MiwgMTczLCAxMCwgMzQsIDIwMCwgMTExLCAxMCwgMzQsIDIwMCwgMTA1LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDIzMiwgMTQzLCAxMCwgMzQsIDI1MSwgNzEsIDI0MywgOTUsIDEwLCAzNCwgMjMwLCAxMjQsIAorICAgIDExMSwgMTAsIDM0LCAyMzAsIDEyNCwgMTA1LCAxMCwgMzQsIDIyMywgMTYyLCAxMCwgMzQsIDI1MSwgMjE1LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIxNywgNTcsIDIzMywgNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjMzLCA1OSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyMTEsIDIzOSwgMTAsIDM0LCAyNTEsIDcxLCAyNDQsIDU0LCAxMCwgMzQsIDI0NSwgMjI2LCAxMTEsIDEwLCAzNCwgMjQ1LCAKKyAgICAyMjYsIDEwNSwgMTAsIDM0LCAyNDUsIDIyNiwgMTU4LCAxMCwgMzQsIDI1MSwgNzEsIDI0NSwgMjI1LCAxMCwgMzQsIDI0MSwgCisgICAgMjQyLCAxMCwgMzQsIDI1MSwgNzEsIDI0MCwgMjUyLCAxMCwgMzQsIDI1MSwgMjAyLCAxMCwgMzQsIDI0MiwgMjI5LCAxMCwgCisgICAgMzQsIDI1MSwgNzEsIDI0NCwgOTgsIDEwLCAzNCwgMjUxLCA3MSwgMjUxLCAyNDUsIDEwLCAzNCwgMjUxLCA3MSwgMjIyLCAzLCAKKyAgICAxMCwgMzQsIDIxOSwgMTYyLCAyMTIsIDIsIDEwLCAzNCwgMjE5LCAxNjIsIDIxMSwgNDEsIDEwLCAzNCwgMjUxLCA3MSwgCisgICAgMjQzLCAyNTIsIDEwLCAzNCwgMjM1LCAxNDksIDI0NSwgNDksIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCA0OSwgMTAsIDM0LCAKKyAgICAyMzUsIDE0OSwgMjE2LCAxNiwgMTAsIDM0LCAyNTEsIDcxLCAyMTYsIDE2LCAxMCwgMzQsIDIzNSwgMTQ5LCAyNDYsIDEwNCwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyNDYsIDEwNCwgMTAsIDM0LCAyMTUsIDkxLCAxMCwgMzQsIDIzNSwgMTQ5LCAyMTUsIDkxLCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDIxNSwgOTEsIDYwLCAzNCwgMTExLCA2MCwgMzQsIDIzMiwgMjE5LCA2MCwgMzQsIDI0NywgCisgICAgMTI4LCA2MCwgMzQsIDIxOSwgOTcsIDYwLCAzNCwgMjIxLCAxNzcsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgNjAsIDM0LCAKKyAgICAyMzIsIDI0MywgNjAsIDM0LCAyMzEsIDE5MCwgNjAsIDM0LCAyMzMsIDM5LCA2MCwgMzQsIDI0NSwgMTM3LCA2MCwgMzQsIAorICAgIDE5NiwgNjAsIDM0LCAxMjQsIDI1MSwgMTcxLCA2MCwgMzQsIDI0OSwgMTU1LCA2MCwgMzQsIDI0MCwgMTE4LCA2MCwgMzQsIAorICAgIDIxNywgOTMsIDYwLCAzNCwgMjA0LCAyNTEsIDE3MSwgNjAsIDM0LCAyMzQsIDM4LCA2MCwgMzQsIDIyNCwgMjI3LCA2MCwgCisgICAgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQ1LCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDI0MSwgCisgICAgMTgzLCAyNDUsIDE1MywgNjAsIDM0LCAyMTYsIDI0OCwgNjAsIDM0LCAyNDcsIDE3OCwgNjAsIDM0LCAyMjEsIDE4MSwgNjAsIAorICAgIDM0LCAyNTAsIDE4LCA2MCwgMzQsIDIyNCwgMTg1LCA2MCwgMzQsIDI1NCwgMjI0LCA2MCwgMzQsIDIzMCwgMTE1LCA2MCwgCisgICAgMzQsIDI0NSwgMTUzLCA2MCwgMzQsIDI0NSwgMjMxLCA2MCwgMzQsIDIyMSwgMjAyLCA2MCwgMzQsIDI0MiwgMTgxLCA2MCwgCisgICAgMzQsIDI0MiwgMTgyLCAyMTksIDgzLCA2MCwgMzQsIDI0NSwgNDgsIDYwLCAzNCwgMjUyLCAwLCA2MCwgMzQsIDIxMSwgMjIxLCAKKyAgICA2MCwgMzQsIDI1MCwgMTA5LCA2MCwgMzQsIDIyMiwgMTk4LCA2MCwgMzQsIDIzNiwgMiwgNjAsIDM0LCAyMTksIDgxLCA2MCwgCisgICAgMzQsIDIzMywgMTAyLCA2MCwgMzQsIDI0OSwgMTY0LCA2MCwgMzQsIDIxOCwgMjM5LCA2MCwgMzQsIDIzMCwgMTIwLCA2MCwgCisgICAgMzQsIDIyMiwgMjI3LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTk0LCA2MCwgMzQsIDIxNSwgOTgsIDYwLCAKKyAgICAzNCwgMjQ2LCA4OCwgNjAsIDM0LCAyMTksIDI1MywgMjE2LCAxNDYsIDYwLCAzNCwgMjQ2LCAxMjYsIDI1MCwgMTgsIDYwLCAKKyAgICAzNCwgMjAwLCAyMTgsIDExMCwgNjAsIDM0LCAxMTMsIDI0MiwgMTcsIDYwLCAzNCwgMjIwLCAyLCA2MCwgMzQsIDI1MSwgCisgICAgMTc3LCA2MCwgMzQsIDIxOSwgNjcsIDYwLCAzNCwgMjUxLCAxNDUsIDYwLCAzNCwgMjE4LCAxNDAsIDYwLCAzNCwgMjQxLCAKKyAgICAyMzQsIDYwLCAzNCwgMjQyLCAzNSwgNjAsIDM0LCAyNDcsIDEzMSwgNjAsIDM0LCAyNDIsIDIyLCA2MCwgMzQsIDI1MSwgCisgICAgMTYyLCA2MCwgMzQsIDIyMywgMTUwLCA2MCwgMzQsIDIyMSwgMTg5LCA2MCwgMzQsIDI0NywgMjA3LCA2MCwgMzQsIDI1MywgCisgICAgMTc2LCA2MCwgMzQsIDIxOCwgMjM2LCA2MCwgMzQsIDIyOCwgNTYsIDYwLCAzNCwgMjE4LCAzOCwgNjAsIDM0LCAyMjEsIAorICAgIDIxMywgNjAsIDM0LCAyMzAsIDEzMywgNjAsIDM0LCAyMTUsIDIzNiwgNjAsIDM0LCAyMzMsIDEyOCwgNjAsIDM0LCAyMTgsIAorICAgIDEzMSwgNjAsIDM0LCAyNDgsIDk2LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNTQsIDIyOCwgNTYsIDYwLCAzNCwgCisgICAgMjQ5LCAyMjMsIDYwLCAzNCwgMjQzLCAyMjksIDYwLCAzNCwgMjUwLCAyOSwgNjAsIDM0LCAyMTgsIDE0NCwgNjAsIDM0LCAKKyAgICAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgMTA0LCA2MCwgMzQsIDI1MCwgMjYsIDYwLCAzNCwgMjQ0LCAxNjksIDYwLCAzNCwgNTIsIAorICAgIDIxMSwgMTc4LCA2MCwgMzQsIDE2MywgMjE1LCAyMzcsIDIxNSwgMTg5LCA2MCwgMzQsIDIxOSwgOTEsIDYwLCAzNCwgMjQ0LCAKKyAgICAxNzksIDYwLCAzNCwgMjQ5LCAxNTMsIDYwLCAzNCwgMjQ3LCAxNDQsIDYwLCAzNCwgMjI0LCAxODIsIDYwLCAzNCwgMjM1LCAKKyAgICAxNDMsIDYwLCAzNCwgMjMxLCA3MiwgNjAsIDM0LCAyMTYsIDg5LCA2MCwgMzQsIDIxNywgMjQ2LCA2MCwgMzQsIDIzMiwgCisgICAgMjM3LCA2MCwgMzQsIDIxNCwgMTMxLCA2MCwgMzQsIDI0NCwgMTI4LCA2MCwgMzQsIDI1MSwgMjA2LCA2NCwgMjUwLCAyLCAKKyAgICA2MCwgMzQsIDIxOSwgMTkwLCA2MCwgMzQsIDI0NiwgMTI2LCAyMTYsIDI0MywgNjAsIDM0LCAyMTEsIDI1MywgNjAsIDM0LCAKKyAgICAyMTksIDEwNSwgNjAsIDM0LCAyNDcsIDE5NSwgNjAsIDM0LCAyNDUsIDIzLCA2MCwgMzQsIDIxOSwgNywgNjAsIDM0LCA3NSwgCisgICAgNjAsIDM0LCAyMTgsIDEzMywgNjAsIDM0LCAyMTgsIDI1MCwgNjAsIDM0LCAyMTYsIDAsIDYwLCAzNCwgMjQyLCAxNTQsIDYwLCAKKyAgICAzNCwgMjUwLCAyMjYsIDYwLCAzNCwgMjE4LCAxNjIsIDYwLCAzNCwgMjUyLCAxNjIsIDYwLCAzNCwgMjIzLCAzNCwgNjAsIAorICAgIDM0LCAyMTksIDE2OSwgNjAsIDM0LCAyMzUsIDEzNiwgNjAsIDM0LCAyMjksIDk0LCA2MCwgMzQsIDIyMCwgNTksIDYwLCAzNCwgCisgICAgMjQ0LCAxNTcsIDYwLCAzNCwgMjI2LCAyMTMsIDYwLCAzNCwgMjU0LCAxMjYsIDYwLCAzNCwgMjI1LCAzMiwgNjAsIDM0LCAKKyAgICAyNDUsIDIzNSwgNjAsIDM0LCAyNTEsIDE0MCwgNjAsIDM0LCAyMzEsIDkxLCA2MCwgMzQsIDIzMCwgMTg4LCA2MCwgMzQsIAorICAgIDIyMCwgMTU4LCA2MCwgMzQsIDI1NCwgNCwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTYsIDIwLCA2MCwgMzQsIDIyNiwgCisgICAgMTY5LCA2MCwgMzQsIDI1MSwgMjA5LCA2MCwgMzQsIDIxOCwgMTI5LCA2MCwgMzQsIDI0OSwgMjMzLCA2MCwgMzQsIDI0MiwgCisgICAgMTQ2LCA2MCwgMzQsIDIxNiwgMTA3LCA2MCwgMzQsIDIzNSwgMjI0LCA2MCwgMzQsIDI1MSwgMjE5LCA2MCwgMzQsIDIxMiwgCisgICAgNTgsIDI0NSwgMTUzLCA2MCwgMzQsIDI1MCwgMSwgNjAsIDM0LCAyMTIsIDgsIDYwLCAzNCwgMjIxLCAxNzIsIDYwLCAzNCwgCisgICAgMjQwLCAyNTUsIDYwLCAzNCwgMjE5LCA0LCA2MCwgMzQsIDIxNCwgMjIsIDYwLCAzNCwgMjUyLCA4MCwgNjAsIDM0LCAyMjUsIAorICAgIDc2LCA2MCwgMzQsIDI1MiwgMTgyLCA2MCwgMzQsIDIyMCwgNTQsIDYwLCAzNCwgMjIzLCAxMTMsIDYwLCAzNCwgMjIyLCAKKyAgICAxMjgsIDYwLCAzNCwgMjQ0LCA0MCwgNjAsIDM0LCAyNTEsIDIwOCwgNjAsIDM0LCAyNTAsIDIzNiwgNjAsIDM0LCAyNTEsIAorICAgIDIzNCwgNjAsIDM0LCAyMzAsIDEzMCwgNjAsIDM0LCAyMTIsIDU3LCA2MCwgMzQsIDI1MCwgMzUsIDYwLCAzNCwgMjExLCAKKyAgICAyMzYsIDYwLCAzNCwgMjQ3LCAxODgsIDYwLCAzNCwgMjEzLCAxNjEsIDYwLCAzNCwgMjQyLCAxNzMsIDYwLCAzNCwgMjMyLCAKKyAgICAxNDMsIDYwLCAzNCwgMjQzLCA5NSwgNjAsIDM0LCAyMzAsIDEyMywgNjAsIDM0LCAyMTksIDk2LCA2MCwgMzQsIDIxOSwgCisgICAgMjUzLCAyMTcsIDc3LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjMsIDE2MiwgNjAsIDM0LCAyNTEsIDIxNSwgNjAsIDM0LCAyMTEsIAorICAgIDE5NywgNjAsIDM0LCAyNDQsIDE5OCwgNjAsIDM0LCAyMzMsIDU4LCA2MCwgMzQsIDIxNywgNTcsIDIzMywgNTgsIDYwLCAzNCwgCisgICAgMjMzLCA1NCwgNjAsIDM0LCAyMTksIDMyLCA2MCwgMzQsIDIzMywgNTksIDYwLCAzNCwgMjExLCAyMzksIDYwLCAzNCwgMjQ0LCAKKyAgICA1NCwgNjAsIDM0LCAyNDUsIDIyNSwgNjAsIDM0LCAyNDEsIDI0MiwgNjAsIDM0LCAyNDQsIDgsIDYwLCAzNCwgMjQwLCAyNTIsIAorICAgIDYwLCAzNCwgMjUxLCAyMDIsIDYwLCAzNCwgMjE3LCA2NCwgNjAsIDM0LCAyNDIsIDQxLCA2MCwgMzQsIDI0NCwgMTIxLCA2MCwgCisgICAgMzQsIDIyMiwgMzAsIDIxMSwgMjM2LCA2MCwgMzQsIDI1MCwgMjI4LCA2MCwgMzQsIDI0MiwgMjI5LCA2MCwgMzQsIDI0NCwgCisgICAgOTgsIDYwLCAzNCwgMjUxLCAyNDUsIDYwLCAzNCwgMjIyLCAzLCA2MCwgMzQsIDI0OCwgODIsIDYwLCAzNCwgMjEyLCAyLCAKKyAgICA2MCwgMzQsIDI0MSwgMjE3LCA2MCwgMzQsIDIxMSwgNDEsIDYwLCAzNCwgMjMwLCAxOTcsIDYwLCAzNCwgMjUxLCAyMjksIAorICAgIDYwLCAzNCwgMjQ1LCAxNjMsIDYwLCAzNCwgMjQzLCAyNTIsIDYwLCAzNCwgMjE1LCAyMTAsIDYwLCAzNCwgMjQ2LCA5MCwgCisgICAgNjAsIDM0LCAyMjMsIDE0NCwgNjAsIDM0LCAyMjgsIDU4LCA2MCwgMzQsIDI0NSwgNDksIDYwLCAzNCwgMjE2LCAxNiwgNjAsIAorICAgIDM0LCAyNDYsIDEwNCwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNTYsIDExMCwgMjQ4LCA0NSwgMTM1LCA0MywgCisgICAgMjE2LCA0MywgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCA3MiwgMjE2LCA0MywgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAKKyAgICA0MywgMjE2LCA0MywgMjMwLCAyMjksIDIyLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCAyMzAsIAorICAgIDIyOSwgMjIsIDUxLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjQzLCAyMzYsIDIxOCwgMTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAKKyAgICAyMTgsIDEyLCAyNDMsIDI1MSwgNDgsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgNTEsIDExMCwgCisgICAgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjMzLCA1MiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIAorICAgIDI0MywgMjUxLCAyMTQsIDE2MCwgMjMzLCA1MiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMTQsIAorICAgIDE2MCwgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjMyLCAxMTQsIDIzMywgNTIsIAorICAgIDExMCwgMjQ4LCA0NSwgMTM1LCAyMjYsIDEyNiwgMTEwLCAyMTksIDIwLCAxMTAsIDI0OSwgMjI3LCAxMTAsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjQ3LCAxODUsIDc5LCAyMzUsIDEzNywgMjM1LCAyNDMsIDIxOCwgMTYxLCA4NywgMTEwLCAyMzUsIDE2NCwgCisgICAgNzksIDExMCwgMjUwLCA0LCA3OSwgMTEwLCA1NCwgMjEwLCA4NiwgNDMsIDI1NCwgMTE4LCAxMjcsIDQ0LCAyNTQsIDExOCwgCisgICAgMTI3LCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDQ0LCA1MiwgMjU0LCAxMTgsIDEyNywgNDMsIDI0OSwgMTY5LCAxMjcsIDQ0LCAKKyAgICAyNDksIDE2OSwgMTI3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDQ0LCA3MSwgMjQ5LCAxNjksIDEyNywgNDMsIDg1LCAyMzMsIAorICAgIDI2LCAxMjcsIDQ0LCA4NSwgMjMzLCAyNiwgMTI3LCAyMjQsIDI0MCwgNzksIDI0MywgMzksIDc5LCA0MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNDMsIDcxLCAyMzMsIDI2LCAxMjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCA0MywgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0NCwgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAKKyAgICA0MywgNzEsIDQyLCAxMjcsIDQ0LCA3MSwgNDIsIDEyNywgMjEyLCAzNiwgMjQ4LCAxNjQsIDIyMywgNTIsIDUyLCAyMjQsIAorICAgIDE5NCwgMjI0LCAxLCA3OSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAxMjEsIDUyLCAyMjQsIDE5NCwgMjI0LCAxLCA3OSwgCisgICAgMjI0LCAyNDAsIDE2NCwgMjQ0LCAxOTgsIDI0MiwgMTUsIDIyNywgMjAyLCAxMTEsIDI0MiwgMTUsIDIyNywgMjAyLCAxMDUsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAxNTgsIDI0MiwgMTUsIDIyNywgMjAyLCAxNjEsIDI0MiwgMTUsIDIyNywgMjAyLCAxOTAsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAxOTUsIDI0MiwgMTUsIDIyNywgMjAyLCAxOTksIDI0MiwgMTUsIDIyNywgMjAyLCAxOTYsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAyMDEsIDExMCwgMjMzLCA5LCAxMzgsIDc5LCAxMTAsIDIyMiwgMjMxLCAxMzgsIDc5LCAKKyAgICAxMTAsIDI0OCwgNTIsIDEzOCwgNzksIDExMCwgMjQ1LCAxMzYsIDEzOCwgNzksIDI0LCAyMTksIDE1NywgNTksIDEzOCwgNzksIAorICAgIDI0LCA1MiwgNTksIDEzOCwgNzksIDIxMiwgMzIsIDI0OCwgMTY0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDc5LCA2NywgCisgICAgMjM0LCAyMzksIDIyMywgODAsIDIsIDIxMywgMTM1LCAyMTksIDMzLCA3OSwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAxNjQsIAorICAgIDIxNCwgMTYwLCAyNDIsIDM0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDIsIDIxMywgMTM1LCAyMTksIDMzLCAxNjQsIDIxNCwgCisgICAgMTYwLCAyNDIsIDM0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgMjMyLCAxMTQsIDI0MiwgMzQsIDM3LCAyMjQsIAorICAgIDI0MCwgNzksIDExMCwgMjE3LCA0LCAyMzIsIDIyMCwgMjQ0LCAxNTQsIDIyMCwgMTQwLCA4NywgMjQyLCAxNSwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE1LCA3MywgMjQyLCAxNSwgMjI3LCAyMDIsIDIxNiwgMTYzLCAKKyAgICA2NywgMTEwLCAyMzUsIDE2NCwgNzksIDIzMSwgMTQ1LCA3OSwgMjI2LCAzLCAyNTQsIDE0OCwgNzksIDExMCwgNDUsIDIzNSwgCisgICAgMjQ1LCAxMTAsIDE2MywgMjQ0LCAxMTQsIDIxOSwgMjAsIDE0MSwgMSwgNCwgNjEsIDE0MSwgMSwgNjEsIDE0MSwgMSwgNCwgCisgICAgNzQsIDE0MSwgMSwgNzQsIDE0MSwgMSwgNCwgNjksIDE0MSwgMSwgNjksIDE0MSwgMSwgNCwgNzYsIDE0MSwgMSwgNzYsIAorICAgIDE0MSwgMSwgNCwgNzgsIDE0MSwgMSwgNzgsIDE0MSwgMSwgMTc2LCAxNDEsIDEsIDI0MywgMTQyLCAxNDEsIDEsIDIzNCwgCisgICAgOTgsIDE0MSwgMSwgMjQyLCAyMjEsIDE0MSwgMSwgMjMzLCAyMjMsIDE0MSwgMSwgMjQyLCAxMjAsIDE0MSwgMSwgMjM0LCAKKyAgICAxODgsIDE0MSwgMSwgMjQzLCA2OSwgMTQxLCAxLCAyMzQsIDM0LCAxNDEsIDEsIDI0MiwgMTgxLCAxNDEsIDEsIDIwNiwgCisgICAgMTQxLCAxLCAyMTAsIDExNiwgMTQxLCAxLCAyMTksIDE5MywgMTQxLCAxLCAyMTAsIDQ0LCAxNDEsIDEsIDIxOCwgODQsIAorICAgIDE0MSwgMSwgMjEwLCAxMywgMTQxLCAxLCAyMjEsIDE4MywgMTQxLCAxLCAyMTAsIDk0LCAxNDEsIDEsIDIxOSwgNjAsIDE0MSwgCisgICAgMSwgMjEwLCAyMywgMTQxLCAxLCAyMTcsIDEwNiwgMTQxLCAxLCAyNDgsIDIyOSwgMTQxLCAxLCAyMTYsIDExOCwgMTQxLCAxLCAKKyAgICAyNDgsIDExLCAxNDEsIDEsIDQsIDIxNSwgMTE5LCAxNDEsIDEsIDIxNSwgMTE5LCAxNDEsIDEsIDI0NiwgODYsIDE0MSwgMSwgCisgICAgMjE3LCAyMywgMTQxLCAxLCAyNDgsIDk4LCAxNDEsIDEsIDExMiwgMTQxLCAxLCAyNDcsIDE1MywgMTQxLCAxLCAxOTgsIAorICAgIDE0MSwgMSwgMjI4LCAyMzgsIDE0MSwgMSwgMjI3LCAyNDIsIDE0MSwgMSwgMjI5LCAxMTIsIDE0MSwgMSwgMjI4LCA3OSwgCisgICAgMTQxLCAxLCAxNjIsIDE0MSwgMSwgMjUyLCAxOTksIDE0MSwgMSwgMTkxLCAxNDEsIDEsIDI0MSwgMTg3LCAxNDEsIDEsIAorICAgIDI1MiwgMTQsIDE0MSwgMSwgMjI1LCAxMTEsIDE0MSwgMSwgMjQwLCAyMjksIDE0MSwgMSwgMjUxLCAxMzMsIDE0MSwgMSwgCisgICAgMjI0LCAxNTMsIDE0MSwgMSwgMjQxLCAyNDUsIDE0MSwgMSwgMjUyLCA4MywgMTQxLCAxLCAyMjUsIDIyNCwgMTQxLCAxLCAKKyAgICAyNDEsIDc1LCAxNDEsIDEsIDI1MSwgMjEzLCAxNDEsIDEsIDIyNSwgMTksIDE0MSwgMSwgMTg2LCAxNDEsIDEsIDIzMCwgCisgICAgMjM1LCAxNDEsIDEsIDIzMCwgMTA3LCAxNDEsIDEsIDIzMSwgOTYsIDE0MSwgMSwgMjMwLCAxNjYsIDE0MSwgMSwgNCwgMTkyLCAKKyAgICAxNDEsIDEsIDE5MiwgMTQxLCAxLCA0LCAyMTAsIDIxMiwgMTQxLCAxLCAyMTAsIDIxMiwgMTQxLCAxLCA0LCAyMTAsIDI0NCwgCisgICAgMTQxLCAxLCAyMTAsIDI0NCwgMTQxLCAxLCAyMDUsIDE0MSwgMSwgMjIzLCAzOCwgMTQxLCAxLCAyMjIsIDE0MiwgMTQxLCAxLCAKKyAgICAyMjMsIDEzMSwgMTQxLCAxLCAyMjIsIDIxMywgMTQxLCAxLCA0LCAyMTIsIDY1LCAxNDEsIDEsIDIxMiwgNjUsIDE0MSwgMSwgCisgICAgMjExLCAyNTAsIDE0MSwgMSwgMjEyLCAyMiwgMTQxLCAxLCAyMTEsIDIyNywgMTQxLCAxLCAyMzAsIDMwLCAxNDEsIDEsIAorICAgIDIxMiwgMTE2LCAxNDEsIDEsIDQsIDE3NiwgMTQxLCAxLCA0LCAyMzQsIDE4OCwgMzgsIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDM4LCAyMzQsIDIwNywgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAyMzQsIDIwNywgMjEzLCAxMzUsIAorICAgIDIxOSwgMzMsIDc5LCAyMzQsIDIwNywgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAxNDEsIDIzNSwgMTY0LCA3OSwgMTQxLCAKKyAgICAyMTMsIDEzNSwgMjM1LCAxNjQsIDc5LCAxNDEsIDI0NywgMjI5LCAyMTAsIDIyNSwgMjM0LCAyMDcsIDUyLCAyNDAsIDE3NSwgCisgICAgNTYsIDEsIDQsIDYxLCA1NiwgMSwgNjEsIDU2LCAxLCA0LCA3NCwgNTYsIDEsIDc0LCA1NiwgMSwgNCwgNjksIDU2LCAxLCAKKyAgICA2OSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCA0LCA3OCwgNTYsIDEsIDc4LCA1NiwgMSwgMTc2LCA1NiwgMSwgCisgICAgMjQzLCAxNDIsIDU2LCAxLCAyMzQsIDk4LCA1NiwgMSwgMjQyLCAyMjEsIDU2LCAxLCAyMzMsIDIyMywgNTYsIDEsIDI0MiwgCisgICAgMTIwLCA1NiwgMSwgMjM0LCAxODgsIDU2LCAxLCAyNDMsIDY5LCA1NiwgMSwgMjM0LCAzNCwgNTYsIDEsIDI0MiwgMTgxLCAKKyAgICA1NiwgMSwgMjA2LCA1NiwgMSwgMjEwLCAxMTYsIDU2LCAxLCAyMTksIDE5MywgNTYsIDEsIDIxMCwgNDQsIDU2LCAxLCAyMTgsIAorICAgIDg0LCA1NiwgMSwgMjEwLCAxMywgNTYsIDEsIDIyMSwgMTgzLCA1NiwgMSwgMjEwLCA5NCwgNTYsIDEsIDIxOSwgNjAsIDU2LCAKKyAgICAxLCAyMTAsIDIzLCA1NiwgMSwgMjE3LCAxMDYsIDU2LCAxLCAyNDgsIDIyOSwgNTYsIDEsIDIxNiwgMTE4LCA1NiwgMSwgCisgICAgMjQ4LCAxMSwgNTYsIDEsIDQsIDIxNSwgMTE5LCA1NiwgMSwgMjE1LCAxMTksIDU2LCAxLCAyNDYsIDg2LCA1NiwgMSwgMjE3LCAKKyAgICAyMywgNTYsIDEsIDI0OCwgOTgsIDU2LCAxLCAxMTIsIDU2LCAxLCAyNDcsIDE1MywgNTYsIDEsIDE5OCwgNTYsIDEsIDIyOCwgCisgICAgMjM4LCA1NiwgMSwgMjI3LCAyNDIsIDU2LCAxLCAyMjksIDExMiwgNTYsIDEsIDIyOCwgNzksIDU2LCAxLCAxNjIsIDU2LCAxLCAKKyAgICAyNTIsIDE5OSwgNTYsIDEsIDE5MSwgNTYsIDEsIDI0MSwgMTg3LCA1NiwgMSwgMjUyLCAxNCwgNTYsIDEsIDIyNSwgMTExLCAKKyAgICA1NiwgMSwgMjQwLCAyMjksIDU2LCAxLCAyNTEsIDEzMywgNTYsIDEsIDIyNCwgMTUzLCA1NiwgMSwgMjQxLCAyNDUsIDU2LCAKKyAgICAxLCAyNTIsIDgzLCA1NiwgMSwgMjI1LCAyMjQsIDU2LCAxLCAyNDEsIDc1LCA1NiwgMSwgMjUxLCAyMTMsIDU2LCAxLCAyMjUsIAorICAgIDE5LCA1NiwgMSwgMTg2LCA1NiwgMSwgMjMwLCAyMzUsIDU2LCAxLCAyMzAsIDEwNywgNTYsIDEsIDIzMSwgOTYsIDU2LCAxLCAKKyAgICAyMzAsIDE2NiwgNTYsIDEsIDQsIDE5MiwgNTYsIDEsIDE5MiwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIAorICAgIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzOCwgNTYsIDEsIAorICAgIDIyMiwgMTQyLCA1NiwgMSwgMjIzLCAxMzEsIDU2LCAxLCAyMjIsIDIxMywgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAKKyAgICAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIAorICAgIDMwLCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4OCwgNTYsIDEsIDIxNCwgMjcsIAorICAgIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyOSwgMjQ3LCAKKyAgICAxMjgsIDIzNCwgMjA3LCAyMjQsIDE3NiwgMjE5LCAzMywgNzksIDU2LCAyMzUsIDE2NCwgNzksIDU2LCAyMTMsIDEzNSwgCisgICAgMjM1LCAxNjQsIDc5LCA1NiwgMjQ3LCAyMjksIDIzNCwgNSwgMjUxLCAxOTIsIDEsIDI1MywgMTY2LCAyNTEsIDE5MiwgMSwgCisgICAgMjI2LCAxMDksIDI1MSwgMTkyLCAxLCAxOTQsIDI1MSwgMTkyLCAxLCAyNDUsIDE0LCAyNTEsIDE5MiwgMSwgMjQ5LCA2OCwgCisgICAgMjUxLCAxOTIsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgMSwgMjMwLCAzMCwgMjUxLCAxOTIsIDEsIDE1NiwgMjUxLCAxOTIsIAorICAgIDEsIDI0MywgMjA5LCAyNTEsIDE5MiwgMSwgMjM1LCAyOSwgMjUxLCAxOTIsIDEsIDI0MiwgNjcsIDI1MSwgMTkyLCAxLCAKKyAgICAyMzUsIDE1MCwgMjUxLCAxOTIsIDEsIDIyNCwgOTksIDI1MSwgMTkyLCAxLCAyMTEsIDE3OCwgMjUxLCAxOTIsIDEsIDIxMCwgCisgICAgODMsIDI1MSwgMTkyLCAxLCAyNTAsIDE2NiwgMjUxLCAxOTIsIDEsIDIyMCwgMTA2LCAyNTEsIDE5MiwgMSwgMTUzLCAyNTEsIAorICAgIDE5MiwgMSwgMjEwLCAxNTksIDI1MSwgMTkyLCAxLCAyNTEsIDc0LCAyNTEsIDE5MiwgMSwgMjIyLCA5MywgMjUxLCAxOTIsIAorICAgIDEsIDYxLCAyNTEsIDE5MiwgMSwgNzgsIDI1MSwgMTkyLCAxLCA3NiwgMjUxLCAxOTIsIDEsIDI0NSwgMjA1LCAyNTEsIDE5MiwgCisgICAgMSwgMjU0LCAyMTAsIDI1MSwgMTkyLCAxLCAyNDUsIDIwMywgMjUxLCAxOTIsIDEsIDI1MywgMjAwLCAyNTEsIDE5MiwgMSwgCisgICAgMjI2LCAxMzgsIDI1MSwgMTkyLCAxLCAyNTQsIDEzMSwgMjUxLCAxOTIsIDEsIDI0NSwgMTU4LCAyNTEsIDE5MiwgMSwgMjU0LCAKKyAgICAxMjMsIDI1MSwgMTkyLCAxLCAyNDUsIDE0NiwgMjUxLCAxOTIsIDEsIDI0NSwgMTAwLCAyNTEsIDE5MiwgMSwgNzQsIDI1MSwgCisgICAgMTkyLCAxLCA2OSwgMjUxLCAxOTIsIDEsIDIzNSwgMTYyLCAyNTEsIDE5MiwgMSwgMjE0LCAxMDUsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjksIDg0LCAyNTEsIDE5MiwgMSwgMjQyLCAxODUsIDI1MSwgMTkyLCAxLCAyMzYsIDQxLCAyNCwgMSwgMjM0LCA2NCwgMjQsIAorICAgIDEsIDIxOCwgMjE3LCAyNCwgMSwgMjM0LCA1NywgMjQsIDEsIDIyOCwgMjMxLCAyNCwgMSwgMjI4LCAyMjksIDI0LCAxLCAKKyAgICAyMjgsIDIyOCwgMjQsIDEsIDIxNiwgMTAyLCAyNCwgMSwgMjE4LCAyMDYsIDI0LCAxLCAyMjMsIDI5LCAyNCwgMSwgMjIzLCAKKyAgICAyNCwgMjQsIDEsIDIyMywgMjEsIDI0LCAxLCAyMjMsIDE0LCAyNCwgMSwgMjIzLCA5LCAyNCwgMSwgMjIzLCA0LCAyNCwgMSwgCisgICAgMjIzLCAxNSwgMjQsIDEsIDIyMywgMjcsIDI0LCAxLCAyMzAsIDIyMiwgMjQsIDEsIDIyNSwgOTgsIDI0LCAxLCAyMTgsIAorICAgIDIxNCwgMjQsIDEsIDIyNSwgODcsIDI0LCAxLCAyMTksIDE1MCwgMjQsIDEsIDIxOCwgMjExLCAyNCwgMSwgMjM2LCA2MywgCisgICAgMjQsIDEsIDI1MCwgNTQsIDI0LCAxLCAyMTgsIDIyMSwgMjQsIDEsIDI1MCwgMTE0LCAyNCwgMSwgMjM0LCAxMTYsIDI0LCAxLCAKKyAgICAyMTYsIDE3NCwgMjQsIDEsIDIyNSwgMTM0LCAyNCwgMSwgMjQxLCAxNzksIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjUyLCAKKyAgICAyNCwgMSwgMTkyLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTI1LCAyNCwgMSwgNzYsIDI0LCAxLCAyMTEsIDM2LCAKKyAgICAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc4LCAyNCwgMSwgMjEyLCA2NSwgMjQsIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNjksIDI0LCAxLCAyMTIsIDExLCAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIAorICAgIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDYzLCAyNCwgMSwgMjExLCA4LCAyNCwgMSwgNzQsIDI0LCAKKyAgICAyNDQsIDExMSwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjI4LCAyMjEsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIyOCwgCisgICAgMjI2LCAyNCwgMSwgMjIzLCAyMiwgMjQsIDEsIDIyMywgMywgMjQsIDEsIDIyMywgMTEsIDI0LCAxLCAyMjMsIDE2LCAyNCwgCisgICAgMSwgMjIzLCAxLCAyNCwgMSwgMjMwLCAyMTUsIDI0LCAxLCAyMzAsIDIxMiwgMjQsIDEsIDIzMCwgMjE2LCAyNCwgMSwgMjM0LCAKKyAgICAyMjcsIDI0LCAxLCAyMjUsIDkzLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgODUsIDI0LCAxLCAyMjUsIDgyLCAyNCwgCisgICAgMSwgMjI1LCA5NiwgMjQsIDEsIDIyNSwgODAsIDI0LCAxLCAyMzQsIDIyNSwgMjQsIDEsIDIzNCwgMjIzLCAyNCwgMSwgMjE5LCAKKyAgICAxNDMsIDI0LCAxLCAyMTksIDE0MSwgMjQsIDEsIDIxOSwgMTMzLCAyNCwgMSwgMjE5LCAxMzgsIDI0LCAxLCAyMTksIDE0OCwgCisgICAgMjQsIDEsIDIyNiwgMzYsIDI0LCAxLCAyMTgsIDIxOCwgMjQsIDEsIDIxMSwgMjYsIDI0LCAxLCAyMTEsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyMywgMjQsIDEsIDIzNCwgMjI2LCAyNCwgMSwgMjE4LCAyMTksIDI0LCAxLCAyMTEsIDMyLCAyNCwgMSwgMjEwLCAKKyAgICAyMzgsIDI0LCAxLCAyMTAsIDIzNywgMjQsIDEsIDIxMCwgMjQwLCAyNCwgMSwgMjEwLCAyMDMsIDI0LCAxLCAyMTAsIDIwNCwgCisgICAgMjQsIDEsIDIxMCwgMjA3LCAyNCwgMSwgMjU0LCA0MiwgMjQsIDEsIDI1NCwgMzYsIDExMCwgMjU0LCAxMDcsIDIzMiwgMjA5LCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjIzLCA1MywgNzksIDExMCwgMjU0LCAxMDcsIDEyMywgNzksIDExMCwgMjU0LCAxMDcsIAorICAgIDExMywgNzksIDExMCwgMjU0LCAxMDcsIDEzNCwgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTksIDc5LCAxMTAsIDI1NCwgCisgICAgMTA3LCAyMTYsIDE1LCA3OSwgMTEwLCAyNTQsIDEwNywgMjMwLCAyMjksIDc5LCAxMTAsIDI1NCwgMTA3LCAyNTEsIDE4MywgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTAwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjIxLCAxNzgsIDc5LCAxMTAsIDI1NCwgCisgICAgMTA3LCAyMTYsIDE3MCwgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDEsIDIzMSwgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDI0NSwgMjMyLCA3OSwgMTEwLCAyNTQsIDEwNywgMjMxLCAxOTEsIDc5LCAyNTEsIDE5MiwgCisgICAgMSwgMjUxLCAxMzMsIDI1MSwgMTkyLCAxLCAyMTAsIDQ0LCAyNTEsIDE5MiwgMSwgMjM1LCAxMTQsIDI1MSwgMTkyLCAxLCAKKyAgICAyNDIsIDEyMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjE3LCAyNTEsIDE5MiwgMSwgMjQ1LCAxNDMsIDI1MSwgMTkyLCAxLCAyMjYsIAorICAgIDE4NywgMjUxLCAxOTIsIDEsIDIyNiwgMTkxLCAyNTEsIDE5MiwgMSwgMjM1LCAxODYsIDI1MSwgMTkyLCAxLCAyNTQsIDEwOSwgCisgICAgMjUxLCAxOTIsIDEsIDIzNSwgMjMxLCAyNTEsIDE5MiwgMSwgMjE0LCAxNjgsIDI1MSwgMTkyLCAxLCAyMzYsIDIzLCAyNTEsIAorICAgIDE5MiwgMSwgMjI5LCA2MiwgMjUxLCAxOTIsIDEsIDI1NCwgMjA0LCAyNTEsIDE5MiwgMSwgMjUzLCAxOTUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDE0NCwgMjUxLCAxOTIsIDEsIDIyNiwgMjA4LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTMsIDI1MSwgMTkyLCAxLCAKKyAgICAyMzUsIDIyOCwgMjUxLCAxOTIsIDQwLCAxLCAyMjYsIDEwOSwgMjUxLCAxOTIsIDQwLCAxLCAyMTcsIDE1MywgMjUxLCAxOTIsIAorICAgIDQwLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgNDAsIDEsIDI0MiwgNjcsIDI1MSwgMTkyLCAxLCAyNDMsIDEsIDI1MSwgMTkyLCAKKyAgICAxLCAyMzMsIDUsIDI1MSwgMTkyLCAxLCAyMDksIDI1MCwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1MywgMTAsIDIxOCwgMTA1LCAKKyAgICAyMTIsIDQsIDEwLCAyMTgsIDEwNSwgMjExLCAxNTgsIDEwLCAyMTgsIDEwNSwgMjUxLCA4NywgMTAsIDIxOCwgMTA1LCAyMTcsIAorICAgIDI1NSwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NSwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2OSwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDIzOCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NiwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1NiwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDE2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NCwgMTAsIDIxOCwgMTA1LCAyNDAsIDIzNiwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDE2NywgMTAsIDIxOCwgMTA1LCAyNDAsIDE2MywgMTAsIDIxOCwgMTA1LCAyMzAsIDMwLCAxMCwgMjE4LCAxMDUsIDI0MiwgCisgICAgNjcsIDEwLCAyMTgsIDEwNSwgMjIyLCA5MywgMTAsIDIxOCwgMTA1LCAyMjYsIDEwOSwgMTAsIDIxOCwgMTA1LCAyMTksIDIzLCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0OSwgNjgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNzAsIDEwLCAyMTgsIDEwNSwgMjQxLCAxOTcsIAorICAgIDEwLCAyMTgsIDEwNSwgMjE3LCAxNjUsIDEwLCAyMTgsIDEwNSwgMjE3LCAyMzQsIDEwLCAyMTgsIDEwNSwgMjE4LCAxNzAsIAorICAgIDEwLCAyMTgsIDEwNSwgMjIwLCAxMTIsIDEwLCAyMTgsIDEwNSwgMjI1LCAyMjgsIDEwLCAyMTgsIDEwNSwgMjI0LCAxMDEsIAorICAgIDEwLCAyMTgsIDEwNSwgMjE2LCA0NCwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDI0NSwgCisgICAgMTAsIDIxOCwgMTA1LCAyNDAsIDE3NywgMTAsIDIxOCwgMTA1LCAyNDAsIDE2MiwgMTAsIDIxOCwgMTA1LCAyMjUsIDE1MiwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjQsIDk5LCA1NiwgMSwgNCwgMjMzLCAyMjMsIDU2LCAxLCA0LCAyMTksIDE5MywgNTYsIDEsIDQsIAorICAgIDIxOCwgODQsIDU2LCAxLCA0LCAxMTIsIDU2LCAxLCA0LCAyMjcsIDI0MiwgNTYsIDEsIDQsIDE2MiwgNTYsIDEsIDQsIDI0MSwgCisgICAgMTg3LCA1NiwgMSwgNCwgMjQwLCAyMjksIDU2LCAxLCA0LCAyNDEsIDI0NSwgNTYsIDEsIDQsIDI0MSwgNzUsIDU2LCAxLCA0LCAKKyAgICAyMzAsIDEwNywgNTYsIDEsIDQsIDIwNSwgNTYsIDEsIDQsIDIyMywgMzgsIDU2LCAxLCA0LCAyMjIsIDE0MiwgNTYsIDEsIDQsIAorICAgIDIyMywgMTMxLCA1NiwgMSwgNCwgMjIyLCAyMTMsIDg4LCAyNCwgMjM0LCA2NCwgODgsIDI0LCAyMjgsIDIzMSwgODgsIDI0LCAKKyAgICAyMTYsIDEwMiwgODgsIDI0LCAyMjMsIDI5LCA4OCwgMjQsIDIzMCwgMjIyLCA4OCwgMjQsIDIyNSwgOTgsIDg4LCAyNCwgCisgICAgMjE5LCAxNTAsIDg4LCAyNCwgMjM2LCA2MywgODgsIDI0LCAyNTAsIDU0LCA4OCwgMjQsIDI1MCwgMTE0LCA4OCwgMjQsIAorICAgIDIzNCwgMTE2LCA4OCwgMjQsIDIxNiwgMTc0LCA4OCwgMjQsIDIyNSwgMTM0LCA4OCwgMjQsIDI0MSwgMTc5LCA4OCwgMjQsIAorICAgIDIzNCwgNjUsIDYxLCA4OCwgMjQsIDIyOCwgMjMyLCA2MSwgODgsIDI0LCAyMTYsIDEwMywgNjEsIDg4LCAyNCwgMjIzLCAzMCwgCisgICAgNjEsIDg4LCAyNCwgMjMwLCAyMjMsIDYxLCA4OCwgMjQsIDIyNSwgOTksIDYxLCA4OCwgMjQsIDIxOSwgMTUxLCA2MSwgODgsIAorICAgIDI0LCAyMzYsIDY0LCA2MSwgODgsIDI0LCAyNTAsIDU1LCA2MSwgODgsIDI0LCAyNTAsIDExNSwgNjEsIDg4LCAyNCwgMjM0LCAKKyAgICAxMTcsIDYxLCA4OCwgMjQsIDIxNiwgMTc1LCA2MSwgODgsIDI0LCAyMjUsIDEzNSwgNjEsIDg4LCAyNCwgMjQxLCAxODAsIAorICAgIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDY5LCA4OCwgMjM0LCA5LCAxMzUsIDIyNiwgMjIxLCA4OCwgMjM0LCA5LCAxMzUsIDE0NCwgCisgICAgMjQwLCAyMjksIDg4LCAxNTQsIDExMSwgODgsIDE1NCwgMTA1LCA4OCwgMTU0LCAxNTgsIDg4LCAxNTQsIDE2MSwgODgsIAorICAgIDE1NCwgMTkwLCA4OCwgMTU0LCAxOTUsIDg4LCAxNTQsIDE5OSwgODgsIDE1NCwgMTk2LCA4OCwgMTU0LCAyMDEsIDg4LCAKKyAgICAxNTQsIDIxNiwgMjQ4LCA4OCwgMTU0LCAyMzAsIDEzMywgODgsIDE1NCwgMjQ0LCAxMDQsIDg4LCAxNTQsIDIxMiwgNDAsIAorICAgIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIDQ0LCA4OCwgMTU0LCAyNDUsIDIzMSwgODgsIDE1NCwgMjE4LCAzOCwgCisgICAgODgsIDE1NCwgMjE4LCAxMzQsIDg4LCAxNTQsIDI0MSwgMjUxLCA4OCwgMTU0LCAyMTksIDU2LCA4OCwgMTU0LCAyMjksIAorICAgIDIwOSwgODgsIDE1NCwgMjE5LCA2LCA4OCwgMTU0LCAyNDQsIDExMCwgODgsIDE1NCwgMjQ5LCAyMDgsIDg4LCAxNTQsIDIzMywgCisgICAgMTMxLCA4OCwgMTU0LCAyMjMsIDc0LCA4OCwgMTU0LCAyNTEsIDIzLCA4OCwgMTU0LCAyMTgsIDg4LCA4OCwgMTU0LCAyMTgsIAorICAgIDIxLCA4OCwgMTU0LCAyNDUsIDEzNSwgODgsIDE1NCwgMjIzLCA2NiwgODgsIDE1NCwgMjU0LCAxNTksIDg4LCAxNTQsIDI0NCwgCisgICAgMTM2LCA4OCwgMTU0LCAyMjMsIDY0LCA4OCwgMTU0LCAyMjAsIDE1OCwgODgsIDE1NCwgMjIzLCAxMzAsIDM3LCAxNTQsIAorICAgIDIyNCwgMTUsIDM3LCAxNTQsIDIzNCwgODYsIDM3LCAxNTQsIDIyMSwgMjAwLCAzNywgMTU0LCAyMzQsIDUsIDM3LCA1NCwgCisgICAgMjE2LCAyNDksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE1LCA3NCwgMjI2LCAyMDEsIDg1LCAyMTgsIAorICAgIDIzNiwgMzcsIDU0LCAyMTYsIDE2NCwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyNDQsIDI0LCAyMjYsIDIwMSwgCisgICAgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMTIzLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIxOSwgMTE0LCAKKyAgICAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIyMCwgMTE5LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIAorICAgIDI0NSwgMTkzLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAyMjUsIDI1NSwgNTAsIDM3LCA1NCwgMjE1LCA3NCwgMTExLCAzNywgCisgICAgNTQsIDIxNSwgNzQsIDEwNSwgMzcsIDU0LCAyMTUsIDc0LCAxNTgsIDM3LCA1NCwgMjE1LCA3NCwgMTYxLCAzNywgNTQsIAorICAgIDIxNSwgNzQsIDE5MCwgMzcsIDU0LCAyMTUsIDc0LCAxOTUsIDM3LCA1NCwgMjE1LCA3NCwgMTk5LCAzNywgNTQsIDIxNSwgCisgICAgNzQsIDE5NiwgMzcsIDU0LCAyMTUsIDc0LCAyMDEsIDM3LCA1NCwgMjE2LCAxNjMsIDM3LCA1NCwgMjE2LCAxNjQsIDExMSwgCisgICAgMzcsIDU0LCAyMTYsIDE2NCwgMTA1LCAzNywgNTQsIDIxNiwgMTY0LCAxNTgsIDM3LCA1NCwgMjE2LCAxNjQsIDE2MSwgMzcsIAorICAgIDU0LCAyMTYsIDE2NCwgMTkwLCAzNywgMjQsIDIzNCwgNjQsIDM3LCAyNCwgMjI4LCAyMzEsIDM3LCAyNCwgMjE2LCAxMDIsIAorICAgIDM3LCAyNCwgMjIzLCAyOSwgMzcsIDI0LCAyMzAsIDIyMiwgMzcsIDI0LCAyMjUsIDk4LCAzNywgMjQsIDIxOSwgMTUwLCAzNywgCisgICAgMjQsIDIzNiwgNjMsIDM3LCAyNCwgMjUwLCA1NCwgMzcsIDI0LCAyNTAsIDExNCwgMzcsIDI0LCAyMzQsIDExNiwgMzcsIDI0LCAKKyAgICAyMTYsIDE3NCwgMzcsIDI0LCAyMjUsIDEzNCwgMzcsIDI0LCAyNDEsIDE3OSwgMzcsIDI0LCAyMzQsIDY1LCA2MSwgMzcsIAorICAgIDI0LCAyMjgsIDIzMiwgNjEsIDM3LCAyNCwgMjE2LCAxMDMsIDYxLCAzNywgMjQsIDIyMywgMzAsIDYxLCAzNywgMjQsIDIzMCwgCisgICAgMjIzLCA2MSwgMzcsIDI0LCAyMjUsIDk5LCA2MSwgMzcsIDI0LCAyMTksIDE1MSwgNjEsIDM3LCAyNCwgMjM2LCA2NCwgNjEsIAorICAgIDM3LCAyNCwgMjUwLCA1NSwgNjEsIDM3LCAyNCwgMjUwLCAxMTUsIDYxLCAzNywgMjQsIDIzNCwgMTE3LCA2MSwgMzcsIDI0LCAKKyAgICAyMTYsIDE3NSwgNjEsIDM3LCAyNCwgMjI1LCAxMzUsIDYxLCAzNywgMjQsIDI0MSwgMTgwLCA2MSwgMzcsIDIzNCwgOSwgCisgICAgMTM1LCAyNTAsIDE1NiwgMzcsIDIzNCwgOSwgMTM1LCAyMzUsIDUzLCAzNywgMjQsIDIzNiwgNjQsIDY5LCAyMzQsIDksIAorICAgIDIxOCwgMTYxLCA4NywgMzcsIDE1NCwgMTExLCAzNywgMTU0LCAxMDUsIDM3LCAxNTQsIDE1OCwgMzcsIDE1NCwgMTYxLCAzNywgCisgICAgMTU0LCAxOTAsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMTk5LCAzNywgMTU0LCAxOTYsIDM3LCAxNTQsIDIwMSwgMzcsIAorICAgIDE1NCwgMjE2LCAyNDgsIDM3LCAxNTQsIDIzMCwgMTMzLCAzNywgMTU0LCAyNDQsIDEwNCwgMzcsIDE1NCwgMjEyLCA0MCwgCisgICAgMzcsIDE1NCwgMjExLCAyMTQsIDM3LCAxNTQsIDIzMSwgNDQsIDM3LCAxNTQsIDI0NSwgMjMxLCAzNywgMTU0LCAyMTgsIDM4LCAKKyAgICAzNywgMTU0LCAyMTgsIDEzNCwgMzcsIDE1NCwgMjQxLCAyNTEsIDM3LCAxNTQsIDIxOSwgNTYsIDM3LCAxNTQsIDIyOSwgCisgICAgMjA5LCAzNywgMTU0LCAyMTksIDYsIDM3LCAxNTQsIDI0NCwgMTEwLCAzNywgMTU0LCAyNDksIDIwOCwgMzcsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDM3LCAxNTQsIDIyMSwgMTc2LCAzNywgMTU0LCAyMzEsIDE5NCwgMzcsIDE1NCwgMjQ0LCAxNDUsIDM3LCAxNTQsIAorICAgIDIxOCwgNTAsIDM3LCAxNTQsIDI0NSwgNDIsIDM3LCAxNTQsIDIyNCwgMTkwLCAzNywgMTU0LCAyNTMsIDIwNCwgMzcsIDE1NCwgCisgICAgMjM1LCAxNjUsIDM3LCAxNTQsIDIyMywgNjQsIDM3LCAxNTQsIDI0OSwgMTcyLCAzNywgMTU0LCAyNDksIDE2MywgMzcsIAorICAgIDE1NCwgMjQxLCAxNzIsIDM3LCAxNTQsIDI1MCwgMTgyLCAzNywgMTU0LCAyMzIsIDExNiwgMzcsIDE1NCwgMjMzLCA1MiwgCisgICAgMzcsIDE1NCwgMjIyLCAyNTQsIDM3LCAxNTQsIDIzMSwgODgsIDM3LCAxNTQsIDIyMywgOTAsIDM3LCAxNTQsIDIxOCwgODgsIAorICAgIDM3LCAxNTQsIDIxOCwgMjEsIDM3LCAxNTQsIDI0NSwgMTM1LCAzNywgMTU0LCAyMjMsIDY2LCAzNywgMTU0LCAyNTQsIDE1OSwgCisgICAgMzcsIDE1NCwgMjI4LCAyMTcsIDM3LCA1NCwgMjE2LCAxNjQsIDE5NSwgMzcsIDU0LCAyMTYsIDE2NCwgMTk5LCAzNywgNTQsIAorICAgIDIxNiwgMTY0LCAxOTYsIDM3LCA1NCwgMjE2LCAxNjQsIDIwMSwgMzcsIDU0LCAyNDQsIDIzLCAzNywgNTQsIDI0NCwgMjQsIAorICAgIDExMSwgMzcsIDU0LCAyNDQsIDI0LCAxMDUsIDM3LCA1NCwgMjQ0LCAyNCwgMTU4LCAzNywgNTQsIDI0NCwgMjQsIDE2MSwgCisgICAgMzcsIDU0LCAyNDQsIDI0LCAxOTAsIDM3LCA1NCwgMjQ0LCAyNCwgMTk1LCAzNywgNTQsIDI0NCwgMjQsIDE5OSwgMzcsIDU0LCAKKyAgICAyNDQsIDI0LCAxOTYsIDM3LCA1NCwgMjQ0LCAyNCwgMjAxLCAzNywgNTQsIDI0NCwgMTIyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyMzUsIDEzOSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ0LCAxNTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgCisgICAgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNTQsIDU1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzEsIDEzNywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjM1LCA1MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjM1LCA1MiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjUzLCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyMCwgMTM4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjYsIAorICAgIDI0MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjI4LCA0NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCA5MywgNDIsIDI0MSwgCisgICAgMTk3LCA0MiwgMjQ1LCA5NiwgNDIsIDI0NSwgNTEsIDIzMiwgMjI1LCAyMzIsIDI0NiwgNTAsIDM3LCA1NiwgNjEsIDM3LCAKKyAgICA1NiwgNzQsIDM3LCA1NiwgNjksIDM3LCA1NiwgNzYsIDM3LCA1NiwgNzgsIDM3LCA1NiwgMTc2LCAzNywgNTYsIDIzNCwgOTgsIAorICAgIDM3LCA1NiwgMjMzLCAyMjMsIDM3LCA1NiwgMjM0LCAxODgsIDM3LCA1NiwgMjM0LCAzNCwgMzcsIDU2LCAyMDYsIDM3LCA1NiwgCisgICAgMjE5LCAxOTMsIDM3LCA1NiwgMjE4LCA4NCwgMzcsIDU2LCAyMjEsIDE4MywgMzcsIDU2LCAyMTksIDYwLCAzNywgNTYsIAorICAgIDIxNywgMTA2LCAzNywgNTYsIDIxNiwgMTE4LCAzNywgNTYsIDIxNSwgMTE5LCAzNywgNTYsIDIxNywgMjMsIDM3LCA1NiwgCisgICAgMTEyLCAzNywgNTYsIDE5OCwgMzcsIDU2LCAyMjgsIDIzOCwgMzcsIDU2LCAyMjcsIDI0MiwgMzcsIDU2LCAyMjksIDExMiwgCisgICAgMzcsIDU2LCAyMjgsIDc5LCAzNywgNTYsIDE2MiwgMzcsIDU2LCAyNDEsIDE4NywgMzcsIDU2LCAyNDAsIDIyOSwgMzcsIDU2LCAKKyAgICAyNDEsIDI0NSwgMzcsIDU2LCAyNDEsIDc1LCAzNywgNTYsIDE4NiwgMzcsIDU2LCAyMzAsIDIzNSwgMzcsIDU2LCAyMzAsIAorICAgIDEwNywgMzcsIDU2LCAyMzEsIDk2LCAzNywgNTYsIDIzMCwgMTY2LCAzNywgNTYsIDE5MiwgMzcsIDU2LCAyMTAsIDIxMiwgCisgICAgMzcsIDU2LCAyMTAsIDI0NCwgMzcsIDU2LCAyMDUsIDM3LCA1NiwgMjIzLCAzOCwgMzcsIDU2LCAyMjIsIDE0MiwgMzcsIDU2LCAKKyAgICAyMjMsIDEzMSwgMzcsIDU2LCAyMjIsIDIxMywgMzcsIDU2LCAyMTIsIDY1LCAzNywgNTYsIDIxMSwgMjUwLCAzNywgNTYsIAorICAgIDIxMiwgMjIsIDM3LCA1NiwgMjExLCAyMjcsIDQyLCAyNTQsIDc5LCA0MiwgMjUzLCAyNDcsIDQyLCAyNTQsIDEwMywgNDIsIAorICAgIDI1NSwgNDAsIDQyLCAyMzUsIDIzMywgNDIsIDIzNSwgMjAzLCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDc0LCA0MiwgMjQ1LCAKKyAgICAyMTQsIDQyLCAyMjYsIDE5MCwgNDIsIDIyNiwgMTg0LCA0MiwgMjM0LCAyNTEsIDQyLCAyMzQsIDIyMCwgNDIsIDIzNCwgCisgICAgMjE3LCA0MiwgMjQzLCA5OSwgNDIsIDI0MywgMTA4LCA0MiwgMjQyLCAyMTEsIDQyLCAyNDIsIDIwNywgNDIsIDIzMywgMTU2LCAKKyAgICA0MiwgMjQyLCAyMDAsIDQyLCAyMzQsIDc4LCA0MiwgMjM0LCA3NywgNDIsIDIzNCwgNzYsIDQyLCAyMzQsIDc1LCA0MiwgCisgICAgMjQyLCA5MywgNDIsIDI0MiwgOTIsIDQyLCAyMzMsIDE5OSwgNDIsIDIzMywgMjAxLCA0MiwgMjM0LCAxODQsIDQyLCAyMzQsIAorICAgIDcsIDQyLCAyMzQsIDE0LCA0MiwgMjIyLCAxOCwgNDIsIDIyMSwgMjM5LCA0MiwgMjE5LCAxMzEsIDQyLCAyMjAsIDE0MywgCisgICAgNDIsIDIyMCwgMTQyLCA0MiwgMjQ4LCAyMjYsIDQyLCAyNDgsIDQ0LCA0MiwgMjQ3LCAxMjksIDQyLCAyMTYsIDMzLCA0MiwgCisgICAgMjI5LCAyMDUsIDQyLCAyMjgsIDQ2LCA0MiwgMjQyLCAzOSwgNDIsIDIyNiwgODgsIDQyLCAyMjYsIDg3LCA0MiwgMjUyLCAKKyAgICAxOTYsIDQyLCAyMjUsIDEwOCwgNDIsIDIyNSwgNzIsIDQyLCAyMjUsIDczLCA0MiwgMjUxLCAyNDIsIDQyLCAyNDAsIDIyOCwgCisgICAgNDIsIDI0MCwgMjI0LCA0MiwgMjUxLCA5OSwgNDIsIDI0MCwgMjExLCA0MiwgMjQxLCAyMjIsIDQyLCAyMjUsIDE2MiwgNDIsIAorICAgIDIyNSwgMTk3LCA0MiwgMjQxLCAyMDUsIDQyLCAyMjUsIDE5NCwgNDIsIDIyNSwgMjEwLCA0MiwgMjUyLCA2OSwgNDIsIDIyNSwgCisgICAgOSwgNDIsIDI1MSwgMTg4LCA0MiwgMjQxLCA2MywgNDIsIDIyNCwgMjUzLCA0MiwgMjQxLCA1NSwgNDIsIDI0MSwgNTcsIDQyLCAKKyAgICAyMzEsIDIwNiwgNDIsIDIzMSwgMjAyLCA0MiwgMjMxLCAyMTEsIDQyLCAyMzEsIDE1NSwgNDIsIDIzMSwgMTgwLCA0MiwgCisgICAgMjMwLCAyMDIsIDQyLCAyMzAsIDE4MSwgNDIsIDIzMCwgMTgwLCA0MiwgMjMxLCA3OSwgNDIsIDIzMSwgNzYsIDQyLCAyMzEsIAorICAgIDgwLCA0MiwgMjExLCAxMDIsIDQyLCAyMTEsIDEwMCwgNDIsIDIxMCwgMjAxLCA0MiwgMjIyLCAyMjksIDQyLCAyMjIsIDIzMywgCisgICAgNDIsIDIyMiwgMTE5LCA0MiwgMjIyLCAxMTMsIDQyLCAyMjMsIDg4LCA0MiwgMjIzLCA4NSwgNDIsIDIxMiwgMzgsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTAsIDg2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTExLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTA1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTU4LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTYxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTkwLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk5LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjAxLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE2LCAyNDgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAKKyAgICAyNDUsIDE3NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNzYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0MCwgMjQ2LCAyMTYsIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTMsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDQsIDEyNiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxOSwgMTIxLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjIwLCAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyNDUsIAorICAgIDE5OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIyOCwgMjAyLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIAorICAgIDI0NiwgMjE1LCA3MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjcsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI0MCwgMjQ2LCAyMTUsIDYzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NCwgMTEwLCAyMTcsIAorICAgIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjksIDQyLCAyNDAsIDIzNywgNDIsIDI0OCwgMjI5LCA0MiwgMjUzLCAyMDAsIAorICAgIDQyLCAxMzAsIDQyLCAyMjYsIDEyOSwgNDIsIDIyNSwgMjI5LCA0MiwgMjQ3LCAxNTUsIDQyLCAyNDcsIDE1NiwgMjE4LCAKKyAgICAyMzUsIDQyLCAyNDcsIDE1NiwgMjQ5LCAxMTYsIDQyLCAyMzUsIDE2MiwgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyNDEsIAorICAgIDIyMywgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyMTcsIDE3NSwgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyMTcsIDc1LCA0MiwgCisgICAgMjQ1LCA5OSwgMjI5LCAyMTAsIDIzMSwgNzUsIDQyLCAyNDksIDE2NSwgNDIsIDIyNiwgOTQsIDI1NCwgMTMzLCA0MiwgMTk4LCAKKyAgICA0MiwgMjMwLCAxMDgsIDYxLCA0MiwgMTg2LCA0MiwgMTc2LCA0MiwgMjM0LCAxOTEsIDQyLCAyMzEsIDEzNCwgNDIsIDI0MywgCisgICAgODcsIDQyLCAyNTEsIDI2LCA0MiwgMjM0LCAxOTAsIDQyLCAyMjUsIDE1MywgNDIsIDIyOSwgODYsIDQyLCAyMzAsIDEwOCwgCisgICAgMjQ1LCAxNCwgNDIsIDIzMCwgMTA4LCAyNDMsIDIwOSwgNDIsIDIzMSwgMjAsIDQyLCAyMzQsIDE0MCwgNDIsIDI0MCwgMTcwLCAKKyAgICA0MiwgMjM0LCAxMDAsIDQyLCAyMzAsIDIzNywgNDIsIDI0MiwgMjIzLCA0MiwgMjE2LCAxMjAsIDQyLCAyMzAsIDEwOCwgCisgICAgMTU2LCA0MiwgMjMwLCAxNzQsIDQyLCAyNDcsIDE2NSwgNDIsIDIzNCwgNDYsIDQyLCAyNDQsIDUzLCA0MiwgMjI4LCAxMTcsIAorICAgIDQyLCAyMzAsIDEwOCwgMTk0LCA0MiwgMjMwLCAxNzEsIDQyLCAyNDksIDI0NywgNDIsIDIzNCwgNDAsIDQyLCAyMzAsIDE3MiwgCisgICAgMjE4LCAyMzUsIDQyLCAyNDksIDI0OCwgMjE4LCAyMzUsIDQyLCAyMzIsIDU1LCAyMTgsIDIzNSwgNDIsIDIzNCwgNDEsIAorICAgIDIxOCwgMjM1LCA0MiwgMjMwLCAxNzIsIDI0OSwgMTE2LCA0MiwgMjQ5LCAyNDgsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgCisgICAgMjQ5LCAxMTYsIDQyLCAyMzQsIDQxLCAyNDksIDExNiwgNDIsIDIzMiwgNTUsIDExNSwgMjIyLCA5MywgNDIsIDIzMiwgNTUsIAorICAgIDExNSwgMjIyLCA5NCwgMjE4LCAyMzUsIDQyLCAxOTEsIDQyLCAyMzQsIDEsIDQyLCAyMzAsIDExMCwgNDIsIDI0MiwgMTU4LCAKKyAgICA0MiwgMjIzLCAxNzksIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDkzLCA0MiwgMjIzLCAxODAsIDExNSwgMjIyLCA5NCwgCisgICAgMjE4LCAyMzUsIDQyLCAyMjQsIDE2NSwgNDIsIDIyOCwgMTgsIDQyLCAyMzAsIDEwOCwgMjIyLCA5MywgNDIsIDIzMCwgMTA5LCAKKyAgICA0MiwgMjI0LCAxMTksIDQyLCAyMjcsIDE4MCwgNDIsIDIzMCwgMTA4LCAyMTQsIDEwNSwgNDIsIDIzMCwgNTQsIDQyLCAyMzMsIAorICAgIDE5MSwgNDIsIDIzMCwgNTUsIDIzMSwgNzksIDQyLCAyMjQsIDExOCwgNDIsIDIyNywgMTc5LCA0MiwgMjMwLCAxMDgsIDIxMiwgCisgICAgOTgsIDQyLCAyMzAsIDQ4LCA0MiwgMjMzLCAxODksIDQyLCAyMzAsIDQ5LCAyMzEsIDc5LCA0MiwgMjM1LCAzMCwgMjI2LCAKKyAgICAyMjQsIDQyLCAyMzIsIDU1LCAyMjYsIDIyNCwgNDIsIDI1NCwgMTQ0LCA0MiwgMjUxLCAxNjgsIDQyLCAyNTAsIDIyMiwgNDIsIAorICAgIDI1MCwgMTk5LCA0MiwgMjUxLCA3NSwgMTE1LCAyMzQsIDE0MCwgNDIsIDI0OSwgMjQ2LCA0MiwgMjQ4LCAxNTAsIDQyLCAKKyAgICAyNDIsIDc5LCA0MiwgMTYyLCA0MiwgMjQwLCAyMzgsIDQyLCAyMzYsIDYsIDQyLCAyMzQsIDUzLCA0MiwgMjM0LCA0MSwgCisgICAgMjUxLCAyLCA0MiwgMjMzLCAyMjUsIDQyLCAyMzIsIDE2NSwgNDIsIDIzMiwgMTY0LCA0MiwgMjMyLCAxNTMsIDQyLCAyMzIsIAorICAgIDY4LCA0MiwgMjMxLCAxMzUsIDIxOSwgODEsIDQyLCAyMzAsIDIwMSwgNDIsIDIzMCwgMTU3LCA0MiwgMjI1LCAxNTEsIDQyLCAKKyAgICAyMjUsIDIyLCA0MiwgMjI0LCAyMjIsIDQyLCAyMjQsIDIyMCwgNDIsIDIxOCwgMjI5LCA0MiwgMjE4LCAzLCA0MiwgMjEyLCAKKyAgICAyNCwgNDIsIDIxNCwgMTA2LCAxMTUsIDE5NCwgNDIsIDExNiwgMTE1LCAxOTQsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxMTEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxNTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxOTAsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxOTksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAyMDEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQ4LCAxNTQsIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE5LCAKKyAgICAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDI0NSwgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI0OCwgMTU0LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NywgMTEwLCAyMTcsIAorICAgIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY0LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIAorICAgIDIxNSwgNzAsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjE1LCA2NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNzIsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjMsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MiwgNDIsIDI0MywgMTI1LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAKKyAgICAyNDksIDE0OCwgMjQxLCAyMzAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIyMywgMTI1LCAyNDUsIDIzMSwgMjQxLCAxOTksIAorICAgIDMxLCAyNDcsIDIzOSwgMjUzLCAyMTUsIDIxNiwgMTk3LCAyNTIsIDY0LCAyNDEsIDE5OSwgMzEsIDIxMCwgMjIzLCAyNDQsIAorICAgIDQ2LCAyNDEsIDE5OSwgMzEsIDIxMiwgNTksIDI0MSwgMTk5LCAzMSwgMjQ5LCAyMTEsIDI0MSwgMTk5LCAzMSwgMjE2LCAKKyAgICAxOTcsIDI1NCwgMTEsIDI0MSwgMTk5LCAzMSwgMjQxLCA2NywgMjE2LCAzOSwgMjQxLCAxOTksIDMxLCA0LCAyMTcsIDYyLCAKKyAgICAyNDEsIDE5OSwgMzEsIDIxNSwgMjM4LCAyNDEsIDE5OSwgMzEsIDIyNSwgMjIyLCAyNDEsIDE5OSwgMzEsIDIxOCwgMTYwLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NCwgMTQ3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMjQsIDI0MywgMjQxLCAxOTksIDMxLCAKKyAgICAyMzAsIDE2MCwgMjQxLCAxOTksIDMxLCAyNDUsIDEzNCwgMjQxLCAxOTksIDMxLCAyNDQsIDQ3LCAyNDEsIDE5OSwgMzEsIAorICAgIDIxMSwgMjA3LCAyMjYsIDIwMSwgMjE2LCAxOTcsIDI0OCwgOTQsIDI0MSwgMTk5LCAzMSwgMjU0LCA1OSwgMjQxLCAxOTksIAorICAgIDMxLCAyNDksIDE5MywgMjQxLCAxOTksIDMxLCAyNTEsIDIzNSwgMjE2LCAxMzksIDI0MSwgMTk5LCAzMSwgMjQyLCAxNTYsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE4LCAyNDcsIDI1NCwgNzgsIDI0MSwgMTk5LCAzMSwgMjIzLCA1NiwgMjQxLCAxOTksIDMxLCAKKyAgICAyMzUsIDIyNywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjE3LCA2MiwgMjQxLCAxOTksIDMxLCAyMzAsIDExNiwgMjQ5LCAKKyAgICAxNjcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjAwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTUsIDI3LCAKKyAgICAyMTIsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDE2LCAyNDQsIDEwNCwgMjQxLCAxOTksIDMxLCAyMzUsIAorICAgIDI0MCwgMjQxLCAxOTksIDMxLCAyNDYsIDY1LCAyNDEsIDE5OSwgMzEsIDIyMywgNTksIDI0MSwgMTk5LCAzMSwgMjQyLCAKKyAgICAxMzksIDIyNCwgMjI3LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTgwLCAyNDEsIDE5OSwgMzEsIDI0OCwgMTY5LCA2NCwgMjE2LCAKKyAgICAxOTcsIDIzMiwgMjM2LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNDQsIDE4MiwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NywgCisgICAgMjQxLCAxOTksIDMxLCAyMjYsIDI0OCwgMjQxLCAxOTksIDMxLCAyNDgsIDY3LCAyNDEsIDE5OSwgMzEsIDI0OCwgODcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjM1LCAyNTQsIDI0MSwgMTk5LCAzMSwgMjUxLCAxNTcsIDI0MSwgMTk5LCAzMSwgMjQ5LCAyMjksIAorICAgIDIxNiwgNDMsIDIzMSwgODEsIDI0MSwgMTk5LCAzMSwgMjQzLCA5NCwgMjE2LCAzOSwgMjQxLCAxOTksIDMxLCAyMjQsIDEyOCwgCisgICAgMjE0LCAxNTQsIDI0MSwgMTk5LCAzMSwgMjI2LCAxNjYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIxMiwgMTMsIDI0MSwgCisgICAgMTk5LCAzMSwgMjIzLCA0OCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjUwLCAyMjgsIDI0MSwgMTk5LCAzMSwgMjE2LCAKKyAgICAxOTcsIDI1NCwgNywgMjE2LCAxMzQsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNCwgMTg1LCAyMTgsIDEzNiwgMjMwLCAKKyAgICAxMjAsIDI0MSwgMTk5LCAzMSwgMjQ4LCA0MCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjMxLCAxNTcsIDIzMSwgMjA3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDI1NSwgMjgsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIxMiwgNTQsIDI0MSwgMTk5LCAzMSwgCisgICAgMjE2LCAxOTcsIDI0MywgNTQsIDIxMSwgMjM5LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzUsIDU4LCAyMzMsIDExMywgCisgICAgMjQxLCAxOTksIDMxLCAyNDcsIDE5MiwgMjQxLCAxOTksIDMxLCAyMzIsIDIyNiwgMjQxLCAxOTksIDMxLCAyMzUsIDIzMCwgCisgICAgMjE1LCAxODgsIDI0MSwgMTk5LCAzMSwgNCwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjU0LCAyMjYsIDI0OSwgMjIwLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI1MiwgNjcsIDI0OSwgMjIwLCA4LCAzLCAyMzUsIDE2NiwgOCwgMywgMjM1LCAxNTksIDgsIDMsIAorICAgIDc0LCA4LCAzLCAyMzUsIDE4OSwgOCwgMywgMjM2LCA2NSwgOCwgMywgMjM2LCA0OCwgOCwgMywgMjM2LCA2NywgOCwgMywgCisgICAgMjM2LCA2NiwgOCwgMywgMjUzLCAyMTQsIDgsIDMsIDI1MywgMTc3LCA4LCAzLCA2MSwgOCwgMywgMjU0LCA4MCwgOCwgMywgCisgICAgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAxNDQsIDgsIDMsIDIyNiwgMTE4LCAKKyAgICA4LCAzLCA3OCwgOCwgMywgMjI2LCAxNzksIDgsIDMsIDI0NSwgNDMsIDgsIDMsIDc2LCA4LCAzLCAyMTEsIDE5NSwgOCwgMywgCisgICAgMjUxLCAyMzYsIDgsIDMsIDI1MSwgMjMzLCA4LCAzLCAyNTIsIDE0LCA4LCAzLCAyNTEsIDI0NiwgOCwgMywgMjUyLCAzLCA4LCAKKyAgICAzLCAyNTIsIDIsIDgsIDMsIDI1MiwgNSwgOCwgMywgMjUyLCA0LCA4LCAzLCAyNTIsIDEyOSwgOCwgMywgMjUyLCAxMjEsIDgsIAorICAgIDMsIDI1MiwgMTk5LCA4LCAzLCAyNTIsIDE1MCwgOCwgMywgMjUxLCAxMDksIDgsIDMsIDI1MSwgMTEzLCA4LCAzLCAyNTEsIAorICAgIDExMCwgOCwgMywgMjUxLCAxODcsIDgsIDMsIDI1MSwgMTcxLCA4LCAzLCAyNTEsIDIxMywgOCwgMywgMjUxLCAxOTMsIDgsIAorICAgIDMsIDI1MiwgMjksIDgsIDMsIDI1MiwgODMsIDgsIDMsIDI1MiwgNDEsIDgsIDMsIDI1MSwgOTUsIDgsIDMsIDI1MSwgOTIsIAorICAgIDgsIDMsIDI1MSwgMTMzLCA4LCAzLCAyNTEsIDEwOCwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTA2LCA4LCAzLCAKKyAgICAyNTEsIDgwLCA4LCAzLCAyNTEsIDc4LCA4LCAzLCAyNTEsIDg1LCA4LCAzLCAyNTEsIDgzLCA4LCAzLCAyNTEsIDgxLCA4LCAKKyAgICAzLCAyNTEsIDgyLCA4LCAzLCAyMjUsIDUyLCA4LCAzLCAyMjUsIDQ4LCA4LCAzLCAyMjUsIDExMSwgOCwgMywgMjI1LCA2MiwgCisgICAgOCwgMywgMjI1LCA3OCwgOCwgMywgMjI1LCAxMDUsIDgsIDMsIDIyNSwgMTAxLCA4LCAzLCAyMjUsIDI0NCwgOCwgMywgMjI1LCAKKyAgICAyMzQsIDgsIDMsIDE5MSwgOCwgMywgMjI2LCAyNSwgOCwgMywgMjI0LCAxMzgsIDgsIDMsIDIyNCwgMTQwLCA4LCAzLCAyMjQsIAorICAgIDEzOSwgOCwgMywgMjI0LCAyMzYsIDgsIDMsIDIyNCwgMjI1LCA4LCAzLCAyMjUsIDE5LCA4LCAzLCAyMjQsIDI0OCwgOCwgMywgCisgICAgMjI0LCAxMjQsIDgsIDMsIDIyNCwgMTIwLCA4LCAzLCAyMjQsIDE1MywgOCwgMywgMjI0LCAxMzcsIDgsIDMsIDIyNCwgMTI5LCAKKyAgICA4LCAzLCAyMjQsIDEzNSwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAyLCA4LCAzLCAyMjQsIDEwNywgOCwgMywgCisgICAgMjI0LCAxMDYsIDgsIDMsIDIyNCwgMTA0LCA4LCAzLCAyMjQsIDEwNSwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgMTAzLCAKKyAgICA4LCAzLCAyNTIsIDExMCwgOCwgMywgMjUyLCAxMDUsIDgsIDMsIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgCisgICAgMjUyLCAxMDksIDgsIDMsIDI1MiwgMTA4LCA4LCAzLCAyNTIsIDExNiwgOCwgMywgMjUyLCAxMTUsIDgsIDMsIDI1MiwgMTE5LCAKKyAgICA4LCAzLCAyNTIsIDExNywgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCA5NywgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCAKKyAgICAxMDAsIDgsIDMsIDI1MiwgOTksIDgsIDMsIDI1MiwgMTAyLCA4LCAzLCAyNTIsIDEwMSwgOCwgMywgMjUyLCAxMTEsIDgsIDMsIAorICAgIDI1MiwgMTE0LCA4LCAzLCAyNTIsIDExMiwgOCwgMywgMjUyLCA5MSwgOCwgMywgMjUyLCA5MCwgOCwgMywgMjUyLCA5OCwgOCwgCisgICAgMywgMjUyLCA5NCwgOCwgMywgMjUyLCA5MiwgOCwgMywgMjUyLCA5MywgOCwgMywgMjUyLCA4NywgOCwgMywgMjUyLCA4NiwgCisgICAgOCwgMywgMjUyLCA4OSwgOCwgMywgMjUyLCA4OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTczLCA4LCAzLCAyMjksIAorICAgIDE3OSwgOCwgMywgMjI5LCAxNzUsIDgsIDMsIDIyOSwgMTc2LCA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNzcsIDgsIAorICAgIDMsIDIyOSwgMTgyLCA4LCAzLCAyMjksIDE4MSwgOCwgMywgMjI5LCAxODQsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAyMjksIAorICAgIDE3MCwgOCwgMywgMjI5LCAxNjksIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgMjI5LCAxNjMsIDgsIAorICAgIDMsIDIyOSwgMTYyLCA4LCAzLCAyMjksIDE2NywgOCwgMywgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIAorICAgIDE2NSwgOCwgMywgMjI5LCAxNTcsIDgsIDMsIDIyOSwgMTU2LCA4LCAzLCAyMjksIDE2MSwgOCwgMywgMjI5LCAxNjAsIDgsIAorICAgIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTE2LCA4LCAzLCAyNDEsIAorICAgIDEyMiwgOCwgMywgMjQxLCAxMTgsIDgsIDMsIDI0MSwgMTE5LCA4LCAzLCAyNDEsIDEyMSwgOCwgMywgMjQxLCAxMjAsIDgsIAorICAgIDMsIDI0MSwgMTI1LCA4LCAzLCAyNDEsIDEyNCwgOCwgMywgMjQxLCAxMjcsIDgsIDMsIDI0MSwgMTI2LCA4LCAzLCAyNDEsIAorICAgIDEwOCwgOCwgMywgMjQxLCAxMTAsIDgsIDMsIDI0MSwgMTA5LCA4LCAzLCAyNDEsIDExMywgOCwgMywgMjQxLCAxMTIsIDgsIAorICAgIDMsIDI0MSwgMTE1LCA4LCAzLCAyNDEsIDExNCwgOCwgMywgMjQxLCAxMDQsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIAorICAgIDExMSwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwNiwgOCwgMywgMjQxLCA5OCwgOCwgMywgCisgICAgMjQxLCAxMDIsIDgsIDMsIDI0MSwgMTAxLCA4LCAzLCAyNDEsIDk5LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjMwLCAxNzcsIAorICAgIDgsIDMsIDIzMCwgMTc2LCA4LCAzLCAyMzAsIDIzNSwgOCwgMywgMjMwLCAxODMsIDgsIDMsIDIzMCwgMjA4LCA4LCAzLCAKKyAgICAyMzAsIDIyNiwgOCwgMywgMjMwLCAyMjQsIDgsIDMsIDIzMSwgMTQ0LCA4LCAzLCAyMzEsIDEzOSwgOCwgMywgMTg2LCA4LCAKKyAgICAzLCAyMzEsIDE3NywgOCwgMywgMjMwLCA3OSwgOCwgMywgMjMwLCA3OCwgOCwgMywgMjMwLCA4MiwgOCwgMywgMjMwLCA4MCwgCisgICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMCwgMTEyLCA4LCAzLCAyMzAsIDE2NiwgOCwgMywgMjMwLCAxMzEsIDgsIDMsIAorICAgIDIzMSwgMzEsIDgsIDMsIDIzMSwgOTYsIDgsIDMsIDIzMCwgNjAsIDgsIDMsIDIzMCwgNTYsIDgsIDMsIDIzMCwgMTA3LCA4LCAKKyAgICAzLCAyMzAsIDc1LCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAyMzAsIDczLCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMyLCAKKyAgICA4LCAzLCAyMzAsIDM4LCA4LCAzLCAyMzAsIDM1LCA4LCAzLCAyNDQsIDkxLCA4LCAzLCAyNDQsIDg2LCA4LCAzLCAyNDQsIAorICAgIDEyOSwgOCwgMywgMjQ0LCAxMDYsIDgsIDMsIDI0NCwgMTc1LCA4LCAzLCAyNDQsIDE2NiwgOCwgMywgMjQ0LCAyMDQsIDgsIAorICAgIDMsIDI0NCwgMTc4LCA4LCAzLCAyNDQsIDExLCA4LCAzLCAyNDQsIDUxLCA4LCAzLCAyNDQsIDM1LCA4LCAzLCAyNDMsIDIyNSwgCisgICAgOCwgMywgMjQzLCAyMjQsIDgsIDMsIDI0MywgMjQxLCA4LCAzLCAyNDMsIDIzMCwgOCwgMywgMjQzLCAyMjgsIDgsIDMsIAorICAgIDI0MywgMjI5LCA4LCAzLCAyNDMsIDIxMiwgOCwgMywgMjQzLCAyMTEsIDgsIDMsIDI0MywgMjE1LCA4LCAzLCAyNDMsIDIxMywgCisgICAgOCwgMywgMjEzLCAxNDQsIDgsIDMsIDIxMywgMTM5LCA4LCAzLCAyMTMsIDE3NiwgOCwgMywgMjEzLCAxNTMsIDgsIDMsIAorICAgIDIxMywgMTY2LCA4LCAzLCAyMTMsIDE2MywgOCwgMywgMjEzLCAxNjgsIDgsIDMsIDIxMywgMTY3LCA4LCAzLCAyMTQsIDcsIAorICAgIDgsIDMsIDIxNCwgMiwgOCwgMywgMjE0LCAyNywgOCwgMywgMjE0LCAxOCwgOCwgMywgMjEzLCAxMjUsIDgsIDMsIDIxMywgCisgICAgMTIxLCA4LCAzLCAyMTMsIDEzOCwgOCwgMywgMjEzLCAxMjYsIDgsIDMsIDIxMywgMTc4LCA4LCAzLCAyMTMsIDI0NCwgOCwgCisgICAgMywgMjEyLCAxMTAsIDgsIDMsIDIxMiwgMTA4LCA4LCAzLCAyMTIsIDExNiwgOCwgMywgMjEyLCAxMTMsIDgsIDMsIDIxMiwgCisgICAgMTExLCA4LCAzLCAyMTIsIDExMiwgOCwgMywgMjEyLCAxMDIsIDgsIDMsIDIxMiwgMTAxLCA4LCAzLCAyMTIsIDEwNiwgOCwgCisgICAgMywgMjEyLCAxMDUsIDgsIDMsIDIxMiwgMTAzLCA4LCAzLCAyMTIsIDEwNCwgOCwgMywgMjQ3LCAxODYsIDgsIDMsIDI0NywgCisgICAgMTc0LCA4LCAzLCAyNDgsIDExLCA4LCAzLCAyNDcsIDIxMSwgOCwgMywgMjQ3LCAyNDQsIDgsIDMsIDI0NywgMjQ4LCA4LCAzLCAKKyAgICAyNDcsIDI0NywgOCwgMywgMjQ4LCAxNjAsIDgsIDMsIDI0OCwgMTU1LCA4LCAzLCAyNDgsIDIyOSwgOCwgMywgMjQ4LCAxODAsIAorICAgIDgsIDMsIDI0NiwgNzAsIDgsIDMsIDI0NiwgNzEsIDgsIDMsIDI0NywgMTI4LCA4LCAzLCAyNDYsIDExMCwgOCwgMywgMjQ3LCAKKyAgICAxNTMsIDgsIDMsIDI0NywgMTMwLCA4LCAzLCAyNDgsIDM4LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDUzLCA4LCAzLCAKKyAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyNDYsIDg2LCA4LCAzLCAyNDYsIDY5LCA4LCAzLCAyNDYsIDY0LCA4LCAKKyAgICAzLCAyNDYsIDY3LCA4LCAzLCAyMTYsIDY4LCA4LCAzLCAyMTYsIDYyLCA4LCAzLCAyMTYsIDExOCwgOCwgMywgMjE2LCA3NywgCisgICAgOCwgMywgMjE2LCAxMTAsIDgsIDMsIDIxNiwgMTEyLCA4LCAzLCAyMTYsIDExMSwgOCwgMywgMjE3LCA0NywgOCwgMywgMjE3LCAKKyAgICAzNCwgOCwgMywgMjE3LCAxMDYsIDgsIDMsIDIxNywgNTUsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTUsIDEwMiwgOCwgMywgCisgICAgMjE1LCAxMDUsIDgsIDMsIDIxNSwgMTA0LCA4LCAzLCAyMTYsIDYsIDgsIDMsIDIxNiwgMiwgOCwgMywgMTEyLCA4LCAzLCAKKyAgICAyMTYsIDE0LCA4LCAzLCAyMTYsIDIxNCwgOCwgMywgMjE3LCAyMywgOCwgMywgMjE2LCAyMzgsIDgsIDMsIDIxNSwgODgsIDgsIAorICAgIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE5LCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OSwgCisgICAgOCwgMywgMjQ4LCAxMTUsIDgsIDMsIDI0OCwgMTE0LCA4LCAzLCAyNDgsIDEyMCwgOCwgMywgMjQ4LCAxMTYsIDgsIDMsIAorICAgIDI0OCwgMTE3LCA4LCAzLCAyNDgsIDExOSwgOCwgMywgMjQ4LCAxMTgsIDgsIDMsIDI0OCwgMTM2LCA4LCAzLCAyNDgsIDEzNSwgCisgICAgOCwgMywgMjQ4LCAxNDMsIDgsIDMsIDI0OCwgMTM3LCA4LCAzLCAyNDgsIDEwNSwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIAorICAgIDI0OCwgMTA2LCA4LCAzLCAyNDgsIDExMCwgOCwgMywgMjQ4LCAxMDksIDgsIDMsIDI0OCwgMTEzLCA4LCAzLCAyNDgsIDExMSwgCisgICAgOCwgMywgMjQ4LCAxMjgsIDgsIDMsIDI0OCwgMTMxLCA4LCAzLCAyNDgsIDEyOSwgOCwgMywgMjQ4LCAxMDEsIDgsIDMsIAorICAgIDI0OCwgMTAwLCA4LCAzLCAyNDgsIDEwOCwgOCwgMywgMjQ4LCAxMDQsIDgsIDMsIDI0OCwgMTAyLCA4LCAzLCAyNDgsIDEwMywgCisgICAgOCwgMywgMjI5LCAxMzEsIDgsIDMsIDIyOSwgMTMwLCA4LCAzLCAyMjksIDEzOCwgOCwgMywgMjI5LCAxMzMsIDgsIDMsIAorICAgIDIyOSwgMTM0LCA4LCAzLCAyMjksIDEzNSwgOCwgMywgMjI5LCAxNDcsIDgsIDMsIDIyOSwgMTQ2LCA4LCAzLCAyMjksIDE1MywgCisgICAgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTIzLCA4LCAzLCAyMjksIDEyMiwgOCwgMywgMjI5LCAxMjksIDgsIDMsIAorICAgIDIyOSwgMTI0LCA4LCAzLCAyMjksIDEzOSwgOCwgMywgMjI5LCAxNDUsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExNSwgCisgICAgOCwgMywgMjI5LCAxMTQsIDgsIDMsIDIyOSwgMTIwLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTYsIDgsIDMsIAorICAgIDIyOSwgMTE3LCA4LCAzLCAyNDEsIDg0LCA4LCAzLCAyNDEsIDgzLCA4LCAzLCAyNDEsIDkwLCA4LCAzLCAyNDEsIDg1LCA4LCAKKyAgICAzLCAyNDEsIDg3LCA4LCAzLCAyNDEsIDg2LCA4LCAzLCAyNDEsIDg5LCA4LCAzLCAyNDEsIDg4LCA4LCAzLCAyNDEsIDk1LCAKKyAgICA4LCAzLCAyNDEsIDk0LCA4LCAzLCAyNDEsIDk3LCA4LCAzLCAyNDEsIDk2LCA4LCAzLCAyNDEsIDc4LCA4LCAzLCAyNDEsIAorICAgIDc5LCA4LCAzLCAyNDEsIDgxLCA4LCAzLCAyNDEsIDgwLCA4LCAzLCAyNDEsIDgyLCA4LCAzLCAyNDEsIDkxLCA4LCAzLCAKKyAgICAyNDEsIDkzLCA4LCAzLCAyNDEsIDkyLCA4LCAzLCAyNDEsIDc3LCA4LCAzLCAyMjgsIDE5NCwgOCwgMywgMjI4LCAxOTIsIDgsIAorICAgIDMsIDIyOCwgMjM4LCA4LCAzLCAyMjgsIDE5NywgOCwgMywgMjI4LCAyMjAsIDgsIDMsIDIyOCwgMjM0LCA4LCAzLCAyMjgsIAorICAgIDIzMywgOCwgMywgMjI5LCAxODgsIDgsIDMsIDE5OCwgOCwgMywgMjI5LCAyMDIsIDgsIDMsIDIyNywgMTkwLCA4LCAzLCAKKyAgICAyMjcsIDE5MiwgOCwgMywgMjI3LCAxOTEsIDgsIDMsIDIyOCwgNTYsIDgsIDMsIDIyOCwgNDMsIDgsIDMsIDIyOCwgNzksIDgsIAorICAgIDMsIDIyOCwgNjUsIDgsIDMsIDIyOSwgODgsIDgsIDMsIDIyOSwgMTEyLCA4LCAzLCAyMjksIDk5LCA4LCAzLCAyMjcsIDE4NSwgCisgICAgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMjQyLCA4LCAzLCAyMjcsIDE4OSwgOCwgMywgMjI3LCAxODcsIDgsIDMsIAorICAgIDIyNywgMTg4LCA4LCAzLCAyNDEsIDE0OCwgOCwgMywgMjQxLCAxNDcsIDgsIDMsIDI0MSwgMTUzLCA4LCAzLCAyNDEsIDE0OSwgCisgICAgOCwgMywgMjQxLCAxNTAsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAyNDEsIDE1MSwgOCwgMywgMjQxLCAxNTgsIDgsIDMsIAorICAgIDI0MSwgMTU3LCA4LCAzLCAyNDEsIDE2MCwgOCwgMywgMjQxLCAxNTksIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAyNDEsIDE0MiwgCisgICAgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQ0LCA4LCAzLCAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDUsIDgsIDMsIAorICAgIDI0MSwgMTU0LCA4LCAzLCAyNDEsIDE1NiwgOCwgMywgMjQxLCAxNTUsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzNSwgCisgICAgOCwgMywgMjQxLCAxNDMsIDgsIDMsIDI0MSwgMTM5LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzgsIDgsIDMsIAorICAgIDI0MSwgMTMwLCA4LCAzLCAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMzQsIDgsIDMsIDI0MSwgMTMzLCA4LCAzLCAyNDEsIDEzMSwgCisgICAgOCwgMywgMjQxLCAxMzIsIDgsIDMsIDIzMiwgMjAxLCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAyNDcsIDgsIDMsIAorICAgIDIzMiwgMjA4LCA4LCAzLCAyMzIsIDIzOSwgOCwgMywgMjMyLCAyMzgsIDgsIDMsIDIzMiwgMjQyLCA4LCAzLCAyMzIsIDI0MCwgCisgICAgOCwgMywgMjMzLCA4NSwgOCwgMywgMjMzLCA3NSwgOCwgMywgMjMzLCAxNDEsIDgsIDMsIDIzMywgOTQsIDgsIDMsIDIzMiwgCisgICAgODQsIDgsIDMsIDIzMiwgODMsIDgsIDMsIDIzMiwgODYsIDgsIDMsIDIzMiwgODUsIDgsIDMsIDIzMiwgMTIyLCA4LCAzLCAKKyAgICAyMzIsIDExMiwgOCwgMywgMjMyLCAxNjIsIDgsIDMsIDIzMiwgMTI2LCA4LCAzLCAyMzMsIDgsIDgsIDMsIDIzMywgNjQsIDgsIAorICAgIDMsIDIzMywgMjMsIDgsIDMsIDIzMiwgNzksIDgsIDMsIDIzMiwgNzcsIDgsIDMsIDIzMiwgMTAzLCA4LCAzLCAyMzIsIDgyLCAKKyAgICA4LCAzLCAyMzIsIDgwLCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIDU5LCA4LCAzLCAyMzIsIDU4LCA4LCAzLCAyMzIsIAorICAgIDY3LCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDYwLCA4LCAzLCAyMzIsIDYxLCA4LCAzLCAyNDIsIDE5NiwgOCwgMywgCisgICAgMjQyLCAxOTUsIDgsIDMsIDI0MiwgMjIxLCA4LCAzLCAyNDIsIDIwNiwgOCwgMywgMjQyLCAyMTMsIDgsIDMsIDI0MiwgMjEyLCAKKyAgICA4LCAzLCAyNDIsIDIxNSwgOCwgMywgMjQyLCAyMTQsIDgsIDMsIDI0MywgOTYsIDgsIDMsIDI0MywgOTEsIDgsIDMsIDI0MywgCisgICAgMTQyLCA4LCAzLCAyNDMsIDEwNiwgOCwgMywgMjQyLCA5OCwgOCwgMywgMjQyLCA5NywgOCwgMywgMjQyLCAxMDAsIDgsIDMsIAorICAgIDI0MiwgOTksIDgsIDMsIDI0MiwgMTYxLCA4LCAzLCAyNDIsIDE1OSwgOCwgMywgMjQyLCAxODEsIDgsIDMsIDI0MiwgMTY5LCAKKyAgICA4LCAzLCAyNDMsIDQwLCA4LCAzLCAyNDMsIDM4LCA4LCAzLCAyNDMsIDY5LCA4LCAzLCAyNDMsIDUxLCA4LCAzLCAyNDIsIAorICAgIDg4LCA4LCAzLCAyNDIsIDg3LCA4LCAzLCAyNDIsIDEyMCwgOCwgMywgMjQyLCA5NiwgOCwgMywgMjQyLCA4OSwgOCwgMywgCisgICAgMjQyLCA5NSwgOCwgMywgMjM0LCA2NywgOCwgMywgMjM0LCA2NiwgOCwgMywgMjM0LCA5OCwgOCwgMywgMjM0LCA4MSwgOCwgCisgICAgMywgMjM0LCA5MSwgOCwgMywgMjM0LCA5NCwgOCwgMywgMjM0LCA5MiwgOCwgMywgMjM0LCAyMDgsIDgsIDMsIDIzNCwgMTk2LCAKKyAgICA4LCAzLCAxNzYsIDgsIDMsIDIzNCwgMjM0LCA4LCAzLCAyMzMsIDIwNiwgOCwgMywgMjMzLCAyMTEsIDgsIDMsIDIzMywgCisgICAgMjA4LCA4LCAzLCAyMzQsIDYsIDgsIDMsIDIzNCwgMiwgOCwgMywgMjM0LCAzNCwgOCwgMywgMjM0LCAxMywgOCwgMywgMjM0LCAKKyAgICAxNjIsIDgsIDMsIDIzNCwgMTQ2LCA4LCAzLCAyMzQsIDE4OCwgOCwgMywgMjM0LCAxNjUsIDgsIDMsIDIzMywgMTk1LCA4LCAKKyAgICAzLCAyMzMsIDE5MiwgOCwgMywgMjMzLCAyMjMsIDgsIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDE5OCwgOCwgMywgMjMzLCAKKyAgICAyMDIsIDgsIDMsIDI0MywgMjIsIDgsIDMsIDI0MywgMjEsIDgsIDMsIDI0MywgMjYsIDgsIDMsIDI0MywgMjMsIDgsIDMsIAorICAgIDI0MywgMjUsIDgsIDMsIDI0MywgMjQsIDgsIDMsIDI0MywgMzMsIDgsIDMsIDI0MywgMzIsIDgsIDMsIDI0MywgMzYsIDgsIAorICAgIDMsIDI0MywgMzQsIDgsIDMsIDI0MywgMTMsIDgsIDMsIDI0MywgMTIsIDgsIDMsIDI0MywgMTUsIDgsIDMsIDI0MywgMTQsIAorICAgIDgsIDMsIDI0MywgMTgsIDgsIDMsIDI0MywgMTcsIDgsIDMsIDI0MywgMjAsIDgsIDMsIDI0MywgMTksIDgsIDMsIDI0MywgCisgICAgMjgsIDgsIDMsIDI0MywgMjcsIDgsIDMsIDI0MywgMzEsIDgsIDMsIDI0MywgMjksIDgsIDMsIDI0MywgOCwgOCwgMywgMjQzLCAKKyAgICA3LCA4LCAzLCAyNDMsIDE2LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDksIDgsIDMsIDI0MywgMTAsIDgsIDMsIDIzMCwgCisgICAgMjU0LCA4LCAzLCAyMzAsIDI1NSwgOCwgMywgMjMxLCAxNywgOCwgMywgMjMxLCAxNiwgOCwgMywgMjMxLCAxOSwgOCwgMywgCisgICAgMjMxLCAxOCwgOCwgMywgMjMwLCAyNDUsIDgsIDMsIDIzMCwgMjQ3LCA4LCAzLCAyMzAsIDI0NiwgOCwgMywgMjMwLCAyNTAsIAorICAgIDgsIDMsIDIzMCwgMjQ5LCA4LCAzLCAyMzAsIDI1MiwgOCwgMywgMjMwLCAyNTEsIDgsIDMsIDIzMSwgMCwgOCwgMywgMjMxLCAKKyAgICAyLCA4LCAzLCAyMzEsIDEsIDgsIDMsIDIzMCwgMjQxLCA4LCAzLCAyMzAsIDI0MCwgOCwgMywgMjMwLCAyNDgsIDgsIDMsIAorICAgIDIzMCwgMjQ0LCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAyNDMsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4NiwgCisgICAgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTg4LCA4LCAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxODksIDgsIDMsIAorICAgIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE5MSwgOCwgMywgMjQwLCAxOTgsIDgsIDMsIDI0MCwgMTk3LCA4LCAzLCAyNDAsIDIwMCwgCisgICAgOCwgMywgMjQwLCAxOTksIDgsIDMsIDI0MCwgMTc5LCA4LCAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxODEsIDgsIDMsIAorICAgIDI0MCwgMTgwLCA4LCAzLCAyNDAsIDE4MywgOCwgMywgMjQwLCAxODIsIDgsIDMsIDI0MCwgMTg1LCA4LCAzLCAyNDAsIDE4NCwgCisgICAgOCwgMywgMjQwLCAxOTQsIDgsIDMsIDI0MCwgMTk2LCA4LCAzLCAyNDAsIDE5NSwgOCwgMywgMjI5LCAyOSwgOCwgMywgMjI5LCAKKyAgICAzMSwgOCwgMywgMjI5LCAzMCwgOCwgMywgMjI5LCA3MiwgOCwgMywgMjI5LCA3MCwgOCwgMywgMjI5LCA4MiwgOCwgMywgCisgICAgMjI5LCA3NSwgOCwgMywgMjI4LCAyNDgsIDgsIDMsIDIyOCwgMjQ3LCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCAxLCA4LCAKKyAgICAzLCAyMjgsIDI1NCwgOCwgMywgMjI5LCA5LCA4LCAzLCAyMjksIDMsIDgsIDMsIDIyOSwgNjMsIDgsIDMsIDIyOSwgNjksIDgsIAorICAgIDMsIDIyOSwgNjUsIDgsIDMsIDI0MSwgMTYzLCA4LCAzLCAyNDEsIDE3MywgOCwgMywgMjQxLCAxODIsIDgsIDMsIDI0MiwgMiwgCisgICAgOCwgMywgMjQxLCAyNTAsIDgsIDMsIDE2MiwgOCwgMywgMjQyLCAxMywgOCwgMywgMjQwLCAyMTMsIDgsIDMsIDI0MCwgMjEyLCAKKyAgICA4LCAzLCAyNDAsIDIxNSwgOCwgMywgMjQwLCAyMTQsIDgsIDMsIDI0MCwgMjQ5LCA4LCAzLCAyNDAsIDI0MCwgOCwgMywgCisgICAgMjQxLCA3NSwgOCwgMywgMjQxLCA1NCwgOCwgMywgMjQxLCAyMDEsIDgsIDMsIDI0MSwgMjQ1LCA4LCAzLCAyNDEsIDIxMywgCisgICAgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAKKyAgICAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAKKyAgICAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCAKKyAgICA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIAorICAgIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIAorICAgIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAKKyAgICAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAKKyAgICAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAKKyAgICAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgCisgICAgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAzNiwgOCwgMywgMjUwLCAKKyAgICAzMiwgOCwgMywgMjUwLCA1OSwgOCwgMywgMjUwLCA0NSwgOCwgMywgMjUwLCA1NiwgOCwgMywgMjUwLCA1MCwgOCwgMywgCisgICAgMjUwLCA1OCwgOCwgMywgMjUwLCA1NywgOCwgMywgMjUwLCAyMzIsIDgsIDMsIDI1MCwgMjI1LCA4LCAzLCAyNTEsIDQxLCA4LCAKKyAgICAzLCAyNTEsIDMsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDExNCwgOCwgMywgMjQ5LCAxMTMsIDgsIDMsIDI0OSwgCisgICAgMTYxLCA4LCAzLCAyNDksIDE1MiwgOCwgMywgMjQ5LCAyNDYsIDgsIDMsIDI0OSwgMTc3LCA4LCAzLCAyNTAsIDE2OCwgOCwgCisgICAgMywgMjUwLCAxOTgsIDgsIDMsIDI1MCwgMTczLCA4LCAzLCAyNDksIDkyLCA4LCAzLCAyNDksIDkwLCA4LCAzLCAyNDksIAorICAgIDEyMCwgOCwgMywgMjQ5LCAxMTAsIDgsIDMsIDI0OSwgOTcsIDgsIDMsIDI0OSwgMTA5LCA4LCAzLCAyNDksIDcxLCA4LCAzLCAKKyAgICAyNDksIDcwLCA4LCAzLCAyNDksIDgxLCA4LCAzLCAyNDksIDc3LCA4LCAzLCAyNDksIDcyLCA4LCAzLCAyNDksIDc0LCA4LCAKKyAgICAzLCAyMDksIDIyOCwgOCwgMywgMjA5LCAyMjcsIDgsIDMsIDIwOSwgMjM0LCA4LCAzLCAyMDksIDIyOSwgOCwgMywgMjA5LCAKKyAgICAyMzEsIDgsIDMsIDIwOSwgMjMwLCA4LCAzLCAyMDksIDIzMywgOCwgMywgMjA5LCAyMzIsIDgsIDMsIDIwOSwgMjQwLCA4LCAKKyAgICAzLCAyMDksIDIzOSwgOCwgMywgMjA5LCAyNDMsIDgsIDMsIDIwOSwgMjQxLCA4LCAzLCAyMDksIDIyNCwgOCwgMywgMjA5LCAKKyAgICAyMjYsIDgsIDMsIDIwOSwgMjI1LCA4LCAzLCAyMDksIDIzNSwgOCwgMywgMjA5LCAyMzgsIDgsIDMsIDIwOSwgMjM2LCA4LCAKKyAgICAzLCAyMDksIDIxNywgOCwgMywgMjA5LCAyMjEsIDgsIDMsIDIwOSwgMjIwLCA4LCAzLCAyMDksIDIxOCwgOCwgMywgMjA5LCAKKyAgICAyMTksIDgsIDMsIDIwOSwgMjExLCA4LCAzLCAyMDksIDIxMCwgOCwgMywgMjA5LCAyMTYsIDgsIDMsIDIwOSwgMjE0LCA4LCAKKyAgICAzLCAyMDksIDIxMiwgOCwgMywgMjA5LCAyMTMsIDgsIDMsIDIyNywgMTA4LCA4LCAzLCAyMjcsIDEwNywgOCwgMywgMjI3LCAKKyAgICAxMTMsIDgsIDMsIDIyNywgMTA5LCA4LCAzLCAyMjcsIDExMCwgOCwgMywgMjI3LCAxMTIsIDgsIDMsIDIyNywgMTExLCA4LCAKKyAgICAzLCAyMjcsIDExOCwgOCwgMywgMjI3LCAxMTcsIDgsIDMsIDIyNywgMTIxLCA4LCAzLCAyMjcsIDEyMCwgOCwgMywgMjI3LCAKKyAgICAxMDEsIDgsIDMsIDIyNywgMTAyLCA4LCAzLCAyMjcsIDEwNSwgOCwgMywgMjI3LCAxMDYsIDgsIDMsIDIyNywgMTE0LCA4LCAKKyAgICAzLCAyMjcsIDExNiwgOCwgMywgMjI3LCA5NiwgOCwgMywgMjI3LCAxMDQsIDgsIDMsIDIyNywgMTAwLCA4LCAzLCAyMjcsIAorICAgIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDkxLCA4LCAzLCAyMjcsIDkwLCA4LCAzLCAyMjcsIDk1LCA4LCAzLCAKKyAgICAyMjcsIDk0LCA4LCAzLCAyMjcsIDkyLCA4LCAzLCAyMjcsIDkzLCA4LCAzLCAyMTksIDEyOSwgOCwgMywgMTk1LCA4LCAzLCAKKyAgICAyMTksIDE5MywgOCwgMywgMjE5LCAxMzIsIDgsIDMsIDIxOSwgMTg1LCA4LCAzLCAyMTksIDE4OCwgOCwgMywgMjE5LCAxODYsIAorICAgIDgsIDMsIDIyMSwgMjI4LCA4LCAzLCAyMjEsIDIxNiwgOCwgMywgMjA2LCA4LCAzLCAyMjEsIDIzNiwgOCwgMywgMjE4LCAyOSwgCisgICAgOCwgMywgMjE4LCAzMSwgOCwgMywgMjE4LCAzMCwgOCwgMywgMjE5LCAzNiwgOCwgMywgMjE5LCAyNSwgOCwgMywgMjE5LCAKKyAgICA2MCwgOCwgMywgMjE5LCA0MCwgOCwgMywgMjIwLCAxMTYsIDgsIDMsIDIyMSwgMTgzLCA4LCAzLCAyMjAsIDE0MSwgOCwgMywgCisgICAgMjE4LCA2LCA4LCAzLCAyMTgsIDQsIDgsIDMsIDIxOCwgODQsIDgsIDMsIDIxOCwgMjgsIDgsIDMsIDIxOCwgMTAsIDgsIDMsIAorICAgIDIxOCwgMTgsIDgsIDMsIDIxNywgMTY3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAyMzMsIDgsIDMsIDIxNywgMTc0LCAKKyAgICA4LCAzLCAyMTcsIDE2OSwgOCwgMywgMjE3LCAxNzMsIDgsIDMsIDIxOCwgMTg4LCA4LCAzLCAyMTgsIDE4NywgOCwgMywgCisgICAgMjE4LCAxOTQsIDgsIDMsIDIxOCwgMTg5LCA4LCAzLCAyMTgsIDE5MSwgOCwgMywgMjE4LCAxOTMsIDgsIDMsIDIxOCwgMTkyLCAKKyAgICA4LCAzLCAyMTgsIDIwMiwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMjI1LCA4LCAzLCAyMTgsIDIwMywgOCwgMywgCisgICAgMjE4LCAxODMsIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODQsIDgsIDMsIDIxOCwgMTk2LCAKKyAgICA4LCAzLCAyMTgsIDE5OSwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3NywgOCwgMywgCisgICAgMjE4LCAxODEsIDgsIDMsIDIxOCwgMTgwLCA4LCAzLCAyMTgsIDE3MiwgOCwgMywgMjE4LCAxNzEsIDgsIDMsIDIxOCwgMTc2LCAKKyAgICA4LCAzLCAyMTgsIDE3NSwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTc0LCA4LCAzLCAyMTAsIDc3LCA4LCAzLCAyMTAsIAorICAgIDc2LCA4LCAzLCAyMTAsIDgyLCA4LCAzLCAyMTAsIDc5LCA4LCAzLCAyMTAsIDU5LCA4LCAzLCAyMTAsIDYxLCA4LCAzLCAKKyAgICAyMTAsIDYwLCA4LCAzLCAyMTAsIDY0LCA4LCAzLCAyMTAsIDYzLCA4LCAzLCAyMTAsIDY3LCA4LCAzLCAyMTAsIDY1LCA4LCAKKyAgICAzLCAyMTAsIDcxLCA4LCAzLCAyMTAsIDcwLCA4LCAzLCAyMTAsIDc0LCA4LCAzLCAyMTAsIDcyLCA4LCAzLCAyMTAsIDU1LCAKKyAgICA4LCAzLCAyMTAsIDU0LCA4LCAzLCAyMTAsIDYyLCA4LCAzLCAyMTAsIDU4LCA4LCAzLCAyMTAsIDU2LCA4LCAzLCAyMTAsIAorICAgIDU3LCA4LCAzLCAyMTAsIDQ3LCA4LCAzLCAyMTAsIDQ2LCA4LCAzLCAyMTAsIDUxLCA4LCAzLCAyMTAsIDUwLCA4LCAzLCAKKyAgICAyMTAsIDQ4LCA4LCAzLCAyMTAsIDQ5LCA4LCAzLCAyNTAsIDE0NCwgOCwgMywgMjUwLCAxNDEsIDgsIDMsIDI1MCwgMTY1LCAKKyAgICA4LCAzLCAyNTAsIDE1MiwgOCwgMywgMjUwLCA3MywgOCwgMywgMjUwLCA3MiwgOCwgMywgMjUwLCA3NSwgOCwgMywgMjUwLCAKKyAgICA3NCwgOCwgMywgMjUwLCA4NywgOCwgMywgMjUwLCA4NiwgOCwgMywgMjUwLCA5NCwgOCwgMywgMjUwLCA4OSwgOCwgMywgCisgICAgMjUwLCAxMjMsIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDEzOSwgOCwgMywgMjUwLCAxMjksIDgsIDMsIDI1MCwgNjcsIAorICAgIDgsIDMsIDI1MCwgNzcsIDgsIDMsIDI1MCwgNzEsIDgsIDMsIDI1MCwgNjgsIDgsIDMsIDI1MCwgNzAsIDgsIDMsIDI1MCwgCisgICAgNjEsIDgsIDMsIDI1MCwgNjAsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgNjQsIDgsIDMsIDI1MCwgNjIsIDgsIDMsIAorICAgIDI1MCwgNjMsIDgsIDMsIDIyMiwgMTc3LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAxNjAsIDgsIDMsIDIyMiwgMTYxLCAKKyAgICA4LCAzLCAyMjIsIDE2NCwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY3LCA4LCAzLCAyMjIsIDE2NSwgOCwgMywgCisgICAgMjIyLCAxNzEsIDgsIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE3NiwgOCwgMywgMjIyLCAxNzIsIDgsIDMsIDIyMiwgMTU2LCAKKyAgICA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTU5LCA4LCAzLCAyMjIsIDE1NywgOCwgMywgCisgICAgMjIyLCAxNTgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjIsIDE0OCwgOCwgMywgMjIyLCAxNTMsIDgsIDMsIDIyMiwgMTUyLCAKKyAgICA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNTEsIDgsIDMsIDIyOCwgMzksIDgsIDMsIDIyOCwgMzgsIDgsIDMsIDIyOCwgCisgICAgNDEsIDgsIDMsIDIyOCwgNDAsIDgsIDMsIDIyOCwgMzEsIDgsIDMsIDIyOCwgMzMsIDgsIDMsIDIyOCwgMzIsIDgsIDMsIAorICAgIDIyOCwgMzUsIDgsIDMsIDIyOCwgMzQsIDgsIDMsIDIyOCwgMzcsIDgsIDMsIDIyOCwgMzYsIDgsIDMsIDIyOCwgMjYsIDgsIAorICAgIDMsIDIyOCwgMjUsIDgsIDMsIDIyOCwgMzAsIDgsIDMsIDIyOCwgMjksIDgsIDMsIDIyOCwgMjcsIDgsIDMsIDIyOCwgMjgsIAorICAgIDgsIDMsIDIyOCwgMjAsIDgsIDMsIDIyOCwgMTksIDgsIDMsIDIyOCwgMjQsIDgsIDMsIDIyOCwgMjMsIDgsIDMsIDIyOCwgCisgICAgMjEsIDgsIDMsIDIyOCwgMjIsIDgsIDMsIDIyMCwgNzQsIDgsIDMsIDIyMCwgNjksIDgsIDMsIDIyMCwgMTA0LCA4LCAzLCAKKyAgICAyMjAsIDg1LCA4LCAzLCAyMTksIDIxNywgOCwgMywgMjE5LCAyMTksIDgsIDMsIDIxOSwgMjE4LCA4LCAzLCAyMTksIDIzOCwgCisgICAgOCwgMywgMjE5LCAyMzUsIDgsIDMsIDIyMCwgOSwgOCwgMywgMjIwLCAwLCA4LCAzLCAyMjAsIDQ0LCA4LCAzLCAyMjAsIDM3LCAKKyAgICA4LCAzLCAyMjAsIDY1LCA4LCAzLCAyMjAsIDUyLCA4LCAzLCAyMTksIDIxMywgOCwgMywgMjE5LCAyMTEsIDgsIDMsIDIxOSwgCisgICAgMjI3LCA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMTQsIDgsIDMsIDIxOSwgMjE1LCA4LCAzLCAyMTksIDE5NiwgOCwgCisgICAgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMjAyLCA4LCAzLCAyMTksIDE5OSwgOCwgMywgMjE5LCAxOTcsIDgsIDMsIDIxOSwgCisgICAgMTk4LCA4LCAzLCAyMjMsIDE0NCwgOCwgMywgMjIzLCAxMzgsIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNTAsIDgsIDMsIAorICAgIDIyMiwgMTIyLCA4LCAzLCAyMjIsIDEyNCwgOCwgMywgMjIyLCAxMjMsIDgsIDMsIDIyMiwgMTkwLCA4LCAzLCAyMjIsIDE4MywgCisgICAgOCwgMywgMjIyLCAyMTMsIDgsIDMsIDIyMiwgMTk0LCA4LCAzLCAyMjMsIDQ2LCA4LCAzLCAyMjMsIDEzMSwgOCwgMywgMjIzLCAKKyAgICA4NCwgOCwgMywgMjIyLCAxMTUsIDgsIDMsIDIyMiwgMTEyLCA4LCAzLCAyMjIsIDE0MiwgOCwgMywgMjIyLCAxMjEsIDgsIDMsIAorICAgIDIyMiwgMTE3LCA4LCAzLCAyMjIsIDExOCwgOCwgMywgMjIyLCA5NywgOCwgMywgMjIyLCA5NiwgOCwgMywgMjIyLCAxMDIsIAorICAgIDgsIDMsIDIyMiwgMTAwLCA4LCAzLCAyMjIsIDk4LCA4LCAzLCAyMjIsIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAKKyAgICAxMDMsIDgsIDMsIDIzNSwgMTE0LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgMjM1LCAxMTAsIDgsIDMsIDIzNSwgMTA5LCA4LCAKKyAgICAzLCAyMzUsIDExMiwgOCwgMywgMjM1LCAxMTEsIDgsIDMsIDIzNSwgNDcsIDgsIDMsIDIzNSwgNDYsIDgsIDMsIDIzNSwgNDksIAorICAgIDgsIDMsIDIzNSwgNDgsIDgsIDMsIDIzNSwgNjIsIDgsIDMsIDIzNSwgNjAsIDgsIDMsIDIzNSwgNzQsIDgsIDMsIDIzNSwgCisgICAgNjQsIDgsIDMsIDIzNSwgNDAsIDgsIDMsIDIzNSwgMzgsIDgsIDMsIDIzNSwgNTcsIDgsIDMsIDIzNSwgNDUsIDgsIDMsIAorICAgIDIzNSwgNDIsIDgsIDMsIDIzNSwgNDMsIDgsIDMsIDIzNSwgMzIsIDgsIDMsIDIzNSwgMzEsIDgsIDMsIDIzNSwgMzYsIDgsIAorICAgIDMsIDIzNSwgMzUsIDgsIDMsIDIzNSwgMzMsIDgsIDMsIDIzNSwgMzQsIDgsIDMsIDIyNCwgNDksIDgsIDMsIDIyNCwgNDcsIAorICAgIDgsIDMsIDIyNCwgNTYsIDgsIDMsIDIyNCwgNTAsIDgsIDMsIDIyNCwgNTMsIDgsIDMsIDIyNCwgNTIsIDgsIDMsIDIyNCwgCisgICAgNTUsIDgsIDMsIDIyNCwgNTQsIDgsIDMsIDIyNCwgMiwgOCwgMywgMjIzLCAyNTUsIDgsIDMsIDIyNCwgNCwgOCwgMywgMjI0LCAKKyAgICAzLCA4LCAzLCAyMjQsIDM2LCA4LCAzLCAyMjQsIDM1LCA4LCAzLCAyMjQsIDQ1LCA4LCAzLCAyMjQsIDM5LCA4LCAzLCAyMjMsIAorICAgIDI1MCwgOCwgMywgMjIzLCAyNDYsIDgsIDMsIDIyNCwgMzMsIDgsIDMsIDIyMywgMjU0LCA4LCAzLCAyMjMsIDI1MiwgOCwgMywgCisgICAgMjIzLCAyNTMsIDgsIDMsIDIyMywgMjMwLCA4LCAzLCAyMjMsIDIyOCwgOCwgMywgMjIzLCAyNDAsIDgsIDMsIDIyMywgMjMzLCAKKyAgICA4LCAzLCAyMjMsIDIzMSwgOCwgMywgMjIzLCAyMzIsIDgsIDMsIDIzNSwgOTMsIDgsIDMsIDIzNSwgOTIsIDgsIDMsIDIzNSwgCisgICAgOTksIDgsIDMsIDIzNSwgOTQsIDgsIDMsIDIzNSwgOTYsIDgsIDMsIDIzNSwgOTUsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIAorICAgIDIzNSwgOTcsIDgsIDMsIDIzNSwgODQsIDgsIDMsIDIzNSwgODYsIDgsIDMsIDIzNSwgODUsIDgsIDMsIDIzNSwgODksIDgsIAorICAgIDMsIDIzNSwgODgsIDgsIDMsIDIzNSwgOTEsIDgsIDMsIDIzNSwgOTAsIDgsIDMsIDIzNSwgODAsIDgsIDMsIDIzNSwgNzksIAorICAgIDgsIDMsIDIzNSwgODcsIDgsIDMsIDIzNSwgODMsIDgsIDMsIDIzNSwgODEsIDgsIDMsIDIzNSwgODIsIDgsIDMsIDIzNSwgCisgICAgNzYsIDgsIDMsIDIzNSwgNzUsIDgsIDMsIDIzNSwgNzgsIDgsIDMsIDIzNSwgNzcsIDgsIDMsIDIyOCwgMTY3LCA4LCAzLCAKKyAgICAyMjgsIDE2NiwgOCwgMywgMjI4LCAxNzQsIDgsIDMsIDIyOCwgMTY4LCA4LCAzLCAyMjgsIDE3MCwgOCwgMywgMjI4LCAxNjksIAorICAgIDgsIDMsIDIyOCwgMTczLCA4LCAzLCAyMjgsIDE3MSwgOCwgMywgMjI4LCAxNTYsIDgsIDMsIDIyOCwgMTU3LCA4LCAzLCAKKyAgICAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY1LCA4LCAzLCAyMjgsIDE2MywgOCwgMywgMjI4LCAxNTEsIAorICAgIDgsIDMsIDIyOCwgMTYwLCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTIsIDgsIDMsIDIyOCwgMTUzLCA4LCAzLCAKKyAgICAyMjgsIDE0NiwgOCwgMywgMjI4LCAxNDUsIDgsIDMsIDIyOCwgMTUwLCA4LCAzLCAyMjgsIDE0OSwgOCwgMywgMjI4LCAxNDcsIAorICAgIDgsIDMsIDIyOCwgMTQ4LCA4LCAzLCAyMjcsIDE0MSwgOCwgMywgMjI3LCAxNDAsIDgsIDMsIDIyNywgMTUyLCA4LCAzLCAKKyAgICAyMjcsIDE0NSwgOCwgMywgMjI3LCAxNDksIDgsIDMsIDIyNywgMTQ4LCA4LCAzLCAyMjcsIDE1MSwgOCwgMywgMjI3LCAxNTAsIAorICAgIDgsIDMsIDIyNywgMTI4LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKKyAgICAyMjcsIDEzMywgOCwgMywgMjI3LCAxMzgsIDgsIDMsIDIyNywgMTM1LCA4LCAzLCAyMjcsIDEyNiwgOCwgMywgMjI3LCAxMjQsIAorICAgIDgsIDMsIDIyNywgMTMyLCA4LCAzLCAyMjcsIDEyNywgOCwgMywgMjExLCAxNTAsIDgsIDMsIDIxMSwgMTQ5LCA4LCAzLCAKKyAgICAyMTEsIDE1NywgOCwgMywgMjExLCAxNTIsIDgsIDMsIDIxMSwgMTU0LCA4LCAzLCAyMTEsIDE1MywgOCwgMywgMjExLCAxNTYsIAorICAgIDgsIDMsIDIxMSwgMTU1LCA4LCAzLCAyMTEsIDEzOSwgOCwgMywgMjExLCAxNDAsIDgsIDMsIDIxMSwgMTQ0LCA4LCAzLCAKKyAgICAyMTEsIDE0MywgOCwgMywgMjExLCAxNDgsIDgsIDMsIDIxMSwgMTQ2LCA4LCAzLCAyMTEsIDEyMSwgOCwgMywgMjExLCAxMTksIAorICAgIDgsIDMsIDIxMSwgMTMxLCA4LCAzLCAyMTEsIDEyNCwgOCwgMywgMjExLCAxMjIsIDgsIDMsIDIxMSwgMTIzLCA4LCAzLCAKKyAgICAyMTAsIDI1MCwgOCwgMywgMjEwLCAyNDgsIDgsIDMsIDIxMSwgOCwgOCwgMywgMjEwLCAyNTEsIDgsIDMsIDIxMSwgMiwgOCwgCisgICAgMywgMjExLCAxLCA4LCAzLCAyMTEsIDUsIDgsIDMsIDIxMSwgMywgOCwgMywgMjEwLCAxOTEsIDgsIDMsIDIxMCwgMTkwLCA4LCAKKyAgICAzLCAyMTAsIDE5NCwgOCwgMywgMjEwLCAxOTIsIDgsIDMsIDIxMCwgMjI0LCA4LCAzLCAyMTAsIDIyMSwgOCwgMywgMjEwLCAKKyAgICAyNDQsIDgsIDMsIDIxMCwgMjI4LCA4LCAzLCAyMTAsIDE4MiwgOCwgMywgMjEwLCAxNzgsIDgsIDMsIDIxMCwgMjEyLCA4LCAKKyAgICAzLCAyMTAsIDE4OSwgOCwgMywgMjEwLCAxODUsIDgsIDMsIDIxMCwgMTg2LCA4LCAzLCAyMTAsIDE2MiwgOCwgMywgMjEwLCAKKyAgICAxNjEsIDgsIDMsIDIxMCwgMTY5LCA4LCAzLCAyMTAsIDE2NSwgOCwgMywgMjEwLCAxNjMsIDgsIDMsIDIxMCwgMTY0LCA4LCAKKyAgICAzNCwgMjI0LCAzNiwgOCwgMzQsIDIzMiwgMjQ3LCA4LCAzNCwgMjM0LCA2NywgOCwgMzQsIDIyNywgMTQ1LCA4LCAzNCwgCisgICAgMjQ5LCA3NywgOCwgMzQsIDIxOCwgMTk0LCA4LCAzNCwgMjQzLCAxOSwgOCwgMzQsIDI0MywgNTEsIDgsIDM0LCAyMzAsIAorICAgIDIzNSwgOCwgMzQsIDI0MCwgMTg3LCA4LCAzNCwgMjMyLCA2MSwgOCwgMzQsIDI1MiwgOTEsIDgsIDM0LCAyMzAsIDEzMSwgOCwgCisgICAgMzQsIDIxMCwgMjQ0LCA4LCAzNCwgMjI0LCAxMjQsIDgsIDM0LCAyNDAsIDE4MSwgOCwgMzQsIDIxNywgNDcsIDgsIDM0LCAKKyAgICAyNDMsIDE0MiwgOCwgMzQsIDIxMCwgNSwgOCwgMzQsIDI0OSwgNzEsIDgsIDM0LCAyNDgsIDEwMywgOCwgMzQsIDI1MSwgCisgICAgMTA2LCA4LCAzNCwgMjQzLCAxNSwgOCwgMzQsIDIyNywgMTM1LCA4LCAzNCwgMjE1LCAxMTksIDgsIDM0LCAyMjYsIDE3OSwgCisgICAgOCwgMzQsIDIzNSwgODAsIDgsIDM0LCAyMTAsIDE5LCA4LCAzNCwgMjI0LCAxMDMsIDgsIDM0LCAyNDEsIDExNSwgOCwgMzQsIAorICAgIDIxMCwgMjUwLCA4LCAzNCwgMjEyLCAxMTIsIDgsIDM0LCAyMTksIDIwMiwgOCwgMzQsIDIxMywgMjQ0LCA4LCAzNCwgMjEwLCAKKyAgICAxMTYsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjI3LCAxMDAsIDgsIDM0LCAyMzUsIDc4LCA4LCAzNCwgMjQyLCAxNjEsIDgsIAorICAgIDM0LCAyMzUsIDk4LCA4LCAzNCwgMjExLCAyMjcsIDgsIDM0LCAyNDYsIDg2LCA4LCAzNCwgMjE5LCAyMTUsIDgsIDM0LCAKKyAgICAyMzIsIDI0MiwgOCwgMzQsIDI0OSwgODEsIDgsIDM0LCAyNDksIDExMywgOCwgMzQsIDI1MCwgNDUsIDgsIDM0LCAyNDAsIAorICAgIDE4NCwgOCwgMzQsIDIyMCwgNzQsIDgsIDM0LCAyMTAsIDQsIDgsIDM0LCAyMjAsIDAsIDgsIDM0LCAyNTAsIDEzOSwgOCwgCisgICAgMzQsIDIwOSwgMjMxLCA4LCAzNCwgMjI5LCAxNzgsIDgsIDM0LCAyMzQsIDE4OCwgMjMyLCAyMDIsIDEsIDI1MiwgMTk5LCAKKyAgICAyMzIsIDIwMiwgMSwgMTkxLCAyMzIsIDIwMiwgMSwgMjI1LCAxNTAsIDIzMiwgMjAyLCAxLCAyNDgsIDIyOSwgMjMyLCAyMDIsIAorICAgIDEsIDIxNywgMTA2LCAyMzIsIDIwMiwgMSwgMjE2LCAyMDksIDIzMiwgMjAyLCAxLCAyNDMsIDE0MiwgMjMyLCAyMDIsIDEsIAorICAgIDE3NiwgMjMyLCAyMDIsIDEsIDIzNCwgMTM4LCAyMzIsIDIwMiwgMSwgMjM1LCAxNDcsIDIzMiwgMjAyLCAxLCAyNTEsIDQxLCAKKyAgICAyMzIsIDIwMiwgMSwgMjUwLCAxNjUsIDIzMiwgMjAyLCAxLCAyNDYsIDQ2LCAyMzIsIDIwMiwgMSwgMjE1LCAxODQsIDIzMiwgCisgICAgMjAyLCAxLCAyMTUsIDE3NiwgMjMyLCAyMDIsIDEsIDE4NiwgMjMyLCAyMDIsIDEsIDE5OCwgMjMyLCAyMDIsIDEsIDIzMywgCisgICAgMTQxLCAyMzIsIDIwMiwgMSwgMjA2LCAyMzIsIDIwMiwgMSwgMjEwLCA4MiwgMjMyLCAyMDIsIDEsIDIxMCwgMTE2LCAyMzIsIAorICAgIDIwMiwgMSwgMjI5LCA4MiwgMjMyLCAyMDIsIDEsIDE2MiwgMjMyLCAyMDIsIDEsIDIxMSwgMTY1LCAyMzIsIDIwMiwgMSwgCisgICAgMjQxLCAxOTYsIDIzMiwgMjAyLCAxLCAyNDQsIDIwNCwgMjMyLCAyMDIsIDEsIDIxMiwgNjUsIDIzMiwgMjAyLCAxLCAyMjAsIAorICAgIDEwNCwgMjMyLCAyMDIsIDEsIDE5MiwgMjMyLCAyMDIsIDEsIDI0MywgMCwgMjMyLCAyMDIsIDEsIDYxLCAyMzIsIDIwMiwgMSwgCisgICAgMjU0LCAyNTIsIDIzMiwgMjAyLCAxLCA3NiwgMjMyLCAyMDIsIDEsIDI0NSwgNjMsIDIzMiwgMjAyLCAxLCA3NCwgMjMyLCAKKyAgICAyMDIsIDEsIDc4LCAyMzIsIDIwMiwgMSwgNjksIDIzMiwgMjAyLCAxLCAyMTQsIDIxNCwgMjMyLCAyMDIsIDEsIDIxNCwgCisgICAgMjA4LCAyMzIsIDIwMiwgMSwgMjI2LCAyMzgsIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDIxNiwgMTE4LCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMjksIDIzNCwgMjI1LCAxOSwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjQ5LCA4MCwgMjMyLCAKKyAgICAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjUxLCAyMTMsIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDE5OCwgMjMyLCAyMDIsIAorICAgIDEsIDEzOCwgMjMwLCAzNywgMjM1LCAxMjEsIDIzMiwgMjAyLCAyMjQsIDE0NCwgMjQ5LCAyMjcsIDIzMiwgMjAyLCAyMjQsIAorICAgIDE0NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0MSwgMywgMjQ1LCAyMTcsIDQxLCAzLCAyNDUsIDIxMywgNDEsIDMsIDI0MSwgCisgICAgMjI3LCA0MSwgMywgMjEyLCAxNywgNDEsIDMsIDIxMiwgMTYsIDQxLCAzLCAyMjUsIDIxNCwgNDEsIDMsIDI1MiwgMjEsIDQxLCAKKyAgICAzLCAyNTIsIDc0LCA0MSwgMywgMjMxLCAxMjEsIDQxLCAzLCAyMzMsIDI1MywgNDEsIDMsIDIzMSwgMTEsIDQxLCAzLCAyNDMsIAorICAgIDgyLCA0MSwgMywgMjQ0LCAxNTUsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIDMsIDIxNywgMTIsIDQxLCAzLCAyMTYsIDE5NSwgCisgICAgNDEsIDMsIDI0OCwgMjQsIDQxLCAzLCAyNDgsIDIxLCA0MSwgMywgMjMzLCA1NiwgNDEsIDMsIDIyMywgMTExLCA0MSwgMywgCisgICAgMjQ4LCA4NSwgNDEsIDMsIDIyOSwgMTQ0LCA0MSwgMywgMjIxLCAxNzIsIDQxLCAzLCAyMjAsIDYzLCA0MSwgMywgMjEwLCAKKyAgICA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE5MCwgNDEsIDMsIDIzNSwgMTMwLCA0MSwgMywgMjI4LCAxODEsIAorICAgIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODcsIDQxLCAzLCAyMjksIDU2LCA0MSwgMywgMjQzLCA2MiwgNDEsIDMsIAorICAgIDIzMSwgODUsIDQxLCAzLCAyMjksIDEwOCwgNDEsIDMsIDIyNywgMTU5LCA0MSwgMywgNzQsIDQxLCAzLCAyMzYsIDYsIDQxLCAKKyAgICAzLCAyNDEsIDE4NywgNDEsIDMsIDI0MSwgMTY3LCA0MSwgMywgMjExLCAyNTAsIDQxLCAzLCAyMTEsIDI0MSwgNDEsIDMsIAorICAgIDIyNSwgMTExLCA0MSwgMywgMjUyLCAxOSwgNDEsIDMsIDI1MiwgMTQsIDQxLCAzLCAyMzEsIDExNCwgNDEsIDMsIDIzMywgCisgICAgMjUwLCA0MSwgMywgMjMxLCA4LCA0MSwgMywgMjQzLCA3OCwgNDEsIDMsIDI0NCwgMTI5LCA0MSwgMywgMjEzLCAxNzYsIDQxLCAKKyAgICAzLCAyMTYsIDExOCwgNDEsIDMsIDIxNiwgMTc2LCA0MSwgMywgMjQ4LCAxNiwgNDEsIDMsIDI0OCwgMjAsIDQxLCAzLCAyMzIsIAorICAgIDI0NywgNDEsIDMsIDIyMywgMzgsIDQxLCAzLCAyNDgsIDExLCA0MSwgMywgMjI5LCAxMzgsIDQxLCAzLCAyMTksIDE5MywgCisgICAgNDEsIDMsIDIyMCwgMzQsIDQxLCAzLCAyMTAsIDQ0LCA0MSwgMywgMjEwLCA2OSwgNDEsIDMsIDI1MCwgNTksIDQxLCAzLCAKKyAgICAyMzUsIDExNCwgNDEsIDMsIDIyOCwgMTc0LCA0MSwgMywgMjExLCA4LCA0MSwgMywgMjM0LCA5OCwgNDEsIDMsIDIyOSwgNDgsIAorICAgIDQxLCAzLCAyNDIsIDIyMSwgNDEsIDMsIDIzMCwgMjM1LCA0MSwgMywgMjI4LCAyMzgsIDQxLCAzLCAyMjcsIDE1MiwgNDEsIAorICAgIDMsIDYxLCA0MSwgMywgMjU0LCAxMzEsIDQxLCAzLCAyMjksIDc3LCA0MSwgMywgMTYyLCA0MSwgMywgMjQyLCAyNSwgNDEsIAorICAgIDMsIDIxMiwgNjUsIDQxLCAzLCAyMTIsIDU1LCA0MSwgMywgMTkxLCA0MSwgMywgMjUyLCAyNiwgNDEsIDMsIDI1MiwgMTk5LCAKKyAgICA0MSwgMywgMjMxLCAxMjksIDQxLCAzLCAyMzQsIDEsIDQxLCAzLCAyMzQsIDAsIDQxLCAzLCAyMzEsIDE1LCA0MSwgMywgCisgICAgMjQzLCA4NiwgNDEsIDMsIDI0NCwgMjA0LCA0MSwgMywgMjE0LCAyNywgNDEsIDMsIDIxNywgMTA2LCA0MSwgMywgMjE2LCAKKyAgICAyMDksIDQxLCAzLCAyNDgsIDMzLCA0MSwgMywgMjQ4LCAyMywgNDEsIDMsIDIzMywgMTQxLCA0MSwgMywgMjA1LCA0MSwgMywgCisgICAgMjQ4LCAyMjksIDQxLCAzLCAyMjksIDE1MywgNDEsIDMsIDIwNiwgNDEsIDMsIDIyMCwgMTA0LCA0MSwgMywgMjEwLCAxMTYsIAorICAgIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCA0MSwgNDEsIDMsIDIzNSwgMTQ3LCA0MSwgMywgMjI4LCAxOTAsIDQxLCAzLCAKKyAgICAxOTIsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDI0MCwgNDEsIDMsIDIyOSwgNjEsIDQxLCAzLCAyNDMsIDE0MiwgNDEsIDMsIAorICAgIDE4NiwgNDEsIDMsIDE5OCwgNDEsIDMsIDIyNywgMTY5LCA0MSwgMywgMjI2LCAxODcsIDQxLCAzLCAyMjYsIDE4MywgNDEsIAorICAgIDMsIDI0MSwgNjAsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgMjExLCA0MSwgMywgMjI0LCAyNTIsIDQxLCAzLCAKKyAgICAyNTIsIDE3LCA0MSwgMywgMjUxLCAyMDEsIDQxLCAzLCAyMzEsIDEwOSwgNDEsIDMsIDIzMywgMjQ4LCA0MSwgMywgMjMxLCAKKyAgICA0LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIDI0NCwgNDIsIDQxLCAzLCAyMTMsIDEyNywgNDEsIDMsIDIxNiwgMTgsIDQxLCAKKyAgICAzLCAyMTYsIDE1NCwgNDEsIDMsIDI0OCwgMTQsIDQxLCAzLCAyNDgsIDE4LCA0MSwgMywgMjMyLCAxMzMsIDQxLCAzLCAyMjIsIAorICAgIDE5OSwgNDEsIDMsIDI0NywgMTMzLCA0MSwgMywgMjI5LCAxMjUsIDQxLCAzLCAyMTksIDQyLCA0MSwgMywgMjIwLCAzLCA0MSwgCisgICAgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIDE4MiwgNDEsIDMsIDIzNSwgNjUsIDQxLCAzLCAyMjgsIAorICAgIDE2NCwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxNiwgNDEsIDMsIDIyOSwgNDYsIDQxLCAzLCAyNDIsIDE3MSwgCisgICAgNDEsIDMsIDIzMCwgMTM3LCA0MSwgMywgMjI4LCA2OSwgNDEsIDMsIDIyNywgMTM2LCA0MSwgMywgNjksIDQxLCAzLCAyMTQsIAorICAgIDE5MCwgNDEsIDMsIDI0MCwgMjI5LCA0MSwgMywgMjQwLCAyMTksIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCAKKyAgICA0MSwgMywgMjI0LCAxNTMsIDQxLCAzLCAyNTIsIDE2LCA0MSwgMywgMjUxLCAxMzMsIDQxLCAzLCAyMzEsIDEwOCwgNDEsIDMsIAorICAgIDIzMywgMjQ2LCA0MSwgMywgMjMxLCAzLCA0MSwgMywgMjQzLCA3MywgNDEsIDMsIDI0MywgMjQxLCA0MSwgMywgMjEyLCAKKyAgICAxMTYsIDQxLCAzLCAyMTUsIDExOSwgNDEsIDMsIDIxNiwgMTM3LCA0MSwgMywgMjQ4LCAxMiwgNDEsIDMsIDI0OCwgMTcsIAorICAgIDQxLCAzLCAyMzIsIDEwMywgNDEsIDMsIDIyMiwgMTQyLCA0MSwgMywgMjQ2LCA4NiwgNDEsIDMsIDIyOSwgMTIwLCA0MSwgMywgCisgICAgMjE4LCA4NCwgNDEsIDMsIDIxOSwgMjI3LCA0MSwgMywgMjEwLCAxMywgNDEsIDMsIDIxMCwgNjIsIDQxLCAzLCAyNDksIAorICAgIDEyMCwgNDEsIDMsIDIzNSwgNTcsIDQxLCAzLCAyMjgsIDE2MCwgNDEsIDMsIDIxMCwgMjEyLCA0MSwgMywgMjMzLCAyMjMsIAorICAgIDQxLCAzLCAyMjksIDQ1LCA0MSwgMywgMjQyLCAxMjAsIDQxLCAzLCAyMzAsIDEwNywgNDEsIDMsIDIyNywgMjQyLCA0MSwgMywgCisgICAgMjI3LCAxMzIsIDQxLCAzLCA3OCwgNDEsIDMsIDIyNiwgMjAwLCA0MSwgMywgMjI5LCA1LCA0MSwgMywgMjQxLCA3NSwgNDEsIAorICAgIDMsIDI0MSwgNjMsIDQxLCAzLCAyMTEsIDIyNywgNDEsIDMsIDIxMSwgMjE2LCA0MSwgMywgMjI1LCAxOSwgNDEsIDMsIDI1MiwgCisgICAgMTgsIDQxLCAzLCAyNTEsIDIxMywgNDEsIDMsIDIzMSwgMTEwLCA0MSwgMywgMjMzLCAyNDksIDQxLCAzLCAyMzEsIDYsIDQxLCAKKyAgICAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NSwgNDEsIDMsIDI0NCwgNTEsIDQxLCAzLCAyMTMsIDEzOCwgNDEsIDMsIDExMiwgCisgICAgNDEsIDMsIDIxNiwgMTU3LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDI0OCwgMTksIDQxLCAzLCAyMzIsIDE2MiwgNDEsIDMsIAorICAgIDIyMiwgMjEzLCA0MSwgMywgMjQ3LCAxNTMsIDQxLCAzLCAyMjksIDEyOSwgNDEsIDMsIDIxOSwgNjAsIDQxLCAzLCAyMjAsIAorICAgIDksIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgNDEsIDMsIDI0OSwgMjQ2LCA0MSwgMywgMjM1LCA3NCwgNDEsIAorICAgIDMsIDIyOCwgMTY1LCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAyMzQsIDM0LCA0MSwgMywgMjI5LCA0NywgNDEsIDMsIDI0MiwgCisgICAgMTgxLCA0MSwgMywgMjMwLCAxNjYsIDQxLCAzLCAyMjgsIDc5LCA0MSwgMywgMjI3LCAxMzgsIDQxLCAzLCA3NiwgNDEsIDMsIAorICAgIDI0NSwgMTU4LCA0MSwgMywgMjI5LCA2NiwgNDEsIDMsIDI0MSwgMjQ1LCA0MSwgMywgMjQxLCAyMTYsIDQxLCAzLCAyMTIsIAorICAgIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgMjI0LCA0MSwgMywgMjUyLCAyMiwgNDEsIDMsIDI1MiwgODMsIDQxLCAKKyAgICAzLCAyMzEsIDEyMiwgNDEsIDMsIDIzMywgMjU0LCA0MSwgMywgMjMzLCAyNTIsIDQxLCAzLCAyMzEsIDEyLCA0MSwgMywgCisgICAgMjQzLCA4MywgNDEsIDMsIDI0MywgODEsIDQxLCAzLCAyNDQsIDE2MiwgNDEsIDMsIDIxMywgMjU1LCA0MSwgMywgMjE3LCAKKyAgICAyMywgNDEsIDMsIDIxNiwgMTk2LCA0MSwgMywgMjQ4LCAyNSwgNDEsIDMsIDI0OCwgMjIsIDQxLCAzLCAyMzMsIDY0LCA0MSwgCisgICAgMywgMjIzLCAxMzEsIDQxLCAzLCAyNDgsIDk4LCA0MSwgMywgMjI5LCAxNDUsIDQxLCAzLCAyMjEsIDE4MywgNDEsIDMsIAorICAgIDIyMCwgNjUsIDQxLCAzLCAyMTAsIDk0LCA0MSwgMywgMjEwLCA3NCwgNDEsIDMsIDI1MCwgMTk4LCA0MSwgMywgMjM1LCAKKyAgICAxMzIsIDQxLCAzLCAyMjgsIDE4MywgNDEsIDMsIDIxMSwgNDcsIDQxLCAzLCAyMzQsIDE4OCwgNDEsIDMsIDIyOSwgNTcsIAorICAgIDQxLCAzLCAyMjksIDUzLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNTgsIDQxLCAzLCAyMzEsIDk2LCA0MSwgMywgCisgICAgMjI5LCAxMTIsIDQxLCAzLCAyMjcsIDE2MCwgNDEsIDMsIDIyOSwgODQsIDQxLCAzLCAyMzMsIDI4LCA0MSwgMjQ5LCAyMjcsIAorICAgIDQxLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAyMjQsIDE2LCA3OSwgNDEsIDMsIDIyOSwgMTI4LCAyNDQsIDIwNCwgNDEsIAorICAgIDMsIDIyOSwgMTI4LCAxNzYsIDQxLCAzLCAyMjksIDEyOCwgMjE5LCA0MiwgNDEsIDE2LCAyNDQsIDE1MiwgNDEsIDE2LCAKKyAgICAyMzQsIDE4NiwgNDEsIDE2LCAyMTYsIDgyLCA0MSwgMTYsIDIyOCwgMjEzLCA0MSwgMTYsIDI1MiwgMTU1LCA0MSwgMTYsIAorICAgIDI0NCwgMjAzLCA0MSwgMTYsIDIxNywgMTAyLCA0MSwgMTYsIDI0OCwgMTg0LCA0MSwgMTYsIDI0NywgMTMyLCA0MSwgMTYsIAorICAgIDIzMywgMjEyLCA0MSwgMTYsIDIxNiwgMjIsIDQxLCAxNiwgMjQ3LCAxNTIsIDQxLCAxNiwgMjM1LCA2NiwgNDEsIDIxLCAKKyAgICAyMTAsIDg2LCA0MSwgMjEsIDExMSwgNDEsIDIxLCAxMDUsIDQxLCAyMSwgMTU4LCA0MSwgMjEsIDE2MSwgNDEsIDIxLCAxOTAsIAorICAgIDQxLCAyMSwgMTk1LCA0MSwgMjEsIDE5OSwgNDEsIDIxLCAxOTYsIDQxLCAyMSwgMjAxLCA0MSwgMywgMjI5LCAxMjgsIDE4NiwgCisgICAgNDEsIDMsIDIyOSwgMTI4LCAyNDcsIDE1MywgMzMsIDYsIDEsIDIxMCwgOTAsIDMzLCA0LCAxLCAyMTAsIDkwLCAzMywgNiwgCisgICAgMSwgMjQ2LCA0MiwgMzMsIDQsIDEsIDI0NiwgNDIsIDMzLCA2LCAxLCAyMjMsIDUyLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjIzLCAKKyAgICA1MiwgMjQ2LCA0NCwgMzMsIDYsIDEsIDIzNSwgMTkyLCAzMywgNCwgMSwgMjM1LCAxOTIsIDMzLCA2LCAxLCAyNDcsIDE2OSwgCisgICAgMzMsIDQsIDEsIDI0NywgMTY5LCAzMywgNiwgMSwgMjMwLCAxNDUsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjMwLCAxNDUsIAorICAgIDIxNCwgMjA1LCAzMywgNiwgMSwgMjUxLCAxNDQsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjUxLCAxNDQsIDIyNiwgMjA1LCAzMywgCisgICAgNiwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDQsIDEsIDIyOSwgOTIsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAKKyAgICAyNTIsIDE5MywgMjExLCAzMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNiwgMSwgCisgICAgMjM1LCAxOTAsIDIxMSwgNTksIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDYsIDEsIDIyMywgNTIsIDIxMCwgCisgICAgMjEyLCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCAyMTIsIDMzLCA2LCAxLCAyMzUsIDE5MCwgNjEsIDMzLCA0LCAxLCAyMzUsIAorICAgIDE5MCwgNjEsIDMzLCA2LCAxLCAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MCwgOCwgMjMyLCAKKyAgICAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUxLCAyMjIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyMjIsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIAorICAgIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjEwLCAyNDYsIDMzLCA0LCAxLCAyMTAsIDI0NiwgMzMsIAorICAgIDYsIDEsIDIyMywgNTIsIDIxNSwgMTc5LCAzMywgNCwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA2LCAxLCAyMTksIDU0LCAKKyAgICAyNDgsIDk4LCAzMywgNCwgMSwgMjE5LCA1NCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTgyLCAzMywgNCwgCisgICAgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA2LCAxLCAyMTksIDU0LCAyNDUsIDE2NywgMzMsIDQsIDEsIDIxOSwgNTQsIAorICAgIDI0NSwgMTY3LCAzMywgNiwgMSwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgMjMwLCAxNDksIDc4LCAzMywgNiwgMSwgMjUxLCAKKyAgICAyNDgsIDc4LCAzMywgNCwgMSwgMjUxLCAyNDgsIDc4LCAzMywgNiwgMSwgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDQsIDEsIAorICAgIDUyLCAyMzAsIDE0OSwgNzgsIDMzLCAxLCAyMzAsIDkxLCA3OCwgMzgsIDMzLCAyMTIsIDEwMCwgMzgsIDMzLCAyMTYsIDI0OSwgCisgICAgMjMwLCAxOTYsIDUwLCAzOCwgMzMsIDI0MCwgMjE4LCAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjE2LCAxNDksIDIzMCwgMTk2LCAKKyAgICA1MCwgMjE5LCA5NSwgMjUzLCAyMjQsIDM4LCAzMywgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDM4LCAzMywgMSwgNzQsIDM4LCAKKyAgICAzMywgMSwgMjExLCA4LCAzOCwgMzMsIDEsIDY5LCAzOCwgMzMsIDEsIDI0MiwgMTAsIDUwLCAzOCwgMzMsIDEsIDIxMSwgMjcsIAorICAgIDM4LCAzMywgMSwgMjE5LCA1NCwgNTAsIDM4LCAzMywgMSwgMjI2LCAyMDUsIDM4LCAzMywgMjM0LCAxOTgsIDM4LCAzMywgCisgICAgMjI1LCAyMzEsIDMzLCAyMzQsIDE5OCwgMzMsIDIyNSwgMjMxLCAzMywgNiwgMSwgMjQ2LCA1NCwgMzMsIDQsIDEsIDI0NiwgCisgICAgNTQsIDMzLCA2LCAxLCAyNDYsIDM1LCAzMywgNCwgMSwgMjQ2LCAzNSwgMzMsIDYsIDEsIDIxMCwgNTIsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDUyLCAzMywgNiwgMSwgMjUwLCAyMTQsIDMzLCA0LCAxLCAyNTAsIDIxNCwgMzMsIDYsIDEsIDI0NiwgMzMsIDMzLCAKKyAgICA0LCAxLCAyNDYsIDMzLCAzMywgNiwgMSwgMjE3LCAyNCwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIxNywgMjQsIDIsIAorICAgIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTUsIDc4LCAzMywgNCwgMSwgMjE1LCA3OCwgMzMsIDYsIDEsIDIxNSwgMTYxLCAKKyAgICAzMywgNCwgMSwgMjE1LCAxNjEsIDMzLCA2LCAxLCAyMTUsIDE2NSwgMzMsIDQsIDEsIDIxNSwgMTY1LCAzMywgNiwgMSwgCisgICAgMjE3LCAyOSwgMzMsIDQsIDEsIDIxNywgMjksIDMzLCA2LCAxLCAyNDAsIDIwNSwgMzMsIDQsIDEsIDI0MCwgMjA1LCAzMywgCisgICAgNiwgMSwgMjE5LCAyMDgsIDMzLCA0LCAxLCAyMTksIDIwOCwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNzYsIDIwLCAxLCA2MSwgCisgICAgMjAsIDEsIDE3NiwgMjAsIDEsIDY5LCAyMCwgMSwgMjMzLCAyMjMsIDIwLCAxLCAyNDUsIDIxNywgMjAsIDEsIDIyMywgMTExLCAKKyAgICAyMCwgMSwgMjE3LCA4NywgMjAsIDEsIDc4LCAyMCwgMSwgMjI3LCAxNTIsIDIwLCAxLCA3NCwgMjAsIDEsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMTkxLCAyMCwgMSwgMjIyLCAyNDIsIDIwLCAxLCAyMjMsIDMyLCAyMCwgMSwgMjMzLCA1NSwgMjAsIDEsIDIzMSwgCisgICAgODQsIDIwLCAxLCAyMTcsIDEwMiwgMjAsIDEsIDIyOSwgMTUxLCAyMCwgMSwgMjI4LCAxODgsIDIwLCAxLCAxOTQsIDIwLCAxLCAKKyAgICAyMTgsIDUsIDIwLCAxLCAyMzAsIDEwNywgMjAsIDEsIDIyMCwgMjksIDIwLCAxLCAyMTksIDE5MywgMjAsIDEsIDIyMCwgMzksIAorICAgIDIwLCAxLCAyMjAsIDEyNSwgMjAsIDEsIDIzMywgMTYxLCAyMCwgMSwgMjM0LCAxNjIsIDIwLCAxLCAyMjcsIDIxMywgMjAsIAorICAgIDEsIDIyNywgMjQyLCAyMCwgMSwgMjI4LCAxNTksIDIwLCAxLCAyMTAsIDIyNiwgMjAsIDEsIDIxOSwgMjI3LCAyMCwgMSwgCisgICAgMjEwLCAxODcsIDIwLCAxLCAxOTIsIDIwLCAxLCAyMjgsIDE0LCAyMCwgMSwgMjM0LCAxNDgsIDIwLCAxLCAyMjUsIDE1NCwgCisgICAgMjAsIDEsIDIyOCwgMTgxLCAyMCwgMSwgMjI3LCAyNTEsIDIwLCAxLCAyMjQsIDE0NywgMjAsIDEsIDIxMSwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAyMTQsIDIwLCAxLCAyNDQsIDE1NSwgMjAsIDEsIDIyMiwgMTQyLCAyMCwgMSwgMjMyLCAxMDMsIDIwLCAxLCAKKyAgICAyMzAsIDIzNSwgMjAsIDEsIDIyOCwgMjM4LCAyMCwgMSwgMjIzLCA1NCwgMjAsIDEsIDIyMywgMTc0LCAyMCwgMSwgMjM0LCAKKyAgICAxNzEsIDIwLCAxLCAyMjksIDEyLCAyMCwgMSwgMjI5LCA2MSwgMjAsIDEsIDIyOSwgODIsIDIwLCAxLCAyMjAsIDksIDIwLCAKKyAgICAxLCAyMjQsIDE1MCwgMjAsIDEsIDI0MywgMjQxLCAyMCwgMSwgMjQ0LCA0NSwgMjAsIDEsIDIxMiwgNjUsIDIwLCAxLCAxOTgsIAorICAgIDIwLCAxLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgMTExLCAyMCwgMSwgMjMyLCAxMjUsIDIwLCAxLCAyMzQsIDM0LCAyMCwgMSwgCisgICAgMjMxLCAxMTksIDIwLCAxLCAyMjMsIDg2LCAyMCwgMSwgMjMxLCA2MywgMjAsIDEsIDE4NiwgMjAsIDEsIDIxNiwgMTE4LCAKKyAgICAyMCwgMSwgMjM0LCA5OCwgMjAsIDEsIDIzMCwgMTY2LCAyMCwgMSwgMjMxLCAxMjcsIDIwLCAxLCAyMTYsIDIzMSwgMjAsIDEsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIxNiwgMjQ4LCAyMCwgMSwgMjI3LCAyNDMsIDIwLCAxLCAyMjEsIDI1MywgMjAsIDEsIDI0NCwgCisgICAgMjAwLCAyMCwgMSwgMjM0LCAzLCAyMCwgMSwgMjM0LCAzMCwgMjAsIDM4LCAxNjQsIDIzNCwgMTEsIDIwLCAzOCwgMTY0LCAKKyAgICAyMTUsIDExMSwgMjAsIDIyOCwgMTg3LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMCwgMjQ5LCAyMzQsIDIwLCAyNDksIAorICAgIDIyNywgMjAsIDIyMCwgMTUyLCAyMCwgMjI0LCAxNiwgNzksIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTAsIDI1NCwgMjI1LCAKKyAgICA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyNSwgNjQsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTAsIAorICAgIDI1NCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMCwgODYsIDU4LCAxLCAyNTAsIDEwNCwgCisgICAgMTM4LCAyMTAsIDI1NCwgMjI0LCAzMywgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyNCwgMzMsIDU4LCAxLCAKKyAgICAyNTAsIDEwNCwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDIsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjIsIAorICAgIDE0MiwgNTgsIDEsIDI0NSwgMjgsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMjYsIDEzOCwgMTMwLCAKKyAgICA1OCwgMSwgMjMwLCAyMzAsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMjQ1LCAyNywgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgCisgICAgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIAorICAgIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIAorICAgIDI3LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDEyNSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIzMCwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAKKyAgICAxMjEsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCA1OSwgNjcsIAorICAgIDEzMCwgNTgsIDEsIDU5LCAyMTksIDk3LCA1OCwgMSwgNTksIDIwMywgMTMwLCA1OCwgMSwgMjMyLCAxMTQsIDQ0LCAyNDksIAorICAgIDE2OSwgMjU0LCAxMTcsIDU4LCAxLCAyMjMsIDE2MCwgMTIwLCA3NSwgNTgsIDEsIDIyMywgMTYwLCAxMjQsIDc1LCA1OCwgMSwgCisgICAgMjIzLCAxNjAsIDI0NSwgMzksIDc5LCA1OCwgMSwgMjIzLCAxNjAsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIAorICAgIDEyMSwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgMjE4LCAxMTMsIDIyLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAKKyAgICAyMTgsIDExMywgMjIsIDEyMSwgMjE2LCAzMSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMTc5LCA3LCA0LCAxLCAyNDUsIAorICAgIDIwNywgMjU0LCAxNzksIDcsIDYsIDEsIDI0NSwgMjA3LCAyNTQsIDIwNSwgNywgNCwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCAKKyAgICA3LCA2LCAxLCAyNDEsIDIxNCwgNywgNCwgMSwgMjQxLCAyMTQsIDcsIDYsIDEsIDIxNSwgNDAsIDcsIDQsIDEsIDIxNSwgNDAsIAorICAgIDcsIDYsIDEsIDIxNSwgMjMwLCA3LCA0LCAxLCAyMTUsIDIzMCwgNywgNiwgMSwgMjQ5LCAxMTgsIDcsIDQsIDEsIDI0OSwgCisgICAgMTE4LCA3LCA2LCAxLCAyNDksIDExOSwgMiwgMjQ5LCAyMjcsIDcsIDQsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgCisgICAgMSwgNCwgNiwgMjQ1LCAxNCwgNywgMSwgNCwgNiwgMjIyLCA5MywgNywgNiwgMSwgMjU1LCA4MiwgNywgNCwgMSwgMjU1LCAKKyAgICA4MiwgNywgNiwgMSwgMjU0LCA4MSwgNywgNCwgMSwgMjU0LCA4MSwgNywgNiwgMSwgMjUzLCAyMDAsIDcsIDQsIDEsIDI1MywgCisgICAgMjAwLCA3LCA2LCAxLCAyNTMsIDE4NCwgNywgNCwgMSwgMjUzLCAxODQsIDcsIDYsIDEsIDI1MywgMTg1LCAyLCAyMDMsIAorICAgIDEzMCwgNywgNCwgMSwgMjUzLCAxODUsIDIsIDIwMywgMTMwLCA3LCA2LCAxLCAyNTMsIDE3NSwgNywgNCwgMSwgMjUzLCAKKyAgICAxNzUsIDcsIDYsIDEsIDIyMywgNTIsIDI1MSwgNzUsIDIsIDI0NywgMTI4LCA3LCA0LCAxLCAyMjMsIDUyLCAyNTEsIDc1LCAKKyAgICAyLCAyNDcsIDEyOCwgNywgNiwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAyMzUsIDMwLCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMzUsIAorICAgIDMwLCAyLCAyMTgsIDEwNSwgMjIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCAKKyAgICA3LCA5MSwgNywgNiwgMSwgMjUxLCAxNDMsIDE1NiwgNywgNCwgMSwgMjUxLCAxNDMsIDE1NiwgNywgNiwgMSwgMjMzLCAxNTUsIAorICAgIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIDIwMCwgMjE4LCAKKyAgICAxMDUsIDIyNiwgMTI0LCA3LCA0LCAxLCAxNDQsIDIsIDIwMCwgMjE4LCAxMDUsIDIyNiwgMTI0LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDIzMiwgMTI5LCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTI5LCA3LCA2LCAxLCAyMjYsIDE4NywgNywgNCwgMSwgMjI2LCAKKyAgICAxODcsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDQsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA0LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgMjQ0LCA2MSwgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMjMxLCAyMTcsIDc4LCA3LCA0LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDYsIDEsIDIyNCwgMTAwLCAyLCAyMTgsIDEwNSwgMjE2LCAKKyAgICAxNDAsIDI0OCwgNDcsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIAorICAgIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjIzLCAKKyAgICAyMjcsIDIyMiwgMTg4LCA3LCA0LCAxLCAyMjMsIDIyNywgMjIyLCAxODgsIDcsIDYsIDEsIDIyMiwgMTMyLCAyMjIsIDE4OCwgCisgICAgNywgNCwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIxMiwgMTA2LCA3LCA0LCAxLCAyMTIsIDEwNiwgNywgNiwgMSwgCisgICAgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA0LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjE2LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAyMTYsIDE1MywgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAKKyAgICAyNDgsIDQ3LCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMTMsIAorICAgIDI0NSwgNywgNCwgMSwgMjEzLCAyNDUsIDcsIDYsIDEsIDI0NSwgNzMsIDcsIDQsIDEsIDI0NSwgNzMsIDcsIDYsIDEsIDIzNSwgCisgICAgMTc4LCA3LCA0LCAxLCAyMzUsIDE3OCwgNywgNiwgMSwgMjQ5LCAyMTUsIDcsIDQsIDEsIDI0OSwgMjE1LCA1OCwgMSwgMjE0LCAKKyAgICAxMzMsIDcsIDQsIDEsIDI0NiwgNzcsIDcsIDQsIDEsIDIzMiwgODksIDcsIDQsIDEsIDIzMCwgODUsIDcsIDQsIDEsIDIyNywgCisgICAgMjA1LCA3LCA0LCAxLCAyMjIsIDEzMSwgNywgMSwgNCwgNiwgMjIyLCAxMzEsIDcsIDQsIDEsIDIxNSwgMTA5LCA3LCA0LCAxLCAKKyAgICAyMTQsIDE5NywgNywgNiwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCA3LCA2LCAKKyAgICAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0NSwgMTQsIDcsIDYsIDEsIDIzNSwgMjIwLCAyNDMsIAorICAgIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgCisgICAgMjQzLCAyMDksIDcsIDYsIDEsIDIxNSwgOTQsIDE1NiwgNywgNCwgMSwgMjE1LCA5NCwgMTU2LCA3LCA2LCAxLCAyMzUsIAorICAgIDIyMCwgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMTUzLCA3LCA2LCAxLCAyMzUsIDIyMCwgMjIyLCA5MywgNywgNCwgMSwgCisgICAgMjM1LCAyMjAsIDIyMiwgOTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMTcsIDE1MywgNywgNCwgMSwgMjM1LCAyMjAsIDIxNywgCisgICAgMTUzLCA1OCwgMSwgMTIxLCAyNTAsIDM5LCAyNTUsIDIzLCA1OCwgMSwgMjQ5LCAyMzQsIDU4LCAxLCAyMTksIDI1MywgMjQ1LCAKKyAgICAxMDYsIDUwLCA3LCA2LCAxLCAyMjIsIDEsIDcsIDQsIDEsIDIyMiwgMSwgNywgNiwgMSwgMjE1LCA5NCwgMjQyLCA2NywgNywgCisgICAgNCwgMSwgMjMzLCAxNTUsIDIsIDIyMywgNTgsIDI0MSwgNTksIDIyLCAyNTIsIDQ5LCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxMzAsIDcsIDQsIDEsIAorICAgIDI1MSwgNzUsIDIsIDEzMCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMTAzLCA1OCwgMSwgNiwgMjQyLCA2OCwgMiwgOTEsIDU4LCAxLCAKKyAgICA0LCAyNywgMjI2LCAyMzgsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE5NCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDI0NSwgCisgICAgMTQsIDcsIDI0NSwgMTExLCAxLCAyMjMsIDUyLCAyMjYsIDEwOSwgNywgMjQ1LCAxMTEsIDEsIDIzNSwgMjAwLCAxOTQsIDcsIAorICAgIDI0NSwgMTExLCAxLCAyNDAsIDE2MSwgMjMyLCAxMzUsIDcsIDI0NSwgMTExLCAxLCAyNTQsIDMxLCAxOTQsIDIxNywgMjMxLCAKKyAgICAyMjksIDIxOSwgMSwgNjEsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjQ2LCAKKyAgICA1NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NiwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCA3OCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDIsIDQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM0LCAKKyAgICAzNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIDExMSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDIsIDE4MSwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDIsIDIzMSwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNTQsIDgzLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0OSwgMjQ2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI1MCwgOTQsIDIxNywgMjMxLCAKKyAgICAyMjksIDIxOSwgMSwgMjM1LCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzUsIDExNSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCAyMTUsIDEzNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTUsIDE0MCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNDgsIDExMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDEyMiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAxMTIsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE2LCAxNTcsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQ3LCAxNTMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ4LCAxNSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjgsIDc5LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIyNSwgMTksIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjI1LCAxMjQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgCisgICAgMjUxLCAyMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUyLCAxOCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzAsIAorICAgIDE2NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjIsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzIsIDE2MiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjIsIDE2NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTksIDYwLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0MSwgNzUsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDYxLCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDI1LCA1LCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjksIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIAorICAgIDc2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCAyMjYsIDE4NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAKKyAgICAyMzEsIDE2MywgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAyMzEsIDE2MiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIAorICAgIDE1LCAyMzEsIDE2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAyMzEsIDE2MCwgMjI4LCA2MSwgMjM1LCAyNDcsIAorICAgIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjI4LCA2MSwgCisgICAgMjM1LCAyNDcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjE5LCAKKyAgICAxMTksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDI0NSwgMTk2LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAKKyAgICAxMCwgMTM0LCAyMTksIDExOCwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjUsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjI1LCA0MywgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjIsIDEyMCwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjQsIDI2LCAKKyAgICA3OSwgMjI1LCAxNDcsIDEsIDE3NiwgMjI1LCAxNDcsIDEsIDIzNCwgMTM4LCAyMjUsIDE0NywgMSwgMjQzLCAxNDIsIDIyNSwgCisgICAgMTQ3LCAxLCAyMjksIDgyLCAyMjUsIDE0NywgMSwgMjUxLCA0MSwgMjI1LCAxNDcsIDEsIDI1MCwgMTY1LCAyMjUsIDE0NywgCisgICAgMSwgMjM1LCAxNDcsIDIyNSwgMTQ3LCAxLCAyMjcsIDE2OSwgMjI1LCAxNDcsIDEsIDIxNywgMTA2LCAyMjUsIDE0NywgMSwgCisgICAgMjE2LCAyMDksIDIyNSwgMTQ3LCAxLCAyNDgsIDIyOSwgMjI1LCAxNDcsIDEsIDE5OCwgMjI1LCAxNDcsIDEsIDE5MSwgMjI1LCAKKyAgICAxNDcsIDEsIDIyNSwgMTUwLCAyMjUsIDE0NywgMSwgMjUyLCAxOTksIDIyNSwgMTQ3LCAxLCAxODYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTUsIDE4NCwgMjI1LCAxNDcsIDEsIDIxNSwgMTc2LCAyMjUsIDE0NywgMSwgMjQ2LCA0NiwgMjI1LCAxNDcsIDEsIDIxMiwgCisgICAgNjUsIDIyNSwgMTQ3LCAxLCAyMTAsIDgyLCAyMjUsIDE0NywgMSwgMjEwLCAxMTYsIDIyNSwgMTQ3LCAxLCA0LCA2MSwgMjI1LCAKKyAgICAxNDcsIDEsIDE5MiwgMjI1LCAxNDcsIDEsIDIwNSwgMjI1LCAxNDcsIDEsIDIzMywgMTQxLCAyMjUsIDE0NywgMSwgMjIwLCAKKyAgICAxMDQsIDIyNSwgMTQ3LCAxLCAyMDYsIDIyNSwgMTQ3LCAxLCAxNjIsIDIyNSwgMTQ3LCAxLCA2MSwgMjI1LCAxNDcsIDEsIAorICAgIDc0LCAyMjUsIDE0NywgMSwgNjksIDIyNSwgMTQ3LCAxLCA3NiwgMjI1LCAxNDcsIDEsIDc4LCAyMjUsIDE0NywgMSwgMjI0LCAKKyAgICA5MSwgMjI1LCAxNDcsIDEsIDIxMSwgMTY1LCAyMjUsIDE0NywgMSwgMjQ0LCAyMDQsIDIyNSwgMTQ3LCAxLCAyNDMsIDM2LCAKKyAgICAyMjUsIDE0NywgMSwgMjQ1LCAyMTcsIDIyNSwgMTQ3LCAyMTgsIDc0LCAxLCAyMTIsIDY1LCAyMjUsIDE0NywgMjE4LCA3NCwgCisgICAgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjE1LCAxNTcsIDIyNSwgMTQ3LCAxLCAyMTUsIDE0NSwgMjI1LCAxNDcsIDEsIDI0OCwgCisgICAgMTQzLCAyMjUsIDE0NywgMSwgMjI4LCAxMTUsIDIyNSwgMTQ3LCAxLCAyNTQsIDE0OSwgMTkyLCAyMjUsIDE0NywgMSwgMjEzLCAKKyAgICAxMzQsIDIyMCwgMTA0LCAyMjUsIDE0NywgMSwgMjEzLCAxMzUsIDE2MiwgMjI1LCAxNDcsIDEsIDI1MywgMjMxLCAyNDQsIAorICAgIDIwNCwgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIwNSwgMjI1LCAxNDcsIDIxOCwgMjYsIDEsIDIwNSwgMjI1LCAxNDcsIDEsIAorICAgIDI1MSwgNywgMjI1LCAxNDcsIDIxOSwgMTU3LCAyNDEsIDI0MywgNzksIDIyNSwgMTQ3LCA1MiwgMjQxLCAyNDMsIDc5LCAKKyAgICAyMjUsIDE0NywgMTY0LCAyMjAsIDk3LCAyMjUsIDE0NywgMTY0LCA1MiwgMjIwLCA5NywgMTc5LCA1LCAyNTQsIDgzLCAxNzksIAorICAgIDUsIDIxMywgMTQ3LCAxNzksIDEsIDYxLCAxNzksIDEsIDI1NSwgODIsIDE3OSwgMSwgNzQsIDE3OSwgMSwgMjM2LCA0MCwgCisgICAgMTc5LCAxLCA2OSwgMTc5LCAxLCAyMTQsIDExOCwgMTc5LCAxLCAxNDksIDE1MywgMTc5LCAxLCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNzksIDEsIDE0OSwgMTU2LCAxNzksIDEsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMSwgNzYsIDE3OSwgMSwgMjQ1LCAyMTcsIAorICAgIDE3OSwgMSwgMjU0LCAyMTAsIDE3OSwgMSwgNzgsIDE3OSwgMSwgMjI2LCAxODcsIDE3OSwgMSwgMjUzLCAyMDAsIDE3OSwgMSwgCisgICAgMTc2LCAxNzksIDEsIDIzNCwgMTM4LCAxNzksIDEsIDI0MywgMTQyLCAxNzksIDEsIDI0MywgMCwgMTc5LCAxLCAyMjksIDgyLCAKKyAgICAxNzksIDEsIDI1MSwgNDEsIDE3OSwgMSwgMjUwLCAxNjUsIDE3OSwgMSwgMjM1LCAxNDcsIDE3OSwgMSwgMjM1LCAxMjAsIAorICAgIDE3OSwgMSwgMjI3LCAxNjksIDE3OSwgMSwgMjE1LCAxNTcsIDE3OSwgMSwgMjE1LCAxNDUsIDE3OSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3OSwgMSwgMjQ4LCAxMjcsIDE3OSwgMSwgMjI4LCAxMTUsIDE3OSwgMSwgMjE3LCAxMDYsIDE3OSwgMSwgMjE2LCAyMDksIAorICAgIDE3OSwgMSwgMjQ4LCAyMjksIDE3OSwgMSwgMjQ4LCAzMywgMTc5LCAxLCAxOTgsIDE3OSwgMSwgMTkxLCAxNzksIDEsIDIyNSwgCisgICAgMTUwLCAxNzksIDEsIDI1MiwgMTk5LCAxNzksIDEsIDI1MiwgMjYsIDE3OSwgMSwgMTg2LCAxNzksIDEsIDE5MiwgMTc5LCAxLCAKKyAgICAyMDUsIDE3OSwgMSwgMjMzLCAxNDEsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwNCwgMTc5LCAxLCAyMTgsIAorICAgIDIyNSwgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTkwLCAxNzksIDExNywgNSwgMjQyLCA1MSwgCisgICAgMTc5LCAyNSwgNSwgMjU1LCA4MiwgMTc5LCAyNSwgNSwgNzQsIDE3OSwgMjUsIDUsIDIzNiwgNDAsIDE3OSwgMjUsIDUsIDY5LCAKKyAgICAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgCisgICAgNSwgMjQ1LCAyMTcsIDE3OSwgMjUsIDUsIDI1NCwgMjEwLCAxNzksIDI1LCA1LCA3OCwgMTc5LCAyNSwgNSwgMjI2LCAxODcsIAorICAgIDE3OSwgMjUsIDUsIDI1MywgMjAwLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTg2LCAxNzksIDUyLCAyNDgsIDE4NiwgCisgICAgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTExLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgMTc5LCAyMSwgMTYxLCAKKyAgICAxNzksIDIxLCAxOTAsIDE3OSwgMjEsIDE5NSwgMTc5LCAyMSwgMTk5LCAxNzksIDIxLCAxOTYsIDE3OSwgMjEsIDIwMSwgMzgsIAorICAgIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTExLCAzOCwgODQsIDIxLCAxMDUsIDM4LCA4NCwgMjEsIDE1OCwgMzgsIAorICAgIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxOTAsIDM4LCA4NCwgMjEsIDE5NSwgMzgsIDg0LCAyMSwgMTk5LCAzOCwgODQsIAorICAgIDIxLCAxOTYsIDM4LCA4NCwgMjEsIDIwMSwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA2OSwgMzgsIDg0LCAxLCAxNzYsIAorICAgIDM4LCA4NCwgMSwgMTk4LCAzOCwgODQsIDEsIDE5MSwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgMSwgMjEzLCAxNzYsIDM4LCAKKyAgICA4NCwgNSwgMjUzLCAxODMsIDg0LCA1LCAyMTksIDE5LCAyNTEsIDcsIDg0LCA1LCAyNTEsIDgsIDIxMywgMTUyLCA4NCwgNSwgCisgICAgNTIsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAyNTEsIDgsIDEwNSwgODQsIDUsIDI1MSwgOCwgMTU4LCA4NCwgNSwgMjUxLCAKKyAgICA4LCAyNTMsIDE4MywgODQsIDUsIDIyNCwgMTI3LCA4NCwgMjQzLCAxMDcsIDI0NCwgMTExLCA4NCwgMjUwLCAyNDYsIDg0LCAKKyAgICAyNDEsIDIzNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMjEwLCA4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTExLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE1OCwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMTYxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NSwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTYsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjEsIDIwMSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxNzYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjM0LCAKKyAgICAxMzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQzLCAxNDIsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI5LCA4MiwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjIwLCAxMDQsIDIzNCwgMTk0LCAKKyAgICAyMzIsIDI0OCwgMSwgMjEwLCAxMTYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI3LCAxNjksIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjE3LCAxMDYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQwLCAyMzMsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgCisgICAgMTk4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE5MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjUsIDE1MCwgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxLCAxODYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQ4LCAyMjksIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjUyLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjA1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE5MiwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzMsIDE0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMTIsIDY1LCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDIxNiwgMjA5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE2MiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTQsIDI3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI1MSwgNDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgCisgICAgNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI2LCAyMzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgNzQsIDIzNCwgMTk0LCAKKyAgICAyMzIsIDI0OCwgMSwgMjI2LCAxODcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDIxNCwgMjE0LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDI1LCA3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgNjksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDI0NSwgCisgICAgMjE3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA3OCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxMzgsIDIyNSwgMzMsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIwLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjUxLCAyMSwgMjI1LCAzMywgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCA1LCAyNDksIDg1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDIxOSwgMjAxLCAyMjMsIDk2LCAKKyAgICAxLCAxNzYsIDIyMywgOTYsIDEsIDI0MywgMTQyLCAyMjMsIDk2LCAxLCAyMjksIDgyLCAyMjMsIDk2LCAxLCAyMTcsIDEwNiwgCisgICAgMjIzLCA5NiwgMSwgMjQ4LCAyMjksIDIyMywgOTYsIDEsIDE5OCwgMjIzLCA5NiwgMSwgMTkxLCAyMjMsIDk2LCAxLCAyNTIsIAorICAgIDE5OSwgMjIzLCA5NiwgMSwgMTg2LCAyMjMsIDk2LCAxLCAyNTEsIDQxLCAyMjMsIDk2LCAxLCAyMzUsIDE0NywgMjIzLCA5NiwgCisgICAgMSwgMjI3LCAxNjksIDIyMywgOTYsIDEsIDIwNiwgMjIzLCA5NiwgMSwgMjA1LCAyMjMsIDk2LCAxLCAyMzMsIDE0MSwgMjIzLCAKKyAgICA5NiwgMSwgMTkyLCAyMjMsIDk2LCAxLCAyMTIsIDY1LCAyMjMsIDk2LCAxLCAxNjIsIDIyMywgOTYsIDEsIDIzMSwgMTI5LCAKKyAgICAyMjMsIDk2LCAxLCAyMjksIDYxLCAyMjMsIDk2LCAxLCAyMjksIDE1MywgMjIzLCA5NiwgMSwgMjI3LCAxMzksIDIyMywgOTYsIAorICAgIDEsIDYxLCAyMjMsIDk2LCAyNSwgNSwgNzQsIDIyMywgOTYsIDI1LCA1LCA2OSwgMjIzLCA5NiwgMjUsIDUsIDc2LCAyMjMsIAorICAgIDk2LCAyNSwgNSwgMjU0LCAyMTAsIDIyMywgOTYsIDI1LCA1LCA3OCwgMjIzLCA5NiwgMjUsIDUsIDI1MywgMjAwLCAyMjMsIAorICAgIDk2LCAyNSwgNSwgMjQ1LCA2MywgMjIzLCA5NiwgMjUsIDUsIDI0NSwgMjQxLCAyMjMsIDk2LCAxMTcsIDUsIDIyOSwgODQsIAorICAgIDIyMywgOTYsIDExNywgNSwgMjMwLCAzMCwgMjIzLCA5NiwgMTE3LCA1LCAxNTMsIDIyMywgOTYsIDExNywgNSwgMjQyLCA2NywgCisgICAgMjIzLCA5NiwgMjEzLCAxNTIsIDIyMywgOTYsIDIyMSwgMTc1LCA3OSwgMjQsIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjE2LCAKKyAgICA5NywgMjQsIDEwMCwgMjE2LCA5NSwgMjQsIDEwMCwgMjE2LCAxMDAsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAxMDAsIDIyMywgCisgICAgOCwgMjQsIDEwMCwgMjIzLCAzLCAyNCwgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMjEsIDI0LCAxMDAsIDIyMywgMTQsIAorICAgIDI0LCAxMDAsIDIyMywgNywgMjQsIDEwMCwgMjIzLCAyNiwgMjQsIDEwMCwgMjIzLCA5LCAyNCwgMTAwLCAyMjMsIDI4LCAyNCwgCisgICAgMTAwLCAyMjMsIDI1LCAyNCwgMTAwLCAyMzAsIDIxOCwgMjQsIDEwMCwgMjMwLCAyMDksIDI0LCAxMDAsIDIzMCwgMjEyLCAKKyAgICAyNCwgMTAwLCAyMjUsIDgzLCAyNCwgMTAwLCAyMjUsIDk0LCAyNCwgMTAwLCAyMjUsIDk1LCAyNCwgMTAwLCAyMTgsIDIwOSwgCisgICAgMjQsIDEwMCwgMjM2LCA1MywgMjQsIDEwMCwgMjM2LCA2MCwgMjQsIDEwMCwgMjE4LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjA3LCAKKyAgICAyNCwgMTAwLCAyMjUsIDEzMywgMjQsIDEwMCwgMjQxLCAxNzQsIDI0LCAxMDAsIDIxOCwgMjA0LCAxNTUsIDUsIDIyNiwgMzEsIAorICAgIDE1NSwgNSwgMjUwLCAxOTUsIDE1NSwgNSwgMjMzLCA3MiwgMTU1LCA1LCAyMTEsIDI0MywgMTU1LCAxLCA2MSwgMTU1LCAxLCAKKyAgICAyNDAsIDE2MSwgMjM0LCAxOTcsIDE1NSwgMSwgNzQsIDE1NSwgMSwgMjM2LCA0MCwgMTU1LCAxLCA2OSwgMTU1LCAxLCAyMjYsIAorICAgIDk0LCAyNTAsIDE3MSwgMTU1LCAxLCAyMjksIDgzLCAyMzMsIDM0LCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzUsIDIyMywgCisgICAgMTQ1LCAxNTUsIDEsIDc2LCAxNTUsIDEsIDI1NCwgMjEwLCAxNTUsIDEsIDc4LCAxNTUsIDEsIDE3NiwgMTU1LCAxLCAyMzUsIAorICAgIDE5LCAyMjEsIDIzMCwgMTU1LCAxLCAyMzUsIDE5LCAyMzAsIDcxLCAxNTUsIDEsIDI0MywgMTQyLCAxNTUsIDEsIDI0MywgCisgICAgMTQzLCAyMzAsIDcxLCAxNTUsIDEsIDIyOSwgODIsIDE1NSwgMSwgMjUxLCA0MSwgMTU1LCAxLCAyNTEsIDQyLCAyMzAsIDcxLCAKKyAgICAxNTUsIDEsIDIzNSwgMTQ3LCAxNTUsIDEsIDIyNywgMTcwLCAyMzAsIDcxLCAxNTUsIDEsIDIzNSwgMTQ4LCAyMzEsIDIxMiwgCisgICAgMTU1LCAxLCAyMjcsIDE2OSwgMTU1LCAxLCAyMTUsIDE1NywgMTU1LCAxLCAyMTUsIDE1OCwgMjMxLCAyMTIsIDE1NSwgMSwgCisgICAgMjQ4LCAxNDMsIDE1NSwgMSwgMjQ4LCAxNDQsIDIzMSwgMjEyLCAxNTUsIDEsIDIyOSwgMjM0LCAyMzAsIDcxLCAxNTUsIDEsIAorICAgIDIxNywgMTA2LCAxNTUsIDEsIDIxNywgMTA3LCAyMzAsIDcxLCAxNTUsIDEsIDI0OCwgMjI5LCAxNTUsIDEsIDI0OCwgMjMwLCAKKyAgICAyMzEsIDIxMiwgMTU1LCAxLCAxOTgsIDE1NSwgMSwgMTkxLCAxNTUsIDEsIDIyNiwgOTQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjUyLCAxOTksIDE1NSwgMSwgMjUyLCAyMDAsIDIzMCwgNzEsIDE1NSwgMSwgMTg2LCAxNTUsIDEsIDE5MiwgMTU1LCAxLCAKKyAgICAyMDUsIDE1NSwgMSwgMjIzLCAxOTEsIDI1NCwgMjE5LCAxNTUsIDEsIDIzMywgMTQxLCAxNTUsIDEsIDIxMiwgNjUsIDE1NSwgCisgICAgMSwgMjIyLCAzNiwgMjMwLCA3MSwgMTU1LCAxLCAyMjIsIDM2LCAyMzEsIDIxMiwgMTU1LCAxLCAyMDYsIDE1NSwgMSwgMTYyLCAKKyAgICAxNTUsIDUsIDI1MCwgMTk2LCAyMTYsIDI1MSwgMTU1LCAyNSwgNSwgMjE3LCA0OCwgMTU1LCAyNSwgNSwgMjE2LCAzNiwgCisgICAgMTU1LCAyNSwgNSwgMjExLCAxOTAsIDE1NSwgMjUsIDUsIDIxMSwgMTkxLCAyMzEsIDc0LCAxNTUsIDI1LCA1LCAyMTgsIDQ4LCAKKyAgICAxNTUsIDI1LCA1LCAyMTgsIDQ5LCAyMzEsIDYyLCAxNTUsIDI1LCA1LCAyMTcsIDY2LCAxNTUsIDI1LCA1LCAyNDcsIDIwMiwgCisgICAgMjMwLCA3MCwgMTU1LCAyNSwgNSwgMjI1LCAxODcsIDE1NSwgMTE3LCA1LCAyMzQsIDE2NCwgMTU1LCAxMTcsIDUsIDIyNSwgCisgICAgMTk5LCAxNTUsIDExNywgNSwgMjUxLCAyNywgMTU1LCAyMjYsIDQ0LCAxNTUsIDQzLCAyMjMsIDcyLCAxNTUsIDQ0LCAyMjMsIAorICAgIDcyLCAxNTUsIDIyNiwgODMsIDI1NCwgMTI1LCAxNTUsIDIyNiwgODMsIDIzMSwgMjI5LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgOTMsIDE1NSwgMjI2LCA4MywgMjExLCAyMzgsIDE1NSwgMjI2LCA4MywgMjI2LCA0NSwgMTU1LCAyMjYsIDgzLCAyMzIsIAorICAgIDIxMSwgMTU1LCAyMjYsIDgzLCAyMzIsIDg3LCAxNTUsIDIyNiwgODMsIDI1NSwgMiwgMTU1LCAyMjYsIDgzLCAyNTUsIDMsIAorICAgIDI1NSwgMiwgMTU1LCAyMjYsIDgzLCAyMjUsIDU0LCAxNTUsIDIxNSwgOTQsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjI2LCAKKyAgICA0MCwgMTU1LCAyMSwgMjEwLCA4NiwgMTU1LCAyMSwgMTExLCAxNTUsIDIxLCAxMDUsIDE1NSwgMjEsIDE1OCwgMTU1LCAyMSwgCisgICAgMTYxLCAxNTUsIDIxLCAxOTAsIDE1NSwgMjEsIDE5NSwgMTU1LCAyMSwgMTk5LCAxNTUsIDIxLCAxOTYsIDE1NSwgMjEsIAorICAgIDIwMSwgMTU1LCAyMjYsIDgzLCAyMTYsIDcwLCAyMTUsIDEwNywgMTU1LCAyMjYsIDgzLCAyMzUsIDE3NCwgMTcyLCAxLCA2MSwgCisgICAgMTcyLCAxLCA3NCwgMTcyLCAxLCA2OSwgMTcyLCAxLCA3NiwgMTcyLCAxLCAyNTQsIDIxMCwgMTcyLCAxLCA3OCwgMTcyLCAxLCAKKyAgICAxNzYsIDE3MiwgMSwgMjM0LCAxMzgsIDE3MiwgMSwgMjQzLCAxNDIsIDE3MiwgMSwgMjQzLCAwLCAxNzIsIDEsIDIyOCwgCisgICAgMjUwLCAxNzIsIDEsIDIyOSwgODIsIDE3MiwgMSwgMjUwLCAxNjUsIDE3MiwgMSwgMjUwLCAxMjAsIDE3MiwgMSwgMjM1LCAKKyAgICAxNDcsIDE3MiwgMSwgMjM1LCAxMjAsIDE3MiwgMSwgMjI4LCAyNDAsIDE3MiwgMSwgMjI4LCAyNDIsIDE3MiwgMSwgMjI4LCAKKyAgICAyNDEsIDE3MiwgMSwgMjE3LCAxMDYsIDE3MiwgMSwgMjE2LCAyMDksIDE3MiwgMSwgMjQ4LCAyMjksIDE3MiwgMSwgMjQ4LCAKKyAgICAzMywgMTcyLCAxLCAyMjcsIDIxMSwgMTcyLCAxLCAxOTgsIDE3MiwgMSwgMjQ4LCAxNDMsIDE3MiwgMSwgMTkxLCAxNzIsIDEsIAorICAgIDIyNCwgMjIzLCAxNzIsIDEsIDIyNSwgMTUwLCAxNzIsIDEsIDI1MiwgMTk5LCAxNzIsIDEsIDI1MiwgMjYsIDE3MiwgMSwgCisgICAgMjMwLCAxMDAsIDE3MiwgMSwgMTg2LCAxNzIsIDEsIDI1MiwgMTE5LCAxNzIsIDEsIDE5MiwgMTcyLCAxLCAyMDUsIDE3MiwgCisgICAgMSwgMjMzLCAxNDEsIDE3MiwgMSwgMjE0LCAyNywgMTcyLCAxLCAyMTgsIDIyNSwgMTcyLCAxLCAyMDYsIDE3MiwgMSwgMTYyLCAKKyAgICAxNzIsIDI1LCA1LCAyNTUsIDgyLCAxNzIsIDI1LCA1LCA3NCwgMTcyLCAyNSwgNSwgMjM2LCA0MCwgMTcyLCAyNSwgNSwgCisgICAgMjQ1LCAyMDMsIDE3MiwgMjUsIDUsIDY5LCAxNzIsIDI1LCA1LCAyMjYsIDIzOCwgMTcyLCAyNSwgNSwgNzgsIDE3MiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxNzIsIDI1LCA1LCAyNTMsIDIwMCwgMTcyLCAyNSwgNSwgMjE0LCAyMTQsIDE3MiwgMTE3LCA1LCAKKyAgICAxOTIsIDE3MiwgMTE3LCA1LCAyMDUsIDE3MiwgMTE3LCA1LCAyMzMsIDE0MSwgMTcyLCAxMTcsIDUsIDIxMiwgNjUsIDE3MiwgCisgICAgMSwgNDAsIDIzNSwgMjksIDE3MiwgMSwgNDAsIDI0MywgMjA5LCAxNzIsIDEsIDQwLCAyMjksIDg0LCAxNzIsIDExNywgNSwgCisgICAgNDAsIDIyOSwgODQsIDE3MiwgMSwgNDAsIDI1MCwgMTY2LCAxNzIsIDEsIDQwLCAyMTcsIDE1MywgMTcyLCAxLCA0MCwgMjMwLCAKKyAgICAzMCwgMTcyLCAxLCA0MCwgMjI2LCAxMDksIDE3MiwgMSwgNDAsIDIxMSwgMTE3LCAxNzIsIDEsIDQwLCAxNTMsIDE3MiwgMSwgCisgICAgNDAsIDE1NiwgMTcyLCAxLCA0MCwgMjE4LCAyMjgsIDE3MiwgMTE3LCA1LCA0MCwgMTk0LCAxNzIsIDExNywgNSwgNDAsIAorICAgIDI0MiwgNjcsIDE3MiwgMjEsIDIxMCwgODYsIDE3MiwgMjEsIDExMSwgMTcyLCAyMSwgMTA1LCAxNzIsIDIxLCAxNTgsIDE3MiwgCisgICAgMjEsIDE2MSwgMTcyLCAyMSwgMTkwLCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDE5OSwgMTcyLCAyMSwgMTk2LCAxNzIsIDIxLCAKKyAgICAyMDEsIDE3MiwgMjI0LCAxNDQsIDIxOCwgMjUzLCAxNzIsIDIyNCwgMTQ0LCAyNDgsIDE4NiwgMTcyLCAyMjQsIDE0NCwgNTIsIAorICAgIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCAyMTUsIDIxMiwgMjQ4LCAxODYsIDY4LCAxLCAyMzQsIDEzMiwgMjQzLCAxNDIsIAorICAgIDY4LCAxLCAyMzQsIDEzMiwgMjUxLCA0MSwgNjgsIDEsIDIzNCwgMTMyLCAyNTAsIDE2NSwgNjgsIDEsIDIzNCwgMTMyLCAKKyAgICAyMzUsIDE0NywgNjgsIDEsIDIzNCwgMTMyLCAyMzUsIDEyMCwgNjgsIDEsIDIzNCwgMTMyLCAyMjcsIDE2OSwgNjgsIDEsIAorICAgIDIzNCwgMTMyLCAyMTUsIDE1NywgNjgsIDEsIDIzNCwgMTMyLCAyMTUsIDE0NSwgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDE0MywgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDEyNywgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDMzLCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDE5OCwgNjgsIDEsIDIzNCwgMTMyLCAyMDYsIDY4LCAxLCAyMzQsIDEzMiwgMTYyLCA2OCwgMSwgMjM0LCAxMzIsIDI0MSwgCisgICAgMTk2LCA2OCwgMSwgMjM0LCAxMzIsIDI0NCwgMjA0LCA2OCwgNTgsIDEsIDIzNCwgMTMyLCAyMjMsIDExMiwgNjgsIDEsIAorICAgIDIzNCwgMTMyLCAyMTEsIDE2NSwgNjgsIDEsIDIzNCwgMTMyLCAyMTAsIDExNiwgNjgsIDEsIDIzNCwgMTMyLCAyMDUsIDY4LCAKKyAgICAyMzIsIDE1MSwgMjM0LCAxMzIsIDIyNywgMSwgNjgsIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI0LCA0NiwgNjgsIDIzMiwgCisgICAgMTUxLCAyMzQsIDEzMiwgMjQxLCAxMjgsIDY4LCAxNiwgMjU0LCAxOTksIDI0NSwgMzgsIDY4LCAxNiwgMjU0LCAxOTksIAorICAgIDExMSwgNjgsIDE2LCAyNTQsIDE5OSwgMTA1LCA2OCwgMSwgMjU0LCAxOTksIDIwNSwgNjgsIDUsIDIyNiwgMjcsIDIzNCwgCisgICAgMjE5LCAyMTYsIDMxLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMzQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAzNCwgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMzQsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDExMSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIAorICAgIDEyMCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDEyMCwgMzksIDIwOCwgMSwgMTIxLCAyNDIsIDE4MSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyNDIsIDE4MSwgMzksIDIwOCwgMSwgMTIxLCAyMjksIDksIDM5LCAyMDgsIDEsIDEyNSwgMjI5LCA5LCAzOSwgMjA4LCAKKyAgICAxLCAxMjEsIDI0OSwgMjQ2LCAzOSwgMjA4LCAxLCAxMjUsIDI0OSwgMjQ2LCAzOSwgMjA4LCAxLCAxMjEsIDI1MCwgOTQsIAorICAgIDM5LCAyMDgsIDEsIDEyNSwgMjUwLCA5NCwgMzksIDIwOCwgMSwgMTIxLCAyMTksIDYwLCAzOSwgMjA4LCAxLCAxMjUsIDIxOSwgCisgICAgNjAsIDM5LCAyMDgsIDEsIDEyMSwgMjI3LCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjI3LCAxMzgsIDM5LCAyMDgsIDEsIAorICAgIDEyMSwgMjQ3LCAxNTMsIDM5LCAyMDgsIDEsIDEyNSwgMjQ3LCAxNTMsIDM5LCAyMDgsIDEsIDEyMSwgMTEyLCAzOSwgMjA4LCAKKyAgICAxLCAxMjUsIDExMiwgMzksIDIwOCwgMSwgMTIxLCAyMTYsIDE1NywgMzksIDIwOCwgMSwgMTI1LCAyMTYsIDE1NywgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMjgsIDc5LCAzOSwgMjA4LCAxLCAxMjUsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyMSwgMjUxLCAKKyAgICAyMTMsIDM5LCAyMDgsIDEsIDEyNSwgMjUxLCAyMTMsIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxOSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTI0LCAzOSwgMjA4LCAxLCAxMjUsIDIyNSwgMTI0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDI0NCwgNTEsIDM5LCAyMDgsIDEsIDEyNSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTIxLCAyMzAsIAorICAgIDE2NiwgMzksIDIwOCwgMSwgMTI1LCAyMzAsIDE2NiwgMzksIDIwOCwgMSwgMTIxLCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTIxLCAyMjIsIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyMjIsIDIxMywgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMzIsIDE2MiwgMzksIDIwOCwgMSwgMTI1LCAyMzIsIDE2MiwgMzksIDIwOCwgMSwgMTIxLCAyMTMsIAorICAgIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgMTIxLCAyNDEsIDc1LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIDEyMSwgNzgsIDM5LCAyMDgsIDEsIDEyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDIzNiwgMzksIDIwOCwgMjUsIDI1NSwgODIsIDM5LCAyMDgsIDI1LCA3NCwgMzksIDIwOCwgMjUsIDIxNCwgCisgICAgMjE0LCAzOSwgMjA4LCAyNSwgNjksIDM5LCAyMDgsIDI1LCA3NiwgMzksIDIwOCwgMjUsIDc4LCAzOSwgMjA4LCAyMzEsIAorICAgIDIwOSwgMjM0LCAxMTQsIDM5LCAyMDgsIDI1LCAyNDAsIDEyNiwgMzksIDIwOCwgMjUsIDIxNCwgMjEzLCAzOSwgMjA4LCAyNSwgCisgICAgMjE0LCAyMjksIDM5LCAyMDgsIDI1LCAyNTMsIDE5OCwgMzksIDIwOCwgMjUsIDI1MywgMTc1LCAzOSwgMjA4LCAyNSwgMjU0LCAKKyAgICAxMzEsIDM5LCAyMDgsIDI1LCAyNTQsIDE0NCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwOSwgMjQ1LCAxODgsIDM5LCAyMDgsIAorICAgIDEzOCwgMjMxLCAyMDksIDIyNywgMjEwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDE1NywgMzksIDIwOCwgMTM4LCAKKyAgICAyMzEsIDIwOSwgMjE5LCA0NCwgMzksIDIwOCwgMTYsIDIzNCwgMTksIDM5LCAyMDgsIDE2LCAyMjcsIDIxMCwgMzksIDIwOCwgCisgICAgMTYsIDIyMSwgMjU1LCAzOSwgMjA4LCAxNiwgMjQxLCA3NiwgMjQxLCA3MSwgMzksIDIwOCwgMTYsIDIzNCwgMjgsIDIzNCwgCisgICAgMjcsIDE4OCwgMTg3LCAxLCA3NiwgMTg4LCAxODcsIDEsIDc4LCAxODgsIDE4NywgMSwgMjUwLCAxNjUsIDE4OCwgMTg3LCAxLCAKKyAgICAyMjcsIDE2OSwgMTg4LCAxODcsIDEsIDIxNSwgMTU3LCAxODgsIDE4NywgMSwgMjE1LCAxNDUsIDE4OCwgMTg3LCAxLCAyNDgsIAorICAgIDE0MywgMTg4LCAxODcsIDEsIDI0OCwgMTI3LCAxODgsIDE4NywgMSwgMjI4LCAxMTUsIDE4OCwgMTg3LCAxLCAyMjAsIDEwNCwgCisgICAgMTg4LCAxODcsIDEsIDIxOCwgMjI1LCAxODgsIDE4NywgMjUsIDUsIDIzNiwgNDAsIDE4OCwgMTg3LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE4OCwgMTg3LCAyNSwgNSwgMjU1LCA0NiwgMTg4LCAxODcsIDI1LCA1LCAyNTMsIDIwMCwgMTg4LCAxODcsIDI1LCAKKyAgICA1LCAyNTUsIDM5LCAxODgsIDE4NywgMjUwLCAxMzMsIDE4OCwgMTg3LCAyNTQsIDIxNSwgMjM0LCAxMDQsIDE4OCwgMTg3LCAKKyAgICAyNTQsIDExMSwgMTg4LCAxODcsIDMsIDIyMywgNzcsIDc5LCAxODgsIDE4NywgMjExLCAyMDksIDIyMywgNzcsIDc5LCAxODgsIAorICAgIDE4NywgMjUsIDUsIDIxMywgMTQ3LCAxODgsIDE4NywgMjEzLCAxNTIsIDI5LCAzLCAyMTUsIDEzOCwgMjksIDMsIDIxNSwgCisgICAgMTQxLCAyOSwgMywgMjE1LCAxNDQsIDI5LCAzLCAyMTUsIDE0MiwgMjksIDMsIDIxNSwgMTQzLCAyOSwgMywgMjE1LCAxNDAsIAorICAgIDI5LCAzLCAyNDgsIDEyMSwgMjksIDMsIDI0OCwgMTIzLCAyOSwgMywgMjQ4LCAxMjYsIDI5LCAzLCAyNDgsIDEyNCwgMjksIAorICAgIDMsIDI0OCwgMTI1LCAyOSwgMywgMjQ4LCAxMjIsIDI5LCAzLCAyNDYsIDM2LCAyOSwgMywgMjQ2LCAzOSwgMjksIDMsIDI0NiwgCisgICAgNDUsIDI5LCAzLCAyNDYsIDQzLCAyOSwgMywgMjQ2LCA0NCwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNTAsIDIxMiwgMjksIAorICAgIDMsIDI1MCwgMjA2LCAyOSwgMywgMjUwLCAyMDgsIDI5LCAzLCAyNTAsIDIxMSwgMjksIDMsIDI1MCwgMjA5LCAyOSwgMywgCisgICAgMjUwLCAyMTAsIDI5LCAzLCAyNTAsIDIwNywgMjksIDMsIDI1MiwgMTE5LCAyOSwgMywgMjUyLCA5OCwgMjksIDMsIDI1MiwgCisgICAgMTEwLCAyOSwgMywgMjUyLCAxMTgsIDI5LCAzLCAyNTIsIDExMywgMjksIDMsIDI1MiwgMTE0LCAyOSwgMywgMjUyLCAxMDIsIAorICAgIDE4OCwgMTg3LCAxLCAyMzQsIDI1LCAxODgsIDE4NywgMSwgMjIxLCAyNTUsIDE4OCwgMTg3LCAxLCAyMzMsIDExNSwgMTg4LCAKKyAgICAxODcsIDEsIDIzMCwgMTc3LCAxODgsIDE4NywgMSwgMTkxLCAxODgsIDE4NywgMSwgMTk4LCAxODgsIDE4NywgMSwgMjUwLCAKKyAgICAxMTAsIDE4OCwgMTg3LCAxLCAyMTYsIDkxLCAxODgsIDE4NywgMSwgMjM0LCAxMDcsIDE4OCwgMTg3LCAxLCAyMjgsIDI1NSwgCisgICAgMTg4LCAxODcsIDEsIDIxNiwgMTUxLCAxODgsIDE4NywgMSwgMjEyLCA2MCwgMTg4LCAxODcsIDEsIDIxMSwgNjksIDE4OCwgCisgICAgMTg3LCAxLCAyNDAsIDIyMywgMTg4LCAxODcsIDEsIDIxNCwgMTkwLCAxODgsIDE4NywgMSwgNzQsIDE4OCwgMTg3LCAxLCAKKyAgICAyMjUsIDE0NSwgMTg4LCAxODcsIDEsIDI1MywgMjEwLCAxODgsIDE4NywgMSwgMjQyLCAxNzQsIDE4OCwgMTg3LCAxLCAyMzUsIAorICAgIDExOCwgMTg4LCAxODcsIDEsIDIyMywgMTY5LCAxODgsIDE4NywgMSwgMjUyLCAxOTksIDE4OCwgMTg3LCAxLCAyMzUsIDEwNiwgCisgICAgMTg4LCAxODcsIDEsIDI0NywgMjI3LCAxODgsIDE4NywgMSwgMjQyLCAyMjgsIDE4OCwgMTg3LCAxLCAyNDgsIDEzLCAxODgsIAorICAgIDE4NywgMSwgMjUyLCAyNCwgMTg4LCAxODcsIDEsIDIzNCwgMjYsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjMzLCAxMTYsIAorICAgIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjMwLCAxNzgsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjI2LCA5NCwgMjMyLCAKKyAgICAxMzQsIDE4OCwgMTg3LCAxLCAyMjksIDIzNCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMTYsIDkyLCAyMzIsIDEzNCwgCisgICAgMTg4LCAxODcsIDEsIDIyOSwgMCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyNDAsIDE2MSwgMjMyLCAxMzQsIDE4OCwgMTg3LCAKKyAgICAyNSwgNSwgMjI2LCAxOTksIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0LCAxODgsIDE4NywgMjUsIDUsIDI1NCwgMTMwLCAxODgsIAorICAgIDE4NywgMjUsIDUsIDIxMSwgMzgsIDE4OCwgMTg3LCAyNSwgNSwgMjE5LCAzNCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIDE4NywgCisgICAgMTg4LCAxODcsIDI1LCA1LCAyNTAsIDEzMSwgMTg4LCAxODcsIDI1LCA1LCAyMjcsIDE5NSwgMTg4LCAxODcsIDI1MCwgMTMyLCAKKyAgICAxODgsIDE4NywgMjMyLCA5MCwgMjM1LCAxNTYsIDE4OCwgMTg3LCAyNTQsIDU0LCAyMzUsIDE1NiwgMTg4LCAxODcsIDIxLCAKKyAgICAyMTAsIDg2LCAxODgsIDE4NywgMjEsIDExMSwgMTg4LCAxODcsIDIxLCAxMDUsIDE4OCwgMTg3LCAyMSwgMTU4LCAxODgsIAorICAgIDE4NywgMjEsIDE2MSwgMTg4LCAxODcsIDIxLCAxOTAsIDE4OCwgMTg3LCAyMSwgMTk1LCAxODgsIDE4NywgMjEsIDE5OSwgCisgICAgMTg4LCAxODcsIDIxLCAxOTYsIDE4OCwgMTg3LCAyMSwgMjAxLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMjcsIDg2LCAKKyAgICAyNCwgMTQzLCAyMTAsIDI0MywgMjQsIDE0MywgMjEwLCAyNDIsIDI0LCAxNDMsIDIxMCwgMjQxLCAyNCwgMTQzLCAyMTUsIAorICAgIDIzLCAyNCwgMTQzLCAyMTUsIDI2LCAyNCwgMTQzLCAyMTAsIDIxMCwgMjQsIDE0MywgMjEwLCAyMDYsIDI0LCAxNDMsIDI0NSwgCisgICAgNjIsIDI0LCAxNDMsIDI0NSwgNjAsIDI0LCAxNDMsIDI0NSwgNjEsIDI0LCAxNDMsIDI0NSwgNTgsIDI0LCAxNDMsIDI0MCwgCisgICAgMTUxLCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAKKyAgICAyNDAsIDE1NCwgMjQsIDE0MywgMjQwLCAxNDcsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1NiwgMjQsIAorICAgIDE0MywgMjU0LCA0MSwgMjQsIDE0MywgMjU0LCA0MCwgMjQsIDkwLCAyMjgsIDIyNCwgMjQsIDkwLCAyMjgsIDIzMCwgMjQsIAorICAgIDkwLCAyMTgsIDIwNiwgMjQsIDkwLCAyMTgsIDIwNSwgMjQsIDkwLCAyMTYsIDk3LCAyNCwgOTAsIDIxNiwgOTUsIDI0LCA5MCwgCisgICAgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDEwMCwgMjQsIDkwLCAyMTYsIDEwMSwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIAorICAgIDIyMywgOCwgMjQsIDkwLCAyMjMsIDIzLCAyNCwgOTAsIDIxOCwgMjEyLCAyNCwgOTAsIDIyMywgMjAsIDI0LCA5MCwgMjIzLCAKKyAgICAxMCwgMjQsIDkwLCAyMjMsIDEyLCAyNCwgOTAsIDIyMiwgMjU1LCAyNCwgOTAsIDIyMywgMCwgMjQsIDkwLCAyMzQsIDIyNCwgCisgICAgMjQsIDkwLCAyMzAsIDIxNywgMjQsIDkwLCAyMzAsIDIxMSwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgCisgICAgMjQsIDkwLCAyMzAsIDIyMCwgMjQsIDkwLCAyMjUsIDc5LCAyNCwgOTAsIDIyNSwgODgsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIAorICAgIDkwLCAyMTgsIDIxNCwgMjQsIDkwLCAyMjUsIDgyLCAyNCwgOTAsIDIyNSwgOTYsIDI0LCA5MCwgMjI1LCA5NywgMjQsIDkwLCAKKyAgICAyMTksIDE0MiwgMjQsIDkwLCAyMTksIDE0NSwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIDkwLCAyMTgsIDIwOCwgMjQsIDkwLCAKKyAgICAyMTksIDE0MCwgMjQsIDkwLCAyMTksIDE0OCwgMjQsIDkwLCAyMTksIDE0OSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAKKyAgICAyMTksIDE0NywgMjQsIDkwLCAyMjYsIDM0LCAyNCwgOTAsIDIyNiwgMzUsIDI0LCA5MCwgMjExLCAyNCwgMjQsIDkwLCAyMTEsIAorICAgIDI1LCAyNCwgOTAsIDI1MCwgNTIsIDI0LCA5MCwgMjUwLCA1MSwgMjQsIDkwLCAyMTgsIDIyMSwgMjQsIDkwLCAyMjUsIDEzMSwgCisgICAgMjQsIDkwLCAyMjUsIDEzMCwgMTAsIDE0LCAyMzgsIDMxLCAxMCwgMTQsIDIzOCwgMzAsIDEwLCAxNCwgMjM4LCAyOSwgMTAsIAorICAgIDE0LCAyMzgsIDI4LCAxMCwgMTQsIDIzOCwgMjcsIDEwLCAxNCwgMjM4LCAyNiwgMTAsIDE0LCAyMzgsIDI1LCAxMCwgMTQsIAorICAgIDIzOCwgMjQsIDEwLCAxNCwgMjM4LCAyMywgMTAsIDE0LCAyMzgsIDIyLCAxMCwgMTQsIDIzOCwgMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMCwgMTAsIDE0LCAyMzgsIDE5LCAxMCwgMTQsIDIzOCwgMTgsIDEwLCAxNCwgMjM4LCAxNywgMTAsIDE0LCAyMzgsIDE2LCAKKyAgICAxMCwgMTQsIDIzOCwgMTUsIDEwLCAxNCwgMjM4LCAxNCwgMTAsIDE0LCAyMzgsIDEzLCAxMCwgMTQsIDIzOCwgMTIsIDEwLCAKKyAgICAxNCwgMjM4LCAxMSwgMTAsIDE0LCAyMzgsIDEwLCAxMCwgMTQsIDIzOCwgOSwgMTAsIDE0LCAyMzgsIDgsIDEwLCAxNCwgCisgICAgMjM4LCA3LCAxMCwgMTQsIDIzOCwgNiwgMTAsIDE0LCAyMzgsIDUsIDEwLCAxNCwgMjM4LCA0LCAxMCwgMTQsIDIzOCwgMywgCisgICAgMTAsIDE0LCAyMzgsIDIsIDEwLCAxNCwgMjM4LCAxLCAxMCwgMTQsIDIzOCwgMCwgMTAsIDE0LCAyMzcsIDI1NSwgMTAsIDE0LCAKKyAgICAyMzcsIDI1NCwgMTAsIDE0LCAyMzcsIDI1MywgMTAsIDE0LCAyMzcsIDI1MiwgMTAsIDE0LCAyMzcsIDI1MSwgMTAsIDE0LCAKKyAgICAyMzcsIDI1MCwgMTAsIDE0LCAyMzcsIDI0OSwgMTAsIDE0LCAyMzcsIDI0OCwgMTAsIDE0LCAyMzcsIDI0NywgMTAsIDE0LCAKKyAgICAyMzcsIDI0NiwgMTAsIDE0LCAyMzcsIDI0NSwgMTAsIDE0LCAyMzcsIDI0NCwgMTAsIDE0LCAyMzcsIDI0MywgMTAsIDE0LCAKKyAgICAyMzcsIDI0MiwgMTAsIDE0LCAyMzcsIDI0MSwgMTAsIDE0LCAyMzcsIDI0MCwgMTAsIDE0LCAyMzcsIDIzOSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzOCwgMTAsIDE0LCAyMzcsIDIzNywgMTAsIDE0LCAyMzcsIDIzNiwgMTAsIDE0LCAyMzcsIDIzNSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzNCwgMTAsIDE0LCAyMzcsIDIzMywgMTAsIDE0LCAyMzcsIDIzMiwgMTAsIDE0LCAyMzcsIDIzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzMCwgMTAsIDE0LCAyMzcsIDIyOSwgMTAsIDE0LCAyMzcsIDIyOCwgMTAsIDE0LCAyMzcsIDIyNywgMTAsIDE0LCAKKyAgICAyMzcsIDIyNiwgMTAsIDE0LCAyMzcsIDIyNSwgMTAsIDE0LCAyMzcsIDIyNCwgMTAsIDE0LCAyMzcsIDIyMywgMTAsIDE0LCAKKyAgICAyMzcsIDIyMiwgMTAsIDE0LCAyMzcsIDIyMSwgMTAsIDE0LCAyMzcsIDIyMCwgMTAsIDE0LCAyMzcsIDIxOSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxOCwgMTAsIDE0LCAyMzcsIDIxNywgMTAsIDE0LCAyMzcsIDIxNiwgMTAsIDE0LCAyMzcsIDIxNSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxNCwgMTAsIDE0LCAyMzcsIDIxMywgMTAsIDE0LCAyMzcsIDIxMiwgMTAsIDE0LCAyMzcsIDIxMSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxMCwgMTAsIDE0LCAyMzcsIDIwOSwgMTAsIDE0LCAyMzcsIDIwOCwgMTAsIDE0LCAyMzcsIDIwNywgMTAsIDE0LCAKKyAgICAyMzcsIDIwNiwgMTAsIDE0LCAyMzcsIDIwNSwgMTAsIDE0LCAyMzcsIDIwNCwgMTAsIDE0LCAyMzcsIDIwMywgMTAsIDE0LCAKKyAgICAyMzcsIDIwMiwgMTAsIDE0LCAyMzcsIDIwMSwgMTAsIDE0LCAyMzcsIDIwMCwgMTAsIDE0LCAyMzcsIDE5OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5OCwgMTAsIDE0LCAyMzcsIDE5NywgMTAsIDE0LCAyMzcsIDE5NiwgMTAsIDE0LCAyMzcsIDE5NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5NCwgMTAsIDE0LCAyMzcsIDE5MywgMTAsIDE0LCAyMzcsIDE5MiwgMTAsIDE0LCAyMzcsIDE5MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5MCwgMTAsIDE0LCAyMzcsIDE4OSwgMTAsIDE0LCAyMzcsIDE4OCwgMTAsIDE0LCAyMzcsIDE4NywgMTAsIDE0LCAKKyAgICAyMzcsIDE4NiwgMTAsIDE0LCAyMzcsIDE4NSwgMTAsIDE0LCAyMzcsIDE4NCwgMTAsIDE0LCAyMzcsIDE4MywgMTAsIDE0LCAKKyAgICAyMzcsIDE4MiwgMTAsIDE0LCAyMzcsIDE4MSwgMTAsIDE0LCAyMzcsIDE4MCwgMTAsIDE0LCAyMzcsIDE3OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3OCwgMTAsIDE0LCAyMzcsIDE3NywgMTAsIDE0LCAyMzcsIDE3NiwgMTAsIDE0LCAyMzcsIDE3NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3NCwgMTAsIDE0LCAyMzcsIDE3MywgMTAsIDE0LCAyMzcsIDE3MiwgMTAsIDE0LCAyMzcsIDE3MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3MCwgMTAsIDE0LCAyMzcsIDE2OSwgMTAsIDE0LCAyMzcsIDE2OCwgMTAsIDE0LCAyMzcsIDE2NywgMTAsIDE0LCAKKyAgICAyMzcsIDE2NiwgMTAsIDE0LCAyMzcsIDE2NSwgMTAsIDE0LCAyMzcsIDE2NCwgMTAsIDE0LCAyMzcsIDE2MywgMTAsIDE0LCAKKyAgICAyMzcsIDE2MiwgMTAsIDE0LCAyMzcsIDE2MSwgMTAsIDE0LCAyMzcsIDE2MCwgMTAsIDE0LCAyMzcsIDE1OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1OCwgMTAsIDE0LCAyMzcsIDE1NywgMTAsIDE0LCAyMzcsIDE1NiwgMTAsIDE0LCAyMzcsIDE1NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1NCwgMTAsIDE0LCAyMzcsIDE1MywgMTAsIDE0LCAyMzcsIDE1MiwgMTAsIDE0LCAyMzcsIDE1MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1MCwgMTAsIDE0LCAyMzcsIDE0OSwgMTAsIDE0LCAyMzcsIDE0OCwgMTAsIDE0LCAyMzcsIDE0NywgMTAsIDE0LCAKKyAgICAyMzcsIDE0NiwgMTAsIDE0LCAyMzcsIDE0NSwgMTAsIDE0LCAyMzcsIDE0NCwgMTAsIDE0LCAyMzcsIDE0MywgMTAsIDE0LCAKKyAgICAyMzcsIDE0MiwgMTAsIDE0LCAyMzcsIDE0MSwgMTAsIDE0LCAyMzcsIDE0MCwgMTAsIDE0LCAyMzcsIDEzOSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzOCwgMTAsIDE0LCAyMzcsIDEzNywgMTAsIDE0LCAyMzcsIDEzNiwgMTAsIDE0LCAyMzcsIDEzNSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzNCwgMTAsIDE0LCAyMzcsIDEzMywgMTAsIDE0LCAyMzcsIDEzMiwgMTAsIDE0LCAyMzcsIDEzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzMCwgMTAsIDE0LCAyMzcsIDEyOSwgMTAsIDE0LCAyMzcsIDEyOCwgMTAsIDE0LCAyMzcsIDEyNywgMTAsIDE0LCAKKyAgICAyMzcsIDEyNiwgMTAsIDE0LCAyMzcsIDEyNSwgMTAsIDE0LCAyMzcsIDEyNCwgMTAsIDE0LCAyMzcsIDEyMywgMTAsIDE0LCAKKyAgICAyMzcsIDEyMiwgMTAsIDE0LCAyMzcsIDEyMSwgMTAsIDE0LCAyMzcsIDEyMCwgMTAsIDE0LCAyMzcsIDExOSwgMTAsIDE0LCAKKyAgICAyMzcsIDExOCwgMTAsIDE0LCAyMzcsIDExNywgMTAsIDE0LCAyMzcsIDExNiwgMTAsIDE0LCAyMzcsIDExNSwgMTAsIDE0LCAKKyAgICAyMzcsIDExNCwgMTAsIDE0LCAyMzcsIDExMywgMTAsIDE0LCAyMzcsIDExMiwgMTAsIDE0LCAyMzcsIDExMSwgMTAsIDE0LCAKKyAgICAyMzcsIDExMCwgMTAsIDE0LCAyMzcsIDEwOSwgMTAsIDE0LCAyMzcsIDEwOCwgMTAsIDE0LCAyMzcsIDEwNywgMTAsIDE0LCAKKyAgICAyMzcsIDEwNiwgMTAsIDE0LCAyMzcsIDEwNSwgMTAsIDE0LCAyMzcsIDEwNCwgMTAsIDE0LCAyMzcsIDEwMywgMTAsIDE0LCAKKyAgICAyMzcsIDEwMiwgMTAsIDE0LCAyMzcsIDEwMSwgMTAsIDE0LCAyMzcsIDEwMCwgMTAsIDE0LCAyMzcsIDk5LCAxMCwgMTQsIAorICAgIDIzNywgOTgsIDEwLCAxNCwgMjM3LCA5NywgMTAsIDE0LCAyMzcsIDk2LCAxMCwgMTQsIDIzNywgOTUsIDEwLCAxNCwgMjM3LCAKKyAgICA5NCwgMTAsIDE0LCAyMzcsIDkzLCAxMCwgMTQsIDIzNywgOTIsIDEwLCAxNCwgMjM3LCA5MSwgMTAsIDE0LCAyMzcsIDkwLCAKKyAgICAxMCwgMTQsIDIzNywgODksIDEwLCAxNCwgMjM3LCA4OCwgMTAsIDE0LCAyMzcsIDg3LCAxMCwgMTQsIDIzNywgODYsIDEwLCAKKyAgICAxNCwgMjM3LCA4NSwgMTAsIDE0LCAyMzcsIDg0LCAxMCwgMTQsIDIzNywgODMsIDEwLCAxNCwgMjM3LCA4MiwgMTAsIDE0LCAKKyAgICAyMzcsIDgxLCAxMCwgMTQsIDIzNywgODAsIDEwLCAxNCwgMjM3LCA3OSwgMTAsIDE0LCAyMzcsIDc4LCAxMCwgMTQsIDIzNywgCisgICAgNzcsIDEwLCAxNCwgMjM3LCA3NiwgMTAsIDE0LCAyMzcsIDc1LCAxMCwgMTQsIDIzNywgNzQsIDEwLCAxNCwgMjM3LCA3MywgCisgICAgMTAsIDE0LCAyMzcsIDcyLCAxMCwgMTQsIDIzNywgNzEsIDEwLCAxNCwgMjM3LCA3MCwgMTAsIDE0LCAyMzcsIDY5LCAxMCwgCisgICAgMTQsIDIzNywgNjgsIDEwLCAxNCwgMjM3LCA2NywgMTAsIDE0LCAyMzcsIDY2LCAxMCwgMTQsIDIzNywgNjUsIDEwLCAxNCwgCisgICAgMjM3LCA2NCwgMTAsIDE0LCAyMzcsIDYzLCAxMCwgMTQsIDIzNywgNjIsIDEwLCAxNCwgMjM3LCA2MSwgMTAsIDE0LCAyMzcsIAorICAgIDYwLCAxMCwgMTQsIDIzNywgNTksIDEwLCAxNCwgMjM3LCA1OCwgMTAsIDE0LCAyMzcsIDU3LCAxMCwgMTQsIDIzNywgNTYsIAorICAgIDEwLCAxNCwgMjM3LCA1NSwgMTAsIDE0LCAyMzcsIDU0LCAxMCwgMTQsIDIzNywgNTMsIDEwLCAxNCwgMjM3LCA1MiwgMTAsIAorICAgIDE0LCAyMzcsIDUxLCAxMCwgMTQsIDIzNywgNTAsIDEwLCAxNCwgMjM3LCA0OSwgMTAsIDE0LCAyMzcsIDQ4LCAxMCwgMTQsIAorICAgIDIzNywgNDcsIDEwLCAxNCwgMjM3LCA0NiwgMTAsIDE0LCAyMzcsIDQ1LCAxMCwgMTQsIDIzNywgNDQsIDEwLCAxNCwgMjM3LCAKKyAgICA0MywgMTAsIDE0LCAyMzcsIDQyLCAxMCwgMTQsIDIzNywgNDEsIDEwLCAxNCwgMjM3LCA0MCwgMTAsIDE0LCAyMzcsIDM5LCAKKyAgICAxMCwgMTQsIDIzNywgMzgsIDEwLCAxNCwgMjM3LCAzNywgMTAsIDE0LCAyMzcsIDM2LCAxMCwgMTQsIDIzNywgMzUsIDEwLCAKKyAgICAxNCwgMjM3LCAzNCwgMTAsIDE0LCAyMzcsIDMzLCAxMCwgMTQsIDIzNywgMzIsIDEwLCAxNCwgMjM3LCAzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDMwLCAxMCwgMTQsIDIzNywgMjksIDEwLCAxNCwgMjM3LCAyOCwgMTAsIDE0LCAyMzcsIDI3LCAxMCwgMTQsIDIzNywgCisgICAgMjYsIDEwLCAxNCwgMjM3LCAyNSwgMTAsIDE0LCAyMzcsIDI0LCAxMCwgMTQsIDIzNywgMjMsIDEwLCAxNCwgMjM3LCAyMiwgCisgICAgMTAsIDE0LCAyMzcsIDIxLCAxMCwgMTQsIDIzNywgMjAsIDEwLCAxNCwgMjM3LCAxOSwgMTAsIDE0LCAyMzcsIDE4LCAxMCwgCisgICAgMTQsIDIzNywgMTcsIDEwLCAxNCwgMjM3LCAxNiwgMTAsIDE0LCAyMzcsIDE1LCAxMCwgMTQsIDIzNywgMTQsIDEwLCAxNCwgCisgICAgMjM3LCAxMywgMTAsIDE0LCAyMzcsIDEyLCAxMCwgMTQsIDIzNywgMTEsIDEwLCAxNCwgMjM3LCAxMCwgMTAsIDE0LCAyMzcsIAorICAgIDksIDEwLCAxNCwgMjM3LCA4LCAxMCwgMTQsIDIzNywgNywgMTAsIDE0LCAyMzcsIDYsIDEwLCAxNCwgMjM3LCA1LCAxMCwgCisgICAgMTQsIDIzNywgNCwgMTAsIDE0LCAyMzcsIDMsIDEwLCAxNCwgMjM3LCAyLCAxMCwgMTQsIDIzNywgMSwgMTAsIDE0LCAyMzcsIAorICAgIDAsIDEwLCAxNCwgMjM2LCAyNTUsIDEwLCAxNCwgMjM2LCAyNTQsIDEwLCAxNCwgMjM2LCAyNTMsIDEwLCAxNCwgMjM2LCAKKyAgICAyNTIsIDEwLCAxNCwgMjM2LCAyNTEsIDEwLCAxNCwgMjM2LCAyNTAsIDEwLCAxNCwgMjM2LCAyNDksIDEwLCAxNCwgMjM2LCAKKyAgICAyNDgsIDEwLCAxNCwgMjM2LCAyNDcsIDEwLCAxNCwgMjM2LCAyNDYsIDEwLCAxNCwgMjM2LCAyNDUsIDEwLCAxNCwgMjM2LCAKKyAgICAyNDQsIDEwLCAxNCwgMjM2LCAyNDMsIDEwLCAxNCwgMjM2LCAyNDIsIDEwLCAxNCwgMjM2LCAyNDEsIDEwLCAxNCwgMjM2LCAKKyAgICAyNDAsIDEwLCAxNCwgMjM2LCAyMzksIDEwLCAxNCwgMjM2LCAyMzgsIDEwLCAxNCwgMjM2LCAyMzcsIDEwLCAxNCwgMjM2LCAKKyAgICAyMzYsIDEwLCAxNCwgMjM2LCAyMzUsIDEwLCAxNCwgMjM2LCAyMzQsIDEwLCAxNCwgMjM2LCAyMzMsIDEwLCAxNCwgMjM2LCAKKyAgICAyMzIsIDEwLCAxNCwgMjM2LCAyMzEsIDEwLCAxNCwgMjM2LCAyMzAsIDEwLCAxNCwgMjM2LCAyMjksIDEwLCAxNCwgMjM2LCAKKyAgICAyMjgsIDEwLCAxNCwgMjM2LCAyMjcsIDEwLCAxNCwgMjM2LCAyMjYsIDEwLCAxNCwgMjM2LCAyMjUsIDEwLCAxNCwgMjM2LCAKKyAgICAyMjQsIDEwLCAxNCwgMjM2LCAyMjMsIDEwLCAxNCwgMjM2LCAyMjIsIDEwLCAxNCwgMjM2LCAyMjEsIDEwLCAxNCwgMjM2LCAKKyAgICAyMjAsIDEwLCAxNCwgMjM2LCAyMTksIDEwLCAxNCwgMjM2LCAyMTgsIDEwLCAxNCwgMjM2LCAyMTcsIDEwLCAxNCwgMjM2LCAKKyAgICAyMTYsIDEwLCAxNCwgMjM2LCAyMTUsIDEwLCAxNCwgMjM2LCAyMTQsIDEwLCAxNCwgMjM2LCAyMTMsIDEwLCAxNCwgMjM2LCAKKyAgICAyMTIsIDEwLCAxNCwgMjM2LCAyMTEsIDEwLCAxNCwgMjM2LCAyMTAsIDEwLCAxNCwgMjM2LCAyMDksIDEwLCAxNCwgMjM2LCAKKyAgICAyMDgsIDEwLCAxNCwgMjM2LCAyMDcsIDEwLCAxNCwgMjM2LCAyMDYsIDEwLCAxNCwgMjM2LCAyMDUsIDEwLCAxNCwgMjM2LCAKKyAgICAyMDQsIDEwLCAxNCwgMjM2LCAyMDMsIDEwLCAxNCwgMjM2LCAyMDIsIDEwLCAxNCwgMjM2LCAyMDEsIDEwLCAxNCwgMjM2LCAKKyAgICAyMDAsIDEwLCAxNCwgMjM2LCAxOTksIDEwLCAxNCwgMjM2LCAxOTgsIDEwLCAxNCwgMjM2LCAxOTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxOTYsIDEwLCAxNCwgMjM2LCAxOTUsIDEwLCAxNCwgMjM2LCAxOTQsIDEwLCAxNCwgMjM2LCAxOTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxOTIsIDEwLCAxNCwgMjM2LCAxOTEsIDEwLCAxNCwgMjM2LCAxOTAsIDEwLCAxNCwgMjM2LCAxODksIDEwLCAxNCwgMjM2LCAKKyAgICAxODgsIDEwLCAxNCwgMjM2LCAxODcsIDEwLCAxNCwgMjM2LCAxODYsIDEwLCAxNCwgMjM2LCAxODUsIDEwLCAxNCwgMjM2LCAKKyAgICAxODQsIDEwLCAxNCwgMjM2LCAxODMsIDEwLCAxNCwgMjM2LCAxODIsIDEwLCAxNCwgMjM2LCAxODEsIDEwLCAxNCwgMjM2LCAKKyAgICAxODAsIDEwLCAxNCwgMjM2LCAxNzksIDEwLCAxNCwgMjM2LCAxNzgsIDEwLCAxNCwgMjM2LCAxNzcsIDEwLCAxNCwgMjM2LCAKKyAgICAxNzYsIDEwLCAxNCwgMjM2LCAxNzUsIDEwLCAxNCwgMjM2LCAxNzQsIDEwLCAxNCwgMjM2LCAxNzMsIDEwLCAxNCwgMjM2LCAKKyAgICAxNzIsIDEwLCAxNCwgMjM2LCAxNzEsIDEwLCAxNCwgMjM2LCAxNzAsIDEwLCAxNCwgMjM2LCAxNjksIDEwLCAxNCwgMjM2LCAKKyAgICAxNjgsIDEwLCAxNCwgMjM2LCAxNjcsIDEwLCAxNCwgMjM2LCAxNjYsIDEwLCAxNCwgMjM2LCAxNjUsIDEwLCAxNCwgMjM2LCAKKyAgICAxNjQsIDEwLCAxNCwgMjM2LCAxNjMsIDEwLCAxNCwgMjM2LCAxNjIsIDEwLCAxNCwgMjM2LCAxNjEsIDEwLCAxNCwgMjM2LCAKKyAgICAxNjAsIDEwLCAxNCwgMjM2LCAxNTksIDEwLCAxNCwgMjM2LCAxNTgsIDEwLCAxNCwgMjM2LCAxNTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxNTYsIDEwLCAxNCwgMjM2LCAxNTUsIDEwLCAxNCwgMjM2LCAxNTQsIDEwLCAxNCwgMjM2LCAxNTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxNTIsIDEwLCAxNCwgMjM2LCAxNTEsIDEwLCAxNCwgMjM2LCAxNTAsIDEwLCAxNCwgMjM2LCAxNDksIDEwLCAxNCwgMjM2LCAKKyAgICAxNDgsIDEwLCAxNCwgMjM2LCAxNDcsIDEwLCAxNCwgMjM2LCAxNDYsIDEwLCAxNCwgMjM2LCAxNDUsIDEwLCAxNCwgMjM2LCAKKyAgICAxNDQsIDEwLCAxNCwgMjM2LCAxNDMsIDEwLCAxNCwgMjM2LCAxNDIsIDEwLCAxNCwgMjM2LCAxNDEsIDEwLCAxNCwgMjM2LCAKKyAgICAxNDAsIDEwLCAxNCwgMjM2LCAxMzksIDEwLCAxNCwgMjM2LCAxMzgsIDEwLCAxNCwgMjM2LCAxMzcsIDEwLCAxNCwgMjM2LCAKKyAgICAxMzYsIDEwLCAxNCwgMjM2LCAxMzUsIDEwLCAxNCwgMjM2LCAxMzQsIDEwLCAxNCwgMjM2LCAxMzMsIDEwLCAxNCwgMjM2LCAKKyAgICAxMzIsIDEwLCAxNCwgMjM2LCAxMzEsIDEwLCAxNCwgMjM2LCAxMzAsIDEwLCAxNCwgMjM2LCAxMjksIDEwLCAxNCwgMjM2LCAKKyAgICAxMjgsIDEwLCAxNCwgMjM2LCAxMjcsIDEwLCAxNCwgMjM2LCAxMjYsIDEwLCAxNCwgMjM2LCAxMjUsIDEwLCAxNCwgMjM2LCAKKyAgICAxMjQsIDEwLCAxNCwgMjM2LCAxMjMsIDEwLCAxNCwgMjM2LCAxMjIsIDEwLCAxNCwgMjM2LCAxMjEsIDEwLCAxNCwgMjM2LCAKKyAgICAxMjAsIDEwLCAxNCwgMjM2LCAxMTksIDEwLCAxNCwgMjM2LCAxMTgsIDEwLCAxNCwgMjM2LCAxMTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxMTYsIDEwLCAxNCwgMjM2LCAxMTUsIDEwLCAxNCwgMjM2LCAxMTQsIDEwLCAxNCwgMjM2LCAxMTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxMTIsIDEwLCAxNCwgMjM2LCAxMTEsIDEwLCAxNCwgMjM2LCAxMTAsIDEwLCAxNCwgMjM2LCAxMDksIDEwLCAxNCwgMjM2LCAKKyAgICAxMDgsIDEwLCAxNCwgMjM2LCAxMDcsIDEwLCAxNCwgMjM2LCAxMDYsIDEwLCAxNCwgMjM2LCAxMDUsIDEwLCAxNCwgMjM2LCAKKyAgICAxMDQsIDEwLCAxNCwgMjM2LCAxMDMsIDEwLCAxNCwgMjM2LCAxMDIsIDEwLCAxNCwgMjM2LCAxMDEsIDEwLCAxNCwgMjM2LCAKKyAgICAxMDAsIDEwLCAxNCwgMjM2LCA5OSwgMTAsIDE0LCAyMzYsIDk4LCAxMCwgMTQsIDIzNiwgOTcsIDEwLCAxNCwgMjM2LCA5NiwgCisgICAgMTAsIDE0LCAyMzYsIDk1LCAxMCwgMTQsIDIzNiwgOTQsIDEwLCAxNCwgMjM2LCA5MywgMTAsIDE0LCAyMzYsIDkyLCAxMCwgCisgICAgMTQsIDIzNiwgOTEsIDEwLCAxNCwgMjM2LCA5MCwgMTAsIDE0LCAyMzYsIDg5LCAxMCwgMTQsIDIzNiwgODgsIDEwLCAxNCwgCisgICAgMjM2LCA4NywgMTAsIDE0LCAyMzYsIDg2LCAxMCwgMTQsIDIzNiwgODUsIDEwLCAxNCwgMjM2LCA4NCwgMTAsIDE0LCAyMzYsIAorICAgIDgzLCAxMCwgMTQsIDIzNiwgODIsIDEwLCAxNCwgMjM2LCA4MSwgMTAsIDE0LCAyMzYsIDgwLCAxMCwgMTQsIDIzNiwgNzksIAorICAgIDEwLCAxNCwgMjM2LCA3OCwgMTAsIDE0LCAyMzYsIDc3LCAxMCwgMTQsIDIzNiwgNzYsIDEwLCAxNCwgMjM2LCA3NSwgMTAsIAorICAgIDE0LCAyMzYsIDc0LCAxMCwgMTQsIDIzNiwgNzMsIDEwLCAxNCwgMjM2LCA3MiwgNywgNCwgMjcsIDI0NCwgMTMzLCA3LCA0LCAKKyAgICAyNywgMjQ0LCAxMjksIDcsIDQsIDI3LCAyNDQsIDg0LCA3LCA0LCAyNywgMjQ0LCAxMzIsIDcsIDQsIDI3LCAyNDQsIDEzMSwgCisgICAgNywgNCwgMjcsIDIwMCwgMjIyLCA5NCwgMjE3LCAxNTMsIDcsIDQsIDI3LCAyMTgsIDE3MCwgMTUwLCA0LCAyNywgMjMxLCAKKyAgICA2NCwgMjI4LCA0NCwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjQ1LCAyMjEsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDIzNSwgCisgICAgMjM0LCAxNTAsIDQsIDI3LCAyMTMsIDE4MCwgMjI4LCA0NCwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjExLCAxNjAsIDk0LCAxLCAKKyAgICAyMTAsIDIzNCwgMiwgMjQxLCAxNjUsIDk0LCAyMjUsIDE0LCAyMzUsIDU2LCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgCisgICAgMjEwLCAyMzQsIDIxMCwgMjM0LCAyMjUsIDI0MywgOTQsIDEsIDI1NCwgMTQ3LCAyNTMsIDE3MCwgOTQsIDEsIDIxMSwgMjQ3LCAKKyAgICAyNTQsIDE3OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDgsIDE5NywgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDI0NSwgOTQsIDEsIAorICAgIDIxMSwgMjQ3LCAyMzUsIDAsIDk0LCAxLCAyMTEsIDI0NywgMjMzLCAxMDAsIDk0LCAxLCAyMTEsIDI0NywgNDAsIDIzMSwgCisgICAgNzAsIDk0LCAxLCAyMTEsIDI0NywgMjIzLCA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMTcsIDM5LCA5NCwgMSwgMjU0LCAxNDcsIAorICAgIDk2LCA1MCwgOTQsIDEsIDIyMCwgMjMsIDIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgMjIwLCAyMywgMiwgMjE5LCAKKyAgICAxNjEsIDI0NywgMTI4LCA5NCwgMSwgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDEsIAorICAgIDIyMCwgMjMsIDIsIDI0OCwgMjE2LCAyMiwgMjE5LCAxNjEsIDI0NywgMTI4LCA5NCwgMSwgMTA5LCAyLCAyMjUsIDI0MywgCisgICAgOTQsIDEsIDEwOSwgMiwgMjI0LCA3OSwgOTQsIDEsIDEwOSwgMiwgMjMxLCAxNzYsIDk0LCAxLCAyNTIsIDM3LCAyLCAyNDgsIAorICAgIDIxNSwgOTQsIDEsIDI0MiwgMjA5LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDI0OCwgMTk4LCAyLCAyNDgsIDIxNSwgOTQsIDEsIAorICAgIDI0MSwgMjQ2LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDIxNCwgNCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTAsIDk4LCAyLCAKKyAgICAyNDgsIDIxNSwgOTQsIDEsIDIxNiwgMjMyLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDgsIDIxNSwgOTQsIAorICAgIDEsIDQwLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjM1LCAxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzMywgMTAxLCAKKyAgICAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzMSwgNzEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI3LCAxOTksIDIsIDI0OCwgMjE1LCAKKyAgICA5NCwgMSwgMjIxLCAyNTIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgNDAsIDIyNSwgMjI1LCAyLCAyNDgsIDIxNSwgOTQsIDEsIAorICAgIDIyNSwgMjI1LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxNSwgMTgxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyNCwgNDMsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjIzLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNSwgOTQsIAorICAgIDEsIDIxNywgNDAsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDEsIDY4LCA5NCwgMSwgMjUyLCAzNywgMiwgCisgICAgMjIzLCAxNzIsIDk0LCAxLCAyMzUsIDEsIDIsIDIyMywgMTcyLCA5NCwgMSwgMjI1LCAyMjUsIDIsIDIyMywgMTcyLCA5NCwgCisgICAgMjcsIDEwOSwgMjMzLCAxMDAsIDksIDEsIDEwOSwgMjEyLCA0NywgNTMsIDE3LCA5LCAxLCAxMDksIDIxMiwgNDcsIDQwLCAKKyAgICAxNywgOSwgMSwgMjUyLCA3MywgNTMsIDE3LCA5LCAxLCAyNTIsIDczLCA0MCwgMTcsIDksIDEsIDI1MiwgNzMsIDY1LCAxNywgCisgICAgOSwgMSwgMjUyLCA3MywgMTQ3LCAxNywgOSwgMSwgMjI1LCAyMDksIDUzLCAxNywgOSwgMSwgMjI1LCAyMDksIDQwLCAxNywgCisgICAgOSwgMSwgMjI1LCAyMDksIDY1LCAxNywgOSwgMSwgMjI1LCAyMDksIDE0NywgMTcsIDksIDEsIDI1MiwgNjEsIDUzLCAxNywgCisgICAgOSwgMSwgMjUyLCA2MSwgNDAsIDE3LCA5LCAxLCAyNTIsIDYxLCA2NSwgMTcsIDksIDEsIDI1MiwgNjEsIDE0NywgMTcsIDksIAorICAgIDEsIDIxNSwgMTQ4LCA1MywgMTcsIDksIDEsIDIxNSwgMTQ4LCA0MCwgMTcsIDksIDEsIDIxNSwgMTQ4LCA2NSwgMTcsIDksIAorICAgIDEsIDIxNSwgMTQ4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDcsIDUzLCAxNywgOSwgMSwgMjE3LCA3LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNywgNywgNjUsIDE3LCA5LCAxLCAyMTcsIDcsIDE0NywgMTcsIDksIDEsIDIxNSwgMTUwLCA1MywgMTcsIDksIDEsIDIxNSwgCisgICAgMTUwLCA0MCwgMTcsIDksIDEsIDIxNSwgMTUwLCA2NSwgMTcsIDksIDEsIDIxNSwgMTUwLCAxNDcsIDE3LCA5LCAxLCAyMTMsIAorICAgIDI0OSwgNTMsIDE3LCA5LCAxLCAyMTMsIDI0OSwgNDAsIDE3LCA5LCAxLCAyMTMsIDI0OSwgNjUsIDE3LCA5LCAxLCAyMTMsIAorICAgIDI0OSwgMTQ3LCAxNywgOSwgMSwgMjI1LCAyMDcsIDUzLCAxNywgOSwgMSwgMjI1LCAyMDcsIDQwLCAxNywgOSwgMSwgMjI1LCAKKyAgICAyMDcsIDY1LCAxNywgOSwgMSwgMjI1LCAyMDcsIDE0NywgMTcsIDksIDEsIDI0NiwgNTIsIDUzLCAxNywgOSwgMSwgMjQ2LCAKKyAgICA1MiwgNDAsIDE3LCA5LCAxLCAyNDYsIDUyLCA2NSwgMTcsIDksIDEsIDI0NiwgNTIsIDE0NywgMTcsIDksIDEsIDIyNywgCisgICAgMTU4LCA1MywgMTcsIDksIDEsIDIyNywgMTU4LCA0MCwgMTcsIDksIDEsIDIyNywgMTU4LCA2NSwgMTcsIDksIDEsIDIyNywgCisgICAgMTU4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDI4LCA1MywgMTcsIDksIDEsIDIxNywgMjgsIDQwLCAxNywgOSwgMSwgMjE3LCAKKyAgICAyOCwgNjUsIDE3LCA5LCAxLCAyMTcsIDI4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDI2LCA1MywgMTcsIDksIDEsIDIxNywgMjYsIAorICAgIDQwLCAxNywgOSwgMSwgMjE3LCAyNiwgNjUsIDE3LCA5LCAxLCAyMTcsIDI2LCAxNDcsIDE3LCA5LCAxLCAyNDgsIDE0MSwgCisgICAgNTMsIDE3LCA5LCAxLCAyNDgsIDE0MSwgNDAsIDE3LCA5LCAxLCAyNDgsIDIxMCwgNTMsIDE3LCA5LCAxLCAyNDgsIDIxMCwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDYsIDc5LCA1MywgMTcsIDksIDEsIDI0NiwgNzksIDQwLCAxNywgOSwgMSwgMjQ4LCAxMzksIDUzLCAKKyAgICAxNywgOSwgMSwgMjQ4LCAxMzksIDQwLCAxNywgOSwgMSwgMjM1LCAxMjcsIDUzLCAxNywgOSwgMSwgMjM1LCAxMjcsIDQwLCAKKyAgICAxNywgOSwgMSwgMjIyLCAxNzQsIDUzLCAxNywgOSwgMSwgMjIyLCAxNzQsIDQwLCAxNywgOSwgMSwgMjM0LCAxODEsIDUzLCAKKyAgICAxNywgOSwgMSwgMjM0LCAxODEsIDQwLCAxNywgOSwgMSwgMjM0LCAxODEsIDY1LCAxNywgOSwgMSwgMjM0LCAxODEsIDE0NywgCisgICAgMTcsIDksIDEsIDI0MywgMTMwLCA1MywgMTcsIDksIDEsIDI0MywgMTMwLCA0MCwgMTcsIDksIDEsIDI0MywgMTMwLCA2NSwgCisgICAgMTcsIDksIDEsIDI0MywgMTMwLCAxNDcsIDE3LCA5LCAxLCAyNDIsIDEwOSwgNTMsIDE3LCA5LCAxLCAyNDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAxLCAyNDIsIDEwOSwgNjUsIDE3LCA5LCAxLCAyNDIsIDEwOSwgMTQ3LCAxNywgOSwgMSwgMjI5LCA4LCA1MywgCisgICAgMTcsIDksIDEsIDIyOSwgOCwgNDAsIDE3LCA5LCAxLCAyMjksIDgsIDY1LCAxNywgOSwgMSwgMjI5LCA4LCAxNDcsIDE3LCA5LCAKKyAgICAxLCAyMjgsIDY4LCAyNDIsIDIyNiwgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCAyNDIsIDIyNiwgNDAsIDE3LCA5LCAxLCAyMjIsIAorICAgIDIxNywgNTMsIDE3LCA5LCAxLCAyMjIsIDIxNywgNDAsIDE3LCA5LCAxLCAyMjIsIDIxNywgNjUsIDE3LCA5LCAxLCAyMjIsIAorICAgIDIxNywgMTQ3LCAxNywgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA3MiwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIAorICAgIDcyLCA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIAorICAgIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA2NSwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNDAsIDE3LCAKKyAgICA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCAxNDcsIDE3LCA5LCAKKyAgICAxLCA3NywgMjUyLCAxNDEsIDUzLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCA0MCwgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgCisgICAgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMTYsIDU5LCAKKyAgICA0OCwgOSwgMTYsIDU5LCA1MSwgOSwgMTYsIDExMywgMTcwLCA0OCwgOSwgMTYsIDExMywgMTcwLCA1MSwgOSwgMTYsIDEzNCwgCisgICAgMTcwLCA0OCwgOSwgMTYsIDEzNCwgMTcwLCA1MSwgOSwgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNDgsIDksIAorICAgIDE2LCAxMzQsIDE3MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDUxLCA5LCAxNiwgMjQ0LCAxOSwgMTcwLCA0OCwgOSwgMTYsIDI0NCwgCisgICAgMTksIDE3MCwgNTEsIDksIDE2LCA1MiwgNjcsIDI1MiwgMTQ5LCA1MSwgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIAorICAgIDksIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCA5LCAxNiwgMjIyLCAyMzYsIDksIDE2LCA0LCAyMTcsIDgyLCA0OCwgOSwgCisgICAgMTYsIDQsIDIxNywgODIsIDUxLCA5LCAxLCAyMjksIDg1LCA1MywgMTcsIDksIDEsIDIyOSwgODUsIDQwLCAxNywgOSwgMSwgCisgICAgMjI5LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjksIDg1LCAxNDcsIDE3LCA5LCAxLCAxMDQsIDUzLCAxNywgOSwgMSwgMTA0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIyNiwgMjM5LCA1MywgMTcsIDksIDEsIDIyNiwgMjM5LCA0MCwgMTcsIDksIDEsIDIxMCwgMjEzLCAKKyAgICA1MywgMTcsIDksIDEsIDIxMCwgMjEzLCA0MCwgMTcsIDksIDEsIDEwNCwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTQsIAorICAgIDAsIDUzLCAxNywgOSwgMSwgMjE0LCAwLCA0MCwgMTcsIDksIDEsIDIzNCwgNzksIDIyNiwgMjM5LCA1MywgMTcsIDksIDEsIAorICAgIDIzNCwgNzksIDIyNiwgMjM5LCA0MCwgMTcsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEzLCA1MywgMTcsIDksIDEsIDIzNCwgCisgICAgNzksIDIxMCwgMjEzLCA0MCwgMTcsIDksIDEsIDE2MCwgNTMsIDE3LCA5LCAxLCAxNjAsIDQwLCAxNywgOSwgMSwgMTYwLCAKKyAgICA2NSwgMTcsIDksIDEsIDE2MCwgMTQ3LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgCisgICAgMTk4LCA2NSwgMTcsIDksIDEsIDIxNCwgMjA3LCAyMzQsIDE5MiwgMjM0LCA3OSwgMTA5LCAyMzEsIDE5OCwgMTQ3LCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNTQsIDI1MywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDI1NCwgMjUzLCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNTMsIDE3LCA5LCAyNywgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzEsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDQsIDUzLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDQsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIDIzOSwgCisgICAgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTAsIDIxMywgNDAsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNjUsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAKKyAgICAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIDIsIAorICAgIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNjUsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDUzLCAxNywgOSwgMSwgMjQ0LCAxNzYsIAorICAgIDc3LCA0MCwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNjUsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDE0NywgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA1MywgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIAorICAgIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMzQsIAorICAgIDEzNiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEwOSwgMjMxLCAKKyAgICAxOTgsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgNTMsIAorICAgIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjE2LCAKKyAgICAxOTQsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjE2LCAxOTQsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgCisgICAgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIzNCwgCisgICAgMTM2LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgNjYsIDUzLCAKKyAgICAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDUzLCAxNywgOSwgCisgICAgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTcsIDgyLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTAsIDExMiwgCisgICAgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCA1MywgMTcsIAorICAgIDksIDI3LCAyNDQsIDE1MSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ0LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAKKyAgICAyNywgMjI0LCA4NSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjI0LCAKKyAgICA4NSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzNSwgCisgICAgMSwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMjIsIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAxMDksIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxMjIsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA1MywgMTcsIDksIAorICAgIDI3LCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjgsIAorICAgIDY4LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA1MywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTIyLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCA3NywgNTMsIAorICAgIDE3LCA5LCAyNywgMjE2LCAyMDQsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIzLCA5OSwgMiwgMjE4LCAyNCwgCisgICAgMTA5LCA1MywgMTcsIDksIDI3LCAxMDksIDIzMSwgMTk4LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0OCwgMTkxLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDI0OCwgMTkzLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyMzQsIDIxMiwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMTA5LCAKKyAgICA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNTIsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1MiwgCisgICAgNjMsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjI4LCAKKyAgICA2OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjgsIDY4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA0MCwgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCA2NiwgMiwgMTA5LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIAorICAgIDIxOCwgMjQsIDEwOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMTAsIAorICAgIDEwOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDE4MiwgNzIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTUxLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjQxLCAyMjYsIDY1LCAxNywgCisgICAgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCAKKyAgICA5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxNTEsIDIsIDEyMiwgNjUsIAorICAgIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDEyMiwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyMiwgMjksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMiwgCisgICAgMjksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgCisgICAgMTIyLCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTAsIDExMiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjQyLCAyNTIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNDQsIAorICAgIDE1MSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgCisgICAgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIzNSwgMSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMzUsIDEsIDIsIDIzMywgMTA5LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIAorICAgIDEwOSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgCisgICAgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIzNCwgCisgICAgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjQxLCAyMjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjQxLCAyMjYsIDIsIDIxOCwgMjQsIDEwOSwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgCisgICAgNjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAKKyAgICAxMDksIDE0NywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAxNDcsIAorICAgIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDc3LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0NCwgMTc0LCAxNDcsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMjAsIDk2LCAyLCAyMzQsIDIxMiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIxNywgODIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjU0LCAyMDYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAxMjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDE1MSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzQsIDEzNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIyMiwgMjksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIAorICAgIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjIzLCA5OSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIyMywgCisgICAgOTksIDUzLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQyLCAKKyAgICAyNTIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjAsIDYyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxMjIsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIyMywgOTksIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgODIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAKKyAgICAxNjksIDIsIDEyMiwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgCisgICAgNjIsIDIsIDE1MSwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIAorICAgIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMTAsIDExMiwgMiwgCisgICAgNjYsIDE0NywgMTcsIDksIDI3LCAxMDksIDIsIDI0NCwgMTcyLCA0MCwgMTcsIDksIDI3LCAxMDksIDIsIDI0NCwgMTcyLCAKKyAgICA1MywgMTcsIDIyNiwgMTUwLCA0MywgMjI2LCA3LCAyMjYsIDE1MCwgNDQsIDIyNiwgNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMTIyLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgCisgICAgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDY2LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIAorICAgIDEyMiwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgNjYsIDIsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIAorICAgIDIyNSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAKKyAgICA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgCisgICAgMjA2LCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCA2NiwgNDAsIAorICAgIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA0MCwgMTcsIDksIAorICAgIDI3LCAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgMTUxLCA2NSwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAKKyAgICAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNjYsIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQxLCAKKyAgICAyMjYsIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyOCwgNjgsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIAorICAgIDY4LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNTIsIDYzLCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgCisgICAgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyMiwgCisgICAgMjksIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICA2NiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyOCwgNjgsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDIsIDc3LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIAorICAgIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAxNTEsIAorICAgIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgCisgICAgNjMsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjIsIDYsIDIxNCwgMTI4LCAyNTMsIDI0NiwgMjM0LCAxMCwgMjE4LCAxMzIsIDUsIDUzLCAxNywgCisgICAgOSwgMjcsIDIyNCwgODEsIDIxNCwgMTI4LCAyNTMsIDI0NiwgMjM0LCAxMCwgMjE4LCAxMzIsIDUsIDUzLCAxNywgOSwgMjcsIAorICAgIDI1NCwgMTYyLCA1MywgMTcsIDksIDI3LCAyNTQsIDE5MiwgNTMsIDE3LCA5LCAyNywgMjMwLCAxNTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDIyMiwgNywgNTMsIDE3LCA5LCAyNywgMjIzLCAxNDYsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTgxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDksIDI3LCAyMjIsIDYsIDUzLCAxNywgOSwgMjcsIDIyMiwgNSwgMjU0LCAxODEsIDIxMiwgCisgICAgNDgsIDksIDI3LCAyMzUsIDE0MCwgMjIzLCAzNywgNTAsIDksIDI3LCAyNTEsIDIzOCwgMjU0LCA0NywgMjU0LCA0OCwgNDUsIAorICAgIDIyMSwgMTU4LCA0NSwgMjIxLCA0NywgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCisgICAgMjAyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIxLCAxNTcsIDQ1LCAyMjEsIAorICAgIDE0NiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCA5MSwgCisgICAgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ5LCAyMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMCwgMjQ5LCAKKyAgICAyMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCAyNDksIDIzNCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjIwLCAxNTIsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0NSwgMzksIDc5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjQsIDE2LCA3OSwgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDcxLCAyMzMsIDI2LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQ0LCA3MSwgMjMzLCAyNiwgMjUxLCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIwMywgMjQ1LCAxNzEsIDM4LCAKKyAgICAyNywgNDMsIDI0MiwgMzQsIDM4LCAyNywgNDQsIDI0MiwgMzQsIDM4LCA1MiwgMjE2LCA5MCwgNDMsIDI0MiwgMzQsIDM4LCAKKyAgICA1MiwgMjE2LCA5MCwgNDQsIDI0MiwgMzQsIDM4LCAyMzEsIDIzOCwgNDMsIDI0MiwgMzQsIDM4LCAyMzEsIDIzOCwgNDQsIAorICAgIDI0MiwgMzQsIDM4LCAyNDksIDIwNSwgMjMxLCAyMzcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMywgNTksIDIzMywgCisgICAgNjIsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgMjQ1LCAxNTksIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMjEsIDIzMiwgMjE5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMTIsIDMyLCAxMjEsIDIzMiwgMjE5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAKKyAgICA0MywgMjI2LCA3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjI2LCA3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgMjQ5LCAxMDcsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDI0OSwgMTA3LCAxMjcsIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgODUsIDIzMywgMjYsIAorICAgIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAKKyAgICAzMSwgNjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgNDQsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNDksIDE2OSwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxNjksIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDcxLCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNzEsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyMCwgMTMzLCAyNDcsIDEyOCwgNzEsIDIyMCwgMTMzLCAyNDcsIDEyOCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDQyLCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA0MiwgMTI3LCAyNDgsIDE2MywgMjI2LCAKKyAgICAxMjMsIDI1MCwgMTgwLCAyMjYsIDEyMywgMjEyLCAzMiwgMjI2LCAxMjMsIDUyLCAyMTIsIDMyLCAyMjYsIDEyMywgMjQ4LCAKKyAgICAxNjMsIDEyMSwgMjMyLCAyMTksIDI1MCwgMTgwLCAxMjEsIDIzMiwgMjE5LCAyMTIsIDMyLCAxMjEsIDIzMiwgMjE5LCA0LCAKKyAgICAyNDksIDIyNywgNCwgMTEwLCAyNDksIDIyNywgNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0LCAyMjAsIDE1MiwgNCwgMjQ5LCAKKyAgICAyMzQsIDQsIDIyNCwgMTYsIDc5LCA0LCAyNDUsIDM5LCA3OSwgNCwgMjQ1LCAxNjgsIDI0OCwgMTY0LCA0LCA0MywgMjI2LCAKKyAgICA3LCA0LCA0NCwgMjI2LCA3LCA0LCA0MywgMjQ5LCAxMDcsIDEyNywgNCwgNDQsIDI0OSwgMTA3LCAxMjcsIDQsIDQzLCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDEyNywgNCwgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTM0LCA0LCAKKyAgICAyNTMsIDIyNCwgNCwgOTYsIDUwLCA0LCAyNDAsIDE3NCwgNCwgMjMzLCAyMSwgNTAsIDQsIDI0MiwgMTM3LCA1MCwgNCwgCisgICAgMjQ1LCAxMDYsIDUwLCA0LCAyMjMsIDUzLCAyMTksIDQ4LCA0LCAyNDcsIDE0MCwgNTAsIDQsIDIyNSwgMTg1LCA1MCwgNCwgCisgICAgMjQ5LCAyMjUsIDI1MywgMjE0LCA5LCAyNDQsIDE3MiwgNTMsIDE3LCA5LCAyMTcsIDQ1LCAyLCAyNDQsIDE3MiwgNDgsIDksIAorICAgIDI0OCwgMTkxLCA1MywgMTcsIDksIDIxNywgNzksIDI0NCwgOSwgOSwgMjM0LCAyMTAsIDUzLCAxNywgOSwgMjQ0LCAxNzQsIAorICAgIDUzLCAxNywgOSwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI0OCwgMTkzLCA1MywgMTcsIDksIDI0OCwgMTkzLCAxNDcsIDE3LCAKKyAgICA5LCAyMzQsIDIxMiwgNTMsIDE3LCA5LCAyMzQsIDIxMiwgMTQ3LCAxNywgOSwgMjIwLCA5NiwgNTMsIDE3LCA5LCAyMjAsIAorICAgIDk2LCAxNDcsIDE3LCA5LCAyMTgsIDQ3LCA1MywgMTcsIDksIDIxOCwgNDcsIDE0NywgMTcsIDksIDEsIDE4MiwgNTMsIDE3LCAKKyAgICA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCAKKyAgICA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCAxMDksIDIsIAorICAgIDE4MiwgMjUyLCA1MSwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgMjUyLCA1MSwgNDAsIDE3LCA5LCAxLCA3NywgMiwgCisgICAgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgNjUsIAorICAgIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgMTQ3LCAxNywgOSwgMSwgMTA5LCA1MywgMTcsIDksIDEsIDEwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYzLCA1MywgMTcsIDksIDEsIDI1MiwgNjMsIDQwLCAxNywgOSwgMSwgMjUyLCA2MywgNjUsIDE3LCA5LCAKKyAgICAxLCAyNTIsIDYzLCAxNDcsIDE3LCA5LCAxLCAyMTcsIDksIDIzMSwgMTcwLCA1MywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDQwLCAxNywgOSwgMSwgMjE3LCA5LCA1MywgMTcsIDksIDEsIDIxNywgOSwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIAorICAgIDY1LCAxNywgOSwgMSwgMjE3LCA5LCAxNDcsIDE3LCA5LCAxLCAyMTYsIDE5NCwgNTMsIDE3LCA5LCAxLCAyMTYsIDE5NCwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTYsIDE5NCwgNjUsIDE3LCA5LCAxLCAyMTYsIDE5NCwgMTQ3LCAxNywgOSwgMSwgMTUxLCA1MywgCisgICAgMTcsIDksIDEsIDE1MSwgNDAsIDE3LCA5LCAxLCAxNTEsIDY1LCAxNywgOSwgMSwgMTUxLCAxNDcsIDE3LCA5LCAxLCAxMjIsIAorICAgIDUzLCAxNywgOSwgMSwgMTIyLCA0MCwgMTcsIDksIDEsIDEyMiwgNjUsIDE3LCA5LCAxLCAxMjIsIDE0NywgMTcsIDksIDEsIAorICAgIDIzNCwgMTM2LCA1MywgMTcsIDksIDEsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDEsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDEsIAorICAgIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAxLCAyNDgsIDIwNCwgNTMsIDE3LCA5LCAxLCAyNDgsIDIwNCwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTYsIDIwNCwgNTMsIDE3LCA5LCAxLCAyMTYsIDIwNCwgNDAsIDE3LCA5LCAxLCAyMjMsIDk5LCA1MywgMTcsIDksIDEsIAorICAgIDIyMywgOTksIDQwLCAxNywgOSwgMSwgMjEwLCAxMDksIDUzLCAxNywgOSwgMSwgMjEwLCAxMDksIDQwLCAxNywgOSwgMSwgCisgICAgMjIxLCAxNjksIDUzLCAxNywgOSwgMSwgMjIxLCAxNjksIDQwLCAxNywgOSwgMSwgMjIxLCAxNjksIDY1LCAxNywgOSwgMSwgCisgICAgMjIxLCAxNjksIDE0NywgMTcsIDksIDEsIDIyMCwgNjIsIDUzLCAxNywgOSwgMSwgMjIwLCA2MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjAsIDYyLCA2NSwgMTcsIDksIDEsIDIyMCwgNjIsIDE0NywgMTcsIDksIDEsIDIyMiwgMjksIDUzLCAxNywgOSwgMSwgCisgICAgMjIyLCAyOSwgNDAsIDE3LCA5LCAxLCAyMjIsIDI5LCA2NSwgMTcsIDksIDEsIDIyMiwgMjksIDE0NywgMTcsIDksIDEsIAorICAgIDI0OCwgMjI1LCA1MywgMTcsIDksIDEsIDI0OCwgMjI1LCA0MCwgMTcsIDksIDEsIDI0OCwgMjI1LCA2NSwgMTcsIDksIDEsIAorICAgIDI0OCwgMjI1LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDgyLCA1MywgMTcsIDksIDEsIDIxNywgODIsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA4MiwgNjUsIDE3LCA5LCAxLCAyMTcsIDgyLCAxNDcsIDE3LCA5LCAxLCAyMTAsIDExMiwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMTAsIDExMiwgNDAsIDE3LCA5LCAxLCAyMTAsIDExMiwgNjUsIDE3LCA5LCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjU0LCAyMDYsIDUzLCAxNywgOSwgMSwgMjU0LCAyMDYsIDQwLCAxNywgOSwgMSwgMjU0LCAyMDYsIDY1LCAxNywgOSwgMSwgCisgICAgMjU0LCAyMDYsIDE0NywgMTcsIDksIDEsIDI0MiwgMjUyLCA1MywgMTcsIDksIDEsIDI0MiwgMjUyLCA0MCwgMTcsIDksIDEsIAorICAgIDI0MiwgMjUyLCA2NSwgMTcsIDksIDEsIDI0MiwgMjUyLCAxNDcsIDE3LCA5LCAxLCAyNDQsIDE1MSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyNDQsIDE1MSwgNDAsIDE3LCA5LCAxLCAyNDQsIDE1MSwgNjUsIDE3LCA5LCAxLCAyNDQsIDE1MSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjI0LCA4NSwgNTMsIDE3LCA5LCAxLCAyMjQsIDg1LCA0MCwgMTcsIDksIDEsIDIyNCwgODUsIDY1LCAxNywgOSwgMSwgMjI0LCAKKyAgICA4NSwgMTQ3LCAxNywgOSwgMSwgMjM1LCAxLCA1MywgMTcsIDksIDEsIDIzNSwgMSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEsIAorICAgIDY1LCAxNywgOSwgMSwgMjM1LCAxLCAxNDcsIDE3LCA5LCAxLCAyMzMsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAxLCAyMzMsIDEwOSwgNjUsIDE3LCA5LCAxLCAyMzMsIDEwOSwgMTQ3LCAxNywgOSwgMSwgNjYsIDUzLCAKKyAgICAxNywgOSwgMSwgNjYsIDQwLCAxNywgOSwgMSwgNjYsIDY1LCAxNywgOSwgMSwgNjYsIDE0NywgMTcsIDksIDEsIDIyOCwgNjgsIAorICAgIDUzLCAxNywgOSwgMSwgMjI4LCA2OCwgNDAsIDE3LCA5LCAxLCAyMjgsIDY4LCA2NSwgMTcsIDksIDEsIDIyOCwgNjgsIDE0NywgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCA2NSwgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAxLCAyMTIsIDMxLCA1MywgMTcsIDksIDEsIDIxMiwgMzEsIDQwLCAKKyAgICAxNywgOSwgMSwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDEsIDc3LCAKKyAgICA1MywgMTcsIDksIDEsIDc3LCA0MCwgMTcsIDksIDEsIDc3LCA2NSwgMTcsIDksIDEsIDc3LCAxNDcsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAKKyAgICAyMzEsIDIzMywgNzIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgCisgICAgMjUyLCA1MSwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgCisgICAgMjQ1LCAyMjgsIDc4LCAyMTksIDIwLCAxMjYsIDI0NSwgMzksIDc5LCAxMjYsIDIyNCwgMSwgNzksIDEyNiwgNTQsIDUwLCAKKyAgICAxMjYsIDI0NywgMTQwLCA1MCwgMTI2LCAyMjUsIDE4NSwgNTAsIDEyNiwgMjU0LCAxMzQsIDEyNiwgMjU0LCA2NSwgMTI2LCAKKyAgICA0MywgMjI2LCA3LCAxMjYsIDQ0LCAyMjYsIDcsIDEyNiwgMjUzLCAyMjQsIDEyNiwgOTYsIDUwLCAxMjYsIDI0OSwgMjI3LCAKKyAgICAxMjYsIDI0MCwgMTc0LCAxMjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI2LCAyMTksIDQ4LCAxMjYsIDIxLCAyMTAsIDg2LCAKKyAgICAxMjYsIDIxLCAxMTEsIDEyNiwgMjEsIDEwNSwgMTI2LCAyMSwgMTU4LCAxMjYsIDIxLCAxNjEsIDEyNiwgMjEsIDE5MCwgCisgICAgMTI2LCAyMSwgMTk1LCAxMjYsIDIxLCAxOTksIDEyNiwgMjEsIDE5NiwgMTI2LCAyMSwgMjAxLCAxMjYsIDI0OSwgMjM0LCAKKyAgICAxMjYsIDIyMCwgMTUyLCAxMjYsIDIzMywgMjEsIDUwLCAxMjYsIDI0NSwgMTA2LCA1MCwgMTI2LCAyNDIsIDEzNywgNTAsIAorICAgIDEyNiwgMjI0LCAxNiwgNzksIDEyNiwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjYsIDcsIDYsIDEsIDYxLCAxMjYsIDcsIDYsIAorICAgIDEsIDI1MywgMTY2LCAxMjYsIDcsIDYsIDEsIDI1MSwgNzQsIDEyNiwgNywgNiwgMSwgMjQ5LCA2OCwgMTI2LCA3LCA2LCAxLCAKKyAgICA3NiwgMTI2LCA3LCA2LCAxLCAyNDUsIDE0LCAxMjYsIDcsIDYsIDEsIDI0MywgMjA5LCAxMjYsIDcsIDYsIDEsIDI0MiwgNjcsIAorICAgIDEyNiwgNywgNiwgMSwgNzQsIDEyNiwgNywgNiwgMSwgMjM1LCAxNTAsIDEyNiwgNywgNiwgMSwgMjM1LCAyOSwgMTI2LCA3LCAKKyAgICA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTk0LCAxMjYsIDcsIDYsIDEsIDIzMCwgMzAsIDEyNiwgNywgNiwgMSwgNzgsIAorICAgIDEyNiwgNywgNiwgMSwgMjI2LCAxMDksIDEyNiwgNywgNiwgMSwgMjI0LCA5OSwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgCisgICAgNiwgMSwgMjIyLCA5MywgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI2LCA3LCA2LCAxLCA2OSwgMTI2LCA3LCA2LCAxLCAKKyAgICAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCA0MiwgMTI3LCAxMjYsIDIyMywgNTMsIDIxOSwgCisgICAgNDgsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzOSwgMjU1LCAyMywgMTI2LCAxMjEsIDIzMiwgMjE5LCAxMjYsIAorICAgIDI0MiwgMTQ0LCAyNTUsIDIzLCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIDEsIDI1MywgMTY2LCAxMjYsIDcsIDQsIAorICAgIDEsIDI1MSwgNzQsIDEyNiwgNywgNCwgMSwgMjQ5LCA2OCwgMTI2LCA3LCA0LCAxLCA3NiwgMTI2LCA3LCA0LCAxLCAyNDUsIAorICAgIDE0LCAxMjYsIDcsIDQsIDEsIDI0MywgMjA5LCAxMjYsIDcsIDQsIDEsIDI0MiwgNjcsIDEyNiwgNywgNCwgMSwgNzQsIDEyNiwgCisgICAgNywgNCwgMSwgMjM1LCAxNTAsIDEyNiwgNywgNCwgMSwgMjM1LCAyOSwgMTI2LCA3LCA0LCAxLCAxNTYsIDEyNiwgNywgNCwgCisgICAgMSwgMTk0LCAxMjYsIDcsIDQsIDEsIDIzMCwgMzAsIDEyNiwgNywgNCwgMSwgNzgsIDEyNiwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyNiwgNywgNCwgMSwgMjI0LCA5OSwgMTI2LCA3LCA0LCAxLCAxNTMsIDEyNiwgNywgNCwgMSwgMjIyLCA5MywgMTI2LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI2LCA3LCA0LCAxLCA2OSwgMTI2LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjYsIDQzLCAyNDksIDEwNywgMTI3LCAxMjYsIDY3LCAyMzIsIDIxOSwgMTI2LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI2LCAxODQsIDEyNiwgNDMsIDcxLCAyMjYsIDcsIDEyNiwgNDQsIDcxLCAyMjYsIDcsIDEwMSwgMTEwLCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDEwMSwgNDMsIDI0OSwgMTY5LCAxMjcsIDEwMSwgNDQsIDI0OSwgMTY5LCAxMjcsIDEwMSwgMTEwLCAKKyAgICAyNDksIDIyNywgMTAxLCA1NiwgMjMwLCAyMjksIDI0NywgMTI4LCAxMDEsIDU2LCAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgCisgICAgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDc0LCAxMDEsIDU2LCAxLCA0LCA2OSwgMTAxLCA1NiwgMSwgNCwgNzYsIDEwMSwgNTYsIAorICAgIDEsIDQsIDc4LCAxMDEsIDU2LCAxLCA0LCAxOTIsIDEwMSwgNTYsIDEsIDQsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAKKyAgICAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTksIDEwMSwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgCisgICAgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDc0LCAxMDEsIDU2LCAxLCA2OSwgMTAxLCA1NiwgMSwgNzYsIDEwMSwgNTYsIAorICAgIDEsIDc4LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTgsIDEwMSwgNTYsIDEsIDIzMywgMjIzLCAxMDEsIAorICAgIDU2LCAxLCAyMzQsIDE4OCwgMTAxLCA1NiwgMSwgMjM0LCAzNCwgMTAxLCA1NiwgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIAorICAgIDE5MywgMTAxLCA1NiwgMSwgMjE4LCA4NCwgMTAxLCA1NiwgMSwgMjIxLCAxODMsIDEwMSwgNTYsIDEsIDIxOSwgNjAsIDEwMSwgCisgICAgNTYsIDEsIDIxNywgMTA2LCAxMDEsIDU2LCAxLCAyMTYsIDExOCwgMTAxLCA1NiwgMSwgMjE1LCAxMTksIDEwMSwgNTYsIDEsIAorICAgIDIxNywgMjMsIDEwMSwgNTYsIDEsIDExMiwgMTAxLCA1NiwgMSwgMTk4LCAxMDEsIDU2LCAxLCAyMjgsIDIzOCwgMTAxLCA1NiwgCisgICAgMSwgMjI3LCAyNDIsIDEwMSwgNTYsIDEsIDIyOSwgMTEyLCAxMDEsIDU2LCAxLCAyMjgsIDc5LCAxMDEsIDU2LCAxLCAxNjIsIAorICAgIDEwMSwgNTYsIDEsIDI0MSwgMTg3LCAxMDEsIDU2LCAxLCAyNDAsIDIyOSwgMTAxLCA1NiwgMSwgMjQxLCAyNDUsIDEwMSwgCisgICAgNTYsIDEsIDI0MSwgNzUsIDEwMSwgNTYsIDEsIDE4NiwgMTAxLCA1NiwgMSwgMjMwLCAyMzUsIDEwMSwgNTYsIDEsIDIzMCwgCisgICAgMTA3LCAxMDEsIDU2LCAxLCAyMzEsIDk2LCAxMDEsIDU2LCAxLCAyMzAsIDE2NiwgMTAxLCA1NiwgMSwgMTkyLCAxMDEsIDU2LCAKKyAgICAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzOCwgCisgICAgMTAxLCA1NiwgMSwgMjIyLCAxNDIsIDEwMSwgNTYsIDEsIDIyMywgMTMxLCAxMDEsIDU2LCAxLCAyMjIsIDIxMywgMTAxLCAKKyAgICA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAzMCwgMTAxLCA1NiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCAxMDEsIAorICAgIDU2LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDEwMSwgMjQsIDI0NCwgMTExLCAxMDEsIDI0LCAxLCAyMzQsIDY0LCAxMDEsIAorICAgIDI0LCAxLCAyMTgsIDIxNywgMTAxLCAyNCwgMSwgMjM0LCA1NywgMTAxLCAyNCwgMSwgMjI4LCAyMzEsIDEwMSwgMjQsIDEsIAorICAgIDIyOCwgMjI5LCAxMDEsIDI0LCAxLCAyMjgsIDIyOCwgMTAxLCAyNCwgMSwgMjE2LCAxMDIsIDEwMSwgMjQsIDEsIDIxOCwgCisgICAgMjA2LCAxMDEsIDI0LCAxLCAyMjMsIDI5LCAxMDEsIDI0LCAxLCAyMjMsIDI0LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAxMDEsIAorICAgIDI0LCAxLCAyMjMsIDE0LCAxMDEsIDI0LCAxLCAyMjMsIDksIDEwMSwgMjQsIDEsIDIyMywgNCwgMTAxLCAyNCwgMSwgMjIzLCAKKyAgICAxNSwgMTAxLCAyNCwgMSwgMjIzLCAyNywgMTAxLCAyNCwgMSwgMjMwLCAyMjIsIDEwMSwgMjQsIDEsIDIyNSwgOTgsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE0LCAxMDEsIDI0LCAxLCAyMjUsIDg3LCAxMDEsIDI0LCAxLCAyMTksIDE1MCwgMTAxLCAyNCwgMSwgCisgICAgMjE4LCAyMTEsIDEwMSwgMjQsIDEsIDIzNiwgNjMsIDEwMSwgMjQsIDEsIDI1MCwgNTQsIDEwMSwgMjQsIDEsIDIxOCwgMjIxLCAKKyAgICAxMDEsIDI0LCAxLCAyNTAsIDExNCwgMTAxLCAyNCwgMSwgMjM0LCAxMTYsIDEwMSwgMjQsIDEsIDIxNiwgMTc0LCAxMDEsIAorICAgIDI0LCAxLCAyMjUsIDEzNCwgMTAxLCAyNCwgMSwgMjQxLCAxNzksIDEwMSwgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIAorICAgIDI1MiwgMTAxLCAyNCwgMSwgMTkyLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAxMDEsIDI0LCAxLCAyNDUsIDEyNSwgMTAxLCAyNCwgCisgICAgMSwgNzYsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc4LCAxMDEsIDI0LCAKKyAgICAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIDI0LCAxLCAyMjYsIDIzOCwgMTAxLCAyNCwgMSwgMjEwLCAKKyAgICAyNDQsIDEwMSwgMjQsIDEsIDY5LCAxMDEsIDI0LCAxLCAyMTIsIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAKKyAgICAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgMjQsIDEsIDI0NSwgNjMsIDEwMSwgMjQsIDEsIDIxMSwgCisgICAgOCwgMTAxLCAyNCwgMSwgNzQsIDEyNiwgMjUwLCAxODQsIDUwLCAxMjYsIDIyNCwgMjMxLCA1MCwgMTI2LCAyMjgsIDU3LCAKKyAgICA1MCwgMTI2LCAyMzEsIDIzNywgMTI2LCAyNTEsIDE0MywgMTMwLCAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCAKKyAgICA1MCwgMTAxLCAyNDQsIDI2LCAxOTMsIDIxMywgMjM5LCAxMDEsIDE0MCwgNzUsIDEwMSwgMjE0LCAxNTMsIDc1LCAxMDEsIAorICAgIDk3LCA3NSwgMTAxLCAyNDYsIDExMiwgNzUsIDEwMSwgODUsIDIxOCwgMjM2LCAxMDEsIDcxLCAyNTAsIDQzLCAyMzUsIDIxMSwgCisgICAgMjU0LCAxMDcsIDI1NCwgMTI4LCAyMzUsIDIxMSwgMjU0LCAxMDcsIDIyMCwgMTM5LCAyMzUsIDIxMSwgMjU0LCAxMDcsIAorICAgIDIxNiwgMjM3LCAyMjYsIDI1MywgMjIzLCA3NSwgMjUwLCAxNTAsIDIyMywgNzUsIDI1MCwgMTUwLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTUwLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExOSwgNzYsIDYyLCA1NywgMywgMjUzLCAxMjgsIDc0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgOTYsIDc4LCA2MiwgNTcsIDMsIDI1MywgMTQ2LCA2OSwgNjIsIDU3LCAzLCAyNTMsIDE2NSwgMjQ4LCAyMjksIDYyLCAKKyAgICA1NywgMywgMjUzLCAxMTIsIDI0OCwgOTgsIDYyLCA1NywgMywgMjUzLCAxNTIsIDI0OCwgMTEsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNDIsIDI0NywgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTA2LCAyNDYsIDg2LCA2MiwgNTcsIDMsIDI1MywgMTAwLCAyMzUsIAorICAgIDE0NywgNjIsIDU3LCAzLCAyNTMsIDExMSwgMjM1LCAxMzIsIDYyLCA1NywgMywgMjUzLCAxMjEsIDIzNSwgNzQsIDYyLCA1NywgCisgICAgMywgMjUzLCA5MiwgMjM1LCA1NywgNjIsIDU3LCAzLCAyNTMsIDgwLCAxNzYsIDYyLCA1NywgMywgMjUzLCAxMTMsIDIzNCwgCisgICAgMTg4LCA2MiwgNTcsIDMsIDI1MywgOTAsIDIzNCwgOTgsIDYyLCA1NywgMywgMjUzLCA4NywgMjM0LCAzNCwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDc2LCAyMzMsIDIyMywgNjIsIDU3LCAzLCAyNTMsIDc3LCAxODYsIDYyLCA1NywgMywgMjUzLCAxNDMsIDIzMSwgOTYsIAorICAgIDYyLCA1NywgMywgMjUzLCA4NCwgMjMwLCAyMzUsIDYyLCA1NywgMywgMjUzLCAxNDEsIDIzMCwgMTY2LCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTMzLCAyMzAsIDEwNywgNjIsIDU3LCAzLCAyNTMsIDE1NCwgMTk4LCA2MiwgNTcsIDMsIDI1MywgMTMyLCAyMjksIAorICAgIDExMiwgNjIsIDU3LCAzLCAyNTMsIDEyNiwgMjI4LCAyMzgsIDYyLCA1NywgMywgMjUzLCAxMDUsIDIyOCwgNzksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDIsIDIyNywgMjQyLCA2MiwgNTcsIDMsIDI1MywgMTYxLCAxOTEsIDYyLCA1NywgMywgMjUzLCA4NSwgMjI1LCAKKyAgICAyMjQsIDYyLCA1NywgMywgMjUzLCAxMTgsIDIyNSwgMTExLCA2MiwgNTcsIDMsIDI1MywgMTQ1LCAyMjUsIDE5LCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTA3LCAyMjQsIDE1MywgNjIsIDU3LCAzLCAyNTMsIDE0MCwgMjI0LCA5MSwgNjIsIDU3LCAzLCAyNTMsIDc5LCAKKyAgICAyMjQsIDcyLCA2MiwgNTcsIDMsIDI1MywgMTM1LCAyMjQsIDU2LCA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjQsIDQ1LCA2MiwgCisgICAgNTcsIDMsIDI1MywgOTcsIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyOSwgMjIzLCAxMzEsIDYyLCA1NywgMywgMjUzLCAxMDQsIAorICAgIDIyMywgMzgsIDYyLCA1NywgMywgMjUzLCAxNjMsIDIyMiwgMjEzLCA2MiwgNTcsIDMsIDI1MywgMTMwLCAyMjIsIDE0MiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEyNSwgMjA2LCA2MiwgNTcsIDMsIDI1MywgMTQ4LCAyMjEsIDE4MywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDExNiwgMjE5LCAxOTMsIDYyLCA1NywgMywgMjUzLCAxNDQsIDIxOSwgNjAsIDYyLCA1NywgMywgMjUzLCA5OSwgMjE4LCA4NCwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDk4LCAyMTcsIDEwNiwgNjIsIDU3LCAzLCAyNTMsIDE1OSwgMjE3LCAyMywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDEyMCwgMjE2LCAxMTgsIDYyLCA1NywgMywgMjUzLCAxNTcsIDExMiwgNjIsIDU3LCAzLCAyNTMsIDg4LCAyMTUsIAorICAgIDExOSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjEyLCA2NSwgNjIsIDU3LCAzLCAyNTMsIDgyLCAyMTIsIDIyLCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTE3LCAyMTEsIDI1MCwgNjIsIDU3LCAzLCAyNTMsIDExNSwgMjExLCAyMjcsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxMzksIDIxMCwgMTE2LCA2MiwgNTcsIDMsIDI1MywgODMsIDIxMCwgOTQsIDYyLCA1NywgMywgMjUzLCAxMzYsIDIxMCwgMjMsIAorICAgIDYyLCA1NywgMywgMjUzLCAxMzEsIDI1NSwgODQsIDYyLCA1NywgMywgMjUzLCAxMTQsIDI1NSwgODMsIDYyLCA1NywgMywgCisgICAgMjUzLCA3MywgMjUzLCAyMDAsIDYyLCA1NywgMywgMjUzLCA4NiwgMjQ2LCA1NCwgNjIsIDU3LCAzLCAyNTMsIDY5LCAyNDYsIAorICAgIDUzLCA2MiwgNTcsIDMsIDI1MywgMTA5LCAyMjcsIDE3OCwgNjIsIDU3LCAzLCAyNTMsIDEyNywgMjI0LCAxNTEsIDYyLCA1NywgCisgICAgMywgMjUzLCA5NSwgMjI0LCAxNTUsIDYyLCA1NywgMywgMjUzLCA4MSwgMjIzLCAxODksIDYyLCA1NywgMywgMjUzLCAxMjMsIAorICAgIDIyMywgMTg4LCA2MiwgNTcsIDMsIDI1MywgODksIDIyMiwgMjEyLCA2MiwgNTcsIDMsIDI1MywgOTEsIDIxNywgMTAzLCA2MiwgCisgICAgNTcsIDMsIDI1MywgNzEsIDIxNSwgNzgsIDYyLCA1NywgMywgMjUzLCA2OCwgMTA1LCA2MiwgNTcsIDE2LCAyNTMsIDEzOCwgCisgICAgNjIsIDU3LCAxNiwgMjUzLCAxMzcsIDYyLCA1NywgMTYsIDI1MywgMTM0LCA2MiwgNTcsIDE2LCAyNTMsIDEyMiwgNjIsIDU3LCAKKyAgICAxNiwgMjUzLCAxMTAsIDYyLCA1NywgMTYsIDI1MywgMTA4LCA2MiwgNTcsIDE2LCAyNTMsIDEwMSwgNjIsIDU3LCAxNiwgCisgICAgMjUzLCA5NCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA3OCwgNjIsIDU3LCAxNiwgMjUzLCA3NSwgCisgICAgNjIsIDU3LCAxNiwgMjUzLCA3NCwgNjIsIDU3LCAxNiwgMjUzLCA3MiwgNjIsIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgNjcsIDIzMSwgMTkwLCA2MiwgNTcsIDEwNiwgMjUzLCA2NiwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDY1LCAyNDgsIDgyLCA2MiwgNTcsIDEwNiwgMjUzLCA2NCwgMjQ1LCAxMDMsIDYyLCA1NywgMTA2LCAyNTMsIDYzLCAyMzEsIAorICAgIDE2NCwgNjIsIDU3LCAxMDYsIDI1MywgNjIsIDIxOCwgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MSwgMjQ1LCA0NSwgNjIsIAorICAgIDU3LCAxMDYsIDI1MywgNjAsIDIyMywgMTU2LCA2MiwgNTcsIDEwNiwgMjUzLCA1OSwgMjIwLCA2NCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNTgsIDI0MSwgMjQ0LCA2MiwgNTcsIDEwNiwgMjUzLCA1NywgMjE5LCAyNywgNjIsIDU3LCAxMDYsIDI1MywgNTYsIAorICAgIDI1MSwgMjExLCA2MiwgNTcsIDEwNiwgMjUzLCA1NSwgMjQ5LCAxNTMsIDYyLCA1NywgMTA2LCAyNTMsIDU0LCAyNTEsIDEyMywgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgNTMsIDIxMiwgMiwgNjIsIDU3LCAxMDYsIDI1MywgNTIsIDI1MiwgMTQ0LCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA1MSwgMjI2LCAyMDksIDYyLCA1NywgMTA2LCAyNTMsIDUwLCAyMTksIDAsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDQ5LCAyNDksIDc2LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQ4LCAyMzQsIDIzMCwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCAKKyAgICA0NywgMjM0LCAyMzgsIDYyLCA1NywgMTA2LCAyNTMsIDQ2LCAyMjYsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MywgNDUsIDIxMSwgCisgICAgMjM2LCA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCA0MywgMjU0LCAyNSwgNjIsIDU3LCAKKyAgICAyMzAsIDE0NywgMjUzLCA0MiwgMjMxLCA1NywgNjIsIDU3LCAxMDYsIDI1MywgNDEsIDI1MSwgMTQyLCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA0MCwgMjQyLCAxNzMsIDYyLCA1NywgMTA2LCAyNTMsIDM5LCA2MiwgNTcsIDEwNiwgMjUzLCAzOCwgMjExLCAyMTIsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCAzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzUsIDI0MCwgCisgICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUzLCAzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzMsIDYyLCA1NywgMTA2LCAyNTMsIDMyLCAKKyAgICA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDMwLCAyMTUsIDkyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNTAsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDI2LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgMjQsIDI0MywgMTAwLCA2MiwgNTcsIDEwNiwgMjUzLCAyMywgMjU0LCAxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMjIsIDYyLCA1NywgMTA2LCAyNTMsIDIxLCA2MiwgNTcsIDEwNiwgMjUzLCAyMCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgMTksIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMTYsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCA2MiwgNTcsIDEwNiwgMjUzLCAxNCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgMTMsIDIzMCwgMTM5LCA2MiwgNTcsIDEwNiwgMjUzLCAxMiwgNjIsIDU3LCAxMDYsIDI1MywgMTEsIDIxNSwgMjM2LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNywgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgNjIsIDU3LCAxMDYsIDI1MywgNCwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMywgNjIsIDU3LCAxMDYsIDI1MywgMiwgNjIsIDU3LCAxMDYsIDI1MywgMSwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjU1LCAyNDEsIDIxOCwgNjIsIDU3LCAxMDYsIDI1MiwgMjM0LCAyNDQsIAorICAgIDM2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzEsIDI1MiwgMTI0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjYsIDIxOSwgNywgNjIsIAorICAgIDU3LCAxMDYsIDI1MiwgMjI1LCA3NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjMsIDIxNywgCisgICAgMjM3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyNTIsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjIwLCAKKyAgICAyMTEsIDI1NCwgMjUwLCAxNDcsIDYyLCA1NywgMTA2LCAyNTIsIDIxOSwgMjUwLCAxNDcsIDYyLCA1NywgMTA2LCAyNTIsIAorICAgIDIxOCwgMjUwLCAxNDgsIDI0NCwgNywgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCAyMTIsIDAsIDYyLCA1NywgMTA2LCAyNTIsIAorICAgIDIxNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE1LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTIsIDIxNCwgMjQ3LCAyMDYsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTAsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDcsIDI0OCwgMTY3LCA2MiwgNTcsIAorICAgIDEwNiwgMjUyLCAyMDYsIDYyLCA1NywgMTA2LCAyNTIsIDIwNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTMsIDMxLCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjU0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgCisgICAgMjEzLCAxODYsIDI1MiwgMjUyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjUxLCA2MiwgNTcsIDEwNiwgMjEzLCAKKyAgICAxODYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAorICAgIDI1MiwgMjQ4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCisgICAgMjQ2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQyLCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQwLCA2MiwgNTcsIDEwNiwgCisgICAgMjEzLCAxODYsIDI1MiwgMjM5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM4LCA2MiwgNTcsIDEwNiwgMjEzLCAKKyAgICAxODYsIDI1MiwgMjM3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAorICAgIDI1MiwgMjM1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCisgICAgMjMyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI5LCAKKyAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI3LCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjExLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjAxLCAyNTQsIDI0NSwgMjExLCAKKyAgICAyMDksIDIyMCwgMTQwLCAyMzIsIDIxOSwgMjU0LCAyNDUsIDIxMSwgMjA5LCAyMjAsIDE0MCwgMjQ3LCAxMjgsIDI1NCwgCisgICAgMjQ1LCAyNTAsIDEzOCwgNzksIDI1NCwgMjQ1LCA1NCwgMTExLCAyNTQsIDI0NSwgNTQsIDEwNSwgMjU0LCAyNDUsIDU0LCAKKyAgICAxNTgsIDI1NCwgMjQ1LCA1NCwgMTYxLCAyNTQsIDI0NSwgNTQsIDE5MCwgMjU0LCAyNDUsIDU0LCAxOTUsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMTk5LCAyNTQsIDI0NSwgNTQsIDE5NiwgMjU0LCAyNDUsIDU0LCAyMDEsIDI1NCwgMjQ1LCA1NCwgMjE2LCAyNDgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjE1LCA3MywgMjU0LCAyNDUsIDU0LCAyMTYsIDE2MywgMjU0LCAyNDUsIDU0LCAyNDQsIDIzLCAKKyAgICAyNTQsIDI0NSwgNTQsIDI0NCwgMTIyLCAyNTQsIDI0NSwgNTQsIDIxOSwgMTEzLCAyNTQsIDI0NSwgNTQsIDIyMCwgMTE4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDI0NSwgMTkyLCAyNTQsIDI0NSwgNTQsIDIyOCwgMjAwLCAyNTQsIDI0NSwgNTQsIDEyMywgMjQwLCAKKyAgICAyMTcsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAxMzQsIDI0MCwgMjE3LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAxMjMsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDExMywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMTM0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIAorICAgIDU0LCAyNDQsIDE5LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDg5LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAKKyAgICAyMTksIDEyNywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NSwgCisgICAgMjAxLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwNSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAyNDksIAorICAgIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNSwgNzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNiwgMTY0LCAyMTYsIAorICAgIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDI0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDEyMywgMjE2LCAxNDgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTE5LCAyMTYsIDE0OCwgMjU0LCAKKyAgICAyNDUsIDU0LCAyNDUsIDE5MywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgMjEyLCAxNCwgMjUyLCAxMzYsIDIxNCwgMTczLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgCisgICAgMjQ1LCAyMTIsIDE0LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIxMiwgMTQsIDIxNiwgMTcwLCAyMTgsIDYwLCAKKyAgICAyNTQsIDI0NSwgMjEyLCAxNCwgMjQ0LCAxMiwgMjE4LCA2MCwgMjU0LCAyNDUsIDI0NiwgODksIDIzMSwgOTUsIDI0NCwgCisgICAgMTAwLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjMyLCAyMDUsIDIzMSwgOTUsIDI0NCwgMTAwLCAyMTgsIDYwLCAyNTQsIDI0NSwgCisgICAgMjMxLCA5NSwgMjIxLCAxNzgsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzEsIDk1LCAyMTYsIDE3MCwgMjE4LCA2MCwgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIyNCwgMjQsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDIsIDM0LCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQ2LCAxMDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTkwLCAyNiwgMjU1LCAKKyAgICAxNSwgMjUzLCAyMDIsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAKKyAgICAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIAorICAgIDIxNiwgMjQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTgsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyMTYsIDE0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIAorICAgIDI1MywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAKKyAgICAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIAorICAgIDIwMiwgMjQ0LCAxMjMsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxOCwgMTUyLCAKKyAgICAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgMjE4LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjE2LCAxNDksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAyMTYsIDE0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIzMCwgMTY5LCAyNiwgMjU1LCAxNSwgMjQxLCAyMTIsIDEyMywgMjI1LCAzNCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMTEsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMTExLCAyNiwgMjU1LCAxNSwgMjQ1LCAKKyAgICAxMTIsIDEwNSwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMDUsIDI2LCAyNTUsIDE1LCAyNDksIDczLCAxMTMsIDI0NiwgCisgICAgMTA3LCAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDExMywgMjQ2LCAxMDcsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMTkwLCAKKyAgICAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDIxNiwgMjQ5LCAyNTQsIAorICAgIDE0OSwgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMzEsIDQ2LCAyMTYsIDI0OCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyMTYsIDE2MywgMjYsIAorICAgIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDEyMywgMjU0LCAxNDksIAorICAgIDE3LCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgMTIyLCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTM0LCAyNDAsIDIxNywgCisgICAgMjYsIDI1NSwgMTUsIDI0NSwgMTEyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDg5LCAKKyAgICAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDI1MCwgCisgICAgMjM1LCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIyOSwgMTg3LCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIAorICAgIDI1NSwgMTUsIDIxNiwgMTgyLCAxMjMsIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDIxNiwgCisgICAgMTQ4LCAyNiwgMjU1LCAxNSwgMjQ4LCA2NSwgMjQ0LCA4OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyMTgsIDEyMCwgMjQ0LCAKKyAgICAxMjMsIDIzMCwgMTY5LCAyNiwgMTIzLCAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQ5LCAxNywgMjYsIDExMywgCisgICAgMjE2LCAxNjgsIDUwLCAyNiwgMTM0LCAyMjQsIDIzLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OSwgNTAsIDI2LCAKKyAgICAyNDYsIDEwOSwgNTAsIDI2LCAyMjYsIDI1MCwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ5LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDksIAorICAgIDUwLCAyNiwgMjQ0LCAxOSwgMjI2LCAyNDksIDUwLCAyNiwgMjQ0LCA4OSwgMjI2LCAyNDksIDUwLCAyNiwgMjMxLCA0MCwgCisgICAgNTAsIDI2LCAyMzMsIDE2MywgMjUyLCAxMzYsIDUwLCAyNiwgMjMyLCAyMDAsIDUwLCAyNiwgMjI2LCAxMzUsIDUwLCAyNiwgCisgICAgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAyNTEsIDUwLCAyNiwgMjU0LCA4LCA1MCwgMjYsIDI0MiwgMTUxLCA1MCwgMjYsIAorICAgIDIxNSwgMTg3LCAyNTIsIDEzNiwgNTAsIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTE1LCA1MCwgMjIyLCAKKyAgICAyMDAsIDIxNCwgMTg1LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTQ0LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTEzLCA1MCwgMjIyLCAKKyAgICAyMDAsIDI0NywgMjIxLCAyMjAsIDExMywgNTAsIDIyMiwgMjAwLCAyMTksIDE3MCwgNTAsIDIyMiwgMjAwLCAyNDgsIDYxLCAKKyAgICA1MCwgMjIyLCAyMDAsIDIyNCwgOSwgNTAsIDIyMiwgMjAwLCAyMjAsIDEzMSwgNTAsIDIyMiwgMjAwLCAyNDYsIDY4LCA1MCwgCisgICAgMjIyLCAyMDAsIDI1MywgMjQ2LCA1MCwgMjIyLCAyMDAsIDI1MCwgMTc5LCA1MCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyMjUsIDIxNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjUsIDI3LCAyNDEsIDI0MiwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyMTcsIDQ2LCAyNDEsIDI0MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDI1NSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyNTAsIDEwOSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTEsIDIyMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNDEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDMsIDkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxNiwgCisgICAgMTE3LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDc1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MSwgMTc3LCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDIyMCwgMzEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyNTIsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjMxLCAxODksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMxLCAxNDEsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjIxLCAyMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAyNDMsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjUxLCAxOTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyMzksIDIyNSwgMzgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjQ3LCAxNDEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyMzEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE5LCAKKyAgICA4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDcxLCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDIyMCwgMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQwLCAyNTUsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjQxLCAxODUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxMjAsIDIzMywgNDIsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyMzIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIzLCAxNTYsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjQ1LCAyMzgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ2LCAxMTUsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjE1LCAxMDYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUyLCA3NCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyMjUsIDM5LCAyMTUsIDIzNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTMsIDE1OSwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyMjYsIDIyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyMiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMiwgCisgICAgMjMwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNiwgMTE5LCAyNTIsIDE5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNDQsIDU2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MiwgMTQ1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxOCwgCisgICAgMTIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDQsIDI1MywgMTc2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMiwgMzIsIAorICAgIDI1MiwgMTU2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDM4LCAyMjYsIDI1MiwgOTEsIDIzMiwgNjUsIDEsIDYxLCAyMzIsIAorICAgIDY1LCAxLCA3NiwgMjMyLCA2NSwgMSwgMjUzLCAxNjYsIDIzMiwgNjUsIDEsIDI1MiwgMjcsIDIzMiwgNjUsIDEsIDI0MywgCisgICAgMjA5LCAyMzIsIDY1LCAxLCAyNDksIDY4LCAyMzIsIDY1LCAxLCA3NCwgMjMyLCA2NSwgMSwgMjEyLCA5OCwgMjMyLCA2NSwgCisgICAgMSwgMjEwLCAxNTksIDIzMiwgNjUsIDEsIDIxNiwgMjExLCAyMzIsIDY1LCAxLCAyMzUsIDE1MCwgMjMyLCA2NSwgMSwgMjM1LCAKKyAgICAyOSwgMjMyLCA2NSwgMSwgMjI0LCA5OSwgMjMyLCA2NSwgMSwgMTU2LCAyMzIsIDY1LCAxLCAxOTQsIDIzMiwgNjUsIDEsIAorICAgIDIzMCwgMzAsIDIzMiwgNjUsIDEsIDIzMCwgMTcxLCAyMzIsIDY1LCAxLCAyMjgsIDExNiwgMjMyLCA2NSwgMSwgNjksIDIzMiwgCisgICAgNjUsIDEsIDIyNiwgMTA5LCAyMzIsIDY1LCAxLCAyMzQsIDUzLCAyMzIsIDY1LCAxLCAxNTMsIDIzMiwgNjUsIDEsIDIyMiwgCisgICAgOTMsIDIzMiwgNjUsIDEsIDIxNywgMTUzLCAyMzIsIDY1LCAxLCAyMTUsIDE2MCwgMjMyLCA2NSwgMSwgMjU0LCAxMzEsIAorICAgIDIzMiwgNjUsIDEsIDI0NSwgMTU4LCAyMzIsIDY1LCAxLCAyNDIsIDY3LCAyMzIsIDY1LCAxLCAyMTEsIDE3OCwgMjUwLCAKKyAgICAyNDUsIDEsIDYxLCAyNTAsIDI0NSwgMSwgMjI2LCA5NSwgMjUwLCAyNDUsIDEsIDI0OSwgNjgsIDI1MCwgMjQ1LCAxLCAxNTYsIAorICAgIDI1MCwgMjQ1LCAxLCAyMTQsIDExNiwgMjUwLCAyNDUsIDEsIDE1MywgMjUwLCAyNDUsIDEsIDIzMywgNjgsIDI1MCwgMjQ1LCAKKyAgICAxLCAyNTUsIDg0LCAyNTAsIDI0NSwgMSwgMjI0LCA5OSwgMjUwLCAyNDUsIDEsIDI1MywgMTY2LCAyNTAsIDI0NSwgMSwgCisgICAgMTk0LCAyNTAsIDI0NSwgMSwgNzgsIDI1MCwgMjQ1LCAxLCAyNDgsIDIzMSwgMjUwLCAyNDUsIDEsIDIxNywgMTUzLCAyNTAsIAorICAgIDI0NSwgMSwgMjIwLCAxMDYsIDI1MCwgMjQ1LCAxLCAyMjAsIDEwNSwgMjUwLCAyNDUsIDEsIDIyMiwgOTMsIDI1MCwgMjQ1LCAKKyAgICAxLCAyNTEsIDczLCAyNTAsIDI0NSwgMSwgNjksIDI1MCwgMjQ1LCAxLCAyMjgsIDExNiwgMjUwLCAyNDUsIDEsIDIxMSwgCisgICAgMTc4LCAyNTAsIDI0NSwgMSwgMjMwLCAzMCwgMjUwLCAyNDUsIDEsIDIxNSwgMTU5LCAyNTAsIDI0NSwgMSwgMjI2LCAxMDksIAorICAgIDI1MCwgMjQ1LCAxLCAyMTgsIDIyOCwgMjUwLCAyNDUsIDEsIDc0LCAyNTAsIDI0NSwgMSwgNzYsIDI1MCwgMjQ1LCAxLCAKKyAgICAyMTQsIDExMywgMjUwLCAyNDUsIDEsIDIzNSwgMjksIDI1MCwgMjQ1LCAxLCAyMzUsIDIwLCAyNTAsIDI0NSwgMSwgMjI5LCAKKyAgICAxNTUsIDI1MCwgMjQ1LCAxLCAyMTQsIDExOCwgMjUwLCAyNDUsIDEsIDI0MywgMjA5LCAyNTAsIDI0NSwgMSwgMjQzLCAxNDQsIAorICAgIDI1MCwgMjQ1LCAxLCAyMTgsIDE3MCwgMjUwLCAyNDUsIDEsIDIxOCwgMTY5LCAyNTAsIDI0NSwgMSwgMjI5LCA4NCwgMjUwLCAKKyAgICAyNDUsIDEsIDIzNiwgNDAsIDI1MCwgMjQ1LCAxLCAyNTEsIDcyLCAyNTAsIDI0NSwgMSwgMjE1LCAxNjAsIDI1MCwgMjQ1LCAKKyAgICAxLCAyMTQsIDExNSwgMjUwLCAyNDUsIDEsIDIyMiwgMTgyLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzQsIDI1MCwgMjQ1LCAxLCAKKyAgICAyMzEsIDEzMywgMjUwLCAyNDUsIDEsIDIzMSwgMTMyLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzEsIDI1MCwgMjQ1LCAxLCAyMzMsIAorICAgIDY3LCAyNTAsIDI0NSwgMSwgMjQ1LCAyNDIsIDI1MCwgMjQ1LCAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAKKyAgICAxLCAyNTIsIDgzLCA1NSwgMzIsIDEsIDIzNCwgMTg4LCA1NSwgMzIsIDEsIDI0OCwgOTgsIDU1LCAzMiwgMSwgNzYsIDU1LCAKKyAgICAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgNTUsIDMyLCAxLCAyNDEsIDI0NSwgNTUsIDMyLCAxLCAyMTYsIAorICAgIDE5NiwgNTUsIDMyLCAxLCA3NCwgNTUsIDMyLCAxLCAxNzYsIDU1LCAzMiwgMSwgMjQ1LCAxODIsIDU1LCAzMiwgMSwgMjQ1LCAKKyAgICAxNjcsIDU1LCAzMiwgMSwgMjQ1LCAxNTgsIDU1LCAzMiwgMSwgMjQ1LCA4MywgNTUsIDMyLCAxLCA3OCwgNTUsIDMyLCAxLCAKKyAgICAyMjUsIDIyNCwgNTUsIDMyLCAxLCAyMjAsIDY1LCA1NSwgMzIsIDEsIDIzMywgMjIzLCA1NSwgMzIsIDEsIDI0NSwgMTAwLCAKKyAgICA1NSwgMzIsIDEsIDI0NSwgOTAsIDU1LCAzMiwgMSwgMjE3LCAyMywgNTUsIDMyLCAxLCA2OSwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE4NSwgNTUsIDMyLCAxLCAyMjUsIDEzOSwgNTUsIDMyLCAxLCAyMzQsIDEyNSwgNTUsIDMyLCAxLCAyNDUsIDIxMCwgNTUsIAorICAgIDMyLCAxLCAyNDUsIDkyLCA1NSwgMzIsIDEsIDI1MCwgMTM5LCA1NSwgMzIsIDEsIDIzNiwgNDAsIDU1LCAzMiwgMSwgMjE0LCAKKyAgICAxMTgsIDU1LCAzMiwgMjI3LCAyMDIsIDExMSwgNTUsIDMyLCAyMjcsIDIwMiwgMTkwLCA1NSwgMzIsIDIyNywgMjAyLCAyMTYsIAorICAgIDI0OCwgNTUsIDMyLCAyMjcsIDIwMiwgMjQ0LCAxMjIsIDI0MiwgMTYwLCAxLCAyNTQsIDIxMywgMjQyLCAxNjAsIDEsIDI1MiwgCisgICAgMTcxLCAyNDIsIDE2MCwgMSwgMjQyLCAyMTgsIDI0MiwgMTYwLCAxLCAyNDgsIDIxMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjA5LCAKKyAgICAyNDIsIDE2MCwgMSwgMjI0LCA4MiwgMjQyLCAxNjAsIDEsIDIzNSwgMTYxLCAyNDIsIDE2MCwgMSwgMjQyLCA0NiwgMjQyLCAKKyAgICAxNjAsIDEsIDIxNiwgMTU5LCAyNDIsIDE2MCwgMSwgMjQ1LCAxOTEsIDI0MiwgMTYwLCAxLCAyMzMsIDE5NiwgMjQyLCAxNjAsIAorICAgIDEsIDIzMywgMTE5LCAyNDIsIDE2MCwgMSwgMjMxLCAxODQsIDI0MiwgMTYwLCAxLCAyMjksIDE4OSwgMjQyLCAxNjAsIDEsIAorICAgIDIzNSwgMTI1LCAyNDIsIDE2MCwgMSwgMjE0LCAxMzYsIDI0MiwgMTYwLCAxLCAyMjYsIDczLCAyNDIsIDE2MCwgMSwgMjI4LCAKKyAgICAyMDAsIDI0MiwgMTYwLCAxLCAyMjMsIDE2OCwgMjQyLCAxNjAsIDEsIDIyMSwgMjIwLCAyNDIsIDE2MCwgMSwgMjE3LCA1LCAKKyAgICAyNDIsIDE2MCwgMSwgMjExLCAyMzQsIDI0MiwgMTYwLCAxLCAyNDQsIDE4NiwgMjQyLCAxNjAsIDEsIDIzNiwgNDQsIDI0MiwgCisgICAgMTYwLCAxLCAyNDAsIDIwNiwgMjQyLCAxNjAsIDEsIDIyNiwgMTQzLCAyNDIsIDE2MCwgMSwgMjI4LCAyMDUsIDI0MCwgMjE3LCAKKyAgICAyMTQsIDIwOSwgMSwgMjU0LCAxNTUsIDIxNCwgMjA5LCAxLCAyNTIsIDM0LCAyMTQsIDIwOSwgMSwgMjQzLCAxMTUsIDIxNCwgCisgICAgMjA5LCAxLCAyMzQsIDEzOCwgMjE0LCAyMDksIDEsIDI0OCwgNjIsIDIxNCwgMjA5LCAxLCAyNDEsIDc1LCAyMTQsIDIwOSwgCisgICAgMSwgMjExLCAyMjcsIDIxNCwgMjA5LCAxLCAyMTAsIDg1LCAyMTQsIDIwOSwgMSwgMjQwLCAyNDgsIDIxNCwgMjA5LCAxLCAKKyAgICAyMTYsIDIzMSwgMjE0LCAyMDksIDEsIDIxMCwgMjMzLCAyMTQsIDIwOSwgMSwgMjM1LCAwLCAyMTQsIDIwOSwgMSwgMjIwLCAKKyAgICAyMiwgMjE0LCAyMDksIDEsIDIzMywgMTA0LCAyMTQsIDIwOSwgMSwgMjMxLCA3MCwgMjE0LCAyMDksIDEsIDI0OCwgMjksIAorICAgIDIxNCwgMjA5LCAxLCAyMjcsIDE5OCwgMjE0LCAyMDksIDEsIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI1MCwgMjE0LCAKKyAgICAyMDksIDEsIDI1NCwgMjA1LCAyMTQsIDIwOSwgMSwgMjI0LCAxNTMsIDIxNCwgMjA5LCAxLCAyMjIsIDI3LCAyMTQsIDIwOSwgCisgICAgMSwgMjI0LCAzOCwgMjE0LCAyMDksIDEsIDIyMywgMTQ3LCAyMTQsIDIwOSwgMSwgMjE2LCAyMDAsIDIxNCwgMjA5LCAxLCAKKyAgICAyNDIsIDI1MSwgMjE0LCAyMDksIDEsIDExMiwgMjE0LCAyMDksIDEsIDc0LCAyMTQsIDIwOSwgMSwgNjksIDIxNCwgMjA5LCAKKyAgICAxLCAyMTgsIDE4MSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1LCA2MSwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCA3NCwgNTUsIDIyNSwgMTcyLCA1LCA2OSwgNTUsIDIyNSwgMTcyLCA1LCAxNzYsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjMzLCAyMjMsIDU1LCAyMjUsIDE3MiwgNSwgMjQzLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjQyLCAxMjAsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE3MiwgNSwgMjUxLCA0MSwgNTUsIDIyNSwgMTcyLCA1LCAyMzUsIDE0NywgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAyMzUsIDExNCwgNTUsIDIyNSwgMTcyLCA1LCAyMTcsIDEwNiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMTUsIDExOSwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIyOSwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDExLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDI0NiwgODYsIDU1LCAyMjUsIDE3MiwgNSwgMjE2LCAyMDksIDU1LCAyMjUsIDE3MiwgNSwgMTkxLCA1NSwgCisgICAgMjI1LCAxNzIsIDUsIDI1MiwgMTk5LCA1NSwgMjI1LCAxNzIsIDUsIDI0NCwgMjA0LCA1NSwgMjI1LCAxNzIsIDUsIDE5OCwgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAyMjcsIDI0MiwgNTUsIDIyNSwgMTcyLCA1LCAxODYsIDU1LCAyMjUsIDE3MiwgNSwgMjMwLCAKKyAgICAyMzUsIDU1LCAyMjUsIDE3MiwgNSwgMjMwLCAxMDcsIDU1LCAyMjUsIDE3MiwgNSwgMTkyLCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNCwgMjcsIDU1LCAyMjUsIDE3MiwgNSwgMjEzLCAxNzYsIDU1LCAyMjUsIDE3MiwgNSwgMjA1LCA1NSwgMjI1LCAxNzIsIAorICAgIDUsIDIyMiwgMTQyLCA1NSwgMjI1LCAxNzIsIDUsIDIzMywgMTQxLCA1NSwgMjI1LCAxNzIsIDUsIDIwNiwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTAsIDExNiwgNTUsIDIyNSwgMTcyLCA1LCAyMjAsIDEwNCwgNTUsIDIyNSwgMTcyLCA1LCAyMTgsIDIyNSwgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAxNjIsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAxOTQsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAKKyAgICAxOTMsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgMjExLCAxNDIsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjQ4LCAyMDgsIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAyMDcsIDU1LCAyMjUsIDE3MiwgNSwgMjUyLCAxNzgsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUxLCA5MywgNTUsIDIyNSwgMTcyLCAyMTEsIDIwOSwgMjQ3LCAxODAsIDU1LCAyMjUsIDE3MiwgNTQsIAorICAgIDExMSwgNTUsIDIyNSwgMTcyLCA1NCwgMTA1LCA1NSwgMjI1LCAxNzIsIDU0LCAyMTYsIDI0OCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMjE1LCA3MywgNTUsIDIyNSwgMTcyLCA1NCwgMjQwLCAyMTcsIDE4MSwgNiwgMSwgMjAwLCA3NCwgMTgxLCA2LCAxLCAyMDAsIAorICAgIDc2LCAxODEsIDYsIDEsIDIwMCwgNjEsIDE4MSwgNiwgMSwgMjAwLCAyNTQsIDIxOCwgMTgxLCA2LCAxLCAyMDAsIDc4LCAKKyAgICAxODEsIDYsIDEsIDIwMCwgMjI2LCAxODcsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDc0LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAKKyAgICA3NiwgMTgxLCA2LCAxLCAyMTksIDI1MywgNjEsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDI1NCwgMjE4LCAxODEsIDYsIDEsIAorICAgIDIxOSwgMjUzLCA3OCwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjI2LCAxODcsIDE4MSwgNiwgMSwgMjUzLCAxNzUsIDE4MSwgNiwgCisgICAgMSwgMjI2LCAxMjAsIDE4MSwgNiwgMSwgMjExLCAxOTUsIDE4MSwgNiwgMSwgMjExLCA0NCwgMTgxLCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxODEsIDYsIDEsIDIyNSwgMjE0LCAxODEsIDYsIDEsIDI1MiwgNzQsIDE4MSwgNiwgMSwgMjE3LCAxMiwgMTgxLCA2LCAxLCAKKyAgICAyNDgsIDg1LCAxODEsIDYsIDEsIDI1MCwgMTM2LCAxODEsIDYsIDEsIDIzNSwgMTMwLCAxODEsIDYsIDEsIDIzNCwgMTk1LCAKKyAgICAxODEsIDYsIDEsIDI0MywgOTAsIDE4MSwgNiwgMSwgMjQ1LCAyMTAsIDE4MSwgNiwgMSwgMjEzLCAyNTAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCA2NywgMTgxLCA2LCAxLCAyMTYsIDE5NSwgMTgxLCA2LCAxLCAyNDUsIDkwLCAxODEsIDYsIDEsIDIxMCwgOTIsIAorICAgIDE4MSwgNiwgMSwgMjQ1LCA4MywgMTgxLCA2LCAxLCAyMTAsIDczLCAxODEsIDYsIDEsIDI0NSwgMTAwLCAxODEsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAxODEsIDYsIDEsIDI0NSwgMTY3LCAxODEsIDYsIDEsIDI0NSwgMTU4LCAxODEsIDYsIDEsIDI0NSwgMTQ2LCAKKyAgICAxODEsIDYsIDEsIDIyNiwgMjIzLCAxODEsIDYsIDEsIDI0NSwgNDYsIDE4MSwgNCwgMSwgMjAwLCA3NCwgMTgxLCA0LCAxLCAKKyAgICAyMDAsIDc2LCAxODEsIDQsIDEsIDIwMCwgNjEsIDE4MSwgNCwgMSwgMjAwLCAyNTQsIDIxOCwgMTgxLCA0LCAxLCAyMDAsIAorICAgIDc4LCAxODEsIDQsIDEsIDIwMCwgMjI2LCAxODcsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDc0LCAxODEsIDQsIDEsIDIxOSwgCisgICAgMjUzLCA3NiwgMTgxLCA0LCAxLCAyMTksIDI1MywgNjEsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDI1NCwgMjE4LCAxODEsIDQsIAorICAgIDEsIDIxOSwgMjUzLCA3OCwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjI2LCAxODcsIDE4MSwgNCwgMSwgMjUzLCAxNzUsIDE4MSwgCisgICAgNCwgMSwgMjI2LCAxMjAsIDE4MSwgNCwgMSwgMjExLCAxOTUsIDE4MSwgNCwgMSwgMjExLCA0NCwgMTgxLCA0LCAxLCAyNDIsIAorICAgIDY3LCAxODEsIDQsIDEsIDIyNSwgMjE0LCAxODEsIDQsIDEsIDI1MiwgNzQsIDE4MSwgNCwgMSwgMjE3LCAxMiwgMTgxLCA0LCAKKyAgICAxLCAyNDgsIDg1LCAxODEsIDQsIDEsIDI1MCwgMTM2LCAxODEsIDQsIDEsIDIzNSwgMTMwLCAxODEsIDQsIDEsIDIzNCwgCisgICAgMTk1LCAxODEsIDQsIDEsIDI0MywgOTAsIDE4MSwgNCwgMSwgMjQ1LCAyMTAsIDE4MSwgNCwgMSwgMjEzLCAyNTAsIDE4MSwgCisgICAgNCwgMSwgMjQ1LCA2NywgMTgxLCA0LCAxLCAyMTYsIDE5NSwgMTgxLCA0LCAxLCAyNDUsIDkwLCAxODEsIDQsIDEsIDIxMCwgCisgICAgOTIsIDE4MSwgNCwgMSwgMjQ1LCA4MywgMTgxLCA0LCAxLCAyMTAsIDczLCAxODEsIDQsIDEsIDI0NSwgMTAwLCAxODEsIDQsIAorICAgIDEsIDI0NSwgMTgyLCAxODEsIDQsIDEsIDI0NSwgMTY3LCAxODEsIDQsIDEsIDI0NSwgMTU4LCAxODEsIDQsIDEsIDI0NSwgCisgICAgMTQ2LCAxODEsIDQsIDEsIDIyNiwgMjIzLCAxODEsIDQsIDEsIDI0NSwgNDYsIDIyMCwgNzEsIDEsIDIyNSwgMjEyLCAyMjAsIAorICAgIDcxLCAxLCAyMTYsIDYsIDIyMCwgNzEsIDEsIDIzNCwgOTcsIDIyMCwgNzEsIDEsIDI0NCwgMTU1LCAyMjAsIDcxLCAxLCAKKyAgICAyMTYsIDE3MywgMjIwLCA3MSwgMSwgMjE5LCA2MCwgMjIwLCA3MSwgMSwgMjE4LCAxNSwgMjIwLCA3MSwgMSwgMjUwLCA2OSwgCisgICAgMjIwLCA3MSwgMSwgMjExLCA0NiwgMjIwLCA3MSwgMSwgMjQwLCAyMTYsIDIyMCwgNzEsIDEsIDI1MiwgMTMsIDIyMCwgNzEsIAorICAgIDEsIDI0OCwgOTcsIDIyMCwgNzEsIDEsIDI0MywgMTI4LCAyMjAsIDcxLCAxLCAyMTMsIDEyMywgMjIwLCA3MSwgMSwgMjE2LCAKKyAgICAxNzcsIDIyMCwgNzEsIDEsIDIxMCwgMjEsIDIyMCwgNzEsIDEsIDIzMSwgOTQsIDIyMCwgNzEsIDEsIDIzNSwgNTUsIDIyMCwgCisgICAgNzEsIDEsIDIxMSwgMjI1LCAyMjAsIDcxLCAxLCAyNDIsIDU1LCAyMjAsIDcxLCAxLCAyMzIsIDE0OCwgMjIwLCA3MSwgMSwgCisgICAgMjMwLCAxOTQsIDIyMCwgNzEsIDEsIDIzNiwgNDcsIDIyMCwgNzEsIDEsIDI0NSwgMjA5LCAyMjAsIDcxLCAxLCAyNTMsIAorICAgIDIzOSwgMjIwLCA3MSwgMSwgMjU1LCAwLCAyMjAsIDcxLCAxLCAyMjYsIDIwMCwgMjIwLCA3MSwgMSwgMjExLCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIyNiwgMTM0LCAyMjAsIDcxLCAxLCAyNTQsIDIxOCwgMjIwLCA3MSwgMSwgMjIyLCAyMTAsIDIyMCwgNzEsIDEsIAorICAgIDIyNywgMTk4LCAyMjAsIDcxLCAxLCAyNDUsIDIyNSwgMjIwLCA3MSwgMSwgMjU0LCAyMjMsIDIyMCwgNzEsIDEsIDI0MCwgCisgICAgMTE4LCAyMjAsIDcxLCAxLCAyMTQsIDE2MywgMjIwLCA3MSwgMSwgMjI3LCAyLCAyMjAsIDcxLCAxLCAyMjYsIDE4MCwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAyMjIsIDIyMCwgNzEsIDEsIDI1MywgMTc4LCAyMjAsIDcxLCAxLCAyNTQsIDI3LCAyMjAsIDcxLCAxLCAKKyAgICAyMjYsIDE2MiwgMjIwLCA3MSwgMSwgMjU0LCAyMDEsIDIyMCwgNzEsIDEsIDI0NSwgOTQsIDIyMCwgNzEsIDEsIDI1NCwgNSwgCisgICAgMjIwLCA3MSwgMSwgMjQ1LCAyMzUsIDIyMCwgNzEsIDEsIDI0MCwgMTI1LCAyMjAsIDcxLCAxLCAyMTEsIDEzLCAyMjYsIAorICAgIDE0NSwgMSwgMjU0LCAxNzksIDIyNiwgMTQ1LCAxLCAyNTIsIDE5OSwgMjI2LCAxNDUsIDEsIDIxNywgMTA2LCAyMjYsIDE0NSwgCisgICAgMSwgMjM1LCAxNDcsIDIyNiwgMTQ1LCAxLCAyMTEsIDE2NSwgMjI2LCAxNDUsIDEsIDIzNCwgMTM4LCAyMjYsIDE0NSwgMSwgCisgICAgMjQ4LCA4NCwgMjI2LCAxNDUsIDEsIDIwNSwgMjI2LCAxNDUsIDEsIDIwNiwgMjI2LCAxNDUsIDEsIDIyMCwgMjgsIDIyNiwgCisgICAgMTQ1LCAxLCAyNDgsIDMzLCAyMjYsIDE0NSwgMSwgMjUwLCAyMjMsIDIyNiwgMTQ1LCAxLCAyNDMsIDE0MiwgMjI2LCAxNDUsIAorICAgIDEsIDI0NCwgMjA0LCAyMjYsIDE0NSwgMSwgMjI0LCA4OSwgMjI2LCAxNDUsIDEsIDIzNSwgMTUsIDIyNiwgMTQ1LCAxLCAKKyAgICAyMzMsIDEzNiwgMjI2LCAxNDUsIDEsIDIzMCwgMjA1LCAyMjYsIDE0NSwgMSwgMjI3LCAxODIsIDIyNiwgMTQ1LCAxLCAyMTIsIAorICAgIDMwLCAyMjYsIDE0NSwgMSwgMTYyLCAyMjYsIDE0NSwgMSwgMTkyLCAyMjYsIDE0NSwgMSwgNjEsIDIyNiwgMTQ1LCAxLCA3NiwgCisgICAgMjI2LCAxNDUsIDEsIDc0LCAyMjYsIDE0NSwgMSwgNzgsIDIyNiwgMTQ1LCAxLCA2OSwgMjI2LCAxNDUsIDEsIDI1NSwgODIsIAorICAgIDIyNiwgMTQ1LCAxLCAyNDUsIDIxNywgMjI2LCAxNDUsIDEsIDIyNiwgMTg3LCAyMjYsIDE0NSwgMjEsIDIxMCwgODYsIDIyNiwgCisgICAgMTQ1LCAyMSwgMTExLCAyMjYsIDE0NSwgMjEsIDEwNSwgMjI2LCAxNDUsIDIxLCAxNTgsIDIyNiwgMTQ1LCAyMSwgMTYxLCAKKyAgICAyMjYsIDE0NSwgMjEsIDE5MCwgMjI2LCAxNDUsIDIxLCAxOTUsIDIyNiwgMTQ1LCAyMSwgMTk5LCAyMjYsIDE0NSwgMjEsIAorICAgIDE5NiwgMjI2LCAxNDUsIDIxLCAyMDEsIDI0OSwgNzUsIDMsIDYxLCAyNDksIDc1LCAzLCA3NiwgMjQ5LCA3NSwgMywgNzQsIAorICAgIDI0OSwgNzUsIDMsIDc4LCAyNDksIDc1LCAzLCA2OSwgMjQ5LCA3NSwgMywgMjM1LCAxNDcsIDI0OSwgNzUsIDMsIDIzNSwgCisgICAgNzQsIDI0OSwgNzUsIDMsIDE3NiwgMjQ5LCA3NSwgMywgMjM0LCAxODgsIDI0OSwgNzUsIDMsIDIzNCwgOTgsIDI0OSwgNzUsIAorICAgIDMsIDIzNCwgMzQsIDI0OSwgNzUsIDMsIDIzMywgMjIzLCAyNDksIDc1LCAzLCAyMzMsIDE0MSwgMjQ5LCA3NSwgMywgMjMzLCAKKyAgICA2NCwgMjQ5LCA3NSwgMywgMjMyLCAyNDcsIDI0OSwgNzUsIDMsIDIzMiwgMTYyLCAyNDksIDc1LCAzLCAyMzIsIDEwMywgCisgICAgMjQ5LCA3NSwgMywgMTg2LCAyNDksIDc1LCAzLCAyMzEsIDk2LCAyNDksIDc1LCAzLCAyMzAsIDIzNSwgMjQ5LCA3NSwgMywgCisgICAgMjMwLCAxNjYsIDI0OSwgNzUsIDMsIDIzMCwgMTA3LCAyNDksIDc1LCAzLCAxOTgsIDI0OSwgNzUsIDMsIDIyOSwgMTEyLCAKKyAgICAyNDksIDc1LCAzLCAyMjgsIDIzOCwgMjQ5LCA3NSwgMywgMjI4LCA3OSwgMjQ5LCA3NSwgMywgMjI3LCAyNDIsIDI0OSwgNzUsIAorICAgIDMsIDE5MSwgMjQ5LCA3NSwgMywgMjI1LCAyMjQsIDI0OSwgNzUsIDMsIDIyNSwgMTExLCAyNDksIDc1LCAzLCAyMjUsIDE5LCAKKyAgICAyNDksIDc1LCAzLCAyMjQsIDE1MywgMjQ5LCA3NSwgMywgMjA1LCAyNDksIDc1LCAzLCAyMjMsIDEzMSwgMjQ5LCA3NSwgMywgCisgICAgMjIzLCAzOCwgMjQ5LCA3NSwgMywgMjIyLCAyMTMsIDI0OSwgNzUsIDMsIDIyMiwgMTQyLCAyNDksIDc1LCAzLCAyMDYsIAorICAgIDI0OSwgNzUsIDMsIDIyMSwgMTgzLCAyNDksIDc1LCAzLCAyMTksIDE5MywgMjQ5LCA3NSwgMywgMjE5LCA2MCwgMjQ5LCA3NSwgCisgICAgMywgMjE4LCA4NCwgMjQ5LCA3NSwgMywgMjE3LCAxMDYsIDI0OSwgNzUsIDMsIDIxNywgMjMsIDI0OSwgNzUsIDMsIDIxNiwgCisgICAgMTE4LCAyNDksIDc1LCAzLCAxMTIsIDI0OSwgNzUsIDMsIDIxNSwgMTE5LCAyNDksIDc1LCAzLCAyMTIsIDY1LCAyNDksIDc1LCAKKyAgICAzLCAyMTIsIDIyLCAyNDksIDc1LCAzLCAyMTEsIDI1MCwgMjQ5LCA3NSwgMywgMjExLCAyMjcsIDI0OSwgNzUsIDMsIDIxMSwgCisgICAgMTY1LCAyNDksIDc1LCAzLCAyMTEsIDE2MiwgMjQ5LCA3NSwgMywgMjEwLCAxMTYsIDI0OSwgNzUsIDMsIDIxMCwgMjMsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjU0LCAxNzcsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUyLCAzMywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCAxLCAyNDIsIDIwOCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNDgsIDE5NiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNDEsIAorICAgIDI0NSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTIsIDMwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMCwgOTcsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgMSwgMjQxLCAyMDIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjE2LCAyMjcsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjEwLCAyMzIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjM0LCAyMzEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjMzLCA5OSwgMjM2LCAKKyAgICA4LCAyNTQsIDM1LCAxLCAyMzEsIDcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNywgMTk4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIAorICAgIDIyMSwgMjUxLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1MywgMTcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNSwgMjI0LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyMiwgMjYsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI0LCAzNywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCAxLCAyMjMsIDcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyMCwgMjIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjE3LCAzNywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAyMjEsIDE3NSwgNTAsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDExMSwgMjM2LCA4LCAyNTQsIDM1LCAKKyAgICA1NCwgMTA1LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxNTgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ4LCAyMzYsIDgsIAorICAgIDI1NCwgMzUsIDU0LCAyMTUsIDczLCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAyMTYsIDI0OSwgMjE2LCAxNDgsIDIyNSwgMTIyLCAKKyAgICAxLCAyNTQsIDE3NCwgMjI1LCAxMjIsIDEsIDI1MiwgMzYsIDIyNSwgMTIyLCAxLCAyNDMsIDExNiwgMjI1LCAxMjIsIDEsIAorICAgIDI0OCwgNjQsIDIyNSwgMTIyLCAxLCAyNDEsIDI0NSwgMjI1LCAxMjIsIDEsIDIxMiwgMzcsIDIyNSwgMTIyLCAxLCAyMTAsIAorICAgIDExMCwgMjI1LCAxMjIsIDEsIDI0MSwgMjA0LCAyMjUsIDEyMiwgMSwgMjE2LCAyMzEsIDIyNSwgMTIyLCAxLCAyMTAsIDIzMywgCisgICAgMjI1LCAxMjIsIDEsIDIzNSwgMCwgMjI1LCAxMjIsIDEsIDIzMywgMTA1LCAyMjUsIDEyMiwgMSwgMjMxLCA3MCwgMjI1LCAKKyAgICAxMjIsIDEsIDIyNywgMTk4LCAyMjUsIDEyMiwgMSwgMjIwLCAxNDYsIDIyNSwgMTIyLCAxLCAyNTQsIDIwNSwgMjI1LCAxMjIsIAorICAgIDEsIDIyNSwgMjI0LCAyMjUsIDEyMiwgMSwgMjIyLCAyNywgMjI1LCAxMjIsIDEsIDIyNCwgNDIsIDIyNSwgMTIyLCAxLCAKKyAgICAyMjIsIDE5MSwgMjI1LCAxMjIsIDEsIDIyMCwgMjIsIDIyNSwgMTIyLCAxLCAyMTcsIDQyLCAyMjUsIDEyMiwgNTQsIDExMSwgCisgICAgMjI1LCAxMjIsIDU0LCAyMTYsIDI0OCwgMjI1LCAxMjIsIDU0LCAyMTUsIDczLCAyMjUsIDEyMiwgNTQsIDEyMywgMjQwLCAKKyAgICAyMTcsIDIyNSwgMTIyLCA1NCwgMTA1LCAyMjUsIDEyMiwgNTQsIDE1OCwgMjI1LCAxMjIsIDIxMSwgMjA5LCAyMjAsIDEzOSwgCisgICAgMjMyLCA2NCwgMSwgNjEsIDIzMiwgNjQsIDEsIDI1MywgMTY2LCAyMzIsIDY0LCAxLCAyNDMsIDIwOSwgMjMyLCA2NCwgMSwgCisgICAgMjQ5LCA2OCwgMjMyLCA2NCwgMSwgNzYsIDIzMiwgNjQsIDEsIDIxNCwgMTA1LCAyMzIsIDY0LCAxLCA3NCwgMjMyLCA2NCwgCisgICAgMSwgMjExLCAxMTcsIDIzMiwgNjQsIDEsIDIzNSwgMjksIDIzMiwgNjQsIDEsIDE1NiwgMjMyLCA2NCwgMSwgMTk0LCAyMzIsIAorICAgIDY0LCAxLCAyMzAsIDMwLCAyMzIsIDY0LCAxLCA3OCwgMjMyLCA2NCwgMSwgMTUzLCAyMzIsIDY0LCAxLCAyMTgsIDIyOCwgCisgICAgMjMyLCA2NCwgMSwgMjE3LCAxNTMsIDIzMiwgNjQsIDEsIDY5LCAyMzIsIDY0LCAxLCAyNDUsIDE0LCAyMzIsIDY0LCAxLCAKKyAgICAyMjQsIDk5LCAyMzIsIDY0LCAxLCAyMjIsIDkzLCAyMzIsIDY0LCAxLCAyMTUsIDE2MCwgMjMyLCA2NCwgMSwgMjU0LCAxMzEsIAorICAgIDIzMiwgNjQsIDEsIDI0NSwgMTU4LCAyMzIsIDY0LCAxLCAyMzIsIDY3LCAyMzIsIDY0LCAxLCAyMjgsIDExNiwgMjMyLCA2NCwgCisgICAgMSwgMjUxLCA3NCwgMjMyLCA2NCwgMjE1LCAyMjMsIDc5LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNjEsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCA3NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDc0LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzgsIDIzMSwgCisgICAgNTMsIDI0MSwgMTgxLCAxLCAxOTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTIsIDY1LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjUyLCAxOTksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyNTIsIDE5OCwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE5MSwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE4NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE5OCwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDIyOSwgMjMzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjI5LCAxMTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIAorICAgIDExMSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMywgMTkwLCAyMzEsIDUzLCAKKyAgICAyNDEsIDE4MSwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIyLCAzNSwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMSwgMTgzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTc2LCAyMzEsIDUzLCAyNDEsIAorICAgIDE4MSwgMSwgMjI0LCA5MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMTA2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgCisgICAgMjE3LCAxMDUsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAyMiwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI0OCwgMjI5LCAyMzEsIDUzLCAyNDEsIAorICAgIDE4MSwgMTYsIDIxMywgMTcwLCAyMzEsIDUzLCAyNDEsIDE4MSwgMTYsIDIxMywgMTY5LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgNjEsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCA3NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc0LCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgNzgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTIsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTIsIDY1LCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjUyLCAxOTksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAxODYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjksIDExMiwgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIwNSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIzMywgMTQxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjM0LCAxMzgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNDEsIDE5NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDIwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI1NCwgMzEsIDIwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyMSwgMTgzLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjI0LCA5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDIxNywgMTA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjE3LCAyMywgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDExMiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0OCwgMjI5LCAyMzEsIDUzLCAyNDksIDEwMiwgMjMyLCAxNTEsIDIyMiwgCisgICAgMjE5LCAyMzEsIDUzLCAyNDksIDEwMiwgMjMyLCAxNTEsIDIzNiwgMTMsIDIzNCwgMTI2LCAxLCA2MSwgMjM0LCAxMjYsIDI1LCAKKyAgICA1LCA3NCwgMjM0LCAxMjYsIDI1LCA1LCA2OSwgMjM0LCAxMjYsIDI1LCA1LCAxNDksIDE1MywgMjM0LCAxMjYsIDI1LCA1LCAKKyAgICA3NiwgMjM0LCAxMjYsIDI1LCA1LCA3OCwgMjM0LCAxMjYsIDI1LCAyMzMsIDI5LCA3OSwgMjM0LCAxMjYsIDUsIDUyLCAyMjIsIAorICAgIDIzNywgNTEsIDIzNCwgMTI2LCA1LCAyNTQsIDgzLCAyMzQsIDEyNiwgNSwgMjEzLCAxNDcsIDIzNCwgMTI2LCAxLCAxNzYsIAorICAgIDIzNCwgMTI2LCAxLCAyMzQsIDEzOCwgMjM0LCAxMjYsIDEsIDI0MywgMTQyLCAyMzQsIDEyNiwgMSwgMjQzLCAwLCAyMzQsIAorICAgIDEyNiwgMSwgMjUxLCA0MSwgMjM0LCAxMjYsIDEsIDI1MCwgMTY1LCAyMzQsIDEyNiwgMSwgMjM1LCAxNDcsIDIzNCwgMTI2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjM0LCAxMjYsIDEsIDIxNSwgMTU3LCAyMzQsIDEyNiwgMSwgMjE1LCAxNDUsIDIzNCwgMTI2LCAxLCAKKyAgICAyNDgsIDE0MywgMjM0LCAxMjYsIDEsIDI0OCwgMTI3LCAyMzQsIDEyNiwgMSwgMjI4LCAxMTUsIDIzNCwgMTI2LCAxLCAyMTcsIAorICAgIDEwNiwgMjM0LCAxMjYsIDEsIDIxNiwgMjA5LCAyMzQsIDEyNiwgMSwgMjQ4LCAyMjksIDIzNCwgMTI2LCAxLCAyNDgsIDMzLCAKKyAgICAyMzQsIDEyNiwgMSwgMTk4LCAyMzQsIDEyNiwgMSwgMTkxLCAyMzQsIDEyNiwgMSwgMjI1LCAxNTAsIDIzNCwgMTI2LCAxLCAKKyAgICAyNTIsIDE5OSwgMjM0LCAxMjYsIDEsIDI1MiwgMjYsIDIzNCwgMTI2LCAxLCAxODYsIDIzNCwgMTI2LCAxLCAxOTIsIDIzNCwgCisgICAgMTI2LCAxLCAyMDUsIDIzNCwgMTI2LCAxLCAyMzMsIDE0MSwgMjM0LCAxMjYsIDEsIDIxNCwgMjcsIDIzNCwgMTI2LCAxLCAKKyAgICAyMjAsIDEwNCwgMjM0LCAxMjYsIDEsIDIxOCwgMjI1LCAyMzQsIDEyNiwgMSwgMjA2LCAyMzQsIDEyNiwgMSwgMjEwLCAxMTYsIAorICAgIDIzNCwgMTI2LCAxLCAxNjIsIDIzNCwgMTI2LCAxLCAyMzQsIDUyLCAyMzQsIDEyNiwgMSwgMjE1LCAxMjUsIDIzNCwgMTI2LCAKKyAgICA1LCAyNTIsIDE0OSwgNDgsIDIzNCwgMTI2LCA1LCAyNTAsIDIyOSwgMjM0LCAxMjYsIDUsIDU5LCA1MSwgMjM0LCAxMjYsIAorICAgIDIxMywgMTUyLCAyMzQsIDEyNiwgMjEsIDExMSwgMjM0LCAxMjYsIDIxLCAxMDUsIDIzNCwgMTI2LCAyMSwgMTU4LCAyMzQsIAorICAgIDEyNiwgMjEsIDE2MSwgMjM0LCAxMjYsIDU0LCAyMTYsIDI0OCwgMjM0LCAxMjYsIDU0LCAyMTUsIDczLCAyMzQsIDEyNiwgCisgICAgNTQsIDEyMywgMjQwLCAyMTcsIDIzNCwgMTI2LCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNDcsIAorICAgIDEyOCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCA0LCAyNTAsIDQzLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI1MCwgNDMsIDIzNCwgCisgICAgMTI2LCAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzEsIDE4NSwgMjM0LCAxMjYsIAorICAgIDIyNCwgMTQ0LCAyMzIsIDEyMSwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjMyLCAyMTMsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDEsIAorICAgIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIzMywgOTksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDEsIDIwMiwgCisgICAgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIzMSwgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjQsIDM3LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEyLCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMCwgMjIsIDU1LCAyMTksIAorICAgIDMwLCAyNTQsIDQ2LCAxLCAyMjMsIDcwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjUyLCAzMywgNTUsIDIxOSwgMzAsIAorICAgIDI1NCwgNDYsIDEsIDIxNywgMzcsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjEsIDIyOCwgNTUsIDIxOSwgMzAsIDI1NCwgCisgICAgNDYsIDEsIDIzNCwgMjMxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjI3LCAxOTgsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAKKyAgICAxLCAyMzQsIDEyMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMiwgMjYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyMjEsIDI1MSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0NCwgMTYyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjU0LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTMsIDE2OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDI0OCwgMzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDIwOCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgCisgICAgMTk2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQyLCAyNDUsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIAorICAgIDIyNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMCwgOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDgsIDI3LCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCAyMzIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIDE5OCwgNTUsIAorICAgIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTc5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgNTQsIDExMSwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDU0LCAyNDQsIDEyMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEzMiwgMjM1LCAyNDUsIDI1MywgMTgwLCAKKyAgICAxLCA2MSwgMjUzLCAxODAsIDEsIDI1NSwgODIsIDI1MywgMTgwLCAxLCAyNTQsIDgxLCAyNTMsIDE4MCwgMSwgMjU1LCA0MSwgCisgICAgMjUzLCAxODAsIDEsIDI1NCwgMTMxLCAyNTMsIDE4MCwgMSwgMjU1LCA0MiwgMjUzLCAxODAsIDEsIDI1NCwgMjUyLCAyNTMsIAorICAgIDE4MCwgMSwgMjU0LCAyNDgsIDI1MywgMTgwLCAxLCA3NiwgMjUzLCAxODAsIDEsIDI0NSwgMjE3LCAyNTMsIDE4MCwgMSwgCisgICAgNzgsIDI1MywgMTgwLCAxLCAyMjYsIDE4NywgMjUzLCAxODAsIDEsIDc0LCAyNTMsIDE4MCwgMSwgMjM2LCA0MCwgMjUzLCAKKyAgICAxODAsIDEsIDY5LCAyNTMsIDE4MCwgMSwgMjE0LCAxMTgsIDI1MywgMTgwLCAxLCAyMzQsIDE4OCwgMjUzLCAxODAsIDEsIAorICAgIDIxMSwgMTYyLCAyNTMsIDE4MCwgMSwgMjExLCAxMjgsIDI1MywgMTgwLCAxLCAyMTEsIDEzNywgMjUzLCAxODAsIDEsIDI0MywgCisgICAgNjksIDI1MywgMTgwLCAxLCAyNDMsIDMxLCAyNTMsIDE4MCwgMSwgMjQyLCAyNDMsIDI1MywgMTgwLCAxLCAyNTAsIDE5OCwgCisgICAgMjUzLCAxODAsIDEsIDIzNSwgMTMyLCAyNTMsIDE4MCwgMSwgMjE3LCAyMywgMjUzLCAxODAsIDEsIDIxNiwgMTk2LCAyNTMsIAorICAgIDE4MCwgMSwgMjQ4LCA5OCwgMjUzLCAxODAsIDEsIDI0OCwgMjUsIDI1MywgMTgwLCAxLCAyMTUsIDE1MiwgMjUzLCAxODAsIAorICAgIDEsIDIyNSwgMjI0LCAyNTMsIDE4MCwgMSwgMjQ0LCAxNjIsIDI1MywgMTgwLCAxLCAyNTIsIDgzLCAyNTMsIDE4MCwgMSwgCisgICAgMjUyLCAyMiwgMjUzLCAxODAsIDEsIDIyOSwgNjksIDI1MywgMTgwLCAxLCAyMjgsIDI0NCwgMjUzLCAxODAsIDEsIDIyOCwgCisgICAgMjQ1LCAyNTMsIDE4MCwgMSwgMjI5LCAxMTIsIDI1MywgMTgwLCAxLCAyMjcsIDE2MCwgMjUzLCAxODAsIDEsIDIyOCwgMTEwLCAKKyAgICAyNTMsIDE4MCwgMSwgMjMxLCA5NiwgMjUzLCAxODAsIDEsIDI0MSwgMTIzLCAyNTMsIDE4MCwgMSwgMjEwLCAxNjYsIDI1MywgCisgICAgMTgwLCAxLCAyMTEsIDQ3LCAyNTMsIDE4MCwgMSwgMjEzLCAyNTUsIDI1MywgMTgwLCAxLCAyMjMsIDEzMSwgMjUzLCAxODAsIAorICAgIDEsIDIzMywgNjQsIDI1MywgMTgwLCAxLCAyMjEsIDE4MywgMjUzLCAxODAsIDEsIDIxMCwgOTQsIDI1MywgMTgwLCAxLCAKKyAgICAyMjAsIDY1LCAyNTMsIDE4MCwgMSwgMjEwLCA3NCwgMjUzLCAxODAsIDEsIDIxOSwgMjAwLCAyNTMsIDE4MCwgMSwgMjE4LCAKKyAgICAxOTUsIDI1MywgMTgwLCAxLCAyNDEsIDI0NSwgMjUzLCAxODAsIDI1NSwgMzAsIDc5LCAyMTYsIDgwLCAxMTMsIDE3MCwgCisgICAgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgNCwgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIAorICAgIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIDU5LCAxMTUsIDExMywgMTcwLCAyMjQsIAorICAgIDE0MywgMjMzLCA5MSwgMTEzLCAyMjIsIDIzNSwgMTE1LCAxMjMsIDIyMiwgMjM3LCAyMjQsIDE0MywgMjMzLCA5MSwgMTIzLCAKKyAgICAyMjIsIDIzNywgMTE1LCAxMTMsIDIyMiwgMjM1LCAyMjQsIDE0MywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjU0LCAxNzcsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MiwgMjA4LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyNDgsIDE5NiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIxMiwgMzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxMCwgOTcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MSwgMjAyLCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTYsIDIyNywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCAyMzIsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMzMsIDk5LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMzEsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjIxLCAyNTEsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1MywgMTcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjUsIDIyNCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjIyLCAyNiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI0LCAzNywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjIzLCA3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjE3LCAzNywgMjM1LCAKKyAgICAyMjUsIDIyNiwgMiwgNTQsIDExMSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIAorICAgIDE1OCwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDE2MSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCA1NCwgMjE1LCA3MywgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNSwgMjI1LCAyMjYsIAorICAgIDIsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjU0LCAxNzcsIDIzNSwgMjI1LCAyMjYsIDc2LCAKKyAgICAxLCAyNTIsIDMzLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDgsIAorICAgIDE5NiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjQ1LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjEyLCAyOSwgMjM1LCAKKyAgICAyMjUsIDIyNiwgNzYsIDEsIDIxMCwgOTcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDEsIDIwMiwgMjM1LCAyMjUsIDIyNiwgCisgICAgNzYsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCAyMzIsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAKKyAgICAyMzQsIDIzMSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMzEsIDY5LCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjI3LCAxOTgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjEsIDI1MSwgMjM1LCAyMjUsIAorICAgIDIyNiwgNzYsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjIyLCAyNiwgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDIyMCwgMjIsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTcsIDM3LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDExMSwgCisgICAgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMDUsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTU4LCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgNTQsIDE2MSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAyMTYsIDI0OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAyMTUsIAorICAgIDczLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAKKyAgICAyMTYsIDE0OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDYxLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA2MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTIsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3NCwgNTUsIDIwMiwgMSwgMjExLCAzNywgNzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDc2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNzgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIAorICAgIDIzOCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAyMzgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDM0LCA1NSwgCisgICAgMjAyLCAxLCAyMTEsIDM3LCAyNTUsIDM0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI1NCwgMjUxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjI1LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjQ2LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU1LCA4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTUsIDgsIDU1LCAyMDIsIDEsIAorICAgIDIyNiwgMTUzLCAyNTQsIDI1MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjAsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI0NSwgMjAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDE3NSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAxNzUsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzMywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyMzMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDQsIDU1LCAyMDIsIDEsIDIyNiwgCisgICAgMTUzLCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAyMzcsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIAorICAgIDE4NywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAxODcsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0MywgNTUsIAorICAgIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTY5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjcsIDU1LCAyMDIsIDEsIAorICAgIDIyNiwgMTUzLCAyNTQsIDEzMSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDI0MSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTM5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDEzOSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTU1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDE1NSwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDEyNiwgNTUsIDIwMiwgMSwgMjExLCAKKyAgICAzNywgMjU0LCAxMjMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAKKyAgICAyNDAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDExNiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTc5LCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQwLCAxMjAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjQ1LCAyMjMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDUzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDUzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjM1LCAxODgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIzNSwgMTg4LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNjMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMTYzLCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjU0LCA0OSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCA0OSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1NCwgMjM5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyNDUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzNywgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMjM5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIzOSwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI0NSwgODMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgODMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAKKyAgICAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAyMTQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzNCwgCisgICAgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE0NCwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1MiwgMTMzLCAyMjIsIDEyOSwgMjEsIDExMSwgMjIyLCAxMjksIDIxLCAxMDUsIDIyMiwgMTI5LCAKKyAgICAyMSwgMTU4LCAyMjIsIDEyOSwgMjEsIDE2MSwgMjIyLCAxMjksIDIxLCAxOTAsIDIyMiwgMTI5LCAyMSwgMTk1LCAyMjIsIAorICAgIDEyOSwgMjEsIDE5OSwgMjIyLCAxMjksIDIxLCAxOTYsIDIyMiwgMTI5LCAyMSwgMjAxLCAyMjIsIDEyOSwgNTQsIDIxNiwgCisgICAgMjQ4LCAyMjIsIDEyOSwgNTQsIDIxNSwgNzMsIDIyMiwgMTI5LCA1NCwgMjE2LCAxNjMsIDIyMiwgMTI5LCA1NCwgMjQ0LCAKKyAgICAyMywgMjIyLCAxMjksIDU0LCAyNDQsIDEyMiwgMjIyLCAxMjksIDU0LCAyMTksIDExMywgMjIyLCAxMjksIDU0LCAyMjAsIAorICAgIDExOCwgMjIyLCAxMjksIDU0LCAyNDUsIDE5MiwgMjIyLCAxMjksIDU0LCAyMjgsIDIwMCwgMjIyLCAxMjksIDU0LCAxMjMsIAorICAgIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDExMywgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTM0LCAyNDAsIDIxNywgMjIyLCAKKyAgICAxMjksIDU0LCAyNDQsIDE5LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyNDQsIDg5LCAyNDAsIDIxNywgMjIyLCAxMjksIAorICAgIDU0LCAyMTksIDEyNywgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjIwLCAxMjQsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIAorICAgIDI0NSwgMjAxLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjgsIDIwNSwgMjQwLCAyMTcsIDIyMiwgMTI5LCAyNDQsIDEwLCAKKyAgICAxMjMsIDI0MiwgMzQsIDIyMiwgMTI5LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIyMiwgMTI5LCAyNDQsIDEwLCAxMjMsIAorICAgIDIxNiwgMTY5LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMTE4LCA1LCAyNTEsIDcsIDExOCwgNSwgMjU0LCAKKyAgICA4MywgMTE4LCA1LCAyMTMsIDE0NywgMTE4LCA1LCAyMzUsIDEwOCwgMTE4LCA1LCAyMTQsIDE2MSwgMTE4LCAxLCA2MSwgCisgICAgMTE4LCAxLCAyNTUsIDgyLCAxMTgsIDEsIDc0LCAxMTgsIDEsIDIzNiwgNDAsIDExOCwgMSwgNjksIDExOCwgMSwgMjE0LCAKKyAgICAxMTgsIDExOCwgMSwgMTQ5LCAxNTMsIDExOCwgMSwgMTQ5LCAyMjIsIDE4MiwgMTE4LCAxLCAxNDksIDE1NiwgMTE4LCAxLCAKKyAgICAxNDksIDIzMiwgMTkxLCAxMTgsIDEsIDc2LCAxMTgsIDEsIDI1NCwgMjEwLCAxMTgsIDEsIDc4LCAxMTgsIDEsIDI1MywgCisgICAgMjAwLCAxMTgsIDEsIDE3NiwgMTE4LCAxLCAyMzQsIDEzOCwgMTE4LCAxLCAyNDMsIDE0MiwgMTE4LCAxLCAyNDMsIDAsIAorICAgIDExOCwgMSwgMjI5LCA4MiwgMTE4LCAxLCAyNTEsIDQxLCAxMTgsIDEsIDI1MCwgMTY1LCAxMTgsIDEsIDIzNSwgMTQ3LCAKKyAgICAxMTgsIDEsIDIzNSwgMTIwLCAxMTgsIDEsIDIyNywgMTY5LCAxMTgsIDEsIDIxNSwgMTU3LCAxMTgsIDEsIDIxNSwgMTQ1LCAKKyAgICAxMTgsIDEsIDI0OCwgMTQzLCAxMTgsIDEsIDI0OCwgMTI3LCAxMTgsIDEsIDIyOCwgMTE1LCAxMTgsIDEsIDIxNywgMTA2LCAKKyAgICAxMTgsIDEsIDIxNiwgMjA5LCAxMTgsIDEsIDI0OCwgMjI5LCAxMTgsIDEsIDI0OCwgMzMsIDExOCwgMSwgMTk4LCAxMTgsIDEsIAorICAgIDE5MSwgMTE4LCAxLCAyMjUsIDE1MCwgMTE4LCAxLCAyNTIsIDE5OSwgMTE4LCAxLCAyNTIsIDI2LCAxMTgsIDEsIDE4NiwgCisgICAgMTE4LCAxLCAxOTIsIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTQxLCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAKKyAgICAxMDQsIDExOCwgMSwgMjE4LCAyMjUsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE5MCwgMTE4LCAKKyAgICAxLCA1NSwgMzYsIDIzMiwgMTgxLCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjgsIDk3LCAKKyAgICAxMTgsIDI1LCA1LCAyNTUsIDgyLCAxMTgsIDI1LCA1LCAyNTIsIDIzLCAyNTUsIDgyLCAxMTgsIDI1LCA1LCA3NCwgMTE4LCAKKyAgICAyNSwgNSwgMjM2LCA0MCwgMTE4LCAyNSwgNSwgNjksIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIAorICAgIDE1MywgMTE4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDExOCwgMjUsIDUsIDc2LCAxMTgsIDI1LCA1LCAyNTQsIDIxMCwgMTE4LCAyNSwgNSwgNzgsIDExOCwgMjUsIAorICAgIDUsIDI1MywgMjAwLCAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTg2LCAxMTgsIDUyLCAyNDgsIDE4NiwgMTE4LCAyMjQsIAorICAgIDE0NCwgMjQ3LCAxMjgsIDExOCwgMjI0LCAxNDQsIDUyLCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAyMTksIDExOCwgCisgICAgMjI0LCAxNDQsIDI0OSwgMTQ1LCAxMzAsIDExOCwgMjI0LCAxNDQsIDIzMiwgMTIxLCAxMTgsIDU0LCAxMTEsIDExOCwgNTQsIAorICAgIDEwNSwgMTE4LCA1NCwgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE5MCwgMTE4LCA1NCwgMTk1LCAxMTgsIDU0LCAKKyAgICAxOTksIDExOCwgNTQsIDE5NiwgMTE4LCA1NCwgMjAxLCAxMTgsIDU0LCAyMTYsIDI0OCwgMTE4LCA1NCwgMjE1LCA3MywgCisgICAgMTE4LCA1NCwgMjE2LCAxNjMsIDExOCwgNTQsIDI0NCwgMjMsIDExOCwgNTQsIDI0NCwgMTIyLCAxMTgsIDU0LCAyMTksIAorICAgIDExMywgMTE4LCA1NCwgMjIwLCAxMTgsIDExOCwgNTQsIDI0NSwgMTkyLCAxMTgsIDU0LCAyMjgsIDIwMCwgMTE4LCA1NCwgCisgICAgMTIzLCAyNDAsIDIxNywgMTE4LCA1NCwgMTIzLCAyMTYsIDE0OCwgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTExLCAKKyAgICAxMTgsIDIxLCAxMDUsIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxOTAsIDExOCwgMjEsIDE5NSwgCisgICAgMTE4LCAyMSwgMTk5LCAxMTgsIDIxLCAxOTYsIDExOCwgMjEsIDIwMSwgMjM0LCAyNTAsIDUsIDI1MSwgNywgMjM0LCAyNTAsIAorICAgIDUsIDI1NCwgODMsIDIzNCwgMjUwLCA1LCAyMTMsIDE0NywgMjM0LCAyNTAsIDEsIDYxLCAyMzQsIDI1MCwgMSwgMjU1LCA4MiwgCisgICAgMjM0LCAyNTAsIDEsIDc0LCAyMzQsIDI1MCwgMSwgMjM2LCA0MCwgMjM0LCAyNTAsIDEsIDY5LCAyMzQsIDI1MCwgMSwgMjE0LCAKKyAgICAxMTgsIDIzNCwgMjUwLCAxLCA3NiwgMjM0LCAyNTAsIDEsIDI1NCwgMjEwLCAyMzQsIDI1MCwgMSwgNzgsIDIzNCwgMjUwLCAKKyAgICAxLCAyNTMsIDIwMCwgMjM0LCAyNTAsIDEsIDE3NiwgMjM0LCAyNTAsIDEsIDIzNCwgMTM4LCAyMzQsIDI1MCwgMSwgMjQzLCAKKyAgICAxNDIsIDIzNCwgMjUwLCAxLCAyNDMsIDAsIDIzNCwgMjUwLCAxLCAyMjksIDgyLCAyMzQsIDI1MCwgMSwgMjUxLCA0MSwgCisgICAgMjM0LCAyNTAsIDEsIDI1MCwgMTY1LCAyMzQsIDI1MCwgMSwgMjM1LCAxNDcsIDIzNCwgMjUwLCAxLCAyMzUsIDEyMCwgMjM0LCAKKyAgICAyNTAsIDEsIDIyNywgMTY5LCAyMzQsIDI1MCwgMSwgMjE1LCAxNTcsIDIzNCwgMjUwLCAxLCAyMTUsIDE0NSwgMjM0LCAyNTAsIAorICAgIDEsIDI0OCwgMTQzLCAyMzQsIDI1MCwgMSwgMjQ4LCAxMzIsIDIzNCwgMjUwLCAxLCAyNDgsIDEyNywgMjM0LCAyNTAsIDEsIAorICAgIDIyMywgNDIsIDIzNCwgMjUwLCAxLCAyMjgsIDExNSwgMjM0LCAyNTAsIDEsIDIxNywgMTA2LCAyMzQsIDI1MCwgMSwgMjE2LCAKKyAgICAyMDksIDIzNCwgMjUwLCAxLCAyNDgsIDIyOSwgMjM0LCAyNTAsIDEsIDI0OCwgMzMsIDIzNCwgMjUwLCAxLCAxOTgsIDIzNCwgCisgICAgMjUwLCAxLCAxOTEsIDIzNCwgMjUwLCAxLCAyMjUsIDE1MCwgMjM0LCAyNTAsIDEsIDI1MiwgMTk5LCAyMzQsIDI1MCwgMSwgCisgICAgMjUyLCAyNiwgMjM0LCAyNTAsIDEsIDE4NiwgMjM0LCAyNTAsIDEsIDE5MiwgMjM0LCAyNTAsIDEsIDIwNSwgMjM0LCAyNTAsIAorICAgIDEsIDIzMywgMTQxLCAyMzQsIDI1MCwgMSwgMjE0LCAyNywgMjM0LCAyNTAsIDEsIDIyMCwgMTA0LCAyMzQsIDI1MCwgMSwgCisgICAgMjE4LCAyMjUsIDIzNCwgMjUwLCAxLCAyMDYsIDIzNCwgMjUwLCAxLCAxNjIsIDIzNCwgMjUwLCAyNSwgNSwgMjU1LCA4MiwgCisgICAgMjM0LCAyNTAsIDI1LCA1LCA3NCwgMjM0LCAyNTAsIDI1LCA1LCAyMzYsIDQwLCAyMzQsIDI1MCwgMjUsIDUsIDY5LCAyMzQsIAorICAgIDI1MCwgMjUsIDUsIDIxNCwgMTE4LCAyMzQsIDI1MCwgMjUsIDUsIDc2LCAyMzQsIDI1MCwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc4LCAyMzQsIDI1MCwgMjUsIDUsIDI1MywgMjAwLCAyMzQsIDI1MCwgNSwgMjEzLCAxNTIsIAorICAgIDIzNCwgMjUwLCA1LCAyMjcsIDIwOSwgMjM0LCAyNTAsIDI1NSwgMzAsIDUwLCAyMzQsIDI1MCwgMjQ1LCAxMjksIDUwLCAKKyAgICAyMzQsIDI1MCwgNTQsIDUwLCAyMzQsIDI1MCwgMjIxLCAxNzUsIDc5LCAyMzQsIDI1MCwgNTIsIDIyMSwgMTc1LCA3OSwgCisgICAgMjM0LCAyNTAsIDI0OCwgMTg2LCAyMzQsIDI1MCwgNTIsIDI0OCwgMTg2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjIsIDIwLCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMTcsIDgxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTIsIDE3NiwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjUxLCAzMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ4LCAyMTEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDI0MywgMTI3LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzEsIDIxNSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCA3OSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjMzLCAxMTgsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyOSwgMjE4LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMTQsIDI0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDc3LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyMTEsIDg0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjMsIDE3MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQyLCA0NCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM0LCAyNTQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNSwgMTQyLCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMjcsIDE2NiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjU0LCAyMTgsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDI0NSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzYsIDQxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMTQsIDIwOCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI2LCAyMjYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0NSwgMjA1LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMzEsIDIyOCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxOSwgMzgsIDIxOSwgNDYsIAorICAgIDIxLCAxMTEsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxMDUsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxNTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDIxLCAxNjEsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTAsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTUsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTksIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTYsIDIxOSwgMzgsIDIxOSwgNDYsIAorICAgIDIxLCAyMDEsIDI1MCwgMTU5LCA1LCAyNTEsIDcsIDI1MCwgMTU5LCA1LCAyNTQsIDgzLCAyNTAsIDE1OSwgNSwgMjEzLCAKKyAgICAxNDcsIDI1MCwgMTU5LCAxLCAyNTUsIDgyLCAyNTAsIDE1OSwgMSwgNzQsIDI1MCwgMTU5LCAxLCA2OSwgMjUwLCAxNTksIDEsIAorICAgIDc2LCAyNTAsIDE1OSwgMSwgMjM1LCAxNiwgMjUwLCAxNTksIDEsIDIzNCwgMTM3LCAyNTAsIDE1OSwgMSwgMjQzLCAxMzksIAorICAgIDI1MCwgMTU5LCAxLCAyNDIsIDI1NSwgMjUwLCAxNTksIDEsIDIyOSwgODEsIDI1MCwgMTU5LCAxLCAyNTEsIDQwLCAyNTAsIAorICAgIDE1OSwgMSwgMjUwLCAxNjQsIDI1MCwgMTU5LCAxLCAyMzUsIDE0NiwgMjUwLCAxNTksIDEsIDIzNSwgMTE5LCAyNTAsIDE1OSwgCisgICAgMSwgMjI3LCAxNjgsIDI1MCwgMTU5LCAxLCAyMTUsIDE1NiwgMjUwLCAxNTksIDEsIDIxNSwgMTQ0LCAyNTAsIDE1OSwgMSwgCisgICAgMjQ4LCAxNDIsIDI1MCwgMTU5LCAxLCAyNDgsIDEyNiwgMjUwLCAxNTksIDEsIDIyOCwgMTE0LCAyNTAsIDE1OSwgMSwgMjE3LCAKKyAgICAxMDIsIDI1MCwgMTU5LCAxLCAyMTYsIDIwOCwgMjUwLCAxNTksIDEsIDI0OCwgMjI4LCAyNTAsIDE1OSwgMSwgMjQ4LCAzMiwgCisgICAgMjUwLCAxNTksIDEsIDIyOSwgMjMwLCAyNTAsIDE1OSwgMSwgMjI2LCA5MywgMjUwLCAxNTksIDEsIDIyNSwgMTQ5LCAyNTAsIAorICAgIDE1OSwgMSwgMjUyLCAxOTcsIDI1MCwgMTU5LCAxLCAyNTIsIDI1LCAyNTAsIDE1OSwgMSwgMjMxLCAyNDIsIDI1MCwgMTU5LCAKKyAgICAxLCAyMTAsIDE2NywgMjUwLCAxNTksIDEsIDIxMSwgMTAzLCAyNTAsIDE1OSwgMSwgMjIzLCAxODcsIDI1MCwgMTU5LCAxLCAKKyAgICAyMzMsIDE0MCwgMjUwLCAxNTksIDEsIDIxMiwgNjQsIDI1MCwgMTU5LCAxLCAyMjIsIDMzLCAyNTAsIDE1OSwgMSwgMjQyLCAKKyAgICA1MywgMjUwLCAxNTksIDI1LCA1LCA2MSwgMjUwLCAxNTksIDI1LCA1LCA3NCwgMjUwLCAxNTksIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAyNTAsIDE1OSwgMjUsIDUsIDY5LCAyNTAsIDE1OSwgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1OSwgMjUsIDUsIDc2LCAyNTAsIAorICAgIDE1OSwgMjUsIDUsIDI1NCwgMjEwLCAyNTAsIDE1OSwgMjUsIDUsIDc4LCAyNTAsIDE1OSwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAyNTAsIDE1OSwgMjUsIDUsIDIyNiwgMjIzLCAyNTAsIDE1OSwgMTQ0LCA3OSwgMjUwLCAxNTksIDI1MywgMjAxLCA3OSwgCisgICAgMjUwLCAxNTksIDIxMywgMTUyLCAyNTAsIDE1OSwgMjMxLCAyNDAsIDI1MCwgMTU5LCAyMSwgMjEwLCA4NiwgMjUwLCAxNTksIAorICAgIDIxLCAxMTEsIDI1MCwgMTU5LCAyMSwgMTA1LCAyNTAsIDE1OSwgMjEsIDE1OCwgMjUwLCAxNTksIDIxLCAxNjEsIDI1MCwgCisgICAgMTU5LCAyMSwgMTkwLCAyNTAsIDE1OSwgMjEsIDE5NSwgMjUwLCAxNTksIDIxLCAxOTksIDI1MCwgMTU5LCAyMSwgMTk2LCAKKyAgICAyNTAsIDE1OSwgMjEsIDIwMSwgMjUwLCAxNTksIDIyMSwgMTc1LCA3OSwgMjUwLCAxNTksIDI0OCwgMTg2LCAyNTAsIDE1OSwgCisgICAgNTIsIDI0OCwgMTg2LCAyNTAsIDE1OSwgMjI0LCAxNiwgNzksIDE3NCwgNSwgMjUxLCA3LCAxNzQsIDUsIDI1NCwgODMsIAorICAgIDE3NCwgNSwgMjEzLCAxNDcsIDE3NCwgMSwgNjEsIDE3NCwgMSwgMjU1LCA4MiwgMTc0LCAxLCA3NCwgMTc0LCAxLCAyMzYsIAorICAgIDQwLCAxNzQsIDEsIDY5LCAxNzQsIDEsIDIxNCwgMTE4LCAxNzQsIDEsIDE0OSwgMTUzLCAxNzQsIDEsIDE0OSwgMjIyLCAKKyAgICAxODIsIDE3NCwgMSwgMTQ5LCAxNTYsIDE3NCwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc0LCAxLCA3NiwgMTc0LCAxLCAyNTQsIAorICAgIDIxMCwgMTc0LCAxLCA3OCwgMTc0LCAxLCAyNTMsIDIwMCwgMTc0LCAxLCAxNzYsIDE3NCwgMSwgMjM0LCAxMzgsIDE3NCwgMSwgCisgICAgMjQzLCAxNDIsIDE3NCwgMSwgMjQzLCAwLCAxNzQsIDEsIDIyOSwgODIsIDE3NCwgMSwgMjUxLCA0MSwgMTc0LCAxLCAyNTAsIAorICAgIDE2NSwgMTc0LCAxLCAyMzUsIDE0NywgMTc0LCAxLCAyMzUsIDEyMCwgMTc0LCAxLCAyMjcsIDE2OSwgMTc0LCAxLCAyMTUsIAorICAgIDE1NywgMTc0LCAxLCAyMTUsIDE0NSwgMTc0LCAxLCAyNDgsIDE0MywgMTc0LCAxLCAyNDgsIDEyNywgMTc0LCAxLCAyMjgsIAorICAgIDExNSwgMTc0LCAxLCAyMTcsIDEwNiwgMTc0LCAxLCAyMTYsIDIwOSwgMTc0LCAxLCAyNDgsIDIyOSwgMTc0LCAxLCAyNDgsIAorICAgIDMzLCAxNzQsIDEsIDE5OCwgMTc0LCAxLCAxOTEsIDE3NCwgMSwgMjI1LCAxNTAsIDE3NCwgMSwgMjUyLCAxOTksIDE3NCwgMSwgCisgICAgMjUyLCAyNiwgMTc0LCAxLCAxODYsIDE3NCwgMSwgMTkyLCAxNzQsIDEsIDIwNSwgMTc0LCAxLCAyMzMsIDE0MSwgMTc0LCAxLCAKKyAgICAyMzIsIDE5MCwgMTc0LCAxLCAyMTQsIDI3LCAxNzQsIDEsIDIyMCwgMTA0LCAxNzQsIDEsIDIxOCwgMjI1LCAxNzQsIDEsIAorICAgIDIwNiwgMTc0LCAxLCAxNjIsIDE3NCwgMjUsIDUsIDI1NSwgODIsIDE3NCwgMjUsIDUsIDc0LCAxNzQsIDI1LCA1LCAyMzYsIAorICAgIDQwLCAxNzQsIDI1LCA1LCA2OSwgMTc0LCAyNSwgNSwgMjE0LCAxMTgsIDE3NCwgMjUsIDUsIDE0OSwgMTUzLCAxNzQsIDI1LCAKKyAgICA1LCAxNDksIDIyMiwgMTgyLCAxNzQsIDI1LCA1LCAxNDksIDE1NiwgMTc0LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTc0LCAKKyAgICAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1NCwgMjEwLCAxNzQsIDI1LCA1LCA3OCwgMTc0LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDE3NCwgNSwgMjEzLCAxNTIsIDE3NCwgNSwgMjUzLCAxODMsIDE3NCwgNSwgMjM1LCAxMDgsIDE3NCwgNSwgMjE0LCAxNjEsIAorICAgIDE3NCwgMjI2LCAyMDgsIDE3NCwgMjQ4LCAxODYsIDE3NCwgNTIsIDI0OCwgMTg2LCAxNzQsIDI1NSwgMzAsIDUwLCAxNzQsIAorICAgIDIyMCwgMTM5LCAxNzQsIDIxLCAyMTAsIDg2LCAxNzQsIDIxLCAxMTEsIDE3NCwgMjEsIDEwNSwgMTc0LCAyMSwgMTU4LCAKKyAgICAxNzQsIDIxLCAxNjEsIDE3NCwgMjEsIDE5MCwgMTc0LCAyMSwgMTk1LCAxNzQsIDIxLCAxOTksIDE3NCwgMjEsIDE5NiwgCisgICAgMTc0LCAyMSwgMjAxLCAyMTcsIDcwLCAxLCA2MSwgMjE3LCA3MCwgMSwgMjU1LCA4MiwgMjE3LCA3MCwgMSwgNzQsIDIxNywgCisgICAgNzAsIDEsIDIzNiwgNDAsIDIxNywgNzAsIDEsIDY5LCAyMTcsIDcwLCAxLCAyMTQsIDExOCwgMjE3LCA3MCwgMSwgNzYsIAorICAgIDIxNywgNzAsIDEsIDI1NCwgMjEwLCAyMTcsIDcwLCAxLCA3OCwgMjE3LCA3MCwgMSwgMjUzLCAyMDAsIDIxNywgNzAsIDEsIAorICAgIDE3NiwgMjE3LCA3MCwgMSwgMjM0LCAxMzgsIDIxNywgNzAsIDEsIDI0MywgMTQyLCAyMTcsIDcwLCAxLCAyNDMsIDAsIDIxNywgCisgICAgNzAsIDEsIDIyOSwgODIsIDIxNywgNzAsIDEsIDI1MSwgNDEsIDIxNywgNzAsIDEsIDI1MCwgMTY1LCAyMTcsIDcwLCAxLCAKKyAgICAyMzUsIDE0NywgMjE3LCA3MCwgMSwgMjM1LCAxMjAsIDIxNywgNzAsIDEsIDIyNywgMTY5LCAyMTcsIDcwLCAxLCAyMTUsIAorICAgIDE1NywgMjE3LCA3MCwgMSwgMjE1LCAxNDUsIDIxNywgNzAsIDEsIDI0OCwgMTQzLCAyMTcsIDcwLCAxLCAyNDgsIDEyNywgCisgICAgMjE3LCA3MCwgMSwgMjI4LCAxMTUsIDIxNywgNzAsIDEsIDIxNywgMTA2LCAyMTcsIDcwLCAxLCAyMTYsIDIwOSwgMjE3LCAKKyAgICA3MCwgMSwgMjQ4LCAyMjksIDIxNywgNzAsIDEsIDI0OCwgMzMsIDIxNywgNzAsIDEsIDE5OCwgMjE3LCA3MCwgMSwgMTkxLCAKKyAgICAyMTcsIDcwLCAxLCAyMjUsIDE1MCwgMjE3LCA3MCwgMSwgMjUyLCAxOTksIDIxNywgNzAsIDEsIDI1MiwgMjYsIDIxNywgNzAsIAorICAgIDEsIDE4NiwgMjE3LCA3MCwgMSwgMTkyLCAyMTcsIDcwLCAxLCAyMDUsIDIxNywgNzAsIDEsIDIzMywgMTQxLCAyMTcsIDcwLCAKKyAgICAxLCAyMTQsIDI3LCAyMTcsIDcwLCAxLCAyMjAsIDEwNCwgMjE3LCA3MCwgMSwgMjA2LCAyMTcsIDcwLCAxLCAxNjIsIDIxNywgCisgICAgNzAsIDEsIDIyMiwgMTgxLCAyMTcsIDcwLCA1LCAyNTQsIDgzLCAyMTcsIDcwLCA1LCAyMTMsIDE0NywgMjE3LCA3MCwgMjUsIAorICAgIDUsIDI1NSwgODIsIDIxNywgNzAsIDI1LCA1LCA3NCwgMjE3LCA3MCwgMjUsIDUsIDIzNiwgNDAsIDIxNywgNzAsIDI1LCA1LCAKKyAgICA2OSwgMjE3LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCAyMTcsIDcwLCAyNSwgNSwgNzYsIDIxNywgNzAsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMjE3LCA3MCwgMjUsIDUsIDc4LCAyMTcsIDcwLCAyNSwgNSwgMjUzLCAyMDAsIDIxNywgNzAsIDUsIDIxMywgMTUyLCAKKyAgICAyMTcsIDcwLCA1LCAyMjcsIDIwOSwgMjE3LCA3MCwgMjEsIDIxMCwgODYsIDIxNywgNzAsIDIxLCAxMTEsIDIxNywgNzAsIAorICAgIDIxLCAxMDUsIDIxNywgNzAsIDIxLCAxNTgsIDIxNywgNzAsIDIxLCAxNjEsIDIxNywgNzAsIDIxLCAxOTAsIDIxNywgNzAsIAorICAgIDIxLCAxOTUsIDIxNywgNzAsIDIxLCAxOTksIDIxNywgNzAsIDIxLCAxOTYsIDIxNywgNzAsIDIxLCAyMDEsIDE1LCA1LCA2MSwgCisgICAgMTUsIDUsIDExNiwgMzAsIDYxLCAxNSwgNSwgMTE2LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAxMTYsIDMwLCAyNDMsIDExMiwgCisgICAgMjE2LCAyNDAsIDE1LCA1LCAxMTYsIDMwLCAxNjIsIDE1LCA1LCAxMTYsIDMwLCAyMzYsIDQyLCAxNSwgNSwgMTE2LCAzMCwgCisgICAgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMTE2LCAzMCwgMjMwLCA2NiwgMTUsIDUsIDExNiwgMzAsIDIyMiwgMjMsIDE1LCAKKyAgICA1LCAyNTUsIDg0LCAxNSwgNSwgMjU1LCAzNCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDI1NSwgMzUsIAorICAgIDMwLCAyNDYsIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyNDMsIDEyNSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAKKyAgICAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMTYyLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzNiwgNDMsIAorICAgIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjMzLCAxMjMsIDE1LCAKKyAgICA1LCAyNTUsIDM1LCAzMCwgMjIwLCA1MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgMTUsIDUsIAorICAgIDI1NSwgMzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzMiwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyNTIsIDE2OCwgMTUsIDUsIAorICAgIDI1NSwgMzMsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgCisgICAgMTU4LCAxNSwgNSwgMjU1LCAzMywgMzAsIDIyMCwgMTAyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyNTUsIDgsIDE1LCA1LCAyNTQsIDE5NSwgMTUsIDUsIDI1NCwgMTk2LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDI1NCwgMTk2LCAKKyAgICAzMCwgMjIwLCAxMiwgOTYsIDI0MiwgMTk3LCAxNSwgNSwgMjU0LCAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDcsIDIyNCwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAKKyAgICAyNTQsIDE4OCwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjM1LCA1LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzQsIAorICAgIDk4LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAorICAgIDI1NCwgMTg0LCAxNSwgNSwgMjU0LCAxNzcsIDE1LCA1LCAyNTQsIDE0MCwgMTUsIDUsIDI1NCwgMTQxLCAzMCwgMjIwLCA2NSwgCisgICAgMTUsIDUsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDExNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTM0LCAKKyAgICAyMTYsIDg2LCAxNSwgNSwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMiwgMjI2LCAxNjgsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjEsIAorICAgIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMTgsIDIzNSwgMTUsIDUsIDI1NCwgMTAyLCAxNSwgNSwgMjU0LCA3NSwgCisgICAgMTUsIDUsIDI1NCwgNDMsIDE1LCA1LCAyNTQsIDQ0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyNTQsIDE2LCAxNSwgNSwgMjUzLCAKKyAgICAyNDQsIDE1LCA1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjQwLCAyMTAsIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDI1MywgCisgICAgMjQwLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDIxNSwgMTE1LCAxMTUsIAorICAgIDIxNSwgMTE1LCAyMTUsIDExNSwgMTE1LCAyMTUsIDExNSwgMjI2LCAyNSwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgCisgICAgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDI0OSwgCisgICAgMTMzLCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjM3LCAxNSwgNSwgMjUzLCAKKyAgICAyMzQsIDE1LCA1LCAyNTIsIDE5OSwgMTUsIDUsIDI1MiwgMTg0LCAxNSwgNSwgMjUyLCAxNzksIDE1LCA1LCAyNTIsIDE3NSwgCisgICAgMTUsIDUsIDI1MiwgMTY5LCAxNSwgNSwgMjUyLCAxNzAsIDExNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE2OCwgMTUsIDUsIAorICAgIDEzMCwgMTUsIDUsIDI1MiwgMTQ4LCAxNSwgNSwgMjUyLCAxNCwgMTUsIDUsIDI1MiwgMTUsIDMwLCA2MSwgMTUsIDUsIDI1MiwgCisgICAgMTUsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI1MiwgMTUsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI1MSwgMTMzLCAKKyAgICAxNSwgNSwgMjUxLCAxMzQsIDExNSwgMjUxLCAxMzQsIDI1NSwgMzQsIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgCisgICAgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEzNCwgMjQ5LCAxMzMsIDI1MSwgMTMzLCAxNSwgNSwgMjUxLCAxMTcsIDE1LCA1LCAKKyAgICAyNTEsIDExOCwgMTE1LCAyNTEsIDExNywgMTUsIDUsIDI1MSwgMTA2LCAxNSwgNSwgMjUxLCAxMDUsIDE1LCA1LCAyNDgsIAorICAgIDIyOSwgMTUsIDUsIDI0OCwgMjIwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAxMTYsIDk2LCAyMzEsIDE1MiwgCisgICAgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjU0LCAxNDAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDI1MiwgMTY4LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQzLCAxNDMsIDk2LCAyMzEsIDE1MiwgCisgICAgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQyLCAyMjEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDExMCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIAorICAgIDcyLCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzUsIDE4NiwgMTUsIDUsIDI0OCwgMjIxLCAKKyAgICAyMzQsIDcyLCAzMCwgMjM1LCAxODcsIDk2LCAyMzIsIDEwMywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjM0LCAKKyAgICAyNDgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIAorICAgIDMwLCAyMzIsIDEwMywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMyLCAxMDQsIDk2LCAyMzEsIDE1MSwgMTUsIAorICAgIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMyLCA4OSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI5LCAKKyAgICAxMTIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIyNiwgMjYsIDk2LCAyMjYsIDI1LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMTksIDE5MywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjE3LCA3MywgMTUsIDUsIDI0OCwgCisgICAgMjIxLCAyMzQsIDcyLCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDIwNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE5NSwgMTUsIDUsIDI0OCwgMTc0LCAxNSwgNSwgMjQ4LCAxNzMsIDE1LCA1LCAyNDgsIAorICAgIDE3MiwgMTUsIDUsIDI0OCwgMTEsIDE1LCA1LCAyNDcsIDI1MCwgMTUsIDUsIDI0NywgMjI1LCAxNSwgNSwgMjQ3LCAyMjYsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQ3LCAyMjQsIDE1LCA1LCAyNDcsIDIxNCwgMTUsIDUsIDI0NywgMjE1LCAyMzQsIDIxNCwgCisgICAgMTA0LCAyNDIsIDEwMiwgMjQ3LCAxOTUsIDE1LCA1LCAyNDcsIDE5NSwgMTUsIDUsIDI0NiwgODYsIDE1LCA1LCAyNDYsIDg3LCAKKyAgICAxMTUsIDI0NiwgODYsIDE1LCA1LCAyNDYsIDg3LCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgODcsIDIyMCwgNDcsIDE1LCA1LCAKKyAgICAyNDYsIDg0LCAxNSwgNSwgMjQ2LCA4NSwgMzAsIDI0NSwgODAsIDE1LCA1LCAyNDYsIDgzLCAxNSwgNSwgMjQ2LCA4MiwgMTUsIAorICAgIDUsIDI0NiwgODEsIDE1LCA1LCAyNDYsIDgwLCAxNSwgNSwgMjQ2LCA3NiwgMTUsIDUsIDI0NiwgNzQsIDE1LCA1LCAyNDYsIAorICAgIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAKKyAgICAyNDYsIDY2LCAxNSwgNSwgNzYsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDI1LCAxNSwgNSwgMTYwLCAxMTUsIDE2MCwgMjI3LCAKKyAgICAxOTksIDExNSwgMjI3LCAxOTgsIDE1LCA1LCAyNDUsIDI0MiwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMTE2LCA5NiwgMjQyLCAKKyAgICA1NiwgOTYsIDI0OCwgMjI5LCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI0NSwgMjQzLCAzMCwgCisgICAgMjMwLCAyMzUsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDIyMiwgMTAsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDIyMCwgNjUsIDE1LCAKKyAgICA1LCAyNDUsIDI0MywgMzAsIDY5LCAxNSwgNSwgMjQ1LCAyMTksIDE1LCA1LCAyNDUsIDIwOCwgMTUsIDUsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgMTExLCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyNDMsIAorICAgIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDIzMSwgOTYsIDE1LCA1LCAyNDUsIDE1OSwgMjQ5LCAxMzMsIAorICAgIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIyNiwgMTY4LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAyMTgsIDIzNSwgCisgICAgMTUsIDUsIDI0NSwgOTcsIDE1LCA1LCAyNDUsIDk1LCAxNSwgNSwgMjQ1LCA4MCwgMTUsIDUsIDI0NSwgMTgsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgNjEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMTE2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAKKyAgICAzMCwgMTE2LCA5NiwgMjMzLCAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyNTQsIDEzMSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyNDYsIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgCisgICAgMTksIDMwLCAyNDYsIDc1LCAyNDIsIDEwMiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMTYyLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0MiwgNTYsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzNCwgMjE0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAKKyAgICAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMiwgMjQ3LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMiwgMTAzLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIxNCwgMjE5LCAxNSwgCisgICAgNSwgMjQzLCAxNDIsIDE1LCA1LCAyNDMsIDE0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDMsIDE0MCwgMTUsIDUsIDI0MywgMTQxLCAKKyAgICAzMCwgMTE2LCA5NiwgMjQ4LCAyMzAsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDExNiwgOTYsIDE2MiwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMjM2LCA0MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjU1LCAzMywgMjE2LCAyNDEsIAorICAgIDk2LCAyMTcsIDk0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAKKyAgICAyMzksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MywgMjM4LCA5NiwgMjQzLCAxMjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTIsIDE0OSwgOTYsIDIwNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUxLCAxMDYsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MSwgMTA3LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNDgsIDIyOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ3LCAyMjYsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDYsIDg0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MiwgCisgICAgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxODMsIDk2LCAyMzMsIDE0MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0MiwgMjIwLCA5NiwgNjEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMjA1LCA5NiwgMjE4LCA4NCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQyLCA1NiwgOTYsIDIzMiwgMTA0LCA5NiwgMjQ1LCA4MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAKKyAgICAzNywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAzOCwgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDEsIAorICAgIDE4OCwgOTYsIDIzMiwgMjQ3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDAsIDIyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNSwgMTczLCA5NiwgMjQwLCAyMzAsIDk2LCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMzQsIDk1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDk2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzMywgMjIyLCA5NiwgMjU0LCAxMzEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzMywgMTQxLCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzMCwgMjM1LCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjI3LCAxOTksIDExNSwgMjI3LCAKKyAgICAxOTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDE5MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjIxLCAyMzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIyMCwgNjYsIDk2LCAyMTUsIDk5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCA2OSwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNCwgMjIwLCA5NiwgMjQ2LCA4NiwgMTUsIAorICAgIDUsIDI0MywgMTQxLCAxMTUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNiwgMjQ5LCAxMzMsIAorICAgIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTI2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEyNCwgMTUsIDUsIDI0MywgMTIyLCAxNSwgNSwgMjQzLCAxMTMsIAorICAgIDE1LCA1LCAyNDMsIDExMSwgMTUsIDUsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTEyLCAxMTUsIDI0MywgCisgICAgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDI0OSwgMTMzLCAyNDMsIDExMSwgMTUsIDUsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAKKyAgICAxMDIsIDE1LCA1LCAyNDMsIDk3LCAxNSwgNSwgMjQzLCA0MywgMTUsIDUsIDI0MywgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIAorICAgIDI0MiwgMjIxLCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA3NiwgMTUsIDUsIDI0MiwgMjIyLCAzMCwgNjksIDE1LCA1LCAyNDIsIAorICAgIDIyMiwgMjQ5LCAxMzMsIDI0MiwgMjIxLCAxNSwgNSwgMjQyLCAyMTksIDE1LCA1LCAyNDIsIDIyMCwgMTE1LCAyNDIsIDIxOSwgCisgICAgMTUsIDUsIDI0MiwgMjIwLCAyNDksIDEzMywgMjQyLCAyMTksIDE1LCA1LCAyNDIsIDIxNiwgMTUsIDUsIDI0MiwgMjA0LCAKKyAgICAxNSwgNSwgMjQyLCAyMDUsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAyMDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDExNiwgOTYsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjMyLCAxMDQsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAxOTEsIDE1LCA1LCAyNDIsIDE5OSwgMTUsIDUsIDI0MiwgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDI0OSwgMTMzLCAyNDIsIAorICAgIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyNDIsIDE5OCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyNDIsIDEyMCwgMTUsIDUsIDI0MiwgMTIxLCAyNDksIDEzMywgMjQyLCAxMjAsIAorICAgIDE1LCA1LCAyNDIsIDExOCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIzNCwgCisgICAgMjQ5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQyLCAKKyAgICAxMTksIDMwLCAyMjIsIDExLCA5NiwgMjE1LCAxMTQsIDE1LCA1LCAyNDIsIDExOSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIAorICAgIDExMCwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMTE2LCA5NiwgMjMzLCAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMzAsIDIzMywgCisgICAgMjAyLCAxNSwgNSwgMjQyLCAxMTEsIDExNSwgMjQyLCAxMTEsIDIzMiwgOTYsIDE1LCA1LCAyNDIsIDEwNSwgMTUsIDUsIAorICAgIDI0MiwgMTAzLCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQyLCA5NSwgMTUsIDUsIDI0MiwgOTQsIAorICAgIDE1LCA1LCAyNDIsIDkxLCAxNSwgNSwgMjQyLCA5MCwgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNTYsIDIxNiwgMjQwLCAxNSwgCisgICAgNSwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDM3LCAxNSwgNSwgMjQxLCAxODcsIDE1LCA1LCAyNDEsIDE4OCwgCisgICAgMzAsIDI1MywgMjM5LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0NywgMTk1LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNDMsIDEzMywgMTUsIDUsIAorICAgIDI0MSwgMTg4LCAzMCwgMjM0LCA4NywgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDEsIDE4OCwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDY5LCAxNSwgNSwgMjQwLCAyMjksIDE1LCA1LCAyNDAsIDIyNSwgCisgICAgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDI0MiwgMzcsIDE1LCA1LCAyNDAsIAorICAgIDIyNiwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyMzIsIDIwMywgMTUsIDUsIDI0MCwgMjI2LCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDc0LCAxNSwgNSwgMjQwLCAxNjEsIDYxLCAxNSwgNSwgMjQwLCAKKyAgICAxMjIsIDE1LCA1LCAyMzYsIDcwLCAxNSwgNSwgMjM2LCA3MSwgMTE1LCAyMzYsIDcxLCAyNTEsIDEwNiwgMTUsIDUsIDIzNiwgCisgICAgNzEsIDExNSwgMjM2LCA3MSwgMjE4LCAyMzUsIDE1LCA1LCAyMzYsIDQ1LCAxNSwgNSwgMjM2LCA0MiwgMTUsIDUsIDIzNiwgCisgICAgNDMsIDI0NywgMjUwLCAxNSwgNSwgMjM2LCA0MywgMjIzLCAzOCwgMTUsIDUsIDIzNiwgNDMsIDExNSwgMjM2LCA0MywgMjIwLCAKKyAgICAxNiwgMTE1LCAyMjAsIDE2LCAyMTQsIDIyMCwgMTE1LCAyMTQsIDIxOSwgMTUsIDUsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjM2LCAzNCwgMTUsIDUsIDIzNiwgMzUsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzYsIDMzLCAxNSwgCisgICAgNSwgMjM2LCAyMywgMTUsIDUsIDIzNiwgMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjM2LCAyNCwgMjQ5LCAxMzMsIDIzNiwgCisgICAgMjMsIDE1LCA1LCAyMzYsIDI0LCAyMjYsIDE2OCwgMjM2LCAyMywgMTUsIDUsIDIzNiwgMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgNiwgMTUsIDUsIDIzNSwgMTg2LCAxNSwgNSwgMjM1LCAxNzIsIDE1LCA1LCAxNzYsIDE1LCAKKyAgICA1LCAyMzUsIDE5LCAzMCwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCA4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1NSwgCisgICAgOSwgOTYsIDIzMywgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MiwgMTY4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCisgICAgMTksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0NSwgOTUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCAKKyAgICA4MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEyNSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjQzLCAxMDQsIDk2LCAyMjAsIDEwMywgOTYsIDYxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgCisgICAgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMjA0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMTk4LCA5NiwgMjIxLCAKKyAgICAyMzMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDI0OSwgMTMzLCAyNDIsIDE5NywgMTUsIDUsIDIzNSwgMTksIAorICAgIDMwLCAyNDIsIDEyMCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDk0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNiwgNDIsIAorICAgIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDIzNSwgCisgICAgMTksIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMyLCAKKyAgICAyNDcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMyLCAxMDMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjQ2LCA4NiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDIxNywgMjMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMwLCAKKyAgICAyMzUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMwLCAyMzYsIDk2LCAyMjcsIDE5MywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMjIsIDE0MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMDYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIxLCAKKyAgICAyMzMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIwLCAxMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIwLCA2NSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxOSwgMjI3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxOSwgMTg0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxOCwgNTIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE3LCA1MSwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2OSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIzNSwgMTksIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTAsIDQ0LCAxNSwgNSwgMjM1LCAxNywgMTUsIDUsIDIzNSwgMTgsIDI0OSwgCisgICAgMTMzLCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxMCwgMTUsIDUsIDIzNSwgNywgMTUsIDUsIDIzNSwgNSwgMTUsIDUsIDIzNSwgCisgICAgNCwgMTUsIDUsIDIzNSwgMiwgMTUsIDUsIDIzNSwgMywgMTE1LCAyMzUsIDIsIDE1LCA1LCAyMzQsIDI0OCwgMTUsIDUsIAorICAgIDIzNCwgMjQ5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMzQsIDI0NCwgMTUsIDUsIDIzNCwgMjQ1LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzQsIDI0NSwgMjQ5LCAxMzMsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDIsIDE1LCA1LCAKKyAgICAyMzQsIDI0MSwgMTUsIDUsIDIzNCwgMjEzLCAxNSwgNSwgMjM0LCAyMTQsIDIzMywgMTI0LCAzMCwgMTA0LCAxMTUsIDIzMywgCisgICAgMTI0LCAzMCwgNjksIDE1LCA1LCAyMzQsIDIxNCwgMTE1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMTYzLCAxNSwgNSwgMjM0LCA5OCwgMTUsIDUsIDIzNCwgOTksIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIzNCwgOTksIDMwLCA2OSwgMTUsIDUsIDIzNCwgOTksIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzNCwgCisgICAgOTUsIDE1LCA1LCAyMzQsIDg3LCAxNSwgNSwgMjM0LCA3NCwgMTUsIDUsIDIzNCwgNzMsIDE1LCA1LCAyMzQsIDcxLCAxNSwgCisgICAgNSwgMjM0LCA3MiwgMTE1LCAyMzQsIDcxLCAxNSwgNSwgMjMzLCAyMjMsIDE1LCA1LCAyMzMsIDIyNCwgMTE1LCAyNDEsIAorICAgIDE4OCwgMzAsIDI1MywgMjM4LCAyMzMsIDIyNCwgMTE1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjMzLCAKKyAgICAyMjEsIDE1LCA1LCAyMzMsIDIxOSwgMTUsIDUsIDIzMywgMjIwLCAyMTQsIDEyLCAxNywgMTUsIDUsIDIzMywgMjE4LCAxNSwgCisgICAgNSwgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDIxNiwgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIDIxNCwgMTUsIDUsIDIzMywgMjAyLCAKKyAgICAxNSwgNSwgMjMzLCAyMDMsIDIyNiwgMTY4LCAyMzMsIDIwMiwgMTUsIDUsIDIzMywgMTk3LCAxNSwgNSwgMjMzLCAxNzgsIAorICAgIDE1LCA1LCAyMzMsIDE0MSwgMTUsIDUsIDIzMywgMTIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTE2LCA5NiwgMjQ4LCAyMzAsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDI0MywgCisgICAgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTMsIDI0MCwgMjEwLCAKKyAgICA0MCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDgsIDE3NCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQ1LCAxNTgsIDE1LCA1LCAKKyAgICAyMzMsIDEyNCwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjQyLCAxMTAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MiwgMTExLCA5NiwgMjQyLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAzNywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQxLCAKKyAgICAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNiwgMjQsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIzNiwgMjQsIDk2LCAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM0LCA4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAyMjEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgCisgICAgMjE1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIxNiwgOTYsIDI0MSwgMTg4LCA5NiwgNjEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzIsIDIwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgOTEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMSwgOTYsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMwLCA2NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgNjYsIDk2LCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTgsIDk2LCAyNDUsIDk1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMjAsIDEyLCA5NiwgMjQyLCAxOTgsIDIxNiwgMjQwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTksIDIyNSwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjE5LCAyMjYsIDk2LCAyMTksIDIyNSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE4LCA0NCwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjE3LCA4NSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjE3LCAyNCwgOTYsIDExNiwgOTYsIDIxOCwgODUsIDk2LCAxOTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDY5LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNjksIAorICAgIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgCisgICAgMjE5LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIzMywgMTI0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDIzMywgMTIxLCAxNSwgNSwgMjMzLCAxMjIsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjMzLCAxMjIsIDMwLCAyMjAsIDY2LCA5NiwgCisgICAgMjE4LCA0NCwgMTUsIDUsIDIzMywgMTIyLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMTIyLCAyNDIsIDEwMiwgMTE1LCAyMzMsIAorICAgIDEyMiwgMjQyLCAxMDIsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAKKyAgICAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDIzMywgMTA4LCAxNSwgNSwgMjMzLCAxMDksIDMwLCAyMzMsIDIwMiwgMTUsIDUsIAorICAgIDIzMywgMTA5LCAzMCwgMjMzLCAyMDMsIDk2LCAyMjIsIDE0MiwgMTUsIDUsIDIzMiwgMjQ3LCAxNSwgNSwgMjMyLCAyMzIsIAorICAgIDE1LCA1LCAyMzIsIDIyMiwgMTUsIDUsIDIzMiwgMjAzLCAxNSwgNSwgMjMyLCAxMDMsIDE1LCA1LCAyMzIsIDEwNCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI1NCwgMTg3LCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjQ1LCA4MSwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjQxLCAxODgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM2LCAyMywgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjM1LCA3LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzNSwgNiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyMzMsIDE0MiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzMsIDEyMywgMTUsIDUsIDIzMiwgMTAyLCAKKyAgICAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjI3LCAyNDIsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIxOSwgMTk0LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMzIsIDEwMiwgMzAsIDIxOSwgMTc2LCA5NiwgMjUxLCAxMzMsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIxNSwgMTE0LCAxNSwgCisgICAgNSwgMjMyLCAxMDIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAxMDIsIDI0OSwgMTMzLCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAyMjYsIDE2OCwgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIDEwMiwgMjE4LCAyMzUsIDE1LCA1LCAyMzIsIDEwMiwgMjIwLCAKKyAgICA0NywgMTUsIDUsIDIzMiwgMTAwLCAxNSwgNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDExNSwgMjMyLCA5NiwgMTUsIDUsIAorICAgIDIzMiwgOTcsIDIyNiwgMTY4LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NywgMTUsIDUsIDIzMiwgOTQsIDE1LCAKKyAgICA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgOTAsIDExNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgOTAsIAorICAgIDExNSwgMjMyLCA5MCwgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAxODYsIDE1LCA1LCAyMzEsIDI0NCwgMzAsIAorICAgIDIxNywgNzMsIDE1LCA1LCAyMzEsIDI0NCwgMjQyLCAxMDEsIDE1LCA1LCAyMzEsIDI0MywgMTUsIDUsIDIzMSwgMjE1LCAxNSwgCisgICAgNSwgMjMxLCAxNzEsIDE1LCA1LCAyMzEsIDE1MiwgMTUsIDUsIDIzMSwgMTUxLCAxNSwgNSwgMjMxLCA5NiwgMTUsIDUsIAorICAgIDIzMSwgNTIsIDE1LCA1LCAyMzAsIDIzNSwgMTUsIDUsIDIzMCwgMTkzLCAxNSwgNSwgMjMwLCAxMDcsIDE1LCA1LCAyMzAsIAorICAgIDEwOCwgMTE1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgOTgsIDE1LCA1LCAyMzAsIDk5LCAyNDIsIDEwMSwgMTUsIDUsIDIzMCwgCisgICAgODMsIDE1LCA1LCAyMzAsIDY5LCAxNSwgNSwgMjMwLCA2NiwgMTUsIDUsIDIzMCwgNjcsIDMwLCA2MSwgMTUsIDUsIDIzMCwgCisgICAgNjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIzMCwgNjcsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIzMCwgNjcsIDExNSwgMjMwLCAKKyAgICA2NiwgMTUsIDUsIDIzMCwgNjcsIDExNSwgMjMwLCA2NywgMzAsIDExNiwgOTYsIDE5OCwgMTUsIDUsIDIzMCwgNjcsIDI0OSwgCisgICAgMTMzLCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjUsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjUsIDMwLCAKKyAgICAxMTYsIDk2LCAyNDgsIDExLCAxNSwgNSwgMjMwLCA2NSwgMzAsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAyNDIsIDEwMSwgCisgICAgMTUsIDUsIDE5OCwgMTUsIDUsIDIyOSwgMjMyLCAxNSwgNSwgMjI5LCAyMjEsIDE1LCA1LCAyMjksIDIyMiwgMjM1LCAxOTksIAorICAgIDE1LCA1LCAyMjksIDIyMiwgMzAsIDIxOSwgMjI4LCAyMTYsIDI0MCwgMTUsIDUsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjI5LCAKKyAgICAyMjEsIDE1LCA1LCAyMjksIDIyMCwgMTUsIDUsIDIyOSwgMjEzLCAyMjcsIDE4NCwgMTUsIDUsIDIyOSwgMjEyLCAxNSwgNSwgCisgICAgMjI5LCAyMTEsIDE1LCA1LCAyMjksIDExMiwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgNjEsIDE1LCA1LCAyMjksIDExMywgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjI5LCAxMTMsIDIyMCwgNDcsIDE1LCA1LCAyMjgsIDIzOCwgMTUsIDUsIDIyOCwgMjM5LCAzMCwgCisgICAgNzYsIDE1LCA1LCAyMjgsIDIzNywgMTUsIDUsIDIyOCwgMjA4LCAxNSwgNSwgMjI4LCAyMDksIDMwLCAyNDMsIDExMiwgMjE2LCAKKyAgICAyNDAsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTA0LCA5NiwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjI4LCAKKyAgICAyMDYsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIyOCwgMjA3LCAzMCwgMjUzLCAyNDAsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjQyLCAxMTAsIDE1LCAKKyAgICA1LCAyMjgsIDIwNywgMzAsIDIzMSwgOTcsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIDIwNywgMzAsIAorICAgIDIyOSwgMTEyLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NSwgCisgICAgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NiwgOTYsIDExNiwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIAorICAgIDIyMCwgNjYsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NiwgOTYsIDI1MywgMjQwLCA5NiwgCisgICAgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgCisgICAgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI4LCAxOTUsIDE1LCA1LCAyMjcsIDI0MiwgMTUsIDUsIDIyNywgMjE0LCAxNSwgNSwgCisgICAgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIyNywgMTk5LCAyMzMsIAorICAgIDEyMiwgMzAsIDIzMSwgMTUyLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDIyNywgCisgICAgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTEsIDExNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMCwgMTUsIDUsIAorICAgIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI3LCAxOTksIDIxNiwgMjQwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDExNSwgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgMjQ5LCAxMzMsIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIAorICAgIDI0OSwgMTMzLCAyMjcsIDE5OSwgMjMzLCAxMjIsIDExNSwgMjMzLCAxMjEsIDE1LCA1LCAyMjcsIDE5MywgMTUsIDUsIDIyNywgCisgICAgMTk0LCAyNTUsIDMzLCAzMCwgMjUzLCAyMzQsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI1MiwgMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI0NiwgODIsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI0MiwgMTEwLCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIAorICAgIDMzLCAzMCwgMjM1LCA1LCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDIyNywgMTk0LCAKKyAgICAyNTUsIDMzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxOSwgMTczLCAxNSwgNSwgCisgICAgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNywgMTk0LCAyMzQsIDcyLCAzMCwgMjUyLCAxNCwgCisgICAgMTUsIDUsIDIyNywgMTk0LCAyMzQsIDcyLCAzMCwgMjUyLCAxNSwgNjksIDE1LCA1LCAxOTEsIDE1LCA1LCAyMjYsIDg0LCAKKyAgICAxNSwgNSwgMjI2LCA1MSwgMTUsIDUsIDIyNiwgMjUsIDE1LCA1LCAyMjUsIDE2NCwgMTUsIDUsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjI1LCAxMTIsIDMwLCA2MSwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjU1LCAzNCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjUyLCAKKyAgICAxNCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjUxLCAxMzMsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDc2LCAxNSwgNSwgMjI1LCAKKyAgICAxMTIsIDMwLCA3NCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjQwLCAxMjIsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDY5LCAxNSwgCisgICAgNSwgMjI1LCAxMTIsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNSwgMTEyLCAyNDksIDEzMywgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDU2LCAxNSwgNSwgMjI1LCA1NywgMzAsIDIzNCwgMjQ0LCAxNSwgNSwgMjI1LCA1NywgMzAsIDIxNCwgMjE5LCAxNSwgCisgICAgNSwgMjI1LCA1NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjI1LCA1NywgMjI2LCAxNjgsIDIyNSwgNTYsIDE1LCA1LCAyMDUsIAorICAgIDE1LCA1LCAyMjMsIDE4NSwgMTUsIDUsIDIyMywgMzgsIDE1LCA1LCAyMjIsIDE0MiwgMTUsIDUsIDIwNiwgMTUsIDUsIDIyMiwgCisgICAgMjQsIDIyNywgMTg0LCAxNSwgNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDMwLCA2MSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyNDYsIDg2LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDI0NiwgODQsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMTYyLCAxNSwgNSwgCisgICAgMjIyLCAyNCwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDIzMiwgODksIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjI3LCAxOTgsIDE1LCAKKyAgICA1LCAyMjIsIDI0LCAzMCwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDIxNywgOTQsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAyMjUsIDE1LCAKKyAgICA1LCAyMjIsIDI0LCAzMCwgMjE0LCAxOTcsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAxNTAsIDE1LCA1LCAyMjIsIDI0LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjIsIDI0LCAxMTUsIDIyMiwgMjMsIDE1LCA1LCAyMjIsIDI0LCAyNDIsIDEwMSwgMTUsIAorICAgIDUsIDIyMiwgMTAsIDE1LCA1LCAyMjIsIDExLCAyMzMsIDEyNCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjIxLCAyNDEsIDE1LCAKKyAgICA1LCAyMjEsIDIzMywgMTUsIDUsIDIyMCwgMTA0LCAxNSwgNSwgMjIwLCAxMDIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDYxLCAKKyAgICAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyMjAsIAorICAgIDEwMywgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyMTksIDIyNSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgCisgICAgMjE1LCA5OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjksIDE1LCA1LCAyMjAsIDEwMywgMzAsIDEwNCwgOTYsIDYxLCAxNSwgCisgICAgNSwgMjIwLCAxMDEsIDE1LCA1LCAyMjAsIDk5LCAxNSwgNSwgMjIwLCA4MCwgMTUsIDUsIDIyMCwgNjUsIDE1LCA1LCAyMjAsIAorICAgIDY2LCAyNDAsIDIyOSwgMTUsIDUsIDIyMCwgNjYsIDExNSwgMjIwLCA2NiwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgCisgICAgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyMTcsIDk1LCAxMTUsIDIxNywgOTUsIAorICAgIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCA1OCwgMTUsIDUsIDIyMCwgNTMsIDE1LCA1LCAyMjAsIDUwLCAKKyAgICAxNSwgNSwgMjIwLCA0OSwgMTUsIDUsIDIyMCwgNDYsIDE1LCA1LCAyMjAsIDMyLCAxNSwgNSwgMjIwLCAzMywgMzAsIDYxLCAKKyAgICAxNSwgNSwgMjIwLCAzMywgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMjAsIDI2LCAxNSwgNSwgMjIwLCAyNywgMzAsIDYxLCAxNSwgCisgICAgNSwgMjIwLCAyNywgMzAsIDI1MiwgMTY5LCAxNSwgNSwgMjIwLCAyNywgMzAsIDI1MSwgMTE3LCAxNSwgNSwgMjIwLCAyNywgCisgICAgMzAsIDI0NywgMjE0LCAxNSwgNSwgMjIwLCAyNywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzNiwgNDIsIAorICAgIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjMzLCAxOTcsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzAsIDk4LCAxNSwgNSwgMjIwLCAyNywgMzAsIAorICAgIDIyMiwgMTAsIDE1LCA1LCAyMjAsIDIwLCAxNSwgNSwgMjIwLCAxNSwgMTUsIDUsIDIyMCwgMTYsIDIxNiwgMjQwLCAxNSwgNSwgCisgICAgMjIwLCAxNiwgMTE1LCAyMjAsIDE2LCAyNTEsIDEwNywgMTE1LCAyNTEsIDEwNiwgMTUsIDUsIDIyMCwgMTEsIDE1LCA1LCAKKyAgICAyMTksIDIyNywgMTUsIDUsIDIxOSwgMjI4LCAxMTUsIDIzNSwgMjAwLCAyMTksIDIyNywgMTUsIDUsIDIxOSwgMjI1LCAxNSwgCisgICAgNSwgMjE5LCAyMjQsIDE1LCA1LCAyMTksIDE5MywgMTUsIDUsIDIxOSwgMTk0LCAyNDIsIDEwMSwgMTUsIDUsIDIxOSwgMTg0LCAKKyAgICAxNSwgNSwgMjE5LCAxODIsIDE1LCA1LCAyMTksIDE4MywgMTE1LCAyMTksIDE4MywgMjE5LCAyMjUsIDE1LCA1LCAyMTksIAorICAgIDE3NSwgMTUsIDUsIDIxOSwgMTczLCAxNSwgNSwgMjE4LCA4NCwgMTUsIDUsIDIxOCwgODUsIDExNSwgMjE4LCA4NCwgMTUsIAorICAgIDUsIDIxOCwgNTUsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCA1MiwgMTUsIDUsIDIxOCwgNDQsIDE1LCA1LCAyMTgsIAorICAgIDQzLCAxNSwgNSwgMjE4LCAxOCwgMTUsIDUsIDIxOCwgMTcsIDE1LCA1LCAyMTcsIDEwNiwgMTUsIDUsIDIxNywgMTA3LCAKKyAgICAyNTMsIDIyNCwgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjQxLCAxODcsIDE1LCA1LCAyMTcsIDEwNywgMzAsIDIzMCwgMjM1LCAKKyAgICAxNSwgNSwgMjE3LCAxMDcsIDI0MiwgMTAxLCAxNSwgNSwgMjE3LCA5NCwgMTUsIDUsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjI4LCAyMzksIDExNSwgMjI4LCAyMzksIDI0NywgMTk2LCAxMTUsIDI0NywgMTk1LCAxNSwgNSwgMjE3LCA5NSwgMjE4LCAKKyAgICAyMzUsIDE1LCA1LCAyMTcsIDg1LCAxNSwgNSwgMTI5LCAzMCwgMjUyLCAxNCwgMTUsIDUsIDEyOSwgMzAsIDI0MiwgMTEwLCAKKyAgICAxNSwgNSwgMTI5LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDEyOSwgMzAsIDIxOSwgMjI3LCAxNSwgNSwgMTI5LCAzMCwgMjE1LCAKKyAgICAxMTQsIDE1LCA1LCAxMjksIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNywgNzMsIDE1LCA1LCAyMTcsIDUxLCAxNSwgNSwgCisgICAgMjE3LCAyMywgMTUsIDUsIDIxNywgMjQsIDI0MiwgMTAxLCAxNSwgNSwgMjE2LCAxMTgsIDE1LCA1LCAyMTYsIDExOSwgMjE2LCAKKyAgICAyNDAsIDE1LCA1LCAyMTYsIDkxLCAxNSwgNSwgMjE2LCA3MywgMTUsIDUsIDIxNiwgNzQsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjE2LCA3NCwgMTE1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMTE1LCAyMTYsIDc0LCAyNDMsIDEzNCwgMTE1LCAyNDMsIAorICAgIDEzNCwgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMTUsIDExOSwgMTUsIDUsIDIxNSwgMTE0LCAxNSwgNSwgCisgICAgMjE1LCAxMTIsIDE1LCA1LCAyMTUsIDEwOSwgMTUsIDUsIDIxNSwgOTksIDE1LCA1LCAyMTUsIDEwMCwgMTE1LCAyMTUsIAorICAgIDEwMCwgMjEwLCAxMTcsIDExNSwgMjEwLCAxMTYsIDE1LCA1LCA2OSwgMTUsIDUsIDEwNCwgMjQyLCAxMTAsIDE1LCA1LCAKKyAgICAxMDQsIDEwNCwgNjksIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMjYsIDk0LCAxMTUsIDIyNiwgOTQsIDI0MywgMTA0LCAxMTUsIAorICAgIDI0MywgMTAzLCAxNSwgNSwgMTA0LCAxMTUsIDEwNCwgMjE4LCAxOSwgMTE1LCAyMTgsIDE4LCAxNSwgNSwgMTA0LCAxMTUsIAorICAgIDEwNCwgMTA0LCAyMjMsIDUyLCAxMTUsIDEwNCwgMjIzLCA1MSwgMTUsIDUsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAyMjUsIAorICAgIDE1LCA1LCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgMjIwLCAyMzMsIDE5NywgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDIzMCwgMjM1LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIAorICAgIDk2LCA2OSwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgMTA0LCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgCisgICAgMjIwLCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ3LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDgsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIxNCwgMjE1LCAxNSwgNSwgMjE0LCAxOTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMywgCisgICAgMTIzLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzEsIDk3LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyMTQsIDE5OCwgMzAsIAorICAgIDIyMCwgMTAyLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCA2OSwgMTUsIDUsIDIxNCwgMTk2LCAxNSwgNSwgMjE0LCAxOTIsIDE1LCAKKyAgICA1LCAyMTQsIDE5MywgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAxOTEsIDE1LCA1LCAyMTQsIDE5MCwgMTUsIAorICAgIDUsIDIxNCwgMTkxLCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDI0OSwgMTMzLCAyMTQsIAorICAgIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyMjAsIDQ3LCAxNSwgNSwgMjE0LCAxNDgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNiwgCisgICAgOTYsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIxNCwgCisgICAgMTQ5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUyLCAxNCwgMTUsIDUsIDIxNCwgMTQ3LCAxNSwgNSwgMjE0LCAxNDQsIAorICAgIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCA2MSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjUzLCAyMzQsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQ2LCAKKyAgICA3NiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjE0LCAxNDAsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgCisgICAgMjE0LCAxNDAsIDMwLCAyNDIsIDEyMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzUsIDE3MiwgMTUsIAorICAgIDUsIDIxNCwgMTQwLCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjMyLCA4OSwgMTUsIDUsIDIxNCwgMTQwLCAKKyAgICAzMCwgMjMwLCAxOTMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDIxNCwgMTQwLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNSwgMTE5LCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAxMDQsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzOCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAKKyAgICAxMjYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDYxLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDIyMywgMTUsIDUsIDIxNCwgCisgICAgMTI3LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIxNywgNzMsIDE1LCA1LCAyMTQsIDEyMiwgMTUsIDUsIAorICAgIDIxNCwgMTI1LCAxNSwgNSwgMjE0LCAxMjMsIDE1LCA1LCAyMTQsIDExOSwgMTUsIDUsIDIxNCwgMTA4LCAxNSwgNSwgMjE0LCAKKyAgICAxMDksIDMwLCAyMzQsIDIxMywgMTUsIDUsIDIxNCwgMTA3LCAxNSwgNSwgMjEwLCAxMTYsIDE1LCA1LCAyMTAsIDExNywgCisgICAgMjE2LCAyNDAsIDE1LCA1LCAyMTAsIDExNywgOTIsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxMCwgMTEzLCAxNSwgNSwgMjEwLCAKKyAgICAxMDYsIDE1LCA1LCAyMTAsIDkzLCAxNSwgNSwgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDUsIDExNSwgMjEwLCA0NCwgMTUsIDUsIAorICAgIDIxMCwgNDMsIDE1LCA1LCAyMTAsIDQxLCAxNSwgNSwgMjEwLCA0MiwgMjM1LCA5LCAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgCisgICAgMzYsIDE1LCA1LCAyMTAsIDI4LCAxNSwgNSwgMjEwLCAxMywgMTUsIDUsIDIxMCwgMTEsIDE1LCA1LCAyMTAsIDEyLCAzMCwgCisgICAgNjEsIDE1LCA1LCAyMTAsIDEwLCAxNSwgNSwgMjEwLCA5LCAxNSwgMTMyLCA1LCAxMTMsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAKKyAgICAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI1MywgMjM5LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0NywgCisgICAgMTk1LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNDcsIDE5NSwgMTUsIAorICAgIDEzMiwgNSwgMjQ1LCAyMDEsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDY5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCA2OSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDY5LCAxNSwgMTMyLCAKKyAgICA1LCAyMjAsIDEyNCwgNjksIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCA2OSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDY5LCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQ1LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAKKyAgICAyMTksIDEyNywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAKKyAgICAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTIzLCAyNDMsIDQyLCAxNSwgCisgICAgMTMyLCA1LCAxMTMsIDI0MywgNDIsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQzLCAKKyAgICA0MiwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA4MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTksIAorICAgIDIyMCwgODAsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgODAsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyMjAsIDgwLCAxNSwgCisgICAgMTMyLCA1LCAyMjAsIDEyNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDIyOCwgMjA1LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAxMjMsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDExMywgMjIwLCA3NSwgCisgICAgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzYsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCAKKyAgICA1LCAyNDQsIDE5LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAKKyAgICAzMCwgMjQzLCAxMjYsIDk2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCA4MSwgMzAsIDI0MywgMTI2LCA5NiwgMjMwLCAKKyAgICAxOTMsIDE1LCAxMzIsIDUsIDEyMywgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDExMywgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCAxMDQsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIAorICAgIDE5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgCisgICAgMjQ0LCAyOCwgMjQ1LCA4MiwgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAyNDQsIDI4LCAyNDUsIDc5LCAxNSwgMTMyLCA1LCAKKyAgICAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyMywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAKKyAgICAyOCwgMjMyLCAyMjEsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjI0LCA2MSwgMTUsIAorICAgIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyMTksIAorICAgIDEyNywgMjE0LCAxMiwgMjQ0LCAyOCwgMjUzLCAyMzYsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAKKyAgICAyMzYsIDE1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAxNywgNjEsIDE1LCAxMzIsIDUsIAorICAgIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCAyNTMsIDE2NiwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIxNCwgCisgICAgMTIsIDI0NCwgMjgsIDIxNCwgMTIxLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjE0LCAxMjAsIAorICAgIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMxLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgCisgICAgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMCwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgCisgICAgMjksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMyLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAKKyAgICAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAyNDQsIAorICAgIDE5LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgCisgICAgNSwgMjE5LCAxMjcsIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTIzLCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgCisgICAgMTEzLCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgMTM0LCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTgsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MiwgMTU5LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAKKyAgICAxNTgsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MiwgMTU5LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjI4LCAyMTUsIAorICAgIDE1LCAxMzIsIDUsIDIyOCwgMjE2LCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgNzgsIDE1LCAxMzIsIDUsIDExMywgMjQ1LCA3OCwgCisgICAgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDI0NywgMTk1LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMTksIDExNiwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNzAsIDIxNCwgCisgICAgMTIsIDI0NCwgMjgsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY4LCAyMTQsIDEyLCAyNDQsIDI4LCA2MSwgMTUsIAorICAgIDEzMiwgNSwgMTIzLCAyNDUsIDE5NywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjI0LCAyNSwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDU1LCAyNTMsIDIyNywgMTIzLCAyMTksIDExNywgMTUsIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIyNCwgCisgICAgMjQsIDE1LCAyMjQsIDE0NCwgNSwgNTUsIDI1MywgMjI3LCAyMTEsIDIwOSwgMjQ3LCAxODAsIDE1LCAyMjQsIDE0NCwgNSwgCisgICAgNjcsIDI0OSwgMjM0LCAxNSwgMjI0LCAxNDQsIDUsIDI0OCwgNywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAKKyAgICAyMTUsIDIyMiwgMTIsIDEzLCAyNTUsIDE2NCwgMTIsIDEzLCAyNTUsIDE2MywgMTIsIDEzLCAyNTUsIDE2MiwgMTIsIDEzLCAKKyAgICAyNTUsIDE2MSwgMTIsIDEzLCAyNTUsIDE2MCwgMTIsIDEzLCAyNTUsIDE1OSwgMTIsIDEzLCAyNTUsIDE1OCwgMTIsIDEzLCAKKyAgICAyNTUsIDE1NywgMTIsIDEzLCAyNTUsIDE1NiwgMTIsIDEzLCAyNTUsIDE1NSwgMTIsIDEzLCAyNTUsIDE1NCwgMTIsIDEzLCAKKyAgICAyNTUsIDE1MywgMTIsIDEzLCAyNTUsIDE1MiwgMTIsIDEzLCAyNTUsIDE1MSwgMTIsIDEzLCAyNTUsIDE1MCwgMTIsIDEzLCAKKyAgICAyNTUsIDE0OSwgMTIsIDEzLCAyNTUsIDE0OCwgMTIsIDEzLCAyNTUsIDE0NywgMTIsIDEzLCAyNTUsIDE0NiwgMTIsIDEzLCAKKyAgICAyNTUsIDE0NSwgMTIsIDEzLCAyNTUsIDE0NCwgMTIsIDEzLCAyNTUsIDE0MywgMTIsIDEzLCAyNTUsIDE0MiwgMTIsIDEzLCAKKyAgICAyNTUsIDE0MSwgMTIsIDEzLCAyNTUsIDE0MCwgMTIsIDEzLCAyNTUsIDEzOSwgMTIsIDEzLCAyNTUsIDEzOCwgMTIsIDEzLCAKKyAgICAyNTUsIDEzNywgMTIsIDEzLCAyNTUsIDEzNiwgMTIsIDEzLCAyNTUsIDEzNSwgMTIsIDEzLCAyNTUsIDEzNCwgMTIsIDEzLCAKKyAgICAyNTUsIDEzMywgMTIsIDEzLCAyNTUsIDEzMiwgMTIsIDEzLCAyNTUsIDEzMSwgMTIsIDEzLCAyNTUsIDEzMCwgMTIsIDEzLCAKKyAgICAyNTUsIDEyOSwgMTIsIDEzLCAyNTUsIDEyOCwgMTIsIDEzLCAyNTUsIDEyNywgMTIsIDEzLCAyNTUsIDEyNiwgMTIsIDEzLCAKKyAgICAyNTUsIDEyNSwgMTIsIDEzLCAyNTUsIDEyNCwgMTIsIDEzLCAyNTUsIDEyMywgMTIsIDEzLCAyNTUsIDEyMiwgMTIsIDEzLCAKKyAgICAyNTUsIDEyMSwgMTIsIDEzLCAyNTUsIDEyMCwgMTIsIDEzLCAyNTUsIDExOSwgMTIsIDEzLCAyNTUsIDExOCwgMTIsIDEzLCAKKyAgICAyNTUsIDExNywgMTIsIDEzLCAyNTUsIDExNiwgMTIsIDEzLCAyNTUsIDExNSwgMTIsIDEzLCAyNTUsIDExNCwgMTIsIDEzLCAKKyAgICAyNTUsIDExMywgMTIsIDEzLCAyNTUsIDExMiwgMTIsIDEzLCAyNTUsIDExMSwgMTIsIDEzLCAyNTUsIDExMCwgMTIsIDEzLCAKKyAgICAyNTUsIDEwOSwgMTIsIDEzLCAyNTUsIDEwOCwgMTIsIDEzLCAyNTUsIDEwNywgMTIsIDEzLCAyNTUsIDEwNiwgMTIsIDEzLCAKKyAgICAyNTUsIDEwNSwgMTIsIDEzLCAyNTUsIDEwNCwgMTIsIDEzLCAyNTUsIDEwMywgMTIsIDEzLCAyNTUsIDEwMiwgMTIsIDEzLCAKKyAgICAyNTUsIDEwMSwgMTIsIDEzLCAyNTUsIDEwMCwgMTIsIDEzLCAyNTUsIDk5LCAxMiwgMTMsIDI1NSwgOTgsIDEyLCAxMywgCisgICAgMjU1LCA5NywgMTIsIDEzLCAyNTUsIDk2LCAxMiwgMTMsIDI1NSwgOTUsIDEyLCAxMywgMjU1LCA5NCwgMTIsIDEzLCAyNTUsIAorICAgIDkzLCAxMiwgMTMsIDI1NSwgOTIsIDEyLCAxMywgMjU1LCA5MSwgMTIsIDEzLCAyNTUsIDkwLCAxMiwgMTMsIDI1NSwgODksIAorICAgIDEyLCAxMywgMjU1LCA4OCwgMTIsIDEzLCAyNTUsIDg3LCAxMiwgMTMsIDI1NSwgODYsIDEyLCAxMywgMjU1LCA4NSwgMTIsIAorICAgIDEzLCAyNTMsIDE2NCwgMTIsIDEzLCAyNTMsIDE2MiwgMTIsIDEzLCAyNTMsIDE2MCwgMTIsIDEzLCAyNTMsIDE1OCwgMTIsIAorICAgIDEzLCAyNTMsIDE1NiwgMTIsIDEzLCAyNTMsIDE1NSwgMTIsIDEzLCAyNTMsIDE1MywgMTIsIDEzLCAyNTMsIDE1MSwgMTIsIAorICAgIDEzLCAyNTMsIDE0OSwgMTIsIDEzLCAyNTMsIDE0NywgMTIsIDEzLCAyNTEsIDcwLCAxMiwgMTMsIDI1MSwgNjksIDEyLCAxMywgCisgICAgMjUxLCA2OCwgMTIsIDEzLCAyNTEsIDY3LCAxMiwgMTMsIDI1MSwgNjYsIDEyLCAxMywgMjUxLCA2NSwgMTIsIDEzLCAyNTEsIAorICAgIDY0LCAxMiwgMTMsIDI1MSwgNjMsIDEyLCAxMywgMjUxLCA2MiwgMTIsIDEzLCAyNTEsIDYxLCAxMiwgMTMsIDI1MSwgNjAsIAorICAgIDEyLCAxMywgMjUxLCA1OSwgMTIsIDEzLCAyNTEsIDU4LCAxMiwgMTMsIDI1MSwgNTcsIDEyLCAxMywgMjUxLCA1NiwgMTIsIAorICAgIDEzLCAyNTEsIDU1LCAxMiwgMTMsIDI1MSwgNTQsIDEyLCAxMywgMjUxLCA1MywgMTIsIDEzLCAyNTEsIDUyLCAxMiwgMTMsIAorICAgIDI1MSwgNTEsIDEyLCAxMywgMjUxLCA1MCwgMTIsIDEzLCAyNTEsIDQ5LCAxMiwgMTMsIDI1MSwgNDgsIDEyLCAxMywgMjUxLCAKKyAgICA0NywgMTIsIDEzLCAyNTEsIDQ2LCAxMiwgMTMsIDI1MSwgNDUsIDEyLCAxMywgMjUxLCA0NCwgMTIsIDEzLCAyNTEsIDQzLCAKKyAgICAxMiwgMTMsIDI0OSwgNjcsIDEyLCAxMywgMjQ5LCA2NiwgMTIsIDEzLCAyNDksIDY1LCAxMiwgMTMsIDI0OSwgNjQsIDEyLCAKKyAgICAxMywgMjQ5LCA2MywgMTIsIDEzLCAyNDksIDYyLCAxMiwgMTMsIDI0OSwgNjEsIDEyLCAxMywgMjQ5LCA2MCwgMTIsIDEzLCAKKyAgICAyNDksIDU5LCAxMiwgMTMsIDI0OSwgNTgsIDEyLCAxMywgMjQ5LCA1NywgMTIsIDEzLCAyNDksIDU2LCAxMiwgMTMsIDI0OSwgCisgICAgNTUsIDEyLCAxMywgMjQ5LCA1NCwgMTIsIDEzLCAyNDksIDUzLCAxMiwgMTMsIDI0OSwgNTIsIDEyLCAxMywgMjQ5LCA1MSwgCisgICAgMTIsIDEzLCAyNDksIDUwLCAxMiwgMTMsIDI0OSwgNDksIDEyLCAxMywgMjQ5LCA0OCwgMTIsIDEzLCAyNDksIDQ3LCAxMiwgCisgICAgMTMsIDI0OSwgNDYsIDEyLCAxMywgMjQ5LCA0NSwgMTIsIDEzLCAyNDksIDQ0LCAxMiwgMTMsIDI0OSwgNDMsIDEyLCAxMywgCisgICAgMjQ5LCA0MiwgMTIsIDEzLCAyNDksIDQxLCAxMiwgMTMsIDI0OSwgNDAsIDEyLCAxMywgMjQ5LCAzOSwgMTIsIDEzLCAyNDksIAorICAgIDM4LCAxMiwgMTMsIDI0OSwgMzcsIDEyLCAxMywgMjQ5LCAzNiwgMTIsIDEzLCAyNDksIDM1LCAxMiwgMTMsIDI0OSwgMzQsIAorICAgIDEyLCAxMywgMjQ5LCAzMywgMTIsIDEzLCAyNDksIDMyLCAxMiwgMTMsIDI0OSwgMzEsIDEyLCAxMywgMjQ5LCAzMCwgMTIsIAorICAgIDEzLCAyNDksIDI5LCAxMiwgMTMsIDI0OSwgMjgsIDEyLCAxMywgMjQ5LCAyNywgMTIsIDEzLCAyNDksIDI2LCAxMiwgMTMsIAorICAgIDI0OSwgMjUsIDEyLCAxMywgMjQ5LCAyNCwgMTIsIDEzLCAyNDksIDIzLCAxMiwgMTMsIDI0OSwgMjIsIDEyLCAxMywgMjQ5LCAKKyAgICAyMSwgMTIsIDEzLCAyNDksIDIwLCAxMiwgMTMsIDI0OSwgMTksIDEyLCAxMywgMjQ5LCAxOCwgMTIsIDEzLCAyNDksIDE3LCAKKyAgICAxMiwgMTMsIDI0OSwgMTYsIDEyLCAxMywgMjQ5LCAxNSwgMTIsIDEzLCAyNDksIDE0LCAxMiwgMTMsIDI0OSwgMTMsIDEyLCAKKyAgICAxMywgMjQ5LCAxMiwgMTIsIDEzLCAyNDksIDExLCAxMiwgMTMsIDI0OSwgMTAsIDEyLCAxMywgMjQ5LCA5LCAxMiwgMTMsIAorICAgIDI0OSwgOCwgMTIsIDEzLCAyNDksIDcsIDEyLCAxMywgMjQ5LCA2LCAxMiwgMTMsIDI0OSwgNSwgMTIsIDEzLCAyNDksIDQsIAorICAgIDEyLCAxMywgMjQ5LCAzLCAxMiwgMTMsIDI0OSwgMiwgMTIsIDEzLCAyNDksIDEsIDEyLCAxMywgMjQ5LCAwLCAxMiwgMTMsIAorICAgIDI0OCwgMjU1LCAxMiwgMTMsIDI0OCwgMjU0LCAxMiwgMTMsIDI0OCwgMjUzLCAxMiwgMTMsIDI0OCwgMjUyLCAxMiwgMTMsIAorICAgIDI0OCwgMjUxLCAxMiwgMTMsIDI0OCwgMjUwLCAxMiwgMTMsIDI0OCwgMjQ5LCAxMiwgMTMsIDI0OCwgMjQ4LCAxMiwgMTMsIAorICAgIDI0OCwgMjQ3LCAxMiwgMTMsIDI0OCwgMjQ2LCAxMiwgMTMsIDI0OCwgMjQ1LCAxMiwgMTMsIDI0OCwgMjQ0LCAxMiwgMTMsIAorICAgIDI0OCwgMjQzLCAxMiwgMTMsIDI0OCwgMjQyLCAxMiwgMTMsIDI0OCwgMjQxLCAxMiwgMTMsIDI0OCwgMjQwLCAxMiwgMTMsIAorICAgIDI0OCwgMjM5LCAxMiwgMTMsIDI0OCwgMjM4LCAxMiwgMTMsIDI0OCwgMjM3LCAxMiwgMTMsIDI0OCwgMjM2LCAxMiwgMTMsIAorICAgIDI0OCwgMjM1LCAxMiwgMTMsIDI0OCwgMjM0LCAxMiwgMTMsIDI0OCwgMjMzLCAxMiwgMTMsIDI0OCwgMjMyLCAxMiwgMTMsIAorICAgIDI0NiwgMzEsIDEyLCAxMywgMjQ2LCAzMCwgMTIsIDEzLCAyNDYsIDI5LCAxMiwgMTMsIDI0NiwgMjgsIDEyLCAxMywgMjQ2LCAKKyAgICAyNywgMTIsIDEzLCAyNDYsIDI2LCAxMiwgMTMsIDI0NiwgMjUsIDEyLCAxMywgMjQ2LCAyNCwgMTIsIDEzLCAyNDYsIDIzLCAKKyAgICAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAKKyAgICAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAKKyAgICAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgCisgICAgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgCisgICAgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIAorICAgIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAKKyAgICAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAKKyAgICAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAKKyAgICAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgMTMsIDEyLCAxMywgMjQ1LCAxMiwgMTIsIDEzLCAyNDUsIDExLCAxMiwgCisgICAgMTMsIDI0NSwgMTAsIDEyLCAxMywgMjQ1LCA5LCAxMiwgMTMsIDI0NSwgOCwgMTIsIDEzLCAyNDUsIDcsIDEyLCAxMywgMjQ1LCAKKyAgICA2LCAxMiwgMTMsIDI0NSwgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIAorICAgIDEzLCAyNDUsIDEsIDEyLCAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIAorICAgIDI0NCwgMjUzLCAxMiwgMTMsIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIAorICAgIDI0NCwgMjQ5LCAxMiwgMTMsIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIAorICAgIDI0NCwgMjQ1LCAxMiwgMTMsIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIAorICAgIDI0NCwgMjQxLCAxMiwgMTMsIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIAorICAgIDI0NCwgMjM3LCAxMiwgMTMsIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIAorICAgIDI0NCwgMjMzLCAxMiwgMTMsIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIAorICAgIDI0NCwgMjI5LCAxMiwgMTMsIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIAorICAgIDI0NCwgMjI1LCAxMiwgMTMsIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIAorICAgIDI0NCwgMjIxLCAxMiwgMTMsIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIAorICAgIDI0NCwgMjE3LCAxMiwgMTMsIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIAorICAgIDI0NCwgMjEzLCAxMiwgMTMsIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIAorICAgIDI0NCwgMjA5LCAxMiwgMTMsIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIAorICAgIDI0NCwgMjA1LCAxMiwgMTMsIDI0MywgMjA4LCAxMiwgMTMsIDI0MywgMjA3LCAxMiwgMTMsIDI0MywgMjA2LCAxMiwgMTMsIAorICAgIDI0MywgMjA1LCAxMiwgMTMsIDI0MywgMjA0LCAxMiwgMTMsIDI0MywgMjAzLCAxMiwgMTMsIDI0MywgMjAyLCAxMiwgMTMsIAogICAgIDI0MywgMjAxLCAxMiwgMTMsIDI0MywgMjAwLCAxMiwgMTMsIDI0MywgMTk5LCAxMiwgMTMsIDI0MywgMTk4LCAxMiwgMTMsIAogICAgIDI0MywgMTk3LCAxMiwgMTMsIDI0MywgMTk2LCAxMiwgMTMsIDI0MywgMTk1LCAxMiwgMTMsIDI0MywgMTk0LCAxMiwgMTMsIAogICAgIDI0MywgMTkzLCAxMiwgMTMsIDI0MywgMTkyLCAxMiwgMTMsIDI0MywgMTkxLCAxMiwgMTMsIDI0MywgMTkwLCAxMiwgMTMsIApAQCAtMTIwMTUsODEgKzEyMDE2LDgwIEBACiAgICAgMjQzLCAxNTcsIDEyLCAxMywgMjQzLCAxNTYsIDEyLCAxMywgMjQzLCAxNTUsIDEyLCAxMywgMjQzLCAxNTQsIDEyLCAxMywgCiAgICAgMjQzLCAxNTMsIDEyLCAxMywgMjQzLCAxNTIsIDEyLCAxMywgMjQzLCAxNTEsIDEyLCAxMywgMjQzLCAxNTAsIDEyLCAxMywgCiAgICAgMjQzLCAxNDksIDEyLCAxMywgMjQzLCAxNDgsIDEyLCAxMywgMjQzLCAxNDcsIDEyLCAxMywgMjQzLCAxNDYsIDEyLCAxMywgCi0gICAgMjQzLCAxNDUsIDEyLCAxMywgMjQzLCAxNDQsIDEyLCAxMywgMjQzLCAxNDMsIDEyLCAxMywgMjQzLCAxNDIsIDEyLCAxMywgCi0gICAgMjQzLCAxNDEsIDEyLCAxMywgMjQzLCAxNDAsIDEyLCAxMywgMjQzLCAxMzksIDEyLCAxMywgMjQzLCAxMzgsIDEyLCAxMywgCi0gICAgMjQyLCA1OCwgMTIsIDEzLCAyNDIsIDU3LCAxMiwgMTMsIDI0MiwgNTYsIDEyLCAxMywgMjQyLCA1NSwgMTIsIDEzLCAyNDIsIAotICAgIDU0LCAxMiwgMTMsIDI0MiwgNTMsIDEyLCAxMywgMjQyLCA1MiwgMTIsIDEzLCAyNDIsIDUxLCAxMiwgMTMsIDI0MiwgNTAsIAorICAgIDI0MywgMTQ1LCAxMiwgMTMsIDI0MiwgNjUsIDEyLCAxMywgMjQyLCA2NCwgMTIsIDEzLCAyNDIsIDYzLCAxMiwgMTMsIDI0MiwgCisgICAgNjIsIDEyLCAxMywgMjQyLCA2MSwgMTIsIDEzLCAyNDIsIDYwLCAxMiwgMTMsIDI0MiwgNTksIDEyLCAxMywgMjQyLCA1OCwgCisgICAgMTIsIDEzLCAyNDIsIDU3LCAxMiwgMTMsIDI0MCwgMTQ1LCAxMiwgMTMsIDI0MCwgMTQ0LCAxMiwgMTMsIDI0MCwgMTQzLCAKKyAgICAxMiwgMTMsIDI0MCwgMTQyLCAxMiwgMTMsIDI0MCwgMTQxLCAxMiwgMTMsIDI0MCwgMTQwLCAxMiwgMTMsIDI0MCwgMTM5LCAKICAgICAxMiwgMTMsIDI0MCwgMTM4LCAxMiwgMTMsIDI0MCwgMTM3LCAxMiwgMTMsIDI0MCwgMTM2LCAxMiwgMTMsIDI0MCwgMTM1LCAKICAgICAxMiwgMTMsIDI0MCwgMTM0LCAxMiwgMTMsIDI0MCwgMTMzLCAxMiwgMTMsIDI0MCwgMTMyLCAxMiwgMTMsIDI0MCwgMTMxLCAKICAgICAxMiwgMTMsIDI0MCwgMTMwLCAxMiwgMTMsIDI0MCwgMTI5LCAxMiwgMTMsIDI0MCwgMTI4LCAxMiwgMTMsIDI0MCwgMTI3LCAKLSAgICAxMiwgMTMsIDI0MCwgMTI2LCAxMiwgMTMsIDI0MCwgMTI1LCAxMiwgMTMsIDI0MCwgMTI0LCAxMiwgMTMsIDI0MCwgMTIzLCAKLSAgICAxMiwgMTMsIDI0MCwgMTIyLCAxMiwgMTMsIDI0MCwgMTIxLCAxMiwgMTMsIDI0MCwgMTIwLCAxMiwgMTMsIDIzNSwgMjIsIAotICAgIDEyLCAxMywgMjM1LCAyMSwgMTIsIDEzLCAyMzUsIDIwLCAxMiwgMTMsIDIzNSwgMTksIDEyLCAxMywgMjM1LCAxOCwgMTIsIAotICAgIDEzLCAyMzUsIDE3LCAxMiwgMTMsIDIzNSwgMTYsIDEyLCAxMywgMjM1LCAxNSwgMTIsIDEzLCAyMzMsIDE0NiwgMTIsIDEzLCAKLSAgICAyMzMsIDE0NSwgMTIsIDEzLCAyMzMsIDE0NCwgMTIsIDEzLCAyMzMsIDE0MywgMTIsIDEzLCAyMzMsIDE0MiwgMTIsIDEzLCAKLSAgICAyMzMsIDE0MSwgMTIsIDEzLCAyMzMsIDE0MCwgMTIsIDEzLCAyMzMsIDEzOSwgMTIsIDEzLCAyMzMsIDEzOCwgMTIsIDEzLCAKLSAgICAyMzMsIDEzNywgMTIsIDEzLCAyMzIsIDQ5LCAxMiwgMTMsIDIzMiwgNDgsIDEyLCAxMywgMjMyLCA0NywgMTIsIDEzLCAyMzIsIAotICAgIDQ2LCAxMiwgMTMsIDIzMiwgNDUsIDEyLCAxMywgMjMyLCA0NCwgMTIsIDEzLCAyMzIsIDQzLCAxMiwgMTMsIDIzMiwgNDIsIAotICAgIDEyLCAxMywgMjMyLCA0MSwgMTIsIDEzLCAyMzIsIDQwLCAxMiwgMTMsIDIzMiwgMzksIDEyLCAxMywgMjMyLCAzOCwgMTIsIAotICAgIDEzLCAyMzIsIDM3LCAxMiwgMTMsIDIzMiwgMzYsIDEyLCAxMywgMjMyLCAzNSwgMTIsIDEzLCAyMzIsIDM0LCAxMiwgMTMsIAotICAgIDIzMiwgMzMsIDEyLCAxMywgMjMyLCAzMiwgMTIsIDEzLCAyMzIsIDMxLCAxMiwgMTMsIDIzMiwgMzAsIDEyLCAxMywgMjMyLCAKLSAgICAyOSwgMTIsIDEzLCAyMzIsIDI4LCAxMiwgMTMsIDIzMiwgMjcsIDEyLCAxMywgMjMyLCAyNiwgMTIsIDEzLCAyMzIsIDI1LCAKLSAgICAxMiwgMTMsIDIzMiwgMjQsIDEyLCAxMywgMjMyLCAyMywgMTIsIDEzLCAyMzIsIDIyLCAxMiwgMTMsIDIzMiwgMjEsIDEyLCAKLSAgICAxMywgMjMyLCAyMCwgMTIsIDEzLCAyMzIsIDE5LCAxMiwgMTMsIDIzMiwgMTgsIDEyLCAxMywgMjMyLCAxNywgMTIsIDEzLCAKLSAgICAyMzIsIDE2LCAxMiwgMTMsIDIzMiwgMTUsIDEyLCAxMywgMjMyLCAxNCwgMTIsIDEzLCAyMzIsIDEzLCAxMiwgMTMsIDIzMiwgCi0gICAgMTIsIDEyLCAxMywgMjMyLCAxMSwgMTIsIDEzLCAyMzIsIDEwLCAxMiwgMTMsIDIzMiwgOSwgMTIsIDEzLCAyMzIsIDgsIDEyLCAKLSAgICAxMywgMjMyLCA3LCAxMiwgMTMsIDIzMiwgNiwgMTIsIDEzLCAyMzIsIDUsIDEyLCAxMywgMjMyLCA0LCAxMiwgMTMsIDIzMiwgCi0gICAgMywgMTIsIDEzLCAyMzIsIDIsIDEyLCAxMywgMjMyLCAxLCAxMiwgMTMsIDIzMiwgMCwgMTIsIDEzLCAyMzEsIDI1NSwgMTIsIAotICAgIDEzLCAyMzEsIDI1NCwgMTIsIDEzLCAyMzEsIDI1MywgMTIsIDEzLCAyMzEsIDI1MiwgMTIsIDEzLCAyMzEsIDI1MSwgMTIsIAotICAgIDEzLCAyMzEsIDI1MCwgMTIsIDEzLCAyMzEsIDI0OSwgMTIsIDEzLCAyMzEsIDI0OCwgMTIsIDEzLCAyMzEsIDI0NywgMTIsIAotICAgIDEzLCAyMzEsIDI0NiwgMTIsIDEzLCAyMzEsIDI0NSwgMTIsIDEzLCAyMzEsIDI0NCwgMTIsIDEzLCAyMzEsIDI0MywgMTIsIAotICAgIDEzLCAyMzEsIDI0MiwgMTIsIDEzLCAyMzEsIDI0MSwgMTIsIDEzLCAyMzEsIDI0MCwgMTIsIDEzLCAyMzAsIDIyLCAxMiwgCi0gICAgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgCi0gICAgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIAotICAgIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgCi0gICAgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgCi0gICAgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgCi0gICAgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgCi0gICAgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgCi0gICAgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgCi0gICAgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgCi0gICAgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgCi0gICAgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjksIDIzNCwgMTIsIDEzLCAyMjksIDIzMywgMTIsIDEzLCAyMjksIDIzMiwgCi0gICAgMTIsIDEzLCAyMjksIDIzMSwgMTIsIDEzLCAyMjksIDIzMCwgMTIsIDEzLCAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgCi0gICAgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAyMjgsIDExOCwgMTIsIDEzLCAyMjgsIDExNywgCi0gICAgMTIsIDEzLCAyMjgsIDExNiwgMTIsIDEzLCAyMjgsIDExNSwgMTIsIDEzLCAyMjgsIDExNCwgMTIsIDEzLCAyMjgsIDExMywgCi0gICAgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgCi0gICAgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgCi0gICAgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDIxNSwgMTIsIDEzLCAyMjcsIDIxNCwgMTIsIDEzLCAyMjcsIDIxMywgCi0gICAgMTIsIDEzLCAyMjcsIDIxMiwgMTIsIDEzLCAyMjcsIDIxMSwgMTIsIDEzLCAyMjcsIDc2LCAxMiwgMTMsIDIyNywgNzUsIDEyLCAKLSAgICAxMywgMjI3LCA3NCwgMTIsIDEzLCAyMjcsIDczLCAxMiwgMTMsIDIyNywgNzIsIDEyLCAxMywgMjI3LCA3MSwgMTIsIDEzLCAKLSAgICAyMjcsIDcwLCAxMiwgMTMsIDIyNywgNjksIDEyLCAxMywgMjI3LCA2OCwgMTIsIDEzLCAyMjcsIDY3LCAxMiwgMTMsIDIyNywgCi0gICAgNjYsIDEyLCAxMywgMjI3LCA2NSwgMTIsIDEzLCAyMjcsIDY0LCAxMiwgMTMsIDIyNywgNjMsIDEyLCAxMywgMjI3LCA2MiwgCi0gICAgMTIsIDEzLCAyMjcsIDYxLCAxMiwgMTMsIDIyNywgNjAsIDEyLCAxMywgMjI3LCA1OSwgMTIsIDEzLCAyMjcsIDU4LCAxMiwgCi0gICAgMTMsIDIyNywgNTcsIDEyLCAxMywgMjI3LCA1NiwgMTIsIDEzLCAyMjcsIDU1LCAxMiwgMTMsIDIyNywgNTQsIDEyLCAxMywgCi0gICAgMjI3LCA1MywgMTIsIDEzLCAyMjcsIDUyLCAxMiwgMTMsIDIyNywgNTEsIDEyLCAxMywgMjI3LCA1MCwgMTIsIDEzLCAyMjcsIAotICAgIDQ5LCAxMiwgMTMsIDIyNywgNDgsIDEyLCAxMywgMjI3LCA0NywgMTIsIDEzLCAyMjcsIDQ2LCAxMiwgMTMsIDIyNywgNDUsIAotICAgIDEyLCAxMywgMjI3LCA0NCwgMTIsIDEzLCAyMjcsIDQzLCAxMiwgMTMsIDIyNywgNDIsIDEyLCAxMywgMjI3LCA0MSwgMTIsIAotICAgIDEzLCAyMjcsIDQwLCAxMiwgMTMsIDIyNywgMzksIDEyLCAxMywgMjI3LCAzOCwgMTIsIDEzLCAyMjcsIDM3LCAxMiwgMTMsIAotICAgIDIyNywgMzYsIDEyLCAxMywgMjI3LCAzNSwgMTIsIDEzLCAyMjcsIDM0LCAxMiwgMTMsIDIyNywgMzMsIDEyLCAxMywgMjI3LCAKLSAgICAzMiwgMTIsIDEzLCAyMjcsIDMxLCAxMiwgMTMsIDIyNywgMzAsIDEyLCAxMywgMjI3LCAyOSwgMTIsIDEzLCAyMjcsIDI4LCAKLSAgICAxMiwgMTMsIDIyNywgMjcsIDEyLCAxMywgMjI3LCAyNiwgMTIsIDEzLCAyMjcsIDI1LCAxMiwgMTMsIDIyNywgMjQsIDEyLCAKLSAgICAxMywgMjI3LCAyMywgMTIsIDEzLCAyMjcsIDIyLCAxMiwgMTMsIDIyNywgMjEsIDEyLCAxMywgMjI3LCAyMCwgMTIsIDEzLCAKLSAgICAyMjcsIDE5LCAxMiwgMTMsIDIyNywgMTgsIDEyLCAxMywgMjI3LCAxNywgMTIsIDEzLCAyMjcsIDE2LCAxMiwgMTMsIDIyNywgCi0gICAgMTUsIDEyLCAxMywgMjI3LCAxNCwgMTIsIDEzLCAyMjcsIDEzLCAxMiwgMTMsIDIyNywgMTIsIDEyLCAxMywgMjI3LCAxMSwgCi0gICAgMTIsIDEzLCAyMjcsIDEwLCAxMiwgMTMsIDIyNywgOSwgMTIsIDEzLCAyMjcsIDgsIDEyLCAxMywgMjI3LCA3LCAxMiwgMTMsIAotICAgIDIyNywgNiwgMTIsIDEzLCAyMjcsIDUsIDEyLCAxMywgMjI3LCA0LCAxMiwgMTMsIDIyNywgMywgMTIsIDEzLCAyMjcsIDIsIAotICAgIDEyLCAxMywgMjI2LCAxMDQsIDEyLCAxMywgMjI2LCAxMDMsIDEyLCAxMywgMjI2LCAxMDIsIDEyLCAxMywgMjI2LCAxMDEsIAotICAgIDEyLCAxMywgMjI2LCAxMDAsIDEyLCAxMywgMjI2LCA5OSwgMTIsIDEzLCAyMjYsIDk4LCAxMiwgMTMsIDIyNiwgOTcsIDEyLCAKLSAgICAxMywgMjI2LCA5NiwgMTIsIDEzLCAyMjYsIDk1LCAxMiwgMTMsIDIyNiwgOTQsIDEyLCAxMywgMjI2LCA5MywgMTIsIDEzLCAKLSAgICAyMjYsIDkyLCAxMiwgMTMsIDIyNCwgOTUsIDEyLCAxMywgMjI0LCA5NCwgMTIsIDEzLCAyMjQsIDkzLCAxMiwgMTMsIDIyNCwgCi0gICAgOTIsIDEyLCAxMywgMjI0LCA5MSwgMTIsIDEzLCAyMjQsIDkwLCAxMiwgMTMsIDIyNCwgODksIDEyLCAxMywgMjIzLCAyMjIsIAorICAgIDEyLCAxMywgMjM1LCAyOCwgMTIsIDEzLCAyMzUsIDI3LCAxMiwgMTMsIDIzNSwgMjYsIDEyLCAxMywgMjM1LCAyNSwgMTIsIAorICAgIDEzLCAyMzUsIDI0LCAxMiwgMTMsIDIzNSwgMjMsIDEyLCAxMywgMjM1LCAyMiwgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIAorICAgIDIzMywgMTUyLCAxMiwgMTMsIDIzMywgMTUxLCAxMiwgMTMsIDIzMywgMTUwLCAxMiwgMTMsIDIzMywgMTQ5LCAxMiwgMTMsIAorICAgIDIzMywgMTQ4LCAxMiwgMTMsIDIzMywgMTQ3LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIDIzMywgMTQ1LCAxMiwgMTMsIAorICAgIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMiwgNTQsIDEyLCAxMywgMjMyLCA1MywgMTIsIDEzLCAKKyAgICAyMzIsIDUyLCAxMiwgMTMsIDIzMiwgNTEsIDEyLCAxMywgMjMyLCA1MCwgMTIsIDEzLCAyMzIsIDQ5LCAxMiwgMTMsIDIzMiwgCisgICAgNDgsIDEyLCAxMywgMjMyLCA0NywgMTIsIDEzLCAyMzIsIDQ2LCAxMiwgMTMsIDIzMiwgNDUsIDEyLCAxMywgMjMyLCA0NCwgCisgICAgMTIsIDEzLCAyMzIsIDQzLCAxMiwgMTMsIDIzMiwgNDIsIDEyLCAxMywgMjMyLCA0MSwgMTIsIDEzLCAyMzIsIDQwLCAxMiwgCisgICAgMTMsIDIzMiwgMzksIDEyLCAxMywgMjMyLCAzOCwgMTIsIDEzLCAyMzIsIDM3LCAxMiwgMTMsIDIzMiwgMzYsIDEyLCAxMywgCisgICAgMjMyLCAzNSwgMTIsIDEzLCAyMzIsIDM0LCAxMiwgMTMsIDIzMiwgMzMsIDEyLCAxMywgMjMyLCAzMiwgMTIsIDEzLCAyMzIsIAorICAgIDMxLCAxMiwgMTMsIDIzMiwgMzAsIDEyLCAxMywgMjMyLCAyOSwgMTIsIDEzLCAyMzIsIDI4LCAxMiwgMTMsIDIzMiwgMjcsIAorICAgIDEyLCAxMywgMjMyLCAyNiwgMTIsIDEzLCAyMzIsIDI1LCAxMiwgMTMsIDIzMiwgMjQsIDEyLCAxMywgMjMyLCAyMywgMTIsIAorICAgIDEzLCAyMzIsIDIyLCAxMiwgMTMsIDIzMiwgMjEsIDEyLCAxMywgMjMyLCAyMCwgMTIsIDEzLCAyMzIsIDE5LCAxMiwgMTMsIAorICAgIDIzMiwgMTgsIDEyLCAxMywgMjMyLCAxNywgMTIsIDEzLCAyMzIsIDE2LCAxMiwgMTMsIDIzMiwgMTUsIDEyLCAxMywgMjMyLCAKKyAgICAxNCwgMTIsIDEzLCAyMzIsIDEzLCAxMiwgMTMsIDIzMiwgMTIsIDEyLCAxMywgMjMyLCAxMSwgMTIsIDEzLCAyMzIsIDEwLCAKKyAgICAxMiwgMTMsIDIzMiwgOSwgMTIsIDEzLCAyMzIsIDgsIDEyLCAxMywgMjMyLCA3LCAxMiwgMTMsIDIzMiwgNiwgMTIsIDEzLCAKKyAgICAyMzIsIDUsIDEyLCAxMywgMjMyLCA0LCAxMiwgMTMsIDIzMiwgMywgMTIsIDEzLCAyMzIsIDIsIDEyLCAxMywgMjMyLCAxLCAKKyAgICAxMiwgMTMsIDIzMiwgMCwgMTIsIDEzLCAyMzEsIDI1NSwgMTIsIDEzLCAyMzEsIDI1NCwgMTIsIDEzLCAyMzEsIDI1MywgMTIsIAorICAgIDEzLCAyMzEsIDI1MiwgMTIsIDEzLCAyMzEsIDI1MSwgMTIsIDEzLCAyMzEsIDI1MCwgMTIsIDEzLCAyMzEsIDI0OSwgMTIsIAorICAgIDEzLCAyMzEsIDI0OCwgMTIsIDEzLCAyMzEsIDI0NywgMTIsIDEzLCAyMzEsIDI0NiwgMTIsIDEzLCAyMzEsIDI0NSwgMTIsIAorICAgIDEzLCAyMzAsIDI3LCAxMiwgMTMsIDIzMCwgMjYsIDEyLCAxMywgMjMwLCAyNSwgMTIsIDEzLCAyMzAsIDI0LCAxMiwgMTMsIAorICAgIDIzMCwgMjMsIDEyLCAxMywgMjMwLCAyMiwgMTIsIDEzLCAyMzAsIDIxLCAxMiwgMTMsIDIzMCwgMjAsIDEyLCAxMywgMjMwLCAKKyAgICAxOSwgMTIsIDEzLCAyMzAsIDE4LCAxMiwgMTMsIDIzMCwgMTcsIDEyLCAxMywgMjMwLCAxNiwgMTIsIDEzLCAyMzAsIDE1LCAKKyAgICAxMiwgMTMsIDIzMCwgMTQsIDEyLCAxMywgMjMwLCAxMywgMTIsIDEzLCAyMzAsIDEyLCAxMiwgMTMsIDIzMCwgMTEsIDEyLCAKKyAgICAxMywgMjMwLCAxMCwgMTIsIDEzLCAyMzAsIDksIDEyLCAxMywgMjMwLCA4LCAxMiwgMTMsIDIzMCwgNywgMTIsIDEzLCAyMzAsIAorICAgIDYsIDEyLCAxMywgMjMwLCA1LCAxMiwgMTMsIDIzMCwgNCwgMTIsIDEzLCAyMzAsIDMsIDEyLCAxMywgMjMwLCAyLCAxMiwgCisgICAgMTMsIDIzMCwgMSwgMTIsIDEzLCAyMzAsIDAsIDEyLCAxMywgMjI5LCAyNTUsIDEyLCAxMywgMjI5LCAyNTQsIDEyLCAxMywgCisgICAgMjI5LCAyNTMsIDEyLCAxMywgMjI5LCAyNTIsIDEyLCAxMywgMjI5LCAyNTEsIDEyLCAxMywgMjI5LCAyNTAsIDEyLCAxMywgCisgICAgMjI5LCAyNDksIDEyLCAxMywgMjI5LCAyNDgsIDEyLCAxMywgMjI5LCAyNDcsIDEyLCAxMywgMjI5LCAyNDYsIDEyLCAxMywgCisgICAgMjI5LCAyNDUsIDEyLCAxMywgMjI5LCAyNDQsIDEyLCAxMywgMjI5LCAyNDMsIDEyLCAxMywgMjI5LCAyNDIsIDEyLCAxMywgCisgICAgMjI5LCAyNDEsIDEyLCAxMywgMjI5LCAyNDAsIDEyLCAxMywgMjI5LCAyMzksIDEyLCAxMywgMjI5LCAyMzgsIDEyLCAxMywgCisgICAgMjI5LCAyMzcsIDEyLCAxMywgMjI5LCAyMzYsIDEyLCAxMywgMjI5LCAyMzUsIDEyLCAxMywgMjI4LCAxMzksIDEyLCAxMywgCisgICAgMjI4LCAxMzgsIDEyLCAxMywgMjI4LCAxMzcsIDEyLCAxMywgMjI4LCAxMzYsIDEyLCAxMywgMjI4LCAxMzUsIDEyLCAxMywgCisgICAgMjI4LCAxMzQsIDEyLCAxMywgMjI4LCAxMzMsIDEyLCAxMywgMjI4LCAxMzIsIDEyLCAxMywgMjI4LCAxMzEsIDEyLCAxMywgCisgICAgMjI4LCAxMzAsIDEyLCAxMywgMjI4LCAxMjksIDEyLCAxMywgMjI4LCAxMjgsIDEyLCAxMywgMjI4LCAxMjcsIDEyLCAxMywgCisgICAgMjI4LCAxMjYsIDEyLCAxMywgMjI4LCAxMjUsIDEyLCAxMywgMjI4LCAxMjQsIDEyLCAxMywgMjI4LCAxMjMsIDEyLCAxMywgCisgICAgMjI4LCAxMjIsIDEyLCAxMywgMjI4LCAxMjEsIDEyLCAxMywgMjI4LCAxMjAsIDEyLCAxMywgMjI4LCAxMTksIDEyLCAxMywgCisgICAgMjI4LCAxMTgsIDEyLCAxMywgMjI3LCAyNDEsIDEyLCAxMywgMjI3LCAyNDAsIDEyLCAxMywgMjI3LCAyMzksIDEyLCAxMywgCisgICAgMjI3LCAyMzgsIDEyLCAxMywgMjI3LCAyMzcsIDEyLCAxMywgMjI3LCAyMzYsIDEyLCAxMywgMjI3LCAyMzUsIDEyLCAxMywgCisgICAgMjI3LCAyMzQsIDEyLCAxMywgMjI3LCAyMzMsIDEyLCAxMywgMjI3LCAyMzIsIDEyLCAxMywgMjI3LCAyMzEsIDEyLCAxMywgCisgICAgMjI3LCAyMzAsIDEyLCAxMywgMjI3LCAyMjksIDEyLCAxMywgMjI3LCAyMjgsIDEyLCAxMywgMjI3LCAyMjcsIDEyLCAxMywgCisgICAgMjI3LCAyMjYsIDEyLCAxMywgMjI3LCAyMjUsIDEyLCAxMywgMjI3LCAyMjQsIDEyLCAxMywgMjI3LCAyMjMsIDEyLCAxMywgCisgICAgMjI3LCAyMjIsIDEyLCAxMywgMjI3LCAyMjEsIDEyLCAxMywgMjI3LCAyMjAsIDEyLCAxMywgMjI3LCAyMTksIDEyLCAxMywgCisgICAgMjI3LCAyMTgsIDEyLCAxMywgMjI3LCAyMTcsIDEyLCAxMywgMjI3LCAyMTYsIDEyLCAxMywgMjI3LCA4MCwgMTIsIDEzLCAKKyAgICAyMjcsIDc5LCAxMiwgMTMsIDIyNywgNzgsIDEyLCAxMywgMjI3LCA3NywgMTIsIDEzLCAyMjcsIDc2LCAxMiwgMTMsIDIyNywgCisgICAgNzUsIDEyLCAxMywgMjI3LCA3NCwgMTIsIDEzLCAyMjcsIDczLCAxMiwgMTMsIDIyNywgNzIsIDEyLCAxMywgMjI3LCA3MSwgCisgICAgMTIsIDEzLCAyMjcsIDcwLCAxMiwgMTMsIDIyNywgNjksIDEyLCAxMywgMjI3LCA2OCwgMTIsIDEzLCAyMjcsIDY3LCAxMiwgCisgICAgMTMsIDIyNywgNjYsIDEyLCAxMywgMjI3LCA2NSwgMTIsIDEzLCAyMjcsIDY0LCAxMiwgMTMsIDIyNywgNjMsIDEyLCAxMywgCisgICAgMjI3LCA2MiwgMTIsIDEzLCAyMjcsIDYxLCAxMiwgMTMsIDIyNywgNjAsIDEyLCAxMywgMjI3LCA1OSwgMTIsIDEzLCAyMjcsIAorICAgIDU4LCAxMiwgMTMsIDIyNywgNTcsIDEyLCAxMywgMjI3LCA1NiwgMTIsIDEzLCAyMjcsIDU1LCAxMiwgMTMsIDIyNywgNTQsIAorICAgIDEyLCAxMywgMjI3LCA1MywgMTIsIDEzLCAyMjcsIDUyLCAxMiwgMTMsIDIyNywgNTEsIDEyLCAxMywgMjI3LCA1MCwgMTIsIAorICAgIDEzLCAyMjcsIDQ5LCAxMiwgMTMsIDIyNywgNDgsIDEyLCAxMywgMjI3LCA0NywgMTIsIDEzLCAyMjcsIDQ2LCAxMiwgMTMsIAorICAgIDIyNywgNDUsIDEyLCAxMywgMjI3LCA0NCwgMTIsIDEzLCAyMjcsIDQzLCAxMiwgMTMsIDIyNywgNDIsIDEyLCAxMywgMjI3LCAKKyAgICA0MSwgMTIsIDEzLCAyMjcsIDQwLCAxMiwgMTMsIDIyNywgMzksIDEyLCAxMywgMjI3LCAzOCwgMTIsIDEzLCAyMjcsIDM3LCAKKyAgICAxMiwgMTMsIDIyNywgMzYsIDEyLCAxMywgMjI3LCAzNSwgMTIsIDEzLCAyMjcsIDM0LCAxMiwgMTMsIDIyNywgMzMsIDEyLCAKKyAgICAxMywgMjI3LCAzMiwgMTIsIDEzLCAyMjcsIDMxLCAxMiwgMTMsIDIyNywgMzAsIDEyLCAxMywgMjI3LCAyOSwgMTIsIDEzLCAKKyAgICAyMjcsIDI4LCAxMiwgMTMsIDIyNywgMjcsIDEyLCAxMywgMjI3LCAyNiwgMTIsIDEzLCAyMjcsIDI1LCAxMiwgMTMsIDIyNywgCisgICAgMjQsIDEyLCAxMywgMjI3LCAyMywgMTIsIDEzLCAyMjcsIDIyLCAxMiwgMTMsIDIyNywgMjEsIDEyLCAxMywgMjI3LCAyMCwgCisgICAgMTIsIDEzLCAyMjcsIDE5LCAxMiwgMTMsIDIyNywgMTgsIDEyLCAxMywgMjI3LCAxNywgMTIsIDEzLCAyMjcsIDE2LCAxMiwgCisgICAgMTMsIDIyNywgMTUsIDEyLCAxMywgMjI3LCAxNCwgMTIsIDEzLCAyMjcsIDEzLCAxMiwgMTMsIDIyNywgMTIsIDEyLCAxMywgCisgICAgMjI3LCAxMSwgMTIsIDEzLCAyMjcsIDEwLCAxMiwgMTMsIDIyNywgOSwgMTIsIDEzLCAyMjcsIDgsIDEyLCAxMywgMjI3LCA3LCAKKyAgICAxMiwgMTMsIDIyNywgNiwgMTIsIDEzLCAyMjYsIDEwOCwgMTIsIDEzLCAyMjYsIDEwNywgMTIsIDEzLCAyMjYsIDEwNiwgMTIsIAorICAgIDEzLCAyMjYsIDEwNSwgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIAorICAgIDEzLCAyMjYsIDEwMSwgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgCisgICAgMjI2LCA5NywgMTIsIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNCwgOTgsIDEyLCAxMywgMjI0LCA5NywgMTIsIDEzLCAyMjQsIAorICAgIDk2LCAxMiwgMTMsIDIyNCwgOTUsIDEyLCAxMywgMjI0LCA5NCwgMTIsIDEzLCAyMjQsIDkzLCAxMiwgMTMsIDIyNCwgOTIsIAorICAgIDEyLCAxMywgMjIzLCAyMjUsIDEyLCAxMywgMjIzLCAyMjQsIDEyLCAxMywgMjIzLCAyMjMsIDEyLCAxMywgMjIzLCAyMjIsIAogICAgIDEyLCAxMywgMjIzLCAyMjEsIDEyLCAxMywgMjIzLCAyMjAsIDEyLCAxMywgMjIzLCAyMTksIDEyLCAxMywgMjIzLCAyMTgsIAogICAgIDEyLCAxMywgMjIzLCAyMTcsIDEyLCAxMywgMjIzLCAyMTYsIDEyLCAxMywgMjIzLCAyMTUsIDEyLCAxMywgMjIzLCAyMTQsIAogICAgIDEyLCAxMywgMjIzLCAyMTMsIDEyLCAxMywgMjIzLCAyMTIsIDEyLCAxMywgMjIzLCAyMTEsIDEyLCAxMywgMjIzLCAyMTAsIApAQCAtMTIwOTcsMTcyNiArMTIwOTcsMTc0MyBAQAogICAgIDEyLCAxMywgMjIzLCAyMDUsIDEyLCAxMywgMjIzLCAyMDQsIDEyLCAxMywgMjIzLCAyMDMsIDEyLCAxMywgMjIzLCAyMDIsIAogICAgIDEyLCAxMywgMjIzLCAyMDEsIDEyLCAxMywgMjIzLCAyMDAsIDEyLCAxMywgMjIzLCAxOTksIDEyLCAxMywgMjIzLCAxOTgsIAogICAgIDEyLCAxMywgMjIzLCAxOTcsIDEyLCAxMywgMjIzLCAxOTYsIDEyLCAxMywgMjIzLCAxOTUsIDEyLCAxMywgMjIzLCAxOTQsIAotICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIzLCAxOTEsIDEyLCAxMywgMjIzLCAxOTAsIAotICAgIDEyLCAxMywgMjIzLCAxODksIDEyLCAxMywgMjIyLCA4OCwgMTIsIDEzLCAyMjIsIDg3LCAxMiwgMTMsIDIyMiwgODYsIDEyLCAKLSAgICAxMywgMjIyLCA4NSwgMTIsIDEzLCAyMjIsIDg0LCAxMiwgMTMsIDIyMiwgODMsIDEyLCAxMywgMjIyLCA4MiwgMTIsIDEzLCAKLSAgICAyMjIsIDgxLCAxMiwgMTMsIDIyMiwgODAsIDEyLCAxMywgMjIyLCA3OSwgMTIsIDEzLCAyMjIsIDc4LCAxMiwgMTMsIDIyMiwgCi0gICAgNzcsIDEyLCAxMywgMjIyLCA3NiwgMTIsIDEzLCAyMjIsIDc1LCAxMiwgMTMsIDIyMiwgNzQsIDEyLCAxMywgMjIyLCA3MywgCi0gICAgMTIsIDEzLCAyMjIsIDcyLCAxMiwgMTMsIDIyMiwgNzEsIDEyLCAxMywgMjIyLCA3MCwgMTIsIDEzLCAyMjIsIDY5LCAxMiwgCi0gICAgMTMsIDIyMiwgNjgsIDEyLCAxMywgMjIyLCA2NywgMTIsIDEzLCAyMjIsIDY2LCAxMiwgMTMsIDIyMiwgNjUsIDEyLCAxMywgCi0gICAgMjIyLCA2NCwgMTIsIDEzLCAyMjIsIDYzLCAxMiwgMTMsIDIyMiwgNjIsIDEyLCAxMywgMjIyLCA2MSwgMTIsIDEzLCAyMjIsIAotICAgIDYwLCAxMiwgMTMsIDIyMiwgNTksIDEyLCAxMywgMjIyLCA1OCwgMTIsIDEzLCAyMjIsIDU3LCAxMiwgMTMsIDIyMiwgNTYsIAotICAgIDEyLCAxMywgMjIyLCA1NSwgMTIsIDEzLCAyMjIsIDU0LCAxMiwgMTMsIDIyMiwgNTMsIDEyLCAxMywgMjIyLCA1MiwgMTIsIAotICAgIDEzLCAyMjIsIDUxLCAxMiwgMTMsIDIyMiwgNTAsIDEyLCAxMywgMjIyLCA0OSwgMTIsIDEzLCAyMjIsIDQ4LCAxMiwgMTMsIAotICAgIDIyMiwgNDcsIDEyLCAxMywgMjIyLCA0NiwgMTIsIDEzLCAyMjIsIDQ1LCAxMiwgMTMsIDIyMiwgNDQsIDEyLCAxMywgMjIyLCAKLSAgICA0MywgMTIsIDEzLCAyMjIsIDQyLCAxMiwgMTMsIDIyMiwgNDEsIDEyLCAxMywgMjIyLCA0MCwgMTIsIDEzLCAyMjIsIDM5LCAKLSAgICAxMiwgMTMsIDIyMiwgMzgsIDEyLCAxMywgMjIyLCAzNywgMTIsIDEzLCAyMjIsIDM2LCAxMiwgMTMsIDIyMiwgMzUsIDEyLCAKLSAgICAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAKLSAgICAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAKLSAgICAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAKLSAgICAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAKLSAgICAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAKLSAgICAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAKLSAgICAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAKLSAgICAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAKLSAgICAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAKLSAgICAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAKLSAgICAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE3LCAxMDcsIDEyLCAKLSAgICAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgMjE1LCAxOSwgMTIsIDEzLCAKLSAgICAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIDE1LCAxMiwgMTMsIDIxNSwgCi0gICAgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIDEyLCAxMywgMjE1LCAxMCwgCi0gICAgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAyMTUsIDYsIDEyLCAxMywgCi0gICAgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAxMiwgMTMsIDIxNSwgMSwgCi0gICAgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAxMywgMjE0LCAyNTMsIDEyLCAKLSAgICAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAxMywgMjE0LCAyNDksIDEyLCAKLSAgICAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAxMywgMjE0LCAyNDUsIDEyLCAKLSAgICAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAxMywgMjE0LCAyNDEsIDEyLCAKLSAgICAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAxMywgMjE0LCAyMzcsIDEyLCAKLSAgICAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAxMywgMjE0LCAyMzMsIDEyLCAKLSAgICAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAxMywgMjE0LCAxMDIsIDEyLCAKLSAgICAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIDEzLCAyMTQsIDk4LCAxMiwgMTMsIAotICAgIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIDIxNCwgOTQsIDEyLCAxMywgMjE0LCAKLSAgICA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCA5MCwgMTIsIDEzLCAyMTQsIDg5LCAKLSAgICAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAxMiwgMTMsIDIxNCwgODUsIDEyLCAKLSAgICAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAxMywgMjE0LCA4MSwgMTIsIDEzLCAKLSAgICAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgCi0gICAgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgNzMsIDEyLCAxMywgMjE0LCA3MiwgCi0gICAgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgMTIsIDEzLCAyMTQsIDY4LCAxMiwgCi0gICAgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgMTMsIDIxNCwgNjQsIDEyLCAxMywgCi0gICAgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIAotICAgIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIDU2LCAxMiwgMTMsIDIxNCwgNTUsIAotICAgIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIDEyLCAxMywgMjE0LCA1MSwgMTIsIAotICAgIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIAotICAgIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIDIxNCwgNDMsIDEyLCAxMywgMjE0LCAKLSAgICA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAzOSwgMTIsIDEzLCAyMTQsIDM4LCAKLSAgICAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAxMiwgMTMsIDIxNCwgMzQsIDEyLCAKLSAgICAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAxMywgMjE0LCAzMCwgMTIsIDEzLCAKLSAgICAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgCi0gICAgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgOTIsIDEyLCAxMywgMjEyLCA5MSwgCi0gICAgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgMTIsIDEzLCAyMTIsIDg3LCAxMiwgCi0gICAgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgMTMsIDIxMiwgODMsIDEyLCAxMywgCi0gICAgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIAotICAgIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIDc1LCAxMiwgMTMsIDIxMiwgNzQsIAotICAgIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIDEyLCAxMywgMjEyLCA3MCwgMTIsIAotICAgIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIDEzLCAyMTIsIDY2LCAxMiwgMTMsIAotICAgIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIAotICAgIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIAotICAgIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIAotICAgIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIAotICAgIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIAotICAgIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIAotICAgIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIAotICAgIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIAotICAgIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIAotICAgIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIAotICAgIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIAotICAgIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIAotICAgIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIAotICAgIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIAotICAgIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIAotICAgIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAKLSAgICAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgCi0gICAgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgCi0gICAgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgCi0gICAgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgCi0gICAgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIAotICAgIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDEyLCAxMywgMjU1LCA0NywgMTIsIDEzLCAyNTUsIDQ2LCAxMiwgMTMsIDI1NSwgNDUsIAotICAgIDEyLCAxMywgMjU1LCA0NCwgMTIsIDEzLCAyNTUsIDQzLCAxMiwgMTMsIDI1NSwgNDIsIDEyLCAxMywgMjU1LCA0MSwgMTIsIAotICAgIDEzLCAyNTUsIDQwLCAxMiwgMTMsIDI1NSwgMzksIDIwLCAxLCAxNjcsIDIyOSwgMTIsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIAotICAgIDI0MywgNzAsIDI0NCwgMzYsIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAKLSAgICAyMjQsIDI1MSwgMjMxLCAxNywgMjI1LCA1OCwgMjAsIDEsIDE2NywgMjI5LCAyMjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIAotICAgIDIxOSwgMjIxLCAyMCwgMSwgMTY3LCAyMTYsIDY2LCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAyMjcsIDExOCwgMjMxLCAxNiwgCi0gICAgMjAsIDEsIDE2NywgMjIwLCAxOSwgMjI2LCA5MCwgMjI4LCAxNjksIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMjYsIDkwLCAKLSAgICAyMjgsIDE3MCwgMjI1LCA1NywgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIDIyOCwgMTcwLCAyMjUsIDU4LCAyMCwgCi0gICAgMSwgMTY3LCAyMzEsIDIxOCwgMjAsIDEsIDE2NywgMjE1LCAxMTksIDIzMSwgMjE5LCAyMCwgMSwgMTY3LCAyMjksIDcxLCAKLSAgICAyMCwgMSwgMTY3LCAyMzEsIDIxNSwgMjAsIDEsIDE2NywgMjMxLCAxNzYsIDIwLCAxLCAxNjcsIDIzMCwgNDgsIDIwLCAxLCAKLSAgICAxNjcsIDIyMCwgMTI0LCAyMCwgMSwgMTY3LCAyMjcsIDI0MSwgMjAsIDEsIDE2NywgMjM0LCAxNDksIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgMTM4LCAyMCwgMSwgMTY3LCAyMTgsIDQsIDIwLCAxLCAxNjcsIDIyOSwgMTEsIDIwLCAxLCAxNjcsIDIzMywgODcsIAotICAgIDIwLCAxLCAxNjcsIDIzMywgMTIsIDIzMywgMTg5LCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgMjMxLCAyNCwgMjAsIDEsIDE2NywgCi0gICAgMjMxLCAyMjIsIDIwLCAxLCAxNjcsIDIyNSwgMjQ2LCAyMCwgMSwgMTY3LCAyNDIsIDIzMSwgMjAsIDEsIDE2NywgMjI2LCAKLSAgICA1MCwgMjAsIDEsIDE2NywgMjMwLCAxNTEsIDIyOSwgNDUsIDIwLCAxLCAxNjcsIDIyNywgOTksIDIzMSwgMjcsIDIwLCAxLCAKLSAgICAxNjcsIDEwNCwgMjEwLCAxODgsIDIyOSwgMjIwLCAyMCwgMSwgMTY3LCAyNDIsIDIzMiwgMjAsIDEsIDE2NywgMjI3LCAyNDgsIAotICAgIDIyNywgMjQ5LCAyMCwgMSwgMTY3LCAyMTksIDEyOCwgMjAsIDEsIDE2NywgMjMxLCA5LCAyMCwgMSwgMTY3LCAyMzEsIDMwLCAKLSAgICAyMCwgMSwgMTY3LCAyMzAsIDEzMCwgMjAsIDEsIDE2NywgMjM0LCAyNDksIDIwLCAxLCAxNjcsIDIyNiwgOTAsIDIzMywgNDcsIAotICAgIDIwLCAxLCAxNjcsIDIyOSwgMTQ5LCAyMzMsIDQ3LCAyMCwgMSwgMTY3LCAyMjUsIDE1OCwgMjAsIDEsIDE2NywgMjMxLCAKLSAgICAyMTYsIDIwLCAxLCAxNjcsIDIyOCwgMjA3LCAyMCwgMSwgMTY3LCAyMjQsIDEzNCwgMjAsIDEsIDE2NywgMjE1LCAxMTYsIAotICAgIDIwLCAxLCAxNjcsIDIzMiwgOTQsIDIwLCAxLCAxNjcsIDIxOSwgNDEsIDIwLCAxLCAxNjcsIDIxNiwgMjE2LCAyMCwgMSwgCi0gICAgMTY3LCAyMzEsIDIxMywgMjAsIDEsIDE2NywgMjM0LCAxNTYsIDIwLCAxLCAxNjcsIDIyOSwgMTQ1LCAyMCwgMSwgMTY3LCAKLSAgICAyMzMsIDIwMSwgMjAsIDEsIDE2NywgMjMwLCAxMzEsIDIwLCAxLCAxNjcsIDIxOSwgMjE4LCAyMCwgMSwgMTY3LCAyMzIsIAotICAgIDEzOCwgMjAsIDEsIDE2NywgMjQ0LCA5MywgMjAsIDEsIDE2NywgMjIyLCAxOTksIDIwLCAxLCAxNjcsIDIzMywgMjQxLCAyMCwgCi0gICAgMSwgMTY3LCAyMTksIDM3LCAyMCwgMSwgMTY3LCAyMzEsIDE3MywgMjI1LCA5OSwgMjAsIDEsIDE2NywgMjIwLCAxMiwgMjAsIAotICAgIDEsIDE2NywgMjI3LCAyNDcsIDIwLCAxLCAxNjcsIDIxOSwgMjUzLCAyMjgsIDIsIDIxMCwgMTk2LCAyMCwgMSwgMTY3LCAKLSAgICAyMjcsIDEzOCwgMjMwLCAxNDgsIDIwLCAxLCAxNjcsIDIyNiwgODUsIDIwLCAxLCAxNjcsIDIyOCwgMTM5LCAyMCwgMSwgCi0gICAgMTY3LCAyMTQsIDE3MCwgMjAsIDEsIDE2NywgMjI5LCA0OCwgMjAsIDEsIDE2NywgMjMxLCAyMTIsIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgMTgxLCAyMCwgMSwgMTY3LCAyMzEsIDExOSwgMjAsIDEsIDE2NywgMjI3LCAxNTEsIDIwLCAxLCAxNjcsIDIxNiwgCi0gICAgMjIwLCAyMCwgMSwgMTY3LCAyMTksIDM0LCAyMCwgMSwgMTY3LCAyMjYsIDg2LCAyMCwgMSwgMTY3LCAyMjgsIDYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjIwLCAyMCwgMSwgMTY3LCAyMjcsIDE0OCwgMjAsIDEsIDE2NywgMjM0LCAyMTYsIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgOSwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIDIzMiwgOTgsIDIwLCAxLCAxNjcsIDIyOSwgOTgsIAotICAgIDIwLCAxLCAxNjcsIDIyOSwgMTk2LCAyMCwgMSwgMTY3LCAyMzEsIDExOCwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDQsIDIwLCAKLSAgICAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIzMSwgMjE3LCAyMCwgMSwgMjI1LCAxMzgsIDIxOSwgMTg1LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyMCwgMTI4LCAyMTUsIDExOCwgMjAsIDEsIDIyNSwgMTM4LCAyMzIsIDE0MCwgMjI3LCAyNDQsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjMxLCAxMjUsIDIzMSwgMjIxLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgODcsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCAKLSAgICAxNSwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDEyMCwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDIzNywgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjUsIDIwOCwgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDg5LCAyMzMsIDQ3LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgCi0gICAgMTAzLCAyMjgsIDIsIDIyNywgMTYwLCAyMCwgMSwgMjI1LCAxMzgsIDIyNywgMjQyLCAyMjAsIDM4LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyOSwgMTE2LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTM4LCAyNDIsIDIyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjUsIAotICAgIDQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIxNSwgMTE5LCAyMjgsIDAsIDIwLCAxLCAyMjUsIDEzOCwgMjIwLCA0MywgMjI4LCAKLSAgICAxNzksIDIwLCAxLCAyMjUsIDEzOCwgMjIwLCAzOSwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDE3LCAyMTYsIDIxOSwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMzEsIDEwNywgMjMxLCAxMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAxNDksIDIyNywgMjQ0LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzNCwgMTQ1LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMTQxLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgMjQ5LCAyMCwgMSwgMjI1LCAxMzgsIAotICAgIDIxMywgMTgyLCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMTMsIDIzMCwgNDYsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA0NywgCi0gICAgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCAxOTMsIDIwLCAxLCAyMjUsIDEzOCwgMjIyLCAxMSwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMTcsIDk3LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAzMiwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMzLCAyMzMsIDg0LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTksIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjE4LCA1MiwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDExMSwgMjAsIDEsIDIyNSwgMTM4LCAyMzAsIDEzMywgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMjcsIDE2MywgMjAsIDEsIDIyNSwgMTM4LCAyMjQsIDEzOCwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIAotICAgIDI4LCAyMjksIDQ5LCAyMCwgMSwgMjI1LCAxMzgsIDI0NCwgMTI2LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgOTgsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjQ0LCAxNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNTMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIAotICAgIDIyOCwgMTczLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjM5LCAyMjgsIDE0OSwgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIDExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgNTUsIDIwLCAxLCAyMjUsIDEzOCwgMjI4LCAxMSwgMjAsIDEsIDIyNSwgMTM4LCAxODQsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA3NCwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOSwgMTIsIAotICAgIDIzMSwgMjE5LCAyMCwgMSwgMTM3LCAyMjcsIDExNywgMjAsIDEsIDEzNywgMjEwLCAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgCi0gICAgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNDgsIDIwLCAxLCAxMzcsIDIyOSwgMTM3LCAyMCwgMSwgMTM3LCAyMjksIDE5LCAyMCwgCi0gICAgMSwgMTM3LCAyNDIsIDIzOSwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDI0MywgNzcsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMTQwLCAyMzAsIDE3MCwgMjMxLCAzMSwgMjAsIDEsIDEzNywgMjI3LCAyNDAsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDExMiwgMjAsIDEsIDEzNywgMjI1LCA1NSwgMjAsIDEsIDEzNywgMjI5LCAxMjIsIDIwLCAxLCAxMzcsIDIzMSwgCi0gICAgMTIzLCAyNTEsIDI5LCAyMCwgMSwgMTM3LCAyMzQsIDE0MywgMjAsIDEsIDEzNywgMjQyLCAyNDAsIDIwLCAxLCAxMzcsIAotICAgIDIzNCwgMTUwLCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA3NiwgMjAsIDEsIDEzNywgMjI3LCAxMTEsIDIwLCAxLCAKLSAgICAxMzcsIDIzMSwgMTAwLCAyMCwgMSwgMTM3LCAyMjgsIDEwLCAyMCwgMSwgMTM3LCAyMzEsIDEwNiwgMjAsIDEsIDEzNywgCi0gICAgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNDksIDIwLCAxLCAxMzcsIDIzNSwgMTAsIDIwLCAxLCAxMzcsIDIyMCwgMTIzLCAKLSAgICAyMCwgMSwgMTM3LCAyMjksIDEzMSwgMjAsIDEsIDEzNywgMjE3LCA5NSwgMjAsIDEsIDEzNywgMjI4LCAxNTMsIDIwLCAxLCAKLSAgICAxMzcsIDIxNiwgNjYsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDc5LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAyMjcsIAotICAgIDE2MCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMTk5LCAyMCwgMSwgMTM3LCAyMzEsIDIzOSwgCi0gICAgMjM0LCAxNTIsIDIwLCAxLCAxMzcsIDIyNywgMjQ5LCAyMCwgMSwgMTM3LCAyMjksIDM0LCAyMCwgMSwgMTM3LCAyMzMsIDg4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzEsIDEwOCwgMjAsIDEsIDEzNywgMjMxLCA4LCAyMCwgMSwgMTM3LCAyMjcsIDI0MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCAyMTUsIDIwLCAxLCAxMzcsIDIyOSwgMzYsIDIwLCAxLCAxMzcsIDI0MywgMjMzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjI4LCAxMiwgMjAsIDEsIDEzNywgMjI4LCA4LCAyMCwgMSwgMTM3LCAyNTEsIDEwNywgCi0gICAgMjAsIDEsIDEzNywgMjEzLCAxODMsIDIwLCAxLCAxMzcsIDIzMSwgMTEzLCAyMCwgMSwgMTM3LCAyMjIsIDE0MCwgMjAsIDEsIAotICAgIDEzNywgMjI4LCAxODMsIDIwLCAxLCAxMzcsIDIzMywgMTAyLCAyMCwgMSwgMTM3LCAyMTYsIDY0LCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI1MCwgMjI5LCAxLCAyMCwgMSwgMTM3LCAyMjgsIDE3NSwgMjAsIDEsIDEzNywgMjM0LCAxNTYsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgNDAsIDIwLCAxLCAxMzcsIDIzMSwgMjEyLCAyMCwgMSwgMTM3LCAyMzEsIDEwMSwgMjAsIDEsIDEzNywgMjMyLCA5OCwgCi0gICAgMjAsIDEsIDEzNywgMjMzLCAxODksIDIwLCAxLCAxMzcsIDIyOCwgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDEsIDIwLCAxLCAKLSAgICAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDM3LCAyMCwgMSwgMTM3LCAyMjcsIDI1MywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAyNDUsIDIwLCAxLCAxMzcsIDIzMywgMjAzLCAyMjgsIDEzOSwgMjAsIDEsIDEzNywgMjI3LCAyNTEsIDIwLCAxLCAKLSAgICAxMzcsIDIyOSwgMTQ0LCAyMCwgMSwgMTM3LCAyMzEsIDIzOSwgMjI4LCAwLCAyMCwgMSwgMTM3LCAyMTEsIDEwMywgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDMsIDIwLCAxLCAxMzcsIDIxOSwgMjIwLCAyMCwgMSwgMTM3LCAyMjAsIDEyNiwgMjAsIDEsIDEzNywgCi0gICAgMjMxLCAxMDksIDIwLCAxLCAxMzcsIDIzMSwgMjE5LCAyMCwgMSwgMTM3LCAyMzEsIDExOSwgMjAsIDEsIDEzNywgMjM0LCAKLSAgICAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMTEwLCAyMCwgMSwgMTM3LCAyMzQsIDE0OCwgMjAsIDEsIDEzNywgMjMxLCAxMjMsIAotICAgIDIyNSwgMTAzLCAyMCwgMSwgMTM3LCAyMTAsIDE3OSwgMjAsIDEsIDEzNywgMjI4LCAxNzEsIDIwLCAxLCAxMzcsIDIzMCwgCi0gICAgMjIwLCAyMCwgMSwgMTM3LCAyMzAsIDEwMCwgMjAsIDEsIDEzNywgMjIwLCAxNSwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIAotICAgIDIzMywgNzAsIDIwLCAxLCAxMzcsIDIzNCwgMTY2LCAyNDQsIDE2MCwgMjAsIDEsIDEzNywgMjI5LCA2OSwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCAxOTYsIDIwLCAxLCAxMzcsIDIzMiwgMjAwLCAyMCwgMSwgMTM3LCAyMjUsIDY1LCAyMCwgMSwgMTM3LCAyMjUsIAotICAgIDE5OSwgMjAsIDEsIDEzNywgMjE2LCAyMzAsIDIwLCAxLCAxMDcsIDIzMSwgOTksIDIwLCAxLCAxMDcsIDIxMiwgNTEsIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTY5LCAyMCwgMSwgMTA3LCAyMzEsIDE2LCAyMCwgMSwgMTA3LCAyMjgsIDE2NywgMjAsIDEsIDEwNywgCi0gICAgMjMyLCAyMzUsIDIwLCAxLCAxMDcsIDIyOCwgMTcyLCAyMCwgMSwgMTA3LCAyMjgsIDcsIDIwLCAxLCAxMDcsIDIyOSwgNTQsIAotICAgIDIwLCAxLCAxMDcsIDIyNywgMTYwLCAyMCwgMSwgMTA3LCAyMTEsIDE5NCwgMjAsIDEsIDEwNywgMjI5LCA5LCAyMCwgMSwgCi0gICAgMTA3LCAyMjAsIDYxLCAyMCwgMSwgMTA3LCAyMjksIDIwLCAyMCwgMSwgMTA3LCAyMzQsIDE1MSwgMjAsIDEsIDEwNywgMjE2LCAKLSAgICAyMTcsIDIwLCAxLCAxMDcsIDIyMCwgNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTgwLCAyMCwgMSwgMTA3LCAyMTgsIDUyLCAyMCwgCi0gICAgMSwgMTA3LCAyMzQsIDE1NiwgMjAsIDEsIDEwNywgMjExLCA5MSwgMjAsIDEsIDEwNywgMjMzLCAyMDQsIDIwLCAxLCAxMDcsIAotICAgIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjksIDEzNSwgMjAsIDEsIDEwNywgMjMxLCAKLSAgICAxODgsIDIwLCAxLCAxMDcsIDIzMSwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMTI1LCAyMCwgMSwgMTA3LCAyMTEsIDM5LCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE3NCwgMjAsIDEsIDEwNywgMjM0LCAxNDcsIDIzMSwgMTAyLCAyMCwgMSwgMTA3LCAyMjksIDE2LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDExOCwgMjAsIDEsIDEwNywgMjQyLCAyNDgsIDIwLCAxLCAxMDcsIDIyOSwgNiwgMjAsIDEsIAotICAgIDEwNywgMjQ0LCAxMjcsIDIwLCAxLCAxMDcsIDIyOSwgMTM5LCAyMCwgMSwgMTA3LCAyMzEsIDAsIDIwLCAxLCAxMDcsIDIzMywgCi0gICAgNSwgMjAsIDEsIDEwNywgMjI5LCAxMjEsIDIwLCAxLCAxMDcsIDIzMCwgMTQ3LCAyMCwgMSwgMTA3LCAyMzEsIDQsIDIwLCAxLCAKLSAgICAxMDcsIDIyNCwgMTE4LCAyMCwgMSwgMTA3LCAyMzEsIDIsIDIwLCAxLCAxMDcsIDIzMSwgMTgsIDIwLCAxLCAxMDcsIDIzMiwgCi0gICAgODQsIDIwLCAxLCAxMDcsIDIyNywgMjU1LCAyMCwgMSwgMTA3LCAyMzEsIDEyMiwgMjAsIDEsIDEwNywgMjMzLCAxODAsIDIwLCAKLSAgICAxLCAxMDcsIDIyNywgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIDIyMCwgMjAsIDEsIDEwNywgMjE5LCAzNCwgMjAsIDEsIDEwNywgCi0gICAgMjEwLCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTQ4LCAyMCwgMSwgMTA3LCAyMjMsIDE3MCwgMjAsIDEsIDEwNywgMjE3LCAKLSAgICAxMCwgMjAsIDEsIDEwNywgMjI5LCAxNywgMjAsIDEsIDEwNywgMjMxLCAyMywgMjAsIDEsIDEwNywgMjI3LCAyNTQsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTQ2LCAyMCwgMSwgMTA3LCAyMjUsIDU5LCAyMCwgMSwgMTA3LCAyMjUsIDE1MiwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxMjcsIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgNTUsIDIwLCAxLCAxMDcsIDIzMSwgMjAsIAotICAgIDIwLCAxLCAxMDcsIDIyOSwgMjksIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgMTA3LCAyMjYsIDIxLCAyMCwgMSwgCi0gICAgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDQsIDIwLCAxLCAxMDcsIDIyNywgMjQ0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTgsIDgxLCAyMCwgMSwgMTA3LCAyMzMsIDIwOCwgMjAsIDEsIDEwNywgMjI5LCA0NCwgMjAsIDEsIDEwNywgMjI5LCAxNCwgCi0gICAgMjAsIDEsIDEwNywgMjE1LCAxMDIsIDIwLCAxLCAxMDcsIDIzMSwgMzEsIDIwLCAxLCAxMDcsIDIzMywgMTk4LCAyMCwgMSwgCi0gICAgMTA3LCAyMjcsIDI1MiwgMjAsIDEsIDEwNywgMjE2LCAyMTgsIDIwLCAxLCAxMDcsIDIzMSwgMjE0LCAyMCwgMSwgMTA3LCAKLSAgICAyMjksIDUzLCAyMCwgMSwgMTA3LCAyMzMsIDQsIDIwLCAxLCAxMDcsIDIyOSwgMzUsIDIwLCAxLCAxMDcsIDIyOCwgMSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNTMsIDIwLCAxLCAxMDcsIDI0MiwgMjMzLCAyMCwgMSwgMTA3LCAyMzMsIDIxNywgMjAsIDEsIDEwNywgCi0gICAgMjIzLCA4NCwgMjI2LCAyMDksIDIwLCAxLCAxMDcsIDIxNywgODYsIDIwLCAxLCAxMDcsIDIxNiwgMTAsIDIwLCAxLCAxMDcsIAotICAgIDIyNywgMTQ4LCAyMCwgMSwgMTA3LCAyMjIsIDIzOSwgMjAsIDEsIDEwNywgMjMzLCA0OSwgMjAsIDEsIDEwNywgMjMxLCA3OSwgCi0gICAgMjAsIDEsIDEwNywgMTkzLCAyMCwgMSwgMTA3LCAyMTgsIDQsIDIwLCAxLCAxMDcsIDIzMCwgMTAyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjAsIDI3LCAyMCwgMSwgMTA3LCAyMjAsIDM3LCAyMCwgMSwgMTA3LCAyMzMsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAyMzcsIAotICAgIDIwLCAxLCAxMDcsIDIxOSwgMjI1LCAyMCwgMSwgMTA3LCAyMjcsIDI0NiwgMjAsIDEsIDEwNywgMjI1LCAyMTEsIDIwLCAxLCAKLSAgICAxMDcsIDIyOCwgMjMzLCAyMCwgMSwgMTA3LCAyMTksIDI1MiwgMjAsIDEsIDEwNywgMjI0LCAxMzMsIDIwLCAxLCAxMDcsIAotICAgIDIzMCwgNDYsIDIwLCAxLCAxMDcsIDIzMiwgMTE5LCAyMCwgMSwgMTA3LCAyMjMsIDg0LCAyMzAsIDk2LCAyMCwgMSwgMTA3LCAKLSAgICAyMTYsIDExNywgMjAsIDEsIDEwNywgMjI3LCAyMzgsIDIwLCAxLCAxMDcsIDIzMSwgMTIzLCAxOTgsIDIwLCAxLCAxMDcsIAotICAgIDIyMSwgMjMyLCAyMCwgMSwgMTA3LCAyNDQsIDE5NSwgMjAsIDEsIDgyLCAyMjksIDE0MywgMjAsIDEsIDgyLCAyMTYsIDE2LCAKLSAgICAyMCwgMSwgODIsIDIzMSwgMTEyLCAyMCwgMSwgODIsIDIzMywgODgsIDIwLCAxLCA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgCi0gICAgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjI2LCA4OSwgMjAsIDEsIDgyLCAyMTksIDQ1LCAyMCwgMSwgODIsIDIyMywgMTQ1LCAKLSAgICAyMCwgMSwgODIsIDIyOCwgMywgMjAsIDEsIDgyLCAyMjksIDExNCwgMjAsIDEsIDgyLCAyMjQsIDE0NywgMjAsIDEsIDgyLCAKLSAgICAyMTcsIDYyLCAyMCwgMSwgODIsIDIyOSwgMjIsIDIwLCAxLCA4MiwgMjMzLCAyNDUsIDIwLCAxLCA4MiwgMjExLCAxODcsIAotICAgIDIwLCAxLCA4MiwgMjIxLCAxNzAsIDIwLCAxLCA4MiwgMjI5LCA0NSwgMjAsIDEsIDgyLCAyMjYsIDg2LCAyMCwgMSwgODIsIAotICAgIDIxNiwgMTcsIDIwLCAxLCA4MiwgMjMzLCAyMDIsIDIwLCAxLCA4MiwgMjMyLCAxMzksIDIwLCAxLCA4MiwgMjI4LCA2LCAyMCwgCi0gICAgMSwgODIsIDIyOCwgMjU0LCAyMCwgMSwgODIsIDIzMSwgMjIwLCAyMCwgMSwgODIsIDIyOSwgMTUsIDIwLCAxLCA4MiwgMjI4LCAKLSAgICAyNTMsIDIwLCAxLCA4MiwgMjI4LCA1LCAyMCwgMSwgODIsIDIyMiwgMjM3LCAyMCwgMSwgODIsIDIyOCwgMTcxLCAyMCwgMSwgCi0gICAgODIsIDIyNSwgMjEwLCAyMCwgMSwgODIsIDIyMiwgMzEsIDIwLCAxLCA4MiwgMjI5LCAzMCwgMjAsIDEsIDgyLCAyMzEsIDEwLCAKLSAgICAyMCwgMSwgODIsIDI0MiwgMjI3LCAyMCwgMSwgODIsIDIyOSwgMTgsIDIwLCAxLCA4MiwgMjI4LCAxODIsIDIwLCAxLCA4MiwgCi0gICAgMjMxLCAxNzIsIDIwLCAxLCA4MiwgMjMyLCAxMjEsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIDgyLCAyMjksIDEyNywgCi0gICAgMjAsIDEsIDgyLCAyMTcsIDg1LCAyMjcsIDI0NCwgMjAsIDEsIDgyLCAyMjAsIDEyNywgMjAsIDEsIDgyLCAyMjQsIDE0MywgCi0gICAgMjAsIDEsIDgyLCAyMjksIDE0NywgMjE5LCA1MSwgMjAsIDEsIDgyLCAyMjksIDM4LCAyMjcsIDE2MCwgMjAsIDEsIDgyLCAKLSAgICAyMTEsIDQsIDIwLCAxLCA4MiwgMjQyLCAyMjgsIDIwLCAxLCA4MiwgMjE1LCAxMTcsIDIwLCAxLCA4MiwgMjExLCAxOSwgMjAsIAotICAgIDEsIDgyLCAyMjUsIDE2LCAyMCwgMSwgODIsIDIxNSwgMTA3LCAyMCwgMSwgODIsIDIzNCwgMTU0LCAyMCwgMSwgODIsIDIxOCwgCi0gICAgODAsIDIwLCAxLCA4MiwgMjE2LCAyMTksIDIwLCAxLCA4MiwgMjEzLCAxODQsIDIwLCAxLCA4MiwgMjEyLCA2LCAyMCwgMSwgCi0gICAgODIsIDIzMywgMTMyLCAyMCwgMSwgODIsIDIyNCwgMTUwLCAyMCwgMSwgODIsIDIxNywgOTYsIDIwLCAxLCA4MiwgMjQyLCAKLSAgICAyNDcsIDIwLCAxLCA4MiwgMjI5LCA1OSwgMjAsIDEsIDgyLCAyMjAsIDQwLCAyMCwgMSwgODIsIDIzMSwgNSwgMjAsIDEsIAotICAgIDgyLCAyMzEsIDExNiwgMjAsIDEsIDgyLCAyMjcsIDExNSwgMjAsIDEsIDgyLCAyMjgsIDEzNiwgMjAsIDEsIDgyLCAyNDMsIAotICAgIDczLCAyMCwgMSwgODIsIDIxNSwgMTA4LCAyMCwgMSwgODIsIDIzMywgMjExLCAyMCwgMSwgODIsIDIxMSwgNjcsIDIwLCAxLCAKLSAgICA4MiwgMjI3LCAxNDksIDI1MCwgMTYsIDIwLCAxLCA4MiwgMjEwLCAyNTAsIDIwLCAxLCA4MiwgMjMxLCAyMiwgMjAsIDEsIAotICAgIDgyLCAyMjksIDEzMiwgMjAsIDEsIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMTAsIDE5NywgMjAsIDEsIDgyLCAyMzMsIAotICAgIDYsIDIwLCAxLCA4MiwgMjQzLCAyMzMsIDIwLCAxLCA4MiwgMjQzLCA3MiwgMjAsIDEsIDgyLCAyMjksIDgsIDIwLCAxLCA4MiwgCi0gICAgMjM0LCAxNTYsIDIwLCAxLCA4MiwgMjMxLCAyMjMsIDIwLCAxLCA4MiwgMjI5LCAyMSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgCi0gICAgMjAsIDEsIDgyLCAyNDQsIDE5NiwgMjAsIDEsIDgyLCAyMjcsIDIzOSwgMjAsIDEsIDgyLCAyMjUsIDE1MywgMjAsIDEsIDgyLCAKLSAgICAyMTEsIDE3LCAyMCwgMSwgODIsIDIyOSwgNDYsIDIwLCAxLCA4MiwgMjI3LCAxNDksIDI1MiwgMjMsIDIwLCAxLCA4MiwgCi0gICAgMjI3LCA5NSwgMjAsIDEsIDgyLCAyMjQsIDI0NywgMjAsIDEsIDgyLCAyMzAsIDIyMCwgMjAsIDEsIDgyLCAyNDMsIDIzMSwgCi0gICAgMjAsIDEsIDgyLCAyMjksIDIyMCwgMjAsIDEsIDgyLCAyMzAsIDEwMCwgMjAsIDEsIDgyLCAyNDIsIDIzMywgMjAsIDEsIDgyLCAKLSAgICAyNDMsIDIzNSwgNzMsIDIwLCAxLCA4MiwgMjMwLCA0NywgMjAsIDEsIDgyLCAyMjQsIDE0NiwgMjAsIDEsIDgyLCAyMjksIAotICAgIDEwLCAyMCwgMSwgODIsIDIzMywgMTg5LCAyMCwgMSwgODIsIDIyNSwgOTcsIDIwLCAxLCA4MiwgMjI3LCAyNDcsIDIwLCAxLCAKLSAgICA4MiwgMjExLCAxOCwgMjAsIDEsIDgyLCAyMjksIDMxLCAyMCwgMSwgODIsIDIyNiwgOTAsIDIyNSwgMTg3LCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCAyNTEsIDE1LCAyMCwgMSwgODIsIDI0NCwgMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzYsIDIwLCAxLCA4MiwgCi0gICAgNjEsIDIwLCAxLCA4MiwgMjE2LCAxMCwgMjAsIDEsIDgyLCA3NiwgMjAsIDEsIDgyLCA3MywgMjAsIDEsIDgyLCAyMzMsIDg2LCAKLSAgICAyMCwgMSwgODIsIDIyNiwgOTAsIDIyNSwgMjMsIDIwLCAxLCA4MiwgMjE3LCAxMDEsIDIwLCAxLCA4MiwgMjE3LCA1MSwgMjAsIAotICAgIDEsIDgyLCAyMjksIDE0NywgMjMwLCAzNCwgMjQwLCAyMzQsIDIwLCAxLCA4MiwgMjIwLCAxNSwgMjAsIDEsIDgyLCAyMTEsIAotICAgIDE0LCAyMCwgMSwgODIsIDIyOCwgMjQ3LCAyMCwgMSwgODIsIDIxMCwgMjAyLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyMTcsIAotICAgIDI0MCwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjQ5LCAxNDcsIDIwLCAxLCA4MiwgMjEwLCAxODcsIDIwLCAxLCA4MiwgMjEwLCAKLSAgICAxOTUsIDIwLCAxLCA4MiwgMjM0LCAxNDIsIDIwLCAxLCA4MiwgMjI1LCAxNTEsIDIwLCAxLCA4MiwgMjI4LCAxNzcsIDI0NSwgCi0gICAgMTAyLCAyMCwgMSwgODIsIDIyNCwgMTQ0LCAyMCwgMSwgODIsIDIxMSwgMTkyLCAyMCwgMSwgODIsIDI0NCwgMTQ3LCAyMCwgCi0gICAgMSwgODIsIDIxMywgMjUwLCAyMCwgMSwgODIsIDIzMiwgOTgsIDIwLCAxLCA4MiwgMjMwLCAyMzAsIDIwLCAxLCA4MiwgMjIzLCAKLSAgICA1MSwgMjAsIDEsIDgyLCAyMjMsIDE3MSwgMjAsIDEsIDgyLCAyMjgsIDI0NiwgMjAsIDEsIDgyLCAyMjksIDc3LCAyMCwgMSwgCi0gICAgODIsIDIyMCwgNywgMjAsIDEsIDgyLCAyMTksIDI1MiwgMjAsIDEsIDgyLCAyNDMsIDIzNSwgMjIzLCA4NiwgMjAsIDEsIDgyLCAKLSAgICAxOTcsIDIwLCAxLCA4MiwgMjI1LCAxMDgsIDIwLCAxLCA4MiwgMjMyLCAxMTksIDIwLCAxLCA4MiwgMjM0LCAyOCwgMjAsIDEsIAotICAgIDgyLCAyMzEsIDU4LCAyMCwgMSwgODIsIDE4NCwgMjAsIDEsIDgyLCAyMzEsIDE2OSwgMjAsIDEsIDgyLCAyMTYsIDIyMSwgCi0gICAgMjAsIDEsIDgyLCAyMzQsIDkyLCAyMCwgMSwgODIsIDIzMCwgMTUwLCAyMCwgMSwgODIsIDIxNiwgMjQ3LCAyMCwgMSwgODIsIAotICAgIDI0NCwgMTY5LCAyMCwgMSwgODIsIDI0MiwgMjIzLCAyMCwgMSwgMjI1LCAxMzcsIDE3NiwgMjAsIDEsIDIyNSwgMTM3LCA3MCwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDIxNywgMjAsIDEsIDIyNSwgMTM3LCAyNDUsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjMsIDEwOCwgMjAsIDEsIDIyNSwgMTM3LCAyMTcsIDg2LCAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMTQ4LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIzMywgMTM1LCAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMjM5LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgMjksIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMxLCA3OSwgMjAsIDEsIDIyNSwgMTM3LCAyMTcsIDEwMSwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjksIDE0NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDIyNSwgMTM3LCAxOTMsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjE4LCA0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMCwgMjcsIDIwLCAxLCAyMjUsIDEzNywgMjE5LCAxOTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjIwLCAxMjMsIDIwLCAxLCAyMjUsIDEzNywgMjMzLCAxNTUsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNTYsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAyMDksIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAyMzcsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjI4LCAxNTQsIDIwLCAxLCAyMjUsIDEzNywgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDEzNywgMjE5LCAyMjUsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMTkxLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjUsIDE1MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjcsIDI0NiwgMjAsIDEsIDIyNSwgMTM3LCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMTM3LCAyMjUsIDIxMSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjIsIDE0MCwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDIzMywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjMsIDUxLCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMTY1LCAyMCwgMSwgMjI1LCAxMzcsIDIyOSwgNywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMjksIDU2LCAyMCwgMSwgMjI1LCAxMzcsIDIyMCwgNywgMjAsIDEsIDIyNSwgMTM3LCAyMjQsIDE0NywgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyNDQsIDM3LCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgNjUsIDIwLCAxLCAyMjUsIDEzNywgMjMyLCAyNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMyLCAxMTksIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAyOCwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMzEsIDExNCwgMjAsIDEsIDIyNSwgMTM3LCAyMjMsIDgzLCAyMCwgMSwgMjI1LCAxMzcsIDE4NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMzAsIDE2MSwgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDEyMiwgMjAsIDEsIDIyNSwgMTM3LCAyMTYsIDIzMCwgMjAsIAotICAgIDEsIDIyNSwgMTM3LCAyMzMsIDI1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMjEsIDI1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMTIsIAotICAgIDExNSwgOTUsIDEsIDE5MCwgOTUsIDEsIDI1MiwgMTkxLCA5NSwgMSwgOCwgMTkwLCA5NSwgMSwgMjI1LCA0MiwgOTUsIDEsIAotICAgIDE4NCwgOTUsIDEsIDIzMCwgMjMzLCA5NSwgMSwgMjU0LCAyMywgMTg0LCA5NSwgMSwgMjQ0LCAxOTYsIDk1LCAxLCAyMTQsIAotICAgIDI3LCA5NSwgMSwgMjEzLCAxNzcsIDk1LCAxLCAyMTcsIDEwNSwgOTUsIDEsIDI0OCwgMjIxLCA5NSwgMSwgOCwgMjE1LCAKLSAgICAxNTYsIDk1LCAxLCA4LCAyMTcsIDEwNSwgOTUsIDEsIDIxNSwgMTU2LCA5NSwgMSwgMjQ4LCAxMzUsIDk1LCAxLCAxOTcsIAotICAgIDk1LCAxLCAyMjgsIDIzNywgOTUsIDEsIDgsIDIyOCwgMTEwLCA5NSwgMSwgMjU0LCAyMywgMTk3LCA5NSwgMSwgMjI4LCAKLSAgICAxMTAsIDk1LCAxLCAyMjgsIDk2LCA5NSwgMSwgMjMzLCAxMzUsIDk1LCAxLCAyMzIsIDYxLCA5NSwgMSwgMjMyLCAyNTQsIAotICAgIDk1LCAxLCAyMzIsIDI0MywgOTUsIDEsIDIxNiwgNTYsIDk1LCAxLCAyNDcsIDE1MywgOTUsIDEsIDIxNiwgNDgsIDk1LCAxLCAKLSAgICAyNDcsIDE1MiwgOTUsIDEsIDE3NiwgOTUsIDEsIDI0MywgMTM1LCA5NSwgMSwgOCwgMTc2LCA5NSwgMSwgMjI0LCA4OCwgOTUsIAotICAgIDEsIDIyNCwgNjYsIDk1LCAxLCAyMjksIDc3LCA5NSwgMSwgMjI5LCAyOCwgOTUsIDEsIDI1NCwgMjMsIDIyOSwgNzcsIDk1LCAKLSAgICAxLCAxNjIsIDk1LCAxLCAyMTEsIDE2NSwgOTUsIDEsIDI0MiwgMjQ5LCA5NSwgMSwgMjQyLCAyMjYsIDk1LCAxLCAyMTUsIAotICAgIDE2NSwgOTUsIDEsIDI0NiwgMjYsIDk1LCAxLCAyMjcsIDE2NSwgOTUsIDEsIDIyNywgMTUwLCA5NSwgMSwgMjE1LCAxNzUsIAotICAgIDk1LCAxLCAyNDYsIDMzLCA5NSwgMSwgOCwgMjE1LCAxNzUsIDk1LCAxLCA4LCAyNDYsIDMzLCA5NSwgMSwgMjIzLCAxMDYsIAotICAgIDIxNSwgMTc1LCA5NSwgMSwgMjIwLCAxMDIsIDk1LCAxLCAyMTgsIDIyMywgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIAotICAgIDE0LCA5NSwgMSwgMjE1LCAxODMsIDk1LCAxLCAyNDYsIDM4LCA5NSwgMSwgOCwgMjE1LCAxODMsIDk1LCAxLCAyMDYsIDk1LCAKLSAgICAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgCi0gICAgMjU0LCAyMywgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIAotICAgIDEsIDI1NCwgMjA5LCA5NSwgMSwgMjQxLCAxODksIDk1LCAxLCAyMjksIDE5MiwgOTUsIDUsIDI1MywgMjIyLCA5NSwgNSwgCi0gICAgMjIzLCAxMDYsIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAxMDYsIDI1MywgMjIyLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDk1LCAyNSwgNSwgMjU0LCAyMDUsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgMjU0LCAxMTUsIAotICAgIDk1LCAyNSwgNSwgNzYsIDk1LCAyNSwgNSwgMjI2LCAxODMsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCAKLSAgICA5OCwgOTUsIDI1LCA1LCA3NSwgOTUsIDI1LCA1LCAyNDUsIDE1MCwgOTUsIDI1LCA1LCAyNDUsIDEzOCwgOTUsIDI1LCA1LCAKLSAgICAyMjYsIDIzMiwgOTUsIDI1LCA1LCA3MywgOTUsIDI1LCA1LCAyNDAsIDExOSwgOTUsIDI1LCA1LCAyNDAsIDExOCwgOTUsIAotICAgIDI1LCA1LCAyNDAsIDExNywgOTUsIDI1LCA1LCAyMzUsIDE4OSwgOTUsIDI1LCA1LCAyMzYsIDYwLCA5NSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDk1LCAyNSwgNSwgMjM1LCAxNTYsIDk1LCAyNSwgNSwgMjM1LCAyMzEsIDk1LCAyNSwgNSwgNzAsIDk1LCAyNSwgNSwgCi0gICAgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIAotICAgIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgCi0gICAgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgMjQzLCA5NSwgMjUsIDUsIDI1NCwgMjM5LCA5NSwgMjUsIDUsIDI0NSwgODYsIDk1LCAKLSAgICAyNSwgNSwgMjIyLCAxODMsIDI0NSwgODYsIDk1LCAyNSwgNSwgMjQ1LCA5MiwgOTUsIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCAKLSAgICA5MiwgOTUsIDI1LCA1LCAyNTQsIDIwMSwgOTUsIDI1LCA1LCAyNDUsIDE5NSwgOTUsIDI1LCA1LCAyNTMsIDE5MiwgOTUsIAotICAgIDI1LCA1LCAyMjYsIDEzNCwgOTUsIDI1LCA1LCAyMzAsIDI1LCA5NSwgMjUsIDUsIDIyOSwgNzksIDk1LCAxMzgsIDIyMiwgCi0gICAgMjUxLCA5NSwgMTM4LCAyMTYsIDE0LCAyMjIsIDI1MSwgOTUsIDEzOCwgNDgsIDk1LCAxMzgsIDUxLCA5NSwgMSwgMjE2LCAKLSAgICAyOCwgOTUsIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAKLSAgICAxLCAyMTYsIDIzLCA5NSwgMSwgMjE2LCAyMiwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI5LCA5NSwgMSwgMjIzLCAxMDYsIAotICAgIDIxNiwgMjgsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyNiwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI1LCA5NSwgMSwgMjIzLCAKLSAgICAxMDYsIDIxNiwgMjQsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyMiwgNTYsIDEsIDI1NCwgMjMsIDc1LCAxNDEsIDEsIDI1NCwgCi0gICAgMjMsIDIxMSwgNDcsIDQ5LCAyOCwgMTYsIDIyNCwgMTU0LCA0OSwgMjgsIDE2LCAyNDgsIDE1OCwgNDksIDI4LCAxNiwgMjI1LCAKLSAgICAxNzUsIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NywgMjAxLCA0OSwgCi0gICAgMjgsIDE2LCAyMTQsIDE2LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMTk3LCA0OSwgMjgsIDE2LCAyMTcsIDE2OSwgNDksIDI4LCAxNiwgMjI2LCA5LCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgCi0gICAgNDksIDI4LCAxNiwgMjEwLCAyMTgsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAyMzMsIDIzNCwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA2OCwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDI0NSwgMjYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTcsIDIsIDQ5LCAyOCwgCi0gICAgMTYsIDIzNCwgMTYxLCA0OSwgMjgsIDE2LCAyNTQsIDU4LCA0OSwgMjgsIDE2LCAyNTQsIDU5LCAyNDcsIDIwMSwgNDksIDI4LCAKLSAgICAxNiwgMjE3LCAxNzUsIDQ5LCAyOCwgMTYsIDIxNiwgMTU5LCA0OSwgMjgsIDE2LCAyMjYsIDIwNiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjQyLCAxNTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyNCwgMTUzLCA0OSwgMjgsIDE2LCAyNTAsIDE0OSwgCi0gICAgNDksIDI4LCAxNiwgMjE0LCA2LCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIAotICAgIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjEsIDIxMywgNDksIDI4LCAxNiwgCi0gICAgMjI2LCAwLCA0OSwgMjgsIDE2LCAyMTgsIDE0NiwgMjU0LCA2MSwgNDksIDI4LCAxNiwgMjI2LCAxMTIsIDI1NCwgMjEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTUsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgNTYsIDQ5LCAyOCwgMTYsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIyMywgNDYsIDQ5LCAyOCwgMTYsIDIyNSwgMTA2LCAyNTQsIAotICAgIDIxLCA0OSwgMjgsIDE2LCAyMTYsIDgzLCA0OSwgMjgsIDE2LCAyNTQsIDEyMSwgNDksIDI4LCAxNiwgMjIxLCAxNTksIDQ5LCAKLSAgICAyOCwgMTYsIDIxNywgMTc4LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMTcsIDE3OCwgMjMxLCA0MCwgMjE4LCAxNDQsIDQ5LCAKLSAgICAyOCwgMTYsIDIyNiwgMTA3LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMTYsIDE5MCwgNDksIDI4LCAxNiwgMjMzLCAyNywgNDksIAotICAgIDI4LCAxNiwgMjQ2LCA0MSwgNDksIDI4LCAxNiwgMjE1LCAyMjcsIDQ5LCAyOCwgMTYsIDIxNiwgMjMyLCA0OSwgMjgsIDE2LCAKLSAgICAyMzMsIDIzNywgNDksIDI4LCAxNiwgMjU0LCA2OCwgMjQ1LCAyNiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIAotICAgIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNiwgMTIsIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDIwMCwgMjE1LCAxOTgsIDQ5LCAyOCwgMTYsIDIyNSwgMjAwLCA0OSwgMjgsIDE2LCAyMjQsIDE1OCwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxMSwgNDksIDI4LCAxNiwgMjUwLCA4MCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjIzLCAxNDYsIDQ5LCAyOCwgCi0gICAgMTYsIDIyNiwgMTIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyNiwgMTAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI0MCwgMTA5LCAKLSAgICA0OSwgMjgsIDE2LCAyMjksIDIwMywgNDksIDI4LCAxNiwgMjI1LCAxNTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTIsIDI1NCwgCi0gICAgMTQ5LCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjU0LCAxNDksIDQ5LCAyOCwgMTYsIDIxOCwgMTIzLCA0OSwgMjgsIDE2LCAKLSAgICAyNDIsIDEyMywgNDksIDI4LCAxNiwgMjM1LCAxNjQsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyMjksIDk1LCAKLSAgICA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI1LCAxNTUsIDQ5LCAyOCwgMTYsIDIzMywgCi0gICAgMjU0LCA0OSwgMjgsIDE2LCAyMjUsIDE1NCwgNDksIDI4LCAxNiwgMjMzLCAyMzYsIDQ5LCAyOCwgMTYsIDIyNSwgMjAxLCAKLSAgICAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIAotICAgIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIxMCwgMjE1LCA0OSwgMjgsIDE2LCAyNTQsIDU5LCAyMjksIDk1LCA0OSwgCi0gICAgMjgsIDE2LCAyNTQsIDYwLCAyMTcsIDE3NiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM1LCA0OSwgMjgsIDE2LCAyNDUsIDE3MywgNDksIDI4LCAxNiwgMjUwLCAxNTAsIDQ5LCAyOCwgMTYsIDIzMCwgCi0gICAgMTk4LCAyMzUsIDE2MywgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU5LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIDIwMywgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA4NCwgNDksIDI4LCAxNiwgMjMyLCA1OCwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAKLSAgICAxMiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQ1LCA2MCwgMjI2LCAxMSwgNDksIDI4LCAxNiwgMjMzLCAxNTMsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgODUsIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDE3NiwgNDksIDI4LCAKLSAgICAxNiwgMjE3LCAxNzgsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyMjksIAotICAgIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDEwNiwgNDksIDI4LCAxNiwgMjIxLCAxNjAsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxMSwgCi0gICAgMTUxLCAyMzQsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDE5NiwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAotICAgIDIxNSwgMjAwLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDIxNSwgCi0gICAgMTk1LCA0OSwgMjgsIDE2LCAyMjQsIDE1NiwgNDksIDI4LCAxNiwgMjQyLCAxNTgsIDQ5LCAyOCwgMTYsIDI1NCwgMTQsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgNjAsIDI1NCwgMTQsIDQ5LCAyOCwgMTYsIDIyNiwgMTA3LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTYsIAotICAgIDE4OSwgMjQ1LCA2OSwgNDksIDI4LCAxNiwgMjE2LCAxODksIDI0NSwgMjUsIDQ5LCAyOCwgMTYsIDIxNiwgMTkxLCAyNTQsIAotICAgIDYzLCA0OSwgMjgsIDE2LCAyMTYsIDE4NCwgMjM0LCAyNDcsIDI1NCwgNTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTk5LCA0OSwgCi0gICAgMjgsIDE2LCAyNDUsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIAotICAgIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ1LCA0OSwgMjgsIDE2LCAyMzQsIDM4LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIwMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAKLSAgICAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjIsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDIxMCwgNDksIDI4LCAKLSAgICAxNiwgMjE2LCAyMjQsIDQ5LCAyOCwgMTYsIDIzNCwgMiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ1LCAxMzQsIDI1MCwgNzEsIAotICAgIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDI0NiwgNDIsIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNSwgMjEyLCAKLSAgICAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyMTYsIDIzNCwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgCi0gICAgMjM2LCA3LCAyNTAsIDcxLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjQyLCAKLSAgICAxNTksIDIyNiwgMSwgMjU0LCAxMCwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyNiwgMSwgMjQ4LCAyOSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNiwgMjI2LCAxLCAyNTQsIDExLCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDcsIDIyNiwgMjI2LCAxLCAyNDgsIAotICAgIDI5LCA0OSwgMjgsIDE2LCAyMTUsIDIxNiwgNDksIDI4LCAxNiwgMjU0LCAxNSwgNDksIDI4LCAxNiwgMjM2LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ3LCAyNDYsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMjUsIDAsIDI1NCwgMTYsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgMjExLCAyNTQsIDEzLCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgCi0gICAgMzQsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMzEsIDQ1LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjQyLCAxNjAsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE1NywgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjQyLCAxNjAsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNTQsIDE1MSwgCi0gICAgMjI0LCAxNjUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjQ4LCAyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIzMSwgMTUxLCAyNTQsIDE1MSwgMjQ4LCAyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTUsIDIwNSwgCi0gICAgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNiwgMjI4LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNiwgMjI4LCAyMzMsIDM1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjI1LCAzOSwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzNSwgMTY5LCAyMTYsIDI1MSwgMjQwLCAxMDgsIDQ5LCAyOCwgMTYsIDI1NCwgNjAsIDIxNiwgMjUxLCAyNDAsIAotICAgIDEwOCwgNDksIDI4LCAxNiwgMjQ0LCAxNzIsIDIxNiwgMjI1LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjMwLCAxNDMsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NCwgMTcyLCAyNDcsIDIzMCwgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNCwgMTAsIDI0MCwgMTA3LCA0OSwgCi0gICAgMjgsIDE2LCAyMzEsIDE1MSwgMjI0LCAxNjQsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjI1LCAzOSwgMjE2LCAKLSAgICAyMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyNDIsIDE1NSwgMjMwLCAyNiwgMjU0LCA2MywgNDksIDI4LCAxNiwgMjQyLCAKLSAgICAxNTUsIDIzMCwgMjYsIDI0NywgMjAwLCA0OSwgMjgsIDE2LCAyNDUsIDE0OCwgMjM0LCAyNDcsIDI0MywgMjM2LCAyMTMsIAotICAgIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAxMywgNDksIDI4LCAxNiwgMjM2LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI1NCwgCi0gICAgMjIsIDI0OCwgMjcsIDI0MCwgMTA2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDE5MCwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjksIDIwMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgMTk4LCAyNDAsIDEwNywgCi0gICAgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMTksIDEwMiwgCi0gICAgMjQ3LCAyNDMsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMzQsIDE4MiwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAKLSAgICAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjgsIDIzNCwgMjU0LCA5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDIzMSwgMTkxLCAyNTAsIDczLCAyNDcsIDIzMCwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIzMSwgMTkxLCAKLSAgICAyNTAsIDczLCAyMzAsIDE0MywgNDksIDI4LCAxNiwgMjQ0LCAxMjIsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTQsIDksIDQ5LCAKLSAgICAyOCwgMTYsIDI0MywgMjM2LCAyMTksIDEwMiwgMjUwLCA3MywgMjE3LCAxNzksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMjksIAotICAgIDk3LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMDksIDI0OSwgNDksIDI4LCAxNiwgMjUwLCA3NCwgMjM0LCAzNiwgNDksIDI4LCAKLSAgICAxNiwgMjUwLCA3NCwgMjE5LCA5LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQwLCAxNTQsIDIxMSwgMTAsIDIxNiwgMjI5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ1LCAxNDksIDI1NCwgODYsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIxNSwgMjA2LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMDYsIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTYsIDIyOSwgNDksIDI4LCAKLSAgICAxNiwgMjQ3LCAyMzgsIDI1NCwgNjUsIDI0NiwgNDIsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjMwLCAxNDEsIAotICAgIDIxNiwgMjMzLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNSwgMjE0LCAyMjYsIDIxMSwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAotICAgIDI1NCwgNjUsIDI0NiwgNDIsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMzAsIDE0MSwgMjE2LCAyMzMsIDI0NywgCi0gICAgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNDcsIDIyMiwgMjQ1LCAzNiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgCi0gICAgMTAsIDIxNSwgMjE0LCAyMjYsIDIxMSwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0MywgNDksIDI0NywgMjM3LCA0OSwgMjgsIAotICAgIDE2LCAyNDMsIDQ5LCAyMTEsIDksIDQ5LCAyOCwgMTYsIDI0NywgMjQ1LCAyNTQsIDY1LCAyMzAsIDE5OSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMSwgNzMsIDQ5LCAyOCwgMTYsIDI0NywgMjQ1LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyNDUsIDIxNiwgMTgyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAKLSAgICAyMTYsIDE4MywgMjQ3LCAxODYsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MywgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIxOSwgMTYzLCAyMTYsIDE4MywgMjE2LCAyMjIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NCwgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDI1MywgMjQ1LCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ1LCAyMTUsIDIwNywgCi0gICAgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ1LCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjQ3LCAyMjMsIDI0MywgMzAsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjI5LCAyMjYsIDEzNCwgNDksIDI4LCAxNiwgMjE4LCAxMzcsIDQ5LCAyOCwgMTYsIDI1NCwgNywgCi0gICAgMTkwLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIxMywgMTI0LCA0OSwgMjgsIDE2LCAyNTQsIDcsIDI0MywgMTM1LCA0OSwgMjgsIAotICAgIDE2LCAyNTQsIDcsIDI0OCwgMywgNDksIDI4LCAxNiwgMjU0LCA3LCAyMzQsIDE4MiwgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIyOCwgMjMzLCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjI5LCA5NiwgCi0gICAgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIDIyOSwgOTYsIDIzMSwgNDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAKLSAgICAyMjksIDk2LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDM4LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyOSwgOTYsIDIzNCwgMTk2LCAyOCwgMTYsIDIxOSwgCi0gICAgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCA1MiwgMjUyLCAxMzUsIDI4LCAxNiwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDIyMywgCi0gICAgNTAsIDQwLCAyNTIsIDEzNSwgMjgsIDE2LCAyNDgsIDE1NSwgMjUyLCAxMzUsIDI4LCAxNiwgMjE5LCAyNTEsIDI1MiwgMTM1LCAKLSAgICAyOCwgMTYsIDQzLCAyMjMsIDc3LCA1MCwgMjgsIDE2LCA0NCwgMjIzLCA3NywgNTAsIDI4LCAxNiwgMjIzLCA3NywgMjQ3LCAKLSAgICAxMTgsIDI4LCAxNiwgMjQ4LCAxOTYsIDIyMSwgMTYzLCAyOCwgMTYsIDI0OCwgMjIyLCAyNTAsIDI0OSwgMjgsIDE2LCAyMjEsIAotICAgIDE2MywgMjgsIDE2LCAyNDksIDIzNCwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIDExMSwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIAotICAgIDExMCwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIDEwOSwgMjgsIDE2LCAyNDQsIDEzMSwgMjgsIDE2LCAyNDQsIDEzMiwgNTEsIAotICAgIDI4LCAxNiwgMjUxLCAxNDgsIDc4LCAyOCwgMTYsIDI1MSwgMjQsIDI4LCAxNiwgMjUxLCAxNTksIDI4LCAxNiwgMTI3LCAyOCwgCi0gICAgMTYsIDIyNiwgMTkzLCAyMTgsIDE2MywgMjgsIDE2LCAyMTUsIDU3LCAyMTgsIDE2MywgMjgsIDE2LCAyMTYsIDE0MiwgMjE4LCAKLSAgICAxNjMsIDI4LCAxNiwgMjQ0LCAxMCwgMjE4LCAxNjMsIDI4LCAxNiwgMjQ0LCA4MCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAKLSAgICAxMjQsIDIxOCwgMTYzLCAyOCwgMTYsIDIxOSwgMTIyLCAyNDMsIDI1MCwgMjgsIDE2LCAyNDQsIDgsIDI0MywgMjUwLCAyOCwgCi0gICAgMTYsIDI0MywgMjAzLCAyNTAsIDE0LCAyOCwgMTYsIDI0MywgMjAzLCAyNTAsIDE1LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIDE2LCAyNTEsIDY3LCAyNTAsIDE0LCAyOCwgCi0gICAgMTYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCAyNDUsIDcsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAKLSAgICAyNDUsIDcsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIDE2LCAyNDYsIDgzLCAyNTAsIDEzLCAyOCwgMTYsIAotICAgIDI0NiwgODMsIDI1MCwgMTIsIDI4LCAxNiwgMjMwLCA4NSwgMjMxLCA5MCwgMjIzLCA2MSwgMjgsIDE2LCA1MiwgMjIwLCA3NSwgCi0gICAgMjgsIDE2LCA1MiwgMjQ0LCA2NSwgMjgsIDE2LCAyNDQsIDY2LCAyMTQsIDE2MywgMjgsIDE2LCAyNDQsIDY2LCAyNDYsIAotICAgIDEwNiwgMjgsIDE2LCAyMjksIDE4OCwgMjE0LCAxNjMsIDI4LCAxNiwgMjI5LCAxODgsIDI0NiwgMTA2LCAyOCwgMTYsIDIyMCwgCi0gICAgNzYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyMCwgNzYsIDI0NiwgMTA2LCAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjIwLCA3NSwgCi0gICAgMjgsIDE2LCAyMjQsIDIyLCAxMzgsIDI0NCwgNjUsIDI4LCAxNiwgMjQ5LCAyMTYsIDIxNiwgODcsIDI4LCAxNiwgMjQ5LCAKLSAgICA4NSwgMjE2LCA4NywgMjgsIDE2LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAxNiwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgCi0gICAgMTYsIDIyNCwgNCwgMjU0LCAxNDIsIDI4LCAxNiwgMjI0LCA0LCAyNTIsIDEyMiwgMjgsIDE2LCAyMzAsIDg4LCAyMjMsIDYxLCAKLSAgICAyOCwgMTYsIDIxMSwgMjUxLCAyMjMsIDYxLCAyOCwgMTYsIDE2MywgMjIzLCA2MSwgMjgsIDE2LCAyMjQsIDIyLCAyMjMsIAotICAgIDYxLCAyOCwgMTYsIDI0NSwgMTg5LCAyMjMsIDYxLCAyOCwgMTYsIDIxOSwgMTE4LCAyMjMsIDYxLCAyOCwgMTYsIDIxNiwgCi0gICAgMTYwLCAyMjMsIDYxLCAyOCwgMTYsIDIxOSwgMTEwLCAyMjMsIDYxLCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIAotICAgIDIyMywgNjEsIDI4LCAxNiwgMjExLCAxNzksIDIyOCwgNDMsIDI4LCAxNiwgOTYsIDIyOCwgNDMsIDI4LCAxNiwgMjUwLCAzNiwgCi0gICAgMjExLCAxNzksIDIyOCwgNDMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDQyLCAyMjgsIDQ0LCAKLSAgICAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTIwLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgCi0gICAgMjI4LCA0NCwgMTIwLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDMsIDIxMSwgMjUzLCAyOCwgMTYsIAotICAgIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQ0LCAyMTEsIDI1MywgCi0gICAgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjQsIAotICAgIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjQsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTIwLCA0NCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIzMCwgMTI5LCAyMjgsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMTUsIDIyMywgMjI4LCA0NCwgMTI0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyMywgMjI4LCA0NCwgMTI0LCAKLSAgICAyNTEsIDIyMSwgMjgsIDE2LCAyMjYsIDQsIDIyOCwgNDMsIDI4LCAxNiwgMjEzLCAxMzIsIDIyOCwgNDMsIDI4LCAxNiwgCi0gICAgMjI4LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjI3LCAyMDMsIDIyOCwgNDMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIAotICAgIDIxMSwgMjUzLCAyOCwgMTYsIDI0OSwgMjQxLCAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyNTEsIDE0NiwgMjgsIDE2LCAKLSAgICAyMTEsIDI1MSwgMjI4LCA0NywgMjgsIDE2LCAxNjMsIDIyOCwgNDcsIDI4LCAxNiwgMjI0LCAyMiwgMjI4LCA0NywgMjgsIAotICAgIDE2LCAyNDUsIDE4OSwgMjI4LCA0NywgMjgsIDE2LCAyMTksIDExOCwgMjI4LCA0NywgMjgsIDE2LCAyMTYsIDE2MCwgMjI4LCAKLSAgICA0NywgMjgsIDE2LCAyMTksIDExMCwgMjI4LCA0NywgMjgsIDE2LCAxMjMsIDI0MCwgMjExLCAyMTUsIDcxLCAyMjgsIDQ3LCAKLSAgICAyOCwgMTYsIDM4LCAyMTgsIDEzOSwgMjgsIDE2LCAzOCwgMjE4LCAyNDAsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTUsIAotICAgIDIzNCwgMjgsIDE2LCAzOCwgMjE1LCAyMzMsIDI4LCAxNiwgMzgsIDIxNSwgMjMyLCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIAotICAgIDIzNCwgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzMsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgMjMyLCAyOCwgMTYsIDM4LCAKLSAgICAyNTMsIDE4OSwgMjQ3LCAxMjAsIDI4LCAxNiwgMzgsIDI0NCwgNzIsIDI4LCAxNiwgMzgsIDI0NCwgNzEsIDI4LCAxNiwgMzgsIAotICAgIDI0NCwgNzAsIDI4LCAxNiwgMzgsIDI0NCwgNjksIDI4LCAxNiwgMzgsIDI0NCwgNjgsIDI4LCAxNiwgMjUyLCA1OCwgMjUyLCAKLSAgICA3NCwgMjgsIDE2LCAyNDUsIDE0MywgMjUyLCA3NCwgMjgsIDE2LCAyNTIsIDU4LCAyMTYsIDExMSwgMjgsIDE2LCAyNDUsIAotICAgIDE0MywgMjE2LCAxMTEsIDI4LCAxNiwgMjUyLCA1OCwgMjE5LCA4MCwgMjgsIDE2LCAyNDUsIDE0MywgMjE5LCA4MCwgMjgsIAotICAgIDE2LCAyNTIsIDU4LCAyMjUsIDExNSwgMjgsIDE2LCAyNDUsIDE0MywgMjI1LCAxMTUsIDI4LCAxNiwgMzgsIDI1NSwgMTQsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTY1LCAyOCwgMTYsIDM4LCAyMTYsIDIzOCwgMjgsIDE2LCAzOCwgMjE4LCAxNjYsIDI4LCAxNiwgCi0gICAgMzgsIDIzMSwgMTYyLCAyOCwgMTYsIDM4LCAyMzEsIDE2MSwgMjgsIDE2LCAzOCwgMjU1LCAxMywgMjgsIDE2LCAzOCwgMjMyLCAKLSAgICAxMTIsIDI4LCAxNiwgMjUzLCAyNTQsIDIxNCwgMTYzLCAyOCwgMTYsIDI1MywgMjU0LCAyNDYsIDEwNiwgMjgsIDE2LCAzOCwgCi0gICAgMjQ3LCAxMzUsIDI4LCAxNiwgMzgsIDIyMiwgMjMxLCAyOCwgMTYsIDM4LCAyNDQsIDU4LCAyOCwgMTYsIDM4LCAyMTksIDc2LCAKLSAgICAyOCwgMTYsIDM4LCAyNTIsIDM4LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAxOSwgMjgsIDE2LCAzOCwgMjE1LCAyMTEsIDIxNiwgCi0gICAgMTksIDI4LCAxNiwgMjIyLCAyMzUsIDI4LCAxNiwgMjE4LCA3NSwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIAotICAgIDEwNywgMjgsIDE2LCAyMzEsIDI1LCAyOCwgMTYsIDI0NCwgMTcsIDI4LCAxNiwgMjQ5LCAxMzgsIDI4LCAxNiwgMjQ4LCA3OCwgCi0gICAgMjgsIDE2LCAyNDIsIDE1MCwgMjI4LCA0OCwgMjE5LCA5NSwgMjgsIDE2LCAyNDIsIDE1MCwgMjI4LCA0OCwgMjI4LCA3NSwgCi0gICAgMjE5LCA5NSwgMjgsIDE2LCAyMTYsIDAsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDE5MywgMjE1LCA5NSwgMjgsIAotICAgIDE2LCAyMTUsIDk2LCAyMTksIDk1LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDEwMiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5OSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5OCwgMjgsIDE2LCAyMjYsIAotICAgIDE0OCwgMjE4LCA5NywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5NiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5NSwgMjgsIAotICAgIDE2LCAyMjYsIDE0OCwgMjE4LCA5NCwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5MywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAKLSAgICA5MiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgMTAwLCAyOCwgMTYsIDI0MSwgCi0gICAgMjQ1LCAyOCwgMTYsIDIyOSwgMTA1LCAyOCwgMTYsIDI0NSwgMTQzLCA2NCwgMjE4LCAxMzMsIDI4LCAxNiwgMjQ4LCA3MSwgCi0gICAgMjE5LCA5NSwgMjgsIDE2LCAzOCwgMTI0LCAyNTEsIDE2OSwgMjgsIDE2LCAzOCwgMTIwLCAyNTEsIDE2OSwgMjgsIDE2LCAKLSAgICAzOCwgMjQyLCAwLCAyOCwgMTYsIDM4LCAyMTksIDY3LCAyMjUsIDQzLCAyOCwgMTYsIDIyNSwgMjE2LCA3OCwgMjgsIDE2LCAKLSAgICAyMjUsIDIxNiwgMTIwLCA3OCwgMjgsIDE2LCAxNjMsIDIyNSwgMjE2LCA3OCwgMjgsIDE2LCAyNDIsIDE4MiwgMjE0LCAxNjMsIAotICAgIDI4LCAxNiwgMjQyLCAxODIsIDI0NiwgMTA2LCAyOCwgMTYsIDIsIDI0NCwgMTAwLCAyOCwgMTYsIDI0OCwgMTgwLCAyOCwgCi0gICAgMTYsIDI0OCwgMTgxLCAyNTQsIDE1NCwgMjgsIDE2LCAyMzEsIDEzMywgMjgsIDE2LCAyMzIsIDEyOSwgMjgsIDE2LCAyNTEsIAotICAgIDE0MywgMjgsIDE2LCAyMjAsIDE1NCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTQsIDI1MSwgMjIxLCAyOCwgMTYsIDIzMCwgCi0gICAgMTg0LCAyOCwgMTYsIDIzMCwgMTg1LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjAsIDE0OCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAKLSAgICAxNDgsIDI1MSwgMjIxLCAyOCwgMTYsIDI0MywgMjIwLCAyMTEsIDI1MywgMjgsIDE2LCAyNDMsIDIyMCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjMyLCAxMzAsIDIyNSwgMTgwLCAyMjMsIDYxLCAyOCwgMTYsIDIzMiwgMTMwLCAyMzYsIDQsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjUxLCAxNDQsIDIyMywgNjEsIDI4LCAxNiwgMjIwLCAxNTQsIDIyMywgNjEsIDI4LCAxNiwgMjMwLCAxODUsIAotICAgIDIyMywgNjEsIDI4LCAxNiwgMjIwLCAxNDgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgCi0gICAgMjI0LCAxNzQsIDIyNSwgMTc5LCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIAotICAgIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIyNSwgMTgwLCAyNDcsIDIxMSwgCi0gICAgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIyNSwgMTc5LCAyOCwgMTYsIDIxNiwgMjQ5LCAKLSAgICAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCAzLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjM2LCA0LCAyNDcsIDIxMSwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIAotICAgIDIzNiwgNCwgMjQ3LCAyMTAsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDQsIAotICAgIDI0NywgMjA5LCAyOCwgMTYsIDI0OSwgMTMzLCAyOCwgMTYsIDI0MiwgMTI2LCAyNTEsIDY3LCAyNTAsIDE0LCAyOCwgMTYsIAotICAgIDI0MiwgMTI2LCAyNDUsIDcsIDI1MCwgMTQsIDI4LCAxNiwgNDIsIDI1MywgMTU4LCAyOCwgMTYsIDIxMywgMTUxLCAyOCwgCi0gICAgMTYsIDIyNSwgMTQsIDI4LCAxNiwgMjUwLCA1LCAyOCwgMTYsIDIyMSwgMjAzLCAyOCwgMTYsIDI1MCwgOSwgMjgsIDE2LCAKLSAgICAyMTYsIDcsIDI4LCAxNiwgMjI0LCAyNDIsIDI4LCAxNiwgMjI0LCAyNDMsIDI0NCwgNjAsIDI4LCAxNiwgMjIxLCAyMDQsIAotICAgIDI0NCwgNjAsIDI4LCAxNiwgMjE2LCA4LCAyMjMsIDU4LCAyOCwgMTYsIDIyNSwgMTYzLCAyMTgsIDY2LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjA4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMDEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTg3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4NSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjgsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyNywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyNCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjIsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjIwLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjE2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjEzLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTIsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDE5MSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkwLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAxODksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4OCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTkzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjI3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjEsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIyMCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjE5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMTQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEyLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjA5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNiwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjA1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIwMywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDAsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5OSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxOTQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTkxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4OSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTg4LCAzOCwgMjYsIDI4LCAyMTUsIDIwOCwgMzgsIDI2LCAyOCwgMjE2LCAyMjMsIDM4LCAyNiwgCi0gICAgMjgsIDIyNSwgMTg4LCAyNiwgMjgsIDIzMywgMzEsIDIzMCwgMTQyLCAzMSwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQxLCAKLSAgICAyMjIsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0MCwgMjE0LCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgCi0gICAgMjQxLCAyMjMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjIsIDI0MCwgMjEzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIzLCAxODAsIAotICAgIDMxLCAyNTAsIDE3NCwgMTgwLCAzMSwgMjQzLCAyMjksIDI1MCwgMzUsIDE4MCwgMzEsIDIzMCwgMTc3LCAxODAsIDMxLCAKLSAgICAyNTIsIDEzMCwgMTgwLCAzMSwgMjM0LCAxNzksIDIxOSwgNzksIDE4MCwgMzEsIDI0OSwgMTc5LCAxODAsIDMxLCAyNTMsIAotICAgIDIzMywgMTgwLCAzMSwgMjI2LCAxNjMsIDE4MCwgMzEsIDI1MSwgMTUzLCAyMjYsIDEzMCwgMTgwLCAzMSwgMjQ4LCA3MywgCi0gICAgMTc3LCAyNDcsIDE3OSwgMTgwLCAzMSwgMjQ3LCAxNzYsIDE4MCwgMzEsIDIxMCwgMjIyLCAxODAsIDMxLCAyMzUsIDI0NywgCi0gICAgMTgwLCAzMSwgMjI1LCAxOTcsIDE4MCwgMzEsIDIyMywgMTI3LCAxODAsIDMxLCAyNDksIDE4OSwgMTgwLCAzMSwgMjQxLCAKLSAgICA2MCwgMjUyLCAxODQsIDE4MCwgMzEsIDIxMiwgNTksIDE4MCwgMzEsIDI0NCwgMzksIDE4MCwgMzEsIDI1NCwgMjQ2LCAxODAsIAotICAgIDMxLCAyMjMsIDg5LCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDUsIDIyMSwgMTgwLCAzMSwgMjM1LCA1MywgMTgwLCAKLSAgICAzMSwgMjQ5LCAxODQsIDE4MCwgMzEsIDI0NSwgMTQyLCAxODAsIDMxLCAyNDYsIDUyLCAxODAsIDMxLCAyNTAsIDE0NSwgCi0gICAgMTgwLCAzMSwgMjQ4LCA4MiwgMTgwLCAzMSwgMjMsIDIyMywgNjQsIDE4MCwgMzEsIDIyNiwgODEsIDE4MCwgMzEsIDIzMywgCi0gICAgMzQsIDE4MCwgMzEsIDI0OSwgMjU0LCAxODAsIDMxLCAyMzQsIDc3LCAxODAsIDMxLCAyNDMsIDg2LCAxODAsIDMxLCAyMTgsIAotICAgIDExMiwgMTgwLCAzMSwgMjI0LCAxMzAsIDE4MCwgMzEsIDI0MywgMjI4LCAxODAsIDMxLCAyMjMsIDY2LCAxODAsIDMxLCAKLSAgICAyMzMsIDcxLCAxNzcsIDIzMCwgMTU3LCAxODAsIDMxLCAyMjMsIDYyLCAxODAsIDMxLCAyNDIsIDE2OCwgMjE2LCA0MiwgCi0gICAgMjMxLCA3NiwgMTgwLCAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIxOCwgMTI0LCAxODAsIDMxLCAyNDIsIDEyOCwgMTgwLCAKLSAgICAzMSwgMjQ1LCAxMzYsIDE4MCwgMzEsIDIyNSwgMjM1LCAxODAsIDMxLCAyMjIsIDIyNSwgMTgwLCAzMSwgMjQ0LCA1OSwgCi0gICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMTkzLCAxODAsIDMxLCAyMzEsIDg5LCAxODAsIAotICAgIDMxLCAyNDUsIDYxLCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMTIsIDE4MCwgMzEsIDI1MCwgMCwgMjMwLCAKLSAgICAxMTAsIDE4MCwgMzEsIDI0MiwgMTA2LCAxODAsIDMxLCAyNDMsIDg3LCAyMzUsIDI1NSwgMTgwLCAzMSwgMjMxLCAxNDEsIAotICAgIDE4MCwgMzEsIDI1NSwgMTAsIDE4MCwgMzEsIDI0NSwgMTU3LCAxODAsIDMxLCAyNDYsIDEwOSwgMTgwLCAzMSwgMjEyLCA0MiwgCi0gICAgMTgwLCAzMSwgMjE5LCAxNTAsIDE4MCwgMzEsIDIzNSwgMjIyLCAxODAsIDMxLCAyNDgsIDQyLCAxODAsIDMxLCAyNDgsIAotICAgIDE2MCwgMTgwLCAzMSwgMjQ3LCAyMDgsIDE4MCwgMzEsIDI0NSwgMjksIDE4MCwgMzEsIDIyMCwgMTE1LCAxODAsIDMxLCAKLSAgICAyMTgsIDEyOCwgMTgwLCAzMSwgMjQyLCAyLCAxODAsIDMxLCAyNDksIDIxMiwgMTgwLCAzMSwgMjQ5LCAyNTEsIDE4MCwgMzEsIAotICAgIDI0NCwgMTc3LCAxODAsIDMxLCAyNTQsIDIxMiwgMTgwLCAzMSwgMjQ5LCAyMTEsIDE4MCwgMzEsIDIyNiwgMTk3LCAyMTYsIAotICAgIDE5NiwgMjEzLCAyNDIsIDE4MCwgMzEsIDI0NywgMjMyLCAxODAsIDMxLCAyMzMsIDEyNCwgMTgwLCAzMSwgMjQ0LCAxMywgCi0gICAgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDExMCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIAotICAgIDEwNSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE1OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgCi0gICAgMjEsIDE2MSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE4OSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIAotICAgIDE3NCwgMjEsIDE5NCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE5OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAKLSAgICAyMTQsIDE3NCwgMjEsIDE5NSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDIwMCwgMjQ5LCAxNDksIDIyMiwgCi0gICAgMjAyLCAyMTYsIDI0MywgMjEsIDExMCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDEwNSwgMjQ5LCAxNDksIAotICAgIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE1OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE2MSwgMjQ5LCAKLSAgICAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE4OSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE5NCwgCi0gICAgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE5OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIAotICAgIDE5NSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDIwMCwgMTEsIDIzLCA2LCA2MSwgMTEsIDIzLCA2LCAKLSAgICAyNTMsIDE1OCwgMTEsIDIzLCA2LCAyNTEsIDY2LCAxMSwgMjMsIDYsIDI0OSwgNjAsIDExLCAyMywgNiwgNzUsIDExLCAyMywgCi0gICAgNiwgMjQ1LCA2LCAxMSwgMjMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDYsIDI0MiwgNjAsIDExLCAyMywgNiwgNzMsIDExLCAKLSAgICAyMywgNiwgMjM1LCAxNDQsIDExLCAyMywgNiwgMjM1LCAyMywgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTkzLCAxMSwgCi0gICAgMjMsIDYsIDIzMCwgMjUsIDExLCAyMywgNiwgNzYsIDExLCAyMywgNiwgMjI2LCAxMDUsIDExLCAyMywgNiwgMjI0LCA5NiwgCi0gICAgMTEsIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MSwgMTEsIDIzLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCA2LCA3MCwgCi0gICAgMTEsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIAotICAgIDIxMSwgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgCi0gICAgMjMsIDQsIDI1MSwgNjYsIDExLCAyMywgNCwgMjQ5LCA2MCwgMTEsIDIzLCA0LCA3NSwgMTEsIDIzLCA0LCAyNDUsIDYsIDExLCAKLSAgICAyMywgNCwgMjQzLCAyMDIsIDExLCAyMywgNCwgMjQyLCA2MCwgMTEsIDIzLCA0LCA3MywgMTEsIDIzLCA0LCAyMzUsIDE0NCwgCi0gICAgMTEsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDQsIDE1NiwgMTEsIDIzLCA0LCAxOTMsIDExLCAyMywgNCwgMjMwLCAyNSwgCi0gICAgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDQsIDE1MywgCi0gICAgMTEsIDIzLCA0LCAyMjIsIDkxLCAxMSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDQsIDcwLCAxMSwgMjMsIDQsIDIxNCwgCi0gICAgMTA1LCAxMSwgMjMsIDQsIDIxMiwgOTgsIDExLCAyMywgNCwgMjExLCAxNzgsIDExLCAyMywgNCwgMjExLCAxMTcsIDExLCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzMiwgNiwgNjEsIDExLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzMiwgNiwgMjUxLCA2NiwgCi0gICAgMTEsIDMyLCA2LCAyNDksIDYwLCAxMSwgMzIsIDYsIDc1LCAxMSwgMzIsIDYsIDI0NSwgNiwgMTEsIDMyLCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzIsIDYsIDczLCAxMSwgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzIsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzMiwgNiwgMTU2LCAxMSwgMzIsIDYsIDE5MywgMTEsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzIsIDYsIAotICAgIDc2LCAxMSwgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzIsIDYsIDIyNCwgOTYsIDExLCAzMiwgNiwgMTUzLCAxMSwgMzIsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAzMiwgNiwgNzAsIDExLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzMiwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDMyLCA2LCAyMTEsIDExNywgMTEsIDMyLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDMyLCA0LCA2MSwgMTEsIDMyLCA0LCAyNTMsIDE1OCwgMTEsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzIsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzMiwgNCwgNzUsIDExLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzIsIAotICAgIDQsIDczLCAxMSwgMzIsIDQsIDIzNSwgMTQ0LCAxMSwgMzIsIDQsIDIzNSwgMjMsIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIAotICAgIDQsIDE5MywgMTEsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzIsIDQsIDc2LCAxMSwgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzIsIAotICAgIDQsIDIyNCwgOTYsIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTEsIDExLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAKLSAgICAzMiwgNCwgNzAsIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgCi0gICAgMTEsIDMyLCA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA2LCAyNDksIDYwLCAxMSwgMjMsIDMyLCAKLSAgICA2LCA3NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNiwgNzMsIDExLCAyMywgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIAotICAgIDIzLCAxMSwgMjMsIDMyLCA2LCAxNTYsIDExLCAyMywgMzIsIDYsIDE5MywgMTEsIDIzLCAzMiwgNiwgMjMwLCAyNSwgMTEsIAotICAgIDIzLCAzMiwgNiwgNzYsIDExLCAyMywgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMjMsIAotICAgIDMyLCA2LCAxNTMsIDExLCAyMywgMzIsIDYsIDIyMiwgOTEsIDExLCAyMywgMzIsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDMyLCAKLSAgICA2LCA3MCwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAyMywgMzIsIDYsIAotICAgIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAyMywgMzIsIAotICAgIDQsIDYxLCAxMSwgMjMsIDMyLCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDIzLCAzMiwgNCwgNzUsIDExLCAyMywgMzIsIDQsIDI0NSwgNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAKLSAgICAyMDIsIDExLCAyMywgMzIsIDQsIDI0MiwgNjAsIDExLCAyMywgMzIsIDQsIDczLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE0NCwgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjM1LCAyMywgMTEsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMjMsIDMyLCA0LCAxOTMsIDExLCAyMywgCi0gICAgMzIsIDQsIDIzMCwgMjUsIDExLCAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMTcsIDE1MiwgMTEsIDIzLCAzMiwgNCwgNzAsIDExLCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA0LCAyMTIsIAotICAgIDk4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAyMywgMzIsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMTE5LCA2LCA2MSwgMTEsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDExOSwgNiwgMjQ5LCA2MCwgMTEsIDExOSwgCi0gICAgNiwgMjQzLCAyMDIsIDExLCAxMTksIDYsIDIzNSwgMTQ0LCAxMSwgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMTE5LCA2LCAyMzAsIAotICAgIDI1LCAxMSwgMTE5LCA2LCA3NiwgMTEsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAxMTksIDYsIDIyNCwgOTYsIDExLCAxMTksIAotICAgIDYsIDIyMiwgOTEsIDExLCAxMTksIDYsIDIxNywgMTUyLCAxMSwgMTE5LCA2LCA3MCwgMTEsIDExOSwgNiwgMjE0LCAxMDUsIAotICAgIDExLCAxMTksIDYsIDIxMiwgOTgsIDExLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMTE5LCA2LCAyMTEsIDExNywgMTEsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAxMTksIDQsIDYxLCAxMSwgMTE5LCA0LCAyNTMsIDE1OCwgMTEsIDExOSwgNCwgMjUxLCA2NiwgCi0gICAgMTEsIDExOSwgNCwgMjQ5LCA2MCwgMTEsIDExOSwgNCwgMjQ1LCA2LCAxMSwgMTE5LCA0LCAyNDIsIDYwLCAxMSwgMTE5LCA0LCAKLSAgICA3MywgMTEsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAxMTksIDQsIDIzNSwgMjMsIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgCi0gICAgNCwgMTkzLCAxMSwgMTE5LCA0LCAyMzAsIDI1LCAxMSwgMTE5LCA0LCAyMjYsIDEwNSwgMTEsIDExOSwgNCwgMjI0LCA5NiwgCi0gICAgMTEsIDExOSwgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkxLCAxMSwgMTE5LCA0LCAyMTcsIDE1MiwgMTEsIDExOSwgNCwgCi0gICAgNzAsIDExLCAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIAotICAgIDExOSwgNCwgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyNTMsIDE1OCwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNjYsIDExLCAyMywgMTE5LCA2LCAyNDksIDYwLCAxMSwgMjMsIAotICAgIDExOSwgNiwgNzUsIDExLCAyMywgMTE5LCA2LCAyNDUsIDYsIDExLCAyMywgMTE5LCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDI0MiwgNjAsIDExLCAyMywgMTE5LCA2LCA3MywgMTEsIDIzLCAxMTksIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjM1LCAyMywgMTEsIDIzLCAxMTksIDYsIDE1NiwgMTEsIDIzLCAxMTksIDYsIDE5MywgMTEsIDIzLCAxMTksIAotICAgIDYsIDIzMCwgMjUsIDExLCAyMywgMTE5LCA2LCA3NiwgMTEsIDIzLCAxMTksIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjI0LCA5NiwgMTEsIDIzLCAxMTksIDYsIDE1MywgMTEsIDIzLCAxMTksIDYsIDIyMiwgOTEsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMTcsIDE1MiwgMTEsIDIzLCAxMTksIDYsIDcwLCAxMSwgMjMsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMTIsIDk4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxNzgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIAotICAgIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNCwgNjEsIDExLCAyMywgMTE5LCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDI1MSwgNjYsIDExLCAyMywgMTE5LCA0LCAyNDksIDYwLCAxMSwgMjMsIDExOSwgNCwgNzUsIDExLCAyMywgMTE5LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMywgMTE5LCA0LCAyNDMsIDIwMiwgMTEsIDIzLCAxMTksIDQsIDI0MiwgNjAsIDExLCAyMywgMTE5LCAKLSAgICA0LCA3MywgMTEsIDIzLCAxMTksIDQsIDIzNSwgMTQ0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAyMywgMTEsIDIzLCAxMTksIDQsIAotICAgIDE1NiwgMTEsIDIzLCAxMTksIDQsIDE5MywgMTEsIDIzLCAxMTksIDQsIDIzMCwgMjUsIDExLCAyMywgMTE5LCA0LCA3NiwgCi0gICAgMTEsIDIzLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDExOSwgNCwgMjI0LCA5NiwgMTEsIDIzLCAxMTksIDQsIDE1MywgCi0gICAgMTEsIDIzLCAxMTksIDQsIDIyMiwgOTEsIDExLCAyMywgMTE5LCA0LCAyMTcsIDE1MiwgMTEsIDIzLCAxMTksIDQsIDcwLCAKKyAgICAxMiwgMTMsIDIyMywgMTkzLCAxMiwgMTMsIDIyMywgMTkyLCAxMiwgMTMsIDIyMiwgOTAsIDEyLCAxMywgMjIyLCA4OSwgMTIsIAorICAgIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIDEzLCAyMjIsIDg1LCAxMiwgMTMsIAorICAgIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIDIyMiwgODEsIDEyLCAxMywgMjIyLCAKKyAgICA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCA3NywgMTIsIDEzLCAyMjIsIDc2LCAKKyAgICAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAxMiwgMTMsIDIyMiwgNzIsIDEyLCAKKyAgICAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAxMywgMjIyLCA2OCwgMTIsIDEzLCAKKyAgICAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgCisgICAgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgNjAsIDEyLCAxMywgMjIyLCA1OSwgCisgICAgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgMTIsIDEzLCAyMjIsIDU1LCAxMiwgCisgICAgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgMTMsIDIyMiwgNTEsIDEyLCAxMywgCisgICAgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgMjIyLCA0NywgMTIsIDEzLCAyMjIsIAorICAgIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIDQzLCAxMiwgMTMsIDIyMiwgNDIsIAorICAgIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIDEyLCAxMywgMjIyLCAzOCwgMTIsIAorICAgIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIxNywgMTUxLCAxMiwgMTMsIDIxNywgMTUwLCAxMiwgMTMsIDIxNywgMTQ5LCAxMiwgCisgICAgMTMsIDIxNywgMTQ4LCAxMiwgMTMsIDIxNywgMTQ3LCAxMiwgMTMsIDIxNywgMTQ2LCAxMiwgMTMsIDIxNywgMTQ1LCAxMiwgCisgICAgMTMsIDIxNywgMTQ0LCAxMiwgMTMsIDIxNywgMTQzLCAxMiwgMTMsIDIxNywgMTQyLCAxMiwgMTMsIDIxNywgMTQxLCAxMiwgCisgICAgMTMsIDIxNywgMTQwLCAxMiwgMTMsIDIxNywgMTM5LCAxMiwgMTMsIDIxNywgMTM4LCAxMiwgMTMsIDIxNywgMTM3LCAxMiwgCisgICAgMTMsIDIxNywgMTM2LCAxMiwgMTMsIDIxNywgMTM1LCAxMiwgMTMsIDIxNywgMTM0LCAxMiwgMTMsIDIxNywgMTMzLCAxMiwgCisgICAgMTMsIDIxNywgMTMyLCAxMiwgMTMsIDIxNywgMTMxLCAxMiwgMTMsIDIxNywgMTMwLCAxMiwgMTMsIDIxNywgMTI5LCAxMiwgCisgICAgMTMsIDIxNywgMTI4LCAxMiwgMTMsIDIxNywgMTI3LCAxMiwgMTMsIDIxNywgMTI2LCAxMiwgMTMsIDIxNywgMTI1LCAxMiwgCisgICAgMTMsIDIxNywgMTI0LCAxMiwgMTMsIDIxNywgMTIzLCAxMiwgMTMsIDIxNywgMTIyLCAxMiwgMTMsIDIxNywgMTIxLCAxMiwgCisgICAgMTMsIDIxNywgMTIwLCAxMiwgMTMsIDIxNywgMTE5LCAxMiwgMTMsIDIxNywgMTE4LCAxMiwgMTMsIDIxNywgMTE3LCAxMiwgCisgICAgMTMsIDIxNywgMTE2LCAxMiwgMTMsIDIxNywgMTE1LCAxMiwgMTMsIDIxNywgMTE0LCAxMiwgMTMsIDIxNywgMTEzLCAxMiwgCisgICAgMTMsIDIxNywgMTEyLCAxMiwgMTMsIDIxNywgMTExLCAxMiwgMTMsIDIxNywgMTEwLCAxMiwgMTMsIDIxNywgMTA5LCAxMiwgCisgICAgMTMsIDIxNywgMTA4LCAxMiwgMTMsIDIxNSwgMjIsIDEyLCAxMywgMjE1LCAyMSwgMTIsIDEzLCAyMTUsIDIwLCAxMiwgMTMsIAorICAgIDIxNSwgMTksIDEyLCAxMywgMjE1LCAxOCwgMTIsIDEzLCAyMTUsIDE3LCAxMiwgMTMsIDIxNSwgMTYsIDEyLCAxMywgMjE1LCAKKyAgICAxNSwgMTIsIDEzLCAyMTUsIDE0LCAxMiwgMTMsIDIxNSwgMTMsIDEyLCAxMywgMjE1LCAxMiwgMTIsIDEzLCAyMTUsIDExLCAKKyAgICAxMiwgMTMsIDIxNSwgMTAsIDEyLCAxMywgMjE1LCA5LCAxMiwgMTMsIDIxNSwgOCwgMTIsIDEzLCAyMTUsIDcsIDEyLCAxMywgCisgICAgMjE1LCA2LCAxMiwgMTMsIDIxNSwgNSwgMTIsIDEzLCAyMTUsIDQsIDEyLCAxMywgMjE1LCAzLCAxMiwgMTMsIDIxNSwgMiwgCisgICAgMTIsIDEzLCAyMTUsIDEsIDEyLCAxMywgMjE1LCAwLCAxMiwgMTMsIDIxNCwgMjU1LCAxMiwgMTMsIDIxNCwgMjU0LCAxMiwgCisgICAgMTMsIDIxNCwgMjUzLCAxMiwgMTMsIDIxNCwgMjUyLCAxMiwgMTMsIDIxNCwgMjUxLCAxMiwgMTMsIDIxNCwgMjUwLCAxMiwgCisgICAgMTMsIDIxNCwgMjQ5LCAxMiwgMTMsIDIxNCwgMjQ4LCAxMiwgMTMsIDIxNCwgMjQ3LCAxMiwgMTMsIDIxNCwgMjQ2LCAxMiwgCisgICAgMTMsIDIxNCwgMjQ1LCAxMiwgMTMsIDIxNCwgMjQ0LCAxMiwgMTMsIDIxNCwgMjQzLCAxMiwgMTMsIDIxNCwgMjQyLCAxMiwgCisgICAgMTMsIDIxNCwgMjQxLCAxMiwgMTMsIDIxNCwgMjQwLCAxMiwgMTMsIDIxNCwgMjM5LCAxMiwgMTMsIDIxNCwgMjM4LCAxMiwgCisgICAgMTMsIDIxNCwgMjM3LCAxMiwgMTMsIDIxNCwgMjM2LCAxMiwgMTMsIDIxNCwgMjM1LCAxMiwgMTMsIDIxNCwgMjM0LCAxMiwgCisgICAgMTMsIDIxNCwgMjMzLCAxMiwgMTMsIDIxNCwgMjMyLCAxMiwgMTMsIDIxNCwgMTA0LCAxMiwgMTMsIDIxNCwgMTAzLCAxMiwgCisgICAgMTMsIDIxNCwgMTAyLCAxMiwgMTMsIDIxNCwgMTAxLCAxMiwgMTMsIDIxNCwgMTAwLCAxMiwgMTMsIDIxNCwgOTksIDEyLCAKKyAgICAxMywgMjE0LCA5OCwgMTIsIDEzLCAyMTQsIDk3LCAxMiwgMTMsIDIxNCwgOTYsIDEyLCAxMywgMjE0LCA5NSwgMTIsIDEzLCAKKyAgICAyMTQsIDk0LCAxMiwgMTMsIDIxNCwgOTMsIDEyLCAxMywgMjE0LCA5MiwgMTIsIDEzLCAyMTQsIDkxLCAxMiwgMTMsIDIxNCwgCisgICAgOTAsIDEyLCAxMywgMjE0LCA4OSwgMTIsIDEzLCAyMTQsIDg4LCAxMiwgMTMsIDIxNCwgODcsIDEyLCAxMywgMjE0LCA4NiwgCisgICAgMTIsIDEzLCAyMTQsIDg1LCAxMiwgMTMsIDIxNCwgODQsIDEyLCAxMywgMjE0LCA4MywgMTIsIDEzLCAyMTQsIDgyLCAxMiwgCisgICAgMTMsIDIxNCwgODEsIDEyLCAxMywgMjE0LCA4MCwgMTIsIDEzLCAyMTQsIDc5LCAxMiwgMTMsIDIxNCwgNzgsIDEyLCAxMywgCisgICAgMjE0LCA3NywgMTIsIDEzLCAyMTQsIDc2LCAxMiwgMTMsIDIxNCwgNzUsIDEyLCAxMywgMjE0LCA3NCwgMTIsIDEzLCAyMTQsIAorICAgIDczLCAxMiwgMTMsIDIxNCwgNzIsIDEyLCAxMywgMjE0LCA3MSwgMTIsIDEzLCAyMTQsIDcwLCAxMiwgMTMsIDIxNCwgNjksIAorICAgIDEyLCAxMywgMjE0LCA2OCwgMTIsIDEzLCAyMTQsIDY3LCAxMiwgMTMsIDIxNCwgNjYsIDEyLCAxMywgMjE0LCA2NSwgMTIsIAorICAgIDEzLCAyMTQsIDY0LCAxMiwgMTMsIDIxNCwgNjMsIDEyLCAxMywgMjE0LCA2MiwgMTIsIDEzLCAyMTQsIDYxLCAxMiwgMTMsIAorICAgIDIxNCwgNjAsIDEyLCAxMywgMjE0LCA1OSwgMTIsIDEzLCAyMTQsIDU4LCAxMiwgMTMsIDIxNCwgNTcsIDEyLCAxMywgMjE0LCAKKyAgICA1NiwgMTIsIDEzLCAyMTQsIDU1LCAxMiwgMTMsIDIxNCwgNTQsIDEyLCAxMywgMjE0LCA1MywgMTIsIDEzLCAyMTQsIDUyLCAKKyAgICAxMiwgMTMsIDIxNCwgNTEsIDEyLCAxMywgMjE0LCA1MCwgMTIsIDEzLCAyMTQsIDQ5LCAxMiwgMTMsIDIxNCwgNDgsIDEyLCAKKyAgICAxMywgMjE0LCA0NywgMTIsIDEzLCAyMTQsIDQ2LCAxMiwgMTMsIDIxNCwgNDUsIDEyLCAxMywgMjE0LCA0NCwgMTIsIDEzLCAKKyAgICAyMTQsIDQzLCAxMiwgMTMsIDIxNCwgNDIsIDEyLCAxMywgMjE0LCA0MSwgMTIsIDEzLCAyMTQsIDQwLCAxMiwgMTMsIDIxNCwgCisgICAgMzksIDEyLCAxMywgMjE0LCAzOCwgMTIsIDEzLCAyMTQsIDM3LCAxMiwgMTMsIDIxNCwgMzYsIDEyLCAxMywgMjE0LCAzNSwgCisgICAgMTIsIDEzLCAyMTQsIDM0LCAxMiwgMTMsIDIxNCwgMzMsIDEyLCAxMywgMjE0LCAzMiwgMTIsIDEzLCAyMTQsIDMxLCAxMiwgCisgICAgMTMsIDIxNCwgMzAsIDEyLCAxMywgMjE0LCAyOSwgMTIsIDEzLCAyMTQsIDI4LCAxMiwgMTMsIDIxMiwgOTcsIDEyLCAxMywgCisgICAgMjEyLCA5NiwgMTIsIDEzLCAyMTIsIDk1LCAxMiwgMTMsIDIxMiwgOTQsIDEyLCAxMywgMjEyLCA5MywgMTIsIDEzLCAyMTIsIAorICAgIDkyLCAxMiwgMTMsIDIxMiwgOTEsIDEyLCAxMywgMjEyLCA5MCwgMTIsIDEzLCAyMTIsIDg5LCAxMiwgMTMsIDIxMiwgODgsIAorICAgIDEyLCAxMywgMjEyLCA4NywgMTIsIDEzLCAyMTIsIDg2LCAxMiwgMTMsIDIxMiwgODUsIDEyLCAxMywgMjEyLCA4NCwgMTIsIAorICAgIDEzLCAyMTIsIDgzLCAxMiwgMTMsIDIxMiwgODIsIDEyLCAxMywgMjEyLCA4MSwgMTIsIDEzLCAyMTIsIDgwLCAxMiwgMTMsIAorICAgIDIxMiwgNzksIDEyLCAxMywgMjEyLCA3OCwgMTIsIDEzLCAyMTIsIDc3LCAxMiwgMTMsIDIxMiwgNzYsIDEyLCAxMywgMjEyLCAKKyAgICA3NSwgMTIsIDEzLCAyMTIsIDc0LCAxMiwgMTMsIDIxMiwgNzMsIDEyLCAxMywgMjEyLCA3MiwgMTIsIDEzLCAyMTIsIDcxLCAKKyAgICAxMiwgMTMsIDIxMiwgNzAsIDEyLCAxMywgMjEyLCA2OSwgMTIsIDEzLCAyMTIsIDY4LCAxMiwgMTMsIDIxMiwgNjcsIDEyLCAKKyAgICAxMywgMjEyLCA2NiwgMTIsIDEzLCAyMTEsIDE3NywgMTIsIDEzLCAyMTEsIDE3NiwgMTIsIDEzLCAyMTEsIDE3NSwgMTIsIAorICAgIDEzLCAyMTEsIDE3NCwgMTIsIDEzLCAyMTEsIDE3MywgMTIsIDEzLCAyMTEsIDE3MiwgMTIsIDEzLCAyMTEsIDE3MSwgMTIsIAorICAgIDEzLCAyMTEsIDE3MCwgMTIsIDEzLCAyMTEsIDE2OSwgMTIsIDEzLCAyMTEsIDE2OCwgMTIsIDEzLCAyMTEsIDE2NywgMTIsIAorICAgIDEzLCAyMTEsIDE2NiwgMTIsIDEzLCAyMTEsIDExNSwgMTIsIDEzLCAyMTEsIDExNCwgMTIsIDEzLCAyMTEsIDExMywgMTIsIAorICAgIDEzLCAyMTEsIDExMiwgMTIsIDEzLCAyMTEsIDExMSwgMTIsIDEzLCAyMTEsIDExMCwgMTIsIDEzLCAyMTEsIDEwOSwgMTIsIAorICAgIDEzLCAyMTEsIDEwOCwgMTIsIDEzLCAyMTEsIDEwNywgMTIsIDEzLCAyMTAsIDE1OCwgMTIsIDEzLCAyMTAsIDE1NywgMTIsIAorICAgIDEzLCAyMTAsIDE1NiwgMTIsIDEzLCAyMTAsIDE1NSwgMTIsIDEzLCAyMTAsIDE1NCwgMTIsIDEzLCAyMTAsIDE1MywgMTIsIAorICAgIDEzLCAyMTAsIDE1MiwgMTIsIDEzLCAyMTAsIDE1MSwgMTIsIDEzLCAyMTAsIDE1MCwgMTIsIDEzLCAyMTAsIDE0OSwgMTIsIAorICAgIDEzLCAyMTAsIDE0OCwgMTIsIDEzLCAyMTAsIDE0NywgMTIsIDEzLCAyMTAsIDE0NiwgMTIsIDEzLCAyMTAsIDE0NSwgMTIsIAorICAgIDEzLCAyMTAsIDE0NCwgMTIsIDEzLCAyMTAsIDE0MywgMTIsIDEzLCAyMTAsIDE0MiwgMTIsIDEzLCAyMTAsIDE0MSwgMTIsIAorICAgIDEzLCAyMTAsIDE0MCwgMTIsIDEzLCAyMTAsIDEzOSwgMTIsIDEzLCAyMTAsIDEzOCwgMTIsIDEzLCAyMTAsIDEzNywgMTIsIAorICAgIDEzLCAyMTAsIDEzNiwgMTIsIDEzLCAyMTAsIDEzNSwgMTIsIDEzLCAyMTAsIDEzNCwgMTIsIDEzLCAyMTAsIDEzMywgMTIsIAorICAgIDEzLCAyMTAsIDEzMiwgMTIsIDEzLCAyMTAsIDEzMSwgMTIsIDEzLCAyMTAsIDEzMCwgMTIsIDEzLCAyMTAsIDEyOSwgMTIsIAorICAgIDEzLCAyMTAsIDEyOCwgMTIsIDEzLCAyMTAsIDEyNywgMTIsIDEzLCAyMTAsIDEyNiwgMTIsIDEzLCAyMTAsIDEyNSwgMTIsIAorICAgIDEzLCAyMTAsIDEyNCwgMTIsIDEzLCAyMTAsIDEyMywgMTIsIDEzLCAyMTAsIDEyMiwgMTIsIDEzLCAyMTAsIDEyMSwgMTIsIAorICAgIDEzLCAyMTAsIDEyMCwgMTIsIDEzLCAyMTAsIDExOSwgMTIsIDEzLCAyMTAsIDExOCwgMTIsIDEzLCAyNTUsIDgxLCAxMiwgCisgICAgMTMsIDI1NSwgODAsIDEyLCAxMywgMjU1LCA3OSwgMTIsIDEzLCAyNTUsIDc4LCAxMiwgMTMsIDI1NSwgNzcsIDEyLCAxMywgCisgICAgMjU1LCA3NiwgMTIsIDEzLCAyNTUsIDc1LCAxMiwgMTMsIDI1NSwgNzQsIDEyLCAxMywgMjU1LCA3MywgMTIsIDEzLCAyNTUsIAorICAgIDcyLCAxMiwgMTMsIDI1NSwgNzEsIDEyLCAxMywgMjU1LCA3MCwgMTIsIDEzLCAyNTUsIDY5LCAxMiwgMTMsIDI1NSwgNjgsIAorICAgIDEyLCAxMywgMjU1LCA2NywgMTIsIDEzLCAyNTUsIDY2LCAxMiwgMTMsIDI1NSwgNjUsIDEyLCAxMywgMjU1LCA2NCwgMTIsIAorICAgIDEzLCAyNTUsIDYzLCAxMiwgMTMsIDI1NSwgNjIsIDEyLCAxMywgMjU1LCA2MSwgMTIsIDEzLCAyNTUsIDYwLCAxMiwgMTMsIAorICAgIDI1NSwgNTksIDEyLCAxMywgMjU1LCA1OCwgMTIsIDEzLCAyNTUsIDU3LCAxMiwgMTMsIDI1NSwgNTYsIDEyLCAxMywgMjU1LCAKKyAgICA1NSwgMTIsIDEzLCAyNTUsIDU0LCAxMiwgMTMsIDI1NSwgNTMsIDEyLCAxMywgMjU1LCA1MiwgMTIsIDEzLCAyNTUsIDUxLCAKKyAgICAxMiwgMTMsIDI1NSwgNTAsIDEyLCAxMywgMjU1LCA0OSwgMTIsIDEzLCAyNTUsIDQ4LCAyMCwgMSwgMTY3LCAyMjksIDE3LCAKKyAgICAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyNDMsIDc3LCAyNDQsIDQ0LCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgCisgICAgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIzMSwgMjIsIDIyNSwgNjEsIDIwLCAxLCAxNjcsIDIyOSwgMjMxLCAKKyAgICAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyMTksIDIyMywgMjAsIDEsIDE2NywgMjE2LCA2NywgMjMxLCAyMSwgMjAsIDEsIDE2NywgCisgICAgMjI3LCAxMjIsIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIyMCwgMjEsIDIyNiwgOTQsIDIyOCwgMTc0LCAyMCwgMSwgMTY3LCAKKyAgICAyMjQsIDI1NCwgMjI2LCA5NCwgMjI4LCAxNzUsIDIyNSwgNjAsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIAorICAgIDE3NSwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjMxLCAyMjMsIDIwLCAxLCAxNjcsIDIxNSwgMTIwLCAyMzEsIDIyNCwgMjAsIAorICAgIDEsIDE2NywgMjI5LCA3NiwgMjAsIDEsIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIzMSwgMTgxLCAyMCwgMSwgMTY3LCAKKyAgICAyMzAsIDUzLCAyMCwgMSwgMTY3LCAyMjAsIDEyNiwgMjAsIDEsIDE2NywgMjI3LCAyNDYsIDIwLCAxLCAxNjcsIDIzNCwgCisgICAgMTU1LCAyMCwgMSwgMTY3LCAyMjgsIDE0MywgMjAsIDEsIDE2NywgMjE4LCA1LCAyMCwgMSwgMTY3LCAyMjksIDE2LCAyMCwgCisgICAgMSwgMTY3LCAyMzMsIDkzLCAyMCwgMSwgMTY3LCAyMzMsIDE4LCAyMzMsIDE5NSwgMjAsIDEsIDE2NywgMjI3LCAyNTMsIAorICAgIDIzMSwgMjksIDIwLCAxLCAxNjcsIDIzMSwgMjI3LCAyMCwgMSwgMTY3LCAyMjUsIDI1MCwgMjAsIDEsIDE2NywgMjQyLCAKKyAgICAyMzgsIDIwLCAxLCAxNjcsIDIyNiwgNTQsIDIwLCAxLCAxNjcsIDIzMCwgMTU2LCAyMjksIDUwLCAyMCwgMSwgMTY3LCAyMjcsIAorICAgIDEwMywgMjMxLCAzMiwgMjAsIDEsIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjUsIDIwLCAxLCAxNjcsIDI0MiwgMjM5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjcsIDI1MywgMjI3LCAyNTQsIDIwLCAxLCAxNjcsIDIxOSwgMTMwLCAyMCwgMSwgMTY3LCAyMzEsIAorICAgIDE0LCAyMCwgMSwgMTY3LCAyMzEsIDM1LCAyMCwgMSwgMTY3LCAyMzAsIDEzNSwgMjAsIDEsIDE2NywgMjM0LCAyNTUsIDIwLCAKKyAgICAxLCAxNjcsIDIyNiwgOTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyOSwgMTU0LCAyMzMsIDUzLCAyMCwgMSwgMTY3LCAyMjUsIAorICAgIDE2MSwgMjAsIDEsIDE2NywgMjMxLCAyMjEsIDIwLCAxLCAxNjcsIDIyOCwgMjEyLCAyMCwgMSwgMTY3LCAyMjQsIDEzNywgCisgICAgMjAsIDEsIDE2NywgMjE1LCAxMTcsIDIwLCAxLCAxNjcsIDIzMiwgOTksIDIwLCAxLCAxNjcsIDIxOSwgNDMsIDIwLCAxLCAKKyAgICAxNjcsIDIxNiwgMjE3LCAyMCwgMSwgMTY3LCAyMzEsIDIxOCwgMjAsIDEsIDE2NywgMjM0LCAxNjIsIDIwLCAxLCAxNjcsIAorICAgIDIyOSwgMTUwLCAyMCwgMSwgMTY3LCAyMzMsIDIwNywgMjAsIDEsIDE2NywgMjMwLCAxMzYsIDIwLCAxLCAxNjcsIDIxOSwgCisgICAgMjIwLCAyMCwgMSwgMTY3LCAyMzIsIDE0NCwgMjAsIDEsIDE2NywgMjQ0LCAxMDEsIDIwLCAxLCAxNjcsIDIyMiwgMjAxLCAKKyAgICAyMCwgMSwgMTY3LCAyMzMsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAzOSwgMjAsIDEsIDE2NywgMjMxLCAxNzgsIDIyNSwgCisgICAgMTAyLCAyMCwgMSwgMTY3LCAyMjAsIDE0LCAyMCwgMSwgMTY3LCAyMjcsIDI1MiwgMjAsIDEsIDE2NywgMjE5LCAyNTUsIAorICAgIDIyOCwgNywgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIDIyNywgMTQyLCAyMzAsIDE1MywgMjAsIDEsIDE2NywgMjI2LCA4OSwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxNDQsIDIwLCAxLCAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDUzLCAyMCwgMSwgCisgICAgMTY3LCAyMzEsIDIxNywgMjAsIDEsIDE2NywgMjI4LCAxODYsIDIwLCAxLCAxNjcsIDIzMSwgMTI0LCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDE1NSwgMjAsIDEsIDE2NywgMjE2LCAyMjEsIDIwLCAxLCAxNjcsIDIxOSwgMzYsIDIwLCAxLCAxNjcsIDIyNiwgOTAsIAorICAgIDIwLCAxLCAxNjcsIDIyOCwgMTEsIDIwLCAxLCAxNjcsIDIzMSwgMjI1LCAyMCwgMSwgMTY3LCAyMjcsIDE1MiwgMjAsIDEsIAorICAgIDE2NywgMjM0LCAyMjIsIDIwLCAxLCAxNjcsIDIyOCwgMTQsIDIwLCAxLCAxNjcsIDIxMywgMjUwLCAyMCwgMSwgMTY3LCAKKyAgICAyMzIsIDEwMywgMjAsIDEsIDE2NywgMjI5LCAxMDMsIDIwLCAxLCAxNjcsIDIyOSwgMjAxLCAyMCwgMSwgMTY3LCAyMzEsIAorICAgIDEyMywgMjAsIDEsIDIyNSwgMTQxLCAyMjgsIDksIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIzMSwgMjIyLCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIxOSwgMTg3LCAyMCwgMSwgMjI1LCAxNDEsIDIyMCwgMTMwLCAyMTUsIDExOSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzIsIDE0NiwgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMzAsIDIzMSwgMjI2LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzNCwgOTMsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCAxNSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEyNSwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzQsIDI0MywgMjAsIDEsIDIyNSwgMTQxLCAyMjUsIDIxMSwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDg5LCAyMzMsIAorICAgIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMywgMTA5LCAyMjgsIDcsIDIyNywgMTY0LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgCisgICAgMjQ3LCAyMjAsIDQwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMTIxLCAyMjgsIDE4OSwgMjAsIDEsIDIyNSwgMTQxLCAyNDIsIAorICAgIDIzNiwgMjAsIDEsIDIyNSwgMTQxLCAyMjUsIDUyLCAyMCwgMSwgMjI1LCAxNDEsIDIxNSwgMTIwLCAyMjgsIDUsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjIwLCA0NSwgMjI4LCAxODQsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCA0MSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzEsIDIyLCAyMTYsIDIyMCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDExMiwgMjMxLCAxMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI3LCAxNTMsIDIyNywgMjQ5LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTUxLCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgMjM3LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTQ3LCAyMCwgMSwgMjI1LCAxNDEsIDIzMywgMTM1LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIyNSwgMjUzLCAyMCwgMSwgMjI1LCAxNDEsIDIxMywgMTgyLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMTgsIDIzMCwgNTEsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA1MiwgMjMxLCAxMDgsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCAxOTMsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjIyLCAxMywgMjAsIDEsIDIyNSwgMTQxLCAyMTcsIDk4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzQsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAzNywgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM4LCAyMzMsIDkwLCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzMSwgMjQsIDIwLCAxLCAyMjUsIDE0MSwgMjE4LCA1MywgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDExNiwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMzAsIDEzOCwgMjAsIDEsIDIyNSwgMTQxLCAyMjcsIDE2NywgMjAsIDEsIDIyNSwgMTQxLCAyMjQsIDE0MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDMzLCAyMjksIDU0LCAyMCwgMSwgMjI1LCAxNDEsIDI0NCwgMTM0LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzMSwgMTAzLCAyMCwgMSwgMjI1LCAxNDEsIDI0NCwgMTU1LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTU5LCAyMCwgCisgICAgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE3OCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDI0NCwgMjI4LCAxNTQsIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMzLCAxNywgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgMTYsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMTg2LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgODAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDE3LCAyMzEsIDIyNCwgMjAsIDEsIDEzNywgMjI3LCAxMjEsIDIwLCAxLCAxMzcsIDIxMCwgCisgICAgMTk2LCAyMCwgMSwgMTM3LCAyMTIsIDUzLCAyMCwgMSwgMTM3LCAyMjksIDUzLCAyMCwgMSwgMTM3LCAyMjksIDE0MiwgMjAsIAorICAgIDEsIDEzNywgMjI5LCAyNCwgMjAsIDEsIDEzNywgMjQyLCAyNDYsIDIwLCAxLCAxMzcsIDIzMSwgMTIwLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDg0LCAyMCwgMSwgMTM3LCAyMjcsIDE0NCwgMjMwLCAxNzUsIDIzMSwgMzYsIDIwLCAxLCAxMzcsIDIyNywgMjQ1LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjMxLCAxMTcsIDIwLCAxLCAxMzcsIDIyNSwgNTgsIDIwLCAxLCAxMzcsIDIyOSwgCisgICAgMTI3LCAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjUxLCAzNywgMjAsIDEsIDEzNywgMjM0LCAxNDksIDIwLCAxLCAxMzcsIAorICAgIDI0MiwgMjQ3LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgMjEwLCAyMTMsIDIzMCwgODEsIDIwLCAxLCAKKyAgICAxMzcsIDIyNywgMTE1LCAyMCwgMSwgMTM3LCAyMzEsIDEwNSwgMjAsIDEsIDEzNywgMjI4LCAxNSwgMjAsIDEsIDEzNywgCisgICAgMjMxLCAxMTEsIDIwLCAxLCAxMzcsIDIxMSwgMTYsIDIwLCAxLCAxMzcsIDIzMywgMjU1LCAyMCwgMSwgMTM3LCAyMzUsIDE2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjAsIDEyNSwgMjAsIDEsIDEzNywgMjI5LCAxMzYsIDIwLCAxLCAxMzcsIDIxNywgOTYsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMTU4LCAyMCwgMSwgMTM3LCAyMTYsIDY3LCAyMTAsIDE5OCwgMjAsIDEsIDEzNywgMjE4LCA4MCwgMjAsIDEsIAorICAgIDEzNywgMjI5LCA0NCwgMjI3LCAxNjQsIDIwLCAxLCAxMzcsIDIxMywgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDIwNCwgMjAsIAorICAgIDEsIDEzNywgMjMxLCAyNDQsIDIzNCwgMTU4LCAyMCwgMSwgMTM3LCAyMjcsIDI1NCwgMjAsIDEsIDEzNywgMjI5LCAzOSwgCisgICAgMjAsIDEsIDEzNywgMjMzLCA5NCwgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIzMSwgMTMsIDIwLCAxLCAKKyAgICAxMzcsIDIyNywgMjQ4LCAyMCwgMSwgMTM3LCAyMTYsIDIxNiwgMjAsIDEsIDEzNywgMjI5LCA0MSwgMjAsIDEsIDEzNywgCisgICAgMjQzLCAyNDAsIDIwLCAxLCAxMzcsIDIyOSwgMTQxLCAyMCwgMSwgMTM3LCAyMjgsIDE3LCAyMCwgMSwgMTM3LCAyMjgsIDEzLCAKKyAgICAyMCwgMSwgMTM3LCAyNTEsIDExNSwgMjAsIDEsIDEzNywgMjEzLCAxODMsIDIwLCAxLCAxMzcsIDIzMSwgMTE4LCAyMCwgMSwgCisgICAgMTM3LCAyMjIsIDE0MiwgMjAsIDEsIDEzNywgMjI4LCAxODgsIDIwLCAxLCAxMzcsIDIzMywgMTA4LCAyMCwgMSwgMTM3LCAKKyAgICAyMTYsIDY1LCAyMCwgMSwgMTM3LCAyMjcsIDI1NSwgMjI5LCA2LCAyMCwgMSwgMTM3LCAyMjgsIDE4MCwgMjAsIDEsIDEzNywgCisgICAgMjM0LCAxNjIsIDIwLCAxLCAxMzcsIDIyOSwgNDUsIDIwLCAxLCAxMzcsIDIzMSwgMjE3LCAyMCwgMSwgMTM3LCAyMzEsIAorICAgIDEwNiwgMjAsIDEsIDEzNywgMjMyLCAxMDMsIDIwLCAxLCAxMzcsIDIzMywgMTk1LCAyMCwgMSwgMTM3LCAyMjgsIDE4NiwgCisgICAgMjAsIDEsIDEzNywgMjI5LCA2LCAyMCwgMSwgMTM3LCAyMTEsIDE4NCwgMjAsIDEsIDEzNywgMjI5LCA0MiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAyLCAyMCwgMSwgMTM3LCAyMjcsIDI1MCwgMjAsIDEsIDEzNywgMjMzLCAyMDksIDIyOCwgMTQ0LCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIyOSwgMTQ5LCAyMCwgMSwgMTM3LCAyMzEsIDI0NCwgMjI4LCA1LCAyMCwgMSwgCisgICAgMTM3LCAyMTEsIDEwMywgMjAsIDEsIDEzNywgMjI5LCAxNDgsIDIwLCAxLCAxMzcsIDIxOSwgMjIyLCAyMCwgMSwgMTM3LCAKKyAgICAyMjAsIDEyOCwgMjAsIDEsIDEzNywgMjMxLCAxMTQsIDIwLCAxLCAxMzcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMzEsIAorICAgIDEyNCwgMjAsIDEsIDEzNywgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIzMSwgMTE1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NCwgCisgICAgMjAsIDEsIDEzNywgMjMxLCAxMjgsIDIyNSwgMTA2LCAyMCwgMSwgMTM3LCAyMTAsIDE3OSwgMjAsIDEsIDEzNywgMjI4LCAKKyAgICAxNzYsIDIwLCAxLCAxMzcsIDIzMCwgMjI1LCAyMCwgMSwgMTM3LCAyMzAsIDEwNSwgMjAsIDEsIDEzNywgMjIwLCAxNywgMjAsIAorICAgIDEsIDEzNywgMjM0LCAxNzIsIDIzMywgNzYsIDIwLCAxLCAxMzcsIDIzNCwgMTcyLCAyNDQsIDE2OCwgMjAsIDEsIDEzNywgCisgICAgMjI5LCA3NCwgMjAsIDEsIDEzNywgMjI5LCAyMDEsIDIwLCAxLCAxMzcsIDIzMiwgMjA2LCAyMCwgMSwgMTM3LCAyMjUsIDY4LCAKKyAgICAyMCwgMSwgMTM3LCAyMjUsIDIwMiwgMjAsIDEsIDEzNywgMjE2LCAyMzEsIDIwLCAxLCAxMDcsIDIzMSwgMTA0LCAyMCwgMSwgCisgICAgMTA3LCAyMTIsIDUxLCAyMCwgMSwgMTA3LCAyMjgsIDE3NCwgMjAsIDEsIDEwNywgMjMxLCAyMSwgMjAsIDEsIDEwNywgMjI4LCAKKyAgICAxNzIsIDIwLCAxLCAxMDcsIDIzMiwgMjQxLCAyMCwgMSwgMTA3LCAyMjgsIDE3NywgMjAsIDEsIDEwNywgMjI4LCAxMiwgMjAsIAorICAgIDEsIDEwNywgMjI5LCA1OSwgMjAsIDEsIDEwNywgMjI3LCAxNjQsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjksIDE0LCAyMCwgMSwgMTA3LCAyMjAsIDYzLCAyMCwgMSwgMTA3LCAyMjksIDI1LCAyMCwgMSwgMTA3LCAyMzQsIDE1NywgCisgICAgMjAsIDEsIDEwNywgMjE2LCAyMTgsIDIwLCAxLCAxMDcsIDIyMCwgNDMsIDIwLCAxLCAxMDcsIDIyOCwgMTg1LCAyMCwgMSwgCisgICAgMTA3LCAyMTgsIDUzLCAyMCwgMSwgMTA3LCAyMzQsIDE2MiwgMjAsIDEsIDEwNywgMjExLCA5MSwgMjAsIDEsIDEwNywgMjMzLCAKKyAgICAyMTAsIDIwLCAxLCAxMDcsIDIyMSwgMjM2LCAyMCwgMSwgMTA3LCAyMzEsIDI2LCAyMCwgMSwgMTA3LCAyMjksIDE0MCwgMjAsIAorICAgIDEsIDEwNywgMjMxLCAxOTMsIDIwLCAxLCAxMDcsIDIzMSwgMzIsIDIwLCAxLCAxMDcsIDIyMCwgMTI3LCAyMCwgMSwgMTA3LCAKKyAgICAyMTEsIDM5LCAyMCwgMSwgMTA3LCAyMjgsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTMsIDIzMSwgMTA3LCAyMCwgMSwgCisgICAgMTA3LCAyMjksIDIxLCAyMCwgMSwgMTA3LCAyMTUsIDExOSwgMjAsIDEsIDEwNywgMjQyLCAyNTUsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTEsIDIwLCAxLCAxMDcsIDI0NCwgMTM1LCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjMxLCA1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzMsIDExLCAyMCwgMSwgMTA3LCAyMjksIDEyNiwgMjAsIDEsIDEwNywgMjMwLCAxNTIsIDIwLCAxLCAKKyAgICAxMDcsIDIzMSwgOSwgMjAsIDEsIDEwNywgMjI0LCAxMjEsIDIwLCAxLCAxMDcsIDIzMSwgNywgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAyMywgMjAsIDEsIDEwNywgMjMyLCA4OSwgMjAsIDEsIDEwNywgMjI4LCA0LCAyMCwgMSwgMTA3LCAyMzEsIDEyNywgMjAsIDEsIAorICAgIDEwNywgMjMzLCAxODYsIDIwLCAxLCAxMDcsIDIyNywgMTU1LCAyMCwgMSwgMTA3LCAyMTYsIDIyMSwgMjAsIDEsIDEwNywgCisgICAgMjE5LCAzNiwgMjAsIDEsIDEwNywgMjEwLCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTU0LCAyMCwgMSwgMTA3LCAyMjMsIAorICAgIDE3MywgMjAsIDEsIDEwNywgMjE3LCAxMSwgMjAsIDEsIDEwNywgMjI5LCAyMiwgMjAsIDEsIDEwNywgMjMxLCAyOCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCAzLCAyMCwgMSwgMTA3LCAyMzQsIDE1MiwgMjAsIDEsIDEwNywgMjI1LCA2MiwgMjAsIDEsIDEwNywgCisgICAgMjI1LCAxNTUsIDIwLCAxLCAxMDcsIDIyNywgMTMxLCAyMCwgMSwgMTA3LCAyMzMsIDE3LCAyMCwgMSwgMTA3LCAyMjksIDYwLCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDI1LCAyMCwgMSwgMTA3LCAyMjksIDM0LCAyMCwgMSwgMTA3LCAyMTAsIDE5MywgMjAsIDEsIAorICAgIDEwNywgMjI2LCAyNSwgMjAsIDEsIDEwNywgMjEwLCAxOTIsIDIwLCAxLCAxMDcsIDIyOSwgMTQ5LCAyMCwgMSwgMTA3LCAKKyAgICAyMjcsIDI0OSwgMjAsIDEsIDEwNywgMjE4LCA4MiwgMjAsIDEsIDEwNywgMjMzLCAyMTQsIDIwLCAxLCAxMDcsIDIyOSwgNDksIAorICAgIDIwLCAxLCAxMDcsIDIyOSwgMTksIDIwLCAxLCAxMDcsIDIxNSwgMTAzLCAyMCwgMSwgMTA3LCAyMzEsIDM2LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgMSwgMTA3LCAyMTYsIDIxOSwgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAyMTksIDIwLCAxLCAxMDcsIDIyOSwgNTgsIDIwLCAxLCAxMDcsIDIzMywgMTAsIDIwLCAxLCAxMDcsIDIyOSwgNDAsIDIwLCAKKyAgICAxLCAxMDcsIDIyOCwgNiwgMjAsIDEsIDEwNywgMjI4LCAxNTgsIDIwLCAxLCAxMDcsIDI0MiwgMjQwLCAyMCwgMSwgMTA3LCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDEwNywgMjIzLCA4NywgMjI2LCAyMTMsIDIwLCAxLCAxMDcsIDIxNywgODcsIDIwLCAxLCAxMDcsIAorICAgIDIxNiwgMTEsIDIwLCAxLCAxMDcsIDIyNywgMTUyLCAyMCwgMSwgMTA3LCAyMjIsIDI0MiwgMjAsIDEsIDEwNywgMjMzLCA1NSwgCisgICAgMjAsIDEsIDEwNywgMjMxLCA4NCwgMjAsIDEsIDEwNywgMTk0LCAyMCwgMSwgMTA3LCAyMTgsIDUsIDIwLCAxLCAxMDcsIAorICAgIDIzMCwgMTA3LCAyMCwgMSwgMTA3LCAyMjAsIDI5LCAyMCwgMSwgMTA3LCAyMjAsIDM5LCAyMCwgMSwgMTA3LCAyMzMsIDE2MSwgCisgICAgMjAsIDEsIDEwNywgMjI3LCAyNDIsIDIwLCAxLCAxMDcsIDIxOSwgMjI3LCAyMCwgMSwgMTA3LCAyMjcsIDI1MSwgMjAsIDEsIAorICAgIDEwNywgMjI1LCAyMTQsIDIwLCAxLCAxMDcsIDIyOCwgMjM4LCAyMCwgMSwgMTA3LCAyMTksIDI1NCwgMjAsIDEsIDEwNywgCisgICAgMjI0LCAxMzYsIDIwLCAxLCAxMDcsIDIzMCwgNTEsIDIwLCAxLCAxMDcsIDIzMiwgMTI1LCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAKKyAgICAyMzAsIDEwMSwgMjAsIDEsIDEwNywgMjE2LCAxMTgsIDIwLCAxLCAxMDcsIDIyNywgMjQzLCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDEyOCwgMTk5LCAyMCwgMSwgMTA3LCAyMjEsIDIzNCwgMjAsIDEsIDEwNywgMjQ0LCAyMDMsIDIwLCAxLCA4MiwgMjI5LCAKKyAgICAxNDgsIDIwLCAxLCA4MiwgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzEsIDExNywgMjAsIDEsIDgyLCAyMzMsIDk0LCAyMCwgMSwgCisgICAgODIsIDIxMywgMTI4LCAyMCwgMSwgODIsIDIzMiwgMTMxLCAyMCwgMSwgODIsIDIyNiwgOTMsIDIwLCAxLCA4MiwgMjE5LCAKKyAgICA0NywgMjAsIDEsIDgyLCAyMjMsIDE0OCwgMjAsIDEsIDgyLCAyMjgsIDgsIDIwLCAxLCA4MiwgMjI5LCAxMTksIDIwLCAxLCAKKyAgICA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA2MywgMjAsIDEsIDgyLCAyMjksIDI3LCAyMCwgMSwgODIsIDIzMywgCisgICAgMjUxLCAyMCwgMSwgODIsIDIxMSwgMTg3LCAyMCwgMSwgODIsIDIyMSwgMTcyLCAyMCwgMSwgODIsIDIyOSwgNTAsIDIwLCAxLCAKKyAgICA4MiwgMjI2LCA5MCwgMjAsIDEsIDgyLCAyMTYsIDE4LCAyMCwgMSwgODIsIDIzMywgMjA4LCAyMCwgMSwgODIsIDIzMiwgCisgICAgMTQ1LCAyMCwgMSwgODIsIDIyOCwgMTEsIDIwLCAxLCA4MiwgMjI5LCAzLCAyMCwgMSwgODIsIDIzMSwgMjI1LCAyMCwgMSwgCisgICAgODIsIDIyOSwgMjAsIDIwLCAxLCA4MiwgMjI5LCAyLCAyMCwgMSwgODIsIDIyOCwgMTAsIDIwLCAxLCA4MiwgMjIyLCAyNDAsIAorICAgIDIwLCAxLCA4MiwgMjI4LCAxNzYsIDIwLCAxLCA4MiwgMjI1LCAyMTMsIDIwLCAxLCA4MiwgMjIyLCAzMywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDM1LCAyMCwgMSwgODIsIDIzMSwgMTUsIDIwLCAxLCA4MiwgMjQyLCAyMzQsIDIwLCAxLCA4MiwgMjI5LCAyMywgMjAsIAorICAgIDEsIDgyLCAyMjgsIDE4NywgMjAsIDEsIDgyLCAyMzEsIDE3NywgMjAsIDEsIDgyLCAyMzIsIDEyNywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDU1LCAyMCwgMSwgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIxNywgODYsIDIyNywgMjQ5LCAyMCwgMSwgODIsIAorICAgIDIyMCwgMTI5LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMTksIDUzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgNDMsIDIyNywgMTY0LCAyMCwgMSwgODIsIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIzNSwgMjAsIDEsIDgyLCAKKyAgICAyMTUsIDExOCwgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgMSwgODIsIDIyNSwgMTksIDIwLCAxLCA4MiwgMjE1LCAxMDgsIAorICAgIDIwLCAxLCA4MiwgMjM0LCAxNjAsIDIwLCAxLCA4MiwgMjE4LCA4MSwgMjAsIDEsIDgyLCAyMTYsIDIyMCwgMjAsIDEsIDgyLCAKKyAgICAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCA4MiwgMjMzLCAxMzgsIDIwLCAxLCA4MiwgMjI0LCAxNTMsIAorICAgIDIwLCAxLCA4MiwgMjE3LCA5NywgMjAsIDEsIDgyLCAyNDIsIDI1NCwgMjAsIDEsIDgyLCAyMjksIDY0LCAyMCwgMSwgODIsIAorICAgIDIyMCwgNDIsIDIwLCAxLCA4MiwgMjMxLCAxMCwgMjAsIDEsIDgyLCAyMzEsIDEyMSwgMjAsIDEsIDgyLCAyMjcsIDExOSwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE0MSwgMjAsIDEsIDgyLCAyNDMsIDgwLCAyMCwgMSwgODIsIDIxNSwgMTA5LCAyMCwgMSwgODIsIAorICAgIDIzMywgMjE3LCAyMCwgMSwgODIsIDIxMSwgNjcsIDIwLCAxLCA4MiwgMjI3LCAxNTMsIDI1MCwgMjQsIDIwLCAxLCA4MiwgCisgICAgMjEwLCAyNTAsIDIwLCAxLCA4MiwgMjMxLCAyNywgMjAsIDEsIDgyLCAyMjksIDEzNywgMjAsIDEsIDgyLCAyMjUsIDEwMywgCisgICAgMjAsIDEsIDgyLCAyMTAsIDE5NywgMjAsIDEsIDgyLCAyMzMsIDEyLCAyMCwgMSwgODIsIDI0MywgMjQwLCAyMCwgMSwgODIsIAorICAgIDI0MywgNzksIDIwLCAxLCA4MiwgMjI5LCAxMywgMjAsIDEsIDgyLCAyMzQsIDE2MiwgMjAsIDEsIDgyLCAyMzEsIDIyOCwgCisgICAgMjAsIDEsIDgyLCAyMjksIDI2LCAyMCwgMSwgODIsIDI0MiwgMjQxLCAyMCwgMSwgODIsIDI0NCwgMjA0LCAyMCwgMSwgODIsIAorICAgIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyNSwgMTU2LCAyMCwgMSwgODIsIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA1MSwgCisgICAgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUyLCAzMSwgMjAsIDEsIDgyLCAyMjcsIDk5LCAyMCwgMSwgODIsIDIyNCwgMjUwLCAKKyAgICAyMCwgMSwgODIsIDIzMCwgMjI1LCAyMCwgMSwgODIsIDI0MywgMjM4LCAyMCwgMSwgODIsIDIyOSwgMjI1LCAyMCwgMSwgODIsIAorICAgIDIzMCwgMTA1LCAyMCwgMSwgODIsIDI0MiwgMjQwLCAyMCwgMSwgODIsIDI0MywgMjQyLCA3NCwgMjAsIDEsIDgyLCAyMzAsIAorICAgIDUyLCAyMCwgMSwgODIsIDIyNCwgMTQ5LCAyMCwgMSwgODIsIDIyOSwgMTUsIDIwLCAxLCA4MiwgMjMzLCAxOTUsIDIwLCAxLCAKKyAgICA4MiwgMjI1LCAxMDAsIDIwLCAxLCA4MiwgMjI3LCAyNTIsIDIwLCAxLCA4MiwgMjExLCAxOCwgMjAsIDEsIDgyLCAyMjksIAorICAgIDM2LCAyMCwgMSwgODIsIDIyNiwgOTQsIDIyNSwgMTkwLCAyMCwgMSwgODIsIDI0MywgMjQyLCAyNTEsIDIzLCAyMCwgMSwgCisgICAgODIsIDI0NCwgNDUsIDIwLCAxLCA4MiwgMjI4LCAxODEsIDIwLCAxLCA4MiwgNjEsIDIwLCAxLCA4MiwgMjE2LCAxMSwgMjAsIAorICAgIDEsIDgyLCA3OCwgMjAsIDEsIDgyLCA3NCwgMjAsIDEsIDgyLCAyMzMsIDkyLCAyMCwgMSwgODIsIDIyNiwgOTQsIDIyNSwgCisgICAgMjYsIDIwLCAxLCA4MiwgMjE3LCAxMDIsIDIwLCAxLCA4MiwgMjE3LCA1MiwgMjAsIDEsIDgyLCAyMjksIDE1MiwgMjMwLCAKKyAgICAzOSwgMjQwLCAyNDEsIDIwLCAxLCA4MiwgMjIwLCAxNywgMjAsIDEsIDgyLCAyMTEsIDE0LCAyMCwgMSwgODIsIDIyOCwgCisgICAgMjUyLCAyMCwgMSwgODIsIDIxMCwgMjAyLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyMTcsIDI0MSwgMjAsIDEsIDgyLCAyMTAsIAorICAgIDIyNywgMjQ5LCAxNTUsIDIwLCAxLCA4MiwgMjEwLCAxODcsIDIwLCAxLCA4MiwgMjEwLCAxOTUsIDIwLCAxLCA4MiwgMjM0LCAKKyAgICAxNDgsIDIwLCAxLCA4MiwgMjI1LCAxNTQsIDIwLCAxLCA4MiwgMjI4LCAxODIsIDI0NSwgMTEwLCAyMCwgMSwgODIsIDIyNCwgCisgICAgMTQ3LCAyMCwgMSwgODIsIDIxMSwgMTkyLCAyMCwgMSwgODIsIDI0NCwgMTU1LCAyMCwgMSwgODIsIDIxMywgMjUwLCAyMCwgCisgICAgMSwgODIsIDIzMiwgMTAzLCAyMCwgMSwgODIsIDIzMCwgMjM1LCAyMCwgMSwgODIsIDIyMywgNTQsIDIwLCAxLCA4MiwgMjIzLCAKKyAgICAxNzQsIDIwLCAxLCA4MiwgMjI4LCAyNTEsIDIwLCAxLCA4MiwgMjI5LCA4MiwgMjAsIDEsIDgyLCAyMjAsIDksIDIwLCAxLCAKKyAgICA4MiwgMjE5LCAyNTQsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDIyMywgODksIDIwLCAxLCA4MiwgMTk4LCAyMCwgMSwgODIsIAorICAgIDIyNSwgMTExLCAyMCwgMSwgODIsIDIzMiwgMTI1LCAyMCwgMSwgODIsIDIzNCwgMzQsIDIwLCAxLCA4MiwgMjMxLCA2MywgCisgICAgMjAsIDEsIDgyLCAxODYsIDIwLCAxLCA4MiwgMjMxLCAxNzQsIDIwLCAxLCA4MiwgMjE2LCAyMjIsIDIwLCAxLCA4MiwgMjM0LCAKKyAgICA5OCwgMjAsIDEsIDgyLCAyMzAsIDE1NSwgMjAsIDEsIDgyLCAyMTYsIDI0OCwgMjAsIDEsIDgyLCAyNDQsIDE3NywgMjAsIDEsIAorICAgIDgyLCAyNDIsIDIzMCwgMjAsIDEsIDIyNSwgMTQwLCAxNzYsIDIwLCAxLCAyMjUsIDE0MCwgNjksIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMzLCAyMjMsIDIwLCAxLCAyMjUsIDE0MCwgMjQ1LCAyMTcsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCAxMTEsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjE3LCA4NywgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIDE1MiwgMjAsIDEsIDIyNSwgMTQwLCAyMzMsIDE0MSwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMjIsIDI0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDMyLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzMSwgODQsIDIwLCAxLCAyMjUsIDE0MCwgMjE3LCAxMDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAxNTEsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjI4LCAxODgsIDIwLCAxLCAyMjUsIDE0MCwgMTk0LCAyMCwgMSwgMjI1LCAxNDAsIDIxOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjAsIDI5LCAyMCwgMSwgMjI1LCAxNDAsIDIxOSwgMTkzLCAyMCwgMSwgMjI1LCAxNDAsIDIyMCwgMTI1LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTYxLCAyMCwgMSwgMjI1LCAxNDAsIDIzNCwgMTYyLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIyNywgMjEzLCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOCwgMTU5LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIxMCwgMjI2LCAyMCwgMSwgMjI1LCAxNDAsIDIxOSwgMjI3LCAyMCwgMSwgMjI1LCAxNDAsIDE5MiwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMjgsIDE0LCAyMCwgMSwgMjI1LCAxNDAsIDIyNSwgMTU0LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgCisgICAgMjUxLCAyMCwgMSwgMjI1LCAxNDAsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxNDAsIDIyNSwgMjE0LCAyMCwgMSwgMjI1LCAKKyAgICAxNDAsIDIyMiwgMTQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOCwgMjM4LCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgNTQsIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjM0LCAxNzEsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAxMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIAorICAgIDYxLCAyMCwgMSwgMjI1LCAxNDAsIDIyMCwgOSwgMjAsIDEsIDIyNSwgMTQwLCAyMjQsIDE1MCwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyNDQsIDQ1LCAyMCwgMSwgMjI1LCAxNDAsIDIxMiwgNjUsIDIwLCAxLCAyMjUsIDE0MCwgMjMyLCAyNDcsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjMyLCAxMjUsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAzNCwgMjAsIDEsIDIyNSwgMTQwLCAyMzEsIDExOSwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMjMsIDg2LCAyMCwgMSwgMjI1LCAxNDAsIDE4NiwgMjAsIDEsIDIyNSwgMTQwLCAyMzAsIDE2NiwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMzEsIDEyNywgMjAsIDEsIDIyNSwgMTQwLCAyMTYsIDIzMSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzQsIDEsIDIwLCAxLCAyMjUsIDE0MCwgMjIxLCAyNTMsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCAxMTUsIDk1LCAxLCAxOTEsIAorICAgIDk1LCAxLCAyNTIsIDE5OSwgOTUsIDEsIDgsIDE5MSwgOTUsIDEsIDIyNSwgNDUsIDk1LCAxLCAxODYsIDk1LCAxLCAyMzAsIAorICAgIDIzOCwgOTUsIDEsIDI1NCwgMzEsIDE4NiwgOTUsIDEsIDI0NCwgMjA0LCA5NSwgMSwgMjE0LCAyNywgOTUsIDEsIDIxMywgCisgICAgMTc3LCA5NSwgMSwgMjE3LCAxMDYsIDk1LCAxLCAyNDgsIDIyOSwgOTUsIDEsIDgsIDIxNSwgMTU3LCA5NSwgMSwgOCwgMjE3LCAKKyAgICAxMDYsIDk1LCAxLCAyMTUsIDE1NywgOTUsIDEsIDI0OCwgMTQzLCA5NSwgMSwgMTk4LCA5NSwgMSwgMjI4LCAyNDIsIDk1LCAKKyAgICAxLCA4LCAyMjgsIDExNSwgOTUsIDEsIDI1NCwgMzEsIDE5OCwgOTUsIDEsIDIyOCwgMTE1LCA5NSwgMSwgMjI4LCAxMDEsIAorICAgIDk1LCAxLCAyMzMsIDE0MSwgOTUsIDEsIDIzMiwgNjYsIDk1LCAxLCAyMzMsIDQsIDk1LCAxLCAyMzIsIDI0OSwgOTUsIDEsIAorICAgIDIxNiwgNTcsIDk1LCAxLCAyNDcsIDE2MSwgOTUsIDEsIDIxNiwgNDksIDk1LCAxLCAyNDcsIDE2MCwgOTUsIDEsIDE3NiwgCisgICAgOTUsIDEsIDI0MywgMTQyLCA5NSwgMSwgOCwgMTc2LCA5NSwgMSwgMjI0LCA5MSwgOTUsIDEsIDIyNCwgNjksIDk1LCAxLCAKKyAgICAyMjksIDgyLCA5NSwgMSwgMjI5LCAzMywgOTUsIDEsIDI1NCwgMzEsIDIyOSwgODIsIDk1LCAxLCAxNjIsIDk1LCAxLCAyMTEsIAorICAgIDE2NSwgOTUsIDEsIDI0MywgMCwgOTUsIDEsIDI0MiwgMjMzLCA5NSwgMSwgMjE1LCAxNjYsIDk1LCAxLCAyNDYsIDM0LCA5NSwgCisgICAgMSwgMjI3LCAxNjksIDk1LCAxLCAyMjcsIDE1NCwgOTUsIDEsIDIxNSwgMTc2LCA5NSwgMSwgMjQ2LCA0MSwgOTUsIDEsIDgsIAorICAgIDIxNSwgMTc2LCA5NSwgMSwgOCwgMjQ2LCA0MSwgOTUsIDEsIDIyMywgMTA5LCAyMTUsIDE3NiwgOTUsIDEsIDIyMCwgMTA0LCAKKyAgICA5NSwgMSwgMjE4LCAyMjUsIDk1LCAxLCAyMTAsIDgyLCA5NSwgMSwgMjEwLCAxNCwgOTUsIDEsIDIxNSwgMTg0LCA5NSwgMSwgCisgICAgMjQ2LCA0NiwgOTUsIDEsIDgsIDIxNSwgMTg0LCA5NSwgMSwgMjA2LCA5NSwgMSwgMjEwLCAxMTYsIDk1LCAxLCAyMTAsIDE1LCAKKyAgICA5NSwgMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIyMywgOTUsIDEsIDI1NCwgMzEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAKKyAgICAyMTUsIDk1LCAxLCAyMDksIDIyMiwgOTUsIDEsIDIxMiwgNjUsIDk1LCAxLCAyNTQsIDIxOCwgOTUsIDEsIDI0MSwgMTk2LCAKKyAgICA5NSwgMSwgMjI5LCAxOTcsIDk1LCA1LCAyNTMsIDIzMCwgOTUsIDUsIDIyMywgMTA5LCAyMTMsIDEzMywgOTUsIDUsIDIyMywgCisgICAgMTA5LCAyNTMsIDIzMCwgOTUsIDI1LCA1LCA2MSwgOTUsIDI1LCA1LCAyNTUsIDgyLCA5NSwgMjUsIDUsIDI1NCwgMjE0LCAKKyAgICA5NSwgMjUsIDUsIDI1NCwgMTMxLCA5NSwgMjUsIDUsIDI1NCwgMTIzLCA5NSwgMjUsIDUsIDc4LCA5NSwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA5NSwgMjUsIDUsIDIxMSwgMjI3LCA5NSwgMjUsIDUsIDIxMiwgOTgsIDk1LCAyNSwgNSwgNzYsIDk1LCAyNSwgNSwgCisgICAgMjQ1LCAxNTgsIDk1LCAyNSwgNSwgMjQ1LCAxNDYsIDk1LCAyNSwgNSwgMjI2LCAyMzYsIDk1LCAyNSwgNSwgNzQsIDk1LCAKKyAgICAyNSwgNSwgMjQwLCAxMjYsIDk1LCAyNSwgNSwgMjQwLCAxMjUsIDk1LCAyNSwgNSwgMjQwLCAxMjQsIDk1LCAyNSwgNSwgCisgICAgMjM1LCAxOTYsIDk1LCAyNSwgNSwgMjM2LCA2NywgOTUsIDI1LCA1LCAyMzYsIDQwLCA5NSwgMjUsIDUsIDIzNSwgMTYyLCAKKyAgICA5NSwgMjUsIDUsIDIzNSwgMjM4LCA5NSwgMjUsIDUsIDY5LCA5NSwgMjUsIDUsIDIxNCwgMjI5LCA5NSwgMjUsIDUsIDIxNCwgCisgICAgMjI4LCA5NSwgMjUsIDUsIDIxNCwgMjI3LCA5NSwgMjUsIDUsIDIxNCwgMTE4LCA5NSwgMjUsIDUsIDIxNCwgMjExLCA5NSwgCisgICAgMjUsIDUsIDIxNCwgMTc4LCA5NSwgMjUsIDUsIDIxMSwgMTE3LCA5NSwgMjUsIDUsIDIxMSwgOCwgOTUsIDI1LCA1LCAyNTQsIAorICAgIDI1MiwgOTUsIDI1LCA1LCAyNTQsIDI0OCwgOTUsIDI1LCA1LCAyNDUsIDk0LCA5NSwgMjUsIDUsIDIyMiwgMTg1LCAyNDUsIAorICAgIDk0LCA5NSwgMjUsIDUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDIyMiwgMTg1LCAyNDUsIDEwMCwgOTUsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgOTUsIDI1LCA1LCAyNDUsIDIwMywgOTUsIDI1LCA1LCAyNTMsIDIwMCwgOTUsIDI1LCA1LCAyMjYsIDEzOCwgOTUsIAorICAgIDI1LCA1LCAyMzAsIDMwLCA5NSwgMjUsIDUsIDIyOSwgODQsIDk1LCAxMzgsIDIyMiwgMjU0LCA5NSwgMTM4LCAyMTYsIDE1LCAKKyAgICAyMjIsIDI1NCwgOTUsIDEzOCwgNDgsIDk1LCAxMzgsIDUxLCA5NSwgMSwgMjE2LCAyOSwgOTUsIDEsIDIxNiwgMjgsIDk1LCAKKyAgICAxLCAyMTYsIDI3LCA5NSwgMSwgMjE2LCAyNiwgOTUsIDEsIDIxNiwgMjUsIDk1LCAxLCAyMTYsIDI0LCA5NSwgMSwgMjE2LCAKKyAgICAyMywgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDMwLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwOSwgCisgICAgMjE2LCAyNywgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAorICAgIDEwOSwgMjE2LCAyMywgNTYsIDEsIDI1NCwgMzEsIDc2LCAxNDEsIDEsIDI1NCwgMzEsIDIxMSwgNDcsIDQ5LCAyOCwgMTYsIAorICAgIDIyNCwgMTU3LCA0OSwgMjgsIDE2LCAyNDgsIDE2NiwgNDksIDI4LCAxNiwgMjI1LCAxNzgsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTE3LCAyNDUsIDE4NiwgNDksIDI4LCAxNiwgMjI2LCAxMTcsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDUsIAorICAgIDE4NiwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIzNCwgMjAzLCA0OSwgMjgsIDE2LCAKKyAgICAyMTcsIDE3MCwgNDksIDI4LCAxNiwgMjI2LCAxMywgNDksIDI4LCAxNiwgMjEwLCAyMTcsIDQ5LCAyOCwgMTYsIDIxMCwgCisgICAgMjE4LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjMzLCAyNDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzYsIDI0NSwgMTg2LCA0OSwgCisgICAgMjgsIDE2LCAyNDUsIDM0LCAyNDUsIDE4NiwgNDksIDI4LCAxNiwgMjE3LCAzLCA0OSwgMjgsIDE2LCAyMzQsIDE2NywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA2NiwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNywgMTc2LCA0OSwgCisgICAgMjgsIDE2LCAyMTYsIDE2MCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAKKyAgICAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjQsIDE1NiwgNDksIDI4LCAxNiwgMjUwLCAxNTcsIDQ5LCAyOCwgMTYsIDIxNCwgNiwgCisgICAgNDksIDI4LCAxNiwgMjM1LCAxNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDE2OCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjIxLCAyMTUsIDQ5LCAyOCwgMTYsIDIyNiwgNCwgNDksIDI4LCAxNiwgCisgICAgMjE4LCAxNDgsIDI1NCwgNjksIDQ5LCAyOCwgMTYsIDIyNiwgMTE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTQsIDE1LCAKKyAgICAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNTQsIDY0LCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMjMsIDQ5LCA0OSwgMjgsIDE2LCAyMjUsIDEwOSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjE2LCA4NCwgNDksIDI4LCAxNiwgMjU0LCAxMjksIDQ5LCAyOCwgMTYsIDIyMSwgMTYxLCA0OSwgMjgsIDE2LCAyMTcsIAorICAgIDE3OSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE3LCAxNzksIDIzMSwgNDUsIDIxOCwgMTQ2LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDExMSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDQ5LCAyOCwgMTYsIDIzMywgMzMsIDQ5LCAyOCwgMTYsIDI0NiwgCisgICAgNDksIDQ5LCAyOCwgMTYsIDIxNSwgMjI4LCA0OSwgMjgsIDE2LCAyMTYsIDIzMywgNDksIDI4LCAxNiwgMjMzLCAyNDMsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgNzYsIDI0NSwgMzQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjU0LCAyOSwgNDksIAorICAgIDI4LCAxNiwgMjM2LCAxOSwgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzNCwgMjA2LCAKKyAgICAyMTUsIDE5OSwgNDksIDI4LCAxNiwgMjI1LCAyMDMsIDQ5LCAyOCwgMTYsIDIyNCwgMTYxLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDE3LCA0OSwgMjgsIDE2LCAyNTAsIDg4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjMsIDE0OSwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxNiwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQwLCAxMTYsIDQ5LCAyOCwgCisgICAgMTYsIDIyOSwgMjA4LCA0OSwgMjgsIDE2LCAyMjUsIDE1OSwgNDksIDI4LCAxNiwgMjM0LCAxOCwgMjU0LCAxNTgsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAwLCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjE4LCAxMjUsIDQ5LCAyOCwgMTYsIDI0MiwgMTMwLCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgMjEwLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjI2LCAxMTcsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjUsIDE1OCwgNDksIDI4LCAxNiwgMjM0LCA0LCA0OSwgMjgsIAorICAgIDE2LCAyMjUsIDE1NywgNDksIDI4LCAxNiwgMjMzLCAyNDIsIDQ5LCAyOCwgMTYsIDIyNSwgMjA0LCAyMjksIDEwMCwgNDksIAorICAgIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDIyOSwgMTAxLCAKKyAgICAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjcsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyNTQsIDY4LCAyMTcsIDE3NywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIxMCwgMjE2LCA0OSwgMjgsIDE2LCAyMzMsIAorICAgIDI0MSwgNDksIDI4LCAxNiwgMjQ1LCAxODEsIDQ5LCAyOCwgMTYsIDI1MCwgMTU4LCA0OSwgMjgsIDE2LCAyMzAsIDIwMywgCisgICAgMjM1LCAxNjksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjUsIDEwOSwgMjI5LCAxMDAsIAorICAgIDQ5LCAyOCwgMTYsIDIyNCwgMTYyLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMDcsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgOTIsIDQ5LCAyOCwgMTYsIDIzMiwgNjMsIDQ5LCAyOCwgMTYsIDIyNiwgMTQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCA2OCwgMjI2LCAxNSwgNDksIDI4LCAxNiwgMjMzLCAxNTksIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgOTMsIDQ5LCAyOCwgMTYsIDIxNSwgMjAwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCAxODQsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNywgMTc5LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjE3LCAxNzEsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIAorICAgIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDExNCwgNDksIDI4LCAxNiwgMjIxLCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMTEsIDE1MSwgMjM0LCA0MywgNDksIDI4LCAxNiwgMjE1LCAxOTcsIDQ5LCAyOCwgMTYsIDIyNCwgMTYzLCA0OSwgCisgICAgMjgsIDE2LCAyMTUsIDIwMSwgNDksIDI4LCAxNiwgMjE1LCAxOTgsIDQ5LCAyOCwgMTYsIDIyNCwgMTYwLCA0OSwgMjgsIDE2LCAKKyAgICAyMTUsIDE5NiwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDQ5LCAyOCwgMTYsIDI0MiwgMTY1LCA0OSwgMjgsIDE2LCAyNTQsIAorICAgIDIyLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyNTQsIDIyLCA0OSwgMjgsIDE2LCAyMjYsIDExMSwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxNiwgMTkwLCAyNDUsIDc3LCA0OSwgMjgsIDE2LCAyMTYsIDE5MCwgMjQ1LCAzMywgNDksIDI4LCAxNiwgMjE2LCAKKyAgICAxOTIsIDI1NCwgNzEsIDQ5LCAyOCwgMTYsIDIxNiwgMTg1LCAyMzQsIDI1MywgMjU0LCA2MywgNDksIDI4LCAxNiwgMjM0LCAKKyAgICAyMDUsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ3LCA0OSwgMjgsIDE2LCAyMzQsIDQ0LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMTAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzMywgMjQ0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDI0NCwgMjU0LCAxNTgsIDQ5LCAyOCwgMTYsIDIzMywgMjQ0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzIsIDQ5LCAyOCwgMTYsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTUsIAorICAgIDIxMSwgNDksIDI4LCAxNiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDIzNCwgOCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ1LCAKKyAgICAxNDIsIDI1MCwgNzksIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDI0NiwgNTAsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIAorICAgIDIxNSwgMjEzLCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyMTYsIDIzNSwgMjUwLCA4MCwgNDksIDI4LCAxNiwgCisgICAgMjMzLCAzOCwgMjM2LCAxNCwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIDIyOSwgMTAxLCAyNTQsIDEwNCwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjYsIDIyNiwgNSwgMjU0LCAxOCwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIDIyNiwgNSwgMjQ4LCAzNywgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzMsIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDIzNCwgMjAyLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgMjI2LCA1LCAyNTQsIDE5LCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIAorICAgIDIyNiwgNSwgMjQ4LCAzNywgNDksIDI4LCAxNiwgMjE1LCAyMTcsIDQ5LCAyOCwgMTYsIDI1NCwgMjMsIDQ5LCAyOCwgMTYsIAorICAgIDIzNiwgMjEsIDQ5LCAyOCwgMTYsIDI0NywgMjU0LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjI1LCAzLCAyNTQsIDI0LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDI1NCwgMjQsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMjIwLCAyMzEsIDM5LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjMxLCA1MCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIAorICAgIDI0MiwgMTY3LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjQyLCAxNjQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIAorICAgIDI0MiwgMTY3LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjU0LCAxNjAsIDIyNCwgMTY4LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDI0OCwgMzYsIDI0MCwgMTE0LCAKKyAgICA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjU0LCAxNjAsIDI0OCwgMzYsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjE1LCAyMDYsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE1LCAyMTgsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTYsIDIyOSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTYsIDIyOSwgMjMzLCA0MSwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMzMsIDQxLCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNSwgNDIsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzUsIDE3NiwgMjE2LCAyNTIsIDI0MCwgMTE1LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAKKyAgICAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyMTYsIDIyNiwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIAorICAgIDIzMCwgMTQ4LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgMjQ3LCAyMzgsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTQsIDEwLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNCwgMTY3LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIyNSwgNDIsIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI1NCwgNzEsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MiwgMTYyLCAyMzAsIDMxLCAyNDcsIDIwOCwgNDksIDI4LCAxNiwgMjQ1LCAxNTYsIDIzNCwgMjUzLCAyNDMsIAorICAgIDI0MywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDIzNiwgMjAsIDQ5LCAyOCwgMTYsIDIzNiwgMTgsIDQ5LCAyOCwgMTYsIDI0MywgCisgICAgMjQzLCAyNTQsIDMwLCAyNDgsIDM1LCAyNDAsIDExMywgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAxOTEsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMjksIDIwMywgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIxOSwgMTA0LCAyNDcsIDI1MSwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMzQsIDE4OCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIAorICAgIDIyOCwgMjM5LCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjgsIDIzOSwgMjU0LCAxMDQsIAorICAgIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMzEsIDE5NiwgMjUwLCA4MSwgMjQ3LCAyMzgsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAKKyAgICAyMzEsIDE5NiwgMjUwLCA4MSwgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTMwLCAyMTksIDEwNCwgMjUwLCA4MSwgCisgICAgMjE0LCA5LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjE5LCAxMDQsIDI1MCwgODEsIDIxNywgMTgwLCA0OSwgMjgsIDE2LCAKKyAgICAyNDMsIDI0MywgMjI5LCAxMDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAKKyAgICAyMzQsIDQyLCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAyMTksIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQwLCAxNjEsIAorICAgIDIxMSwgMTAsIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ1LCAxNTcsIDI1NCwgOTQsIDQ5LCAyOCwgMTYsIAorICAgIDIxMSwgMTAsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAKKyAgICAyMTYsIDIzMCwgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDI1NCwgNzMsIDI0NiwgNTAsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyNDcsIDI0NiwgMjMwLCAxNDYsIDIxNiwgMjM0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDI0NywgMjMwLCAKKyAgICAyNDUsIDQ0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDIxNSwgMjE1LCAyMjYsIDIxNSwgMjQ3LCAxNDcsIAorICAgIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI1NCwgNzMsIDI0NiwgNTAsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAKKyAgICAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNDcsIDIzMCwgMjQ1LCA0NCwgCisgICAgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIxNSwgMjE1LCAyMjYsIDIxNSwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgNTYsIDI0NywgMjQ1LCA0OSwgMjgsIDE2LCAyNDMsIDU2LCAyMTEsIDksIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAKKyAgICAyNTQsIDczLCAyMzAsIDIwNCwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIDI1NCwgNzMsIDIzMSwgNzgsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjUzLCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIDIxNiwgMTgzLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgCisgICAgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyMTYsIDE4NCwgMjQ3LCAxOTQsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4NCwgMjE1LCAyMDgsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyMTYsIDE4NCwgMjE2LCAyMjMsIDQ5LCAyOCwgMTYsIAorICAgIDIxOSwgMTY1LCAyNTMsIDI1MiwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDI1MywgMjUzLCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUzLCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDI1MywgMjUzLCAyMTYsIDIyMywgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzEsIDI0MywgMzcsIDQ5LCAyOCwgMTYsIDI0NywgMjM3LCAyMjYsIDEzOCwgNDksIDI4LCAKKyAgICAxNiwgMjE4LCAxMzksIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDE5MSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjEzLCAxMjQsIAorICAgIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0MywgMTQyLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyNDgsIDExLCA0OSwgMjgsIDE2LCAKKyAgICAyNTQsIDE1LCAyMzQsIDE4OCwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjU0LCAxNSwgCisgICAgMjI4LCAyMzgsIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjMxLCA0OSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIAorICAgIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDE2OSwgMjI5LCAxMDEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyMzQsIDQ0LCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjQyLCAxNjYsIDIyOSwgMTAxLCAyMzQsIDIwMiwgMjgsIDE2LCAyMTksIDE1NywgMjUyLCAxNDMsIDI4LCAxNiwgNTIsIAorICAgIDI1MiwgMTQzLCAyOCwgMTYsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAyMjMsIDUzLCA0MCwgMjUyLCAxNDMsIDI4LCAxNiwgCisgICAgMjQ4LCAxNjMsIDI1MiwgMTQzLCAyOCwgMTYsIDIxOSwgMjUzLCAyNTIsIDE0MywgMjgsIDE2LCA0MywgMjIzLCA4MCwgNTAsIAorICAgIDI4LCAxNiwgNDQsIDIyMywgODAsIDUwLCAyOCwgMTYsIDIyMywgODAsIDI0NywgMTI2LCAyOCwgMTYsIDI0OCwgMjA0LCAKKyAgICAyMjEsIDE2NSwgMjgsIDE2LCAyNDgsIDIzMCwgMjUxLCAxLCAyOCwgMTYsIDIyMSwgMTY1LCAyOCwgMTYsIDI0OSwgMjQyLCAKKyAgICAyOCwgMTYsIDIyMywgNzgsIDI0NCwgMTE5LCAyOCwgMTYsIDIyMywgNzgsIDI0NCwgMTE4LCAyOCwgMTYsIDIyMywgNzgsIAorICAgIDI0NCwgMTE3LCAyOCwgMTYsIDI0NCwgMTM5LCAyOCwgMTYsIDI0NCwgMTQwLCA1MSwgMjgsIDE2LCAyNTEsIDE1NiwgNzksIAorICAgIDI4LCAxNiwgMjUxLCAzMiwgMjgsIDE2LCAyNTEsIDE2NywgMjgsIDE2LCAxMjcsIDI4LCAxNiwgMjI2LCAxOTcsIDIxOCwgCisgICAgMTY1LCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTY1LCAyOCwgMTYsIDIxNiwgMTQzLCAyMTgsIDE2NSwgMjgsIDE2LCAyNDQsIAorICAgIDE4LCAyMTgsIDE2NSwgMjgsIDE2LCAyNDQsIDg4LCAyMTgsIDE2NSwgMjgsIDE2LCAyMTksIDEyNiwgMjE4LCAxNjUsIDI4LCAKKyAgICAxNiwgMjE5LCAxMjQsIDI0NCwgMiwgMjgsIDE2LCAyNDQsIDE2LCAyNDQsIDIsIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgCisgICAgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDI1MSwgNzUsIDI1MCwgMjIsIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMywgCisgICAgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDI0NiwgOTEsIDI1MCwgMjEsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMCwgCisgICAgMjgsIDE2LCAyMzAsIDkwLCAyMzEsIDk1LCAyMjMsIDY0LCAyOCwgMTYsIDUyLCAyMjAsIDc3LCAyOCwgMTYsIDUyLCAyNDQsIAorICAgIDczLCAyOCwgMTYsIDI0NCwgNzQsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNzQsIDI0NiwgMTE0LCAyOCwgMTYsIDIyOSwgCisgICAgMTkzLCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE5MywgMjQ2LCAxMTQsIDI4LCAxNiwgMjIwLCA3OCwgMjE0LCAxNjMsIDI4LCAKKyAgICAxNiwgMjIwLCA3OCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI0LCAyNSwgMTM4LCAyMjAsIDc3LCAyOCwgMTYsIDIyNCwgMjUsIAorICAgIDEzOCwgMjQ0LCA3MywgMjgsIDE2LCAyNDksIDIyNCwgMjE2LCA4OCwgMjgsIDE2LCAyNDksIDkzLCAyMTYsIDg4LCAyOCwgCisgICAgMTYsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjI0LCA3LCAyNTQsIAorICAgIDE1MCwgMjgsIDE2LCAyMjQsIDcsIDI1MiwgMTMwLCAyOCwgMTYsIDIzMCwgOTMsIDIyMywgNjQsIDI4LCAxNiwgMjExLCAKKyAgICAyNTEsIDIyMywgNjQsIDI4LCAxNiwgMTYzLCAyMjMsIDY0LCAyOCwgMTYsIDIyNCwgMjUsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjQ1LCAxOTcsIDIyMywgNjQsIDI4LCAxNiwgMjE5LCAxMjAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAxNjEsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjE5LCAxMTIsIDIyMywgNjQsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjIzLCA2NCwgMjgsIAorICAgIDE2LCAyMTEsIDE3OSwgMjI4LCA0OCwgMjgsIDE2LCA5NiwgMjI4LCA0OCwgMjgsIDE2LCAyNTAsIDQ0LCAyMTEsIDE3OSwgCisgICAgMjI4LCA0OCwgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIAorICAgIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgCisgICAgNDksIDQzLCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgCisgICAgMjI3LCAyMjgsIDQ5LCA0NCwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAKKyAgICAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIAorICAgIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMzAsIDEzNCwgCisgICAgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMzQsIDIyOCwgNDksIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI0LCAKKyAgICAyMjgsIDQ5LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI0LCAyMjgsIDQ5LCAxMjQsIDI1MSwgMjI5LCAyOCwgMTYsIAorICAgIDIyNiwgOCwgMjI4LCA0OCwgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0OCwgMjgsIDE2LCAyMjgsIDQ5LCAyNTEsIDIyOSwgCisgICAgMjgsIDE2LCAyMjcsIDIwNywgMjI4LCA0OCwgMjgsIDE2LCAyNDksIDI0OSwgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgCisgICAgMjQ5LCAyNDksIDIyOCwgNDksIDI1MSwgMjI5LCAyOCwgMTYsIDI1MSwgMTU0LCAyOCwgMTYsIDIxMSwgMjUxLCAyMjgsIDUyLCAKKyAgICAyOCwgMTYsIDE2MywgMjI4LCA1MiwgMjgsIDE2LCAyMjQsIDI1LCAyMjgsIDUyLCAyOCwgMTYsIDI0NSwgMTk3LCAyMjgsIAorICAgIDUyLCAyOCwgMTYsIDIxOSwgMTIwLCAyMjgsIDUyLCAyOCwgMTYsIDIxNiwgMTYxLCAyMjgsIDUyLCAyOCwgMTYsIDIxOSwgCisgICAgMTEyLCAyMjgsIDUyLCAyOCwgMTYsIDEyMywgMjQwLCAyMTgsIDIxNSwgNzEsIDIyOCwgNTIsIDI4LCAxNiwgMzgsIDIxOCwgCisgICAgMTQxLCAyOCwgMTYsIDM4LCAyMTgsIDI0MiwgMjE4LCAxNDEsIDI4LCAxNiwgMzgsIDIxNSwgMjM1LCAyOCwgMTYsIDM4LCAKKyAgICAyMTUsIDIzNCwgMjgsIDE2LCAzOCwgMjE1LCAyMzMsIDI4LCAxNiwgMjQ0LCAxMDksIDIxNSwgMjM1LCAyOCwgMTYsIDI0NCwgCisgICAgMTA5LCAyMTUsIDIzNCwgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzMsIDI4LCAxNiwgMzgsIDI1MywgMTk3LCAyNDcsIAorICAgIDEyOCwgMjgsIDE2LCAzOCwgMjQ0LCA4MCwgMjgsIDE2LCAzOCwgMjQ0LCA3OSwgMjgsIDE2LCAzOCwgMjQ0LCA3OCwgMjgsIAorICAgIDE2LCAzOCwgMjQ0LCA3NywgMjgsIDE2LCAzOCwgMjQ0LCA3NiwgMjgsIDE2LCAyNTIsIDY2LCAyNTIsIDgyLCAyOCwgMTYsIAorICAgIDI0NSwgMTUxLCAyNTIsIDgyLCAyOCwgMTYsIDI1MiwgNjYsIDIxNiwgMTEyLCAyOCwgMTYsIDI0NSwgMTUxLCAyMTYsIDExMiwgCisgICAgMjgsIDE2LCAyNTIsIDY2LCAyMTksIDgyLCAyOCwgMTYsIDI0NSwgMTUxLCAyMTksIDgyLCAyOCwgMTYsIDI1MiwgNjYsIAorICAgIDIyNSwgMTE4LCAyOCwgMTYsIDI0NSwgMTUxLCAyMjUsIDExOCwgMjgsIDE2LCAzOCwgMjU1LCAyMywgMjgsIDE2LCAzOCwgCisgICAgMjE4LCAxNjcsIDI4LCAxNiwgMzgsIDIxNiwgMjM5LCAyOCwgMTYsIDM4LCAyMTgsIDE2OCwgMjgsIDE2LCAzOCwgMjMxLCAKKyAgICAxNjcsIDI4LCAxNiwgMzgsIDIzMSwgMTY2LCAyOCwgMTYsIDM4LCAyNTUsIDIyLCAyOCwgMTYsIDM4LCAyMzIsIDExOCwgMjgsIAorICAgIDE2LCAyNTQsIDYsIDIxNCwgMTYzLCAyOCwgMTYsIDI1NCwgNiwgMjQ2LCAxMTQsIDI4LCAxNiwgMzgsIDI0NywgMTQzLCAyOCwgCisgICAgMTYsIDM4LCAyMjIsIDIzNCwgMjgsIDE2LCAzOCwgMjQ0LCA2NiwgMjgsIDE2LCAzOCwgMjE5LCA3OCwgMjgsIDE2LCAzOCwgCisgICAgMjUyLCA0NiwgMjgsIDE2LCAzOCwgNTIsIDIxNiwgMjAsIDI4LCAxNiwgMzgsIDIxNSwgMjEyLCAyMTYsIDIwLCAyOCwgMTYsIAorICAgIDIyMiwgMjM4LCAyOCwgMTYsIDIxOCwgNzYsIDI4LCAxNiwgMjEwLCAxNTksIDI4LCAxNiwgMjI1LCAxMTAsIDI4LCAxNiwgCisgICAgMjMxLCAzMCwgMjgsIDE2LCAyNDQsIDI1LCAyOCwgMTYsIDI0OSwgMTQ2LCAyOCwgMTYsIDI0OCwgODYsIDI4LCAxNiwgMjQyLCAKKyAgICAxNTcsIDIyOCwgNTMsIDIxOSwgOTcsIDI4LCAxNiwgMjQyLCAxNTcsIDIyOCwgNTMsIDIyOCwgODAsIDIxOSwgOTcsIDI4LCAKKyAgICAxNiwgMjE2LCAxLCAyOCwgMTYsIDIxNSwgOTUsIDI4LCAxNiwgMjM1LCAyMDAsIDIxNSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgCisgICAgMjE5LCA5NywgMjgsIDE2LCAyMTUsIDk2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDQsIDI4LCAxNiwgCisgICAgMjI2LCAxNTIsIDIxOCwgMTAxLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMCwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAKKyAgICA5OSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5OCwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NywgMjgsIDE2LCAyMjYsIAorICAgIDE1MiwgMjE4LCA5NiwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NCwgMjgsIAorICAgIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDMsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAyLCAyOCwgMTYsIDI0MSwgMjUyLCAyOCwgCisgICAgMTYsIDIyOSwgMTEwLCAyOCwgMTYsIDI0NSwgMTUxLCA2NCwgMjE4LCAxMzUsIDI4LCAxNiwgMjQ4LCA3OSwgMjE5LCA5NywgCisgICAgMjgsIDE2LCAzOCwgMTI0LCAyNTEsIDE3NywgMjgsIDE2LCAzOCwgMTIwLCAyNTEsIDE3NywgMjgsIDE2LCAzOCwgMjQyLCA3LCAKKyAgICAyOCwgMTYsIDM4LCAyMTksIDY5LCAyMjUsIDQ2LCAyOCwgMTYsIDIyNSwgMjE5LCA3OSwgMjgsIDE2LCAyMjUsIDIxOSwgCisgICAgMTIwLCA3OSwgMjgsIDE2LCAxNjMsIDIyNSwgMjE5LCA3OSwgMjgsIDE2LCAyNDIsIDE4OSwgMjE0LCAxNjMsIDI4LCAxNiwgCisgICAgMjQyLCAxODksIDI0NiwgMTE0LCAyOCwgMTYsIDIsIDI0NCwgMTA4LCAyOCwgMTYsIDI0OCwgMTg4LCAyOCwgMTYsIDI0OCwgCisgICAgMTg5LCAyNTQsIDE2MywgMjgsIDE2LCAyMzEsIDEzOCwgMjgsIDE2LCAyMzIsIDEzNSwgMjgsIDE2LCAyNTEsIDE1MSwgMjgsIAorICAgIDE2LCAyMjAsIDE1NiwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTYsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTg5LCAyOCwgCisgICAgMTYsIDIzMCwgMTkwLCAyNTEsIDIyOSwgMjgsIDE2LCAyMjAsIDE1MCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTAsIAorICAgIDI1MSwgMjI5LCAyOCwgMTYsIDI0MywgMjI3LCAyMTEsIDI1MywgMjgsIDE2LCAyNDMsIDIyNywgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjMyLCAxMzYsIDIyNSwgMTgzLCAyMjMsIDY0LCAyOCwgMTYsIDIzMiwgMTM2LCAyMzYsIDExLCAyMjMsIDY0LCAyOCwgMTYsIAorICAgIDI1MSwgMTUyLCAyMjMsIDY0LCAyOCwgMTYsIDIyMCwgMTU2LCAyMjMsIDY0LCAyOCwgMTYsIDIzMCwgMTkwLCAyMjMsIDY0LCAKKyAgICAyOCwgMTYsIDIyMCwgMTUwLCAyMjMsIDY0LCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgCisgICAgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIDE3NywgMjM2LCAxMCwgCisgICAgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIDE3NywgMjI1LCAxODMsIDI0NywgMjE5LCAyOCwgCisgICAgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgMjI1LCAxODIsIDI4LCAxNiwgMjE2LCAyNTAsIAorICAgIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAKKyAgICAyMjQsIDE3NywgMjM2LCAxMSwgMjQ3LCAyMTksIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgCisgICAgMTc3LCAyMzYsIDExLCAyNDcsIDIxOCwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIAorICAgIDIzNiwgMTEsIDI0NywgMjE3LCAyOCwgMTYsIDI0OSwgMTQxLCAyOCwgMTYsIDI0MiwgMTMzLCAyNTEsIDc1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0MiwgMTMzLCAyNDUsIDE1LCAyNTAsIDIyLCAyOCwgMTYsIDQyLCAyNTMsIDE2NiwgMjgsIDE2LCAyMTMsIAorICAgIDE1MSwgMjgsIDE2LCAyMjUsIDE3LCAyOCwgMTYsIDI1MCwgMTMsIDI4LCAxNiwgMjIxLCAyMDUsIDI4LCAxNiwgMjUwLCAxNywgCisgICAgMjgsIDE2LCAyMTYsIDgsIDI4LCAxNiwgMjI0LCAyNDUsIDI4LCAxNiwgMjI0LCAyNDYsIDI0NCwgNjgsIDI4LCAxNiwgMjIxLCAKKyAgICAyMDYsIDI0NCwgNjgsIDI4LCAxNiwgMjE2LCA5LCAyMjMsIDYxLCAyOCwgMTYsIDIyNSwgMTY2LCAyMTgsIDY3LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMzAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjA5LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMDIsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5NCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTg4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjksIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjMsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxOCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjE3LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE0LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTMsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4OSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjMwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTksIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMiwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTk0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODcsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjI4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjI1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjIsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjIwLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxNCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjEzLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjEwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNywgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjA2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDUsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIwNCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAzLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDEsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk5LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTkyLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MCwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMTg5LCAzOCwgMjYsIDI4LCAyMTUsIDIwOSwgMzgsIDI2LCAyOCwgMjE2LCAyMjQsIDM4LCAKKyAgICAyNiwgMjgsIDIyNSwgMTkxLCAyNiwgMjgsIDIzMywgMzcsIDIzMCwgMTQ3LCAzMSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgCisgICAgMjQxLCAyMjksIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0MCwgMjIxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAyNDUsIAorICAgIDIzMCwgMjQxLCAyMzAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzAsIDI0MCwgMjIwLCAyNDcsIDIzMiwgMzEsIDI0NSwgMjMxLCAKKyAgICAxODAsIDMxLCAyNTAsIDE4MiwgMTgwLCAzMSwgMjQzLCAyMzYsIDI1MCwgNDMsIDE4MCwgMzEsIDIzMCwgMTgyLCAxODAsIAorICAgIDMxLCAyNTIsIDEzOCwgMTgwLCAzMSwgMjM0LCAxODUsIDIxOSwgODEsIDE4MCwgMzEsIDI0OSwgMTg3LCAxODAsIDMxLCAKKyAgICAyNTMsIDI0MSwgMTgwLCAzMSwgMjI2LCAxNjcsIDE4MCwgMzEsIDI1MSwgMTYxLCAyMjYsIDEzNCwgMTgwLCAzMSwgMjQ4LCAKKyAgICA4MSwgMTc3LCAyNDcsIDE4NywgMTgwLCAzMSwgMjQ3LCAxODQsIDE4MCwgMzEsIDIxMCwgMjIyLCAxODAsIDMxLCAyMzUsIAorICAgIDI1NCwgMTgwLCAzMSwgMjI1LCAyMDAsIDE4MCwgMzEsIDIyMywgMTMwLCAxODAsIDMxLCAyNDksIDE5NywgMTgwLCAzMSwgCisgICAgMjQxLCA2NywgMjUyLCAxOTIsIDE4MCwgMzEsIDIxMiwgNTksIDE4MCwgMzEsIDI0NCwgNDcsIDE4MCwgMzEsIDI1NCwgMjU1LCAKKyAgICAxODAsIDMxLCAyMjMsIDkyLCAxODAsIDMxLCAyMjMsIDY4LCAxODAsIDMxLCAyNDUsIDIyOSwgMTgwLCAzMSwgMjM1LCA1OSwgCisgICAgMTgwLCAzMSwgMjQ5LCAxOTIsIDE4MCwgMzEsIDI0NSwgMTUwLCAxODAsIDMxLCAyNDYsIDYwLCAxODAsIDMxLCAyNTAsIAorICAgIDE1MywgMTgwLCAzMSwgMjQ4LCA5MCwgMTgwLCAzMSwgMjMsIDIyMywgNjcsIDE4MCwgMzEsIDIyNiwgODUsIDE4MCwgMzEsIAorICAgIDIzMywgNDAsIDE4MCwgMzEsIDI1MCwgNiwgMTgwLCAzMSwgMjM0LCA4MywgMTgwLCAzMSwgMjQzLCA5MywgMTgwLCAzMSwgCisgICAgMjE4LCAxMTQsIDE4MCwgMzEsIDIyNCwgMTMzLCAxODAsIDMxLCAyNDMsIDIzNSwgMTgwLCAzMSwgMjIzLCA2OSwgMTgwLCAKKyAgICAzMSwgMjMzLCA3NywgMTc3LCAyMzAsIDE2MiwgMTgwLCAzMSwgMjIzLCA2NSwgMTgwLCAzMSwgMjQyLCAxNzUsIDIxNiwgNDMsIAorICAgIDIzMSwgODEsIDE4MCwgMzEsIDI0NSwgMTUyLCAxODAsIDMxLCAyMTgsIDEyNiwgMTgwLCAzMSwgMjQyLCAxMzUsIDE4MCwgCisgICAgMzEsIDI0NSwgMTQ0LCAxODAsIDMxLCAyMjUsIDIzOSwgMTgwLCAzMSwgMjIyLCAyMjgsIDE4MCwgMzEsIDI0NCwgNjcsIAorICAgIDE4MCwgMzEsIDIxNCwgOCwgMTc3LCAyMTIsIDQ0LCAxODAsIDMxLCAyNDksIDIwMSwgMTgwLCAzMSwgMjMxLCA5NCwgMTgwLCAKKyAgICAzMSwgMjQ1LCA2OSwgMTgwLCAzMSwgMjE0LCAxNzIsIDE4MCwgMzEsIDI0NywgMjIwLCAxODAsIDMxLCAyNTAsIDgsIDIzMCwgCisgICAgMTE1LCAxODAsIDMxLCAyNDIsIDExMywgMTgwLCAzMSwgMjQzLCA5NCwgMjM2LCA2LCAxODAsIDMxLCAyMzEsIDE0NiwgMTgwLCAKKyAgICAzMSwgMjU1LCAxOSwgMTgwLCAzMSwgMjQ1LCAxNjUsIDE4MCwgMzEsIDI0NiwgMTE3LCAxODAsIDMxLCAyMTIsIDQyLCAxODAsIAorICAgIDMxLCAyMTksIDE1MiwgMTgwLCAzMSwgMjM1LCAyMjksIDE4MCwgMzEsIDI0OCwgNTAsIDE4MCwgMzEsIDI0OCwgMTY4LCAKKyAgICAxODAsIDMxLCAyNDcsIDIxNiwgMTgwLCAzMSwgMjQ1LCAzNywgMTgwLCAzMSwgMjIwLCAxMTcsIDE4MCwgMzEsIDIxOCwgCisgICAgMTMwLCAxODAsIDMxLCAyNDIsIDksIDE4MCwgMzEsIDI0OSwgMjIwLCAxODAsIDMxLCAyNTAsIDMsIDE4MCwgMzEsIDI0NCwgCisgICAgMTg1LCAxODAsIDMxLCAyNTQsIDIyMSwgMTgwLCAzMSwgMjQ5LCAyMTksIDE4MCwgMzEsIDIyNiwgMjAxLCAyMTYsIDE5NywgCisgICAgMjEzLCAyNDIsIDE4MCwgMzEsIDI0NywgMjQwLCAxODAsIDMxLCAyMzMsIDEzMCwgMTgwLCAzMSwgMjQ0LCAyMSwgMjQ5LCAKKyAgICAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDExMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDEwNSwgCisgICAgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE1OCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIAorICAgIDE2MSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE5MCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgCisgICAgMjEsIDE5NSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE5OSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIAorICAgIDE3NCwgMjEsIDE5NiwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDIwMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAKKyAgICAyMTYsIDI0NCwgMjEsIDExMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDEwNSwgMjQ5LCAxNTcsIDIyMiwgCisgICAgMjA0LCAyMTYsIDI0NCwgMjEsIDE1OCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE2MSwgMjQ5LCAxNTcsIAorICAgIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5MCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5NSwgMjQ5LCAKKyAgICAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5OSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5NiwgCisgICAgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDIwMSwgMTEsIDIzLCA2LCA2MSwgMTEsIDIzLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDYsIDI0OSwgNjgsIDExLCAyMywgNiwgNzYsIDExLCAyMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDYsIDc0LCAxMSwgMjMsIAorICAgIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDYsIDIzNSwgMjksIDExLCAyMywgNiwgMTU2LCAxMSwgMjMsIDYsIDE5NCwgMTEsIDIzLCAKKyAgICA2LCAyMzAsIDMwLCAxMSwgMjMsIDYsIDc4LCAxMSwgMjMsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDYsIDIyNCwgOTksIDExLCAKKyAgICAyMywgNiwgMTUzLCAxMSwgMjMsIDYsIDIyMiwgOTMsIDExLCAyMywgNiwgMjE3LCAxNTMsIDExLCAyMywgNiwgNjksIDExLCAKKyAgICAyMywgNiwgMjE0LCAxMDUsIDExLCAyMywgNiwgMjEyLCA5OCwgMTEsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDIzLCA2LCAyMTEsIAorICAgIDExNywgMTEsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCA0LCA2MSwgMTEsIDIzLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDQsIDI0OSwgNjgsIDExLCAyMywgNCwgNzYsIDExLCAyMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAKKyAgICA0LCAyNDMsIDIwOSwgMTEsIDIzLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDQsIDc0LCAxMSwgMjMsIDQsIDIzNSwgMTUwLCAxMSwgCisgICAgMjMsIDQsIDIzNSwgMjksIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5NCwgMTEsIDIzLCA0LCAyMzAsIDMwLCAxMSwgCisgICAgMjMsIDQsIDc4LCAxMSwgMjMsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDQsIDIyNCwgOTksIDExLCAyMywgNCwgMTUzLCAxMSwgCisgICAgMjMsIDQsIDIyMiwgOTMsIDExLCAyMywgNCwgMjE3LCAxNTMsIDExLCAyMywgNCwgNjksIDExLCAyMywgNCwgMjE0LCAxMDUsIAorICAgIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIDIzLCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE2NiwgMTEsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMzIsIAorICAgIDYsIDI0OSwgNjgsIDExLCAzMiwgNiwgNzYsIDExLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIAorICAgIDMyLCA2LCAyNDIsIDY3LCAxMSwgMzIsIDYsIDc0LCAxMSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzIsIDYsIDIzNSwgMjksIAorICAgIDExLCAzMiwgNiwgMTU2LCAxMSwgMzIsIDYsIDE5NCwgMTEsIDMyLCA2LCAyMzAsIDMwLCAxMSwgMzIsIDYsIDc4LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzIsIDYsIDIyNCwgOTksIDExLCAzMiwgNiwgMTUzLCAxMSwgMzIsIDYsIDIyMiwgOTMsIAorICAgIDExLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzMiwgNiwgNjksIDExLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzMiwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDMyLCA2LCAyMTEsIDExNywgMTEsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIAorICAgIDMyLCA0LCA2MSwgMTEsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzIsIDQsIDI0OSwgNjgsIAorICAgIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDMyLCA0LCA3NCwgCisgICAgMTEsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzIsIDQsIDE1NiwgMTEsIDMyLCA0LCAxOTQsIAorICAgIDExLCAzMiwgNCwgMjMwLCAzMCwgMTEsIDMyLCA0LCA3OCwgMTEsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDMyLCA0LCAyMjQsIAorICAgIDk5LCAxMSwgMzIsIDQsIDE1MywgMTEsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzIsIDQsIDIxNywgMTUzLCAxMSwgMzIsIDQsIAorICAgIDY5LCAxMSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzMiwgCisgICAgNCwgMjExLCAxMTcsIDExLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMywgMzIsIDYsIDYxLCAxMSwgMjMsIDMyLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAzMiwgNiwgMjUxLCA3NCwgMTEsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDIzLCAzMiwgNiwgNzYsIAorICAgIDExLCAyMywgMzIsIDYsIDI0NSwgMTQsIDExLCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDMyLCA2LCAyNDIsIDY3LCAKKyAgICAxMSwgMjMsIDMyLCA2LCA3NCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAyMywgMzIsIDYsIDIzNSwgMjksIDExLCAKKyAgICAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDMyLCAKKyAgICA2LCA3OCwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAyMywgMzIsIDYsIDIyNCwgOTksIDExLCAyMywgMzIsIDYsIAorICAgIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MywgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAyMywgMzIsIDYsIDY5LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjExLCAxNzgsIAorICAgIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNCwgNjEsIDExLCAKKyAgICAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA0LCAyNDksIDY4LCAxMSwgCisgICAgMjMsIDMyLCA0LCA3NiwgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNCwgMjQzLCAyMDksIDExLCAyMywgCisgICAgMzIsIDQsIDI0MiwgNjcsIDExLCAyMywgMzIsIDQsIDc0LCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgCisgICAgNCwgMjM1LCAyOSwgMTEsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMjMsIDMyLCA0LCAxOTQsIDExLCAyMywgMzIsIDQsIDIzMCwgCisgICAgMzAsIDExLCAyMywgMzIsIDQsIDc4LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMjMsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA0LCAyMTcsIDE1MywgMTEsIAorICAgIDIzLCAzMiwgNCwgNjksIDExLCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgCisgICAgMTE5LCA2LCA2MSwgMTEsIDExOSwgNiwgMjUxLCA3NCwgMTEsIDExOSwgNiwgMjQ5LCA2OCwgMTEsIDExOSwgNiwgMjQzLCAKKyAgICAyMDksIDExLCAxMTksIDYsIDIzNSwgMTUwLCAxMSwgMTE5LCA2LCAyMzUsIDI5LCAxMSwgMTE5LCA2LCAyMzAsIDMwLCAxMSwgCisgICAgMTE5LCA2LCA3OCwgMTEsIDExOSwgNiwgMjI2LCAxMDksIDExLCAxMTksIDYsIDIyNCwgOTksIDExLCAxMTksIDYsIDIyMiwgCisgICAgOTMsIDExLCAxMTksIDYsIDIxNywgMTUzLCAxMSwgMTE5LCA2LCA2OSwgMTEsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAxMTksIAorICAgIDYsIDIxMiwgOTgsIDExLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMTE5LCA2LCAyMTEsIDExNywgMTEsIDExOSwgNiwgMjEwLCAKKyAgICAxNTksIDExLCAxMTksIDQsIDYxLCAxMSwgMTE5LCA0LCAyNTMsIDE2NiwgMTEsIDExOSwgNCwgMjUxLCA3NCwgMTEsIDExOSwgCisgICAgNCwgMjQ5LCA2OCwgMTEsIDExOSwgNCwgMjQ1LCAxNCwgMTEsIDExOSwgNCwgMjQyLCA2NywgMTEsIDExOSwgNCwgNzQsIDExLCAKKyAgICAxMTksIDQsIDIzNSwgMTUwLCAxMSwgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMTE5LCA0LCAxNTYsIDExLCAxMTksIDQsIDE5NCwgCisgICAgMTEsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDExOSwgNCwgMjI2LCAxMDksIDExLCAxMTksIDQsIDIyNCwgOTksIDExLCAxMTksIAorICAgIDQsIDE1MywgMTEsIDExOSwgNCwgMjIyLCA5MywgMTEsIDExOSwgNCwgMjE3LCAxNTMsIDExLCAxMTksIDQsIDY5LCAxMSwgCisgICAgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDExOSwgNCwgMjExLCAxNzgsIDExLCAxMTksIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDYsIDYxLCAxMSwgMjMsIDExOSwgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNiwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDc2LCAxMSwgMjMsIDExOSwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjQyLCA2NywgMTEsIDIzLCAxMTksIDYsIDc0LCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTk0LCAxMSwgMjMsIDExOSwgNiwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAxMTksIDYsIDc4LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA2LCAyMjQsIAorICAgIDk5LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDYsIDIxNywgCisgICAgMTUzLCAxMSwgMjMsIDExOSwgNiwgNjksIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIDIxMiwgCisgICAgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjgsIDExLCAyMywgMTE5LCA0LCA3NiwgMTEsIDIzLCAxMTksIDQsIAorICAgIDI0NSwgMTQsIDExLCAyMywgMTE5LCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAxMTksIDQsIDI0MiwgNjcsIDExLCAyMywgMTE5LCAKKyAgICA0LCA3NCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAyOSwgMTEsIDIzLCAxMTksIDQsIAorICAgIDE1NiwgMTEsIDIzLCAxMTksIDQsIDE5NCwgMTEsIDIzLCAxMTksIDQsIDIzMCwgMzAsIDExLCAyMywgMTE5LCA0LCA3OCwgCisgICAgMTEsIDIzLCAxMTksIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDIzLCAxMTksIDQsIDE1MywgCisgICAgMTEsIDIzLCAxMTksIDQsIDIyMiwgOTMsIDExLCAyMywgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDIzLCAxMTksIDQsIDY5LCAKICAgICAxMSwgMjMsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMjMsIDExOSwgNCwgMjExLCAKICAgICAxNzgsIDExLCAyMywgMTE5LCA0LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMTMzLCA2LCA2MSwgCi0gICAgMTEsIDEzMywgNiwgMjUzLCAxNTgsIDExLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAxMzMsIDYsIDc1LCAxMSwgMTMzLCA2LCAKLSAgICAyNDUsIDYsIDExLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMTMzLCA2LCAyMzUsIDE0NCwgMTEsIDEzMywgNiwgMjM1LCAyMywgCi0gICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTMsIDExLCAxMzMsIDYsIDIzMCwgMjUsIDExLCAxMzMsIDYsIDc2LCAKLSAgICAxMSwgMTMzLCA2LCAyMjYsIDEwNSwgMTEsIDEzMywgNiwgMjI0LCA5NiwgMTEsIDEzMywgNiwgMjIyLCA5MSwgMTEsIDEzMywgCi0gICAgNiwgMjE3LCAxNTIsIDExLCAxMzMsIDYsIDcwLCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCisgICAgMTEsIDEzMywgNiwgMjUzLCAxNjYsIDExLCAxMzMsIDYsIDI0OSwgNjgsIDExLCAxMzMsIDYsIDc2LCAxMSwgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTMzLCA2LCAyNDMsIDIwOSwgMTEsIDEzMywgNiwgMjM1LCAxNTAsIDExLCAxMzMsIDYsIDIzNSwgMjksIAorICAgIDExLCAxMzMsIDYsIDE1NiwgMTEsIDEzMywgNiwgMTk0LCAxMSwgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMTMzLCA2LCA3OCwgCisgICAgMTEsIDEzMywgNiwgMjI2LCAxMDksIDExLCAxMzMsIDYsIDIyNCwgOTksIDExLCAxMzMsIDYsIDIyMiwgOTMsIDExLCAxMzMsIAorICAgIDYsIDIxNywgMTUzLCAxMSwgMTMzLCA2LCA2OSwgMTEsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAxMzMsIDYsIDIxMiwgOTgsIAogICAgIDExLCAxMzMsIDYsIDIxMSwgMTc4LCAxMSwgMTMzLCA2LCAyMTEsIDExNywgMTEsIDEzMywgNCwgNjEsIDExLCAxMzMsIDQsIAotICAgIDI1MywgMTU4LCAxMSwgMTMzLCA0LCAyNTEsIDY2LCAxMSwgMTMzLCA0LCAyNDksIDYwLCAxMSwgMTMzLCA0LCA3NSwgMTEsIAotICAgIDEzMywgNCwgMjQ1LCA2LCAxMSwgMTMzLCA0LCAyNDMsIDIwMiwgMTEsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDEzMywgNCwgCi0gICAgNzMsIDExLCAxMzMsIDQsIDIzNSwgMTQ0LCAxMSwgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAotICAgIDQsIDE5MywgMTEsIDEzMywgNCwgMjMwLCAyNSwgMTEsIDEzMywgNCwgNzYsIDExLCAxMzMsIDQsIDIyNiwgMTA1LCAxMSwgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTEsIDExLCAxMzMsIDQsIDIxNywgCi0gICAgMTUyLCAxMSwgMTMzLCA0LCA3MCwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAorICAgIDI1MywgMTY2LCAxMSwgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMTMzLCA0LCAyNDksIDY4LCAxMSwgMTMzLCA0LCA3NiwgMTEsIAorICAgIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDEzMywgNCwgMjQzLCAyMDksIDExLCAxMzMsIDQsIDI0MiwgNjcsIDExLCAxMzMsIDQsIAorICAgIDc0LCAxMSwgMTMzLCA0LCAyMzUsIDE1MCwgMTEsIDEzMywgNCwgMjM1LCAyOSwgMTEsIDEzMywgNCwgMTU2LCAxMSwgMTMzLCAKKyAgICA0LCAxOTQsIDExLCAxMzMsIDQsIDIzMCwgMzAsIDExLCAxMzMsIDQsIDc4LCAxMSwgMTMzLCA0LCAyMjYsIDEwOSwgMTEsIAorICAgIDEzMywgNCwgMjI0LCA5OSwgMTEsIDEzMywgNCwgMTUzLCAxMSwgMTMzLCA0LCAyMjIsIDkzLCAxMSwgMTMzLCA0LCAyMTcsIAorICAgIDE1MywgMTEsIDEzMywgNCwgNjksIDExLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMTMzLCAKICAgICA0LCAyMTEsIDE3OCwgMTEsIDEzMywgNCwgMjExLCAxMTcsIDExLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMTM5LCA2LCA2MSwgCi0gICAgMTEsIDEzOSwgNiwgMjUzLCAxNTgsIDExLCAxMzksIDYsIDI0OSwgNjAsIDExLCAxMzksIDYsIDc1LCAxMSwgMTM5LCA2LCAKLSAgICAyNDUsIDYsIDExLCAxMzksIDYsIDI0MywgMjAyLCAxMSwgMTM5LCA2LCA3MywgMTEsIDEzOSwgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAxMzksIDYsIDIzNSwgMjMsIDExLCAxMzksIDYsIDE1NiwgMTEsIDEzOSwgNiwgMTkzLCAxMSwgMTM5LCA2LCA3NiwgMTEsIAotICAgIDEzOSwgNiwgMjIyLCA5MSwgMTEsIDEzOSwgNiwgMjE3LCAxNTIsIDExLCAxMzksIDYsIDcwLCAxMSwgMTM5LCA2LCAyMTQsIAorICAgIDExLCAxMzksIDYsIDI1MywgMTY2LCAxMSwgMTM5LCA2LCAyNDksIDY4LCAxMSwgMTM5LCA2LCA3NiwgMTEsIDEzOSwgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDEzOSwgNiwgMjQzLCAyMDksIDExLCAxMzksIDYsIDc0LCAxMSwgMTM5LCA2LCAyMzUsIDE1MCwgMTEsIAorICAgIDEzOSwgNiwgMjM1LCAyOSwgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTQsIDExLCAxMzksIDYsIDc4LCAxMSwgCisgICAgMTM5LCA2LCAyMjIsIDkzLCAxMSwgMTM5LCA2LCAyMTcsIDE1MywgMTEsIDEzOSwgNiwgNjksIDExLCAxMzksIDYsIDIxNCwgCiAgICAgMTA1LCAxMSwgMTM5LCA2LCAyMTIsIDk4LCAxMSwgMTM5LCA2LCAyMTEsIDE3OCwgMTEsIDEzOSwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAxMzksIDQsIDYxLCAxMSwgMTM5LCA0LCAyNTMsIDE1OCwgMTEsIDEzOSwgNCwgMjUxLCA2NiwgMTEsIDEzOSwgNCwgMjQ5LCAKLSAgICA2MCwgMTEsIDEzOSwgNCwgNzUsIDExLCAxMzksIDQsIDI0NSwgNiwgMTEsIDEzOSwgNCwgMjQzLCAyMDIsIDExLCAxMzksIDQsIAotICAgIDI0MiwgNjAsIDExLCAxMzksIDQsIDczLCAxMSwgMTM5LCA0LCAyMzUsIDE0NCwgMTEsIDEzOSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTMsIDExLCAxMzksIDQsIDIzMCwgMjUsIDExLCAxMzksIDQsIDc2LCAxMSwgCi0gICAgMTM5LCA0LCAyMjYsIDEwNSwgMTEsIDEzOSwgNCwgMjI0LCA5NiwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAyMjIsIAotICAgIDkxLCAxMSwgMTM5LCA0LCAyMTcsIDE1MiwgMTEsIDEzOSwgNCwgNzAsIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgMTM5LCAKLSAgICA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDIzLCAxMzMsIDYsIDI1MSwgCi0gICAgNjYsIDExLCAyMywgMTMzLCA2LCAyNDksIDYwLCAxMSwgMjMsIDEzMywgNiwgNzUsIDExLCAyMywgMTMzLCA2LCAyNDUsIDYsIAotICAgIDExLCAyMywgMTMzLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAxMzMsIDYsIDI0MiwgNjAsIDExLCAyMywgMTMzLCA2LCA3MywgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDEzMywgNiwgMjM1LCAyMywgMTEsIDIzLCAxMzMsIDYsIDE1NiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDE5MywgMTEsIDIzLCAxMzMsIDYsIDIzMCwgMjUsIDExLCAyMywgMTMzLCA2LCA3NiwgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjI0LCA5NiwgMTEsIDIzLCAxMzMsIDYsIDE1MywgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIyMiwgOTEsIDExLCAyMywgMTMzLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCAxMzMsIDYsIDcwLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjE0LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxNzgsIDExLCAKLSAgICAyMywgMTMzLCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNCwgNjEsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAyMywgMTMzLCA0LCAyNDksIDYwLCAKLSAgICAxMSwgMjMsIDEzMywgNCwgNzUsIDExLCAyMywgMTMzLCA0LCAyNDUsIDYsIDExLCAyMywgMTMzLCA0LCAyNDMsIDIwMiwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI0MiwgNjAsIDExLCAyMywgMTMzLCA0LCA3MywgMTEsIDIzLCAxMzMsIDQsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjM1LCAyMywgMTEsIDIzLCAxMzMsIDQsIDE1NiwgMTEsIDIzLCAxMzMsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIzMCwgMjUsIDExLCAyMywgMTMzLCA0LCA3NiwgMTEsIDIzLCAxMzMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjI0LCA5NiwgMTEsIDIzLCAxMzMsIDQsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDIyMiwgOTEsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMTcsIDE1MiwgMTEsIDIzLCAxMzMsIDQsIDcwLCAxMSwgMjMsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxNzgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDYsIDYxLCAxMSwgMzUsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDYsIDI1MSwgCi0gICAgNjYsIDExLCAzNSwgNiwgMjQ5LCA2MCwgMTEsIDM1LCA2LCA3NSwgMTEsIDM1LCA2LCAyNDUsIDYsIDExLCAzNSwgNiwgMjQzLCAKLSAgICAyMDIsIDExLCAzNSwgNiwgMjQyLCA2MCwgMTEsIDM1LCA2LCA3MywgMTEsIDM1LCA2LCAyMzUsIDE0NCwgMTEsIDM1LCA2LCAKLSAgICAyMzUsIDIzLCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTMsIDExLCAzNSwgNiwgMjMwLCAyNSwgMTEsIDM1LCA2LCAKLSAgICA3NiwgMTEsIDM1LCA2LCAyMjYsIDEwNSwgMTEsIDM1LCA2LCAyMjQsIDk2LCAxMSwgMzUsIDYsIDE1MywgMTEsIDM1LCA2LCAKLSAgICAyMjIsIDkxLCAxMSwgMzUsIDYsIDIxNywgMTUyLCAxMSwgMzUsIDYsIDcwLCAxMSwgMzUsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIAotICAgIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAxMTcsIDExLCAzNSwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNTgsIDExLCAzNSwgNCwgMjUxLCA2NiwgMTEsIDM1LCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMzUsIDQsIDc1LCAxMSwgMzUsIDQsIDI0NSwgNiwgMTEsIDM1LCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAKLSAgICA0LCAyNDIsIDYwLCAxMSwgMzUsIDQsIDczLCAxMSwgMzUsIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgNCwgMTU2LCAxMSwgMzUsIDQsIDE5MywgMTEsIDM1LCA0LCAyMzAsIDI1LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIAotICAgIDIyNiwgMTA1LCAxMSwgMzUsIDQsIDIyNCwgOTYsIDExLCAzNSwgNCwgMTUzLCAxMSwgMzUsIDQsIDIyMiwgOTEsIDExLCAzNSwgCi0gICAgNCwgMjE3LCAxNTIsIDExLCAzNSwgNCwgNzAsIDExLCAzNSwgNCwgMjE0LCAxMDUsIDExLCAzNSwgNCwgMjEyLCA5OCwgMTEsIAotICAgIDM1LCA0LCAyMTEsIDE3OCwgMTEsIDM1LCA0LCAyMTEsIDExNywgMTEsIDM1LCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNiwgCi0gICAgNjEsIDExLCAzNSwgMjMsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCA2LCAyNDksIAotICAgIDYwLCAxMSwgMzUsIDIzLCA2LCA3NSwgMTEsIDM1LCAyMywgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDIwMiwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNiwgNzMsIDExLCAzNSwgMjMsIDYsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMzUsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA2LCAxNTYsIDExLCAzNSwgMjMsIDYsIDE5MywgMTEsIDM1LCAyMywgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMzUsIDIzLCA2LCAxNTMsIDExLCAzNSwgMjMsIDYsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDYsIDIxNywgCi0gICAgMTUyLCAxMSwgMzUsIDIzLCA2LCA3MCwgMTEsIDM1LCAyMywgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDYsIDIxMiwgOTgsIAotICAgIDExLCAzNSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDExNywgMTEsIDM1LCAyMywgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzNSwgMjMsIDQsIDYxLCAxMSwgMzUsIDIzLCA0LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgNCwgMjUxLCA2NiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgNCwgNzUsIDExLCAzNSwgMjMsIDQsIDI0NSwgNiwgMTEsIDM1LCAKLSAgICAyMywgNCwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDQsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDQsIDczLCAxMSwgMzUsIDIzLCAKLSAgICA0LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyMywgMTEsIDM1LCAyMywgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAxOTMsIDExLCAzNSwgMjMsIDQsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDQsIDc2LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwNSwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjI0LCA5NiwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgMzUsIDIzLCA0LCAyMjIsIDkxLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAyMywgNCwgNzAsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMzIsIAotICAgIDYsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDYsIDc1LCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyNDUsIDYsIDExLCAzNSwgMzIsIDYsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDMyLCA2LCAKLSAgICA3MywgMTEsIDM1LCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMzIsIDYsIDE1NiwgCi0gICAgMTEsIDM1LCAzMiwgNiwgMTkzLCAxMSwgMzUsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCA2LCA3NiwgMTEsIDM1LCAKLSAgICAzMiwgNiwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDYsIDE1MywgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNiwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDYsIDcwLCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNiwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNCwgNjEsIDExLCAzNSwgMzIsIDQsIDI1MywgCi0gICAgMTU4LCAxMSwgMzUsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDMyLCA0LCAyNDksIDYwLCAxMSwgMzUsIDMyLCA0LCA3NSwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAzMiwgNCwgMjQyLCA2MCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgNzMsIDExLCAzNSwgMzIsIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDMyLCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMzUsIDMyLCA0LCAxNTYsIDExLCAzNSwgMzIsIDQsIDE5MywgMTEsIDM1LCAzMiwgNCwgMjMwLCAyNSwgMTEsIDM1LCAzMiwgCi0gICAgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDMyLCA0LCAKLSAgICAxNTMsIDExLCAzNSwgMzIsIDQsIDIyMiwgOTEsIDExLCAzNSwgMzIsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDMyLCA0LCA3MCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNCwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA2LCA2MSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUxLCA2NiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDI0OSwgNjAsIDExLCAzNSwgMjMsIDMyLCA2LCA3NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDYsIDI0MywgMjAyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDczLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAyNSwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDc2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUyLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgNzAsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgCi0gICAgMTU4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCA3NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgMzIsIDQsIDczLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAKLSAgICAxNDQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgMzIsIDQsIDc2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMTUzLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCi0gICAgNzAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMzAsIDEzOCwgNiwgNjEsIDExLCAyMzAsIDEzOCwgNiwgMjUzLCAxNTgsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjUxLCA2NiwgMTEsIDIzMCwgMTM4LCA2LCAyNDksIDYwLCAxMSwgMjMwLCAxMzgsIDYsIDc1LCAxMSwgMjMwLCAxMzgsIDYsIAotICAgIDI0NSwgNiwgMTEsIDIzMCwgMTM4LCA2LCAyNDMsIDIwMiwgMTEsIDIzMCwgMTM4LCA2LCAyNDIsIDYwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDczLCAxMSwgMjMwLCAxMzgsIDYsIDIzNSwgMTQ0LCAxMSwgMjMwLCAxMzgsIDYsIDIzNSwgMjMsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgMTU2LCAxMSwgMjMwLCAxMzgsIDYsIDE5MywgMTEsIDIzMCwgMTM4LCA2LCAyMzAsIDI1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDc2LCAxMSwgMjMwLCAxMzgsIDYsIDIyNiwgMTA1LCAxMSwgMjMwLCAxMzgsIDYsIDIyNCwgOTYsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgMTUzLCAxMSwgMjMwLCAxMzgsIDYsIDIyMiwgOTEsIDExLCAyMzAsIDEzOCwgNiwgMjE3LCAxNTIsIDExLCAKLSAgICAyMzAsIDEzOCwgNiwgNzAsIDExLCAyMzAsIDEzOCwgNiwgMjE0LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjEyLCA5OCwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTM4LCA2LCAyMTEsIDExNywgMTEsIDIzMCwgMTM4LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA0LCA2MSwgMTEsIDIzMCwgMTM4LCA0LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDQsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNCwgNzUsIDExLCAyMzAsIDEzOCwgNCwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDQsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDQsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgNzMsIDExLCAyMzAsIDEzOCwgNCwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNCwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCAxNTYsIDExLCAyMzAsIDEzOCwgNCwgMTkzLCAxMSwgMjMwLCAxMzgsIDQsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgNzYsIDExLCAyMzAsIDEzOCwgNCwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNCwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCAxNTMsIDExLCAyMzAsIDEzOCwgNCwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA0LCA3MCwgMTEsIDIzMCwgMTM4LCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDQsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTE5LCA3MywgMTEsIDMyLCA0LCAyNDcsIDExOSwgMjM1LCAxNDQsIDExLCAyMywgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAyMywgNiwgMjUyLCAyNiwgMTEsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDIzLCA2LCAyNDgsIDU0LCAKLSAgICAxMSwgMjMsIDYsIDI0NSwgMTAwLCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCA2MywgMTEsIDIzLCA2LCAKLSAgICAyMTYsIDE3OSwgMTEsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDIzLCA2LCAyMzQsIDIyMiwgMTEsIDIzLCA2LCAyMzMsIDk4LCAKLSAgICAxMSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMjMsIDYsIDIyNywgMjM3LCAxMSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDYsIAotICAgIDIyNiwgMTk5LCAxMSwgMjMsIDYsIDIyNSwgMTA4LCAxMSwgMjMsIDYsIDIyMywgMzcsIDExLCAyMywgNiwgMjE2LCAxODAsIAotICAgIDg3LCAxMSwgMjMsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDYsIDIxNywgNDEsIDExLCAyMywgNiwgMjE0LCAxNTcsIDExLCAyMywgCi0gICAgNiwgMjI1LCAxMzMsIDExLCAyMywgNiwgMjUwLCAxMTAsIDExLCAyMywgNiwgMjI0LCAxNjEsIDExLCAyMywgNiwgMjI2LCAKLSAgICAyMDEsIDExLCAyMywgMjI5LCAyMjEsIDExLCAyMywgNCwgMjU0LCAxNDMsIDExLCAyMywgNCwgMjUyLCAyNiwgMTEsIDIzLCAKLSAgICA0LCAyNDMsIDEwNywgMTEsIDIzLCA0LCAyNDgsIDU0LCAxMSwgMjMsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDQsIDIxMCwgODUsIAotICAgIDExLCAyMywgNCwgMjQ1LCA2MywgMTEsIDIzLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCA0LCAyMzUsIDE4NSwgMTEsIDIzLCA0LCAKLSAgICAyMzQsIDIyMiwgMTEsIDIzLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDQsIDIzMCwgMTAyLCAxMSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDQsIDIyNiwgMTk5LCAxMSwgMjMsIDQsIDIyNSwgMTA4LCAxMSwgMjMsIDQsIAotICAgIDIyMywgMzcsIDExLCAyMywgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMjMsIDQsIDIxOSwgMTc3LCAxMSwgMjMsIDQsIDIxNywgCi0gICAgNDEsIDExLCAyMywgNCwgMjE0LCAxNTcsIDExLCAyMywgNCwgMjI1LCAxMzMsIDExLCAyMywgNCwgMjUwLCAxMTAsIDExLCAKLSAgICAyMywgNCwgMjI0LCAxNjEsIDExLCAyMywgNCwgMjI2LCAyMDEsIDExLCAyMywgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIAotICAgIDI0NSwgMTAxLCA4NywgMTEsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAyMywgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDIzLCAyMjUsIDEwOSwgODcsIDExLCAzMiwgNiwgMjU0LCAxNDMsIAotICAgIDExLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDMyLCA2LCAyNDMsIDEwNywgMTEsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzIsIDYsIAotICAgIDI0NSwgMTAwLCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDMyLCA2LCAyMTYsIDE3OSwgCi0gICAgMTEsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDMyLCA2LCAyMzMsIDk4LCAxMSwgMzIsIDYsIAotICAgIDIzMCwgMTAyLCAxMSwgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzIsIDYsIDIyNiwgMTk5LCAKLSAgICAxMSwgMzIsIDYsIDIyNSwgMTA4LCAxMSwgMzIsIDYsIDIyMywgMzcsIDExLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzIsIAotICAgIDYsIDIxOSwgMTc3LCAxMSwgMzIsIDYsIDIxNywgNDEsIDExLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAzMiwgNiwgMjI1LCAKLSAgICAxMzMsIDExLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAKLSAgICAzMiwgMjI5LCAyMjEsIDExLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDMyLCA0LCAyNDMsIAotICAgIDEwNywgMTEsIDMyLCA0LCAyNDgsIDU0LCAxMSwgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMzIsIDQsIDIxMCwgODUsIDExLCAzMiwgCi0gICAgNCwgMjQ1LCA2MywgMTEsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDMyLCA0LCAyMzQsIAotICAgIDIyMiwgMTEsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMzIsIDQsIDIyNywgMjM3LCAxMSwgCi0gICAgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzIsIDQsIDIyNiwgMTk5LCAxMSwgMzIsIDQsIDIyNSwgMTA4LCAxMSwgMzIsIDQsIAotICAgIDIyMywgMzcsIDExLCAzMiwgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzIsIDQsIDIxOSwgMTc3LCAxMSwgMzIsIDQsIDIxNywgCi0gICAgNDEsIDExLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzMiwgNCwgMjI1LCAxMzMsIDExLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAKLSAgICAzMiwgNCwgMjI0LCAxNjEsIDExLCAzMiwgNCwgMjI2LCAyMDEsIDExLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzIsIAotICAgIDI0NSwgMTAxLCA4NywgMTEsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzIsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAyMywgMzIsIDYsIDI1NCwgCi0gICAgMTQzLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDEwNywgMTEsIDIzLCAzMiwgNiwgMjQ4LCAKLSAgICA1NCwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIDI0NSwgCi0gICAgNjMsIDExLCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDIzLCAzMiwgNiwgMjM0LCAKLSAgICAyMjIsIDExLCAyMywgMzIsIDYsIDIzMywgOTgsIDExLCAyMywgMzIsIDYsIDIzMCwgMTAyLCAxMSwgMjMsIDMyLCA2LCAyMjcsIAotICAgIDIzNywgMTEsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAyMywgMzIsIDYsIDIyNiwgMTk5LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyMjUsIDEwOCwgMTEsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMjMsIAotICAgIDMyLCA2LCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIyNSwgMTMzLCAxMSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDIzLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAyMywgMzIsIDYsIDIyNiwgMjAxLCAxMSwgMjMsIDMyLCAyMjksIDIyMSwgMTEsIDIzLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAyMywgMzIsIDQsIDI1MiwgMjYsIDExLCAyMywgMzIsIDQsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjE2LCAxNzksIDExLCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNCwgMjI2LCAxOTksIDExLCAyMywgMzIsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMjMsIDMyLCA0LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA0LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAyMywgMzIsIDQsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMjMsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAyMywgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDM1LCAyMywgNiwgMjUyLCAyNiwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0OCwgNTQsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNDUsIDYzLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIzNCwgMjIyLCAxMSwgMzUsIDIzLCA2LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjI3LCAyMzcsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgCi0gICAgNiwgMjI1LCAxMDgsIDExLCAzNSwgMjMsIDYsIDIyMywgMzcsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgNiwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDYsIDIxNywgNDEsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTU3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgNiwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDYsIDIyNCwgMTYxLCAxMSwgCi0gICAgMzUsIDIzLCA2LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMjI5LCAyMjEsIDExLCAzNSwgMjMsIDQsIDI1NCwgMTQzLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNCwgMjQ4LCA1NCwgMTEsIAotICAgIDM1LCAyMywgNCwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDQsIDI0NSwgNjMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDQsIDIzMywgOTgsIDExLCAzNSwgMjMsIDQsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDM1LCAyMywgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCA0LCAyMjUsIAotICAgIDEwOCwgMTEsIDM1LCAyMywgNCwgMjIzLCAzNywgMTEsIDM1LCAyMywgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAyMTksIDE3NywgMTEsIDM1LCAyMywgNCwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA0LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNCwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIAotICAgIDQsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzNSwgMjMsIDI0NSwgMTAxLCA4NywgCi0gICAgMTEsIDM1LCAyMywgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyMywgODcsIDExLCAzNSwgMjMsIDIyNSwgMTM0LCAKLSAgICA4NywgMTEsIDM1LCAyMywgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE3OSwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzMsIAotICAgIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgCi0gICAgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIAotICAgIDEwOCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgNDEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTQsIAotICAgIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAzMiwgMjI5LCAKLSAgICAyMjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDM1LCAyMywgMzIsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDEwMCwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjI3LCAyMzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTk5LCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIDQxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDIwMSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTAxLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgCi0gICAgMjMsIDYsIDI0NywgMjI3LCAxMSwgMjMsIDQsIDI0NywgMjI3LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIDIxLCAKLSAgICAxMTAsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIDE4OSwgCi0gICAgMTEsIDIzLCAyMSwgMTk0LCAxMSwgMjMsIDIxLCAxOTgsIDExLCAyMywgMjEsIDE5NSwgMTEsIDIzLCAyMSwgMjAwLCAxMSwgCi0gICAgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMCwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIDE1OCwgCi0gICAgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE4OSwgMTEsIDEzOSwgMjEsIDE5NCwgMTEsIDEzOSwgMjEsIDE5OCwgCi0gICAgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIDIwMCwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgMTEwLCAKLSAgICAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxODksIDExLCAKLSAgICAzNSwgMjEsIDE5NCwgMTEsIDM1LCAyMSwgMTk4LCAxMSwgMzUsIDIxLCAxOTUsIDExLCAzNSwgMjEsIDIwMCwgMTEsIDM1LCAKLSAgICAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTAsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgMjMsIAotICAgIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxODksIDExLCAzNSwgMjMsIDIxLCAxOTQsIAotICAgIDExLCAzNSwgMjMsIDIxLCAxOTgsIDExLCAzNSwgMjMsIDIxLCAxOTUsIDExLCAzNSwgMjMsIDIxLCAyMDAsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDIxMCwgODYsIDExLCAyMzAsIDEzOCwgMjEsIDExMCwgMTEsIDIzMCwgMTM4LCAyMSwgMTA1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDIxLCAxNTgsIDExLCAyMzAsIDEzOCwgMjEsIDE2MSwgMTEsIDIzMCwgMTM4LCAyMSwgMTg5LCAxMSwgMjMwLCAxMzgsIAotICAgIDIxLCAxOTQsIDExLCAyMzAsIDEzOCwgMjEsIDE5OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk1LCAxMSwgMjMwLCAxMzgsIDIxLCAKLSAgICAyMDAsIDEwLCAxMSwgMjU0LCAxNzAsIDEwLCAxMSwgMjUyLCA1NCwgMTAsIDExLCAyMzUsIDEyMywgMTAsIDExLCAyNDgsIAotICAgIDE5NSwgMTAsIDExLCAyMTIsIDMwLCAxMCwgMTEsIDIxMCwgMTA4LCAxMCwgMTEsIDI0MiwgMzcsIDEwLCAxMSwgMjE3LCA4MCwgCi0gICAgMTAsIDExLCAyMTEsIDQzLCAxMCwgMTEsIDIzNCwgMjUwLCAxMCwgMTEsIDIzMywgMTAyLCAxMCwgMTEsIDIzMSwgNzgsIDEwLCAKLSAgICAxMSwgMjI4LCA2MiwgMTAsIDExLCAyMjEsIDE2NiwgMTAsIDExLCAyNTQsIDE5NiwgMTAsIDExLCAyNDQsIDE0MiwgMTAsIAotICAgIDExLCAyMjIsIDI2LCAxMCwgMTEsIDIyNCwgODEsIDEwLCAxMSwgMjIzLCA5NSwgMTAsIDExLCAyMjAsIDU5LCAxMCwgMTEsIAotICAgIDIxNywgNywgMTAsIDExLCAyMTYsIDE5MiwgMTAsIDExLCAyMzQsIDEyOSwgMTAsIDExLCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAyNDgsIDIxNiwgMTAsIDExLCAyMTAsIDExMSwgMTAsIDExLCAyNDIsIDI0NCwgMTAsIDExLCAyNDcsIDExOSwgMjUyLCA1NCwgCi0gICAgMTAsIDExLCAyNDcsIDExOSwgMjI4LCA2MiwgMTAsIDExLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMjQ3LCAxMTksIAotICAgIDIyNCwgODEsIDEwLCAxMSwgNjUsIDI1MiwgNTQsIDEwLCAxMSwgNjUsIDIzNSwgMTIzLCAxMCwgMTEsIDY1LCAyNDEsIDIxOCwgCi0gICAgMTAsIDExLCA2NSwgMjQyLCAzNywgMTAsIDExLCA2NSwgMjExLCA0MywgMTAsIDExLCA2NSwgMjM0LCAyNTAsIDEwLCAxMSwgCi0gICAgNjUsIDIzMywgMTAyLCAxMCwgMTEsIDY1LCAyMzEsIDc4LCAxMCwgMTEsIDY1LCAyMjgsIDYyLCAxMCwgMTEsIDY1LCAyMjEsIAotICAgIDE2NiwgMTAsIDExLCA2NSwgMjU0LCAxOTYsIDEwLCAxMSwgNjUsIDI0NCwgMTQyLCAxMCwgMTEsIDY1LCAyMjIsIDI2LCAxMCwgCi0gICAgMTEsIDY1LCAyMjQsIDgxLCAxMCwgMTEsIDY1LCAyMjAsIDU5LCAxMCwgMTEsIDY1LCAyMTcsIDcsIDEwLCAxMSwgNjUsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDY1LCAyMzQsIDEyOSwgMTAsIDExLCA2NSwgMjQ4LCAyMTYsIDEwLCAxMSwgNjUsIDI0MiwgCi0gICAgMjQ0LCAxMCwgMTEsIDIxNywgNzYsIDIzNSwgMTIzLCAxMCwgMTEsIDIxNywgNzYsIDI0MiwgMzcsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjExLCA0MywgMTAsIDExLCAyMTcsIDc2LCAyMzMsIDEwMiwgMTAsIDExLCAyMTcsIDc2LCAyMjgsIDYyLCAxMCwgMTEsIAotICAgIDIxNywgNzYsIDIyMSwgMTY2LCAxMCwgMTEsIDIxNywgNzYsIDI1NCwgMTk2LCAxMCwgMTEsIDIxNywgNzYsIDIyMiwgMjYsIAotICAgIDEwLCAxMSwgMjE3LCA3NiwgMjI0LCA4MSwgMTAsIDExLCAyMTcsIDc2LCAyMjAsIDU5LCAxMCwgMTEsIDIxNywgNzYsIDIzNCwgCi0gICAgMTI5LCAxMCwgMTEsIDIxNywgNzYsIDI0OCwgMjE2LCAxMCwgMTEsIDIxNywgNzYsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxNywgCi0gICAgNzYsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDIxNywgNzYsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyNTIsIDU0LCAxMCwgMTEsIDIxOCwgMTEwLCAyMzUsIDEyMywgMTAsIDExLCAyMTgsIDExMCwgMjQxLCAyMTgsIDEwLCAKLSAgICAxMSwgMjE4LCAxMTAsIDI0MiwgMzcsIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgODAsIDEwLCAxMSwgMjE4LCAxMTAsIDIxMSwgCi0gICAgNDMsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMjUwLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzEsIDc4LCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyMjgsIDYyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjEsIDE2NiwgMTAsIDExLCAyMTgsIDExMCwgMjU0LCAxOTYsIDEwLCAKLSAgICAxMSwgMjE4LCAxMTAsIDI0NCwgMTQyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjIsIDI2LCAxMCwgMTEsIDIxOCwgMTEwLCAyMjQsIAotICAgIDgxLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjAsIDU5LCAxMCwgMTEsIDIxOCwgMTEwLCAyMTcsIDcsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIxNiwgMTkyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzQsIDEyOSwgMTAsIDExLCAyMTgsIDExMCwgMjQ4LCAyMTYsIAotICAgIDEwLCAxMSwgMjE4LCAxMTAsIDIxMCwgMTExLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDIsIDI0NCwgMTAsIDExLCAyMTgsIDExMCwgCi0gICAgMjQ3LCAxMTksIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyMzIsIAotICAgIDEyMiwgMjU0LCAxNzAsIDEwLCAxMSwgMjMyLCAxMjIsIDI1MiwgNTQsIDEwLCAxMSwgMjMyLCAxMjIsIDIzNSwgMTIzLCAxMCwgCi0gICAgMTEsIDIzMiwgMTIyLCAyNDgsIDE5NSwgMTAsIDExLCAyMzIsIDEyMiwgMjQxLCAyMTgsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxMiwgMzAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMCwgMTA4LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDIsIDM3LCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMTcsIDgwLCAxMCwgMTEsIDIzMiwgMTIyLCAyMTEsIDQzLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzMsIDEwMiwgCi0gICAgMTAsIDExLCAyMzIsIDEyMiwgMjMxLCA3OCwgMTAsIDExLCAyMzIsIDEyMiwgMjI4LCA2MiwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjIxLCAxNjYsIDEwLCAxMSwgMjMyLCAxMjIsIDI1NCwgMTk2LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDQsIDE0MiwgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjIyLCAyNiwgMTAsIDExLCAyMzIsIDEyMiwgMjI0LCA4MSwgMTAsIDExLCAyMzIsIDEyMiwgMjIzLCA5NSwgCi0gICAgMTAsIDExLCAyMzIsIDEyMiwgMjIwLCA1OSwgMTAsIDExLCAyMzIsIDEyMiwgMjE3LCA3LCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMTYsIDE5MiwgMTAsIDExLCAyMzIsIDEyMiwgMjM0LCAxMjksIDEwLCAxMSwgMjMyLCAxMjIsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyNDgsIDIxNiwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMTEsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgCi0gICAgMjQ0LCAxMCwgMTEsIDEzOSwgMjUyLCA1NCwgMTAsIDExLCAxMzksIDIzNSwgMTIzLCAxMCwgMTEsIDEzOSwgMjQ4LCAxOTUsIAotICAgIDEwLCAxMSwgMTM5LCAyMTIsIDMwLCAxMCwgMTEsIDEzOSwgMjEwLCAxMDgsIDEwLCAxMSwgMTM5LCAyNDIsIDM3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE3LCA4MCwgMTAsIDExLCAxMzksIDIxMSwgNDMsIDEwLCAxMSwgMTM5LCAyMzMsIDEwMiwgMTAsIDExLCAKLSAgICAxMzksIDIzMSwgNzgsIDEwLCAxMSwgMTM5LCAyMjgsIDYyLCAxMCwgMTEsIDEzOSwgMjIxLCAxNjYsIDEwLCAxMSwgMTM5LCAKLSAgICAyNTQsIDE5NiwgMTAsIDExLCAxMzksIDI0NCwgMTQyLCAxMCwgMTEsIDEzOSwgMjIyLCAyNiwgMTAsIDExLCAxMzksIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMTM5LCAyMjMsIDk1LCAxMCwgMTEsIDEzOSwgMjIwLCA1OSwgMTAsIDExLCAxMzksIDIxNywgNywgMTAsIAotICAgIDExLCAxMzksIDIxNiwgMTkyLCAxMCwgMTEsIDEzOSwgMjM0LCAxMjksIDEwLCAxMSwgMTM5LCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAxMzksIDI0OCwgMjE2LCAxMCwgMTEsIDEzOSwgMjEwLCAxMTEsIDEwLCAxMSwgMTM5LCAyNDIsIDI0NCwgMTAsIDExLCAyMjYsIAotICAgIDE2OCwgNjYsIDIsIDEyMiwgMiwgMjE3LCA0MywgMTAsIDExLCAyMjYsIDE2OCwgMTIyLCAyLCAyNDgsIDE5NSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDUsIDIyMCwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjE5LCAyOCwgMjExLCAyMzksIDIzMSwgMjA1LCAKLSAgICA4NiwgMjEyLCA5LCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMjgsIDU2LCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMjMsIAotICAgIDExMSwgMjQ2LCA5NiwgMjMxLCAyMDUsIDg2LCAyNDIsIDEyNywgMjQ2LCA5NiwgMjMxLCAyMDUsIDg2LCA3MSwgMjQ2LCA5NiwgCi0gICAgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAxMzQsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUwLCAxNDEsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUwLCAxNDEsIAotICAgIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgCi0gICAgMTQxLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUyLCAKLSAgICAxNTMsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTM0LCA2NCwgMjUyLCAxNTMsIAotICAgIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUyLCAKLSAgICAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIAotICAgIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUwLCAzNCwgCi0gICAgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyMjUsIDI1LCAyMzEsIDIwNSwgODYsIDIyNiwgCi0gICAgMTU2LCAyMzEsIDIwNSwgODYsIDI1MiwgMTU0LCAyMzEsIDIwNSwgODYsIDI1MCwgNzAsIDIzMSwgMjA1LCA4NiwgMjE4LCAKLSAgICAyMzksIDIzMSwgMjA1LCA4NiwgMjE4LCAzOSwgMjMxLCAyMDUsIDg2LCAyNTMsIDE3OSwgMjMxLCAyMDUsIDg2LCAyMTEsIAotICAgIDIzMiwgMjMxLCAyMDUsIDg2LCAyMzUsIDYyLCAyMzEsIDIwNSwgODYsIDI1MiwgMTg0LCAxMzEsIDg2LCAyMDMsIDI1MiwgCi0gICAgMTg0LCAxMzEsIDg2LCAyNDEsIDQzLCAxMzEsIDg2LCAyNDEsIDQyLCAxMzEsIDg2LCAyNDEsIDQxLCAxMzEsIDg2LCAyNDEsIAotICAgIDQwLCAxMzEsIDg2LCAyNDEsIDM5LCAxMzEsIDg2LCAyNDEsIDM4LCAxMzEsIDg2LCAyNDEsIDM3LCAxMzEsIDg2LCAyNDEsIAotICAgIDM2LCAxMzEsIDg2LCAyNDEsIDM1LCAxMzEsIDg2LCAyNDEsIDM0LCAxMzEsIDg2LCAyNDEsIDMzLCAxMzEsIDg2LCAyNDEsIAotICAgIDMyLCAxMzEsIDg2LCAyNDEsIDMxLCAxMzEsIDg2LCAyNDEsIDMwLCAxMzEsIDg2LCAyNDEsIDI5LCAxMzEsIDg2LCAyNDEsIAotICAgIDI4LCAxMzEsIDg2LCAyNDEsIDI3LCAxMzEsIDg2LCAyNDEsIDI2LCAxMzEsIDg2LCAyNDEsIDI1LCAxMzEsIDg2LCAyNDEsIAotICAgIDI0LCAxMzEsIDg2LCAyNDEsIDIzLCAxMzEsIDg2LCAyNDEsIDIyLCAxMzEsIDg2LCAyNDEsIDIxLCAxMzEsIDg2LCAyNDEsIAotICAgIDIwLCAxMzEsIDg2LCAyNDEsIDE5LCAxMzEsIDg2LCAyNDEsIDE4LCAxMzEsIDg2LCAyNDEsIDE3LCAxMzEsIDg2LCAyNDEsIAotICAgIDE2LCAxMzEsIDg2LCAyNDEsIDE1LCAxMzEsIDg2LCAyNDEsIDE0LCAxMzEsIDg2LCAyNDEsIDEzLCAxMzEsIDg2LCAyNDEsIAotICAgIDEyLCAxMzEsIDg2LCAyNDEsIDExLCAxMzEsIDg2LCAyNDEsIDEwLCAxMzEsIDg2LCAyNDEsIDksIDEzMSwgODYsIDI0MSwgOCwgCi0gICAgMTMxLCA4NiwgMjQxLCA3LCAxMzEsIDg2LCAyNDEsIDYsIDEzMSwgODYsIDI0MSwgNSwgMTMxLCA4NiwgMjQxLCA0LCAxMzEsIAotICAgIDg2LCAyNDEsIDMsIDEzMSwgODYsIDI0MSwgMiwgMTMxLCA4NiwgMjQxLCAxLCAxMzEsIDg2LCAyNDEsIDAsIDEzMSwgODYsIAotICAgIDI0MCwgMjU1LCAxMzEsIDg2LCAyNDAsIDI1NCwgMTMxLCA4NiwgMjQwLCAyNTMsIDEzMSwgODYsIDI0MCwgMjUyLCAxMzEsIAotICAgIDg2LCAyNDAsIDI1MSwgMTMxLCA4NiwgNjcsIDI1MiwgMTg0LCAxMzEsIDg2LCAyMTMsIDIzOCwgMTMxLCA4NiwgMjEzLCAKLSAgICAyMzcsIDEzMSwgODYsIDIxMywgMjM2LCAxMzEsIDg2LCAyMTMsIDIzNSwgMTMxLCA4NiwgMjEzLCAyMzQsIDEzMSwgODYsIAotICAgIDIxMywgMjMzLCAxMzEsIDg2LCAyMTMsIDIzMiwgMTMxLCA4NiwgMjEzLCAyMzEsIDEzMSwgODYsIDIxMywgMjMwLCAxMzEsIAotICAgIDg2LCAyMTMsIDIyOSwgMTMxLCA4NiwgMjEzLCAyMjgsIDEzMSwgODYsIDIxMywgMjI3LCAxMzEsIDg2LCAyMTMsIDIyNiwgCi0gICAgMTMxLCA4NiwgMjEzLCAyMjUsIDEzMSwgODYsIDIxMywgMjI0LCAxMzEsIDg2LCAyMTMsIDIyMywgMTMxLCA4NiwgMjEzLCAKLSAgICAyMjIsIDEzMSwgODYsIDIxMywgMjIxLCAxMzEsIDg2LCAyMTMsIDIyMCwgMTMxLCA4NiwgMjEzLCAyMTksIDEzMSwgODYsIAotICAgIDIxMywgMjE4LCAxMzEsIDg2LCAyMTMsIDIxNywgMTMxLCA4NiwgMjEzLCAyMTYsIDEzMSwgODYsIDIxMywgMjE1LCAxMzEsIAotICAgIDg2LCAyMTMsIDIxNCwgMTMxLCA4NiwgMjEzLCAyMTMsIDEzMSwgODYsIDIxMywgMjEyLCAxMzEsIDg2LCAyMTMsIDIxMSwgCi0gICAgMTMxLCA4NiwgMjEzLCAyMTAsIDEzMSwgODYsIDIxMywgMjA5LCAxMzEsIDg2LCAyMTMsIDIwOCwgMTMxLCA4NiwgMjEzLCAKLSAgICAyMDcsIDEzMSwgODYsIDIxMywgMjA2LCAxMzEsIDg2LCAyMTMsIDIwNSwgMTMxLCA4NiwgMjEzLCAyMDQsIDEzMSwgODYsIAotICAgIDIxMywgMjAzLCAxMzEsIDg2LCAyMTMsIDIwMiwgMTMxLCA4NiwgMjEzLCAyMDEsIDEzMSwgODYsIDIxMywgMjAwLCAxMzEsIAotICAgIDg2LCAyMTMsIDE5OSwgMTMxLCA4NiwgMjEzLCAxOTgsIDEzMSwgODYsIDIxMywgMTk3LCAxMzEsIDg2LCAyMTMsIDE5NiwgCi0gICAgMTMxLCA4NiwgMjEzLCAxOTUsIDEzMSwgODYsIDIxMywgMTk0LCAxMzEsIDg2LCAyMTMsIDE5MywgMTMxLCA4NiwgMjEzLCAKLSAgICAxOTIsIDEzMSwgODYsIDIxMywgMTkxLCAxMzEsIDg2LCAyMTMsIDE5MCwgMjI1LCAzMywgMjUwLCAyNDMsIDI1MiwgMTg0LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDIxOSwgCi0gICAgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxOSwgCi0gICAgMTI1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDI0NSwgMTkzLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgMjE5LCAxNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCAKLSAgICA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjI0LCAxNSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgCi0gICAgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjQxLCAyMjUsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIxOSwgMTI1LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjM1LCAxMzksIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDEsIDIyNSwgMjI1LCAKLSAgICAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyNDEsIAotICAgIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgCi0gICAgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgCi0gICAgMTEsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIxOSwgMTI1LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCAKLSAgICA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjM1LCAxMzksIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDcsIDI0NywgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDg1LCAyMzUsIDYyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgCi0gICAgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ0LCA4MSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAxMjUsIDY0LCAyNDksIDI0MiwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgCi0gICAgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzUsIDEzOSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIAotICAgIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgNzEsIDIzNSwgNjIsIDIxLCAyMTAsIDg3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMTAsIDg3LCAyNDksIDIxOSwgMjEsIAotICAgIDEyMywgMjQ5LCAyMTksIDIxLCAxMTMsIDI0OSwgMjE5LCAyMSwgMTM0LCAyNDksIDIxOSwgMjEsIDI0NCwgMTEsIDI0OSwgCi0gICAgMjE5LCAyMSwgMjQ0LCA4MSwgMjQ5LCAyMTksIDIxLCAyMTksIDEyNSwgMjQ5LCAyMTksIDIxLCAyMjAsIDEyMiwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDUsIDE5MywgMjQ5LCAyMTksIDIxLCAyMjgsIDIwMCwgMjQ5LCAyMTksIDg4LCA3LCA2LCAxLCA2MSwgODgsIAotICAgIDcsIDYsIDEsIDI1MywgMTU4LCA4OCwgNywgNiwgMSwgMjUxLCA2NiwgODgsIDcsIDYsIDEsIDI0OSwgNjAsIDg4LCA3LCA2LCAKLSAgICAxLCA3NSwgODgsIDcsIDYsIDEsIDI0NSwgNiwgODgsIDcsIDYsIDEsIDI0MywgMjAyLCA4OCwgNywgNiwgMSwgMjQyLCA2MCwgCi0gICAgODgsIDcsIDYsIDEsIDczLCA4OCwgNywgNiwgMSwgMjM1LCAxNDQsIDg4LCA3LCA2LCAxLCAyMzUsIDIzLCA4OCwgNywgNiwgCi0gICAgMSwgMTU2LCA4OCwgNywgNiwgMSwgMTkzLCA4OCwgNywgNiwgMSwgMjMwLCAyNSwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgCi0gICAgNiwgMSwgMjI2LCAxMDUsIDg4LCA3LCA2LCAxLCAyMjQsIDk2LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCAKLSAgICA5MSwgODgsIDcsIDYsIDEsIDIxNywgMTUyLCA4OCwgNywgNiwgMSwgNzAsIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIAotICAgIDYsIDEsIDIxMiwgOTgsIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgCi0gICAgMjEwLCAxNTksIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDcsIDYsIDEsIDIyMiwgOTEsIDM3LCAzMiwgNywgNiwgMSwgCi0gICAgMjUxLCA2NiwgMzcsIDMyLCA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5MSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgCi0gICAgNjEsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgOTIsIDcsIDYsIDEsIDI1MSwgNjYsIDkyLCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICA5MiwgNywgNiwgMSwgNzUsIDkyLCA3LCA2LCAxLCAyNDUsIDYsIDkyLCA3LCA2LCAxLCAyNDMsIDIwMiwgOTIsIDcsIDYsIDEsIAotICAgIDI0MiwgNjAsIDkyLCA3LCA2LCAxLCA3MywgOTIsIDcsIDYsIDEsIDIzNSwgMTQ0LCA5MiwgNywgNiwgMSwgMjM1LCAyMywgCi0gICAgOTIsIDcsIDYsIDEsIDE1NiwgOTIsIDcsIDYsIDEsIDE5MywgOTIsIDcsIDYsIDEsIDIzMCwgMjUsIDkyLCA3LCA2LCAxLCAKLSAgICA3NiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA1LCA5MiwgNywgNiwgMSwgMjI0LCA5NiwgOTIsIDcsIDYsIDEsIDE1MywgOTIsIDcsIAotICAgIDYsIDEsIDIyMiwgOTEsIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDcwLCA5MiwgNywgNiwgMSwgMjE0LCAKLSAgICAxMDUsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCi0gICAgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCA5MiwgMjQwLCAyMDEsIDkyLCAyMzAsIDQ5LCA5MiwgMjIxLCAxODMsIDkyLCAyMTgsIAotICAgIDIyNiwgOTIsIDIyNCwgMjE4LCA5MiwgMjEyLCAyMywgMTUyLCAzNywgNywgNiwgMSwgNjEsIDE1MiwgMzcsIDcsIDYsIDEsIAotICAgIDI1MywgMTU4LCAxNTIsIDM3LCA3LCA2LCAxLCAyNTEsIDY2LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDksIDYwLCAxNTIsIDM3LCAKLSAgICA3LCA2LCAxLCA3NSwgMTUyLCAzNywgNywgNiwgMSwgMjQ1LCA2LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDMsIDIwMiwgMTUyLCAKLSAgICAzNywgNywgNiwgMSwgMjQyLCA2MCwgMTUyLCAzNywgNywgNiwgMSwgNzMsIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMTQ0LCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCAxNTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE5MywgCi0gICAgMTUyLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMTUyLCAzNywgNywgNiwgMSwgNzYsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNiwgCi0gICAgMTA1LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIAotICAgIDIyMiwgOTEsIDE1MiwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAxNTIsIDM3LCA3LCA2LCAxLCA3MCwgMTUyLCAzNywgNywgNiwgCi0gICAgMSwgMjE0LCAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgMTUyLCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDIyMywgMTU3LCAyMzEsIDk3LCA1MCwgCi0gICAgMjIzLCAxNTcsIDIzMSwgOTQsIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNTgsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIAotICAgIDc1LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIDkyLCA3LCA2LCAKLSAgICAxLCAyNDIsIDYwLCAxNTIsIDkyLCA3LCA2LCAxLCA3MywgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzNSwgMjMsIDE1MiwgOTIsIDcsIDYsIDEsIDE1NiwgMTUyLCA5MiwgNywgNiwgMSwgMTkzLCAxNTIsIDkyLCA3LCAKLSAgICA2LCAxLCAyMzAsIDI1LCAxNTIsIDkyLCA3LCA2LCAxLCA3NiwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDE1MiwgOTIsIAotICAgIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgMjIyLCA5MSwgMTUyLCAKLSAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgOTIsIDcsIDYsIDEsIDcwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgOTIsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE3LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgMjQ5LCAxMjgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgCi0gICAgMTA1LCAxNTIsIDkyLCAyNDAsIDExMywgMTUyLCA5MiwgMTkwLCAxNTIsIDkyLCAyMDYsIDE1MiwgOTIsIDI1NSwgMjUsIAotICAgIDE1MiwgOTIsIDIxMiwgMjMsIDQyLCAyNDcsIDE2NCwgOTIsIDI1MCwgMjMsIDkyLCAyNDksIDE3MCwgOTIsIDI0MywgMjUyLCAKLSAgICA5MiwgMjQwLCAxMDUsIDkyLCAyMjksIDg2LCA5MiwgMjI5LCA3OSwgOTIsIDIyNiwgMjE0LCA5MiwgMjE5LCAzNSwgOTIsIAotICAgIDEyMCwgMiwgMjQ1LCAzMSwgNzgsIDkyLCAyMTMsIDExOSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNjEsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MywgMTU4LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNTEsIDY2LCAyMjMsIAotICAgIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNDksIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NSwgMjIzLCAxMDMsIAotICAgIDIzNSwgMjM5LCAxNiwgMSwgMjQ1LCA2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNDMsIDIwMiwgMjIzLCAxMDMsIAotICAgIDIzNSwgMjM5LCAxNiwgMSwgMjQyLCA2MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDIzNSwgMTQ0LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMzUsIDIzLCAyMjMsIDEwMywgMjM1LCAKLSAgICAyMzksIDE2LCAxLCAxNTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDE5MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgCi0gICAgMSwgMjMwLCAyNSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDIyNiwgMTA1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMjQsIDk2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAKLSAgICAxNTMsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyMiwgOTEsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxNywgCi0gICAgMTUyLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE0LCAxMDUsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTc4LCAKLSAgICAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEwLCAxNTksIAotICAgIDQyLCAxNDEsIDI0MSwgNjMsIDkyLCA1NiwgMjM0LCAxOCwgOTIsIDU2LCAyMDYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MCwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjIsIDkyLCA1NiwgMjQ4LCA5MCwgOTIsIAotICAgIDksIDIxNCwgMTc3LCAyMzgsIDY5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOCwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0MiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDM1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDQsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA2NSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjcsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA0MywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjksIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI3LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTcsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDM3LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNDgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDcyLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgNzEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyNSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUyLCA5MiwgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ3LCA5MiwgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDMxLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDM4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDMzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1OCwgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgMzksIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA2OSwgMjE2LCA2LCAKLSAgICAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNTMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM2LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA0OSwgMjE2LCAKLSAgICA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgMzIsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDYzLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA0NSwgMzcsIAotICAgIDE1NCwgMjU0LCAyNDUsIDM3LCAxNTQsIDI1NSwgMTIsIDI0OSwgNzEsIDI0NCwgNDIsIDI1MCwgMCwgMjE0LCAxOTQsIDIyOCwgCi0gICAgMjEzLCAyLCAyMTgsIDE1MywgMjE4LCAzMywgMTE3LCAyMzAsIDExNCwgMjE4LCAzMiwgMjUwLCAyNiwgMjUzLCAyMDcsIAotICAgIDI0NiwgNTQsIDIxOCwgMzEsIDExNywgMjUxLCAxMTgsIDIyMywgMTU4LCAyNTEsIDE0MCwgMjUzLCAyMDcsIDIyOCwgMjEyLCAKLSAgICAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIDEzMSwgMjMwLCAxOTUsIDIxMiwgMjUsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjQ1LCAKLSAgICA0NSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNTQsIDEyOCwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNTMsIDIyNSwgMjQyLCAxODEsIAotICAgIDIsIDIzMSwgNTEsIDE2NiwgMjMwLCAxMjksIDg3LCAyMTIsIDI3LCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDQsIDkyLCAKLSAgICAyMjQsIDIyLCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0MiwgMjEwLCAyMzAsIDEyOSwgODcsIDI0MywgMjI5LCAyMzAsIAotICAgIDEyOSwgODcsIDIxMiwgNTIsIDI0MiwgMjEwLCAyMzAsIDEyOSwgODcsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgCi0gICAgMjEyLCA1MiwgMjQ5LCAxMzcsIDIzMCwgMTI5LCA4NywgMjQ5LCAxMzcsIDIzMCwgMTI4LCAxNjYsIDIzMCwgMTI5LCAyLCAKLSAgICAyNDQsIDE5MCwgMjQ0LCA5MiwgMjI0LCAyMiwgMjMwLCAxMjksIDIsIDI0NCwgMTkwLCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIAotICAgIDEyOSwgMiwgMjQ0LCAxOTAsIDI0MywgMjI5LCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIxOCwgMzgsIDIsIDI0NCwgMTkwLCAKLSAgICAyNDIsIDE3OSwgMjE4LCAxNTYsIDIxOSwgMjU1LCAyMTgsIDE1NiwgMjUwLCAxMTYsIDIyMSwgMTY4LCAyNDUsIDM5LCAyMTUsIAotICAgIDIzNSwgMjQ4LCA4NCwgMjE1LCAyMzUsIDIyNiwgNTksIDIxNSwgMjM1LCAyNTEsIDI3LCAyMTUsIDEwOSwgMjUwLCAxMTgsIAotICAgIDI1MSwgMjEwLCAyMjIsIDE5MSwgMjQxLCAxNzksIDIxOCwgMzYsIDI1MSwgMjEwLCAyNDUsIDIyOCwgNjQsIDIzMSwgMTk0LCAKLSAgICAyNDUsIDIyOCwgNjQsIDIyMywgMzEsIDI0MSwgMjA0LCAyNDQsIDExLCAyMzMsIDU0LCAyNDksIDI0NiwgMjMxLCAxNzAsIAotICAgIDIzMywgNTMsIDI0NCwgMTc2LCAyMzMsIDUzLCAyMzMsIDU0LCAyNDQsIDQ3LCAyMzYsIDAsIDIxMSwgMjM5LCAyMzAsIDU4LCAKLSAgICAyMTYsIDM0LCAyNTMsIDE5MSwgMjQyLCAxNDMsIDIzMSwgNjcsIDIxMiwgMzksIDIxNywgNTcsIDIzMywgMjYsIDI1MiwgCi0gICAgMTQ5LCAyMjUsIDYyLCAyMjMsIDExMSwgMjU0LCA1NCwgMjQyLCAxMjcsIDI1NCwgNTQsIDIyNSwgMjE3LCAyMjUsIDIxOCwgCi0gICAgMjUwLCAxMTksIDIxOCwgMTE0LCAyNDIsIDIzLCAyMTksIDkwLCA2NCwgMjI1LCA0NCwgMjMxLCA4NywgMjI2LCAxOTcsIAotICAgIDI1MSwgMTk0LCAyMjQsIDIyOSwgMjMzLCAzNiwgMjIzLCAzMiwgMjQ5LCAxNDIsIDIyMywgMzIsIDI1MiwgMTU5LCAyNDksIAotICAgIDE3MywgMjIzLCAzMSwgMjQ5LCA5NSwgMjIsIDIyMywgMzEsIDIxOCwgMTQxLCAyNTEsIDE2NywgMjE5LCAxNCwgMjUxLCAKLSAgICAxNTEsIDI0MywgMjUxLCAyNDMsIDI0NywgMjIyLCAyMDcsIDIxNywgMjQ2LCAyMjQsIDIzMSwgMjQ4LCAxNzUsIDIyNiwgCi0gICAgMjM2LCAyMTgsIDcsIDI0MywgMjQ4LCAyMTksIDIzMCwgMjQ0LCA5MSwgMjUxLCAyMSwgMiwgMjE3LCAyMzksIDI0OCwgMzUsIAotICAgIDIxOSwgNTIsIDI0MCwgMTEyLCAyNDksIDE0MSwgMjIwLCA3MCwgMjQwLCAxMTEsIDI0MCwgMTEyLCAyNDksIDE0MSwgMjQ2LCAKLSAgICAxMDgsIDI0OSwgMTcyLCAyNTAsIDg0LCAxMzAsIDI1MCwgMjU0LCAyMzIsIDE0MSwgMjQ5LCA4OCwgMjQxLCA1NSwgMjI0LCAKLSAgICAyMzMsIDIxOSwgMjQwLCAyNTIsIDM2LCAyNTEsIDE2MywgMjI0LCAyMzQsIDY0LCAyNDQsIDMzLCAyNDksIDE3MSwgMjQ0LCAKLSAgICAyNCwgMjIsIDIzNCwgMzIsIDIxNywgMTksIDIxMSwgMjMwLCAyNDIsIDEzLCAyMjIsIDEyLCAyNTEsIDE3NywgMjIsIDI0OSwgCi0gICAgMTAyLCAyMTEsIDIzNywgMjQyLCAxODQsIDI0OSwgMjM1LCAyNDIsIDE4NCwgMjE1LCAxOTMsIDI0NiwgOTAsIDI1MiwgNjIsIAotICAgIDIzMCwgOTMsIDI1MCwgNywgMjUyLCA2MiwgMjMwLCA5MiwgMjUyLCAxODcsIDI1MSwgMTc2LCAyMjMsIDMzLCAyMTEsIDIwMSwgCi0gICAgMjI0LCAxOTUsIDI1MSwgMjM1LCAyNTEsIDIwLCAyMzUsIDEzOCwgMjUwLCA3NywgMjE1LCAyMzUsIDI0NCwgMTYyLCAyNTAsIAotICAgIDc2LCAyNDQsIDk0LCAyNDQsIDk1LCAyMTksIDEyLCAyNTIsIDE1OCwgMjI1LCAyNTAsIDIyNCwgMjQ0LCAyNDksIDIwNCwgCi0gICAgMjUyLCAxNTksIDIxNywgNTksIDIxNSwgMjM1LCAyNDksIDEyOCwgMjQ0LCA2NywgMjI1LCA2MywgMjQ4LCA4MSwgMjM1LCAKLSAgICAxMzEsIDI0NywgMTMxLCAyNTAsIDIzMiwgMjE4LCAxMTMsIDIxMSwgMjQwLCAyNTAsIDk4LCAyMzAsIDEyOSwgMjEzLCAxNjQsIAotICAgIDI1MCwgMTYyLCAyMjEsIDE5OSwgMjIxLCAyMjQsIDI0MiwgMTQ4LCAyNTAsIDI1MSwgMjUwLCAyMzMsIDI0MCwgMjQ1LCAKLSAgICAyNDQsIDEzMCwgMjEyLCAwLCAyMjIsIDIwMCwgMjQ5LCAyMzYsIDI0NCwgODYsIDIyNSwgMiwgMjIsIDI0NCwgOTAsIDIzMCwgCi0gICAgMjI3LCAyMzAsIDEwOCwgMjUxLCAxMCwgMjUwLCAzOSwgMjQxLCAyMzIsIDI1MywgMjQxLCAyMjYsIDYyLCAyMTYsIDE0LCAKLSAgICAyNDEsIDI1MSwgMjUwLCAyOSwgMjE2LCAyNDIsIDIxNiwgMTEzLCAyNTAsIDIwLCAyNTEsIDIwMiwgMjI1LCAxNzcsIDI1MywgCi0gICAgMjQwLCAyMTMsIDE3MiwgMjQzLCAxMTAsIDI0NywgMTk3LCAyNDEsIDE1NiwgMjE5LCA4NCwgMjMxLCAyMzQsIDI1MSwgMjQ1LCAKLSAgICAyNDMsIDExMSwgMjQ3LCAyNDAsIDI1MSwgMTY2LCAyNDQsIDUyLCAyMjUsIDMzLCAyNTAsIDI0MSwgMjgsIDIyOCwgNDcsIAotICAgIDIzMCwgODUsIDI4LCAyMjgsIDQyLCAyMjEsIDIxMiwgMjQyLCA5OSwgMjgsIDIzNCwgMTM3LCAyMTUsIDE5MCwgMjEzLCAKLSAgICAxNTQsIDI4LCAyMjEsIDE5MiwgMjIyLCAxMjQsIDIyMCwgMTEsIDIsIDIyMSwgMjI3LCAyMTYsIDI0NCwgMjIzLCAxNzgsIAotICAgIDIyLCAyNTIsIDE1OSwgMjE5LCAxMDUsIDIyLCAyMTksIDEwNSwgMjUxLCAxODcsIDI1MiwgMTIzLCAyMiwgMjQxLCA0OSwgCi0gICAgMjUwLCAxMjAsIDI0NCwgNzMsIDIxOSwgNjMsIDIyMiwgMTI1LCAyMTgsIDEyLCAyMTUsIDE5NCwgMjQwLCAyNDYsIDIyMywgCi0gICAgMTc5LCAyNTQsIDEyOSwgMjQ0LCAzMSwgMjIyLCAxMzYsIDI0NCwgMzEsIDIxNywgMjQxLCAyNDAsIDIzNSwgMjUxLCAxMTksIAotICAgIDI0MCwgMjM1LCAyLCAyNDMsIDk0LCAyMjYsIDIyOSwgMjUxLCAxMTksIDIzNSwgMTMxLCAyMjQsIDIzOSwgMjI2LCAyMjgsIAotICAgIDI0NSwgNDQsIDIyNCwgMjM5LCAyMjYsIDIyOCwgMjQwLCAyNDQsIDI1MiwgMTQ1LCAyNTMsIDE4MSwgMjE2LCAyNTIsIDIzMSwgCi0gICAgMjM0LCAyNDAsIDI0MCwgMjMyLCAxMTEsIDI0MCwgMjQwLCAyNDksIDE3NiwgMjE4LCAxMjUsIDIyMSwgMTk4LCAyNDgsIDQzLCAKLSAgICAyMTgsIDEyNSwgMjQ0LCAxODAsIDIzNSwgMTQ5LCAyMzMsIDg5LCAyMzUsIDEzMSwgMjUwLCAyMjYsIDI0NSwgNDQsIDI1MCwgCi0gICAgMjI2LCAyMjMsIDE0MSwgMjMwLCAxMTIsIDIyNiwgMTE0LCAyMTIsIDQxLCAyNTEsIDEyMywgMjQ5LCAxNDUsIDIxNiwgMTA2LCAKLSAgICAyMzMsIDE4LCAyMjMsIDE4MCwgMjUwLCAyMjQsIDI0NiwgOTYsIDI0OSwgMTM1LCAyMTIsIDMsIDIxOSwgNzAsIDIxOSwgNjgsIAotICAgIDI0MCwgMjQ1LCAyMjMsIDE1MywgMjQyLCAxNzAsIDIyMCwgNTcsIDIzMCwgMTQ1LCAyMjIsIDE5NCwgMjUwLCAxMDgsIDI0NywgCi0gICAgMTM2LCAyMjUsIDczLCAyNTEsIDIwMywgMjQ1LCAxNjksIDIyNiwgMjM4LCAyMTgsIDI1MiwgMjIwLCA1MiwgMjUxLCAxMjIsIAotICAgIDI1NCwgOTIsIDI0MSwgNTQsIDIzMywgMTIxLCAyNTIsIDYwLCAyNDQsIDkwLCAyMTUsIDE5MywgMjQ0LCA5MCwgMjUxLCAKLSAgICAyMDksIDIxNSwgOTEsIDI0MSwgMjQ5LCAyNTAsIDEwOSwgMjUyLCAxODcsIDI1MCwgMTA5LCAyNDMsIDI0MiwgMjUyLCAxODcsIAotICAgIDI1MCwgMTA5LCAyNTEsIDIzNywgMjI1LCAxOTUsIDIzNCwgMjYsIDIyNCwgMjQ4LCAyNDYsIDg3LCAyNTEsIDExLCAyNTIsIAotICAgIDE3NywgMjUxLCAxMSwgMjQ3LCAxMzAsIDIzMCwgMTEzLCAyNDQsIDE5MCwgMjQ5LCAxNDYsIDI0NCwgMTkwLCAyMTYsIDEwNywgCi0gICAgMjQ0LCAxOTAsIDIyMywgMTgxLCAyNDQsIDE5MCwgMjUwLCAyMjUsIDI0NCwgMTkwLCAyNDYsIDk3LCAyNDQsIDE5MCwgMjE4LCAKLSAgICAyNDEsIDIxMiwgMywgMjQwLCAyNDYsIDI0NCwgMTkwLCAyMzAsIDE0NiwgMjQ0LCAxOTAsIDI0NywgMTM3LCAyNDQsIDE5MCwgCi0gICAgMjI1LCA3NCwgMjQ0LCAxOTAsIDI0MywgMjQ1LCAyNDQsIDE5MCwgMjQyLCAyMCwgMjQ0LCAxOTAsIDIxMSwgMjI0LCAyNDQsIAotICAgIDE5MCwgMjUyLCA3MSwgMjQ0LCAxOTAsIDIyNiwgNDUsIDI0NCwgMTkwLCAyMjUsIDc0LCAyMjgsIDUzLCAyMjUsIDIzMiwgCi0gICAgMjI0LCAxODYsIDI0NSwgMTMsIDI0NSwgMjI3LCAyMjgsIDUzLCAyMzAsIDExMCwgMjE2LCAxOSwgNzEsIDEyMCwgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCAxMjQsIDIyNSwgNywgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgNDMsIDIyNSwgNywgCi0gICAgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgNDQsIDIyNSwgNywgMjUyLCAxODIsIDIzNSwgMjQyLCAyNDQsIDg0LCAyNDIsIDE2LCAKLSAgICA1MCwgMjEyLCAzMywgMjQyLCAxNiwgNTAsIDIyNiwgMjE1LCAyNDIsIDE2LCA1MCwgMjE2LCAxMzUsIDEyMCwgNTAsIDIxNiwgCi0gICAgMTM1LCAxMjQsIDUwLCAyNTAsIDE5LCAyNDIsIDExLCA1MCwgMjA0LCAyNDIsIDExLCA1MCwgMjQ5LCAxMjMsIDIxMSwgMjIwLCAKLSAgICAyNDEsIDI1MSwgMjQ1LCAxNCwgMjI5LCAxMDQsIDIxNywgMTUxLCAyMzUsIDEyNSwgMjQ2LCA5MiwgMjM0LCA4MiwgMjUxLCAKLSAgICAyNDcsIDIxMSwgMjIwLCAyNDksIDI0OSwgMjI0LCAxMjcsIDI0MiwgMTQsIDIyNCwgMjMwLCAyMzEsIDE3NywgMjIwLCA0LCAKLSAgICAyNTMsIDIwMywgMjIwLCA0LCAyNDEsIDE2NCwgMjIwLCA0LCAyMTEsIDIyMCwgMjIxLCAyNDAsIDIxMSwgMjIwLCAyNTEsIAotICAgIDE4NiwgMjQ0LCAyOSwgMjUxLCA5MCwgMjM2LCAwLCAyMTksIDE2OSwgMjUxLCA4OSwgMjM2LCAwLCAyMTksIDE2OSwgMjUxLCAKLSAgICAxNjIsIDI0MiwgMTk0LCAyMzEsIDE4NSwgMjExLCAyMjEsIDI0NCwgMTc0LCAyMzEsIDE4NiwgMjIsIDIxMSwgMjIyLCAyNDEsIAotICAgIDYwLCAyNDIsIDEwLCAxMTMsIDIzMSwgNTksIDI0MSwgNjAsIDI0MiwgMTAsIDExMywgMjExLCAyMTksIDI0MSwgNjAsIDI0MiwgCi0gICAgMTAsIDIyNCwgMjU1LCAyMjYsIDIyNywgMjExLCAyMjIsIDIsIDI1MSwgMTA2LCAyNDUsIDIyNSwgMjUxLCAxNDEsIDIsIAotICAgIDIxMywgMjQ2LCAyMjUsIDE2OCwgMiwgMjUxLCAyMTIsIDI0MiwgMzQsIDIzMSwgMTg2LCAyLCAyNDIsIDExMCwgMjI1LCAKLSAgICAxMDksIDIzMSwgMTc0LCAyMzEsIDE4NiwgMiwgMjE1LCA5NywgMjI2LCAyMDgsIDIzMSwgMTg1LCAyMjYsIDIwOCwgMjExLCAKLSAgICAyMjEsIDI1MiwgMTg2LCAyNDksIDE5MCwgMjExLCAyMDUsIDIyNCwgMTg5LCAyMzUsIDEzMSwgMjI2LCAyMjMsIDIzNSwgCi0gICAgMTMxLCAyNDIsIDE2OSwgMjQyLCAyMjIsIDI1MiwgMTg3LCAyNTQsIDExMywgMjQ1LCAxOCwgMjU0LCAxNjAsIDI1NCwgMTYxLCAKLSAgICAyMzAsIDEzNiwgMjM2LCA1LCAyMTksIDEwMCwgMjM1LCAyMzIsIDI0OCwgMzQsIDIyNSwgMTY3LCAyNDIsIDEwNSwgMjQ4LCAKLSAgICAxNzksIDIzMiwgMjAxLCAyMjksIDIxMSwgMjI0LCAyNTQsIDI0NCwgMTkxLCAyMzEsIDE0MiwgMjQyLCAzMywgMjUyLCAxMzgsIAotICAgIDIyNSwgMSwgMjE3LCAxNzEsIDIyNSwgNjYsIDIzNCwgNjQsIDc4LCAyMzIsIDExMSwgMjMzLCAxMCwgMjIyLCAyMzMsIDI0MywgCi0gICAgNTQsIDIxOCwgMTMxLCAyMzQsIDYzLCAyNTEsIDE3MSwgMjQ5LCAxNDgsIDIsIDI0MSwgMjI3LCAyMTIsIDE5LCAyNTIsIDY5LCAKLSAgICAyNDEsIDIyNywgMjUxLCAxMzUsIDI0MSwgMjI3LCAxMTMsIDI0MSwgMjI1LCAyMTksIDEwLCAyNDEsIDIyNywgMjQyLCAxMjAsIAotICAgIDI0MSwgMjI3LCAyNDEsIDIyOCwgMiwgNzQsIDI1MSwgMjA4LCAyNDEsIDIyNywgMjQyLCAxMjcsIDI0MSwgMjI3LCAyMTEsIAotICAgIDQyLCAyNDEsIDIyNywgMjI0LCAxMjgsIDI0MSwgMjI3LCAyNDEsIDIyOCwgMiwgMjIzLCAzMywgMjIzLCA0NCwgMjQxLCAKLSAgICAyMjUsIDI0MSwgMjI4LCAyNDgsIDgxLCAyNDcsIDI0OSwgMjIwLCA4MiwgMiwgMTE1LCA1OSwgMjM1LCAyMTUsIDI0NSwgCi0gICAgMTcyLCAxOTIsIDI1MSwgMTE2LCAyNTQsIDExMiwgODcsIDI1MSwgMTk1LCAyMTksIDkyLCA4NywgMjQ5LCAyMjgsIDg3LCAKLSAgICAyMTgsIDI0NiwgMjE3LCAyNDgsIDg3LCAyNDYsIDg1LCAyNDgsIDE1NywgODcsIDIyNSwgNjcsIDY0LCAyMjQsIDI0OSwgCi0gICAgMjQ0LCA2MSwgMjUyLCAzLCAyNDcsIDE2NSwgODcsIDIxOSwgMywgMjUyLCAxNTgsIDIxNiwgMTQ5LCAyNTIsIDE1OCwgNzEsIAotICAgIDI0NCwgNTEsIDI0MCwgMjExLCAyMjUsIDUsIDg3LCAyMzAsIDE0OSwgMjUyLCAxNzIsIDI0OSwgOTgsIDI0NSwgMzIsIDExNCwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNDksIDEzOSwgMjUwLCAyNDIsIDI1MiwgMTQ0LCAyLCAyMTEsIDQwLCA1MCwgMjUyLCAxNDQsIDIsIAotICAgIDI0NywgMTMyLCA1MCwgMjUyLCAxNDQsIDIsIDI0NSwgNDcsIDUwLCAyNTIsIDE0NCwgMiwgMjI0LCAyMjgsIDUwLCAyMzAsIAotICAgIDE0OSwgMiwgMjExLCAyMzUsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDIyLCAyMTEsIDQwLCA1MCwgMjIxLCAKLSAgICAxNzgsIDIyNSwgMTY2LCAyNDksIDIwOCwgMjUxLCAxMzksIDIzMCwgMTg2LCAyNDQsIDU2LCAyNDcsIDE4NSwgMjI2LCAxNjEsIAotICAgIDI0NywgMTkwLCAyNDYsIDQ5LCAyNDQsIDEwNywgMjQ0LCA0MCwgMjA0LCAyNDQsIDEwNywgMjQ0LCA0MCwgMjI2LCA3NiwgMiwgCi0gICAgMjQ5LCAxMDAsIDIyNiwgNzYsIDI0NCwgMTgzLCAyMTQsIDE2MywgMjUxLCAxNiwgMjE3LCAxOCwgMjUxLCAxNiwgMjUwLCAKLSAgICAyNDMsIDIzNSwgMjQyLCAyNTAsIDEzOCwgMiwgMjE0LCAxNTMsIDIxNSwgMjMwLCAyNTAsIDEzOCwgMiwgMjQ2LCAxMDQsIAotICAgIDIxNSwgMjMwLCAyNTIsIDE0MSwgMjUwLCAxMzcsIDI1MCwgNiwgMjI0LCAxMjMsIDIyMiwgMTg1LCAyMjQsIDEyMywgMjI2LCAKLSAgICAxOSwgMjE4LCAxMjEsIDIyMiwgMTMxLCAyMTUsIDIyMiwgMjIyLCAxMzEsIDI1MSwgMTkxLCAyMTcsIDkxLCAyMzMsIDUxLCAKLSAgICAyMjgsIDQ1LCAyMjgsIDQ2LCAyLCAyNDgsIDgwLCAyNDksIDE0NywgMjUwLCAwLCAyNTEsIDE5MiwgMjA0LCAyNTEsIDE5MiwgCi0gICAgMjQyLCAxMjcsIDI1MSwgMTkyLCAyNTEsIDIwOCwgMjUxLCAxOTIsIDIyNiwgMTU3LCAyNTEsIDE5MiwgMjUxLCAxODksIAotICAgIDIyOSwgMjA1LCAyNTIsIDE3NSwgMjIxLCAxODYsIDIzMSwgNjAsIDIxNywgMSwgMjIzLCAxMjMsIDIyNiwgNzQsIDI0NCwgCi0gICAgMTU5LCAyMzEsIDIzNCwgMjIxLCAyMjMsIDI1NCwgODksIDIyNCwgMTQ1LCAyNTQsIDI1MiwgMjMyLCAxMTMsIDI1MCwgMTI3LCAKLSAgICAyMzEsIDcyLCAyMjYsIDEyOSwgMjE1LCAyMzgsIDIzNSwgMjUyLCAyMTUsIDIzOCwgMjI2LCA4MiwgMjQ2LCAyNCwgODcsIAotICAgIDIzNSwgMjQ5LCAyNDUsIDExOSwgMjQ1LCAxMjAsIDIsIDI0NiwgMTA0LCA4MCwgNDgsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIAotICAgIDIzMiwgMTA3LCAyNDQsIDczLCAyNTAsIDAsIDIzMSwgMjAwLCAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgCi0gICAgMiwgMjIzLCAxNTcsIDI0NCwgNzMsIDIwNCwgMjMxLCAyMDAsIDIsIDIzMiwgMTA3LCAyNDQsIDczLCAyMjQsIDIzNiwgMjI0LCAKLSAgICAyMzcsIDI0MCwgMjQ4LCAyMjksIDg0LCAyMzAsIDE1OSwgMjI1LCAxMTcsIDIzMCwgMTU5LCAyMjUsIDExOCwgMiwgOTcsIAotICAgIDgwLCAyNTMsIDIwNywgMjMzLCA0NiwgMjEzLCAxNzUsIDIzMCwgMTU4LCAyMzAsIDE1OSwgMjI1LCAxMTgsIDIyNiwgMjMwLCAKLSAgICAyMjgsIDc1LCAyMzAsIDE1OSwgMjI1LCAxMTYsIDI1NCwgOTAsIDIsIDI1MiwgMTI5LCAyNTEsIDEwLCAyMTMsIDE3MiwgCi0gICAgMjUxLCAxMCwgMjE2LCAyNTQsIDIyMywgMTczLCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjQ3LCAyNTAsIDIsIDk3LCAKLSAgICAyMiwgMTQwLCAyMDQsIDI1MCwgMzYsIDI1MywgMjQ3LCAyNTAsIDIsIDk3LCAyMiwgMTQwLCAyMDQsIDI1MCwgMzYsIDI1MywgCi0gICAgMjQ4LCAyLCAzNywgMTIzLCAyMjYsIDEyMCwgMjUwLCAyLCAyNDYsIDEwNCwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgMzYsIAotICAgIDI1MywgMjQ3LCAyNTQsIDg4LCAyNDYsIDEwNCwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgMzYsIDI1MywgMjQ3LCAxMjEsIAotICAgIDI1MSwgMTM4LCA4NywgMTI1LCAyNTEsIDEzOCwgODcsIDIxOSwgNywgMiwgMjUxLCA0LCA5MSwgMjE5LCA2LCAyMTksIDcsIAotICAgIDIsIDEyMywgMjE5LCAzMSwgMjEyLCAzNSwgMjE5LCA3LCAyLCAxMzQsIDIxOSwgMzEsIDIxMiwgMzQsIDI1MiwgMTE1LCAKLSAgICAyNDUsIDE3MiwgMjI1LCAyNywgMjMzLCA0MiwgMjMxLCAyMTEsIDI0MiwgMTg0LCAyMjIsIDI0NywgMjMxLCAyMTEsIDI0MiwgCi0gICAgMTg0LCAyMzIsIDE1MiwgMiwgMjM1LCAyMjUsIDIyNSwgMTk5LCAyNTAsIDAsIDIzMiwgMTUyLCAyLCAyMzQsIDEzOCwgMjM0LCAKLSAgICAxMzgsIDIzMiwgMTUxLCAyMDQsIDIzMiwgMTUxLCAyNTIsIDQ0LCAyNTIsIDQ1LCAyLCAyNTEsIDQsIDkxLCAyNTEsIDE5MCwgCi0gICAgMjMyLCAyMDQsIDg3LCAyMjMsIDE3NCwgMjUxLCA4NiwgMjUyLCAxODUsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE0MywgMiwgCi0gICAgMTQwLCA4MCwgNDgsIDIyNiwgMTk3LCAyLCAyNDUsIDMxLCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDM5LCAyLCAKLSAgICA5NywgODAsIDQ4LCAyMTYsIDE0LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDc1LCAxMjMsIDIxNCwgMTg0LCAyNDUsIAotICAgIDE5MSwgODcsIDIzNCwgMTM2LCAyMTYsIDI0NywgMjM1LCAyMTksIDE2LCAzMSwgNywgNiwgMjMzLCA5LCAyMzUsIDIxOSwgCi0gICAgMTYsIDMxLCA3LCA0LCAyMzMsIDksIDIzNSwgMjE5LCAxNiwgMzEsIDIyNywgMTk5LCAyMzUsIDIxOSwgMTYsIDMxLCAyMTcsIAotICAgIDE4MywgMjM1LCAyMTksIDE2LCAzMSwgNywgMjMzLCA5LCAyNDQsIDk2LCAyNDUsIDE3MiwgMjE2LCA5LCAyMTEsIDE5OSwgCi0gICAgMjQyLCAyMSwgMjI3LCAxODIsIDIyLCAyNTEsIDE5NywgMjQxLCA2NiwgMjI1LCA1MCwgMjMwLCAyMjYsIDIxNiwgMjU1LCAKLSAgICAyNDksIDExNCwgMjUyLCAxNTksIDIxOSwgMTI1LCAyMjUsIDksIDIxOCwgMTU3LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIAotICAgIDIzNSwgMTMxLCAxNiwgMzEsIDI1MiwgNTcsIDIxNSwgMjIwLCAyNDUsIDE1NiwgODUsIDQyLCAyNTEsIDg2LCA3MSwgNDIsIAotICAgIDI1MSwgODYsIDIzMywgODUsIDIyMywgMTExLCAyNTAsIDM1LCAyMzMsIDg1LCAyNTEsIDIwOCwgMjUwLCAzNSwgMjMzLCA4NSwgCi0gICAgMjI2LCAxNTcsIDI0NywgMjQ4LCAyMzMsIDg1LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDQsIDIyNiwgMTU3LCAyNDcsIDI0OCwgCi0gICAgNCwgMjUxLCAyMDgsIDI0NywgMjQ4LCAyMTQsIDE2MiwgMjIzLCAxMTEsIDIxNSwgMjI1LCAyNDYsIDEwNSwgMjIzLCAxMTEsIAotICAgIDIxNSwgMjI1LCAyMTQsIDE2MiwgNCwgMjIzLCAxMTEsIDIxNSwgMjI1LCAyNDYsIDEwNSwgNCwgMjIzLCAxMTEsIDIxNSwgCi0gICAgMjI1LCAzNywgMjQ5LCAxMzEsIDIyNCwgMjUyLCAyNDksIDEzMSwgMjI0LCAyNTMsIDIsIDI0MiwgMjYsIDUxLCAyNDksIAotICAgIDEzMSwgMjI0LCAyNTIsIDIyOCwgNDksIDQzLCAyMjAsIDE1MywgMiwgMTM0LCAyNDcsIDExOCwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMTIzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMTEzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMTM0LCAKLSAgICAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCAxMSwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgODEsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTksIDEyNSwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgCi0gICAgMTIyLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ1LCAxOTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyMjgsIDIwMCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ4LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjQ1LCAxNjgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDc3LCAyMjYsIDI0MiwgMjUwLCA0LCAKLSAgICAyNDQsIDE5MSwgMjI2LCAxOTIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNTYsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgCi0gICAgMTQwLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDcsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNzksIDI1MCwgNCwgMjQ0LCAKLSAgICAxOTEsIDIxOSwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyMjAsIDEyMSwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ1LCAxOTIsIAotICAgIDI1MCwgNCwgMjQ0LCAxOTEsIDIyOCwgMTk5LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIDI0NiwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMjQ1LCAxNjYsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzUsIDIzMCwgMTE3LCAyNDMsIDIzMCwgMjE2LCAzNiwgMjE2LCAyLCAKLSAgICAyMTgsIDE0OCwgNjQsIDIzMiwgMjM5LCAyMTksIDE3MCwgNjQsIDIzNSwgMTMyLCAyMzAsIDEwNiwgMjQyLCAxMjQsIDI0NCwgCi0gICAgMTkwLCAyNDIsIDEyNCwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI0NCwgMTkxLCAyLCAyMTcsIDE0LCA2NCwgCi0gICAgMjM1LCA1MywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIAotICAgIDIzMCwgMTExLCAyMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAKLSAgICAyNDksIDIzMCwgMjE3LCAyNDcsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTExLCAyMiwgMjE2LCAxMDQsIAotICAgIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDIsIDI1LCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQwLCAyNDcsIAotICAgIDIxMSwgMjMzLCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI0NCwgMTkxLCAKLSAgICAyMjEsIDIxNywgMjQ4LCA2MiwgMjQ0LCAzMywgMjIzLCA4OCwgMjQ0LCAxOTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDEsIAotICAgIDIyNiwgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIxOCwgMzQsIDIxOSwgNzMsIDI0NCwgMTkwLCAyMjksIDg3LCAKLSAgICAyNDQsIDE5MCwgMjQ1LCAyMywgMjQ0LCAxOTAsIDIxNCwgMTg4LCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDI0OSwgMjMwLCAKLSAgICAyMTcsIDI0NywgMjI1LCAxOTIsIDI0NCwgMTkwLCAyNDksIDIwMSwgMjQ0LCAxOTAsIDI0OSwgMjAyLCAyNDQsIDE5MCwgCi0gICAgMjM0LCA2MiwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyMTYsIDEzNywgMTE1LCAyMzQsIDYzLCAyMzQsIDYyLCAyNDQsIDE5MSwgCi0gICAgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjM0LCA2MiwgMjQ0LCAxOTEsIDIsIDI1MCwgMCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIAotICAgIDIxOCwgODgsIDIxNiwgMTksIDI0NCwgMTkxLCAyLCAyMTgsIDg4LCAyMTYsIDIwLCAyMiwgMjExLCAyMzMsIDI0NSwgMTUsIAotICAgIDI0NCwgMTkxLCAyLCAyMTgsIDg4LCAyMTYsIDIwLCAyMiwgMjE2LCAxMDQsIDI0NSwgMTMsIDI0NywgMTkyLCAyNDQsIDE5MCwgCi0gICAgMjExLCAyMDQsIDI0NCwgMTkwLCAyNTQsIDEwOCwgMjQ0LCAxOTAsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjQ5LCAxMTYsIAotICAgIDI0NCwgMTkwLCAyMjUsIDE3MCwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyMzIsIDEyNiwgNjQsIDIxNSwgMjA0LCAyNDcsIAotICAgIDE5MiwgMjUxLCA4OCwgMjIzLCA4OCwgMjQ0LCAxOTAsIDI0MywgMjM5LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgCi0gICAgMjU0LCAxMDYsIDI0NCwgMTkwLCAyNDQsIDE1MiwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI0NCwgMTkwLCAyMTksIDkxLCAyNDQsIAotICAgIDE5MCwgMjE2LCA3MSwgMjQ0LCAxOTAsIDI0MiwgMTI1LCAyNDQsIDE5MCwgMjMyLCAxMTQsIDI0OSwgMTE2LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDI0MCwgMjAzLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAKLSAgICAxMTEsIDIyLCAyNDksIDIzMCwgMjE3LCAyNDcsIDI0NCwgMTkxLCAyMjEsIDE5MCwgMjM2LCAwLCAyNDQsIDE1MywgMjUzLCAKLSAgICAyMTMsIDI0NCwgMTkwLCAyNDQsIDQ5LCAyNDQsIDE5MCwgMjE5LCA5MiwgMjQ0LCAxOTAsIDI0NywgMTY1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIxMSwgMjMwLCAyMzAsIDExMCwgMjQ0LCAxOTEsIDIsIDIzMSwgODQsIDIzMSwgMTQ0LCAyNDIsIDEyNCwgCi0gICAgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIAotICAgIDY0LCAyMzUsIDUzLCAyMTksIDc0LCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDIxOSwgNzQsIDI1MCwgCi0gICAgMjI1LCAyNDQsIDE5MSwgMiwgMjQxLCAyMjYsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjExLCAxOTYsIAotICAgIDIxOSwgNzUsIDIzNCwgNjIsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyMjQsIDIyNywgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkwLCAyNDksIDExNiwgMjUwLCAyMjUsIDI0NCwgMTkwLCAyMTIsIDIwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyLCAyMjgsIDc1LCAyNDIsIDE2MywgMjQzLCAzNCwgMjQ0LCAxOTEsIDIsIDIyNiwgMjE1LCAyNDMsIDM0LCAKLSAgICAyMjUsIDE2OCwgMjUxLCAxNjgsIDI0OCwgNzUsIDIyMSwgMTY5LCAyMzAsIDE0NSwgMjQxLCAyMjksIDIzMCwgMTQ1LCAyMTksIAotICAgIDgsIDIzMCwgMTQ1LCAyNDIsIDUsIDIyNSwgMTY4LCAyMjMsIDE1NiwgMTIzLCAyNDIsIDE1LCAyMjUsIDE2OCwgMjIzLCAKLSAgICAxNTYsIDI1MSwgMTc4LCAyNDIsIDExLCAyMzYsIDAsIDI1MCwgMTc5LCAyMjUsIDE2OCwgMjQzLCAyMzgsIDIyNSwgMTY4LCAKLSAgICAyLCAyMjQsIDIyNywgMjQ0LCAxOTAsIDIyNSwgMTY4LCAyLCAyNDQsIDQxLCAyNDIsIDEwLCAyMjIsIDIwMywgMjQxLCAyMTQsIAotICAgIDIxOCwgMTQzLCAyMzIsIDE0OSwgMjIzLCAxNjIsIDI1MCwgMjQ0LCAyNDEsIDE2MiwgMjE1LCAyNDgsIDI0MSwgMTYyLCAKLSAgICAyMTUsIDI0OSwgMiwgMjUxLCAxMTQsIDIyOCwgNTMsIDIxNSwgMjQ4LCAyMzEsIDMyLCAxOTIsIDIyMywgMTYzLCAyMTgsIAotICAgIDE0OSwgMjE1LCAyNDYsIDIxNSwgMjQ3LCAyNTAsIDI0NCwgMjUxLCA5MiwgMjI2LCAxOTQsIDI1MSwgOTIsIDIxNSwgMjAxLCAKLSAgICAyNTEsIDkzLCAyMTgsIDEyOSwgMjMwLCAxODcsIDI1NCwgMTMwLCAyNDQsIDk3LCAyNDUsIDEzNywgMjI0LCAyNTUsIDI1MCwgCi0gICAgMjQ0LCAyMjYsIDE5NCwgMjI0LCAyNTUsIDI1MCwgMjQ0LCAyMTcsIDMyLCAyMjYsIDE5NCwgMjE3LCAzMiwgMjUzLCAxODAsIAotICAgIDIyNiwgMTk0LCAyNTMsIDE4MCwgMjIzLCAxMTgsIDIxMywgMjQ3LCAyNDgsIDU4LCAyMTUsIDE5MiwgMjUzLCAyNDIsIDIzMiwgCi0gICAgMTE3LCAyMTUsIDI1NCwgMjMwLCAxMzksIDIzMCwgMTE2LCAyMjMsIDE2MSwgMjE4LCA2LCAyMjMsIDE2MSwgMjMwLCAxMTYsIAotICAgIDI1MSwgMjgsIDI1NCwgMjI5LCAyMTUsIDI0NSwgMjIwLCAxNiwgMjIyLCAxODIsIDIxOSwgMSwgMjAzLCAyMTUsIDI1MiwgCi0gICAgMjMyLCAyMzAsIDY3LCAyMTUsIDI1MiwgMjMyLCAyMzAsIDI0OSwgMTkwLCA1MCwgMjI0LCAyNTUsIDI1MCwgMjI5LCAyMjMsIAotICAgIDQ0LCAyMzIsIDIzMCwgMjE1LCAyMjIsIDI0NCwgNzQsIDIyNiwgMTk3LCAyMjQsIDIzOCwgMjQ3LCAxMjMsIDIyOCwgNzUsIAotICAgIDI0NSwgMTI1LCA1MCwgMjE5LCA3MiwgODcsIDIyOCwgNzUsIDIxOSwgNzIsIDg3LCAyMjQsIDEyMiwgMjMyLCAxOTMsIDIzNiwgCi0gICAgMCwgMjM1LCAxNTcsIDIyNSwgNDEsIDg3LCAyNDcsIDE0NiwgMjI4LCA1MiwgMjMyLCAxOTMsIDg3LCAyMjQsIDIzMiwgMjEyLCAKLSAgICA0MSwgODcsIDIyOCwgNjYsIDIxMiwgNDEsIDg3LCAyNTIsIDIsIDIyOCwgNzUsIDI1MiwgMSwgMjUyLCAwLCAyMzAsIDExNiwgCi0gICAgMjUyLCAwLCAyMjUsIDIxMywgMjI4LCA3NSwgMjI1LCAyMTIsIDI1MCwgMTAwLCAyNDksIDEyNCwgMjMxLCA1NiwgODcsIAotICAgIDIxMSwgMjE4LCA4NywgMjIzLCA1OSwgMjUyLCAxODcsIDg3LCAyMTYsIDM3LCAyMTIsIDQxLCAyNDksIDI1MywgMjE5LCAKLSAgICAyMzQsIDI1MiwgMTE4LCAyNTIsIDExNiwgMjI1LCAyNDIsIDI0OSwgMTc3LCAyNDksIDg2LCAyNTIsIDE2OSwgMjUwLCAyMiwgCi0gICAgNDMsIDIzMiwgOTAsIDEwOCwgMTYsIDMxLCAyMjQsIDMsIDEwOCwgMTYsIDMxLCAyNTQsIDE5MiwgMTA4LCAxNiwgMzEsIAotICAgIDI0NCwgOTYsIDEwOCwgMTYsIDMxLCAyNDUsIDIyMywgMTA4LCAxNiwgMzEsIDIxMiwgNDAsIDEwOCwgMTYsIDMxLCAyNTQsIAotICAgIDQzLCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjIzLCAxMDUsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNCwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgNDQsIDIxMywgMTQzLCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDIsIDEwOCwgMTYsIDMxLCAKKyAgICAxMzksIDQsIDYxLCAxMSwgMTM5LCA0LCAyNTMsIDE2NiwgMTEsIDEzOSwgNCwgMjUxLCA3NCwgMTEsIDEzOSwgNCwgMjQ5LCAKKyAgICA2OCwgMTEsIDEzOSwgNCwgNzYsIDExLCAxMzksIDQsIDI0NSwgMTQsIDExLCAxMzksIDQsIDI0MywgMjA5LCAxMSwgMTM5LCAKKyAgICA0LCAyNDIsIDY3LCAxMSwgMTM5LCA0LCA3NCwgMTEsIDEzOSwgNCwgMjM1LCAxNTAsIDExLCAxMzksIDQsIDIzNSwgMjksIAorICAgIDExLCAxMzksIDQsIDE1NiwgMTEsIDEzOSwgNCwgMTk0LCAxMSwgMTM5LCA0LCAyMzAsIDMwLCAxMSwgMTM5LCA0LCA3OCwgCisgICAgMTEsIDEzOSwgNCwgMjI2LCAxMDksIDExLCAxMzksIDQsIDIyNCwgOTksIDExLCAxMzksIDQsIDE1MywgMTEsIDEzOSwgNCwgCisgICAgMjIyLCA5MywgMTEsIDEzOSwgNCwgMjE3LCAxNTMsIDExLCAxMzksIDQsIDY5LCAxMSwgMTM5LCA0LCAyMTQsIDEwNSwgMTEsIAorICAgIDEzOSwgNCwgMjEyLCA5OCwgMTEsIDEzOSwgNCwgMjExLCAxNzgsIDExLCAxMzksIDQsIDIxMSwgMTE3LCAxMSwgMTM5LCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDYsIDYxLCAxMSwgMjMsIDEzMywgNiwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIAorICAgIDYsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMTU2LCAxMSwgMjMsIDEzMywgNiwgMTk0LCAxMSwgMjMsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjI2LCAxMDksIDExLCAyMywgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjIyLCA5MywgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNiwgNjksIAorICAgIDExLCAyMywgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIAorICAgIDE3OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCAKKyAgICA2MSwgMTEsIDIzLCAxMzMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0OSwgNjgsIDExLCAyMywgMTMzLCA0LCA3NiwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgMTQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyNDMsIDIwOSwgMTEsIDIzLCAxMzMsIDQsIDI0MiwgNjcsIDExLCAyMywgMTMzLCA0LCA3NCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIzNSwgMTUwLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAyOSwgMTEsIDIzLCAxMzMsIDQsIDE1NiwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDE5NCwgMTEsIDIzLCAxMzMsIDQsIDIzMCwgMzAsIDExLCAyMywgMTMzLCA0LCA3OCwgMTEsIDIzLCAxMzMsIDQsIDIyNiwgCisgICAgMTA5LCAxMSwgMjMsIDEzMywgNCwgMjI0LCA5OSwgMTEsIDIzLCAxMzMsIDQsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDIyMiwgCisgICAgOTMsIDExLCAyMywgMTMzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDY5LCAxMSwgMjMsIDEzMywgNCwgMjE0LCAKKyAgICAxMDUsIDExLCAyMywgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxNzgsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDYsIDYxLCAxMSwgMzUsIDYsIDI1MywgMTY2LCAKKyAgICAxMSwgMzUsIDYsIDI1MSwgNzQsIDExLCAzNSwgNiwgMjQ5LCA2OCwgMTEsIDM1LCA2LCA3NiwgMTEsIDM1LCA2LCAyNDUsIAorICAgIDE0LCAxMSwgMzUsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDYsIDI0MiwgNjcsIDExLCAzNSwgNiwgNzQsIDExLCAzNSwgNiwgCisgICAgMjM1LCAxNTAsIDExLCAzNSwgNiwgMjM1LCAyOSwgMTEsIDM1LCA2LCAxNTYsIDExLCAzNSwgNiwgMTk0LCAxMSwgMzUsIDYsIAorICAgIDIzMCwgMzAsIDExLCAzNSwgNiwgNzgsIDExLCAzNSwgNiwgMjI2LCAxMDksIDExLCAzNSwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKKyAgICA2LCAxNTMsIDExLCAzNSwgNiwgMjIyLCA5MywgMTEsIDM1LCA2LCAyMTcsIDE1MywgMTEsIDM1LCA2LCA2OSwgMTEsIDM1LCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCA2LCAyMTIsIDk4LCAxMSwgMzUsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMzUsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDQsIDYxLCAxMSwgMzUsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDQsIAorICAgIDI1MSwgNzQsIDExLCAzNSwgNCwgMjQ5LCA2OCwgMTEsIDM1LCA0LCA3NiwgMTEsIDM1LCA0LCAyNDUsIDE0LCAxMSwgMzUsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMzUsIDQsIDI0MiwgNjcsIDExLCAzNSwgNCwgNzQsIDExLCAzNSwgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAzNSwgNCwgMjM1LCAyOSwgMTEsIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTk0LCAxMSwgMzUsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAzNSwgNCwgNzgsIDExLCAzNSwgNCwgMjI2LCAxMDksIDExLCAzNSwgNCwgMjI0LCA5OSwgMTEsIDM1LCA0LCAxNTMsIDExLCAKKyAgICAzNSwgNCwgMjIyLCA5MywgMTEsIDM1LCA0LCAyMTcsIDE1MywgMTEsIDM1LCA0LCA2OSwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDYsIDI1MSwgCisgICAgNzQsIDExLCAzNSwgMjMsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDYsIDc2LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDE0LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgNiwgMjQyLCA2NywgMTEsIDM1LCAyMywgNiwgNzQsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCA2LCAxNTYsIDExLCAzNSwgCisgICAgMjMsIDYsIDE5NCwgMTEsIDM1LCAyMywgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgNiwgNzgsIDExLCAzNSwgMjMsIDYsIAorICAgIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCA2LCAxNTMsIDExLCAzNSwgMjMsIDYsIDIyMiwgCisgICAgOTMsIDExLCAzNSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCA2LCA2OSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxMDUsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDQsIDYxLCAxMSwgMzUsIDIzLCA0LCAyNTMsIDE2NiwgMTEsIAorICAgIDM1LCAyMywgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgNCwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgCisgICAgMjMsIDQsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDQsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA0LCAyNDIsIDY3LCAxMSwgMzUsIAorICAgIDIzLCA0LCA3NCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAorICAgIDQsIDE1NiwgMTEsIDM1LCAyMywgNCwgMTk0LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA0LCA3OCwgCisgICAgMTEsIDM1LCAyMywgNCwgMjI2LCAxMDksIDExLCAzNSwgMjMsIDQsIDIyNCwgOTksIDExLCAzNSwgMjMsIDQsIDE1MywgMTEsIAorICAgIDM1LCAyMywgNCwgMjIyLCA5MywgMTEsIDM1LCAyMywgNCwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDQsIDY5LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxNzgsIDExLCAzNSwgCisgICAgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNiwgNjEsIDExLCAzNSwgMzIsIAorICAgIDYsIDI1MywgMTY2LCAxMSwgMzUsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMzUsIDMyLCA2LCAyNDksIDY4LCAxMSwgMzUsIDMyLCAKKyAgICA2LCA3NiwgMTEsIDM1LCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDksIDExLCAzNSwgMzIsIDYsIAorICAgIDI0MiwgNjcsIDExLCAzNSwgMzIsIDYsIDc0LCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAKKyAgICAyOSwgMTEsIDM1LCAzMiwgNiwgMTU2LCAxMSwgMzUsIDMyLCA2LCAxOTQsIDExLCAzNSwgMzIsIDYsIDIzMCwgMzAsIDExLCAKKyAgICAzNSwgMzIsIDYsIDc4LCAxMSwgMzUsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKKyAgICAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAzMiwgCisgICAgNiwgNjksIDExLCAzNSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAKKyAgICAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCAKKyAgICA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDQsIAorICAgIDI0OSwgNjgsIDExLCAzNSwgMzIsIDQsIDc2LCAxMSwgMzUsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA0LCAyNDMsIAorICAgIDIwOSwgMTEsIDM1LCAzMiwgNCwgMjQyLCA2NywgMTEsIDM1LCAzMiwgNCwgNzQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMTUwLCAKKyAgICAxMSwgMzUsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDMyLCA0LCAxNTYsIDExLCAzNSwgMzIsIDQsIDE5NCwgMTEsIDM1LCAKKyAgICAzMiwgNCwgMjMwLCAzMCwgMTEsIDM1LCAzMiwgNCwgNzgsIDExLCAzNSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCAKKyAgICA0LCAyMjQsIDk5LCAxMSwgMzUsIDMyLCA0LCAxNTMsIDExLCAzNSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMzUsIDMyLCA0LCA2OSwgMTEsIDM1LCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIxMiwgCisgICAgOTgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNCwgMjEwLCAKKyAgICAxNTksIDExLCAzNSwgMjMsIDMyLCA2LCA2MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjUxLCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA2LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDYsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MiwgCisgICAgNjcsIDExLCAzNSwgMjMsIDMyLCA2LCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjM1LCAyOSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDYsIDE5NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDMyLCA2LCA3OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDIyMiwgCisgICAgOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDY5LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxNzgsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgNzQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxOTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTksIAorICAgIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCA2OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIAorICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA2LCA2MSwgMTEsIDIzMCwgMTQzLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzMCwgMTQzLCA2LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNiwgCisgICAgNzYsIDExLCAyMzAsIDE0MywgNiwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA2LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDYsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNiwgMTU2LCAxMSwgMjMwLCAxNDMsIDYsIDE5NCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDYsIDc4LCAxMSwgMjMwLCAxNDMsIDYsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNiwgMTUzLCAxMSwgMjMwLCAxNDMsIDYsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgNjksIDExLCAyMzAsIDE0MywgNiwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCisgICAgNiwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDExNywgMTEsIAorICAgIDIzMCwgMTQzLCA2LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA0LCA2MSwgMTEsIDIzMCwgMTQzLCA0LCAyNTMsIDE2NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNCwgNzYsIAorICAgIDExLCAyMzAsIDE0MywgNCwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA0LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDQsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNCwgMTU2LCAxMSwgMjMwLCAxNDMsIDQsIDE5NCwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDQsIDc4LCAxMSwgMjMwLCAxNDMsIDQsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNCwgMTUzLCAxMSwgMjMwLCAxNDMsIDQsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgNjksIDExLCAyMzAsIDE0MywgNCwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCisgICAgNCwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDExNywgMTEsIAorICAgIDIzMCwgMTQzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA0LCAyNDcsIDEyNywgNzQsIDExLCAzMiwgNCwgMjQ3LCAxMjcsIDIzNSwgCisgICAgMTUwLCAxMSwgMjMsIDYsIDI1NCwgMTUxLCAxMSwgMjMsIDYsIDI1MiwgMzQsIDExLCAyMywgNiwgMjQzLCAxMTQsIDExLCAKKyAgICAyMywgNiwgMjQ4LCA2MiwgMTEsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDYsIDI0NSwgCisgICAgNzEsIDExLCAyMywgNiwgMjE2LCAxODAsIDExLCAyMywgNiwgMjM1LCAxOTIsIDExLCAyMywgNiwgMjM0LCAyMjgsIDExLCAKKyAgICAyMywgNiwgMjMzLCAxMDQsIDExLCAyMywgNiwgMjMwLCAxMDcsIDExLCAyMywgNiwgMjI3LCAyNDIsIDExLCAyMywgNiwgCisgICAgMjExLCAxNTcsIDExLCAyMywgNiwgMjI2LCAyMDMsIDExLCAyMywgNiwgMjI1LCAxMTEsIDExLCAyMywgNiwgMjIzLCA0MCwgCisgICAgMTEsIDIzLCA2LCAyMTYsIDE4MSwgODcsIDExLCAyMywgNiwgMjE5LCAxNzksIDExLCAyMywgNiwgMjE3LCA0MiwgMTEsIDIzLCAKKyAgICA2LCAyMTQsIDE1NywgMTEsIDIzLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDIzLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjksIDIyNiwgMTEsIDIzLCA0LCAyNTQsIDE1MSwgMTEsIDIzLCAKKyAgICA0LCAyNTIsIDM0LCAxMSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMjMsIDQsIDI0OCwgNjIsIDExLCAyMywgNCwgMjQ1LCAxMDgsIAorICAgIDExLCAyMywgNCwgMjEwLCA4NSwgMTEsIDIzLCA0LCAyNDUsIDcxLCAxMSwgMjMsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDQsIAorICAgIDIzNSwgMTkyLCAxMSwgMjMsIDQsIDIzNCwgMjI4LCAxMSwgMjMsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDQsIDIzMCwgMTA3LCAKKyAgICAxMSwgMjMsIDQsIDIyNywgMjQyLCAxMSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMjMsIDQsIAorICAgIDIyNSwgMTExLCAxMSwgMjMsIDQsIDIyMywgNDAsIDExLCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMjMsIDQsIDIxOSwgCisgICAgMTc5LCAxMSwgMjMsIDQsIDIxNywgNDIsIDExLCAyMywgNCwgMjE0LCAxNTcsIDExLCAyMywgNCwgMjI1LCAxMzYsIDExLCAKKyAgICAyMywgNCwgMjUwLCAxMTgsIDExLCAyMywgNCwgMjI0LCAxNjQsIDExLCAyMywgNCwgMjI2LCAyMDUsIDExLCAyMywgMjI2LCAKKyAgICAxLCAyNDcsIDI0MSwgMTEsIDIzLCAyNDUsIDEwOSwgODcsIDExLCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDIzNCwgCisgICAgMjI5LCA4NywgMTEsIDIzLCAyMjUsIDEzNywgODcsIDExLCAyMywgMjIzLCA0MSwgODcsIDExLCAyMywgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzIsIDYsIDI1MiwgMzQsIDExLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMzIsIDYsIDI0NSwgNzEsIDExLCAKKyAgICAzMiwgNiwgMjE2LCAxODAsIDExLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzMiwgNiwgCisgICAgMjMzLCAxMDQsIDExLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAzMiwgNiwgMjExLCAxNTcsIAorICAgIDExLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAzMiwgNiwgMjI1LCAxMTEsIDExLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDMyLCA2LCAKKyAgICAyMTYsIDE4MSwgODcsIDExLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDMyLCA2LCAyMTQsIAorICAgIDE1NywgMTEsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDMyLCA2LCAyNTAsIDExOCwgMTEsIDMyLCA2LCAyMjQsIDE2NCwgMTEsIAorICAgIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjksIDIyNiwgMTEsIDMyLCA0LCAyNTQsIDE1MSwgMTEsIDMyLCA0LCAyNTIsIAorICAgIDM0LCAxMSwgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzIsIDQsIDI0OCwgNjIsIDExLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAzMiwgCisgICAgNCwgMjEwLCA4NSwgMTEsIDMyLCA0LCAyNDUsIDcxLCAxMSwgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzIsIDQsIDIzNSwgMTkyLCAKKyAgICAxMSwgMzIsIDQsIDIzNCwgMjI4LCAxMSwgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzIsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzIsIDQsIDIyNiwgMjAzLCAxMSwgMzIsIDQsIDIyNSwgMTExLCAKKyAgICAxMSwgMzIsIDQsIDIyMywgNDAsIDExLCAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMzIsIAorICAgIDQsIDIxNywgNDIsIDExLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzMiwgNCwgMjI1LCAxMzYsIDExLCAzMiwgNCwgMjUwLCAKKyAgICAxMTgsIDExLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgCisgICAgMTEsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDMyLCAKKyAgICAyMjUsIDEzNywgODcsIDExLCAzMiwgMjIzLCA0MSwgODcsIDExLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNTQsIDE1MSwgMTEsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDYsIAorICAgIDI0OCwgNjIsIDExLCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNDUsIDcxLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDYsIAorICAgIDIzNCwgMjI4LCAxMSwgMjMsIDMyLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAyMywgMzIsIAorICAgIDYsIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAyMywgCisgICAgMzIsIDYsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MSwgODcsIDExLCAKKyAgICAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2NCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyOSwgMjI2LCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE1MSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDQsIDI0OCwgNjIsIAorICAgIDExLCAyMywgMzIsIDQsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDcxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAyMywgMzIsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAyMywgMzIsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgCisgICAgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA0LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAyMywgMzIsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDIzLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAyMywgMzIsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDIzLCAzMiwgMjIzLCA0MSwgODcsIDExLCAyMywgMzIsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgNiwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDYsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgCisgICAgNiwgMjQ1LCA3MSwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyMzQsIDIyOCwgMTEsIDM1LCAyMywgNiwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIAorICAgIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjAzLCAxMSwgCisgICAgMzUsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNiwgMjI0LCAKKyAgICAxNjQsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjksIDIyNiwgMTEsIDM1LCAyMywgNCwgMjU0LCAKKyAgICAxNTEsIDExLCAzNSwgMjMsIDQsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCA0LCAyNDgsIAorICAgIDYyLCAxMSwgMzUsIDIzLCA0LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCAKKyAgICA3MSwgMTEsIDM1LCAyMywgNCwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgNCwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAKKyAgICA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNCwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNCwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNCwgMjE0LCAxNTcsIDExLCAzNSwgCisgICAgMjMsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA0LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNCwgMjI0LCAxNjQsIDExLCAKKyAgICAzNSwgMjMsIDQsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMzUsIDIzLCAyNDUsIDEwOSwgCisgICAgODcsIDExLCAzNSwgMjMsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMjM0LCAyMjksIDg3LCAxMSwgMzUsIDIzLCAyMjUsIAorICAgIDEzNywgODcsIDExLCAzNSwgMjMsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDExMiwgODcsIDExLCAzNSwgMjMsIAorICAgIDMyLCA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjQyLCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDM1LCAyMywgMzIsIDYsIAorICAgIDIyNSwgMTExLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExOCwgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgMTY0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDMyLCAKKyAgICAyMjksIDIyNiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNzEsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIAorICAgIDQyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIAorICAgIDIwNSwgMTEsIDM1LCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAKKyAgICAzNSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzNSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDMyLCAKKyAgICAyMjUsIDEzNywgODcsIDExLCAzNSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgMTEyLCA4NywgCisgICAgMTEsIDIzLCA2LCAyNDcsIDIzNSwgMTEsIDIzLCA0LCAyNDcsIDIzNSwgMTEsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDIzLCAKKyAgICAyMSwgMTExLCAxMSwgMjMsIDIxLCAxMDUsIDExLCAyMywgMjEsIDE1OCwgMTEsIDIzLCAyMSwgMTYxLCAxMSwgMjMsIDIxLCAKKyAgICAxOTAsIDExLCAyMywgMjEsIDE5NSwgMTEsIDIzLCAyMSwgMTk5LCAxMSwgMjMsIDIxLCAxOTYsIDExLCAyMywgMjEsIDIwMSwgCisgICAgMTEsIDEzOSwgMjEsIDIxMCwgODYsIDExLCAxMzksIDIxLCAxMTEsIDExLCAxMzksIDIxLCAxMDUsIDExLCAxMzksIDIxLCAKKyAgICAxNTgsIDExLCAxMzksIDIxLCAxNjEsIDExLCAxMzksIDIxLCAxOTAsIDExLCAxMzksIDIxLCAxOTUsIDExLCAxMzksIDIxLCAKKyAgICAxOTksIDExLCAxMzksIDIxLCAxOTYsIDExLCAxMzksIDIxLCAyMDEsIDExLCAzNSwgMjEsIDIxMCwgODYsIDExLCAzNSwgMjEsIAorICAgIDExMSwgMTEsIDM1LCAyMSwgMTA1LCAxMSwgMzUsIDIxLCAxNTgsIDExLCAzNSwgMjEsIDE2MSwgMTEsIDM1LCAyMSwgMTkwLCAKKyAgICAxMSwgMzUsIDIxLCAxOTUsIDExLCAzNSwgMjEsIDE5OSwgMTEsIDM1LCAyMSwgMTk2LCAxMSwgMzUsIDIxLCAyMDEsIDExLCAKKyAgICAzNSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIzLCAyMSwgMTExLCAxMSwgMzUsIDIzLCAyMSwgMTA1LCAxMSwgMzUsIAorICAgIDIzLCAyMSwgMTU4LCAxMSwgMzUsIDIzLCAyMSwgMTYxLCAxMSwgMzUsIDIzLCAyMSwgMTkwLCAxMSwgMzUsIDIzLCAyMSwgCisgICAgMTk1LCAxMSwgMzUsIDIzLCAyMSwgMTk5LCAxMSwgMzUsIDIzLCAyMSwgMTk2LCAxMSwgMzUsIDIzLCAyMSwgMjAxLCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAyMTAsIDg2LCAxMSwgMjMwLCAxNDMsIDIxLCAxMTEsIDExLCAyMzAsIDE0MywgMjEsIDEwNSwgMTEsIAorICAgIDIzMCwgMTQzLCAyMSwgMTU4LCAxMSwgMjMwLCAxNDMsIDIxLCAxNjEsIDExLCAyMzAsIDE0MywgMjEsIDE5MCwgMTEsIDIzMCwgCisgICAgMTQzLCAyMSwgMTk1LCAxMSwgMjMwLCAxNDMsIDIxLCAxOTksIDExLCAyMzAsIDE0MywgMjEsIDE5NiwgMTEsIDIzMCwgMTQzLCAKKyAgICAyMSwgMjAxLCA5LCAxMSwgMjU0LCAxNzksIDksIDExLCAyNTIsIDYyLCA5LCAxMSwgMjM1LCAxMjksIDksIDExLCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIxMiwgMzAsIDksIDExLCAyMTAsIDEwOCwgOSwgMTEsIDI0MiwgNDQsIDksIDExLCAyMTcsIDgxLCA5LCAKKyAgICAxMSwgMjExLCA0MywgOSwgMTEsIDIzNSwgMCwgOSwgMTEsIDIzMywgMTA4LCA5LCAxMSwgMjMxLCA4MywgOSwgMTEsIDIyOCwgCisgICAgNjcsIDksIDExLCAyMjEsIDE2OCwgOSwgMTEsIDI1NCwgMjA1LCA5LCAxMSwgMjQ0LCAxNTAsIDksIDExLCAyMjIsIDI4LCA5LCAKKyAgICAxMSwgMjI0LCA4NCwgOSwgMTEsIDIyMywgOTgsIDksIDExLCAyMjAsIDYxLCA5LCAxMSwgMjE3LCA4LCA5LCAxMSwgMjE2LCAKKyAgICAxOTMsIDksIDExLCAyMzQsIDEzNSwgOSwgMTEsIDIxNiwgMjAzLCA5LCAxMSwgMjQ4LCAyMjQsIDksIDExLCAyMTAsIDExMSwgCisgICAgOSwgMTEsIDI0MiwgMjUxLCA5LCAxMSwgMjQ3LCAxMjcsIDI1MiwgNjIsIDksIDExLCAyNDcsIDEyNywgMjI4LCA2NywgOSwgCisgICAgMTEsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMTEsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDI1MiwgNjIsIDksIAorICAgIDExLCA2NSwgMjM1LCAxMjksIDksIDExLCA2NSwgMjQxLCAyMjUsIDksIDExLCA2NSwgMjQyLCA0NCwgOSwgMTEsIDY1LCAKKyAgICAyMTEsIDQzLCA5LCAxMSwgNjUsIDIzNSwgMCwgOSwgMTEsIDY1LCAyMzMsIDEwOCwgOSwgMTEsIDY1LCAyMzEsIDgzLCA5LCAKKyAgICAxMSwgNjUsIDIyOCwgNjcsIDksIDExLCA2NSwgMjIxLCAxNjgsIDksIDExLCA2NSwgMjU0LCAyMDUsIDksIDExLCA2NSwgCisgICAgMjQ0LCAxNTAsIDksIDExLCA2NSwgMjIyLCAyOCwgOSwgMTEsIDY1LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDIyMCwgNjEsIDksIAorICAgIDExLCA2NSwgMjE3LCA4LCA5LCAxMSwgNjUsIDIxNiwgMTkzLCA5LCAxMSwgNjUsIDIzNCwgMTM1LCA5LCAxMSwgNjUsIDI0OCwgCisgICAgMjI0LCA5LCAxMSwgNjUsIDI0MiwgMjUxLCA5LCAxMSwgMjE3LCA3NywgMjM1LCAxMjksIDksIDExLCAyMTcsIDc3LCAyNDIsIAorICAgIDQ0LCA5LCAxMSwgMjE3LCA3NywgMjExLCA0MywgOSwgMTEsIDIxNywgNzcsIDIzMywgMTA4LCA5LCAxMSwgMjE3LCA3NywgCisgICAgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDIyMSwgMTY4LCA5LCAxMSwgMjE3LCA3NywgMjU0LCAyMDUsIDksIDExLCAyMTcsIAorICAgIDc3LCAyMjIsIDI4LCA5LCAxMSwgMjE3LCA3NywgMjI0LCA4NCwgOSwgMTEsIDIxNywgNzcsIDIyMCwgNjEsIDksIDExLCAKKyAgICAyMTcsIDc3LCAyMzQsIDEzNSwgOSwgMTEsIDIxNywgNzcsIDI0OCwgMjI0LCA5LCAxMSwgMjE3LCA3NywgMjQyLCAyNTEsIDksIAorICAgIDExLCAyMTcsIDc3LCAyNDcsIDEyNywgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI1MiwgNjIsIDksIDExLCAyMTgsIDExMiwgMjM1LCAxMjksIDksIDExLCAyMTgsIDExMiwgMjQxLCAyMjUsIAorICAgIDksIDExLCAyMTgsIDExMiwgMjQyLCA0NCwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgxLCA5LCAxMSwgMjE4LCAxMTIsIDIxMSwgCisgICAgNDMsIDksIDExLCAyMTgsIDExMiwgMjM1LCAwLCA5LCAxMSwgMjE4LCAxMTIsIDIzMSwgODMsIDksIDExLCAyMTgsIDExMiwgCisgICAgMjI4LCA2NywgOSwgMTEsIDIxOCwgMTEyLCAyMjEsIDE2OCwgOSwgMTEsIDIxOCwgMTEyLCAyNTQsIDIwNSwgOSwgMTEsIAorICAgIDIxOCwgMTEyLCAyNDQsIDE1MCwgOSwgMTEsIDIxOCwgMTEyLCAyMjIsIDI4LCA5LCAxMSwgMjE4LCAxMTIsIDIyNCwgODQsIAorICAgIDksIDExLCAyMTgsIDExMiwgMjIwLCA2MSwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgsIDksIDExLCAyMTgsIDExMiwgMjE2LCAKKyAgICAxOTMsIDksIDExLCAyMTgsIDExMiwgMjM0LCAxMzUsIDksIDExLCAyMTgsIDExMiwgMjQ4LCAyMjQsIDksIDExLCAyMTgsIAorICAgIDExMiwgMjEwLCAxMTEsIDksIDExLCAyMTgsIDExMiwgMjQyLCAyNTEsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI1MiwgCisgICAgNjIsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjMyLCAxMjgsIDI1NCwgMTc5LCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDI1MiwgNjIsIDksIDExLCAyMzIsIDEyOCwgMjM1LCAxMjksIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAKKyAgICAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQxLCAyMjUsIDksIDExLCAyMzIsIDEyOCwgMjEyLCAzMCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDQ0LCA5LCAxMSwgMjMyLCAxMjgsIDIxNywgODEsIDksIDExLCAKKyAgICAyMzIsIDEyOCwgMjExLCA0MywgOSwgMTEsIDIzMiwgMTI4LCAyMzMsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyMzEsIDgzLCAKKyAgICA5LCAxMSwgMjMyLCAxMjgsIDIyOCwgNjcsIDksIDExLCAyMzIsIDEyOCwgMjIxLCAxNjgsIDksIDExLCAyMzIsIDEyOCwgCisgICAgMjU0LCAyMDUsIDksIDExLCAyMzIsIDEyOCwgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjIyLCAyOCwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMjQsIDg0LCA5LCAxMSwgMjMyLCAxMjgsIDIyMywgOTgsIDksIDExLCAyMzIsIDEyOCwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDIzMiwgMTI4LCAyMTcsIDgsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAxOTMsIDksIDExLCAyMzIsIDEyOCwgMjM0LCAKKyAgICAxMzUsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAyMjQsIDksIDExLCAyMzIsIAorICAgIDEyOCwgMjEwLCAxMTEsIDksIDExLCAyMzIsIDEyOCwgMjQyLCAyNTEsIDksIDExLCAxMzksIDI1MiwgNjIsIDksIDExLCAKKyAgICAxMzksIDIzNSwgMTI5LCA5LCAxMSwgMTM5LCAyNDgsIDIwMywgOSwgMTEsIDEzOSwgMjEyLCAzMCwgOSwgMTEsIDEzOSwgCisgICAgMjEwLCAxMDgsIDksIDExLCAxMzksIDI0MiwgNDQsIDksIDExLCAxMzksIDIxNywgODEsIDksIDExLCAxMzksIDIxMSwgNDMsIAorICAgIDksIDExLCAxMzksIDIzMywgMTA4LCA5LCAxMSwgMTM5LCAyMzEsIDgzLCA5LCAxMSwgMTM5LCAyMjgsIDY3LCA5LCAxMSwgCisgICAgMTM5LCAyMjEsIDE2OCwgOSwgMTEsIDEzOSwgMjU0LCAyMDUsIDksIDExLCAxMzksIDI0NCwgMTUwLCA5LCAxMSwgMTM5LCAKKyAgICAyMjIsIDI4LCA5LCAxMSwgMTM5LCAyMjQsIDg0LCA5LCAxMSwgMTM5LCAyMjMsIDk4LCA5LCAxMSwgMTM5LCAyMjAsIDYxLCAKKyAgICA5LCAxMSwgMTM5LCAyMTcsIDgsIDksIDExLCAxMzksIDIxNiwgMTkzLCA5LCAxMSwgMTM5LCAyMzQsIDEzNSwgOSwgMTEsIAorICAgIDEzOSwgMjE2LCAyMDMsIDksIDExLCAxMzksIDI0OCwgMjI0LCA5LCAxMSwgMTM5LCAyMTAsIDExMSwgOSwgMTEsIDEzOSwgCisgICAgMjQyLCAyNTEsIDksIDExLCAyMjYsIDE3MiwgNjYsIDIsIDEyMiwgMiwgMjE3LCA0NCwgOSwgMTEsIDIyNiwgMTcyLCAxMjIsIAorICAgIDIsIDI0OCwgMjAzLCAyMzEsIDIxMCwgODYsIDI0NSwgMjI4LCAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTksIDMwLCAKKyAgICAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIyOCwgNjEsIDIxMSwgCisgICAgMjM5LCAyMzEsIDIxMCwgODYsIDIyMywgMTE0LCAyNDYsIDEwNCwgMjMxLCAyMTAsIDg2LCAyNDIsIDEzNCwgMjQ2LCAxMDQsIAorICAgIDIzMSwgMjEwLCA4NiwgNzEsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDEyMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCisgICAgODYsIDExMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgMTksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjE5LCAxMjcsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjAsIDEyNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCisgICAgODYsIDI0NSwgMjAxLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDE0OSwgMjMxLCAKKyAgICAyMTAsIDg2LCAxMjMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMTMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAxMzQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDQsIDE5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCA4OSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDIxOSwgMTI3LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCAKKyAgICA4NiwgMjIwLCAxMjQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDUsIDIwMSwgNjQsIDI1MiwgMTYxLCAyMzEsIAorICAgIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCA0MiwgMjMxLCAKKyAgICAyMTAsIDg2LCAxMTMsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjQ0LCA4OSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjE5LCAxMjcsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDUsIDIwMSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDIyNSwgMjgsIDIzMSwgMjEwLCA4NiwgMjI2LCAxNjAsIDIzMSwgMjEwLCA4NiwgMjUyLCAxNjIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUwLCA3OCwgMjMxLCAyMTAsIDg2LCAyMTgsIDI0MSwgMjMxLCAyMTAsIDg2LCAyMTgsIDQwLCAyMzEsIDIxMCwgODYsIAorICAgIDI1MywgMTg3LCAyMzEsIDIxMCwgODYsIDIxMSwgMjMyLCAyMzEsIDIxMCwgODYsIDIzNSwgNjgsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUyLCAxOTIsIDEzMSwgODYsIDIwMywgMjUyLCAxOTIsIDEzMSwgODYsIDI0MSwgNTAsIDEzMSwgODYsIDI0MSwgNDksIAorICAgIDEzMSwgODYsIDI0MSwgNDgsIDEzMSwgODYsIDI0MSwgNDcsIDEzMSwgODYsIDI0MSwgNDYsIDEzMSwgODYsIDI0MSwgNDUsIAorICAgIDEzMSwgODYsIDI0MSwgNDQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIAorICAgIDEzMSwgODYsIDI0MSwgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIAorICAgIDEzMSwgODYsIDI0MSwgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIAorICAgIDEzMSwgODYsIDI0MSwgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIAorICAgIDEzMSwgODYsIDI0MSwgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIAorICAgIDEzMSwgODYsIDI0MSwgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIAorICAgIDEzMSwgODYsIDI0MSwgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIAorICAgIDEzMSwgODYsIDI0MSwgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIAorICAgIDEzMSwgODYsIDI0MSwgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgCisgICAgMTMxLCA4NiwgMjQxLCA4LCAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIAorICAgIDg2LCAyNDEsIDQsIDEzMSwgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCA2NywgMjUyLCAxOTIsIDEzMSwgCisgICAgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAKKyAgICAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIAorICAgIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgCisgICAgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgCisgICAgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAKKyAgICAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIAorICAgIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgCisgICAgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgCisgICAgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAKKyAgICAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIAorICAgIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgCisgICAgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgCisgICAgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjUyLCAxOTIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjE5LCAxNywgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgCisgICAgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIyMCwgMTI0LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjE5LCAKKyAgICAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgMzcsIAorICAgIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAyMzQsIDg1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDExMywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQxLCAyMzIsIDIyNSwgCisgICAgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQxLCAKKyAgICAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAKKyAgICAxMjQsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIAorICAgIDM3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ3LCAyNTUsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAxMTMsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAKKyAgICA4OSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyMCwgMTI0LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgCisgICAgMjQ5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjM0LCAzNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCA4NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgODUsIAorICAgIDIzNSwgNjgsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAxMTMsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjQ0LCAxOSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIDI0OSwgMjUwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyMCwgMTI0LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjM0LCA4NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgNzEsIDIzNSwgNjgsIDIxLCAyMTAsIDg3LCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTAsIDg3LCAyNDksIDIyNywgMjEsIDEyMywgMjQ5LCAyMjcsIDIxLCAxMTMsIAorICAgIDI0OSwgMjI3LCAyMSwgMTM0LCAyNDksIDIyNywgMjEsIDI0NCwgMTksIDI0OSwgMjI3LCAyMSwgMjQ0LCA4OSwgMjQ5LCAKKyAgICAyMjcsIDIxLCAyMTksIDEyNywgMjQ5LCAyMjcsIDIxLCAyMjAsIDEyNCwgMjQ5LCAyMjcsIDIxLCAyNDUsIDIwMSwgMjQ5LCAKKyAgICAyMjcsIDIxLCAyMjgsIDIwNSwgMjQ5LCAyMjcsIDg4LCA3LCA2LCAxLCA2MSwgODgsIDcsIDYsIDEsIDI1MywgMTY2LCA4OCwgCisgICAgNywgNiwgMSwgMjUxLCA3NCwgODgsIDcsIDYsIDEsIDI0OSwgNjgsIDg4LCA3LCA2LCAxLCA3NiwgODgsIDcsIDYsIDEsIAorICAgIDI0NSwgMTQsIDg4LCA3LCA2LCAxLCAyNDMsIDIwOSwgODgsIDcsIDYsIDEsIDI0MiwgNjcsIDg4LCA3LCA2LCAxLCA3NCwgCisgICAgODgsIDcsIDYsIDEsIDIzNSwgMTUwLCA4OCwgNywgNiwgMSwgMjM1LCAyOSwgODgsIDcsIDYsIDEsIDE1NiwgODgsIDcsIDYsIAorICAgIDEsIDE5NCwgODgsIDcsIDYsIDEsIDIzMCwgMzAsIDg4LCA3LCA2LCAxLCA3OCwgODgsIDcsIDYsIDEsIDIyNiwgMTA5LCA4OCwgCisgICAgNywgNiwgMSwgMjI0LCA5OSwgODgsIDcsIDYsIDEsIDE1MywgODgsIDcsIDYsIDEsIDIyMiwgOTMsIDg4LCA3LCA2LCAxLCAKKyAgICAyMTcsIDE1MywgODgsIDcsIDYsIDEsIDY5LCA4OCwgNywgNiwgMSwgMjE0LCAxMDUsIDg4LCA3LCA2LCAxLCAyMTIsIDk4LCAKKyAgICA4OCwgNywgNiwgMSwgMjExLCAxNzgsIDg4LCA3LCA2LCAxLCAyMTEsIDExNywgODgsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgMzIsIDcsIDYsIDEsIDI1MSwgNzQsIDM3LCAzMiwgCisgICAgNywgNiwgMSwgMTUzLCAzNywgMjUwLCAxOTksIDM3LCAyMTEsIDE4MCwgOTIsIDcsIDYsIDEsIDYxLCA5MiwgNywgNiwgMSwgCisgICAgMjUzLCAxNjYsIDkyLCA3LCA2LCAxLCAyNTEsIDc0LCA5MiwgNywgNiwgMSwgMjQ5LCA2OCwgOTIsIDcsIDYsIDEsIDc2LCAKKyAgICA5MiwgNywgNiwgMSwgMjQ1LCAxNCwgOTIsIDcsIDYsIDEsIDI0MywgMjA5LCA5MiwgNywgNiwgMSwgMjQyLCA2NywgOTIsIDcsIAorICAgIDYsIDEsIDc0LCA5MiwgNywgNiwgMSwgMjM1LCAxNTAsIDkyLCA3LCA2LCAxLCAyMzUsIDI5LCA5MiwgNywgNiwgMSwgMTU2LCAKKyAgICA5MiwgNywgNiwgMSwgMTk0LCA5MiwgNywgNiwgMSwgMjMwLCAzMCwgOTIsIDcsIDYsIDEsIDc4LCA5MiwgNywgNiwgMSwgCisgICAgMjI2LCAxMDksIDkyLCA3LCA2LCAxLCAyMjQsIDk5LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgNiwgMSwgMjIyLCA5MywgCisgICAgOTIsIDcsIDYsIDEsIDIxNywgMTUzLCA5MiwgNywgNiwgMSwgNjksIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgOTIsIDcsIDYsIAorICAgIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCA5MiwgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDkyLCAyNDAsIDIwOCwgOTIsIDIzMCwgNTQsIDkyLCAyMjEsIDE4NSwgOTIsIDIxOCwgMjI4LCA5MiwgMjI0LCAKKyAgICAyMjEsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgCisgICAgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgMzcsIDcsIDYsIDEsIDc2LCAKKyAgICAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCAzNywgNywgNiwgMSwgCisgICAgMjQyLCA2NywgMTUyLCAzNywgNywgNiwgMSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzUsIDI5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE5NCwgMTUyLCAzNywgNywgNiwgCisgICAgMSwgMjMwLCAzMCwgMTUyLCAzNywgNywgNiwgMSwgNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDM3LCA3LCAKKyAgICA2LCAxLCAyMjQsIDk5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgMzcsIAorICAgIDcsIDYsIDEsIDIxNywgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCA2OSwgMTUyLCAzNywgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgCisgICAgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDExNywgMTUyLCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDIyMywgMTYwLCAyMzEsIDEwMiwgNTAsIDIyMywgMTYwLCAyMzEsIAorICAgIDk5LCA1MCwgMTUyLCA5MiwgNywgNiwgMSwgNjEsIDE1MiwgOTIsIDcsIDYsIDEsIDI1MywgMTY2LCAxNTIsIDkyLCA3LCA2LCAKKyAgICAxLCAyNTEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCAxNTIsIDkyLCA3LCA2LCAxLCA3NiwgMTUyLCA5MiwgNywgCisgICAgNiwgMSwgMjQ1LCAxNCwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDE1MiwgOTIsIDcsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE1MiwgOTIsIDcsIDYsIDEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAKKyAgICAyOSwgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzMCwgCisgICAgMzAsIDE1MiwgOTIsIDcsIDYsIDEsIDc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCA5MiwgNywgNiwgMSwgCisgICAgMjI0LCA5OSwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAxNTIsIDkyLCA3LCA2LCAKKyAgICAxLCAyMTcsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgNjksIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAxNTIsIDkyLCAKKyAgICA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIAorICAgIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEzNiwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgCisgICAgOTIsIDI0MCwgMTIwLCAxNTIsIDkyLCAxOTEsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAzNCwgMTUyLCA5MiwgMjEyLCAKKyAgICAyMywgNDIsIDI0NywgMTcyLCA5MiwgMjUwLCAzMSwgOTIsIDI0OSwgMTc4LCA5MiwgMjQ0LCA0LCA5MiwgMjQwLCAxMTIsIAorICAgIDkyLCAyMjksIDkxLCA5MiwgMjI5LCA4NCwgOTIsIDIyNiwgMjE4LCA5MiwgMjE5LCAzNywgOTIsIDEyMCwgMiwgMjQ1LCAzOSwgCisgICAgNzksIDkyLCAyMTMsIDExOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNjEsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI1MywgMTY2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNTEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAKKyAgICAxLCAyNDksIDY4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3NiwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQ1LCAxNCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjQzLCAyMDksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIAorICAgIDI0MiwgNjcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIAorICAgIDE1MCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjM1LCAyOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTU2LCAKKyAgICAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxOTQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzMCwgMzAsIDIyMywgCisgICAgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMjYsIDEwOSwgMjIzLCAxMDYsIAorICAgIDIzNSwgMjQ2LCAxNiwgMSwgMjI0LCA5OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCAyMjIsIDkzLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTcsIDE1MywgMjIzLCAxMDYsIDIzNSwgCisgICAgMjQ2LCAxNiwgMSwgNjksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNCwgMTA1LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTIsIDk4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTEsIDE3OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAKKyAgICAxNiwgMSwgMjExLCAxMTcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMCwgMTU5LCA0MiwgMTQxLCAyNDEsIDcwLCAKKyAgICA5MiwgNTYsIDIzNCwgMjQsIDkyLCA1NiwgMjA2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDU3LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY5LCA5MiwgNTYsIDI0OCwgOTgsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNjIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNDksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNzIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzQsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgMzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzQsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDQsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNzksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzIsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNTksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjgsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNTYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNDgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNzEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjUsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgCisgICAgMjM4LCA0NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDc4LCAyMTYsIDcsIDIyMCwgCisgICAgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2MCwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAKKyAgICAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDcwLCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTIsIDM3LCAxNTQsIDI1NCwgMjU0LCAzNywgMTU0LCAKKyAgICAyNTUsIDIxLCAyNDksIDc5LCAyNDQsIDUwLCAyNTAsIDgsIDIxNCwgMTk0LCAyMjgsIDIxOCwgMiwgMjE4LCAxNTUsIDIxOCwgCisgICAgMzQsIDExNSwgMjMwLCAxMTksIDIxOCwgMzMsIDI1MCwgMzQsIDI1MywgMjE1LCAyNDYsIDYyLCAyMTgsIDMyLCAxMTUsIAorICAgIDI1MSwgMTI2LCAyMjMsIDE2MSwgMjUxLCAxNDgsIDI1MywgMjE1LCAyMjgsIDIxNywgMjEyLCA0MSwgMjEyLCAzNSwgMjEzLCAKKyAgICAxMzEsIDIzMCwgMjAwLCAyMTIsIDI1LCAyNDUsIDIzMiwgMjQyLCAxODgsIDI0NSwgNTMsIDI0NSwgMjMyLCAyNDIsIDE4OCwgCisgICAgMjU0LCAxMzYsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjUzLCAyMzMsIDI0MiwgMTg4LCAyLCAyMzEsIDU2LCAxNjYsIDIzMCwgCisgICAgMTM0LCA4NywgMjEyLCAyNywgMjQ5LCAxNDUsIDIzMCwgMTM0LCA4NywgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTM0LCAKKyAgICA4NywgMjEyLCAyNywgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjQzLCAyMzYsIDIzMCwgMTM0LCA4NywgMjEyLCA1MiwgCisgICAgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAyNDksIAorICAgIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDksIDE0NSwgMjMwLCAxMzMsIDE2NiwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyNDQsIAorICAgIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAKKyAgICAxOTgsIDI0MywgMjM2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIxOCwgMzksIDIsIDI0NCwgMTk4LCAyNDIsIDE4NiwgCisgICAgMjE4LCAxNTgsIDIyMCwgMSwgMjE4LCAxNTgsIDI1MCwgMTI0LCAyMjEsIDE3MCwgMjQ1LCA0NywgMjE1LCAyMzYsIDI0OCwgCisgICAgOTIsIDIxNSwgMjM2LCAyMjYsIDYzLCAyMTUsIDIzNiwgMjUxLCAzNSwgMjE1LCAxMTAsIDI1MCwgMTI2LCAyNTEsIDIxOCwgCisgICAgMjIyLCAxOTMsIDI0MSwgMTg2LCAyMTgsIDM3LCAyNTEsIDIxOCwgMjQ1LCAyMzYsIDY0LCAyMzEsIDE5OSwgMjQ1LCAyMzYsIAorICAgIDY0LCAyMjMsIDM0LCAyNDEsIDIxMSwgMjQ0LCAxOSwgMjMzLCA2MCwgMjQ5LCAyNTQsIDIzMSwgMTc1LCAyMzMsIDU5LCAKKyAgICAyNDQsIDE4NCwgMjMzLCA1OSwgMjMzLCA2MCwgMjQ0LCA1NSwgMjM2LCA3LCAyMTEsIDIzOSwgMjMwLCA2MywgMjE2LCAzNSwgCisgICAgMjUzLCAxOTksIDI0MiwgMTUwLCAyMzEsIDcyLCAyMTIsIDM5LCAyMTcsIDU4LCAyMzMsIDMyLCAyNTIsIDE1NywgMjI1LCAKKyAgICA2NSwgMjIzLCAxMTQsIDI1NCwgNjIsIDI0MiwgMTM0LCAyNTQsIDYyLCAyMjUsIDIyMCwgMjI1LCAyMjEsIDI1MCwgMTI3LCAKKyAgICAyMTgsIDExNiwgMjQyLCAzMCwgMjE5LCA5MiwgNjQsIDIyNSwgNDcsIDIzMSwgOTIsIDIyNiwgMjAxLCAyNTEsIDIwMiwgCisgICAgMjI0LCAyMzIsIDIzMywgNDIsIDIyMywgMzUsIDI0OSwgMTUwLCAyMjMsIDM1LCAyNTIsIDE2NywgMjQ5LCAxODEsIDIyMywgCisgICAgMzQsIDI0OSwgMTAzLCAyMiwgMjIzLCAzNCwgMjE4LCAxNDMsIDI1MSwgMTc1LCAyMTksIDE2LCAyNTEsIDE1OSwgMjQ0LCAzLCAKKyAgICAyNDMsIDI1NSwgMjIyLCAyMDksIDIxNywgMjQ3LCAyMjQsIDIzNCwgMjQ4LCAxODMsIDIyNiwgMjQwLCAyMTgsIDgsIDI0NCwgCisgICAgMCwgMjE5LCAyMzIsIDI0NCwgOTksIDI1MSwgMjksIDIsIDIxNywgMjQwLCAyNDgsIDQzLCAyMTksIDU0LCAyNDAsIDExOSwgCisgICAgMjQ5LCAxNDksIDIyMCwgNzIsIDI0MCwgMTE4LCAyNDAsIDExOSwgMjQ5LCAxNDksIDI0NiwgMTE2LCAyNDksIDE4MCwgMjUwLCAKKyAgICA5MiwgMTMwLCAyNTEsIDYsIDIzMiwgMTQ3LCAyNDksIDk2LCAyNDEsIDYyLCAyMjQsIDIzNiwgMjE5LCAyNDIsIDI1MiwgNDQsIAorICAgIDI1MSwgMTcxLCAyMjQsIDIzNywgNjQsIDI0NCwgNDEsIDI0OSwgMTc5LCAyNDQsIDMyLCAyMiwgMjM0LCAzOCwgMjE3LCAyMCwgCisgICAgMjExLCAyMzAsIDI0MiwgMjAsIDIyMiwgMTQsIDI1MSwgMTg1LCAyMiwgMjQ5LCAxMTAsIDIxMSwgMjM3LCAyNDIsIDE5MSwgCisgICAgMjQ5LCAyNDMsIDI0MiwgMTkxLCAyMTUsIDE5NCwgMjQ2LCA5OCwgMjUyLCA3MCwgMjMwLCA5OCwgMjUwLCAxNSwgMjUyLCAKKyAgICA3MCwgMjMwLCA5NywgMjUyLCAxOTUsIDI1MSwgMTg0LCAyMjMsIDM2LCAyMTEsIDIwMSwgMjI0LCAxOTgsIDI1MSwgMjQzLCAKKyAgICAyNTEsIDI4LCAyMzUsIDE0NCwgMjUwLCA4NSwgMjE1LCAyMzYsIDI0NCwgMTcwLCAyNTAsIDg0LCAyNDQsIDEwMiwgMjQ0LCAKKyAgICAxMDMsIDIxOSwgMTQsIDI1MiwgMTY2LCAyMjUsIDI1NCwgMjI0LCAyNDcsIDI0OSwgMjEyLCAyNTIsIDE2NywgMjE3LCA2MCwgCisgICAgMjE1LCAyMzYsIDI0OSwgMTM2LCAyNDQsIDc1LCAyMjUsIDY2LCAyNDgsIDg5LCAyMzUsIDEzNywgMjQ3LCAxMzksIDI1MCwgCisgICAgMjQwLCAyMTgsIDExNSwgMjExLCAyNDAsIDI1MCwgMTA2LCAyMzAsIDEzNCwgMjEzLCAxNjQsIDI1MCwgMTcwLCAyMjEsIAorICAgIDIwMSwgMjIxLCAyMjYsIDI0MiwgMTU1LCAyNTEsIDMsIDI1MCwgMjQxLCAyNDAsIDI1MiwgMjQ0LCAxMzgsIDIxMiwgMCwgCisgICAgMjIyLCAyMDIsIDI0OSwgMjQ0LCAyNDQsIDk0LCAyMjUsIDUsIDIyLCAyNDQsIDk4LCAyMzAsIDIzMiwgMjMwLCAxMTMsIAorICAgIDI1MSwgMTgsIDI1MCwgNDcsIDI0MSwgMjM5LCAyNTMsIDI0OSwgMjI2LCA2NiwgMjE2LCAxNSwgMjQyLCAyLCAyNTAsIDM3LCAKKyAgICAyMTYsIDI0MywgMjE2LCAxMTQsIDI1MCwgMjgsIDI1MSwgMjEwLCAyMjUsIDE4MCwgMjUzLCAyNDgsIDIxMywgMTcyLCAyNDMsIAorICAgIDExNywgMjQ3LCAyMDUsIDI0MSwgMTYzLCAyMTksIDg2LCAyMzEsIDIzOSwgMjUxLCAyNTMsIDI0MywgMTE4LCAyNDcsIDI0OCwgCisgICAgMjUxLCAxNzQsIDI0NCwgNjAsIDIyNSwgMzYsIDI1MCwgMjQ5LCAyOCwgMjI4LCA1MiwgMjMwLCA5MCwgMjgsIDIyOCwgNDcsIAorICAgIDIyMSwgMjE0LCAyNDIsIDEwNiwgMjgsIDIzNCwgMTQzLCAyMTUsIDE5MSwgMjEzLCAxNTQsIDI4LCAyMjEsIDE5NCwgMjIyLCAKKyAgICAxMjYsIDIyMCwgMTMsIDIsIDIyMSwgMjI5LCAyMTYsIDI0NSwgMjIzLCAxODEsIDIyLCAyNTIsIDE2NywgMjE5LCAxMDcsIAorICAgIDIyLCAyMTksIDEwNywgMjUxLCAxOTUsIDI1MiwgMTMxLCAyMiwgMjQxLCA1NiwgMjUwLCAxMjgsIDI0NCwgODEsIDIxOSwgCisgICAgNjUsIDIyMiwgMTI3LCAyMTgsIDEzLCAyMTUsIDE5NSwgMjQwLCAyNTMsIDIyMywgMTgyLCAyNTQsIDEzNywgMjQ0LCAzOSwgCisgICAgMjIyLCAxMzgsIDI0NCwgMzksIDIxNywgMjQyLCAyNDAsIDI0MiwgMjUxLCAxMjcsIDI0MCwgMjQyLCAyLCAyNDMsIDEwMSwgCisgICAgMjI2LCAyMzMsIDI1MSwgMTI3LCAyMzUsIDEzNywgMjI0LCAyNDIsIDIyNiwgMjMyLCAyNDUsIDUyLCAyMjQsIDI0MiwgMjI2LCAKKyAgICAyMzIsIDI0MCwgMjUxLCAyNTIsIDE1MywgMjUzLCAxODksIDIxNiwgMjUzLCAyMzEsIDIzOSwgMjQwLCAyNDcsIDIzMiwgCisgICAgMTE3LCAyNDAsIDI0NywgMjQ5LCAxODQsIDIxOCwgMTI3LCAyMjEsIDIwMCwgMjQ4LCA1MSwgMjE4LCAxMjcsIDI0NCwgMTg4LCAKKyAgICAyMzUsIDE1NSwgMjMzLCA5NSwgMjM1LCAxMzcsIDI1MCwgMjM0LCAyNDUsIDUyLCAyNTAsIDIzNCwgMjIzLCAxNDQsIDIzMCwgCisgICAgMTE3LCAyMjYsIDExOCwgMjEyLCA0MSwgMjUxLCAxMzEsIDI0OSwgMTUzLCAyMTYsIDEwNywgMjMzLCAyNCwgMjIzLCAxODMsIAorICAgIDI1MCwgMjMyLCAyNDYsIDEwNCwgMjQ5LCAxNDMsIDIxMiwgMywgMjE5LCA3MiwgMjE5LCA3MCwgMjQwLCAyNTIsIDIyMywgCisgICAgMTU2LCAyNDIsIDE3NywgMjIwLCA1OSwgMjMwLCAxNTAsIDIyMiwgMTk2LCAyNTAsIDExNiwgMjQ3LCAxNDQsIDIyNSwgNzYsIAorICAgIDI1MSwgMjExLCAyNDUsIDE3NywgMjI2LCAyNDIsIDIxOCwgMjU0LCAyMjAsIDU0LCAyNTEsIDEzMCwgMjU0LCAxMDAsIDI0MSwgCisgICAgNjEsIDIzMywgMTI3LCAyNTIsIDY4LCAyNDQsIDk4LCAyMTUsIDE5NCwgMjQ0LCA5OCwgMjUxLCAyMTcsIDIxNSwgOTEsIAorICAgIDI0MiwgMCwgMjUwLCAxMTcsIDI1MiwgMTk1LCAyNTAsIDExNywgMjQzLCAyNTAsIDI1MiwgMTk1LCAyNTAsIDExNywgMjUxLCAKKyAgICAyNDUsIDIyNSwgMTk4LCAyMzQsIDMyLCAyMjQsIDI1MSwgMjQ2LCA5NSwgMjUxLCAxOSwgMjUyLCAxODUsIDI1MSwgMTksIAorICAgIDI0NywgMTM4LCAyMzAsIDExOCwgMjQ0LCAxOTgsIDI0OSwgMTU0LCAyNDQsIDE5OCwgMjE2LCAxMDgsIDI0NCwgMTk4LCAKKyAgICAyMjMsIDE4NCwgMjQ0LCAxOTgsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ2LCAxMDUsIDI0NCwgMTk4LCAyMTgsIDI0MywgCisgICAgMjEyLCAzLCAyNDAsIDI1MywgMjQ0LCAxOTgsIDIzMCwgMTUxLCAyNDQsIDE5OCwgMjQ3LCAxNDUsIDI0NCwgMTk4LCAyMjUsIAorICAgIDc3LCAyNDQsIDE5OCwgMjQzLCAyNTMsIDI0NCwgMTk4LCAyNDIsIDI3LCAyNDQsIDE5OCwgMjExLCAyMjQsIDI0NCwgMTk4LCAKKyAgICAyNTIsIDc5LCAyNDQsIDE5OCwgMjI2LCA0OSwgMjQ0LCAxOTgsIDIyNSwgNzcsIDIyOCwgNTgsIDIyNSwgMjM2LCAyMjQsIAorICAgIDE4OSwgMjQ1LCAyMSwgMjQ1LCAyMzUsIDIyOCwgNTgsIDIzMCwgMTE1LCAyMTYsIDIwLCA3MSwgMTIwLCAyMjUsIDEwLCAKKyAgICAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIAorICAgIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCAyNDQsIDkyLCAKKyAgICAyNDIsIDIzLCA1MCwgMjEyLCAzMywgMjQyLCAyMywgNTAsIDIyNiwgMjE5LCAyNDIsIDIzLCA1MCwgMjE2LCAxMzYsIDEyMCwgCisgICAgNTAsIDIxNiwgMTM2LCAxMjQsIDUwLCAyNTAsIDI3LCAyNDIsIDE4LCA1MCwgMjA0LCAyNDIsIDE4LCA1MCwgMjQ5LCAxMzEsIAorICAgIDIxMSwgMjIwLCAyNDIsIDIsIDI0NSwgMjIsIDIyOSwgMTA5LCAyMTcsIDE1MiwgMjM1LCAxMzEsIDI0NiwgMTAwLCAyMzQsIAorICAgIDg4LCAyNTEsIDI1NSwgMjExLCAyMjAsIDI1MCwgMSwgMjI0LCAxMzAsIDI0MiwgMjEsIDIyNCwgMjMzLCAyMzEsIDE4MiwgCisgICAgMjIwLCA2LCAyNTMsIDIxMSwgMjIwLCA2LCAyNDEsIDE3MSwgMjIwLCA2LCAyMTEsIDIyMCwgMjIxLCAyNDIsIDIxMSwgMjIwLCAKKyAgICAyNTEsIDE5NCwgMjQ0LCAzNywgMjUxLCA5OCwgMjM2LCA3LCAyMTksIDE3MSwgMjUxLCA5NywgMjM2LCA3LCAyMTksIDE3MSwgCisgICAgMjUxLCAxNzAsIDI0MiwgMjAxLCAyMzEsIDE5MCwgMjExLCAyMjEsIDI0NCwgMTgyLCAyMzEsIDE5MSwgMjIsIDIxMSwgMjIyLCAKKyAgICAyNDEsIDY3LCAyNDIsIDE3LCAxMTMsIDIzMSwgNjQsIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjExLCAyMTksIDI0MSwgNjcsIAorICAgIDI0MiwgMTcsIDIyNSwgMiwgMjI2LCAyMzEsIDIxMSwgMjIyLCAyLCAyNTEsIDExNCwgMjQ1LCAyMzMsIDI1MSwgMTQ5LCAyLCAKKyAgICAyMTMsIDI0NiwgMjI1LCAxNzEsIDIsIDI1MSwgMjIwLCAyNDIsIDQxLCAyMzEsIDE5MSwgMiwgMjQyLCAxMTcsIDIyNSwgCisgICAgMTEyLCAyMzEsIDE3OSwgMjMxLCAxOTEsIDIsIDIxNSwgOTgsIDIyNiwgMjEyLCAyMzEsIDE5MCwgMjI2LCAyMTIsIDIxMSwgCisgICAgMjIxLCAyNTIsIDE5NCwgMjQ5LCAxOTgsIDIxMSwgMjA1LCAyMjQsIDE5MiwgMjM1LCAxMzcsIDIyNiwgMjI3LCAyMzUsIAorICAgIDEzNywgMjQyLCAxNzYsIDI0MiwgMjI5LCAyNTIsIDE5NSwgMjU0LCAxMjEsIDI0NSwgMjYsIDI1NCwgMTY5LCAyNTQsIDE3MCwgCisgICAgMjMwLCAxNDEsIDIzNiwgMTIsIDIxOSwgMTAyLCAyMzUsIDIzOSwgMjQ4LCA0MiwgMjI1LCAxNzAsIDI0MiwgMTEyLCAyNDgsIAorICAgIDE4NywgMjMyLCAyMDcsIDIyOSwgMjE2LCAyMjUsIDEsIDI0NCwgMTk5LCAyMzEsIDE0NywgMjQyLCA0MCwgMjUyLCAxNDYsIAorICAgIDIyNSwgNCwgMjE3LCAxNzIsIDIyNSwgNjksIDIzNCwgNzAsIDc5LCAyMzIsIDExNywgMjMzLCAxNiwgMjIyLCAyMzYsIDI0MywgCisgICAgNjEsIDIxOCwgMTMzLCAyMzQsIDY5LCAyNTEsIDE3OSwgMjQ5LCAxNTYsIDIsIDI0MSwgMjM0LCAyMTIsIDE5LCAyNTIsIDc3LCAKKyAgICAyNDEsIDIzNCwgMjUxLCAxNDMsIDI0MSwgMjM0LCAxMTMsIDI0MSwgMjMyLCAyMTksIDEyLCAyNDEsIDIzNCwgMjQyLCAxMjcsIAorICAgIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgNzUsIDI1MSwgMjE2LCAyNDEsIDIzNCwgMjQyLCAxMzQsIDI0MSwgMjM0LCAyMTEsIAorICAgIDQyLCAyNDEsIDIzNCwgMjI0LCAxMzEsIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgMjIzLCAzNiwgMjIzLCA0NywgMjQxLCAKKyAgICAyMzIsIDI0MSwgMjM1LCAyNDgsIDg5LCAyNDgsIDEsIDIyMCwgODQsIDIsIDExNiwgNTksIDIzNSwgMjIyLCAyNDUsIDE4MCwgCisgICAgMTkzLCAyNTEsIDEyNCwgMjU0LCAxMjAsIDg3LCAyNTEsIDIwMywgMjE5LCA5NCwgODcsIDI0OSwgMjM2LCA4NywgMjE4LCAKKyAgICAyNDgsIDIxNywgMjQ5LCA4NywgMjQ2LCA5MywgMjQ4LCAxNjUsIDg3LCAyMjUsIDcwLCA2NCwgMjI0LCAyNTIsIDI0NCwgNjksIAorICAgIDI1MiwgMTEsIDI0NywgMTczLCA4NywgMjE5LCA1LCAyNTIsIDE2NiwgMjE2LCAxNTAsIDI1MiwgMTY2LCA3MSwgMjQ0LCA1OSwgCisgICAgMjQwLCAyMTgsIDIyNSwgOCwgODcsIDIzMCwgMTU0LCAyNTIsIDE4MCwgMjQ5LCAxMDYsIDI0NSwgNDAsIDExNCwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNDksIDE0NywgMjUwLCAyNTAsIDI1MiwgMTUyLCAyLCAyMTEsIDQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NywgCisgICAgMTQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NSwgNTUsIDUwLCAyNTIsIDE1MiwgMiwgMjI0LCAyMzEsIDUwLCAyMzAsIDE1NCwgCisgICAgMiwgMjExLCAyMzUsIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzIsIDIyLCAyMTEsIDQwLCA1MCwgMjIxLCAxODAsIAorICAgIDIyNSwgMTY5LCAyNDksIDIxNiwgMjUxLCAxNDcsIDIzMCwgMTkxLCAyNDQsIDY0LCAyNDcsIDE5MywgMjI2LCAxNjUsIDI0NywgCisgICAgMTk4LCAyNDYsIDU3LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjA0LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjI2LCA4MCwgMiwgMjQ5LCAKKyAgICAxMDgsIDIyNiwgODAsIDI0NCwgMTkxLCAyMTQsIDE2MywgMjUxLCAyNCwgMjE3LCAxOSwgMjUxLCAyNCwgMjUwLCAyNTEsIAorICAgIDIzNSwgMjQ5LCAyNTAsIDE0NiwgMiwgMjE0LCAxNTMsIDIxNSwgMjMxLCAyNTAsIDE0NiwgMiwgMjQ2LCAxMTIsIDIxNSwgCisgICAgMjMxLCAyNTIsIDE0OSwgMjUwLCAxNDUsIDI1MCwgMTQsIDIyNCwgMTI2LCAyMjIsIDE4NywgMjI0LCAxMjYsIDIyNiwgMjMsIAorICAgIDIxOCwgMTIzLCAyMjIsIDEzMywgMjE1LCAyMjMsIDIyMiwgMTMzLCAyNTEsIDE5OSwgMjE3LCA5MiwgMjMzLCA1NywgMjI4LCAKKyAgICA1MCwgMjI4LCA1MSwgMiwgMjQ4LCA4OCwgMjQ5LCAxNTUsIDI1MCwgOCwgMjUxLCAyMDAsIDIwNCwgMjUxLCAyMDAsIDI0MiwgCisgICAgMTM0LCAyNTEsIDIwMCwgMjUxLCAyMTYsIDI1MSwgMjAwLCAyMjYsIDE2MSwgMjUxLCAyMDAsIDI1MSwgMTk3LCAyMjksIAorICAgIDIxMCwgMjUyLCAxODMsIDIyMSwgMTg4LCAyMzEsIDY1LCAyMTcsIDIsIDIyMywgMTI2LCAyMjYsIDc4LCAyNDQsIDE2NywgCisgICAgMjMxLCAyMzksIDIyMSwgMjI1LCAyNTQsIDk3LCAyMjQsIDE0OCwgMjU1LCA1LCAyMzIsIDExOSwgMjUwLCAxMzUsIDIzMSwgCisgICAgNzcsIDIyNiwgMTMzLCAyMTUsIDIzOSwgMjM2LCAzLCAyMTUsIDIzOSwgMjI2LCA4NiwgMjQ2LCAzMiwgODcsIDIzNiwgMCwgCisgICAgMjQ1LCAxMjcsIDI0NSwgMTI4LCAyLCAyNDYsIDExMiwgODAsIDQ4LCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgCisgICAgMjQ0LCA4MSwgMjUwLCA4LCAyMzEsIDIwNSwgMiwgMjIzLCAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIyMywgCisgICAgMTYwLCAyNDQsIDgxLCAyMDQsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgMjQ0LCA4MSwgMjI0LCAyMzksIDIyNCwgMjQwLCAKKyAgICAyNDAsIDI1NSwgMjI5LCA4OSwgMjMwLCAxNjQsIDIyNSwgMTIwLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIsIDk3LCA4MCwgCisgICAgMjUzLCAyMTUsIDIzMywgNTIsIDIxMywgMTc1LCAyMzAsIDE2MywgMjMwLCAxNjQsIDIyNSwgMTIxLCAyMjYsIDIzNCwgMjI4LCAKKyAgICA4MCwgMjMwLCAxNjQsIDIyNSwgMTE5LCAyNTQsIDk4LCAyLCAyNTIsIDEzNywgMjUxLCAxOCwgMjEzLCAxNzIsIDI1MSwgMTgsIAorICAgIDIxNiwgMjU1LCAyMjMsIDE3NiwgMjEzLCAxNzEsIDIxNSwgNjAsIDk3LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAKKyAgICAxNDAsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDI1MCwgMTAsIDk3LCAyMiwgMTQwLCAyMDQsIDI1MCwgNDQsIDI1NCwgMCwgCisgICAgMiwgMzcsIDEyMywgMjI2LCAxMjQsIDI1MCwgMTAsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAKKyAgICAyNTUsIDI1NCwgOTYsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDEyMSwgMjUxLCAKKyAgICAxNDYsIDg3LCAxMjUsIDI1MSwgMTQ2LCA4NywgMjE5LCA5LCAyLCAyNTEsIDEyLCA5MSwgMjE5LCA4LCAyMTksIDksIDIsIAorICAgIDEyMywgMjE5LCAzMywgMjEyLCAzNSwgMjE5LCA5LCAyLCAxMzQsIDIxOSwgMzMsIDIxMiwgMzQsIDI1MiwgMTIzLCAyNDUsIAorICAgIDE4MCwgMjI1LCAzMCwgMjMzLCA0OCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAyMjIsIDI1MCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAKKyAgICAyMzIsIDE1OCwgMiwgMjM1LCAyMzIsIDIyNSwgMjAyLCAyNTAsIDgsIDIzMiwgMTU4LCAyLCAyMzQsIDE0NCwgMjM0LCAxNDQsIAorICAgIDIzMiwgMTU3LCAyMDQsIDIzMiwgMTU3LCAyNTIsIDUyLCAyNTIsIDUzLCAyLCAyNTEsIDEyLCA5MSwgMjUxLCAxOTgsIDIzMiwgCisgICAgMjEwLCA4NywgMjIzLCAxNzcsIDI1MSwgOTQsIDI1MiwgMTkzLCAyLCAxNDAsIDgwLCA0OCwgMjQ1LCAxNTEsIDIsIDE0MCwgCisgICAgODAsIDQ4LCAyMjYsIDIwMSwgMiwgMjQ1LCAzOSwgMTY0LCAyLCA0MywgNDQsIDgwLCA0OCwgMjE5LCA0MSwgMiwgOTcsIDgwLCAKKyAgICA0OCwgMjE2LCAxNSwgMiwgMjE0LCAxNTMsIDgwLCA0OCwgMjI4LCA4MCwgMTIzLCAyMTQsIDE4NCwgMjQ1LCAxOTksIDg3LCAKKyAgICAyMzQsIDE0MiwgMjE2LCAyNDgsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIDYsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIAorICAgIDQsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDIyNywgMjAzLCAyMzUsIDIyNiwgMTYsIDMxLCAyMTcsIDE4NCwgMjM1LCAKKyAgICAyMjYsIDE2LCAzMSwgNywgMjMzLCAxNSwgMjQ0LCAxMDQsIDI0NSwgMTgwLCAyMTYsIDEwLCAyMTEsIDE5OSwgMjQyLCAyOCwgCisgICAgMjI3LCAxODYsIDIyLCAyNTEsIDIwNSwgMjQxLCA3MywgMjI1LCA1MywgMjMwLCAyMzEsIDIxNywgMCwgMjQ5LCAxMjIsIAorICAgIDI1MiwgMTY3LCAyMTksIDEyNywgMjI1LCAxMiwgMjE4LCAxNTksIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAxMzcsIAorICAgIDE2LCAzMSwgMjUyLCA2NSwgMjE1LCAyMjEsIDI0NSwgMTY0LCA4NSwgNDIsIDI1MSwgOTQsIDcxLCA0MiwgMjUxLCA5NCwgCisgICAgMjMzLCA5MSwgMjIzLCAxMTQsIDI1MCwgNDMsIDIzMywgOTEsIDI1MSwgMjE2LCAyNTAsIDQzLCAyMzMsIDkxLCAyMjYsIAorICAgIDE2MSwgMjQ4LCAwLCAyMzMsIDkxLCAyNTEsIDIxNiwgMjQ4LCAwLCA0LCAyMjYsIDE2MSwgMjQ4LCAwLCA0LCAyNTEsIDIxNiwgCisgICAgMjQ4LCAwLCAyMTQsIDE2MiwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgMjIzLCAxMTQsIDIxNSwgMjI2LCAyMTQsIAorICAgIDE2MiwgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAzNywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMjU1LCAyNDksIDEzOSwgMjI1LCAwLCAyLCAyNDIsIDMzLCA1MSwgMjQ5LCAxMzksIDIyNCwgMjU1LCAyMjgsIAorICAgIDU0LCA0MywgMjIwLCAxNTUsIDIsIDEzNCwgMjQ3LCAxMjYsIDI1MCwgMTIsIDI0NCwgMTk5LCAxMjMsIDIyNiwgMjQ2LCAKKyAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMTEzLCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEzNCwgMjI2LCAyNDYsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyNDQsIDE5LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODksIDIyNiwgMjQ2LCAKKyAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMjE5LCAxMjcsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjIwLCAxMjQsIDIyNiwgCisgICAgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDEsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDUsIAorICAgIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAyNDksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAKKyAgICAxNzYsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMjYsIDE5NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNTYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDE0MSwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTUsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDQsIDg3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjE5LCAxMjMsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgMjAwLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0NywgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDI0NSwgMTc0LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NSwgMjMwLCAxMjIsIDI0MywgMjM3LCAyMTYsIDM3LCAyMTYsIAorICAgIDMsIDIxOCwgMTUwLCA2NCwgMjMyLCAyNDUsIDIxOSwgMTcyLCA2NCwgMjM1LCAxMzgsIDIzMCwgMTExLCAyNDIsIDEzMSwgCisgICAgMjQ0LCAxOTgsIDI0MiwgMTMxLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAxOTksIDIsIDIxNywgMTUsIAorICAgIDY0LCAyMzUsIDU5LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAorICAgIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTksIDc2LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgCisgICAgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTYsIAorICAgIDEwNSwgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MiwgMzIsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyNDAsIAorICAgIDI1NCwgMjExLCAyMzMsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAKKyAgICAxOTksIDIyMSwgMjE5LCAyNDgsIDcwLCAyNDQsIDQxLCAyMjMsIDkxLCAyNDQsIDE5OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAorICAgIDI0MSwgMjMzLCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE4LCAzNSwgMjE5LCA3NSwgMjQ0LCAxOTgsIDIyOSwgCisgICAgOTIsIDI0NCwgMTk4LCAyNDUsIDMxLCAyNDQsIDE5OCwgMjE0LCAxODgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjQ5LCAKKyAgICAyMzgsIDIxNywgMjQ4LCAyMjUsIDE5NSwgMjQ0LCAxOTgsIDI0OSwgMjA5LCAyNDQsIDE5OCwgMjQ5LCAyMTAsIDI0NCwgCisgICAgMTk4LCAyMzQsIDY4LCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIxNiwgMTM4LCAxMTYsIDIzNCwgNjksIDIzNCwgNjgsIDI0NCwgCisgICAgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyMzQsIDY4LCAyNDQsIDE5OSwgMiwgMjUwLCA4LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMCwgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTEsIDIzMywgCisgICAgMjQ1LCAyMywgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTYsIDEwNSwgMjQ1LCAyMSwgMjQ3LCAyMDAsIAorICAgIDI0NCwgMTk4LCAyMTEsIDIwNCwgMjQ0LCAxOTgsIDI1NCwgMTE2LCAyNDQsIDE5OCwgMjI0LCAyMzAsIDI0NCwgMTk4LCAKKyAgICAyNDksIDEyNCwgMjQ0LCAxOTgsIDIyNSwgMTczLCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDIzMiwgMTMyLCA2NCwgMjE1LCAKKyAgICAyMDUsIDI0NywgMjAwLCAyNTEsIDk2LCAyMjMsIDkxLCAyNDQsIDE5OCwgMjQzLCAyNDcsIDI0NCwgMTk5LCAyLCAyMDQsIAorICAgIDIzMCwgMTE1LCAyNTQsIDExNCwgMjQ0LCAxOTgsIDI0NCwgMTYwLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjQ0LCAxOTgsIDIxOSwgCisgICAgOTMsIDI0NCwgMTk4LCAyMTYsIDcyLCAyNDQsIDE5OCwgMjQyLCAxMzIsIDI0NCwgMTk4LCAyMzIsIDEyMCwgMjQ5LCAxMjQsIAorICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjQwLCAyMTAsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjQ0LCAxOTksIDIyMSwgMTkyLCAyMzYsIDcsIDI0NCwgCisgICAgMTYxLCAyNTMsIDIyMSwgMjQ0LCAxOTgsIDI0NCwgNTcsIDI0NCwgMTk4LCAyMTksIDk0LCAyNDQsIDE5OCwgMjQ3LCAxNzMsIAorICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjExLCAyMzAsIDIzMCwgMTE1LCAyNDQsIDE5OSwgMiwgMjMxLCA4OSwgMjMxLCAxNDksIAorICAgIDI0MiwgMTMxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgCisgICAgMjE3LCAxNSwgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCAKKyAgICA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNDEsIDIzMywgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMTEsIAorICAgIDE5NiwgMjE5LCA3NywgMjM0LCA2OCwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDIyNCwgMjMwLCAKKyAgICAyNTAsIDIzMywgMjQ0LCAxOTgsIDI0OSwgMTI0LCAyNTAsIDIzMywgMjQ0LCAxOTgsIDIxMiwgMjAsIDI1MCwgMjMzLCAyNDQsIAorICAgIDE5OCwgMjQ0LCAxOTksIDIsIDIyOCwgODAsIDI0MiwgMTcwLCAyNDMsIDQxLCAyNDQsIDE5OSwgMiwgMjI2LCAyMTksIDI0MywgCisgICAgNDEsIDIyNSwgMTcxLCAyNTEsIDE3NiwgMjQ4LCA4MywgMjIxLCAxNzEsIDIzMCwgMTUwLCAyNDEsIDIzNiwgMjMwLCAxNTAsIAorICAgIDIxOSwgMTAsIDIzMCwgMTUwLCAyNDIsIDEyLCAyMjUsIDE3MSwgMjIzLCAxNTksIDEyMywgMjQyLCAyMiwgMjI1LCAxNzEsIAorICAgIDIyMywgMTU5LCAyNTEsIDE4NiwgMjQyLCAxOCwgMjM2LCA3LCAyNTAsIDE4NywgMjI1LCAxNzEsIDI0MywgMjQ2LCAyMjUsIAorICAgIDE3MSwgMiwgMjI0LCAyMzAsIDI0NCwgMTk4LCAyMjUsIDE3MSwgMiwgMjQ0LCA0OSwgMjQyLCAxNywgMjIyLCAyMDUsIDI0MSwgCisgICAgMjIxLCAyMTgsIDE0NSwgMjMyLCAxNTUsIDIyMywgMTY1LCAyNTAsIDI1MiwgMjQxLCAxNjksIDIxNSwgMjQ5LCAyNDEsIAorICAgIDE2OSwgMjE1LCAyNTAsIDIsIDI1MSwgMTIyLCAyMjgsIDU4LCAyMTUsIDI0OSwgMjMxLCAzNywgMTkzLCAyMjMsIDE2NiwgCisgICAgMjE4LCAxNTEsIDIxNSwgMjQ3LCAyMTUsIDI0OCwgMjUwLCAyNTIsIDI1MSwgMTAwLCAyMjYsIDE5OCwgMjUxLCAxMDAsIAorICAgIDIxNSwgMjAyLCAyNTEsIDEwMSwgMjE4LCAxMzEsIDIzMCwgMTkyLCAyNTQsIDEzOCwgMjQ0LCAxMDUsIDI0NSwgMTQ1LCAKKyAgICAyMjUsIDIsIDI1MCwgMjUyLCAyMjYsIDE5OCwgMjI1LCAyLCAyNTAsIDI1MiwgMjE3LCAzMywgMjI2LCAxOTgsIDIxNywgMzMsIAorICAgIDI1MywgMTg4LCAyMjYsIDE5OCwgMjUzLCAxODgsIDIyMywgMTIxLCAyMTMsIDI0NywgMjQ4LCA2NiwgMjE1LCAxOTMsIDI1MywgCisgICAgMjUwLCAyMzIsIDEyMywgMjE1LCAyNTUsIDIzMCwgMTQ0LCAyMzAsIDEyMSwgMjIzLCAxNjQsIDIxOCwgNywgMjIzLCAxNjQsIAorICAgIDIzMCwgMTIxLCAyNTEsIDM2LCAyNTQsIDIzOCwgMjE1LCAyNDYsIDIyMCwgMTgsIDIyMiwgMTg0LCAyMTksIDMsIDIwMywgCisgICAgMjE1LCAyNTMsIDIzMiwgMjM2LCA2NywgMjE1LCAyNTMsIDIzMiwgMjM2LCAyNDksIDE5OCwgNTAsIDIyNSwgMiwgMjUwLCAKKyAgICAyMzcsIDIyMywgNDcsIDIzMiwgMjM2LCAyMTUsIDIyMywgMjQ0LCA4MiwgMjI2LCAyMDEsIDIyNCwgMjQxLCAyNDcsIDEzMSwgCisgICAgMjI4LCA4MCwgMjQ1LCAxMzMsIDUwLCAyMTksIDc0LCA4NywgMjI4LCA4MCwgMjE5LCA3NCwgODcsIDIyNCwgMTI1LCAyMzIsIAorICAgIDE5OSwgMjM2LCA3LCAyMzUsIDE2MywgMjI1LCA0NCwgODcsIDI0NywgMTU0LCAyMjgsIDU3LCAyMzIsIDE5OSwgODcsIDIyNCwgCisgICAgMjM1LCAyMTIsIDQxLCA4NywgMjI4LCA3MSwgMjEyLCA0MSwgODcsIDI1MiwgMTAsIDIyOCwgODAsIDI1MiwgOSwgMjUyLCA4LCAKKyAgICAyMzAsIDEyMSwgMjUyLCA4LCAyMjUsIDIxNiwgMjI4LCA4MCwgMjI1LCAyMTUsIDI1MCwgMTA4LCAyNDksIDEzMiwgMjMxLCAKKyAgICA2MSwgODcsIDIxMSwgMjE4LCA4NywgMjIzLCA2MiwgMjUyLCAxOTUsIDg3LCAyMTYsIDM4LCAyMTIsIDQxLCAyNTAsIDUsIAorICAgIDIxOSwgMjM2LCAyNTIsIDEyNiwgMjUyLCAxMjQsIDIyNSwgMjQ2LCAyNDksIDE4NSwgMjQ5LCA5NCwgMjUyLCAxNzcsIDI1MCwgCisgICAgMzAsIDQzLCAyMzIsIDk1LCAxMDgsIDE2LCAzMSwgMjI0LCA2LCAxMDgsIDE2LCAzMSwgMjU0LCAyMDEsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDQsIDEwNCwgMTA4LCAxNiwgMzEsIDI0NSwgMjMxLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCisgICAgNTEsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMjMsIDEwOCwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA3LCAxMDgsIAorICAgIDE2LCAzMSwgMjU0LCA1MiwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAogICAgIDIxMywgMTU3LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTYsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NSwgMTA4LCAxNiwgMzEsIDIxOCwgCi0gICAgNDQsIDEwOCwgMTYsIDMxLCAyMjUsIDEyNSwgMjE4LCA0NCwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ0LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCA1NSwgMjE4LCA3MSwgMTA4LCAxNiwgMzEsIDIzMSwgNTUsIDIxOCwgNzAsIDEwOCwgMTYsIDMxLCAyMzEsIAotICAgIDU1LCAyMTgsIDY5LCAxMDgsIDE2LCAzMSwgMjUwLCAzOCwgMTA4LCAxNiwgMzEsIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyOCwgCi0gICAgMTg4LCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAKLSAgICAyMjIsIDEsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNCwgMjIyLCAwLCAxMDgsIDE2LCAzMSwgMjQyLCAxNjYsIDEwOCwgMTYsIAotICAgIDMxLCAyMTksIDE2NiwgMTA4LCAxNiwgMzEsIDIzNSwgMTc3LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIzNSwgMTc3LCAKLSAgICAyMjYsIDE1MiwgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIAotICAgIDIzNSwgMTc2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNjgsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzUsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjE4LCA3MiwgNjQsIDI0OSwgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIAotICAgIDE2NywgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjQ5LCAxNjYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjU0LCA4MywgCi0gICAgMTA4LCAxNiwgMzEsIDIyMiwgMiwgNjQsIDI0OSwgMTY4LCAyNTQsIDgzLCAxMDgsIDE2LCAzMSwgMjE4LCA3MiwgNjQsIAotICAgIDIyMiwgMiwgNjQsIDI0OSwgMTY3LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg0LCAyMjYsIAotICAgIDE1MywgMTA4LCAxNiwgMzEsIDIzMywgNTcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjU0LCA4MiwgMjI2LCAxNTMsIDEwOCwgCi0gICAgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIyMiwgMiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIAotICAgIDMxLCAyMTgsIDcyLCA2NCwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4MSwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgMjU0LCA4MCwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjIzLCA5OSwgMTA4LCAxNiwgMzEsIDIyMywgOTgsIDEwOCwgCi0gICAgMTYsIDMxLCAyMjMsIDk3LCAxMDgsIDE2LCAzMSwgMjU0LCAxNTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIzMSwgMTYzLCAxMDgsIDE2LCAzMSwgMjIyLCA3LCAxMDgsIDE2LCAzMSwgMjUzLCAyNDYsIDEwOCwgMTYsIDMxLCAKLSAgICAyMjMsIDEyNSwgMTA4LCAxNiwgMzEsIDIyMywgMTI0LCAxMDgsIDE2LCAzMSwgMjUzLCAxODMsIDEwOCwgMTYsIDMxLCAyNTEsIAotICAgIDIyOSwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMTcsIDQ5LCAxMDgsIDE2LCAzMSwgMjE3LCA0OCwgMTA4LCAxNiwgMzEsIAotICAgIDIyNCwgOCwgMjMyLCAyMjIsIDEwOCwgMTYsIDMxLCAyNTEsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgMTgyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjUxLCAxODEsIDEwOCwgMTYsIDMxLCAyNTQsIDEzOCwgMTA4LCAxNiwgMzEsIDIyNiwgMjE4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAyNDgsIDEwOCwgMTYsIDMxLCAyMTYsIDgyLCAxMDgsIDE2LCAzMSwgMjQyLCA5NiwgMTA4LCAxNiwgMzEsIDIxMiwgCi0gICAgMjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIyNiwgMTA4LCAxNiwgMzEsIDI1MSwgMTQsIDEwOCwgMTYsIDMxLCAyMTUsIDg2LCAKLSAgICAxMDgsIDE2LCAzMSwgMjUwLCAyNDYsIDIzMCwgMTIyLCAxMDgsIDE2LCAzMSwgMjIxLCAyMDIsIDY0LCAyMzUsIDU1LCAxMDgsIAotICAgIDE2LCAzMSwgMjUxLCAyNSwgMTA4LCAxNiwgMzEsIDIxNSwgMjE5LCAxMDgsIDE2LCAzMSwgMjE4LCAxNTQsIDIxNSwgMjE5LCAKLSAgICAxMDgsIDE2LCAzMSwgMjMyLCAxNDgsIDEwOCwgMTYsIDMxLCAyMTksIDU2LCAxMDgsIDE2LCAzMSwgMjE0LCAxNDIsIDEwOCwgCi0gICAgMTYsIDMxLCAyNDAsIDI0NiwgMjQ2LCA2NCwgMTA4LCAxNiwgMzEsIDI1MywgMjI3LCAxMDgsIDE2LCAzMSwgMjI0LCAyMzQsIAotICAgIDI1MywgMjI3LCAxMDgsIDE2LCAzMSwgMjUxLCAxNDIsIDEwOCwgMTYsIDMxLCAyMjQsIDIyNSwgMjUxLCAxNDIsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTQsIDEzNSwgMTA4LCAxNiwgMzEsIDIxOCwgMTE3LCAyMTgsIDI2LCAyMTgsIDExNiwgMTA4LCAxNiwgMzEsIAotICAgIDIxOCwgMTE3LCAyMTgsIDI2LCAyMTgsIDExNSwgMTA4LCAxNiwgMzEsIDIxOCwgNjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIwMCwgCi0gICAgMTA4LCAxNiwgMzEsIDI0NywgMTgxLCAxMDgsIDE2LCAzMSwgMjQ3LCAxODMsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MiwgMTA4LCAKLSAgICAxNiwgMzEsIDIyNCwgMTMxLCAxMDgsIDE2LCAzMSwgMjI0LCAxMjAsIDEwOCwgMTYsIDMxLCAyNDksIDEyMiwgMTA4LCAxNiwgCi0gICAgMzEsIDI0OSwgMTIxLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjAsIDEwOCwgMTYsIDMxLCAyNDksIDExOSwgMTA4LCAxNiwgMzEsIAotICAgIDI0OSwgMTE4LCAxMDgsIDE2LCAzMSwgMjU0LCAxNjksIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIzMSwgMTQ5LCAKLSAgICAxMDgsIDE2LCAzMSwgMjUyLCAxMTksIDY0LCAyMTQsIDE3LCAxMDgsIDE2LCAzMSwgMjIzLCA1NywgMTA4LCAxNiwgMzEsIAotICAgIDI0MCwgMjM4LCAxMDgsIDE2LCAzMSwgMjI4LCAyMTIsIDEwOCwgMTYsIDMxLCAyNDgsIDE0NSwgMTA4LCAxNiwgMzEsIDIzMCwgCi0gICAgMTM0LCAxMDgsIDE2LCAzMSwgMTYzLCAyNDYsIDk0LCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzMiwgOSwgMTQsIDI0MCwgCi0gICAgMTAyLCA5LCAxNCwgMjQwLCAxMDEsIDksIDE0LCAyNDAsIDEwMCwgOSwgMTQsIDI0MCwgOTksIDksIDE0LCAyNDAsIDk4LCA5LCAKLSAgICAxNCwgMjQwLCA5NywgOSwgMTQsIDI0MCwgOTYsIDksIDE0LCAyNDAsIDk1LCA5LCAxNCwgMjQwLCA5NCwgOSwgMTQsIDI0MCwgCi0gICAgOTMsIDksIDE0LCAyNDAsIDkyLCA5LCAxNCwgMjQwLCA5MSwgOSwgMTQsIDI0MCwgOTAsIDksIDE0LCAyNDAsIDg5LCA5LCAKLSAgICAxNCwgMjQwLCA4OCwgOSwgMTQsIDI0MCwgODcsIDksIDE0LCAyNDAsIDg2LCA5LCAxNCwgMjQwLCA4NSwgOSwgMTQsIDI0MCwgCi0gICAgODQsIDksIDE0LCAyNDAsIDgzLCA5LCAxNCwgMjQwLCA4MiwgOSwgMTQsIDI0MCwgODEsIDksIDE0LCAyNDAsIDgwLCA5LCAKLSAgICAxNCwgMjQwLCA3OSwgOSwgMTQsIDI0MCwgNzgsIDksIDE0LCAyNDAsIDc3LCA5LCAxNCwgMjQwLCA3NiwgOSwgMTQsIDI0MCwgCi0gICAgNzUsIDksIDE0LCAyNDAsIDc0LCA5LCAxNCwgMjQwLCA3MywgOSwgMTQsIDI0MCwgNzIsIDksIDE0LCAyNDAsIDcxLCA5LCAKLSAgICAxNCwgMjQwLCA3MCwgOSwgMTQsIDI0MCwgNjksIDksIDE0LCAyNDAsIDY4LCA5LCAxNCwgMjQwLCA2NywgOSwgMTQsIDI0MCwgCi0gICAgNjYsIDksIDE0LCAyNDAsIDY1LCA5LCAxNCwgMjQwLCA2NCwgOSwgMTQsIDI0MCwgNjMsIDksIDE0LCAyNDAsIDYyLCA5LCAKLSAgICAxNCwgMjQwLCA2MSwgOSwgMTQsIDI0MCwgNjAsIDksIDE0LCAyNDAsIDU5LCA5LCAxNCwgMjQwLCA1OCwgOSwgMTQsIDI0MCwgCi0gICAgNTcsIDksIDE0LCAyNDAsIDU2LCA5LCAxNCwgMjQwLCA1NSwgOSwgMTQsIDI0MCwgNTQsIDksIDE0LCAyNDAsIDUzLCA5LCAKLSAgICAxNCwgMjQwLCA1MiwgOSwgMTQsIDI0MCwgNTEsIDksIDE0LCAyNDAsIDUwLCA5LCAxNCwgMjQwLCA0OSwgOSwgMTQsIDI0MCwgCi0gICAgNDgsIDksIDE0LCAyNDAsIDQ3LCA5LCAxNCwgMjQwLCA0NiwgOSwgMTQsIDI0MCwgNDUsIDksIDE0LCAyNDAsIDQ0LCA5LCAKLSAgICAxNCwgMjQwLCA0MywgOSwgMTQsIDI0MCwgNDIsIDksIDE0LCAyNDAsIDQxLCA5LCAxNCwgMjQwLCA0MCwgOSwgMTQsIDI0MCwgCi0gICAgMzksIDksIDE0LCAyNDAsIDM4LCA5LCAxNCwgMjQwLCAzNywgOSwgMTQsIDI0MCwgMzYsIDksIDE0LCAyNDAsIDM1LCA5LCAKLSAgICAxNCwgMjQwLCAzNCwgOSwgMTQsIDI0MCwgMzMsIDksIDE0LCAyNDAsIDMyLCA5LCAxNCwgMjQwLCAzMSwgOSwgMTQsIDI0MCwgCi0gICAgMzAsIDksIDE0LCAyNDAsIDI5LCA5LCAxNCwgMjQwLCAyOCwgOSwgMTQsIDI0MCwgMjcsIDksIDE0LCAyNDAsIDI2LCA5LCAKLSAgICAxNCwgMjQwLCAyNSwgOSwgMTQsIDI0MCwgMjQsIDksIDE0LCAyNDAsIDIzLCA5LCAxNCwgMjQwLCAyMiwgOSwgMTQsIDI0MCwgCi0gICAgMjEsIDksIDE0LCAyNDAsIDIwLCA5LCAxNCwgMjQwLCAxOSwgOSwgMTQsIDI0MCwgMTgsIDksIDE0LCAyNDAsIDE3LCA5LCAKLSAgICAxNCwgMjQwLCAxNiwgOSwgMTQsIDI0MCwgMTUsIDksIDE0LCAyNDAsIDE0LCA5LCAxNCwgMjQwLCAxMywgOSwgMTQsIDI0MCwgCi0gICAgMTIsIDksIDE0LCAyNDAsIDExLCA5LCAxNCwgMjQwLCAxMCwgOSwgMTQsIDI0MCwgOSwgOSwgMTQsIDI0MCwgOCwgOSwgMTQsIAotICAgIDI0MCwgNywgOSwgMTQsIDI0MCwgNiwgOSwgMTQsIDI0MCwgNSwgOSwgMTQsIDI0MCwgNCwgOSwgMTQsIDI0MCwgMywgOSwgCi0gICAgMTQsIDI0MCwgMiwgOSwgMTQsIDI0MCwgMSwgOSwgMTQsIDI0MCwgMCwgOSwgMTQsIDIzOSwgMjU1LCA5LCAxNCwgMjM5LCAKLSAgICAyNTQsIDksIDE0LCAyMzksIDI1MywgOSwgMTQsIDIzOSwgMjUyLCA5LCAxNCwgMjM5LCAyNTEsIDksIDE0LCAyMzksIDI1MCwgCi0gICAgOSwgMTQsIDIzOSwgMjQ5LCA5LCAxNCwgMjM5LCAyNDgsIDksIDE0LCAyMzksIDI0NywgOSwgMTQsIDIzOSwgMjQ2LCA5LCAKLSAgICAxNCwgMjM5LCAyNDUsIDksIDE0LCAyMzksIDI0NCwgOSwgMTQsIDIzOSwgMjQzLCA5LCAxNCwgMjM5LCAyNDIsIDksIDE0LCAKLSAgICAyMzksIDI0MSwgOSwgMTQsIDIzOSwgMjQwLCA5LCAxNCwgMjM5LCAyMzksIDksIDE0LCAyMzksIDIzOCwgOSwgMTQsIDIzOSwgCi0gICAgMjM3LCA5LCAxNCwgMjM5LCAyMzYsIDksIDE0LCAyMzksIDIzNSwgOSwgMTQsIDIzOSwgMjM0LCA5LCAxNCwgMjM5LCAyMzMsIAotICAgIDksIDE0LCAyMzksIDIzMiwgOSwgMTQsIDIzOSwgMjMxLCA5LCAxNCwgMjM5LCAyMzAsIDksIDE0LCAyMzksIDIyOSwgOSwgCi0gICAgMTQsIDIzOSwgMjI4LCA5LCAxNCwgMjM5LCAyMjcsIDksIDE0LCAyMzksIDIyNiwgOSwgMTQsIDIzOSwgMjI1LCA5LCAxNCwgCi0gICAgMjM5LCAyMjQsIDksIDE0LCAyMzksIDIyMywgOSwgMTQsIDIzOSwgMjIyLCA5LCAxNCwgMjM5LCAyMjEsIDksIDE0LCAyMzksIAotICAgIDIyMCwgOSwgMTQsIDIzOSwgMjE5LCA5LCAxNCwgMjM5LCAyMTgsIDksIDE0LCAyMzksIDIxNywgOSwgMTQsIDIzOSwgMjE2LCAKLSAgICA5LCAxNCwgMjM5LCAyMTUsIDksIDE0LCAyMzksIDIxNCwgOSwgMTQsIDIzOSwgMjEzLCA5LCAxNCwgMjM5LCAyMTIsIDksIAotICAgIDE0LCAyMzksIDIxMSwgOSwgMTQsIDIzOSwgMjEwLCA5LCAxNCwgMjM5LCAyMDksIDksIDE0LCAyMzksIDIwOCwgOSwgMTQsIAotICAgIDIzOSwgMjA3LCA5LCAxNCwgMjM5LCAyMDYsIDksIDE0LCAyMzksIDIwNSwgOSwgMTQsIDIzOSwgMjA0LCA5LCAxNCwgMjM5LCAKLSAgICAyMDMsIDksIDE0LCAyMzksIDIwMiwgOSwgMTQsIDIzOSwgMjAxLCA5LCAxNCwgMjM5LCAyMDAsIDksIDE0LCAyMzksIDE5OSwgCi0gICAgOSwgMTQsIDIzOSwgMTk4LCA5LCAxNCwgMjM5LCAxOTcsIDksIDE0LCAyMzksIDE5NiwgOSwgMTQsIDIzOSwgMTk1LCA5LCAKLSAgICAxNCwgMjM5LCAxOTQsIDksIDE0LCAyMzksIDE5MywgOSwgMTQsIDIzOSwgMTkyLCA5LCAxNCwgMjM5LCAxOTEsIDksIDE0LCAKLSAgICAyMzksIDE5MCwgOSwgMTQsIDIzOSwgMTg5LCA5LCAxNCwgMjM5LCAxODgsIDksIDE0LCAyMzksIDE4NywgOSwgMTQsIDIzOSwgCi0gICAgMTg2LCA5LCAxNCwgMjM5LCAxODUsIDksIDE0LCAyMzksIDE4NCwgOSwgMTQsIDIzOSwgMTgzLCA5LCAxNCwgMjM5LCAxODIsIAotICAgIDksIDE0LCAyMzksIDE4MSwgOSwgMTQsIDIzOSwgMTgwLCA5LCAxNCwgMjM5LCAxNzksIDksIDE0LCAyMzksIDE3OCwgOSwgCi0gICAgMTQsIDIzOSwgMTc3LCA5LCAxNCwgMjM5LCAxNzYsIDksIDE0LCAyMzksIDE3NSwgOSwgMTQsIDIzOSwgMTc0LCA5LCAxNCwgCi0gICAgMjM5LCAxNzMsIDksIDE0LCAyMzksIDE3MiwgOSwgMTQsIDIzOSwgMTcxLCA5LCAxNCwgMjM5LCAxNzAsIDksIDE0LCAyMzksIAotICAgIDE2OSwgOSwgMTQsIDIzOSwgMTY4LCA5LCAxNCwgMjM5LCAxNjcsIDksIDE0LCAyMzksIDE2NiwgOSwgMTQsIDIzOSwgMTY1LCAKLSAgICA5LCAxNCwgMjM5LCAxNjQsIDksIDE0LCAyMzksIDE2MywgOSwgMTQsIDIzOSwgMTYyLCA5LCAxNCwgMjM5LCAxNjEsIDksIAotICAgIDE0LCAyMzksIDE2MCwgOSwgMTQsIDIzOSwgMTU5LCA5LCAxNCwgMjM5LCAxNTgsIDksIDE0LCAyMzksIDE1NywgOSwgMTQsIAotICAgIDIzOSwgMTU2LCA5LCAxNCwgMjM5LCAxNTUsIDksIDE0LCAyMzksIDE1NCwgOSwgMTQsIDIzOSwgMTUzLCA5LCAxNCwgMjM5LCAKLSAgICAxNTIsIDksIDE0LCAyMzksIDE1MSwgOSwgMTQsIDIzOSwgMTUwLCA5LCAxNCwgMjM5LCAxNDksIDksIDE0LCAyMzksIDE0OCwgCi0gICAgOSwgMTQsIDIzOSwgMTQ3LCA5LCAxNCwgMjM5LCAxNDYsIDksIDE0LCAyMzksIDE0NSwgOSwgMTQsIDIzOSwgMTQ0LCA5LCAKLSAgICAxNCwgMjM5LCAxNDMsIDksIDE0LCAyMzksIDE0MiwgOSwgMTQsIDIzOSwgMTQxLCA5LCAxNCwgMjM5LCAxNDAsIDksIDE0LCAKLSAgICAyMzksIDEzOSwgOSwgMTQsIDIzOSwgMTM4LCA5LCAxNCwgMjM5LCAxMzcsIDksIDE0LCAyMzksIDEzNiwgOSwgMTQsIDIzOSwgCi0gICAgMTM1LCA5LCAxNCwgMjM5LCAxMzQsIDksIDE0LCAyMzksIDEzMywgOSwgMTQsIDIzOSwgMTMyLCA5LCAxNCwgMjM5LCAxMzEsIAotICAgIDksIDE0LCAyMzksIDEzMCwgOSwgMTQsIDIzOSwgMTI5LCA5LCAxNCwgMjM5LCAxMjgsIDksIDE0LCAyMzksIDEyNywgOSwgCi0gICAgMTQsIDIzOSwgMTI2LCA5LCAxNCwgMjM5LCAxMjUsIDksIDE0LCAyMzksIDEyNCwgOSwgMTQsIDIzOSwgMTIzLCA5LCAxNCwgCi0gICAgMjM5LCAxMjIsIDksIDE0LCAyMzksIDEyMSwgOSwgMTQsIDIzOSwgMTIwLCA5LCAxNCwgMjM5LCAxMTksIDksIDE0LCAyMzksIAotICAgIDExOCwgOSwgMTQsIDIzOSwgMTE3LCA5LCAxNCwgMjM5LCAxMTYsIDksIDE0LCAyMzksIDExNSwgOSwgMTQsIDIzOSwgMTE0LCAKLSAgICA5LCAxNCwgMjM5LCAxMTMsIDksIDE0LCAyMzksIDExMiwgOSwgMTQsIDIzOSwgMTExLCA5LCAxNCwgMjM5LCAxMTAsIDksIAotICAgIDE0LCAyMzksIDEwOSwgOSwgMTQsIDIzOSwgMTA4LCA5LCAxNCwgMjM5LCAxMDcsIDksIDE0LCAyMzksIDEwNiwgOSwgMTQsIAotICAgIDIzOSwgMTA1LCA5LCAxNCwgMjM5LCAxMDQsIDksIDE0LCAyMzksIDEwMywgOSwgMTQsIDIzOSwgMTAyLCA5LCAxNCwgMjM5LCAKLSAgICAxMDEsIDksIDE0LCAyMzksIDEwMCwgOSwgMTQsIDIzOSwgOTksIDksIDE0LCAyMzksIDk4LCA5LCAxNCwgMjM5LCA5NywgOSwgCi0gICAgMTQsIDIzOSwgOTYsIDksIDE0LCAyMzksIDk1LCA5LCAxNCwgMjM5LCA5NCwgOSwgMTQsIDIzOSwgOTMsIDksIDE0LCAyMzksIAotICAgIDkyLCA5LCAxNCwgMjM5LCA5MSwgOSwgMTQsIDIzOSwgOTAsIDksIDE0LCAyMzksIDg5LCA5LCAxNCwgMjM5LCA4OCwgOSwgCi0gICAgMTQsIDIzOSwgODcsIDksIDE0LCAyMzksIDg2LCA5LCAxNCwgMjM5LCA4NSwgOSwgMTQsIDIzOSwgODQsIDksIDE0LCAyMzksIAotICAgIDgzLCA5LCAxNCwgMjM5LCA4MiwgOSwgMTQsIDIzOSwgODEsIDksIDE0LCAyMzksIDgwLCA5LCAxNCwgMjM5LCA3OSwgOSwgCi0gICAgMTQsIDIzOSwgNzgsIDksIDE0LCAyMzksIDc3LCA5LCAxNCwgMjM5LCA3NiwgOSwgMTQsIDIzOSwgNzUsIDksIDE0LCAyMzksIAotICAgIDc0LCA5LCAxNCwgMjM5LCA3MywgOSwgMTQsIDIzOSwgNzIsIDksIDE0LCAyMzksIDcxLCA5LCAxNCwgMjM5LCA3MCwgOSwgCi0gICAgMTQsIDIzOSwgNjksIDksIDE0LCAyMzksIDY4LCA5LCAxNCwgMjM5LCA2NywgOSwgMTQsIDIzOSwgNjYsIDksIDE0LCAyMzksIAotICAgIDY1LCA5LCAxNCwgMjM5LCA2NCwgOSwgMTQsIDIzOSwgNjMsIDksIDE0LCAyMzksIDYyLCA5LCAxNCwgMjM5LCA2MSwgOSwgCi0gICAgMTQsIDIzOSwgNjAsIDksIDE0LCAyMzksIDU5LCA5LCAxNCwgMjM5LCA1OCwgOSwgMTQsIDIzOSwgNTcsIDksIDE0LCAyMzksIAotICAgIDU2LCA5LCAxNCwgMjM5LCA1NSwgOSwgMTQsIDIzOSwgNTQsIDksIDE0LCAyMzksIDUzLCA5LCAxNCwgMjM5LCA1MiwgOSwgCi0gICAgMTQsIDIzOSwgNTEsIDksIDE0LCAyMzksIDUwLCA5LCAxNCwgMjM5LCA0OSwgOSwgMTQsIDIzOSwgNDgsIDksIDE0LCAyMzksIAotICAgIDQ3LCA5LCAxNCwgMjM5LCA0NiwgOSwgMTQsIDIzOSwgNDUsIDksIDE0LCAyMzksIDQ0LCA5LCAxNCwgMjM5LCA0MywgOSwgCi0gICAgMTQsIDIzOSwgNDIsIDksIDE0LCAyMzksIDQxLCA5LCAxNCwgMjM5LCA0MCwgOSwgMTQsIDIzOSwgMzksIDksIDE0LCAyMzksIAotICAgIDM4LCA5LCAxNCwgMjM5LCAzNywgOSwgMTQsIDIzOSwgMzYsIDksIDE0LCAyMzksIDM1LCA5LCAxNCwgMjM5LCAzNCwgOSwgCi0gICAgMTQsIDIzOSwgMzMsIDksIDE0LCAyMzksIDMyLCA5LCAxNCwgMjM5LCAzMSwgOSwgMTQsIDIzOSwgMzAsIDksIDE0LCAyMzksIAotICAgIDI5LCA5LCAxNCwgMjM5LCAyOCwgOSwgMTQsIDIzOSwgMjcsIDksIDE0LCAyMzksIDI2LCA5LCAxNCwgMjM5LCAyNSwgOSwgCi0gICAgMTQsIDIzOSwgMjQsIDksIDE0LCAyMzksIDIzLCA5LCAxNCwgMjM5LCAyMiwgOSwgMTQsIDIzOSwgMjEsIDksIDE0LCAyMzksIAotICAgIDIwLCA5LCAxNCwgMjM5LCAxOSwgOSwgMTQsIDIzOSwgMTgsIDksIDE0LCAyMzksIDE3LCA5LCAxNCwgMjM5LCAxNiwgOSwgCi0gICAgMTQsIDIzOSwgMTUsIDksIDE0LCAyMzksIDE0LCA5LCAxNCwgMjM5LCAxMywgOSwgMTQsIDIzOSwgMTIsIDksIDE0LCAyMzksIAotICAgIDExLCA5LCAxNCwgMjM5LCAxMCwgOSwgMTQsIDIzOSwgOSwgOSwgMTQsIDIzOSwgOCwgOSwgMTQsIDIzOSwgNywgOSwgMTQsIAotICAgIDIzOSwgNiwgOSwgMTQsIDIzOSwgNSwgOSwgMTQsIDIzOSwgNCwgOSwgMTQsIDIzOSwgMywgOSwgMTQsIDIzOSwgMiwgOSwgCi0gICAgMTQsIDIzOSwgMSwgOSwgMTQsIDIzOSwgMCwgOSwgMTQsIDIzOCwgMjU1LCA5LCAxNCwgMjM4LCAyNTQsIDksIDE0LCAyMzgsIAotICAgIDI1MywgOSwgMTQsIDIzOCwgMjUyLCA5LCAxNCwgMjM4LCAyNTEsIDksIDE0LCAyMzgsIDI1MCwgOSwgMTQsIDIzOCwgMjQ5LCAKLSAgICA5LCAxNCwgMjM4LCAyNDgsIDksIDE0LCAyMzgsIDI0NywgOSwgMTQsIDIzOCwgMjQ2LCA5LCAxNCwgMjM4LCAyNDUsIDksIAotICAgIDE0LCAyMzgsIDI0NCwgOSwgMTQsIDIzOCwgMjQzLCA5LCAxNCwgMjM4LCAyNDIsIDksIDE0LCAyMzgsIDI0MSwgOSwgMTQsIAotICAgIDIzOCwgMjQwLCA5LCAxNCwgMjM4LCAyMzksIDksIDE0LCAyMzgsIDIzOCwgOSwgMTQsIDIzOCwgMjM3LCA5LCAxNCwgMjM4LCAKLSAgICAyMzYsIDksIDE0LCAyMzgsIDIzNSwgOSwgMTQsIDIzOCwgMjM0LCA5LCAxNCwgMjM4LCAyMzMsIDksIDE0LCAyMzgsIDIzMiwgCi0gICAgOSwgMTQsIDIzOCwgMjMxLCA5LCAxNCwgMjM4LCAyMzAsIDksIDE0LCAyMzgsIDIyOSwgOSwgMTQsIDIzOCwgMjI4LCA5LCAKLSAgICAxNCwgMjM4LCAyMjcsIDksIDE0LCAyMzgsIDIyNiwgOSwgMTQsIDIzOCwgMjI1LCA5LCAxNCwgMjM4LCAyMjQsIDksIDE0LCAKLSAgICAyMzgsIDIyMywgOSwgMTQsIDIzOCwgMjIyLCA5LCAxNCwgMjM4LCAyMjEsIDksIDE0LCAyMzgsIDIyMCwgOSwgMTQsIDIzOCwgCi0gICAgMjE5LCA5LCAxNCwgMjM4LCAyMTgsIDksIDE0LCAyMzgsIDIxNywgOSwgMTQsIDIzOCwgMjE2LCA5LCAxNCwgMjM4LCAyMTUsIAotICAgIDksIDE0LCAyMzgsIDIxNCwgOSwgMTQsIDIzOCwgMjEzLCA5LCAxNCwgMjM4LCAyMTIsIDksIDE0LCAyMzgsIDIxMSwgOSwgCi0gICAgMTQsIDIzOCwgMjEwLCA5LCAxNCwgMjM4LCAyMDksIDksIDE0LCAyMzgsIDIwOCwgOSwgMTQsIDIzOCwgMjA3LCA5LCAxNCwgCi0gICAgMjM4LCAyMDYsIDksIDE0LCAyMzgsIDIwNSwgOSwgMTQsIDIzOCwgMjA0LCA5LCAxNCwgMjM4LCAyMDMsIDksIDE0LCAyMzgsIAotICAgIDIwMiwgOSwgMTQsIDIzOCwgMjAxLCA5LCAxNCwgMjM4LCAyMDAsIDksIDE0LCAyMzgsIDE5OSwgOSwgMTQsIDIzOCwgMTk4LCAKLSAgICA5LCAxNCwgMjM4LCAxOTcsIDksIDE0LCAyMzgsIDE5NiwgOSwgMTQsIDIzOCwgMTk1LCA5LCAxNCwgMjM4LCAxOTQsIDksIAotICAgIDE0LCAyMzgsIDE5MywgOSwgMTQsIDIzOCwgMTkyLCA5LCAxNCwgMjM4LCAxOTEsIDksIDE0LCAyMzgsIDE5MCwgOSwgMTQsIAotICAgIDIzOCwgMTg5LCA5LCAxNCwgMjM4LCAxODgsIDksIDE0LCAyMzgsIDE4NywgOSwgMTQsIDIzOCwgMTg2LCA5LCAxNCwgMjM4LCAKLSAgICAxODUsIDksIDE0LCAyMzgsIDE4NCwgOSwgMTQsIDIzOCwgMTgzLCA5LCAxNCwgMjM4LCAxODIsIDksIDE0LCAyMzgsIDE4MSwgCi0gICAgOSwgMTQsIDIzOCwgMTgwLCA5LCAxNCwgMjM4LCAxNzksIDksIDE0LCAyMzgsIDE3OCwgOSwgMTQsIDIzOCwgMTc3LCA5LCAKLSAgICAxNCwgMjM4LCAxNzYsIDksIDE0LCAyMzgsIDE3NSwgOSwgMTQsIDIzOCwgMTc0LCA5LCAxNCwgMjM4LCAxNzMsIDksIDE0LCAKLSAgICAyMzgsIDE3MiwgOSwgMTQsIDIzOCwgMTcxLCA5LCAxNCwgMjM4LCAxNzAsIDksIDE0LCAyMzgsIDE2OSwgOSwgMTQsIDIzOCwgCi0gICAgMTY4LCA5LCAxNCwgMjM4LCAxNjcsIDksIDE0LCAyMzgsIDE2NiwgOSwgMTQsIDIzOCwgMTY1LCA5LCAxNCwgMjM4LCAxNjQsIAotICAgIDksIDE0LCAyMzgsIDE2MywgOSwgMTQsIDIzOCwgMTYyLCA5LCAxNCwgMjM4LCAxNjEsIDksIDE0LCAyMzgsIDE2MCwgOSwgCi0gICAgMTQsIDIzOCwgMTU5LCA5LCAxNCwgMjM4LCAxNTgsIDksIDE0LCAyMzgsIDE1NywgOSwgMTQsIDIzOCwgMTU2LCA5LCAxNCwgCi0gICAgMjM4LCAxNTUsIDksIDE0LCAyMzgsIDE1NCwgOSwgMTQsIDIzOCwgMTUzLCA5LCAxNCwgMjM4LCAxNTIsIDksIDE0LCAyMzgsIAotICAgIDE1MSwgOSwgMTQsIDIzOCwgMTUwLCA5LCAxNCwgMjM4LCAxNDksIDksIDE0LCAyMzgsIDE0OCwgOSwgMTQsIDIzOCwgMTQ3LCAKLSAgICA5LCAxNCwgMjM4LCAxNDYsIDksIDE0LCAyMzgsIDE0NSwgOSwgMTQsIDIzOCwgMTQ0LCA5LCAxNCwgMjM4LCAxNDMsIDksIAotICAgIDE0LCAyMzgsIDE0MiwgOSwgMTQsIDIzOCwgMTQxLCA5LCAxNCwgMjM4LCAxNDAsIDksIDE0LCAyMzgsIDEzOSwgOSwgMTQsIAotICAgIDIzOCwgMTM4LCA5LCAxNCwgMjM4LCAxMzcsIDksIDE0LCAyMzgsIDEzNiwgOSwgMTQsIDIzOCwgMTM1LCA5LCAxNCwgMjM4LCAKLSAgICAxMzQsIDksIDE0LCAyMzgsIDEzMywgOSwgMTQsIDIzOCwgMTMyLCA5LCAxNCwgMjM4LCAxMzEsIDksIDE0LCAyMzgsIDEzMCwgCi0gICAgOSwgMTQsIDIzOCwgMTI5LCA5LCAxNCwgMjM4LCAxMjgsIDksIDE0LCAyMzgsIDEyNywgOSwgMTQsIDIzOCwgMTI2LCA5LCAKLSAgICAxNCwgMjM4LCAxMjUsIDksIDE0LCAyMzgsIDEyNCwgOSwgMTQsIDIzOCwgMTIzLCA5LCAxNCwgMjM4LCAxMjIsIDksIDE0LCAKLSAgICAyMzgsIDEyMSwgOSwgMTQsIDIzOCwgMTIwLCA5LCAxNCwgMjM4LCAxMTksIDksIDE0LCAyMzgsIDExOCwgOSwgMTQsIDIzOCwgCi0gICAgMTE3LCA5LCAxNCwgMjM4LCAxMTYsIDksIDE0LCAyMzgsIDExNSwgOSwgMTQsIDIzOCwgMTE0LCA5LCAxNCwgMjM4LCAxMTMsIAotICAgIDksIDE0LCAyMzgsIDExMiwgOSwgMTQsIDIzOCwgMTExLCA5LCAxNCwgMjM4LCAxMTAsIDksIDE0LCAyMzgsIDEwOSwgOSwgCi0gICAgMTQsIDIzOCwgMTA4LCA5LCAxNCwgMjM4LCAxMDcsIDksIDE0LCAyMzgsIDEwNiwgOSwgMTQsIDIzOCwgMTA1LCA5LCAxNCwgCi0gICAgMjM4LCAxMDQsIDksIDE0LCAyMzgsIDEwMywgOSwgMTQsIDIzOCwgMTAyLCA5LCAxNCwgMjM4LCAxMDEsIDksIDE0LCAyMzgsIAotICAgIDEwMCwgOSwgMTQsIDIzOCwgOTksIDksIDE0LCAyMzgsIDk4LCA5LCAxNCwgMjM4LCA5NywgOSwgMTQsIDIzOCwgOTYsIDksIAotICAgIDE0LCAyMzgsIDk1LCA5LCAxNCwgMjM4LCA5NCwgOSwgMTQsIDIzOCwgOTMsIDksIDE0LCAyMzgsIDkyLCA5LCAxNCwgMjM4LCAKLSAgICA5MSwgOSwgMTQsIDIzOCwgOTAsIDksIDE0LCAyMzgsIDg5LCA5LCAxNCwgMjM4LCA4OCwgOSwgMTQsIDIzOCwgODcsIDksIAotICAgIDE0LCAyMzgsIDg2LCA5LCAxNCwgMjM4LCA4NSwgOSwgMTQsIDIzOCwgODQsIDksIDE0LCAyMzgsIDgzLCA5LCAxNCwgMjM4LCAKLSAgICA4MiwgOSwgMTQsIDIzOCwgODEsIDksIDE0LCAyMzgsIDgwLCA5LCAxNCwgMjM4LCA3OSwgOSwgMTQsIDIzOCwgNzgsIDksIAotICAgIDE0LCAyMzgsIDc3LCA5LCAxNCwgMjM4LCA3NiwgOSwgMTQsIDIzOCwgNzUsIDksIDE0LCAyMzgsIDc0LCA5LCAxNCwgMjM4LCAKLSAgICA3MywgMjMzLCA5MCwgMjE3LCA4NCwgMTI5LCAyMTksIDE4LCAxMjksIDI0NSwgMzEsIDc4LCAxMjksIDIyMywgMjU0LCA3OCwgCi0gICAgMTI5LCA1NCwgNTAsIDEyOSwgMjQ3LCAxMzIsIDUwLCAxMjksIDIyNSwgMTgyLCA1MCwgMTI5LCAyNTQsIDEyNiwgMTI5LCAKLSAgICAyNTQsIDU3LCAxMjksIDQzLCAyMjYsIDMsIDEyOSwgNDQsIDIyNiwgMywgMTI5LCAyNTMsIDIxNiwgMTI5LCA5NiwgNTAsIAotICAgIDEyOSwgMjQ5LCAyMTksIDEyOSwgMjQwLCAxNjcsIDEyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMjksIDIxOSwgNDYsIDEyOSwgCi0gICAgMjEsIDIxMCwgODYsIDEyOSwgMjEsIDExMCwgMTI5LCAyMSwgMTA1LCAxMjksIDIxLCAxNTgsIDEyOSwgMjEsIDE2MSwgMTI5LCAKLSAgICAyMSwgMTg5LCAxMjksIDIxLCAxOTQsIDEyOSwgMjEsIDE5OCwgMTI5LCAyMSwgMTk1LCAxMjksIDIxLCAyMDAsIDEyOSwgCi0gICAgMjQ5LCAyMjYsIDEyOSwgMjIwLCAxNTAsIDEyOSwgMjMzLCAxNSwgNTAsIDEyOSwgMjQ1LCA5OCwgNTAsIDEyOSwgMjQyLCAKLSAgICAxMzAsIDUwLCAxMjksIDIyNCwgMTMsIDc4LCAxMjksIDI0OSwgMjE3LCAyNTMsIDIwNiwgMTI5LCA3LCA2LCAxLCA2MSwgCi0gICAgMTI5LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI5LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjksIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDEyOSwgNywgNiwgMSwgNzUsIDEyOSwgNywgNiwgMSwgMjQ1LCA2LCAxMjksIDcsIDYsIDEsIDI0MywgMjAyLCAxMjksIDcsIAotICAgIDYsIDEsIDI0MiwgNjAsIDEyOSwgNywgNiwgMSwgNzMsIDEyOSwgNywgNiwgMSwgMjM1LCAxNDQsIDEyOSwgNywgNiwgMSwgCi0gICAgMjM1LCAyMywgMTI5LCA3LCA2LCAxLCAxNTYsIDEyOSwgNywgNiwgMSwgMTkzLCAxMjksIDcsIDYsIDEsIDIzMCwgMjUsIAotICAgIDEyOSwgNywgNiwgMSwgNzYsIDEyOSwgNywgNiwgMSwgMjI2LCAxMDUsIDEyOSwgNywgNiwgMSwgMjI0LCA5NiwgMTI5LCA3LCAKLSAgICA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgMjIyLCA5MSwgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MiwgMTI5LCA3LCA2LCAxLCAKLSAgICA3MCwgMTI5LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgCi0gICAgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAKLSAgICAxMjksIDIyMywgNTAsIDIxOSwgNDYsIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzMSwgMjU1LCAxNCwgMTI5LCAxMjEsIAotICAgIDIzMiwgMjEzLCAxMjksIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgCi0gICAgMTU4LCAxMjksIDcsIDQsIDEsIDI1MSwgNjYsIDEyOSwgNywgNCwgMSwgMjQ5LCA2MCwgMTI5LCA3LCA0LCAxLCA3NSwgMTI5LCAKLSAgICA3LCA0LCAxLCAyNDUsIDYsIDEyOSwgNywgNCwgMSwgMjQzLCAyMDIsIDEyOSwgNywgNCwgMSwgMjQyLCA2MCwgMTI5LCA3LCAKLSAgICA0LCAxLCA3MywgMTI5LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjksIDcsIDQsIDEsIAotICAgIDE1NiwgMTI5LCA3LCA0LCAxLCAxOTMsIDEyOSwgNywgNCwgMSwgMjMwLCAyNSwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjksIDcsIDQsIDEsIDE1MywgMTI5LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkxLCAxMjksIDcsIDQsIDEsIDIxNywgMTUyLCAxMjksIDcsIDQsIDEsIDcwLCAxMjksIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA1LCAxMjksIDcsIDQsIDEsIDIxMiwgOTgsIDEyOSwgNywgNCwgMSwgMjExLCAxNzgsIDEyOSwgNywgNCwgMSwgMjExLCAKLSAgICAxMTcsIDEyOSwgNywgNCwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDI0OSwgOTksIDEyNywgMTI5LCA2NywgMjMyLCAyMTMsIAotICAgIDEyOSwgNDQsIDI0OSwgOTksIDEyNywgMTI5LCAxODIsIDI1MSwgNiwgMjE3LCA4NCwgNDUsIDIyMSwgNzgsIDQ1LCAyMjEsIAotICAgIDY3LCA0NSwgMjIxLCA1NiwgNDUsIDIyMSwgNDQsIDQ1LCAyMjEsIDMzLCA0NSwgMjIxLCAyMiwgNDUsIDIyMSwgMTEsIDQ1LCAKLSAgICAyMjEsIDAsIDQ1LCAyMjAsIDI0NSwgNDUsIDIyMCwgMjM3LCA0NSwgMjIwLCAyMzYsIDQ1LCAyMjAsIDIzNSwgNDUsIDIyMCwgCi0gICAgMjM0LCA0NSwgMjIwLCAyMzIsIDQ1LCAyMjAsIDIzMSwgNDUsIDIyMCwgMjMwLCA0NSwgMjIwLCAyMjksIDQ1LCAyMjAsIAotICAgIDIyOCwgNDUsIDIyMCwgMjI3LCA0NSwgMjIwLCAyMjYsIDQ1LCAyMjAsIDIyNSwgNDUsIDIyMCwgMjI0LCA0NSwgMjIwLCAKLSAgICAyMjMsIDQ1LCAyMjAsIDIyMSwgNDUsIDIyMCwgMjIwLCA0NSwgMjIwLCAyMTksIDQ1LCAyMjAsIDIxOCwgNDUsIDIyMCwgCi0gICAgMjE3LCA0NSwgMjIwLCAyMTYsIDQ1LCAyMjAsIDIxNSwgNDUsIDIyMCwgMjE0LCA0NSwgMjIwLCAyMTMsIDQ1LCAyMjAsIAotICAgIDIxMiwgNDUsIDIyMCwgMjEwLCA0NSwgMjIwLCAyMDksIDQ1LCAyMjAsIDIwOCwgNDUsIDIyMCwgMjA3LCA0NSwgMjIwLCAKLSAgICAyMDYsIDQ1LCAyMjAsIDIwNSwgNDUsIDIyMCwgMjA0LCA0NSwgMjIwLCAyMDMsIDQ1LCAyMjAsIDIwMiwgNDUsIDIyMCwgCi0gICAgMjAxLCA0NSwgMjIwLCAxOTksIDQ1LCAyMjAsIDE5OCwgNDUsIDIyMCwgMTk3LCA0NSwgMjIwLCAxOTYsIDQ1LCAyMjAsIAotICAgIDE5NSwgNDUsIDIyMCwgMTk0LCA0NSwgMjIwLCAxOTMsIDQ1LCAyMjAsIDE5MiwgNDUsIDIyMCwgMTkxLCA0NSwgMjIwLCAKLSAgICAxOTAsIDQ1LCAyMjAsIDE4OCwgNDUsIDIyMCwgMTg3LCA0NSwgMjIwLCAxODYsIDQ1LCAyMjAsIDE4NSwgNDUsIDIyMCwgCi0gICAgMTg0LCA0NSwgMjIwLCAxODMsIDQ1LCAyMjAsIDE4MiwgNDUsIDIyMCwgMTgxLCA0NSwgMjIwLCAxODAsIDQ1LCAyMjAsIAotICAgIDE3OSwgNDUsIDIyMCwgMTc3LCA0NSwgMjIwLCAxNzYsIDQ1LCAyMjAsIDE3NSwgNDUsIDIyMCwgMTc0LCA0NSwgMjIwLCAKLSAgICAxNzMsIDQ1LCAyMjAsIDE3MiwgNDUsIDIyMCwgMTcxLCA0NSwgMjIwLCAxNzAsIDQ1LCAyMjAsIDE2OSwgNDUsIDIyMCwgCi0gICAgMTY4LCA0NSwgMjIwLCAxNjYsIDQ1LCAyMjAsIDE2NSwgNDUsIDIyMCwgMTY0LCA0NSwgMjIwLCAxNjMsIDQ1LCAyMjAsIAotICAgIDE2MiwgNDUsIDIyMCwgMTYxLCA0NSwgMjIwLCAxNjAsIDQ1LCAyMjAsIDE1OSwgNDUsIDIyMCwgMTU4LCA0NSwgMjIwLCAKLSAgICAxNTcsIDQ1LCAyMjEsIDE1NCwgNDUsIDIyMSwgMTUzLCA0NSwgMjIxLCAxNTIsIDQ1LCAyMjEsIDE1MSwgNDUsIDIyMSwgCi0gICAgMTUwLCA0NSwgMjIxLCAxNDksIDQ1LCAyMjEsIDE0OCwgNDUsIDIyMSwgMTQ3LCA0NSwgMjIxLCAxNDYsIDQ1LCAyMjEsIAotICAgIDE0NSwgNDUsIDIyMSwgMTQzLCA0NSwgMjIxLCAxNDIsIDQ1LCAyMjEsIDE0MSwgNDUsIDIyMSwgMTQwLCA0NSwgMjIxLCAKLSAgICAxMzksIDQ1LCAyMjEsIDEzOCwgNDUsIDIyMSwgMTM3LCA0NSwgMjIxLCAxMzYsIDQ1LCAyMjEsIDEzNSwgNDUsIDIyMSwgCi0gICAgMTM0LCA0NSwgMjIxLCAxMzIsIDQ1LCAyMjEsIDEzMSwgNDUsIDIyMSwgMTMwLCA0NSwgMjIxLCAxMjksIDQ1LCAyMjEsIAotICAgIDEyOCwgNDUsIDIyMSwgMTI3LCA0NSwgMjIxLCAxMjYsIDQ1LCAyMjEsIDEyNSwgNDUsIDIyMSwgMTI0LCA0NSwgMjIxLCAKLSAgICAxMjMsIDQ1LCAyMjEsIDEyMSwgNDUsIDIyMSwgMTIwLCA0NSwgMjIxLCAxMTksIDQ1LCAyMjEsIDExOCwgNDUsIDIyMSwgCi0gICAgMTE3LCA0NSwgMjIxLCAxMTYsIDQ1LCAyMjEsIDExNSwgNDUsIDIyMSwgMTE0LCA0NSwgMjIxLCAxMTMsIDQ1LCAyMjEsIAotICAgIDExMiwgNDUsIDIyMSwgMTEwLCA0NSwgMjIxLCAxMDksIDQ1LCAyMjEsIDEwOCwgNDUsIDIyMSwgMTA3LCA0NSwgMjIxLCAKLSAgICAxMDYsIDQ1LCAyMjEsIDEwNSwgNDUsIDIyMSwgMTA0LCA0NSwgMjIxLCAxMDMsIDQ1LCAyMjEsIDEwMiwgNDUsIDIyMSwgCi0gICAgMTAxLCA0NSwgMjIxLCA5OSwgNDUsIDIyMSwgOTgsIDQ1LCAyMjEsIDk3LCA0NSwgMjIxLCA5NiwgNDUsIDIyMSwgOTUsIDQ1LCAKLSAgICAyMjEsIDk0LCA0NSwgMjIxLCA5MywgNDUsIDIyMSwgOTIsIDQ1LCAyMjEsIDkxLCA0NSwgMjIxLCA5MCwgNDUsIDIyMSwgODgsIAotICAgIDQ1LCAyMjEsIDg3LCA0NSwgMjIxLCA4NiwgNDUsIDIyMSwgODUsIDQ1LCAyMjEsIDg0LCA0NSwgMjIxLCA4MywgNDUsIDIyMSwgCi0gICAgODIsIDQ1LCAyMjEsIDgxLCA0NSwgMjIxLCA4MCwgNDUsIDIyMSwgNzksIDQ1LCAyMjEsIDc3LCA0NSwgMjIxLCA3NiwgNDUsIAotICAgIDIyMSwgNzUsIDQ1LCAyMjEsIDc0LCA0NSwgMjIxLCA3MywgNDUsIDIyMSwgNzIsIDQ1LCAyMjEsIDcxLCA0NSwgMjIxLCA3MCwgCi0gICAgNDUsIDIyMSwgNjksIDQ1LCAyMjEsIDY4LCA0NSwgMjIxLCA2NiwgNDUsIDIyMSwgNjUsIDQ1LCAyMjEsIDY0LCA0NSwgMjIxLCAKLSAgICA2MywgNDUsIDIyMSwgNjIsIDQ1LCAyMjEsIDYxLCA0NSwgMjIxLCA2MCwgNDUsIDIyMSwgNTksIDQ1LCAyMjEsIDU4LCA0NSwgCi0gICAgMjIxLCA1NywgNDUsIDIyMSwgNTUsIDQ1LCAyMjEsIDU0LCA0NSwgMjIxLCA1MywgNDUsIDIyMSwgNTIsIDQ1LCAyMjEsIDUxLCAKLSAgICA0NSwgMjIxLCA1MCwgNDUsIDIyMSwgNDksIDQ1LCAyMjEsIDQ4LCA0NSwgMjIxLCA0NywgNDUsIDIyMSwgNDYsIDQ1LCAyMjEsIAotICAgIDQzLCA0NSwgMjIxLCA0MiwgNDUsIDIyMSwgNDEsIDQ1LCAyMjEsIDQwLCA0NSwgMjIxLCAzOSwgNDUsIDIyMSwgMzgsIDQ1LCAKLSAgICAyMjEsIDM3LCA0NSwgMjIxLCAzNiwgNDUsIDIyMSwgMzUsIDQ1LCAyMjEsIDM0LCA0NSwgMjIxLCAzMiwgNDUsIDIyMSwgMzEsIAotICAgIDQ1LCAyMjEsIDMwLCA0NSwgMjIxLCAyOSwgNDUsIDIyMSwgMjgsIDQ1LCAyMjEsIDI3LCA0NSwgMjIxLCAyNiwgNDUsIDIyMSwgCi0gICAgMjUsIDQ1LCAyMjEsIDI0LCA0NSwgMjIxLCAyMywgNDUsIDIyMSwgMjEsIDQ1LCAyMjEsIDIwLCA0NSwgMjIxLCAxOSwgNDUsIAotICAgIDIyMSwgMTgsIDQ1LCAyMjEsIDE3LCA0NSwgMjIxLCAxNiwgNDUsIDIyMSwgMTUsIDQ1LCAyMjEsIDE0LCA0NSwgMjIxLCAxMywgCi0gICAgNDUsIDIyMSwgMTIsIDQ1LCAyMjEsIDEwLCA0NSwgMjIxLCA5LCA0NSwgMjIxLCA4LCA0NSwgMjIxLCA3LCA0NSwgMjIxLCA2LCAKLSAgICA0NSwgMjIxLCA1LCA0NSwgMjIxLCA0LCA0NSwgMjIxLCAzLCA0NSwgMjIxLCAyLCA0NSwgMjIxLCAxLCA0NSwgMjIwLCAyNTUsIAotICAgIDQ1LCAyMjAsIDI1NCwgNDUsIDIyMCwgMjUzLCA0NSwgMjIwLCAyNTIsIDQ1LCAyMjAsIDI1MSwgNDUsIDIyMCwgMjUwLCA0NSwgCi0gICAgMjIwLCAyNDksIDQ1LCAyMjAsIDI0OCwgNDUsIDIyMCwgMjQ3LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIDI0NCwgNDUsIAotICAgIDIyMCwgMjQzLCA0NSwgMjIwLCAyNDIsIDQ1LCAyMjAsIDI0MSwgNDUsIDIyMCwgMjQwLCA0NSwgMjIwLCAyMzksIDQ1LCAKLSAgICAyMjAsIDIzOCwgMjI3LCAyMDIsIDIyNywgMjA0LCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAyMTksIDQ4LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIxNiwgMjEyLCAyMTgsIDg1LCAyNDUsIDE0MywgNjQsIDIxNiwgMjEyLCAyNDUsIDU2LCAyNDUsIDE0MywgNjQsIAotICAgIDIxNSwgMjQzLCAyNDUsIDEwOSwgMjQ1LCAxMzIsIDI0NSwgMTMzLCAyNTUsIDcsIDI1NSwgOCwgMjU0LCAxNjcsIDI1MiwgCi0gICAgNDcsIDI1MiwgMTc5LCAyNTEsIDEzMSwgMTM1LCAyMTcsIDg5LCAyMDMsIDIxNywgODksIDI0MCwgMjI3LCAyMTcsIDkzLCAKLSAgICAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2NiwgMjMyLCAyMTMsIDI0NSwgMTQzLCA2NCwgMjMyLCAyMTMsIDIzMywgMCwgMjI4LCAKLSAgICAxMzUsIDI0NSwgMTEyLCAyMzIsIDIxNCwgMjE3LCA4OSwgNjcsIDIxNywgODksIDIxMiwgMTE4LCAyNDQsIDIwLCAyNDQsIAotICAgIDE0NSwgMjQ0LCAxMjUsIDI1MCwgMjMwLCAyMjMsIDUzLCAyNDksIDE0MywgMjIwLCAyOCwgMjI2LCAxMzAsIDIzMiwgMTUwLCAKLSAgICAxMTAsIDIxOSwgNTgsIDIyMCwgMjgsIDIzNSwgMjU1LCAyMzIsIDE1MCwgMjEwLCA4NiwgMjE5LCAxOTEsIDI0OCwgMTUxLCAKLSAgICAyMzIsIDIwNCwgMjQ1LCA3NywgMjQ3LCAxNTUsIDI0OCwgMzEsIDI0OSwgMTc4LCAxMTAsIDI0OCwgMTQxLCAyNDgsIDMxLCAKLSAgICAyNDksIDE3OCwgMTA1LCAyNDgsIDE0MCwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDE1OCwgMjQ4LCAxMzksIDI0OCwgMzEsIDI0OSwgCi0gICAgMTc4LCAxNjEsIDI0OCwgMTM4LCAxNTIsIDI1NSwgNywgMjI5LCAyMDksIDIxNywgMTc3LCAyMzYsIDYyLCAyMTcsIDE4MCwgCi0gICAgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDI0NSwgNjIsIDI1MSwgNSwgMjUxLCA3LCAyNDUsIDE0MywgNjQsIAotICAgIDIzMSwgODEsIDI0NSwgMTEwLCAyMTgsIDYxLCAyMTgsIDc4LCAyNDUsIDc3LCAyNDUsIDc4LCAyMzUsIDIzMiwgMjIwLCAKLSAgICAxMzgsIDE2MSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAyNDMsIDIzNywgMjM1LCAyMzIsIDIyMCwgMTM4LCAxNTgsIDI0MiwgCi0gICAgMTIxLCAyMjAsIDEzNywgMjQyLCAxMTgsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTA1LCAyMjMsIDEyMSwgMjIwLCAxMzcsIAotICAgIDIyMiwgMTQ1LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDExMCwgMjE0LCAxNzQsIDIyMCwgMTM3LCAyMTQsIDEzMywgMjE5LCAyMSwgCi0gICAgMjQ4LCA2MywgMjQ4LCA2NSwgMjI2LCA3OCwgMjUwLCAxNDIsIDIyNiwgODAsIDEyNSwgMjI2LCAyNDAsIDIyNCwgMTkzLCAKLSAgICAyNDEsIDQ3LCAyNTEsIDE1MCwgMjI1LCAxNzMsIDI0MSwgMjAzLCAyNTEsIDE2MSwgMjI4LCA3NSwgMjUxLCAxNTAsIDI0MSwgCi0gICAgMjAzLCAyMjksIDE3NSwgMjM1LCAyNDIsIDIzNSwgMjQ0LCAyMjksIDgyLCAyMzIsIDIxMywgMjI5LCA5OSwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjE4LCAyMjMsIDI0NSwgMTQzLCA2NCwgMjIxLCAxNTgsIDI1NCwgMTgsIDI0NSwgCi0gICAgODAsIDEzNSwgMjE3LCA5MCwgMjIwLCAxMjcsIDIwMywgMjE3LCA5MCwgMjIwLCAxMjcsIDI0MCwgMjI0LCAxMzUsIDIxNywgCi0gICAgOTAsIDIsIDIzNSwgMzUsIDIwMywgMjE3LCA5MCwgMiwgMjM1LCAzNSwgMjQwLCAyMjUsIDIzMiwgMjE0LCAyMTcsIDkwLCAKLSAgICAyMjAsIDEyNywgNjcsIDIxNywgOTAsIDIyMCwgMTI3LCAyMTIsIDExNywgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNDQsIDE0LCAKLSAgICAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NiwgMTA2LCAyMjUsIDMyLCAyMjUsIDI1MywgMjMyLCAyMTQsIDI1MiwgMTc4LCAyMjUsIAotICAgIDI1MywgMjMyLCAyMTQsIDIxNCwgMTYzLCAyMjUsIDI4LCAyMjMsIDUwLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDIyMywgNTAsIAotICAgIDIzNSwgMjQyLCAyMjMsIDM1LCAyMTksIDE1NSwgMjIwLCAyOCwgMTA1LCAyMTksIDE1MiwgMjE4LCAyMjUsIDIxOSwgMTU1LCAKLSAgICAyMjAsIDI4LCAxNTgsIDIxOSwgMTUxLCAyMTgsIDIyNCwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDIxOCwgMTA1LCAyNDgsIDEzNywgCi0gICAgMjI0LCAxODMsIDIxNCwgMTMyLCAxMTAsIDIyNCwgMTgzLCAyMTQsIDEzMCwgMjI0LCAxNDksIDIyNCwgMTgzLCAyMTQsIAotICAgIDEzMiwgMTA1LCAyMjQsIDE4MywgMjE0LCAxMjksIDIyNCwgMTQ4LCAyMjAsIDEyOCwgMjE1LCAyNDIsIDIxOCwgMTUxLCAKLSAgICAyMTgsIDg5LCAyNTEsIDYsIDI1MCwgMTQyLCAyNTAsIDIwOSwgMjMxLCA0MywgMjEyLCA1OSwgMjMwLCA0MywgMjE4LCAxNTIsIAotICAgIDY0LCAyNDIsIDEwNywgMjU0LCAxOCwgMjE4LCAxNTIsIDY0LCAyMjQsIDE2NiwgMjU0LCAxOCwgMjE5LCAyMCwgMjQ1LCAKLSAgICAxNDMsIDY0LCAyNDIsIDEwNywgMjU0LCAxOCwgMjQ1LCAxNDMsIDY0LCAyMjQsIDE2NiwgMjU0LCAxOCwgMjQ1LCAxMDcsIAotICAgIDIxOCwgMTUyLCA2NCwgMjE4LCAxMDUsIDIxOSwgMzUsIDIxOSwgMTU1LCAyNDIsIDE0MSwgMTM1LCAyMzUsIDE5NSwgMjIwLCAKLSAgICAxMDcsIDIxOSwgMTU1LCAxMzUsIDIzNSwgMTk1LCAyMjEsIDE5NCwgMjQ5LCAxNzgsIDIyMCwgMTM1LCAyMzUsIDE5NSwgCi0gICAgMjQ5LCAxMTMsIDIxOCwgMTA2LCAyMTYsIDIzNiwgMjE4LCAxNjgsIDIyNiwgMTY5LCAyMTcsIDE2NywgMjQ5LCAyMTgsIAotICAgIDIyNiwgMTQyLCAyMjQsIDE4NCwgMjMxLCA0MiwgMjI1LCAxOSwgMjU0LCA1MywgMjI0LCAxNzgsIDI0OSwgMjE4LCAyNTQsIAotICAgIDY5LCAyMjksIDE2MywgMjE5LCAyMDAsIDcsIDYsIDEsIDI0MiwgMjQ5LCA3LCA0LCAxLCAyNDIsIDI0OSwgMjUwLCAxNTksIAotICAgIDE2NSwgMSwgMjMyLCAxNzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyNDQsIDM2LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgCi0gICAgMjQ0LCAxNTcsIDIwOSwgMjA5LCAxLCAyMjIsIDIxMSwgMjA5LCAyMDksIDEsIDIzMiwgMTU2LCA2MywgMTY0LCAyNTEsIAotICAgIDIyMywgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAyNDgsIDIyMywgNDEsIDI0MywgMjE2LCAyNDMsIDIxNSwgMjQzLCAyMTQsIAotICAgIDIzMCwgNDUsIDIwOSwgMjUxLCAyMDksIDI1MiwgMjA5LCAyNTQsIDIzMiwgMTAyLCAyMjIsIDIxOSwgMjMyLCAxMDMsIDIyMiwgCi0gICAgMjIwLCAyMjUsIDIyMywgMjMyLCAxMDEsIDIyMiwgMjE4LCAyMjgsIDEwNiwgMjMwLCAxNjUsIDIxMSwgMjI5LCAyMTIsIDE1LCAKLSAgICAyNDUsIDE2MiwgMjQzLCAyMjYsIDIzMCwgMjI5LCAyMjYsIDE5NywgMjE0LCAxMzQsIDg3LCAyMzAsIDIyOSwgMjQ4LCAxNTcsIAotICAgIDg3LCA4LCAzLCAyMzUsIDE1OCwgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgMjEyLCAxNTEsIDIxMiwgCi0gICAgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIDczLCAyMTMsIDYyLCAKLSAgICAyMTMsIDUxLCAyNTEsIDcxLCAyMjYsIDE1NSwgNzgsIDI1MSwgMTk2LCAyMDksIDI1MywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIAotICAgIDIxOSwgMTAyLCAyNTAsIDczLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIAotICAgIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAKLSAgICAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgCi0gICAgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIAotICAgIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAKLSAgICAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgCi0gICAgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIAotICAgIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAKLSAgICAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgCi0gICAgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIAotICAgIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAKLSAgICAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgCi0gICAgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIAotICAgIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAKLSAgICAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIAotICAgIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIAotICAgIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIAotICAgIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIAotICAgIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIAotICAgIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIAotICAgIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIAotICAgIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIAotICAgIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIAotICAgIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIAotICAgIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAKLSAgICAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIDIxMiwgMjU0LCAyMTIsIDI1MywgCi0gICAgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAyMTIsIDI0NiwgMjEyLCAyNDUsIAotICAgIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgMjEyLCAyMzgsIDIxMiwgMjM3LCAKLSAgICAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIDIxMiwgMjMxLCAyMTIsIDIzMCwgCi0gICAgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAyMTIsIDIyMywgMjEyLCAyMjIsIAotICAgIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgMjEyLCAyMTUsIDIxMiwgMjE0LCAKLSAgICAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIDIxMiwgMjA4LCAyMTIsIDIwNiwgCi0gICAgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAyMTIsIDIwMCwgNywgNiwgMSwgMTE1LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIAotICAgIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIAotICAgIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgCi0gICAgODAsIDIsIDIxNiwgODksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgCi0gICAgNjcsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgCi0gICAgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAKLSAgICAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCA2NywgCi0gICAgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgCi0gICAgNTksIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNCwgMSwgMTYwLCAyLCA1OSwgCi0gICAgNzcsIDIyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNzcsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIAotICAgIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAyMzUsIDE0NSwgMiwgMTgyLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyMzMsIAotICAgIDE0OSwgMiwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTgyLCA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxODIsIDcsIDQsIAotICAgIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDE4MiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE4MiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE4MiwgCi0gICAgNywgNCwgMSwgMjU0LCAyNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIAotICAgIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjE1LCAKLSAgICA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjEsIDE5NiwgCi0gICAgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDUxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgCi0gICAgMTk2LCAyLCAxNDIsIDE0NiwgMSwgMjM0LCAxMDksIDM2LCAxMTYsIDIzNSwgMjMsIDM2LCAxMTYsIDIyOSwgNzksIDM2LCAKLSAgICAxMTYsIDI1MSwgNjYsIDM2LCAxMTYsIDIyNywgMTY3LCAzNiwgMTE2LCAyMTUsIDE1OSwgMzYsIDExNiwgMjI4LCAxMTEsIAotICAgIDM2LCAxMTYsIDIxNywgMTUyLCAzNiwgMTE2LCAyMzAsIDI1LCAzNiwgMTE2LCAyMjYsIDEwNSwgMzYsIDExNiwgMTkzLCAzNiwgCi0gICAgMTE2LCAyMTEsIDExNywgMzYsIDExNiwgMTUzLCAzNiwgMTE2LCAxNTYsIDM2LCAxMTYsIDIxNCwgMTA1LCAzNiwgMTE2LCAKLSAgICAyMzIsIDE3NiwgMzYsIDExNiwgMjMyLCAxODUsIDM2LCAxMTYsIDIyMiwgMTgwLCAzNiwgMTE2LCAyMjgsIDkzLCAzNiwgCi0gICAgMTE2LCAyMzUsIDE0NCwgMzYsIDExNiwgMjIwLCAxMDQsIDM2LCAxMTYsIDIxOCwgMjI2LCAzNiwgMTE2LCAyMjIsIDkxLCAKLSAgICAzNiwgMTE2LCAyNDIsIDYwLCAzNiwgMTE2LCAyMzMsIDIzMiwgMzYsIDMsIDIzNSwgMTAsIDM2LCAzLCAyMzQsIDkyLCAzNiwgCi0gICAgMywgMjM0LCA4MywgMzYsIDMsIDIzMywgMjE3LCAzNiwgMywgMjMzLCAxODgsIDM2LCAzLCAyMzQsIDE4MiwgMzYsIDMsIAotICAgIDIzNCwgMTgxLCAzNiwgMywgMjM0LCAyNDYsIDM2LCAzLCAyMzQsIDI4LCAzNiwgMywgMjM0LCAxMCwgMzYsIDMsIDIzNCwgCi0gICAgMTk1LCAzNiwgMywgMjI5LCA3NiwgMzYsIDMsIDIyOSwgMjcsIDM2LCAzLCAyMjksIDIzLCAzNiwgMywgMjI4LCAyNDgsIDM2LCAKLSAgICAzLCAyMjgsIDI0MSwgMzYsIDMsIDIyOSwgNjQsIDM2LCAzLCAyMjksIDYyLCAzNiwgMywgMjI5LCA3MywgMzYsIDMsIDIyOSwgCi0gICAgNCwgMzYsIDMsIDIyOCwgMjU1LCAzNiwgMywgMjI5LCA2NiwgMzYsIDMsIDI1MSwgMzIsIDM2LCAzLCAyNTAsIDUxLCAzNiwgCi0gICAgMywgMjUwLCA0MSwgMzYsIDMsIDI0OSwgMTEyLCAzNiwgMywgMjQ5LCA4MywgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUwLCAKLSAgICAxODIsIDM2LCAzLCAyNTEsIDIyLCAzNiwgMywgMjQ5LCAyMzgsIDM2LCAzLCAyNDksIDE3NCwgMzYsIDMsIDI1MCwgMjIyLCAKLSAgICAzNiwgMywgMjI3LCAxNjQsIDM2LCAzLCAyMjcsIDE0OCwgMzYsIDMsIDIyNywgMTQzLCAzNiwgMywgMjI3LCAxMjgsIDM2LCAKLSAgICAzLCAyMjcsIDEyMSwgMzYsIDMsIDIyNywgMTU2LCAzNiwgMywgMjI3LCAxNTUsIDM2LCAzLCAyMjcsIDE2MSwgMzYsIDMsIAotICAgIDIyNywgMTM0LCAzNiwgMywgMjI3LCAxMzIsIDM2LCAzLCAyMjcsIDE1OSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKLSAgICAxMzUsIDM2LCAzLCAyMTUsIDEzNCwgMzYsIDMsIDIxNSwgMTIzLCAzNiwgMywgMjE1LCAxMjAsIDM2LCAzLCAyMTUsIDE1MSwgCi0gICAgMzYsIDMsIDIxNSwgMTUwLCAzNiwgMywgMjE1LCAxNTQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTMyLCAzNiwgCi0gICAgMywgMjE1LCAxNTMsIDM2LCAzLCAyMjgsIDEwOSwgMzYsIDMsIDIyOCwgOTUsIDM2LCAzLCAyMjgsIDk0LCAzNiwgMywgMjI4LCAKLSAgICA3OCwgMzYsIDMsIDIyOCwgNzcsIDM2LCAzLCAyMjgsIDEwNSwgMzYsIDMsIDIyOCwgMTA0LCAzNiwgMywgMjI4LCAxMDgsIAotICAgIDM2LCAzLCAyMjgsIDgwLCAzNiwgMywgMjI4LCA3OSwgMzYsIDMsIDIyOCwgMTA3LCAzNiwgMywgMjE3LCAxMDEsIDM2LCAzLCAKLSAgICAyMTYsIDExNywgMzYsIDMsIDIxNiwgMTAzLCAzNiwgMywgMjE1LCAxMTgsIDM2LCAzLCAyMTUsIDg1LCAzNiwgMywgMjE3LCAKLSAgICAyMiwgMzYsIDMsIDIxNywgMTEsIDM2LCAzLCAyMTcsIDc5LCAzNiwgMywgMTExLCAzNiwgMywgMjE2LCAxNywgMzYsIDMsIAotICAgIDIxNywgNDEsIDM2LCAzLCAyMjksIDIyNSwgMzYsIDMsIDIyOCwgMjMzLCAzNiwgMywgMjI4LCAyMDgsIDM2LCAzLCAyMjcsIAotICAgIDIzNywgMzYsIDMsIDIyNywgMTc5LCAzNiwgMywgMjI5LCAxMDcsIDM2LCAzLCAyMjksIDEwMywgMzYsIDMsIDIyOSwgMjEyLCAKLSAgICAzNiwgMywgMjI4LCA3NCwgMzYsIDMsIDIyOCwgNjQsIDM2LCAzLCAyMjksIDE4NywgMzYsIDMsIDIyNiwgODksIDM2LCAzLCAKLSAgICAyMjUsIDEwOCwgMzYsIDMsIDIyNSwgNzEsIDM2LCAzLCAyMjQsIDE1MCwgMzYsIDMsIDIyNCwgMTE5LCAzNiwgMywgMjI1LCAKLSAgICAyMjEsIDM2LCAzLCAyMjUsIDIxMSwgMzYsIDMsIDIyNiwgNzEsIDM2LCAzLCAyMjUsIDE2LCAzNiwgMywgMjI0LCAyNDksIAotICAgIDM2LCAzLCAyMjUsIDIzNCwgMzYsIDMsIDIzMSwgMjM3LCAzNiwgMywgMjMwLCAyMzAsIDM2LCAzLCAyMzAsIDIwMSwgMzYsIAotICAgIDMsIDIzMCwgMTAyLCAzNiwgMywgMjMwLCA1NCwgMzYsIDMsIDIzMSwgOTEsIDM2LCAzLCAyMzEsIDgwLCAzNiwgMywgMjMxLCAKLSAgICAyMDMsIDM2LCAzLCAyMzAsIDE2MSwgMzYsIDMsIDIzMCwgMTMyLCAzNiwgMywgMjMxLCAxMzUsIDM2LCAzLCAyMTEsIDEwMywgCi0gICAgMzYsIDMsIDIxMSwgOCwgMzYsIDMsIDIxMCwgMjU1LCAzNiwgMywgMjEwLCAyMTIsIDM2LCAzLCAyMTAsIDE4MSwgMzYsIDMsIAotICAgIDIxMSwgNDcsIDM2LCAzLCAyMTEsIDQ0LCAzNiwgMywgMjExLCA4MiwgMzYsIDMsIDIxMCwgMjQ0LCAzNiwgMywgMjEwLCAKLSAgICAyMjksIDM2LCAzLCAyMTEsIDU1LCAzNiwgMywgMjIzLCAxODQsIDM2LCAzLCAyMjMsIDM1LCAzNiwgMywgMjIyLCAyMzksIAotICAgIDM2LCAzLCAyMjIsIDE0MCwgMzYsIDMsIDIyMiwgMTEyLCAzNiwgMywgMjIzLCAxMjgsIDM2LCAzLCAyMjMsIDEwOCwgMzYsIAotICAgIDMsIDIyMywgMTY2LCAzNiwgMywgMjIyLCAyMTEsIDM2LCAzLCAyMjIsIDE5NywgMzYsIDMsIDIyMywgMTM2LCAzNiwgMywgCi0gICAgMjMzLCAxMzQsIDM2LCAzLCAyMzIsIDI0MSwgMzYsIDMsIDIzMiwgMjI3LCAzNiwgMywgMjMyLCA5OCwgMzYsIDMsIDIzMiwgCi0gICAgNzMsIDM2LCAzLCAyMzMsIDU4LCAzNiwgMywgMjMzLCA1MCwgMzYsIDMsIDIzMywgMTA5LCAzNiwgMywgMjMyLCAxNTYsIDM2LCAKLSAgICAzLCAyMzIsIDEyNywgMzYsIDMsIDIzMywgNzQsIDM2LCAzLCAyMTQsIDI2LCAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIAotICAgIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAKLSAgICAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAKLSAgICAyMzIsIDE3NCwgMzYsIDMsIDIzMiwgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE2NSwgMzYsIDMsIDIzMiwgCi0gICAgMTY0LCAzNiwgMywgMjMyLCAxNzEsIDM2LCAzLCAyMzIsIDE3MCwgMzYsIDMsIDIzMiwgMTczLCAzNiwgMywgMjMyLCAxNjcsIAotICAgIDM2LCAzLCAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTcyLCAzNiwgMywgMjMyLCAxODMsIDM2LCAzLCAyMzIsIDE3OCwgMzYsIAotICAgIDMsIDIzMiwgMTc3LCAzNiwgMywgMjMyLCAxNjEsIDM2LCAzLCAyMzIsIDE2MCwgMzYsIDMsIDIzMiwgMTgwLCAzNiwgMywgCi0gICAgMjMyLCAxNzksIDM2LCAzLCAyMzIsIDE4MiwgMzYsIDMsIDIzMiwgMTYzLCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIAotICAgIDE4MSwgMzYsIDMsIDIyMiwgMTc4LCAzNiwgMywgMjIyLCAxNjcsIDM2LCAzLCAyMjIsIDE2NiwgMzYsIDMsIDIyMiwgMTYwLCAKLSAgICAzNiwgMywgMjIyLCAxNTMsIDM2LCAzLCAyMjIsIDE3NCwgMzYsIDMsIDIyMiwgMTczLCAzNiwgMywgMjIyLCAxNzcsIDM2LCAKLSAgICAzLCAyMjIsIDE2NSwgMzYsIDMsIDIyMiwgMTY0LCAzNiwgMywgMjIyLCAxNzYsIDM2LCAzLCAyMjgsIDkxLCAzNiwgMywgCi0gICAgMjI4LCA4NiwgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDgyLCAzNiwgMywgMjI4LCA4MSwgMzYsIDMsIDIyOCwgODgsIAotICAgIDM2LCAzLCAyMjgsIDg3LCAzNiwgMywgMjI4LCA5MCwgMzYsIDMsIDIyOCwgODQsIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgCi0gICAgMjI4LCA4OSwgMzYsIDMsIDIzNSwgMTQwLCAzNiwgMywgMjM1LCAxMDgsIDM2LCAzLCAyMzUsIDEwMSwgMzYsIDMsIDIzNSwgCi0gICAgNTEsIDM2LCAzLCAyMzUsIDMzLCAzNiwgMywgMjM1LCAxMjYsIDM2LCAzLCAyMzUsIDEyNCwgMzYsIDMsIDIzNSwgMTM1LCAKLSAgICAzNiwgMywgMjM1LCA2OCwgMzYsIDMsIDIzNSwgNTksIDM2LCAzLCAyMzUsIDEyOSwgMzYsIDMsIDIyMCwgOTgsIDM2LCAzLCAKLSAgICAyMjAsIDMyLCAzNiwgMywgMjIwLCAyNywgMzYsIDMsIDIxOSwgMjI1LCAzNiwgMywgMjE5LCAyMTAsIDM2LCAzLCAyMjAsIAotICAgIDYzLCAzNiwgMywgMjIwLCA2MSwgMzYsIDMsIDIyMCwgOTAsIDM2LCAzLCAyMjAsIDcsIDM2LCAzLCAyMjAsIDEsIDM2LCAzLCAKLSAgICAyMjAsIDcxLCAzNiwgMywgMjE4LCAyMjIsIDM2LCAzLCAyMTgsIDE5MiwgMzYsIDMsIDIxOCwgMTg4LCAzNiwgMywgMjE4LCAKLSAgICAxNzksIDM2LCAzLCAyMTgsIDE3NiwgMzYsIDMsIDIxOCwgMTk3LCAzNiwgMywgMjE4LCAxOTYsIDM2LCAzLCAyMTgsIDIyMSwgCi0gICAgMzYsIDMsIDIxOCwgMTg0LCAzNiwgMywgMjE4LCAxODMsIDM2LCAzLCAyMTgsIDE5OSwgMzYsIDMsIDIyMiwgMzEsIDM2LCAzLCAKLSAgICAyMTksIDE5MSwgMzYsIDMsIDIxOSwgMTc1LCAzNiwgMywgMjE4LCA4MywgMzYsIDMsIDIxOCwgNCwgMzYsIDMsIDIyMSwgCi0gICAgMTgxLCAzNiwgMywgMjIxLCAxNzAsIDM2LCAzLCAyMjIsIDE3LCAzNiwgMywgMjE5LCA1OCwgMzYsIDMsIDIxOSwgNDAsIDM2LCAKLSAgICAzLCAyMjEsIDIxOSwgMzYsIDMsIDI0MiwgNDYsIDM2LCAzLCAyNDEsIDE4MCwgMzYsIDMsIDI0MSwgMTYxLCAzNiwgMywgCi0gICAgMjQwLCAyMjIsIDM2LCAzLCAyNDAsIDIwMiwgMzYsIDMsIDI0MSwgMjM4LCAzNiwgMywgMjQxLCAyMjAsIDM2LCAzLCAyNDIsIAotICAgIDM2LCAzNiwgMywgMjQxLCA2OCwgMzYsIDMsIDI0MSwgNTMsIDM2LCAzLCAyNDEsIDI0NiwgMzYsIDMsIDIzMywgMjMxLCAzNiwgCi0gICAgMywgMjMzLCAyMzAsIDM2LCAzLCAyMzMsIDIyNSwgMzYsIDMsIDIzMywgMjI0LCAzNiwgMywgMjMzLCAyMjEsIDM2LCAzLCAKLSAgICAyMzMsIDIyMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgCi0gICAgMjIzLCAzNiwgMywgMjMzLCAyMjIsIDM2LCAzLCAyMzMsIDIyOCwgMzYsIDMsIDIxOSwgMjMxLCAxNzUsIDExNiwgNSwgMjExLCAKLSAgICA2OCwgMTc1LCAxMTYsIDUsIDIyMywgMTU1LCAxNzUsIDExNiwgNSwgMjIzLCA3OCwgOTgsIDEsIDIxNSwgMjgsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAxNzYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzQsIDEzMiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIAotICAgIDIzNCwgMjgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzQsIDEwNSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOSwgNCwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MSwgMzMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDE1NywgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDI0OSwgMjM4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUwLCA4NiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNywgMTM0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ4LCAyMjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIAotICAgIDE0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI0NywgMTQ1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE1LCAxMzksIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAxOTcsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTcsIDEwNSwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIxNiwgMjA4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMTExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE2LCAxNTYsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjgsIDc0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUyLCAxOTEsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAyMjUsIDE0NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyNSwgMTYsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMjUsIDEyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMCwgMTYxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjEwLCAKLSAgICAyNDQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjIsIDIxMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMiwgMTU2LCA2OSwgCi0gICAgMTE2LCA1LCAyNDksIDIzMywgMjEzLCAxMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjAsIDEwMiwgNjksIDExNiwgNSwgCi0gICAgMjQ5LCAyMzMsIDIxOCwgMjIzLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjA2LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMTYyLCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMzLCAxMzUsIDY5LCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgODgsIDY5LCAyMzUsIAotICAgIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjQsIDMwLCA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjIyLCAxMDAsIAotICAgIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgCi0gICAgMjI0LCA2OSwgNjksIDI1LCA1LCAyMjYsIDIwNCwgNjksIDI1LCA1LCAyNTUsIDM0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIAotICAgIDc3LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDI3LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjgsIDI0OCwgMTQxLCAxLCAyNTEsIAotICAgIDI1NSwgMjI5LCA2NCwgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNzcsIDU2LCAxLCAKLSAgICAyNTEsIDI1NSwgMjI5LCAyNywgNTYsIDEsIDI1MSwgMjU1LCAyMjgsIDI0OCwgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDY0LCAKLSAgICA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNCwgNTYsIDEsIDI1NCwgMTk0LCAyNTAsIDE5MCwgNTYsIDEsIDI1NCwgMTk0LCAyMTUsIAotICAgIDExOCwgNTYsIDEsIDI1NCwgMTk0LCAxMTEsIDU2LCAxLCAyNTQsIDE5NCwgMjI2LCAxMDUsIDU4LCAxLCAyNDUsIDIwLCAKLSAgICAyNDUsIDE5LCAyNDksIDE4MiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDUsIDIwLCAyNDksIDE4MiwgMTM4LCAxMzAsIAorICAgIDQ1LCAxMDgsIDE2LCAzMSwgMjI1LCAxMjgsIDIxOCwgNDUsIDEwOCwgMTYsIDMxLCA4NSwgMjE4LCA0NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgNjAsIDIxOCwgNzIsIDEwOCwgMTYsIDMxLCAyMzEsIDYwLCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCAKKyAgICA2MCwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDI1MCwgNDYsIDEwOCwgMTYsIDMxLCAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjgsIAorICAgIDE5MywgMTA4LCAxNiwgMzEsIDIxMywgMTQxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDAsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgCisgICAgMjIyLCAzLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDYsIDIyMiwgMiwgMTA4LCAxNiwgMzEsIDI0MiwgMTczLCAxMDgsIDE2LCAKKyAgICAzMSwgMjE5LCAxNjgsIDEwOCwgMTYsIDMxLCAyMzUsIDE4NCwgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMzUsIDE4NCwgCisgICAgMjI2LCAxNTYsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAKKyAgICAyMzUsIDE4MywgMTA4LCAxNiwgMzEsIDI0OSwgMTc2LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTgyLCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIxOCwgNzMsIDY0LCAyNDksIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAKKyAgICAxNzUsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDI0OSwgMTc0LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDI1NCwgOTEsIAorICAgIDEwOCwgMTYsIDMxLCAyMjIsIDQsIDY0LCAyNDksIDE3NiwgMjU0LCA5MSwgMTA4LCAxNiwgMzEsIDIxOCwgNzMsIDY0LCAKKyAgICAyMjIsIDQsIDY0LCAyNDksIDE3NSwgMTA4LCAxNiwgMzEsIDIxMywgMjQzLCAxMDgsIDE2LCAzMSwgMjE2LCA4NSwgMjI2LCAKKyAgICAxNTcsIDEwOCwgMTYsIDMxLCAyMzMsIDYzLCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgOTAsIDIyNiwgMTU3LCAxMDgsIAorICAgIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMjIsIDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAKKyAgICAzMSwgMjE4LCA3MywgNjQsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMTMsIDE1OCwgNjQsIDI1NCwgODksIAorICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIDI1NCwgODgsIAorICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMywgMTA4LCAxNiwgMzEsIDIyMywgMTAyLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDEwOCwgCisgICAgMTYsIDMxLCAyMjMsIDEwMCwgMTA4LCAxNiwgMzEsIDI1NCwgMTY2LCAxMDgsIDE2LCAzMSwgMjU0LCAxNjUsIDEwOCwgMTYsIAorICAgIDMxLCAyMzEsIDE2OCwgMTA4LCAxNiwgMzEsIDIyMiwgOSwgMTA4LCAxNiwgMzEsIDI1MywgMjU0LCAxMDgsIDE2LCAzMSwgCisgICAgMjIzLCAxMjgsIDEwOCwgMTYsIDMxLCAyMjMsIDEyNywgMTA4LCAxNiwgMzEsIDI1MywgMTkxLCAxMDgsIDE2LCAzMSwgMjUxLCAKKyAgICAyMzcsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjE3LCA1MCwgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAKKyAgICAyMjQsIDExLCAyMzIsIDIyOCwgMTA4LCAxNiwgMzEsIDI1MSwgMTkxLCAxMDgsIDE2LCAzMSwgMjUxLCAxOTAsIDEwOCwgMTYsIAorICAgIDMxLCAyNTEsIDE4OSwgMTA4LCAxNiwgMzEsIDI1NCwgMTQ2LCAxMDgsIDE2LCAzMSwgMjI2LCAyMjIsIDEwOCwgMTYsIDMxLCAKKyAgICAyMTgsIDI1MCwgMTA4LCAxNiwgMzEsIDIxNiwgODMsIDEwOCwgMTYsIDMxLCAyNDIsIDEwMywgMTA4LCAxNiwgMzEsIDIxMiwgCisgICAgMjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIyOSwgMTA4LCAxNiwgMzEsIDI1MSwgMjIsIDEwOCwgMTYsIDMxLCAyMTUsIDg2LCAKKyAgICAxMDgsIDE2LCAzMSwgMjUwLCAyNTQsIDIzMCwgMTI3LCAxMDgsIDE2LCAzMSwgMjIxLCAyMDQsIDY0LCAyMzUsIDYxLCAxMDgsIAorICAgIDE2LCAzMSwgMjUxLCAzMywgMTA4LCAxNiwgMzEsIDIxNSwgMjIwLCAxMDgsIDE2LCAzMSwgMjE4LCAxNTYsIDIxNSwgMjIwLCAKKyAgICAxMDgsIDE2LCAzMSwgMjMyLCAxNTQsIDEwOCwgMTYsIDMxLCAyMTksIDU4LCAxMDgsIDE2LCAzMSwgMjE0LCAxNDIsIDEwOCwgCisgICAgMTYsIDMxLCAyNDAsIDI1MywgMjQ2LCA3MiwgMTA4LCAxNiwgMzEsIDI1MywgMjM1LCAxMDgsIDE2LCAzMSwgMjI0LCAyMzcsIAorICAgIDI1MywgMjM1LCAxMDgsIDE2LCAzMSwgMjUxLCAxNTAsIDEwOCwgMTYsIDMxLCAyMjQsIDIyOCwgMjUxLCAxNTAsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDE0MywgMTA4LCAxNiwgMzEsIDIxOCwgMTE5LCAyMTgsIDI3LCAyMTgsIDExOCwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMTE5LCAyMTgsIDI3LCAyMTgsIDExNywgMTA4LCAxNiwgMzEsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyMjQsIDIwMywgCisgICAgMTA4LCAxNiwgMzEsIDI0NywgMTg5LCAxMDgsIDE2LCAzMSwgMjQ3LCAxOTEsIDEwOCwgMTYsIDMxLCAyNDcsIDE5MCwgMTA4LCAKKyAgICAxNiwgMzEsIDIyNCwgMTM0LCAxMDgsIDE2LCAzMSwgMjI0LCAxMjMsIDEwOCwgMTYsIDMxLCAyNDksIDEzMCwgMTA4LCAxNiwgCisgICAgMzEsIDI0OSwgMTI5LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjgsIDEwOCwgMTYsIDMxLCAyNDksIDEyNywgMTA4LCAxNiwgMzEsIAorICAgIDI0OSwgMTI2LCAxMDgsIDE2LCAzMSwgMjU0LCAxNzgsIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIzMSwgMTU0LCAKKyAgICAxMDgsIDE2LCAzMSwgMjUyLCAxMjcsIDY0LCAyMTQsIDE3LCAxMDgsIDE2LCAzMSwgMjIzLCA2MCwgMTA4LCAxNiwgMzEsIAorICAgIDI0MCwgMjQ1LCAxMDgsIDE2LCAzMSwgMjI4LCAyMTcsIDEwOCwgMTYsIDMxLCAyNDgsIDE1MywgMTA4LCAxNiwgMzEsIDIzMCwgCisgICAgMTM5LCAxMDgsIDE2LCAzMSwgMTYzLCAyNDYsIDEwMiwgMTA4LCAxNiwgMzEsIDE2MywgMjI2LCAxMzYsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDksIDEwLCAxNCwgMjQwLCAxMDgsIDEwLCAxNCwgMjQwLCAxMDcsIDEwLCAxNCwgMjQwLCAxMDYsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDUsIDEwLCAxNCwgMjQwLCAxMDQsIDEwLCAxNCwgMjQwLCAxMDMsIDEwLCAxNCwgMjQwLCAxMDIsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDEsIDEwLCAxNCwgMjQwLCAxMDAsIDEwLCAxNCwgMjQwLCA5OSwgMTAsIDE0LCAyNDAsIDk4LCAxMCwgMTQsIDI0MCwgOTcsIAorICAgIDEwLCAxNCwgMjQwLCA5NiwgMTAsIDE0LCAyNDAsIDk1LCAxMCwgMTQsIDI0MCwgOTQsIDEwLCAxNCwgMjQwLCA5MywgMTAsIAorICAgIDE0LCAyNDAsIDkyLCAxMCwgMTQsIDI0MCwgOTEsIDEwLCAxNCwgMjQwLCA5MCwgMTAsIDE0LCAyNDAsIDg5LCAxMCwgMTQsIAorICAgIDI0MCwgODgsIDEwLCAxNCwgMjQwLCA4NywgMTAsIDE0LCAyNDAsIDg2LCAxMCwgMTQsIDI0MCwgODUsIDEwLCAxNCwgMjQwLCAKKyAgICA4NCwgMTAsIDE0LCAyNDAsIDgzLCAxMCwgMTQsIDI0MCwgODIsIDEwLCAxNCwgMjQwLCA4MSwgMTAsIDE0LCAyNDAsIDgwLCAKKyAgICAxMCwgMTQsIDI0MCwgNzksIDEwLCAxNCwgMjQwLCA3OCwgMTAsIDE0LCAyNDAsIDc3LCAxMCwgMTQsIDI0MCwgNzYsIDEwLCAKKyAgICAxNCwgMjQwLCA3NSwgMTAsIDE0LCAyNDAsIDc0LCAxMCwgMTQsIDI0MCwgNzMsIDEwLCAxNCwgMjQwLCA3MiwgMTAsIDE0LCAKKyAgICAyNDAsIDcxLCAxMCwgMTQsIDI0MCwgNzAsIDEwLCAxNCwgMjQwLCA2OSwgMTAsIDE0LCAyNDAsIDY4LCAxMCwgMTQsIDI0MCwgCisgICAgNjcsIDEwLCAxNCwgMjQwLCA2NiwgMTAsIDE0LCAyNDAsIDY1LCAxMCwgMTQsIDI0MCwgNjQsIDEwLCAxNCwgMjQwLCA2MywgCisgICAgMTAsIDE0LCAyNDAsIDYyLCAxMCwgMTQsIDI0MCwgNjEsIDEwLCAxNCwgMjQwLCA2MCwgMTAsIDE0LCAyNDAsIDU5LCAxMCwgCisgICAgMTQsIDI0MCwgNTgsIDEwLCAxNCwgMjQwLCA1NywgMTAsIDE0LCAyNDAsIDU2LCAxMCwgMTQsIDI0MCwgNTUsIDEwLCAxNCwgCisgICAgMjQwLCA1NCwgMTAsIDE0LCAyNDAsIDUzLCAxMCwgMTQsIDI0MCwgNTIsIDEwLCAxNCwgMjQwLCA1MSwgMTAsIDE0LCAyNDAsIAorICAgIDUwLCAxMCwgMTQsIDI0MCwgNDksIDEwLCAxNCwgMjQwLCA0OCwgMTAsIDE0LCAyNDAsIDQ3LCAxMCwgMTQsIDI0MCwgNDYsIAorICAgIDEwLCAxNCwgMjQwLCA0NSwgMTAsIDE0LCAyNDAsIDQ0LCAxMCwgMTQsIDI0MCwgNDMsIDEwLCAxNCwgMjQwLCA0MiwgMTAsIAorICAgIDE0LCAyNDAsIDQxLCAxMCwgMTQsIDI0MCwgNDAsIDEwLCAxNCwgMjQwLCAzOSwgMTAsIDE0LCAyNDAsIDM4LCAxMCwgMTQsIAorICAgIDI0MCwgMzcsIDEwLCAxNCwgMjQwLCAzNiwgMTAsIDE0LCAyNDAsIDM1LCAxMCwgMTQsIDI0MCwgMzQsIDEwLCAxNCwgMjQwLCAKKyAgICAzMywgMTAsIDE0LCAyNDAsIDMyLCAxMCwgMTQsIDI0MCwgMzEsIDEwLCAxNCwgMjQwLCAzMCwgMTAsIDE0LCAyNDAsIDI5LCAKKyAgICAxMCwgMTQsIDI0MCwgMjgsIDEwLCAxNCwgMjQwLCAyNywgMTAsIDE0LCAyNDAsIDI2LCAxMCwgMTQsIDI0MCwgMjUsIDEwLCAKKyAgICAxNCwgMjQwLCAyNCwgMTAsIDE0LCAyNDAsIDIzLCAxMCwgMTQsIDI0MCwgMjIsIDEwLCAxNCwgMjQwLCAyMSwgMTAsIDE0LCAKKyAgICAyNDAsIDIwLCAxMCwgMTQsIDI0MCwgMTksIDEwLCAxNCwgMjQwLCAxOCwgMTAsIDE0LCAyNDAsIDE3LCAxMCwgMTQsIDI0MCwgCisgICAgMTYsIDEwLCAxNCwgMjQwLCAxNSwgMTAsIDE0LCAyNDAsIDE0LCAxMCwgMTQsIDI0MCwgMTMsIDEwLCAxNCwgMjQwLCAxMiwgCisgICAgMTAsIDE0LCAyNDAsIDExLCAxMCwgMTQsIDI0MCwgMTAsIDEwLCAxNCwgMjQwLCA5LCAxMCwgMTQsIDI0MCwgOCwgMTAsIDE0LCAKKyAgICAyNDAsIDcsIDEwLCAxNCwgMjQwLCA2LCAxMCwgMTQsIDI0MCwgNSwgMTAsIDE0LCAyNDAsIDQsIDEwLCAxNCwgMjQwLCAzLCAKKyAgICAxMCwgMTQsIDI0MCwgMiwgMTAsIDE0LCAyNDAsIDEsIDEwLCAxNCwgMjQwLCAwLCAxMCwgMTQsIDIzOSwgMjU1LCAxMCwgMTQsIAorICAgIDIzOSwgMjU0LCAxMCwgMTQsIDIzOSwgMjUzLCAxMCwgMTQsIDIzOSwgMjUyLCAxMCwgMTQsIDIzOSwgMjUxLCAxMCwgMTQsIAorICAgIDIzOSwgMjUwLCAxMCwgMTQsIDIzOSwgMjQ5LCAxMCwgMTQsIDIzOSwgMjQ4LCAxMCwgMTQsIDIzOSwgMjQ3LCAxMCwgMTQsIAorICAgIDIzOSwgMjQ2LCAxMCwgMTQsIDIzOSwgMjQ1LCAxMCwgMTQsIDIzOSwgMjQ0LCAxMCwgMTQsIDIzOSwgMjQzLCAxMCwgMTQsIAorICAgIDIzOSwgMjQyLCAxMCwgMTQsIDIzOSwgMjQxLCAxMCwgMTQsIDIzOSwgMjQwLCAxMCwgMTQsIDIzOSwgMjM5LCAxMCwgMTQsIAorICAgIDIzOSwgMjM4LCAxMCwgMTQsIDIzOSwgMjM3LCAxMCwgMTQsIDIzOSwgMjM2LCAxMCwgMTQsIDIzOSwgMjM1LCAxMCwgMTQsIAorICAgIDIzOSwgMjM0LCAxMCwgMTQsIDIzOSwgMjMzLCAxMCwgMTQsIDIzOSwgMjMyLCAxMCwgMTQsIDIzOSwgMjMxLCAxMCwgMTQsIAorICAgIDIzOSwgMjMwLCAxMCwgMTQsIDIzOSwgMjI5LCAxMCwgMTQsIDIzOSwgMjI4LCAxMCwgMTQsIDIzOSwgMjI3LCAxMCwgMTQsIAorICAgIDIzOSwgMjI2LCAxMCwgMTQsIDIzOSwgMjI1LCAxMCwgMTQsIDIzOSwgMjI0LCAxMCwgMTQsIDIzOSwgMjIzLCAxMCwgMTQsIAorICAgIDIzOSwgMjIyLCAxMCwgMTQsIDIzOSwgMjIxLCAxMCwgMTQsIDIzOSwgMjIwLCAxMCwgMTQsIDIzOSwgMjE5LCAxMCwgMTQsIAorICAgIDIzOSwgMjE4LCAxMCwgMTQsIDIzOSwgMjE3LCAxMCwgMTQsIDIzOSwgMjE2LCAxMCwgMTQsIDIzOSwgMjE1LCAxMCwgMTQsIAorICAgIDIzOSwgMjE0LCAxMCwgMTQsIDIzOSwgMjEzLCAxMCwgMTQsIDIzOSwgMjEyLCAxMCwgMTQsIDIzOSwgMjExLCAxMCwgMTQsIAorICAgIDIzOSwgMjEwLCAxMCwgMTQsIDIzOSwgMjA5LCAxMCwgMTQsIDIzOSwgMjA4LCAxMCwgMTQsIDIzOSwgMjA3LCAxMCwgMTQsIAorICAgIDIzOSwgMjA2LCAxMCwgMTQsIDIzOSwgMjA1LCAxMCwgMTQsIDIzOSwgMjA0LCAxMCwgMTQsIDIzOSwgMjAzLCAxMCwgMTQsIAorICAgIDIzOSwgMjAyLCAxMCwgMTQsIDIzOSwgMjAxLCAxMCwgMTQsIDIzOSwgMjAwLCAxMCwgMTQsIDIzOSwgMTk5LCAxMCwgMTQsIAorICAgIDIzOSwgMTk4LCAxMCwgMTQsIDIzOSwgMTk3LCAxMCwgMTQsIDIzOSwgMTk2LCAxMCwgMTQsIDIzOSwgMTk1LCAxMCwgMTQsIAorICAgIDIzOSwgMTk0LCAxMCwgMTQsIDIzOSwgMTkzLCAxMCwgMTQsIDIzOSwgMTkyLCAxMCwgMTQsIDIzOSwgMTkxLCAxMCwgMTQsIAorICAgIDIzOSwgMTkwLCAxMCwgMTQsIDIzOSwgMTg5LCAxMCwgMTQsIDIzOSwgMTg4LCAxMCwgMTQsIDIzOSwgMTg3LCAxMCwgMTQsIAorICAgIDIzOSwgMTg2LCAxMCwgMTQsIDIzOSwgMTg1LCAxMCwgMTQsIDIzOSwgMTg0LCAxMCwgMTQsIDIzOSwgMTgzLCAxMCwgMTQsIAorICAgIDIzOSwgMTgyLCAxMCwgMTQsIDIzOSwgMTgxLCAxMCwgMTQsIDIzOSwgMTgwLCAxMCwgMTQsIDIzOSwgMTc5LCAxMCwgMTQsIAorICAgIDIzOSwgMTc4LCAxMCwgMTQsIDIzOSwgMTc3LCAxMCwgMTQsIDIzOSwgMTc2LCAxMCwgMTQsIDIzOSwgMTc1LCAxMCwgMTQsIAorICAgIDIzOSwgMTc0LCAxMCwgMTQsIDIzOSwgMTczLCAxMCwgMTQsIDIzOSwgMTcyLCAxMCwgMTQsIDIzOSwgMTcxLCAxMCwgMTQsIAorICAgIDIzOSwgMTcwLCAxMCwgMTQsIDIzOSwgMTY5LCAxMCwgMTQsIDIzOSwgMTY4LCAxMCwgMTQsIDIzOSwgMTY3LCAxMCwgMTQsIAorICAgIDIzOSwgMTY2LCAxMCwgMTQsIDIzOSwgMTY1LCAxMCwgMTQsIDIzOSwgMTY0LCAxMCwgMTQsIDIzOSwgMTYzLCAxMCwgMTQsIAorICAgIDIzOSwgMTYyLCAxMCwgMTQsIDIzOSwgMTYxLCAxMCwgMTQsIDIzOSwgMTYwLCAxMCwgMTQsIDIzOSwgMTU5LCAxMCwgMTQsIAorICAgIDIzOSwgMTU4LCAxMCwgMTQsIDIzOSwgMTU3LCAxMCwgMTQsIDIzOSwgMTU2LCAxMCwgMTQsIDIzOSwgMTU1LCAxMCwgMTQsIAorICAgIDIzOSwgMTU0LCAxMCwgMTQsIDIzOSwgMTUzLCAxMCwgMTQsIDIzOSwgMTUyLCAxMCwgMTQsIDIzOSwgMTUxLCAxMCwgMTQsIAorICAgIDIzOSwgMTUwLCAxMCwgMTQsIDIzOSwgMTQ5LCAxMCwgMTQsIDIzOSwgMTQ4LCAxMCwgMTQsIDIzOSwgMTQ3LCAxMCwgMTQsIAorICAgIDIzOSwgMTQ2LCAxMCwgMTQsIDIzOSwgMTQ1LCAxMCwgMTQsIDIzOSwgMTQ0LCAxMCwgMTQsIDIzOSwgMTQzLCAxMCwgMTQsIAorICAgIDIzOSwgMTQyLCAxMCwgMTQsIDIzOSwgMTQxLCAxMCwgMTQsIDIzOSwgMTQwLCAxMCwgMTQsIDIzOSwgMTM5LCAxMCwgMTQsIAorICAgIDIzOSwgMTM4LCAxMCwgMTQsIDIzOSwgMTM3LCAxMCwgMTQsIDIzOSwgMTM2LCAxMCwgMTQsIDIzOSwgMTM1LCAxMCwgMTQsIAorICAgIDIzOSwgMTM0LCAxMCwgMTQsIDIzOSwgMTMzLCAxMCwgMTQsIDIzOSwgMTMyLCAxMCwgMTQsIDIzOSwgMTMxLCAxMCwgMTQsIAorICAgIDIzOSwgMTMwLCAxMCwgMTQsIDIzOSwgMTI5LCAxMCwgMTQsIDIzOSwgMTI4LCAxMCwgMTQsIDIzOSwgMTI3LCAxMCwgMTQsIAorICAgIDIzOSwgMTI2LCAxMCwgMTQsIDIzOSwgMTI1LCAxMCwgMTQsIDIzOSwgMTI0LCAxMCwgMTQsIDIzOSwgMTIzLCAxMCwgMTQsIAorICAgIDIzOSwgMTIyLCAxMCwgMTQsIDIzOSwgMTIxLCAxMCwgMTQsIDIzOSwgMTIwLCAxMCwgMTQsIDIzOSwgMTE5LCAxMCwgMTQsIAorICAgIDIzOSwgMTE4LCAxMCwgMTQsIDIzOSwgMTE3LCAxMCwgMTQsIDIzOSwgMTE2LCAxMCwgMTQsIDIzOSwgMTE1LCAxMCwgMTQsIAorICAgIDIzOSwgMTE0LCAxMCwgMTQsIDIzOSwgMTEzLCAxMCwgMTQsIDIzOSwgMTEyLCAxMCwgMTQsIDIzOSwgMTExLCAxMCwgMTQsIAorICAgIDIzOSwgMTEwLCAxMCwgMTQsIDIzOSwgMTA5LCAxMCwgMTQsIDIzOSwgMTA4LCAxMCwgMTQsIDIzOSwgMTA3LCAxMCwgMTQsIAorICAgIDIzOSwgMTA2LCAxMCwgMTQsIDIzOSwgMTA1LCAxMCwgMTQsIDIzOSwgMTA0LCAxMCwgMTQsIDIzOSwgMTAzLCAxMCwgMTQsIAorICAgIDIzOSwgMTAyLCAxMCwgMTQsIDIzOSwgMTAxLCAxMCwgMTQsIDIzOSwgMTAwLCAxMCwgMTQsIDIzOSwgOTksIDEwLCAxNCwgCisgICAgMjM5LCA5OCwgMTAsIDE0LCAyMzksIDk3LCAxMCwgMTQsIDIzOSwgOTYsIDEwLCAxNCwgMjM5LCA5NSwgMTAsIDE0LCAyMzksIAorICAgIDk0LCAxMCwgMTQsIDIzOSwgOTMsIDEwLCAxNCwgMjM5LCA5MiwgMTAsIDE0LCAyMzksIDkxLCAxMCwgMTQsIDIzOSwgOTAsIAorICAgIDEwLCAxNCwgMjM5LCA4OSwgMTAsIDE0LCAyMzksIDg4LCAxMCwgMTQsIDIzOSwgODcsIDEwLCAxNCwgMjM5LCA4NiwgMTAsIAorICAgIDE0LCAyMzksIDg1LCAxMCwgMTQsIDIzOSwgODQsIDEwLCAxNCwgMjM5LCA4MywgMTAsIDE0LCAyMzksIDgyLCAxMCwgMTQsIAorICAgIDIzOSwgODEsIDEwLCAxNCwgMjM5LCA4MCwgMTAsIDE0LCAyMzksIDc5LCAxMCwgMTQsIDIzOSwgNzgsIDEwLCAxNCwgMjM5LCAKKyAgICA3NywgMTAsIDE0LCAyMzksIDc2LCAxMCwgMTQsIDIzOSwgNzUsIDEwLCAxNCwgMjM5LCA3NCwgMTAsIDE0LCAyMzksIDczLCAKKyAgICAxMCwgMTQsIDIzOSwgNzIsIDEwLCAxNCwgMjM5LCA3MSwgMTAsIDE0LCAyMzksIDcwLCAxMCwgMTQsIDIzOSwgNjksIDEwLCAKKyAgICAxNCwgMjM5LCA2OCwgMTAsIDE0LCAyMzksIDY3LCAxMCwgMTQsIDIzOSwgNjYsIDEwLCAxNCwgMjM5LCA2NSwgMTAsIDE0LCAKKyAgICAyMzksIDY0LCAxMCwgMTQsIDIzOSwgNjMsIDEwLCAxNCwgMjM5LCA2MiwgMTAsIDE0LCAyMzksIDYxLCAxMCwgMTQsIDIzOSwgCisgICAgNjAsIDEwLCAxNCwgMjM5LCA1OSwgMTAsIDE0LCAyMzksIDU4LCAxMCwgMTQsIDIzOSwgNTcsIDEwLCAxNCwgMjM5LCA1NiwgCisgICAgMTAsIDE0LCAyMzksIDU1LCAxMCwgMTQsIDIzOSwgNTQsIDEwLCAxNCwgMjM5LCA1MywgMTAsIDE0LCAyMzksIDUyLCAxMCwgCisgICAgMTQsIDIzOSwgNTEsIDEwLCAxNCwgMjM5LCA1MCwgMTAsIDE0LCAyMzksIDQ5LCAxMCwgMTQsIDIzOSwgNDgsIDEwLCAxNCwgCisgICAgMjM5LCA0NywgMTAsIDE0LCAyMzksIDQ2LCAxMCwgMTQsIDIzOSwgNDUsIDEwLCAxNCwgMjM5LCA0NCwgMTAsIDE0LCAyMzksIAorICAgIDQzLCAxMCwgMTQsIDIzOSwgNDIsIDEwLCAxNCwgMjM5LCA0MSwgMTAsIDE0LCAyMzksIDQwLCAxMCwgMTQsIDIzOSwgMzksIAorICAgIDEwLCAxNCwgMjM5LCAzOCwgMTAsIDE0LCAyMzksIDM3LCAxMCwgMTQsIDIzOSwgMzYsIDEwLCAxNCwgMjM5LCAzNSwgMTAsIAorICAgIDE0LCAyMzksIDM0LCAxMCwgMTQsIDIzOSwgMzMsIDEwLCAxNCwgMjM5LCAzMiwgMTAsIDE0LCAyMzksIDMxLCAxMCwgMTQsIAorICAgIDIzOSwgMzAsIDEwLCAxNCwgMjM5LCAyOSwgMTAsIDE0LCAyMzksIDI4LCAxMCwgMTQsIDIzOSwgMjcsIDEwLCAxNCwgMjM5LCAKKyAgICAyNiwgMTAsIDE0LCAyMzksIDI1LCAxMCwgMTQsIDIzOSwgMjQsIDEwLCAxNCwgMjM5LCAyMywgMTAsIDE0LCAyMzksIDIyLCAKKyAgICAxMCwgMTQsIDIzOSwgMjEsIDEwLCAxNCwgMjM5LCAyMCwgMTAsIDE0LCAyMzksIDE5LCAxMCwgMTQsIDIzOSwgMTgsIDEwLCAKKyAgICAxNCwgMjM5LCAxNywgMTAsIDE0LCAyMzksIDE2LCAxMCwgMTQsIDIzOSwgMTUsIDEwLCAxNCwgMjM5LCAxNCwgMTAsIDE0LCAKKyAgICAyMzksIDEzLCAxMCwgMTQsIDIzOSwgMTIsIDEwLCAxNCwgMjM5LCAxMSwgMTAsIDE0LCAyMzksIDEwLCAxMCwgMTQsIDIzOSwgCisgICAgOSwgMTAsIDE0LCAyMzksIDgsIDEwLCAxNCwgMjM5LCA3LCAxMCwgMTQsIDIzOSwgNiwgMTAsIDE0LCAyMzksIDUsIDEwLCAKKyAgICAxNCwgMjM5LCA0LCAxMCwgMTQsIDIzOSwgMywgMTAsIDE0LCAyMzksIDIsIDEwLCAxNCwgMjM5LCAxLCAxMCwgMTQsIDIzOSwgCisgICAgMCwgMTAsIDE0LCAyMzgsIDI1NSwgMTAsIDE0LCAyMzgsIDI1NCwgMTAsIDE0LCAyMzgsIDI1MywgMTAsIDE0LCAyMzgsIAorICAgIDI1MiwgMTAsIDE0LCAyMzgsIDI1MSwgMTAsIDE0LCAyMzgsIDI1MCwgMTAsIDE0LCAyMzgsIDI0OSwgMTAsIDE0LCAyMzgsIAorICAgIDI0OCwgMTAsIDE0LCAyMzgsIDI0NywgMTAsIDE0LCAyMzgsIDI0NiwgMTAsIDE0LCAyMzgsIDI0NSwgMTAsIDE0LCAyMzgsIAorICAgIDI0NCwgMTAsIDE0LCAyMzgsIDI0MywgMTAsIDE0LCAyMzgsIDI0MiwgMTAsIDE0LCAyMzgsIDI0MSwgMTAsIDE0LCAyMzgsIAorICAgIDI0MCwgMTAsIDE0LCAyMzgsIDIzOSwgMTAsIDE0LCAyMzgsIDIzOCwgMTAsIDE0LCAyMzgsIDIzNywgMTAsIDE0LCAyMzgsIAorICAgIDIzNiwgMTAsIDE0LCAyMzgsIDIzNSwgMTAsIDE0LCAyMzgsIDIzNCwgMTAsIDE0LCAyMzgsIDIzMywgMTAsIDE0LCAyMzgsIAorICAgIDIzMiwgMTAsIDE0LCAyMzgsIDIzMSwgMTAsIDE0LCAyMzgsIDIzMCwgMTAsIDE0LCAyMzgsIDIyOSwgMTAsIDE0LCAyMzgsIAorICAgIDIyOCwgMTAsIDE0LCAyMzgsIDIyNywgMTAsIDE0LCAyMzgsIDIyNiwgMTAsIDE0LCAyMzgsIDIyNSwgMTAsIDE0LCAyMzgsIAorICAgIDIyNCwgMTAsIDE0LCAyMzgsIDIyMywgMTAsIDE0LCAyMzgsIDIyMiwgMTAsIDE0LCAyMzgsIDIyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIyMCwgMTAsIDE0LCAyMzgsIDIxOSwgMTAsIDE0LCAyMzgsIDIxOCwgMTAsIDE0LCAyMzgsIDIxNywgMTAsIDE0LCAyMzgsIAorICAgIDIxNiwgMTAsIDE0LCAyMzgsIDIxNSwgMTAsIDE0LCAyMzgsIDIxNCwgMTAsIDE0LCAyMzgsIDIxMywgMTAsIDE0LCAyMzgsIAorICAgIDIxMiwgMTAsIDE0LCAyMzgsIDIxMSwgMTAsIDE0LCAyMzgsIDIxMCwgMTAsIDE0LCAyMzgsIDIwOSwgMTAsIDE0LCAyMzgsIAorICAgIDIwOCwgMTAsIDE0LCAyMzgsIDIwNywgMTAsIDE0LCAyMzgsIDIwNiwgMTAsIDE0LCAyMzgsIDIwNSwgMTAsIDE0LCAyMzgsIAorICAgIDIwNCwgMTAsIDE0LCAyMzgsIDIwMywgMTAsIDE0LCAyMzgsIDIwMiwgMTAsIDE0LCAyMzgsIDIwMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwMCwgMTAsIDE0LCAyMzgsIDE5OSwgMTAsIDE0LCAyMzgsIDE5OCwgMTAsIDE0LCAyMzgsIDE5NywgMTAsIDE0LCAyMzgsIAorICAgIDE5NiwgMTAsIDE0LCAyMzgsIDE5NSwgMTAsIDE0LCAyMzgsIDE5NCwgMTAsIDE0LCAyMzgsIDE5MywgMTAsIDE0LCAyMzgsIAorICAgIDE5MiwgMTAsIDE0LCAyMzgsIDE5MSwgMTAsIDE0LCAyMzgsIDE5MCwgMTAsIDE0LCAyMzgsIDE4OSwgMTAsIDE0LCAyMzgsIAorICAgIDE4OCwgMTAsIDE0LCAyMzgsIDE4NywgMTAsIDE0LCAyMzgsIDE4NiwgMTAsIDE0LCAyMzgsIDE4NSwgMTAsIDE0LCAyMzgsIAorICAgIDE4NCwgMTAsIDE0LCAyMzgsIDE4MywgMTAsIDE0LCAyMzgsIDE4MiwgMTAsIDE0LCAyMzgsIDE4MSwgMTAsIDE0LCAyMzgsIAorICAgIDE4MCwgMTAsIDE0LCAyMzgsIDE3OSwgMTAsIDE0LCAyMzgsIDE3OCwgMTAsIDE0LCAyMzgsIDE3NywgMTAsIDE0LCAyMzgsIAorICAgIDE3NiwgMTAsIDE0LCAyMzgsIDE3NSwgMTAsIDE0LCAyMzgsIDE3NCwgMTAsIDE0LCAyMzgsIDE3MywgMTAsIDE0LCAyMzgsIAorICAgIDE3MiwgMTAsIDE0LCAyMzgsIDE3MSwgMTAsIDE0LCAyMzgsIDE3MCwgMTAsIDE0LCAyMzgsIDE2OSwgMTAsIDE0LCAyMzgsIAorICAgIDE2OCwgMTAsIDE0LCAyMzgsIDE2NywgMTAsIDE0LCAyMzgsIDE2NiwgMTAsIDE0LCAyMzgsIDE2NSwgMTAsIDE0LCAyMzgsIAorICAgIDE2NCwgMTAsIDE0LCAyMzgsIDE2MywgMTAsIDE0LCAyMzgsIDE2MiwgMTAsIDE0LCAyMzgsIDE2MSwgMTAsIDE0LCAyMzgsIAorICAgIDE2MCwgMTAsIDE0LCAyMzgsIDE1OSwgMTAsIDE0LCAyMzgsIDE1OCwgMTAsIDE0LCAyMzgsIDE1NywgMTAsIDE0LCAyMzgsIAorICAgIDE1NiwgMTAsIDE0LCAyMzgsIDE1NSwgMTAsIDE0LCAyMzgsIDE1NCwgMTAsIDE0LCAyMzgsIDE1MywgMTAsIDE0LCAyMzgsIAorICAgIDE1MiwgMTAsIDE0LCAyMzgsIDE1MSwgMTAsIDE0LCAyMzgsIDE1MCwgMTAsIDE0LCAyMzgsIDE0OSwgMTAsIDE0LCAyMzgsIAorICAgIDE0OCwgMTAsIDE0LCAyMzgsIDE0NywgMTAsIDE0LCAyMzgsIDE0NiwgMTAsIDE0LCAyMzgsIDE0NSwgMTAsIDE0LCAyMzgsIAorICAgIDE0NCwgMTAsIDE0LCAyMzgsIDE0MywgMTAsIDE0LCAyMzgsIDE0MiwgMTAsIDE0LCAyMzgsIDE0MSwgMTAsIDE0LCAyMzgsIAorICAgIDE0MCwgMTAsIDE0LCAyMzgsIDEzOSwgMTAsIDE0LCAyMzgsIDEzOCwgMTAsIDE0LCAyMzgsIDEzNywgMTAsIDE0LCAyMzgsIAorICAgIDEzNiwgMTAsIDE0LCAyMzgsIDEzNSwgMTAsIDE0LCAyMzgsIDEzNCwgMTAsIDE0LCAyMzgsIDEzMywgMTAsIDE0LCAyMzgsIAorICAgIDEzMiwgMTAsIDE0LCAyMzgsIDEzMSwgMTAsIDE0LCAyMzgsIDEzMCwgMTAsIDE0LCAyMzgsIDEyOSwgMTAsIDE0LCAyMzgsIAorICAgIDEyOCwgMTAsIDE0LCAyMzgsIDEyNywgMTAsIDE0LCAyMzgsIDEyNiwgMTAsIDE0LCAyMzgsIDEyNSwgMTAsIDE0LCAyMzgsIAorICAgIDEyNCwgMTAsIDE0LCAyMzgsIDEyMywgMTAsIDE0LCAyMzgsIDEyMiwgMTAsIDE0LCAyMzgsIDEyMSwgMTAsIDE0LCAyMzgsIAorICAgIDEyMCwgMTAsIDE0LCAyMzgsIDExOSwgMTAsIDE0LCAyMzgsIDExOCwgMTAsIDE0LCAyMzgsIDExNywgMTAsIDE0LCAyMzgsIAorICAgIDExNiwgMTAsIDE0LCAyMzgsIDExNSwgMTAsIDE0LCAyMzgsIDExNCwgMTAsIDE0LCAyMzgsIDExMywgMTAsIDE0LCAyMzgsIAorICAgIDExMiwgMTAsIDE0LCAyMzgsIDExMSwgMTAsIDE0LCAyMzgsIDExMCwgMTAsIDE0LCAyMzgsIDEwOSwgMTAsIDE0LCAyMzgsIAorICAgIDEwOCwgMTAsIDE0LCAyMzgsIDEwNywgMTAsIDE0LCAyMzgsIDEwNiwgMTAsIDE0LCAyMzgsIDEwNSwgMTAsIDE0LCAyMzgsIAorICAgIDEwNCwgMTAsIDE0LCAyMzgsIDEwMywgMTAsIDE0LCAyMzgsIDEwMiwgMTAsIDE0LCAyMzgsIDEwMSwgMTAsIDE0LCAyMzgsIAorICAgIDEwMCwgMTAsIDE0LCAyMzgsIDk5LCAxMCwgMTQsIDIzOCwgOTgsIDEwLCAxNCwgMjM4LCA5NywgMTAsIDE0LCAyMzgsIDk2LCAKKyAgICAxMCwgMTQsIDIzOCwgOTUsIDEwLCAxNCwgMjM4LCA5NCwgMTAsIDE0LCAyMzgsIDkzLCAxMCwgMTQsIDIzOCwgOTIsIDEwLCAKKyAgICAxNCwgMjM4LCA5MSwgMTAsIDE0LCAyMzgsIDkwLCAxMCwgMTQsIDIzOCwgODksIDEwLCAxNCwgMjM4LCA4OCwgMTAsIDE0LCAKKyAgICAyMzgsIDg3LCAxMCwgMTQsIDIzOCwgODYsIDEwLCAxNCwgMjM4LCA4NSwgMTAsIDE0LCAyMzgsIDg0LCAxMCwgMTQsIDIzOCwgCisgICAgODMsIDEwLCAxNCwgMjM4LCA4MiwgMTAsIDE0LCAyMzgsIDgxLCAxMCwgMTQsIDIzOCwgODAsIDIzMywgOTYsIDIxNywgODUsIAorICAgIDEyOSwgMjE5LCAyMCwgMTI5LCAyNDUsIDM5LCA3OSwgMTI5LCAyMjQsIDEsIDc5LCAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIAorICAgIDE0MCwgNTAsIDEyOSwgMjI1LCAxODUsIDUwLCAxMjksIDI1NCwgMTM0LCAxMjksIDI1NCwgNjUsIDEyOSwgNDMsIDIyNiwgNywgCisgICAgMTI5LCA0NCwgMjI2LCA3LCAxMjksIDI1MywgMjI0LCAxMjksIDk2LCA1MCwgMTI5LCAyNDksIDIyNywgMTI5LCAyNDAsIAorICAgIDE3NCwgMTI5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDEyOSwgMjE5LCA0OCwgMTI5LCAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgCisgICAgMTExLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIDIxLCAxOTAsIDEyOSwgMjEsIAorICAgIDE5NSwgMTI5LCAyMSwgMTk5LCAxMjksIDIxLCAxOTYsIDEyOSwgMjEsIDIwMSwgMTI5LCAyNDksIDIzNCwgMTI5LCAyMjAsIAorICAgIDE1MiwgMTI5LCAyMzMsIDIxLCA1MCwgMTI5LCAyNDUsIDEwNiwgNTAsIDEyOSwgMjQyLCAxMzcsIDUwLCAxMjksIDIyNCwgCisgICAgMTYsIDc5LCAxMjksIDI0OSwgMjI1LCAyNTMsIDIxNCwgMTI5LCA3LCA2LCAxLCA2MSwgMTI5LCA3LCA2LCAxLCAyNTMsIAorICAgIDE2NiwgMTI5LCA3LCA2LCAxLCAyNTEsIDc0LCAxMjksIDcsIDYsIDEsIDI0OSwgNjgsIDEyOSwgNywgNiwgMSwgNzYsIDEyOSwgCisgICAgNywgNiwgMSwgMjQ1LCAxNCwgMTI5LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTI5LCA3LCA2LCAxLCAyNDIsIDY3LCAxMjksIDcsIAorICAgIDYsIDEsIDc0LCAxMjksIDcsIDYsIDEsIDIzNSwgMTUwLCAxMjksIDcsIDYsIDEsIDIzNSwgMjksIDEyOSwgNywgNiwgMSwgCisgICAgMTU2LCAxMjksIDcsIDYsIDEsIDE5NCwgMTI5LCA3LCA2LCAxLCAyMzAsIDMwLCAxMjksIDcsIDYsIDEsIDc4LCAxMjksIDcsIAorICAgIDYsIDEsIDIyNiwgMTA5LCAxMjksIDcsIDYsIDEsIDIyNCwgOTksIDEyOSwgNywgNiwgMSwgMTUzLCAxMjksIDcsIDYsIDEsIAorICAgIDIyMiwgOTMsIDEyOSwgNywgNiwgMSwgMjE3LCAxNTMsIDEyOSwgNywgNiwgMSwgNjksIDEyOSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDEyOSwgNywgNiwgMSwgMjEyLCA5OCwgMTI5LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA2LCAxLCAyMTEsIAorICAgIDExNywgMTI5LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgNDIsIDEyNywgMTI5LCAyMjMsIDUzLCAyMTksIDQ4LCAKKyAgICAxMjksIDQ0LCA0MiwgMTI3LCAxMjksIDI1MCwgMzksIDI1NSwgMjMsIDEyOSwgMTIxLCAyMzIsIDIxOSwgMTI5LCAyNDIsIAorICAgIDE0NCwgMjU1LCAyMywgMTI5LCA3LCA0LCAxLCA2MSwgMTI5LCA3LCA0LCAxLCAyNTMsIDE2NiwgMTI5LCA3LCA0LCAxLCAKKyAgICAyNTEsIDc0LCAxMjksIDcsIDQsIDEsIDI0OSwgNjgsIDEyOSwgNywgNCwgMSwgNzYsIDEyOSwgNywgNCwgMSwgMjQ1LCAxNCwgCisgICAgMTI5LCA3LCA0LCAxLCAyNDMsIDIwOSwgMTI5LCA3LCA0LCAxLCAyNDIsIDY3LCAxMjksIDcsIDQsIDEsIDc0LCAxMjksIDcsIAorICAgIDQsIDEsIDIzNSwgMTUwLCAxMjksIDcsIDQsIDEsIDIzNSwgMjksIDEyOSwgNywgNCwgMSwgMTU2LCAxMjksIDcsIDQsIDEsIAorICAgIDE5NCwgMTI5LCA3LCA0LCAxLCAyMzAsIDMwLCAxMjksIDcsIDQsIDEsIDc4LCAxMjksIDcsIDQsIDEsIDIyNiwgMTA5LCAKKyAgICAxMjksIDcsIDQsIDEsIDIyNCwgOTksIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIDIyMiwgOTMsIDEyOSwgNywgCisgICAgNCwgMSwgMjE3LCAxNTMsIDEyOSwgNywgNCwgMSwgNjksIDEyOSwgNywgNCwgMSwgMjE0LCAxMDUsIDEyOSwgNywgNCwgMSwgCisgICAgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDExNywgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCAxMDcsIDEyNywgMTI5LCA2NywgMjMyLCAyMTksIDEyOSwgNDQsIDI0OSwgMTA3LCAKKyAgICAxMjcsIDEyOSwgMTg0LCAyNTEsIDE0LCAyMTcsIDg1LCA0NSwgMjIxLCA4MCwgNDUsIDIyMSwgNjksIDQ1LCAyMjEsIDU4LCAKKyAgICA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgMzUsIDQ1LCAyMjEsIDI0LCA0NSwgMjIxLCAxMywgNDUsIDIyMSwgMiwgNDUsIDIyMCwgCisgICAgMjQ3LCA0NSwgMjIwLCAyMzksIDQ1LCAyMjAsIDIzOCwgNDUsIDIyMCwgMjM3LCA0NSwgMjIwLCAyMzYsIDQ1LCAyMjAsIAorICAgIDIzNCwgNDUsIDIyMCwgMjMzLCA0NSwgMjIwLCAyMzIsIDQ1LCAyMjAsIDIzMSwgNDUsIDIyMCwgMjMwLCA0NSwgMjIwLCAKKyAgICAyMjksIDQ1LCAyMjAsIDIyOCwgNDUsIDIyMCwgMjI3LCA0NSwgMjIwLCAyMjYsIDQ1LCAyMjAsIDIyNSwgNDUsIDIyMCwgCisgICAgMjIzLCA0NSwgMjIwLCAyMjIsIDQ1LCAyMjAsIDIyMSwgNDUsIDIyMCwgMjIwLCA0NSwgMjIwLCAyMTksIDQ1LCAyMjAsIAorICAgIDIxOCwgNDUsIDIyMCwgMjE3LCA0NSwgMjIwLCAyMTYsIDQ1LCAyMjAsIDIxNSwgNDUsIDIyMCwgMjE0LCA0NSwgMjIwLCAKKyAgICAyMTIsIDQ1LCAyMjAsIDIxMSwgNDUsIDIyMCwgMjEwLCA0NSwgMjIwLCAyMDksIDQ1LCAyMjAsIDIwOCwgNDUsIDIyMCwgCisgICAgMjA3LCA0NSwgMjIwLCAyMDYsIDQ1LCAyMjAsIDIwNSwgNDUsIDIyMCwgMjA0LCA0NSwgMjIwLCAyMDMsIDQ1LCAyMjAsIAorICAgIDIwMSwgNDUsIDIyMCwgMjAwLCA0NSwgMjIwLCAxOTksIDQ1LCAyMjAsIDE5OCwgNDUsIDIyMCwgMTk3LCA0NSwgMjIwLCAKKyAgICAxOTYsIDQ1LCAyMjAsIDE5NSwgNDUsIDIyMCwgMTk0LCA0NSwgMjIwLCAxOTMsIDQ1LCAyMjAsIDE5MiwgNDUsIDIyMCwgCisgICAgMTkwLCA0NSwgMjIwLCAxODksIDQ1LCAyMjAsIDE4OCwgNDUsIDIyMCwgMTg3LCA0NSwgMjIwLCAxODYsIDQ1LCAyMjAsIAorICAgIDE4NSwgNDUsIDIyMCwgMTg0LCA0NSwgMjIwLCAxODMsIDQ1LCAyMjAsIDE4MiwgNDUsIDIyMCwgMTgxLCA0NSwgMjIwLCAKKyAgICAxNzksIDQ1LCAyMjAsIDE3OCwgNDUsIDIyMCwgMTc3LCA0NSwgMjIwLCAxNzYsIDQ1LCAyMjAsIDE3NSwgNDUsIDIyMCwgCisgICAgMTc0LCA0NSwgMjIwLCAxNzMsIDQ1LCAyMjAsIDE3MiwgNDUsIDIyMCwgMTcxLCA0NSwgMjIwLCAxNzAsIDQ1LCAyMjAsIAorICAgIDE2OCwgNDUsIDIyMCwgMTY3LCA0NSwgMjIwLCAxNjYsIDQ1LCAyMjAsIDE2NSwgNDUsIDIyMCwgMTY0LCA0NSwgMjIwLCAKKyAgICAxNjMsIDQ1LCAyMjAsIDE2MiwgNDUsIDIyMCwgMTYxLCA0NSwgMjIwLCAxNjAsIDQ1LCAyMjAsIDE1OSwgNDUsIDIyMSwgCisgICAgMTU2LCA0NSwgMjIxLCAxNTUsIDQ1LCAyMjEsIDE1NCwgNDUsIDIyMSwgMTUzLCA0NSwgMjIxLCAxNTIsIDQ1LCAyMjEsIAorICAgIDE1MSwgNDUsIDIyMSwgMTUwLCA0NSwgMjIxLCAxNDksIDQ1LCAyMjEsIDE0OCwgNDUsIDIyMSwgMTQ3LCA0NSwgMjIxLCAKKyAgICAxNDUsIDQ1LCAyMjEsIDE0NCwgNDUsIDIyMSwgMTQzLCA0NSwgMjIxLCAxNDIsIDQ1LCAyMjEsIDE0MSwgNDUsIDIyMSwgCisgICAgMTQwLCA0NSwgMjIxLCAxMzksIDQ1LCAyMjEsIDEzOCwgNDUsIDIyMSwgMTM3LCA0NSwgMjIxLCAxMzYsIDQ1LCAyMjEsIAorICAgIDEzNCwgNDUsIDIyMSwgMTMzLCA0NSwgMjIxLCAxMzIsIDQ1LCAyMjEsIDEzMSwgNDUsIDIyMSwgMTMwLCA0NSwgMjIxLCAKKyAgICAxMjksIDQ1LCAyMjEsIDEyOCwgNDUsIDIyMSwgMTI3LCA0NSwgMjIxLCAxMjYsIDQ1LCAyMjEsIDEyNSwgNDUsIDIyMSwgCisgICAgMTIzLCA0NSwgMjIxLCAxMjIsIDQ1LCAyMjEsIDEyMSwgNDUsIDIyMSwgMTIwLCA0NSwgMjIxLCAxMTksIDQ1LCAyMjEsIAorICAgIDExOCwgNDUsIDIyMSwgMTE3LCA0NSwgMjIxLCAxMTYsIDQ1LCAyMjEsIDExNSwgNDUsIDIyMSwgMTE0LCA0NSwgMjIxLCAKKyAgICAxMTIsIDQ1LCAyMjEsIDExMSwgNDUsIDIyMSwgMTEwLCA0NSwgMjIxLCAxMDksIDQ1LCAyMjEsIDEwOCwgNDUsIDIyMSwgCisgICAgMTA3LCA0NSwgMjIxLCAxMDYsIDQ1LCAyMjEsIDEwNSwgNDUsIDIyMSwgMTA0LCA0NSwgMjIxLCAxMDMsIDQ1LCAyMjEsIAorICAgIDEwMSwgNDUsIDIyMSwgMTAwLCA0NSwgMjIxLCA5OSwgNDUsIDIyMSwgOTgsIDQ1LCAyMjEsIDk3LCA0NSwgMjIxLCA5NiwgCisgICAgNDUsIDIyMSwgOTUsIDQ1LCAyMjEsIDk0LCA0NSwgMjIxLCA5MywgNDUsIDIyMSwgOTIsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCAKKyAgICA4OSwgNDUsIDIyMSwgODgsIDQ1LCAyMjEsIDg3LCA0NSwgMjIxLCA4NiwgNDUsIDIyMSwgODUsIDQ1LCAyMjEsIDg0LCA0NSwgCisgICAgMjIxLCA4MywgNDUsIDIyMSwgODIsIDQ1LCAyMjEsIDgxLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzgsIDQ1LCAyMjEsIDc3LCAKKyAgICA0NSwgMjIxLCA3NiwgNDUsIDIyMSwgNzUsIDQ1LCAyMjEsIDc0LCA0NSwgMjIxLCA3MywgNDUsIDIyMSwgNzIsIDQ1LCAyMjEsIAorICAgIDcxLCA0NSwgMjIxLCA3MCwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY3LCA0NSwgMjIxLCA2NiwgNDUsIDIyMSwgNjUsIDQ1LCAKKyAgICAyMjEsIDY0LCA0NSwgMjIxLCA2MywgNDUsIDIyMSwgNjIsIDQ1LCAyMjEsIDYxLCA0NSwgMjIxLCA2MCwgNDUsIDIyMSwgNTksIAorICAgIDQ1LCAyMjEsIDU3LCA0NSwgMjIxLCA1NiwgNDUsIDIyMSwgNTUsIDQ1LCAyMjEsIDU0LCA0NSwgMjIxLCA1MywgNDUsIDIyMSwgCisgICAgNTIsIDQ1LCAyMjEsIDUxLCA0NSwgMjIxLCA1MCwgNDUsIDIyMSwgNDksIDQ1LCAyMjEsIDQ4LCA0NSwgMjIxLCA0NSwgNDUsIAorICAgIDIyMSwgNDQsIDQ1LCAyMjEsIDQzLCA0NSwgMjIxLCA0MiwgNDUsIDIyMSwgNDEsIDQ1LCAyMjEsIDQwLCA0NSwgMjIxLCAzOSwgCisgICAgNDUsIDIyMSwgMzgsIDQ1LCAyMjEsIDM3LCA0NSwgMjIxLCAzNiwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMzLCA0NSwgMjIxLCAKKyAgICAzMiwgNDUsIDIyMSwgMzEsIDQ1LCAyMjEsIDMwLCA0NSwgMjIxLCAyOSwgNDUsIDIyMSwgMjgsIDQ1LCAyMjEsIDI3LCA0NSwgCisgICAgMjIxLCAyNiwgNDUsIDIyMSwgMjUsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMiwgNDUsIDIyMSwgMjEsIDQ1LCAyMjEsIDIwLCAKKyAgICA0NSwgMjIxLCAxOSwgNDUsIDIyMSwgMTgsIDQ1LCAyMjEsIDE3LCA0NSwgMjIxLCAxNiwgNDUsIDIyMSwgMTUsIDQ1LCAyMjEsIAorICAgIDE0LCA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTEsIDQ1LCAyMjEsIDEwLCA0NSwgMjIxLCA5LCA0NSwgMjIxLCA4LCA0NSwgCisgICAgMjIxLCA3LCA0NSwgMjIxLCA2LCA0NSwgMjIxLCA1LCA0NSwgMjIxLCA0LCA0NSwgMjIxLCAzLCA0NSwgMjIxLCAxLCA0NSwgCisgICAgMjIxLCAwLCA0NSwgMjIwLCAyNTUsIDQ1LCAyMjAsIDI1NCwgNDUsIDIyMCwgMjUzLCA0NSwgMjIwLCAyNTIsIDQ1LCAyMjAsIAorICAgIDI1MSwgNDUsIDIyMCwgMjUwLCA0NSwgMjIwLCAyNDksIDQ1LCAyMjAsIDI0OCwgNDUsIDIyMCwgMjQ2LCA0NSwgMjIwLCAKKyAgICAyNDUsIDQ1LCAyMjAsIDI0NCwgNDUsIDIyMCwgMjQzLCA0NSwgMjIwLCAyNDIsIDQ1LCAyMjAsIDI0MSwgNDUsIDIyMCwgCisgICAgMjQwLCAyMjcsIDIwNiwgMjI3LCAyMDgsIDIxOCwgMTU0LCA2NCwgMjQxLCAyNDAsIDIxOSwgNTAsIDIxOCwgMTU0LCA2NCwgCisgICAgMjE2LCAyMTMsIDIxOCwgODYsIDI0NSwgMTUxLCA2NCwgMjE2LCAyMTMsIDI0NSwgNjQsIDI0NSwgMTUxLCA2NCwgMjE1LCAKKyAgICAyNDQsIDI0NSwgMTE3LCAyNDUsIDE0MCwgMjQ1LCAxNDEsIDI1NSwgMTYsIDI1NSwgMTcsIDI1NCwgMTc2LCAyNTIsIDU1LCAKKyAgICAyNTIsIDE4NywgMjUxLCAxMzksIDEzNSwgMjE3LCA5MCwgMjAzLCAyMTcsIDkwLCAyNDAsIDIzNCwgMjE3LCA5NCwgMjMyLCAKKyAgICAyMjAsIDI0NCwgMTUzLCAxNjYsIDIzMiwgMjE5LCAyNDUsIDE1MSwgNjQsIDIzMiwgMjE5LCAyMzMsIDYsIDIyOCwgMTQwLCAKKyAgICAyNDUsIDEyMCwgMjMyLCAyMjAsIDIxNywgOTAsIDY3LCAyMTcsIDkwLCAyMTIsIDExOCwgMjQ0LCAyOCwgMjQ0LCAxNTMsIAorICAgIDI0NCwgMTMzLCAyNTAsIDIzOCwgMjIzLCA1NiwgMjQ5LCAxNTEsIDIyMCwgMzAsIDIyNiwgMTM0LCAyMzIsIDE1NiwgMTExLCAKKyAgICAyMTksIDYwLCAyMjAsIDMwLCAyMzYsIDYsIDIzMiwgMTU2LCAyMTAsIDg2LCAyMTksIDE5MywgMjQ4LCAxNTksIDIzMiwgCisgICAgMjEwLCAyNDUsIDg1LCAyNDcsIDE2MywgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMjQ4LCAxNDksIDI0OCwgMzksIDI0OSwgCisgICAgMTg2LCAxMDUsIDI0OCwgMTQ4LCAyNDgsIDM5LCAyNDksIDE4NiwgMTU4LCAyNDgsIDE0NywgMjQ4LCAzOSwgMjQ5LCAxODYsIAorICAgIDE2MSwgMjQ4LCAxNDYsIDE1MiwgMjU1LCAxNiwgMjI5LCAyMTQsIDIxNywgMTc4LCAyMzYsIDY5LCAyMTcsIDE4MSwgMjQ1LCAKKyAgICAxNTEsIDY0LCAyMTUsIDI0NSwgMjUxLCAyMjEsIDI0NSwgNzAsIDI1MSwgMTMsIDI1MSwgMTUsIDI0NSwgMTUxLCA2NCwgCisgICAgMjMxLCA4NiwgMjQ1LCAxMTgsIDIxOCwgNjIsIDIxOCwgNzksIDI0NSwgODUsIDI0NSwgODYsIDIzNSwgMjM5LCAyMjAsIAorICAgIDE0MCwgMTYxLCAyNDQsIDExNSwgMjIwLCAxMzksIDI0MywgMjQ1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDE1OCwgMjQyLCAKKyAgICAxMjgsIDIyMCwgMTM5LCAyNDIsIDEyNSwgMjM1LCAyMzksIDIyMCwgMTQwLCAxMDUsIDIyMywgMTI0LCAyMjAsIDEzOSwgCisgICAgMjIyLCAxNDcsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTExLCAyMTQsIDE3NCwgMjIwLCAxMzksIDIxNCwgMTMzLCAyMTksIDIzLCAKKyAgICAyNDgsIDcxLCAyNDgsIDczLCAyMjYsIDgyLCAyNTAsIDE1MCwgMjI2LCA4NCwgMTI1LCAyMjYsIDI0NCwgMjI0LCAxOTYsIAorICAgIDI0MSwgNTQsIDI1MSwgMTU4LCAyMjUsIDE3NiwgMjQxLCAyMTAsIDI1MSwgMTY5LCAyMjgsIDgwLCAyNTEsIDE1OCwgMjQxLCAKKyAgICAyMTAsIDIyOSwgMTgwLCAyMzUsIDI0OSwgMjM1LCAyNTEsIDIyOSwgODcsIDIzMiwgMjE5LCAyMjksIDEwNCwgMjE4LCAxNTQsIAorICAgIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjE4LCAyMjUsIDI0NSwgMTUxLCA2NCwgMjIxLCAxNjAsIDI1NCwgMjYsIDI0NSwgCisgICAgODgsIDEzNSwgMjE3LCA5MSwgMjIwLCAxMjksIDIwMywgMjE3LCA5MSwgMjIwLCAxMjksIDI0MCwgMjMxLCAxMzUsIDIxNywgCisgICAgOTEsIDIsIDIzNSwgNDEsIDIwMywgMjE3LCA5MSwgMiwgMjM1LCA0MSwgMjQwLCAyMzIsIDIzMiwgMjIwLCAyMTcsIDkxLCAKKyAgICAyMjAsIDEyOSwgNjcsIDIxNywgOTEsIDIyMCwgMTI5LCAyMTIsIDExNywgMjI2LCAxLCAyMzIsIDIyMCwgMjQ0LCAyMiwgCisgICAgMjI2LCAxLCAyMzIsIDIyMCwgMjQ2LCAxMTQsIDIyNSwgMzUsIDIyNiwgMSwgMjMyLCAyMjAsIDI1MiwgMTg2LCAyMjYsIDEsIAorICAgIDIzMiwgMjIwLCAyMTQsIDE2MywgMjI1LCAzMSwgMjIzLCA1MywgMjMyLCAyMjAsIDI0NCwgMTUzLCAyMjMsIDUzLCAyMzUsIAorICAgIDI0OSwgMjIzLCAzOCwgMjE5LCAxNTcsIDIyMCwgMzAsIDEwNSwgMjE5LCAxNTQsIDIxOCwgMjI3LCAyMTksIDE1NywgMjIwLCAKKyAgICAzMCwgMTU4LCAyMTksIDE1MywgMjE4LCAyMjYsIDI0OCwgMzksIDI0OSwgMTg2LCAyMTgsIDEwNywgMjQ4LCAxNDUsIDIyNCwgCisgICAgMTg2LCAyMTQsIDEzMiwgMTExLCAyMjQsIDE4NiwgMjE0LCAxMzAsIDIyNCwgMTUyLCAyMjQsIDE4NiwgMjE0LCAxMzIsIAorICAgIDEwNSwgMjI0LCAxODYsIDIxNCwgMTI5LCAyMjQsIDE1MSwgMjIwLCAxMzAsIDIxNSwgMjQzLCAyMTgsIDE1MywgMjE4LCA5MCwgCisgICAgMjUxLCAxNCwgMjUwLCAxNTAsIDI1MCwgMjE3LCAyMzEsIDQ4LCAyMTIsIDU5LCAyMzAsIDQ4LCAyMTgsIDE1NCwgNjQsIAorICAgIDI0MiwgMTE0LCAyNTQsIDI2LCAyMTgsIDE1NCwgNjQsIDIyNCwgMTY5LCAyNTQsIDI2LCAyMTksIDIyLCAyNDUsIDE1MSwgCisgICAgNjQsIDI0MiwgMTE0LCAyNTQsIDI2LCAyNDUsIDE1MSwgNjQsIDIyNCwgMTY5LCAyNTQsIDI2LCAyNDUsIDExNSwgMjE4LCAKKyAgICAxNTQsIDY0LCAyMTgsIDEwNywgMjE5LCAzNywgMjE5LCAxNTcsIDI0MiwgMTQ4LCAxMzUsIDIzNSwgMjAyLCAyMjAsIDEwOSwgCisgICAgMjE5LCAxNTcsIDEzNSwgMjM1LCAyMDIsIDIyMSwgMTk2LCAyNDksIDE4NiwgMjIwLCAxMzcsIDIzNSwgMjAyLCAyNDksIAorICAgIDEyMSwgMjE4LCAxMDgsIDIxNiwgMjM3LCAyMTgsIDE3MCwgMjI2LCAxNzMsIDIxNywgMTY4LCAyNDksIDIyNiwgMjI2LCAKKyAgICAxNDYsIDIyNCwgMTg3LCAyMzEsIDQ3LCAyMjUsIDIyLCAyNTQsIDYxLCAyMjQsIDE4MSwgMjQ5LCAyMjYsIDI1NCwgNzcsIAorICAgIDIyOSwgMTY4LCAyMTksIDIwMiwgNywgNiwgMSwgMjQzLCAwLCA3LCA0LCAxLCAyNDMsIDAsIDI1MCwgMTY3LCAyNTQsIDE1NywgCisgICAgMTgzLCAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE2NSwgMSwgMjMyLCAxODEsIDIwOSwgMjA5LCAxLCAKKyAgICAyNDQsIDUyLCAyNDQsIDQ0LCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjQ0LCAxNjUsIDIwOSwgMjA5LCAxLCAyMjIsIDIxMywgCisgICAgMjA5LCAyMDksIDEsIDIzMiwgMTYyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyNDIsIDIyMiwgMjMwLCAyNTMsIAorICAgIDIyMywgNDQsIDI0MywgMjIzLCAyNDMsIDIyMiwgMjQzLCAyMjEsIDIzMCwgNTAsIDIwOSwgMjUxLCAyMDksIDI1MiwgMjA5LCAKKyAgICAyNTQsIDIzMiwgMTA3LCAyMjIsIDIyMSwgMjMyLCAxMDksIDIyMiwgMjIzLCAyMjUsIDIyNywgMjMyLCAxMDYsIDIyMiwgCisgICAgMjIwLCAyMjgsIDExMSwgMjMwLCAxNzAsIDIxMSwgMjI5LCAyMzIsIDEwOCwgMjIyLCAyMjIsIDI0MywgMjQ0LCAyMjUsIAorICAgIDIyNiwgMjEyLCAxNSwgMjQ1LCAxNzAsIDI0MywgMjMzLCAyMzAsIDIzNCwgMjI2LCAyMDEsIDIxNCwgMTM0LCA4NywgMjMwLCAKKyAgICAyMzQsIDI0OCwgMTY1LCA4NywgOCwgMywgMjM1LCAxNjQsIDc5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNzEsIAorICAgIDIzMywgMjYsIDEyNywgMjEzLCAxMTgsIDIxMywgNywgMjEyLCAxOTUsIDIxMiwgMTg0LCAyMTIsIDE3MywgMjEyLCAxNjIsIAorICAgIDIxMiwgMTUxLCAyMTIsIDE0MCwgMjEyLCAxMjksIDIxMywgMTE3LCAyMTMsIDEwNiwgMjEzLCA5NSwgMjEzLCA4NCwgMjEzLCAKKyAgICA3MywgMjEzLCA2MiwgMjEzLCA1MSwgMjUxLCA3OSwgMjI2LCAxNTksIDc5LCAyNTEsIDIwNCwgMjA5LCAyNTMsIDE1LCA1LCAKKyAgICAyMjcsIDIxNSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIDIxNSwgMTE1LCAyMjcsIDIxNSwgMjUxLCAxMDcsIDExNSwgMjUxLCAKKyAgICAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE0LCA5LCAyMTMsIDQwLCAyMTMsIDI5LCAKKyAgICAyMTMsIDE4LCAyMTMsIDYsIDIxMiwgMjUxLCAyMTIsIDI0MCwgMjEyLCAyMjksIDIxMiwgMjE4LCAyMTIsIDIwNywgMjEyLCAKKyAgICAxOTksIDIxMiwgMTk4LCAyMTIsIDE5NywgMjEyLCAxOTYsIDIxMiwgMTk0LCAyMTIsIDE5MywgMjEyLCAxOTIsIDIxMiwgCisgICAgMTkxLCAyMTIsIDE5MCwgMjEyLCAxODksIDIxMiwgMTg4LCAyMTIsIDE4NywgMjEyLCAxODYsIDIxMiwgMTg1LCAyMTIsIAorICAgIDE4MywgMjEyLCAxODIsIDIxMiwgMTgxLCAyMTIsIDE4MCwgMjEyLCAxNzksIDIxMiwgMTc4LCAyMTIsIDE3NywgMjEyLCAKKyAgICAxNzYsIDIxMiwgMTc1LCAyMTIsIDE3NCwgMjEyLCAxNzIsIDIxMiwgMTcxLCAyMTIsIDE3MCwgMjEyLCAxNjksIDIxMiwgCisgICAgMTY4LCAyMTIsIDE2NywgMjEyLCAxNjYsIDIxMiwgMTY1LCAyMTIsIDE2NCwgMjEyLCAxNjMsIDIxMiwgMTYxLCAyMTIsIAorICAgIDE2MCwgMjEyLCAxNTksIDIxMiwgMTU4LCAyMTIsIDE1NywgMjEyLCAxNTYsIDIxMiwgMTU1LCAyMTIsIDE1NCwgMjEyLCAKKyAgICAxNTMsIDIxMiwgMTUyLCAyMTIsIDE1MCwgMjEyLCAxNDksIDIxMiwgMTQ4LCAyMTIsIDE0NywgMjEyLCAxNDYsIDIxMiwgCisgICAgMTQ1LCAyMTIsIDE0NCwgMjEyLCAxNDMsIDIxMiwgMTQyLCAyMTIsIDE0MSwgMjEyLCAxMzksIDIxMiwgMTM4LCAyMTIsIAorICAgIDEzNywgMjEyLCAxMzYsIDIxMiwgMTM1LCAyMTIsIDEzNCwgMjEyLCAxMzMsIDIxMiwgMTMyLCAyMTIsIDEzMSwgMjEyLCAKKyAgICAxMzAsIDIxMiwgMTI4LCAyMTIsIDEyNywgMjEyLCAxMjYsIDIxMiwgMTI1LCAyMTIsIDEyNCwgMjEyLCAxMjMsIDIxMiwgCisgICAgMTIyLCAyMTIsIDEyMSwgMjEyLCAxMjAsIDIxMiwgMTE5LCAyMTMsIDExNiwgMjEzLCAxMTUsIDIxMywgMTE0LCAyMTMsIAorICAgIDExMywgMjEzLCAxMTIsIDIxMywgMTExLCAyMTMsIDExMCwgMjEzLCAxMDksIDIxMywgMTA4LCAyMTMsIDEwNywgMjEzLCAKKyAgICAxMDUsIDIxMywgMTA0LCAyMTMsIDEwMywgMjEzLCAxMDIsIDIxMywgMTAxLCAyMTMsIDEwMCwgMjEzLCA5OSwgMjEzLCA5OCwgCisgICAgMjEzLCA5NywgMjEzLCA5NiwgMjEzLCA5NCwgMjEzLCA5MywgMjEzLCA5MiwgMjEzLCA5MSwgMjEzLCA5MCwgMjEzLCA4OSwgCisgICAgMjEzLCA4OCwgMjEzLCA4NywgMjEzLCA4NiwgMjEzLCA4NSwgMjEzLCA4MywgMjEzLCA4MiwgMjEzLCA4MSwgMjEzLCA4MCwgCisgICAgMjEzLCA3OSwgMjEzLCA3OCwgMjEzLCA3NywgMjEzLCA3NiwgMjEzLCA3NSwgMjEzLCA3NCwgMjEzLCA3MiwgMjEzLCA3MSwgCisgICAgMjEzLCA3MCwgMjEzLCA2OSwgMjEzLCA2OCwgMjEzLCA2NywgMjEzLCA2NiwgMjEzLCA2NSwgMjEzLCA2NCwgMjEzLCA2MywgCisgICAgMjEzLCA2MSwgMjEzLCA2MCwgMjEzLCA1OSwgMjEzLCA1OCwgMjEzLCA1NywgMjEzLCA1NiwgMjEzLCA1NSwgMjEzLCA1NCwgCisgICAgMjEzLCA1MywgMjEzLCA1MiwgMjEzLCA1MCwgMjEzLCA0OSwgMjEzLCA0OCwgMjEzLCA0NywgMjEzLCA0NiwgMjEzLCA0NSwgCisgICAgMjEzLCA0NCwgMjEzLCA0MywgMjEzLCA0MiwgMjEzLCA0MSwgMjEzLCAzOSwgMjEzLCAzOCwgMjEzLCAzNywgMjEzLCAzNiwgCisgICAgMjEzLCAzNSwgMjEzLCAzNCwgMjEzLCAzMywgMjEzLCAzMiwgMjEzLCAzMSwgMjEzLCAzMCwgMjEzLCAyOCwgMjEzLCAyNywgCisgICAgMjEzLCAyNiwgMjEzLCAyNSwgMjEzLCAyNCwgMjEzLCAyMywgMjEzLCAyMiwgMjEzLCAyMSwgMjEzLCAyMCwgMjEzLCAxOSwgCisgICAgMjEzLCAxNywgMjEzLCAxNiwgMjEzLCAxNSwgMjEzLCAxNCwgMjEzLCAxMywgMjEzLCAxMiwgMjEzLCAxMSwgMjEzLCAxMCwgCisgICAgMjEzLCA5LCAyMTMsIDgsIDIxMywgNSwgMjEzLCA0LCAyMTMsIDMsIDIxMywgMiwgMjEzLCAxLCAyMTMsIDAsIDIxMiwgMjU1LCAKKyAgICAyMTIsIDI1NCwgMjEyLCAyNTMsIDIxMiwgMjUyLCAyMTIsIDI1MCwgMjEyLCAyNDksIDIxMiwgMjQ4LCAyMTIsIDI0NywgCisgICAgMjEyLCAyNDYsIDIxMiwgMjQ1LCAyMTIsIDI0NCwgMjEyLCAyNDMsIDIxMiwgMjQyLCAyMTIsIDI0MSwgMjEyLCAyMzksIAorICAgIDIxMiwgMjM4LCAyMTIsIDIzNywgMjEyLCAyMzYsIDIxMiwgMjM1LCAyMTIsIDIzNCwgMjEyLCAyMzMsIDIxMiwgMjMyLCAKKyAgICAyMTIsIDIzMSwgMjEyLCAyMzAsIDIxMiwgMjI4LCAyMTIsIDIyNywgMjEyLCAyMjYsIDIxMiwgMjI1LCAyMTIsIDIyNCwgCisgICAgMjEyLCAyMjMsIDIxMiwgMjIyLCAyMTIsIDIyMSwgMjEyLCAyMjAsIDIxMiwgMjE5LCAyMTIsIDIxNywgMjEyLCAyMTYsIAorICAgIDIxMiwgMjE1LCAyMTIsIDIxNCwgMjEyLCAyMTMsIDIxMiwgMjEyLCAyMTIsIDIxMSwgMjEyLCAyMTAsIDIxMiwgMjA5LCAKKyAgICAyMTIsIDIwOCwgMjEyLCAyMDYsIDIxMiwgMjA1LCAyMTIsIDIwNCwgMjEyLCAyMDMsIDIxMiwgMjAyLCAyMTIsIDIwMSwgCisgICAgMjEyLCAyMDAsIDcsIDYsIDEsIDExNiwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCAyMzEsIAorICAgIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgCisgICAgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNjAsIAorICAgIDIsIDI1MCwgMzksIDIyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIAorICAgIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAyMjksIDg1LCAyLCAyMTYsIDkwLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgCisgICAgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIAorICAgIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgCisgICAgNywgNCwgMSwgMjIyLCA5NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIAorICAgIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA3MiwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzIsIAorICAgIDIyLCAxODQsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIDcyLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI5LCAyMiwgNTksIDcyLCAyMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjM1LCAxNTEsIDIsIDE4NCwgNywgNCwgMSwgMjM1LCAxNTEsIAorICAgIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE4NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE4NCwgCisgICAgNywgNiwgMSwgMjMyLCA1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxODQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxODQsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgCisgICAgMjA0LCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIAorICAgIDEwNiwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyMSwgMTk4LCAKKyAgICAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDE0MiwgNywgNCwgMSwgMjQxLCA1OCwgMjIxLCAxOTgsIDIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgMTQyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMTc5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzAsIDksIDIyMCwgMTM3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5NywgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIAorICAgIDIzOCwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCA2OSwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyMTAsIDIxMiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyNTQsIDI1MiwgOSwgMjIwLCAxMzcsIDIyOCwgNjgsIDIsIDIzNCwgMTgwLCAxNDYsIDEsIDIzNCwgMTE1LCAzNiwgCisgICAgMTE3LCAyMzUsIDI5LCAzNiwgMTE3LCAyMjksIDg0LCAzNiwgMTE3LCAyNTEsIDc0LCAzNiwgMTE3LCAyMjcsIDE3MSwgMzYsIAorICAgIDExNywgMjE1LCAxNjAsIDM2LCAxMTcsIDIyOCwgMTE2LCAzNiwgMTE3LCAyMTcsIDE1MywgMzYsIDExNywgMjMwLCAzMCwgCisgICAgMzYsIDExNywgMjI2LCAxMDksIDM2LCAxMTcsIDE5NCwgMzYsIDExNywgMjExLCAxMTcsIDM2LCAxMTcsIDE1MywgMzYsIAorICAgIDExNywgMTU2LCAzNiwgMTE3LCAyMTQsIDEwNSwgMzYsIDExNywgMjMyLCAxODIsIDM2LCAxMTcsIDIzMiwgMTkxLCAzNiwgCisgICAgMTE3LCAyMjIsIDE4MiwgMzYsIDExNywgMjI4LCA5OCwgMzYsIDExNywgMjM1LCAxNTAsIDM2LCAxMTcsIDIyMCwgMTA2LCAKKyAgICAzNiwgMTE3LCAyMTgsIDIyOCwgMzYsIDExNywgMjIyLCA5MywgMzYsIDExNywgMjQyLCA2NywgMzYsIDExNywgMjMzLCAyMzgsIAorICAgIDM2LCAzLCAyMzUsIDE2LCAzNiwgMywgMjM0LCA5OCwgMzYsIDMsIDIzNCwgODksIDM2LCAzLCAyMzMsIDIyMywgMzYsIDMsIAorICAgIDIzMywgMTk0LCAzNiwgMywgMjM0LCAxODgsIDM2LCAzLCAyMzQsIDE4NywgMzYsIDMsIDIzNCwgMjUyLCAzNiwgMywgMjM0LCAKKyAgICAzNCwgMzYsIDMsIDIzNCwgMTYsIDM2LCAzLCAyMzQsIDIwMSwgMzYsIDMsIDIyOSwgODEsIDM2LCAzLCAyMjksIDMyLCAzNiwgCisgICAgMywgMjI5LCAyOCwgMzYsIDMsIDIyOCwgMjUzLCAzNiwgMywgMjI4LCAyNDYsIDM2LCAzLCAyMjksIDY5LCAzNiwgMywgMjI5LCAKKyAgICA2NywgMzYsIDMsIDIyOSwgNzgsIDM2LCAzLCAyMjksIDksIDM2LCAzLCAyMjksIDQsIDM2LCAzLCAyMjksIDcxLCAzNiwgMywgCisgICAgMjUxLCA0MCwgMzYsIDMsIDI1MCwgNTksIDM2LCAzLCAyNTAsIDQ5LCAzNiwgMywgMjQ5LCAxMjAsIDM2LCAzLCAyNDksIDkxLCAKKyAgICAzNiwgMywgMjUwLCAxOTgsIDM2LCAzLCAyNTAsIDE5MCwgMzYsIDMsIDI1MSwgMzAsIDM2LCAzLCAyNDksIDI0NiwgMzYsIDMsIAorICAgIDI0OSwgMTgyLCAzNiwgMywgMjUwLCAyMzAsIDM2LCAzLCAyMjcsIDE2OCwgMzYsIDMsIDIyNywgMTUyLCAzNiwgMywgMjI3LCAKKyAgICAxNDcsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTI1LCAzNiwgMywgMjI3LCAxNjAsIDM2LCAzLCAyMjcsIDE1OSwgCisgICAgMzYsIDMsIDIyNywgMTY1LCAzNiwgMywgMjI3LCAxMzgsIDM2LCAzLCAyMjcsIDEzNiwgMzYsIDMsIDIyNywgMTYzLCAzNiwgCisgICAgMywgMjE1LCAxNTYsIDM2LCAzLCAyMTUsIDEzNiwgMzYsIDMsIDIxNSwgMTM1LCAzNiwgMywgMjE1LCAxMjQsIDM2LCAzLCAKKyAgICAyMTUsIDEyMSwgMzYsIDMsIDIxNSwgMTUyLCAzNiwgMywgMjE1LCAxNTEsIDM2LCAzLCAyMTUsIDE1NSwgMzYsIDMsIDIxNSwgCisgICAgMTM0LCAzNiwgMywgMjE1LCAxMzMsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIyOCwgMTE0LCAzNiwgMywgMjI4LCAxMDAsIAorICAgIDM2LCAzLCAyMjgsIDk5LCAzNiwgMywgMjI4LCA4MywgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDExMCwgMzYsIDMsIAorICAgIDIyOCwgMTA5LCAzNiwgMywgMjI4LCAxMTMsIDM2LCAzLCAyMjgsIDg1LCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgCisgICAgMTEyLCAzNiwgMywgMjE3LCAxMDIsIDM2LCAzLCAyMTYsIDExOCwgMzYsIDMsIDIxNiwgMTA0LCAzNiwgMywgMjE1LCAxMTksIAorICAgIDM2LCAzLCAyMTUsIDg1LCAzNiwgMywgMjE3LCAyMywgMzYsIDMsIDIxNywgMTIsIDM2LCAzLCAyMTcsIDgwLCAzNiwgMywgCisgICAgMTEyLCAzNiwgMywgMjE2LCAxOCwgMzYsIDMsIDIxNywgNDIsIDM2LCAzLCAyMjksIDIzMCwgMzYsIDMsIDIyOCwgMjM4LCAKKyAgICAzNiwgMywgMjI4LCAyMTMsIDM2LCAzLCAyMjcsIDI0MiwgMzYsIDMsIDIyNywgMTgzLCAzNiwgMywgMjI5LCAxMTIsIDM2LCAKKyAgICAzLCAyMjksIDEwOCwgMzYsIDMsIDIyOSwgMjE3LCAzNiwgMywgMjI4LCA3OSwgMzYsIDMsIDIyOCwgNjksIDM2LCAzLCAyMjksIAorICAgIDE5MiwgMzYsIDMsIDIyNiwgOTMsIDM2LCAzLCAyMjUsIDExMSwgMzYsIDMsIDIyNSwgNzQsIDM2LCAzLCAyMjQsIDE1MywgCisgICAgMzYsIDMsIDIyNCwgMTIyLCAzNiwgMywgMjI1LCAyMjQsIDM2LCAzLCAyMjUsIDIxNCwgMzYsIDMsIDIyNiwgNzUsIDM2LCAzLCAKKyAgICAyMjUsIDE5LCAzNiwgMywgMjI0LCAyNTIsIDM2LCAzLCAyMjUsIDIzOCwgMzYsIDMsIDIzMSwgMjQyLCAzNiwgMywgMjMwLCAKKyAgICAyMzUsIDM2LCAzLCAyMzAsIDIwNiwgMzYsIDMsIDIzMCwgMTA3LCAzNiwgMywgMjMwLCA1OSwgMzYsIDMsIDIzMSwgOTYsIAorICAgIDM2LCAzLCAyMzEsIDg1LCAzNiwgMywgMjMxLCAyMDgsIDM2LCAzLCAyMzAsIDE2NiwgMzYsIDMsIDIzMCwgMTM3LCAzNiwgMywgCisgICAgMjMxLCAxNDAsIDM2LCAzLCAyMTEsIDEwMywgMzYsIDMsIDIxMSwgOCwgMzYsIDMsIDIxMCwgMjU1LCAzNiwgMywgMjEwLCAKKyAgICAyMTIsIDM2LCAzLCAyMTAsIDE4MSwgMzYsIDMsIDIxMSwgNDcsIDM2LCAzLCAyMTEsIDQ0LCAzNiwgMywgMjExLCA4MiwgMzYsIAorICAgIDMsIDIxMCwgMjQ0LCAzNiwgMywgMjEwLCAyMjksIDM2LCAzLCAyMTEsIDU1LCAzNiwgMywgMjIzLCAxODcsIDM2LCAzLCAKKyAgICAyMjMsIDM4LCAzNiwgMywgMjIyLCAyNDIsIDM2LCAzLCAyMjIsIDE0MiwgMzYsIDMsIDIyMiwgMTE0LCAzNiwgMywgMjIzLCAKKyAgICAxMzEsIDM2LCAzLCAyMjMsIDExMSwgMzYsIDMsIDIyMywgMTY5LCAzNiwgMywgMjIyLCAyMTMsIDM2LCAzLCAyMjIsIDE5OSwgCisgICAgMzYsIDMsIDIyMywgMTM5LCAzNiwgMywgMjMzLCAxNDAsIDM2LCAzLCAyMzIsIDI0NywgMzYsIDMsIDIzMiwgMjMzLCAzNiwgCisgICAgMywgMjMyLCAxMDMsIDM2LCAzLCAyMzIsIDc4LCAzNiwgMywgMjMzLCA2NCwgMzYsIDMsIDIzMywgNTYsIDM2LCAzLCAyMzMsIAorICAgIDExNSwgMzYsIDMsIDIzMiwgMTYyLCAzNiwgMywgMjMyLCAxMzMsIDM2LCAzLCAyMzMsIDgwLCAzNiwgMywgMjE0LCAyNiwgCisgICAgMzYsIDMsIDIxMywgMTc2LCAzNiwgMywgMjEzLCAxNjIsIDM2LCAzLCAyMTIsIDExNiwgMzYsIDMsIDIxMiwgMTA5LCAzNiwgCisgICAgMywgMjEzLCAyNTUsIDM2LCAzLCAyMTMsIDI1MCwgMzYsIDMsIDIxNCwgMjMsIDM2LCAzLCAyMTMsIDEzOCwgMzYsIDMsIAorICAgIDIxMywgMTI3LCAzNiwgMywgMjE0LCA1LCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAyMzIsIDE3NSwgMzYsIDMsIDIzMiwgCisgICAgMTc0LCAzNiwgMywgMjMyLCAxNzEsIDM2LCAzLCAyMzIsIDE3MCwgMzYsIDMsIDIzMiwgMTc3LCAzNiwgMywgMjMyLCAxNzYsIAorICAgIDM2LCAzLCAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTczLCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE3OCwgMzYsIAorICAgIDMsIDIzMiwgMTg5LCAzNiwgMywgMjMyLCAxODQsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTY3LCAzNiwgMywgCisgICAgMjMyLCAxNjYsIDM2LCAzLCAyMzIsIDE4NiwgMzYsIDMsIDIzMiwgMTg1LCAzNiwgMywgMjMyLCAxODgsIDM2LCAzLCAyMzIsIAorICAgIDE2OSwgMzYsIDMsIDIzMiwgMTY4LCAzNiwgMywgMjMyLCAxODcsIDM2LCAzLCAyMjIsIDE4MCwgMzYsIDMsIDIyMiwgMTY5LCAKKyAgICAzNiwgMywgMjIyLCAxNjgsIDM2LCAzLCAyMjIsIDE2MiwgMzYsIDMsIDIyMiwgMTU1LCAzNiwgMywgMjIyLCAxNzYsIDM2LCAKKyAgICAzLCAyMjIsIDE3NSwgMzYsIDMsIDIyMiwgMTc5LCAzNiwgMywgMjIyLCAxNjcsIDM2LCAzLCAyMjIsIDE2NiwgMzYsIDMsIAorICAgIDIyMiwgMTc4LCAzNiwgMywgMjI4LCA5NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NywgCisgICAgMzYsIDMsIDIyOCwgODYsIDM2LCAzLCAyMjgsIDkzLCAzNiwgMywgMjI4LCA5MiwgMzYsIDMsIDIyOCwgOTUsIDM2LCAzLCAKKyAgICAyMjgsIDg5LCAzNiwgMywgMjI4LCA4OCwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMzUsIDE0NiwgMzYsIDMsIDIzNSwgCisgICAgMTE0LCAzNiwgMywgMjM1LCAxMDcsIDM2LCAzLCAyMzUsIDU3LCAzNiwgMywgMjM1LCAzOSwgMzYsIDMsIDIzNSwgMTMyLCAKKyAgICAzNiwgMywgMjM1LCAxMzAsIDM2LCAzLCAyMzUsIDE0MSwgMzYsIDMsIDIzNSwgNzQsIDM2LCAzLCAyMzUsIDY1LCAzNiwgMywgCisgICAgMjM1LCAxMzUsIDM2LCAzLCAyMjAsIDEwMCwgMzYsIDMsIDIyMCwgMzQsIDM2LCAzLCAyMjAsIDI5LCAzNiwgMywgMjE5LCAKKyAgICAyMjcsIDM2LCAzLCAyMTksIDIxMiwgMzYsIDMsIDIyMCwgNjUsIDM2LCAzLCAyMjAsIDYzLCAzNiwgMywgMjIwLCA5MiwgMzYsIAorICAgIDMsIDIyMCwgOSwgMzYsIDMsIDIyMCwgMywgMzYsIDMsIDIyMCwgNzMsIDM2LCAzLCAyMTgsIDIyNCwgMzYsIDMsIDIxOCwgCisgICAgMTk0LCAzNiwgMywgMjE4LCAxOTAsIDM2LCAzLCAyMTgsIDE4MSwgMzYsIDMsIDIxOCwgMTc4LCAzNiwgMywgMjE4LCAxOTksIAorICAgIDM2LCAzLCAyMTgsIDE5OCwgMzYsIDMsIDIxOCwgMjIzLCAzNiwgMywgMjE4LCAxODYsIDM2LCAzLCAyMTgsIDE4NSwgMzYsIAorICAgIDMsIDIxOCwgMjAxLCAzNiwgMywgMjIyLCAzMywgMzYsIDMsIDIxOSwgMTkzLCAzNiwgMywgMjE5LCAxNzcsIDM2LCAzLCAKKyAgICAyMTgsIDg0LCAzNiwgMywgMjE4LCA1LCAzNiwgMywgMjIxLCAxODMsIDM2LCAzLCAyMjEsIDE3MiwgMzYsIDMsIDIyMiwgMTksIAorICAgIDM2LCAzLCAyMTksIDYwLCAzNiwgMywgMjE5LCA0MiwgMzYsIDMsIDIyMSwgMjIxLCAzNiwgMywgMjQyLCA1MywgMzYsIDMsIAorICAgIDI0MSwgMTg3LCAzNiwgMywgMjQxLCAxNjgsIDM2LCAzLCAyNDAsIDIyOSwgMzYsIDMsIDI0MCwgMjA5LCAzNiwgMywgMjQxLCAKKyAgICAyNDUsIDM2LCAzLCAyNDEsIDIyNywgMzYsIDMsIDI0MiwgNDMsIDM2LCAzLCAyNDEsIDc1LCAzNiwgMywgMjQxLCA2MCwgMzYsIAorICAgIDMsIDI0MSwgMjUzLCAzNiwgMywgMjMzLCAyMzcsIDM2LCAzLCAyMzMsIDIzNiwgMzYsIDMsIDIzMywgMjMxLCAzNiwgMywgCisgICAgMjMzLCAyMzAsIDM2LCAzLCAyMzMsIDIyNywgMzYsIDMsIDIzMywgMjI2LCAzNiwgMywgMjMzLCAyMzMsIDM2LCAzLCAyMzMsIAorICAgIDIzMiwgMzYsIDMsIDIzMywgMjM1LCAzNiwgMywgMjMzLCAyMjksIDM2LCAzLCAyMzMsIDIyOCwgMzYsIDMsIDIzMywgMjM0LCAKKyAgICAzNiwgMywgMjE5LCAyMzMsIDE3NSwgMTE3LCA1LCAyMTEsIDY4LCAxNzUsIDExNywgNSwgMjIzLCAxNTgsIDE3NSwgMTE3LCAKKyAgICA1LCAyMjMsIDgxLCA5OCwgMSwgMjE1LCAyOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE3NiwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIzNCwgMTM4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAzNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzNCwgCisgICAgMTExLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI5LCA5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjUxLCA0MSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MCwgMTY1LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjQ5LCAyNDYsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyNTAsIDk0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI3LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyNDgsIDIyOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQ1LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjQ3LCAxNTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTUsIDE0MCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE5OCwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDIxNywgMTA2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE2LCAyMDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAxMTIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDE1NywgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyOCwgNzksIDcwLCAKKyAgICAxMTcsIDUsIDI0OSwgMjQxLCAyNTIsIDE5OSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNSwgMTUwLCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjI1LCAxOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNSwgMTI0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMjMwLCAxNjYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTAsIDI0NCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyMiwgMjEzLCAKKyAgICA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjMyLCAxNjIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTMsIDEzOCwgNzAsIDExNywgCisgICAgNSwgMjQ5LCAyNDEsIDIyMCwgMTA0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE4LCAyMjUsIDcwLCAxMTcsIDUsIDI0OSwgCisgICAgMjQxLCAyMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxNjIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzMsIDE0MSwgNzAsIAorICAgIDI1LCA1LCAyNDksIDI0MSwgMjI0LCA5MSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgMzMsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjIsIDEwMiwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgCisgICAgOTUsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDcyLCA3MCwgMjUsIDUsIDIyNiwgMjA4LCA3MCwgMjUsIAorICAgIDUsIDI1NSwgNDMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDgyLCAxNDEsIDEsIDI1MiwgNywgMjI5LCAzMiwgMTQxLCAxLCAKKyAgICAyNTIsIDcsIDIyOCwgMjUzLCAxNDEsIDEsIDI1MiwgNywgMjI5LCA2OSwgMTQxLCAxLCAyNTIsIDcsIDIyOSwgOSwgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA4MiwgNTYsIDEsIDI1MiwgNywgMjI5LCAzMiwgNTYsIDEsIDI1MiwgNywgMjI4LCAyNTMsIDU2LCAxLCAKKyAgICAyNTIsIDcsIDIyOSwgNjksIDU2LCAxLCAyNTIsIDcsIDIyOSwgOSwgNTYsIDEsIDI1NCwgMjAzLCAyNTAsIDE5OCwgNTYsIDEsIAorICAgIDI1NCwgMjAzLCAyMTUsIDExOSwgNTYsIDEsIDI1NCwgMjAzLCAxMTIsIDU2LCAxLCAyNTQsIDIwMywgMjI2LCAxMDksIDU4LCAKKyAgICAxLCAyNDUsIDI4LCAyNDUsIDI3LCAyNDksIDE5MCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyNDUsIDI4LCAyNDksIAorICAgIDE5MCwgMTM4LCAxMzAsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va19vZmZzZXQxW10gPSB7CkBAIC0xNDQzMSwyNDUxICsxNDQ0OCwyNDUxIEBACiAgICAgODY0NywgMCwgMCwgMCwgMCwgMCwgODY1MSwgODY1OCwgODY2NiwgODY3MywgODY3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgODY4MywgODY4NiwgODY5MCwgODY5NSwgODY5OSwgMCwgODcwMywgODcwOSwgODcxNSwgODcxOCwgCiAgICAgODcyNSwgODczNCwgODczNywgODc0MCwgODc0NSwgODc1MSwgODc1NSwgODc2MywgODc2OSwgODc3NSwgODc4MywgODc4NywgCi0gICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgMCwgMCwgODgyMywgODgzMCwgODgzNCwgODg0MCwgODg0NCwgCi0gICAgODg1MSwgODg1NywgODg2NCwgODg3MCwgODg3NiwgODg4MCwgODg4NCwgODg5MCwgODg5NCwgODg5OCwgODkwMiwgODkwNiwgCi0gICAgODkxMCwgODkxNCwgODkxOCwgODkyMiwgODkyNiwgODkzMCwgODkzNCwgODkzOCwgODk0MiwgODk0NiwgODk1MCwgODk1NCwgCi0gICAgODk1OCwgODk2NiwgODk3NCwgODk4NCwgODk5MywgOTAwMiwgOTAwNSwgOTAwOSwgOTAxMywgOTAxNywgOTAyMSwgOTAyNSwgCi0gICAgOTAyOSwgOTAzMywgOTAzNywgOTA0MiwgOTA0NiwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCi0gICAgOTA3MCwgOTA3NCwgOTA3NywgOTA4MCwgOTA4NSwgOTA5MCwgOTA5NiwgOTA5OSwgOTEwNiwgOTExNSwgOTEyMCwgOTEyNSwgCi0gICAgOTEzMiwgOTEzNywgOTE0MiwgOTE0NiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2MiwgOTE2NiwgOTE3MCwgOTE3NCwgOTE3OCwgCi0gICAgOTE4MiwgOTE4NywgOTE5MiwgOTE5OSwgOTIwNSwgOTIxMSwgOTIxNywgOTIyMiwgOTIzMCwgOTIzOCwgOTI0MywgOTI0OSwgCi0gICAgOTI1NSwgOTI2MSwgOTI2NywgOTI3MSwgOTI3NSwgOTI3OSwgOTI4NiwgOTI5NiwgOTMwMCwgOTMwNCwgOTMwOCwgOTMxNCwgCi0gICAgOTMyMiwgOTMyNiwgOTMzMCwgOTMzNywgOTM0MSwgOTM0NSwgOTM0OSwgOTM1NiwgOTM2MywgOTM3NSwgOTM3OSwgOTM4MywgCi0gICAgOTM4NywgOTM5NywgOTQwNiwgOTQxMCwgOTQxOCwgOTQyNSwgOTQzMiwgOTQ0MSwgOTQ1MiwgOTQ2MCwgOTQ2NCwgOTQ3MywgCi0gICAgOTQ4NCwgOTQ5MiwgOTUwNSwgOTUxMywgOTUyMSwgOTUyOSwgOTUzNywgOTU0MywgOTU1MiwgOTU1OSwgOTU2MywgOTU3MSwgCi0gICAgOTU3NSwgOTU4MiwgOTU5MCwgOTU5NCwgOTYwMCwgOTYwNywgOTYxNCwgOTYxOCwgOTYyNiwgOTYzMCwgOTYzNywgOTY0MSwgCi0gICAgOTY0OSwgOTY1MywgOTY2MSwgOTY2OSwgOTY3NiwgOTY4NCwgOTY5MiwgOTY5OSwgOTcwNSwgOTcwOSwgOTcxNiwgOTcyNCwgCi0gICAgOTczMCwgOTczNywgOTc0NCwgOTc1MCwgOTc1OSwgOTc2NywgOTc3NCwgOTc4MCwgOTc4NCwgOTc4NywgOTc5MSwgOTc5NywgCi0gICAgOTgwNSwgOTgwOSwgOTgxNSwgOTgyMSwgOTgyOCwgOTgzNSwgOTgzOCwgOTg0NSwgOTg1MCwgOTg1OCwgOTg2MywgOTg2NywgCi0gICAgOTg4MCwgOTg5MywgOTg5OSwgOTkwNiwgOTkxMSwgOTkxNywgOTkyMiwgOTkyOCwgOTkzOCwgOTk0NSwgOTk1NCwgOTk2NCwgCi0gICAgOTk3MCwgOTk3NSwgOTk4MCwgOTk4NCwgOTk4OCwgOTk5MywgOTk5OCwgMTAwMDQsIDEwMDEyLCAxMDAyMCwgMTAwMzEsIAotICAgIDEwMDM2LCAxMDA0NSwgMTAwNTQsIDEwMDYxLCAxMDA2NywgMTAwNzMsIDEwMDc5LCAxMDA4NSwgMTAwOTEsIDEwMDk3LCAKLSAgICAxMDEwMywgMTAxMDksIDEwMTE1LCAxMDEyMiwgMTAxMjksIDEwMTM2LCAxMDE0MiwgMTAxNTAsIDEwMTU5LCAxMDE2NSwgCi0gICAgMTAxNzIsIDEwMTc5LCAxMDE4NCwgMTAxODksIDEwMTkzLCAxMDIwMCwgMTAyMDcsIDEwMjE2LCAxMDIyNSwgMTAyMjgsIAotICAgIDEwMjMzLCAxMDIzOCwgMCwgMTAyNDMsIDEwMjQ3LCAxMDI1MSwgMTAyNTcsIDEwMjYxLCAxMDI2NSwgMTAyNzEsIDEwMjc1LCAKLSAgICAxMDI4MywgMTAyODcsIDEwMjkxLCAxMDI5NSwgMTAyOTksIDEwMzAzLCAxMDMwOSwgMTAzMTMsIDEwMzE5LCAxMDMyMywgCi0gICAgMTAzMjcsIDEwMzMxLCAxMDMzNSwgMTAzMzksIDEwMzQ0LCAxMDM0NywgMTAzNTEsIDEwMzU3LCAxMDM2MSwgMTAzNjUsIAotICAgIDEwMzY5LCAxMDM3MywgMTAzNzcsIDEwMzgzLCAxMDM4OSwgMTAzOTUsIDEwMzk5LCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICAxMDQxNiwgMTA0MjEsIDEwNDI1LCAxMDQyOSwgMTA0MzYsIDEwNDQzLCAxMDQ0NywgMTA0NTEsIDEwNDU2LCAxMDQ2MCwgCi0gICAgMTA0NjQsIDEwNDY3LCAxMDQ3MiwgMTA0NzUsIDEwNDc4LCAxMDQ4MywgMTA0ODgsIDEwNDkyLCAxMDQ5NiwgMTA1MDIsIAotICAgIDEwNTA4LCAxMDUxMSwgMCwgMCwgMTA1MTQsIDEwNTIwLCAxMDUyNiwgMTA1MzIsIDEwNTQyLCAxMDU1NCwgMTA1NjYsIAotICAgIDEwNTgzLCAxMDU5NSwgMTA2MDYsIDEwNjE0LCAxMDYyMSwgMTA2MzIsIDEwNjQ3LCAxMDY1OCwgMTA2NjQsIDEwNjczLCAKLSAgICAxMDY4MSwgMTA2OTMsIDEwNzAzLCAxMDcxMSwgMTA3MjMsIDEwNzMwLCAxMDczOCwgMTA3NTAsIDEwNzU2LCAxMDc2MiwgCi0gICAgMTA3NzAsIDEwNzc4LCAxMDc4NiwgMTA3OTIsIDEwODAyLCAxMDgwOSwgMTA4MTksIDEwODI5LCAxMDg0MiwgMTA4NTYsIAotICAgIDEwODcwLCAxMDg4MCwgMTA4OTEsIDEwOTAyLCAxMDkxNSwgMTA5MjgsIDEwOTQyLCAxMDk1NCwgMTA5NjYsIDEwOTc5LCAKLSAgICAxMDk5MiwgMTEwMDQsIDExMDE3LCAxMTAyNiwgMTEwMzQsIDExMDM5LCAxMTA0NCwgMTEwNDksIDExMDU0LCAxMTA1OSwgCi0gICAgMTEwNjQsIDExMDY5LCAxMTA3NCwgMTEwNzksIDExMDg0LCAxMTA4OSwgMTEwOTQsIDExMDk5LCAxMTEwNCwgMTExMDksIAotICAgIDExMTE0LCAxMTExOSwgMTExMjQsIDExMTI5LCAxMTEzNCwgMTExMzksIDExMTQ0LCAxMTE0OSwgMTExNTQsIDExMTU5LCAKLSAgICAxMTE2NCwgMTExNjksIDExMTc0LCAxMTE3OSwgMTExODQsIDExMTg5LCAxMTE5NCwgMTExOTgsIDExMjAzLCAxMTIwOCwgCi0gICAgMTEyMTMsIDExMjE4LCAxMTIyMywgMTEyMjcsIDExMjMxLCAxMTIzNSwgMTEyMzksIDExMjQzLCAxMTI0NywgMTEyNTEsIAotICAgIDExMjU1LCAxMTI1OSwgMTEyNjMsIDExMjY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTI3MiwgMTEyNzcsIDExMjgxLCAxMTI4NSwgMTEyODksIDExMjkzLCAxMTI5NywgMTEzMDEsIDExMzA1LCAxMTMwOSwgCi0gICAgMTEzMTMsIDExMzE3LCAxMTMyMiwgMTEzMjYsIDExMzMwLCAxMTMzNCwgMTEzMzksIDExMzQzLCAxMTM0OCwgMTEzNTMsIAotICAgIDExMzU4LCAxMTM2MiwgMTEzNjcsIDExMzcyLCAxMTM3NywgMTEzODIsIDExMzg2LCAxMTM5MSwgMTEzOTUsIDExNDAwLCAKLSAgICAxMTQwNSwgMTE0MDksIDExNDE0LCAxMTQyMSwgMTE0MjUsIDExNDMwLCAxMTQzNCwgMTE0MzgsIDExNDQzLCAxMTQ0NywgCi0gICAgMTE0NTQsIDExNDYxLCAxMTQ2OCwgMTE0NzQsIDExNDgyLCAxMTQ5MCwgMTE0OTksIDExNTA3LCAxMTUxNCwgMTE1MjEsIAotICAgIDExNTI5LCAxMTUzNSwgMTE1NDEsIDExNTQ3LCAxMTU1MywgMTE1NjAsIDExNTY1LCAxMTU2OSwgMTE1NzQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDExNTc4LCAxMTU4MywgMTE1ODgsIDExNTkzLCAxMTU5OCwgMTE2MDMsIDExNjA4LCAxMTYxMywgMTE2MTgsIAotICAgIDExNjIzLCAxMTYyOCwgMTE2MzMsIDExNjM4LCAxMTY0MywgMTE2NDgsIDExNjUzLCAxMTY1OCwgMTE2NjMsIDExNjY4LCAKLSAgICAxMTY3MywgMTE2NzgsIDExNjgzLCAxMTY4OCwgMTE2OTMsIDExNjk4LCAxMTcwMywgMTE3MDgsIDExNzE2LCAxMTcyMywgCi0gICAgMTE3MjksIDExNzM0LCAxMTc0MiwgMTE3NDksIDExNzU1LCAxMTc2MiwgMTE3NjgsIDExNzczLCAxMTc4MCwgMTE3ODcsIAotICAgIDExNzkzLCAxMTc5OCwgMTE4MDMsIDExODA5LCAxMTgxNCwgMTE4MTksIDExODI1LCAwLCAwLCAxMTgzMCwgMTE4MzYsIAotICAgIDExODQyLCAxMTg0OCwgMTE4NTQsIDExODYwLCAxMTg2NiwgMTE4NzEsIDExODc5LCAxMTg4NSwgMTE4OTEsIDExODk3LCAKLSAgICAxMTkwMywgMTE5MDksIDExOTE3LCAwLCAxMTkyMywgMTE5MjgsIDExOTMzLCAxMTkzOCwgMTE5NDMsIDExOTQ4LCAxMTk1MywgCi0gICAgMTE5NTgsIDExOTYzLCAxMTk2OCwgMTE5NzMsIDExOTc4LCAxMTk4MywgMTE5ODgsIDExOTkzLCAxMTk5OCwgMTIwMDMsIAotICAgIDEyMDA4LCAxMjAxMywgMTIwMTgsIDEyMDIzLCAxMjAyOCwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNDgsIDEyMDUzLCAKLSAgICAxMjA1OCwgMCwgMCwgMTIwNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDg3OTIsIDg4MDMsIDg4MDgsIDg4MTIsIDg4MTYsIDg4MjAsIDg4MjMsIDAsIDg4MjYsIDg4MzMsIDg4MzcsIDg4NDMsIAorICAgIDg4NDcsIDg4NTQsIDg4NjAsIDg4NjcsIDg4NzMsIDg4NzksIDg4ODMsIDg4ODcsIDg4OTMsIDg4OTcsIDg5MDEsIDg5MDUsIAorICAgIDg5MDksIDg5MTMsIDg5MTcsIDg5MjEsIDg5MjUsIDg5MjksIDg5MzMsIDg5MzcsIDg5NDEsIDg5NDUsIDg5NDksIDg5NTMsIAorICAgIDg5NTcsIDg5NjEsIDg5NjksIDg5NzcsIDg5ODcsIDg5OTYsIDkwMDUsIDkwMDgsIDkwMTIsIDkwMTYsIDkwMjAsIDkwMjQsIAorICAgIDkwMjgsIDkwMzIsIDkwMzYsIDkwNDAsIDkwNDUsIDkwNDksIDkwNTIsIDkwNTUsIDkwNTgsIDkwNjEsIDkwNjQsIDkwNjcsIAorICAgIDkwNzAsIDkwNzMsIDkwNzcsIDkwODAsIDkwODMsIDkwODgsIDkwOTMsIDkwOTksIDkxMDIsIDkxMDksIDkxMTgsIDkxMjMsIAorICAgIDkxMjgsIDkxMzUsIDkxNDAsIDkxNDUsIDkxNDksIDkxNTMsIDkxNTcsIDkxNjEsIDkxNjUsIDkxNjksIDkxNzMsIDkxNzcsIAorICAgIDkxODEsIDkxODUsIDkxOTAsIDkxOTUsIDkyMDIsIDkyMDgsIDkyMTQsIDkyMjAsIDkyMjUsIDkyMzMsIDkyNDEsIDkyNDYsIAorICAgIDkyNTIsIDkyNTgsIDkyNjQsIDkyNzAsIDkyNzQsIDkyNzgsIDkyODIsIDkyODksIDkyOTksIDkzMDMsIDkzMDcsIDkzMTEsIAorICAgIDkzMTcsIDkzMjUsIDkzMjksIDkzMzMsIDkzNDAsIDkzNDQsIDkzNDgsIDkzNTIsIDkzNTksIDkzNjYsIDkzNzgsIDkzODIsIAorICAgIDkzODYsIDkzOTAsIDk0MDAsIDk0MDksIDk0MTMsIDk0MjEsIDk0MjgsIDk0MzUsIDk0NDQsIDk0NTUsIDk0NjMsIDk0NjcsIAorICAgIDk0NzYsIDk0ODcsIDk0OTUsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NDAsIDk1NDYsIDk1NTUsIDk1NjIsIDk1NjYsIAorICAgIDk1NzQsIDk1NzgsIDk1ODUsIDk1OTMsIDk1OTcsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjEsIDk2MjksIDk2MzMsIDk2NDAsIAorICAgIDk2NDQsIDk2NTIsIDk2NTYsIDk2NjQsIDk2NzIsIDk2NzksIDk2ODcsIDk2OTUsIDk3MDIsIDk3MDgsIDk3MTIsIDk3MTksIAorICAgIDk3MjcsIDk3MzMsIDk3NDAsIDk3NDcsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzcsIDk3ODMsIDk3ODcsIDk3OTAsIDk3OTQsIAorICAgIDk4MDAsIDk4MDgsIDk4MTIsIDk4MTgsIDk4MjQsIDk4MzEsIDk4MzgsIDk4NDEsIDk4NDgsIDk4NTMsIDk4NjEsIDk4NjYsIAorICAgIDk4NzAsIDk4ODMsIDk4OTYsIDk5MDIsIDk5MDksIDk5MTQsIDk5MjAsIDk5MjUsIDk5MzEsIDk5NDEsIDk5NDgsIDk5NTcsIAorICAgIDk5NjcsIDk5NzMsIDk5NzgsIDk5ODMsIDk5ODcsIDk5OTEsIDk5OTYsIDEwMDAxLCAxMDAwNywgMTAwMTUsIDEwMDIzLCAKKyAgICAxMDAzNCwgMTAwMzksIDEwMDQ4LCAxMDA1NywgMTAwNjQsIDEwMDcwLCAxMDA3NiwgMTAwODIsIDEwMDg4LCAxMDA5NCwgCisgICAgMTAxMDAsIDEwMTA2LCAxMDExMiwgMTAxMTgsIDEwMTI1LCAxMDEzMiwgMTAxMzksIDEwMTQ1LCAxMDE1MywgMTAxNjIsIAorICAgIDEwMTY4LCAxMDE3NSwgMTAxODIsIDEwMTg3LCAxMDE5MiwgMTAxOTYsIDEwMjAzLCAxMDIxMCwgMTAyMTksIDEwMjI4LCAKKyAgICAxMDIzMSwgMTAyMzYsIDEwMjQxLCAwLCAxMDI0NiwgMTAyNTAsIDEwMjU0LCAxMDI2MCwgMTAyNjQsIDEwMjY4LCAxMDI3NCwgCisgICAgMTAyNzgsIDEwMjg2LCAxMDI5MCwgMTAyOTQsIDEwMjk4LCAxMDMwMiwgMTAzMDYsIDEwMzEyLCAxMDMxNiwgMTAzMjIsIAorICAgIDEwMzI2LCAxMDMzMCwgMTAzMzQsIDEwMzM4LCAxMDM0MiwgMTAzNDcsIDEwMzUwLCAxMDM1NCwgMTAzNjAsIDEwMzY0LCAKKyAgICAxMDM2OCwgMTAzNzIsIDEwMzc2LCAxMDM4MCwgMTAzODYsIDEwMzkyLCAxMDM5OCwgMTA0MDIsIDEwNDA2LCAxMDQxMSwgCisgICAgMTA0MTUsIDEwNDE5LCAxMDQyNCwgMTA0MjgsIDEwNDMyLCAxMDQzOSwgMTA0NDYsIDEwNDUwLCAxMDQ1NCwgMTA0NTksIAorICAgIDEwNDYzLCAxMDQ2NywgMTA0NzAsIDEwNDc1LCAxMDQ3OCwgMTA0ODEsIDEwNDg2LCAxMDQ5MSwgMTA0OTUsIDEwNDk5LCAKKyAgICAxMDUwNSwgMTA1MTEsIDEwNTE0LCAwLCAwLCAxMDUxNywgMTA1MjMsIDEwNTI5LCAxMDUzNSwgMTA1NDUsIDEwNTU3LCAKKyAgICAxMDU2OSwgMTA1ODYsIDEwNTk4LCAxMDYwOSwgMTA2MTcsIDEwNjI0LCAxMDYzNSwgMTA2NTAsIDEwNjYxLCAxMDY2NywgCisgICAgMTA2NzYsIDEwNjg0LCAxMDY5NiwgMTA3MDYsIDEwNzE0LCAxMDcyNiwgMTA3MzMsIDEwNzQxLCAxMDc1MywgMTA3NTksIAorICAgIDEwNzY1LCAxMDc3MywgMTA3ODEsIDEwNzg5LCAxMDc5NSwgMTA4MDUsIDEwODEyLCAxMDgyMiwgMTA4MzIsIDEwODQ1LCAKKyAgICAxMDg1OSwgMTA4NzMsIDEwODgzLCAxMDg5NCwgMTA5MDUsIDEwOTE4LCAxMDkzMSwgMTA5NDUsIDEwOTU3LCAxMDk2OSwgCisgICAgMTA5ODIsIDEwOTk1LCAxMTAwNywgMTEwMjAsIDExMDI5LCAxMTAzNywgMTEwNDIsIDExMDQ3LCAxMTA1MiwgMTEwNTcsIAorICAgIDExMDYyLCAxMTA2NywgMTEwNzIsIDExMDc3LCAxMTA4MiwgMTEwODcsIDExMDkyLCAxMTA5NywgMTExMDIsIDExMTA3LCAKKyAgICAxMTExMiwgMTExMTcsIDExMTIyLCAxMTEyNywgMTExMzIsIDExMTM3LCAxMTE0MiwgMTExNDcsIDExMTUyLCAxMTE1NywgCisgICAgMTExNjIsIDExMTY3LCAxMTE3MiwgMTExNzcsIDExMTgyLCAxMTE4NywgMTExOTIsIDExMTk3LCAxMTIwMSwgMTEyMDYsIAorICAgIDExMjExLCAxMTIxNiwgMTEyMjEsIDExMjI2LCAxMTIzMCwgMTEyMzQsIDExMjM4LCAxMTI0MiwgMTEyNDYsIDExMjUwLCAKKyAgICAxMTI1NCwgMTEyNTgsIDExMjYyLCAxMTI2NiwgMTEyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDExMjc1LCAxMTI4MCwgMTEyODQsIDExMjg4LCAxMTI5MiwgMTEyOTYsIDExMzAwLCAxMTMwNCwgMTEzMDgsIDExMzEyLCAKKyAgICAxMTMxNiwgMTEzMjAsIDExMzI1LCAxMTMyOSwgMTEzMzMsIDExMzM3LCAxMTM0MiwgMTEzNDYsIDExMzUxLCAxMTM1NiwgCisgICAgMTEzNjEsIDExMzY1LCAxMTM3MCwgMTEzNzUsIDExMzgwLCAxMTM4NSwgMTEzODksIDExMzk0LCAxMTM5OCwgMTE0MDMsIAorICAgIDExNDA4LCAxMTQxMiwgMTE0MTcsIDExNDI0LCAxMTQyOCwgMTE0MzMsIDExNDM3LCAxMTQ0MSwgMTE0NDYsIDExNDUwLCAKKyAgICAxMTQ1NywgMTE0NjQsIDExNDcxLCAxMTQ3NywgMTE0ODUsIDExNDkzLCAxMTUwMiwgMTE1MTAsIDExNTE3LCAxMTUyNCwgCisgICAgMTE1MzIsIDExNTM4LCAxMTU0NCwgMTE1NTAsIDExNTU2LCAxMTU2MywgMTE1NjgsIDExNTcyLCAxMTU3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMTE1ODEsIDExNTg2LCAxMTU5MSwgMTE1OTYsIDExNjAxLCAxMTYwNiwgMTE2MTEsIDExNjE2LCAxMTYyMSwgCisgICAgMTE2MjYsIDExNjMxLCAxMTYzNiwgMTE2NDEsIDExNjQ2LCAxMTY1MSwgMTE2NTYsIDExNjYxLCAxMTY2NiwgMTE2NzEsIAorICAgIDExNjc2LCAxMTY4MSwgMTE2ODYsIDExNjkxLCAxMTY5NiwgMTE3MDEsIDExNzA2LCAxMTcxMSwgMTE3MTksIDExNzI2LCAKKyAgICAxMTczMiwgMTE3MzcsIDExNzQ1LCAxMTc1MiwgMTE3NTgsIDExNzY1LCAxMTc3MSwgMTE3NzYsIDExNzgzLCAxMTc5MCwgCisgICAgMTE3OTYsIDExODAxLCAxMTgwNiwgMTE4MTIsIDExODE3LCAxMTgyMiwgMTE4MjgsIDAsIDAsIDExODMzLCAxMTgzOSwgCisgICAgMTE4NDUsIDExODUxLCAxMTg1NywgMTE4NjMsIDExODY5LCAxMTg3NCwgMTE4ODIsIDExODg4LCAxMTg5NCwgMTE5MDAsIAorICAgIDExOTA2LCAxMTkxMiwgMTE5MjAsIDAsIDExOTI2LCAxMTkzMSwgMTE5MzYsIDExOTQxLCAxMTk0NiwgMTE5NTEsIDExOTU2LCAKKyAgICAxMTk2MSwgMTE5NjYsIDExOTcxLCAxMTk3NiwgMTE5ODEsIDExOTg2LCAxMTk5MSwgMTE5OTYsIDEyMDAxLCAxMjAwNiwgCisgICAgMTIwMTEsIDEyMDE2LCAxMjAyMSwgMTIwMjYsIDEyMDMxLCAxMjAzNiwgMTIwNDEsIDEyMDQ2LCAxMjA1MSwgMTIwNTYsIAorICAgIDEyMDYxLCAwLCAwLCAxMjA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIwNjcsIDAsIDEyMDc2LCAxMjA4MywgMTIwOTEsIDEyMTAzLCAxMjExMCwgMTIxMTcsIDEyMTI0LCAxMjEzNSwgMTIxNDYsIAotICAgIDEyMTUzLCAxMjE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwNzAsIDAsIDEyMDc5LCAxMjA4NiwgMTIwOTQsIDEyMTA2LCAxMjExMywgMTIxMjAsIDEyMTI3LCAxMjEzOCwgMTIxNDksIAorICAgIDEyMTU2LCAxMjE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNjcsIDEyMTcyLCAxMjE3NywgMTIxODIsIDEyMTg3LCAKLSAgICAxMjE5MiwgMTIxOTcsIDEyMjAyLCAxMjIwNywgMTIyMTIsIDEyMjE3LCAxMjIyMiwgMTIyMjcsIDEyMjMxLCAxMjIzNSwgCi0gICAgMTIyMzksIDEyMjQ0LCAxMjI1MCwgMTIyNTYsIDEyMjYyLCAxMjI2NywgMTIyNzIsIDEyMjc3LCAxMjI4MiwgMTIyODgsIAotICAgIDEyMjk3LCAxMjMwNSwgMCwgMTIzMTEsIDEyMzE3LCAxMjMyMSwgMTIzMjUsIDEyMzI5LCAxMjMzNCwgMTIzMzcsIDEyMzQxLCAKLSAgICAxMjM0NCwgMTIzNDgsIDEyMzUxLCAxMjM1NSwgMTIzNTksIDEyMzYzLCAxMjM2OCwgMTIzNzMsIDEyMzc2LCAxMjM4MCwgCi0gICAgMTIzODUsIDEyMzkwLCAxMjM5MywgMTIzOTcsIDEyNDAwLCAxMjQwNCwgMTI0MDgsIDEyNDEyLCAxMjQxNiwgMTI0MjAsIAotICAgIDEyNDI0LCAxMjQyOCwgMTI0MzIsIDEyNDM2LCAxMjQ0MCwgMTI0NDQsIDEyNDQ4LCAxMjQ1MiwgMTI0NTYsIDEyNDYwLCAKLSAgICAxMjQ2NCwgMTI0NjgsIDEyNDcyLCAxMjQ3NSwgMTI0NzksIDEyNDgyLCAxMjQ4NiwgMTI0OTAsIDEyNDk0LCAxMjQ5NywgCi0gICAgMTI1MDAsIDEyNTAzLCAxMjUwNywgMTI1MTEsIDEyNTE1LCAxMjUxOSwgMTI1MjMsIDEyNTI3LCAxMjUzMSwgMTI1MzQsIAotICAgIDEyNTM3LCAxMjU0MiwgMTI1NDcsIDEyNTUxLCAxMjU1NSwgMTI1NjAsIDEyNTY0LCAxMjU2OSwgMTI1NzMsIDEyNTc4LCAKLSAgICAxMjU4MywgMTI1ODksIDEyNTk1LCAxMjYwMSwgMTI2MDUsIDEyNjEwLCAxMjYxNiwgMTI2MjIsIDEyNjI2LCAxMjYzMSwgCi0gICAgMTI2MzUsIDEyNjQxLCAxMjY0NiwgMTI2NDksIDEyNjU1LCAxMjY2MSwgMTI2NjYsIDEyNjcxLCAxMjY3OCwgMTI2ODMsIAotICAgIDEyNjg4LCAxMjY5MiwgMTI2OTYsIDEyNzAwLCAxMjcwNCwgMTI3MDgsIDEyNzEyLCAxMjcxNiwgMTI3MjAsIDEyNzI1LCAKLSAgICAxMjczMCwgMTI3MzUsIDEyNzQxLCAxMjc0NCwgMTI3NDgsIDEyNzUyLCAxMjc1NSwgMTI3NTgsIDEyNzYxLCAxMjc2NCwgCi0gICAgMTI3NjcsIDEyNzcwLCAxMjc3MywgMTI3NzYsIDEyNzc5LCAxMjc4MywgMTI3OTAsIDEyNzk1LCAxMjc5OSwgMTI4MDMsIAotICAgIDEyODA3LCAxMjgxMSwgMCwgMTI4MTUsIDEyODE5LCAxMjgyMywgMTI4MjcsIDEyODMxLCAxMjgzNywgMTI4NDEsIDAsIAotICAgIDEyODQ1LCAxMjg0OSwgMTI4NTMsIDAsIDEyODU3LCAxMjg2MCwgMTI4NjQsIDEyODY3LCAxMjg3MSwgMTI4NzQsIDEyODc4LCAKLSAgICAxMjg4MiwgMCwgMCwgMTI4ODYsIDEyODg5LCAwLCAwLCAxMjg5MywgMTI4OTYsIDEyOTAwLCAxMjkwMywgMTI5MDcsIAotICAgIDEyOTExLCAxMjkxNSwgMTI5MTksIDEyOTIzLCAxMjkyNywgMTI5MzEsIDEyOTM1LCAxMjkzOSwgMTI5NDMsIDEyOTQ3LCAKLSAgICAxMjk1MSwgMTI5NTUsIDEyOTU5LCAxMjk2MywgMTI5NjcsIDEyOTcxLCAxMjk3NSwgMCwgMTI5NzgsIDEyOTgxLCAxMjk4NSwgCi0gICAgMTI5ODksIDEyOTkzLCAxMjk5NiwgMTI5OTksIDAsIDEzMDAyLCAwLCAwLCAwLCAxMzAwNiwgMTMwMTAsIDEzMDE0LCAKLSAgICAxMzAxNywgMCwgMCwgMTMwMjAsIDEzMDI0LCAxMzAyOCwgMTMwMzMsIDEzMDM3LCAxMzA0MiwgMTMwNDYsIDEzMDUxLCAKLSAgICAxMzA1NiwgMCwgMCwgMTMwNjIsIDEzMDY2LCAwLCAwLCAxMzA3MSwgMTMwNzUsIDEzMDgwLCAxMzA4NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTMwOTAsIDAsIDAsIDAsIDAsIDEzMDk2LCAxMzEwMCwgMCwgMTMxMDQsIDEzMTA4LCAxMzExMywgCi0gICAgMTMxMTgsIDEzMTIzLCAwLCAwLCAxMzEyOSwgMTMxMzMsIDEzMTM2LCAxMzEzOSwgMTMxNDIsIDEzMTQ1LCAxMzE0OCwgCi0gICAgMTMxNTEsIDEzMTU0LCAxMzE1NywgMTMxNjAsIDEzMTY5LCAxMzE3OCwgMTMxODIsIDEzMTg2LCAxMzE5MiwgMTMxOTgsIAotICAgIDEzMjA0LCAxMzIxMCwgMTMyMjQsIDEzMjMxLCAxMzIzNCwgMCwgMCwgMCwgMCwgMCwgMTMyMzgsIDEzMjQ0LCAxMzI0OCwgMCwgCi0gICAgMTMyNTIsIDEzMjU1LCAxMzI1OSwgMTMyNjIsIDEzMjY2LCAxMzI2OSwgMCwgMCwgMCwgMCwgMTMyNzMsIDEzMjc3LCAwLCAwLCAKLSAgICAxMzI4MSwgMTMyODUsIDEzMjg5LCAxMzI5MiwgMTMyOTYsIDEzMzAwLCAxMzMwNCwgMTMzMDgsIDEzMzEyLCAxMzMxNiwgCi0gICAgMTMzMjAsIDEzMzI0LCAxMzMyOCwgMTMzMzIsIDEzMzM2LCAxMzM0MCwgMTMzNDQsIDEzMzQ4LCAxMzM1MiwgMTMzNTYsIAotICAgIDEzMzYwLCAxMzM2NCwgMCwgMTMzNjcsIDEzMzcwLCAxMzM3NCwgMTMzNzgsIDEzMzgyLCAxMzM4NSwgMTMzODgsIDAsIAotICAgIDEzMzkxLCAxMzM5NSwgMCwgMTMzOTksIDEzNDAzLCAwLCAxMzQwNywgMTM0MTAsIDAsIDAsIDEzNDEzLCAwLCAxMzQxNywgCi0gICAgMTM0MjIsIDEzNDI2LCAxMzQzMSwgMTM0MzUsIDAsIDAsIDAsIDAsIDEzNDQwLCAxMzQ0NSwgMCwgMCwgMTM0NTAsIDEzNDU1LCAKLSAgICAxMzQ2MCwgMCwgMCwgMCwgMTM0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDY4LCAxMzQ3MiwgMTM0NzYsIDEzNDgwLCAKLSAgICAwLCAxMzQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0ODgsIDEzNDkyLCAxMzQ5NSwgMTM0OTgsIDEzNTAxLCAxMzUwNCwgCi0gICAgMTM1MDcsIDEzNTEwLCAxMzUxMywgMTM1MTYsIDEzNTE5LCAxMzUyMiwgMTM1MjUsIDEzNTI4LCAxMzUzMSwgMTM1MzYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQwLCAxMzU0NCwgMTM1NDgsIDAsIDEzNTUyLCAxMzU1NSwgCi0gICAgMTM1NTksIDEzNTYyLCAxMzU2NiwgMTM1NjksIDEzNTczLCAxMzU3NywgMTM1ODEsIDAsIDEzNTg2LCAxMzU4OSwgMTM1OTMsIAotICAgIDAsIDEzNTk4LCAxMzYwMSwgMTM2MDUsIDEzNjA4LCAxMzYxMiwgMTM2MTYsIDEzNjIwLCAxMzYyNCwgMTM2MjgsIDEzNjMyLCAKLSAgICAxMzYzNiwgMTM2NDAsIDEzNjQ0LCAxMzY0OCwgMTM2NTIsIDEzNjU2LCAxMzY2MCwgMTM2NjQsIDEzNjY4LCAxMzY3MiwgCi0gICAgMTM2NzYsIDEzNjgwLCAwLCAxMzY4MywgMTM2ODYsIDEzNjkwLCAxMzY5NCwgMTM2OTgsIDEzNzAxLCAxMzcwNCwgMCwgCi0gICAgMTM3MDcsIDEzNzExLCAwLCAxMzcxNSwgMTM3MTksIDEzNzIzLCAxMzcyNywgMTM3MzAsIDAsIDAsIDEzNzMzLCAxMzczNywgCi0gICAgMTM3NDEsIDEzNzQ2LCAxMzc1MCwgMTM3NTUsIDEzNzU5LCAxMzc2NCwgMTM3NjksIDEzNzc1LCAwLCAxMzc4MSwgMTM3ODUsIAotICAgIDEzNzkwLCAwLCAxMzc5NiwgMTM4MDAsIDEzODA1LCAwLCAwLCAxMzgwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTM4MTIsIDEzODE3LCAxMzgyMiwgMTM4MjcsIDAsIDAsIDEzODMzLCAxMzgzNywgMTM4NDAsIAotICAgIDEzODQzLCAxMzg0NiwgMTM4NDksIDEzODUyLCAxMzg1NSwgMTM4NTgsIDEzODYxLCAxMzg2NCwgMTM4NjgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODcyLCAxMzg3NiwgMTM4ODAsIDAsIDEzODg0LCAxMzg4NywgCi0gICAgMTM4OTEsIDEzODk0LCAxMzg5OCwgMTM5MDEsIDEzOTA1LCAxMzkwOSwgMCwgMCwgMTM5MTMsIDEzOTE2LCAwLCAwLCAKLSAgICAxMzkyMCwgMTM5MjMsIDEzOTI3LCAxMzkzMCwgMTM5MzQsIDEzOTM4LCAxMzk0MiwgMTM5NDYsIDEzOTUwLCAxMzk1NCwgCi0gICAgMTM5NTgsIDEzOTYyLCAxMzk2NiwgMTM5NzAsIDEzOTc0LCAxMzk3OCwgMTM5ODIsIDEzOTg2LCAxMzk5MCwgMTM5OTQsIAotICAgIDEzOTk4LCAxNDAwMiwgMCwgMTQwMDUsIDE0MDA4LCAxNDAxMiwgMTQwMTYsIDE0MDIwLCAxNDAyMywgMTQwMjYsIDAsIAotICAgIDE0MDI5LCAxNDAzMywgMCwgMTQwMzcsIDE0MDQxLCAxNDA0NSwgMTQwNDksIDE0MDUyLCAwLCAwLCAxNDA1NSwgMTQwNTksIAotICAgIDE0MDYzLCAxNDA2OCwgMTQwNzIsIDE0MDc3LCAxNDA4MSwgMTQwODYsIDE0MDkxLCAwLCAwLCAxNDA5NywgMTQxMDEsIDAsIAotICAgIDAsIDE0MTA2LCAxNDExMCwgMTQxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTE5LCAxNDEyNSwgMCwgMCwgMCwgMCwgCi0gICAgMTQxMzEsIDE0MTM1LCAwLCAxNDEzOSwgMTQxNDMsIDE0MTQ4LCAxNDE1MywgMTQxNTgsIDAsIDAsIDE0MTY0LCAxNDE2OCwgCi0gICAgMTQxNzEsIDE0MTc0LCAxNDE3NywgMTQxODAsIDE0MTgzLCAxNDE4NiwgMTQxODksIDE0MTkyLCAxNDE5NSwgMTQxOTgsIAotICAgIDE0MjAyLCAxNDIwOCwgMTQyMTQsIDE0MjIwLCAxNDIyNiwgMTQyMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE0MjM4LCAxNDI0MiwgMCwgMTQyNDYsIDE0MjQ5LCAxNDI1MywgMTQyNTYsIDE0MjYwLCAxNDI2MywgMCwgMCwgMCwgCi0gICAgMTQyNjcsIDE0MjcwLCAxNDI3NCwgMCwgMTQyNzgsIDE0MjgxLCAxNDI4NSwgMTQyODksIDAsIDAsIDAsIDE0MjkyLCAKLSAgICAxNDI5NiwgMCwgMTQzMDAsIDAsIDE0MzA0LCAxNDMwOCwgMCwgMCwgMCwgMTQzMTIsIDE0MzE2LCAwLCAwLCAwLCAxNDMyMCwgCi0gICAgMTQzMjMsIDE0MzI3LCAwLCAwLCAwLCAxNDMzMCwgMTQzMzMsIDE0MzM2LCAxNDMzOSwgMTQzNDMsIDE0MzQ3LCAxNDM1MSwgCi0gICAgMTQzNTUsIDE0MzU5LCAxNDM2MywgMTQzNjcsIDE0MzcwLCAwLCAwLCAwLCAwLCAxNDM3MywgMTQzNzgsIDE0MzgyLCAKLSAgICAxNDM4NywgMTQzOTEsIDAsIDAsIDAsIDE0Mzk2LCAxNDQwMCwgMTQ0MDUsIDAsIDE0NDEwLCAxNDQxNCwgMTQ0MTksIAotICAgIDE0NDI0LCAwLCAwLCAxNDQyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0NDM3LCAxNDQ0MSwgMTQ0NDQsIDE0NDQ3LCAxNDQ1MCwgMTQ0NTMsIDE0NDU2LCAxNDQ1OSwgCi0gICAgMTQ0NjIsIDE0NDY1LCAxNDQ2OCwgMTQ0NzIsIDE0NDc3LCAxNDQ4MiwgMTQ0ODYsIDE0NDkwLCAxNDQ5NCwgMTQ0OTgsIAotICAgIDE0NTAyLCAxNDUwNywgMTQ1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE0LCAxNDUxOCwgMTQ1MjIsIDAsIDE0NTI2LCAKLSAgICAxNDUyOSwgMTQ1MzMsIDE0NTM2LCAxNDU0MCwgMTQ1NDMsIDE0NTQ3LCAxNDU1MSwgMCwgMTQ1NTUsIDE0NTU4LCAxNDU2MiwgCi0gICAgMCwgMTQ1NjYsIDE0NTY5LCAxNDU3MywgMTQ1NzcsIDE0NTgwLCAxNDU4NCwgMTQ1ODgsIDE0NTkyLCAxNDU5NiwgMTQ2MDAsIAotICAgIDE0NjA0LCAxNDYwOCwgMTQ2MTIsIDE0NjE2LCAxNDYyMCwgMTQ2MjQsIDE0NjI4LCAxNDYzMiwgMTQ2MzYsIDE0NjQwLCAKLSAgICAxNDY0NCwgMTQ2NDgsIDE0NjUyLCAwLCAxNDY1NSwgMTQ2NTgsIDE0NjYyLCAxNDY2NiwgMTQ2NzAsIDE0NjczLCAxNDY3NiwgCi0gICAgMTQ2NzksIDE0NjgzLCAxNDY4NywgMCwgMTQ2OTEsIDE0Njk1LCAxNDY5OSwgMTQ3MDMsIDE0NzA2LCAwLCAwLCAwLCAKLSAgICAxNDcwOSwgMTQ3MTMsIDE0NzE4LCAxNDcyMiwgMTQ3MjcsIDE0NzMxLCAxNDczNiwgMTQ3NDEsIDAsIDE0NzQ3LCAxNDc1MSwgCi0gICAgMTQ3NTYsIDAsIDE0NzYxLCAxNDc2NSwgMTQ3NzAsIDE0Nzc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc3OSwgMTQ3ODMsIAotICAgIDAsIDE0Nzg5LCAxNDc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3OTcsIDE0ODAyLCAxNDgwNywgMTQ4MTIsIDAsIDAsIAotICAgIDE0ODE4LCAxNDgyMiwgMTQ4MjUsIDE0ODI4LCAxNDgzMSwgMTQ4MzQsIDE0ODM3LCAxNDg0MCwgMTQ4NDMsIDE0ODQ2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg0OSwgMTQ4NjIsIDE0ODc0LCAxNDg4NiwgMTQ4OTgsIDE0OTEwLCAxNDkyMiwgCi0gICAgMTQ5MzQsIDAsIDAsIDE0OTM4LCAxNDk0MiwgMCwgMTQ5NDYsIDE0OTQ5LCAxNDk1MywgMTQ5NTYsIDE0OTYwLCAxNDk2MywgCi0gICAgMTQ5NjcsIDE0OTcxLCAwLCAxNDk3NSwgMTQ5NzgsIDE0OTgyLCAwLCAxNDk4NiwgMTQ5ODksIDE0OTkzLCAxNDk5NywgCi0gICAgMTUwMDAsIDE1MDA0LCAxNTAwOCwgMTUwMTIsIDE1MDE2LCAxNTAyMCwgMTUwMjQsIDE1MDI4LCAxNTAzMiwgMTUwMzYsIAotICAgIDE1MDQwLCAxNTA0NCwgMTUwNDgsIDE1MDUyLCAxNTA1NiwgMTUwNjAsIDE1MDY0LCAxNTA2OCwgMTUwNzIsIDAsIDE1MDc1LCAKLSAgICAxNTA3OCwgMTUwODIsIDE1MDg2LCAxNTA5MCwgMTUwOTMsIDE1MDk2LCAxNTA5OSwgMTUxMDMsIDE1MTA3LCAwLCAxNTExMSwgCi0gICAgMTUxMTUsIDE1MTE5LCAxNTEyMywgMTUxMjYsIDAsIDAsIDE1MTI5LCAxNTEzMywgMTUxMzcsIDE1MTQyLCAxNTE0NiwgCi0gICAgMTUxNTEsIDE1MTU1LCAxNTE2MCwgMTUxNjUsIDAsIDE1MTcxLCAxNTE3NSwgMTUxODAsIDAsIDE1MTg1LCAxNTE4OSwgCi0gICAgMTUxOTQsIDE1MTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwMywgMTUyMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE1MjEzLCAwLCAxNTIxNywgMTUyMjIsIDE1MjI3LCAxNTIzMiwgMCwgMCwgMTUyMzgsIDE1MjQyLCAxNTI0NSwgMTUyNDgsIAotICAgIDE1MjUxLCAxNTI1NCwgMTUyNTcsIDE1MjYwLCAxNTI2MywgMTUyNjYsIDAsIDE1MjY5LCAxNTI3MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyNzcsIDE1MjgxLCAwLCAxNTI4NSwgMTUyODgsIDE1MjkyLCAKLSAgICAxNTI5NSwgMTUyOTksIDE1MzAyLCAxNTMwNiwgMTUzMTAsIDAsIDE1MzE0LCAxNTMxNywgMTUzMjEsIDAsIDE1MzI1LCAKLSAgICAxNTMyOCwgMTUzMzIsIDE1MzM2LCAxNTMzOSwgMTUzNDMsIDE1MzQ3LCAxNTM1MSwgMTUzNTUsIDE1MzU5LCAxNTM2MywgCi0gICAgMTUzNjcsIDE1MzcxLCAxNTM3NSwgMTUzNzksIDE1MzgzLCAxNTM4NywgMTUzOTEsIDE1Mzk1LCAxNTM5OSwgMTU0MDMsIAotICAgIDE1NDA3LCAxNTQxMSwgMTU0MTQsIDE1NDE4LCAxNTQyMSwgMTU0MjUsIDE1NDI5LCAxNTQzMywgMTU0MzYsIDE1NDM5LCAKLSAgICAxNTQ0MiwgMTU0NDYsIDE1NDUwLCAxNTQ1NCwgMTU0NTgsIDE1NDYyLCAxNTQ2NiwgMTU0NzAsIDE1NDczLCAxNTQ3NiwgMCwgCi0gICAgMCwgMTU0ODAsIDE1NDg0LCAxNTQ4OSwgMTU0OTMsIDE1NDk4LCAxNTUwMiwgMTU1MDcsIDE1NTEyLCAwLCAxNTUxOCwgCi0gICAgMTU1MjIsIDE1NTI3LCAwLCAxNTUzMiwgMTU1MzYsIDE1NTQxLCAxNTU0NiwgMTU1NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE1NTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2MSwgMTU1NjYsIDE1NTcxLCAxNTU3NiwgMCwgMCwgCi0gICAgMTU1ODIsIDE1NTg2LCAxNTU4OSwgMTU1OTIsIDE1NTk1LCAxNTU5OCwgMTU2MDEsIDE1NjA0LCAxNTYwNywgMTU2MTAsIAotICAgIDE1NjEzLCAxNTYxNywgMTU2MjIsIDE1NjI3LCAxNTYzMywgMTU2MzksIDAsIDAsIDAsIDE1NjQ1LCAxNTY0OSwgMTU2NTUsIAotICAgIDE1NjYxLCAxNTY2NywgMTU2NzIsIDE1Njc4LCAwLCAwLCAxNTY4NCwgMTU2ODgsIDAsIDE1NjkyLCAxNTY5NiwgMTU3MDAsIAotICAgIDE1NzA0LCAxNTcwOCwgMTU3MTIsIDE1NzE2LCAxNTcyMCwgMTU3MjQsIDE1NzI4LCAxNTczMiwgMTU3MzYsIDE1NzQwLCAKLSAgICAxNTc0NCwgMTU3NDgsIDE1NzUyLCAxNTc1NiwgMTU3NjAsIDAsIDAsIDAsIDE1NzY0LCAxNTc3MCwgMTU3NzYsIDE1NzgyLCAKLSAgICAxNTc4OCwgMTU3OTQsIDE1ODAwLCAxNTgwNiwgMTU4MTIsIDE1ODE4LCAxNTgyNCwgMTU4MzAsIDE1ODM4LCAxNTg0NCwgCi0gICAgMTU4NTAsIDE1ODU2LCAxNTg2MiwgMTU4NjgsIDE1ODc0LCAxNTg4MCwgMTU4ODYsIDE1ODkyLCAxNTg5OCwgMTU5MDQsIDAsIAotICAgIDE1OTEwLCAxNTkxNiwgMTU5MjIsIDE1OTI4LCAxNTkzNCwgMTU5NDAsIDE1OTQ0LCAxNTk1MCwgMTU5NTQsIDAsIDE1OTU4LCAKLSAgICAwLCAwLCAxNTk2NCwgMTU5NjgsIDE1OTc0LCAxNTk4MCwgMTU5ODYsIDE1OTkwLCAxNTk5NiwgMCwgMCwgMCwgMTYwMDAsIDAsIAotICAgIDAsIDAsIDAsIDE2MDA0LCAxNjAwOSwgMTYwMTYsIDE2MDIzLCAxNjAzMCwgMTYwMzcsIDAsIDE2MDQ0LCAwLCAxNjA1MSwgCi0gICAgMTYwNTYsIDE2MDYxLCAxNjA2OCwgMTYwNzUsIDE2MDg0LCAxNjA5NSwgMTYxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTA5LCAxNjExNiwgMTYxMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE2MTI4LCAxNjEzNCwgMTYxNDAsIDE2MTQ2LCAxNjE1MiwgMTYxNTgsIDE2MTY0LCAxNjE3MCwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTQsIDE2MjAwLCAxNjIwNiwgMTYyMTIsIDE2MjE4LCAxNjIyNCwgMTYyMzAsIAotICAgIDE2MjM2LCAxNjI0MiwgMTYyNDgsIDE2MjU0LCAxNjI2MCwgMTYyNjYsIDE2MjcyLCAxNjI3OCwgMTYyODQsIDE2MjkwLCAKLSAgICAxNjI5NiwgMTYzMDIsIDE2MzA4LCAxNjMxNCwgMTYzMjAsIDE2MzI1LCAxNjMzMSwgMTYzMzcsIDE2MzQxLCAxNjM0NywgCi0gICAgMTYzNTEsIDE2MzU3LCAxNjM2MywgMTYzNjksIDE2Mzc1LCAxNjM4MSwgMTYzODcsIDE2MzkyLCAxNjM5OCwgMTY0MDIsIAotICAgIDE2NDA3LCAxNjQxMywgMTY0MTksIDE2NDI1LCAxNjQzMCwgMTY0MzYsIDE2NDQyLCAxNjQ0OCwgMTY0NTMsIDE2NDU5LCAwLCAKLSAgICAwLCAwLCAwLCAxNjQ2MywgMTY0NjksIDE2NDc0LCAxNjQ4MCwgMTY0ODUsIDE2NDkzLCAxNjUwMSwgMTY1MDUsIDE2NTA5LCAKLSAgICAxNjUxMywgMTY1MTksIDE2NTI1LCAxNjUzMSwgMTY1MzcsIDE2NTQxLCAxNjU0NSwgMTY1NDksIDE2NTUzLCAxNjU1NywgCi0gICAgMTY1NjAsIDE2NTYzLCAxNjU2NiwgMTY1NjksIDE2NTcyLCAxNjU3NSwgMTY1NzgsIDE2NTgxLCAxNjU4NCwgMTY1ODgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg1LCAxMjE5MCwgCisgICAgMTIxOTUsIDEyMjAwLCAxMjIwNSwgMTIyMTAsIDEyMjE1LCAxMjIyMCwgMTIyMjUsIDEyMjMwLCAxMjIzNCwgMTIyMzgsIAorICAgIDEyMjQyLCAxMjI0NywgMTIyNTMsIDEyMjU5LCAxMjI2NSwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkxLCAKKyAgICAxMjMwMCwgMTIzMDgsIDAsIDEyMzE0LCAxMjMyMCwgMTIzMjQsIDEyMzI4LCAxMjMzMiwgMTIzMzcsIDEyMzQwLCAxMjM0NCwgCisgICAgMTIzNDcsIDEyMzUxLCAxMjM1NCwgMTIzNTgsIDEyMzYyLCAxMjM2NiwgMTIzNzEsIDEyMzc2LCAxMjM3OSwgMTIzODMsIAorICAgIDEyMzg4LCAxMjM5MywgMTIzOTYsIDEyNDAwLCAxMjQwMywgMTI0MDcsIDEyNDExLCAxMjQxNSwgMTI0MTksIDEyNDIzLCAKKyAgICAxMjQyNywgMTI0MzEsIDEyNDM1LCAxMjQzOSwgMTI0NDMsIDEyNDQ3LCAxMjQ1MSwgMTI0NTUsIDEyNDU5LCAxMjQ2MywgCisgICAgMTI0NjcsIDEyNDcxLCAxMjQ3NSwgMTI0NzgsIDEyNDgyLCAxMjQ4NSwgMTI0ODksIDEyNDkzLCAxMjQ5NywgMTI1MDAsIAorICAgIDEyNTAzLCAxMjUwNiwgMTI1MTAsIDEyNTE0LCAxMjUxOCwgMTI1MjIsIDEyNTI2LCAxMjUzMCwgMTI1MzQsIDEyNTM3LCAKKyAgICAxMjU0MCwgMTI1NDUsIDEyNTUwLCAxMjU1NCwgMTI1NTgsIDEyNTYzLCAxMjU2NywgMTI1NzIsIDEyNTc2LCAxMjU4MSwgCisgICAgMTI1ODYsIDEyNTkyLCAxMjU5OCwgMTI2MDQsIDEyNjA4LCAxMjYxMywgMTI2MTksIDEyNjI1LCAxMjYyOSwgMTI2MzQsIAorICAgIDEyNjM4LCAxMjY0NCwgMTI2NDksIDEyNjUyLCAxMjY1OCwgMTI2NjQsIDEyNjY5LCAxMjY3NCwgMTI2ODEsIDEyNjg2LCAKKyAgICAxMjY5MSwgMTI2OTUsIDEyNjk5LCAxMjcwMywgMTI3MDcsIDEyNzExLCAxMjcxNSwgMTI3MTksIDEyNzIzLCAxMjcyOCwgCisgICAgMTI3MzMsIDEyNzM4LCAxMjc0NCwgMTI3NDcsIDEyNzUxLCAxMjc1NSwgMTI3NTgsIDEyNzYxLCAxMjc2NCwgMTI3NjcsIAorICAgIDEyNzcwLCAxMjc3MywgMTI3NzYsIDEyNzc5LCAxMjc4MiwgMTI3ODYsIDEyNzkzLCAxMjc5OCwgMTI4MDIsIDEyODA2LCAKKyAgICAxMjgxMCwgMTI4MTQsIDAsIDEyODE4LCAxMjgyMiwgMTI4MjYsIDEyODMwLCAxMjgzNCwgMTI4NDAsIDEyODQ0LCAwLCAKKyAgICAxMjg0OCwgMTI4NTIsIDEyODU2LCAwLCAxMjg2MCwgMTI4NjMsIDEyODY3LCAxMjg3MCwgMTI4NzQsIDEyODc3LCAxMjg4MSwgCisgICAgMTI4ODUsIDAsIDAsIDEyODg5LCAxMjg5MiwgMCwgMCwgMTI4OTYsIDEyODk5LCAxMjkwMywgMTI5MDYsIDEyOTEwLCAKKyAgICAxMjkxNCwgMTI5MTgsIDEyOTIyLCAxMjkyNiwgMTI5MzAsIDEyOTM0LCAxMjkzOCwgMTI5NDIsIDEyOTQ2LCAxMjk1MCwgCisgICAgMTI5NTQsIDEyOTU4LCAxMjk2MiwgMTI5NjYsIDEyOTcwLCAxMjk3NCwgMTI5NzgsIDAsIDEyOTgxLCAxMjk4NCwgMTI5ODgsIAorICAgIDEyOTkyLCAxMjk5NiwgMTI5OTksIDEzMDAyLCAwLCAxMzAwNSwgMCwgMCwgMCwgMTMwMDksIDEzMDEzLCAxMzAxNywgCisgICAgMTMwMjAsIDAsIDAsIDEzMDIzLCAxMzAyNywgMTMwMzEsIDEzMDM2LCAxMzA0MCwgMTMwNDUsIDEzMDQ5LCAxMzA1NCwgCisgICAgMTMwNTksIDAsIDAsIDEzMDY1LCAxMzA2OSwgMCwgMCwgMTMwNzQsIDEzMDc4LCAxMzA4MywgMTMwODcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEzMDkzLCAwLCAwLCAwLCAwLCAxMzA5OSwgMTMxMDMsIDAsIDEzMTA3LCAxMzExMSwgMTMxMTYsIAorICAgIDEzMTIxLCAxMzEyNiwgMCwgMCwgMTMxMzIsIDEzMTM2LCAxMzEzOSwgMTMxNDIsIDEzMTQ1LCAxMzE0OCwgMTMxNTEsIAorICAgIDEzMTU0LCAxMzE1NywgMTMxNjAsIDEzMTYzLCAxMzE3MiwgMTMxODEsIDEzMTg1LCAxMzE4OSwgMTMxOTUsIDEzMjAxLCAKKyAgICAxMzIwNywgMTMyMTMsIDEzMjI3LCAxMzIzNCwgMTMyMzcsIDAsIDAsIDAsIDAsIDAsIDEzMjQxLCAxMzI0NywgMTMyNTEsIDAsIAorICAgIDEzMjU1LCAxMzI1OCwgMTMyNjIsIDEzMjY1LCAxMzI2OSwgMTMyNzIsIDAsIDAsIDAsIDAsIDEzMjc2LCAxMzI4MCwgMCwgMCwgCisgICAgMTMyODQsIDEzMjg4LCAxMzI5MiwgMTMyOTUsIDEzMjk5LCAxMzMwMywgMTMzMDcsIDEzMzExLCAxMzMxNSwgMTMzMTksIAorICAgIDEzMzIzLCAxMzMyNywgMTMzMzEsIDEzMzM1LCAxMzMzOSwgMTMzNDMsIDEzMzQ3LCAxMzM1MSwgMTMzNTUsIDEzMzU5LCAKKyAgICAxMzM2MywgMTMzNjcsIDAsIDEzMzcwLCAxMzM3MywgMTMzNzcsIDEzMzgxLCAxMzM4NSwgMTMzODgsIDEzMzkxLCAwLCAKKyAgICAxMzM5NCwgMTMzOTgsIDAsIDEzNDAyLCAxMzQwNiwgMCwgMTM0MTAsIDEzNDEzLCAwLCAwLCAxMzQxNiwgMCwgMTM0MjAsIAorICAgIDEzNDI1LCAxMzQyOSwgMTM0MzQsIDEzNDM4LCAwLCAwLCAwLCAwLCAxMzQ0MywgMTM0NDgsIDAsIDAsIDEzNDUzLCAxMzQ1OCwgCisgICAgMTM0NjMsIDAsIDAsIDAsIDEzNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ3MSwgMTM0NzUsIDEzNDc5LCAxMzQ4MywgCisgICAgMCwgMTM0ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDkxLCAxMzQ5NSwgMTM0OTgsIDEzNTAxLCAxMzUwNCwgMTM1MDcsIAorICAgIDEzNTEwLCAxMzUxMywgMTM1MTYsIDEzNTE5LCAxMzUyMiwgMTM1MjUsIDEzNTI4LCAxMzUzMSwgMTM1MzQsIDEzNTM5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzU0MywgMTM1NDcsIDEzNTUxLCAwLCAxMzU1NSwgMTM1NTgsIAorICAgIDEzNTYyLCAxMzU2NSwgMTM1NjksIDEzNTcyLCAxMzU3NiwgMTM1ODAsIDEzNTg0LCAwLCAxMzU4OSwgMTM1OTIsIDEzNTk2LCAKKyAgICAwLCAxMzYwMSwgMTM2MDQsIDEzNjA4LCAxMzYxMSwgMTM2MTUsIDEzNjE5LCAxMzYyMywgMTM2MjcsIDEzNjMxLCAxMzYzNSwgCisgICAgMTM2MzksIDEzNjQzLCAxMzY0NywgMTM2NTEsIDEzNjU1LCAxMzY1OSwgMTM2NjMsIDEzNjY3LCAxMzY3MSwgMTM2NzUsIAorICAgIDEzNjc5LCAxMzY4MywgMCwgMTM2ODYsIDEzNjg5LCAxMzY5MywgMTM2OTcsIDEzNzAxLCAxMzcwNCwgMTM3MDcsIDAsIAorICAgIDEzNzEwLCAxMzcxNCwgMCwgMTM3MTgsIDEzNzIyLCAxMzcyNiwgMTM3MzAsIDEzNzMzLCAwLCAwLCAxMzczNiwgMTM3NDAsIAorICAgIDEzNzQ0LCAxMzc0OSwgMTM3NTMsIDEzNzU4LCAxMzc2MiwgMTM3NjcsIDEzNzcyLCAxMzc3OCwgMCwgMTM3ODQsIDEzNzg4LCAKKyAgICAxMzc5MywgMCwgMTM3OTksIDEzODAzLCAxMzgwOCwgMCwgMCwgMTM4MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzODE1LCAxMzgyMCwgMTM4MjUsIDEzODMwLCAwLCAwLCAxMzgzNiwgMTM4NDAsIDEzODQzLCAKKyAgICAxMzg0NiwgMTM4NDksIDEzODUyLCAxMzg1NSwgMTM4NTgsIDEzODYxLCAxMzg2NCwgMTM4NjcsIDEzODcxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzg3NSwgMTM4NzksIDEzODgzLCAwLCAxMzg4NywgMTM4OTAsIAorICAgIDEzODk0LCAxMzg5NywgMTM5MDEsIDEzOTA0LCAxMzkwOCwgMTM5MTIsIDAsIDAsIDEzOTE2LCAxMzkxOSwgMCwgMCwgCisgICAgMTM5MjMsIDEzOTI2LCAxMzkzMCwgMTM5MzMsIDEzOTM3LCAxMzk0MSwgMTM5NDUsIDEzOTQ5LCAxMzk1MywgMTM5NTcsIAorICAgIDEzOTYxLCAxMzk2NSwgMTM5NjksIDEzOTczLCAxMzk3NywgMTM5ODEsIDEzOTg1LCAxMzk4OSwgMTM5OTMsIDEzOTk3LCAKKyAgICAxNDAwMSwgMTQwMDUsIDAsIDE0MDA4LCAxNDAxMSwgMTQwMTUsIDE0MDE5LCAxNDAyMywgMTQwMjYsIDE0MDI5LCAwLCAKKyAgICAxNDAzMiwgMTQwMzYsIDAsIDE0MDQwLCAxNDA0NCwgMTQwNDgsIDE0MDUyLCAxNDA1NSwgMCwgMCwgMTQwNTgsIDE0MDYyLCAKKyAgICAxNDA2NiwgMTQwNzEsIDE0MDc1LCAxNDA4MCwgMTQwODQsIDE0MDg5LCAxNDA5NCwgMCwgMCwgMTQxMDAsIDE0MTA0LCAwLCAKKyAgICAwLCAxNDEwOSwgMTQxMTMsIDE0MTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEyMiwgMTQxMjgsIDAsIDAsIDAsIDAsIAorICAgIDE0MTM0LCAxNDEzOCwgMCwgMTQxNDIsIDE0MTQ2LCAxNDE1MSwgMTQxNTYsIDE0MTYxLCAwLCAwLCAxNDE2NywgMTQxNzEsIAorICAgIDE0MTc0LCAxNDE3NywgMTQxODAsIDE0MTgzLCAxNDE4NiwgMTQxODksIDE0MTkyLCAxNDE5NSwgMTQxOTgsIDE0MjAxLCAKKyAgICAxNDIwNSwgMTQyMTEsIDE0MjE3LCAxNDIyMywgMTQyMjksIDE0MjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNDI0MSwgMTQyNDUsIDAsIDE0MjQ5LCAxNDI1MiwgMTQyNTYsIDE0MjU5LCAxNDI2MywgMTQyNjYsIDAsIDAsIDAsIAorICAgIDE0MjcwLCAxNDI3MywgMTQyNzcsIDAsIDE0MjgxLCAxNDI4NCwgMTQyODgsIDE0MjkyLCAwLCAwLCAwLCAxNDI5NSwgCisgICAgMTQyOTksIDAsIDE0MzAzLCAwLCAxNDMwNywgMTQzMTEsIDAsIDAsIDAsIDE0MzE1LCAxNDMxOSwgMCwgMCwgMCwgMTQzMjMsIAorICAgIDE0MzI2LCAxNDMzMCwgMCwgMCwgMCwgMTQzMzMsIDE0MzM2LCAxNDMzOSwgMTQzNDIsIDE0MzQ2LCAxNDM1MCwgMTQzNTQsIAorICAgIDE0MzU4LCAxNDM2MiwgMTQzNjYsIDE0MzcwLCAxNDM3MywgMCwgMCwgMCwgMCwgMTQzNzYsIDE0MzgxLCAxNDM4NSwgCisgICAgMTQzOTAsIDE0Mzk0LCAwLCAwLCAwLCAxNDM5OSwgMTQ0MDMsIDE0NDA4LCAwLCAxNDQxMywgMTQ0MTcsIDE0NDIyLCAKKyAgICAxNDQyNywgMCwgMCwgMTQ0MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNDQ0MCwgMTQ0NDQsIDE0NDQ3LCAxNDQ1MCwgMTQ0NTMsIDE0NDU2LCAxNDQ1OSwgMTQ0NjIsIAorICAgIDE0NDY1LCAxNDQ2OCwgMTQ0NzEsIDE0NDc1LCAxNDQ4MCwgMTQ0ODUsIDE0NDg5LCAxNDQ5MywgMTQ0OTcsIDE0NTAxLCAKKyAgICAxNDUwNSwgMTQ1MTAsIDE0NTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDUxNywgMTQ1MjEsIDE0NTI1LCAwLCAxNDUyOSwgCisgICAgMTQ1MzIsIDE0NTM2LCAxNDUzOSwgMTQ1NDMsIDE0NTQ2LCAxNDU1MCwgMTQ1NTQsIDAsIDE0NTU4LCAxNDU2MSwgMTQ1NjUsIAorICAgIDAsIDE0NTY5LCAxNDU3MiwgMTQ1NzYsIDE0NTgwLCAxNDU4MywgMTQ1ODcsIDE0NTkxLCAxNDU5NSwgMTQ1OTksIDE0NjAzLCAKKyAgICAxNDYwNywgMTQ2MTEsIDE0NjE1LCAxNDYxOSwgMTQ2MjMsIDE0NjI3LCAxNDYzMSwgMTQ2MzUsIDE0NjM5LCAxNDY0MywgCisgICAgMTQ2NDcsIDE0NjUxLCAxNDY1NSwgMCwgMTQ2NTgsIDE0NjYxLCAxNDY2NSwgMTQ2NjksIDE0NjczLCAxNDY3NiwgMTQ2NzksIAorICAgIDE0NjgyLCAxNDY4NiwgMTQ2OTAsIDAsIDE0Njk0LCAxNDY5OCwgMTQ3MDIsIDE0NzA2LCAxNDcwOSwgMCwgMCwgMCwgCisgICAgMTQ3MTIsIDE0NzE2LCAxNDcyMSwgMTQ3MjUsIDE0NzMwLCAxNDczNCwgMTQ3MzksIDE0NzQ0LCAwLCAxNDc1MCwgMTQ3NTQsIAorICAgIDE0NzU5LCAwLCAxNDc2NCwgMTQ3NjgsIDE0NzczLCAxNDc3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3ODIsIDE0Nzg2LCAKKyAgICAwLCAxNDc5MiwgMTQ3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODAwLCAxNDgwNSwgMTQ4MTAsIDE0ODE1LCAwLCAwLCAKKyAgICAxNDgyMSwgMTQ4MjUsIDE0ODI4LCAxNDgzMSwgMTQ4MzQsIDE0ODM3LCAxNDg0MCwgMTQ4NDMsIDE0ODQ2LCAxNDg0OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4NTIsIDE0ODY1LCAxNDg3NywgMTQ4ODksIDE0OTAxLCAxNDkxMywgMTQ5MjUsIAorICAgIDE0OTM3LCAwLCAwLCAxNDk0MSwgMTQ5NDUsIDAsIDE0OTQ5LCAxNDk1MiwgMTQ5NTYsIDE0OTU5LCAxNDk2MywgMTQ5NjYsIAorICAgIDE0OTcwLCAxNDk3NCwgMCwgMTQ5NzgsIDE0OTgxLCAxNDk4NSwgMCwgMTQ5ODksIDE0OTkyLCAxNDk5NiwgMTUwMDAsIAorICAgIDE1MDAzLCAxNTAwNywgMTUwMTEsIDE1MDE1LCAxNTAxOSwgMTUwMjMsIDE1MDI3LCAxNTAzMSwgMTUwMzUsIDE1MDM5LCAKKyAgICAxNTA0MywgMTUwNDcsIDE1MDUxLCAxNTA1NSwgMTUwNTksIDE1MDYzLCAxNTA2NywgMTUwNzEsIDE1MDc1LCAwLCAxNTA3OCwgCisgICAgMTUwODEsIDE1MDg1LCAxNTA4OSwgMTUwOTMsIDE1MDk2LCAxNTA5OSwgMTUxMDIsIDE1MTA2LCAxNTExMCwgMCwgMTUxMTQsIAorICAgIDE1MTE4LCAxNTEyMiwgMTUxMjYsIDE1MTI5LCAwLCAwLCAxNTEzMiwgMTUxMzYsIDE1MTQwLCAxNTE0NSwgMTUxNDksIAorICAgIDE1MTU0LCAxNTE1OCwgMTUxNjMsIDE1MTY4LCAwLCAxNTE3NCwgMTUxNzgsIDE1MTgzLCAwLCAxNTE4OCwgMTUxOTIsIAorICAgIDE1MTk3LCAxNTIwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyMDYsIDE1MjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNTIxNiwgMCwgMTUyMjAsIDE1MjI1LCAxNTIzMCwgMTUyMzUsIDAsIDAsIDE1MjQxLCAxNTI0NSwgMTUyNDgsIDE1MjUxLCAKKyAgICAxNTI1NCwgMTUyNTcsIDE1MjYwLCAxNTI2MywgMTUyNjYsIDE1MjY5LCAwLCAxNTI3MiwgMTUyNzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjgwLCAxNTI4NCwgMCwgMTUyODgsIDE1MjkxLCAxNTI5NSwgCisgICAgMTUyOTgsIDE1MzAyLCAxNTMwNSwgMTUzMDksIDE1MzEzLCAwLCAxNTMxNywgMTUzMjAsIDE1MzI0LCAwLCAxNTMyOCwgCisgICAgMTUzMzEsIDE1MzM1LCAxNTMzOSwgMTUzNDIsIDE1MzQ2LCAxNTM1MCwgMTUzNTQsIDE1MzU4LCAxNTM2MiwgMTUzNjYsIAorICAgIDE1MzcwLCAxNTM3NCwgMTUzNzgsIDE1MzgyLCAxNTM4NiwgMTUzOTAsIDE1Mzk0LCAxNTM5OCwgMTU0MDIsIDE1NDA2LCAKKyAgICAxNTQxMCwgMTU0MTQsIDE1NDE3LCAxNTQyMSwgMTU0MjQsIDE1NDI4LCAxNTQzMiwgMTU0MzYsIDE1NDM5LCAxNTQ0MiwgCisgICAgMTU0NDUsIDE1NDQ5LCAxNTQ1MywgMTU0NTcsIDE1NDYxLCAxNTQ2NSwgMTU0NjksIDE1NDczLCAxNTQ3NiwgMTU0NzksIDAsIAorICAgIDAsIDE1NDgzLCAxNTQ4NywgMTU0OTIsIDE1NDk2LCAxNTUwMSwgMTU1MDUsIDE1NTEwLCAxNTUxNSwgMCwgMTU1MjEsIAorICAgIDE1NTI1LCAxNTUzMCwgMCwgMTU1MzUsIDE1NTM5LCAxNTU0NCwgMTU1NDksIDE1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNTU1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1NjQsIDE1NTY5LCAxNTU3NCwgMTU1NzksIDAsIDAsIAorICAgIDE1NTg1LCAxNTU4OSwgMTU1OTIsIDE1NTk1LCAxNTU5OCwgMTU2MDEsIDE1NjA0LCAxNTYwNywgMTU2MTAsIDE1NjEzLCAKKyAgICAxNTYxNiwgMTU2MjAsIDE1NjI1LCAxNTYzMCwgMTU2MzYsIDE1NjQyLCAwLCAwLCAwLCAxNTY0OCwgMTU2NTIsIDE1NjU4LCAKKyAgICAxNTY2NCwgMTU2NzAsIDE1Njc1LCAxNTY4MSwgMCwgMCwgMTU2ODcsIDE1NjkxLCAwLCAxNTY5NSwgMTU2OTksIDE1NzAzLCAKKyAgICAxNTcwNywgMTU3MTEsIDE1NzE1LCAxNTcxOSwgMTU3MjMsIDE1NzI3LCAxNTczMSwgMTU3MzUsIDE1NzM5LCAxNTc0MywgCisgICAgMTU3NDcsIDE1NzUxLCAxNTc1NSwgMTU3NTksIDE1NzYzLCAwLCAwLCAwLCAxNTc2NywgMTU3NzMsIDE1Nzc5LCAxNTc4NSwgCisgICAgMTU3OTEsIDE1Nzk3LCAxNTgwMywgMTU4MDksIDE1ODE1LCAxNTgyMSwgMTU4MjcsIDE1ODMzLCAxNTg0MSwgMTU4NDcsIAorICAgIDE1ODUzLCAxNTg1OSwgMTU4NjUsIDE1ODcxLCAxNTg3NywgMTU4ODMsIDE1ODg5LCAxNTg5NSwgMTU5MDEsIDE1OTA3LCAwLCAKKyAgICAxNTkxMywgMTU5MTksIDE1OTI1LCAxNTkzMSwgMTU5MzcsIDE1OTQzLCAxNTk0NywgMTU5NTMsIDE1OTU3LCAwLCAxNTk2MSwgCisgICAgMCwgMCwgMTU5NjcsIDE1OTcxLCAxNTk3NywgMTU5ODMsIDE1OTg5LCAxNTk5MywgMTU5OTksIDAsIDAsIDAsIDE2MDAzLCAwLCAKKyAgICAwLCAwLCAwLCAxNjAwNywgMTYwMTIsIDE2MDE5LCAxNjAyNiwgMTYwMzMsIDE2MDQwLCAwLCAxNjA0NywgMCwgMTYwNTQsIAorICAgIDE2MDU5LCAxNjA2NCwgMTYwNzEsIDE2MDc4LCAxNjA4NywgMTYwOTgsIDE2MTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjExMiwgMTYxMTksIDE2MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNjEzMSwgMTYxMzcsIDE2MTQzLCAxNjE0OSwgMTYxNTUsIDE2MTYxLCAxNjE2NywgMTYxNzMsIAorICAgIDE2MTc5LCAxNjE4NSwgMTYxOTEsIDE2MTk3LCAxNjIwMywgMTYyMDksIDE2MjE1LCAxNjIyMSwgMTYyMjcsIDE2MjMzLCAKKyAgICAxNjIzOSwgMTYyNDUsIDE2MjUxLCAxNjI1NywgMTYyNjMsIDE2MjY5LCAxNjI3NSwgMTYyODEsIDE2Mjg3LCAxNjI5MywgCisgICAgMTYyOTksIDE2MzA1LCAxNjMxMSwgMTYzMTcsIDE2MzIzLCAxNjMyOCwgMTYzMzQsIDE2MzQwLCAxNjM0NCwgMTYzNTAsIAorICAgIDE2MzU0LCAxNjM2MCwgMTYzNjYsIDE2MzcyLCAxNjM3OCwgMTYzODQsIDE2MzkwLCAxNjM5NSwgMTY0MDEsIDE2NDA1LCAKKyAgICAxNjQxMCwgMTY0MTYsIDE2NDIyLCAxNjQyOCwgMTY0MzMsIDE2NDM5LCAxNjQ0NSwgMTY0NTEsIDE2NDU2LCAxNjQ2MiwgMCwgCisgICAgMCwgMCwgMCwgMTY0NjYsIDE2NDcyLCAxNjQ3NywgMTY0ODMsIDE2NDg4LCAxNjQ5NiwgMTY1MDQsIDE2NTA4LCAxNjUxMiwgCisgICAgMTY1MTYsIDE2NTIyLCAxNjUyOCwgMTY1MzQsIDE2NTQwLCAxNjU0NCwgMTY1NDgsIDE2NTUyLCAxNjU1NiwgMTY1NjAsIAorICAgIDE2NTYzLCAxNjU2NiwgMTY1NjksIDE2NTcyLCAxNjU3NSwgMTY1NzgsIDE2NTgxLCAxNjU4NCwgMTY1ODcsIDE2NTkxLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjU5MiwgMTY1OTcsIDAsIDE2NjA0LCAwLCAwLCAxNjYxMSwgCi0gICAgMTY2MTYsIDAsIDE2NjIxLCAwLCAwLCAxNjYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2MzMsIDE2NjM4LCAxNjY0MiwgCi0gICAgMTY2NDksIDAsIDE2NjU2LCAxNjY2MSwgMTY2NjYsIDE2NjcxLCAxNjY3OCwgMTY2ODUsIDE2NjkyLCAwLCAxNjY5OSwgCi0gICAgMTY3MDQsIDE2NzA5LCAwLCAxNjcxNiwgMCwgMTY3MjMsIDAsIDAsIDE2NzI4LCAxNjczNSwgMCwgMTY3NDIsIDE2NzQ2LCAKLSAgICAxNjc1MywgMTY3NTcsIDE2NzYyLCAxNjc3MCwgMTY3NzYsIDE2NzgyLCAxNjc4NywgMTY3OTMsIDE2Nzk5LCAxNjgwNSwgCi0gICAgMTY4MTAsIDAsIDE2ODE2LCAxNjgyNCwgMTY4MzEsIDAsIDAsIDE2ODM4LCAxNjg0MywgMTY4NDksIDE2ODU0LCAxNjg2MCwgCi0gICAgMCwgMTY4NjYsIDAsIDE2ODcyLCAxNjg3OSwgMTY4ODYsIDE2ODkzLCAxNjkwMCwgMTY5MDUsIDAsIDAsIDE2OTA5LCAKLSAgICAxNjkxNCwgMTY5MTgsIDE2OTIyLCAxNjkyNiwgMTY5MzAsIDE2OTM0LCAxNjkzOCwgMTY5NDIsIDE2OTQ2LCAwLCAwLCAKLSAgICAxNjk1MCwgMTY5NTYsIDE2OTYyLCAxNjk2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5NzYsIDE2OTgwLCAxNjk5MSwgCi0gICAgMTcwMDYsIDE3MDIxLCAxNzAzMSwgMTcwNDIsIDE3MDU1LCAxNzA2NiwgMTcwNzIsIDE3MDgwLCAxNzA5MCwgMTcwOTYsIAotICAgIDE3MTA0LCAxNzEwOCwgMTcxMTQsIDE3MTIwLCAxNzEyOCwgMTcxMzgsIDE3MTQ2LCAxNzE1OSwgMTcxNjUsIDE3MTczLCAKLSAgICAxNzE4MSwgMTcxOTMsIDE3MjAwLCAxNzIwOCwgMTcyMTYsIDE3MjI0LCAxNzIzMiwgMTcyNDAsIDE3MjQ4LCAxNzI1OCwgCi0gICAgMTcyNjIsIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIAotICAgIDE3MjkzLCAxNzI5NywgMTczMDEsIDE3MzA1LCAxNzMwOSwgMTczMTMsIDE3MzE3LCAxNzMyMSwgMTczMjUsIDE3MzMwLCAKLSAgICAxNzMzNiwgMTczNDYsIDE3MzYwLCAxNzM3MCwgMTczNzYsIDE3MzgyLCAxNzM5MCwgMTczOTgsIDE3NDA2LCAxNzQxNCwgCi0gICAgMTc0MjAsIDE3NDI2LCAxNzQyOSwgMTc0MzMsIDE3NDM3LCAxNzQ0MSwgMTc0NDUsIDE3NDQ5LCAxNzQ1MywgMCwgMTc0NTcsIAotICAgIDE3NDYxLCAxNzQ2NSwgMTc0NjksIDE3NDczLCAxNzQ3NywgMTc0ODEsIDE3NDg1LCAxNzQ4OSwgMTc0OTMsIDE3NDk3LCAKLSAgICAxNzUwMCwgMTc1MDMsIDE3NTA3LCAxNzUxMSwgMTc1MTUsIDE3NTE4LCAxNzUyMiwgMTc1MjYsIDE3NTMwLCAxNzUzNCwgCi0gICAgMTc1MzgsIDE3NTQyLCAxNzU0NiwgMTc1NTAsIDE3NTUzLCAxNzU1NiwgMTc1NjAsIDE3NTY0LCAxNzU2OCwgMTc1NzEsIAotICAgIDE3NTc0LCAxNzU3NywgMTc1ODEsIDE3NTg2LCAxNzU5MCwgMCwgMCwgMCwgMCwgMTc1OTQsIDE3NTk5LCAxNzYwMywgCi0gICAgMTc2MDgsIDE3NjEyLCAxNzYxNywgMTc2MjIsIDE3NjI4LCAxNzYzMywgMTc2MzksIDE3NjQzLCAxNzY0OCwgMTc2NTIsIAotICAgIDE3NjU3LCAxNzY2NywgMTc2NzMsIDE3Njc5LCAxNzY4NiwgMTc2OTYsIDE3NzAyLCAxNzcwNiwgMTc3MTAsIDE3NzE2LCAKLSAgICAxNzcyMiwgMTc3MzAsIDE3NzM2LCAxNzc0NCwgMTc3NTIsIDE3NzYwLCAxNzc3MCwgMTc3NzgsIDE3Nzg4LCAxNzc5MywgCi0gICAgMTc3OTksIDE3ODA1LCAxNzgxMSwgMTc4MTcsIDE3ODIzLCAxNzgyOSwgMCwgMTc4MzUsIDE3ODQxLCAxNzg0NywgMTc4NTMsIAotICAgIDE3ODU5LCAxNzg2NSwgMTc4NzEsIDE3ODc3LCAxNzg4MywgMTc4ODksIDE3ODk1LCAxNzkwMCwgMTc5MDUsIDE3OTExLCAKLSAgICAxNzkxNywgMTc5MjMsIDE3OTI4LCAxNzkzNCwgMTc5NDAsIDE3OTQ2LCAxNzk1MiwgMTc5NTgsIDE3OTY0LCAxNzk3MCwgCi0gICAgMTc5NzYsIDE3OTgxLCAxNzk4NiwgMTc5OTIsIDE3OTk4LCAxODAwNCwgMTgwMDksIDE4MDE0LCAxODAxOSwgMTgwMjUsIAotICAgIDE4MDMzLCAxODA0MCwgMCwgMTgwNDcsIDE4MDU0LCAxODA2NywgMTgwNzQsIDE4MDgxLCAxODA4OSwgMTgwOTcsIDE4MTAzLCAKLSAgICAxODEwOSwgMTgxMTUsIDE4MTI1LCAxODEzMCwgMTgxMzYsIDE4MTQ2LCAxODE1NiwgMCwgMTgxNjYsIDE4MTc2LCAxODE4NCwgCi0gICAgMTgxOTYsIDE4MjA4LCAxODIxNCwgMTgyMjgsIDE4MjQzLCAxODI0OCwgMTgyNTMsIDE4MjYxLCAxODI2OSwgMTgyNzcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTk1LCAxNjYwMCwgMCwgMTY2MDcsIDAsIDAsIDE2NjE0LCAKKyAgICAxNjYxOSwgMCwgMTY2MjQsIDAsIDAsIDE2NjMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzNiwgMTY2NDEsIDE2NjQ1LCAKKyAgICAxNjY1MiwgMCwgMTY2NTksIDE2NjY0LCAxNjY2OSwgMTY2NzQsIDE2NjgxLCAxNjY4OCwgMTY2OTUsIDAsIDE2NzAyLCAKKyAgICAxNjcwNywgMTY3MTIsIDAsIDE2NzE5LCAwLCAxNjcyNiwgMCwgMCwgMTY3MzEsIDE2NzM4LCAwLCAxNjc0NSwgMTY3NDksIAorICAgIDE2NzU2LCAxNjc2MCwgMTY3NjUsIDE2NzczLCAxNjc3OSwgMTY3ODUsIDE2NzkwLCAxNjc5NiwgMTY4MDIsIDE2ODA4LCAKKyAgICAxNjgxMywgMCwgMTY4MTksIDE2ODI3LCAxNjgzNCwgMCwgMCwgMTY4NDEsIDE2ODQ2LCAxNjg1MiwgMTY4NTcsIDE2ODYzLCAKKyAgICAwLCAxNjg2OSwgMCwgMTY4NzUsIDE2ODgyLCAxNjg4OSwgMTY4OTYsIDE2OTAzLCAxNjkwOCwgMCwgMCwgMTY5MTIsIAorICAgIDE2OTE3LCAxNjkyMSwgMTY5MjUsIDE2OTI5LCAxNjkzMywgMTY5MzcsIDE2OTQxLCAxNjk0NSwgMTY5NDksIDAsIDAsIAorICAgIDE2OTUzLCAxNjk1OSwgMTY5NjUsIDE2OTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3OSwgMTY5ODMsIDE2OTk0LCAKKyAgICAxNzAwOSwgMTcwMjQsIDE3MDM0LCAxNzA0NSwgMTcwNTgsIDE3MDY5LCAxNzA3NSwgMTcwODMsIDE3MDkzLCAxNzA5OSwgCisgICAgMTcxMDcsIDE3MTExLCAxNzExNywgMTcxMjMsIDE3MTMxLCAxNzE0MSwgMTcxNDksIDE3MTYyLCAxNzE2OCwgMTcxNzYsIAorICAgIDE3MTg0LCAxNzE5NiwgMTcyMDMsIDE3MjExLCAxNzIxOSwgMTcyMjcsIDE3MjM1LCAxNzI0MywgMTcyNTEsIDE3MjYxLCAKKyAgICAxNzI2NSwgMTcyNjgsIDE3MjcxLCAxNzI3NCwgMTcyNzcsIDE3MjgwLCAxNzI4MywgMTcyODYsIDE3Mjg5LCAxNzI5MiwgCisgICAgMTcyOTYsIDE3MzAwLCAxNzMwNCwgMTczMDgsIDE3MzEyLCAxNzMxNiwgMTczMjAsIDE3MzI0LCAxNzMyOCwgMTczMzMsIAorICAgIDE3MzM5LCAxNzM0OSwgMTczNjMsIDE3MzczLCAxNzM3OSwgMTczODUsIDE3MzkzLCAxNzQwMSwgMTc0MDksIDE3NDE3LCAKKyAgICAxNzQyMywgMTc0MjksIDE3NDMyLCAxNzQzNiwgMTc0NDAsIDE3NDQ0LCAxNzQ0OCwgMTc0NTIsIDE3NDU2LCAwLCAxNzQ2MCwgCisgICAgMTc0NjQsIDE3NDY4LCAxNzQ3MiwgMTc0NzYsIDE3NDgwLCAxNzQ4NCwgMTc0ODgsIDE3NDkyLCAxNzQ5NiwgMTc1MDAsIAorICAgIDE3NTAzLCAxNzUwNiwgMTc1MTAsIDE3NTE0LCAxNzUxOCwgMTc1MjEsIDE3NTI1LCAxNzUyOSwgMTc1MzMsIDE3NTM3LCAKKyAgICAxNzU0MSwgMTc1NDUsIDE3NTQ5LCAxNzU1MywgMTc1NTYsIDE3NTU5LCAxNzU2MywgMTc1NjcsIDE3NTcxLCAxNzU3NCwgCisgICAgMTc1NzcsIDE3NTgwLCAxNzU4NCwgMTc1ODksIDE3NTkzLCAwLCAwLCAwLCAwLCAxNzU5NywgMTc2MDIsIDE3NjA2LCAKKyAgICAxNzYxMSwgMTc2MTUsIDE3NjIwLCAxNzYyNSwgMTc2MzEsIDE3NjM2LCAxNzY0MiwgMTc2NDYsIDE3NjUxLCAxNzY1NSwgCisgICAgMTc2NjAsIDE3NjcwLCAxNzY3NiwgMTc2ODIsIDE3Njg5LCAxNzY5OSwgMTc3MDUsIDE3NzA5LCAxNzcxMywgMTc3MTksIAorICAgIDE3NzI1LCAxNzczMywgMTc3MzksIDE3NzQ3LCAxNzc1NSwgMTc3NjMsIDE3NzczLCAxNzc4MSwgMTc3OTEsIDE3Nzk2LCAKKyAgICAxNzgwMiwgMTc4MDgsIDE3ODE0LCAxNzgyMCwgMTc4MjYsIDE3ODMyLCAwLCAxNzgzOCwgMTc4NDQsIDE3ODUwLCAxNzg1NiwgCisgICAgMTc4NjIsIDE3ODY4LCAxNzg3NCwgMTc4ODAsIDE3ODg2LCAxNzg5MiwgMTc4OTgsIDE3OTAzLCAxNzkwOCwgMTc5MTQsIAorICAgIDE3OTIwLCAxNzkyNiwgMTc5MzEsIDE3OTM3LCAxNzk0MywgMTc5NDksIDE3OTU1LCAxNzk2MSwgMTc5NjcsIDE3OTczLCAKKyAgICAxNzk3OSwgMTc5ODQsIDE3OTg5LCAxNzk5NSwgMTgwMDEsIDE4MDA3LCAxODAxMiwgMTgwMTcsIDE4MDIyLCAxODAyOCwgCisgICAgMTgwMzYsIDE4MDQzLCAwLCAxODA1MCwgMTgwNTcsIDE4MDcwLCAxODA3NywgMTgwODQsIDE4MDkyLCAxODEwMCwgMTgxMDYsIAorICAgIDE4MTEyLCAxODExOCwgMTgxMjgsIDE4MTMzLCAxODEzOSwgMTgxNDksIDE4MTU5LCAwLCAxODE2OSwgMTgxNzksIDE4MTg3LCAKKyAgICAxODE5OSwgMTgyMTEsIDE4MjE3LCAxODIzMSwgMTgyNDYsIDE4MjUxLCAxODI1NiwgMTgyNjQsIDE4MjcyLCAxODI4MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyODUsIDE4Mjg4LCAxODI5MiwgMTgyOTYsIDE4MzAwLCAKLSAgICAxODMwNCwgMTgzMDgsIDE4MzEyLCAxODMxNiwgMTgzMjAsIDE4MzI0LCAxODMyOCwgMTgzMzIsIDE4MzM2LCAxODM0MCwgCi0gICAgMTgzNDQsIDE4MzQ4LCAxODM1MiwgMTgzNTYsIDE4MzYwLCAxODM2NCwgMTgzNjcsIDE4MzcwLCAxODM3NCwgMTgzNzgsIAotICAgIDE4MzgyLCAxODM4NSwgMTgzODgsIDE4MzkxLCAxODM5NSwgMTgzOTksIDE4NDAyLCAxODQwNSwgMTg0MDksIDE4NDEyLCAKLSAgICAxODQxNywgMTg0MjAsIDE4NDI0LCAxODQyNywgMTg0MzEsIDE4NDM0LCAxODQzOSwgMTg0NDIsIDE4NDQ2LCAxODQ1MywgCi0gICAgMTg0NTgsIDE4NDYyLCAxODQ2NywgMTg0NzEsIDE4NDc2LCAxODQ4MCwgMTg0ODUsIDE4NDkyLCAxODQ5OCwgMTg1MDMsIAotICAgIDE4NTA3LCAxODUxMSwgMTg1MTUsIDE4NTE5LCAxODUyMywgMTg1MjgsIDE4NTMzLCAxODUzOSwgMTg1NDQsIDE4NTQ5LCAKLSAgICAxODU1MywgMTg1NTYsIDE4NTU5LCAxODU2MiwgMTg1NjUsIDE4NTY4LCAxODU3MSwgMTg1NzQsIDE4NTc3LCAxODU4MCwgCi0gICAgMTg1ODYsIDE4NTkwLCAxODU5NCwgMTg1OTgsIDE4NjAyLCAxODYwNiwgMTg2MTAsIDE4NjE0LCAxODYxOCwgMTg2MjMsIAotICAgIDE4NjI3LCAxODYzMiwgMTg2MzcsIDE4NjQzLCAxODY0OCwgMTg2NTQsIDE4NjYwLCAxODY2NiwgMTg2NzIsIDE4Njc4LCAKLSAgICAxODY4NSwgMTg2OTIsIDE4NzAwLCAxODcwOCwgMTg3MTcsIDE4NzI2LCAxODczNywgMTg3NDcsIDE4NzU3LCAxODc2OCwgCi0gICAgMTg3NzksIDE4Nzg5LCAxODc5OSwgMTg4MDksIDE4ODE5LCAxODgyOSwgMTg4MzksIDE4ODQ5LCAxODg1OSwgMTg4NjcsIAotICAgIDE4ODc0LCAxODg4MCwgMTg4ODcsIDE4ODkyLCAxODg5OCwgMTg5MDQsIDE4OTEwLCAxODkxNiwgMTg5MjIsIDE4OTI4LCAKLSAgICAxODkzMywgMTg5MzksIDE4OTQ1LCAxODk1MSwgMTg5NTcsIDE4OTYyLCAxODk3MCwgMTg5NzcsIDE4OTgzLCAxODk5MCwgCi0gICAgMTg5OTgsIDE5MDA0LCAxOTAxMCwgMTkwMTYsIDE5MDIyLCAxOTAzMCwgMTkwMzgsIDE5MDQ4LCAxOTA1NiwgMTkwNjQsIAotICAgIDE5MDcwLCAxOTA3NSwgMTkwODAsIDE5MDg1LCAxOTA5MCwgMTkwOTUsIDE5MTAwLCAxOTEwNSwgMTkxMTAsIDE5MTE1LCAKLSAgICAxOTEyMSwgMTkxMjcsIDE5MTMzLCAxOTE0MCwgMTkxNDUsIDE5MTUxLCAxOTE1NiwgMTkxNjEsIDE5MTY2LCAxOTE3MSwgCi0gICAgMTkxNzYsIDE5MTgxLCAxOTE4NiwgMTkxOTEsIDE5MTk2LCAxOTIwMSwgMTkyMDYsIDE5MjExLCAxOTIxNiwgMTkyMjEsIAotICAgIDE5MjI2LCAxOTIzMSwgMTkyMzYsIDE5MjQxLCAxOTI0NiwgMTkyNTEsIDE5MjU2LCAxOTI2MSwgMTkyNjYsIDE5MjcxLCAKLSAgICAxOTI3NiwgMTkyODEsIDE5Mjg2LCAxOTI5MSwgMTkyOTYsIDE5MzAxLCAxOTMwNiwgMTkzMTEsIDE5MzE2LCAxOTMyMSwgCi0gICAgMTkzMjYsIDE5MzMxLCAxOTMzNiwgMCwgMTkzNDEsIDAsIDAsIDAsIDAsIDAsIDE5MzQ2LCAwLCAwLCAxOTM1MSwgMTkzNTUsIAotICAgIDE5MzU5LCAxOTM2MywgMTkzNjcsIDE5MzcxLCAxOTM3NSwgMTkzNzksIDE5MzgzLCAxOTM4NywgMTkzOTEsIDE5Mzk1LCAKLSAgICAxOTM5OSwgMTk0MDMsIDE5NDA3LCAxOTQxMSwgMTk0MTUsIDE5NDE5LCAxOTQyMywgMTk0MjcsIDE5NDMxLCAxOTQzNSwgCi0gICAgMTk0MzksIDE5NDQzLCAxOTQ0NywgMTk0NTEsIDE5NDU1LCAxOTQ1OSwgMTk0NjMsIDE5NDY3LCAxOTQ3MSwgMTk0NzUsIAotICAgIDE5NDc5LCAxOTQ4MywgMTk0ODcsIDE5NDkxLCAxOTQ5NSwgMTk0OTksIDE5NTAzLCAxOTUwNywgMTk1MTEsIDE5NTE1LCAKLSAgICAxOTUyMSwgMTk1MjUsIDE5NTMwLCAxOTUzNSwgMTk1MzksIDE5NTQ0LCAxOTU0OSwgMTk1NTMsIDE5NTU3LCAxOTU2MSwgCi0gICAgMTk1NjUsIDE5NTY5LCAxOTU3MywgMTk1NzcsIDE5NTgxLCAxOTU4NSwgMTk1ODksIDE5NTkzLCAxOTU5NywgMTk2MDEsIAotICAgIDE5NjA1LCAxOTYwOSwgMTk2MTMsIDE5NjE3LCAxOTYyMSwgMTk2MjUsIDE5NjI5LCAxOTYzMywgMTk2MzcsIDE5NjQxLCAKLSAgICAxOTY0NSwgMTk2NDksIDE5NjUzLCAxOTY1NywgMTk2NjEsIDE5NjY1LCAxOTY2OSwgMTk2NzMsIDE5Njc3LCAxOTY4MSwgCi0gICAgMTk2ODUsIDE5Njg5LCAxOTY5MywgMTk2OTcsIDE5NzAxLCAxOTcwNSwgMTk3MDksIDE5NzEzLCAxOTcxNywgMTk3MjEsIAotICAgIDE5NzI1LCAxOTcyOSwgMTk3MzMsIDE5NzM3LCAxOTc0MSwgMTk3NDUsIDE5NzQ5LCAxOTc1MywgMTk3NTcsIDE5NzYxLCAKLSAgICAxOTc2NSwgMTk3NjksIDE5NzczLCAxOTc3NywgMTk3ODEsIDE5Nzg1LCAxOTc4OSwgMTk3OTMsIDE5Nzk3LCAxOTgwMSwgCi0gICAgMTk4MDUsIDE5ODA5LCAxOTgxMywgMTk4MTcsIDE5ODIxLCAxOTgyNSwgMTk4MjksIDE5ODMzLCAxOTgzNywgMTk4NDEsIAotICAgIDE5ODQ1LCAxOTg0OSwgMTk4NTMsIDE5ODU3LCAxOTg2MSwgMTk4NjUsIDE5ODY5LCAxOTg3MywgMTk4NzcsIDE5ODgxLCAKLSAgICAxOTg4NSwgMTk4ODksIDE5ODkzLCAxOTg5NywgMTk5MDEsIDE5OTA1LCAxOTkwOSwgMTk5MTMsIDE5OTE3LCAxOTkyMSwgCi0gICAgMTk5MjUsIDE5OTI5LCAxOTkzMywgMTk5MzcsIDE5OTQwLCAxOTk0NCwgMTk5NDcsIDE5OTUxLCAxOTk1NSwgMTk5NTgsIAotICAgIDE5OTYyLCAxOTk2NiwgMTk5NjksIDE5OTczLCAxOTk3NywgMTk5ODEsIDE5OTg1LCAxOTk4OCwgMTk5OTIsIDE5OTk2LCAKLSAgICAyMDAwMCwgMjAwMDQsIDIwMDA4LCAyMDAxMiwgMjAwMTUsIDIwMDE5LCAyMDAyMywgMjAwMjcsIDIwMDMxLCAyMDAzNSwgCi0gICAgMjAwMzksIDIwMDQzLCAyMDA0NywgMjAwNTEsIDIwMDU1LCAyMDA1OSwgMjAwNjMsIDIwMDY3LCAyMDA3MSwgMjAwNzUsIAotICAgIDIwMDc5LCAyMDA4MywgMjAwODcsIDIwMDkxLCAyMDA5NSwgMjAwOTksIDIwMTAzLCAyMDEwNywgMjAxMTEsIDIwMTE1LCAKLSAgICAyMDExOSwgMjAxMjMsIDIwMTI3LCAyMDEzMSwgMjAxMzUsIDIwMTM5LCAyMDE0MywgMjAxNDcsIDIwMTUxLCAyMDE1NSwgCi0gICAgMjAxNTksIDIwMTYzLCAyMDE2NywgMjAxNzEsIDIwMTc1LCAyMDE3OSwgMjAxODMsIDIwMTg3LCAyMDE5MSwgMjAxOTUsIAotICAgIDIwMTk5LCAyMDIwMywgMjAyMDcsIDIwMjExLCAyMDIxNSwgMjAyMTksIDIwMjIzLCAyMDIyNywgMjAyMzEsIDIwMjM1LCAKLSAgICAyMDIzOSwgMjAyNDMsIDIwMjQ3LCAyMDI1MSwgMjAyNTUsIDIwMjU5LCAyMDI2MywgMjAyNjcsIDIwMjcxLCAyMDI3NSwgCi0gICAgMjAyNzksIDIwMjgzLCAyMDI4NywgMjAyOTEsIDIwMjk1LCAyMDI5OSwgMjAzMDMsIDIwMzA3LCAyMDMxMSwgMjAzMTUsIAotICAgIDIwMzE5LCAyMDMyMywgMjAzMjcsIDIwMzMxLCAyMDMzNSwgMjAzMzksIDIwMzQzLCAyMDM0NywgMjAzNTEsIDIwMzU1LCAKLSAgICAyMDM1OSwgMjAzNjMsIDIwMzY3LCAyMDM3MSwgMjAzNzUsIDIwMzc5LCAyMDM4MywgMjAzODcsIDIwMzkxLCAyMDM5NSwgCi0gICAgMjAzOTksIDIwNDAzLCAyMDQwNywgMjA0MTEsIDIwNDE1LCAyMDQxOSwgMjA0MjMsIDIwNDI3LCAyMDQzMSwgMjA0MzUsIAotICAgIDIwNDM5LCAyMDQ0MywgMjA0NDcsIDIwNDUxLCAyMDQ1NSwgMjA0NTksIDIwNDYzLCAyMDQ2NywgMjA0NzEsIDIwNDc1LCAKLSAgICAyMDQ3OSwgMjA0ODMsIDIwNDg3LCAyMDQ5MSwgMjA0OTUsIDIwNDk5LCAyMDUwMywgMjA1MDcsIDIwNTExLCAyMDUxNSwgCi0gICAgMjA1MTksIDIwNTIzLCAyMDUyNywgMjA1MzEsIDIwNTM1LCAyMDUzOSwgMjA1NDMsIDIwNTQ3LCAyMDU1MSwgMjA1NTUsIAotICAgIDIwNTU5LCAyMDU2MywgMjA1NjcsIDIwNTcwLCAyMDU3NCwgMjA1NzgsIDIwNTgyLCAyMDU4NiwgMjA1OTAsIDIwNTk0LCAKLSAgICAyMDU5OCwgMjA2MDIsIDIwNjA2LCAyMDYxMCwgMjA2MTQsIDIwNjE4LCAyMDYyMiwgMjA2MjYsIDIwNjMwLCAyMDYzNCwgCi0gICAgMjA2MzgsIDIwNjQyLCAyMDY0NiwgMjA2NTAsIDIwNjU0LCAyMDY1OCwgMjA2NjIsIDIwNjY1LCAyMDY2OSwgMjA2NzMsIAotICAgIDIwNjc3LCAyMDY4MSwgMjA2ODUsIDIwNjg5LCAyMDY5MywgMjA2OTcsIDIwNzAxLCAyMDcwNSwgMjA3MDksIDIwNzEzLCAKLSAgICAyMDcxNywgMjA3MjEsIDIwNzI1LCAyMDcyOCwgMjA3MzIsIDIwNzM2LCAyMDc0MCwgMjA3NDQsIDIwNzQ4LCAyMDc1MiwgCi0gICAgMjA3NTYsIDIwNzU5LCAyMDc2MywgMjA3NjcsIDIwNzcxLCAyMDc3NSwgMjA3NzksIDIwNzgzLCAyMDc4NywgMjA3OTEsIAotICAgIDIwNzk1LCAyMDc5OSwgMjA4MDMsIDIwODA3LCAyMDgxMSwgMjA4MTUsIDIwODE5LCAyMDgyMywgMjA4MjcsIDIwODMxLCAKLSAgICAyMDgzNSwgMjA4MzksIDIwODQzLCAyMDg0NywgMjA4NTEsIDAsIDIwODU1LCAyMDg1OSwgMjA4NjMsIDIwODY3LCAwLCAwLCAKLSAgICAyMDg3MSwgMjA4NzUsIDIwODc5LCAyMDg4MywgMjA4ODcsIDIwODkxLCAyMDg5NSwgMCwgMjA4OTksIDAsIDIwOTAzLCAKLSAgICAyMDkwNywgMjA5MTEsIDIwOTE1LCAwLCAwLCAyMDkxOSwgMjA5MjMsIDIwOTI3LCAyMDkzMSwgMjA5MzUsIDIwOTM5LCAKLSAgICAyMDk0MywgMjA5NDcsIDIwOTUxLCAyMDk1NSwgMjA5NTksIDIwOTYzLCAyMDk2NywgMjA5NzEsIDIwOTc1LCAyMDk3OSwgCi0gICAgMjA5ODMsIDIwOTg3LCAyMDk5MSwgMjA5OTUsIDIwOTk5LCAyMTAwMywgMjEwMDcsIDIxMDEwLCAyMTAxNCwgMjEwMTgsIAotICAgIDIxMDIyLCAyMTAyNiwgMjEwMzAsIDIxMDM0LCAyMTAzOCwgMjEwNDIsIDIxMDQ2LCAyMTA1MCwgMjEwNTQsIDIxMDU4LCAKLSAgICAyMTA2MiwgMjEwNjYsIDIxMDcwLCAyMTA3NCwgMjEwNzgsIDAsIDIxMDgyLCAyMTA4NiwgMjEwOTAsIDIxMDk0LCAwLCAwLCAKLSAgICAyMTA5OCwgMjExMDEsIDIxMTA1LCAyMTEwOSwgMjExMTMsIDIxMTE3LCAyMTEyMSwgMjExMjUsIDIxMTI5LCAyMTEzMywgCi0gICAgMjExMzcsIDIxMTQxLCAyMTE0NSwgMjExNDksIDIxMTUzLCAyMTE1NywgMjExNjEsIDIxMTY2LCAyMTE3MSwgMjExNzYsIAotICAgIDIxMTgyLCAyMTE4OCwgMjExOTMsIDIxMTk4LCAyMTIwNCwgMjEyMDcsIDIxMjExLCAyMTIxNSwgMjEyMTksIDIxMjIzLCAKLSAgICAyMTIyNywgMjEyMzEsIDIxMjM1LCAwLCAyMTIzOSwgMjEyNDMsIDIxMjQ3LCAyMTI1MSwgMCwgMCwgMjEyNTUsIDIxMjU5LCAKLSAgICAyMTI2MywgMjEyNjcsIDIxMjcxLCAyMTI3NSwgMjEyNzksIDAsIDIxMjgzLCAwLCAyMTI4NywgMjEyOTEsIDIxMjk1LCAKLSAgICAyMTI5OSwgMCwgMCwgMjEzMDMsIDIxMzA3LCAyMTMxMSwgMjEzMTUsIDIxMzE5LCAyMTMyMywgMjEzMjcsIDIxMzMxLCAKLSAgICAyMTMzNSwgMjEzNDAsIDIxMzQ1LCAyMTM1MCwgMjEzNTYsIDIxMzYyLCAyMTM2NywgMCwgMjEzNzIsIDIxMzc2LCAyMTM4MCwgCi0gICAgMjEzODQsIDIxMzg4LCAyMTM5MiwgMjEzOTYsIDIxNDAwLCAyMTQwNCwgMjE0MDgsIDIxNDEyLCAyMTQxNiwgMjE0MjAsIAotICAgIDIxNDI0LCAyMTQyOCwgMjE0MzIsIDIxNDM2LCAyMTQzOSwgMjE0NDMsIDIxNDQ3LCAyMTQ1MSwgMjE0NTUsIDIxNDU5LCAKLSAgICAyMTQ2MywgMjE0NjcsIDIxNDcxLCAyMTQ3NSwgMjE0NzksIDIxNDgzLCAyMTQ4NywgMjE0OTEsIDIxNDk1LCAyMTQ5OSwgCi0gICAgMjE1MDMsIDIxNTA3LCAyMTUxMSwgMjE1MTUsIDIxNTE5LCAyMTUyMywgMjE1MjcsIDIxNTMxLCAyMTUzNSwgMjE1MzksIAotICAgIDIxNTQzLCAyMTU0NywgMjE1NTEsIDIxNTU1LCAyMTU1OSwgMjE1NjMsIDIxNTY3LCAyMTU3MSwgMjE1NzUsIDIxNTc5LCAKLSAgICAyMTU4MywgMjE1ODcsIDIxNTkxLCAyMTU5NSwgMCwgMjE1OTksIDIxNjAzLCAyMTYwNywgMjE2MTEsIDAsIDAsIDIxNjE1LCAKLSAgICAyMTYxOSwgMjE2MjMsIDIxNjI3LCAyMTYzMSwgMjE2MzUsIDIxNjM5LCAyMTY0MywgMjE2NDcsIDIxNjUxLCAyMTY1NSwgCi0gICAgMjE2NTksIDIxNjYzLCAyMTY2NywgMjE2NzEsIDIxNjc1LCAyMTY3OSwgMjE2ODMsIDIxNjg3LCAyMTY5MSwgMjE2OTUsIAotICAgIDIxNjk5LCAyMTcwMywgMjE3MDcsIDIxNzExLCAyMTcxNSwgMjE3MTksIDIxNzIzLCAyMTcyNywgMjE3MzEsIDIxNzM1LCAKLSAgICAyMTczOSwgMjE3NDMsIDIxNzQ3LCAyMTc1MSwgMjE3NTUsIDIxNzU5LCAyMTc2MywgMjE3NjcsIDIxNzcxLCAyMTc3NSwgCi0gICAgMjE3NzksIDIxNzgzLCAyMTc4NywgMjE3OTEsIDIxNzk1LCAyMTc5OSwgMjE4MDMsIDIxODA3LCAyMTgxMSwgMjE4MTUsIAotICAgIDIxODE5LCAyMTgyMywgMjE4MjcsIDIxODMxLCAyMTgzNSwgMjE4MzksIDIxODQyLCAyMTg0NiwgMjE4NTAsIDIxODU0LCAKLSAgICAyMTg1OCwgMjE4NjIsIDIxODY2LCAyMTg3MCwgMjE4NzQsIDIxODc4LCAwLCAwLCAyMTg4MiwgMjE4OTEsIDIxODk3LCAKLSAgICAyMTkwMiwgMjE5MDYsIDIxOTA5LCAyMTkxNCwgMjE5MTcsIDIxOTIwLCAyMTkyMywgMjE5MjgsIDIxOTMyLCAyMTkzNywgCi0gICAgMjE5NDAsIDIxOTQzLCAyMTk0NiwgMjE5NDksIDIxOTUyLCAyMTk1NSwgMjE5NTgsIDIxOTYxLCAyMTk2NCwgMjE5NjgsIAotICAgIDIxOTcyLCAyMTk3NiwgMjE5ODAsIDIxOTg0LCAyMTk4OCwgMjE5OTIsIDIxOTk2LCAyMjAwMCwgMjIwMDQsIDAsIDAsIDAsIAotICAgIDIyMDEwLCAyMjAxNiwgMjIwMjAsIDIyMDI0LCAyMjAyOCwgMjIwMzQsIDIyMDM4LCAyMjA0MiwgMjIwNDYsIDIyMDUyLCAKLSAgICAyMjA1NiwgMjIwNjAsIDIyMDY0LCAyMjA3MCwgMjIwNzQsIDIyMDc4LCAyMjA4MiwgMjIwODgsIDIyMDk0LCAyMjEwMCwgCi0gICAgMjIxMDgsIDIyMTE0LCAyMjEyMCwgMjIxMjYsIDIyMTMyLCAyMjEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNDQsIDIyMTQ3LCAKLSAgICAyMjE1MCwgMjIxNTMsIDIyMTU2LCAyMjE1OSwgMjIxNjMsIDIyMTY3LCAyMjE3MCwgMjIxNzQsIDIyMTc4LCAyMjE4MiwgCi0gICAgMjIxODYsIDIyMTkwLCAyMjE5MywgMjIxOTcsIDIyMjAxLCAyMjIwNSwgMjIyMDksIDIyMjEzLCAyMjIxNywgMjIyMjEsIAotICAgIDIyMjI1LCAyMjIyOSwgMjIyMzMsIDIyMjM3LCAyMjI0MCwgMjIyNDQsIDIyMjQ4LCAyMjI1MiwgMjIyNTYsIDIyMjU5LCAKLSAgICAyMjI2MywgMjIyNjcsIDIyMjcxLCAyMjI3NSwgMjIyNzksIDIyMjgzLCAyMjI4NywgMjIyOTEsIDIyMjk1LCAyMjI5OSwgCi0gICAgMjIzMDMsIDIyMzA3LCAyMjMxMSwgMjIzMTQsIDIyMzE4LCAyMjMyMiwgMjIzMjYsIDIyMzMwLCAyMjMzNCwgMjIzMzgsIAotICAgIDIyMzQyLCAyMjM0NiwgMjIzNTAsIDIyMzU0LCAyMjM1OCwgMjIzNjIsIDIyMzY2LCAyMjM3MCwgMjIzNzQsIDIyMzc4LCAKLSAgICAyMjM4MiwgMjIzODYsIDIyMzkwLCAyMjM5NCwgMjIzOTgsIDIyNDAyLCAyMjQwNiwgMjI0MTAsIDIyNDE0LCAyMjQxOCwgCi0gICAgMjI0MjIsIDIyNDI2LCAyMjQzMCwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1MywgMjI0NTcsIAotICAgIDIyNDYxLCAyMjQ2NSwgMjI0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNDczLCAyMjQ3NywgCi0gICAgMjI0ODAsIDIyNDg0LCAyMjQ4NywgMjI0OTEsIDIyNDk0LCAyMjQ5OCwgMjI1MDQsIDIyNTA5LCAyMjUxMywgMjI1MTYsIAotICAgIDIyNTIwLCAyMjUyNCwgMjI1MjksIDIyNTMzLCAyMjUzOCwgMjI1NDIsIDIyNTQ3LCAyMjU1MSwgMjI1NTYsIDIyNTYwLCAKLSAgICAyMjU2NSwgMjI1NzEsIDIyNTc1LCAyMjU4MCwgMjI1ODQsIDIyNTg5LCAyMjU5NSwgMjI1OTksIDIyNjA1LCAyMjYxMSwgCi0gICAgMjI2MTUsIDIyNjIwLCAyMjYyOCwgMjI2MzYsIDIyNjQzLCAyMjY0OCwgMjI2NTMsIDIyNjYyLCAyMjY2OSwgMjI2NzYsIAotICAgIDIyNjgxLCAyMjY4NywgMjI2OTEsIDIyNjk1LCAyMjY5OSwgMjI3MDMsIDIyNzA3LCAyMjcxMSwgMjI3MTUsIDIyNzE5LCAKLSAgICAyMjcyMywgMjI3MjcsIDIyNzMzLCAyMjczOCwgMjI3NDMsIDIyNzQ2LCAyMjc1MCwgMjI3NTQsIDIyNzU5LCAyMjc2MywgCi0gICAgMjI3NjgsIDIyNzcyLCAyMjc3NywgMjI3ODEsIDIyNzg2LCAyMjc5MCwgMjI3OTUsIDIyNzk5LCAyMjgwNCwgMjI4MDgsIAotICAgIDIyODEzLCAyMjgxOSwgMjI4MjMsIDIyODI4LCAyMjgzMywgMjI4MzcsIDIyODQxLCAyMjg0NSwgMjI4NDksIDIyODUyLCAKLSAgICAyMjg1NiwgMjI4NjIsIDIyODY3LCAyMjg3MiwgMjI4NzYsIDIyODgwLCAyMjg4NCwgMjI4ODksIDIyODkzLCAyMjg5OCwgCi0gICAgMjI5MDIsIDIyOTA3LCAyMjkxMCwgMjI5MTQsIDIyOTE4LCAyMjkyMywgMjI5MjcsIDIyOTMyLCAyMjkzNiwgMjI5NDEsIAotICAgIDIyOTQ3LCAyMjk1MSwgMjI5NTUsIDIyOTU5LCAyMjk2MywgMjI5NjcsIDIyOTcxLCAyMjk3NSwgMjI5NzksIDIyOTgzLCAKLSAgICAyMjk4NywgMjI5OTEsIDIyOTk3LCAyMzAwMCwgMjMwMDQsIDIzMDA4LCAyMzAxMywgMjMwMTcsIDIzMDIyLCAyMzAyNiwgCi0gICAgMjMwMzEsIDIzMDM1LCAyMzA0MCwgMjMwNDQsIDIzMDQ5LCAyMzA1MywgMjMwNTgsIDIzMDYyLCAyMzA2NywgMjMwNzMsIAotICAgIDIzMDc3LCAyMzA4MSwgMjMwODcsIDIzMDkzLCAyMzA5OSwgMjMxMDUsIDIzMTA5LCAyMzExMywgMjMxMTcsIDIzMTIxLCAKLSAgICAyMzEyNSwgMjMxMjksIDIzMTM1LCAyMzEzOSwgMjMxNDMsIDIzMTQ3LCAyMzE1MiwgMjMxNTYsIDIzMTYxLCAyMzE2NSwgCi0gICAgMjMxNzAsIDIzMTc0LCAyMzE3OSwgMjMxODMsIDIzMTg4LCAyMzE5MiwgMjMxOTcsIDIzMjAxLCAyMzIwNiwgMjMyMTIsIAotICAgIDIzMjE2LCAyMzIyMiwgMjMyMjYsIDIzMjMwLCAyMzIzNCwgMjMyMzgsIDIzMjQyLCAyMzI0NiwgMjMyNTIsIDIzMjU1LCAKLSAgICAyMzI1OSwgMjMyNjMsIDIzMjY4LCAyMzI3MiwgMjMyNzcsIDIzMjgxLCAyMzI4NiwgMjMyOTAsIDIzMjk1LCAyMzI5OSwgCi0gICAgMjMzMDQsIDIzMzA4LCAyMzMxMywgMjMzMTcsIDIzMzIyLCAyMzMyOCwgMjMzMzEsIDIzMzM1LCAyMzMzOSwgMjMzNDQsIAotICAgIDIzMzQ5LCAyMzM1MywgMjMzNTcsIDIzMzYxLCAyMzM2NSwgMjMzNjksIDIzMzczLCAyMzM3OSwgMjMzODIsIDIzMzg2LCAKLSAgICAyMzM5MCwgMjMzOTUsIDIzMzk5LCAyMzQwNCwgMjM0MDgsIDIzNDEzLCAyMzQxOSwgMjM0MjMsIDIzNDI4LCAyMzQzMiwgCi0gICAgMjM0MzYsIDIzNDQwLCAyMzQ0NCwgMjM0NDgsIDIzNDUyLCAyMzQ1NiwgMjM0NjIsIDIzNDY2LCAyMzQ3MCwgMjM0NzQsIAotICAgIDIzNDc5LCAyMzQ4MywgMjM0ODgsIDIzNDkyLCAyMzQ5NywgMjM1MDEsIDIzNTA2LCAyMzUxMCwgMjM1MTUsIDIzNTE5LCAKLSAgICAyMzUyNCwgMjM1MjgsIDIzNTMzLCAyMzUzNiwgMjM1NDAsIDIzNTQ0LCAyMzU0OCwgMjM1NTIsIDIzNTU2LCAyMzU2MCwgCi0gICAgMjM1NjQsIDIzNTY4LCAyMzU3NCwgMjM1NzcsIDIzNTgxLCAyMzU4NSwgMjM1OTAsIDIzNTk0LCAyMzU5OSwgMjM2MDMsIAotICAgIDIzNjA4LCAyMzYxMiwgMjM2MTcsIDIzNjIxLCAyMzYyNiwgMjM2MzAsIDIzNjM1LCAyMzYzOSwgMjM2NDQsIDIzNjUwLCAKLSAgICAyMzY1NCwgMjM2NjAsIDIzNjY0LCAyMzY3MCwgMjM2NzYsIDIzNjgyLCAyMzY4OCwgMjM2OTQsIDIzNzAwLCAyMzcwNiwgCi0gICAgMjM3MTIsIDIzNzE2LCAyMzcyMCwgMjM3MjQsIDIzNzI4LCAyMzczMiwgMjM3MzYsIDIzNzQwLCAyMzc0NCwgMjM3NDksIAotICAgIDIzNzUzLCAyMzc1OCwgMjM3NjIsIDIzNzY3LCAyMzc3MSwgMjM3NzYsIDIzNzgwLCAyMzc4NSwgMjM3ODksIDIzNzk0LCAKLSAgICAyMzc5OCwgMjM4MDMsIDIzODA3LCAyMzgxMSwgMjM4MTUsIDIzODE5LCAyMzgyMywgMjM4MjcsIDIzODMxLCAyMzgzNywgCi0gICAgMjM4NDAsIDIzODQ0LCAyMzg0OCwgMjM4NTMsIDIzODU3LCAyMzg2MiwgMjM4NjYsIDIzODcxLCAyMzg3NSwgMjM4ODAsIAotICAgIDIzODg0LCAyMzg4OSwgMjM4OTMsIDIzODk4LCAyMzkwMiwgMjM5MDcsIDIzOTEzLCAyMzkxNywgMjM5MjMsIDIzOTI4LCAKLSAgICAyMzkzNCwgMjM5MzgsIDIzOTQ0LCAyMzk0OSwgMjM5NTMsIDIzOTU3LCAyMzk2MSwgMjM5NjUsIDIzOTY5LCAyMzk3NCwgCi0gICAgMjM5NzcsIDIzOTgxLCAyMzk4NiwgMjM5OTAsIDIzOTk1LCAyMzk5OCwgMjQwMDIsIDI0MDA2LCAyNDAxMCwgMjQwMTQsIAotICAgIDI0MDE4LCAyNDAyMiwgMjQwMjYsIDI0MDMwLCAyNDAzNCwgMjQwMzgsIDI0MDQyLCAyNDA0NywgMjQwNTEsIDI0MDU1LCAKLSAgICAyNDA2MSwgMjQwNjUsIDI0MDcxLCAyNDA3NSwgMjQwODEsIDI0MDg1LCAyNDA4OSwgMjQwOTMsIDI0MDk3LCAyNDEwMSwgCi0gICAgMjQxMDYsIDI0MTEwLCAyNDExNCwgMjQxMTgsIDI0MTIyLCAyNDEyNiwgMjQxMzAsIDI0MTM0LCAyNDEzOCwgMjQxNDIsIAotICAgIDI0MTQ2LCAyNDE1MiwgMjQxNTgsIDI0MTY0LCAyNDE3MCwgMjQxNzYsIDI0MTgxLCAyNDE4NywgMjQxOTMsIDI0MTk5LCAKLSAgICAyNDIwMywgMjQyMDcsIDI0MjExLCAyNDIxNSwgMjQyMTksIDI0MjIzLCAyNDIyNywgMjQyMzEsIDI0MjM1LCAyNDIzOSwgCi0gICAgMjQyNDMsIDI0MjQ3LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NiwgMjQyNzAsIDI0Mjc0LCAyNDI3OCwgMjQyODIsIAotICAgIDI0Mjg2LCAyNDI5MCwgMjQyOTQsIDI0Mjk4LCAyNDMwMiwgMjQzMDYsIDI0MzEyLCAyNDMxOCwgMjQzMjQsIDI0MzMwLCAKLSAgICAyNDMzNiwgMjQzNDIsIDI0MzQ4LCAyNDM1NCwgMjQzNjAsIDI0MzY0LCAyNDM2OCwgMjQzNzIsIDI0Mzc2LCAyNDM4MCwgCi0gICAgMjQzODQsIDI0Mzg4LCAyNDM5NCwgMjQ0MDAsIDI0NDA2LCAyNDQxMiwgMjQ0MTgsIDI0NDI0LCAyNDQzMCwgMjQ0MzYsIAotICAgIDI0NDQyLCAyNDQ0NywgMjQ0NTIsIDI0NDU3LCAyNDQ2MiwgMjQ0NjgsIDI0NDc0LCAyNDQ4MCwgMjQ0ODYsIDI0NDkyLCAKLSAgICAyNDQ5OCwgMjQ1MDQsIDI0NTA5LCAyNDUxNSwgMjQ1MjEsIDI0NTI3LCAyNDUzMiwgMjQ1MzgsIDI0NTQ0LCAyNDU1MCwgCi0gICAgMjQ1NTUsIDI0NTYwLCAyNDU2NSwgMjQ1NzAsIDI0NTc1LCAyNDU4MCwgMjQ1ODUsIDI0NTkwLCAyNDU5NSwgMjQ2MDAsIAotICAgIDI0NjA1LCAyNDYxMCwgMjQ2MTQsIDI0NjE5LCAyNDYyNCwgMjQ2MjksIDI0NjM0LCAyNDYzOSwgMjQ2NDQsIDI0NjQ5LCAKLSAgICAyNDY1NCwgMjQ2NTksIDI0NjY0LCAyNDY2OSwgMjQ2NzQsIDI0Njc5LCAyNDY4NCwgMjQ2ODksIDI0Njk0LCAyNDY5OSwgCi0gICAgMjQ3MDQsIDI0NzA5LCAyNDcxNCwgMjQ3MTksIDI0NzI0LCAyNDcyOSwgMjQ3MzQsIDI0NzM5LCAyNDc0NCwgMjQ3NDksIAotICAgIDI0NzU0LCAyNDc1OSwgMjQ3NjMsIDI0NzY4LCAyNDc3MywgMjQ3NzgsIDI0NzgzLCAyNDc4OCwgMjQ3OTMsIDI0Nzk4LCAKLSAgICAyNDgwMywgMjQ4MDgsIDI0ODEzLCAyNDgxOCwgMjQ4MjMsIDI0ODI4LCAyNDgzMywgMjQ4MzgsIDI0ODQzLCAyNDg0OCwgCi0gICAgMjQ4NTMsIDI0ODU4LCAyNDg2MywgMjQ4NjgsIDI0ODczLCAyNDg3OCwgMjQ4ODMsIDI0ODg4LCAyNDg5MiwgMjQ4OTcsIAotICAgIDI0OTAyLCAyNDkwNywgMjQ5MTIsIDI0OTE3LCAyNDkyMSwgMjQ5MjYsIDI0OTMxLCAyNDkzNiwgMjQ5NDEsIDI0OTQ2LCAKLSAgICAyNDk1MCwgMjQ5NTUsIDI0OTYxLCAyNDk2NiwgMjQ5NzEsIDI0OTc2LCAyNDk4MSwgMjQ5ODcsIDI0OTkyLCAyNDk5NywgCi0gICAgMjUwMDIsIDI1MDA3LCAyNTAxMiwgMjUwMTcsIDI1MDIyLCAyNTAyNywgMjUwMzIsIDI1MDM3LCAyNTA0MiwgMjUwNDcsIAotICAgIDI1MDUyLCAyNTA1NywgMjUwNjIsIDI1MDY3LCAyNTA3MiwgMjUwNzcsIDI1MDgyLCAyNTA4NywgMjUwOTIsIDI1MDk3LCAKLSAgICAyNTEwMiwgMjUxMDcsIDI1MTEyLCAyNTExNywgMjUxMjIsIDI1MTI3LCAyNTEzMiwgMjUxMzcsIDI1MTQyLCAyNTE0NywgCi0gICAgMjUxNTIsIDI1MTU3LCAyNTE2MiwgMjUxNjcsIDI1MTcyLCAyNTE3NywgMjUxODIsIDI1MTg3LCAyNTE5MiwgMjUxOTcsIAotICAgIDI1MjAyLCAyNTIwNywgMjUyMTMsIDI1MjE4LCAyNTIyMywgMjUyMjgsIDI1MjMzLCAyNTIzOCwgMjUyNDMsIDI1MjQ4LCAKLSAgICAyNTI1MywgMjUyNTgsIDI1MjYzLCAyNTI2OCwgMjUyNzIsIDI1Mjc3LCAyNTI4MiwgMjUyODcsIDI1MjkyLCAyNTI5NywgCi0gICAgMjUzMDIsIDI1MzA3LCAyNTMxMiwgMjUzMTcsIDI1MzIyLCAyNTMyNywgMjUzMzIsIDI1MzM3LCAyNTM0MiwgMjUzNDcsIAotICAgIDI1MzUyLCAyNTM1NywgMjUzNjIsIDI1MzY3LCAyNTM3MiwgMjUzNzcsIDI1MzgyLCAyNTM4NywgMjUzOTIsIDI1Mzk3LCAKLSAgICAyNTQwMiwgMjU0MDgsIDI1NDEyLCAyNTQxNiwgMjU0MjAsIDI1NDI0LCAyNTQyOCwgMjU0MzIsIDI1NDM2LCAyNTQ0MCwgCi0gICAgMjU0NDYsIDI1NDUyLCAyNTQ1OCwgMjU0NjQsIDI1NDcwLCAyNTQ3NiwgMjU0ODIsIDI1NDg5LCAyNTQ5NSwgMjU1MDAsIAotICAgIDI1NTA1LCAyNTUxMCwgMjU1MTUsIDI1NTIwLCAyNTUyNSwgMjU1MzAsIDI1NTM1LCAyNTU0MCwgMjU1NDUsIDI1NTUwLCAKLSAgICAyNTU1NSwgMjU1NjAsIDI1NTY1LCAyNTU3MCwgMjU1NzUsIDI1NTgwLCAyNTU4NSwgMjU1OTAsIDI1NTk1LCAyNTYwMCwgCi0gICAgMjU2MDUsIDI1NjEwLCAyNTYxNSwgMjU2MjAsIDI1NjI1LCAyNTYzMCwgMjU2MzUsIDAsIDAsIDAsIDI1NjQyLCAyNTY1MiwgCi0gICAgMjU2NTYsIDI1NjYzLCAyNTY2NywgMjU2NzEsIDI1Njc1LCAyNTY4MywgMjU2ODcsIDI1NjkyLCAyNTY5NywgMjU3MDIsIAotICAgIDI1NzA2LCAyNTcxMSwgMjU3MTYsIDI1NzE5LCAyNTcyMywgMjU3MjcsIDI1NzM2LCAyNTc0MCwgMjU3NDQsIDI1NzUwLCAKLSAgICAyNTc1NCwgMjU3NTgsIDI1NzY2LCAyNTc3MCwgMjU3NzgsIDI1Nzg0LCAyNTc5MCwgMjU3OTYsIDI1ODAyLCAyNTgxMiwgCi0gICAgMjU4MTgsIDI1ODIyLCAyNTgzMSwgMjU4MzQsIDI1ODQwLCAyNTg0NCwgMjU4NTAsIDI1ODU1LCAyNTg2MSwgMjU4NjksIAotICAgIDI1ODc1LCAyNTg4MSwgMjU4ODksIDI1ODk1LCAyNTg5OSwgMjU5MDMsIDI1OTEzLCAyNTkxOSwgMjU5MjMsIDI1OTMzLCAKLSAgICAyNTkzOSwgMjU5NDMsIDI1OTQ3LCAyNTk1NCwgMjU5NjEsIDI1OTY2LCAyNTk3MSwgMjU5ODAsIDI1OTg0LCAyNTk4OCwgCi0gICAgMjU5OTIsIDI2MDAwLCAyNjAwNywgMjYwMTEsIDI2MDE1LCAyNjAxOSwgMjYwMjMsIDI2MDI3LCAyNjAzMSwgMjYwMzUsIAotICAgIDI2MDM5LCAyNjA0MywgMjYwNDcsIDI2MDUxLCAyNjA1NiwgMjYwNjEsIDI2MDY2LCAyNjA3MCwgMjYwNzQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MDc4LCAyNjA4MiwgMjYwODYsIDI2MDkwLCAyNjA5NCwgCi0gICAgMjYwOTksIDI2MTA0LCAyNjEwOSwgMjYxMTQsIDI2MTE4LCAyNjEyMiwgMjYxMjcsIDI2MTMxLCAwLCAyNjEzNSwgMjYxNDAsIAotICAgIDI2MTQ1LCAyNjE0OSwgMjYxNTMsIDI2MTU4LCAyNjE2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYxNjgsIDI2MTcyLCAyNjE3NiwgMjYxODAsIDI2MTg0LCAyNjE4OSwgMjYxOTQsIDI2MTk5LCAyNjIwNCwgMjYyMDgsIAotICAgIDI2MjEyLCAyNjIxNywgMjYyMjEsIDI2MjI1LCAyNjIyOSwgMjYyMzQsIDI2MjM5LCAyNjI0MywgMjYyNDcsIDI2MjUyLCAKLSAgICAyNjI1NywgMjYyNjIsIDI2MjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjI3MywgMjYyNzcsIDI2MjgxLCAKLSAgICAyNjI4NSwgMjYyODksIDI2Mjk0LCAyNjI5OSwgMjYzMDQsIDI2MzA5LCAyNjMxMywgMjYzMTcsIDI2MzIyLCAyNjMyNiwgCi0gICAgMjYzMzAsIDI2MzM0LCAyNjMzOSwgMjYzNDQsIDI2MzQ4LCAyNjM1MiwgMjYzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI2MzYyLCAyNjM2NiwgMjYzNzAsIDI2Mzc0LCAyNjM3OCwgMjYzODMsIDI2Mzg4LCAyNjM5MywgCi0gICAgMjYzOTgsIDI2NDAyLCAyNjQwNiwgMjY0MTEsIDI2NDE1LCAwLCAyNjQxOSwgMjY0MjQsIDI2NDI5LCAwLCAyNjQzMywgCi0gICAgMjY0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDQzLCAyNjQ0NiwgMjY0NTAsIDI2NDU0LCAKLSAgICAyNjQ1OCwgMjY0NjIsIDI2NDY2LCAyNjQ3MCwgMjY0NzQsIDI2NDc4LCAyNjQ4MiwgMjY0ODYsIDI2NDkwLCAyNjQ5NCwgCi0gICAgMjY0OTgsIDI2NTAyLCAyNjUwNiwgMjY1MTAsIDI2NTEzLCAyNjUxNywgMjY1MjEsIDI2NTI1LCAyNjUyOSwgMjY1MzMsIAotICAgIDI2NTM3LCAyNjU0MSwgMjY1NDUsIDI2NTQ5LCAyNjU1MywgMjY1NTcsIDI2NTYxLCAyNjU2NSwgMjY1NjgsIDI2NTcxLCAKLSAgICAyNjU3NSwgMjY1NzksIDI2NTg1LCAyNjU5MSwgMjY1OTcsIDI2NjAzLCAyNjYwOSwgMjY2MTUsIDI2NjIxLCAyNjYyNywgCi0gICAgMjY2MzMsIDI2NjM5LCAyNjY0NSwgMjY2NTEsIDI2NjU3LCAyNjY2MywgMjY2NzIsIDI2NjgxLCAyNjY4NywgMjY2OTMsIAotICAgIDI2Njk5LCAyNjcwNCwgMjY3MDgsIDI2NzEzLCAyNjcxOCwgMjY3MjMsIDI2NzI3LCAyNjczMiwgMjY3MzcsIDI2NzQyLCAKLSAgICAyNjc0NiwgMjY3NTEsIDI2NzU1LCAyNjc2MCwgMjY3NjUsIDI2NzcwLCAyNjc3NSwgMjY3NzksIDI2NzgzLCAyNjc4NywgCi0gICAgMjY3OTEsIDI2Nzk1LCAyNjc5OSwgMjY4MDMsIDI2ODA3LCAyNjgxMSwgMjY4MTUsIDI2ODIxLCAyNjgyNSwgMjY4MjksIAotICAgIDI2ODMzLCAyNjgzNywgMjY4NDEsIDI2ODQ5LCAyNjg1NSwgMjY4NTksIDI2ODY1LCAyNjg2OSwgMjY4NzUsIDI2ODc5LCAwLCAKLSAgICAwLCAyNjg4MywgMjY4ODcsIDI2ODkwLCAyNjg5MywgMjY4OTYsIDI2ODk5LCAyNjkwMiwgMjY5MDUsIDI2OTA4LCAyNjkxMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY5MTQsIDI2OTIyLCAyNjkzMCwgMjY5MzgsIDI2OTQ2LCAyNjk1NCwgMjY5NjIsIDI2OTcwLCAKLSAgICAyNjk3OCwgMjY5ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTk0LCAyNjk5NywgMjcwMDAsIDI3MDAzLCAyNzAwOCwgMjcwMTEsIAotICAgIDI3MDE2LCAyNzAyMywgMjcwMzEsIDI3MDM2LCAyNzA0MywgMjcwNDYsIDI3MDUzLCAyNzA2MCwgMjcwNjcsIDAsIDI3MDcxLCAKLSAgICAyNzA3NSwgMjcwNzgsIDI3MDgxLCAyNzA4NCwgMjcwODcsIDI3MDkwLCAyNzA5MywgMjcwOTYsIDI3MDk5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyNzEwMiwgMjcxMDUsIDI3MTA4LCAyNzExMSwgMjcxMTQsIDI3MTE3LCAyNzEyMSwgMjcxMjUsIDI3MTI5LCAKLSAgICAyNzEzMiwgMjcxMzYsIDI3MTQwLCAyNzE0MywgMjcxNDcsIDI3MTUxLCAyNzE1NCwgMjcxNTgsIDI3MTYxLCAyNzE2NSwgCi0gICAgMjcxNjksIDI3MTczLCAyNzE3NywgMjcxODEsIDI3MTg0LCAyNzE4NywgMjcxOTEsIDI3MTk1LCAyNzE5OCwgMjcyMDIsIAotICAgIDI3MjA2LCAyNzIxMCwgMjcyMTQsIDI3MjE4LCAyNzIyMiwgMjcyMjYsIDI3MjMwLCAyNzIzNywgMjcyNDIsIDI3MjQ3LCAKLSAgICAyNzI1MiwgMjcyNTcsIDI3MjYzLCAyNzI2OSwgMjcyNzUsIDI3MjgxLCAyNzI4NiwgMjcyOTIsIDI3Mjk4LCAyNzMwMywgCi0gICAgMjczMDksIDI3MzE1LCAyNzMyMSwgMjczMjcsIDI3MzMzLCAyNzMzOCwgMjczNDQsIDI3MzQ5LCAyNzM1NSwgMjczNjEsIAotICAgIDI3MzY3LCAyNzM3MywgMjczNzksIDI3Mzg0LCAyNzM4OSwgMjczOTUsIDI3NDAxLCAyNzQwNiwgMjc0MTIsIDI3NDE3LCAKLSAgICAyNzQyMywgMjc0MjgsIDI3NDMzLCAyNzQzOSwgMjc0NDUsIDI3NDUxLCAyNzQ1NywgMjc0NjMsIDI3NDY5LCAyNzQ3NSwgCi0gICAgMjc0ODEsIDI3NDg3LCAyNzQ5MywgMjc0OTksIDI3NTA1LCAyNzUxMCwgMjc1MTUsIDI3NTIwLCAyNzUyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjc1MzIsIDI3NTQxLCAyNzU1MCwgMjc1NTgsIDI3NTY2LCAyNzU3NiwgMjc1ODQsIDI3NTkzLCAKLSAgICAyNzYwMCwgMjc2MDcsIDI3NjE0LCAyNzYyMiwgMjc2MzAsIDI3NjM4LCAyNzY0NiwgMjc2NTQsIDI3NjYyLCAyNzY3MCwgCi0gICAgMjc2NzgsIDI3Njg1LCAyNzY5MywgMjc3MDEsIDI3NzA5LCAyNzcxNywgMjc3MjUsIDI3NzM1LCAyNzc0NSwgMjc3NTUsIAotICAgIDI3NzY1LCAyNzc3NSwgMjc3ODUsIDI3Nzk1LCAyNzgwNSwgMjc4MTUsIDI3ODI1LCAyNzgzNSwgMjc4NDUsIDI3ODU1LCAKLSAgICAyNzg2NSwgMjc4NzMsIDI3ODgxLCAyNzg5MSwgMjc4OTksIDAsIDAsIDAsIDAsIDAsIDI3OTA5LCAyNzkxMywgMjc5MTcsIAotICAgIDI3OTIxLCAyNzkyNSwgMjc5MjksIDI3OTMzLCAyNzkzNywgMjc5NDEsIDI3OTQ1LCAyNzk0OSwgMjc5NTMsIDI3OTU3LCAKLSAgICAyNzk2MSwgMjc5NjUsIDI3OTY5LCAyNzk3MywgMjc5NzcsIDI3OTgxLCAyNzk4NSwgMjc5ODksIDI3OTkzLCAyNzk5NywgCi0gICAgMjgwMDEsIDI4MDA3LCAyODAxMSwgMjgwMTcsIDI4MDIxLCAyODAyNywgMjgwMzEsIDI4MDM3LCAyODA0MSwgMjgwNDUsIAotICAgIDI4MDQ5LCAyODA1MywgMjgwNTcsIDI4MDYxLCAyODA2NywgMjgwNzMsIDI4MDc5LCAyODA4NSwgMjgwOTAsIDI4MDk2LCAKLSAgICAyODEwMiwgMjgxMDgsIDI4MTE0LCAyODEyMCwgMjgxMjYsIDI4MTMzLCAyODEzOSwgMjgxNDQsIDI4MTQ5LCAyODE1MywgCi0gICAgMjgxNTcsIDI4MTYxLCAyODE2NSwgMjgxNjksIDI4MTczLCAyODE3NywgMjgxODMsIDI4MTg5LCAyODE5NSwgMjgyMDAsIAotICAgIDI4MjA3LCAyODIxMiwgMjgyMTcsIDI4MjIzLCAyODIyOCwgMjgyMzUsIDI4MjQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyODI0OSwgMjgyNTUsIDI4MjU5LCAyODI2NCwgMjgyNjksIDI4Mjc0LCAyODI3OSwgMjgyODQsIDI4Mjg5LCAKLSAgICAyODI5NCwgMjgyOTksIDI4MzA0LCAyODMwOSwgMjgzMTQsIDI4MzE5LCAyODMyNCwgMjgzMjgsIDI4MzMyLCAyODMzNywgCi0gICAgMjgzNDIsIDI4MzQ3LCAyODM1MSwgMjgzNTUsIDI4MzU5LCAyODM2NCwgMjgzNjksIDI4Mzc0LCAyODM3OSwgMjgzODMsIDAsIAotICAgIDAsIDAsIDI4Mzg3LCAyODM5MiwgMjgzOTcsIDI4NDAyLCAyODQwOCwgMjg0MTQsIDI4NDIwLCAyODQyNiwgMjg0MzEsIAotICAgIDI4NDM2LCAyODQ0MiwgMjg0NDgsIDAsIDAsIDAsIDAsIDI4NDU1LCAyODQ2MCwgMjg0NjYsIDI4NDcyLCAyODQ3OCwgCi0gICAgMjg0ODMsIDI4NDg4LCAyODQ5MywgMjg0OTgsIDI4NTA0LCAyODUwOSwgMjg1MTQsIDAsIDAsIDAsIDAsIDI4NTE5LCAwLCAwLCAKLSAgICAwLCAyODUyNCwgMjg1MjksIDI4NTM0LCAyODUzOSwgMjg1NDMsIDI4NTQ3LCAyODU1MSwgMjg1NTUsIDI4NTU5LCAyODU2MywgCi0gICAgMjg1NjcsIDI4NTcxLCAyODU3NSwgMjg1ODAsIDI4NTg2LCAyODU5MiwgMjg1OTgsIDI4NjAzLCAyODYwOCwgMjg2MTQsIAotICAgIDI4NjIwLCAyODYyNiwgMjg2MzEsIDI4NjM3LCAyODY0MiwgMjg2NDgsIDI4NjU0LCAyODY1OSwgMjg2NjUsIDI4NjcxLCAKLSAgICAyODY3NywgMjg2ODIsIDI4Njg3LCAyODY5MiwgMjg2OTgsIDI4NzA0LCAyODcwOSwgMjg3MTUsIDI4NzIwLCAyODcyNiwgCi0gICAgMjg3MzEsIDI4NzM3LCAwLCAwLCAyODc0MywgMjg3NDksIDI4NzU1LCAyODc2MSwgMjg3NjcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI4NzczLCAyODc4MCwgMjg3ODcsIDI4NzkzLCAyODgwMCwgMjg4MDcsIDI4ODEzLCAyODgyMCwgCi0gICAgMjg4MjcsIDI4ODM0LCAyODg0MCwgMjg4NDYsIDI4ODUzLCAyODg1OSwgMjg4NjUsIDI4ODcyLCAyODg3OSwgMjg4ODUsIAotICAgIDI4ODkyLCAyODg5OSwgMjg5MDUsIDI4OTExLCAyODkxOCwgMjg5MjQsIDI4OTMwLCAyODkzNywgMjg5NDMsIDI4OTUwLCAKLSAgICAyODk1NywgMjg5NjQsIDI4OTcxLCAyODk3OCwgMjg5ODUsIDI4OTkxLCAyODk5OCwgMjkwMDUsIDI5MDExLCAyOTAxOCwgCi0gICAgMjkwMjUsIDI5MDMyLCAyOTAzOSwgMjkwNDYsIDI5MDUzLCAyOTA2MCwgMCwgMCwgMCwgMCwgMjkwNjcsIDI5MDc1LCAKLSAgICAyOTA4MiwgMjkwODksIDI5MDk1LCAyOTEwMiwgMjkxMDgsIDI5MTE1LCAyOTEyMSwgMjkxMjgsIDI5MTM1LCAyOTE0MiwgCi0gICAgMjkxNDksIDI5MTU2LCAyOTE2MywgMjkxNzAsIDI5MTc3LCAyOTE4NCwgMjkxOTEsIDI5MTk4LCAyOTIwNSwgMjkyMTEsIAotICAgIDI5MjE4LCAyOTIyNSwgMjkyMzIsIDI5MjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI0NCwgMjkyNTAsIDI5MjU1LCAyOTI2MCwgCi0gICAgMjkyNjUsIDI5MjcwLCAyOTI3NSwgMjkyODAsIDI5Mjg1LCAyOTI5MCwgMjkyOTUsIDAsIDAsIDAsIDI5MzAxLCAyOTMwNywgCi0gICAgMjkzMTMsIDI5MzE3LCAyOTMyMywgMjkzMjksIDI5MzM1LCAyOTM0MSwgMjkzNDcsIDI5MzUzLCAyOTM1OSwgMjkzNjUsIAotICAgIDI5MzcxLCAyOTM3NywgMjkzODMsIDI5Mzg5LCAyOTM5NSwgMjk0MDEsIDI5NDA3LCAyOTQxMSwgMjk0MTcsIDI5NDIzLCAKLSAgICAyOTQyOSwgMjk0MzUsIDI5NDQxLCAyOTQ0NywgMjk0NTMsIDI5NDU5LCAyOTQ2NSwgMjk0NzEsIDI5NDc3LCAyOTQ4MywgCi0gICAgMjk0ODksIDI5NDk1LCAyOTUwMSwgMjk1MDUsIDI5NTEwLCAyOTUxNSwgMjk1MjAsIDI5NTI0LCAyOTUyOSwgMjk1MzMsIAotICAgIDI5NTM4LCAyOTU0MywgMjk1NDgsIDI5NTUyLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgMjk1NzcsIDI5NTgxLCAKLSAgICAyOTU4NSwgMjk1OTAsIDI5NTk1LCAyOTU5OSwgMjk2MDMsIDI5NjA3LCAyOTYxMiwgMjk2MTcsIDI5NjIyLCAyOTYyNywgMCwgCi0gICAgMCwgMjk2MzMsIDI5NjM3LCAyOTY0NCwgMjk2NDksIDI5NjU1LCAyOTY2MSwgMjk2NjYsIDI5NjcyLCAyOTY3OCwgMjk2ODMsIAotICAgIDI5Njg5LCAyOTY5NSwgMjk3MDEsIDI5NzA2LCAyOTcxMiwgMjk3MTcsIDI5NzIyLCAyOTcyOCwgMjk3MzMsIDI5NzM5LCAKLSAgICAyOTc0NCwgMjk3NTAsIDI5NzU2LCAyOTc2MiwgMjk3NjgsIDI5NzcyLCAyOTc3NywgMjk3ODIsIDI5Nzg4LCAyOTc5NCwgCi0gICAgMjk3OTksIDI5ODA1LCAyOTgxMSwgMjk4MTUsIDI5ODIwLCAyOTgyNSwgMjk4MjksIDI5ODM0LCAyOTgzOSwgMjk4NDQsIAotICAgIDI5ODQ5LCAyOTg1NSwgMjk4NjEsIDI5ODY2LCAyOTg3MSwgMjk4NzYsIDI5ODgwLCAyOTg4NSwgMjk4ODksIDI5ODk0LCAKLSAgICAyOTg5OCwgMjk5MDMsIDI5OTA4LCAyOTkxMywgMjk5MTgsIDI5OTI0LCAyOTkzMCwgMjk5MzcsIDI5OTQ3LCAyOTk1NiwgCi0gICAgMjk5NjMsIDI5OTY5LCAyOTk3OSwgMjk5ODQsIDI5OTkwLCAwLCAyOTk5NSwgMzAwMDAsIDMwMDA1LCAzMDAxMywgMzAwMTksIAotICAgIDMwMDI3LCAzMDAzMiwgMzAwMzgsIDMwMDQ0LCAzMDA1MCwgMzAwNTUsIDMwMDYxLCAzMDA2NiwgMzAwNzMsIDMwMDc5LCAKLSAgICAzMDA4NCwgMzAwOTAsIDMwMDk2LCAzMDEwMiwgMzAxMDksIDMwMTE2LCAzMDEyMywgMzAxMjgsIDMwMTMzLCAzMDE0MCwgCi0gICAgMzAxNDcsIDMwMTU0LCAzMDE2MSwgMzAxNjgsIDAsIDAsIDMwMTc1LCAzMDE4MiwgMzAxODksIDMwMTk1LCAzMDIwMSwgCi0gICAgMzAyMDcsIDMwMjEzLCAzMDIxOSwgMzAyMjUsIDMwMjMxLCAzMDIzNywgMCwgMCwgMCwgMCwgMCwgMCwgMzAyNDMsIDMwMjQ5LCAKLSAgICAzMDI1NCwgMzAyNTksIDMwMjY0LCAzMDI2OSwgMzAyNzQsIDMwMjc5LCAzMDI4NCwgMzAyODksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMwMjk0LCAzMDI5OSwgMzAzMDQsIDMwMzA5LCAzMDMxNCwgMzAzMTksIDMwMzI0LCAzMDMzMywgMzAzNDAsIDMwMzQ1LCAKLSAgICAzMDM1MCwgMzAzNTUsIDMwMzYwLCAzMDM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyODgsIDE4MjkxLCAxODI5NSwgMTgyOTksIDE4MzAzLCAKKyAgICAxODMwNywgMTgzMTEsIDE4MzE1LCAxODMxOSwgMTgzMjMsIDE4MzI3LCAxODMzMSwgMTgzMzUsIDE4MzM5LCAxODM0MywgCisgICAgMTgzNDcsIDE4MzUxLCAxODM1NSwgMTgzNTksIDE4MzYzLCAxODM2NywgMTgzNzAsIDE4MzczLCAxODM3NywgMTgzODEsIAorICAgIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk0LCAxODM5OCwgMTg0MDIsIDE4NDA1LCAxODQwOCwgMTg0MTIsIDE4NDE1LCAKKyAgICAxODQyMCwgMTg0MjMsIDE4NDI3LCAxODQzMCwgMTg0MzQsIDE4NDM3LCAxODQ0MiwgMTg0NDUsIDE4NDQ5LCAxODQ1NiwgCisgICAgMTg0NjEsIDE4NDY1LCAxODQ3MCwgMTg0NzQsIDE4NDc5LCAxODQ4MywgMTg0ODgsIDE4NDk1LCAxODUwMSwgMTg1MDYsIAorICAgIDE4NTEwLCAxODUxNCwgMTg1MTgsIDE4NTIyLCAxODUyNiwgMTg1MzEsIDE4NTM2LCAxODU0MiwgMTg1NDcsIDE4NTUyLCAKKyAgICAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAxODU4MywgCisgICAgMTg1ODksIDE4NTkzLCAxODU5NywgMTg2MDEsIDE4NjA1LCAxODYwOSwgMTg2MTMsIDE4NjE3LCAxODYyMSwgMTg2MjYsIAorICAgIDE4NjMwLCAxODYzNSwgMTg2NDAsIDE4NjQ2LCAxODY1MSwgMTg2NTcsIDE4NjYzLCAxODY2OSwgMTg2NzUsIDE4NjgxLCAKKyAgICAxODY4OCwgMTg2OTUsIDE4NzAzLCAxODcxMSwgMTg3MjAsIDE4NzI5LCAxODc0MCwgMTg3NTAsIDE4NzYwLCAxODc3MSwgCisgICAgMTg3ODIsIDE4NzkyLCAxODgwMiwgMTg4MTIsIDE4ODIyLCAxODgzMiwgMTg4NDIsIDE4ODUyLCAxODg2MiwgMTg4NzAsIAorICAgIDE4ODc3LCAxODg4MywgMTg4OTAsIDE4ODk1LCAxODkwMSwgMTg5MDcsIDE4OTEzLCAxODkxOSwgMTg5MjUsIDE4OTMxLCAKKyAgICAxODkzNiwgMTg5NDIsIDE4OTQ4LCAxODk1NCwgMTg5NjAsIDE4OTY1LCAxODk3MywgMTg5ODAsIDE4OTg2LCAxODk5MywgCisgICAgMTkwMDEsIDE5MDA3LCAxOTAxMywgMTkwMTksIDE5MDI1LCAxOTAzMywgMTkwNDEsIDE5MDUxLCAxOTA1OSwgMTkwNjcsIAorICAgIDE5MDczLCAxOTA3OCwgMTkwODMsIDE5MDg4LCAxOTA5MywgMTkwOTgsIDE5MTAzLCAxOTEwOCwgMTkxMTMsIDE5MTE4LCAKKyAgICAxOTEyNCwgMTkxMzAsIDE5MTM2LCAxOTE0MywgMTkxNDgsIDE5MTU0LCAxOTE1OSwgMTkxNjQsIDE5MTY5LCAxOTE3NCwgCisgICAgMTkxNzksIDE5MTg0LCAxOTE4OSwgMTkxOTQsIDE5MTk5LCAxOTIwNCwgMTkyMDksIDE5MjE0LCAxOTIxOSwgMTkyMjQsIAorICAgIDE5MjI5LCAxOTIzNCwgMTkyMzksIDE5MjQ0LCAxOTI0OSwgMTkyNTQsIDE5MjU5LCAxOTI2NCwgMTkyNjksIDE5Mjc0LCAKKyAgICAxOTI3OSwgMTkyODQsIDE5Mjg5LCAxOTI5NCwgMTkyOTksIDE5MzA0LCAxOTMwOSwgMTkzMTQsIDE5MzE5LCAxOTMyNCwgCisgICAgMTkzMjksIDE5MzM0LCAxOTMzOSwgMCwgMTkzNDQsIDAsIDAsIDAsIDAsIDAsIDE5MzQ5LCAwLCAwLCAxOTM1NCwgMTkzNTgsIAorICAgIDE5MzYyLCAxOTM2NiwgMTkzNzAsIDE5Mzc0LCAxOTM3OCwgMTkzODIsIDE5Mzg2LCAxOTM5MCwgMTkzOTQsIDE5Mzk4LCAKKyAgICAxOTQwMiwgMTk0MDYsIDE5NDEwLCAxOTQxNCwgMTk0MTgsIDE5NDIyLCAxOTQyNiwgMTk0MzAsIDE5NDM0LCAxOTQzOCwgCisgICAgMTk0NDIsIDE5NDQ2LCAxOTQ1MCwgMTk0NTQsIDE5NDU4LCAxOTQ2MiwgMTk0NjYsIDE5NDcwLCAxOTQ3NCwgMTk0NzgsIAorICAgIDE5NDgyLCAxOTQ4NiwgMTk0OTAsIDE5NDk0LCAxOTQ5OCwgMTk1MDIsIDE5NTA2LCAxOTUxMCwgMTk1MTQsIDE5NTE4LCAKKyAgICAxOTUyNCwgMTk1MjgsIDE5NTMzLCAxOTUzOCwgMTk1NDIsIDE5NTQ3LCAxOTU1MiwgMTk1NTYsIDE5NTYwLCAxOTU2NCwgCisgICAgMTk1NjgsIDE5NTcyLCAxOTU3NiwgMTk1ODAsIDE5NTg0LCAxOTU4OCwgMTk1OTIsIDE5NTk2LCAxOTYwMCwgMTk2MDQsIAorICAgIDE5NjA4LCAxOTYxMiwgMTk2MTYsIDE5NjIwLCAxOTYyNCwgMTk2MjgsIDE5NjMyLCAxOTYzNiwgMTk2NDAsIDE5NjQ0LCAKKyAgICAxOTY0OCwgMTk2NTIsIDE5NjU2LCAxOTY2MCwgMTk2NjQsIDE5NjY4LCAxOTY3MiwgMTk2NzYsIDE5NjgwLCAxOTY4NCwgCisgICAgMTk2ODgsIDE5NjkyLCAxOTY5NiwgMTk3MDAsIDE5NzA0LCAxOTcwOCwgMTk3MTIsIDE5NzE2LCAxOTcyMCwgMTk3MjQsIAorICAgIDE5NzI4LCAxOTczMiwgMTk3MzYsIDE5NzQwLCAxOTc0NCwgMTk3NDgsIDE5NzUyLCAxOTc1NiwgMTk3NjAsIDE5NzY0LCAKKyAgICAxOTc2OCwgMTk3NzIsIDE5Nzc2LCAxOTc4MCwgMTk3ODQsIDE5Nzg4LCAxOTc5MiwgMTk3OTYsIDE5ODAwLCAxOTgwNCwgCisgICAgMTk4MDgsIDE5ODEyLCAxOTgxNiwgMTk4MjAsIDE5ODI0LCAxOTgyOCwgMTk4MzIsIDE5ODM2LCAxOTg0MCwgMTk4NDQsIAorICAgIDE5ODQ4LCAxOTg1MiwgMTk4NTYsIDE5ODYwLCAxOTg2NCwgMTk4NjgsIDE5ODcyLCAxOTg3NiwgMTk4ODAsIDE5ODg0LCAKKyAgICAxOTg4OCwgMTk4OTIsIDE5ODk2LCAxOTkwMCwgMTk5MDQsIDE5OTA4LCAxOTkxMiwgMTk5MTYsIDE5OTIwLCAxOTkyNCwgCisgICAgMTk5MjgsIDE5OTMyLCAxOTkzNiwgMTk5NDAsIDE5OTQzLCAxOTk0NywgMTk5NTAsIDE5OTU0LCAxOTk1OCwgMTk5NjEsIAorICAgIDE5OTY1LCAxOTk2OSwgMTk5NzIsIDE5OTc2LCAxOTk4MCwgMTk5ODQsIDE5OTg4LCAxOTk5MSwgMTk5OTUsIDE5OTk5LCAKKyAgICAyMDAwMywgMjAwMDcsIDIwMDExLCAyMDAxNSwgMjAwMTgsIDIwMDIyLCAyMDAyNiwgMjAwMzAsIDIwMDM0LCAyMDAzOCwgCisgICAgMjAwNDIsIDIwMDQ2LCAyMDA1MCwgMjAwNTQsIDIwMDU4LCAyMDA2MiwgMjAwNjYsIDIwMDcwLCAyMDA3NCwgMjAwNzgsIAorICAgIDIwMDgyLCAyMDA4NiwgMjAwOTAsIDIwMDk0LCAyMDA5OCwgMjAxMDIsIDIwMTA2LCAyMDExMCwgMjAxMTQsIDIwMTE4LCAKKyAgICAyMDEyMiwgMjAxMjYsIDIwMTMwLCAyMDEzNCwgMjAxMzgsIDIwMTQyLCAyMDE0NiwgMjAxNTAsIDIwMTU0LCAyMDE1OCwgCisgICAgMjAxNjIsIDIwMTY2LCAyMDE3MCwgMjAxNzQsIDIwMTc4LCAyMDE4MiwgMjAxODYsIDIwMTkwLCAyMDE5NCwgMjAxOTgsIAorICAgIDIwMjAyLCAyMDIwNiwgMjAyMTAsIDIwMjE0LCAyMDIxOCwgMjAyMjIsIDIwMjI2LCAyMDIzMCwgMjAyMzQsIDIwMjM4LCAKKyAgICAyMDI0MiwgMjAyNDYsIDIwMjUwLCAyMDI1NCwgMjAyNTgsIDIwMjYyLCAyMDI2NiwgMjAyNzAsIDIwMjc0LCAyMDI3OCwgCisgICAgMjAyODIsIDIwMjg2LCAyMDI5MCwgMjAyOTQsIDIwMjk4LCAyMDMwMiwgMjAzMDYsIDIwMzEwLCAyMDMxNCwgMjAzMTgsIAorICAgIDIwMzIyLCAyMDMyNiwgMjAzMzAsIDIwMzM0LCAyMDMzOCwgMjAzNDIsIDIwMzQ2LCAyMDM1MCwgMjAzNTQsIDIwMzU4LCAKKyAgICAyMDM2MiwgMjAzNjYsIDIwMzcwLCAyMDM3NCwgMjAzNzgsIDIwMzgyLCAyMDM4NiwgMjAzOTAsIDIwMzk0LCAyMDM5OCwgCisgICAgMjA0MDIsIDIwNDA2LCAyMDQxMCwgMjA0MTQsIDIwNDE4LCAyMDQyMiwgMjA0MjYsIDIwNDMwLCAyMDQzNCwgMjA0MzgsIAorICAgIDIwNDQyLCAyMDQ0NiwgMjA0NTAsIDIwNDU0LCAyMDQ1OCwgMjA0NjIsIDIwNDY2LCAyMDQ3MCwgMjA0NzQsIDIwNDc4LCAKKyAgICAyMDQ4MiwgMjA0ODYsIDIwNDkwLCAyMDQ5NCwgMjA0OTgsIDIwNTAyLCAyMDUwNiwgMjA1MTAsIDIwNTE0LCAyMDUxOCwgCisgICAgMjA1MjIsIDIwNTI2LCAyMDUzMCwgMjA1MzQsIDIwNTM4LCAyMDU0MiwgMjA1NDYsIDIwNTUwLCAyMDU1NCwgMjA1NTgsIAorICAgIDIwNTYyLCAyMDU2NiwgMjA1NzAsIDIwNTczLCAyMDU3NywgMjA1ODEsIDIwNTg1LCAyMDU4OSwgMjA1OTMsIDIwNTk3LCAKKyAgICAyMDYwMSwgMjA2MDUsIDIwNjA5LCAyMDYxMywgMjA2MTcsIDIwNjIxLCAyMDYyNSwgMjA2MjksIDIwNjMzLCAyMDYzNywgCisgICAgMjA2NDEsIDIwNjQ1LCAyMDY0OSwgMjA2NTMsIDIwNjU3LCAyMDY2MSwgMjA2NjUsIDIwNjY4LCAyMDY3MiwgMjA2NzYsIAorICAgIDIwNjgwLCAyMDY4NCwgMjA2ODgsIDIwNjkyLCAyMDY5NiwgMjA3MDAsIDIwNzA0LCAyMDcwOCwgMjA3MTIsIDIwNzE2LCAKKyAgICAyMDcyMCwgMjA3MjQsIDIwNzI4LCAyMDczMSwgMjA3MzUsIDIwNzM5LCAyMDc0MywgMjA3NDcsIDIwNzUxLCAyMDc1NSwgCisgICAgMjA3NTksIDIwNzYyLCAyMDc2NiwgMjA3NzAsIDIwNzc0LCAyMDc3OCwgMjA3ODIsIDIwNzg2LCAyMDc5MCwgMjA3OTQsIAorICAgIDIwNzk4LCAyMDgwMiwgMjA4MDYsIDIwODEwLCAyMDgxNCwgMjA4MTgsIDIwODIyLCAyMDgyNiwgMjA4MzAsIDIwODM0LCAKKyAgICAyMDgzOCwgMjA4NDIsIDIwODQ2LCAyMDg1MCwgMjA4NTQsIDAsIDIwODU4LCAyMDg2MiwgMjA4NjYsIDIwODcwLCAwLCAwLCAKKyAgICAyMDg3NCwgMjA4NzgsIDIwODgyLCAyMDg4NiwgMjA4OTAsIDIwODk0LCAyMDg5OCwgMCwgMjA5MDIsIDAsIDIwOTA2LCAKKyAgICAyMDkxMCwgMjA5MTQsIDIwOTE4LCAwLCAwLCAyMDkyMiwgMjA5MjYsIDIwOTMwLCAyMDkzNCwgMjA5MzgsIDIwOTQyLCAKKyAgICAyMDk0NiwgMjA5NTAsIDIwOTU0LCAyMDk1OCwgMjA5NjIsIDIwOTY2LCAyMDk3MCwgMjA5NzQsIDIwOTc4LCAyMDk4MiwgCisgICAgMjA5ODYsIDIwOTkwLCAyMDk5NCwgMjA5OTgsIDIxMDAyLCAyMTAwNiwgMjEwMTAsIDIxMDEzLCAyMTAxNywgMjEwMjEsIAorICAgIDIxMDI1LCAyMTAyOSwgMjEwMzMsIDIxMDM3LCAyMTA0MSwgMjEwNDUsIDIxMDQ5LCAyMTA1MywgMjEwNTcsIDIxMDYxLCAKKyAgICAyMTA2NSwgMjEwNjksIDIxMDczLCAyMTA3NywgMjEwODEsIDAsIDIxMDg1LCAyMTA4OSwgMjEwOTMsIDIxMDk3LCAwLCAwLCAKKyAgICAyMTEwMSwgMjExMDQsIDIxMTA4LCAyMTExMiwgMjExMTYsIDIxMTIwLCAyMTEyNCwgMjExMjgsIDIxMTMyLCAyMTEzNiwgCisgICAgMjExNDAsIDIxMTQ0LCAyMTE0OCwgMjExNTIsIDIxMTU2LCAyMTE2MCwgMjExNjQsIDIxMTY5LCAyMTE3NCwgMjExNzksIAorICAgIDIxMTg1LCAyMTE5MSwgMjExOTYsIDIxMjAxLCAyMTIwNywgMjEyMTAsIDIxMjE0LCAyMTIxOCwgMjEyMjIsIDIxMjI2LCAKKyAgICAyMTIzMCwgMjEyMzQsIDIxMjM4LCAwLCAyMTI0MiwgMjEyNDYsIDIxMjUwLCAyMTI1NCwgMCwgMCwgMjEyNTgsIDIxMjYyLCAKKyAgICAyMTI2NiwgMjEyNzAsIDIxMjc0LCAyMTI3OCwgMjEyODIsIDAsIDIxMjg2LCAwLCAyMTI5MCwgMjEyOTQsIDIxMjk4LCAKKyAgICAyMTMwMiwgMCwgMCwgMjEzMDYsIDIxMzEwLCAyMTMxNCwgMjEzMTgsIDIxMzIyLCAyMTMyNiwgMjEzMzAsIDIxMzM0LCAKKyAgICAyMTMzOCwgMjEzNDMsIDIxMzQ4LCAyMTM1MywgMjEzNTksIDIxMzY1LCAyMTM3MCwgMCwgMjEzNzUsIDIxMzc5LCAyMTM4MywgCisgICAgMjEzODcsIDIxMzkxLCAyMTM5NSwgMjEzOTksIDIxNDAzLCAyMTQwNywgMjE0MTEsIDIxNDE1LCAyMTQxOSwgMjE0MjMsIAorICAgIDIxNDI3LCAyMTQzMSwgMjE0MzUsIDIxNDM5LCAyMTQ0MiwgMjE0NDYsIDIxNDUwLCAyMTQ1NCwgMjE0NTgsIDIxNDYyLCAKKyAgICAyMTQ2NiwgMjE0NzAsIDIxNDc0LCAyMTQ3OCwgMjE0ODIsIDIxNDg2LCAyMTQ5MCwgMjE0OTQsIDIxNDk4LCAyMTUwMiwgCisgICAgMjE1MDYsIDIxNTEwLCAyMTUxNCwgMjE1MTgsIDIxNTIyLCAyMTUyNiwgMjE1MzAsIDIxNTM0LCAyMTUzOCwgMjE1NDIsIAorICAgIDIxNTQ2LCAyMTU1MCwgMjE1NTQsIDIxNTU4LCAyMTU2MiwgMjE1NjYsIDIxNTcwLCAyMTU3NCwgMjE1NzgsIDIxNTgyLCAKKyAgICAyMTU4NiwgMjE1OTAsIDIxNTk0LCAyMTU5OCwgMCwgMjE2MDIsIDIxNjA2LCAyMTYxMCwgMjE2MTQsIDAsIDAsIDIxNjE4LCAKKyAgICAyMTYyMiwgMjE2MjYsIDIxNjMwLCAyMTYzNCwgMjE2MzgsIDIxNjQyLCAyMTY0NiwgMjE2NTAsIDIxNjU0LCAyMTY1OCwgCisgICAgMjE2NjIsIDIxNjY2LCAyMTY3MCwgMjE2NzQsIDIxNjc4LCAyMTY4MiwgMjE2ODYsIDIxNjkwLCAyMTY5NCwgMjE2OTgsIAorICAgIDIxNzAyLCAyMTcwNiwgMjE3MTAsIDIxNzE0LCAyMTcxOCwgMjE3MjIsIDIxNzI2LCAyMTczMCwgMjE3MzQsIDIxNzM4LCAKKyAgICAyMTc0MiwgMjE3NDYsIDIxNzUwLCAyMTc1NCwgMjE3NTgsIDIxNzYyLCAyMTc2NiwgMjE3NzAsIDIxNzc0LCAyMTc3OCwgCisgICAgMjE3ODIsIDIxNzg2LCAyMTc5MCwgMjE3OTQsIDIxNzk4LCAyMTgwMiwgMjE4MDYsIDIxODEwLCAyMTgxNCwgMjE4MTgsIAorICAgIDIxODIyLCAyMTgyNiwgMjE4MzAsIDIxODM0LCAyMTgzOCwgMjE4NDIsIDIxODQ1LCAyMTg0OSwgMjE4NTMsIDIxODU3LCAKKyAgICAyMTg2MSwgMjE4NjUsIDIxODY5LCAyMTg3MywgMjE4NzcsIDIxODgxLCAwLCAwLCAyMTg4NSwgMjE4OTQsIDIxOTAwLCAKKyAgICAyMTkwNSwgMjE5MDksIDIxOTEyLCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyNiwgMjE5MzEsIDIxOTM1LCAyMTk0MCwgCisgICAgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2NywgMjE5NzEsIAorICAgIDIxOTc1LCAyMTk3OSwgMjE5ODMsIDIxOTg3LCAyMTk5MSwgMjE5OTUsIDIxOTk5LCAyMjAwMywgMjIwMDcsIDAsIDAsIDAsIAorICAgIDIyMDEzLCAyMjAxOSwgMjIwMjMsIDIyMDI3LCAyMjAzMSwgMjIwMzcsIDIyMDQxLCAyMjA0NSwgMjIwNDksIDIyMDU1LCAKKyAgICAyMjA1OSwgMjIwNjMsIDIyMDY3LCAyMjA3MywgMjIwNzcsIDIyMDgxLCAyMjA4NSwgMjIwOTEsIDIyMDk3LCAyMjEwMywgCisgICAgMjIxMTEsIDIyMTE3LCAyMjEyMywgMjIxMjksIDIyMTM1LCAyMjE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNDcsIDIyMTUwLCAKKyAgICAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MiwgMjIxNjYsIDIyMTcwLCAyMjE3MywgMjIxNzcsIDIyMTgxLCAyMjE4NSwgCisgICAgMjIxODksIDIyMTkzLCAyMjE5NiwgMjIyMDAsIDIyMjA0LCAyMjIwOCwgMjIyMTIsIDIyMjE2LCAyMjIyMCwgMjIyMjQsIAorICAgIDIyMjI4LCAyMjIzMiwgMjIyMzYsIDIyMjQwLCAyMjI0MywgMjIyNDcsIDIyMjUxLCAyMjI1NSwgMjIyNTksIDIyMjYyLCAKKyAgICAyMjI2NiwgMjIyNzAsIDIyMjc0LCAyMjI3OCwgMjIyODIsIDIyMjg2LCAyMjI5MCwgMjIyOTQsIDIyMjk4LCAyMjMwMiwgCisgICAgMjIzMDYsIDIyMzEwLCAyMjMxNCwgMjIzMTcsIDIyMzIxLCAyMjMyNSwgMjIzMjksIDIyMzMzLCAyMjMzNywgMjIzNDEsIAorICAgIDIyMzQ1LCAyMjM0OSwgMjIzNTMsIDIyMzU3LCAyMjM2MSwgMjIzNjUsIDIyMzY5LCAyMjM3MywgMjIzNzcsIDIyMzgxLCAKKyAgICAyMjM4NSwgMjIzODksIDIyMzkzLCAyMjM5NywgMjI0MDEsIDIyNDA1LCAyMjQwOSwgMjI0MTMsIDIyNDE3LCAyMjQyMSwgCisgICAgMjI0MjUsIDIyNDI5LCAyMjQzMywgMjI0MzcsIDIyNDQxLCAyMjQ0NSwgMjI0NDksIDIyNDUzLCAyMjQ1NiwgMjI0NjAsIAorICAgIDIyNDY0LCAyMjQ2OCwgMjI0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNDc2LCAyMjQ4MCwgCisgICAgMjI0ODMsIDIyNDg3LCAyMjQ5MCwgMjI0OTQsIDIyNDk3LCAyMjUwMSwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgMjI1MTksIAorICAgIDIyNTIzLCAyMjUyNywgMjI1MzIsIDIyNTM2LCAyMjU0MSwgMjI1NDUsIDIyNTUwLCAyMjU1NCwgMjI1NTksIDIyNTYzLCAKKyAgICAyMjU2OCwgMjI1NzQsIDIyNTc4LCAyMjU4MywgMjI1ODcsIDIyNTkyLCAyMjU5OCwgMjI2MDIsIDIyNjA4LCAyMjYxNCwgCisgICAgMjI2MTgsIDIyNjIzLCAyMjYzMSwgMjI2MzksIDIyNjQ2LCAyMjY1MSwgMjI2NTYsIDIyNjY1LCAyMjY3MiwgMjI2NzksIAorICAgIDIyNjg0LCAyMjY5MCwgMjI2OTQsIDIyNjk4LCAyMjcwMiwgMjI3MDYsIDIyNzEwLCAyMjcxNCwgMjI3MTgsIDIyNzIyLCAKKyAgICAyMjcyNiwgMjI3MzAsIDIyNzM2LCAyMjc0MSwgMjI3NDYsIDIyNzQ5LCAyMjc1MywgMjI3NTcsIDIyNzYyLCAyMjc2NiwgCisgICAgMjI3NzEsIDIyNzc1LCAyMjc4MCwgMjI3ODQsIDIyNzg5LCAyMjc5MywgMjI3OTgsIDIyODAyLCAyMjgwNywgMjI4MTEsIAorICAgIDIyODE2LCAyMjgyMiwgMjI4MjYsIDIyODMxLCAyMjgzNiwgMjI4NDAsIDIyODQ0LCAyMjg0OCwgMjI4NTIsIDIyODU1LCAKKyAgICAyMjg1OSwgMjI4NjUsIDIyODcwLCAyMjg3NSwgMjI4NzksIDIyODgzLCAyMjg4NywgMjI4OTIsIDIyODk2LCAyMjkwMSwgCisgICAgMjI5MDUsIDIyOTEwLCAyMjkxMywgMjI5MTcsIDIyOTIxLCAyMjkyNiwgMjI5MzAsIDIyOTM1LCAyMjkzOSwgMjI5NDQsIAorICAgIDIyOTUwLCAyMjk1NCwgMjI5NTgsIDIyOTYyLCAyMjk2NiwgMjI5NzAsIDIyOTc0LCAyMjk3OCwgMjI5ODIsIDIyOTg2LCAKKyAgICAyMjk5MCwgMjI5OTQsIDIzMDAwLCAyMzAwMywgMjMwMDcsIDIzMDExLCAyMzAxNiwgMjMwMjAsIDIzMDI1LCAyMzAyOSwgCisgICAgMjMwMzQsIDIzMDM4LCAyMzA0MywgMjMwNDcsIDIzMDUyLCAyMzA1NiwgMjMwNjEsIDIzMDY1LCAyMzA3MCwgMjMwNzYsIAorICAgIDIzMDgwLCAyMzA4NCwgMjMwOTAsIDIzMDk2LCAyMzEwMiwgMjMxMDgsIDIzMTEyLCAyMzExNiwgMjMxMjAsIDIzMTI0LCAKKyAgICAyMzEyOCwgMjMxMzIsIDIzMTM4LCAyMzE0MiwgMjMxNDYsIDIzMTUwLCAyMzE1NSwgMjMxNTksIDIzMTY0LCAyMzE2OCwgCisgICAgMjMxNzMsIDIzMTc3LCAyMzE4MiwgMjMxODYsIDIzMTkxLCAyMzE5NSwgMjMyMDAsIDIzMjA0LCAyMzIwOSwgMjMyMTUsIAorICAgIDIzMjE5LCAyMzIyNSwgMjMyMjksIDIzMjMzLCAyMzIzNywgMjMyNDEsIDIzMjQ1LCAyMzI0OSwgMjMyNTUsIDIzMjU4LCAKKyAgICAyMzI2MiwgMjMyNjYsIDIzMjcxLCAyMzI3NSwgMjMyODAsIDIzMjg0LCAyMzI4OSwgMjMyOTMsIDIzMjk4LCAyMzMwMiwgCisgICAgMjMzMDcsIDIzMzExLCAyMzMxNiwgMjMzMjAsIDIzMzI1LCAyMzMzMSwgMjMzMzQsIDIzMzM4LCAyMzM0MiwgMjMzNDcsIAorICAgIDIzMzUyLCAyMzM1NiwgMjMzNjAsIDIzMzY0LCAyMzM2OCwgMjMzNzIsIDIzMzc2LCAyMzM4MiwgMjMzODUsIDIzMzg5LCAKKyAgICAyMzM5MywgMjMzOTgsIDIzNDAyLCAyMzQwNywgMjM0MTEsIDIzNDE2LCAyMzQyMiwgMjM0MjYsIDIzNDMxLCAyMzQzNSwgCisgICAgMjM0MzksIDIzNDQzLCAyMzQ0NywgMjM0NTEsIDIzNDU1LCAyMzQ1OSwgMjM0NjUsIDIzNDY5LCAyMzQ3MywgMjM0NzcsIAorICAgIDIzNDgyLCAyMzQ4NiwgMjM0OTEsIDIzNDk1LCAyMzUwMCwgMjM1MDQsIDIzNTA5LCAyMzUxMywgMjM1MTgsIDIzNTIyLCAKKyAgICAyMzUyNywgMjM1MzEsIDIzNTM2LCAyMzUzOSwgMjM1NDMsIDIzNTQ3LCAyMzU1MSwgMjM1NTUsIDIzNTU5LCAyMzU2MywgCisgICAgMjM1NjcsIDIzNTcxLCAyMzU3NywgMjM1ODAsIDIzNTg0LCAyMzU4OCwgMjM1OTMsIDIzNTk3LCAyMzYwMiwgMjM2MDYsIAorICAgIDIzNjExLCAyMzYxNSwgMjM2MjAsIDIzNjI0LCAyMzYyOSwgMjM2MzMsIDIzNjM4LCAyMzY0MiwgMjM2NDcsIDIzNjUzLCAKKyAgICAyMzY1NywgMjM2NjMsIDIzNjY3LCAyMzY3MywgMjM2NzksIDIzNjg1LCAyMzY5MSwgMjM2OTcsIDIzNzAzLCAyMzcwOSwgCisgICAgMjM3MTUsIDIzNzE5LCAyMzcyMywgMjM3MjcsIDIzNzMxLCAyMzczNSwgMjM3MzksIDIzNzQzLCAyMzc0NywgMjM3NTIsIAorICAgIDIzNzU2LCAyMzc2MSwgMjM3NjUsIDIzNzcwLCAyMzc3NCwgMjM3NzksIDIzNzgzLCAyMzc4OCwgMjM3OTIsIDIzNzk3LCAKKyAgICAyMzgwMSwgMjM4MDYsIDIzODEwLCAyMzgxNCwgMjM4MTgsIDIzODIyLCAyMzgyNiwgMjM4MzAsIDIzODM0LCAyMzg0MCwgCisgICAgMjM4NDMsIDIzODQ3LCAyMzg1MSwgMjM4NTYsIDIzODYwLCAyMzg2NSwgMjM4NjksIDIzODc0LCAyMzg3OCwgMjM4ODMsIAorICAgIDIzODg3LCAyMzg5MiwgMjM4OTYsIDIzOTAxLCAyMzkwNSwgMjM5MTAsIDIzOTE2LCAyMzkyMCwgMjM5MjYsIDIzOTMxLCAKKyAgICAyMzkzNywgMjM5NDEsIDIzOTQ3LCAyMzk1MiwgMjM5NTYsIDIzOTYwLCAyMzk2NCwgMjM5NjgsIDIzOTcyLCAyMzk3NywgCisgICAgMjM5ODAsIDIzOTg0LCAyMzk4OSwgMjM5OTMsIDIzOTk4LCAyNDAwMSwgMjQwMDUsIDI0MDA5LCAyNDAxMywgMjQwMTcsIAorICAgIDI0MDIxLCAyNDAyNSwgMjQwMjksIDI0MDMzLCAyNDAzNywgMjQwNDEsIDI0MDQ1LCAyNDA1MCwgMjQwNTQsIDI0MDU4LCAKKyAgICAyNDA2NCwgMjQwNjgsIDI0MDc0LCAyNDA3OCwgMjQwODQsIDI0MDg4LCAyNDA5MiwgMjQwOTYsIDI0MTAwLCAyNDEwNCwgCisgICAgMjQxMDksIDI0MTEzLCAyNDExNywgMjQxMjEsIDI0MTI1LCAyNDEyOSwgMjQxMzMsIDI0MTM3LCAyNDE0MSwgMjQxNDUsIAorICAgIDI0MTQ5LCAyNDE1NSwgMjQxNjEsIDI0MTY3LCAyNDE3MywgMjQxNzksIDI0MTg0LCAyNDE5MCwgMjQxOTYsIDI0MjAyLCAKKyAgICAyNDIwNiwgMjQyMTAsIDI0MjE0LCAyNDIxOCwgMjQyMjIsIDI0MjI2LCAyNDIzMCwgMjQyMzQsIDI0MjM4LCAyNDI0MiwgCisgICAgMjQyNDYsIDI0MjUwLCAyNDI1NCwgMjQyNTksIDI0MjY0LCAyNDI2OSwgMjQyNzMsIDI0Mjc3LCAyNDI4MSwgMjQyODUsIAorICAgIDI0Mjg5LCAyNDI5MywgMjQyOTcsIDI0MzAxLCAyNDMwNSwgMjQzMDksIDI0MzE1LCAyNDMyMSwgMjQzMjcsIDI0MzMzLCAKKyAgICAyNDMzOSwgMjQzNDUsIDI0MzUxLCAyNDM1NywgMjQzNjMsIDI0MzY3LCAyNDM3MSwgMjQzNzUsIDI0Mzc5LCAyNDM4MywgCisgICAgMjQzODcsIDI0MzkxLCAyNDM5NywgMjQ0MDMsIDI0NDA5LCAyNDQxNSwgMjQ0MjEsIDI0NDI3LCAyNDQzMywgMjQ0MzksIAorICAgIDI0NDQ1LCAyNDQ1MCwgMjQ0NTUsIDI0NDYwLCAyNDQ2NSwgMjQ0NzEsIDI0NDc3LCAyNDQ4MywgMjQ0ODksIDI0NDk1LCAKKyAgICAyNDUwMSwgMjQ1MDcsIDI0NTEyLCAyNDUxOCwgMjQ1MjQsIDI0NTMwLCAyNDUzNSwgMjQ1NDEsIDI0NTQ3LCAyNDU1MywgCisgICAgMjQ1NTgsIDI0NTYzLCAyNDU2OCwgMjQ1NzMsIDI0NTc4LCAyNDU4MywgMjQ1ODgsIDI0NTkzLCAyNDU5OCwgMjQ2MDMsIAorICAgIDI0NjA4LCAyNDYxMywgMjQ2MTcsIDI0NjIyLCAyNDYyNywgMjQ2MzIsIDI0NjM3LCAyNDY0MiwgMjQ2NDcsIDI0NjUyLCAKKyAgICAyNDY1NywgMjQ2NjIsIDI0NjY3LCAyNDY3MiwgMjQ2NzcsIDI0NjgyLCAyNDY4NywgMjQ2OTIsIDI0Njk3LCAyNDcwMiwgCisgICAgMjQ3MDcsIDI0NzEyLCAyNDcxNywgMjQ3MjIsIDI0NzI3LCAyNDczMiwgMjQ3MzcsIDI0NzQyLCAyNDc0NywgMjQ3NTIsIAorICAgIDI0NzU3LCAyNDc2MiwgMjQ3NjYsIDI0NzcxLCAyNDc3NiwgMjQ3ODEsIDI0Nzg2LCAyNDc5MSwgMjQ3OTYsIDI0ODAxLCAKKyAgICAyNDgwNiwgMjQ4MTEsIDI0ODE2LCAyNDgyMSwgMjQ4MjYsIDI0ODMxLCAyNDgzNiwgMjQ4NDEsIDI0ODQ2LCAyNDg1MSwgCisgICAgMjQ4NTYsIDI0ODYxLCAyNDg2NiwgMjQ4NzEsIDI0ODc2LCAyNDg4MSwgMjQ4ODYsIDI0ODkxLCAyNDg5NSwgMjQ5MDAsIAorICAgIDI0OTA1LCAyNDkxMCwgMjQ5MTUsIDI0OTIwLCAyNDkyNCwgMjQ5MjksIDI0OTM0LCAyNDkzOSwgMjQ5NDQsIDI0OTQ5LCAKKyAgICAyNDk1MywgMjQ5NTgsIDI0OTY0LCAyNDk2OSwgMjQ5NzQsIDI0OTc5LCAyNDk4NCwgMjQ5OTAsIDI0OTk1LCAyNTAwMCwgCisgICAgMjUwMDUsIDI1MDEwLCAyNTAxNSwgMjUwMjAsIDI1MDI1LCAyNTAzMCwgMjUwMzUsIDI1MDQwLCAyNTA0NSwgMjUwNTAsIAorICAgIDI1MDU1LCAyNTA2MCwgMjUwNjUsIDI1MDcwLCAyNTA3NSwgMjUwODAsIDI1MDg1LCAyNTA5MCwgMjUwOTUsIDI1MTAwLCAKKyAgICAyNTEwNSwgMjUxMTAsIDI1MTE1LCAyNTEyMCwgMjUxMjUsIDI1MTMwLCAyNTEzNSwgMjUxNDAsIDI1MTQ1LCAyNTE1MCwgCisgICAgMjUxNTUsIDI1MTYwLCAyNTE2NSwgMjUxNzAsIDI1MTc1LCAyNTE4MCwgMjUxODUsIDI1MTkwLCAyNTE5NSwgMjUyMDAsIAorICAgIDI1MjA1LCAyNTIxMCwgMjUyMTYsIDI1MjIxLCAyNTIyNiwgMjUyMzEsIDI1MjM2LCAyNTI0MSwgMjUyNDYsIDI1MjUxLCAKKyAgICAyNTI1NiwgMjUyNjEsIDI1MjY2LCAyNTI3MSwgMjUyNzUsIDI1MjgwLCAyNTI4NSwgMjUyOTAsIDI1Mjk1LCAyNTMwMCwgCisgICAgMjUzMDUsIDI1MzEwLCAyNTMxNSwgMjUzMjAsIDI1MzI1LCAyNTMzMCwgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMjUzNTAsIAorICAgIDI1MzU1LCAyNTM2MCwgMjUzNjUsIDI1MzcwLCAyNTM3NSwgMjUzODAsIDI1Mzg1LCAyNTM5MCwgMjUzOTUsIDI1NDAwLCAKKyAgICAyNTQwNSwgMjU0MTEsIDI1NDE1LCAyNTQxOSwgMjU0MjMsIDI1NDI3LCAyNTQzMSwgMjU0MzUsIDI1NDM5LCAyNTQ0MywgCisgICAgMjU0NDksIDI1NDU1LCAyNTQ2MSwgMjU0NjcsIDI1NDczLCAyNTQ3OSwgMjU0ODUsIDI1NDkyLCAyNTQ5OCwgMjU1MDMsIAorICAgIDI1NTA4LCAyNTUxMywgMjU1MTgsIDI1NTIzLCAyNTUyOCwgMjU1MzMsIDI1NTM4LCAyNTU0MywgMjU1NDgsIDI1NTUzLCAKKyAgICAyNTU1OCwgMjU1NjMsIDI1NTY4LCAyNTU3MywgMjU1NzgsIDI1NTgzLCAyNTU4OCwgMjU1OTMsIDI1NTk4LCAyNTYwMywgCisgICAgMjU2MDgsIDI1NjEzLCAyNTYxOCwgMjU2MjMsIDI1NjI4LCAyNTYzMywgMjU2MzgsIDAsIDAsIDAsIDI1NjQ1LCAyNTY1NSwgCisgICAgMjU2NTksIDI1NjY2LCAyNTY3MCwgMjU2NzQsIDI1Njc4LCAyNTY4NiwgMjU2OTAsIDI1Njk1LCAyNTcwMCwgMjU3MDUsIAorICAgIDI1NzA5LCAyNTcxNCwgMjU3MTksIDI1NzIyLCAyNTcyNiwgMjU3MzAsIDI1NzM5LCAyNTc0MywgMjU3NDcsIDI1NzUzLCAKKyAgICAyNTc1NywgMjU3NjEsIDI1NzY5LCAyNTc3MywgMjU3ODEsIDI1Nzg3LCAyNTc5MywgMjU3OTksIDI1ODA1LCAyNTgxNSwgCisgICAgMjU4MjEsIDI1ODI1LCAyNTgzNCwgMjU4MzcsIDI1ODQzLCAyNTg0NywgMjU4NTMsIDI1ODU4LCAyNTg2NCwgMjU4NzIsIAorICAgIDI1ODc4LCAyNTg4NCwgMjU4OTIsIDI1ODk4LCAyNTkwMiwgMjU5MDYsIDI1OTE2LCAyNTkyMiwgMjU5MjYsIDI1OTM2LCAKKyAgICAyNTk0MiwgMjU5NDYsIDI1OTUwLCAyNTk1NywgMjU5NjQsIDI1OTY5LCAyNTk3NCwgMjU5ODMsIDI1OTg3LCAyNTk5MSwgCisgICAgMjU5OTUsIDI2MDAzLCAyNjAxMCwgMjYwMTQsIDI2MDE4LCAyNjAyMiwgMjYwMjYsIDI2MDMwLCAyNjAzNCwgMjYwMzgsIAorICAgIDI2MDQyLCAyNjA0NiwgMjYwNTAsIDI2MDU0LCAyNjA1OSwgMjYwNjQsIDI2MDY5LCAyNjA3MywgMjYwNzcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MDgxLCAyNjA4NSwgMjYwODksIDI2MDkzLCAyNjA5NywgCisgICAgMjYxMDIsIDI2MTA3LCAyNjExMiwgMjYxMTcsIDI2MTIxLCAyNjEyNSwgMjYxMzAsIDI2MTM0LCAwLCAyNjEzOCwgMjYxNDMsIAorICAgIDI2MTQ4LCAyNjE1MiwgMjYxNTYsIDI2MTYxLCAyNjE2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYxNzEsIDI2MTc1LCAyNjE3OSwgMjYxODMsIDI2MTg3LCAyNjE5MiwgMjYxOTcsIDI2MjAyLCAyNjIwNywgMjYyMTEsIAorICAgIDI2MjE1LCAyNjIyMCwgMjYyMjQsIDI2MjI4LCAyNjIzMiwgMjYyMzcsIDI2MjQyLCAyNjI0NiwgMjYyNTAsIDI2MjU1LCAKKyAgICAyNjI2MCwgMjYyNjUsIDI2MjcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjI3NiwgMjYyODAsIDI2Mjg0LCAKKyAgICAyNjI4OCwgMjYyOTIsIDI2Mjk3LCAyNjMwMiwgMjYzMDcsIDI2MzEyLCAyNjMxNiwgMjYzMjAsIDI2MzI1LCAyNjMyOSwgCisgICAgMjYzMzMsIDI2MzM3LCAyNjM0MiwgMjYzNDcsIDI2MzUxLCAyNjM1NSwgMjYzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2MzY1LCAyNjM2OSwgMjYzNzMsIDI2Mzc3LCAyNjM4MSwgMjYzODYsIDI2MzkxLCAyNjM5NiwgCisgICAgMjY0MDEsIDI2NDA1LCAyNjQwOSwgMjY0MTQsIDI2NDE4LCAwLCAyNjQyMiwgMjY0MjcsIDI2NDMyLCAwLCAyNjQzNiwgCisgICAgMjY0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDQ2LCAyNjQ0OSwgMjY0NTMsIDI2NDU3LCAKKyAgICAyNjQ2MSwgMjY0NjUsIDI2NDY5LCAyNjQ3MywgMjY0NzcsIDI2NDgxLCAyNjQ4NSwgMjY0ODksIDI2NDkzLCAyNjQ5NywgCisgICAgMjY1MDEsIDI2NTA1LCAyNjUwOSwgMjY1MTMsIDI2NTE2LCAyNjUyMCwgMjY1MjQsIDI2NTI4LCAyNjUzMiwgMjY1MzYsIAorICAgIDI2NTQwLCAyNjU0NCwgMjY1NDgsIDI2NTUyLCAyNjU1NiwgMjY1NjAsIDI2NTY0LCAyNjU2OCwgMjY1NzEsIDI2NTc0LCAKKyAgICAyNjU3OCwgMjY1ODIsIDI2NTg4LCAyNjU5NCwgMjY2MDAsIDI2NjA2LCAyNjYxMiwgMjY2MTgsIDI2NjI0LCAyNjYzMCwgCisgICAgMjY2MzYsIDI2NjQyLCAyNjY0OCwgMjY2NTQsIDI2NjYwLCAyNjY2NiwgMjY2NzUsIDI2Njg0LCAyNjY5MCwgMjY2OTYsIAorICAgIDI2NzAyLCAyNjcwNywgMjY3MTEsIDI2NzE2LCAyNjcyMSwgMjY3MjYsIDI2NzMwLCAyNjczNSwgMjY3NDAsIDI2NzQ1LCAKKyAgICAyNjc0OSwgMjY3NTQsIDI2NzU4LCAyNjc2MywgMjY3NjgsIDI2NzczLCAyNjc3OCwgMjY3ODIsIDI2Nzg2LCAyNjc5MCwgCisgICAgMjY3OTQsIDI2Nzk4LCAyNjgwMiwgMjY4MDYsIDI2ODEwLCAyNjgxNCwgMjY4MTgsIDI2ODI0LCAyNjgyOCwgMjY4MzIsIAorICAgIDI2ODM2LCAyNjg0MCwgMjY4NDQsIDI2ODUyLCAyNjg1OCwgMjY4NjIsIDI2ODY4LCAyNjg3MiwgMjY4NzgsIDI2ODgyLCAwLCAKKyAgICAwLCAyNjg4NiwgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAyNjkxNCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY5MTcsIDI2OTI1LCAyNjkzMywgMjY5NDEsIDI2OTQ5LCAyNjk1NywgMjY5NjUsIDI2OTczLCAKKyAgICAyNjk4MSwgMjY5ODksIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA2LCAyNzAxMSwgMjcwMTQsIAorICAgIDI3MDE5LCAyNzAyNiwgMjcwMzQsIDI3MDM5LCAyNzA0NiwgMjcwNDksIDI3MDU2LCAyNzA2MywgMjcwNzAsIDAsIDI3MDc0LCAKKyAgICAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDI3MTAyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIwLCAyNzEyNCwgMjcxMjgsIDI3MTMyLCAKKyAgICAyNzEzNSwgMjcxMzksIDI3MTQzLCAyNzE0NiwgMjcxNTAsIDI3MTU0LCAyNzE1NywgMjcxNjEsIDI3MTY0LCAyNzE2OCwgCisgICAgMjcxNzIsIDI3MTc2LCAyNzE4MCwgMjcxODQsIDI3MTg3LCAyNzE5MCwgMjcxOTQsIDI3MTk4LCAyNzIwMSwgMjcyMDUsIAorICAgIDI3MjA5LCAyNzIxMywgMjcyMTcsIDI3MjIxLCAyNzIyNSwgMjcyMjksIDI3MjMzLCAyNzI0MCwgMjcyNDUsIDI3MjUwLCAKKyAgICAyNzI1NSwgMjcyNjAsIDI3MjY2LCAyNzI3MiwgMjcyNzgsIDI3Mjg0LCAyNzI4OSwgMjcyOTUsIDI3MzAxLCAyNzMwNiwgCisgICAgMjczMTIsIDI3MzE4LCAyNzMyNCwgMjczMzAsIDI3MzM2LCAyNzM0MSwgMjczNDcsIDI3MzUyLCAyNzM1OCwgMjczNjQsIAorICAgIDI3MzcwLCAyNzM3NiwgMjczODIsIDI3Mzg3LCAyNzM5MiwgMjczOTgsIDI3NDA0LCAyNzQwOSwgMjc0MTUsIDI3NDIwLCAKKyAgICAyNzQyNiwgMjc0MzEsIDI3NDM2LCAyNzQ0MiwgMjc0NDgsIDI3NDU0LCAyNzQ2MCwgMjc0NjYsIDI3NDcyLCAyNzQ3OCwgCisgICAgMjc0ODQsIDI3NDkwLCAyNzQ5NiwgMjc1MDIsIDI3NTA4LCAyNzUxMywgMjc1MTgsIDI3NTIzLCAyNzUyOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjc1MzUsIDI3NTQ0LCAyNzU1MywgMjc1NjEsIDI3NTY5LCAyNzU3OSwgMjc1ODcsIDI3NTk2LCAKKyAgICAyNzYwMywgMjc2MTAsIDI3NjE3LCAyNzYyNSwgMjc2MzMsIDI3NjQxLCAyNzY0OSwgMjc2NTcsIDI3NjY1LCAyNzY3MywgCisgICAgMjc2ODEsIDI3Njg4LCAyNzY5NiwgMjc3MDQsIDI3NzEyLCAyNzcyMCwgMjc3MjgsIDI3NzM4LCAyNzc0OCwgMjc3NTgsIAorICAgIDI3NzY4LCAyNzc3OCwgMjc3ODgsIDI3Nzk4LCAyNzgwOCwgMjc4MTgsIDI3ODI4LCAyNzgzOCwgMjc4NDgsIDI3ODU4LCAKKyAgICAyNzg2OCwgMjc4NzYsIDI3ODg0LCAyNzg5NCwgMjc5MDIsIDAsIDAsIDAsIDAsIDAsIDI3OTEyLCAyNzkxNiwgMjc5MjAsIAorICAgIDI3OTI0LCAyNzkyOCwgMjc5MzIsIDI3OTM2LCAyNzk0MCwgMjc5NDQsIDI3OTQ4LCAyNzk1MiwgMjc5NTYsIDI3OTYwLCAKKyAgICAyNzk2NCwgMjc5NjgsIDI3OTcyLCAyNzk3NiwgMjc5ODAsIDI3OTg0LCAyNzk4OCwgMjc5OTIsIDI3OTk2LCAyODAwMCwgCisgICAgMjgwMDQsIDI4MDEwLCAyODAxNCwgMjgwMjAsIDI4MDI0LCAyODAzMCwgMjgwMzQsIDI4MDQwLCAyODA0NCwgMjgwNDgsIAorICAgIDI4MDUyLCAyODA1NiwgMjgwNjAsIDI4MDY0LCAyODA3MCwgMjgwNzYsIDI4MDgyLCAyODA4OCwgMjgwOTMsIDI4MDk5LCAKKyAgICAyODEwNSwgMjgxMTEsIDI4MTE3LCAyODEyMywgMjgxMjksIDI4MTM2LCAyODE0MiwgMjgxNDcsIDI4MTUyLCAyODE1NiwgCisgICAgMjgxNjAsIDI4MTY0LCAyODE2OCwgMjgxNzIsIDI4MTc2LCAyODE4MCwgMjgxODYsIDI4MTkyLCAyODE5OCwgMjgyMDMsIAorICAgIDI4MjEwLCAyODIxNSwgMjgyMjAsIDI4MjI2LCAyODIzMSwgMjgyMzgsIDI4MjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyODI1MiwgMjgyNTgsIDI4MjYyLCAyODI2NywgMjgyNzIsIDI4Mjc3LCAyODI4MiwgMjgyODcsIDI4MjkyLCAKKyAgICAyODI5NywgMjgzMDIsIDI4MzA3LCAyODMxMiwgMjgzMTcsIDI4MzIyLCAyODMyNywgMjgzMzEsIDI4MzM1LCAyODM0MCwgCisgICAgMjgzNDUsIDI4MzUwLCAyODM1NCwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzIsIDI4Mzc3LCAyODM4MiwgMjgzODYsIDAsIAorICAgIDAsIDAsIDI4MzkwLCAyODM5NSwgMjg0MDAsIDI4NDA1LCAyODQxMSwgMjg0MTcsIDI4NDIzLCAyODQyOSwgMjg0MzQsIAorICAgIDI4NDM5LCAyODQ0NSwgMjg0NTEsIDAsIDAsIDAsIDAsIDI4NDU4LCAyODQ2MywgMjg0NjksIDI4NDc1LCAyODQ4MSwgCisgICAgMjg0ODYsIDI4NDkxLCAyODQ5NiwgMjg1MDEsIDI4NTA3LCAyODUxMiwgMjg1MTcsIDAsIDAsIDAsIDAsIDI4NTIyLCAwLCAwLCAKKyAgICAwLCAyODUyNywgMjg1MzIsIDI4NTM3LCAyODU0MiwgMjg1NDYsIDI4NTUwLCAyODU1NCwgMjg1NTgsIDI4NTYyLCAyODU2NiwgCisgICAgMjg1NzAsIDI4NTc0LCAyODU3OCwgMjg1ODMsIDI4NTg5LCAyODU5NSwgMjg2MDEsIDI4NjA2LCAyODYxMSwgMjg2MTcsIAorICAgIDI4NjIzLCAyODYyOSwgMjg2MzQsIDI4NjQwLCAyODY0NSwgMjg2NTEsIDI4NjU3LCAyODY2MiwgMjg2NjgsIDI4Njc0LCAKKyAgICAyODY4MCwgMjg2ODUsIDI4NjkwLCAyODY5NSwgMjg3MDEsIDI4NzA3LCAyODcxMiwgMjg3MTgsIDI4NzIzLCAyODcyOSwgCisgICAgMjg3MzQsIDI4NzQwLCAwLCAwLCAyODc0NiwgMjg3NTIsIDI4NzU4LCAyODc2NCwgMjg3NzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI4Nzc2LCAyODc4MywgMjg3OTAsIDI4Nzk2LCAyODgwMywgMjg4MTAsIDI4ODE2LCAyODgyMywgCisgICAgMjg4MzAsIDI4ODM3LCAyODg0MywgMjg4NDksIDI4ODU2LCAyODg2MiwgMjg4NjgsIDI4ODc1LCAyODg4MiwgMjg4ODgsIAorICAgIDI4ODk1LCAyODkwMiwgMjg5MDgsIDI4OTE0LCAyODkyMSwgMjg5MjcsIDI4OTMzLCAyODk0MCwgMjg5NDYsIDI4OTUzLCAKKyAgICAyODk2MCwgMjg5NjcsIDI4OTc0LCAyODk4MSwgMjg5ODgsIDI4OTk0LCAyOTAwMSwgMjkwMDgsIDI5MDE0LCAyOTAyMSwgCisgICAgMjkwMjgsIDI5MDM1LCAyOTA0MiwgMjkwNDksIDI5MDU2LCAyOTA2MywgMCwgMCwgMCwgMCwgMjkwNzAsIDI5MDc4LCAKKyAgICAyOTA4NSwgMjkwOTIsIDI5MDk4LCAyOTEwNSwgMjkxMTEsIDI5MTE4LCAyOTEyNCwgMjkxMzEsIDI5MTM4LCAyOTE0NSwgCisgICAgMjkxNTIsIDI5MTU5LCAyOTE2NiwgMjkxNzMsIDI5MTgwLCAyOTE4NywgMjkxOTQsIDI5MjAxLCAyOTIwOCwgMjkyMTQsIAorICAgIDI5MjIxLCAyOTIyOCwgMjkyMzUsIDI5MjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI0NywgMjkyNTMsIDI5MjU4LCAyOTI2MywgCisgICAgMjkyNjgsIDI5MjczLCAyOTI3OCwgMjkyODMsIDI5Mjg4LCAyOTI5MywgMjkyOTgsIDAsIDAsIDAsIDI5MzA0LCAyOTMxMCwgCisgICAgMjkzMTYsIDI5MzIwLCAyOTMyNiwgMjkzMzIsIDI5MzM4LCAyOTM0NCwgMjkzNTAsIDI5MzU2LCAyOTM2MiwgMjkzNjgsIAorICAgIDI5Mzc0LCAyOTM4MCwgMjkzODYsIDI5MzkyLCAyOTM5OCwgMjk0MDQsIDI5NDEwLCAyOTQxNCwgMjk0MjAsIDI5NDI2LCAKKyAgICAyOTQzMiwgMjk0MzgsIDI5NDQ0LCAyOTQ1MCwgMjk0NTYsIDI5NDYyLCAyOTQ2OCwgMjk0NzQsIDI5NDgwLCAyOTQ4NiwgCisgICAgMjk0OTIsIDI5NDk4LCAyOTUwNCwgMjk1MDgsIDI5NTEzLCAyOTUxOCwgMjk1MjMsIDI5NTI3LCAyOTUzMiwgMjk1MzYsIAorICAgIDI5NTQxLCAyOTU0NiwgMjk1NTEsIDI5NTU1LCAyOTU2MCwgMjk1NjUsIDI5NTcwLCAyOTU3NSwgMjk1ODAsIDI5NTg0LCAKKyAgICAyOTU4OCwgMjk1OTMsIDI5NTk4LCAyOTYwMiwgMjk2MDYsIDI5NjEwLCAyOTYxNSwgMjk2MjAsIDI5NjI1LCAyOTYzMCwgMCwgCisgICAgMCwgMjk2MzYsIDI5NjQwLCAyOTY0NywgMjk2NTIsIDI5NjU4LCAyOTY2NCwgMjk2NjksIDI5Njc1LCAyOTY4MSwgMjk2ODYsIAorICAgIDI5NjkyLCAyOTY5OCwgMjk3MDQsIDI5NzA5LCAyOTcxNSwgMjk3MjAsIDI5NzI1LCAyOTczMSwgMjk3MzYsIDI5NzQyLCAKKyAgICAyOTc0NywgMjk3NTMsIDI5NzU5LCAyOTc2NSwgMjk3NzEsIDI5Nzc1LCAyOTc4MCwgMjk3ODUsIDI5NzkxLCAyOTc5NywgCisgICAgMjk4MDIsIDI5ODA4LCAyOTgxNCwgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzIsIDI5ODM3LCAyOTg0MiwgMjk4NDcsIAorICAgIDI5ODUyLCAyOTg1OCwgMjk4NjQsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODgzLCAyOTg4OCwgMjk4OTIsIDI5ODk3LCAKKyAgICAyOTkwMSwgMjk5MDYsIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5NDAsIDI5OTUwLCAyOTk1OSwgCisgICAgMjk5NjYsIDI5OTcyLCAyOTk4MiwgMjk5ODcsIDI5OTkzLCAwLCAyOTk5OCwgMzAwMDMsIDMwMDA4LCAzMDAxNiwgMzAwMjIsIAorICAgIDMwMDMwLCAzMDAzNSwgMzAwNDEsIDMwMDQ3LCAzMDA1MywgMzAwNTgsIDMwMDY0LCAzMDA2OSwgMzAwNzYsIDMwMDgyLCAKKyAgICAzMDA4NywgMzAwOTMsIDMwMDk5LCAzMDEwNSwgMzAxMTIsIDMwMTE5LCAzMDEyNiwgMzAxMzEsIDMwMTM2LCAzMDE0MywgCisgICAgMzAxNTAsIDMwMTU3LCAzMDE2NCwgMzAxNzEsIDAsIDAsIDMwMTc4LCAzMDE4NSwgMzAxOTIsIDMwMTk4LCAzMDIwNCwgCisgICAgMzAyMTAsIDMwMjE2LCAzMDIyMiwgMzAyMjgsIDMwMjM0LCAzMDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAyNDYsIDMwMjUyLCAKKyAgICAzMDI1NywgMzAyNjIsIDMwMjY3LCAzMDI3MiwgMzAyNzcsIDMwMjgyLCAzMDI4NywgMzAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMwMjk3LCAzMDMwMiwgMzAzMDcsIDMwMzEyLCAzMDMxNywgMzAzMjIsIDMwMzI3LCAzMDMzNiwgMzAzNDMsIDMwMzQ4LCAKKyAgICAzMDM1MywgMzAzNTgsIDMwMzYzLCAzMDM2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzNzAsIDMwMzc2LCAKLSAgICAzMDM4MiwgMzAzODYsIDMwMzkwLCAzMDM5NCwgMzAzOTgsIDMwNDA0LCAzMDQwOCwgMzA0MTQsIDMwNDE4LCAzMDQyNCwgCi0gICAgMzA0MzAsIDMwNDM4LCAzMDQ0NCwgMzA0NTIsIDMwNDU2LCAzMDQ2MCwgMzA0NjQsIDMwNDcwLCAzMDQ3MywgMzA0NzksIAotICAgIDMwNDgzLCAzMDQ4OSwgMzA0OTMsIDMwNDk3LCAzMDUwMywgMzA1MDcsIDMwNTEzLCAzMDUxNywgMzA1MjMsIDMwNTMxLCAKLSAgICAzMDUzOSwgMzA1NDcsIDMwNTUzLCAzMDU1NywgMzA1NjMsIDMwNTY3LCAzMDU3MywgMzA1NzYsIDMwNTc5LCAzMDU4NSwgCi0gICAgMzA1ODksIDMwNTk1LCAzMDU5OCwgMzA2MDEsIDMwNjA0LCAzMDYwOCwgMzA2MTIsIDMwNjE4LCAzMDYyNCwgMzA2MjcsIAotICAgIDMwNjMwLCAzMDYzNCwgMzA2MzksIDMwNjQ0LCAzMDY1MSwgMzA2NTYsIDMwNjYzLCAzMDY3MCwgMzA2NzksIDMwNjg2LCAKLSAgICAzMDY5NSwgMzA3MDAsIDMwNzA3LCAzMDcxNCwgMzA3MjMsIDMwNzI4LCAzMDczNSwgMzA3NDAsIDMwNzQ2LCAzMDc1MiwgCi0gICAgMzA3NTgsIDMwNzY0LCAzMDc3MCwgMzA3NzYsIDAsIDAsIDAsIDAsIDMwNzgyLCAzMDc4NiwgMzA3ODksIDMwNzkyLCAKLSAgICAzMDc5NSwgMzA3OTgsIDMwODAxLCAzMDgwNCwgMzA4MDcsIDMwODEwLCAzMDgxMywgMzA4MTYsIDMwODE5LCAzMDgyMiwgCi0gICAgMzA4MjcsIDMwODMyLCAzMDgzNywgMzA4NDAsIDMwODQ1LCAzMDg1MCwgMzA4NTUsIDMwODYwLCAzMDg2NywgMzA4NzIsIAotICAgIDMwODc3LCAzMDg4MiwgMzA4ODcsIDMwODk0LCAzMDkwMCwgMzA5MDYsIDMwOTEyLCAzMDkxOCwgMzA5MjQsIDMwOTMzLCAKLSAgICAzMDk0MiwgMzA5NDgsIDMwOTU0LCAzMDk2MiwgMzA5NzAsIDMwOTc5LCAzMDk4OCwgMzA5OTYsIDMxMDA0LCAzMTAxMywgCi0gICAgMzEwMjIsIDAsIDAsIDAsIDMxMDMwLCAzMTAzNCwgMzEwMzgsIDMxMDQyLCAzMTA0NSwgMzEwNDgsIDMxMDUxLCAzMTA1NSwgCi0gICAgMzEwNTgsIDMxMDYxLCAzMTA2NSwgMzEwNjgsIDMxMDcyLCAzMTA3NiwgMzEwODAsIDMxMDg0LCAzMTA4OCwgMzEwOTIsIAotICAgIDMxMDk2LCAzMTEwMCwgMzExMDQsIDMxMTA3LCAzMTExMCwgMzExMTQsIDMxMTE4LCAzMTEyMiwgMzExMjUsIDMxMTI4LCAKLSAgICAzMTEzMSwgMzExMzUsIDMxMTM5LCAzMTE0MiwgMzExNDYsIDMxMTQ5LCAzMTE1NCwgMzExNTksIDMxMTY0LCAzMTE2OSwgCi0gICAgMzExNzQsIDMxMTc5LCAzMTE4NCwgMzExODksIDMxMTk0LCAzMTE5OCwgMzEyMDIsIDMxMjA4LCAzMTIxNSwgMzEyMTksIAotICAgIDMxMjIzLCAzMTIyNywgMzEyMzAsIDMxMjMzLCAzMTIzNiwgMzEyMzksIDMxMjQyLCAzMTI0NSwgMzEyNDgsIDMxMjUxLCAKLSAgICAzMTI1NCwgMzEyNTcsIDMxMjYxLCAzMTI2NSwgMzEyNjksIDMxMjc0LCAzMTI3OCwgMzEyODIsIDMxMjg4LCAzMTI5MiwgCi0gICAgMzEyOTgsIDMxMzA0LCAzMTMwOSwgMzEzMTYsIDMxMzIwLCAzMTMyNiwgMzEzMzAsIDMxMzM2LCAzMTM0MSwgMzEzNDgsIAotICAgIDMxMzU1LCAzMTM2MCwgMzEzNjcsIDMxMzcyLCAzMTM3NywgMzEzODEsIDMxMzg3LCAzMTM5MSwgMzEzOTcsIDMxNDA0LCAKLSAgICAzMTQxMSwgMzE0MTUsIDMxNDIxLCAzMTQyNywgMzE0MzEsIDMxNDM3LCAzMTQ0MiwgMzE0NDcsIDMxNDU0LCAzMTQ1OSwgCi0gICAgMzE0NjQsIDMxNDY5LCAzMTQ3NCwgMzE0NzgsIDMxNDgyLCAzMTQ4NywgMzE0OTIsIDMxNDk5LCAzMTUwNSwgMzE1MTAsIAotICAgIDMxNTE3LCAzMTUyMiwgMzE1MjksIDMxNTM0LCAzMTU0MywgMzE1NDksIDMxNTU1LCAzMTU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzE1NjMsIDMxNTcyLCAzMTU3OSwgMzE1ODYsIDMxNTkzLCAzMTU5NiwgMzE2MDAsIDMxNjA0LCAzMTYwOCwgCi0gICAgMzE2MTIsIDMxNjE2LCAzMTYyMCwgMzE2MjQsIDMxNjI4LCAzMTYzMiwgMzE2MzYsIDMxNjQwLCAzMTY0NCwgMzE2NDcsIAotICAgIDMxNjUwLCAzMTY1NCwgMzE2NTgsIDMxNjYyLCAzMTY2NiwgMzE2NzAsIDMxNjc0LCAzMTY3NywgMzE2ODEsIDMxNjg1LCAKLSAgICAzMTY4OSwgMzE2OTMsIDMxNjk2LCAzMTY5OSwgMzE3MDMsIDMxNzA2LCAzMTcxMCwgMzE3MTQsIDMxNzE3LCAzMTcyMSwgCi0gICAgMzE3MjUsIDMxNzI4LCAzMTczMywgMzE3MzgsIDMxNzQzLCAzMTc0NywgMzE3NTEsIDMxNzU2LCAzMTc2MCwgMzE3NjUsIAotICAgIDMxNzY5LCAzMTc3NCwgMzE3NzgsIDMxNzgyLCAzMTc4NywgMzE3OTIsIDMxNzk2LCAzMTgwMSwgMzE4MDYsIDMxODExLCAKLSAgICAzMTgxNSwgMCwgMCwgMCwgMzE4MTksIDMxODI0LCAzMTgzMywgMzE4MzgsIDMxODQ1LCAzMTg1MCwgMzE4NTQsIDMxODU3LCAKLSAgICAzMTg2MCwgMzE4NjMsIDMxODY2LCAzMTg2OSwgMzE4NzIsIDMxODc1LCAzMTg3OCwgMCwgMCwgMCwgMzE4ODEsIDMxODg1LCAKLSAgICAzMTg4OSwgMzE4OTMsIDMxOTAwLCAzMTkwNiwgMzE5MTIsIDMxOTE4LCAzMTkyNCwgMzE5MzAsIDMxOTM2LCAzMTk0MiwgCi0gICAgMzE5NDgsIDMxOTU0LCAzMTk2MSwgMzE5NjgsIDMxOTc1LCAzMTk4MiwgMzE5ODksIDMxOTk2LCAzMjAwMywgMzIwMTAsIAotICAgIDMyMDE3LCAzMjAyNCwgMzIwMzEsIDMyMDM4LCAzMjA0NSwgMzIwNTIsIDMyMDU5LCAzMjA2NiwgMzIwNzMsIDMyMDgwLCAKLSAgICAzMjA4NywgMzIwOTQsIDMyMTAxLCAzMjEwOCwgMzIxMTUsIDMyMTIyLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE1MCwgCi0gICAgMzIxNTcsIDMyMTY0LCAzMjE3MiwgMzIxODAsIDMyMTg4LCAzMjE5NCwgMzIyMDAsIDMyMjA2LCAzMjIxNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzNzMsIDMwMzc5LCAKKyAgICAzMDM4NSwgMzAzODksIDMwMzkzLCAzMDM5NywgMzA0MDEsIDMwNDA3LCAzMDQxMSwgMzA0MTcsIDMwNDIxLCAzMDQyNywgCisgICAgMzA0MzMsIDMwNDQxLCAzMDQ0NywgMzA0NTUsIDMwNDU5LCAzMDQ2MywgMzA0NjcsIDMwNDczLCAzMDQ3NiwgMzA0ODIsIAorICAgIDMwNDg2LCAzMDQ5MiwgMzA0OTYsIDMwNTAwLCAzMDUwNiwgMzA1MTAsIDMwNTE2LCAzMDUyMCwgMzA1MjYsIDMwNTM0LCAKKyAgICAzMDU0MiwgMzA1NTAsIDMwNTU2LCAzMDU2MCwgMzA1NjYsIDMwNTcwLCAzMDU3NiwgMzA1NzksIDMwNTgyLCAzMDU4OCwgCisgICAgMzA1OTIsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA3LCAzMDYxMSwgMzA2MTUsIDMwNjIxLCAzMDYyNywgMzA2MzAsIAorICAgIDMwNjMzLCAzMDYzNywgMzA2NDIsIDMwNjQ3LCAzMDY1NCwgMzA2NTksIDMwNjY2LCAzMDY3MywgMzA2ODIsIDMwNjg5LCAKKyAgICAzMDY5OCwgMzA3MDMsIDMwNzEwLCAzMDcxNywgMzA3MjYsIDMwNzMxLCAzMDczOCwgMzA3NDMsIDMwNzQ5LCAzMDc1NSwgCisgICAgMzA3NjEsIDMwNzY3LCAzMDc3MywgMzA3NzksIDAsIDAsIDAsIDAsIDMwNzg1LCAzMDc4OSwgMzA3OTIsIDMwNzk1LCAKKyAgICAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAzMDgyNSwgCisgICAgMzA4MzAsIDMwODM1LCAzMDg0MCwgMzA4NDMsIDMwODQ4LCAzMDg1MywgMzA4NTgsIDMwODYzLCAzMDg3MCwgMzA4NzUsIAorICAgIDMwODgwLCAzMDg4NSwgMzA4OTAsIDMwODk3LCAzMDkwMywgMzA5MDksIDMwOTE1LCAzMDkyMSwgMzA5MjcsIDMwOTM2LCAKKyAgICAzMDk0NSwgMzA5NTEsIDMwOTU3LCAzMDk2NSwgMzA5NzMsIDMwOTgyLCAzMDk5MSwgMzA5OTksIDMxMDA3LCAzMTAxNiwgCisgICAgMzEwMjUsIDAsIDAsIDAsIDMxMDMzLCAzMTAzNywgMzEwNDEsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU0LCAzMTA1OCwgCisgICAgMzEwNjEsIDMxMDY0LCAzMTA2OCwgMzEwNzEsIDMxMDc1LCAzMTA3OSwgMzEwODMsIDMxMDg3LCAzMTA5MSwgMzEwOTUsIAorICAgIDMxMDk5LCAzMTEwMywgMzExMDcsIDMxMTEwLCAzMTExMywgMzExMTcsIDMxMTIxLCAzMTEyNSwgMzExMjgsIDMxMTMxLCAKKyAgICAzMTEzNCwgMzExMzgsIDMxMTQyLCAzMTE0NSwgMzExNDksIDMxMTUyLCAzMTE1NywgMzExNjIsIDMxMTY3LCAzMTE3MiwgCisgICAgMzExNzcsIDMxMTgyLCAzMTE4NywgMzExOTIsIDMxMTk3LCAzMTIwMSwgMzEyMDUsIDMxMjExLCAzMTIxOCwgMzEyMjIsIAorICAgIDMxMjI2LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIDMxMjU0LCAKKyAgICAzMTI1NywgMzEyNjAsIDMxMjY0LCAzMTI2OCwgMzEyNzIsIDMxMjc3LCAzMTI4MSwgMzEyODUsIDMxMjkxLCAzMTI5NSwgCisgICAgMzEzMDEsIDMxMzA3LCAzMTMxMiwgMzEzMTksIDMxMzIzLCAzMTMyOSwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTEsIAorICAgIDMxMzU4LCAzMTM2MywgMzEzNzAsIDMxMzc1LCAzMTM4MCwgMzEzODQsIDMxMzkwLCAzMTM5NCwgMzE0MDAsIDMxNDA3LCAKKyAgICAzMTQxNCwgMzE0MTgsIDMxNDI0LCAzMTQzMCwgMzE0MzQsIDMxNDQwLCAzMTQ0NSwgMzE0NTAsIDMxNDU3LCAzMTQ2MiwgCisgICAgMzE0NjcsIDMxNDcyLCAzMTQ3NywgMzE0ODEsIDMxNDg1LCAzMTQ5MCwgMzE0OTUsIDMxNTAyLCAzMTUwOCwgMzE1MTMsIAorICAgIDMxNTIwLCAzMTUyNSwgMzE1MzIsIDMxNTM3LCAzMTU0NiwgMzE1NTIsIDMxNTU4LCAzMTU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzE1NjYsIDMxNTc1LCAzMTU4MiwgMzE1ODksIDMxNTk2LCAzMTU5OSwgMzE2MDMsIDMxNjA3LCAzMTYxMSwgCisgICAgMzE2MTUsIDMxNjE5LCAzMTYyMywgMzE2MjcsIDMxNjMxLCAzMTYzNSwgMzE2MzksIDMxNjQzLCAzMTY0NywgMzE2NTAsIAorICAgIDMxNjUzLCAzMTY1NywgMzE2NjEsIDMxNjY1LCAzMTY2OSwgMzE2NzMsIDMxNjc3LCAzMTY4MCwgMzE2ODQsIDMxNjg4LCAKKyAgICAzMTY5MiwgMzE2OTYsIDMxNjk5LCAzMTcwMiwgMzE3MDYsIDMxNzA5LCAzMTcxMywgMzE3MTcsIDMxNzIwLCAzMTcyNCwgCisgICAgMzE3MjgsIDMxNzMxLCAzMTczNiwgMzE3NDEsIDMxNzQ2LCAzMTc1MCwgMzE3NTQsIDMxNzU5LCAzMTc2MywgMzE3NjgsIAorICAgIDMxNzcyLCAzMTc3NywgMzE3ODEsIDMxNzg1LCAzMTc5MCwgMzE3OTUsIDMxNzk5LCAzMTgwNCwgMzE4MDksIDMxODE0LCAKKyAgICAzMTgxOCwgMCwgMCwgMCwgMzE4MjIsIDMxODI3LCAzMTgzNiwgMzE4NDEsIDMxODQ4LCAzMTg1MywgMzE4NTcsIDMxODYwLCAKKyAgICAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAzMTg4MSwgMCwgMCwgMCwgMzE4ODQsIDMxODg4LCAKKyAgICAzMTg5MiwgMzE4OTYsIDMxOTAzLCAzMTkwOSwgMzE5MTUsIDMxOTIxLCAzMTkyNywgMzE5MzMsIDMxOTM5LCAzMTk0NSwgCisgICAgMzE5NTEsIDMxOTU3LCAzMTk2NCwgMzE5NzEsIDMxOTc4LCAzMTk4NSwgMzE5OTIsIDMxOTk5LCAzMjAwNiwgMzIwMTMsIAorICAgIDMyMDIwLCAzMjAyNywgMzIwMzQsIDMyMDQxLCAzMjA0OCwgMzIwNTUsIDMyMDYyLCAzMjA2OSwgMzIwNzYsIDMyMDgzLCAKKyAgICAzMjA5MCwgMzIwOTcsIDMyMTA0LCAzMjExMSwgMzIxMTgsIDMyMTI1LCAzMjEzMiwgMzIxMzksIDMyMTQ2LCAzMjE1MywgCisgICAgMzIxNjAsIDMyMTY3LCAzMjE3NSwgMzIxODMsIDMyMTkxLCAzMjE5NywgMzIyMDMsIDMyMjA5LCAzMjIxNywgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyMjMsIDMyMjMwLCAzMjIzNywgMzIyNDQsIDMyMjUxLCAKLSAgICAzMjI2MCwgMzIyNjksIDMyMjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI4NywgMzIyOTIsIDMyMjk3LCAzMjMwMiwgCi0gICAgMzIzMDcsIDMyMzE2LCAzMjMyNywgMzIzMzYsIDMyMzQ3LCAzMjM1MywgMzIzNjYsIDMyMzcyLCAzMjM3OSwgMzIzODYsIAotICAgIDMyMzkxLCAzMjM5NywgMzI0MDMsIDMyNDE0LCAzMjQyMywgMzI0MzAsIDMyNDM3LCAzMjQ0NiwgMzI0NTMsIDMyNDYyLCAKLSAgICAzMjQ3MiwgMzI0ODIsIDMyNDg5LCAzMjQ5NiwgMzI1MDMsIDMyNTEzLCAzMjUxOCwgMzI1MjYsIDMyNTMyLCAzMjU0MCwgCi0gICAgMzI1NDksIDMyNTU0LCAzMjU2MSwgMzI1NjcsIDMyNTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjU3NywgCi0gICAgMzI1ODIsIDMyNTg4LCAzMjU5NSwgMzI2MDMsIDMyNjA5LCAzMjYxNSwgMzI2MjEsIDMyNjI2LCAzMjYzMywgMzI2MzksIAotICAgIDMyNjQ1LCAzMjY1MSwgMzI2NTksIDMyNjY0LCAzMjY3MiwgMzI2NzcsIDMyNjgzLCAzMjY4OSwgMzI2OTYsIDMyNzA0LCAKLSAgICAzMjcxMSwgMzI3MTcsIDMyNzI0LCAzMjczMSwgMzI3MzcsIDMyNzQ0LCAzMjc1MSwgMzI3NTcsIDMyNzYyLCAzMjc2OCwgCi0gICAgMzI3NzYsIDMyNzg0LCAzMjc5MCwgMzI3OTYsIDMyODAyLCAzMjgwOCwgMzI4MTYsIDMyODIwLCAzMjgyNiwgMzI4MzIsIAotICAgIDMyODM4LCAzMjg0NCwgMzI4NTAsIDMyODU2LCAzMjg2MCwgMzI4NjUsIDMyODcwLCAzMjg3NywgMzI4ODIsIDMyODg2LCAKLSAgICAzMjg5MiwgMzI4OTcsIDMyOTAyLCAzMjkwNiwgMzI5MTEsIDMyOTE2LCAzMjkyMCwgMzI5MjQsIDMyOTI5LCAzMjkzNiwgCi0gICAgMzI5NDAsIDMyOTQ1LCAzMjk1MCwgMzI5NTQsIDMyOTU5LCAzMjk2MywgMzI5NjgsIDMyOTcyLCAzMjk3OCwgMzI5ODMsIAotICAgIDMyOTkwLCAzMjk5NSwgMzMwMDAsIDMzMDA0LCAzMzAwOSwgMzMwMTQsIDMzMDIxLCAzMzAyNiwgMzMwMzIsIDMzMDM3LCAKLSAgICAzMzA0MSwgMzMwNDYsIDMzMDUwLCAzMzA1NSwgMzMwNjIsIDMzMDY5LCAzMzA3NCwgMzMwNzksIDMzMDgzLCAzMzA4OSwgCi0gICAgMzMwOTUsIDMzMTAwLCAzMzEwNSwgMzMxMTAsIDMzMTE2LCAzMzEyMSwgMzMxMjcsIDMzMTMyLCAzMzEzOCwgMzMxNDQsIAotICAgIDMzMTUwLCAzMzE1NywgMzMxNjQsIDMzMTcxLCAzMzE3OCwgMzMxODUsIDMzMTkyLCAzMzE5NywgMzMyMDUsIDMzMjE0LCAKLSAgICAzMzIyMywgMzMyMzIsIDMzMjQxLCAzMzI1MCwgMzMyNTksIDMzMjcxLCAzMzI4MCwgMzMyODksIDMzMjk4LCAzMzMwNSwgCi0gICAgMzMzMTAsIDMzMzE3LCAzMzMyNSwgMzMzMzMsIDMzMzQwLCAzMzM0NywgMzMzNTQsIDMzMzYxLCAzMzM2OSwgMzMzNzgsIAotICAgIDMzMzg3LCAzMzM5NiwgMzM0MDUsIDMzNDE0LCAzMzQyMywgMzM0MzIsIDMzNDQxLCAzMzQ1MCwgMzM0NTksIDMzNDY4LCAKLSAgICAzMzQ3NywgMzM0ODYsIDMzNDk1LCAzMzUwMywgMzM1MTIsIDMzNTIzLCAzMzUzMSwgMzM1NDAsIDMzNTUxLCAzMzU2MCwgCi0gICAgMzM1NjksIDMzNTc4LCAzMzU4NywgMzM1OTUsIDMzNjA0LCAzMzYxMSwgMzM2MTYsIDMzNjI0LCAzMzYyOSwgMzM2MzYsIAotICAgIDMzNjQxLCAzMzY1MCwgMzM2NTYsIDMzNjYzLCAzMzY3MCwgMzM2NzUsIDMzNjgwLCAzMzY4OCwgMzM2OTYsIDMzNzA1LCAKLSAgICAzMzcxNCwgMzM3MTksIDMzNzI2LCAzMzczNywgMzM3NDUsIDMzNzU0LCAzMzc2MCwgMzM3NjYsIDMzNzcxLCAzMzc3OCwgCi0gICAgMzM3ODMsIDMzNzkyLCAzMzc5NywgMzM4MDIsIDMzODA3LCAzMzgxNCwgMzM4MjEsIDMzODI2LCAzMzgzNSwgMzM4NDMsIAotICAgIDMzODQ4LCAzMzg1MywgMzM4NjAsIDMzODY3LCAzMzg3MSwgMzM4NzUsIDMzODc4LCAzMzg4MSwgMzM4ODQsIDMzODg3LCAKLSAgICAzMzg5MCwgMzM4OTMsIDMzOTAwLCAzMzkwMywgMzM5MDYsIDMzOTExLCAzMzkxNSwgMzM5MTksIDMzOTIzLCAzMzkyNywgCi0gICAgMzM5MzEsIDMzOTQwLCAzMzk0NiwgMzM5NTIsIDMzOTU4LCAzMzk2NiwgMzM5NzQsIDMzOTgwLCAzMzk4NiwgMzM5OTMsIAotICAgIDMzOTk5LCAzNDAwNCwgMzQwMTAsIDM0MDE2LCAzNDAyMiwgMzQwMjksIDM0MDM1LCAzNDA0MywgMzQwNDksIDM0MDU2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA2MiwgMzQwNjksIAotICAgIDM0MDc2LCAzNDA4MSwgMzQwOTAsIDM0MDk4LCAzNDEwNiwgMzQxMTMsIDM0MTIwLCAzNDEyNywgMzQxMzQsIDM0MTQyLCAKLSAgICAzNDE1MCwgMzQxNjAsIDM0MTcwLCAzNDE3OCwgMzQxODYsIDM0MTk0LCAzNDIwMiwgMzQyMTEsIDM0MjIwLCAzNDIyOCwgCi0gICAgMzQyMzYsIDM0MjQ1LCAzNDI1NCwgMzQyNjQsIDM0Mjc0LCAzNDI4MywgMzQyOTIsIDM0MzAwLCAzNDMwOCwgMzQzMTYsIAotICAgIDM0MzI0LCAzNDMzNCwgMzQzNDQsIDM0MzUyLCAzNDM2MCwgMzQzNjgsIDM0Mzc2LCAzNDM4NCwgMzQzOTIsIDM0NDAwLCAKLSAgICAzNDQwOCwgMzQ0MTYsIDM0NDI0LCAzNDQzMiwgMzQ0NDAsIDM0NDQ5LCAzNDQ1OCwgMzQ0NjcsIDM0NDc2LCAzNDQ4NiwgCi0gICAgMzQ0OTYsIDM0NTAzLCAzNDUxMCwgMzQ1MTgsIDM0NTI2LCAzNDUzNSwgMzQ1NDQsIDM0NTUyLCAzNDU2MCwgMzQ1NzIsIAotICAgIDM0NTg0LCAzNDU5MywgMzQ2MDIsIDM0NjExLCAzNDYyMCwgMzQ2MjcsIDM0NjM0LCAzNDY0MiwgMzQ2NTAsIDM0NjU4LCAKLSAgICAzNDY2NiwgMzQ2NzQsIDM0NjgyLCAzNDY5MCwgMzQ2OTgsIDM0NzA3LCAzNDcxNiwgMzQ3MjUsIDM0NzM0LCAzNDc0MywgCi0gICAgMzQ3NTIsIDM0NzYyLCAzNDc3MiwgMzQ3ODIsIDM0NzkyLCAzNDgwMSwgMzQ4MTAsIDM0ODE3LCAzNDgyNCwgMzQ4MzIsIAotICAgIDM0ODQwLCAzNDg0OCwgMzQ4NTYsIDM0ODY0LCAzNDg3MiwgMzQ4ODQsIDM0ODk2LCAzNDkwNSwgMzQ5MTQsIDM0OTIyLCAKLSAgICAzNDkzMCwgMzQ5MzgsIDM0OTQ2LCAzNDk1NywgMzQ5NjgsIDM0OTc5LCAzNDk5MCwgMzUwMDIsIDM1MDE0LCAzNTAyMiwgCi0gICAgMzUwMzAsIDM1MDM4LCAzNTA0NiwgMzUwNTUsIDM1MDY0LCAzNTA3MywgMzUwODIsIDM1MDkwLCAzNTA5OCwgMzUxMDYsIAotICAgIDM1MTE0LCAzNTEyMiwgMzUxMzAsIDM1MTM5LCAzNTE0OCwgMzUxNTgsIDM1MTY4LCAzNTE3NSwgMzUxODIsIDM1MTkwLCAKLSAgICAzNTE5OCwgMzUyMDYsIDM1MjE0LCAzNTIyMSwgMzUyMjgsIDM1MjM2LCAzNTI0NCwgMzUyNTIsIDM1MjYwLCAzNTI2OCwgCi0gICAgMzUyNzYsIDM1Mjg0LCAzNTI5MiwgMzUzMDAsIDM1MzA4LCAzNTMxNiwgMzUzMjQsIDM1MzMyLCAzNTM0MCwgMzUzNDgsIAotICAgIDM1MzU2LCAzNTM2NSwgMzUzNzQsIDM1MzgzLCAzNTM5MSwgMzU0MDAsIDM1NDA5LCAzNTQxOCwgMzU0MjcsIDM1NDM3LCAKLSAgICAzNTQ0NiwgMzU0NTMsIDM1NDU4LCAzNTQ2NSwgMzU0NzIsIDM1NDgwLCAzNTQ4OCwgMzU0OTcsIDM1NTA2LCAzNTUxNiwgCi0gICAgMzU1MjYsIDM1NTM3LCAzNTU0OCwgMzU1NTcsIDM1NTY2LCAzNTU3NiwgMzU1ODYsIDM1NTk1LCAzNTYwNCwgMzU2MTQsIAotICAgIDM1NjI0LCAzNTYzNSwgMzU2NDYsIDM1NjU1LCAzNTY2NCwgMzU2NzQsIDM1Njg0LCAzNTY5MSwgMzU2OTgsIDM1NzA2LCAKLSAgICAzNTcxNCwgMzU3MjAsIDM1NzI2LCAzNTczNSwgMzU3NDQsIDM1NzU0LCAzNTc2NCwgMzU3NzUsIDM1Nzg2LCAzNTc5NSwgCi0gICAgMzU4MDQsIDM1ODE0LCAzNTgyNCwgMzU4MzMsIDM1ODQyLCAzNTg1MCwgMzU4NTgsIDM1ODY1LCAzNTg3MiwgMzU4ODAsIAotICAgIDM1ODg4LCAzNTg5NywgMzU5MDYsIDM1OTE2LCAzNTkyNiwgMzU5MzcsIDM1OTQ4LCAzNTk1NywgMzU5NjYsIDM1OTc2LCAKLSAgICAzNTk4NiwgMzU5OTUsIDM2MDA0LCAzNjAxNCwgMzYwMjQsIDM2MDM1LCAzNjA0NiwgMzYwNTUsIDM2MDY0LCAzNjA3NCwgCi0gICAgMzYwODQsIDM2MDkxLCAzNjA5OCwgMzYxMDYsIDM2MTE0LCAzNjEyMywgMzYxMzIsIDM2MTQyLCAzNjE1MiwgMzYxNjMsIAotICAgIDM2MTc0LCAzNjE4MywgMzYxOTIsIDM2MjAyLCAzNjIxMiwgMzYyMjAsIDM2MjI4LCAzNjIzNiwgMzYyNDQsIDM2MjUzLCAKLSAgICAzNjI2MiwgMzYyNjksIDM2Mjc2LCAzNjI4MywgMzYyOTAsIDM2Mjk3LCAzNjMwNCwgMzYzMTIsIDM2MzIwLCAzNjMyOCwgCi0gICAgMzYzMzYsIDM2MzQ3LCAzNjM1OCwgMzYzNjksIDM2MzgwLCAzNjM5MSwgMzY0MDIsIDM2NDEwLCAzNjQxOCwgMzY0MjksIAotICAgIDM2NDQwLCAzNjQ1MSwgMzY0NjIsIDM2NDczLCAzNjQ4NCwgMzY0OTIsIDM2NTAwLCAzNjUxMSwgMzY1MjIsIDM2NTMzLCAwLCAKLSAgICAwLCAzNjU0NCwgMzY1NTIsIDM2NTYwLCAzNjU3MSwgMzY1ODIsIDM2NTkzLCAwLCAwLCAzNjYwNCwgMzY2MTIsIDM2NjIwLCAKLSAgICAzNjYzMSwgMzY2NDIsIDM2NjUzLCAzNjY2NCwgMzY2NzUsIDM2Njg2LCAzNjY5NCwgMzY3MDIsIDM2NzEzLCAzNjcyNCwgCi0gICAgMzY3MzUsIDM2NzQ2LCAzNjc1NywgMzY3NjgsIDM2Nzc2LCAzNjc4NCwgMzY3OTUsIDM2ODA2LCAzNjgxNywgMzY4MjgsIAotICAgIDM2ODM5LCAzNjg1MCwgMzY4NTgsIDM2ODY2LCAzNjg3NywgMzY4ODgsIDM2ODk5LCAzNjkxMCwgMzY5MjEsIDM2OTMyLCAKLSAgICAzNjk0MCwgMzY5NDgsIDM2OTU5LCAzNjk3MCwgMzY5ODEsIDAsIDAsIDM2OTkyLCAzNzAwMCwgMzcwMDgsIDM3MDE5LCAKLSAgICAzNzAzMCwgMzcwNDEsIDAsIDAsIDM3MDUyLCAzNzA2MCwgMzcwNjgsIDM3MDc5LCAzNzA5MCwgMzcxMDEsIDM3MTEyLCAKLSAgICAzNzEyMywgMCwgMzcxMzQsIDAsIDM3MTQyLCAwLCAzNzE1MywgMCwgMzcxNjQsIDM3MTc1LCAzNzE4MywgMzcxOTEsIAotICAgIDM3MjAyLCAzNzIxMywgMzcyMjQsIDM3MjM1LCAzNzI0NiwgMzcyNTcsIDM3MjY1LCAzNzI3MywgMzcyODQsIDM3Mjk1LCAKLSAgICAzNzMwNiwgMzczMTcsIDM3MzI4LCAzNzMzOSwgMzczNDcsIDM3MzU1LCAzNzM2MywgMzczNzEsIDM3Mzc5LCAzNzM4NywgCi0gICAgMzczOTUsIDM3NDAzLCAzNzQxMSwgMzc0MTksIDM3NDI3LCAzNzQzNSwgMzc0NDMsIDAsIDAsIDM3NDUxLCAzNzQ2MiwgCi0gICAgMzc0NzMsIDM3NDg3LCAzNzUwMSwgMzc1MTUsIDM3NTI5LCAzNzU0MywgMzc1NTcsIDM3NTY4LCAzNzU3OSwgMzc1OTMsIAotICAgIDM3NjA3LCAzNzYyMSwgMzc2MzUsIDM3NjQ5LCAzNzY2MywgMzc2NzQsIDM3Njg1LCAzNzY5OSwgMzc3MTMsIDM3NzI3LCAKLSAgICAzNzc0MSwgMzc3NTUsIDM3NzY5LCAzNzc4MCwgMzc3OTEsIDM3ODA1LCAzNzgxOSwgMzc4MzMsIDM3ODQ3LCAzNzg2MSwgCi0gICAgMzc4NzUsIDM3ODg2LCAzNzg5NywgMzc5MTEsIDM3OTI1LCAzNzkzOSwgMzc5NTMsIDM3OTY3LCAzNzk4MSwgMzc5OTIsIAotICAgIDM4MDAzLCAzODAxNywgMzgwMzEsIDM4MDQ1LCAzODA1OSwgMzgwNzMsIDM4MDg3LCAzODA5NSwgMzgxMDMsIDM4MTE0LCAKLSAgICAzODEyMiwgMCwgMzgxMzMsIDM4MTQxLCAzODE1MiwgMzgxNjAsIDM4MTY4LCAzODE3NiwgMzgxODQsIDM4MTkyLCAzODE5NSwgCi0gICAgMzgxOTgsIDM4MjAxLCAzODIwNCwgMzgyMTAsIDM4MjIxLCAzODIyOSwgMCwgMzgyNDAsIDM4MjQ4LCAzODI1OSwgMzgyNjcsIAotICAgIDM4Mjc1LCAzODI4MywgMzgyOTEsIDM4Mjk5LCAzODMwNSwgMzgzMTEsIDM4MzE3LCAzODMyNSwgMzgzMzMsIDM4MzQ0LCAwLCAKLSAgICAwLCAzODM1NSwgMzgzNjMsIDM4Mzc0LCAzODM4MiwgMzgzOTAsIDM4Mzk4LCAwLCAzODQwNiwgMzg0MTIsIDM4NDE4LCAKLSAgICAzODQyNCwgMzg0MzIsIDM4NDQwLCAzODQ1MSwgMzg0NjIsIDM4NDcwLCAzODQ3OCwgMzg0ODYsIDM4NDk3LCAzODUwNSwgCi0gICAgMzg1MTMsIDM4NTIxLCAzODUyOSwgMzg1MzcsIDM4NTQzLCAzODU0OSwgMCwgMCwgMzg1NTIsIDM4NTYzLCAzODU3MSwgMCwgCi0gICAgMzg1ODIsIDM4NTkwLCAzODYwMSwgMzg2MDksIDM4NjE3LCAzODYyNSwgMzg2MzMsIDM4NjQxLCAzODY0NCwgMCwgMzg2NDcsIAotICAgIDM4NjUxLCAzODY1NSwgMzg2NTksIDM4NjYzLCAzODY2NywgMzg2NzEsIDM4Njc1LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKLSAgICAzODY5MSwgMzg2OTcsIDM4NzAzLCAzODcwOSwgMzg3MTIsIDM4NzE1LCAzODcxNywgMzg3MjEsIDM4NzI1LCAzODcyOSwgCi0gICAgMzg3MzMsIDM4NzM1LCAzODczOSwgMzg3NDMsIDM4NzQ5LCAzODc1NSwgMzg3NjIsIDM4NzY5LCAzODc3NCwgMzg3NzksIAotICAgIDM4Nzg1LCAzODc5MSwgMzg3OTMsIDM4Nzk2LCAzODc5OCwgMzg4MDIsIDM4ODA2LCAzODgxMCwgMzg4MTMsIDM4ODE3LCAKLSAgICAzODgyMSwgMzg4MjUsIDM4ODI5LCAzODgzMywgMzg4MzksIDM4ODQzLCAzODg0NywgMzg4NTMsIDM4ODU4LCAzODg2NSwgCi0gICAgMzg4NjcsIDM4ODcwLCAzODg3NCwgMzg4NzgsIDM4ODgzLCAzODg4OSwgMzg4OTEsIDM4OTAwLCAzODkwOSwgMzg5MTIsIAotICAgIDM4OTE2LCAzODkxOCwgMzg5MjAsIDM4OTIyLCAzODkyNSwgMzg5MzEsIDM4OTMzLCAzODkzNywgMzg5NDEsIDM4OTQ4LCAKLSAgICAzODk1NSwgMzg5NTksIDM4OTY0LCAzODk2OSwgMzg5NzQsIDM4OTc5LCAzODk4MywgMzg5ODcsIDM4OTkwLCAzODk5NCwgCi0gICAgMzg5OTgsIDM5MDA1LCAzOTAxMCwgMzkwMTQsIDM5MDE4LCAzOTAyMywgMzkwMjcsIDM5MDMxLCAzOTAzNiwgMzkwNDEsIAotICAgIDM5MDQ1LCAzOTA0OSwgMzkwNTMsIDM5MDU1LCAzOTA2MCwgMzkwNjUsIDM5MDY5LCAzOTA3MywgMzkwNzcsIDM5MDgxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAzOTA4NSwgMzkwOTEsIDM5MDk3LCAzOTEwNCwgMzkxMTEsIDM5MTE2LCAzOTEyMSwgMzkxMjUsIDAsIDAsIAotICAgIDM5MTMxLCAzOTEzNCwgMzkxMzcsIDM5MTQwLCAzOTE0MywgMzkxNDYsIDM5MTQ5LCAzOTE1MywgMzkxNTcsIDM5MTYyLCAKLSAgICAzOTE2NywgMzkxNzIsIDM5MTc5LCAzOTE4MywgMzkxODYsIDM5MTg5LCAzOTE5MiwgMzkxOTUsIDM5MTk4LCAzOTIwMSwgCi0gICAgMzkyMDQsIDM5MjA3LCAzOTIxMCwgMzkyMTQsIDM5MjE4LCAzOTIyMywgMzkyMjgsIDAsIDM5MjMzLCAzOTIzOSwgMzkyNDUsIAotICAgIDM5MjUxLCAzOTI1OCwgMzkyNjUsIDM5MjcyLCAzOTI3OSwgMzkyODUsIDM5MjkxLCAzOTI5OCwgMzkzMDUsIDM5MzEyLCAwLCAKLSAgICAwLCAwLCAzOTMxOSwgMzkzMjIsIDM5MzI1LCAzOTMyOCwgMzkzMzMsIDM5MzM2LCAzOTMzOSwgMzkzNDIsIDM5MzQ1LCAKLSAgICAzOTM0OCwgMzkzNTEsIDM5MzU1LCAzOTM1OCwgMzkzNjEsIDM5MzY0LCAzOTM2NywgMzkzNzAsIDM5Mzc1LCAzOTM3OCwgCi0gICAgMzkzODEsIDM5Mzg0LCAzOTM4NywgMzkzOTAsIDM5Mzk1LCAzOTM5OCwgMzk0MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NDA2LCAzOTQxMSwgMzk0MTYsIDM5NDIzLCAKLSAgICAzOTQzMSwgMzk0MzYsIDM5NDQxLCAzOTQ0NSwgMzk0NDksIDM5NDU0LCAzOTQ2MSwgMzk0NjgsIDM5NDcyLCAzOTQ3NywgCi0gICAgMzk0ODIsIDM5NDg3LCAzOTQ5MiwgMzk0OTksIDM5NTA0LCAzOTUwOSwgMzk1MTQsIDM5NTIzLCAzOTUzMCwgMzk1MzcsIAotICAgIDM5NTQxLCAzOTU0NiwgMzk1NTIsIDM5NTU3LCAzOTU2NCwgMzk1NzMsIDM5NTgyLCAzOTU4NiwgMzk1OTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NTk0LCAzOTU5OCwgMzk2MDYsIDM5NjEwLCAzOTYxNCwgCi0gICAgMzk2MTksIDM5NjIzLCAzOTYyNywgMzk2MzEsIDM5NjMzLCAzOTYzNywgMzk2NDEsIDM5NjQ1LCAzOTY1MCwgMzk2NTQsIAotICAgIDM5NjU4LCAzOTY2NiwgMzk2NjksIDM5NjczLCAzOTY3NiwgMzk2NzksIDM5Njg1LCAzOTY4OSwgMzk2OTIsIDM5Njk4LCAKLSAgICAzOTcwMiwgMzk3MDYsIDM5NzEwLCAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNCwgMzk3MjYsIDM5NzI5LCAzOTczMiwgCi0gICAgMzk3MzYsIDM5NzM4LCAzOTc0MiwgMzk3NDUsIDM5NzQ4LCAzOTc1MywgMzk3NTgsIDM5NzY1LCAzOTc2OCwgMzk3NzEsIAotICAgIDM5Nzc1LCAzOTc4MCwgMzk3ODMsIDM5Nzg2LCAzOTc4OSwgMzk3OTMsIDM5Nzk4LCAzOTgwMSwgMzk4MDQsIDM5ODA2LCAKLSAgICAzOTgwOSwgMzk4MTIsIDM5ODE1LCAzOTgxOSwgMzk4MjQsIDM5ODI3LCAzOTgzMSwgMzk4MzUsIDM5ODM5LCAzOTg0MywgCi0gICAgMzk4NDgsIDM5ODU0LCAzOTg1OSwgMzk4NjQsIDM5ODcwLCAzOTg3NSwgMzk4ODAsIDM5ODg0LCAzOTg4OCwgMzk4OTMsIAotICAgIDM5ODk3LCAzOTkwMSwgMzk5MDQsIDM5OTA2LCAzOTkxMSwgMzk5MTcsIDM5OTI0LCAzOTkzMSwgMzk5MzgsIDM5OTQ1LCAKLSAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODEsIDM5OTg4LCAzOTk5NiwgNDAwMDMsIDQwMDEwLCA0MDAxOCwgCi0gICAgNDAwMjYsIDQwMDMxLCA0MDAzNiwgNDAwNDEsIDQwMDQ2LCA0MDA1MSwgNDAwNTYsIDQwMDYxLCA0MDA2NiwgNDAwNzEsIAotICAgIDQwMDc2LCA0MDA4MiwgNDAwODgsIDQwMDk0LCA0MDEwMCwgNDAxMDcsIDQwMTE1LCA0MDEyMiwgNDAxMjgsIDQwMTM0LCAKLSAgICA0MDE0MCwgNDAxNDYsIDQwMTUyLCA0MDE1OCwgNDAxNjQsIDQwMTcwLCA0MDE3NiwgNDAxODMsIDQwMTkwLCA0MDE5NywgCi0gICAgNDAyMDQsIDQwMjEyLCA0MDIyMSwgNDAyMjksIDQwMjQwLCA0MDI0OCwgNDAyNTYsIDQwMjY1LCA0MDI3MiwgNDAyODEsIAotICAgIDQwMjkwLCA0MDI5OCwgNDAzMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMzE1LCA0MDMxNywgNDAzMjAsIDQwMzIyLCA0MDMyNSwgCi0gICAgNDAzMjgsIDQwMzMxLCA0MDMzNiwgNDAzNDEsIDQwMzQ2LCA0MDM1MSwgNDAzNTUsIDQwMzU5LCA0MDM2MywgNDAzNjcsIAotICAgIDQwMzcyLCA0MDM3OCwgNDAzODMsIDQwMzg5LCA0MDM5NCwgNDAzOTksIDQwNDA0LCA0MDQxMCwgNDA0MTUsIDQwNDIxLCAKLSAgICA0MDQyNywgNDA0MzEsIDQwNDM1LCA0MDQ0MCwgNDA0NDUsIDQwNDUwLCA0MDQ1NSwgNDA0NjAsIDQwNDY4LCA0MDQ3NiwgCi0gICAgNDA0ODQsIDQwNDkyLCA0MDQ5OSwgNDA1MDcsIDQwNTE0LCA0MDUyMSwgNDA1MzAsIDQwNTQyLCA0MDU0OCwgNDA1NTQsIAotICAgIDQwNTYyLCA0MDU3MCwgNDA1NzksIDQwNTg4LCA0MDU5NiwgNDA2MDQsIDQwNjEzLCA0MDYyMiwgNDA2MjcsIDQwNjM1LCAKLSAgICA0MDY0MCwgNDA2NDUsIDQwNjUxLCA0MDY1NiwgNDA2NjIsIDQwNjY5LCA0MDY3NiwgNDA2ODEsIDQwNjg3LCA0MDY5MiwgCi0gICAgNDA2OTUsIDQwNjk5LCA0MDcwMiwgNDA3MDYsIDQwNzEwLCA0MDcxNCwgNDA3MjAsIDQwNzI2LCA0MDczMiwgNDA3MzgsIAotICAgIDQwNzQyLCA0MDc0NiwgNDA3NTAsIDQwNzU0LCA0MDc2MCwgNDA3NjYsIDQwNzcwLCA0MDc3NSwgNDA3NzksIDQwNzg0LCAKLSAgICA0MDc4OSwgNDA3OTQsIDQwNzk3LCA0MDgwMSwgNDA4MDQsIDQwODA4LCA0MDgxNSwgNDA4MjMsIDQwODM0LCA0MDg0NSwgCi0gICAgNDA4NTAsIDQwODU5LCA0MDg2NiwgNDA4NzUsIDQwODg0LCA0MDg4OCwgNDA4OTQsIDQwOTAyLCA0MDkwNiwgNDA5MTEsIAotICAgIDQwOTE2LCA0MDkyMiwgNDA5MjgsIDQwOTM0LCA0MDk0MSwgNDA5NDUsIDQwOTQ5LCA0MDk1NCwgNDA5NTcsIDQwOTU5LCAKLSAgICA0MDk2MywgNDA5NjcsIDQwOTc1LCA0MDk3OSwgNDA5ODEsIDQwOTgzLCA0MDk4NywgNDA5OTUsIDQxMDAwLCA0MTAwNiwgCi0gICAgNDEwMTYsIDQxMDIzLCA0MTAyOCwgNDEwMzIsIDQxMDM2LCA0MTA0MCwgNDEwNDMsIDQxMDQ2LCA0MTA0OSwgNDEwNTMsIAotICAgIDQxMDU3LCA0MTA2MSwgNDEwNjUsIDQxMDY5LCA0MTA3MiwgNDEwNzYsIDQxMDgwLCA0MTA4MywgNDEwODUsIDQxMDg4LCAKLSAgICA0MTA5MCwgNDEwOTQsIDQxMDk4LCA0MTEwMCwgNDExMDYsIDQxMTA5LCA0MTExNCwgNDExMTgsIDQxMTIyLCA0MTEyNCwgCi0gICAgNDExMjYsIDQxMTI4LCA0MTEzMSwgNDExMzUsIDQxMTM5LCA0MTE0MywgNDExNDcsIDQxMTUxLCA0MTE1NywgNDExNjMsIAotICAgIDQxMTY1LCA0MTE2NywgNDExNjksIDQxMTcxLCA0MTE3NCwgNDExNzYsIDQxMTgwLCA0MTE4MiwgNDExODYsIDQxMTg5LCAKLSAgICA0MTE5NSwgNDExOTksIDQxMjAzLCA0MTIwNiwgNDEyMDksIDQxMjEzLCA0MTIxOSwgNDEyMjMsIDQxMjMzLCA0MTI0MywgCi0gICAgNDEyNDcsIDQxMjUzLCA0MTI1OSwgNDEyNjIsIDQxMjY2LCA0MTI2OSwgNDEyNzQsIDQxMjc4LCA0MTI4NCwgNDEyODgsIAotICAgIDQxMzAwLCA0MTMwOCwgNDEzMTIsIDQxMzE2LCA0MTMyMiwgNDEzMjYsIDQxMzI5LCA0MTMzMSwgNDEzMzQsIDQxMzM4LCAKLSAgICA0MTM0MiwgNDEzNDksIDQxMzUzLCA0MTM1NywgNDEzNjEsIDQxMzY0LCA0MTM2OSwgNDEzNzQsIDQxMzc5LCA0MTM4NCwgCi0gICAgNDEzODksIDQxMzk0LCA0MTQwMiwgNDE0MTAsIDQxNDE0LCA0MTQxOCwgNDE0MjAsIDQxNDI1LCA0MTQyOSwgNDE0MzMsIAotICAgIDQxNDQxLCA0MTQ0OSwgNDE0NTUsIDQxNDYxLCA0MTQ3MCwgNDE0NzksIDQxNDg0LCA0MTQ4OSwgNDE0OTcsIDQxNTA1LCAKLSAgICA0MTUwNywgNDE1MDksIDQxNTE0LCA0MTUxOSwgNDE1MjUsIDQxNTMxLCA0MTUzNywgNDE1NDMsIDQxNTQ3LCA0MTU1MSwgCi0gICAgNDE1NTgsIDQxNTY1LCA0MTU3MSwgNDE1NzcsIDQxNTg3LCA0MTU5NywgNDE2MDUsIDQxNjEzLCA0MTYxNSwgNDE2MTksIAotICAgIDQxNjIzLCA0MTYyOCwgNDE2MzMsIDQxNjQwLCA0MTY0NywgNDE2NTAsIDQxNjUzLCA0MTY1NiwgNDE2NTksIDQxNjYyLCAKLSAgICA0MTY2NywgNDE2NzEsIDQxNjc2LCA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTMsIDQxNjk2LCA0MTcwMCwgCi0gICAgNDE3MDMsIDQxNzA2LCA0MTcwOSwgNDE3MTIsIDQxNzE0LCA0MTcxNiwgNDE3MTgsIDQxNzIwLCA0MTcyOCwgNDE3MzYsIAotICAgIDQxNzQyLCA0MTc0NiwgNDE3NTIsIDQxNzYyLCA0MTc2OCwgNDE3NzQsIDQxNzgwLCA0MTc4OCwgNDE3OTYsIDQxODA3LCAKLSAgICA0MTgxMSwgNDE4MTUsIDQxODE3LCA0MTgyMywgNDE4MjUsIDQxODI3LCA0MTgyOSwgNDE4MzEsIDQxODM3LCA0MTg0MCwgCi0gICAgNDE4NDYsIDQxODUyLCA0MTg1NiwgNDE4NjAsIDQxODY0LCA0MTg2NywgNDE4NzEsIDQxODc1LCA0MTg3NywgNDE4ODYsIAotICAgIDQxODk1LCA0MTkwMCwgNDE5MDUsIDQxOTExLCA0MTkxNywgNDE5MjMsIDQxOTI2LCA0MTkyOSwgNDE5MzIsIDQxOTM1LCAKLSAgICA0MTkzNywgNDE5NDIsIDQxOTQ3LCA0MTk1MiwgNDE5NTgsIDQxOTY0LCA0MTk3MiwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCi0gICAgNDE5OTgsIDQyMDA0LCA0MjAxMywgNDIwMjIsIDQyMDMxLCA0MjA0MCwgNDIwNDksIDQyMDU4LCA0MjA2NywgNDIwNzYsIAotICAgIDQyMDg1LCA0MjA5NCwgNDIxMDIsIDQyMTE0LCA0MjEyNCwgNDIxMzksIDQyMTQyLCA0MjE0NywgNDIxNTMsIDQyMTU5LCAKLSAgICA0MjE2NiwgNDIxODAsIDQyMTk1LCA0MjIwMSwgNDIyMDcsIDQyMjE0LCA0MjIyMCwgNDIyMjgsIDQyMjM0LCA0MjI0NywgCi0gICAgNDIyNjEsIDQyMjY2LCA0MjI3MiwgNDIyNzksIDQyMjgyLCA0MjI4NSwgNDIyODcsIDQyMjkwLCA0MjI5MywgNDIyOTUsIAotICAgIDQyMjk3LCA0MjMwMSwgNDIzMDQsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIDQyMzE4LCA0MjMyMywgNDIzMjgsIDQyMzMzLCAKLSAgICA0MjMzOCwgNDIzNDEsIDQyMzQzLCA0MjM0NSwgNDIzNDcsIDQyMzUxLCA0MjM1NSwgNDIzNTksIDQyMzY1LCA0MjM3MCwgCi0gICAgNDIzNzIsIDQyMzc0LCA0MjM3OSwgNDIzODQsIDQyMzg5LCA0MjM5NCwgNDIzOTksIDQyNDA0LCA0MjQwNiwgNDI0MDgsIAotICAgIDQyNDE3LCA0MjQyMSwgNDI0MjksIDQyNDM4LCA0MjQ0MCwgNDI0NDUsIDQyNDUwLCA0MjQ1OCwgNDI0NjIsIDQyNDY0LCAKLSAgICA0MjQ2OCwgNDI0NzAsIDQyNDc0LCA0MjQ3OCwgNDI0ODIsIDQyNDg0LCA0MjQ4NiwgNDI0ODgsIDQyNDk1LCA0MjUwNCwgCi0gICAgNDI1MTMsIDQyNTIyLCA0MjUzMSwgNDI1NDAsIDQyNTQ5LCA0MjU1OCwgNDI1NjcsIDQyNTc1LCA0MjU4MywgNDI1OTIsIAotICAgIDQyNjAxLCA0MjYxMCwgNDI2MTksIDQyNjI3LCA0MjYzNSwgNDI2NDQsIDQyNjUzLCA0MjY2MiwgNDI2NzIsIDQyNjgxLCAKLSAgICA0MjY5MSwgNDI3MDAsIDQyNzEwLCA0MjcxOSwgNDI3MjksIDQyNzM5LCA0Mjc0OCwgNDI3NTgsIDQyNzY3LCA0Mjc3NywgCi0gICAgNDI3ODYsIDQyNzk2LCA0MjgwNSwgNDI4MTQsIDQyODIzLCA0MjgzMiwgNDI4NDEsIDQyODUxLCA0Mjg2MCwgNDI4NjksIAotICAgIDQyODc4LCA0Mjg4OCwgNDI4OTcsIDQyOTA2LCA0MjkxNSwgNDI5MjQsIDQyOTM0LCA0Mjk0NCwgNDI5NTMsIDQyOTYyLCAKLSAgICA0Mjk3MCwgNDI5NzgsIDQyOTg1LCA0Mjk5MywgNDMwMDIsIDQzMDEzLCA0MzAyMiwgNDMwMzEsIDQzMDQwLCA0MzA0NywgCi0gICAgNDMwNTQsIDQzMDYxLCA0MzA3MCwgNDMwNzksIDQzMDg4LCA0MzA5NywgNDMxMDQsIDQzMTA5LCA0MzExOCwgNDMxMjMsIAotICAgIDQzMTI2LCA0MzEzNCwgNDMxMzcsIDQzMTQyLCA0MzE0NywgNDMxNTAsIDQzMTUzLCA0MzE2MSwgNDMxNjQsIDQzMTY5LCAKLSAgICA0MzE3MiwgNDMxNzksIDQzMTg0LCA0MzE5MiwgNDMxOTUsIDQzMTk4LCA0MzIwMSwgNDMyMDYsIDQzMjExLCA0MzIxNCwgCi0gICAgNDMyMTcsIDQzMjI1LCA0MzIyOCwgNDMyMzUsIDQzMjQyLCA0MzI0NiwgNDMyNTAsIDQzMjU1LCA0MzI2MCwgNDMyNjYsIAotICAgIDQzMjcxLCA0MzI3NywgNDMyODMsIDQzMjg4LCA0MzI5NCwgNDMzMDIsIDQzMzA4LCA0MzMxNiwgNDMzMjQsIDQzMzMwLCAKLSAgICA0MzMzOCwgNDMzNDYsIDQzMzU1LCA0MzM2MywgNDMzNjksIDQzMzc3LCA0MzM4NiwgNDMzOTQsIDQzMzk4LCA0MzQwMywgCi0gICAgNDM0MTYsIDQzNDI5LCA0MzQzMywgNDM0MzcsIDQzNDQxLCA0MzQ0NSwgNDM0NTUsIDQzNDU5LCA0MzQ2NCwgNDM0NjksIAotICAgIDQzNDc0LCA0MzQ3OSwgNDM0ODQsIDQzNDg5LCA0MzQ5OSwgNDM1MDksIDQzNTE3LCA0MzUyNywgNDM1MzcsIDQzNTQ1LCAKLSAgICA0MzU1NSwgNDM1NjUsIDQzNTczLCA0MzU4MywgNDM1OTMsIDQzNjAxLCA0MzYwOSwgNDM2MTksIDQzNjI5LCA0MzYzMiwgCi0gICAgNDM2MzUsIDQzNjM4LCA0MzY0MywgNDM2NDcsIDQzNjUzLCA0MzY2MCwgNDM2NjcsIDQzNjc1LCA0MzY4MiwgNDM2ODYsIAotICAgIDQzNjkwLCA0MzY5NCwgNDM2OTgsIDQzNzAwLCA0MzcwNCwgNDM3MDgsIDQzNzEzLCA0MzcxOCwgNDM3MjUsIDQzNzMyLCAKLSAgICA0MzczNSwgNDM3NDIsIDQzNzQ0LCA0Mzc0NiwgNDM3NTAsIDQzNzU0LCA0Mzc1OSwgNDM3NjUsIDQzNzcxLCA0Mzc3NywgCi0gICAgNDM3ODMsIDQzNzkyLCA0MzgwMSwgNDM4MTAsIDQzODE0LCA0MzgxNiwgNDM4MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQzODI3LCA0MzgzMSwgNDM4MzgsIDQzODQ1LCA0Mzg1MiwgNDM4NTksIDQzODYzLCA0Mzg2NywgCi0gICAgNDM4NzEsIDQzODc1LCA0Mzg4MCwgNDM4ODYsIDQzODkxLCA0Mzg5NywgNDM5MDMsIDQzOTA5LCA0MzkxNSwgNDM5MjMsIAotICAgIDQzOTMwLCA0MzkzNywgNDM5NDQsIDQzOTUxLCA0Mzk1NiwgNDM5NjIsIDQzOTcxLCA0Mzk3NSwgNDM5ODIsIDQzOTg2LCAKLSAgICA0Mzk5MCwgNDM5OTYsIDQ0MDAyLCA0NDAwOCwgNDQwMTQsIDQ0MDE4LCA0NDAyMiwgNDQwMjUsIDQ0MDI4LCA0NDAzMiwgCi0gICAgNDQwMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ0MDQ2LCA0NDA0OSwgNDQwNTMsIDQ0MDU3LCA0NDA2MywgNDQwNjksIDQ0MDc1LCA0NDA4MywgNDQwOTAsIAotICAgIDQ0MDk0LCA0NDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDQxMDcsIDQ0MTEwLCA0NDExMywgNDQxMTYsIDQ0MTE5LCA0NDEyMiwgNDQxMjUsIDQ0MTI4LCA0NDEzMSwgNDQxMzQsIAotICAgIDQ0MTM4LCA0NDE0MiwgNDQxNDYsIDQ0MTUwLCA0NDE1NCwgNDQxNTgsIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCAKLSAgICA0NDE3OCwgNDQxODEsIDQ0MTg0LCA0NDE4NywgNDQxOTAsIDQ0MTkzLCA0NDE5NiwgNDQxOTksIDQ0MjAyLCA0NDIwNSwgCi0gICAgNDQyMDksIDQ0MjEzLCA0NDIxNywgNDQyMjEsIDQ0MjI1LCA0NDIyOSwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIAotICAgIDQ0MjQ5LCA0NDI1NSwgNDQyNjEsIDQ0MjY3LCA0NDI3NCwgNDQyODEsIDQ0Mjg4LCA0NDI5NSwgNDQzMDIsIDQ0MzA5LCAKLSAgICA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCA0NDM3OSwgCi0gICAgNDQzODYsIDQ0MzkxLCA0NDM5NywgNDQ0MDMsIDQ0NDA5LCA0NDQxNCwgNDQ0MjAsIDQ0NDI2LCA0NDQzMiwgNDQ0MzcsIAotICAgIDQ0NDQzLCA0NDQ0OSwgNDQ0NTQsIDQ0NDU5LCA0NDQ2NSwgNDQ0NzAsIDQ0NDc2LCA0NDQ4MiwgNDQ0ODcsIDQ0NDkzLCAKLSAgICA0NDQ5OSwgNDQ1MDQsIDQ0NTEwLCA0NDUxNiwgNDQ1MjIsIDQ0NTI4LCA0NDUzNCwgNDQ1MzksIDQ0NTQ1LCA0NDU1MSwgCi0gICAgNDQ1NTcsIDQ0NTYyLCA0NDU2OCwgNDQ1NzQsIDQ0NTgwLCA0NDU4NSwgNDQ1OTEsIDQ0NTk3LCA0NDYwMiwgNDQ2MDcsIAotICAgIDQ0NjEzLCA0NDYxOCwgNDQ2MjQsIDQ0NjMwLCA0NDYzNSwgNDQ2NDEsIDQ0NjQ3LCA0NDY1MiwgNDQ2NTgsIDQ0NjY0LCAKLSAgICA0NDY3MCwgNDQ2NzYsIDQ0NjgyLCA0NDY4NywgNDQ2OTMsIDQ0Njk5LCA0NDcwNSwgNDQ3MTAsIDQ0NzE2LCA0NDcyMiwgCi0gICAgNDQ3MjgsIDQ0NzMzLCA0NDczOSwgNDQ3NDUsIDQ0NzUwLCA0NDc1NSwgNDQ3NjEsIDQ0NzY2LCA0NDc3MiwgNDQ3NzgsIAotICAgIDQ0NzgzLCA0NDc4OSwgNDQ3OTUsIDQ0ODAwLCA0NDgwNiwgNDQ4MTIsIDQ0ODE4LCA0NDgyNCwgNDQ4MzAsIDQ0ODM0LCAKLSAgICA0NDgzOSwgNDQ4NDQsIDQ0ODQ5LCA0NDg1NCwgNDQ4NTksIDQ0ODY0LCA0NDg2OSwgNDQ4NzQsIDQ0ODc5LCA0NDg4NCwgCi0gICAgNDQ4ODgsIDQ0ODkyLCA0NDg5NiwgNDQ5MDAsIDQ0OTA0LCA0NDkwOCwgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjUsIAotICAgIDQ0OTMwLCA0NDkzNSwgNDQ5NDAsIDQ0OTQ1LCA0NDk1MCwgNDQ5NTksIDQ0OTY4LCA0NDk3NywgNDQ5ODYsIDQ0OTk1LCAKLSAgICA0NTAwNCwgNDUwMTMsIDQ1MDIyLCA0NTAyOSwgNDUwMzcsIDQ1MDQ1LCA0NTA1MiwgNDUwNTksIDQ1MDY3LCA0NTA3NSwgCi0gICAgNDUwODIsIDQ1MDg5LCA0NTA5NywgNDUxMDUsIDQ1MTEyLCA0NTExOSwgNDUxMjcsIDQ1MTM1LCA0NTE0MiwgNDUxNDksIAotICAgIDQ1MTU3LCA0NTE2NiwgNDUxNzUsIDQ1MTgzLCA0NTE5MiwgNDUyMDEsIDQ1MjA4LCA0NTIxNSwgNDUyMjMsIDQ1MjMyLCAKLSAgICA0NTI0MSwgNDUyNDksIDQ1MjU4LCA0NTI2NywgNDUyNzQsIDQ1MjgxLCA0NTI5MCwgNDUyOTksIDQ1MzA3LCA0NTMxNSwgCi0gICAgNDUzMjQsIDQ1MzMzLCA0NTM0MCwgNDUzNDcsIDQ1MzU2LCA0NTM2NSwgNDUzNzMsIDQ1MzgxLCA0NTM5MCwgNDUzOTksIAotICAgIDQ1NDA2LCA0NTQxMywgNDU0MjIsIDQ1NDMxLCA0NTQzOSwgNDU0NDgsIDQ1NDU3LCA0NTQ2NSwgNDU0NzUsIDQ1NDg1LCAKLSAgICA0NTQ5NSwgNDU1MDUsIDQ1NTE0LCA0NTUyMywgNDU1MzIsIDQ1NTQxLCA0NTU0OCwgNDU1NTYsIDQ1NTY0LCA0NTU3MiwgCi0gICAgNDU1ODAsIDQ1NTg1LCA0NTU5MCwgNDU1OTksIDQ1NjA3LCA0NTYxNCwgNDU2MjMsIDQ1NjMxLCA0NTYzOCwgNDU2NDcsIAotICAgIDQ1NjU1LCA0NTY2MiwgNDU2NzEsIDQ1Njc5LCA0NTY4NiwgNDU2OTUsIDQ1NzAzLCA0NTcxMCwgNDU3MTksIDQ1NzI3LCAKLSAgICA0NTczNCwgNDU3NDMsIDQ1NzUxLCA0NTc1OCwgNDU3NjcsIDQ1Nzc1LCA0NTc4MiwgNDU3OTEsIDQ1Nzk5LCA0NTgwNiwgCi0gICAgNDU4MTUsIDQ1ODI0LCA0NTgzMywgNDU4NDIsIDQ1ODU2LCA0NTg3MCwgNDU4NzcsIDQ1ODgyLCA0NTg4NywgNDU4OTIsIAotICAgIDQ1ODk3LCA0NTkwMiwgNDU5MDcsIDQ1OTEyLCA0NTkxNywgNDU5MjUsIDQ1OTMzLCA0NTk0MSwgNDU5NDksIDQ1OTU0LCAKLSAgICA0NTk2MSwgNDU5NjgsIDQ1OTc1LCA0NTk4MCwgNDU5ODgsIDQ1OTk1LCA0NjAwMywgNDYwMDcsIDQ2MDE0LCA0NjAyMCwgCi0gICAgNDYwMjcsIDQ2MDMxLCA0NjAzNywgNDYwNDMsIDQ2MDQ5LCA0NjA1MywgNDYwNTYsIDQ2MDYwLCA0NjA2NCwgNDYwNzEsIAotICAgIDQ2MDc3LCA0NjA4MywgNDYwODksIDQ2MDk1LCA0NjEwOSwgNDYxMTksIDQ2MTMzLCA0NjE0NywgNDYxNTMsIDQ2MTYzLCAKLSAgICA0NjE3NywgNDYxODAsIDQ2MTgzLCA0NjE5MCwgNDYxOTgsIDQ2MjAzLCA0NjIwOCwgNDYyMTYsIDQ2MjI4LCA0NjI0MCwgCi0gICAgNDYyNDgsIDQ2MjUyLCA0NjI1NiwgNDYyNTksIDQ2MjYyLCA0NjI2NiwgNDYyNzAsIDQ2MjczLCA0NjI3NiwgNDYyODEsIAotICAgIDQ2Mjg2LCA0NjI5MiwgNDYyOTgsIDQ2MzAzLCA0NjMwOCwgNDYzMTQsIDQ2MzIwLCA0NjMyNSwgNDYzMzAsIDQ2MzM1LCAKLSAgICA0NjM0MCwgNDYzNDYsIDQ2MzUyLCA0NjM1NywgNDYzNjIsIDQ2MzY4LCA0NjM3NCwgNDYzNzksIDQ2Mzg0LCA0NjM4NywgCi0gICAgNDYzOTAsIDQ2Mzk5LCA0NjQwMSwgNDY0MDMsIDQ2NDA2LCA0NjQxMCwgNDY0MTYsIDQ2NDE4LCA0NjQyMSwgNDY0MjgsIAotICAgIDQ2NDM1LCA0NjQ0MywgNDY0NTEsIDQ2NDYxLCA0NjQ3NSwgNDY0ODAsIDQ2NDg1LCA0NjQ4OSwgNDY0OTQsIDQ2NTAyLCAKLSAgICA0NjUxMCwgNDY1MTksIDQ2NTI4LCA0NjUzNywgNDY1NDYsIDQ2NTUxLCA0NjU1NiwgNDY1NjIsIDQ2NTY4LCA0NjU3NCwgCi0gICAgNDY1ODAsIDQ2NTgzLCA0NjU4OSwgNDY1OTUsIDQ2NjA1LCA0NjYxNSwgNDY2MjMsIDQ2NjMxLCA0NjY0MCwgNDY2NDksIAotICAgIDQ2NjUzLCA0NjY2MSwgNDY2NjksIDQ2Njc3LCA0NjY4NSwgNDY2OTQsIDQ2NzAzLCA0NjcxMiwgNDY3MjEsIDQ2NzI2LCAKLSAgICA0NjczMSwgNDY3MzYsIDQ2NzQxLCA0Njc0NiwgNDY3NTIsIDQ2NzU4LCA0Njc2MywgNDY3NjksIDQ2NzcxLCA0Njc3MywgCi0gICAgNDY3NzUsIDQ2Nzc3LCA0Njc4MCwgNDY3ODMsIDQ2Nzg1LCA0Njc4NywgNDY3ODksIDQ2NzkzLCA0Njc5NywgNDY3OTksIAotICAgIDQ2ODAxLCA0NjgwNCwgNDY4MDcsIDQ2ODExLCA0NjgxNywgNDY4MjMsIDQ2ODI1LCA0NjgzMiwgNDY4MzYsIDQ2ODQxLCAKLSAgICA0Njg0NiwgNDY4NDgsIDQ2ODU4LCA0Njg2NCwgNDY4NzAsIDQ2ODc2LCA0Njg4MiwgNDY4ODgsIDQ2ODk0LCA0Njg5OSwgCi0gICAgNDY5MDIsIDQ2OTA1LCA0NjkwOCwgNDY5MTAsIDQ2OTEyLCA0NjkxNiwgNDY5MjAsIDQ2OTI1LCA0NjkzMCwgNDY5MzUsIAotICAgIDQ2OTM4LCA0Njk0MiwgNDY5NDcsIDQ2OTUwLCA0Njk1NCwgNDY5NTksIDQ2OTY0LCA0Njk2OSwgNDY5NzQsIDQ2OTc5LCAKLSAgICA0Njk4NCwgNDY5ODksIDQ2OTk0LCA0Njk5OSwgNDcwMDQsIDQ3MDA5LCA0NzAxNCwgNDcwMjAsIDQ3MDI2LCA0NzAzMiwgCi0gICAgNDcwMzQsIDQ3MDM3LCA0NzAzOSwgNDcwNDIsIDQ3MDQ0LCA0NzA0NiwgNDcwNDgsIDQ3MDUwLCA0NzA1MiwgNDcwNTQsIAotICAgIDQ3MDU2LCA0NzA1OCwgNDcwNjAsIDQ3MDYyLCA0NzA2NCwgNDcwNjYsIDQ3MDY4LCA0NzA3MCwgNDcwNzIsIDQ3MDc0LCAKLSAgICA0NzA3NiwgNDcwODEsIDQ3MDg2LCA0NzA5MSwgNDcwOTYsIDQ3MTAxLCA0NzEwNiwgNDcxMTEsIDQ3MTE2LCA0NzEyMSwgCi0gICAgNDcxMjYsIDQ3MTMxLCA0NzEzNiwgNDcxNDEsIDQ3MTQ2LCA0NzE1MSwgNDcxNTYsIDQ3MTYxLCA0NzE2NiwgNDcxNzEsIAotICAgIDQ3MTc2LCA0NzE4MCwgNDcxODQsIDQ3MTg4LCA0NzE5NCwgNDcyMDAsIDQ3MjA1LCA0NzIxMCwgNDcyMTUsIDQ3MjIwLCAKLSAgICA0NzIyNSwgNDcyMzAsIDQ3MjM4LCA0NzI0NiwgNDcyNTQsIDQ3MjYyLCA0NzI3MCwgNDcyNzgsIDQ3Mjg2LCA0NzI5NCwgCi0gICAgNDczMDAsIDQ3MzA1LCA0NzMxMCwgNDczMTUsIDQ3MzE4LCA0NzMyMiwgNDczMjYsIDQ3MzMwLCA0NzMzNCwgNDczMzgsIAotICAgIDQ3MzQyLCA0NzM0OSwgNDczNTYsIDQ3MzY0LCA0NzM3MiwgNDczNzcsIDQ3MzgyLCA0NzM4OSwgNDczOTYsIDQ3NDAzLCAKLSAgICA0NzQxMCwgNDc0MTMsIDQ3NDE2LCA0NzQyMSwgNDc0MjMsIDQ3NDI3LCA0NzQzMiwgNDc0MzQsIDQ3NDM2LCA0NzQzOCwgCi0gICAgNDc0NDAsIDQ3NDQ1LCA0NzQ0OCwgNDc0NTAsIDQ3NDU1LCA0NzQ2MiwgNDc0NjksIDQ3NDcyLCA0NzQ3NiwgNDc0ODEsIAotICAgIDQ3NDg2LCA0NzQ5NCwgNDc1MDAsIDQ3NTA2LCA0NzUxOCwgNDc1MjUsIDQ3NTMyLCA0NzUzNywgNDc1NDIsIDQ3NTQ4LCAKLSAgICA0NzU1MSwgNDc1NTQsIDQ3NTU5LCA0NzU2MSwgNDc1NjUsIDQ3NTY3LCA0NzU2OSwgNDc1NzEsIDQ3NTczLCA0NzU3NSwgCi0gICAgNDc1NzcsIDQ3NTgyLCA0NzU4NCwgNDc1ODYsIDQ3NTg4LCA0NzU5MCwgNDc1OTQsIDQ3NTk2LCA0NzU5OSwgNDc2MDQsIAotICAgIDQ3NjA5LCA0NzYxNCwgNDc2MTksIDQ3NjI1LCA0NzYzMSwgNDc2MzMsIDQ3NjM2LCA0NzY0MywgNDc2NTAsIDQ3NjU3LCAKLSAgICA0NzY2NCwgNDc2NjgsIDQ3NjcyLCA0NzY3NCwgNDc2NzYsIDQ3NjgwLCA0NzY4NiwgNDc2OTEsIDQ3NjkzLCA0NzY5NywgCi0gICAgNDc3MDYsIDQ3NzE0LCA0NzcyMiwgNDc3MjgsIDQ3NzM0LCA0NzczOSwgNDc3NDUsIDQ3NzUwLCA0Nzc1MywgNDc3NjcsIAotICAgIDQ3NzcwLCA0Nzc3NSwgNDc3ODAsIDQ3Nzg2LCA0Nzc5NiwgNDc3OTgsIDQ3ODA0LCA0NzgxMCwgNDc4MTQsIDQ3ODIxLCAKLSAgICA0NzgyNSwgNDc4MjcsIDQ3ODI5LCA0NzgzMywgNDc4MzksIDQ3ODQ0LCA0Nzg1MCwgNDc4NTIsIDQ3ODU4LCA0Nzg2MCwgCi0gICAgNDc4NjYsIDQ3ODY4LCA0Nzg3MCwgNDc4NzUsIDQ3ODc3LCA0Nzg4MSwgNDc4ODYsIDQ3ODg4LCA0Nzg5MywgNDc4OTgsIAotICAgIDQ3OTAyLCA0NzkwOSwgMCwgNDc5MTksIDQ3OTI1LCA0NzkyOCwgNDc5MzQsIDQ3OTM3LCA0Nzk0MiwgNDc5NDcsIDQ3OTUxLCAKLSAgICA0Nzk1MywgNDc5NTUsIDQ3OTU5LCA0Nzk2MywgNDc5NjcsIDQ3OTcxLCA0Nzk3NiwgNDc5NzgsIDQ3OTgzLCA0Nzk4NiwgCi0gICAgNDc5ODksIDQ3OTkyLCA0Nzk5NiwgNDgwMDAsIDQ4MDA1LCA0ODAwOSwgNDgwMTQsIDQ4MDE5LCA0ODAyMywgNDgwMjgsIAotICAgIDQ4MDM0LCA0ODAzNywgNDgwNDMsIDQ4MDQ4LCA0ODA1MiwgNDgwNTcsIDQ4MDYzLCA0ODA2OSwgNDgwNzYsIDQ4MDgyLCAKLSAgICA0ODA4OSwgNDgwOTYsIDQ4MDk4LCA0ODEwNSwgNDgxMDksIDQ4MTE1LCA0ODEyMSwgNDgxMjYsIDQ4MTMyLCA0ODEzNiwgCi0gICAgNDgxNDEsIDQ4MTQ0LCA0ODE0OSwgNDgxNTUsIDQ4MTYyLCA0ODE3MCwgNDgxNzcsIDQ4MTg2LCA0ODE5NiwgNDgyMDMsIAotICAgIDQ4MjA5LCA0ODIxMywgNDgyMjAsIDQ4MjI1LCA0ODIzNCwgNDgyMzcsIDQ4MjQwLCA0ODI0OSwgNDgyNTksIDQ4MjY2LCAKLSAgICA0ODI2OCwgNDgyNzQsIDQ4Mjc5LCA0ODI4MSwgNDgyODQsIDQ4Mjg4LCA0ODI5NiwgNDgzMDUsIDQ4MzA4LCA0ODMxMywgCi0gICAgNDgzMTgsIDQ4MzI2LCA0ODMzNCwgNDgzNDIsIDQ4MzUwLCA0ODM1NiwgNDgzNjIsIDQ4MzY4LCA0ODM3NiwgNDgzODEsIAotICAgIDQ4Mzg0LCA0ODM4OCwgNDgzOTEsIDQ4NDAzLCA0ODQxMywgNDg0MjQsIDQ4NDMzLCA0ODQ0NCwgNDg0NTQsIDQ4NDYzLCAKLSAgICA0ODQ2OSwgNDg0NzcsIDQ4NDgxLCA0ODQ4OSwgNDg0OTMsIDQ4NTAxLCA0ODUwOCwgNDg1MTUsIDQ4NTI0LCA0ODUzMywgCi0gICAgNDg1NDMsIDQ4NTUzLCA0ODU2MywgNDg1NzMsIDQ4NTgyLCA0ODU5MSwgNDg2MDEsIDQ4NjExLCA0ODYyMCwgNDg2MjksIAotICAgIDQ4NjM1LCA0ODY0MSwgNDg2NDcsIDQ4NjUzLCA0ODY1OSwgNDg2NjUsIDQ4NjcxLCA0ODY3NywgNDg2ODMsIDQ4NjkwLCAKLSAgICA0ODY5NiwgNDg3MDIsIDQ4NzA4LCA0ODcxNCwgNDg3MjAsIDQ4NzI2LCA0ODczMiwgNDg3MzgsIDQ4NzQ0LCA0ODc1MSwgCi0gICAgNDg3NTgsIDQ4NzY1LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgNDg4MjIsIAotICAgIDQ4ODI3LCA0ODgzMCwgNDg4MzQsIDQ4ODM4LCA0ODg0NCwgNDg4NDcsIDQ4ODUzLCA0ODg1OSwgNDg4NjQsIDQ4ODY4LCAKLSAgICA0ODg3MywgNDg4NzksIDQ4ODg2LCA0ODg4OSwgNDg4OTYsIDQ4OTAzLCA0ODkwNywgNDg5MTYsIDQ4OTI1LCA0ODkzMCwgCi0gICAgNDg5MzYsIDQ4OTQxLCA0ODk0NiwgNDg5NTMsIDQ4OTYwLCA0ODk2OCwgNDg5NzYsIDQ4OTg1LCA0ODk4OSwgNDg5OTgsIAotICAgIDQ5MDAzLCA0OTAwNywgNDkwMTQsIDQ5MDE4LCA0OTAyNSwgNDkwMzMsIDQ5MDM4LCA0OTA0NiwgNDkwNTAsIDQ5MDU1LCAKLSAgICA0OTA1OSwgNDkwNjQsIDQ5MDY4LCA0OTA3MywgNDkwNzgsIDQ5MDg3LCA0OTA4OSwgNDkwOTIsIDQ5MDk1LCA0OTEwMiwgCi0gICAgNDkxMDksIDQ5MTE0LCA0OTEyMiwgNDkxMjgsIDQ5MTM0LCA0OTEzOSwgNDkxNDIsIDQ5MTQ3LCA0OTE1MiwgNDkxNTcsIAotICAgIDQ5MTY1LCA0OTE2OSwgNDkxNzYsIDQ5MTg0LCA0OTE5MiwgNDkxOTcsIDQ5MjAyLCA0OTIwOCwgNDkyMTMsIDQ5MjE4LCAKLSAgICA0OTIyNCwgNDkyMjksIDQ5MjMyLCA0OTIzNiwgNDkyNDAsIDQ5MjQ3LCA0OTI1NiwgNDkyNjEsIDQ5MjcwLCA0OTI3OSwgCi0gICAgNDkyODUsIDQ5MjkxLCA0OTI5NiwgNDkzMDEsIDQ5MzA2LCA0OTMxMSwgNDkzMTcsIDQ5MzIzLCA0OTMzMSwgNDkzMzksIAotICAgIDQ5MzQ1LCA0OTM1MSwgNDkzNTYsIDQ5MzYxLCA0OTM2OCwgNDkzNzUsIDQ5MzgxLCA0OTM4NCwgNDkzODcsIDQ5MzkxLCAKLSAgICA0OTM5NSwgNDkzOTksIDQ5NDA0LCA0OTQxMCwgNDk0MTYsIDQ5NDIzLCA0OTQzMCwgNDk0MzUsIDQ5NDM5LCA0OTQ0MywgCi0gICAgNDk0NDcsIDQ5NDUxLCA0OTQ1NSwgNDk0NTksIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIAotICAgIDQ5NDg3LCA0OTQ5MSwgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCAKLSAgICA0OTUyNywgNDk1MzEsIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgCi0gICAgNDk1NjcsIDQ5NTcxLCA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIAotICAgIDQ5NjA3LCA0OTYxMSwgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCAKLSAgICA0OTY0NywgNDk2NTEsIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgCi0gICAgNDk2ODcsIDQ5NjkxLCA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIAotICAgIDQ5NzI3LCA0OTczMSwgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCAKLSAgICA0OTc2NywgNDk3NzEsIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgCi0gICAgNDk4MDcsIDQ5ODExLCA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIAotICAgIDQ5ODQ3LCA0OTg1MSwgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCAKLSAgICA0OTg4NywgNDk4OTEsIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgCi0gICAgNDk5MjcsIDQ5OTMxLCA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIAotICAgIDQ5OTY3LCA0OTk3MSwgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCAKLSAgICA1MDAwNywgNTAwMTEsIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgCi0gICAgNTAwNDcsIDUwMDUxLCA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIAotICAgIDUwMDg3LCA1MDA5MSwgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCAKLSAgICA1MDEyNywgNTAxMzEsIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgCi0gICAgNTAxNjcsIDUwMTcxLCA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIAotICAgIDUwMjA3LCA1MDIxMSwgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCAKLSAgICA1MDI0NywgNTAyNTEsIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgCi0gICAgNTAyODcsIDUwMjkxLCA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIAotICAgIDUwMzI3LCA1MDMzMSwgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCAKLSAgICA1MDM2NywgNTAzNzEsIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgCi0gICAgNTA0MDcsIDUwNDExLCA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIAotICAgIDUwNDQ3LCA1MDQ1MSwgNTA0NTUsIDUwNDU5LCA1MDQ2NiwgNTA0NzQsIDUwNDgwLCA1MDQ4NiwgNTA0OTMsIDUwNTAwLCAKLSAgICA1MDUwNiwgNTA1MTIsIDUwNTE4LCA1MDUyNCwgNTA1MjksIDUwNTM0LCA1MDUzOSwgNTA1NDQsIDUwNTUwLCA1MDU1NiwgCi0gICAgNTA1NjQsIDUwNTcxLCA1MDU3NywgNTA1ODMsIDUwNTkxLCA1MDYwMCwgNTA2MDcsIDUwNjE3LCA1MDYyOCwgNTA2MzEsIAotICAgIDUwNjM0LCA1MDYzOCwgNTA2NDIsIDUwNjQ5LCA1MDY1NiwgNTA2NjcsIDUwNjc4LCA1MDY4OCwgNTA2OTgsIDUwNzA1LCAKLSAgICA1MDcxMiwgNTA3MTksIDUwNzI2LCA1MDczNywgNTA3NDgsIDUwNzU5LCA1MDc3MCwgNTA3ODAsIDUwNzkwLCA1MDgwMiwgCi0gICAgNTA4MTQsIDUwODI1LCA1MDgzNiwgNTA4NDgsIDUwODYwLCA1MDg2OSwgNTA4NzksIDUwODg5LCA1MDkwMCwgNTA5MTEsIAotICAgIDUwOTE4LCA1MDkyNSwgNTA5MzIsIDUwOTM5LCA1MDk0OSwgNTA5NTksIDUwOTY3LCA1MDk3NSwgNTA5ODIsIDUwOTg5LCAKLSAgICA1MDk5NiwgNTEwMDMsIDUxMDEwLCA1MTAxNSwgNTEwMjAsIDUxMDI2LCA1MTAzNCwgNTEwNDQsIDUxMDU0LCA1MTA2NCwgCi0gICAgNTEwNzQsIDUxMDg0LCA1MTA5NCwgNTExMDQsIDUxMTE0LCA1MTEyNCwgNTExMzQsIDUxMTQ0LCA1MTE1NSwgNTExNjYsIAotICAgIDUxMTc2LCA1MTE4NiwgNTExOTcsIDUxMjA4LCA1MTIxOCwgNTEyMjgsIDUxMjM5LCA1MTI1MCwgNTEyNjAsIDUxMjcwLCAKLSAgICA1MTI4MSwgNTEyOTIsIDUxMzA4LCA1MTMyNywgNTEzNDMsIDUxMzYyLCA1MTM3OCwgNTEzOTQsIDUxNDEwLCA1MTQyNiwgCi0gICAgNTE0MzcsIDUxNDQ5LCA1MTQ2MCwgNTE0NzIsIDUxNDkxLCA1MTUxMCwgNTE1MTgsIDUxNTI0LCA1MTUzMSwgNTE1MzgsIAotICAgIDUxNTQ1LCA1MTU1MiwgNTE1NTcsIDUxNTYzLCA1MTU2OCwgNTE1NzMsIDUxNTc5LCA1MTU4NCwgNTE1ODksIDUxNTk0LCAKLSAgICA1MTU5OSwgNTE2MDQsIDUxNjExLCA1MTYxNiwgNTE2MjMsIDUxNjI4LCA1MTYzMywgNTE2MzcsIDUxNjQxLCA1MTY0OCwgCi0gICAgNTE2NTUsIDUxNjYyLCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5NiwgNTE3MDksIDUxNzIyLCA1MTczNSwgNTE3NDMsIAotICAgIDUxNzUxLCA1MTc1NywgNTE3NjMsIDUxNzcwLCA1MTc3NywgNTE3ODQsIDUxNzkxLCA1MTc5NSwgNTE4MDAsIDUxODA4LCAKLSAgICA1MTgxNiwgNTE4MjQsIDUxODMxLCA1MTgzNSwgNTE4NDMsIDUxODUxLCA1MTg1NSwgNTE4NTksIDUxODY0LCA1MTg3MSwgCi0gICAgNTE4NzksIDUxODg3LCA1MTkwNiwgNTE5MjUsIDUxOTQ0LCA1MTk2MywgNTE5ODIsIDUyMDAxLCA1MjAyMCwgNTIwMzksIAotICAgIDUyMDQ1LCA1MjA1MiwgNTIwNjEsIDUyMDY5LCA1MjA3NywgNTIwODIsIDUyMDg1LCA1MjA4OCwgNTIwOTMsIDUyMDk2LCAKLSAgICA1MjExNSwgNTIxMjIsIDUyMTI4LCA1MjEzNCwgNTIxMzgsIDUyMTQxLCA1MjE0NCwgNTIxNDcsIDUyMTU5LCA1MjE3MiwgCi0gICAgNTIxNzksIDUyMTg2LCA1MjE4OSwgNTIxOTMsIDUyMTk2LCA1MjIwMSwgNTIyMDYsIDUyMjExLCA1MjIxNywgNTIyMjYsIAotICAgIDUyMjMzLCA1MjI0MCwgNTIyNDgsIDUyMjU1LCA1MjI2MiwgNTIyNjUsIDUyMjcxLCA1MjI3NywgNTIyODAsIDUyMjgzLCAKLSAgICA1MjI4OCwgNTIyOTMsIDUyMjk5LCA1MjMwNSwgNTIzMDksIDUyMzE0LCA1MjMyMSwgNTIzMjUsIDUyMzMxLCA1MjMzNSwgCi0gICAgNTIzMzksIDUyMzQ3LCA1MjM1OSwgNTIzNjgsIDUyMzcyLCA1MjM3NCwgNTIzODMsIDUyMzkyLCA1MjM5OCwgNTI0MDEsIAotICAgIDUyNDA3LCA1MjQxMywgNTI0MTgsIDUyNDIzLCA1MjQyOCwgNTI0MzMsIDUyNDM4LCA1MjQ0MywgNTI0NDUsIDUyNDUxLCAKLSAgICA1MjQ1NiwgNTI0NjMsIDUyNDY3LCA1MjQ3MywgNTI0NzYsIDUyNDgwLCA1MjQ4NywgNTI0OTQsIDUyNDk2LCA1MjQ5OCwgCi0gICAgNTI1MDQsIDUyNTEwLCA1MjUxNiwgNTI1MjUsIDUyNTM0LCA1MjU0MSwgNTI1NDgsIDUyNTU0LCA1MjU2MCwgNTI1NjUsIAotICAgIDUyNTcwLCA1MjU3NSwgNTI1ODEsIDUyNTg3LCA1MjU5MiwgNTI1OTksIDUyNjAzLCA1MjYwNywgNTI2MjAsIDUyNjMzLCAKLSAgICA1MjY0NSwgNTI2NTQsIDUyNjYwLCA1MjY2NywgNTI2NzIsIDUyNjc3LCA1MjY4MiwgNTI2ODcsIDUyNjkyLCA1MjY5NCwgCi0gICAgNTI3MDEsIDUyNzA4LCA1MjcxNSwgNTI3MjIsIDUyNzI5LCA1MjczNywgNTI3NDMsIDUyNzQ4LCA1Mjc1NCwgNTI3NjAsIAotICAgIDUyNzY2LCA1Mjc3MywgNTI3NzksIDUyNzg3LCA1Mjc5NSwgNTI4MDMsIDUyODExLCA1MjgxOCwgNTI4MjQsIDUyODMwLCAKLSAgICA1MjgzOSwgNTI4NDMsIDUyODUyLCA1Mjg2MSwgNTI4NzAsIDUyODc4LCA1Mjg4MiwgNTI4ODgsIDUyODk1LCA1MjkwMiwgCi0gICAgNTI5MDYsIDUyOTEyLCA1MjkxOSwgNTI5MjQsIDUyOTI5LCA1MjkzNSwgNTI5NDAsIDUyOTQ1LCA1Mjk1MiwgNTI5NTksIAotICAgIDUyOTY0LCA1Mjk2OSwgNTI5NzcsIDUyOTg1LCA1Mjk5NSwgNTMwMDUsIDUzMDEyLCA1MzAxOSwgNTMwMjMsIDUzMDI3LCAKLSAgICA1MzAzOSwgNTMwNDUsIDUzMDUxLCA1MzA1NiwgNTMwNjEsIDUzMDY4LCA1MzA3NSwgNTMwODEsIDUzMDg3LCA1MzA5NiwgCi0gICAgNTMxMDQsIDUzMTEyLCA1MzExOSwgNTMxMjYsIDUzMTMzLCA1MzEzOSwgNTMxNDYsIDUzMTUyLCA1MzE1OSwgNTMxNjYsIAotICAgIDUzMTczLCA1MzE4MCwgNTMxODYsIDUzMTkxLCA1MzIwMCwgNTMyMTAsIDUzMjE3LCA1MzIyNiwgNTMyMzIsIDUzMjM3LCAKLSAgICA1MzI0MiwgNTMyNTIsIDUzMjU4LCA1MzI2NCwgNTMyNzAsIDUzMjc4LCA1MzI4MywgNTMyOTAsIDUzMjk3LCA1MzMwOCwgCi0gICAgNTMzMTUsIDUzMzIyLCA1MzMyOSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY5LCA1MzM4MSwgNTMzOTIsIAotICAgIDUzNDAzLCA1MzQxNiwgNTM0MjksIDUzNDM0LCA1MzQzOSwgNTM0NDgsIDUzNDU3LCA1MzQ2NCwgNTM0NzEsIDUzNDgwLCAKLSAgICA1MzQ4OSwgNTM0OTcsIDUzNTA1LCA1MzUxMywgNTM1MjEsIDUzNTMxLCA1MzU0MSwgNTM1NTUsIDUzNTY5LCA1MzU3NywgCi0gICAgNTM1ODUsIDUzNTk3LCA1MzYwOSwgNTM2MTcsIDUzNjI1LCA1MzYzNSwgNTM2NDUsIDUzNjUwLCA1MzY1NSwgNTM2NjQsIAotICAgIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkxLCA1MzY5NywgNTM3MDMsIDUzNzExLCA1MzcxOSwgNTM3MzIsIDUzNzQ1LCAKLSAgICA1Mzc0OSwgNTM3NTMsIDUzNzYwLCA1Mzc2NywgNTM3NzQsIDUzNzgyLCA1Mzc5MCwgNTM3OTksIDUzODA4LCA1MzgxNCwgCi0gICAgNTM4MjAsIDUzODI3LCA1MzgzNCwgNTM4NDEsIDUzODQ4LCA1Mzg1NywgNTM4NjYsIDUzODY5LCA1Mzg3MiwgNTM4NzcsIAotICAgIDUzODgyLCA1Mzg4OCwgNTM4OTQsIDUzOTAxLCA1MzkwOCwgNTM5MTgsIDUzOTI4LCA1MzkzNSwgNTM5NDIsIDUzOTUwLCAKLSAgICA1Mzk1OCwgNTM5NjYsIDUzOTc0LCA1Mzk4MiwgNTM5OTAsIDUzOTk2LCA1NDAwMiwgNTQwMDYsIDU0MDEwLCA1NDAxNywgCi0gICAgNTQwMjQsIDU0MDI5LCA1NDAzNCwgNTQwMzksIDU0MDQ0LCA1NDA1MCwgNTQwNjQsIDU0MDcxLCA1NDA3OCwgNTQwODIsIAotICAgIDU0MDg0LCA1NDA4NiwgNTQwOTEsIDU0MDk2LCA1NDEwMSwgNTQxMDYsIDU0MTE0LCA1NDEyMSwgNTQxMjgsIDU0MTM2LCAKLSAgICA1NDE0OCwgNTQxNTYsIDU0MTY0LCA1NDE3NSwgNTQxNzksIDU0MTgzLCA1NDE4OSwgNTQxOTcsIDU0MjEwLCA1NDIxNywgCi0gICAgNTQyMjQsIDU0MjMxLCA1NDIzNiwgNTQyNDMsIDU0MjUyLCA1NDI2MCwgNTQyNjYsIDU0MjcyLCA1NDI3OCwgNTQyODcsIAotICAgIDU0Mjk2LCA1NDMwNCwgNTQzMTMsIDU0MzE4LCA1NDMyMSwgNTQzMjYsIDU0MzMyLCA1NDMzOCwgNTQzNDQsIDU0MzUwLCAKLSAgICA1NDM1NCwgNTQzNTcsIDU0MzYxLCA1NDM2NSwgNTQzNzEsIDU0Mzc3LCA1NDM4MywgNTQzODksIDU0MzkzLCA1NDM5NywgCi0gICAgNTQ0MDQsIDU0NDExLCA1NDQxOCwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDksIDU0NDU5LCA1NDQ2NiwgNTQ0NzMsIAotICAgIDU0NDgxLCA1NDQ4OSwgNTQ0OTMsIDU0NDk4LCA1NDUwMywgNTQ1MDksIDU0NTE1LCA1NDUxOCwgNTQ1MjEsIDU0NTI0LCAKLSAgICA1NDUyNywgNTQ1MzEsIDU0NTM2LCA1NDU0MSwgNTQ1NDYsIDU0NTUxLCA1NDU1NiwgNTQ1NjAsIDU0NTY0LCA1NDU2OCwgCi0gICAgNTQ1NzIsIDU0NTc2LCA1NDU4MCwgNTQ1ODQsIDU0NTkwLCA1NDU5NCwgNTQ2MDAsIDU0NjA1LCA1NDYxMiwgNTQ2MjAsIAotICAgIDU0NjI3LCA1NDYzNSwgNTQ2NDIsIDU0NjUwLCA1NDY1OSwgNTQ2NjYsIDU0Njc2LCA1NDY4NywgNTQ2OTMsIDU0NzAyLCAKLSAgICA1NDcwOCwgNTQ3MTcsIDU0NzI2LCA1NDczMiwgNTQ3MzgsIDU0NzQyLCA1NDc0NiwgNTQ3NTUsIDU0NzY0LCA1NDc3MSwgCi0gICAgNTQ3NzgsIDU0Nzg3LCAwLCAwLCAwLCA1NDc5NiwgNTQ4MDEsIDU0ODA1LCA1NDgwOSwgNTQ4MTQsIDU0ODE5LCA1NDgyNCwgCi0gICAgNTQ4MzIsIDU0ODQwLCA1NDg0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyMjYsIDMyMjMzLCAzMjI0MCwgMzIyNDcsIDMyMjU0LCAKKyAgICAzMjI2MywgMzIyNzIsIDMyMjgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI5MCwgMzIyOTUsIDMyMzAwLCAzMjMwNSwgCisgICAgMzIzMTAsIDMyMzE5LCAzMjMzMCwgMzIzMzksIDMyMzUwLCAzMjM1NiwgMzIzNjksIDMyMzc1LCAzMjM4MiwgMzIzODksIAorICAgIDMyMzk0LCAzMjQwMCwgMzI0MDYsIDMyNDE3LCAzMjQyNiwgMzI0MzMsIDMyNDQwLCAzMjQ0OSwgMzI0NTYsIDMyNDY1LCAKKyAgICAzMjQ3NSwgMzI0ODUsIDMyNDkyLCAzMjQ5OSwgMzI1MDYsIDMyNTE2LCAzMjUyMSwgMzI1MjksIDMyNTM1LCAzMjU0MywgCisgICAgMzI1NTIsIDMyNTU3LCAzMjU2NCwgMzI1NzAsIDMyNTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjU4MCwgCisgICAgMzI1ODUsIDMyNTkxLCAzMjU5OCwgMzI2MDYsIDMyNjEyLCAzMjYxOCwgMzI2MjQsIDMyNjI5LCAzMjYzNiwgMzI2NDIsIAorICAgIDMyNjQ4LCAzMjY1NCwgMzI2NjIsIDMyNjY3LCAzMjY3NSwgMzI2ODAsIDMyNjg2LCAzMjY5MiwgMzI2OTksIDMyNzA3LCAKKyAgICAzMjcxNCwgMzI3MjAsIDMyNzI3LCAzMjczNCwgMzI3NDAsIDMyNzQ3LCAzMjc1NCwgMzI3NjAsIDMyNzY1LCAzMjc3MSwgCisgICAgMzI3NzksIDMyNzg3LCAzMjc5MywgMzI3OTksIDMyODA1LCAzMjgxMSwgMzI4MTksIDMyODIzLCAzMjgyOSwgMzI4MzUsIAorICAgIDMyODQxLCAzMjg0NywgMzI4NTMsIDMyODU5LCAzMjg2MywgMzI4NjgsIDMyODczLCAzMjg4MCwgMzI4ODUsIDMyODg5LCAKKyAgICAzMjg5NSwgMzI5MDAsIDMyOTA1LCAzMjkwOSwgMzI5MTQsIDMyOTE5LCAzMjkyMywgMzI5MjcsIDMyOTMyLCAzMjkzOSwgCisgICAgMzI5NDMsIDMyOTQ4LCAzMjk1MywgMzI5NTcsIDMyOTYyLCAzMjk2NiwgMzI5NzEsIDMyOTc1LCAzMjk4MSwgMzI5ODYsIAorICAgIDMyOTkzLCAzMjk5OCwgMzMwMDMsIDMzMDA3LCAzMzAxMiwgMzMwMTcsIDMzMDI0LCAzMzAyOSwgMzMwMzUsIDMzMDQwLCAKKyAgICAzMzA0NCwgMzMwNDksIDMzMDUzLCAzMzA1OCwgMzMwNjUsIDMzMDcyLCAzMzA3NywgMzMwODIsIDMzMDg2LCAzMzA5MiwgCisgICAgMzMwOTgsIDMzMTAzLCAzMzEwOCwgMzMxMTMsIDMzMTE5LCAzMzEyNCwgMzMxMzAsIDMzMTM1LCAzMzE0MSwgMzMxNDcsIAorICAgIDMzMTUzLCAzMzE2MCwgMzMxNjcsIDMzMTc0LCAzMzE4MSwgMzMxODgsIDMzMTk1LCAzMzIwMCwgMzMyMDgsIDMzMjE3LCAKKyAgICAzMzIyNiwgMzMyMzUsIDMzMjQ0LCAzMzI1MywgMzMyNjIsIDMzMjc0LCAzMzI4MywgMzMyOTIsIDMzMzAxLCAzMzMwOCwgCisgICAgMzMzMTMsIDMzMzIwLCAzMzMyOCwgMzMzMzYsIDMzMzQzLCAzMzM1MCwgMzMzNTcsIDMzMzY0LCAzMzM3MiwgMzMzODEsIAorICAgIDMzMzkwLCAzMzM5OSwgMzM0MDgsIDMzNDE3LCAzMzQyNiwgMzM0MzUsIDMzNDQ0LCAzMzQ1MywgMzM0NjIsIDMzNDcxLCAKKyAgICAzMzQ4MCwgMzM0ODksIDMzNDk4LCAzMzUwNiwgMzM1MTUsIDMzNTI2LCAzMzUzNCwgMzM1NDMsIDMzNTU0LCAzMzU2MywgCisgICAgMzM1NzIsIDMzNTgxLCAzMzU5MCwgMzM1OTgsIDMzNjA3LCAzMzYxNCwgMzM2MTksIDMzNjI3LCAzMzYzMiwgMzM2MzksIAorICAgIDMzNjQ0LCAzMzY1MywgMzM2NTksIDMzNjY2LCAzMzY3MywgMzM2NzgsIDMzNjgzLCAzMzY5MSwgMzM2OTksIDMzNzA4LCAKKyAgICAzMzcxNywgMzM3MjIsIDMzNzI5LCAzMzc0MCwgMzM3NDgsIDMzNzU3LCAzMzc2MywgMzM3NjksIDMzNzc0LCAzMzc4MSwgCisgICAgMzM3ODYsIDMzNzk1LCAzMzgwMCwgMzM4MDUsIDMzODEwLCAzMzgxNywgMzM4MjQsIDMzODI5LCAzMzgzOCwgMzM4NDYsIAorICAgIDMzODUxLCAzMzg1NiwgMzM4NjMsIDMzODcwLCAzMzg3NCwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIDMzODkwLCAKKyAgICAzMzg5MywgMzM4OTYsIDMzOTAzLCAzMzkwNiwgMzM5MDksIDMzOTE0LCAzMzkxOCwgMzM5MjIsIDMzOTI2LCAzMzkzMCwgCisgICAgMzM5MzQsIDMzOTQzLCAzMzk0OSwgMzM5NTUsIDMzOTYxLCAzMzk2OSwgMzM5NzcsIDMzOTgzLCAzMzk4OSwgMzM5OTYsIAorICAgIDM0MDAyLCAzNDAwNywgMzQwMTMsIDM0MDE5LCAzNDAyNSwgMzQwMzIsIDM0MDM4LCAzNDA0NiwgMzQwNTIsIDM0MDU5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA2NSwgMzQwNzIsIAorICAgIDM0MDc5LCAzNDA4NCwgMzQwOTMsIDM0MTAxLCAzNDEwOSwgMzQxMTYsIDM0MTIzLCAzNDEzMCwgMzQxMzcsIDM0MTQ1LCAKKyAgICAzNDE1MywgMzQxNjMsIDM0MTczLCAzNDE4MSwgMzQxODksIDM0MTk3LCAzNDIwNSwgMzQyMTQsIDM0MjIzLCAzNDIzMSwgCisgICAgMzQyMzksIDM0MjQ4LCAzNDI1NywgMzQyNjcsIDM0Mjc3LCAzNDI4NiwgMzQyOTUsIDM0MzAzLCAzNDMxMSwgMzQzMTksIAorICAgIDM0MzI3LCAzNDMzNywgMzQzNDcsIDM0MzU1LCAzNDM2MywgMzQzNzEsIDM0Mzc5LCAzNDM4NywgMzQzOTUsIDM0NDAzLCAKKyAgICAzNDQxMSwgMzQ0MTksIDM0NDI3LCAzNDQzNSwgMzQ0NDMsIDM0NDUyLCAzNDQ2MSwgMzQ0NzAsIDM0NDc5LCAzNDQ4OSwgCisgICAgMzQ0OTksIDM0NTA2LCAzNDUxMywgMzQ1MjEsIDM0NTI5LCAzNDUzOCwgMzQ1NDcsIDM0NTU1LCAzNDU2MywgMzQ1NzUsIAorICAgIDM0NTg3LCAzNDU5NiwgMzQ2MDUsIDM0NjE0LCAzNDYyMywgMzQ2MzAsIDM0NjM3LCAzNDY0NSwgMzQ2NTMsIDM0NjYxLCAKKyAgICAzNDY2OSwgMzQ2NzcsIDM0Njg1LCAzNDY5MywgMzQ3MDEsIDM0NzEwLCAzNDcxOSwgMzQ3MjgsIDM0NzM3LCAzNDc0NiwgCisgICAgMzQ3NTUsIDM0NzY1LCAzNDc3NSwgMzQ3ODUsIDM0Nzk1LCAzNDgwNCwgMzQ4MTMsIDM0ODIwLCAzNDgyNywgMzQ4MzUsIAorICAgIDM0ODQzLCAzNDg1MSwgMzQ4NTksIDM0ODY3LCAzNDg3NSwgMzQ4ODcsIDM0ODk5LCAzNDkwOCwgMzQ5MTcsIDM0OTI1LCAKKyAgICAzNDkzMywgMzQ5NDEsIDM0OTQ5LCAzNDk2MCwgMzQ5NzEsIDM0OTgyLCAzNDk5MywgMzUwMDUsIDM1MDE3LCAzNTAyNSwgCisgICAgMzUwMzMsIDM1MDQxLCAzNTA0OSwgMzUwNTgsIDM1MDY3LCAzNTA3NiwgMzUwODUsIDM1MDkzLCAzNTEwMSwgMzUxMDksIAorICAgIDM1MTE3LCAzNTEyNSwgMzUxMzMsIDM1MTQyLCAzNTE1MSwgMzUxNjEsIDM1MTcxLCAzNTE3OCwgMzUxODUsIDM1MTkzLCAKKyAgICAzNTIwMSwgMzUyMDksIDM1MjE3LCAzNTIyNCwgMzUyMzEsIDM1MjM5LCAzNTI0NywgMzUyNTUsIDM1MjYzLCAzNTI3MSwgCisgICAgMzUyNzksIDM1Mjg3LCAzNTI5NSwgMzUzMDMsIDM1MzExLCAzNTMxOSwgMzUzMjcsIDM1MzM1LCAzNTM0MywgMzUzNTEsIAorICAgIDM1MzU5LCAzNTM2OCwgMzUzNzcsIDM1Mzg2LCAzNTM5NCwgMzU0MDMsIDM1NDEyLCAzNTQyMSwgMzU0MzAsIDM1NDQwLCAKKyAgICAzNTQ0OSwgMzU0NTYsIDM1NDYxLCAzNTQ2OCwgMzU0NzUsIDM1NDgzLCAzNTQ5MSwgMzU1MDAsIDM1NTA5LCAzNTUxOSwgCisgICAgMzU1MjksIDM1NTQwLCAzNTU1MSwgMzU1NjAsIDM1NTY5LCAzNTU3OSwgMzU1ODksIDM1NTk4LCAzNTYwNywgMzU2MTcsIAorICAgIDM1NjI3LCAzNTYzOCwgMzU2NDksIDM1NjU4LCAzNTY2NywgMzU2NzcsIDM1Njg3LCAzNTY5NCwgMzU3MDEsIDM1NzA5LCAKKyAgICAzNTcxNywgMzU3MjMsIDM1NzI5LCAzNTczOCwgMzU3NDcsIDM1NzU3LCAzNTc2NywgMzU3NzgsIDM1Nzg5LCAzNTc5OCwgCisgICAgMzU4MDcsIDM1ODE3LCAzNTgyNywgMzU4MzYsIDM1ODQ1LCAzNTg1MywgMzU4NjEsIDM1ODY4LCAzNTg3NSwgMzU4ODMsIAorICAgIDM1ODkxLCAzNTkwMCwgMzU5MDksIDM1OTE5LCAzNTkyOSwgMzU5NDAsIDM1OTUxLCAzNTk2MCwgMzU5NjksIDM1OTc5LCAKKyAgICAzNTk4OSwgMzU5OTgsIDM2MDA3LCAzNjAxNywgMzYwMjcsIDM2MDM4LCAzNjA0OSwgMzYwNTgsIDM2MDY3LCAzNjA3NywgCisgICAgMzYwODcsIDM2MDk0LCAzNjEwMSwgMzYxMDksIDM2MTE3LCAzNjEyNiwgMzYxMzUsIDM2MTQ1LCAzNjE1NSwgMzYxNjYsIAorICAgIDM2MTc3LCAzNjE4NiwgMzYxOTUsIDM2MjA1LCAzNjIxNSwgMzYyMjMsIDM2MjMxLCAzNjIzOSwgMzYyNDcsIDM2MjU2LCAKKyAgICAzNjI2NSwgMzYyNzIsIDM2Mjc5LCAzNjI4NiwgMzYyOTMsIDM2MzAwLCAzNjMwNywgMzYzMTUsIDM2MzIzLCAzNjMzMSwgCisgICAgMzYzMzksIDM2MzUwLCAzNjM2MSwgMzYzNzIsIDM2MzgzLCAzNjM5NCwgMzY0MDUsIDM2NDEzLCAzNjQyMSwgMzY0MzIsIAorICAgIDM2NDQzLCAzNjQ1NCwgMzY0NjUsIDM2NDc2LCAzNjQ4NywgMzY0OTUsIDM2NTAzLCAzNjUxNCwgMzY1MjUsIDM2NTM2LCAwLCAKKyAgICAwLCAzNjU0NywgMzY1NTUsIDM2NTYzLCAzNjU3NCwgMzY1ODUsIDM2NTk2LCAwLCAwLCAzNjYwNywgMzY2MTUsIDM2NjIzLCAKKyAgICAzNjYzNCwgMzY2NDUsIDM2NjU2LCAzNjY2NywgMzY2NzgsIDM2Njg5LCAzNjY5NywgMzY3MDUsIDM2NzE2LCAzNjcyNywgCisgICAgMzY3MzgsIDM2NzQ5LCAzNjc2MCwgMzY3NzEsIDM2Nzc5LCAzNjc4NywgMzY3OTgsIDM2ODA5LCAzNjgyMCwgMzY4MzEsIAorICAgIDM2ODQyLCAzNjg1MywgMzY4NjEsIDM2ODY5LCAzNjg4MCwgMzY4OTEsIDM2OTAyLCAzNjkxMywgMzY5MjQsIDM2OTM1LCAKKyAgICAzNjk0MywgMzY5NTEsIDM2OTYyLCAzNjk3MywgMzY5ODQsIDAsIDAsIDM2OTk1LCAzNzAwMywgMzcwMTEsIDM3MDIyLCAKKyAgICAzNzAzMywgMzcwNDQsIDAsIDAsIDM3MDU1LCAzNzA2MywgMzcwNzEsIDM3MDgyLCAzNzA5MywgMzcxMDQsIDM3MTE1LCAKKyAgICAzNzEyNiwgMCwgMzcxMzcsIDAsIDM3MTQ1LCAwLCAzNzE1NiwgMCwgMzcxNjcsIDM3MTc4LCAzNzE4NiwgMzcxOTQsIAorICAgIDM3MjA1LCAzNzIxNiwgMzcyMjcsIDM3MjM4LCAzNzI0OSwgMzcyNjAsIDM3MjY4LCAzNzI3NiwgMzcyODcsIDM3Mjk4LCAKKyAgICAzNzMwOSwgMzczMjAsIDM3MzMxLCAzNzM0MiwgMzczNTAsIDM3MzU4LCAzNzM2NiwgMzczNzQsIDM3MzgyLCAzNzM5MCwgCisgICAgMzczOTgsIDM3NDA2LCAzNzQxNCwgMzc0MjIsIDM3NDMwLCAzNzQzOCwgMzc0NDYsIDAsIDAsIDM3NDU0LCAzNzQ2NSwgCisgICAgMzc0NzYsIDM3NDkwLCAzNzUwNCwgMzc1MTgsIDM3NTMyLCAzNzU0NiwgMzc1NjAsIDM3NTcxLCAzNzU4MiwgMzc1OTYsIAorICAgIDM3NjEwLCAzNzYyNCwgMzc2MzgsIDM3NjUyLCAzNzY2NiwgMzc2NzcsIDM3Njg4LCAzNzcwMiwgMzc3MTYsIDM3NzMwLCAKKyAgICAzNzc0NCwgMzc3NTgsIDM3NzcyLCAzNzc4MywgMzc3OTQsIDM3ODA4LCAzNzgyMiwgMzc4MzYsIDM3ODUwLCAzNzg2NCwgCisgICAgMzc4NzgsIDM3ODg5LCAzNzkwMCwgMzc5MTQsIDM3OTI4LCAzNzk0MiwgMzc5NTYsIDM3OTcwLCAzNzk4NCwgMzc5OTUsIAorICAgIDM4MDA2LCAzODAyMCwgMzgwMzQsIDM4MDQ4LCAzODA2MiwgMzgwNzYsIDM4MDkwLCAzODA5OCwgMzgxMDYsIDM4MTE3LCAKKyAgICAzODEyNSwgMCwgMzgxMzYsIDM4MTQ0LCAzODE1NSwgMzgxNjMsIDM4MTcxLCAzODE3OSwgMzgxODcsIDM4MTk1LCAzODE5OCwgCisgICAgMzgyMDEsIDM4MjA0LCAzODIwNywgMzgyMTMsIDM4MjI0LCAzODIzMiwgMCwgMzgyNDMsIDM4MjUxLCAzODI2MiwgMzgyNzAsIAorICAgIDM4Mjc4LCAzODI4NiwgMzgyOTQsIDM4MzAyLCAzODMwOCwgMzgzMTQsIDM4MzIwLCAzODMyOCwgMzgzMzYsIDM4MzQ3LCAwLCAKKyAgICAwLCAzODM1OCwgMzgzNjYsIDM4Mzc3LCAzODM4NSwgMzgzOTMsIDM4NDAxLCAwLCAzODQwOSwgMzg0MTUsIDM4NDIxLCAKKyAgICAzODQyNywgMzg0MzUsIDM4NDQzLCAzODQ1NCwgMzg0NjUsIDM4NDczLCAzODQ4MSwgMzg0ODksIDM4NTAwLCAzODUwOCwgCisgICAgMzg1MTYsIDM4NTI0LCAzODUzMiwgMzg1NDAsIDM4NTQ2LCAzODU1MiwgMCwgMCwgMzg1NTUsIDM4NTY2LCAzODU3NCwgMCwgCisgICAgMzg1ODUsIDM4NTkzLCAzODYwNCwgMzg2MTIsIDM4NjIwLCAzODYyOCwgMzg2MzYsIDM4NjQ0LCAzODY0NywgMCwgMzg2NTAsIAorICAgIDM4NjU0LCAzODY1OCwgMzg2NjIsIDM4NjY2LCAzODY3MCwgMzg2NzQsIDM4Njc4LCAzODY4MiwgMzg2ODYsIDM4NjkwLCAKKyAgICAzODY5NCwgMzg3MDAsIDM4NzA2LCAzODcxMiwgMzg3MTUsIDM4NzE4LCAzODcyMCwgMzg3MjQsIDM4NzI4LCAzODczMiwgCisgICAgMzg3MzYsIDM4NzM4LCAzODc0MiwgMzg3NDYsIDM4NzUyLCAzODc1OCwgMzg3NjUsIDM4NzcyLCAzODc3NywgMzg3ODIsIAorICAgIDM4Nzg4LCAzODc5NCwgMzg3OTYsIDM4Nzk5LCAzODgwMSwgMzg4MDUsIDM4ODA5LCAzODgxMywgMzg4MTYsIDM4ODIwLCAKKyAgICAzODgyNCwgMzg4MjgsIDM4ODMyLCAzODgzNiwgMzg4NDIsIDM4ODQ2LCAzODg1MCwgMzg4NTYsIDM4ODYxLCAzODg2OCwgCisgICAgMzg4NzAsIDM4ODczLCAzODg3NywgMzg4ODEsIDM4ODg2LCAzODg5MiwgMzg4OTQsIDM4OTAzLCAzODkxMiwgMzg5MTUsIAorICAgIDM4OTE5LCAzODkyMSwgMzg5MjMsIDM4OTI1LCAzODkyOCwgMzg5MzQsIDM4OTM2LCAzODk0MCwgMzg5NDQsIDM4OTUxLCAKKyAgICAzODk1OCwgMzg5NjIsIDM4OTY3LCAzODk3MiwgMzg5NzcsIDM4OTgyLCAzODk4NiwgMzg5OTAsIDM4OTkzLCAzODk5NywgCisgICAgMzkwMDEsIDM5MDA4LCAzOTAxMywgMzkwMTcsIDM5MDIxLCAzOTAyNiwgMzkwMzAsIDM5MDM0LCAzOTAzOSwgMzkwNDQsIAorICAgIDM5MDQ4LCAzOTA1MiwgMzkwNTYsIDM5MDU4LCAzOTA2MywgMzkwNjgsIDM5MDcyLCAzOTA3NiwgMzkwODAsIDM5MDg0LCAwLCAKKyAgICAzOTA4OCwgMzkwOTIsIDM5MDk2LCAzOTEwMiwgMzkxMDgsIDM5MTE0LCAzOTEyMCwgMzkxMjcsIDM5MTM0LCAzOTEzOSwgCisgICAgMzkxNDQsIDM5MTQ4LCAwLCAwLCAzOTE1NCwgMzkxNTcsIDM5MTYwLCAzOTE2MywgMzkxNjYsIDM5MTY5LCAzOTE3MiwgCisgICAgMzkxNzYsIDM5MTgwLCAzOTE4NSwgMzkxOTAsIDM5MTk1LCAzOTIwMiwgMzkyMDYsIDM5MjA5LCAzOTIxMiwgMzkyMTUsIAorICAgIDM5MjE4LCAzOTIyMSwgMzkyMjQsIDM5MjI3LCAzOTIzMCwgMzkyMzMsIDM5MjM3LCAzOTI0MSwgMzkyNDYsIDM5MjUxLCAwLCAKKyAgICAzOTI1NiwgMzkyNjIsIDM5MjY4LCAzOTI3NCwgMzkyODEsIDM5Mjg4LCAzOTI5NSwgMzkzMDIsIDM5MzA4LCAzOTMxNCwgCisgICAgMzkzMjEsIDM5MzI4LCAzOTMzNSwgMCwgMCwgMCwgMzkzNDIsIDM5MzQ1LCAzOTM0OCwgMzkzNTEsIDM5MzU2LCAzOTM1OSwgCisgICAgMzkzNjIsIDM5MzY1LCAzOTM2OCwgMzkzNzEsIDM5Mzc0LCAzOTM3OCwgMzkzODEsIDM5Mzg0LCAzOTM4NywgMzkzOTAsIAorICAgIDM5MzkzLCAzOTM5OCwgMzk0MDEsIDM5NDA0LCAzOTQwNywgMzk0MTAsIDM5NDEzLCAzOTQxOCwgMzk0MjEsIDM5NDI0LCAKKyAgICAzOTQyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzk0MzQsIDM5NDM5LCAzOTQ0NCwgMzk0NTEsIDM5NDU5LCAzOTQ2NCwgMzk0NjksIDM5NDczLCAzOTQ3NywgMzk0ODIsIAorICAgIDM5NDg5LCAzOTQ5NiwgMzk1MDAsIDM5NTA1LCAzOTUxMCwgMzk1MTUsIDM5NTIwLCAzOTUyNywgMzk1MzIsIDM5NTM3LCAKKyAgICAzOTU0MiwgMzk1NTEsIDM5NTU4LCAzOTU2NSwgMzk1NjksIDM5NTc0LCAzOTU4MCwgMzk1ODUsIDM5NTkyLCAzOTYwMSwgCisgICAgMzk2MTAsIDM5NjE0LCAzOTYxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk2MjIsIAorICAgIDM5NjI2LCAzOTYzNCwgMzk2MzgsIDM5NjQyLCAzOTY0NywgMzk2NTEsIDM5NjU1LCAzOTY1OSwgMzk2NjEsIDM5NjY1LCAKKyAgICAzOTY2OSwgMzk2NzMsIDM5Njc4LCAzOTY4MiwgMzk2ODYsIDM5Njk0LCAzOTY5NywgMzk3MDEsIDM5NzA0LCAzOTcwNywgCisgICAgMzk3MTMsIDM5NzE3LCAzOTcyMCwgMzk3MjYsIDM5NzMwLCAzOTczNCwgMzk3MzgsIDM5NzQxLCAzOTc0NSwgMzk3NDgsIAorICAgIDM5NzUyLCAzOTc1NCwgMzk3NTcsIDM5NzYwLCAzOTc2NCwgMzk3NjYsIDM5NzcwLCAzOTc3MywgMzk3NzYsIDM5NzgxLCAKKyAgICAzOTc4NiwgMzk3OTMsIDM5Nzk2LCAzOTc5OSwgMzk4MDMsIDM5ODA4LCAzOTgxMSwgMzk4MTQsIDM5ODE3LCAzOTgyMSwgCisgICAgMzk4MjYsIDM5ODI5LCAzOTgzMiwgMzk4MzQsIDM5ODM3LCAzOTg0MCwgMzk4NDMsIDM5ODQ3LCAzOTg1MiwgMzk4NTUsIAorICAgIDM5ODU5LCAzOTg2MywgMzk4NjcsIDM5ODcxLCAzOTg3NiwgMzk4ODIsIDM5ODg3LCAzOTg5MiwgMzk4OTgsIDM5OTAzLCAKKyAgICAzOTkwOCwgMzk5MTIsIDM5OTE2LCAzOTkyMSwgMzk5MjUsIDM5OTI5LCAzOTkzMiwgMzk5MzQsIDM5OTM5LCAzOTk0NSwgCisgICAgMzk5NTIsIDM5OTU5LCAzOTk2NiwgMzk5NzMsIDM5OTgwLCAzOTk4NywgMzk5OTQsIDQwMDAxLCA0MDAwOSwgNDAwMTYsIAorICAgIDQwMDI0LCA0MDAzMSwgNDAwMzgsIDQwMDQ2LCA0MDA1NCwgNDAwNTksIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc5LCAKKyAgICA0MDA4NCwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTEwLCA0MDExNiwgNDAxMjIsIDQwMTI4LCA0MDEzNSwgCisgICAgNDAxNDMsIDQwMTUwLCA0MDE1NiwgNDAxNjIsIDQwMTY4LCA0MDE3NCwgNDAxODAsIDQwMTg2LCA0MDE5MiwgNDAxOTgsIAorICAgIDQwMjA0LCA0MDIxMSwgNDAyMTgsIDQwMjI1LCA0MDIzMiwgNDAyNDAsIDQwMjQ5LCA0MDI1NywgNDAyNjgsIDQwMjc2LCAKKyAgICA0MDI4NCwgNDAyOTMsIDQwMzAwLCA0MDMwOSwgNDAzMTgsIDQwMzI2LCA0MDMzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDAzNDMsIAorICAgIDQwMzQ1LCA0MDM0OCwgNDAzNTAsIDQwMzUzLCA0MDM1NiwgNDAzNTksIDQwMzY0LCA0MDM2OSwgNDAzNzQsIDQwMzc5LCAKKyAgICA0MDM4MywgNDAzODcsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA2LCA0MDQxMSwgNDA0MTcsIDQwNDIyLCA0MDQyNywgCisgICAgNDA0MzIsIDQwNDM4LCA0MDQ0MywgNDA0NDksIDQwNDU1LCA0MDQ1OSwgNDA0NjMsIDQwNDY4LCA0MDQ3MywgNDA0NzgsIAorICAgIDQwNDgzLCA0MDQ4OCwgNDA0OTYsIDQwNTA0LCA0MDUxMiwgNDA1MjAsIDQwNTI3LCA0MDUzNSwgNDA1NDIsIDQwNTQ5LCAKKyAgICA0MDU1OCwgNDA1NzAsIDQwNTc2LCA0MDU4MiwgNDA1OTAsIDQwNTk4LCA0MDYwNywgNDA2MTYsIDQwNjI0LCA0MDYzMiwgCisgICAgNDA2NDEsIDQwNjUwLCA0MDY1NSwgNDA2NjMsIDQwNjY4LCA0MDY3MywgNDA2NzksIDQwNjg0LCA0MDY5MCwgNDA2OTcsIAorICAgIDQwNzA0LCA0MDcwOSwgNDA3MTUsIDQwNzIwLCA0MDcyMywgNDA3MjcsIDQwNzMwLCA0MDczNCwgNDA3MzgsIDQwNzQyLCAKKyAgICA0MDc0OCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc0LCA0MDc3OCwgNDA3ODIsIDQwNzg4LCA0MDc5NCwgCisgICAgNDA3OTgsIDQwODAzLCA0MDgwNywgNDA4MTIsIDQwODE3LCA0MDgyMiwgNDA4MjUsIDQwODI5LCA0MDgzMiwgNDA4MzYsIAorICAgIDQwODQzLCA0MDg1MSwgNDA4NjIsIDQwODczLCA0MDg3OCwgNDA4ODcsIDQwODk0LCA0MDkwMywgNDA5MTIsIDQwOTE2LCAKKyAgICA0MDkyMiwgNDA5MzAsIDQwOTM0LCA0MDkzOSwgNDA5NDQsIDQwOTUwLCA0MDk1NiwgNDA5NjIsIDQwOTY5LCA0MDk3MywgCisgICAgNDA5NzcsIDQwOTgyLCA0MDk4NSwgNDA5ODcsIDQwOTkxLCA0MDk5NSwgNDEwMDMsIDQxMDA3LCA0MTAwOSwgNDEwMTEsIAorICAgIDQxMDE1LCA0MTAyMywgNDEwMjgsIDQxMDM0LCA0MTA0NCwgNDEwNTEsIDQxMDU2LCA0MTA2MCwgNDEwNjQsIDQxMDY4LCAKKyAgICA0MTA3MSwgNDEwNzQsIDQxMDc3LCA0MTA4MSwgNDEwODUsIDQxMDg5LCA0MTA5MywgNDEwOTcsIDQxMTAwLCA0MTEwNCwgCisgICAgNDExMDgsIDQxMTExLCA0MTExMywgNDExMTYsIDQxMTE4LCA0MTEyMiwgNDExMjYsIDQxMTI4LCA0MTEzNCwgNDExMzcsIAorICAgIDQxMTQyLCA0MTE0NiwgNDExNTAsIDQxMTUyLCA0MTE1NCwgNDExNTYsIDQxMTU5LCA0MTE2MywgNDExNjcsIDQxMTcxLCAKKyAgICA0MTE3NSwgNDExNzksIDQxMTg1LCA0MTE5MSwgNDExOTMsIDQxMTk1LCA0MTE5NywgNDExOTksIDQxMjAyLCA0MTIwNCwgCisgICAgNDEyMDgsIDQxMjEwLCA0MTIxNCwgNDEyMTcsIDQxMjIzLCA0MTIyNywgNDEyMzEsIDQxMjM0LCA0MTIzNywgNDEyNDEsIAorICAgIDQxMjQ3LCA0MTI1MSwgNDEyNjEsIDQxMjcxLCA0MTI3NSwgNDEyODEsIDQxMjg3LCA0MTI5MCwgNDEyOTQsIDQxMjk3LCAKKyAgICA0MTMwMiwgNDEzMDYsIDQxMzEyLCA0MTMxNiwgNDEzMjgsIDQxMzM2LCA0MTM0MCwgNDEzNDQsIDQxMzUwLCA0MTM1NCwgCisgICAgNDEzNTcsIDQxMzU5LCA0MTM2MiwgNDEzNjYsIDQxMzcwLCA0MTM3NywgNDEzODEsIDQxMzg1LCA0MTM4OSwgNDEzOTIsIAorICAgIDQxMzk3LCA0MTQwMiwgNDE0MDcsIDQxNDEyLCA0MTQxNywgNDE0MjIsIDQxNDMwLCA0MTQzOCwgNDE0NDIsIDQxNDQ2LCAKKyAgICA0MTQ0OCwgNDE0NTMsIDQxNDU3LCA0MTQ2MSwgNDE0NjksIDQxNDc3LCA0MTQ4MywgNDE0ODksIDQxNDk4LCA0MTUwNywgCisgICAgNDE1MTIsIDQxNTE3LCA0MTUyNSwgNDE1MzMsIDQxNTM1LCA0MTUzNywgNDE1NDIsIDQxNTQ3LCA0MTU1MywgNDE1NTksIAorICAgIDQxNTY1LCA0MTU3MSwgNDE1NzUsIDQxNTc5LCA0MTU4NiwgNDE1OTMsIDQxNTk5LCA0MTYwNSwgNDE2MTUsIDQxNjI1LCAKKyAgICA0MTYzMywgNDE2NDEsIDQxNjQzLCA0MTY0NywgNDE2NTEsIDQxNjU2LCA0MTY2MSwgNDE2NjgsIDQxNjc1LCA0MTY3OCwgCisgICAgNDE2ODEsIDQxNjg0LCA0MTY4NywgNDE2OTAsIDQxNjk1LCA0MTY5OSwgNDE3MDQsIDQxNzA5LCA0MTcxMiwgNDE3MTUsIAorICAgIDQxNzE4LCA0MTcyMSwgNDE3MjQsIDQxNzI4LCA0MTczMSwgNDE3MzQsIDQxNzM3LCA0MTc0MCwgNDE3NDIsIDQxNzQ0LCAKKyAgICA0MTc0NiwgNDE3NDgsIDQxNzU2LCA0MTc2NCwgNDE3NzAsIDQxNzc0LCA0MTc4MCwgNDE3OTAsIDQxNzk2LCA0MTgwMiwgCisgICAgNDE4MDgsIDQxODE2LCA0MTgyNCwgNDE4MzUsIDQxODM5LCA0MTg0MywgNDE4NDUsIDQxODUxLCA0MTg1MywgNDE4NTUsIAorICAgIDQxODU3LCA0MTg1OSwgNDE4NjUsIDQxODY4LCA0MTg3NCwgNDE4ODAsIDQxODg0LCA0MTg4OCwgNDE4OTIsIDQxODk1LCAKKyAgICA0MTg5OSwgNDE5MDMsIDQxOTA1LCA0MTkxNCwgNDE5MjMsIDQxOTI4LCA0MTkzMywgNDE5MzksIDQxOTQ1LCA0MTk1MSwgCisgICAgNDE5NTQsIDQxOTU3LCA0MTk2MCwgNDE5NjMsIDQxOTY1LCA0MTk3MCwgNDE5NzUsIDQxOTgwLCA0MTk4NiwgNDE5OTIsIAorICAgIDQyMDAwLCA0MjAwOCwgNDIwMTQsIDQyMDIwLCA0MjAyNiwgNDIwMzIsIDQyMDQxLCA0MjA1MCwgNDIwNTksIDQyMDY4LCAKKyAgICA0MjA3NywgNDIwODYsIDQyMDk1LCA0MjEwNCwgNDIxMTMsIDQyMTIyLCA0MjEzMCwgNDIxNDIsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxNzAsIDQyMTc1LCA0MjE4MSwgNDIxODcsIDQyMTk0LCA0MjIwOCwgNDIyMjMsIDQyMjI5LCA0MjIzNSwgNDIyNDIsIAorICAgIDQyMjQ4LCA0MjI1NiwgNDIyNjIsIDQyMjc1LCA0MjI4OSwgNDIyOTQsIDQyMzAwLCA0MjMwNywgNDIzMTAsIDQyMzEzLCAKKyAgICA0MjMxNSwgNDIzMTgsIDQyMzIxLCA0MjMyMywgNDIzMjUsIDQyMzI5LCA0MjMzMiwgNDIzMzUsIDQyMzM4LCA0MjM0MSwgCisgICAgNDIzNDYsIDQyMzUxLCA0MjM1NiwgNDIzNjEsIDQyMzY2LCA0MjM2OSwgNDIzNzEsIDQyMzczLCA0MjM3NSwgNDIzNzksIAorICAgIDQyMzgzLCA0MjM4NywgNDIzOTMsIDQyMzk4LCA0MjQwMCwgNDI0MDIsIDQyNDA3LCA0MjQxMiwgNDI0MTcsIDQyNDIyLCAKKyAgICA0MjQyNywgNDI0MzIsIDQyNDM0LCA0MjQzNiwgNDI0NDUsIDQyNDQ5LCA0MjQ1NywgNDI0NjYsIDQyNDY4LCA0MjQ3MywgCisgICAgNDI0NzgsIDQyNDg2LCA0MjQ5MCwgNDI0OTIsIDQyNDk2LCA0MjQ5OCwgNDI1MDIsIDQyNTA2LCA0MjUxMCwgNDI1MTIsIAorICAgIDQyNTE0LCA0MjUxNiwgNDI1MjMsIDQyNTMyLCA0MjU0MSwgNDI1NTAsIDQyNTU5LCA0MjU2OCwgNDI1NzcsIDQyNTg2LCAKKyAgICA0MjU5NSwgNDI2MDMsIDQyNjExLCA0MjYyMCwgNDI2MjksIDQyNjM4LCA0MjY0NywgNDI2NTUsIDQyNjYzLCA0MjY3MiwgCisgICAgNDI2ODEsIDQyNjkwLCA0MjcwMCwgNDI3MDksIDQyNzE5LCA0MjcyOCwgNDI3MzgsIDQyNzQ3LCA0Mjc1NywgNDI3NjcsIAorICAgIDQyNzc2LCA0Mjc4NiwgNDI3OTUsIDQyODA1LCA0MjgxNCwgNDI4MjQsIDQyODMzLCA0Mjg0MiwgNDI4NTEsIDQyODYwLCAKKyAgICA0Mjg2OSwgNDI4NzksIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE2LCA0MjkyNSwgNDI5MzQsIDQyOTQzLCA0Mjk1MiwgCisgICAgNDI5NjIsIDQyOTcyLCA0Mjk4MSwgNDI5OTAsIDQyOTk4LCA0MzAwNiwgNDMwMTMsIDQzMDIxLCA0MzAzMCwgNDMwNDEsIAorICAgIDQzMDUwLCA0MzA1OSwgNDMwNjgsIDQzMDc1LCA0MzA4MiwgNDMwODksIDQzMDk4LCA0MzEwNywgNDMxMTYsIDQzMTI1LCAKKyAgICA0MzEzMiwgNDMxMzcsIDQzMTQ2LCA0MzE1MSwgNDMxNTQsIDQzMTYyLCA0MzE2NSwgNDMxNzAsIDQzMTc1LCA0MzE3OCwgCisgICAgNDMxODEsIDQzMTg5LCA0MzE5MiwgNDMxOTcsIDQzMjAwLCA0MzIwNywgNDMyMTIsIDQzMjIwLCA0MzIyMywgNDMyMjYsIAorICAgIDQzMjI5LCA0MzIzNCwgNDMyMzksIDQzMjQyLCA0MzI0NSwgNDMyNTMsIDQzMjU2LCA0MzI2MywgNDMyNzAsIDQzMjc0LCAKKyAgICA0MzI3OCwgNDMyODMsIDQzMjg4LCA0MzI5NCwgNDMyOTksIDQzMzA1LCA0MzMxMSwgNDMzMTYsIDQzMzIyLCA0MzMzMCwgCisgICAgNDMzMzYsIDQzMzQ0LCA0MzM1MiwgNDMzNTgsIDQzMzY2LCA0MzM3NCwgNDMzODMsIDQzMzkxLCA0MzM5NywgNDM0MDUsIAorICAgIDQzNDE0LCA0MzQyMiwgNDM0MjYsIDQzNDMxLCA0MzQ0NCwgNDM0NTcsIDQzNDYxLCA0MzQ2NSwgNDM0NjksIDQzNDczLCAKKyAgICA0MzQ4MywgNDM0ODcsIDQzNDkyLCA0MzQ5NywgNDM1MDIsIDQzNTA3LCA0MzUxMiwgNDM1MTcsIDQzNTI3LCA0MzUzNywgCisgICAgNDM1NDUsIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjExLCA0MzYyMSwgNDM2MjksIAorICAgIDQzNjM3LCA0MzY0NywgNDM2NTcsIDQzNjYwLCA0MzY2MywgNDM2NjYsIDQzNjcxLCA0MzY3NSwgNDM2ODEsIDQzNjg4LCAKKyAgICA0MzY5NSwgNDM3MDMsIDQzNzEwLCA0MzcxNCwgNDM3MTgsIDQzNzIyLCA0MzcyNiwgNDM3MjgsIDQzNzMyLCA0MzczNiwgCisgICAgNDM3NDEsIDQzNzQ2LCA0Mzc1MywgNDM3NjAsIDQzNzYzLCA0Mzc3MCwgNDM3NzIsIDQzNzc0LCA0Mzc3OCwgNDM3ODIsIAorICAgIDQzNzg3LCA0Mzc5MywgNDM3OTksIDQzODA1LCA0MzgxMSwgNDM4MjAsIDQzODI5LCA0MzgzOCwgNDM4NDIsIDQzODQ0LCAKKyAgICA0Mzg0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM4NTUsIDQzODU5LCA0Mzg2NiwgNDM4NzMsIAorICAgIDQzODgwLCA0Mzg4NywgNDM4OTEsIDQzODk1LCA0Mzg5OSwgNDM5MDMsIDQzOTA4LCA0MzkxNCwgNDM5MTksIDQzOTI1LCAKKyAgICA0MzkzMSwgNDM5MzcsIDQzOTQzLCA0Mzk1MSwgNDM5NTgsIDQzOTY1LCA0Mzk3MiwgNDM5NzksIDQzOTg0LCA0Mzk5MCwgCisgICAgNDM5OTksIDQ0MDAzLCA0NDAxMCwgNDQwMTQsIDQ0MDE4LCA0NDAyNCwgNDQwMzAsIDQ0MDM2LCA0NDA0MiwgNDQwNDYsIAorICAgIDQ0MDUwLCA0NDA1MywgNDQwNTYsIDQ0MDYwLCA0NDA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQwNzQsIDQ0MDc3LCA0NDA4MSwgNDQwODUsIDQ0MDkxLCAKKyAgICA0NDA5NywgNDQxMDMsIDQ0MTExLCA0NDExOCwgNDQxMjIsIDQ0MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDEzNSwgNDQxMzgsIDQ0MTQxLCA0NDE0NCwgNDQxNDcsIAorICAgIDQ0MTUwLCA0NDE1MywgNDQxNTYsIDQ0MTU5LCA0NDE2MiwgNDQxNjYsIDQ0MTcwLCA0NDE3NCwgNDQxNzgsIDQ0MTgyLCAKKyAgICA0NDE4NiwgNDQxOTAsIDQ0MTk0LCA0NDE5OCwgNDQyMDIsIDQ0MjA2LCA0NDIwOSwgNDQyMTIsIDQ0MjE1LCA0NDIxOCwgCisgICAgNDQyMjEsIDQ0MjI0LCA0NDIyNywgNDQyMzAsIDQ0MjMzLCA0NDIzNywgNDQyNDEsIDQ0MjQ1LCA0NDI0OSwgNDQyNTMsIAorICAgIDQ0MjU3LCA0NDI2MSwgNDQyNjUsIDQ0MjY5LCA0NDI3MywgNDQyNzcsIDQ0MjgzLCA0NDI4OSwgNDQyOTUsIDQ0MzAyLCAKKyAgICA0NDMwOSwgNDQzMTYsIDQ0MzIzLCA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MSwgNDQzNTgsIDQ0MzY1LCA0NDM3MiwgCisgICAgNDQzNzksIDQ0Mzg2LCA0NDM5MywgNDQ0MDAsIDQ0NDA3LCA0NDQxNCwgNDQ0MTksIDQ0NDI1LCA0NDQzMSwgNDQ0MzcsIAorICAgIDQ0NDQyLCA0NDQ0OCwgNDQ0NTQsIDQ0NDYwLCA0NDQ2NSwgNDQ0NzEsIDQ0NDc3LCA0NDQ4MiwgNDQ0ODcsIDQ0NDkzLCAKKyAgICA0NDQ5OCwgNDQ1MDQsIDQ0NTEwLCA0NDUxNSwgNDQ1MjEsIDQ0NTI3LCA0NDUzMiwgNDQ1MzgsIDQ0NTQ0LCA0NDU1MCwgCisgICAgNDQ1NTYsIDQ0NTYyLCA0NDU2NywgNDQ1NzMsIDQ0NTc5LCA0NDU4NSwgNDQ1OTAsIDQ0NTk2LCA0NDYwMiwgNDQ2MDgsIAorICAgIDQ0NjEzLCA0NDYxOSwgNDQ2MjUsIDQ0NjMwLCA0NDYzNSwgNDQ2NDEsIDQ0NjQ2LCA0NDY1MiwgNDQ2NTgsIDQ0NjYzLCAKKyAgICA0NDY2OSwgNDQ2NzUsIDQ0NjgwLCA0NDY4NiwgNDQ2OTIsIDQ0Njk4LCA0NDcwNCwgNDQ3MTAsIDQ0NzE1LCA0NDcyMSwgCisgICAgNDQ3MjcsIDQ0NzMzLCA0NDczOCwgNDQ3NDQsIDQ0NzUwLCA0NDc1NiwgNDQ3NjEsIDQ0NzY3LCA0NDc3MywgNDQ3NzgsIAorICAgIDQ0NzgzLCA0NDc4OSwgNDQ3OTQsIDQ0ODAwLCA0NDgwNiwgNDQ4MTEsIDQ0ODE3LCA0NDgyMywgNDQ4MjgsIDQ0ODM0LCAKKyAgICA0NDg0MCwgNDQ4NDYsIDQ0ODUyLCA0NDg1OCwgNDQ4NjIsIDQ0ODY3LCA0NDg3MiwgNDQ4NzcsIDQ0ODgyLCA0NDg4NywgCisgICAgNDQ4OTIsIDQ0ODk3LCA0NDkwMiwgNDQ5MDcsIDQ0OTEyLCA0NDkxNiwgNDQ5MjAsIDQ0OTI0LCA0NDkyOCwgNDQ5MzIsIAorICAgIDQ0OTM2LCA0NDk0MCwgNDQ5NDQsIDQ0OTQ4LCA0NDk1MywgNDQ5NTgsIDQ0OTYzLCA0NDk2OCwgNDQ5NzMsIDQ0OTc4LCAKKyAgICA0NDk4NywgNDQ5OTYsIDQ1MDA1LCA0NTAxNCwgNDUwMjMsIDQ1MDMyLCA0NTA0MSwgNDUwNTAsIDQ1MDU3LCA0NTA2NSwgCisgICAgNDUwNzMsIDQ1MDgwLCA0NTA4NywgNDUwOTUsIDQ1MTAzLCA0NTExMCwgNDUxMTcsIDQ1MTI1LCA0NTEzMywgNDUxNDAsIAorICAgIDQ1MTQ3LCA0NTE1NSwgNDUxNjMsIDQ1MTcwLCA0NTE3NywgNDUxODUsIDQ1MTk0LCA0NTIwMywgNDUyMTEsIDQ1MjIwLCAKKyAgICA0NTIyOSwgNDUyMzYsIDQ1MjQzLCA0NTI1MSwgNDUyNjAsIDQ1MjY5LCA0NTI3NywgNDUyODYsIDQ1Mjk1LCA0NTMwMiwgCisgICAgNDUzMDksIDQ1MzE4LCA0NTMyNywgNDUzMzUsIDQ1MzQzLCA0NTM1MiwgNDUzNjEsIDQ1MzY4LCA0NTM3NSwgNDUzODQsIAorICAgIDQ1MzkzLCA0NTQwMSwgNDU0MDksIDQ1NDE4LCA0NTQyNywgNDU0MzQsIDQ1NDQxLCA0NTQ1MCwgNDU0NTksIDQ1NDY3LCAKKyAgICA0NTQ3NiwgNDU0ODUsIDQ1NDkzLCA0NTUwMywgNDU1MTMsIDQ1NTIzLCA0NTUzMywgNDU1NDIsIDQ1NTUxLCA0NTU2MCwgCisgICAgNDU1NjksIDQ1NTc2LCA0NTU4NCwgNDU1OTIsIDQ1NjAwLCA0NTYwOCwgNDU2MTMsIDQ1NjE4LCA0NTYyNywgNDU2MzUsIAorICAgIDQ1NjQyLCA0NTY1MSwgNDU2NTksIDQ1NjY2LCA0NTY3NSwgNDU2ODMsIDQ1NjkwLCA0NTY5OSwgNDU3MDcsIDQ1NzE0LCAKKyAgICA0NTcyMywgNDU3MzEsIDQ1NzM4LCA0NTc0NywgNDU3NTUsIDQ1NzYyLCA0NTc3MSwgNDU3NzksIDQ1Nzg2LCA0NTc5NSwgCisgICAgNDU4MDMsIDQ1ODEwLCA0NTgxOSwgNDU4MjcsIDQ1ODM0LCA0NTg0MywgNDU4NTIsIDQ1ODYxLCA0NTg3MCwgNDU4ODQsIAorICAgIDQ1ODk4LCA0NTkwNSwgNDU5MTAsIDQ1OTE1LCA0NTkyMCwgNDU5MjUsIDQ1OTMwLCA0NTkzNSwgNDU5NDAsIDQ1OTQ1LCAKKyAgICA0NTk1MywgNDU5NjEsIDQ1OTY5LCA0NTk3NywgNDU5ODIsIDQ1OTg5LCA0NTk5NiwgNDYwMDMsIDQ2MDA4LCA0NjAxNiwgCisgICAgNDYwMjMsIDQ2MDMxLCA0NjAzNSwgNDYwNDIsIDQ2MDQ4LCA0NjA1NSwgNDYwNTksIDQ2MDY1LCA0NjA3MSwgNDYwNzcsIAorICAgIDQ2MDgxLCA0NjA4NCwgNDYwODgsIDQ2MDkyLCA0NjA5OSwgNDYxMDUsIDQ2MTExLCA0NjExNywgNDYxMjMsIDQ2MTM3LCAKKyAgICA0NjE0NywgNDYxNjEsIDQ2MTc1LCA0NjE4MSwgNDYxOTEsIDQ2MjA1LCA0NjIwOCwgNDYyMTEsIDQ2MjE4LCA0NjIyNiwgCisgICAgNDYyMzEsIDQ2MjM2LCA0NjI0NCwgNDYyNTYsIDQ2MjY4LCA0NjI3NiwgNDYyODAsIDQ2Mjg0LCA0NjI4NywgNDYyOTAsIAorICAgIDQ2Mjk0LCA0NjI5OCwgNDYzMDEsIDQ2MzA0LCA0NjMwOSwgNDYzMTQsIDQ2MzIwLCA0NjMyNiwgNDYzMzEsIDQ2MzM2LCAKKyAgICA0NjM0MiwgNDYzNDgsIDQ2MzUzLCA0NjM1OCwgNDYzNjMsIDQ2MzY4LCA0NjM3NCwgNDYzODAsIDQ2Mzg1LCA0NjM5MCwgCisgICAgNDYzOTYsIDQ2NDAyLCA0NjQwNywgNDY0MTIsIDQ2NDE1LCA0NjQxOCwgNDY0MjcsIDQ2NDI5LCA0NjQzMSwgNDY0MzQsIAorICAgIDQ2NDM4LCA0NjQ0NCwgNDY0NDYsIDQ2NDQ5LCA0NjQ1NiwgNDY0NjMsIDQ2NDcxLCA0NjQ3OSwgNDY0ODksIDQ2NTAzLCAKKyAgICA0NjUwOCwgNDY1MTMsIDQ2NTE3LCA0NjUyMiwgNDY1MzAsIDQ2NTM4LCA0NjU0NywgNDY1NTYsIDQ2NTY1LCA0NjU3NCwgCisgICAgNDY1NzksIDQ2NTg0LCA0NjU5MCwgNDY1OTYsIDQ2NjAyLCA0NjYwOCwgNDY2MTEsIDQ2NjE3LCA0NjYyMywgNDY2MzMsIAorICAgIDQ2NjQzLCA0NjY1MSwgNDY2NTksIDQ2NjY4LCA0NjY3NywgNDY2ODEsIDQ2Njg5LCA0NjY5NywgNDY3MDUsIDQ2NzEzLCAKKyAgICA0NjcyMiwgNDY3MzEsIDQ2NzQwLCA0Njc0OSwgNDY3NTQsIDQ2NzU5LCA0Njc2NCwgNDY3NjksIDQ2Nzc0LCA0Njc4MCwgCisgICAgNDY3ODYsIDQ2NzkxLCA0Njc5NywgNDY3OTksIDQ2ODAxLCA0NjgwMywgNDY4MDUsIDQ2ODA4LCA0NjgxMSwgNDY4MTMsIAorICAgIDQ2ODE1LCA0NjgxNywgNDY4MjEsIDQ2ODI1LCA0NjgyNywgNDY4MjksIDQ2ODMyLCA0NjgzNSwgNDY4MzksIDQ2ODQ1LCAKKyAgICA0Njg1MSwgNDY4NTMsIDQ2ODYwLCA0Njg2NCwgNDY4NjksIDQ2ODc0LCA0Njg3NiwgNDY4ODYsIDQ2ODkyLCA0Njg5OCwgCisgICAgNDY5MDQsIDQ2OTEwLCA0NjkxNiwgNDY5MjIsIDQ2OTI3LCA0NjkzMCwgNDY5MzMsIDQ2OTM2LCA0NjkzOCwgNDY5NDAsIAorICAgIDQ2OTQ0LCA0Njk0OCwgNDY5NTMsIDQ2OTU4LCA0Njk2MywgNDY5NjYsIDQ2OTcwLCA0Njk3NSwgNDY5NzgsIDQ2OTgyLCAKKyAgICA0Njk4NywgNDY5OTIsIDQ2OTk3LCA0NzAwMiwgNDcwMDcsIDQ3MDEyLCA0NzAxNywgNDcwMjIsIDQ3MDI3LCA0NzAzMiwgCisgICAgNDcwMzcsIDQ3MDQyLCA0NzA0OCwgNDcwNTQsIDQ3MDYwLCA0NzA2MiwgNDcwNjUsIDQ3MDY3LCA0NzA3MCwgNDcwNzIsIAorICAgIDQ3MDc0LCA0NzA3NiwgNDcwNzgsIDQ3MDgwLCA0NzA4MiwgNDcwODQsIDQ3MDg2LCA0NzA4OCwgNDcwOTAsIDQ3MDkyLCAKKyAgICA0NzA5NCwgNDcwOTYsIDQ3MDk4LCA0NzEwMCwgNDcxMDIsIDQ3MTA0LCA0NzEwOSwgNDcxMTQsIDQ3MTE5LCA0NzEyNCwgCisgICAgNDcxMjksIDQ3MTM0LCA0NzEzOSwgNDcxNDQsIDQ3MTQ5LCA0NzE1NCwgNDcxNTksIDQ3MTY0LCA0NzE2OSwgNDcxNzQsIAorICAgIDQ3MTc5LCA0NzE4NCwgNDcxODksIDQ3MTk0LCA0NzE5OSwgNDcyMDQsIDQ3MjA4LCA0NzIxMiwgNDcyMTYsIDQ3MjIyLCAKKyAgICA0NzIyOCwgNDcyMzMsIDQ3MjM4LCA0NzI0MywgNDcyNDgsIDQ3MjUzLCA0NzI1OCwgNDcyNjYsIDQ3Mjc0LCA0NzI4MiwgCisgICAgNDcyOTAsIDQ3Mjk4LCA0NzMwNiwgNDczMTQsIDQ3MzIyLCA0NzMyOCwgNDczMzMsIDQ3MzM4LCA0NzM0MywgNDczNDYsIAorICAgIDQ3MzUwLCA0NzM1NCwgNDczNTgsIDQ3MzYyLCA0NzM2NiwgNDczNzAsIDQ3Mzc3LCA0NzM4NCwgNDczOTIsIDQ3NDAwLCAKKyAgICA0NzQwNSwgNDc0MTAsIDQ3NDE3LCA0NzQyNCwgNDc0MzEsIDQ3NDM4LCA0NzQ0MSwgNDc0NDQsIDQ3NDQ5LCA0NzQ1MSwgCisgICAgNDc0NTUsIDQ3NDYwLCA0NzQ2MiwgNDc0NjQsIDQ3NDY2LCA0NzQ2OCwgNDc0NzMsIDQ3NDc2LCA0NzQ3OCwgNDc0ODMsIAorICAgIDQ3NDkwLCA0NzQ5NywgNDc1MDAsIDQ3NTA0LCA0NzUwOSwgNDc1MTQsIDQ3NTIyLCA0NzUyOCwgNDc1MzQsIDQ3NTQ2LCAKKyAgICA0NzU1MywgNDc1NjAsIDQ3NTY1LCA0NzU3MCwgNDc1NzYsIDQ3NTc5LCA0NzU4MiwgNDc1ODcsIDQ3NTg5LCA0NzU5MywgCisgICAgNDc1OTUsIDQ3NTk3LCA0NzU5OSwgNDc2MDEsIDQ3NjAzLCA0NzYwNSwgNDc2MTAsIDQ3NjEyLCA0NzYxNCwgNDc2MTYsIAorICAgIDQ3NjE4LCA0NzYyMiwgNDc2MjQsIDQ3NjI3LCA0NzYzMiwgNDc2MzcsIDQ3NjQyLCA0NzY0NywgNDc2NTMsIDQ3NjU5LCAKKyAgICA0NzY2MSwgNDc2NjQsIDQ3NjcxLCA0NzY3OCwgNDc2ODUsIDQ3NjkyLCA0NzY5NiwgNDc3MDAsIDQ3NzAyLCA0NzcwNCwgCisgICAgNDc3MDgsIDQ3NzE0LCA0NzcxOSwgNDc3MjEsIDQ3NzI1LCA0NzczNCwgNDc3NDIsIDQ3NzUwLCA0Nzc1NiwgNDc3NjIsIAorICAgIDQ3NzY3LCA0Nzc3MywgNDc3NzgsIDQ3NzgxLCA0Nzc5NSwgNDc3OTgsIDQ3ODAzLCA0NzgwOCwgNDc4MTQsIDQ3ODI0LCAKKyAgICA0NzgyNiwgNDc4MzIsIDQ3ODM4LCA0Nzg0MiwgNDc4NDksIDQ3ODUzLCA0Nzg1NSwgNDc4NTcsIDQ3ODYxLCA0Nzg2NywgCisgICAgNDc4NzIsIDQ3ODc4LCA0Nzg4MCwgNDc4ODYsIDQ3ODg4LCA0Nzg5NCwgNDc4OTYsIDQ3ODk4LCA0NzkwMywgNDc5MDUsIAorICAgIDQ3OTA5LCA0NzkxNCwgNDc5MTYsIDQ3OTIxLCA0NzkyNiwgNDc5MzAsIDQ3OTM3LCAwLCA0Nzk0NywgNDc5NTMsIDQ3OTU2LCAKKyAgICA0Nzk2MiwgNDc5NjUsIDQ3OTcwLCA0Nzk3NSwgNDc5NzksIDQ3OTgxLCA0Nzk4MywgNDc5ODcsIDQ3OTkxLCA0Nzk5NSwgCisgICAgNDc5OTksIDQ4MDA0LCA0ODAwNiwgNDgwMTEsIDQ4MDE0LCA0ODAxNywgNDgwMjAsIDQ4MDI0LCA0ODAyOCwgNDgwMzMsIAorICAgIDQ4MDM3LCA0ODA0MiwgNDgwNDcsIDQ4MDUxLCA0ODA1NiwgNDgwNjIsIDQ4MDY1LCA0ODA3MSwgNDgwNzYsIDQ4MDgwLCAKKyAgICA0ODA4NSwgNDgwOTEsIDQ4MDk3LCA0ODEwNCwgNDgxMTAsIDQ4MTE3LCA0ODEyNCwgNDgxMjYsIDQ4MTMzLCA0ODEzNywgCisgICAgNDgxNDMsIDQ4MTQ5LCA0ODE1NCwgNDgxNjAsIDQ4MTY0LCA0ODE2OSwgNDgxNzIsIDQ4MTc3LCA0ODE4MywgNDgxOTAsIAorICAgIDQ4MTk4LCA0ODIwNSwgNDgyMTQsIDQ4MjI0LCA0ODIzMSwgNDgyMzcsIDQ4MjQxLCA0ODI0OCwgNDgyNTMsIDQ4MjYyLCAKKyAgICA0ODI2NSwgNDgyNjgsIDQ4Mjc3LCA0ODI4NywgNDgyOTQsIDQ4Mjk2LCA0ODMwMiwgNDgzMDcsIDQ4MzA5LCA0ODMxMiwgCisgICAgNDgzMTYsIDQ4MzI0LCA0ODMzMywgNDgzMzYsIDQ4MzQxLCA0ODM0NiwgNDgzNTQsIDQ4MzYyLCA0ODM3MCwgNDgzNzgsIAorICAgIDQ4Mzg0LCA0ODM5MCwgNDgzOTYsIDQ4NDA0LCA0ODQwOSwgNDg0MTIsIDQ4NDE2LCA0ODQxOSwgNDg0MzEsIDQ4NDQxLCAKKyAgICA0ODQ1MiwgNDg0NjEsIDQ4NDcyLCA0ODQ4MiwgNDg0OTEsIDQ4NDk3LCA0ODUwNSwgNDg1MDksIDQ4NTE3LCA0ODUyMSwgCisgICAgNDg1MjksIDQ4NTM2LCA0ODU0MywgNDg1NTIsIDQ4NTYxLCA0ODU3MSwgNDg1ODEsIDQ4NTkxLCA0ODYwMSwgNDg2MTAsIAorICAgIDQ4NjE5LCA0ODYyOSwgNDg2MzksIDQ4NjQ4LCA0ODY1NywgNDg2NjMsIDQ4NjY5LCA0ODY3NSwgNDg2ODEsIDQ4Njg3LCAKKyAgICA0ODY5MywgNDg2OTksIDQ4NzA1LCA0ODcxMSwgNDg3MTgsIDQ4NzI0LCA0ODczMCwgNDg3MzYsIDQ4NzQyLCA0ODc0OCwgCisgICAgNDg3NTQsIDQ4NzYwLCA0ODc2NiwgNDg3NzIsIDQ4Nzc5LCA0ODc4NiwgNDg3OTMsIDQ4ODAwLCA0ODgwNywgNDg4MTQsIAorICAgIDQ4ODIxLCA0ODgyOCwgNDg4MzUsIDQ4ODQyLCA0ODg1MCwgNDg4NTUsIDQ4ODU4LCA0ODg2MiwgNDg4NjYsIDQ4ODcyLCAKKyAgICA0ODg3NSwgNDg4ODEsIDQ4ODg3LCA0ODg5MiwgNDg4OTYsIDQ4OTAxLCA0ODkwNywgNDg5MTQsIDQ4OTE3LCA0ODkyNCwgCisgICAgNDg5MzEsIDQ4OTM1LCA0ODk0NCwgNDg5NTMsIDQ4OTU4LCA0ODk2NCwgNDg5NjksIDQ4OTc0LCA0ODk4MSwgNDg5ODgsIAorICAgIDQ4OTk2LCA0OTAwNCwgNDkwMTMsIDQ5MDE3LCA0OTAyNiwgNDkwMzEsIDQ5MDM1LCA0OTA0MiwgNDkwNDYsIDQ5MDUzLCAKKyAgICA0OTA2MSwgNDkwNjYsIDQ5MDc0LCA0OTA3OCwgNDkwODMsIDQ5MDg3LCA0OTA5MiwgNDkwOTYsIDQ5MTAxLCA0OTEwNiwgCisgICAgNDkxMTUsIDQ5MTE3LCA0OTEyMCwgNDkxMjMsIDQ5MTMwLCA0OTEzNywgNDkxNDIsIDQ5MTUwLCA0OTE1NiwgNDkxNjIsIAorICAgIDQ5MTY3LCA0OTE3MCwgNDkxNzUsIDQ5MTgwLCA0OTE4NSwgNDkxOTMsIDQ5MTk3LCA0OTIwNCwgNDkyMTIsIDQ5MjIwLCAKKyAgICA0OTIyNSwgNDkyMzAsIDQ5MjM2LCA0OTI0MSwgNDkyNDYsIDQ5MjUyLCA0OTI1NywgNDkyNjAsIDQ5MjY0LCA0OTI2OCwgCisgICAgNDkyNzUsIDQ5Mjg0LCA0OTI4OSwgNDkyOTgsIDQ5MzA3LCA0OTMxMywgNDkzMTksIDQ5MzI0LCA0OTMyOSwgNDkzMzQsIAorICAgIDQ5MzM5LCA0OTM0NSwgNDkzNTEsIDQ5MzU5LCA0OTM2NywgNDkzNzMsIDQ5Mzc5LCA0OTM4NCwgNDkzODksIDQ5Mzk2LCAKKyAgICA0OTQwMywgNDk0MDksIDQ5NDEyLCA0OTQxNSwgNDk0MTksIDQ5NDIzLCA0OTQyNywgNDk0MzIsIDQ5NDM4LCA0OTQ0NCwgCisgICAgNDk0NTEsIDQ5NDU4LCA0OTQ2MywgNDk0NjcsIDQ5NDcxLCA0OTQ3NSwgNDk0NzksIDQ5NDgzLCA0OTQ4NywgNDk0OTEsIAorICAgIDQ5NDk1LCA0OTQ5OSwgNDk1MDMsIDQ5NTA3LCA0OTUxMSwgNDk1MTUsIDQ5NTE5LCA0OTUyMywgNDk1MjcsIDQ5NTMxLCAKKyAgICA0OTUzNSwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTEsIDQ5NTU1LCA0OTU1OSwgNDk1NjMsIDQ5NTY3LCA0OTU3MSwgCisgICAgNDk1NzUsIDQ5NTc5LCA0OTU4MywgNDk1ODcsIDQ5NTkxLCA0OTU5NSwgNDk1OTksIDQ5NjAzLCA0OTYwNywgNDk2MTEsIAorICAgIDQ5NjE1LCA0OTYxOSwgNDk2MjMsIDQ5NjI3LCA0OTYzMSwgNDk2MzUsIDQ5NjM5LCA0OTY0MywgNDk2NDcsIDQ5NjUxLCAKKyAgICA0OTY1NSwgNDk2NTksIDQ5NjYzLCA0OTY2NywgNDk2NzEsIDQ5Njc1LCA0OTY3OSwgNDk2ODMsIDQ5Njg3LCA0OTY5MSwgCisgICAgNDk2OTUsIDQ5Njk5LCA0OTcwMywgNDk3MDcsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCA0OTcyNywgNDk3MzEsIAorICAgIDQ5NzM1LCA0OTczOSwgNDk3NDMsIDQ5NzQ3LCA0OTc1MSwgNDk3NTUsIDQ5NzU5LCA0OTc2MywgNDk3NjcsIDQ5NzcxLCAKKyAgICA0OTc3NSwgNDk3NzksIDQ5NzgzLCA0OTc4NywgNDk3OTEsIDQ5Nzk1LCA0OTc5OSwgNDk4MDMsIDQ5ODA3LCA0OTgxMSwgCisgICAgNDk4MTUsIDQ5ODE5LCA0OTgyMywgNDk4MjcsIDQ5ODMxLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCA0OTg0NywgNDk4NTEsIAorICAgIDQ5ODU1LCA0OTg1OSwgNDk4NjMsIDQ5ODY3LCA0OTg3MSwgNDk4NzUsIDQ5ODc5LCA0OTg4MywgNDk4ODcsIDQ5ODkxLCAKKyAgICA0OTg5NSwgNDk4OTksIDQ5OTAzLCA0OTkwNywgNDk5MTEsIDQ5OTE1LCA0OTkxOSwgNDk5MjMsIDQ5OTI3LCA0OTkzMSwgCisgICAgNDk5MzUsIDQ5OTM5LCA0OTk0MywgNDk5NDcsIDQ5OTUxLCA0OTk1NSwgNDk5NTksIDQ5OTYzLCA0OTk2NywgNDk5NzEsIAorICAgIDQ5OTc1LCA0OTk3OSwgNDk5ODMsIDQ5OTg3LCA0OTk5MSwgNDk5OTUsIDQ5OTk5LCA1MDAwMywgNTAwMDcsIDUwMDExLCAKKyAgICA1MDAxNSwgNTAwMTksIDUwMDIzLCA1MDAyNywgNTAwMzEsIDUwMDM1LCA1MDAzOSwgNTAwNDMsIDUwMDQ3LCA1MDA1MSwgCisgICAgNTAwNTUsIDUwMDU5LCA1MDA2MywgNTAwNjcsIDUwMDcxLCA1MDA3NSwgNTAwNzksIDUwMDgzLCA1MDA4NywgNTAwOTEsIAorICAgIDUwMDk1LCA1MDA5OSwgNTAxMDMsIDUwMTA3LCA1MDExMSwgNTAxMTUsIDUwMTE5LCA1MDEyMywgNTAxMjcsIDUwMTMxLCAKKyAgICA1MDEzNSwgNTAxMzksIDUwMTQzLCA1MDE0NywgNTAxNTEsIDUwMTU1LCA1MDE1OSwgNTAxNjMsIDUwMTY3LCA1MDE3MSwgCisgICAgNTAxNzUsIDUwMTc5LCA1MDE4MywgNTAxODcsIDUwMTkxLCA1MDE5NSwgNTAxOTksIDUwMjAzLCA1MDIwNywgNTAyMTEsIAorICAgIDUwMjE1LCA1MDIxOSwgNTAyMjMsIDUwMjI3LCA1MDIzMSwgNTAyMzUsIDUwMjM5LCA1MDI0MywgNTAyNDcsIDUwMjUxLCAKKyAgICA1MDI1NSwgNTAyNTksIDUwMjYzLCA1MDI2NywgNTAyNzEsIDUwMjc1LCA1MDI3OSwgNTAyODMsIDUwMjg3LCA1MDI5MSwgCisgICAgNTAyOTUsIDUwMjk5LCA1MDMwMywgNTAzMDcsIDUwMzExLCA1MDMxNSwgNTAzMTksIDUwMzIzLCA1MDMyNywgNTAzMzEsIAorICAgIDUwMzM1LCA1MDMzOSwgNTAzNDMsIDUwMzQ3LCA1MDM1MSwgNTAzNTUsIDUwMzU5LCA1MDM2MywgNTAzNjcsIDUwMzcxLCAKKyAgICA1MDM3NSwgNTAzNzksIDUwMzgzLCA1MDM4NywgNTAzOTEsIDUwMzk1LCA1MDM5OSwgNTA0MDMsIDUwNDA3LCA1MDQxMSwgCisgICAgNTA0MTUsIDUwNDE5LCA1MDQyMywgNTA0MjcsIDUwNDMxLCA1MDQzNSwgNTA0MzksIDUwNDQzLCA1MDQ0NywgNTA0NTEsIAorICAgIDUwNDU1LCA1MDQ1OSwgNTA0NjMsIDUwNDY3LCA1MDQ3MSwgNTA0NzUsIDUwNDc5LCA1MDQ4MywgNTA0ODcsIDUwNDk0LCAKKyAgICA1MDUwMiwgNTA1MDgsIDUwNTE0LCA1MDUyMSwgNTA1MjgsIDUwNTM0LCA1MDU0MCwgNTA1NDYsIDUwNTUyLCA1MDU1NywgCisgICAgNTA1NjIsIDUwNTY3LCA1MDU3MiwgNTA1NzgsIDUwNTg0LCA1MDU5MiwgNTA1OTksIDUwNjA1LCA1MDYxMSwgNTA2MTksIAorICAgIDUwNjI4LCA1MDYzNSwgNTA2NDUsIDUwNjU2LCA1MDY1OSwgNTA2NjIsIDUwNjY2LCA1MDY3MCwgNTA2NzcsIDUwNjg0LCAKKyAgICA1MDY5NSwgNTA3MDYsIDUwNzE2LCA1MDcyNiwgNTA3MzMsIDUwNzQwLCA1MDc0NywgNTA3NTQsIDUwNzY1LCA1MDc3NiwgCisgICAgNTA3ODcsIDUwNzk4LCA1MDgwOCwgNTA4MTgsIDUwODMwLCA1MDg0MiwgNTA4NTMsIDUwODY0LCA1MDg3NiwgNTA4ODgsIAorICAgIDUwODk3LCA1MDkwNywgNTA5MTcsIDUwOTI4LCA1MDkzOSwgNTA5NDYsIDUwOTUzLCA1MDk2MCwgNTA5NjcsIDUwOTc3LCAKKyAgICA1MDk4NywgNTA5OTUsIDUxMDAzLCA1MTAxMCwgNTEwMTcsIDUxMDI0LCA1MTAzMSwgNTEwMzgsIDUxMDQzLCA1MTA0OCwgCisgICAgNTEwNTQsIDUxMDYyLCA1MTA3MiwgNTEwODIsIDUxMDkyLCA1MTEwMiwgNTExMTIsIDUxMTIyLCA1MTEzMiwgNTExNDIsIAorICAgIDUxMTUyLCA1MTE2MiwgNTExNzIsIDUxMTgzLCA1MTE5NCwgNTEyMDQsIDUxMjE0LCA1MTIyNSwgNTEyMzYsIDUxMjQ2LCAKKyAgICA1MTI1NiwgNTEyNjcsIDUxMjc4LCA1MTI4OCwgNTEyOTgsIDUxMzA5LCA1MTMyMCwgNTEzMzYsIDUxMzU1LCA1MTM3MSwgCisgICAgNTEzOTAsIDUxNDA2LCA1MTQyMiwgNTE0MzgsIDUxNDU0LCA1MTQ2NSwgNTE0NzcsIDUxNDg4LCA1MTUwMCwgNTE1MTksIAorICAgIDUxNTM4LCA1MTU0NiwgNTE1NTIsIDUxNTU5LCA1MTU2NiwgNTE1NzMsIDUxNTgwLCA1MTU4NSwgNTE1OTEsIDUxNTk2LCAKKyAgICA1MTYwMSwgNTE2MDcsIDUxNjEyLCA1MTYxNywgNTE2MjIsIDUxNjI3LCA1MTYzMiwgNTE2MzksIDUxNjQ0LCA1MTY1MSwgCisgICAgNTE2NTYsIDUxNjYxLCA1MTY2NSwgNTE2NjksIDUxNjc2LCA1MTY4MywgNTE2OTAsIDUxNjk3LCA1MTcwNCwgNTE3MTEsIAorICAgIDUxNzI0LCA1MTczNywgNTE3NTAsIDUxNzYzLCA1MTc3MSwgNTE3NzksIDUxNzg1LCA1MTc5MSwgNTE3OTgsIDUxODA1LCAKKyAgICA1MTgxMiwgNTE4MTksIDUxODIzLCA1MTgyOCwgNTE4MzYsIDUxODQ0LCA1MTg1MiwgNTE4NTksIDUxODYzLCA1MTg3MSwgCisgICAgNTE4NzksIDUxODgzLCA1MTg4NywgNTE4OTIsIDUxODk5LCA1MTkwNywgNTE5MTUsIDUxOTM0LCA1MTk1MywgNTE5NzIsIAorICAgIDUxOTkxLCA1MjAxMCwgNTIwMjksIDUyMDQ4LCA1MjA2NywgNTIwNzMsIDUyMDgwLCA1MjA4OSwgNTIwOTcsIDUyMTA1LCAKKyAgICA1MjExMCwgNTIxMTMsIDUyMTE2LCA1MjEyMSwgNTIxMjQsIDUyMTQzLCA1MjE1MCwgNTIxNTYsIDUyMTYyLCA1MjE2NiwgCisgICAgNTIxNjksIDUyMTcyLCA1MjE3NSwgNTIxODcsIDUyMjAwLCA1MjIwNywgNTIyMTQsIDUyMjE3LCA1MjIyMSwgNTIyMjQsIAorICAgIDUyMjI5LCA1MjIzNCwgNTIyMzksIDUyMjQ1LCA1MjI1NCwgNTIyNjEsIDUyMjY4LCA1MjI3NiwgNTIyODMsIDUyMjkwLCAKKyAgICA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOCwgNTIzMTEsIDUyMzE2LCA1MjMyMSwgNTIzMjcsIDUyMzMzLCA1MjMzNywgCisgICAgNTIzNDIsIDUyMzQ5LCA1MjM1MywgNTIzNTksIDUyMzYzLCA1MjM2NywgNTIzNzUsIDUyMzg3LCA1MjM5NiwgNTI0MDAsIAorICAgIDUyNDAyLCA1MjQxMSwgNTI0MjAsIDUyNDI2LCA1MjQyOSwgNTI0MzUsIDUyNDQxLCA1MjQ0NiwgNTI0NTEsIDUyNDU2LCAKKyAgICA1MjQ2MSwgNTI0NjYsIDUyNDcxLCA1MjQ3MywgNTI0NzksIDUyNDg0LCA1MjQ5MSwgNTI0OTUsIDUyNTAxLCA1MjUwNCwgCisgICAgNTI1MDgsIDUyNTE1LCA1MjUyMiwgNTI1MjQsIDUyNTI2LCA1MjUzMiwgNTI1MzgsIDUyNTQ0LCA1MjU1MywgNTI1NjIsIAorICAgIDUyNTY5LCA1MjU3NiwgNTI1ODIsIDUyNTg4LCA1MjU5MywgNTI1OTgsIDUyNjAzLCA1MjYwOSwgNTI2MTUsIDUyNjIwLCAKKyAgICA1MjYyNywgNTI2MzEsIDUyNjM1LCA1MjY0OCwgNTI2NjEsIDUyNjczLCA1MjY4MiwgNTI2ODgsIDUyNjk1LCA1MjcwMCwgCisgICAgNTI3MDUsIDUyNzEwLCA1MjcxNSwgNTI3MjAsIDUyNzIyLCA1MjcyOSwgNTI3MzYsIDUyNzQzLCA1Mjc1MCwgNTI3NTcsIAorICAgIDUyNzY1LCA1Mjc3MSwgNTI3NzYsIDUyNzgyLCA1Mjc4OCwgNTI3OTQsIDUyODAxLCA1MjgwNywgNTI4MTUsIDUyODIzLCAKKyAgICA1MjgzMSwgNTI4MzksIDUyODQ2LCA1Mjg1MiwgNTI4NTgsIDUyODY3LCA1Mjg3MSwgNTI4ODAsIDUyODg5LCA1Mjg5OCwgCisgICAgNTI5MDYsIDUyOTEwLCA1MjkxNiwgNTI5MjMsIDUyOTMwLCA1MjkzNCwgNTI5NDAsIDUyOTQ3LCA1Mjk1MiwgNTI5NTcsIAorICAgIDUyOTYzLCA1Mjk2OCwgNTI5NzMsIDUyOTgwLCA1Mjk4NywgNTI5OTIsIDUyOTk3LCA1MzAwNSwgNTMwMTMsIDUzMDIzLCAKKyAgICA1MzAzMywgNTMwNDAsIDUzMDQ3LCA1MzA1MSwgNTMwNTUsIDUzMDY3LCA1MzA3MywgNTMwNzksIDUzMDg0LCA1MzA4OSwgCisgICAgNTMwOTYsIDUzMTAzLCA1MzEwOSwgNTMxMTUsIDUzMTI0LCA1MzEzMiwgNTMxNDAsIDUzMTQ3LCA1MzE1NCwgNTMxNjEsIAorICAgIDUzMTY3LCA1MzE3NCwgNTMxODAsIDUzMTg3LCA1MzE5NCwgNTMyMDEsIDUzMjA4LCA1MzIxNCwgNTMyMTksIDUzMjI4LCAKKyAgICA1MzIzOCwgNTMyNDUsIDUzMjU0LCA1MzI2MCwgNTMyNjUsIDUzMjcwLCA1MzI4MCwgNTMyODYsIDUzMjkyLCA1MzI5OCwgCisgICAgNTMzMDYsIDUzMzExLCA1MzMxOCwgNTMzMjUsIDUzMzM2LCA1MzM0MywgNTMzNTAsIDUzMzU3LCA1MzM2NCwgNTMzNzEsIAorICAgIDUzMzc4LCA1MzM4NSwgNTMzOTcsIDUzNDA5LCA1MzQyMCwgNTM0MzEsIDUzNDQ0LCA1MzQ1NywgNTM0NjIsIDUzNDY3LCAKKyAgICA1MzQ3NiwgNTM0ODUsIDUzNDkyLCA1MzQ5OSwgNTM1MDgsIDUzNTE3LCA1MzUyNSwgNTM1MzMsIDUzNTQxLCA1MzU0OSwgCisgICAgNTM1NTksIDUzNTY5LCA1MzU4MywgNTM1OTcsIDUzNjA1LCA1MzYxMywgNTM2MjUsIDUzNjM3LCA1MzY0NSwgNTM2NTMsIAorICAgIDUzNjYzLCA1MzY3MywgNTM2NzgsIDUzNjgzLCA1MzY5MiwgNTM3MDEsIDUzNzA2LCA1MzcxMSwgNTM3MTksIDUzNzI1LCAKKyAgICA1MzczMSwgNTM3MzksIDUzNzQ3LCA1Mzc2MCwgNTM3NzMsIDUzNzc3LCA1Mzc4MSwgNTM3ODgsIDUzNzk1LCA1MzgwMiwgCisgICAgNTM4MTAsIDUzODE4LCA1MzgyNywgNTM4MzYsIDUzODQyLCA1Mzg0OCwgNTM4NTUsIDUzODYyLCA1Mzg2OSwgNTM4NzYsIAorICAgIDUzODg1LCA1Mzg5NCwgNTM4OTcsIDUzOTAwLCA1MzkwNSwgNTM5MTAsIDUzOTE2LCA1MzkyMiwgNTM5MjksIDUzOTM2LCAKKyAgICA1Mzk0NiwgNTM5NTYsIDUzOTYzLCA1Mzk3MCwgNTM5NzgsIDUzOTg2LCA1Mzk5NCwgNTQwMDIsIDU0MDEwLCA1NDAxOCwgCisgICAgNTQwMjQsIDU0MDMwLCA1NDAzNCwgNTQwMzgsIDU0MDQ1LCA1NDA1MiwgNTQwNTcsIDU0MDYyLCA1NDA2NywgNTQwNzIsIAorICAgIDU0MDc4LCA1NDA5MiwgNTQwOTksIDU0MTA2LCA1NDExMCwgNTQxMTIsIDU0MTE0LCA1NDExOSwgNTQxMjQsIDU0MTI5LCAKKyAgICA1NDEzNCwgNTQxNDIsIDU0MTQ5LCA1NDE1NiwgNTQxNjQsIDU0MTc2LCA1NDE4NCwgNTQxOTIsIDU0MjAzLCA1NDIwNywgCisgICAgNTQyMTEsIDU0MjE3LCA1NDIyNSwgNTQyMzgsIDU0MjQ1LCA1NDI1MiwgNTQyNTksIDU0MjY0LCA1NDI3MSwgNTQyODAsIAorICAgIDU0Mjg4LCA1NDI5NCwgNTQzMDAsIDU0MzA2LCA1NDMxNSwgNTQzMjQsIDU0MzMyLCA1NDM0MSwgNTQzNDYsIDU0MzQ5LCAKKyAgICA1NDM1NCwgNTQzNjAsIDU0MzY2LCA1NDM3MiwgNTQzNzgsIDU0MzgyLCA1NDM4NSwgNTQzODksIDU0MzkzLCA1NDM5OSwgCisgICAgNTQ0MDUsIDU0NDExLCA1NDQxNywgNTQ0MjEsIDU0NDI1LCA1NDQzMiwgNTQ0MzksIDU0NDQ2LCA1NDQ1MywgNTQ0NjAsIAorICAgIDU0NDY3LCA1NDQ3NywgNTQ0ODcsIDU0NDk0LCA1NDUwMSwgNTQ1MDksIDU0NTE3LCA1NDUyMSwgNTQ1MjYsIDU0NTMxLCAKKyAgICA1NDUzNywgNTQ1NDMsIDU0NTQ2LCA1NDU0OSwgNTQ1NTIsIDU0NTU1LCA1NDU1OSwgNTQ1NjQsIDU0NTY5LCA1NDU3NCwgCisgICAgNTQ1NzksIDU0NTg0LCA1NDU4OCwgNTQ1OTIsIDU0NTk2LCA1NDYwMCwgNTQ2MDQsIDU0NjA4LCA1NDYxMiwgNTQ2MTgsIAorICAgIDU0NjIyLCA1NDYyOCwgNTQ2MzMsIDU0NjQwLCA1NDY0OCwgNTQ2NTUsIDU0NjYzLCA1NDY3MCwgNTQ2NzgsIDU0Njg3LCAKKyAgICA1NDY5NCwgNTQ3MDQsIDU0NzE1LCA1NDcyMSwgNTQ3MzAsIDU0NzM2LCA1NDc0NSwgNTQ3NTQsIDU0NzYwLCA1NDc2NiwgCisgICAgNTQ3NzAsIDU0Nzc0LCA1NDc4MywgNTQ3OTIsIDU0Nzk5LCA1NDgwNiwgNTQ4MTUsIDAsIDAsIDAsIDU0ODI0LCA1NDgyOSwgCisgICAgNTQ4MzMsIDU0ODM3LCA1NDg0MiwgNTQ4NDcsIDU0ODUyLCA1NDg2MCwgNTQ4NjgsIDU0ODcxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NDg0NywgNTQ4NTIsIDU0ODU3LCA1NDg2MiwgNTQ4NjcsIDU0ODcyLCA1NDg3NywgNTQ4ODIsIAotICAgIDU0ODg3LCA1NDg5MiwgNTQ4OTcsIDU0OTAzLCA1NDkwNywgNTQ5MTIsIDU0OTE3LCA1NDkyMiwgNTQ5MjcsIDU0OTMyLCAKLSAgICA1NDkzNywgNTQ5NDIsIDU0OTQ3LCA1NDk1MiwgNTQ5NTcsIDU0OTYyLCA1NDk2NywgNTQ5NzIsIDU0OTc3LCA1NDk4MiwgCi0gICAgNTQ5ODcsIDU0OTkyLCA1NDk5NywgNTUwMDIsIDU1MDA3LCA1NTAxMiwgNTUwMTcsIDU1MDIzLCA1NTAyOCwgNTUwMzQsIAotICAgIDU1MDQzLCA1NTA0OCwgNTUwNTYsIDU1MDYzLCA1NTA3MiwgNTUwNzcsIDU1MDgyLCA1NTA4NywgNTUwOTMsIDAsIDU1MTAwLCAKLSAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMCwgNTUxMjUsIDU1MTMwLCA1NTEzNSwgNTUxNDAsIDU1MTQ1LCA1NTE1MCwgCi0gICAgNTUxNTYsIDU1MTYwLCA1NTE2NSwgNTUxNzAsIDU1MTc1LCA1NTE4MCwgNTUxODUsIDU1MTkwLCA1NTE5NSwgNTUyMDAsIAotICAgIDU1MjA1LCA1NTIxMCwgNTUyMTUsIDU1MjIwLCA1NTIyNSwgNTUyMzAsIDU1MjM1LCA1NTI0MCwgNTUyNDUsIDU1MjUwLCAKLSAgICA1NTI1NSwgNTUyNjAsIDU1MjY1LCA1NTI3MCwgNTUyNzYsIDU1MjgxLCA1NTI4NywgNTUyOTYsIDU1MzAxLCA1NTMwOSwgCi0gICAgNTUzMTYsIDU1MzI1LCA1NTMzMCwgNTUzMzUsIDU1MzQwLCA1NTM0NiwgMCwgNTUzNTMsIDU1MzYxLCA1NTM2OSwgNTUzNzgsIAotICAgIDU1Mzg1LCA1NTM5MywgNTUzOTksIDU1NDA4LCA1NTQxNiwgNTU0MjQsIDU1NDMyLCA1NTQ0MCwgNTU0NDgsIDU1NDU2LCAKLSAgICA1NTQ2MSwgNTU0NjgsIDU1NDc0LCA1NTQ4MSwgNTU0ODksIDU1NDk2LCA1NTUwMywgNTU1MTEsIDU1NTE3LCA1NTUyMywgCi0gICAgNTU1MzAsIDU1NTM3LCA1NTU0NywgNTU1NTcsIDU1NTY0LCA1NTU3MSwgNTU1NzYsIDU1NTg2LCA1NTU5NiwgNTU2MDEsIAotICAgIDU1NjA2LCA1NTYxMSwgNTU2MTYsIDU1NjIxLCA1NTYyNiwgNTU2MzEsIDU1NjM2LCA1NTY0MSwgNTU2NDYsIDU1NjUxLCAKLSAgICA1NTY1NiwgNTU2NjEsIDU1NjY2LCA1NTY3MSwgNTU2NzYsIDU1NjgxLCA1NTY4NiwgNTU2OTEsIDU1Njk2LCA1NTcwMSwgCi0gICAgNTU3MDYsIDU1NzExLCA1NTcxNiwgNTU3MjEsIDU1NzI2LCA1NTczMSwgNTU3MzYsIDU1NzQxLCA1NTc0NiwgNTU3NTAsIAotICAgIDU1NzU0LCA1NTc1OSwgNTU3NjQsIDU1NzY5LCA1NTc3NCwgNTU3NzksIDU1Nzg0LCA1NTc4OSwgNTU3OTQsIDU1Nzk5LCAKLSAgICA1NTgwNCwgNTU4MDksIDU1ODE0LCA1NTgxOSwgNTU4MjQsIDU1ODI5LCA1NTgzNCwgNTU4MzksIDU1ODQ0LCA1NTg1MSwgCi0gICAgNTU4NTgsIDU1ODY1LCA1NTg3MiwgNTU4NzksIDU1ODg2LCA1NTg5MywgNTU5MDAsIDU1OTA3LCA1NTkxNCwgNTU5MjEsIAotICAgIDU1OTI4LCA1NTkzNSwgNTU5NDIsIDU1OTQ3LCA1NTk1MiwgNTU5NTksIDU1OTY2LCA1NTk3MywgNTU5ODAsIDU1OTg3LCAKLSAgICA1NTk5NCwgNTYwMDEsIDU2MDA4LCA1NjAxNSwgNTYwMjIsIDU2MDI5LCA1NjAzNiwgNTYwNDIsIDU2MDQ4LCA1NjA1NCwgCi0gICAgNTYwNjAsIDU2MDY3LCA1NjA3NCwgNTYwODEsIDU2MDg4LCA1NjA5NSwgNTYxMDIsIDU2MTA5LCA1NjExNiwgNTYxMjMsIAotICAgIDU2MTMwLCA1NjEzOCwgNTYxNDYsIDU2MTU0LCA1NjE2MiwgNTYxNzAsIDU2MTc4LCA1NjE4NiwgNTYxOTQsIDU2MTk4LCAKLSAgICA1NjIwNCwgNTYyMTAsIDU2MjE0LCA1NjIyMCwgNTYyMjYsIDU2MjMyLCA1NjIzOSwgNTYyNDYsIDU2MjUzLCA1NjI2MCwgCi0gICAgNTYyNjUsIDU2MjcxLCA1NjI3NywgNTYyODQsIDAsIDAsIDAsIDAsIDAsIDU2MjkxLCA1NjI5OSwgNTYzMDgsIDU2MzE3LCAKLSAgICA1NjMyNSwgNTYzMzEsIDU2MzM2LCA1NjM0MSwgNTYzNDYsIDU2MzUxLCA1NjM1NiwgNTYzNjEsIDU2MzY2LCA1NjM3MSwgCi0gICAgNTYzNzYsIDU2MzgxLCA1NjM4NiwgNTYzOTEsIDU2Mzk2LCA1NjQwMSwgNTY0MDYsIDU2NDExLCA1NjQxNiwgNTY0MjEsIAotICAgIDU2NDI2LCA1NjQzMSwgNTY0MzYsIDU2NDQxLCA1NjQ0NiwgNTY0NTEsIDU2NDU2LCA1NjQ2MSwgNTY0NjYsIDU2NDcxLCAKLSAgICA1NjQ3NiwgNTY0ODEsIDU2NDg2LCA1NjQ5MSwgNTY0OTYsIDU2NTAxLCA1NjUwNiwgNTY1MTEsIDU2NTE2LCA1NjUyMSwgCi0gICAgNTY1MjYsIDAsIDU2NTMxLCAwLCAwLCAwLCAwLCAwLCA1NjUzNiwgMCwgMCwgNTY1NDEsIDU2NTQ1LCA1NjU1MCwgNTY1NTUsIAotICAgIDU2NTYwLCA1NjU2NSwgNTY1NzQsIDU2NTc5LCA1NjU4NCwgNTY1ODksIDU2NTk0LCA1NjU5OSwgNTY2MDQsIDU2NjA5LCAKLSAgICA1NjYxNCwgNTY2MjEsIDU2NjI2LCA1NjYzMSwgNTY2NDAsIDU2NjQ3LCA1NjY1MiwgNTY2NTcsIDU2NjYyLCA1NjY2OSwgCi0gICAgNTY2NzQsIDU2NjgxLCA1NjY4NiwgNTY2OTEsIDU2Njk4LCA1NjcwNSwgNTY3MTAsIDU2NzE1LCA1NjcyMCwgNTY3MjcsIAotICAgIDU2NzM0LCA1NjczOSwgNTY3NDQsIDU2NzQ5LCA1Njc1NCwgNTY3NTksIDU2NzY2LCA1Njc3MywgNTY3NzgsIDU2NzgzLCAKLSAgICA1Njc4OCwgNTY3OTMsIDU2Nzk4LCA1NjgwMywgNTY4MDgsIDU2ODEzLCA1NjgxOCwgNTY4MjMsIDU2ODI4LCA1NjgzNSwgCi0gICAgNTY4NDAsIDU2ODQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njg1MCwgNTY4NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODYyLCA1Njg2NywgNTY4NzEsIDU2ODc1LCA1Njg3OSwgNTY4ODMsIDU2ODg3LCA1Njg5MSwgCi0gICAgNTY4OTUsIDU2ODk5LCA1NjkwMywgNTY5MDcsIDU2OTEzLCA1NjkxNywgNTY5MjEsIDU2OTI1LCA1NjkyOSwgNTY5MzMsIAotICAgIDU2OTM3LCA1Njk0MSwgNTY5NDUsIDU2OTQ5LCA1Njk1MywgNTY5NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU2OTYxLCA1Njk2NSwgNTY5NjksIDU2OTczLCA1Njk3NywgNTY5ODEsIDU2OTg1LCAwLCA1Njk4OSwgNTY5OTMsIDU2OTk3LCAKLSAgICA1NzAwMSwgNTcwMDUsIDU3MDA5LCA1NzAxMywgMCwgNTcwMTcsIDU3MDIxLCA1NzAyNSwgNTcwMjksIDU3MDMzLCA1NzAzNywgCi0gICAgNTcwNDEsIDAsIDU3MDQ1LCA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCAwLCA1NzA3MywgCi0gICAgNTcwNzcsIDU3MDgxLCA1NzA4NSwgNTcwODksIDU3MDkzLCA1NzA5NywgMCwgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIAotICAgIDU3MTE3LCA1NzEyMSwgNTcxMjUsIDAsIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCAKLSAgICAwLCA1NzE1NywgNTcxNjEsIDU3MTY1LCA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgMCwgNTcxODUsIDU3MTkwLCAKLSAgICA1NzE5NSwgNTcyMDAsIDU3MjA1LCA1NzIxMCwgNTcyMTUsIDU3MjE5LCA1NzIyNCwgNTcyMjksIDU3MjM0LCA1NzIzOCwgCi0gICAgNTcyNDMsIDU3MjQ4LCA1NzI1MywgNTcyNTgsIDU3MjYyLCA1NzI2NywgNTcyNzIsIDU3Mjc3LCA1NzI4MiwgNTcyODcsIAotICAgIDU3MjkyLCA1NzI5NiwgNTczMDEsIDU3MzA2LCA1NzMxMywgNTczMTgsIDU3MzIzLCA1NzMyOSwgNTczMzYsIDU3MzQzLCAKLSAgICA1NzM1MiwgNTczNTksIDU3MzY4LCA1NzM3MiwgNTczNzYsIDU3MzgyLCA1NzM4OCwgNTczOTQsIDU3NDAyLCA1NzQwOCwgCi0gICAgNTc0MTIsIDU3NDE2LCA1NzQyMCwgNTc0MjYsIDU3NDMyLCA1NzQzNiwgNTc0MzgsIDU3NDQyLCA1NzQ0OCwgNTc0NTAsIAotICAgIDU3NDU0LCA1NzQ1OCwgNTc0NjIsIDU3NDY4LCA1NzQ3MywgNTc0NzcsIDU3NDgxLCA1NzQ4NiwgNTc0OTIsIDU3NDk3LCAKLSAgICA1NzUwMiwgNTc1MDcsIDU3NTEyLCA1NzUxOSwgNTc1MjYsIDU3NTMxLCA1NzUzNiwgNTc1NDEsIDU3NTQ2LCA1NzU1MSwgCi0gICAgNTc1NTYsIDU3NTYwLCA1NzU2NCwgNTc1NzEsIDU3NTc4LCA1NzU4NCwgNTc1ODgsIDU3NTkzLCA1NzU5NSwgNTc1OTksIAotICAgIDU3NjA3LCA1NzYxMSwgNTc2MTUsIDU3NjE5LCA1NzYyMywgNTc2MjksIDU3NjM1LCA1NzYzOSwgNTc2NDUsIDU3NjQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDg3NSwgNTQ4ODAsIDU0ODg1LCAKKyAgICA1NDg5MCwgNTQ4OTUsIDU0OTAwLCA1NDkwNSwgNTQ5MTAsIDU0OTE1LCA1NDkyMCwgNTQ5MjUsIDU0OTMxLCA1NDkzNSwgCisgICAgNTQ5NDAsIDU0OTQ1LCA1NDk1MCwgNTQ5NTUsIDU0OTYwLCA1NDk2NSwgNTQ5NzAsIDU0OTc1LCA1NDk4MCwgNTQ5ODUsIAorICAgIDU0OTkwLCA1NDk5NSwgNTUwMDAsIDU1MDA1LCA1NTAxMCwgNTUwMTUsIDU1MDIwLCA1NTAyNSwgNTUwMzAsIDU1MDM1LCAKKyAgICA1NTA0MCwgNTUwNDUsIDU1MDUxLCA1NTA1NiwgNTUwNjIsIDU1MDcxLCA1NTA3NiwgNTUwODQsIDU1MDkxLCA1NTEwMCwgCisgICAgNTUxMDUsIDU1MTEwLCA1NTExNSwgNTUxMjEsIDAsIDU1MTI4LCA1NTEzMywgNTUxMzgsIDU1MTQzLCA1NTE0OCwgNTUxNTMsIAorICAgIDU1MTU4LCA1NTE2MywgNTUxNjgsIDU1MTczLCA1NTE3OCwgNTUxODQsIDU1MTg4LCA1NTE5MywgNTUxOTgsIDU1MjAzLCAKKyAgICA1NTIwOCwgNTUyMTMsIDU1MjE4LCA1NTIyMywgNTUyMjgsIDU1MjMzLCA1NTIzOCwgNTUyNDMsIDU1MjQ4LCA1NTI1MywgCisgICAgNTUyNTgsIDU1MjYzLCA1NTI2OCwgNTUyNzMsIDU1Mjc4LCA1NTI4MywgNTUyODgsIDU1MjkzLCA1NTI5OCwgNTUzMDQsIAorICAgIDU1MzA5LCA1NTMxNSwgNTUzMjQsIDU1MzI5LCA1NTMzNywgNTUzNDQsIDU1MzUzLCA1NTM1OCwgNTUzNjMsIDU1MzY4LCAKKyAgICA1NTM3NCwgMCwgNTUzODEsIDU1Mzg5LCA1NTM5NywgNTU0MDYsIDU1NDEzLCA1NTQyMSwgNTU0MjcsIDU1NDM2LCA1NTQ0NCwgCisgICAgNTU0NTIsIDU1NDYwLCA1NTQ2OCwgNTU0NzYsIDU1NDg0LCA1NTQ4OSwgNTU0OTYsIDU1NTAyLCA1NTUwOSwgNTU1MTcsIAorICAgIDU1NTI0LCA1NTUzMSwgNTU1MzksIDU1NTQ1LCA1NTU1MSwgNTU1NTgsIDU1NTY1LCA1NTU3NSwgNTU1ODUsIDU1NTkyLCAKKyAgICA1NTU5OSwgNTU2MDQsIDU1NjE0LCA1NTYyNCwgNTU2MjksIDU1NjM0LCA1NTYzOSwgNTU2NDQsIDU1NjQ5LCA1NTY1NCwgCisgICAgNTU2NTksIDU1NjY0LCA1NTY2OSwgNTU2NzQsIDU1Njc5LCA1NTY4NCwgNTU2ODksIDU1Njk0LCA1NTY5OSwgNTU3MDQsIAorICAgIDU1NzA5LCA1NTcxNCwgNTU3MTksIDU1NzI0LCA1NTcyOSwgNTU3MzQsIDU1NzM5LCA1NTc0NCwgNTU3NDksIDU1NzU0LCAKKyAgICA1NTc1OSwgNTU3NjQsIDU1NzY5LCA1NTc3NCwgNTU3NzgsIDU1NzgyLCA1NTc4NywgNTU3OTIsIDU1Nzk3LCA1NTgwMiwgCisgICAgNTU4MDcsIDU1ODEyLCA1NTgxNywgNTU4MjIsIDU1ODI3LCA1NTgzMiwgNTU4MzcsIDU1ODQyLCA1NTg0NywgNTU4NTIsIAorICAgIDU1ODU3LCA1NTg2MiwgNTU4NjcsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCAKKyAgICA1NTkyMSwgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDksIDU1OTU2LCA1NTk2MywgNTU5NzAsIDU1OTc1LCA1NTk4MCwgCisgICAgNTU5ODcsIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MywgNTYwNTAsIAorICAgIDU2MDU3LCA1NjA2NCwgNTYwNzAsIDU2MDc2LCA1NjA4MiwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCAKKyAgICA1NjEyMywgNTYxMzAsIDU2MTM3LCA1NjE0NCwgNTYxNTEsIDU2MTU4LCA1NjE2NiwgNTYxNzQsIDU2MTgyLCA1NjE5MCwgCisgICAgNTYxOTgsIDU2MjA2LCA1NjIxNCwgNTYyMjIsIDU2MjI2LCA1NjIzMiwgNTYyMzgsIDU2MjQyLCA1NjI0OCwgNTYyNTQsIAorICAgIDU2MjYwLCA1NjI2NywgNTYyNzQsIDU2MjgxLCA1NjI4OCwgNTYyOTMsIDU2Mjk5LCA1NjMwNSwgNTYzMTIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU2MzE5LCA1NjMyNywgNTYzMzYsIDU2MzQ1LCA1NjM1MywgNTYzNTksIDU2MzY0LCA1NjM2OSwgNTYzNzQsIAorICAgIDU2Mzc5LCA1NjM4NCwgNTYzODksIDU2Mzk0LCA1NjM5OSwgNTY0MDQsIDU2NDA5LCA1NjQxNCwgNTY0MTksIDU2NDI0LCAKKyAgICA1NjQyOSwgNTY0MzQsIDU2NDM5LCA1NjQ0NCwgNTY0NDksIDU2NDU0LCA1NjQ1OSwgNTY0NjQsIDU2NDY5LCA1NjQ3NCwgCisgICAgNTY0NzksIDU2NDg0LCA1NjQ4OSwgNTY0OTQsIDU2NDk5LCA1NjUwNCwgNTY1MDksIDU2NTE0LCA1NjUxOSwgNTY1MjQsIAorICAgIDU2NTI5LCA1NjUzNCwgNTY1MzksIDU2NTQ0LCA1NjU0OSwgNTY1NTQsIDAsIDU2NTU5LCAwLCAwLCAwLCAwLCAwLCA1NjU2NCwgCisgICAgMCwgMCwgNTY1NjksIDU2NTczLCA1NjU3OCwgNTY1ODMsIDU2NTg4LCA1NjU5MywgNTY2MDIsIDU2NjA3LCA1NjYxMiwgCisgICAgNTY2MTcsIDU2NjIyLCA1NjYyNywgNTY2MzIsIDU2NjM3LCA1NjY0MiwgNTY2NDksIDU2NjU0LCA1NjY1OSwgNTY2NjgsIAorICAgIDU2Njc1LCA1NjY4MCwgNTY2ODUsIDU2NjkwLCA1NjY5NywgNTY3MDIsIDU2NzA5LCA1NjcxNCwgNTY3MTksIDU2NzI2LCAKKyAgICA1NjczMywgNTY3MzgsIDU2NzQzLCA1Njc0OCwgNTY3NTUsIDU2NzYyLCA1Njc2NywgNTY3NzIsIDU2Nzc3LCA1Njc4MiwgCisgICAgNTY3ODcsIDU2Nzk0LCA1NjgwMSwgNTY4MDYsIDU2ODExLCA1NjgxNiwgNTY4MjEsIDU2ODI2LCA1NjgzMSwgNTY4MzYsIAorICAgIDU2ODQxLCA1Njg0NiwgNTY4NTEsIDU2ODU2LCA1Njg2MywgNTY4NjgsIDU2ODczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1Njg3OCwgNTY4ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODkwLCA1Njg5NSwgCisgICAgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTEsIDU2OTE1LCA1NjkxOSwgNTY5MjMsIDU2OTI3LCA1NjkzMSwgNTY5MzUsIAorICAgIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCAKKyAgICA1Njk4MSwgNTY5ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIDU3MDAxLCAKKyAgICA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCA1NzA0MSwgCisgICAgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCA1NzA3NywgCisgICAgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgNTcxMTcsIAorICAgIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIDAsIAorICAgIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxODksIDU3MTkzLCAKKyAgICA1NzE5NywgNTcyMDEsIDU3MjA1LCA1NzIwOSwgMCwgNTcyMTMsIDU3MjE4LCA1NzIyMywgNTcyMjgsIDU3MjMzLCA1NzIzOCwgCisgICAgNTcyNDMsIDU3MjQ3LCA1NzI1MiwgNTcyNTcsIDU3MjYyLCA1NzI2NiwgNTcyNzEsIDU3Mjc2LCA1NzI4MSwgNTcyODYsIAorICAgIDU3MjkwLCA1NzI5NSwgNTczMDAsIDU3MzA1LCA1NzMxMCwgNTczMTUsIDU3MzIwLCA1NzMyNCwgNTczMjksIDU3MzM0LCAKKyAgICA1NzM0MSwgNTczNDYsIDU3MzUxLCA1NzM1NywgNTczNjQsIDU3MzcxLCA1NzM4MCwgNTczODcsIDU3Mzk2LCA1NzQwMCwgCisgICAgNTc0MDQsIDU3NDEwLCA1NzQxNiwgNTc0MjIsIDU3NDMwLCA1NzQzNiwgNTc0NDAsIDU3NDQ0LCA1NzQ0OCwgNTc0NTQsIAorICAgIDU3NDYwLCA1NzQ2NCwgNTc0NjYsIDU3NDcwLCA1NzQ3NiwgNTc0NzgsIDU3NDgyLCA1NzQ4NiwgNTc0OTAsIDU3NDk2LCAKKyAgICA1NzUwMSwgNTc1MDUsIDU3NTA5LCA1NzUxNCwgNTc1MjAsIDU3NTI1LCA1NzUzMCwgNTc1MzUsIDU3NTQwLCA1NzU0NywgCisgICAgNTc1NTQsIDU3NTU5LCA1NzU2NCwgNTc1NjksIDU3NTc0LCA1NzU3OSwgNTc1ODQsIDU3NTg4LCA1NzU5MiwgNTc1OTksIAorICAgIDU3NjA2LCA1NzYxMiwgNTc2MTYsIDU3NjIxLCA1NzYyMywgNTc2MjcsIDU3NjM1LCA1NzYzOSwgNTc2NDMsIDU3NjQ3LCAKKyAgICA1NzY1MSwgNTc2NTcsIDU3NjYzLCA1NzY2NywgNTc2NzMsIDU3Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzY1MywgNTc2NTcsIAotICAgIDU3NjYxLCA1NzY2NiwgNTc2NzEsIDU3Njc2LCA1NzY4MCwgNTc2ODQsIDU3Njg4LCA1NzY5MywgNTc2OTgsIDU3NzAyLCAKLSAgICA1NzcwNiwgNTc3MTAsIDU3NzE0LCA1NzcxOSwgNTc3MjQsIDU3NzI5LCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NywgCi0gICAgNTc3NTIsIDU3NzU3LCA1Nzc2MiwgNTc3NjYsIDAsIDU3NzcwLCA1Nzc3NCwgNTc3NzgsIDU3NzgyLCA1Nzc4NiwgNTc3OTAsIAotICAgIDU3Nzk0LCA1Nzc5OSwgNTc4MDQsIDU3ODA4LCA1NzgxMywgNTc4MTgsIDU3ODI3LCA1NzgzMSwgNTc4MzUsIDU3ODM5LCAKLSAgICA1Nzg0NiwgNTc4NTAsIDU3ODU1LCA1Nzg2MCwgNTc4NjQsIDU3ODY4LCA1Nzg3NCwgNTc4NzksIDU3ODg0LCA1Nzg4OSwgCi0gICAgNTc4OTQsIDU3ODk4LCA1NzkwMiwgNTc5MDYsIDU3OTEwLCA1NzkxNCwgNTc5MTksIDU3OTI0LCA1NzkyOCwgNTc5MzIsIAotICAgIDU3OTM3LCA1Nzk0MiwgNTc5NDcsIDU3OTUxLCA1Nzk1NSwgNTc5NjAsIDU3OTY1LCA1Nzk3MSwgNTc5NzcsIDU3OTgxLCAKLSAgICA1Nzk4NywgNTc5OTMsIDU3OTk3LCA1ODAwMywgNTgwMDksIDU4MDE0LCA1ODAxOSwgNTgwMjMsIDU4MDI5LCA1ODAzMywgCi0gICAgNTgwMzcsIDU4MDQzLCA1ODA0OSwgNTgwNTQsIDU4MDU5LCA1ODA2MywgNTgwNjcsIDU4MDc1LCA1ODA4MSwgNTgwODcsIAotICAgIDU4MDkzLCA1ODA5OCwgNTgxMDMsIDU4MTA4LCA1ODExNCwgNTgxMTgsIDU4MTI0LCA1ODEyOCwgNTgxMzIsIDU4MTM4LCAKLSAgICA1ODE0NCwgNTgxNTAsIDU4MTU2LCA1ODE2MiwgNTgxNjgsIDU4MTc0LCA1ODE4MCwgNTgxODYsIDU4MTkyLCA1ODE5OCwgCi0gICAgNTgyMDQsIDU4MjA4LCA1ODIxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyMjAsIDU4MjIzLCAKLSAgICA1ODIyNywgNTgyMzEsIDU4MjM1LCA1ODIzOSwgNTgyNDIsIDU4MjQ1LCA1ODI0OSwgNTgyNTMsIDU4MjU3LCA1ODI2MSwgCi0gICAgNTgyNjQsIDU4MjY5LCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NiwgNTgyOTAsIDU4Mjk0LCA1ODI5OCwgNTgzMDIsIAotICAgIDU4MzA4LCA1ODMxNCwgNTgzMTgsIDU4MzIyLCA1ODMyNiwgNTgzMzAsIDU4MzM0LCA1ODMzOCwgNTgzNDIsIDU4MzQ2LCAKLSAgICA1ODM1MCwgNTgzNTQsIDU4MzU4LCA1ODM2NCwgNTgzNjgsIDU4MzcyLCA1ODM3NiwgNTgzODAsIDU4Mzg0LCA1ODM4OCwgCi0gICAgNTgzOTIsIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIAotICAgIDU4NDM0LCA1ODQ0MCwgNTg0NDUsIDU4NDUwLCA1ODQ1NCwgNTg0NTgsIDU4NDYyLCA1ODQ2NiwgNTg0NzAsIDU4NDc0LCAKLSAgICA1ODQ3OCwgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgCi0gICAgNTg1MTgsIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MiwgNTg1NTYsIAotICAgIDU4NTYwLCA1ODU2NCwgNTg1NjgsIDU4NTcyLCA1ODU3NiwgNTg1ODAsIDU4NTg0LCA1ODU4OSwgNTg1OTYsIDU4NjAwLCAKLSAgICA1ODYwNCwgNTg2MDgsIDU4NjEyLCA1ODYxNiwgNTg2MjAsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgCi0gICAgNTg2NDQsIDU4NjUxLCA1ODY1NSwgNTg2NjEsIDU4NjY1LCA1ODY2OSwgNTg2NzMsIDU4Njc3LCA1ODY4MSwgNTg2ODQsIAotICAgIDU4Njg4LCA1ODY5MiwgNTg2OTYsIDU4NzAwLCA1ODcwNCwgNTg3MDgsIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAKLSAgICA1ODcyOCwgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgCi0gICAgNTg3NjgsIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIAotICAgIDU4ODA4LCA1ODgxMiwgNTg4MTgsIDU4ODIyLCA1ODgyNiwgNTg4MzAsIDU4ODM0LCA1ODgzOCwgNTg4NDIsIDU4ODQ2LCAKLSAgICA1ODg1MCwgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgCi0gICAgNTg4OTAsIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIAotICAgIDU4OTM0LCA1ODkzOCwgNTg5NDIsIDU4OTQ2LCA1ODk1MCwgNTg5NTQsIDU4OTYwLCA1ODk2NCwgNTg5NjgsIDU4OTcyLCAKLSAgICA1ODk3NiwgNTg5ODAsIDU4OTg0LCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgCi0gICAgNTkwMTgsIDU5MDIyLCA1OTAyNiwgNTkwMzAsIDU5MDM0LCA1OTAzOCwgNTkwNDIsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIAotICAgIDU5MDU4LCA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCAKLSAgICA1OTA5OCwgNTkxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU5MTA2LCA1OTExNSwgNTkxMjMsIDU5MTM1LCA1OTE0NiwgNTkxNTQsIDU5MTYzLCA1OTE3MiwgCi0gICAgNTkxODIsIDU5MTk0LCA1OTIwNiwgNTkyMTgsIDAsIDAsIDAsIDAsIDU5MjI0LCA1OTIyNywgNTkyMzAsIDU5MjM1LCAKLSAgICA1OTIzOCwgNTkyNDUsIDU5MjQ5LCA1OTI1MywgNTkyNTcsIDU5MjYxLCA1OTI2NSwgNTkyNzAsIDU5Mjc1LCA1OTI3OSwgCi0gICAgNTkyODMsIDU5Mjg4LCA1OTI5MywgNTkyOTgsIDU5MzAzLCA1OTMwNiwgNTkzMDksIDU5MzE1LCA1OTMyMSwgNTkzMjYsIAotICAgIDU5MzMxLCA1OTMzOCwgNTkzNDUsIDU5MzQ5LCA1OTM1MywgNTkzNTcsIDU5MzY1LCA1OTM3MSwgNTkzNzgsIDU5MzgzLCAKLSAgICA1OTM4OCwgNTkzOTMsIDU5Mzk4LCA1OTQwMywgNTk0MDgsIDU5NDEzLCA1OTQxOCwgNTk0MjMsIDU5NDI4LCA1OTQzMywgCi0gICAgNTk0MzgsIDU5NDQzLCA1OTQ0OCwgNTk0NTQsIDU5NDU5LCA1OTQ2MywgNTk0NjksIDU5NDgwLCA1OTQ5MCwgNTk1MDUsIAotICAgIDU5NTE1LCA1OTUxOSwgNTk1MjksIDU5NTM1LCA1OTU0MSwgNTk1NDcsIDU5NTUyLCA1OTU1NSwgNTk1NjAsIDU5NTY0LCAwLCAKLSAgICA1OTU3MCwgNTk1NzQsIDU5NTc3LCA1OTU4MSwgNTk1ODQsIDU5NTg4LCA1OTU5MSwgNTk1OTUsIDU5NTk4LCA1OTYwMiwgCi0gICAgNTk2MDUsIDU5NjA4LCA1OTYxMiwgNTk2MTYsIDU5NjIwLCA1OTYyNCwgNTk2MjgsIDU5NjMyLCA1OTYzNiwgNTk2NDAsIAotICAgIDU5NjQ0LCA1OTY0NywgNTk2NTEsIDU5NjU1LCA1OTY1OSwgNTk2NjMsIDU5NjY3LCA1OTY3MSwgNTk2NzUsIDU5Njc5LCAKLSAgICA1OTY4MywgNTk2ODcsIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzA0LCA1OTcwOCwgNTk3MTIsIDU5NzE2LCA1OTcyMCwgCi0gICAgNTk3MjMsIDU5NzI3LCA1OTczMCwgNTk3MzQsIDU5NzM4LCA1OTc0MiwgNTk3NDYsIDU5NzQ5LCA1OTc1MywgNTk3NTYsIAotICAgIDU5NzYwLCA1OTc2NCwgNTk3NjgsIDU5NzcyLCA1OTc3NiwgNTk3ODAsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCAKLSAgICA1OTgwMCwgNTk4MDQsIDU5ODA3LCA1OTgxMSwgNTk4MTUsIDU5ODE5LCA1OTgyMywgNTk4MjcsIDU5ODMwLCA1OTgzNSwgCi0gICAgNTk4MzksIDU5ODQ0LCA1OTg0OCwgNTk4NTEsIDU5ODU1LCA1OTg1OSwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIAotICAgIDU5ODgwLCA1OTg4NCwgNTk4ODgsIDU5ODkyLCA1OTg5NiwgNTk5MDAsIDAsIDAsIDU5OTA1LCA1OTkxMywgNTk5MjEsIAotICAgIDU5OTI4LCA1OTkzNSwgNTk5MzksIDU5OTQ1LCA1OTk1MCwgNTk5NTUsIDU5OTU5LCA1OTk2MiwgNTk5NjYsIDU5OTY5LCAKLSAgICA1OTk3MywgNTk5NzYsIDU5OTgwLCA1OTk4MywgNTk5ODcsIDU5OTkwLCA1OTk5MywgNTk5OTcsIDYwMDAxLCA2MDAwNSwgCi0gICAgNjAwMDksIDYwMDEzLCA2MDAxNywgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzIsIDYwMDM2LCA2MDA0MCwgNjAwNDQsIAotICAgIDYwMDQ4LCA2MDA1MiwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCAKLSAgICA2MDA4OSwgNjAwOTMsIDYwMDk3LCA2MDEwMSwgNjAxMDUsIDYwMTA4LCA2MDExMiwgNjAxMTUsIDYwMTE5LCA2MDEyMywgCi0gICAgNjAxMjcsIDYwMTMxLCA2MDEzNCwgNjAxMzgsIDYwMTQxLCA2MDE0NSwgNjAxNDksIDYwMTUzLCA2MDE1NywgNjAxNjEsIAotICAgIDYwMTY1LCA2MDE2OSwgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MiwgNjAxOTYsIDYwMjAwLCAKLSAgICA2MDIwNCwgNjAyMDgsIDYwMjEyLCA2MDIxNSwgNjAyMjAsIDYwMjI0LCA2MDIyOSwgNjAyMzMsIDYwMjM2LCA2MDI0MCwgCi0gICAgNjAyNDQsIDYwMjQ4LCA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NSwgNjAyNjksIDYwMjczLCA2MDI3NywgNjAyODEsIAotICAgIDYwMjg1LCA2MDI5MCwgNjAyOTQsIDYwMjk4LCA2MDMwMiwgNjAzMDYsIDYwMzExLCA2MDMxOCwgNjAzMjIsIDYwMzI4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA2MDMzMywgNjAzMzgsIDYwMzQzLCA2MDM0NywgNjAzNTIsIDYwMzU3LCA2MDM2MiwgNjAzNjcsIAotICAgIDYwMzcxLCA2MDM3NiwgNjAzODEsIDYwMzg2LCA2MDM5MSwgNjAzOTYsIDYwNDAxLCA2MDQwNiwgNjA0MTEsIDYwNDE2LCAKLSAgICA2MDQyMCwgNjA0MjUsIDYwNDMwLCA2MDQzNSwgNjA0MzksIDYwNDQzLCA2MDQ0NywgNjA0NTIsIDYwNDU3LCA2MDQ2MiwgCi0gICAgNjA0NjcsIDYwNDcyLCA2MDQ3NywgNjA0ODIsIDYwNDg3LCA2MDQ5MiwgNjA0OTcsIDYwNTAxLCA2MDUwNSwgNjA1MTAsIAotICAgIDYwNTE1LCA2MDUyMCwgNjA1MjUsIDAsIDAsIDAsIDYwNTMwLCA2MDUzNCwgNjA1MzgsIDYwNTQyLCA2MDU0NiwgNjA1NTAsIAotICAgIDYwNTU0LCA2MDU1OCwgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCAKLSAgICA2MDU5NCwgNjA1OTgsIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgCi0gICAgNjA2MzQsIDYwNjM4LCA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1MywgNjA2NTcsIDYwNjYwLCA2MDY2NCwgNjA2NjgsIAotICAgIDYwNjcxLCA2MDY3NSwgNjA2NzksIDYwNjgyLCA2MDY4NiwgNjA2OTAsIDYwNjk0LCA2MDY5OCwgNjA3MDEsIDYwNzA1LCAKLSAgICA2MDcwOSwgNjA3MTMsIDYwNzE3LCA2MDcyMSwgNjA3MjUsIDYwNzI4LCA2MDczMSwgNjA3MzUsIDYwNzM5LCA2MDc0MywgCi0gICAgNjA3NDcsIDYwNzUxLCA2MDc1NSwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIAotICAgIDYwNzg3LCA2MDc5MSwgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCAKLSAgICA2MDgyNywgNjA4MzEsIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgCi0gICAgNjA4NjcsIDYwODcxLCA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCAwLCA2MDg5OSwgNjA5MDUsIAotICAgIDYwOTExLCA2MDkxNiwgNjA5MjEsIDYwOTI2LCA2MDkzMiwgNjA5MzgsIDYwOTQ0LCA2MDk1MCwgNjA5NTYsIDYwOTYyLCAKLSAgICA2MDk2OCwgNjA5NzQsIDYwOTgwLCA2MDk4NiwgNjA5OTIsIDYwOTk3LCA2MTAwMiwgNjEwMDcsIDYxMDEyLCA2MTAxNywgCi0gICAgNjEwMjIsIDYxMDI3LCA2MTAzMiwgNjEwMzcsIDYxMDQyLCA2MTA0NywgNjEwNTIsIDYxMDU3LCA2MTA2MiwgNjEwNjcsIAotICAgIDYxMDcyLCA2MTA3NywgNjEwODIsIDYxMDg3LCA2MTA5MiwgNjEwOTgsIDYxMTA0LCA2MTExMCwgNjExMTYsIDYxMTIxLCAKLSAgICA2MTEyNiwgMCwgMCwgMCwgMCwgMCwgNjExMzEsIDYxMTM2LCA2MTE0MSwgNjExNDYsIDYxMTUxLCA2MTE1NiwgNjExNjEsIAotICAgIDYxMTY2LCA2MTE3MSwgNjExNzYsIDYxMTgxLCA2MTE4NiwgNjExOTEsIDYxMTk2LCA2MTIwMSwgNjEyMDYsIDYxMjExLCAKLSAgICA2MTIxNiwgNjEyMjEsIDYxMjI2LCA2MTIzMSwgNjEyMzYsIDYxMjQxLCA2MTI0NiwgNjEyNTEsIDYxMjU2LCA2MTI2MSwgCi0gICAgNjEyNjYsIDYxMjcxLCA2MTI3NiwgNjEyODEsIDYxMjg2LCA2MTI5MSwgNjEyOTYsIDYxMzAxLCA2MTMwNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEzMTEsIDYxMzE2LCA2MTMyMSwgNjEzMjYsIDYxMzMwLCA2MTMzNSwgCi0gICAgNjEzMzksIDYxMzQ0LCA2MTM0OSwgNjEzNTQsIDYxMzU5LCA2MTM2NCwgNjEzNjgsIDYxMzczLCA2MTM3OCwgNjEzODMsIAotICAgIDYxMzg4LCA2MTM5MiwgNjEzOTYsIDYxNDAwLCA2MTQwNCwgNjE0MDgsIDYxNDEyLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCAKLSAgICA2MTQyOCwgNjE0MzIsIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ5LCA2MTQ1NCwgNjE0NTksIDYxNDY0LCA2MTQ2OSwgCi0gICAgNjE0NzQsIDYxNDc5LCA2MTQ4NCwgNjE0ODksIDYxNDk0LCA2MTQ5OSwgNjE1MDQsIDYxNTA5LCA2MTUxNCwgNjE1MTksIAotICAgIDYxNTI1LCAwLCA2MTUzMiwgNjE1MzUsIDYxNTM4LCA2MTU0MSwgNjE1NDQsIDYxNTQ3LCA2MTU1MCwgNjE1NTMsIDYxNTU2LCAKLSAgICA2MTU1OSwgNjE1NjMsIDYxNTY3LCA2MTU3MSwgNjE1NzUsIDYxNTc5LCA2MTU4MywgNjE1ODcsIDYxNTkxLCA2MTU5NSwgCi0gICAgNjE1OTksIDYxNjAzLCA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIAotICAgIDYxNjM5LCA2MTY0MywgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCAKLSAgICA2MTY3OSwgNjE2ODMsIDYxNjkyLCA2MTcwMSwgNjE3MTAsIDYxNzE5LCA2MTcyOCwgNjE3MzcsIDYxNzQ2LCA2MTc1NSwgCi0gICAgNjE3NTgsIDYxNzYzLCA2MTc2OCwgNjE3NzMsIDYxNzc4LCA2MTc4MywgNjE3ODgsIDYxNzkzLCA2MTc5OCwgNjE4MDMsIAotICAgIDYxODA3LCA2MTgxMiwgNjE4MTcsIDYxODIyLCA2MTgyNywgNjE4MzIsIDYxODM2LCA2MTg0MCwgNjE4NDQsIDYxODQ4LCAKLSAgICA2MTg1MiwgNjE4NTYsIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgCi0gICAgNjE4OTMsIDYxODk4LCA2MTkwMywgNjE5MDgsIDYxOTEzLCA2MTkxOCwgNjE5MjMsIDYxOTI4LCA2MTkzMywgNjE5MzgsIAotICAgIDYxOTQzLCA2MTk0OCwgNjE5NTMsIDYxOTU4LCA2MTk2NCwgNjE5NzAsIDYxOTc1LCA2MTk4MCwgNjE5ODMsIDYxOTg2LCAKLSAgICA2MTk4OSwgNjE5OTIsIDYxOTk1LCA2MTk5OCwgNjIwMDEsIDYyMDA0LCA2MjAwNywgNjIwMTEsIDYyMDE1LCA2MjAxOSwgCi0gICAgNjIwMjMsIDYyMDI3LCA2MjAzMSwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIAotICAgIDYyMDYzLCA2MjA2NywgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCAKLSAgICA2MjEwMywgNjIxMDcsIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgCi0gICAgNjIxNDMsIDYyMTQ3LCA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcyLCA2MjE3NywgNjIxODIsIAotICAgIDYyMTg3LCA2MjE5MSwgNjIxOTYsIDYyMjAxLCA2MjIwNiwgNjIyMTEsIDYyMjE2LCA2MjIyMSwgNjIyMjYsIDYyMjMxLCAKLSAgICA2MjIzNiwgNjIyNDAsIDYyMjQ3LCA2MjI1NCwgNjIyNjEsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCA2MjI5NiwgCi0gICAgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzI3LCA2MjMzMCwgNjIzMzMsIDYyMzM4LCA2MjM0MSwgNjIzNDQsIAotICAgIDYyMzQ3LCA2MjM1MCwgNjIzNTMsIDYyMzU2LCA2MjM2MCwgNjIzNjQsIDYyMzY4LCA2MjM3MiwgNjIzNzUsIDYyMzc5LCAKLSAgICA2MjM4MywgNjIzODcsIDYyMzkxLCA2MjM5NSwgNjIzOTksIDYyNDAzLCA2MjQwNywgNjI0MTAsIDYyNDEzLCA2MjQxNywgCi0gICAgNjI0MjEsIDYyNDI1LCA2MjQyOSwgNjI0MzIsIDYyNDM2LCA2MjQ0MCwgNjI0NDQsIDYyNDQ4LCA2MjQ1MSwgNjI0NTUsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjcsIDYyNDcwLCA2MjQ3NCwgNjI0NzgsIDYyNDgxLCA2MjQ4NSwgNjI0ODksIDYyNDkzLCAKLSAgICA2MjQ5NywgNjI1MDEsIDYyNTA1LCA2MjUwOSwgMCwgNjI1MTMsIDYyNTE2LCA2MjUxOSwgNjI1MjIsIDYyNTI1LCA2MjUyOCwgCi0gICAgNjI1MzEsIDYyNTM0LCA2MjUzNywgNjI1NDAsIDYyNTQzLCA2MjU0NiwgNjI1NDksIDYyNTUyLCA2MjU1NSwgNjI1NTgsIAotICAgIDYyNTYxLCA2MjU2NCwgNjI1NjcsIDYyNTcwLCA2MjU3MywgNjI1NzYsIDYyNTc5LCA2MjU4MiwgNjI1ODUsIDYyNTg4LCAKLSAgICA2MjU5MSwgNjI1OTQsIDYyNTk3LCA2MjYwMCwgNjI2MDMsIDYyNjA2LCA2MjYwOSwgNjI2MTIsIDYyNjE1LCA2MjYxOCwgCi0gICAgNjI2MjEsIDYyNjI0LCA2MjYyNywgNjI2MzAsIDYyNjMzLCA2MjYzNiwgNjI2MzksIDYyNjQyLCA2MjY0NSwgNjI2NDgsIAotICAgIDYyNjUxLCA2MjY1NCwgNjI2NTcsIDYyNjYwLCA2MjY2MywgNjI2NjYsIDYyNjY5LCA2MjY3MiwgNjI2NzUsIDYyNjc4LCAKLSAgICA2MjY4MSwgNjI2ODQsIDYyNjg3LCA2MjY5MCwgNjI2OTMsIDYyNjk2LCA2MjY5OSwgNjI3MDIsIDYyNzA1LCA2MjcwOCwgCi0gICAgNjI3MTEsIDYyNzE0LCA2MjcxNywgNjI3MjAsIDYyNzIzLCA2MjcyNiwgNjI3MjksIDYyNzMyLCA2MjczNSwgNjI3MzgsIAotICAgIDYyNzQxLCA2Mjc0NCwgNjI3NDcsIDYyNzUwLCA2Mjc1MywgNjI3NTYsIDYyNzU5LCA2Mjc2MiwgNjI3NjUsIDYyNzY4LCAKLSAgICA2Mjc3MSwgNjI3NzQsIDYyNzc3LCA2Mjc4NiwgNjI3OTQsIDYyODAyLCA2MjgxMCwgNjI4MTgsIDYyODI2LCA2MjgzNCwgCi0gICAgNjI4NDIsIDYyODUwLCA2Mjg1OCwgNjI4NjcsIDYyODc2LCA2Mjg4NSwgNjI4OTQsIDYyOTAzLCA2MjkxMiwgNjI5MjEsIAotICAgIDYyOTMwLCA2MjkzOSwgNjI5NDgsIDYyOTU3LCA2Mjk2NiwgNjI5NzUsIDYyOTg0LCA2Mjk5MywgNjI5OTYsIDYyOTk5LCAKLSAgICA2MzAwMiwgNjMwMDQsIDYzMDA3LCA2MzAxMCwgNjMwMTMsIDYzMDE4LCA2MzAyMywgNjMwMjYsIDYzMDMzLCA2MzA0MCwgCi0gICAgNjMwNDcsIDYzMDU0LCA2MzA1NywgNjMwNjIsIDYzMDY0LCA2MzA2OCwgNjMwNzAsIDYzMDcyLCA2MzA3NSwgNjMwNzgsIAotICAgIDYzMDgxLCA2MzA4NCwgNjMwODcsIDYzMDkwLCA2MzA5MywgNjMwOTgsIDYzMTAzLCA2MzEwNiwgNjMxMDksIDYzMTEyLCAKLSAgICA2MzExNSwgNjMxMTgsIDYzMTIxLCA2MzEyNCwgNjMxMjgsIDYzMTMxLCA2MzEzNCwgNjMxMzcsIDYzMTQwLCA2MzE0MywgCi0gICAgNjMxNDcsIDYzMTUwLCA2MzE1MywgNjMxNTYsIDYzMTYxLCA2MzE2NiwgNjMxNzEsIDYzMTc2LCA2MzE4MSwgNjMxODYsIAotICAgIDYzMTkxLCA2MzE5NiwgNjMyMDIsIDYzMjEwLCA2MzIxMiwgNjMyMTUsIDYzMjE4LCA2MzIyMSwgNjMyMjQsIDYzMjMwLCAKLSAgICA2MzIzOCwgNjMyNDEsIDYzMjQ0LCA2MzI0OSwgNjMyNTIsIDYzMjU1LCA2MzI1OCwgNjMyNjMsIDYzMjY2LCA2MzI2OSwgCi0gICAgNjMyNzQsIDYzMjc3LCA2MzI4MCwgNjMyODUsIDYzMjg4LCA2MzI5MSwgNjMyOTYsIDYzMzAxLCA2MzMwNiwgNjMzMDksIAotICAgIDYzMzEyLCA2MzMxNSwgNjMzMTgsIDYzMzI0LCA2MzMyNywgNjMzMzAsIDYzMzMzLCA2MzMzNSwgNjMzMzgsIDYzMzQxLCAKLSAgICA2MzM0NCwgNjMzNDksIDYzMzUyLCA2MzM1NSwgNjMzNTgsIDYzMzYxLCA2MzM2NCwgNjMzNjksIDYzMzcyLCA2MzM3NSwgCi0gICAgNjMzNzgsIDYzMzgxLCA2MzM4NCwgNjMzODcsIDYzMzkwLCA2MzM5MywgNjMzOTYsIDYzNDAxLCA2MzQwNSwgNjM0MTMsIAotICAgIDYzNDIxLCA2MzQyOSwgNjM0MzcsIDYzNDQ1LCA2MzQ1MywgNjM0NjEsIDYzNDY5LCA2MzQ3NywgNjM0ODYsIDYzNDk1LCAKLSAgICA2MzUwNCwgNjM1MTMsIDYzNTIyLCA2MzUzMSwgNjM1NDAsIDYzNTQ5LCA2MzU1OCwgNjM1NjcsIDYzNTc2LCA2MzU4NSwgCi0gICAgNjM1OTQsIDYzNjAzLCA2MzYxMiwgNjM2MjEsIDYzNjMwLCA2MzYzOSwgNjM2NDgsIDYzNjU3LCA2MzY2NiwgNjM2NzUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjgxLCA1NzY4NSwgNTc2ODksIDU3Njk0LCA1NzY5OSwgNTc3MDQsIAorICAgIDU3NzA4LCA1NzcxMiwgNTc3MTYsIDU3NzIxLCA1NzcyNiwgNTc3MzAsIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKKyAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgNTc3NzAsIDU3Nzc1LCA1Nzc4MCwgNTc3ODUsIDU3NzkwLCA1Nzc5NCwgMCwgCisgICAgNTc3OTgsIDU3ODAyLCA1NzgwNiwgNTc4MTAsIDU3ODE0LCA1NzgxOCwgNTc4MjIsIDU3ODI3LCA1NzgzMiwgNTc4MzYsIAorICAgIDU3ODQxLCA1Nzg0NiwgNTc4NTUsIDU3ODU5LCA1Nzg2MywgNTc4NjcsIDU3ODc0LCA1Nzg3OCwgNTc4ODMsIDU3ODg4LCAKKyAgICA1Nzg5MiwgNTc4OTYsIDU3OTAyLCA1NzkwNywgNTc5MTIsIDU3OTE3LCA1NzkyMiwgNTc5MjYsIDU3OTMwLCA1NzkzNCwgCisgICAgNTc5MzgsIDU3OTQyLCA1Nzk0NywgNTc5NTIsIDU3OTU2LCA1Nzk2MCwgNTc5NjUsIDU3OTcwLCA1Nzk3NSwgNTc5NzksIAorICAgIDU3OTgzLCA1Nzk4OCwgNTc5OTMsIDU3OTk5LCA1ODAwNSwgNTgwMDksIDU4MDE1LCA1ODAyMSwgNTgwMjUsIDU4MDMxLCAKKyAgICA1ODAzNywgNTgwNDIsIDU4MDQ3LCA1ODA1MSwgNTgwNTcsIDU4MDYxLCA1ODA2NSwgNTgwNzEsIDU4MDc3LCA1ODA4MiwgCisgICAgNTgwODcsIDU4MDkxLCA1ODA5NSwgNTgxMDMsIDU4MTA5LCA1ODExNSwgNTgxMjEsIDU4MTI2LCA1ODEzMSwgNTgxMzYsIAorICAgIDU4MTQyLCA1ODE0NiwgNTgxNTIsIDU4MTU2LCA1ODE2MCwgNTgxNjYsIDU4MTcyLCA1ODE3OCwgNTgxODQsIDU4MTkwLCAKKyAgICA1ODE5NiwgNTgyMDIsIDU4MjA4LCA1ODIxNCwgNTgyMjAsIDU4MjI2LCA1ODIzMiwgNTgyMzYsIDU4MjQyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODI0OCwgNTgyNTEsIDU4MjU1LCA1ODI1OSwgNTgyNjMsIDU4MjY3LCAKKyAgICA1ODI3MCwgNTgyNzMsIDU4Mjc3LCA1ODI4MSwgNTgyODUsIDU4Mjg5LCA1ODI5MiwgNTgyOTcsIDU4MzAxLCA1ODMwNSwgCisgICAgNTgzMDksIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzYsIDU4MzQyLCA1ODM0NiwgNTgzNTAsIAorICAgIDU4MzU0LCA1ODM1OCwgNTgzNjIsIDU4MzY2LCA1ODM3MCwgNTgzNzQsIDU4Mzc4LCA1ODM4MiwgNTgzODYsIDU4MzkyLCAKKyAgICA1ODM5NiwgNTg0MDAsIDU4NDA0LCA1ODQwOCwgNTg0MTIsIDU4NDE2LCA1ODQyMCwgNTg0MjQsIDU4NDI4LCA1ODQzMiwgCisgICAgNTg0MzYsIDU4NDQwLCA1ODQ0NCwgNTg0NDgsIDU4NDUyLCA1ODQ1NiwgNTg0NjIsIDU4NDY4LCA1ODQ3MywgNTg0NzgsIAorICAgIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIDU4NDk0LCA1ODQ5OCwgNTg1MDIsIDU4NTA2LCA1ODUxMCwgNTg1MTQsIDU4NTE4LCAKKyAgICA1ODUyMiwgNTg1MjYsIDU4NTMwLCA1ODUzNCwgNTg1MzgsIDU4NTQyLCA1ODU0NiwgNTg1NTAsIDU4NTU0LCA1ODU1OCwgCisgICAgNTg1NjIsIDU4NTY2LCA1ODU3MCwgNTg1NzQsIDU4NTgwLCA1ODU4NCwgNTg1ODgsIDU4NTkyLCA1ODU5NiwgNTg2MDAsIAorICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE3LCA1ODYyNCwgNTg2MjgsIDU4NjMyLCA1ODYzNiwgNTg2NDAsIDU4NjQ0LCAKKyAgICA1ODY0OCwgNTg2NTIsIDU4NjU2LCA1ODY2MCwgNTg2NjQsIDU4NjY4LCA1ODY3MiwgNTg2NzksIDU4NjgzLCA1ODY4OSwgCisgICAgNTg2OTMsIDU4Njk3LCA1ODcwMSwgNTg3MDUsIDU4NzA5LCA1ODcxMiwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgNTg3MjgsIAorICAgIDU4NzMyLCA1ODczNiwgNTg3NDAsIDU4NzQ0LCA1ODc0OCwgNTg3NTIsIDU4NzU2LCA1ODc2MCwgNTg3NjQsIDU4NzY4LCAKKyAgICA1ODc3MiwgNTg3NzYsIDU4NzgwLCA1ODc4NCwgNTg3ODgsIDU4NzkyLCA1ODc5NiwgNTg4MDAsIDU4ODA0LCA1ODgwOCwgCisgICAgNTg4MTIsIDU4ODE2LCA1ODgyMCwgNTg4MjQsIDU4ODI4LCA1ODgzMiwgNTg4MzYsIDU4ODQwLCA1ODg0NiwgNTg4NTAsIAorICAgIDU4ODU0LCA1ODg1OCwgNTg4NjIsIDU4ODY2LCA1ODg3MCwgNTg4NzQsIDU4ODc4LCA1ODg4MiwgNTg4ODYsIDU4ODkwLCAKKyAgICA1ODg5NCwgNTg4OTgsIDU4OTAyLCA1ODkwNiwgNTg5MTAsIDU4OTE0LCA1ODkxOCwgNTg5MjIsIDU4OTI2LCA1ODkzMCwgCisgICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjIsIDU4OTY2LCA1ODk3MCwgNTg5NzQsIAorICAgIDU4OTc4LCA1ODk4MiwgNTg5ODgsIDU4OTkyLCA1ODk5NiwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgNTkwMTIsIDU5MDE2LCAKKyAgICA1OTAyMCwgNTkwMjQsIDU5MDI4LCA1OTAzMiwgNTkwMzYsIDU5MDQwLCA1OTA0NiwgNTkwNTAsIDU5MDU0LCA1OTA1OCwgCisgICAgNTkwNjIsIDU5MDY2LCA1OTA3MCwgNTkwNzQsIDU5MDc4LCA1OTA4MiwgNTkwODYsIDU5MDkwLCA1OTA5NCwgNTkwOTgsIAorICAgIDU5MTAyLCA1OTEwNiwgNTkxMTAsIDU5MTE0LCA1OTExOCwgNTkxMjIsIDU5MTI2LCA1OTEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMzQsIDU5MTQzLCAKKyAgICA1OTE1MSwgNTkxNjMsIDU5MTc0LCA1OTE4MiwgNTkxOTEsIDU5MjAwLCA1OTIxMCwgNTkyMjIsIDU5MjM0LCA1OTI0NiwgMCwgCisgICAgMCwgMCwgMCwgNTkyNTIsIDU5MjU1LCA1OTI1OCwgNTkyNjMsIDU5MjY2LCA1OTI3MywgNTkyNzcsIDU5MjgxLCA1OTI4NSwgCisgICAgNTkyODksIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA3LCA1OTMxMSwgNTkzMTYsIDU5MzIxLCA1OTMyNiwgNTkzMzEsIAorICAgIDU5MzM0LCA1OTMzNywgNTkzNDMsIDU5MzQ5LCA1OTM1NCwgNTkzNTksIDU5MzY2LCA1OTM3MywgNTkzNzcsIDU5MzgxLCAKKyAgICA1OTM4NSwgNTkzOTMsIDU5Mzk5LCA1OTQwNiwgNTk0MTEsIDU5NDE2LCA1OTQyMSwgNTk0MjYsIDU5NDMxLCA1OTQzNiwgCisgICAgNTk0NDEsIDU5NDQ2LCA1OTQ1MSwgNTk0NTYsIDU5NDYxLCA1OTQ2NiwgNTk0NzEsIDU5NDc2LCA1OTQ4MiwgNTk0ODcsIAorICAgIDU5NDkxLCA1OTQ5NywgNTk1MDgsIDU5NTE4LCA1OTUzMywgNTk1NDMsIDU5NTQ3LCA1OTU1NywgNTk1NjMsIDU5NTY5LCAKKyAgICA1OTU3NSwgNTk1ODAsIDU5NTgzLCA1OTU4OCwgNTk1OTIsIDAsIDU5NTk4LCA1OTYwMiwgNTk2MDUsIDU5NjA5LCA1OTYxMiwgCisgICAgNTk2MTYsIDU5NjE5LCA1OTYyMywgNTk2MjYsIDU5NjMwLCA1OTYzMywgNTk2MzYsIDU5NjQwLCA1OTY0NCwgNTk2NDgsIAorICAgIDU5NjUyLCA1OTY1NiwgNTk2NjAsIDU5NjY0LCA1OTY2OCwgNTk2NzIsIDU5Njc1LCA1OTY3OSwgNTk2ODMsIDU5Njg3LCAKKyAgICA1OTY5MSwgNTk2OTUsIDU5Njk5LCA1OTcwMywgNTk3MDcsIDU5NzExLCA1OTcxNSwgNTk3MTksIDU5NzIzLCA1OTcyNywgCisgICAgNTk3MzIsIDU5NzM2LCA1OTc0MCwgNTk3NDQsIDU5NzQ4LCA1OTc1MSwgNTk3NTUsIDU5NzU4LCA1OTc2MiwgNTk3NjYsIAorICAgIDU5NzcwLCA1OTc3NCwgNTk3NzcsIDU5NzgxLCA1OTc4NCwgNTk3ODgsIDU5NzkyLCA1OTc5NiwgNTk4MDAsIDU5ODA0LCAKKyAgICA1OTgwOCwgNTk4MTIsIDU5ODE2LCA1OTgyMCwgNTk4MjQsIDU5ODI4LCA1OTgzMiwgNTk4MzUsIDU5ODM5LCA1OTg0MywgCisgICAgNTk4NDcsIDU5ODUxLCA1OTg1NSwgNTk4NTgsIDU5ODYzLCA1OTg2NywgNTk4NzIsIDU5ODc2LCA1OTg3OSwgNTk4ODMsIAorICAgIDU5ODg3LCA1OTg5MSwgNTk4OTUsIDU5OTAwLCA1OTkwNCwgNTk5MDgsIDU5OTEyLCA1OTkxNiwgNTk5MjAsIDU5OTI0LCAKKyAgICA1OTkyOCwgMCwgMCwgNTk5MzMsIDU5OTQxLCA1OTk0OSwgNTk5NTYsIDU5OTYzLCA1OTk2NywgNTk5NzMsIDU5OTc4LCAKKyAgICA1OTk4MywgNTk5ODcsIDU5OTkwLCA1OTk5NCwgNTk5OTcsIDYwMDAxLCA2MDAwNCwgNjAwMDgsIDYwMDExLCA2MDAxNSwgCisgICAgNjAwMTgsIDYwMDIxLCA2MDAyNSwgNjAwMjksIDYwMDMzLCA2MDAzNywgNjAwNDEsIDYwMDQ1LCA2MDA0OSwgNjAwNTMsIAorICAgIDYwMDU3LCA2MDA2MCwgNjAwNjQsIDYwMDY4LCA2MDA3MiwgNjAwNzYsIDYwMDgwLCA2MDA4NCwgNjAwODgsIDYwMDkyLCAKKyAgICA2MDA5NiwgNjAxMDAsIDYwMTA0LCA2MDEwOCwgNjAxMTIsIDYwMTE3LCA2MDEyMSwgNjAxMjUsIDYwMTI5LCA2MDEzMywgCisgICAgNjAxMzYsIDYwMTQwLCA2MDE0MywgNjAxNDcsIDYwMTUxLCA2MDE1NSwgNjAxNTksIDYwMTYyLCA2MDE2NiwgNjAxNjksIAorICAgIDYwMTczLCA2MDE3NywgNjAxODEsIDYwMTg1LCA2MDE4OSwgNjAxOTMsIDYwMTk3LCA2MDIwMSwgNjAyMDUsIDYwMjA5LCAKKyAgICA2MDIxMywgNjAyMTcsIDYwMjIwLCA2MDIyNCwgNjAyMjgsIDYwMjMyLCA2MDIzNiwgNjAyNDAsIDYwMjQzLCA2MDI0OCwgCisgICAgNjAyNTIsIDYwMjU3LCA2MDI2MSwgNjAyNjQsIDYwMjY4LCA2MDI3MiwgNjAyNzYsIDYwMjgwLCA2MDI4NSwgNjAyODksIAorICAgIDYwMjkzLCA2MDI5NywgNjAzMDEsIDYwMzA1LCA2MDMwOSwgNjAzMTMsIDYwMzE4LCA2MDMyMiwgNjAzMjYsIDYwMzMwLCAKKyAgICA2MDMzNCwgNjAzMzksIDYwMzQ2LCA2MDM1MCwgNjAzNTYsIDAsIDAsIDAsIDAsIDAsIDYwMzYxLCA2MDM2NiwgNjAzNzEsIAorICAgIDYwMzc1LCA2MDM4MCwgNjAzODUsIDYwMzkwLCA2MDM5NSwgNjAzOTksIDYwNDA0LCA2MDQwOSwgNjA0MTQsIDYwNDE5LCAKKyAgICA2MDQyNCwgNjA0MjksIDYwNDM0LCA2MDQzOSwgNjA0NDQsIDYwNDQ4LCA2MDQ1MywgNjA0NTgsIDYwNDYzLCA2MDQ2NywgCisgICAgNjA0NzEsIDYwNDc1LCA2MDQ4MCwgNjA0ODUsIDYwNDkwLCA2MDQ5NSwgNjA1MDAsIDYwNTA1LCA2MDUxMCwgNjA1MTUsIAorICAgIDYwNTIwLCA2MDUyNSwgNjA1MjksIDYwNTMzLCA2MDUzOCwgNjA1NDMsIDYwNTQ4LCA2MDU1MywgMCwgMCwgMCwgNjA1NTgsIAorICAgIDYwNTYyLCA2MDU2NiwgNjA1NzAsIDYwNTc0LCA2MDU3OCwgNjA1ODIsIDYwNTg2LCA2MDU5MCwgNjA1OTQsIDYwNTk4LCAKKyAgICA2MDYwMiwgNjA2MDYsIDYwNjEwLCA2MDYxNCwgNjA2MTgsIDYwNjIyLCA2MDYyNiwgNjA2MzAsIDYwNjM0LCA2MDYzOCwgCisgICAgNjA2NDIsIDYwNjQ2LCA2MDY1MCwgNjA2NTQsIDYwNjU4LCA2MDY2MiwgNjA2NjYsIDYwNjcwLCA2MDY3NCwgNjA2NzgsIAorICAgIDYwNjgxLCA2MDY4NSwgNjA2ODgsIDYwNjkyLCA2MDY5NiwgNjA2OTksIDYwNzAzLCA2MDcwNywgNjA3MTAsIDYwNzE0LCAKKyAgICA2MDcxOCwgNjA3MjIsIDYwNzI2LCA2MDcyOSwgNjA3MzMsIDYwNzM3LCA2MDc0MSwgNjA3NDUsIDYwNzQ5LCA2MDc1MywgCisgICAgNjA3NTYsIDYwNzU5LCA2MDc2MywgNjA3NjcsIDYwNzcxLCA2MDc3NSwgNjA3NzksIDYwNzgzLCA2MDc4NywgNjA3OTEsIAorICAgIDYwNzk1LCA2MDc5OSwgNjA4MDMsIDYwODA3LCA2MDgxMSwgNjA4MTUsIDYwODE5LCA2MDgyMywgNjA4MjcsIDYwODMxLCAKKyAgICA2MDgzNSwgNjA4MzksIDYwODQzLCA2MDg0NywgNjA4NTEsIDYwODU1LCA2MDg1OSwgNjA4NjMsIDYwODY3LCA2MDg3MSwgCisgICAgNjA4NzUsIDYwODc5LCA2MDg4MywgNjA4ODcsIDYwODkxLCA2MDg5NSwgNjA4OTksIDYwOTAzLCA2MDkwNywgNjA5MTEsIAorICAgIDYwOTE1LCA2MDkxOSwgNjA5MjMsIDAsIDYwOTI3LCA2MDkzMywgNjA5MzksIDYwOTQ0LCA2MDk0OSwgNjA5NTQsIDYwOTYwLCAKKyAgICA2MDk2NiwgNjA5NzIsIDYwOTc4LCA2MDk4NCwgNjA5OTAsIDYwOTk2LCA2MTAwMiwgNjEwMDgsIDYxMDE0LCA2MTAyMCwgCisgICAgNjEwMjUsIDYxMDMwLCA2MTAzNSwgNjEwNDAsIDYxMDQ1LCA2MTA1MCwgNjEwNTUsIDYxMDYwLCA2MTA2NSwgNjEwNzAsIAorICAgIDYxMDc1LCA2MTA4MCwgNjEwODUsIDYxMDkwLCA2MTA5NSwgNjExMDAsIDYxMTA1LCA2MTExMCwgNjExMTUsIDYxMTIwLCAKKyAgICA2MTEyNiwgNjExMzIsIDYxMTM4LCA2MTE0NCwgNjExNDksIDYxMTU0LCAwLCAwLCAwLCAwLCAwLCA2MTE1OSwgNjExNjQsIAorICAgIDYxMTY5LCA2MTE3NCwgNjExNzksIDYxMTg0LCA2MTE4OSwgNjExOTQsIDYxMTk5LCA2MTIwNCwgNjEyMDksIDYxMjE0LCAKKyAgICA2MTIxOSwgNjEyMjQsIDYxMjI5LCA2MTIzNCwgNjEyMzksIDYxMjQ0LCA2MTI0OSwgNjEyNTQsIDYxMjU5LCA2MTI2NCwgCisgICAgNjEyNjksIDYxMjc0LCA2MTI3OSwgNjEyODQsIDYxMjg5LCA2MTI5NCwgNjEyOTksIDYxMzA0LCA2MTMwOSwgNjEzMTQsIAorICAgIDYxMzE5LCA2MTMyNCwgNjEzMjksIDYxMzM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMzOSwgCisgICAgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTgsIDYxMzYzLCA2MTM2NywgNjEzNzIsIDYxMzc3LCA2MTM4MiwgNjEzODcsIAorICAgIDYxMzkyLCA2MTM5NiwgNjE0MDEsIDYxNDA2LCA2MTQxMSwgNjE0MTYsIDYxNDIwLCA2MTQyNCwgNjE0MjgsIDYxNDMyLCAKKyAgICA2MTQzNiwgNjE0NDAsIDYxNDQ0LCA2MTQ0OCwgNjE0NTIsIDYxNDU2LCA2MTQ2MCwgNjE0NjQsIDYxNDY4LCA2MTQ3MiwgCisgICAgNjE0NzcsIDYxNDgyLCA2MTQ4NywgNjE0OTIsIDYxNDk3LCA2MTUwMiwgNjE1MDcsIDYxNTEyLCA2MTUxNywgNjE1MjIsIAorICAgIDYxNTI3LCA2MTUzMiwgNjE1MzcsIDYxNTQyLCA2MTU0NywgNjE1NTMsIDAsIDYxNTYwLCA2MTU2MywgNjE1NjYsIDYxNTY5LCAKKyAgICA2MTU3MiwgNjE1NzUsIDYxNTc4LCA2MTU4MSwgNjE1ODQsIDYxNTg3LCA2MTU5MSwgNjE1OTUsIDYxNTk5LCA2MTYwMywgCisgICAgNjE2MDcsIDYxNjExLCA2MTYxNSwgNjE2MTksIDYxNjIzLCA2MTYyNywgNjE2MzEsIDYxNjM1LCA2MTYzOSwgNjE2NDMsIAorICAgIDYxNjQ3LCA2MTY1MSwgNjE2NTUsIDYxNjU5LCA2MTY2MywgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjgzLCAKKyAgICA2MTY4NywgNjE2OTEsIDYxNjk1LCA2MTY5OSwgNjE3MDMsIDYxNzA3LCA2MTcxMSwgNjE3MjAsIDYxNzI5LCA2MTczOCwgCisgICAgNjE3NDcsIDYxNzU2LCA2MTc2NSwgNjE3NzQsIDYxNzgzLCA2MTc4NiwgNjE3OTEsIDYxNzk2LCA2MTgwMSwgNjE4MDYsIAorICAgIDYxODExLCA2MTgxNiwgNjE4MjEsIDYxODI2LCA2MTgzMSwgNjE4MzUsIDYxODQwLCA2MTg0NSwgNjE4NTAsIDYxODU1LCAKKyAgICA2MTg2MCwgNjE4NjQsIDYxODY4LCA2MTg3MiwgNjE4NzYsIDYxODgwLCA2MTg4NCwgNjE4ODgsIDYxODkyLCA2MTg5NiwgCisgICAgNjE5MDAsIDYxOTA0LCA2MTkwOCwgNjE5MTIsIDYxOTE2LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzNiwgNjE5NDEsIAorICAgIDYxOTQ2LCA2MTk1MSwgNjE5NTYsIDYxOTYxLCA2MTk2NiwgNjE5NzEsIDYxOTc2LCA2MTk4MSwgNjE5ODYsIDYxOTkyLCAKKyAgICA2MTk5OCwgNjIwMDMsIDYyMDA4LCA2MjAxMSwgNjIwMTQsIDYyMDE3LCA2MjAyMCwgNjIwMjMsIDYyMDI2LCA2MjAyOSwgCisgICAgNjIwMzIsIDYyMDM1LCA2MjAzOSwgNjIwNDMsIDYyMDQ3LCA2MjA1MSwgNjIwNTUsIDYyMDU5LCA2MjA2MywgNjIwNjcsIAorICAgIDYyMDcxLCA2MjA3NSwgNjIwNzksIDYyMDgzLCA2MjA4NywgNjIwOTEsIDYyMDk1LCA2MjA5OSwgNjIxMDMsIDYyMTA3LCAKKyAgICA2MjExMSwgNjIxMTUsIDYyMTE5LCA2MjEyMywgNjIxMjcsIDYyMTMxLCA2MjEzNSwgNjIxMzksIDYyMTQzLCA2MjE0NywgCisgICAgNjIxNTEsIDYyMTU1LCA2MjE1OSwgNjIxNjMsIDYyMTY3LCA2MjE3MSwgNjIxNzUsIDYyMTc5LCA2MjE4MywgNjIxODcsIAorICAgIDYyMTkxLCA2MjE5NSwgNjIyMDAsIDYyMjA1LCA2MjIxMCwgNjIyMTUsIDYyMjE5LCA2MjIyNCwgNjIyMjksIDYyMjM0LCAKKyAgICA2MjIzOSwgNjIyNDQsIDYyMjQ5LCA2MjI1NCwgNjIyNTksIDYyMjY0LCA2MjI2OCwgNjIyNzUsIDYyMjgyLCA2MjI4OSwgCisgICAgNjIyOTYsIDYyMzAzLCA2MjMxMCwgNjIzMTcsIDYyMzI0LCA2MjMzMSwgNjIzMzgsIDYyMzQ1LCA2MjM1MiwgNjIzNTUsIAorICAgIDYyMzU4LCA2MjM2MSwgNjIzNjYsIDYyMzY5LCA2MjM3MiwgNjIzNzUsIDYyMzc4LCA2MjM4MSwgNjIzODQsIDYyMzg4LCAKKyAgICA2MjM5MiwgNjIzOTYsIDYyNDAwLCA2MjQwMywgNjI0MDcsIDYyNDExLCA2MjQxNSwgNjI0MTksIDYyNDIzLCA2MjQyNywgCisgICAgNjI0MzEsIDYyNDM1LCA2MjQzOCwgNjI0NDEsIDYyNDQ1LCA2MjQ0OSwgNjI0NTMsIDYyNDU3LCA2MjQ2MCwgNjI0NjQsIAorICAgIDYyNDY4LCA2MjQ3MiwgNjI0NzYsIDYyNDc5LCA2MjQ4MywgNjI0ODcsIDYyNDkxLCA2MjQ5NSwgNjI0OTgsIDYyNTAyLCAKKyAgICA2MjUwNiwgNjI1MDksIDYyNTEzLCA2MjUxNywgNjI1MjEsIDYyNTI1LCA2MjUyOSwgNjI1MzMsIDYyNTM3LCAwLCA2MjU0MSwgCisgICAgNjI1NDQsIDYyNTQ3LCA2MjU1MCwgNjI1NTMsIDYyNTU2LCA2MjU1OSwgNjI1NjIsIDYyNTY1LCA2MjU2OCwgNjI1NzEsIAorICAgIDYyNTc0LCA2MjU3NywgNjI1ODAsIDYyNTgzLCA2MjU4NiwgNjI1ODksIDYyNTkyLCA2MjU5NSwgNjI1OTgsIDYyNjAxLCAKKyAgICA2MjYwNCwgNjI2MDcsIDYyNjEwLCA2MjYxMywgNjI2MTYsIDYyNjE5LCA2MjYyMiwgNjI2MjUsIDYyNjI4LCA2MjYzMSwgCisgICAgNjI2MzQsIDYyNjM3LCA2MjY0MCwgNjI2NDMsIDYyNjQ2LCA2MjY0OSwgNjI2NTIsIDYyNjU1LCA2MjY1OCwgNjI2NjEsIAorICAgIDYyNjY0LCA2MjY2NywgNjI2NzAsIDYyNjczLCA2MjY3NiwgNjI2NzksIDYyNjgyLCA2MjY4NSwgNjI2ODgsIDYyNjkxLCAKKyAgICA2MjY5NCwgNjI2OTcsIDYyNzAwLCA2MjcwMywgNjI3MDYsIDYyNzA5LCA2MjcxMiwgNjI3MTUsIDYyNzE4LCA2MjcyMSwgCisgICAgNjI3MjQsIDYyNzI3LCA2MjczMCwgNjI3MzMsIDYyNzM2LCA2MjczOSwgNjI3NDIsIDYyNzQ1LCA2Mjc0OCwgNjI3NTEsIAorICAgIDYyNzU0LCA2Mjc1NywgNjI3NjAsIDYyNzYzLCA2Mjc2NiwgNjI3NjksIDYyNzcyLCA2Mjc3NSwgNjI3NzgsIDYyNzgxLCAKKyAgICA2Mjc4NCwgNjI3ODcsIDYyNzkwLCA2Mjc5MywgNjI3OTYsIDYyNzk5LCA2MjgwMiwgNjI4MDUsIDYyODE0LCA2MjgyMiwgCisgICAgNjI4MzAsIDYyODM4LCA2Mjg0NiwgNjI4NTQsIDYyODYyLCA2Mjg3MCwgNjI4NzgsIDYyODg2LCA2Mjg5NSwgNjI5MDQsIAorICAgIDYyOTEzLCA2MjkyMiwgNjI5MzEsIDYyOTQwLCA2Mjk0OSwgNjI5NTgsIDYyOTY3LCA2Mjk3NiwgNjI5ODUsIDYyOTk0LCAKKyAgICA2MzAwMywgNjMwMTIsIDYzMDIxLCA2MzAyNCwgNjMwMjcsIDYzMDMwLCA2MzAzMiwgNjMwMzUsIDYzMDM4LCA2MzA0MSwgCisgICAgNjMwNDYsIDYzMDUxLCA2MzA1NCwgNjMwNjEsIDYzMDY4LCA2MzA3NSwgNjMwODIsIDYzMDg1LCA2MzA5MCwgNjMwOTIsIAorICAgIDYzMDk2LCA2MzA5OCwgNjMxMDAsIDYzMTAzLCA2MzEwNiwgNjMxMDksIDYzMTEyLCA2MzExNSwgNjMxMTgsIDYzMTIxLCAKKyAgICA2MzEyNiwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCA2MzE0NiwgNjMxNDksIDYzMTUyLCA2MzE1NiwgCisgICAgNjMxNTksIDYzMTYyLCA2MzE2NSwgNjMxNjgsIDYzMTcxLCA2MzE3NSwgNjMxNzgsIDYzMTgxLCA2MzE4NCwgNjMxODksIAorICAgIDYzMTk0LCA2MzE5OSwgNjMyMDQsIDYzMjA5LCA2MzIxNCwgNjMyMTksIDYzMjI0LCA2MzIzMCwgNjMyMzgsIDYzMjQwLCAKKyAgICA2MzI0MywgNjMyNDYsIDYzMjQ5LCA2MzI1MiwgNjMyNTgsIDYzMjY2LCA2MzI2OSwgNjMyNzIsIDYzMjc3LCA2MzI4MCwgCisgICAgNjMyODMsIDYzMjg2LCA2MzI5MSwgNjMyOTQsIDYzMjk3LCA2MzMwMiwgNjMzMDUsIDYzMzA4LCA2MzMxMywgNjMzMTYsIAorICAgIDYzMzE5LCA2MzMyNCwgNjMzMjksIDYzMzM0LCA2MzMzNywgNjMzNDAsIDYzMzQzLCA2MzM0NiwgNjMzNTIsIDYzMzU1LCAKKyAgICA2MzM1OCwgNjMzNjEsIDYzMzYzLCA2MzM2NiwgNjMzNjksIDYzMzcyLCA2MzM3NywgNjMzODAsIDYzMzgzLCA2MzM4NiwgCisgICAgNjMzODksIDYzMzkyLCA2MzM5NywgNjM0MDAsIDYzNDAzLCA2MzQwNiwgNjM0MDksIDYzNDEyLCA2MzQxNSwgNjM0MTgsIAorICAgIDYzNDIxLCA2MzQyNCwgNjM0MjksIDYzNDMzLCA2MzQ0MSwgNjM0NDksIDYzNDU3LCA2MzQ2NSwgNjM0NzMsIDYzNDgxLCAKKyAgICA2MzQ4OSwgNjM0OTcsIDYzNTA1LCA2MzUxNCwgNjM1MjMsIDYzNTMyLCA2MzU0MSwgNjM1NTAsIDYzNTU5LCA2MzU2OCwgCisgICAgNjM1NzcsIDYzNTg2LCA2MzU5NSwgNjM2MDQsIDYzNjEzLCA2MzYyMiwgNjM2MzEsIDYzNjQwLCA2MzY0OSwgNjM2NTgsIAorICAgIDYzNjY3LCA2MzY3NiwgNjM2ODUsIDYzNjk0LCA2MzcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM2NzgsIDYzNjg3LCA2MzY5NiwgNjM3MDcsIAotICAgIDYzNzE0LCA2MzcxOSwgNjM3MjQsIDYzNzMxLCA2MzczOCwgNjM3NDQsIDYzNzQ5LCA2Mzc1NCwgNjM3NTksIDYzNzY0LCAKLSAgICA2Mzc3MSwgNjM3NzYsIDYzNzgxLCA2Mzc4NiwgNjM3OTcsIDYzODAyLCA2MzgwNywgNjM4MTQsIDYzODE5LCA2MzgyNiwgCi0gICAgNjM4MzEsIDYzODM2LCA2Mzg0MywgNjM4NTAsIDYzODU3LCA2Mzg2NiwgNjM4NzUsIDYzODgwLCA2Mzg4NSwgNjM4OTAsIAotICAgIDYzODk3LCA2MzkwMiwgNjM5MTIsIDYzOTE5LCA2MzkyNCwgNjM5MjksIDYzOTM0LCA2MzkzOSwgNjM5NDQsIDYzOTQ5LCAKLSAgICA2Mzk1OCwgNjM5NjUsIDYzOTcyLCA2Mzk3NywgNjM5ODQsIDYzOTg5LCA2Mzk5NiwgNjQwMDUsIDY0MDE2LCA2NDAyMSwgCi0gICAgNjQwMzAsIDY0MDM1LCA2NDA0MiwgNjQwNTEsIDY0MDYwLCA2NDA2NSwgNjQwNzAsIDY0MDc3LCA2NDA4MywgNjQwOTAsIAotICAgIDY0MDk3LCA2NDEwMSwgNjQxMDUsIDY0MTA4LCA2NDExMiwgNjQxMTYsIDY0MTIwLCA2NDEyNCwgNjQxMjgsIDY0MTMyLCAKLSAgICA2NDEzNiwgNjQxMzksIDY0MTQzLCA2NDE0NywgNjQxNTEsIDY0MTU1LCA2NDE1OSwgNjQxNjMsIDY0MTY2LCA2NDE3MCwgCi0gICAgNjQxNzQsIDY0MTc3LCA2NDE4MSwgNjQxODUsIDY0MTg5LCA2NDE5MywgNjQxOTcsIDY0MjAxLCA2NDIwNSwgNjQyMDksIAotICAgIDY0MjEzLCA2NDIxNywgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCAKLSAgICA2NDI1MywgNjQyNTcsIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgCi0gICAgNjQyOTMsIDY0Mjk3LCA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIAotICAgIDY0MzMzLCA2NDMzNywgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU2LCA2NDM2MCwgNjQzNjQsIDY0MzY4LCAKLSAgICA2NDM3MiwgNjQzNzYsIDY0MzgwLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgCi0gICAgNjQ0MTIsIDY0NDE2LCA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIAotICAgIDY0NDUyLCA2NDQ1NiwgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCAKLSAgICA2NDQ5MiwgNjQ0OTYsIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgCi0gICAgNjQ1MzIsIDY0NTM2LCA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIAotICAgIDY0NTcyLCA2NDU3NiwgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCAKLSAgICA2NDYxMiwgNjQ2MTYsIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgCi0gICAgNjQ2NTIsIDY0NjU2LCA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIAotICAgIDY0NjkyLCA2NDY5NiwgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCAKLSAgICA2NDczMiwgNjQ3MzYsIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgCi0gICAgNjQ3NzIsIDY0Nzc2LCA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIAotICAgIDY0ODEyLCA2NDgxNiwgNjQ4MjAsIDY0ODI0LCA2NDgyNywgNjQ4MzEsIDY0ODM1LCA2NDgzOSwgNjQ4NDMsIDY0ODQ3LCAKLSAgICA2NDg1MSwgNjQ4NTUsIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgCi0gICAgNjQ4OTEsIDY0ODk1LCA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIAotICAgIDY0OTMxLCA2NDkzNSwgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCAKLSAgICA2NDk3MSwgNjQ5NzUsIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgCi0gICAgNjUwMTEsIDY1MDE1LCA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIAotICAgIDY1MDUxLCA2NTA1NSwgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCAKLSAgICA2NTA5MSwgNjUwOTUsIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgCi0gICAgNjUxMzEsIDY1MTM1LCA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIAotICAgIDY1MTcxLCA2NTE3NSwgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCAKLSAgICA2NTIxMSwgNjUyMTUsIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgCi0gICAgNjUyNTEsIDY1MjU1LCA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIAotICAgIDY1MjkwLCA2NTI5NCwgNjUyOTgsIDY1MzAyLCA2NTMwNiwgNjUzMTAsIDY1MzE0LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCAKLSAgICA2NTMzMCwgNjUzMzQsIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgCi0gICAgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIAotICAgIDY1NDEwLCA2NTQxNCwgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCAKLSAgICA2NTQ1MCwgNjU0NTQsIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgCi0gICAgNjU0OTAsIDY1NDk0LCA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIAotICAgIDY1NTMwLCA2NTUzNCwgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCAKLSAgICA2NTU3MCwgNjU1NzQsIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgCi0gICAgNjU2MTAsIDY1NjE0LCA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIAotICAgIDY1NjQ5LCA2NTY1MywgNjU2NTcsIDY1NjYxLCA2NTY2NSwgNjU2NjksIDY1NjczLCA2NTY3NywgNjU2ODEsIDY1Njg1LCAKLSAgICA2NTY4OSwgNjU2OTMsIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgCi0gICAgNjU3MjksIDY1NzMzLCA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIAotICAgIDY1NzY5LCA2NTc3MywgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCAKLSAgICA2NTgwOSwgNjU4MTMsIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgCi0gICAgNjU4NDksIDY1ODUzLCA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIAotICAgIDY1ODg5LCA2NTg5MywgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCAKLSAgICA2NTkyOSwgNjU5MzMsIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgCi0gICAgNjU5NjksIDY1OTczLCA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIAotICAgIDY2MDA5LCA2NjAxMywgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCAKLSAgICA2NjA0OSwgNjYwNTMsIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgCi0gICAgNjYwODksIDY2MDkzLCA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIAotICAgIDY2MTI5LCA2NjEzMywgNjYxMzcsIDY2MTQxLCA2NjE0NCwgNjYxNDgsIDY2MTUyLCA2NjE1NiwgNjYxNjAsIDY2MTY0LCAKLSAgICA2NjE2OCwgNjYxNzIsIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgCi0gICAgNjYyMDgsIDY2MjEyLCA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIAotICAgIDY2MjQ4LCA2NjI1MiwgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCAKLSAgICA2NjI4OCwgNjYyOTIsIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgCi0gICAgNjYzMjgsIDY2MzMyLCA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIAotICAgIDY2MzY4LCA2NjM3MiwgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCAKLSAgICA2NjQwOCwgNjY0MTIsIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgCi0gICAgNjY0NDgsIDY2NDUyLCA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIAotICAgIDY2NDg4LCA2NjQ5MiwgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCAKLSAgICA2NjUyOCwgNjY1MzIsIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgCi0gICAgNjY1NjgsIDY2NTcyLCA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjU5OSwgNjY2MDMsIAotICAgIDY2NjA3LCA2NjYxMSwgNjY2MTUsIDY2NjE5LCA2NjYyMywgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCAKLSAgICA2NjY0NywgNjY2NTEsIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgCi0gICAgNjY2ODcsIDY2NjkxLCA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIAotICAgIDY2NzI3LCA2NjczMSwgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCAKLSAgICA2Njc2NywgNjY3NzEsIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgCi0gICAgNjY4MDcsIDY2ODExLCA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIAotICAgIDY2ODQ3LCA2Njg1MSwgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCAKLSAgICA2Njg4NywgNjY4OTEsIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgCi0gICAgNjY5MjcsIDY2OTMxLCA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIAotICAgIDY2OTY3LCA2Njk3MSwgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCAKLSAgICA2NzAwNywgNjcwMTEsIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgCi0gICAgNjcwNDcsIDY3MDUxLCA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIAotICAgIDY3MDg3LCA2NzA5MSwgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCAKLSAgICA2NzEyNywgNjcxMzEsIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgCi0gICAgNjcxNjcsIDY3MTcxLCA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDIsIAotICAgIDY3MjA2LCA2NzIxMCwgNjcyMTQsIDY3MjE4LCA2NzIyMiwgNjcyMjYsIDY3MjMwLCA2NzIzMywgNjcyMzcsIDY3MjQxLCAKLSAgICA2NzI0NSwgNjcyNDksIDY3MjUzLCA2NzI1NywgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgCi0gICAgNjcyODUsIDY3Mjg5LCA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIAotICAgIDY3MzI1LCA2NzMyOSwgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCAKLSAgICA2NzM2NSwgNjczNjksIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgCi0gICAgNjc0MDUsIDY3NDA5LCA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIAotICAgIDY3NDQ1LCA2NzQ0OSwgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCAKLSAgICA2NzQ4NSwgNjc0ODksIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgCi0gICAgNjc1MjUsIDY3NTI5LCA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIAotICAgIDY3NTY1LCA2NzU2OSwgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCAKLSAgICA2NzYwNSwgNjc2MDksIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgCi0gICAgNjc2NDUsIDY3NjQ5LCA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIAotICAgIDY3Njg1LCA2NzY4OSwgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCAKLSAgICA2NzcyNSwgNjc3MjksIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgCi0gICAgNjc3NjUsIDY3NzY5LCA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIAotICAgIDY3ODA1LCA2NzgwOSwgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCAKLSAgICA2Nzg0NSwgNjc4NDksIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgCi0gICAgNjc4ODUsIDY3ODg5LCA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIAotICAgIDY3OTI1LCA2NzkyOSwgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYwLCAKLSAgICA2Nzk2NCwgNjc5NjgsIDY3OTcyLCA2Nzk3NiwgNjc5ODAsIDY3OTg0LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgCi0gICAgNjgwMDQsIDY4MDA4LCA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIAotICAgIDY4MDQ0LCA2ODA0OCwgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCAKLSAgICA2ODA4NCwgNjgwODgsIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgCi0gICAgNjgxMjQsIDY4MTI4LCA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIAotICAgIDY4MTY0LCA2ODE2OCwgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCAKLSAgICA2ODIwNCwgNjgyMDgsIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgCi0gICAgNjgyNDQsIDY4MjQ4LCA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIAotICAgIDY4Mjg0LCA2ODI4OCwgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCAKLSAgICA2ODMyNCwgNjgzMjgsIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgCi0gICAgNjgzNjQsIDY4MzY4LCA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIAotICAgIDY4NDA0LCA2ODQwOCwgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCAKLSAgICA2ODQ0NCwgNjg0NDgsIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgCi0gICAgNjg0ODQsIDY4NDg4LCA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIAotICAgIDY4NTI0LCA2ODUyOCwgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCAKLSAgICA2ODU2NCwgNjg1NjgsIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgCi0gICAgNjg2MDQsIDY4NjA4LCA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIAotICAgIDY4NjQ0LCA2ODY0OCwgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCAKLSAgICA2ODY4NCwgNjg2ODgsIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgCi0gICAgNjg3MjQsIDY4NzI4LCA2ODczMiwgNjg3MzYsIDY4NzQwLCAwLCAwLCAwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgCi0gICAgNjg3NjAsIDY4NzY0LCA2ODc2OCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIAotICAgIDY4ODAwLCA2ODgwNCwgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCAKLSAgICA2ODg0MCwgNjg4NDQsIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgCi0gICAgNjg4ODAsIDY4ODg0LCA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIAotICAgIDY4OTIwLCA2ODkyNCwgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCAKLSAgICA2ODk2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg5NjQsIDY4OTY5LCA2ODk3MywgNjg5NzgsIDY4OTgzLCAKLSAgICA2ODk4OCwgNjg5OTMsIDY4OTk4LCA2OTAwMiwgNjkwMDcsIDY5MDEyLCA2OTAxNywgNjkwMjIsIDY5MDI3LCA2OTAzMiwgCi0gICAgNjkwMzcsIDY5MDQxLCA2OTA0NSwgNjkwNTAsIDY5MDU0LCA2OTA1OSwgNjkwNjQsIDY5MDY5LCA2OTA3MywgNjkwNzgsIAotICAgIDY5MDgzLCA2OTA4OCwgNjkwOTMsIDY5MDk4LCA2OTEwMiwgNjkxMDcsIDY5MTExLCA2OTExNiwgNjkxMjAsIDY5MTI1LCAKLSAgICA2OTEyOSwgNjkxMzMsIDY5MTM3LCA2OTE0MiwgNjkxNDcsIDY5MTUyLCA2OTE2MCwgNjkxNjgsIDY5MTc2LCA2OTE4NCwgCi0gICAgNjkxOTEsIDY5MTk5LCA2OTIwNSwgNjkyMTMsIDY5MjE3LCA2OTIyMSwgNjkyMjUsIDY5MjI5LCA2OTIzMywgNjkyMzcsIAotICAgIDY5MjQxLCA2OTI0NSwgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCAKLSAgICA2OTI4MSwgNjkyODUsIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgCi0gICAgNjkzMjEsIDY5MzI1LCA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIAotICAgIDY5MzYwLCA2OTM2NCwgNjkzNjgsIDY5MzcyLCA2OTM3NiwgNjkzODAsIDY5Mzg0LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCAKLSAgICA2OTQwMCwgNjk0MDQsIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgCi0gICAgNjk0NDAsIDY5NDQ0LCA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIAotICAgIDY5NDgwLCA2OTQ4NCwgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwNywgNjk1MTEsIDY5NTE1LCAKLSAgICA2OTUxOCwgNjk1MjIsIDY5NTI2LCA2OTUzMCwgNjk1MzMsIDY5NTM3LCA2OTU0MSwgNjk1NDUsIDY5NTQ5LCA2OTU1MywgCi0gICAgNjk1NTcsIDY5NTYxLCA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTIsIAotICAgIDY5NTk2LCA2OTYwMCwgNjk2MDMsIDY5NjA3LCA2OTYxMSwgNjk2MTUsIDY5NjE5LCA2OTYyMywgNjk2MjcsIDY5NjMwLCAKLSAgICA2OTYzMywgNjk2MzcsIDY5NjQxLCA2OTY0NSwgNjk2NDgsIDY5NjUxLCA2OTY1NSwgNjk2NTksIDY5NjYzLCA2OTY2NywgCi0gICAgNjk2NzEsIDY5Njc1LCA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIAotICAgIDY5NzExLCA2OTcxNSwgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCAKLSAgICA2OTc1MSwgNjk3NTUsIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgCi0gICAgNjk3OTEsIDY5Nzk1LCA2OTc5OSwgNjk4MDIsIDY5ODA2LCA2OTgxMCwgNjk4MTQsIDY5ODE4LCA2OTgyMiwgNjk4MjYsIAotICAgIDY5ODMwLCA2OTgzNCwgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCAKLSAgICA2OTg3MCwgNjk4NzQsIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgCi0gICAgNjk5MTAsIDY5OTE0LCA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIAotICAgIDY5OTQ5LCA2OTk1MywgNjk5NTcsIDY5OTYxLCA2OTk2NSwgNjk5NjksIDY5OTczLCA2OTk3NywgNjk5ODEsIDY5OTg1LCAKLSAgICA2OTk4OSwgNjk5OTMsIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTYsIDcwMDIwLCA3MDAyNCwgCi0gICAgNzAwMjgsIDcwMDMyLCA3MDAzNiwgNzAwNDAsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIAotICAgIDcwMDY4LCA3MDA3MiwgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTAzLCAKLSAgICA3MDEwNywgNzAxMTEsIDcwMTE1LCA3MDExOSwgNzAxMjMsIDcwMTI3LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgCi0gICAgNzAxNDcsIDcwMTUxLCA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIAotICAgIDcwMTg3LCA3MDE5MSwgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCAKLSAgICA3MDIyNywgNzAyMzEsIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgCi0gICAgNzAyNjcsIDcwMjcxLCA3MDI3NSwgNzAyNzgsIDcwMjgzLCA3MDI4NywgNzAyOTMsIDcwMjk4LCA3MDMwNCwgNzAzMDgsIAotICAgIDcwMzEyLCA3MDMxNiwgNzAzMjAsIDcwMzI0LCA3MDMyOCwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCAKLSAgICA3MDM1MiwgNzAzNTYsIDcwMzYwLCA3MDM2MywgNzAzNjYsIDcwMzY5LCA3MDM3MiwgNzAzNzUsIDcwMzc4LCA3MDM4MSwgCi0gICAgNzAzODQsIDcwMzg3LCA3MDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzAzOTgsIDcwNDAzLCA3MDQwOCwgNzA0MTMsIDcwNDE4LCA3MDQyNSwgNzA0MzIsIDcwNDM3LCA3MDQ0MiwgCi0gICAgNzA0NDcsIDcwNDUyLCA3MDQ1OSwgNzA0NjYsIDcwNDczLCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwNCwgNzA1MTQsIAotICAgIDcwNTIxLCA3MDUyOCwgNzA1MzUsIDcwNTQyLCA3MDU0OCwgNzA1NTQsIDcwNTYzLCA3MDU3MiwgNzA1NzksIDcwNTg2LCAKLSAgICA3MDU5NywgNzA2MDgsIDcwNjEzLCA3MDYxOCwgNzA2MjUsIDcwNjMyLCA3MDYzOSwgNzA2NDYsIDcwNjUzLCA3MDY2MCwgCi0gICAgNzA2NjcsIDcwNjc0LCA3MDY4MCwgNzA2ODYsIDcwNjkyLCA3MDY5OCwgNzA3MDUsIDcwNzEyLCA3MDcxNywgNzA3MjEsIAotICAgIDcwNzI4LCA3MDczNSwgNzA3NDIsIDcwNzQ2LCA3MDc1MywgNzA3NTcsIDcwNzYyLCA3MDc2NiwgNzA3NzIsIDcwNzc3LCAKLSAgICA3MDc4MywgNzA3ODgsIDcwNzkyLCA3MDc5NiwgNzA3OTksIDcwODAyLCA3MDgwNywgNzA4MTIsIDcwODE3LCA3MDgyMiwgCi0gICAgNzA4MjcsIDcwODMyLCA3MDgzNywgNzA4NDIsIDcwODQ3LCA3MDg1MiwgNzA4NjEsIDcwODcwLCA3MDg3NSwgNzA4ODAsIAotICAgIDcwODg1LCA3MDg5MCwgNzA4OTUsIDcwOTAwLCA3MDkwNSwgNzA5MTAsIDcwOTE1LCA3MDkyMCwgNzA5MjUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcwOTMwLCA3MDkzNiwgNzA5MzksIDcwOTQyLCA3MDk0NSwgNzA5NDksIDcwOTUzLCA3MDk1NywgCi0gICAgNzA5NjEsIDcwOTY0LCA3MDk2OCwgNzA5NzEsIDcwOTc1LCA3MDk3OCwgNzA5ODIsIDcwOTg2LCA3MDk5MCwgNzA5OTQsIAotICAgIDcwOTk4LCA3MTAwMiwgNzEwMDYsIDcxMDA5LCA3MTAxMywgNzEwMTcsIDcxMDIxLCA3MTAyNSwgNzEwMjksIDcxMDMzLCAKLSAgICA3MTAzNywgNzEwNDEsIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY4LCA3MTA3MiwgCi0gICAgNzEwNzYsIDcxMDgwLCA3MTA4NCwgNzEwODgsIDcxMDkyLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIAotICAgIDcxMTE2LCA3MTEyMCwgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCAKLSAgICA3MTE1NiwgNzExNjAsIDcxMTY0LCA3MTE2NywgNzExNzEsIDcxMTc1LCA3MTE3OSwgNzExODMsIDcxMTg3LCA3MTE5MSwgCi0gICAgNzExOTUsIDcxMTk4LCA3MTIwMiwgNzEyMDYsIDcxMjEwLCA3MTIxNCwgNzEyMTgsIDcxMjIyLCA3MTIyNiwgNzEyMzAsIAotICAgIDcxMjM0LCA3MTIzOCwgNzEyNDIsIDcxMjQ2LCA3MTI1MSwgNzEyNTYsIDcxMjU5LCA3MTI2NCwgNzEyNjcsIDcxMjcwLCAKLSAgICA3MTI3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEyNzcsIDcxMjg2LCA3MTI5NSwgNzEzMDQsIDcxMzEzLCA3MTMyMiwgCi0gICAgNzEzMzEsIDcxMzQwLCA3MTM0OSwgNzEzNTcsIDcxMzY0LCA3MTM3MiwgNzEzNzksIDcxMzg3LCA3MTM5NywgNzE0MDYsIAotICAgIDcxNDE2LCA3MTQyNSwgNzE0MzUsIDcxNDQzLCA3MTQ1MCwgNzE0NTgsIDcxNDY1LCA3MTQ3MywgNzE0NzgsIDcxNDgzLCAKLSAgICA3MTQ4OCwgNzE0OTcsIDcxNTAzLCA3MTUwOSwgNzE1MTYsIDcxNTI1LCA3MTUzMywgNzE1NDEsIDcxNTQ5LCA3MTU1NiwgCi0gICAgNzE1NjMsIDcxNTcwLCA3MTU3NywgNzE1ODIsIDcxNTg3LCA3MTU5MiwgNzE1OTcsIDcxNjAyLCA3MTYwNywgNzE2MTIsIAotICAgIDcxNjE3LCA3MTYyNSwgNzE2MzMsIDcxNjM5LCA3MTY0NSwgNzE2NTAsIDcxNjU1LCA3MTY2MCwgNzE2NjUsIDcxNjcwLCAKLSAgICA3MTY3NSwgNzE2ODAsIDcxNjg1LCA3MTY5MywgNzE3MDEsIDcxNzA2LCA3MTcxMSwgNzE3MjEsIDcxNzMxLCA3MTczOCwgCi0gICAgNzE3NDUsIDcxNzU0LCA3MTc2MywgNzE3NzUsIDcxNzg3LCA3MTc5MywgNzE3OTksIDcxODA3LCA3MTgxNSwgNzE4MjUsIAotICAgIDcxODM1LCA3MTg0MiwgNzE4NDksIDcxODU0LCA3MTg1OSwgNzE4NzEsIDcxODgzLCA3MTg5MSwgNzE4OTksIDcxOTA5LCAKLSAgICA3MTkxOSwgNzE5MzEsIDcxOTQzLCA3MTk1MiwgNzE5NjEsIDcxOTY4LCA3MTk3NSwgNzE5ODIsIDcxOTg5LCA3MTk5OCwgCi0gICAgNzIwMDcsIDcyMDEyLCA3MjAxNywgNzIwMjQsIDcyMDMxLCA3MjAzOCwgNzIwNDUsIDcyMDU3LCA3MjA2OSwgNzIwNzQsIAotICAgIDcyMDc5LCA3MjA4NCwgNzIwODksIDcyMDk0LCA3MjA5OSwgNzIxMDQsIDcyMTA5LCA3MjExMywgNzIxMTgsIDcyMTIzLCAKLSAgICA3MjEyOCwgNzIxMzMsIDcyMTM4LCA3MjE0NCwgNzIxNDksIDcyMTU0LCA3MjE2MSwgNzIxNjgsIDcyMTc1LCA3MjE4MiwgCi0gICAgNzIxODksIDcyMTk4LCA3MjIwNywgNzIyMTMsIDcyMjE5LCA3MjIyNSwgNzIyMzEsIDcyMjM4LCA3MjI0NSwgNzIyNTIsIAotICAgIDcyMjU5LCA3MjI2NiwgNzIyNzAsIDcyMjc3LCA3MjI4MiwgNzIyODcsIDcyMjk0LCAwLCA3MjMwNywgNzIzMTUsIDcyMzIzLCAKLSAgICA3MjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIzMzcsIDcyMzQ2LCA3MjM1NSwgNzIzNjQsIAotICAgIDcyMzczLCA3MjM4MiwgNzIzOTEsIDcyNDAwLCA3MjQwOSwgNzI0MTgsIDcyNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA2MzcwNiwgNjM3MTUsIDYzNzI0LCA2MzczNSwgNjM3NDIsIDYzNzQ3LCA2Mzc1MiwgNjM3NTksIDYzNzY2LCAKKyAgICA2Mzc3MiwgNjM3NzcsIDYzNzgyLCA2Mzc4NywgNjM3OTIsIDYzNzk5LCA2MzgwNCwgNjM4MDksIDYzODE0LCA2MzgyNSwgCisgICAgNjM4MzAsIDYzODM1LCA2Mzg0MiwgNjM4NDcsIDYzODU0LCA2Mzg1OSwgNjM4NjQsIDYzODcxLCA2Mzg3OCwgNjM4ODUsIAorICAgIDYzODk0LCA2MzkwMywgNjM5MDgsIDYzOTEzLCA2MzkxOCwgNjM5MjUsIDYzOTMwLCA2Mzk0MCwgNjM5NDcsIDYzOTUyLCAKKyAgICA2Mzk1NywgNjM5NjIsIDYzOTY3LCA2Mzk3MiwgNjM5NzcsIDYzOTg2LCA2Mzk5MywgNjQwMDAsIDY0MDA1LCA2NDAxMiwgCisgICAgNjQwMTcsIDY0MDI0LCA2NDAzMywgNjQwNDQsIDY0MDQ5LCA2NDA1OCwgNjQwNjMsIDY0MDcwLCA2NDA3OSwgNjQwODgsIAorICAgIDY0MDkzLCA2NDA5OCwgNjQxMDUsIDY0MTExLCA2NDExOCwgNjQxMjUsIDY0MTI5LCA2NDEzMywgNjQxMzYsIDY0MTQwLCAKKyAgICA2NDE0NCwgNjQxNDgsIDY0MTUyLCA2NDE1NiwgNjQxNjAsIDY0MTY0LCA2NDE2NywgNjQxNzEsIDY0MTc1LCA2NDE3OSwgCisgICAgNjQxODMsIDY0MTg3LCA2NDE5MSwgNjQxOTQsIDY0MTk4LCA2NDIwMiwgNjQyMDUsIDY0MjA5LCA2NDIxMywgNjQyMTcsIAorICAgIDY0MjIxLCA2NDIyNSwgNjQyMjksIDY0MjMzLCA2NDIzNywgNjQyNDEsIDY0MjQ1LCA2NDI0OSwgNjQyNTMsIDY0MjU3LCAKKyAgICA2NDI2MSwgNjQyNjUsIDY0MjY5LCA2NDI3MywgNjQyNzcsIDY0MjgxLCA2NDI4NSwgNjQyODksIDY0MjkzLCA2NDI5NywgCisgICAgNjQzMDEsIDY0MzA1LCA2NDMwOSwgNjQzMTMsIDY0MzE3LCA2NDMyMSwgNjQzMjUsIDY0MzI5LCA2NDMzMywgNjQzMzcsIAorICAgIDY0MzQxLCA2NDM0NSwgNjQzNDksIDY0MzUzLCA2NDM1NywgNjQzNjEsIDY0MzY1LCA2NDM2OSwgNjQzNzMsIDY0Mzc3LCAKKyAgICA2NDM4MSwgNjQzODQsIDY0Mzg4LCA2NDM5MiwgNjQzOTYsIDY0NDAwLCA2NDQwNCwgNjQ0MDgsIDY0NDEyLCA2NDQxNiwgCisgICAgNjQ0MjAsIDY0NDI0LCA2NDQyOCwgNjQ0MzIsIDY0NDM2LCA2NDQ0MCwgNjQ0NDQsIDY0NDQ4LCA2NDQ1MiwgNjQ0NTYsIAorICAgIDY0NDYwLCA2NDQ2NCwgNjQ0NjgsIDY0NDcyLCA2NDQ3NiwgNjQ0ODAsIDY0NDg0LCA2NDQ4OCwgNjQ0OTIsIDY0NDk2LCAKKyAgICA2NDUwMCwgNjQ1MDQsIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIDY0NTMyLCA2NDUzNiwgCisgICAgNjQ1NDAsIDY0NTQ0LCA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCA2NDU3MiwgNjQ1NzYsIAorICAgIDY0NTgwLCA2NDU4NCwgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwOCwgNjQ2MTIsIDY0NjE2LCAKKyAgICA2NDYyMCwgNjQ2MjQsIDY0NjI4LCA2NDYzMiwgNjQ2MzYsIDY0NjQwLCA2NDY0NCwgNjQ2NDgsIDY0NjUyLCA2NDY1NiwgCisgICAgNjQ2NjAsIDY0NjY0LCA2NDY2OCwgNjQ2NzIsIDY0Njc2LCA2NDY4MCwgNjQ2ODQsIDY0Njg4LCA2NDY5MiwgNjQ2OTYsIAorICAgIDY0NzAwLCA2NDcwNCwgNjQ3MDgsIDY0NzEyLCA2NDcxNiwgNjQ3MjAsIDY0NzI0LCA2NDcyOCwgNjQ3MzIsIDY0NzM2LCAKKyAgICA2NDc0MCwgNjQ3NDQsIDY0NzQ4LCA2NDc1MiwgNjQ3NTYsIDY0NzYwLCA2NDc2NCwgNjQ3NjgsIDY0NzcyLCA2NDc3NiwgCisgICAgNjQ3ODAsIDY0Nzg0LCA2NDc4OCwgNjQ3OTIsIDY0Nzk2LCA2NDgwMCwgNjQ4MDQsIDY0ODA4LCA2NDgxMiwgNjQ4MTYsIAorICAgIDY0ODIwLCA2NDgyNCwgNjQ4MjgsIDY0ODMyLCA2NDgzNiwgNjQ4NDAsIDY0ODQ0LCA2NDg0OCwgNjQ4NTIsIDY0ODU1LCAKKyAgICA2NDg1OSwgNjQ4NjMsIDY0ODY3LCA2NDg3MSwgNjQ4NzUsIDY0ODc5LCA2NDg4MywgNjQ4ODcsIDY0ODkxLCA2NDg5NSwgCisgICAgNjQ4OTksIDY0OTAzLCA2NDkwNywgNjQ5MTEsIDY0OTE1LCA2NDkxOSwgNjQ5MjMsIDY0OTI3LCA2NDkzMSwgNjQ5MzUsIAorICAgIDY0OTM5LCA2NDk0MywgNjQ5NDcsIDY0OTUxLCA2NDk1NSwgNjQ5NTksIDY0OTYzLCA2NDk2NywgNjQ5NzEsIDY0OTc1LCAKKyAgICA2NDk3OSwgNjQ5ODMsIDY0OTg3LCA2NDk5MSwgNjQ5OTUsIDY0OTk5LCA2NTAwMywgNjUwMDcsIDY1MDExLCA2NTAxNSwgCisgICAgNjUwMTksIDY1MDIzLCA2NTAyNywgNjUwMzEsIDY1MDM1LCA2NTAzOSwgNjUwNDMsIDY1MDQ3LCA2NTA1MSwgNjUwNTUsIAorICAgIDY1MDU5LCA2NTA2MywgNjUwNjcsIDY1MDcxLCA2NTA3NSwgNjUwNzksIDY1MDgzLCA2NTA4NywgNjUwOTEsIDY1MDk1LCAKKyAgICA2NTA5OSwgNjUxMDMsIDY1MTA3LCA2NTExMSwgNjUxMTUsIDY1MTE5LCA2NTEyMywgNjUxMjcsIDY1MTMxLCA2NTEzNSwgCisgICAgNjUxMzksIDY1MTQzLCA2NTE0NywgNjUxNTEsIDY1MTU1LCA2NTE1OSwgNjUxNjMsIDY1MTY3LCA2NTE3MSwgNjUxNzUsIAorICAgIDY1MTc5LCA2NTE4MywgNjUxODcsIDY1MTkxLCA2NTE5NSwgNjUxOTksIDY1MjAzLCA2NTIwNywgNjUyMTEsIDY1MjE1LCAKKyAgICA2NTIxOSwgNjUyMjMsIDY1MjI3LCA2NTIzMSwgNjUyMzUsIDY1MjM5LCA2NTI0MywgNjUyNDcsIDY1MjUxLCA2NTI1NSwgCisgICAgNjUyNTksIDY1MjYzLCA2NTI2NywgNjUyNzEsIDY1Mjc1LCA2NTI3OSwgNjUyODMsIDY1Mjg3LCA2NTI5MSwgNjUyOTUsIAorICAgIDY1Mjk5LCA2NTMwMywgNjUzMDcsIDY1MzExLCA2NTMxNSwgNjUzMTgsIDY1MzIyLCA2NTMyNiwgNjUzMzAsIDY1MzM0LCAKKyAgICA2NTMzOCwgNjUzNDIsIDY1MzQ2LCA2NTM1MCwgNjUzNTQsIDY1MzU4LCA2NTM2MiwgNjUzNjYsIDY1MzcwLCA2NTM3NCwgCisgICAgNjUzNzgsIDY1MzgyLCA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5OCwgNjU0MDIsIDY1NDA2LCA2NTQxMCwgNjU0MTQsIAorICAgIDY1NDE4LCA2NTQyMiwgNjU0MjYsIDY1NDMwLCA2NTQzNCwgNjU0MzgsIDY1NDQyLCA2NTQ0NiwgNjU0NTAsIDY1NDU0LCAKKyAgICA2NTQ1OCwgNjU0NjIsIDY1NDY2LCA2NTQ3MCwgNjU0NzQsIDY1NDc4LCA2NTQ4MiwgNjU0ODYsIDY1NDkwLCA2NTQ5NCwgCisgICAgNjU0OTgsIDY1NTAyLCA2NTUwNiwgNjU1MTAsIDY1NTE0LCA2NTUxOCwgNjU1MjIsIDY1NTI2LCA2NTUzMCwgNjU1MzQsIAorICAgIDY1NTM4LCA2NTU0MiwgNjU1NDYsIDY1NTUwLCA2NTU1NCwgNjU1NTgsIDY1NTYyLCA2NTU2NiwgNjU1NzAsIDY1NTc0LCAKKyAgICA2NTU3OCwgNjU1ODIsIDY1NTg2LCA2NTU5MCwgNjU1OTQsIDY1NTk4LCA2NTYwMiwgNjU2MDYsIDY1NjEwLCA2NTYxNCwgCisgICAgNjU2MTgsIDY1NjIyLCA2NTYyNiwgNjU2MzAsIDY1NjM0LCA2NTYzOCwgNjU2NDIsIDY1NjQ2LCA2NTY1MCwgNjU2NTQsIAorICAgIDY1NjU4LCA2NTY2MiwgNjU2NjYsIDY1NjcwLCA2NTY3NCwgNjU2NzcsIDY1NjgxLCA2NTY4NSwgNjU2ODksIDY1NjkzLCAKKyAgICA2NTY5NywgNjU3MDEsIDY1NzA1LCA2NTcwOSwgNjU3MTMsIDY1NzE3LCA2NTcyMSwgNjU3MjUsIDY1NzI5LCA2NTczMywgCisgICAgNjU3MzcsIDY1NzQxLCA2NTc0NSwgNjU3NDksIDY1NzUzLCA2NTc1NywgNjU3NjEsIDY1NzY1LCA2NTc2OSwgNjU3NzMsIAorICAgIDY1Nzc3LCA2NTc4MSwgNjU3ODUsIDY1Nzg5LCA2NTc5MywgNjU3OTcsIDY1ODAxLCA2NTgwNSwgNjU4MDksIDY1ODEzLCAKKyAgICA2NTgxNywgNjU4MjEsIDY1ODI1LCA2NTgyOSwgNjU4MzMsIDY1ODM3LCA2NTg0MSwgNjU4NDUsIDY1ODQ5LCA2NTg1MywgCisgICAgNjU4NTcsIDY1ODYxLCA2NTg2NSwgNjU4NjksIDY1ODczLCA2NTg3NywgNjU4ODEsIDY1ODg1LCA2NTg4OSwgNjU4OTMsIAorICAgIDY1ODk3LCA2NTkwMSwgNjU5MDUsIDY1OTA5LCA2NTkxMywgNjU5MTcsIDY1OTIxLCA2NTkyNSwgNjU5MjksIDY1OTMzLCAKKyAgICA2NTkzNywgNjU5NDEsIDY1OTQ1LCA2NTk0OSwgNjU5NTMsIDY1OTU3LCA2NTk2MSwgNjU5NjUsIDY1OTY5LCA2NTk3MywgCisgICAgNjU5NzcsIDY1OTgxLCA2NTk4NSwgNjU5ODksIDY1OTkzLCA2NTk5NywgNjYwMDEsIDY2MDA1LCA2NjAwOSwgNjYwMTMsIAorICAgIDY2MDE3LCA2NjAyMSwgNjYwMjUsIDY2MDI5LCA2NjAzMywgNjYwMzcsIDY2MDQxLCA2NjA0NSwgNjYwNDksIDY2MDUzLCAKKyAgICA2NjA1NywgNjYwNjEsIDY2MDY1LCA2NjA2OSwgNjYwNzMsIDY2MDc3LCA2NjA4MSwgNjYwODUsIDY2MDg5LCA2NjA5MywgCisgICAgNjYwOTcsIDY2MTAxLCA2NjEwNSwgNjYxMDksIDY2MTEzLCA2NjExNywgNjYxMjEsIDY2MTI1LCA2NjEyOSwgNjYxMzMsIAorICAgIDY2MTM3LCA2NjE0MSwgNjYxNDUsIDY2MTQ5LCA2NjE1MywgNjYxNTcsIDY2MTYxLCA2NjE2NSwgNjYxNjksIDY2MTcyLCAKKyAgICA2NjE3NiwgNjYxODAsIDY2MTg0LCA2NjE4OCwgNjYxOTIsIDY2MTk2LCA2NjIwMCwgNjYyMDQsIDY2MjA4LCA2NjIxMiwgCisgICAgNjYyMTYsIDY2MjIwLCA2NjIyNCwgNjYyMjgsIDY2MjMyLCA2NjIzNiwgNjYyNDAsIDY2MjQ0LCA2NjI0OCwgNjYyNTIsIAorICAgIDY2MjU2LCA2NjI2MCwgNjYyNjQsIDY2MjY4LCA2NjI3MiwgNjYyNzYsIDY2MjgwLCA2NjI4NCwgNjYyODgsIDY2MjkyLCAKKyAgICA2NjI5NiwgNjYzMDAsIDY2MzA0LCA2NjMwOCwgNjYzMTIsIDY2MzE2LCA2NjMyMCwgNjYzMjQsIDY2MzI4LCA2NjMzMiwgCisgICAgNjYzMzYsIDY2MzQwLCA2NjM0NCwgNjYzNDgsIDY2MzUyLCA2NjM1NiwgNjYzNjAsIDY2MzY0LCA2NjM2OCwgNjYzNzIsIAorICAgIDY2Mzc2LCA2NjM4MCwgNjYzODQsIDY2Mzg4LCA2NjM5MiwgNjYzOTYsIDY2NDAwLCA2NjQwNCwgNjY0MDgsIDY2NDEyLCAKKyAgICA2NjQxNiwgNjY0MjAsIDY2NDI0LCA2NjQyOCwgNjY0MzIsIDY2NDM2LCA2NjQ0MCwgNjY0NDQsIDY2NDQ4LCA2NjQ1MiwgCisgICAgNjY0NTYsIDY2NDYwLCA2NjQ2NCwgNjY0NjgsIDY2NDcyLCA2NjQ3NiwgNjY0ODAsIDY2NDg0LCA2NjQ4OCwgNjY0OTIsIAorICAgIDY2NDk2LCA2NjUwMCwgNjY1MDQsIDY2NTA4LCA2NjUxMiwgNjY1MTYsIDY2NTIwLCA2NjUyNCwgNjY1MjgsIDY2NTMyLCAKKyAgICA2NjUzNiwgNjY1NDAsIDY2NTQ0LCA2NjU0OCwgNjY1NTIsIDY2NTU2LCA2NjU2MCwgNjY1NjQsIDY2NTY4LCA2NjU3MiwgCisgICAgNjY1NzYsIDY2NTgwLCA2NjU4NCwgNjY1ODgsIDY2NTkyLCA2NjU5NiwgNjY2MDAsIDY2NjA0LCA2NjYwOCwgNjY2MTIsIAorICAgIDY2NjE2LCA2NjYyMCwgNjY2MjQsIDY2NjI3LCA2NjYzMSwgNjY2MzUsIDY2NjM5LCA2NjY0MywgNjY2NDcsIDY2NjUxLCAKKyAgICA2NjY1NSwgNjY2NTksIDY2NjYzLCA2NjY2NywgNjY2NzEsIDY2Njc1LCA2NjY3OSwgNjY2ODMsIDY2Njg3LCA2NjY5MSwgCisgICAgNjY2OTUsIDY2Njk5LCA2NjcwMywgNjY3MDcsIDY2NzExLCA2NjcxNSwgNjY3MTksIDY2NzIzLCA2NjcyNywgNjY3MzEsIAorICAgIDY2NzM1LCA2NjczOSwgNjY3NDMsIDY2NzQ3LCA2Njc1MSwgNjY3NTUsIDY2NzU5LCA2Njc2MywgNjY3NjcsIDY2NzcxLCAKKyAgICA2Njc3NSwgNjY3NzksIDY2NzgzLCA2Njc4NywgNjY3OTEsIDY2Nzk1LCA2Njc5OSwgNjY4MDMsIDY2ODA3LCA2NjgxMSwgCisgICAgNjY4MTUsIDY2ODE5LCA2NjgyMywgNjY4MjcsIDY2ODMxLCA2NjgzNSwgNjY4MzksIDY2ODQzLCA2Njg0NywgNjY4NTEsIAorICAgIDY2ODU1LCA2Njg1OSwgNjY4NjMsIDY2ODY3LCA2Njg3MSwgNjY4NzUsIDY2ODc5LCA2Njg4MywgNjY4ODcsIDY2ODkxLCAKKyAgICA2Njg5NSwgNjY4OTksIDY2OTAzLCA2NjkwNywgNjY5MTEsIDY2OTE1LCA2NjkxOSwgNjY5MjMsIDY2OTI3LCA2NjkzMSwgCisgICAgNjY5MzUsIDY2OTM5LCA2Njk0MywgNjY5NDcsIDY2OTUxLCA2Njk1NSwgNjY5NTksIDY2OTYzLCA2Njk2NywgNjY5NzEsIAorICAgIDY2OTc1LCA2Njk3OSwgNjY5ODMsIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgNjcwMDcsIDY3MDExLCAKKyAgICA2NzAxNSwgNjcwMTksIDY3MDIzLCA2NzAyNywgNjcwMzEsIDY3MDM1LCA2NzAzOSwgNjcwNDMsIDY3MDQ3LCA2NzA1MSwgCisgICAgNjcwNTUsIDY3MDU5LCA2NzA2MywgNjcwNjcsIDY3MDcxLCA2NzA3NSwgNjcwNzksIDY3MDgzLCA2NzA4NywgNjcwOTEsIAorICAgIDY3MDk1LCA2NzA5OSwgNjcxMDMsIDY3MTA3LCA2NzExMSwgNjcxMTUsIDY3MTE5LCA2NzEyMywgNjcxMjcsIDY3MTMxLCAKKyAgICA2NzEzNSwgNjcxMzksIDY3MTQzLCA2NzE0NywgNjcxNTEsIDY3MTU1LCA2NzE1OSwgNjcxNjMsIDY3MTY3LCA2NzE3MSwgCisgICAgNjcxNzUsIDY3MTc5LCA2NzE4MywgNjcxODcsIDY3MTkxLCA2NzE5NSwgNjcxOTksIDY3MjAzLCA2NzIwNywgNjcyMTEsIAorICAgIDY3MjE1LCA2NzIxOSwgNjcyMjMsIDY3MjI3LCA2NzIzMCwgNjcyMzQsIDY3MjM4LCA2NzI0MiwgNjcyNDYsIDY3MjUwLCAKKyAgICA2NzI1NCwgNjcyNTgsIDY3MjYxLCA2NzI2NSwgNjcyNjksIDY3MjczLCA2NzI3NywgNjcyODEsIDY3Mjg1LCA2NzI4OSwgCisgICAgNjcyOTMsIDY3Mjk3LCA2NzMwMSwgNjczMDUsIDY3MzA5LCA2NzMxMywgNjczMTcsIDY3MzIxLCA2NzMyNSwgNjczMjksIAorICAgIDY3MzMzLCA2NzMzNywgNjczNDEsIDY3MzQ1LCA2NzM0OSwgNjczNTMsIDY3MzU3LCA2NzM2MSwgNjczNjUsIDY3MzY5LCAKKyAgICA2NzM3MywgNjczNzcsIDY3MzgxLCA2NzM4NSwgNjczODksIDY3MzkzLCA2NzM5NywgNjc0MDEsIDY3NDA1LCA2NzQwOSwgCisgICAgNjc0MTMsIDY3NDE3LCA2NzQyMSwgNjc0MjUsIDY3NDI5LCA2NzQzMywgNjc0MzcsIDY3NDQxLCA2NzQ0NSwgNjc0NDksIAorICAgIDY3NDUzLCA2NzQ1NywgNjc0NjEsIDY3NDY1LCA2NzQ2OSwgNjc0NzMsIDY3NDc3LCA2NzQ4MSwgNjc0ODUsIDY3NDg5LCAKKyAgICA2NzQ5MywgNjc0OTcsIDY3NTAxLCA2NzUwNSwgNjc1MDksIDY3NTEzLCA2NzUxNywgNjc1MjEsIDY3NTI1LCA2NzUyOSwgCisgICAgNjc1MzMsIDY3NTM3LCA2NzU0MSwgNjc1NDUsIDY3NTQ5LCA2NzU1MywgNjc1NTcsIDY3NTYxLCA2NzU2NSwgNjc1NjksIAorICAgIDY3NTczLCA2NzU3NywgNjc1ODEsIDY3NTg1LCA2NzU4OSwgNjc1OTMsIDY3NTk3LCA2NzYwMSwgNjc2MDUsIDY3NjA5LCAKKyAgICA2NzYxMywgNjc2MTcsIDY3NjIxLCA2NzYyNSwgNjc2MjksIDY3NjMzLCA2NzYzNywgNjc2NDEsIDY3NjQ1LCA2NzY0OSwgCisgICAgNjc2NTMsIDY3NjU3LCA2NzY2MSwgNjc2NjUsIDY3NjY5LCA2NzY3MywgNjc2NzcsIDY3NjgxLCA2NzY4NSwgNjc2ODksIAorICAgIDY3NjkzLCA2NzY5NywgNjc3MDEsIDY3NzA1LCA2NzcwOSwgNjc3MTMsIDY3NzE3LCA2NzcyMSwgNjc3MjUsIDY3NzI5LCAKKyAgICA2NzczMywgNjc3MzcsIDY3NzQxLCA2Nzc0NSwgNjc3NDksIDY3NzUzLCA2Nzc1NywgNjc3NjEsIDY3NzY1LCA2Nzc2OSwgCisgICAgNjc3NzMsIDY3Nzc3LCA2Nzc4MSwgNjc3ODUsIDY3Nzg5LCA2Nzc5MywgNjc3OTcsIDY3ODAxLCA2NzgwNSwgNjc4MDksIAorICAgIDY3ODEzLCA2NzgxNywgNjc4MjEsIDY3ODI1LCA2NzgyOSwgNjc4MzMsIDY3ODM3LCA2Nzg0MSwgNjc4NDUsIDY3ODQ5LCAKKyAgICA2Nzg1MywgNjc4NTcsIDY3ODYxLCA2Nzg2NSwgNjc4NjksIDY3ODczLCA2Nzg3NywgNjc4ODEsIDY3ODg1LCA2Nzg4OSwgCisgICAgNjc4OTMsIDY3ODk3LCA2NzkwMSwgNjc5MDUsIDY3OTA5LCA2NzkxMywgNjc5MTcsIDY3OTIxLCA2NzkyNSwgNjc5MjksIAorICAgIDY3OTMzLCA2NzkzNywgNjc5NDEsIDY3OTQ1LCA2Nzk0OSwgNjc5NTMsIDY3OTU3LCA2Nzk2MSwgNjc5NjUsIDY3OTY5LCAKKyAgICA2Nzk3MywgNjc5NzcsIDY3OTgxLCA2Nzk4NSwgNjc5ODgsIDY3OTkyLCA2Nzk5NiwgNjgwMDAsIDY4MDA0LCA2ODAwOCwgCisgICAgNjgwMTIsIDY4MDE2LCA2ODAyMCwgNjgwMjQsIDY4MDI4LCA2ODAzMiwgNjgwMzYsIDY4MDQwLCA2ODA0NCwgNjgwNDgsIAorICAgIDY4MDUyLCA2ODA1NiwgNjgwNjAsIDY4MDY0LCA2ODA2OCwgNjgwNzIsIDY4MDc2LCA2ODA4MCwgNjgwODQsIDY4MDg4LCAKKyAgICA2ODA5MiwgNjgwOTYsIDY4MTAwLCA2ODEwNCwgNjgxMDgsIDY4MTEyLCA2ODExNiwgNjgxMjAsIDY4MTI0LCA2ODEyOCwgCisgICAgNjgxMzIsIDY4MTM2LCA2ODE0MCwgNjgxNDQsIDY4MTQ4LCA2ODE1MiwgNjgxNTYsIDY4MTYwLCA2ODE2NCwgNjgxNjgsIAorICAgIDY4MTcyLCA2ODE3NiwgNjgxODAsIDY4MTg0LCA2ODE4OCwgNjgxOTIsIDY4MTk2LCA2ODIwMCwgNjgyMDQsIDY4MjA4LCAKKyAgICA2ODIxMiwgNjgyMTYsIDY4MjIwLCA2ODIyNCwgNjgyMjgsIDY4MjMyLCA2ODIzNiwgNjgyNDAsIDY4MjQ0LCA2ODI0OCwgCisgICAgNjgyNTIsIDY4MjU2LCA2ODI2MCwgNjgyNjQsIDY4MjY4LCA2ODI3MiwgNjgyNzYsIDY4MjgwLCA2ODI4NCwgNjgyODgsIAorICAgIDY4MjkyLCA2ODI5NiwgNjgzMDAsIDY4MzA0LCA2ODMwOCwgNjgzMTIsIDY4MzE2LCA2ODMyMCwgNjgzMjQsIDY4MzI4LCAKKyAgICA2ODMzMiwgNjgzMzYsIDY4MzQwLCA2ODM0NCwgNjgzNDgsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIDY4MzY0LCA2ODM2OCwgCisgICAgNjgzNzIsIDY4Mzc2LCA2ODM4MCwgNjgzODQsIDY4Mzg4LCA2ODM5MiwgNjgzOTYsIDY4NDAwLCA2ODQwNCwgNjg0MDgsIAorICAgIDY4NDEyLCA2ODQxNiwgNjg0MjAsIDY4NDI0LCA2ODQyOCwgNjg0MzIsIDY4NDM2LCA2ODQ0MCwgNjg0NDQsIDY4NDQ4LCAKKyAgICA2ODQ1MiwgNjg0NTYsIDY4NDYwLCA2ODQ2NCwgNjg0NjgsIDY4NDcyLCA2ODQ3NiwgNjg0ODAsIDY4NDg0LCA2ODQ4OCwgCisgICAgNjg0OTIsIDY4NDk2LCA2ODUwMCwgNjg1MDQsIDY4NTA4LCA2ODUxMiwgNjg1MTYsIDY4NTIwLCA2ODUyNCwgNjg1MjgsIAorICAgIDY4NTMyLCA2ODUzNiwgNjg1NDAsIDY4NTQ0LCA2ODU0OCwgNjg1NTIsIDY4NTU2LCA2ODU2MCwgNjg1NjQsIDY4NTY4LCAKKyAgICA2ODU3MiwgNjg1NzYsIDY4NTgwLCA2ODU4NCwgNjg1ODgsIDY4NTkyLCA2ODU5NiwgNjg2MDAsIDY4NjA0LCA2ODYwOCwgCisgICAgNjg2MTIsIDY4NjE2LCA2ODYyMCwgNjg2MjQsIDY4NjI4LCA2ODYzMiwgNjg2MzYsIDY4NjQwLCA2ODY0NCwgNjg2NDgsIAorICAgIDY4NjUyLCA2ODY1NiwgNjg2NjAsIDY4NjY0LCA2ODY2OCwgNjg2NzIsIDY4Njc2LCA2ODY4MCwgNjg2ODQsIDY4Njg4LCAKKyAgICA2ODY5MiwgNjg2OTYsIDY4NzAwLCA2ODcwNCwgNjg3MDgsIDY4NzEyLCA2ODcxNiwgNjg3MjAsIDY4NzI0LCA2ODcyOCwgCisgICAgNjg3MzIsIDY4NzM2LCA2ODc0MCwgNjg3NDQsIDY4NzQ4LCA2ODc1MiwgNjg3NTYsIDY4NzYwLCA2ODc2NCwgNjg3NjgsIDAsIAorICAgIDAsIDAsIDY4NzcyLCA2ODc3NiwgNjg3ODAsIDY4Nzg0LCA2ODc4OCwgNjg3OTIsIDY4Nzk2LCA2ODgwMCwgNjg4MDQsIAorICAgIDY4ODA4LCA2ODgxMiwgNjg4MTYsIDY4ODIwLCA2ODgyNCwgNjg4MjgsIDY4ODMyLCA2ODgzNiwgNjg4NDAsIDY4ODQ0LCAKKyAgICA2ODg0OCwgNjg4NTIsIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIDY4ODgwLCA2ODg4NCwgCisgICAgNjg4ODgsIDY4ODkyLCA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCA2ODkyMCwgNjg5MjQsIAorICAgIDY4OTI4LCA2ODkzMiwgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgNjg5NjAsIDY4OTY0LCAKKyAgICA2ODk2OCwgNjg5NzIsIDY4OTc2LCA2ODk4MCwgNjg5ODQsIDY4OTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2ODk5MiwgNjg5OTcsIDY5MDAxLCA2OTAwNiwgNjkwMTEsIDY5MDE2LCA2OTAyMSwgNjkwMjYsIDY5MDMwLCA2OTAzNSwgCisgICAgNjkwNDAsIDY5MDQ1LCA2OTA1MCwgNjkwNTUsIDY5MDYwLCA2OTA2NSwgNjkwNjksIDY5MDczLCA2OTA3OCwgNjkwODIsIAorICAgIDY5MDg3LCA2OTA5MiwgNjkwOTcsIDY5MTAxLCA2OTEwNiwgNjkxMTEsIDY5MTE2LCA2OTEyMSwgNjkxMjYsIDY5MTMwLCAKKyAgICA2OTEzNSwgNjkxMzksIDY5MTQ0LCA2OTE0OCwgNjkxNTMsIDY5MTU3LCA2OTE2MSwgNjkxNjUsIDY5MTcwLCA2OTE3NSwgCisgICAgNjkxODAsIDY5MTg4LCA2OTE5NiwgNjkyMDQsIDY5MjEyLCA2OTIxOSwgNjkyMjcsIDY5MjMzLCA2OTI0MSwgNjkyNDUsIAorICAgIDY5MjQ5LCA2OTI1MywgNjkyNTcsIDY5MjYxLCA2OTI2NSwgNjkyNjksIDY5MjczLCA2OTI3NywgNjkyODEsIDY5Mjg1LCAKKyAgICA2OTI4OSwgNjkyOTMsIDY5Mjk3LCA2OTMwMSwgNjkzMDUsIDY5MzA5LCA2OTMxMywgNjkzMTcsIDY5MzIxLCA2OTMyNSwgCisgICAgNjkzMjksIDY5MzMzLCA2OTMzNywgNjkzNDEsIDY5MzQ1LCA2OTM0OSwgNjkzNTMsIDY5MzU3LCA2OTM2MSwgNjkzNjUsIAorICAgIDY5MzY5LCA2OTM3MywgNjkzNzcsIDY5MzgxLCA2OTM4NSwgNjkzODgsIDY5MzkyLCA2OTM5NiwgNjk0MDAsIDY5NDA0LCAKKyAgICA2OTQwOCwgNjk0MTIsIDY5NDE2LCA2OTQyMCwgNjk0MjQsIDY5NDI4LCA2OTQzMiwgNjk0MzYsIDY5NDQwLCA2OTQ0NCwgCisgICAgNjk0NDgsIDY5NDUyLCA2OTQ1NiwgNjk0NjAsIDY5NDY0LCA2OTQ2OCwgNjk0NzIsIDY5NDc2LCA2OTQ4MCwgNjk0ODQsIAorICAgIDY5NDg4LCA2OTQ5MiwgNjk0OTYsIDY5NTAwLCA2OTUwNCwgNjk1MDgsIDY5NTEyLCA2OTUxNiwgNjk1MjAsIDY5NTI0LCAKKyAgICA2OTUyOCwgNjk1MzIsIDY5NTM1LCA2OTUzOSwgNjk1NDMsIDY5NTQ2LCA2OTU1MCwgNjk1NTQsIDY5NTU4LCA2OTU2MSwgCisgICAgNjk1NjUsIDY5NTY5LCA2OTU3MywgNjk1NzcsIDY5NTgxLCA2OTU4NSwgNjk1ODksIDY5NTkzLCA2OTU5NywgNjk2MDEsIAorICAgIDY5NjA1LCA2OTYwOSwgNjk2MTMsIDY5NjE3LCA2OTYyMCwgNjk2MjQsIDY5NjI4LCA2OTYzMSwgNjk2MzUsIDY5NjM5LCAKKyAgICA2OTY0MywgNjk2NDcsIDY5NjUxLCA2OTY1NSwgNjk2NTgsIDY5NjYxLCA2OTY2NSwgNjk2NjksIDY5NjczLCA2OTY3NiwgCisgICAgNjk2NzksIDY5NjgzLCA2OTY4NywgNjk2OTEsIDY5Njk1LCA2OTY5OSwgNjk3MDMsIDY5NzA3LCA2OTcxMSwgNjk3MTUsIAorICAgIDY5NzE5LCA2OTcyMywgNjk3MjcsIDY5NzMxLCA2OTczNSwgNjk3MzksIDY5NzQzLCA2OTc0NywgNjk3NTEsIDY5NzU1LCAKKyAgICA2OTc1OSwgNjk3NjMsIDY5NzY3LCA2OTc3MSwgNjk3NzUsIDY5Nzc5LCA2OTc4MywgNjk3ODcsIDY5NzkxLCA2OTc5NSwgCisgICAgNjk3OTksIDY5ODAzLCA2OTgwNywgNjk4MTEsIDY5ODE1LCA2OTgxOSwgNjk4MjMsIDY5ODI3LCA2OTgzMCwgNjk4MzQsIAorICAgIDY5ODM4LCA2OTg0MiwgNjk4NDYsIDY5ODUwLCA2OTg1NCwgNjk4NTgsIDY5ODYyLCA2OTg2NiwgNjk4NzAsIDY5ODc0LCAKKyAgICA2OTg3OCwgNjk4ODIsIDY5ODg2LCA2OTg5MCwgNjk4OTQsIDY5ODk4LCA2OTkwMiwgNjk5MDYsIDY5OTEwLCA2OTkxNCwgCisgICAgNjk5MTgsIDY5OTIyLCA2OTkyNiwgNjk5MzAsIDY5OTM0LCA2OTkzOCwgNjk5NDIsIDY5OTQ2LCA2OTk1MCwgNjk5NTQsIAorICAgIDY5OTU4LCA2OTk2MiwgNjk5NjYsIDY5OTcwLCA2OTk3NCwgNjk5NzcsIDY5OTgxLCA2OTk4NSwgNjk5ODksIDY5OTkzLCAKKyAgICA2OTk5NywgNzAwMDEsIDcwMDA1LCA3MDAwOSwgNzAwMTMsIDcwMDE3LCA3MDAyMSwgNzAwMjUsIDcwMDI5LCA3MDAzMywgCisgICAgNzAwMzcsIDcwMDQxLCA3MDA0NCwgNzAwNDgsIDcwMDUyLCA3MDA1NiwgNzAwNjAsIDcwMDY0LCA3MDA2OCwgNzAwNzIsIAorICAgIDcwMDc2LCA3MDA4MCwgNzAwODQsIDcwMDg4LCA3MDA5MiwgNzAwOTYsIDcwMTAwLCA3MDEwNCwgNzAxMDgsIDcwMTEyLCAKKyAgICA3MDExNiwgNzAxMjAsIDcwMTI0LCA3MDEyOCwgNzAxMzEsIDcwMTM1LCA3MDEzOSwgNzAxNDMsIDcwMTQ3LCA3MDE1MSwgCisgICAgNzAxNTUsIDcwMTU5LCA3MDE2MywgNzAxNjcsIDcwMTcxLCA3MDE3NSwgNzAxNzksIDcwMTgzLCA3MDE4NywgNzAxOTEsIAorICAgIDcwMTk1LCA3MDE5OSwgNzAyMDMsIDcwMjA3LCA3MDIxMSwgNzAyMTUsIDcwMjE5LCA3MDIyMywgNzAyMjcsIDcwMjMxLCAKKyAgICA3MDIzNSwgNzAyMzksIDcwMjQzLCA3MDI0NywgNzAyNTEsIDcwMjU1LCA3MDI1OSwgNzAyNjMsIDcwMjY3LCA3MDI3MSwgCisgICAgNzAyNzUsIDcwMjc5LCA3MDI4MywgNzAyODcsIDcwMjkxLCA3MDI5NSwgNzAyOTksIDcwMzAzLCA3MDMwNiwgNzAzMTEsIAorICAgIDcwMzE1LCA3MDMyMSwgNzAzMjYsIDcwMzMyLCA3MDMzNiwgNzAzNDAsIDcwMzQ0LCA3MDM0OCwgNzAzNTIsIDcwMzU2LCAKKyAgICA3MDM2MCwgNzAzNjQsIDcwMzY4LCA3MDM3MiwgNzAzNzYsIDcwMzgwLCA3MDM4NCwgNzAzODgsIDcwMzkxLCA3MDM5NCwgCisgICAgNzAzOTcsIDcwNDAwLCA3MDQwMywgNzA0MDYsIDcwNDA5LCA3MDQxMiwgNzA0MTUsIDcwNDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDQyNiwgNzA0MzEsIDcwNDM2LCA3MDQ0MSwgCisgICAgNzA0NDYsIDcwNDUzLCA3MDQ2MCwgNzA0NjUsIDcwNDcwLCA3MDQ3NSwgNzA0ODAsIDcwNDg3LCA3MDQ5NCwgNzA1MDEsIAorICAgIDcwNTA4LCA3MDUxNSwgNzA1MjIsIDcwNTMyLCA3MDU0MiwgNzA1NDksIDcwNTU2LCA3MDU2MywgNzA1NzAsIDcwNTc2LCAKKyAgICA3MDU4MiwgNzA1OTEsIDcwNjAwLCA3MDYwNywgNzA2MTQsIDcwNjI1LCA3MDYzNiwgNzA2NDEsIDcwNjQ2LCA3MDY1MywgCisgICAgNzA2NjAsIDcwNjY3LCA3MDY3NCwgNzA2ODEsIDcwNjg4LCA3MDY5NSwgNzA3MDIsIDcwNzA4LCA3MDcxNCwgNzA3MjAsIAorICAgIDcwNzI2LCA3MDczMywgNzA3NDAsIDcwNzQ1LCA3MDc0OSwgNzA3NTYsIDcwNzYzLCA3MDc3MCwgNzA3NzQsIDcwNzgxLCAKKyAgICA3MDc4NSwgNzA3OTAsIDcwNzk0LCA3MDgwMCwgNzA4MDUsIDcwODExLCA3MDgxNiwgNzA4MjAsIDcwODI0LCA3MDgyNywgCisgICAgNzA4MzAsIDcwODM1LCA3MDg0MCwgNzA4NDUsIDcwODUwLCA3MDg1NSwgNzA4NjAsIDcwODY1LCA3MDg3MCwgNzA4NzUsIAorICAgIDcwODgwLCA3MDg4OSwgNzA4OTgsIDcwOTAzLCA3MDkwOCwgNzA5MTMsIDcwOTE4LCA3MDkyMywgNzA5MjgsIDcwOTMzLCAKKyAgICA3MDkzOCwgNzA5NDMsIDcwOTQ4LCA3MDk1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA5NTgsIDcwOTY0LCA3MDk2NywgCisgICAgNzA5NzAsIDcwOTczLCA3MDk3NywgNzA5ODEsIDcwOTg1LCA3MDk4OSwgNzA5OTIsIDcwOTk2LCA3MDk5OSwgNzEwMDMsIAorICAgIDcxMDA2LCA3MTAxMCwgNzEwMTQsIDcxMDE4LCA3MTAyMiwgNzEwMjYsIDcxMDMwLCA3MTAzNCwgNzEwMzcsIDcxMDQxLCAKKyAgICA3MTA0NSwgNzEwNDksIDcxMDUzLCA3MTA1NywgNzEwNjEsIDcxMDY1LCA3MTA2OSwgNzEwNzMsIDcxMDc3LCA3MTA4MSwgCisgICAgNzEwODUsIDcxMDg5LCA3MTA5MywgNzEwOTYsIDcxMTAwLCA3MTEwNCwgNzExMDgsIDcxMTEyLCA3MTExNiwgNzExMjAsIAorICAgIDcxMTI0LCA3MTEyOCwgNzExMzIsIDcxMTM2LCA3MTE0MCwgNzExNDQsIDcxMTQ4LCA3MTE1MiwgNzExNTYsIDcxMTYwLCAKKyAgICA3MTE2NCwgNzExNjgsIDcxMTcyLCA3MTE3NiwgNzExODAsIDcxMTg0LCA3MTE4OCwgNzExOTIsIDcxMTk1LCA3MTE5OSwgCisgICAgNzEyMDMsIDcxMjA3LCA3MTIxMSwgNzEyMTUsIDcxMjE5LCA3MTIyMywgNzEyMjYsIDcxMjMwLCA3MTIzNCwgNzEyMzgsIAorICAgIDcxMjQyLCA3MTI0NiwgNzEyNTAsIDcxMjU0LCA3MTI1OCwgNzEyNjIsIDcxMjY2LCA3MTI3MCwgNzEyNzQsIDcxMjc5LCAKKyAgICA3MTI4NCwgNzEyODcsIDcxMjkyLCA3MTI5NSwgNzEyOTgsIDcxMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTMwNSwgCisgICAgNzEzMTQsIDcxMzIzLCA3MTMzMiwgNzEzNDEsIDcxMzUwLCA3MTM1OSwgNzEzNjgsIDcxMzc3LCA3MTM4NSwgNzEzOTIsIAorICAgIDcxNDAwLCA3MTQwNywgNzE0MTUsIDcxNDI1LCA3MTQzNCwgNzE0NDQsIDcxNDUzLCA3MTQ2MywgNzE0NzEsIDcxNDc4LCAKKyAgICA3MTQ4NiwgNzE0OTMsIDcxNTAxLCA3MTUwNiwgNzE1MTEsIDcxNTE2LCA3MTUyNSwgNzE1MzEsIDcxNTM3LCA3MTU0NCwgCisgICAgNzE1NTMsIDcxNTYxLCA3MTU2OSwgNzE1NzcsIDcxNTg0LCA3MTU5MSwgNzE1OTgsIDcxNjA1LCA3MTYxMCwgNzE2MTUsIAorICAgIDcxNjIwLCA3MTYyNSwgNzE2MzAsIDcxNjM1LCA3MTY0MCwgNzE2NDUsIDcxNjUzLCA3MTY2MSwgNzE2NjcsIDcxNjczLCAKKyAgICA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzIxLCA3MTcyOSwgCisgICAgNzE3MzQsIDcxNzM5LCA3MTc0OSwgNzE3NTksIDcxNzY2LCA3MTc3MywgNzE3ODIsIDcxNzkxLCA3MTgwMywgNzE4MTUsIAorICAgIDcxODIxLCA3MTgyNywgNzE4MzUsIDcxODQzLCA3MTg1MywgNzE4NjMsIDcxODcwLCA3MTg3NywgNzE4ODIsIDcxODg3LCAKKyAgICA3MTg5OSwgNzE5MTEsIDcxOTE5LCA3MTkyNywgNzE5MzcsIDcxOTQ3LCA3MTk1OSwgNzE5NzEsIDcxOTgwLCA3MTk4OSwgCisgICAgNzE5OTYsIDcyMDAzLCA3MjAxMCwgNzIwMTcsIDcyMDI2LCA3MjAzNSwgNzIwNDAsIDcyMDQ1LCA3MjA1MiwgNzIwNTksIAorICAgIDcyMDY2LCA3MjA3MywgNzIwODUsIDcyMDk3LCA3MjEwMiwgNzIxMDcsIDcyMTEyLCA3MjExNywgNzIxMjIsIDcyMTI3LCAKKyAgICA3MjEzMiwgNzIxMzcsIDcyMTQxLCA3MjE0NiwgNzIxNTEsIDcyMTU2LCA3MjE2MSwgNzIxNjYsIDcyMTcyLCA3MjE3NywgCisgICAgNzIxODIsIDcyMTg5LCA3MjE5NiwgNzIyMDMsIDcyMjEwLCA3MjIxNywgNzIyMjYsIDcyMjM1LCA3MjI0MSwgNzIyNDcsIAorICAgIDcyMjUzLCA3MjI1OSwgNzIyNjYsIDcyMjczLCA3MjI4MCwgNzIyODcsIDcyMjk0LCA3MjI5OCwgNzIzMDUsIDcyMzEwLCAKKyAgICA3MjMxNSwgNzIzMjIsIDAsIDcyMzM1LCA3MjM0MywgNzIzNTEsIDcyMzU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MjM2NSwgNzIzNzQsIDcyMzgzLCA3MjM5MiwgNzI0MDEsIDcyNDEwLCA3MjQxOSwgNzI0MjgsIDcyNDM3LCAKKyAgICA3MjQ0NiwgNzI0NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDM0LCAKLSAgICA3MjQ0MSwgNzI0NDcsIDcyNDU0LCA3MjQ2MiwgNzI0NzAsIDcyNDc3LCA3MjQ4NSwgNzI0OTIsIDcyNDk4LCA3MjUwNCwgCi0gICAgNzI1MTEsIDcyNTE3LCA3MjUyMywgNzI1MjksIDcyNTM2LCA3MjU0MywgNzI1NTAsIDcyNTU3LCA3MjU2NCwgNzI1NzEsIAotICAgIDcyNTc4LCA3MjU4NSwgNzI1OTIsIDcyNTk5LCA3MjYwNiwgNzI2MTMsIDcyNjIwLCA3MjYyNywgNzI2MzMsIDcyNjQwLCAKLSAgICA3MjY0NywgNzI2NTQsIDcyNjYxLCA3MjY2OCwgNzI2NzUsIDcyNjgyLCA3MjY4OSwgNzI2OTYsIDcyNzAzLCA3MjcxMCwgCi0gICAgNzI3MTcsIDcyNzI0LCA3MjczMSwgNzI3MzgsIDcyNzQ1LCA3Mjc1MiwgNzI3NTksIDcyNzY3LCA3Mjc3NSwgNzI3ODMsIAotICAgIDcyNzkxLCAwLCAwLCAwLCAwLCA3Mjc5OSwgNzI4MDgsIDcyODE3LCA3MjgyNiwgNzI4MzUsIDcyODQ0LCA3Mjg1MywgCi0gICAgNzI4NjAsIDcyODY3LCA3Mjg3NCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI4ODEsIDcyODg1LCA3Mjg5MCwgNzI4OTUsIDcyOTAwLCAKLSAgICA3MjkwNSwgNzI5MTAsIDcyOTE1LCA3MjkyMCwgNzI5MjUsIDcyOTMwLCA3MjkzNSwgNzI5MzksIDcyOTQzLCA3Mjk0OCwgCi0gICAgNzI5NTMsIDcyOTU3LCA3Mjk2MiwgNzI5NjcsIDcyOTcyLCA3Mjk3NywgNzI5ODIsIDcyOTg3LCA3Mjk5MiwgNzI5OTYsIAotICAgIDczMDAwLCA3MzAwNSwgNzMwMTAsIDczMDE0LCA3MzAxOCwgNzMwMjIsIDczMDI2LCA3MzAzMCwgNzMwMzQsIDczMDM4LCAKLSAgICA3MzA0MywgNzMwNDgsIDczMDUzLCA3MzA1OCwgNzMwNjMsIDczMDcwLCA3MzA3NiwgNzMwODEsIDczMDg2LCA3MzA5MSwgCi0gICAgNzMwOTYsIDczMTAyLCA3MzEwOSwgNzMxMTUsIDczMTIyLCA3MzEyOCwgNzMxMzQsIDczMTM5LCA3MzE0NiwgNzMxNTIsIAotICAgIDczMTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE2MywgNzMxNjcsIDczMTcxLCA3MzE3NCwgNzMxNzgsIDczMTgxLCAKLSAgICA3MzE4NSwgNzMxODgsIDczMTkyLCA3MzE5NiwgNzMyMDEsIDczMjA1LCA3MzIxMCwgNzMyMTMsIDczMjE3LCA3MzIyMSwgCi0gICAgNzMyMjQsIDczMjI4LCA3MzIzMiwgNzMyMzUsIDczMjM5LCA3MzI0MywgNzMyNDcsIDczMjUxLCA3MzI1NSwgNzMyNTksIAotICAgIDczMjYzLCA3MzI2NywgNzMyNzEsIDczMjc1LCA3MzI3OSwgNzMyODMsIDczMjg3LCA3MzI5MSwgNzMyOTUsIDczMjk5LCAKLSAgICA3MzMwMywgNzMzMDcsIDczMzEwLCA3MzMxMywgNzMzMTcsIDczMzIxLCA3MzMyNSwgNzMzMjgsIDczMzMxLCA3MzMzNCwgCi0gICAgNzMzMzgsIDczMzQyLCA3MzM0NiwgNzMzNTAsIDczMzUzLCA3MzM1NiwgNzMzNjAsIDczMzY1LCA3MzM3MCwgNzMzNzQsIAotICAgIDczMzc5LCA3MzM4MywgNzMzODgsIDczMzkzLCA3MzM5OSwgNzM0MDQsIDczNDEwLCA3MzQxNCwgNzM0MTksIDczNDI0LCAKLSAgICA3MzQyOCwgNzM0MzMsIDczNDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzQ0MiwgNzM0NDUsIDczNDQ5LCAKLSAgICA3MzQ1MywgNzM0NTYsIDczNDU5LCA3MzQ2MiwgNzM0NjUsIDczNDY4LCA3MzQ3MSwgNzM0NzQsIDczNDc3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MzQ4MCwgNzM0ODUsIDczNDg5LCA3MzQ5MywgNzM0OTcsIDczNTAxLCA3MzUwNSwgNzM1MDksIDczNTEzLCAKLSAgICA3MzUxNywgNzM1MjEsIDczNTI1LCA3MzUyOSwgNzM1MzMsIDczNTM3LCA3MzU0MSwgNzM1NDUsIDczNTUwLCA3MzU1NSwgCi0gICAgNzM1NjEsIDczNTY3LCA3MzU3NCwgNzM1NzksIDczNTg0LCA3MzU5MCwgNzM1OTQsIDczNTk5LCA3MzYwMiwgMCwgMCwgMCwgCi0gICAgMCwgNzM2MDUsIDczNjEyLCA3MzYxOCwgNzM2MjQsIDczNjMwLCA3MzYzNiwgNzM2NDIsIDczNjQ4LCA3MzY1NCwgNzM2NjAsIAotICAgIDczNjY2LCA3MzY3MiwgNzM2NzksIDczNjg2LCA3MzY5MywgNzM2OTksIDczNzA2LCA3MzcxMywgNzM3MjAsIDczNzI3LCAKLSAgICA3MzczNCwgNzM3NDAsIDczNzQ2LCA3Mzc1MywgNzM3NTksIDczNzY2LCA3Mzc3MywgNzM3NzksIDczNzg1LCA3Mzc5MiwgCi0gICAgNzM3OTksIDczODA2LCA3MzgxMiwgNzM4MTksIDczODI2LCA3MzgzMiwgNzM4MzksIDczODQ1LCA3Mzg1MiwgNzM4NTksIAotICAgIDczODY1LCA3Mzg3MSwgNzM4NzgsIDczODg0LCA3Mzg5MSwgNzM4OTgsIDczOTA3LCA3MzkxNCwgNzM5MjEsIDczOTI1LCAKLSAgICA3MzkzMCwgNzM5MzUsIDczOTQwLCA3Mzk0NSwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjIsIDczOTY3LCA3Mzk3MiwgCi0gICAgNzM5NzcsIDczOTgxLCA3Mzk4NSwgNzM5OTAsIDczOTk0LCA3Mzk5OSwgNzQwMDMsIDc0MDA4LCA3NDAxMywgNzQwMTgsIAotICAgIDc0MDIzLCA3NDAyNywgNzQwMzIsIDc0MDM3LCA3NDA0MiwgNzQwNDgsIDc0MDUzLCA3NDA1OSwgNzQwNjUsIDc0MDcxLCAKLSAgICA3NDA3NywgNzQwODMsIDc0MDg4LCA3NDA5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQwOTgsIAotICAgIDc0MTAzLCA3NDEwNywgNzQxMTEsIDc0MTE1LCA3NDExOSwgNzQxMjMsIDc0MTI3LCA3NDEzMSwgNzQxMzUsIDc0MTM5LCAKLSAgICA3NDE0MywgNzQxNDcsIDc0MTUxLCA3NDE1NSwgNzQxNTksIDc0MTYzLCA3NDE2NywgNzQxNzEsIDc0MTc1LCA3NDE3OSwgCi0gICAgNzQxODMsIDc0MTg3LCA3NDE5MSwgNzQxOTUsIDc0MTk5LCA3NDIwMywgNzQyMDcsIDc0MjExLCA3NDIxNSwgMCwgMCwgMCwgCi0gICAgNzQyMTksIDc0MjIzLCA3NDIyNywgNzQyMzEsIDc0MjM1LCA3NDIzOCwgNzQyNDQsIDc0MjQ3LCA3NDI1MSwgNzQyNTQsIAotICAgIDc0MjYwLCA3NDI2NiwgNzQyNzQsIDc0Mjc3LCA3NDI4MSwgNzQyODQsIDc0Mjg3LCA3NDI5MywgNzQyOTksIDc0MzAzLCAKLSAgICA3NDMwOSwgNzQzMTMsIDc0MzE3LCA3NDMyMywgNzQzMjcsIDc0MzMzLCA3NDMzOSwgNzQzNDMsIDc0MzQ3LCA3NDM1MywgCi0gICAgNzQzNTcsIDc0MzYzLCA3NDM2OSwgNzQzNzMsIDc0Mzc5LCA3NDM4MywgNzQzODksIDc0MzkyLCA3NDM5NSwgNzQ0MDEsIAotICAgIDc0NDA1LCA3NDQxMSwgNzQ0MTQsIDc0NDE3LCA3NDQyMCwgNzQ0MjYsIDc0NDMwLCA3NDQzNCwgNzQ0NDAsIDc0NDQ2LCAKLSAgICA3NDQ0OSwgNzQ0NTIsIDc0NDU4LCA3NDQ2MywgNzQ0NjgsIDc0NDczLCA3NDQ4MCwgNzQ0ODUsIDc0NDkyLCA3NDQ5NywgCi0gICAgNzQ1MDQsIDc0NTA5LCA3NDUxNCwgNzQ1MTksIDc0NTI0LCA3NDUyNywgNzQ1MzEsIDc0NTM1LCA3NDU0MCwgNzQ1NDUsIAotICAgIDc0NTUwLCA3NDU1NSwgNzQ1NjAsIDc0NTY1LCA3NDU3MCwgNzQ1NzUsIDc0NTgyLCA3NDU4NywgMCwgNzQ1OTQsIDc0NTk3LCAKLSAgICA3NDYwMSwgNzQ2MDQsIDc0NjA3LCA3NDYxMCwgNzQ2MTMsIDc0NjE2LCA3NDYxOSwgNzQ2MjIsIDc0NjI1LCAwLCAwLCAwLCAKLSAgICAwLCA3NDYyOCwgNzQ2MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NjQwLCA3NDY0MywgNzQ2NDYsIDc0NjQ5LCA3NDY1MiwgCi0gICAgNzQ2NTYsIDc0NjU5LCA3NDY2MiwgNzQ2NjYsIDc0NjcwLCA3NDY3NCwgNzQ2NzgsIDc0NjgyLCA3NDY4NiwgNzQ2OTAsIAotICAgIDc0Njk0LCA3NDY5OCwgNzQ3MDIsIDc0NzA2LCA3NDcxMCwgNzQ3MTQsIDc0NzE4LCA3NDcyMiwgNzQ3MjYsIDc0NzMwLCAKLSAgICA3NDczMywgNzQ3MzcsIDc0NzQwLCA3NDc0NCwgNzQ3NDgsIDc0NzUyLCA3NDc1NiwgNzQ3NjAsIDc0NzYzLCA3NDc2NywgCi0gICAgNzQ3NzAsIDc0NzczLCA3NDc3NywgNzQ3ODEsIDc0Nzg1LCA3NDc4OCwgNzQ3OTEsIDc0Nzk2LCA3NDgwMCwgNzQ4MDUsIAotICAgIDc0ODEwLCA3NDgxNCwgNzQ4MTksIDc0ODIzLCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDYsIDc0ODUxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg1NiwgNzQ4NjEsIDc0ODY2LCA3NDg3MSwgNzQ4NzcsIDc0ODgyLCA3NDg4NywgCi0gICAgNzQ4OTIsIDc0ODk3LCA3NDkwMiwgNzQ5MDYsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDAsIDAsIDc0OTI2LCA3NDkzMCwgCi0gICAgNzQ5MzMsIDc0OTM2LCA3NDkzOSwgNzQ5NDIsIDc0OTQ1LCA3NDk0OCwgNzQ5NTEsIDc0OTU0LCAwLCAwLCA3NDk1NywgCi0gICAgNzQ5NjIsIDc0OTY3LCA3NDk3MywgNzQ5ODAsIDc0OTg2LCA3NDk5MiwgNzQ5OTgsIDc1MDA0LCA3NTAxMCwgNzUwMTYsIAotICAgIDc1MDIyLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2MSwgNzUwNjcsIDc1MDczLCAKLSAgICA3NTA4MCwgNzUwODYsIDc1MDkyLCA3NTA5NywgNzUxMDQsIDc1MTExLCA3NTExOCwgNzUxMjQsIDc1MTI5LCA3NTEzNCwgCi0gICAgNzUxMzksIDAsIDAsIDAsIDAsIDc1MTQ3LCA3NTE1MywgNzUxNTksIDc1MTY1LCA3NTE3MSwgNzUxNzcsIDc1MTgzLCAKLSAgICA3NTE4OSwgNzUxOTUsIDc1MjAxLCA3NTIwNywgNzUyMTMsIDc1MjE5LCA3NTIyNSwgNzUyMzEsIDc1MjM3LCA3NTI0MywgCi0gICAgNzUyNDksIDc1MjU1LCA3NTI2MSwgNzUyNjcsIDc1MjcyLCA3NTI3NywgNzUyODMsIDc1Mjg5LCA3NTI5NSwgNzUzMDEsIAotICAgIDc1MzA3LCA3NTMxMywgNzUzMTksIDc1MzI1LCA3NTMzMSwgNzUzMzcsIDc1MzQzLCA3NTM0OSwgNzUzNTUsIDc1MzYxLCAKLSAgICA3NTM2NywgNzUzNzMsIDc1Mzc5LCA3NTM4NSwgNzUzOTEsIDc1Mzk3LCA3NTQwMywgNzU0MDksIDc1NDE1LCA3NTQyMSwgCi0gICAgNzU0MjYsIDc1NDMxLCA3NTQzNywgNzU0NDIsIDc1NDQ2LCA3NTQ1MSwgNzU0NTUsIDc1NDU5LCA3NTQ2MywgNzU0NjksIAotICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODQsIDc1NDg5LCA3NTQ5NCwgNzU0OTksIDc1NTA0LCA3NTUxMSwgNzU1MTgsIDc1NTI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjQ2MiwgNzI0NjksIDcyNDc1LCA3MjQ4MiwgNzI0OTAsIDcyNDk4LCAKKyAgICA3MjUwNSwgNzI1MTMsIDcyNTIwLCA3MjUyNiwgNzI1MzIsIDcyNTM5LCA3MjU0NSwgNzI1NTEsIDcyNTU3LCA3MjU2NCwgCisgICAgNzI1NzEsIDcyNTc4LCA3MjU4NSwgNzI1OTIsIDcyNTk5LCA3MjYwNiwgNzI2MTMsIDcyNjIwLCA3MjYyNywgNzI2MzQsIAorICAgIDcyNjQxLCA3MjY0OCwgNzI2NTUsIDcyNjYxLCA3MjY2OCwgNzI2NzUsIDcyNjgyLCA3MjY4OSwgNzI2OTYsIDcyNzAzLCAKKyAgICA3MjcxMCwgNzI3MTcsIDcyNzI0LCA3MjczMSwgNzI3MzgsIDcyNzQ1LCA3Mjc1MiwgNzI3NTksIDcyNzY2LCA3Mjc3MywgCisgICAgNzI3ODAsIDcyNzg3LCA3Mjc5NSwgNzI4MDMsIDcyODExLCA3MjgxOSwgMCwgMCwgMCwgMCwgNzI4MjcsIDcyODM2LCAKKyAgICA3Mjg0NSwgNzI4NTQsIDcyODYzLCA3Mjg3MiwgNzI4ODEsIDcyODg4LCA3Mjg5NSwgNzI5MDIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcyOTA5LCA3MjkxMywgNzI5MTgsIDcyOTIzLCA3MjkyOCwgNzI5MzMsIDcyOTM4LCA3Mjk0MywgNzI5NDgsIDcyOTUzLCAKKyAgICA3Mjk1OCwgNzI5NjMsIDcyOTY3LCA3Mjk3MSwgNzI5NzYsIDcyOTgxLCA3Mjk4NSwgNzI5OTAsIDcyOTk1LCA3MzAwMCwgCisgICAgNzMwMDUsIDczMDEwLCA3MzAxNSwgNzMwMjAsIDczMDI0LCA3MzAyOCwgNzMwMzMsIDczMDM4LCA3MzA0MiwgNzMwNDYsIAorICAgIDczMDUwLCA3MzA1NCwgNzMwNTgsIDczMDYyLCA3MzA2NiwgNzMwNzEsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKKyAgICA3MzA5OCwgNzMxMDQsIDczMTA5LCA3MzExNCwgNzMxMTksIDczMTI0LCA3MzEzMCwgNzMxMzcsIDczMTQzLCA3MzE1MCwgCisgICAgNzMxNTYsIDczMTYyLCA3MzE2NywgNzMxNzQsIDczMTgwLCA3MzE4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMxOTEsIAorICAgIDczMTk1LCA3MzE5OSwgNzMyMDIsIDczMjA2LCA3MzIwOSwgNzMyMTMsIDczMjE2LCA3MzIyMCwgNzMyMjQsIDczMjI5LCAKKyAgICA3MzIzMywgNzMyMzgsIDczMjQxLCA3MzI0NSwgNzMyNDksIDczMjUyLCA3MzI1NiwgNzMyNjAsIDczMjYzLCA3MzI2NywgCisgICAgNzMyNzEsIDczMjc1LCA3MzI3OSwgNzMyODMsIDczMjg3LCA3MzI5MSwgNzMyOTUsIDczMjk5LCA3MzMwMywgNzMzMDcsIAorICAgIDczMzExLCA3MzMxNSwgNzMzMTksIDczMzIzLCA3MzMyNywgNzMzMzEsIDczMzM1LCA3MzMzOCwgNzMzNDEsIDczMzQ1LCAKKyAgICA3MzM0OSwgNzMzNTMsIDczMzU2LCA3MzM1OSwgNzMzNjIsIDczMzY2LCA3MzM3MCwgNzMzNzQsIDczMzc4LCA3MzM4MSwgCisgICAgNzMzODQsIDczMzg4LCA3MzM5MywgNzMzOTgsIDczNDAyLCA3MzQwNywgNzM0MTEsIDczNDE2LCA3MzQyMSwgNzM0MjcsIAorICAgIDczNDMyLCA3MzQzOCwgNzM0NDIsIDczNDQ3LCA3MzQ1MiwgNzM0NTYsIDczNDYxLCA3MzQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzM0NzAsIDczNDczLCA3MzQ3NywgNzM0ODEsIDczNDg0LCA3MzQ4NywgNzM0OTAsIDczNDkzLCA3MzQ5NiwgCisgICAgNzM0OTksIDczNTAyLCA3MzUwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNzM1MDgsIDczNTEzLCA3MzUxNywgNzM1MjEsIDczNTI1LCAKKyAgICA3MzUyOSwgNzM1MzMsIDczNTM3LCA3MzU0MSwgNzM1NDUsIDczNTQ5LCA3MzU1MywgNzM1NTcsIDczNTYxLCA3MzU2NSwgCisgICAgNzM1NjksIDczNTczLCA3MzU3OCwgNzM1ODMsIDczNTg5LCA3MzU5NSwgNzM2MDIsIDczNjA3LCA3MzYxMiwgNzM2MTgsIAorICAgIDczNjIyLCA3MzYyNywgNzM2MzAsIDAsIDAsIDAsIDAsIDczNjMzLCA3MzY0MCwgNzM2NDYsIDczNjUyLCA3MzY1OCwgCisgICAgNzM2NjQsIDczNjcwLCA3MzY3NiwgNzM2ODIsIDczNjg4LCA3MzY5NCwgNzM3MDAsIDczNzA3LCA3MzcxNCwgNzM3MjEsIAorICAgIDczNzI3LCA3MzczNCwgNzM3NDEsIDczNzQ4LCA3Mzc1NSwgNzM3NjIsIDczNzY4LCA3Mzc3NCwgNzM3ODEsIDczNzg3LCAKKyAgICA3Mzc5NCwgNzM4MDEsIDczODA3LCA3MzgxMywgNzM4MjAsIDczODI3LCA3MzgzNCwgNzM4NDAsIDczODQ3LCA3Mzg1NCwgCisgICAgNzM4NjAsIDczODY3LCA3Mzg3MywgNzM4ODAsIDczODg3LCA3Mzg5MywgNzM4OTksIDczOTA2LCA3MzkxMiwgNzM5MTksIAorICAgIDczOTI2LCA3MzkzNSwgNzM5NDIsIDczOTQ5LCA3Mzk1MywgNzM5NTgsIDczOTYzLCA3Mzk2OCwgNzM5NzMsIDczOTc3LCAKKyAgICA3Mzk4MSwgNzM5ODYsIDczOTkwLCA3Mzk5NSwgNzQwMDAsIDc0MDA1LCA3NDAwOSwgNzQwMTMsIDc0MDE4LCA3NDAyMiwgCisgICAgNzQwMjcsIDc0MDMxLCA3NDAzNiwgNzQwNDEsIDc0MDQ2LCA3NDA1MSwgNzQwNTUsIDc0MDYwLCA3NDA2NSwgNzQwNzAsIAorICAgIDc0MDc2LCA3NDA4MSwgNzQwODcsIDc0MDkzLCA3NDA5OSwgNzQxMDUsIDc0MTExLCA3NDExNiwgNzQxMjIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MTI2LCA3NDEzMSwgNzQxMzUsIDc0MTM5LCA3NDE0MywgNzQxNDcsIDc0MTUxLCAKKyAgICA3NDE1NSwgNzQxNTksIDc0MTYzLCA3NDE2NywgNzQxNzEsIDc0MTc1LCA3NDE3OSwgNzQxODMsIDc0MTg3LCA3NDE5MSwgCisgICAgNzQxOTUsIDc0MTk5LCA3NDIwMywgNzQyMDcsIDc0MjExLCA3NDIxNSwgNzQyMTksIDc0MjIzLCA3NDIyNywgNzQyMzEsIAorICAgIDc0MjM1LCA3NDIzOSwgNzQyNDMsIDAsIDAsIDAsIDc0MjQ3LCA3NDI1MSwgNzQyNTUsIDc0MjU5LCA3NDI2MywgNzQyNjYsIAorICAgIDc0MjcyLCA3NDI3NSwgNzQyNzksIDc0MjgyLCA3NDI4OCwgNzQyOTQsIDc0MzAyLCA3NDMwNSwgNzQzMDksIDc0MzEyLCAKKyAgICA3NDMxNSwgNzQzMjEsIDc0MzI3LCA3NDMzMSwgNzQzMzcsIDc0MzQxLCA3NDM0NSwgNzQzNTEsIDc0MzU1LCA3NDM2MSwgCisgICAgNzQzNjcsIDc0MzcxLCA3NDM3NSwgNzQzODEsIDc0Mzg1LCA3NDM5MSwgNzQzOTcsIDc0NDAxLCA3NDQwNywgNzQ0MTEsIAorICAgIDc0NDE3LCA3NDQyMCwgNzQ0MjMsIDc0NDI5LCA3NDQzMywgNzQ0MzksIDc0NDQyLCA3NDQ0NSwgNzQ0NDgsIDc0NDU0LCAKKyAgICA3NDQ1OCwgNzQ0NjIsIDc0NDY4LCA3NDQ3NCwgNzQ0NzcsIDc0NDgwLCA3NDQ4NiwgNzQ0OTEsIDc0NDk2LCA3NDUwMSwgCisgICAgNzQ1MDgsIDc0NTEzLCA3NDUyMCwgNzQ1MjUsIDc0NTMyLCA3NDUzNywgNzQ1NDIsIDc0NTQ3LCA3NDU1MiwgNzQ1NTUsIAorICAgIDc0NTU5LCA3NDU2MywgNzQ1NjgsIDc0NTczLCA3NDU3OCwgNzQ1ODMsIDc0NTg4LCA3NDU5MywgNzQ1OTgsIDc0NjAzLCAKKyAgICA3NDYxMCwgNzQ2MTUsIDAsIDc0NjIyLCA3NDYyNSwgNzQ2MjksIDc0NjMyLCA3NDYzNSwgNzQ2MzgsIDc0NjQxLCA3NDY0NCwgCisgICAgNzQ2NDcsIDc0NjUwLCA3NDY1MywgMCwgMCwgMCwgMCwgNzQ2NTYsIDc0NjYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTUzMiwgNzU1MzcsIDc1NTQyLCA3NTU0NywgNzU1NTQsIDc1NTYxLCA3NTU2NSwgNzU1NjksIDc1NTc0LCA3NTU3OSwgCi0gICAgNzU1ODQsIDc1NTg5LCA3NTU5NCwgNzU1OTksIDc1NjA0LCA3NTYwOSwgNzU2MTQsIDc1NjIwLCA3NTYyNiwgNzU2MzIsIAotICAgIDc1NjM4LCA3NTY0NCwgNzU2NDgsIDc1NjU0LCA3NTY1OCwgNzU2NjQsIDc1NjcxLCA3NTY3NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzU2ODEsIDc1Njg1LCA3NTY4OSwgNzU2OTMsIDc1Njk3LCA3NTcwMSwgMCwgMCwgNzU3MDUsIDc1NzA5LCAKLSAgICA3NTcxMywgNzU3MTcsIDc1NzIxLCA3NTcyNSwgMCwgMCwgNzU3MjksIDc1NzMzLCA3NTczNywgNzU3NDEsIDc1NzQ1LCAKLSAgICA3NTc0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3NTMsIDc1NzU3LCA3NTc2MSwgNzU3NjUsIDc1NzY5LCAKLSAgICA3NTc3MywgNzU3NzcsIDAsIDc1NzgxLCA3NTc4NSwgNzU3ODksIDc1NzkzLCA3NTc5NywgNzU4MDEsIDc1ODA1LCAwLCAwLCAKKyAgICA3NDY2OCwgNzQ2NzEsIDc0Njc0LCA3NDY3NywgNzQ2ODAsIDc0Njg0LCA3NDY4NywgNzQ2OTAsIDc0Njk0LCA3NDY5OCwgCisgICAgNzQ3MDIsIDc0NzA2LCA3NDcxMCwgNzQ3MTQsIDc0NzE4LCA3NDcyMiwgNzQ3MjYsIDc0NzMwLCA3NDczNCwgNzQ3MzgsIAorICAgIDc0NzQyLCA3NDc0NiwgNzQ3NTAsIDc0NzU0LCA3NDc1OCwgNzQ3NjEsIDc0NzY1LCA3NDc2OCwgNzQ3NzIsIDc0Nzc2LCAKKyAgICA3NDc4MCwgNzQ3ODQsIDc0Nzg4LCA3NDc5MSwgNzQ3OTUsIDc0Nzk4LCA3NDgwMSwgNzQ4MDUsIDc0ODA5LCA3NDgxMywgCisgICAgNzQ4MTYsIDc0ODE5LCA3NDgyNCwgNzQ4MjgsIDc0ODMzLCA3NDgzOCwgNzQ4NDIsIDc0ODQ3LCA3NDg1MSwgNzQ4NTYsIAorICAgIDc0ODYxLCA3NDg2NiwgNzQ4NzAsIDc0ODc0LCA3NDg3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4ODQsIAorICAgIDc0ODg5LCA3NDg5NCwgNzQ4OTksIDc0OTA1LCA3NDkxMCwgNzQ5MTUsIDc0OTIwLCA3NDkyNSwgNzQ5MzAsIDc0OTM0LCAKKyAgICA3NDkzOCwgNzQ5NDMsIDc0OTQ4LCAwLCAwLCA3NDk1NCwgNzQ5NTgsIDc0OTYxLCA3NDk2NCwgNzQ5NjcsIDc0OTcwLCAKKyAgICA3NDk3MywgNzQ5NzYsIDc0OTc5LCA3NDk4MiwgMCwgMCwgNzQ5ODUsIDc0OTkwLCA3NDk5NSwgNzUwMDEsIDc1MDA4LCAKKyAgICA3NTAxNCwgNzUwMjAsIDc1MDI2LCA3NTAzMiwgNzUwMzgsIDc1MDQ0LCA3NTA1MCwgNzUwNTYsIDc1MDYyLCA3NTA2OCwgCisgICAgNzUwNzQsIDc1MDc5LCA3NTA4NCwgNzUwODksIDc1MDk1LCA3NTEwMSwgNzUxMDgsIDc1MTE0LCA3NTEyMCwgNzUxMjUsIAorICAgIDc1MTMyLCA3NTEzOSwgNzUxNDYsIDc1MTUyLCA3NTE1NywgNzUxNjIsIDc1MTY3LCAwLCAwLCAwLCAwLCA3NTE3NSwgCisgICAgNzUxODEsIDc1MTg3LCA3NTE5MywgNzUxOTksIDc1MjA1LCA3NTIxMSwgNzUyMTcsIDc1MjIzLCA3NTIyOSwgNzUyMzUsIAorICAgIDc1MjQxLCA3NTI0NywgNzUyNTMsIDc1MjU5LCA3NTI2NSwgNzUyNzEsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCAKKyAgICA3NTMwMCwgNzUzMDUsIDc1MzExLCA3NTMxNywgNzUzMjMsIDc1MzI5LCA3NTMzNSwgNzUzNDEsIDc1MzQ3LCA3NTM1MywgCisgICAgNzUzNTksIDc1MzY1LCA3NTM3MSwgNzUzNzcsIDc1MzgzLCA3NTM4OSwgNzUzOTUsIDc1NDAxLCA3NTQwNywgNzU0MTMsIAorICAgIDc1NDE5LCA3NTQyNSwgNzU0MzEsIDc1NDM3LCA3NTQ0MywgNzU0NDksIDc1NDU0LCA3NTQ1OSwgNzU0NjUsIDc1NDcwLCAKKyAgICA3NTQ3NCwgNzU0NzksIDc1NDgzLCA3NTQ4NywgNzU0OTEsIDc1NDk3LCA3NTUwMiwgNzU1MDcsIDc1NTEyLCA3NTUxNywgCisgICAgNzU1MjIsIDc1NTI3LCA3NTUzMiwgNzU1MzksIDc1NTQ2LCA3NTU1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU1NjAsIDc1NTY1LCA3NTU3MCwgNzU1NzUsIAorICAgIDc1NTgyLCA3NTU4OSwgNzU1OTMsIDc1NTk3LCA3NTYwMiwgNzU2MDcsIDc1NjEyLCA3NTYxNywgNzU2MjIsIDc1NjI3LCAKKyAgICA3NTYzMiwgNzU2MzcsIDc1NjQyLCA3NTY0OCwgNzU2NTQsIDc1NjYwLCA3NTY2NiwgNzU2NzIsIDc1Njc2LCA3NTY4MiwgCisgICAgNzU2ODYsIDc1NjkyLCA3NTY5OSwgNzU3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NzA5LCA3NTcxMywgCisgICAgNzU3MTcsIDc1NzIxLCA3NTcyNSwgNzU3MjksIDAsIDAsIDc1NzMzLCA3NTczNywgNzU3NDEsIDc1NzQ1LCA3NTc0OSwgCisgICAgNzU3NTMsIDAsIDAsIDc1NzU3LCA3NTc2MSwgNzU3NjUsIDc1NzY5LCA3NTc3MywgNzU3NzcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDc1NzgxLCA3NTc4NSwgNzU3ODksIDc1NzkzLCA3NTc5NywgNzU4MDEsIDc1ODA1LCAwLCA3NTgwOSwgCisgICAgNzU4MTMsIDc1ODE3LCA3NTgyMSwgNzU4MjUsIDc1ODI5LCA3NTgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzU4MDksIDc1ODE0LCA3NTgxOSwgNzU4MjQsIDc1ODI5LCA3NTgzMywgNzU4MzcsIDc1ODQyLCA3NTg0NywgNzU4NTIsIAotICAgIDc1ODU3LCA3NTg2MiwgNzU4NjcsIDc1ODcyLCA3NTg3NywgNzU4ODIsIDc1ODg2LCA3NTg5MSwgNzU4OTYsIDc1OTAxLCAKLSAgICA3NTkwNiwgNzU5MTEsIDc1OTE2LCA3NTkyMSwgNzU5MjYsIDc1OTMxLCA3NTkzNiwgNzU5NDEsIDc1OTQ4LCA3NTk1NSwgCi0gICAgNzU5NjIsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDMsIDc2MDA5LCA3NjAxNSwgNzYwMjEsIAotICAgIDc2MDI3LCA3NjAzMywgNzYwMzksIDc2MDQ1LCA3NjA0OSwgNzYwNTUsIDAsIDAsIDc2MDYxLCA3NjA2NiwgNzYwNzAsIAotICAgIDc2MDc0LCA3NjA3OCwgNzYwODIsIDc2MDg2LCA3NjA5MCwgNzYwOTQsIDc2MDk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCisgICAgNzU4NTcsIDc1ODYxLCA3NTg2NSwgNzU4NzAsIDc1ODc1LCA3NTg4MCwgNzU4ODUsIDc1ODkwLCA3NTg5NSwgNzU5MDAsIAorICAgIDc1OTA1LCA3NTkxMCwgNzU5MTQsIDc1OTE5LCA3NTkyNCwgNzU5MjksIDc1OTM0LCA3NTkzOSwgNzU5NDQsIDc1OTQ5LCAKKyAgICA3NTk1NCwgNzU5NTksIDc1OTY0LCA3NTk2OSwgNzU5NzYsIDc1OTgzLCA3NTk5MCwgNzU5OTcsIDc2MDA0LCA3NjAxMSwgCisgICAgNzYwMTgsIDc2MDI1LCA3NjAzMSwgNzYwMzcsIDc2MDQzLCA3NjA0OSwgNzYwNTUsIDc2MDYxLCA3NjA2NywgNzYwNzMsIAorICAgIDc2MDc3LCA3NjA4MywgMCwgMCwgNzYwODksIDc2MDk0LCA3NjA5OCwgNzYxMDIsIDc2MTA2LCA3NjExMCwgNzYxMTQsIAorICAgIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTAyLCAKLSAgICA3NjEwNiwgNzYxMTAsIDc2MTE0LCA3NjExOCwgNzYxMjIsIDc2MTI2LCA3NjEzMCwgNzYxMzQsIDc2MTM4LCA3NjE0MiwgCi0gICAgNzYxNDYsIDc2MTUwLCA3NjE1NCwgNzYxNTgsIDc2MTYyLCA3NjE2NiwgNzYxNzAsIDc2MTc0LCA3NjE3OCwgNzYxODIsIAotICAgIDc2MTg2LCA3NjE5MCwgMCwgMCwgMCwgMCwgNzYxOTQsIDc2MTk4LCA3NjIwMiwgNzYyMDYsIDc2MjEwLCA3NjIxNCwgCi0gICAgNzYyMTgsIDc2MjIyLCA3NjIyNiwgNzYyMzAsIDc2MjM0LCA3NjIzOCwgNzYyNDIsIDc2MjQ2LCA3NjI1MCwgNzYyNTQsIAotICAgIDc2MjU4LCA3NjI2MiwgNzYyNjYsIDc2MjcwLCA3NjI3NCwgNzYyNzgsIDc2MjgyLCA3NjI4NiwgNzYyOTAsIDc2Mjk0LCAKLSAgICA3NjI5OCwgNzYzMDIsIDc2MzA2LCA3NjMxMCwgNzYzMTQsIDc2MzE4LCA3NjMyMiwgNzYzMjYsIDc2MzMwLCA3NjMzNCwgCi0gICAgNzYzMzgsIDc2MzQyLCA3NjM0NiwgNzYzNTAsIDc2MzU0LCA3NjM1OCwgNzYzNjIsIDc2MzY2LCA3NjM3MCwgNzYzNzQsIAotICAgIDc2Mzc4LCA3NjM4MiwgNzYzODYsIDAsIDAsIDAsIDAsIDc2MzkwLCA3NjM5NCwgNzYzOTgsIDc2NDAyLCA3NjQwNiwgCi0gICAgNzY0MTAsIDc2NDE0LCA3NjQxOCwgNzY0MjIsIDc2NDI2LCA3NjQzMCwgNzY0MzQsIDc2NDM4LCA3NjQ0MiwgNzY0NDYsIAotICAgIDc2NDUwLCA3NjQ1NCwgNzY0NTgsIDc2NDYyLCA3NjQ2NiwgNzY0NzAsIDc2NDc0LCA3NjQ3OCwgNzY0ODIsIDc2NDg2LCAKLSAgICA3NjQ5MCwgNzY0OTQsIDc2NDk4LCA3NjUwMiwgNzY1MDYsIDc2NTEwLCA3NjUxNCwgNzY1MTgsIDc2NTIyLCA3NjUyNiwgCi0gICAgNzY1MzAsIDc2NTM0LCA3NjUzOCwgNzY1NDIsIDc2NTQ2LCA3NjU1MCwgNzY1NTQsIDc2NTU4LCA3NjU2MiwgNzY1NjYsIAotICAgIDc2NTcwLCA3NjU3NCwgNzY1NzgsIDc2NTgyLCA3NjU4NiwgNzY1OTAsIDc2NTk0LCA3NjU5OCwgNzY2MDIsIDc2NjA2LCAKLSAgICA3NjYxMCwgNzY2MTQsIDc2NjE4LCA3NjYyMiwgNzY2MjYsIDc2NjMwLCA3NjYzNCwgNzY2MzgsIDc2NjQyLCA3NjY0NiwgCi0gICAgNzY2NTAsIDc2NjU0LCA3NjY1OCwgNzY2NjIsIDc2NjY2LCA3NjY3MCwgNzY2NzQsIDc2Njc4LCA3NjY4MiwgNzY2ODYsIAotICAgIDc2NjkwLCA3NjY5NCwgNzY2OTgsIDc2NzAyLCA3NjcwNiwgNzY3MTAsIDc2NzE0LCA3NjcxOCwgNzY3MjIsIDc2NzI2LCAKLSAgICA3NjczMCwgNzY3MzQsIDc2NzM4LCA3Njc0MiwgNzY3NDYsIDc2NzUwLCA3Njc1NCwgNzY3NTgsIDc2NzYyLCA3Njc2NiwgCi0gICAgNzY3NzAsIDc2Nzc0LCA3Njc3OCwgNzY3ODIsIDc2Nzg2LCA3Njc5MCwgNzY3OTQsIDc2Nzk4LCA3NjgwMiwgNzY4MDYsIAotICAgIDc2ODEwLCA3NjgxNCwgNzY4MTgsIDc2ODIyLCA3NjgyNiwgNzY4MzAsIDc2ODM0LCA3NjgzOCwgNzY4NDIsIDc2ODQ2LCAKLSAgICA3Njg1MCwgNzY4NTQsIDc2ODU4LCA3Njg2MiwgNzY4NjYsIDc2ODcwLCA3Njg3NCwgNzY4NzgsIDc2ODgyLCA3Njg4NiwgCi0gICAgNzY4OTAsIDc2ODk0LCA3Njg5OCwgNzY5MDIsIDc2OTA2LCA3NjkxMCwgNzY5MTQsIDc2OTE4LCA3NjkyMiwgNzY5MjYsIAotICAgIDc2OTMwLCA3NjkzNCwgNzY5MzgsIDc2OTQyLCA3Njk0NiwgNzY5NTAsIDc2OTU0LCA3Njk1OCwgNzY5NjIsIDc2OTY2LCAKLSAgICA3Njk3MCwgNzY5NzQsIDc2OTc4LCA3Njk4MiwgNzY5ODYsIDc2OTkwLCA3Njk5NCwgNzY5OTgsIDc3MDAyLCA3NzAwNiwgCi0gICAgNzcwMTAsIDc3MDE0LCA3NzAxOCwgNzcwMjIsIDc3MDI2LCA3NzAzMCwgNzcwMzQsIDc3MDM4LCA3NzA0MiwgNzcwNDYsIAotICAgIDc3MDUwLCA3NzA1NCwgNzcwNTgsIDc3MDYyLCA3NzA2NiwgNzcwNzAsIDc3MDc0LCA3NzA3OCwgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMiwgNzcxMDYsIDc3MTEwLCA3NzExNCwgNzcxMTgsIDc3MTIyLCA3NzEyNiwgCi0gICAgNzcxMzAsIDc3MTM0LCA3NzEzOCwgNzcxNDIsIDc3MTQ2LCA3NzE1MCwgNzcxNTQsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIAotICAgIDc3MTcwLCA3NzE3NCwgNzcxNzgsIDc3MTgyLCA3NzE4NiwgNzcxOTAsIDc3MTk0LCA3NzE5OCwgNzcyMDIsIDc3MjA2LCAKLSAgICA3NzIxMCwgNzcyMTQsIDc3MjE4LCA3NzIyMiwgNzcyMjYsIDc3MjMwLCA3NzIzNCwgNzcyMzgsIDc3MjQyLCA3NzI0NiwgCi0gICAgNzcyNTAsIDc3MjU0LCA3NzI1OCwgNzcyNjIsIDc3MjY2LCA3NzI3MCwgNzcyNzQsIDc3Mjc4LCA3NzI4MiwgNzcyODYsIAotICAgIDc3MjkwLCA3NzI5NCwgNzcyOTgsIDc3MzAyLCA3NzMwNiwgNzczMTAsIDc3MzE0LCA3NzMxOCwgNzczMjIsIDc3MzI2LCAKLSAgICA3NzMzMCwgNzczMzQsIDc3MzM4LCA3NzM0MiwgNzczNDYsIDc3MzUwLCA3NzM1NCwgNzczNTgsIDc3MzYyLCA3NzM2NiwgCi0gICAgNzczNzAsIDc3Mzc0LCA3NzM3OCwgNzczODIsIDc3Mzg2LCA3NzM5MCwgNzczOTQsIDc3Mzk4LCA3NzQwMiwgNzc0MDYsIAotICAgIDc3NDEwLCA3NzQxNCwgNzc0MTgsIDc3NDIyLCA3NzQyNiwgNzc0MzAsIDc3NDM0LCA3NzQzOCwgNzc0NDIsIDc3NDQ2LCAKLSAgICA3NzQ1MCwgNzc0NTQsIDc3NDU4LCA3NzQ2MiwgNzc0NjYsIDc3NDcwLCA3NzQ3NCwgNzc0NzgsIDc3NDgyLCA3NzQ4NiwgCi0gICAgNzc0OTAsIDc3NDk0LCA3NzQ5OCwgNzc1MDIsIDc3NTA2LCA3NzUxMCwgNzc1MTQsIDc3NTE4LCA3NzUyMiwgNzc1MjYsIAotICAgIDc3NTMwLCA3NzUzNCwgNzc1MzgsIDc3NTQyLCA3NzU0NiwgNzc1NTAsIDc3NTU0LCA3NzU1OCwgNzc1NjIsIDc3NTY2LCAKLSAgICA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NCwgNzc1OTgsIDc3NjAyLCA3NzYwNiwgCi0gICAgNzc2MTAsIDc3NjE0LCA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMCwgNzc2MzQsIDc3NjM4LCA3NzY0MiwgNzc2NDYsIAotICAgIDc3NjUwLCA3NzY1NCwgNzc2NTgsIDc3NjYyLCA3NzY2NiwgNzc2NzAsIDc3Njc0LCA3NzY3OCwgNzc2ODIsIDc3Njg2LCAKLSAgICA3NzY5MCwgNzc2OTQsIDc3Njk4LCA3NzcwMiwgNzc3MDYsIDc3NzEwLCA3NzcxNCwgNzc3MTgsIDc3NzIyLCA3NzcyNiwgCi0gICAgNzc3MzAsIDc3NzM0LCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjYsIAotICAgIDc3NzcwLCA3Nzc3NCwgNzc3NzgsIDc3NzgyLCA3Nzc4NiwgNzc3OTAsIDc3Nzk0LCA3Nzc5OCwgNzc4MDIsIDc3ODA2LCAKLSAgICA3NzgxMCwgNzc4MTQsIDc3ODE4LCA3NzgyMiwgNzc4MjYsIDc3ODMwLCA3NzgzNCwgNzc4MzgsIDc3ODQyLCA3Nzg0NiwgCi0gICAgNzc4NTAsIDAsIDAsIDc3ODU0LCA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCA3Nzg4MiwgCi0gICAgNzc4ODYsIDc3ODkwLCA3Nzg5NCwgNzc4OTgsIDc3OTAyLCA3NzkwNiwgNzc5MTAsIDc3OTE0LCA3NzkxOCwgNzc5MjIsIAotICAgIDc3OTI2LCA3NzkzMCwgNzc5MzQsIDc3OTM4LCA3Nzk0MiwgNzc5NDYsIDc3OTUwLCA3Nzk1NCwgNzc5NTgsIDc3OTYyLCAKLSAgICA3Nzk2NiwgNzc5NzAsIDc3OTc0LCA3Nzk3OCwgNzc5ODIsIDc3OTg2LCA3Nzk5MCwgNzc5OTQsIDc3OTk4LCA3ODAwMiwgCi0gICAgNzgwMDYsIDc4MDEwLCA3ODAxNCwgNzgwMTgsIDc4MDIyLCA3ODAyNiwgNzgwMzAsIDc4MDM0LCA3ODAzOCwgNzgwNDIsIAotICAgIDc4MDQ2LCA3ODA1MCwgNzgwNTQsIDc4MDU4LCA3ODA2MiwgNzgwNjYsIDc4MDcwLCA3ODA3NCwgNzgwNzgsIDc4MDgyLCAKLSAgICA3ODA4NiwgNzgwOTAsIDc4MDk0LCA3ODA5OCwgNzgxMDIsIDc4MTA2LCA3ODExMCwgNzgxMTQsIDc4MTE4LCA3ODEyMiwgCi0gICAgNzgxMjYsIDc4MTMwLCA3ODEzNCwgNzgxMzgsIDc4MTQyLCA3ODE0NiwgNzgxNTAsIDc4MTU0LCA3ODE1OCwgNzgxNjIsIAotICAgIDc4MTY2LCA3ODE3MCwgNzgxNzQsIDc4MTc4LCA3ODE4MiwgNzgxODYsIDc4MTkwLCA3ODE5NCwgNzgxOTgsIDc4MjAyLCAKLSAgICA3ODIwNiwgNzgyMTAsIDc4MjE0LCA3ODIxOCwgNzgyMjIsIDc4MjI2LCA3ODIzMCwgNzgyMzQsIDc4MjM4LCA3ODI0MiwgCi0gICAgNzgyNDYsIDc4MjUwLCA3ODI1NCwgNzgyNTgsIDc4MjYyLCA3ODI2NiwgNzgyNzAsIDc4Mjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjEzMCwgNzYxMzQsIDc2MTM4LCA3NjE0MiwgNzYxNDYsIAorICAgIDc2MTUwLCA3NjE1NCwgNzYxNTgsIDc2MTYyLCA3NjE2NiwgNzYxNzAsIDc2MTc0LCA3NjE3OCwgNzYxODIsIDc2MTg2LCAKKyAgICA3NjE5MCwgNzYxOTQsIDc2MTk4LCA3NjIwMiwgNzYyMDYsIDc2MjEwLCA3NjIxNCwgNzYyMTgsIDAsIDAsIDAsIDAsIAorICAgIDc2MjIyLCA3NjIyNiwgNzYyMzAsIDc2MjM0LCA3NjIzOCwgNzYyNDIsIDc2MjQ2LCA3NjI1MCwgNzYyNTQsIDc2MjU4LCAKKyAgICA3NjI2MiwgNzYyNjYsIDc2MjcwLCA3NjI3NCwgNzYyNzgsIDc2MjgyLCA3NjI4NiwgNzYyOTAsIDc2Mjk0LCA3NjI5OCwgCisgICAgNzYzMDIsIDc2MzA2LCA3NjMxMCwgNzYzMTQsIDc2MzE4LCA3NjMyMiwgNzYzMjYsIDc2MzMwLCA3NjMzNCwgNzYzMzgsIAorICAgIDc2MzQyLCA3NjM0NiwgNzYzNTAsIDc2MzU0LCA3NjM1OCwgNzYzNjIsIDc2MzY2LCA3NjM3MCwgNzYzNzQsIDc2Mzc4LCAKKyAgICA3NjM4MiwgNzYzODYsIDc2MzkwLCA3NjM5NCwgNzYzOTgsIDc2NDAyLCA3NjQwNiwgNzY0MTAsIDc2NDE0LCAwLCAwLCAwLCAKKyAgICAwLCA3NjQxOCwgNzY0MjIsIDc2NDI2LCA3NjQzMCwgNzY0MzQsIDc2NDM4LCA3NjQ0MiwgNzY0NDYsIDc2NDUwLCA3NjQ1NCwgCisgICAgNzY0NTgsIDc2NDYyLCA3NjQ2NiwgNzY0NzAsIDc2NDc0LCA3NjQ3OCwgNzY0ODIsIDc2NDg2LCA3NjQ5MCwgNzY0OTQsIAorICAgIDc2NDk4LCA3NjUwMiwgNzY1MDYsIDc2NTEwLCA3NjUxNCwgNzY1MTgsIDc2NTIyLCA3NjUyNiwgNzY1MzAsIDc2NTM0LCAKKyAgICA3NjUzOCwgNzY1NDIsIDc2NTQ2LCA3NjU1MCwgNzY1NTQsIDc2NTU4LCA3NjU2MiwgNzY1NjYsIDc2NTcwLCA3NjU3NCwgCisgICAgNzY1NzgsIDc2NTgyLCA3NjU4NiwgNzY1OTAsIDc2NTk0LCA3NjU5OCwgNzY2MDIsIDc2NjA2LCA3NjYxMCwgNzY2MTQsIAorICAgIDc2NjE4LCA3NjYyMiwgNzY2MjYsIDc2NjMwLCA3NjYzNCwgNzY2MzgsIDc2NjQyLCA3NjY0NiwgNzY2NTAsIDc2NjU0LCAKKyAgICA3NjY1OCwgNzY2NjIsIDc2NjY2LCA3NjY3MCwgNzY2NzQsIDc2Njc4LCA3NjY4MiwgNzY2ODYsIDc2NjkwLCA3NjY5NCwgCisgICAgNzY2OTgsIDc2NzAyLCA3NjcwNiwgNzY3MTAsIDc2NzE0LCA3NjcxOCwgNzY3MjIsIDc2NzI2LCA3NjczMCwgNzY3MzQsIAorICAgIDc2NzM4LCA3Njc0MiwgNzY3NDYsIDc2NzUwLCA3Njc1NCwgNzY3NTgsIDc2NzYyLCA3Njc2NiwgNzY3NzAsIDc2Nzc0LCAKKyAgICA3Njc3OCwgNzY3ODIsIDc2Nzg2LCA3Njc5MCwgNzY3OTQsIDc2Nzk4LCA3NjgwMiwgNzY4MDYsIDc2ODEwLCA3NjgxNCwgCisgICAgNzY4MTgsIDc2ODIyLCA3NjgyNiwgNzY4MzAsIDc2ODM0LCA3NjgzOCwgNzY4NDIsIDc2ODQ2LCA3Njg1MCwgNzY4NTQsIAorICAgIDc2ODU4LCA3Njg2MiwgNzY4NjYsIDc2ODcwLCA3Njg3NCwgNzY4NzgsIDc2ODgyLCA3Njg4NiwgNzY4OTAsIDc2ODk0LCAKKyAgICA3Njg5OCwgNzY5MDIsIDc2OTA2LCA3NjkxMCwgNzY5MTQsIDc2OTE4LCA3NjkyMiwgNzY5MjYsIDc2OTMwLCA3NjkzNCwgCisgICAgNzY5MzgsIDc2OTQyLCA3Njk0NiwgNzY5NTAsIDc2OTU0LCA3Njk1OCwgNzY5NjIsIDc2OTY2LCA3Njk3MCwgNzY5NzQsIAorICAgIDc2OTc4LCA3Njk4MiwgNzY5ODYsIDc2OTkwLCA3Njk5NCwgNzY5OTgsIDc3MDAyLCA3NzAwNiwgNzcwMTAsIDc3MDE0LCAKKyAgICA3NzAxOCwgNzcwMjIsIDc3MDI2LCA3NzAzMCwgNzcwMzQsIDc3MDM4LCA3NzA0MiwgNzcwNDYsIDc3MDUwLCA3NzA1NCwgCisgICAgNzcwNTgsIDc3MDYyLCA3NzA2NiwgNzcwNzAsIDc3MDc0LCA3NzA3OCwgNzcwODIsIDc3MDg2LCA3NzA5MCwgNzcwOTQsIAorICAgIDc3MDk4LCA3NzEwMiwgNzcxMDYsIDc3MTEwLCA3NzExNCwgNzcxMTgsIDc3MTIyLCA3NzEyNiwgNzcxMzAsIDc3MTM0LCAKKyAgICA3NzEzOCwgNzcxNDIsIDc3MTQ2LCA3NzE1MCwgNzcxNTQsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcwLCA3NzE3NCwgCisgICAgNzcxNzgsIDc3MTgyLCA3NzE4NiwgNzcxOTAsIDc3MTk0LCA3NzE5OCwgNzcyMDIsIDc3MjA2LCA3NzIxMCwgNzcyMTQsIAorICAgIDc3MjE4LCA3NzIyMiwgNzcyMjYsIDc3MjMwLCA3NzIzNCwgNzcyMzgsIDc3MjQyLCA3NzI0NiwgNzcyNTAsIDc3MjU0LCAKKyAgICA3NzI1OCwgNzcyNjIsIDc3MjY2LCA3NzI3MCwgNzcyNzQsIDc3Mjc4LCA3NzI4MiwgNzcyODYsIDc3MjkwLCA3NzI5NCwgCisgICAgNzcyOTgsIDc3MzAyLCA3NzMwNiwgNzczMTAsIDc3MzE0LCA3NzMxOCwgNzczMjIsIDc3MzI2LCA3NzMzMCwgNzczMzQsIAorICAgIDc3MzM4LCA3NzM0MiwgNzczNDYsIDc3MzUwLCA3NzM1NCwgNzczNTgsIDc3MzYyLCA3NzM2NiwgNzczNzAsIDc3Mzc0LCAKKyAgICA3NzM3OCwgNzczODIsIDc3Mzg2LCA3NzM5MCwgNzczOTQsIDc3Mzk4LCA3NzQwMiwgNzc0MDYsIDc3NDEwLCA3NzQxNCwgCisgICAgNzc0MTgsIDc3NDIyLCA3NzQyNiwgNzc0MzAsIDc3NDM0LCA3NzQzOCwgNzc0NDIsIDc3NDQ2LCA3NzQ1MCwgNzc0NTQsIAorICAgIDc3NDU4LCA3NzQ2MiwgNzc0NjYsIDc3NDcwLCA3NzQ3NCwgNzc0NzgsIDc3NDgyLCA3NzQ4NiwgNzc0OTAsIDc3NDk0LCAKKyAgICA3NzQ5OCwgNzc1MDIsIDc3NTA2LCA3NzUxMCwgNzc1MTQsIDc3NTE4LCA3NzUyMiwgNzc1MjYsIDc3NTMwLCA3NzUzNCwgCisgICAgNzc1MzgsIDc3NTQyLCA3NzU0NiwgNzc1NTAsIDc3NTU0LCA3NzU1OCwgNzc1NjIsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIAorICAgIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NCwgNzc1OTgsIDc3NjAyLCA3NzYwNiwgNzc2MTAsIDc3NjE0LCAKKyAgICA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMCwgNzc2MzQsIDc3NjM4LCA3NzY0MiwgNzc2NDYsIDc3NjUwLCA3NzY1NCwgCisgICAgNzc2NTgsIDc3NjYyLCA3NzY2NiwgNzc2NzAsIDc3Njc0LCA3NzY3OCwgNzc2ODIsIDc3Njg2LCA3NzY5MCwgNzc2OTQsIAorICAgIDc3Njk4LCA3NzcwMiwgNzc3MDYsIDc3NzEwLCA3NzcxNCwgNzc3MTgsIDc3NzIyLCA3NzcyNiwgNzc3MzAsIDc3NzM0LCAKKyAgICA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjYsIDc3NzcwLCA3Nzc3NCwgCisgICAgNzc3NzgsIDc3NzgyLCA3Nzc4NiwgNzc3OTAsIDc3Nzk0LCA3Nzc5OCwgNzc4MDIsIDc3ODA2LCA3NzgxMCwgNzc4MTQsIAorICAgIDc3ODE4LCA3NzgyMiwgNzc4MjYsIDc3ODMwLCA3NzgzNCwgNzc4MzgsIDc3ODQyLCA3Nzg0NiwgNzc4NTAsIDc3ODU0LCAKKyAgICA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCAwLCAwLCA3Nzg4MiwgNzc4ODYsIDc3ODkwLCAKKyAgICA3Nzg5NCwgNzc4OTgsIDc3OTAyLCA3NzkwNiwgNzc5MTAsIDc3OTE0LCA3NzkxOCwgNzc5MjIsIDc3OTI2LCA3NzkzMCwgCisgICAgNzc5MzQsIDc3OTM4LCA3Nzk0MiwgNzc5NDYsIDc3OTUwLCA3Nzk1NCwgNzc5NTgsIDc3OTYyLCA3Nzk2NiwgNzc5NzAsIAorICAgIDc3OTc0LCA3Nzk3OCwgNzc5ODIsIDc3OTg2LCA3Nzk5MCwgNzc5OTQsIDc3OTk4LCA3ODAwMiwgNzgwMDYsIDc4MDEwLCAKKyAgICA3ODAxNCwgNzgwMTgsIDc4MDIyLCA3ODAyNiwgNzgwMzAsIDc4MDM0LCA3ODAzOCwgNzgwNDIsIDc4MDQ2LCA3ODA1MCwgCisgICAgNzgwNTQsIDc4MDU4LCA3ODA2MiwgNzgwNjYsIDc4MDcwLCA3ODA3NCwgNzgwNzgsIDc4MDgyLCA3ODA4NiwgNzgwOTAsIAorICAgIDc4MDk0LCA3ODA5OCwgNzgxMDIsIDc4MTA2LCA3ODExMCwgNzgxMTQsIDc4MTE4LCA3ODEyMiwgNzgxMjYsIDc4MTMwLCAKKyAgICA3ODEzNCwgNzgxMzgsIDc4MTQyLCA3ODE0NiwgNzgxNTAsIDc4MTU0LCA3ODE1OCwgNzgxNjIsIDc4MTY2LCA3ODE3MCwgCisgICAgNzgxNzQsIDc4MTc4LCA3ODE4MiwgNzgxODYsIDc4MTkwLCA3ODE5NCwgNzgxOTgsIDc4MjAyLCA3ODIwNiwgNzgyMTAsIAorICAgIDc4MjE0LCA3ODIxOCwgNzgyMjIsIDc4MjI2LCA3ODIzMCwgNzgyMzQsIDc4MjM4LCA3ODI0MiwgNzgyNDYsIDc4MjUwLCAKKyAgICA3ODI1NCwgNzgyNTgsIDc4MjYyLCA3ODI2NiwgNzgyNzAsIDc4Mjc0LCA3ODI3OCwgNzgyODIsIDc4Mjg2LCA3ODI5MCwgCisgICAgNzgyOTQsIDc4Mjk4LCA3ODMwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzMDYsIAorICAgIDc4MzExLCA3ODMxNiwgNzgzMjEsIDc4MzI2LCA3ODMzMSwgNzgzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDc4MzQ0LCA3ODM1MSwgNzgzNTgsIDc4MzY1LCA3ODM3MiwgMCwgMCwgMCwgMCwgMCwgNzgzNzksIDc4Mzg2LCAKKyAgICA3ODM5MywgNzg0MDMsIDc4NDA5LCA3ODQxNSwgNzg0MjEsIDc4NDI3LCA3ODQzMywgNzg0MzksIDc4NDQ2LCA3ODQ1MiwgCisgICAgNzg0NTgsIDc4NDY0LCA3ODQ3MywgNzg0ODIsIDc4NDk0LCA3ODUwNiwgNzg1MTIsIDc4NTE4LCA3ODUyNCwgNzg1MzEsIAorICAgIDc4NTM4LCA3ODU0NSwgNzg1NTIsIDc4NTU5LCAwLCA3ODU2NiwgNzg1NzMsIDc4NTgwLCA3ODU4OCwgNzg1OTUsIDAsIAorICAgIDc4NjAyLCAwLCA3ODYwOSwgNzg2MTYsIDAsIDc4NjIzLCA3ODYzMSwgMCwgNzg2MzgsIDc4NjQ1LCA3ODY1MiwgNzg2NTksIAorICAgIDc4NjY2LCA3ODY3MywgNzg2ODAsIDc4Njg3LCA3ODY5NCwgNzg3MDEsIDc4NzA2LCA3ODcxMywgNzg3MjAsIDc4NzI2LCAKKyAgICA3ODczMiwgNzg3MzgsIDc4NzQ0LCA3ODc1MCwgNzg3NTYsIDc4NzYyLCA3ODc2OCwgNzg3NzQsIDc4NzgwLCA3ODc4NiwgCisgICAgNzg3OTIsIDc4Nzk4LCA3ODgwNCwgNzg4MTAsIDc4ODE2LCA3ODgyMiwgNzg4MjgsIDc4ODM0LCA3ODg0MCwgNzg4NDYsIAorICAgIDc4ODUyLCA3ODg1OCwgNzg4NjQsIDc4ODcwLCA3ODg3NiwgNzg4ODIsIDc4ODg4LCA3ODg5NCwgNzg5MDAsIDc4OTA2LCAKKyAgICA3ODkxMiwgNzg5MTgsIDc4OTI0LCA3ODkzMCwgNzg5MzYsIDc4OTQyLCA3ODk0OCwgNzg5NTQsIDc4OTYwLCA3ODk2NiwgCisgICAgNzg5NzIsIDc4OTc4LCA3ODk4NCwgNzg5OTAsIDc4OTk2LCA3OTAwMiwgNzkwMDgsIDc5MDE0LCA3OTAyMCwgNzkwMjYsIAorICAgIDc5MDMyLCA3OTAzOCwgNzkwNDQsIDc5MDUwLCA3OTA1NiwgNzkwNjIsIDc5MDY4LCA3OTA3NCwgNzkwODAsIDc5MDg2LCAKKyAgICA3OTA5MiwgNzkwOTgsIDc5MTA0LCA3OTExMCwgNzkxMTYsIDc5MTIyLCA3OTEyOCwgNzkxMzQsIDc5MTQwLCA3OTE0NiwgCisgICAgNzkxNTIsIDc5MTU4LCA3OTE2NCwgNzkxNzAsIDc5MTc2LCA3OTE4NCwgNzkxOTIsIDc5MTk4LCA3OTIwNCwgNzkyMTAsIAorICAgIDc5MjE2LCA3OTIyNSwgNzkyMzQsIDc5MjQyLCA3OTI1MCwgNzkyNTgsIDc5MjY2LCA3OTI3NCwgNzkyODIsIDc5MjkwLCAKKyAgICA3OTI5OCwgNzkzMDUsIDc5MzEyLCA3OTMyMiwgNzkzMzIsIDc5MzM2LCA3OTM0MCwgNzkzNDUsIDc5MzUwLCA3OTM1NSwgCisgICAgNzkzNjAsIDc5MzY5LCA3OTM3OCwgNzkzODQsIDc5MzkwLCA3OTM5NywgNzk0MDQsIDc5NDExLCA3OTQxNSwgNzk0MjEsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDI3LCA3OTQzMywgNzk0MzksIAorICAgIDc5NDQ1LCA3OTQ1MSwgNzk0NTYsIDc5NDYxLCA3OTQ2NywgNzk0NzMsIDc5NDc5LCA3OTQ4NSwgNzk0OTMsIDc5NDk5LCAKKyAgICA3OTUwNSwgNzk1MTMsIDc5NTIxLCA3OTUyOSwgNzk1MzcsIDc5NTQyLCA3OTU0NywgNzk1NTIsIDc5NTU3LCA3OTU3MCwgCisgICAgNzk1ODMsIDc5NTkzLCA3OTYwMywgNzk2MTQsIDc5NjI1LCA3OTYzNiwgNzk2NDcsIDc5NjU3LCA3OTY2NywgNzk2NzgsIAorICAgIDc5Njg5LCA3OTcwMCwgNzk3MTEsIDc5NzIxLCA3OTczMSwgNzk3NDEsIDc5NzU3LCA3OTc3MywgNzk3ODksIDc5Nzk2LCAKKyAgICA3OTgwMywgNzk4MTAsIDc5ODE3LCA3OTgyNywgNzk4MzcsIDc5ODQ3LCA3OTg1OSwgNzk4NjksIDc5ODc3LCA3OTg4NSwgCisgICAgNzk4OTQsIDc5OTAyLCA3OTkxMiwgNzk5MjAsIDc5OTI4LCA3OTkzNiwgNzk5NDUsIDc5OTUzLCA3OTk2MywgNzk5NzEsIAorICAgIDc5OTc5LCA3OTk4NywgNzk5OTcsIDgwMDA1LCA4MDAxMiwgODAwMTksIDgwMDI2LCA4MDAzMywgODAwNDEsIDgwMDQ5LCAKKyAgICA4MDA1NywgODAwNjUsIDgwMDczLCA4MDA4MiwgODAwOTAsIDgwMDk4LCA4MDEwNiwgODAxMTQsIDgwMTIyLCA4MDEzMSwgCisgICAgODAxMzksIDgwMTQ3LCA4MDE1NSwgODAxNjMsIDgwMTcxLCA4MDE3OSwgODAxODcsIDgwMTk1LCA4MDIwMywgODAyMTEsIAorICAgIDgwMjIwLCA4MDIyOCwgODAyMzgsIDgwMjQ2LCA4MDI1NCwgODAyNjIsIDgwMjcyLCA4MDI4MCwgODAyODgsIDgwMjk2LCAKKyAgICA4MDMwNCwgODAzMTMsIDgwMzIyLCA4MDMzMCwgODAzNDAsIDgwMzQ4LCA4MDM1NiwgODAzNjQsIDgwMzczLCA4MDM4MSwgCisgICAgODAzOTEsIDgwMzk5LCA4MDQwNiwgODA0MTMsIDgwNDIxLCA4MDQyOCwgODA0MzcsIDgwNDQ0LCA4MDQ1MiwgODA0NjAsIAorICAgIDgwNDY5LCA4MDQ3NywgODA0ODcsIDgwNDk1LCA4MDUwMywgODA1MTEsIDgwNTIxLCA4MDUyOSwgODA1MzYsIDgwNTQzLCAKKyAgICA4MDU1MSwgODA1NTgsIDgwNTY3LCA4MDU3NCwgODA1ODQsIDgwNTk0LCA4MDYwNSwgODA2MTQsIDgwNjIzLCA4MDYzMiwgCisgICAgODA2NDEsIDgwNjUwLCA4MDY2MCwgODA2NzEsIDgwNjgyLCA4MDY5MiwgODA3MDMsIDgwNzE1LCA4MDcyNSwgODA3MzQsIAorICAgIDgwNzQzLCA4MDc1MSwgODA3NjAsIDgwNzcwLCA4MDc3OCwgODA3ODcsIDgwNzk2LCA4MDgwNCwgODA4MTMsIDgwODIzLCAKKyAgICA4MDgzMSwgODA4NDAsIDgwODQ5LCA4MDg1NywgODA4NjYsIDgwODc2LCA4MDg4NCwgODA4OTQsIDgwOTAyLCA4MDkxMiwgCisgICAgODA5MjAsIDgwOTI4LCA4MDkzNywgODA5NDUsIDgwOTU1LCA4MDk2MywgODA5NzEsIDgwOTgxLCA4MDk4OSwgODA5OTYsIAorICAgIDgxMDAzLCA4MTAxMiwgODEwMjEsIDgxMDI5LCA4MTAzOCwgODEwNDgsIDgxMDU2LCA4MTA2NywgODEwNzUsIDgxMDgzLCAKKyAgICA4MTA5MCwgODEwOTgsIDgxMTA3LCA4MTExNCwgODExMjQsIDgxMTM0LCA4MTE0NSwgODExNTUsIDgxMTY2LCA4MTE3NCwgCisgICAgODExODIsIDgxMTkxLCA4MTE5OSwgODEyMDgsIDgxMjE2LCA4MTIyNCwgODEyMzMsIDgxMjQxLCA4MTI1MCwgODEyNTgsIAorICAgIDgxMjY1LCA4MTI3MiwgODEyNzksIDgxMjg2LCA4MTI5NCwgODEzMDIsIDgxMzEwLCA4MTMxOCwgODEzMjcsIDgxMzM1LCAKKyAgICA4MTM0MywgODEzNTIsIDgxMzYwLCA4MTM2OCwgODEzNzYsIDgxMzg1LCA4MTM5MywgODE0MDEsIDgxNDA5LCA4MTQxNywgCisgICAgODE0MjUsIDgxNDMzLCA4MTQ0MSwgODE0NDksIDgxNDU3LCA4MTQ2NiwgODE0NzQsIDgxNDgyLCA4MTQ5MCwgODE0OTgsIAorICAgIDgxNTA2LCA4MTUxNSwgODE1MjQsIDgxNTMyLCA4MTU0MCwgODE1NDgsIDgxNTU3LCA4MTU2NSwgODE1NzQsIDgxNTgxLCAKKyAgICA4MTU4OCwgODE1OTYsIDgxNjAzLCA4MTYxMSwgODE2MTksIDgxNjI4LCA4MTYzNiwgODE2NDUsIDgxNjUzLCA4MTY2MSwgCisgICAgODE2NzEsIDgxNjc4LCA4MTY4NSwgODE2OTMsIDgxNzAwLCA4MTcwOCwgODE3MTgsIDgxNzI5LCA4MTczNywgODE3NDYsIAorICAgIDgxNzU0LCA4MTc2MywgODE3NzEsIDgxNzgwLCA4MTc4OCwgODE3OTcsIDgxODA1LCA4MTgxNCwgODE4MjMsIDgxODMxLCAKKyAgICA4MTgzOSwgODE4NDcsIDgxODU2LCA4MTg2MywgODE4NzEsIDgxODgwLCA4MTg4OSwgODE4OTgsIDgxOTA4LCA4MTkxNiwgCisgICAgODE5MjYsIDgxOTM0LCA4MTk0NCwgODE5NTIsIDgxOTYyLCA4MTk3MCwgODE5ODAsIDgxOTg4LCA4MTk5NywgODIwMDQsIAorICAgIDgyMDEzLCA4MjAyMCwgODIwMzAsIDgyMDM4LCA4MjA0OCwgODIwNTYsIDgyMDY2LCA4MjA3NCwgODIwODIsIDgyMDkwLCAKKyAgICA4MjA5OSwgODIxMDcsIDgyMTE2LCA4MjEyNSwgODIxMzQsIDgyMTQzLCA4MjE1MywgODIxNjEsIDgyMTcxLCA4MjE3OSwgCisgICAgODIxODksIDgyMTk3LCA4MjIwNywgODIyMTUsIDgyMjI1LCA4MjIzMywgODIyNDIsIDgyMjQ5LCA4MjI1OCwgODIyNjUsIAorICAgIDgyMjc1LCA4MjI4MywgODIyOTMsIDgyMzAxLCA4MjMxMSwgODIzMTksIDgyMzI3LCA4MjMzNSwgODIzNDQsIDgyMzUyLCAKKyAgICA4MjM2MSwgODIzNzAsIDgyMzc5LCA4MjM4OCwgODIzOTYsIDgyNDA0LCA4MjQxMywgODI0MjEsIDgyNDMwLCA4MjQzOSwgCisgICAgODI0NDcsIDgyNDU1LCA4MjQ2MywgODI0NzIsIDgyNDgwLCA4MjQ4OCwgODI0OTcsIDgyNTA1LCA4MjUxMywgODI1MjEsIAorICAgIDgyNTI5LCA4MjUzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODI1MzksIAorICAgIDgyNTQ5LCA4MjU1OSwgODI1NjksIDgyNTc5LCA4MjU5MCwgODI2MDAsIDgyNjEwLCA4MjYyMSwgODI2MzAsIDgyNjM5LCAKKyAgICA4MjY0OCwgODI2NTksIDgyNjY5LCA4MjY3OSwgODI2OTEsIDgyNzAxLCA4MjcxMSwgODI3MjEsIDgyNzMxLCA4Mjc0MSwgCisgICAgODI3NTEsIDgyNzYxLCA4Mjc3MSwgODI3ODEsIDgyNzkxLCA4MjgwMSwgODI4MTIsIDgyODIzLCA4MjgzMywgODI4NDMsIAorICAgIDgyODU1LCA4Mjg2NiwgODI4NzcsIDgyODg3LCA4Mjg5NywgODI5MDcsIDgyOTE3LCA4MjkyNywgODI5MzcsIDgyOTQ3LCAKKyAgICA4Mjk1OSwgODI5NjksIDgyOTc5LCA4Mjk5MSwgODMwMDIsIDgzMDEzLCA4MzAyMywgODMwMzMsIDgzMDQzLCA4MzA1MywgCisgICAgODMwNjUsIDgzMDc1LCA4MzA4NSwgODMwOTYsIDgzMTA3LCA4MzExNywgODMxMjcsIDgzMTM2LCA4MzE0NSwgODMxNTQsIAorICAgIDgzMTYzLCA4MzE3MiwgODMxODIsIDAsIDAsIDgzMTkyLCA4MzIwMiwgODMyMTIsIDgzMjIyLCA4MzIzMiwgODMyNDQsIAorICAgIDgzMjU0LCA4MzI2NCwgODMyNzYsIDgzMjg2LCA4MzI5OCwgODMzMDcsIDgzMzE2LCA4MzMyNywgODMzMzcsIDgzMzQ5LCAKKyAgICA4MzM2MCwgODMzNzMsIDgzMzgzLCA4MzM5NSwgODM0MDQsIDgzNDE1LCA4MzQyNiwgODM0MzksIDgzNDQ5LCA4MzQ1OSwgCisgICAgODM0NjksIDgzNDc5LCA4MzQ4OSwgODM0OTgsIDgzNTA3LCA4MzUxNiwgODM1MjUsIDgzNTM1LCA4MzU0NSwgODM1NTUsIAorICAgIDgzNTY1LCA4MzU3NSwgODM1ODUsIDgzNTk1LCA4MzYwNSwgODM2MTUsIDgzNjI1LCA4MzYzNSwgODM2NDUsIDgzNjU0LCAKKyAgICA4MzY2MywgODM2NzIsIDgzNjgyLCA4MzY5MiwgODM3MDIsIDgzNzEyLCA4MzcyMiwgODM3MzMsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4Mjc4LCA3ODI4MywgNzgyODgsIDc4MjkzLCA3ODI5OCwgNzgzMDMsIDc4MzExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMxNiwgNzgzMjMsIDc4MzMwLCA3ODMzNywgNzgzNDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4Mzc1LCA3ODM4MSwgNzgzODcsIDc4MzkzLCA3ODM5OSwgCi0gICAgNzg0MDUsIDc4NDExLCA3ODQxOCwgNzg0MjQsIDc4NDMwLCA3ODQzNiwgNzg0NDUsIDc4NDU0LCA3ODQ2NiwgNzg0NzgsIAotICAgIDc4NDg0LCA3ODQ5MCwgNzg0OTYsIDc4NTAzLCA3ODUxMCwgNzg1MTcsIDc4NTI0LCA3ODUzMSwgMCwgNzg1MzgsIDc4NTQ1LCAKLSAgICA3ODU1MiwgNzg1NjAsIDc4NTY3LCAwLCA3ODU3NCwgMCwgNzg1ODEsIDc4NTg4LCAwLCA3ODU5NSwgNzg2MDMsIDAsIAotICAgIDc4NjEwLCA3ODYxNywgNzg2MjQsIDc4NjMxLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgNzg2NjYsIDc4NjczLCAKLSAgICA3ODY3OCwgNzg2ODUsIDc4NjkyLCA3ODY5OCwgNzg3MDQsIDc4NzEwLCA3ODcxNiwgNzg3MjIsIDc4NzI4LCA3ODczNCwgCi0gICAgNzg3NDAsIDc4NzQ2LCA3ODc1MiwgNzg3NTgsIDc4NzY0LCA3ODc3MCwgNzg3NzYsIDc4NzgyLCA3ODc4OCwgNzg3OTQsIAotICAgIDc4ODAwLCA3ODgwNiwgNzg4MTIsIDc4ODE4LCA3ODgyNCwgNzg4MzAsIDc4ODM2LCA3ODg0MiwgNzg4NDgsIDc4ODU0LCAKLSAgICA3ODg2MCwgNzg4NjYsIDc4ODcyLCA3ODg3OCwgNzg4ODQsIDc4ODkwLCA3ODg5NiwgNzg5MDIsIDc4OTA4LCA3ODkxNCwgCi0gICAgNzg5MjAsIDc4OTI2LCA3ODkzMiwgNzg5MzgsIDc4OTQ0LCA3ODk1MCwgNzg5NTYsIDc4OTYyLCA3ODk2OCwgNzg5NzQsIAotICAgIDc4OTgwLCA3ODk4NiwgNzg5OTIsIDc4OTk4LCA3OTAwNCwgNzkwMTAsIDc5MDE2LCA3OTAyMiwgNzkwMjgsIDc5MDM0LCAKLSAgICA3OTA0MCwgNzkwNDYsIDc5MDUyLCA3OTA1OCwgNzkwNjQsIDc5MDcwLCA3OTA3NiwgNzkwODIsIDc5MDg4LCA3OTA5NCwgCi0gICAgNzkxMDAsIDc5MTA2LCA3OTExMiwgNzkxMTgsIDc5MTI0LCA3OTEzMCwgNzkxMzYsIDc5MTQyLCA3OTE0OCwgNzkxNTYsIAotICAgIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTgyLCA3OTE4OCwgNzkxOTcsIDc5MjA2LCA3OTIxNCwgNzkyMjIsIDc5MjMwLCAKLSAgICA3OTIzOCwgNzkyNDYsIDc5MjU0LCA3OTI2MiwgNzkyNzAsIDc5Mjc3LCA3OTI4NCwgNzkyOTQsIDc5MzA0LCA3OTMwOCwgCi0gICAgNzkzMTIsIDc5MzE3LCA3OTMyMiwgNzkzMjcsIDc5MzMyLCA3OTM0MSwgNzkzNTAsIDc5MzU2LCA3OTM2MiwgNzkzNjksIAotICAgIDc5Mzc2LCA3OTM4MywgNzkzODcsIDc5MzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3OTM5OSwgNzk0MDUsIDc5NDExLCA3OTQxNywgNzk0MjMsIDc5NDI4LCA3OTQzMywgNzk0MzksIDc5NDQ1LCAKLSAgICA3OTQ1MSwgNzk0NTcsIDc5NDY1LCA3OTQ3MSwgNzk0NzcsIDc5NDg1LCA3OTQ5MywgNzk1MDEsIDc5NTA5LCA3OTUxNCwgCi0gICAgNzk1MTksIDc5NTI0LCA3OTUyOSwgNzk1NDIsIDc5NTU1LCA3OTU2NSwgNzk1NzUsIDc5NTg2LCA3OTU5NywgNzk2MDgsIAotICAgIDc5NjE5LCA3OTYyOSwgNzk2MzksIDc5NjUwLCA3OTY2MSwgNzk2NzIsIDc5NjgzLCA3OTY5MywgNzk3MDMsIDc5NzEzLCAKLSAgICA3OTcyOSwgNzk3NDUsIDc5NzYxLCA3OTc2OCwgNzk3NzUsIDc5NzgyLCA3OTc4OSwgNzk3OTksIDc5ODA5LCA3OTgxOSwgCi0gICAgNzk4MzEsIDc5ODQxLCA3OTg0OSwgNzk4NTcsIDc5ODY2LCA3OTg3NCwgNzk4ODQsIDc5ODkyLCA3OTkwMCwgNzk5MDgsIAotICAgIDc5OTE3LCA3OTkyNSwgNzk5MzUsIDc5OTQzLCA3OTk1MSwgNzk5NTksIDc5OTY5LCA3OTk3NywgNzk5ODQsIDc5OTkxLCAKLSAgICA3OTk5OCwgODAwMDUsIDgwMDEzLCA4MDAyMSwgODAwMjksIDgwMDM3LCA4MDA0NSwgODAwNTQsIDgwMDYyLCA4MDA3MCwgCi0gICAgODAwNzgsIDgwMDg2LCA4MDA5NCwgODAxMDMsIDgwMTExLCA4MDExOSwgODAxMjcsIDgwMTM1LCA4MDE0MywgODAxNTEsIAotICAgIDgwMTU5LCA4MDE2NywgODAxNzUsIDgwMTgzLCA4MDE5MiwgODAyMDAsIDgwMjEwLCA4MDIxOCwgODAyMjYsIDgwMjM0LCAKLSAgICA4MDI0NCwgODAyNTIsIDgwMjYwLCA4MDI2OCwgODAyNzYsIDgwMjg1LCA4MDI5NCwgODAzMDIsIDgwMzEyLCA4MDMyMCwgCi0gICAgODAzMjgsIDgwMzM2LCA4MDM0NSwgODAzNTMsIDgwMzYzLCA4MDM3MSwgODAzNzgsIDgwMzg1LCA4MDM5MywgODA0MDAsIAotICAgIDgwNDA5LCA4MDQxNiwgODA0MjQsIDgwNDMyLCA4MDQ0MSwgODA0NDksIDgwNDU5LCA4MDQ2NywgODA0NzUsIDgwNDgzLCAKLSAgICA4MDQ5MywgODA1MDEsIDgwNTA4LCA4MDUxNSwgODA1MjMsIDgwNTMwLCA4MDUzOSwgODA1NDYsIDgwNTU2LCA4MDU2NiwgCi0gICAgODA1NzcsIDgwNTg2LCA4MDU5NSwgODA2MDQsIDgwNjEzLCA4MDYyMiwgODA2MzIsIDgwNjQzLCA4MDY1NCwgODA2NjQsIAotICAgIDgwNjc1LCA4MDY4NywgODA2OTcsIDgwNzA2LCA4MDcxNSwgODA3MjMsIDgwNzMyLCA4MDc0MiwgODA3NTAsIDgwNzU5LCAKLSAgICA4MDc2OCwgODA3NzYsIDgwNzg1LCA4MDc5NSwgODA4MDMsIDgwODEyLCA4MDgyMSwgODA4MjksIDgwODM4LCA4MDg0OCwgCi0gICAgODA4NTYsIDgwODY2LCA4MDg3NCwgODA4ODQsIDgwODkyLCA4MDkwMCwgODA5MDksIDgwOTE3LCA4MDkyNywgODA5MzUsIAotICAgIDgwOTQzLCA4MDk1MywgODA5NjEsIDgwOTY4LCA4MDk3NSwgODA5ODQsIDgwOTkzLCA4MTAwMSwgODEwMTAsIDgxMDIwLCAKLSAgICA4MTAyOCwgODEwMzksIDgxMDQ3LCA4MTA1NSwgODEwNjIsIDgxMDcwLCA4MTA3OSwgODEwODYsIDgxMDk2LCA4MTEwNiwgCi0gICAgODExMTcsIDgxMTI3LCA4MTEzOCwgODExNDYsIDgxMTU0LCA4MTE2MywgODExNzEsIDgxMTgwLCA4MTE4OCwgODExOTYsIAotICAgIDgxMjA1LCA4MTIxMywgODEyMjIsIDgxMjMwLCA4MTIzNywgODEyNDQsIDgxMjUxLCA4MTI1OCwgODEyNjYsIDgxMjc0LCAKLSAgICA4MTI4MiwgODEyOTAsIDgxMjk5LCA4MTMwNywgODEzMTUsIDgxMzI0LCA4MTMzMiwgODEzNDAsIDgxMzQ4LCA4MTM1NywgCi0gICAgODEzNjUsIDgxMzczLCA4MTM4MSwgODEzODksIDgxMzk3LCA4MTQwNSwgODE0MTMsIDgxNDIxLCA4MTQyOSwgODE0MzgsIAotICAgIDgxNDQ2LCA4MTQ1NCwgODE0NjIsIDgxNDcwLCA4MTQ3OCwgODE0ODcsIDgxNDk2LCA4MTUwNCwgODE1MTIsIDgxNTIwLCAKLSAgICA4MTUyOSwgODE1MzcsIDgxNTQ2LCA4MTU1MywgODE1NjAsIDgxNTY4LCA4MTU3NSwgODE1ODMsIDgxNTkxLCA4MTYwMCwgCi0gICAgODE2MDgsIDgxNjE3LCA4MTYyNSwgODE2MzMsIDgxNjQzLCA4MTY1MCwgODE2NTcsIDgxNjY1LCA4MTY3MiwgODE2ODAsIAotICAgIDgxNjkwLCA4MTcwMSwgODE3MDksIDgxNzE4LCA4MTcyNiwgODE3MzUsIDgxNzQzLCA4MTc1MiwgODE3NjAsIDgxNzY5LCAKLSAgICA4MTc3NywgODE3ODYsIDgxNzk1LCA4MTgwMywgODE4MTEsIDgxODE5LCA4MTgyOCwgODE4MzUsIDgxODQzLCA4MTg1MiwgCi0gICAgODE4NjEsIDgxODcwLCA4MTg4MCwgODE4ODgsIDgxODk4LCA4MTkwNiwgODE5MTYsIDgxOTI0LCA4MTkzNCwgODE5NDIsIAotICAgIDgxOTUyLCA4MTk2MCwgODE5NjksIDgxOTc2LCA4MTk4NSwgODE5OTIsIDgyMDAyLCA4MjAxMCwgODIwMjAsIDgyMDI4LCAKLSAgICA4MjAzOCwgODIwNDYsIDgyMDU0LCA4MjA2MiwgODIwNzEsIDgyMDc5LCA4MjA4OCwgODIwOTcsIDgyMTA2LCA4MjExNSwgCi0gICAgODIxMjUsIDgyMTMzLCA4MjE0MywgODIxNTEsIDgyMTYxLCA4MjE2OSwgODIxNzksIDgyMTg3LCA4MjE5NywgODIyMDUsIAotICAgIDgyMjE0LCA4MjIyMSwgODIyMzAsIDgyMjM3LCA4MjI0NywgODIyNTUsIDgyMjY1LCA4MjI3MywgODIyODMsIDgyMjkxLCAKLSAgICA4MjI5OSwgODIzMDcsIDgyMzE2LCA4MjMyNCwgODIzMzMsIDgyMzQyLCA4MjM1MSwgODIzNjAsIDgyMzY4LCA4MjM3NiwgCi0gICAgODIzODUsIDgyMzkzLCA4MjQwMiwgODI0MTEsIDgyNDE5LCA4MjQyNywgODI0MzUsIDgyNDQ0LCA4MjQ1MiwgODI0NjAsIAotICAgIDgyNDY5LCA4MjQ3NywgODI0ODUsIDgyNDkzLCA4MjUwMSwgODI1MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgyNTExLCA4MjUyMSwgODI1MzEsIDgyNTQxLCA4MjU1MSwgODI1NjIsIDgyNTcyLCA4MjU4MiwgCi0gICAgODI1OTMsIDgyNjAyLCA4MjYxMSwgODI2MjAsIDgyNjMxLCA4MjY0MSwgODI2NTEsIDgyNjYzLCA4MjY3MywgODI2ODMsIAotICAgIDgyNjkzLCA4MjcwMywgODI3MTMsIDgyNzIzLCA4MjczMywgODI3NDMsIDgyNzUzLCA4Mjc2MywgODI3NzMsIDgyNzg0LCAKLSAgICA4Mjc5NSwgODI4MDUsIDgyODE1LCA4MjgyNywgODI4MzgsIDgyODQ5LCA4Mjg1OSwgODI4NjksIDgyODc5LCA4Mjg4OSwgCi0gICAgODI4OTksIDgyOTA5LCA4MjkxOSwgODI5MzEsIDgyOTQxLCA4Mjk1MSwgODI5NjMsIDgyOTc0LCA4Mjk4NSwgODI5OTUsIAotICAgIDgzMDA1LCA4MzAxNSwgODMwMjUsIDgzMDM3LCA4MzA0NywgODMwNTcsIDgzMDY4LCA4MzA3OSwgODMwODksIDgzMDk5LCAKLSAgICA4MzEwOCwgODMxMTcsIDgzMTI2LCA4MzEzNSwgODMxNDQsIDgzMTU0LCAwLCAwLCA4MzE2NCwgODMxNzQsIDgzMTg0LCAKLSAgICA4MzE5NCwgODMyMDQsIDgzMjE2LCA4MzIyNiwgODMyMzYsIDgzMjQ4LCA4MzI1OCwgODMyNzAsIDgzMjc5LCA4MzI4OCwgCi0gICAgODMyOTksIDgzMzA5LCA4MzMyMSwgODMzMzIsIDgzMzQ1LCA4MzM1NSwgODMzNjcsIDgzMzc2LCA4MzM4NywgODMzOTgsIAotICAgIDgzNDExLCA4MzQyMSwgODM0MzEsIDgzNDQxLCA4MzQ1MSwgODM0NjEsIDgzNDcwLCA4MzQ3OSwgODM0ODgsIDgzNDk3LCAKLSAgICA4MzUwNywgODM1MTcsIDgzNTI3LCA4MzUzNywgODM1NDcsIDgzNTU3LCA4MzU2NywgODM1NzcsIDgzNTg3LCA4MzU5NywgCi0gICAgODM2MDcsIDgzNjE3LCA4MzYyNiwgODM2MzUsIDgzNjQ0LCA4MzY1NCwgODM2NjQsIDgzNjc0LCA4MzY4NCwgODM2OTQsIAotICAgIDgzNzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MzcxNSwgODM3MzAsIAotICAgIDgzNzQ1LCA4Mzc1MSwgODM3NTcsIDgzNzYzLCA4Mzc2OSwgODM3NzUsIDgzNzgxLCA4Mzc4NywgODM3OTMsIDgzODAxLCAKLSAgICA4MzgwNSwgODM4MDgsIDAsIDAsIDgzODE2LCA4MzgxOSwgODM4MjIsIDgzODI1LCA4MzgyOCwgODM4MzEsIDgzODM0LCAKLSAgICA4MzgzNywgODM4NDAsIDgzODQzLCA4Mzg0NiwgODM4NDksIDgzODUyLCA4Mzg1NSwgODM4NTgsIDgzODYxLCA4Mzg2NCwgCi0gICAgODM4NzIsIDgzODgxLCA4Mzg5MiwgODM5MDAsIDgzOTA4LCA4MzkxNywgODM5MjYsIDgzOTM3LCA4Mzk0OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODM5NTgsIDgzOTYzLCA4Mzk2OCwgODM5NzUsIDgzOTgyLCA4Mzk4OCwgODM5OTQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgzOTk5LCA4NDAwOSwgODQwMTksIDg0MDI5LCA4NDAzOCwgODQwNDksIDg0MDU4LCA4NDA2NywgCi0gICAgODQwNzcsIDg0MDg3LCA4NDA5OSwgODQxMTEsIDg0MTIyLCA4NDEzMywgODQxNDQsIDg0MTU1LCA4NDE2NSwgODQxNzUsIAotICAgIDg0MTg1LCA4NDE5NSwgODQyMDYsIDg0MjE3LCA4NDIyMSwgODQyMjYsIDg0MjM1LCA4NDI0NCwgODQyNDgsIDg0MjUyLCAKLSAgICA4NDI1NiwgODQyNjEsIDg0MjY2LCA4NDI3MSwgODQyNzYsIDg0Mjc5LCA4NDI4MywgMCwgODQyODgsIDg0MjkxLCA4NDI5NCwgCi0gICAgODQyOTgsIDg0MzAyLCA4NDMwNywgODQzMTEsIDg0MzE1LCA4NDMyMCwgODQzMjUsIDg0MzMyLCA4NDMzOSwgODQzNDIsIAotICAgIDg0MzQ1LCA4NDM0OCwgODQzNTEsIDg0MzU0LCA4NDM1OCwgODQzNjIsIDAsIDg0MzY2LCA4NDM3MSwgODQzNzUsIDg0Mzc5LCAKLSAgICAwLCAwLCAwLCAwLCA4NDM4NCwgODQzODksIDg0Mzk2LCA4NDQwMSwgODQ0MDYsIDAsIDg0NDExLCA4NDQxNiwgODQ0MjEsIAotICAgIDg0NDI2LCA4NDQzMSwgODQ0MzYsIDg0NDQxLCA4NDQ0NiwgODQ0NTEsIDg0NDU2LCA4NDQ2MSwgODQ0NjYsIDg0NDc1LCAKLSAgICA4NDQ4NCwgODQ0OTIsIDg0NTAwLCA4NDUwOSwgODQ1MTgsIDg0NTI3LCA4NDUzNiwgODQ1NDQsIDg0NTUyLCA4NDU2MCwgCi0gICAgODQ1NjgsIDg0NTczLCA4NDU3OCwgODQ1ODQsIDg0NTkwLCA4NDU5NiwgODQ2MDIsIDg0NjEwLCA4NDYxOCwgODQ2MjQsIAotICAgIDg0NjMwLCA4NDYzNiwgODQ2NDIsIDg0NjQ4LCA4NDY1NCwgODQ2NjAsIDg0NjY2LCA4NDY3MSwgODQ2NzYsIDg0NjgxLCAKLSAgICA4NDY4NiwgODQ2OTEsIDg0Njk2LCA4NDcwMSwgODQ3MDYsIDg0NzEyLCA4NDcxOCwgODQ3MjQsIDg0NzMwLCA4NDczNiwgCi0gICAgODQ3NDIsIDg0NzQ4LCA4NDc1NCwgODQ3NjAsIDg0NzY2LCA4NDc3MiwgODQ3NzgsIDg0Nzg0LCA4NDc5MCwgODQ3OTYsIAotICAgIDg0ODAyLCA4NDgwOCwgODQ4MTQsIDg0ODIwLCA4NDgyNiwgODQ4MzIsIDg0ODM4LCA4NDg0NCwgODQ4NTAsIDg0ODU2LCAKLSAgICA4NDg2MiwgODQ4NjgsIDg0ODc0LCA4NDg4MCwgODQ4ODYsIDg0ODkyLCA4NDg5OCwgODQ5MDQsIDg0OTEwLCA4NDkxNiwgCi0gICAgODQ5MjIsIDg0OTI4LCA4NDkzNCwgODQ5NDAsIDg0OTQ2LCA4NDk1MiwgODQ5NTgsIDg0OTY0LCA4NDk3MCwgODQ5NzYsIAotICAgIDg0OTgyLCA4NDk4OCwgODQ5OTQsIDg1MDAwLCA4NTAwNiwgODUwMTIsIDg1MDE4LCA4NTAyNCwgODUwMzAsIDg1MDM2LCAKLSAgICA4NTA0MiwgODUwNDgsIDg1MDU0LCA4NTA2MCwgODUwNjYsIDg1MDcxLCA4NTA3NiwgODUwODEsIDg1MDg2LCA4NTA5MiwgCi0gICAgODUwOTgsIDg1MTA0LCA4NTExMCwgODUxMTYsIDg1MTIyLCA4NTEyOCwgODUxMzQsIDg1MTQwLCA4NTE0NiwgODUxNTMsIAotICAgIDg1MTYwLCA4NTE2NSwgODUxNzAsIDg1MTc1LCA4NTE4MCwgODUxOTIsIDg1MjA0LCA4NTIxNSwgODUyMjYsIDg1MjM4LCAKLSAgICA4NTI1MCwgODUyNTgsIDAsIDAsIDg1MjY2LCAwLCA4NTI3NCwgODUyNzgsIDg1MjgyLCA4NTI4NSwgODUyODksIDg1MjkzLCAKLSAgICA4NTI5NiwgODUyOTksIDg1MzAzLCA4NTMwNywgODUzMTAsIDg1MzEzLCA4NTMxNiwgODUzMTksIDg1MzI0LCA4NTMyNywgCi0gICAgODUzMzEsIDg1MzM0LCA4NTMzNywgODUzNDAsIDg1MzQzLCA4NTM0NiwgODUzNDksIDg1MzUyLCA4NTM1NSwgODUzNTgsIAotICAgIDg1MzYxLCA4NTM2NCwgODUzNjgsIDg1MzcyLCA4NTM3NiwgODUzODAsIDg1Mzg1LCA4NTM5MCwgODUzOTYsIDg1NDAyLCAKLSAgICA4NTQwOCwgODU0MTMsIDg1NDE5LCA4NTQyNSwgODU0MzEsIDg1NDM2LCA4NTQ0MiwgODU0NDgsIDg1NDUzLCA4NTQ1OCwgCi0gICAgODU0NjQsIDg1NDY5LCA4NTQ3NSwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTgsIDg1NTAzLCA4NTUwOSwgODU1MTUsIAotICAgIDg1NTIxLCA4NTUyNywgODU1MzMsIDg1NTM3LCA4NTU0MiwgODU1NDYsIDg1NTUxLCA4NTU1NSwgODU1NjAsIDg1NTY1LCAKLSAgICA4NTU3MSwgODU1NzcsIDg1NTgzLCA4NTU4OCwgODU1OTQsIDg1NjAwLCA4NTYwNiwgODU2MTEsIDg1NjE3LCA4NTYyMywgCi0gICAgODU2MjgsIDg1NjMzLCA4NTYzOSwgODU2NDQsIDg1NjUwLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MywgODU2NzgsIAotICAgIDg1Njg0LCA4NTY5MCwgODU2OTYsIDg1NzAyLCA4NTcwOCwgODU3MTMsIDg1NzE3LCA4NTcyMiwgODU3MjQsIDg1NzI5LCAKLSAgICA4NTczNCwgODU3NDAsIDg1NzQ1LCA4NTc1MCwgODU3NTQsIDg1NzYwLCA4NTc2NSwgODU3NzAsIDg1Nzc1LCA4NTc4MCwgCi0gICAgODU3ODUsIDg1NzkwLCA4NTc5NSwgODU4MDEsIDg1ODA3LCA4NTgxMywgODU4MjEsIDg1ODI1LCA4NTgyOSwgODU4MzMsIAotICAgIDg1ODM3LCA4NTg0MSwgODU4NDUsIDg1ODUwLCA4NTg1NSwgODU4NjAsIDg1ODY1LCA4NTg2OSwgODU4NzQsIDg1ODc5LCAKLSAgICA4NTg4NCwgODU4ODksIDg1ODk0LCA4NTg5OSwgODU5MDQsIDg1OTA5LCA4NTkxMywgODU5MTcsIDg1OTIyLCA4NTkyNywgCi0gICAgODU5MzIsIDg1OTM3LCA4NTk0MSwgODU5NDYsIDg1OTUxLCA4NTk1NiwgODU5NjEsIDg1OTY1LCA4NTk3MCwgODU5NzUsIAotICAgIDg1OTgwLCA4NTk4NSwgODU5ODksIDg1OTk0LCA4NTk5OSwgODYwMDMsIDg2MDA4LCA4NjAxMywgODYwMTgsIDg2MDIzLCAKLSAgICA4NjAyOCwgODYwMzMsIDg2MDQwLCA4NjA0NywgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjYsIDg2MDcxLCA4NjA3NiwgCi0gICAgODYwODEsIDg2MDg2LCA4NjA5MSwgODYwOTYsIDg2MTAxLCA4NjEwNiwgODYxMTEsIDg2MTE2LCA4NjEyMSwgODYxMjYsIAotICAgIDg2MTMxLCA4NjEzNiwgODYxNDEsIDg2MTQ2LCA4NjE1MSwgODYxNTYsIDg2MTYxLCA4NjE2NiwgODYxNzEsIDg2MTc2LCAKLSAgICA4NjE4MSwgODYxODYsIDg2MTkxLCA4NjE5NiwgMCwgMCwgMCwgODYyMDEsIDg2MjA1LCA4NjIxMCwgODYyMTQsIDg2MjE5LCAKLSAgICA4NjIyNCwgMCwgMCwgODYyMjgsIDg2MjMzLCA4NjIzOCwgODYyNDIsIDg2MjQ3LCA4NjI1MiwgMCwgMCwgODYyNTcsIAotICAgIDg2MjYyLCA4NjI2NiwgODYyNzEsIDg2Mjc2LCA4NjI4MSwgMCwgMCwgODYyODYsIDg2MjkxLCA4NjI5NiwgMCwgMCwgMCwgCi0gICAgODYzMDAsIDg2MzA0LCA4NjMwOCwgODYzMTIsIDg2MzE1LCA4NjMxOSwgODYzMjMsIDAsIDg2MzI3LCA4NjMzMywgODYzMzYsIAotICAgIDg2MzQwLCA4NjM0MywgODYzNDcsIDg2MzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjM1NSwgODYzNjEsIAotICAgIDg2MzY3LCA4NjM3MywgODYzNzksIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgODY0MTMsIAotICAgIDg2NDIwLCA4NjQyNywgODY0MzQsIDg2NDQxLCA4NjQ0OCwgODY0NTUsIDAsIDg2NDYyLCA4NjQ2OSwgODY0NzYsIDg2NDgyLCAKLSAgICA4NjQ4OSwgODY0OTYsIDg2NTAzLCA4NjUxMCwgODY1MTYsIDg2NTIzLCA4NjUzMCwgODY1MzcsIDg2NTQ0LCA4NjU1MCwgCi0gICAgODY1NTcsIDg2NTY0LCA4NjU3MSwgODY1NzgsIDg2NTg0LCA4NjU5MSwgODY1OTgsIDg2NjA1LCA4NjYxMiwgODY2MTksIAotICAgIDg2NjI2LCA4NjYzMywgMCwgODY2NDAsIDg2NjQ2LCA4NjY1MywgODY2NjAsIDg2NjY3LCA4NjY3NCwgODY2ODAsIDg2Njg3LCAKLSAgICA4NjY5NCwgODY3MDEsIDg2NzA4LCA4NjcxNSwgODY3MjIsIDg2NzI5LCA4NjczNSwgODY3NDIsIDg2NzQ5LCA4Njc1NiwgCi0gICAgODY3NjMsIDAsIDg2NzcwLCA4Njc3NywgMCwgODY3ODQsIDg2NzkxLCA4Njc5OCwgODY4MDUsIDg2ODEyLCA4NjgxOSwgCi0gICAgODY4MjYsIDg2ODMzLCA4Njg0MCwgODY4NDcsIDg2ODU0LCA4Njg2MSwgODY4NjgsIDg2ODc1LCA4Njg4MiwgMCwgMCwgCi0gICAgODY4ODgsIDg2ODkzLCA4Njg5OCwgODY5MDMsIDg2OTA4LCA4NjkxMywgODY5MTgsIDg2OTIzLCA4NjkyOCwgODY5MzMsIAotICAgIDg2OTM4LCA4Njk0MywgODY5NDgsIDg2OTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk1OCwgODY5NjUsIAotICAgIDg2OTcyLCA4Njk3OSwgODY5ODYsIDg2OTkzLCA4NzAwMCwgODcwMDcsIDg3MDE0LCA4NzAyMSwgODcwMjgsIDg3MDM1LCAKLSAgICA4NzA0MiwgODcwNDksIDg3MDU2LCA4NzA2MywgODcwNzAsIDg3MDc3LCA4NzA4NCwgODcwOTEsIDg3MDk5LCA4NzEwNywgCi0gICAgODcxMTQsIDg3MTIxLCA4NzEyNiwgODcxMzQsIDg3MTQyLCA4NzE0OSwgODcxNTYsIDg3MTYxLCA4NzE2OCwgODcxNzMsIAotICAgIDg3MTc4LCA4NzE4NSwgODcxOTAsIDg3MTk1LCA4NzIwMCwgODcyMDgsIDg3MjEzLCA4NzIxOCwgODcyMjUsIDg3MjMwLCAKLSAgICA4NzIzNSwgODcyNDIsIDg3MjQ5LCA4NzI1NCwgODcyNTksIDg3MjY0LCA4NzI2OSwgODcyNzQsIDg3Mjc5LCA4NzI4NCwgCi0gICAgODcyODksIDg3Mjk0LCA4NzMwMSwgODczMDYsIDg3MzEzLCA4NzMxOCwgODczMjMsIDg3MzI4LCA4NzMzMywgODczMzgsIAotICAgIDg3MzQzLCA4NzM0OCwgODczNTMsIDg3MzU4LCA4NzM2MywgODczNjgsIDg3Mzc1LCA4NzM4MiwgODczODksIDg3Mzk2LCAKLSAgICA4NzQwMiwgODc0MDcsIDg3NDE0LCA4NzQxOSwgODc0MjQsIDg3NDMzLCA4NzQ0MCwgODc0NDksIDg3NDU2LCA4NzQ2MSwgCi0gICAgODc0NjYsIDg3NDc0LCA4NzQ3OSwgODc0ODQsIDg3NDg5LCA4NzQ5NCwgODc0OTksIDg3NTA2LCA4NzUxMSwgODc1MTYsIAotICAgIDg3NTIxLCA4NzUyNiwgODc1MzEsIDg3NTM4LCA4NzU0NSwgODc1NTIsIDg3NTU5LCA4NzU2NiwgODc1NzMsIDg3NTgwLCAKLSAgICA4NzU4NywgODc1OTQsIDg3NjAxLCA4NzYwOCwgODc2MTUsIDg3NjIyLCA4NzYyOSwgODc2MzYsIDg3NjQzLCA4NzY1MCwgCi0gICAgODc2NTcsIDg3NjY0LCA4NzY3MSwgODc2NzgsIDg3Njg1LCA4NzY5MiwgODc2OTksIDg3NzA2LCA4NzcxMywgODc3MjAsIAotICAgIDg3NzI3LCAwLCAwLCAwLCAwLCAwLCA4NzczNCwgODc3NDIsIDg3NzUwLCAwLCAwLCAwLCAwLCA4Nzc1NSwgODc3NTksIAotICAgIDg3NzYzLCA4Nzc2NywgODc3NzEsIDg3Nzc1LCA4Nzc3OSwgODc3ODMsIDg3Nzg3LCA4Nzc5MSwgODc3OTYsIDg3ODAxLCAKLSAgICA4NzgwNiwgODc4MTEsIDg3ODE2LCA4NzgyMSwgODc4MjYsIDg3ODMxLCA4NzgzNiwgODc4NDIsIDg3ODQ4LCA4Nzg1NCwgCi0gICAgODc4NjEsIDg3ODY4LCA4Nzg3NSwgODc4ODIsIDg3ODg5LCA4Nzg5NiwgODc5MDIsIDg3OTA4LCA4NzkxNCwgODc5MjEsIAotICAgIDg3OTI4LCA4NzkzNSwgODc5NDIsIDg3OTQ5LCA4Nzk1NiwgODc5NjMsIDg3OTcwLCA4Nzk3NywgODc5ODQsIDg3OTkxLCAKLSAgICA4Nzk5OCwgODgwMDUsIDg4MDEyLCAwLCAwLCAwLCA4ODAxOSwgODgwMjcsIDg4MDM1LCA4ODA0MywgODgwNTEsIDg4MDU5LCAKLSAgICA4ODA2OSwgODgwNzksIDg4MDg3LCA4ODA5NSwgODgxMDMsIDg4MTExLCA4ODExOSwgODgxMjUsIDg4MTMyLCA4ODE0MSwgCi0gICAgODgxNTAsIDg4MTU5LCA4ODE2OCwgODgxNzcsIDg4MTg2LCA4ODE5NiwgODgyMDcsIDg4MjE3LCA4ODIyOCwgODgyMzcsIAotICAgIDg4MjQ2LCA4ODI1NSwgODgyNjUsIDg4Mjc2LCA4ODI4NiwgODgyOTcsIDg4MzA4LCA4ODMxNywgODgzMjUsIDg4MzMxLCAKLSAgICA4ODMzNywgODgzNDMsIDg4MzQ5LCA4ODM1NywgODgzNjUsIDg4MzcxLCA4ODM3OCwgODgzODgsIDg4Mzk1LCA4ODQwMiwgCi0gICAgODg0MDksIDg4NDE2LCA4ODQyMywgODg0MzMsIDg4NDQwLCA4ODQ0NywgODg0NTUsIDg4NDYzLCA4ODQ3MiwgODg0ODEsIAotICAgIDg4NDkwLCA4ODQ5OSwgODg1MDgsIDg4NTE2LCA4ODUyNSwgODg1MzQsIDg4NTQzLCA4ODU0NywgODg1NTQsIDg4NTU5LCAKLSAgICA4ODU2NCwgODg1NjgsIDg4NTcyLCA4ODU3NiwgODg1ODAsIDg4NTg1LCA4ODU5MCwgODg1OTYsIDg4NjAyLCA4ODYwNiwgCi0gICAgODg2MTIsIDg4NjE2LCA4ODYyMCwgODg2MjQsIDg4NjI4LCA4ODYzMiwgODg2MzYsIDg4NjQyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4ODY0NiwgODg2NTEsIDg4NjU2LCA4ODY2MSwgODg2NjYsIDg4NjczLCA4ODY3OCwgODg2ODMsIDg4Njg4LCA4ODY5MywgCi0gICAgODg2OTgsIDg4NzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzc0MywgODM3NTgsIDgzNzczLCA4Mzc3OSwgODM3ODUsIDgzNzkxLCAKKyAgICA4Mzc5NywgODM4MDMsIDgzODA5LCA4MzgxNSwgODM4MjEsIDgzODI5LCA4MzgzMywgODM4MzYsIDAsIDAsIDgzODQ0LCAKKyAgICA4Mzg0NywgODM4NTAsIDgzODUzLCA4Mzg1NiwgODM4NTksIDgzODYyLCA4Mzg2NSwgODM4NjgsIDgzODcxLCA4Mzg3NCwgCisgICAgODM4NzcsIDgzODgwLCA4Mzg4MywgODM4ODYsIDgzODg5LCA4Mzg5MiwgODM5MDAsIDgzOTA5LCA4MzkyMCwgODM5MjgsIAorICAgIDgzOTM2LCA4Mzk0NSwgODM5NTQsIDgzOTY1LCA4Mzk3NywgMCwgMCwgMCwgMCwgMCwgMCwgODM5ODYsIDgzOTkxLCA4Mzk5NiwgCisgICAgODQwMDMsIDg0MDEwLCA4NDAxNiwgODQwMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0MDI3LCA4NDAzNywgCisgICAgODQwNDcsIDg0MDU3LCA4NDA2NiwgODQwNzcsIDg0MDg2LCA4NDA5NSwgODQxMDUsIDg0MTE1LCA4NDEyNywgODQxMzksIAorICAgIDg0MTUwLCA4NDE2MSwgODQxNzIsIDg0MTgzLCA4NDE5MywgODQyMDMsIDg0MjEzLCA4NDIyMywgODQyMzQsIDg0MjQ1LCAKKyAgICA4NDI0OSwgODQyNTQsIDg0MjYzLCA4NDI3MiwgODQyNzYsIDg0MjgwLCA4NDI4NCwgODQyODksIDg0Mjk0LCA4NDI5OSwgCisgICAgODQzMDQsIDg0MzA3LCA4NDMxMSwgMCwgODQzMTYsIDg0MzE5LCA4NDMyMiwgODQzMjYsIDg0MzMwLCA4NDMzNSwgODQzMzksIAorICAgIDg0MzQzLCA4NDM0OCwgODQzNTMsIDg0MzYwLCA4NDM2NywgODQzNzAsIDg0MzczLCA4NDM3NiwgODQzNzksIDg0MzgyLCAKKyAgICA4NDM4NiwgODQzOTAsIDAsIDg0Mzk0LCA4NDM5OSwgODQ0MDMsIDg0NDA3LCAwLCAwLCAwLCAwLCA4NDQxMiwgODQ0MTcsIAorICAgIDg0NDI0LCA4NDQyOSwgODQ0MzQsIDAsIDg0NDM5LCA4NDQ0NCwgODQ0NDksIDg0NDU0LCA4NDQ1OSwgODQ0NjQsIDg0NDY5LCAKKyAgICA4NDQ3NCwgODQ0NzksIDg0NDg0LCA4NDQ4OSwgODQ0OTQsIDg0NTAzLCA4NDUxMiwgODQ1MjAsIDg0NTI4LCA4NDUzNywgCisgICAgODQ1NDYsIDg0NTU1LCA4NDU2NCwgODQ1NzIsIDg0NTgwLCA4NDU4OCwgODQ1OTYsIDg0NjAxLCA4NDYwNiwgODQ2MTIsIAorICAgIDg0NjE4LCA4NDYyNCwgODQ2MzAsIDg0NjM4LCA4NDY0NiwgODQ2NTIsIDg0NjU4LCA4NDY2NCwgODQ2NzAsIDg0Njc2LCAKKyAgICA4NDY4MiwgODQ2ODgsIDg0Njk0LCA4NDY5OSwgODQ3MDQsIDg0NzA5LCA4NDcxNCwgODQ3MTksIDg0NzI0LCA4NDcyOSwgCisgICAgODQ3MzQsIDg0NzQwLCA4NDc0NiwgODQ3NTIsIDg0NzU4LCA4NDc2NCwgODQ3NzAsIDg0Nzc2LCA4NDc4MiwgODQ3ODgsIAorICAgIDg0Nzk0LCA4NDgwMCwgODQ4MDYsIDg0ODEyLCA4NDgxOCwgODQ4MjQsIDg0ODMwLCA4NDgzNiwgODQ4NDIsIDg0ODQ4LCAKKyAgICA4NDg1NCwgODQ4NjAsIDg0ODY2LCA4NDg3MiwgODQ4NzgsIDg0ODg0LCA4NDg5MCwgODQ4OTYsIDg0OTAyLCA4NDkwOCwgCisgICAgODQ5MTQsIDg0OTIwLCA4NDkyNiwgODQ5MzIsIDg0OTM4LCA4NDk0NCwgODQ5NTAsIDg0OTU2LCA4NDk2MiwgODQ5NjgsIAorICAgIDg0OTc0LCA4NDk4MCwgODQ5ODYsIDg0OTkyLCA4NDk5OCwgODUwMDQsIDg1MDEwLCA4NTAxNiwgODUwMjIsIDg1MDI4LCAKKyAgICA4NTAzNCwgODUwNDAsIDg1MDQ2LCA4NTA1MiwgODUwNTgsIDg1MDY0LCA4NTA3MCwgODUwNzYsIDg1MDgyLCA4NTA4OCwgCisgICAgODUwOTQsIDg1MDk5LCA4NTEwNCwgODUxMDksIDg1MTE0LCA4NTEyMCwgODUxMjYsIDg1MTMyLCA4NTEzOCwgODUxNDQsIAorICAgIDg1MTUwLCA4NTE1NiwgODUxNjIsIDg1MTY4LCA4NTE3NCwgODUxODEsIDg1MTg4LCA4NTE5MywgODUxOTgsIDg1MjAzLCAKKyAgICA4NTIwOCwgODUyMjAsIDg1MjMyLCA4NTI0MywgODUyNTQsIDg1MjY2LCA4NTI3OCwgODUyODYsIDAsIDAsIDg1Mjk0LCAwLCAKKyAgICA4NTMwMiwgODUzMDYsIDg1MzEwLCA4NTMxMywgODUzMTcsIDg1MzIxLCA4NTMyNCwgODUzMjcsIDg1MzMxLCA4NTMzNSwgCisgICAgODUzMzgsIDg1MzQxLCA4NTM0NCwgODUzNDcsIDg1MzUyLCA4NTM1NSwgODUzNTksIDg1MzYyLCA4NTM2NSwgODUzNjgsIAorICAgIDg1MzcxLCA4NTM3NCwgODUzNzcsIDg1MzgwLCA4NTM4MywgODUzODYsIDg1Mzg5LCA4NTM5MiwgODUzOTYsIDg1NDAwLCAKKyAgICA4NTQwNCwgODU0MDgsIDg1NDEzLCA4NTQxOCwgODU0MjQsIDg1NDMwLCA4NTQzNiwgODU0NDEsIDg1NDQ3LCA4NTQ1MywgCisgICAgODU0NTksIDg1NDY0LCA4NTQ3MCwgODU0NzYsIDg1NDgxLCA4NTQ4NiwgODU0OTIsIDg1NDk3LCA4NTUwMywgODU1MDksIAorICAgIDg1NTE0LCA4NTUyMCwgODU1MjYsIDg1NTMxLCA4NTUzNywgODU1NDMsIDg1NTQ5LCA4NTU1NSwgODU1NjEsIDg1NTY1LCAKKyAgICA4NTU3MCwgODU1NzQsIDg1NTc5LCA4NTU4MywgODU1ODgsIDg1NTkzLCA4NTU5OSwgODU2MDUsIDg1NjExLCA4NTYxNiwgCisgICAgODU2MjIsIDg1NjI4LCA4NTYzNCwgODU2MzksIDg1NjQ1LCA4NTY1MSwgODU2NTYsIDg1NjYxLCA4NTY2NywgODU2NzIsIAorICAgIDg1Njc4LCA4NTY4NCwgODU2ODksIDg1Njk1LCA4NTcwMSwgODU3MDYsIDg1NzEyLCA4NTcxOCwgODU3MjQsIDg1NzMwLCAKKyAgICA4NTczNiwgODU3NDEsIDg1NzQ1LCA4NTc1MCwgODU3NTIsIDg1NzU3LCA4NTc2MiwgODU3NjgsIDg1NzczLCA4NTc3OCwgCisgICAgODU3ODIsIDg1Nzg4LCA4NTc5MywgODU3OTgsIDg1ODAzLCA4NTgwOCwgODU4MTMsIDg1ODE4LCA4NTgyMywgODU4MjksIAorICAgIDg1ODM1LCA4NTg0MSwgODU4NDksIDg1ODUzLCA4NTg1NywgODU4NjEsIDg1ODY1LCA4NTg2OSwgODU4NzMsIDg1ODc4LCAKKyAgICA4NTg4MywgODU4ODgsIDg1ODkzLCA4NTg5NywgODU5MDIsIDg1OTA3LCA4NTkxMiwgODU5MTcsIDg1OTIyLCA4NTkyNywgCisgICAgODU5MzIsIDg1OTM3LCA4NTk0MSwgODU5NDUsIDg1OTUwLCA4NTk1NSwgODU5NjAsIDg1OTY1LCA4NTk2OSwgODU5NzQsIAorICAgIDg1OTc5LCA4NTk4NCwgODU5ODksIDg1OTkzLCA4NTk5OCwgODYwMDMsIDg2MDA4LCA4NjAxMywgODYwMTcsIDg2MDIyLCAKKyAgICA4NjAyNywgODYwMzEsIDg2MDM2LCA4NjA0MSwgODYwNDYsIDg2MDUxLCA4NjA1NiwgODYwNjEsIDg2MDY4LCA4NjA3NSwgCisgICAgODYwNzksIDg2MDg0LCA4NjA4OSwgODYwOTQsIDg2MDk5LCA4NjEwNCwgODYxMDksIDg2MTE0LCA4NjExOSwgODYxMjQsIAorICAgIDg2MTI5LCA4NjEzNCwgODYxMzksIDg2MTQ0LCA4NjE0OSwgODYxNTQsIDg2MTU5LCA4NjE2NCwgODYxNjksIDg2MTc0LCAKKyAgICA4NjE3OSwgODYxODQsIDg2MTg5LCA4NjE5NCwgODYxOTksIDg2MjA0LCA4NjIwOSwgODYyMTQsIDg2MjE5LCA4NjIyNCwgMCwgCisgICAgMCwgMCwgODYyMjksIDg2MjMzLCA4NjIzOCwgODYyNDIsIDg2MjQ3LCA4NjI1MiwgMCwgMCwgODYyNTYsIDg2MjYxLCAKKyAgICA4NjI2NiwgODYyNzAsIDg2Mjc1LCA4NjI4MCwgMCwgMCwgODYyODUsIDg2MjkwLCA4NjI5NCwgODYyOTksIDg2MzA0LCAKKyAgICA4NjMwOSwgMCwgMCwgODYzMTQsIDg2MzE5LCA4NjMyNCwgMCwgMCwgMCwgODYzMjgsIDg2MzMyLCA4NjMzNiwgODYzNDAsIAorICAgIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDg2MzU1LCA4NjM2MSwgODYzNjQsIDg2MzY4LCA4NjM3MSwgODYzNzUsIDg2Mzc5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjM4MywgODYzODksIDg2Mzk1LCA4NjQwMSwgODY0MDcsIDAsIDAsIAorICAgIDg2NDExLCA4NjQxNywgODY0MjMsIDg2NDI5LCA4NjQzNSwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgODY0NjIsIDg2NDY5LCAKKyAgICA4NjQ3NiwgODY0ODMsIDAsIDg2NDkwLCA4NjQ5NywgODY1MDQsIDg2NTEwLCA4NjUxNywgODY1MjQsIDg2NTMxLCA4NjUzOCwgCisgICAgODY1NDQsIDg2NTUxLCA4NjU1OCwgODY1NjUsIDg2NTcyLCA4NjU3OCwgODY1ODUsIDg2NTkyLCA4NjU5OSwgODY2MDYsIAorICAgIDg2NjEyLCA4NjYxOSwgODY2MjYsIDg2NjMzLCA4NjY0MCwgODY2NDcsIDg2NjU0LCA4NjY2MSwgMCwgODY2NjgsIDg2Njc0LCAKKyAgICA4NjY4MSwgODY2ODgsIDg2Njk1LCA4NjcwMiwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM2LCA4Njc0MywgCisgICAgODY3NTAsIDg2NzU3LCA4Njc2MywgODY3NzAsIDg2Nzc3LCA4Njc4NCwgODY3OTEsIDAsIDg2Nzk4LCA4NjgwNSwgMCwgCisgICAgODY4MTIsIDg2ODE5LCA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIAorICAgIDg2ODgyLCA4Njg4OSwgODY4OTYsIDg2OTAzLCA4NjkxMCwgMCwgMCwgODY5MTYsIDg2OTIxLCA4NjkyNiwgODY5MzEsIAorICAgIDg2OTM2LCA4Njk0MSwgODY5NDYsIDg2OTUxLCA4Njk1NiwgODY5NjEsIDg2OTY2LCA4Njk3MSwgODY5NzYsIDg2OTgxLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODcwOCwgODg3MTUsIDg4NzI0LCA4ODczMywgODg3NDAsIDg4NzQ3LCA4ODc1NCwgCi0gICAgODg3NjEsIDg4NzY4LCA4ODc3NSwgODg3ODEsIDg4Nzg4LCA4ODc5NSwgODg4MDIsIDg4ODA5LCA4ODgxNiwgODg4MjMsIAotICAgIDg4ODMwLCA4ODgzNywgODg4NDYsIDg4ODUzLCA4ODg2MCwgODg4NjcsIDg4ODc0LCA4ODg4MSwgODg4ODgsIDg4ODk1LCAKLSAgICA4ODkwMiwgODg5MTEsIDg4OTE4LCA4ODkyNSwgODg5MzIsIDg4OTM5LCA4ODk0NiwgODg5NTMsIDg4OTYyLCA4ODk2OSwgCi0gICAgODg5NzYsIDg4OTgzLCA4ODk5MCwgODg5OTksIDg5MDA2LCA4OTAxMywgODkwMjAsIDg5MDI4LCA4OTAzNywgMCwgMCwgCi0gICAgODkwNDYsIDg5MDUwLCA4OTA1NCwgODkwNTksIDg5MDY0LCA4OTA2OSwgODkwNzQsIDg5MDc4LCA4OTA4MywgODkwODgsIAotICAgIDg5MDkzLCA4OTA5OCwgODkxMDMsIDg5MTA4LCA4OTExMiwgODkxMTYsIDg5MTIxLCA4OTEyNiwgODkxMzEsIDg5MTM1LCAKLSAgICA4OTE0MCwgODkxNDUsIDg5MTQ5LCA4OTE1NCwgODkxNTksIDg5MTY0LCA4OTE2OSwgODkxNzQsIDg5MTc5LCAwLCAwLCAwLCAKLSAgICA4OTE4NCwgODkxODgsIDg5MTkzLCA4OTE5OCwgODkyMDIsIDg5MjA3LCA4OTIxMSwgODkyMTYsIDg5MjIxLCA4OTIyNiwgCi0gICAgODkyMzEsIDg5MjM1LCA4OTIzOSwgODkyNDQsIDg5MjQ5LCA4OTI1NCwgODkyNTksIDg5MjY0LCA4OTI2OSwgODkyNzMsIAotICAgIDg5Mjc4LCA4OTI4MywgODkyODgsIDg5MjkzLCA4OTI5OCwgODkzMDMsIDg5MzA3LCA4OTMxMSwgODkzMTYsIDg5MzIxLCAKLSAgICA4OTMyNiwgODkzMzEsIDg5MzM2LCA4OTM0MSwgODkzNDYsIDg5MzUxLCA4OTM1NiwgODkzNjEsIDg5MzY2LCA4OTM3MSwgCi0gICAgODkzNzYsIDg5MzgxLCA4OTM4NiwgODkzOTEsIDg5Mzk2LCA4OTQwMSwgODk0MDYsIDg5NDExLCA4OTQxNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY5ODYsIDg2OTkzLCA4NzAwMCwgODcwMDcsIDg3MDE0LCA4NzAyMSwgCisgICAgODcwMjgsIDg3MDM1LCA4NzA0MiwgODcwNDksIDg3MDU2LCA4NzA2MywgODcwNzAsIDg3MDc3LCA4NzA4NCwgODcwOTEsIAorICAgIDg3MDk4LCA4NzEwNSwgODcxMTIsIDg3MTE5LCA4NzEyNywgODcxMzUsIDg3MTQyLCA4NzE0OSwgODcxNTQsIDg3MTYyLCAKKyAgICA4NzE3MCwgODcxNzcsIDg3MTg0LCA4NzE4OSwgODcxOTYsIDg3MjAxLCA4NzIwNiwgODcyMTMsIDg3MjE4LCA4NzIyMywgCisgICAgODcyMjgsIDg3MjM2LCA4NzI0MSwgODcyNDYsIDg3MjUzLCA4NzI1OCwgODcyNjMsIDg3MjcwLCA4NzI3NywgODcyODIsIAorICAgIDg3Mjg3LCA4NzI5MiwgODcyOTcsIDg3MzAyLCA4NzMwNywgODczMTIsIDg3MzE3LCA4NzMyMiwgODczMjksIDg3MzM0LCAKKyAgICA4NzM0MSwgODczNDYsIDg3MzUxLCA4NzM1NiwgODczNjEsIDg3MzY2LCA4NzM3MSwgODczNzYsIDg3MzgxLCA4NzM4NiwgCisgICAgODczOTEsIDg3Mzk2LCA4NzQwMywgODc0MTAsIDg3NDE3LCA4NzQyNCwgODc0MzAsIDg3NDM1LCA4NzQ0MiwgODc0NDcsIAorICAgIDg3NDUyLCA4NzQ2MSwgODc0NjgsIDg3NDc3LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzUwMiwgODc1MDcsIDg3NTEyLCAKKyAgICA4NzUxNywgODc1MjIsIDg3NTI3LCA4NzUzNCwgODc1MzksIDg3NTQ0LCA4NzU0OSwgODc1NTQsIDg3NTU5LCA4NzU2NiwgCisgICAgODc1NzMsIDg3NTgwLCA4NzU4NywgODc1OTQsIDg3NjAxLCA4NzYwOCwgODc2MTUsIDg3NjIyLCA4NzYyOSwgODc2MzYsIAorICAgIDg3NjQzLCA4NzY1MCwgODc2NTcsIDg3NjY0LCA4NzY3MSwgODc2NzgsIDg3Njg1LCA4NzY5MiwgODc2OTksIDg3NzA2LCAKKyAgICA4NzcxMywgODc3MjAsIDg3NzI3LCA4NzczNCwgODc3NDEsIDg3NzQ4LCA4Nzc1NSwgMCwgMCwgMCwgMCwgMCwgODc3NjIsIAorICAgIDg3NzcwLCA4Nzc3OCwgMCwgMCwgMCwgMCwgODc3ODMsIDg3Nzg3LCA4Nzc5MSwgODc3OTUsIDg3Nzk5LCA4NzgwMywgCisgICAgODc4MDcsIDg3ODExLCA4NzgxNSwgODc4MTksIDg3ODI0LCA4NzgyOSwgODc4MzQsIDg3ODM5LCA4Nzg0NCwgODc4NDksIAorICAgIDg3ODU0LCA4Nzg1OSwgODc4NjQsIDg3ODcwLCA4Nzg3NiwgODc4ODIsIDg3ODg5LCA4Nzg5NiwgODc5MDMsIDg3OTEwLCAKKyAgICA4NzkxNywgODc5MjQsIDg3OTMwLCA4NzkzNiwgODc5NDIsIDg3OTQ5LCA4Nzk1NiwgODc5NjMsIDg3OTcwLCA4Nzk3NywgCisgICAgODc5ODQsIDg3OTkxLCA4Nzk5OCwgODgwMDUsIDg4MDEyLCA4ODAxOSwgODgwMjYsIDg4MDMzLCA4ODA0MCwgMCwgMCwgMCwgCisgICAgODgwNDcsIDg4MDU1LCA4ODA2MywgODgwNzEsIDg4MDc5LCA4ODA4NywgODgwOTcsIDg4MTA3LCA4ODExNSwgODgxMjMsIAorICAgIDg4MTMxLCA4ODEzOSwgODgxNDcsIDg4MTUzLCA4ODE2MCwgODgxNjksIDg4MTc4LCA4ODE4NywgODgxOTYsIDg4MjA1LCAKKyAgICA4ODIxNCwgODgyMjQsIDg4MjM1LCA4ODI0NSwgODgyNTYsIDg4MjY1LCA4ODI3NCwgODgyODMsIDg4MjkzLCA4ODMwNCwgCisgICAgODgzMTQsIDg4MzI1LCA4ODMzNiwgODgzNDUsIDg4MzUzLCA4ODM1OSwgODgzNjUsIDg4MzcxLCA4ODM3NywgODgzODUsIAorICAgIDg4MzkzLCA4ODM5OSwgODg0MDYsIDg4NDE2LCA4ODQyMywgODg0MzAsIDg4NDM3LCA4ODQ0NCwgODg0NTEsIDg4NDYxLCAKKyAgICA4ODQ2OCwgODg0NzUsIDg4NDgzLCA4ODQ5MSwgODg1MDAsIDg4NTA5LCA4ODUxOCwgODg1MjcsIDg4NTM2LCA4ODU0NCwgCisgICAgODg1NTMsIDg4NTYyLCA4ODU3MSwgODg1NzUsIDg4NTgyLCA4ODU4NywgODg1OTIsIDg4NTk2LCA4ODYwMCwgODg2MDQsIAorICAgIDg4NjA4LCA4ODYxMywgODg2MTgsIDg4NjI0LCA4ODYzMCwgODg2MzQsIDg4NjQwLCA4ODY0NCwgODg2NDgsIDg4NjUyLCAKKyAgICA4ODY1NiwgODg2NjAsIDg4NjY0LCA4ODY3MCwgMCwgMCwgMCwgMCwgMCwgODg2NzQsIDg4Njc5LCA4ODY4NCwgODg2ODksIAorICAgIDg4Njk0LCA4ODcwMSwgODg3MDYsIDg4NzExLCA4ODcxNiwgODg3MjEsIDg4NzI2LCA4ODczMSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0MjEsIDg5NDI1LCAKLSAgICA4OTQzMCwgODk0MzUsIDg5NDQwLCA4OTQ0NCwgODk0NDksIDg5NDU0LCA4OTQ1OSwgODk0NjQsIDg5NDY4LCA4OTQ3MiwgCi0gICAgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIDg5NDk2LCA4OTUwMSwgODk1MDYsIDg5NTExLCA4OTUxNiwgODk1MjEsIAotICAgIDg5NTI2LCA4OTUzMCwgODk1MzUsIDg5NTQwLCA4OTU0NSwgODk1NTAsIDg5NTU1LCA4OTU2MCwgODk1NjUsIDAsIDg5NTcwLCAKLSAgICA4OTU3NSwgODk1ODAsIDg5NTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTU5MiwgODk1OTcsIAotICAgIDg5NjAyLCA4OTYwNywgODk2MTIsIDg5NjE3LCA4OTYyMiwgODk2MjcsIDg5NjMyLCA4OTYzNywgODk2NDIsIDg5NjQ3LCAKLSAgICA4OTY1MiwgODk2NTcsIDg5NjYyLCA4OTY2NywgODk2NzIsIDg5Njc3LCA4OTY4MiwgODk2ODcsIDg5NjkyLCA4OTY5NywgCi0gICAgODk3MDIsIDg5NzA3LCA4OTcxMiwgODk3MTcsIDg5NzIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODczNiwgCisgICAgODg3NDMsIDg4NzUyLCA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MiwgODg3ODksIDg4Nzk2LCA4ODgwMywgODg4MDksIAorICAgIDg4ODE2LCA4ODgyMywgODg4MzAsIDg4ODM3LCA4ODg0NCwgODg4NTEsIDg4ODU4LCA4ODg2NSwgODg4NzQsIDg4ODgxLCAKKyAgICA4ODg4OCwgODg4OTUsIDg4OTAyLCA4ODkwOSwgODg5MTYsIDg4OTIzLCA4ODkzMCwgODg5MzksIDg4OTQ2LCA4ODk1MywgCisgICAgODg5NjAsIDg4OTY3LCA4ODk3NCwgODg5ODEsIDg4OTkwLCA4ODk5NywgODkwMDQsIDg5MDExLCA4OTAxOCwgODkwMjcsIAorICAgIDg5MDM0LCA4OTA0MSwgODkwNDgsIDg5MDU2LCA4OTA2NSwgMCwgMCwgODkwNzQsIDg5MDc4LCA4OTA4MiwgODkwODcsIAorICAgIDg5MDkyLCA4OTA5NywgODkxMDIsIDg5MTA2LCA4OTExMSwgODkxMTYsIDg5MTIxLCA4OTEyNiwgODkxMzEsIDg5MTM2LCAKKyAgICA4OTE0MCwgODkxNDQsIDg5MTQ5LCA4OTE1NCwgODkxNTksIDg5MTYzLCA4OTE2OCwgODkxNzMsIDg5MTc3LCA4OTE4MiwgCisgICAgODkxODcsIDg5MTkyLCA4OTE5NywgODkyMDIsIDg5MjA3LCAwLCAwLCAwLCA4OTIxMiwgODkyMTYsIDg5MjIxLCA4OTIyNiwgCisgICAgODkyMzAsIDg5MjM1LCA4OTIzOSwgODkyNDQsIDg5MjQ5LCA4OTI1NCwgODkyNTksIDg5MjYzLCA4OTI2NywgODkyNzIsIAorICAgIDg5Mjc3LCA4OTI4MiwgODkyODcsIDg5MjkyLCA4OTI5NywgODkzMDEsIDg5MzA2LCA4OTMxMSwgODkzMTYsIDg5MzIxLCAKKyAgICA4OTMyNiwgODkzMzEsIDg5MzM1LCA4OTMzOSwgODkzNDQsIDg5MzQ5LCA4OTM1NCwgODkzNTksIDg5MzY0LCA4OTM2OSwgCisgICAgODkzNzQsIDg5Mzc5LCA4OTM4NCwgODkzODksIDg5Mzk0LCA4OTM5OSwgODk0MDQsIDg5NDA5LCA4OTQxNCwgODk0MTksIAorICAgIDg5NDI0LCA4OTQyOSwgODk0MzQsIDg5NDM5LCA4OTQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk3MjksIDg5NzM0LCA4OTczOSwgCi0gICAgODk3NDQsIDg5NzQ5LCA4OTc1NCwgODk3NTksIDg5NzY0LCA4OTc2OSwgODk3NzQsIDg5Nzc5LCA4OTc4NCwgODk3ODksIAotICAgIDg5Nzk0LCA4OTc5OSwgODk4MDQsIDg5ODA5LCA4OTgxNCwgODk4MTksIDg5ODI0LCA4OTgyOSwgODk4MzQsIDg5ODM5LCAKLSAgICA4OTg0NCwgODk4NDksIDg5ODU0LCA4OTg1OSwgODk4NjMsIDg5ODY3LCA4OTg3MSwgMCwgODk4NzYsIDg5ODgyLCA4OTg4NywgCi0gICAgODk4OTIsIDg5ODk3LCA4OTkwMiwgODk5MDgsIDg5OTE0LCA4OTkyMCwgODk5MjYsIDg5OTMyLCA4OTkzOCwgODk5NDQsIAotICAgIDg5OTUwLCA4OTk1NiwgODk5NjIsIDg5OTY4LCA4OTk3NCwgODk5ODAsIDg5OTg1LCA4OTk5MSwgODk5OTcsIDkwMDAyLCAKLSAgICA5MDAwOCwgOTAwMTMsIDkwMDE5LCA5MDAyNSwgOTAwMzAsIDkwMDM2LCA5MDA0MiwgOTAwNDcsIDkwMDUzLCA5MDA1OSwgCi0gICAgOTAwNjQsIDkwMDcwLCA5MDA3NiwgOTAwODIsIDAsIDAsIDAsIDAsIDkwMDg3LCA5MDA5MywgOTAwOTksIDkwMTA1LCAKLSAgICA5MDExMSwgOTAxMTcsIDkwMTIzLCA5MDEyOSwgOTAxMzUsIDkwMTQyLCA5MDE0NywgOTAxNTIsIDkwMTU4LCA5MDE2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0NDksIDg5NDUzLCA4OTQ1OCwgODk0NjMsIDg5NDY4LCA4OTQ3MiwgCisgICAgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIDg5NDk2LCA4OTUwMCwgODk1MDUsIDg5NTEwLCA4OTUxNSwgODk1MjAsIAorICAgIDg5NTI0LCA4OTUyOSwgODk1MzQsIDg5NTM5LCA4OTU0NCwgODk1NDksIDg5NTU0LCA4OTU1OCwgODk1NjMsIDg5NTY4LCAKKyAgICA4OTU3MywgODk1NzgsIDg5NTgzLCA4OTU4OCwgODk1OTMsIDAsIDg5NTk4LCA4OTYwMywgODk2MDgsIDg5NjE0LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTYyMCwgODk2MjUsIDg5NjMwLCA4OTYzNSwgODk2NDAsIDg5NjQ1LCAKKyAgICA4OTY1MCwgODk2NTUsIDg5NjYwLCA4OTY2NSwgODk2NzAsIDg5Njc1LCA4OTY4MCwgODk2ODUsIDg5NjkwLCA4OTY5NSwgCisgICAgODk3MDAsIDg5NzA1LCA4OTcxMCwgODk3MTUsIDg5NzIwLCA4OTcyNSwgODk3MzAsIDg5NzM1LCA4OTc0MCwgODk3NDUsIAorICAgIDg5NzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDE3MCwgOTAxNzUsIDkwMTgwLCAKLSAgICA5MDE4NSwgOTAxOTEsIDkwMTk2LCA5MDIwMiwgOTAyMDgsIDkwMjE0LCA5MDIyMCwgOTAyMjcsIDkwMjMzLCA5MDI0MCwgCi0gICAgOTAyNDUsIDkwMjUwLCA5MDI1NSwgOTAyNjAsIDkwMjY1LCA5MDI3MCwgOTAyNzUsIDkwMjgwLCA5MDI4NSwgOTAyOTAsIAotICAgIDkwMjk1LCA5MDMwMCwgOTAzMDUsIDkwMzEwLCA5MDMxNSwgOTAzMjAsIDkwMzI1LCA5MDMzMCwgOTAzMzUsIDkwMzQwLCAKLSAgICA5MDM0NSwgOTAzNTAsIDkwMzU1LCA5MDM2MCwgOTAzNjUsIDkwMzcwLCA5MDM3NSwgOTAzODAsIDkwMzg1LCA5MDM5MCwgCi0gICAgOTAzOTUsIDkwNDAxLCA5MDQwNiwgOTA0MTIsIDkwNDE4LCA5MDQyNCwgOTA0MzAsIDkwNDM3LCA5MDQ0MywgOTA0NTAsIAotICAgIDkwNDU1LCA5MDQ2MCwgOTA0NjUsIDkwNDcwLCA5MDQ3NSwgOTA0ODAsIDkwNDg1LCA5MDQ5MCwgOTA0OTUsIDkwNTAwLCAKLSAgICA5MDUwNSwgOTA1MTAsIDkwNTE1LCA5MDUyMCwgOTA1MjUsIDkwNTMwLCA5MDUzNSwgOTA1NDAsIDkwNTQ1LCA5MDU1MCwgCi0gICAgOTA1NTUsIDkwNTYwLCA5MDU2NSwgOTA1NzAsIDkwNTc1LCA5MDU4MCwgOTA1ODUsIDkwNTkwLCA5MDU5NSwgOTA2MDAsIAotICAgIDkwNjA1LCA5MDYxMCwgOTA2MTUsIDkwNjIwLCA5MDYyNSwgOTA2MzAsIDkwNjM1LCA5MDY0MCwgOTA2NDUsIDkwNjUwLCAKLSAgICA5MDY1NSwgOTA2NjAsIDkwNjY1LCA5MDY3MCwgOTA2NzUsIDkwNjgwLCA5MDY4NSwgOTA2OTAsIDkwNjk1LCA5MDcwMCwgCi0gICAgOTA3MDUsIDkwNzEwLCA5MDcxNSwgOTA3MjAsIDkwNzI1LCA5MDczMCwgOTA3MzUsIDkwNzQwLCA5MDc0NSwgOTA3NTAsIAotICAgIDkwNzU1LCA5MDc2MCwgOTA3NjUsIDkwNzcwLCA5MDc3NSwgOTA3ODAsIDkwNzg1LCA5MDc5MCwgOTA3OTUsIDkwODAwLCAKLSAgICA5MDgwNSwgOTA4MTAsIDkwODE1LCA5MDgyMCwgOTA4MjUsIDkwODMwLCA5MDgzNSwgOTA4NDAsIDkwODQ1LCA5MDg1MCwgCi0gICAgOTA4NTUsIDkwODYwLCA5MDg2NSwgOTA4NjksIDkwODczLCA5MDg3OCwgOTA4ODMsIDkwODg4LCA5MDg5MywgOTA4OTgsIAotICAgIDkwOTAzLCA5MDkwOCwgOTA5MTMsIDkwOTE4LCA5MDkyMywgOTA5MjgsIDkwOTMyLCA5MDkzNiwgOTA5NDAsIDkwOTQ0LCAKLSAgICA5MDk0OCwgOTA5NTIsIDkwOTU2LCA5MDk2MSwgOTA5NjYsIDAsIDAsIDkwOTcxLCA5MDk3NiwgOTA5ODAsIDkwOTg0LCAKLSAgICA5MDk4OCwgOTA5OTIsIDkwOTk2LCA5MTAwMCwgOTEwMDQsIDkxMDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTc1NywgODk3NjIsIDg5NzY3LCA4OTc3MiwgODk3NzcsIDg5NzgyLCA4OTc4NywgCisgICAgODk3OTIsIDg5Nzk3LCA4OTgwMiwgODk4MDcsIDg5ODEyLCA4OTgxNywgODk4MjIsIDg5ODI3LCA4OTgzMiwgODk4MzcsIAorICAgIDg5ODQyLCA4OTg0NywgODk4NTIsIDg5ODU3LCA4OTg2MiwgODk4NjcsIDg5ODcyLCA4OTg3NywgODk4ODIsIDg5ODg3LCAKKyAgICA4OTg5MSwgODk4OTUsIDg5ODk5LCAwLCA4OTkwNCwgODk5MTAsIDg5OTE1LCA4OTkyMCwgODk5MjUsIDg5OTMwLCA4OTkzNiwgCisgICAgODk5NDIsIDg5OTQ4LCA4OTk1NCwgODk5NjAsIDg5OTY2LCA4OTk3MiwgODk5NzgsIDg5OTg0LCA4OTk5MCwgODk5OTYsIAorICAgIDkwMDAyLCA5MDAwOCwgOTAwMTMsIDkwMDE5LCA5MDAyNSwgOTAwMzAsIDkwMDM2LCA5MDA0MSwgOTAwNDcsIDkwMDUzLCAKKyAgICA5MDA1OCwgOTAwNjQsIDkwMDcwLCA5MDA3NSwgOTAwODEsIDkwMDg3LCA5MDA5MiwgOTAwOTgsIDkwMTA0LCA5MDExMCwgMCwgCisgICAgMCwgMCwgMCwgOTAxMTUsIDkwMTIxLCA5MDEyNywgOTAxMzMsIDkwMTM5LCA5MDE0NSwgOTAxNTEsIDkwMTU3LCA5MDE2MywgCisgICAgOTAxNzAsIDkwMTc1LCA5MDE4MCwgOTAxODYsIDkwMTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5MDE5OCwgOTAyMDMsIDkwMjA4LCA5MDIxMywgOTAyMTksIDkwMjI0LCA5MDIzMCwgOTAyMzYsIAorICAgIDkwMjQyLCA5MDI0OCwgOTAyNTUsIDkwMjYxLCA5MDI2OCwgOTAyNzMsIDkwMjc4LCA5MDI4MywgOTAyODgsIDkwMjkzLCAKKyAgICA5MDI5OCwgOTAzMDMsIDkwMzA4LCA5MDMxMywgOTAzMTgsIDkwMzIzLCA5MDMyOCwgOTAzMzMsIDkwMzM4LCA5MDM0MywgCisgICAgOTAzNDgsIDkwMzUzLCA5MDM1OCwgOTAzNjMsIDkwMzY4LCA5MDM3MywgOTAzNzgsIDkwMzgzLCA5MDM4OCwgOTAzOTMsIAorICAgIDkwMzk4LCA5MDQwMywgOTA0MDgsIDkwNDEzLCA5MDQxOCwgOTA0MjMsIDkwNDI5LCA5MDQzNCwgOTA0NDAsIDkwNDQ2LCAKKyAgICA5MDQ1MiwgOTA0NTgsIDkwNDY1LCA5MDQ3MSwgOTA0NzgsIDkwNDgzLCA5MDQ4OCwgOTA0OTMsIDkwNDk4LCA5MDUwMywgCisgICAgOTA1MDgsIDkwNTEzLCA5MDUxOCwgOTA1MjMsIDkwNTI4LCA5MDUzMywgOTA1MzgsIDkwNTQzLCA5MDU0OCwgOTA1NTMsIAorICAgIDkwNTU4LCA5MDU2MywgOTA1NjgsIDkwNTczLCA5MDU3OCwgOTA1ODMsIDkwNTg4LCA5MDU5MywgOTA1OTgsIDkwNjAzLCAKKyAgICA5MDYwOCwgOTA2MTMsIDkwNjE4LCA5MDYyMywgOTA2MjgsIDkwNjMzLCA5MDYzOCwgOTA2NDMsIDkwNjQ4LCA5MDY1MywgCisgICAgOTA2NTgsIDkwNjYzLCA5MDY2OCwgOTA2NzMsIDkwNjc4LCA5MDY4MywgOTA2ODgsIDkwNjkzLCA5MDY5OCwgOTA3MDMsIAorICAgIDkwNzA4LCA5MDcxMywgOTA3MTgsIDkwNzIzLCA5MDcyOCwgOTA3MzMsIDkwNzM4LCA5MDc0MywgOTA3NDgsIDkwNzUzLCAKKyAgICA5MDc1OCwgOTA3NjMsIDkwNzY4LCA5MDc3MywgOTA3NzgsIDkwNzgzLCA5MDc4OCwgOTA3OTMsIDkwNzk4LCA5MDgwMywgCisgICAgOTA4MDgsIDkwODEzLCA5MDgxOCwgOTA4MjMsIDkwODI4LCA5MDgzMywgOTA4MzgsIDkwODQzLCA5MDg0OCwgOTA4NTMsIAorICAgIDkwODU4LCA5MDg2MywgOTA4NjgsIDkwODczLCA5MDg3OCwgOTA4ODMsIDkwODg4LCA5MDg5MywgOTA4OTcsIDkwOTAxLCAKKyAgICA5MDkwNiwgOTA5MTEsIDkwOTE2LCA5MDkyMSwgOTA5MjYsIDkwOTMxLCA5MDkzNiwgOTA5NDEsIDkwOTQ2LCA5MDk1MSwgCisgICAgOTA5NTYsIDkwOTYwLCA5MDk2NCwgOTA5NjgsIDkwOTcyLCA5MDk3NiwgOTA5ODAsIDkwOTg0LCA5MDk4OSwgOTA5OTQsIDAsIAorICAgIDAsIDkwOTk5LCA5MTAwNCwgOTEwMDgsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDkxMDM2LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTAxMiwgOTEwMTYsIDkxMDIwLCA5MTAyNCwgOTEwMjgsIDkxMDMyLCAwLCAwLCA5MTAzNywgMCwgCi0gICAgOTEwNDIsIDkxMDQ2LCA5MTA1MSwgOTEwNTYsIDkxMDYxLCA5MTA2NiwgOTEwNzEsIDkxMDc2LCA5MTA4MSwgOTEwODYsIAotICAgIDkxMDkxLCA5MTA5NSwgOTExMDAsIDkxMTA1LCA5MTExMCwgOTExMTUsIDkxMTE5LCA5MTEyNCwgOTExMjksIDkxMTM0LCAKLSAgICA5MTEzOSwgOTExNDMsIDkxMTQ4LCA5MTE1MywgOTExNTgsIDkxMTYzLCA5MTE2NywgOTExNzIsIDkxMTc3LCA5MTE4MiwgCi0gICAgOTExODcsIDkxMTkxLCA5MTE5NiwgOTEyMDEsIDkxMjA2LCA5MTIxMSwgOTEyMTYsIDkxMjIxLCA5MTIyNiwgOTEyMzAsIAotICAgIDkxMjM1LCA5MTI0MCwgOTEyNDUsIDkxMjUwLCAwLCA5MTI1NSwgOTEyNjAsIDAsIDAsIDAsIDkxMjY1LCAwLCAwLCA5MTI3MCwgCi0gICAgOTEyNzUsIDkxMjgyLCA5MTI4OSwgOTEyOTYsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxMDQwLCA5MTA0NCwgOTEwNDgsIDkxMDUyLCAKKyAgICA5MTA1NiwgOTEwNjAsIDAsIDAsIDkxMDY1LCAwLCA5MTA3MCwgOTEwNzQsIDkxMDc5LCA5MTA4NCwgOTEwODksIDkxMDk0LCAKKyAgICA5MTA5OSwgOTExMDQsIDkxMTA5LCA5MTExNCwgOTExMTksIDkxMTIzLCA5MTEyOCwgOTExMzMsIDkxMTM4LCA5MTE0MywgCisgICAgOTExNDcsIDkxMTUyLCA5MTE1NywgOTExNjIsIDkxMTY3LCA5MTE3MSwgOTExNzYsIDkxMTgxLCA5MTE4NiwgOTExOTEsIAorICAgIDkxMTk1LCA5MTIwMCwgOTEyMDUsIDkxMjEwLCA5MTIxNSwgOTEyMTksIDkxMjI0LCA5MTIyOSwgOTEyMzQsIDkxMjM5LCAKKyAgICA5MTI0NCwgOTEyNDksIDkxMjU0LCA5MTI1OCwgOTEyNjMsIDkxMjY4LCA5MTI3MywgOTEyNzgsIDAsIDkxMjgzLCA5MTI4OCwgCisgICAgMCwgMCwgMCwgOTEyOTMsIDAsIDAsIDkxMjk4LCA5MTMwMywgOTEzMTAsIDkxMzE3LCA5MTMyNCwgOTEzMzEsIDkxMzM4LCAKICAgICA5MTM0NSwgOTEzNTIsIDkxMzU5LCA5MTM2NiwgOTEzNzMsIDkxMzgwLCA5MTM4NywgOTEzOTQsIDkxNDAxLCA5MTQwOCwgCi0gICAgOTE0MTUsIDkxNDIyLCAwLCA5MTQyOSwgOTE0MzYsIDkxNDQyLCA5MTQ0OCwgOTE0NTQsIDkxNDYxLCA5MTQ2OCwgOTE0NzYsIAotICAgIDkxNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTQ5MywgOTE0OTgsIDkxNTAzLCA5MTUwOCwgOTE1MTMsIDkxNTE4LCAKLSAgICA5MTUyMywgOTE1MjgsIDkxNTMzLCA5MTUzOCwgOTE1NDMsIDkxNTQ4LCA5MTU1MywgOTE1NTgsIDkxNTYzLCA5MTU2OCwgCi0gICAgOTE1NzMsIDkxNTc4LCA5MTU4MywgOTE1ODgsIDkxNTkzLCA5MTU5OCwgOTE2MDMsIDkxNjA3LCA5MTYxMiwgOTE2MTcsIAotICAgIDkxNjIzLCA5MTYyNywgMCwgMCwgMCwgOTE2MzEsIDkxNjM3LCA5MTY0MSwgOTE2NDYsIDkxNjUxLCA5MTY1NiwgOTE2NjAsIAotICAgIDkxNjY1LCA5MTY2OSwgOTE2NzQsIDkxNjc5LCA5MTY4MywgOTE2ODcsIDkxNjkyLCA5MTY5NiwgOTE3MDAsIDkxNzA1LCAKLSAgICA5MTcxMCwgOTE3MTQsIDkxNzE5LCA5MTcyNCwgOTE3MjksIDkxNzM0LCA5MTczOSwgOTE3NDQsIDkxNzQ5LCA5MTc1NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTE3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzY0LCAKLSAgICA5MTc3MCwgOTE3NzYsIDkxNzgyLCA5MTc4OCwgOTE3OTQsIDkxODAxLCA5MTgwOCwgOTE4MTUsIDkxODIxLCA5MTgyNywgCi0gICAgOTE4MzMsIDkxODQwLCA5MTg0NywgOTE4NTQsIDkxODYwLCA5MTg2NywgOTE4NzQsIDkxODgxLCA5MTg4OCwgOTE4OTQsIAotICAgIDkxOTAxLCA5MTkwOCwgOTE5MTQsIDkxOTIxLCA5MTkyOCwgOTE5MzUsIDkxOTQyLCA5MTk0OSwgOTE5NTUsIDkxOTYyLCAKLSAgICA5MTk2OSwgOTE5NzYsIDkxOTgyLCA5MTk4OCwgOTE5OTQsIDkyMDAwLCA5MjAwNiwgOTIwMTMsIDkyMDIwLCA5MjAyNiwgCi0gICAgOTIwMzIsIDkyMDM4LCA5MjA0NSwgOTIwNTEsIDkyMDU4LCA5MjA2NSwgOTIwNzIsIDkyMDc4LCA5MjA4NiwgOTIwOTMsIAotICAgIDkyMDk5LCA5MjEwNiwgOTIxMTMsIDkyMTIwLCA5MjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxMzMsIDkyMTQxLCAwLCAwLCAKKyAgICA5MTQxNSwgOTE0MjIsIDkxNDI5LCA5MTQzNiwgOTE0NDMsIDkxNDUwLCAwLCA5MTQ1NywgOTE0NjQsIDkxNDcwLCA5MTQ3NiwgCisgICAgOTE0ODIsIDkxNDg5LCA5MTQ5NiwgOTE1MDQsIDkxNTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTUyMSwgOTE1MjYsIAorICAgIDkxNTMxLCA5MTUzNiwgOTE1NDEsIDkxNTQ2LCA5MTU1MSwgOTE1NTYsIDkxNTYxLCA5MTU2NiwgOTE1NzEsIDkxNTc2LCAKKyAgICA5MTU4MSwgOTE1ODYsIDkxNTkxLCA5MTU5NiwgOTE2MDEsIDkxNjA2LCA5MTYxMSwgOTE2MTYsIDkxNjIxLCA5MTYyNiwgCisgICAgOTE2MzEsIDkxNjM1LCA5MTY0MCwgOTE2NDUsIDkxNjUxLCA5MTY1NSwgMCwgMCwgMCwgOTE2NTksIDkxNjY1LCA5MTY2OSwgCisgICAgOTE2NzQsIDkxNjc5LCA5MTY4NCwgOTE2ODgsIDkxNjkzLCA5MTY5NywgOTE3MDIsIDkxNzA3LCA5MTcxMSwgOTE3MTUsIAorICAgIDkxNzIwLCA5MTcyNCwgOTE3MjgsIDkxNzMzLCA5MTczOCwgOTE3NDIsIDkxNzQ3LCA5MTc1MiwgOTE3NTcsIDkxNzYyLCAKKyAgICA5MTc2NywgOTE3NzIsIDkxNzc3LCA5MTc4MiwgMCwgMCwgMCwgMCwgMCwgOTE3ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyMTQ5LCA5MjE1MywgOTIxNTgsIDkyMTYzLCAwLCAKLSAgICA5MjE2OSwgOTIxNzQsIDAsIDAsIDAsIDAsIDAsIDkyMTc5LCA5MjE4NSwgOTIxOTIsIDkyMTk3LCA5MjIwMiwgOTIyMDYsIAotICAgIDkyMjExLCA5MjIxNiwgMCwgOTIyMjEsIDkyMjI2LCA5MjIzMSwgMCwgOTIyMzYsIDkyMjQxLCA5MjI0NiwgOTIyNTEsIAotICAgIDkyMjU2LCA5MjI2MSwgOTIyNjYsIDkyMjcxLCA5MjI3NiwgOTIyODEsIDkyMjg2LCA5MjI5MCwgOTIyOTQsIDkyMjk5LCAKLSAgICA5MjMwNCwgOTIzMDksIDkyMzEzLCA5MjMxNywgOTIzMjEsIDkyMzI2LCA5MjMzMSwgOTIzMzYsIDkyMzQxLCA5MjM0NSwgCi0gICAgOTIzNTAsIDkyMzU0LCA5MjM1OSwgMCwgMCwgMCwgMCwgOTIzNjQsIDkyMzcwLCA5MjM3NSwgMCwgMCwgMCwgMCwgOTIzODAsIAotICAgIDkyMzg0LCA5MjM4OCwgOTIzOTIsIDkyMzk2LCA5MjQwMCwgOTI0MDUsIDkyNDEwLCA5MjQxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOTI0MjIsIDkyNDI4LCA5MjQzNSwgOTI0NDEsIDkyNDQ4LCA5MjQ1NCwgOTI0NjAsIDkyNDY2LCA5MjQ3MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NzksIDkyNDg3LCA5MjQ5NSwgOTI1MDMsIDkyNTExLCA5MjUxOSwgOTI1MjcsIDkyNTM1LCAKLSAgICA5MjU0MywgOTI1NTEsIDkyNTU5LCA5MjU2NywgOTI1NzUsIDkyNTgzLCA5MjU5MSwgOTI1OTksIDkyNjA3LCA5MjYxNSwgCi0gICAgOTI2MjMsIDkyNjMxLCA5MjYzOSwgOTI2NDcsIDkyNjU1LCA5MjY2MywgOTI2NzEsIDkyNjc5LCA5MjY4NywgOTI2OTUsIAotICAgIDkyNzAzLCA5MjcxMSwgOTI3MTgsIDkyNzI2LCA5MjczNCwgOTI3MzgsIDkyNzQzLCA5Mjc0OCwgOTI3NTMsIDkyNzU4LCAKLSAgICA5Mjc2MywgOTI3NjgsIDkyNzczLCA5Mjc3NywgOTI3ODIsIDkyNzg2LCA5Mjc5MSwgOTI3OTUsIDkyODAwLCA5MjgwNCwgCi0gICAgOTI4MDksIDkyODE0LCA5MjgxOSwgOTI4MjQsIDkyODI5LCA5MjgzNCwgOTI4MzksIDkyODQ0LCA5Mjg0OSwgOTI4NTQsIAotICAgIDkyODU5LCA5Mjg2NCwgOTI4NjksIDkyODc0LCA5Mjg3OSwgOTI4ODQsIDkyODg5LCA5Mjg5NCwgOTI4OTksIDkyOTA0LCAKLSAgICA5MjkwOSwgOTI5MTQsIDkyOTE5LCA5MjkyNCwgOTI5MjksIDkyOTM0LCA5MjkzOSwgOTI5NDQsIDkyOTQ5LCA5Mjk1NCwgCi0gICAgOTI5NTksIDkyOTY0LCA5Mjk2OSwgOTI5NzQsIDkyOTc5LCA5Mjk4NCwgOTI5ODksIDkyOTk0LCAwLCAwLCAwLCA5Mjk5OSwgCi0gICAgOTMwMDQsIDkzMDEzLCA5MzAyMSwgOTMwMzAsIDkzMDM5LCA5MzA1MCwgOTMwNjEsIDkzMDY4LCA5MzA3NSwgOTMwODIsIAotICAgIDkzMDg5LCA5MzA5NiwgOTMxMDMsIDkzMTEwLCA5MzExNywgOTMxMjQsIDkzMTMxLCA5MzEzOCwgOTMxNDUsIDkzMTUyLCAKLSAgICA5MzE1OSwgOTMxNjYsIDkzMTczLCA5MzE4MCwgOTMxODcsIDkzMTk0LCA5MzIwMSwgOTMyMDgsIDAsIDAsIDkzMjE1LCAKLSAgICA5MzIyMSwgOTMyMjcsIDkzMjMzLCA5MzIzOSwgOTMyNDYsIDkzMjUzLCA5MzI2MSwgOTMyNjksIDkzMjc2LCA5MzI4MywgCi0gICAgOTMyOTAsIDkzMjk3LCA5MzMwNCwgOTMzMTEsIDkzMzE4LCA5MzMyNSwgOTMzMzIsIDkzMzM5LCA5MzM0NiwgOTMzNTMsIAotICAgIDkzMzYwLCA5MzM2NywgOTMzNzQsIDkzMzgxLCA5MzM4OCwgOTMzOTUsIDAsIDAsIDAsIDAsIDAsIDkzNDAyLCA5MzQwOCwgCi0gICAgOTM0MTQsIDkzNDIwLCA5MzQyNiwgOTM0MzMsIDkzNDQwLCA5MzQ0OCwgOTM0NTYsIDkzNDYyLCA5MzQ2OCwgOTM0NzUsIAotICAgIDkzNDgxLCA5MzQ4NywgOTM0OTMsIDkzNDk5LCA5MzUwNiwgOTM1MTMsIDkzNTIwLCA5MzUyNywgOTM1MzQsIDkzNTQxLCAKLSAgICA5MzU0OCwgOTM1NTUsIDkzNTYyLCA5MzU2OSwgOTM1NzYsIDkzNTgzLCA5MzU5MCwgOTM1OTcsIDkzNjA0LCA5MzYxMSwgCi0gICAgOTM2MTgsIDkzNjI1LCA5MzYzMiwgOTM2MzksIDkzNjQ2LCA5MzY1MywgOTM2NjAsIDkzNjY3LCA5MzY3NCwgOTM2ODEsIAotICAgIDkzNjg4LCA5MzY5NSwgOTM3MDIsIDkzNzA5LCA5MzcxNiwgOTM3MjMsIDkzNzMwLCA5MzczNywgOTM3NDQsIDkzNzUxLCAKLSAgICA5Mzc1OCwgOTM3NjUsIDkzNzcyLCA5Mzc3OSwgOTM3ODYsIDkzNzkzLCA5MzgwMCwgOTM4MDcsIDkzODE0LCA5MzgyMSwgCi0gICAgOTM4MjgsIDkzODM1LCA5Mzg0MiwgOTM4NDksIDkzODU2LCA5Mzg2MywgOTM4NzAsIDkzODc3LCA5Mzg4NCwgOTM4OTEsIAotICAgIDkzODk4LCA5MzkwNSwgOTM5MTIsIDkzOTE5LCA5MzkyNiwgOTM5MzMsIDkzOTQwLCA5Mzk0NywgOTM5NTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkzOTYxLCA5Mzk2NSwgOTM5NjksIDkzOTczLCA5Mzk3NywgOTM5ODEsIDkzOTg1LCA5Mzk4OSwgCi0gICAgOTM5OTMsIDkzOTk3LCA5NDAwMiwgOTQwMDcsIDk0MDEyLCA5NDAxNywgOTQwMjIsIDk0MDI3LCA5NDAzMiwgOTQwMzcsIAotICAgIDk0MDQyLCA5NDA0OCwgOTQwNTQsIDk0MDYwLCA5NDA2NywgOTQwNzQsIDk0MDgxLCA5NDA4OCwgOTQwOTUsIDk0MTAyLCAKLSAgICA5NDEwOSwgOTQxMTYsIDk0MTIzLCAwLCA5NDEzMCwgOTQxMzQsIDk0MTM4LCA5NDE0MiwgOTQxNDYsIDk0MTUwLCA5NDE1MywgCi0gICAgOTQxNTcsIDk0MTYwLCA5NDE2NCwgOTQxNjcsIDk0MTcxLCA5NDE3NSwgOTQxODAsIDk0MTg0LCA5NDE4OSwgOTQxOTIsIAotICAgIDk0MTk2LCA5NDE5OSwgOTQyMDMsIDk0MjA2LCA5NDIxMCwgOTQyMTQsIDk0MjE4LCA5NDIyMiwgOTQyMjYsIDk0MjMwLCAKLSAgICA5NDIzNCwgOTQyMzgsIDk0MjQyLCA5NDI0NiwgOTQyNTAsIDk0MjU0LCA5NDI1OCwgOTQyNjIsIDk0MjY2LCA5NDI3MCwgCi0gICAgOTQyNzQsIDk0Mjc4LCA5NDI4MSwgOTQyODQsIDk0Mjg4LCA5NDI5MiwgOTQyOTYsIDk0Mjk5LCA5NDMwMiwgOTQzMDUsIAotICAgIDk0MzA5LCA5NDMxMywgOTQzMTcsIDk0MzIxLCA5NDMyNCwgOTQzMjcsIDk0MzMxLCA5NDMzNywgOTQzNDMsIDk0MzQ5LCAKLSAgICA5NDM1NCwgOTQzNjEsIDk0MzY1LCA5NDM3MCwgOTQzNzQsIDk0Mzc5LCA5NDM4NCwgOTQzOTAsIDk0Mzk1LCA5NDQwMSwgCi0gICAgOTQ0MDUsIDk0NDEwLCA5NDQxNCwgOTQ0MTksIDk0NDIyLCA5NDQyNSwgOTQ0MjksIDk0NDM0LCA5NDQ0MCwgOTQ0NDUsIAotICAgIDk0NDUxLCAwLCAwLCAwLCAwLCA5NDQ1NiwgOTQ0NTksIDk0NDYyLCA5NDQ2NSwgOTQ0NjgsIDk0NDcxLCA5NDQ3NCwgCi0gICAgOTQ0NzcsIDk0NDgwLCA5NDQ4MywgOTQ0ODcsIDk0NDkxLCA5NDQ5NSwgOTQ0OTksIDk0NTAzLCA5NDUwNywgOTQ1MTEsIAotICAgIDk0NTE1LCA5NDUxOSwgOTQ1MjQsIDk0NTI5LCA5NDUzMywgOTQ1MzYsIDk0NTM5LCA5NDU0MiwgOTQ1NDUsIDk0NTQ4LCAKLSAgICA5NDU1MSwgOTQ1NTQsIDk0NTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NDU2MCwgOTQ1NjUsIDk0NTcwLCA5NDU3NSwgOTQ1NzksIDk0NTg0LCA5NDU4OCwgOTQ1OTMsIDk0NTk3LCA5NDYwMiwgCi0gICAgOTQ2MDYsIDk0NjExLCA5NDYxNSwgOTQ2MjAsIDk0NjI0LCA5NDYyOSwgOTQ2MzQsIDk0NjM5LCA5NDY0NCwgOTQ2NDksIAotICAgIDk0NjU0LCA5NDY1OSwgOTQ2NjQsIDk0NjY5LCA5NDY3NCwgOTQ2NzksIDk0Njg0LCA5NDY4OSwgOTQ2OTQsIDk0Njk5LCAKLSAgICA5NDcwNCwgOTQ3MDksIDk0NzE0LCA5NDcxOSwgOTQ3MjQsIDk0NzI4LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgCi0gICAgOTQ3NTEsIDk0NzU1LCA5NDc1OSwgOTQ3NjQsIDk0NzY5LCA5NDc3NCwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTMsIAotICAgIDk0Nzk4LCA5NDgwNCwgOTQ4MDksIDk0ODE1LCA5NDgyMCwgOTQ4MjYsIDk0ODMxLCA5NDgzNywgOTQ4NDIsIDk0ODQ3LCAKLSAgICA5NDg1MiwgOTQ4NTcsIDk0ODYxLCA5NDg2NiwgOTQ4NzIsIDk0ODc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5NDg4MSwgOTQ4ODgsIDk0ODk1LCA5NDkwMiwgOTQ5MDksIDk0OTE2LCA5NDkyMywgOTQ5MzAsIAotICAgIDk0OTM3LCA5NDk0NCwgOTQ5NTEsIDk0OTU4LCA5NDk2NSwgOTQ5NzIsIDk0OTc5LCA5NDk4NiwgOTQ5OTMsIDk1MDAwLCAKLSAgICA5NTAwNywgOTUwMTQsIDk1MDIxLCA5NTAyOCwgOTUwMzUsIDk1MDQyLCA5NTA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTUwNTYsIDk1MDYzLCA5NTA2OSwgOTUwNzUsIDk1MDgxLCA5NTA4NywgOTUwOTMsIDk1MDk5LCA5NTEwNSwgOTUxMTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDk1MTE3LCA5NTEyMiwgOTUxMjcsIDk1MTMyLCA5NTEzNywgOTUxNDEsIDk1MTQ1LCA5NTE0OSwgCi0gICAgOTUxNTQsIDk1MTU5LCA5NTE2NCwgOTUxNjksIDk1MTc0LCA5NTE3OSwgOTUxODQsIDk1MTg5LCA5NTE5NCwgOTUxOTksIAotICAgIDk1MjA0LCA5NTIwOSwgOTUyMTQsIDk1MjE5LCA5NTIyNCwgOTUyMjksIDk1MjM0LCA5NTIzOSwgOTUyNDQsIDk1MjQ5LCAKLSAgICA5NTI1NCwgOTUyNTksIDk1MjY0LCA5NTI2OSwgOTUyNzQsIDk1Mjc5LCA5NTI4NCwgOTUyODksIDk1Mjk0LCA5NTI5OSwgCi0gICAgOTUzMDQsIDk1MzA5LCA5NTMxNCwgOTUzMTksIDk1MzI1LCA5NTMzMCwgOTUzMzYsIDk1MzQxLCA5NTM0NywgOTUzNTIsIAotICAgIDk1MzU4LCA5NTM2NCwgOTUzNjgsIDk1MzczLCA5NTM3NywgMCwgOTUzODEsIDk1Mzg2LCA5NTM5MCwgOTUzOTQsIDk1Mzk4LCAKLSAgICA5NTQwMiwgOTU0MDYsIDk1NDEwLCA5NTQxNCwgOTU0MTgsIDk1NDIyLCA5NTQyNywgOTU0MzEsIDk1NDM2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ0MSwgOTU0NDUsIDk1NDQ5LCA5NTQ1MywgOTU0NTYsIDk1NDYwLCAKLSAgICA5NTQ2MywgOTU0NjcsIDk1NDcwLCA5NTQ3NCwgOTU0NzgsIDk1NDgzLCA5NTQ4NywgOTU0OTIsIDk1NDk1LCA5NTQ5OSwgCi0gICAgOTU1MDIsIDk1NTA2LCA5NTUwOSwgOTU1MTMsIDk1NTE3LCA5NTUyMSwgOTU1MjUsIDk1NTI5LCA5NTUzMywgOTU1MzcsIAotICAgIDk1NTQxLCA5NTU0NSwgOTU1NDksIDk1NTUzLCA5NTU1NywgOTU1NjEsIDk1NTY1LCA5NTU2OSwgOTU1NzMsIDk1NTc3LCAKLSAgICA5NTU4MSwgOTU1ODQsIDk1NTg3LCA5NTU5MSwgOTU1OTUsIDk1NTk5LCA5NTYwMiwgOTU2MDUsIDk1NjA4LCA5NTYxMiwgCi0gICAgOTU2MTYsIDk1NjIwLCA5NTYyNCwgOTU2MjgsIDk1NjMxLCA5NTYzNCwgOTU2MzksIDk1NjQzLCA5NTY0OCwgOTU2NTIsIAotICAgIDk1NjU3LCA5NTY2MiwgOTU2NjgsIDk1NjczLCA5NTY3OSwgOTU2ODMsIDk1Njg4LCA5NTY5MiwgOTU2OTcsIDk1NzAxLCAKLSAgICA5NTcwNSwgOTU3MDksIDk1NzEzLCA5NTcxNiwgOTU3MTksIDk1NzIzLCA5NTcyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTU3MzAsIDk1NzM0LCA5NTczNywgOTU3NDAsIDk1NzQzLCA5NTc0NiwgOTU3NDksIDk1NzUyLCA5NTc1NSwgOTU3NTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NzYxLCA5NTc2NSwgOTU3NzAsIDk1Nzc0LCA5NTc3OSwgCi0gICAgOTU3ODMsIDk1Nzg4LCA5NTc5MiwgOTU3OTcsIDk1ODAxLCA5NTgwNiwgOTU4MTAsIDk1ODE1LCA5NTgyMCwgOTU4MjUsIAotICAgIDk1ODMwLCA5NTgzNSwgOTU4NDAsIDk1ODQ1LCA5NTg1MCwgOTU4NTUsIDk1ODYwLCA5NTg2NSwgOTU4NzAsIDk1ODc1LCAKLSAgICA5NTg4MCwgOTU4ODUsIDk1ODkwLCA5NTg5NSwgOTU5MDAsIDk1OTA0LCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgCi0gICAgOTU5MjcsIDk1OTMxLCA5NTkzNSwgOTU5NDAsIDk1OTQ1LCA5NTk1MCwgOTU5NTQsIDk1OTU4LCA5NTk2MywgOTU5NjgsIAotICAgIDk1OTczLCA5NTk3OSwgOTU5ODQsIDk1OTkwLCA5NTk5NSwgOTYwMDEsIDk2MDA2LCA5NjAxMiwgOTYwMTcsIDk2MDIzLCAKLSAgICA5NjAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwMzMsIDk2MDM4LCA5NjA0MiwgOTYwNDYsIDk2MDUwLCA5NjA1NCwgCi0gICAgOTYwNTgsIDk2MDYyLCA5NjA2NiwgOTYwNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDc0LCA5NjA3NywgOTYwODIsIDk2MDg4LCAKLSAgICA5NjA5NiwgOTYxMDEsIDk2MTA3LCA5NjExNSwgOTYxMjEsIDk2MTI3LCA5NjEzMSwgOTYxMzUsIDk2MTQyLCA5NjE1MSwgCi0gICAgOTYxNTgsIDk2MTY3LCA5NjE3MywgOTYxODIsIDk2MTg5LCA5NjE5NiwgOTYyMDMsIDk2MjEzLCA5NjIxOSwgOTYyMjMsIAotICAgIDk2MjMwLCA5NjIzOSwgOTYyNDksIDk2MjU2LCA5NjI2MywgOTYyNjcsIDk2MjcxLCA5NjI3OCwgOTYyODgsIDk2MjkyLCAKLSAgICA5NjI5OSwgOTYzMDYsIDk2MzEzLCA5NjMxOSwgOTYzMjYsIDk2MzMzLCA5NjM0MCwgOTYzNDcsIDk2MzUxLCA5NjM1NSwgCi0gICAgOTYzNTksIDk2MzY2LCA5NjM3MCwgOTYzNzcsIDk2Mzg0LCA5NjM5OCwgOTY0MDcsIDk2NDExLCA5NjQxNSwgOTY0MTksIAotICAgIDk2NDI2LCA5NjQzMCwgOTY0MzQsIDk2NDM4LCA5NjQ0NiwgOTY0NTQsIDk2NDczLCA5NjQ4MywgOTY1MDMsIDk2NTA3LCAKLSAgICA5NjUxMSwgOTY1MTUsIDk2NTE5LCA5NjUyMywgOTY1MjcsIDk2NTMxLCA5NjUzOCwgOTY1NDIsIDk2NTQ1LCA5NjU0OSwgCi0gICAgOTY1NTMsIDk2NTU5LCA5NjU2NiwgOTY1NzUsIDk2NTc5LCA5NjU4OCwgOTY1OTcsIDk2NjA1LCA5NjYwOSwgOTY2MTYsIAotICAgIDk2NjIwLCA5NjYyNCwgOTY2MjgsIDk2NjMyLCA5NjY0MywgOTY2NTIsIDk2NjYxLCA5NjY3MCwgOTY2NzksIDk2NjkxLCAKLSAgICA5NjcwMCwgOTY3MDksIDk2NzE4LCA5NjcyNiwgOTY3MzUsIDk2NzQ3LCA5Njc1NiwgOTY3NjUsIDk2Nzc0LCA5Njc4NiwgCi0gICAgOTY3OTUsIDk2ODA0LCA5NjgxNiwgOTY4MjUsIDk2ODM0LCA5Njg0NiwgOTY4NTUsIDk2ODU5LCA5Njg2MywgOTY4NjcsIAotICAgIDk2ODcxLCA5Njg3NSwgOTY4NzksIDk2ODgzLCA5Njg5MCwgOTY4OTQsIDk2ODk4LCA5NjkwOSwgOTY5MTMsIDk2OTE3LCAKLSAgICA5NjkyNCwgOTY5MzAsIDk2OTM2LCA5Njk0MCwgOTY5NDcsIDk2OTUxLCA5Njk1NSwgOTY5NTksIDk2OTYzLCA5Njk2NywgCi0gICAgOTY5NzEsIDk2OTc3LCA5Njk4NSwgOTY5ODksIDk2OTkzLCA5Njk5NiwgOTcwMDIsIDk3MDEyLCA5NzAxNiwgOTcwMjgsIAotICAgIDk3MDM1LCA5NzA0MiwgOTcwNDksIDk3MDU2LCA5NzA2MiwgOTcwNjYsIDk3MDcwLCA5NzA3NCwgOTcwNzgsIDk3MDg1LCAKLSAgICA5NzA5NCwgOTcxMDEsIDk3MTA5LCA5NzExNywgOTcxMjMsIDk3MTI3LCA5NzEzMSwgOTcxMzUsIDk3MTM5LCA5NzE0NSwgCi0gICAgOTcxNTQsIDk3MTY2LCA5NzE3MywgOTcxODAsIDk3MTg5LCA5NzIwMCwgOTcyMDYsIDk3MjE1LCA5NzIyNCwgOTcyMzEsIAotICAgIDk3MjQwLCA5NzI0NywgOTcyNTQsIDk3MjY0LCA5NzI3MSwgOTcyNzgsIDk3Mjg1LCA5NzI5MiwgOTcyOTYsIDk3MzAyLCAKLSAgICA5NzMwNiwgOTczMTcsIDk3MzI1LCA5NzMzNCwgOTczNDYsIDk3MzUzLCA5NzM2MCwgOTczNzAsIDk3Mzc3LCA5NzM4NiwgCi0gICAgOTczOTMsIDk3NDAyLCA5NzQwOSwgOTc0MTYsIDk3NDI2LCA5NzQzMywgOTc0NDAsIDk3NDUwLCA5NzQ1NywgOTc0NjksIAotICAgIDk3NDc4LCA5NzQ4NSwgOTc0OTIsIDk3NDk5LCA5NzUwOCwgOTc1MTgsIDk3NTMxLCA5NzUzOCwgOTc1NDgsIDk3NTU4LCAKLSAgICA5NzU2NSwgOTc1NzQsIDk3NTg3LCA5NzU5NCwgOTc2MDEsIDk3NjA4LCA5NzYxOCwgOTc2MjgsIDk3NjM1LCA5NzY0NSwgCi0gICAgOTc2NTIsIDk3NjU5LCA5NzY2OSwgOTc2NzUsIDk3NjgyLCA5NzY4OSwgOTc2OTYsIDk3NzA2LCA5NzcxMywgOTc3MjAsIAotICAgIDk3NzI3LCA5NzczMywgOTc3NDAsIDk3NzUwLCA5Nzc1NywgOTc3NjEsIDk3NzY5LCA5Nzc3MywgOTc3ODUsIDk3Nzg5LCAKLSAgICA5NzgwMywgOTc4MDcsIDk3ODExLCA5NzgxNSwgOTc4MTksIDk3ODI1LCA5NzgzMiwgOTc4NDAsIDk3ODQ0LCA5Nzg0OCwgCi0gICAgOTc4NTIsIDk3ODU2LCA5Nzg2MywgOTc4NjcsIDk3ODczLCA5Nzg3OSwgOTc4ODcsIDk3ODkxLCA5Nzg5OCwgOTc5MDYsIAotICAgIDk3OTEwLCA5NzkxNCwgOTc5MjAsIDk3OTI0LCA5NzkzMywgOTc5NDIsIDk3OTQ5LCA5Nzk1OSwgOTc5NjUsIDk3OTY5LCAKLSAgICA5Nzk3MywgOTc5ODEsIDk3OTg4LCA5Nzk5NSwgOTgwMDEsIDk4MDA1LCA5ODAxMywgOTgwMTcsIDk4MDI0LCA5ODAzNiwgCi0gICAgOTgwNDMsIDk4MDUzLCA5ODA1OSwgOTgwNjMsIDk4MDcyLCA5ODA3OSwgOTgwODgsIDk4MDkyLCA5ODA5NiwgOTgxMDMsIAotICAgIDk4MTA3LCA5ODExMSwgOTgxMTUsIDk4MTE5LCA5ODEyMiwgOTgxMjgsIDk4MTM0LCA5ODEzOCwgOTgxNDIsIDk4MTQ5LCAKLSAgICA5ODE1NiwgOTgxNjMsIDk4MTcwLCA5ODE3NywgOTgxODQsIDk4MTkxLCA5ODE5OCwgOTgyMDQsIDk4MjA4LCA5ODIxMiwgCi0gICAgOTgyMTksIDk4MjI2LCA5ODIzMywgOTgyNDAsIDk4MjQ3LCA5ODI1MSwgOTgyNTQsIDk4MjU5LCA5ODI2MywgOTgyNjcsIAotICAgIDk4Mjc2LCA5ODI4NSwgOTgyODksIDk4MjkzLCA5ODI5OSwgOTgzMDUsIDk4MzIyLCA5ODMyOCwgOTgzMzIsIDk4MzQxLCAKLSAgICA5ODM0NSwgOTgzNDksIDk4MzU2LCA5ODM2NCwgOTgzNzIsIDk4Mzc4LCA5ODM4MiwgOTgzODYsIDk4MzkwLCA5ODM5NCwgCi0gICAgOTgzOTcsIDk4NDAzLCA5ODQxMCwgOTg0MjAsIDk4NDI3LCA5ODQzNCwgOTg0NDEsIDk4NDQ3LCA5ODQ1NCwgOTg0NjEsIAotICAgIDk4NDY4LCA5ODQ3NSwgOTg0ODIsIDk4NDkxLCA5ODQ5OCwgOTg1MTAsIDk4NTE3LCA5ODUyNCwgOTg1MzQsIDk4NTQ1LCAKLSAgICA5ODU1MiwgOTg1NTksIDk4NTY2LCA5ODU3MywgOTg1ODAsIDk4NTg3LCA5ODU5NCwgOTg2MDEsIDk4NjA4LCA5ODYxNSwgCi0gICAgOTg2MjUsIDk4NjM1LCA5ODY0NSwgOTg2NTIsIDk4NjYyLCA5ODY2OSwgOTg2NzYsIDk4NjgzLCA5ODY5MCwgOTg2OTYsIAotICAgIDk4NzAzLCA5ODcxMCwgOTg3MTcsIDk4NzI0LCA5ODczMSwgOTg3MzgsIDk4NzQ1LCA5ODc1MiwgOTg3NTgsIDk4NzY1LCAKLSAgICA5ODc3MiwgOTg3ODEsIDk4Nzg4LCA5ODc5NSwgOTg3OTksIDk4ODA3LCA5ODgxMSwgOTg4MTUsIDk4ODE5LCA5ODgyMywgCi0gICAgOTg4MjcsIDk4ODM0LCA5ODgzOCwgOTg4NDcsIDk4ODUxLCA5ODg1OCwgOTg4NjYsIDk4ODcwLCA5ODg3NCwgOTg4NzgsIAotICAgIDk4ODkxLCA5ODkwNywgOTg5MTEsIDk4OTE1LCA5ODkyMiwgOTg5MjgsIDk4OTM1LCA5ODkzOSwgOTg5NDMsIDk4OTQ3LCAKLSAgICA5ODk1MSwgOTg5NTUsIDk4OTYyLCA5ODk2NiwgOTg5ODQsIDk4OTg4LCA5ODk5MiwgOTg5OTksIDk5MDAzLCA5OTAwNywgCi0gICAgOTkwMTMsIDk5MDE3LCA5OTAyMSwgOTkwMjksIDk5MDMzLCA5OTAzNywgOTkwNDEsIDk5MDQ1LCA5OTA1MSwgOTkwNjIsIAotICAgIDk5MDcxLCA5OTA4MCwgOTkwODcsIDk5MDk0LCA5OTEwNSwgOTkxMTIsIDk5MTE5LCA5OTEyNiwgOTkxMzMsIDk5MTQwLCAKLSAgICA5OTE0NywgOTkxNTQsIDk5MTY0LCA5OTE3MCwgOTkxNzcsIDk5MTg3LCA5OTE5NiwgOTkyMDMsIDk5MjEyLCA5OTIyMiwgCi0gICAgOTkyMjksIDk5MjM2LCA5OTI0MywgOTkyNTAsIDk5MjYyLCA5OTI2OSwgOTkyNzYsIDk5MjgzLCA5OTI5MCwgOTkyOTcsIAotICAgIDk5MzA3LCA5OTMxNCwgOTkzMjEsIDk5MzMxLCA5OTM0NCwgOTkzNTYsIDk5MzYzLCA5OTM3MywgOTkzODAsIDk5Mzg3LCAKLSAgICA5OTM5NCwgOTk0MDgsIDk5NDE0LCA5OTQyMiwgOTk0MzIsIDk5NDQyLCA5OTQ0OSwgOTk0NTYsIDk5NDYyLCA5OTQ2NiwgCi0gICAgOTk0NzMsIDk5NDgzLCA5OTQ4OSwgOTk1MDIsIDk5NTA2LCA5OTUxMCwgOTk1MTcsIDk5NTIxLCA5OTUyOCwgOTk1MzgsIAotICAgIDk5NTQyLCA5OTU0NiwgOTk1NTAsIDk5NTU0LCA5OTU1OCwgOTk1NjUsIDk5NTY5LCA5OTU3NiwgOTk1ODMsIDk5NTkwLCAKLSAgICA5OTU5OSwgOTk2MDgsIDk5NjE4LCA5OTYyNSwgOTk2MzIsIDk5NjM5LCA5OTY0OSwgOTk2NTYsIDk5NjY2LCA5OTY3MywgCi0gICAgOTk2ODMsIDk5NjkwLCA5OTY5NywgOTk3MDcsIDk5NzE3LCA5OTcyNCwgOTk3MzAsIDk5NzM4LCA5OTc0NiwgOTk3NTIsIAotICAgIDk5NzU4LCA5OTc2MiwgOTk3NjYsIDk5NzczLCA5OTc4MSwgOTk3ODcsIDk5NzkxLCA5OTc5NSwgOTk3OTksIDk5ODA2LCAKLSAgICA5OTgxOCwgOTk4MjEsIDk5ODI4LCA5OTgzNCwgOTk4MzgsIDk5ODQyLCA5OTg0NiwgOTk4NTAsIDk5ODU0LCA5OTg1OCwgCi0gICAgOTk4NjIsIDk5ODY2LCA5OTg3MCwgOTk4NzQsIDk5ODgxLCA5OTg4NSwgOTk4OTEsIDk5ODk1LCA5OTg5OSwgOTk5MDMsIAotICAgIDk5OTA5LCA5OTkxNiwgOTk5MjMsIDk5OTMwLCA5OTk0MSwgOTk5NDksIDk5OTUzLCA5OTk1OSwgOTk5NjgsIDk5OTc1LCAKLSAgICA5OTk4MSwgOTk5ODQsIDk5OTg4LCA5OTk5MiwgOTk5OTgsIDEwMDAwNywgMTAwMDE1LCAxMDAwMTksIDEwMDAyNSwgCi0gICAgMTAwMDI5LCAxMDAwMzMsIDEwMDAzNywgMTAwMDQzLCAxMDAwNTAsIDEwMDA1NiwgMTAwMDYwLCAxMDAwNjYsIDEwMDA3MCwgCi0gICAgMTAwMDc0LCAxMDAwODMsIDEwMDA5NSwgMTAwMDk5LCAxMDAxMDYsIDEwMDExMywgMTAwMTIzLCAxMDAxMzAsIDEwMDE0MiwgCi0gICAgMTAwMTQ5LCAxMDAxNTYsIDEwMDE2MywgMTAwMTc0LCAxMDAxODQsIDEwMDE5NywgMTAwMjA3LCAxMDAyMTQsIDEwMDIxOCwgCi0gICAgMTAwMjIyLCAxMDAyMjYsIDEwMDIzMCwgMTAwMjM5LCAxMDAyNDgsIDEwMDI1NywgMTAwMjc0LCAxMDAyODMsIDEwMDI4OSwgCi0gICAgMTAwMjk2LCAxMDAzMDQsIDEwMDMxNywgMTAwMzIxLCAxMDAzMzAsIDEwMDMzOSwgMTAwMzQ4LCAxMDAzNTcsIDEwMDM2OCwgCi0gICAgMTAwMzc3LCAxMDAzODYsIDEwMDM5NSwgMTAwNDA0LCAxMDA0MTMsIDEwMDQyMiwgMTAwNDMyLCAxMDA0MzUsIDEwMDQzOSwgCi0gICAgMTAwNDQzLCAxMDA0NDcsIDEwMDQ1MSwgMTAwNDU1LCAxMDA0NjEsIDEwMDQ2OCwgMTAwNDc1LCAxMDA0ODIsIDEwMDQ4OCwgCi0gICAgMTAwNDk0LCAxMDA1MDEsIDEwMDUwNywgMTAwNTE0LCAxMDA1MjIsIDEwMDUyNiwgMTAwNTMzLCAxMDA1NDAsIDEwMDU0NywgCi0gICAgMTAwNTU1LCAxMDA1NTgsIDEwMDU2MiwgMTAwNTY2LCAxMDA1NzAsIDEwMDU3MywgMTAwNTc5LCAxMDA1ODMsIDEwMDU4OSwgCi0gICAgMTAwNTk2LCAxMDA2MDMsIDEwMDYwOSwgMTAwNjE2LCAxMDA2MjMsIDEwMDYzMCwgMTAwNjM3LCAxMDA2NDQsIDEwMDY1MSwgCi0gICAgMTAwNjU4LCAxMDA2NjUsIDEwMDY3MiwgMTAwNjc5LCAxMDA2ODYsIDEwMDY5MywgMTAwNzAwLCAxMDA3MDcsIDEwMDcxMywgCi0gICAgMTAwNzE3LCAxMDA3MjYsIDEwMDczMCwgMTAwNzM0LCAxMDA3MzgsIDEwMDc0MiwgMTAwNzQ4LCAxMDA3NTUsIDEwMDc2MiwgCi0gICAgMTAwNzY5LCAxMDA3NzYsIDEwMDc4MywgMTAwNzg5LCAxMDA3OTcsIDEwMDgwMSwgMTAwODA1LCAxMDA4MDksIDEwMDgxMywgCi0gICAgMTAwODE5LCAxMDA4MzYsIDEwMDg1MywgMTAwODU3LCAxMDA4NjEsIDEwMDg2NSwgMTAwODY5LCAxMDA4NzMsIDEwMDg3NywgCi0gICAgMTAwODgzLCAxMDA4OTAsIDEwMDg5NCwgMTAwOTAwLCAxMDA5MDcsIDEwMDkxNCwgMTAwOTIxLCAxMDA5MjgsIDEwMDkzNSwgCi0gICAgMTAwOTQ0LCAxMDA5NTEsIDEwMDk1OCwgMTAwOTY1LCAxMDA5NzIsIDEwMDk3NiwgMTAwOTgwLCAxMDA5ODYsIDEwMDk5OCwgCi0gICAgMTAxMDAyLCAxMDEwMDYsIDEwMTAxNSwgMTAxMDE5LCAxMDEwMjMsIDEwMTAyNywgMTAxMDMzLCAxMDEwMzcsIDEwMTA0MSwgCi0gICAgMTAxMDUwLCAxMDEwNTQsIDEwMTA1OCwgMTAxMDYyLCAxMDEwNjksIDEwMTA3MywgMTAxMDc3LCAxMDEwODEsIDEwMTA4NSwgCi0gICAgMTAxMDg5LCAxMDEwOTMsIDEwMTA5NywgMTAxMTAxLCAxMDExMDcsIDEwMTExNCwgMTAxMTIxLCAxMDExMjcsIDEwMTEzMSwgCi0gICAgMTAxMTQ4LCAxMDExNTQsIDEwMTE1OCwgMTAxMTY0LCAxMDExNzAsIDEwMTE3NiwgMTAxMTgyLCAxMDExODgsIDEwMTE5NCwgCi0gICAgMTAxMTk4LCAxMDEyMDIsIDEwMTIwNiwgMTAxMjEyLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNywgCi0gICAgMTAxMjQ0LCAxMDEyNjEsIDEwMTI2NSwgMTAxMjY5LCAxMDEyNzMsIDEwMTI3NywgMTAxMjgxLCAxMDEyOTMsIDEwMTI5NiwgCi0gICAgMTAxMzAxLCAxMDEzMDYsIDEwMTMyMSwgMTAxMzMxLCAxMDEzNDMsIDEwMTM0NywgMTAxMzUxLCAxMDEzNTUsIDEwMTM2MSwgCi0gICAgMTAxMzY4LCAxMDEzNzUsIDEwMTM4NSwgMTAxMzk3LCAxMDE0MDMsIDEwMTQwOSwgMTAxNDE4LCAxMDE0MjIsIDEwMTQyNiwgCi0gICAgMTAxNDMzLCAxMDE0NDMsIDEwMTQ1MCwgMTAxNDU2LCAxMDE0NjAsIDEwMTQ2NCwgMTAxNDcxLCAxMDE0NzcsIDEwMTQ4MSwgCi0gICAgMTAxNDg3LCAxMDE0OTEsIDEwMTQ5OSwgMTAxNTA1LCAxMDE1MDksIDEwMTUxNywgMTAxNTI1LCAxMDE1MzIsIDEwMTUzOCwgCi0gICAgMTAxNTQ1LCAxMDE1NTIsIDEwMTU2MiwgMTAxNTcyLCAxMDE1NzYsIDEwMTU4MCwgMTAxNTg0LCAxMDE1ODgsIDEwMTU5NCwgCi0gICAgMTAxNjAxLCAxMDE2MDcsIDEwMTYxNCwgMTAxNjIxLCAxMDE2MjgsIDEwMTYzNywgMTAxNjQ0LCAxMDE2NTEsIDEwMTY1NywgCi0gICAgMTAxNjY0LCAxMDE2NzEsIDEwMTY3OCwgMTAxNjg1LCAxMDE2OTIsIDEwMTY5OSwgMTAxNzA1LCAxMDE3MTIsIDEwMTcxOSwgCi0gICAgMTAxNzI2LCAxMDE3MzUsIDEwMTc0MiwgMTAxNzQ5LCAxMDE3NTMsIDEwMTc1OSwgMTAxNzYzLCAxMDE3NjksIDEwMTc3NiwgCi0gICAgMTAxNzgzLCAxMDE3OTAsIDEwMTc5NCwgMTAxNzk4LCAxMDE4MDIsIDEwMTgwNiwgMTAxODEwLCAxMDE4MTcsIDEwMTgyMSwgCi0gICAgMTAxODI1LCAxMDE4MzEsIDEwMTgzOSwgMTAxODQzLCAxMDE4NDcsIDEwMTg1MSwgMTAxODU1LCAxMDE4NjIsIDEwMTg2NiwgCi0gICAgMTAxODcwLCAxMDE4NzgsIDEwMTg4MiwgMTAxODg2LCAxMDE4OTAsIDEwMTg5NCwgMTAxOTAwLCAxMDE5MDQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMTkwOCwgMTAxOTE0LCAxMDE5MjAsIDEwMTkyNywgCi0gICAgMTAxOTM0LCAxMDE5NDEsIDEwMTk0OCwgMTAxOTU1LCAxMDE5NjIsIDEwMTk2OCwgMTAxOTc1LCAxMDE5ODIsIDEwMTk4OSwgCi0gICAgMTAxOTk2LCAxMDIwMDMsIDEwMjAxMCwgMTAyMDE2LCAxMDIwMjIsIDEwMjAyOCwgMTAyMDM0LCAxMDIwNDAsIDEwMjA0NiwgCi0gICAgMTAyMDUyLCAxMDIwNTgsIDEwMjA2NCwgMTAyMDcxLCAxMDIwNzgsIDEwMjA4NSwgMTAyMDkyLCAxMDIwOTksIDEwMjEwNiwgCi0gICAgMTAyMTEyLCAxMDIxMTgsIDEwMjEyNCwgMTAyMTMxLCAxMDIxMzgsIDEwMjE0NCwgMTAyMTUwLCAxMDIxNTksIDEwMjE2NiwgCi0gICAgMTAyMTczLCAxMDIxODAsIDEwMjE4NywgMTAyMTk0LCAxMDIyMDEsIDEwMjIwNywgMTAyMjEzLCAxMDIyMTksIDEwMjIyOCwgCi0gICAgMTAyMjM1LCAxMDIyNDIsIDEwMjI1MywgMTAyMjY0LCAxMDIyNzAsIDEwMjI3NiwgMTAyMjgyLCAxMDIyOTEsIDEwMjI5OCwgCi0gICAgMTAyMzA1LCAxMDIzMTUsIDEwMjMyNSwgMTAyMzM2LCAxMDIzNDcsIDEwMjM1OSwgMTAyMzcyLCAxMDIzODMsIDEwMjM5NCwgCi0gICAgMTAyNDA2LCAxMDI0MTksIDEwMjQzMCwgMTAyNDQxLCAxMDI0NTIsIDEwMjQ2MywgMTAyNDc0LCAxMDI0ODYsIDEwMjQ5NCwgCi0gICAgMTAyNTAyLCAxMDI1MTEsIDEwMjUyMCwgMTAyNTI5LCAxMDI1MzUsIDEwMjU0MSwgMTAyNTQ3LCAxMDI1NTQsIDEwMjU2NCwgCi0gICAgMTAyNTcxLCAxMDI1ODEsIDEwMjU4NiwgMTAyNTkxLCAxMDI1OTcsIDEwMjYwMywgMTAyNjExLCAxMDI2MTksIDEwMjYyOCwgCi0gICAgMTAyNjM5LCAxMDI2NTAsIDEwMjY1OCwgMTAyNjY2LCAxMDI2NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwMjY4NCwgMTAyNjk1LCAxMDI3MDIsIDEwMjcxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTAyNzE4LCAxMDI3MjIsIDEwMjcyNiwgMTAyNzMwLCAxMDI3MzQsIDEwMjczOCwgMTAyNzQyLCAxMDI3NDYsIDEwMjc1MCwgCi0gICAgMTAyNzU0LCAxMDI3NTgsIDEwMjc2MiwgMTAyNzY2LCAxMDI3NzAsIDEwMjc3NCwgMTAyNzc4LCAxMDI3ODIsIDEwMjc4NiwgCi0gICAgMTAyNzkwLCAxMDI3OTQsIDEwMjc5OCwgMTAyODAyLCAxMDI4MDYsIDEwMjgxMCwgMTAyODE0LCAxMDI4MTgsIDEwMjgyMiwgCi0gICAgMTAyODI2LCAxMDI4MzAsIDEwMjgzNCwgMTAyODM4LCAxMDI4NDIsIDEwMjg0NiwgMTAyODUwLCAxMDI4NTQsIDEwMjg1OCwgCi0gICAgMTAyODYyLCAxMDI4NjYsIDEwMjg3MCwgMTAyODc0LCAxMDI4NzgsIDEwMjg4MiwgMTAyODg2LCAxMDI4OTAsIDEwMjg5NCwgCi0gICAgMTAyODk4LCAxMDI5MDIsIDEwMjkwNiwgMTAyOTEwLCAxMDI5MTQsIDEwMjkxOCwgMTAyOTIyLCAxMDI5MjYsIDEwMjkzMCwgCi0gICAgMTAyOTM0LCAxMDI5MzgsIDEwMjk0MiwgMTAyOTQ2LCAxMDI5NTAsIDEwMjk1NCwgMTAyOTU4LCAxMDI5NjIsIDEwMjk2NiwgCi0gICAgMTAyOTcwLCAxMDI5NzQsIDEwMjk3OCwgMTAyOTgyLCAxMDI5ODYsIDEwMjk5MCwgMTAyOTk0LCAxMDI5OTgsIDEwMzAwMiwgCi0gICAgMTAzMDA2LCAxMDMwMTAsIDEwMzAxNCwgMTAzMDE4LCAxMDMwMjIsIDEwMzAyNiwgMTAzMDMwLCAxMDMwMzQsIDEwMzAzOCwgCi0gICAgMTAzMDQyLCAxMDMwNDYsIDEwMzA1MCwgMTAzMDU0LCAxMDMwNTgsIDEwMzA2MiwgMTAzMDY2LCAxMDMwNzAsIDEwMzA3NCwgCi0gICAgMTAzMDc4LCAxMDMwODIsIDEwMzA4NiwgMTAzMDkwLCAxMDMwOTQsIDEwMzA5OCwgMTAzMTAyLCAxMDMxMDYsIDEwMzExMCwgCi0gICAgMTAzMTE0LCAxMDMxMTgsIDEwMzEyMiwgMTAzMTI2LCAxMDMxMzAsIDEwMzEzNCwgMTAzMTM4LCAxMDMxNDIsIDEwMzE0NiwgCi0gICAgMTAzMTUwLCAxMDMxNTQsIDEwMzE1OCwgMTAzMTYyLCAxMDMxNjYsIDEwMzE3MCwgMTAzMTc0LCAxMDMxNzgsIDEwMzE4MiwgCi0gICAgMTAzMTg2LCAxMDMxOTAsIDEwMzE5NCwgMTAzMTk4LCAxMDMyMDIsIDEwMzIwNiwgMTAzMjEwLCAxMDMyMTQsIDEwMzIxOCwgCi0gICAgMTAzMjIyLCAxMDMyMjYsIDEwMzIzMCwgMTAzMjM0LCAxMDMyMzgsIDEwMzI0MiwgMTAzMjQ2LCAxMDMyNTAsIDEwMzI1NCwgCi0gICAgMTAzMjU4LCAxMDMyNjIsIDEwMzI2NiwgMTAzMjcwLCAxMDMyNzQsIDEwMzI3OCwgMTAzMjgyLCAxMDMyODYsIDEwMzI5MCwgCi0gICAgMTAzMjk0LCAxMDMyOTgsIDEwMzMwMiwgMTAzMzA2LCAxMDMzMTAsIDEwMzMxNCwgMTAzMzE4LCAxMDMzMjIsIDEwMzMyNiwgCi0gICAgMTAzMzMwLCAxMDMzMzQsIDEwMzMzOCwgMTAzMzQyLCAxMDMzNDYsIDEwMzM1MCwgMTAzMzU0LCAxMDMzNTgsIDEwMzM2MiwgCi0gICAgMTAzMzY2LCAxMDMzNzAsIDEwMzM3NCwgMTAzMzc4LCAxMDMzODIsIDEwMzM4NiwgMTAzMzkwLCAxMDMzOTQsIDEwMzM5OCwgCi0gICAgMTAzNDAyLCAxMDM0MDYsIDEwMzQxMCwgMTAzNDE0LCAxMDM0MTgsIDEwMzQyMiwgMTAzNDI2LCAxMDM0MzAsIDEwMzQzNCwgCi0gICAgMTAzNDM4LCAxMDM0NDIsIDEwMzQ0NiwgMTAzNDUwLCAxMDM0NTQsIDEwMzQ1OCwgMTAzNDYyLCAxMDM0NjYsIDEwMzQ3MCwgCi0gICAgMTAzNDc0LCAxMDM0NzgsIDEwMzQ4MiwgMTAzNDg2LCAxMDM0OTAsIDEwMzQ5NCwgMTAzNDk4LCAxMDM1MDIsIDEwMzUwNiwgCi0gICAgMTAzNTEwLCAxMDM1MTQsIDEwMzUxOCwgMTAzNTIyLCAxMDM1MjYsIDEwMzUzMCwgMTAzNTM0LCAxMDM1MzgsIDEwMzU0MiwgCi0gICAgMTAzNTQ2LCAxMDM1NTAsIDEwMzU1NCwgMTAzNTU4LCAxMDM1NjIsIDEwMzU2NiwgMTAzNTcwLCAxMDM1NzQsIDEwMzU3OCwgCi0gICAgMTAzNTgyLCAxMDM1ODYsIDEwMzU5MCwgMTAzNTk0LCAxMDM1OTgsIDEwMzYwMiwgMTAzNjA2LCAxMDM2MTAsIDEwMzYxNCwgCi0gICAgMTAzNjE4LCAxMDM2MjIsIDEwMzYyNiwgMTAzNjMwLCAxMDM2MzQsIDEwMzYzOCwgMTAzNjQyLCAxMDM2NDYsIDEwMzY1MCwgCi0gICAgMTAzNjU0LCAxMDM2NTgsIDEwMzY2MiwgMTAzNjY2LCAxMDM2NzAsIDEwMzY3NCwgMTAzNjc4LCAxMDM2ODIsIDEwMzY4NiwgCi0gICAgMTAzNjkwLCAxMDM2OTQsIDEwMzY5OCwgMTAzNzAyLCAxMDM3MDYsIDEwMzcxMCwgMTAzNzE0LCAxMDM3MTgsIDEwMzcyMiwgCi0gICAgMTAzNzI2LCAxMDM3MzAsIDEwMzczNCwgMTAzNzM4LCAxMDM3NDIsIDEwMzc0NiwgMTAzNzUwLCAxMDM3NTQsIDEwMzc1OCwgCi0gICAgMTAzNzYyLCAxMDM3NjYsIDEwMzc3MCwgMTAzNzc0LCAxMDM3NzgsIDEwMzc4MiwgMTAzNzg2LCAxMDM3OTAsIDEwMzc5NCwgCi0gICAgMTAzNzk4LCAxMDM4MDIsIDEwMzgwNiwgMTAzODEwLCAxMDM4MTQsIDEwMzgxOCwgMTAzODIyLCAxMDM4MjYsIDEwMzgzMCwgCi0gICAgMTAzODM0LCAxMDM4MzgsIDEwMzg0MiwgMTAzODQ2LCAxMDM4NTAsIDEwMzg1NCwgMTAzODU4LCAxMDM4NjIsIDEwMzg2NiwgCi0gICAgMTAzODcwLCAxMDM4NzQsIDEwMzg3OCwgMTAzODgyLCAxMDM4ODYsIDEwMzg5MCwgMTAzODk0LCAxMDM4OTgsIDEwMzkwMiwgCi0gICAgMTAzOTA2LCAxMDM5MTAsIDEwMzkxNCwgMTAzOTE4LCAxMDM5MjIsIDEwMzkyNiwgMTAzOTMwLCAxMDM5MzQsIDEwMzkzOCwgCi0gICAgMTAzOTQyLCAxMDM5NDYsIDEwMzk1MCwgMTAzOTU0LCAxMDM5NTgsIDEwMzk2MiwgMTAzOTY2LCAxMDM5NzAsIDEwMzk3NCwgCi0gICAgMTAzOTc4LCAxMDM5ODIsIDEwMzk4NiwgMTAzOTkwLCAxMDM5OTQsIDEwMzk5OCwgMTA0MDAyLCAxMDQwMDYsIDEwNDAxMCwgCi0gICAgMTA0MDE0LCAxMDQwMTgsIDEwNDAyMiwgMTA0MDI2LCAxMDQwMzAsIDEwNDAzNCwgMTA0MDM4LCAxMDQwNDIsIDEwNDA0NiwgCi0gICAgMTA0MDUwLCAxMDQwNTQsIDEwNDA1OCwgMTA0MDYyLCAxMDQwNjYsIDEwNDA3MCwgMTA0MDc0LCAxMDQwNzgsIDEwNDA4MiwgCi0gICAgMTA0MDg2LCAxMDQwOTAsIDEwNDA5NCwgMTA0MDk4LCAxMDQxMDIsIDEwNDEwNiwgMTA0MTEwLCAxMDQxMTQsIDEwNDExOCwgCi0gICAgMTA0MTIyLCAxMDQxMjYsIDEwNDEzMCwgMTA0MTM0LCAxMDQxMzgsIDEwNDE0MiwgMTA0MTQ2LCAxMDQxNTAsIDEwNDE1NCwgCi0gICAgMTA0MTU4LCAxMDQxNjIsIDEwNDE2NiwgMTA0MTcwLCAxMDQxNzQsIDEwNDE3OCwgMTA0MTgyLCAxMDQxODYsIDEwNDE5MCwgCi0gICAgMTA0MTk0LCAxMDQxOTgsIDEwNDIwMiwgMTA0MjA2LCAxMDQyMTAsIDEwNDIxNCwgMTA0MjE4LCAxMDQyMjIsIDEwNDIyNiwgCi0gICAgMTA0MjMwLCAxMDQyMzQsIDEwNDIzOCwgMTA0MjQyLCAxMDQyNDYsIDEwNDI1MCwgMTA0MjU0LCAxMDQyNTgsIDEwNDI2MiwgCi0gICAgMTA0MjY2LCAxMDQyNzAsIDEwNDI3NCwgMTA0Mjc4LCAxMDQyODIsIDEwNDI4NiwgMTA0MjkwLCAxMDQyOTQsIDEwNDI5OCwgCi0gICAgMTA0MzAyLCAxMDQzMDYsIDEwNDMxMCwgMTA0MzE0LCAxMDQzMTgsIDEwNDMyMiwgMTA0MzI2LCAxMDQzMzAsIDEwNDMzNCwgCi0gICAgMTA0MzM4LCAxMDQzNDIsIDEwNDM0NiwgMTA0MzUwLCAxMDQzNTQsIDEwNDM1OCwgMTA0MzYyLCAxMDQzNjYsIDEwNDM3MCwgCi0gICAgMTA0Mzc0LCAxMDQzNzgsIDEwNDM4MiwgMTA0Mzg2LCAxMDQzOTAsIDEwNDM5NCwgMTA0Mzk4LCAxMDQ0MDIsIDEwNDQwNiwgCi0gICAgMTA0NDEwLCAxMDQ0MTQsIDEwNDQxOCwgMTA0NDIyLCAxMDQ0MjYsIDEwNDQzMCwgMTA0NDM0LCAxMDQ0MzgsIDEwNDQ0MiwgCi0gICAgMTA0NDQ2LCAxMDQ0NTAsIDEwNDQ1NCwgMTA0NDU4LCAxMDQ0NjIsIDEwNDQ2NiwgMTA0NDcwLCAxMDQ0NzQsIDEwNDQ3OCwgCi0gICAgMTA0NDgyLCAxMDQ0ODYsIDEwNDQ5MCwgMTA0NDk0LCAxMDQ0OTgsIDEwNDUwMiwgMTA0NTA2LCAxMDQ1MTAsIDEwNDUxNCwgCi0gICAgMTA0NTE4LCAxMDQ1MjIsIDEwNDUyNiwgMTA0NTMwLCAxMDQ1MzQsIDEwNDUzOCwgMTA0NTQyLCAxMDQ1NDYsIDEwNDU1MCwgCi0gICAgMTA0NTU0LCAxMDQ1NTgsIDEwNDU2MiwgMTA0NTY2LCAxMDQ1NzAsIDEwNDU3NCwgMTA0NTc4LCAxMDQ1ODIsIDEwNDU4NiwgCi0gICAgMTA0NTkwLCAxMDQ1OTQsIDEwNDU5OCwgMTA0NjAyLCAxMDQ2MDYsIDEwNDYxMCwgMTA0NjE0LCAxMDQ2MTgsIDEwNDYyMiwgCi0gICAgMTA0NjI2LCAxMDQ2MzAsIDEwNDYzNCwgMTA0NjM4LCAxMDQ2NDIsIDEwNDY0NiwgMTA0NjUwLCAxMDQ2NTQsIDEwNDY1OCwgCi0gICAgMTA0NjYyLCAxMDQ2NjYsIDEwNDY3MCwgMTA0Njc0LCAxMDQ2NzgsIDEwNDY4MiwgMTA0Njg2LCAxMDQ2OTAsIDEwNDY5NCwgCi0gICAgMTA0Njk4LCAxMDQ3MDIsIDEwNDcwNiwgMTA0NzEwLCAxMDQ3MTQsIDEwNDcxOCwgMTA0NzIyLCAxMDQ3MjYsIDEwNDczMCwgCi0gICAgMTA0NzM0LCAxMDQ3MzgsIDEwNDc0MiwgMTA0NzQ2LCAxMDQ3NTAsIDEwNDc1NCwgMTA0NzU4LCAxMDQ3NjIsIDEwNDc2NiwgCi0gICAgMTA0NzcwLCAxMDQ3NzQsIDEwNDc3OCwgMTA0NzgyLCAxMDQ3ODYsIDEwNDc5MCwgMTA0Nzk0LCAxMDQ3OTgsIDEwNDgwMiwgCi0gICAgMTA0ODA2LCAxMDQ4MTAsIDEwNDgxNCwgMTA0ODE4LCAxMDQ4MjIsIDEwNDgyNiwgMTA0ODMwLCAxMDQ4MzQsIDEwNDgzOCwgCi0gICAgMTA0ODQyLCAxMDQ4NDYsIDEwNDg1MCwgMTA0ODU0LCAxMDQ4NTgsIDEwNDg2MiwgMTA0ODY2LCAxMDQ4NzAsIDEwNDg3NCwgCi0gICAgMTA0ODc4LCAxMDQ4ODIsIDEwNDg4NiwgMTA0ODkwLCAxMDQ4OTQsIDEwNDg5OCwgMTA0OTAyLCAxMDQ5MDYsIDEwNDkxMCwgCi0gICAgMTA0OTE0LCAxMDQ5MTgsIDEwNDkyMiwgMTA0OTI2LCAxMDQ5MzAsIDEwNDkzNCwgMTA0OTM4LCAxMDQ5NDIsIDEwNDk0NiwgCi0gICAgMTA0OTUwLCAxMDQ5NTQsIDEwNDk1OCwgMTA0OTYyLCAxMDQ5NjYsIDEwNDk3MCwgMTA0OTc0LCAxMDQ5NzgsIDEwNDk4MiwgCi0gICAgMTA0OTg2LCAxMDQ5OTAsIDEwNDk5NCwgMTA0OTk4LCAxMDUwMDIsIDEwNTAwNiwgMTA1MDEwLCAxMDUwMTQsIDEwNTAxOCwgCi0gICAgMTA1MDIyLCAxMDUwMjYsIDEwNTAzMCwgMTA1MDM0LCAxMDUwMzgsIDEwNTA0MiwgMTA1MDQ2LCAxMDUwNTAsIDEwNTA1NCwgCi0gICAgMTA1MDU4LCAxMDUwNjIsIDEwNTA2NiwgMTA1MDcwLCAxMDUwNzQsIDEwNTA3OCwgMTA1MDgyLCAxMDUwODYsIDEwNTA5MCwgCi0gICAgMTA1MDk0LCAxMDUwOTgsIDEwNTEwMiwgMTA1MTA2LCAxMDUxMTAsIDEwNTExNCwgMTA1MTE4LCAxMDUxMjIsIDEwNTEyNiwgCi0gICAgMTA1MTMwLCAxMDUxMzQsIDEwNTEzOCwgMTA1MTQyLCAxMDUxNDYsIDEwNTE1MCwgMTA1MTU0LCAxMDUxNTgsIDEwNTE2MiwgCi0gICAgMTA1MTY2LCAxMDUxNzAsIDEwNTE3NCwgMTA1MTc4LCAxMDUxODIsIDEwNTE4NiwgMTA1MTkwLCAxMDUxOTQsIDEwNTE5OCwgCi0gICAgMTA1MjAyLCAxMDUyMDYsIDEwNTIxMCwgMTA1MjE0LCAxMDUyMTgsIDEwNTIyMiwgMTA1MjI2LCAxMDUyMzAsIDEwNTIzNCwgCi0gICAgMTA1MjM4LCAxMDUyNDIsIDEwNTI0NiwgMTA1MjUwLCAxMDUyNTQsIDEwNTI1OCwgMTA1MjYyLCAxMDUyNjYsIDEwNTI3MCwgCi0gICAgMTA1Mjc0LCAxMDUyNzgsIDEwNTI4MiwgMTA1Mjg2LCAxMDUyOTAsIDEwNTI5NCwgMTA1Mjk4LCAxMDUzMDIsIDEwNTMwNiwgCi0gICAgMTA1MzEwLCAxMDUzMTQsIDEwNTMxOCwgMTA1MzIyLCAxMDUzMjYsIDEwNTMzMCwgMTA1MzM0LCAxMDUzMzgsIDEwNTM0MiwgCi0gICAgMTA1MzQ2LCAxMDUzNTAsIDEwNTM1NCwgMTA1MzU4LCAxMDUzNjIsIDEwNTM2NiwgMTA1MzcwLCAxMDUzNzQsIDEwNTM3OCwgCi0gICAgMTA1MzgyLCAxMDUzODYsIDEwNTM5MCwgMTA1Mzk0LCAxMDUzOTgsIDEwNTQwMiwgMTA1NDA2LCAxMDU0MTAsIDEwNTQxNCwgCi0gICAgMTA1NDE4LCAxMDU0MjIsIDEwNTQyNiwgMTA1NDMwLCAxMDU0MzQsIDEwNTQzOCwgMTA1NDQyLCAxMDU0NDYsIDEwNTQ1MCwgCi0gICAgMTA1NDU0LCAxMDU0NTgsIDEwNTQ2MiwgMTA1NDY2LCAxMDU0NzAsIDEwNTQ3NCwgMTA1NDc4LCAxMDU0ODIsIDEwNTQ4NiwgCi0gICAgMTA1NDkwLCAxMDU0OTQsIDEwNTQ5OCwgMTA1NTAyLCAxMDU1MDYsIDEwNTUxMCwgMTA1NTE0LCAxMDU1MTgsIDEwNTUyMiwgCi0gICAgMTA1NTI2LCAxMDU1MzAsIDEwNTUzNCwgMTA1NTM4LCAxMDU1NDIsIDEwNTU0NiwgMTA1NTUwLCAxMDU1NTQsIDEwNTU1OCwgCi0gICAgMTA1NTYyLCAxMDU1NjYsIDEwNTU3MCwgMTA1NTc0LCAxMDU1NzgsIDEwNTU4MiwgMTA1NTg2LCAxMDU1OTAsIDEwNTU5NCwgCi0gICAgMTA1NTk4LCAxMDU2MDIsIDEwNTYwNiwgMTA1NjEwLCAxMDU2MTQsIDEwNTYxOCwgMTA1NjIyLCAxMDU2MjYsIDEwNTYzMCwgCi0gICAgMTA1NjM0LCAxMDU2MzgsIDEwNTY0MiwgMTA1NjQ2LCAxMDU2NTAsIDEwNTY1NCwgMTA1NjU4LCAxMDU2NjIsIDEwNTY2NiwgCi0gICAgMTA1NjcwLCAxMDU2NzQsIDEwNTY3OCwgMTA1NjgyLCAxMDU2ODYsIDEwNTY5MCwgMTA1Njk0LCAxMDU2OTgsIDEwNTcwMiwgCi0gICAgMTA1NzA2LCAxMDU3MTAsIDEwNTcxNCwgMTA1NzE4LCAxMDU3MjIsIDEwNTcyNiwgMTA1NzMwLCAxMDU3MzQsIDEwNTczOCwgCi0gICAgMTA1NzQyLCAxMDU3NDYsIDEwNTc1MCwgMTA1NzU0LCAxMDU3NTgsIDEwNTc2MiwgMTA1NzY2LCAxMDU3NzAsIDEwNTc3NCwgCi0gICAgMTA1Nzc4LCAxMDU3ODIsIDEwNTc4NiwgMTA1NzkwLCAxMDU3OTQsIDEwNTc5OCwgMTA1ODAyLCAxMDU4MDYsIDEwNTgxMCwgCi0gICAgMTA1ODE0LCAxMDU4MTgsIDEwNTgyMiwgMTA1ODI2LCAxMDU4MzAsIDEwNTgzNCwgMTA1ODM4LCAxMDU4NDIsIDEwNTg0NiwgCi0gICAgMTA1ODUwLCAxMDU4NTQsIDEwNTg1OCwgMTA1ODYyLCAxMDU4NjYsIDEwNTg3MCwgMTA1ODc0LCAxMDU4NzgsIDEwNTg4MiwgCi0gICAgMTA1ODg2LCAxMDU4OTAsIDEwNTg5NCwgMTA1ODk4LCAxMDU5MDIsIDEwNTkwNiwgMTA1OTEwLCAxMDU5MTQsIDEwNTkxOCwgCi0gICAgMTA1OTIyLCAxMDU5MjYsIDEwNTkzMCwgMTA1OTM0LCAxMDU5MzgsIDEwNTk0MiwgMTA1OTQ2LCAxMDU5NTAsIDEwNTk1NCwgCi0gICAgMTA1OTU4LCAxMDU5NjIsIDEwNTk2NiwgMTA1OTcwLCAxMDU5NzQsIDEwNTk3OCwgMTA1OTgyLCAxMDU5ODYsIDEwNTk5MCwgCi0gICAgMTA1OTk0LCAxMDU5OTgsIDEwNjAwMiwgMTA2MDA2LCAxMDYwMTAsIDEwNjAxNCwgMTA2MDE4LCAxMDYwMjIsIDEwNjAyNiwgCi0gICAgMTA2MDMwLCAxMDYwMzQsIDEwNjAzOCwgMTA2MDQyLCAxMDYwNDYsIDEwNjA1MCwgMTA2MDU0LCAxMDYwNTgsIDEwNjA2MiwgCi0gICAgMTA2MDY2LCAxMDYwNzAsIDEwNjA3NCwgMTA2MDc4LCAxMDYwODIsIDEwNjA4NiwgMTA2MDkwLCAxMDYwOTQsIDEwNjA5OCwgCi0gICAgMTA2MTAyLCAxMDYxMDYsIDEwNjExMCwgMTA2MTE0LCAxMDYxMTgsIDEwNjEyMiwgMTA2MTI2LCAxMDYxMzAsIDEwNjEzNCwgCi0gICAgMTA2MTM4LCAxMDYxNDIsIDEwNjE0NiwgMTA2MTUwLCAxMDYxNTQsIDEwNjE1OCwgMTA2MTYyLCAxMDYxNjYsIDEwNjE3MCwgCi0gICAgMTA2MTc0LCAxMDYxNzgsIDEwNjE4MiwgMTA2MTg2LCAxMDYxOTAsIDEwNjE5NCwgMTA2MTk4LCAxMDYyMDIsIDEwNjIwNiwgCi0gICAgMTA2MjEwLCAxMDYyMTQsIDEwNjIxOCwgMTA2MjIyLCAxMDYyMjYsIDEwNjIzMCwgMTA2MjM0LCAxMDYyMzgsIDEwNjI0MiwgCi0gICAgMTA2MjQ2LCAxMDYyNTAsIDEwNjI1NCwgMTA2MjU4LCAxMDYyNjIsIDEwNjI2NiwgMTA2MjcwLCAxMDYyNzQsIDEwNjI3OCwgCi0gICAgMTA2MjgyLCAxMDYyODYsIDEwNjI5MCwgMTA2Mjk0LCAxMDYyOTgsIDEwNjMwMiwgMTA2MzA2LCAxMDYzMTAsIDEwNjMxNCwgCi0gICAgMTA2MzE4LCAxMDYzMjIsIDEwNjMyNiwgMTA2MzMwLCAxMDYzMzQsIDEwNjMzOCwgMTA2MzQyLCAxMDYzNDYsIDEwNjM1MCwgCi0gICAgMTA2MzU0LCAxMDYzNTgsIDEwNjM2MiwgMTA2MzY2LCAxMDYzNzAsIDEwNjM3NCwgMTA2Mzc4LCAxMDYzODIsIDEwNjM4NiwgCi0gICAgMTA2MzkwLCAxMDYzOTQsIDEwNjM5OCwgMTA2NDAyLCAxMDY0MDYsIDEwNjQxMCwgMTA2NDE0LCAxMDY0MTgsIDEwNjQyMiwgCi0gICAgMTA2NDI2LCAxMDY0MzAsIDEwNjQzNCwgMTA2NDM4LCAxMDY0NDIsIDEwNjQ0NiwgMTA2NDUwLCAxMDY0NTQsIDEwNjQ1OCwgCi0gICAgMTA2NDYyLCAxMDY0NjYsIDEwNjQ3MCwgMTA2NDc0LCAxMDY0NzgsIDEwNjQ4MiwgMTA2NDg2LCAxMDY0OTAsIDEwNjQ5NCwgCi0gICAgMTA2NDk4LCAxMDY1MDIsIDEwNjUwNiwgMTA2NTEwLCAxMDY1MTQsIDEwNjUxOCwgMTA2NTIyLCAxMDY1MjYsIDEwNjUzMCwgCi0gICAgMTA2NTM0LCAxMDY1MzgsIDEwNjU0MiwgMTA2NTQ2LCAxMDY1NTAsIDEwNjU1NCwgMTA2NTU4LCAxMDY1NjIsIDEwNjU2NiwgCi0gICAgMTA2NTcwLCAxMDY1NzQsIDEwNjU3OCwgMTA2NTgyLCAxMDY1ODYsIDEwNjU5MCwgMTA2NTk0LCAxMDY1OTgsIDEwNjYwMiwgCi0gICAgMTA2NjA2LCAxMDY2MTAsIDEwNjYxNCwgMTA2NjE4LCAxMDY2MjIsIDEwNjYyNiwgMTA2NjMwLCAxMDY2MzQsIDEwNjYzOCwgCi0gICAgMTA2NjQyLCAxMDY2NDYsIDEwNjY1MCwgMTA2NjU0LCAxMDY2NTgsIDEwNjY2MiwgMTA2NjY2LCAxMDY2NzAsIDEwNjY3NCwgCi0gICAgMTA2Njc4LCAxMDY2ODIsIDEwNjY4NiwgMTA2NjkwLCAxMDY2OTQsIDEwNjY5OCwgMTA2NzAyLCAxMDY3MDYsIDEwNjcxMCwgCi0gICAgMTA2NzE0LCAxMDY3MTgsIDEwNjcyMiwgMTA2NzI2LCAxMDY3MzAsIDEwNjczNCwgMTA2NzM4LCAxMDY3NDIsIDEwNjc0NiwgCi0gICAgMTA2NzUwLCAxMDY3NTQsIDEwNjc1OCwgMTA2NzYyLCAxMDY3NjYsIDEwNjc3MCwgMTA2Nzc0LCAxMDY3NzgsIDEwNjc4MiwgCi0gICAgMTA2Nzg2LCAxMDY3OTAsIDEwNjc5NCwgMTA2Nzk4LCAxMDY4MDIsIDEwNjgwNiwgMTA2ODEwLCAxMDY4MTQsIDEwNjgxOCwgCi0gICAgMTA2ODIyLCAxMDY4MjYsIDEwNjgzMCwgMTA2ODM0LCAxMDY4MzgsIDEwNjg0MiwgMTA2ODQ2LCAxMDY4NTAsIDEwNjg1NCwgCi0gICAgMTA2ODU4LCAxMDY4NjIsIDEwNjg2NiwgMTA2ODcwLCAxMDY4NzQsIDEwNjg3OCwgMTA2ODgyLCAxMDY4ODYsIDEwNjg5MCwgCi0gICAgMTA2ODk0LCAxMDY4OTgsIDEwNjkwMiwgMTA2OTA2LCAxMDY5MTAsIDEwNjkxNCwgMTA2OTE4LCAxMDY5MjIsIDEwNjkyNiwgCi0gICAgMTA2OTMwLCAxMDY5MzQsIDEwNjkzOCwgMTA2OTQyLCAxMDY5NDYsIDEwNjk1MCwgMTA2OTU0LCAxMDY5NTgsIDEwNjk2MiwgCi0gICAgMTA2OTY2LCAxMDY5NzAsIDEwNjk3NCwgMTA2OTc4LCAxMDY5ODIsIDEwNjk4NiwgMTA2OTkwLCAxMDY5OTQsIDEwNjk5OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3MDAyLCAxMDcwMDksIDEwNzAxNiwgMTA3MDI1LCAxMDcwMzQsIAotICAgIDEwNzA0MSwgMTA3MDQ2LCAxMDcwNTMsIDEwNzA2MCwgMTA3MDY5LCAxMDcwODAsIDEwNzA5MSwgMTA3MDk2LCAxMDcxMDMsIAotICAgIDEwNzEwOCwgMTA3MTEzLCAxMDcxMTgsIDEwNzEyMywgMTA3MTI4LCAxMDcxMzMsIDEwNzEzOCwgMTA3MTQzLCAxMDcxNDgsIAotICAgIDEwNzE1MywgMTA3MTU4LCAxMDcxNjUsIDEwNzE3MiwgMTA3MTc3LCAxMDcxODIsIDEwNzE4NywgMTA3MTkyLCAxMDcxOTksIAotICAgIDEwNzIwNiwgMTA3MjE0LCAxMDcyMTksIDEwNzIyNiwgMTA3MjMxLCAxMDcyMzYsIDEwNzI0MSwgMTA3MjQ2LCAxMDcyNTEsIAotICAgIDEwNzI1OCwgMTA3MjY1LCAxMDcyNzAsIDEwNzI3NSwgMTA3MjgwLCAxMDcyODUsIDEwNzI5MCwgMTA3Mjk1LCAxMDczMDAsIAotICAgIDEwNzMwNSwgMTA3MzEwLCAxMDczMTUsIDEwNzMyMCwgMTA3MzI1LCAxMDczMzAsIDEwNzMzNSwgMTA3MzQwLCAxMDczNDUsIAotICAgIDEwNzM1MCwgMTA3MzU1LCAxMDczNjAsIDEwNzM2NywgMTA3MzcyLCAxMDczNzcsIDEwNzM4NiwgMTA3MzkzLCAxMDczOTgsIAotICAgIDEwNzQwMywgMTA3NDA4LCAxMDc0MTMsIDEwNzQxOCwgMTA3NDIzLCAxMDc0MjgsIDEwNzQzMywgMTA3NDM4LCAxMDc0NDMsIAotICAgIDEwNzQ0OCwgMTA3NDUzLCAxMDc0NTgsIDEwNzQ2MywgMTA3NDY4LCAxMDc0NzMsIDEwNzQ3OCwgMTA3NDgzLCAxMDc0ODgsIAotICAgIDEwNzQ5MywgMTA3NDk4LCAxMDc1MDQsIDEwNzUxMiwgMTA3NTE4LCAxMDc1MjYsIDEwNzUzNCwgMTA3NTQyLCAxMDc1NDgsIAotICAgIDEwNzU1NCwgMTA3NTYwLCAxMDc1NjYsIDEwNzU3MiwgMTA3NTgwLCAxMDc1OTAsIDEwNzU5OCwgMTA3NjA2LCAxMDc2MTIsIAotICAgIDEwNzYxOCwgMTA3NjI2LCAxMDc2MzQsIDEwNzY0MCwgMTA3NjQ4LCAxMDc2NTYsIDEwNzY2NCwgMTA3NjcwLCAxMDc2NzYsIAotICAgIDEwNzY4MiwgMTA3Njg4LCAxMDc2OTQsIDEwNzcwMCwgMTA3NzA4LCAxMDc3MTYsIDEwNzcyMiwgMTA3NzI4LCAxMDc3MzQsIAotICAgIDEwNzc0MCwgMTA3NzQ2LCAxMDc3NTQsIDEwNzc2MCwgMTA3NzY2LCAxMDc3NzIsIDEwNzc3OCwgMTA3Nzg0LCAxMDc3OTAsIAotICAgIDEwNzc5OCwgMTA3ODA0LCAxMDc4MTAsIDEwNzgxNiwgMTA3ODIyLCAxMDc4MzAsIDEwNzgzOCwgMTA3ODQ0LCAxMDc4NTAsIAotICAgIDEwNzg1NiwgMTA3ODYxLCAxMDc4NjcsIDEwNzg3MywgMTA3ODgwLCAxMDc4ODUsIDEwNzg5MCwgMTA3ODk1LCAxMDc5MDAsIAotICAgIDEwNzkwNSwgMTA3OTEwLCAxMDc5MTUsIDEwNzkyMCwgMTA3OTI1LCAxMDc5MzQsIDEwNzk0MSwgMTA3OTQ2LCAxMDc5NTEsIAotICAgIDEwNzk1NiwgMTA3OTYzLCAxMDc5NjgsIDEwNzk3MywgMTA3OTc4LCAxMDc5ODUsIDEwNzk5MCwgMTA3OTk1LCAxMDgwMDAsIAotICAgIDEwODAwNSwgMTA4MDEwLCAxMDgwMTUsIDEwODAyMCwgMTA4MDI1LCAxMDgwMzAsIDEwODAzNSwgMTA4MDQwLCAxMDgwNDcsIAotICAgIDEwODA1MiwgMTA4MDU5LCAxMDgwNjQsIDEwODA2OSwgMTA4MDc2LCAxMDgwODEsIDEwODA4NiwgMTA4MDkxLCAxMDgwOTYsIAotICAgIDEwODEwMSwgMTA4MTA2LCAxMDgxMTEsIDEwODExNiwgMTA4MTIxLCAxMDgxMjYsIDEwODEzMSwgMTA4MTM2LCAxMDgxNDEsIAotICAgIDEwODE0NiwgMTA4MTUxLCAxMDgxNTYsIDEwODE2MSwgMTA4MTY2LCAxMDgxNzEsIDEwODE3OCwgMTA4MTgzLCAxMDgxODgsIAotICAgIDEwODE5MywgMTA4MTk4LCAxMDgyMDMsIDEwODIwOCwgMTA4MjEzLCAxMDgyMTgsIDEwODIyMywgMTA4MjI4LCAxMDgyMzMsIAotICAgIDEwODIzOCwgMTA4MjQzLCAxMDgyNTAsIDEwODI1NSwgMTA4MjYwLCAxMDgyNjcsIDEwODI3MiwgMTA4Mjc3LCAxMDgyODIsIAotICAgIDEwODI4NywgMTA4MjkyLCAxMDgyOTcsIDEwODMwMiwgMTA4MzA3LCAxMDgzMTIsIDEwODMxNywgMTA4MzI0LCAxMDgzMjksIAotICAgIDEwODMzNCwgMTA4MzM5LCAxMDgzNDQsIDEwODM0OSwgMTA4MzU2LCAxMDgzNjMsIDEwODM2OCwgMTA4MzczLCAxMDgzNzgsIAotICAgIDEwODM4MywgMTA4Mzg4LCAxMDgzOTMsIDEwODM5OCwgMTA4NDAzLCAxMDg0MDgsIDEwODQxMywgMTA4NDE4LCAxMDg0MjMsIAotICAgIDEwODQyOCwgMTA4NDMzLCAxMDg0MzgsIDEwODQ0MywgMTA4NDQ4LCAxMDg0NTMsIDEwODQ1OCwgMTA4NDYzLCAxMDg0NjgsIAotICAgIDEwODQ3MywgMTA4NDc4LCAxMDg0ODMsIDEwODQ4OCwgMTA4NDkzLCAxMDg0OTgsIDEwODUwMywgMTA4NTA4LCAxMDg1MTMsIAotICAgIDEwODUxOCwgMTA4NTIzLCAxMDg1MjgsIDEwODUzMywgMTA4NTM4LCAxMDg1NDMsIDEwODU1MCwgMTA4NTU1LCAxMDg1NjAsIAotICAgIDEwODU2NSwgMTA4NTcwLCAxMDg1NzUsIDEwODU4MCwgMTA4NTg1LCAxMDg1OTAsIDEwODU5NSwgMTA4NjAwLCAxMDg2MDUsIAotICAgIDEwODYxMCwgMTA4NjE1LCAxMDg2MjAsIDEwODYyNSwgMTA4NjMwLCAxMDg2MzUsIDEwODY0MCwgMTA4NjQ1LCAxMDg2NTAsIAotICAgIDEwODY1NSwgMTA4NjYwLCAxMDg2NjUsIDEwODY3MCwgMTA4Njc1LCAxMDg2ODAsIDEwODY4NSwgMTA4NjkwLCAxMDg2OTUsIAotICAgIDEwODcwMCwgMTA4NzA1LCAxMDg3MTAsIDEwODcxNSwgMTA4NzIwLCAxMDg3MjUsIDEwODczMCwgMTA4NzM1LCAxMDg3NDAsIAotICAgIDEwODc0NSwgMTA4NzUwLCAxMDg3NTUsIDEwODc2MCwgMTA4NzY1LCAxMDg3NzAsIDEwODc3NSwgMTA4NzgwLCAxMDg3ODUsIAotICAgIDEwODc5MCwgMTA4Nzk1LCAxMDg4MDAsIDEwODgwNSwgMTA4ODEwLCAxMDg4MTUsIDEwODgyMCwgMTA4ODI1LCAxMDg4MzAsIAotICAgIDEwODgzNSwgMTA4ODQwLCAxMDg4NDcsIDEwODg1MiwgMTA4ODU3LCAxMDg4NjIsIDEwODg2NywgMTA4ODcyLCAxMDg4NzcsIAotICAgIDEwODg4MSwgMTA4ODg2LCAxMDg4OTEsIDEwODg5NiwgMTA4OTAxLCAxMDg5MDYsIDEwODkxMSwgMTA4OTE2LCAxMDg5MjEsIAotICAgIDEwODkyNiwgMTA4OTMxLCAxMDg5MzYsIDEwODk0MSwgMTA4OTQ2LCAxMDg5NTEsIDEwODk1OCwgMTA4OTYzLCAxMDg5NjgsIAotICAgIDEwODk3NCwgMTA4OTc5LCAxMDg5ODQsIDEwODk4OSwgMTA4OTk0LCAxMDg5OTksIDEwOTAwNCwgMTA5MDA5LCAxMDkwMTQsIAotICAgIDEwOTAxOSwgMTA5MDI0LCAxMDkwMjksIDEwOTAzNCwgMTA5MDM5LCAxMDkwNDQsIDEwOTA0OSwgMTA5MDU0LCAxMDkwNTksIAotICAgIDEwOTA2NCwgMTA5MDY5LCAxMDkwNzQsIDEwOTA3OSwgMTA5MDg0LCAxMDkwODksIDEwOTA5NCwgMTA5MDk5LCAxMDkxMDQsIAotICAgIDEwOTEwOSwgMTA5MTE0LCAxMDkxMTksIDEwOTEyNCwgMTA5MTI5LCAxMDkxMzQsIDEwOTEzOSwgMTA5MTQ0LCAxMDkxNDksIAotICAgIDEwOTE1NCwgMTA5MTU5LCAxMDkxNjQsIDEwOTE2OSwgMTA5MTc0LCAxMDkxNzksIDEwOTE4NCwgMTA5MTg5LCAxMDkxOTYsIAotICAgIDEwOTIwMSwgMTA5MjA2LCAxMDkyMTMsIDEwOTIyMCwgMTA5MjI1LCAxMDkyMzAsIDEwOTIzNSwgMTA5MjQwLCAxMDkyNDUsIAotICAgIDEwOTI1MCwgMTA5MjU1LCAxMDkyNjAsIDEwOTI2NSwgMTA5MjcwLCAxMDkyNzUsIDEwOTI4MCwgMTA5Mjg1LCAxMDkyOTAsIAotICAgIDEwOTI5NSwgMTA5MzAwLCAxMDkzMDUsIDEwOTMxMCwgMTA5MzE1LCAxMDkzMjAsIDEwOTMyNSwgMTA5MzMwLCAxMDkzMzUsIAotICAgIDEwOTM0MCwgMTA5MzQ1LCAxMDkzNTIsIDEwOTM1NywgMTA5MzYyLCAxMDkzNjcsIDEwOTM3MiwgMTA5Mzc3LCAxMDkzODIsIAotICAgIDEwOTM4NywgMTA5MzkyLCAxMDkzOTcsIDEwOTQwMiwgMTA5NDA3LCAxMDk0MTIsIDEwOTQxNywgMTA5NDIyLCAxMDk0MjcsIAotICAgIDEwOTQzMiwgMTA5NDM3LCAxMDk0NDIsIDEwOTQ0OSwgMTA5NDU0LCAxMDk0NTksIDEwOTQ2NCwgMTA5NDY5LCAxMDk0NzQsIAotICAgIDEwOTQ3OSwgMTA5NDg0LCAxMDk0OTAsIDEwOTQ5NSwgMTA5NTAwLCAxMDk1MDUsIDEwOTUxMCwgMTA5NTE1LCAxMDk1MjAsIAotICAgIDEwOTUyNSwgMTA5NTMwLCAxMDk1MzcsIDEwOTU0NCwgMTA5NTQ5LCAxMDk1NTQsIDEwOTU1OCwgMTA5NTYzLCAxMDk1NjcsIAotICAgIDEwOTU3MSwgMTA5NTc2LCAxMDk1ODMsIDEwOTU4OCwgMTA5NTkzLCAxMDk2MDIsIDEwOTYwNywgMTA5NjEyLCAxMDk2MTcsIAotICAgIDEwOTYyMiwgMTA5NjI5LCAxMDk2MzYsIDEwOTY0MSwgMTA5NjQ2LCAxMDk2NTEsIDEwOTY1NiwgMTA5NjYzLCAxMDk2NjgsIAotICAgIDEwOTY3MywgMTA5Njc4LCAxMDk2ODMsIDEwOTY4OCwgMTA5NjkzLCAxMDk2OTgsIDEwOTcwMywgMTA5NzA4LCAxMDk3MTMsIAotICAgIDEwOTcxOCwgMTA5NzIzLCAxMDk3MzAsIDEwOTczNCwgMTA5NzM5LCAxMDk3NDQsIDEwOTc0OSwgMTA5NzU0LCAxMDk3NTgsIAotICAgIDEwOTc2MywgMTA5NzY4LCAxMDk3NzMsIDEwOTc3OCwgMTA5NzgzLCAxMDk3ODgsIDEwOTc5MywgMTA5Nzk4LCAxMDk4MDMsIAotICAgIDEwOTgwOSwgMTA5ODE1LCAxMDk4MjEsIDEwOTgyNywgMTA5ODMzLCAxMDk4MzksIDEwOTg0NSwgMTA5ODUxLCAxMDk4NTcsIAotICAgIDEwOTg2MywgMTA5ODY5LCAxMDk4NzUsIDEwOTg4MCwgMTA5ODg2LCAxMDk4OTIsIDEwOTg5OCwgMTA5OTA0LCAxMDk5MTAsIAotICAgIDEwOTkxNiwgMTA5OTIyLCAxMDk5MjgsIDEwOTkzNCwgMTA5OTQwLCAxMDk5NDYsIDEwOTk1MSwgMTA5OTU3LCAxMDk5NjMsIAotICAgIDEwOTk2OSwgMTA5OTc1LCAxMDk5ODEsIDEwOTk4NywgMTA5OTkzLCAxMDk5OTksIDExMDAwNSwgMTEwMDExLCAxMTAwMTcsIAotICAgIDExMDAyMywgMTEwMDI5LCAxMTAwMzUsIDExMDA0MSwgMTEwMDQ3LCAxMTAwNTMsIDExMDA1OSwgMTEwMDY1LCAxMTAwNzEsIAotICAgIDExMDA3NiwgMTEwMDgyLCAxMTAwODgsIDExMDA5NCwgMTEwMTAwLCAxMTAxMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDExMiwgMTEwMTE1LCAxMTAxMTksIAotICAgIDExMDEyMywgMTEwMTI3LCAxMTAxMzAsIDExMDEzNCwgMTEwMTM5LCAxMTAxNDMsIDExMDE0NywgMTEwMTUxLCAxMTAxNTUsIAotICAgIDExMDE1OSwgMTEwMTY0LCAxMTAxNjksIDExMDE3MywgMTEwMTc3LCAxMTAxODAsIDExMDE4NCwgMTEwMTg5LCAxMTAxOTQsIAotICAgIDExMDE5OCwgMTEwMjAyLCAxMTAyMDYsIDExMDIxMCwgMTEwMjE0LCAxMTAyMTgsIDExMDIyMiwgMTEwMjI2LCAxMTAyMzAsIAotICAgIDExMDIzNCwgMTEwMjM3LCAxMTAyNDEsIDExMDI0NSwgMTEwMjQ5LCAxMTAyNTMsIDExMDI1NywgMTEwMjYxLCAxMTAyNjcsIAotICAgIDExMDI3MCwgMTEwMjc0LCAxMTAyNzgsIDExMDI4MiwgMTEwMjg2LCAxMTAyOTAsIDExMDI5NCwgMTEwMjk4LCAxMTAzMDIsIAotICAgIDExMDMwNiwgMTEwMzExLCAxMTAzMTYsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM4LCAxMTAzNDIsIAotICAgIDExMDM0NiwgMTEwMzUxLCAxMTAzNTQsIDExMDM1OCwgMTEwMzYyLCAxMTAzNjYsIDExMDM3MCwgMTEwMzc2LCAxMTAzODAsIAotICAgIDExMDM4NCwgMTEwMzg4LCAxMTAzOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDM5NiwgMTEwNDAwLCAKLSAgICAxMTA0MDQsIDExMDQxMCwgMTEwNDE2LCAxMTA0MjAsIDExMDQyNSwgMTEwNDMwLCAxMTA0MzUsIDExMDQ0MCwgMTEwNDQ0LCAKLSAgICAxMTA0NDksIDExMDQ1NCwgMTEwNDU5LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDczLCAxMTA0NzgsIDExMDQ4MiwgMTEwNDg3LCAKLSAgICAxMTA0OTIsIDExMDQ5NywgMTEwNTAyLCAxMTA1MDcsIDExMDUxMiwgMTEwNTE3LCAxMTA1MjIsIDExMDUyNiwgMTEwNTMxLCAKLSAgICAxMTA1MzYsIDExMDU0MSwgMTEwNTQ2LCAxMTA1NTEsIDExMDU1NiwgMTEwNTYxLCAxMTA1NjYsIDExMDU3MSwgMTEwNTc2LCAKLSAgICAxMTA1ODEsIDExMDU4OCwgMTEwNTkzLCAxMTA2MDAsIDExMDYwNSwgMTEwNjEwLCAxMTA2MTUsIDExMDYyMCwgMTEwNjI1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2MzAsIDExMDYzNCwgMTEwNjQwLCAKLSAgICAxMTA2NDMsIDExMDY0NiwgMTEwNjUwLCAxMTA2NTQsIDExMDY1OCwgMTEwNjYyLCAxMTA2NjYsIDExMDY3MCwgMTEwNjc0LCAKLSAgICAxMTA2ODAsIDExMDY4NiwgMTEwNjkyLCAxMTA2OTgsIDExMDcwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNzEwLCAxMTA3MTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMDcyMSwgMTEwNzI2LCAxMTA3MzEsIDExMDczNiwgMTEwNzQzLCAxMTA3NTAsIDExMDc1NywgMTEwNzY0LCAxMTA3NjksIAotICAgIDExMDc3NCwgMTEwNzc5LCAxMTA3ODQsIDExMDc5MSwgMTEwNzk2LCAxMTA4MDMsIDExMDgxMCwgMTEwODE1LCAxMTA4MjAsIAotICAgIDExMDgyNSwgMTEwODMyLCAxMTA4MzcsIDExMDg0MiwgMTEwODQ5LCAxMTA4NTYsIDExMDg2MSwgMTEwODY2LCAxMTA4NzEsIAotICAgIDExMDg3OCwgMTEwODg1LCAxMTA4OTIsIDExMDg5NywgMTEwOTAyLCAxMTA5MDksIDExMDkxNiwgMTEwOTIzLCAxMTA5MzAsIAotICAgIDExMDkzNSwgMTEwOTQwLCAxMTA5NDUsIDExMDk1MiwgMTEwOTU3LCAxMTA5NjIsIDExMDk2NywgMTEwOTc0LCAxMTA5ODMsIAotICAgIDExMDk5MCwgMTEwOTk1LCAxMTEwMDAsIDExMTAwNSwgMTExMDEwLCAxMTEwMTUsIDExMTAyMCwgMTExMDI5LCAxMTEwMzYsIAotICAgIDExMTA0MSwgMTExMDQ4LCAxMTEwNTUsIDExMTA2MCwgMTExMDY1LCAxMTEwNzAsIDExMTA3NywgMTExMDgyLCAxMTEwODksIAotICAgIDExMTA5NiwgMTExMTAxLCAxMTExMDYsIDExMTExMSwgMTExMTE4LCAxMTExMjUsIDExMTEzMCwgMTExMTM1LCAxMTExNDIsIAotICAgIDExMTE0OSwgMTExMTU2LCAxMTExNjEsIDExMTE2NiwgMTExMTcxLCAxMTExNzYsIDExMTE4MywgMTExMTkyLCAxMTEyMDEsIAotICAgIDExMTIwNiwgMTExMjEzLCAxMTEyMjIsIDExMTIyNywgMTExMjMyLCAxMTEyMzcsIDExMTI0MiwgMTExMjQ5LCAxMTEyNTYsIAotICAgIDExMTI2MywgMTExMjcwLCAxMTEyNzUsIDExMTI4MCwgMTExMjg1LCAxMTEyOTIsIDExMTI5OSwgMTExMzA2LCAxMTEzMTEsIAotICAgIDExMTMxNiwgMTExMzIzLCAxMTEzMjgsIDExMTMzNSwgMTExMzQwLCAxMTEzNDcsIDExMTM1MiwgMTExMzU5LCAxMTEzNjYsIAotICAgIDExMTM3MSwgMTExMzc2LCAxMTEzODEsIDExMTM4NiwgMTExMzkxLCAxMTEzOTYsIDExMTQwMSwgMTExNDA2LCAxMTE0MTEsIAotICAgIDExMTQxOCwgMTExNDI1LCAxMTE0MzIsIDExMTQzOSwgMTExNDQ2LCAxMTE0NTUsIDExMTQ2MCwgMTExNDY1LCAxMTE0NzIsIAotICAgIDExMTQ3OSwgMTExNDg0LCAxMTE0OTEsIDExMTQ5OCwgMTExNTA1LCAxMTE1MTIsIDExMTUxOSwgMTExNTI2LCAxMTE1MzEsIAotICAgIDExMTUzNiwgMTExNTQxLCAxMTE1NDYsIDExMTU1MSwgMTExNTYwLCAxMTE1NjksIDExMTU3OCwgMTExNTg3LCAxMTE1OTYsIAotICAgIDExMTYwNSwgMTExNjE0LCAxMTE2MjMsIDExMTYyOCwgMTExNjM5LCAxMTE2NTAsIDExMTY1OSwgMTExNjY0LCAxMTE2NjksIAotICAgIDExMTY3NCwgMTExNjc5LCAxMTE2ODgsIDExMTY5NSwgMTExNzAyLCAxMTE3MDksIDExMTcxNiwgMTExNzIzLCAxMTE3MzAsIAotICAgIDExMTczOSwgMTExNzQ4LCAxMTE3NTksIDExMTc2OCwgMTExNzc5LCAxMTE3ODgsIDExMTc5NSwgMTExODA0LCAxMTE4MTUsIAotICAgIDExMTgyNCwgMTExODMzLCAxMTE4NDIsIDExMTg1MSwgMTExODU4LCAxMTE4NjUsIDExMTg3MiwgMTExODgxLCAxMTE4OTAsIAotICAgIDExMTkwMSwgMTExOTEwLCAxMTE5MTksIDExMTkzMCwgMTExOTM1LCAxMTE5NDAsIDExMTk1MSwgMTExOTU5LCAxMTE5NjgsIAotICAgIDExMTk3NywgMTExOTg2LCAxMTE5OTcsIDExMjAwNiwgMTEyMDE1LCAxMTIwMjYsIDExMjAzNywgMTEyMDQ4LCAxMTIwNTksIAotICAgIDExMjA3MCwgMTEyMDgxLCAxMTIwODgsIDExMjA5NSwgMTEyMTAyLCAxMTIxMDksIDExMjEyMCwgMTEyMTI5LCAxMTIxMzYsIAotICAgIDExMjE0MywgMTEyMTUwLCAxMTIxNjEsIDExMjE3MiwgMTEyMTgzLCAxMTIxOTQsIDExMjIwNSwgMTEyMjE2LCAxMTIyMjcsIAotICAgIDExMjIzOCwgMTEyMjQ1LCAxMTIyNTIsIDExMjI2MSwgMTEyMjcwLCAxMTIyNzcsIDExMjI4NCwgMTEyMjkxLCAxMTIzMDAsIAotICAgIDExMjMwOSwgMTEyMzE4LCAxMTIzMjUsIDExMjMzNCwgMTEyMzQzLCAxMTIzNTIsIDExMjM1OSwgMTEyMzY2LCAxMTIzNzEsIAotICAgIDExMjM3NywgMTEyMzg0LCAxMTIzOTEsIDExMjM5OCwgMTEyNDA1LCAxMTI0MTIsIDExMjQxOSwgMTEyNDI4LCAxMTI0MzcsIAotICAgIDExMjQ0NiwgMTEyNDU1LCAxMTI0NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ3MSwgMTEyNDc3LCAKLSAgICAxMTI0ODIsIDExMjQ4NywgMTEyNDk0LCAxMTI1MDAsIDExMjUwNiwgMTEyNTEyLCAxMTI1MTgsIDExMjUyNCwgMTEyNTMwLCAKLSAgICAxMTI1MzYsIDExMjU0MCwgMTEyNTQ0LCAxMTI1NTAsIDExMjU1NiwgMTEyNTYyLCAxMTI1NjYsIDExMjU3MSwgMTEyNTc2LCAKLSAgICAxMTI1ODAsIDExMjU4NCwgMTEyNTg3LCAxMTI1OTMsIDExMjU5OSwgMTEyNjA1LCAxMTI2MTEsIDExMjYxNywgMTEyNjIzLCAKLSAgICAxMTI2MjksIDExMjYzNSwgMTEyNjQxLCAxMTI2NTEsIDExMjY2MSwgMTEyNjY3LCAxMTI2NzMsIDExMjY4MywgMTEyNjkzLCAKLSAgICAxMTI2OTksIDAsIDAsIDExMjcwNSwgMTEyNzEzLCAxMTI3MTgsIDExMjcyMywgMTEyNzI5LCAxMTI3MzUsIDExMjc0MSwgCi0gICAgMTEyNzQ3LCAxMTI3NTMsIDExMjc1OSwgMTEyNzY2LCAxMTI3NzMsIDExMjc3OSwgMTEyNzg1LCAxMTI3OTEsIDExMjc5NywgCi0gICAgMTEyODAzLCAxMTI4MDksIDExMjgxNSwgMTEyODIxLCAxMTI4MjYsIDExMjgzMiwgMTEyODM4LCAxMTI4NDQsIDExMjg1MCwgCi0gICAgMTEyODU2LCAxMTI4NjUsIDExMjg3MSwgMTEyODc2LCAxMTI4ODQsIDExMjg5MSwgMTEyODk4LCAxMTI5MDcsIDExMjkxNiwgCi0gICAgMTEyOTI1LCAxMTI5MzQsIDExMjk0MywgMTEyOTUyLCAxMTI5NjEsIDExMjk3MCwgMTEyOTgwLCAxMTI5OTAsIDExMjk5OCwgCi0gICAgMTEzMDA2LCAxMTMwMTUsIDExMzAyNCwgMTEzMDMwLCAxMTMwMzYsIDExMzA0MiwgMTEzMDQ4LCAxMTMwNTYsIDExMzA2NCwgCi0gICAgMTEzMDY4LCAxMTMwNzQsIDExMzA3OSwgMTEzMDg1LCAxMTMwOTEsIDExMzA5NywgMTEzMTAzLCAxMTMxMDksIDExMzExOCwgCi0gICAgMTEzMTIzLCAxMTMxMzAsIDExMzEzNSwgMTEzMTQwLCAxMTMxNDUsIDExMzE1MSwgMTEzMTU3LCAxMTMxNjMsIDExMzE3MCwgCi0gICAgMTEzMTc1LCAxMTMxODAsIDExMzE4NSwgMTEzMTkwLCAxMTMxOTUsIDExMzIwMSwgMTEzMjA3LCAxMTMyMTMsIDExMzIxOSwgCi0gICAgMTEzMjI1LCAxMTMyMzEsIDExMzIzNywgMTEzMjQzLCAxMTMyNDgsIDExMzI1MywgMTEzMjU4LCAxMTMyNjMsIDExMzI2OCwgCi0gICAgMTEzMjczLCAxMTMyNzgsIDExMzI4MywgMTEzMjg5LCAxMTMyOTUsIDExMzMwMCwgMTEzMzA1LCAxMTMzMTAsIDExMzMxNSwgCi0gICAgMTEzMzIwLCAxMTMzMjYsIDExMzMzMywgMTEzMzM3LCAxMTMzNDEsIDExMzM0NSwgMTEzMzQ5LCAxMTMzNTMsIDExMzM1NywgCi0gICAgMTEzMzYxLCAxMTMzNjUsIDExMzM3MywgMTEzMzgzLCAxMTMzODcsIDExMzM5MSwgMTEzMzk3LCAxMTM0MDMsIDExMzQwOSwgCi0gICAgMTEzNDE1LCAxMTM0MjEsIDExMzQyNywgMTEzNDMzLCAxMTM0MzksIDExMzQ0NSwgMTEzNDUxLCAxMTM0NTcsIDExMzQ2MywgCi0gICAgMTEzNDY5LCAxMTM0NzUsIDExMzQ3OSwgMTEzNDgzLCAxMTM0OTAsIDExMzQ5NiwgMTEzNTAyLCAxMTM1MDgsIDExMzUxMywgCi0gICAgMTEzNTIwLCAxMTM1MjUsIDExMzUzMSwgMTEzNTM3LCAxMTM1NDMsIDExMzU0OSwgMTEzNTU0LCAxMTM1NTgsIDExMzU2NCwgCi0gICAgMTEzNTY4LCAxMTM1NzIsIDExMzU3NiwgMTEzNTgyLCAxMTM1ODgsIDExMzU5MiwgMTEzNTk4LCAxMTM2MDQsIDExMzYxMCwgCi0gICAgMTEzNjE2LCAxMTM2MjIsIDExMzYzMCwgMTEzNjM4LCAxMTM2NDQsIDExMzY1MCwgMTEzNjU2LCAxMTM2NjIsIDExMzY3NCwgCi0gICAgMTEzNjg2LCAxMTM3MDAsIDExMzcxMiwgMTEzNzI0LCAxMTM3MzgsIDExMzc1MiwgMTEzNzY2LCAxMTM3NzAsIDExMzc3OCwgCi0gICAgMTEzNzg2LCAxMTM3OTEsIDExMzc5NSwgMTEzNzk5LCAxMTM4MDMsIDExMzgwNywgMTEzODExLCAxMTM4MTUsIDExMzgxOSwgCi0gICAgMTEzODI1LCAxMTM4MzEsIDExMzgzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODQzLCAxMTM4NDksIAotICAgIDExMzg1NSwgMTEzODYxLCAxMTM4NjcsIDExMzg3MywgMTEzODc5LCAxMTM4ODUsIDExMzg5MSwgMTEzODk3LCAxMTM5MDMsIAotICAgIDExMzkwOSwgMTEzOTE1LCAxMTM5MjEsIDExMzkyNywgMTEzOTMzLCAxMTM5MzksIDExMzk0NSwgMTEzOTUxLCAxMTM5NTcsIAotICAgIDExMzk2MywgMTEzOTY5LCAxMTM5NzUsIDExMzk4MSwgMTEzOTg3LCAxMTM5OTMsIDExMzk5OSwgMTE0MDA1LCAxMTQwMTEsIAotICAgIDExNDAxNywgMTE0MDIzLCAxMTQwMjksIDExNDAzNSwgMTE0MDQxLCAxMTQwNDcsIDExNDA1MywgMTE0MDU5LCAxMTQwNjUsIAotICAgIDExNDA3MSwgMTE0MDc3LCAxMTQwODMsIDExNDA4OSwgMTE0MDk1LCAxMTQxMDEsIDExNDEwNywgMTE0MTEzLCAxMTQxMTksIAotICAgIDExNDEyNSwgMTE0MTMxLCAxMTQxMzcsIDExNDE0MywgMTE0MTQ5LCAxMTQxNTUsIDExNDE2MSwgMTE0MTY3LCAxMTQxNzMsIAotICAgIDExNDE3OSwgMTE0MTg1LCAxMTQxOTEsIDExNDE5NywgMTE0MjAzLCAxMTQyMDksIDExNDIxNSwgMTE0MjIxLCAxMTQyMjcsIAotICAgIDExNDIzMywgMTE0MjM5LCAxMTQyNDQsIDExNDI0OSwgMTE0MjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc5MiwgOTE3OTgsIDkxODA0LCA5MTgxMCwgOTE4MTYsIDkxODIyLCA5MTgyOSwgCisgICAgOTE4MzYsIDkxODQzLCA5MTg0OSwgOTE4NTUsIDkxODYxLCA5MTg2OCwgOTE4NzUsIDkxODgyLCA5MTg4OCwgOTE4OTUsIAorICAgIDkxOTAyLCA5MTkwOSwgOTE5MTYsIDkxOTIyLCA5MTkyOSwgOTE5MzYsIDkxOTQyLCA5MTk0OSwgOTE5NTYsIDkxOTYzLCAKKyAgICA5MTk3MCwgOTE5NzcsIDkxOTgzLCA5MTk5MCwgOTE5OTcsIDkyMDA0LCA5MjAxMCwgOTIwMTYsIDkyMDIyLCA5MjAyOCwgCisgICAgOTIwMzQsIDkyMDQxLCA5MjA0OCwgOTIwNTQsIDkyMDYwLCA5MjA2NiwgOTIwNzMsIDkyMDc5LCA5MjA4NiwgOTIwOTMsIAorICAgIDkyMTAwLCA5MjEwNiwgOTIxMTQsIDkyMTIxLCA5MjEyNywgOTIxMzQsIDkyMTQxLCA5MjE0OCwgOTIxNTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDkyMTYxLCA5MjE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE0MjU4LCAxMTQyNjMsIDExNDI3MCwgMTE0Mjc3LCAxMTQyODQsIDExNDI5MSwgMTE0Mjk2LCAxMTQzMDAsIDExNDMwNiwgCi0gICAgMTE0MzEwLCAxMTQzMTQsIDExNDMyMCwgMTE0MzI0LCAxMTQzMjgsIDExNDMzMiwgMTE0MzM4LCAxMTQzNDUsIDExNDM0OSwgCi0gICAgMTE0MzUzLCAxMTQzNTcsIDExNDM2MSwgMTE0MzY1LCAxMTQzNjksIDExNDM3NSwgMTE0Mzc5LCAxMTQzODMsIDExNDM4NywgCi0gICAgMTE0MzkxLCAxMTQzOTUsIDExNDM5OSwgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgCi0gICAgMTE0NDI4LCAxMTQ0MzIsIDExNDQzNiwgMTE0NDQwLCAxMTQ0NDQsIDExNDQ0OCwgMTE0NDUyLCAxMTQ0NTYsIDExNDQ2MCwgCi0gICAgMTE0NDY0LCAxMTQ0NzEsIDExNDQ3NSwgMTE0NDgzLCAxMTQ0ODcsIDExNDQ5MSwgMTE0NDk1LCAxMTQ0OTksIDExNDUwMywgCi0gICAgMTE0NTA3LCAxMTQ1MTEsIDExNDUxOCwgMTE0NTIyLCAxMTQ1MjYsIDExNDUzMCwgMTE0NTM0LCAxMTQ1MzgsIDExNDU0NCwgCi0gICAgMTE0NTQ4LCAxMTQ1NTQsIDExNDU1OCwgMTE0NTYyLCAxMTQ1NjYsIDExNDU3MCwgMTE0NTc0LCAxMTQ1NzgsIDExNDU4MiwgCi0gICAgMTE0NTg2LCAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgCi0gICAgMTE0NjIyLCAxMTQ2MjYsIDExNDYzMCwgMTE0NjM4LCAxMTQ2NDIsIDExNDY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTE0NjUwLCAxMTQ2NTgsIDExNDY2NiwgMTE0Njc0LCAxMTQ2ODIsIDExNDY5MCwgMTE0Njk4LCAxMTQ3MDYsIAotICAgIDExNDcxNCwgMTE0NzIyLCAxMTQ3MzAsIDExNDczOCwgMTE0NzQ2LCAxMTQ3NTQsIDExNDc2MiwgMTE0NzcwLCAxMTQ3NzgsIAotICAgIDExNDc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Nzk0LCAxMTQ3OTgsIDExNDgwMywgCi0gICAgMTE0ODA4LCAxMTQ4MTMsIDExNDgxNywgMTE0ODIyLCAxMTQ4MjcsIDExNDgzMiwgMTE0ODM2LCAxMTQ4NDEsIDExNDg0NiwgCi0gICAgMTE0ODUwLCAxMTQ4NTQsIDExNDg1OSwgMTE0ODYzLCAxMTQ4NjgsIDExNDg3MywgMTE0ODc3LCAxMTQ4ODIsIDExNDg4NywgCi0gICAgMTE0ODkxLCAxMTQ4OTYsIDExNDkwMSwgMTE0OTA2LCAxMTQ5MTEsIDExNDkxNiwgMTE0OTIwLCAxMTQ5MjUsIDExNDkzMCwgCi0gICAgMTE0OTM1LCAxMTQ5MzksIDExNDk0NCwgMTE0OTQ5LCAxMTQ5NTQsIDExNDk1OCwgMTE0OTYzLCAxMTQ5NjgsIDExNDk3MiwgCi0gICAgMTE0OTc2LCAxMTQ5ODEsIDExNDk4NSwgMTE0OTkwLCAxMTQ5OTUsIDExNDk5OSwgMTE1MDA0LCAxMTUwMDksIDExNTAxMywgCi0gICAgMTE1MDE4LCAxMTUwMjMsIDExNTAyOCwgMTE1MDMzLCAxMTUwMzgsIDExNTA0MiwgMTE1MDQ3LCAxMTUwNTIsIDExNTA1NywgCi0gICAgMTE1MDYxLCAxMTUwNjYsIDExNTA3MSwgMTE1MDc2LCAxMTUwODAsIDExNTA4NSwgMTE1MDkwLCAxMTUwOTQsIDExNTA5OCwgCi0gICAgMTE1MTAzLCAxMTUxMDcsIDExNTExMiwgMTE1MTE3LCAxMTUxMjEsIDExNTEyNiwgMTE1MTMxLCAxMTUxMzUsIDExNTE0MCwgCi0gICAgMTE1MTQ1LCAxMTUxNTAsIDExNTE1NSwgMTE1MTYwLCAxMTUxNjQsIDExNTE2OSwgMTE1MTc0LCAxMTUxNzksIDExNTE4MywgCi0gICAgMTE1MTg4LCAwLCAxMTUxOTMsIDExNTE5NywgMTE1MjAyLCAxMTUyMDcsIDExNTIxMSwgMTE1MjE1LCAxMTUyMjAsIAotICAgIDExNTIyNCwgMTE1MjI5LCAxMTUyMzQsIDExNTIzOCwgMTE1MjQzLCAxMTUyNDgsIDExNTI1MiwgMTE1MjU3LCAxMTUyNjIsIAotICAgIDExNTI2NywgMTE1MjcyLCAxMTUyNzcsIDExNTI4MiwgMTE1Mjg4LCAxMTUyOTQsIDExNTMwMCwgMTE1MzA1LCAxMTUzMTEsIAotICAgIDExNTMxNywgMTE1MzIzLCAxMTUzMjgsIDExNTMzNCwgMTE1MzQwLCAxMTUzNDUsIDExNTM1MCwgMTE1MzU2LCAxMTUzNjEsIAotICAgIDExNTM2NywgMTE1MzczLCAxMTUzNzgsIDExNTM4NCwgMTE1MzkwLCAxMTUzOTUsIDExNTQwMSwgMTE1NDA3LCAxMTU0MTMsIAotICAgIDExNTQxOSwgMTE1NDI1LCAxMTU0MzAsIDExNTQzNiwgMTE1NDQyLCAxMTU0NDgsIDExNTQ1MywgMTE1NDU5LCAxMTU0NjUsIAotICAgIDExNTQ3MSwgMTE1NDc2LCAxMTU0ODIsIDExNTQ4OCwgMTE1NDkzLCAxMTU0OTgsIDExNTUwNCwgMTE1NTA5LCAxMTU1MTUsIAotICAgIDExNTUyMSwgMTE1NTI2LCAxMTU1MzIsIDExNTUzOCwgMTE1NTQzLCAxMTU1NDksIDExNTU1NSwgMTE1NTYxLCAxMTU1NjcsIAotICAgIDExNTU3MywgMCwgMTE1NTc3LCAxMTU1ODIsIDAsIDAsIDExNTU4NywgMCwgMCwgMTE1NTkyLCAxMTU1OTcsIDAsIDAsIAotICAgIDExNTYwMiwgMTE1NjA3LCAxMTU2MTEsIDExNTYxNiwgMCwgMTE1NjIxLCAxMTU2MjYsIDExNTYzMSwgMTE1NjM1LCAKLSAgICAxMTU2NDAsIDExNTY0NSwgMTE1NjUwLCAxMTU2NTUsIDExNTY2MCwgMTE1NjY0LCAxMTU2NjksIDExNTY3NCwgMCwgCi0gICAgMTE1Njc5LCAwLCAxMTU2ODQsIDExNTY4OSwgMTE1NjkzLCAxMTU2OTgsIDExNTcwMywgMTE1NzA3LCAxMTU3MTEsIDAsIAotICAgIDExNTcxNiwgMTE1NzIxLCAxMTU3MjYsIDExNTczMCwgMTE1NzM1LCAxMTU3NDAsIDExNTc0NCwgMTE1NzQ5LCAxMTU3NTQsIAotICAgIDExNTc1OSwgMTE1NzY0LCAxMTU3NjksIDExNTc3NCwgMTE1NzgwLCAxMTU3ODYsIDExNTc5MiwgMTE1Nzk3LCAxMTU4MDMsIAotICAgIDExNTgwOSwgMTE1ODE1LCAxMTU4MjAsIDExNTgyNiwgMTE1ODMyLCAxMTU4MzcsIDExNTg0MiwgMTE1ODQ4LCAxMTU4NTMsIAotICAgIDExNTg1OSwgMTE1ODY1LCAxMTU4NzAsIDExNTg3NiwgMTE1ODgyLCAxMTU4ODcsIDExNTg5MywgMTE1ODk5LCAxMTU5MDUsIAotICAgIDExNTkxMSwgMTE1OTE3LCAxMTU5MjIsIDExNTkyOCwgMTE1OTM0LCAxMTU5NDAsIDExNTk0NSwgMTE1OTUxLCAxMTU5NTcsIAotICAgIDExNTk2MywgMTE1OTY4LCAxMTU5NzQsIDExNTk4MCwgMTE1OTg1LCAxMTU5OTAsIDExNTk5NiwgMTE2MDAxLCAxMTYwMDcsIAotICAgIDExNjAxMywgMTE2MDE4LCAxMTYwMjQsIDExNjAzMCwgMTE2MDM1LCAxMTYwNDEsIDExNjA0NywgMTE2MDUzLCAxMTYwNTksIAotICAgIDExNjA2NSwgMTE2MDY5LCAwLCAxMTYwNzQsIDExNjA3OSwgMTE2MDgzLCAxMTYwODgsIDAsIDAsIDExNjA5MywgMTE2MDk4LCAKLSAgICAxMTYxMDMsIDExNjEwNywgMTE2MTExLCAxMTYxMTYsIDExNjEyMCwgMTE2MTI1LCAwLCAxMTYxMzAsIDExNjEzNSwgCi0gICAgMTE2MTQwLCAxMTYxNDQsIDExNjE0OSwgMTE2MTU0LCAxMTYxNTksIDAsIDExNjE2NCwgMTE2MTY4LCAxMTYxNzMsIAotICAgIDExNjE3OCwgMTE2MTgzLCAxMTYxODcsIDExNjE5MiwgMTE2MTk3LCAxMTYyMDIsIDExNjIwNiwgMTE2MjExLCAxMTYyMTYsIAotICAgIDExNjIyMCwgMTE2MjI0LCAxMTYyMjksIDExNjIzMywgMTE2MjM4LCAxMTYyNDMsIDExNjI0NywgMTE2MjUyLCAxMTYyNTcsIAotICAgIDExNjI2MSwgMTE2MjY2LCAxMTYyNzEsIDExNjI3NiwgMTE2MjgxLCAxMTYyODYsIDExNjI5MCwgMCwgMTE2Mjk1LCAKLSAgICAxMTYzMDAsIDExNjMwNCwgMTE2MzA5LCAwLCAxMTYzMTQsIDExNjMxOCwgMTE2MzIzLCAxMTYzMjgsIDExNjMzMiwgMCwgCi0gICAgMTE2MzM2LCAwLCAwLCAwLCAxMTYzNDAsIDExNjM0NSwgMTE2MzUwLCAxMTYzNTQsIDExNjM1OSwgMTE2MzY0LCAxMTYzNjksIAotICAgIDAsIDExNjM3NCwgMTE2Mzc4LCAxMTYzODMsIDExNjM4OCwgMTE2MzkzLCAxMTYzOTcsIDExNjQwMiwgMTE2NDA3LCAKLSAgICAxMTY0MTIsIDExNjQxNiwgMTE2NDIxLCAxMTY0MjYsIDExNjQzMCwgMTE2NDM0LCAxMTY0MzksIDExNjQ0MywgMTE2NDQ4LCAKLSAgICAxMTY0NTMsIDExNjQ1NywgMTE2NDYyLCAxMTY0NjcsIDExNjQ3MSwgMTE2NDc2LCAxMTY0ODEsIDExNjQ4NiwgMTE2NDkxLCAKLSAgICAxMTY0OTYsIDExNjUwMSwgMTE2NTA3LCAxMTY1MTMsIDExNjUxOSwgMTE2NTI0LCAxMTY1MzAsIDExNjUzNiwgMTE2NTQyLCAKLSAgICAxMTY1NDcsIDExNjU1MywgMTE2NTU5LCAxMTY1NjQsIDExNjU2OSwgMTE2NTc1LCAxMTY1ODAsIDExNjU4NiwgMTE2NTkyLCAKLSAgICAxMTY1OTcsIDExNjYwMywgMTE2NjA5LCAxMTY2MTQsIDExNjYyMCwgMTE2NjI2LCAxMTY2MzIsIDExNjYzOCwgMTE2NjQ0LCAKLSAgICAxMTY2NDksIDExNjY1NSwgMTE2NjYxLCAxMTY2NjcsIDExNjY3MiwgMTE2Njc4LCAxMTY2ODQsIDExNjY5MCwgMTE2Njk1LCAKLSAgICAxMTY3MDEsIDExNjcwNywgMTE2NzEyLCAxMTY3MTcsIDExNjcyMywgMTE2NzI4LCAxMTY3MzQsIDExNjc0MCwgMTE2NzQ1LCAKLSAgICAxMTY3NTEsIDExNjc1NywgMTE2NzYyLCAxMTY3NjgsIDExNjc3NCwgMTE2NzgwLCAxMTY3ODYsIDExNjc5MiwgMTE2Nzk2LCAKLSAgICAxMTY4MDEsIDExNjgwNiwgMTE2ODExLCAxMTY4MTUsIDExNjgyMCwgMTE2ODI1LCAxMTY4MzAsIDExNjgzNCwgMTE2ODM5LCAKLSAgICAxMTY4NDQsIDExNjg0OCwgMTE2ODUyLCAxMTY4NTcsIDExNjg2MSwgMTE2ODY2LCAxMTY4NzEsIDExNjg3NSwgMTE2ODgwLCAKLSAgICAxMTY4ODUsIDExNjg4OSwgMTE2ODk0LCAxMTY4OTksIDExNjkwNCwgMTE2OTA5LCAxMTY5MTQsIDExNjkxOCwgMTE2OTIzLCAKLSAgICAxMTY5MjgsIDExNjkzMywgMTE2OTM3LCAxMTY5NDIsIDExNjk0NywgMTE2OTUyLCAxMTY5NTYsIDExNjk2MSwgMTE2OTY2LCAKLSAgICAxMTY5NzAsIDExNjk3NCwgMTE2OTc5LCAxMTY5ODMsIDExNjk4OCwgMTE2OTkzLCAxMTY5OTcsIDExNzAwMiwgMTE3MDA3LCAKLSAgICAxMTcwMTEsIDExNzAxNiwgMTE3MDIxLCAxMTcwMjYsIDExNzAzMSwgMTE3MDM2LCAxMTcwNDEsIDExNzA0NywgMTE3MDUzLCAKLSAgICAxMTcwNTksIDExNzA2NCwgMTE3MDcwLCAxMTcwNzYsIDExNzA4MiwgMTE3MDg3LCAxMTcwOTMsIDExNzA5OSwgMTE3MTA0LCAKLSAgICAxMTcxMDksIDExNzExNSwgMTE3MTIwLCAxMTcxMjYsIDExNzEzMiwgMTE3MTM3LCAxMTcxNDMsIDExNzE0OSwgMTE3MTU0LCAKLSAgICAxMTcxNjAsIDExNzE2NiwgMTE3MTcyLCAxMTcxNzgsIDExNzE4NCwgMTE3MTg5LCAxMTcxOTUsIDExNzIwMSwgMTE3MjA3LCAKLSAgICAxMTcyMTIsIDExNzIxOCwgMTE3MjI0LCAxMTcyMzAsIDExNzIzNSwgMTE3MjQxLCAxMTcyNDcsIDExNzI1MiwgMTE3MjU3LCAKLSAgICAxMTcyNjMsIDExNzI2OCwgMTE3Mjc0LCAxMTcyODAsIDExNzI4NSwgMTE3MjkxLCAxMTcyOTcsIDExNzMwMiwgMTE3MzA4LCAKLSAgICAxMTczMTQsIDExNzMyMCwgMTE3MzI2LCAxMTczMzIsIDExNzMzNywgMTE3MzQzLCAxMTczNDksIDExNzM1NSwgMTE3MzYwLCAKLSAgICAxMTczNjYsIDExNzM3MiwgMTE3Mzc4LCAxMTczODMsIDExNzM4OSwgMTE3Mzk1LCAxMTc0MDAsIDExNzQwNSwgMTE3NDExLCAKLSAgICAxMTc0MTYsIDExNzQyMiwgMTE3NDI4LCAxMTc0MzMsIDExNzQzOSwgMTE3NDQ1LCAxMTc0NTAsIDExNzQ1NiwgMTE3NDYyLCAKLSAgICAxMTc0NjgsIDExNzQ3NCwgMTE3NDgwLCAxMTc0ODUsIDExNzQ5MSwgMTE3NDk3LCAxMTc1MDMsIDExNzUwOCwgMTE3NTE0LCAKLSAgICAxMTc1MjAsIDExNzUyNiwgMTE3NTMxLCAxMTc1MzcsIDExNzU0MywgMTE3NTQ4LCAxMTc1NTMsIDExNzU1OSwgMTE3NTY0LCAKLSAgICAxMTc1NzAsIDExNzU3NiwgMTE3NTgxLCAxMTc1ODcsIDExNzU5MywgMTE3NTk4LCAxMTc2MDQsIDExNzYxMCwgMTE3NjE2LCAKLSAgICAxMTc2MjIsIDExNzYyOCwgMTE3NjM0LCAxMTc2NDEsIDExNzY0OCwgMTE3NjU1LCAxMTc2NjEsIDExNzY2OCwgMTE3Njc1LCAKLSAgICAxMTc2ODIsIDExNzY4OCwgMTE3Njk1LCAxMTc3MDIsIDExNzcwOCwgMTE3NzE0LCAxMTc3MjEsIDExNzcyNywgMTE3NzM0LCAKLSAgICAxMTc3NDEsIDExNzc0NywgMTE3NzU0LCAxMTc3NjEsIDExNzc2NywgMTE3Nzc0LCAxMTc3ODEsIDExNzc4OCwgMTE3Nzk1LCAKLSAgICAxMTc4MDIsIDExNzgwOCwgMTE3ODE1LCAxMTc4MjIsIDExNzgyOSwgMTE3ODM1LCAxMTc4NDIsIDExNzg0OSwgMTE3ODU2LCAKLSAgICAxMTc4NjIsIDExNzg2OSwgMTE3ODc2LCAxMTc4ODIsIDExNzg4OCwgMTE3ODk1LCAxMTc5MDEsIDExNzkwOCwgMTE3OTE1LCAKLSAgICAxMTc5MjEsIDExNzkyOCwgMTE3OTM1LCAxMTc5NDEsIDExNzk0OCwgMTE3OTU1LCAxMTc5NjIsIDExNzk2OSwgMTE3OTc2LCAKLSAgICAxMTc5ODEsIDExNzk4NywgMTE3OTkzLCAxMTc5OTksIDExODAwNCwgMTE4MDEwLCAxMTgwMTYsIDExODAyMiwgMTE4MDI3LCAKLSAgICAxMTgwMzMsIDExODAzOSwgMTE4MDQ0LCAxMTgwNDksIDExODA1NSwgMTE4MDYwLCAxMTgwNjYsIDExODA3MiwgMTE4MDc3LCAKLSAgICAxMTgwODMsIDExODA4OSwgMTE4MDk0LCAxMTgxMDAsIDExODEwNiwgMTE4MTEyLCAxMTgxMTgsIDExODEyNCwgMTE4MTI5LCAKLSAgICAxMTgxMzUsIDExODE0MSwgMTE4MTQ3LCAxMTgxNTIsIDExODE1OCwgMTE4MTY0LCAxMTgxNzAsIDExODE3NSwgMTE4MTgxLCAKLSAgICAxMTgxODcsIDExODE5MiwgMTE4MTk3LCAxMTgyMDMsIDExODIwOCwgMTE4MjE0LCAxMTgyMjAsIDExODIyNSwgMTE4MjMxLCAKLSAgICAxMTgyMzcsIDExODI0MiwgMTE4MjQ4LCAxMTgyNTQsIDExODI2MCwgMTE4MjY2LCAxMTgyNzIsIDExODI3OCwgMCwgMCwgCi0gICAgMTE4Mjg1LCAxMTgyOTAsIDExODI5NSwgMTE4MzAwLCAxMTgzMDUsIDExODMxMCwgMTE4MzE1LCAxMTgzMjAsIDExODMyNSwgCi0gICAgMTE4MzMwLCAxMTgzMzUsIDExODM0MCwgMTE4MzQ1LCAxMTgzNTAsIDExODM1NSwgMTE4MzYwLCAxMTgzNjUsIDExODM3MCwgCi0gICAgMTE4Mzc2LCAxMTgzODEsIDExODM4NiwgMTE4MzkxLCAxMTgzOTYsIDExODQwMSwgMTE4NDA2LCAxMTg0MTEsIDExODQxNSwgCi0gICAgMTE4NDIwLCAxMTg0MjUsIDExODQzMCwgMTE4NDM1LCAxMTg0NDAsIDExODQ0NSwgMTE4NDUwLCAxMTg0NTUsIDExODQ2MCwgCi0gICAgMTE4NDY1LCAxMTg0NzAsIDExODQ3NSwgMTE4NDgwLCAxMTg0ODUsIDExODQ5MCwgMTE4NDk1LCAxMTg1MDAsIDExODUwNiwgCi0gICAgMTE4NTExLCAxMTg1MTYsIDExODUyMSwgMTE4NTI2LCAxMTg1MzEsIDExODUzNiwgMTE4NTQxLCAxMTg1NDcsIDExODU1MiwgCi0gICAgMTE4NTU3LCAxMTg1NjIsIDExODU2NywgMTE4NTcyLCAxMTg1NzcsIDExODU4MiwgMTE4NTg3LCAxMTg1OTIsIDExODU5NywgCi0gICAgMTE4NjAyLCAxMTg2MDcsIDExODYxMiwgMTE4NjE3LCAxMTg2MjIsIDExODYyNywgMTE4NjMyLCAxMTg2MzcsIDExODY0MiwgCi0gICAgMTE4NjQ3LCAxMTg2NTIsIDExODY1NywgMTE4NjYyLCAxMTg2NjgsIDExODY3MywgMTE4Njc4LCAxMTg2ODMsIDExODY4OCwgCi0gICAgMTE4NjkzLCAxMTg2OTgsIDExODcwMywgMTE4NzA3LCAxMTg3MTIsIDExODcxNywgMTE4NzIyLCAxMTg3MjcsIDExODczMiwgCi0gICAgMTE4NzM3LCAxMTg3NDIsIDExODc0NywgMTE4NzUyLCAxMTg3NTcsIDExODc2MiwgMTE4NzY3LCAxMTg3NzIsIDExODc3NywgCi0gICAgMTE4NzgyLCAxMTg3ODcsIDExODc5MiwgMTE4Nzk4LCAxMTg4MDMsIDExODgwOCwgMTE4ODEzLCAxMTg4MTgsIDExODgyMywgCi0gICAgMTE4ODI4LCAxMTg4MzMsIDExODgzOSwgMTE4ODQ0LCAxMTg4NDksIDExODg1NCwgMTE4ODU5LCAxMTg4NjQsIDExODg2OSwgCi0gICAgMTE4ODc1LCAxMTg4ODEsIDExODg4NywgMTE4ODkzLCAxMTg4OTksIDExODkwNSwgMTE4OTExLCAxMTg5MTcsIDExODkyMywgCi0gICAgMTE4OTI5LCAxMTg5MzUsIDExODk0MSwgMTE4OTQ3LCAxMTg5NTMsIDExODk1OSwgMTE4OTY1LCAxMTg5NzEsIDExODk3OCwgCi0gICAgMTE4OTg0LCAxMTg5OTAsIDExODk5NiwgMTE5MDAyLCAxMTkwMDgsIDExOTAxNCwgMTE5MDIwLCAxMTkwMjUsIDExOTAzMSwgCi0gICAgMTE5MDM3LCAxMTkwNDMsIDExOTA0OSwgMTE5MDU1LCAxMTkwNjEsIDExOTA2NywgMTE5MDczLCAxMTkwNzksIDExOTA4NSwgCi0gICAgMTE5MDkxLCAxMTkwOTcsIDExOTEwMywgMTE5MTA5LCAxMTkxMTUsIDExOTEyMSwgMTE5MTI3LCAxMTkxMzQsIDExOTE0MCwgCi0gICAgMTE5MTQ2LCAxMTkxNTIsIDExOTE1OCwgMTE5MTY0LCAxMTkxNzAsIDExOTE3NiwgMTE5MTgzLCAxMTkxODksIDExOTE5NSwgCi0gICAgMTE5MjAxLCAxMTkyMDcsIDExOTIxMywgMTE5MjE5LCAxMTkyMjUsIDExOTIzMSwgMTE5MjM3LCAxMTkyNDMsIDExOTI0OSwgCi0gICAgMTE5MjU1LCAxMTkyNjEsIDExOTI2NywgMTE5MjczLCAxMTkyNzksIDExOTI4NSwgMTE5MjkxLCAxMTkyOTcsIDExOTMwMywgCi0gICAgMTE5MzA5LCAxMTkzMTUsIDExOTMyMSwgMTE5MzI4LCAxMTkzMzQsIDExOTM0MCwgMTE5MzQ2LCAxMTkzNTIsIDExOTM1OCwgCi0gICAgMTE5MzY0LCAxMTkzNzAsIDExOTM3NSwgMTE5MzgxLCAxMTkzODcsIDExOTM5MywgMTE5Mzk5LCAxMTk0MDUsIDExOTQxMSwgCi0gICAgMTE5NDE3LCAxMTk0MjMsIDExOTQyOSwgMTE5NDM1LCAxMTk0NDEsIDExOTQ0NywgMTE5NDUzLCAxMTk0NTksIDExOTQ2NSwgCi0gICAgMTE5NDcxLCAxMTk0NzcsIDExOTQ4NCwgMTE5NDkwLCAxMTk0OTYsIDExOTUwMiwgMTE5NTA4LCAxMTk1MTQsIDExOTUyMCwgCi0gICAgMTE5NTI2LCAxMTk1MzMsIDExOTUzOSwgMTE5NTQ1LCAxMTk1NTEsIDExOTU1NywgMTE5NTYzLCAxMTk1NjksIDExOTU3NiwgCi0gICAgMTE5NTgzLCAxMTk1OTAsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgCi0gICAgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgMTE5Njg4LCAxMTk2OTYsIDExOTcwMywgCi0gICAgMTE5NzEwLCAxMTk3MTcsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgMTE5NzUxLCAxMTk3NTgsIDExOTc2NSwgCi0gICAgMTE5NzcyLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgCi0gICAgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgMTE5ODc4LCAxMTk4ODUsIDExOTg5MiwgCi0gICAgMTE5ODk5LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNSwgMTE5OTQyLCAxMTk5NDksIDExOTk1NiwgCi0gICAgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTgyLCAwLCAwLCAxMTk5ODcsIDExOTk5MiwgMTE5OTk2LCAxMjAwMDAsIAotICAgIDEyMDAwNCwgMTIwMDA4LCAxMjAwMTIsIDEyMDAxNiwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMzLCAxMjAwMzcsIAotICAgIDEyMDA0MSwgMTIwMDQ1LCAxMjAwNDksIDEyMDA1MywgMTIwMDU3LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzQsIAotICAgIDEyMDA3OCwgMTIwMDgyLCAxMjAwODYsIDEyMDA5MCwgMTIwMDk0LCAxMjAwOTgsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAotICAgIDEyMDExNiwgMTIwMTIxLCAxMjAxMjYsIDEyMDEzMSwgMTIwMTM2LCAxMjAxNDEsIDEyMDE0NiwgMTIwMTUxLCAxMjAxNTYsIAotICAgIDEyMDE2MSwgMTIwMTY3LCAxMjAxNzIsIDEyMDE3NywgMTIwMTgyLCAxMjAxODcsIDEyMDE5MiwgMTIwMTk3LCAxMjAyMDIsIAotICAgIDEyMDIwNywgMTIwMjEyLCAxMjAyMTYsIDEyMDIyMCwgMTIwMjI0LCAwLCAxMjAyMjgsIDEyMDIzMiwgMTIwMjM2LCAKLSAgICAxMjAyNDAsIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKKyAgICA5MjE3NywgOTIxODEsIDkyMTg2LCA5MjE5MSwgMCwgOTIxOTcsIDkyMjAyLCAwLCAwLCAwLCAwLCAwLCA5MjIwNywgOTIyMTMsIAorICAgIDkyMjIwLCA5MjIyNSwgOTIyMzAsIDkyMjM0LCA5MjIzOSwgOTIyNDQsIDAsIDkyMjQ5LCA5MjI1NCwgOTIyNTksIDAsIAorICAgIDkyMjY0LCA5MjI2OSwgOTIyNzQsIDkyMjc5LCA5MjI4NCwgOTIyODksIDkyMjk0LCA5MjI5OSwgOTIzMDQsIDkyMzA5LCAKKyAgICA5MjMxNCwgOTIzMTgsIDkyMzIyLCA5MjMyNywgOTIzMzIsIDkyMzM3LCA5MjM0MSwgOTIzNDUsIDkyMzQ5LCA5MjM1NCwgCisgICAgOTIzNTksIDkyMzY0LCA5MjM2OSwgOTIzNzMsIDkyMzc4LCA5MjM4MiwgOTIzODcsIDAsIDAsIDAsIDAsIDkyMzkyLCAKKyAgICA5MjM5OCwgOTI0MDMsIDAsIDAsIDAsIDAsIDkyNDA4LCA5MjQxMiwgOTI0MTYsIDkyNDIwLCA5MjQyNCwgOTI0MjgsIAorICAgIDkyNDMzLCA5MjQzOCwgOTI0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyNDUwLCA5MjQ1NiwgOTI0NjMsIDkyNDY5LCAKKyAgICA5MjQ3NiwgOTI0ODIsIDkyNDg4LCA5MjQ5NCwgOTI1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyNTA3LCA5MjUxNSwgCisgICAgOTI1MjMsIDkyNTMxLCA5MjUzOSwgOTI1NDcsIDkyNTU1LCA5MjU2MywgOTI1NzEsIDkyNTc5LCA5MjU4NywgOTI1OTUsIAorICAgIDkyNjAzLCA5MjYxMSwgOTI2MTksIDkyNjI3LCA5MjYzNSwgOTI2NDMsIDkyNjUxLCA5MjY1OSwgOTI2NjcsIDkyNjc1LCAKKyAgICA5MjY4MywgOTI2OTEsIDkyNjk5LCA5MjcwNywgOTI3MTUsIDkyNzIzLCA5MjczMSwgOTI3MzksIDkyNzQ2LCA5Mjc1NCwgCisgICAgOTI3NjIsIDkyNzY2LCA5Mjc3MSwgOTI3NzYsIDkyNzgxLCA5Mjc4NiwgOTI3OTEsIDkyNzk2LCA5MjgwMSwgOTI4MDUsIAorICAgIDkyODEwLCA5MjgxNCwgOTI4MTksIDkyODIzLCA5MjgyOCwgOTI4MzIsIDkyODM3LCA5Mjg0MiwgOTI4NDcsIDkyODUyLCAKKyAgICA5Mjg1NywgOTI4NjIsIDkyODY3LCA5Mjg3MiwgOTI4NzcsIDkyODgyLCA5Mjg4NywgOTI4OTIsIDkyODk3LCA5MjkwMiwgCisgICAgOTI5MDcsIDkyOTEyLCA5MjkxNywgOTI5MjIsIDkyOTI3LCA5MjkzMiwgOTI5MzcsIDkyOTQyLCA5Mjk0NywgOTI5NTIsIAorICAgIDkyOTU3LCA5Mjk2MiwgOTI5NjcsIDkyOTcyLCA5Mjk3NywgOTI5ODIsIDkyOTg3LCA5Mjk5MiwgOTI5OTcsIDkzMDAyLCAKKyAgICA5MzAwNywgOTMwMTIsIDkzMDE3LCA5MzAyMiwgMCwgMCwgMCwgOTMwMjcsIDkzMDMyLCA5MzA0MSwgOTMwNDksIDkzMDU4LCAKKyAgICA5MzA2NywgOTMwNzgsIDkzMDg5LCA5MzA5NiwgOTMxMDMsIDkzMTEwLCA5MzExNywgOTMxMjQsIDkzMTMxLCA5MzEzOCwgCisgICAgOTMxNDUsIDkzMTUyLCA5MzE1OSwgOTMxNjYsIDkzMTczLCA5MzE4MCwgOTMxODcsIDkzMTk0LCA5MzIwMSwgOTMyMDgsIAorICAgIDkzMjE1LCA5MzIyMiwgOTMyMjksIDkzMjM2LCAwLCAwLCA5MzI0MywgOTMyNDksIDkzMjU1LCA5MzI2MSwgOTMyNjcsIAorICAgIDkzMjc0LCA5MzI4MSwgOTMyODksIDkzMjk3LCA5MzMwNCwgOTMzMTEsIDkzMzE4LCA5MzMyNSwgOTMzMzIsIDkzMzM5LCAKKyAgICA5MzM0NiwgOTMzNTMsIDkzMzYwLCA5MzM2NywgOTMzNzQsIDkzMzgxLCA5MzM4OCwgOTMzOTUsIDkzNDAyLCA5MzQwOSwgCisgICAgOTM0MTYsIDkzNDIzLCAwLCAwLCAwLCAwLCAwLCA5MzQzMCwgOTM0MzYsIDkzNDQyLCA5MzQ0OCwgOTM0NTQsIDkzNDYxLCAKKyAgICA5MzQ2OCwgOTM0NzYsIDkzNDg0LCA5MzQ5MCwgOTM0OTYsIDkzNTAzLCA5MzUwOSwgOTM1MTUsIDkzNTIxLCA5MzUyNywgCisgICAgOTM1MzQsIDkzNTQxLCA5MzU0OCwgOTM1NTUsIDkzNTYyLCA5MzU2OSwgOTM1NzYsIDkzNTgzLCA5MzU5MCwgOTM1OTcsIAorICAgIDkzNjA0LCA5MzYxMSwgOTM2MTgsIDkzNjI1LCA5MzYzMiwgOTM2MzksIDkzNjQ2LCA5MzY1MywgOTM2NjAsIDkzNjY3LCAKKyAgICA5MzY3NCwgOTM2ODEsIDkzNjg4LCA5MzY5NSwgOTM3MDIsIDkzNzA5LCA5MzcxNiwgOTM3MjMsIDkzNzMwLCA5MzczNywgCisgICAgOTM3NDQsIDkzNzUxLCA5Mzc1OCwgOTM3NjUsIDkzNzcyLCA5Mzc3OSwgOTM3ODYsIDkzNzkzLCA5MzgwMCwgOTM4MDcsIAorICAgIDkzODE0LCA5MzgyMSwgOTM4MjgsIDkzODM1LCA5Mzg0MiwgOTM4NDksIDkzODU2LCA5Mzg2MywgOTM4NzAsIDkzODc3LCAKKyAgICA5Mzg4NCwgOTM4OTEsIDkzODk4LCA5MzkwNSwgOTM5MTIsIDkzOTE5LCA5MzkyNiwgOTM5MzMsIDkzOTQwLCA5Mzk0NywgCisgICAgOTM5NTQsIDkzOTYxLCA5Mzk2OCwgOTM5NzUsIDkzOTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5Mzk4OSwgOTM5OTMsIAorICAgIDkzOTk3LCA5NDAwMSwgOTQwMDUsIDk0MDA5LCA5NDAxMywgOTQwMTcsIDk0MDIxLCA5NDAyNSwgOTQwMzAsIDk0MDM1LCAKKyAgICA5NDA0MCwgOTQwNDUsIDk0MDUwLCA5NDA1NSwgOTQwNjAsIDk0MDY1LCA5NDA3MCwgOTQwNzYsIDk0MDgyLCA5NDA4OCwgCisgICAgOTQwOTUsIDk0MTAyLCA5NDEwOSwgOTQxMTYsIDk0MTIzLCA5NDEzMCwgOTQxMzcsIDk0MTQ0LCA5NDE1MSwgMCwgOTQxNTgsIAorICAgIDk0MTYyLCA5NDE2NiwgOTQxNzAsIDk0MTc0LCA5NDE3OCwgOTQxODEsIDk0MTg1LCA5NDE4OCwgOTQxOTIsIDk0MTk1LCAKKyAgICA5NDE5OSwgOTQyMDMsIDk0MjA4LCA5NDIxMiwgOTQyMTcsIDk0MjIwLCA5NDIyNCwgOTQyMjcsIDk0MjMxLCA5NDIzNCwgCisgICAgOTQyMzgsIDk0MjQyLCA5NDI0NiwgOTQyNTAsIDk0MjU0LCA5NDI1OCwgOTQyNjIsIDk0MjY2LCA5NDI3MCwgOTQyNzQsIAorICAgIDk0Mjc4LCA5NDI4MiwgOTQyODYsIDk0MjkwLCA5NDI5NCwgOTQyOTgsIDk0MzAyLCA5NDMwNiwgOTQzMDksIDk0MzEyLCAKKyAgICA5NDMxNiwgOTQzMjAsIDk0MzI0LCA5NDMyNywgOTQzMzAsIDk0MzMzLCA5NDMzNywgOTQzNDEsIDk0MzQ1LCA5NDM0OSwgCisgICAgOTQzNTIsIDk0MzU1LCA5NDM1OSwgOTQzNjUsIDk0MzcxLCA5NDM3NywgOTQzODIsIDk0Mzg5LCA5NDM5MywgOTQzOTgsIAorICAgIDk0NDAyLCA5NDQwNywgOTQ0MTIsIDk0NDE4LCA5NDQyMywgOTQ0MjksIDk0NDMzLCA5NDQzOCwgOTQ0NDIsIDk0NDQ3LCAKKyAgICA5NDQ1MCwgOTQ0NTMsIDk0NDU3LCA5NDQ2MiwgOTQ0NjgsIDk0NDczLCA5NDQ3OSwgMCwgMCwgMCwgMCwgOTQ0ODQsIAorICAgIDk0NDg3LCA5NDQ5MCwgOTQ0OTMsIDk0NDk2LCA5NDQ5OSwgOTQ1MDIsIDk0NTA1LCA5NDUwOCwgOTQ1MTEsIDk0NTE1LCAKKyAgICA5NDUxOSwgOTQ1MjMsIDk0NTI3LCA5NDUzMSwgOTQ1MzUsIDk0NTM5LCA5NDU0MywgOTQ1NDcsIDk0NTUyLCA5NDU1NywgCisgICAgOTQ1NjEsIDk0NTY0LCA5NDU2NywgOTQ1NzAsIDk0NTczLCA5NDU3NiwgOTQ1NzksIDk0NTgyLCA5NDU4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ1ODgsIDk0NTkzLCA5NDU5OCwgOTQ2MDMsIDk0NjA3LCAKKyAgICA5NDYxMiwgOTQ2MTYsIDk0NjIxLCA5NDYyNSwgOTQ2MzAsIDk0NjM0LCA5NDYzOSwgOTQ2NDMsIDk0NjQ4LCA5NDY1MiwgCisgICAgOTQ2NTcsIDk0NjYyLCA5NDY2NywgOTQ2NzIsIDk0Njc3LCA5NDY4MiwgOTQ2ODcsIDk0NjkyLCA5NDY5NywgOTQ3MDIsIAorICAgIDk0NzA3LCA5NDcxMiwgOTQ3MTcsIDk0NzIyLCA5NDcyNywgOTQ3MzIsIDk0NzM3LCA5NDc0MiwgOTQ3NDcsIDk0NzUyLCAKKyAgICA5NDc1NiwgOTQ3NjAsIDk0NzY1LCA5NDc3MCwgOTQ3NzUsIDk0Nzc5LCA5NDc4MywgOTQ3ODcsIDk0NzkyLCA5NDc5NywgCisgICAgOTQ4MDIsIDk0ODA3LCA5NDgxMSwgOTQ4MTUsIDk0ODIxLCA5NDgyNiwgOTQ4MzIsIDk0ODM3LCA5NDg0MywgOTQ4NDgsIAorICAgIDk0ODU0LCA5NDg1OSwgOTQ4NjUsIDk0ODcwLCA5NDg3NSwgOTQ4ODAsIDk0ODg1LCA5NDg4OSwgOTQ4OTQsIDk0OTAwLCAKKyAgICA5NDkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ5MDksIDk0OTE2LCA5NDkyMywgCisgICAgOTQ5MzAsIDk0OTM3LCA5NDk0NCwgOTQ5NTEsIDk0OTU4LCA5NDk2NSwgOTQ5NzIsIDk0OTc5LCA5NDk4NiwgOTQ5OTMsIAorICAgIDk1MDAwLCA5NTAwNywgOTUwMTQsIDk1MDIxLCA5NTAyOCwgOTUwMzUsIDk1MDQyLCA5NTA0OSwgOTUwNTYsIDk1MDYzLCAKKyAgICA5NTA3MCwgOTUwNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1MDg0LCA5NTA5MSwgOTUwOTcsIDk1MTAzLCA5NTEwOSwgCisgICAgOTUxMTUsIDk1MTIxLCA5NTEyNywgOTUxMzMsIDk1MTM5LCAwLCAwLCAwLCAwLCAwLCAwLCA5NTE0NSwgOTUxNTAsIDk1MTU1LCAKKyAgICA5NTE2MCwgOTUxNjUsIDk1MTY5LCA5NTE3MywgOTUxNzcsIDk1MTgyLCA5NTE4NywgOTUxOTIsIDk1MTk3LCA5NTIwMiwgCisgICAgOTUyMDcsIDk1MjEyLCA5NTIxNywgOTUyMjIsIDk1MjI3LCA5NTIzMiwgOTUyMzcsIDk1MjQyLCA5NTI0NywgOTUyNTIsIAorICAgIDk1MjU3LCA5NTI2MiwgOTUyNjcsIDk1MjcyLCA5NTI3NywgOTUyODIsIDk1Mjg3LCA5NTI5MiwgOTUyOTcsIDk1MzAyLCAKKyAgICA5NTMwNywgOTUzMTIsIDk1MzE3LCA5NTMyMiwgOTUzMjcsIDk1MzMyLCA5NTMzNywgOTUzNDIsIDk1MzQ3LCA5NTM1MywgCisgICAgOTUzNTgsIDk1MzY0LCA5NTM2OSwgOTUzNzUsIDk1MzgwLCA5NTM4NiwgOTUzOTIsIDk1Mzk2LCA5NTQwMSwgOTU0MDUsIDAsIAorICAgIDk1NDA5LCA5NTQxNCwgOTU0MTgsIDk1NDIyLCA5NTQyNiwgOTU0MzAsIDk1NDM0LCA5NTQzOCwgOTU0NDIsIDk1NDQ2LCAKKyAgICA5NTQ1MCwgOTU0NTUsIDk1NDU5LCA5NTQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU0NjksIAorICAgIDk1NDczLCA5NTQ3NywgOTU0ODEsIDk1NDg0LCA5NTQ4OCwgOTU0OTEsIDk1NDk1LCA5NTQ5OCwgOTU1MDIsIDk1NTA2LCAKKyAgICA5NTUxMSwgOTU1MTUsIDk1NTIwLCA5NTUyMywgOTU1MjcsIDk1NTMwLCA5NTUzNCwgOTU1MzcsIDk1NTQxLCA5NTU0NSwgCisgICAgOTU1NDksIDk1NTUzLCA5NTU1NywgOTU1NjEsIDk1NTY1LCA5NTU2OSwgOTU1NzMsIDk1NTc3LCA5NTU4MSwgOTU1ODUsIAorICAgIDk1NTg5LCA5NTU5MywgOTU1OTcsIDk1NjAxLCA5NTYwNSwgOTU2MDksIDk1NjEyLCA5NTYxNSwgOTU2MTksIDk1NjIzLCAKKyAgICA5NTYyNywgOTU2MzAsIDk1NjMzLCA5NTYzNiwgOTU2NDAsIDk1NjQ0LCA5NTY0OCwgOTU2NTIsIDk1NjU2LCA5NTY1OSwgCisgICAgOTU2NjIsIDk1NjY3LCA5NTY3MSwgOTU2NzYsIDk1NjgwLCA5NTY4NSwgOTU2OTAsIDk1Njk2LCA5NTcwMSwgOTU3MDcsIAorICAgIDk1NzExLCA5NTcxNiwgOTU3MjAsIDk1NzI1LCA5NTcyOSwgOTU3MzMsIDk1NzM3LCA5NTc0MSwgOTU3NDQsIDk1NzQ3LCAKKyAgICA5NTc1MSwgOTU3NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NzU4LCA5NTc2MiwgOTU3NjUsIDk1NzY4LCA5NTc3MSwgCisgICAgOTU3NzQsIDk1Nzc3LCA5NTc4MCwgOTU3ODMsIDk1Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5NTc4OSwgOTU3OTMsIDk1Nzk4LCA5NTgwMiwgOTU4MDcsIDk1ODExLCA5NTgxNiwgOTU4MjAsIDk1ODI1LCA5NTgyOSwgCisgICAgOTU4MzQsIDk1ODM4LCA5NTg0MywgOTU4NDgsIDk1ODUzLCA5NTg1OCwgOTU4NjMsIDk1ODY4LCA5NTg3MywgOTU4NzgsIAorICAgIDk1ODgzLCA5NTg4OCwgOTU4OTMsIDk1ODk4LCA5NTkwMywgOTU5MDgsIDk1OTEzLCA5NTkxOCwgOTU5MjMsIDk1OTI4LCAKKyAgICA5NTkzMiwgOTU5MzYsIDk1OTQxLCA5NTk0NiwgOTU5NTEsIDk1OTU1LCA5NTk1OSwgOTU5NjMsIDk1OTY4LCA5NTk3MywgCisgICAgOTU5NzgsIDk1OTgyLCA5NTk4NiwgOTU5OTEsIDk1OTk2LCA5NjAwMSwgOTYwMDcsIDk2MDEyLCA5NjAxOCwgOTYwMjMsIAorICAgIDk2MDI5LCA5NjAzNCwgOTYwNDAsIDk2MDQ1LCA5NjA1MSwgOTYwNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDYxLCAKKyAgICA5NjA2NiwgOTYwNzAsIDk2MDc0LCA5NjA3OCwgOTYwODIsIDk2MDg2LCA5NjA5MCwgOTYwOTQsIDk2MDk4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5NjEwMiwgOTYxMDUsIDk2MTEwLCA5NjExNiwgOTYxMjQsIDk2MTI5LCA5NjEzNSwgOTYxNDMsIDk2MTQ5LCAKKyAgICA5NjE1NSwgOTYxNTksIDk2MTYzLCA5NjE3MCwgOTYxNzksIDk2MTg2LCA5NjE5NSwgOTYyMDEsIDk2MjEwLCA5NjIxNywgCisgICAgOTYyMjQsIDk2MjMxLCA5NjI0MSwgOTYyNDcsIDk2MjUxLCA5NjI1OCwgOTYyNjcsIDk2Mjc3LCA5NjI4NCwgOTYyOTEsIAorICAgIDk2Mjk1LCA5NjI5OSwgOTYzMDYsIDk2MzE2LCA5NjMyMCwgOTYzMjcsIDk2MzM0LCA5NjM0MSwgOTYzNDcsIDk2MzU0LCAKKyAgICA5NjM2MSwgOTYzNjgsIDk2Mzc1LCA5NjM3OSwgOTYzODMsIDk2Mzg3LCA5NjM5NCwgOTYzOTgsIDk2NDA1LCA5NjQxMiwgCisgICAgOTY0MjYsIDk2NDM1LCA5NjQzOSwgOTY0NDMsIDk2NDQ3LCA5NjQ1NCwgOTY0NTgsIDk2NDYyLCA5NjQ2NiwgOTY0NzQsIAorICAgIDk2NDgyLCA5NjUwMSwgOTY1MTEsIDk2NTMxLCA5NjUzNSwgOTY1MzksIDk2NTQzLCA5NjU0NywgOTY1NTEsIDk2NTU1LCAKKyAgICA5NjU1OSwgOTY1NjYsIDk2NTcwLCA5NjU3MywgOTY1NzcsIDk2NTgxLCA5NjU4NywgOTY1OTQsIDk2NjAzLCA5NjYwNywgCisgICAgOTY2MTYsIDk2NjI1LCA5NjYzMywgOTY2MzcsIDk2NjQ0LCA5NjY0OCwgOTY2NTIsIDk2NjU2LCA5NjY2MCwgOTY2NzEsIAorICAgIDk2NjgwLCA5NjY4OSwgOTY2OTgsIDk2NzA3LCA5NjcxOSwgOTY3MjgsIDk2NzM3LCA5Njc0NiwgOTY3NTQsIDk2NzYzLCAKKyAgICA5Njc3NSwgOTY3ODQsIDk2NzkzLCA5NjgwMiwgOTY4MTQsIDk2ODIzLCA5NjgzMiwgOTY4NDQsIDk2ODUzLCA5Njg2MiwgCisgICAgOTY4NzQsIDk2ODgzLCA5Njg4NywgOTY4OTEsIDk2ODk1LCA5Njg5OSwgOTY5MDMsIDk2OTA3LCA5NjkxMSwgOTY5MTgsIAorICAgIDk2OTIyLCA5NjkyNiwgOTY5MzcsIDk2OTQxLCA5Njk0NSwgOTY5NTIsIDk2OTU4LCA5Njk2NCwgOTY5NjgsIDk2OTc1LCAKKyAgICA5Njk3OSwgOTY5ODMsIDk2OTg3LCA5Njk5MSwgOTY5OTUsIDk2OTk5LCA5NzAwNSwgOTcwMTMsIDk3MDE3LCA5NzAyMSwgCisgICAgOTcwMjQsIDk3MDMwLCA5NzA0MCwgOTcwNDQsIDk3MDU2LCA5NzA2MywgOTcwNzAsIDk3MDc3LCA5NzA4NCwgOTcwOTAsIAorICAgIDk3MDk0LCA5NzA5OCwgOTcxMDIsIDk3MTA2LCA5NzExMywgOTcxMjIsIDk3MTI5LCA5NzEzNywgOTcxNDUsIDk3MTUxLCAKKyAgICA5NzE1NSwgOTcxNTksIDk3MTYzLCA5NzE2NywgOTcxNzMsIDk3MTgyLCA5NzE5NCwgOTcyMDEsIDk3MjA4LCA5NzIxNywgCisgICAgOTcyMjgsIDk3MjM0LCA5NzI0MywgOTcyNTIsIDk3MjU5LCA5NzI2OCwgOTcyNzUsIDk3MjgyLCA5NzI5MiwgOTcyOTksIAorICAgIDk3MzA2LCA5NzMxMywgOTczMjAsIDk3MzI0LCA5NzMzMCwgOTczMzQsIDk3MzQ1LCA5NzM1MywgOTczNjIsIDk3Mzc0LCAKKyAgICA5NzM4MSwgOTczODgsIDk3Mzk4LCA5NzQwNSwgOTc0MTQsIDk3NDIxLCA5NzQzMCwgOTc0MzcsIDk3NDQ0LCA5NzQ1NCwgCisgICAgOTc0NjEsIDk3NDY4LCA5NzQ3OCwgOTc0ODUsIDk3NDk3LCA5NzUwNiwgOTc1MTMsIDk3NTIwLCA5NzUyNywgOTc1MzYsIAorICAgIDk3NTQ2LCA5NzU1OSwgOTc1NjYsIDk3NTc2LCA5NzU4NiwgOTc1OTMsIDk3NjAyLCA5NzYxNSwgOTc2MjIsIDk3NjI5LCAKKyAgICA5NzYzNiwgOTc2NDYsIDk3NjU2LCA5NzY2MywgOTc2NzMsIDk3NjgwLCA5NzY4NywgOTc2OTcsIDk3NzAzLCA5NzcxMCwgCisgICAgOTc3MTcsIDk3NzI0LCA5NzczNCwgOTc3NDEsIDk3NzQ4LCA5Nzc1NSwgOTc3NjEsIDk3NzY4LCA5Nzc3OCwgOTc3ODUsIAorICAgIDk3Nzg5LCA5Nzc5NywgOTc4MDEsIDk3ODEzLCA5NzgxNywgOTc4MzEsIDk3ODM1LCA5NzgzOSwgOTc4NDMsIDk3ODQ3LCAKKyAgICA5Nzg1MywgOTc4NjAsIDk3ODY4LCA5Nzg3MiwgOTc4NzYsIDk3ODgwLCA5Nzg4NCwgOTc4OTEsIDk3ODk1LCA5NzkwMSwgCisgICAgOTc5MDcsIDk3OTE1LCA5NzkxOSwgOTc5MjYsIDk3OTM0LCA5NzkzOCwgOTc5NDIsIDk3OTQ4LCA5Nzk1MiwgOTc5NjEsIAorICAgIDk3OTcwLCA5Nzk3NywgOTc5ODcsIDk3OTkzLCA5Nzk5NywgOTgwMDEsIDk4MDA5LCA5ODAxNiwgOTgwMjMsIDk4MDI5LCAKKyAgICA5ODAzMywgOTgwNDEsIDk4MDQ1LCA5ODA1MiwgOTgwNjQsIDk4MDcxLCA5ODA4MSwgOTgwODcsIDk4MDkxLCA5ODEwMCwgCisgICAgOTgxMDcsIDk4MTE2LCA5ODEyMCwgOTgxMjQsIDk4MTMxLCA5ODEzNSwgOTgxMzksIDk4MTQzLCA5ODE0NywgOTgxNTAsIAorICAgIDk4MTU2LCA5ODE2MiwgOTgxNjYsIDk4MTcwLCA5ODE3NywgOTgxODQsIDk4MTkxLCA5ODE5OCwgOTgyMDUsIDk4MjEyLCAKKyAgICA5ODIxOSwgOTgyMjYsIDk4MjMyLCA5ODIzNiwgOTgyNDAsIDk4MjQ3LCA5ODI1NCwgOTgyNjEsIDk4MjY4LCA5ODI3NSwgCisgICAgOTgyNzksIDk4MjgyLCA5ODI4NywgOTgyOTEsIDk4Mjk1LCA5ODMwNCwgOTgzMTMsIDk4MzE3LCA5ODMyMSwgOTgzMjcsIAorICAgIDk4MzMzLCA5ODM1MCwgOTgzNTYsIDk4MzYwLCA5ODM2OSwgOTgzNzMsIDk4Mzc3LCA5ODM4NCwgOTgzOTIsIDk4NDAwLCAKKyAgICA5ODQwNiwgOTg0MTAsIDk4NDE0LCA5ODQxOCwgOTg0MjIsIDk4NDI1LCA5ODQzMSwgOTg0MzgsIDk4NDQ4LCA5ODQ1NSwgCisgICAgOTg0NjIsIDk4NDY5LCA5ODQ3NSwgOTg0ODIsIDk4NDg5LCA5ODQ5NiwgOTg1MDMsIDk4NTEwLCA5ODUxOSwgOTg1MjYsIAorICAgIDk4NTM4LCA5ODU0NSwgOTg1NTIsIDk4NTYyLCA5ODU3MywgOTg1ODAsIDk4NTg3LCA5ODU5NCwgOTg2MDEsIDk4NjA4LCAKKyAgICA5ODYxNSwgOTg2MjIsIDk4NjI5LCA5ODYzNiwgOTg2NDMsIDk4NjUzLCA5ODY2MywgOTg2NzMsIDk4NjgwLCA5ODY5MCwgCisgICAgOTg2OTcsIDk4NzA0LCA5ODcxMSwgOTg3MTgsIDk4NzI0LCA5ODczMSwgOTg3MzgsIDk4NzQ1LCA5ODc1MiwgOTg3NTksIAorICAgIDk4NzY2LCA5ODc3MywgOTg3ODAsIDk4Nzg2LCA5ODc5MywgOTg4MDAsIDk4ODA5LCA5ODgxNiwgOTg4MjMsIDk4ODI3LCAKKyAgICA5ODgzNSwgOTg4MzksIDk4ODQzLCA5ODg0NywgOTg4NTEsIDk4ODU1LCA5ODg2MiwgOTg4NjYsIDk4ODc1LCA5ODg3OSwgCisgICAgOTg4ODYsIDk4ODk0LCA5ODg5OCwgOTg5MDIsIDk4OTA2LCA5ODkxOSwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NTAsIAorICAgIDk4OTU2LCA5ODk2MywgOTg5NjcsIDk4OTcxLCA5ODk3NSwgOTg5NzksIDk4OTgzLCA5ODk5MCwgOTg5OTQsIDk5MDEyLCAKKyAgICA5OTAxNiwgOTkwMjAsIDk5MDI3LCA5OTAzMSwgOTkwMzUsIDk5MDQxLCA5OTA0NSwgOTkwNDksIDk5MDU3LCA5OTA2MSwgCisgICAgOTkwNjUsIDk5MDY5LCA5OTA3MywgOTkwNzksIDk5MDkwLCA5OTA5OSwgOTkxMDgsIDk5MTE1LCA5OTEyMiwgOTkxMzMsIAorICAgIDk5MTQwLCA5OTE0NywgOTkxNTQsIDk5MTYxLCA5OTE2OCwgOTkxNzUsIDk5MTgyLCA5OTE5MiwgOTkxOTgsIDk5MjA1LCAKKyAgICA5OTIxNSwgOTkyMjQsIDk5MjMxLCA5OTI0MCwgOTkyNTAsIDk5MjU3LCA5OTI2NCwgOTkyNzEsIDk5Mjc4LCA5OTI5MCwgCisgICAgOTkyOTcsIDk5MzA0LCA5OTMxMSwgOTkzMTgsIDk5MzI1LCA5OTMzNSwgOTkzNDIsIDk5MzQ5LCA5OTM1OSwgOTkzNzIsIAorICAgIDk5Mzg0LCA5OTM5MSwgOTk0MDEsIDk5NDA4LCA5OTQxNSwgOTk0MjIsIDk5NDM2LCA5OTQ0MiwgOTk0NTAsIDk5NDYwLCAKKyAgICA5OTQ3MCwgOTk0NzcsIDk5NDg0LCA5OTQ5MCwgOTk0OTQsIDk5NTAxLCA5OTUxMSwgOTk1MTcsIDk5NTMwLCA5OTUzNCwgCisgICAgOTk1MzgsIDk5NTQ1LCA5OTU0OSwgOTk1NTYsIDk5NTY2LCA5OTU3MCwgOTk1NzQsIDk5NTc4LCA5OTU4MiwgOTk1ODYsIAorICAgIDk5NTkzLCA5OTU5NywgOTk2MDQsIDk5NjExLCA5OTYxOCwgOTk2MjcsIDk5NjM2LCA5OTY0NiwgOTk2NTMsIDk5NjYwLCAKKyAgICA5OTY2NywgOTk2NzcsIDk5Njg0LCA5OTY5NCwgOTk3MDEsIDk5NzExLCA5OTcxOCwgOTk3MjUsIDk5NzM1LCA5OTc0NSwgCisgICAgOTk3NTIsIDk5NzU4LCA5OTc2NiwgOTk3NzQsIDk5NzgwLCA5OTc4NiwgOTk3OTAsIDk5Nzk0LCA5OTgwMSwgOTk4MDksIAorICAgIDk5ODE1LCA5OTgxOSwgOTk4MjMsIDk5ODI3LCA5OTgzNCwgOTk4NDYsIDk5ODQ5LCA5OTg1NiwgOTk4NjIsIDk5ODY2LCAKKyAgICA5OTg3MCwgOTk4NzQsIDk5ODc4LCA5OTg4MiwgOTk4ODYsIDk5ODkwLCA5OTg5NCwgOTk4OTgsIDk5OTAyLCA5OTkwOSwgCisgICAgOTk5MTMsIDk5OTE5LCA5OTkyMywgOTk5MjcsIDk5OTMxLCA5OTkzNywgOTk5NDQsIDk5OTUxLCA5OTk1OCwgOTk5NjksIAorICAgIDk5OTc3LCA5OTk4MSwgOTk5ODcsIDk5OTk2LCAxMDAwMDMsIDEwMDAwOSwgMTAwMDEyLCAxMDAwMTYsIDEwMDAyMCwgCisgICAgMTAwMDI2LCAxMDAwMzUsIDEwMDA0MywgMTAwMDQ3LCAxMDAwNTMsIDEwMDA1NywgMTAwMDYxLCAxMDAwNjUsIDEwMDA3MSwgCisgICAgMTAwMDc4LCAxMDAwODQsIDEwMDA4OCwgMTAwMDk0LCAxMDAwOTgsIDEwMDEwMiwgMTAwMTExLCAxMDAxMjMsIDEwMDEyNywgCisgICAgMTAwMTM0LCAxMDAxNDEsIDEwMDE1MSwgMTAwMTU4LCAxMDAxNzAsIDEwMDE3NywgMTAwMTg0LCAxMDAxOTEsIDEwMDIwMiwgCisgICAgMTAwMjEyLCAxMDAyMjUsIDEwMDIzNSwgMTAwMjQyLCAxMDAyNDYsIDEwMDI1MCwgMTAwMjU0LCAxMDAyNTgsIDEwMDI2NywgCisgICAgMTAwMjc2LCAxMDAyODUsIDEwMDMwMiwgMTAwMzExLCAxMDAzMTcsIDEwMDMyNCwgMTAwMzMyLCAxMDAzNDUsIDEwMDM0OSwgCisgICAgMTAwMzU4LCAxMDAzNjcsIDEwMDM3NiwgMTAwMzg1LCAxMDAzOTYsIDEwMDQwNSwgMTAwNDE0LCAxMDA0MjMsIDEwMDQzMiwgCisgICAgMTAwNDQxLCAxMDA0NTAsIDEwMDQ2MCwgMTAwNDYzLCAxMDA0NjcsIDEwMDQ3MSwgMTAwNDc1LCAxMDA0NzksIDEwMDQ4MywgCisgICAgMTAwNDg5LCAxMDA0OTYsIDEwMDUwMywgMTAwNTEwLCAxMDA1MTYsIDEwMDUyMiwgMTAwNTI5LCAxMDA1MzUsIDEwMDU0MiwgCisgICAgMTAwNTUwLCAxMDA1NTQsIDEwMDU2MSwgMTAwNTY4LCAxMDA1NzUsIDEwMDU4MywgMTAwNTg2LCAxMDA1OTAsIDEwMDU5NCwgCisgICAgMTAwNTk4LCAxMDA2MDEsIDEwMDYwNywgMTAwNjExLCAxMDA2MTcsIDEwMDYyNCwgMTAwNjMxLCAxMDA2MzcsIDEwMDY0NCwgCisgICAgMTAwNjUxLCAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgCisgICAgMTAwNzE0LCAxMDA3MjEsIDEwMDcyOCwgMTAwNzM1LCAxMDA3NDEsIDEwMDc0NSwgMTAwNzU0LCAxMDA3NTgsIDEwMDc2MiwgCisgICAgMTAwNzY2LCAxMDA3NzAsIDEwMDc3NiwgMTAwNzgzLCAxMDA3OTAsIDEwMDc5NywgMTAwODA0LCAxMDA4MTEsIDEwMDgxNywgCisgICAgMTAwODI1LCAxMDA4MjksIDEwMDgzMywgMTAwODM3LCAxMDA4NDEsIDEwMDg0NywgMTAwODY0LCAxMDA4ODEsIDEwMDg4NSwgCisgICAgMTAwODg5LCAxMDA4OTMsIDEwMDg5NywgMTAwOTAxLCAxMDA5MDUsIDEwMDkxMSwgMTAwOTE4LCAxMDA5MjIsIDEwMDkyOCwgCisgICAgMTAwOTM1LCAxMDA5NDIsIDEwMDk0OSwgMTAwOTU2LCAxMDA5NjMsIDEwMDk3MiwgMTAwOTc5LCAxMDA5ODYsIDEwMDk5MywgCisgICAgMTAxMDAwLCAxMDEwMDQsIDEwMTAwOCwgMTAxMDE0LCAxMDEwMjYsIDEwMTAzMCwgMTAxMDM0LCAxMDEwNDMsIDEwMTA0NywgCisgICAgMTAxMDUxLCAxMDEwNTUsIDEwMTA2MSwgMTAxMDY1LCAxMDEwNjksIDEwMTA3OCwgMTAxMDgyLCAxMDEwODYsIDEwMTA5MCwgCisgICAgMTAxMDk3LCAxMDExMDEsIDEwMTEwNSwgMTAxMTA5LCAxMDExMTMsIDEwMTExNywgMTAxMTIxLCAxMDExMjUsIDEwMTEyOSwgCisgICAgMTAxMTM1LCAxMDExNDIsIDEwMTE0OSwgMTAxMTU1LCAxMDExNTksIDEwMTE3NiwgMTAxMTgyLCAxMDExODYsIDEwMTE5MiwgCisgICAgMTAxMTk4LCAxMDEyMDQsIDEwMTIxMCwgMTAxMjE2LCAxMDEyMjIsIDEwMTIyNiwgMTAxMjMwLCAxMDEyMzQsIDEwMTI0MCwgCisgICAgMTAxMjQ0LCAxMDEyNTAsIDEwMTI1NCwgMTAxMjU4LCAxMDEyNjUsIDEwMTI3MiwgMTAxMjg5LCAxMDEyOTMsIDEwMTI5NywgCisgICAgMTAxMzAxLCAxMDEzMDUsIDEwMTMwOSwgMTAxMzIxLCAxMDEzMjQsIDEwMTMyOSwgMTAxMzM0LCAxMDEzNDksIDEwMTM1OSwgCisgICAgMTAxMzcxLCAxMDEzNzUsIDEwMTM3OSwgMTAxMzgzLCAxMDEzODksIDEwMTM5NiwgMTAxNDAzLCAxMDE0MTMsIDEwMTQyNSwgCisgICAgMTAxNDMxLCAxMDE0MzcsIDEwMTQ0NiwgMTAxNDUwLCAxMDE0NTQsIDEwMTQ2MSwgMTAxNDcxLCAxMDE0NzgsIDEwMTQ4NCwgCisgICAgMTAxNDg4LCAxMDE0OTIsIDEwMTQ5OSwgMTAxNTA1LCAxMDE1MDksIDEwMTUxNSwgMTAxNTE5LCAxMDE1MjcsIDEwMTUzMywgCisgICAgMTAxNTM3LCAxMDE1NDUsIDEwMTU1MywgMTAxNTYwLCAxMDE1NjYsIDEwMTU3MywgMTAxNTgwLCAxMDE1OTAsIDEwMTYwMCwgCisgICAgMTAxNjA0LCAxMDE2MDgsIDEwMTYxMiwgMTAxNjE2LCAxMDE2MjIsIDEwMTYyOSwgMTAxNjM1LCAxMDE2NDIsIDEwMTY0OSwgCisgICAgMTAxNjU2LCAxMDE2NjUsIDEwMTY3MiwgMTAxNjc5LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDYsIDEwMTcxMywgCisgICAgMTAxNzIwLCAxMDE3MjcsIDEwMTczMywgMTAxNzQwLCAxMDE3NDcsIDEwMTc1NCwgMTAxNzYzLCAxMDE3NzAsIDEwMTc3NywgCisgICAgMTAxNzgxLCAxMDE3ODcsIDEwMTc5MSwgMTAxNzk3LCAxMDE4MDQsIDEwMTgxMSwgMTAxODE4LCAxMDE4MjIsIDEwMTgyNiwgCisgICAgMTAxODMwLCAxMDE4MzQsIDEwMTgzOCwgMTAxODQ1LCAxMDE4NDksIDEwMTg1MywgMTAxODU5LCAxMDE4NjcsIDEwMTg3MSwgCisgICAgMTAxODc1LCAxMDE4NzksIDEwMTg4MywgMTAxODkwLCAxMDE4OTQsIDEwMTg5OCwgMTAxOTA2LCAxMDE5MTAsIDEwMTkxNCwgCisgICAgMTAxOTE4LCAxMDE5MjIsIDEwMTkyOCwgMTAxOTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDE5MzYsIDEwMTk0MiwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY5LCAxMDE5NzYsIDEwMTk4MywgCisgICAgMTAxOTkwLCAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTcsIDEwMjAyNCwgMTAyMDMxLCAxMDIwMzgsIDEwMjA0NCwgCisgICAgMTAyMDUwLCAxMDIwNTYsIDEwMjA2MiwgMTAyMDY4LCAxMDIwNzQsIDEwMjA4MCwgMTAyMDg2LCAxMDIwOTIsIDEwMjA5OSwgCisgICAgMTAyMTA2LCAxMDIxMTMsIDEwMjEyMCwgMTAyMTI3LCAxMDIxMzQsIDEwMjE0MCwgMTAyMTQ2LCAxMDIxNTIsIDEwMjE1OSwgCisgICAgMTAyMTY2LCAxMDIxNzIsIDEwMjE3OCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA4LCAxMDIyMTUsIDEwMjIyMiwgCisgICAgMTAyMjI5LCAxMDIyMzUsIDEwMjI0MSwgMTAyMjQ3LCAxMDIyNTYsIDEwMjI2MywgMTAyMjcwLCAxMDIyODEsIDEwMjI5MiwgCisgICAgMTAyMjk4LCAxMDIzMDQsIDEwMjMxMCwgMTAyMzE5LCAxMDIzMjYsIDEwMjMzMywgMTAyMzQzLCAxMDIzNTMsIDEwMjM2NCwgCisgICAgMTAyMzc1LCAxMDIzODcsIDEwMjQwMCwgMTAyNDExLCAxMDI0MjIsIDEwMjQzNCwgMTAyNDQ3LCAxMDI0NTgsIDEwMjQ2OSwgCisgICAgMTAyNDgwLCAxMDI0OTEsIDEwMjUwMiwgMTAyNTE0LCAxMDI1MjIsIDEwMjUzMCwgMTAyNTM5LCAxMDI1NDgsIDEwMjU1NywgCisgICAgMTAyNTYzLCAxMDI1NjksIDEwMjU3NSwgMTAyNTgyLCAxMDI1OTIsIDEwMjU5OSwgMTAyNjA5LCAxMDI2MTQsIDEwMjYxOSwgCisgICAgMTAyNjI1LCAxMDI2MzEsIDEwMjYzOSwgMTAyNjQ3LCAxMDI2NTYsIDEwMjY2NywgMTAyNjc4LCAxMDI2ODYsIDEwMjY5NCwgCisgICAgMTAyNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI3MTIsIDEwMjcyMywgMTAyNzMwLCAKKyAgICAxMDI3MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjc0NiwgMTAyNzUwLCAxMDI3NTQsIAorICAgIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAxMDI3OTAsIAorICAgIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAxMDI4MjYsIAorICAgIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAxMDI4NjIsIAorICAgIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAxMDI4OTgsIAorICAgIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAxMDI5MzQsIAorICAgIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAxMDI5NzAsIAorICAgIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAxMDMwMDYsIAorICAgIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAxMDMwNDIsIAorICAgIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAxMDMwNzgsIAorICAgIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAxMDMxMTQsIAorICAgIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAxMDMxNTAsIAorICAgIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAxMDMxODYsIAorICAgIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAxMDMyMjIsIAorICAgIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAxMDMyNTgsIAorICAgIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAxMDMyOTQsIAorICAgIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAxMDMzMzAsIAorICAgIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAxMDMzNjYsIAorICAgIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAxMDM0MDIsIAorICAgIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAxMDM0MzgsIAorICAgIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAxMDM0NzQsIAorICAgIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAxMDM1MTAsIAorICAgIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAxMDM1NDYsIAorICAgIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAxMDM1ODIsIAorICAgIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAxMDM2MTgsIAorICAgIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAxMDM2NTQsIAorICAgIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAxMDM2OTAsIAorICAgIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAxMDM3MjYsIAorICAgIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAxMDM3NjIsIAorICAgIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAxMDM3OTgsIAorICAgIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAxMDM4MzQsIAorICAgIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAxMDM4NzAsIAorICAgIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAxMDM5MDYsIAorICAgIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAxMDM5NDIsIAorICAgIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAxMDM5NzgsIAorICAgIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAxMDQwMTQsIAorICAgIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAxMDQwNTAsIAorICAgIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAxMDQwODYsIAorICAgIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAxMDQxMjIsIAorICAgIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAxMDQxNTgsIAorICAgIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAxMDQxOTQsIAorICAgIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAxMDQyMzAsIAorICAgIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAxMDQyNjYsIAorICAgIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAxMDQzMDIsIAorICAgIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAxMDQzMzgsIAorICAgIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAxMDQzNzQsIAorICAgIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAxMDQ0MTAsIAorICAgIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAxMDQ0NDYsIAorICAgIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAxMDQ0ODIsIAorICAgIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAxMDQ1MTgsIAorICAgIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAxMDQ1NTQsIAorICAgIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAxMDQ1OTAsIAorICAgIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAxMDQ2MjYsIAorICAgIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAxMDQ2NjIsIAorICAgIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAxMDQ2OTgsIAorICAgIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAxMDQ3MzQsIAorICAgIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAxMDQ3NzAsIAorICAgIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAxMDQ4MDYsIAorICAgIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAxMDQ4NDIsIAorICAgIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAxMDQ4NzgsIAorICAgIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAxMDQ5MTQsIAorICAgIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAxMDQ5NTAsIAorICAgIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAxMDQ5ODYsIAorICAgIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAxMDUwMjIsIAorICAgIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAxMDUwNTgsIAorICAgIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAxMDUwOTQsIAorICAgIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAxMDUxMzAsIAorICAgIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAxMDUxNjYsIAorICAgIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAxMDUyMDIsIAorICAgIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAxMDUyMzgsIAorICAgIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAxMDUyNzQsIAorICAgIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAxMDUzMTAsIAorICAgIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAxMDUzNDYsIAorICAgIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAxMDUzODIsIAorICAgIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAxMDU0MTgsIAorICAgIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAxMDU0NTQsIAorICAgIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAxMDU0OTAsIAorICAgIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAxMDU1MjYsIAorICAgIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAxMDU1NjIsIAorICAgIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAxMDU1OTgsIAorICAgIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAxMDU2MzQsIAorICAgIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAxMDU2NzAsIAorICAgIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAxMDU3MDYsIAorICAgIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAxMDU3NDIsIAorICAgIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAxMDU3NzgsIAorICAgIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAxMDU4MTQsIAorICAgIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAxMDU4NTAsIAorICAgIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAxMDU4ODYsIAorICAgIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAxMDU5MjIsIAorICAgIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAxMDU5NTgsIAorICAgIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAxMDU5OTQsIAorICAgIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAxMDYwMzAsIAorICAgIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAxMDYwNjYsIAorICAgIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAxMDYxMDIsIAorICAgIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAxMDYxMzgsIAorICAgIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAxMDYxNzQsIAorICAgIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAxMDYyMTAsIAorICAgIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAxMDYyNDYsIAorICAgIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAxMDYyODIsIAorICAgIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAxMDYzMTgsIAorICAgIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAxMDYzNTQsIAorICAgIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAxMDYzOTAsIAorICAgIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAxMDY0MjYsIAorICAgIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAxMDY0NjIsIAorICAgIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAxMDY0OTgsIAorICAgIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAxMDY1MzQsIAorICAgIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAxMDY1NzAsIAorICAgIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAxMDY2MDYsIAorICAgIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAxMDY2NDIsIAorICAgIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAxMDY2NzgsIAorICAgIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAxMDY3MTQsIAorICAgIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAxMDY3NTAsIAorICAgIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAxMDY3ODYsIAorICAgIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAxMDY4MjIsIAorICAgIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAxMDY4NTgsIAorICAgIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAxMDY4OTQsIAorICAgIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAxMDY5MzAsIAorICAgIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAxMDY5NjYsIAorICAgIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAxMDcwMDIsIAorICAgIDEwNzAwNiwgMTA3MDEwLCAxMDcwMTQsIDEwNzAxOCwgMTA3MDIyLCAxMDcwMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEwNzAzMCwgMTA3MDM3LCAxMDcwNDQsIDEwNzA1MywgMTA3MDYyLCAxMDcwNjksIDEwNzA3NCwgMTA3MDgxLCAKKyAgICAxMDcwODgsIDEwNzA5NywgMTA3MTA4LCAxMDcxMTksIDEwNzEyNCwgMTA3MTMxLCAxMDcxMzYsIDEwNzE0MSwgMTA3MTQ2LCAKKyAgICAxMDcxNTEsIDEwNzE1NiwgMTA3MTYxLCAxMDcxNjYsIDEwNzE3MSwgMTA3MTc2LCAxMDcxODEsIDEwNzE4NiwgMTA3MTkzLCAKKyAgICAxMDcyMDAsIDEwNzIwNSwgMTA3MjEwLCAxMDcyMTUsIDEwNzIyMCwgMTA3MjI3LCAxMDcyMzQsIDEwNzI0MiwgMTA3MjQ3LCAKKyAgICAxMDcyNTQsIDEwNzI1OSwgMTA3MjY0LCAxMDcyNjksIDEwNzI3NCwgMTA3Mjc5LCAxMDcyODYsIDEwNzI5MywgMTA3Mjk4LCAKKyAgICAxMDczMDMsIDEwNzMwOCwgMTA3MzEzLCAxMDczMTgsIDEwNzMyMywgMTA3MzI4LCAxMDczMzMsIDEwNzMzOCwgMTA3MzQzLCAKKyAgICAxMDczNDgsIDEwNzM1MywgMTA3MzU4LCAxMDczNjMsIDEwNzM2OCwgMTA3MzczLCAxMDczNzgsIDEwNzM4MywgMTA3Mzg4LCAKKyAgICAxMDczOTUsIDEwNzQwMCwgMTA3NDA1LCAxMDc0MTQsIDEwNzQyMSwgMTA3NDI2LCAxMDc0MzEsIDEwNzQzNiwgMTA3NDQxLCAKKyAgICAxMDc0NDYsIDEwNzQ1MSwgMTA3NDU2LCAxMDc0NjEsIDEwNzQ2NiwgMTA3NDcxLCAxMDc0NzYsIDEwNzQ4MSwgMTA3NDg2LCAKKyAgICAxMDc0OTEsIDEwNzQ5NiwgMTA3NTAxLCAxMDc1MDYsIDEwNzUxMSwgMTA3NTE2LCAxMDc1MjEsIDEwNzUyNiwgMTA3NTMyLCAKKyAgICAxMDc1NDAsIDEwNzU0NiwgMTA3NTU0LCAxMDc1NjIsIDEwNzU3MCwgMTA3NTc2LCAxMDc1ODIsIDEwNzU4OCwgMTA3NTk0LCAKKyAgICAxMDc2MDAsIDEwNzYwOCwgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDYsIDEwNzY1NCwgMTA3NjYyLCAKKyAgICAxMDc2NjgsIDEwNzY3NiwgMTA3Njg0LCAxMDc2OTIsIDEwNzY5OCwgMTA3NzA0LCAxMDc3MTAsIDEwNzcxNiwgMTA3NzIyLCAKKyAgICAxMDc3MjgsIDEwNzczNiwgMTA3NzQ0LCAxMDc3NTAsIDEwNzc1NiwgMTA3NzYyLCAxMDc3NjgsIDEwNzc3NCwgMTA3NzgyLCAKKyAgICAxMDc3ODgsIDEwNzc5NCwgMTA3ODAwLCAxMDc4MDYsIDEwNzgxMiwgMTA3ODE4LCAxMDc4MjYsIDEwNzgzMiwgMTA3ODM4LCAKKyAgICAxMDc4NDQsIDEwNzg1MCwgMTA3ODU4LCAxMDc4NjYsIDEwNzg3MiwgMTA3ODc4LCAxMDc4ODQsIDEwNzg4OSwgMTA3ODk1LCAKKyAgICAxMDc5MDEsIDEwNzkwOCwgMTA3OTEzLCAxMDc5MTgsIDEwNzkyMywgMTA3OTI4LCAxMDc5MzMsIDEwNzkzOCwgMTA3OTQzLCAKKyAgICAxMDc5NDgsIDEwNzk1MywgMTA3OTYyLCAxMDc5NjksIDEwNzk3NCwgMTA3OTc5LCAxMDc5ODQsIDEwNzk5MSwgMTA3OTk2LCAKKyAgICAxMDgwMDEsIDEwODAwNiwgMTA4MDEzLCAxMDgwMTgsIDEwODAyMywgMTA4MDI4LCAxMDgwMzMsIDEwODAzOCwgMTA4MDQzLCAKKyAgICAxMDgwNDgsIDEwODA1MywgMTA4MDU4LCAxMDgwNjMsIDEwODA2OCwgMTA4MDc1LCAxMDgwODAsIDEwODA4NywgMTA4MDkyLCAKKyAgICAxMDgwOTcsIDEwODEwNCwgMTA4MTA5LCAxMDgxMTQsIDEwODExOSwgMTA4MTI0LCAxMDgxMjksIDEwODEzNCwgMTA4MTM5LCAKKyAgICAxMDgxNDQsIDEwODE0OSwgMTA4MTU0LCAxMDgxNTksIDEwODE2NCwgMTA4MTY5LCAxMDgxNzQsIDEwODE3OSwgMTA4MTg0LCAKKyAgICAxMDgxODksIDEwODE5NCwgMTA4MTk5LCAxMDgyMDYsIDEwODIxMSwgMTA4MjE2LCAxMDgyMjEsIDEwODIyNiwgMTA4MjMxLCAKKyAgICAxMDgyMzYsIDEwODI0MSwgMTA4MjQ2LCAxMDgyNTEsIDEwODI1NiwgMTA4MjYxLCAxMDgyNjYsIDEwODI3MSwgMTA4Mjc4LCAKKyAgICAxMDgyODMsIDEwODI4OCwgMTA4Mjk1LCAxMDgzMDAsIDEwODMwNSwgMTA4MzEwLCAxMDgzMTUsIDEwODMyMCwgMTA4MzI1LCAKKyAgICAxMDgzMzAsIDEwODMzNSwgMTA4MzQwLCAxMDgzNDUsIDEwODM1MiwgMTA4MzU3LCAxMDgzNjIsIDEwODM2NywgMTA4MzcyLCAKKyAgICAxMDgzNzcsIDEwODM4NCwgMTA4MzkxLCAxMDgzOTYsIDEwODQwMSwgMTA4NDA2LCAxMDg0MTEsIDEwODQxNiwgMTA4NDIxLCAKKyAgICAxMDg0MjYsIDEwODQzMSwgMTA4NDM2LCAxMDg0NDEsIDEwODQ0NiwgMTA4NDUxLCAxMDg0NTYsIDEwODQ2MSwgMTA4NDY2LCAKKyAgICAxMDg0NzEsIDEwODQ3NiwgMTA4NDgxLCAxMDg0ODYsIDEwODQ5MSwgMTA4NDk2LCAxMDg1MDEsIDEwODUwNiwgMTA4NTExLCAKKyAgICAxMDg1MTYsIDEwODUyMSwgMTA4NTI2LCAxMDg1MzEsIDEwODUzNiwgMTA4NTQxLCAxMDg1NDYsIDEwODU1MSwgMTA4NTU2LCAKKyAgICAxMDg1NjEsIDEwODU2NiwgMTA4NTcxLCAxMDg1NzgsIDEwODU4MywgMTA4NTg4LCAxMDg1OTMsIDEwODU5OCwgMTA4NjAzLCAKKyAgICAxMDg2MDgsIDEwODYxMywgMTA4NjE4LCAxMDg2MjMsIDEwODYyOCwgMTA4NjMzLCAxMDg2MzgsIDEwODY0MywgMTA4NjQ4LCAKKyAgICAxMDg2NTMsIDEwODY1OCwgMTA4NjYzLCAxMDg2NjgsIDEwODY3MywgMTA4Njc4LCAxMDg2ODMsIDEwODY4OCwgMTA4NjkzLCAKKyAgICAxMDg2OTgsIDEwODcwMywgMTA4NzA4LCAxMDg3MTMsIDEwODcxOCwgMTA4NzIzLCAxMDg3MjgsIDEwODczMywgMTA4NzM4LCAKKyAgICAxMDg3NDMsIDEwODc0OCwgMTA4NzUzLCAxMDg3NTgsIDEwODc2MywgMTA4NzY4LCAxMDg3NzMsIDEwODc3OCwgMTA4NzgzLCAKKyAgICAxMDg3ODgsIDEwODc5MywgMTA4Nzk4LCAxMDg4MDMsIDEwODgwOCwgMTA4ODEzLCAxMDg4MTgsIDEwODgyMywgMTA4ODI4LCAKKyAgICAxMDg4MzMsIDEwODgzOCwgMTA4ODQzLCAxMDg4NDgsIDEwODg1MywgMTA4ODU4LCAxMDg4NjMsIDEwODg2OCwgMTA4ODc1LCAKKyAgICAxMDg4ODAsIDEwODg4NSwgMTA4ODkwLCAxMDg4OTUsIDEwODkwMCwgMTA4OTA1LCAxMDg5MDksIDEwODkxNCwgMTA4OTE5LCAKKyAgICAxMDg5MjQsIDEwODkyOSwgMTA4OTM0LCAxMDg5MzksIDEwODk0NCwgMTA4OTQ5LCAxMDg5NTQsIDEwODk1OSwgMTA4OTY0LCAKKyAgICAxMDg5NjksIDEwODk3NCwgMTA4OTc5LCAxMDg5ODYsIDEwODk5MSwgMTA4OTk2LCAxMDkwMDIsIDEwOTAwNywgMTA5MDEyLCAKKyAgICAxMDkwMTcsIDEwOTAyMiwgMTA5MDI3LCAxMDkwMzIsIDEwOTAzNywgMTA5MDQyLCAxMDkwNDcsIDEwOTA1MiwgMTA5MDU3LCAKKyAgICAxMDkwNjIsIDEwOTA2NywgMTA5MDcyLCAxMDkwNzcsIDEwOTA4MiwgMTA5MDg3LCAxMDkwOTIsIDEwOTA5NywgMTA5MTAyLCAKKyAgICAxMDkxMDcsIDEwOTExMiwgMTA5MTE3LCAxMDkxMjIsIDEwOTEyNywgMTA5MTMyLCAxMDkxMzcsIDEwOTE0MiwgMTA5MTQ3LCAKKyAgICAxMDkxNTIsIDEwOTE1NywgMTA5MTYyLCAxMDkxNjcsIDEwOTE3MiwgMTA5MTc3LCAxMDkxODIsIDEwOTE4NywgMTA5MTkyLCAKKyAgICAxMDkxOTcsIDEwOTIwMiwgMTA5MjA3LCAxMDkyMTIsIDEwOTIxNywgMTA5MjI0LCAxMDkyMjksIDEwOTIzNCwgMTA5MjQxLCAKKyAgICAxMDkyNDgsIDEwOTI1MywgMTA5MjU4LCAxMDkyNjMsIDEwOTI2OCwgMTA5MjczLCAxMDkyNzgsIDEwOTI4MywgMTA5Mjg4LCAKKyAgICAxMDkyOTMsIDEwOTI5OCwgMTA5MzAzLCAxMDkzMDgsIDEwOTMxMywgMTA5MzE4LCAxMDkzMjMsIDEwOTMyOCwgMTA5MzMzLCAKKyAgICAxMDkzMzgsIDEwOTM0MywgMTA5MzQ4LCAxMDkzNTMsIDEwOTM1OCwgMTA5MzYzLCAxMDkzNjgsIDEwOTM3MywgMTA5MzgwLCAKKyAgICAxMDkzODUsIDEwOTM5MCwgMTA5Mzk1LCAxMDk0MDAsIDEwOTQwNSwgMTA5NDEwLCAxMDk0MTUsIDEwOTQyMCwgMTA5NDI1LCAKKyAgICAxMDk0MzAsIDEwOTQzNSwgMTA5NDQwLCAxMDk0NDUsIDEwOTQ1MCwgMTA5NDU1LCAxMDk0NjAsIDEwOTQ2NSwgMTA5NDcwLCAKKyAgICAxMDk0NzcsIDEwOTQ4MiwgMTA5NDg3LCAxMDk0OTIsIDEwOTQ5NywgMTA5NTAyLCAxMDk1MDcsIDEwOTUxMiwgMTA5NTE4LCAKKyAgICAxMDk1MjMsIDEwOTUyOCwgMTA5NTMzLCAxMDk1MzgsIDEwOTU0MywgMTA5NTQ4LCAxMDk1NTMsIDEwOTU1OCwgMTA5NTY1LCAKKyAgICAxMDk1NzIsIDEwOTU3NywgMTA5NTgyLCAxMDk1ODYsIDEwOTU5MSwgMTA5NTk1LCAxMDk1OTksIDEwOTYwNCwgMTA5NjExLCAKKyAgICAxMDk2MTYsIDEwOTYyMSwgMTA5NjMwLCAxMDk2MzUsIDEwOTY0MCwgMTA5NjQ1LCAxMDk2NTAsIDEwOTY1NywgMTA5NjY0LCAKKyAgICAxMDk2NjksIDEwOTY3NCwgMTA5Njc5LCAxMDk2ODQsIDEwOTY5MSwgMTA5Njk2LCAxMDk3MDEsIDEwOTcwNiwgMTA5NzExLCAKKyAgICAxMDk3MTYsIDEwOTcyMSwgMTA5NzI2LCAxMDk3MzEsIDEwOTczNiwgMTA5NzQxLCAxMDk3NDYsIDEwOTc1MSwgMTA5NzU4LCAKKyAgICAxMDk3NjIsIDEwOTc2NywgMTA5NzcyLCAxMDk3NzcsIDEwOTc4MiwgMTA5Nzg2LCAxMDk3OTEsIDEwOTc5NiwgMTA5ODAxLCAKKyAgICAxMDk4MDYsIDEwOTgxMSwgMTA5ODE2LCAxMDk4MjEsIDEwOTgyNiwgMTA5ODMxLCAxMDk4MzcsIDEwOTg0MywgMTA5ODQ5LCAKKyAgICAxMDk4NTUsIDEwOTg2MSwgMTA5ODY3LCAxMDk4NzMsIDEwOTg3OSwgMTA5ODg1LCAxMDk4OTEsIDEwOTg5NywgMTA5OTAzLCAKKyAgICAxMDk5MDgsIDEwOTkxNCwgMTA5OTIwLCAxMDk5MjYsIDEwOTkzMiwgMTA5OTM4LCAxMDk5NDQsIDEwOTk1MCwgMTA5OTU2LCAKKyAgICAxMDk5NjIsIDEwOTk2OCwgMTA5OTc0LCAxMDk5NzksIDEwOTk4NSwgMTA5OTkxLCAxMDk5OTcsIDExMDAwMywgMTEwMDA5LCAKKyAgICAxMTAwMTUsIDExMDAyMSwgMTEwMDI3LCAxMTAwMzMsIDExMDAzOSwgMTEwMDQ1LCAxMTAwNTEsIDExMDA1NywgMTEwMDYzLCAKKyAgICAxMTAwNjksIDExMDA3NSwgMTEwMDgxLCAxMTAwODcsIDExMDA5MywgMTEwMDk5LCAxMTAxMDQsIDExMDExMCwgMTEwMTE2LCAKKyAgICAxMTAxMjIsIDExMDEyOCwgMTEwMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAxNDAsIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgMTEwMTU4LCAKKyAgICAxMTAxNjIsIDExMDE2NywgMTEwMTcxLCAxMTAxNzUsIDExMDE3OSwgMTEwMTgzLCAxMTAxODcsIDExMDE5MiwgMTEwMTk3LCAKKyAgICAxMTAyMDEsIDExMDIwNSwgMTEwMjA4LCAxMTAyMTIsIDExMDIxNywgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgMTEwMjM0LCAKKyAgICAxMTAyMzgsIDExMDI0MiwgMTEwMjQ2LCAxMTAyNTAsIDExMDI1NCwgMTEwMjU4LCAxMTAyNjIsIDExMDI2NSwgMTEwMjY5LCAKKyAgICAxMTAyNzMsIDExMDI3NywgMTEwMjgxLCAxMTAyODUsIDExMDI4OSwgMTEwMjk1LCAxMTAyOTgsIDExMDMwMiwgMTEwMzA2LCAKKyAgICAxMTAzMTAsIDExMDMxNCwgMTEwMzE4LCAxMTAzMjIsIDExMDMyNiwgMTEwMzMwLCAxMTAzMzQsIDExMDMzOSwgMTEwMzQ0LCAKKyAgICAxMTAzNTAsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzQsIDExMDM3OSwgMTEwMzgyLCAKKyAgICAxMTAzODYsIDExMDM5MCwgMTEwMzk0LCAxMTAzOTgsIDExMDQwNCwgMTEwNDA4LCAxMTA0MTIsIDExMDQxNiwgMTEwNDIwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA0MjQsIDExMDQyOCwgMTEwNDMyLCAxMTA0MzgsIDExMDQ0NCwgCisgICAgMTEwNDQ4LCAxMTA0NTMsIDExMDQ1OCwgMTEwNDYzLCAxMTA0NjgsIDExMDQ3MiwgMTEwNDc3LCAxMTA0ODIsIDExMDQ4NywgCisgICAgMTEwNDkxLCAxMTA0OTYsIDExMDUwMSwgMTEwNTA2LCAxMTA1MTAsIDExMDUxNSwgMTEwNTIwLCAxMTA1MjUsIDExMDUzMCwgCisgICAgMTEwNTM1LCAxMTA1NDAsIDExMDU0NSwgMTEwNTUwLCAxMTA1NTQsIDExMDU1OSwgMTEwNTY0LCAxMTA1NjksIDExMDU3NCwgCisgICAgMTEwNTc5LCAxMTA1ODQsIDExMDU4OSwgMTEwNTk0LCAxMTA1OTksIDExMDYwNCwgMTEwNjA5LCAxMTA2MTYsIDExMDYyMSwgCisgICAgMTEwNjI4LCAxMTA2MzMsIDExMDYzOCwgMTEwNjQzLCAxMTA2NDgsIDExMDY1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2OCwgMTEwNjcxLCAxMTA2NzQsIDExMDY3OCwgCisgICAgMTEwNjgyLCAxMTA2ODYsIDExMDY5MCwgMTEwNjk0LCAxMTA2OTgsIDExMDcwMiwgMTEwNzA4LCAxMTA3MTQsIDExMDcyMCwgCisgICAgMTEwNzI2LCAxMTA3MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDExMDczOCwgMTEwNzQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3NDksIDExMDc1NCwgMTEwNzU5LCAKKyAgICAxMTA3NjQsIDExMDc3MSwgMTEwNzc4LCAxMTA3ODUsIDExMDc5MiwgMTEwNzk3LCAxMTA4MDIsIDExMDgwNywgMTEwODEyLCAKKyAgICAxMTA4MTksIDExMDgyNCwgMTEwODMxLCAxMTA4MzgsIDExMDg0MywgMTEwODQ4LCAxMTA4NTMsIDExMDg2MCwgMTEwODY1LCAKKyAgICAxMTA4NzAsIDExMDg3NywgMTEwODg0LCAxMTA4ODksIDExMDg5NCwgMTEwODk5LCAxMTA5MDYsIDExMDkxMywgMTEwOTIwLCAKKyAgICAxMTA5MjUsIDExMDkzMCwgMTEwOTM3LCAxMTA5NDQsIDExMDk1MSwgMTEwOTU4LCAxMTA5NjMsIDExMDk2OCwgMTEwOTczLCAKKyAgICAxMTA5ODAsIDExMDk4NSwgMTEwOTkwLCAxMTA5OTUsIDExMTAwMiwgMTExMDExLCAxMTEwMTgsIDExMTAyMywgMTExMDI4LCAKKyAgICAxMTEwMzMsIDExMTAzOCwgMTExMDQzLCAxMTEwNDgsIDExMTA1NywgMTExMDY0LCAxMTEwNjksIDExMTA3NiwgMTExMDgzLCAKKyAgICAxMTEwODgsIDExMTA5MywgMTExMDk4LCAxMTExMDUsIDExMTExMCwgMTExMTE3LCAxMTExMjQsIDExMTEyOSwgMTExMTM0LCAKKyAgICAxMTExMzksIDExMTE0NiwgMTExMTUzLCAxMTExNTgsIDExMTE2MywgMTExMTcwLCAxMTExNzcsIDExMTE4NCwgMTExMTg5LCAKKyAgICAxMTExOTQsIDExMTE5OSwgMTExMjA0LCAxMTEyMTEsIDExMTIyMCwgMTExMjI5LCAxMTEyMzQsIDExMTI0MSwgMTExMjUwLCAKKyAgICAxMTEyNTUsIDExMTI2MCwgMTExMjY1LCAxMTEyNzAsIDExMTI3NywgMTExMjg0LCAxMTEyOTEsIDExMTI5OCwgMTExMzAzLCAKKyAgICAxMTEzMDgsIDExMTMxMywgMTExMzIwLCAxMTEzMjcsIDExMTMzNCwgMTExMzM5LCAxMTEzNDQsIDExMTM1MSwgMTExMzU2LCAKKyAgICAxMTEzNjMsIDExMTM2OCwgMTExMzc1LCAxMTEzODAsIDExMTM4NywgMTExMzk0LCAxMTEzOTksIDExMTQwNCwgMTExNDA5LCAKKyAgICAxMTE0MTQsIDExMTQxOSwgMTExNDI0LCAxMTE0MjksIDExMTQzNCwgMTExNDM5LCAxMTE0NDYsIDExMTQ1MywgMTExNDYwLCAKKyAgICAxMTE0NjcsIDExMTQ3NCwgMTExNDgzLCAxMTE0ODgsIDExMTQ5MywgMTExNTAwLCAxMTE1MDcsIDExMTUxMiwgMTExNTE5LCAKKyAgICAxMTE1MjYsIDExMTUzMywgMTExNTQwLCAxMTE1NDcsIDExMTU1NCwgMTExNTU5LCAxMTE1NjQsIDExMTU2OSwgMTExNTc0LCAKKyAgICAxMTE1NzksIDExMTU4OCwgMTExNTk3LCAxMTE2MDYsIDExMTYxNSwgMTExNjI0LCAxMTE2MzMsIDExMTY0MiwgMTExNjUxLCAKKyAgICAxMTE2NTYsIDExMTY2NywgMTExNjc4LCAxMTE2ODcsIDExMTY5MiwgMTExNjk3LCAxMTE3MDIsIDExMTcwNywgMTExNzE2LCAKKyAgICAxMTE3MjMsIDExMTczMCwgMTExNzM3LCAxMTE3NDQsIDExMTc1MSwgMTExNzU4LCAxMTE3NjcsIDExMTc3NiwgMTExNzg3LCAKKyAgICAxMTE3OTYsIDExMTgwNywgMTExODE2LCAxMTE4MjMsIDExMTgzMiwgMTExODQzLCAxMTE4NTIsIDExMTg2MSwgMTExODcwLCAKKyAgICAxMTE4NzksIDExMTg4NiwgMTExODkzLCAxMTE5MDAsIDExMTkwOSwgMTExOTE4LCAxMTE5MjksIDExMTkzOCwgMTExOTQ3LCAKKyAgICAxMTE5NTgsIDExMTk2MywgMTExOTY4LCAxMTE5NzksIDExMTk4NywgMTExOTk2LCAxMTIwMDUsIDExMjAxNCwgMTEyMDI1LCAKKyAgICAxMTIwMzQsIDExMjA0MywgMTEyMDU0LCAxMTIwNjUsIDExMjA3NiwgMTEyMDg3LCAxMTIwOTgsIDExMjEwOSwgMTEyMTE2LCAKKyAgICAxMTIxMjMsIDExMjEzMCwgMTEyMTM3LCAxMTIxNDgsIDExMjE1NywgMTEyMTY0LCAxMTIxNzEsIDExMjE3OCwgMTEyMTg5LCAKKyAgICAxMTIyMDAsIDExMjIxMSwgMTEyMjIyLCAxMTIyMzMsIDExMjI0NCwgMTEyMjU1LCAxMTIyNjYsIDExMjI3MywgMTEyMjgwLCAKKyAgICAxMTIyODksIDExMjI5OCwgMTEyMzA1LCAxMTIzMTIsIDExMjMxOSwgMTEyMzI4LCAxMTIzMzcsIDExMjM0NiwgMTEyMzUzLCAKKyAgICAxMTIzNjIsIDExMjM3MSwgMTEyMzgwLCAxMTIzODcsIDExMjM5NCwgMTEyMzk5LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAKKyAgICAxMTI0MjYsIDExMjQzMywgMTEyNDQwLCAxMTI0NDcsIDExMjQ1NiwgMTEyNDY1LCAxMTI0NzQsIDExMjQ4MywgMTEyNDkwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0OTksIDExMjUwNSwgMTEyNTEwLCAxMTI1MTUsIDExMjUyMiwgCisgICAgMTEyNTI4LCAxMTI1MzQsIDExMjU0MCwgMTEyNTQ2LCAxMTI1NTIsIDExMjU1OCwgMTEyNTY0LCAxMTI1NjgsIDExMjU3MiwgCisgICAgMTEyNTc4LCAxMTI1ODQsIDExMjU5MCwgMTEyNTk0LCAxMTI1OTksIDExMjYwNCwgMTEyNjA4LCAxMTI2MTIsIDExMjYxNSwgCisgICAgMTEyNjIxLCAxMTI2MjcsIDExMjYzMywgMTEyNjM5LCAxMTI2NDUsIDExMjY1MSwgMTEyNjU3LCAxMTI2NjMsIDExMjY2OSwgCisgICAgMTEyNjc5LCAxMTI2ODksIDExMjY5NSwgMTEyNzAxLCAxMTI3MTEsIDExMjcyMSwgMTEyNzI3LCAwLCAwLCAxMTI3MzMsIAorICAgIDExMjc0MSwgMTEyNzQ2LCAxMTI3NTEsIDExMjc1NywgMTEyNzYzLCAxMTI3NjksIDExMjc3NSwgMTEyNzgxLCAxMTI3ODcsIAorICAgIDExMjc5NCwgMTEyODAxLCAxMTI4MDcsIDExMjgxMywgMTEyODE5LCAxMTI4MjUsIDExMjgzMSwgMTEyODM3LCAxMTI4NDMsIAorICAgIDExMjg0OSwgMTEyODU0LCAxMTI4NjAsIDExMjg2NiwgMTEyODcyLCAxMTI4NzgsIDExMjg4NCwgMTEyODkzLCAxMTI4OTksIAorICAgIDExMjkwNCwgMTEyOTEyLCAxMTI5MTksIDExMjkyNiwgMTEyOTM1LCAxMTI5NDQsIDExMjk1MywgMTEyOTYyLCAxMTI5NzEsIAorICAgIDExMjk4MCwgMTEyOTg5LCAxMTI5OTgsIDExMzAwOCwgMTEzMDE4LCAxMTMwMjYsIDExMzAzNCwgMTEzMDQzLCAxMTMwNTIsIAorICAgIDExMzA1OCwgMTEzMDY0LCAxMTMwNzAsIDExMzA3NiwgMTEzMDg0LCAxMTMwOTIsIDExMzA5NiwgMTEzMTAyLCAxMTMxMDcsIAorICAgIDExMzExMywgMTEzMTE5LCAxMTMxMjUsIDExMzEzMSwgMTEzMTM3LCAxMTMxNDYsIDExMzE1MSwgMTEzMTU4LCAxMTMxNjMsIAorICAgIDExMzE2OCwgMTEzMTczLCAxMTMxNzksIDExMzE4NSwgMTEzMTkxLCAxMTMxOTgsIDExMzIwMywgMTEzMjA4LCAxMTMyMTMsIAorICAgIDExMzIxOCwgMTEzMjIzLCAxMTMyMjksIDExMzIzNSwgMTEzMjQxLCAxMTMyNDcsIDExMzI1MywgMTEzMjU5LCAxMTMyNjUsIAorICAgIDExMzI3MSwgMTEzMjc2LCAxMTMyODEsIDExMzI4NiwgMTEzMjkxLCAxMTMyOTYsIDExMzMwMSwgMTEzMzA2LCAxMTMzMTEsIAorICAgIDExMzMxNywgMTEzMzIzLCAxMTMzMjgsIDExMzMzMywgMTEzMzM4LCAxMTMzNDMsIDExMzM0OCwgMTEzMzU0LCAxMTMzNjEsIAorICAgIDExMzM2NSwgMTEzMzY5LCAxMTMzNzMsIDExMzM3NywgMTEzMzgxLCAxMTMzODUsIDExMzM4OSwgMTEzMzkzLCAxMTM0MDEsIAorICAgIDExMzQxMSwgMTEzNDE1LCAxMTM0MTksIDExMzQyNSwgMTEzNDMxLCAxMTM0MzcsIDExMzQ0MywgMTEzNDQ5LCAxMTM0NTUsIAorICAgIDExMzQ2MSwgMTEzNDY3LCAxMTM0NzMsIDExMzQ3OSwgMTEzNDg1LCAxMTM0OTEsIDExMzQ5NywgMTEzNTAzLCAxMTM1MDcsIAorICAgIDExMzUxMSwgMTEzNTE4LCAxMTM1MjQsIDExMzUzMCwgMTEzNTM2LCAxMTM1NDEsIDExMzU0OCwgMTEzNTUzLCAxMTM1NTksIAorICAgIDExMzU2NSwgMTEzNTcxLCAxMTM1NzcsIDExMzU4MiwgMTEzNTg2LCAxMTM1OTIsIDExMzU5NiwgMTEzNjAwLCAxMTM2MDQsIAorICAgIDExMzYxMCwgMTEzNjE2LCAxMTM2MjAsIDExMzYyNiwgMTEzNjMyLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTgsIAorICAgIDExMzY2NiwgMTEzNjcyLCAxMTM2NzgsIDExMzY4NCwgMTEzNjkwLCAxMTM3MDIsIDExMzcxNCwgMTEzNzI4LCAxMTM3NDAsIAorICAgIDExMzc1MiwgMTEzNzY2LCAxMTM3ODAsIDExMzc5NCwgMTEzNzk4LCAxMTM4MDYsIDExMzgxNCwgMTEzODE5LCAxMTM4MjMsIAorICAgIDExMzgyNywgMTEzODMxLCAxMTM4MzUsIDExMzgzOSwgMTEzODQzLCAxMTM4NDcsIDExMzg1MywgMTEzODU5LCAxMTM4NjUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzg3MSwgMTEzODc3LCAxMTM4ODMsIDExMzg4OSwgMTEzODk1LCAKKyAgICAxMTM5MDEsIDExMzkwNywgMTEzOTEzLCAxMTM5MTksIDExMzkyNSwgMTEzOTMxLCAxMTM5MzcsIDExMzk0MywgMTEzOTQ5LCAKKyAgICAxMTM5NTUsIDExMzk2MSwgMTEzOTY3LCAxMTM5NzMsIDExMzk3OSwgMTEzOTg1LCAxMTM5OTEsIDExMzk5NywgMTE0MDAzLCAKKyAgICAxMTQwMDksIDExNDAxNSwgMTE0MDIxLCAxMTQwMjcsIDExNDAzMywgMTE0MDM5LCAxMTQwNDUsIDExNDA1MSwgMTE0MDU3LCAKKyAgICAxMTQwNjMsIDExNDA2OSwgMTE0MDc1LCAxMTQwODEsIDExNDA4NywgMTE0MDkzLCAxMTQwOTksIDExNDEwNSwgMTE0MTExLCAKKyAgICAxMTQxMTcsIDExNDEyMywgMTE0MTI5LCAxMTQxMzUsIDExNDE0MSwgMTE0MTQ3LCAxMTQxNTMsIDExNDE1OSwgMTE0MTY1LCAKKyAgICAxMTQxNzEsIDExNDE3NywgMTE0MTgzLCAxMTQxODksIDExNDE5NSwgMTE0MjAxLCAxMTQyMDcsIDExNDIxMywgMTE0MjE5LCAKKyAgICAxMTQyMjUsIDExNDIzMSwgMTE0MjM3LCAxMTQyNDMsIDExNDI0OSwgMTE0MjU1LCAxMTQyNjEsIDExNDI2NywgMTE0MjcyLCAKKyAgICAxMTQyNzcsIDExNDI4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Mjg2LCAxMTQyOTEsIDExNDI5OCwgCisgICAgMTE0MzA1LCAxMTQzMTIsIDExNDMxOSwgMTE0MzI0LCAxMTQzMjgsIDExNDMzNCwgMTE0MzM4LCAxMTQzNDIsIDExNDM0OCwgCisgICAgMTE0MzUyLCAxMTQzNTYsIDExNDM2MCwgMTE0MzY2LCAxMTQzNzMsIDExNDM3NywgMTE0MzgxLCAxMTQzODUsIDExNDM4OSwgCisgICAgMTE0MzkzLCAxMTQzOTcsIDExNDQwMywgMTE0NDA3LCAxMTQ0MTEsIDExNDQxNSwgMTE0NDE5LCAxMTQ0MjMsIDExNDQyNywgCisgICAgMTE0NDMxLCAxMTQ0MzUsIDExNDQzOSwgMTE0NDQzLCAxMTQ0NDcsIDExNDQ1MSwgMTE0NDU2LCAxMTQ0NjAsIDExNDQ2NCwgCisgICAgMTE0NDY4LCAxMTQ0NzIsIDExNDQ3NiwgMTE0NDgwLCAxMTQ0ODQsIDExNDQ4OCwgMTE0NDkyLCAxMTQ0OTksIDExNDUwMywgCisgICAgMTE0NTExLCAxMTQ1MTUsIDExNDUxOSwgMTE0NTIzLCAxMTQ1MjcsIDExNDUzMSwgMTE0NTM1LCAxMTQ1MzksIDExNDU0NiwgCisgICAgMTE0NTUwLCAxMTQ1NTQsIDExNDU1OCwgMTE0NTYyLCAxMTQ1NjYsIDExNDU3MiwgMTE0NTc2LCAxMTQ1ODIsIDExNDU4NiwgCisgICAgMTE0NTkwLCAxMTQ1OTQsIDExNDU5OCwgMTE0NjAyLCAxMTQ2MDYsIDExNDYxMCwgMTE0NjE0LCAxMTQ2MTgsIDExNDYyMiwgCisgICAgMTE0NjI2LCAxMTQ2MzAsIDExNDYzNCwgMTE0NjM4LCAxMTQ2NDIsIDExNDY0NiwgMTE0NjUwLCAxMTQ2NTQsIDExNDY1OCwgCisgICAgMTE0NjY2LCAxMTQ2NzAsIDExNDY3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Njc4LCAxMTQ2ODYsIAorICAgIDExNDY5NCwgMTE0NzAyLCAxMTQ3MTAsIDExNDcxOCwgMTE0NzI2LCAxMTQ3MzQsIDExNDc0MiwgMTE0NzUwLCAxMTQ3NTgsIAorICAgIDExNDc2NiwgMTE0Nzc0LCAxMTQ3ODIsIDExNDc5MCwgMTE0Nzk4LCAxMTQ4MDYsIDExNDgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0ODIyLCAxMTQ4MjYsIDExNDgzMSwgMTE0ODM2LCAxMTQ4NDEsIDExNDg0NSwgCisgICAgMTE0ODUwLCAxMTQ4NTUsIDExNDg2MCwgMTE0ODY0LCAxMTQ4NjksIDExNDg3NCwgMTE0ODc4LCAxMTQ4ODIsIDExNDg4NywgCisgICAgMTE0ODkxLCAxMTQ4OTYsIDExNDkwMSwgMTE0OTA1LCAxMTQ5MTAsIDExNDkxNSwgMTE0OTE5LCAxMTQ5MjQsIDExNDkyOSwgCisgICAgMTE0OTM0LCAxMTQ5MzksIDExNDk0NCwgMTE0OTQ4LCAxMTQ5NTMsIDExNDk1OCwgMTE0OTYzLCAxMTQ5NjcsIDExNDk3MiwgCisgICAgMTE0OTc3LCAxMTQ5ODIsIDExNDk4NiwgMTE0OTkxLCAxMTQ5OTYsIDExNTAwMCwgMTE1MDA0LCAxMTUwMDksIDExNTAxMywgCisgICAgMTE1MDE4LCAxMTUwMjMsIDExNTAyNywgMTE1MDMyLCAxMTUwMzcsIDExNTA0MSwgMTE1MDQ2LCAxMTUwNTEsIDExNTA1NiwgCisgICAgMTE1MDYxLCAxMTUwNjYsIDExNTA3MCwgMTE1MDc1LCAxMTUwODAsIDExNTA4NSwgMTE1MDg5LCAxMTUwOTQsIDExNTA5OSwgCisgICAgMTE1MTA0LCAxMTUxMDgsIDExNTExMywgMTE1MTE4LCAxMTUxMjIsIDExNTEyNiwgMTE1MTMxLCAxMTUxMzUsIDExNTE0MCwgCisgICAgMTE1MTQ1LCAxMTUxNDksIDExNTE1NCwgMTE1MTU5LCAxMTUxNjMsIDExNTE2OCwgMTE1MTczLCAxMTUxNzgsIDExNTE4MywgCisgICAgMTE1MTg4LCAxMTUxOTIsIDExNTE5NywgMTE1MjAyLCAxMTUyMDcsIDExNTIxMSwgMTE1MjE2LCAwLCAxMTUyMjEsIAorICAgIDExNTIyNSwgMTE1MjMwLCAxMTUyMzUsIDExNTIzOSwgMTE1MjQzLCAxMTUyNDgsIDExNTI1MiwgMTE1MjU3LCAxMTUyNjIsIAorICAgIDExNTI2NiwgMTE1MjcxLCAxMTUyNzYsIDExNTI4MCwgMTE1Mjg1LCAxMTUyOTAsIDExNTI5NSwgMTE1MzAwLCAxMTUzMDUsIAorICAgIDExNTMxMCwgMTE1MzE2LCAxMTUzMjIsIDExNTMyOCwgMTE1MzMzLCAxMTUzMzksIDExNTM0NSwgMTE1MzUxLCAxMTUzNTYsIAorICAgIDExNTM2MiwgMTE1MzY4LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzODksIDExNTM5NSwgMTE1NDAxLCAxMTU0MDYsIAorICAgIDExNTQxMiwgMTE1NDE4LCAxMTU0MjMsIDExNTQyOSwgMTE1NDM1LCAxMTU0NDEsIDExNTQ0NywgMTE1NDUzLCAxMTU0NTgsIAorICAgIDExNTQ2NCwgMTE1NDcwLCAxMTU0NzYsIDExNTQ4MSwgMTE1NDg3LCAxMTU0OTMsIDExNTQ5OSwgMTE1NTA0LCAxMTU1MTAsIAorICAgIDExNTUxNiwgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM3LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU0LCAxMTU1NjAsIAorICAgIDExNTU2NiwgMTE1NTcxLCAxMTU1NzcsIDExNTU4MywgMTE1NTg5LCAxMTU1OTUsIDExNTYwMSwgMCwgMTE1NjA1LCAKKyAgICAxMTU2MTAsIDAsIDAsIDExNTYxNSwgMCwgMCwgMTE1NjIwLCAxMTU2MjUsIDAsIDAsIDExNTYzMCwgMTE1NjM1LCAxMTU2MzksIAorICAgIDExNTY0NCwgMCwgMTE1NjQ5LCAxMTU2NTQsIDExNTY1OSwgMTE1NjYzLCAxMTU2NjgsIDExNTY3MywgMTE1Njc4LCAKKyAgICAxMTU2ODMsIDExNTY4OCwgMTE1NjkyLCAxMTU2OTcsIDExNTcwMiwgMCwgMTE1NzA3LCAwLCAxMTU3MTIsIDExNTcxNywgCisgICAgMTE1NzIxLCAxMTU3MjYsIDExNTczMSwgMTE1NzM1LCAxMTU3MzksIDAsIDExNTc0NCwgMTE1NzQ5LCAxMTU3NTQsIAorICAgIDExNTc1OCwgMTE1NzYzLCAxMTU3NjgsIDExNTc3MiwgMTE1Nzc3LCAxMTU3ODIsIDExNTc4NywgMTE1NzkyLCAxMTU3OTcsIAorICAgIDExNTgwMiwgMTE1ODA4LCAxMTU4MTQsIDExNTgyMCwgMTE1ODI1LCAxMTU4MzEsIDExNTgzNywgMTE1ODQzLCAxMTU4NDgsIAorICAgIDExNTg1NCwgMTE1ODYwLCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODEsIDExNTg4NywgMTE1ODkzLCAxMTU4OTgsIAorICAgIDExNTkwNCwgMTE1OTEwLCAxMTU5MTUsIDExNTkyMSwgMTE1OTI3LCAxMTU5MzMsIDExNTkzOSwgMTE1OTQ1LCAxMTU5NTAsIAorICAgIDExNTk1NiwgMTE1OTYyLCAxMTU5NjgsIDExNTk3MywgMTE1OTc5LCAxMTU5ODUsIDExNTk5MSwgMTE1OTk2LCAxMTYwMDIsIAorICAgIDExNjAwOCwgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDI5LCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ2LCAxMTYwNTIsIAorICAgIDExNjA1OCwgMTE2MDYzLCAxMTYwNjksIDExNjA3NSwgMTE2MDgxLCAxMTYwODcsIDExNjA5MywgMTE2MDk3LCAwLCAKKyAgICAxMTYxMDIsIDExNjEwNywgMTE2MTExLCAxMTYxMTYsIDAsIDAsIDExNjEyMSwgMTE2MTI2LCAxMTYxMzEsIDExNjEzNSwgCisgICAgMTE2MTM5LCAxMTYxNDQsIDExNjE0OCwgMTE2MTUzLCAwLCAxMTYxNTgsIDExNjE2MywgMTE2MTY4LCAxMTYxNzIsIAorICAgIDExNjE3NywgMTE2MTgyLCAxMTYxODcsIDAsIDExNjE5MiwgMTE2MTk2LCAxMTYyMDEsIDExNjIwNiwgMTE2MjExLCAKKyAgICAxMTYyMTUsIDExNjIyMCwgMTE2MjI1LCAxMTYyMzAsIDExNjIzNCwgMTE2MjM5LCAxMTYyNDQsIDExNjI0OCwgMTE2MjUyLCAKKyAgICAxMTYyNTcsIDExNjI2MSwgMTE2MjY2LCAxMTYyNzEsIDExNjI3NSwgMTE2MjgwLCAxMTYyODUsIDExNjI4OSwgMTE2Mjk0LCAKKyAgICAxMTYyOTksIDExNjMwNCwgMTE2MzA5LCAxMTYzMTQsIDExNjMxOCwgMCwgMTE2MzIzLCAxMTYzMjgsIDExNjMzMiwgCisgICAgMTE2MzM3LCAwLCAxMTYzNDIsIDExNjM0NiwgMTE2MzUxLCAxMTYzNTYsIDExNjM2MCwgMCwgMTE2MzY0LCAwLCAwLCAwLCAKKyAgICAxMTYzNjgsIDExNjM3MywgMTE2Mzc4LCAxMTYzODIsIDExNjM4NywgMTE2MzkyLCAxMTYzOTcsIDAsIDExNjQwMiwgCisgICAgMTE2NDA2LCAxMTY0MTEsIDExNjQxNiwgMTE2NDIxLCAxMTY0MjUsIDExNjQzMCwgMTE2NDM1LCAxMTY0NDAsIDExNjQ0NCwgCisgICAgMTE2NDQ5LCAxMTY0NTQsIDExNjQ1OCwgMTE2NDYyLCAxMTY0NjcsIDExNjQ3MSwgMTE2NDc2LCAxMTY0ODEsIDExNjQ4NSwgCisgICAgMTE2NDkwLCAxMTY0OTUsIDExNjQ5OSwgMTE2NTA0LCAxMTY1MDksIDExNjUxNCwgMTE2NTE5LCAxMTY1MjQsIDExNjUyOSwgCisgICAgMTE2NTM1LCAxMTY1NDEsIDExNjU0NywgMTE2NTUyLCAxMTY1NTgsIDExNjU2NCwgMTE2NTcwLCAxMTY1NzUsIDExNjU4MSwgCisgICAgMTE2NTg3LCAxMTY1OTIsIDExNjU5NywgMTE2NjAzLCAxMTY2MDgsIDExNjYxNCwgMTE2NjIwLCAxMTY2MjUsIDExNjYzMSwgCisgICAgMTE2NjM3LCAxMTY2NDIsIDExNjY0OCwgMTE2NjU0LCAxMTY2NjAsIDExNjY2NiwgMTE2NjcyLCAxMTY2NzcsIDExNjY4MywgCisgICAgMTE2Njg5LCAxMTY2OTUsIDExNjcwMCwgMTE2NzA2LCAxMTY3MTIsIDExNjcxOCwgMTE2NzIzLCAxMTY3MjksIDExNjczNSwgCisgICAgMTE2NzQwLCAxMTY3NDUsIDExNjc1MSwgMTE2NzU2LCAxMTY3NjIsIDExNjc2OCwgMTE2NzczLCAxMTY3NzksIDExNjc4NSwgCisgICAgMTE2NzkwLCAxMTY3OTYsIDExNjgwMiwgMTE2ODA4LCAxMTY4MTQsIDExNjgyMCwgMTE2ODI0LCAxMTY4MjksIDExNjgzNCwgCisgICAgMTE2ODM5LCAxMTY4NDMsIDExNjg0OCwgMTE2ODUzLCAxMTY4NTgsIDExNjg2MiwgMTE2ODY3LCAxMTY4NzIsIDExNjg3NiwgCisgICAgMTE2ODgwLCAxMTY4ODUsIDExNjg4OSwgMTE2ODk0LCAxMTY4OTksIDExNjkwMywgMTE2OTA4LCAxMTY5MTMsIDExNjkxNywgCisgICAgMTE2OTIyLCAxMTY5MjcsIDExNjkzMiwgMTE2OTM3LCAxMTY5NDIsIDExNjk0NiwgMTE2OTUxLCAxMTY5NTYsIDExNjk2MSwgCisgICAgMTE2OTY1LCAxMTY5NzAsIDExNjk3NSwgMTE2OTgwLCAxMTY5ODQsIDExNjk4OSwgMTE2OTk0LCAxMTY5OTgsIDExNzAwMiwgCisgICAgMTE3MDA3LCAxMTcwMTEsIDExNzAxNiwgMTE3MDIxLCAxMTcwMjUsIDExNzAzMCwgMTE3MDM1LCAxMTcwMzksIDExNzA0NCwgCisgICAgMTE3MDQ5LCAxMTcwNTQsIDExNzA1OSwgMTE3MDY0LCAxMTcwNjksIDExNzA3NSwgMTE3MDgxLCAxMTcwODcsIDExNzA5MiwgCisgICAgMTE3MDk4LCAxMTcxMDQsIDExNzExMCwgMTE3MTE1LCAxMTcxMjEsIDExNzEyNywgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgCisgICAgMTE3MTQ4LCAxMTcxNTQsIDExNzE2MCwgMTE3MTY1LCAxMTcxNzEsIDExNzE3NywgMTE3MTgyLCAxMTcxODgsIDExNzE5NCwgCisgICAgMTE3MjAwLCAxMTcyMDYsIDExNzIxMiwgMTE3MjE3LCAxMTcyMjMsIDExNzIyOSwgMTE3MjM1LCAxMTcyNDAsIDExNzI0NiwgCisgICAgMTE3MjUyLCAxMTcyNTgsIDExNzI2MywgMTE3MjY5LCAxMTcyNzUsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NiwgCisgICAgMTE3MzAyLCAxMTczMDgsIDExNzMxMywgMTE3MzE5LCAxMTczMjUsIDExNzMzMCwgMTE3MzM2LCAxMTczNDIsIDExNzM0OCwgCisgICAgMTE3MzU0LCAxMTczNjAsIDExNzM2NSwgMTE3MzcxLCAxMTczNzcsIDExNzM4MywgMTE3Mzg4LCAxMTczOTQsIDExNzQwMCwgCisgICAgMTE3NDA2LCAxMTc0MTEsIDExNzQxNywgMTE3NDIzLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDQsIDExNzQ1MCwgCisgICAgMTE3NDU2LCAxMTc0NjEsIDExNzQ2NywgMTE3NDczLCAxMTc0NzgsIDExNzQ4NCwgMTE3NDkwLCAxMTc0OTYsIDExNzUwMiwgCisgICAgMTE3NTA4LCAxMTc1MTMsIDExNzUxOSwgMTE3NTI1LCAxMTc1MzEsIDExNzUzNiwgMTE3NTQyLCAxMTc1NDgsIDExNzU1NCwgCisgICAgMTE3NTU5LCAxMTc1NjUsIDExNzU3MSwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkyLCAxMTc1OTgsIDExNzYwNCwgCisgICAgMTE3NjA5LCAxMTc2MTUsIDExNzYyMSwgMTE3NjI2LCAxMTc2MzIsIDExNzYzOCwgMTE3NjQ0LCAxMTc2NTAsIDExNzY1NiwgCisgICAgMTE3NjYyLCAxMTc2NjksIDExNzY3NiwgMTE3NjgzLCAxMTc2ODksIDExNzY5NiwgMTE3NzAzLCAxMTc3MTAsIDExNzcxNiwgCisgICAgMTE3NzIzLCAxMTc3MzAsIDExNzczNiwgMTE3NzQyLCAxMTc3NDksIDExNzc1NSwgMTE3NzYyLCAxMTc3NjksIDExNzc3NSwgCisgICAgMTE3NzgyLCAxMTc3ODksIDExNzc5NSwgMTE3ODAyLCAxMTc4MDksIDExNzgxNiwgMTE3ODIzLCAxMTc4MzAsIDExNzgzNiwgCisgICAgMTE3ODQzLCAxMTc4NTAsIDExNzg1NywgMTE3ODYzLCAxMTc4NzAsIDExNzg3NywgMTE3ODg0LCAxMTc4OTAsIDExNzg5NywgCisgICAgMTE3OTA0LCAxMTc5MTAsIDExNzkxNiwgMTE3OTIzLCAxMTc5MjksIDExNzkzNiwgMTE3OTQzLCAxMTc5NDksIDExNzk1NiwgCisgICAgMTE3OTYzLCAxMTc5NjksIDExNzk3NiwgMTE3OTgzLCAxMTc5OTAsIDExNzk5NywgMTE4MDA0LCAxMTgwMDksIDExODAxNSwgCisgICAgMTE4MDIxLCAxMTgwMjcsIDExODAzMiwgMTE4MDM4LCAxMTgwNDQsIDExODA1MCwgMTE4MDU1LCAxMTgwNjEsIDExODA2NywgCisgICAgMTE4MDcyLCAxMTgwNzcsIDExODA4MywgMTE4MDg4LCAxMTgwOTQsIDExODEwMCwgMTE4MTA1LCAxMTgxMTEsIDExODExNywgCisgICAgMTE4MTIyLCAxMTgxMjgsIDExODEzNCwgMTE4MTQwLCAxMTgxNDYsIDExODE1MiwgMTE4MTU3LCAxMTgxNjMsIDExODE2OSwgCisgICAgMTE4MTc1LCAxMTgxODAsIDExODE4NiwgMTE4MTkyLCAxMTgxOTgsIDExODIwMywgMTE4MjA5LCAxMTgyMTUsIDExODIyMCwgCisgICAgMTE4MjI1LCAxMTgyMzEsIDExODIzNiwgMTE4MjQyLCAxMTgyNDgsIDExODI1MywgMTE4MjU5LCAxMTgyNjUsIDExODI3MCwgCisgICAgMTE4Mjc2LCAxMTgyODIsIDExODI4OCwgMTE4Mjk0LCAxMTgzMDAsIDExODMwNiwgMCwgMCwgMTE4MzEzLCAxMTgzMTgsIAorICAgIDExODMyMywgMTE4MzI4LCAxMTgzMzMsIDExODMzOCwgMTE4MzQzLCAxMTgzNDgsIDExODM1MywgMTE4MzU4LCAxMTgzNjMsIAorICAgIDExODM2OCwgMTE4MzczLCAxMTgzNzgsIDExODM4MywgMTE4Mzg4LCAxMTgzOTMsIDExODM5OCwgMTE4NDA0LCAxMTg0MDksIAorICAgIDExODQxNCwgMTE4NDE5LCAxMTg0MjQsIDExODQyOSwgMTE4NDM0LCAxMTg0MzksIDExODQ0MywgMTE4NDQ4LCAxMTg0NTMsIAorICAgIDExODQ1OCwgMTE4NDYzLCAxMTg0NjgsIDExODQ3MywgMTE4NDc4LCAxMTg0ODMsIDExODQ4OCwgMTE4NDkzLCAxMTg0OTgsIAorICAgIDExODUwMywgMTE4NTA4LCAxMTg1MTMsIDExODUxOCwgMTE4NTIzLCAxMTg1MjgsIDExODUzNCwgMTE4NTM5LCAxMTg1NDQsIAorICAgIDExODU0OSwgMTE4NTU0LCAxMTg1NTksIDExODU2NCwgMTE4NTY5LCAxMTg1NzUsIDExODU4MCwgMTE4NTg1LCAxMTg1OTAsIAorICAgIDExODU5NSwgMTE4NjAwLCAxMTg2MDUsIDExODYxMCwgMTE4NjE1LCAxMTg2MjAsIDExODYyNSwgMTE4NjMwLCAxMTg2MzUsIAorICAgIDExODY0MCwgMTE4NjQ1LCAxMTg2NTAsIDExODY1NSwgMTE4NjYwLCAxMTg2NjUsIDExODY3MCwgMTE4Njc1LCAxMTg2ODAsIAorICAgIDExODY4NSwgMTE4NjkwLCAxMTg2OTYsIDExODcwMSwgMTE4NzA2LCAxMTg3MTEsIDExODcxNiwgMTE4NzIxLCAxMTg3MjYsIAorICAgIDExODczMSwgMTE4NzM1LCAxMTg3NDAsIDExODc0NSwgMTE4NzUwLCAxMTg3NTUsIDExODc2MCwgMTE4NzY1LCAxMTg3NzAsIAorICAgIDExODc3NSwgMTE4NzgwLCAxMTg3ODUsIDExODc5MCwgMTE4Nzk1LCAxMTg4MDAsIDExODgwNSwgMTE4ODEwLCAxMTg4MTUsIAorICAgIDExODgyMCwgMTE4ODI2LCAxMTg4MzEsIDExODgzNiwgMTE4ODQxLCAxMTg4NDYsIDExODg1MSwgMTE4ODU2LCAxMTg4NjEsIAorICAgIDExODg2NywgMTE4ODcyLCAxMTg4NzcsIDExODg4MiwgMTE4ODg3LCAxMTg4OTIsIDExODg5NywgMTE4OTAzLCAxMTg5MDksIAorICAgIDExODkxNSwgMTE4OTIxLCAxMTg5MjcsIDExODkzMywgMTE4OTM5LCAxMTg5NDUsIDExODk1MSwgMTE4OTU3LCAxMTg5NjMsIAorICAgIDExODk2OSwgMTE4OTc1LCAxMTg5ODEsIDExODk4NywgMTE4OTkzLCAxMTg5OTksIDExOTAwNiwgMTE5MDEyLCAxMTkwMTgsIAorICAgIDExOTAyNCwgMTE5MDMwLCAxMTkwMzYsIDExOTA0MiwgMTE5MDQ4LCAxMTkwNTMsIDExOTA1OSwgMTE5MDY1LCAxMTkwNzEsIAorICAgIDExOTA3NywgMTE5MDgzLCAxMTkwODksIDExOTA5NSwgMTE5MTAxLCAxMTkxMDcsIDExOTExMywgMTE5MTE5LCAxMTkxMjUsIAorICAgIDExOTEzMSwgMTE5MTM3LCAxMTkxNDMsIDExOTE0OSwgMTE5MTU1LCAxMTkxNjIsIDExOTE2OCwgMTE5MTc0LCAxMTkxODAsIAorICAgIDExOTE4NiwgMTE5MTkyLCAxMTkxOTgsIDExOTIwNCwgMTE5MjExLCAxMTkyMTcsIDExOTIyMywgMTE5MjI5LCAxMTkyMzUsIAorICAgIDExOTI0MSwgMTE5MjQ3LCAxMTkyNTMsIDExOTI1OSwgMTE5MjY1LCAxMTkyNzEsIDExOTI3NywgMTE5MjgzLCAxMTkyODksIAorICAgIDExOTI5NSwgMTE5MzAxLCAxMTkzMDcsIDExOTMxMywgMTE5MzE5LCAxMTkzMjUsIDExOTMzMSwgMTE5MzM3LCAxMTkzNDMsIAorICAgIDExOTM0OSwgMTE5MzU2LCAxMTkzNjIsIDExOTM2OCwgMTE5Mzc0LCAxMTkzODAsIDExOTM4NiwgMTE5MzkyLCAxMTkzOTgsIAorICAgIDExOTQwMywgMTE5NDA5LCAxMTk0MTUsIDExOTQyMSwgMTE5NDI3LCAxMTk0MzMsIDExOTQzOSwgMTE5NDQ1LCAxMTk0NTEsIAorICAgIDExOTQ1NywgMTE5NDYzLCAxMTk0NjksIDExOTQ3NSwgMTE5NDgxLCAxMTk0ODcsIDExOTQ5MywgMTE5NDk5LCAxMTk1MDUsIAorICAgIDExOTUxMiwgMTE5NTE4LCAxMTk1MjQsIDExOTUzMCwgMTE5NTM2LCAxMTk1NDIsIDExOTU0OCwgMTE5NTU0LCAxMTk1NjEsIAorICAgIDExOTU2NywgMTE5NTczLCAxMTk1NzksIDExOTU4NSwgMTE5NTkxLCAxMTk1OTcsIDExOTYwNCwgMTE5NjExLCAxMTk2MTgsIAorICAgIDExOTYyNSwgMTE5NjMyLCAxMTk2MzksIDExOTY0NiwgMTE5NjUzLCAxMTk2NjAsIDExOTY2NywgMTE5Njc0LCAxMTk2ODEsIAorICAgIDExOTY4OCwgMTE5Njk1LCAxMTk3MDIsIDExOTcwOSwgMTE5NzE2LCAxMTk3MjQsIDExOTczMSwgMTE5NzM4LCAxMTk3NDUsIAorICAgIDExOTc1MiwgMTE5NzU5LCAxMTk3NjYsIDExOTc3MywgMTE5Nzc5LCAxMTk3ODYsIDExOTc5MywgMTE5ODAwLCAxMTk4MDcsIAorICAgIDExOTgxNCwgMTE5ODIxLCAxMTk4MjgsIDExOTgzNSwgMTE5ODQyLCAxMTk4NDksIDExOTg1NiwgMTE5ODYzLCAxMTk4NzAsIAorICAgIDExOTg3NywgMTE5ODg0LCAxMTk4OTEsIDExOTg5OCwgMTE5OTA2LCAxMTk5MTMsIDExOTkyMCwgMTE5OTI3LCAxMTk5MzQsIAorICAgIDExOTk0MSwgMTE5OTQ4LCAxMTk5NTUsIDExOTk2MywgMTE5OTcwLCAxMTk5NzcsIDExOTk4NCwgMTE5OTkxLCAxMTk5OTgsIAorICAgIDEyMDAwNSwgMTIwMDEwLCAwLCAwLCAxMjAwMTUsIDEyMDAyMCwgMTIwMDI0LCAxMjAwMjgsIDEyMDAzMiwgMTIwMDM2LCAKKyAgICAxMjAwNDAsIDEyMDA0NCwgMTIwMDQ4LCAxMjAwNTIsIDEyMDA1NiwgMTIwMDYxLCAxMjAwNjUsIDEyMDA2OSwgMTIwMDczLCAKKyAgICAxMjAwNzcsIDEyMDA4MSwgMTIwMDg1LCAxMjAwODksIDEyMDA5MywgMTIwMDk3LCAxMjAxMDIsIDEyMDEwNiwgMTIwMTEwLCAKKyAgICAxMjAxMTQsIDEyMDExOCwgMTIwMTIyLCAxMjAxMjYsIDEyMDEzMCwgMTIwMTM0LCAxMjAxMzgsIDEyMDE0NCwgMTIwMTQ5LCAKKyAgICAxMjAxNTQsIDEyMDE1OSwgMTIwMTY0LCAxMjAxNjksIDEyMDE3NCwgMTIwMTc5LCAxMjAxODQsIDEyMDE4OSwgMTIwMTk1LCAKKyAgICAxMjAyMDAsIDEyMDIwNSwgMTIwMjEwLCAxMjAyMTUsIDEyMDIyMCwgMTIwMjI1LCAxMjAyMzAsIDEyMDIzNSwgMTIwMjQwLCAKKyAgICAxMjAyNDQsIDEyMDI0OCwgMTIwMjUyLCAwLCAxMjAyNTYsIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MiwgCiAgICAgMTIwMjc2LCAxMjAyODAsIDEyMDI4NCwgMTIwMjg4LCAxMjAyOTIsIDEyMDI5NiwgMTIwMzAwLCAxMjAzMDQsIDEyMDMwOCwgCi0gICAgMTIwMzEyLCAxMjAzMTYsIDEyMDMyMCwgMTIwMzI2LCAxMjAzMzIsIDEyMDMzOCwgMCwgMTIwMzQ0LCAxMjAzNDksIDAsIAotICAgIDEyMDM1NCwgMCwgMCwgMTIwMzU5LCAwLCAxMjAzNjQsIDEyMDM2OSwgMTIwMzc0LCAxMjAzNzksIDEyMDM4NCwgMTIwMzg5LCAKLSAgICAxMjAzOTQsIDEyMDM5OSwgMTIwNDA0LCAxMjA0MDksIDAsIDEyMDQxNCwgMTIwNDE5LCAxMjA0MjQsIDEyMDQyOSwgMCwgCi0gICAgMTIwNDM0LCAwLCAxMjA0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ0NCwgMCwgMCwgMCwgMCwgMTIwNDUwLCAwLCAKLSAgICAxMjA0NTYsIDAsIDEyMDQ2MiwgMCwgMTIwNDY4LCAxMjA0NzQsIDEyMDQ4MCwgMCwgMTIwNDg2LCAxMjA0OTIsIDAsIAotICAgIDEyMDQ5OCwgMCwgMCwgMTIwNTA0LCAwLCAxMjA1MTAsIDAsIDEyMDUxNiwgMCwgMTIwNTIyLCAwLCAxMjA1MzAsIDAsIAotICAgIDEyMDUzOCwgMTIwNTQ0LCAwLCAxMjA1NTAsIDAsIDAsIDEyMDU1NiwgMTIwNTYyLCAxMjA1NjgsIDEyMDU3NCwgMCwgCi0gICAgMTIwNTgwLCAxMjA1ODYsIDEyMDU5MiwgMTIwNTk4LCAxMjA2MDQsIDEyMDYxMCwgMTIwNjE2LCAwLCAxMjA2MjIsIAotICAgIDEyMDYyOCwgMTIwNjM0LCAxMjA2NDAsIDAsIDEyMDY0NiwgMTIwNjUyLCAxMjA2NTgsIDEyMDY2NCwgMCwgMTIwNjcyLCAwLCAKLSAgICAxMjA2ODAsIDEyMDY4NiwgMTIwNjkyLCAxMjA2OTgsIDEyMDcwNCwgMTIwNzEwLCAxMjA3MTYsIDEyMDcyMiwgMTIwNzI4LCAKLSAgICAxMjA3MzQsIDAsIDEyMDc0MCwgMTIwNzQ2LCAxMjA3NTIsIDEyMDc1OCwgMTIwNzY0LCAxMjA3NzAsIDEyMDc3NiwgCi0gICAgMTIwNzgyLCAxMjA3ODgsIDEyMDc5NCwgMTIwODAwLCAxMjA4MDYsIDEyMDgxMiwgMTIwODE4LCAxMjA4MjQsIDEyMDgzMCwgCi0gICAgMTIwODM2LCAwLCAwLCAwLCAwLCAwLCAxMjA4NDIsIDEyMDg0NywgMTIwODUyLCAwLCAxMjA4NTcsIDEyMDg2MiwgMTIwODY3LCAKLSAgICAxMjA4NzIsIDEyMDg3NywgMCwgMTIwODgyLCAxMjA4ODcsIDEyMDg5MiwgMTIwODk3LCAxMjA5MDIsIDEyMDkwNywgCi0gICAgMTIwOTEyLCAxMjA5MTcsIDEyMDkyMiwgMTIwOTI3LCAxMjA5MzIsIDEyMDkzNywgMTIwOTQyLCAxMjA5NDcsIDEyMDk1MiwgCi0gICAgMTIwOTU3LCAxMjA5NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDk2NywgMTIwOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA5ODUsIDEyMDk5MiwgMTIwOTk5LCAxMjEwMDYsIDEyMTAxMywgMTIxMDIwLCAxMjEwMjcsIAotICAgIDEyMTAzMywgMTIxMDQwLCAxMjEwNDcsIDEyMTA1NCwgMTIxMDYyLCAxMjEwNzAsIDEyMTA3OCwgMTIxMDg2LCAxMjEwOTQsIAotICAgIDEyMTEwMiwgMTIxMTA5LCAxMjExMTYsIDEyMTEyMywgMTIxMTMxLCAxMjExMzksIDEyMTE0NywgMTIxMTU1LCAxMjExNjMsIAotICAgIDEyMTE3MSwgMTIxMTc4LCAxMjExODUsIDEyMTE5MiwgMTIxMjAwLCAxMjEyMDgsIDEyMTIxNiwgMTIxMjI0LCAxMjEyMzIsIAotICAgIDEyMTI0MCwgMTIxMjQ1LCAxMjEyNTAsIDEyMTI1NSwgMTIxMjYwLCAxMjEyNjUsIDEyMTI3MCwgMTIxMjc1LCAxMjEyODAsIAotICAgIDEyMTI4NSwgMCwgMCwgMCwgMCwgMTIxMjkwLCAxMjEyOTUsIDEyMTI5OSwgMTIxMzAzLCAxMjEzMDcsIDEyMTMxMSwgCi0gICAgMTIxMzE1LCAxMjEzMTksIDEyMTMyMywgMTIxMzI3LCAxMjEzMzEsIDEyMTMzNSwgMTIxMzM5LCAxMjEzNDMsIDEyMTM0NywgCi0gICAgMTIxMzUxLCAxMjEzNTUsIDEyMTM1OSwgMTIxMzYzLCAxMjEzNjcsIDEyMTM3MSwgMTIxMzc1LCAxMjEzNzksIDEyMTM4MywgCi0gICAgMTIxMzg3LCAxMjEzOTEsIDEyMTM5NSwgMTIxMzk5LCAxMjE0MDMsIDEyMTQwNywgMTIxNDExLCAxMjE0MTUsIDEyMTQxOSwgCi0gICAgMTIxNDIzLCAxMjE0MjcsIDEyMTQzMSwgMTIxNDM1LCAxMjE0MzksIDEyMTQ0MywgMTIxNDQ3LCAxMjE0NTEsIDEyMTQ1NSwgCi0gICAgMTIxNDU5LCAxMjE0NjMsIDEyMTQ2NywgMTIxNDcxLCAxMjE0NzUsIDEyMTQ3OSwgMTIxNDgzLCAxMjE0ODcsIDEyMTQ5MSwgCi0gICAgMTIxNDk2LCAxMjE1MDAsIDEyMTUwNCwgMTIxNTA4LCAxMjE1MTIsIDEyMTUxNiwgMTIxNTIwLCAxMjE1MjQsIDEyMTUyOCwgCi0gICAgMTIxNTMyLCAxMjE1MzYsIDEyMTU0MCwgMTIxNTQ0LCAxMjE1NDgsIDEyMTU1MiwgMTIxNTU2LCAxMjE1NjAsIDEyMTU2NCwgCi0gICAgMTIxNTY4LCAxMjE1NzIsIDEyMTU3NiwgMTIxNTgwLCAxMjE1ODQsIDEyMTU4OCwgMTIxNTkyLCAxMjE1OTYsIDEyMTYwMCwgCi0gICAgMTIxNjA0LCAxMjE2MDgsIDEyMTYxMiwgMTIxNjE2LCAxMjE2MjAsIDEyMTYyNCwgMTIxNjI4LCAxMjE2MzIsIDEyMTYzNiwgCi0gICAgMTIxNjQwLCAxMjE2NDQsIDEyMTY0OCwgMTIxNjUyLCAxMjE2NTYsIDEyMTY2MCwgMTIxNjY0LCAxMjE2NjgsIDEyMTY3MiwgCi0gICAgMTIxNjc2LCAxMjE2ODAsIDEyMTY4NCwgMTIxNjg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjE2OTIsIDEyMTY5OCwgMTIxNzA3LCAxMjE3MTUsIDEyMTcyMywgMTIxNzMyLCAxMjE3NDEsIDEyMTc1MCwgMTIxNzU5LCAKLSAgICAxMjE3NjgsIDEyMTc3NywgMTIxNzg2LCAxMjE3OTUsIDEyMTgwNCwgMTIxODEzLCAwLCAwLCAxMjE4MjIsIDEyMTgzMSwgCi0gICAgMTIxODM5LCAxMjE4NDcsIDEyMTg1NiwgMTIxODY1LCAxMjE4NzQsIDEyMTg4MywgMTIxODkyLCAxMjE5MDEsIDEyMTkxMCwgCi0gICAgMTIxOTE5LCAxMjE5MjgsIDEyMTkzNywgMCwgMCwgMTIxOTQ2LCAxMjE5NTUsIDEyMTk2MywgMTIxOTcxLCAxMjE5ODAsIAotICAgIDEyMTk4OSwgMTIxOTk4LCAxMjIwMDcsIDEyMjAxNiwgMTIyMDI1LCAxMjIwMzQsIDEyMjA0MywgMTIyMDUyLCAxMjIwNjEsIAotICAgIDEyMjA3MCwgMCwgMTIyMDc3LCAxMjIwODYsIDEyMjA5NCwgMTIyMTAyLCAxMjIxMTEsIDEyMjEyMCwgMTIyMTI5LCAKLSAgICAxMjIxMzgsIDEyMjE0NywgMTIyMTU2LCAxMjIxNjUsIDEyMjE3NCwgMTIyMTgzLCAxMjIxOTIsIDEyMjIwMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTIyMjA4LCAxMjIyMTUsIDEyMjIyMCwgMTIyMjI0LCAxMjIyMjgsIDEyMjIzMiwgMTIyMjM3LCAKLSAgICAxMjIyNDIsIDEyMjI0NywgMTIyMjUyLCAxMjIyNTcsIDAsIDAsIDAsIDAsIDAsIDEyMjI2MiwgMTIyMjY3LCAxMjIyNzMsIAotICAgIDEyMjI3OSwgMTIyMjg1LCAxMjIyOTAsIDEyMjI5NiwgMTIyMzAyLCAxMjIzMDgsIDEyMjMxMywgMTIyMzE5LCAxMjIzMjUsIAotICAgIDEyMjMzMCwgMTIyMzM1LCAxMjIzNDEsIDEyMjM0NiwgMTIyMzUyLCAxMjIzNTgsIDEyMjM2MywgMTIyMzY5LCAxMjIzNzUsIAotICAgIDEyMjM4MCwgMTIyMzg2LCAxMjIzOTIsIDEyMjM5OCwgMTIyNDA0LCAxMjI0MTAsIDEyMjQyMSwgMTIyNDI4LCAxMjI0MzQsIAotICAgIDEyMjQzNywgMCwgMTIyNDQwLCAxMjI0NDUsIDEyMjQ1MSwgMTIyNDU3LCAxMjI0NjMsIDEyMjQ2OCwgMTIyNDc0LCAKLSAgICAxMjI0ODAsIDEyMjQ4NiwgMTIyNDkxLCAxMjI0OTcsIDEyMjUwMywgMTIyNTA4LCAxMjI1MTMsIDEyMjUxOSwgMTIyNTI0LCAKLSAgICAxMjI1MzAsIDEyMjUzNiwgMTIyNTQxLCAxMjI1NDcsIDEyMjU1MywgMTIyNTU4LCAxMjI1NjQsIDEyMjU3MCwgMTIyNTc2LCAKLSAgICAxMjI1ODIsIDEyMjU4OCwgMTIyNTkxLCAxMjI1OTQsIDEyMjU5NywgMTIyNjAwLCAxMjI2MDMsIDEyMjYwNiwgMTIyNjEyLCAKLSAgICAxMjI2MTksIDEyMjYyNiwgMTIyNjMzLCAxMjI2MzksIDEyMjY0NiwgMTIyNjUzLCAxMjI2NjAsIDEyMjY2NiwgMTIyNjczLCAKLSAgICAxMjI2ODAsIDEyMjY4NiwgMTIyNjkyLCAxMjI2OTksIDEyMjcwNSwgMTIyNzEyLCAxMjI3MTksIDEyMjcyNSwgMTIyNzMyLCAKLSAgICAxMjI3MzksIDEyMjc0NSwgMTIyNzUyLCAxMjI3NTksIDEyMjc2NiwgMTIyNzczLCAxMjI3ODAsIDEyMjc4NSwgMCwgMCwgMCwgCi0gICAgMCwgMTIyNzkwLCAxMjI3OTYsIDEyMjgwMywgMTIyODEwLCAxMjI4MTcsIDEyMjgyMywgMTIyODMwLCAxMjI4MzcsIAotICAgIDEyMjg0NCwgMTIyODUwLCAxMjI4NTcsIDEyMjg2NCwgMTIyODcwLCAxMjI4NzYsIDEyMjg4MywgMTIyODg5LCAxMjI4OTYsIAotICAgIDEyMjkwMywgMTIyOTA5LCAxMjI5MTYsIDEyMjkyMywgMTIyOTI5LCAxMjI5MzYsIDEyMjk0MywgMTIyOTUwLCAxMjI5NTcsIAotICAgIDEyMjk2NCwgMTIyOTczLCAxMjI5NzcsIDEyMjk4MCwgMTIyOTgzLCAxMjI5ODcsIDEyMjk5MSwgMTIyOTk0LCAxMjI5OTcsIAotICAgIDEyMzAwMCwgMTIzMDAzLCAxMjMwMDYsIDEyMzAwOSwgMTIzMDEyLCAxMjMwMTUsIDEyMzAxOCwgMTIzMDI0LCAwLCAwLCAwLCAKKyAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjQsIDEyMDMyOCwgMTIwMzMyLCAxMjAzMzYsIDEyMDM0MCwgMTIwMzQ0LCAKKyAgICAxMjAzNDgsIDEyMDM1NCwgMTIwMzYwLCAxMjAzNjYsIDAsIDEyMDM3MiwgMTIwMzc3LCAwLCAxMjAzODIsIDAsIDAsIAorICAgIDEyMDM4NywgMCwgMTIwMzkyLCAxMjAzOTcsIDEyMDQwMiwgMTIwNDA3LCAxMjA0MTIsIDEyMDQxNywgMTIwNDIyLCAKKyAgICAxMjA0MjcsIDEyMDQzMiwgMTIwNDM3LCAwLCAxMjA0NDIsIDEyMDQ0NywgMTIwNDUyLCAxMjA0NTcsIDAsIDEyMDQ2MiwgMCwgCisgICAgMTIwNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0NzIsIDAsIDAsIDAsIDAsIDEyMDQ3OCwgMCwgMTIwNDg0LCAwLCAKKyAgICAxMjA0OTAsIDAsIDEyMDQ5NiwgMTIwNTAyLCAxMjA1MDgsIDAsIDEyMDUxNCwgMTIwNTIwLCAwLCAxMjA1MjYsIDAsIDAsIAorICAgIDEyMDUzMiwgMCwgMTIwNTM4LCAwLCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMTIwNTU4LCAwLCAxMjA1NjYsIDEyMDU3MiwgMCwgCisgICAgMTIwNTc4LCAwLCAwLCAxMjA1ODQsIDEyMDU5MCwgMTIwNTk2LCAxMjA2MDIsIDAsIDEyMDYwOCwgMTIwNjE0LCAxMjA2MjAsIAorICAgIDEyMDYyNiwgMTIwNjMyLCAxMjA2MzgsIDEyMDY0NCwgMCwgMTIwNjUwLCAxMjA2NTYsIDEyMDY2MiwgMTIwNjY4LCAwLCAKKyAgICAxMjA2NzQsIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDAsIDEyMDcwMCwgMCwgMTIwNzA4LCAxMjA3MTQsIDEyMDcyMCwgCisgICAgMTIwNzI2LCAxMjA3MzIsIDEyMDczOCwgMTIwNzQ0LCAxMjA3NTAsIDEyMDc1NiwgMTIwNzYyLCAwLCAxMjA3NjgsIAorICAgIDEyMDc3NCwgMTIwNzgwLCAxMjA3ODYsIDEyMDc5MiwgMTIwNzk4LCAxMjA4MDQsIDEyMDgxMCwgMTIwODE2LCAxMjA4MjIsIAorICAgIDEyMDgyOCwgMTIwODM0LCAxMjA4NDAsIDEyMDg0NiwgMTIwODUyLCAxMjA4NTgsIDEyMDg2NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwODcwLCAxMjA4NzUsIDEyMDg4MCwgMCwgMTIwODg1LCAxMjA4OTAsIDEyMDg5NSwgMTIwOTAwLCAxMjA5MDUsIDAsIAorICAgIDEyMDkxMCwgMTIwOTE1LCAxMjA5MjAsIDEyMDkyNSwgMTIwOTMwLCAxMjA5MzUsIDEyMDk0MCwgMTIwOTQ1LCAxMjA5NTAsIAorICAgIDEyMDk1NSwgMTIwOTYwLCAxMjA5NjUsIDEyMDk3MCwgMTIwOTc1LCAxMjA5ODAsIDEyMDk4NSwgMTIwOTkwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMjA5OTUsIDEyMTAwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxMDEzLCAKKyAgICAxMjEwMjAsIDEyMTAyNywgMTIxMDM0LCAxMjEwNDEsIDEyMTA0OCwgMTIxMDU1LCAxMjEwNjEsIDEyMTA2OCwgMTIxMDc1LCAKKyAgICAxMjEwODIsIDEyMTA5MCwgMTIxMDk4LCAxMjExMDYsIDEyMTExNCwgMTIxMTIyLCAxMjExMzAsIDEyMTEzNywgMTIxMTQ0LCAKKyAgICAxMjExNTEsIDEyMTE1OSwgMTIxMTY3LCAxMjExNzUsIDEyMTE4MywgMTIxMTkxLCAxMjExOTksIDEyMTIwNiwgMTIxMjEzLCAKKyAgICAxMjEyMjAsIDEyMTIyOCwgMTIxMjM2LCAxMjEyNDQsIDEyMTI1MiwgMTIxMjYwLCAxMjEyNjgsIDEyMTI3MywgMTIxMjc4LCAKKyAgICAxMjEyODMsIDEyMTI4OCwgMTIxMjkzLCAxMjEyOTgsIDEyMTMwMywgMTIxMzA4LCAxMjEzMTMsIDAsIDAsIDAsIDAsIAorICAgIDEyMTMxOCwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAxMjEzNTEsIAorICAgIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAxMjEzODcsIAorICAgIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAxMjE0MjMsIAorICAgIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAxMjE0NTksIAorICAgIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAxMjE0OTUsIAorICAgIDEyMTQ5OSwgMTIxNTAzLCAxMjE1MDcsIDEyMTUxMSwgMTIxNTE1LCAxMjE1MTksIDEyMTUyNCwgMTIxNTI4LCAxMjE1MzIsIAorICAgIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAxMjE1NjgsIAorICAgIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAxMjE2MDQsIAorICAgIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAxMjE2NDAsIAorICAgIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAxMjE2NzYsIAorICAgIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDEyMTY5MiwgMTIxNjk2LCAxMjE3MDAsIDEyMTcwNCwgMTIxNzA4LCAxMjE3MTIsIAorICAgIDEyMTcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzIwLCAxMjE3MjYsIDEyMTczNSwgCisgICAgMTIxNzQzLCAxMjE3NTEsIDEyMTc2MCwgMTIxNzY5LCAxMjE3NzgsIDEyMTc4NywgMTIxNzk2LCAxMjE4MDUsIDEyMTgxNCwgCisgICAgMTIxODIzLCAxMjE4MzIsIDEyMTg0MSwgMCwgMCwgMTIxODUwLCAxMjE4NTksIDEyMTg2NywgMTIxODc1LCAxMjE4ODQsIAorICAgIDEyMTg5MywgMTIxOTAyLCAxMjE5MTEsIDEyMTkyMCwgMTIxOTI5LCAxMjE5MzgsIDEyMTk0NywgMTIxOTU2LCAxMjE5NjUsIAorICAgIDAsIDAsIDEyMTk3NCwgMTIxOTgzLCAxMjE5OTEsIDEyMTk5OSwgMTIyMDA4LCAxMjIwMTcsIDEyMjAyNiwgMTIyMDM1LCAKKyAgICAxMjIwNDQsIDEyMjA1MywgMTIyMDYyLCAxMjIwNzEsIDEyMjA4MCwgMTIyMDg5LCAxMjIwOTgsIDAsIDEyMjEwNSwgCisgICAgMTIyMTE0LCAxMjIxMjIsIDEyMjEzMCwgMTIyMTM5LCAxMjIxNDgsIDEyMjE1NywgMTIyMTY2LCAxMjIxNzUsIDEyMjE4NCwgCisgICAgMTIyMTkzLCAxMjIyMDIsIDEyMjIxMSwgMTIyMjIwLCAxMjIyMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjIzNiwgCisgICAgMTIyMjQzLCAxMjIyNDgsIDEyMjI1MiwgMTIyMjU2LCAxMjIyNjAsIDEyMjI2NSwgMTIyMjcwLCAxMjIyNzUsIDEyMjI4MCwgCisgICAgMTIyMjg1LCAwLCAwLCAwLCAwLCAwLCAxMjIyOTAsIDEyMjI5NSwgMTIyMzAxLCAxMjIzMDcsIDEyMjMxMywgMTIyMzE4LCAKKyAgICAxMjIzMjQsIDEyMjMzMCwgMTIyMzM2LCAxMjIzNDEsIDEyMjM0NywgMTIyMzUzLCAxMjIzNTgsIDEyMjM2MywgMTIyMzY5LCAKKyAgICAxMjIzNzQsIDEyMjM4MCwgMTIyMzg2LCAxMjIzOTEsIDEyMjM5NywgMTIyNDAzLCAxMjI0MDgsIDEyMjQxNCwgMTIyNDIwLCAKKyAgICAxMjI0MjYsIDEyMjQzMiwgMTIyNDM4LCAxMjI0NDksIDEyMjQ1NiwgMTIyNDYyLCAxMjI0NjUsIDAsIDEyMjQ2OCwgCisgICAgMTIyNDczLCAxMjI0NzksIDEyMjQ4NSwgMTIyNDkxLCAxMjI0OTYsIDEyMjUwMiwgMTIyNTA4LCAxMjI1MTQsIDEyMjUxOSwgCisgICAgMTIyNTI1LCAxMjI1MzEsIDEyMjUzNiwgMTIyNTQxLCAxMjI1NDcsIDEyMjU1MiwgMTIyNTU4LCAxMjI1NjQsIDEyMjU2OSwgCisgICAgMTIyNTc1LCAxMjI1ODEsIDEyMjU4NiwgMTIyNTkyLCAxMjI1OTgsIDEyMjYwNCwgMTIyNjEwLCAxMjI2MTYsIDEyMjYxOSwgCisgICAgMTIyNjIyLCAxMjI2MjUsIDEyMjYyOCwgMTIyNjMxLCAxMjI2MzQsIDEyMjY0MCwgMTIyNjQ3LCAxMjI2NTQsIDEyMjY2MSwgCisgICAgMTIyNjY3LCAxMjI2NzQsIDEyMjY4MSwgMTIyNjg4LCAxMjI2OTQsIDEyMjcwMSwgMTIyNzA4LCAxMjI3MTQsIDEyMjcyMCwgCisgICAgMTIyNzI3LCAxMjI3MzMsIDEyMjc0MCwgMTIyNzQ3LCAxMjI3NTMsIDEyMjc2MCwgMTIyNzY3LCAxMjI3NzMsIDEyMjc4MCwgCisgICAgMTIyNzg3LCAxMjI3OTQsIDEyMjgwMSwgMTIyODA4LCAxMjI4MTMsIDAsIDAsIDAsIDAsIDEyMjgxOCwgMTIyODI0LCAKKyAgICAxMjI4MzEsIDEyMjgzOCwgMTIyODQ1LCAxMjI4NTEsIDEyMjg1OCwgMTIyODY1LCAxMjI4NzIsIDEyMjg3OCwgMTIyODg1LCAKKyAgICAxMjI4OTIsIDEyMjg5OCwgMTIyOTA0LCAxMjI5MTEsIDEyMjkxNywgMTIyOTI0LCAxMjI5MzEsIDEyMjkzNywgMTIyOTQ0LCAKKyAgICAxMjI5NTEsIDEyMjk1NywgMTIyOTY0LCAxMjI5NzEsIDEyMjk3OCwgMTIyOTg1LCAxMjI5OTIsIDEyMzAwMSwgMTIzMDA1LCAKKyAgICAxMjMwMDgsIDEyMzAxMSwgMTIzMDE1LCAxMjMwMTksIDEyMzAyMiwgMTIzMDI1LCAxMjMwMjgsIDEyMzAzMSwgMTIzMDM0LCAKKyAgICAxMjMwMzcsIDEyMzA0MCwgMTIzMDQzLCAxMjMwNDYsIDEyMzA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIzMDI3LCAxMjMwMzQsIDEyMzA0MiwgMTIzMDUwLCAxMjMwNTgsIDEyMzA2NSwgMTIzMDczLCAxMjMwODEsIDEyMzA4OSwgCi0gICAgMTIzMDk2LCAxMjMxMDQsIDEyMzExMiwgMTIzMTE5LCAxMjMxMjYsIDEyMzEzNCwgMTIzMTQxLCAxMjMxNDksIDEyMzE1NywgCi0gICAgMTIzMTY0LCAxMjMxNzIsIDEyMzE4MCwgMTIzMTg3LCAxMjMxOTUsIDEyMzIwMywgMTIzMjExLCAxMjMyMTksIDEyMzIyNywgCi0gICAgMTIzMjMxLCAxMjMyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzIzOCwgMTIzMjQ0LCAKLSAgICAxMjMyNTAsIDEyMzI1NiwgMTIzMjYwLCAxMjMyNjYsIDEyMzI3MiwgMTIzMjc4LCAxMjMyODQsIDEyMzI5MCwgMTIzMjk2LCAKLSAgICAxMjMzMDIsIDEyMzMwOCwgMTIzMzE0LCAxMjMzMjAsIDEyMzMyNiwgMTIzMzMyLCAxMjMzMzgsIDEyMzM0NCwgMTIzMzUwLCAKLSAgICAxMjMzNTYsIDEyMzM2MiwgMTIzMzY4LCAxMjMzNzQsIDEyMzM4MCwgMTIzMzg2LCAxMjMzOTIsIDEyMzM5OCwgMTIzNDA0LCAKLSAgICAxMjM0MTAsIDEyMzQxNiwgMTIzNDIyLCAxMjM0MjgsIDEyMzQzNCwgMTIzNDQwLCAxMjM0NDYsIDEyMzQ1MiwgMTIzNDU4LCAKLSAgICAxMjM0NjQsIDEyMzQ3MCwgMTIzNDc2LCAxMjM0ODIsIDEyMzQ4OCwgMCwgMCwgMCwgMCwgMCwgMTIzNDk0LCAxMjM1MDUsIAotICAgIDEyMzUxNiwgMTIzNTI3LCAxMjM1MzgsIDEyMzU0OSwgMTIzNTYwLCAxMjM1NzEsIDEyMzU4MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTIzNTkzLCAxMjM1OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMzYwMSwgMTIzNjAzLCAxMjM2MDUsIDEyMzYwOSwgMTIzNjE0LCAxMjM2MTksIDEyMzYyMSwgCi0gICAgMTIzNjI3LCAxMjM2MzIsIDEyMzYzNCwgMTIzNjQwLCAxMjM2NDQsIDEyMzY0NiwgMTIzNjUwLCAxMjM2NTYsIDEyMzY2MiwgCi0gICAgMTIzNjY4LCAxMjM2NzMsIDEyMzY3NywgMTIzNjg0LCAxMjM2OTEsIDEyMzY5OCwgMTIzNzAzLCAxMjM3MTAsIDEyMzcxNywgCi0gICAgMTIzNzI0LCAxMjM3MjgsIDEyMzczNCwgMTIzNzQzLCAxMjM3NTIsIDEyMzc1OSwgMTIzNzY0LCAxMjM3NjgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzc3MiwgMTIzNzc0LCAxMjM3NzYsIDEyMzc4MCwgCi0gICAgMTIzNzg0LCAxMjM3ODgsIDAsIDEyMzc5MCwgMTIzNzkyLCAxMjM3OTYsIDEyMzc5OCwgMTIzODAwLCAxMjM4MDIsIAotICAgIDEyMzgwNCwgMTIzODA5LCAxMjM4MTQsIDEyMzgxNiwgMTIzODIyLCAxMjM4MjYsIDEyMzgzMCwgMTIzODM4LCAxMjM4NDAsIAotICAgIDEyMzg0MiwgMTIzODQ0LCAxMjM4NDYsIDEyMzg0OCwgMTIzODUwLCAxMjM4NTIsIDEyMzg1NCwgMTIzODU2LCAxMjM4NTgsIAotICAgIDEyMzg2MiwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgMTIzODgxLCAxMjM4ODcsIAotICAgIDEyMzg5MSwgMTIzODk1LCAxMjM4OTksIDEyMzkwMywgMTIzOTA4LCAxMjM5MTIsIDEyMzkxNCwgMTIzOTE2LCAxMjM5MjAsIAotICAgIDEyMzkyNiwgMTIzOTI4LCAxMjM5MzAsIDEyMzkzMiwgMTIzOTM2LCAxMjM5NDUsIDEyMzk1MSwgMTIzOTU1LCAxMjM5NTksIAotICAgIDEyMzk2MSwgMTIzOTYzLCAxMjM5NjYsIDEyMzk2OCwgMTIzOTcwLCAxMjM5NzIsIDEyMzk3NiwgMTIzOTc4LCAxMjM5ODIsIAotICAgIDEyMzk4NywgMTIzOTg5LCAxMjM5OTQsIDEyNDAwMCwgMTI0MDA3LCAxMjQwMTEsIDEyNDAxNSwgMTI0MDE5LCAxMjQwMjMsIAotICAgIDEyNDAyOSwgMCwgMCwgMCwgMTI0MDMzLCAxMjQwMzUsIDEyNDAzOSwgMTI0MDQzLCAxMjQwNDUsIDEyNDA0OSwgMTI0MDUzLCAKLSAgICAxMjQwNTUsIDEyNDA1OSwgMTI0MDYxLCAxMjQwNjUsIDEyNDA2OSwgMTI0MDczLCAxMjQwNzcsIDEyNDA4MSwgMTI0MDg1LCAKLSAgICAxMjQwODksIDEyNDA5MywgMTI0MDk5LCAxMjQxMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDEwNywgMTI0MTExLCAxMjQxMTUsIDEyNDExOSwgMTI0MTI2LCAxMjQxMjgsIDEyNDEzMiwgMTI0MTM0LCAxMjQxMzYsIAotICAgIDEyNDE0MCwgMTI0MTQ0LCAxMjQxNDgsIDEyNDE1MCwgMTI0MTU0LCAxMjQxNTgsIDEyNDE2MiwgMTI0MTY2LCAxMjQxNzAsIAotICAgIDEyNDE3MiwgMTI0MTc2LCAxMjQxNzgsIDEyNDE4NCwgMTI0MTg3LCAxMjQxOTIsIDEyNDE5NCwgMTI0MTk2LCAxMjQxOTksIAotICAgIDEyNDIwMSwgMTI0MjAzLCAxMjQyMDYsIDEyNDIxMywgMTI0MjIwLCAxMjQyMjcsIDEyNDIzMiwgMTI0MjM2LCAxMjQyMzgsIAotICAgIDEyNDI0MCwgMCwgMTI0MjQyLCAxMjQyNDQsIDEyNDI0OCwgMTI0MjUyLCAxMjQyNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDI1OCwgMTI0MjYyLCAxMjQyNjcsIDEyNDI3MSwgCi0gICAgMTI0Mjc3LCAxMjQyODMsIDEyNDI4NSwgMTI0Mjg3LCAxMjQyOTMsIDEyNDI5NSwgMTI0Mjk5LCAxMjQzMDMsIDEyNDMwNSwgCi0gICAgMTI0MzA5LCAxMjQzMTEsIDEyNDMxNSwgMTI0MzE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjQzMjMsIDEyNDMyNSwgMTI0MzI3LCAxMjQzMjksIDEyNDMzMywgMTI0MzM1LCAxMjQzMzcsIDEyNDMzOSwgCi0gICAgMTI0MzQxLCAxMjQzNDMsIDEyNDM0NSwgMTI0MzQ3LCAxMjQzNDksIDEyNDM1MSwgMTI0MzUzLCAxMjQzNTUsIDEyNDM1NywgCi0gICAgMTI0MzU5LCAxMjQzNjEsIDEyNDM2MywgMTI0MzY1LCAxMjQzNjcsIDEyNDM2OSwgMTI0MzcxLCAxMjQzNzMsIDEyNDM3NSwgCi0gICAgMTI0Mzc3LCAxMjQzODEsIDEyNDM4MywgMTI0Mzg1LCAxMjQzODcsIDEyNDM5MSwgMTI0MzkzLCAxMjQzOTcsIDEyNDM5OSwgCi0gICAgMTI0NDAxLCAxMjQ0MDUsIDEyNDQwOSwgMTI0NDE1LCAxMjQ0MTcsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjMsIDEyNDQyNywgCi0gICAgMTI0NDMxLCAxMjQ0MzMsIDEyNDQzNywgMTI0NDQxLCAxMjQ0NDUsIDEyNDQ0OSwgMTI0NDUzLCAxMjQ0NTcsIDEyNDQ2MSwgCi0gICAgMTI0NDY1LCAxMjQ0NjksIDEyNDQ3MywgMTI0NDc3LCAxMjQ0ODEsIDEyNDQ4NSwgMTI0NDg5LCAxMjQ0OTMsIDEyNDQ5NywgCi0gICAgMTI0NTAxLCAwLCAxMjQ1MDUsIDAsIDEyNDUwNywgMTI0NTA5LCAxMjQ1MTEsIDEyNDUxMywgMTI0NTE1LCAxMjQ1MjMsIAotICAgIDEyNDUzMSwgMTI0NTM5LCAxMjQ1NDcsIDEyNDU1MiwgMTI0NTU3LCAxMjQ1NjIsIDEyNDU2NiwgMTI0NTcwLCAxMjQ1NzUsIAotICAgIDEyNDU3OSwgMTI0NTgxLCAxMjQ1ODUsIDEyNDU4NywgMTI0NTg5LCAxMjQ1OTEsIDEyNDU5MywgMTI0NTk1LCAxMjQ1OTcsIAotICAgIDEyNDU5OSwgMTI0NjAzLCAxMjQ2MDUsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIDEyNDYxNywgMTI0NjIxLCAxMjQ2MjUsIAotICAgIDEyNDYyOSwgMTI0NjMxLCAxMjQ2MzcsIDEyNDY0MywgMTI0NjQ1LCAxMjQ2NDcsIDEyNDY0OSwgMTI0NjUxLCAxMjQ2NTMsIAotICAgIDEyNDY2MiwgMTI0NjY5LCAxMjQ2NzYsIDEyNDY4MCwgMTI0Njg3LCAxMjQ2OTIsIDEyNDY5OSwgMTI0NzA4LCAxMjQ3MTMsIAotICAgIDEyNDcxNywgMTI0NzIxLCAxMjQ3MjMsIDEyNDcyNywgMTI0NzI5LCAxMjQ3MzMsIDEyNDczNywgMTI0NzM5LCAxMjQ3NDMsIAotICAgIDEyNDc0NywgMTI0NzUxLCAxMjQ3NTMsIDEyNDc1NSwgMTI0NzYxLCAxMjQ3NjMsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIAotICAgIDEyNDc3NSwgMTI0Nzc3LCAxMjQ3ODEsIDEyNDc4MywgMTI0Nzg1LCAxMjQ3ODgsIDEyNDc5MiwgMTI0Nzk0LCAxMjQ3OTgsIAotICAgIDEyNDgwMCwgMTI0ODAyLCAxMjQ4MDcsIDEyNDgwOSwgMTI0ODEzLCAxMjQ4MTcsIDEyNDgyMCwgMTI0ODI0LCAxMjQ4MjgsIAotICAgIDEyNDgzMiwgMTI0ODM2LCAxMjQ4NDAsIDEyNDg0NCwgMTI0ODQ4LCAxMjQ4NTMsIDEyNDg1NywgMTI0ODYxLCAxMjQ4NzAsIAotICAgIDEyNDg3NSwgMTI0ODc4LCAxMjQ4ODAsIDEyNDg4MywgMTI0ODg2LCAxMjQ4OTEsIDEyNDg5MywgMTI0ODk2LCAxMjQ5MDEsIAotICAgIDEyNDkwNSwgMTI0OTA4LCAxMjQ5MTIsIDEyNDkxNiwgMTI0OTE5LCAxMjQ5MjQsIDEyNDkyOCwgMTI0OTMyLCAxMjQ5MzYsIAotICAgIDEyNDk0MCwgMTI0OTQ2LCAxMjQ5NTIsIDEyNDk1OCwgMTI0OTY0LCAxMjQ5NjksIDEyNDk4MCwgMTI0OTgyLCAxMjQ5ODYsIAotICAgIDEyNDk4OCwgMTI0OTkwLCAxMjQ5OTQsIDEyNDk5OCwgMTI1MDAwLCAxMjUwMDQsIDEyNTAwOSwgMTI1MDE0LCAxMjUwMjAsIAotICAgIDEyNTAyMiwgMTI1MDI2LCAxMjUwMzAsIDEyNTAzNywgMTI1MDQ0LCAxMjUwNDgsIDEyNTA1MCwgMTI1MDUyLCAxMjUwNTYsIAotICAgIDEyNTA1OCwgMTI1MDYyLCAxMjUwNjYsIDEyNTA3MCwgMTI1MDcyLCAxMjUwNzQsIDEyNTA4MSwgMTI1MDg1LCAxMjUwODgsIAotICAgIDEyNTA5MiwgMTI1MDk2LCAxMjUxMDAsIDEyNTEwMiwgMTI1MTA2LCAxMjUxMDgsIDEyNTExMCwgMTI1MTE0LCAxMjUxMTYsIAotICAgIDEyNTEyMCwgMTI1MTI0LCAxMjUxMzAsIDEyNTEzNCwgMTI1MTM4LCAxMjUxNDIsIDEyNTE0NCwgMTI1MTQ3LCAxMjUxNTEsIAotICAgIDEyNTE1OCwgMTI1MTY3LCAxMjUxNzYsIDEyNTE4NCwgMTI1MTkyLCAxMjUxOTQsIDEyNTE5OCwgMTI1MjAwLCAxMjUyMDQsIAotICAgIDEyNTIxNSwgMTI1MjE5LCAxMjUyMjUsIDEyNTIzMSwgMTI1MjM2LCAwLCAxMjUyMzgsIDEyNTI0MiwgMTI1MjQ0LCAKLSAgICAxMjUyNDYsIDAsIDAsIDAsIDEyNTI0OCwgMTI1MjUzLCAxMjUyNjMsIDEyNTI3OCwgMTI1MjkwLCAxMjUzMDIsIDEyNTMwNiwgCi0gICAgMTI1MzEwLCAxMjUzMTYsIDEyNTMxOCwgMTI1MzI2LCAxMjUzMzQsIDEyNTMzNiwgMTI1MzQwLCAxMjUzNDYsIDEyNTM1MiwgCi0gICAgMTI1MzU5LCAxMjUzNjYsIDEyNTM2OCwgMTI1MzcwLCAxMjUzNzMsIDEyNTM3NSwgMTI1MzgxLCAxMjUzODMsIDEyNTM4NiwgCi0gICAgMTI1MzkwLCAxMjUzOTYsIDEyNTQwMiwgMTI1NDEzLCAxMjU0MTksIDEyNTQyNiwgMTI1NDM0LCAxMjU0MzgsIDEyNTQ0NiwgCi0gICAgMTI1NDU0LCAxMjU0NjAsIDEyNTQ2NiwgMTI1NDczLCAxMjU0NzUsIDEyNTQ3OSwgMTI1NDgxLCAxMjU0ODMsIDEyNTQ4OCwgCi0gICAgMTI1NDkwLCAxMjU0OTIsIDEyNTQ5NCwgMTI1NDk2LCAxMjU1MDAsIDEyNTUxMSwgMTI1NTE3LCAxMjU1MjEsIDEyNTUyNSwgCi0gICAgMTI1NTI5LCAxMjU1MzUsIDEyNTU0MSwgMTI1NTQ3LCAxMjU1NTMsIDEyNTU1OCwgMTI1NTYzLCAxMjU1NjksIDEyNTU3NSwgCi0gICAgMTI1NTgyLCAwLCAwLCAxMjU1ODksIDEyNTU5NCwgMTI1NjAyLCAxMjU2MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNTYxNSwgMTI1NjIyLCAxMjU2MjksIDEyNTYzNiwgMTI1NjQ0LCAxMjU2NTIsIDEyNTY2MCwgMTI1NjY4LCAKLSAgICAxMjU2NzYsIDEyNTY4NCwgMTI1NjkyLCAxMjU3MDAsIDEyNTcwOCwgMTI1NzE0LCAxMjU3MjAsIDEyNTcyNiwgMTI1NzMyLCAKLSAgICAxMjU3MzgsIDEyNTc0NCwgMTI1NzUwLCAxMjU3NTYsIDEyNTc2MiwgMTI1NzY4LCAxMjU3NzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzA1NSwgMTIzMDYyLCAxMjMwNzAsIAorICAgIDEyMzA3OCwgMTIzMDg2LCAxMjMwOTMsIDEyMzEwMSwgMTIzMTA5LCAxMjMxMTcsIDEyMzEyNCwgMTIzMTMyLCAxMjMxNDAsIAorICAgIDEyMzE0NywgMTIzMTU0LCAxMjMxNjIsIDEyMzE2OSwgMTIzMTc3LCAxMjMxODUsIDEyMzE5MiwgMTIzMjAwLCAxMjMyMDgsIAorICAgIDEyMzIxNSwgMTIzMjIzLCAxMjMyMzEsIDEyMzIzOSwgMTIzMjQ3LCAxMjMyNTUsIDEyMzI1OSwgMTIzMjYzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMyNjYsIDEyMzI3MiwgMTIzMjc4LCAxMjMyODQsIDEyMzI4OCwgCisgICAgMTIzMjk0LCAxMjMzMDAsIDEyMzMwNiwgMTIzMzEyLCAxMjMzMTgsIDEyMzMyNCwgMTIzMzMwLCAxMjMzMzYsIDEyMzM0MiwgCisgICAgMTIzMzQ4LCAxMjMzNTQsIDEyMzM2MCwgMTIzMzY2LCAxMjMzNzIsIDEyMzM3OCwgMTIzMzg0LCAxMjMzOTAsIDEyMzM5NiwgCisgICAgMTIzNDAyLCAxMjM0MDgsIDEyMzQxNCwgMTIzNDIwLCAxMjM0MjYsIDEyMzQzMiwgMTIzNDM4LCAxMjM0NDQsIDEyMzQ1MCwgCisgICAgMTIzNDU2LCAxMjM0NjIsIDEyMzQ2OCwgMTIzNDc0LCAxMjM0ODAsIDEyMzQ4NiwgMTIzNDkyLCAxMjM0OTgsIDEyMzUwNCwgCisgICAgMTIzNTEwLCAxMjM1MTYsIDAsIDAsIDAsIDAsIDAsIDEyMzUyMiwgMTIzNTMzLCAxMjM1NDQsIDEyMzU1NSwgMTIzNTY2LCAKKyAgICAxMjM1NzcsIDEyMzU4OCwgMTIzNTk5LCAxMjM2MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyMSwgMTIzNjI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM2MjksIAorICAgIDEyMzYzMSwgMTIzNjMzLCAxMjM2MzcsIDEyMzY0MiwgMTIzNjQ3LCAxMjM2NDksIDEyMzY1NSwgMTIzNjYwLCAxMjM2NjIsIAorICAgIDEyMzY2OCwgMTIzNjcyLCAxMjM2NzQsIDEyMzY3OCwgMTIzNjg0LCAxMjM2OTAsIDEyMzY5NiwgMTIzNzAxLCAxMjM3MDUsIAorICAgIDEyMzcxMiwgMTIzNzE5LCAxMjM3MjYsIDEyMzczMSwgMTIzNzM4LCAxMjM3NDUsIDEyMzc1MiwgMTIzNzU2LCAxMjM3NjIsIAorICAgIDEyMzc3MSwgMTIzNzgwLCAxMjM3ODcsIDEyMzc5MiwgMTIzNzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMjM4MDAsIDEyMzgwMiwgMTIzODA0LCAxMjM4MDgsIDEyMzgxMiwgMTIzODE2LCAwLCAxMjM4MTgsIAorICAgIDEyMzgyMCwgMTIzODI0LCAxMjM4MjYsIDEyMzgyOCwgMTIzODMwLCAxMjM4MzIsIDEyMzgzNywgMTIzODQyLCAxMjM4NDQsIAorICAgIDEyMzg1MCwgMTIzODU0LCAxMjM4NTgsIDEyMzg2NiwgMTIzODY4LCAxMjM4NzAsIDEyMzg3MiwgMTIzODc0LCAxMjM4NzYsIAorICAgIDEyMzg3OCwgMTIzODgwLCAxMjM4ODIsIDEyMzg4NCwgMTIzODg2LCAxMjM4OTAsIDEyMzg5NCwgMTIzODk2LCAxMjM4OTgsIAorICAgIDEyMzkwMCwgMTIzOTAyLCAxMjM5MDQsIDEyMzkwOSwgMTIzOTE1LCAxMjM5MTksIDEyMzkyMywgMTIzOTI3LCAxMjM5MzEsIAorICAgIDEyMzkzNiwgMTIzOTQwLCAxMjM5NDIsIDEyMzk0NCwgMTIzOTQ4LCAxMjM5NTQsIDEyMzk1NiwgMTIzOTU4LCAxMjM5NjAsIAorICAgIDEyMzk2NCwgMTIzOTczLCAxMjM5NzksIDEyMzk4MywgMTIzOTg3LCAxMjM5ODksIDEyMzk5MSwgMTIzOTk0LCAxMjM5OTYsIAorICAgIDEyMzk5OCwgMTI0MDAwLCAxMjQwMDQsIDEyNDAwNiwgMTI0MDEwLCAxMjQwMTUsIDEyNDAxNywgMTI0MDIyLCAxMjQwMjgsIAorICAgIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NywgMTI0MDUxLCAxMjQwNTcsIDAsIDAsIDAsIDEyNDA2MSwgMTI0MDYzLCAKKyAgICAxMjQwNjcsIDEyNDA3MSwgMTI0MDczLCAxMjQwNzcsIDEyNDA4MSwgMTI0MDgzLCAxMjQwODcsIDEyNDA4OSwgMTI0MDkzLCAKKyAgICAxMjQwOTcsIDEyNDEwMSwgMTI0MTA1LCAxMjQxMDksIDEyNDExMywgMTI0MTE3LCAxMjQxMjEsIDEyNDEyNywgMTI0MTMxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQxMzUsIDEyNDEzOSwgMTI0MTQzLCAxMjQxNDcsIAorICAgIDEyNDE1NCwgMTI0MTU2LCAxMjQxNjAsIDEyNDE2MiwgMTI0MTY0LCAxMjQxNjgsIDEyNDE3MiwgMTI0MTc2LCAxMjQxNzgsIAorICAgIDEyNDE4MiwgMTI0MTg2LCAxMjQxOTAsIDEyNDE5NCwgMTI0MTk4LCAxMjQyMDAsIDEyNDIwNCwgMTI0MjA2LCAxMjQyMTIsIAorICAgIDEyNDIxNSwgMTI0MjIwLCAxMjQyMjIsIDEyNDIyNCwgMTI0MjI3LCAxMjQyMjksIDEyNDIzMSwgMTI0MjM0LCAxMjQyNDEsIAorICAgIDEyNDI0OCwgMTI0MjU1LCAxMjQyNjAsIDEyNDI2NCwgMTI0MjY2LCAxMjQyNjgsIDAsIDEyNDI3MCwgMTI0MjcyLCAKKyAgICAxMjQyNzYsIDEyNDI4MCwgMTI0Mjg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjQyODYsIDEyNDI5MCwgMTI0Mjk1LCAxMjQyOTksIDEyNDMwNSwgMTI0MzExLCAxMjQzMTMsIAorICAgIDEyNDMxNSwgMTI0MzIxLCAxMjQzMjMsIDEyNDMyNywgMTI0MzMxLCAxMjQzMzMsIDEyNDMzNywgMTI0MzM5LCAxMjQzNDMsIAorICAgIDEyNDM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MzUxLCAxMjQzNTMsIAorICAgIDEyNDM1NSwgMTI0MzU3LCAxMjQzNjEsIDEyNDM2MywgMTI0MzY1LCAxMjQzNjcsIDEyNDM2OSwgMTI0MzcxLCAxMjQzNzMsIAorICAgIDEyNDM3NSwgMTI0Mzc3LCAxMjQzNzksIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0Mzg5LCAxMjQzOTEsIAorICAgIDEyNDM5MywgMTI0Mzk1LCAxMjQzOTcsIDEyNDM5OSwgMTI0NDAxLCAxMjQ0MDMsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTEsIAorICAgIDEyNDQxMywgMTI0NDE1LCAxMjQ0MTksIDEyNDQyMSwgMTI0NDI1LCAxMjQ0MjcsIDEyNDQyOSwgMTI0NDMzLCAxMjQ0MzcsIAorICAgIDEyNDQ0MywgMTI0NDQ1LCAxMjQ0NDcsIDEyNDQ0OSwgMTI0NDUxLCAxMjQ0NTUsIDEyNDQ1OSwgMTI0NDYxLCAxMjQ0NjUsIAorICAgIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAxMjQ1MDEsIAorICAgIDEyNDUwNSwgMTI0NTA5LCAxMjQ1MTMsIDEyNDUxNywgMTI0NTIxLCAxMjQ1MjUsIDEyNDUyOSwgMCwgMTI0NTMzLCAwLCAKKyAgICAxMjQ1MzUsIDEyNDUzNywgMTI0NTM5LCAxMjQ1NDEsIDEyNDU0MywgMTI0NTUxLCAxMjQ1NTksIDEyNDU2NywgMTI0NTc1LCAKKyAgICAxMjQ1ODAsIDEyNDU4NSwgMTI0NTkwLCAxMjQ1OTQsIDEyNDU5OCwgMTI0NjAzLCAxMjQ2MDcsIDEyNDYwOSwgMTI0NjEzLCAKKyAgICAxMjQ2MTUsIDEyNDYxNywgMTI0NjE5LCAxMjQ2MjEsIDEyNDYyMywgMTI0NjI1LCAxMjQ2MjcsIDEyNDYzMSwgMTI0NjMzLCAKKyAgICAxMjQ2MzUsIDEyNDYzNywgMTI0NjQxLCAxMjQ2NDUsIDEyNDY0OSwgMTI0NjUzLCAxMjQ2NTcsIDEyNDY1OSwgMTI0NjY1LCAKKyAgICAxMjQ2NzEsIDEyNDY3MywgMTI0Njc1LCAxMjQ2NzcsIDEyNDY3OSwgMTI0NjgxLCAxMjQ2OTAsIDEyNDY5NywgMTI0NzA0LCAKKyAgICAxMjQ3MDgsIDEyNDcxNSwgMTI0NzIwLCAxMjQ3MjcsIDEyNDczNiwgMTI0NzQxLCAxMjQ3NDUsIDEyNDc0OSwgMTI0NzUxLCAKKyAgICAxMjQ3NTUsIDEyNDc1NywgMTI0NzYxLCAxMjQ3NjUsIDEyNDc2NywgMTI0NzcxLCAxMjQ3NzUsIDEyNDc3OSwgMTI0NzgxLCAKKyAgICAxMjQ3ODMsIDEyNDc4OSwgMTI0NzkxLCAxMjQ3OTMsIDEyNDc5NSwgMTI0Nzk5LCAxMjQ4MDMsIDEyNDgwNSwgMTI0ODA5LCAKKyAgICAxMjQ4MTEsIDEyNDgxMywgMTI0ODE2LCAxMjQ4MjAsIDEyNDgyMiwgMTI0ODI2LCAxMjQ4MjgsIDEyNDgzMCwgMTI0ODM1LCAKKyAgICAxMjQ4MzcsIDEyNDg0MSwgMTI0ODQ1LCAxMjQ4NDgsIDEyNDg1MiwgMTI0ODU2LCAxMjQ4NjAsIDEyNDg2NCwgMTI0ODY4LCAKKyAgICAxMjQ4NzIsIDEyNDg3NiwgMTI0ODgxLCAxMjQ4ODUsIDEyNDg4OSwgMTI0ODk4LCAxMjQ5MDMsIDEyNDkwNiwgMTI0OTA4LCAKKyAgICAxMjQ5MTEsIDEyNDkxNCwgMTI0OTE5LCAxMjQ5MjEsIDEyNDkyNCwgMTI0OTI5LCAxMjQ5MzMsIDEyNDkzNiwgMTI0OTQwLCAKKyAgICAxMjQ5NDQsIDEyNDk0NywgMTI0OTUyLCAxMjQ5NTYsIDEyNDk2MCwgMTI0OTY0LCAxMjQ5NjgsIDEyNDk3NCwgMTI0OTgwLCAKKyAgICAxMjQ5ODYsIDEyNDk5MiwgMTI0OTk3LCAxMjUwMDgsIDEyNTAxMCwgMTI1MDE0LCAxMjUwMTYsIDEyNTAxOCwgMTI1MDIyLCAKKyAgICAxMjUwMjYsIDEyNTAyOCwgMTI1MDMyLCAxMjUwMzcsIDEyNTA0MiwgMTI1MDQ4LCAxMjUwNTAsIDEyNTA1NCwgMTI1MDU4LCAKKyAgICAxMjUwNjUsIDEyNTA3MiwgMTI1MDc2LCAxMjUwNzgsIDEyNTA4MCwgMTI1MDg0LCAxMjUwODYsIDEyNTA5MCwgMTI1MDk0LCAKKyAgICAxMjUwOTgsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDksIDEyNTExMywgMTI1MTE2LCAxMjUxMjAsIDEyNTEyNCwgMTI1MTI4LCAKKyAgICAxMjUxMzAsIDEyNTEzNCwgMTI1MTM2LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDgsIDEyNTE1MiwgMTI1MTU4LCAKKyAgICAxMjUxNjIsIDEyNTE2NiwgMTI1MTcwLCAxMjUxNzIsIDEyNTE3NSwgMTI1MTc5LCAxMjUxODYsIDEyNTE5NSwgMTI1MjA0LCAKKyAgICAxMjUyMTIsIDEyNTIyMCwgMTI1MjIyLCAxMjUyMjYsIDEyNTIyOCwgMTI1MjMyLCAxMjUyNDMsIDEyNTI0NywgMTI1MjUzLCAKKyAgICAxMjUyNTksIDEyNTI2NCwgMCwgMTI1MjY2LCAxMjUyNzAsIDEyNTI3MiwgMTI1Mjc0LCAwLCAwLCAwLCAxMjUyNzYsIAorICAgIDEyNTI4MSwgMTI1MjkxLCAxMjUzMDYsIDEyNTMxOCwgMTI1MzMwLCAxMjUzMzQsIDEyNTMzOCwgMTI1MzQ0LCAxMjUzNDYsIAorICAgIDEyNTM1NCwgMTI1MzYyLCAxMjUzNjQsIDEyNTM2OCwgMTI1Mzc0LCAxMjUzODAsIDEyNTM4NywgMTI1Mzk0LCAxMjUzOTYsIAorICAgIDEyNTM5OCwgMTI1NDAxLCAxMjU0MDMsIDEyNTQwOSwgMTI1NDExLCAxMjU0MTQsIDEyNTQxOCwgMTI1NDI0LCAxMjU0MzAsIAorICAgIDEyNTQ0MSwgMTI1NDQ3LCAxMjU0NTQsIDEyNTQ2MiwgMTI1NDY2LCAxMjU0NzQsIDEyNTQ4MiwgMTI1NDg4LCAxMjU0OTQsIAorICAgIDEyNTUwMSwgMTI1NTAzLCAxMjU1MDcsIDEyNTUwOSwgMTI1NTExLCAxMjU1MTYsIDEyNTUxOCwgMTI1NTIwLCAxMjU1MjIsIAorICAgIDEyNTUyNCwgMTI1NTI4LCAxMjU1MzksIDEyNTU0NSwgMTI1NTQ5LCAxMjU1NTMsIDEyNTU1NywgMTI1NTYzLCAxMjU1NjksIAorICAgIDEyNTU3NSwgMTI1NTgxLCAxMjU1ODYsIDEyNTU5MSwgMTI1NTk3LCAxMjU2MDMsIDEyNTYxMCwgMCwgMCwgMTI1NjE3LCAKKyAgICAxMjU2MjIsIDEyNTYzMCwgMTI1NjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU2NDMsIAorICAgIDEyNTY1MCwgMTI1NjU3LCAxMjU2NjQsIDEyNTY3MiwgMTI1NjgwLCAxMjU2ODgsIDEyNTY5NiwgMTI1NzA0LCAxMjU3MTIsIAorICAgIDEyNTcyMCwgMTI1NzI4LCAxMjU3MzYsIDEyNTc0MiwgMTI1NzQ4LCAxMjU3NTQsIDEyNTc2MCwgMTI1NzY2LCAxMjU3NzIsIAorICAgIDEyNTc3OCwgMTI1Nzg0LCAxMjU3OTAsIDEyNTc5NiwgMTI1ODAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU3ODAsIAotICAgIDEyNTc4NCwgMTI1Nzg4LCAxMjU3OTMsIDEyNTc5OCwgMTI1ODAwLCAxMjU4MDQsIDEyNTgxMywgMTI1ODIxLCAxMjU4MjksIAotICAgIDEyNTg0MiwgMTI1ODU1LCAxMjU4NjgsIDEyNTg3NSwgMTI1ODgyLCAxMjU4ODYsIDEyNTg5NSwgMTI1OTAzLCAxMjU5MDcsIAotICAgIDEyNTkxNiwgMTI1OTIzLCAxMjU5MjcsIDEyNTkzMSwgMTI1OTM1LCAxMjU5MzksIDEyNTk0NiwgMTI1OTUwLCAxMjU5NTQsIAotICAgIDEyNTk1OCwgMTI1OTYyLCAxMjU5NjksIDEyNTk3OCwgMTI1OTg3LCAxMjU5OTQsIDEyNjAwNiwgMTI2MDE4LCAxMjYwMjIsIAotICAgIDEyNjAyNiwgMTI2MDMwLCAxMjYwMzQsIDEyNjAzOCwgMTI2MDQyLCAxMjYwNTAsIDEyNjA1OCwgMTI2MDY2LCAxMjYwNzAsIAotICAgIDEyNjA3NCwgMTI2MDc4LCAxMjYwODIsIDEyNjA4NiwgMTI2MDkwLCAxMjYwOTYsIDEyNjEwMiwgMTI2MTA2LCAxMjYxMTcsIAotICAgIDEyNjEyNSwgMTI2MTI5LCAxMjYxMzMsIDEyNjEzNywgMTI2MTQxLCAxMjYxNDcsIDEyNjE1NCwgMTI2MTY1LCAxMjYxNzUsIAotICAgIDEyNjE4NSwgMTI2MTk2LCAxMjYyMDUsIDEyNjIxNiwgMTI2MjIyLCAxMjYyMjgsIDAsIDAsIDAsIDAsIDEyNjIzNCwgCi0gICAgMTI2MjQzLCAxMjYyNTAsIDEyNjI1NiwgMTI2MjYwLCAxMjYyNjQsIDEyNjI2OCwgMTI2Mjc3LCAxMjYyODksIDEyNjI5MywgCi0gICAgMTI2MzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU4MDgsIDEyNTgxMiwgMTI1ODE2LCAKKyAgICAxMjU4MjEsIDEyNTgyNiwgMTI1ODI4LCAxMjU4MzIsIDEyNTg0MSwgMTI1ODQ5LCAxMjU4NTcsIDEyNTg3MCwgMTI1ODgzLCAKKyAgICAxMjU4OTYsIDEyNTkwMywgMTI1OTEwLCAxMjU5MTQsIDEyNTkyMywgMTI1OTMxLCAxMjU5MzUsIDEyNTk0NCwgMTI1OTUxLCAKKyAgICAxMjU5NTUsIDEyNTk1OSwgMTI1OTYzLCAxMjU5NjcsIDEyNTk3NCwgMTI1OTc4LCAxMjU5ODIsIDEyNTk4NiwgMTI1OTkwLCAKKyAgICAxMjU5OTcsIDEyNjAwNiwgMTI2MDE1LCAxMjYwMjIsIDEyNjAzNCwgMTI2MDQ2LCAxMjYwNTAsIDEyNjA1NCwgMTI2MDU4LCAKKyAgICAxMjYwNjIsIDEyNjA2NiwgMTI2MDcwLCAxMjYwNzgsIDEyNjA4NiwgMTI2MDk0LCAxMjYwOTgsIDEyNjEwMiwgMTI2MTA2LCAKKyAgICAxMjYxMTAsIDEyNjExNCwgMTI2MTE4LCAxMjYxMjQsIDEyNjEzMCwgMTI2MTM0LCAxMjYxNDUsIDEyNjE1MywgMTI2MTU3LCAKKyAgICAxMjYxNjEsIDEyNjE2NSwgMTI2MTY5LCAxMjYxNzUsIDEyNjE4MiwgMTI2MTkzLCAxMjYyMDMsIDEyNjIxMywgMTI2MjI0LCAKKyAgICAxMjYyMzMsIDEyNjI0NCwgMTI2MjUwLCAxMjYyNTYsIDAsIDAsIDAsIDAsIDEyNjI2MiwgMTI2MjcxLCAxMjYyNzgsIAorICAgIDEyNjI4NCwgMTI2Mjg4LCAxMjYyOTIsIDEyNjI5NiwgMTI2MzA1LCAxMjYzMTcsIDEyNjMyMSwgMTI2MzI4LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMjYzMDcsIDEyNjMwOSwgMTI2MzExLCAxMjYzMTUsIDEyNjMxOSwgMTI2MzIzLCAxMjYzMzIsIDEyNjMzNCwgCi0gICAgMTI2MzM2LCAxMjYzMzksIDEyNjM0MSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM0OSwgMTI2MzUzLCAxMjYzNTUsIDEyNjM1OSwgCi0gICAgMTI2MzYxLCAxMjYzNjMsIDEyNjM2NywgMTI2MzcxLCAxMjYzNzcsIDEyNjM3OSwgMTI2MzgzLCAxMjYzODUsIDEyNjM4OSwgCi0gICAgMTI2MzkzLCAxMjYzOTcsIDEyNjQwMSwgMTI2NDAzLCAxMjY0MDUsIDEyNjQwOSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgCi0gICAgMTI2NDIzLCAxMjY0MjUsIDEyNjQyNywgMTI2NDMyLCAxMjY0MzcsIDEyNjQ0MCwgMTI2NDQ4LCAxMjY0NTYsIDEyNjQ1OCwgCi0gICAgMTI2NDYzLCAxMjY0NjYsIDEyNjQ3MSwgMTI2NDgyLCAxMjY0ODksIDEyNjQ5NCwgMTI2NDk5LCAxMjY1MDEsIDEyNjUwNSwgCi0gICAgMTI2NTA3LCAxMjY1MTEsIDEyNjUxMywgMTI2NTE3LCAxMjY1MjEsIDEyNjUyNCwgMTI2NTI3LCAxMjY1MjksIDEyNjUzMiwgCi0gICAgMTI2NTM0LCAxMjY1MzgsIDEyNjU0MCwgMTI2NTQyLCAxMjY1NDQsIDEyNjU0OCwgMTI2NTUwLCAxMjY1NTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjMzNSwgCisgICAgMTI2MzM3LCAxMjYzMzksIDEyNjM0MywgMTI2MzQ3LCAxMjYzNTEsIDEyNjM2MCwgMTI2MzYyLCAxMjYzNjQsIDEyNjM2NywgCisgICAgMTI2MzY5LCAxMjYzNzEsIDEyNjM3NSwgMTI2Mzc3LCAxMjYzODEsIDEyNjM4MywgMTI2Mzg3LCAxMjYzODksIDEyNjM5MSwgCisgICAgMTI2Mzk1LCAxMjYzOTksIDEyNjQwNSwgMTI2NDA3LCAxMjY0MTEsIDEyNjQxMywgMTI2NDE3LCAxMjY0MjEsIDEyNjQyNSwgCisgICAgMTI2NDI5LCAxMjY0MzEsIDEyNjQzMywgMTI2NDM3LCAxMjY0NDEsIDEyNjQ0NSwgMTI2NDQ5LCAxMjY0NTEsIDEyNjQ1MywgCisgICAgMTI2NDU1LCAxMjY0NjAsIDEyNjQ2NSwgMTI2NDY4LCAxMjY0NzYsIDEyNjQ4NCwgMTI2NDg2LCAxMjY0OTEsIDEyNjQ5NCwgCisgICAgMTI2NDk5LCAxMjY1MTAsIDEyNjUxNywgMTI2NTIyLCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMzLCAxMjY1MzUsIDEyNjUzOSwgCisgICAgMTI2NTQxLCAxMjY1NDUsIDEyNjU0OSwgMTI2NTUyLCAxMjY1NTUsIDEyNjU1NywgMTI2NTYwLCAxMjY1NjIsIDEyNjU2NiwgCisgICAgMTI2NTY4LCAxMjY1NzAsIDEyNjU3MiwgMTI2NTc2LCAxMjY1NzgsIDEyNjU4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2NTU3LCAxMjY1NjIsIDEyNjU2NywgMTI2NTcyLCAxMjY1NzcsIDEyNjU4MiwgCi0gICAgMTI2NTg3LCAxMjY1OTQsIDEyNjYwMSwgMTI2NjA4LCAxMjY2MTUsIDEyNjYyMCwgMTI2NjI1LCAxMjY2MzAsIDEyNjYzNSwgCi0gICAgMTI2NjQyLCAxMjY2NDgsIDEyNjY1NSwgMTI2NjYyLCAxMjY2NjksIDEyNjY3NCwgMTI2Njc5LCAxMjY2ODQsIDEyNjY4OSwgCi0gICAgMTI2Njk0LCAxMjY3MDEsIDEyNjcwOCwgMTI2NzEzLCAxMjY3MTgsIDEyNjcyNSwgMTI2NzMyLCAxMjY3NDAsIDEyNjc0OCwgCi0gICAgMTI2NzU1LCAxMjY3NjIsIDEyNjc3MCwgMTI2Nzc4LCAxMjY3ODYsIDEyNjc5MywgMTI2ODAzLCAxMjY4MTQsIDEyNjgxOSwgCi0gICAgMTI2ODI2LCAxMjY4MzMsIDEyNjg0MCwgMTI2ODQ4LCAxMjY4NTYsIDEyNjg2NywgMTI2ODc1LCAxMjY4ODMsIDEyNjg5MSwgCi0gICAgMTI2ODk2LCAxMjY5MDEsIDEyNjkwNiwgMTI2OTExLCAxMjY5MTYsIDEyNjkyMSwgMTI2OTI2LCAxMjY5MzEsIDEyNjkzNiwgCi0gICAgMTI2OTQxLCAxMjY5NDYsIDEyNjk1MSwgMTI2OTU4LCAxMjY5NjMsIDEyNjk2OCwgMTI2OTc1LCAxMjY5ODAsIDEyNjk4NSwgCi0gICAgMTI2OTkwLCAxMjY5OTUsIDEyNzAwMCwgMTI3MDA1LCAxMjcwMTAsIDEyNzAxNSwgMTI3MDIwLCAxMjcwMjUsIDEyNzAzMCwgCi0gICAgMTI3MDM1LCAxMjcwNDIsIDEyNzA1MCwgMTI3MDU1LCAxMjcwNjAsIDEyNzA2NywgMTI3MDcyLCAxMjcwNzcsIDEyNzA4MiwgCi0gICAgMTI3MDg5LCAxMjcwOTQsIDEyNzEwMSwgMTI3MTA2LCAxMjcxMTMsIDEyNzExOCwgMTI3MTI3LCAxMjcxMzYsIDEyNzE0MSwgCi0gICAgMTI3MTQ2LCAxMjcxNTEsIDEyNzE1NiwgMTI3MTYxLCAxMjcxNjYsIDEyNzE3MSwgMTI3MTc2LCAxMjcxODEsIDEyNzE4NiwgCi0gICAgMTI3MTkxLCAxMjcxOTYsIDEyNzIwMSwgMTI3MjA5LCAxMjcyMTcsIDEyNzIyMiwgMTI3MjI3LCAxMjcyMzIsIDEyNzIzNywgCi0gICAgMTI3MjQyLCAxMjcyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI1NCwgMTI3MjU4LCAKLSAgICAxMjcyNjIsIDEyNzI2NiwgMTI3MjcwLCAxMjcyNzQsIDEyNzI3OCwgMTI3MjgyLCAxMjcyODYsIDEyNzI5MCwgMTI3Mjk0LCAKKyAgICAwLCAwLCAxMjY1ODUsIDEyNjU5MCwgMTI2NTk1LCAxMjY2MDAsIDEyNjYwNSwgMTI2NjEwLCAxMjY2MTUsIDEyNjYyMiwgCisgICAgMTI2NjI5LCAxMjY2MzYsIDEyNjY0MywgMTI2NjQ4LCAxMjY2NTMsIDEyNjY1OCwgMTI2NjYzLCAxMjY2NzAsIDEyNjY3NiwgCisgICAgMTI2NjgzLCAxMjY2OTAsIDEyNjY5NywgMTI2NzAyLCAxMjY3MDcsIDEyNjcxMiwgMTI2NzE3LCAxMjY3MjIsIDEyNjcyOSwgCisgICAgMTI2NzM2LCAxMjY3NDEsIDEyNjc0NiwgMTI2NzUzLCAxMjY3NjAsIDEyNjc2OCwgMTI2Nzc2LCAxMjY3ODMsIDEyNjc5MCwgCisgICAgMTI2Nzk4LCAxMjY4MDYsIDEyNjgxNCwgMTI2ODIxLCAxMjY4MzEsIDEyNjg0MiwgMTI2ODQ3LCAxMjY4NTQsIDEyNjg2MSwgCisgICAgMTI2ODY4LCAxMjY4NzYsIDEyNjg4NCwgMTI2ODk1LCAxMjY5MDMsIDEyNjkxMSwgMTI2OTE5LCAxMjY5MjQsIDEyNjkyOSwgCisgICAgMTI2OTM0LCAxMjY5MzksIDEyNjk0NCwgMTI2OTQ5LCAxMjY5NTQsIDEyNjk1OSwgMTI2OTY0LCAxMjY5NjksIDEyNjk3NCwgCisgICAgMTI2OTc5LCAxMjY5ODYsIDEyNjk5MSwgMTI2OTk2LCAxMjcwMDMsIDEyNzAwOCwgMTI3MDEzLCAxMjcwMTgsIDEyNzAyMywgCisgICAgMTI3MDI4LCAxMjcwMzMsIDEyNzAzOCwgMTI3MDQzLCAxMjcwNDgsIDEyNzA1MywgMTI3MDU4LCAxMjcwNjMsIDEyNzA3MCwgCisgICAgMTI3MDc4LCAxMjcwODMsIDEyNzA4OCwgMTI3MDk1LCAxMjcxMDAsIDEyNzEwNSwgMTI3MTEwLCAxMjcxMTcsIDEyNzEyMiwgCisgICAgMTI3MTI5LCAxMjcxMzQsIDEyNzE0MSwgMTI3MTQ2LCAxMjcxNTUsIDEyNzE2NCwgMTI3MTY5LCAxMjcxNzQsIDEyNzE3OSwgCisgICAgMTI3MTg0LCAxMjcxODksIDEyNzE5NCwgMTI3MTk5LCAxMjcyMDQsIDEyNzIwOSwgMTI3MjE0LCAxMjcyMTksIDEyNzIyNCwgCisgICAgMTI3MjI5LCAxMjcyMzcsIDEyNzI0NSwgMTI3MjUwLCAxMjcyNTUsIDEyNzI2MCwgMTI3MjY1LCAxMjcyNzAsIDEyNzI3NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjgyLCAxMjcyODYsIDEyNzI5MCwgMTI3Mjk0LCAKICAgICAxMjcyOTgsIDEyNzMwMiwgMTI3MzA2LCAxMjczMTAsIDEyNzMxNCwgMTI3MzE4LCAxMjczMjIsIDEyNzMyNiwgMTI3MzMwLCAKICAgICAxMjczMzQsIDEyNzMzOCwgMTI3MzQyLCAxMjczNDYsIDEyNzM1MCwgMTI3MzU0LCAxMjczNTgsIDEyNzM2MiwgMTI3MzY2LCAKICAgICAxMjczNzAsIDEyNzM3NCwgMTI3Mzc4LCAxMjczODIsIDEyNzM4NiwgMTI3MzkwLCAxMjczOTQsIDEyNzM5OCwgMTI3NDAyLCAKQEAgLTE2OTM1LDE3NyArMTY5NTIsMTc5IEBACiAgICAgMTI5MzE0LCAxMjkzMTgsIDEyOTMyMiwgMTI5MzI2LCAxMjkzMzAsIDEyOTMzNCwgMTI5MzM4LCAxMjkzNDIsIDEyOTM0NiwgCiAgICAgMTI5MzUwLCAxMjkzNTQsIDEyOTM1OCwgMTI5MzYyLCAxMjkzNjYsIDEyOTM3MCwgMTI5Mzc0LCAxMjkzNzgsIDEyOTM4MiwgCiAgICAgMTI5Mzg2LCAxMjkzOTAsIDEyOTM5NCwgMTI5Mzk4LCAxMjk0MDIsIDEyOTQwNiwgMTI5NDEwLCAxMjk0MTQsIDEyOTQxOCwgCisgICAgMTI5NDIyLCAxMjk0MjYsIDEyOTQzMCwgMTI5NDM0LCAxMjk0MzgsIDEyOTQ0MiwgMTI5NDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0NTAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyOTQyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NDI2LCAxMjk0MjksIDEyOTQzMywgMTI5NDM3LCAxMjk0NDAsIAotICAgIDEyOTQ0NCwgMTI5NDQ4LCAxMjk0NTEsIDEyOTQ1NCwgMTI5NDU4LCAxMjk0NjIsIDEyOTQ2NSwgMTI5NDY4LCAxMjk0NzEsIAotICAgIDEyOTQ3NCwgMTI5NDc5LCAxMjk0ODIsIDEyOTQ4NiwgMTI5NDg5LCAxMjk0OTIsIDEyOTQ5NSwgMTI5NDk4LCAxMjk1MDEsIAotICAgIDEyOTUwNCwgMTI5NTA3LCAxMjk1MTAsIDEyOTUxMywgMTI5NTE2LCAxMjk1MTksIDEyOTUyMywgMTI5NTI3LCAxMjk1MzEsIAotICAgIDEyOTUzNSwgMTI5NTQwLCAxMjk1NDUsIDEyOTU1MSwgMTI5NTU3LCAxMjk1NjMsIDEyOTU2OCwgMTI5NTc0LCAxMjk1ODAsIAotICAgIDEyOTU4NiwgMTI5NTkxLCAxMjk1OTcsIDEyOTYwMywgMTI5NjA4LCAxMjk2MTMsIDEyOTYxOSwgMTI5NjI0LCAxMjk2MzAsIAotICAgIDEyOTYzNiwgMTI5NjQxLCAxMjk2NDcsIDEyOTY1MywgMTI5NjU4LCAxMjk2NjQsIDEyOTY3MCwgMTI5Njc2LCAxMjk2ODIsIAotICAgIDEyOTY4OCwgMTI5NjkyLCAxMjk2OTcsIDEyOTcwMSwgMTI5NzA2LCAxMjk3MTAsIDEyOTcxNSwgMTI5NzIwLCAxMjk3MjYsIAotICAgIDEyOTczMiwgMTI5NzM4LCAxMjk3NDMsIDEyOTc0OSwgMTI5NzU1LCAxMjk3NjEsIDEyOTc2NiwgMTI5NzcyLCAxMjk3NzgsIAotICAgIDEyOTc4MywgMTI5Nzg4LCAxMjk3OTQsIDEyOTc5OSwgMTI5ODA1LCAxMjk4MTEsIDEyOTgxNiwgMTI5ODIyLCAxMjk4MjgsIAotICAgIDEyOTgzMywgMTI5ODM5LCAxMjk4NDUsIDEyOTg1MSwgMTI5ODU3LCAxMjk4NjMsIDEyOTg2OCwgMTI5ODcyLCAxMjk4NzcsIAotICAgIDEyOTg3OSwgMTI5ODgzLCAxMjk4ODYsIDEyOTg4OSwgMTI5ODkyLCAxMjk4OTUsIDEyOTg5OCwgMTI5OTAxLCAxMjk5MDQsIAotICAgIDEyOTkwNywgMTI5OTEwLCAxMjk5MTMsIDEyOTkxNiwgMTI5OTE5LCAxMjk5MjIsIDEyOTkyNSwgMTI5OTI4LCAxMjk5MzEsIAotICAgIDEyOTkzNCwgMTI5OTM3LCAxMjk5NDAsIDEyOTk0MywgMTI5OTQ2LCAxMjk5NDksIDEyOTk1MiwgMTI5OTU1LCAxMjk5NTgsIAotICAgIDEyOTk2MSwgMTI5OTY0LCAxMjk5NjcsIDEyOTk3MCwgMTI5OTczLCAxMjk5NzYsIDEyOTk3OSwgMTI5OTgyLCAxMjk5ODUsIAotICAgIDEyOTk4OCwgMTI5OTkxLCAxMjk5OTQsIDEyOTk5NywgMTMwMDAwLCAxMzAwMDMsIDEzMDAwNiwgMTMwMDA5LCAxMzAwMTIsIAotICAgIDEzMDAxNSwgMTMwMDE4LCAxMzAwMjEsIDEzMDAyNCwgMTMwMDI3LCAxMzAwMzAsIDEzMDAzMywgMTMwMDM2LCAxMzAwMzksIAotICAgIDEzMDA0MiwgMTMwMDQ1LCAxMzAwNDgsIDEzMDA1MSwgMTMwMDU0LCAxMzAwNTcsIDEzMDA2MCwgMTMwMDYzLCAxMzAwNjYsIAotICAgIDEzMDA2OSwgMTMwMDcyLCAxMzAwNzUsIDEzMDA3OCwgMTMwMDgxLCAxMzAwODQsIDEzMDA4NywgMTMwMDkwLCAxMzAwOTMsIAotICAgIDEzMDA5NiwgMTMwMDk5LCAxMzAxMDIsIDEzMDEwNSwgMTMwMTA4LCAxMzAxMTEsIDEzMDExNCwgMTMwMTE3LCAxMzAxMjAsIAotICAgIDEzMDEyMywgMTMwMTI2LCAxMzAxMjksIDEzMDEzMiwgMTMwMTM1LCAxMzAxMzgsIDEzMDE0MSwgMTMwMTQ0LCAxMzAxNDcsIAotICAgIDEzMDE1MCwgMTMwMTUzLCAxMzAxNTYsIDEzMDE1OSwgMTMwMTYyLCAxMzAxNjUsIDEzMDE2OCwgMTMwMTcxLCAxMzAxNzQsIAotICAgIDEzMDE3NywgMTMwMTgwLCAxMzAxODMsIDEzMDE4NiwgMTMwMTg5LCAxMzAxOTIsIDEzMDE5NSwgMTMwMTk4LCAxMzAyMDEsIAotICAgIDEzMDIwNCwgMTMwMjA3LCAxMzAyMTAsIDEzMDIxMywgMTMwMjE2LCAxMzAyMTksIDEzMDIyMiwgMTMwMjI1LCAxMzAyMjgsIAotICAgIDEzMDIzMSwgMTMwMjM0LCAxMzAyMzcsIDEzMDI0MCwgMTMwMjQzLCAxMzAyNDYsIDEzMDI0OSwgMTMwMjUyLCAxMzAyNTUsIAotICAgIDEzMDI1OCwgMTMwMjYxLCAxMzAyNjQsIDEzMDI2NywgMTMwMjcwLCAxMzAyNzMsIDEzMDI3NiwgMTMwMjc5LCAxMzAyODIsIAotICAgIDEzMDI4NSwgMTMwMjg4LCAxMzAyOTEsIDEzMDI5NCwgMTMwMjk3LCAxMzAzMDAsIDEzMDMwMywgMTMwMzA2LCAxMzAzMDksIAotICAgIDEzMDMxMiwgMTMwMzE1LCAxMzAzMTgsIDEzMDMyMSwgMTMwMzI0LCAxMzAzMjcsIDEzMDMzMCwgMTMwMzMzLCAxMzAzMzYsIAotICAgIDEzMDMzOSwgMTMwMzQyLCAxMzAzNDUsIDEzMDM0OCwgMTMwMzUxLCAxMzAzNTQsIDEzMDM1NywgMTMwMzYwLCAxMzAzNjMsIAotICAgIDEzMDM2NiwgMTMwMzY5LCAxMzAzNzIsIDEzMDM3NSwgMTMwMzc4LCAxMzAzODEsIDEzMDM4NCwgMTMwMzg3LCAxMzAzOTAsIAotICAgIDEzMDM5MywgMTMwMzk2LCAxMzAzOTksIDEzMDQwMiwgMTMwNDA1LCAxMzA0MDgsIDEzMDQxMSwgMTMwNDE0LCAxMzA0MTcsIAotICAgIDEzMDQyMCwgMTMwNDIzLCAxMzA0MjYsIDEzMDQyOSwgMTMwNDMyLCAxMzA0MzUsIDEzMDQzOCwgMTMwNDQxLCAxMzA0NDQsIAotICAgIDEzMDQ0NywgMTMwNDUwLCAxMzA0NTMsIDEzMDQ1NiwgMTMwNDU5LCAxMzA0NjIsIDEzMDQ2NSwgMTMwNDY4LCAxMzA0NzEsIAotICAgIDEzMDQ3NCwgMTMwNDc3LCAxMzA0ODAsIDEzMDQ4MywgMTMwNDg2LCAxMzA0ODksIDEzMDQ5MiwgMTMwNDk1LCAxMzA0OTgsIAotICAgIDEzMDUwMSwgMTMwNTA0LCAxMzA1MDcsIDEzMDUxMCwgMTMwNTEzLCAxMzA1MTYsIDEzMDUxOSwgMTMwNTIyLCAxMzA1MjUsIAotICAgIDEzMDUyOCwgMTMwNTMxLCAxMzA1MzQsIDEzMDUzNywgMTMwNTQwLCAxMzA1NDMsIDEzMDU0NiwgMTMwNTQ5LCAxMzA1NTIsIAotICAgIDEzMDU1NSwgMTMwNTU4LCAxMzA1NjEsIDEzMDU2NCwgMTMwNTY3LCAxMzA1NzAsIDEzMDU3MywgMTMwNTc2LCAxMzA1NzksIAotICAgIDEzMDU4MiwgMTMwNTg1LCAxMzA1ODgsIDEzMDU5MSwgMTMwNTk0LCAxMzA1OTcsIDEzMDYwMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNjAzLCAxMzA2MDUsIDEzMDYwNywgMTMwNjEyLCAxMzA2MTQsIAotICAgIDEzMDYxOSwgMTMwNjIxLCAxMzA2MjYsIDEzMDYyOCwgMTMwNjMzLCAxMzA2MzUsIDEzMDYzNywgMTMwNjM5LCAxMzA2NDEsIAotICAgIDEzMDY0MywgMTMwNjQ1LCAxMzA2NDcsIDEzMDY0OSwgMTMwNjUxLCAxMzA2NTQsIDEzMDY1NywgMTMwNjU5LCAxMzA2NjEsIAotICAgIDEzMDY2NSwgMTMwNjY4LCAxMzA2NzMsIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MywgMTMwNjg2LCAxMzA2ODgsIAotICAgIDEzMDY5MiwgMTMwNjk0LCAxMzA2OTgsIDEzMDcwMCwgMTMwNzA0LCAxMzA3MDcsIDEzMDcwOSwgMTMwNzEzLCAxMzA3MTcsIAotICAgIDEzMDcxOSwgMTMwNzI1LCAxMzA3MjcsIDEzMDczMiwgMTMwNzM0LCAxMzA3MzksIDEzMDc0MSwgMTMwNzQ2LCAxMzA3NDgsIAotICAgIDEzMDc1MywgMTMwNzU1LCAxMzA3NTgsIDEzMDc2MCwgMTMwNzY0LCAxMzA3NjYsIDEzMDc3MywgMTMwNzc1LCAxMzA3NzcsIAotICAgIDEzMDc3OSwgMTMwNzg0LCAxMzA3ODYsIDEzMDc4OCwgMTMwNzkwLCAxMzA3OTIsIDEzMDc5NCwgMTMwNzk5LCAxMzA4MDMsIAotICAgIDEzMDgwNSwgMTMwODEwLCAxMzA4MTQsIDEzMDgxNiwgMTMwODIxLCAxMzA4MjUsIDEzMDgyNywgMTMwODMyLCAxMzA4MzYsIAotICAgIDEzMDgzOCwgMTMwODQwLCAxMzA4NDIsIDEzMDg0NCwgMTMwODQ4LCAxMzA4NTAsIDEzMDg1NSwgMTMwODU3LCAxMzA4NjMsIAotICAgIDEzMDg2NSwgMTMwODcxLCAxMzA4NzMsIDEzMDg3NSwgMTMwODc3LCAxMzA4ODEsIDEzMDg4MywgMTMwODkwLCAxMzA4OTIsIAotICAgIDEzMDg5OSwgMTMwOTAxLCAxMzA5MDYsIDEzMDkxMSwgMTMwOTEzLCAxMzA5MTksIDEzMDkyNSwgMTMwOTI3LCAxMzA5MzMsIAotICAgIDEzMDkzOCwgMTMwOTQwLCAxMzA5NDYsIDEzMDk1MiwgMTMwOTU0LCAxMzA5NjAsIDEzMDk2NiwgMTMwOTY4LCAxMzA5NzQsIAotICAgIDEzMDk3OCwgMTMwOTgwLCAxMzA5ODUsIDEzMDk4NywgMTMwOTg5LCAxMzA5OTQsIDEzMDk5NiwgMTMwOTk4LCAxMzEwMDQsIAotICAgIDEzMTAwNiwgMTMxMDExLCAxMzEwMTUsIDEzMTAxNywgMTMxMDIyLCAxMzEwMjYsIDEzMTAyOCwgMTMxMDM0LCAxMzEwMzYsIAotICAgIDEzMTA0MCwgMTMxMDQyLCAxMzEwNDYsIDEzMTA0OCwgMTMxMDU1LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDcxLCAxMzEwNzgsIAotICAgIDEzMTA4MCwgMTMxMDg1LCAxMzEwODcsIDEzMTA5NCwgMTMxMDk2LCAxMzExMDEsIDEzMTEwMywgMTMxMTA5LCAxMzExMTEsIAotICAgIDEzMTExNSwgMTMxMTE3LCAxMzExMjMsIDEzMTEyNSwgMTMxMTI5LCAxMzExMzEsIDEzMTEzNywgMTMxMTM5LCAxMzExNDEsIAotICAgIDEzMTE0MywgMTMxMTQ4LCAxMzExNTMsIDEzMTE1NSwgMTMxMTU5LCAxMzExNjYsIDEzMTE3MywgMTMxMTc4LCAxMzExODMsIAotICAgIDEzMTE5NSwgMTMxMTk3LCAxMzExOTksIDEzMTIwMSwgMTMxMjAzLCAxMzEyMDUsIDEzMTIwNywgMTMxMjA5LCAxMzEyMTEsIAotICAgIDEzMTIxMywgMTMxMjE1LCAxMzEyMTcsIDEzMTIxOSwgMTMxMjIxLCAxMzEyMjMsIDEzMTIyNSwgMTMxMjI3LCAxMzEyMjksIAotICAgIDEzMTIzNSwgMTMxMjQyLCAxMzEyNDcsIDEzMTI1MiwgMTMxMjYzLCAxMzEyNjUsIDEzMTI2NywgMTMxMjY5LCAxMzEyNzEsIAotICAgIDEzMTI3MywgMTMxMjc1LCAxMzEyNzcsIDEzMTI3OSwgMTMxMjgxLCAxMzEyODMsIDEzMTI4NSwgMTMxMjg3LCAxMzEyODksIAotICAgIDEzMTI5MSwgMTMxMjkzLCAxMzEyOTUsIDEzMTMwMCwgMTMxMzAyLCAxMzEzMDQsIDEzMTMxNSwgMTMxMzE3LCAxMzEzMTksIAotICAgIDEzMTMyMSwgMTMxMzIzLCAxMzEzMjUsIDEzMTMyNywgMTMxMzI5LCAxMzEzMzEsIDEzMTMzMywgMTMxMzM1LCAxMzEzMzcsIAotICAgIDEzMTMzOSwgMTMxMzQxLCAxMzEzNDMsIDEzMTM0NSwgMTMxMzQ3LCAxMzEzNDksIDEzMTM1MSwgMTMxMzUzLCAxMzEzNTUsIAotICAgIDEzMTM1NywgMTMxMzU5LCAxMzEzNjEsIDEzMTM2MywgMTMxMzY1LCAxMzEzNjcsIDEzMTM2OSwgMTMxMzcxLCAxMzEzNzMsIAotICAgIDEzMTM3NSwgMTMxMzc3LCAxMzEzNzksIDEzMTM4MSwgMTMxMzgzLCAxMzEzODUsIDEzMTM4NywgMTMxMzg5LCAxMzEzOTEsIAotICAgIDEzMTM5MywgMTMxMzk1LCAxMzEzOTcsIDEzMTM5OSwgMTMxNDAxLCAxMzE0MDMsIDEzMTQwNSwgMTMxNDA3LCAxMzE0MDksIAotICAgIDEzMTQxMSwgMTMxNDEzLCAxMzE0MTUsIDEzMTQxNywgMTMxNDE5LCAxMzE0MjEsIDEzMTQyMywgMTMxNDI1LCAxMzE0MjcsIAotICAgIDEzMTQyOSwgMTMxNDMxLCAxMzE0MzMsIDEzMTQzNSwgMTMxNDM3LCAxMzE0MzksIDEzMTQ0MSwgMTMxNDQzLCAxMzE0NDUsIAotICAgIDEzMTQ0NywgMTMxNDQ5LCAxMzE0NTEsIDEzMTQ1MywgMTMxNDU1LCAxMzE0NTcsIDEzMTQ1OSwgMTMxNDYxLCAxMzE0NjMsIAotICAgIDEzMTQ2NSwgMTMxNDY3LCAxMzE0NjksIDEzMTQ3MSwgMTMxNDczLCAxMzE0NzUsIDEzMTQ3NywgMTMxNDc5LCAxMzE0ODEsIAotICAgIDEzMTQ4MywgMTMxNDg1LCAxMzE0ODcsIDEzMTQ4OSwgMTMxNDkxLCAxMzE0OTMsIDEzMTQ5NSwgMTMxNDk3LCAxMzE0OTksIAotICAgIDEzMTUwMSwgMTMxNTAzLCAxMzE1MDUsIDEzMTUwNywgMTMxNTA5LCAxMzE1MTEsIDEzMTUxMywgMTMxNTE1LCAxMzE1MTcsIAotICAgIDEzMTUxOSwgMTMxNTIxLCAxMzE1MjMsIDEzMTUyNSwgMTMxNTI3LCAxMzE1MjksIDEzMTUzMSwgMTMxNTMzLCAxMzE1MzUsIAotICAgIDEzMTUzNywgMTMxNTM5LCAxMzE1NDEsIDEzMTU0MywgMTMxNTQ1LCAxMzE1NDcsIDEzMTU0OSwgMTMxNTUxLCAxMzE1NTMsIAotICAgIDEzMTU1NSwgMTMxNTU3LCAxMzE1NTksIDEzMTU2MSwgMTMxNTYzLCAxMzE1NjUsIDEzMTU2NywgMTMxNTY5LCAxMzE1NzEsIAotICAgIDEzMTU3MywgMTMxNTc1LCAxMzE1NzcsIDEzMTU3OSwgMTMxNTgxLCAxMzE1ODMsIDEzMTU4NSwgMTMxNTg3LCAxMzE1ODksIAotICAgIDEzMTU5MSwgMTMxNTkzLCAxMzE1OTUsIDEzMTU5NywgMTMxNTk5LCAxMzE2MDEsIDEzMTYwMywgMTMxNjA1LCAxMzE2MDcsIAotICAgIDEzMTYwOSwgMTMxNjExLCAxMzE2MTMsIDEzMTYxNSwgMTMxNjE3LCAxMzE2MTksIDEzMTYyMSwgMTMxNjIzLCAxMzE2MjUsIAotICAgIDEzMTYyNywgMTMxNjI5LCAxMzE2MzEsIDEzMTYzMywgMTMxNjM1LCAxMzE2MzcsIDEzMTYzOSwgMTMxNjQxLCAxMzE2NDMsIAotICAgIDEzMTY0NSwgMTMxNjQ3LCAxMzE2NDksIDEzMTY1MSwgMTMxNjUzLCAxMzE2NTUsIDEzMTY1NywgMTMxNjU5LCAxMzE2NjEsIAotICAgIDEzMTY2MywgMTMxNjY1LCAxMzE2NjcsIDEzMTY2OSwgMTMxNjcxLCAxMzE2NzMsIDEzMTY3NSwgMTMxNjc3LCAxMzE2NzksIAotICAgIDEzMTY4MSwgMTMxNjgzLCAxMzE2ODUsIDEzMTY4NywgMTMxNjg5LCAxMzE2OTEsIDEzMTY5MywgMTMxNjk1LCAxMzE2OTcsIAotICAgIDEzMTY5OSwgMTMxNzAxLCAxMzE3MDMsIDEzMTcwNSwgMTMxNzA3LCAxMzE3MDksIDEzMTcxMSwgMTMxNzEzLCAxMzE3MTUsIAotICAgIDEzMTcxNywgMTMxNzE5LCAxMzE3MjEsIDEzMTcyMywgMTMxNzI1LCAxMzE3MjcsIDEzMTcyOSwgMTMxNzMxLCAxMzE3MzMsIAotICAgIDEzMTczNSwgMTMxNzM3LCAxMzE3MzksIDEzMTc0MSwgMTMxNzQzLCAxMzE3NDUsIDEzMTc0NywgMTMxNzQ5LCAxMzE3NTEsIAotICAgIDEzMTc1MywgMTMxNzU1LCAxMzE3NTcsIDEzMTc1OSwgMTMxNzYxLCAxMzE3NjMsIDEzMTc2NSwgMTMxNzY3LCAxMzE3NjksIAotICAgIDEzMTc3MSwgMTMxNzczLCAxMzE3NzUsIDEzMTc3NywgMTMxNzc5LCAxMzE3ODEsIDEzMTc4MywgMTMxNzg1LCAxMzE3ODcsIAotICAgIDEzMTc4OSwgMTMxNzkxLCAxMzE3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzMTc5NSwgMTMxODA1LCAxMzE4MTUsIDEzMTgyNCwgMTMxODMzLCAxMzE4NDYsIDEzMTg1OSwgMTMxODcxLCAxMzE4ODMsIAotICAgIDEzMTg5MywgMTMxOTAzLCAxMzE5MTMsIDEzMTkyMywgMTMxOTM0LCAxMzE5NDUsIDEzMTk1NSwgMTMxOTY0LCAxMzE5NzMsIAotICAgIDEzMTk4MiwgMTMxOTk1LCAxMzIwMDgsIDEzMjAyMCwgMTMyMDMyLCAxMzIwNDIsIDEzMjA1MiwgMTMyMDYyLCAxMzIwNzIsIAotICAgIDEzMjA4MSwgMTMyMDkwLCAxMzIwOTksIDEzMjEwOCwgMTMyMTE3LCAxMzIxMjYsIDEzMjEzNSwgMTMyMTQ0LCAxMzIxNTMsIAotICAgIDEzMjE2MiwgMTMyMTcxLCAxMzIxODAsIDEzMjE5MSwgMTMyMjAxLCAxMzIyMTEsIDEzMjIyNCwgMTMyMjM0LCAxMzIyNDcsIAotICAgIDEzMjI1NCwgMTMyMjY0LCAxMzIyNzEsIDEzMjI3OCwgMTMyMjg1LCAxMzIyOTIsIDEzMjI5OSwgMTMyMzA2LCAxMzIzMTUsIAotICAgIDEzMjMyNCwgMTMyMzMzLCAxMzIzNDIsIDEzMjM1MSwgMTMyMzYwLCAxMzIzNjksIDEzMjM3OCwgMTMyMzg2LCAxMzIzOTQsIAotICAgIDEzMjQwMSwgMTMyNDExLCAxMzI0MjAsIDEzMjQyOCwgMTMyNDM1LCAxMzI0NDUsIDEzMjQ1NCwgMTMyNDU4LCAxMzI0NjIsIAotICAgIDEzMjQ2NiwgMTMyNDcwLCAxMzI0NzQsIDEzMjQ3OCwgMTMyNDgyLCAxMzI0ODYsIDEzMjQ5MCwgMTMyNDk0LCAxMzI0OTcsIAotICAgIDEzMjUwMSwgMTMyNTA0LCAxMzI1MDcsIDEzMjUxMSwgMTMyNTE1LCAxMzI1MTksIDEzMjUyMywgMTMyNTI3LCAxMzI1MzEsIAotICAgIDEzMjUzNSwgMTMyNTM5LCAxMzI1NDMsIDEzMjU0NywgMTMyNTUxLCAxMzI1NTUsIDEzMjU1OSwgMTMyNTYzLCAxMzI1NjcsIAotICAgIDEzMjU3MSwgMTMyNTc1LCAxMzI1NzksIDEzMjU4MywgMTMyNTg3LCAxMzI1OTEsIDEzMjU5NSwgMTMyNTk5LCAxMzI2MDMsIAotICAgIDEzMjYwNywgMTMyNjExLCAxMzI2MTUsIDEzMjYxOSwgMTMyNjIzLCAxMzI2MjcsIDEzMjYzMSwgMTMyNjM1LCAxMzI2MzksIAotICAgIDEzMjY0MywgMTMyNjQ3LCAxMzI2NTEsIDEzMjY1NSwgMTMyNjU5LCAxMzI2NjMsIDEzMjY2NywgMTMyNjcxLCAxMzI2NzUsIAotICAgIDEzMjY3OSwgMTMyNjgzLCAxMzI2ODcsIDEzMjY5MSwgMTMyNjk1LCAxMzI2OTksIDEzMjcwMywgMTMyNzA3LCAxMzI3MTEsIAotICAgIDEzMjcxNSwgMTMyNzE5LCAxMzI3MjMsIDEzMjcyNywgMTMyNzMxLCAxMzI3MzUsIDEzMjczOSwgMTMyNzQzLCAxMzI3NDcsIAotICAgIDEzMjc1MSwgMTMyNzU1LCAxMzI3NTksIDEzMjc2MywgMTMyNzY3LCAxMzI3NzEsIDEzMjc3NSwgMTMyNzc5LCAxMzI3ODMsIAotICAgIDEzMjc4NywgMTMyNzkxLCAxMzI3OTUsIDEzMjc5OSwgMTMyODAzLCAxMzI4MDcsIDEzMjgxMSwgMTMyODE1LCAxMzI4MTksIAotICAgIDEzMjgyMywgMTMyODI3LCAxMzI4MzEsIDEzMjgzNSwgMTMyODM5LCAxMzI4NDMsIDEzMjg0NywgMTMyODUwLCAxMzI4NTQsIAotICAgIDEzMjg1OCwgMTMyODYyLCAxMzI4NjYsIDEzMjg3MCwgMTMyODc0LCAxMzI4NzgsIDEzMjg4MiwgMTMyODg2LCAxMzI4OTAsIAotICAgIDEzMjg5NCwgMTMyODk4LCAxMzI5MDIsIDEzMjkwNiwgMTMyOTEwLCAxMzI5MTQsIDEzMjkxOCwgMTMyOTIyLCAxMzI5MjYsIAotICAgIDEzMjkzMCwgMTMyOTM0LCAxMzI5MzgsIDEzMjk0MiwgMTMyOTQ2LCAxMzI5NTAsIDEzMjk1NCwgMTMyOTU4LCAxMzI5NjIsIAotICAgIDEzMjk2NiwgMTMyOTcwLCAxMzI5NzQsIDEzMjk3OCwgMTMyOTgyLCAxMzI5ODYsIDEzMjk5MCwgMTMyOTk0LCAxMzI5OTgsIAotICAgIDEzMzAwMiwgMTMzMDA2LCAxMzMwMTAsIDEzMzAxNCwgMTMzMDE4LCAxMzMwMjIsIDEzMzAyNiwgMTMzMDMwLCAxMzMwMzQsIAotICAgIDEzMzAzOCwgMTMzMDQyLCAxMzMwNDYsIDEzMzA1MCwgMTMzMDU0LCAxMzMwNTgsIDEzMzA2MiwgMTMzMDY2LCAxMzMwNzAsIAotICAgIDEzMzA3NCwgMTMzMDc4LCAxMzMwODIsIDEzMzA4NiwgMTMzMDkwLCAxMzMwOTQsIDEzMzA5OCwgMTMzMTAyLCAxMzMxMDYsIAotICAgIDEzMzExMCwgMTMzMTE0LCAxMzMxMTgsIDEzMzEyMiwgMTMzMTI2LCAxMzMxMzAsIDEzMzEzNCwgMTMzMTM4LCAxMzMxNDIsIAotICAgIDEzMzE0NiwgMTMzMTUwLCAxMzMxNTQsIDEzMzE1OCwgMTMzMTYyLCAxMzMxNjYsIDEzMzE3MCwgMTMzMTc0LCAxMzMxNzgsIAotICAgIDEzMzE4MiwgMTMzMTg2LCAxMzMxOTAsIDEzMzE5NCwgMTMzMTk4LCAxMzMyMDIsIDEzMzIwNiwgMTMzMjEwLCAxMzMyMTQsIAotICAgIDEzMzIxOCwgMTMzMjIyLCAxMzMyMjYsIDEzMzIzMCwgMTMzMjM0LCAxMzMyMzgsIDEzMzI0MiwgMTMzMjQ2LCAxMzMyNTAsIAotICAgIDEzMzI1NCwgMTMzMjU4LCAxMzMyNjIsIDEzMzI2NiwgMTMzMjcwLCAxMzMyNzQsIDEzMzI3OCwgMTMzMjgyLCAxMzMyODYsIAotICAgIDEzMzI5MCwgMTMzMjk0LCAxMzMyOTgsIDEzMzMwMiwgMTMzMzA2LCAxMzMzMTAsIDEzMzMxNCwgMTMzMzE4LCAxMzMzMjIsIAotICAgIDEzMzMyNiwgMTMzMzMwLCAxMzMzMzQsIDEzMzMzOCwgMTMzMzQyLCAxMzMzNDYsIDEzMzM1MCwgMTMzMzU0LCAxMzMzNTgsIAotICAgIDEzMzM2MiwgMTMzMzY2LCAxMzMzNzAsIDEzMzM3NCwgMTMzMzc4LCAxMzMzODIsIDEzMzM4NiwgMTMzMzkwLCAxMzMzOTQsIAotICAgIDEzMzM5OCwgMTMzNDAyLCAxMzM0MDYsIDEzMzQxMCwgMTMzNDE0LCAxMzM0MTgsIDEzMzQyMiwgMTMzNDI2LCAxMzM0MzAsIAotICAgIDEzMzQzNCwgMTMzNDM4LCAxMzM0NDIsIDEzMzQ0NiwgMTMzNDUwLCAxMzM0NTQsIDEzMzQ1OCwgMTMzNDYyLCAxMzM0NjYsIAotICAgIDEzMzQ3MCwgMTMzNDc0LCAxMzM0NzgsIDEzMzQ4MiwgMTMzNDg2LCAxMzM0OTAsIDEzMzQ5NCwgMTMzNDk4LCAxMzM1MDIsIAotICAgIDEzMzUwNiwgMTMzNTEwLCAxMzM1MTQsIDEzMzUxOCwgMTMzNTIyLCAxMzM1MjYsIDEzMzUzMCwgMTMzNTM0LCAxMzM1MzgsIAotICAgIDEzMzU0MiwgMTMzNTQ2LCAxMzM1NTAsIDEzMzU1NCwgMTMzNTU4LCAxMzM1NjIsIDEzMzU2NiwgMTMzNTcwLCAxMzM1NzQsIAotICAgIDEzMzU3OCwgMTMzNTgyLCAxMzM1ODYsIDEzMzU5MCwgMTMzNTk0LCAxMzM1OTgsIDEzMzYwMiwgMTMzNjA2LCAxMzM2MTAsIAotICAgIDEzMzYxNCwgMTMzNjE5LCAxMzM2MjQsIDEzMzYyOSwgMTMzNjMzLCAxMzM2MzksIDEzMzY0NiwgMTMzNjUzLCAxMzM2NjAsIAotICAgIDEzMzY2NywgMTMzNjc0LCAxMzM2ODEsIDEzMzY4OCwgMTMzNjk1LCAxMzM3MDIsIDEzMzcwOSwgMTMzNzE2LCAxMzM3MjMsIAotICAgIDEzMzczMCwgMTMzNzM2LCAxMzM3NDMsIDEzMzc1MCwgMTMzNzU2LCAxMzM3NjMsIDEzMzc3MCwgMTMzNzc3LCAxMzM3ODQsIAotICAgIDEzMzc5MSwgMTMzNzk4LCAxMzM4MDUsIDEzMzgxMiwgMTMzODE5LCAxMzM4MjYsIDEzMzgzMywgMTMzODQwLCAxMzM4NDcsIAotICAgIDEzMzg1MywgMTMzODU5LCAxMzM4NjYsIDEzMzg3MywgMTMzODgyLCAxMzM4OTEsIDEzMzkwMCwgMTMzOTA5LCAxMzM5MTQsIAotICAgIDEzMzkxOSwgMTMzOTI1LCAxMzM5MzEsIDEzMzkzNywgMTMzOTQzLCAxMzM5NDksIDEzMzk1NSwgMTMzOTYxLCAxMzM5NjcsIAotICAgIDEzMzk3MywgMTMzOTc5LCAxMzM5ODUsIDEzMzk5MSwgMTMzOTk2LCAxMzQwMDIsIDEzNDAxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI5NDU0LCAxMjk0NTcsIDEyOTQ2MSwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MiwgMTI5NDc2LCAKKyAgICAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0OTAsIDEyOTQ5MywgMTI5NDk2LCAxMjk0OTksIDEyOTUwMiwgMTI5NTA3LCAKKyAgICAxMjk1MTAsIDEyOTUxNCwgMTI5NTE3LCAxMjk1MjAsIDEyOTUyMywgMTI5NTI2LCAxMjk1MjksIDEyOTUzMiwgMTI5NTM1LCAKKyAgICAxMjk1MzgsIDEyOTU0MSwgMTI5NTQ0LCAxMjk1NDcsIDEyOTU1MSwgMTI5NTU1LCAxMjk1NTksIDEyOTU2MywgMTI5NTY4LCAKKyAgICAxMjk1NzMsIDEyOTU3OSwgMTI5NTg1LCAxMjk1OTEsIDEyOTU5NiwgMTI5NjAyLCAxMjk2MDgsIDEyOTYxNCwgMTI5NjE5LCAKKyAgICAxMjk2MjUsIDEyOTYzMSwgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUyLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjY5LCAKKyAgICAxMjk2NzUsIDEyOTY4MSwgMTI5Njg2LCAxMjk2OTIsIDEyOTY5OCwgMTI5NzA0LCAxMjk3MTAsIDEyOTcxNiwgMTI5NzIwLCAKKyAgICAxMjk3MjUsIDEyOTcyOSwgMTI5NzM0LCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ4LCAxMjk3NTQsIDEyOTc2MCwgMTI5NzY2LCAKKyAgICAxMjk3NzEsIDEyOTc3NywgMTI5NzgzLCAxMjk3ODksIDEyOTc5NCwgMTI5ODAwLCAxMjk4MDYsIDEyOTgxMSwgMTI5ODE2LCAKKyAgICAxMjk4MjIsIDEyOTgyNywgMTI5ODMzLCAxMjk4MzksIDEyOTg0NCwgMTI5ODUwLCAxMjk4NTYsIDEyOTg2MSwgMTI5ODY3LCAKKyAgICAxMjk4NzMsIDEyOTg3OSwgMTI5ODg1LCAxMjk4OTEsIDEyOTg5NiwgMTI5OTAwLCAxMjk5MDUsIDEyOTkwNywgMTI5OTExLCAKKyAgICAxMjk5MTQsIDEyOTkxNywgMTI5OTIwLCAxMjk5MjMsIDEyOTkyNiwgMTI5OTI5LCAxMjk5MzIsIDEyOTkzNSwgMTI5OTM4LCAKKyAgICAxMjk5NDEsIDEyOTk0NCwgMTI5OTQ3LCAxMjk5NTAsIDEyOTk1MywgMTI5OTU2LCAxMjk5NTksIDEyOTk2MiwgMTI5OTY1LCAKKyAgICAxMjk5NjgsIDEyOTk3MSwgMTI5OTc0LCAxMjk5NzcsIDEyOTk4MCwgMTI5OTgzLCAxMjk5ODYsIDEyOTk4OSwgMTI5OTkyLCAKKyAgICAxMjk5OTUsIDEyOTk5OCwgMTMwMDAxLCAxMzAwMDQsIDEzMDAwNywgMTMwMDEwLCAxMzAwMTMsIDEzMDAxNiwgMTMwMDE5LCAKKyAgICAxMzAwMjIsIDEzMDAyNSwgMTMwMDI4LCAxMzAwMzEsIDEzMDAzNCwgMTMwMDM3LCAxMzAwNDAsIDEzMDA0MywgMTMwMDQ2LCAKKyAgICAxMzAwNDksIDEzMDA1MiwgMTMwMDU1LCAxMzAwNTgsIDEzMDA2MSwgMTMwMDY0LCAxMzAwNjcsIDEzMDA3MCwgMTMwMDczLCAKKyAgICAxMzAwNzYsIDEzMDA3OSwgMTMwMDgyLCAxMzAwODUsIDEzMDA4OCwgMTMwMDkxLCAxMzAwOTQsIDEzMDA5NywgMTMwMTAwLCAKKyAgICAxMzAxMDMsIDEzMDEwNiwgMTMwMTA5LCAxMzAxMTIsIDEzMDExNSwgMTMwMTE4LCAxMzAxMjEsIDEzMDEyNCwgMTMwMTI3LCAKKyAgICAxMzAxMzAsIDEzMDEzMywgMTMwMTM2LCAxMzAxMzksIDEzMDE0MiwgMTMwMTQ1LCAxMzAxNDgsIDEzMDE1MSwgMTMwMTU0LCAKKyAgICAxMzAxNTcsIDEzMDE2MCwgMTMwMTYzLCAxMzAxNjYsIDEzMDE2OSwgMTMwMTcyLCAxMzAxNzUsIDEzMDE3OCwgMTMwMTgxLCAKKyAgICAxMzAxODQsIDEzMDE4NywgMTMwMTkwLCAxMzAxOTMsIDEzMDE5NiwgMTMwMTk5LCAxMzAyMDIsIDEzMDIwNSwgMTMwMjA4LCAKKyAgICAxMzAyMTEsIDEzMDIxNCwgMTMwMjE3LCAxMzAyMjAsIDEzMDIyMywgMTMwMjI2LCAxMzAyMjksIDEzMDIzMiwgMTMwMjM1LCAKKyAgICAxMzAyMzgsIDEzMDI0MSwgMTMwMjQ0LCAxMzAyNDcsIDEzMDI1MCwgMTMwMjUzLCAxMzAyNTYsIDEzMDI1OSwgMTMwMjYyLCAKKyAgICAxMzAyNjUsIDEzMDI2OCwgMTMwMjcxLCAxMzAyNzQsIDEzMDI3NywgMTMwMjgwLCAxMzAyODMsIDEzMDI4NiwgMTMwMjg5LCAKKyAgICAxMzAyOTIsIDEzMDI5NSwgMTMwMjk4LCAxMzAzMDEsIDEzMDMwNCwgMTMwMzA3LCAxMzAzMTAsIDEzMDMxMywgMTMwMzE2LCAKKyAgICAxMzAzMTksIDEzMDMyMiwgMTMwMzI1LCAxMzAzMjgsIDEzMDMzMSwgMTMwMzM0LCAxMzAzMzcsIDEzMDM0MCwgMTMwMzQzLCAKKyAgICAxMzAzNDYsIDEzMDM0OSwgMTMwMzUyLCAxMzAzNTUsIDEzMDM1OCwgMTMwMzYxLCAxMzAzNjQsIDEzMDM2NywgMTMwMzcwLCAKKyAgICAxMzAzNzMsIDEzMDM3NiwgMTMwMzc5LCAxMzAzODIsIDEzMDM4NSwgMTMwMzg4LCAxMzAzOTEsIDEzMDM5NCwgMTMwMzk3LCAKKyAgICAxMzA0MDAsIDEzMDQwMywgMTMwNDA2LCAxMzA0MDksIDEzMDQxMiwgMTMwNDE1LCAxMzA0MTgsIDEzMDQyMSwgMTMwNDI0LCAKKyAgICAxMzA0MjcsIDEzMDQzMCwgMTMwNDMzLCAxMzA0MzYsIDEzMDQzOSwgMTMwNDQyLCAxMzA0NDUsIDEzMDQ0OCwgMTMwNDUxLCAKKyAgICAxMzA0NTQsIDEzMDQ1NywgMTMwNDYwLCAxMzA0NjMsIDEzMDQ2NiwgMTMwNDY5LCAxMzA0NzIsIDEzMDQ3NSwgMTMwNDc4LCAKKyAgICAxMzA0ODEsIDEzMDQ4NCwgMTMwNDg3LCAxMzA0OTAsIDEzMDQ5MywgMTMwNDk2LCAxMzA0OTksIDEzMDUwMiwgMTMwNTA1LCAKKyAgICAxMzA1MDgsIDEzMDUxMSwgMTMwNTE0LCAxMzA1MTcsIDEzMDUyMCwgMTMwNTIzLCAxMzA1MjYsIDEzMDUyOSwgMTMwNTMyLCAKKyAgICAxMzA1MzUsIDEzMDUzOCwgMTMwNTQxLCAxMzA1NDQsIDEzMDU0NywgMTMwNTUwLCAxMzA1NTMsIDEzMDU1NiwgMTMwNTU5LCAKKyAgICAxMzA1NjIsIDEzMDU2NSwgMTMwNTY4LCAxMzA1NzEsIDEzMDU3NCwgMTMwNTc3LCAxMzA1ODAsIDEzMDU4MywgMTMwNTg2LCAKKyAgICAxMzA1ODksIDEzMDU5MiwgMTMwNTk1LCAxMzA1OTgsIDEzMDYwMSwgMTMwNjA0LCAxMzA2MDcsIDEzMDYxMCwgMTMwNjEzLCAKKyAgICAxMzA2MTYsIDEzMDYxOSwgMTMwNjIyLCAxMzA2MjUsIDEzMDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTMwNjMxLCAxMzA2MzMsIDEzMDYzNSwgMTMwNjQwLCAxMzA2NDIsIDEzMDY0NywgMTMwNjQ5LCAKKyAgICAxMzA2NTQsIDEzMDY1NiwgMTMwNjYxLCAxMzA2NjMsIDEzMDY2NSwgMTMwNjY3LCAxMzA2NjksIDEzMDY3MSwgMTMwNjczLCAKKyAgICAxMzA2NzUsIDEzMDY3NywgMTMwNjc5LCAxMzA2ODIsIDEzMDY4NSwgMTMwNjg3LCAxMzA2ODksIDEzMDY5MywgMTMwNjk2LCAKKyAgICAxMzA3MDEsIDEzMDcwMywgMTMwNzA1LCAxMzA3MDcsIDEzMDcxMSwgMTMwNzE0LCAxMzA3MTYsIDEzMDcyMCwgMTMwNzIyLCAKKyAgICAxMzA3MjYsIDEzMDcyOCwgMTMwNzMyLCAxMzA3MzUsIDEzMDczNywgMTMwNzQxLCAxMzA3NDUsIDEzMDc0NywgMTMwNzUzLCAKKyAgICAxMzA3NTUsIDEzMDc2MCwgMTMwNzYyLCAxMzA3NjcsIDEzMDc2OSwgMTMwNzc0LCAxMzA3NzYsIDEzMDc4MSwgMTMwNzgzLCAKKyAgICAxMzA3ODYsIDEzMDc4OCwgMTMwNzkyLCAxMzA3OTQsIDEzMDgwMSwgMTMwODAzLCAxMzA4MDUsIDEzMDgwNywgMTMwODEyLCAKKyAgICAxMzA4MTQsIDEzMDgxNiwgMTMwODE4LCAxMzA4MjAsIDEzMDgyMiwgMTMwODI3LCAxMzA4MzEsIDEzMDgzMywgMTMwODM4LCAKKyAgICAxMzA4NDIsIDEzMDg0NCwgMTMwODQ5LCAxMzA4NTMsIDEzMDg1NSwgMTMwODYwLCAxMzA4NjQsIDEzMDg2NiwgMTMwODY4LCAKKyAgICAxMzA4NzAsIDEzMDg3MiwgMTMwODc2LCAxMzA4NzgsIDEzMDg4MywgMTMwODg1LCAxMzA4OTEsIDEzMDg5MywgMTMwODk5LCAKKyAgICAxMzA5MDEsIDEzMDkwMywgMTMwOTA1LCAxMzA5MDksIDEzMDkxMSwgMTMwOTE4LCAxMzA5MjAsIDEzMDkyNywgMTMwOTI5LCAKKyAgICAxMzA5MzQsIDEzMDkzOSwgMTMwOTQxLCAxMzA5NDcsIDEzMDk1MywgMTMwOTU1LCAxMzA5NjEsIDEzMDk2NiwgMTMwOTY4LCAKKyAgICAxMzA5NzQsIDEzMDk4MCwgMTMwOTgyLCAxMzA5ODgsIDEzMDk5NCwgMTMwOTk2LCAxMzEwMDIsIDEzMTAwNiwgMTMxMDA4LCAKKyAgICAxMzEwMTMsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNCwgMTMxMDI2LCAxMzEwMzIsIDEzMTAzNCwgMTMxMDM5LCAKKyAgICAxMzEwNDMsIDEzMTA0NSwgMTMxMDUwLCAxMzEwNTQsIDEzMTA1NiwgMTMxMDYyLCAxMzEwNjQsIDEzMTA2OCwgMTMxMDcwLCAKKyAgICAxMzEwNzQsIDEzMTA3NiwgMTMxMDgzLCAxMzEwOTAsIDEzMTA5MiwgMTMxMDk5LCAxMzExMDYsIDEzMTEwOCwgMTMxMTEzLCAKKyAgICAxMzExMTUsIDEzMTEyMiwgMTMxMTI0LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MywgMTMxMTQ1LCAKKyAgICAxMzExNTEsIDEzMTE1MywgMTMxMTU3LCAxMzExNTksIDEzMTE2NSwgMTMxMTY3LCAxMzExNjksIDEzMTE3MSwgMTMxMTc2LCAKKyAgICAxMzExODEsIDEzMTE4MywgMTMxMTg1LCAxMzExOTQsIDEzMTE5OCwgMTMxMjA1LCAxMzEyMTIsIDEzMTIxNywgMTMxMjIyLCAKKyAgICAxMzEyMzQsIDEzMTIzNiwgMTMxMjM4LCAxMzEyNDAsIDEzMTI0MiwgMTMxMjQ0LCAxMzEyNDYsIDEzMTI0OCwgMTMxMjUwLCAKKyAgICAxMzEyNTIsIDEzMTI1NCwgMTMxMjU2LCAxMzEyNTgsIDEzMTI2MCwgMTMxMjYyLCAxMzEyNjQsIDEzMTI2NiwgMTMxMjY4LCAKKyAgICAxMzEyNzAsIDEzMTI3MiwgMTMxMjc0LCAxMzEyNzYsIDEzMTI4MiwgMTMxMjg5LCAxMzEyOTQsIDEzMTI5OSwgMTMxMzEwLCAKKyAgICAxMzEzMTIsIDEzMTMxNCwgMTMxMzE2LCAxMzEzMTgsIDEzMTMyMCwgMTMxMzIyLCAxMzEzMjQsIDEzMTMyNiwgMTMxMzI4LCAKKyAgICAxMzEzMzAsIDEzMTMzMiwgMTMxMzM0LCAxMzEzMzYsIDEzMTMzOCwgMTMxMzQwLCAxMzEzNDIsIDEzMTM0NywgMTMxMzQ5LCAKKyAgICAxMzEzNTEsIDEzMTM1NywgMTMxMzY5LCAxMzEzODAsIDEzMTM4MiwgMTMxMzg0LCAxMzEzODYsIDEzMTM4OCwgMTMxMzkwLCAKKyAgICAxMzEzOTIsIDEzMTM5NCwgMTMxMzk2LCAxMzEzOTgsIDEzMTQwMCwgMTMxNDAyLCAxMzE0MDQsIDEzMTQwNiwgMTMxNDA4LCAKKyAgICAxMzE0MTAsIDEzMTQxMiwgMTMxNDE0LCAxMzE0MTYsIDEzMTQxOCwgMTMxNDIwLCAxMzE0MjIsIDEzMTQyNCwgMTMxNDI2LCAKKyAgICAxMzE0MjgsIDEzMTQzMCwgMTMxNDMyLCAxMzE0MzQsIDEzMTQzNiwgMTMxNDM4LCAxMzE0NDAsIDEzMTQ0MiwgMTMxNDQ0LCAKKyAgICAxMzE0NDYsIDEzMTQ0OCwgMTMxNDUwLCAxMzE0NTIsIDEzMTQ1NCwgMTMxNDU2LCAxMzE0NTgsIDEzMTQ2MCwgMTMxNDYyLCAKKyAgICAxMzE0NjQsIDEzMTQ2NiwgMTMxNDY4LCAxMzE0NzAsIDEzMTQ3MiwgMTMxNDc0LCAxMzE0NzYsIDEzMTQ3OCwgMTMxNDgwLCAKKyAgICAxMzE0ODIsIDEzMTQ4NCwgMTMxNDg2LCAxMzE0ODgsIDEzMTQ5MCwgMTMxNDkyLCAxMzE0OTQsIDEzMTQ5NiwgMTMxNDk4LCAKKyAgICAxMzE1MDAsIDEzMTUwMiwgMTMxNTA0LCAxMzE1MDYsIDEzMTUwOCwgMTMxNTEwLCAxMzE1MTIsIDEzMTUxNCwgMTMxNTE2LCAKKyAgICAxMzE1MTgsIDEzMTUyMCwgMTMxNTIyLCAxMzE1MjQsIDEzMTUyNiwgMTMxNTI4LCAxMzE1MzAsIDEzMTUzMiwgMTMxNTM0LCAKKyAgICAxMzE1MzYsIDEzMTUzOCwgMTMxNTQwLCAxMzE1NDIsIDEzMTU0NCwgMTMxNTQ2LCAxMzE1NDgsIDEzMTU1MCwgMTMxNTUyLCAKKyAgICAxMzE1NTQsIDEzMTU1NiwgMTMxNTU4LCAxMzE1NjAsIDEzMTU2MiwgMTMxNTY0LCAxMzE1NjYsIDEzMTU2OCwgMTMxNTcwLCAKKyAgICAxMzE1NzIsIDEzMTU3NCwgMTMxNTc2LCAxMzE1NzgsIDEzMTU4MCwgMTMxNTgyLCAxMzE1ODQsIDEzMTU4NiwgMTMxNTg4LCAKKyAgICAxMzE1OTAsIDEzMTU5MiwgMTMxNTk0LCAxMzE1OTYsIDEzMTU5OCwgMTMxNjAwLCAxMzE2MDIsIDEzMTYwNCwgMTMxNjA2LCAKKyAgICAxMzE2MDgsIDEzMTYxMCwgMTMxNjEyLCAxMzE2MTQsIDEzMTYxNiwgMTMxNjE4LCAxMzE2MjAsIDEzMTYyMiwgMTMxNjI0LCAKKyAgICAxMzE2MjYsIDEzMTYyOCwgMTMxNjMwLCAxMzE2MzIsIDEzMTYzNCwgMTMxNjM2LCAxMzE2MzgsIDEzMTY0MCwgMTMxNjQyLCAKKyAgICAxMzE2NDQsIDEzMTY0NiwgMTMxNjQ4LCAxMzE2NTAsIDEzMTY1MiwgMTMxNjU0LCAxMzE2NTYsIDEzMTY1OCwgMTMxNjYwLCAKKyAgICAxMzE2NjIsIDEzMTY2NCwgMTMxNjY2LCAxMzE2NjgsIDEzMTY3MCwgMTMxNjcyLCAxMzE2NzQsIDEzMTY3NiwgMTMxNjc4LCAKKyAgICAxMzE2ODAsIDEzMTY4MiwgMTMxNjg0LCAxMzE2ODYsIDEzMTY4OCwgMTMxNjkwLCAxMzE2OTIsIDEzMTY5NCwgMTMxNjk2LCAKKyAgICAxMzE2OTgsIDEzMTcwMCwgMTMxNzAyLCAxMzE3MDQsIDEzMTcwNiwgMTMxNzA4LCAxMzE3MTAsIDEzMTcxMiwgMTMxNzE0LCAKKyAgICAxMzE3MTYsIDEzMTcxOCwgMTMxNzIwLCAxMzE3MjIsIDEzMTcyNCwgMTMxNzI2LCAxMzE3MjgsIDEzMTczMCwgMTMxNzMyLCAKKyAgICAxMzE3MzQsIDEzMTczNiwgMTMxNzM4LCAxMzE3NDAsIDEzMTc0MiwgMTMxNzQ0LCAxMzE3NDYsIDEzMTc0OCwgMTMxNzUwLCAKKyAgICAxMzE3NTIsIDEzMTc1NCwgMTMxNzU2LCAxMzE3NTgsIDEzMTc2MCwgMTMxNzYyLCAxMzE3NjQsIDEzMTc2NiwgMTMxNzY4LCAKKyAgICAxMzE3NzAsIDEzMTc3MiwgMTMxNzc0LCAxMzE3NzYsIDEzMTc3OCwgMTMxNzgwLCAxMzE3ODIsIDEzMTc4NCwgMTMxNzg2LCAKKyAgICAxMzE3ODgsIDEzMTc5MCwgMTMxNzkyLCAxMzE3OTQsIDEzMTc5NiwgMTMxNzk4LCAxMzE4MDAsIDEzMTgwMiwgMTMxODA0LCAKKyAgICAxMzE4MDYsIDEzMTgwOCwgMTMxODEwLCAxMzE4MTIsIDEzMTgxNCwgMTMxODE2LCAxMzE4MTgsIDEzMTgyMCwgMTMxODIyLCAKKyAgICAxMzE4MjQsIDEzMTgyNiwgMTMxODI4LCAxMzE4MzAsIDEzMTgzMiwgMTMxODM0LCAxMzE4MzYsIDEzMTgzOCwgMTMxODQwLCAKKyAgICAxMzE4NDIsIDEzMTg0NCwgMTMxODQ2LCAxMzE4NDgsIDEzMTg1MCwgMTMxODUyLCAxMzE4NTQsIDEzMTg1NiwgMTMxODU4LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzE4NjAsIDEzMTg3MCwgMTMxODgwLCAxMzE4ODksIDEzMTg5OCwgMTMxOTExLCAKKyAgICAxMzE5MjQsIDEzMTkzNiwgMTMxOTQ4LCAxMzE5NTgsIDEzMTk2OCwgMTMxOTc4LCAxMzE5ODgsIDEzMTk5OSwgMTMyMDEwLCAKKyAgICAxMzIwMjAsIDEzMjAyOSwgMTMyMDM4LCAxMzIwNDcsIDEzMjA2MCwgMTMyMDczLCAxMzIwODUsIDEzMjA5NywgMTMyMTA3LCAKKyAgICAxMzIxMTcsIDEzMjEyNywgMTMyMTM3LCAxMzIxNDYsIDEzMjE1NSwgMTMyMTY0LCAxMzIxNzMsIDEzMjE4MiwgMTMyMTkxLCAKKyAgICAxMzIyMDAsIDEzMjIwOSwgMTMyMjE4LCAxMzIyMjcsIDEzMjIzNiwgMTMyMjQ1LCAxMzIyNTYsIDEzMjI2NiwgMTMyMjc2LCAKKyAgICAxMzIyODksIDEzMjI5OSwgMTMyMzEyLCAxMzIzMTksIDEzMjMyOSwgMTMyMzM2LCAxMzIzNDMsIDEzMjM1MCwgMTMyMzU3LCAKKyAgICAxMzIzNjQsIDEzMjM3MSwgMTMyMzgwLCAxMzIzODksIDEzMjM5OCwgMTMyNDA3LCAxMzI0MTYsIDEzMjQyNSwgMTMyNDM0LCAKKyAgICAxMzI0NDMsIDEzMjQ1MSwgMTMyNDU5LCAxMzI0NjYsIDEzMjQ3NiwgMTMyNDg1LCAxMzI0OTMsIDEzMjUwMCwgMTMyNTEwLCAKKyAgICAxMzI1MTksIDEzMjUyOSwgMTMyNTM5LCAxMzI1NTAsIDEzMjU2MCwgMTMyNTY5LCAxMzI1NzksIDEzMjU4OCwgMTMyNTk4LCAKKyAgICAxMzI2MDYsIDEzMjYxMCwgMTMyNjE0LCAxMzI2MTgsIDEzMjYyMiwgMTMyNjI2LCAxMzI2MzAsIDEzMjYzNCwgMTMyNjM4LCAKKyAgICAxMzI2NDIsIDEzMjY0NiwgMTMyNjQ5LCAxMzI2NTMsIDEzMjY1NiwgMTMyNjU5LCAxMzI2NjMsIDEzMjY2NywgMTMyNjcxLCAKKyAgICAxMzI2NzUsIDEzMjY3OSwgMTMyNjgzLCAxMzI2ODcsIDEzMjY5MSwgMTMyNjk1LCAxMzI2OTksIDEzMjcwMywgMTMyNzA3LCAKKyAgICAxMzI3MTEsIDEzMjcxNSwgMTMyNzE5LCAxMzI3MjMsIDEzMjcyNywgMTMyNzMxLCAxMzI3MzUsIDEzMjczOSwgMTMyNzQzLCAKKyAgICAxMzI3NDcsIDEzMjc1MSwgMTMyNzU1LCAxMzI3NTksIDEzMjc2MywgMTMyNzY3LCAxMzI3NzEsIDEzMjc3NSwgMTMyNzc5LCAKKyAgICAxMzI3ODMsIDEzMjc4NywgMTMyNzkxLCAxMzI3OTUsIDEzMjc5OSwgMTMyODAzLCAxMzI4MDcsIDEzMjgxMSwgMTMyODE1LCAKKyAgICAxMzI4MTksIDEzMjgyMywgMTMyODI3LCAxMzI4MzEsIDEzMjgzNSwgMTMyODM5LCAxMzI4NDMsIDEzMjg0NywgMTMyODUxLCAKKyAgICAxMzI4NTUsIDEzMjg1OSwgMTMyODYzLCAxMzI4NjcsIDEzMjg3MSwgMTMyODc1LCAxMzI4NzksIDEzMjg4MywgMTMyODg3LCAKKyAgICAxMzI4OTEsIDEzMjg5NSwgMTMyODk5LCAxMzI5MDMsIDEzMjkwNywgMTMyOTExLCAxMzI5MTUsIDEzMjkxOSwgMTMyOTIzLCAKKyAgICAxMzI5MjcsIDEzMjkzMSwgMTMyOTM1LCAxMzI5MzksIDEzMjk0MywgMTMyOTQ3LCAxMzI5NTEsIDEzMjk1NSwgMTMyOTU5LCAKKyAgICAxMzI5NjMsIDEzMjk2NywgMTMyOTcxLCAxMzI5NzUsIDEzMjk3OSwgMTMyOTgzLCAxMzI5ODcsIDEzMjk5MSwgMTMyOTk1LCAKKyAgICAxMzI5OTksIDEzMzAwMiwgMTMzMDA2LCAxMzMwMTAsIDEzMzAxNCwgMTMzMDE4LCAxMzMwMjIsIDEzMzAyNiwgMTMzMDMwLCAKKyAgICAxMzMwMzQsIDEzMzAzOCwgMTMzMDQyLCAxMzMwNDYsIDEzMzA1MCwgMTMzMDU0LCAxMzMwNTgsIDEzMzA2MiwgMTMzMDY2LCAKKyAgICAxMzMwNzAsIDEzMzA3NCwgMTMzMDc4LCAxMzMwODIsIDEzMzA4NiwgMTMzMDkwLCAxMzMwOTQsIDEzMzA5OCwgMTMzMTAyLCAKKyAgICAxMzMxMDYsIDEzMzExMCwgMTMzMTE0LCAxMzMxMTgsIDEzMzEyMiwgMTMzMTI2LCAxMzMxMzAsIDEzMzEzNCwgMTMzMTM4LCAKKyAgICAxMzMxNDIsIDEzMzE0NiwgMTMzMTUwLCAxMzMxNTQsIDEzMzE1OCwgMTMzMTYyLCAxMzMxNjYsIDEzMzE3MCwgMTMzMTc0LCAKKyAgICAxMzMxNzgsIDEzMzE4MiwgMTMzMTg2LCAxMzMxOTAsIDEzMzE5NCwgMTMzMTk4LCAxMzMyMDIsIDEzMzIwNiwgMTMzMjEwLCAKKyAgICAxMzMyMTQsIDEzMzIxOCwgMTMzMjIyLCAxMzMyMjYsIDEzMzIzMCwgMTMzMjM0LCAxMzMyMzgsIDEzMzI0MiwgMTMzMjQ2LCAKKyAgICAxMzMyNTAsIDEzMzI1NCwgMTMzMjU4LCAxMzMyNjIsIDEzMzI2NiwgMTMzMjcwLCAxMzMyNzQsIDEzMzI3OCwgMTMzMjgyLCAKKyAgICAxMzMyODYsIDEzMzI5MCwgMTMzMjk0LCAxMzMyOTgsIDEzMzMwMiwgMTMzMzA2LCAxMzMzMTAsIDEzMzMxNCwgMTMzMzE4LCAKKyAgICAxMzMzMjIsIDEzMzMyNiwgMTMzMzMwLCAxMzMzMzQsIDEzMzMzOCwgMTMzMzQyLCAxMzMzNDYsIDEzMzM1MCwgMTMzMzU0LCAKKyAgICAxMzMzNTgsIDEzMzM2MiwgMTMzMzY2LCAxMzMzNzAsIDEzMzM3NCwgMTMzMzc4LCAxMzMzODIsIDEzMzM4NiwgMTMzMzkwLCAKKyAgICAxMzMzOTQsIDEzMzM5OCwgMTMzNDAyLCAxMzM0MDYsIDEzMzQxMCwgMTMzNDE0LCAxMzM0MTgsIDEzMzQyMiwgMTMzNDI2LCAKKyAgICAxMzM0MzAsIDEzMzQzNCwgMTMzNDM4LCAxMzM0NDIsIDEzMzQ0NiwgMTMzNDUwLCAxMzM0NTQsIDEzMzQ1OCwgMTMzNDYyLCAKKyAgICAxMzM0NjYsIDEzMzQ3MCwgMTMzNDc0LCAxMzM0NzgsIDEzMzQ4MiwgMTMzNDg2LCAxMzM0OTAsIDEzMzQ5NCwgMTMzNDk4LCAKKyAgICAxMzM1MDIsIDEzMzUwNiwgMTMzNTEwLCAxMzM1MTQsIDEzMzUxOCwgMTMzNTIyLCAxMzM1MjYsIDEzMzUzMCwgMTMzNTM0LCAKKyAgICAxMzM1MzgsIDEzMzU0MiwgMTMzNTQ2LCAxMzM1NTAsIDEzMzU1NCwgMTMzNTU4LCAxMzM1NjIsIDEzMzU2NiwgMTMzNTcwLCAKKyAgICAxMzM1NzQsIDEzMzU3OCwgMTMzNTgyLCAxMzM1ODYsIDEzMzU5MCwgMTMzNTk0LCAxMzM1OTgsIDEzMzYwMiwgMTMzNjA2LCAKKyAgICAxMzM2MTAsIDEzMzYxNCwgMTMzNjE4LCAxMzM2MjIsIDEzMzYyNiwgMTMzNjMwLCAxMzM2MzQsIDEzMzYzOCwgMTMzNjQyLCAKKyAgICAxMzM2NDYsIDEzMzY1MCwgMTMzNjU0LCAxMzM2NTgsIDEzMzY2MiwgMTMzNjY2LCAxMzM2NzAsIDEzMzY3NCwgMTMzNjc4LCAKKyAgICAxMzM2ODIsIDEzMzY4NiwgMTMzNjkwLCAxMzM2OTQsIDEzMzY5OCwgMTMzNzAyLCAxMzM3MDYsIDEzMzcxMCwgMTMzNzE0LCAKKyAgICAxMzM3MTgsIDEzMzcyMiwgMTMzNzI2LCAxMzM3MzAsIDEzMzczNCwgMTMzNzM4LCAxMzM3NDIsIDEzMzc0NiwgMTMzNzUwLCAKKyAgICAxMzM3NTQsIDEzMzc1OCwgMTMzNzYyLCAxMzM3NjYsIDEzMzc3MSwgMTMzNzc2LCAxMzM3ODEsIDEzMzc4NSwgMTMzNzkxLCAKKyAgICAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgMTMzODU0LCAKKyAgICAxMzM4NjEsIDEzMzg2OCwgMTMzODc1LCAxMzM4ODIsIDEzMzg4OCwgMTMzODk1LCAxMzM5MDIsIDEzMzkwOCwgMTMzOTE1LCAKKyAgICAxMzM5MjIsIDEzMzkyOSwgMTMzOTM2LCAxMzM5NDMsIDEzMzk1MCwgMTMzOTU3LCAxMzM5NjQsIDEzMzk3MSwgMTMzOTc4LCAKKyAgICAxMzM5ODUsIDEzMzk5MiwgMTMzOTk5LCAxMzQwMDUsIDEzNDAxMSwgMTM0MDE4LCAxMzQwMjUsIDEzNDAzNCwgMTM0MDQzLCAKKyAgICAxMzQwNTIsIDEzNDA2MSwgMTM0MDY2LCAxMzQwNzEsIDEzNDA3NywgMTM0MDgzLCAxMzQwODksIDEzNDA5NSwgMTM0MTAxLCAKKyAgICAxMzQxMDcsIDEzNDExMywgMTM0MTE5LCAxMzQxMjUsIDEzNDEzMSwgMTM0MTM3LCAxMzQxNDMsIDEzNDE0OCwgMTM0MTU0LCAKKyAgICAxMzQxNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogLyogbmFtZS0+Y29kZSBkaWN0aW9uYXJ5ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfaGFzaFtdID0gewogICAgIDc0MjI0LCA0ODUxLCAwLCA3ODE1NiwgNzg0OTksIDEyODY4NSwgNzkyOSwgMCwgMTk0NjgyLCAxMjc3NjYsIDc4NTAwLCAKLSAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MTIsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCisgICAgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDAsIDU5NiwgOTgzODIxLCA2OTg1MCwgMTMxOTIsIDg2NTEsIDAsIDAsIAogICAgIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA2ODI1LCA0Mjg5NywgCiAgICAgNDIzMywgNDIzNCwgNDIzMiwgOTE3ODM2LCA3NDQxNSwgMTIwMjEwLCA2Mzg0LCA5MTc4NDAsIDc4MTA4LCA4ODUxLCAwLCAKLSAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCA5ODM3NzQsIDc3NDgsIDAsIDAsIDAsIDEyNzkzOSwgNDE2MDMsIDk3ODQsIDAsIAorICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc4MywgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCiAgICAgOTE4OCwgNDE2MDAsIDAsIDEyMDYxOCwgMTI4MzQzLCAxNDU3LCAzNTM1LCAwLCAwLCAwLCAwLCA2NTI0MCwgMTE5NTEsIDAsIAogICAgIDM0MDQsIDAsIDAsIDAsIDE3NTksIDAsIDQxMDc2LCA2ODM4MywgMTIwNTcyLCAxMTkyMDUsIDY2NTc3LCA5NDAxNCwgCi0gICAgMTI3NzY0LCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgMCwgMCwgNjU5MDgsIDk4MzQsIDMwNTUsIDk4NTIsIDk4Mzg1MSwgCisgICAgMTI3NzY0LCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgMCwgMCwgNjU5MDgsIDk4MzQsIDMwNTUsIDk4NTIsIDk4Mzg2MCwgCiAgICAgNjUyODgsIDAsIDExMzk4LCAwLCA5MjQxNywgMTE5MjU1LCAwLCAwLCA2MDMsIDc0Mzk4LCA0MzU0OCwgMCwgMCwgOTE3ODI0LCAKICAgICAzMzUwLCAxMjA4MTcsIDY0MzE4LCA5MTc4MjgsIDEyNzA4OSwgMzM5MCwgNzQ0ODMsIDQzMjY1LCAxMjA1OTksIDkxNzgzMCwgCiAgICAgNzg1NzMsIDAsIDE5MTksIDM0MDAsIDEyMDY1MSwgMTI3OTQ0LCAxMTY0NywgOTE3NTQwLCA2NjQ0NiwgNjQxNDEsIDg1NjIsIAotICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2NzksIDk4MzE1MiwgMTE5NjYsIAotICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4MzUsIDQzMzc0LCA5Nzc5LCAKKyAgICAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgOTgzNjg4LCA5ODMxNTIsIDExOTY2LCAKKyAgICA2NDEyOCwgMTI4NTg3LCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgOTgzODQ0LCA0MzM3NCwgOTc3OSwgCiAgICAgMjc2NCwgNjYwMDIsIDEwMTY3LCA5NDcxLCAwLCA2NjAyMSwgMCwgMCwgNTQ1NywgNTQ0MCwgODg1NywgOTM5ODEsIDY1MjgyLCAKLSAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk1NiwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCisgICAgMjg0MywgNTM1NSwgMTI3OTI4LCA5ODM5NjUsIDAsIDUxOTQsIDExNjU3LCA0Mzk4NCwgMTI4MjkyLCAwLCA5ODM2MjAsIDAsIAogICAgIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCA1NjMwLCA1Mzk2LCA2NDE0MywgMTA2ODIsIDAsIDEwNjAyLCA4MDAsIDQyNDk5LCAKICAgICA2NjE4NiwgMCwgMCwgNjQ5MzAsIDExNjMxLCA2NDE0NiwgNjQxNDUsIDY0MTQ0LCA3NjIsIDEzMTcyLCAxMTg4NTksIAogICAgIDE5NDY2MSwgNjQ0NjgsIDEwOTA2LCAxMzUzLCA2OTYwLCAwLCAwLCA1ODI4LCA4NzI0LCA5MTc4MDYsIDg5MzMsIDE2MDEsIAogICAgIDQyMjQ0LCA4NTgsIDcwODAsIDY0MTA5LCA2NDEwOCwgODA5MCwgMCwgNzQ0MDEsIDkxNzgxMSwgNTg3LCAwLCAxMjgxMzEsIAotICAgIDAsIDAsIDAsIDc4MjE0LCAyNzUwLCA3NDIxOCwgNTU2LCA2NDE1OCwgNjQxNTcsIDk4Mzk0MCwgMTIyMTMsIDE5NDY3OCwgCisgICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQ5LCAxMjIxMywgMTk0Njc4LCAKICAgICAyNzYwLCAwLCAwLCAwLCAxOTQ3OTQsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCA2NDE1MCwgMTI2NzksIAogICAgIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgMTE5MDE2LCAwLCAKICAgICA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAxMjc1MzEsIDkyNTM0LCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgCkBAIC0xNzExNCwxMiArMTcxMzMsMTIgQEAKICAgICA2NDEwMiwgNzg1OSwgMTk0NSwgNjQwOTksIDAsIDEwNDUzLCA2NDEwNCwgNzE4OCwgNzk5NywgMCwgNzM4OSwgOTgzMTYxLCAKICAgICA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIDUyOCwgMTI4NjcxLCA0NDAxNywgMTE0MjksIDcxMzQ3LCAwLCA5ODMwNzcsIAogICAgIDkxNzk5MCwgNzM4NDEsIDAsIDAsIDkwNTYsIDY0MzEzLCA2MTg4LCAxMjAwMTksIDYxNTUsIDY0MDY4LCAxODIzLCA2NDA2NiwgCi0gICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc2NiwgCi0gICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MjIsIDAsIDEyMDUxOSwgNjYzNzYsIAorICAgIDY0MDY1LCA2NDA3MiwgNjQwNzEsIDYzLCA3MjMzLCA5MjIxMiwgMCwgNDE5MDQsIDY2MzksIDY0MDY0LCA5ODM3NzUsIAorICAgIDEyODM0NCwgMCwgMTE3NiwgMTE4OTU5LCAxMjc5MzAsIDgxNjIsIDEyODY2NywgOTgzODMxLCAwLCAxMjA1MTksIDY2Mzc2LCAKICAgICA2NjI0MiwgMTE0MTUsIDQzMzMsIDk4NTUsIDY0MTEyLCA2NDY0MiwgMCwgNTM4OCwgMCwgMCwgMCwgNzcxNCwgNjYyMjIsIAotICAgIDY5OTAyLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgOTgzNDEzLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIAorICAgIDY5OTAyLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgOTgzNDIxLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIAogICAgIDg5OTYsIDQ5OTIsIDQ0NzEsIDQyNjIyLCA2NDA3OSwgNjQwNzgsIDkyMTc5LCAwLCAxMjY1NzAsIDAsIDY0NjE1LCA0MTkxNSwgCi0gICAgMCwgMTIwNzUsIDcwMDYyLCAwLCA1MTc0LCA5ODMyMTUsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDEyNzkwNCwgCisgICAgMCwgMTIwNzUsIDcwMDYyLCAwLCA1MTc0LCA5ODMyMTcsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDEyNzkwNCwgCiAgICAgODQwOCwgNjQ3MDQsIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCA2Nzk5OSwgNzM3OTcsIDAsIDExMTYsIDEyODIwNCwgNDMwNDksIAogICAgIDcxMzYsIDQzMDUwLCA4NTQ4LCAxMjA0ODUsIDAsIDExOTA2MSwgOTE3OTk5LCAwLCAxMzExNSwgNDM2NzUsIDY0MDkxLCAKICAgICA5MzIyLCAwLCAxMjA1OTUsIDY0MDk1LCA2NDA5NCwgODExMSwgNjYyNDcsIDQyMzMyLCA2NDA4OSwgNjQwODgsIDYxOTksIDAsIApAQCAtMTcxMjcsMTAgKzE3MTQ2LDEwIEBACiAgICAgOTkyNywgNDEzMzUsIDQxMTgsIDE3OTcsIDAsIDQxMzM0LCAwLCA0NiwgNDM0NDgsIDEyNzg4MSwgMjk4LCAwLCAxMjgxMTQsIAogICAgIDAsIDQyNjI3LCAwLCAzMiwgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDk4MzYwMCwgNDI4NzEsIDAsIAogICAgIDE5OTIzLCA3NDMzNSwgMCwgMTI3MTkyLCA2NjIzOSwgNDIyNjQsIDY0NDAzLCA0NDEyLCA3MjQwLCA5MjQ5NSwgMCwgCi0gICAgOTgzNDU4LCA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKKyAgICA5ODM0NjYsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAogICAgIDY1MDE0LCAwLCAwLCA5ODMxOTYsIDM2MzksIDExOTU4OCwgMCwgMCwgMTE4OTA0LCAxMDA3MywgMTIwMjA2LCAxMjg4NjIsIAogICAgIDEyNzE4NiwgNjg0MDksIDQyODQ0LCA3NDk4LCAxMDk4LCA5MjU2NSwgMTIwMjA1LCAwLCA5ODMxMTgsIDEwMjA3LCA4Nzg5LCAKLSAgICA5ODMyMjMsIDAsIDAsIDk4MzQ2NCwgOTIzNCwgMCwgNjE4MiwgOTgzNDY2LCA2NTA1OCwgMCwgOTgzNDcwLCA5ODM0NjcsIDAsIAorICAgIDk4MzIyNSwgMCwgMCwgOTgzNDcyLCA5MjM0LCAwLCA2MTgyLCA5ODM0NzQsIDY1MDU4LCAwLCA5ODM0NzgsIDk4MzQ3NSwgMCwgCiAgICAgNTQ3MSwgOTQ2MSwgNTU3MywgMTE4OTM2LCA1NDczLCA0NCwgMCwgNjYyNDQsIDk0MDcyLCAwLCA2NjIzOCwgMTI4NDQsIDAsIAogICAgIDE2MjIsIDc3NjcsIDE5MDAsIDQxMzM5LCAxMTQ1OCwgMCwgMCwgNjU4MSwgNTU3NiwgMCwgNjQ0MDUsIDQxMzM3LCAwLCAKICAgICA0MTYzMSwgODk0NywgNjgzOTAsIDEyNzg0NCwgNDE2OTQsIDAsIDAsIDc5MDgsIDAsIDEwNDA4LCA2NTc5LCAwLCA2NDYxOCwgCkBAIC0xNzEzOCwxMCArMTcxNTcsMTAgQEAKICAgICA5OTkyLCAxMjgyOTksIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgNzg2MDYsIDAsIDE0MzcsIAogICAgIDQxNjE3LCA2NTgsIDM0OTcsIDEyODUwOSwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMTI3ODc4LCAwLCAxMjg1MjksIAogICAgIDEyMTEzLCA0MjM2LCA0NzI3LCAwLCAwLCA3NjkzLCAxMDc0OSwgMCwgNzQ4OCwgNTc3MywgOTc4LCAxMjgxMzQsIDAsIAotICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk0NywgMTI3NTI0LCAwLCAwLCAwLCAKLSAgICAwLCAxOTUwODMsIDAsIDk4MzgzNCwgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAotICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NjMsIDk4Mzk2NCwgCi0gICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg0OCwgMjY0LCAKKyAgICA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgMTI4NzAwLCA5NzQ4LCA5ODM5NTYsIDEyNzUyNCwgMCwgMCwgMCwgCisgICAgMCwgMTk1MDgzLCAwLCA5ODM4NDMsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCAKKyAgICA2Nzg1NCwgODEyNSwgMTIwNTQ1LCA2NzQzLCAxMTkxNzUsIDkxNzk0MCwgMjM2OSwgMCwgOTgzOTcyLCA5ODM5NzMsIAorICAgIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCA0MzY2MCwgMCwgMCwgMCwgMjM2NywgMTI3ODI3LCA5ODM4NTcsIDI2NCwgCiAgICAgMjM3NSwgODA2MCwgNjE5NCwgMTE5ODU4LCAxODQ0LCAxMTkwODQsIDAsIDYwMTksIDAsIDAsIDY5NjEsIDAsIDExODgzOSwgCiAgICAgMCwgODgwMCwgMCwgNDI4NjIsIDQ0NjMsIDY1NTgxLCA2MTkyLCAxOTQ2NzYsIDQyNzcxLCAwLCA5MjMzMywgNzI1LCAKICAgICA2NTA0MiwgMTE4Nzk3LCAxMjA4MDAsIDk4MzA0MCwgMTI4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI2MSwgMTIwNzA3LCAKQEAgLTE3MTU5LDYzNCArMTcxNzgsNjM0IEBACiAgICAgMTI2NTAzLCA0MTYwNywgMTIwMTE1LCAxNjc5LCAxMjAxMTYsIDEyMDE4MCwgMTIwMTEzLCAxMjc0NjIsIDcwMDUsIDQxNjA5LCAKICAgICA5NTgwLCAwLCA0MDEsIDY5OTQ5LCA0Mzc3OSwgNjk2OCwgNTc2MSwgMzQyLCA4NTUzLCAwLCA4MTQzLCAxMjcxMTUsIAogICAgIDExOTgzLCA5MjI0OSwgNjI0LCA3NDUwOCwgNDA1NywgNDM3ODgsIDUwNzgsIDc0MjU4LCAxMjQ3OCwgMCwgNTA3NiwgMCwgCi0gICAgMTk0NjA5LCAwLCAxMjAwOTcsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDkyNTIzLCAxMjAxMDIsIAotICAgIDcxMzgsIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCAKLSAgICA1MDM2LCA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NDcsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCAKLSAgICA0NDMyLCAxMjcyNzEsIDUwMzMsIDEyNzI3MywgMTI3MjcyLCA0ODM2LCAzODg4LCA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAKLSAgICAxMjcyNjIsIDQzNzA0LCAxMjcyNjQsIDEyNzI1MSwgNjc1ODgsIDExOTAwMCwgMTI3MjUyLCAxMjcyNTUsIDg4NTgsIDY0MDksIAotICAgIDEyNzI1NiwgMTIwMjUyLCAxMjgxMDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgCi0gICAgNjA5NCwgNzY0MSwgNDI0NDUsIDAsIDkyNDg3LCA0MjQwNiwgMTY3NiwgNzQzMjAsIDE5NDYwNywgOTgzMTc3LCA1MDMwLCAwLCAKLSAgICAwLCAwLCA3Mzg2OSwgOTYyMiwgMCwgNjk5NDQsIDY3ODcsIDAsIDAsIDAsIDk4MzU4MywgMTA1NDQsIDEyOTE5LCAwLCAKLSAgICA5MjIxOCwgMCwgMCwgNjk5MDYsIDEyMDc4OSwgMCwgOTQ3LCAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgCi0gICAgMTE5OTM1LCA3NjEzLCA5MjU2MiwgMTE5OTM2LCA0Nzk1LCAxMTk5MzAsIDcwMTgsIDczNzYsIDEyMDE4MSwgMTIwMTkyLCAKLSAgICAxMjAyNjgsIDAsIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAxMTgzMywgMTE5OTE5LCA3MjE2LCA2NTIzMiwgNzIxNywgMjUxLCAKLSAgICA3MjE4LCA3ODk1LCA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgMTE5OTIyLCA3MjE0LCAKLSAgICA3MjE1LCA5ODM4MjcsIDc0MTQxLCA4ODgwLCA3Njg1LCA2NjQ1OSwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIDgxODcsIAotICAgIDQyODYxLCAxMTEzLCA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgMTA5ODAsIAotICAgIDI0ODksIDY1NjI0LCA4MTUwLCAxMzU5LCA2NzY1MiwgMTI3MzI5LCAxMjczMzAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgCi0gICAgMTIwODQsIDEyNzMyNCwgMTI3MzIxLCA5MjI3OSwgMTI3MzE5LCAxMjczMjAsIDEyNzMxNywgMTI3MzE4LCAxMjczMTUsIAotICAgIDEyMjgzLCAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgNzM5MDUsIDEyNjc3LCAwLCAwLCAKLSAgICAzMjM5LCAxMjczMTEsIDAsIDAsIDg0MzEsIDAsIDQyMTY0LCAwLCAxMTc3OCwgMTI2MjAsIDY4MjYsIDczNzczLCAxMTkwNzMsIAotICAgIDUwNDAsIDAsIDAsIDk4MzQzNSwgNzg0MjAsIDAsIDUwMzksIDAsIDc4NDE4LCAwLCA1MDM4LCAwLCAwLCAxMzE4NCwgCi0gICAgNzQyOTMsIDAsIDY0NjQ4LCAwLCA5MzU5LCA3ODQxNiwgMCwgMTI4NzcwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgCi0gICAgNzM5MDksIDQ4MzUsIDU1MjY2LCA0MzQzMiwgMTI3ODIyLCA0MzA5LCA3MTI3LCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgCi0gICAgMCwgNDI1ODksIDU2OSwgMCwgNzM4MTMsIDcxMSwgNDM4OSwgNzEzMywgMCwgNzM4ODAsIDExNjEwLCAxMTM2OCwgMCwgCi0gICAgMTk0NTcwLCA0MTMzMSwgMTAwNiwgNzQyNDAsIDAsIDE1NTAsIDgyMDEsIDczNzM3LCA3NjI3LCA1NDk5LCA1MDMxLCAKLSAgICA3NzkwOCwgNDI3MzgsIDY1Nzg0LCA3NzkwNywgNjUyNjcsIDM3NTgsIDAsIDY1NzgxLCA2NDczNCwgNzAwNzMsIDI0NDAsIAotICAgIDY1NzgwLCA3NzkxMywgODQ0OSwgMCwgNTAwOCwgOTgzNTcyLCAyMTE4LCAwLCAxMjEyMSwgODI1NSwgNTUxMiwgNzM4NzUsIAotICAgIDIxMjgsIDIxMzAsIDIxMzEsIDIxMjYsIDIxMzMsIDExMTksIDEyNzA2OCwgMjExNCwgMjExNiwgMjQ1NSwgMCwgMjEyMiwgCi0gICAgMjEyMywgMjEyNCwgMjEyNSwgMTI3NDg2LCA4NzE0LCA5ODM4MTEsIDIxMTMsIDAsIDIxMTUsIDEyODE3NywgMTI3OTA3LCAKLSAgICA0MzcxMywgNTA1MiwgNjYyMjAsIDU4MjEsIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCAKLSAgICA1MDUwLCAzMDIsIDM4OCwgNDExMTUsIDczNSwgNjYzNywgNTkwNywgNjUwODgsIDAsIDEyNzI2LCA3NDU5NCwgOTExNywgCi0gICAgOTgzMTgxLCAxMjAwMywgNTUxMywgNjY2NiwgNTA1MywgNzQyMzAsIDU1MTAsIDc4NDUxLCAwLCA3ODQ0NywgMjQ3MCwgCi0gICAgNzg0MzcsIDAsIDE5MjUsIDAsIDkyMjM3LCA3NDgwNywgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgOTIzMTMsIDAsIDc0NDk3LCAKLSAgICA5MjM5NSwgODA4OSwgNjkyOSwgNjM5LCA5ODM1NjMsIDY4MTc5LCA2NDQ0MiwgMCwgOTIzNDgsIDQ1OTksIDQxNDAyLCAKLSAgICA2Njc0LCA0MzM5NywgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCA2OTUxLCA5NDAxNywgCi0gICAgOTgzOTY3LCAzNTMwLCA5NzUwLCAxMjgzMTcsIDAsIDY2NTYsIDQyNjE4LCAwLCA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIAotICAgIDg5NjcsIDAsIDUwNDUsIDQyMDI2LCAxOTE2LCA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIDEzMTI4LCA1MDQzLCAwLCAKLSAgICA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCA5MTc2MDAsIDQxNzUwLCAKLSAgICAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDAsIDExOTYwNiwgNjc5ODMsIDEzMjk2LCA1MTcsIDAsIDEyODUzNCwgMTk0OTQ2LCAKLSAgICA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgNzQ0NzgsIDEwNTMxLCA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAKLSAgICAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAzOTI1LCA0MjUxLCA4MDY5LCAxMDUxNywgMTIwNDM5LCA0ODksIDAsIDQyNTAsIAotICAgIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgOTgzMTc4LCAxOTQ4NTEsIDY2MjAwLCAwLCAwLCAwLCA3ODQyMywgMCwgMCwgODcxMSwgCi0gICAgNjE4MywgMCwgMCwgMCwgMTIwNDQ4LCA3NjIzLCAxMTg5MjUsIDExODg4OSwgOTIzNSwgMTI3NjAsIDc0MTc2LCA2OTY2MiwgCi0gICAgNjY0NDUsIDQzNTQwLCAxMDA2MiwgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgMTI2NTk3LCAxMjA0MzUsIDAsIAotICAgIDc3MjYsIDAsIDE5OTIyLCAyNjcsIDMzOTMsIDQyMTk4LCAxMzcxLCAxOTQ4NDksIDY5MjMzLCAyNDU4LCAwLCA2MjAxLCAwLCAKLSAgICA0MTA3NCwgNDI2NiwgMTA2NTIsIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgOTgzMzQwLCAwLCAzMzkxLCAKLSAgICA0MTA3NSwgMjQ3NiwgMCwgMTI4MDE3LCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCAKLSAgICAxMjc1MzcsIDEzMDE0LCAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDk4MzMzNCwgMCwgOTgzODcxLCAKLSAgICAxMjY2MzgsIDkwNTMsIDEzMDE1LCA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgOTgzODE5LCA2NjYwLCA3ODc1OCwgCi0gICAgOTE3NzYwLCA5MTc3OTMsIDQyMjEyLCAxMjYyOSwgMTE0MzUsIDAsIDU1MjU2LCA2NTUzOCwgMCwgMTI3OTQwLCA5ODMzMzMsIAotICAgIDc0NTQ3LCAxMjY1ODUsIDY1NDQ4LCA3ODEwMCwgMTI5NDgsIDExOTAwMSwgMTk1MDAyLCAxMTkyMzgsIDE5NTAwNCwgCi0gICAgNzgwOTksIDEyNzA4NSwgMCwgMTI4MzIwLCA0Mjg3LCA4Mjc2LCA0OTAyLCAxMTMxLCAwLCA3ODQ1OCwgNjY3MjgsIDE4MTYsIAotICAgIDAsIDQyNTMzLCAxNjgsIDQyODQ1LCA0ODk4LCA2NDI5OCwgOTgzMTQxLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIDM2NTMsIAotICAgIDAsIDc5MSwgOTE2MiwgNjk3NywgMCwgNzg4ODksIDc0NTYxLCAwLCA3MzczMSwgODM1NCwgNDM1OTAsIDExOTMwMywgCi0gICAgOTgzNDQxLCA3NTU3LCAxMTkzMzksIDExOTMwMSwgODIzNCwgNzI0MSwgMCwgMTIwNjcxLCAxMTkxNjcsIDE5NDk5NiwgCi0gICAgMTI4MTEsIDY1OTI1LCAzOTQ2LCA3ODA3OCwgMTA5OTgsIDc4MDgwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDEyODI3NiwgCi0gICAgNzQ1OTksIDc4NDQ5LCA4ODkwLCAxOTQ5NzcsIDE5NDk3NiwgMjQ0OCwgNzgwODUsIDEwMjY3LCA4NDI0LCAyNDUyLCAKLSAgICA3ODA4MywgMTI4ODI0LCA4NzI5LCA3ODQ1NiwgMCwgNzg0NSwgOTE3OTE3LCA3MTMwMiwgNDQwOCwgNDEyMiwgNjc3MiwgCi0gICAgMTEwMzksIDg3MjMsIDE5NDk5MCwgNzEzMTAsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDkyMjg2LCAyNDM4LCA2NDg1NSwgCi0gICAgMTE5MzAwLCAxMTkyOTksIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAKLSAgICAwLCAwLCA0MTk1MiwgMCwgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAKLSAgICAxOTkxNSwgNTI3NywgMTI5NjMsIDEyNzg2NCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIDEyMDM0MCwgMTE4ODczLCAKLSAgICAxMjcxLCA5ODM2MzEsIDAsIDY2MDI0LCA0MTQ4MiwgMzg2NCwgNzQ1MzksIDAsIDM4NzksIDAsIDEyOTc4LCA0MTY2LCAKLSAgICA0NTc0LCAwLCA3NTY3LCA3NDU5LCA5ODMxNjAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDkyNTQ4LCA1NzU5LCAKLSAgICA5ODM5MDMsIDAsIDQxMzg4LCA2NDQ0NiwgNDEzOTIsIDY0Mjg4LCA0MTM4NywgMCwgODcwNiwgNTU1MiwgOTgzMTg3LCA3MDAsIAotICAgIDAsIDU1NTMsIDAsIDcwODgsIDUzNTYsIDc0OTksIDY4MDA3LCA2NjU5NiwgNzQwNjYsIDAsIDEwMjYzLCA1NTU0LCAwLCAKLSAgICAxMjM0NCwgMTAzMTEsIDc4MTEzLCA2NjY1LCA5MjYyNiwgMCwgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgCi0gICAgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgMTk1MDY3LCAKLSAgICA2Nzk5NSwgMTk1MDY5LCA2NTYsIDE5NTA3MSwgNjUwMzcsIDQ1NzcsIDY0NjI0LCAwLCAwLCAwLCA5ODM2NDAsIDQyNjksIAotICAgIDczODg1LCA5MTc3NzUsIDQyODQ2LCA2OTY0NCwgOTUwLCAwLCA5MjI3MywgNjY1ODAsIDExODg5NSwgNjY2ODMsIDEwNTU0LCAKLSAgICA5MTc3NzgsIDExOTEyMSwgMCwgNTA5OCwgOTE3NzcwLCAwLCAxMTkwOTksIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCAKLSAgICAxMjg4NzAsIDk4MzY5MiwgMzY1MSwgMCwgMTIwNzMwLCAxMjc1NTYsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgCi0gICAgNDUxNywgMTkzMiwgNTEwMCwgMTQzOSwgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDc4MzczLCAxNDQxLCAKLSAgICA0MjA4NywgMzA2MywgNjUwLCAwLCA3ODM4LCAwLCAxOTUwNDEsIDE5NTA0MCwgMTE5MTQyLCA5MDMxLCAxMjA3OTAsIAotICAgIDEyODU4MiwgOTA3OCwgODU0NSwgNjYzNTYsIDEyODc5OSwgMCwgOTE1NCwgOTExOCwgMTI2NTQzLCAwLCAyNjc2LCAyMjc3LCAKLSAgICAwLCA3MzgxMiwgNjE5MCwgODU5OSwgMTk1MDUzLCA2OTkxOCwgMTA3OTUsIDk4NTcsIDcwMTQsIDk4NTYsIDE5NTAzMywgCi0gICAgOTI2MjAsIDEyMTI5LCAwLCA4NDgxLCAwLCA2MjAyLCAxOTUwMzUsIDEwOTIwLCAxMjgyMzcsIDUyMDMsIDE5NTAzOSwgCi0gICAgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgNjYwMTksIDk3NjIsIDAsIDU1NDEsIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgCi0gICAgNjY1NywgMjA3LCAxMjg4MDYsIDQyNzUsIDc0ODE5LCA4NTQsIDY4MTQ3LCA3NDM4MSwgMCwgNzg3ODYsIDUxMDMsIAotICAgIDEyNzg2MSwgNjQzNDgsIDQxMzY4LCA0Mzk3NCwgNDg4LCA2OTgxMSwgMCwgNzEzMzksIDEwMTU3LCAwLCA0MzAzNCwgCi0gICAgMTE0MzgsIDY0Njc0LCAwLCA5MjY5NCwgNjg0MzEsIDQxNzcxLCA1MTA2LCA2NjY5LCA4NTA0LCA2NTE1NCwgNjk4MTMsIAotICAgIDQxMzY3LCA1MTA1LCAxMjc1MDksIDY5NzIwLCA2NDc2LCA1MTA0LCA5ODM3NDAsIDMwNCwgMzE3NiwgMTE5MDEwLCAwLCAKLSAgICA5MzIsIDEyMDYzMywgNjU2NywgMjM4LCA2OTY1NiwgMTk1MDExLCAxOTQ1OTUsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgCi0gICAgNzg4NzAsIDQxMDQ0LCA2NzY0MCwgMTk0OTAyLCA0MjA1NSwgOTkxMiwgNjU5MzksIDEwNjcwLCA3NDA5MywgMTMyNzMsIDAsIAotICAgIDEyNTUyLCAxOTUwMTksIDg4MDMsIDMwOSwgNjYyMiwgODE1MSwgMTA4NTgsIDc4NzA2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIAotICAgIDEyNTUzLCAxMDgxNCwgNDMyNzUsIDY5NTAsIDk3MTIsIDY4NjgwLCA0Mzk3MCwgOTgzMTk4LCA2NTE2NSwgOTI3MjUsIDAsIAotICAgIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDQzNzYzLCAwLCA0MTc1NCwgCi0gICAgNjc2MzUsIDkzNzAsIDI3MjAsIDE5NDk3NSwgNjg0NjIsIDgyMzIsIDExODgxNywgMCwgMzIyMiwgMCwgMCwgMCwgNjY2NjMsIAotICAgIDAsIDAsIDEwODM0LCAwLCAwLCA2NTczMiwgOTQwOTUsIDkxNzU0NywgOTI2ODIsIDY3Njc5LCAxOTUwMjAsIDAsIDc3ODEsIAotICAgIDQxMzgzLCA2NDU2OCwgMCwgMTIwNzM4LCAxMjA3NywgMCwgNjQ1ODYsIDkxNzYyMCwgNDIzOTYsIDU1MjU1LCAzNDc1LCAKLSAgICAxMjgwMzUsIDI0NzksIDAsIDM2MzIsIDEyMDcyOCwgMTA2OTgsIDgzNzYsIDM2NDgsIDE5NDk2MCwgNzQ4NDQsIDY3NjM5LCAKLSAgICAzNjM2LCA2Nzg5NCwgMzY1MCwgODgzNywgNjUyMjksIDE4NDMsIDQyMjgzLCA0MzI1MCwgNDE1NjIsIDkxMDAsIDc0NTQ4LCAKLSAgICA5MTc2MzAsIDM2NDAsIDEyNzE5MCwgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgCi0gICAgMTk0OTUyLCAxOTQ5NTEsIDEyNjY0OSwgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgNDIwODMsIDEyMDY3OCwgCi0gICAgNjgzOTgsIDE5NDk1NywgNjc2MTksIDY2MzY3LCAxOTQ5NTgsIDk2MzQsIDkyMzgwLCA5OTg4LCAwLCA0MTA2OCwgMCwgCi0gICAgNDI5NSwgNjUyNjQsIDY4MDA2LCAwLCA5MjU0NSwgMCwgNzg1LCA4MjM2LCAxMjg2NDcsIDkwMjcsIDY4MTYwLCA2NzYyMywgCi0gICAgNjQzODMsIDEyMDI2NSwgOTI1LCAxMjcxNTYsIDAsIDQxOTg1LCA0MTA3MSwgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIAotICAgIDAsIDkxODYsIDIwNjcsIDQwMTYsIDk4Mzc5NCwgMCwgMzgxLCAxMjkzNiwgMCwgNDIwNzcsIDAsIDY5ODgwLCA1MTg0LCAKLSAgICA0MjA3OCwgMTk0OTQ3LCAxMDgxMCwgMTI4NTMxLCA0NTg1LCAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIDgxMiwgMzYxNSwgCi0gICAgMCwgNTE3OCwgNDQwMDAsIDEyMDU0OCwgNzg4MDcsIDUxODgsIDc0Mjg3LCA2NzYyOSwgMzYwNSwgMTA2OTIsIDExNjYsIAotICAgIDY0NDI5LCA0MjYzOSwgOTI0LCAwLCA2NzYzMSwgNDI2MTYsIDEyMDY3MCwgMjQ0MiwgMTA3MDMsIDc4Nzg5LCA2NzYzMiwgCi0gICAgOTE3OTI0LCAxMjc3MSwgMTI3MzYsIDEyNzUzLCA2NjcwOCwgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgNjk4NzIsIAotICAgIDEyNzM3MywgNDIyODgsIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgMTk0OTYzLCAyNDY4LCA2NjcwNiwgNDEyOTQsIDM2MjYsIAotICAgIDM4ODMsIDY0Mzg4LCA0MjQ3OSwgMCwgNDExMTcsIDAsIDkyNTgwLCAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIAotICAgIDI3MTUsIDgwNiwgNjUyMDgsIDQxODg0LCA5MTc4ODMsIDEzMTgsIDY0NzMxLCAxMjY1NzgsIDAsIDAsIDY2MzI1LCAzNDY1LCAKLSAgICAyNDA1LCA5MjQwLCAwLCAxMjc1NiwgNjUyNTksIDAsIDk4Mzc3MiwgMTI3NTIsIDU4MzMsIDE0MzIsIDAsIDQxODgzLCAKLSAgICA3MzkxMiwgOTc5OSwgMCwgNDE4ODYsIDI0ODAsIDAsIDIwNjIsIDEyNzI5MywgNjQ5NCwgNTUzNywgNzg2NTYsIDAsIAotICAgIDE5NDU4NywgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgMCwgNjgwMDUsIDEwNjIyLCA5ODM3NzAsIDAsIAotICAgIDc4NjU0LCA2NTY2LCA3ODY1OSwgMCwgNzM3ODAsIDExOTE5NiwgNjQ4NjQsIDAsIDc4NjYwLCAwLCA4Mjg0LCAxMzA4MSwgMCwgCi0gICAgMzU4OSwgNDIwNTEsIDQwMzUsIDY0OTIsIDkyMjM2LCA0MjY1LCA2NjQyLCAzOTc3LCA3NDE4NiwgNDE3NzgsIDgzNiwgCi0gICAgMTE5MjE2LCAyNDg4LCAwLCA0NTgyLCAwLCAwLCA0MTc3NywgMTI5MjYsIDk4MzM2OSwgNzUyOCwgMTA1NTAsIDAsIDkyNzA2LCAKLSAgICAwLCAxMDk2MSwgMCwgMTM3NCwgNjQ4NzgsIDExOTAxNCwgMCwgNDIzODksIDQxMzc0LCAyMjg2LCAwLCA3ODQ5MiwgNDEzNzcsIAotICAgIDEyNzkwOSwgMCwgNDAwLCAxMjU5NywgMTIwNTg2LCAwLCAwLCA2NjYxLCA5ODMxNDUsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAKLSAgICAwLCA3MTMwMSwgOTgzODUzLCAzNDczLCA3NzE4LCAwLCAwLCAwLCA1NTI4NSwgMCwgMCwgMCwgMTE5NjksIDk4MzM4MiwgCi0gICAgMTI3ODQxLCA2MzY1LCAxODg3LCA2NzYzLCA5ODMzNjIsIDgwODAsIDcwMDYsIDAsIDk4MzM2MywgNjc1NywgNjQzNTEsIAotICAgIDE1NDQsIDAsIDY3NjYsIDY0Njc3LCAxMjA3MTYsIDk4MzM2NCwgNjE0NiwgMCwgNzcxLCA5ODMzNjUsIDAsIDEyODEyLCAKLSAgICAxMzE2OCwgNDIyNzIsIDEyMjAwLCA5MTc5MjcsIDc5MDQsIDAsIDk1MywgMTI5MTcsIDExOTU2MCwgMTIzMDAsIDAsIAotICAgIDExNDkxLCA5NzI0LCAxMDM0MSwgOTgzNzY0LCA5NTI0LCA3NDkwLCAxMTM4OSwgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgCi0gICAgNDcxLCA3NDg0LCA3NDgyLCA2NzUzLCA3NDgwLCA1NzY0LCA3NDc4LCA3NDc3LCA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCAKLSAgICA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAxMjcyODgsIDkyMzU3LCAxMDA0OSwgMTE4MzQsIAotICAgIDM1NDQsIDAsIDYwMTcsIDY1MzExLCAxMjc0ODEsIDEyMDIxNiwgMTMzMDYsIDEwNTMzLCA3ODcwLCA3Mzk0OSwgNzYyNSwgMCwgCi0gICAgMTIwNTQ0LCAwLCAwLCA5MjY2MCwgMCwgMCwgMCwgMTk5NjEsIDI0NzIsIDQyNjY1LCA5MjM0MSwgMCwgMjEzOSwgNDI1NiwgCi0gICAgMTIwNzc2LCA3NDM4MCwgMCwgNDI2NzUsIDQyNjU4LCAxMjg0NSwgMCwgMCwgNjUxMzgsIDExOTM1NSwgNjc4NjIsIDAsIAotICAgIDY1NjcxLCA3MDgzLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIAotICAgIDQ0NSwgMTIwNTY2LCAxMjgzMDgsIDAsIDAsIDgzMzAsIDAsIDAsIDQyNzk3LCA5ODMxNTAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgCi0gICAgMTc3MCwgMCwgMTI4ODY2LCAxNTYwLCAxMjAyMDksIDE5NDk3MiwgNDU4NCwgNzM4NDMsIDAsIDExNzEyLCAxMDg2NiwgCi0gICAgMTE4OTI4LCAxMTE4LCA3MTMzNCwgMCwgMCwgMTA4MSwgNzQzNiwgNjg0MjAsIDcyNTIsIDAsIDU5OTYsIDY5OTIxLCA0OTAzLCAKLSAgICAwLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAxMzMwLCAwLCA3MTM5LCAwLCAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIAotICAgIDYzMjQsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAxMjE4NiwgMCwgMCwgOTgzNzMyLCAxMjcxNSwgNjgwMDIsIAotICAgIDk4MzQ3MSwgMTI2NjMwLCAyMDE4LCA2NjY3MiwgNDE5NzksIDY2Njg1LCAxMTkxNTcsIDY4MDAwLCA5MjQ2NCwgMCwgCi0gICAgMTI2OTg0LCA2ODAwMSwgOTMzNCwgOTI3MDUsIDkyMzE1LCA3MDEwMSwgNzk3NSwgMCwgNzc5NTcsIDAsIDY2NjIxLCA0ODg0LCAKLSAgICA2NjU5NywgNjk3MzIsIDAsIDAsIDYzMTMsIDY1NTEzLCA2OTg1NywgMCwgMCwgMCwgMjM0NSwgNDM2OTcsIDQ2MywgMCwgMCwgCi0gICAgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCA5ODMzNzksIDAsIDQyMjc5LCAxOTQ1NzcsIDAsIDc4NDE1LCAwLCAxOTUwMDgsIAotICAgIDk4MzM3NiwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIDAsIDAsIDI0ODIsIDE0NzEsIDAsIDAsIAotICAgIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDY5NjY0LCAwLCAxMjM3NCwgMCwgMCwgMCwgOTgzNjg1LCAyNDYwLCAwLCAxMTk0NCwgCi0gICAgMTIzNzYsIDEyNzg2OCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIDU4NzAsIDAsIDIwMjQsIDEyNzE4MCwgMCwgCi0gICAgMCwgNTM5LCAwLCAxMjc3NjUsIDk0MDUyLCAzODUzLCA2NTE4MCwgMTI3OTIzLCAxMjA3OTYsIDEyMDI0NSwgOTIzMjQsIDAsIAotICAgIDg2NTksIDAsIDEyNDc0LCA5MjU3OSwgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCA0MTYyLCAwLCA0MjYwLCAxMjk1MywgCi0gICAgNjk2MzMsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIDEwOTQ2LCAxMjczMTAsIDUwMDAsIAotICAgIDAsIDk4MzU3OSwgMCwgNjk2NzIsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCA2ODAxOCwgNjcwOSwgMCwgNzg4ODUsIAotICAgIDk4MzY5OSwgMTI3OTcxLCAxMjA1ODIsIDc4NTQ3LCAwLCAxMDMwMSwgMTAzMzMsIDEwMzk3LCAwLCAwLCA3Mzc5MSwgMCwgMCwgCi0gICAgMCwgMCwgMTE5MTIzLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAxMjcyOTAsIDgyNzUsIDM4OTMsIDk4MzI1NiwgMCwgCi0gICAgMTIyMTAsIDcyMjEsIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIDEyNTE2LCA0NDQ0LCAwLCAKLSAgICA5MjI3MSwgNzQ1MzcsIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAzNTkxLCA0MTk2OSwgMCwgCi0gICAgMjQ1MywgMTI4NTQ5LCA5MjY2NiwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAzMjAyLCAKLSAgICA3NDM1MywgMCwgODMxNiwgMCwgMCwgOTQwNjAsIDY4NywgMCwgMCwgMCwgMTg0MCwgMCwgNjg2NzEsIDExOTgwOSwgNDg4MywgCi0gICAgMjg1LCA0NzIzLCA3MDA5OSwgOTI2OTIsIDQ0NTksIDc0NTc3LCA0MjkyMSwgNDE3MjAsIDExMDg5LCAyNDAsIDE5OTA2LCAwLCAKLSAgICA0MjMyMywgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMTI2NTM1LCAwLCAwLCAwLCAwLCA0MjYzNCwgOTgzMzM1LCA0MzQzNywgCi0gICAgMzA4MSwgMTE0NjMsIDEyMDE1NCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAxMTkwMjMsIDE3MjksIAotICAgIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDY1MTk0LCA2NjIwMSwgMCwgNjY1NzgsIDUwMDEsIAotICAgIDQxODc5LCA3NDQyNywgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIDczODg5LCA3NDE4MiwgCi0gICAgMTI3OTE1LCA2NDMsIDMwODYsIDAsIDQyNDQ4LCA0MjI5OSwgNTgsIDAsIDkxNzk1MiwgMTIwMDgzLCA2Mzg3MywgODQ5MSwgCi0gICAgMCwgMCwgMCwgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAxMTkwOTYsIDE5OTI5LCAwLCAKLSAgICAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIDY1OTQxLCAxMzExNCwgNjQ1MjIsIAotICAgIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIDk4MzIzMiwgNTUyODAsIDQyMTc0LCAKLSAgICAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAKLSAgICAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgCi0gICAgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIAotICAgIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAKLSAgICAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIAotICAgIDEyMzc3LCA5ODM4MjMsIDk4MzgyNSwgNjg0NDksIDc0NjEsIDczOTAxLCAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgCi0gICAgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIAotICAgIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgCi0gICAgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgCi0gICAgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgCi0gICAgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAKLSAgICAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCAKLSAgICA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAKLSAgICAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgCi0gICAgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgCi0gICAgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgCi0gICAgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCAKLSAgICA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIAotICAgIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIAotICAgIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCAKLSAgICA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIAotICAgIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAzMjcsIDAsIDkwNDIsIDkxNzc3NywgCi0gICAgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODI2LCAKLSAgICA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAKLSAgICAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIDkyNywgMCwgMCwgMTI0MzYsIAotICAgIDk4MzIzOSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIDE5NTAxNiwgMCwgNzgxOTcsIAotICAgIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgwMywgMjI5NiwgMTk0OTIzLCAKLSAgICA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgNjQ2NTEsIDAsIDQxNTAzLCAKLSAgICAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgMCwgMTI4NTA4LCAxMjQxNiwgCi0gICAgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAzODgyLCA4NTMyLCA5MTc3NzEsIAotICAgIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCA2NTM0MywgMTI2NDkxLCAxMjQxNCwgCi0gICAgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIAotICAgIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCAKLSAgICA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgCi0gICAgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCAKLSAgICA2ODY1MSwgMCwgOTgzODg2LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIAotICAgIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCA5ODMyMzUsIDMwMTQsIDUwODEsIDY1ODUzLCAKLSAgICAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgCi0gICAgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgMTIwMTg4LCA3MTMwMywgOTgzOTI0LCAxMjM2NywgCi0gICAgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIAotICAgIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgCi0gICAgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIDk4MzY5NiwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgCi0gICAgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIAotICAgIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIAotICAgIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCAKLSAgICA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIAotICAgIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIAotICAgIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCAKLSAgICA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIAotICAgIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgCi0gICAgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAKLSAgICAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAKLSAgICAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAKLSAgICAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIAotICAgIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgCi0gICAgMCwgOTgzODc1LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzYzOCwgNTAxNiwgNDM1MzUsIDYzODkzLCA0MjgzNSwgCi0gICAgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIDY1MDYwLCAxMjA3OTcsIDk5MDAsIAotICAgIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAxMjgxNTEsIDEyMTc3LCAwLCAwLCAKLSAgICAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIDc0NzY4LCA4OTcxLCA3ODU5MywgCi0gICAgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIAotICAgIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIAotICAgIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgCi0gICAgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgCi0gICAgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCAKLSAgICA0MzMzOSwgMCwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAKLSAgICAxNjY0LCAxODUwLCAxMjg4NDEsIDMwNzksIDExMzQwLCA0MjQwOCwgNDI0NDcsIDEyNzE0MCwgMTIwMDIwLCA0MjMwNywgCi0gICAgMTIzODYsIDQyMzA0LCA5MTc1NTUsIDAsIDEyMzg5LCAwLCA5MjM2NiwgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgCi0gICAgMTE0NywgNjM5OTIsIDQyODg3LCAxOTg3LCA5MjcxOCwgNTQ4MCwgNzg1OCwgMTE2NTMsIDQxMTYsIDEyMzkxLCA2NjE5MywgCi0gICAgMCwgNDkzOSwgMTIzODQsIDAsIDAsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAxOTQ2ODgsIDk4MzE5MCwgMCwgMTI2NDksIDAsIAotICAgIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgNDM2NDMsIDE5NDY4OSwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgCi0gICAgMTE5ODEzLCA3NzQsIDExOTgyOSwgMCwgMTE5ODE1LCA1OTk0LCAxMjUzOSwgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCAKLSAgICA5ODMxMDUsIDExOTYwMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMTI4MzEyLCAxMTk4MDgsIDE2MiwgMCwgNjUyMTksIAotICAgIDQxMDczLCA5Njg3LCA0MTY4MSwgNjMwNCwgMTE5ODEyLCA2NjE5NiwgMTk0ODgxLCA1MjYyLCAwLCA1NTIzMywgMTI2ODEsIAotICAgIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMTI3NTI4LCA0MjgxMCwgMTA0OTIsIDAsIDk4MzY1MiwgMCwgNDMxMTksIDAsIAotICAgIDEyMDc1MywgMTI0MDMsIDI1MDAsIDE5NTAxMywgMCwgNDg5OSwgMTI3MjksIDAsIDAsIDc0MTEzLCAyMzQzLCA0MTAzLCAKLSAgICAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMCwgMTk1MDEyLCAxMjg1OSwgNzAwODcsIDEyMDE0OCwgNjYzNjksIDU4NjEsIAotICAgIDEyNzc1OCwgMTE5OTksIDEyNDAwLCAwLCA5ODM4MzAsIDEyNjQ1LCA1MTQ2LCAxMTMyMCwgNjg0MTAsIDY3NDgsIDY1MDQwLCAKLSAgICAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgMTIwNjQ1LCA1MTQ3LCAwLCAwLCA3NDUyNCwgMCwgMTkyOCwgMCwgCi0gICAgNjc2NDksIDU5OTEsIDM0NDUsIDY3NjA5LCA0OTc2LCA2NDE3NiwgMCwgNjc2MTAsIDgyNDEsIDAsIDc3ODY4LCA0MjA2LCAwLCAKLSAgICAwLCAwLCAxMjgyOTgsIDAsIDEwMTM4LCAwLCAwLCA4ODk3LCAxMjAyMzQsIDAsIDgzNTcsIDQxMjQsIDc3ODYyLCA2NTgzNiwgCi0gICAgMTIwNjQxLCAxMjc5MjYsIDc3ODU5LCAwLCAwLCAxMTIzLCA5NjMsIDQxNTUzLCAxMDEyMCwgMTI0MDUsIDEyMDE1MCwgCi0gICAgOTI2NjQsIDM5OCwgMTMyNzgsIDk3MjMsIDYzNjYsIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgOTk3MCwgMTI0MDIsIAotICAgIDk4MzEzNiwgNDIzOTIsIDEzMDUsIDEyNDA4LCAwLCA0NDAwNywgMCwgMCwgNDE0NjQsIDEyNDExLCAxMjk2OSwgMTIwODI0LCAKLSAgICA0MTQ2NSwgOTgzNTY1LCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgMTE5MTYzLCAwLCA5MDkzLCAKLSAgICAwLCA5MTQ3LCAxMjg3ODcsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgNzM3NzYsIDY3NTAsIDE5NTAxOCwgMCwgCi0gICAgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIDY3MjYsIDAsIDQyMTc2LCAKLSAgICAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIDEyMDMwNywgMCwgOTIzNDMsIDAsIAotICAgIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIDE5NDcwMSwgMTA4MDMsIDQxMzIsIAotICAgIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMDUsIDc0ODM3LCAxMjAxNTUsIDE0OTksIDAsIDgwNTUsIDQyNzQwLCAKLSAgICA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgNjM5NjksIDExNzgxLCA0MjcxOCwgCi0gICAgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIDEyMDE3MiwgMCwgMTkzMywgCi0gICAgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIDE4MDQsIDMzMTEsIDY3NjE1LCAKLSAgICA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCA2Njc1LCAxMjgxNDQsIDAsIAotICAgIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCA2NDY2MywgMCwgMCwgNDU2MSwgCi0gICAgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAKLSAgICAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgCi0gICAgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIAotICAgIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCAKLSAgICA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCAKLSAgICA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIAotICAgIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCAKLSAgICA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCAKLSAgICA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIAotICAgIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIAotICAgIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIDY2NzIsIDAsIDAsIDAsIDk4MzczOCwgNjM4NDEsIAotICAgIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCAKLSAgICA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCAKLSAgICA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAKLSAgICAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgCi0gICAgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgCi0gICAgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAKLSAgICAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIAotICAgIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgCi0gICAgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIAotICAgIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCAKLSAgICA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgCi0gICAgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCAKLSAgICA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIAotICAgIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCAKLSAgICA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAKLSAgICAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCAKLSAgICA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAKLSAgICAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIAotICAgIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgCi0gICAgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgCi0gICAgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgCi0gICAgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAKLSAgICAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIAotICAgIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAKLSAgICAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIAotICAgIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NDIsIDAsIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc3NiwgMCwgMzQ1NSwgCi0gICAgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCAKLSAgICA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgCi0gICAgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAKLSAgICAyNjUyLCAxMjA1MjcsIDcxNjQsIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIAotICAgIDkxNzUwNSwgMTgyOCwgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCAKLSAgICA2NTIzOCwgNjgzNzQsIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCAKLSAgICA2NDQzNiwgMzYwMSwgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCAKLSAgICA3NDE4MSwgNDM0MywgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgCi0gICAgMCwgNDM1NjUsIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCAKLSAgICA5ODMyMDQsIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIAotICAgIDEyNjUxLCAwLCA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgCi0gICAgMTE4ODQ0LCAwLCAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgCi0gICAgMCwgNjk3NjAsIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgCi0gICAgOTA4MCwgMTI3MDAwLCAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgCi0gICAgNjUxNjYsIDExOTExMiwgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAKLSAgICAwLCA0MzA0NSwgMCwgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIAotICAgIDQzMzQ2LCA4MTE2LCA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCAKLSAgICA5ODM2MDIsIDEyMDgxMSwgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIAotICAgIDU1MjU3LCA3Mzc3MSwgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCAKLSAgICA2NDU5NSwgMTI3Mjk0LCAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAKLSAgICAwLCAwLCAxMTkwNjAsIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIAotICAgIDQyMDE2LCAxMTgyMywgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgCi0gICAgNzQ4MTIsIDc4NTg0LCA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAKLSAgICAxMjA4MDMsIDk4MzgzOSwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIAotICAgIDEyNzE4MiwgMCwgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIAotICAgIDExNTk0LCAxMjgyNDcsIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCAKLSAgICA4MjY4LCA0OTIzLCA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgCi0gICAgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODU3LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgCi0gICAgNzM5OCwgNDE1MTUsIDAsIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIAotICAgIDEyMDUyNSwgMCwgNzYxNywgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCAKLSAgICA1NzAzLCAwLCA0MTUxNywgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAKLSAgICAxMDY2MCwgNTc2OSwgNjEzLCA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCAKLSAgICA0MzQ0OSwgMCwgMCwgODIyNSwgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIAotICAgIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgCi0gICAgMzE5NSwgNTU1MCwgOTgzNTU0LCA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgCi0gICAgMjg3NywgMCwgMCwgMTY3NSwgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIAotICAgIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIDAsIDAsIDk4MzkwNywgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCAKLSAgICA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgCi0gICAgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIAotICAgIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAKLSAgICAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcwOSwgCi0gICAgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIAotICAgIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzAsIAotICAgIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCAKLSAgICA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIAotICAgIDY2NzAxLCA2Mzc3MiwgOTgzODA1LCA2Mzc0NSwgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIAotICAgIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAKLSAgICAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgCi0gICAgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIAotICAgIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAKLSAgICAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgCi0gICAgMTAzMzUsIDM1MjAsIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgCi0gICAgMTI0OTEsIDAsIDY0OTExLCA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDExNjExLCAxMTYzMiwgCi0gICAgMTI3MDQxLCA2NjIxMywgNjM4NjQsIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIAotICAgIDY2MjM2LCA2NjIxMSwgNjYyMTgsIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCA5ODM1NTIsIDc5MDksIAotICAgIDY2MjM0LCAxMTYwNSwgNjM3NTksIDk4MzY0NSwgNjYyMDgsIDczOTk5LCA2Mzc5OSwgNjM4MDMsIDI0NCwgMTE1NDIsIAotICAgIDEyODk4LCAxMjQ5NCwgNzM3NjEsIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAKLSAgICAxMzA0MCwgMCwgODYxMiwgNDg4NSwgNzQwNTMsIDAsIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCAKLSAgICA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCA3ODA0MCwgCi0gICAgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCA3MDAyOCwgNzgwMzQsIDQ1NzksIDEyODA5MCwgMCwgMTI1MTEsIDc0NDUzLCAKLSAgICAxMjUxNCwgMCwgNzQ1NzksIDcyMzksIDcwMDEsIDg2MjMsIDk0MDExLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIAotICAgIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIAotICAgIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCA5ODM5MTEsIDAsIDAsIDIzMjMsIAotICAgIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMTI3MjgwLCAwLCAwLCAKLSAgICAyMzA5LCAxMzEyLCA4MTczLCAxMjg4NzEsIDEyNDY5LCAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAxMjgxMTEsIDkzOTcsIAotICAgIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCAKLSAgICA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAwLCA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAKLSAgICAyMzEzLCAxMjgxNjcsIDc5NDgsIDkyMzYsIDkyNTcxLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAKLSAgICAxMTk5OCwgMTIwODIsIDEwOTI0LCAzMTQ3LCAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCAKLSAgICA5MzgyLCA5Mzc5LCA5MzgwLCA5Mzc3LCA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NjksIDkzNzIsIAotICAgIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgOTgzOTQ5LCA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIAotICAgIDg3NDQsIDcyNiwgMCwgOTgzODI4LCA0MTU1LCAwLCAwLCA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAKLSAgICAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIDk4MzgzMiwgMTI1MjUsIDk4MzQ2MywgMTIwMTYsIDY1NzcwLCAKLSAgICA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIDAsIDExMDMwLCAwLCA5MjU2NywgNjU2OTEsIDYzOTk4LCAKLSAgICAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAxOTQ2NjgsIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIAotICAgIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIAotICAgIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIAotICAgIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMTI2NTE0LCAKLSAgICA4NTQ2LCAxMTU1MywgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCA5ODM5MzgsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgCi0gICAgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCAKLSAgICA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCAKLSAgICA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgCi0gICAgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCAKLSAgICA5NjA3LCAwLCA5NjYzLCAwLCAxMTk2MzQsIDY1MDMsIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAxMjczMDQsIDQxMDYxLCAwLCAKLSAgICAxOTQ4MzgsIDEyNzE4NywgNjUwMjYsIDQxOTkzLCA0MTUwOSwgMTEwNDUsIDY1MDI4LCA3ODYwMiwgNjY0NzYsIDQxMTA4LCAKLSAgICA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIDQxOTkyLCA0MTUwNiwgMCwgNDE2ODcsIDAsIDEyMDcxNywgCi0gICAgMTI3Nzc2LCA5OTQwLCAxMjcyOTksIDc2OTIsIDk4MzgyNCwgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgNjUwODMsIDQxMTMzLCAKLSAgICA5ODE2LCAxMjY1MTcsIDEyNTMyLCA3ODU1MCwgNzg1NDYsIDM1MDgsIDEyNzA1OCwgNDMyMzUsIDAsIDEyNzI5OCwgNjQxMzksIAotICAgIDc4MjMxLCA2NDExLCAxMjkxMCwgNzg1NTQsIDY2NjQ0LCAxMzAyOCwgNjczNywgMTI1MzcsIDAsIDAsIDY0MTM2LCAxMjUzNiwgCi0gICAgMjM1MCwgMTMwMjksIDc4MjMzLCAwLCA5ODMxMDMsIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgMTI4ODEwLCAKLSAgICA5ODM2MzYsIDY1NTk5LCA2NTcxNywgOTk2NiwgMCwgNDk0OCwgMTI0ODQsIDQwMzIsIDEyODE0OSwgMTI2MjMsIDAsIDYyMDcsIAotICAgIDAsIDYxMTcsIDY1OTMwLCA4NDEyLCAwLCA3NDM4LCAxMjk2LCAyMzI1LCA0MTUxMSwgMTI2NjI1LCAxMDE0OSwgNzQxMTgsIAotICAgIDAsIDEyNzI4NiwgMTI0ODEsIDAsIDEyNDg4LCA2NjcxMywgMCwgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDQyNjE5LCAKLSAgICA3Mzc2NiwgMCwgNjI5NSwgOTAxLCA0MTUxMCwgNzk1MywgMCwgNjUwMzIsIDQxNTEzLCA5ODMxNjYsIDExOTI3LCA2NjU4NCwgCi0gICAgNzg1NTksIDc4NTYwLCA3ODU1NywgNzg1NTgsIDAsIDc4NTU2LCA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIAotICAgIDY5OTIyLCA3NDAzMSwgNzg1NjMsIDc4NTY0LCAyMzUyLCA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDY3OTczLCAKLSAgICAwLCAxMzAyNiwgNjc2MiwgNzg1NzksIDc4NTgwLCAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIAotICAgIDEzNDMsIDk4MzgxNCwgMCwgOTMyNSwgNjgxOCwgNjI4MywgMTE3MzgsIDAsIDk4MzkyNSwgMCwgMTE3NDEsIDAsIDAsIAotICAgIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIDk4MzgxNiwgMTk0NzU0LCAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgCi0gICAgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgOTk1NiwgMCwgMCwgNzQ1NTIsIDEwMDE0LCAwLCA0MTI2MCwgMTE5MzQwLCAKLSAgICAxMzAyMCwgMTAwMjQsIDE5NDc2NCwgNzQ1ODMsIDc0MzQwLCA2OTY4MSwgMCwgNDMwMDEsIDgwMjksIDAsIDAsIDk4Mzc3MSwgCi0gICAgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAxOTQ3NDgsIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAKLSAgICAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIDc4NTgxLCA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIAotICAgIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc0NTQyLCAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCAKLSAgICA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgCi0gICAgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIAotICAgIDE5NDc0NSwgNjUwNywgMTI3OTE5LCA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAKLSAgICAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIAotICAgIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCAKLSAgICA0MTA1NywgMCwgMCwgMCwgMCwgOTgzNzgyLCA5MjIxMCwgOTI0MTEsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgCi0gICAgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDU4MzEsIDAsIDAsIAotICAgIDEzMDQzLCA4MDU2LCA5MjQ5NCwgNjU2ODEsIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIAotICAgIDkyMjI3LCA3ODI1LCA1NjYxLCAwLCAxMjA2MzAsIDM2MDMsIDQxMTA5LCAyMzk4LCAzNTQ4LCAxMjY1OTYsIDAsIDExOTkzMywgCi0gICAgMCwgMzExNSwgOTkxOCwgMCwgMTEzMjEsIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgCi0gICAgOTgzMjY2LCA0MTU1OCwgNDE0NzEsIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIAotICAgIDMxNDMsIDE5NDY3NCwgNjcwMSwgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIAotICAgIDcwMjUsIDYzOTc0LCAwLCA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIAotICAgIDE5NDY4NiwgNzM5MjQsIDExMjEsIDc4MzE5LCA2Mzk1OSwgMCwgOTk0MiwgMTMyMzEsIDAsIDY0NzUyLCA0NzMyLCAKLSAgICAxOTQ2NjYsIDExNTk2LCAxMTk5MzEsIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgCi0gICAgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCA0OTEwLCAxOTQ3MjgsIDY5MjMxLCA2NDc1MywgNjI3NSwgOTM5NTcsIDExODgzMCwgCi0gICAgNjM5NzgsIDExMDQ0LCAzMjI5LCA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNzA4NSwgCi0gICAgNjEzNywgMCwgNzUyNCwgMCwgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCA4MjIsIDEyNzk4NCwgCi0gICAgOTkwMywgNjQ3MjEsIDQyNzIyLCA2OTg3NywgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCAKLSAgICA1MzExLCAxNzk1LCA5NjUsIDExODc5MSwgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIAotICAgIDE5NDY0MSwgMTE5MzQxLCAxMjAzNDksIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgCi0gICAgMCwgOTgzOTUxLCA3NDgsIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCA3ODc5OSwgMTk0NjI5LCAxMDU1NiwgCi0gICAgMjQ3NSwgMTIzODgsIDQ4ODksIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAKLSAgICAxOTQ2MzUsIDQ4OTAsIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDk4MzYxNiwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIAotICAgIDc4MDQ4LCA3ODA0OSwgNzgwNDYsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIDY5NzAyLCAwLCAwLCAxMTM3NSwgCi0gICAgNjQ3NDYsIDIzMzIsIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgCi0gICAgNzgwNjYsIDEyMjAzLCA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIAotICAgIDExODg4OCwgOTM0NCwgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIAotICAgIDAsIDMxMzQsIDAsIDY1Njk2LCA5MjMzMSwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgCi0gICAgNzg0MTQsIDc4NDEzLCAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAxMjAxNjcsIDQzMjgsIDEwNzM0LCAKLSAgICAxMjcwMTQsIDAsIDEyNzkxNCwgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIAotICAgIDc4MDU0LCA0OTE3LCA3NDUxNiwgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDExODg5MywgMjM2MSwgNzk3MSwgCi0gICAgNzgwNzIsIDc4MDczLCA1NTI0MywgNzgwNzEsIDAsIDgwODYsIDc0MzE3LCA2NzA3LCA4MzE5LCAyMzEyLCA0MDk3NywgCi0gICAgMTA5NjAsIDQwOTYyLCA4MzA1LCAxMjU3MywgOTgzNjA4LCA0MDk4MCwgOTgzOTU1LCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCAKLSAgICA5ODMwNDgsIDY5ODU2LCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgCi0gICAgNzY5OCwgNTY1OCwgNzQwNDUsIDcwMDM5LCAwLCAwLCA0OTEzLCAwLCA5ODM5NTAsIDcxMzMzLCA0MjMyNiwgMTI4MTk0LCAKLSAgICAxMjcyOCwgOTI2ODUsIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgCi0gICAgNjE1MywgMjg2NywgMTk0NzA4LCA2NjMxMiwgNjk4LCAxMjgwMDcsIDE5NDYwNiwgMTAzNTYsIDcwMDE3LCAxOTQ3MTMsIAotICAgIDY1MSwgMTI2NDEsIDAsIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCA3ODQ2MywgNzg0NjQsIDEyODg1MSwgCi0gICAgNzg0NjEsIDE5NDY5NywgNzQzNTYsIDY0OTQ1LCA0NzE2LCA0MzI3NywgMCwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDAsIAotICAgIDE5NDcwMCwgNTUyNjQsIDQxMjExLCAxMjA2NzYsIDg3MDMsIDU0NjIsIDkxNzYyOSwgOTgzNDg3LCAxMDEwMSwgMCwgCi0gICAgNzAwNDksIDg0NzksIDQxNTEsIDQxOTMzLCAwLCAwLCA2NjI1NCwgMTIwODIxLCAwLCAwLCAxMjg2NTQsIDAsIDExOTE5NCwgCi0gICAgNzQwNTAsIDkyNzAxLCAwLCAwLCAwLCAwLCAwLCAxMjI3OCwgMCwgMCwgMCwgMjcwMCwgMTI1NzYsIDc4NDIsIDEyODk5LCAwLCAKLSAgICAwLCAyNjk5LCAwLCA3Mzg0NSwgMjk4NSwgOTI1NjgsIDEyNjQ3NSwgOTE3ODQ1LCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIAotICAgIDk4MjcsIDExOTMxMCwgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgCi0gICAgMzUsIDc4NDgxLCA3ODQ4MiwgNjY2OTQsIDY4NDc5LCA3ODQ3NywgNzg0NzgsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgCi0gICAgMTA1MzQsIDAsIDc4NDg1LCA3Mzg0OCwgNjc5NzUsIDQyNzIsIDAsIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgCi0gICAgNzg0ODcsIDQzMzA2LCAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDIyOTIsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIAotICAgIDQxODksIDk0MTA4LCA2NzU5NiwgMTI3NTA0LCA0MTg4LCAxODc5LCAwLCA5NjgsIDAsIDQzNzQzLCAwLCA4ODczLCAyMjc5LCAKLSAgICAwLCA5MTc4MjcsIDY1NTU1LCAxMjU3NCwgMCwgMCwgMCwgNzQ0OTAsIDEyNzA5OSwgNDM2NTcsIDAsIDAsIDAsIDQyNjgyLCAKLSAgICAxMjU3OCwgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMTI3MTAxLCA2NDg0OCwgMCwgMCwgNzI1MSwgMCwgMCwgCi0gICAgMTE4ODUwLCAxMTkxNDEsIDEyODU0NiwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgCi0gICAgOTYzMiwgOTIzMjMsIDc0NzYxLCA2NDMyMywgMTI3MzM1LCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgCi0gICAgNzEzMjUsIDAsIDc0MjY2LCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIAotICAgIDEyNzMwLCA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMTIwMTYxLCAwLCAwLCA0MTkzNCwgNzQ2NSwgMCwgCi0gICAgMTI4MTY4LCA5ODMyNjAsIDQ3MTUsIDYxMDEsIDk0MTA2LCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgCi0gICAgMTI3MTQ3LCA5NTg1LCA1Mzc0LCA5ODMyNTksIDEyODA1OSwgMCwgMCwgMTI2NjE4LCAxMjAzOTAsIDAsIDY1NTY3LCAKLSAgICAxMjA2MTQsIDE5MjksIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCAKLSAgICA1Mzc4LCA3ODc5MSwgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMTI2NTk5LCAxMjgwOTIsIDgyMSwgMCwgMjQ5OCwgCi0gICAgNTgwMCwgMTIwMTU3LCA5ODMxMTUsIDE3NjAsIDI0MjEsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgCi0gICAgMTE4NSwgMCwgNzg3NzAsIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAKLSAgICAxMDk0MiwgNzcxMywgMjM0OCwgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIAotICAgIDg2MiwgNjU2MjYsIDc4NDYyLCAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCAKLSAgICA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCA5MjIyOCwgMTk0NTk4LCAxOTQ2MDEsIAotICAgIDQyMjYwLCA1ODcxLCAxMTkwNzUsIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTI4MTg5LCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCAKLSAgICA4Nzc1LCAxMjc5NDUsIDAsIDI5NjMsIDAsIDg0MTAsIDQ0NTQsIDcyMywgMTI3ODgyLCA5NjYsIDQ0NDksIDkyMzMwLCAKLSAgICA5MjIzOCwgMCwgNzgxOSwgMjMyMCwgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgCi0gICAgODA0NywgMCwgNzg4MjcsIDEyNjM0LCA0MTU0MiwgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIAotICAgIDk4Mzc1NCwgMTU4NCwgNjY2NDUsIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAwLCA3ODA2MiwgNzUzNywgMCwgCi0gICAgMTEzNzAsIDAsIDEwMzMwLCAwLCAxMDM5NCwgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgCi0gICAgNzc5NTAsIDE5NDU3OCwgNzA3NCwgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTI4ODY4LCAyNTMxLCAxMzAzNCwgCi0gICAgMCwgMCwgNDIxMSwgMTI1OSwgNzUxNywgMCwgMCwgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgCi0gICAgOTQwMzQsIDE5NDU2NiwgMTEwNjQsIDQxMTI5LCAwLCA0Mjg1MCwgMTMwMzUsIDkwNzUsIDkyMzg3LCA1NDY2LCAxMjgxNTMsIAotICAgIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgMTk0NTczLCA0MjcxLCA3ODQxNywgMTI4MzU3LCA2NzY5LCA0MTQxMCwgOTgzNDQ0LCAKLSAgICA2NDI2MiwgNjc2NywgNDE0MDcsIDAsIDAsIDY3NTUsIDExODg2NCwgOTA0NiwgMTI3OTM0LCAxMjY2MDgsIDAsIDAsIDAsIDAsIAotICAgIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgNjk4OTUsIAotICAgIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIDAsIDkyNjYxLCA2OTgyMSwgCi0gICAgNDE5MDUsIDAsIDAsIDEwNzc1LCA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDk4MzA2MywgNDI1MzUsIDY5ODEyLCAKLSAgICA2NDUyOSwgNDE0MDgsIDQyODUzLCAzODc3LCAxMjA3OTUsIDQyNjc0LCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCA5ODM3NjcsIAotICAgIDEwMjM2LCA2NTkxOCwgNDM3ODIsIDAsIDAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCAxMjgwNTgsIDY5ODQ0LCAKLSAgICA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgNDI2MDAsIDAsIDQzMjAzLCAwLCA5ODM3OTAsIDQzMjg2LCAwLCAxMjgyMTEsIAotICAgIDQzNzc4LCAwLCA0MTMwNSwgNzg3NzYsIDQzNzgxLCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgMCwgNjA1OSwgCi0gICAgMTI2OTg1LCA1NTIzNSwgMCwgODUzNSwgMCwgNjUxOTYsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAxMjA0ODEsIDEyMDc4NiwgCi0gICAgNDIyMzMsIDY0MTQwLCA5OTQ2LCA2Mzg4NSwgMTk0NzkyLCAxMTgyMiwgMCwgNDMxODksIDk4Mzg4OSwgMCwgMTc4OCwgCi0gICAgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgMCwgMCwgOTAyOCwgMTE5NTcxLCA2OTIzNCwgOTQwNTUsIDAsIDEyODUsIDY0ODgyLCAKLSAgICA0MTI0MiwgNzAwODYsIDAsIDEyNjQwLCAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDcwMDgyLCAzOTQwLCA0MTU5NywgCi0gICAgNDM3NTQsIDMzOTYsIDEyNjQyLCA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgCi0gICAgMTIwNTE2LCAxMTg5ODksIDAsIDg4MTUsIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIAotICAgIDIxNDIsIDY4NDU0LCA0MjQ4NSwgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMCwgOTI2NDMsIDAsIDE5NDY3MywgCi0gICAgMTIwMzIsIDAsIDk3MjUsIDAsIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCAKLSAgICA0Mjc3NywgMTAxMzksIDk4MCwgNDM2OTgsIDY1Mzg2LCAyMjA4LCAwLCA0MzcwMSwgNDMxOTgsIDcxODQsIDEyMDY3MywgCi0gICAgMTk0Nzk3LCA5MTc4MTksIDEwMDg1LCAxMTk5OTIsIDAsIDExOTk5MywgNjYzNCwgOTIzNzMsIDAsIDExOTMyMywgODA3MiwgCi0gICAgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIAotICAgIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAyMjE3LCA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIAotICAgIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgCi0gICAgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgCi0gICAgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCAKLSAgICA0MjQ1MiwgNzgzMzEsIDEyMDY2NCwgNzg0NDUsIDAsIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCAKLSAgICA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIAotICAgIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIAotICAgIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCA0MTA5OSwgMCwgNjYzMDksIDAsIDAsIDE0OTQsIDk4MzE0NiwgMTI2NjEzLCAwLCAKLSAgICAxMTY5MywgMTI2NTEzLCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCAKLSAgICA3Mzc5NCwgMCwgODAyMiwgMCwgMTIwNDYyLCA3NDEwNiwgMTI0MTMsIDk0MDY5LCA5MTc5OTQsIDkxNzk5MywgOTE3OTk1LCAKLSAgICA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCA0Mzc1MiwgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgOTgzMjM2LCAKLSAgICA0MjMzOSwgMCwgNjA2MywgMCwgNzgzODMsIDExOTU5NCwgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgCi0gICAgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIDExODgxMCwgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCAKLSAgICA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgOTIyMDQsIDk4MzExNiwgMCwgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAKLSAgICAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgMzY3NCwgOTc0MCwgOTEyMSwgNTU2OCwgMTIwMTA3LCAKLSAgICAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAxMjAxMDEsIDU4OSwgNzA1MCwgOTgzNzkxLCA0MzI4MSwgCi0gICAgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAxMjY0OTcsIDc0MDk5LCA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAKLSAgICAwLCA1ODQ3LCA2OTI4LCAxMjgwNzQsIDAsIDAsIDAsIDAsIDY2NTkyLCAxMjIwNCwgOTE3OTYyLCAxOTk2NiwgNzc4NTYsIAotICAgIDQyNTYxLCAxMjA2MjYsIDk4MzI0NSwgMCwgODEyMCwgMTIwNzAxLCAwLCAwLCAxMjgwMTIsIDQxMDYzLCAwLCAxMDY2NCwgMCwgCi0gICAgODM2OSwgMCwgNDU1MSwgMTk0OTY0LCAzMzY5LCAwLCAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIAotICAgIDEyNTE3LCA1NTcsIDk0NTcsIDEyMDM0LCA5ODM2NjIsIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMTk1MDI1LCA3NDA5NCwgMCwgCi0gICAgMCwgNzc5NzAsIDk4MzU2MCwgMCwgMTI4MTc1LCAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCAKLSAgICA2OTIzLCA5MjI4MSwgMTA0NDEsIDczODM2LCAwLCA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgCi0gICAgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAKLSAgICAxMjgxNjksIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgMTIwNjAsIDAsIDc4MzkyLCAxMjgyNiwgNjMyOSwgMCwgMTA1MTQsIAotICAgIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgMTI3MDU0LCA3ODM5OCwgNDM1NzAsIDI2OTcsIDQzNDIwLCA3ODM5NiwgCi0gICAgMTI3MDU3LCAyNjk1LCA0MjE3MSwgMCwgMCwgMCwgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAKLSAgICAxMTY0LCAxMjg4MTcsIDAsIDQxOTE4LCA5ODMxNjgsIDEyNzU0MiwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAxMjgwMDEsIAotICAgIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCAKLSAgICA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCA0Mjg0MywgCi0gICAgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgCi0gICAgMTI4MDY4LCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCAKLSAgICA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCAKLSAgICA5MTc1NjksIDc0MTE0LCAxMjIzLCAxNjQyLCAxNzQsIDc4Mzk5LCA4ODMsIDQxNjEsIDEyNjkxLCA0MjYwMywgNDE0MTMsIAotICAgIDMyMTIsIDQxNDU5LCAzMjExLCA3NDgxMCwgNDE0MjUsIDEyNzAyOSwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCAKLSAgICA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCA0OTg2LCAxMjE4OSwgMCwgCi0gICAgNjc2NDgsIDEyMDQ5OSwgOTQwMDEsIDQyNTcsIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAwLCAKLSAgICA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgNjk2NzksIDY5Njg0LCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCA5MjU1NiwgCi0gICAgNzM4OTgsIDExOTc5LCA3MDA1MSwgMTE4OTAwLCA5MTc4OTQsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCAKLSAgICA3NDIyNywgMCwgNjUzMDQsIDQ2NzksIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDAsIDAsIDAsIDAsIAotICAgIDQyOTE2LCAwLCAwLCAwLCA3MjgyLCA3ODcyOCwgNjU3MzMsIDQ0NDUsIDEyNzEzOCwgMTI4MDgyLCAzNDk0LCA3NDYwNiwgCi0gICAgNjU1NSwgMCwgNzc5NzYsIDAsIDAsIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyMzgsIDY1MzEyLCA1NDQ3LCAwLCAKLSAgICAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAKLSAgICAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIAotICAgIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgMTIxNTUsIDk4MzY2NSwgNDI4NzgsIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgCi0gICAgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgOTIzMDcsIAotICAgIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIDAsIDQ5NTcsIDY0NzQxLCAyNDIyLCAyMjEyLCA5ODMwODAsIDAsIDAsIDI0OTYsIAotICAgIDExNTE2LCA5NDQsIDExODg1MSwgMzg5MCwgMTIxNjgsIDE0MzgsIDAsIDk4MzExNywgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgCi0gICAgMTI4NTU1LCAwLCAwLCAxNTcxLCA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgCi0gICAgOTgzOTM1LCAwLCA3ODEyMCwgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCA3ODY1NywgNDExMjAsIAotICAgIDY1MTIxLCAxMDg2MiwgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgOTE3OTg2LCAKLSAgICAxMTUzMiwgNzQwNzMsIDEyNzMzOCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIAotICAgIDExNDI4LCAxNzMwLCAyNDU3LCA5MTc4MDgsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgCi0gICAgOTIyMzAsIDAsIDYxMjksIDAsIDEyODUyOCwgMTI4MjY4LCAwLCA3ODc0LCA4NjgxLCAxMTkwOTIsIDAsIDEzMTM2LCAwLCAwLCAKLSAgICA3MDEwMiwgNjM4ODYsIDExODg4MSwgOTYwNSwgNzEzMDgsIDEzMjIwLCAxMjg3NzYsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgCi0gICAgMCwgMCwgMCwgNTI0MCwgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDk4MzM0MywgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCAKLSAgICA5NTAxLCAwLCAxMjcyLCA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIAotICAgIDAsIDkxNzgxMiwgMCwgMTE4ODk5LCAxMjE5MywgMCwgMCwgMCwgMCwgOTgzMzQ1LCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAKLSAgICAwLCAwLCAwLCA1Mjc1LCAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIAotICAgIDY2MzMyLCA2NjYwMywgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDk4MzkwMiwgOTUzNywgMzk2MSwgMTIxMTUsIAotICAgIDc3OTUzLCAyNjA1LCA0NTAwLCA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgNDI2ODYsIDc3OTczLCAKLSAgICA0MjM2MiwgNjQ2ODYsIDQ0OTksIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgOTE3OTA0LCA4NTQxLCAKLSAgICA3ODI5OCwgNzAwMzQsIDQxODY2LCAwLCAwLCAwLCAwLCA2OTkyNCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCA0MTk0MCwgCi0gICAgODI5OSwgNDE5NDUsIDcxMzIsIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAwLCAKLSAgICA0MTY5OSwgMTA3NjIsIDQzNzgwLCAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgNjI3NCwgNDQ5NCwgMCwgNDAxMiwgCi0gICAgMTAzOTUsIDk4MzU5MSwgNDM2MzMsIDY1NDQ3LCAxMjY1MTEsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCAKLSAgICA0Mjc1NSwgNzQ4MDIsIDkyMjcsIDc1MDYsIDc1MTAsIDY5OTM3LCA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgCi0gICAgNjg4LCA0MTg0NywgNjkwLCAyNTQ4LCA3MzcsIDk3NCwgODAwMywgNzQwNiwgOTE3OTExLCAwLCAxMjg2ODgsIDM5ODUsIAotICAgIDkxNzkxMiwgNjU4NjAsIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgCi0gICAgOTI1MDUsIDEwODc5LCAxMDM0NywgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgCi0gICAgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIAotICAgIDQzNTY4LCA5ODMxNzUsIDExNzE3LCA3NjUwLCAxMDU5NCwgNjQ5NTEsIDc2NDcsIDc2NDksIDEyODE1NSwgNzY0NiwgMCwgCi0gICAgNzgwODIsIDk2NTEsIDAsIDM4OTEsIDAsIDAsIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgMjM2MywgOTgzMTM1LCAwLCAKLSAgICA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCAKLSAgICAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgNzEzNSwgMTU2OSwgOTIzNzUsIAotICAgIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgMTI1MzMsIDk4Mzg3MCwgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAKLSAgICAwLCA2Nzk3NCwgMTE5ODAsIDEyODY1MCwgOTgzNzkyLCA2Mzg5NCwgMTIwNzYwLCAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCAKLSAgICA4ODUwLCA3NDI3NSwgOTIzOCwgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIDEyNzkxLCAwLCAwLCAxMjc4NDMsIDQ0NDcsIAotICAgIDczNzMyLCAxMjc5MywgMTI5MDAsIDkyMzc3LCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgMTE5MTI4LCA2NjYwNywgCi0gICAgMTI3OTIsIDQyMjMyLCAxOTQ5MzgsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCA5ODM4NjAsIDQxMzk5LCAwLCAKLSAgICAwLCA1NTI1OCwgMCwgMTI2OTAsIDAsIDAsIDQzNjcyLCAxMjc4NDAsIDQxNjUyLCAyOTc0LCA5MDEwLCAxMTMxNSwgMCwgCi0gICAgMjc4LCAwLCA0MTQwNSwgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgCi0gICAgNDM1NTMsIDAsIDY3OTAzLCAwLCAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCA5ODMxODYsIAotICAgIDc3ODI5LCA3MTM2MCwgMCwgNjQxMywgNjU1MCwgMCwgMTk0MCwgMCwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgCi0gICAgMTAwNDQsIDEyODMyMiwgMCwgMCwgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAKLSAgICAxMDI5NywgMCwgMzc0MiwgMCwgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIAotICAgIDQzNzU4LCA0MTgyLCA3ODE3MSwgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAKLSAgICAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIDQxMDYwLCAwLCA0NjY4LCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIAotICAgIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgCi0gICAgMTI4MjM2LCAwLCAxMjA0NzIsIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgCi0gICAgNjI3OCwgMCwgNTUxNSwgMCwgMCwgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDAsIDAsIDc0ODQxLCAKLSAgICA2Nzg4NCwgMCwgNjc4OTAsIDY3ODg1LCA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDEyNzE4OCwgCi0gICAgMTkwMiwgNjc4ODcsIDk2MzgsIDEyOTc2LCAxMjY1NDYsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgCi0gICAgNzM2MSwgNjY2NywgNjc4NzQsIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIDY3ODg5LCAwLCAxMzExLCAKLSAgICA5MTc5NjYsIDQzMjYsIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAxMjg4ODAsIDY5MTcsIDc4MTU1LCAwLCA5NDksIAotICAgIDc4MTYyLCAwLCA2MTQ4LCA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgCi0gICAgNDE3OTYsIDEyNjksIDY1MzAsIDAsIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIAotICAgIDk4MzcyMCwgMTI4Njc1LCA0MTgzNCwgNTI3OSwgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCAKLSAgICA2NjAzNiwgMCwgMCwgNjQyOCwgNDIyNzAsIDAsIDk4MzU5NiwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIAotICAgIDEyMTMxLCA5ODM3MTMsIDk0OTMsIDk4Mzk1OSwgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIDAsIDc0Mzk0LCA0MzQ2MCwgCi0gICAgMTA2NTMsIDQyNzIzLCA5ODM4NDUsIDExOTYzMiwgMCwgNjU2MCwgNzAxNiwgNzQyNzQsIDk4MzYxNSwgNDM1NTYsIDM5MjksIAotICAgIDY3OTc3LCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgNjk3NjEsIAotICAgIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCA1MTY4LCA3ODU1MiwgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIAotICAgIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCAKLSAgICA5ODM2MDcsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDQzMjQwLCAxMjc4NiwgMjI5LCAxMTk4ODUsIDExOTg4NCwgNDQwMDQsIAotICAgIDcxNDIsIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDQzNzk1LCAKLSAgICA3NzcwLCAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgCi0gICAgMTEwNTksIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAwLCAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCAKLSAgICA0NDAwOSwgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAxMTg3OTksIDk4MzIxNywgMTA5MjcsIDE3MDEsIDk4MzY1NSwgCi0gICAgMjM4OCwgNDE3NDksIDQxNzYxLCA1NDUzLCA4MzYxLCAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIAotICAgIDkyNDkzLCA3ODY3NywgMCwgOTI0MjksIDc4MTc0LCA2NjQzMiwgODgwMSwgMzA1MywgNDM0MCwgOTgzMDQ0LCAwLCA2NTgxMiwgCi0gICAgOTE3ODMxLCAwLCA0MTgyNCwgNjc5ODUsIDEyMDIwMywgMTk0ODAwLCAxOTQ4MDMsIDQyNzAwLCAxOTQ4MDUsIDEyNzk4MCwgCi0gICAgMTk0ODA3LCA3ODY3NiwgOTIzNTYsIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAKLSAgICAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDcxMzMxLCAwLCAxOTQ3OTMsIDE5MTIsIAotICAgIDQyMzg1LCAxMDMwNiwgMTAzNzAsIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIAotICAgIDkyNjcxLCA5ODMyNDQsIDExODg3OCwgMCwgMCwgOTkxOSwgMTIwNTI4LCA1NTksIDEyODE1NywgNDE4MjUsIDEyNzk3NSwgCi0gICAgNzgxODgsIDQ4OTIsIDc0MDE2LCAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAxMjg4NjUsIDU3NzcsIDAsIDc1OSwgNjU3NDksIAotICAgIDIwNzksIDY1MjQ4LCAxMjc4OCwgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDEyNjU3MywgMzY2OCwgCi0gICAgNjU3NTQsIDQzNTYwLCAxMjIyNiwgNjc5OTEsIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgCi0gICAgNDM2MTgsIDY1NzQ3LCAxMDkzNywgMjk2MiwgMCwgMjMyMSwgMzU4NywgNjU3NDUsIDkyNDM2LCA4OTIxLCA5OTUyLCAwLCAwLCAKLSAgICA0MjcxNCwgOTk1MSwgNDM0MDksIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgCi0gICAgNDE4MjAsIDIzMDAsIDIzOTUsIDEyODU2MywgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgCi0gICAgNDI4MDksIDQyODA3LCAwLCAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDY3OTc2LCA0MTg5OCwgCi0gICAgMjM2MCwgNDE3OTQsIDkxNzk0MiwgNzEzMTQsIDEyNzgxOCwgMCwgMCwgMjQxOCwgOTgzMDk4LCAyNDExLCAxMTMzNiwgNzk5LCAKLSAgICA2MzgyMywgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIAotICAgIDU1Mjg0LCA5MjIwMywgMCwgMTAzODQsIDk4MzIxOCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDY5OTMxLCAwLCAKLSAgICA3Nzg3MiwgNDQ0MywgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgNTQ0MSwgNDE4OTYsIAotICAgIDEwMjg4LCAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDc4MTk4LCAyMDQ5LCAxMDA5OCwgMCwgCi0gICAgNzQxNDUsIDEyNzk0MywgMTAyNjQsIDEwMjgwLCA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIAotICAgIDQ4NjIsIDk3MzUsIDY1MzcsIDEyMDU5MSwgNzQyODYsIDM5MTQsIDkyMTc4LCA5Mzk3NiwgOTA2NSwgMTI5NjEsIDAsIDAsIAotICAgIDkyMjUzLCAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDkxNzk3OCwgNDY5MywgNzM4OTMsIAotICAgIDQyNzI0LCAwLCA0Njg4LCAxMjA0NTQsIDAsIDAsIDY3OTk0LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDk4Mzg5OSwgMTIwMTYzLCAKLSAgICA2NTI4LCAxMjc1NTMsIDQzMDM1LCA2OTg5OCwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgCi0gICAgNzgxNjcsIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgCi0gICAgNzM5MDIsIDY5NzQwLCAwLCAwLCA5OTc1LCAxMjgwMzksIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgCi0gICAgNzQ0NDEsIDc4ODEwLCAwLCAwLCA2Nzk4NywgMCwgMCwgMCwgNjc5ODksIDAsIDEwMDY1LCA4MjA3LCAwLCA5MjYxMywgCi0gICAgMTI4MDExLCAwLCA2NjIsIDAsIDkyNDQsIDE5NDg2MywgMCwgMTE5MjYxLCA5ODM0MjAsIDAsIDAsIDAsIDQxOTI5LCAwLCAwLCAKLSAgICA2NjY3NCwgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgNjgwMTMsIDUyLCAxMzExOCwgCi0gICAgNjQ3NSwgMCwgMTIwMzQxLCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAwLCA2Nzk5MiwgNzQwODUsIDAsIDM5NzgsIDAsIAotICAgIDkxNzk0NSwgMTI3ODIzLCAxMTU4MiwgMTIwNzYxLCAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDkzOTYxLCA2OTc4MiwgCi0gICAgMTI4NTU3LCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIAotICAgIDIwMzYsIDk4NiwgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIAotICAgIDY0MzM0LCA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDc0MTkxLCAKLSAgICAxMjA0MTAsIDAsIDEyMDQ1MywgNjQ4MjEsIDk0NzgsIDI1MDgsIDkyNjgzLCAwLCAyMDIsIDEyODI0NiwgNzQxMzEsIDEyNDIsIAotICAgIDY1NTE0LCAwLCA2Mzk0MCwgMTI4NzA2LCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDkyNDMwLCA2MzkzOSwgCi0gICAgNDMzNzUsIDY1NDQwLCAyNTA0LCAwLCA3ODY3MSwgNjQ4MjksIDk4MzkwMSwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCAKLSAgICA5ODMzNTMsIDc0Mjk0LCA5ODM5MDUsIDY5MjM5LCAwLCAxMTkwMjcsIDEyOTkyLCAyNzUzLCAxOTM2LCA3MDA3OCwgOTI1NzQsIAorICAgIDE5NDYwOSwgMCwgODI5NSwgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgNzEzOCwgCisgICAgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIDUwMzYsIAorICAgIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY1NiwgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIDQ0MzIsIAorICAgIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIDEyNzI2MiwgCisgICAgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgMTI3MjU2LCAKKyAgICAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCA2MDk0LCAKKyAgICA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIDAsIDAsIAorICAgIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIDkyMjE4LCAwLCAKKyAgICAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAxMTk5MzUsIDc2MTMsIAorICAgIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIDEyMDI2OCwgMCwgCisgICAgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIDcyMTgsIDc4OTUsIAorICAgIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIDcyMTUsIDk4MzgzNiwgCisgICAgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgNDI4NjEsIDExMTMsIAorICAgIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgMjQ4OSwgNjU2MjQsIAorICAgIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAxMjA4NCwgCisgICAgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgMTIyODMsIAorICAgIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIDMyMzksIAorICAgIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgNTA0MCwgCisgICAgMCwgMCwgOTgzNDQzLCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCA3NDI5MywgMCwgCisgICAgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCA3MzkwOSwgNDgzNSwgCisgICAgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAwLCA0MjU4OSwgNTY5LCAKKyAgICAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzAsIDQxMzMxLCAKKyAgICAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDc3OTA4LCA0MjczOCwgNjU3ODQsIAorICAgIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCAKKyAgICA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgCisgICAgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIAorICAgIDg3MTQsIDk4MzgyMCwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgCisgICAgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCAKKyAgICA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCAKKyAgICA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIAorICAgIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIAorICAgIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgCisgICAgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCA5ODM5NzYsIDM1MzAsIDk3NTAsIDEyODMxNywgCisgICAgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIAorICAgIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgCisgICAgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgCisgICAgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCAKKyAgICA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIAorICAgIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCAKKyAgICA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIAorICAgIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAKKyAgICAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgNzcyNiwgMCwgMTk5MjIsIDI2NywgCisgICAgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIDQxMDc0LCA0MjY2LCAxMDY1MiwgCisgICAgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDgsIDAsIDMzOTEsIDQxMDc1LCAyNDc2LCAwLCAKKyAgICAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIDEyNzUzNywgMTMwMTQsIAorICAgIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzQyLCAwLCA5ODM4ODAsIDEyNjYzOCwgOTA1MywgCisgICAgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MjgsIDY2NjAsIDc4NzU4LCA5MTc3NjAsIDkxNzc5MywgCisgICAgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzM0MSwgNzQ1NDcsIDEyNjU4NSwgCisgICAgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCA3ODA5OSwgMTI3MDg1LCAwLCAKKyAgICAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgMCwgNDI1MzMsIDE2OCwgCisgICAgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgMCwgNzkxLCA5MTYyLCAKKyAgICA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCA5ODM0NDksIDc1NTcsIAorICAgIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAxMjgxMSwgNjU5MjUsIAorICAgIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCA3NDU5OSwgNzg0NDksIAorICAgIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIDc4MDgzLCAxMjg4MjQsIAorICAgIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAxMTAzOSwgODcyMywgCisgICAgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAxMTkzMDAsIDExOTI5OSwgCisgICAgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIDAsIDAsIDQxOTUyLCAwLCAKKyAgICA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIDE5OTE1LCA1Mjc3LCAKKyAgICAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIDEyNzEsIDk4MzY0MCwgMCwgCisgICAgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIDQ1NzQsIDAsIDc1NjcsIDc0NTksIAorICAgIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIDk4MzkxMiwgMCwgNDEzODgsIDY0NDQ2LCAKKyAgICA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgCisgICAgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIAorICAgIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCAKKyAgICA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCAKKyAgICA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0OSwgNDI2OSwgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCAKKyAgICA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCAKKyAgICA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIDEyODg3MCwgOTgzNzAxLCAzNjUxLCAwLCAKKyAgICAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAKKyAgICAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIAorICAgIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgCisgICAgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIDAsIDczODEyLCA2MTkwLCA4NTk5LCAKKyAgICAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIAorICAgIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCAKKyAgICA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgCisgICAgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCAKKyAgICA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgCisgICAgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIAorICAgIDUxMDQsIDk4Mzc0OSwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAKKyAgICAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIAorICAgIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCAKKyAgICA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgCisgICAgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAKKyAgICAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAKKyAgICA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCAKKyAgICA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIAorICAgIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgCisgICAgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCAKKyAgICA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCAKKyAgICA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAKKyAgICAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIAorICAgIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCAKKyAgICA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgCisgICAgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzODAzLCAwLCAKKyAgICAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIAorICAgIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgCisgICAgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgCisgICAgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCAKKyAgICA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAKKyAgICAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIAorICAgIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgCisgICAgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzgxLCAKKyAgICAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgCisgICAgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAKKyAgICAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3OSwgMCwgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgCisgICAgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIAorICAgIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgCisgICAgOTgzMzc3LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCAKKyAgICA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIAorICAgIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIDAsIDcxMzAxLCA5ODM4NjIsIDM0NzMsIDc3MTgsIDAsIDAsIAorICAgIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzkwLCAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM3MCwgODA4MCwgCisgICAgNzAwNiwgMCwgOTgzMzcxLCA2NzU3LCA2NDM1MSwgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzcyLCA2MTQ2LCAKKyAgICAwLCA3NzEsIDk4MzM3MywgMCwgMTI4MTIsIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAKKyAgICAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NzMsIDk1MjQsIDc0OTAsIDExMzg5LCAKKyAgICA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIAorICAgIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIAorICAgIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgCisgICAgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgCisgICAgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCAKKyAgICA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIAorICAgIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIAorICAgIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCAKKyAgICA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgCisgICAgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIAorICAgIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAKKyAgICAwLCAwLCA5ODM3NDEsIDEyNzE1LCA2ODAwMiwgOTgzNDc5LCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIAorICAgIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAKKyAgICAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAKKyAgICAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM4NywgMCwgNDIyNzksIAorICAgIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgOTgzMzg0LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgCisgICAgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCAKKyAgICA5ODM2OTQsIDI0NjAsIDAsIDExOTQ0LCAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgCisgICAgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIAorICAgIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIAorICAgIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgCisgICAgMTA5NDYsIDEyNzMxMCwgNTAwMCwgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCAKKyAgICA2NzA5LCAwLCA3ODg4NSwgOTgzNzA4LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIAorICAgIDAsIDczNzkxLCAwLCAwLCAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgCisgICAgMzg5MywgOTgzMjY0LCAwLCAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgCisgICAgMTI1MTYsIDQ0NDQsIDAsIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIAorICAgIDM1OTEsIDQxOTY5LCAwLCAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgCisgICAgNDE5NjIsIDMyMDIsIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgCisgICAgMTE5ODA5LCA0ODgzLCAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIAorICAgIDI0MCwgMTk5MDYsIDAsIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCAKKyAgICA5ODMzNDMsIDQzNDM3LCAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIAorICAgIDExOTAyMywgMTcyOSwgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCAKKyAgICA2NjU3OCwgNTAwMSwgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgCisgICAgNzM4ODksIDc0MTgyLCAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIAorICAgIDYzODczLCA4NDkxLCAwLCAwLCA5ODM2MjMsIDQ1MzAsIDQyNDA5LCA3MTI2LCAxOTQ1NzUsIDI3MjEsIDEyMDA3NCwgCisgICAgMTE5MDk2LCAxOTkyOSwgMCwgMTk0NTc0LCAwLCA0MjQyLCA0MjY0LCAxMjAwNzcsIDEyMDUzMCwgNjYxNzksIDQyNDEyLCAKKyAgICA2NTk0MSwgMTMxMTQsIDY0NTIyLCAxMDc0MCwgMzA5NCwgMCwgOTc1NCwgMTE5MTAyLCA0NDM3LCA3Mzk0OCwgMTI3MDc0LCAKKyAgICA5ODMyMzgsIDU1MjgwLCA0MjE3NCwgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCA0MTM4MCwgCisgICAgNjg0MzIsIDkyNTg2LCAwLCA2NjY2NywgMTI3MzA5LCAwLCAxMjY1MjEsIDQyMjAwLCA0MjU2NiwgMCwgMCwgNTA4OCwgCisgICAgNjk0OCwgMCwgODUyNCwgMCwgMCwgMTIzODUsIDAsIDAsIDY5NjQ2LCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIDY1MDM5LCAKKyAgICA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIDc3OTk5LCAKKyAgICAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIDYzODk2LCAKKyAgICAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAxMjM3NywgOTgzODMyLCA5ODM4MzQsIDY4NDQ5LCA3NDYxLCA3MzkwMSwgCisgICAgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgMCwgMTIzNzksIDE5NDg3NywgCisgICAgMTIwODE4LCA0MTk2NCwgNDIyMDgsIDYzODQzLCAyMDg0LCA0MTk2NSwgMCwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCAKKyAgICA3ODU0OSwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIDEyOTMzLCA0MzE3NywgMTIzNzMsIDY5ODU1LCAxMzAwMCwgMTM1MSwgCisgICAgMjkzNSwgODY5OCwgMTI2NjUsIDAsIDE5MzAsIDAsIDc4MjI5LCAxMjQyNywgNjY1MTQsIDY5ODU5LCAxMzAzMSwgMCwgCisgICAgNjM5MDEsIDAsIDM2NTcsIDEyODU3MiwgNjUyMDIsIDYwMDAsIDExOTIwNiwgMTI0MjYsIDEyNzE4MSwgMCwgNDE3NDAsIAorICAgIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIAorICAgIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDkyMzk3LCA2MTYyLCAwLCAKKyAgICA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgMTI0MjIsIDQxODMyLCA0MzksIDQzMDc3LCAwLCA0MjIwNywgCisgICAgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIDAsIDY3ODY0LCAKKyAgICA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIDY5ODA1LCAzNDEsIDI3MjcsIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCAKKyAgICA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIDAsIDYzODY3LCA0MTMzLCAxMTM3MSwgMjEwLCA0NjAwLCAwLCA3NDU2MCwgCisgICAgNDEzNywgODA4MiwgNzg1MDYsIDExOTA2MiwgNzg1MDQsIDY3MDQsIDQ1OTEsIDEyODAyOSwgMCwgMCwgOTY4MCwgMCwgCisgICAgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAKKyAgICAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCA5MTc3OTQsIDQyMDI1LCA3ODU2NSwgNjU4MDUsIDQyNDYzLCAwLCAKKyAgICAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIAorICAgIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCA0MjA4NiwgMTI2NjE1LCAyMjE5LCAwLCAwLCAxMjg4MDEsIDE5NDgzNywgMCwgCisgICAgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIDkxNzc3NiwgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAKKyAgICAxMjQzMSwgODY2OCwgMTI0MzQsIDk4MzgzNSwgOTE3NzgyLCA1OTk5LCAwLCA3NzEyLCAxMjQzMiwgMTI4MjQzLCA0MzY1MywgCisgICAgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgMTI4MDE0LCA0MjQyMywgMTE5MDY2LCAwLCAxMjgxMDgsIDY2NzA5LCAwLCA4ODExLCAKKyAgICA5MjcsIDAsIDAsIDEyNDM2LCA5ODMyNDUsIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgNDIzNTAsIDY1MTQzLCAwLCAKKyAgICAxOTUwMTYsIDAsIDc4MTk3LCAxMTM0OCwgMCwgNzgwMzcsIDkxOTQsIDk4MzE4NCwgMCwgMTk5MTQsIDEyMTc5LCA5ODM4MTIsIAorICAgIDIyOTYsIDE5NDkyMywgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIAorICAgIDY0NjUxLCAwLCA0MTUwMywgMTI3NDc4LCAxMTI2NSwgMCwgMTIwNzU2LCAxOTQ5MjIsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIAorICAgIDAsIDEyODUwOCwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgCisgICAgMzg4MiwgODUzMiwgOTE3NzcxLCAxNTczLCAxMjg2NDgsIDExOTg0NywgNDU5NiwgNjYzMzksIDEyNDE3LCA2NjAwMSwgCisgICAgNjUzNDMsIDEyNjQ5MSwgMTI0MTQsIDgyODcsIDY4MjE5LCAxOTUwMTcsIDY4MTA4LCAxMTQzLCAxMTkxNjksIDExOTg0NiwgCisgICAgMTI0MTUsIDY2MjYsIDQyNzYzLCAwLCAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIDEyNzEwNCwgCisgICAgMTI2NjE5LCAwLCAwLCA4MDI3LCAxMDk5NywgOTE3MSwgMTI3NDEsIDExNDAwLCA3MTMwNSwgMTk0Nzk5LCAwLCAxMjgyMzksIAorICAgIDAsIDEyODg4MSwgMTE5NjA0LCAxMjc1MjMsIDEyMDE5MCwgMTk0NzczLCA2NzYwOCwgMTI4MjE0LCA0MjM2OCwgMCwgNzcxNSwgCisgICAgMzg4MSwgNDE0ODcsIDEyMTE4LCA0MjUxNCwgNjg2NTEsIDAsIDk4Mzg5NSwgMzAwOSwgNDE0NzYsIDQxNDg5LCA2OTgyNSwgCisgICAgMzAwNywgMTQ0OCwgMzAxOCwgMTk0ODA5LCAzODg5LCA4NTIxLCA1MDgzLCA1MDgyLCAxMTk4NTksIDEyMDE4NCwgODUxOSwgCisgICAgOTgzMjQxLCAzMDE0LCA1MDgxLCA2NTg1MywgMTIwNzE1LCAwLCA2ODAxNCwgNjk5NTEsIDUwNzksIDY0ODAyLCA0MjIxMCwgCisgICAgNDU5NywgNjU1MzIsIDExODI4LCAxMjAxODUsIDEyMzcxLCAwLCA4NDA3LCAwLCAxMDgwNSwgODUxOCwgMTA3NzksIAorICAgIDEyMDE4OCwgNzEzMDMsIDk4MzkzMywgMTIzNjcsIDQyMTcwLCAwLCA5MjU1NywgNjI5LCAxOTI0LCAwLCAxMjAzNywgCisgICAgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2MzkzMywgNjk3MzUsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCAKKyAgICA2Nzk4MSwgNTA3NywgMTIwMTc0LCAxMDg4MCwgNjM5MjcsIDUwNzUsIDkxNzg4MSwgMCwgNjUwNzUsIDAsIDExMDA3LCAKKyAgICA5ODM3MDUsIDY2NjU5LCA5MjYwNywgMCwgNjY2ODQsIDAsIDM0MzQsIDQ5NTQsIDE5MDQsIDAsIDUyNjYsIDEyNjk4MCwgCisgICAgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIDYzOTIzLCAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIDE5NDkyNiwgNDYxLCAKKyAgICA5ODAzLCAwLCA0NTA0LCAxNTA1LCAwLCA2MzI1LCA1Mjc2LCA0MzAyMSwgMTIwNDg4LCAwLCA1NTIzNiwgMCwgNjY0NjEsIAorICAgIDUxNzcsIDQxMzI0LCAxMjA1NSwgODcyMiwgMCwgNDEzMjcsIDAsIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIAorICAgIDg5NDgsIDQxMzI1LCAwLCA3MjEsIDEwMTgyLCA5MTA4LCA3MTMxMSwgMCwgMTE5MTg1LCA0MjIyOSwgMTk0OTEyLCAwLCAKKyAgICA1OTk4LCAwLCA0MjM1MywgNzQ4MjUsIDAsIDEyNTg3LCA5NDEwNCwgNzg1NzEsIDAsIDcxMzI4LCAxOTQ1NjIsIDQxNTc2LCAKKyAgICA0MjIxNSwgNzg1NzAsIDExOTIwNywgMCwgODU3OCwgNTk5NSwgNzU3MywgNDE1NzUsIDc0Nzg5LCA3NDc1MiwgNjM5NDQsIAorICAgIDYzOTQ5LCA2NDc2NywgMjY3MCwgNDE2NywgMTk0Nzk2LCAxMTcyMywgMCwgNzQxMjAsIDAsIDY1MDc2LCA5MzgsIDQzNDE0LCAKKyAgICA3Mzg1NCwgMTE3MzcsIDk3MjEsIDAsIDAsIDAsIDExNzQyLCAyNDE5LCAwLCAxMTQ5MywgMTIzMzQsIDE5NDkxMywgNDE1MywgCisgICAgMTIzMDIsIDEwNzkzLCA1MjUwLCAxMjQwNywgMTE5NzgsIDQ0MDQsIDkxODksIDEyNDAxLCA0MjAwNywgNTc3NSwgNjc1OSwgCisgICAgNjU4MDYsIDQzOTk3LCAwLCA0MjAwMiwgMTI0MDQsIDk4MzU1MywgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCAKKyAgICA0OTgzLCAxMjA1MDcsIDg2MSwgMCwgMCwgMCwgMCwgNDM3NTcsIDQzMzcwLCAwLCAwLCAxMTk1NiwgMCwgMCwgMCwgOTYxNiwgCisgICAgNjYzMSwgMCwgMTI4MTYsIDQzNzU5LCA0MjIxOCwgMTI3MTAsIDY4Njc0LCAxMjcyMSwgNDEwMSwgNjYxODUsIDAsIDU5OTIsIAorICAgIDc2MTYsIDE5NTA0NCwgMCwgMTI1NzcsIDAsIDk4Mzg4NCwgODUzLCA0MjY5MywgMTk1MDE0LCAwLCA5ODM2NDcsIDUwMTYsIAorICAgIDQzNTM1LCA2Mzg5MywgNDI4MzUsIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCAKKyAgICA2NTA2MCwgMTIwNzk3LCA5OTAwLCA3NzUwLCAwLCAxOTQ5MTksIDAsIDEyNzgzMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgCisgICAgMTI4MTUxLCAxMjE3NywgMCwgMCwgMCwgNzc4MjQsIDAsIDQ5MDAsIDEyNzg3NCwgMTI4NzgsIDkyNjMwLCA4OTg0LCA0MTE5LCAKKyAgICA3NDc2OCwgODk3MSwgNzg1OTMsIDQzMTEzLCA5NzAyLCA3ODU5NCwgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCAKKyAgICA3NDE4NSwgOTI0ODEsIDkyNzEwLCAxMjM5NywgNzc4MjcsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIAorICAgIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAxNjgwLCAxMDUwNywgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIAorICAgIDcyNjcsIDAsIDc0ODMzLCAxMjgxODEsIDU5OTMsIDI4MTksIDAsIDEyNzA2LCA3Nzg0MCwgMTg5MywgNzI2NiwgNjM5MTUsIAorICAgIDcyNjQsIDcyNjUsIDAsIDEzNjMsIDAsIDYzOTk3LCA2MzkxMCwgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDY5OTI5LCAKKyAgICAxMjU4OSwgNDE0NzksIDEyODMxMywgMCwgNDMzMzksIDczNzc2LCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgCisgICAgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCAKKyAgICA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCAKKyAgICA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAKKyAgICAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIAorICAgIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgCisgICAgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAKKyAgICAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIAorICAgIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIAorICAgIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgCisgICAgOTgzNjYxLCAwLCA0MzExOSwgMCwgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgCisgICAgNzQxMTMsIDIzNDMsIDQxMDMsIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgCisgICAgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzOSwgMTI2NDUsIDUxNDYsIDExMzIwLCAKKyAgICA2ODQxMCwgNjc0OCwgNjUwNDAsIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIAorICAgIDc0NTI0LCAwLCAxOTI4LCAwLCA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgCisgICAgMCwgNzc4NjgsIDQyMDYsIDAsIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgCisgICAgNDEyNCwgNzc4NjIsIDY1ODM2LCAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAKKyAgICAxMjQwNSwgMTIwMTUwLCA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCAKKyAgICA5OTcwLCAxMjQwMiwgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIAorICAgIDEyOTY5LCAxMjA4MjQsIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAKKyAgICAxMTkxNjMsIDAsIDkwOTMsIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA4Mjk2LCAKKyAgICA2NzUwLCAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDE5NDcwMywgMTk1MDIzLCA1ODA1LCAwLCAKKyAgICA2NzI2LCAwLCA0MjE3NiwgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAyMjgwLCAwLCAxMjM3MiwgMTIwNjQyLCAKKyAgICAxMjAzMDcsIDAsIDkyMzQzLCAwLCAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAKKyAgICAxOTQ3MDEsIDEwODAzLCA0MTMyLCAxMjAzMDYsIDY4NDc0LCA5MjQ3MywgMCwgOTgzMzEzLCA3NDgzNywgMTIwMTU1LCAKKyAgICAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgNjM5NjUsIDAsIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIAorICAgIDYzOTY5LCAxMTc4MSwgNDI3MTgsIDg3ODgsIDEzNTcsIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAKKyAgICAxMjAxNzIsIDAsIDE5MzMsIDY5NjU1LCA5NTY0LCAwLCA5MjQzNSwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAKKyAgICAxODA0LCAzMzExLCA2NzYxNSwgNzAwODEsIDc4MzAyLCAxMjIyMCwgNjc2MTYsIDEyMDU5OCwgMTI3NDc1LCAwLCA2ODIwMCwgCisgICAgNjY3NSwgMTI4MTQ0LCAwLCA2NzU5MiwgMTIwNjg1LCAwLCA2NDc3MSwgMTE5OCwgOTEzMiwgMCwgNjQ2MTksIDUxMCwgCisgICAgNjQ2NjMsIDAsIDAsIDQ1NjEsIDIxMDEsIDEzOTgsIDAsIDkyNTU0LCA3NDAzNCwgNDE1NjksIDkyNjg0LCAxMTQwNiwgCisgICAgODE2NywgMTIxMjcsIDAsIDg0MCwgMCwgMTI2NTE4LCA3MTAxLCA2OTY3LCAwLCAxOTQ4OTgsIDk3OTYsIDAsIDMzMywgCisgICAgNjk4OTEsIDAsIDgxNDQsIDIxMTcsIDAsIDk4MzU5NSwgMTI0MDYsIDAsIDE5OTMxLCAxMTkwODksIDY2NzgsIDc3NjksIDAsIAorICAgIDEyNjIxLCAwLCAxMjczNjYsIDEwMjI3LCA0NzY0LCA0MzEwMSwgOTk4MSwgMCwgNDA5ODYsIDQxMjcsIDY2NDg3LCAwLCAKKyAgICA0MjIwMiwgMTI3NTQsIDE5NTAyMiwgMCwgMCwgOTQwOTcsIDY3NTk0LCAyMDQ4LCAxMjk0NCwgNDA1MCwgNjc1OTUsIAorICAgIDkxNzk2NywgNDMxMDIsIDEwNTgxLCAxMjk4NSwgNDUzMywgMTk1MDIxLCA3NDAwMywgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIAorICAgIDEyMDcwNCwgNjU0NjEsIDk3OTgsIDY5NzA0LCAwLCAxOTQ4LCA2OTg0MSwgMCwgOTUyLCAxMjgyMzUsIDAsIDAsIDEyMDgwMiwgCisgICAgNjQ0OSwgOTQ5NCwgMTIwMzEzLCAwLCA0MzA5OCwgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAKKyAgICAxMTk5NzMsIDAsIDEyODE3LCA2NzU5NywgNjY3NiwgMzkzMCwgNDI2MTUsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgCisgICAgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAwLCA4NTAwLCA0MjIyMiwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAKKyAgICAxMTU0MywgNjc2NzYsIDY0Njc2LCAwLCAwLCA2NzYwNiwgMTE5MDgzLCAwLCA0MjIxNywgMTMxMDIsIDAsIDY2MDAzLCAKKyAgICA2NjcyLCAwLCAwLCAwLCA5ODM3NDcsIDYzODQxLCA5NjEzLCA5MDAxLCA0NTI2LCAxMTI3NCwgNjc2MDEsIDY0NTIwLCAKKyAgICA2NDIxMCwgNjY2NCwgNzg3MDQsIDQyMDU2LCAxMDIyOCwgNjQ5NTcsIDExMjgxLCAwLCAzODA3LCAxNDY5LCA2NjY0MCwgCisgICAgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgOTA0LCAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCA4NDUzLCAKKyAgICA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDEyNzkxNiwgMCwgMTA1MjAsIDg1NzUsIDk5NjAsIDEyMDEsIDEyNzI4OSwgMTI4NDYsIAorICAgIDEyNzI5MSwgMTI3MjkyLCAxMTkxOSwgNjQ5NjIsIDEyNzI4NywgNDM3MzksIDEyNzI4MSwgODUxMSwgOTQ2MCwgODIzLCAKKyAgICAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAxMjczMDUsIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgNDI3ODMsIAorICAgIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgCisgICAgOTgyMSwgNjQzMDQsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCA2ODM2NiwgNjQ0MTAsIDkyMzA1LCAwLCA0MzIzLCAxMjAwNjIsIAorICAgIDkyNjY5LCA3MTMzMiwgMTI3MDUyLCA0MjU4NywgNDIyMTQsIDQxMzk0LCAwLCA0NzYzLCA0MTEyLCAxMTg5MzUsIDAsIAorICAgIDUyNjAsIDQzMTQzLCA5NDAzOCwgMzI2LCAxMjAxMzEsIDY4NDIzLCAwLCAxMDc3MSwgMjg3NiwgNzQwNzQsIDkyNTMwLCAKKyAgICAxOTQ5MjQsIDQxMzk4LCA3MzgyLCA5ODAyLCAxMjcwNzcsIDEyNzA3NiwgNDUzLCA0MTM5NiwgMTIwNTI0LCA0MjcyMCwgCisgICAgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIDEyNjQ5MCwgMTk0ODg1LCA0MzE0NCwgNDEyMywgCisgICAgODQ5NCwgNDMxNDYsIDk5NzcsIDAsIDAsIDY1NzU5LCAxMDc2NSwgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgCisgICAgNDEyNiwgMCwgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIDY0MDIwLCAxMjY2MDQsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAKKyAgICAxMTUyOCwgNjQwMjQsIDEyODA3MiwgNjc5LCA2NDAxMywgMCwgNTg1MCwgNzU4LCA3NTM2LCAwLCA5MjIzNCwgNDE0NDEsIAorICAgIDEwNjkzLCA2NDAwNiwgOTgzNTY3LCA2NDAwNSwgNDA1OCwgMTE5MDE5LCAxMjY0ODcsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIAorICAgIDk4MzA2OSwgMTEzOSwgNDMyOTgsIDY0MDI3LCA2NDAyOSwgODk3MCwgMCwgOTkzNCwgOTgzMDk0LCAxMDc3NCwgMTI4MDIwLCAKKyAgICA0MjIwMSwgMTI0MjEsIDEyODIxNiwgMCwgMTg1MiwgMzA1NywgNjQwNDYsIDczNzQ0LCA2NDAzNCwgNjQwMzksIDAsIDAsIDAsIAorICAgIDE5NDg5OSwgOTIzMjIsIDc2NDUsIDEyODU0LCA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgOTEwMiwgNjI3LCAxMjc3OTUsIAorICAgIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIDEzMzA5LCAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIAorICAgIDEwMTgsIDExODk3MCwgMTk0OTA5LCAxOTQ4OTcsIDE2ODIsIDE5NDg5NiwgMTk0OTExLCA0Mjc1NiwgNjc2NSwgMTk0OTA2LCAKKyAgICAwLCAwLCA3MzgxNCwgMTE0MTIsIDY3NjgsIDEwNzI4LCAxOTQ4MzAsIDcxMzE2LCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgCisgICAgMTE1NzcsIDAsIDQzMDQwLCAxODMzLCAxMTU3NiwgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgCisgICAgMTk0ODQ4LCA3NTM1LCA4MDg1LCA0MjUyNSwgMTIwMzg3LCA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgCisgICAgMTIwNDg5LCAxOTQ3MTEsIDY0NDgzLCA2NTY5MywgMCwgMCwgMCwgNjk2OTUsIDQyMjQwLCAwLCAxMjY2NTEsIDQyODY0LCAKKyAgICAxMjY0OTgsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAxMTQ4NCwgMTI3NTM1LCA2Nzg0MCwgOTgzNjUxLCAwLCAKKyAgICA2NjE5NywgMCwgMTA5ODYsIDY0NjgzLCA5ODM3ODUsIDAsIDM0NTUsIDAsIDAsIDk4NzksIDAsIDAsIDQxNTgsIDEyODA1MCwgCisgICAgNjgxNjYsIDAsIDAsIDAsIDAsIDY5NjQ1LCAzMzIsIDExODgwOCwgMCwgNTE0MiwgMjQwNywgNjk2NDMsIDQyMTk5LCAwLCAKKyAgICA5MjQwNCwgNzQzNzMsIDAsIDU1MjE3LCAwLCA2Mzg3MCwgNDMxNjMsIDAsIDAsIDkyMzkwLCA0Mjg2NywgMTgzNCwgMCwgCisgICAgOTI0NjEsIDY5ODE3LCAxMDk0MCwgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgMjY1MiwgMTIwNTI3LCA3MTY0LCAKKyAgICAxMDc4NCwgMTk1MDkzLCA2NzY3NCwgMCwgOTIyMzMsIDkyNDgyLCAxOTQ3NDksIDc0NTYyLCA5MTc1MDUsIDE4MjgsIAorICAgIDc0NDc0LCAxMjAzMjcsIDc4NjIwLCA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIDExODg1NCwgNjUyMzgsIDY4Mzc0LCAKKyAgICA0ODMyLCA2NTU3MywgMCwgNjI3OSwgMTI1MDgsIDEyOTA0LCAxMjUwMiwgOTE2MSwgMCwgMTYyMCwgNjQ0MzYsIDM2MDEsIAorICAgIDE5NTA5NCwgMTI4MDczLCA5ODM1NjIsIDYwOSwgMTE1NTUsIDk4MzA5OSwgMTI0OTYsIDEyNzgzOSwgNzQxODEsIDQzNDMsIAorICAgIDEyNTA1LCAwLCAxMjc4NjMsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDI2NzEsIDAsIDAsIDAsIDQzNTY1LCAKKyAgICA3MTMwNiwgMTI2NDkzLCAxMjY5NiwgMTI4MjU2LCAwLCA5NDA2MiwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgOTgzMjA2LCAKKyAgICA0MjgxOCwgMTI2NjMyLCAwLCAxMjA0OTAsIDAsIDExOTEzNywgMTUwNiwgNDM1NjIsIDAsIDkyNDkxLCAwLCAxMjY1MSwgMCwgCisgICAgNjQ2MjgsIDc0NTE3LCAxMjA1OCwgNzQwODQsIDkxNzgzOCwgNzQ5NCwgMCwgNDkyNCwgNjU1OTIsIDExODg0NCwgMCwgCisgICAgMTI3MDg4LCAzNTUsIDk3MTksIDEyNzA4NywgMTMwNjYsIDY0Nzk2LCAwLCAwLCAxMjAzMywgNDIxNzgsIDAsIDY5NzYwLCAKKyAgICA0MjU3MSwgOTI2MzUsIDAsIDAsIDAsIDAsIDAsIDEyNzE3NiwgMzE3OCwgMCwgMCwgOTI3MDQsIDAsIDkwODAsIDEyNzAwMCwgCisgICAgMTIwMzUyLCAwLCA2ODIwOSwgMCwgMTEwODIsIDAsIDU2OTksIDE5NTEwMCwgNjYwMDAsIDk0ODgsIDY1MTY2LCAxMTkxMTIsIAorICAgIDAsIDAsIDAsIDAsIDcxMzEzLCAwLCA1MjY1LCA2OTIzNSwgMCwgMTE0ODcsIDY3ODU4LCAxMjQ2NCwgMCwgNDMwNDUsIDAsIAorICAgIDAsIDQzMzQ1LCAwLCAxMDc3MCwgMTE4OTk0LCA2ODA3LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCA0MzM0NiwgODExNiwgCisgICAgNzk1LCAwLCAwLCAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCA3NDMzNCwgOTgzNjAyLCAxMjA4MTEsIAorICAgIDAsIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAxMDA5MiwgMTk1MDc4LCA5MTc4NDIsIDY3ODU1LCA1NTI1NywgNzM3NzEsIAorICAgIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDEyODY2NSwgNjQ1OTUsIDEyNzI5NCwgCisgICAgMCwgOTIzMTEsIDQzNDUsIDEyNjE2LCAwLCAwLCAwLCA3NDQ2NywgMCwgMCwgMCwgNTM4MiwgMCwgMCwgMCwgMTE5MDYwLCAKKyAgICA2NDk1MywgNTQwNiwgMTk5MjAsIDY5ODk3LCA2NjUxMCwgMzU5MCwgMTk0ODY0LCAxMTMwLCAwLCAwLCA0MjAxNiwgMTE4MjMsIAorICAgIDQzMDIzLCAwLCAxMTg4OTYsIDc3NDIsIDAsIDEzMjgwLCA3MTMyMywgOTMyNiwgNzM4MjYsIDUzMTAsIDc0ODEyLCA3ODU4NCwgCisgICAgOTIyMjksIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgMTIwODAzLCAKKyAgICA5ODM4NDgsIDQyNjcwLCAwLCAxMTYyMSwgMTI0NjAsIDAsIDEyMDYzMSwgMCwgNDMwNjMsIDc0NTE5LCAxMjcxODIsIDAsIAorICAgIDczOTE3LCA3ODQzLCA2OTc4MywgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAxMTU5NCwgMTI4MjQ3LCAKKyAgICAwLCAxMTg5OTAsIDEwNDkxLCA2OTg0MiwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgODI2OCwgNDkyMywgCisgICAgNjUwODYsIDg5ODEsIDEyMzgyLCA0MjEzMywgMTIwNzU1LCA5NzA2LCA2OTczOCwgMCwgNjY2MTAsIDEwNDYxLCAxMjEwMywgCisgICAgMCwgODY0MiwgMCwgNDI3NjYsIDk4Mzg2NiwgMjIxMCwgOTk4MywgMCwgOTQwMDksIDAsIDAsIDAsIDczOTgsIDQxNTE1LCAwLCAKKyAgICAxMTgwMiwgODA0MSwgMTQ2MSwgOTEwLCAxMTkxMzMsIDAsIDY3NDksIDM2NTgsIDkzOTY0LCAxMjA1MjUsIDAsIDc2MTcsIAorICAgIDE5NDg0MSwgMTI4ODgsIDEyNzk4MywgNjc2NjgsIDEzMTQzLCAwLCA5MTkzLCAxMTA5NywgNTcwMywgMCwgNDE1MTcsIAorICAgIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAwLCA2NTg2NCwgNjIzLCA3ODEsIDY3MCwgMTA2NjAsIDU3NjksIDYxMywgCisgICAgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCA5MjUyMSwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgNDM0NDksIDAsIDAsIDgyMjUsIAorICAgIDAsIDY1NCwgMTEzNDUsIDY1MywgNjUyLCAwLCA2NDcsIDAsIDYzMywgMTIwNzQ0LCAwLCAxMjY0NzIsIDEyNDgwLCA0MzI0MywgCisgICAgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDk4MzU1NCwgCisgICAgNzg5NywgMCwgMTIwMywgNzQzOTYsIDE4MTMsIDY0NTQ0LCA0MTMxMSwgMTIwOTAsIDAsIDI4NzcsIDAsIDAsIDE2NzUsIAorICAgIDY5ODQwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMTk0Nzc3LCA5ODM2MTEsIDAsIDAsIDAsIDQzMjQ0LCAKKyAgICAwLCAwLCA5ODM5MTYsIDExOTU2MSwgOTgzMDc4LCAwLCAxOTQ5MjEsIDEyODE2MCwgOTkzOSwgMCwgOTgzMTUxLCA3Nzg2MCwgCisgICAgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIDc0MDM4LCAxMTk1NTgsIDYyNzMsIDY2Njc5LCAKKyAgICAzNjQsIDk1OTUsIDE5NDkwOCwgMCwgMCwgNzA3LCAwLCAwLCA5MjgyLCA2NjQ4OSwgMjI0LCAwLCA2ODY3MCwgOTMzMiwgCisgICAgNDk2NiwgNjg2NzcsIDAsIDY4NjQ0LCAwLCAzODQxLCA2ODYzNCwgMCwgMTA3MzIsIDY4NjQwLCA4NTAsIDQ5NzIsIDAsIAorICAgIDEyODkwLCAyOTA5LCA2ODYxOSwgNDQwMDgsIDY4NjI3LCA5ODM3MTgsIDExNTQ0LCAxMDIwMywgOTYwOCwgMCwgMCwgCisgICAgMTE5NjIsIDE5NDY5NCwgMTI1MDcsIDExOTYsIDEyODY4NywgMTI4MzExLCA3NzcsIDEyMDE4NywgNDM3NSwgNjUyNzEsIAorICAgIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDExOTM0MywgOTgzMjM2LCA5NDU0LCA2Mzc3OCwgODY1OCwgNDI1MjgsIAorICAgIDc4MDAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgNDI1MDIsIDgyODAsIDc0NTIwLCAyNzAxLCAKKyAgICAwLCAxMjcwMDIsIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCA2NjcwMSwgNjM3NzIsIDk4MzgxNCwgNjM3NDUsIAorICAgIDE3NDgsIDYzNzcwLCAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDU1MjQ0LCAzMDYxLCAwLCA2Mzc2NCwgNjM3ODcsIDkwNjcsIAorICAgIDYwOTYsIDAsIDc2OTQsIDAsIDcyNTcsIDYzNzY4LCAzNDg1LCAxMjk4NywgMCwgMTI3NTIyLCAxMjA2MjgsIDYzODA3LCAKKyAgICAxNTkxLCAwLCA2Mzg2LCA2Mzc4MywgMCwgMCwgOTI1MzUsIDAsIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIAorICAgIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAzMTM4LCAxMDk5NiwgOTIyNDcsIDE5MjIsIDAsIAorICAgIDEyNDk4LCAxMDk4NywgNjk5MzYsIDY5OTM5LCAzODk0LCA2NTU0MywgMCwgMTk0ODQyLCA5ODM1ODgsIDQ5MywgMCwgCisgICAgNDMxOTcsIDE3MTcsIDQyMjgsIDQ3OSwgMTAzMDMsIDc0MDIwLCAwLCA5MTc5MzUsIDEwMzM1LCAzNTIwLCA5MTc5MzIsIAorICAgIDEyNDkwLCA2NDMxNSwgMCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNDI2ODEsIDEwMDIsIDEyNDkxLCAwLCA2NDkxMSwgCisgICAgOTI2MTUsIDIwOTYsIDY1MTIwLCAwLCA3ODIxOSwgOTgzMDgxLCA4Mzc4LCAxMTYzMiwgMTI3MDQxLCA2NjIxMywgNjM4NjQsIAorICAgIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIDY2MjM2LCA2NjIxMSwgNjYyMTgsIAorICAgIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCA5ODM1NTIsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIAorICAgIDk4MzY1NCwgNjYyMDgsIDczOTk5LCA2Mzc5OSwgNjM4MDMsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIAorICAgIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAxMzA0MCwgMCwgODYxMiwgNDg4NSwgCisgICAgNzQwNTMsIDAsIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCAKKyAgICA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCA3ODA0MCwgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCAKKyAgICA3MDAyOCwgNzgwMzQsIDQ1NzksIDEyODA5MCwgMCwgMTI1MTEsIDc0NDUzLCAxMjUxNCwgMCwgNzQ1NzksIDcyMzksIDcwMDEsIAorICAgIDg2MjMsIDk0MDExLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIAorICAgIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgCisgICAgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCA5ODM5MjAsIDAsIDAsIDIzMjMsIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIAorICAgIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMTI3MjgwLCAwLCAwLCAyMzA5LCAxMzEyLCA4MTczLCAxMjg4NzEsIDEyNDY5LCAKKyAgICAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAxMjgxMTEsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCAKKyAgICA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAwLCAKKyAgICA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAyMzEzLCAxMjgxNjcsIDc5NDgsIDkyMzYsIAorICAgIDkyNTcxLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgMTIwODIsIDEwOTI0LCAzMTQ3LCAKKyAgICAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCA5MzgyLCA5Mzc5LCA5MzgwLCA5Mzc3LCAKKyAgICA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NzgsIDkzNzIsIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgCisgICAgOTgzOTU4LCA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIDg3NDQsIDcyNiwgMCwgOTgzODM3LCA0MTU1LCAwLCAKKyAgICAwLCA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIAorICAgIDk4Mzg0MSwgMTI1MjUsIDk4MzQ3MSwgMTIwMTYsIDY1NzcwLCA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIAorICAgIDAsIDExMDMwLCAwLCA5MjU2NywgNjU2OTEsIDYzOTk4LCAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAxOTQ2NjgsIAorICAgIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgCisgICAgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAKKyAgICAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgCisgICAgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMTI2NTE0LCA4NTQ2LCAxMTU1MywgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCAKKyAgICA5ODM5NDcsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIAorICAgIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIAorICAgIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgCisgICAgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIAorICAgIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCA5NjA3LCAwLCA5NjYzLCA5ODMyMjgsIDExOTYzNCwgNjUwMywgCisgICAgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIAorICAgIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgCisgICAgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODMzLCAKKyAgICA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgCisgICAgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIAorICAgIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgCisgICAgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIDk4MzY0NSwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAKKyAgICAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIAorICAgIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCAKKyAgICA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCAKKyAgICA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIAorICAgIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIAorICAgIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIAorICAgIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgMTM0MywgOTgzODIzLCAwLCA5MzI1LCA2ODE4LCAKKyAgICA2MjgzLCAxMTczOCwgMCwgOTgzOTM0LCAwLCAxMTc0MSwgMCwgMCwgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgCisgICAgOTgzODI1LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCAKKyAgICA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgCisgICAgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzgwLCAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIAorICAgIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgCisgICAgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIAorICAgIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIAorICAgIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIAorICAgIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIAorICAgIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgCisgICAgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAKKyAgICAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3OTEsIAorICAgIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCAKKyAgICA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgCisgICAgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgCisgICAgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAwLCAzMTE1LCA5OTE4LCAwLCA4Mjk0LCAKKyAgICA0MjkxMiwgMCwgMCwgMTk0NzI2LCA0ODc2LCA2NTgwNCwgMCwgMCwgNDM0NjgsIDk4MzI3NCwgNDE1NTgsIDQxNDcxLCAKKyAgICA3Mzk1MCwgODE1OCwgOTk0NCwgNDE0NzIsIDEyMDI5OCwgMTMwNTEsIDc4Njg5LCAzMTQzLCAxOTQ2NzQsIDY3MDEsIAorICAgIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgMCwgMTE5MDcxLCA3MDI1LCA2Mzk3NCwgMCwgCisgICAgNzQzNTIsIDc0MTYxLCA0MTU0LCA5ODYzLCA0MzU1MCwgMTIzMTAsIDU2NjIsIDQyMzgyLCAxNTY0LCA3MzkyNCwgMTEyMSwgCisgICAgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgCisgICAgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIAorICAgIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCA2Mzk3OCwgMTEwNDQsIDMyMjksIAorICAgIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCA2MTM3LCAwLCA3NTI0LCAwLCAKKyAgICA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCA5OTAzLCA2NDcyMSwgNDI3MjIsIAorICAgIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIDUzMTEsIDE3OTUsIDk2NSwgCisgICAgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgMTk0NjQxLCAxMTkzNDEsIAorICAgIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAwLCA5ODM5NjAsIDc0OCwgCisgICAgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAyNDc1LCAxMjM4OCwgNDg4OSwgCisgICAgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIDE5NDYzNSwgNDg5MCwgCisgICAgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgNzgwNDgsIDc4MDQ5LCAKKyAgICA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCA2NDc0NiwgMjMzMiwgCisgICAgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCA3ODA2NiwgMTIyMDMsIAorICAgIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgMTE4ODg4LCA5MzQ0LCAKKyAgICA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgMCwgMzEzNCwgMCwgCisgICAgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCA3ODQxNCwgNzg0MTMsIAorICAgIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIDEyNzAxNCwgMCwgMTI3OTE0LCAKKyAgICA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgNzgwNTQsIDQ5MTcsIDc0NTE2LCAKKyAgICA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCA3ODA3MiwgNzgwNzMsIAorICAgIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAxMDk2MCwgNDA5NjIsIAorICAgIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NjQsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIDk4MzA0OCwgCisgICAgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCA3Njk4LCA1NjU4LCAKKyAgICA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1OSwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIDEyNzI4LCA5MjY4NSwgCisgICAgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCA2MTUzLCAyODY3LCAKKyAgICAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgNjUxLCAxMjY0MSwgMCwgCisgICAgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCA3ODQ2MSwgMTk0Njk3LCAKKyAgICA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgMTk0NzAwLCA1NTI2NCwgCisgICAgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0OTUsIDEwMTAxLCAwLCA3MDA0OSwgODQ3OSwgNDE1MSwgCisgICAgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCA3NDA1MCwgOTI3MDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIDAsIDI2OTksIDAsIDczODQ1LCAKKyAgICAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgOTgyNywgMTE5MzEwLCAKKyAgICAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAzNSwgNzg0ODEsIAorICAgIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAxMDUzNCwgMCwgCisgICAgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCA3ODQ4NywgNDMzMDYsIAorICAgIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgNDE4OSwgOTQxMDgsIAorICAgIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIDAsIDkxNzgyNywgCisgICAgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIDEyNTc4LCAKKyAgICAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAxMTg4NTAsIAorICAgIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCA5NjMyLCAKKyAgICA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCA3MTMyNSwgMCwgCisgICAgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgMTI3MzAsIAorICAgIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAxMjgxNjgsIAorICAgIDk4MzI2OCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAxMjcxNDcsIAorICAgIDk1ODUsIDUzNzQsIDk4MzI2NywgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIDEyMDYxNCwgMTkyOSwgCisgICAgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIDUzNzgsIDc4NzkxLCAKKyAgICAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCA1ODAwLCAxMjAxNTcsIAorICAgIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAxMTg1LCAwLCA3ODc3MCwgCisgICAgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIDEwOTQyLCA3NzEzLCAyMzQ4LCAKKyAgICAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgODYyLCA2NTYyNiwgNzg0NjIsIAorICAgIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgCisgICAgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgNDIyNjAsIDU4NzEsIDExOTA3NSwgCisgICAgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgCisgICAgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAKKyAgICAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIAorICAgIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgOTgzNzYzLCAxNTg0LCA2NjY0NSwgCisgICAgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAxMTM3MCwgMCwgMTAzMzAsIDAsIAorICAgIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCA3Nzk1MCwgMTk0NTc4LCA3MDc0LCAKKyAgICA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAwLCAwLCA0MjExLCAxMjU5LCAKKyAgICA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgCisgICAgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAKKyAgICAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NTIsIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgCisgICAgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAKKyAgICAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAKKyAgICAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCA0MTkwNSwgMCwgMCwgMTA3NzUsIAorICAgIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIDY0NTI5LCA0MTQwOCwgNDI4NTMsIAorICAgIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc3NiwgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgCisgICAgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCAKKyAgICA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5OSwgNDMyODYsIDAsIDEyODIxMSwgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgCisgICAgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAKKyAgICAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCA0MjIzMywgNjQxNDAsIDk5NDYsIAorICAgIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODk4LCAwLCAxNzg4LCAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAKKyAgICAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIAorICAgIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCA0Mzc1NCwgMzM5NiwgMTI2NDIsIAorICAgIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgCisgICAgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgMjE0MiwgNjg0NTQsIDQyNDg1LCAKKyAgICA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAxMjAzMiwgMCwgOTcyNSwgMCwgCisgICAgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIDQyNzc3LCAxMDEzOSwgOTgwLCAKKyAgICA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIAorICAgIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCAKKyAgICA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIAorICAgIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgCisgICAgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCAKKyAgICA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgCisgICAgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgCisgICAgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCAKKyAgICA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCAKKyAgICA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCAKKyAgICA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIAorICAgIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAKKyAgICAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAKKyAgICAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyNDIsIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCAKKyAgICA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCAKKyAgICA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgCisgICAgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAKKyAgICAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIAorICAgIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM4MDAsIDQzMjgxLCAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIAorICAgIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgCisgICAgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgNDI1NjEsIDEyMDYyNiwgOTgzMjUxLCAwLCA4MTIwLCAKKyAgICAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIAorICAgIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY3MSwgCisgICAgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIAorICAgIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIAorICAgIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCAKKyAgICA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAKKyAgICAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAKKyAgICAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCAKKyAgICA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgCisgICAgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgCisgICAgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCAKKyAgICA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIAorICAgIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIAorICAgIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgCisgICAgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIAorICAgIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCAKKyAgICA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIAorICAgIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgCisgICAgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCAKKyAgICA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCA3Mzg5OCwgMTE5NzksIDcwMDUxLCAKKyAgICAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIDc0MjI3LCAwLCA2NTMwNCwgCisgICAgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgNDI5MTYsIDAsIDAsIDAsIDcyODIsIAorICAgIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgCisgICAgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzI0NCwgNjUzMTIsIDU0NDcsIDAsIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgCisgICAgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgCisgICAgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAKKyAgICAxMjE1NSwgOTgzNjc0LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIAorICAgIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgCisgICAgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAKKyAgICAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAxMjg1NTUsIDAsIDAsIDE1NzEsIAorICAgIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCA5ODM5NDQsIDAsIDc4MTIwLCAKKyAgICA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgNjUxMjEsIDEwODYyLCAKKyAgICA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIDExNTMyLCA3NDA3MywgCisgICAgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgMTE0MjgsIDE3MzAsIDI0NTcsIAorICAgIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCA5MjIzMCwgMCwgNjEyOSwgMCwgCisgICAgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIDcwMTAyLCA2Mzg4NiwgCisgICAgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAwLCAwLCAwLCA1MjQwLCAKKyAgICA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzUxLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIDk1MDEsIDAsIDEyNzIsIAorICAgIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgMCwgOTE3ODEyLCAwLCAKKyAgICAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNTMsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIDAsIDAsIDAsIDUyNzUsIAorICAgIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgNjYzMzIsIDY2NjAzLCAKKyAgICAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTExLCA5NTM3LCAzOTYxLCAxMjExNSwgNzc5NTMsIDI2MDUsIDQ1MDAsIAorICAgIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIDQyMzYyLCA2NDY4NiwgNDQ5OSwgCisgICAgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIAorICAgIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCA4Mjk5LCA0MTk0NSwgNzEzMiwgCisgICAgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIDQxNjk5LCAxMDc2MiwgNDM3ODAsIAorICAgIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAxMDM5NSwgOTgzNTkxLCA0MzYzMywgCisgICAgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIDQyNzU1LCA3NDgwMiwgOTIyNywgCisgICAgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCA2ODgsIDQxODQ3LCA2OTAsIAorICAgIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgOTE3OTEyLCA2NTg2MCwgCisgICAgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCA5MjUwNSwgMTA4NzksIDEwMzQ3LCAKKyAgICA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIAorICAgIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIAorICAgIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgCisgICAgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgCisgICAgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgCisgICAgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAKKyAgICAxMjUzMywgOTgzODc5LCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIDAsIDY3OTc0LCAxMTk4MCwgCisgICAgMTI4NjUwLCA5ODM4MDEsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIDg4NTAsIDc0Mjc1LCA5MjM4LCAKKyAgICAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgNzM3MzIsIDEyNzkzLCAKKyAgICAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAxMjc5MiwgNDIyMzIsIAorICAgIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2OSwgNDEzOTksIDAsIDAsIDU1MjU4LCAwLCAKKyAgICAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAyNzgsIDAsIDQxNDA1LCAKKyAgICAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCA0MzU1MywgMCwgNjc5MDMsIDAsIAorICAgIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCAKKyAgICA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAxMDA0NCwgMTI4MzIyLCAwLCAwLCAKKyAgICA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIDEwMjk3LCAwLCAzNzQyLCAwLCAKKyAgICAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgNDM3NTgsIDQxODIsIDc4MTcxLCAKKyAgICA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgCisgICAgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgCisgICAgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAxMjgyMzYsIDAsIDEyMDQ3MiwgCisgICAgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCA2Mjc4LCAwLCA1NTE1LCAwLCAwLCAKKyAgICA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIAorICAgIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAxOTAyLCA2Nzg4NywgOTYzOCwgCisgICAgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCA3MzYxLCA2NjY3LCA2Nzg3NCwgCisgICAgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIDkxNzk2NiwgNDMyNiwgCisgICAgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgNzgxNjIsIDAsIDYxNDgsIAorICAgIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgCisgICAgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgOTgzNzI5LCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAKKyAgICAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgCisgICAgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgMTIxMzEsIDk4MzcyMiwgOTQ5MywgOTgzOTY4LCAKKyAgICA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAxMDY1MywgNDI3MjMsIDk4Mzg1NCwgMTE5NjMyLCAwLCAKKyAgICA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCAKKyAgICA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIAorICAgIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAKKyAgICAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIAorICAgIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgCisgICAgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgCisgICAgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIAorICAgIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIAorICAgIDExODc5OSwgOTgzMjE5LCAxMDkyNywgMTcwMSwgOTgzNjY0LCAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIAorICAgIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIAorICAgIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgCisgICAgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgCisgICAgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgCisgICAgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgNDIzODUsIDEwMzA2LCAxMDM3MCwgCisgICAgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgOTI2NzEsIDk4MzI1MCwgMTE4ODc4LCAKKyAgICAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCA3ODE4OCwgNDg5MiwgNzQwMTYsIAorICAgIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgMjA3OSwgNjUyNDgsIDEyNzg4LCAKKyAgICA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCA2NTc1NCwgNDM1NjAsIDEyMjI2LCAKKyAgICA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCA0MzYxOCwgNjU3NDcsIDEwOTM3LCAKKyAgICAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIDQyNzE0LCA5OTUxLCA0MzQwOSwgCisgICAgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCA0MTgyMCwgMjMwMCwgMjM5NSwgCisgICAgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCA0MjgwOSwgNDI4MDcsIDAsIAorICAgIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAyMzYwLCA0MTc5NCwgCisgICAgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIDYzODIzLCAKKyAgICAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgNTUyODQsIAorICAgIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjIwLCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIDc3ODcyLCAKKyAgICA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgMTAyODgsIAorICAgIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCA3NDE0NSwgCisgICAgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgNDg2MiwgCisgICAgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgOTIyNTMsIAorICAgIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgNDI3MjQsIDAsIAorICAgIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzOTA4LCAxMjAxNjMsIDY1MjgsIAorICAgIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCA3ODE2NywgCisgICAgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCA3MzkwMiwgCisgICAgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCA3NDQ0MSwgCisgICAgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAxMjgwMTEsIDAsIAorICAgIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyOCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIDY2Njc0LCAKKyAgICA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCA2NDc1LCAwLCAKKyAgICAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgOTE3OTQ1LCAKKyAgICAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAxMjg1NTcsIAorICAgIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgMjAzNiwgOTg2LCAKKyAgICAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgNjQzMzQsIAorICAgIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIDEyMDQxMCwgCisgICAgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgNjU1MTQsIAorICAgIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCA0MzM3NSwgCisgICAgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTEwLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAorICAgIDk4MzM2MSwgNzQyOTQsIDk4MzkxNCwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCiAgICAgMjc1MSwgMTI2NjIsIDI3NjMsIDg5NTMsIDY0NzAxLCAxMDczMSwgMTI5MjIsIDcwNTIsIDkxNzgzOSwgMCwgMCwgMCwgCiAgICAgNjM5MjAsIDc0MTI4LCAyODU2LCAxMTk5MTAsIDQ3LCA2OTkwOCwgMTI2OTg2LCA2NTg1OCwgMCwgMCwgMCwgNzg5OSwgMCwgCiAgICAgODQxNywgNDM3OTgsIDcwNzIsIDAsIDAsIDQwMzMsIDEyODE2NCwgNDM5OTIsIDAsIDAsIDIxMiwgNjQ2MDAsIDE5MDMsIApAQCAtMTc3OTcsMjMgKzE3ODE2LDIzIEBACiAgICAgMTI2MjQsIDAsIDE2NzMsIDQ4MTEsIDkyMzgzLCA1OTg2LCA5MzM4LCAzMDQ2LCA3NDQ4MCwgNTk4NSwgOTE3OTI4LCAKICAgICAxMTk1OTgsIDk4MjAsIDAsIDEyMTg3LCAwLCAwLCA1OTg0LCAwLCA0MzMwOCwgNDM5MywgNjc2NTAsIDAsIDAsIDAsIDAsIAogICAgIDc0ODI2LCA2NDczMywgMCwgMCwgMzQ5MSwgMCwgMCwgMTI4MjE5LCAzNTE0LCA2NTQ4NSwgMCwgNzQ5MiwgMCwgNzQ2MDUsIAotICAgIDkyNDgzLCA3NTE0LCA5ODMzNTksIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKKyAgICA5MjQ4MywgNzUxNCwgOTgzMzY3LCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgCiAgICAgMjE5LCAwLCAwLCA2OTIsIDQzNTg4LCA3NDQzMywgNDE2MzUsIDQzMjQxLCA5Njg4LCA3MTQ3LCA5NTM1LCAwLCA5Mzk5MSwgCiAgICAgMCwgNjQ1MzAsIDAsIDY0NjEwLCAxMTgwNCwgMCwgNzE0OSwgNzQ1MywgMCwgODAxMywgMCwgOTIzMDEsIDAsIDg4OTUsIAogICAgIDUyNTMsIDcwMDI1LCA1NDU4LCAwLCAyODY2LCAwLCAxMjc4NjAsIDY1MTExLCA2ODQzMywgNjcwMCwgMTIwNDg0LCAwLCAKLSAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjY4LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCi0gICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY3OCwgMjg0NCwgOTgzOTMyLCA0MTk3NCwgMCwgCi0gICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIyNywgCisgICAgMTIwNTgzLCAwLCA4OTYyLCA3Nzk2MCwgOTY0MSwgNDM2OTQsIDcwNTksIDk4MzY3NywgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIAorICAgIDYzODI2LCA2Nzk3MCwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCA5ODM2ODcsIDI4NDQsIDk4Mzk0MSwgNDE5NzQsIDAsIAorICAgIDEyMTM5LCA2Nzk3MSwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIDMxMDQsIDE5NDczNCwgMCwgMTk0NzY1LCA5ODMyMzMsIAogICAgIDUzMDgsIDAsIDI5MCwgMCwgMCwgMjg2MiwgMjc5MiwgMTk1MDg4LCA5ODMwNzAsIDAsIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCAKICAgICA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAxODE0LCAwLCAxMDI0MCwgOTIzMzgsIDc0MzA1LCAwLCA3NDUyOCwgNjU5MDMsIAogICAgIDAsIDQyNjQ2LCA3NjA2LCAyNTkxLCAyODM3LCA0MzQxLCA3Nzk1NiwgNjQ0ODIsIDEyNzMzNywgODE2MywgNjUyNzAsIDAsIAogICAgIDc3OTMyLCAwLCA5MTEyLCA3NDQzMSwgODYzLCA5NDkwLCAxMTk4OTgsIDEyODM0OSwgNDMzMjMsIDEyMDUxMywgMTE5ODk3LCAKICAgICA5MDcxLCAxMjczMzMsIDAsIDM2NTQsIDc3ODksIDk2MzcsIDAsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgMTE5ODk5LCAKLSAgICA2NjU4NywgMTk1MDk4LCAwLCA5MjQwMSwgOTgzODg1LCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKKyAgICA2NjU4NywgMTk1MDk4LCAwLCA5MjQwMSwgOTgzODk0LCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKICAgICA3NDA4OCwgMzA1NiwgMTA4MjMsIDEyODc5NywgMTI3MzI3LCA4NzYyLCAxMDUwOCwgNjk2ODksIDczNzcwLCA0Mzk2OSwgCiAgICAgNDMxOTMsIDEwNzM3LCAzNDYzLCA5ODMwNjUsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIAogICAgIDcwNDksIDExOTkxMSwgNTE5NSwgMTk1MDgxLCAwLCA2NjYzOSwgMCwgMCwgMCwgMTI4MDQxLCAwLCA5MjM4NSwgMTI2MiwgMCwgCi0gICAgNjU2MSwgMTk5MzksIDAsIDAsIDEyODUzNSwgMTE5OTA2LCAwLCAwLCA5ODMwOTcsIDAsIDk4MzY1OCwgMTE5OTA3LCAKKyAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjY3LCAxMTk5MDcsIAogICAgIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgOTE3NTY4LCAwLCA5MTA3LCAxMjczMTYsIDU3MDIsIDM2NTUsIDY3NjYxLCAKICAgICA4NDMwLCAwLCA3NDEzMiwgMTIwNzU4LCAwLCA3NDA1NywgOTYwMywgMCwgNTI1NCwgMTIwNzQyLCA3NzI0LCA3NDM4OCwgCiAgICAgNjgzNzUsIDEwNzk2LCA1MTI5LCAwLCAwLCA1OTAsIDc1NzksIDU2MTQsIDU4OTMsIDkyMjgwLCAxMTcyMCwgOTI0OTYsIApAQCAtMTc4MjcsMTcgKzE3ODQ2LDE3IEBACiAgICAgMCwgNjU1NTgsIDY1OTQ2LCA4MTEzLCA3MDg3LCA1MjU1LCAxNzg2LCA2NjEsIDAsIDAsIDAsIDc0NDIzLCA3MTM0NSwgNTg2LCAKICAgICA3NDQxNCwgNjQzNTksIDEyNjcsIDEyODI2OSwgNjU0NjgsIDAsIDY1NzMxLCAwLCAxMjcxNzksIDM2MjEsIDEyMDQ3MywgCiAgICAgNjY2NjYsIDY0MjExLCAwLCA2NTYyLCAxMjkyOCwgMCwgMTIyOCwgNjU0OTAsIDExMzgzLCAwLCAwLCAwLCAxNzE0LCAKLSAgICA3NDQwNiwgMTI3ODMxLCAwLCA5ODM5MTIsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIDY0LCAxMjA2OTQsIAorICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkyMSwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCiAgICAgMCwgMTAyOTEsIDEwMzIzLCAyODI2LCAwLCAwLCAwLCA0MjAwOCwgOTcwOCwgNDI3MTAsIDAsIDQyMDExLCA0MTk5OSwgCi0gICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTYwLCA2NTgzMywgNzc4NDgsIDAsIAorICAgIDkyMTY0LCAxMjIwNiwgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDk4Mzk2OSwgNjU4MzMsIDc3ODQ4LCAwLCAKICAgICAxNzY1LCAwLCAwLCA2NTU4OCwgMCwgMCwgMCwgODQwMSwgMCwgNDIwMTQsIDAsIDcwMzAsIDE5NDcwNCwgMTA0NzksIAogICAgIDY0OTU5LCAyODUyLCAwLCAwLCAwLCAwLCAxMjg1ODYsIDkxNzk1MSwgNjk2MywgMCwgMTI2NjcsIDY0NTQwLCA3NDc4NiwgCiAgICAgMTAxNDcsIDEyOTM1LCAxMjc1NjgsIDEyNjQ4MywgMCwgMCwgMCwgNzg3NTcsIDAsIDAsIDAsIDAsIDk5OTQsIDEyNDY3LCAKICAgICAyODY0LCA2NDcxOSwgMTE0OCwgMTA0MzUsIDExNDYyLCA0MTY3NSwgNzA4NCwgMjc2NSwgMCwgNDMzODIsIDAsIDEyMDcxOSwgCiAgICAgMTI4MTg4LCA5MjUxNiwgNjY2NjIsIDAsIDc4MTMzLCA5MzY0LCAxOTQ2ODUsIDc0NDE2LCAwLCAwLCA3Nzk4OCwgMjYzLCAKLSAgICAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NywgOTgzNzMzLCA3Nzk4NiwgMCwgNjkzMSwgNjk3MjIsIDY0MzU1LCAKKyAgICAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NywgOTgzNzQyLCA3Nzk4NiwgMCwgNjkzMSwgNjk3MjIsIDY0MzU1LCAKICAgICA3MTc3LCA3MDEwNSwgMCwgMCwgMCwgNDI2MiwgMTAyODUsIDEwNzIyLCA0MjAyMCwgMTI2NTc1LCA2ODA2LCA2OTkyLCAKLSAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcwNywgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCisgICAgNDIwMTksIDAsIDQxMjkwLCA5ODM3MTYsIDc1MCwgMCwgNzEzMDQsIDEwMTYzLCA2MzkxMywgNzEzMDAsIDcwMzIsIDU5NTQsIAogICAgIDY0OTMxLCA0MzE0LCAwLCAxOTgsIDY4NDUzLCA3MzAsIDEyMDA5NCwgNjM5MDcsIDc3OTkzLCA3ODg5MSwgMTMxNjUsIAogICAgIDcxMDcsIDc0MTcxLCA0MjgwNCwgNjc4LCA4MjQwLCA3ODAxNSwgMTI4Nzg0LCA0MTM3OCwgMTEwMDgsIDY5MzgsIDcwMDI2LCAKICAgICA5MjYzNywgMjA5NywgNjYyNDYsIDEyMDU2MCwgMCwgMCwgMCwgMzg5MiwgNjg2MzIsIDY5NjQyLCA2NzEyLCA2NjA0NSwgCkBAIC0xNzg0NSwzMSArMTc4NjQsMzEgQEAKICAgICA2OTY2OSwgNDMyNTQsIDczODMxLCAwLCAxMDI5MywgNTk1MiwgMTI4MSwgNDM3NDcsIDAsIDAsIDEwNjc3LCA2MDQsIAogICAgIDQxMDk3LCA5MTgyLCAxODU5LCAwLCA5MjYwMywgMzQyNSwgMTI3NDg4LCAwLCAyODM2LCAwLCAwLCA5NzA3LCAwLCA0MzIwMiwgCiAgICAgMCwgMCwgNjUxOTksIDE3MzgsIDkxNzgxOCwgMTI4MTU4LCAyODMyLCA5MjcwMiwgOTY3MCwgMTI5MzcsIDAsIDY2Mzc0LCAKLSAgICA5MTc5NTYsIDAsIDI4MjIsIDY4MTIyLCA0NDM2LCA5MjUxOSwgOTgzNzE0LCA3Mzc1MiwgMCwgNjQ4NzIsIDkyMzQwLCAKKyAgICA5MTc5NTYsIDAsIDI4MjIsIDY4MTIyLCA0NDM2LCA5MjUxOSwgOTgzNzIzLCA3Mzc1MiwgMCwgNjQ4NzIsIDkyMzQwLCAKICAgICAxMzMxLCAwLCAwLCAwLCAxMjcwOCwgMCwgNTA5MCwgNTA4OSwgMTI3OTc3LCAwLCAxMTkxMDksIDAsIDEyODY4MSwgMzE5LCAKICAgICAxMTg4NDcsIDQzNDc5LCA5NDc3LCAwLCAwLCA1MDg3LCA5MjMyNSwgNzY0MCwgOTYsIDUwODYsIDAsIDkyMzc5LCAwLCAKICAgICA1MDg1LCA2NDI4NiwgOTI2NjUsIDAsIDQxNDIyLCAwLCAxMTk5MDEsIDQyMzU2LCAzNzcyLCAwLCAwLCA1MDExLCAwLCAwLCAKICAgICAxMjY1ODcsIDAsIDEyNzE2NSwgMTI3MjQxLCA2Njc3LCA3NjAxLCAwLCA1OTEsIDY0NDE5LCAxMTg5NTMsIDkyMjYyLCAwLCAKICAgICAxMTg5MjMsIDcwMDg0LCAwLCAxMDkzOSwgNjEwNiwgNjkzMywgNDEyNzEsIDY3NjAsIDcxMzQzLCA0NTM0LCA0MTI3MCwgCiAgICAgMTI4ODc2LCAwLCA2NTU3NCwgMCwgOTIyNCwgNjk4NTMsIDM2NzEsIDg5NzYsIDEyNjQ3NCwgMCwgNDEyNzUsIDYzNzIsIAotICAgIDEyODA4NCwgNTUyNjEsIDc5NjMsIDYzNzEsIDAsIDU2OCwgMCwgNDEyNzMsIDk4MzcyMSwgMCwgNjcyOCwgMCwgOTcxNSwgMCwgCisgICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzMwLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKICAgICA4MjU4LCAxMTc1MywgNzQ4MjAsIDAsIDk2MDIsIDExODkxOSwgNDIsIDAsIDQzNjg4LCAwLCAwLCA3NDU4LCAwLCAwLCAKICAgICA2NTM4NSwgMTE5OTAwLCAwLCAxMTk1OCwgMCwgOTE3ODIyLCAwLCA2MjU0LCA0MjcyMSwgNjYzMzYsIDgwNDUsIDExNTUwLCAKICAgICAwLCAwLCA5ODM1OTcsIDQyODU4LCAxMTc4OSwgNjU4NjgsIDU1NTcsIDEwMTMzLCA5NzM3LCAxMzEwOSwgMCwgOTQ2NywgCiAgICAgNTU1OCwgODg3OCwgMTI4MTM2LCAxOTUwMzYsIDc0NTEsIDY3MDYsIDEwMTQ2LCAwLCA5MDg2LCA2NDU2NiwgMCwgNjQ1ODQsIAogICAgIDc0MzcsIDc0NTQsIDEyNTk0LCAxMjg2OTAsIDY4MzYyLCA0NTQ2LCA3NzMxLCAwLCA3MDA0OCwgNzQyNDMsIDAsIDM4MDUsIAotICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzgxLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKKyAgICAwLCAxOTQ1NjUsIDQ0MDAxLCA0MTAwOCwgMCwgNjMwNywgMTk5NDksIDk4Mzc5MCwgNzU0NCwgOTgzMDQ1LCA0MzQ2OSwgMCwgCiAgICAgMCwgMTAxNTIsIDY0NDIyLCA2NTA5MSwgMTE5MTEzLCA3NjAyLCA2NDcyOSwgMCwgNDM1MjEsIDAsIDQyMzAyLCA0MzcxMSwgCiAgICAgNDM1MjMsIDQxNDQ3LCA1NTU5LCAwLCA4NzA0LCAyMzk3LCA1NTU2LCAwLCAwLCAwLCA5MDExLCA5NjMwLCA5MjYzMywgMCwgCiAgICAgOTM5OTgsIDU1MDYsIDAsIDE5MTEsIDY2NjUyLCAwLCA5OTYxLCA4ODQ1LCA2NjY5OCwgMCwgMTA3OTIsIDg4ODksIDAsIAotICAgIDIwOTgsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIDAsIDk4Mzc5NiwgNzQzNjUsIDc1NTIsIDAsIDAsIAorICAgIDIwOTgsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIDAsIDk4MzgwNSwgNzQzNjUsIDc1NTIsIDAsIDAsIAogICAgIDY1Mzg0LCA3MjIzLCA0NTU5LCAwLCAxOTU2LCA0MzEzOCwgNzAyNCwgNjU3MjgsIDY0NTAxLCAxMjEwLCAxOTUwNzcsIAotICAgIDY1MTc1LCAxMDE4NCwgNDMxNDAsIDQzNjU0LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDExOTEyNCwgOTgzMjg1LCAKLSAgICA5ODM3ODMsIDAsIDQzNTcsIDAsIDExOTgzNywgOTE3ODYzLCA3NDIzMywgOTk2NywgNzg4ODQsIDQyODYwLCAxMTk4MzgsIAorICAgIDY1MTc1LCAxMDE4NCwgNDMxNDAsIDQzNjU0LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDExOTEyNCwgOTgzMjkzLCAKKyAgICA5ODM3OTIsIDAsIDQzNTcsIDAsIDExOTgzNywgOTE3ODYzLCA3NDIzMywgOTk2NywgNzg4ODQsIDQyODYwLCAxMTk4MzgsIAogICAgIDEwOTQxLCA2NTcyMSwgNjk2MiwgMCwgMCwgMTE5MzI0LCAwLCAxMTAxNCwgMTI3OTcyLCA4OTQyLCAxMjAwMCwgNjkyMjQsIAogICAgIDkyMjY3LCAxMjg1MzYsIDExOTc0LCA5MjIxMywgNDI3NzIsIDEyNzUxOCwgMTE2NTAsIDUwMTMsIDkyNjYzLCAxMjY1ODMsIAotICAgIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDkyNDc2LCAwLCA0MzgxOSwgOTgzNzYxLCAwLCA2NDcxNCwgMCwgMCwgMTIxNjIsIAotICAgIDEyMTIwLCA0MzQ3NiwgOTgzNzU3LCAxMTAyNCwgNzQ4MTEsIDY2MjI4LCAxMDU2MywgMCwgMTI3MTk2LCA0MzUyMiwgMjQ2MiwgCisgICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NzAsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCisgICAgMTIxMjAsIDQzNDc2LCA5ODM3NjYsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKICAgICAwLCAxODM3LCAwLCA2Mzk3MiwgNjk1NywgMCwgMTIwNTU5LCA0OTUyLCA2NTcxOCwgNjU4MjcsIDU1MDQsIDY1NzIwLCAKICAgICA2NTcxNCwgNjU3MTUsIDY1NzE2LCAwLCAxMjcwMDUsIDEyNzExOSwgMzEwOSwgNjM5NzUsIDc0MDI4LCAwLCA4MTA3LCAKICAgICAxMTkyMzQsIDExMjcsIDQ1NSwgMCwgNjM5NjgsIDEyNzkyNCwgMzQ4MywgMTE5NTkzLCAxOTg5LCAwLCA2OTY3OCwgOTEwNCwgCkBAIC0xNzg4Miw3ICsxNzkwMSw3IEBACiAgICAgNDE4NjksIDEyNjE5LCAwLCAxMDE1NCwgOTgzMDQzLCA3NDQzOSwgMjAzOSwgMCwgNzQ0NiwgMTY4NCwgNjM5NzksIDEwOTc0LCAKICAgICA0NTgsIDEyMDYyMCwgMCwgNjk3OTEsIDEyNzE2MSwgMTE5MTYsIDY1MDE2LCAwLCA2OTY3MSwgNDIxMTUsIDk4MzEzMywgCiAgICAgMTIyODgsIDc4MDU3LCAwLCAxNDkzLCA0MjExMSwgNzU1MywgNDA5NywgMTI4MTk5LCAxMzA4MCwgMCwgNjU4MDgsIDY2MTAsIAotICAgIDYwMzAsIDgwNTksIDc1MDgsIDEzMTMxLCAwLCA5ODM0MjMsIDAsIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDEyODE5MiwgCisgICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQzMSwgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKICAgICA0MTI3NywgNjQ2NTgsIDAsIDY0MzgwLCA2NjI1LCA3NDM1NCwgMTk5MDQsIDAsIDAsIDAsIDY1MzcxLCA3MDc4LCAwLCA4MzMsIAogICAgIDAsIDYzNjksIDAsIDEwOTc5LCA0MTk1MywgMCwgNDE0MzQsIDYwNjIsIDAsIDAsIDE5OTE2LCA2OTEzLCA5MzMsIDEzNDEsIAogICAgIDk4NDIsIDY3MjAsIDY1NzQ0LCAwLCA5ODM1OTIsIDEyODI5NSwgMCwgNzQwNSwgMTAxMDUsIDY1ODEwLCAwLCA0MTYzMiwgCkBAIC0xNzg5NywyMyArMTc5MTYsMjMgQEAKICAgICA2NzQxLCA0MzA0NywgMCwgMTMxODAsIDEyODUxNywgNDE4LCA5MTc5NzIsIDY0NDk1LCAxMDI5NSwgMTAzMjcsIDEwMzkxLCAKICAgICA0MTc1MiwgNzQzMzksIDg2NDEsIDQxNDQ5LCAwLCA3NDEwMCwgMCwgMTA5MTEsIDY5NDIsIDAsIDEwMjQsIDQyODQ5LCAKICAgICA0MTc1MSwgNjk3NzYsIDg5NDEsIDk4MzU1NiwgNDU1NCwgMCwgOTAyMywgMTE2ODUsIDAsIDk5MjgsIDc4NjE3LCAwLCAKLSAgICAxMTQzNywgNDM3NDEsIDkyMTYzLCAxMjA3MDAsIDYzOTY3LCA5ODM0NzUsIDQxMjA2LCAxMjA3MjQsIDkwNDksIDQxMTg1LCAKKyAgICAxMTQzNywgNDM3NDEsIDkyMTYzLCAxMjA3MDAsIDYzOTY3LCA5ODM0ODMsIDQxMjA2LCAxMjA3MjQsIDkwNDksIDQxMTg1LCAKICAgICA0MzE2NiwgMCwgMTE2ODAsIDkyNjE5LCAxMTY4NiwgNzg1NDQsIDY1MjI0LCA0NTY1LCA0NjU1LCAxMTk1NTMsIDAsIAogICAgIDkyMTgzLCA2NDUyMywgMTAzNDMsIDEwNDA3LCAwLCA2NjY3MSwgMTE0NjYsIDAsIDEyODAwMywgNDI4OTAsIDc0MDEzLCAKICAgICAxMjA1MCwgNjgyMDEsIDI4NjAsIDAsIDAsIDAsIDQyNzkyLCA1NzQzLCAxMDQyNCwgMTIwNjUsIDQyODcyLCAwLCA5MjM0MiwgCiAgICAgMCwgODg3NSwgMCwgMCwgOTE3OTkxLCA3NTMxLCAxMjg0NywgMjQxMywgMCwgNzg2MzUsIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCAKLSAgICA0MjU2NCwgMCwgMTU4MiwgOTgzNzA2LCA1NTA4LCAwLCAwLCAwLCAxMDgwMSwgNjk4NzYsIDkyMzU0LCAwLCA3MTczLCA0OTYsIAorICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MTUsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCiAgICAgMTA0MzksIDQzMTMsIDY0NjA3LCA2OTYzOCwgNzg2MCwgMCwgOTA2LCA0Mjc5MywgMjg0MiwgNjQwNSwgNjQ3MjIsIDEzMTMyLCAKICAgICA3OTgsIDY0Njk0LCAxMjgwMSwgODQwNiwgMTE1MywgOTIxNzMsIDY0Nzg4LCAwLCA4MDU0LCA5MTc0LCAxMjg2NTIsIAogICAgIDkxNzk3NiwgOTk2NCwgNzQ0MDksIDQxNjExLCA0NjQyLCA2NjU3NCwgMTE1NTYsIDkxNzk4MiwgMCwgNzg4NTcsIDQyMDg5LCAKICAgICA3ODg1NSwgOTAwOCwgMCwgMTI2NTkyLCAxOTUwOTYsIDQyMDc5LCA5MTc5ODEsIDc3OTI0LCA0MjUxMywgNzc5MjcsIAotICAgIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCA5ODM2OTMsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgCi0gICAgNDIwOTMsIDM5MjAsIDAsIDAsIDAsIDAsIDQ1ODAsIDQxOTY3LCA5ODM3MjMsIDY0Mzg0LCA5MjE2NywgOTM5ODQsIDMwMjEsIAorICAgIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCA5ODM3MDIsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgCisgICAgNDIwOTMsIDM5MjAsIDAsIDAsIDAsIDAsIDQ1ODAsIDQxOTY3LCA5ODM3MzIsIDY0Mzg0LCA5MjE2NywgOTM5ODQsIDMwMjEsIAogICAgIDQyMDA0LCAwLCAwLCA0MjMxNywgNDE5OTgsIDAsIDY5NDYsIDAsIDAsIDAsIDEyODE5MywgNjUyMDQsIDAsIDY4MTEzLCAKICAgICA0MjY5MCwgOTg4MCwgNDIwMTAsIDc0ODI0LCA2NDU4OSwgMTAxMTEsIDY0ODc1LCAxMjc4ODAsIDY4Mzk5LCA0Mzk5OCwgCiAgICAgMTEzNjAsIDAsIDAsIDAsIDExODgyNiwgNDIxNDksIDAsIDAsIDAsIDY0OTQxLCA3NzkxOSwgMTIwNDIxLCAxMjgwNzcsIDAsIAogICAgIDU1MjQ3LCA0MTEwLCA2NjAwNSwgNjk1OSwgMTA5MjksIDExOTExMCwgMCwgNjY3MDMsIDc3OTIxLCA4NjE3LCA0MTk4MiwgCi0gICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNjgsIDEwMTE3LCA5ODMxNjksIAorICAgIDYwMjUsIDY5MjQyLCA5ODMxNzYsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgOTgzMzc2LCAxMDExNywgOTgzMTY5LCAKICAgICA5MjI5NywgNDE2MzYsIDAsIDAsIDEyMDY4MSwgODMwMSwgMCwgMCwgMTg3LCAwLCA2NTY2OSwgMTI4MzM5LCA0OTYzLCAwLCAKICAgICAxMjc1MTcsIDAsIDg5NjQsIDY1Njc2LCA3Nzc1LCAwLCA0MTk0OCwgMCwgMCwgMCwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAKICAgICAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgNDI2NjMsIDEyODIxMCwgNDE3NjYsIDExOTExNCwgNjU4ODIsIDc4ODQ5LCAKQEAgLTE3OTIzLDIwICsxNzk0MiwyMCBAQAogICAgIDMxMDMsIDAsIDQxNzUzLCAxMjg1NDAsIDAsIDAsIDc4ODQ0LCA3ODg0NSwgNDE3MzksIDc4ODQzLCA0MjUxNSwgMTA5MzEsIAogICAgIDQxNzU2LCA0MzM0NywgNDI1NjAsIDUzOTEsIDQxNzQ2LCAxMTkxNDcsIDkyNTkxLCA0MTI1OSwgNTU2MSwgNjk5MzAsIAogICAgIDI2OTEsIDAsIDY1NTUzLCA3OTMzLCA1NTYyLCA2OTgwMCwgMTI4MjY1LCA0MTI2MiwgMTI4MTQ2LCA2NDQyMSwgNzQ4NDYsIAotICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzMwLCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKKyAgICA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDk4MzczOSwgMCwgMCwgMCwgOTI1MjQsIDQxMjY2LCAwLCA2NjU2NiwgCiAgICAgMTI4ODM2LCAxMDU4NSwgNjU3NDEsIDQxNzM3LCA5NTc0LCAyNjY2LCAwLCA0MTczOCwgODMxLCA0MTksIDEzMTI2LCAKICAgICAxMDcxNiwgMCwgNDI4MjIsIDAsIDY0MzQsIDAsIDY5MzksIDc3NjYsIDY0MzIsIDEyODEwNiwgNjk5MzIsIDkxNiwgNzY5LCAKICAgICA0MTc0MiwgMTE5NjgsIDc0ODA1LCA2NDMzLCA1NTYzLCA1NDcsIDE5NDMsIDY0MzksIDU1NjAsIDQ5OTQsIDQ4NywgCiAgICAgMTI2NTM3LCA0NDk3LCAzNzU0LCAxMjcwNTYsIDEyMDQyNCwgOTAzOSwgMCwgNDE3NzYsIDAsIDg3MTYsIDE1OTUsIDQxNjE1LCAKLSAgICAwLCAwLCA3NDI2MCwgMCwgNDI4NTQsIDQzMjE5LCAxMjg3MDksIDk4MzQ1MiwgMTIxODUsIDEyODg3OSwgNzAwNzIsIAotICAgIDY4MzU1LCA2ODM1NywgMCwgNDI4NTYsIDg2MzQsIDAsIDk4MzM4OSwgNDIwOSwgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIAotICAgIDY1NjEyLCAxMjc1NDMsIDY2OSwgNTY3OSwgMCwgNjk3ODYsIDkyNTQwLCAwLCA5ODM0NTYsIDU2NzgsIDExODIxLCAwLCAKLSAgICA2NzExLCA0NjAsIDAsIDAsIDk4MzQ1MywgMCwgMTIwNzQ3LCAwLCAwLCA3ODA1MCwgMTE5MDIyLCAwLCA5ODM0NTQsIDAsIAorICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDYwLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCisgICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzk3LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCisgICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ2NCwgNTY3OCwgMTE4MjEsIDAsIAorICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDYxLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ2MiwgMCwgCiAgICAgNzc4MiwgOTA0NCwgNDk3NCwgMTE3NjAsIDc4NDk0LCA3NTc3LCA2NTcxMSwgNDE5MTIsIDEyMTYsIDAsIDEyODA3OSwgCi0gICAgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDI5MzMsIDEyMjQ0LCAwLCA1NjgzLCA5ODMzODQsIDAsIDc4MTE5LCAxNTQ5LCAwLCAwLCAKKyAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM5MiwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAogICAgIDEyMDM5OCwgNTY4MiwgNjIwNiwgODY3MCwgMTAyNTYsIDU2ODAsIDY5OTM1LCAxMDAwMSwgMTI4NTEyLCA2OTc2OCwgMTQ0OSwgCiAgICAgMTAyNDEsIDc4MjkwLCAxMjgyMjgsIDAsIDEwNTUyLCA2NDM0MiwgNDE5MjIsIDEyODU0OCwgODU4NCwgNjgwMzAsIDU1NjcsIAotICAgIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDk4MzI0OCwgMTI4MDI2LCAwLCA2NTcwOCwgCisgICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjU2LCAxMjgwMjYsIDAsIDY1NzA4LCAKICAgICA2NTcwOSwgNTU2NiwgNjk4MDMsIDY1NzA0LCA2NTcwNSwgMTE5MDQsIDQyODc1LCA0MzM3MywgNDI1MzksIDU5NDIsIDg0NjgsIAogICAgIDEyMDU2MSwgMTAzNjEsIDEwNDI1LCA2NTY5NywgNjU2OTgsIDY1Njk5LCAwLCA2NjU5OCwgMCwgNjQ2NjQsIDEwNjQ3LCAKICAgICA3ODcwMiwgNzg3MDMsIDc4NjkwLCA0NTcsIDc4NTAyLCA2NTcwMSwgMTkzNCwgNDMwMDYsIDExOTkwMywgODgwMiwgNzg3MTAsIApAQCAtMTc5NTAsMTQgKzE3OTY5LDE0IEBACiAgICAgMTE5NTcwLCA0MjIzOSwgODUzNiwgNzg3NDAsIDc4MzI0LCA3ODcyNiwgNzQ0MzIsIDcyNCwgMCwgMTQ1NSwgNzg3NDksIAogICAgIDcxODMsIDY0NTgzLCA3ODc0NywgNjg0NDMsIDQxNzUsIDc4NzQxLCA0MzYxNCwgNjk4MDEsIDkzOSwgMCwgNDM1MjAsIAogICAgIDY4NjEzLCA3NDU2OSwgOTE3OTU4LCAwLCA3ODc2MywgNzg3NjQsIDc4NzYwLCAxMDc4OCwgNjA4OCwgNzg3NTksIDc4NzU1LCAKLSAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjExLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCisgICAgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIDk4MzIxMywgOTIyNjEsIDYzNzAsIDAsIDc4MjcsIAogICAgIDY4NDQxLCA2OTY1LCAwLCAwLCAxMzIwMSwgMTI4MjA1LCA2OTg5NiwgMCwgNzQzODIsIDczNzgxLCA3OTE4LCA3Mzk4OCwgMCwgCi0gICAgMCwgOTE3ODg0LCAxNzI4LCAwLCA0Mzc2NCwgMTc4LCAxMjk3MiwgOTI2NzksIDAsIDkxNzg4NywgOTI1NjMsIDk4MzM3MywgCisgICAgMCwgOTE3ODg0LCAxNzI4LCAwLCA0Mzc2NCwgMTc4LCAxMjk3MiwgOTI2NzksIDAsIDkxNzg4NywgOTI1NjMsIDk4MzM4MSwgCiAgICAgMCwgNzgzMjcsIDEyMDQwNSwgNjU2OTAsIDAsIDAsIDExOTA1NCwgMCwgOTI1MiwgOTE3ODg5LCA0NjUyLCA2ODM3MSwgMCwgCiAgICAgMCwgMCwgMTMwNjUsIDk5MjMsIDEwODA2LCAwLCAxMTc2MywgNzAwMTYsIDEyMDY4OCwgNjcyMywgNzgxODcsIDAsIDY5OTMsIAotICAgIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgOTIzMjAsIDc0MDgwLCA5ODMzMDcsIDY5OTExLCAxMTkxMCwgCisgICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMxNSwgNjk5MTEsIDExOTEwLCAKICAgICA5MjU1OSwgODI3OCwgODk2MywgNDAzNCwgMTI4NTYwLCAwLCA2NTM0NCwgMTIwNTE3LCA0MTc0NywgMCwgMCwgODY3NywgMCwgCi0gICAgMTI3MDcsIDkzNTAsIDY2MDM3LCAxMjgxODAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgOTgzNzQxLCAwLCA3NDkxLCAKKyAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NTAsIDAsIDc0OTEsIAogICAgIDg4NTYsIDcxMzYxLCAwLCA0MzE1MCwgMTI3NzY4LCAxMjA0MDQsIDY1Mzg5LCAxMjA0MDIsIDEyMDQwMywgMTA4MTMsIAogICAgIDI1OTIsIDEyODUzLCA0MzI2OSwgNzI2MywgMTIwMjQ0LCA2NTM2LCAxMjAyMzgsIDEyMDIzOSwgNjU1MTYsIDEyMzIxLCAKICAgICAxMjAzOTEsIDEyMDM4OCwgNTUyODcsIDEwMDA3LCAxMjAyNDYsIDk1ODgsIDEyMDI0OCwgMTU5NiwgMTIwMzgzLCA0MTk5NCwgCkBAIC0xNzk4MiwyNyArMTgwMDEsMjcgQEAKICAgICAxMTYsIDEyOTk4LCAxMjIsIDEyMSwgMTIwLCAxMTEsIDExMCwgMTA5LCAxMDgsIDExNSwgMTE0LCAxMTMsIDExMiwgMTAzLCAKICAgICAxMDIsIDEwMSwgMTAwLCAxMDcsIDEwNiwgMTA1LCAxMDQsIDY0MzYsIDczOTc0LCA1MzQsIDQxMjEyLCA3NzkzMSwgMTUzNiwgCiAgICAgNjQwOTMsIDczOTcwLCA3NzkzMCwgMTI3MTU3LCAwLCA2MDIwLCAxMjcxNiwgMTI3MTEyLCAxMjc0NCwgNDc1LCAxMjAzOTQsIAotICAgIDEzMjY2LCAxMjc4MTMsIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCA5ODMyOTksIDgxMzQsIAotICAgIDEyODAyOCwgMjkxMywgNzM4NzAsIDEyNzExMywgMTg2NiwgMCwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCisgICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzMwNywgODEzNCwgCisgICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCA5ODMyMjksIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIAogICAgIDY2NTg1LCA3MTI5NywgMzE5NiwgMCwgMCwgNTkzNSwgMTI1MCwgMTI3MDY2LCA4MTc0LCA5Nzg3LCA2NzMzLCA5ODU5LCAKICAgICA3OTE2LCA5ODYxLCA5ODYwLCA1MjU4LCAxODgyLCAxODkyLCA2NzMxLCAxMDg4MiwgNDA1LCAxMTQ1NCwgNzM5MTEsIDAsIAogICAgIDEyODc4MSwgNDExNjksIDg5MzksIDQxMjQ1LCAwLCA0MTE3MCwgMTQ1NCwgMTEzNjksIDY0NzcsIDEyMTU3LCAwLCAwLCAwLCAKLSAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzAwLCA2NDUsIDEyNjYxNiwgCisgICAgNDExNzIsIDc4NTUsIDAsIDAsIDEwNDgwLCAwLCAwLCA3NzkzNiwgODI2NCwgMTI2MTAsIDk4MzMwOCwgNjQ1LCAxMjY2MTYsIAogICAgIDc2MDksIDQwOTczLCA2OTk0MywgNzM4MzMsIDY5OTQ4LCA1ODI0LCA5ODQsIDc3OTE4LCAxMDY4OCwgNTg1MSwgMCwgNzcyOSwgCiAgICAgNzM5ODIsIDEyMDUxOCwgMCwgMTk1MDg2LCA0MzM2OSwgMCwgMTI4MTQwLCA2ODQxNSwgOTgzMDkzLCA0NTM4LCAxMjA0MDYsIAotICAgIDQzMTQxLCAwLCA5ODMyMDgsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIAorICAgIDQzMTQxLCAwLCA5ODMyMTAsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIAogICAgIDk4MzE1OSwgMTI5OTcsIDAsIDAsIDAsIDAsIDIzODEsIDEyODgzLCAxMDk5NCwgMTA1MjksIDQxOTA2LCAwLCAwLCAwLCAKICAgICAxMjQyNSwgMTA2NjEsIDEwODU2LCA5NjE0LCAyNDI4LCA0MTQ3OCwgODU4MiwgMTAwNjQsIDczOTMwLCAwLCAwLCAwLCAKLSAgICA2NDg5NiwgMTE5MTYyLCAxOTUyLCA5MjE4MSwgODQ1NSwgMTAwODIsIDExNTc1LCA5ODM0ODIsIDExOTU2NiwgMCwgMTI4MDgsIAorICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ5MCwgMTE5NTY2LCAwLCAxMjgwOCwgCiAgICAgMTIxODMsIDYxNDUsIDExODk1NSwgNjQ5MjksIDkyNDMzLCAwLCA5ODMxOTMsIDQzMTg2LCA0MjUwOSwgMCwgMzkyMiwgCiAgICAgOTE4NywgOTgzNjE0LCAwLCAxMDE5MSwgMTE5MDU3LCAxMTc1MiwgMzM1MywgOTM1OCwgMCwgNzEzNjYsIDY2NjgwLCAKLSAgICAxMjAwOTAsIDgyNDgsIDc5MzEsIDg1NTgsIDk3OTUsIDY4MzgwLCA5ODMyODksIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIAorICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI5NywgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCiAgICAgNDEwMjcsIDEyMDA4NiwgMCwgMTIwMDg4LCA3MzY2LCA3MDE5LCAxMjAwNzMsIDAsIDExNzUxLCAxMjAwNzgsIDc4Mjk0LCAKICAgICA2NDY1NywgODY1NywgMTIwMDQ4LCA4NTk0LCAxMjAwNjgsIDAsIDAsIDEyMDA2OSwgMTIwMDcyLCAxMjAwNzEsIDAsIDAsIAogICAgIDQzMTU0LCA0MTAyOSwgMCwgMTEzMzIsIDY1MzgwLCA3NzI4LCA5NDA3NywgMTEyOTQsIDAsIDY2NjY1LCA3ODUxLCAwLCAKLSAgICA4Mzc1LCA4Njk5LCAwLCA0MjUyNCwgMCwgOTA4NSwgOTQwNDEsIDc1MDQsIDkzMjcsIDYxNjAsIDEyODA5NSwgOTgzODU1LCAKKyAgICA4Mzc1LCA4Njk5LCAwLCA0MjUyNCwgMCwgOTA4NSwgOTQwNDEsIDc1MDQsIDkzMjcsIDYxNjAsIDEyODA5NSwgOTgzODY0LCAKICAgICAwLCA4MDg4LCAwLCA3NDAxMiwgOTI1MDAsIDAsIDQ0MzksIDY5MjYsIDk4MzA0NywgMTI5MjQsIDEyODIyNywgNDIzNjksIAotICAgIDQzNTAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDk4MzI3NSwgMCwgMCwgCisgICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjgzLCAwLCAwLCAKICAgICA2NTgyNSwgOTU3NywgNjgxOTksIDAsIDY0NjcwLCA5ODMxMjEsIDc4MDU2LCA2NzkzLCAxMTI5NSwgMCwgNzgwNTMsIAogICAgIDczODcyLCAwLCAwLCAxMDkwMiwgMCwgMCwgNzgwNzAsIDc4MDY4LCAxMDQ3MiwgMjk5NSwgMCwgMCwgNjQ2ODIsIDIzNzEsIAogICAgIDc4MDY5LCAxMjA4MDgsIDI1OSwgMTAwOSwgOTIxNzEsIDI0MDIsIDIzMzMsIDY0NDAsIDE5NDc0MSwgMCwgNjUxMjUsIApAQCAtMTgwMTAsMTkgKzE4MDI5LDE5IEBACiAgICAgMTI3MDcwLCA0MTI2MSwgMTE5MzYyLCA0MzY0MCwgODYxMywgMCwgOTQwNDksIDY3MzYsIDE5NTA5MiwgNDE0OTIsIDEyMDA1LCAKICAgICA2OTkyNywgMCwgMTg5MCwgMTIwMDU2LCAwLCAwLCAwLCA3MjkzLCA3OTkxLCAwLCAxMDU3OCwgMCwgNzgwNzYsIDE5NDczOCwgCiAgICAgNzgwNzcsIDY5OTI4LCAwLCA3ODgwMCwgOTI2NTMsIDY0NDQ1LCA0MjY2OCwgNjYzNSwgMCwgNjE2NCwgNjUxNzAsIDAsIDAsIAotICAgIDc2NzYsIDExNjY0LCAwLCA5ODM2NDksIDY5NzA3LCAwLCAxMTg4MTIsIDAsIDAsIDEyODA0NSwgOTE3NSwgMTE5MjUsIAorICAgIDc2NzYsIDExNjY0LCAwLCA5ODM2NTgsIDY5NzA3LCAwLCAxMTg4MTIsIDAsIDAsIDEyODA0NSwgOTE3NSwgMTE5MjUsIAogICAgIDc4MDQ1LCA5MDg4LCAwLCA2NDU0NSwgMTM5NiwgMCwgNzU0NiwgMzg0NywgMTI3MTc3LCAxMjc4MzUsIDQ5ODUsIDEzMjg4LCAKICAgICA2NzIsIDgwOTgsIDQzMTk2LCAxOTQ3NDYsIDk4MzA5NiwgMTI4MTI2LCA0MjY1NSwgNzQwNDMsIDY1MDcyLCAxNTc3LCAKICAgICAxMTc3MiwgMTMwNDEsIDU5MjgsIDQ1MjUsIDEwNjU4LCA2NTkxMSwgMTI2NiwgMTAxODAsIDAsIDEyODU4NCwgMTI2MjIsIDAsIAogICAgIDAsIDAsIDE5NDcxNCwgMTI3MTM5LCAxMzMxMCwgNzczLCAxOTkzMywgMTUzOSwgMCwgMTI2OTgzLCA0MjczMSwgNjc5NzIsIAogICAgIDAsIDAsIDAsIDMwNTEsIDU4NjIsIDc4MjMsIDkyNDc4LCAwLCAxMjA0MTEsIDMyNTAsIDQzOTkxLCA2OTY4NywgNjY2NDksIAotICAgIDk1MTAsIDY2MjM3LCA5ODMyOTQsIDAsIDQxMDY2LCA2NDY3MywgOTE3OTYzLCA5MTc5NjQsIDAsIDM1MDUsIDg3MDcsIAorICAgIDk1MTAsIDY2MjM3LCA5ODMzMDIsIDAsIDQxMDY2LCA2NDY3MywgOTE3OTYzLCA5MTc5NjQsIDAsIDM1MDUsIDg3MDcsIAogICAgIDkxNzk2OCwgNjcyNSwgMTI4MDEzLCA5MTc5NzEsIDkyMzE0LCAzNDcxLCA5MTc5NzAsIDU0NzksIDg4MiwgNjY4NiwgCi0gICAgMTE5NTg0LCAxMTYxMywgMTIwNzcyLCA0Mjc1NCwgMCwgOTgzMjk4LCA5MjY5NiwgMCwgMCwgMCwgMTI4NTIzLCAzMjI1LCAKKyAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMzMDYsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAogICAgIDkxNzk5NiwgNDQzMywgNDExNTYsIDQzOTczLCA0MzE3MywgMTQ0MywgNDM4MSwgMCwgMCwgMTA5MjYsIDExNzU2LCAxMTc1NywgCiAgICAgNjQ4NzksIDkxNzk0OSwgOTE3OTUwLCAxMjc4NDgsIDEzMjI3LCAwLCAxMDAyMSwgNTE2MCwgMTM4NywgMCwgOTE3OTUzLCAKICAgICA0MTQxOCwgMCwgNjU5MTQsIDY3MjEsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDkxNzk2MSwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgCi0gICAgMTE5MjU3LCA0Mjc0LCA5ODMyOTIsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgCisgICAgMTE5MjU3LCA0Mjc0LCA5ODMzMDAsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgCiAgICAgMCwgNDEyNTIsIDY2NjgyLCAwLCAxMTk2MzcsIDQxMjQ5LCAxMzY2LCA2NDYzNSwgNjUwNDcsIDEyNDY2LCAwLCAwLCA0Mzk3LCAKICAgICAxMjgwMzcsIDEyODMzNiwgNDEyOTYsIDk1NDUsIDQxMjkxLCAxMjgwNDksIDAsIDQxNDg1LCAzNTExLCA0MTI4MiwgNTkyMywgCiAgICAgMTA0MDAsIDAsIDEyODgxOCwgNzYwLCAwLCAxMjA4OCwgNTc4NiwgMCwgNDIyNTYsIDExOTg2OSwgMTE5ODYwLCA0MTcsIApAQCAtMTgwMzIsMTUgKzE4MDUxLDE1IEBACiAgICAgMTE5NTc2LCAwLCAwLCAxMzc1LCA2NjcwNSwgNDM1NzMsIDY1MjYwLCA0MjA2MywgMCwgNDI4MTEsIDEwMzEyLCA2OTg0NSwgCiAgICAgMTIwNzk0LCA3ODQwLCAwLCA0MzYzMCwgMTAyNTIsIDAsIDEyODEwNCwgNDMxODUsIDAsIDQzOTYsIDAsIDExOTg4MCwgCiAgICAgMTA3NjksIDk2NzYsIDExOTA0MSwgMCwgOTc1MywgMCwgODk0NCwgMCwgMCwgMTA0NzMsIDAsIDAsIDYwNzIsIDQzMDI1LCAKLSAgICAxMDI5OSwgMCwgMCwgMTIwNjA4LCA2NjMyNiwgOTgzNDM5LCAxMjc3OTQsIDAsIDQzODExLCA5MzMwLCAxMjA1OTYsIDcyMjIsIAotICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDk4Mzc3MywgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIDAsIAorICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0NDcsIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCisgICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzgyLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCiAgICAgNzgzNDcsIDAsIDAsIDc1NjUsIDY2MzYzLCAxMjk1MiwgNjQ4MDYsIDQzMTgwLCA3NzkyOCwgNzQxNCwgNzc5MjksIDQzOTgyLCAKICAgICA3NDI4OCwgNjIyLCA3NDAyMywgODg1LCA0MzQwNSwgMTYwMiwgMCwgMCwgODUyLCAwLCAxMjE2MCwgMCwgMTAyMTIsIAogICAgIDY1NDM1LCAwLCAxMjA3MSwgOTYwOSwgMTIxNTYsIDkxNzk4MywgOTE3OTg0LCA0MzU4NiwgMTEwMzUsIDEwNDExLCAKICAgICA5MTc5ODgsIDEwMjU1LCA2NzEwLCAxMDI3OSwgNDE5NCwgMTAzNzUsIDczOTAwLCAwLCA0MzE1LCAxMjY0NCwgMTI3NTE2LCAKICAgICA3NzkzNywgNDM2MzksIDQzMzQzLCA3ODc3NywgOTE3OTk4LCAxMTUwMSwgNDExNzcsIDEyODY4OSwgMCwgOTE3NzkyLCAwLCAKICAgICA5MjQxMywgODcxNSwgMCwgNDExNzksIDAsIDQzMzEzLCAwLCA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAxMjcxMDMsIAotICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTI3MTA2LCAKKyAgICA3Mzk2NiwgMCwgMCwgNTkyMSwgMCwgMjU5NywgMCwgNTkyMiwgMTE4OTAzLCA3Nzk0MywgNDE4NiwgOTI1MzEsIDExOTk2NywgCiAgICAgMTI3MTA1LCA2NzE4LCAwLCA0NDA2LCA3NDYwMSwgODQ4MCwgOTE5MiwgOTc0NywgMTI2NTMwLCA0NDEzLCA5MjE5NiwgCiAgICAgNDIyNjgsIDMxOTgsIDU5MjQsIDU5MjAsIDkyNDY5LCA2OTIxLCA3ODA4MSwgNzQwMDcsIDQyODY5LCA4NDE4LCAxMTY4MSwgCiAgICAgNDMxNjksIDEwMTc2LCAwLCA3NDIsIDAsIDI4OTMsIDEwNzcyLCA2NTI3NiwgNTkzNywgMTkxNCwgMjU1MywgMTE2ODIsIApAQCAtMTgwNjMsNyArMTgwODIsNyBAQAogICAgIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAxMjg3NCwgMTE5NTk3LCAxMTU5MCwgMCwgNzQwNDgsIAogICAgIDEyODM1MCwgODU5NSwgMCwgOTE3OTQ3LCA0MzcwMywgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDAsIDEyMzgxLCAKICAgICAzNDg4LCA1OTMzLCAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgCi0gICAgNDI1MzgsIDAsIDAsIDc0MTEsIDk0NjIsIDkxNzU1NCwgMCwgMCwgMCwgNDI3MzYsIDAsIDU3NTYsIDk4MzIxOSwgNzYzOCwgCisgICAgNDI1MzgsIDAsIDAsIDc0MTEsIDk0NjIsIDkxNzU1NCwgMCwgMCwgMCwgNDI3MzYsIDAsIDU3NTYsIDk4MzIyMSwgNzYzOCwgCiAgICAgNDE2NDIsIDQyNzY0LCAwLCA0MzEwOSwgNzYzNywgNTc1MiwgNzQwMzcsIDAsIDczODMyLCAxMjg4MjcsIDEyMDYzNSwgCiAgICAgMTI4MjMxLCA3ODMzNCwgMCwgNzYzNiwgNjUxNzEsIDkxMjQsIDAsIDc4ODkyLCAxMjA3OTgsIDI5MSwgMCwgMCwgMjAyNywgCiAgICAgNjYyMzAsIDEwMDgwLCA3ODEzNiwgMTA0MDMsIDAsIDQ2NDAsIDY0NzEzLCAxMDIyNCwgMTIwNDI5LCA0MjUxMiwgMTIwNDMxLCAKQEAgLTE4MDc1LDE3ICsxODA5NCwxNyBAQAogICAgIDc4MjcwLCAxMjc5ODIsIDk4MzE3MiwgNjQ3MjgsIDAsIDc4NjczLCA3ODY3NCwgMTY1OSwgOTE5LCA0Mjc4NCwgMTY3MSwgCiAgICAgMTk1MDg5LCA2MDY5LCA5MjE5LCAxMjg1NTgsIDE2NjEsIDEzMTIwLCA2Mzc4NCwgNjk4MTksIDEwMTQwLCA5NzEzLCAKICAgICAxMTkxNDMsIDAsIDAsIDk0MDUwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgMTk1MDk5LCAxMTk1NjcsIAotICAgIDE5NTEwMSwgOTI1NjEsIDQxNDYyLCAxMjA0NzAsIDE5NTA3OSwgNTQyMiwgMTI4MjM0LCAwLCAwLCAwLCAxMDIyOSwgCisgICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDk4MzYyOSwgMCwgMCwgMTAyMjksIAogICAgIDEwNjM1LCA4MjYsIDEyODA4MSwgMTk1MDgyLCAxOTUwODUsIDE5NTA4NCwgMTk1MDg3LCA2NDgzLCA5MjIxMSwgMTgwOCwgCiAgICAgNzg0OCwgMCwgODEwMCwgNzgyMjcsIDc4NjY5LCA3ODY3MCwgMTMzMDEsIDc4NjY3LCA5NjY3LCA3ODY2NSwgNzg4NzIsIDAsIAogICAgIDExMDAzLCA5OTA0LCAwLCAwLCAxMjA2OTAsIDkxNDQsIDEwOTIxLCAwLCA3ODY4MCwgOTg0MCwgNjUxMzEsIDc4Njc4LCAKICAgICA3Nzg0MSwgMTAzMTMsIDAsIDAsIDY0MzIwLCAxMDI2NSwgNzg2ODYsIDEwOTYyLCA3ODY4NCwgNDMwMDgsIDg5NDUsIAogICAgIDc4NjgzLCAwLCA0MSwgMTk1MDcyLCAxNzkyLCAxMjA1MTUsIDE5NTA3MywgODY1NSwgMTk1MDc1LCA5MjU0NCwgNzc5NTEsIAotICAgIDEyMDY2LCAwLCAzODUsIDQxNTIsIDI1ODUsIDEyNzgwNCwgMTE5MDY4LCAzMTI2LCAwLCA3NDEzNiwgMTA5NTcsIDk4MzY5NCwgCisgICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNzAzLCAKICAgICA0MzI1OCwgMTE5MTE2LCAxMjc4NzMsIDEzMTU3LCAwLCA5MTc1NDQsIDM1NzAsIDAsIDc0NDMsIDAsIDQ0MDA2LCA2OTk3LCAKICAgICA2ODAwNCwgMTI2NjMxLCA3ODc5LCA4NzM5LCAxMTA3NSwgMCwgNjUyMTYsIDAsIDY5Nzk1LCAyNTkzLCA4NDYzLCA3ODEwLCAKICAgICA5MTc4NjIsIDc4MzksIDExOTkxMywgNzg4MDYsIDExOTkxMiwgOTY5MSwgNDQxMSwgNzg4MDIsIDAsIDAsIDQzNDQyLCAKLSAgICA2OTg1MSwgNjUyNTQsIDEwMDY2LCA5ODM4ODAsIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAKKyAgICA2OTg1MSwgNjUyNTQsIDEwMDY2LCA5ODM4ODksIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAKICAgICAwLCAxMTk5MjMsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAxMTA1NiwgOTgzNTc0LCAxMTk5MjUsIDAsIAogICAgIDQxMTY1LCAxMTMyOCwgMTI0NTAsIDAsIDQxMTY2LCAwLCAxMjQ1NiwgMTE5OTE0LCAxNzEsIDU5NDEsIDEyNDUyLCAKICAgICAxOTQ3MDksIDEyNDU4LCAxMjUzMSwgNzg3NzksIDQzMDEzLCA2MzgwMCwgNzQxNjIsIDEyNzU2OSwgMTIwNDgzLCA5OTY5LCAKQEAgLTE4MTAwLDcgKzE4MTE5LDcgQEAKICAgICAxMzI0NCwgMTIwNDY2LCA0MjE2NywgNzQzNSwgNzgxOTMsIDUzODAsIDExOTA4NiwgNjkyMjUsIDExNTUsIDExMzY1LCAKICAgICA0MzEyNiwgNzc5NzIsIDAsIDY1Njg0LCAwLCA1NjAxLCA2NTE5MiwgNDI3NjUsIDYzNzUyLCAwLCA3OTg3LCAxMjg1NDMsIAogICAgIDExNzIsIDY5Nzk5LCA2Nzg2LCA0MzYwMSwgMTIwNDc2LCA3NDEyNiwgNTYwMywgMCwgNDQ3MywgMCwgMTk0ODIzLCAwLCAKLSAgICA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAxMjczODQsIDUzNDcsIDY5ODAyLCA5ODM2MjMsIDczODY4LCAxMTg5NDQsIAorICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYzMiwgNzM4NjgsIDExODk0NCwgCiAgICAgMTA1ODgsIDAsIDAsIDYzNzU1LCAwLCA1MzQzLCA3ODQyMiwgMTIwNjYxLCA0NTU1LCA1MzQxLCAwLCA3MDA3MSwgMTI4NjcwLCAKICAgICA1MzUxLCA3ODY3NSwgNDMxMDQsIDY1MjQ0LCA5MTc4OTIsIDY0NTQxLCA0MjUxOSwgNzQ0NzIsIDAsIDAsIDc0NzY1LCAKICAgICA5MTc4ODgsIDEyNzUxMCwgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIApAQCAtMTgxMTAsMTQgKzE4MTI5LDE0IEBACiAgICAgMCwgNDkxNiwgMCwgMzgwLCAxMDk1OCwgNjY1NjMsIDc3OTU1LCA2OTc3MywgOTc3MywgMTMxNjcsIDEyOTE4LCA0MTA5NiwgCiAgICAgNzM5ODAsIDY5MjQ1LCA3ODI1NCwgOTE3ODkzLCAxMDY4NCwgMCwgOTE3ODk2LCAwLCA3OTQ2LCAxMjU0MSwgODE4MiwgCiAgICAgNjc1ODYsIDY5NzgwLCAwLCAwLCAwLCAwLCA5MDA1LCAxMjI1LCA2NjMwLCAwLCAwLCAwLCA2ODAxMSwgODg0NywgMCwgCi0gICAgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCA5ODMyMDYsIDkyNjA5LCAwLCAwLCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIAotICAgIDk4Mzg0OSwgNTYwNywgNDEwODksIDAsIDAsIDc0MjU2LCAyNjY1LCAxMTMwNCwgNDM3NTEsIDc0MjAwLCA0OTcwLCA4NzY0LCAKKyAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwOCwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCisgICAgOTgzODU4LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAogICAgIDEyMDQ1OSwgODkzNCwgOTI3MjYsIDQxNTY2LCA0NDkyLCAwLCA2NTAxMSwgNDEwOTAsIDAsIDAsIDExODgsIDcyNTQsIAogICAgIDExMDAsIDAsIDEyODMwMSwgNDEwODEsIDI5MTIsIDExNzQ5LCA2OTc5MiwgMCwgNjgwMTksIDM1NzIsIDEwMDIzLCA0OTU5LCAKLSAgICAxMzA3OSwgMCwgOTgzMjY4LCA5NzI5LCAwLCAwLCAwLCA0MzM2MSwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAKLSAgICAxMzMwNCwgMTI4MjkwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCA5ODMzMDEsIDk3MiwgCi0gICAgNDE0NTMsIDk4MzQzNCwgMCwgNzM4ODMsIDY4MDIyLCA3Mzk0NSwgOTgzNzI2LCAyMjg4LCAxOTk1NSwgOTUzOCwgMCwgCi0gICAgNjk4MDcsIDAsIDAsIDAsIDAsIDExMzk2LCA5ODM0MzIsIDExMDE5LCAwLCAwLCAwLCA2ODAyMCwgNDEwNzgsIDcxMzY1LCAKKyAgICAxMzA3OSwgMCwgOTgzMjc2LCA5NzI5LCAwLCAwLCAwLCA0MzM2MSwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAKKyAgICAxMzMwNCwgMTI4MjkwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCA5ODMzMDksIDk3MiwgCisgICAgNDE0NTMsIDk4MzQ0MiwgMCwgNzM4ODMsIDY4MDIyLCA3Mzk0NSwgOTgzNzM1LCAyMjg4LCAxOTk1NSwgOTUzOCwgMCwgCisgICAgNjk4MDcsIDAsIDAsIDAsIDAsIDExMzk2LCA5ODM0NDAsIDExMDE5LCAwLCAwLCAwLCA2ODAyMCwgNDEwNzgsIDcxMzY1LCAKICAgICAyNjEsIDU5MjcsIDc3OTEsIDAsIDczNjIsIDAsIDEwNjk2LCAwLCA2MDczLCA5ODM4LCAxMTg5MjAsIDAsIDYwNzUsIAogICAgIDkzOTk1LCAyODIsIDEyNjUxMCwgNjQzNywgNzQwNzgsIDEyODAwMCwgOTgwMSwgMCwgNzQxNzcsIDAsIDAsIDM0NzQsIAogICAgIDExODc4NywgMCwgMTIwNjU1LCA2MDgxLCAwLCA3ODg3NCwgNzQwNzYsIDc4ODc5LCAwLCAwLCAwLCAwLCAwLCA4NzUxLCAKQEAgLTE4MTM4LDcgKzE4MTU3LDcgQEAKICAgICA0NTY0LCAwLCAwLCA3NDI3MSwgNzM3NTMsIDgzNzQsIDk4MzE1NiwgMCwgNjgyOSwgNTIyNSwgMTI4ODA3LCAxMjczODUsIDAsIAogICAgIDAsIDExOTYxNSwgMCwgNzQ3OTMsIDU2MjYsIDczODA3LCAxMTc3MSwgNzQwNzUsIDEyNzIzNiwgMTI4MDE5LCA0MjYxNCwgCiAgICAgNTM1MywgNTYyNSwgNzQxNzksIDAsIDAsIDEwMTAsIDY0NTcyLCA0MTc4MCwgNDI2MjMsIDY0Mjc3LCA2OTk0MiwgNjk1MiwgCi0gICAgOTgzMjY0LCAxMjA3NTIsIDc4NzYyLCAyNTkwLCA1NjI5LCA2NTU1MiwgNzU1MSwgMTAzMjUsIDU2MzIsIDEwNDcxLCAKKyAgICA5ODMyNzIsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAogICAgIDEyMDAzOCwgMTIwMDI3LCAxMjAwMjgsIDEyMDAyNSwgNTYyOCwgMTIwMDMxLCA5NzAsIDEyMDAyOSwgNDc3MiwgMjQwMCwgCiAgICAgNTYyNywgMTIwMDE3LCAxMjAwMTgsIDEyMDAyMywgNjQyNzUsIDEyMDAyMSwgODc4NiwgMCwgMjAzLCAwLCAwLCAwLCAwLCAKICAgICA3ODM1MCwgMCwgNjQzNzgsIDQyMDU0LCAwLCAwLCA1NTQsIDExOTY0OSwgMTEzNTgsIDAsIDEyMTgyLCA0MjA0OCwgMTEwNjUsIApAQCAtMTgxNTAsOSArMTgxNjksOSBAQAogICAgIDExNjgsIDkyNTEsIDkwODIsIDExOTk2NCwgNjQwNTUsIDQyNzgxLCAzODY2LCAxMjMyMywgNDE1MTIsIDczODA1LCA2ODEyMSwgCiAgICAgMCwgNDE0OTQsIDkyMzE2LCA0NjYwLCAwLCAxMDQwNSwgMCwgNzg4MDMsIDAsIDAsIDQyMDQwLCA3MzkxOCwgMTE5NjI3LCAKICAgICA3OTQ0LCA0MTQ1NCwgMTI2MDUsIDAsIDQyMjA1LCA0MTQ1NSwgMjM2LCA2NDA1MSwgNzg4NjcsIDgyMTQsIDAsIDAsIDAsIAotICAgIDQxNDU3LCA5ODM5NjEsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgOTE3ODY0LCA3NDEzLCA2ODAxMiwgNzgwMjksIAorICAgIDQxNDU3LCA5ODM5NzAsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgOTE3ODY0LCA3NDEzLCA2ODAxMiwgNzgwMjksIAogICAgIDg3NjYsIDAsIDc4MDc5LCA1ODU0LCAxMjc5NzQsIDEwNTgzLCAwLCAxMTk5ODksIDAsIDEwNDE2LCA5MTc4NjksIDM4NzIsIAotICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTU4LCAKKyAgICA5MTc4NjgsIDAsIDg0MjksIDAsIDExODgwNiwgMjgzOCwgMTI4ODAyLCAwLCA5MTc4NjYsIDAsIDAsIDAsIDk4Mzk2NywgCiAgICAgOTQwMDUsIDExMDk2LCAxMjA4MTMsIDEwNTUzLCAxNjYyLCA4NDgzLCAxMjAzOTYsIDQzNjA1LCA1ODkyLCA0MzQxOCwgMCwgCiAgICAgNzM3NDIsIDY2LCA2NSwgNjgsIDY3LCA3MCwgNjksIDcyLCA3MSwgNzQsIDczLCA3NiwgNzUsIDc4LCA3NywgODAsIDc5LCAKICAgICA4MiwgODEsIDg0LCA4MywgODYsIDg1LCA4OCwgODcsIDkwLCA4OSwgMTE5ODYyLCAxMDM1NywgNzM4NSwgODE3MCwgMTcwNCwgCkBAIC0xODE2Nyw3ICsxODE4Niw3IEBACiAgICAgMTI0NzIsIDAsIDY5ODY0LCA3Njk5LCAxMjM5MywgMCwgMCwgMCwgNzQ1MTgsIDgyMjMsIDAsIDQyNjEsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEyODMwMiwgMCwgMTI4MDQ2LCA0MzQxOSwgMCwgNjQ1NTQsIDEwNTc0LCAzODc4LCAwLCA0MjM1MiwgMTc1MiwgCiAgICAgNzM3ODUsIDAsIDQyNTA2LCAxMjg1NDEsIDEwMTk5LCAwLCAwLCA2ODAyMSwgNjU5MTksIDAsIDY2OTUsIDcyMCwgMzI0LCAwLCAKLSAgICAwLCA0MzQwNiwgOTgzNzI3LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCisgICAgMCwgNDM0MDYsIDk4MzczNiwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDQzNDc0LCAwLCA2NDQ4OCwgMCwgMCwgNjQwNDEsIAogICAgIDc0Nzg3LCAwLCA3ODg2NSwgOTIyNTgsIDY1NTk3LCAwLCA3ODg2MywgMCwgMTMwMiwgMCwgNzg4NjEsIDExOTEzNCwgMCwgMCwgCiAgICAgNTIwNCwgNzQ3NzQsIDQzNDA0LCAxMTgzNSwgMCwgMzk5NSwgNjgzNjAsIDY1NjA4LCAzNzE0LCA5MjE5MCwgMCwgMCwgCiAgICAgMTA5OTksIDExNzUwLCAwLCA0MzI1MSwgNjg2NjAsIDQzMzAxLCAwLCAxMjA1NTcsIDgxMzAsIDg2NzIsIDEwODQ1LCAKQEAgLTE4MTc1LDIyICsxODE5NCwyMiBAQAogICAgIDYxMiwgMCwgNjQ0MDEsIDY2NDQ4LCA2ODM3NiwgMCwgMTY3NCwgMCwgNTgyMywgOTgzMTYzLCAxMjI4MCwgMCwgNTQwLCAKICAgICA3NDU2NCwgMTE5MDE3LCAwLCA4NDMyLCAwLCAxMTA3MywgMCwgNjQzMTYsIDAsIDAsIDgyMCwgNDE3NDEsIDAsIDEyMDY2NywgCiAgICAgMCwgNjQ2ODQsIDEyNjk5MiwgMzM1OSwgNzgwMCwgNjk5MzQsIDY1MTc3LCA2MjI2LCAzNTMsIDEyMzk2LCAwLCAxMTk2MTIsIAotICAgIDY0NzQyLCAxMjg2ODIsIDEyMDI4MiwgMCwgOTgzNDQyLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIAorICAgIDY0NzQyLCAxMjg2ODIsIDEyMDI4MiwgMCwgOTgzNDUwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIAogICAgIDk0ODEsIDQyNDE4LCA3MDA1OSwgNDExNTcsIDAsIDExOTUsIDY0ODk4LCA3OTI0LCAwLCA0MTE1MSwgMjAxMCwgMCwgCiAgICAgNDEzMjgsIDQyMzQ0LCAwLCAxMjQwOSwgMCwgNDM2MCwgMTI3MDA5LCA5NzM5LCAxMjg1NTAsIDY5OTMzLCA3MzkyMSwgMCwgCi0gICAgNDI1MjEsIDg1MzksIDk4MzcxNiwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ0NywgNDM3OTAsIAorICAgIDQyNTIxLCA4NTM5LCA5ODM3MjUsIDAsIDExODk4NiwgMCwgNDc4OCwgMCwgNjgwMjMsIDY1NzM0LCA5ODM0NTUsIDQzNzkwLCAKICAgICAwLCAxMzA3NSwgNzQ0MjksIDk0MDYzLCA2NDU2OSwgNDM1MzIsIDEwODM3LCAyNDkyLCAxMjcxOTcsIDExODkwMSwgNjg2MzcsIAogICAgIDQxMTM2LCA0Mzc4NSwgMTE4MTMsIDk2NDksIDQxMTU0LCAxMTk2MTcsIDUxMjgsIDQwMzgsIDQxMTQzLCA2NTYwNCwgCiAgICAgNjQ4NTksIDQxNTkyLCA2NzcxLCAxNjQ4LCA1NDM1LCA5MTc4MzcsIDY3MzQsIDQxMzQzLCAxMTk4NDgsIDY1NDM5LCAKICAgICAxMjcwOSwgNjk4NiwgOTIzNjQsIDY4MDE1LCAwLCA0MTM0OSwgNzAwMjEsIDEyNTgxLCAxMDM3NCwgNTE3NSwgMCwgNzM4MDYsIAogICAgIDEwMjU0LCAwLCAxMDI3OCwgMTAyNjIsIDY5ODU4LCA0MTM0NiwgMCwgNjA3LCAwLCAxMTk4NTIsIDEyODg0NiwgMTI5MjMsIAogICAgIDEwMzE0LCAxMDI4MiwgNjU0NzcsIDEwMzc4LCAxMjAyOTcsIDQwOTc2LCA4MjY1LCAwLCAxMTk4MzQsIDQwOTc1LCA1ODQwLCAKLSAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg4OCwgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCisgICAgNDI4MzgsIDAsIDQwOTc4LCA5ODM4OTcsIDExOTg0MCwgMCwgOTgzMDcxLCAwLCA2NjQ0NCwgMTA1MzgsIDAsIDI1NTAsIAogICAgIDExOTgzNiwgNjc3OSwgMCwgMCwgMzUyNSwgNjgyNCwgMTE4ODg2LCAwLCAwLCA1NjE5LCA2NTgyMiwgMTI2NTY3LCAKICAgICAxOTQ4ODIsIDc0NTUsIDAsIDU2MTYsIDExNDg2LCA5NjU2LCAwLCAwLCAxMDcyNywgNTYxNSwgMCwgMTIwNTUxLCA0MjM4MCwgCiAgICAgNjQ4OTUsIDQzNjkzLCA2NjQ1MSwgODA4LCA1NDU1LCAxMTM0NywgMCwgMTAyNiwgNTYyMCwgMTk0ODg3LCAwLCAxMTM1MCwgCiAgICAgNTYxNywgMCwgOTIyNSwgNjQ2MzksIDEyNzA3MywgOTE0NSwgMTI4MDYwLCAxMzM4LCAxMjA1ODEsIDk4MzE1OCwgMTI3MzksIAotICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNjk1LCAKKyAgICA0NjAzLCAzMDg0LCA5ODMxNTUsIDkyNDg0LCA5ODU4LCA2MDM3LCAwLCAzOTc0LCA3ODIxMywgMTAyOTAsIDk4MzcwNCwgCiAgICAgMzA4MywgMTAzMjIsIDAsIDAsIDAsIDQxMDM2LCAwLCAwLCA0MzMyMSwgNjU2MDYsIDAsIDQxMDMyLCA0MjM4OCwgMCwgCiAgICAgNjQ3MDAsIDEwMDExLCAxNDQ1LCA0MDk2MSwgMCwgMTE5MTA1LCAwLCA0MDk2MCwgMCwgMTk0ODkxLCAwLCA0MDk2MywgCiAgICAgNjQ5NTIsIDEwNDAyLCAwLCAwLCA5MjMwNCwgMTA2MDMsIDAsIDAsIDk4MzExMywgMCwgNjcxNCwgMTAwODMsIDEyNzA2OSwgCkBAIC0xODIwMiw5ICsxODIyMSw5IEBACiAgICAgNDE5NzYsIDk3MjAsIDkxNzYwNiwgMTE3NjcsIDQxOTcwLCAxOTQ1OTYsIDU4MzYsIDEyMzU4LCAwLCA0MzU1LCA5MDQ4LCAKICAgICAxMjE4MCwgNjUwMjcsIDY0NjgwLCAxMzAzOCwgNDM2OTksIDAsIDQxNDg4LCAxMjgwODcsIDg1MjcsIDE5NDkxNywgMTIzNjIsIAogICAgIDEyNDM1LCAxMjM2MCwgNDEwNTMsIDMyNjYsIDAsIDEyMzU2LCA4NjE2LCA0MTQ2NiwgMCwgOTI1ODgsIDExNDUwLCAwLCAKLSAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4MzczNiwgMTE5MTgyLCA2OTI0NCwgMCwgCisgICAgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCA5ODM3NDUsIDExOTE4MiwgNjkyNDQsIDAsIAogICAgIDAsIDExNzU5LCAxOTQ5MDMsIDYzNjgsIDc0ODIzLCAwLCA0MTQyMywgODA3OCwgMTA1MDQsIDEyNzU1OCwgNDE2OTgsIAotICAgIDQyMjM3LCAwLCA3MDAyLCA5ODM2NjksIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIAorICAgIDQyMjM3LCAwLCA3MDAyLCA5ODM2NzgsIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIAogICAgIDEwNDY2LCAxMzA5OSwgMCwgMCwgMCwgNjQzNSwgMCwgMTEzNjIsIDAsIDAsIDY1MzgyLCAwLCA0MTQyMCwgMCwgMzYyNSwgCiAgICAgNzgxNTcsIDQxNDA5LCAwLCA2OTYzOSwgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCA0MzMxNywgMCwgMCwgMCwgCiAgICAgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAxMjgyMTIsIDAsIDQxNDE3LCAxMjYxLCAwLCAwLCAxMjEwMiwgMTE5NjYyLCAKQEAgLTE4MjE0LDkgKzE4MjMzLDkgQEAKICAgICA0MTQ2MSwgMTI4ODIzLCAwLCAxMjc5MTIsIDAsIDg4MTksIDEyNjYzLCAwLCA0MTE4NCwgNzQwMTQsIDIzMiwgNzQ4MzUsIAogICAgIDEyMDY0NiwgOTE2OCwgNjU3ODYsIDAsIDAsIDAsIDkwOTQsIDAsIDExNzU4LCA2ODQyNSwgMCwgMTA2NCwgNDI0NjcsIAogICAgIDEyODA0NCwgMTAxMTUsIDE5OTI0LCA5MjcxMSwgMCwgNzg2MiwgNjQ1NTEsIDEzMjI0LCA4NTE2LCA0MTg2MiwgNjY2NTAsIAotICAgIDc1NjEsIDc4NjE4LCA2OTc5MywgMTg3OCwgMCwgOTgzMjYxLCAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIAorICAgIDc1NjEsIDc4NjE4LCA2OTc5MywgMTg3OCwgMCwgOTgzMjY5LCAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIAogICAgIDM3ODcsIDQxMTc0LCAwLCA0MTQ1OCwgMCwgNDE0NjMsIDQyNDEzLCAxMTI5MiwgMjQwNiwgNzc1LCAwLCA2NTU4NCwgCi0gICAgNjk5MjMsIDYwNzQsIDk2MTgsIDEyODY2OCwgOTgzOTQzLCA0MzQ0MCwgMCwgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgCisgICAgNjk5MjMsIDYwNzQsIDk2MTgsIDEyODY2OCwgOTgzOTUyLCA0MzQ0MCwgMCwgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgCiAgICAgMTIwNjAwLCA0MTQ1NiwgMCwgMTU5OSwgMTEzMzMsIDAsIDY3MDMsIDg1MTMsIDAsIDE2MTMsIDAsIDY4NDU2LCAxMjU5OCwgCiAgICAgOTgzMTkxLCAxMjA3MzQsIDc4NzQ1LCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAxMDU0MiwgOTkzNywgNzg3NDYsIDcwMDI5LCAKICAgICA5OTA1LCAwLCA2NTczMCwgMCwgMTIwMzc0LCA4NDI3LCAxMjAzNzUsIDU1MjQ2LCAxMjAzNzYsIDAsIDExNDk3LCA2NDY4NywgCkBAIC0xODIzNiwyMSArMTgyNTUsMjEgQEAKICAgICA0MTI4NywgOTI2MTAsIDAsIDAsIDQyMjE5LCAxMjgyNTcsIDAsIDQxOTg3LCA0MTY3NiwgOTgzMDU5LCAxMjA4MjMsIAogICAgIDk4MzE0NCwgNDE2NzAsIDAsIDkyNTkwLCAyNzk2LCA1NTI5MSwgMTE2ODMsIDk5MDIsIDc0NTIxLCA2Nzk4OCwgMTE0NTEsIAogICAgIDk4MzExMSwgMTI4ODIyLCA0MjYzMSwgMjM1OSwgMCwgNjc4NDQsIDc0MTY0LCA0MTIzOCwgNTQ4LCAxMTQwNSwgMTMxMzMsIAotICAgIDY0MzY4LCA5ODMyMzMsIDEyODc5NSwgMCwgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIDEyODIzOCwgMTYxNCwgCisgICAgNjQzNjgsIDk4MzIzOSwgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKICAgICA0MzY2MSwgNjQzNTYsIDY2MzA3LCA2NjUxLCAxMzU4LCAwLCA0MjgsIDk2MjAsIDE0NjYsIDc4MTEyLCAxMDk4MiwgCiAgICAgMTE4ODMxLCAxMzMzLCA3MTA0LCA0MDcsIDY0MjUsIDEyODgzNCwgNzQyNTMsIDAsIDAsIDAsIDU4MDQsIDExOTc2LCA4NTU0LCAKICAgICA5MjcyMSwgMCwgMCwgOTA1NywgNDIyOTQsIDQxMjE4LCAwLCAwLCA3ODEzNywgMTg4MywgMTA5NTIsIDgwNDgsIDc4MTQyLCAKLSAgICA0MTIyNSwgOTI2MjEsIDQyOTE1LCA5ODM2NjcsIDEyODY4NCwgMCwgNDQwNywgMCwgNjU4MDksIDExOTA3NCwgMTk0ODIxLCAKKyAgICA0MTIyNSwgOTI2MjEsIDQyOTE1LCA5ODM2NzYsIDEyODY4NCwgMCwgNDQwNywgMCwgNjU4MDksIDExOTA3NCwgMTk0ODIxLCAKICAgICA4NDQ4LCA3MTQxLCA3NDE4MywgMCwgMTI2NzUsIDEyNjU5LCAwLCA0MjM2MywgMTIwNjI0LCAxOTQ4MjQsIDU1MjczLCAKICAgICAxMDc2NiwgMTIwMTIsIDIzODYsIDY0NzMyLCA5MTcwLCA5MTc4MjEsIDkxMjMsIDY0NTg1LCAxMjA1MDAsIDExOTE1OCwgCiAgICAgNzE0MCwgMTA5NzcsIDEyNzM3OCwgNDE2NCwgOTA4MSwgMCwgMTIwNTY5LCA0MjA0OSwgNDIwNDIsIDg3MDksIDEyODI4MywgCiAgICAgMTI2NDc3LCAxMjA2MzcsIDQyNDE5LCA2NDc5OSwgNDIwNDcsIDAsIDAsIDg0NzAsIDExODA3LCA2NTg5NywgNTc3LCAwLCAKLSAgICA5ODM3NTEsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCisgICAgOTgzNzYwLCA3NDMwMCwgMCwgMTI3MzA4LCA3NDg0MCwgMCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgNDI2NDMsIAogICAgIDk2ODMsIDQzNDg2LCA3NDM0NCwgMCwgMjUzNiwgMCwgNjYzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MzE3LCA2OTk0NSwgCiAgICAgNjYzMTUsIDIxMDYsIDEyMDIyMiwgMTEyNzMsIDAsIDQzMDA0LCA3NTQxLCAwLCAwLCA5NjEsIDY0MzA3LCA2NjMyNCwgCiAgICAgNjQ5MDYsIDEyODU5MSwgMzEwNiwgNjU5MTcsIDQxMjg0LCAxNjk2LCAwLCA4OTEsIDEyMTA1LCAwLCA0MjYyNCwgMTI4MDIsIAogICAgIDMyNjQsIDg4MjQsIDEzMjY4LCA0MzAwMywgMTA5MzYsIDAsIDAsIDAsIDE5NDgyNiwgOTI2ODgsIDAsIDIzMjIsIDEyMDM3MSwgCi0gICAgOTgzNTg0LCAxMTQ0OSwgMTI4MTg3LCA0Mjg2OCwgNDEyODUsIDM1NDcsIDAsIDAsIDEyODc5MywgOTgzMzkwLCA0MzIxNiwgCisgICAgOTgzNTg0LCAxMTQ0OSwgMTI4MTg3LCA0Mjg2OCwgNDEyODUsIDM1NDcsIDAsIDAsIDEyODc5MywgOTgzMzk4LCA0MzIxNiwgCiAgICAgNjA4OSwgNzg2ODIsIDAsIDEyMDU3OCwgNDE3MCwgMTAyOSwgMTI3NzYxLCAxMjcwMzYsIDExOTIyNCwgNDIzNzQsIDAsIAogICAgIDc0NCwgMCwgMCwgMCwgNjU4MjMsIDEyNzgyNiwgMCwgMzU1MSwgMCwgMCwgNDYyMywgNTUyNjgsIDAsIDQ1OTgsIDk4MzE2MiwgCiAgICAgNjUxMzYsIDEyNzEzNiwgMCwgMCwgMTA4NTEsIDAsIDYxNzksIDkyNjAyLCA2MTgwLCAwLCAxMTk1MiwgMTIwNzc4LCAKQEAgLTE4MjYwLDEwICsxODI3OSwxMCBAQAogICAgIDIzMDgsIDAsIDc0MTQ5LCAwLCAyMzE4LCA5ODMxODMsIDY2MzYxLCA4MTk4LCAwLCA2NDM2MCwgMTI2MDEsIDQyNTM2LCAKICAgICA2NTI2NiwgMTIwODI3LCA3NDMwNywgOTI0NjIsIDY5NzAsIDU0MDQsIDQzMzMyLCAzNjY3LCA3OTM2LCAxMjkyNSwgCiAgICAgMTI2OTg5LCA2Mzg1LCAwLCAwLCAxMTg5NDksIDEwODc0LCA2NTUwNSwgMTI4MDgzLCAwLCA0MjA1MywgMjA3NSwgNDIwNTcsIAotICAgIDExMDgzLCA0MjA1MiwgMCwgMCwgNjc2NTEsIDAsIDk2NjUsIDkyMzAwLCA5ODM2NTcsIDEzMTgxLCAwLCAwLCAwLCA3MDA4OCwgCi0gICAgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgOTQwOTYsIDk4MzkzNywgCisgICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY2NiwgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKKyAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTQ2LCAKICAgICA0MTE0OCwgODY4MywgNzU5NCwgMTI3NTE5LCAwLCAxMTkwOTAsIDEwODY5LCA0MzQ1OCwgNDExNDYsIDkyNDA3LCAxMTQ0MSwgCi0gICAgMCwgMzUxMiwgMTE5NjMzLCA5ODM3MDAsIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAKKyAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwOSwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAogICAgIDY5NzQyLCA0MTU0NCwgNjUxNDYsIDAsIDAsIDAsIDAsIDE5OTQyLCAwLCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgCiAgICAgMzI3MSwgNzM4MDQsIDY0NzExLCAwLCA5NDA2NCwgMCwgMCwgMzgwNCwgMTMwNzAsIDExNTU3LCA0MjA0NCwgMCwgMTA5NSwgCiAgICAgMCwgMzU5OSwgMTI3Nzc0LCAwLCAxMjg4NjEsIDg1MTQsIDAsIDAsIDAsIDc0MzQ2LCA2NjY5NywgMCwgMTE2ODQsIDAsIApAQCAtMTgyNzIsMjMgKzE4MjkxLDIzIEBACiAgICAgMCwgMTI3NzcyLCAwLCA5MTc1NDIsIDAsIDAsIDY1MzksIDAsIDAsIDAsIDE5NDg1NiwgMCwgMTIwNDkyLCA0MTE5MCwgCiAgICAgMzk3MywgMTE5MzY1LCA0NTc1LCA0MTE5MywgNzk4MiwgNDI5LCAwLCAxMjcxOTQsIDAsIDE5NDg1NCwgNjU3OTIsIDAsIAogICAgIDExODk2OCwgNjQxNywgMTE4OTE4LCA3ODE3OCwgMCwgMTk0ODUwLCAwLCAwLCA0OTE5LCAxMDU5MCwgMTI4NTU2LCA3NzU1LCAKLSAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY1OSwgCisgICAgMCwgMCwgNjQ1NDgsIDEyMDUwNiwgMTYyMSwgMTAyMTQsIDY1MTI2LCAwLCAxMjcwMDQsIDAsIDEyMTg4LCA5ODM2NjgsIAogICAgIDE2MTcsIDgwNTAsIDAsIDUwMTUsIDAsIDExOTE3NCwgNDI1OTAsIDE5NDg3MSwgMTc1NiwgNzgxODEsIDAsIDY1NzY4LCAKICAgICA2MzUyLCA0MTg5MiwgMCwgNzU1NSwgMTMxMDMsIDU0MDgsIDI4MTcsIDEyMTQsIDY5OTE5LCA5MjMzNSwgOTgzMTI1LCAwLCAKICAgICAwLCAwLCAxMjcxOTUsIDc5NTcsIDg2ODksIDY0NzIzLCAxMDU2LCA0Mjg5NiwgNzQxNDcsIDE5NDgxMywgMCwgNTUyODYsIAotICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTM5LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAotICAgIDk4MzI1MiwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAotICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI0NiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKKyAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDk4Mzk0OCwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAKKyAgICA5ODMyNjAsIDAsIDcwMDc5LCA4NDYxLCAxMjgxMDIsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCAKKyAgICA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCA5ODMyNTIsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDcwMDc3LCAxMTcwOSwgCiAgICAgOTIyODgsIDc0NDQ2LCAwLCA5MjUzMiwgMCwgMTEzMzgsIDEyMDc2OCwgMzI3NiwgMCwgMCwgNjU5MjgsIDAsIDAsIDY1MDIxLCAKICAgICA2NDc5NSwgNzQ1NzQsIDAsIDEwMDQ3LCA3ODgxNCwgMzI2MiwgNzg4MTEsIDQyNzExLCAwLCAwLCA2ODQ3OCwgMTYzLCA1NzYsIAogICAgIDk4OTUsIDE2NTUsIDc4ODE3LCA3NDU5MSwgNzg4MTUsIDc4ODE2LCA5ODMxMjIsIDAsIDAsIDAsIDEwMDM5LCAwLCAKLSAgICA5ODM5MzYsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDkyMzgyLCAwLCAwLCAwLCAKKyAgICA5ODM5NDUsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDkyMzgyLCAwLCAwLCAwLCAKICAgICA2Nzg0OCwgMCwgMCwgMCwgODg4NywgMTI3NTIxLCA3Mjk1LCAxMTAzMSwgMCwgNDMxNTcsIDAsIDg5NDYsIDEwMzQ4LCAKLSAgICAxMDQxMiwgODc1NSwgMCwgMCwgNTcxOCwgMTMyMjEsIDAsIDAsIDc4MTM1LCAwLCA5ODM3MDIsIDg4MTAsIDc0NDk5LCA2ODYsIAorICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcxMSwgODgxMCwgNzQ0OTksIDY4NiwgCiAgICAgMCwgNzEzNjIsIDQ2MTksIDExODk1NCwgNjY1NCwgNzM3NjksIDc0NDI2LCAwLCAxMjA0MCwgNjU2ODksIDEwMTI4LCAKLSAgICA2NTExOCwgMCwgMTE5MTUxLCA3NDIwNSwgOTI2NTEsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCA5ODM2MzksIDAsIDY1NDU1LCAKKyAgICA2NTExOCwgMCwgMTE5MTUxLCA3NDIwNSwgOTI2NTEsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCA5ODM2NDgsIDAsIDY1NDU1LCAKICAgICAwLCA5MjI0NiwgMCwgMTE5MTI5LCAwLCAxMjg4NiwgMTI3OTIwLCA2NjYyNCwgMCwgNDM1NTcsIDEwMzAwLCAxMDE2MSwgCi0gICAgMTAzOTYsIDc0MTM1LCA5ODM0NDUsIDExODk0NSwgNzgxMTgsIDczODUxLCAzMDEwLCA2NDQxLCA3ODEyMiwgMTQ1OCwgCisgICAgMTAzOTYsIDc0MTM1LCA5ODM0NTMsIDExODk0NSwgNzgxMTgsIDczODUxLCAzMDEwLCA2NDQxLCA3ODEyMiwgMTQ1OCwgCiAgICAgNDE0NzUsIDEyODY3MiwgOTM5NzUsIDAsIDExNDc5LCAwLCAxMjAzNTYsIDYzNTAsIDEyODY0LCA2OTY3NCwgNzgxMTQsIAogICAgIDEwNjEsIDY0NzgwLCAyMDAxLCA0MzExMSwgNTUyMzAsIDEyODY4NiwgNDA1MiwgMCwgNzYyNiwgMCwgMCwgMTA0NSwgMCwgCiAgICAgNTYzMSwgNDExMTMsIDAsIDAsIDQzNzA3LCA3NDEyNywgMCwgMCwgODQ4NiwgMCwgNzM3NTgsIDIzMzUsIDQzNjIsIApAQCAtMTgzMDQsOCArMTgzMjMsOCBAQAogICAgIDkyMjQ1LCA0NDAsIDAsIDEzMDg1LCA5MjMzLCA3NDIxNiwgMCwgMCwgOTk1NywgMTI4Mjg1LCA2NjQ0NywgODA0NiwgCiAgICAgNjQ5NjMsIDY1Nzc3LCAxMDEyNSwgNzQyMTIsIDQyODE5LCAxMDkxMCwgMCwgMTUyMSwgOTg5NiwgOTM5NjUsIDEwNDg3LCAKICAgICA2OTg3OCwgMTI1MjcsIDAsIDc5NzAsIDAsIDEyODY2MCwgMCwgNjU3NjksIDUyNDMsIDk4NDksIDUyMzksIDY1NzcxLCAKLSAgICA5ODMyMjksIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCi0gICAgOTgzMjMxLCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCisgICAgOTgzMjM1LCAwLCA1MjM3LCA2OTcxNCwgMCwgMTAxMDMsIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDIyODMsIAorICAgIDk4MzIzNywgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIAogICAgIDkyNzE3LCA3MDA3NCwgNDc3MCwgMCwgOTE3NTY3LCA4NzMxLCA2NTM3OCwgMTI3MzYyLCAxMjA2MTksIDkxMjIsIDEyODAzMywgCiAgICAgMTI2NjAwLCA0Nzc0LCAzMDE5LCA5OTk3LCAxMjgzNCwgMCwgOTQ1NiwgMTAyMTUsIDEyMDU0NywgMCwgMCwgMCwgMCwgCiAgICAgNzQ3NzYsIDQyODEsIDQ3NjgsIDAsIDQxNTM1LCA0MDk5LCA5MDE3LCAwLCAwLCA3ODA5NSwgMCwgNzgwOTYsIDAsIDAsIDAsIApAQCAtMTgzMTksMTAgKzE4MzM4LDEwIEBACiAgICAgNzYzNCwgNjUxNjcsIDk4NDUsIDAsIDAsIDU3MDEsIDk3MjIsIDQxNDkwLCA5ODMxNTMsIDE0MjYsIDY4MjE3LCAwLCAKICAgICA2ODQ0NywgNDIyMDQsIDU1MjcwLCA4NTcxLCAxOTQ5OTEsIDc4MDY3LCAwLCA3ODgxOCwgOTI3MTksIDQzMTgyLCAxMjE4NCwgCiAgICAgMCwgNDIwMjIsIDAsIDEwMjgxLCAwLCA1NjUwLCA0MzE5NCwgNjQ3MTIsIDEwNzQ0LCAwLCA5OTAsIDU2NDcsIDAsIDczODcsIAotICAgIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIDEyODc5LCAxMTAxOCwgOTgzOTIxLCAzOTQ1LCA5MjU4OSwgMCwgMCwgMCwgMCwgCisgICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MzAsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKICAgICA3ODIxMiwgMTI3NzQ2LCAxMDIwLCA3Mzc2MywgMCwgNzg3MzEsIDU2NDgsIDY0NzQ4LCAxOTQ5MTAsIDc4NzMzLCAxMDIwNSwgCi0gICAgMzU0NSwgOTgzNTg1LCA2OTg0LCAwLCA3NDA1MSwgOTgzNjQ2LCA0MzI0MiwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAKLSAgICAwLCA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMTI3MTQ1LCA5ODM2NTMsIDExODgzNiwgOTgzNzM5LCA3ODQyNywgMTE0MCwgCisgICAgMzU0NSwgOTgzNTg1LCA2OTg0LCAwLCA3NDA1MSwgOTgzNjU1LCA0MzI0MiwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAKKyAgICAwLCA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMTI3MTQ1LCA5ODM2NjIsIDExODgzNiwgOTgzNzQ4LCA3ODQyNywgMTE0MCwgCiAgICAgNzg0MjYsIDAsIDEwMTU5LCAwLCAwLCA4MTI4LCAwLCAwLCA5MTc5NjUsIDE4MTUsIDE5OTEwLCA4OTAsIDAsIDMyNjcsIAogICAgIDkyMjkxLCAwLCAxMDEyMywgMCwgNDQxMCwgMTA0MSwgMTA1NzYsIDYzNTQsIDkyNTgxLCA1ODAsIDc0MjMyLCAwLCAKICAgICAxMjgzNDcsIDAsIDAsIDAsIDE5OTM4LCA2NTkwNiwgMTI3ODE5LCAwLCAwLCAzMjk4LCA1Mzc1LCAxMDE0MiwgMCwgODIxNSwgCkBAIC0xODMzMywxNiArMTgzNTIsMTYgQEAKICAgICA0MTUyMSwgMTE4OTM0LCA0OTQsIDEzMjUwLCAwLCA2NTA5OCwgNjM2NCwgOTU2LCAwLCAxMjgzMCwgMTA0NjIsIDczNzQwLCAKICAgICA3MzczNCwgMCwgMCwgMCwgNjY0NDksIDEzMjYzLCA3NDI4MSwgNjkyMTcsIDEzMTcxLCAxMjc3OTYsIDAsIDAsIDkyMjk0LCAKICAgICAwLCAxMDQ0LCA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIAotICAgIDExODI5LCA2ODE5NywgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDk4MzQ0NiwgNzA5OCwgMCwgCisgICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDU0LCA3MDk4LCAwLCAKICAgICAwLCAxMDU3LCA1NjYsIDQyNjk2LCAwLCAzMDE2LCA0MjI3NCwgNDM0NjQsIDY2NDkwLCAxMjkyMSwgNjY1NzEsIDc4NDcyLCAKICAgICA5MjUxMCwgMzAwNiwgNDYyMCwgMTI3MjM3LCA5ODM1NzgsIDAsIDAsIDY0NjU5LCAwLCAxMjc3NDksIDU1MjUzLCA2MzU3LCAKICAgICA2MzYyLCA4NjI2LCA3MTMzNywgMjIxNiwgOTA5MCwgNjUzNzcsIDQxNTk2LCAwLCA0MjkyMCwgMTY5OCwgMCwgNjQ0NzcsIDAsIAogICAgIDQzODEzLCAxMDUzLCAwLCA3ODI2OSwgMCwgMTI2NTg2LCAxMDUyLCAxMDUxLCA0NTksIDEwNjAsIDc0MzQ5LCA2NjQ3OSwgMCwgCiAgICAgMCwgMCwgMCwgNDI0OTAsIDY4OSwgNjUwOCwgNDE2MywgNDIyOTgsIDg2MzksIDY2NjQxLCA0MjQ2LCAwLCAwLCAxMjEzMCwgCi0gICAgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDEyNzg1MCwgMCwgMCwgNjM1OSwgMCwgNDM0NzEsIDk4Mzc1OSwgMCwgCisgICAgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDEyNzg1MCwgMCwgMCwgNjM1OSwgMCwgNDM0NzEsIDk4Mzc2OCwgMCwgCiAgICAgMCwgMTI3Mjc0LCAwLCA2MzU4LCA2MzYxLCAxOTI2LCA2MzU2LCA5MjYyNywgNzg5OCwgODExMCwgMTA5MzUsIDAsIDEwMDY5LCAKLSAgICA1ODMwLCAwLCA0MzY4NSwgMCwgMCwgMCwgMCwgODY5MywgNzg2MTEsIDExOTU2NSwgOTgzNzk5LCAxMjA0MTMsIDAsIAotICAgIDEyNzI1NywgNjU4OTQsIDAsIDAsIDAsIDk4MzkxNCwgMCwgMCwgMTE5MTg3LCAyMTM1LCA3ODg2OCwgMCwgMCwgNzg4NjksIAorICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM4MDgsIDEyMDQxMywgMCwgCisgICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTIzLCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCiAgICAgNDIzMTMsIDU1NzksIDkyNDEyLCAwLCA5ODMwODIsIDk0MDAyLCAwLCA1NTc4LCA0MTc3NCwgMTI4MTE1LCA0MjAyMywgCiAgICAgNjIzNCwgNTY2OSwgOTIyNzUsIDAsIDAsIDAsIDEyNzUwNiwgNjgyMDIsIDU1ODMsIDAsIDAsIDQyNDI2LCA1NTgwLCAKICAgICA0MjI3NiwgMjkyMywgODkyLCAyMjIwLCA0MjQ2NSwgNDEzMzAsIDE5NDk4NywgNTc5NSwgNjU1MTIsIDExOTAwNiwgNjU3MDIsIApAQCAtMTgzNTIsNyArMTgzNzEsNyBAQAogICAgIDY0OTAwLCA3MTUzLCA2MDk1LCA0MTg2NSwgMCwgMzAxNSwgMTI4MDIzLCAxMjY0NjUsIDUyMTEsIDk4MzA4MywgNjQwMCwgMCwgCiAgICAgMTk0OTgzLCA3MDA1NCwgODE4OSwgMTEyNzYsIDAsIDAsIDM3MiwgMTI4ODI5LCAwLCAxMTg4NzQsIDQyMTAyLCA0MTU4NSwgCiAgICAgMTI4MjAyLCAwLCA0MjEwMSwgMjc2LCA3ODQwMiwgMCwgMzMsIDc0MjI2LCAxMjczMDMsIDkwMDcsIDExODc5NiwgNDE1ODgsIAotICAgIDY2MDMzLCA0MjcsIDEwNzYzLCAxMTg4MTksIDAsIDEyNzg4NCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDk4Mzk3MSwgCisgICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTgwLCAKICAgICAyMzI4LCA5MjQwOSwgMTA3MSwgNDI4OTksIDAsIDc0ODQ4LCAwLCA5ODM1ODAsIDAsIDEwNDcsIDAsIDAsIDY0NzkwLCAwLCAKICAgICA2OTcyMywgMTA2NTEsIDAsIDAsIDAsIDAsIDkyMjA2LCAxMTkxODEsIDU3MTEsIDQxNjMzLCAxMjA5OCwgNjU1NzEsIDkxNjYsIAogICAgIDAsIDU3MTAsIDAsIDY3OTAsIDY1MTY4LCAxMzIxNiwgMCwgNjk3MTYsIDY5NzI2LCAwLCA2NDYxMSwgNDE2MjMsIDE5NTAwMSwgCkBAIC0xODM2MSwxMjAgKzE4MzgwLDEyMCBAQAogICAgIDkxOTYsIDY5NjcwLCAwLCAwLCAwLCAwLCAxMTg5MTEsIDAsIDAsIDAsIDAsIDAsIDEyMDAxMCwgMCwgODcwMSwgNjgxMzAsIAogICAgIDExOTYxNiwgMTIwNTIyLCAwLCA0MjQ3NywgMTk0OTk0LCAxMjEyMywgNDQ5NSwgNDM1NjksIDAsIDAsIDAsIDY0OTQ2LCAKICAgICAxMDk5MiwgMCwgMTIwMDA5LCAwLCAwLCA5MzE4LCA5Mzk4NiwgMTMyNDksIDY1Njc5LCA3MzgwOCwgMCwgNjU0NTcsIAotICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTU3LCAKKyAgICA0MjI0OSwgNzYzOSwgNDM5OTUsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAxMjAwMDUsIDAsIDk4Mzk2NiwgCiAgICAgNTA4NCwgMCwgMCwgMTE4ODYxLCAwLCA3MzMsIDkxNzg3NiwgNzgwMTQsIDc4NDM2LCA3ODQzNSwgNDE2NzcsIDAsIDkyMTgsIAotICAgIDE3MzEsIDAsIDk4MzczNywgMCwgNjc5OTAsIDAsIDAsIDAsIDEyMDAwMSwgMTI3MDE4LCA5MjQ5MiwgNTE1NSwgMTIwMDAwLCAKLSAgICA1MzU4LCA5ODM3MzUsIDAsIDkxNzc2NywgNjQ0MjQsIDk4MzIyNSwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCA3ODMxNSwgCisgICAgMTczMSwgMCwgOTgzNzQ2LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAorICAgIDUzNTgsIDk4Mzc0NCwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjMxLCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKICAgICA2ODQzMCwgNjc5ODAsIDQzMjUzLCA2NTk0MywgMCwgMzM3MSwgMTA5ODgsIDAsIDg3NzEsIDE0NzksIDAsIDAsIDExMDksIAotICAgIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjc2LCAKLSAgICA5ODM3MTIsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgCisgICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyODQsIAorICAgIDk4MzcyMSwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKICAgICAxMTkyMTEsIDAsIDAsIDc4MDExLCAzNTEsIDExOTE0OSwgMCwgMCwgNTUyMjksIDAsIDc0MjY4LCAwLCAwLCAwLCA0MjM3NywgCi0gICAgMCwgMCwgMCwgOTgzOTE1LCAwLCA5MDEzLCA0MDU0LCAwLCA5ODM1NzAsIDAsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgCisgICAgMCwgMCwgMCwgOTgzOTI0LCAwLCA5MDEzLCA0MDU0LCAwLCA5ODM1NzAsIDk4MzYyOCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKICAgICAyNTQ5LCA3NDQ2OSwgMCwgMCwgNTU4NCwgODM1OCwgMCwgNjQyMTUsIDkyMjE5LCAxMDkxOSwgMCwgNzk4MCwgMTI2NjAxLCAKLSAgICA5ODM3NzUsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCisgICAgOTgzNzg0LCAyMjE4LCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIAogICAgIDQzNDUyLCA3ODYwOSwgMCwgNDI1NzMsIDY3ODU2LCAwLCA3ODEyOSwgMCwgMCwgNzQzOTIsIDgxMzUsIDY0NTAsIDEwMDU1LCAKICAgICA3Nzk5NiwgMCwgMCwgMTE5MjI1LCA1NjU3LCAwLCA5NjI2LCAwLCA3Nzk5NCwgMTAxNzksIDU2NTQsIDEyOTM5LCA5MjU3MywgCiAgICAgMTIwNzk5LCAwLCAwLCA1NjUyLCAxMDk0NSwgMCwgNjY0ODYsIDAsIDM2NjEsIDc4NjMsIDAsIDAsIDAsIDc0NTA5LCAKLSAgICA5ODM4NDMsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgMCwgNDIxNjgsIDAsIDEwNTUsIDkxNzYyOCwgMTI3NzkyLCAKLSAgICA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCA3Mzk1NSwgNzM5NTYsIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAxMDMwNCwgCi0gICAgMTAzNjgsIDQyNTE4LCA1OTQsIDEwMjQ0LCAxMDI0OCwgNzQwNywgOTgzODc4LCA2NDg3MCwgMCwgMzQ2NywgOTgzODgyLCAwLCAKLSAgICAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgNjkyMjIsIDY1OTI3LCAwLCA3MDAzNiwgCi0gICAgNjk2OTYsIDY5NzY5LCA2NDY1NiwgOTgzNzE3LCAwLCA5NDAyMCwgNzAwNTYsIDU2NjYsIDY1MjI3LCA1MzE4LCA2Mzk5NCwgCi0gICAgMCwgOTA5MSwgMTA3OTgsIDAsIDEyODE2NiwgMTAxODYsIDAsIDc3MzIsIDk4MzcxNSwgNjQ1NTYsIDAsIDAsIDU2NjgsIAotICAgIDc0NDQ1LCAwLCAxMjg2NjMsIDU2NzAsIDEyNjYxMCwgMTI3Mjk3LCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgMTk5NTIsIAotICAgIDEyMDgwNywgMCwgMTI3NDksIDc0NTUxLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAxNDk3LCAKLSAgICAxMjgyODYsIDk0MDA0LCAwLCAwLCAzNTcxLCAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgNjc4OTYsIAotICAgIDQzMTkyLCAwLCA3ODI2NSwgNTUzLCAxMjA2NTMsIDAsIDEyODU1NCwgNTgyOSwgMCwgNDU4NywgNzgyODUsIDY1OTEyLCAwLCAKLSAgICAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIDk0MTAxLCA5NDEwMiwgOTQwOTksIDY0OTA1LCA5NDEwNSwgCi0gICAgOTUxMiwgOTQxMDMsIDEyNzQyLCA2NDQzLCA5ODM3OTcsIDAsIDkxMzUsIDAsIDQxNTY0LCAwLCA1NTIxOSwgMTI4ODMyLCAKLSAgICA5ODM4NDIsIDAsIDEyMTQ4LCAwLCA3ODI5NywgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAxMjcyNzAsIAotICAgIDAsIDExODg4MCwgMjQyNSwgNjUxODIsIDEyODc2OSwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIDk4MzgwMCwgCi0gICAgNjk4MTUsIDU2MzYsIDAsIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIDQzMjIzLCA0Mzc2MCwgNTYzNSwgCi0gICAgMzM3MywgMjk4NiwgNzgyOTIsIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIDAsIDAsIAotICAgIDE2NTcsIDQxNTYxLCA3ODI5OSwgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCA5ODM2NzYsIDc4MzAwLCAKLSAgICA0MjIyNywgMCwgMCwgNDE2MzcsIDY3ODcyLCAwLCA3ODMxMCwgNDE2MjUsIDQzMzYyLCA3ODMwOSwgMTIwNzEzLCAxMTcwNSwgCi0gICAgNTY0MiwgMCwgNTQ4NiwgMCwgNDM1NiwgMTE3MTAsIDAsIDEyMDUxLCA2OTkzOCwgMCwgNTY0MSwgODI1OSwgMCwgMTA1OCwgCi0gICAgMCwgNjc2MzAsIDAsIDAsIDExNDQsIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgMjgwMCwgMCwgCi0gICAgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCA0MzYzNCwgMCwgNTYwOCwgNjU4OTAsIDQzODA4LCAwLCA2NzYyMSwgCi0gICAgMTE5OTM0LCA5MDAwLCAwLCAwLCA5MjY3MywgMTg2NSwgMCwgNTYxMywgNjk5NTAsIDAsIDAsIDU2MTAsIDAsIDAsIDY1ODI2LCAKLSAgICAyMDY5LCAwLCAxMDc4NywgNDM5OTksIDI5OTcsIDAsIDU2MDksIDc4MzE2LCA2NTMxOSwgNzgzMTMsIDEyMzE2LCA2NTM3NiwgCi0gICAgMjQxMiwgMCwgODE4NiwgOTgwNywgNzQyNjksIDkyNTQ3LCAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIDEwMDMwLCA1MzA2LCAKLSAgICAxMjM2NCwgMTI4MDY0LCAwLCAxMTcwNCwgMCwgOTI1ODMsIDEwMjExLCAwLCAwLCAwLCAwLCAxMTcwNiwgOTcxMCwgMCwgMCwgCi0gICAgMCwgNDEzLCA2NTYyMywgNzExOCwgMCwgOTEzMywgNzQyNjIsIDAsIDEwNDIsIDAsIDY0Nzc5LCAxMjE3MSwgMTE5MjQwLCAKLSAgICA2MTg1LCA2NDc3NiwgNDk4NCwgMCwgNzA4LCAxMTM5MSwgMCwgMTIyNDEsIDkyNzIwLCA5ODM4OTAsIDEzMDgsIDAsIDI1MzQsIAotICAgIDgxMCwgMCwgMCwgMCwgMCwgMCwgMTkxNywgMzAwMCwgMCwgMCwgMTIwNzM5LCAyMzY0LCA5MjQ0MywgNzQ0NzAsIDY2NjE4LCAKLSAgICA2NTY4MCwgMTIwNzc5LCAxMDAyNywgMCwgMTI4MTU0LCAxMjMzNywgMTIwNzIyLCAxMjczNjgsIDk4MzE2NywgMjk4MCwgCi0gICAgNzU1LCA2OTc3NCwgOTMxLCAxMzEyNCwgNjgxODIsIDYzNjMsIDI3NDgsIDAsIDAsIDY1MDQxLCA5MjI3NiwgNDQwMTEsIAotICAgIDg3MzAsIDk4MzA2NywgMTI3ODU0LCA3ODMxMiwgNzI3NCwgMTE5MjUwLCAwLCA3Mjc1LCA3ODMwNCwgOTM1LCAwLCA2NTg0MCwgCi0gICAgMzc3LCA0MjMyNSwgMTE2NDksIDEyNzM2MywgNjUyNTMsIDY0MzAxLCAxMjg4MzUsIDc4MzA4LCA0MjM0MSwgNjUyODQsIAotICAgIDI0MTcsIDAsIDEyODg0LCAxOTkxMiwgNzkwNywgMTA3NjgsIDAsIDE5NDk5OCwgMCwgMTA2NzMsIDExOTIxNywgNzI0OCwgMCwgCi0gICAgMTI4MzQ2LCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgMTY0OSwgMCwgOTY0LCAwLCAxMjc4NzYsIDc4MjI2LCAxMjg3NzUsIAotICAgIDEyNzUxMiwgMCwgMCwgMCwgMCwgNDM2ODksIDEyNzkxMSwgMTMxNDIsIDc4ODEyLCA0MjQxNSwgNjY1NzUsIDQ1NDIsIAotICAgIDY5OTA5LCA0MzU0NywgMCwgMCwgNzY3NywgMjk5MSwgNDk0NiwgNDI0NTQsIDExNTY1LCA3OTQ5LCAwLCA5ODM5MDksIAotICAgIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCA5MjcyNCwgNjQ3OCwgOTg5OCwgCi0gICAgNDM2NzMsIDY1MjM3LCA2MjQxLCA3MTA2LCA0ODc3LCA5ODM3ODYsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIDQ0MDksIDAsIAotICAgIDAsIDY0Nzk4LCAwLCA1MzQ2LCAwLCA5NDA0NywgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMTI2NTUzLCA2NTIzMSwgCi0gICAgNjU4ODQsIDEyNjc4LCA3ODc0OCwgMTE4OTEyLCAxMTM3OCwgNDQwMTgsIDQyNzg1LCAyNDA4LCAzMjUxLCAwLCAwLCA1Njg1LCAKLSAgICAwLCAyNDYxLCAxMTA1MiwgNzA5MSwgNTM0MiwgODMxNywgMCwgNjgxNjMsIDUzNDAsIDAsIDEyNzgyMCwgNDM2MzUsIAotICAgIDczOTI4LCAxMjc1MjksIDAsIDAsIDAsIDEyODUxMCwgNjU0ODIsIDAsIDkxNDIsIDAsIDEyNjQ3MCwgMCwgMTA5MzgsIDAsIAotICAgIDExODc5MCwgMTE4MiwgMjU0MiwgNDgyNiwgMCwgMCwgMTI4MTc2LCA1MjksIDg1ODAsIDAsIDAsIDEwNTg2LCAxMDc5MCwgCi0gICAgMTA4MzksIDY2MDIzLCA0MTU5MywgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAwLCAwLCA5ODM5MjksIDExMzc2LCAKLSAgICA3NDM3OSwgMTA3MjEsIDY3NjY0LCAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgNzgzMDUsIAotICAgIDEyMDE4MywgNDE4NzMsIDEyMDU3NSwgMTEzMjQsIDEyMDUzMSwgMCwgODQyMCwgNjQ5MTgsIDEyODg0NCwgNDE4NzEsIAotICAgIDQxMzM4LCAzNzM0LCA3NzM0LCA0MzY4MywgODc1MCwgNjY2MDUsIDY2MDExLCA5MjUxNCwgNDA5NjUsIDEyNzkzNywgMCwgCi0gICAgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgMTI3NTUyLCAwLCAxMjY2MDUsIDExOTQ4LCAKLSAgICA2OTIyMCwgMTIzNTksIDQzNDI5LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDY4NjMzLCA3Mjg2LCAwLCA2ODYzNSwgMTAwMzEsIAotICAgIDAsIDk4NzAsIDY4NjQ1LCA4NjIwLCA2NTgyNCwgMCwgMTE5MzgsIDAsIDcyODUsIDAsIDExOTU3NywgNDI2NzgsIDAsIAotICAgIDQzNjc3LCA0MTU4MywgMCwgNjU3OTksIDkyNjIzLCAwLCAwLCA5ODM5MjcsIDc4MTY5LCA2NjE5OSwgMCwgMzYwOSwgCisgICAgOTgzODUyLCA1NjU5LCAwLCA3ODY5MiwgNjY3MjksIDU2NTUsIDk4MzYyNiwgNDIxNjgsIDAsIDEwNTUsIDkxNzYyOCwgCisgICAgMTI3NzkyLCA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCA3Mzk1NSwgNzM5NTYsIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAKKyAgICAxMDMwNCwgMTAzNjgsIDQyNTE4LCA1OTQsIDEwMjQ0LCAxMDI0OCwgNzQwNywgOTgzODg3LCA2NDg3MCwgMCwgMzQ2NywgCisgICAgOTgzODkxLCAwLCAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgNjkyMjIsIDY1OTI3LCAwLCAKKyAgICA3MDAzNiwgNjk2OTYsIDY5NzY5LCA2NDY1NiwgOTgzNzI2LCAwLCA5NDAyMCwgNzAwNTYsIDU2NjYsIDY1MjI3LCA1MzE4LCAKKyAgICA2Mzk5NCwgMCwgOTA5MSwgMTA3OTgsIDAsIDEyODE2NiwgMTAxODYsIDAsIDc3MzIsIDk4MzcyNCwgNjQ1NTYsIDAsIDAsIAorICAgIDU2NjgsIDc0NDQ1LCAwLCAxMjg2NjMsIDU2NzAsIDEyNjYxMCwgMTI3Mjk3LCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgCisgICAgMTk5NTIsIDEyMDgwNywgMCwgMTI3NDksIDc0NTUxLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAKKyAgICAxNDk3LCAxMjgyODYsIDk0MDA0LCAwLCAwLCAzNTcxLCAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgCisgICAgNjc4OTYsIDQzMTkyLCAwLCA3ODI2NSwgNTUzLCAxMjA2NTMsIDAsIDEyODU1NCwgNTgyOSwgMCwgNDU4NywgNzgyODUsIAorICAgIDY1OTEyLCAwLCAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIDk0MTAxLCA5NDEwMiwgOTQwOTksIDY0OTA1LCAKKyAgICA5NDEwNSwgOTUxMiwgOTQxMDMsIDEyNzQyLCA2NDQzLCA5ODM4MDYsIDAsIDkxMzUsIDAsIDQxNTY0LCAwLCA1NTIxOSwgCisgICAgMTI4ODMyLCA5ODM4NTEsIDAsIDEyMTQ4LCAwLCA3ODI5NywgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAKKyAgICAxMjcyNzAsIDAsIDExODg4MCwgMjQyNSwgNjUxODIsIDEyODc2OSwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIAorICAgIDk4MzgwOSwgNjk4MTUsIDU2MzYsIDAsIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIDQzMjIzLCA0Mzc2MCwgCisgICAgNTYzNSwgMzM3MywgMjk4NiwgNzgyOTIsIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIAorICAgIDAsIDAsIDE2NTcsIDQxNTYxLCA3ODI5OSwgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCA5ODM2ODUsIAorICAgIDc4MzAwLCA0MjIyNywgMCwgMCwgNDE2MzcsIDY3ODcyLCAwLCA3ODMxMCwgNDE2MjUsIDQzMzYyLCA3ODMwOSwgMTIwNzEzLCAKKyAgICAxMTcwNSwgNTY0MiwgMCwgNTQ4NiwgMCwgNDM1NiwgMTE3MTAsIDAsIDEyMDUxLCA2OTkzOCwgMCwgNTY0MSwgODI1OSwgMCwgCisgICAgMTA1OCwgMCwgNjc2MzAsIDAsIDAsIDExNDQsIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgMjgwMCwgCisgICAgMCwgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCA0MzYzNCwgMCwgNTYwOCwgNjU4OTAsIDQzODA4LCAwLCAKKyAgICA2NzYyMSwgMTE5OTM0LCA5MDAwLCAwLCAwLCA5MjY3MywgMTg2NSwgMCwgNTYxMywgNjk5NTAsIDAsIDAsIDU2MTAsIDAsIDAsIAorICAgIDY1ODI2LCAyMDY5LCAwLCAxMDc4NywgNDM5OTksIDI5OTcsIDAsIDU2MDksIDc4MzE2LCA2NTMxOSwgNzgzMTMsIDEyMzE2LCAKKyAgICA2NTM3NiwgMjQxMiwgMCwgODE4NiwgOTgwNywgNzQyNjksIDkyNTQ3LCAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIAorICAgIDEwMDMwLCA1MzA2LCAxMjM2NCwgMTI4MDY0LCAwLCAxMTcwNCwgMCwgOTI1ODMsIDEwMjExLCAwLCAwLCAwLCAwLCAxMTcwNiwgCisgICAgOTcxMCwgMCwgMCwgMCwgNDEzLCA2NTYyMywgNzExOCwgMCwgOTEzMywgNzQyNjIsIDAsIDEwNDIsIDAsIDY0Nzc5LCAKKyAgICAxMjE3MSwgMTE5MjQwLCA2MTg1LCA2NDc3NiwgNDk4NCwgMCwgNzA4LCAxMTM5MSwgMCwgMTIyNDEsIDkyNzIwLCA5ODM4OTksIAorICAgIDEzMDgsIDAsIDI1MzQsIDgxMCwgMCwgMCwgMCwgMCwgMCwgMTkxNywgMzAwMCwgMCwgMCwgMTIwNzM5LCAyMzY0LCA5MjQ0MywgCisgICAgNzQ0NzAsIDY2NjE4LCA2NTY4MCwgMTIwNzc5LCAxMDAyNywgMCwgMTI4MTU0LCAxMjMzNywgMTIwNzIyLCAxMjczNjgsIAorICAgIDk4MzE2NywgMjk4MCwgNzU1LCA2OTc3NCwgOTMxLCAxMzEyNCwgNjgxODIsIDYzNjMsIDI3NDgsIDAsIDAsIDY1MDQxLCAKKyAgICA5MjI3NiwgNDQwMTEsIDg3MzAsIDk4MzA2NywgMTI3ODU0LCA3ODMxMiwgNzI3NCwgMTE5MjUwLCAwLCA3Mjc1LCA3ODMwNCwgCisgICAgOTM1LCAwLCA2NTg0MCwgMzc3LCA0MjMyNSwgMTE2NDksIDEyNzM2MywgNjUyNTMsIDY0MzAxLCAxMjg4MzUsIDc4MzA4LCAKKyAgICA0MjM0MSwgNjUyODQsIDI0MTcsIDAsIDEyODg0LCAxOTkxMiwgNzkwNywgMTA3NjgsIDAsIDE5NDk5OCwgMCwgMTA2NzMsIAorICAgIDExOTIxNywgNzI0OCwgMCwgMTI4MzQ2LCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgMTY0OSwgMCwgOTY0LCAwLCAxMjc4NzYsIAorICAgIDc4MjI2LCAxMjg3NzUsIDEyNzUxMiwgMCwgMCwgMCwgMCwgNDM2ODksIDEyNzkxMSwgMTMxNDIsIDc4ODEyLCA0MjQxNSwgCisgICAgNjY1NzUsIDQ1NDIsIDY5OTA5LCA0MzU0NywgMCwgMCwgNzY3NywgMjk5MSwgNDk0NiwgNDI0NTQsIDExNTY1LCA3OTQ5LCAwLCAKKyAgICA5ODM5MTgsIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCA5MjcyNCwgNjQ3OCwgCisgICAgOTg5OCwgNDM2NzMsIDY1MjM3LCA2MjQxLCA3MTA2LCA0ODc3LCA5ODM3OTUsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIAorICAgIDQ0MDksIDAsIDAsIDY0Nzk4LCAwLCA1MzQ2LCAwLCA5NDA0NywgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMTI2NTUzLCAKKyAgICA2NTIzMSwgNjU4ODQsIDEyNjc4LCA3ODc0OCwgMTE4OTEyLCAxMTM3OCwgNDQwMTgsIDQyNzg1LCAyNDA4LCAzMjUxLCAwLCAKKyAgICAwLCA1Njg1LCAwLCAyNDYxLCAxMTA1MiwgNzA5MSwgNTM0MiwgODMxNywgMCwgNjgxNjMsIDUzNDAsIDAsIDEyNzgyMCwgCisgICAgNDM2MzUsIDczOTI4LCAxMjc1MjksIDAsIDAsIDAsIDEyODUxMCwgNjU0ODIsIDAsIDkxNDIsIDAsIDEyNjQ3MCwgMCwgCisgICAgMTA5MzgsIDAsIDExODc5MCwgMTE4MiwgMjU0MiwgNDgyNiwgMCwgMCwgMTI4MTc2LCA1MjksIDg1ODAsIDAsIDAsIDEwNTg2LCAKKyAgICAxMDc5MCwgMTA4MzksIDY2MDIzLCA0MTU5MywgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAwLCAwLCA5ODM5MzgsIAorICAgIDExMzc2LCA3NDM3OSwgMTA3MjEsIDY3NjY0LCAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgCisgICAgNzgzMDUsIDEyMDE4MywgNDE4NzMsIDEyMDU3NSwgMTEzMjQsIDEyMDUzMSwgMCwgODQyMCwgNjQ5MTgsIDEyODg0NCwgCisgICAgNDE4NzEsIDQxMzM4LCAzNzM0LCA3NzM0LCA0MzY4MywgODc1MCwgNjY2MDUsIDY2MDExLCA5MjUxNCwgNDA5NjUsIAorICAgIDEyNzkzNywgMCwgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgMTI3NTUyLCAwLCAxMjY2MDUsIAorICAgIDExOTQ4LCA2OTIyMCwgMTIzNTksIDQzNDI5LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDY4NjMzLCA3Mjg2LCAwLCA2ODYzNSwgCisgICAgMTAwMzEsIDAsIDk4NzAsIDY4NjQ1LCA4NjIwLCA2NTgyNCwgMCwgMTE5MzgsIDAsIDcyODUsIDAsIDExOTU3NywgNDI2NzgsIAorICAgIDAsIDQzNjc3LCA0MTU4MywgMCwgNjU3OTksIDkyNjIzLCAwLCAwLCA5ODM5MzYsIDc4MTY5LCA2NjE5OSwgMCwgMzYwOSwgCiAgICAgNjg2MjQsIDAsIDgzMiwgMTIwNjkzLCAxMjA3NzAsIDc4NDczLCA2NjAwNywgNzg0NzEsIDY1NzAzLCAwLCAwLCA0MjczMiwgCiAgICAgNTE4MCwgOTI2OTksIDQxMzk1LCA0MTUzMCwgMTE2OTEsIDY0NzczLCA5MjIxNCwgNzQwMDIsIDAsIDAsIDEyODY0NSwgCi0gICAgNjM0OCwgMjQzLCAxMzIwMCwgOTgzODA0LCA2MDI0LCA5MjMwOSwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgCisgICAgNjM0OCwgMjQzLCAxMzIwMCwgOTgzODEzLCA2MDI0LCA5MjMwOSwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgCiAgICAgNDM2ODcsIDAsIDAsIDQyODUsIDY2MTk1LCAwLCA0MjMwLCAwLCA3MzY3LCA0MzI1NiwgOTIzNTMsIDc1NjMsIDQyMzc2LCAwLCAKICAgICA2ODQ0MiwgMTIwNTEyLCAwLCAwLCAyMTQsIDAsIDAsIDc4NDY2LCA2NTg5MywgMTIyMDgsIDk5NzMsIDAsIDY2MzExLCAKICAgICA2NTU4OSwgMTI4Mjc3LCAyNjAzLCAwLCAwLCAwLCA3MDA0NywgMCwgNjAyMiwgMCwgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAKICAgICAwLCA2NjQ1MywgMTAxNiwgNDExMDcsIDAsIDQxMTIxLCAzODg1LCA5MiwgNjU0NTYsIDY0NjA4LCAwLCA3NDgwMSwgMCwgCi0gICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgxNywgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAorICAgIDIwNzQsIDAsIDc4MjgzLCAwLCAxMjQ1MywgMTI4MTI4LCA5ODM4MjYsIDc0MjQxLCAxMjY1NjgsIDY3OTEsIDEyNDU3LCAKICAgICA3ODI2OCwgMCwgMCwgMCwgNzgyNzksIDAsIDAsIDkyMzU4LCA2NjYzNywgNzk5NSwgODc1OSwgNDM0MjEsIDc4Mjc3LCAKICAgICAxMjQ0OSwgMTI4NTUyLCAwLCAwLCA4NzUyLCAzMTk3LCA0NzIwLCAxMDE2NSwgMCwgMTE5MjQ5LCAwLCAxMTU5NSwgNjQ4OTMsIAogICAgIDAsIDQzNDM1LCAwLCAwLCA0OTkzLCAwLCA2MTY4LCAxMDkzNCwgMTk0NiwgNzQxLCAwLCA1NDk0LCA0NjM5LCA5ODMxNDcsIAogICAgIDE5OTAsIDY2NTg5LCA0NDk4LCA3ODY2NCwgMTE5MTgzLCAwLCAwLCA2OTczNCwgMjk2MCwgNzM3NzksIDAsIDg5NjksIAogICAgIDEyODExNywgNDM0MjQsIDEyNzA1OSwgMCwgMjk1MCwgMTE5NTc5LCA2MjEwLCA2NTc1MywgMzcwLCAwLCAwLCAwLCA0OTUzLCAKLSAgICA5ODM2NzMsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQwLCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCisgICAgOTgzNjgyLCAwLCAwLCAwLCA2OTIzMCwgMCwgMCwgNjU2ODgsIDk4MzI0NiwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIAogICAgIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgNjYwMTYsIDc4MjUzLCAwLCAKICAgICA3MTMxNywgNjQ5MjMsIDEyODA0MCwgNDM2NjksIDkwMzIsIDc4MjYzLCA3ODI2NCwgMCwgNDEyMTUsIDAsIDY1ODgzLCAwLCAKICAgICA5MTc3NzQsIDEyMDYwMiwgMzc2MSwgMCwgMCwgNzAwNjgsIDAsIDEyOTEyLCAxMTkwMTIsIDM4NTAsIDEyODE5MSwgMCwgMCwgCiAgICAgMCwgMCwgOTA4LCAwLCA4NjExLCAwLCAwLCAxMjc1NTUsIDQzNjkxLCA0MTE5NywgMCwgODk3OCwgMTIwNTQwLCAxMTkxMzUsIAogICAgIDQxNTg2LCAxMDUyNywgMCwgOTE3ODQ4LCAzODQ4LCA3ODczOSwgMTk0OTM3LCAxMjc1MzYsIDY1MjQxLCA1MzM2LCAKLSAgICA5ODMyNTEsIDEyODc4NiwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDk4MzI0OSwgMTI3MTYzLCA2ODE5MywgMzQ3LCAKKyAgICA5ODMyNTksIDEyODc4NiwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDk4MzI1NywgMTI3MTYzLCA2ODE5MywgMzQ3LCAKICAgICAwLCAwLCA3ODc3NSwgNjQ2NzUsIDQxNTgyLCA3ODc3NCwgNzg3NDQsIDY1NTc5LCAxMjk4MCwgNzg3NjksIDEyMTQzLCAKICAgICA2OTY1NywgNzg1MTIsIDAsIDQzNDQxLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAxMjg4NTksIDQxNTg0LCAxMDY4MSwgCi0gICAgMCwgOTgzNjg2LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCi0gICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTIsIDAsIDczODQ3LCA3ODc2MSwgCi0gICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NDYsIDAsIAorICAgIDAsIDk4MzY5NSwgNzM5MzgsIDAsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgNzg1MzQsIDk1MTgsIAorICAgIDY2MDksIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCA0MTczMCwgOTgzMjE0LCAwLCA3Mzg0NywgNzg3NjEsIAorICAgIDY1MTcyLCA0MTcyOCwgNDE3MjEsIDAsIDAsIDAsIDQxMjAzLCA5MTc2MTIsIDEzMTEwLCA0MTcyNiwgOTgzODU1LCAwLCAKICAgICAxMDAwLCA2OTY1MSwgMCwgNDExNDAsIDEyMDksIDczOTc4LCAwLCA3Mzc1MCwgMTA3MywgNjMyMSwgNzc4NzgsIDQxMTM4LCAKICAgICAwLCA2ODIxMywgMCwgMTIxNjcsIDExMTUsIDQxNjA1LCA5Nzk0LCAxMjcwNjIsIDY3NjcxLCA1NTI0OCwgMTIyMzcsIAogICAgIDc4Nzg3LCA2NjMxNCwgNjU4NywgOTI5MCwgNzg3ODIsIDc4NzgzLCA5MjMxLCA3ODc4MSwgMjk1OSwgNzkyNiwgMCwgMCwgMCwgCi0gICAgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIDk4MzcxOCwgNzg3OTYsIDc4Nzk4LCA3ODc5NCwgNzg3OTUsIDY4NDM0LCAKKyAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzI3LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAogICAgIDc4NzkzLCA2NjY3MCwgMCwgMCwgMTIyOTAsIDEyMDE2OSwgMCwgMTE5ODczLCA0MjE0MiwgOTk2OCwgODIwNSwgMCwgNTEzMSwgCi0gICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEwLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAorICAgIDAsIDk2MjcsIDc4NTM2LCA3ODU0MiwgNzg1MzUsIDk4MzIxMiwgMTk0NCwgMTI0OCwgMTAxNDgsIDEyNzc1NSwgMTE5OTkwLCAKICAgICAxMTk5OTEsIDEyNzAxLCA3ODM3NiwgMTEzMDgsIDExOTk5NSwgMCwgMTE5OTk3LCAxMTk5OTgsIDY1MzA1LCA2NTEwMCwgCiAgICAgNDAzMSwgNDI3OTQsIDEyMDAwMywgNzA3NSwgODE1NCwgMTE5OTg1LCAxMjAwMDcsIDQxODE3LCA3MzkzNCwgNDIyNzUsIAogICAgIDEyMDAxMSwgMTIwMDEyLCA3ODUyNiwgMTIwMDE0LCAxMjAwMTUsIDYwNDEsIDAsIDQxODk5LCAwLCA4MDAyLCAwLCA0MzY0LCAKICAgICAwLCAwLCA2NDMzMiwgMCwgNzgxMywgOTA2NCwgMTE5OTg2LCAxMDEyNCwgNzUyNiwgODYwMSwgNzI4MSwgNzg0NTUsIDcyNzksIAotICAgIDEyMDQxLCAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDk4MzI3MiwgMTMwMTIsIDQ1NzEsIDAsIDAsIDEyMDE2NCwgCisgICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjgwLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKICAgICAxMjA3OCwgMjk3MCwgMCwgMTA5MzMsIDAsIDc3ODcwLCAwLCAxMjcwMTUsIDAsIDQxNTk5LCAwLCAxMjg4MzEsIDAsIAogICAgIDEyOTUwLCA5MjE2MCwgMzQ4NiwgMCwgNzgzMTEsIDQyMzksIDAsIDEyNzc5OSwgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCAKLSAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk2NiwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCi0gICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAxLCA0MTczNCwgCisgICAgODQ2MCwgMTI3MDUzLCA4NDc2LCA5ODM5NzUsIDAsIDAsIDAsIDY1NjczLCAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIAorICAgIDAsIDQzMTYsIDAsIDEzMTE5LCA4NDg4LCA1NDEyLCA2NjI0MywgOTkzNSwgMCwgNzM4NjQsIDk4MzIwMywgNDE3MzQsIAogICAgIDgyMDYsIDc0MDgxLCA5MTYzLCAzMjg2LCA5MDcyLCA1ODY3LCAxMzMwMiwgNzYyMiwgNzEyMCwgNDE3MzYsIDkyNTQ2LCAKICAgICA0MTczMSwgMCwgNzQwMCwgNTQxNiwgNjg2NjMsIDExODkyNCwgMTA4MTcsIDAsIDQxNTM5LCAxMjcyODQsIDAsIDczOTYzLCAKICAgICA0MTg1NSwgNDE4NjcsIDY1NTY0LCAxMTI3NywgNjU4OTIsIDExNTM2LCAxMDYyMCwgOTIyNzIsIDcxMTUsIDY2MDMwLCAKICAgICA3MzkzMiwgNTQ5OCwgNzM5NDIsIDQxNTM2LCAwLCA2ODIwNCwgOTI1ODcsIDM0NTksIDg5OTcsIDAsIDAsIDAsIDAsIAotICAgIDkyNTEyLCAwLCA2NjM3NywgNjk3ODEsIDAsIDk4MzY5MCwgNzg1MTEsIDMxNjEsIDI5NSwgMTIwMjA3LCAwLCA5MjIyMywgCisgICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjk5LCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKICAgICAxMjc4NTYsIDc4NzQyLCA5MDE2LCA0MzQ1NCwgNjM5MDMsIDYzOTAyLCA0MzY0MSwgMCwgMzk3MSwgMCwgNzAwNjMsIDI5NTIsIAogICAgIDc4NzY1LCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDk0MDQzLCA2NjcsIDEyMzMyLCA2Mzg4NywgNjA4NiwgCi0gICAgNDE3MjIsIDAsIDUxNzIsIDAsIDAsIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCA4NTU1LCAKLSAgICA2Mzg3OCwgNjM4NzcsIDQyNDYwLCA2MDUwLCA0MjcwOCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIAorICAgIDQxNzIyLCAwLCA1MTcyLCAwLCA5ODMyNzgsIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCAKKyAgICA4NTU1LCA2Mzg3OCwgNjM4NzcsIDQyNDYwLCA2MDUwLCA0MjcwOCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIAogICAgIDYzODc1LCA2Mzg3NCwgMTE0NjAsIDc0MzIsIDE5MTMsIDQxOTEzLCA2Mzg1MiwgMTI2NjM2LCAwLCA0MjM0OCwgNzM4OTIsIAogICAgIDY3NTIsIDQ0NiwgNDE5MTEsIDEyNzkwNiwgNjM4NTEsIDYzODUwLCA0MTkxMCwgMCwgNjM4NDYsIDI5NzIsIDEyOTMyLCAKICAgICA3MjYyLCAwLCA2Mzg0OSwgNjM4NDgsIDYzODQ3LCAxMjgwNzAsIDY1NzAsIDgzMDIsIDcyNTksIDYzODQyLCA0MTc4LCAKQEAgLTE4NDg4LDggKzE4NTA3LDggQEAKICAgICA3NTgzLCA3Njc5LCAyOTAzLCAwLCAzMDAxLCAxMTU4LCA4NzQ1LCA0Mzc0NiwgNzM3NDgsIDYzODY2LCA3ODYyNiwgMTkxNSwgCiAgICAgNDg0NiwgMCwgNjYzNzEsIDExODk4NCwgNDIxMDUsIDI5OTAsIDEyMDEyOCwgODA1LCA2OTIzOCwgNjQ0MzgsIDEyMDcwLCAKICAgICA4NzYwLCAxMTE3LCAxMTg5ODcsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgNjM4MzUsIDYzODM0LCAwLCA3ODI0MCwgCi0gICAgMTIyMjUsIDYzODM4LCA2MzgzNywgOTgzODQ0LCA5ODM3OTUsIDYzODMzLCA2MDQyLCA2NjM2MCwgODA4MywgMCwgMCwgCi0gICAgNjM4MjEsIDYzODIwLCA2MzgxOSwgNjM4MTgsIDk4Mzg5NSwgNTIyNywgOTA0NywgNjM4MjIsIDEyNzE2MiwgNjA5MSwgMCwgCisgICAgMTIyMjUsIDYzODM4LCA2MzgzNywgOTgzODUzLCA5ODM4MDQsIDYzODMzLCA2MDQyLCA2NjM2MCwgODA4MywgMCwgMCwgCisgICAgNjM4MjEsIDYzODIwLCA2MzgxOSwgNjM4MTgsIDk4MzkwNCwgNTIyNywgOTA0NywgNjM4MjIsIDEyNzE2MiwgNjA5MSwgMCwgCiAgICAgMTA2OTEsIDU2MCwgNTY0MywgODIyNiwgMTE5NTc4LCA2MzgxMiwgNjM4MTEsIDYzODEwLCA2MzgwOSwgMjI4OSwgNjM4MTUsIAogICAgIDYzODE0LCA2MzgxMywgNjA0NywgMTU5NywgMTIwMTQzLCA3ODAsIDIwNiwgNzc5MjUsIDQ5MzYsIDY1MTQ3LCA4MTY4LCAKICAgICA2MzkzMCwgMjA3NiwgMTA5MywgOTg4MiwgNjM5MzQsIDIwODIsIDYzOTMyLCAxMjgxNTAsIDYzOTI5LCAzNTQ2LCAxNjA1LCAKQEAgLTE4NTA3LDI2MiArMTg1MjYsMjYyIEBACiAgICAgNDM2NTksIDEyOTUxLCAxMjA2MzgsIDk5MDYsIDIwNTQsIDIzMzQsIDc4NTE1LCA2MzkxNiwgNTQ4MywgNjM5MTQsIDY5NzM3LCAKICAgICA2MzkxMSwgNTQ4NCwgNjM5MDksIDYzOTA4LCAyNTM5LCAwLCA0Mzk4MCwgNTQ4NSwgMCwgNDI2OTcsIDkwNjEsIDU1MzQsIAogICAgIDEwNjcyLCA0NTAyLCAwLCAyNTMsIDAsIDY4MjA4LCAwLCA5MjAzLCA3NDIzMSwgMCwgMTE1MzAsIDkyNTQyLCA2ODY2OCwgMCwgCi0gICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2ODksIDcwMDQ0LCAxOTUwNjUsIDAsIAotICAgIDg0MTMsIDk4MzgwNywgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCi0gICAgMCwgMTI2NjM5LCAwLCAwLCA5NDA3OCwgMTI4MTMzLCAxMjc3NjcsIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgNDI5MTMsIAotICAgIDkyMTg3LCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgMTQzNiwgNzM4NDQsIDU1MjI2LCAxMjgzNTMsIAotICAgIDYzOTgyLCA3MzkzLCAxMjgwNywgNDM0MTMsIDYzOTA2LCAxNTk4LCA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIDEzMDcsIAotICAgIDAsIDEwNTE1LCA0MTU4OSwgMTI4Njk4LCAwLCA2MjE4LCAwLCAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCA1NDEzLCAKLSAgICA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCA0MTc0MywgNzM5MzcsIDY4MDEsIDk4MzYyNCwgNDUxOCwgCi0gICAgMTA5OTAsIDY1MDczLCA1MTY3LCA0NDgxLCAzNzcxLCAxMjAxNTgsIDI3MTAsIDAsIDY5MjQzLCA0MTcyNCwgMCwgNDMwNzMsIAotICAgIDQxNjkwLCAxMjQ3OSwgOTgzNjI2LCAwLCAwLCA5ODM4MDksIDcwMDQ2LCAxNjI4LCAxMjcxNDksIDk4MzQ3OSwgOTgzNzIyLCAKLSAgICA2NTI2MiwgNjMzMywgMTA3ODMsIDQyMzE1LCAwLCA2Mzg1NSwgOTQwNTYsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAxMzAwNCwgCi0gICAgMCwgNDQ1NywgMCwgMCwgMCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCA2ODQ2NCwgMTI2MzMsIAotICAgIDEyODcwLCA2OTcwNSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCA1Njg2LCAwLCA3NDI1MSwgMCwgMTIwNjQ3LCAKLSAgICAwLCA1MCwgMTA1NTgsIDk4NzEsIDQyNjEyLCA0MzY1NSwgMCwgMCwgMCwgNjY0NjgsIDAsIDEzMjU5LCA0NDQ4LCAwLCAKLSAgICA5ODM4MzYsIDAsIDcwMDQzLCA2Nzg1MywgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAwLCA5MTc2MDcsIDEyNzU0NCwgCi0gICAgMTI3MDc5LCAxOTUwNTAsIDEyNzg1MiwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgMTE4ODcwLCA4ODEyLCAwLCAKLSAgICAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIDY5NjMyLCA5ODk0LCAwLCAKLSAgICAwLCAwLCA0NjM2LCA1NTI2MiwgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgMCwgMTIwNDk1LCAwLCAxMjgyODQsIAotICAgIDEyMjc3LCAxOTQ2MjcsIDExOTk1LCA5MjU1MywgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAwLCA5MjQyNiwgMCwgNjUzMSwgCi0gICAgMCwgMTI3ODQ2LCA0NzMsIDQzNDE1LCAwLCA5ODM2NDEsIDE4NzMsIDEwODcsIDAsIDAsIDAsIDc4NTI3LCA2NjQzOSwgCi0gICAgNDMyMTgsIDk4MzEyMywgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDk4MzU3MSwgMCwgOTQ4OSwgMCwgMCwgCi0gICAgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCAxMjg4NjMsIDEzMjk1LCA0MzE5MSwgMTI4MDMwLCAwLCAxMTU0LCAzODU3LCAKLSAgICAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAwLCA0OTUsIAotICAgIDExOTAwNywgNDE3MTIsIDc5ODMsIDAsIDkzOTk3LCAwLCA2MzQ3LCAxMjAxNjUsIDc2NTQsIDQxNzEwLCA0MTk2LCAwLCAKLSAgICA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIDQ5OTksIAotICAgIDE5NDY0MiwgMCwgMTI2NTgyLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIDQxNzg5LCAKLSAgICAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgMTMwNTgsIAotICAgIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIDQzMzk5LCAwLCAwLCA0MTc5MSwgMTEwNCwgMCwgMCwgCi0gICAgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgNjU2OSwgMCwgMCwgMCwgNjk4NDksIDY3ODMsIDAsIAotICAgIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDk4Mzc5OCwgMTI4ODgyLCA0NzYxLCA2MzgyOCwgNDc2NiwgCi0gICAgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIDk4MzYwMywgCi0gICAgNDE1NDUsIDAsIDkyNDQ5LCAwLCAwLCAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIDUxMjIsIDQxNTI3LCAKLSAgICAwLCA2NjMyMCwgOTgzODAyLCAwLCAwLCAwLCA0MTUzNywgNjk2ODMsIDgzMDMsIDgyODIsIDExODE3LCA3Mzg1NywgMTAwMDMsIAotICAgIDczODU5LCA2NTkwNCwgNzM2MywgMTY4NiwgMCwgNzg0MDYsIDExNDY3LCAzNjY0LCA2NTkyMSwgNjQyOTksIDE5NDY2NCwgMCwgCi0gICAgMCwgNDMyNCwgMTI2LCA0MjI0NiwgMTE5MTUyLCAwLCA3NDM3OCwgNjU5MjYsIDc3NDQsIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCAKLSAgICA3ODA1MiwgNDM4MTcsIDY5NjYsIDQzODIyLCA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgMCwgNDc2MiwgMTEwMywgMCwgMCwgCi0gICAgNDc2NSwgOTgzNDg0LCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIDIwNTAsIDEwODcxLCA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIAotICAgIDEyODg2NywgMTk0NjY3LCAxMTU0NiwgNzQ3OTQsIDMzNywgMCwgNDI1OTEsIDg2MjcsIDEyMjc5LCAxMTExLCAwLCA5MjE2MSwgCi0gICAgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCAKLSAgICA5MTc1NjEsIDAsIDExOTU3NSwgMjI5MywgMCwgNjY2NTQsIDAsIDkyNjc2LCAwLCAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIAotICAgIDAsIDkyNTY5LCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIDQxNzkzLCA2NTc2MywgNzQyMjEsIDEyMDE0MSwgCi0gICAgNDE3OTIsIDQyNzcwLCA5NDA1NCwgNjU3NjIsIDExODgyOSwgNDM4MjEsIDU3MDksIDAsIDk0MDUzLCA0MzgxNiwgMCwgMCwgCi0gICAgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgNDM3OTcsIDU3MDYsIDY0NzY4LCA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgCi0gICAgMTA5OTEsIDEyODgxNiwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAxMzE3MCwgMTI1NDAsIDkxNzU3NywgNDI2MDUsIAotICAgIDEyMDc2NSwgMTI2NjE3LCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAKLSAgICAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgCi0gICAgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCA5MjIyNiwgMTMyNDYsIDg2NCwgMCwgCi0gICAgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgCi0gICAgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDkyNTc1LCAxMjM2LCAxMzIwOCwgMTMyNjEsIDEzMTg5LCAxMzE4OCwgOTM5OTMsIDAsIAotICAgIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgCi0gICAgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgNDE1MjIsIDk4MzkwNiwgOTIxNjgsIAotICAgIDk4Mzc2MywgOTE3ODU4LCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAKLSAgICAxMzI3MiwgMTMxOTQsIDEzMzQsIDY5OTI2LCA0NDc5LCAxMTc4LCA2NTU4NiwgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCAKLSAgICA0NjAxLCAwLCAwLCA5ODM3NTYsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgNjM3ODYsIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgCi0gICAgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAxMDE5MiwgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgCi0gICAgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDk4MzEzMSwgMCwgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAKLSAgICAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIAotICAgIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIAotICAgIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgNjM3OTgsIDYyNjAsIDAsIDAsIDk0MDc0LCA2Mzc5MywgCi0gICAgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIAotICAgIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCA5ODMzMjEsIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIAotICAgIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIDAsIDAsIDYzNzY5LCA5NTMwLCA5ODMxMTksIDEyMjMyLCAKLSAgICAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAxMTA1MywgCi0gICAgMTI4Nzk2LCA2Mzc0NCwgMTI4MTA3LCAwLCA3NTg4LCA2Mzc0OCwgMTY5MywgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgCi0gICAgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDEyODM1NiwgMTE2NjUsIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgCi0gICAgNzg2ODEsIDExNTEzLCAwLCA2MTU3LCA2Mzc3NSwgNjM3NzQsIDYzNzczLCAxMzE5MSwgMTIxNzAsIDM1MDAsIDMxMzksIDAsIAotICAgIDMxNzAsIDEyNDg1LCAwLCAxMDg3MiwgNzgyNzEsIDEzMDA2LCA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgCi0gICAgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAwLCA5NDAzOSwgMCwgOTI0NTUsIDczODYsIDAsIDY0NDQ0LCAwLCAKLSAgICAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgMTAwMjUsIDY5OTE1LCAyOTE4LCAwLCA2NTMwMCwgCi0gICAgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIDEyNzgyOSwgNjUzOTMsIDAsIDc0MTM4LCAwLCAwLCAKLSAgICAwLCA3NDEzOSwgOTI3MTIsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgCi0gICAgMTIwNzcxLCAwLCAwLCAxMDg4OCwgOTgzNjA0LCA2NTI0MiwgMCwgMzMzMCwgMCwgMCwgOTgzOTY1LCAwLCAwLCA3NDI1OSwgCi0gICAgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIDAsIAotICAgIDQzMDk0LCA3MDAyMywgNDM2NTAsIDk0MDM3LCAwLCA5MDM1LCAwLCAwLCAxMjgwMDUsIDAsIDkyMjA3LCA2ODEyNSwgMCwgCi0gICAgMTY0LCAwLCA5NDA2NywgOTQwMDAsIDY5NTgsIDAsIDQzMTE2LCAwLCA3MDAxOSwgMTMyNDUsIDAsIDAsIDEyNzM3NiwgMCwgCi0gICAgNzAwMzEsIDEyNzc1NiwgMTI2NjYsIDEzMTc1LCAxMzIwNywgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCA3NDQ3LCA1OTI5LCAwLCAKLSAgICA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgOTcxLCAxMzA2MiwgMCwgMCwgCi0gICAgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIDAsIDc4MTQ2LCA5MjYxMSwgMCwgMCwgMCwgMTAwNDUsIDEyODgyLCAKLSAgICAxMzI3NSwgMTI4MTYxLCAxMTA1NywgMCwgMTMyNzYsIDAsIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIAotICAgIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIAotICAgIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDY5ODQ3LCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgCi0gICAgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAwLCA0MTc4MSwgMTA0ODYsIDQxNDgwLCA0MzAwMiwgOTg5OSwgCi0gICAgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgNTc4OCwgODA5MiwgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgCi0gICAgMCwgNDM4OCwgMCwgNzQ2LCAxMjA3ODQsIDAsIDAsIDEyMDE4LCA2NTI5NCwgMCwgMCwgMCwgMCwgNDQyMiwgNDcwOCwgCi0gICAgMzc5OSwgNzQyOTIsIDExOTM1NywgMCwgNzQ0MzAsIDAsIDExNzAwLCA0Mzc0LCAwLCAxMjgxNzksIDEzNjQsIDAsIDgwMzgsIAotICAgIDAsIDkxNzU5NywgMTI4NjgsIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIAotICAgIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCAKLSAgICAxMjYxNywgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIDk4MzU2OCwgMCwgMCwgOTI0MDIsIDEyODA2MiwgMTI5NjUsIAotICAgIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAxNTU2LCA1Mjc0LCAxMzIxMCwgMTIwMTI1LCAxMDAxNywgOTczMywgCi0gICAgNDE3ODcsIDk4MzIzNywgMTI2OTk0LCA0MTM3MywgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgCi0gICAgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIAotICAgIDAsIDAsIDQyNjg4LCAxMjQ0MSwgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIAotICAgIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgCi0gICAgMCwgMTIwNzg1LCAxMTk4NzQsIDk0MTA3LCAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAKLSAgICAxMTk4NzksIDY2NTkwLCAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIAotICAgIDczODQ5LCAwLCA0MzYzOCwgNzg1MzcsIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCAKLSAgICA5ODIsIDI3NTYsIDEzMjkyLCAxMzIwNiwgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIAotICAgIDQzMjM4LCAwLCAxMzE5MCwgMTMxODcsIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAKLSAgICAxNjk0LCA4MjE2LCA3MTM2OSwgNjc3MCwgNDMzMzEsIDAsIDY1NjIwLCA5ODM3MTksIDQzNTQ0LCAxMjY0NjYsIDAsIAotICAgIDQxNDQ0LCA2NTYyMSwgNjk5NTUsIDkxOTcsIDUyNDYsIDExOTEwNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAKLSAgICAxMjMxNCwgNjU2MTYsIDUyMzgsIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIAotICAgIDEyODUzNywgMzkzNiwgMTE5MzMxLCAxMTY5OSwgNDEzNDcsIDEyNzI0OSwgMTMyMzUsIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAKLSAgICAxMzIzOSwgMTI2OTIsIDc5NjksIDEyNzI2NiwgNzIxOSwgMTI3MjUwLCAxMjgyNTEsIDEyMDUwOSwgMCwgNjYyMjQsIDczNCwgCi0gICAgMjk3OSwgMTIwMzAzLCA2NTYxOSwgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIAotICAgIDEyMDMxMCwgNzQ1MTEsIDQxNzcwLCAxNjcwLCA2NDQyLCAxMjAzMTcsIDQyNDQ2LCA1Mzc5LCAxMjAzMTgsIDQxMTYzLCAKLSAgICA3NDgzMiwgMTIwMzE1LCAxMjAzMTQsIDExNTA2LCAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIDQxNzc1LCAwLCA3MTMwLCAKLSAgICA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIDEyMTEwLCA0MjY3MywgNjU1NzIsIDY1MjkzLCA2NTI1MCwgMTMyNjUsIAotICAgIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgOTI2NDcsIDU4MDgsIDY1OTIyLCAwLCAxMjk2NywgNjYwNDEsIDU2MTIsIAotICAgIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgMTI2NjM3LCAxMTk2NSwgMCwgNjgzNTgsIDAsIDY5Nzg5LCAwLCA5MjI2MCwgCi0gICAgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAxMTk2NTEsIDEyODUxNCwgMCwgNDE5MjEsIDExODg1OCwgOTc1NiwgNjk4NSwgCi0gICAgMTE5MjU4LCA3ODQ5MCwgNzQyMTksIDAsIDAsIDExODk5NywgODAxMiwgNTY3NCwgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCAKLSAgICA1NTg4LCAwLCA0MTkyNSwgMTI4MTI0LCA0MTkyMCwgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgCi0gICAgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAxNzI3LCAxMjA3MjUsIDQyNDM2LCAwLCAwLCAwLCA3NDIyMiwgCi0gICAgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIDc0MDkwLCA1ODI2LCA1NTIzMiwgNTgxMywgMCwgMTIwNzEyLCAKLSAgICA1ODQxLCA1ODM3LCA1NTIzNCwgMCwgMzEwNSwgMTI4MjksIDU4MzgsIDU3OTYsIDAsIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgCi0gICAgNTc5NywgNDEwMTEsIDU4NjUsIDEyMDA5MSwgNzk1NiwgNTk4LCAwLCA2NDY0OSwgNTgwNiwgNDIzOTgsIDAsIDkwMzcsIAotICAgIDU2NzEsIDEyMDA0MSwgMCwgMCwgMCwgMTI4ODU1LCAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIAotICAgIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0ODMsIDAsIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIAotICAgIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIAotICAgIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgCi0gICAgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgCi0gICAgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCAKLSAgICA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgCi0gICAgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIAotICAgIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCAKLSAgICA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIDEyNjYxNCwgMCwgODY3NiwgOTgzMjgzLCAwLCA1NTgyLCA0NTEsIAotICAgIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAKLSAgICAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIAotICAgIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgCi0gICAgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCAKLSAgICA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIAotICAgIDk4MzgxOCwgODI5MiwgMTk1MDc0LCA0OTgwLCA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgCi0gICAgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgCi0gICAgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgCi0gICAgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIAotICAgIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAKLSAgICAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgCi0gICAgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIAotICAgIDc0MTA1LCAzNjMzLCA5ODM4OTEsIDY1MTYyLCA0MTIzNCwgMTIwODksIDc4MjgxLCA5NzcxLCA5ODM4OTYsIDEzMjUxLCAKLSAgICAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgCi0gICAgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCA3NDQ4MSwgNjU4MzQsIDgzMjQsIAotICAgIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTAsIDg5MzAsIDY2Njc4LCA3NDI0OSwgMTE5MywgCi0gICAgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgNzc5MDQsIDkyNjQwLCA3NzkwNSwgCi0gICAgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAwLCAwLCAwLCA0MjgxNSwgMCwgCi0gICAgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAwLCAwLCAxMjAzMzksIDY1MTU5LCAKLSAgICA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgMTIzMjYsIDk4Mzg0NywgMCwgNDI4MDgsIAotICAgIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg1MiwgMCwgMCwgMCwgMCwgMCwgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCAKLSAgICA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgCi0gICAgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIAotICAgIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIAotICAgIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgMCwgOTgzNjUxLCAwLCA3Mzg2MCwgMCwgMCwgCi0gICAgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIAotICAgIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAwLCAxMjg3ODksIDAsIDAsIDc4MywgCi0gICAgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCA2ODM3OCwgNDU1NiwgMCwgMCwgCi0gICAgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgMTI3NTI3LCA5MTc3LCA4OTAyLCAKLSAgICA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc0NiwgOTgzNjI3LCA2Mzk5OSwgMjAxNiwgNDE5MTcsIDk3ODgsIDYzOTI4LCAKLSAgICAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgODU3OSwgNDE5MTQsIDc5ODEsIDAsIAotICAgIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCA3NDI3NiwgMTIwMDgwLCA2Nzg0LCAKLSAgICA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCA2NjQ3MiwgOTgzOTIwLCA2NDI4OSwgCi0gICAgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIDEyNjUwNSwgMTEwNTEsIDk4MzI4OCwgMCwgCi0gICAgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgCi0gICAgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCA2MzkyMiwgNjU5NCwgOTgzNzMxLCAwLCAwLCAKLSAgICAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgCi0gICAgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIAotICAgIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIAotICAgIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgCi0gICAgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgCi0gICAgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCAKLSAgICA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCAKLSAgICA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIAotICAgIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIAotICAgIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCAKLSAgICA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIAotICAgIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgCi0gICAgNDM2MjgsIDAsIDk4MzI4NCwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCAKLSAgICA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIAotICAgIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCAKLSAgICA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2NzcsIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCAKLSAgICA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAKLSAgICAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxMCwgMCwgCi0gICAgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgCi0gICAgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAxOTQ3MjUsIDk4MzkwMCwgNjUwNzcsIDAsIDYzODgsIAotICAgIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgCi0gICAgOTgzNzUzLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzUyLCAKLSAgICAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk4MzY4OCwgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCA5MjIxNywgMTMxNjMsIDk4MzIwMiwgMTIwODMxLCAKLSAgICA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIAotICAgIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCAKLSAgICA0MjQ0MiwgNjU0NzAsIDk4Mzg5OCwgNjQyMDIsIDEzMTYwLCA3NzU5LCA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIAotICAgIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgCi0gICAgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAKLSAgICAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgCi0gICAgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIAotICAgIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgCi0gICAgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIAotICAgIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgCi0gICAgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgCi0gICAgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwMywgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIAotICAgIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIAotICAgIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIAotICAgIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIAotICAgIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIAotICAgIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgCi0gICAgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCAKLSAgICA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ4NiwgCi0gICAgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCAKLSAgICA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIAotICAgIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIAotICAgIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAwLCAxMjgzOCwgOTgzOTY5LCAxOTk0OCwgMCwgCi0gICAgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgCi0gICAgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCAKLSAgICA5MjY4MCwgOTgzNzgwLCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIAotICAgIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIAotICAgIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIAotICAgIDEyODIyLCA0MjY5OSwgMCwgOTgzODE1LCA3NDgxOCwgMTQyMywgMCwgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIAotICAgIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCAKLSAgICA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIAotICAgIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgCi0gICAgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgCi0gICAgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIAotICAgIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCAKLSAgICA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgCi0gICAgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAKLSAgICAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgNDE1MTgsIDAsIDAsIDAsIDAsIAotICAgIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCA0MjYzLCA4NzkzLCAwLCAwLCAKLSAgICA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCA1ODg4LCA0MTM1OCwgNjQ4NjMsIAotICAgIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgCi0gICAgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIDAsIDY0OTE0LCA5MTc3ODcsIAotICAgIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAxMDg0MiwgNDEzNTQsIDQyMTIzLCAKLSAgICA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgCi0gICAgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzE0LCAxMjY1ODEsIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIAotICAgIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCA2NDMyMSwgODM1OSwgMCwgMTI2ODksIAotICAgIDAsIDE5NDU5NCwgMCwgOTgzMzA0LCA5ODM4NzIsIDY4MTgzLCAwLCA5ODMzMDYsIDEyODcsIDU0MzYsIDAsIDk4MzMwOSwgCi0gICAgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIDg5ODUsIDEyMTA5LCA5ODMzMTUsIDAsIAotICAgIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgCi0gICAgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIAotICAgIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCAKLSAgICA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCA0OTIsIDg2ODUsIDAsIDk4Mzc1MCwgMCwgCi0gICAgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIAotICAgIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgCi0gICAgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCA3ODYzMywgMTA4OTYsIDAsIDE3OTksIAotICAgIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAKLSAgICAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAKLSAgICAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCAKLSAgICA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIAotICAgIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgNDEyMDgsIDk4MzcwNCwgNDExNjgsIAotICAgIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCA3ODYzNCwgMTk0NywgMCwgMCwgCi0gICAgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIAotICAgIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIDEyMDY5NiwgNDkwNCwgOTgzMzI1LCAKLSAgICA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAxMTk1ODcsIDY0NDE1LCAwLCAwLCAKLSAgICA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIDk4Mzc2OCwgMTI3NjMsIAotICAgIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgNDIxMTYsIDkxNzU3OCwgCi0gICAgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAwLCA0MjU4MywgCi0gICAgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgNDE4NTIsIAotICAgIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgNjAxOCwgCi0gICAgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjI0LCAxMDQ2NywgMCwgMjQ0MywgCi0gICAgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAorICAgIDExODkwNywgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgNDIzNTQsIDEyODA5OSwgOTgzNjk4LCA3MDA0NCwgMTk1MDY1LCAwLCAKKyAgICA4NDEzLCA5ODM4MTYsIDAsIDU2OTMsIDcyNzIsIDAsIDEzMjA5LCA2NDQ3MCwgNjU4MzEsIDc0MzUwLCAxOTUwNjMsIDAsIDAsIAorICAgIDAsIDEyNjYzOSwgMTIwMDk3LCAwLCA5NDA3OCwgMTI4MTMzLCAxMjc3NjcsIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgCisgICAgNDI5MTMsIDkyMTg3LCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgMTQzNiwgNzM4NDQsIDU1MjI2LCAKKyAgICAxMjgzNTMsIDYzOTgyLCA3MzkzLCAxMjgwNywgNDM0MTMsIDYzOTA2LCAxNTk4LCA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIAorICAgIDEzMDcsIDAsIDEwNTE1LCA0MTU4OSwgMTI4Njk4LCAwLCA2MjE4LCAwLCAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCAKKyAgICA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCA0MTc0MywgNzM5MzcsIDY4MDEsIDk4MzYzMywgCisgICAgNDUxOCwgMTA5OTAsIDY1MDczLCA1MTY3LCA0NDgxLCAzNzcxLCAxMjAxNTgsIDI3MTAsIDAsIDY5MjQzLCA0MTcyNCwgMCwgCisgICAgNDMwNzMsIDQxNjkwLCAxMjQ3OSwgOTgzNjM1LCAwLCAwLCA5ODM4MTgsIDcwMDQ2LCAxNjI4LCAxMjcxNDksIDk4MzQ4NywgCisgICAgOTgzNzMxLCA2NTI2MiwgNjMzMywgMTA3ODMsIDQyMzE1LCAwLCA2Mzg1NSwgOTQwNTYsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAKKyAgICAxMzAwNCwgMCwgNDQ1NywgMCwgMCwgMTk0ODE4LCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIAorICAgIDY4NDY0LCAxMjYzMywgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIAorICAgIDc0MjUxLCAwLCAxMjA2NDcsIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgCisgICAgMTMyNTksIDQ0NDgsIDAsIDk4Mzg0NSwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIAorICAgIDkxNzYwNywgMTI3NTQ0LCAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAKKyAgICAxMTg4NzAsIDg4MTIsIDAsIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgCisgICAgNjk2MzIsIDk4OTQsIDAsIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAKKyAgICAxMjA0OTUsIDAsIDEyODI4NCwgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIAorICAgIDAsIDkyNDI2LCAwLCA2NTMxLCAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY1MCwgMTg3MywgMTA4NywgMCwgMCwgMCwgCisgICAgNzg1MjcsIDY2NDM5LCA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCAKKyAgICA5NDg5LCAwLCAwLCA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIAorICAgIDExNTQsIDM4NTcsIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIAorICAgIDAsIDQ5NSwgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIAorICAgIDQxOTYsIDAsIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgCisgICAgNDk5OSwgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgCisgICAgNDE3ODksIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAKKyAgICAxMzA1OCwgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAKKyAgICAxMTA0LCAwLCAwLCAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgCisgICAgNjc4MywgMCwgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzODA3LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCAKKyAgICA0NzY2LCA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgCisgICAgOTgzNjAzLCA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgCisgICAgNTEyMiwgNDE1MjcsIDAsIDY2MzIwLCA5ODM4MTEsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIAorICAgIDczODU3LCAxMDAwMywgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCAKKyAgICA2NDI5OSwgMTk0NjY0LCAwLCAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgCisgICAgMTk0NjM2LCA3NDI3NywgNzQzMDIsIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAKKyAgICAwLCA0NzYyLCAxMTAzLCAwLCAwLCA0NzY1LCA5ODM0OTIsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIAorICAgIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgCisgICAgMTIyNzksIDExMTEsIDAsIDkyMTYxLCA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgCisgICAgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIAorICAgIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgCisgICAgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgCisgICAgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIAorICAgIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIAorICAgIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCAKKyAgICA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCAKKyAgICA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIAorICAgIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAKKyAgICAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAKKyAgICAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIAorICAgIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCAKKyAgICA0MTUyMiwgOTgzOTE1LCA5MjE2OCwgOTgzNzcyLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgCisgICAgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAKKyAgICAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIDQ2MDEsIDAsIDAsIDk4Mzc2NSwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgCisgICAgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAKKyAgICAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCAKKyAgICA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCAKKyAgICA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIAorICAgIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCAKKyAgICA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIAorICAgIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIAorICAgIDk4MzMyOSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgCisgICAgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIAorICAgIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAKKyAgICAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgCisgICAgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgCisgICAgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIAorICAgIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAKKyAgICAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAKKyAgICAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgCisgICAgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCAKKyAgICA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAKKyAgICAzMzMwLCAwLCAwLCA5ODM5NzQsIDAsIDAsIDc0MjU5LCAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgCisgICAgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIAorICAgIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIAorICAgIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAKKyAgICAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIAorICAgIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgCisgICAgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgCisgICAgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIAorICAgIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIAorICAgIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIAorICAgIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCAKKyAgICA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIAorICAgIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIAorICAgIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAKKyAgICAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIAorICAgIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgCisgICAgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIAorICAgIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCA0MTc4NywgOTgzMjQzLCAxMjY5OTQsIDQxMzczLCAKKyAgICA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgCisgICAgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgMCwgMCwgNDI2ODgsIDEyNDQxLCAKKyAgICAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIAorICAgIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAwLCAxMjA3ODUsIDExOTg3NCwgCisgICAgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIDExOTg3OSwgNjY1OTAsIAorICAgIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgNzM4NDksIDAsIDQzNjM4LCAKKyAgICA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIDk4MiwgMjc1NiwgMTMyOTIsIAorICAgIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgNDMyMzgsIDAsIDEzMTkwLCAKKyAgICAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIDE2OTQsIDgyMTYsIDcxMzY5LCAKKyAgICA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcyOCwgNDM1NDQsIDEyNjQ2NiwgMCwgNDE0NDQsIDY1NjIxLCA2OTk1NSwgCisgICAgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIDEyMzE0LCA2NTYxNiwgNTIzOCwgCisgICAgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIAorICAgIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIDEzMjM5LCAxMjY5MiwgNzk2OSwgCisgICAgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAyOTc5LCAxMjAzMDMsIDY1NjE5LCAKKyAgICA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIAorICAgIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIAorICAgIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgCisgICAgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCAKKyAgICA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAKKyAgICAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIAorICAgIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgCisgICAgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCAKKyAgICA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIAorICAgIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgCisgICAgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgCisgICAgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCAKKyAgICA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgNTY3MSwgMTIwMDQxLCA5ODMyNTUsIDAsIDAsIDEyODg1NSwgCisgICAgMCwgODQ3LCAxMjgyNDIsIDk1MjksIDAsIDY2NjU3LCA2OTgwLCA3ODQ4MywgMTIwMDM1LCA3ODQ4NCwgOTgzNDkxLCAwLCAKKyAgICAxMjAwMzMsIDc4NDg2LCAwLCAwLCAxMjAwMzksIDQyNjgzLCAwLCA5ODMwNTUsIDcxMTQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgCisgICAgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIAorICAgIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgNjk3MjcsIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAxMDE3NSwgCisgICAgMTAzODgsIDQyNzk5LCA5NDEwMCwgNDEwMTMsIDEwNTY4LCAwLCA5ODM2MTgsIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIAorICAgIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgNDI2MDgsIDc4NDY5LCA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgCisgICAgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIDE2MDksIDkwMiwgMCwgNjM5MzYsIDEyODg3NSwgMTE2NjEsIAorICAgIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAyNTU0LCA1MTU4LCA1NzE0LCAyMjEzLCAwLCAwLCA4MDcsIAorICAgIDQzMDc5LCAwLCA3ODQ3NSwgOTc2LCA1NTExLCA2NDU1MywgMCwgNDIxNTUsIDAsIDQxMzU2LCA3NDExMCwgMTE4ODAxLCAKKyAgICAxMjY2MTQsIDAsIDg2NzYsIDk4MzI5MSwgMCwgNTU4MiwgNDUxLCA2Mzk0MSwgNTc5OCwgOTM0OSwgNDIwMTgsIDEyNzg1OCwgCisgICAgMCwgMCwgNDM2MDksIDU5MDYsIDEyMDU1MywgMTQ0MCwgMCwgMTI4ODUzLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgCisgICAgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIDAsIDQzMzkzLCAxMDA5NCwgMCwgMTE1MjksIDEwODU3LCAxMjA2NDMsIAorICAgIDY2NDM2LCA2NTQ2LCA5MywgODEwMiwgMCwgNjg0MDUsIDAsIDAsIDgxNzEsIDAsIDExOTA5NywgMTI3MDY0LCA5MTc1NDMsIAorICAgIDM4MywgNzE1NCwgNDE2NTYsIDkyNjM0LCA5NDA0MCwgMCwgNTE4NywgNzEyOTYsIDEyNzI3NywgMTEyODYsIDY4NjIwLCAKKyAgICA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCA5ODM4MjcsIDgyOTIsIDE5NTA3NCwgNDk4MCwgCisgICAgODg2MCwgNzM5NDcsIDEwMDI4LCA2NTI5MSwgNzA3NiwgMTMxODIsIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCA3OTcyLCAKKyAgICAwLCA3ODc4NSwgMCwgNzkwMCwgMCwgMTEzMDksIDM4MDYsIDQxOTgsIDQyNzI1LCAwLCA2NzY1NiwgOTk5NSwgMCwgOTI1NTIsIAorICAgIDAsIDEyOTMxLCAwLCA0MjY4NCwgNzQyODUsIDIwODgsIDY0MjEzLCA2NDM2NiwgNjUxNTYsIDg4MTQsIDQyMjM4LCA3NDc3MSwgCisgICAgMCwgMCwgMTI4MzYsIDAsIDAsIDc0MzQyLCA4NTkzLCAwLCAwLCA2ODQ0NSwgMTMyNTUsIDAsIDAsIDc0NjQsIDAsIDY1ODY1LCAKKyAgICAwLCAxOTQ2NTAsIDEyNzE0NCwgMCwgOTM0MiwgMTIwNDY0LCAwLCA2NDUxNiwgMCwgNzg3OTIsIDEwMTI5LCA0MTAwNywgCisgICAgNzQzNzUsIDAsIDQwOTk1LCAxMjIwOSwgNDEwMTIsIDExOTEzNiwgMCwgMCwgNjk3MjQsIDQwOTkyLCA5MjI2NCwgMTI3MTUzLCAKKyAgICA2ODY1MywgNDM1NTgsIDU1MjIsIDAsIDYxLCAwLCA3NDEwNSwgMzYzMywgOTgzOTAwLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCAKKyAgICA3ODI4MSwgOTc3MSwgOTgzOTA1LCAxMzI1MSwgMTI4NzAxLCAwLCA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgNjY0ODMsIAorICAgIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAxMDg5MCwgCisgICAgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMTI3NDY1LCA2NDczNywgMCwgOTgzNjU5LCA4OTMwLCAKKyAgICA2NjY3OCwgNzQyNDksIDExOTMsIDEwMDU2LCAxODAwLCAxMzI1MywgMTMyNTIsIDc4MjksIDAsIDAsIDc3NDMsIDAsIDAsIAorICAgIDc3OTA0LCA5MjY0MCwgNzc5MDUsIDkwMzQsIDYwMzksIDAsIDEwMDc1LCAwLCA0MTAxOCwgNjU2ODMsIDEwMzM4LCA2NjQ2OSwgCisgICAgMCwgMCwgMCwgNDI4MTUsIDAsIDQxOTY2LCAwLCAxMjc0NzEsIDAsIDExNzkyLCA0MzA2NCwgNDEwMjUsIDkxMSwgNzUzOSwgCisgICAgMCwgMCwgMTIwMzM5LCA2NTE1OSwgNjQzOTAsIDAsIDAsIDU1MjAsIDExNjYyLCAwLCA2NTMzMCwgNDI4MTIsIDAsIDAsIAorICAgIDEyMzI2LCA5ODM4NTYsIDAsIDQyODA4LCAxMjgzMzcsIDkzNDgsIDY0OTAxLCA5ODM4NjEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDkxNzU4NCwgNDM3MDIsIDk4MzU3NiwgNTg1NywgNjUzNDIsIDkyNzI3LCAxMTkxMjAsIDEyMDA3OSwgODY0NCwgMCwgMCwgMCwgCisgICAgNzQyOTYsIDQxOTA5LCAwLCAxMjAzMzIsIDI3OTEsIDY5NjYzLCAxODkxLCA2OTgyNCwgMCwgNDE5MDcsIDY2NjQ3LCAKKyAgICAxMTg5MzksIDg3NjEsIDEyOTQyLCA1NzQ4LCAwLCAxMDc3MywgMCwgMCwgODc5NiwgNzgxNDksIDY0MTIsIDIwNjEsIDg1MjAsIAorICAgIDEzMTQ2LCAxMjcxODUsIDYzOTMxLCAwLCA2NTkwMiwgMjg4MiwgMCwgMCwgMTI4NDMsIDQ1MjAsIDEyMDM0NSwgOTI0NTksIAorICAgIDAsIDk4MzY2MCwgMCwgNzM4NjAsIDAsIDAsIDY0MzQ1LCAwLCA5MjAxLCAxMjgzMTQsIDE5NDk0MCwgMCwgMCwgNDM2NzksIAorICAgIDkxNzU4NSwgNjUxMTcsIDkyMjcwLCAwLCAxMDQyNywgMCwgMzg0NCwgMTIwNjc1LCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgCisgICAgMCwgMTI4Nzg5LCAwLCAwLCA3ODMsIDE5NDkzNSwgMCwgMCwgOTgzMDY0LCAxOTQ3MjAsIDY1MDU2LCAzNjIwLCA0MTE4MCwgCisgICAgNjgzNzgsIDQ1NTYsIDAsIDAsIDE5NDkzMywgNzQyNTAsIDAsIDY3NjU3LCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIAorICAgIDEyNzUyNywgOTE3NywgODkwMiwgOTM5NTgsIDk4MzksIDAsIDEyODkxLCA5ODM3NTUsIDk4MzYzNiwgNjM5OTksIDIwMTYsIAorICAgIDQxOTE3LCA5Nzg4LCA2MzkyOCwgMCwgMTg2MiwgNjU4MDAsIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgNDE5MTksIAorICAgIDg1NzksIDQxOTE0LCA3OTgxLCAwLCA2NjAxNywgNDUwOCwgNjQ4ODMsIDkyNDU2LCA5MjUyMiwgMTI3ODE0LCAwLCA2NDU5MiwgCisgICAgNzQyNzYsIDEyMDA4MCwgNjc4NCwgNzg3ODgsIDY4MTgxLCAwLCAwLCAwLCAxMjc1MzQsIDEyMTQ3LCA5MDI0LCA2NjM3OCwgCisgICAgNjY0NzIsIDk4MzkyOSwgNjQyODksIDY1Mjg5LCA3ODE1MSwgNjY2NTgsIDE5NDkyOSwgNjQ1MDksIDc4MTUyLCAwLCAKKyAgICAxMjY1MDUsIDExMDUxLCA5ODMyOTYsIDAsIDExMzU1LCA2NTg4NSwgMCwgMTI4MzEwLCA0MTIxNCwgMCwgMTIyOTksIDAsIAorICAgIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIDk5NjMsIDY4NjQ5LCAxMjY2MDksIDQwNDAsIDEyMDU3MCwgNjE2NywgMCwgCisgICAgNjM5MjIsIDY1OTQsIDk4Mzc0MCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIDYzODcsIDYzOTkwLCAxOTk0NywgNjM5ODgsIAorICAgIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIDY1NjA1LCA2ODAzLCAwLCA3NzM4LCA2Mzk4NiwgMTE0NDYsIDYzOTg0LCAKKyAgICA5MjY0MSwgMzQzNSwgNzgxNjQsIDQzODE0LCA0MzgxMCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAxMTg4OTgsIDEyNzQ4LCAKKyAgICA0Mjc0MiwgOTUxNywgMTE1MTgsIDAsIDc4NzkwLCAwLCA2Nzk5MywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIAorICAgIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgNDI3MCwgMCwgCisgICAgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAxMjAxMywgMCwgCisgICAgMCwgMTI2NDc5LCA0MTUsIDYzOTY0LCA2Mzk2MywgNDIzNDUsIDkyMzEwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgCisgICAgMCwgNjM5NjEsIDQ0NzIsIDAsIDAsIDc4MTU5LCA2OTY5OSwgOTE3OTM2LCA0MjM0MCwgNDc1NiwgMTI4MDc4LCA3MDgxLCAKKyAgICAxMDczMCwgNzY5MSwgMTAzMzEsIDYzODMwLCAxMTk2MjUsIDQyOTIyLCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIAorICAgIDE2MDQsIDk1NjUsIDEwNTM5LCA2OTcwMSwgNjU3NjQsIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCAKKyAgICA2NDg3MywgMTE5OTIsIDAsIDAsIDYzOTgwLCAxMTgwMSwgMzYyMiwgOTgzMTI0LCA2NDMzNiwgMTIwMTcsIDEwNDYzLCAKKyAgICA2Mzk4MSwgNDk2NywgNjQxODksIDE5NjYsIDQzNjI4LCAwLCA5ODMyOTIsIDAsIDAsIDYzOTcxLCA0MzQ3LCA0NDE2LCAKKyAgICA0MjA5OCwgMTEwMDksIDEwNjk0LCA2Mzk3MywgNDAyLCAwLCAxMzE0NywgMTI4NjkyLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAKKyAgICAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAwLCAxMTMwMiwgNjI1OSwgNDMzOTUsIDAsIDAsIDE5NDY3MCwgMCwgCisgICAgOTIzNTEsIDAsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMCwgOTIzNTksIDY0OTQyLCA5ODM1NTksIDE5NDczMywgOTgzNjg2LCAKKyAgICAxOTQ3MzIsIDAsIDc0MzAxLCAwLCAxMTI4MCwgMCwgNjk3ODQsIDc0MDYwLCAwLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCAKKyAgICA2NTAxOCwgNjY1MTYsIDU0MDksIDEyNzM3OSwgMTk0NjY5LCA3NDAyLCA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgCisgICAgMCwgNjY2MTYsIDY4NDIxLCA5ODM5MTksIDAsIDU0MDUsIDEyNzg3NSwgNjQ4NjYsIDAsIDExOTU4MywgMTI4MzQ1LCAKKyAgICA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIDY0NjkwLCAzMjU0LCAwLCAwLCAxMjgyMDcsIDQyMzkwLCA0MzY3OCwgCisgICAgMTk0NzI1LCA5ODM5MDksIDY1MDc3LCAwLCA2Mzg4LCAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgMCwgCisgICAgMzM3NywgMCwgMCwgMCwgMCwgNzgyMjgsIDAsIDk4Mzc2MiwgNDI2OTEsIDkxNzg4NiwgMTI3MTk4LCA3NDc2NywgMCwgCisgICAgMTI3MDc1LCAxMzc5LCAyNDYsIDAsIDk4Mzc2MSwgMzc4OCwgOTgzMTA2LCAxMTA0MSwgOTI1NDksIDY2MzA0LCAwLCAwLCAKKyAgICA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCA5ODM2OTcsIDEwNjU2LCAwLCA2NTIxNCwgMTE5MjQyLCA0MjU2NywgCisgICAgOTIyMTcsIDEzMTYzLCA5ODMyMDQsIDEyMDgzMSwgNzQ1OTcsIDMxODIsIDAsIDAsIDAsIDY1MDM0LCA2NTg4OSwgNDIxNjksIAorICAgIDQ3NTUsIDc0MjQ0LCAxOTQ2MjEsIDExNDQzLCAwLCA2NjMxOSwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAxMjE5LCAzOTM0LCAKKyAgICA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgNDI0NDIsIDY1NDcwLCA5ODM5MDcsIDY0MjAyLCAxMzE2MCwgNzc1OSwgCisgICAgNDI0ODIsIDQ4NSwgMTI4MDA2LCAwLCA5ODI4LCAwLCAwLCA0MjI4MCwgMCwgOTM1MSwgNzc3OCwgNjQzNzksIDc0OTYsIAorICAgIDQyNDMxLCA2OTE2LCAxMjA4LCAwLCAxMTk2MzEsIDExMDAyLCA0MjQ3MCwgMCwgMTE4OTQ2LCAwLCAwLCA3NDA0MSwgMCwgCisgICAgNzAwNDUsIDQzNTM5LCA1NDExLCA0MjE5NiwgMCwgMCwgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIAorICAgIDkzMzcsIDEyMDUyLCAxMDY0MywgNTUyNzEsIDk4MzE3OSwgMTIxNjYsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIAorICAgIDY1NjExLCAwLCAwLCAxOTQ3NTYsIDc0MzEwLCA2NTU0LCAwLCAxMTkxNCwgNTQ1MiwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCAKKyAgICA5MjU2MCwgMjcxMywgMCwgOTY1MCwgNDMzMzAsIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgOTI2NTksIDAsIDY4MjIzLCAKKyAgICA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCA0MTQxLCA5NjgyLCA2NTI4NywgMTUwOCwgMTI3MDEzLCA4Nzc5LCAxMDU2OSwgCisgICAgODcyNSwgMTMyOTksIDY2NjM4LCA2NTc1MCwgNDIyNjMsIDQxNDUsIDYzODAsIDY1NzUxLCA2NjYxMywgNDM5OTQsIDY1NzM4LCAKKyAgICA1NTI1MCwgOTE4NSwgOTU1MCwgMCwgNDM0MDMsIDAsIDAsIDAsIDY1NzM2LCA0MTk1MSwgNjQ4MTYsIDY1NzU2LCA5ODMyMDUsIAorICAgIDEyOTU1LCAxMDU5NiwgMjg4OCwgMTk0NjQ1LCAwLCAwLCA5NjU3LCA5MDE5LCAxOTQ3NjYsIDAsIDI4NzgsIDUzOTAsIDAsIAorICAgIDE5NDk2MSwgMCwgNjg2NzksIDQzNTUyLCA3NTAxLCA2MzI4LCAwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCAKKyAgICA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAxMjY1NDIsIDEwNjMyLCAxMTkzNCwgMTE0NTIsIDEzMzIsIDAsIDAsIAorICAgIDEyNjY0NywgMCwgMTE4ODg3LCAxNzkxLCA1MTkxLCA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgNDMzOTQsIDU1NSwgMCwgMCwgCisgICAgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCA3Mjg5LCA3NDA1NSwgNjQxNjEsIDg4NTQsIDY0MTYyLCA1ODU4LCAKKyAgICA0MTkyNywgMTA1ODIsIDAsIDE3ODQsIDEzNjEsIDE5NTA0NywgMCwgNzkwNSwgMCwgNjQ4NjgsIDEyODgxMywgMTMxNTgsIAorICAgIDkyMTY2LCA3MjExLCAwLCA5MzcxLCA3Mzk3MywgOTE3NTUzLCA2ODI4LCAxNjI1LCA5MjMwMiwgMCwgMTM0MiwgNjg0NDAsIAorICAgIDY0MTcxLCAxMjY3MDQsIDEwOTAzLCA5ODM0OTQsIDAsIDAsIDAsIDAsIDQ0ODIsIDQxNjA2LCAwLCAxMjg1NjksIDk4MzExMiwgCisgICAgMCwgNjQzODEsIDAsIDAsIDE5NTA5MCwgNDIyNDUsIDEyNjQ2NywgNDE5NzIsIDAsIDQ0NCwgMCwgOTEyNywgNjY2ODcsIAorICAgIDY2NjE5LCAxMjY0ODksIDc4MDI1LCAwLCAxMTM0OSwgNDA5OTEsIDkxNzU3MCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIAorICAgIDExOTcsIDEyODI4MiwgMTE0OSwgMTk0OTcwLCAwLCAwLCA0MDk5MCwgNDM3NjUsIDAsIDM0OTIsIDAsIDEyNzk0MiwgMCwgMCwgCisgICAgMCwgMTI4MzgsIDk4Mzk3OCwgMTk5NDgsIDAsIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCAKKyAgICA0MTMwOSwgMCwgMCwgODE1MiwgMCwgNDE1NTAsIDEyMjI3LCA5ODM2MTMsIDAsIDEyODI4LCAxMjc1MTEsIDAsIDAsIAorICAgIDEyMDcwOCwgMCwgMCwgMTAzODYsIDExOTU3NCwgMCwgMCwgOTI2ODAsIDk4Mzc4OSwgNjgxNTQsIDAsIDE3NDMsIDAsIDAsIAorICAgIDkyMjM5LCA2NTE4NiwgOTE3NTcxLCAwLCA5NjA2LCAwLCAwLCA2NDQzOSwgMCwgMCwgOTI2ODYsIDAsIDAsIDE5NDk2NywgMCwgCisgICAgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCA2NDgzMCwgMCwgMTI2NTU3LCA0MTA5MSwgMzQyNiwgMTM0NCwgCisgICAgODg3MCwgMCwgMCwgNDczNSwgMTI3MDE3LCA2MTE5LCAxMjgyMiwgNDI2OTksIDAsIDk4MzgyNCwgNzQ4MTgsIDE0MjMsIDAsIAorICAgIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAwLCA3MTcwLCAKKyAgICA5NTk2LCA2MTMwLCAxMjg4MjYsIDQzNjI5LCAxMTU3OSwgNzg3MTMsIDAsIDE5NDc0MCwgMTI4NjkxLCA5MjE4NSwgNjY2OTksIAorICAgIDY0NDQwLCAxMDA0LCA5MjU4NCwgMTk0NzM3LCA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCA2ODQxNCwgMCwgNDM2MTksIAorICAgIDQzMzAzLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIDExNzc2LCA3NTU4LCAxMjcxNTgsIDY1NjI3LCAwLCAxMDcxOCwgCisgICAgMTMxNTQsIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIDY1MzY1LCA3Mzg3NywgNjU2MjgsIDc4MDE5LCAxMjAzMTksIDAsIAorICAgIDQxNzA4LCAxMjg2MCwgMjY0MSwgMTIwNjksIDEwODM4LCA1NDAzLCAxMDM1MiwgNzAwODUsIDEwMDYxLCA0MzIzNywgMCwgCisgICAgNTE0MCwgMjA5LCAxMjg4NDcsIDQxNzA0LCA0MTA1NiwgNDMwNzgsIDEyODEyNSwgMTE4ODA5LCAwLCAxMDg5OSwgNjU0NjksIAorICAgIDkyMzYyLCAwLCAwLCAyNDEwLCA5OTMsIDAsIDEyMDU4OSwgMTIwNjg5LCA3ODY5MywgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAKKyAgICAwLCA3MTEwLCA3NDQ2MiwgMjA2NiwgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDAsIDQyMjQsIDEzMzYsIAorICAgIDQxNTE4LCAwLCAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIDAsIDAsIDI3MiwgCisgICAgNDI2MywgODc5MywgMCwgMCwgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIDEzMzUsIDg0MSwgCisgICAgNTg4OCwgNDEzNTgsIDY0ODYzLCA5NTQ0LCA0MzQ4MSwgMCwgMTk0ODA2LCA3MDAyNywgMjA5OSwgNTEyMCwgMjQwOSwgCisgICAgNzc5OSwgMCwgNzQ0MjQsIDAsIDAsIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAKKyAgICAwLCA2NDkxNCwgOTE3Nzg3LCA2NTEwMSwgMCwgMTE2OTQsIDkyNDc1LCAxMTY5MCwgNTgzNSwgMTI3MTY0LCA2NjYyNSwgCisgICAgMTA4NDIsIDQxMzU0LCA0MjEyMywgNDMwOTcsIDExNjg4LCA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgCisgICAgMCwgOTk3MiwgNzM4NjUsIDQ1MTksIDYxMTQsIDEwODk4LCA0MzA3MiwgMCwgMCwgOTM5NjAsIDk4MzMyMiwgMTI2NTgxLCAKKyAgICAxMDY5NSwgMCwgNzU0MCwgMCwgODgxLCA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgCisgICAgNjQzMjEsIDgzNTksIDAsIDEyNjg5LCAwLCAxOTQ1OTQsIDAsIDk4MzMxMiwgOTgzODgxLCA2ODE4MywgMCwgOTgzMzE0LCAKKyAgICAxMjg3LCA1NDM2LCAwLCA5ODMzMTcsIDc0MTQyLCA5MjMyOCwgNzQxNTIsIDExOTA3OCwgNjA1MSwgMTA0OTcsIDY5NjY4LCAKKyAgICA4OTg1LCAxMjEwOSwgOTgzMzIzLCAwLCAxMjcyNDIsIDAsIDAsIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIAorICAgIDI3OSwgNzM3NDUsIDAsIDAsIDAsIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIDQyMTI0LCA5ODM1NTcsIDQyMTIyLCAKKyAgICA5MjMzNywgOTIzNjcsIDAsIDExOTg1LCAxMzQ1LCA3ODYwMCwgMCwgMCwgODk1NiwgNDMwODMsIDk0MDU3LCA0MjEzOCwgCisgICAgNzg2MTAsIDAsIDEyMTUxLCA3ODYwOCwgNzg2MDQsIDc4NjA1LCA2Mjg1LCA3ODYwMywgNzg2MTIsIDc4NjEzLCA2NTk0MiwgCisgICAgNDkyLCA4Njg1LCAwLCA5ODM3NTksIDAsIDc4NjIyLCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgCisgICAgNzg2MTYsIDIyOTcsIDAsIDczODM3LCAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCA5MjU5NCwgNDE5NDQsIAorICAgIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgCisgICAgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIAorICAgIDQxNTUxLCAyNDM0LCA5NDAxOCwgMCwgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCA2MzM4LCA0MzIxNCwgMCwgCisgICAgNzU3MCwgMCwgMzE5MiwgMCwgODQxNCwgMCwgOTM5ODMsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCA5Mzk1OSwgMzE3MSwgCisgICAgNjYyMywgNDk2MSwgNjgzOTYsIDg4NiwgNTUyMTYsIDg2NTQsIDc4ODMyLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDcwMDY2LCAKKyAgICA2OTI0MSwgOTU5OSwgNzg2MjksIDQzMDg0LCA3ODYyNywgNzg2MjgsIDc4NjI1LCAyMzk5LCA2OTY5MywgODk5NCwgMTA5NDQsIAorICAgIDQxMjA4LCA5ODM3MTMsIDQxMTY4LCA4MTc4LCAwLCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCA3ODYzNiwgNjgwNCwgCisgICAgNzg2MzQsIDE5NDcsIDAsIDAsIDkyNjgxLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCAKKyAgICA2NTM1OSwgMCwgODAxNywgMTE5ODMxLCA2NTA5NiwgNjY3MjAsIDAsIDQzNDc1LCAwLCA0OTA5LCAxMjEyNiwgMTI4NjczLCAKKyAgICAxMjA2OTYsIDQ5MDQsIDk4MzMzMywgNjk2NTAsIDEzNjUsIDkyNTMsIDQyNzU3LCA0MzQzNiwgNzQ2MiwgMCwgMCwgMCwgMCwgCisgICAgMTE5NTg3LCA2NDQxNSwgMCwgMCwgNTM5OCwgMCwgMTI3Mzg2LCA5Mzk1MywgMCwgMCwgMTE5MDE1LCAwLCAwLCA5NDc2LCAwLCAKKyAgICA5ODM3NzcsIDEyNzYzLCAxMjY2MDMsIDM2MjksIDAsIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCA5MjUwMiwgMzQ2OSwgNDIxMDcsIAorICAgIDQyMTE2LCA5MTc1NzgsIDY0ODA5LCAyOTI4LCA0OTA1LCA5ODUzLCA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgCisgICAgMCwgNDI1ODMsIDkzMTUsIDQ4MjIsIDQ5MDYsIDM4NTIsIDI4NDcsIDExOTgyMSwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIAorICAgIDQxODUyLCAxMTQxMCwgMTA5NjQsIDAsIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIAorICAgIDYwMTgsIDkyMjkwLCAwLCAxMjI3NiwgMCwgNjgzNzIsIDAsIDkyMjU5LCAxMTkyNDQsIDAsIDk4MzIzMCwgMTA0NjcsIDAsIAorICAgIDI0NDMsIDEwOTE4LCA3ODIxNywgMTE5ODI1LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMTI3ODg1LCAwLCAwLCAKICAgICAxMTg4MjgsIDEyMDI3MSwgNjU2NzgsIDEyODY3LCAwLCA4MjYwLCA3Nzk0NSwgNzUxOSwgMTE1MDUsIDEyMjc0LCA4OTA0LCAKICAgICA1MTgsIDY1ODU3LCAwLCAxMjg2NzQsIDEzMjA0LCA0Mzg3LCA4NTcsIDAsIDY1MzY5LCAwLCA5MjMzNiwgNDMxMjUsIAogICAgIDEyMDU5MiwgMCwgMCwgMCwgMCwgNTEzNiwgMTk2OCwgOTgzMDQxLCAxMjY2MjcsIDEzMzcsIDY0OTY3LCAxNjI5LCAwLCAKQEAgLTE4Nzc3LDQ0ICsxODc5Niw0NCBAQAogICAgIDc4Njk4LCA3ODY5NywgNzg2OTYsIDc4Njk1LCA4NzEwLCA0MjQ5NSwgMTE4OTU2LCAwLCA0MDUxLCAxMDQ2MCwgNDMzNjQsIAogICAgIDExODkxNywgMTM1NiwgMTIxNjEsIDQyNzEzLCAxMjg4NTcsIDEyNzI2OCwgMTYxOSwgOTcwMywgNDMxNTIsIDQyNDg5LCAKICAgICA0MjExMiwgMTI3OTc4LCAxODc1LCAxMDgwOCwgNDIxMDksIDEyMDI4NCwgNDE4NjAsIDY0ODYyLCAxMzMwNSwgNjQ5MDcsIAotICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjY5LCAKKyAgICA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI3NywgCiAgICAgMTE5ODMwLCA0MzIzNiwgMzM4MiwgNDI0NDksIDY0OTgsIDE2NTgsIDExOTM2LCA3ODIzMiwgMCwgMTEyNjksIDEwMTUxLCAKICAgICA3Mzc1OSwgNDMxMDAsIDY5ODg4LCA2NTUwOCwgMCwgMCwgMCwgODkzNSwgOTE3OTg1LCAwLCAwLCAwLCA2MTYsIDc0NzUzLCAKICAgICA2NTE3OCwgNDY4NCwgNzg3MDEsIDExOTY1MywgMCwgMTI2NTUxLCAwLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIDczOTY1LCAKICAgICAxMDg3MCwgODU1NywgMTEwNTQsIDY4NjY0LCAxMTkwNDksIDk2ODEsIDQ0NzUsIDAsIDQxMTQyLCAyMTAwLCAwLCAxMjA3MzEsIAotICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjg3LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKKyAgICA2MDM1LCAwLCA3NjUxLCAxMDI5NiwgNjQ0NDMsIDAsIDk4MzI5NSwgOTE3OTg3LCAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgCiAgICAgMCwgMTAzOTIsIDEwMzI4LCA0MDk5OCwgNDM0NjIsIDc0NDg4LCAwLCA5ODAwLCA4OTc5LCAwLCAxMzMwNywgNDEwMDAsIDAsIAogICAgIDExOTIzOSwgNjQ4NywgMzM4NiwgMCwgMTAzNDQsIDAsIDY1Mjk5LCA1Mzk0LCA0MzI0NiwgNzgyNDMsIDEwMjIwLCA2NjUwNSwgCiAgICAgNDEyMDAsIDEyODU4MywgNDQyNSwgMCwgMCwgMCwgNDMwNzQsIDczNzk5LCA5ODMyMDAsIDc4MTQ3LCAwLCAxMjE3MywgCiAgICAgNzg1NDUsIDAsIDEyNzAxMSwgNjUzMzgsIDAsIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDEyODY0NCwgMTU4NywgMCwgCi0gICAgMTI3MzcyLCA2NDQ3NSwgMTI4MDk4LCAxMzY5LCA5ODM2NjMsIDk5NTksIDc5MjcsIDAsIDQ1NjAsIDAsIDAsIDkyMjc3LCAwLCAKLSAgICA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAxMDYyNiwgMTA5NjUsIAotICAgIDAsIDg4OTMsIDk4MzI5MywgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAxMDQ3NSwgMCwgMCwgCi0gICAgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgMTI3MTAwLCA3MDk5LCAKLSAgICA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIDY0MjU5LCA2OTg3MywgCi0gICAgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgNzc5ODIsIDAsIDUxMjcsIAotICAgIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgMjk5OSwgNjM0MiwgNjg2MzYsIAotICAgIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAxOTQ2ODQsIDgyMjQsIDAsIAotICAgIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgNzQzMzIsIDE2ODksIAotICAgIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAxMjgxNjMsIDc0NTEzLCAKLSAgICA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIDU3MzEsIDEzODEsIDIzODcsIAotICAgIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIDk2NjgsIDk3NjYsIDAsIAotICAgIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIDI4ODcsIDAsIDM1MjYsIAotICAgIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgMTI4Mjg4LCA3Nzg5NSwgCi0gICAgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCA5MTc4NDEsIDg2MzUsIAotICAgIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgMTI3MTcsIDAsIAotICAgIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAxMDIyMSwgCi0gICAgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgODY5NywgCi0gICAgMCwgMCwgOTgzODA2LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIDAsIDAsIAotICAgIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk0NCwgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgMCwgCi0gICAgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIDAsIAotICAgIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKKyAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY3MiwgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIAorICAgIDk4MzYyMSwgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDkzOTU1LCA4MTk0LCA2NTQ2MiwgCisgICAgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCA5ODMzMDEsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIDExOTgyMiwgCisgICAgMTA0NzUsIDAsIDAsIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIAorICAgIDEyNzEwMCwgNzA5OSwgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgNDM3NTAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCAKKyAgICA2NDI1OSwgNjk4NzMsIDY1MTg4LCA3ODIwLCA0MzAxOCwgMTI3MDgyLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIAorICAgIDc3OTgyLCAwLCA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIAorICAgIDI5OTksIDYzNDIsIDY4NjM2LCA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgCisgICAgMTk0Njg0LCA4MjI0LCAwLCA4OTM4LCA2MDQzLCAxMjczOCwgMCwgOTgzMDc2LCA1MzIxLCAwLCAxOTQ3OTgsIDAsIDI1ODksIAorICAgIDc0MzMyLCAxNjg5LCA3ODAyLCA0NjgzLCA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDEyODUxNiwgCisgICAgMTI4MTYzLCA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDcxMzEyLCAKKyAgICA1NzMxLCAxMzgxLCAyMzg3LCAwLCAwLCA4Mjg5LCA2NDUyNSwgNjU4MTcsIDI4ODEsIDQzMTQyLCAwLCA5NjAxLCAyODc5LCAKKyAgICA5NjY4LCA5NzY2LCAwLCA1NzI5LCA5MTc4MzMsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAKKyAgICAyODg3LCAwLCAzNTI2LCA2Mjk4LCAwLCA3Nzg5NywgMTIwMDk1LCA3ODUxOSwgMCwgODU3MiwgNjAyMSwgNzc4OTYsIAorICAgIDEyODI4OCwgNzc4OTUsIDQzMTU1LCAwLCAxMTk4NDksIDMxNDYsIDEwOTU5LCA5NDgzLCAwLCA3Nzg5MywgMTA5ODEsIDE2NiwgCisgICAgOTE3ODQxLCA4NjM1LCA5ODM2MDYsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgNDE2NDEsIAorICAgIDEyNzE3LCAwLCA3NjA3LCAxMDYzOSwgNDMzOTYsIDAsIDAsIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgCisgICAgMTAyMjEsIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA5Mzk5NCwgNzc5MDEsIDM0NzIsIAorICAgIDg2OTcsIDAsIDAsIDk4MzgxNSwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAKKyAgICAwLCAwLCAwLCAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCA5ODM5NTMsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIAorICAgIDAsIDQxNTY3LCAwLCAwLCAwLCAxOTQ2MjQsIDExOTg1MywgMCwgMCwgODI4NSwgMCwgNDUwOSwgMCwgNjY0NzEsIDEyMjE2LCAKKyAgICAwLCA0MDk4OCwgOTI1OTIsIDc0ODA5LCA0MTcyNywgMCwgNDI4NDgsIDIzOTYsIDkxNzc2NiwgMCwgNzQwMTgsIDkxNzUzOCwgCiAgICAgNjQ5NDAsIDcwMjcsIDM4ODYsIDAsIDQyNDU3LCAxMTkwMDgsIDAsIDk5NiwgNjgxMjMsIDk0MDU4LCA0MjQ5LCAwLCAKICAgICA5MTc1OTQsIDExNzA3LCA4MjIyLCAwLCA3OTM5LCA5MjQ1NCwgOTI0NjAsIDEyNzgwMSwgOTE3NTkyLCAxMjgzNTksIDg1MzQsIAotICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzIzNCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKKyAgICAxMjcxNTQsIDQwOTgzLCAwLCA5ODMyNDAsIDAsIDcyMDEsIDEyNTYxLCAwLCA0MjM3MSwgMTI1NTgsIDE1NDAsIDkxNzU0OSwgCiAgICAgMTAwNTIsIDQwOTgyLCAwLCAwLCAxNDg4LCAwLCAwLCAwLCA5MTc1NTksIDAsIDAsIDE1NjMsIDEyODAzNCwgOTYxOSwgCi0gICAgOTgzOTMxLCAwLCAwLCAxMjc4NzIsIDcxMzYzLCA1ODAzLCA3Nzk3LCA2MDcwLCAxMDAwNiwgMCwgMjkyMiwgNjA4MiwgMCwgCi0gICAgNjUwMDksIDk4MzkzMywgMTI1NjcsIDEyODcwMywgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIDkyMDAsIDEwMDQ2LCA5NjEyLCAKKyAgICA5ODM5NDAsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKKyAgICA2NTAwOSwgOTgzOTQyLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAogICAgIDQyMTUzLCA4MjE4LCA5NDg1LCAwLCAyMDMyLCA3ODM1NCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIDUwOCwgCiAgICAgOTM5NjgsIDEyODAxNSwgNjc5NjgsIDAsIDkyNDA1LCAwLCAwLCA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgCiAgICAgNzgzNDgsIDY4MDk2LCAwLCA2MDU2LCA2NjU5LCA2Nzk2OSwgMCwgNjA4NSwgMCwgMCwgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCAKQEAgLTE4ODIyLDE1ICsxODg0MSwxNSBAQAogICAgIDEyMzI4LCA1MDEsIDkzOTg1LCAxMDYwMSwgMCwgNTgzLCAwLCA0MTk3NywgMCwgNjYwMDQsIDExOTM1MCwgNjUwNSwgCiAgICAgNzQwMTAsIDAsIDEzMDY0LCA1NTI2NywgMTIwODEwLCA2NTAwLCA1NTI2LCA2NTA0OSwgMCwgNzM3NjQsIDAsIDkyMzc2LCAKICAgICAxMjc0NSwgOTY3OCwgMCwgMTIwNTg3LCA5ODY5LCAxMjg4MTUsIDE3NzEsIDAsIDg5MzYsIDAsIDAsIDQyMDgsIDc4MzQxLCAKLSAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ0OCwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCisgICAgNzg1NjcsIDc4MzQyLCAwLCA5ODM0NTYsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCA2ODAxMCwgNjY0NzUsIAogICAgIDAsIDUwMjcsIDc4MTcyLCAxMjg4NzgsIDAsIDUwNjksIDczODYyLCA1MDI4LCA5ODk3LCAwLCA3MzczOSwgNTAyNiwgCi0gICAgOTgzMjQ3LCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAorICAgIDk4MzI1MywgNjg2MzksIDYzMzEsIDEwMDc5LCA4OTMxLCAwLCAxNDE1LCA4ODY2LCA0MTkwMSwgNzQ3OTAsIDc4MTM4LCAKICAgICAxMTkzNjEsIDk4MzU2NCwgNDMxMDYsIDUwMjksIDY1MzA5LCAxNTgwLCAzNTk4LCA2ODQyNCwgNDEwNzAsIDc3OTAzLCAwLCAKLSAgICAzNDQwLCA3ODIxNSwgMTU2MiwgMTI4NjU2LCAxMjcxNzUsIDExOTM1OCwgMTcxNiwgOTgzNjcwLCAxMDYwMCwgOTE3ODY3LCAKKyAgICAzNDQwLCA3ODIxNSwgMTU2MiwgMTI4NjU2LCAxMjcxNzUsIDExOTM1OCwgMTcxNiwgOTgzNjc5LCAxMDYwMCwgOTE3ODY3LCAKICAgICA2MjAsIDQxMDAxLCA2MDI4LCAwLCA0Mjg5MiwgMCwgNzQ4MjIsIDUwMjQsIDEyMDgyOSwgNDEwMDMsIDAsIDUwMjUsIAotICAgIDY5ODkyLCA5ODMyMDcsIDAsIDExODg4NSwgMCwgNjU1NTcsIDAsIDc0NTQxLCA5ODM1ODcsIDExNTk5LCAxMjgyMDksIAorICAgIDY5ODkyLCA5ODMyMDksIDAsIDExODg4NSwgMCwgNjU1NTcsIDAsIDc0NTQxLCA5ODM1ODcsIDExNTk5LCAxMjgyMDksIAogICAgIDExNjAyLCA2MjQzLCAxMTU3NCwgMTE1ODEsIDExNTk3LCAxMTU5OCwgNjI1MywgNjEwNSwgMTE1ODQsIDc0MTk1LCAxMTU2OSwgCi0gICAgNjUyNzUsIDg5MDYsIDEyNzA5NiwgNTc1NSwgMjYzNiwgMCwgMTA4MTUsIDExNjE5LCAyMzAxLCA0MTU0MCwgNzgxNSwgCisgICAgNjUyNzUsIDg5MDYsIDEyNzA5NiwgNTc1NSwgMjYzNiwgOTgzMjI3LCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKICAgICAxMTYxNiwgNjk3OSwgMTIwODAsIDc3MjEsIDExNjA0LCA3ODY5LCAxNTkyLCAwLCA0MjE1MiwgNzg0OTgsIDQxMDQ4LCAKICAgICA5MTc3NjMsIDgyOSwgMCwgOTI0MDYsIDE5OTUwLCAwLCAxMjY0ODIsIDY2MTYsIDAsIDExODg3NSwgMTA5NTMsIDM5MSwgMCwgCiAgICAgNjk3ODUsIDQ4MiwgNDIyOTYsIDExNTg4LCAwLCA0MzYwNiwgMCwgNjgzOTcsIDY2MzcwLCA3NDUwNiwgNDIzMzUsIApAQCAtMTg4MzksOSArMTg4NTgsOSBAQAogICAgIDExMzM3LCA3ODIwOSwgOTE3ODIwLCA2Mzk4OSwgMzk1OCwgMTIxMzIsIDE4NDksIDAsIDk5MjEsIDQyNDUxLCA0MjUzLCAKICAgICA0MTE0NywgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIDc4MzM4LCAwLCA0MzMwMCwgNTE1NiwgOTI2MjksIAogICAgIDAsIDkyOSwgNjgyNywgNDIwMzUsIDQyNDM3LCAxNTU1LCAwLCA4NjkxLCA2NjQzNSwgMjIxNSwgNDE2NjIsIDk0MDEwLCAwLCAKLSAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MjUsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCisgICAgMCwgMCwgOTM5NTIsIDQ1NzgsIDY0NTEzLCA0MTY2NCwgOTgzNzM0LCA0MjU3OCwgMTI4Nzk0LCA0MTY2MSwgNzg3MTUsIAogICAgIDQzMjY3LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgMCwgMCwgNjQ3MDcsIDk4MzEyNywgNDI0NzYsIDc3MzAsIAotICAgIDk4Mzg1MCwgMTI4NTIyLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgNDMzNTksIDAsIDY2NDEsIDUyNSwgCisgICAgOTgzODU5LCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKICAgICA0MTYyNywgOTE3OTIzLCA4NzYzLCAxMjgzMDQsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgNDI1MDQsIAogICAgIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgNzQzNjAsIDAsIDEzMTkzLCA2NDM1MCwgMTE2NjYsIAogICAgIDg2NzksIDQxOTI0LCAxNTc2LCA3NzM1LCA5MjM5OCwgMCwgNzM4NDAsIDk4MzA5MiwgMTEzNzQsIDc4MDQzLCAxMDg4OSwgCkBAIC0xODg1OSwyNCArMTg4NzgsMjQgQEAKICAgICA4MjQ0LCAzNjIsIDkyNDM5LCAwLCA4MDM3LCA0Mzc3NywgMTE1MzUsIDAsIDc0ODQ1LCA1MTg1LCA3MTY1LCA1NTIxLCAKICAgICAxMDMzNCwgMjA5MywgNzEzMjksIDEwMzAyLCAxMjgxMTIsIDEwMTA0LCAxMDI3LCA1MTgxLCAwLCAwLCAxMDUyMywgMTQ0NiwgCiAgICAgNDIzMjAsIDQxNjQ2LCA5OTEsIDUxODksIDQyNDcyLCA0MTY0NywgMTIwMTA1LCAxNzIyLCA1NTgxLCA0Mjg5OCwgMzQwNSwgCi0gICAgMCwgMTk0NjQ0LCA1NTIzLCAwLCA0MjYyMCwgOTI0NDcsIDk4MzgxMCwgOTU0OSwgMCwgMTA1NDksIDU1MjgyLCA5NjYxLCAKLSAgICA0MzY4MiwgMCwgNzc5MTAsIDEyMDAyNiwgNzg3MDgsIDAsIDc3OTExLCAwLCA0MTk5MSwgOTgzODg0LCAwLCA3NjMwLCAKKyAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODE5LCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAorICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4OTMsIDAsIDc2MzAsIAogICAgIDk4NDYsIDc2ODQsIDEwMzUwLCAwLCAxMTc0LCA3Nzk4MSwgNDI3MzMsIDc3OTc4LCA3Nzk4MCwgNjY0ODUsIDc3OTc3LCAKICAgICA0MjI3NywgNzc5NzQsIDQyNDU2LCA2NTY2NywgMTI3MDM3LCAxMjMzMCwgMTI4MjcyLCAwLCA0MjQxNywgNDIzODMsIAogICAgIDY2NjMwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDc3OTg0LCA3NDQ0MywgMCwgMTAyMDksIDgzMTMsIDQxOTUsIDc0NDM1LCAKLSAgICAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIDc4MDYwLCAxNzM2LCA5ODM2NzUsIDM5MDEsIAorICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY4NCwgMzkwMSwgCiAgICAgMTIyMjgsIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCA3ODg0MSwgNjkzLCA5MTMwLCAzMTQsIDY0MTQ5LCA0MjQyMCwgCi0gICAgMTE5NDksIDk4MzY2MCwgMTIwMTUyLCAxMTAyNiwgMTI4Nzg4LCA1MzMyLCA2OTQwLCA2NDE1NCwgMTI2MzUsIDEyNzAwNywgCisgICAgMTE5NDksIDk4MzY2OSwgMTIwMTUyLCAxMTAyNiwgMTI4Nzg4LCA1MzMyLCA2OTQwLCA2NDE1NCwgMTI2MzUsIDEyNzAwNywgCiAgICAgNDI3MDYsIDE3NTEsIDI3MywgODE2NSwgMTMxNjYsIDEyMDc2MywgNzg4NDAsIDcxMzY4LCAxMjgyNCwgMCwgNDUyOCwgCiAgICAgNTMyMCwgNjMwMSwgNDM2NjIsIDYxMzMsIDkzMzksIDk0NjMsIDQyMzQ2LCAxMDkyMiwgNjQ1NjAsIDM3NTcsIDAsIDAsIDAsIAotICAgIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCA5ODM4NTksIAotICAgIDc0MDk1LCAxMjc5ODEsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgOTI2NDYsIDAsIDEyMjMzLCA5ODM4NjIsIAorICAgIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCA5ODM4NjgsIAorICAgIDc0MDk1LCAxMjc5ODEsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgOTI2NDYsIDAsIDEyMjMzLCA5ODM4NzEsIAogICAgIDEwMjMsIDQ3NCwgMCwgMTE5ODE4LCAwLCAwLCA0MjQ4NywgNjU1NTYsIDAsIDEyNzg2NiwgNDIyOTUsIDAsIDAsIDcxMzIyLCAKICAgICA5MjUxOCwgOTgzNSwgNjY0OTksIDAsIDU0MTcsIDEyMjc1LCAxMDg5NSwgMCwgMjc0LCAwLCAxODU4LCAwLCAwLCA1NTI1MSwgCiAgICAgMTAxMTgsIDMxMzMsIDEyODAwOCwgNzM3OTUsIDAsIDk2MTAsIDgwNjgsIDgxOTcsIDAsIDY5OSwgMCwgNDE2NjUsIDU4NjgsIAogICAgIDAsIDkyNjk1LCA0MjE4MiwgNzU4MSwgMTk5NDAsIDQzNjY4LCA0MTY2NywgMTI4MDU3LCAwLCAxOTIzLCA2NTU4MywgCiAgICAgNjU4MDIsIDkzOTcwLCA2NDU5NywgNDM0NDQsIDExOTE4NCwgOTIxOTcsIDAsIDY0NjQsIDcwMzYsIDI5OTYsIDE5MzcsIAotICAgIDk4Mzc0MiwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKKyAgICA5ODM3NTEsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjQxMDcsIDAsIDAsIDExMDE3LCAxMjA2MDEsIDAsIDI5MywgCiAgICAgNzc5NjYsIDkyMTY5LCA2NDc5MSwgNDE4MjcsIDQyNDY2LCA0MzQyMiwgMTA1NzksIDg1NjAsIDcxMzUwLCA2NTQxMywgCiAgICAgNzc5NjMsIDQ4MDMsIDEyOTY0LCAxNzM5LCAxOTQxLCAzOTAwLCAwLCAxNzEzLCA3Nzk2OSwgMCwgNzM5NTcsIDExNDA3LCAKICAgICA0MjQ0MSwgNDE5NzEsIDYyOTcsIDEyMDA5OCwgNjQxMDUsIDEyODA4MCwgNDI0ODEsIDExNzE2LCA2NjQ3MywgNzE3OSwgCkBAIC0xODg5NCwzMzcgKzE4OTEzLDMzOCBAQAogICAgIDM2NTksIDk1MzMsIDE4NCwgMTU1MywgMTMxMDcsIDY1NDg0LCA2OTY0OCwgMTA1MDIsIDc0NDU3LCAwLCAwLCA0MTU1NCwgMCwgCiAgICAgODIyMCwgOTE3OTQzLCA0MTU1NywgMCwgMCwgMTEwNzAsIDExOTIyMSwgNTE1NywgNDAyMCwgNzM4NTgsIDQxNTU1LCA5NTE0LCAKICAgICA2NDgxOCwgNjUxMDMsIDY0NjQxLCA2NDMwMywgNzgxMzEsIDc1MjAsIDAsIDc0Mzc3LCAxMTAyOSwgNjY2NTEsIDk4MzA2OCwgCi0gICAgMCwgMTE4OTMwLCA2NDUyNywgMCwgNzg3NywgNzM4MDMsIDk4Mzc4OSwgMTI3MzQ4LCAxMjAwOTYsIDc0NjAyLCA5OTU1LCAKKyAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzk4LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAogICAgIDExOTU1NywgNDA1NSwgNDI4MTcsIDAsIDY1MjEyLCAxMTcxNSwgMTIxOTAsIDEyMzE5LCA3ODYzMCwgMCwgNzg2MzEsIAogICAgIDk1MDIsIDY1NDI3LCAwLCA2NTQyNCwgMTI2MDcsIDAsIDk3MzQsIDY1NDI1LCAwLCAwLCAxMjczNTcsIDc4ODM1LCA5MjQxMCwgCiAgICAgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgMTA0NzcsIDAsIAotICAgIDg2MzYsIDk4MzkxOCwgODMxNSwgNjU0NDQsIDk4Mzc4NCwgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyNzEwOCwgCisgICAgODYzNiwgOTgzOTI3LCA4MzE1LCA2NTQ0NCwgOTgzNzkzLCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKICAgICAxMjAxNzEsIDAsIDc0NTg5LCA0Mzk5MywgMCwgNjk3OTAsIDY0NDM1LCAwLCA0MzY5MCwgMTEwNDYsIDExNDkwLCA0MjczMCwgCiAgICAgNDQ4NSwgMTI3MTA3LCAwLCA2NDkyNiwgMCwgMCwgMCwgNTg2OSwgMTI0MzcsIDQyNzI4LCAwLCA3MDQwLCAzNTg4LCAwLCAKLSAgICAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDAsIDc4NjQyLCAyMjMsIDAsIDY5Njc1LCAxMjAxNjYsIDQyNDQ0LCAwLCA2NDQ5OSwgCi0gICAgNjUyNDUsIDAsIDExNzEsIDAsIDY5NzE3LCAwLCAxODA1LCA4NzcyLCA0MzgyMCwgMCwgOTkzMCwgNjUyNDcsIDc4NjE5LCAKLSAgICAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAxMjEzLCAKLSAgICAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgODczNCwgNDIxMiwgMTI3MzY5LCA2NDM4NywgNDExNSwgMCwgNTAwNSwgNjQwNzAsIAotICAgIDY0MDczLCAxMDY3OSwgMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDAsIDAsIDgyNTEsIDEwMTM2LCA2NTQzNiwgMCwgCi0gICAgMjEyMCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCA3NDE5MiwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgMTI4NTgsIAotICAgIDEyMDE1OSwgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgMjEyOSwgMCwgCi0gICAgOTIyMiwgOTgzNzI5LCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgNDIzMzEsIDY0OTM1LCAKLSAgICAwLCAwLCAxMjkzLCA3OTQ3LCAyMTMyLCA5ODM3NTgsIDc0NTkzLCAxMjAzMDgsIDI0NTQsIDQyNzE3LCAzNjEzLCAxMjg4MzcsIAotICAgIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCA0MzA4NywgMTI1OTUsIDEyMDMwNCwgCi0gICAgOTgzMTE0LCA4ODIyLCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgNjk4NDgsIDgyMzUsIDEyMDMxNiwgCi0gICAgNDQwNSwgMTAwODYsIDEyMDI0NywgMCwgNjkyMTYsIDAsIDY1NDMwLCA3MTMyMSwgNjA3OSwgNjgxNywgMTA3NjQsIAotICAgIDEyNzkxMCwgNjQyOTEsIDEyODA1MSwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgMTk5MSwgCi0gICAgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIDQzMDc2LCAKLSAgICA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAxMjAzMjUsIAotICAgIDY2MzczLCAwLCAwLCA2NDkwOCwgOTI2OTEsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgMTIwMzI2LCAKLSAgICAwLCA0MTcwNSwgOTIxODgsIDY1OTgsIDAsIDY1OTksIDEyMDMzNCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIDAsIDY1OTcsIAotICAgIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMjI4MSwgNjk5MDQsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAyNDMwLCA0MTY3OCwgCi0gICAgMCwgMTIwMjQzLCAyMzM2LCA5ODM4OTQsIDAsIDc4ODcxLCAxMjA0NDIsIDk4Mzc2MCwgMTkyMSwgMTA5NDcsIDE5OTI3LCAwLCAKLSAgICA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIDkyMjksIDEwOTU2LCA0MjI4NSwgNDE2NzQsIAotICAgIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCA5ODMwODksIDE4NTQsIDEwNzk0LCAKLSAgICAwLCA2NzY2MCwgNjk4NDYsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgNjU0MzMsIDYwNzYsIDY0NzkzLCAKLSAgICA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIDEyOTM0LCA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCAKLSAgICA2MDcxLCA2NTQzNCwgMTI3NDY3LCA0ODA0LCA0MDUzLCAwLCAxMjc0NjksIDE5NDY1MywgNDE2OTYsIDQ2NywgNjk4MjMsIAotICAgIDEyNzQ2MywgNjk3OTcsIDE5NDY1MiwgMTI3NDczLCA4NDIxLCAxMjc0NzIsIDY5NjgyLCA0MzcwNSwgNTAyLCAwLCA2NTQzMSwgCi0gICAgMTE5MDU2LCA2OTk1NCwgMTIwNDMsIDEzMDMsIDMxNiwgNzM2NCwgMjAyOSwgMjEzNiwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIAotICAgIDQzNDgwLCA5MjYzOSwgNDg2MCwgMTI2NjQ4LCAxMjc4NzcsIDQyNDg4LCAwLCA5NTgzLCAxMjg4NDksIDU1NDYsIDgwMTksIAotICAgIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIDU1NDMsIDc3OTg5LCA2Mzc1MSwgMTIxMzcsIAotICAgIDU1NDgsIDc3OTg1LCAwLCA2NTcyNywgNjgzODgsIDY1NzI2LCA2MDc3LCAxMjgzNTIsIDY1NDUyLCAwLCAxMTMwMSwgCi0gICAgNzgwMTMsIDc4MDA4LCA3ODAxMCwgOTg3NCwgNzgwMDcsIDAsIDEzMTksIDMwNTAsIDY1NDEwLCAwLCAwLCA3ODAxNiwgCi0gICAgNzgwMTcsIDQyODMwLCA0Mzk5NiwgNjY3MTYsIDEyODEzNywgNDY5MSwgOTIyNDIsIDkzNDUsIDYyMSwgOTI3MDksIAotICAgIDEyODIyMiwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgMTA1NDUsIAotICAgIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCA5MjM2MywgOTk5NiwgCi0gICAgODUwOCwgMCwgNzAxMiwgODE5NSwgMTI3ODM0LCA5NTY2LCAwLCAzNzIyLCAwLCA0MTcwNywgODQ5MywgNTQ1LCA5NTc1LCAKLSAgICA0MTM3OSwgMTAwNTAsIDEyNzE4LCA2OTg1NCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIDAsIDAsIDkxMTksIAotICAgIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCA3ODAyMSwgNzgwMjIsIDQxMCwgCi0gICAgNzgwMjAsIDE4MDIsIDc4MDE4LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgMTAxMjYsIDEyMTE2LCAKLSAgICA0MTY3MywgMTIwMzcwLCAxMTQyMiwgNzgxNDEsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCA2ODQxMiwgNDEzNDUsIDEyMDM2MiwgCi0gICAgMTIwMzYzLCAxMTc0OCwgNDIxNTgsIDc5NDEsIDExMDc2LCA4NzQ5LCAxMjAzNjEsIDIxMDQsIDY0ODU4LCAzNjEsIAotICAgIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgOTE3OTE5LCA0NTY5LCA3NDEzMCwgMCwgCi0gICAgNDM0ODcsIDE5NDYzMCwgNjExLCA3NDEyOSwgNjQ4NzEsIDExODg5MSwgNjU2MjksIDAsIDE5NDg1OCwgMCwgMCwgMTI3NTQ1LCAKLSAgICAxMjA1NDMsIDAsIDAsIDYyOTEsIDAsIDc4NjM5LCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAwLCA5ODM1ODEsIDc0MDU0LCAKLSAgICAxMjc3NTQsIDE5NTAyOSwgMCwgODM5LCA5ODMzMTEsIDc2OTUsIDg3NjksIDY1MjQ2LCA0ODI5LCAxOTQ2NjMsIDQ4NTksIAotICAgIDY0NDY3LCAwLCA5ODM5NTQsIDExODk5OCwgNzIwNiwgMCwgNjY0NywgNDM5ODYsIDAsIDY5NzY2LCAwLCA2NDc2NCwgNDIxMCwgCi0gICAgOTgzODU0LCAxMjc5MzYsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDY2NjUzLCAwLCA2NDkyNCwgMTAwOTEsIDczOTMxLCA5NDY4LCAKLSAgICA3NDI0NSwgMCwgMCwgNzQyNDYsIDkyNTAzLCAxMjgzOSwgNjQ2NjksIDkyMjAyLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAKLSAgICAxMTkyMjksIDExMDQ5LCAwLCA5MjY5NywgNDMyMzksIDg0ODIsIDkyNDQwLCAwLCA1MDMyLCA2OTY3NywgMTE5NDAsIAotICAgIDY3ODg4LCA2NjQsIDEyMDQzNywgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgNzM4ODgsIDk4MzE0OSwgMTMyOTQsIAotICAgIDY3ODczLCA2NDg2OSwgNjAzMiwgMCwgOTExNSwgNzQzMCwgMTIwMzc3LCAwLCAxMjA4MTksIDY4Mzg3LCAxMjAxNjgsIAotICAgIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgNDExNjIsIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgCi0gICAgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgMTE4ODY3LCAxMjg4MDAsIDUyNCwgMCwgNzQwMjksIAotICAgIDc4OCwgNzQwMjcsIDAsIDE5NDYzOCwgMCwgMTY2MywgMTA0MTksIDc0MDI1LCA0MjYzNiwgMCwgNjk3MjUsIDAsIDEyMDY1NiwgCi0gICAgMCwgNjc4NzYsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIDAsIDExOTEwNywgNDM2MTIsIDY0MzQ0LCAwLCAKLSAgICAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDczOTEsIDg5ODksIDIyMSwgNjU2ODYsIDAsIDAsIDgwMTAsIDcxOTEsIAotICAgIDQ5NjIsIDY5NzcyLCA4ODU1LCAwLCAwLCA2NDQ2OSwgMTIwNDI2LCAxMDU1NSwgMCwgNDMzMzMsIDkyMjk5LCAwLCAKLSAgICAxMjA0MjcsIDEwNDUxLCAwLCA2NzY1MywgNzI0NSwgMTI0NDMsIDc0NDA1LCA5OTQ3LCAxMjAxNDksIDc4MzE3LCAzODczLCAKLSAgICA4MzY3LCAwLCAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDAsIDAsIDExMDEwLCAxMjcyMywgNzQwNTksIDc0MDYyLCAKLSAgICA2MjE3LCA1ODk2LCAwLCA3NjgyLCA3NDA0OSwgMTQ2MiwgMTAyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNTk1LCAwLCAKLSAgICA3NDQwMiwgMTE4ODYwLCAwLCAxMjA0MTksIDkyNDk3LCA3NDA1MiwgMCwgOTIzNzgsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgCi0gICAgMTIwNDE4LCAwLCA2NDc2NSwgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCA2OTkyMCwgMTk0NzAyLCA2MjE2LCAwLCAxMDc1NSwgCi0gICAgOTQ1NSwgMCwgODEyNCwgMTI3MDQyLCA5NDcwLCA2OTQ0LCAxMjc1NDAsIDAsIDY5NjgwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAKLSAgICAwLCAwLCAwLCA0MzQyOCwgODIwNCwgMzYxNCwgMjgyNywgOTY5NiwgMCwgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDc4NTYyLCAKLSAgICAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCA0MjU5OSwgNDI1OTcsIDQyNzA5LCAxMjA0MDksIDEyNzA0NCwgMCwgODUzNywgMCwgCi0gICAgMCwgOTM1NCwgOTgzMTY0LCAxMjg4MzMsIDQxMTk5LCAxMDEyMSwgMjAyOCwgMCwgOTgzMTk0LCA2OTcxNSwgMCwgMzA2MiwgCi0gICAgMCwgNzQ0NDcsIDEyNjA4LCAwLCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTI1ODAsIDkyMjA1LCAxMjA3NzcsIDEyMDUwMiwgCi0gICAgNDExNTUsIDAsIDc0MDcxLCAwLCA5ODM0NDksIDEyNzEzLCAwLCAwLCAwLCA3ODc3MiwgMCwgMTczNCwgMCwgMCwgMTI3MDQwLCAKLSAgICA2NDU5NCwgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIDk4Mzk3MCwgMTIzMCwgMCwgMCwgMzU5NywgCi0gICAgNDQ0NiwgMTA1ODQsIDc0MjM1LCA5MjIxNSwgNDAzNywgMTI3OTM4LCA4MzUyLCAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgCi0gICAgMTk0ODAxLCA1NTI2NSwgNjc4NDYsIDc4NDM0LCA5NzA0LCAwLCAwLCA3MDA4MCwgNzEzMzgsIDAsIDg2NjAsIDEyNjQ5NSwgCi0gICAgMCwgMCwgNzg3NzMsIDc0NDgyLCA0NDgzLCAxNzA5LCA2OTcyMSwgOTkwOSwgNjA4MCwgMCwgMTIwMzU4LCAxNzQ2LCAxMzE1LCAKLSAgICA4NjY3LCAwLCAwLCAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAxMTI2NiwgMTI4MTUyLCAxMjI2LCA2OTMwLCAKLSAgICA2Nzk3OSwgOTgzNjgxLCA2MzYwLCAxMDg5NywgNDEyMzAsIDYwNSwgMCwgNzQ3ODUsIDY5ODc1LCAwLCAwLCA0MTUwMCwgMCwgCi0gICAgMzExLCAxMTQ1MywgNjIyMSwgMTA2MDgsIDY0OTQzLCA3NDI4MCwgMTA4NzcsIDExODg2OCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAKLSAgICAxMjg1NTksIDEyMDczNiwgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIDY0NjA2LCA5OTE3LCAwLCA5MjIzMSwgNTAzNywgMCwgCi0gICAgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAxOTQ4NTMsIAotICAgIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAxMjg3NzIsIDY1MTIzLCAxMTI5MywgMjY2OCwgMTEyODgsIDAsIDQyNjQwLCAKLSAgICA2NTY2NiwgMjUxOSwgOTIzNjksIDY1NDIwLCA5MjQ3OSwgMCwgNDI1MiwgNTA0OSwgNDI2NTksIDExOTAxMSwgNzA2LCAKLSAgICA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIDAsIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgCi0gICAgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDEyNzgwMywgMTE4MywgMTI2NTE5LCA3MDE3LCA0Mjg1MiwgMCwgODE1NywgCi0gICAgOTczNiwgNjQ1MDMsIDY1NDE4LCAwLCA5ODM4NjksIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIAotICAgIDExOTI5OCwgMCwgNzk2MiwgMTIyMTEsIDk4MzcsIDIwNTEsIDY2MjI3LCAwLCA0MTg0LCAwLCAwLCAxMDE3NywgNzM3NzcsIAotICAgIDE4NTcsIDE5NDY1NywgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgNzgzMjEsIDc4MzIyLCA0NjI0LCA3ODE4LCAKLSAgICAxMTkxNzMsIDAsIDAsIDc4MDUsIDAsIDk0MDA3LCA2OTM1LCA5MjI5MiwgNzgzMjUsIDc4MzI2LCA3ODMyMywgNDMzMjcsIAotICAgIDQzOTg5LCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIDg0OTcsIDg0OTYsIDAsIDAsIDc4MzM2LCA3ODMzOSwgOTU0MywgCi0gICAgNzgzMzUsIDc4MzMyLCA3NzgzMiwgNjU4NDksIDc3ODMxLCA5ODM5NTIsIDAsIDEyNDUxLCAwLCA4Njg0LCAwLCA2MTAyLCAwLCAKLSAgICA1Mjk4LCAwLCA1Mjk0LCAwLCAwLCA5ODM0NTEsIDE5NTA2MiwgOTk0OSwgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAKLSAgICAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAxMjA2MTcsIDExNDM5LCA0MTQ2OCwgOTgzNzQ4LCAwLCA1MjkyLCA1NTI3MiwgCi0gICAgOTgzODc0LCAxOTM5LCA1MzAyLCAzOTcwLCA5MTc4NzksIDEyNDU1LCAxNzkzLCAwLCAwLCAwLCA2NjQzLCA5MjQ3NywgCi0gICAgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDY1OTIzLCAwLCAxMzIxOSwgOTU2OSwgMCwgNzQzODMsIDAsIDc0MTk3LCAKLSAgICAwLCA1NTAwLCA4ODEzLCAwLCAwLCA3NDU2NiwgNTMyMiwgMCwgNzgzNDAsIDQzNjMxLCA1MzI0LCA2NjQ0MywgMzc4NCwgCi0gICAgNDE2MTQsIDY1MjY5LCA2MjMwLCA3ODM0OSwgNzgzNDUsIDQzMzI0LCAzMzYwLCA3ODM0NCwgMTE1MjMsIDAsIDkyNDg4LCAKLSAgICA5OTI2LCA3MTk3LCAwLCA2ODQyOSwgNDI4OTQsIDQxODIxLCAxMjQ5LCA3ODM2MCwgNzgzNjEsIDc4MzU2LCA3ODM1OCwgCi0gICAgNzgzNTMsIDY0ODk5LCA2NDc2MywgNDExNDksIDQxODA3LCA0MzE2MiwgNDE4MTUsIDQxMTUwLCAwLCAxMDU3MSwgMTAwOTYsIAotICAgIDAsIDAsIDc4MDc0LCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgCi0gICAgNzQ0NjYsIDkzOTY2LCA2NjcwLCA3Nzg4MiwgMCwgMCwgNDMwOTIsIDQzMzI1LCAwLCAxMDE2OCwgMCwgOTc4MSwgMTI4NjU1LCAKLSAgICA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIDEzMDE5LCAxMTY3MCwgNjk4NjAsIDMxNSwgMTI4MTMsIAotICAgIDk4MzQ1MCwgNzg0MzIsIDc4MjU2LCA3ODM1MSwgNzgzNTIsIDAsIDk4MzY0OCwgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgCi0gICAgNzQ0NzUsIDMwNjYsIDkyMjIwLCA2Nzg0NywgMCwgOTIzNTUsIDAsIDc4MzY1LCA4Nzg3LCAxMjAzNzksIDE5NDYxNiwgCi0gICAgNDE2MTgsIDE5NDYxNSwgNzgyNjEsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIDE5NDYxMiwgMCwgNzgzNjYsIDQyMDg4LCAwLCAKLSAgICAxOTUwNjEsIDcxNzYsIDQzNzU2LCAxMDEzNywgNjEyMSwgMTA5OTUsIDc4MjU5LCA3NDUzNCwgODExOSwgNjQ4NzQsIAotICAgIDkxNzgxNiwgMTI3MTk5LCAxOTQ5MzksIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgMTM5NCwgNzQ1MTQsIDAsIDc0NTE1LCAwLCAKLSAgICAxMTg4MDQsIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCA0MjA5MCwgMTE5MTY1LCAwLCAxMTkxMDAsIAotICAgIDQxMjM2LCA5MjIzNSwgNDIwMDUsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgMzY3MCwgMTI4NjU3LCAxOTQ2MDAsIDAsIAotICAgIDAsIDc4OTAsIDAsIDExMjk4LCA0MzMxNSwgMCwgNjIyOSwgMTU5MywgMCwgMCwgNjE5LCA0NjM1LCA2NTA4MCwgMCwgCi0gICAgMTI4MDAyLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIDExODA4LCAxMTkyMTQsIDc0MTE1LCA5MzY2LCA0Mjc5MCwgNDIwMDYsIAotICAgIDExOTExNSwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCA2NTMyMSwgNjUzMjAsIDY1MzM1LCAKLSAgICA2NTMzNCwgNjUzMzMsIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgOTI0MjcsIDkxMjgsIDk0MDQ1LCAKLSAgICA0MjA3MywgNjc4NSwgNjQ1OTAsIDk4MzgyMSwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIDY1MzE2LCA0MTA2LCA2NTMxNCwgCi0gICAgNjUzMTMsIDQyMDc0LCAxMjc4NDcsIDQxMjI4LCAwLCA2NTYwOSwgNDEyNDEsIDc5MDMsIDQxMjM5LCA0MzUzMywgNzg0NTksIAotICAgIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgNzg0NTAsIDg0ODcsIDkxMzEsIDAsIDQ2MTUsIDEyNjk1LCAxMjc3NTIsIAotICAgIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgNjk3NjIsIDY2NDU1LCA2NDczOCwgCi0gICAgMzIxOSwgNjg2NTQsIDk4Mzc3OCwgMCwgMTAzNywgMCwgMjAyNSwgMTI4MjYzLCAxMzA5OCwgNzg0NDIsIDEwNjM3LCA0NTY4LCAKLSAgICA1NDksIDE1NzAsIDAsIDI4MzUsIDAsIDEwNjI0LCA0MzYyMywgMTEwNzIsIDEyNzE5MSwgMCwgMCwgMTI2MDYsIDc4NDMzLCAKLSAgICAyODI1LCAwLCAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDkyMzI3LCA3MzY1LCA5ODM3NDQsIDEyMDU5MywgMTMwNzEsIDAsIAotICAgIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIDY0NzAzLCAKLSAgICAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIDE2NjgsIDAsIDAsIDAsIDExODcsIDk4MzM3NywgCi0gICAgNDI2MjgsIDc4NTc1LCAwLCAxMjg3NzcsIDAsIDMyNDAsIDEyODUxOCwgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgCi0gICAgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAxMjg4NTYsIDU3MSwgMCwgNDkxOCwgMCwgNTI4OCwgMTI3Mjk1LCAKLSAgICA4OTE2LCA2NTA0OCwgMTkwOSwgODg2NCwgMCwgMCwgMTA3MzYsIDkyNTA4LCAxMTU3MSwgNzYxNSwgMTI3MzAwLCA5MjI5NiwgCi0gICAgNDIzNywgOTI1NzYsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAxMjA3NTEsIDExNDAzLCAKLSAgICAwLCAwLCAxMjcxNDYsIDM3OTYsIDY4MDAsIDAsIDM5OTQsIDExNDIxLCAwLCAxOTUwNzYsIDAsIDk4MzkxMywgMCwgMCwgCi0gICAgNjQ4NTcsIDEyODEwNSwgMjg1NSwgMTI3ODI4LCA2NjMwOCwgNDE2MjEsIDY4MjE0LCAxMjcyODMsIDEyNzgxNywgMTA2NTQsIAotICAgIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDQzOTcyLCA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgCi0gICAgNzQyNzAsIDEyODI4OSwgMCwgMCwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIDIzNzgsIDQzMTM2LCAxMjc5MDUsIDg0NjYsIAotICAgIDk4MzU3NSwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIDExNDA5LCA2ODM3MywgNjM4MiwgMCwgCi0gICAgNjQ2MzQsIDEyODI3OSwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCA5NDA2NiwgODQ3NSwgMTE2MDksIDY2MzEzLCAwLCAwLCAKLSAgICA1Mjg2LCAxMTkyOTcsIDAsIDAsIDY0OTI1LCAxMjAyODMsIDE5NDU4NCwgMTE4OTgyLCAxOTQ1ODMsIDc3MDUsIDExOTQyLCAKLSAgICAxMTMwNSwgMTk0NTgxLCAzMzA5LCAwLCAwLCAwLCAwLCA2ODAyLCAwLCA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIAotICAgIDAsIDY2NjE1LCA0MjU2NSwgNDE2NTEsIDAsIDAsIDAsIDQxNjUwLCA2NjUwNywgNjY0NzAsIDAsIDEyOTE0LCA0MTQ5MSwgCi0gICAgNjYwMTAsIDExOTU1MiwgNjA3OCwgOTk1NCwgMCwgMTQ3NSwgMTE5MjQ3LCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCAKLSAgICA0MTA2MiwgMCwgMCwgMzI1NiwgMTAxODksIDQyMDc2LCA0MzI1MiwgNzg4MjMsIDkxNzkwNiwgODcyNywgMCwgNjU4NzUsIDAsIAotICAgIDAsIDEyNzc2MiwgMTA1NjIsIDc0MjE1LCA0MzA2NSwgMCwgMCwgMzI0OCwgNzQyOTcsIDMyNjEsIDkwMTUsIDcxMzUxLCAwLCAKLSAgICAzNjM1LCA2NDMzNywgOTgzMjczLCAwLCAwLCA3MTk1LCAwLCAyMDA3LCA2NDQzMSwgMCwgMCwgMCwgMCwgNjM1LCAwLCAwLCAKLSAgICA2NTYxMywgNzc5MDksIDkyNDIwLCA3Mzk5NywgMCwgMCwgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMTI3NzcwLCAKLSAgICA0MTc2LCA3MDA1MCwgMjAzNCwgOTI1NTEsIDEyMDgwNSwgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg4NjAsIAotICAgIDc4NTk2LCAwLCAzNjQ5LCAxMzE0OSwgNDIxNDUsIDQyNzk4LCAzNjM0LCAxMjAyOTEsIDExODkyNywgNjc2NzcsIDEyMDEyNCwgCi0gICAgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCA5NDAzMiwgNzQyMzgsIDQyNjY0LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAKLSAgICAxNzYxLCAxMTgxMiwgNjUzNzksIDY4Mzg2LCAxMjgxODUsIDExNTksIDAsIDY5NzI5LCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIAotICAgIDQxNjgwLCAwLCAxMjgyMDMsIDExNTM0LCAxNTE0LCAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIDY3ODc3LCAKLSAgICAxOTQ1NjcsIDEyOTg5LCA2NjQ3NCwgOTM2OCwgMTI4NDgsIDE2MjQsIDQzMjcwLCAwLCA3NDI3OCwgMTA4MTgsIDEyNjY0NCwgCi0gICAgOTk1MywgMCwgNzg0MjEsIDExOTQsIDMyNDIsIDk3NjEsIDk1NTUsIDg1OTgsIDEyMDI5OSwgNjE2OSwgMTI4NzEsIDE1NTEsIAotICAgIDI3OTgsIDY1MTc2LCA0OTU4LCA0Mjc1MiwgMTE5MDI1LCAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCA2NjY0OCwgMTk0NzY4LCAKLSAgICAwLCA2ODM2NCwgOTgzMjIyLCA0ODkxLCAwLCAxMDY0MSwgMCwgNzM3NDYsIDAsIDY4MzUyLCAwLCA3Mzc4NywgMTk0ODI5LCAKLSAgICAxOTQ2MzMsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCA0MjY4NSwgNDI2NzksIDE5MywgMCwgMCwgMCwgNDI2NjcsIDAsIAotICAgIDUyNzEsIDkyMzE4LCA5MjUxNywgMTE4ODgyLCAxMzYyLCAxMzI5NywgMCwgMTI4MDk0LCAwLCA5ODMzMjMsIDczNzg5LCAwLCAKLSAgICA2NjU4LCA0NDI2LCAwLCA5MjYyOCwgOTgzODMzLCA5MjMxOSwgNzI3NiwgNDIxNjMsIDUyMjAsIDAsIDAsIDk4MzMyMiwgCi0gICAgMjQxNiwgMzMxMCwgNDI3MDMsIDAsIDM3OSwgMCwgNDM3NTUsIDAsIDAsIDMyMjMsIDY1NDkyLCAxMjg0LCAxOTQ3NzEsIAotICAgIDQ1NDksIDAsIDAsIDk4MzE1NCwgMTI3NzYzLCAxMDgwNywgOTU1OCwgMTk0NjEzLCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgCi0gICAgNjUzMDgsIDMyOTQsIDk4MzMyNCwgODUyOSwgMTI4MTAxLCA0MzM4NSwgNzU2NCwgMCwgNDMzMjksIDAsIDkyNDU4LCAKLSAgICA3Mzc1NywgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCA3MjAyLCAwLCAxMjY3NiwgNDI3MjksIDkyMTk4LCAzMjE1LCAwLCAKLSAgICA3NzEwLCAxNjEwLCA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIDEyMDUzNywgNjU5MjQsIDk5NzQsIDIyOCwgNjYzNTQsIDE1MDEsIAotICAgIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCA2MjI1LCAwLCA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAKLSAgICAwLCA3MTUyLCA4NTAyLCA1NzYyLCAxOTY3LCA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCA3Nzk3OSwgMCwgMTI2NTA3LCAKLSAgICAxMDQxNCwgMTMwMDEsIDgxNDEsIDAsIDQyNTM3LCAxNTU3LCA0MzU5NCwgMTI4NjQyLCA2MzMwLCA2ODA1LCA4NjMxLCAKLSAgICAyNTQ1LCA3MDA1MiwgMTI3MTY2LCAwLCA3NDE5MCwgMCwgMCwgOTgzNzc3LCA0Mjc2MiwgMCwgNDI5MTQsIDE2NTAsIDI2MiwgCi0gICAgMTYzNywgMCwgNzkwMSwgMzIzOCwgMTI4MTczLCA0MTg2MSwgMCwgMTI4NTg1LCA2NTE1OCwgMTA4NjAsIDk0MDU5LCAKLSAgICA0MzY1OCwgNzUyNywgMCwgNDMzMTksIDY0MTksIDAsIDQ1LCAwLCA2NDU4OCwgOTM5ODksIDAsIDExOTgxMCwgNzE5NCwgCi0gICAgNTI5MSwgMCwgNDM2NjYsIDEzMTI5LCAwLCA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIAotICAgIDI2MjAsIDAsIDAsIDAsIDk4Mzg2NiwgMTc5LCA2NTg5NiwgMCwgNjQ3NTYsIDI4NTMsIDc4NDQzLCAxMTg4MTMsIDk4Mzg4MSwgCi0gICAgMTE4OTk2LCAxMTkwMDksIDI4NTAsIDgwODQsIDk4MzA4NSwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCAKLSAgICA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCA5ODMwNTYsIDAsIDgzNzcsIDEyNzExNiwgCi0gICAgODI0NSwgNjg0MDEsIDMxNTgsIDkyMzk2LCAzOTgzLCA0MzY1NiwgOTIzLCAxMTk4NTcsIDExOTg1NiwgMjkyLCAxMzAwMiwgCi0gICAgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIDkyNDYzLCA0NjEyLCAxMTk4NTEsIDExOTg1MCwgNzI1MywgMTI3MTEwLCAKLSAgICA2ODM5MSwgMCwgMTA3ODIsIDM2MzcsIDEyOTk2LCA0MzU0MiwgMCwgNjQ1NzgsIDk4MzY2NiwgMzIyOCwgNjk2MzYsIDg3ODMsIAotICAgIDAsIDExOTYxNCwgMjczMSwgMCwgMCwgNzg1ODUsIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCA3ODU4NiwgNDMzMTYsIAotICAgIDQxNzcsIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgOTgzMTczLCA2NDUwMCwgNDM2NzQsIDAsIDY0OTQ3LCAxODU2LCAwLCAwLCAKLSAgICA2Mzc5LCAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgNzQ3NzUsIDEyNzM4MCwgOTgzOTIyLCA5MjM4OSwgNzQwNzIsIDU1MjY5LCAKLSAgICAwLCAwLCA5ODM2NzQsIDIwMzMsIDc4NTc3LCA3ODU3NiwgMTk1MDI2LCA1NTI1NCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIAotICAgIDkzOTg4LCA2NzYxMiwgNjU2NzQsIDEyODI0NCwgOTQxMTAsIDQxNjg5LCAwLCA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCAKLSAgICA3NDAxOSwgMCwgMTI4MDY2LCAxMjgwMzEsIDg1NjEsIDQ1NzMsIDAsIDUzMjYsIDAsIDEyMDYwNSwgNzIzMCwgODI1NywgMCwgCi0gICAgODc3OCwgNDE2ODgsIDAsIDY1Nzc2LCAyMDcxLCA4MzE0LCA2NDU5LCAwLCA3NjI4LCA2NTA5MiwgNzM5MDMsIDY2NzIxLCAKLSAgICAxMTM0MiwgMTI4NTYxLCAwLCAwLCAxMjgyMjYsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgOTY3LCA5ODM5NDIsIAotICAgIDEyNjQ2OSwgMTE5NDYsIDAsIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCA5ODMxNTcsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgCi0gICAgMTAwODksIDg3MCwgNzY0OCwgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCAKLSAgICA0MzY5MiwgNDU2MywgMCwgMCwgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAxMjY2MDcsIDg2OCwgODczLCA3NjQyLCAKLSAgICAwLCA4NjksIDg3NCwgNzY0NCwgMTIwNjc0LCA4NzUsIDc5MCwgMTI4MzAzLCAwLCAwLCAwLCA2NjE4MiwgOTgzMjUwLCAKLSAgICA1NDI5LCAxOTUwNTUsIDY2MTgwLCAxMjY0ODAsIDY2MTgxLCA2ODQ1MiwgOTgzMjgxLCA5ODMyNDIsIDQyMDY3LCAwLCAKLSAgICA1NDMzLCAxMDY1NywgNzkxMSwgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgCi0gICAgNTMxNywgNTQyMywgNDYxMSwgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAwLCAwLCA2NjE5NCwgNDQxOCwgNjYxODQsIAotICAgIDQ2MjgsIDQyNDUsIDExOTY0OCwgMCwgMCwgMTg1MSwgMCwgMTI3MTg5LCAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCAKLSAgICA5ODMyNzAsIDQyNzc2LCA2NjE4NywgMTI4MzcsIDg4MjksIDc3MTEsIDkyNzE0LCAwLCA5MjMyMSwgNDMzMTgsIDAsIDg4MDksIAotICAgIDY5ODgxLCAwLCA5ODMxNDIsIDEyMDYwNCwgOTgzMDUyLCA5ODM4NzMsIDAsIDk4MzI2MiwgMCwgMCwgNzQyNywgOTk1OCwgCi0gICAgNDU4OCwgNDM2ODAsIDAsIDc0NDg0LCAxOTQ5NjgsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDk4Mzg3NiwgMCwgCi0gICAgNzkzLCA3NDQwNCwgMCwgMzA1LCA1NjcsIDY3NjYyLCA4NDIsIDEyODUxOSwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIAotICAgIDExODg3NywgMCwgNzgzNywgOTE3NjI1LCA4MTgsIDUzMzcsIDE5NDYyOCwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCAKLSAgICAxMjY1NzYsIDEyMDU5NCwgNzQwODYsIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgCi0gICAgMTI3MTcyLCA5MTc2MDgsIDQ5NjksIDEyNTQsIDkxNzYwNSwgOTE3NjA0LCA5Mzk2NywgOTE3NjAyLCA2NTIyOCwgNzgyMjEsIAotICAgIDEyNjYxMiwgMCwgMjg0MCwgMCwgMTE5OTgyLCA5ODM5MzAsIDAsIDMyNDUsIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgCi0gICAgMTI5OTEsIDAsIDI2NTEsIDY4MDE2LCA5ODMyNTcsIDkxNzYxMSwgMTI3MDI2LCAxMjg4ODMsIDAsIDAsIDQzNjQ4LCAKLSAgICAxMjA4MTIsIDAsIDQzMzIyLCA5MjY2MiwgMCwgMCwgNjQzNzIsIDkyNjk4LCAzMjI2LCA2NTUsIDc1MiwgNzQ1NywgNzQ1NiwgCi0gICAgNzQ1MiwgMzI4NSwgMTI4Nzc5LCAxMjc4MjEsIDExOTk4OCwgNjU2MTAsIDIzOTEsIDAsIDkyMjQ4LCA2NzEsIDI1MCwgCi0gICAgNzQzNCwgNjE4LCA2NjgsIDYxMCwgNDI4MDAsIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgCi0gICAgNjI4LCAzOTA1LCA3MzgxMCwgMCwgMTI4MjY2LCA2NDc0OSwgNjc4NTAsIDIxMDcsIDAsIDAsIDQ2MDUsIDEyODE3NCwgCi0gICAgOTgzMTkyLCA0MzM3MiwgNjU5NDUsIDEyODgzOCwgMCwgMTE5NTkwLCAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCAKLSAgICA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIDEyODI5NywgMCwgMCwgMCwgMCwgMTEzMzQsIDQzMzI2LCAxMjYwOSwgCi0gICAgMTE1MTksIDExNTAzLCA1NTMwLCA1MjEwLCAwLCA0NjI3LCA5ODM4ODMsIDUyMDgsIDAsIDEyODg0MiwgMTAzMzIsIDUyMTgsIAotICAgIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIDY5NjQ3LCA3Mzg5NCwgMTI4ODUyLCA1NDMyLCA2NDk2NSwgNTUyNywgCi0gICAgNzQwMzMsIDEwNTE2LCA3NzkwLCA1NTI4LCAwLCA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgOTg4NywgMCwgNDAwMCwgCi0gICAgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzgsIDc4ODQsIDAsIDEyODU2NiwgOTE3OTg5LCAxMjg2NjYsIAotICAgIDIxMSwgMjUwOSwgMTI4ODU4LCAxMjA1NzMsIDY4NjcyLCAzMjIwLCA0MjIzNSwgMCwgMTA2OTAsIDg5NTEsIDUyMTQsIAotICAgIDQyNDc0LCA4MTE4LCAwLCA3MDQ4LCA0NTkwLCAxMjcyNTgsIDU4NTIsIDAsIDAsIDEyNzI1OSwgMTcwOCwgMCwgOTgzMTY1LCAKLSAgICAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIDQ2OTgsIDY2NTA5LCAxMDY2LCAxMTk5MjEsIDQ3MDEsIDk4Mzg2NywgCi0gICAgMTIwMjg1LCA3NDIyNSwgOTQxMTEsIDgyNjcsIDAsIDEyNzI2NSwgMCwgNzUxNiwgMCwgMjYyNSwgOTgzOTY4LCA4MDM0LCAKLSAgICA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIDEyMDI5MywgODQxNiwgMCwgMCwgMCwgNDMzODQsIDEyNjYwLCAwLCAwLCAKLSAgICAwLCA3NDg1MCwgNDEwNjksIDAsIDEyODE1NiwgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIDc5OTAsIDAsIDM5OTAsIAotICAgIDAsIDk4MzI1NCwgNjYzNjgsIDUwMTcsIDY0OTU2LCA3MDcxLCAwLCAxMTkxNDQsIDEwMzAsIDExODgwMCwgOTgzMTIwLCAKLSAgICA5NTEzLCA0MTA1OSwgOTM1NywgMCwgMTc3MywgMCwgMTIwMzUwLCAwLCA2MzM5LCA3NzQ1LCA5ODQ0LCAwLCA2NDY1MCwgOTQsIAotICAgIDE4ODAsIDc0NzY2LCA5ODM4MjksIDg5MDgsIDAsIDEyODcwNywgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIAotICAgIDEyNjU3MiwgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgMTc1NywgNjk2NCwgNDY5NiwgMCwgMTIwMzM1LCA2NDc4NSwgNzM5NCwgCi0gICAgMzY0MSwgNTQxOSwgMTI4MDU1LCAwLCAxMjc4ODMsIDAsIDEyMDM0NCwgNDM5ODgsIDAsIDg2MTAsIDQzMDYyLCA3NTkyLCAKLSAgICA4NTYsIDc0Mjk5LCA5MzYsIDEzMjg5LCA2OTg5NCwgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCA3ODYzOCwgMTk5NTMsIDAsIAotICAgIDE1MDQsIDcwMDY0LCAwLCAxMjkxMywgNzQyMDYsIDc1MjksIDAsIDEyODY5OSwgOTgzOTQ4LCAxMjA3ODIsIDQxMTMsIDAsIAotICAgIDIzNzIsIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDAsIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIAotICAgIDAsIDk4Mzk0NiwgODAzMywgNjk5NTMsIDAsIDk4MTAsIDEyNzI2OSwgMCwgMTI5NzAsIDAsIDQyMzUxLCAxMDEwOSwgCi0gICAgOTE3NjIzLCAwLCAxOTQ2OTMsIDAsIDkyNjkwLCAwLCAwLCA3NDI5MSwgMTk2NSwgNzA2OSwgNDMzMTIsIDAsIDczODg3LCAwLCAKLSAgICAyMDg3LCA2NDM3MCwgNjMxNCwgNDE3MTQsIDg1MDEsIDAsIDAsIDc0MjM5LCA0MTMxNywgOTI2MTQsIDIwOTEsIDc0NTQ1LCAKLSAgICAyMDkwLCAwLCA5MzUzLCA3MTE3LCAyMDc3LCA3Nzg4NiwgMCwgMTA0OTgsIDIwODMsIDc3ODg4LCAwLCAwLCAxMTkyMzYsIAotICAgIDYzNCwgMCwgMCwgMCwgNjk3NzksIDQxNjUsIDg3NDYsIDAsIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCA5ODM3MTAsIAotICAgIDAsIDEyODEzNSwgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgNDEwMzksIDEyNzQ4MywgMCwgNjgwLCAyMzAyLCAKLSAgICAxMjgyMDAsIDExODEsIDcwNTYsIDMxNzQsIDEyNjUxNiwgMCwgOTI2NjgsIDY1NjY1LCAxMjczNzUsIDEyNjUwNiwgNjkyMCwgCi0gICAgMCwgOTIyOTUsIDAsIDExODk2NSwgMCwgNjQ2NDQsIDEyNjk4MSwgNzQxMTksIDAsIDQxMDI4LCAwLCA2MjMxLCAyNjEzLCAKLSAgICA2NTMwMiwgNDA5ODksIDAsIDE5NDY5NiwgMCwgNDI3NjAsIDAsIDk4MzU2NiwgMCwgNDA5ODcsIDQ2NjcsIDAsIDk4MzkyMywgCi0gICAgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIDQ3NDksIDkyNjc1LCAwLCA5MjEsIDQ3NDQsIDAsIDEyNzAyLCAKLSAgICAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgMTI4MTIxLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCA1MzEzLCAKLSAgICA5NTEsIDAsIDAsIDk4Mzg1OCwgNzYwNCwgOTgzMjgyLCA0MDA5LCAxMjc4MTYsIDk4MzcwMSwgMTIwNTYyLCAwLCA5ODM3MTEsIAotICAgIDY0ODYwLCAxMTkxMzgsIDExOTA2OSwgMCwgMTI3MzcwLCA0MDQ4LCA5ODM1OTgsIDAsIDcwMDI0LCAxNjQ2LCA3Nzg5MCwgCi0gICAgNjQ1MzQsIDczOTk1LCAxMjA3MDUsIDAsIDExOTg5MCwgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgCi0gICAgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgOTgzOTI2LCA1NTIyMCwgMTAwODQsIDczOTQzLCAxMTg4NDAsIDAsIAotICAgIDkxNzU2MiwgMTk0NjEwLCAzMzk5LCA5ODUxLCA5ODM3MDgsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAKLSAgICAwLCA3MTM2NywgMCwgMCwgMTc3NywgOTE1MSwgMTEzNywgNjk3NjcsIDc0OSwgNDIzNjYsIDAsIDUzODUsIDEyODU3NCwgCi0gICAgMTI4MjE4LCAwLCAwLCA1OTg5LCAwLCAwLCAxMjgwOTEsIDAsIDQxNjg1LCA2OTIyMywgMCwgOTc2OSwgNDE2ODQsIAotICAgIDk4MzIxNCwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgCi0gICAgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIDY5Njg4LCA2OTc3MSwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDY5NzY1LCAKLSAgICAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIDAsIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAKLSAgICAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgOTgzMjIxLCAxMTczMCwgMCwgOTU5MywgNTc1NywgMjQwMywgNjQ4MDgsIAotICAgIDU1Mjc1LCAwLCAxMTcyOCwgNDM1NzIsIDAsIDAsIDc3NjQsIDk4MzcwNSwgMTEwOTQsIDEyMDgyNSwgMCwgMCwgNDI4MiwgCi0gICAgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgCi0gICAgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgCi0gICAgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcwMywgMzY0NywgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAKLSAgICAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIAotICAgIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgCi0gICAgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIAotICAgIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgCi0gICAgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIAotICAgIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgCi0gICAgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIDAsIDYzNDAsIDExODg1NSwgMCwgNzgxMzQsIDg2ODAsIDcyMDQsIAotICAgIDcwMDY1LCAyNTg4LCAyOTE0LCA3MDExLCA1NTI4MSwgMCwgMjQ3MSwgMTk0NjMxLCAyODgzLCAyNzQ5LCAxMTk1NjMsIAotICAgIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAKLSAgICAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDk0MDE2LCAwLCAxMjcxMSwgMzE4MSwgNjYyMTIsIAotICAgIDc0Mjg5LCA2ODQ3MiwgNDI4NTcsIDgyNjIsIDk4MzM3MSwgMCwgOTgzMjIwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIAotICAgIDcyMzQsIDc0MDQ3LCA5ODMwODgsIDAsIDQzNzQ0LCAwLCAwLCA3Mzg0NiwgMjkzNCwgMTI3MjIsIDEyMDc2MiwgOTIyLCAKLSAgICA0Mzk4MywgNzQ1MDcsIDk4MzEyNiwgNzQ0NjEsIDMyMTgsIDEyMDQ3MSwgNzQyOTAsIDEyMDQ2OSwgNjQ1NjIsIDEyMDQ3NSwgCi0gICAgODU2OSwgMTE0MDQsIDExOTMyLCA3MzcyOCwgMzIxNCwgMTIwNDYxLCAxMjA0NjgsIDEyMTI4LCAzMjA3LCA2NTQ4NiwgCi0gICAgNzg3MjksIDE5MDEsIDc4NzI3LCAxMjczMjYsIDEyMDQ2MCwgNzQyNSwgMzIwNSwgNjgwMDMsIDc4NzM3LCA3ODczNiwgCi0gICAgNzg3MzUsIDQzMzgzLCA2OTk0MCwgNjU0NTksIDI2MDYsIDc4NzMwLCA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAKLSAgICAxMTk2NjEsIDAsIDAsIDk4MzMxMywgMTIwNzM3LCAwLCA5ODM5NjIsIDk4MzMxMiwgMzc4LCAyNjEwLCAwLCA2NTA3OSwgCi0gICAgOTgzMzE3LCA2NTY5NSwgMTI2NTU5LCAzNywgNzA2OCwgMCwgMTIwNDgwLCAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgCi0gICAgMTA2MzgsIDk3NjgsIDY5OTUyLCAxMTk5MDksIDk4MzM5MSwgMCwgMCwgMCwgMCwgNjU1MTAsIDAsIDAsIDUyMzMsIAotICAgIDk4MzMyNywgNjQ3OTIsIDk4MzMyNiwgMCwgMTI2NjMzLCAwLCA3MDYwLCA5ODQ3LCAxMjAxNDQsIDE2ODUsIDU5NSwgMCwgCi0gICAgNzM5NzEsIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCAKLSAgICA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgNjU0NywgMTI4MTMyLCA4MjAzLCA3ODQ4OCwgCi0gICAgOTgzMDkwLCA4NDU4LCA2NTIxMSwgODQ5NSwgMTE5OTA0LCAwLCA5MTc1NTIsIDc3OSwgNzgzMTQsIDY0MzY3LCAyNDY1LCAKLSAgICA2OTkwMSwgODE5MywgNTUyNzksIDk3MzAsIDkyODAsIDAsIDcwNjUsIDc0MTU1LCA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCAKLSAgICA5MjQxNCwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAxMDg4MywgMCwgMTk0ODUyLCA3MzIsIDM3MzcsIDEyNzI1MywgMTU0OCwgCi0gICAgNjg2NTAsIDkyNTA3LCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMTE5MDIwLCA0Mzc2LCAwLCAxMTc4NywgMzc0NSwgMCwgCi0gICAgMCwgNDI4ODgsIDY1NzEyLCA5ODMyOTYsIDM4NjksIDExOTM3LCA1NzI1LCAxMjc1MzksIDE3ODMsIDY4NjQ4LCA1NzI4LCAwLCAKLSAgICAwLCAwLCAxMTkxOCwgNjY1NjcsIDU3MjQsIDAsIDU3MjcsIDc4NTIxLCAwLCAwLCA3NjQsIDAsIDEyODExNiwgNDM1MzEsIDAsIAotICAgIDkwMzMsIDAsIDQyNTMyLCA2MjIzLCAxMTA0MiwgMTIwNzQ5LCAxMTQyMywgMCwgMTE5ODYxLCA3MTM0NCwgNDM0NjUsIDAsIAotICAgIDEyODI2NywgNjU1OSwgNjQ1NTcsIDcxMzQ4LCA5MjY0OSwgMTIwNjQ4LCA0MzAxOSwgNDM0NzcsIDEwMjM4LCA3NDQ5MSwgMCwgCi0gICAgNDMzNzcsIDkyMjgyLCA3MTM0NiwgMTQ3OCwgOTc4MywgMTE4MjUsIDI2MDcsIDY0NzQwLCAwLCA3NzM5LCA3NDU0MywgMCwgCi0gICAgMCwgMCwgNjEzMiwgMCwgNjM3NjUsIDAsIDcwMDU4LCA0MTE0NCwgMCwgOTI0MzgsIDQzNTM3LCA2NzYxLCAxMDA5MywgCi0gICAgNDM2OSwgOTE3NzkxLCAwLCA5ODMxNDgsIDg4MjAsIDM5NDcsIDAsIDAsIDExNTE1LCA1MjYsIDEyODEwMywgNDEyOTUsIAotICAgIDE5NDYwMywgOTE3Nzg1LCAxOTQ5MzIsIDAsIDc2ODgsIDkxNzc4NiwgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIDk4MzM3NCwgCi0gICAgMTU0MywgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgCi0gICAgNDIwODIsIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAKLSAgICAwLCA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNjc4MCwgMCwgMCwgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIAotICAgIDQxMjE3LCAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAzMTM3LCAwLCA0MTQ3LCA5ODMxNzAsIAotICAgIDQxMjE2LCA3ODQ0LCAyNjE2LCAxMTkxOTAsIDY4NDYxLCA2NTIzNCwgOTgzMjg2LCAxMzA3NiwgMzEzNSwgOTgzMjc5LCAKLSAgICA3ODE0MywgMTE5MTM5LCAzMTQyLCA5MjQ1MSwgOTQwNjgsIDEwODE5LCAxMTk1ODAsIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCAKLSAgICA3Mzk2NywgOTQwMDgsIDYyMjcsIDAsIDEyNzE3MywgNjk3NDEsIDk4MzU4MiwgNjE2MywgOTgzNTU4LCAwLCAxMjczMTQsIDAsIAotICAgIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDQzMzkyLCAxMTk1NzMsIDEyNzkzMSwgNTc1MSwgMCwgNjIyMiwgMCwgCi0gICAgMCwgMTIwODYsIDc0MDMsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgNjQ3ODMsIDkyNjU4LCAxMTMxMCwgMCwgODg4MiwgMCwgCi0gICAgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIDY5NzQsIDAsIDAsIDk4MzIwOSwgNTAwMiwgMCwgCi0gICAgNDEyODYsIDY5OTQ2LCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCA5ODM5NTMsIDEyODIyOSwgMCwgNDEyODksIDAsIAotICAgIDE5NDYwMiwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDEyODc3OCwgMTI4NjYxLCAwLCA5ODMzNjcsIDQxMjc5LCAwLCAwLCAKLSAgICAwLCAxMTA4MSwgNDM2MTUsIDAsIDAsIDAsIDk4MzYxMiwgMTI3MjcsIDAsIDAsIDc4Mzk3LCA5NDc1LCA3MTEyLCA2NTEwNSwgCi0gICAgMCwgOTYzMywgMTA4ODYsIDQzNTkyLCA3ODMxLCA5ODM4MjAsIDE5NDU3MSwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCAKLSAgICA4MjkxLCA0MzA1MSwgOTI1NzAsIDAsIDI1OTYsIDQzNTg0LCAwLCAxMzExMywgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCAKLSAgICA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgNzQwNTgsIDYzNzYsIDAsIDAsIDAsIDAsIDk4NTQsIAotICAgIDEyNzc0OCwgNjQ2OTYsIDAsIDEyODIyMCwgMCwgNjk5NCwgMCwgMTcyMCwgMCwgMCwgMCwgNjUyOSwgNzA2MywgOTgzMTgyLCAKLSAgICAzNzUxLCA5MTIwLCA5ODM0NzcsIDAsIDE3OTgsIDcwOSwgMCwgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIDEyNDMwLCAKLSAgICA4MTM3LCA5NDA5OCwgOTI2NDIsIDAsIDAsIDI0NSwgMTI4MDk3LCAxMTQ1NiwgNDEyMzMsIDcwNzAsIDAsIDk0MDQ2LCAKLSAgICA2MTM2LCA5MTc2MDksIDY1Njc3LCA4NjgyLCA0MTIzNSwgOTI1OTUsIDQyMDQ1LCA5ODA0LCAxMTg5NjMsIDQzMiwgMzU5NSwgCi0gICAgMTk0OTQ1LCA2NTQzNywgMCwgNzQ0NTUsIDQyMzk5LCAwLCAwLCAxMjgyNzQsIDAsIDExOTY1OCwgMCwgMCwgMCwgNzc4OTQsIAotICAgIDg3OTcsIDAsIDkwNTIsIDY0ODg4LCA3MTY3LCAyMzU2LCA5NSwgNzQ3ODQsIDEwNTgwLCAwLCA0MjI4NiwgMCwgNjQ2NDAsIAotICAgIDAsIDk0MTA5LCAwLCA3NDEzNywgNzAwMzUsIDEwMDYzLCAxMjY1MiwgMTIxOTksIDkyNDgwLCAwLCAyNTY2LCAxMTk3MSwgCi0gICAgOTgzNzI4LCAwLCAxMDY1LCAwLCAwLCA0MzQwMCwgMjU3NiwgNjY2OTYsIDkzOTk5LCAwLCA0MzYwNCwgMCwgMCwgNzQwODIsIAotICAgIDUxNCwgNzQ1MDIsIDcwMDMyLCAyOTIxLCA0MzIxNSwgNjQ0OTMsIDU3NzIsIDEyOTY4LCA3MDA1NSwgMTk0OTQ0LCA3NDU4MCwgCi0gICAgNDMzOTgsIDI1ODAsIDk4MzgwMSwgNDEzNDEsIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgNTI5MywgNzAwMjAsIDAsIAotICAgIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgNzQwOTgsIDQyODI3LCAwLCAxMzA5MSwgMCwgMCwgMCwgOTE3OTE1LCAwLCAKLSAgICAxMjcwMjUsIDAsIDc0ODIxLCAwLCA5ODM3MjQsIDExOTA0MiwgMCwgMTI3ODY1LCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIAotICAgIDExMzIsIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIDQyNTY5LCAxMjc4MjQsIDAsIDY0NzYxLCAwLCA0MTAyMSwgODUxMCwgCi0gICAgNDI0MzIsIDAsIDAsIDE5NDc4MiwgMCwgNjQ0OTYsIDc0MTA5LCA3MDAzMCwgOTkxNSwgMCwgOTgzMjE2LCA3MDYxLCAKLSAgICA0MTMzNiwgMzg1NCwgNjk3MDAsIDEzMTQxLCA2ODQxMywgNDM0MDEsIDQyMzE5LCAxMzA4MiwgMCwgNzA2NywgNjgyMjEsIDAsIAotICAgIDEyNzM4MywgMTI3MTcxLCAwLCAwLCAxMjc3OTcsIDkwMjksIDQzNTQzLCAxMTkzMTUsIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAKLSAgICAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCA5MjM5OSwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIDExODk3NiwgMTEwNjYsIAotICAgIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgMTIxMDcsIAotICAgIDcxMDAsIDEwOTA1LCA2NTAxMCwgMTk0OTg2LCA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCA5MjY0NCwgMTMxMjEsIAotICAgIDEyMDAzNiwgMCwgMTIwMTAsIDEyODU3MywgMTI4MjIxLCAwLCAwLCAwLCAxMjcxOTMsIDY1ODE2LCA2ODExMSwgMCwgCi0gICAgMTI3OTMzLCA2NTY2OCwgOTIyNTcsIDY2MTgsIDExODc4NCwgNjYzNjUsIDAsIDQyMjM0LCAxMjY0OCwgNzgxMTAsIDcxMjMsIAotICAgIDcwMDM4LCA1Nzg1LCA5MTk4LCA5NzY0LCA0MTMxNiwgNjU4NzcsIDczODMsIDEzMjMwLCA0MTI5OSwgMCwgMCwgNjgzNjUsIAotICAgIDEyODI1OCwgMCwgMCwgMCwgMTMxMjIsIDAsIDE5MSwgNzAwNjAsIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCAKLSAgICA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCA0MTU3NywgMCwgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAKLSAgICAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgMTI5MDEsIDQzMDU4LCAwLCAzNDMsIDcxMjksIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIAotICAgIDQ3NDMsIDAsIDAsIDc0MDQwLCA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCA3MTM0OSwgCi0gICAgMCwgMzk2NCwgNjU5MiwgMCwgMTI4NjkzLCA2NjA0MCwgMCwgNDI1NjgsIDY5ODA2LCAxMjgxMTMsIDE3NzgsIDM5NTYsIDAsIAotICAgIDQyMDcwLCA2NTYzLCA0MzA3NSwgOTAxOCwgOTQwMDYsIDk4MzM4OCwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCA3NDUzMSwgCi0gICAgMTI3OTY5LCAwLCA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkyNzAzLCAKLSAgICAxMTg4MjIsIDE3NTAsIDAsIDQzOTQsIDY4MzY4LCAxODA3LCA5ODM4NzksIDkyMjk4LCAwLCA1ODg5LCAwLCA3MTgwLCAwLCAKLSAgICAxMTkxNDUsIDAsIDkxNzU1OCwgNDI0NzEsIDY5ODIsIDE3MjEsIDQ0MDIyLCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIAotICAgIDQ1MTIsIDExOTM2MCwgNjUyMzAsIDEyODEwOSwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDkyNDE2LCAKLSAgICAzOTc1LCAwLCA3NDA4NywgMCwgMTI2NzIsIDM3OTgsIDI3MDMsIDk4MzU5OSwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgCi0gICAgNDEwOTUsIDM5NjIsIDAsIDI5MzIsIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIAotICAgIDAsIDAsIDQxODUxLCAxMjgyMzAsIDQxODQ2LCAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAKKyAgICAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDEyNzEwNiwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIAorICAgIDY0NDk5LCA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgCisgICAgNzg2MTksIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIAorICAgIDEyMTMsIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCAKKyAgICA2NDA3MCwgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIAorICAgIDY1NDM2LCAwLCAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAKKyAgICAxMjg1OCwgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAKKyAgICAyMTI5LCAwLCA5MjIyLCA5ODM3MzgsIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCAKKyAgICA0MjMzMSwgNjQ5MzUsIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc2NywgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIAorICAgIDM2MTMsIDEyODgzNywgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgCisgICAgMTIwMzA0LCA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgCisgICAgMTIwMzE2LCA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAKKyAgICAxMDc2NCwgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAKKyAgICAxOTkxLCA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgCisgICAgNDMwNzYsIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIAorICAgIDEyMDMyNSwgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAKKyAgICAxMjAzMjYsIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgCisgICAgMCwgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIAorICAgIDI0MzAsIDQxNjc4LCAwLCAxMjAyNDMsIDIzMzYsIDk4MzkwMywgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzY5LCAxOTIxLCAKKyAgICAxMDk0NywgMTk5MjcsIDAsIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgCisgICAgMTA5NTYsIDQyMjg1LCA0MTY3NCwgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIAorICAgIDk4MzA4OSwgMTg1NCwgMTA3OTQsIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCAKKyAgICA2NTQzMywgNjA3NiwgNjQ3OTMsIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIAorICAgIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgCisgICAgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgCisgICAgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAKKyAgICAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIAorICAgIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgCisgICAgNzc5ODksIDYzNzUxLCAxMjEzNywgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgCisgICAgNjU0NTIsIDAsIDExMzAxLCA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIAorICAgIDAsIDAsIDc4MDE2LCA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCAKKyAgICA5MjcwOSwgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAKKyAgICAxMDU0NSwgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIAorICAgIDkyMzYzLCA5OTk2LCA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCAKKyAgICA1NDUsIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgCisgICAgMCwgMCwgOTExOSwgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCAKKyAgICA3ODAyMiwgNDEwLCA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAKKyAgICAxMDEyNiwgMTIxMTYsIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCAKKyAgICA0MTM0NSwgMTIwMzYyLCAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgCisgICAgNjQ4NTgsIDM2MSwgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIAorICAgIDQ1NjksIDc0MTMwLCAwLCA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgCisgICAgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIAorICAgIDAsIDk4MzU4MSwgNzQwNTQsIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxOSwgNzY5NSwgODc2OSwgNjUyNDYsIAorICAgIDQ4MjksIDE5NDY2MywgNDg1OSwgNjQ0NjcsIDAsIDk4Mzk2MywgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgCisgICAgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCA5ODM4NjMsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIAorICAgIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgCisgICAgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIAorICAgIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCAKKyAgICA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIAorICAgIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgCisgICAgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIAorICAgIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIAorICAgIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgCisgICAgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgCisgICAgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIAorICAgIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIAorICAgIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgCisgICAgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCAKKyAgICA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIAorICAgIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgCisgICAgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAKKyAgICAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIAorICAgIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAKKyAgICAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgCisgICAgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ1NywgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAKKyAgICAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgCisgICAgOTgzOTc5LCAxMjMwLCAwLCAwLCAzNTk3LCA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIAorICAgIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCAKKyAgICA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCAKKyAgICA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIAorICAgIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIDY3OTc5LCA5ODM2OTAsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCAKKyAgICA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAKKyAgICAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgCisgICAgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCAKKyAgICA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIAorICAgIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCAKKyAgICA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgCisgICAgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIAorICAgIDcwMTcsIDQyODUyLCAwLCA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg3OCwgNzQwMzUsIDAsIDExOTEzLCAKKyAgICA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIAorICAgIDAsIDAsIDEwMTc3LCA3Mzc3NywgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgCisgICAgNzgzMjIsIDQ2MjQsIDc4MTgsIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgCisgICAgNzgzMjYsIDc4MzIzLCA0MzMyNywgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgCisgICAgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk2MSwgMCwgCisgICAgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1OSwgMTk1MDYyLCA5OTQ5LCAKKyAgICAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIAorICAgIDQxNDY4LCA5ODM3NTcsIDAsIDUyOTIsIDU1MjcyLCA5ODM4ODMsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIAorICAgIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIAorICAgIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCAKKyAgICA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIAorICAgIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIAorICAgIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCAKKyAgICA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIAorICAgIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgCisgICAgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgCisgICAgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgOTgzNDU4LCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgCisgICAgOTgzNjU3LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgCisgICAgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgCisgICAgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgCisgICAgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAKKyAgICAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIAorICAgIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAKKyAgICAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCAKKyAgICA2MTksIDQ2MzUsIDY1MDgwLCAwLCAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIAorICAgIDkzNjYsIDQyNzkwLCA0MjAwNiwgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIAorICAgIDY1MzIxLCA2NTMyMCwgNjUzMzUsIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCAKKyAgICA5MjQyNywgOTEyOCwgOTQwNDUsIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODMwLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgCisgICAgNjUzMTYsIDQxMDYsIDY1MzE0LCA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgCisgICAgNDEyMzksIDQzNTMzLCA3ODQ1OSwgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgCisgICAgNDYxNSwgMTI2OTUsIDEyNzc1MiwgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCAKKyAgICA2OTc2MiwgNjY0NTUsIDY0NzM4LCAzMjE5LCA2ODY1NCwgOTgzNzg3LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIAorICAgIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgCisgICAgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIAorICAgIDczNjUsIDk4Mzc1MywgMTIwNTkzLCAxMzA3MSwgMCwgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIAorICAgIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgCisgICAgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzg1LCA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAKKyAgICAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgCisgICAgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgCisgICAgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIAorICAgIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgCisgICAgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTIyLCAwLCAwLCA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCAKKyAgICA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIAorICAgIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgCisgICAgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgCisgICAgMTE0MDksIDY4MzczLCA2MzgyLCAwLCA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCAKKyAgICA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAKKyAgICAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIAorICAgIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIAorICAgIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAKKyAgICAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIAorICAgIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAKKyAgICAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIDM2MzUsIDY0MzM3LCA5ODMyODEsIDAsIDAsIDcxOTUsIAorICAgIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAKKyAgICAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCAKKyAgICA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIAorICAgIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgCisgICAgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgCisgICAgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIAorICAgIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgCisgICAgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgCisgICAgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIAorICAgIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIDAsIDY4MzY0LCA5ODMyMjQsIDQ4OTEsIDAsIDEwNjQxLCAKKyAgICAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIAorICAgIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMzMSwgNzM3ODksIDAsIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4NDIsIAorICAgIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzMwLCAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCAKKyAgICA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIAorICAgIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCA2NTMwOCwgMzI5NCwgOTgzMzMyLCA4NTI5LCAKKyAgICAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIAorICAgIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgCisgICAgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIAorICAgIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIAorICAgIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgCisgICAgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIAorICAgIDc0MTkwLCAwLCAwLCA5ODM3ODYsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAxNjM3LCAwLCA3OTAxLCAzMjM4LCAKKyAgICAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgCisgICAgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIAorICAgIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgMjYyMCwgMCwgMCwgMCwgOTgzODc1LCAKKyAgICAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODkwLCAxMTg5OTYsIDExOTAwOSwgMjg1MCwgCisgICAgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAKKyAgICAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIAorICAgIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgCisgICAgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIAorICAgIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjc1LCAzMjI4LCA2OTYzNiwgODc4MywgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgCisgICAgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCAKKyAgICA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCAKKyAgICA3NDc3NSwgMTI3MzgwLCA5ODM5MzEsIDkyMzg5LCA3NDA3MiwgNTUyNjksIDAsIDAsIDk4MzY4MywgMjAzMywgNzg1NzcsIAorICAgIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgOTM5ODgsIDY3NjEyLCA2NTY3NCwgCisgICAgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIDc0MDE5LCAwLCAxMjgwNjYsIAorICAgIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCA4Nzc4LCA0MTY4OCwgMCwgCisgICAgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIDExMzQyLCAxMjg1NjEsIDAsIAorICAgIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk1MSwgMTI2NDY5LCAxMTk0NiwgMCwgCisgICAgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAxMDA4OSwgODcwLCA3NjQ4LCAKKyAgICAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIDQzNjkyLCA0NTYzLCAwLCAwLCAKKyAgICA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIDAsIDg2OSwgODc0LCA3NjQ0LCAKKyAgICAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTgsIDU0MjksIDE5NTA1NSwgNjYxODAsIAorICAgIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODksIDk4MzI0OCwgNDIwNjcsIDAsIDU0MzMsIDEwNjU3LCA3OTExLCAKKyAgICAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCA1MzE3LCA1NDIzLCA0NjExLCAKKyAgICAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgNDYyOCwgNDI0NSwgCisgICAgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIDk4MzIwMiwgNDI3NzYsIAorICAgIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgNjk4ODEsIDAsIAorICAgIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg4MiwgMCwgOTgzMjcwLCAwLCAwLCA3NDI3LCA5OTU4LCA0NTg4LCA0MzY4MCwgCisgICAgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODg1LCAwLCA3OTMsIDc0NDA0LCAwLCAKKyAgICAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgMTE4ODc3LCAwLCA3ODM3LCAKKyAgICA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgCisgICAgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgCisgICAgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIAorICAgIDk4MzkzOSwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI2NSwgCisgICAgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCAKKyAgICA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgCisgICAgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgCisgICAgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIAorICAgIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAKKyAgICAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgCisgICAgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIAorICAgIDQ2MjcsIDk4Mzg5MiwgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgCisgICAgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIAorICAgIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIAorICAgIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgCisgICAgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIAorICAgIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgCisgICAgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODc2LCAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgCisgICAgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NzcsIDgwMzQsIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgCisgICAgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAKKyAgICAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgMCwgOTgzMjYyLCA2NjM2OCwgNTAxNywgCisgICAgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAKKyAgICAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgMTg4MCwgNzQ3NjYsIDk4MzgzOCwgODkwOCwgCisgICAgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAKKyAgICAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgCisgICAgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCAKKyAgICA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgCisgICAgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NTcsIDEyMDc4MiwgNDExMywgMCwgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgCisgICAgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgMCwgOTgzOTU1LCA4MDMzLCA2OTk1MywgMCwgCisgICAgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIAorICAgIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgCisgICAgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAKKyAgICAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgCisgICAgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxOSwgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCAKKyAgICA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgCisgICAgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCAKKyAgICA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgCisgICAgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTMyLCA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgCisgICAgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAKKyAgICAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIDk1MSwgMCwgMCwgOTgzODY3LCA3NjA0LCA5ODMyOTAsIDQwMDksIAorICAgIDEyNzgxNiwgOTgzNzEwLCAxMjA1NjIsIDAsIDk4MzcyMCwgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIAorICAgIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAKKyAgICAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCAKKyAgICA5ODM5MzUsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIAorICAgIDk4MzcxNywgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAKKyAgICAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIAorICAgIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgOTgzMjE2LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAKKyAgICAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgCisgICAgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgCisgICAgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCAKKyAgICA5ODMyMjMsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgCisgICAgNzc2NCwgOTgzNzE0LCAxMTA5NCwgMTIwODI1LCAwLCA5ODMyMjYsIDQyODIsIDgyOTgsIDAsIDAsIDAsIDAsIDAsIDY0NDQ5LCAKKyAgICAwLCAxMjY2NTAsIDYzODU0LCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIDc4MjUwLCAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgCisgICAgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIDM0NTgsIDQzNjUsIDcwMDUzLCA5ODM3MTIsIDM2NDcsIAorICAgIDAsIDI2MDIsIDEyODM0MSwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgMCwgNjQ2MzEsIDE3MiwgNDk3MSwgNDEyMTksIAorICAgIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAxMjY0NzYsIDkyMTkzLCA3NTk3LCAxMDUyOCwgMCwgMCwgMzczMiwgNzM5MTAsIAorICAgIDE5NDU4OCwgNTM0NCwgMCwgNDMzNjYsIDQzMzYzLCA5MDYyLCAxMTkyNTIsIDAsIDAsIDAsIDY0NDc5LCA5MjMyLCA5MjU5NiwgCisgICAgMCwgMCwgMTk0NzEyLCAxMDkwMCwgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIAorICAgIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIDEyNzM1NCwgMTI3MzQ1LCAyOTksIDkxNzk1NywgODUyNSwgMTI3MzQ3LCAzNTI0LCAKKyAgICA5MTc1NjUsIDg4MzEsIDEyNzM0OSwgOTI1NjQsIDMwNzUsIDY3ODY3LCAxMjczNTIsIDAsIDY2MzYyLCAwLCA2NDM1MywgMCwgCisgICAgMCwgNTg0NSwgMCwgMCwgMCwgMjU4MSwgODIwMCwgNjUxMTQsIDY4NDYwLCAwLCA0MzI4MywgNTU1MSwgMCwgMTIwNzM1LCAKKyAgICA5ODMyMDEsIDYzNDAsIDExODg1NSwgMCwgNzgxMzQsIDg2ODAsIDcyMDQsIDcwMDY1LCAyNTg4LCAyOTE0LCA3MDExLCAKKyAgICA1NTI4MSwgMCwgMjQ3MSwgMTk0NjMxLCAyODgzLCAyNzQ5LCAxMTk1NjMsIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgCisgICAgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAKKyAgICAxMTg5NjcsIDAsIDM3MzgsIDk0MDE2LCAwLCAxMjcxMSwgMzE4MSwgNjYyMTIsIDc0Mjg5LCA2ODQ3MiwgNDI4NTcsIDgyNjIsIAorICAgIDk4MzM3OSwgMCwgOTgzMjIyLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIDc0MDQ3LCA5ODMwODgsIDAsIDQzNzQ0LCAKKyAgICAwLCAwLCA3Mzg0NiwgMjkzNCwgMTI3MjIsIDEyMDc2MiwgOTIyLCA0Mzk4MywgNzQ1MDcsIDk4MzEyNiwgNzQ0NjEsIDMyMTgsIAorICAgIDEyMDQ3MSwgNzQyOTAsIDEyMDQ2OSwgNjQ1NjIsIDEyMDQ3NSwgODU2OSwgMTE0MDQsIDExOTMyLCA3MzcyOCwgMzIxNCwgCisgICAgMTIwNDYxLCAxMjA0NjgsIDEyMTI4LCAzMjA3LCA2NTQ4NiwgNzg3MjksIDE5MDEsIDc4NzI3LCAxMjczMjYsIDEyMDQ2MCwgCisgICAgNzQyNSwgMzIwNSwgNjgwMDMsIDc4NzM3LCA3ODczNiwgNzg3MzUsIDQzMzgzLCA2OTk0MCwgNjU0NTksIDI2MDYsIDc4NzMwLCAKKyAgICA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAxMTk2NjEsIDAsIDAsIDk4MzMyMSwgMTIwNzM3LCAwLCA5ODM5NzEsIAorICAgIDk4MzMyMCwgMzc4LCAyNjEwLCAwLCA2NTA3OSwgOTgzMzI1LCA2NTY5NSwgMTI2NTU5LCAzNywgNzA2OCwgMCwgMTIwNDgwLCAKKyAgICAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDY5OTUyLCAxMTk5MDksIDk4MzM5OSwgMCwgMCwgMCwgMCwgCisgICAgNjU1MTAsIDAsIDAsIDUyMzMsIDk4MzMzNSwgNjQ3OTIsIDk4MzMzNCwgMCwgMTI2NjMzLCAwLCA3MDYwLCA5ODQ3LCAKKyAgICAxMjAxNDQsIDE2ODUsIDU5NSwgMCwgNzM5NzEsIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAKKyAgICAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgCisgICAgNjU0NywgMTI4MTMyLCA4MjAzLCA3ODQ4OCwgOTgzMDkwLCA4NDU4LCA2NTIxMSwgODQ5NSwgMTE5OTA0LCAwLCA5MTc1NTIsIAorICAgIDc3OSwgNzgzMTQsIDY0MzY3LCAyNDY1LCA2OTkwMSwgODE5MywgNTUyNzksIDk3MzAsIDkyODAsIDAsIDcwNjUsIDc0MTU1LCAKKyAgICA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCA5MjQxNCwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAxMDg4MywgMCwgMTk0ODUyLCAKKyAgICA3MzIsIDM3MzcsIDEyNzI1MywgMTU0OCwgNjg2NTAsIDkyNTA3LCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMTE5MDIwLCAKKyAgICA0Mzc2LCAwLCAxMTc4NywgMzc0NSwgMCwgMCwgNDI4ODgsIDY1NzEyLCA5ODMzMDQsIDM4NjksIDExOTM3LCA1NzI1LCAKKyAgICAxMjc1MzksIDE3ODMsIDY4NjQ4LCA1NzI4LCAwLCAwLCAwLCAxMTkxOCwgNjY1NjcsIDU3MjQsIDAsIDU3MjcsIDc4NTIxLCAKKyAgICAwLCAwLCA3NjQsIDAsIDEyODExNiwgNDM1MzEsIDAsIDkwMzMsIDAsIDQyNTMyLCA2MjIzLCAxMTA0MiwgMTIwNzQ5LCAKKyAgICAxMTQyMywgMCwgMTE5ODYxLCA3MTM0NCwgNDM0NjUsIDAsIDEyODI2NywgNjU1OSwgNjQ1NTcsIDcxMzQ4LCA5MjY0OSwgCisgICAgMTIwNjQ4LCA0MzAxOSwgNDM0NzcsIDEwMjM4LCA3NDQ5MSwgMCwgNDMzNzcsIDkyMjgyLCA3MTM0NiwgMTQ3OCwgOTc4MywgCisgICAgMTE4MjUsIDI2MDcsIDY0NzQwLCAwLCA3NzM5LCA3NDU0MywgMCwgMCwgMCwgNjEzMiwgMCwgNjM3NjUsIDAsIDcwMDU4LCAKKyAgICA0MTE0NCwgMCwgOTI0MzgsIDQzNTM3LCA2NzYxLCAxMDA5MywgNDM2OSwgOTE3NzkxLCAwLCA5ODMxNDgsIDg4MjAsIDM5NDcsIAorICAgIDAsIDAsIDExNTE1LCA1MjYsIDEyODEwMywgNDEyOTUsIDE5NDYwMywgOTE3Nzg1LCAxOTQ5MzIsIDAsIDc2ODgsIDkxNzc4NiwgCisgICAgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIDk4MzM4MiwgMTU0MywgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCAKKyAgICA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgNDIwODIsIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCAKKyAgICA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAwLCA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNjc4MCwgMCwgMCwgCisgICAgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIDQxMjE3LCAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAKKyAgICAzMTM3LCAwLCA0MTQ3LCA5ODMxNzAsIDQxMjE2LCA3ODQ0LCAyNjE2LCAxMTkxOTAsIDY4NDYxLCA2NTIzNCwgOTgzMjk0LCAKKyAgICAxMzA3NiwgMzEzNSwgOTgzMjg3LCA3ODE0MywgMTE5MTM5LCAzMTQyLCA5MjQ1MSwgOTQwNjgsIDEwODE5LCAxMTk1ODAsIAorICAgIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCA3Mzk2NywgOTQwMDgsIDYyMjcsIDAsIDEyNzE3MywgNjk3NDEsIDk4MzU4MiwgNjE2MywgCisgICAgOTgzNTU4LCAwLCAxMjczMTQsIDAsIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDQzMzkyLCAxMTk1NzMsIAorICAgIDEyNzkzMSwgNTc1MSwgMCwgNjIyMiwgMCwgMCwgMTIwODYsIDc0MDMsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgNjQ3ODMsIAorICAgIDkyNjU4LCAxMTMxMCwgMCwgODg4MiwgMCwgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIAorICAgIDY5NzQsIDAsIDAsIDk4MzIxMSwgNTAwMiwgMCwgNDEyODYsIDY5OTQ2LCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCAKKyAgICA5ODM5NjIsIDEyODIyOSwgMCwgNDEyODksIDAsIDE5NDYwMiwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDEyODc3OCwgCisgICAgMTI4NjYxLCAwLCA5ODMzNzUsIDQxMjc5LCAwLCAwLCAwLCAxMTA4MSwgNDM2MTUsIDAsIDAsIDAsIDk4MzYxMiwgMTI3MjcsIAorICAgIDAsIDAsIDc4Mzk3LCA5NDc1LCA3MTEyLCA2NTEwNSwgMCwgOTYzMywgMTA4ODYsIDQzNTkyLCA3ODMxLCA5ODM4MjksIAorICAgIDE5NDU3MSwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCA4MjkxLCA0MzA1MSwgOTI1NzAsIDAsIDI1OTYsIDQzNTg0LCAKKyAgICAwLCAxMzExMywgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgCisgICAgNzQwNTgsIDYzNzYsIDAsIDAsIDAsIDAsIDk4NTQsIDEyNzc0OCwgNjQ2OTYsIDAsIDEyODIyMCwgMCwgNjk5NCwgMCwgCisgICAgMTcyMCwgMCwgMCwgMCwgNjUyOSwgNzA2MywgOTgzMTgyLCAzNzUxLCA5MTIwLCA5ODM0ODUsIDAsIDE3OTgsIDcwOSwgMCwgCisgICAgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIDEyNDMwLCA4MTM3LCA5NDA5OCwgOTI2NDIsIDAsIDAsIDI0NSwgMTI4MDk3LCAKKyAgICAxMTQ1NiwgNDEyMzMsIDcwNzAsIDAsIDk0MDQ2LCA2MTM2LCA5MTc2MDksIDY1Njc3LCA4NjgyLCA0MTIzNSwgOTI1OTUsIAorICAgIDQyMDQ1LCA5ODA0LCAxMTg5NjMsIDQzMiwgMzU5NSwgMTk0OTQ1LCA2NTQzNywgMCwgNzQ0NTUsIDQyMzk5LCAwLCAwLCAKKyAgICAxMjgyNzQsIDAsIDExOTY1OCwgMCwgMCwgMCwgNzc4OTQsIDg3OTcsIDAsIDkwNTIsIDY0ODg4LCA3MTY3LCAyMzU2LCA5NSwgCisgICAgNzQ3ODQsIDEwNTgwLCAwLCA0MjI4NiwgMCwgNjQ2NDAsIDAsIDk0MTA5LCAwLCA3NDEzNywgNzAwMzUsIDEwMDYzLCAKKyAgICAxMjY1MiwgMTIxOTksIDkyNDgwLCAwLCAyNTY2LCAxMTk3MSwgOTgzNzM3LCAwLCAxMDY1LCAwLCAwLCA0MzQwMCwgMjU3NiwgCisgICAgNjY2OTYsIDkzOTk5LCAwLCA0MzYwNCwgMCwgMCwgNzQwODIsIDUxNCwgNzQ1MDIsIDcwMDMyLCAyOTIxLCA0MzIxNSwgCisgICAgNjQ0OTMsIDU3NzIsIDEyOTY4LCA3MDA1NSwgMTk0OTQ0LCA3NDU4MCwgNDMzOTgsIDI1ODAsIDk4MzgxMCwgNDEzNDEsIAorICAgIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgNTI5MywgNzAwMjAsIDAsIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgCisgICAgNzQwOTgsIDQyODI3LCAwLCAxMzA5MSwgMCwgMCwgMCwgOTE3OTE1LCAwLCAxMjcwMjUsIDAsIDc0ODIxLCAwLCA5ODM3MzMsIAorICAgIDExOTA0MiwgMCwgMTI3ODY1LCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIDExMzIsIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIAorICAgIDQyNTY5LCAxMjc4MjQsIDAsIDY0NzYxLCAwLCA0MTAyMSwgODUxMCwgNDI0MzIsIDAsIDAsIDE5NDc4MiwgMCwgNjQ0OTYsIAorICAgIDc0MTA5LCA3MDAzMCwgOTkxNSwgMCwgOTgzMjE4LCA3MDYxLCA0MTMzNiwgMzg1NCwgNjk3MDAsIDEzMTQxLCA2ODQxMywgCisgICAgNDM0MDEsIDQyMzE5LCAxMzA4MiwgMCwgNzA2NywgNjgyMjEsIDAsIDEyNzM4MywgMTI3MTcxLCAwLCAwLCAxMjc3OTcsIAorICAgIDkwMjksIDQzNTQzLCAxMTkzMTUsIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCAKKyAgICA5MjM5OSwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIDExODk3NiwgMTEwNjYsIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIAorICAgIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgMTIxMDcsIDcxMDAsIDEwOTA1LCA2NTAxMCwgMTk0OTg2LCAKKyAgICA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCA5MjY0NCwgMTMxMjEsIDEyMDAzNiwgMCwgMTIwMTAsIDEyODU3MywgCisgICAgMTI4MjIxLCAwLCAwLCAwLCAxMjcxOTMsIDY1ODE2LCA2ODExMSwgMCwgMTI3OTMzLCA2NTY2OCwgOTIyNTcsIDY2MTgsIAorICAgIDExODc4NCwgNjYzNjUsIDAsIDQyMjM0LCAxMjY0OCwgNzgxMTAsIDcxMjMsIDcwMDM4LCA1Nzg1LCA5MTk4LCA5NzY0LCAKKyAgICA0MTMxNiwgNjU4NzcsIDczODMsIDEzMjMwLCA0MTI5OSwgMCwgMCwgNjgzNjUsIDEyODI1OCwgMCwgMCwgMCwgMTMxMjIsIDAsIAorICAgIDE5MSwgNzAwNjAsIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCAKKyAgICA0MTU3NywgMCwgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgCisgICAgMTI5MDEsIDQzMDU4LCAwLCAzNDMsIDcxMjksIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIDQ3NDMsIDAsIDAsIDc0MDQwLCAKKyAgICA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCA3MTM0OSwgMCwgMzk2NCwgNjU5MiwgMCwgCisgICAgMTI4NjkzLCA2NjA0MCwgMCwgNDI1NjgsIDY5ODA2LCAxMjgxMTMsIDE3NzgsIDM5NTYsIDAsIDQyMDcwLCA2NTYzLCAKKyAgICA0MzA3NSwgOTAxOCwgOTQwMDYsIDk4MzM5NiwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCA3NDUzMSwgMTI3OTY5LCAwLCAKKyAgICA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkyNzAzLCAxMTg4MjIsIDE3NTAsIAorICAgIDAsIDQzOTQsIDY4MzY4LCAxODA3LCA5ODM4ODgsIDkyMjk4LCAwLCA1ODg5LCAwLCA3MTgwLCAwLCAxMTkxNDUsIDAsIAorICAgIDkxNzU1OCwgNDI0NzEsIDY5ODIsIDE3MjEsIDQ0MDIyLCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIDQ1MTIsIDExOTM2MCwgCisgICAgNjUyMzAsIDEyODEwOSwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDkyNDE2LCAzOTc1LCAwLCAKKyAgICA3NDA4NywgMCwgMTI2NzIsIDM3OTgsIDI3MDMsIDk4MzU5OSwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgNDEwOTUsIAorICAgIDM5NjIsIDAsIDI5MzIsIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIDAsIDAsIAorICAgIDQxODUxLCAxMjgyMzAsIDQxODQ2LCAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAKICAgICAxMjgwMzIsIDAsIDQyNTMxLCAxMTkxMDgsIDE1MTAsIDAsIDgyNTYsIDAsIDExMzkzLCAwLCA4ODc5LCAxMjgwNzUsIAogICAgIDkyNDc0LCA4NzcwLCAwLCAwLCA3ODM3NywgMTkxMCwgODY3MSwgNzgzNzQsIDQyODMsIDAsIDEyNzExNywgNjgzNjEsIAogICAgIDc4MzE4LCAyNjU0LCA3ODkzLCAxOTUwMDcsIDAsIDAsIDAsIDY1MTA2LCA0Mjc2MSwgMTI4NTcsIDQ1ODEsIDg0MTEsIApAQCAtMTkyMzYsMjggKzE5MjU2LDI4IEBACiAgICAgOTE3NjE5LCAwLCAwLCAxMDA0MywgMCwgMTE4NiwgNDE1NzEsIDY5OTksIDYxNywgOTQ2NCwgMTI2NjQyLCAzNjc1LCA1MjA3LCAKICAgICA2NTA2MiwgNTIxMywgMTk0NzY5LCAyNjE3LCA0MTM0OCwgNDE1NjgsIDEyODgwMywgMzI1MywgMTIwNTM1LCAwLCA4NjMwLCAKICAgICAxMjg1NDQsIDAsIDU1OTYsIDU1NDUsIDcyODgsIDI1ODYsIDY0ODg3LCAwLCA1MjE3LCA3MTMzNiwgMCwgMCwgMCwgNjQyOTMsIAotICAgIDY4MDk4LCAyNjM1LCAwLCAwLCA5ODM4MzcsIDAsIDk4MzYzMiwgNzgzNSwgNzAwNDAsIDAsIDE5NDk4OCwgOTIyODUsIAorICAgIDY4MDk4LCAyNjM1LCAwLCAwLCA5ODM4NDYsIDAsIDk4MzY0MSwgNzgzNSwgNzAwNDAsIDAsIDE5NDk4OCwgOTIyODUsIAogICAgIDY0NTU4LCAxMjcxMjIsIDAsIDEyNzEyMSwgMCwgMTI3OTEzLCAwLCA1Nzg0LCA5ODMxMDIsIDAsIDAsIDcwMDMzLCA0MDExLCAKLSAgICA5MTc2MTYsIDY4MTAxLCAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgOTgzNDg4LCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCAKKyAgICA5MTc2MTYsIDY4MTAxLCAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgOTgzNDk2LCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCAKICAgICA1NTk4LCAxMjA3LCAxMjA1MjEsIDY2Njg5LCAzNTAxLCA0MjU4MiwgNDM2MDAsIDE5NDc4MCwgMCwgMTEyNCwgNTU5NywgCi0gICAgMTk0Nzc4LCAxOTQ3NzIsIDkzMjEsIDk4MzQ3NiwgOTgzNDczLCA5ODM0NzQsIDAsIDE3MTksIDY4MzU2LCA2ODM1NCwgCi0gICAgOTY3MSwgMTEyNSwgNDM5OSwgMTI3NDc5LCA5MTc2MTAsIDk4MzQ4MCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCAKKyAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDg0LCA5ODM0ODEsIDk4MzQ4MiwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKKyAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDg4LCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAogICAgIDU0OTEsIDAsIDg5MzcsIDQzMDQ0LCAyNjA0LCA3NDE4NywgNTQ5MCwgNDMwNDYsIDU0ODksIDcyMTIsIDExNzY4LCA0MzA0MywgCiAgICAgNjMwMCwgMCwgNzEyMiwgMCwgNDM5MCwgNDU0LCA0MTM5NywgMCwgOTg3NSwgNzU5MywgMTk0NzkxLCA5MjI3NCwgMTE4OTEzLCAKICAgICA3MjA3LCAwLCA2NTkwMSwgMjM5NCwgMjU3NSwgMCwgMzc0NiwgMTEwMTYsIDY1NzUyLCAxMjAwMzcsIDAsIDQzNDIzLCAKICAgICAxMjg2ODMsIDExOTg5LCAwLCAwLCAwLCAwLCAwLCA4MjQ5LCAxMjgxNzIsIDAsIDc4NTMxLCA2NjQwLCA3NDgwNiwgMjU5OCwgCi0gICAgNTEzLCAwLCA2NTg2LCA4NjU2LCAwLCAxMjA3MTAsIDY1MDA4LCAwLCAxOTQ3ODQsIDE5NDk4OSwgMTk0Nzk1LCA5ODM0NjUsIAotICAgIDkyNTE1LCA2ODQ3NSwgOTM5NzMsIDAsIDAsIDc4NjM3LCAxMjY0NywgMCwgMTI4MDQzLCA2OTg5MywgMTAzNiwgOTgzNDY5LCAKLSAgICA5MjQxOSwgMTcyMywgMTI4MDU2LCA3NDIxNywgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgOTgzNDYxLCAKLSAgICA3NDQ4NiwgOTgzNDU5LCA3NDAsIDExOTIyMiwgMTk0OTc4LCAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA2ODQzNywgCisgICAgNTEzLCAwLCA2NTg2LCA4NjU2LCAwLCAxMjA3MTAsIDY1MDA4LCAwLCAxOTQ3ODQsIDE5NDk4OSwgMTk0Nzk1LCA5ODM0NzMsIAorICAgIDkyNTE1LCA2ODQ3NSwgOTM5NzMsIDAsIDAsIDc4NjM3LCAxMjY0NywgMCwgMTI4MDQzLCA2OTg5MywgMTAzNiwgOTgzNDc3LCAKKyAgICA5MjQxOSwgMTcyMywgMTI4MDU2LCA3NDIxNywgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgOTgzNDY5LCAKKyAgICA3NDQ4NiwgOTgzNDY3LCA3NDAsIDExOTIyMiwgMTk0OTc4LCAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA2ODQzNywgCiAgICAgNzgxNDAsIDc4MTM5LCAxOTQ5ODUsIDgxMjEsIDEwNDM4LCA3NDQ4NywgNDI1NzQsIDEzMjg1LCA1NTI2MywgMTE5MDcsIAogICAgIDE5NTAwMCwgNTY5MCwgOTIyNTUsIDkzOTkyLCAwLCA0MzE4MSwgMTMwOTUsIDAsIDEyNzg1NywgNjQ0OTgsIDAsIDk1MDYsIAogICAgIDY5NzgsIDE5NDk5MywgNzc5OTIsIDAsIDAsIDE5NDk5MiwgMCwgMTI3ODQ1LCAxMTIyLCAzMTcsIDAsIDAsIDAsIDAsIAogICAgIDE5MjAsIDAsIDEwMTczLCA4MjcsIDAsIDAsIDc4Mzc4LCAxMjAxMjYsIDUyMjMsIDEzMDQsIDAsIDExOTU2NCwgNTIyNiwgCiAgICAgMTI2MDIsIDk0MDQ0LCAwLCA5MzI5LCA3NzU4LCA5MjM5LCA0MTE3MywgNTIyNCwgNTQ4NywgMTIyMiwgNTY5MiwgNDE3MjUsIAogICAgIDY5MjI5LCA5Njc0LCA1Njk1LCA0MTcxMSwgNjQ2MjcsIDE5OTA5LCAwLCA3NDYwNCwgNTY5MSwgMjg3LCA4NjYsIDIzMywgCi0gICAgMTI3NDkwLCA5ODM0MzMsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAotICAgIDQxMTc1LCA5ODM0NDAsIDk4MzQzNywgOTgzNDM4LCA1Mjk2LCA5ODM0MzYsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAorICAgIDEyNzQ5MCwgOTgzNDQxLCA0MjgxNiwgOTQwMzYsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCAKKyAgICA0MTE3NSwgOTgzNDQ4LCA5ODM0NDUsIDk4MzQ0NiwgNTI5NiwgOTgzNDQ0LCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAKICAgICAwLCAwLCA2NTE2LCA2NTE1LCA2NTE0LCA2NTEzLCA2NTEyLCAwLCA3ODU2LCA4NjkwLCAwLCAwLCAxMjEyMiwgMTE5NjAyLCAKICAgICA0Mzk3NiwgMCwgMTc4NSwgNjk5MjUsIDY4NjIyLCA2NTE1MywgMTk0ODEwLCA1MTM4LCAwLCAwLCAxMTg4NjksIDAsIDQ1NDAsIAogICAgIDQxMTgxLCAwLCA2MjAwLCAwLCA1MTM0LCAwLCAzMjIsIDQ2NDMsIDUxMzIsIDAsIDYzODksIDEyODUzMywgNTE0MywgMCwgCkBAIC0xOTI2NSw3ICsxOTI4NSw3IEBACiAgICAgMTI3MDEyLCAxMDI3MCwgMTAyODYsIDEwMzE4LCAxMDM4MiwgNDM1MjksIDY2NDc3LCAwLCAwLCA3NDE3MCwgMCwgMzIzNCwgCiAgICAgMCwgMCwgNzQzNzYsIDQzMTM5LCAxMTg4MTUsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCAwLCA3NDQ4OSwgOTY5NSwgMTIwNzQ2LCAKICAgICA1MjAxLCAwLCA2MjE1LCAxMjcxNCwgNjIxNCwgMTMxMDEsIDAsIDE5NDk5OSwgNjUyNjgsIDAsIDAsIDAsIDExMDI3LCAwLCAKLSAgICAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDk4MzY2MSwgMzIwLCAwLCAKKyAgICAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDk4MzY3MCwgMzIwLCAwLCAKICAgICA4NjQ3LCAwLCAzMDQ5LCAwLCA2NDcxLCA0MjA3MSwgNDMxNTYsIDk5MjUsIDEyNzM1NiwgMTI3MzU1LCA2NjQ3OCwgNDk2MCwgCiAgICAgNTU0OSwgMTI3MzU5LCAxMjczNDYsIDg0ODUsIDQ2NzEsIDU0MTgsIDEyNzM1MCwgMzM1MSwgMTI3MDA2LCAxMjczNTEsIAogICAgIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCA0Mjg2LCA1NDIxLCAxMjczNDQsIDk1NTQsIDAsIDk0MDQ4LCAxMjcxMDksIApAQCAtMTkyNzMsMTYgKzE5MjkzLDE2IEBACiAgICAgMTI2MDMsIDcxMzEsIDExNDMwLCA0NTY2LCA3NTE4LCA5MzE3LCAzODAxLCAxMDM0MiwgMTA0MDYsIDAsIDExOTI1OSwgCiAgICAgNDI1NzYsIDAsIDUyMDAsIDEyNjYxMSwgOTE3OTQ4LCAwLCA5MTgzLCAxMjczNjEsIDc0NDU4LCA3MzgyNSwgMzk1LCA1NDgyLCAKICAgICA1MTk4LCA0MzQ5LCAxMDM5MCwgNzQyMDIsIDUxOTYsIDQzMjI0LCA2MTEzLCA0MjAwOSwgNTIwNSwgMCwgNDMzMDcsIDAsIAotICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCAwLCAxMjAxNCwgMTAzNzcsIDgwOTMsIDkwNzksIAotICAgIDMyMDMsIDE5MiwgNjUxMDksIDMzODUsIDAsIDY0NDMwLCA1MzgzLCAxMDI5NCwgMTAzMjYsIDEyODE3OCwgNTczOCwgCi0gICAgOTgzMjEzLCAzMzM2LCA3ODM1NSwgNTM2MSwgMzYyMywgNDExNTksIDAsIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAxMjYwLCAKKyAgICAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIDQzNSwgOTgzNjI0LCAxMjAxNCwgMTAzNzcsIDgwOTMsIAorICAgIDkwNzksIDMyMDMsIDE5MiwgNjUxMDksIDMzODUsIDAsIDY0NDMwLCA1MzgzLCAxMDI5NCwgMTAzMjYsIDEyODE3OCwgNTczOCwgCisgICAgOTgzMjE1LCAzMzM2LCA3ODM1NSwgNTM2MSwgMzYyMywgNDExNTksIDAsIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAxMjYwLCAKICAgICAzMTQ5LCA1MzU5LCAxMjAxMzQsIDAsIDc5MTQsIDUzNTcsIDkyMTcwLCAxMjg2NTksIDI2MjQsIDUzNjQsIDAsIDExNDMxLCAKICAgICAxMjAwMzAsIDkxMDEsIDExMDU4LCA3ODI4OCwgMCwgNzgyOTMsIDQyMjcxLCA3ODI4OSwgNDI5MTcsIDEyMDc5MywgMCwgCiAgICAgNjU1NjYsIDY3MTcsIDEwNjE5LCA0MzM2MCwgNzgzODUsIDc4Mzg0LCAxMTgzMiwgNzgzODIsIDc4MzgxLCA3ODM4MCwgCiAgICAgNzgzNzksIDkzMTksIDcwOTcsIDExOTA1NSwgNzc5MDYsIDMyMzIsIDczODI0LCA3NDU4MSwgMTIwNjMyLCAwLCAwLCAKICAgICA0MTg4OSwgOTI0NTMsIDAsIDExNjEsIDQxODk1LCA3NDEwMywgOTcwMSwgODYyMiwgMCwgMCwgNzM4MTksIDEyMDU4OCwgCiAgICAgNTAxMiwgNzc5MTIsIDQxMzYyLCA2OTg2MiwgNzgyOTYsIDExOTIxLCAwLCAxMTc2OSwgMCwgNjg2MDksIDQxMzY0LCAwLCAKLSAgICA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCA0MTM2NiwgMCwgMzM1NiwgMCwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKKyAgICA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCA0MTM2NiwgMCwgMzM1NiwgMTE2MTEsIDkxNywgNjg0MjIsIDExOTkxNSwgNzEzNCwgCiAgICAgODE5OSwgNzgzODksIDExOTkxNywgNjc3LCAxMTk5MTYsIDAsIDExOTkzMiwgMTI3MTY5LCAwLCAwLCAwLCAzMzQ5LCAKICAgICA3NDEyNSwgNzAyMiwgODkyNywgNDczOSwgMCwgNTgwMiwgMCwgODYxNSwgMCwgMCwgNDkxLCAxMjg4MTksIDEwMTkwLCAKICAgICAxMjA2OTgsIDY1ODM3LCAxMjg4MjAsIDg0MjYsIDExMDkyLCA5ODkxLCAwLCA0MjQ5NywgNzExMywgNzU4NiwgNDIzMDUsIApAQCAtMTkzMTAsMzAgKzE5MzMwLDMwIEBACiAgICAgNTUyNTIsIDczOTcyLCAxNDQyLCAwLCA1ODk0LCA3MDA2OSwgMCwgNDExNzEsIDkyNTExLCA3NDMxMywgMCwgMTMxNjIsIDAsIAogICAgIDMzMzQsIDE5NTAxMCwgMTE4ODAzLCA3Nzg4MSwgNjYwMjIsIDAsIDAsIDE2NTEsIDEyODc3MSwgODg2MSwgMCwgMCwgMTE0MiwgCiAgICAgMCwgODI3MSwgMCwgOTgzMDU4LCAxMjY2NDUsIDEyOTAzLCAwLCA0MDAyLCA0MzYyNiwgMTA0NDIsIDEwNjc2LCAzMzQ0LCAwLCAKLSAgICAwLCAxMjkyMCwgMTk0NTYwLCAwLCAwLCA2NjY0MiwgMTI3NywgMCwgNzg3MSwgMCwgMCwgNzg4NTMsIDAsIDc4ODU0LCAKKyAgICAwLCAxMjkyMCwgMTk0NTYwLCAwLCAwLCA2NjY0MiwgMTI3NywgMCwgNzg3MSwgMCwgMTk0Njg2LCA3ODg1MywgMCwgNzg4NTQsIAogICAgIDEyMDM2MCwgMCwgMTE3ODQsIDAsIDc4MDEyLCA0NzAwLCA2NjM2NiwgNzg4NTgsIDEyMDM1OSwgMTEwMTIsIDAsIDc4ODU2LCAKICAgICA5MjQwMCwgNzc4NzksIDQ5NzMsIDg3ODQsIDc3ODc3LCA3NDgwNCwgNzc4NzQsIDc3ODY5LCA3Nzg3MSwgNDI0NDAsIDAsIAogICAgIDQzMTE4LCAwLCA0MjM2NCwgNjc3NCwgNjc3MywgOTE3NTYwLCAxMjAzNjksIDEwMzQ2LCAxMDQxMCwgNzg4NTksIDkyNDMsIAogICAgIDI0NjQsIDc0MjYzLCA2MTA4LCAzMzcyLCAwLCA2MjQ3LCA0MzExNywgNzQ1MjYsIDcxMjEsIDc0MTY2LCAwLCAxMjAzNTUsIAogICAgIDkyNTM3LCAwLCAwLCAxOTUwMzQsIDAsIDAsIDAsIDcwMDgzLCAzMzU0LCAxOTUwMzcsIDQxOTIsIDkyODksIDExODk5OSwgCiAgICAgNDExOTEsIDM4NzYsIDAsIDcwMDY3LCAxMjA2NjAsIDQzNjk2LCA0MzM4MCwgMCwgOTgzMDkxLCAwLCAwLCAxMTYwMywgCi0gICAgOTgzOTQ1LCAwLCA2NTg5LCAxMjg1ODgsIDE5NDY3OSwgMCwgMCwgOTgzNjkxLCAwLCAwLCA0MjU3MiwgMTI4MjY0LCAKKyAgICA5ODM5NTQsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM3MDAsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAogICAgIDEwNjMwLCA3NDgyNywgMTk2MywgMTE2MjIsIDEyNzA5OCwgMTE2NTQsIDAsIDc1NTAsIDEwNjg2LCA1OTAzLCAwLCA3ODAwOSwgCiAgICAgNDEzMjksIDk2NjIsIDkxNzkzNywgNjQ2OTgsIDMzNjYsIDEwMzk5LCAwLCA1NTQyLCAxMTAxMywgMTI3OTI3LCAxMjgzMDAsIAotICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY2NCwgNDMzNjcsIDY0NTc5LCAKKyAgICAwLCA3ODYyMSwgMTk0NjcyLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIDExNTY4LCA5ODM2NzMsIDQzMzY3LCA2NDU3OSwgCiAgICAgOTE3OTMwLCA3ODUyLCAwLCAwLCA2NzU0LCA2MzEyLCAwLCA2NDY3MiwgNjUyOTYsIDAsIDExODk1NywgMCwgNDE2LCAKICAgICAxMjI5NiwgNjg0NTcsIDczODM0LCA2ODE3NywgMTEwNTAsIDEwOTg0LCA5MjIwOCwgMCwgMCwgOTIxODIsIDAsIDk4MzYwNSwgCi0gICAgOTUzMiwgNjYzNTUsIDAsIDk4MzIyOCwgOTE3OTI1LCA2NDM0MywgMTk1MDMyLCAxMjgyODEsIDE5NTAzMSwgMCwgMTk1MDMwLCAKKyAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjM0LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAogICAgIDE5NTA1NywgMTE0NDUsIDAsIDIxMTIsIDE5NTA1NiwgMTI4ODE0LCAxMDE4NSwgMTAyMSwgMTI4MTMwLCA5NTA3LCAxMDIxMCwgCiAgICAgNzQ1NDQsIDgwMjMsIDEyMDAsIDEyMjQzLCA3ODAwMSwgNTI4MiwgNzgwMDMsIDk2MjQsIDExNTQ1LCAwLCAxMjA0OTMsIAogICAgIDMzNDMsIDQ0MjQsIDExMDQ3LCAxODg1LCA0MzI2OCwgMzg5NiwgNzg0NDQsIDY2NDk3LCAyOTQ3LCAzOTIsIDc4OTQsIAogICAgIDQzOTEsIDY4MTM5LCA5ODMwNjIsIDEzMDU5LCA3NDgxNiwgNzc5OTgsIDMzODEsIDc5NDIsIDAsIDY5MjE5LCAwLCA2NDc1NywgCiAgICAgMCwgMzkxMywgMCwgMCwgNzgyMzUsIDcwNDQsIDEyNjUsIDAsIDYzMDksIDcwNDUsIDcxNzUsIDcwNDcsIDc4MjM5LCAKLSAgICAxMTc5MSwgMCwgMCwgODIyMSwgNzgzMDcsIDQxODY0LCAwLCAwLCAwLCAwLCAxNjcsIDk4Mzg5NywgNzgzMDEsIDk4MzY0NCwgCi0gICAgNzQyMTEsIDQxODk3LCA2ODQ3NywgMCwgOTE3NTgzLCA5ODM2MjUsIDk0MDY1LCAyNDkzLCAwLCAxMTg4MTEsIDAsIDAsIAorICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzOTA2LCA3ODMwMSwgOTgzNjUzLCAKKyAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYzNCwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCiAgICAgNjQzNTQsIDAsIDg3NzcsIDAsIDQwNiwgODg4NCwgMjM4NSwgMCwgOTI0NTAsIDAsIDkxNzU3MywgNDMwMzAsIDQyMDI3LCAKICAgICAxMjExNCwgMCwgOTE3NTc5LCA2NDkzNiwgMTk0Njk1LCAwLCAxMjA2MjksIDEwNTYxLCAwLCA4MzY1LCAxMjA1MzksIAotICAgIDk4Mzc2NSwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKKyAgICA5ODM3NzQsIDY1ODQxLCAxMjA3ODcsIDExNjAxLCAwLCA3NDEyMSwgMCwgOTE3NTc1LCA3ODM0LCA3NDE1OSwgMCwgCiAgICAgOTE3NTc0LCAxMDI5OCwgNjYyNCwgNDkwOCwgOTE3NTk2LCAxNjM5LCAwLCAwLCA3NDE1NywgNjMyNywgNjcyNCwgMCwgCiAgICAgMTI4MDg2LCA5MjU2NiwgNjk5MTAsIDQ4MTcsIDc4NDQ2LCAxOTQ3NTksIDkyNTM2LCA3MDQzLCA5NjAwLCAxMTAyMiwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgNzU0OCwgNjQ3OTQsIDQyMDUwLCAxMjI5MSwgNTUyODksIDE5NDc2MSwgMTIzNDMsIDY1NywgCkBAIC0xOTM0MywxNCArMTkzNjMsMTQgQEAKICAgICA0MTQwNiwgNDMyNzMsIDc0MTYwLCAxMTk5ODMsIDczOTM5LCA5MjYzOCwgMTE5OTg0LCAxMTk5NzksIDQxNDA0LCAxMTY1LCAKICAgICAxMTk5ODAsIDQ0NTEsIDEzMDg3LCAwLCAxMTI4NCwgMTE5OTg3LCA3MDA5NywgNjUxNTUsIDQzMDE0LCA1NDM5LCA5MzYzLCAKICAgICA3MDA3MCwgMzM3NSwgMTI4ODY5LCA1OTAwLCA5Mzk5MCwgNzg4OSwgMjcyMiwgNDIyNjIsIDAsIDAsIDEyODc3NCwgMCwgCi0gICAgMjI4MiwgMCwgMTI3ODEwLCAxMTQwMSwgOTgzODEzLCAwLCA2ODQ1OSwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIAotICAgIDEyNzg4NywgMCwgMTI3MzgxLCA0ODY4LCAxMTk5NjcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIAotICAgIDAsIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCisgICAgMjI4MiwgMCwgMTI3ODEwLCAxMTQwMSwgOTgzODIyLCAwLCA2ODQ1OSwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIAorICAgIDEyNzg4NywgMCwgMTI3MzgxLCA0ODY4LCA4Mjk3LCAxMTk5NjYsIDExODc5OCwgMCwgMCwgNDMxNjEsIDAsIDkyMzYwLCAwLCAKKyAgICA1MTgyLCAwLCAxMjA1NDIsIDAsIDAsIDQyMjYsIDExOTI0MywgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDcxMzMwLCA5NzcsIAogICAgIDQ0NTgsIDAsIDAsIDY0NzcwLCA3NDgzOCwgMCwgMzQ0LCAwLCAxOTQ3OTAsIDEzOTUsIDY0Mjc5LCAwLCA5MjI0MCwgMCwgCiAgICAgNzg2LCAwLCA0MzE3NCwgNjQzNDAsIDAsIDE5NDc2NywgMTIwNzIzLCA0MzAyNiwgNzYxMiwgMTAxMzIsIDY0NDEzLCAKICAgICA2NTAyNSwgMCwgMCwgMCwgOTM5NTYsIDAsIDY4NDQ0LCAwLCA5MjQzNywgMCwgMTE5MTYwLCAxMDIwNCwgOTI2NTYsIDAsIAotICAgIDEyNzgwOSwgOTgzNjM1LCAxMzk5LCA5ODM2NDMsIDY1MjE3LCAwLCA4ODUyLCAxMjg1NzEsIDI0MSwgMTI4NzgwLCA0OTA3LCAKLSAgICAwLCA5ODM2MzAsIDc5MzIsIDk3MjcsIDEyODg3MywgNzQyNTUsIDg3NDgsIDAsIDAsIDk4MzYzNCwgMCwgNDI3ODAsIDAsIDAsIAorICAgIDEyNzgwOSwgOTgzNjQ0LCAxMzk5LCA5ODM2NTIsIDY1MjE3LCAwLCA4ODUyLCAxMjg1NzEsIDI0MSwgMTI4NzgwLCA0OTA3LCAKKyAgICAwLCA5ODM2MzksIDc5MzIsIDk3MjcsIDEyODg3MywgNzQyNTUsIDg3NDgsIDAsIDAsIDk4MzY0MywgMCwgNDI3ODAsIDAsIDAsIAogICAgIDAsIDQyMTcsIDAsIDg2NTAsIDAsIDAsIDAsIDY5OTAwLCAxMTg4NzIsIDQzMDk5LCAzOTY1LCAxMTkxMTksIDY3MTksIDAsIAogICAgIDEzMzAwLCA3ODQzOSwgOTM5NzEsIDQzMDU3LCA2NjU4OCwgMTE4OTkxLCAwLCAwLCA3MzgxNSwgNDQyMCwgMCwgNjQxMCwgCiAgICAgNzc2MCwgMCwgMCwgMCwgMCwgMCwgNzI5NCwgMCwgMCwgMCwgOTA2NiwgMCwgMTE5OTMsIDQzMTg4LCAyNjI2LCA3NzYyLCAwLCAKQEAgLTE5MzU4LDQ1ICsxOTM3OCw0NSBAQAogICAgIDY2NDU0LCA5NTkyLCA0Mjg1MSwgMTI2OTkzLCAxNTQyLCA5MjMwMywgMCwgMCwgMCwgMCwgNzQzMTEsIDc4NDk3LCAwLCAKICAgICAxMDE4MSwgMCwgNDM2MjQsIDAsIDc3NzksIDAsIDEwMTk1LCA5NDc5LCA2MDI5LCAwLCA5MjI2OCwgOTY4OSwgMCwgNjU1NzcsIAogICAgIDg5OTMsIDY2MzU4LCAwLCA0MjM3OCwgMzM2OCwgNjA2LCAxMjcwMzAsIDc2OTcsIDY5MjM3LCA2OTc4NywgMjAzMCwgMCwgCi0gICAgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDk4MzMzMSwgOTgzMzMwLCA5ODMzMjksIDk4MzMyOCwgMjczNSwgCisgICAgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDk4MzMzOSwgOTgzMzM4LCA5ODMzMzcsIDk4MzMzNiwgMjczNSwgCiAgICAgNDI4MzEsIDc3OTM1LCAxMjcxMjAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgCi0gICAgOTgzOTE5LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKLSAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzQ5LCA2NzU4LCAKLSAgICA5ODM5MTcsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjAsIDcwMTAwLCAKLSAgICA5ODMzMTgsIDcyNjAsIDk4MzMxNiwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAorICAgIDk4MzkyOCwgOTU3NiwgMTI4ODcyLCAzMzQ3LCA0MTYwLCA1MTU0LCA1NTI4OCwgMzc5NCwgNjY1NjQsIDg1MzAsIDEyNzA2MywgCisgICAgNzcwOSwgNDExMTIsIDk4MzEzMiwgNjY1NjAsIDQyMDQxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDk4Mzc1OCwgNjc1OCwgCisgICAgOTgzOTI2LCAxNjE1LCA1ODU1LCA4MDksIDAsIDkyMjgzLCAxMjgzMTYsIDEyODAwNCwgNTc5OSwgOTgzMzI4LCA3MDEwMCwgCisgICAgOTgzMzI2LCA3MjYwLCA5ODMzMjQsIDQzMDMxLCA2NDQyNSwgNjUxMjgsIDc4ODE5LCA2NDM4NiwgNjUyNTcsIDAsIDY4NjE2LCAKICAgICAxMjA2MDcsIDkzNDcsIDEyODA2NywgNjUzMiwgMCwgMCwgMCwgMTI3MDYwLCA2NTgyOCwgMCwgMjgzLCA2ODY2NSwgNzg4MTMsIAotICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc4NywgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAotICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTA4LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxMCwgNDMzNDQsIDk4MzMwOCwgCi0gICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMwMywgOTgzMzAyLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKKyAgICA1MzIsIDc4NjYzLCAwLCA5ODM3OTYsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDc4Nzc4LCA4MTUzLCAKKyAgICA3Mzc2NywgMCwgMTA3NDEsIDAsIDIyOTgsIDAsIDk4MzkxNywgNjU0OTUsIDY0NzA2LCA5ODMzMTgsIDQzMzQ0LCA5ODMzMTYsIAorICAgIDcxNDQsIDk0NjYsIDc4ODY2LCA5ODI0LCA5ODMzMTEsIDk4MzMxMCwgMCwgMCwgOTE1LCA0MzQyNSwgMCwgMCwgMCwgMCwgCiAgICAgMTI3MTc4LCA0MzI2NCwgNzAwOTYsIDAsIDAsIDQzMDM4LCA3ODg2NCwgNjczMCwgNzg4NjIsIDY4MTYxLCA2NDU1MCwgCiAgICAgNTE4NiwgNzM2MCwgMTI3ODM3LCAwLCAxMjEwOCwgMCwgNjUxMjQsIDQzMTI3LCA2NjA0MywgMCwgNjMyNiwgNDMxMDcsIAotICAgIDc3ODI2LCAwLCA0MjU2MiwgMCwgMTI4ODIxLCAwLCAxMjg1MjAsIDExNDg1LCA2MTAzLCAxMjcxMjMsIDk4MzI5NywgCi0gICAgMTE3MTgsIDk4MzI5NSwgMTI4ODksIDkyNjU3LCAxMjcxMzcsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAxMjgyMzIsIAorICAgIDc3ODI2LCAwLCA0MjU2MiwgMCwgMTI4ODIxLCAwLCAxMjg1MjAsIDExNDg1LCA2MTAzLCAxMjcxMjMsIDk4MzMwNSwgCisgICAgMTE3MTgsIDk4MzMwMywgMTI4ODksIDkyNjU3LCAxMjcxMzcsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAxMjgyMzIsIAogICAgIDY1NDgzLCAwLCAxMjU2NSwgMCwgNjU0NzYsIDEyMDAxMywgMCwgMTE5NTU0LCA5MjgzLCA3NzAwLCA5MTc1MzcsIDk2OTAsIAogICAgIDY1NDk5LCAwLCA2NDU5MywgNTEyLCAzMzc2LCA2ODIxMCwgMCwgMTI4Njc3LCA3Nzg5MiwgNjMyLCAxMjk0MCwgNzc4OTEsIAotICAgIDQyNTI5LCA3ODU4NywgMCwgNTk1NywgMTEwNTkzLCA4OTI2LCA5ODMyOTEsIDk4MzI5MCwgMTI4MjczLCAxMDc0NSwgCisgICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5OSwgOTgzMjk4LCAxMjgyNzMsIDEwNzQ1LCAKICAgICAxMDE3NCwgNzM3OSwgNjQ1ODEsIDUzODYsIDEyMDY4NiwgMTE3MTMsIDEwNjMzLCA2OTcwOCwgNTA1NiwgMCwgMCwgMCwgCiAgICAgMTIwNzczLCAwLCA5ODEyLCAwLCA0NDYwLCAwLCAwLCA3MTMwNywgMTI4MDM4LCAwLCAwLCAxMjcxNzQsIDY0Mjc4LCAKICAgICA5MjM3MCwgNDM0NjYsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgMTI4MzUsIDExOTAyOSwgMCwgNzM4MjMsIDAsIAotICAgIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgOTgzMjc4LCA5ODMyNzcsIAotICAgIDEyODU3MCwgMTIxMDYsIDk4MzI3NCwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIAorICAgIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgOTgzMjg2LCA5ODMyODUsIAorICAgIDEyODU3MCwgMTIxMDYsIDk4MzI4MiwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIAogICAgIDk1MjIsIDc0MDc5LCA3ODI2NiwgNjY2MDQsIDAsIDMzODQsIDY5MjI3LCAxMDcwMiwgODMwLCA3NzkwMiwgNzc4OTksIAogICAgIDc3OTAwLCA4NDUxLCAwLCAwLCAwLCA2OTczOSwgMCwgMCwgMCwgMCwgMjkwOCwgMCwgNDMzODYsIDY0OTAyLCA0MjQzLCAwLCAKLSAgICAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgOTgzMjcxLCA3Mzk0MCwgNjQzNTIsIDEyNzUxMywgOTgzMjY3LCA0MTEsIDk4MzI2NSwgCi0gICAgOTE5OSwgOTgzMjYzLCA0MDU2LCAxMTg5OTIsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgOTgzOTI4LCA1NDI4LCAxOTQ3NDMsIAorICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzksIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNzUsIDQxMSwgOTgzMjczLCAKKyAgICA5MTk5LCA5ODMyNzEsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MzcsIDU0MjgsIDE5NDc0MywgCiAgICAgMzM2NCwgNDIyNjUsIDY0NDM3LCAxMjc5MzUsIDExODgxNiwgMTk0NzQyLCA5Njg0LCAyMTYsIDAsIDE0MDEsIDEyODA1MywgCiAgICAgNDQwMTIsIDAsIDAsIDkyNTg1LCA5MTU4LCA3Nzg0MiwgNjk5MDUsIDU3NjgsIDAsIDAsIDAsIDQ4NCwgMTk0NzM5LCAwLCAwLCAKLSAgICA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDk4MzI1NSwgOTM5NjIsIDI3OTQsIAorICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjYzLCA5Mzk2MiwgMjc5NCwgCiAgICAgODgwNywgNjQ0OTEsIDc3ODQ3LCA1NDM4LCA1MjIyLCA1MzgxLCA0MzExNCwgMCwgNTE5MywgNTEyNSwgNTQ1NiwgNTUwOSwgCiAgICAgNzc4NDYsIDE5NDc0NywgOTUzNCwgMCwgMCwgMCwgMzQzMCwgMCwgMCwgNzg3MTcsIDAsIDk4MSwgMCwgNDMzMCwgNzM5MjksIAogICAgIDEyMDUzNiwgMTgyNCwgMTA5MDgsIDAsIDcwMzQsIDQxNjgzLCA2NDYxNywgMCwgNzM3NTQsIDM5NTcsIDY0MzU4LCA2NDU0NywgCi0gICAgMTI4MjU5LCA2NzQsIDYzOTkxLCA5ODMyNDMsIDI5NDYsIDUzNTQsIDUyNTEsIDUzMjgsIDUzMDcsIDM3NTksIDExNDExLCAKKyAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0OSwgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAogICAgIDgzNjQsIDUxMjMsIDExOTYyOCwgNTI4MSwgNTQ2OSwgNTEyMSwgMTE5MjQ1LCAxMTg5OTMsIDAsIDUxMzAsIDAsIDAsIAogICAgIDc3OTkwLCAwLCAxMjA3MjYsIDEyMjEsIDI3MzMsIDExNzQ2LCA3Nzk5MSwgNTIxNiwgMCwgMCwgMCwgMCwgMzQ2OCwgNzAzMywgCiAgICAgOTIzMCwgNTkzOSwgMTk1MDUyLCAwLCAwLCAxMjA2NzcsIDY4NDAwLCA3Mjc4LCAxMDMyMSwgMTAyODksIDY0NjEzLCAKLSAgICAxMDM4NSwgNDE3MDYsIDAsIDAsIDk4MzQwNSwgMCwgMTE3MzksIDk4MzQxOCwgNDE5ODEsIDAsIDU5MzgsIDAsIDQzNzY2LCAKKyAgICAxMDM4NSwgNDE3MDYsIDAsIDAsIDk4MzQxMywgMCwgMTE3MzksIDk4MzQyNiwgNDE5ODEsIDAsIDU5MzgsIDAsIDQzNzY2LCAKICAgICAxMjQ0OCwgNzU3NiwgMTA0MDEsIDEwMzM3LCA3Mzg1MiwgMCwgMTMwNTcsIDAsIDEyNjk3NiwgMCwgMTAwMDksIDAsIAotICAgIDQxNzAzLCA5ODM2MjksIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKKyAgICA0MTcwMywgOTgzNjM4LCAxMjE2NSwgMCwgMCwgOTg4NSwgMCwgODA3NywgMCwgMTI3OTA4LCAwLCAwLCAwLCA5MjQ1NywgMCwgCiAgICAgNDIyMCwgMTA3MjUsIDEwNDMzLCAwLCA2ODM5NSwgNDk4NywgNjQ1MTksIDAsIDEyODM0MCwgMCwgMCwgMCwgMTA5NzAsIAogICAgIDExNzMzLCAwLCAxMjA3OTIsIDAsIDE5OTQ0LCAwLCA5MDA5LCA4NTUxLCA5MjM0NSwgMTE0NjgsIDY0NjM2LCA3NTc1LCAwLCAKICAgICAyNzI0LCAwLCAwLCAxMjMxMywgMTEwNTkyLCA1MTUsIDExOTk0NywgNDI3OTEsIDYzOTg3LCA3ODI4NiwgMTE5OTQzLCAKQEAgLTE5NDA2LDczICsxOTQyNiw3MyBAQAogICAgIDAsIDQ0NzcsIDExODk2NCwgODE0LCA0MjA2NiwgNjYxODMsIDY2MjA0LCA0Mzc4NiwgMTE5OTYxLCA2NjE5OCwgNDE4ODAsIAogICAgIDY2MTg4LCAxMTYyMywgNzgxNDgsIDExOTU1LCA2NjE5MCwgNjYxOTEsIDQxMTExLCA2NjE4OSwgNzM3ODgsIDc3ODgsIAogICAgIDQ4NDcsIDAsIDEyNzc1OSwgMCwgMCwgMCwgMTU4MSwgNjUzNSwgNzgxNjEsIDEyOTU0LCA0MzAsIDc4MTYwLCA1NTI1OSwgCi0gICAgNzgxNTgsIDEyODAzNiwgNTI3OCwgNDk0NSwgNDI4ODMsIDQ5NTAsIDk4MzQzMCwgNjg2MjUsIDk4MzQyOCwgNzI2OSwgMCwgCi0gICAgNTk2NCwgMTI5MDgsIDk4MzU1NSwgMCwgNzQ3NjQsIDc0NDc3LCAxMTkxNDYsIDE5NDkzNiwgNDk0OSwgOTgzNDIxLCA0NDMsIAotICAgIDk4MzQxOSwgNDk0NCwgNTQ2NywgMTE5NjAzLCAwLCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIDQxMzAzLCAwLCAKLSAgICAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCA0MTMwNCwgCi0gICAgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIDExOTgyMCwgCi0gICAgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgMTE5ODMyLCAKLSAgICA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIDc4MTcwLCAKLSAgICA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIDEyNzAyNCwgCi0gICAgMTg1NSwgOTgzNDA0LCA2ODY2OSwgOTgzNDAyLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgMjc0NSwgCi0gICAgMTE3OTcsIDk4MzQxMCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MDYsIDk4MzQwOCwgNjg2MzgsIDczOTkzLCAxMDUyNSwgCi0gICAgNDY0OSwgNjUyMDksIDk4MzQwOSwgMCwgNDY0OCwgNDMwODAsIDk4MzM5OCwgOTgzMzk5LCA5ODMzOTYsIDYyNDYsIDY0OTUwLCAKLSAgICA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCA4NjY5LCAKLSAgICA5ODM0MDcsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTEsIDAsIDY4MzY5LCAxMjAwNTQsIAotICAgIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgNzgwMzIsIAotICAgIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgNzgxMSwgCi0gICAgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIDk4MzQwMywgCi0gICAgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAzMDU0LCAKLSAgICAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM4NywgOTQwNzAsIDk4MzM4NSwgOTgzMzg2LCAKLSAgICA5ODMzODMsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgNzg4ODMsIAotICAgIDk4MzM3OCwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM3MiwgNTk1OCwgMCwgOTgzNDI1LCA0MjE1LCAKLSAgICA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4MSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIDUzNjYsIAotICAgIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDEsIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzM5MiwgMCwgNDYzOCwgOTgzMzk3LCAKLSAgICAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAxOTQ5NjYsIAotICAgIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgNDIwOTQsIAotICAgIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIDEyNjgsIAotICAgIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgNDc1OCwgCi0gICAgOTgzMzY2LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKLSAgICA3NDM4NCwgOTgzMzcwLCA2ODM3NywgNjI0OCwgOTgzMzU0LCA5ODMzNTUsIDk4MzM1MiwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKKyAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDM4LCA2ODYyNSwgOTgzNDM2LCA3MjY5LCAwLCAKKyAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjksIDQ0MywgCisgICAgOTgzNDI3LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDk4MzI1NCwgNjUxMzcsIDYwNDQsIDY1MzkyLCAwLCA0MjEzLCAwLCAKKyAgICA0MTMwMywgMCwgMTk0OTMxLCAxMTk5NjIsIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMTI3MTU5LCAwLCAxMjA3MiwgMzE5MywgMCwgCisgICAgNDEzMDQsIDgyNCwgMTI4Njc2LCAxMjA5MSwgNzg4OTMsIDc4ODk0LCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAKKyAgICAxMTk4MjAsIDExOTgxOSwgNjUwNTksIDAsIDY3MzksIDAsIDU0ODEsIDM0OTAsIDExOTksIDExOTgxMSwgODM1NiwgNjk5NDcsIAorICAgIDExOTgzMiwgNDY3NywgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCAKKyAgICA3ODE3MCwgNzgxNjYsIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAxMTk5NDksIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAKKyAgICAxMjcwMjQsIDE4NTUsIDk4MzQxMiwgNjg2NjksIDk4MzQxMCwgOTI0NDUsIDEyNzU1NCwgMCwgMTI3MzM5LCAxMTk2NTIsIAorICAgIDI3NDUsIDExNzk3LCA5ODM0MTgsIDEyODE1OSwgOTIwMiwgNDY1NCwgOTgzNDE0LCA5ODM0MTYsIDY4NjM4LCA3Mzk5MywgCisgICAgMTA1MjUsIDQ2NDksIDY1MjA5LCA5ODM0MTcsIDAsIDQ2NDgsIDQzMDgwLCA5ODM0MDYsIDk4MzQwNywgOTgzNDA0LCA2MjQ2LCAKKyAgICA2NDk1MCwgNzgyOCwgNDY1MCwgNjc3NywgNjc3NiwgNjc3NSwgNDY1MywgNzgyMiwgNzgwMDUsIDkyMzg0LCA0MzE4NywgCisgICAgODY2OSwgOTgzNDE1LCA2ODIxLCA2NTA5MywgMCwgNzg4ODEsIDI3MTYsIDAsIDk4MzA2MCwgOTgzNDE5LCAwLCA2ODM2OSwgCisgICAgMTIwMDU0LCAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDc4MDI3LCA3ODAyNiwgNzk5MiwgMCwgMCwgNDY2MiwgNzgwMzMsIAorICAgIDc4MDMyLCA5MTQ5LCA5MTQ2LCA1OTksIDIwODEsIDc4MDMxLCA3ODAzMCwgMTk0OTYyLCA0NjU2LCAxMDEzMCwgNjg0NTAsIAorICAgIDc4MTEsIDQwOTk0LCAxOTQ5NjUsIDY0MTQsIDU5NjcsIDQ2NTgsIDM3MjUsIDU3MTMsIDU4MTQsIDQ2NjEsIDQyNDM0LCAKKyAgICA5ODM0MTEsIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgNzQ4NjQsIDc1NDcsIDQ4NjcsIDAsIDEwMDA4LCAxMDIyMiwgCisgICAgMzA1NCwgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCA5ODMzOTUsIDk0MDcwLCA5ODMzOTMsIAorICAgIDk4MzM5NCwgOTgzMzkxLCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDc4ODg3LCAxMjg4MCwgNjUzMDcsIDQ2MTcsIAorICAgIDc4ODgzLCA5ODMzODYsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCA5ODMzODAsIDU5NTgsIDAsIDk4MzQzMywgCisgICAgNDIxNSwgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCA5ODMzODksIDQxMzEzLCA1MjIsIDUzNjgsIDAsIDY1ODAzLCAwLCAKKyAgICA1MzY2LCAxMjIwMSwgNTM3MiwgMCwgOTgzNDA5LCAwLCA3NzIwLCA3MzkwLCAyNjk2LCA5ODM0MDAsIDAsIDQ2MzgsIAorICAgIDk4MzQwNSwgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDEyNzgzMywgNTM3NiwgMTgzNSwgNTMzNSwgCisgICAgMTk0OTY2LCAxMjgwODksIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAxMjgwOTMsIDUzODcsIDUzMzMsIDAsIDAsIAorICAgIDQyMDk0LCA1MzMxLCA0NjM0LCAxMTkyOCwgOTgzNTk0LCA1MzM4LCA0NjM3LCAxMjgxNzAsIDU5NzEsIDQyNDE0LCAwLCAKKyAgICAxMjY4LCA2NTA5NywgNDIzNjEsIDAsIDAsIDczODUzLCAxNDI3LCAwLCAwLCA1OTcwLCAzNDMxLCAwLCAxMDM1OCwgMTA0MjIsIAorICAgIDQ3NTgsIDk4MzM3NCwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgCisgICAgNzQzODQsIDk4MzM3OCwgNjgzNzcsIDYyNDgsIDk4MzM2MiwgOTgzMzYzLCA5ODMzNjAsIDQyMzE4LCA5MjU4MiwgNTIyOSwgCiAgICAgNDc1NywgMCwgMCwgMjcyOCwgNDc1MiwgNjQ1NjMsIDY1MjM1LCA1MjM0LCAwLCAxMjgxNDUsIDAsIDEwNzEzLCA3MTY2LCAwLCAKICAgICAyNjIyLCA3NDYwLCAxMjczMDIsIDAsIDAsIDg5NTQsIDc0NzYwLCA2NTE4OSwgMjYzMiwgNDI2MTcsIDEwMTA4LCAxMDExLCAKICAgICA1NTc0LCAxODUzLCAyNzA5LCA2NTEzOSwgNTU3NywgMCwgMCwgMTE4ODcxLCA2ODY0MSwgODk2NSwgNzYzNSwgNDIxNzcsIAotICAgIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIDY2NDY0LCA1MzEyLCAwLCA1NTI1LCA1MzMwLCA1MzE5LCA5ODM0MTIsIAotICAgIDk4Mzg2MywgMTk0OTA3LCA0NDAwMywgMCwgOTgzNDcyLCA5ODM0MTUsIDEyMDQ5OCwgMTI3ODUxLCAxOTUwMDksIDk4Mzg1NiwgCi0gICAgNzQwMjIsIDk4MzQxNCwgNjQ2MDksIDY4NjQzLCAxMjA2MzQsIDk4MzQ4MSwgNTcyMSwgOTgzMzkzLCA1NTE5LCA4NjMyLCAKLSAgICA2NjQ2NSwgMTEyNjcsIDczOTYxLCA5MjI3OCwgNTcyMCwgOTgzMzQ0LCAxNjkyLCA0MjE5LCA0NjEwLCA4Njk2LCA0MzA1LCAKLSAgICAwLCA0NjA5LCA0MzQ3OCwgNDYxNCwgNTQxLCA5ODMzNDcsIDUyODcsIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCAKLSAgICA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDk4MzM0MSwgOTgzMzM4LCA3Nzg0OSwgNDYwOCwgNjQyNjAsIAorICAgIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIDY2NDY0LCA1MzEyLCAwLCA1NTI1LCA1MzMwLCA1MzE5LCA5ODM0MjAsIAorICAgIDk4Mzg3MiwgMTk0OTA3LCA0NDAwMywgMCwgOTgzNDgwLCA5ODM0MjMsIDEyMDQ5OCwgMTI3ODUxLCAxOTUwMDksIDk4Mzg2NSwgCisgICAgNzQwMjIsIDk4MzQyMiwgNjQ2MDksIDY4NjQzLCAxMjA2MzQsIDk4MzQ4OSwgNTcyMSwgOTgzNDAxLCA1NTE5LCA4NjMyLCAKKyAgICA2NjQ2NSwgMTEyNjcsIDczOTYxLCA5MjI3OCwgNTcyMCwgOTgzMzUyLCAxNjkyLCA0MjE5LCA0NjEwLCA4Njk2LCA0MzA1LCAKKyAgICAwLCA0NjA5LCA0MzQ3OCwgNDYxNCwgNTQxLCA5ODMzNTUsIDUyODcsIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCAKKyAgICA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDk4MzM0OSwgOTgzMzQ2LCA3Nzg0OSwgNDYwOCwgNjQyNjAsIAogICAgIDQxMTI0LCA1MTkwLCA2NzYyOCwgMCwgNjgxNDUsIDcwODYsIDAsIDY3OTk4LCA2NzYyMCwgMCwgMjczNCwgMTEwNzQsIDAsIAogICAgIDY3NjI3LCA0MzU5MywgMCwgNjc2MjUsIDU5NjAsIDAsIDg5OTIsIDQyNTkzLCAxMjgyNjAsIDE3ODIsIDY3NjIyLCA2ODExNCwgCiAgICAgMTE5OTM5LCAwLCA2ODE4MCwgNTUwMSwgMTE5OTUyLCA0MjUwOCwgNzQ0MiwgNDM2NjUsIDM1OSwgNDEyNTMsIDY4MzkyLCAKICAgICA2MjM5LCAxMTk5NTYsIDQxMjU2LCAwLCA2ODEzNCwgMCwgNzQyMDksIDkxNzU1MCwgOTM0NiwgNjk2NjAsIDQxMjU0LCAKICAgICAxMjgwNDcsIDQzMjkxLCAzNzY3LCA1NzM3LCAwLCA0ODY1LCAwLCA1NzQwLCA5MTc5OTcsIDU3MzYsIDQzNjgsIDY0NzI0LCAKLSAgICA3MTkzLCA2ODEzNywgMCwgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCA5ODM4MzEsIDQ4NjksIDEyMDU2MywgMCwgCi0gICAgNDIyMywgMTI4MjAxLCA2NjUwLCAxMjY1MDksIDAsIDk4MzQ1NSwgMTI3ODkwLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCAKKyAgICA3MTkzLCA2ODEzNywgMCwgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCA5ODM4NDAsIDQ4NjksIDEyMDU2MywgMCwgCisgICAgNDIyMywgMTI4MjAxLCA2NjUwLCAxMjY1MDksIDAsIDk4MzQ2MywgMTI3ODkwLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCAKICAgICA3ODE3NiwgNjg2NjcsIDY4MzgyLCA2ODY3NiwgMTI3OTI1LCAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDAsIAogICAgIDYyNDUsIDY4NjUyLCAyNzMyLCA0MjczNCwgNzQ1LCAwLCAxOTUwOTcsIDkyMTk1LCA0Nzc3LCA3ODIxLCAwLCA2ODYzMSwgCi0gICAgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgNTk2NiwgOTgzNDc4LCA0Nzc4LCAwLCAxMDg2MywgMCwgNDc4MSwgMCwgCisgICAgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgNTk2NiwgOTgzNDg2LCA0Nzc4LCAwLCAxMDg2MywgMCwgNDc4MSwgMCwgCiAgICAgNjQ0MDcsIDAsIDEyODMyMywgODU3NywgMTI4NTYyLCA2ODE5NiwgNDMyODUsIDEwMjE2LCA0NzgyLCAwLCAwLCAxMjA3NTcsIAogICAgIDY4NjE4LCAxMjMyNSwgNDMwNTYsIDg3MTcsIDAsIDAsIDQ3NzYsIDczODE4LCAxMTQ5MiwgODcwMCwgMCwgMTMxNzYsIAogICAgIDY4MzYzLCAxMDQyNiwgMCwgOTE3NTk5LCAxMDM2MiwgMTk0NzA2LCAxNzE1LCA0ODQ5LCA4MjQyLCA5NTYxLCA3MzkyMiwgCiAgICAgNDMyNzgsIDQyNjM1LCAwLCAwLCA1OTYzLCA5MTc5MjYsIDAsIDAsIDQ4NTAsIDAsIDE2MDcsIDQ2NiwgNDg1MywgMTE4OTk1LCAKLSAgICA0ODU0LCAxMjc5MTgsIDUxNjQsIDk4Mzg2MSwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIAorICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODcwLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCiAgICAgOTI0NzEsIDEyNDQ1LCAzNzg1LCAyMzQsIDMxOTksIDAsIDQxMjY4LCA0ODQ4LCAyNTMwLCA5MTc5MDksIDIwNjgsIDE5NjQsIAogICAgIDAsIDczNzYyLCAxMDQ1OCwgMCwgODU3NiwgNzg1NDMsIDAsIDI3MDQsIDQ3OTQsIDAsIDY4MjExLCA4MzIyLCA0Nzk3LCAKLSAgICA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDk4MzQxNiwgMzAzLCA5ODMxMDEsIDkyNjIyLCAKLSAgICA5ODM0MTcsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDkyMjE2LCAwLCAwLCAwLCA3MDA0MiwgMCwgNDMyOTIsIDAsIDI0NDEsIAorICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDI0LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAorICAgIDk4MzQyNSwgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCiAgICAgMTA3MzksIDY1MDkwLCAwLCAxMTkzMjcsIDEyNjU0MSwgMjQ1MSwgMjcxNCwgMTE5MzI2LCAwLCA0MzM3OSwgNDkzNywgCiAgICAgNDMzNzYsIDc1MywgNTg0OSwgMTA1OTcsIDQzMDg5LCAxMTcyMiwgOTI0OCwgOTI1NTUsIDQyODc5LCAxMTcyNSwgMCwgMCwgCiAgICAgMjcyNiwgMzEwNywgNzM5NTgsIDQ5NDEsIDY0OTM3LCAxMTkyMzMsIDkxNDAsIDE0MDgsIDUyNjEsIDQ2MDcsIDAsIDE4MSwgCi0gICAgOTgzNDIyLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAorICAgIDk4MzQzMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAKICAgICA5ODM2MDEsIDAsIDQ5NjQsIDUyNjQsIDY0MTc4LCA2NDE3NywgMTI5NzksIDQxNDExLCA2NDE4MiwgNjQxODEsIDY0MTgwLCAKICAgICA2NDE3OSwgOTQ4MiwgNDg3MywgNDEyMzEsIDE4MjIsIDQyNTI2LCAxMjg1ODEsIDEyNzU4LCAzODY1LCAwLCAwLCAxMDUwMCwgCiAgICAgMCwgMTE5MDI0LCA3ODAyOCwgOTI0MDgsIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCA3NTIxLCAxMjc4NzksIDQ4NzIsIAogICAgIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ2MDQsIDkxNzkzMSwgOTU1NywgNTQ2NSwgNjg2MTcsIDAsIAotICAgIDExNDk0LCAxMjY0OTIsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCA5ODM0MzEsIDc4NzE0LCA2NDE5MSwgCisgICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzOSwgNzg3MTQsIDY0MTkxLCAKICAgICA2NDE5MCwgODg5OCwgNjQxODgsIDAsIDQxMDMwLCA3ODgzNiwgMCwgOTE3ODM1LCA3ODgyMCwgOTE3ODM0LCAwLCA3ODgwNSwgCi0gICAgNDEwMzEsIDc4ODAxLCAxMTk2MCwgNjc0NSwgMzA4MiwgOTgzNDI5LCA3ODUzOSwgNzM5MTksIDEwNTczLCA0MTc0NCwgCisgICAgNDEwMzEsIDc4ODAxLCAxMTk2MCwgNjc0NSwgMzA4MiwgOTgzNDM3LCA3ODUzOSwgNzM5MTksIDEwNTczLCA0MTc0NCwgCiAgICAgNzA3OSwgNTg1NiwgMTI3MDQzLCA1MTYzLCA3ODgwOSwgMTI4MTYyLCAxODE3LCA2NjcyNCwgNzg1MzgsIDAsIDEwNTY0LCAKICAgICA3NzYzLCAxMzA3NywgNDE4MTMsIDQ0MDAsIDQxNzQ1LCA2NDIwNywgMTAyNzUsIDg5MjUsIDEwMzcxLCAxMDMwNywgNDE4MTQsIAogICAgIDQyNDgsIDAsIDAsIDQ1NDEsIDYyOTksIDY0MjA0LCA2NDIwMywgNjQyMDEsIDY0MjAwLCA2NDE5OSwgNjQxOTgsIDEyNjQ3MSwgCkBAIC0xOTQ4NSwzMyArMTk1MDUsMzMgQEAKICAgICA2NTIyMiwgNjk5OCwgNzgxODAsIDAsIDMxMjgsIDQ3ODksIDUwNjcsIDUwNjYsIDExODg0OSwgNDc4NCwgMCwgODgyNywgCiAgICAgMTE0NiwgNTA2NSwgNjk4OTAsIDc4MTkyLCA2ODEzNiwgNzgxOTAsIDQzNDEyLCA1MDY0LCAyNDMxLCAwLCA5NDUwLCAxODA5LCAKICAgICAwLCA3ODIwMCwgNzgyMDEsIDUwNjIsIDEyNjQsIDY0ODE3LCAxMzI1NCwgMTE2OTcsIDEyNjU5OCwgOTc4NSwgNjQ3MTYsIDAsIAotICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODY0LCAKKyAgICAzOTMzLCA3NDU1OSwgNDc0MCwgNzk1NCwgMCwgMCwgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDk4Mzg3MywgCiAgICAgNDIxMzAsIDAsIDUxNTEsIDkxNzgyOSwgOTE3ODIzLCAwLCA5Mzk4MCwgMCwgNzYyMCwgMzgwMCwgNjUxMjIsIDAsIDAsIAogICAgIDgzNTUsIDc4NTQsIDAsIDk1NCwgNjQ5MjcsIDQxODUsIDQxMDQ1LCAxMjcxNDEsIDQxNDM4LCA0MTQzOSwgNjg2NjYsIAotICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDAwLCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKKyAgICAxMDcxMSwgNDU5MywgMTI3NzQ1LCAxMjA1ODQsIDk4MzQwOCwgNjQ3NzQsIDgwNTMsIDEwNTMyLCA2NjcyNywgMCwgMCwgMCwgCiAgICAgNjQ3NTksIDYzODEsIDUxNjYsIDk4ODgsIDEyNzgwMCwgNTE0OCwgNDI4MzQsIDAsIDc4MjA1LCA3ODIwNiwgNDM3ODcsIAogICAgIDc4MjA0LCA2NDEzMSwgMzExOSwgOTE3ODE0LCAwLCAzMDYwLCA2NDEzNSwgOTk4NiwgMCwgNzc4NzYsIDYzNiwgMTE2OTgsIAotICAgIDAsIDk4MzQ0MywgOTkxNiwgMTE3MDEsIDc4MzYsIDQyNzQxLCA2NDEzNywgODMyMCwgNzg2NDAsIDg4NjMsIDkyNDMxLCAKLSAgICAxMTk5NjAsIDE0NzcsIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgOTgzMzk0LCA5OTA4LCA5ODM5NzIsIDAsIDAsIDM5MzcsIAotICAgIDEyMzEyLCAwLCA5ODMzOTUsIDAsIDY0NzgxLCA5MTIsIDYzNDksIDQ1MzYsIDkzOTU0LCA3NDUzMiwgMTI2NTk0LCA2MjQ0LCAKLSAgICA5MjIwOSwgNzEzNDEsIDM5MzUsIDEyMDY2NSwgOTgzNDY4LCAwLCAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCA2ODY1NiwgCisgICAgMCwgOTgzNDUxLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAorICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODM0MDIsIDk5MDgsIDk4Mzk4MSwgMCwgMCwgMzkzNywgCisgICAgMTIzMTIsIDAsIDk4MzQwMywgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAorICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NzYsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKICAgICA1Mzk3LCAwLCAxMjA0NiwgMTI1OTksIDAsIDEyODI2MSwgNTM5NSwgMCwgNTM5MywgMzU0LCA2ODYxNSwgMTE5OTQ4LCAKICAgICA3ODUwMywgMCwgMCwgNDIwMzksIDAsIDAsIDY0MTQyLCA2MjYsIDAsIDU4OTUsIDAsIDAsIDU3ODAsIDAsIDAsIDEyODg3NCwgCiAgICAgMCwgMCwgNDMyOTcsIDk4MzA3OSwgNDMxMSwgNDY0NCwgODgxOCwgMCwgMTI4MTg2LCAwLCA3MTQ1LCAzOTE4LCA2NjQ1MiwgCiAgICAgMzc5NywgMTY0NCwgOTIzNDYsIDk2NTgsIDQxNDAsIDExMzg1LCA2NTk0NywgNjQ1NSwgOTAzMCwgODEzLCAxMTk5NDUsIAogICAgIDY4MTMxLCA0MTQ2LCAxMTk5NTcsIDUzNjAsIDI0NjYsIDAsIDY3NjY5LCAxMTk5NDIsIDYyNDksIDQyMTE3LCA5MjI4NywgCi0gICAgMTI4MjI0LCAwLCAwLCA3NDA0NiwgNDM3NDUsIDQ5MTEsIDk4OCwgOTE3ODA3LCAwLCA5ODM0NjAsIDQzMDYxLCA3MDU0LCAKKyAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2OCwgNDMwNjEsIDcwNTQsIAogICAgIDY0MTQ3LCAwLCA2NDkyMCwgNjgxOTUsIDY2OTgsIDExODkzMywgOTI1MDYsIDAsIDEyMDAwNiwgMTE5ODEsIDEyMjAyLCAwLCAKICAgICAxMTAzMiwgNjc2NTQsIDYwOTMsIDExNjA4LCA5NzUsIDY4NjYyLCA2NTg0MywgMTcwLCAwLCAwLCA0MTY5LCAwLCA0MTg1OSwgCiAgICAgNjA1OCwgMTIwNDAxLCAxMzIwMywgMTIwNjU3LCAwLCAwLCA2ODY1NywgOTgxOCwgMTAxNzgsIDEwMzI0LCA0MjEwNiwgCiAgICAgNTg5OCwgNzQ1NDAsIDQ3MzgsIDQxODU2LCA3MDYyLCA5MTc4NjUsIDQ3MzcsIDExNzc5LCA0NzQyLCAxMjA1NjQsIDkyMzkxLCAKLSAgICA3MzczNiwgOTgzMzU2LCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCAKLSAgICA0MjEwOCwgOTgzMzQ2LCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgOTIxOTEsIDc4NDkxLCA0MzI4OCwgMCwgNjY2MjAsIAotICAgIDkxNzkxNiwgMTI3MzMxLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgOTgzMzU4LCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAKKyAgICA3MzczNiwgOTgzMzY0LCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCAKKyAgICA0MjEwOCwgOTgzMzU0LCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgOTIxOTEsIDc4NDkxLCA0MzI4OCwgMCwgNjY2MjAsIAorICAgIDkxNzkxNiwgMTI3MzMxLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgOTgzMzY2LCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAKICAgICAzOTI4LCA5MTc4NzAsIDQzMzc4LCAxMDcwNiwgNzE5OCwgMCwgNDg0MiwgMTIwNTMsIDEyODEyOSwgMCwgNDg0MSwgMCwgCiAgICAgNDE3MSwgMTIwMDgsIDYyNTEsIDM5MjMsIDE0OTAsIDAsIDExOTU5MSwgMTI2NTEyLCA0MDk3MiwgNTI0NSwgMCwgMTAxMTQsIAogICAgIDQyMDAxLCA0MTg4OCwgNDg0NSwgODMzMiwgNDA5NzQsIDY0MzQ3LCA0ODQwLCA5MDc3LCA3ODM0NiwgMTc0NywgOTE3ODQ5LCAKLSAgICA0ODI1LCA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgOTgzMzgwLCAwLCAwLCA2ODYyOCwgOTgzMzM5LCA5ODUwLCAxMTg5MzcsIAorICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODgsIDAsIDAsIDY4NjI4LCA5ODMzNDcsIDk4NTAsIDExODkzNywgCiAgICAgMzY3LCAxNDcyLCA5MTc4NTksIDY2ODcsIDEyNzQsIDAsIDU5MDUsIDEyMzM5LCA4OTE5LCA3Mzk1MywgMTA5MDcsIDY1MjYxLCAKICAgICAxMTAyMywgMTE5NTU5LCA0ODMwLCA5MTM0LCA3ODY2NiwgNjQxMjYsIDQzMDExLCAwLCAxMjY2MjYsIDY0MTAxLCAwLCAwLCAKICAgICA0ODI0LCAxMDYxNCwgMTE5NjU5LCAwLCAxODg4LCAxOTYwLCA3ODYxLCA5MTc4NTYsIDc4NTI0LCA0MTgzNiwgNDMwMTIsIApAQCAtMTk1MjAsMTIgKzE5NTQwLDEyIEBACiAgICAgNjQxMTgsIDEyNjk5OCwgMTI5NjIsIDAsIDEyNjU4MCwgNDAxNywgMTI4MjcsIDUyNDEsIDEyMDM5MiwgMCwgNDExMTgsIAogICAgIDM5MjQsIDAsIDExMzY2LCA5MTc4NDMsIDAsIDAsIDkxNzg0NiwgNDExMTYsIDkxNzg0NCwgOTE3NTY0LCAwLCAxMTM2MywgCiAgICAgMTIwNTcsIDExOTE3LCAxNTY3LCA3NDAwMCwgNDcyMSwgMTI2NjQxLCA2NjIwMiwgODk1NywgNDEzOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzc1LCA0NzI2LCAwLCAKLSAgICAxOTQ4OTIsIDAsIDEyODMyMSwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgMCwgCi0gICAgMTI4Mjk0LCA2NDIxMiwgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNDQwMDIsIDY0MjE0LCAxNjU2LCA0MTgzMSwgMCwgCi0gICAgMCwgNDE4NDMsIDg3MjAsIDM5MDgsIDE0NTIsIDEzMTExLCAwLCA2NDA2NywgMTI3MzI4LCA4NTUyLCA2NDExMywgNDE4NDUsIAotICAgIDM4NDksIDc4NzMyLCA2NjIzMiwgOTc3OCwgMTIwMDY2LCA1ODkxLCA3MDY0LCA1NSwgOTk0OCwgMTE5MDg1LCAwLCAwLCAKLSAgICA3OTM1LCAyNDIwLCAwLCAxMTE0LCA5MjU5OSwgNjc1ODUsIDcwMTA0LCAxMjAwNTMsIDkyMzUwLCAxMjAwNTEsIDM5MzgsIAorICAgIDAsIDEyNzQwLCAxMjg3MDIsIDQ3MjIsIDY4MTYsIDEyNzc5MywgMTI3NTksIDQ3MjUsIDk4MzM4MywgNDcyNiwgMCwgCisgICAgMTk0ODkyLCA5ODM2MjIsIDEyODMyMSwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgCisgICAgMCwgMTI4Mjk0LCA2NDIxMiwgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNDQwMDIsIDY0MjE0LCAxNjU2LCA0MTgzMSwgCisgICAgMCwgMCwgNDE4NDMsIDg3MjAsIDM5MDgsIDE0NTIsIDEzMTExLCAwLCA2NDA2NywgMTI3MzI4LCA4NTUyLCA2NDExMywgCisgICAgNDE4NDUsIDM4NDksIDc4NzMyLCA2NjIzMiwgOTc3OCwgMTIwMDY2LCA1ODkxLCA3MDY0LCA1NSwgOTk0OCwgMTE5MDg1LCAwLCAKKyAgICAwLCA3OTM1LCAyNDIwLCAwLCAxMTE0LCA5MjU5OSwgNjc1ODUsIDcwMTA0LCAxMjAwNTMsIDkyMzUwLCAxMjAwNTEsIDM5MzgsIAogICAgIDEyMDA1NywgNjU0MTcsIDY0NzE3LCAxMjAwNjAsIDEyMDA2MSwgNjU0MTUsIDEyMDA1OSwgNjI5MiwgNjUzMDMsIDc5NTUsIAogICAgIDY0NTIsIDQ3MTMsIDEyODE5NiwgNjYyNDksIDkxNzg4NSwgOTE3ODkwLCA5MTc4OTEsIDY1MTUyLCA3MTksIDEyMDA0NCwgCiAgICAgNzg2MjMsIDEyMDA0MiwgNjcxMywgNDUzMiwgNjU0MTIsIDY5ODIyLCAxMDg2OCwgNDcxNywgMjM0OSwgNTkwMiwgNjY0NTAsIApAQCAtMTk1MzcsMjYgKzE5NTU3LDI2IEBACiAgICAgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIDEwNTQzLCAwLCAzNTIyLCA3MTMzNSwgNDE0LCA2NTQwNCwgMCwgMTk1MDI3LCAKICAgICA2NDU2LCA3MzgyMCwgMCwgNjY5MSwgNDIxOTMsIDkyMjI1LCAxMjgxNzEsIDAsIDc0NDk1LCAwLCAwLCAwLCAxMTg4MjAsIAogICAgIDk3NTEsIDY1NDA3LCAxMjgwODUsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgMCwgMCwgMTIyMzUsIDAsIDAsIAotICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ2MiwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKKyAgICAxMjcyMzMsIDY0MDkyLCA5ODM0NzAsIDY0MDgwLCAwLCA2NDA5MCwgMCwgNjk5MTMsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgCiAgICAgMTI3ODg4LCA0MjAzOCwgMzg3LCA0MTM2MywgMTI3MzcsIDAsIDQ3ODAsIDQzMzY4LCAwLCA2NDMxMCwgNjQ2MjEsIDY3MzIsIAotICAgIDc4MTE2LCAwLCA5ODMxMzksIDAsIDk4MzA3NCwgODg5NiwgMCwgMzc1LCA2OTc2LCA2NjU4MiwgMTE5MDA1LCA5ODM4NjUsIAotICAgIDAsIDk4MzQyNiwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAKLSAgICAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIDY5NjkyLCA5ODM0MjQsIDY5Njk4LCAxMzE1MCwgNjQ0OTIsIDAsIDAsIAorICAgIDc4MTE2LCAwLCA5ODMxMzksIDAsIDk4MzA3NCwgODg5NiwgMCwgMzc1LCA2OTc2LCA2NjU4MiwgMTE5MDA1LCA5ODM4NzQsIAorICAgIDAsIDk4MzQzNCwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAKKyAgICAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIDY5NjkyLCA5ODM0MzIsIDY5Njk4LCAxMzE1MCwgNjQ0OTIsIDAsIDAsIAogICAgIDIyOTEsIDEyOTAyLCAwLCA0Mjg5MSwgNjYzMjcsIDc0Mjk4LCA5MTc4NTcsIDEwNzk5LCA2OTY5MCwgMjU4NywgNjYzNzIsIAogICAgIDAsIDQxOTMsIDkyMjUwLCA0MjQxLCA5ODMwNTcsIDc5OTgsIDAsIDAsIDAsIDEyNjY0MCwgMjMxNiwgMTE4ODIxLCAwLCAwLCAKLSAgICAwLCA2NDI5NywgNzQ3OTksIDkyNDQyLCA3NDE0MCwgMCwgNTM3MywgMCwgOTgzODc3LCAzNzYyLCAxMDAxNSwgMTIwNjcyLCAKKyAgICAwLCA2NDI5NywgNzQ3OTksIDkyNDQyLCA3NDE0MCwgMCwgNTM3MywgMCwgOTgzODg2LCAzNzYyLCAxMDAxNSwgMTIwNjcyLCAKICAgICAxMTkyMzIsIDAsIDQxNTkwLCAwLCA3MDA5OCwgMzc4MCwgNzQ4NSwgNTc3OSwgMCwgNDIwMzcsIDAsIDM5MDYsIDEyMzQ5LCAKICAgICAwLCA4MzI2LCAwLCA2NTQ5OCwgMzc2MywgNjk4MywgNTYxOCwgMCwgMzc3OSwgMCwgNDM2MTMsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDI4MCwgNzQ1NTgsIDEyNzMzMiwgNjgxMzgsIDEzMDcyLCAxODk0LCAwLCAwLCA2NTQ3OCwgNDMzMTAsIDcyMzEsIDAsIAotICAgIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgOTgzNzQzLCAxMTkyMzcsIDAsIDEyODgwNSwgCisgICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NTIsIDExOTIzNywgMCwgMTI4ODA1LCAKICAgICA0NDcwLCAxMTgyNiwgOTE3NTU3LCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIDUzNjcsIDg3NTYsIDEyNzE0MywgMCwgCi0gICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM0OCwgNjk2ODUsIDk4Mzc0NywgMCwgMCwgNDQwMjAsIAorICAgIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDc4MjQ1LCA5ODMzNTYsIDY5Njg1LCA5ODM3NTYsIDAsIDAsIDQ0MDIwLCAKICAgICA2ODA4LCA0MTMxOSwgMTMwMCwgMTA2NTAsIDQxNjkyLCA2NDUwNSwgMjI5MCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgCiAgICAgMzk0MywgMCwgNDEyMDUsIDQxMzE1LCAxMTg5NjEsIDAsIDAsIDUzNTIsIDAsIDAsIDg4MzksIDQxMzE0LCA3Mzg0LCA3Nzg1LCAKICAgICA0MTIwNCwgMTI3MzIyLCA0MTIwOSwgNjk2MzcsIDkyMjQxLCA0MzYwNywgMCwgMCwgNTQyMCwgMzg5NywgMTAxMzQsIDAsIAogICAgIDc0NDE3LCA0MDE4LCA3MTUwLCA2ODEyNywgMCwgMCwgMCwgMCwgMTI3NTI2LCAyNTYxLCA2ODYyMSwgMzU0MiwgNzE0OCwgCiAgICAgMTIwNzYsIDc5NTEsIDY4MTUyLCAxMTg4NTcsIDUzMDMsIDYyNzYsIDE3MDYsIDAsIDc4NzUxLCA3MTQ2LCAwLCA2NTE1MCwgCi0gICAgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDk4MzQyNywgNjk2NDEsIDEwNzUzLCAKKyAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDM1LCA2OTY0MSwgMTA3NTMsIAogICAgIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCA5MjYxNywgNzc5MjIsIDAsIDEyOTA5LCA0MzAxNiwgNjQ1NTksIDEyNzAyOCwgCiAgICAgMCwgMCwgNjc5OTYsIDIwMjAsIDAsIDQwMjIsIDEyODc4MywgMCwgNzc5MjMsIDEyNjU5MywgNDE2OTEsIDAsIDAsIDc0MzI5LCAKICAgICAwLCA2NDYyMiwgOTA3MCwgMCwgNjg0MTEsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgNzQ0NDAsIDAsIDcwMDAsIDM5MDQsIApAQCAtMTk1NzEsNyArMTk1OTEsNyBAQAogICAgIDY4Njc1LCAxMjgwNTQsIDE1MTEsIDkzMjQsIDc4MjExLCAxMDUxOSwgNjYzMzEsIDM0NTQsIDE5OTMwLCAwLCA0MTAxOSwgMCwgCiAgICAgMCwgNjUyOTIsIDY4MjIsIDEyODYyLCAwLCAwLCA0MjE0MywgNDE4MjgsIDc4MjA3LCA2NTUzMSwgNzgyMDgsIDExODg3OSwgCiAgICAgNTUyMjMsIDAsIDEyODA3MSwgNDE4MjYsIDg4NjUsIDY0MDIsIDAsIDEzMjc5LCA3OTE3LCA3NDc1NSwgMCwgNzczMywgMCwgCi0gICAgNDk5OCwgOTgzODg3LCA5MjMzMiwgNDE5NTAsIDAsIDQyNjgsIDAsIDAsIDcwMDYxLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgCisgICAgNDk5OCwgOTgzODk2LCA5MjMzMiwgNDE5NTAsIDAsIDQyNjgsIDAsIDAsIDcwMDYxLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgCiAgICAgMCwgNzQ3ODgsIDIwMTQsIDAsIDAsIDk3NjUsIDAsIDAsIDAsIDE5NTA1OSwgNzgzNTcsIDY1MjgxLCAxMjc4MjUsIDEwOTQ5LCAKICAgICAwLCAwLCAwLCAyMDE1LCAwLCAwLCAwLCA2NjMxOCwgNDMyMzMsIDAsIDQyNTE3LCAwLCAwLCAwLCAxMjY5OCwgODA5NCwgCiAgICAgMTAxMzUsIDY1OTA5LCA2NDc0LCA3OTQsIDAsIDEyNjU2LCAxMjgxMjIsIDExOTM1MywgMTI4MjcwLCAxNjY1LCAwLCA0ODMzLCAKQEAgLTE5NTkwLDkgKzE5NjEwLDkgQEAKICAgICA5NDI1LCA5NDI2LCA5NDI3LCA5NDI4LCA5NDI5LCA2NDc1OCwgMjM2MiwgOTY1NSwgMCwgMjAwNCwgOTA5NiwgOTc4MiwgCiAgICAgMTI4ODQ4LCA5MTcyLCAxMjg1NDUsIDE5OTY1LCAwLCA1OTU1LCA2NzY2NiwgMTEwOCwgMCwgNzQ3NzMsIDAsIDAsIDY0NzgyLCAKICAgICAzOTI2LCA5MjQ0OCwgNjUyMTAsIDg3OTgsIDAsIDkyMTY1LCAxMzkyLCAwLCAwLCAxMjczNjQsIDEwNjA2LCA4MDY1LCAKLSAgICAxMTg4MDUsIDEwMzUzLCAxMDQxNywgMCwgMCwgNjQ1MjQsIDkyNDE4LCA0MDE5LCAwLCA5ODMyODAsIDQzMjgwLCA4MjE5LCAKLSAgICA2ODQwMiwgMTgxMiwgMTE5OTYzLCA5ODM2ODMsIDAsIDEyNjQ4OCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIAotICAgIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAwLCAxMjgxMzksIDk4MzI1MywgNjg2NzgsIAorICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4OCwgNDMyODAsIDgyMTksIAorICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY5MiwgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCisgICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjYxLCA2ODY3OCwgCiAgICAgMCwgMCwgMTA0OSwgMCwgNjU3MDcsIDIzMDQsIDQxODA2LCA5MjMyNiwgNDIzMzYsIDM5MjEsIDAsIDExNzc1LCA2NDc2MCwgCiAgICAgMTE3NjYsIDEwMzgsIDQyMzAzLCA5ODIzLCAxMjcyNzgsIDY5MjM2LCA0MDA4LCA2NDAwNCwgODc3MywgMTA3MzMsIDM2LCAwLCAKICAgICA1MTUzLCA0MTgwNSwgMCwgNzM3MzUsIDc2MywgNDE4MDgsIDY0OTEwLCA5ODMxMzAsIDIwMDksIDAsIDAsIDEyNzE0MiwgCkBAIC0xOTYwNyw3ICsxOTYyNyw3IEBACiAgICAgNzgwMDIsIDAsIDc1MTMsIDE4NjMsIDQ3MTAsIDAsIDU5NTYsIDc2MjEsIDc4MDA2LCA5MjYyNCwgNDcwNSwgNzE2LCAKICAgICA3ODAwNCwgMCwgNDcwNCwgMTIwMDQwLCAxMjAyNzAsIDQyMjQxLCAxNjEsIDQzOTc3LCA3NDU0NiwgNjYyMTQsIDQ3MDYsIDAsIAogICAgIDY5OTE0LCA0MjY3MiwgNDcwOSwgMTA2ODAsIDExOTA2NSwgNDMyOTMsIDExOTk0NCwgMCwgMTE5MTY0LCAxMjAzMjgsIAotICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjMzLCAKKyAgICA5MjQ2NywgMTAxODcsIDE3MDAsIDExOTIyMywgMCwgMCwgMTI4MTE5LCA0MDA0LCAwLCAxMDk2OCwgNDMyOTYsIDk4MzY0MiwgCiAgICAgODUwNiwgMCwgMCwgMTI2OTk2LCAxMDA1LCA5MzcsIDc4MjE2LCA0NzM0LCAyODcwLCAwLCA3ODIxOCwgOTgzMTA5LCA3NDYzLCAKICAgICA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgOTI0OTAsIDc0NDQ5LCA4MTA5LCA0MzEwNSwgOTgzMTc0LCAKICAgICA0NzMwLCA0NDcsIDEzMTg2LCAxNTEzLCA0NzMzLCAxMjA0MTUsIDAsIDAsIDQyNTI3LCAxMjkxMSwgNDM0MjcsIDEzODMsIApAQCAtMTk2MTgsNyArMTk2MzgsNyBAQAogICAgIDEyNzY5LCA2NTkwNSwgNDE2OTcsIDEyODMsIDEyMDMwMiwgNDc3OSwgMCwgMzcxOSwgNDAwNiwgOTgzNTY5LCAxOTk1NywgCiAgICAgMTI4NzczLCAyMDIxLCAxMTkzMzIsIDEyMDY5OSwgMTE5MTUwLCA0MzAyOCwgNjU0OTMsIDQxODM4LCAzODc1LCA1OTYyLCAKICAgICA2NDM0MSwgOTI2MTYsIDk4MTQsIDQzNDU3LCA1ODI3LCAzMzE0LCA3Nzg3LCA3ODIzNCwgNjU0OTQsIDY4MTUzLCAwLCAwLCAKLSAgICAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDE5NDYyNiwgMCwgMCwgNjYzMTYsIDY1NDY3LCA1NzcxLCA0MTI5OCwgOTgzNzg1LCAKKyAgICAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDE5NDYyNiwgMCwgMCwgNjYzMTYsIDY1NDY3LCA1NzcxLCA0MTI5OCwgOTgzNzk0LCAKICAgICA5NzQyLCA1MjEsIDAsIDEwODAwLCA5MjIyMiwgODQwNCwgMTk0NjI1LCA0ODMsIDcwOTYsIDcwODksIDY2MzIzLCA5MjgsIDAsIAogICAgIDAsIDExOTAxOCwgMTA1OTksIDExNTg2LCAzOTg5LCAxMDk3MSwgNDM3NDgsIDY1NzgyLCA5ODQxLCA4ODQzLCAxMjE0NSwgCiAgICAgOTI0NzAsIDEwMDc0LCA3ODU0OCwgMCwgMzc2OSwgMCwgMCwgMCwgOTgzMTA3LCA5NTczLCAwLCA2NTI5MCwgODg0OSwgMCwgCkBAIC0xOTYyNiwxNyArMTk2NDYsMTcgQEAKICAgICA3MzgzOCwgNzg1NTMsIDU4MjUsIDEzMDA3LCA2ODE2NSwgMCwgMTIwNDU3LCAxMjY2MSwgNzYwOCwgMTAzNTQsIDEwNDE4LCAKICAgICA0MjQxMSwgMjAyMiwgMCwgMTQwOSwgMTIxOTUsIDQwMDEsIDMxMTIsIDEwODI0LCAxMjA2MzksIDEzOTAsIDAsIDAsIDQyMSwgCiAgICAgNDM1MzYsIDU4NDYsIDEyMDEyMCwgNDEzMCwgMTI3Nzc1LCA3NTk1LCA0MjU4OCwgNzYwMCwgMTIwMTIxLCA2NjAzNSwgCi0gICAgOTgzOTA0LCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAxMTgzMSwgMjM3MCwgCisgICAgOTgzOTEzLCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAxMTgzMSwgMjM3MCwgCiAgICAgMjg0NiwgOTI2MDUsIDAsIDAsIDEyMDEzMiwgMCwgMTgzNiwgMCwgMCwgOTI1NTgsIDM3NDAsIDY5ODQzLCA2MjkwLCAKICAgICA2NTM3NCwgMTIwNDUxLCAyMzkwLCAzOTQ0LCA2NjYyOCwgMTIwNDM0LCAwLCA2MTM1LCAzMTE4LCA3NDI2NSwgMTE5MDkzLCAKLSAgICAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIDY0NzM5LCA3OTQzLCA5ODM3MzQsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCAKKyAgICAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIDY0NzM5LCA3OTQzLCA5ODM3NDMsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCAKICAgICA5OTk4LCAxMjg1NjQsIDAsIDAsIDAsIDAsIDYyMDQsIDAsIDAsIDgyNzksIDg3NzYsIDY0OTU0LCA0OTc1LCA3MDA3NSwgCiAgICAgMTIwMTMwLCA0MjY3LCAxNjMxLCA0MjIwNiwgNzc5ODMsIDAsIDE5NTA0NiwgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgCi0gICAgMCwgMTI2NTg4LCAxMjU4NiwgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgOTgzNzg4LCAKKyAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3OTcsIAogICAgIDc3OTMsIDc4Mjc1LCA5MzI4LCAxMTkxMDQsIDc4MzkzLCAxMjYwNCwgMCwgNjYxNSwgMjI4NSwgOTIzNDQsIDM5ODYsIAotICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzUwLCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAotICAgIDExNDk4LCAwLCA5ODMzNDksIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAotICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM0MiwgMCwgMTYwNiwgMTIwMzQ4LCAKKyAgICA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDk4MzM1OCwgOTU0MSwgNzgyNzYsIDAsIDExMjc1LCA4NTQwLCAKKyAgICAxMTQ5OCwgMCwgOTgzMzU3LCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgOTgzMTM4LCAwLCAwLCAKKyAgICA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCA5ODMzNTAsIDAsIDE2MDYsIDEyMDM0OCwgCiAgICAgMTIwMzUxLCAzMDkzLCA2ODQzNiwgMCwgOTgzMDYxLCAxMTk2MTMsIDAsIDAsIDQzMTIsIDc0MDkxLCAxMjAzMzcsIAogICAgIDEyMDMzNiwgMTE5MjMsIDQwMjMsIDEyMDMzMywgNTc2MywgOTQwMTUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIAogICAgIDExODc4NSwgNDQ1NSwgNzQzMjEsIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMTE4ODM3LCAxMTk3MywgCkBAIC0xOTY0NiwyNSArMTk2NjYsMjUgQEAKICAgICA3MDA0LCAwLCA2NTg4MCwgMTI3ODg2LCAxMTkwNDgsIDIzODAsIDExMzgwLCAwLCA5Mzk5NiwgMjM3NiwgMCwgMTE5MzIwLCAKICAgICAwLCA1MTk3LCAxMjcwNDYsIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDEyNzA1MSwgMTIwNTU0LCAxMjAwNDUsIDAsIAogICAgIDAsIDAsIDk4MzA4NCwgMCwgMCwgMCwgNzQxODgsIDcxMzQyLCA5ODMwODYsIDk4MzU3MywgMTIwMDQ3LCAxMjg1NzUsIDAsIAotICAgIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDk4MzM1NywgNDIzODQsIDAsIDQyMjcsIDc0MTU4LCAwLCA5MjUwMSwgCi0gICAgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDk4MzQ1NywgMCwgNjQ3OTcsIDk4MzMzNywgNTgyMCwgCi0gICAgOTgzMzM2LCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgCisgICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzY1LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKKyAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDY1LCAwLCA2NDc5NywgOTgzMzQ1LCA1ODIwLCAKKyAgICA5ODMzNDQsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKICAgICAxMjAwNjMsIDAsIDczNzcsIDEyNzg2NywgNDE3OTksIDY1NTMwLCAxNzExLCAxMjk4NCwgNDMwMzksIDMxMTQsIDYyNTUsIAotICAgIDk4MzMzMiwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCA5ODMzNjEsIDc0MTg0LCA5ODMzNjAsIDEyMDA1NSwgMCwgNDMxNzUsIAorICAgIDk4MzM0MCwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCA5ODMzNjksIDc0MTg0LCA5ODMzNjgsIDEyMDA1NSwgMCwgNDMxNzUsIAogICAgIDAsIDQzMDM3LCA0MTc5OCwgNDEwMzUsIDExNTgzLCAxMjc3NjksIDQxODAxLCAxMTkwODgsIDExOTYwNSwgNTIwLCA0MjAwLCAKLSAgICAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDEyNzM1MywgOTgzNjcyLCA4MzYwLCAwLCA3ODA0NCwgMzIxLCA0MjI5LCAKKyAgICAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDEyNzM1MywgOTgzNjgxLCA4MzYwLCAwLCA3ODA0NCwgMzIxLCA0MjI5LCAKICAgICA2NDU0MywgOTE3OTQ2LCA2NTU2MywgMCwgOTE3OTc0LCAyODYxLCA0Mzc5MywgMTAwOTUsIDAsIDkxOTUsIDkyMzg2LCAKICAgICAxODYxLCAwLCA3MzczMywgMCwgMCwgNDMwNDEsIDAsIDQzNzk0LCAxMjg1MzAsIDM4NTksIDEyMTgxLCA0MTY2MCwgODIwOSwgCiAgICAgMCwgNzM4NjcsIDEyOTczLCAwLCA3NDc1NywgMTI3NTE0LCA0MTY1OCwgMCwgMCwgNTc2MCwgMCwgNzQzLCA0NDE0LCAKICAgICAxMjA3NjYsIDAsIDQyNjMyLCA5MTc5NzMsIDY1MTYxLCA3Mzg5NiwgMTI4NTg5LCAwLCAxNDA1LCAxMTkwNjMsIDQzMjIwLCAKICAgICA0MzM0MSwgMCwgMTk5MTksIDAsIDY0NTMyLCA2NTM2NywgNDM3MTAsIDAsIDAsIDM1MTMsIDAsIDExODg4MywgNDMzNDIsIAogICAgIDExOTA2NCwgNjU1MjksIDY1MzY0LCAxMjgxOTcsIDAsIDY0ODUsIDEzOTcsIDAsIDQxOTg2LCA5MjY3OCwgMCwgMCwgCi0gICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM2OTgsIDAsIAorICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgNjc5OTcsIDEyNjgyLCA0MzI4NywgOTIzMTcsIDAsIDk4MzE0MywgOTgzNzA3LCAwLCAKICAgICAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgNjUyODMsIDY3NjYzLCAKICAgICA3ODIyMiwgMTM0NiwgMCwgOTE3NjMxLCA2NDU3MywgNjQ4OTcsIDQyMywgMTgxOCwgNjUxNDQsIDAsIDgyNzIsIDEyNzgxMiwgCi0gICAgMTk5MTEsIDQyMTgsIDMwODcsIDY0OTYwLCAxMjcyMzQsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgOTgzODkzLCAKKyAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM5MDIsIAogICAgIDc0MzU5LCAxMjYyNiwgOTEwNiwgMCwgNDI2NDIsIDEyMDIzMCwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAwLCAwLCAyNjUsIAotICAgIDQxNzk1LCA2NDY2NiwgMTI2NTA4LCA0MzUzMCwgMjc1MiwgMCwgMCwgOTgzNDg1LCA1OSwgMCwgOTgzNTkzLCAwLCA5MjM3MSwgCisgICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0OTMsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKICAgICA3Nzg3MywgNDE4MTAsIDAsIDcwMTAsIDAsIDQxODA5LCA0MTQ5NSwgMTE5MzY0LCAwLCA0MjI1MiwgNDIyMTMsIDgwMDksIAogICAgIDMzMDUsIDQzMDMzLCA1MTEsIDkyNzAwLCA2NjI1NSwgMTMxMjcsIDEyMDA2NywgMCwgNzQzOTcsIDEyMDIzNSwgOTE3OTc3LCAKICAgICA2NTkxNSwgMTQwMCwgNDE4MTIsIDEwNjg1LCAxOTQ4NzAsIDIxMDMsIDEwMzg3LCA0NDUzLCA0MzI3NiwgOTE3NzgzLCAKQEAgLTE5Njc1LDE3ICsxOTY5NSwxNyBAQAogICAgIDAsIDQxODQxLCA0MzMzOCwgMCwgMCwgNTcyNiwgNjQ5MTUsIDQyMTc1LCAwLCAwLCA0MTQ5NywgNjUwNDQsIDEyMDEwOSwgCiAgICAgMjg1MSwgNDMwMTcsIDk4MzU4OSwgMCwgNDM3MywgNzgwNTgsIDAsIDk1ODcsIDE3ODksIDY2NzEsIDEyODg0MCwgMzEwMCwgCiAgICAgMCwgNjUzNjAsIDAsIDkyMzY1LCA5MTc3ODksIDY0OTIyLCAwLCA4MTkwLCAxMjA4MywgMCwgMCwgNjUwNiwgNjQzMTIsIAotICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4MzgsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKKyAgICA3NDM3NCwgMjM2OCwgMCwgNDQxOSwgOTgzODQ3LCAxMTkxMjUsIDM0MzksIDE4MjUsIDExOTIsIDEyMDEwNiwgODg5MSwgCiAgICAgMzA4MCwgMTIwMjI4LCAyMzQ3LCA1NDMwLCAwLCA4OTkwLCAyODQ4LCAwLCAxMjgyMjMsIDkyNTI4LCAyNDksIDAsIDAsIDAsIAogICAgIDEyMDY1OCwgMCwgMCwgODg4MywgOTE3ODAyLCA3MjgsIDY4MTc4LCA5OTUsIDAsIDAsIDY0ODI2LCAwLCA5MTc3OTgsIAotICAgIDEyODM0OCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIDE5NDgxNCwgOTgzODQxLCAxMjExMiwgNjk5MTIsIDAsIAorICAgIDEyODM0OCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIDE5NDgxNCwgOTgzODUwLCAxMjExMiwgNjk5MTIsIDAsIAogICAgIDAsIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIDIxMDIsIDY1NDQ1LCA3ODI1OCwgCiAgICAgNjQ4OTEsIDAsIDc3MjUsIDY1MTA4LCA3ODI1NSwgMCwgODYyNCwgNjkyNDYsIDEyNDQ2LCA0MzI5NSwgMCwgNDE4OTQsIDAsIAogICAgIDYyNzcsIDQxNjcyLCA0MTg5MywgMTAwMTAsIDEyODY3OCwgMzU0MCwgMTI4NjQ5LCA4MzUsIDcxMzQwLCA2OTgxNiwgCiAgICAgMTE5ODY4LCA3NDQwOCwgMCwgNzM5NTksIDU0MjYsIDQyNTgsIDAsIDAsIDU0MjQsIDEyODEyNywgODI4MywgMCwgNTQzNCwgCiAgICAgOTgzNTkwLCAwLCAxOTkxNywgMTE0MDgsIDAsIDExOTQ3LCAwLCAxNDA0LCAzMDk1LCAxMTQzMiwgMTI4MzA3LCAzNDY0LCAKICAgICA2NDg2LCA0ODE5LCAxMjgyMzMsIDAsIDU3MCwgODA5NSwgMzY3MiwgMTE5ODY0LCAxNDk4LCA2Nzg2NiwgMCwgMTI4NTM5LCAKLSAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjU0LCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCisgICAgNDMxLCAwLCAwLCAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDk4MzY2MywgMTMwOTYsIDEyODY0MywgMCwgNDM0MDgsIDk1MTYsIAogICAgIDEyODUzOCwgNTI2OCwgNDIyMzAsIDQyMjIwLCAwLCA0NDUwLCAxMjA1MTEsIDExNTQ3LCA0MzQxNywgMTI4NTQyLCAzNTYsIAogICAgIDM0NzcsIDIyNywgMTA0ODgsIDY4MjAzLCAzODIsIDExNDE4LCAwLCAxOTUwNjYsIDAsIDAsIDAsIDAsIDY0ODQsIDI1NDEsIAogICAgIDY2MDM5LCAwLCA3ODcxOCwgOTI3MjMsIDM1NDksIDAsIDkxMTAsIDExOTY2NSwgMjc0MywgMCwgNDMyOTAsIDE5NDgxMiwgCkBAIC0xOTY5NCw3ICsxOTcxNCw3IEBACiAgICAgMTI4NDksIDM5NTMsIDE4OTcsIDAsIDY1MDk0LCAxMTk5NCwgNDMzOSwgNzQ1NTYsIDkyNjU0LCA2Nzg0MywgMCwgMCwgMCwgCiAgICAgNjg0NzMsIDc0MTA0LCA1MjI4LCAxMjg4MDQsIDc4NjgsIDQzMTg0LCAwLCAwLCA3Mzk4NiwgNDM0MzgsIDAsIDQzMDIyLCAwLCAKICAgICAxMTYyLCA5MTc4NDcsIDI2NzEsIDAsIDAsIDkyNjMyLCA5MjYzMSwgMTE4ODY1LCA0NTUzLCA3MzgxMSwgMCwgMTk1MDA1LCAKLSAgICAwLCAwLCAxOTkyMSwgNzQzMzEsIDExNDI0LCAxOTUwMDYsIDQ1NjcsIDQxODkxLCAwLCA5ODM3NzksIDU1MjQ5LCA0ODIwLCAKKyAgICAwLCAwLCAxOTkyMSwgNzQzMzEsIDExNDI0LCAxOTUwMDYsIDQ1NjcsIDQxODkxLCAwLCA5ODM3ODgsIDU1MjQ5LCA0ODIwLCAKICAgICA2NTIzOSwgMTk0NjYyLCAwLCAxOTQ2NjUsIDQzMDQyLCAxMTkyMTIsIDEzNzcsIDEyODY5LCA0ODk3LCA0MjgyMSwgOTI1MCwgCiAgICAgMCwgNDQzOCwgNjQzODUsIDAsIDE3NTMsIDExMzMxLCA2MTQ3LCAxOTQ5NDEsIDQzMjgyLCA4ODMzLCAwLCAwLCA2NTA0LCAKICAgICA3ODQwOCwgMTI2OTc5LCAxMDcxOSwgMCwgMTg5OCwgMTQxMywgNDI0NDMsIDAsIDgwMiwgMTIxNDEsIDAsIDE5NDY3MSwgCkBAIC0xOTcwMyw3ICsxOTcyMyw3IEBACiAgICAgNzg3MTksIDY2NTczLCAwLCA3ODcyNCwgNzg3MTIsIDExNzYxLCAxOTQ2NTUsIDAsIDQxMDk0LCAwLCAwLCAxOTQ4OTMsIDAsIAogICAgIDkyNjg5LCA2MTk2LCA2OTQ1LCA5Mzk2OSwgMTk0ODkwLCAxMjgxODQsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgCiAgICAgMjkzMCwgMCwgMCwgNDEwOTgsIDAsIDQxMDkzLCAwLCA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgCi0gICAgOTgzMjA1LCAxNjYwLCA3MzkxNiwgMCwgMTE4OTA1LCA3NDM2MiwgMCwgOTI0ODUsIDE5NDY1MSwgMCwgOTgzNjk3LCAzMzk0LCAKKyAgICA5ODMyMDcsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM3MDYsIDMzOTQsIAogICAgIDE5NDg5NCwgMTIwNjY4LCAwLCAwLCAxMjczNTgsIDY2MjE5LCAxMjcxODMsIDQzMjg0LCAxOTQ2NTYsIDc4MTcsIDE4NDEsIAogICAgIDExMDU1LCAxMjA1MzMsIDE5NDk3OSwgMTk0OTgyLCAxNjY5LCAxMDc3NiwgMTk0OTgxLCA3NzAxLCAxOTQ5ODAsIDAsIAogICAgIDE5NDk5NSwgMTczMiwgNDAzMCwgMCwgMzk2MywgNjY2MTEsIDEyNzUzMCwgNDE3NjgsIDY0OTEsIDAsIDY1MzI0LCA5MTQsIApAQCAtMTk3MTEsMzAgKzE5NzMxLDMwIEBACiAgICAgMTIwMDksIDEyMzk5LCAwLCA2Nzg1MiwgNjU1MzcsIDAsIDEwODQxLCA0MzQzMCwgNTMwMSwgMCwgOTI2MTgsIDU3MzQsIAogICAgIDg5NjAsIDAsIDkyNTI3LCA2NTMxNywgNzc4ODAsIDAsIDAsIDAsIDEyMzA0LCAwLCAwLCA2NTMxNSwgOTI2NzAsIDEyODUxMSwgCiAgICAgMCwgMCwgMCwgMTE5NjIxLCA5MjUyOSwgNzQ1MzYsIDEyNDQ3LCA2NDQ4NiwgMTI3Mzc0LCAxMjY1NjIsIDk4MzEyOSwgMCwgCi0gICAgMCwgOTgzNzkzLCA0Mjc2NywgMTA5MTUsIDAsIDEyMDA3LCA0MzY5NSwgMTIwNTIwLCAxMTk3NSwgMTk0ODc4LCAwLCAKKyAgICAwLCA5ODM4MDIsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAogICAgIDkyNjA0LCAyNTU1LCA4NjI5LCAxMjg2NDAsIDQzMTY4LCA0MTg3MiwgNDM3MDYsIDQ0OTYsIDE5NDg3OSwgMTI4MTQ4LCAKICAgICAxMjAyNDEsIDAsIDAsIDAsIDAsIDY0NzMwLCA3MDA0MSwgNjY3MTQsIDY4MjIyLCAwLCA3MDA3NiwgNjU1OTYsIDkyMzA2LCAKICAgICAxMTQxNiwgNDI4MCwgNjc2NTUsIDg3NjUsIDEyNzg0LCA3NzkyLCAxMzkzLCAxMjY0NzMsIDY3ODcxLCA3NDM4NiwgMCwgCiAgICAgODIzMywgMTI4MjAsIDAsIDY2ODMsIDE5NDg3NiwgMzQ0MiwgMTIxNDQsIDI4NDEsIDEyNTQzLCAwLCAxNDczLCA0MjgyMCwgCiAgICAgNjQzMjksIDEyNzgzMiwgMCwgNjg2NDIsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIDAsIDQxMTA0LCA5NDAwMywgMzQwNiwgCiAgICAgMTA1NCwgNzEzMjAsIDEwNDAsIDY1NDUwLCAwLCA0NDM0LCAxMDY5LCAwLCAxMTg4NjIsIDY1NzM3LCA5MTc3NjUsIAotICAgIDEyODcwNSwgMCwgOTgzNjg0LCA5NjkzLCA0MTk0MywgMTI2NTY0LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAKLSAgICAxMDU5LCA5NzkwLCA4OTk1LCAxMTk5NzQsIDk4MzY4NywgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAKLSAgICA5MjM3MiwgMCwgNzQ4MzAsIDc4NTY5LCAxMjc0MywgOTgzNjgwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIAotICAgIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAxMTk2MjksIDk4Mzc1NSwgCi0gICAgNDMwMjAsIDEyODI3MSwgMzk1NSwgNzQyNTQsIDAsIDk4Mzc0NSwgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgCisgICAgMTI4NzA1LCAwLCA5ODM2OTMsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAorICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjk2LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAorICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODksIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCisgICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzY0LCAKKyAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzU0LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKICAgICAxMjIzMCwgMCwgMCwgMCwgMTA0NDgsIDQxNzgzLCA0MTc4NiwgMTI3MDkzLCAxMjc5NywgMjc1NSwgNjQ1NzEsIDc4NTc4LCAKICAgICAxOTQ5MjcsIDQ4NTcsIDAsIDQ0MjgsIDEyNzk0LCA3Mzc1NSwgMTI4MDYxLCA3ODU3NCwgMCwgNzQyODQsIDAsIDU3NDcsIAogICAgIDc4ODI1LCAwLCA3OTc4LCA0MTA5MiwgNzQ1NzEsIDAsIDExOTI0LCA0MzgxMiwgNDIxNDQsIDY1MDE1LCAwLCA1NjMsIDAsIAotICAgIDk4MzY4MiwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKKyAgICA5ODM2OTEsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgMTE5MDQzLCAwLCA5NDA1MSwgNDMxMzcsIDY5NCwgMCwgCiAgICAgOTg3NiwgMCwgMTE5MTY4LCAwLCA3ODgyMiwgNjQ1MzcsIDAsIDI3NywgNzQzODUsIDcyMjksIDEyNzYxLCAwLCAwLCAKICAgICAxMzAyNSwgNjQ4MTEsIDg3NTcsIDc4ODI0LCAxMjY0NzgsIDE1NzQsIDczODEsIDAsIDI1MjUsIDQ4NTIsIDU3NDksIAogICAgIDY4NDY1LCAxMzAyNywgNDI4MjQsIDEyMDU3NCwgMTAzOSwgNzE1MSwgMTAxNTUsIDU3NDUsIDE4OCwgNDE4NTgsIDExNTkyLCAKICAgICAwLCA3NDAxNSwgOTA1NSwgNDE4NTMsIDQ4NTgsIDkxNzc4MCwgMCwgNDM2LCA0NzcxLCAwLCAyNzg2LCAwLCA0ODU2LCAKICAgICA4MDUxLCAwLCAxMTk2MDksIDcxMzI3LCA5NjQ0LCAwLCAwLCAwLCAxOTQ5MTYsIDEyMDczMiwgNjY3MTAsIDExODgzNCwgCi0gICAgOTgzMzUxLCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAorICAgIDk4MzM1OSwgNzM5MDYsIDEyODY4MCwgMTI3MTE0LCAwLCAxMDIzNCwgNTg0MywgMTE5MzksIDAsIDQyMTU3LCAwLCAzMTU3LCAKICAgICAxOTQ5MTgsIDY4MzkzLCAwLCAzNTA0LCAxMTkxNzgsIDAsIDEwODIyLCA1MTQ5LCA2NjAyOSwgMTAyMjYsIDY1MTQyLCAKLSAgICAxMjgwMjUsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAxMjY1NywgOTgzNjU2LCAwLCAzODYsIDAsIDg4MzQsIDAsIAorICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NjUsIDAsIDM4NiwgMCwgODgzNCwgMCwgCiAgICAgMTI4MTUsIDQzNTc0LCAwLCA3MzkwNywgMCwgNzQxOTYsIDcyMjAsIDc0NTA0LCAwLCA3NDMxNiwgMCwgNjUzMjIsIDQzMDQsIAogICAgIDc0NTAzLCA4MTYwLCA3ODcwNywgMTk0NzUzLCAwLCAwLCAxMjg1MjYsIDEzNDgsIDkyMzQ5LCA3ODU5NywgMTI2NTM5LCAKICAgICAxMzMwMywgMCwgOTIzOTIsIDE5NDc1NSwgNzU5OSwgMTI3OCwgNDM2MTYsIDEzMjY5LCAwLCAwLCA3NDM4NywgNzgxNzksIApAQCAtMTk3NDYsMjUgKzE5NzY2LDI1IEBACiAgICAgNDI1MDcsIDE5NjIsIDQzMzA1LCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAwLCAyMDcyLCA5MjMxMiwgNjk5NSwgNzQxNzMsIAogICAgIDU0MzcsIDc0MTc0LCAxMDY2OSwgODcwMiwgNzk2NCwgOTIzNTIsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIAogICAgIDE5NDY5OSwgMTk0ODQ3LCAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDc4NDc5LCA5MjI2LCA3ODQ4MCwgMTk1MDcwLCAKLSAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MDgsIDk4MzI0MSwgCisgICAgNjQ3MiwgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCA2NDQzMiwgOTgzODE3LCA5ODMyNDcsIAogICAgIDE5NTAyNCwgMTAxOTYsIDc4ODYsIDAsIDY1ODUsIDAsIDY2ODAsIDE5NTA0MiwgMCwgMTk1MDUxLCA2Njc5LCA3NDQxMiwgCi0gICAgOTIyNTEsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCA5ODM2MjIsIDk4MzYyOCwgMTI3ODkxLCAxMjc0ODQsIDE5NDgzMywgCisgICAgOTIyNTEsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCA5ODM2MzEsIDk4MzYzNywgMTI3ODkxLCAxMjc0ODQsIDE5NDgzMywgCiAgICAgMTk0ODMyLCA2NjgxLCAxMjc0ODIsIDEyNjkzLCAxOTQ4MzYsIDQyNzI3LCA3ODE5NiwgMTI4MjUyLCA3ODE5NSwgNjU0NDIsIAotICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxOTQ4MTgsIDEyODg0NSwgMTk0ODIwLCAKKyAgICAxMTk2MTAsIDY5NzMzLCA5OTg5LCA0MzI0OCwgNjYyNDgsIDE5NDgxNiwgMCwgMTEzMjEsIDEyODg0NSwgMTk0ODIwLCAKICAgICAxOTQ4MTksIDUyOTcsIDcwNDIsIDEzMjg0LCA2MTEyLCA3OTY4LCAxOTQ4MjUsIDczOTI3LCA5MjQ0NCwgMTk0NzM2LCAKICAgICA2NTc0NiwgMTI3NDc2LCA2OTg4OSwgNzQzODksIDEyODY5NiwgNDM0MiwgNDI4MzksIDE5NDgzMSwgMTY3NywgMCwgMCwgCiAgICAgMTI2NTkwLCA5MTc4NTUsIDExMDkxLCAxMTAxMSwgMjcxOSwgMCwgMCwgMTE5NTk1LCAxMDE2MCwgMCwgMCwgNzU4NSwgCiAgICAgNjUxNjksIDIwNTIsIDQzMDgsIDkyMTc0LCA0MzAwMCwgNzUwNSwgNTQzLCA2NDkxNiwgNjQ3MzYsIDAsIDAsIDY0NjU1LCAwLCAKLSAgICAxMTg5MjIsIDIwNjQsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAxMjcxNzAsIDAsIDAsIDAsIDAsIAotICAgIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4MzkzNCwgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAotICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjcxLCA4ODQxLCAwLCA1MTYsIAorICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgOTgzNjI1LCAwLCAKKyAgICAwLCAxMjk5NCwgOTI3MjgsIDEwODI4LCA5ODM5NDMsIDYyMjgsIDQzMDcsIDM0ODIsIDEyODUyNywgMCwgMCwgMCwgNTA2LCAKKyAgICA3NDU3MywgNDExOTQsIDY1NzM1LCAyMDU1LCA0MzI1NSwgNDExOTUsIDAsIDgxNjksIDk4MzY4MCwgODg0MSwgMCwgNTE2LCAKICAgICA5Mzk3NCwgMjA2MywgMTE5MDUxLCAzNCwgMTI4ODUwLCAxMjAxODYsIDExNTA0LCAxNjEyLCA3NDMzMywgMTIwMTgyLCAKICAgICAxMTgyNywgNzQzMDgsIDEyMDAxLCAxMjAxNzgsIDEwMjQyLCA2NDU2NCwgMTIwMTc5LCA2Nzk4NiwgNjU4NCwgNzc0OSwgCiAgICAgMTEwMzcsIDAsIDE3NTgsIDEyNzA5MiwgMTA2NjcsIDEwNTYwLCAxMjAxOTcsIDkyNTkzLCAxOTM1LCAxMTUxNywgMTIwMTkzLCAKICAgICAxMjAxOTYsIDEyMDE5NSwgMTkzMSwgMTIwMTg5LCA3NDgzOSwgMTIwMTkxLCAxMjE3LCA2NDcwMiwgMTI2NDMsIDgyNSwgCiAgICAgMTI3ODM4LCAxOTQ5MDUsIDEyMjk0LCA5MjQyOCwgNzg4MzQsIDkxMzgsIDc4ODMxLCA3ODgzMywgMTI2MzEsIDc4ODI5LCAKICAgICAxMTA4MCwgNzQ1NTQsIDY0MDAwLCA1NTkxLCAxMjM5LCAwLCAxMTMxMywgMCwgMzQwMywgMCwgMCwgNjQzNjQsIDkyMjY5LCAKLSAgICAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDk4Mzg0MCwgMCwgMTI2NDg0LCA2NzU4OSwgNDE4NTAsIDY0MjkwLCAKKyAgICAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDk4Mzg0OSwgMCwgMTI2NDg0LCA2NzU4OSwgNDE4NTAsIDY0MjkwLCAKICAgICAzNDMzLCA5MjM5MywgMTI2MTUsIDE1OTQsIDQyMTkyLCA2OTE0LCA2NzYwMywgMCwgMTE5NTY5LCA3NDU2NSwgNDEzNTMsIAogICAgIDY3NjAyLCA2NzYxMSwgNDMzNywgMCwgMTI3Mjk2LCA5MTgsIDY1MDM1LCA0MTM1MSwgNzY4MSwgMTk0OTAwLCA0MjU3NywgCiAgICAgNDEzOTMsIDEyNjY4LCAxOTQ5MDQsIDI0NzcsIDEyNzI4NSwgMCwgMTI3MzAxLCAwLCA2NzYwNCwgMTk0ODgwLCAxMjcyMzUsIApAQCAtMTk3NzYsMTQgKzE5Nzk2LDE0IEBACiAgICAgNzM3OTYsIDAsIDExOTIyOCwgMTIwMzUsIDAsIDI4MTgsIDAsIDc0NDExLCA3Mzc5MywgMCwgNDE3MiwgMCwgMCwgODM3MywgCiAgICAgMTA4NzMsIDEyMTk3LCAwLCAwLCA5MjI2NSwgNjk3MDYsIDAsIDc4MjEwLCAwLCAxMjgxMTAsIDE5NDg2NSwgMTI2OTgyLCAKICAgICA3NDU2MywgNjQ4MjgsIDExNDE5LCAxOTQ4NjgsIDc2NiwgMTI1NywgMCwgMTE4ODQ1LCAxMTM4MSwgMzI2NSwgNjY2MTcsIAotICAgIDMyNzQsIDEyNzM2NSwgMTI2NTIzLCA5NDA0MiwgOTgzOTQxLCA3NDUyMiwgNDE5ODksIDAsIDAsIDEyODc5OCwgMzI2MywgMCwgCisgICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NTAsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKICAgICA2NTY3MiwgMCwgMzI3MCwgNjQ1MzksIDExNDg5LCAwLCAwLCAwLCAwLCA5NTA1LCA2NTUxOCwgMTk0Nzc2LCA3NTYsIAogICAgIDE5NDYwNSwgMCwgMCwgMCwgNzI2MSwgMCwgMTg2LCAwLCAxMTkxNTYsIDU3NzAsIDEzMTc5LCA2NTgzMCwgMTI2MTIsIAotICAgIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIDk4Mzg5MiwgNzQyMDMsIDY0NzE4LCAxMTUwNywgMCwgOTI0MzQsIDExODkyOSwgMCwgCisgICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzOTAxLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKICAgICAxMTU3OCwgMCwgMTE5Mjk2LCAwLCAwLCAwLCAwLCA3NDU2OCwgOTI1NCwgMCwgMTc5NCwgMTIwMjE3LCA2NDUyMSwgNTYyNCwgCiAgICAgMTIwMjIwLCAxMjAyMjEsIDExOTk1OCwgMTIwMjIzLCAzNjE3LCA2NjYzNiwgNjQ4ODYsIDk0MDYxLCAxMjAyMTIsIAogICAgIDEyMDIxMywgMTIwMjE0LCAxODcyLCA2NjUwOCwgMTIwNDY3LCA0MTA3OSwgMTA3NDgsIDU1MDIsIDExOTMzMCwgNDQ1MiwgMCwgCi0gICAgOTgzNzYyLCA5MjUyNiwgNDUxMSwgMCwgOTgzODY4LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAorICAgIDk4Mzc3MSwgOTI1MjYsIDQ1MTEsIDAsIDk4Mzg3NywgNjQ2NzgsIDExNDI1LCAwLCA0MzI0NSwgMTIzMSwgMTk0NzgzLCAKICAgICA2OTkwMywgMCwgOTAwMywgODE5MiwgMCwgNTMwNSwgOTY1MywgMTA2MTYsIDg2OTQsIDk1NDYsIDAsIDAsIDEyMDQ3OCwgCiAgICAgMTIwMjAwLCA2NTIwNSwgMTIwMjAyLCA2NDA2MywgOTg3OCwgNzQ3ODAsIDExOTYyNiwgNzgyMDIsIDY0MDU4LCA4Nzk5LCAKICAgICA0MjEzMSwgMCwgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgODM3LCAxMDU2NywgMCwgNDMxMDMsIDAsIDEyMDc1NCwgCkBAIC0xOTc5MiwyNiArMTk4MTIsMjYgQEAKICAgICA2NDAzMiwgNDI3MzUsIDY0MDM4LCA2NDAzNywgNjQwMzYsIDY0MDM1LCA0MjkxLCAxOTQ5MjgsIDY0MDE1LCA2NDAxNCwgCiAgICAgNjQ2ODEsIDE5NDkzMCwgMCwgNzgxNDUsIDAsIDQzMDkwLCAwLCAzNDc2LCA4OTczLCA2NDAxMiwgNDI0NzMsIDY0MDEwLCAKICAgICA2NDAwOCwgNjQwMDcsIDIwMDMsIDc3MDYsIDY0NTE3LCA3ODE1MywgMjUzOCwgNjQwMDksIDIwNCwgMCwgNDgwMiwgNDExMSwgCi0gICAgODIzOSwgOTA5OCwgNDgwNSwgNjQwMDEsIDY0MDU3LCA3ODg1LCA3MjQ3LCA2NDA1NCwgOTgzMjU4LCAwLCA0NzY3LCA5MzQzLCAKKyAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNjYsIDAsIDQ3NjcsIDkzNDMsIAogICAgIDY0MDQ5LCA2NDA0OCwgMTIwMDM0LCAxMTMzLCA2NDA1MywgNjQwNTIsIDQzNDUzLCA2NDA1MCwgNDEzNDAsIDExODk3NSwgCiAgICAgMTk0ODM1LCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAxOTQ4MzQsIDQyNTIwLCAxMjgyNDksIDAsIAogICAgIDAsIDEwNzYwLCA2NDAyMywgNjQwMjIsIDY0MDIxLCA2NTgyLCA0MzY3MCwgMCwgNjQwMjUsIDkxNjcsIDQyMTUxLCA3ODI0NCwgCi0gICAgOTgzMjI2LCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDc4MjUyLCA3ODI0OCwgCisgICAgOTgzMjMyLCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDc4MjUyLCA3ODI0OCwgCiAgICAgNzc5MTQsIDc4MjQ2LCA3ODI0NywgMCwgNzc5MTUsIDc4NzY2LCA2Nzg4LCAxMzA5NCwgNzc5MjAsIDc1MzIsIDQxNDE0LCAKICAgICA3ODUyMCwgMzE3OSwgNzg1MTgsIDY0NzY5LCA3ODUxNCwgNzg1MTcsIDExNDYxLCA3NDQ1NCwgMTA3NTEsIDkwNTEsIAotICAgIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDAsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIDQxODc0LCAwLCAKLSAgICAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIDAsIDQzNTEsIAotICAgIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIDExOTg5NSwgCi0gICAgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgMTEzNSwgCi0gICAgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MTYsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIDQxNTQ5LCAKLSAgICA3ODQ5NiwgOTgzMzE5LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MjEsIDIwMTMsIDEyODI5MSwgCi0gICAgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgMTE5OTA4LCA5MTM3LCAKLSAgICA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgMjAwMiwgMjAwMCwgCi0gICAgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgNjg0NDYsIDEyMDgxLCAKLSAgICA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2MzcsIDAsIDAsIDMwNTksIDQ0MDI0LCAxMjAyMDQsIAotICAgIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIDM1OTIsIDEwMDc4LCAwLCAKLSAgICAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCA5MjgxLCAzMjk2LCAKLSAgICAxMjg2NSwgMTk5NywgMTg5NSwgCisgICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgOTgzNjI3LCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgMjk0LCAKKyAgICA0MTg3NCwgMCwgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgMTk0ODQ0LCAKKyAgICAwLCA0MzUxLCA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAKKyAgICAxMTk4OTUsIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIAorICAgIDExMzUsIDAsIDAsIDEyODUyNSwgMTk5NSwgNjcyMiwgOTgzOTI1LCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCAKKyAgICA0MTU0OSwgNzg0OTYsIDk4MzMyNywgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgOTgzNjMwLCAyMDEzLCAKKyAgICAxMjgyOTEsIDc4NTMwLCA3ODUzMiwgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIAorICAgIDExOTkwOCwgOTEzNywgNzE1NSwgODk5OSwgMCwgNzg1MzMsIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIAorICAgIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCAwLCA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgOTI2NzQsIDk2MjgsIAorICAgIDY4NDQ2LCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDAsIDAsIDEyMDIwMSwgOTgzNjQ2LCAwLCAwLCAzMDU5LCAKKyAgICA0NDAyNCwgMTIwMjA0LCAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAKKyAgICAzNTkyLCAxMDA3OCwgMCwgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgCisgICAgOTI4MSwgMzI5NiwgMTI4NjUsIDE5OTcsIDE4OTUsIAogfTsKIAogI2RlZmluZSBjb2RlX21hZ2ljIDQ3CkBAIC0xOTgxOSw3ICsxOTgzOSw3IEBACiAjZGVmaW5lIGNvZGVfcG9seSAzMjc3MQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfc3RhcnQgPSAweGYwMDAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX2VuZCA9IDB4ZjAxYzE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjOTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZV9hbGlhc2VzW10gPSB7CiAgICAgMHgwMDAwLAogICAgIDB4MDAwMCwKQEAgLTE5OTgyLDYgKzIwMDAyLDggQEAKICAgICAweDAxQTIsCiAgICAgMHgwMUEzLAogICAgIDB4MDM0RiwKKyAgICAweDA2MUMsCisgICAgMHgwNzA5LAogICAgIDB4MENERSwKICAgICAweDBFOUQsCiAgICAgMHgwRTlGLApAQCAtMjAwMDUsNiArMjAwMjcsMTAgQEAKICAgICAweDIwMkYsCiAgICAgMHgyMDVGLAogICAgIDB4MjA2MCwKKyAgICAweDIwNjYsCisgICAgMHgyMDY3LAorICAgIDB4MjA2OCwKKyAgICAweDIwNjksCiAgICAgMHgyMTE4LAogICAgIDB4MjQ0OCwKICAgICAweDI0NDksCkBAIC0yMDAyOSw2ICsyMDA1NSw4IEBACiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKICAgICAweEZFRkYsCisgICAgMHgxMjJENCwKKyAgICAweDEyMkQ1LAogICAgIDB4MUQwQzUsCiAgICAgMHhFMDEwMCwKICAgICAweEUwMTAxLApAQCAtMjAyNzgsNyArMjAzMDYsNyBAQAogfSBuYW1lZF9zZXF1ZW5jZTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfc3RhcnQgPSAweGYwMjAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhNTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX2VuZCA9IDB4ZjAzYWU7CiBzdGF0aWMgY29uc3QgbmFtZWRfc2VxdWVuY2UgbmFtZWRfc2VxdWVuY2VzW10gPSB7CiAgICAgezIsIHsweDAxMDAsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMTAxLCAweDAzMDB9fSwKQEAgLTIwMzQ5LDYgKzIwMzc3LDE1IEBACiAgICAgezIsIHsweDAyNTksIDB4MDMwMX19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDB9fSwKICAgICB7MiwgezB4MDI1QSwgMHgwMzAxfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDYyN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjQ5fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDNn19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzd9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM4fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZEMH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2RDV9fSwKKyAgICB7MiwgezB4MDY0NiwgMHgwNkE5fX0sCiAgICAgezMsIHsweDA5OTUsIDB4MDlDRCwgMHgwOUI3fX0sCiAgICAgezIsIHsweDBCOTUsIDB4MEJDRH19LAogICAgIHsyLCB7MHgwQjk5LCAweDBCQ0R9fSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvemlwaW1wb3J0LmMgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCmluZGV4IDJmZWIyYTguLjhmZTkxOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemlwaW1wb3J0LmMKKysrIGIvTW9kdWxlcy96aXBpbXBvcnQuYwpAQCAtMTQsNiArMTQsMTAgQEAKICAgICBpbnQgdHlwZTsKIH07CiAKKyNpZmRlZiBBTFRTRVAKK19QeV9JREVOVElGSUVSKHJlcGxhY2UpOworI2VuZGlmCisKIC8qIHppcF9zZWFyY2hvcmRlciBkZWZpbmVzIGhvdyB3ZSBzZWFyY2ggZm9yIGEgbW9kdWxlIGluIHRoZSBaaXAKICAgIGFyY2hpdmU6IHdlIGZpcnN0IHNlYXJjaCBmb3IgYSBwYWNrYWdlIF9faW5pdF9fLCB0aGVuIGZvcgogICAgbm9uLXBhY2thZ2UgLnB5YywgLnB5byBhbmQgLnB5IGVudHJpZXMuIFRoZSAucHljIGFuZCAucHlvIGVudHJpZXMKQEAgLTY2LDkgKzcwLDYgQEAKICAgICBQeU9iamVjdCAqcGF0aCwgKmZpbGVzLCAqdG1wOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW4sIGZsZW47Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKIAogICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoInppcGltcG9ydGVyKCkiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTE3LDYgKzExOCw4IEBACiAgICAgICAgIGlmIChmbGVuID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX1N1YnN0cmluZyhwYXRoLCAwLCBmbGVuKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJub3QgYSBaaXAgZmlsZSIpOwpAQCAtNDY5LDEwICs0NzIsMTMgQEAKICAgICBpZiAoaXNwYWNrYWdlKSB7CiAgICAgICAgIC8qIGFkZCBfX3BhdGhfXyB0byB0aGUgbW9kdWxlICpiZWZvcmUqIHRoZSBjb2RlIGdldHMKICAgICAgICAgICAgZXhlY3V0ZWQgKi8KLSAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aDsKLSAgICAgICAgUHlPYmplY3QgKnN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIFB5T2JqZWN0ICpwa2dwYXRoLCAqZnVsbHBhdGgsICpzdWJuYW1lOwogICAgICAgICBpbnQgZXJyOwogCisgICAgICAgIHN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIGlmIChzdWJuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGZ1bGxwYXRoID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVJWMlVSVVIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YXJjaGl2ZSwgU0VQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wcmVmaXgsIHN1Ym5hbWUpOwpAQCAtNTU0LDkgKzU2MCw2IEBACiB7CiAgICAgWmlwSW1wb3J0ZXIgKnNlbGYgPSAoWmlwSW1wb3J0ZXIgKilvYmo7CiAgICAgUHlPYmplY3QgKnBhdGgsICprZXk7Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqdG9jX2VudHJ5OwogICAgIFB5X3NzaXplX3QgcGF0aF9zdGFydCwgcGF0aF9sZW4sIGxlbjsKIApAQCAtODYyLDYgKzg2NSw3IEBACiAgICAgbG9uZyBsLCBjb3VudDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgY2hhciBuYW1lW01BWFBBVEhMRU4gKyA1XTsKKyAgICBjaGFyIGR1bW15WzhdOyAvKiBCdWZmZXIgdG8gcmVhZCB1bnVzZWQgaGVhZGVyIHZhbHVlcyBpbnRvICovCiAgICAgUHlPYmplY3QgKm5hbWVvYmogPSBOVUxMOwogICAgIGNoYXIgKnAsIGVuZG9mX2NlbnRyYWxfZGlyWzIyXTsKICAgICBQeV9zc2l6ZV90IGFyY19vZmZzZXQ7ICAvKiBBYnNvbHV0ZSBvZmZzZXQgdG8gc3RhcnQgb2YgdGhlIHppcC1hcmNoaXZlLiAqLwpAQCAtODY5LDcgKzg3Myw3IEBACiAgICAgY29uc3QgY2hhciAqY2hhcnNldDsKICAgICBpbnQgYm9vdHN0cmFwOwogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IG9wZW4gWmlwIGZpbGU6ICVSIiwgYXJjaGl2ZSk7CkBAIC05MDUsMTcgKzkwOSwyNSBAQAogCiAgICAgLyogU3RhcnQgb2YgQ2VudHJhbCBEaXJlY3RvcnkgKi8KICAgICBjb3VudCA9IDA7CisgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkKKyAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgIGZvciAoOzspIHsKICAgICAgICAgUHlPYmplY3QgKnQ7CiAgICAgICAgIGludCBlcnI7CiAKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLwogICAgICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOworICAgICAgICBpZiAobCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKGwgIT0gMHgwMjAxNEI1MCkKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogQmFkOiBDZW50cmFsIERpciBGaWxlIEhlYWRlciAqLwotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyA4LCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisKKyAgICAgICAgLyogT24gV2luZG93cywgY2FsbGluZyBmc2VlayB0byBza2lwIG92ZXIgdGhlIGZpZWxkcyB3ZSBkb24ndCB1c2UgaXMKKyAgICAgICAgc2xvd2VyIHRoYW4gcmVhZGluZyB0aGUgZGF0YSBpbnRvIGEgZHVtbXkgYnVmZmVyIGJlY2F1c2UgZnNlZWsgZmx1c2hlcworICAgICAgICBzdGRpbydzIGludGVybmFsIGJ1ZmZlcnMuIFNlZSBpc3N1ZSAjODc0NS4gKi8KKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA0LCBmcCkgIT0gNCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOworCiAgICAgICAgIGZsYWdzID0gKHVuc2lnbmVkIHNob3J0KVB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIGNvbXByZXNzID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgdGltZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CkBAIC05MjQsMTIgKzkzNiwxNSBAQAogICAgICAgICBkYXRhX3NpemUgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIGZpbGVfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgbmFtZV9zaXplID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaGVhZGVyX3NpemUgPSA0NiArIG5hbWVfc2l6ZSArCisgICAgICAgIGhlYWRlcl9zaXplID0gbmFtZV9zaXplICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDQyLCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIGlmIChmcmVhZChkdW1teSwgMSwgOCwgZnApICE9IDgpIC8qIFNraXAgdW51c2VkIGZpZWxkcywgYXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICAgICAgZmlsZV9vZmZzZXQgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCkgKyBhcmNfb2Zmc2V0OworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKG5hbWVfc2l6ZSA+IE1BWFBBVEhMRU4pCiAgICAgICAgICAgICBuYW1lX3NpemUgPSBNQVhQQVRITEVOOwogCkBAIC05NDEsNyArOTU2LDkgQEAKICAgICAgICAgICAgIHArKzsKICAgICAgICAgfQogICAgICAgICAqcCA9IDA7ICAgICAgICAgLyogQWRkIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSAqLwotICAgICAgICBoZWFkZXJfb2Zmc2V0ICs9IGhlYWRlcl9zaXplOworICAgICAgICBmb3IgKDsgaSA8IGhlYWRlcl9zaXplOyBpKyspIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciAqLworICAgICAgICAgICAgaWYoZ2V0YyhmcCkgPT0gRU9GKSAvKiBBdm9pZCBmc2VlayAqLworICAgICAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKIAogICAgICAgICBib290c3RyYXAgPSAwOwogICAgICAgICBpZiAoZmxhZ3MgJiAweDA4MDApCkBAIC05ODgsNyArMTAwNSw3IEBACiAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyB6aXBpbXBvcnQ6IGZvdW5kICVsZCBuYW1lcyBpbiAlUlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBhcmNoaXZlKTsKICAgICByZXR1cm4gZmlsZXM7Ci1mc2Vla19lcnJvcjoKK2ZpbGVfZXJyb3I6CiAgICAgZmNsb3NlKGZwKTsKICAgICBQeV9YREVDUkVGKGZpbGVzKTsKICAgICBQeV9YREVDUkVGKG5hbWVvYmopOwpAQCAtMTA1NSw3ICsxMDcyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmICghZnApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCkBAIC0xMDczLDkgKzEwOTAsMTAgQEAKICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgIGlmIChsICE9IDB4MDQwMzRCNTApIHsKICAgICAgICAgLyogQmFkOiBMb2NhbCBGaWxlIEhlYWRlciAqLwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKLSAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwODcsNiArMTEwNSwxMCBAQAogCiAgICAgbCA9IDMwICsgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7ICAgICAgICAvKiBsb2NhbCBoZWFkZXIgc2l6ZSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBmaWxlX29mZnNldCArPSBsOyAgICAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBkYXRhICovCiAKICAgICBieXRlc19zaXplID0gY29tcHJlc3MgPT0gMCA/IGRhdGFfc2l6ZSA6IGRhdGFfc2l6ZSArIDE7CkBAIC0xMjQ5LDcgKzEyNzEsNyBAQAogfQogCiAvKiBHaXZlbiBhIHN0cmluZyBidWZmZXIgY29udGFpbmluZyBQeXRob24gc291cmNlIGNvZGUsIGNvbXBpbGUgaXQKLSAgIHJldHVybiBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLworICAgYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBjb21waWxlX3NvdXJjZShQeU9iamVjdCAqcGF0aG5hbWUsIFB5T2JqZWN0ICpzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwppbmRleCBmMzEwYmIwLi5mMjJhYWJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCisrKyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKQEAgLTEsMTIgKzEsMjc2IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRdCistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb6ddCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oCistIEZpeCBtaXhlZCBsaW5lIGVuZGluZ3MgaW4gY29udHJpYi92c3R1ZGlvCisKK0NoYW5nZXMgaW4gMS4yLjcuMyAoMTMgQXByIDIwMTMpCistIEZpeCB2ZXJzaW9uIG51bWJlcnMgYW5kIERMTCBuYW1lcyBpbiBjb250cmliL3ZzdHVkaW8vKi96bGliLnJjCisKK0NoYW5nZXMgaW4gMS4yLjcuMiAoMTMgQXByIDIwMTMpCistIENoYW5nZSBjaGVjayBmb3IgYSBmb3VyLWJ5dGUgdHlwZSBiYWNrIHRvIGhleGFkZWNpbWFsCistIEZpeCB0eXBvIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBBZGQgY2FzdHMgaW4gZ3p3cml0ZS5jIGZvciBwb2ludGVyIGRpZmZlcmVuY2VzCisKK0NoYW5nZXMgaW4gMS4yLjcuMSAoMjQgTWFyIDIwMTMpCistIFJlcGxhY2UgdXNlIG9mIHVuc2FmZSBzdHJpbmcgZnVuY3Rpb25zIHdpdGggc25wcmludGYgaWYgYXZhaWxhYmxlCistIEF2b2lkIGluY2x1ZGluZyBzdGRkZWYuaCBvbiBXaW5kb3dzIGZvciBaX1NPTE8gY29tcGlsZSBbTmllc3NpbmtdCistIEZpeCBnemdldGMgdW5kZWZpbmUgd2hlbiBaX1BSRUZJWCBzZXQgW1R1cmtdCistIEVsaW1pbmF0ZSB1c2Ugb2YgbWt0ZW1wIGluIE1ha2VmaWxlIChub3QgYWx3YXlzIGF2YWlsYWJsZSkKKy0gRml4IGJ1ZyBpbiAnRicgbW9kZSBmb3IgZ3pvcGVuKCkKKy0gQWRkIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgZnVuY3Rpb24KKy0gQ29ycmVjdCBjb21tZW50IGluIGRlZmxhdGUuaAorLSBVc2UgX3NucHJpbnRmIGZvciBzbnByaW50ZiBpbiBNaWNyb3NvZnQgQworLSBPbiBEYXJ3aW4sIG9ubHkgdXNlIC91c3IvYmluL2xpYnRvb2wgaWYgbGlidG9vbCBpcyBub3QgQXBwbGUKKy0gRGVsZXRlICItLXZlcnNpb24iIGZpbGUgaWYgY3JlYXRlZCBieSAiYXIgLS12ZXJzaW9uIiBbUmljaGFyZCBHLl0KKy0gRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgdmVyYWNpdHkgb2YgY29tcGlsZXIgZXJyb3IgcmV0dXJuIGNvZGVzCistIEZpeCBDTWFrZSBjb21waWxhdGlvbiBvZiBzdGF0aWMgbGliIGZvciBNU1ZDMjAxMCB4NjQKKy0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbiBpbmZiYWNrOS5jCistIEZpeCBhcmd1bWVudCBjaGVja3MgaW4gZ3psb2dfY29tcHJlc3MoKSBhbmQgZ3psb2dfd3JpdGUoKQorLSBDbGVhbiB1cCB0aGUgdXNhZ2Ugb2Ygel9jb25zdCBhbmQgcmVzcGVjdCBjb25zdCB1c2FnZSB3aXRoaW4gemxpYgorLSBDbGVhbiB1cCBleGFtcGxlcy9nemxvZy5bY2hdIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworLSBBdm9pZCBzaGlmdCBlcXVhbCB0byBiaXRzIGluIHR5cGUgKGNhdXNlZCBlbmRsZXNzIGxvb3ApCistIEZpeCB1bmludGlhbGl6ZWQgdmFsdWUgYnVnIGluIGd6cHV0YygpIGludHJvZHVjZWQgYnkgY29uc3QgcGF0Y2hlcworLSBGaXggbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaW4gZXhhbXBsZXMvenJhbi5jIFtOb3JdCistIEZpeCBidWcgd2hlcmUgZ3pvcGVuKCksIGd6Y2xvc2UoKSB3b3VsZCB3cml0ZSBhbiBlbXB0eSBmaWxlCistIEZpeCBidWcgaW4gZ3pjbG9zZSgpIHdoZW4gZ3p3cml0ZSgpIHJ1bnMgb3V0IG9mIG1lbW9yeQorLSBDaGVjayBmb3IgaW5wdXQgYnVmZmVyIG1hbGxvYyBmYWlsdXJlIGluIGV4YW1wbGVzL2d6YXBwZW5kLmMKKy0gQWRkIG5vdGUgdG8gY29udHJpYi9ibGFzdCB0byB1c2UgYmluYXJ5IG1vZGUgaW4gc3RkaW8KKy0gRml4IGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudGx5IHNpZ25lZCBpbnRlZ2VycyBpbiBjb250cmliL2JsYXN0CistIENoZWNrIGZvciBpbnZhbGlkIGNvZGUgbGVuZ3RoIGNvZGVzIGluIGNvbnRyaWIvcHVmZgorLSBGaXggc2VyaW91cyBidXQgdmVyeSByYXJlIGRlY29tcHJlc3Npb24gYnVnIGluIGluZnRyZWVzLmMKKy0gVXBkYXRlIGluZmxhdGVCYWNrKCkgY29tbWVudHMsIHNpbmNlIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyCistIFVzZSB1bmRlcnNjb3JlZCBJL08gZnVuY3Rpb24gbmFtZXMgZm9yIFdJTkFQSV9GQU1JTFkKKy0gQWRkIF90cl9mbHVzaF9iaXRzIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzIHByZWZpeGVkIGJ5IC0tenByZWZpeAorLSBBZGQgY29udHJpYi92c3R1ZGlvL3ZjMTAgcHJlLWJ1aWxkIHN0ZXAgZm9yIHN0YXRpYyBvbmx5CistIFF1b3RlIC0tdmVyc2lvbi1zY3JpcHQgYXJndW1lbnQgaW4gQ01ha2VMaXN0cy50eHQKKy0gRG9uJ3Qgc3BlY2lmeSAtLXZlcnNpb24tc2NyaXB0IG9uIEFwcGxlIHBsYXRmb3JtcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggY2FzdGluZyBlcnJvciBpbiBjb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKKy0gRml4IHR5cGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBtYXRjaCByZXN1bHQgb2YgZ2V0X2NyY190YWJsZSgpCistIFNpbXBsaWZ5IGNvbnRyaWIvdnN0dWRpby92YzEwIHdpdGggJ2QnIHN1ZmZpeAorLSBBZGQgVE9QIHN1cHBvcnQgdG8gd2luMzIvTWFrZWZpbGUubXNjCistIFN1cG9ydCBpNjg2IGFuZCBhbWQ2NCBhc3NlbWJsZXIgYnVpbGRzIGluIENNYWtlTGlzdHMudHh0CistIEZpeCB0eXBvcyBpbiB0aGUgdXNlIG9mIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaW4gemNvbmYuaAorLSBBZGQgdmMxMSBhbmQgdmMxMiBidWlsZCBmaWxlcyB0byBjb250cmliL3ZzdHVkaW8KKy0gQWRkIGd6dnByaW50ZigpIGFzIGFuIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbiB6bGliCistIEZpeCBjb25maWd1cmUgZm9yIFN1biBzaGVsbAorLSBSZW1vdmUgcnVudGltZSBjaGVjayBpbiBjb25maWd1cmUgZm9yIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUKKy0gQWRkIGNhc3RzIGFuZCBjb25zdHMgdG8gZWFzZSB1c2VyIGNvbnZlcnNpb24gdG8gQysrCistIEFkZCBtYW4gcGFnZXMgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBJbiBNYWtlZmlsZSB1bmluc3RhbGwsIGRvbid0IHJtIGlmIHByZWNlZGluZyBjZCBmYWlscworLSBEbyBub3QgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIGRlZmxhdGVQYXJhbSgpIGhhcyBub3RoaW5nIHRvIHdyaXRlCisKK0NoYW5nZXMgaW4gMS4yLjcgKDIgTWF5IDIwMTIpCistIFJlcGxhY2UgdXNlIG9mIG1lbW1vdmUoKSB3aXRoIGEgc2ltcGxlIGNvcHkgZm9yIHBvcnRhYmlsaXR5CistIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBzdHJlcnJvcgorLSBSZXN0b3JlIGd6Z2V0Y18gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIuNgorLSBGaXggYnVpbGQgd2l0aCBub24tR05VIG1ha2Ugb24gU29sYXJpcworLSBSZXF1aXJlIGdjYyA0LjAgb3IgbGF0ZXIgb24gTWFjIE9TIFggdG8gdXNlIHRoZSBoaWRkZW4gYXR0cmlidXRlCistIEluY2x1ZGUgdW5pc3RkLmggZm9yIFdhdGNvbSBDCistIFVzZSBfX1dBVENPTUNfXyBpbnN0ZWFkIG9mIF9fV0FUQ09NX18KKy0gRG8gbm90IHVzZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaWYgTk9fVklaIGRlZmluZWQKKy0gSW1wcm92ZSB0aGUgZGV0ZWN0aW9uIG9mIG5vIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorLSBBdm9pZCB1c2luZyBfX2ludDY0IGZvciBnY2Mgb3Igc29sbyBjb21waWxhdGlvbgorLSBDYXN0IHRvIGNoYXIgKiBpbiBnenByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyBbWmluc2VyXQorLSBGaXggbWFrZV92bXMuY29tIGZvciBWQVggW1ppbnNlcl0KKy0gRG9uJ3QgdXNlIGxpYnJhcnkgb3IgYnVpbHQtaW4gYnl0ZSBzd2FwcworLSBTaW1wbGlmeSB0ZXN0IGFuZCB1c2Ugb2YgZ2NjIGhpZGRlbiBhdHRyaWJ1dGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlX3coKSB3aGVuIGd6d3JpdGUoKSBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkKKy0gQWRkICJ4IiAoT19FWENMKSBhbmQgImUiIChPX0NMT0VYRUMpIG1vZGVzIHN1cHBvcnQgdG8gZ3pvcGVuKCkKKy0gRml4IGJ1ZyBpbiB0ZXN0L21pbmlnemlwLmMgZm9yIGNvbmZpZ3VyZSAtLXNvbG8KKy0gRml4IGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGxpbmsgZXJyb3JzIFtNb2hhbmF0aGFzXQorLSBBZGQgYWJpbGl0eSB0byBjaG9vc2UgdGhlIGJ1aWxkZXIgaW4gbWFrZV92bXMuY29tIFtTY2h3ZWRhXQorLSBBZGQgREVTVERJUiBzdXBwb3J0IHRvIG1pbmd3MzIgd2luMzIvTWFrZWZpbGUuZ2NjCistIEZpeCBjb21tZW50cyBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHByb3BlciB1c2FnZQorLSBBbGxvdyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb25zIGZvciBjbWFrZQorLSBHZW5lcmF0ZSBhbmQgaW5zdGFsbCB0aGUgcGtnLWNvbmZpZyBmaWxlIHdpdGggY21ha2UKKy0gQnVpbGQgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIHdpdGggY21ha2UKKy0gSW5jbHVkZSB2ZXJzaW9uIHN5bWJvbHMgZm9yIGNtYWtlIGJ1aWxkcworLSBJZiB1c2luZyBjbWFrZSB3aXRoIE1TVkMsIGFkZCB0aGUgc291cmNlIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZXMKKy0gUmVtb3ZlIHVubmVlZGVkIEVYVFJBX0NGTEFHUyBmcm9tIHdpbjMyL01ha2VmaWxlLmdjYyBbVHJ1dGFdCistIE1vdmUgb2Jzb2xldGUgZW14IG1ha2VmaWxlIHRvIG9sZCBbVHJ1dGFdCistIEFsbG93IHRoZSB1c2Ugb2YgLVd1bmRlZiB3aGVuIGNvbXBpbGluZyBvciB1c2luZyB6bGliCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIC11IG9wdGlvbiB3aXRoIG1rdGVtcAorLSBJbXByb3ZlIGluZmxhdGUoKSBkb2N1bWVudGF0aW9uIG9uIHRoZSB1c2Ugb2YgWl9GSU5JU0gKKy0gUmVjb2duaXplIGNsYW5nIGFzIGdjYworLSBBZGQgZ3pvcGVuX3coKSBpbiBXaW5kb3dzIGZvciB3aWRlIGNoYXJhY3RlciBwYXRoIG5hbWVzCistIFJlbmFtZSB6Y29uZi5oIGluIENNYWtlTGlzdHMudHh0IHRvIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkKKy0gQWRkIHNvdXJjZSBkaXJlY3RvcnkgaW4gQ01ha2VMaXN0cy50eHQgZm9yIGJ1aWxkaW5nIGV4YW1wbGVzCistIExvb2sgaW4gYnVpbGQgZGlyZWN0b3J5IGZvciB6bGliLnBjIGluIENNYWtlTGlzdHMudHh0CistIFJlbW92ZSBnemZsYWdzIGZyb20gemxpYnZjLmRlZiBpbiB2YzkgYW5kIHZjMTAKKy0gRml4IGNvbnRyaWIvbWluaXppcCBjb21waWxhdGlvbiBpbiB0aGUgTWluR1cgZW52aXJvbm1lbnQKKy0gVXBkYXRlIC4vY29uZmlndXJlIGZvciBTb2xhcmlzLCBzdXBwb3J0IC0tNjQgW01vb25leV0KKy0gUmVtb3ZlIC1SLiBmcm9tIFNvbGFyaXMgc2hhcmVkIGJ1aWxkIChwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZSkKKy0gQXZvaWQgcmFjZSBjb25kaXRpb24gZm9yIHBhcmFsbGVsIG1ha2UgKC1qKSBydW5uaW5nIGV4YW1wbGUKKy0gRml4IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiBnZXRfY3JjX3RhYmxlKCkgYW5kIGNyY190YWJsZQorLSBGaXggcGFyc2luZyBvZiB2ZXJzaW9uIHdpdGggIi0iIGluIENNYWtlTGlzdHMudHh0IFtTbmlkZXIsIFppZWdsZXJdCistIEZpeCB0aGUgcGF0aCB0byB6bGliLm1hcCBpbiBDTWFrZUxpc3RzLnR4dAorLSBGb3JjZSB0aGUgbmF0aXZlIGxpYnRvb2wgaW4gTWFjIE9TIFggdG8gYXZvaWQgR05VIGxpYnRvb2wgW0JlZWJlXQorLSBBZGQgaW5zdHJ1Y3Rpb25zIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBmb3Igc2hhcmVkIGluc3RhbGwgW1RvcnJpXQorCitDaGFuZ2VzIGluIDEuMi42LjEgKDEyIEZlYiAyMDEyKQorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSBPYmplY3RpdmUtQyByZXNlcnZlZCBuYW1lICJpZCIKKy0gSW5jbHVkZSBpby5oIGluIGd6Z3V0cy5oIGZvciBNaWNyb3NvZnQgY29tcGlsZXJzCistIEZpeCBwcm9ibGVtIHdpdGggLi9jb25maWd1cmUgLS1wcmVmaXggYW5kIGd6Z2V0YyBtYWNybworLSBJbmNsdWRlIGd6X2hlYWRlciBkZWZpbml0aW9uIHdoZW4gY29tcGlsaW5nIHpsaWIgc29sbworLSBQdXQgZ3pmbGFncygpIGZ1bmN0aW9uYWxpdHkgYmFjayBpbiB6dXRpbC5jCistIEF2b2lkIGxpYnJhcnkgaGVhZGVyIGluY2x1ZGUgaW4gY3JjMzIuYyBmb3IgWl9TT0xPCistIFVzZSBuYW1lIGluIEdDQ19DTEFTU0lDIGFzIEMgY29tcGlsZXIgZm9yIGNvdmVyYWdlIHRlc3RpbmcsIGlmIHNldAorLSBNaW5vciBjbGVhbnVwIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBbWmluc2VyXQorLSBSZW1vdmUgdW5uZWNlc3NhcnkgZ3pnZXRjXyBmdW5jdGlvbgorLSBVc2Ugb3B0aW1pemVkIGJ5dGUgc3dhcCBvcGVyYXRpb25zIGZvciBNaWNyb3NvZnQgYW5kIEdOVSBbU255ZGVyXQorLSBGaXggbWlub3IgdHlwbyBpbiB6bGliLmggY29tbWVudHMgW1J6ZXNuaW93aWVja2ldCisKK0NoYW5nZXMgaW4gMS4yLjYgKDI5IEphbiAyMDEyKQorLSBVcGRhdGUgdGhlIFBhc2NhbCBpbnRlcmZhY2UgaW4gY29udHJpYi9wYXNjYWwKKy0gRml4IGZ1bmN0aW9uIG51bWJlcnMgZm9yIGd6Z2V0Y18gaW4gemxpYnZjLmRlZiBmaWxlcworLSBGaXggY29uZmlndXJlLmFjIGZvciBjb250cmliL21pbml6aXAgW1NjaGlmZmVyXQorLSBGaXggbGFyZ2UtZW50cnkgZGV0ZWN0aW9uIGluIG1pbml6aXAgb24gNjQtYml0IHN5c3RlbXMgW1NjaGlmZmVyXQorLSBIYXZlIC4vY29uZmlndXJlIHVzZSB0aGUgY29tcGlsZXIgcmV0dXJuIGNvZGUgZm9yIGVycm9yIGluZGljYXRpb24KKy0gRml4IENNYWtlTGlzdHMudHh0IGZvciBjcm9zcyBjb21waWxhdGlvbiBbTWNDbHVyZV0KKy0gRml4IGNvbnRyaWIvbWluaXppcC96aXAuYyBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMgW0RhbHNuZXNdCistIEZpeCBjb21waWxhdGlvbiBvZiBjb250cmliL21pbml6aXAgb24gRnJlZUJTRCBbTWFycXVlel0KKy0gQ29ycmVjdCBzdWdnZXN0ZWQgdXNhZ2VzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbU2hhY2hhciwgSG9ydmF0aF0KKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDIG9uIGFsbCBwbGF0Zm9ybXMgW1RydXRhXQorLSBNYWtlIHZlcnNpb24gZXhwbGljaXQgaW4gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZS5hYyBbQm9zbWFuc10KKy0gQXZvaWQgd2FybmluZyBmb3Igbm8gZW5jcnlwdGlvbiBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIE1pbm9yIGNsZWFudXAgdXAgY29udHJpYi9taW5pemlwL3VuemlwLmMgW1ZvbGxhbnRdCistIEZpeCBidWcgd2hlbiBjb21waWxpbmcgbWluaXppcCB3aXRoIEMrKyBbVm9sbGFudF0KKy0gUHJvdGVjdCBmb3IgbG9uZyBuYW1lIGFuZCBleHRyYSBmaWVsZHMgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBdm9pZCBzb21lIHdhcm5pbmdzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQWRkIC1JLi4vLi4gLUwuLi8uLiB0byBDRkxBR1MgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBBZGQgbWlzc2luZyBsaWJzIHRvIG1pbml6aXAgbGlua2VyIGNvbW1hbmQKKy0gQWRkIHN1cHBvcnQgZm9yIFZQQVRIIGJ1aWxkcyBpbiBjb250cmliL21pbml6aXAKKy0gQWRkIGFuIC0tZW5hYmxlLWRlbW9zIG9wdGlvbiB0byBjb250cmliL21pbml6aXAvY29uZmlndXJlCistIEFkZCB0aGUgZ2VuZXJhdGlvbiBvZiBjb25maWd1cmUubG9nIGJ5IC4vY29uZmlndXJlCistIEV4aXQgd2hlbiByZXF1aXJlZCBwYXJhbWV0ZXJzIG5vdCBwcm92aWRlZCB0byB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gSGF2ZSBnenB1dGMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgd3JpdHRlbiBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudAorLSBVc2UgdGhlIC1tIG9wdGlvbiBvbiBsZGNvbmZpZyBmb3IgQlNEIHN5c3RlbXMgW1RvYmlhc10KKy0gQ29ycmVjdCBpbiB6bGliLm1hcCB3aGVuIGRlZmxhdGVSZXNldEtlZXAgd2FzIGFkZGVkCisKK0NoYW5nZXMgaW4gMS4yLjUuMyAoMTUgSmFuIDIwMTIpCistIFJlc3RvcmUgZ3pnZXRjIGZ1bmN0aW9uIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eQorLSBEbyBub3QgdXNlIF9sc2Vla2k2NCB1bmRlciBCb3JsYW5kIEMrKyBbVHJ1dGFdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBSZW1vdmUgb2xkL3Zpc3VhbGM2IGdpdmVuIENNYWtlZmlsZSBhbmQgb3RoZXIgYWx0ZXJuYXRpdmVzCistIFVwZGF0ZSBBUzQwMCBidWlsZCBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiBbTW9ubmVyYXRdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5nY2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBQZXJtaXQgc3Ryb25nZXIgZmx1c2hlcyBhZnRlciBaX0JMT0NLIGZsdXNoZXMKKy0gQXZvaWQgZXh0cmFuZW91cyBlbXB0eSBibG9ja3Mgd2hlbiBkb2luZyBlbXB0eSBmbHVzaGVzCistIFBlcm1pdCBaX05VTEwgYXJndW1lbnRzIHRvIGRlZmxhdGVQZW5kaW5nCistIEFsbG93IGRlZmxhdGVQcmltZSgpIHRvIGluc2VydCBiaXRzIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJlYW0KKy0gUmVtb3ZlIHNlY29uZCBlbXB0eSBzdGF0aWMgYmxvY2sgZm9yIFpfUEFSVElBTF9GTFVTSAorLSBXcml0ZSBvdXQgYWxsIG9mIHRoZSBhdmFpbGFibGUgYml0cyB3aGVuIHVzaW5nIFpfQkxPQ0sKKy0gSW5zZXJ0IHRoZSBmaXJzdCB0d28gc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBhZnRlciBhIGZsdXNoCisKK0NoYW5nZXMgaW4gMS4yLjUuMiAoMTcgRGVjIDIwMTEpCistIGZpeCBsZCBlcnJvcjogdW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBkZXBlbmRlbmN5ICdaTElCXzEuMi41JworLSB1c2UgcmVsYXRpdmUgc3ltbGlua3MgZm9yIHNoYXJlZCBsaWJzCistIEF2b2lkIHNlYXJjaGluZyBwYXN0IHdpbmRvdyBmb3IgWl9STEUgc3RyYXRlZ3kKKy0gQXNzdXJlIHRoYXQgaGlnaC13YXRlciBtYXJrIGluaXRpYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGluIGRlZmxhdGUKKy0gQWRkIGFzc2VydGlvbnMgdG8gZmlsbF93aW5kb3coKSBpbiBkZWZsYXRlLmMgdG8gbWF0Y2ggY29tbWVudHMKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIFJFQURNRQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGd6cmVhZC5jCistIEZpeCBidWcgaW4gZ3pnZXRzKCkgZm9yIGEgY29uY2F0ZW5hdGVkIGVtcHR5IGd6aXAgc3RyZWFtCistIENvcnJlY3QgZXJyb3IgaW4gY29tbWVudCBmb3IgZ3pfbWFrZSgpCistIENoYW5nZSBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBpZ25vcmUganVuayBhZnRlciBnemlwIHN0cmVhbXMKKy0gQWxsb3cgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gY29udGludWUgYWZ0ZXIgZ3pjbGVhcmVycigpCistIEFsbG93IGd6cmV3aW5kKCkgYW5kIGd6c2VlaygpIGFmdGVyIGEgcHJlbWF0dXJlIGVuZC1vZi1maWxlCistIFNpbXBsaWZ5IGd6c2VlaygpIG5vdyB0aGF0IHJhdyBhZnRlciBnemlwIGlzIGlnbm9yZWQKKy0gQ2hhbmdlIGd6Z2V0YygpIHRvIGEgbWFjcm8gZm9yIHNwZWVkICh+NDAlIHNwZWVkdXAgaW4gdGVzdGluZykKKy0gRml4IGd6Y2xvc2UoKSB0byByZXR1cm4gdGhlIGFjdHVhbCBlcnJvciBsYXN0IGVuY291bnRlcmVkCistIEFsd2F5cyBhZGQgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvciB3aW5kb3dzCistIEluY2x1ZGUgemNvbmYuaCBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gSW5jbHVkZSB6Y29uZi5oLmNtYWtlaW4gZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIFVwZGF0ZSB6Y29uZi5oLmNtYWtlaW4gb24gbWFrZSBkaXN0Y2xlYW4KKy0gTWVyZ2UgdmVzdGlnaWFsIHZzbnByaW50ZiBkZXRlcm1pbmF0aW9uIGZyb20genV0aWwuaCB0byBnemd1dHMuaAorLSBDbGFyaWZ5IGhvdyBnem9wZW4oKSBhcHBlbmRzIGluIHpsaWIuaCBjb21tZW50cworLSBDb3JyZWN0IGRvY3VtZW50YXRpb24gb2YgZ3pkaXJlY3QoKSBzaW5jZSBqdW5rIGF0IGVuZCBub3cgaWdub3JlZAorLSBBZGQgYSB0cmFuc3BhcmVudCB3cml0ZSBtb2RlIHRvIGd6b3BlbigpIHdoZW4gJ1QnIGlzIGluIHRoZSBtb2RlCistIFVwZGF0ZSBweXRob24gbGluayBpbiB6bGliIG1hbiBwYWdlCistIEdldCBpbmZmaXhlZC5oIGFuZCBNQUtFRklYRUQgcmVzdWx0IHRvIG1hdGNoCistIEFkZCBhIC4vY29uZmlnIC0tc29sbyBvcHRpb24gdG8gbWFrZSB6bGliIHN1YnNldCB3aXRoIG5vIGxpYmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKKy0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRlIGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBhdm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRoIEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgdG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5mbGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdpdGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNldERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAgYW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendyaXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBIYXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2luZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBGaXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBhc3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhjZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8gcmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2YgcmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBpbiAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVpbGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJdCistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBibG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIvcHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWluaXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmlsZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBvZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4uLikgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFkZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFsbG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtLb2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2luMzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2luZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBfRklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBjb21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2VzIG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25mLmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAwIHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBzZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFkbGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklTSCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBvdXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2NvbWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5jKCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVuZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0CistIENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZvciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenByaW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJFRExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQgZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJlZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFkZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1MgWCBbQm9yc3RlbF0KKwogQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCiAtIERpc2FibGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQogLSBEZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCiAtIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCiAtIFVwZGF0ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAogLSBFeGl0IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENoZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KIAogQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKIC0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQpAQCAtMjYxLDcgKzUyNSw3IEBACiAtIENsZWFyIGJ5dGVzIGFmdGVyIGRlZmxhdGUgbG9va2FoZWFkIHRvIGF2b2lkIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEKIC0gQ2hhbmdlIGEgbGltaXQgaW4gaW5mdHJlZXMuYyB0byBiZSBtb3JlIHRyYW5zcGFyZW50IHRvIENvdmVyaXR5IFByZXZlbnQKIC0gVXBkYXRlIHdpbjMyL3psaWIuZGVmIHdpdGggZXhwb3J0ZWQgc3ltYm9scyBmcm9tIHpsaWIuaAotLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaCBbV2lsbGVtXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9ycyBpbiB6bGliLmggW1dpbGxlbSwgU29icmFkb10KIC0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3IGJsb2NrCiAtIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRlIGV4aXN0aW5nIGJpdCBidWZmZXIKIC0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxhdGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvRkFRIGIvTW9kdWxlcy96bGliL0ZBUQppbmRleCAxYTIyNzUwLi45OWI3Y2Y5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvRkFRCisrKyBiL01vZHVsZXMvemxpYi9GQVEKQEAgLTQ0LDggKzQ0LDggQEAKIAogIDYuIFdoZXJlJ3MgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBldGMuKT8KIAotICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyBleGFtcGxlLmMgYW5kCi0gICAgbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCisgICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3QvZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCiAKICA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAuLi4/CiAKQEAgLTg0LDggKzg0LDEwIEBACiAKIDEzLiBIb3cgY2FuIEkgbWFrZSBhIFVuaXggc2hhcmVkIGxpYnJhcnk/CiAKLSAgICBtYWtlIGNsZWFuCi0gICAgLi9jb25maWd1cmUgLXMKKyAgICBCeSBkZWZhdWx0IGEgc2hhcmVkIChhbmQgYSBzdGF0aWMpIGxpYnJhcnkgaXMgYnVpbHQgZm9yIFVuaXguICBTbzoKKworICAgIG1ha2UgZGlzdGNsZWFuCisgICAgLi9jb25maWd1cmUKICAgICBtYWtlCiAKIDE0LiBIb3cgZG8gSSBpbnN0YWxsIGEgc2hhcmVkIHpsaWIgbGlicmFyeSBvbiBVbml4PwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgY29ycmVjdGx5IHBvaW50cyB0byB0aGUgemxpYiBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUwIGZvciB0aGUgImRlZmxhdGUiCiAgICAgdHJhbnNmZXIgZW5jb2RpbmcsIHRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mIHNlcnZlcnMgYW5kIGJyb3dzZXJzIHRoYXQKICAgICBpbmNvcnJlY3RseSBwcm9kdWNlIG9yIGV4cGVjdCByYXcgZGVmbGF0ZSBkYXRhIHBlciB0aGUgZGVmbGF0ZQotICAgIHNwZWNmaWNpYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKKyAgICBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCiAgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQogICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKICAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvSU5ERVggYi9Nb2R1bGVzL3psaWIvSU5ERVgKaW5kZXggZjZjNTFjYS4uMmJhMDY0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0lOREVYCisrKyBiL01vZHVsZXMvemxpYi9JTkRFWApAQCAtNyw2ICs3LDkgQEAKIFJFQURNRSAgICAgICAgICBndWVzcyB3aGF0CiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAogbWFrZV92bXMuY29tICAgIG1ha2VmaWxlIGZvciBWTVMKK3Rlc3QvZXhhbXBsZS5jICB6bGliIHVzYWdlcyBleGFtcGxlcyBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9taW5pZ3ppcC5jIG1pbmltYWwgZ3ppcC1saWtlIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvaW5mY292ZXIuYyBpbmYqLmMgY29kZSBjb3ZlcmFnZSBmb3IgYnVpbGQgY292ZXJhZ2UgdGVzdGluZwogdHJlZWJ1aWxkLnhtbCAgIFhNTCBkZXNjcmlwdGlvbiBvZiBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMKIHpjb25mLmguY21ha2VpbiB6Y29uZi5oIHRlbXBsYXRlIGZvciBjbWFrZQogemNvbmYuaC5pbiAgICAgIHpjb25mLmggdGVtcGxhdGUgZm9yIGNvbmZpZ3VyZQpAQCAtMTQsOSArMTcsMTEgQEAKIHpsaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQREYgZm9ybWF0CiB6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCiB6bGliLnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYi5wYy5jbWFrZWluIHpsaWIucGMgdGVtcGxhdGUgZm9yIGNtYWtlCiB6bGliMmFuc2kgICAgICAgcGVybCBzY3JpcHQgdG8gY29udmVydCBzb3VyY2UgZmlsZXMgZm9yIEMrKyBjb21waWxhdGlvbgogCiBhbWlnYS8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBbWlnYSBTQVMgQworYXM0MDAvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQVMvNDAwCiBkb2MvICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0cyBhbmQgYWxnb3JpdGhtcwogbXNkb3MvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgTVNET1MKIG5pbnRlbmRvZHMvICAgICBtYWtlZmlsZSBmb3IgTmludGVuZG8gRFMKQEAgLTU2LDEwICs2MSw4IEBACiB6dXRpbC5jCiB6dXRpbC5oCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtczoKLWV4YW1wbGUuYwotbWluaWd6aXAuYwotU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCiAKLSAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb24gYnkgdGhpcmQgcGFydGllcworICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbnMgYnkgdGhpcmQgcGFydGllcwogU2VlIGNvbnRyaWIvUkVBRE1FLmNvbnRyaWIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbiBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgppbmRleCA1YjE1YmQwLi5jNjFhYTMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYgotIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMzIsMTEgKzMyLDEyIEBACiAKIFNUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjUKK1NIQVJFRExJQlY9bGliei5zby4xLjIuOAogU0hBUkVETElCTT1saWJ6LnNvLjEKIExJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAotQVI9YXIgcmMKK0FSPWFyCitBUkZMQUdTPXJjCiBSQU5MSUI9cmFubGliCiBMRENPTkZJRz1sZGNvbmZpZwogTERTSEFSRURMSUJDPS1sYwpAQCAtNTMsMTEgKzU0LDEzIEBACiBtYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKIHBrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKIAotT0JKQyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZGVmbGF0ZS5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIFwKLQlnendyaXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHVuY29tcHIubyB6dXRpbC5vCitPQkpaID0gYWRsZXIzMi5vIGNyYzMyLm8gZGVmbGF0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB6dXRpbC5vCitPQkpHID0gY29tcHJlc3MubyB1bmNvbXByLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vCitPQkpDID0gJChPQkpaKSAkKE9CSkcpCiAKLVBJQ19PQkpDID0gYWRsZXIzMi5sbyBjb21wcmVzcy5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIFwKLQlnendyaXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHVuY29tcHIubG8genV0aWwubG8KK1BJQ19PQkpaID0gYWRsZXIzMi5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHp1dGlsLmxvCitQSUNfT0JKRyA9IGNvbXByZXNzLmxvIHVuY29tcHIubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gZ3p3cml0ZS5sbworUElDX09CSkMgPSAkKFBJQ19PQkpaKSAkKFBJQ19PQkpHKQogCiAjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwogT0JKQSA9CkBAIC04MCwzNSArODMsNDkgQEAKIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKIAogdGVzdHN0YXRpYzogc3RhdGljCi0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGU7IHRoZW4gXAorCUBUTVBTVD10bXBzdF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNUCiAKIHRlc3RzaGFyZWQ6IHNoYXJlZAogCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAogCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCiAJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKIAlTSExJQl9QQVRIPWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAotCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2g7IHRoZW4gXAorCVRNUFNIPXRtcHNoXyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaCAkJFRNUFNIOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNICiAKIHRlc3Q2NDogYWxsNjQKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NDsgdGhlbiBcCisJQFRNUDY0PXRtcDY0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NCAkJFRNUDY0OyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUDY0CisKK2luZmNvdmVyLm86IHRlc3QvaW5mY292ZXIuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9pbmZjb3Zlci5jCisKK2luZmNvdmVyOiBpbmZjb3Zlci5vIGxpYnouYQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBpbmZjb3Zlci5vIGxpYnouYQorCitjb3ZlcjogaW5mY292ZXIKKwlybSAtZiAqLmdjZGEKKwkuL2luZmNvdmVyCisJZ2NvdiBpbmYqLmMKIAogbGliei5hOiAkKE9CSlMpCi0JJChBUikgJEAgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAKIG1hdGNoLm86IG1hdGNoLlMKQEAgLTEyMywxMSArMTQwLDE3IEBACiAJbXYgX21hdGNoLm8gbWF0Y2gubG8KIAlybSAtZiBfbWF0Y2gucwogCi1leGFtcGxlNjQubzogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgZXhhbXBsZS5jCitleGFtcGxlLm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYwogCi1taW5pZ3ppcDY0Lm86IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBtaW5pZ3ppcC5jCittaW5pZ3ppcC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKKworbWluaWd6aXA2NC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCiAKIC5TVUZGSVhFUzogLmxvCiAKQEAgLTEzNiw3ICsxNTksNyBAQAogCSQoQ0MpICQoU0ZMQUdTKSAtRFBJQyAtYyAtbyBvYmpzLyQqLm8gJDwKIAktQG12IG9ianMvJCoubyAkQAogCi0kKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKQorcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LmEKIAkkKExEU0hBUkVEKSAkKFNGTEFHUykgLW8gJEAgJChQSUNfT0JKUykgJChMRFNIQVJFRExJQkMpICQoTERGTEFHUykKIAlybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKQogCWxuIC1zICRAICQoU0hBUkVETElCKQpAQCAtMTY4LDE0ICsxOTEsMTYgQEAKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCiAJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCiAJY3AgJChTVEFUSUNMSUIpICQoREVTVERJUikkKGxpYmRpcikKLQljcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBjaG1vZCB1PXJ3LGdvPXIgJChTVEFUSUNMSUIpCi0JLUAoY2QgJChERVNURElSKSQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQktQGNkICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IGlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgY2htb2QgNzU1ICQoU0hBUkVETElCVik7IFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRpcikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7IHRoZW4gXAorCSAgY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBcCisJICBlY2hvICJjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikiOyBcCisJICBjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCisJICBlY2hvICJjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpIjsgXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAogCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQogCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQpAQCAtMTkxLDIyICsyMTYsMjUgQEAKIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgKIAogdW5pbnN0YWxsOgotCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBybSAtZiB6bGliLmggemNvbmYuaAotCWNkICQoREVTVERJUikkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpICYmIHJtIC1mIHpsaWIuaCB6Y29uZi5oCisJY2QgJChERVNURElSKSQobGliZGlyKSAmJiBybSAtZiBsaWJ6LmE7IFwKKwlpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKIAkgIHJtIC1mICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKIAlmaQotCWNkICQoREVTVERJUikkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBybSAtZiB6bGliLnBjCisJY2QgJChERVNURElSKSQobWFuM2RpcikgJiYgcm0gLWYgemxpYi4zCisJY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKSAmJiBybSAtZiB6bGliLnBjCiAKIGRvY3M6IHpsaWIuMy5wZGYKIAogemxpYi4zLnBkZjogemxpYi4zCiAJZ3JvZmYgLW1hbmRvYyAtZiBIIC1UIHBzIHpsaWIuMyB8IHBzMnBkZiAtIHpsaWIuMy5wZGYKIAotemNvbmYuaC5pbjogemNvbmYuaC5jbWFrZWluCi0Jc2VkICIvXiNjbWFrZWRlZmluZS9EIiA8IHpjb25mLmguY21ha2VpbiA+IHpjb25mLmguaW4KLQl0b3VjaCAtciB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaC5pbgoremNvbmYuaC5jbWFrZWluOiB6Y29uZi5oLmluCisJLUAgVEVNUEZJTEU9emNvbmZoXyQkOyBcCisJZWNobyAiLyNkZWZpbmUgWkNPTkZfSC8gYVxcXFxcbiNjbWFrZWRlZmluZSBaX1BSRUZJWFxcXFxcbiNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0hcbiIgPj4gJCRURU1QRklMRSAmJlwKKwlzZWQgLWYgJCRURU1QRklMRSB6Y29uZi5oLmluID4gemNvbmYuaC5jbWFrZWluICYmXAorCXRvdWNoIC1yIHpjb25mLmguaW4gemNvbmYuaC5jbWFrZWluICYmXAorCXJtICQkVEVNUEZJTEUKIAogemNvbmY6IHpjb25mLmguaW4KIAljcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKQEAgLTIxNiwxMyArMjQ0LDE2IEBACiAJcm0gLWYgKi5vICoubG8gKn4gXAogCSAgIGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgZXhhbXBsZXNoJChFWEUpIG1pbmlnemlwc2gkKEVYRSkgXAogCSAgIGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUpIFwKKwkgICBpbmZjb3ZlciBcCiAJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCiAJcm0gLXJmIG9ianMKKwlybSAtZiAqLmdjZGEgKi5nY25vICouZ2NvdgorCXJtIC1mIGNvbnRyaWIvaW5mYmFjazkvKi5nY2RhIGNvbnRyaWIvaW5mYmFjazkvKi5nY25vIGNvbnRyaWIvaW5mYmFjazkvKi5nY292CiAKIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiBkb2NzCi0Jcm0gLWYgTWFrZWZpbGUgemxpYi5wYworZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiB6Y29uZi5oLmNtYWtlaW4gZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZwogCS1Acm0gLWYgLkRTX1N0b3JlCiAJLUBwcmludGYgJ2FsbDpcblx0LUBlY2hvICJQbGVhc2UgdXNlIC4vY29uZmlndXJlIGZpcnN0LiAgVGhhbmsgeW91LiJcbicgPiBNYWtlZmlsZQogCS1AcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9SRUFETUUgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCmluZGV4IGQ0MjE5YmYuLjVjYTlkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9SRUFETUUKKysrIGIvTW9kdWxlcy96bGliL1JFQURNRQpAQCAtMSwyMiArMSwyMiBAQAogWkxJQiBEQVRBIENPTVBSRVNTSU9OIExJQlJBUlkKIAotemxpYiAxLjIuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKK3psaWIgMS4yLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KQotYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQKK3JmYzE5NTIgKGd6aXAgZm9ybWF0KS4KIAogQWxsIGZ1bmN0aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSB6bGliLmgKICh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBnemlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKLW9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlIG1pbmlnemlwLmMuICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UgZmlsZXMgZXhjZXB0IGV4YW1wbGUuYyBhbmQKLW1pbmlnemlwLmMuCitvZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSB0ZXN0L2V4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQKK3RoZSBsaWJyYXJ5IGlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlCit0ZXN0L21pbmlnemlwLmMuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZQorZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgogCiBUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0CiB0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQgIi4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCi13ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlIG9uZQotb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQord2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZQorb25lIG9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKIG1ha2Vfdm1zLmNvbS4KIAogUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAZ3ppcC5vcmc+LCBvciB0byBHaWxsZXMgVm9sbGFudApAQCAtMzEsNyArMzEsNyBAQAogaXNzdWUgb2YgRHIuICBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdAogaHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8wMS96bGliLWVuZ2luZS8gLgogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjUgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi44IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApAQCAtNDQsNyArNDQsNyBAQAogCiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbCAuCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sIC4KIAogemxpYiBpcyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgogCkBAIC04NCw3ICs4NCw3IEBACiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwppbmRleCA2NWFkNmE1Li5hODY4ZjA3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCisrKyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksOSArOSw5IEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLWxvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8odUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOwogCi0jZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBCQVNFIDY1NTIxICAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1BWCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIApAQCAtMjEsMzkgKzIxLDQ0IEBACiAjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKIAotLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAqLworLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAtLQorICAgdHJ5IGl0IGJvdGggd2F5cyB0byBzZWUgd2hpY2ggaXMgZmFzdGVyICovCiAjaWZkZWYgTk9fRElWSURFCi0jICBkZWZpbmUgTU9EKGEpIFwKKy8qIG5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgQkFTRSBpcyA2NTUyMSwgd2hlcmUgNjU1MzYgJSA2NTUyMSA9PSAxNQorICAgKHRoYW5rIHlvdSB0byBKb2huIFJlaXNlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQpICovCisjICBkZWZpbmUgQ0hPUChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE2KSkgYSAtPSAoQkFTRSA8PCAxNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTUpKSBhIC09IChCQVNFIDw8IDE1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEzKSkgYSAtPSAoQkFTRSA8PCAxMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTIpKSBhIC09IChCQVNFIDw8IDEyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEwKSkgYSAtPSAoQkFTRSA8PCAxMCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOSkpIGEgLT0gKEJBU0UgPDwgOSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOCkpIGEgLT0gKEJBU0UgPDwgOCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNykpIGEgLT0gKEJBU0UgPDwgNyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNikpIGEgLT0gKEJBU0UgPDwgNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKLSMgIGRlZmluZSBNT0Q0KGEpIFwKKyMgIGRlZmluZSBNT0QoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICBDSE9QKGEpOyBcCisgICAgICAgIE1PRDI4KGEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0Q2MyhhKSBcCisgICAgZG8geyAvKiB0aGlzIGFzc3VtZXMgYSBpcyBub3QgbmVnYXRpdmUgKi8gXAorICAgICAgICB6X29mZjY0X3QgdG1wID0gYSA+PiAzMjsgXAorICAgICAgICBhICY9IDB4ZmZmZmZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA4KSAtICh0bXAgPDwgNSkgKyB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICMgIGRlZmluZSBNT0QoYSkgYSAlPSBCQVNFCi0jICBkZWZpbmUgTU9ENChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0QyOChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0Q2MyhhKSBhICU9IEJBU0UKICNlbmRpZgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCiAgICAgICAgICAgICBhZGxlciAtPSBCQVNFOwotICAgICAgICBNT0Q0KHN1bTIpOyAgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCisgICAgICAgIE1PRDI4KHN1bTIpOyAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KICAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOwogICAgIH0KIApAQCAtMTM3LDggKzE0MiwxMyBAQAogICAgIHVuc2lnbmVkIGxvbmcgc3VtMjsKICAgICB1bnNpZ25lZCByZW07CiAKKyAgICAvKiBmb3IgbmVnYXRpdmUgbGVuLCByZXR1cm4gaW52YWxpZCBhZGxlcjMyIGFzIGEgY2x1ZSBmb3IgZGVidWdnaW5nICovCisgICAgaWYgKGxlbjIgPCAwKQorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZlVMOworCiAgICAgLyogdGhlIGRlcml2YXRpb24gb2YgdGhpcyBmb3JtdWxhIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIgKi8KLSAgICByZW0gPSAodW5zaWduZWQpKGxlbjIgJSBCQVNFKTsKKyAgICBNT0Q2MyhsZW4yKTsgICAgICAgICAgICAgICAgLyogYXNzdW1lcyBsZW4yID49IDAgKi8KKyAgICByZW0gPSAodW5zaWduZWQpbGVuMjsKICAgICBzdW0xID0gYWRsZXIxICYgMHhmZmZmOwogICAgIHN1bTIgPSByZW0gKiBzdW0xOwogICAgIE1PRChzdW0yKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0IGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKaW5kZXggYjAyMmRkZS4uYzk3ZjQ5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKKysrIGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKQEAgLTEyMSw3ICsxMjEsNyBAQAoga2J5dGVzLiAgWW91IGNhbiBpbWFnaW5lIHRoYXQgZmlsbGluZyBpbiBhIDJeMTUgZW50cnkgdGFibGUgZm9yIGEgMTUtYml0IGNvZGUKIHdvdWxkIHRha2UgdG9vIGxvbmcgaWYgeW91J3JlIG9ubHkgZGVjb2Rpbmcgc2V2ZXJhbCB0aG91c2FuZCBzeW1ib2xzLiAgQXQgdGhlCiBvdGhlciBleHRyZW1lLCB5b3UgY291bGQgbWFrZSBhIG5ldyB0YWJsZSBmb3IgZXZlcnkgYml0IGluIHRoZSBjb2RlLiAgSW4gZmFjdCwKLXRoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0d28gbXVjaCB0aW1lCit0aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZQogdHJhdmVyc2luZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KIAogU28gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUgb2YgdGhlIHRpbWUgdG8KQEAgLTIwNiw0ICsyMDYsNCBAQAogcHAuIDMzNy0zNDMuCiAKIGBgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24nJyBhdmFpbGFibGUgaW4KLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCmluZGV4IGVhNGRmYmUuLjZlOTc2MjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCisrKyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogI2lmZGVmIE1BWFNFR182NEsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZSBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKaW5kZXggYmQ5ZWRkMi4uYjc3YThhOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCkBAIC0xMywzOSArMTMsNTIgQEAKICMgSWYgeW91IGhhdmUgcHJvYmxlbXMsIHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MgYmVmb3JlIHJlcG9ydGluZwogIyBhbiBlcnJvci4KIAorIyBzdGFydCBvZmYgY29uZmlndXJlLmxvZworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCitlY2hvICQwICQqID4+IGNvbmZpZ3VyZS5sb2cKK2RhdGUgPj4gY29uZmlndXJlLmxvZworCisjIHNldCBjb21tYW5kIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KIGlmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCi0gICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nKSIKKyAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCiAgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWUgZm9yIHN0YXRpYyBsaWJyYXJ5CiBTVEFUSUNMSUI9bGliei5hCi1MREZMQUdTPSIke0xERkxBR1N9IC1MLiAke1NUQVRJQ0xJQn0iCisKKyMgZXh0cmFjdCB6bGliIHZlcnNpb24gbnVtYmVycyBmcm9tIHpsaWIuaAogVkVSPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgCiBWRVIzPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlxcLlswLTldKlwpLiovXDEvcCcgPCB6bGliLmhgCiBWRVIyPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCiBWRVIxPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCisKKyMgZXN0YWJsaXNoIGNvbW1hbmRzIGZvciBsaWJyYXJ5IGJ1aWxkaW5nCiBpZiAiJHtDUk9TU19QUkVGSVh9YXIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIEFSPSR7QVItIiR7Q1JPU1NfUFJFRklYfWFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIEFSPSR7QVItImFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKLUFSX1JDPSIke0FSfSByYyIKK0FSRkxBR1M9JHtBUkZMQUdTLSJyYyJ9CiBpZiAiJHtDUk9TU19QUkVGSVh9cmFubGliIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBSQU5MSUI9JHtSQU5MSUItIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIFJBTkxJQj0ke1JBTkxJQi0icmFubGliIn0KIGZpCiBpZiAiJHtDUk9TU19QUkVGSVh9bm0iIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIE5NPSR7Tk0tIiR7Q1JPU1NfUFJFRklYfW5tIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIE5NPSR7Tk0tIm5tIn0KIGZpCisKKyMgc2V0IGRlZmF1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zCiBMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CiBMRFNIQVJFRExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCitBUkNIUz0KIHByZWZpeD0ke3ByZWZpeC0vdXNyL2xvY2FsfQogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtwcmVmaXh9J30KIGxpYmRpcj0ke2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KQEAgLTU0LDIwICs2NywzOSBAQAogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKIHNoYXJlZD0xCitzb2xvPTAKK2NvdmVyPTAKIHpwcmVmaXg9MAoremNvbnN0PTAKIGJ1aWxkNjQ9MAogZ2NjPTAKIG9sZF9jYz0iJENDIgogb2xkX2NmbGFncz0iJENGTEFHUyIKK09CSkM9JyQoT0JKWikgJChPQkpHKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKSAkKFBJQ19PQkpHKScKIAorIyBsZWF2ZSB0aGlzIHNjcmlwdCwgb3B0aW9uYWxseSBpbiBhIGJhZCB3YXkKK2xlYXZlKCkKK3sKKyAgaWYgdGVzdCAiJCoiICE9ICIwIjsgdGhlbgorICAgIGVjaG8gIioqICQwIGFib3J0aW5nLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QuZ2NubyAuLy0tdmVyc2lvbgorICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBleGl0ICQxCit9CisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucwogd2hpbGUgdGVzdCAkIyAtZ2UgMQogZG8KIGNhc2UgIiQxIiBpbgogICAgIC1oKiB8IC0taGVscCkKLSAgICAgIGVjaG8gJ3VzYWdlOicKLSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScKLSAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJworICAgICAgZWNobyAndXNhZ2U6JyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS1jb25zdF0gWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdIFstLWFyY2hzPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgICAgIGV4aXQgMCA7OwogICAgIC1wKj0qIHwgLS1wcmVmaXg9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CiAgICAgLWUqPSogfCAtLWVwcmVmaXg9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKQEAgLTgxLDUxICsxMTMsODggQEAKICAgICAtaSogfCAtLWluY2x1ZGVkaXIpIGluY2x1ZGVkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CiAgICAgLXMqIHwgLS1zaGFyZWQgfCAtLWVuYWJsZS1zaGFyZWQpIHNoYXJlZD0xOyBzaGlmdCA7OwogICAgIC10IHwgLS1zdGF0aWMpIHNoYXJlZD0wOyBzaGlmdCA7OworICAgIC0tc29sbykgc29sbz0xOyBzaGlmdCA7OworICAgIC0tY292ZXIpIGNvdmVyPTE7IHNoaWZ0IDs7CiAgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CiAgICAgLTYqIHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OwotICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIjsgc2hpZnQgOzsKLSAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciI7IHNoaWZ0IDs7Ci0gICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxIDs7CisgICAgLWEqPSogfCAtLWFyY2hzPSopIEFSQ0hTPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLWMqIHwgLS1jb25zdCkgemNvbnN0PTE7IHNoaWZ0IDs7CisgICAgKikKKyAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBsZWF2ZSAxOzsKICAgICBlc2FjCiBkb25lCiAKKyMgdGVtcG9yYXJ5IGZpbGUgbmFtZQogdGVzdD16dGVzdCQkCisKKyMgcHV0IGFyZ3VtZW50cyBpbiBsb2csIGFsc28gcHV0IHRlc3QgZmlsZSBpbiBsb2cgaWYgdXNlZCBpbiBhcmd1bWVudHMKK3Nob3coKQoreworICBjYXNlICIkKiIgaW4KKyAgICAqJHRlc3QuYyopCisgICAgICBlY2hvID09PSAkdGVzdC5jID09PSA+PiBjb25maWd1cmUubG9nCisgICAgICBjYXQgJHRlc3QuYyA+PiBjb25maWd1cmUubG9nCisgICAgICBlY2hvID09PSA+PiBjb25maWd1cmUubG9nOzsKKyAgZXNhYworICBlY2hvICQqID4+IGNvbmZpZ3VyZS5sb2cKK30KKworIyBjaGVjayBmb3IgZ2NjIHZzLiBjYyBhbmQgc2V0IGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYmFzZWQgb24gdGhlIHN5c3RlbSBpZGVudGlmaWVkIGJ5IHVuYW1lCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiBleHRlcm4gaW50IGdldGNoYXIoKTsKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLgordGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogY2M9JHtDQy0ke0NST1NTX1BSRUZJWH1nY2N9CiBjZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9CiAjIHRvIGZvcmNlIHRoZSBhc20gdmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKIGNhc2UgIiRjYyIgaW4KICAgKmdjYyopIGdjYz0xIDs7CisgICpjbGFuZyopIGdjYz0xIDs7Citlc2FjCitjYXNlIGAkY2MgLXYgMj4mMWAgaW4KKyAgKmdjYyopIGdjYz0xIDs7CiBlc2FjCiAKLWlmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJGNmbGFncyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorc2hvdyAkY2MgLWMgJHRlc3QuYworaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkdGVzdC5jKSA+PiBjb25maWd1cmUubG9nIDI+JjE7IHRoZW4KKyAgZWNobyAuLi4gdXNpbmcgZ2NjID4+IGNvbmZpZ3VyZS5sb2cKICAgQ0M9IiRjYyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9ICR7QVJDSFN9IgogICBTRkxBR1M9IiR7Q0ZMQUdTLS1PM30gLWZQSUMiCi0gIENGTEFHUz0iJHtDRkxBR1MtLU8zfSIKKyAgTERGTEFHUz0iJHtMREZMQUdTfSAke0FSQ0hTfSIKICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKICAgZmkKICAgaWYgdGVzdCAiJHtaTElCR0NDV0FSTn0iID0gIllFUyI7IHRoZW4KLSAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBpZiB0ZXN0ICIkemNvbnN0IiAtZXEgMTsgdGhlbgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtV2Nhc3QtcXVhbCAtcGVkYW50aWMgLURaTElCX0NPTlNUIgorICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGZpCiAgIGZpCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCiAgIGNhc2UgIiR1bmFtZSIgaW4KLSAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCAqQlNEIHwgRHJhZ29uRmx5KSBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgc29sYXJpcyopCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgKkJTRCB8ICpic2QqIHwgRHJhZ29uRmx5KQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9CisgICAgICAgIExEQ09ORklHPSJsZGNvbmZpZyAtbSIgOzsKICAgQ1lHV0lOKiB8IEN5Z3dpbiogfCBjeWd3aW4qIHwgT1MvMiopCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKLSAgTUlOR1cqfG1pbmd3KikKKyAgTUlOR1cqIHwgbWluZ3cqKQogIyB0ZW1wb3JhcnkgYnlwYXNzCiAgICAgICAgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIKLSAgICAgICAgZXhpdCAxCisgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifQogICAgICAgICBMRFNIQVJFRExJQkM9IiIKICAgICAgICAgRVhFPScuZXhlJyA7OwpAQCAtMTQyLDE3ICsyMTEsMjUgQEAKICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNsJwogICAgICAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CiAgICAgICAgICBlc2FjIDs7Ci0gIERhcndpbiopICAgc2hhcmVkX2V4dD0nLmR5bGliJworICBEYXJ3aW4qIHwgZGFyd2luKikKKyAgICAgICAgICAgICBzaGFyZWRfZXh0PScuZHlsaWInCiAgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0gOzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9CisgICAgICAgICAgICAgaWYgbGlidG9vbCAtViAyPiYxIHwgZ3JlcCBBcHBsZSA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICBBUj0ibGlidG9vbCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEFSPSIvdXNyL2Jpbi9saWJ0b29sIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQVJGTEFHUz0iLW8iIDs7CiAgICopICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0gOzsKICAgZXNhYwogZWxzZQogICAjIGZpbmQgc3lzdGVtIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgY2Mgb3B0aW9ucwogICBDQz0ke0NDLWNjfQogICBnY2M9MAorICBlY2hvIC4uLiB1c2luZyAkQ0MgPj4gY29uZmlndXJlLmxvZwogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKQEAgLTE4MywxOSArMjYwLDM0IEBACiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItNCAtTyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MifQogICAgICAgICAgICAgIFJBTkxJQj0ke1JBTkxJQi0idHJ1ZSJ9Ci0gICAgICAgICAgICAgQVJfUkM9ImNjIC1BIiA7OworICAgICAgICAgICAgIEFSPSJjYyIKKyAgICAgICAgICAgICBBUkZMQUdTPSItQSIgOzsKICAgU0NPX1NWXCAzLjIqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMyAtZHkgLUtQSUMgIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLWR5IC1LUElDIC1HIn0gOzsKLSAgU3VuT1NcIDUqKSBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9Ci0gICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICAgIGk4NiopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCJ9IDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIifSA7OwotICAgICAgICAgZXNhYyA7OworICBTdW5PU1wgNSogfCBzb2xhcmlzKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIC1oIGxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CisgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC1LUElDIn0KKyAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QifQorICAgICAgICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICMgb2xkIHZlcnNpb25zIG9mIFN1blBSTy9Xb3Jrc2hvcC9TdHVkaW8gZG9uJ3Qgc3VwcG9ydCAtbTY0LAorICAgICAgICAgICAgICMgYnV0IG5ld2VyIG9uZXMgZG8uICBDaGVjayBmb3IgaXQuCisgICAgICAgICAgICAgZmxhZzY0PWAkQ0MgLWZsYWdzIHwgZWdyZXAgLS0gJ14tbTY0J2AKKyAgICAgICAgICAgICBpZiB0ZXN0IHgiJGZsYWc2NCIgIT0geCIiIDsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICAgICAgICAgICAgaTg2KikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9YW1kNjQiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPWFtZDY0IiA7OworICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPXY5IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12OSIgOzsKKyAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgOzsKICAgU3VuT1NcIDQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMiAtUElDIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMiJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQifSA7OwpAQCAtMjI1LDI1ICszMTcsNzkgQEAKICAgZXNhYwogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcnkgaWYgbm90IGRlZmluZWQgYWJvdmUKIFNIQVJFRExJQj0ke1NIQVJFRExJQi0ibGlieiRzaGFyZWRfZXh0In0KIFNIQVJFRExJQlY9JHtTSEFSRURMSUJWLSJsaWJ6JHNoYXJlZF9leHQuJFZFUiJ9CiBTSEFSRURMSUJNPSR7U0hBUkVETElCTS0ibGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZGVmaW5lIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjb21waWxlciBhbmQgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGxvZ2dpbmcgdGhlIHJlc3VsdHMKKworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2Vycm9yIGVycm9yCitFT0YKK2lmICgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIHRlc3QgImAoICQqICkgMj4mMSB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIgorICB9CisgIGVjaG8gLSB1c2luZyBhbnkgb3V0cHV0IGZyb20gY29tcGlsZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IgPj4gY29uZmlndXJlLmxvZworZWxzZQordHJ5KCkKK3sKKyAgc2hvdyAkKgorICAoICQqICkgPj4gY29uZmlndXJlLmxvZyAyPiYxCisgIHJldD0kPworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICBlY2hvICIoZXhpdCBjb2RlICIkcmV0IikiID4+IGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcmV0dXJuICRyZXQKK30KK2ZpCisKK3RyeWJvdGgoKQoreworICBzaG93ICQqCisgIGdvdD1gKCAkKiApIDI+JjFgCisgIHJldD0kPworICBwcmludGYgJXMgIiRnb3QiID4+IGNvbmZpZ3VyZS5sb2cKKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgcmV0dXJuICRyZXQKKyAgZmkKKyAgdGVzdCAiJGdvdCIgPSAiIgorfQorCitjYXQgPiAkdGVzdC5jIDw8IEVPRgoraW50IGZvbygpIHsgcmV0dXJuIDA7IH0KK0VPRgorZWNobyAiQ2hlY2tpbmcgZm9yIG9ic2Vzc2l2ZS1jb21wdWxzaXZlIGNvbXBpbGVyIG9wdGlvbnMuLi4iID4+IGNvbmZpZ3VyZS5sb2cKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiQ29tcGlsZXIgZXJyb3IgcmVwb3J0aW5nIGlzIHRvbyBoYXJzaCBmb3IgJDAgKHBlcmhhcHMgcmVtb3ZlIC1XZXJyb3IpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBsZWF2ZSAxCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZWUgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbGQgc3VwcG9ydGVkCitjYXQgPiAkdGVzdC5jIDw8RU9GCitleHRlcm4gaW50IGdldGNoYXIoKTsKK2ludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KK0VPRgogaWYgdGVzdCAkc2hhcmVkIC1lcSAxOyB0aGVuCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4KKyAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICMgd2UgbXVzdCB0ZXN0IGluIHR3byBzdGVwcyAoY2MgdGhlbiBsZCksIHJlcXVpcmVkIGF0IGxlYXN0IG9uIFN1bk9TIDQueAotICBpZiB0ZXN0ICJgKCRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiICYmCi0gICAgIHRlc3QgImAoJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuCisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYmCisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KKyAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZWxzZQotICAgIGVjaG8gVGVzdGVkICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgZWNobyBUZXN0ZWQgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycKKyAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGZpCiBmaQpAQCAtMjU0LDI1ICs0MDAsNDMgQEAKICAgU0hBUkVETElCPSIiCiAgIFNIQVJFRExJQlY9IiIKICAgU0hBUkVETElCTT0iIgotICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLgorICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgIEFMTD0ic3RhdGljIHNoYXJlZCIKICAgVEVTVD0iYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZCIKIGZpCiAKKyMgY2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIGV4dGVybmFsIG5hbWVzIGZvciB1c2UgYnkgYXNzZW1ibGVyIGNvZGUKK0NQUD0ke0NQUC0iJENDIC1FIn0KK2Nhc2UgJENGTEFHUyBpbgorICAqQVNNViopCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCisgICAgc2hvdyAiJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyIKKyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIjsgdGhlbgorICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpIDs7Citlc2FjCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBub25lLCBjaGVjayBmb3IgZnNlZWtvKCkKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIG9mZjY0X3QgZHVtbXkgPSAwOwogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgogICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIEFMTD0iJHtBTEx9IGFsbDY0IgogICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQgbWFpbih2b2lkKSB7CkBAIC0yODAsMjcyICs0NDQsMzM1IEBACiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX0ZTRUVLTyIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX0ZTRUVLTyIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0cmVycm9yKCkgZm9yIHVzZSBieSBneiogZnVuY3Rpb25zCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkgeyByZXR1cm4gc3RybGVuKHN0cmVycm9yKGVycm5vKSk7IH0KK0VPRgoraWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBjb3B5IGNsZWFuIHpjb25mLmggZm9yIHN1YnNlcXVlbnQgZWRpdHMKIGNwIC1wIHpjb25mLmguaW4gemNvbmYuaAogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgdW5pc3RkLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDx1bmlzdGQuaD4KIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1VOSVNURF9ILiogbWF5IGJlL3MvZGVmIEhBVkVfVU5JU1REX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdGRhcmcuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfU1REQVJHX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9TVERBUkdfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIHRoZSB6XyBwcmVmaXggd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmgKIGlmIHRlc3QgJHpwcmVmaXggLWVxIDE7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiLyNpZmRlZiBaX1BSRUZJWC4qIG1heSBiZS9zL2RlZiBaX1BSRUZJWFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorIyBpZiAtLXNvbG8gY29tcGlsYXRpb24gd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmggYW5kIHJlbW92ZSBneiBzdHVmZiBmcm9tIG9iamVjdCBsaXN0cworaWYgdGVzdCAkc29sbyAtZXEgMTsgdGhlbgorICBzZWQgJy8jZGVmaW5lIFpDT05GX0gvYVwKKyNkZWZpbmUgWl9TT0xPCisKKycgPCB6Y29uZi5oID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCitPQkpDPSckKE9CSlopJworUElDX09CSkM9JyQoUElDX09CSlopJworZmkKKworIyBpZiBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2FzIHJlcXVlc3RlZCwgdXNlIG9sZGVyIGdjYyBpZiBkZWZpbmVkLCBlLmcuICJnY2MtNC4yIiBvbiBNYWMgT1MgWAoraWYgdGVzdCAkY292ZXIgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBpZiB0ZXN0IC1uICIkR0NDX0NMQVNTSUMiOyB0aGVuCisgICAgQ0M9JEdDQ19DTEFTU0lDCisgIGZpCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjb25kdWN0IGEgc2VyaWVzIG9mIHRlc3RzIHRvIHJlc29sdmUgZWlnaHQgcG9zc2libGUgY2FzZXMgb2YgdXNpbmcgInZzIiBvciAicyIgcHJpbnRmIGZ1bmN0aW9ucworIyAodXNpbmcgc3RkYXJnIG9yIG5vdCksIHdpdGggb3Igd2l0aG91dCAibiIgKHByb3Zpbmcgc2l6ZSBvZiBidWZmZXIpLCBhbmQgd2l0aCBvciB3aXRob3V0IGEKKyMgcmV0dXJuIHZhbHVlLiAgVGhlIG1vc3Qgc2VjdXJlIHJlc3VsdCBpcyB2c25wcmludGYoKSB3aXRoIGEgcmV0dXJuIHZhbHVlLiAgc25wcmludGYoKSB3aXRoIGEKKyMgcmV0dXJuIHZhbHVlIGlzIHNlY3VyZSBhcyB3ZWxsLCBidXQgdGhlbiBnenByaW50ZigpIHdpbGwgYmUgbGltaXRlZCB0byAyMCBhcmd1bWVudHMuCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJ6Y29uZi5oIgotCiBpbnQgbWFpbigpCiB7CiAjaWZuZGVmIFNUREMKICAgY2hva2UgbWUKICNlbmRpZgotCiAgIHJldHVybiAwOwogfQogRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIgotCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCi0KKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fdnNucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3ZzbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fc25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fc25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGZpCiAKKyMgc2VlIGlmIHdlIGNhbiBoaWRlIHpsaWIgaW50ZXJuYWwgc3ltYm9scyB0aGF0IGFyZSBsaW5rZWQgYmV0d2VlbiBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMKIGlmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCi0jZWxzZQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNlbmRpZgorI2RlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiBpbnQgWkxJQl9JTlRFUk5BTCBmb287CiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgaWYgdHJ5Ym90aCAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQotICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKLSAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCi1DUFA9JHtDUFAtIiRDQyAtRSJ9Ci1jYXNlICRDRkxBR1MgaW4KLSAgKkFTTVYqKQotICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvYCIgPSAiIjsgdGhlbgotICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLgotICAgIGVsc2UKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuCi0gICAgZmkgOzsKLWVzYWMKKyMgc2hvdyB0aGUgcmVzdWx0cyBpbiB0aGUgbG9nCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQUxMID0gJEFMTCA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSID0gJEFSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVJGTEFHUyA9ICRBUkZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0MgPSAkQ0MgPj4gY29uZmlndXJlLmxvZworZWNobyBDRkxBR1MgPSAkQ0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ1BQID0gJENQUCA+PiBjb25maWd1cmUubG9nCitlY2hvIEVYRSA9ICRFWEUgPj4gY29uZmlndXJlLmxvZworZWNobyBMRENPTkZJRyA9ICRMRENPTkZJRyA+PiBjb25maWd1cmUubG9nCitlY2hvIExERkxBR1MgPSAkTERGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVEID0gJExEU0hBUkVEID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRURMSUJDID0gJExEU0hBUkVETElCQyA+PiBjb25maWd1cmUubG9nCitlY2hvIE9CSkMgPSAkT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFBJQ19PQkpDID0gJFBJQ19PQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUkFOTElCID0gJFJBTkxJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNGTEFHUyA9ICRTRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUIgPSAkU0hBUkVETElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCTSA9ICRTSEFSRURMSUJNID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCViA9ICRTSEFSRURMSUJWID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1RBVElDTElCID0gJFNUQVRJQ0xJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFRFU1QgPSAkVEVTVCA+PiBjb25maWd1cmUubG9nCitlY2hvIFZFUiA9ICRWRVIgPj4gY29uZmlndXJlLmxvZworZWNobyBaX1U0ID0gJFpfVTQgPj4gY29uZmlndXJlLmxvZworZWNobyBleGVjX3ByZWZpeCA9ICRleGVjX3ByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIGluY2x1ZGVkaXIgPSAkaW5jbHVkZWRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIGxpYmRpciA9ICRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBtYW5kaXIgPSAkbWFuZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gcHJlZml4ID0gJHByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIHNoYXJlZGxpYmRpciA9ICRzaGFyZWRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyB1bmFtZSA9ICR1bmFtZSA+PiBjb25maWd1cmUubG9nCiAKLXJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQorIyB1ZHBhdGUgTWFrZWZpbGUgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IE1ha2VmaWxlLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTU3LDcgKzc4NCw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIwogL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCkBAIC01NjgsMTAgKzc5NiwxMyBAQAogL15zaGFyZWRsaWJkaXIgKj0vcyM9LiojPSRzaGFyZWRsaWJkaXIjCiAvXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIwogL15tYW5kaXIgKj0vcyM9LiojPSRtYW5kaXIjCisvXk9CSkMgKj0vcyM9LiojPSAkT0JKQyMKKy9eUElDX09CSkMgKj0vcyM9LiojPSAkUElDX09CSkMjCiAvXmFsbDogKi9zIzouKiM6ICRBTEwjCiAvXnRlc3Q6ICovcyM6LiojOiAkVEVTVCMKICIgPiBNYWtlZmlsZQogCisjIGNyZWF0ZSB6bGliLnBjIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCB6bGliLnBjLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTgxLDcgKzgxMiw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15FWEUgKj0vcyM9LiojPSRFWEUjCiAvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKQEAgLTU5NCwzICs4MjYsNiBAQAogIiB8IHNlZCAtZSAiCiBzL1xAVkVSU0lPTlxALyRWRVIvZzsKICIgPiB6bGliLnBjCisKKyMgZG9uZQorbGVhdmUgMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmMgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwppbmRleCA5MWJlMzcyLi45NzlhNzE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuYworKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTE3LDYgKzE3LDggQEAKICAgb2YgdGhlIGNyYyB0YWJsZXMuICBUaGVyZWZvcmUsIGlmIHlvdSAjZGVmaW5lIERZTkFNSUNfQ1JDX1RBQkxFLCB5b3Ugc2hvdWxkCiAgIGZpcnN0IGNhbGwgZ2V0X2NyY190YWJsZSgpIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlcyBiZWZvcmUgYWxsb3dpbmcgbW9yZSB0aGFuCiAgIG9uZSB0aHJlYWQgdG8gdXNlIGNyYzMyKCkuCisKKyAgRFlOQU1JQ19DUkNfVEFCTEUgYW5kIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBvdXQgY3JjMzIuaC4KICAqLwogCiAjaWZkZWYgTUFLRUNSQ0gKQEAgLTMwLDMxICszMiwxMSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi0vKiBGaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSBmb3IgY3JjMzJfbGl0dGxlKCkgYW5kIGNyYzMyX2JpZygpLiAqLwotI2lmbmRlZiBOT0JZRk9VUgotIyAgaWZkZWYgU1REQyAgICAgICAgICAgLyogbmVlZCBBTlNJIEMgbGltaXRzLmggdG8gZGV0ZXJtaW5lIHNpemVzICovCi0jICAgIGluY2x1ZGUgPGxpbWl0cy5oPgotIyAgICBkZWZpbmUgQllGT1VSCi0jICAgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTQ7Ci0jICAgIGVsc2UKLSMgICAgICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NDsKLSMgICAgICBlbHNlCi0jICAgICAgICBpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1NDsKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgdW5kZWYgQllGT1VSICAgICAvKiBjYW4ndCBmaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSEgKi8KLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qIFNUREMgKi8KLSNlbmRpZiAvKiAhTk9CWUZPVVIgKi8KLQogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMgZm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KKyNpZiAhZGVmaW5lZChOT0JZRk9VUikgJiYgZGVmaW5lZChaX1U0KQorIyAgZGVmaW5lIEJZRk9VUgorI2VuZGlmCiAjaWZkZWYgQllGT1VSCi0jICBkZWZpbmUgUkVWKHcpICgoKCh3KT4+MjQpJjB4ZmYpKygoKHcpPj44KSYweGZmMDApKyBcCi0gICAgICAgICAgICAgICAgKCgodykmMHhmZjAwKTw8OCkrKCgodykmMHhmZik8PDI0KSkKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfbGl0dGxlIE9GKCh1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLApAQCAtNjgsMTYgKzUwLDE2IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVkIGxvbmcgKm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ZWMpKTsKIGxvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2lnbmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Ci1sb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpKTsKIAogCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgdm9sYXRpbGUgaW50IGNyY190YWJsZV9lbXB0eSA9IDE7Ci1sb2NhbCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSBPRigodm9pZCkpOwogI2lmZGVmIE1BS0VDUkNICi0gICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopKTsKKyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIgKikpOwogI2VuZGlmIC8qIE1BS0VDUkNIICovCiAvKgogICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEgYnl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6CkBAIC0xMDcsOSArODksOSBAQAogKi8KIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUoKQogewotICAgIHVuc2lnbmVkIGxvbmcgYzsKKyAgICB6X2NyY190IGM7CiAgICAgaW50IG4sIGs7Ci0gICAgdW5zaWduZWQgbG9uZyBwb2x5OyAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLworICAgIHpfY3JjX3QgcG9seTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KICAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRlZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4zMik6ICovCiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDExLDEyLDE2LDIyLDIzLDI2fTsKQEAgLTEyMSwxMyArMTAzLDEzIEBACiAgICAgICAgIGZpcnN0ID0gMDsKIAogICAgICAgICAvKiBtYWtlIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuIGZyb20gcG9seW5vbWlhbCAoMHhlZGI4ODMyMFVMKSAqLwotICAgICAgICBwb2x5ID0gMFVMOwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKTsgbisrKQotICAgICAgICAgICAgcG9seSB8PSAxVUwgPDwgKDMxIC0gcFtuXSk7CisgICAgICAgIHBvbHkgPSAwOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkoc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKSk7IG4rKykKKyAgICAgICAgICAgIHBvbHkgfD0gKHpfY3JjX3QpMSA8PCAoMzEgLSBwW25dKTsKIAogICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBmb3IgZXZlcnkgOC1iaXQgdmFsdWUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKKyAgICAgICAgICAgIGMgPSAoel9jcmNfdCluOwogICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAgICAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7CiAgICAgICAgICAgICBjcmNfdGFibGVbMF1bbl0gPSBjOwpAQCAtMTM4LDExICsxMjAsMTEgQEAKICAgICAgICAgICAgYW5kIHRoZW4gdGhlIGJ5dGUgcmV2ZXJzYWwgb2YgdGhvc2UgYXMgd2VsbCBhcyB0aGUgZmlyc3QgdGFibGUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW25dOwotICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW2MgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICAgICAgICAgIGNyY190YWJsZVtrXVtuXSA9IGM7Ci0gICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmIC8qIEJZRk9VUiAqLwpAQCAtMTY0LDcgKzE0Niw3IEBACiAgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOwogICAgICAgICBmcHJpbnRmKG91dCwgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIpOwogICAgICAgICBmcHJpbnRmKG91dCwgIiAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmNcbiAqL1xuXG4iKTsKLSAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiAiKTsKICAgICAgICAgZnByaW50ZihvdXQsICJjcmNfdGFibGVbVEJMU11bMjU2XSA9XG57XG4gIHtcbiIpOwogICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVswXSk7CiAjICBpZmRlZiBCWUZPVVIKQEAgLTE4NCwxMiArMTY2LDEzIEBACiAjaWZkZWYgTUFLRUNSQ0gKIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKICAgICBGSUxFICpvdXQ7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOworICAgIGNvbnN0IHpfY3JjX3QgRkFSICp0YWJsZTsKIHsKICAgICBpbnQgbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwgdGFibGVbbl0sCisgICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKICAgICAgICAgICAgICAgICBuID09IDI1NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOwogfQogI2VuZGlmIC8qIE1BS0VDUkNIICovCkBAIC0yMDQsMTMgKzE4NywxMyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCiB7CiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKICAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQogICAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0gICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKWNyY190YWJsZTsKKyAgICByZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0yMzIsNyArMjE1LDcgQEAKIAogI2lmZGVmIEJZRk9VUgogICAgIGlmIChzaXplb2Yodm9pZCAqKSA9PSBzaXplb2YocHRyZGlmZl90KSkgewotICAgICAgICB1NCBlbmRpYW47CisgICAgICAgIHpfY3JjX3QgZW5kaWFuOwogCiAgICAgICAgIGVuZGlhbiA9IDE7CiAgICAgICAgIGlmICgqKCh1bnNpZ25lZCBjaGFyICopKCZlbmRpYW4pKSkKQEAgLTI2NiwxNyArMjQ5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9ICh1NCljcmM7CisgICAgYyA9ICh6X2NyY190KWNyYzsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzBdWyhjIF4gKmJ1ZisrKSAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0xJVDMyOwogICAgICAgICBsZW4gLT0gMzI7CkBAIC0zMDYsMTcgKzI4OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSBSRVYoKHU0KWNyYyk7CisgICAgYyA9IFpTV0FQMzIoKHpfY3JjX3QpY3JjKTsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICBidWY0LS07CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0JJRzMyOwpAQCAtMzMzLDcgKzMxNiw3IEBACiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgIH0gd2hpbGUgKC0tbGVuKTsKICAgICBjID0gfmM7Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShSRVYoYykpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoWlNXQVAzMihjKSk7CiB9CiAKICNlbmRpZiAvKiBCWUZPVVIgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5oIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKaW5kZXggODA1M2I2MS4uOWUwYzc3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmgKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jCiAgKi8KIAotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQorbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQogewogICB7CiAgICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUwsIDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFiYVVMLCAweDA3NmRjNDE5VUwsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwppbmRleCBiY2VmNjdjLi42OTY5NTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmMgLS0gY29tcHJlc3MgZGF0YSB1c2luZyB0aGUgZGVmbGF0aW9uIGFsZ29yaXRobQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAqICBSRUZFUkVOQ0VTCiAgKgogICogICAgICBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiIuCi0gKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAorICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQogICoKICAqICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgUmFiaW4gYW5kIEthcnAgYWxnb3JpdGhtIGlzIGdpdmVuIGluIHRoZSBib29rCiAgKiAgICAgICAgICJBbGdvcml0aG1zIiBieSBSLiBTZWRnZXdpY2ssIEFkZGlzb24tV2VzbGV5LCBwMjUyLgpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKyAgICIgZGVmbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMTU1LDkgKzE1NSwxMiBAQAogc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCisvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0ggKi8KKyNkZWZpbmUgUkFOSyhmKSAoKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYnl0ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUKICAqICAgIHByZXZpb3VzIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgogICovCkBAIC0xNzAsNyArMTczLDcgQEAKICAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2ggY2hhaW4uCiAgKiBJZiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCAtREZBU1RFU1QsIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBmb3JjZWQKICAqIHRvIDEsIGFuZCBubyBoYXNoIGNoYWlucyBhcmUgbWFpbnRhaW5lZC4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCkBAIC0yMzUsMTAgKzIzOCwxOSBAQAogCiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKIAogI2lmZGVmIEZBU1RFU1QKICAgICBpZiAobGV2ZWwgIT0gMCkgbGV2ZWwgPSAxOwpAQCAtMjkzLDcgKzMwNSw3IEBACiAgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKICAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CiAgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKLSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOworICAgICAgICBzdHJtLT5tc2cgPSBFUlJfTVNHKFpfTUVNX0VSUk9SKTsKICAgICAgICAgZGVmbGF0ZUVuZCAoc3RybSk7CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9CkBAIC0zMTQsNDMgKzMyNiw3MCBAQAogICAgIHVJbnQgIGRpY3RMZW5ndGg7CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50IGxlbmd0aCA9IGRpY3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3MgaGFzaF9oZWFkID0gMDsKKyAgICB1SW50IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHN0cm0tPnN0YXRlLT53cmFwID09IDIgfHwKLSAgICAgICAgKHN0cm0tPnN0YXRlLT53cmFwID09IDEgJiYgc3RybS0+c3RhdGUtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSkKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIHdyYXAgPSBzLT53cmFwOworICAgIGlmICh3cmFwID09IDIgfHwgKHdyYXAgPT0gMSAmJiBzLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkgfHwgcy0+bG9va2FoZWFkKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndyYXApCisgICAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHdyYXAgPT0gMSkKICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICBzLT53cmFwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqLwogCi0gICAgaWYgKGxlbmd0aCA8IE1JTl9NQVRDSCkgcmV0dXJuIFpfT0s7Ci0gICAgaWYgKGxlbmd0aCA+IHMtPndfc2l6ZSkgewotICAgICAgICBsZW5ndGggPSBzLT53X3NpemU7Ci0gICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIGxlbmd0aDsgLyogdXNlIHRoZSB0YWlsIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisgICAgLyogaWYgZGljdGlvbmFyeSB3b3VsZCBmaWxsIHdpbmRvdywganVzdCByZXBsYWNlIHRoZSBoaXN0b3J5ICovCisgICAgaWYgKGRpY3RMZW5ndGggPj0gcy0+d19zaXplKSB7CisgICAgICAgIGlmICh3cmFwID09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqLworICAgICAgICAgICAgQ0xFQVJfSEFTSChzKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOworICAgICAgICB9CisgICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIHMtPndfc2l6ZTsgIC8qIHVzZSB0aGUgdGFpbCAqLworICAgICAgICBkaWN0TGVuZ3RoID0gcy0+d19zaXplOwogICAgIH0KLSAgICB6bWVtY3B5KHMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKLSAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsKLSAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKIAotICAgIC8qIEluc2VydCBhbGwgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSAoZXhjZXB0IGZvciB0aGUgbGFzdCB0d28gYnl0ZXMpLgotICAgICAqIHMtPmxvb2thaGVhZCBzdGF5cyBudWxsLCBzbyBzLT5pbnNfaCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgdGhlIG5leHQKLSAgICAgKiBjYWxsIG9mIGZpbGxfd2luZG93LgotICAgICAqLwotICAgIHMtPmluc19oID0gcy0+d2luZG93WzBdOwotICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbMV0pOwotICAgIGZvciAobiA9IDA7IG4gPD0gbGVuZ3RoIC0gTUlOX01BVENIOyBuKyspIHsKLSAgICAgICAgSU5TRVJUX1NUUklORyhzLCBuLCBoYXNoX2hlYWQpOworICAgIC8qIGluc2VydCBkaWN0aW9uYXJ5IGludG8gd2luZG93IGFuZCBoYXNoICovCisgICAgYXZhaWwgPSBzdHJtLT5hdmFpbF9pbjsKKyAgICBuZXh0ID0gc3RybS0+bmV4dF9pbjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CisgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopZGljdGlvbmFyeTsKKyAgICBmaWxsX3dpbmRvdyhzKTsKKyAgICB3aGlsZSAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgeworICAgICAgICBzdHIgPSBzLT5zdHJzdGFydDsKKyAgICAgICAgbiA9IHMtPmxvb2thaGVhZCAtIChNSU5fTUFUQ0gtMSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgPSBzdHI7CisgICAgICAgIHMtPmxvb2thaGVhZCA9IE1JTl9NQVRDSC0xOworICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICB9Ci0gICAgaWYgKGhhc2hfaGVhZCkgaGFzaF9oZWFkID0gMDsgIC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBzLT5zdHJzdGFydCArPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylzLT5zdHJzdGFydDsKKyAgICBzLT5pbnNlcnQgPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7CisgICAgc3RybS0+YXZhaWxfaW4gPSBhdmFpbDsKKyAgICBzLT53cmFwID0gd3JhcDsKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQoraW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtMzgwLDEyICs0MTksMjMgQEAKICAgICBzLT5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKIAogICAgIF90cl9pbml0KHMpOwotICAgIGxtX2luaXQocyk7CiAKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOworICAgIGlmIChyZXQgPT0gWl9PSykKKyAgICAgICAgbG1faW5pdChzdHJtLT5zdGF0ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciAoc3RybSwgaGVhZCkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBnel9oZWFkZXJwIGhlYWQ7CkBAIC0zOTcsMTQgKzQ0Nyw0MiBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyAoc3RybSwgcGVuZGluZywgYml0cykKKyAgICB1bnNpZ25lZCAqcGVuZGluZzsKKyAgICBpbnQgKmJpdHM7CisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChwZW5kaW5nICE9IFpfTlVMTCkKKyAgICAgICAgKnBlbmRpbmcgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICBpZiAoYml0cyAhPSBaX05VTEwpCisgICAgICAgICpiaXRzID0gc3RybS0+c3RhdGUtPmJpX3ZhbGlkOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgKHN0cm0sIGJpdHMsIHZhbHVlKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBiaXRzOwogICAgIGludCB2YWx1ZTsKIHsKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBwdXQ7CisKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RybS0+c3RhdGUtPmJpX3ZhbGlkID0gYml0czsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfYnVmID0gKHVzaCkodmFsdWUgJiAoKDEgPDwgYml0cykgLSAxKSk7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmICgoQnl0ZWYgKikocy0+ZF9idWYpIDwgcy0+cGVuZGluZ19vdXQgKyAoKEJ1Zl9zaXplICsgNykgPj4gMykpCisgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBkbyB7CisgICAgICAgIHB1dCA9IEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQ7CisgICAgICAgIGlmIChwdXQgPiBiaXRzKQorICAgICAgICAgICAgcHV0ID0gYml0czsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpKCh2YWx1ZSAmICgoMSA8PCBwdXQpIC0gMSkpIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfdmFsaWQgKz0gcHV0OworICAgICAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICAgICAgdmFsdWUgPj49IHB1dDsKKyAgICAgICAgYml0cyAtPSBwdXQ7CisgICAgfSB3aGlsZSAoYml0cyk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTQzNSw2ICs1MTMsOCBAQAogICAgICAgICBzdHJtLT50b3RhbF9pbiAhPSAwKSB7CiAgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KICAgICAgICAgZXJyID0gZGVmbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzLT5wZW5kaW5nID09IDApCisgICAgICAgICAgICBlcnIgPSBaX09LOwogICAgIH0KICAgICBpZiAocy0+bGV2ZWwgIT0gbGV2ZWwpIHsKICAgICAgICAgcy0+bGV2ZWwgPSBsZXZlbDsKQEAgLTU2MiwxOSArNjQyLDIyIEBACiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgZGVmbGF0ZV9zdGF0ZSAqcyA9IHN0cm0tPnN0YXRlOwogCisgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgbGVuID0gcy0+cGVuZGluZzsKICAgICBpZiAobGVuID4gc3RybS0+YXZhaWxfb3V0KSBsZW4gPSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CiAKLSAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQsIGxlbik7CisgICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgcy0+cGVuZGluZ19vdXQsIGxlbik7CiAgICAgc3RybS0+bmV4dF9vdXQgICs9IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgICs9IGxlbjsKKyAgICBzLT5wZW5kaW5nX291dCAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBsZW47CiAgICAgc3RybS0+YXZhaWxfb3V0ICAtPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmcgLT0gbGVuOwotICAgIGlmIChzdHJtLT5zdGF0ZS0+cGVuZGluZyA9PSAwKSB7Ci0gICAgICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nX2J1ZjsKKyAgICBzLT5wZW5kaW5nIC09IGxlbjsKKyAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CisgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CiAgICAgfQogfQogCkBAIC04MDEsNyArODg0LDcgQEAKICAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAogICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAgICAgKi8KLSAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZmx1c2ggPD0gb2xkX2ZsdXNoICYmCisgICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIFJBTksoZmx1c2gpIDw9IFJBTksob2xkX2ZsdXNoKSAmJgogICAgICAgICAgICAgICAgZmx1c2ggIT0gWl9GSU5JU0gpIHsKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQpAQCAtODUwLDYgKzkzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NDUsMTIgKzEwMjksMTIgQEAKIAogICAgIHNzID0gc291cmNlLT5zdGF0ZTsKIAotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwogCiAgICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKLSAgICB6bWVtY3B5KGRzLCBzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgZHMtPnN0cm0gPSBkZXN0OwogCiAgICAgZHMtPndpbmRvdyA9IChCeXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOwpAQCAtOTY2LDggKzEwNTAsOCBAQAogICAgIH0KICAgICAvKiBmb2xsb3dpbmcgem1lbWNweSBkbyBub3Qgd29yayBmb3IgMTYtYml0IE1TRE9TICovCiAgICAgem1lbWNweShkcy0+d2luZG93LCBzcy0+d2luZG93LCBkcy0+d19zaXplICogMiAqIHNpemVvZihCeXRlKSk7Ci0gICAgem1lbWNweShkcy0+cHJldiwgc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7Ci0gICAgem1lbWNweShkcy0+aGVhZCwgc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5wcmV2LCAodm9pZHBmKXNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+aGVhZCwgKHZvaWRwZilzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKICAgICB6bWVtY3B5KGRzLT5wZW5kaW5nX2J1Ziwgc3MtPnBlbmRpbmdfYnVmLCAodUludClkcy0+cGVuZGluZ19idWZfc2l6ZSk7CiAKICAgICBkcy0+cGVuZGluZ19vdXQgPSBkcy0+cGVuZGluZ19idWYgKyAoc3MtPnBlbmRpbmdfb3V0IC0gc3MtPnBlbmRpbmdfYnVmKTsKQEAgLTEwMDEsMTUgKzEwODUsMTUgQEAKIAogICAgIHN0cm0tPmF2YWlsX2luICAtPSBsZW47CiAKKyAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSkgewotICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNpZmRlZiBHWklQCiAgICAgZWxzZSBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMikgewotICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2VuZGlmCi0gICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKIApAQCAtMTAzNiw2ICsxMTIwLDcgQEAKICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKICAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPmluc2VydCA9IDA7CiAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIHMtPmluc19oID0gMDsKQEAgLTEzMTAsNiArMTM5NSw4IEBACiAgICAgdW5zaWduZWQgbW9yZTsgICAgLyogQW1vdW50IG9mIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LiAqLwogICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CiAKKyAgICBBc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZCIpOworCiAgICAgZG8gewogICAgICAgICBtb3JlID0gKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZSAtKHVsZylzLT5sb29rYWhlYWQgLSh1bGcpcy0+c3Ryc3RhcnQpOwogCkBAIC0xMzYyLDcgKzE0NDksNyBAQAogI2VuZGlmCiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSByZXR1cm47CisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSBicmVhazsKIAogICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKQEAgLTEzODEsMTIgKzE0NjgsMjQgQEAKICAgICAgICAgcy0+bG9va2FoZWFkICs9IG47CiAKICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgaW5wdXQ6ICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzLT5zdHJzdGFydF07Ci0gICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3MtPnN0cnN0YXJ0KzFdKTsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIHVJbnQgc3RyID0gcy0+c3Ryc3RhcnQgLSBzLT5pbnNlcnQ7CisgICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzdHJdOworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7CiAjaWYgTUlOX01BVENIICE9IDMKICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCiAjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChzLT5pbnNlcnQpIHsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICAgICAgc3RyKys7CisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0LS07CisgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA8IE1JTl9NQVRDSCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLAogICAgICAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCkBAIC0xNDI3LDYgKzE1MjYsOSBAQAogICAgICAgICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0OwogICAgICAgICB9CiAgICAgfQorCisgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAorICAgICAgICAgICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTA2LDggKzE2MDgsMTQgQEAKICAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKChsb25nKXMtPnN0cnN0YXJ0ID4gcy0+YmxvY2tfc3RhcnQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE2MDMsOCArMTcxMSwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAjaWZuZGVmIEZBU1RFU1QKQEAgLTE3MjgsOCArMTg0MiwxNCBAQAogICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKICAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KICNlbmRpZiAvKiBGQVNURVNUICovCiAKQEAgLTE3NDksMTEgKzE4NjksMTEgQEAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAogICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgZW5jb2RhYmxlIHJ1bi4KKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCkgeworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmVlZF9tb3JlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KQEAgLTE3NzYsNiArMTg5Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLwpAQCAtMTc5Niw4ICsxOTE3LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODI5LDYgKzE5NTYsMTIgQEAKICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmggYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCmluZGV4IGNiZjBkMWUuLmNlMDI5OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNkZWZpbmUgTUFYX0JJVFMgMTUKIC8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwogCisjZGVmaW5lIEJ1Zl9zaXplIDE2CisvKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovCisKICNkZWZpbmUgSU5JVF9TVEFURSAgICA0MgogI2RlZmluZSBFWFRSQV9TVEFURSAgIDY5CiAjZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMKQEAgLTEwMSw3ICsxMDQsNyBAQAogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwogICAgIHVJbnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCi0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVEIChmb3IgemlwIG9ubHkpIG9yIERFRkxBVEVEICovCisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KICAgICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUuYzogKi8KQEAgLTE4OCw3ICsxOTEsNyBAQAogICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi8KQEAgLTI0NCw3ICsyNDcsNyBAQAogICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLwogICAgIHVsZyBzdGF0aWNfbGVuOyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwotICAgIGludCBsYXN0X2VvYl9sZW47ICAgLyogYml0IGxlbmd0aCBvZiBFT0IgY29kZSBmb3IgbGFzdCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCiAjaWZkZWYgREVCVUcKICAgICB1bGcgY29tcHJlc3NlZF9sZW47IC8qIHRvdGFsIGJpdCBsZW5ndGggb2YgY29tcHJlc3NlZCBmaWxlIG1vZCAyXjMyICovCkBAIC0yOTQsNiArMjk3LDcgQEAKIGludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbiBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCmluZGV4IDYwNDczNmYuLjEzOGE2OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMKKysrIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgICB9IFwKIH0KIAotY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOworel9jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CiAvKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgogICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgogICovCkBAIC0zNCwxMCArMzQsNiBAQAogY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOwogdUxvbmcgZGljdElkOyAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCiAKLXZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9kZWZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9pbmZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwpAQCAtNTMsNiArNDksMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiBpbnQgIG1haW4gICAgICAgICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwogCisKKyNpZmRlZiBaX1NPTE8KKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUodm9pZCAqcSwgdm9pZCAqcCkKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IG15YWxsb2M7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gbXlmcmVlOworCisjZWxzZSAvKiAhWl9TT0xPICovCisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IChhbGxvY19mdW5jKTA7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gKGZyZWVfZnVuYykwOworCit2b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkKICAqLwpAQCAtMTYzLDYgKzE5Miw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmIC8qIFpfU09MTyAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggc21hbGwgYnVmZmVycwogICovCkBAIC0xNzQsMTQgKzIwNSwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAKICAgICB3aGlsZSAoY19zdHJlYW0udG90YWxfaW4gIT0gbGVuICYmIGNfc3RyZWFtLnRvdGFsX291dCA8IGNvbXByTGVuKSB7CkBAIC0yMTMsOCArMjQ0LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTI1Miw4ICsyODMsOCBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9TUEVFRCk7CkBAIC0zMDksOCArMzQwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTM0OSwxNCArMzgwLDE0IEBACiAgICAgaW50IGVycjsKICAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxlbjsKQEAgLTM4OCw4ICs0MTksOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDMwLDIyICs0NjEsMjIgQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCiAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKIAogICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVyOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCiAgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKQEAgLTQ2OSw4ICs1MDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDkxLDcgKzUyMiw3IEBACiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZkX3N0cmVhbSwgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICAgICAgfQogICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSB3aXRoIGRpY3QiKTsKICAgICB9CkBAIC01NDAsMTAgKzU3MSwxNSBAQAogICAgICAgICBwcmludGYoIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KKworI2lmZGVmIFpfU09MTworICAgIGFyZ2MgPSBzdHJsZW4oYXJndlswXSk7CisjZWxzZQogICAgIHRlc3RfY29tcHJlc3MoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKIAogICAgIHRlc3RfZ3ppbygoYXJnYyA+IDEgPyBhcmd2WzFdIDogVEVTVEZJTEUpLAogICAgICAgICAgICAgICB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyNlbmRpZgogCiAgICAgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CiAgICAgdGVzdF9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmggYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKaW5kZXggMGY4ZmI3OS4uZDg3NjU5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oCisrKyBiL01vZHVsZXMvemxpYi9nemd1dHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGd6Z3V0cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTIsNyArMTIsNyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yNywxMyArMjcsODAgQEAKICNlbmRpZgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOQVBJX0ZBTUlMWQorIyAgZGVmaW5lIG9wZW4gX29wZW4KKyMgIGRlZmluZSByZWFkIF9yZWFkCisjICBkZWZpbmUgd3JpdGUgX3dyaXRlCisjICBkZWZpbmUgY2xvc2UgX2Nsb3NlCisjZW5kaWYKKwogI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwogIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKICNlbmRpZgogCisjaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSAmJiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKEJPUkxBTkRDID4gMHg0MTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGlmZGVmIE1TRE9TCisvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKKyAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1RVUkJPQ19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBXSU4zMgorLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KKyMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisjICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKKyMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fU0FTQworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgVk1TCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX09TNDAwX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTVZTX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVpcmVkIGluIEM5OSwgeWV0IHN0aWxsIG5vdCBzdXBwb3J0ZWQgYnkKKyAgIE1pY3Jvc29mdCBtb3JlIHRoYW4gYSBkZWNhZGUgbGF0ZXIhKSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZSBudWxsCisgICB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0aGUgc3BhY2UgcHJvdmlkZWQgKi8KICNpZmRlZiBfTVNDX1ZFUgotIyAgaW5jbHVkZSA8aW8uaD4KLSMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKICNpZm5kZWYgbG9jYWwKQEAgLTUyLDcgKzExOSw3IEBACiAjICBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQogI2Vsc2UKLSMgIGlmZGVmIFNUREMKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgogIyAgICBpbmNsdWRlIDxlcnJuby5oPgogIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCiAjICBlbHNlCkBAIC02OCw3ICsxMzUsMTUgQEAKICAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOwogI2VuZGlmCiAKLS8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICovCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRoaXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLwogI2RlZmluZSBHWkJVRlNJWkUgODE5MgogCiAvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCkBAIC04NCwyMyArMTU5LDI1IEBACiAKIC8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRlbnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8qICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgICAgIC8qIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyAqLwogICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNlZSBnemlwIG1vZGVzIGFib3ZlICovCiAgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBmZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICB6X29mZjY0X3QgcG9zOyAgICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogYnVmZmVyIHNpemUsIHplcm8gaWYgbm90IGFsbG9jYXRlZCB5ZXQgKi8KICAgICB1bnNpZ25lZCB3YW50OyAgICAgICAgICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGRlZmF1bHQgaXMgR1pCVUZTSVpFICovCiAgICAgdW5zaWduZWQgY2hhciAqaW47ICAgICAgLyogaW5wdXQgYnVmZmVyICovCiAgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyogb3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAvKiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVudCAqLwogICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCi0gICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBkYXRhIHVudXNlZCBhdCBuZXh0ICovCi0gICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCi0gICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCi0gICAgel9vZmY2NF90IHJhdzsgICAgICAgICAgLyogd2hlcmUgdGhlIHJhdyBkYXRhIHN0YXJ0ZWQsIGZvciBzZWVraW5nICovCiAgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLwotICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIHRydWUgaWYgbGFzdCByZWFkIGRpcmVjdCwgZmFsc2UgaWYgZ3ppcCAqLworICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KICAgICAgICAgLyoganVzdCBmb3Igd3JpdGluZyAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCiAgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemlvLmMgYi9Nb2R1bGVzL3psaWIvZ3ppby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTkwZjQ5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi9nemlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI2ICswLDAgQEAKLS8qIGd6aW8uYyAtLSBJTyBvbiAuZ3ogZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKgotICogQ29tcGlsZSB0aGlzIGZpbGUgd2l0aCAtRE5PX0daQ09NUFJFU1MgdG8gYXZvaWQgdGhlIGNvbXByZXNzaW9uIGNvZGUuCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwotIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKLSNlbmRpZgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKLXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFpfQlVGU0laRQotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDQwOTYgLyogbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvciAxNi1iaXQgRE9TICovCi0jICBlbHNlCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgMTYzODQKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgWl9QUklOVEZfQlVGU0laRQotIyAgZGVmaW5lIFpfUFJJTlRGX0JVRlNJWkUgNDA5NgotI2VuZGlmCi0KLSNpZmRlZiBfX01WU19fCi0jICBwcmFnbWEgbWFwIChmZG9wZW4gLCAiXDE3NFwxNzRGRE9QRU4iKQotICAgRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLWV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKLWV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7Ci0jZW5kaWYKLQotI2RlZmluZSBBTExPQyhzaXplKSBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQotCi1zdGF0aWMgaW50IGNvbnN0IGd6X21hZ2ljWzJdID0gezB4MWYsIDB4OGJ9OyAvKiBnemlwIG1hZ2ljIGhlYWRlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgYXNjaWkgdGV4dCAqLwotI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhlYWRlciBDUkMgcHJlc2VudCAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZ3pfc3RyZWFtIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50ICAgICAgel9lcnI7ICAgLyogZXJyb3IgY29kZSBmb3IgbGFzdCBzdHJlYW0gb3BlcmF0aW9uICovCi0gICAgaW50ICAgICAgel9lb2Y7ICAgLyogc2V0IGlmIGVuZCBvZiBpbnB1dCBmaWxlICovCi0gICAgRklMRSAgICAgKmZpbGU7ICAgLyogLmd6IGZpbGUgKi8KLSAgICBCeXRlICAgICAqaW5idWY7ICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBCeXRlICAgICAqb3V0YnVmOyAvKiBvdXRwdXQgYnVmZmVyICovCi0gICAgdUxvbmcgICAgY3JjOyAgICAgLyogY3JjMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KLSAgICBjaGFyICAgICAqbXNnOyAgICAvKiBlcnJvciBtZXNzYWdlICovCi0gICAgY2hhciAgICAgKnBhdGg7ICAgLyogcGF0aCBuYW1lIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotICAgIGludCAgICAgIHRyYW5zcGFyZW50OyAvKiAxIGlmIGlucHV0IGZpbGUgaXMgbm90IGEgLmd6IGZpbGUgKi8KLSAgICBjaGFyICAgICBtb2RlOyAgICAvKiAndycgb3IgJ3InICovCi0gICAgel9vZmZfdCAgc3RhcnQ7ICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhIGluIGZpbGUgKGhlYWRlciBza2lwcGVkKSAqLwotICAgIHpfb2ZmX3QgIGluOyAgICAgIC8qIGJ5dGVzIGludG8gZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgel9vZmZfdCAgb3V0OyAgICAgLyogYnl0ZXMgb3V0IG9mIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIGludCAgICAgIGJhY2s7ICAgIC8qIG9uZSBjaGFyYWN0ZXIgcHVzaC1iYWNrICovCi0gICAgaW50ICAgICAgbGFzdDsgICAgLyogdHJ1ZSBpZiBwdXNoLWJhY2sgaXMgbGFzdCBjaGFyYWN0ZXIgKi8KLX0gZ3pfc3RyZWFtOwotCi0KLWxvY2FsIGd6RmlsZSBnel9vcGVuICAgICAgT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCAgZmQpKTsKLWxvY2FsIGludCBkb19mbHVzaCAgICAgICAgT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGludCAgICBnZXRfYnl0ZSAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIGNoZWNrX2hlYWRlciBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCBpbnQgICAgZGVzdHJveSAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBwdXRMb25nICAgICAgT0YoKEZJTEUgKmZpbGUsIHVMb25nIHgpKTsKLWxvY2FsIHVMb25nICBnZXRMb25nICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKS4gVGhlIGZpbGUgaXMgZ2l2ZW4gZWl0aGVyIGJ5IGZpbGUgZGVzY3JpcHRvcgotICAgb3IgcGF0aCBuYW1lIChpZiBmZCA9PSAtMSkuCi0gICAgIGd6X29wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUgd2FzCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGU7IGVycm5vCi0gICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLgotKi8KLWxvY2FsIGd6RmlsZSBnel9vcGVuIChwYXRoLCBtb2RlLCBmZCkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci0gICAgaW50ICBmZDsKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7IC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCi0gICAgY2hhciAqcCA9IChjaGFyKiltb2RlOwotICAgIGd6X3N0cmVhbSAqczsKLSAgICBjaGFyIGZtb2RlWzgwXTsgLyogY29weSBvZiBtb2RlLCB3aXRob3V0IHRoZSBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGNoYXIgKm0gPSBmbW9kZTsKLQotICAgIGlmICghcGF0aCB8fCAhbW9kZSkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMgPSAoZ3pfc3RyZWFtICopQUxMT0Moc2l6ZW9mKGd6X3N0cmVhbSkpOwotICAgIGlmICghcykgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMtPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHMtPnN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQgPSAwOwotICAgIHMtPmZpbGUgPSBOVUxMOwotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBzLT5tc2cgPSBOVUxMOwotICAgIHMtPnRyYW5zcGFyZW50ID0gMDsKLQotICAgIHMtPnBhdGggPSAoY2hhciopQUxMT0Moc3RybGVuKHBhdGgpKzEpOwotICAgIGlmIChzLT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBzdHJjcHkocy0+cGF0aCwgcGF0aCk7IC8qIGRvIHRoaXMgZWFybHkgZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcy0+bW9kZSA9ICdcMCc7Ci0gICAgZG8gewotICAgICAgICBpZiAoKnAgPT0gJ3InKSBzLT5tb2RlID0gJ3InOwotICAgICAgICBpZiAoKnAgPT0gJ3cnIHx8ICpwID09ICdhJykgcy0+bW9kZSA9ICd3JzsKLSAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdoJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9IVUZGTUFOX09OTFk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1InKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX1JMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICptKysgPSAqcDsgLyogY29weSB0aGUgbW9kZSAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKnArKyAmJiBtICE9IGZtb2RlICsgc2l6ZW9mKGZtb2RlKSk7Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ1wwJykgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGVyciA9IGRlZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgc3RyYXRlZ3kpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gc3VwcHJlc3MgemxpYiBoZWFkZXIgKi8KLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSNlbmRpZgotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gID0gcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLQotICAgICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCAtTUFYX1dCSVRTKTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHRlbGwgdGhhdCB0aGVyZSBpcyBubyB6bGliIGhlYWRlci4KLSAgICAgICAgICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpbmZsYXRlICpyZXF1aXJlcyogYW4gZXh0cmEgImR1bW15IiBieXRlCi0gICAgICAgICAqIGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIGFuZAotICAgICAgICAgKiByZXR1cm4gWl9TVFJFQU1fRU5ELiBIZXJlIHRoZSBnemlwIENSQzMyIGVuc3VyZXMgdGhhdCA0IGJ5dGVzIGFyZQotICAgICAgICAgKiBwcmVzZW50IGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotCi0gICAgZXJybm8gPSAwOwotICAgIHMtPmZpbGUgPSBmZCA8IDAgPyBGX09QRU4ocGF0aCwgZm1vZGUpIDogKEZJTEUqKWZkb3BlbihmZCwgZm1vZGUpOwotCi0gICAgaWYgKHMtPmZpbGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotICAgICAgICAvKiBXcml0ZSBhIHZlcnkgc2ltcGxlIC5neiBoZWFkZXI6Ci0gICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHMtPmZpbGUsICIlYyVjJWMlYyVjJWMlYyVjJWMlYyIsIGd6X21hZ2ljWzBdLCBnel9tYWdpY1sxXSwKLSAgICAgICAgICAgICBaX0RFRkxBVEVELCAwIC8qZmxhZ3MqLywgMCwwLDAsMCAvKnRpbWUqLywgMCAvKnhmbGFncyovLCBPU19DT0RFKTsKLSAgICAgICAgcy0+c3RhcnQgPSAxMEw7Ci0gICAgICAgIC8qIFdlIHVzZSAxMEwgaW5zdGVhZCBvZiBmdGVsbChzLT5maWxlKSB0byBiZWNhdXNlIGZ0ZWxsIGNhdXNlcyBhbgotICAgICAgICAgKiBmZmx1c2ggb24gc29tZSBzeXN0ZW1zLiBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lc24ndCB1c2UKLSAgICAgICAgICogc3RhcnQgYW55d2F5IGluIHdyaXRlIG1vZGUsIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbm90Ci0gICAgICAgICAqIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hlY2tfaGVhZGVyKHMpOyAvKiBza2lwIHRoZSAuZ3ogaGVhZGVyICovCi0gICAgICAgIHMtPnN0YXJ0ID0gZnRlbGwocy0+ZmlsZSkgLSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIChnekZpbGUpczsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIChwYXRoLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICByZXR1cm4gZ3pfb3BlbiAocGF0aCwgbW9kZSwgLTEpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQXNzb2NpYXRlIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gZmQgaXMgbm90IGR1cCdlZCBoZXJlCi0gICB0byBtaW1pYyB0aGUgYmVoYXZpbyh1KXIgb2YgZmRvcGVuLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQotICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIGNoYXIgbmFtZVs0Nl07ICAgICAgLyogYWxsb3cgZm9yIHVwIHRvIDEyOC1iaXQgaW50ZWdlcnMgKi8KLQotICAgIGlmIChmZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5hbWUsICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pfb3BlbiAobmFtZSwgbW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JUIGd6c2V0cGFyYW1zIChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGxldmVsOwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNoaW5nICovCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5zdHJlYW0pLCBsZXZlbCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4gRU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwotbG9jYWwgaW50IGdldF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5uZXh0X2luKSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBnemlwIGhlYWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3RyZWFtCi0gICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMgbm90IHByZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2ljIGhlYWRlciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5jb3JyZWN0LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBmb3IgdGhlIGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGludCBmbGFnczsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQotICAgIC8qIEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVhZCAtLSBoYW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVudCAqLwotICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewotICAgICAgICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBaX0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRlciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNrIHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMpOwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDApIHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRfYnl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAgIC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFueXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9zdHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlmIChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAgZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0gICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVzIGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQotICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5pbmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0gICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQgZ3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZvciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5uZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJuIC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9GICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkgewotCi0gICAgICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBmaXJzdCB0aGUgbG9va2FoZWFkIGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBuID0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIHptZW1jcHkocy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwgbik7Ci0gICAgICAgICAgICAgICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBuZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0KLSAgICAgICAgICAgICAgICAgICAgKHVJbnQpZnJlYWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsIHMtPmZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhcy0+el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5hbCBzaXplICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+c3RyZWFtLm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAgICAgICAvKiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25nKCkgbWF5IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNhc2Ugb2YgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBmb3Igc3VjaCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVja19oZWFkZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyB8fCBzLT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgaWYgKGxlbiA9PSBzLT5zdHJlYW0uYXZhaWxfb3V0ICYmCi0gICAgICAgIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZQotICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICByZXR1cm4gZ3pyZWFkKGZpbGUsICZjLCAxKSA9PSAxID8gYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUHVzaCBvbmUgYnl0ZSBiYWNrIG9udG8gdGhlIHN0cmVhbS4KLSovCi1pbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQotICAgIGludCBjOwotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InIHx8IGMgPT0gRU9GIHx8IHMtPmJhY2sgIT0gRU9GKSByZXR1cm4gRU9GOwotICAgIHMtPmJhY2sgPSBjOwotICAgIHMtPm91dC0tOwotICAgIHMtPmxhc3QgPSAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLSAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZQotICAgcmVhZCwgb3IgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuCi0gICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZAotICAgd2l0aCBhIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBvZiBlcnJvci4KLQotICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IG9wdGltaXplZCBhdCBhbGwuCi0qLwotY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGNoYXIgKmIgPSBidWY7Ci0gICAgaWYgKGJ1ZiA9PSBaX05VTEwgfHwgbGVuIDw9IDApIHJldHVybiBaX05VTEw7Ci0KLSAgICB3aGlsZSAoLS1sZW4gPiAwICYmIGd6cmVhZChmaWxlLCBidWYsIDEpID09IDEgJiYgKmJ1ZisrICE9ICdcbicpIDsKLSAgICAqYnVmID0gJ1wwJzsKLSAgICByZXR1cm4gYiA9PSBidWYgJiYgbGVuID4gMCA/IFpfTlVMTCA6IGI7Ci19Ci0KLQotI2lmbmRlZiBOT19HWkNPTVBSRVNTCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotaW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHBjIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gbGVuOwotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSykgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgKGNvbnN0IEJ5dGVmICopYnVmLCBsZW4pOwotCi0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9pbik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotI2lmZGVmIFNUREMKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLyogYXJncyAqLyAuLi4pCi17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgdmFfbGlzdCB2YTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotI2lmZGVmIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsICh1bnNpZ25lZClsZW4pOwotfQotI2Vsc2UgLyogbm90IEFOU0kgQyAqLwotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKLSAgICBpbnQgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjA7Ci17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSNpZmRlZiBOT19zbnByaW50ZgotIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pOwotfQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dGMoZmlsZSwgYykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgYzsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGNjID0gKHVuc2lnbmVkIGNoYXIpIGM7IC8qIHJlcXVpcmVkIGZvciBiaWcgZW5kaWFuIHN5c3RlbXMgKi8KLQotICAgIHJldHVybiBnendyaXRlKGZpbGUsICZjYywgMSkgPT0gMSA/IChpbnQpY2MgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKnM7Ci17Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgKGNoYXIqKXMsICh1bnNpZ25lZClzdHJsZW4ocykpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uCi0qLwotbG9jYWwgaW50IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgZmx1c2g7Ci17Ci0gICAgdUludCBsZW47Ci0gICAgaW50IGRvbmUgPSAwOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOyAvKiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLwotCi0gICAgZm9yICg7OykgewotICAgICAgICBsZW4gPSBaX0JVRlNJWkUgLSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKCh1SW50KWZ3cml0ZShzLT5vdXRidWYsIDEsIGxlbiwgcy0+ZmlsZSkgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9uZSkgYnJlYWs7Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBmbHVzaCk7Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIC8qIElnbm9yZSB0aGUgc2Vjb25kIG9mIHR3byBjb25zZWN1dGl2ZSBmbHVzaGVzOiAqLwotICAgICAgICBpZiAobGVuID09IDAgJiYgcy0+el9lcnIgPT0gWl9CVUZfRVJST1IpIHMtPnpfZXJyID0gWl9PSzsKLQotICAgICAgICAvKiBkZWZsYXRlIGhhcyBmaW5pc2hlZCBmbHVzaGluZyBvbmx5IHdoZW4gaXQgaGFzbid0IHVzZWQgdXAKLSAgICAgICAgICogYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXI6Ci0gICAgICAgICAqLwotICAgICAgICBkb25lID0gKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCB8fCBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotCi0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LICYmIHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotCi1pbnQgWkVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICAgZ3pGaWxlIGZpbGU7Ci0gICAgIGludCBmbHVzaDsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIGludCBlcnIgPSBkb19mbHVzaCAoZmlsZSwgZmx1c2gpOwotCi0gICAgaWYgKGVycikgcmV0dXJuIGVycjsKLSAgICBmZmx1c2gocy0+ZmlsZSk7Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0jZW5kaWYgLyogTk9fR1pDT01QUkVTUyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KLSAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAgICAgIFNFRUtfRU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KLSAgICAgIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KLSovCi16X29mZl90IFpFWFBPUlQgZ3pzZWVrIChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICB6X29mZl90IG9mZnNldDsKLSAgICBpbnQgd2hlbmNlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHdoZW5jZSA9PSBTRUVLX0VORCB8fAotICAgICAgICBzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJyID09IFpfREFUQV9FUlJPUikgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIC0xTDsKLSNlbHNlCi0gICAgICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpIHsKLSAgICAgICAgICAgIG9mZnNldCAtPSBzLT5pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB6ZXJvIGJ5dGVzIHRvIHdyaXRlLiAqLwotICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOyAvKiBmb3Igc2Vla2luZyAqLwotICAgICAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICAgICAgICAgIHptZW16ZXJvKHMtPmluYnVmLCBaX0JVRlNJWkUpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICAgICAgdUludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9ICh1SW50KW9mZnNldDsKLQotICAgICAgICAgICAgc2l6ZSA9IGd6d3JpdGUoZmlsZSwgcy0+aW5idWYsIHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHMtPmluOwotI2VuZGlmCi0gICAgfQotICAgIC8qIFJlc3Qgb2YgZnVuY3Rpb24gaXMgZm9yIHJlYWRpbmcgb25seSAqLwotCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBwb3NpdGlvbiAqLwotICAgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpIHsKLSAgICAgICAgb2Zmc2V0ICs9IHMtPm91dDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLyogbWFwIHRvIGZzZWVrICovCi0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgcy0+aW4gPSBzLT5vdXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogRm9yIGEgbmVnYXRpdmUgc2VlaywgcmV3aW5kIGFuZCB1c2UgcG9zaXRpdmUgc2VlayAqLwotICAgIGlmIChvZmZzZXQgPj0gcy0+b3V0KSB7Ci0gICAgICAgIG9mZnNldCAtPSBzLT5vdXQ7Ci0gICAgfSBlbHNlIGlmIChnenJld2luZChmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgLyogb2Zmc2V0IGlzIG5vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuICovCi0KLSAgICBpZiAob2Zmc2V0ICE9IDAgJiYgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSAgICAgICAgaWYgKHMtPm91dGJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIG9mZnNldC0tOwotICAgICAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgfQotICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICBpbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9IChpbnQpb2Zmc2V0OwotCi0gICAgICAgIHNpemUgPSBnenJlYWQoZmlsZSwgcy0+b3V0YnVmLCAodUludClzaXplKTsKLSAgICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIC0xTDsKLSAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgfQotICAgIHJldHVybiBzLT5vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXdpbmRzIGlucHV0IGZpbGUuCi0qLwotaW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAtMTsKLQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYgKCFzLT50cmFuc3BhcmVudCkgKHZvaWQpaW5mbGF0ZVJlc2V0KCZzLT5zdHJlYW0pOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHJldHVybiBmc2VlayhzLT5maWxlLCBzLT5zdGFydCwgU0VFS19TRVQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgotICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemVvZiAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgLyogV2l0aCBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCi0gICAgICogY3JjIHRyYWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9GCi0gICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxpY2l0bHkgaGVyZS4KLSAgICAgKi8KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOwotICAgIHJldHVybiBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgaWYgcmVhZGluZyBhbmQgZG9pbmcgc28gdHJhbnNwYXJlbnRseSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3pkaXJlY3QgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIHJldHVybiBzLT50cmFuc3BhcmVudDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcgKGZpbGUsIHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwotICAgIGZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4ZmYpLCBmaWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0uIFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcgZ2V0TG9uZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZylnZXRfYnl0ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDg7Ci0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCArPSAoKHVMb25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGlmIChkb19mbHVzaCAoZmlsZSwgWl9GSU5JU0gpICE9IFpfT0spCi0gICAgICAgICAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLQotICAgICAgICBwdXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAgICAgICBwdXRMb25nIChzLT5maWxlLCAodUxvbmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0jaWZkZWYgU1REQwotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pIHN0cmVycm9yKGVycm51bSkKLSNlbHNlCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgIiIKLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmlsZSwgZXJybnVtKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNoYXIgKm07Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAqZXJybnVtID0gcy0+el9lcnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25zdCBjaGFyKikiIjsKLQotICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJlcnJvcihlcnJubykgOiBzLT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0gPT0gJ1wwJykgbSA9IChjaGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLSAgICBzLT5tc2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVuKG0pICsgMyk7Ci0gICAgaWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAgc3RyY2F0KHMtPm1zZywgIjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKilzLT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDbGVhciB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSByZWFsIGZpbGUuCi0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMtPmZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6bGliLmMgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwppbmRleCA2MDNlNjBlLi5mYWUyMDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3psaWIuYworKysgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwpAQCAtMSwxOSArMSwyMyBAQAogLyogZ3psaWIuYyAtLSB6bGliIGZ1bmN0aW9ucyBjb21tb24gdG8gcmVhZGluZyBhbmQgd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAjaW5jbHVkZSAiZ3pndXRzLmgiCiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAorI2Vsc2UKICNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAogIyAgZGVmaW5lIExTRUVLIGxzZWVrNjQKICNlbHNlCiAjICBkZWZpbmUgTFNFRUsgbHNlZWsKICNlbmRpZgorI2VuZGlmCiAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgdm9pZCBnel9yZXNldCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICopKTsKIAogI2lmIGRlZmluZWQgVU5ERVJfQ0UKIApAQCAtNzEsMjggKzc1LDQwIEBACiBsb2NhbCB2b2lkIGd6X3Jlc2V0KHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICBzdGF0ZS0+eC5oYXZlID0gMDsgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7ICAgLyogZm9yIHJlYWRpbmcgLi4uICovCi0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICAgICAgc3RhdGUtPmVvZiA9IDA7ICAgICAgICAgICAgIC8qIG5vdCBhdCBlbmQgb2YgZmlsZSAqLworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7ICAgICAgICAgICAgLyogaGF2ZSBub3QgcmVhZCBwYXN0IGVuZCB5ZXQgKi8KICAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgICAgICAvKiBkZWZhdWx0IGZvciBlbXB0eSBmaWxlICovCiAgICAgfQogICAgIHN0YXRlLT5zZWVrID0gMDsgICAgICAgICAgICAgICAgLyogbm8gc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7ICAgIC8qIGNsZWFyIGVycm9yICovCi0gICAgc3RhdGUtPnBvcyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KKyAgICBzdGF0ZS0+eC5wb3MgPSAwOyAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLwogICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsgICAgICAgLyogbm8gaW5wdXQgZGF0YSB5ZXQgKi8KIH0KIAogLyogT3BlbiBhIGd6aXAgZmlsZSBlaXRoZXIgYnkgbmFtZSBvciBmaWxlIGRlc2NyaXB0b3IuICovCiBsb2NhbCBnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IHZvaWQgKnBhdGg7CiAgICAgaW50IGZkOwogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHNpemVfdCBsZW47CisgICAgaW50IG9mbGFnOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCBjbG9leGVjID0gMDsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgIGludCBleGNsdXNpdmUgPSAwOworI2VuZGlmCisKKyAgICAvKiBjaGVjayBpbnB1dCAqLworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KLSAgICBzdGF0ZSA9IG1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZS0+c2l6ZSA9IDA7ICAgICAgICAgICAgLyogbm8gYnVmZmVycyBhbGxvY2F0ZWQgeWV0ICovCkBAIC0xMDMsNiArMTE5LDcgQEAKICAgICBzdGF0ZS0+bW9kZSA9IEdaX05PTkU7CiAgICAgc3RhdGUtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwogICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKICAgICB3aGlsZSAoKm1vZGUpIHsKICAgICAgICAgaWYgKCptb2RlID49ICcwJyAmJiAqbW9kZSA8PSAnOScpCiAgICAgICAgICAgICBzdGF0ZS0+bGV2ZWwgPSAqbW9kZSAtICcwJzsKQEAgLTEyNCw2ICsxNDEsMTYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBpZ25vcmUgLS0gd2lsbCByZXF1ZXN0IGJpbmFyeSBhbnl3YXkgKi8KICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNsb2V4ZWMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1LDYgKzE2MiwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSVhFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUgKi8KICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICB9CkBAIC0xNDcsMzAgKzE3OCw3MSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBjYW4ndCBmb3JjZSB0cmFuc3BhcmVudCByZWFkICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgLyogZm9yIGVtcHR5IGZpbGUgKi8KKyAgICB9CisKICAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgc3RhdGUtPnBhdGggPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgMSk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKSB7CisgICAgICAgIGxlbiA9IHdjc3RvbWJzKE5VTEwsIHBhdGgsIDApOworICAgICAgICBpZiAobGVuID09IChzaXplX3QpLTEpCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisgICAgc3RhdGUtPnBhdGggPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAoc3RhdGUtPnBhdGggPT0gTlVMTCkgewogICAgICAgICBmcmVlKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKQorICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKHN0YXRlLT5wYXRoKSA9IDA7CisgICAgZWxzZQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisjZWxzZQorICAgICAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2VuZGlmCiAKLSAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUgKG9yIGp1c3QgdXNlIGZkKSAqLwotICAgIHN0YXRlLT5mZCA9IGZkICE9IC0xID8gZmQgOgotICAgICAgICBvcGVuKHBhdGgsCisgICAgLyogY29tcHV0ZSB0aGUgZmxhZ3MgZm9yIG9wZW4oKSAqLworICAgIG9mbGFnID0KICNpZmRlZiBPX0xBUkdFRklMRQotICAgICAgICAgICAgT19MQVJHRUZJTEUgfAorICAgICAgICBPX0xBUkdFRklMRSB8CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgICAgICAgICAgT19CSU5BUlkgfAorICAgICAgICBPX0JJTkFSWSB8CiAjZW5kaWYKLSAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgICAgICAgICBPX1JET05MWSA6Ci0gICAgICAgICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8ICgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPwotICAgICAgICAgICAgICAgICAgICAgICAgT19UUlVOQyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX0FQUEVORCkpKSwKLSAgICAgICAgICAgIDA2NjYpOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAoY2xvZXhlYyA/IE9fQ0xPRVhFQyA6IDApIHwKKyNlbmRpZgorICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICBPX1JET05MWSA6CisgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAoZXhjbHVzaXZlID8gT19FWENMIDogMCkgfAorI2VuZGlmCisgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgT19UUlVOQyA6CisgICAgICAgICAgIE9fQVBQRU5EKSkpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAob3IganVzdCB1c2UgZmQpICovCisgICAgc3RhdGUtPmZkID0gZmQgPiAtMSA/IGZkIDogKAorI2lmZGVmIF9XSU4zMgorICAgICAgICBmZCA9PSAtMiA/IF93b3BlbihwYXRoLCBvZmxhZywgMDY2NikgOgorI2VuZGlmCisgICAgICAgIG9wZW4oKGNvbnN0IGNoYXIgKilwYXRoLCBvZmxhZywgMDY2NikpOwogICAgIGlmIChzdGF0ZS0+ZmQgPT0gLTEpIHsKICAgICAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgICAgIGZyZWUoc3RhdGUpOwpAQCAtMjE2LDE1ICsyODgsMjkgQEAKICAgICBjaGFyICpwYXRoOyAgICAgICAgIC8qIGlkZW50aWZpZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAgICAgZ3pGaWxlIGd6OwogCi0gICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQorICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IChjaGFyICopbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHBhdGgsIDcgKyAzICogc2l6ZW9mKGludCksICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCisjZWxzZQogICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworI2VuZGlmCiAgICAgZ3ogPSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKTsKICAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiBnejsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIF9XSU4zMgorZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuX3cocGF0aCwgbW9kZSkKKyAgICBjb25zdCB3Y2hhcl90ICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTIsIG1vZGUpOworfQorI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTI0Myw4ICszMjksOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3RlZCBzaXplICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzaXplIDwgMikKKyAgICAgICAgc2l6ZSA9IDI7ICAgICAgICAgICAgICAgLyogbmVlZCB0d28gYnl0ZXMgdG8gY2hlY2sgbWFnaWMgaGVhZGVyICovCiAgICAgc3RhdGUtPndhbnQgPSBzaXplOwogICAgIHJldHVybiAwOwogfQpAQCAtMjYxLDcgKzM0Nyw4IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogYmFjayB1cCBhbmQgc3RhcnQgb3ZlciAqLwpAQCAtMjg5LDcgKzM3Niw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjYW4gb25seSBzZWVrIGZyb20gc3RhcnQgb3IgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAqLwpAQCAtMjk4LDMxICszODUsMzIgQEAKIAogICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8gYSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCiAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkKLSAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+eC5wb3M7CiAgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCiAgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKICAgICBzdGF0ZS0+c2VlayA9IDA7CiAKICAgICAvKiBpZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgotICAgICAgICBzdGF0ZS0+cG9zICsgb2Zmc2V0ID49IHN0YXRlLT5yYXcpIHsKLSAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+aGF2ZSwgU0VFS19DVVIpOworICAgICAgICAgICAgc3RhdGUtPngucG9zICsgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CiAgICAgICAgIGlmIChyZXQgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gc3RhdGUtPnBvczsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHN0YXRlLT54LnBvczsKICAgICB9CiAKICAgICAvKiBjYWxjdWxhdGUgc2tpcCBhbW91bnQsIHJld2luZGluZyBpZiBuZWVkZWQgZm9yIGJhY2sgc2VlayB3aGVuIHJlYWRpbmcgKi8KICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkgICAgICAgICAvKiB3cml0aW5nIC0tIGNhbid0IGdvIGJhY2t3YXJkcyAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT54LnBvczsKICAgICAgICAgaWYgKG9mZnNldCA8IDApICAgICAgICAgICAgICAgICAgICAgLyogYmVmb3JlIHN0YXJ0IG9mIGZpbGUhICovCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChnenJld2luZChmaWxlKSA9PSAtMSkgICAgICAgICAgIC8qIHJld2luZCwgdGhlbiBza2lwIHRvIG9mZnNldCAqLwpAQCAtMzMxLDExICs0MTksMTEgQEAKIAogICAgIC8qIGlmIHJlYWRpbmcsIHNraXAgd2hhdCdzIGluIG91dHB1dCBidWZmZXIgKG9uZSBsZXNzIGd6Z2V0YygpIGNoZWNrKSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7Ci0gICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBvZmZzZXQgPwotICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIG9mZnNldCAtPSBuOwogICAgIH0KIApAQCAtMzQ0LDcgKzQzMiw3IEBACiAgICAgICAgIHN0YXRlLT5zZWVrID0gMTsKICAgICAgICAgc3RhdGUtPnNraXAgPSBvZmZzZXQ7CiAgICAgfQotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgb2Zmc2V0OworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQ7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTM3Myw3ICs0NjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiByZXR1cm4gcG9zaXRpb24gKi8KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQzMyw4ICs1MjEsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8qIHJldHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLwotICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgKHN0YXRlLT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+aGF2ZSA9PSAwKSA6IDA7CisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPyBzdGF0ZS0+cGFzdCA6IDA7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ1NCw3ICs1NDEsOCBAQAogICAgIC8qIHJldHVybiBlcnJvciBpbmZvcm1hdGlvbiAqLwogICAgIGlmIChlcnJudW0gIT0gTlVMTCkKICAgICAgICAgKmVycm51bSA9IHN0YXRlLT5lcnI7Ci0gICAgcmV0dXJuIHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZzsKKyAgICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDcxLDggKzU1OSwxMCBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKiBjbGVhciBlcnJvciBhbmQgZW5kLW9mLWZpbGUgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiB9CiAKQEAgLTQ5NCwyNiArNTg0LDMzIEBACiAgICAgICAgIHN0YXRlLT5tc2cgPSBOVUxMOwogICAgIH0KIAorICAgIC8qIGlmIGZhdGFsLCBzZXQgc3RhdGUtPnguaGF2ZSB0byAwIHNvIHRoYXQgdGhlIGd6Z2V0YygpIG1hY3JvIGZhaWxzICovCisgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisKICAgICAvKiBzZXQgZXJyb3IgY29kZSwgYW5kIGlmIG5vIG1lc3NhZ2UsIHRoZW4gZG9uZSAqLwogICAgIHN0YXRlLT5lcnIgPSBlcnI7CiAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgc2F2ZSBhcyBzdGF0aWMgc3RyaW5nICovCi0gICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikgewotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKiltc2c7CisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvKiBjb25zdHJ1Y3QgZXJyb3IgbWVzc2FnZSB3aXRoIHBhdGggKi8KLSAgICBpZiAoKHN0YXRlLT5tc2cgPSBtYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09IE5VTEwpIHsKKyAgICBpZiAoKHN0YXRlLT5tc2cgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0KKyAgICAgICAgICAgIE5VTEwpIHsKICAgICAgICAgc3RhdGUtPmVyciA9IFpfTUVNX0VSUk9SOwotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKikib3V0IG9mIG1lbW9yeSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNlCiAgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgIjogIik7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nenJlYWQuYyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwppbmRleCA1NDgyMDFhLi5iZjQ1MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKKysrIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwxMCArOCw5IEBACiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIGludCBnel9sb2FkIE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkICopKTsKIGxvY2FsIGludCBnel9hdmFpbCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbmV4dDQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgbG9uZyAqKSk7Ci1sb2NhbCBpbnQgZ3pfaGVhZCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfbG9vayBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfZGVjb21wIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9tYWtlIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9mZXRjaCBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfc2tpcCBPRigoZ3pfc3RhdGVwLCB6X29mZjY0X3QpKTsKIAogLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KQEAgLTQ2LDczICs0NSw1NCBAQAogICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAogICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKICAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgotICAgZ3pfYXZhaWwoKSBhc3N1bWVzIHRoYXQgc3RybS0+YXZhaWxfaW4gPT0gMC4gKi8KKyAgIElmIHN0cm0tPmF2YWlsX2luICE9IDAsIHRoZW4gdGhlIGN1cnJlbnQgZGF0YSBpcyBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mCisgICB0aGUgaW5wdXQgYnVmZmVyLCBhbmQgdGhlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgaXMgbG9hZGVkIHdpdGggdGhlCisgICBhdmFpbGFibGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBmaWxlLiAqLwogbG9jYWwgaW50IGd6X2F2YWlsKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICB1bnNpZ25lZCBnb3Q7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHN0YXRlLT5lb2YgPT0gMCkgewotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluLCBzdGF0ZS0+c2l6ZSwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgKikmKHN0cm0tPmF2YWlsX2luKSkgPT0gLTEpCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeyAgICAgICAvKiBjb3B5IHdoYXQncyB0aGVyZSB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdGF0ZS0+aW47CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBjaGFyICpxID0gc3RybS0+bmV4dF9pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKnErKzsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiArIHN0cm0tPmF2YWlsX2luLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luLCAmZ290KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gZ290OwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotLyogR2V0IG5leHQgYnl0ZSBmcm9tIGlucHV0LCBvciAtMSBpZiBlbmQgb3IgZXJyb3IuICovCi0jZGVmaW5lIE5FWFQoKSAoKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKSA/IC0xIDogXAotICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbiA9PSAwID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbi0tLCAqKHN0cm0tPm5leHRfaW4pKyspKSkKLQotLyogR2V0IGEgZm91ci1ieXRlIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBhbmQgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgdGhlIHZhbHVlCi0gICBpbiAqcmV0LiAgT3RoZXJ3aXNlIC0xIGlzIHJldHVybmVkIGFuZCAqcmV0IGlzIG5vdCBtb2RpZmllZC4gKi8KLWxvY2FsIGludCBnel9uZXh0NChzdGF0ZSwgcmV0KQotICAgIGd6X3N0YXRlcCBzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nICpyZXQ7Ci17Ci0gICAgaW50IGNoOwotICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0KLSAgICB2YWwgPSBORVhUKCk7Ci0gICAgdmFsICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpTkVYVCgpIDw8IDE2OwotICAgIGNoID0gTkVYVCgpOwotICAgIGlmIChjaCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZyljaCA8PCAyNDsKLSAgICAqcmV0ID0gdmFsOwotICAgIHJldHVybiAwOwotfQotCi0vKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+aGF2ZSBtdXN0IGJlIHplcm8uCisvKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+eC5oYXZlIG11c3QgYmUgMC4KICAgIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4sIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4gIHN0YXRlLT5ob3cgd2lsbCBiZQogICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBkYXRhIGF2YWlsYWJsZSwgd2lsbCBiZSBzZXQgdG8gQ09QWQogICAgaWYgdGhlcmUgaXMgbm8gZ3ppcCBoZWFkZXIgYW5kIGRpcmVjdCBjb3B5aW5nIHdpbGwgYmUgcGVyZm9ybWVkLCBvciBpdCB3aWxsCi0gICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbiwgYW5kIHRoZSBnemlwIGhlYWRlciB3aWxsIGJlIHNraXBwZWQgc28KLSAgIHRoYXQgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGRhdGEgaXMgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbS4gIElmIGRpcmVjdAotICAgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dCBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0bwotICAgdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0IGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0bwotICAgZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZQotICAgc3RhdGUgYW5kIHRoZSBjaGVjayB2YWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkLiAgZ3pfaGVhZCgpIHdpbGwgcmV0dXJuIDAgb24KLSAgIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIHJlYWQgZXJyb3JzIG9yIGd6aXAgaGVhZGVyCi0gICBlcnJvcnMuICAqLwotbG9jYWwgaW50IGd6X2hlYWQoc3RhdGUpCisgICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbi4gIElmIGRpcmVjdCBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0CisgICBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQKKyAgIGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0byBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IKKyAgIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZSBzdGF0ZSB3aWxsIGJlIGluaXRpYWxpemVkLgorICAgZ3pfbG9vaygpIHdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGd6X2xvb2soc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0gICAgaW50IGZsYWdzOwotICAgIHVuc2lnbmVkIGxlbjsKIAogICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVycyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgewogICAgICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCi0gICAgICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOwogICAgICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CkBAIC0xMjksNyArMTA5LDcgQEAKICAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7CiAgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7Ci0gICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIC0xNSkgIT0gWl9PSykgeyAgICAvKiByYXcgaW5mbGF0ZSAqLworICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAxNSArIDE2KSAhPSBaX09LKSB7ICAgIC8qIGd1bnppcCAqLwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICAgICAgICAgIHN0YXRlLT5zaXplID0gMDsKQEAgLTEzOCw4MyArMTE4LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBnZXQgc29tZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgIC8qIGdldCBhdCBsZWFzdCB0aGUgbWFnaWMgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IDIpIHsKICAgICAgICAgaWYgKGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBsb29rIGZvciB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgYnl0ZXMgMzEgYW5kIDEzOSAqLwotICAgIGlmIChzdHJtLT5uZXh0X2luWzBdID09IDMxKSB7Ci0gICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgc3RybS0+bmV4dF9pblswXSA9PSAxMzkpIHsKLSAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBnemlwIGhlYWRlciwgd29vIGhvbyEgKi8KLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgcmVzdCBvZiBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChORVhUKCkgIT0gOCkgeyAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsYWdzID0gTkVYVCgpOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMHhlMCkgeyAgICAgLyogcmVzZXJ2ZWQgZmxhZyBiaXRzICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gaGVhZGVyIGZsYWdzIHNldCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCi0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBleHRyYSBmbGFncyAqLwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLwotICAgICAgICAgICAgaWYgKGZsYWdzICYgNCkgeyAgICAgICAgLyogZXh0cmEgZmllbGQgKi8KLSAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpTkVYVCgpOwotICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbi0tKQotICAgICAgICAgICAgICAgICAgICBpZiAoTkVYVCgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWdzICYgOCkgICAgICAgICAgLyogZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDE2KSAgICAgICAgIC8qIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMikgeyAgICAgICAgLyogaGVhZGVyIGNyYyAqLwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIG5vdCBjaGVja2VkIGZvciBoZXJlIC0tIGl0IHdpbGwgYmUKLSAgICAgICAgICAgICAgIG5vdGljZWQgb24gdGhlIGZpcnN0IHJlcXVlc3QgZm9yIHVuY29tcHJlc3NlZCBkYXRhICovCi0KLSAgICAgICAgICAgIC8qIHNldCB1cCBmb3IgZGVjb21wcmVzc2lvbiAqLwotICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOwotICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIG5vdCBhIGd6aXAgZmlsZSAtLSBzYXZlIGZpcnN0IGJ5dGUgKDMxKSBhbmQgZmFsbCB0byByYXcgaS9vICovCi0gICAgICAgICAgICBzdGF0ZS0+b3V0WzBdID0gMzE7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIH0KKyAgICAvKiBsb29rIGZvciBnemlwIG1hZ2ljIGJ5dGVzIC0tIGlmIHRoZXJlLCBkbyBnemlwIGRlY29kaW5nIChub3RlOiB0aGVyZSBpcworICAgICAgIGEgbG9naWNhbCBkaWxlbW1hIGhlcmUgd2hlbiBjb25zaWRlcmluZyB0aGUgY2FzZSBvZiBhIHBhcnRpYWxseSB3cml0dGVuCisgICAgICAgZ3ppcCBmaWxlLCB0byB3aXQsIGlmIGEgc2luZ2xlIDMxIGJ5dGUgaXMgd3JpdHRlbiwgdGhlbiB3ZSBjYW5ub3QgdGVsbAorICAgICAgIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZS1ieXRlIGZpbGUsIG9yIGp1c3QgYSBwYXJ0aWFsbHkgd3JpdHRlbiBnemlwCisgICAgICAgZmlsZSAtLSBmb3IgaGVyZSB3ZSBhc3N1bWUgdGhhdCBpZiBhIGd6aXAgZmlsZSBpcyBiZWluZyB3cml0dGVuLCB0aGVuCisgICAgICAgdGhlIGhlYWRlciB3aWxsIGJlIHdyaXR0ZW4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uLCBzbyB0aGF0IHJlYWRpbmcgYQorICAgICAgIHNpbmdsZSBieXRlIGlzIHN1ZmZpY2llbnQgaW5kaWNhdGlvbiB0aGF0IGl0IGlzIG5vdCBhIGd6aXAgZmlsZSkgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPiAxICYmCisgICAgICAgICAgICBzdHJtLT5uZXh0X2luWzBdID09IDMxICYmIHN0cm0tPm5leHRfaW5bMV0gPT0gMTM5KSB7CisgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBkb2luZyByYXcgaS9vLCBzYXZlIHN0YXJ0IG9mIHJhdyBkYXRhIGZvciBzZWVraW5nLCBjb3B5IGFueSBsZWZ0b3ZlcgotICAgICAgIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbgotICAgICAgIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcyBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLwotICAgIHN0YXRlLT5yYXcgPSBzdGF0ZS0+cG9zOwotICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKKyAgICAvKiBubyBnemlwIGhlYWRlciAtLSBpZiB3ZSB3ZXJlIGRlY29kaW5nIGd6aXAgYmVmb3JlLCB0aGVuIHRoaXMgaXMgdHJhaWxpbmcKKyAgICAgICBnYXJiYWdlLiAgSWdub3JlIHRoZSB0cmFpbGluZyBnYXJiYWdlIGFuZCBmaW5pc2guICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QgPT0gMCkgeworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAxOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZG9pbmcgcmF3IGkvbywgY29weSBhbnkgbGVmdG92ZXIgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0CisgICAgICAgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzCisgICAgICAgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsKLSAgICAgICAgbWVtY3B5KHN0YXRlLT5uZXh0ICsgc3RhdGUtPmhhdmUsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgKz0gc3RybS0+YXZhaWxfaW47CisgICAgICAgIG1lbWNweShzdGF0ZS0+eC5uZXh0LCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSBzdHJtLT5hdmFpbF9pbjsKICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOwogICAgIH0KICAgICBzdGF0ZS0+aG93ID0gQ09QWTsKQEAgLTIyMywxOSArMTY1LDE1IEBACiB9CiAKIC8qIERlY29tcHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBpbiB0aGUgc3RhdGUuCi0gICBJZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgcmVhY2hlZCwgdGhlbiB2ZXJpZnkgdGhlIGd6aXAgdHJhaWxlcgotICAgY2hlY2sgdmFsdWUgYW5kIGxlbmd0aCAobW9kdWxvIDJeMzIpLiAgc3RhdGUtPmhhdmUgYW5kIHN0YXRlLT5uZXh0IGFyZSBzZXQKLSAgIHRvIHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlIGNyYyBpcyB1cGRhdGVkLiAgSWYgdGhlCi0gICB0cmFpbGVyIGlzIHZlcmlmaWVkLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IgdGhlIG5leHQgZ3ppcAotICAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xCi0gICBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgb3IgYSBmYWlsZWQgZ3ppcAotICAgdHJhaWxlciB2ZXJpZmljYXRpb24uICovCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5leHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yCisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAqLwogbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICB1bnNpZ25lZCBoYWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBjcmMsIGxlbjsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCiAgICAgLyogZmlsbCBvdXRwdXQgYnVmZmVyIHVwIHRvIGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwpAQCAtMjQ1LDE1ICsxODMsMTUgQEAKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLyogZGVjb21wcmVzcyBhbmQgaGFuZGxlIGVycm9ycyAqLwogICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOwogICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9SIHx8IHJldCA9PSBaX05FRURfRElDVCkgewogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgewpAQCAtMjYyLDY3ICsyMDAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyogZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLwogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOwogCi0gICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgYW5kIGNyYyBjaGVjayB2YWx1ZSAqLwotICAgIHN0YXRlLT5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+aGF2ZTsKLSAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdGF0ZS0+bmV4dCwgc3RhdGUtPmhhdmUpOworICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0ICovCisgICAgc3RhdGUtPnguaGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5oYXZlOwogCi0gICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGlmIGF0IGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwotICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGlmIChnel9uZXh0NChzdGF0ZSwgJmNyYykgPT0gLTEgfHwgZ3pfbmV4dDQoc3RhdGUsICZsZW4pID09IC0xKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjcmMgIT0gc3RybS0+YWRsZXIpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW4gIT0gKHN0cm0tPnRvdGFsX291dCAmIDB4ZmZmZmZmZmZMKSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBsZW5ndGggY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAvKiByZWFkeSBmb3IgbmV4dCBzdHJlYW0sIG9uY2UgaGF2ZSBpcyAwIChsZWF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0IHVuY2hhbmdlZCB0byByZW1lbWJlciBob3cpICovCi0gICAgfQorICAgIC8qIGlmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBsb29rIGZvciBhbm90aGVyICovCisgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOwogCiAgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIE1ha2UgZGF0YSBhbmQgcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyB0aGF0IHN0YXRlLT5oYXZlID09IDAuCisvKiBGZXRjaCBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUgaXMgMC4KICAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRlY29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAogICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhvdy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCi0gICBsb29rZWQgZm9yIChhbmQgc2tpcHBlZCBpZiBmb3VuZCkgdG8gZGV0ZXJtaW5lIHdpdGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuCi0gICBSZXR1cm5zIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIGd6X21ha2UoKSB3aWxsIGxlYXZlIHN0YXRlLT5oYXZlIGFzIENPUFkKLSAgIG9yIEdaSVAgdW5sZXNzIHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzCi0gICBiZWVuIHByb2Nlc3NlZC4gICovCi1sb2NhbCBpbnQgZ3pfbWFrZShzdGF0ZSkKKyAgIGxvb2tlZCBmb3IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLiAgUmV0dXJucyAtMSBvbiBlcnJvciwKKyAgIG90aGVyd2lzZSAwLiAgZ3pfZmV0Y2goKSB3aWxsIGxlYXZlIHN0YXRlLT5ob3cgYXMgQ09QWSBvciBHWklQIHVubGVzcyB0aGUKKyAgIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X2ZldGNoKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykgeyAgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgaWYgKGd6X2hlYWQoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpICAgICAgICAgICAgICAgIC8qIGdvdCBzb21lIGRhdGEgZnJvbSBnel9oZWFkKCkgKi8KKyAgICBkbyB7CisgICAgICAgIHN3aXRjaChzdGF0ZS0+aG93KSB7CisgICAgICAgIGNhc2UgTE9PSzogICAgICAvKiAtPiBMT09LLCBDT1BZIChvbmx5IGlmIG5ldmVyIEdaSVApLCBvciBHWklQICovCisgICAgICAgICAgICBpZiAoZ3pfbG9vayhzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPUFk6ICAgICAgLyogLT4gQ09QWSAqLworICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPnguaGF2ZSkpCisgICAgICAgICAgICAgICAgICAgID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAgICAgIC8qIHN0cmFpZ2h0IGNvcHkgKi8KLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPmhhdmUpKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IEdaSVApIHsgICAgICAvKiBkZWNvbXByZXNzICovCi0gICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7Ci0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgICBjYXNlIEdaSVA6ICAgICAgLyogLT4gR1pJUCBvciBMT09LIChpZiBlbmQgb2YgZ3ppcCBzdHJlYW0pICovCisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RhdGUtPnguaGF2ZSA9PSAwICYmICghc3RhdGUtPmVvZiB8fCBzdHJtLT5hdmFpbF9pbikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMzYsMTIgKzI2MiwxMiBAQAogICAgIC8qIHNraXAgb3ZlciBsZW4gYnl0ZXMgb3IgcmVhY2ggZW5kLW9mLWZpbGUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCAqLwogICAgIHdoaWxlIChsZW4pCiAgICAgICAgIC8qIHNraXAgb3ZlciB3aGF0ZXZlciBpcyBpbiBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IGxlbiA/Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IGxlbiA/CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICB9CiAKQEAgLTM1Miw3ICsyNzgsNyBAQAogICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMzc0LDE0ICszMDAsMTUgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQwMCw0OSArMzI3LDUxIEBACiAgICAgZ290ID0gMDsKICAgICBkbyB7CiAgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOwogICAgICAgICB9CiAKICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KLSAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgIC8qIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgKi8KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgLyogbmVlZCBvdXRwdXQgZGF0YSAtLSBmb3Igc21hbGwgbGVuIG9yIG5ldyBzdHJlYW0gbG9hZCB1cCBvdXIgb3V0cHV0CiAgICAgICAgICAgIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IExPT0sgfHwgbGVuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gbWVtY3B5KCkgYWJvdmUgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBjb3B5IGFib3ZlICovCiAgICAgICAgICAgICAvKiB0aGUgY29weSBhYm92ZSBhc3N1cmVzIHRoYXQgd2Ugd2lsbCBsZWF2ZSB3aXRoIHNwYWNlIGluIHRoZQogICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlciwgYWxsb3dpbmcgYXQgbGVhc3Qgb25lIGd6dW5nZXRjKCkgdG8gc3VjY2VlZCAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICovCi0gICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgYnVmLCBsZW4sICZuKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbGVuLCAmbikgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwogICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOwotICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBidWY7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwogICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHVwZGF0ZSBwcm9ncmVzcyAqLwogICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwogICAgICAgICBnb3QgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICB9IHdoaWxlIChsZW4pOwogCiAgICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKHdpbGwgZml0IGluIGludCkgKi8KQEAgLTQ1MCw2ICszNzksMTEgQEAKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgogaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CkBAIC00NjIsMTUgKzM5NiwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiB0cnkgb3V0cHV0IGJ1ZmZlciAobm8gbmVlZCB0byBjaGVjayBmb3Igc2tpcCByZXF1ZXN0KSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICBzdGF0ZS0+aGF2ZS0tOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiAqKHN0YXRlLT5uZXh0KSsrOworICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgIHJldHVybiAqKHN0YXRlLT54Lm5leHQpKys7CiAgICAgfQogCiAgICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkgZ3pyZWFkKCkgKi8KQEAgLTQ3OCw2ICs0MTMsMTIgQEAKICAgICByZXR1cm4gcmV0IDwgMSA/IC0xIDogYnVmWzBdOwogfQogCitpbnQgWkVYUE9SVCBnemdldGNfKGZpbGUpCitnekZpbGUgZmlsZTsKK3sKKyAgICByZXR1cm4gZ3pnZXRjKGZpbGUpOworfQorCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQogICAgIGludCBjOwpAQCAtNDkwLDggKzQzMSw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTUwNiwzMiArNDQ4LDM0IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVzaGluZykgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcy0tOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDE7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgICAgIHN0YXRlLT54LnBvcy0tOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KIAogICAgIC8qIGlmIG5vIHJvb20sIGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIHNsaWRlIG91dHB1dCBkYXRhIGlmIG5lZWRlZCBhbmQgaW5zZXJ0IGJ5dGUgYmVmb3JlIGV4aXN0aW5nIGRhdGEgKi8KLSAgICBpZiAoc3RhdGUtPm5leHQgPT0gc3RhdGUtPm91dCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPmhhdmU7CisgICAgaWYgKHN0YXRlLT54Lm5leHQgPT0gc3RhdGUtPm91dCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPnguaGF2ZTsKICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSk7CiAgICAgICAgIHdoaWxlIChzcmMgPiBzdGF0ZS0+b3V0KQogICAgICAgICAgICAgKi0tZGVzdCA9ICotLXNyYzsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBkZXN0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gZGVzdDsKICAgICB9Ci0gICAgc3RhdGUtPmhhdmUrKzsKLSAgICBzdGF0ZS0+bmV4dC0tOwotICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICBzdGF0ZS0+cG9zLS07CisgICAgc3RhdGUtPnguaGF2ZSsrOworICAgIHN0YXRlLT54Lm5leHQtLTsKKyAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTU1MSw4ICs0OTUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTY5LDMyICs1MTQsMzEgQEAKICAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CiAgICAgaWYgKGxlZnQpIGRvIHsKICAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7ICAgICAvKiBlbmQgb2YgZmlsZSAqLwotICAgICAgICAgICAgICAgIGlmIChidWYgPT0gc3RyKSAgICAgICAgIC8qIGdvdCBidXBrdXMgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZ290IHNvbWV0aGluZyAtLSByZXR1cm4gaXQgKi8KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiBnel9mZXRjaChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgICAgIC8qIHJlYWQgcGFzdCBlbmQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gd2hhdCB3ZSBoYXZlICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsb29rIGZvciBlbmQtb2YtbGluZSBpbiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgZW9sID0gbWVtY2hyKHN0YXRlLT5uZXh0LCAnXG4nLCBuKTsKKyAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIGVvbCA9ICh1bnNpZ25lZCBjaGFyICopbWVtY2hyKHN0YXRlLT54Lm5leHQsICdcbicsIG4pOwogICAgICAgICBpZiAoZW9sICE9IE5VTEwpCi0gICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+bmV4dCkgKyAxOworICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOwogCiAgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLwotICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgbGVmdCAtPSBuOwogICAgICAgICBidWYgKz0gbjsKICAgICB9IHdoaWxlIChsZWZ0ICYmIGVvbCA9PSBOVUxMKTsKIAotICAgIC8qIGZvdW5kIGVuZC1vZi1saW5lIG9yIG91dCBvZiBzcGFjZSAtLSB0ZXJtaW5hdGUgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi8KKyAgICAvKiByZXR1cm4gdGVybWluYXRlZCBzdHJpbmcsIG9yIGlmIG5vdGhpbmcsIGVuZCBvZiBmaWxlICovCisgICAgaWYgKGJ1ZiA9PSBzdHIpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1ZlswXSA9IDA7CiAgICAgcmV0dXJuIHN0cjsKIH0KQEAgLTYxMCwxNiArNTU0LDEyIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcwogICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+aGF2ZSA9PSAwKQotICAgICAgICAodm9pZClnel9oZWFkKHN0YXRlKTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPnguaGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9sb29rKHN0YXRlKTsKIAotICAgIC8qIHJldHVybiAxIGlmIHJlYWRpbmcgZGlyZWN0LCAwIGlmIGRlY29tcHJlc3NpbmcgYSBnemlwIHN0cmVhbSAqLworICAgIC8qIHJldHVybiAxIGlmIHRyYW5zcGFyZW50LCAwIGlmIHByb2Nlc3NpbmcgYSBnemlwIHN0cmVhbSAqLwogICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OwogfQogCkBAIC02MjcsNyArNTY3LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfcihmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgZXJyOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTY0NSw5ICs1ODUsMTAgQEAKICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgIH0KKyAgICBlcnIgPSBzdGF0ZS0+ZXJyID09IFpfQlVGX0VSUk9SID8gWl9CVUZfRVJST1IgOiBaX09LOwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICByZXQgPSBjbG9zZShzdGF0ZS0+ZmQpOwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nendyaXRlLmMgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCmluZGV4IGU4ZGVmYzYuLmFhNzY3ZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nendyaXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xOCw0NCArMTgsNTUgQEAKICAgICBpbnQgcmV0OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBhbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KLSAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+aW4gIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKyAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMKSB7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KLSAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7Ci0gICAgc3RybS0+emZyZWUgPSBaX05VTEw7Ci0gICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOwotICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIDE1ICsgMTYsIDgsIHN0YXRlLT5zdHJhdGVneSk7Ci0gICAgaWYgKHJldCAhPSBaX09LKSB7Ci0gICAgICAgIGZyZWUoc3RhdGUtPmluKTsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgLyogb25seSBuZWVkIG91dHB1dCBidWZmZXIgYW5kIGRlZmxhdGUgc3RhdGUgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBpZiAoc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCisgICAgICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+emZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9XQklUUyArIDE2LCBERUZfTUVNX0xFVkVMLCBzdGF0ZS0+c3RyYXRlZ3kpOworICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBtYXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCiAgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2FudDsKIAotICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCi0gICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7Ci0gICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRfaW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgIFJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSwgb3RoZXJ3aXNlIDAuCiAgICBmbHVzaCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQgZGVmbGF0ZSgpIGZsdXNoIHZhbHVlLiAgSWYgZmx1c2ggaXMgWl9GSU5JU0gsCi0gICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICovCisgICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICBJZiBnei0+ZGlyZWN0CisgICBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aG91dCBjb21wcmVzc2luZywgYW5kCisgICBpZ25vcmUgZmx1c2guICovCiBsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIGludCBmbHVzaDsKQEAgLTY4LDYgKzc5LDE3IEBACiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIC8qIHdyaXRlIGRpcmVjdGx5IGlmIHJlcXVlc3RlZCAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBpZiAoZ290IDwgMCB8fCAodW5zaWduZWQpZ290ICE9IHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLwogICAgIHJldCA9IFpfT0s7CiAgICAgZG8gewpAQCAtNzUsOCArOTcsOCBAQAogICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdyaXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCiAgICAgICAgICAgICAoZmx1c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7Ci0gICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+bmV4dCwgaGF2ZSkpIDwgMCB8fAorICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0KTsKKyAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+eC5uZXh0LCBoYXZlKSkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdvdCAhPSBoYXZlKSkgewogICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODUsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OwogICAgICAgICB9CiAKICAgICAgICAgLyogY29tcHJlc3MgKi8KQEAgLTEzMSw3ICsxNTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbjsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBsZW4gLT0gbjsKQEAgLTE0Niw3ICsxNjgsNiBAQAogICAgIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBwdXQgPSBsZW47Ci0gICAgdW5zaWduZWQgbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CiAKQEAgLTE2Myw3ICsxODQsNyBAQAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4NiwxNiArMjA3LDE5IEBACiAgICAgaWYgKGxlbiA8IHN0YXRlLT5zaXplKSB7CiAgICAgICAgIC8qIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBjb21wcmVzcyB3aGVuIGZ1bGwgKi8KICAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgaGF2ZSwgY29weTsKKwogICAgICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBsZW4pCi0gICAgICAgICAgICAgICAgbiA9IGxlbjsKLSAgICAgICAgICAgIG1lbWNweShzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4sIGJ1Ziwgbik7Ci0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOwotICAgICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwotICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOworICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCisgICAgICAgICAgICAgICAgY29weSA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVmID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7CiAgICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IHdoaWxlIChsZW4pOwpAQCAtMjA3LDggKzIzMSw4IEBACiAKICAgICAgICAgLyogZGlyZWN0bHkgY29tcHJlc3MgdXNlciBidWZmZXIgdG8gZmlsZSAqLwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkcClidWY7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIyMiw2ICsyNDYsNyBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGludCBjOwogeworICAgIHVuc2lnbmVkIGhhdmU7CiAgICAgdW5zaWduZWQgY2hhciBidWZbMV07CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtMjQ1LDE5ICsyNzAsMjMgQEAKIAogICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAogICAgICAgIGluaXRpYWxpemVkKSAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IHN0YXRlLT5zaXplKSB7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbltzdHJtLT5hdmFpbF9pbisrXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hhdmVdID0gYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KICAgICBidWZbMF0gPSBjOwogICAgIGlmIChnendyaXRlKGZpbGUsIGJ1ZiwgMSkgIT0gMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBjICYgMHhmZjsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMjc0LDE2ICszMDMsMTUgQEAKICAgICByZXR1cm4gcmV0ID09IDAgJiYgbGVuICE9IDAgPyAtMSA6IHJldDsKIH0KIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitpbnQgWkVYUE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIGludCBzaXplLCBsZW47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIHZhX2xpc3QgdmE7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCiAgICAgaWYgKGZpbGUgPT0gTlVMTCkKQEAgLTMxMywyNSArMzQxLDIwIEBACiAgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gKi8KICAgICBzaXplID0gKGludCkoc3RhdGUtPnNpemUpOwogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogI2lmZGVmIE5PX3ZzbnByaW50ZgogIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgKHZvaWQpdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICBsZW4gPSB2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICAodm9pZCl2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQogICAgIGxlbiA9IHZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0zNDIsMTEgKzM2NSwyMiBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKLSNlbHNlIC8qICFTVERDICovCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXQgPSBnenZwcmludGYoZmlsZSwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiAhU1REQyAmJiAhWl9IQVZFX1NUREFSR19IICovCiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLApAQCAtMzY2LDYgKzQwMCwxMCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAorICAgIC8qIGNoZWNrIHRoYXQgY2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLworICAgIGlmIChzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzkwLDIyICs0MjgsMjMgQEAKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKICNpZmRlZiBOT19zbnByaW50ZgogIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwKKyAgICAgICAgICAgICAgICAgICBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LAorICAgICAgICAgICAgICAgICAgIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtNDE2LDcgKzQ1NSw3IEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIApAQCAtNTAwLDcgKzUzOSw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3coZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC01MTUsMTcgKzU1NCwyNCBAQAogICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KICAgICBpZiAoc3RhdGUtPnNlZWspIHsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwotICAgICAgICByZXQgKz0gZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKICAgICB9CiAKICAgICAvKiBmbHVzaCwgZnJlZSBtZW1vcnksIGFuZCBjbG9zZSBmaWxlICovCi0gICAgcmV0ICs9IGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKTsKLSAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKLSAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKLSAgICByZXQgKz0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gWl9FUlJOTzsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCmluZGV4IGFmM2E4YzkuLmYzODMzYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQyLDEwICs0MiwxOSBAQAogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilaQUxMT0Moc3RybSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMjQ2LDcgKzI1NSw3IEBACiB2b2lkIEZBUiAqb3V0X2Rlc2M7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtMzk0LDcgKzQwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZhc3QuYyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKaW5kZXggMmYxZDYwYi4uYmRhNTljZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZhc3QuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mZmFzdC5jIC0tIGZhc3QgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC02OSw4ICs2OSw4IEBACiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBzdGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiB3aGlsZSBpbiA8IGxhc3QsIGVub3VnaCBpbnB1dCBhdmFpbGFibGUgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogaGF2ZSBlbm91Z2ggaW5wdXQgd2hpbGUgaW4gPCBsYXN0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKm91dDsgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmJlZzsgICAgIC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kOyAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaCBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCmluZGV4IDc1ZWQ0YjUuLmQ2MjgzMjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCkBAIC0yLDkgKzIsOSBAQAogICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLgogICAgICAqLwogCi0gICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQKLSAgICAgICBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQKLSAgICAgICBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAgICAgICBJdCBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzCisgICAgICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICAgICAqLwogCiAgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WzUxMl0gPSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwppbmRleCBhODQzMWFiLi44NzBmODliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOTMsMTQgKzkzLDE1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKLWxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBvdXQpKTsKK2xvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwogI2lmZGVmIEJVSUxERklYRUQKICAgIHZvaWQgbWFrZWZpeGVkIE9GKCh2b2lkKSk7CiAjZW5kaWYKLWxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKK2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOwogCi1pbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CkBAIC0xMDksMTUgKzExMCwxMyBAQAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7Ci0gICAgc3RybS0+YWRsZXIgPSAxOyAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgIGlmIChzdGF0ZS0+d3JhcCkgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+d3JhcCAmIDE7CiAgICAgc3RhdGUtPm1vZGUgPSBIRUFEOwogICAgIHN0YXRlLT5sYXN0ID0gMDsKICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwogICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOwogICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOwotICAgIHN0YXRlLT53c2l6ZSA9IDA7Ci0gICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgIHN0YXRlLT5ob2xkID0gMDsKICAgICBzdGF0ZS0+Yml0cyA9IDA7CiAgICAgc3RhdGUtPmxlbmNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGUgPSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKQEAgLTEyNyw2ICsxMjYsMTkgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0YXRlLT53c2l6ZSA9IDA7CisgICAgc3RhdGUtPndoYXZlID0gMDsKKyAgICBzdGF0ZS0+d25leHQgPSAwOworICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpCiB6X3N0cmVhbXAgc3RybTsKIGludCB3aW5kb3dCaXRzOwpAQCAtMTgwLDEwICsxOTIsMTkgQEAKICAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKICAgICAgICAgICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0zMjEsOCArMzQyLDggQEAKICAgICBsb3cgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3RhdGUubGVuY29kZVtsb3ddLm9wLCBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOworICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCAobG93ICYgMTI3KSA9PSA5OSA/IDY0IDogc3RhdGUubGVuY29kZVtsb3ddLm9wLAorICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwogICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkgYnJlYWs7CiAgICAgICAgIHB1dGNoYXIoJywnKTsKICAgICB9CkBAIC0zNTUsMTIgKzM3NiwxMyBAQAogICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2luZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgogICAgVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4KICAqLwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpCitsb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIGVuZCwgY29weSkKIHpfc3RyZWFtcCBzdHJtOwotdW5zaWduZWQgb3V0OworY29uc3QgQnl0ZWYgKmVuZDsKK3Vuc2lnbmVkIGNvcHk7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OworICAgIHVuc2lnbmVkIGRpc3Q7CiAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKIApAQCAtMzgwLDE5ICs0MDIsMTggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KLSAgICBjb3B5ID0gb3V0IC0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChjb3B5ID49IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKICAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53bmV4dDsKICAgICAgICAgaWYgKGRpc3QgPiBjb3B5KSBkaXN0ID0gY29weTsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGRpc3QpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpOwogICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gY29weSwgY29weSk7CisgICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOwogICAgICAgICAgICAgc3RhdGUtPnduZXh0ID0gY29weTsKICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICAgICAgfQpAQCAtNDk5LDExICs1MjAsNiBAQAogICAgICAgICBiaXRzIC09IGJpdHMgJiA3OyBcCiAgICAgfSB3aGlsZSAoMCkKIAotLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KLSNkZWZpbmUgUkVWRVJTRShxKSBcCi0gICAgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAotICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKLQogLyoKICAgIGluZmxhdGUoKSB1c2VzIGEgc3RhdGUgbWFjaGluZSB0byBwcm9jZXNzIGFzIG11Y2ggaW5wdXQgZGF0YSBhbmQgZ2VuZXJhdGUgYXMKICAgIG11Y2ggb3V0cHV0IGRhdGEgYXMgcG9zc2libGUgYmVmb3JlIHJldHVybmluZy4gIFRoZSBzdGF0ZSBtYWNoaW5lIGlzCkBAIC01OTEsNyArNjA3LDcgQEAKIGludCBmbHVzaDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC03OTcsNyArODEzLDcgQEAKICNlbmRpZgogICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gUkVWRVJTRShob2xkKTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gWlNXQVAzMihob2xkKTsKICAgICAgICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJQ1Q7CiAgICAgICAgIGNhc2UgRElDVDoKQEAgLTkwNSw3ICs5MjEsNyBAQAogICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCiAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTkyNSw3ICs5NDEsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KQEAgLTk4MCw3ICs5OTUsNyBAQAogICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAogICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05ODksNyArMTAwNCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5kaXN0Yml0cyA9IDY7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucyArIHN0YXRlLT5ubGVuLCBzdGF0ZS0+bmRpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtMTE3MCw3ICsxMTg1LDcgQEAKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mbGFncyA/IGhvbGQgOgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBSRVZFUlNFKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgIFpTV0FQMzIoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTQsOCArMTIyOSw5IEBACiAgICAgICovCiAgIGluZl9sZWF2ZToKICAgICBSRVNUT1JFKCk7Ci0gICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAoc3RhdGUtPm1vZGUgPCBDSEVDSyAmJiBvdXQgIT0gc3RybS0+YXZhaWxfb3V0KSkKLSAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpKSB7CisgICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAob3V0ICE9IHN0cm0tPmF2YWlsX291dCAmJiBzdGF0ZS0+bW9kZSA8IEJBRCAmJgorICAgICAgICAgICAgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT0gWl9GSU5JU0gpKSkKKyAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5uZXh0X291dCwgb3V0IC0gc3RybS0+YXZhaWxfb3V0KSkgewogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgIH0KQEAgLTEyNDksMTMgKzEyNjUsMzcgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKK3pfc3RyZWFtcCBzdHJtOworQnl0ZWYgKmRpY3Rpb25hcnk7Cit1SW50ICpkaWN0TGVuZ3RoOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICAvKiBjaGVjayBzdGF0ZSAqLworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGNvcHkgZGljdGlvbmFyeSAqLworICAgIGlmIChzdGF0ZS0+d2hhdmUgJiYgZGljdGlvbmFyeSAhPSBaX05VTEwpIHsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5LCBzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCk7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSArIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d25leHQpOworICAgIH0KKyAgICBpZiAoZGljdExlbmd0aCAhPSBaX05VTEwpCisgICAgICAgICpkaWN0TGVuZ3RoID0gc3RhdGUtPndoYXZlOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9zdHJlYW1wIHN0cm07CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgZGljdExlbmd0aDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBkaWN0aWQ7CisgICAgaW50IHJldDsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwpAQCAtMTI2MywyOSArMTMwMywyMSBAQAogICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9IERJQ1QpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWQgKi8KKyAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gRElDVCkgewotICAgICAgICBpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgIGlkID0gYWRsZXIzMihpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7Ci0gICAgICAgIGlmIChpZCAhPSBzdGF0ZS0+Y2hlY2spCisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICAgICAgaWYgKGRpY3RpZCAhPSBzdGF0ZS0+Y2hlY2spCiAgICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgIH0KIAotICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgKi8KLSAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPmF2YWlsX291dCkpIHsKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9Ci0gICAgaWYgKGRpY3RMZW5ndGggPiBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCAtIHN0YXRlLT53c2l6ZSwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+d3NpemUpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d3NpemUgLSBkaWN0TGVuZ3RoLCBkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgIGRpY3RMZW5ndGgpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBkaWN0TGVuZ3RoOwotICAgIH0KICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAxOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxuIikpOwogICAgIHJldHVybiBaX09LOwpAQCAtMTMyMSw3ICsxMzUzLDcgQEAKICAqLwogbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKIHVuc2lnbmVkIEZBUiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIGdvdDsKQEAgLTE0MzMsOCArMTQ2NSw4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZSAqLwotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKLSAgICB6bWVtY3B5KGNvcHksIHN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZiljb3B5LCAodm9pZHBmKXN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUtPmxlbmNvZGUgPj0gc3RhdGUtPmNvZGVzICYmCiAgICAgICAgIHN0YXRlLT5sZW5jb2RlIDw9IHN0YXRlLT5jb2RlcyArIEVOT1VHSCAtIDEpIHsKICAgICAgICAgY29weS0+bGVuY29kZSA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5sZW5jb2RlIC0gc3RhdGUtPmNvZGVzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKaW5kZXggMTFlOWM1Mi4uNDRkODljZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5jIC0tIGdlbmVyYXRlIEh1ZmZtYW4gdHJlZXMgZm9yIGVmZmljaWVudCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxleHRbMzFdID0geyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgZXh0cmEgKi8KICAgICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsCi0gICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MywgMTk1fTsKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTIwOCw4ICsyMDgsOCBAQAogICAgIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCiAKICAgICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi8KLSAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovCkBAIC0yNzcsOCArMjc3LDggQEAKIAogICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOwotICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCkBAIC0yODksMzggKzI4OSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgICBGaWxsIGluIHJlc3Qgb2YgdGFibGUgZm9yIGluY29tcGxldGUgY29kZXMuICBUaGlzIGxvb3AgaXMgc2ltaWxhciB0byB0aGUKLSAgICAgICBsb29wIGFib3ZlIGluIGluY3JlbWVudGluZyBodWZmIGZvciB0YWJsZSBpbmRpY2VzLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gICAgICAgbGVuIGlzIGVxdWFsIHRvIGN1cnIgKyBkcm9wLCBzbyB0aGVyZSBpcyBubyBsb29wIG5lZWRlZCB0byBpbmNyZW1lbnQKLSAgICAgICB0aHJvdWdoIGhpZ2ggaW5kZXggYml0cy4gIFdoZW4gdGhlIGN1cnJlbnQgc3ViLXRhYmxlIGlzIGZpbGxlZCwgdGhlIGxvb3AKLSAgICAgICBkcm9wcyBiYWNrIHRvIHRoZSByb290IHRhYmxlIHRvIGZpbGwgaW4gYW55IHJlbWFpbmluZyBlbnRyaWVzIHRoZXJlLgotICAgICAqLwotICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwotICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOwotICAgIHdoaWxlIChodWZmICE9IDApIHsKLSAgICAgICAgLyogd2hlbiBkb25lIHdpdGggc3ViLXRhYmxlLCBkcm9wIGJhY2sgdG8gcm9vdCB0YWJsZSAqLwotICAgICAgICBpZiAoZHJvcCAhPSAwICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7Ci0gICAgICAgICAgICBkcm9wID0gMDsKLSAgICAgICAgICAgIGxlbiA9IHJvb3Q7Ci0gICAgICAgICAgICBuZXh0ID0gKnRhYmxlOwotICAgICAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KLSAgICAgICAgbmV4dFtodWZmID4+IGRyb3BdID0gaGVyZTsKLQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCi0gICAgICAgICAgICBpbmNyID4+PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7Ci0gICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVudHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlCisgICAgICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGUKKyAgICAgICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCisgICAgaWYgKGh1ZmYgIT0gMCkgeworICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLworICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgIG5leHRbaHVmZl0gPSBoZXJlOwogICAgIH0KIAogICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmggYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAppbmRleCAyNDIzMGM1Li5iYWE1M2EwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaApAQCAtNDEsNyArNDEsNyBAQAogICAgZXhhbXBsZXMvZW5vdWdoLmMgZm91bmQgaW4gdGhlIHpsaWIgZGlzdHJpYnR1dGlvbi4gIFRoZSBhcmd1bWVudHMgdG8gdGhhdAogICAgcHJvZ3JhbSBhcmUgdGhlIG51bWJlciBvZiBzeW1ib2xzLCB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUsIGFuZCB0aGUKICAgIG1heGltdW0gYml0IGxlbmd0aCBvZiBhIGNvZGUuICAiZW5vdWdoIDI4NiA5IDE1IiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMKLSAgIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCisgICByZXR1cm5zIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCiAgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQogICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxzIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcwogICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIGFuZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbSBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KaW5kZXggNjU3NjQ5MC4uNjVlOWQwYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQorKysgYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCkBAIC0zLDcgKzMsNyBAQAogJCEKICQhIEluIGNhc2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgaW5zdGFsbCB5b3UgbWlnaHQgY29udGFjdCBtZSBhdAogJCEgemluc2VyQHppbnNlci5uby1pcC5pbmZvKHByZWZlcnJlZCkgb3IKLSQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKKyQhIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tICh3b3JrKQogJCEKICQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKICQhCkBAIC0xNCw5ICsxNCwxNiBAQAogJCEgMC4wMyAyMDA5MTIyNCBBZGQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSBjaGVjawogJCEgMC4wNCAyMDEwMDExMCBBZGQgbmV3IGd6Y2xvc2UsIGd6bGliLCBnenJlYWQsIGd6d3JpdGUKICQhIDAuMDUgMjAxMDAyMjEgRXhjaGFuZ2UgemxpYmRlZnMuaCBieSB6Y29uZi5oLmluCiskISAwLjA2IDIwMTIwMTExIEZpeCBtaXNzaW5nIGFtaXNzX2VyciwgdXBkYXRlIHpjb25mX2guaW4sIGZpeCBuZXcgZXhtcGxlcworJCEgICAgICAgICAgICAgICBzdWJkaXIgcGF0aCwgdXBkYXRlIG1vZHVsZSBzZWFyY2ggaW4gbWFrZWZpbGUuaW4KKyQhIDAuMDcgMjAxMjAxMTUgVHJpZ2dlcmVkIGJ5IHdvcmsgZG9uZSBieSBBbGV4ZXkgQ2h1cGFoaW4gY29tcGxldGx5IHJlZGVzaWduZWQKKyQhICAgICAgICAgICAgICAgc2hhcmVkIGltYWdlIGNyZWF0aW9uCiskISAwLjA4IDIwMTIwMjE5IE1ha2UgaXQgd29yayBvbiBWQVggYWdhaW4sIHByZS1sb2FkIG1pc3Npbmcgc3ltYm9scyB0byBzaGFyZWQKKyQhICAgICAgICAgICAgICAgaW1hZ2UKKyQhIDAuMDkgMjAxMjAzMDUgU01TLiAgUDEgc2V0cyBidWlsZGVyICgiTU1LIiwgIk1NUyIsICIgIiAoYnVpbHQtaW4pKS4KKyQhICAgICAgICAgICAgICAgIiIgLT4gYXV0b21hdGljLCBwcmVmZXJlbmNlOiBNTUssIE1NUywgYnVpbHQtaW4uCiAkIQogJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKLSQgc2V0IHByb2MvcGFyc2U9ZXh0CiAkIQogJCB0cnVlICA9IDEKICQgZmFsc2UgPSAwCkBAIC0zMiwzMSArMzksNDMgQEAKICQhCiAkISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgogJCEKLSQgTWFrZSAgICA9ICIiCiskIE1ha2UgICAgPSAiJydwMSciCiAkIG5hbWUgICAgID0gIlpsaWIiCiAkIHZlcnNpb24gID0gIj8uPy4/IgogJCB2X3N0cmluZyA9ICJaTElCX1ZFUlNJT04iCiAkIHZfZmlsZSAgID0gInpsaWIuaCIKLSQgY2NvcHQgICA9ICIiCiskIGNjb3B0ICAgPSAiL2luY2x1ZGUgPSBbXSIKICQgbG9wdHMgICA9ICIiCiAkIGRuc3JsICAgPSAiIgotJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4jemNvbmZfaC5pbiIKICQgY29uZl9jaGVja19zdHJpbmcgPSAiIgogJCBsaW5rb25seSA9IGZhbHNlCiAkIG9wdGZpbGUgID0gbmFtZSArICIub3B0IgorJCBtYXBmaWxlICA9IG5hbWUgKyAiLm1hcCIKICQgbGliZGVmcyAgPSAiIgorJCB2YXggICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjEwMjQKICQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0IC5hbmQuIGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjQwOTYKKyQgaWE2NCAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS40MDk2CiAkIQotJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aW9ybm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IGlzIHRoaXMgbmVlZGVkPyAgQW5kIGlmIGl0IGlzIG5lZWRlZCwgd2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/CiskIQorJCEhISBpZiBheHAgLm9yLiBpYTY0IHRoZW4gIHNldCBwcm9jL3BhcnNlPWV4dGVuZGVkCiskIQorJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aXJvbm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKICQgbXlkZWYgID0gRiRwYXJzZSh3aG9hbWksLCwiREVWSUNFIikKICQgbXlkaXIgID0gZiRwYXJzZSh3aG9hbWksLCwiRElSRUNUT1JZIikgLSAiXVsiCiAkIG15cHJvYyA9IGYkcGFyc2Uod2hvYW1pLCwsIk5hbWUiKSArIGYkcGFyc2Uod2hvYW1pLCwsInR5cGUiKQogJCEKICQhIENoZWNrIGZvciBNTUsvTU1TCiAkIQotJCBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCi0kIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgotJCEKKyQgaWYgKE1ha2UgLmVxcy4gIiIpCiskIHRoZW4KKyQgICBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCiskICAgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCiskIGVsc2UKKyQgICBNYWtlID0gZiRlZGl0KCBNYWtlLCAidHJpbSIpCiskIGVuZGlmCiAkIQogJCBnb3N1YiBmaW5kX3ZlcnNpb24KICQhCkBAIC02OSw2ICs4OCw3IEBACiAkIQogJCBnb3N1YiBjaGVja19jb21waWxlcgogJCBjbG9zZSB0b3B0CiskIGNsb3NlIG9wdGYKICQhCiAkIGlmIGl0c19kZWNjCiAkIHRoZW4KQEAgLTgzLDYgKzEwMywxNSBAQAogJCAgICAgICBkZWZpbmUgc3lzIGRlY2MkbGlicmFyeV9pbmNsdWRlOgogJCAgICAgZW5kaWYKICQgICBlbmRpZgorJCEKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IC9OQU1FUyA9IEFTX0lTPyAgV2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/ICBBbmQgd2h5IG5vdCBvbiBWQVg/CiskIQorJCAgIGlmIGF4cCAub3IuIGlhNjQKKyQgICB0aGVuCiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25hbWU9YXNfaXMvb3B0PShpbmxpbmU9c3BlZWQpIgorJCAgICAgICBzX2Nhc2UgPSB0cnVlCiskICAgZW5kaWYKICQgZW5kaWYKICQgaWYgaXRzX3ZheGMgLm9yLiBpdHNfZ251YwogJCB0aGVuCkBAIC0xMjIsMTUgKzE1MSwyMCBAQAogJCBlbmRpZgogJCBnb3RvIGFjb25mX2xvb3AKICRBQ09ORl9FWElUOgorJCB3cml0ZSBhY29uZiAiIgorJCB3cml0ZSBhY29uZiAiLyogVk1TIHNwZWNpZmljcyBhZGRlZCBieSBtYWtlX3Ztcy5jb206ICovIgogJCB3cml0ZSBhY29uZiAiI2RlZmluZSBWTVMgMSIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bmlzdGQuaD4iCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5peGlvLmg+IgogJCB3cml0ZSBhY29uZiAiI2lmZGVmIF9MQVJHRUZJTEUiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmb3BlbjY0IGZvcGVuIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmc2Vla282NCBmc2Vla28iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGxzZWVrNjQgbHNlZWsiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgbHNlZWs2NCBsc2VlayIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCB3cml0ZSBhY29uZiAiI2lmICFkZWZpbmVkKCBfX1ZBWCkgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMTIwMDApIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgSEFWRV9WU05QUklOVEYiCiAkIHdyaXRlIGFjb25mICIjZW5kaWYiCiAkIGNsb3NlIGFjb25mX2luCiAkIGNsb3NlIGFjb25mCkBAIC0xMzksOCArMTczLDkgQEAKICQhCiAkIHdyaXRlIHN5cyRvdXRwdXQgIkNvbXBpbGluZyBabGliIHNvdXJjZXMgLi4uIgogJCBpZiBtYWtlLmVxcy4iIgotJCAgdGhlbgotJCAgIGRlbGUgZXhhbXBsZS5vYmo7KixtaW5pZ3ppcC5vYmo7KgorJCB0aGVuCiskICAgaWYgKGYkc2VhcmNoKCAiZXhhbXBsZS5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBleGFtcGxlLm9iajsqCiskICAgaWYgKGYkc2VhcmNoKCAibWluaWd6aXAub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgbWluaWd6aXAub2JqOyoKICQgICBDQUxMIE1BS0UgYWRsZXIzMi5PQkogIkNDICcnQ0NPUFQnIGFkbGVyMzIiIC0KICAgICAgICAgICAgICAgICBhZGxlcjMyLmMgemxpYi5oIHpjb25mLmgKICQgICBDQUxMIE1BS0UgY29tcHJlc3MuT0JKICJDQyAnJ0NDT1BUJyBjb21wcmVzcyIgLQpAQCAtMTc0LDQxICsyMDksMzQgQEAKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBabGliIC4uLiIKICQgICBDQUxMIE1BS0UgbGliei5PTEIgImxpYi9jcmVhIGxpYnoub2xiICoub2JqIiAqLk9CSgogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIGV4YW1wbGUuLi4iCi0kICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBleGFtcGxlIiAtCi0gICAgICAgICAgICAgICAgZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdZXhhbXBsZSIgLQorICAgICAgICAgICAgICAgIFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKICQgICBjYWxsIG1ha2UgZXhhbXBsZS5leGUgIkxJTksgZXhhbXBsZSxsaWJ6Lm9sYi9saWIiIGV4YW1wbGUub2JqIGxpYnoub2xiCi0kICAgaWYgZiRzZWFyY2goIngxMXZtczp4dm1zdXRpbHMub2xiIikgLm5lcy4gIiIKLSQgICB0aGVuCi0kICAgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKLSQgICAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIG1pbmlnemlwIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotJCAgICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCi0gICAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYiIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotJCAgIGVuZGlmCi0kICBlbHNlCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCiskICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XW1pbmlnemlwIiAtCisgICAgICAgICAgICAgIFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiskICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCisgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYiIgLQorICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKKyQgZWxzZQogJCAgIGdvc3ViIGNyZWFfbW1zCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiTWFrZSAnJ25hbWUnICcndmVyc2lvbicgd2l0aCAnJ01ha2UnICIKICQgICAnbWFrZScKLSQgIGVuZGlmCi0kIQotJCEgQWxwaGEgZ2V0cyBhIHNoYXJlYWJsZSBpbWFnZQotJCEKLSQgSWYgYXhwCi0kIFRoZW4KLSQgICBnb3N1YiBjcmVhX29saXN0Ci0kICAgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCi0kICAgY2FsbCBhbmFsX29ial9heHAgbW9kdWxlcy5vcHQgX2xpbmsub3B0Ci0kICAgaWYgc19jYXNlCi0kICAgdGhlbgotJCAgICAgIG9wZW4vYXBwZW5kIG9wdGYgbW9kdWxlcy5vcHQKLSQgICAgICB3cml0ZSBvcHRmICJjYXNlX3NlbnNpdGl2ZT1ZRVMiCi0kICAgICAgY2xvc2Ugb3B0ZgotJCAgIGVuZGlmCi0kICAgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCxfbGluay5vcHQvb3B0CiAkIGVuZGlmCiskIQorJCEgQ3JlYXRlIHNoYXJlYWJsZSBpbWFnZQorJCEKKyQgZ29zdWIgY3JlYV9vbGlzdAorJCB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKKyQgY2FsbCBtYXBfMl9zaG9wdCAnbWFwZmlsZScgJ29wdGZpbGUnCiskIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsJ29wdGZpbGUnL29wdAogJCB3cml0ZSBzeXMkb3V0cHV0ICJabGliIGJ1aWxkIGNvbXBsZXRlZCIKKyQgZGVsZXRlL25vbG9nIHRtcC5vcHQ7KgogJCBleGl0CiskQU1JU1NfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJObyBzb3VyY2UgZm9yIGNvbmZpZy5oaW4gZm91bmQuIgorJCB3cml0ZSBzeXMkb3V0cHV0ICJUcmllZCBhbnkgb2YgJydhY29uZl9pbl9maWxlJyIKKyQgZ290byBlcnJfZXhpdAogJENDX0VSUjoKICQgd3JpdGUgc3lzJG91dHB1dCAiQyBjb21waWxlciByZXF1aXJlZCB0byBidWlsZCAnJ25hbWUnIgogJCBnb3RvIGVycl9leGl0CkBAIC0yMTYsNyArMjQ0LDYgQEAKICQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dAogJCBjbG9zZS9ub2xvZyBvcHRmCiAkIGNsb3NlL25vbG9nIHRvcHQKLSQgY2xvc2Uvbm9sb2cgY29uZl9oaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmZfaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmYKICQgY2xvc2Uvbm9sb2cgb3V0CkBAIC0zOTcsNyArNDI0LDcgQEAKICQgZGVjawogIyBkZXNjcmlwLm1tczogTU1TIGRlc2NyaXB0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIHpsaWIgb24gVk1TCiAjIHdyaXR0ZW4gYnkgTWFydGluIFAuSi4gWmluc2VyCi0jIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3Igemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tPgorIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tPgogCiBPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemNsb3NlLm9iaiwgZ3psaWIub2JqXAogICAgICAgIGd6cmVhZC5vYmosIGd6d3JpdGUub2JqLCB1bmNvbXByLm9iaiwgaW5mYmFjay5vYmpcCkBAIC00MDcsMTAgKzQzNCw5IEBACiAkIGVvZAogJCB3cml0ZSBvdXQgIkNGTEFHUz0iLCBjY29wdAogJCB3cml0ZSBvdXQgIkxPUFRTPSIsIGxvcHRzCiskIHdyaXRlIG91dCAiYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiIgogJCBjb3B5IHN5cyRpbnB1dDogb3V0CiAkIGRlY2sKLQotYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiCiAgICAgICAgIEAgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSIKIAogbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQpAQCAtNDIwLDcgKzQ0Niw3IEBACiAgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKIAogbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCi0gICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYgorICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYgogCiBjbGVhbiA6CiAJZGVsZXRlICoub2JqOyosbGliei5vbGI7KiwqLm9wdDsqLCouZXhlOyoKQEAgLTQzMSw3ICs0NTcsNyBAQAogY29tcHJlc3Mub2JqIDogY29tcHJlc3MuYyB6bGliLmggemNvbmYuaAogY3JjMzIub2JqICAgIDogY3JjMzIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBkZWZsYXRlLm9iaiAgOiBkZWZsYXRlLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUub2JqICA6IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vYmogIDogWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogZ3pjbG9zZS5vYmogIDogZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6bGliLm9iaiAgICA6IGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3pyZWFkLm9iaiAgIDogZ3pyZWFkLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDM5LDcgKzQ2NSw3IEBACiBpbmZmYXN0Lm9iaiAgOiBpbmZmYXN0LmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmZhc3QuaAogaW5mbGF0ZS5vYmogIDogaW5mbGF0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGluZnRyZWVzLm9iaiA6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCi1taW5pZ3ppcC5vYmogOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCittaW5pZ3ppcC5vYmogOiBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAogdHJlZXMub2JqICAgIDogdHJlZXMuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAogdW5jb21wci5vYmogIDogdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCiB6dXRpbC5vYmogICAgOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQ1NSwxMyArNDgxLDE4IEBACiAkQ1JFQV9PTElTVDoKICQgb3Blbi9yZWFkIG1pbiBtYWtlZmlsZS5pbgogJCBvcGVuL3dyaXRlIG1vZCBtb2R1bGVzLm9wdAotJCBzcmNfY2hlY2sgPSAiT0JKQyA9IgorJCBzcmNfY2hlY2tfbGlzdCA9ICJPQkpaID0jT0JKRyA9IgogJE1STE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKLSQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBtcmxvb3AKKyQgaSA9IDAKKyRTUkNfQ0hFQ0tfTE9PUDoKKyQgc3JjX2NoZWNrID0gZiRlbGVtZW50KGksICIjIiwgc3JjX2NoZWNrX2xpc3QpCiskIGkgPSBpKzEKKyQgaWYgc3JjX2NoZWNrIC5lcXMuICIjIiB0aGVuIGdvdG8gbXJsb29wCiskIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gc3JjX2NoZWNrX2xvb3AKICQgcmVjID0gcmVjIC0gc3JjX2NoZWNrCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQotJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJkb25lCiskIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmxvb3AKICRNUlNMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwogJCBnb3N1YiBleHRyYV9maWxuYW0KQEAgLTY3MiwxMjQgKzcwMyw2IEBACiAkIHJldHVybgogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQhCi0kISBBbmFseXplIE9iamVjdCBmaWxlcyBmb3IgT3BlblZNUyBBWFAgdG8gZXh0cmFjdCBQcm9jZWR1cmUgYW5kIERhdGEKLSQhIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGEgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUgaW1hZ2UKLSQhIEFsbCB0aGUgImJyYWlucyIgb2YgdGhpcyBsb2dpYyB3YXMgc3VnZ2VzdGVkIGJ5IEhhcnRtdXQgQmVja2VyCi0kISAoSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbSkuIEFsbCB0aGUgYnVncyB3ZXJlIGludHJvZHVjZWQgYnkgbWUKLSQhICh6aW5zZXJAemluc2VyLm5vLWlwLmluZm8pLCBzbyBpZiB5b3UgZG8gaGF2ZSBwcm9ibGVtIHJlcG9ydHMgcGxlYXNlIGRvIG5vdAotJCEgYm90aGVyIEhhcnRtdXQvSFAsIGJ1dCBnZXQgaW4gdG91Y2ggd2l0aCBtZQotJCEKLSQhIFZlcnNpb24gaGlzdG9yeQotJCEgMC4wMSAyMDA0MDQwNiBTa2lwIG92ZXIgc2hhcmVhYmxlIGltYWdlcyBpbiBvcHRpb24gZmlsZQotJCEgMC4wMiAyMDA0MTEwOSBGaXggb3B0aW9uIGZpbGUgZm9yIHNoYXJlYWJsZSBpbWFnZXMgd2l0aCBjYXNlX3NlbnNpdGl2ZT1ZRVMKLSQhIDAuMDMgMjAwNTAxMDcgU2tpcCBvdmVyIElkZW50aWZpY2F0aW9uIGxhYmVscyBpbiBvcHRpb24gZmlsZQotJCEgMC4wNCAyMDA2MDExNyBBZGQgdXBwZXJjYXNlIGFsaWFzIHRvIGNvZGUgY29tcGlsZWQgd2l0aCAvbmFtZT1hc19pcwotJCEKLSQgQU5BTF9PQkpfQVhQOiBTdWJyb3V0aW5lCi0kIFYgPSAnRiRWZXJpZnkoMCkKLSQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKLSQKLSQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJCBJRiAiJydQMiciIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFA6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJAotJCBvcGVuL3JlYWQgaW4gJ3AxCi0kIGNyZWF0ZSBhLnRtcAotJCBvcGVuL2FwcGVuZCBhdG1wIGEudG1wCi0kIGxvb3A6Ci0kIHJlYWQvZW5kPWVuZF9sb29wIGluIGxpbmUKLSQgaWYgZiRsb2NhdGUoIi9TSEFSRSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX1NLUF9TSFItaS1za2lwc2hhcmUsICcnbGluZSciCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCJJREVOVElGSUNBVElPTj0iLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLWktaWRlbnQ6IElkZW50aWZpY2F0aW9uICIsIC0KLSAgICAgICAgICAgICAgICAgICAgIGYkZWxlbWVudCgxLCI9IixsaW5lKQotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBmPSBmJHNlYXJjaChsaW5lKQotJCBpZiBmIC5lcXMuICIiCi0kIHRoZW4KLSQJd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLXctbm9zdWNoZmlsZSwgJydsaW5lJyIKLSQJZ290byBsb29wCi0kIGVuZGlmCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGRlZmluZS91c2VyIHN5cyRlcnJvciBubDoKLSQgYW5hbC9vYmovZ3NkICdmIC9vdXQ9eC50bXAKLSQgb3Blbi9yZWFkIHh0bXAgeC50bXAKLSQgWExPT1A6Ci0kIHJlYWQvZW5kPWVuZF94bG9vcCB4dG1wIHhsaW5lCi0kIHhsaW5lID0gZiRlZGl0KHhsaW5lLCJjb21wcmVzcyIpCi0kIHdyaXRlIGF0bXAgeGxpbmUKLSQgZ290byB4bG9vcAotJCBFTkRfWExPT1A6Ci0kIGNsb3NlIHh0bXAKLSQgZ290byBsb29wCi0kIGVuZF9sb29wOgotJCBjbG9zZSBpbgotJCBjbG9zZSBhdG1wCi0kIGlmIGYkc2VhcmNoKCJhLnRtcCIpIC5lcXMuICIiIC0KLQl0aGVuICQgZXhpdAotJCAhIGFsbCBnbG9iYWwgZGVmaW5pdGlvbnMKLSQgc2VhcmNoIGEudG1wICJzeW1ib2w6IiwiRUdTWSRWX0RFRiAxIiwiRUdTWSRWX05PUk0gMSIvb3V0PWIudG1wCi0kICEgYWxsIHByb2NlZHVyZXMKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfTk9STSAxIi93aW5kPSgwLDEpIC9vdXQ9Yy50bXAKLSQgc2VhcmNoIGMudG1wICJzeW1ib2w6Ii9vdXQ9ZC50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGQudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPVBST0NFRFVSRSkvd2hvbGUKLWV4aXQKLSQgISBhbGwgZGF0YQotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9ERUYgMSIvd2luZD0oMCwxKSAvb3V0PWUudG1wCi0kIHNlYXJjaCBlLnRtcCAic3ltYm9sOiIvb3V0PWYudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBmLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1EQVRBKS93aG9sZQotZXhpdAotJCBzb3J0L25vZHVwbCBkLnRtcCxmLnRtcCBnLnRtcAotJCBvcGVuL3JlYWQgcmF3X3ZlY3RvciBnLnRtcAotJCBvcGVuL3dyaXRlIGNhc2VfdmVjdG9yICdwMicKLSQgUkFXTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3Jhd2xvb3AgcmF3X3ZlY3RvciByYXdfZWxlbWVudAotJCB3cml0ZSBjYXNlX3ZlY3RvciByYXdfZWxlbWVudAotJCBpZiBmJGxvY2F0ZSgiPVBST0NFRFVSRSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCI9REFUQSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPURBVEEpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBnb3RvIHJhd2xvb3AKLSQgRU5EX1JBV0xPT1A6Ci0kIGNsb3NlIHJhd192ZWN0b3IKLSQgY2xvc2UgY2FzZV92ZWN0b3IKLSQgZGVsZXRlIGEudG1wOyosYi50bXA7KixjLnRtcDsqLGQudG1wOyosZS50bXA7KixmLnRtcDsqLGcudG1wOyoKLSQgaWYgZiRzZWFyY2goIngudG1wIikgLm5lcy4gIiIgLQotCXRoZW4gJCBkZWxldGUgeC50bXA7KgotJCEKLSQgRVhJVF9BQToKLSQgaWYgViB0aGVuIHNldCB2ZXJpZnkKLSQgZW5kc3Vicm91dGluZQotJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQhCiAkISBXcml0ZSBjb25maWd1cmF0aW9uIHRvIGJvdGggcGVybWFuZW50IGFuZCB0ZW1wb3JhcnkgY29uZmlnIGZpbGUKICQhCiAkISBWZXJzaW9uIGhpc3RvcnkKQEAgLTgwMiwzICs3MTUsMTUzIEBACiAkICBjbG9zZSBjb25maAogJEVORFNVQlJPVVRJTkUKICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQW5hbHl6ZSB0aGUgcHJvamVjdCBtYXAgZmlsZSBhbmQgY3JlYXRlIHRoZSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZQorJCEgaW1hZ2UgZnJvbSBpdAorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDEyMDEyOCBGaXJzdCB2ZXJzaW9uCiskISAwLjAyIDIwMTIwMjI2IEFkZCBwcmUtbG9hZCBsb2dpYworJCEKKyQgTUFQXzJfU0hPUFQ6IFN1YnJvdXRpbmUKKyQhCiskIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCiskIQorJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIElGICInJ1AyJyIgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BUOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIQorJCBtb2R1bGUxID0gImRlZmxhdGUjZGVmbGF0ZUVuZCNkZWZsYXRlSW5pdF8jZGVmbGF0ZVBhcmFtcyNkZWZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlMiA9ICJnemNsb3NlI2d6ZXJyb3IjZ3pnZXRjI2d6Z2V0cyNnem9wZW4jZ3pwcmludGYjZ3pwdXRjI2d6cHV0cyNnenJlYWQiCiskIG1vZHVsZTMgPSAiZ3pzZWVrI2d6dGVsbCNpbmZsYXRlI2luZmxhdGVFbmQjaW5mbGF0ZUluaXRfI2luZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGU0ID0gImluZmxhdGVTeW5jI3VuY29tcHJlc3MjemxpYlZlcnNpb24jY29tcHJlc3MiCiskIG9wZW4vcmVhZCBtYXAgJ3AxCiskIGlmIGF4cCAub3IuIGlhNjQKKyQgdGhlbgorJCAgICAgb3Blbi93cml0ZSBhb3B0IGEub3B0CiskICAgICBvcGVuL3dyaXRlIGJvcHQgYi5vcHQKKyQgICAgIHdyaXRlIGFvcHQgIiBDQVNFX1NFTlNJVElWRT1ZRVMiCiskICAgICB3cml0ZSBib3B0ICJTWU1CT0xfVkVDVE9SPSAoLSIKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIE1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJICAgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byBtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gbW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJE1BUF9MT09QOgorJCAgICAgcmVhZC9lbmQ9bWFwX2VuZCBtYXAgbGluZQorJCAgICAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIHRoZW4KKyQgICAgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgICAgIGdvdG8gbWFwX2xvb3AKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgcHJvYworJCAgICAgdGhlbgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJCSBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICBlbmRpZgorJCAgICAgZ290byBtYXBfbG9vcAorJE1BUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgb3Blbi9yZWFkIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vcmVhZCBib3B0IGIub3B0CiskQUxPT1A6CiskICAgICByZWFkL2VuZD1hbG9vcF9lbmQgYW9wdCBsaW5lCiskICAgICB3cml0ZSBsaWJvcHQgbGluZQorJCAgICAgZ290byBhbG9vcAorJEFMT09QX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIHN2ID0gIiIKKyRCTE9PUDoKKyQgICAgIHJlYWQvZW5kPWJsb29wX2VuZCBib3B0IHN2bgorJCAgICAgaWYgKHN2bi5uZXMuIiIpCiskICAgICB0aGVuCiskICAgICAgICBpZiAoc3YubmVzLiIiKSB0aGVuIHdyaXRlIGxpYm9wdCBzdgorJCAgICAgICAgc3YgPSBzdm4KKyQgICAgIGVuZGlmCiskICAgICBnb3RvIGJsb29wCiskQkxPT1BfRU5EOgorJCAgICAgd3JpdGUgbGlib3B0IGYkZXh0cmFjdCgwLGYkbGVuZ3RoKHN2KS0yLHN2KSwgIi0iCiskICAgICB3cml0ZSBsaWJvcHQgIikiCiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBkZWxldGUvbm9sb2cvbm9jb25mIGEub3B0OyosYi5vcHQ7KgorJCBlbHNlCiskICAgICBpZiB2YXgKKyQgICAgIHRoZW4KKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgVk1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgVk1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gdm1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byB2bW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJFZNQVBfTE9PUDoKKyQgICAgIAkgIHJlYWQvZW5kPXZtYXBfZW5kIG1hcCBsaW5lCiskICAgICAJICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAJICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgCSAgICAgIGdvdG8gdm1hcF9sb29wCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIHByb2MKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAJICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAJICAJICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGdvdG8gdm1hcF9sb29wCiskVk1BUF9FTkQ6CiskICAgICBlbHNlCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5rbm93biBBcmNoaXRlY3R1cmUgKE5vdCBWQVgsIEFYUCwgb3IgSUE2NCkiCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiTm8gb3B0aW9ucyBmaWxlIGNyZWF0ZWQiCiskICAgICBlbmRpZgorJCBlbmRpZgorJCBFWElUX00yUzoKKyQgY2xvc2Uvbm9sb2cgbWFwCiskIGNsb3NlL25vbG9nIGxpYm9wdAorJCBlbmRzdWJyb3V0aW5lCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCmluZGV4IDk4MjVjY2MuLmIzMDI1YTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCisrKyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWluaWd6aXAuYyAtLSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQwLDYgKzQwLDEwIEBACiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKwogI2lmZGVmIFZNUwogIyAgZGVmaW5lIHVubGluayBkZWxldGUKICMgIGRlZmluZSBHWl9TVUZGSVggIi1neiIKQEAgLTEzOCw2ICsxNDIsMTk3IEBACiAjICBkZWZpbmUgbG9jYWwKICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisvKiBmb3IgWl9TT0xPLCBjcmVhdGUgc2ltcGxpZmllZCBneiogZnVuY3Rpb25zIHVzaW5nIGRlZmxhdGUgYW5kIGluZmxhdGUgKi8KKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKFpfTEFSR0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIHVubGluaygpICovCisjZW5kaWYKKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUocSwgcCkKKyAgICB2b2lkICpxLCAqcDsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zIHsKKyAgICBGSUxFICpmaWxlOworICAgIGludCB3cml0ZTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIgKm1zZzsKKyAgICB6X3N0cmVhbSBzdHJtOworfSAqZ3pGaWxlOworCitnekZpbGUgZ3pvcGVuIE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6ZG9wZW4gT0YoKGludCwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworCitnekZpbGUgZ3pvcGVuKHBhdGgsIG1vZGUpCitjb25zdCBjaGFyICpwYXRoOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMSwgbW9kZSk7Cit9CisKK2d6RmlsZSBnemRvcGVuKGZkLCBtb2RlKQoraW50IGZkOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihOVUxMLCBmZCwgbW9kZSk7Cit9CisKK2d6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pGaWxlIGd6OworICAgIGludCByZXQ7CisKKyAgICBneiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGd6RmlsZV9zKSk7CisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGd6LT53cml0ZSA9IHN0cmNocihtb2RlLCAndycpICE9IE5VTEw7CisgICAgZ3otPnN0cm0uemFsbG9jID0gbXlhbGxvYzsKKyAgICBnei0+c3RybS56ZnJlZSA9IG15ZnJlZTsKKyAgICBnei0+c3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgaWYgKGd6LT53cml0ZSkKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAtMSwgOCwgMTUgKyAxNiwgOCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIGd6LT5zdHJtLm5leHRfaW4gPSAwOworICAgICAgICBnei0+c3RybS5hdmFpbF9pbiA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAxNSArIDE2KTsKKyAgICB9CisgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmZpbGUgPSBwYXRoID09IE5VTEwgPyBmZG9wZW4oZmQsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3BlbihwYXRoLCBnei0+d3JpdGUgPyAid2IiIDogInJiIik7CisgICAgaWYgKGd6LT5maWxlID09IE5VTEwpIHsKKyAgICAgICAgZ3otPndyaXRlID8gZGVmbGF0ZUVuZCgmKGd6LT5zdHJtKSkgOiBpbmZsYXRlRW5kKCYoZ3otPnN0cm0pKTsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZXJyID0gMDsKKyAgICBnei0+bXNnID0gIiI7CisgICAgcmV0dXJuIGd6OworfQorCitpbnQgZ3p3cml0ZSBPRigoZ3pGaWxlLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnendyaXRlKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgY29uc3Qgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgIWd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgZ3pyZWFkIE9GKChnekZpbGUsIHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6cmVhZChneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnb3Q7CisgICAgdW5zaWduZWQgY2hhciBpblsxXTsKKyAgICB6X3N0cmVhbSAqc3RybTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8IGd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGd6LT5lcnIpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X291dCA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIGdvdCA9IGZyZWFkKGluLCAxLCAxLCBnei0+ZmlsZSk7CisgICAgICAgIGlmIChnb3QgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsKKyAgICAgICAgICAgIGd6LT5lcnIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBnei0+bXNnID0gc3RybS0+bXNnOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0KTsKKyAgICByZXR1cm4gbGVuIC0gc3RybS0+YXZhaWxfb3V0OworfQorCitpbnQgZ3pjbG9zZSBPRigoZ3pGaWxlKSk7CisKK2ludCBnemNsb3NlKGd6KQorICAgIGd6RmlsZSBnejsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgaWYgKGd6LT53cml0ZSkgeworICAgICAgICBzdHJtLT5uZXh0X2luID0gWl9OVUxMOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX0ZJTklTSCk7CisgICAgICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgICAgICBkZWZsYXRlRW5kKHN0cm0pOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGluZmxhdGVFbmQoc3RybSk7CisgICAgZmNsb3NlKGd6LT5maWxlKTsKKyAgICBmcmVlKGd6KTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworY29uc3QgY2hhciAqZ3plcnJvciBPRigoZ3pGaWxlLCBpbnQgKikpOworCitjb25zdCBjaGFyICpnemVycm9yKGd6LCBlcnIpCisgICAgZ3pGaWxlIGd6OworICAgIGludCAqZXJyOworeworICAgICplcnIgPSBnei0+ZXJyOworICAgIHJldHVybiBnei0+bXNnOworfQorCisjZW5kaWYKKwogY2hhciAqcHJvZzsKIAogdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKQEAgLTI3Miw4ICs0NjcsMTIgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dGZpbGUsIHNpemVvZihvdXRmaWxlKSwgIiVzJXMiLCBmaWxlLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7CiAgICAgc3RyY2F0KG91dGZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKIAogICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTMwOCw3ICs1MDcsMTEgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGZpbGUpOworI2Vsc2UKICAgICBzdHJjcHkoYnVmLCBmaWxlKTsKKyNlbmRpZgogCiAgICAgaWYgKGxlbiA+IFNVRkZJWF9MRU4gJiYgc3RyY21wKGZpbGUrbGVuLVNVRkZJWF9MRU4sIEdaX1NVRkZJWCkgPT0gMCkgewogICAgICAgICBpbmZpbGUgPSBmaWxlOwpAQCAtMzE3LDcgKzUyMCwxMSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIG91dGZpbGUgPSBmaWxlOwogICAgICAgICBpbmZpbGUgPSBidWY7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiVzIiwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgICAgIHN0cmNhdChpbmZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKICAgICB9CiAgICAgaW4gPSBnem9wZW4oaW5maWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzU1LDcgKzU2MiwxMSBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGNoYXIgKmJuYW1lLCBvdXRtb2RlWzIwXTsKIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0bW9kZSwgc2l6ZW9mKG91dG1vZGUpLCAiJXMiLCAid2I2ICIpOworI2Vsc2UKICAgICBzdHJjcHkob3V0bW9kZSwgIndiNiAiKTsKKyNlbmRpZgogCiAgICAgcHJvZyA9IGFyZ3ZbMF07CiAgICAgYm5hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdHJlZXMuYyBiL01vZHVsZXMvemxpYi90cmVlcy5jCmluZGV4IDU2ZTliYjEuLjFmZDc3NTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi90cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi90cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBIdWZmbWFuIGNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogZGV0ZWN0X2RhdGFfdHlwZSgpIGZ1bmN0aW9uIHByb3ZpZGVkIGZyZWVseSBieSBDb3NtaW4gVHJ1dGEsIDIwMDYKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwpAQCAtNzQsMTEgKzc0LDYgQEAKICAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLgogICovCiAKLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFyKSkKLS8qIE51bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBiZSBpbXBsZW1lbnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikKLSAqLwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCiAgKi8KQEAgLTE1MSw4ICsxNDYsOCBAQAogbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2RlcywgaW50IGRjb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVzKSk7Ci1sb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9kYXRhICpsdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0X2RhdGEgKmR0cmVlKSk7Citsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9kYXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlKSk7CiBsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIHZhbHVlLCBpbnQgbGVuZ3RoKSk7CiBsb2NhbCB2b2lkIGJpX3dpbmR1cCAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CkBAIC0zOTksNyArMzk0LDYgQEAKIAogICAgIHMtPmJpX2J1ZiA9IDA7CiAgICAgcy0+YmlfdmFsaWQgPSAwOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KICNpZmRlZiBERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gMEw7CiAgICAgcy0+Yml0c19zZW50ID0gMEw7CkBAIC04ODMsMTUgKzg3NywxNyBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBlbmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICAqIFRoaXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVyLgotICogVGhlIGN1cnJlbnQgaW5mbGF0ZSBjb2RlIHJlcXVpcmVzIDkgYml0cyBvZiBsb29rYWhlYWQuIElmIHRoZQotICogbGFzdCB0d28gY29kZXMgZm9yIHRoZSBwcmV2aW91cyBibG9jayAocmVhbCBjb2RlIHBsdXMgRU9CKSB3ZXJlIGNvZGVkCi0gKiBvbiA1IGJpdHMgb3IgbGVzcywgaW5mbGF0ZSBtYXkgaGF2ZSBvbmx5IDUrMyBiaXRzIG9mIGxvb2thaGVhZCB0byBkZWNvZGUKLSAqIHRoZSBsYXN0IHJlYWwgY29kZS4gSW4gdGhpcyBjYXNlIHdlIHNlbmQgdHdvIGVtcHR5IHN0YXRpYyBibG9ja3MgaW5zdGVhZAotICogb2Ygb25lLiAoVGhlcmUgYXJlIG5vIHByb2JsZW1zIGlmIHRoZSBwcmV2aW91cyBibG9jayBpcyBzdG9yZWQgb3IgZml4ZWQuKQotICogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCi0gKiBvbiBvbmUgYml0IG9ubHkuCiAgKi8KIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24ocykKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtOTAyLDIwICs4OTgsNiBAQAogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5kaWYKICAgICBiaV9mbHVzaChzKTsKLSAgICAvKiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2VudAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRzLiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFzdCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRoZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2NrKSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVPQiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQgb2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4KLSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3RfZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQgPCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVzaChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gNzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05OTAsNyArOTcyLDggQEAKICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKICNlbmRpZgogICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrbGFzdCwgMyk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopc3RhdGljX2x0cmVlLCAoY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopc3RhdGljX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPnN0YXRpY19sZW47CiAjZW5kaWYKQEAgLTk5OCw3ICs5ODEsOCBAQAogICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPm9wdF9sZW47CiAjZW5kaWYKQEAgLTEwNzUsOCArMTA1OSw4IEBACiAgKi8KIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwotICAgIGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCiB7CiAgICAgdW5zaWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIGludCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovCkBAIC0xMTE4LDcgKzExMDIsNiBAQAogICAgIH0gd2hpbGUgKGx4IDwgcy0+bGFzdF9saXQpOwogCiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IGx0cmVlW0VORF9CTE9DS10uTGVuOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEyMjYsNyArMTIwOSw2IEBACiAgICAgaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCiB7CiAgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KIAogICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpbGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi91bmNvbXByLmMgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCmluZGV4IGFkOThiZTMuLjI0MmU5NDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi91bmNvbXByLmMKKysrIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwpAQCAtMzAsNyArMzAsNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwogICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX2luICE9IHNvdXJjZUxlbikgcmV0dXJuIFpfQlVGX0VSUk9SOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaAppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgppbmRleCBhMmY3MWIxLi4wNDMwMTljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsMTEgKzE3LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI5LDkgKzMxLDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDIsNDQgKzQ2LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05NCwxNiArMTA3LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTMsNyArMTMyLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk5LDYgKzIyMCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDUsNiArMjcyLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU4LDEyICszOTMsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzIsMjEgKzQ0MiwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk2LDE4ICs0ODMsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaCBiL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2E5NDMxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaWZuZGVmIFpDT05GX0gKLSNkZWZpbmUgWkNPTkZfSAotCi0vKgotICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNpZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKLSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAotIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotCi0jICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYwotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCi0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5lIFdJTkRPV1MKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgaWZuZGVmIFdJTjMyCi0jICAgIGRlZmluZSBXSU4zMgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCi0jICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCi0jICAgIGlmbmRlZiBTWVMxNkJJVAotIyAgICAgIGRlZmluZSBTWVMxNkJJVAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKLSAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBkZWZpbmUgTUFYU0VHXzY0SwotI2VuZGlmCi0jaWZkZWYgTVNET1MKLSMgIGRlZmluZSBVTkFMSUdORURfT0sKLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX1ZFUlNJT05fXwotIyAgaWZuZGVmIFNUREMKLSMgICAgZGVmaW5lIFNUREMKLSMgIGVuZGlmCi0jICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgICAgaWZuZGVmIFNUREM5OQotIyAgICAgIGRlZmluZSBTVERDOTkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwotIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KLSNpZm5kZWYgTUFYX01FTV9MRVZFTAotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KLSAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKLSAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQotICogZ3ppcC4pCi0gKi8KLSNpZm5kZWYgTUFYX1dCSVRTCi0jICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCi0jZW5kaWYKLQotLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6Ci0gICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQotIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQotIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCi0gdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCi0gICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKLSBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgotCi0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCi0gZm9yIHNtYWxsIG9iamVjdHMuCi0qLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLwotCi0jaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSMgIGlmZGVmIFNUREMKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0jICBlbHNlCi0jICAgIGRlZmluZSBPRihhcmdzKSAgKCkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKLSAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCi0gKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKLSAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKLSAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9NU0NfVkVSCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKLSAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCi0gICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQotIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLwotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCi0gICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9XSU5BUEkKLSMgICAgaWZkZWYgRkFSCi0jICAgICAgdW5kZWYgRkFSCi0jICAgIGVuZGlmCi0jICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCi0gICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCi0jICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQotIyAgICBpZmRlZiBXSU4zMgotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBaRVhURVJOCi0jICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUCi0jICBkZWZpbmUgWkVYUE9SVAotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlRWQQotIyAgZGVmaW5lIFpFWFBPUlRWQQotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jICBkZWZpbmUgRkFSCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLwotI2VuZGlmCi10eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLwotCi0jaWZkZWYgU01BTExfTUVESVVNCi0gICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLwotIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCi0jZWxzZQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7Ci0jZW5kaWYKLXR5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwotdHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKLXR5cGVkZWYgdUludCAgRkFSIHVJbnRmOwotdHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOwotCi0jaWZkZWYgU1REQwotICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7Ci0jZWxzZQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7Ci0jZW5kaWYKLQotI2lmIDAgICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVwZGF0ZWQgYnkgLi9jb25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGRlZmluZSB6X29mZl90IG9mZl90Ci0jZW5kaWYKLSNpZm5kZWYgU0VFS19TRVQKLSMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwotIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KLSMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCi0jZW5kaWYKLSNpZm5kZWYgel9vZmZfdAotIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgRkFSCi0jICAgIHVuZGVmIEZBUgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJERUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCi0jZW5kaWYKLQotI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLjMgYi9Nb2R1bGVzL3psaWIvemxpYi4zCmluZGV4IDI3YWRjNGMuLjAxNjBlNjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLjMKKysrIGIvTW9kdWxlcy96bGliL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjE5IEFwciAyMDEwIgorLlRIIFpMSUIgMyAiMjggQXByIDIwMTMiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtMzYsOSArMzYsOSBAQAogLklSIHpsaWIuaCAuCiBUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxlcyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKIGluIHRoZSBmaWxlcwotLkkgZXhhbXBsZS5jCisuSSB0ZXN0L2V4YW1wbGUuYwogYW5kCi0uSVIgbWluaWd6aXAuYywKKy5JUiB0ZXN0L21pbmlnemlwLmMsCiBhcyB3ZWxsIGFzIG90aGVyIGV4YW1wbGVzIGluIHRoZQogLklSIGV4YW1wbGVzLwogZGlyZWN0b3J5LgpAQCAtNjUsNyArNjUsNyBAQAogd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIChhbWtAbWFnbmV0LmNvbSksCiBpcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnM6CiAuSVAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwKIC5MUAogLkkgemxpYgogaXMgYnVpbHQgaW50bwpAQCAtOTUsMTEgKzk1LDExIEBACiBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkMKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlczoKIC5JUAotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0IChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUyLnR4dCAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUyIChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5MUAogTWFyayBOZWxzb24gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dAogLkkgemxpYgpAQCAtMTI1LDggKzEyNSw4IEBACiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuNQotQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMi44CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuaCBiL01vZHVsZXMvemxpYi96bGliLmgKaW5kZXggNzlhMTg3Yy4uM2UwYzc2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuaAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5oCkBAIC0xLDcgKzEsNyBAQAogLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjUsIEFwcmlsIDE5dGgsIDIwMTAKKyAgdmVyc2lvbiAxLjIuOCwgQXByaWwgMjh0aCwgMjAxMwogCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTI0LDggKzI0LDggQEAKIAogCiAgIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yCi0gIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0Ci0gICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisgIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAKKyAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyIChnemlwIGZvcm1hdCkuCiAqLwogCiAjaWZuZGVmIFpMSUJfSApAQCAtMzcsMTEgKzM3LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjUiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI1MAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi44IgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyODAKICNkZWZpbmUgWkxJQl9WRVJfTUFKT1IgMQogI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCi0jZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDUKKyNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gOAogI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwCiAKIC8qCkBAIC04MywxNSArODMsMTUgQEAKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKIAogdHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7Ci0gICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovCiAgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KIAogICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgICAgdUludCAgICAgYXZhaWxfb3V0OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dCAqLwotICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KIAotICAgIGNoYXIgICAgICptc2c7ICAgICAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCiAKICAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC0zMjcsOCArMzI3LDkgQEAKIAogICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KICAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUKLSAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8KKyAgcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwKKyAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCiAKICAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAogICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KQEAgLTQ1MSwyMyArNDUyLDI5IEBACiAgIGVycm9yLiAgSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcCAoYQogICBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvIFpfRklOSVNILiAgSW4KICAgdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQ7Ci0gIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUKLSAgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4gc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMKLSAgcHVycG9zZS4pIFRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGlzIHN0cmVhbSBtdXN0IGJlIGluZmxhdGVFbmQgdG8gZGVhbGxvY2F0ZQotICB0aGUgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUKLSAgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlCi0gIGluZmxhdGUoKSBjYWxsLgorICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGZvciB0aGUKKyAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAgKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuCisgIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5vdAorICByZXF1aXJlZCB0byBwZXJmb3JtIGFuIGluZmxhdGlvbiBpbiBvbmUgc3RlcC4gIEhvd2V2ZXIgaXQgbWF5IGJlIHVzZWQgdG8KKyAgaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBjYW4gYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSBpbmZsYXRlKCkKKyAgY2FsbC4gIFpfRklOSVNIIGFsc28gaW5mb3JtcyBpbmZsYXRlIHRvIG5vdCBtYWludGFpbiBhIHNsaWRpbmcgd2luZG93IGlmIHRoZQorICBzdHJlYW0gY29tcGxldGVzLCB3aGljaCByZWR1Y2VzIGluZmxhdGUncyBtZW1vcnkgZm9vdHByaW50LiAgSWYgdGhlIHN0cmVhbQorICBkb2VzIG5vdCBjb21wbGV0ZSwgZWl0aGVyIGJlY2F1c2Ugbm90IGFsbCBvZiB0aGUgc3RyZWFtIGlzIHByb3ZpZGVkIG9yIG5vdAorICBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCB0aGVuIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIGNvbnRpbnVlIHRoZSBvcGVyYXRpb24gYXMgaWYgWl9OT19GTFVTSCBoYWQKKyAgYmVlbiB1c2VkLgogCiAgICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGluZmxhdGUoKSBhbHdheXMgZmx1c2hlcyBhcyBtdWNoIG91dHB1dCBhcwogICBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGFsd2F5cyB1c2VzIHRoZSBmYXN0ZXIgYXBwcm9hY2ggb24gdGhlCi0gIGZpcnN0IGNhbGwuICBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywgb3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQuCisgIGZpcnN0IGNhbGwuICBTbyB0aGUgZWZmZWN0cyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlCisgIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpIGFzIG5vdGVkIGJlbG93LCB3aGVuIGluZmxhdGUoKSByZXR1cm5zIGVhcmx5CisgIHdoZW4gWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQsIGFuZCB3aGVuIGluZmxhdGUoKSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2YKKyAgbWVtb3J5IGZvciBhIHNsaWRpbmcgd2luZG93IHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4KIAogICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhZnRlciB0aGlzIGNhbGwgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeQotICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQorICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKICAgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UgaXQgc2V0cwotICBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKKyAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAogICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAogICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECkBAIC00NzgsNyArNDg1LDkgQEAKICAgaW5pdGlhbGl6aW5nIHdpdGggaW5mbGF0ZUluaXQyKCkuICBBbnkgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBnemlwCiAgIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBzaG91bGQKICAgaW5zdGVhZCB1c2UgcmF3IGluZmxhdGUsIHNlZSBpbmZsYXRlSW5pdDIoKSBiZWxvdywgb3IgaW5mbGF0ZUJhY2soKSBhbmQKLSAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuCisgIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLiAgV2hlbiBwcm9jZXNzaW5nCisgIGd6aXAtd3JhcHBlZCBkZWZsYXRlIGRhdGEsIHN0cm0tPmFkbGVyMzIgaXMgc2V0IHRvIHRoZSBDUkMtMzIgb2YgdGhlIG91dHB1dAorICBwcm9kdWN0ZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlci4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCkBAIC01ODAsMTAgKzU4OSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQotICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkgY2FsbAotICAgb2YgZGVmbGF0ZS4gIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQotICAgZGljdGlvbmFyeSAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFdoZW4gdXNpbmcgdGhlIHpsaWIgZm9ybWF0LCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yCisgICBkZWZsYXRlUmVzZXQsIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZS4gIFdoZW4gZG9pbmcgcmF3IGRlZmxhdGUsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZSwgb3IgaW1tZWRpYXRlbHkKKyAgIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIGEgZGVmbGF0ZSBibG9jaywgaS5lLiBhZnRlciBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIGRlbGl2ZXJlZCB3aGVuIHVzaW5nIGFueSBvZiB0aGUgZmx1c2gKKyAgIG9wdGlvbnMgWl9CTE9DSywgWl9QQVJUSUFMX0ZMVVNILCBaX1NZTkNfRkxVU0gsIG9yIFpfRlVMTF9GTFVTSC4gIFRoZQorICAgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCisgICBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCiAKICAgICAgVGhlIGRpY3Rpb25hcnkgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseQogICAgdG8gYmUgZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seQpAQCAtNjEwLDggKzYyNCw4IEBACiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KLSAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICBvciBpZiBub3QgYXQgYSBibG9jayBib3VuZGFyeSBmb3IgcmF3IGRlZmxhdGUpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcworICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTY4OCw5ICs3MDIsMjkgQEAKICAgIGRlZmxhdGlvbiBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yCiAgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNlZC4gIFRoaXMgd291bGQgYmUgdXNlZAogICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQotICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCisgICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4gIElmIHRoYXQgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgaXMgcHJvdmlkZWQgdGhlCisgICBzb3VyY2VMZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJldHVybmVkIGJ5CisgICBkZWZsYXRlQm91bmQoKSwgYW5kIHRoZSBmbHVzaCB2YWx1ZSBaX0ZJTklTSCwgdGhlbiBkZWZsYXRlKCkgaXMgZ3VhcmFudGVlZAorICAgdG8gcmV0dXJuIFpfU1RSRUFNX0VORC4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNvbXByZXNzZWQgc2l6ZSB0bworICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlmIGZsdXNoIG9wdGlvbnMgb3RoZXIKKyAgIHRoYW4gWl9GSU5JU0ggb3IgWl9OT19GTFVTSCBhcmUgdXNlZC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJpdHMpKTsKKy8qCisgICAgIGRlZmxhdGVQZW5kaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCBiaXRzIG9mIG91dHB1dCB0aGF0IGhhdmUKKyAgIGJlZW4gZ2VuZXJhdGVkLCBidXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBub3QKKyAgIHByb3ZpZGVkIHdvdWxkIGJlIGR1ZSB0byB0aGUgYXZhaWxhYmxlIG91dHB1dCBzcGFjZSBoYXZpbmcgYmVpbmcgY29uc3VtZWQuCisgICBUaGUgbnVtYmVyIG9mIGJpdHMgb2Ygb3V0cHV0IG5vdCBwcm92aWRlZCBhcmUgYmV0d2VlbiAwIGFuZCA3LCB3aGVyZSB0aGV5CisgICBhd2FpdCBtb3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAgSWYgcGVuZGluZworICAgb3IgYml0cyBhcmUgWl9OVUxMLCB0aGVuIHRob3NlIHZhbHVlcyBhcmUgbm90IHNldC4KKworICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOwpAQCAtNzAzLDggKzczNyw5IEBACiAgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCiAgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNzkwLDEwICs4MjUsMTEgQEAKICAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgogICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKLSAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBpbmZsYXRlSW5pdDIoKSBvciBpbmZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIGFueSBjYWxsIG9mCi0gICBpbmZsYXRlKCkgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlCi0gICBkaWN0aW9uYXJ5IHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgogCiAgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKQEAgLTgwMywxOSArODM5LDM4IEBACiAgICBpbmZsYXRlKCkuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCi0gICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQotICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKKyAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUKKyAgIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKICAgIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiAgTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgogCi0gICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuCi0gICBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZQotICAgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4KLSAgIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlIGVycm9yIGNhc2UsCi0gICB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaAotICAgdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAgIGluZmxhdGVTeW5jIHNlYXJjaGVzIGZvciBhIDAwIDAwIEZGIEZGIHBhdHRlcm4gaW4gdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgIEFsbCBmdWxsIGZsdXNoIHBvaW50cyBoYXZlIHRoaXMgcGF0dGVybiwgYnV0IG5vdCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcworICAgcGF0dGVybiBhcmUgZnVsbCBmbHVzaCBwb2ludHMuCisKKyAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgIFpfQlVGX0VSUk9SIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQKKyAgIGhhcyBiZWVuIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LgorICAgSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YKKyAgIHRvdGFsX2luIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlCisgICBlcnJvciBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUKKyAgIGlucHV0IGVhY2ggdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTk2MiwxMiArMTAxNywxMyBAQAogICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3IgdGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgotICAgdGhlIHBhcmFtYXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKKyAgIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCiAgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAogICAgdGhlIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAotdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwogdHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtOTc1LDExICsxMDMxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwogLyoKICAgICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGljYXRpb25zIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dCBidWZmZXIuICBUaGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGluZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisgICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlCiAgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgpAQCAtMTA4OCw2ICsxMTQ1LDcgQEAKICAgICAgMjctMzE6IDAgKHJlc2VydmVkKQogICovCiAKKyNpZm5kZWYgWl9TT0xPCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiAKQEAgLTExNDksMTAgKzEyMDcsMTEgQEAKIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4KKyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCi0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAKIC8qCkBAIC0xMTYyLDcgKzEyMjEsNyBAQAogICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KICovCiAKLXR5cGVkZWYgdm9pZHAgZ3pGaWxlOyAgICAgICAvKiBvcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCiAKIC8qCiBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwpAQCAtMTE3MiwxMyArMTIzMSwyOCBAQAogICAgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkKICAgIGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5nIGFzIGluICJ3YjFSIiwgb3IgJ0YnCiAgICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgotICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSBBbHNvICJhIgotICAgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwgYmUKLSAgIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwKKyAgIHJlcXVlc3QgdHJhbnNwYXJlbnQgd3JpdGluZyBvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbiBhbmQgbm90IHVzaW5nCisgICB0aGUgZ3ppcCBmb3JtYXQuCisKKyAgICAgImEiIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsCisgICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQorICAgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4gIFRoZSBhZGRpdGlvbiBvZgorICAgIngiIHdoZW4gd3JpdGluZyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBleGNsdXNpdmVseSwgd2hpY2ggZmFpbHMgaWYgdGhlIGZpbGUKKyAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbgorICAgcmVhZGluZyBvciB3cml0aW5nIHdpbGwgc2V0IHRoZSBmbGFnIHRvIGNsb3NlIHRoZSBmaWxlIG9uIGFuIGV4ZWN2ZSgpIGNhbGwuCisKKyAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQgZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcAorICAgc3RyZWFtcyBpbiBhIGZpbGUuICBUaGUgYXBwZW5kIGZ1bmN0aW9uIG9mIGd6b3BlbigpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQorICAgc3VjaCBhIGZpbGUuICAoQWxzbyBzZWUgZ3pmbHVzaCgpIGZvciBhbm90aGVyIHdheSB0byBkbyB0aGlzLikgIFdoZW4KKyAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmlsZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLAorICAgbm9yIGRvZXMgaXQgbG9vayBmb3IgdGhlIGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW1zIHRvIGJlZ2luIGFwcGVuZGluZy4gIGd6b3BlbgorICAgd2lsbCBzaW1wbHkgYXBwZW5kIGEgZ3ppcCBzdHJlYW0gdG8gdGhlIGV4aXN0aW5nIGZpbGUuCiAKICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdDsgaW4gdGhpcwotICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgV2hlbgorICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2luZyBmb3IgdGhlIG1hZ2ljIHR3by0KKyAgIGJ5dGUgZ3ppcCBoZWFkZXIuCiAKICAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVyZSB3YXMKICAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGd6RmlsZSBzdGF0ZSwgb3IgaWYgYW4gaW52YWxpZCBtb2RlIHdhcwpAQCAtMTE5Nyw3ICsxMjcxLDExIEBACiAgICBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCwgbW9kZSkpIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBmZC4gIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGZkID0gZHVwKGZkX2tlZXApOyBneiA9IGd6ZG9wZW4oZmQsCiAgICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0byBhdm9pZCBhIGxlYWssIHNpbmNlCi0gICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLgorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCiAKICAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCiAgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKQEAgLTEyMzUsMTQgKzEzMTMsMjYgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pyZWFkIE9GKChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCiAgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIElmCi0gICB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKLSAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KIAogICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQotICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbSwgb3IgZmFpbGluZyB0aGF0LCByZWFkaW5nIHRoZSByZXN0Ci0gICBvZiB0aGUgaW5wdXQgZmlsZSBkaXJlY3RseSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBUaGUgZW50aXJlIGlucHV0IGZpbGUKLSAgIHdpbGwgYmUgcmVhZCBpZiBnenJlYWQgaXMgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQKLSAgIGxlbi4KKyAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0uICBBbnkgbnVtYmVyIG9mIGd6aXAgc3RyZWFtcyBtYXkgYmUKKyAgIGNvbmNhdGVuYXRlZCBpbiB0aGUgaW5wdXQgZmlsZSwgYW5kIHdpbGwgYWxsIGJlIGRlY29tcHJlc3NlZCBieSBnenJlYWQoKS4KKyAgIElmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ3ppcCBzdHJlYW0gaXMgZW5jb3VudGVyZWQgYWZ0ZXIgYSBnemlwIHN0cmVhbSwKKyAgIHRoYXQgcmVtYWluaW5nIHRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZCAoYW5kIG5vIGVycm9yIGlzIHJldHVybmVkKS4KKworICAgICBnenJlYWQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGd6aXAgZmlsZSB0aGF0IGlzIGJlaW5nIGNvbmN1cnJlbnRseSB3cml0dGVuLgorICAgVXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgcmV0dXJuIHdpdGggdGhlIGF2YWlsYWJsZQorICAgZGF0YS4gIElmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGd6ZXJyb3IgaXMgWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhlbgorICAgZ3pjbGVhcmVyciBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgZW5kIG9mIGZpbGUgaW5kaWNhdG9yIGluIG9yZGVyIHRvIHBlcm1pdAorICAgZ3pyZWFkIHRvIGJlIHRyaWVkIGFnYWluLiAgWl9PSyBpbmRpY2F0ZXMgdGhhdCBhIGd6aXAgc3RyZWFtIHdhcyBjb21wbGV0ZWQKKyAgIG9uIHRoZSBsYXN0IGd6cmVhZC4gIFpfQlVGX0VSUk9SIGluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBmaWxlIGVuZGVkIGluIHRoZQorICAgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0uICBOb3RlIHRoYXQgZ3pyZWFkIGRvZXMgbm90IHJldHVybiAtMSBpbiB0aGUgZXZlbnQKKyAgIG9mIGFuIGluY29tcGxldGUgZ3ppcCBzdHJlYW0uICBUaGlzIGVycm9yIGlzIGRlZmVycmVkIHVudGlsIGd6Y2xvc2UoKSwgd2hpY2gKKyAgIHdpbGwgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIHRoZSBsYXN0IGd6cmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcAorICAgc3RyZWFtLiAgQWx0ZXJuYXRpdmVseSwgZ3plcnJvciBjYW4gYmUgdXNlZCBiZWZvcmUgZ3pjbG9zZSB0byBkZXRlY3QgdGhpcworICAgY2FzZS4KIAogICAgICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSByZWFkLCBsZXNzIHRoYW4KICAgIGxlbiBmb3IgZW5kIG9mIGZpbGUsIG9yIC0xIGZvciBlcnJvci4KQEAgLTEyNTYsNyArMTM0Niw3IEBACiAgICBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CitaRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOwogLyoKICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCiAgICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiAgZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCkBAIC0xMzAxLDcgKzEzOTEsMTAgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCi0gICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyBmb3Igc3BlZWQuCisgICBBcyBzdWNoLCBpdCBkb2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJLmUuCisgICBpdCBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgZmlsZSBpcyBOVUxMLCBub3Igd2hldGhlciB0aGUgc3RydWN0dXJlIGZpbGUKKyAgIHBvaW50cyB0byBoYXMgYmVlbiBjbG9iYmVyZWQgb3Igbm90LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CkBAIC0xMzk3LDkgKzE0OTAsNyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKLSAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLiAgVGhpcyBzdGF0ZSBjYW4gY2hhbmdlIGZyb20KLSAgIGZhbHNlIHRvIHRydWUgd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQgZmlsZSBpZiB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaXMKLSAgIHJlYWNoZWQsIGJ1dCBpcyBmb2xsb3dlZCBieSBkYXRhIHRoYXQgaXMgbm90IGFub3RoZXIgZ3ppcCBzdHJlYW0uCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4KIAogICAgICBJZiB0aGUgaW5wdXQgZmlsZSBpcyBlbXB0eSwgZ3pkaXJlY3QoKSB3aWxsIHJldHVybiB0cnVlLCBzaW5jZSB0aGUgaW5wdXQKICAgIGRvZXMgbm90IGNvbnRhaW4gYSBnemlwIHN0cmVhbS4KQEAgLTE0MDgsNiArMTQ5OSwxMyBAQAogICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKICAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKICAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0MTksNyArMTUxNyw4IEBACiAgICBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYWxsb2NhdGlvbi4KIAogICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlmIGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGEKLSAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0NTcsNiArMTU1Niw3IEBACiAgICBmaWxlIHRoYXQgaXMgYmVpbmcgd3JpdHRlbiBjb25jdXJyZW50bHkuCiAqLwogCisjZW5kaWYgLyogIVpfU09MTyAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIApAQCAtMTQ5MiwxNiArMTU5MiwxNyBAQAogICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQogICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCiAgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCi0gICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLgorICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4gIE5vdGUKKyAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMKKyAgIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGhhcyBubyBtZWFuaW5nIG9yIHV0aWxpdHkuCiAqLwogCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzIgICBPRigodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbikpOwogLyoKICAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuIHRoZQogICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCi0gICBpbml0aWFsIHZhbHVlIGZvciB0aGUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MKLSAgIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUKLSAgIGFwcGxpY2F0aW9uLgorICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcworICAgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KIAogICAgVXNhZ2UgZXhhbXBsZToKIApAQCAtMTU0NCwxNyArMTY0NSw0MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKICNkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKLSAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQoc3RybSkgXAotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCiAgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCi0gICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCiAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKworI2lmbmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4KKyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRoZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVzZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBkZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZW5kaWYKIAogLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgogICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgpAQCAtMTU2Miw3ICsxNjg4LDcgQEAKICAqIGZ1bmN0aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24gc3lzdGVtcwogICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUKICAqLwotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWZkZWYgWl9MQVJHRTY0CiAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTcxLDE0ICsxNjk3LDIzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOwogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIF9MRlM2NF9MQVJHRUZJTEUtMAotIyAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAotIyAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAotIyAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAotIyAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKLSMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAotIyAgaWZkZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIGRlZmluZWQoWl9XQU5UNjQpCisjICBpZmRlZiBaX1BSRUZJWF9TRVQKKyMgICAgZGVmaW5lIHpfZ3pvcGVuIHpfZ3pvcGVuNjQKKyMgICAgZGVmaW5lIHpfZ3pzZWVrIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIHpfZ3pvZmZzZXQgel9nem9mZnNldDY0CisjICAgIGRlZmluZSB6X2FkbGVyMzJfY29tYmluZSB6X2FkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMzMl9jb21iaW5lNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CiAgICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTk1LDYgKzE3MzAsMTMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgogCisjZWxzZSAvKiBaX1NPTE8gKi8KKworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisKKyNlbmRpZiAvKiAhWl9TT0xPICovCisKIC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2lmICFkZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKQEAgLTE2MDMsOCArMTc0NSwyMSBAQAogLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOwotWkVYVEVSTiBjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKK1pFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVW5kZXJtaW5lIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCitaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlRWQSBnenZwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsKKyMgIGVuZGlmCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKaW5kZXggZjI4MmQzNi4uNTVjNjY0NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIubWFwCisrKyBiL01vZHVsZXMvemxpYi96bGliLm1hcApAQCAtNjYsMyArNjYsMTggQEAKICAgICBnemNsb3NlX3I7CiAgICAgZ3pjbG9zZV93OwogfSBaTElCXzEuMi4zLjQ7CisKK1pMSUJfMS4yLjUuMSB7CisgICAgZGVmbGF0ZVBlbmRpbmc7Cit9IFpMSUJfMS4yLjMuNTsKKworWkxJQl8xLjIuNS4yIHsKKyAgICBkZWZsYXRlUmVzZXRLZWVwOworICAgIGd6Z2V0Y187CisgICAgaW5mbGF0ZVJlc2V0S2VlcDsKK30gWkxJQl8xLjIuNS4xOworCitaTElCXzEuMi43LjEgeworICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5OworICAgIGd6dnByaW50ZjsKK30gWkxJQl8xLjIuNS4yOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmMgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwppbmRleCA4OThlZDM0Li4yM2QyZWJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuYworKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwpAQCAtMSwxNyArMSwyMCBAQAogLyogenV0aWwuYyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwLCAyMDExLCAyMDEyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogLyogQCgjKSAkSWQkICovCiAKICNpbmNsdWRlICJ6dXRpbC5oIgorI2lmbmRlZiBaX1NPTE8KKyMgIGluY2x1ZGUgImd6Z3V0cy5oIgorI2VuZGlmCiAKICNpZm5kZWYgTk9fRFVNTVlfREVDTAogc3RydWN0IGludGVybmFsX3N0YXRlICAgICAge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAotY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKICJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICJzdHJlYW0gZW5kIiwgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICIiLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KQEAgLTg1LDI3ICs4OCwyNyBAQAogI2lmZGVmIEZBU1RFU1QKICAgICBmbGFncyArPSAxTCA8PCAyMTsKICNlbmRpZgotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbHNlCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI0OworICAgIGZsYWdzICs9IDFMIDw8IDI0OwogIyAgaWZkZWYgTk9fc25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTgxLDYgKzE4NCw3IEBACiB9CiAjZW5kaWYKIAorI2lmbmRlZiBaX1NPTE8KIAogI2lmZGVmIFNZUzE2QklUCiAKQEAgLTMxNiwzICszMjAsNSBAQAogfQogCiAjZW5kaWYgLyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmggYi9Nb2R1bGVzL3psaWIvenV0aWwuaAppbmRleCAyNThmYTg4Li4yNGFiMDZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuaAorKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIFpVVElMX0gKICNkZWZpbmUgWlVUSUxfSAogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICJ6bGliLmgiCiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBpZiAhKGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCiAjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgogIyAgZW5kaWYKQEAgLTI5LDYgKzI5LDEwIEBACiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisgICB0eXBlZGVmIGxvbmcgcHRyZGlmZl90OyAgLyogZ3Vlc3MgLS0gd2lsbCBiZSBjYXVnaHQgaWYgZ3Vlc3MgaXMgd3JvbmcgKi8KKyNlbmRpZgorCiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCiAjZW5kaWYKQEAgLTQwLDEzICs0NCwxMyBAQAogdHlwZWRlZiB1c2ggRkFSIHVzaGY7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLwogLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrKSAqLwogCiAjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05FRURfRElDVC0oZXJyKV0KIAogI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCi0gIHJldHVybiAoc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coZXJyKSwgKGVycikpCisgIHJldHVybiAoc3RybS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKIC8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLwogCiAgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KQEAgLTc4LDE2ICs4MiwxOCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKLSMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQotICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KLSAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOwotICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7Ci0jICAgIGVsc2UKLSMgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQorICAgICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLworICAgICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKKyAgICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CisjICAgICAgZWxzZQorIyAgICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgICAgICBlbmRpZgorIyAgICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLworIyAgICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgICBlbmRpZgotIyAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTEwNywxOCArMTEzLDIwIEBACiAKICNpZmRlZiBPUzIKICMgIGRlZmluZSBPU19DT0RFICAweDA2Ci0jICBpZmRlZiBNX0k4NgorIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKICMgIGRlZmluZSBPU19DT0RFICAweDA3Ci0jICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCi0jICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLwotIyAgZWxzZQotIyAgICBpZm5kZWYgZmRvcGVuCi0jICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgICAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KKyMgICAgZWxzZQorIyAgICAgIGlmbmRlZiBmZG9wZW4KKyMgICAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xNTMsMTQgKzE2MSwxNSBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKE1TRE9TKQogICAjcHJhZ21hIHdhcm4gLTgwMDQKICAgI3ByYWdtYSB3YXJuIC04MDA4CiAgICNwcmFnbWEgd2FybiAtODA2NgogI2VuZGlmCiAKIC8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCi0jaWYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIFwKKyAgICAoIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDApCiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgpAQCAtMTc3LDQyICsxODYsNyBAQAogCiAgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KIAotI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAgIC8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAotICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0jICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKLSMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fU0FTQwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotI2VuZGlmCi0jaWZkZWYgVk1TCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQocHlyKQorI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBOT19NRU1DUFkKICNlbmRpZgogI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQpAQCAtMjYxLDE0ICsyMzUsMTkgQEAKICMgIGRlZmluZSBUcmFjZWN2KGMseCkKICNlbmRpZgogCi0KLXZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOwotdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNpZm5kZWYgWl9TT0xPCisgICB2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjZW5kaWYKIAogI2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKICAgICAgICAgICAgKCooKHN0cm0pLT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQogI2RlZmluZSBaRlJFRShzdHJtLCBhZGRyKSAgKCooKHN0cm0pLT56ZnJlZSkpKChzdHJtKS0+b3BhcXVlLCAodm9pZHBmKShhZGRyKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCkge2lmIChwKSBaRlJFRShzLCBwKTt9CiAKKy8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCisjZGVmaW5lIFpTV0FQMzIocSkgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAorICAgICAgICAgICAgICAgICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKKwogI2VuZGlmIC8qIFpVVElMX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYm1vZHVsZS5jIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKaW5kZXggZTcxODc5NS4uYmY4YzhlNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGlibW9kdWxlLmMKKysrIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiemxpYi5oIgogCisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICNpbmNsdWRlICJweXRocmVhZC5oIgogICAgICNkZWZpbmUgRU5URVJfWkxJQihvYmopIFwKQEAgLTgwLDYgKzgxLDEzIEBACiAgICAgICAgIFB5RXJyX0Zvcm1hdChabGliRXJyb3IsICJFcnJvciAlZCAlczogJS4yMDBzIiwgZXJyLCBtc2csIHptc2cpOwogfQogCisvKltjbGluaWNdCittb2R1bGUgemxpYgorY2xhc3MgemxpYi5Db21wcmVzcworY2xhc3MgemxpYi5EZWNvbXByZXNzCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogUHlEb2NfU1RSVkFSKGNvbXByZXNzb2JqX19kb2NfXywKICJjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtbGV2ZWw9OCxcbiIKICIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1lbLCB6ZGljdF0pXG4iCkBAIC0xMzIsNDAgKzE0MCwxMTUgQEAKICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3Moc3RyaW5nWywgbGV2ZWxdKSAtLSBSZXR1cm5lZCBjb21wcmVzc2VkIHN0cmluZy5cbiIKK3N0YXRpYyB2b2lkKgorUHlabGliX01hbGxvYyh2b2lkcGYgY3R4LCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCit7CisgICAgaWYgKGl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4KKyAgICAgICBpbmZsYXRlKCkgYW5kIGRlZmxhdGUoKSBhcmUgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlabGliX0ZyZWUodm9pZHBmIGN0eCwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtX1Jhd0ZyZWUocHRyKTsKK30KKworLypbY2xpbmljXQorCit6bGliLmNvbXByZXNzCisgICAgYnl0ZXM6IFB5X2J1ZmZlcgorICAgICAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLgorICAgIFsKKyAgICBsZXZlbDogaW50CisgICAgICAgIENvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuCisgICAgXQorICAgIC8KKworUmV0dXJucyBjb21wcmVzc2VkIHN0cmluZy4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoemxpYl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoYnl0ZXMsIFtsZXZlbF0pXG4iCisiUmV0dXJucyBjb21wcmVzc2VkIHN0cmluZy5cbiIKICJcbiIKLSJPcHRpb25hbCBhcmcgbGV2ZWwgaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CisiICBieXRlc1xuIgorIiAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLlxuIgorIiAgbGV2ZWxcbiIKKyIgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb21wcmVzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2NvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGdyb3VwX3JpZ2h0XzEsIGludCBsZXZlbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBieXRlczsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgaW50IGxldmVsID0gMDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmYnl0ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmNvbXByZXNzIiwgJmJ5dGVzLCAmbGV2ZWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ6bGliLmNvbXByZXNzIHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2NvbXByZXNzX2ltcGwobW9kdWxlLCAmYnl0ZXMsIGdyb3VwX3JpZ2h0XzEsIGxldmVsKTsKKworICAgIC8qIENsZWFudXAgZm9yIGJ5dGVzICovCisgICAgaWYgKGJ5dGVzLmJ1ZikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZieXRlcyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBncm91cF9yaWdodF8xLCBpbnQgbGV2ZWwpCisvKltjbGluaWMgY2hlY2tzdW06IGY0OTA3MDhlZmY4NGJlNjUyYjVlYmU3ZmU2MjJhYjczYWMxMmM4ODhdKi8KIHsKICAgICBQeU9iamVjdCAqUmV0dXJuVmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0LCAqb3V0cHV0ID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotICAgIGludCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIGVycjsKKyAgICBpbnQgZXJyOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIC8qIHJlcXVpcmUgUHl0aG9uIHN0cmluZyBvYmplY3QsIG9wdGlvbmFsICdsZXZlbCcgYXJnICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmNvbXByZXNzIiwgJnBpbnB1dCwgJmxldmVsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFncm91cF9yaWdodF8xKQorICAgICAgICBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKIAotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClieXRlcy0+bGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBsZW5ndGggPSBwaW5wdXQubGVuOworICAgIGlucHV0ID0gYnl0ZXMtPmJ1ZjsKKyAgICBsZW5ndGggPSAodW5zaWduZWQgaW50KWJ5dGVzLT5sZW47CiAKICAgICB6c3QuYXZhaWxfb3V0ID0gbGVuZ3RoICsgbGVuZ3RoLzEwMDAgKyAxMiArIDE7CiAKLSAgICBvdXRwdXQgPSAoQnl0ZSopbWFsbG9jKHpzdC5hdmFpbF9vdXQpOworICAgIG91dHB1dCA9IChCeXRlKilQeU1lbV9NYWxsb2MoenN0LmF2YWlsX291dCk7CiAgICAgaWYgKG91dHB1dCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gY29tcHJlc3MgZGF0YSIpOwpAQCAtMTc1LDggKzI1OCw5IEBACiAgICAgLyogUGFzdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLiAgRnJvbSBoZXJlIG9uIG91dCwgd2UgbmVlZCB0byBtYWtlIHN1cmUKICAgICAgICB3ZSBjbGVhbiB1cCBtYWxsb2NzICYgSU5DUkVGcy4gKi8KIAotICAgIHpzdC56YWxsb2MgPSAoYWxsb2NfZnVuYylOVUxMOwotICAgIHpzdC56ZnJlZSA9IChmcmVlX2Z1bmMpWl9OVUxMOworICAgIHpzdC5vcGFxdWUgPSBOVUxMOworICAgIHpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOworICAgIHpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwogICAgIHpzdC5uZXh0X291dCA9IChCeXRlICopb3V0cHV0OwogICAgIHpzdC5uZXh0X2luID0gKEJ5dGUgKilpbnB1dDsKICAgICB6c3QuYXZhaWxfaW4gPSBsZW5ndGg7CkBAIC0yMTcsMTIgKzMwMSw1MyBAQAogICAgICAgICB6bGliX2Vycm9yKHpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7CiAKICBlcnJvcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwotICAgIGZyZWUob3V0cHV0KTsKKyAgICBQeU1lbV9GcmVlKG91dHB1dCk7CiAKICAgICByZXR1cm4gUmV0dXJuVmFsOwogfQogCisvKltweXRob25dCisKK2NsYXNzIHVpbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGNvbnZlcnRlciA9ICd1aW50X2NvbnZlcnRlcicKKworY2xhc3MgY29tcG9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiY29tcG9iamVjdCAqIgorCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworc3RhdGljIGludAordWludF9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcHRyKQoreworICAgIGxvbmcgdmFsOworICAgIHVuc2lnbmVkIGxvbmcgdXZhbDsKKworICAgIHZhbCA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgdXZhbCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOworICAgICAgICBpZiAodXZhbCA9PSAodW5zaWduZWQgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh1dmFsID4gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gaW50IHRvbyBsYXJnZSBmb3IgQyB1bnNpZ25lZCBpbnQiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAodmFsIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIG11c3QgYmUgcG9zaXRpdmUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHV2YWwgPSAodW5zaWduZWQgbG9uZyl2YWw7CisgICAgfQorCisgICAgKih1bnNpZ25lZCBpbnQgKilwdHIgPSBQeV9TQUZFX0RPV05DQVNUKHV2YWwsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CisgICAgcmV0dXJuIDE7Cit9CisKIFB5RG9jX1NUUlZBUihkZWNvbXByZXNzX19kb2NfXywKICJkZWNvbXByZXNzKHN0cmluZ1ssIHdiaXRzWywgYnVmc2l6ZV1dKSAtLSBSZXR1cm4gZGVjb21wcmVzc2VkIHN0cmluZy5cbiIKICJcbiIKQEAgLTIzOCwzMiArMzYzLDMzIEBACiAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKICAgICBpbnQgZXJyOwogICAgIGludCB3c2l6ZT1ERUZfV0JJVFM7Ci0gICAgUHlfc3NpemVfdCByX3N0cmxlbj1ERUZBVUxUQUxMT0M7CisgICAgdW5zaWduZWQgaW50IGJ1ZnNpemUgPSBERUZBVUxUQUxMT0MsIG5ld19idWZzaXplOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aW46ZGVjb21wcmVzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwaW5wdXQsICZ3c2l6ZSwgJnJfc3RybGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGlPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpbnB1dCwgJndzaXplLCB1aW50X2NvbnZlcnRlciwgJmJ1ZnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBsZW5ndGggPSBwaW5wdXQubGVuOworICAgIGxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpcGlucHV0LmxlbjsKIAotICAgIGlmIChyX3N0cmxlbiA8PSAwKQotICAgICAgICByX3N0cmxlbiA9IDE7CisgICAgaWYgKGJ1ZnNpemUgPT0gMCkKKyAgICAgICAgYnVmc2l6ZSA9IDE7CiAKICAgICB6c3QuYXZhaWxfaW4gPSBsZW5ndGg7Ci0gICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOworICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOwogCi0gICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcl9zdHJsZW4pKSkKKyAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZzaXplKSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpOwogICAgIHpzdC5uZXh0X2luID0gKEJ5dGUgKilpbnB1dDsKICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnpzdCwgd3NpemUpOwpAQCAtMzAzLDE0ICs0MjksMTggQEAKICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICBjYXNlKFpfT0spOgogICAgICAgICAgICAgLyogbmVlZCBtb3JlIG1lbW9yeSAqLwotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgcl9zdHJsZW4gPDwgMSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoYnVmc2l6ZSA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICAgICAgbmV3X2J1ZnNpemUgPSBidWZzaXplIDw8IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3X2J1ZnNpemUgPSBVSU5UX01BWDsKKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIG5ld19idWZzaXplKSA8IDApIHsKICAgICAgICAgICAgICAgICBpbmZsYXRlRW5kKCZ6c3QpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB6c3QubmV4dF9vdXQgPQotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cikgKyByX3N0cmxlbjsKLSAgICAgICAgICAgIHpzdC5hdmFpbF9vdXQgPSByX3N0cmxlbjsKLSAgICAgICAgICAgIHJfc3RybGVuID0gcl9zdHJsZW4gPDwgMTsKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpICsgYnVmc2l6ZTsKKyAgICAgICAgICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOworICAgICAgICAgICAgYnVmc2l6ZSA9IG5ld19idWZzaXplOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpbmZsYXRlRW5kKCZ6c3QpOwpAQCAtMzQwLDcgKzQ3MCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlabGliX2NvbXByZXNzb2JqKFB5T2JqZWN0ICpzZWxmcHRyLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBjb21wb2JqZWN0ICpzZWxmOworICAgIGNvbXBvYmplY3QgKnNlbGYgPSBOVUxMOwogICAgIGludCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIG1ldGhvZD1ERUZMQVRFRDsKICAgICBpbnQgd2JpdHM9TUFYX1dCSVRTLCBtZW1MZXZlbD1ERUZfTUVNX0xFVkVMLCBzdHJhdGVneT0wLCBlcnI7CiAgICAgUHlfYnVmZmVyIHpkaWN0OwpAQCAtMzUzLDExICs0ODMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWVtTGV2ZWwsICZzdHJhdGVneSwgJnpkaWN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoemRpY3QuYnVmICE9IE5VTEwgJiYgKHNpemVfdCl6ZGljdC5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKwogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZDb21wdHlwZSk7CiAgICAgaWYgKHNlbGY9PU5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCZzZWxmLT56c3QsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOwpAQCAtMzY3LDcgKzUwNCw4IEBACiAgICAgICAgIGlmICh6ZGljdC5idWYgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwgemRpY3QuYnVmLCB6ZGljdC5sZW4pOworICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0LmJ1ZiwgKHVuc2lnbmVkIGludCl6ZGljdC5sZW4pOwogICAgICAgICAgICAgc3dpdGNoIChlcnIpIHsKICAgICAgICAgICAgIGNhc2UgKFpfT0spOgogICAgICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKQEAgLTQyMCw4ICs1NTgsOSBAQAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZEZWNvbXB0eXBlKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgaWYgKHpkaWN0ICE9IE5VTEwpIHsKQEAgLTQ5MCw3ICs2MjksNyBAQAogewogICAgIGludCBlcnI7CiAgICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGQVVMVEFMTE9DLCBuZXdfbGVuZ3RoOwogICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBwaW5wdXQ7CiAgICAgQnl0ZSAqaW5wdXQ7CkBAIC00OTgsMTMgKzYzNywxMyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjpjb21wcmVzcyIsICZwaW5wdXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpcGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yX291dGVyOwogICAgIH0KICAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgaW5wbGVuID0gcGlucHV0LmxlbjsKKyAgICBpbnBsZW4gPSAodW5zaWduZWQgaW50KXBpbnB1dC5sZW47CiAKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQogICAgICAgICBnb3RvIGVycm9yX291dGVyOwpAQCAtNTI0LDE1ICs2NjMsMTggQEAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQogICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBaX05PX0ZMVVNIKTsKQEAgLTU1MCw4ICs2OTIsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTU3Myw3ICs3MTQsNyBAQAogICAgICAgICAgICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW51c2VkX2RhdGEpOwogICAgICAgICAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdfZGF0YTsKLSAgICAgICAgICAgIGlmIChzZWxmLT56c3QuYXZhaWxfaW4gPiBQWV9TU0laRV9UX01BWCAtIG9sZF9zaXplKSB7CisgICAgICAgICAgICBpZiAoKHNpemVfdClzZWxmLT56c3QuYXZhaWxfaW4gPiAoc2l6ZV90KVVJTlRfTUFYIC0gKHNpemVfdClvbGRfc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQpAQCAtNjA0LDU1ICs3NDUsOTUgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKGRlY29tcF9kZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKGRhdGEsIG1heF9sZW5ndGgpIC0tIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWRcbiIKLSJ2ZXJzaW9uIG9mIHRoZSBkYXRhLlxuIgorLypbY2xpbmljXQorCit6bGliLkRlY29tcHJlc3MuZGVjb21wcmVzcworCisgICAgc2VsZjogY29tcG9iamVjdAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgICAgIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvbXByZXNzLgorICAgIG1heF9sZW5ndGg6IHVpbnQgPSAwCisgICAgICAgIFRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGggb2YgdGhlIGRlY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBVbmNvbnN1bWVkIGlucHV0IGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4KKyAgICAgICAgdGhlIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUuCisgICAgLworCitSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGEuCisKK0FmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGwgYmUgc3RvcmVkIGluCitpbnRlcm5hbCBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLgorQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKGRhdGEsIG1heF9sZW5ndGg9MClcbiIKKyJSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvbXByZXNzLlxuIgorIiAgbWF4X2xlbmd0aFxuIgorIiAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS5cbiIKKyIgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluXG4iCisiICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLlxuIgogIlxuIgogIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGwgYmUgc3RvcmVkIGluXG4iCiAiaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKLSJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLlxuIgotIklmIHRoZSBtYXhfbGVuZ3RoIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmVcbiIKLSJubyBsb25nZXIgdGhhbiBtYXhfbGVuZ3RoLiAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluXG4iCi0idGhlIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUuIik7CisiQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX29iamRlY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IG1heF9sZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBlcnIsIG1heF9sZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIGludCBpbnBsZW47Ci0gICAgUHlfc3NpemVfdCBvbGRfbGVuZ3RoLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGE7CisgICAgdW5zaWduZWQgaW50IG1heF9sZW5ndGggPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsIHVpbnRfY29udmVydGVyLCAmbWF4X2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKChjb21wb2JqZWN0ICopc2VsZiwgJmRhdGEsIG1heF9sZW5ndGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5idWYpCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoKQorLypbY2xpbmljIGNoZWNrc3VtOiAzNTk5Njk4OTQ4ZjVhNzEyZjVhODMwOTQ5MTY3MWNjMmNlOTY5ZDJjXSovCit7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOwogICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOwotICAgIFB5X2J1ZmZlciBwaW5wdXQ7Ci0gICAgQnl0ZSAqaW5wdXQ7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGk6ZGVjb21wcmVzcyIsICZwaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhfbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOwotICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgaW5wbGVuID0gcGlucHV0LmxlbjsKLSAgICBpZiAobWF4X2xlbmd0aCA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibWF4X2xlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIGxpbWl0IGFtb3VudCBvZiBkYXRhIGFsbG9jYXRlZCB0byBtYXhfbGVuZ3RoICovCiAgICAgaWYgKG1heF9sZW5ndGggJiYgbGVuZ3RoID4gbWF4X2xlbmd0aCkKICAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKICAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IGlucGxlbjsKLSAgICBzZWxmLT56c3QubmV4dF9pbiA9IGlucHV0OworICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+bGVuOworICAgIHNlbGYtPnpzdC5uZXh0X2luID0gZGF0YS0+YnVmOwogICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpOwogCkBAIC02NjcsMTIgKzg0OCwyMSBAQAogICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KLSAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJihzZWxmLT56c3QpLCB6ZGljdF9idWYuYnVmLCB6ZGljdF9idWYubGVuKTsKKworICAgICAgICBpZiAoKHNpemVfdCl6ZGljdF9idWYubGVuID4gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAiemRpY3QgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemRpY3RfYnVmLmJ1ZiwgKHVuc2lnbmVkIGludCl6ZGljdF9idWYubGVuKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3RfYnVmKTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CiAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICAvKiBSZXBlYXQgdGhlIGNhbGwgdG8gaW5mbGF0ZS4gKi8KQEAgLTY5OCw4ICs4ODgsNyBAQAogICAgICAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKIAogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQpAQCAtNzMzLDE0ICs5MjIsMTEgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKICAgICBMRUFWRV9aTElCKHNlbGYpOwotIGVycm9yX291dGVyOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgcmV0dXJuIFJldFZhbDsKIH0KIApAQCAtNzU1LDcgKzk0MSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlabGliX2ZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBlcnIsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZBVUxUQUxMT0MsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKlJldFZhbDsKICAgICBpbnQgZmx1c2htb2RlID0gWl9GSU5JU0g7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CkBAIC03ODYsMTUgKzk3MywxOCBAQAogICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAogICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCiAgICAgd2hpbGUgKGVyciA9PSBaX09LICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCA8PCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9CiAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCkgKyBsZW5ndGg7CiAgICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIGZsdXNobW9kZSk7CkBAIC04MjcsOCArMTAxNyw3IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CkBAIC04MzgsMTEgKzEwMjcsMjUgQEAKIH0KIAogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCi1QeURvY19TVFJWQVIoY29tcF9jb3B5X19kb2NfXywKLSJjb3B5KCkgLS0gUmV0dXJuIGEgY29weSBvZiB0aGUgY29tcHJlc3Npb24gb2JqZWN0LiIpOworCisvKltjbGluaWNdCit6bGliLkNvbXByZXNzLmNvcHkKKworICAgIHNlbGY6IGNvbXBvYmplY3QKKworUmV0dXJuIGEgY29weSBvZiB0aGUgY29tcHJlc3Npb24gb2JqZWN0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoemxpYl9Db21wcmVzc19jb3B5X19kb2NfXywKKyJjb3B5KClcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2NvcHkoY29tcG9iamVjdCAqc2VsZikKK3psaWJfQ29tcHJlc3NfY29weShjb21wb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiAwYjM3YzA3ZjhmMjdkZWI3ZDQ3Njk5NTFmYmVjZjYwMGExMDA2ZWY4XSovCiB7CiAgICAgY29tcG9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBpbnQgZXJyOwpAQCAtOTU4LDI0ICsxMTYxLDMxIEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlabGliX3VuZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGVyciwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRkFVTFRBTExPQywgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqIHJldHZhbCA9IE5VTEw7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CisgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpmbHVzaCIsICZsZW5ndGgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOmZsdXNoIiwgdWludF9jb252ZXJ0ZXIsICZsZW5ndGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuZ3RoIDw9IDApIHsKKyAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBpZiAoIShyZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAorICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisKICAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKKyAgICAvKiBzYXZlX3VuY29uc3VtZWRfaW5wdXQoKSBlbnN1cmVzIHRoYXQgdW5jb25zdW1lZF90YWlsIGxlbmd0aCBpcyBsZXNzZXIKKyAgICAgICBvciBlcXVhbCB0aGFuIFVJTlRfTUFYICovCisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gUHlfU0FGRV9ET1dOQ0FTVChzaXplLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT51bmNvbnN1bWVkX3RhaWwpOwogICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwpAQCAtOTg3LDE0ICsxMTk3LDE3IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGluZmxhdGUoJihzZWxmLT56c3QpLCBaX0ZJTklTSCk7CkBAIC0xMDIxLDggKzEyMzQsNyBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgIH0KIAogZXJyb3I6CkBAIC0xMDM5LDE2ICsxMjUxLDE0IEBACiAgICAgeyJmbHVzaCIsIChiaW5hcnlmdW5jKVB5WmxpYl9mbHVzaCwgTUVUSF9WQVJBUkdTLAogICAgICAgICAgICAgICBjb21wX2ZsdXNoX19kb2NfX30sCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb3B5LCBNRVRIX05PQVJHUywKLSAgICAgICAgICAgICAgY29tcF9jb3B5X19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgRGVjb21wX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamRlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXBfZGVjb21wcmVzc19fZG9jX199LAorICAgIFpMSUJfREVDT01QUkVTU19ERUNPTVBSRVNTX01FVEhPRERFRgogICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfdW5mbHVzaCwgTUVUSF9WQVJBUkdTLAogICAgICAgICAgICAgICBkZWNvbXBfZmx1c2hfX2RvY19ffSwKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQpAQCAtMTA4OSwxNSArMTI5OSwxNSBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIC8qIEF2b2lkIHRydW5jYXRpb24gb2YgbGVuZ3RoIGZvciB2ZXJ5IGxhcmdlIGJ1ZmZlcnMuIGFkbGVyMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKKyAgICAgICAgd2hpbGUgKChzaXplX3QpbGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgcGJ1Zi5idWYsICh1bnNpZ25lZCBpbnQpcGJ1Zi5sZW4pOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYWRsZXIzMnZhbCAmIDB4ZmZmZmZmZmZVKTsKQEAgLTExMjcsMTUgKzEzMzcsMTUgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAvKiBBdm9pZCB0cnVuY2F0aW9uIG9mIGxlbmd0aCBmb3IgdmVyeSBsYXJnZSBidWZmZXJzLiBjcmMzMigpIHRha2VzCiAgICAgICAgICAgIGxlbmd0aCBhcyBhbiB1bnNpZ25lZCBpbnQsIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIFB5X3NzaXplX3QuICovCi0gICAgICAgIHdoaWxlIChsZW4gPiAoc2l6ZV90KSBVSU5UX01BWCkgeworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgewogICAgICAgICAgICAgY3JjMzJ2YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIGxlbik7CisgICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIHBidWYuYnVmLCAodW5zaWduZWQgaW50KXBidWYubGVuKTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHNpZ25lZF92YWwgJiAweGZmZmZmZmZmVSk7CkBAIC0xMTQ2LDggKzEzNTYsNyBAQAogewogICAgIHsiYWRsZXIzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLAogICAgICAgICAgICAgICAgIGFkbGVyMzJfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzcywgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3NfX2RvY19ffSwKKyAgICBaTElCX0NPTVBSRVNTX01FVEhPRERFRgogICAgIHsiY29tcHJlc3NvYmoiLCAoUHlDRnVuY3Rpb24pUHlabGliX2NvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvYmpfX2RvY19ffSwKICAgICB7ImNyYzMyIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jcmMzMiwgTUVUSF9WQVJBUkdTLApAQCAtMTI2NiwyMCArMTQ3NSwyMCBAQAogICAgICAgICBQeV9JTkNSRUYoWmxpYkVycm9yKTsKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFpsaWJFcnJvcik7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhfV0JJVFMiLCBNQVhfV0JJVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZMQVRFRCIsIERFRkxBVEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX01FTV9MRVZFTCIsIERFRl9NRU1fTEVWRUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfU1BFRUQiLCBaX0JFU1RfU1BFRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfQ09NUFJFU1NJT04iLCBaX0JFU1RfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTFRFUkVEIiwgWl9GSUxURVJFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfSFVGRk1BTl9PTkxZIiwgWl9IVUZGTUFOX09OTFkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfU1RSQVRFR1kiLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWF9XQklUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGTEFURUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9NRU1fTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9TUEVFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklMVEVSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfSFVGRk1BTl9PTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklOSVNIIiwgWl9GSU5JU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX05PX0ZMVVNIIiwgWl9OT19GTFVTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfU1lOQ19GTFVTSCIsIFpfU1lOQ19GTFVTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRlVMTF9GTFVTSCIsIFpfRlVMTF9GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GSU5JU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfTk9fRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfU1lOQ19GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GVUxMX0ZMVVNIKTsKIAogICAgIHZlciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFpMSUJfVkVSU0lPTik7CiAgICAgaWYgKHZlciAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9hYnN0cmFjdC5jIGIvT2JqZWN0cy9hYnN0cmFjdC5jCmluZGV4IDEzMDljNTEuLjkxZGY1ZGEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYWJzdHJhY3QuYworKysgYi9PYmplY3RzL2Fic3RyYWN0LmMKQEAgLTY0LDQ5ICs2NCw3MiBAQAogfQogI2RlZmluZSBQeU9iamVjdF9MZW5ndGggUHlPYmplY3RfU2l6ZQogCitpbnQKK19QeU9iamVjdF9IYXNMZW4oUHlPYmplY3QgKm8pIHsKKyAgICByZXR1cm4gKFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlICYmIFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlLT5zcV9sZW5ndGgpIHx8CisgICAgICAgIChQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nICYmIFB5X1RZUEUobyktPnRwX2FzX21hcHBpbmctPm1wX2xlbmd0aCk7Cit9CiAKIC8qIFRoZSBsZW5ndGggaGludCBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlIGZyb20gby5fX2xlbl9fKCkKLSAgIG9yIG8uX19sZW5ndGhfaGludF9fKCkuICBJZiB0aG9zZSBtZXRob2RzIGFyZW4ndCBmb3VuZCBvciByZXR1cm4gYSBuZWdhdGl2ZQotICAgdmFsdWUsIHRoZW4gdGhlIGRlZmF1bHR2YWx1ZSBpcyByZXR1cm5lZC4gIElmIG9uZSBvZiB0aGUgY2FsbHMgZmFpbHMsCisgICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiBJZiB0aG9zZSBtZXRob2RzIGFyZW4ndCBmb3VuZCB0aGUgZGVmYXVsdHZhbHVlIGlzCisgICByZXR1cm5lZC4gIElmIG9uZSBvZiB0aGUgY2FsbHMgZmFpbHMgd2l0aCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBUeXBlRXJyb3IKICAgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMS4KICovCiAKIFB5X3NzaXplX3QKLV9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKK1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlKQogeworICAgIFB5T2JqZWN0ICpoaW50LCAqcmVzdWx0OworICAgIFB5X3NzaXplX3QgcmVzOwogICAgIF9QeV9JREVOVElGSUVSKF9fbGVuZ3RoX2hpbnRfXyk7Ci0gICAgUHlPYmplY3QgKnJvLCAqaGludG1ldGg7Ci0gICAgUHlfc3NpemVfdCBydjsKLQotICAgIC8qIHRyeSBvLl9fbGVuX18oKSAqLwotICAgIHJ2ID0gUHlPYmplY3RfU2l6ZShvKTsKLSAgICBpZiAocnYgPj0gMCkKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKG8pKSB7CisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0xlbmd0aChvKTsKKyAgICAgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQogICAgIH0KLQotICAgIC8qIHRyeSBvLl9fbGVuZ3RoX2hpbnRfXygpICovCi0gICAgaGludG1ldGggPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX2xlbmd0aF9oaW50X18pOwotICAgIGlmIChoaW50bWV0aCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgIGhpbnQgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX2xlbmd0aF9oaW50X18pOworICAgIGlmIChoaW50ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKLSAgICB9Ci0gICAgcm8gPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnRtZXRoLCBOVUxMKTsKLSAgICBQeV9ERUNSRUYoaGludG1ldGgpOwotICAgIGlmIChybyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CiAgICAgfQotICAgIHJ2ID0gUHlMb25nX0NoZWNrKHJvKSA/IFB5TG9uZ19Bc1NzaXplX3Qocm8pIDogZGVmYXVsdHZhbHVlOwotICAgIFB5X0RFQ1JFRihybyk7Ci0gICAgcmV0dXJuIHJ2OworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaGludCwgTlVMTCk7CisgICAgUHlfREVDUkVGKGhpbnQpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBQeV9Ob3RJbXBsZW1lbnRlZCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKKyAgICB9CisgICAgaWYgKCFQeUxvbmdfQ2hlY2socmVzdWx0KSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiX19sZW5ndGhfaGludF9fIG11c3QgYmUgYW4gaW50ZWdlciwgbm90ICUuMTAwcyIsCisgICAgICAgICAgICBQeV9UWVBFKHJlc3VsdCktPnRwX25hbWUpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXMgPSBQeUxvbmdfQXNTc2l6ZV90KHJlc3VsdCk7CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKIH0KIAogUHlPYmplY3QgKgpAQCAtMjAyLDcgKzIyNSw3IEBACiB9CiAKIGludAotUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByZXQ7CkBAIC0xMjE3LDcgKzEyNDAsNyBAQAogICB0byBiZSBhbiBpbnQgb3IgaGF2ZSBhbiBfX2ludF9fIG1ldGhvZC4gU3RlYWxzIGludGVncmFsJ3MKICAgcmVmZXJlbmNlLiBlcnJvcl9mb3JtYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVHlwZUVycm9yIGlmIGludGVncmFsCiAgIGlzbid0IGFjdHVhbGx5IGFuIEludGVncmFsIGluc3RhbmNlLiBlcnJvcl9mb3JtYXQgc2hvdWxkIGJlIGEgZm9ybWF0IHN0cmluZwotICB0aGF0IGNhbiBhY2NlcHQgYSBjaGFyKiBuYW1pbmcgaW50ZWdyYWwncyB0eXBlLiAKKyAgdGhhdCBjYW4gYWNjZXB0IGEgY2hhciogbmFtaW5nIGludGVncmFsJ3MgdHlwZS4KICovCiBzdGF0aWMgUHlPYmplY3QgKgogY29udmVydF9pbnRlZ3JhbF90b19pbnQoUHlPYmplY3QgKmludGVncmFsLCBjb25zdCBjaGFyICplcnJvcl9mb3JtYXQpCkBAIC0xMjM2LDcgKzEyNTksNyBAQAogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCBlcnJvcl9mb3JtYXQsIFB5X1RZUEUoaW50ZWdyYWwpLT50cF9uYW1lKTsKICAgICBQeV9ERUNSRUYoaW50ZWdyYWwpOwotICAgIHJldHVybiBOVUxMOyAgICAKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0xNjY5LDcgKzE2OTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEd1ZXNzIHJlc3VsdCBzaXplIGFuZCBhbGxvY2F0ZSBzcGFjZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKICAgICBpZiAobiA9PSAtMSkKICAgICAgICAgZ290byBGYWlsOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwpAQCAtMTkyOSw3ICsxOTUyLDcgQEAKICNkZWZpbmUgUHlNYXBwaW5nX0xlbmd0aCBQeU1hcHBpbmdfU2l6ZQogCiBQeU9iamVjdCAqCi1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleSwgKnI7CiAKQEAgLTE5NDUsNyArMTk2OCw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByOwpAQCAtMTk2NCw3ICsxOTg3LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTIwNjMsMTAgKzIwODYsMTUgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGFzc2VydChyZXN1bHQgIT0gTlVMTCB8fCBQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCkBAIC0yMTAxLDcgKzIxMjksNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMTE2LDEyICsyMTQ0LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIGNhbGxfZnVuY3Rpb25fdGFpbChjYWxsYWJsZSwgYXJncyk7CiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE0MSw3ICsyMTcxLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQorY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE3MCw3ICsyMjAwLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxOTEsNyArMjIyMSw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIyMTIsNyArMjI0Myw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjaGFyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjMyLDcgKzIyNjQsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMzAyLDcgKzIzMzUsNyBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbmFtZSwgLi4uKQogewogICAgIFB5T2JqZWN0ICphcmdzLCAqdG1wOwpAQCAtMjY3Nyw4ICsyNzEwLDggQEAKICAqIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgcG9pbnRlcnMgd2l0aCBhIE5VTEwgY2hhciogdGVybWluYXRpbmcgdGhlIGFycmF5LgogICogKGllOiBhbiBhcmd2IG9yIGVudiBsaXN0KQogICoKLSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBtYWxsb2MoKSBhbmQgTVVTVAotICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIGZyZWUoKSBsb29wIG9yIF9QeV9GcmVlQ2hhclBBcnJheSgpLgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIFB5TWVtX01hbGxvYygpCisgKiBhbmQgTVVTVCBiZSBmcmVlZCBieSBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KICAqLwogY2hhciAqY29uc3QgKgogX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoUHlPYmplY3QqIHNlbGYpCkBAIC0yNjg2LDYgKzI3MTksNyBAQAogICAgIGNoYXIgKiphcnJheTsKICAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFyZ2MgPSBQeVNlcXVlbmNlX1NpemUoc2VsZik7CiAgICAgaWYgKGFyZ2MgPT0gLTEpCkBAIC0yNjk4LDcgKzI3MzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGFycmF5ID0gUHlNZW1fTWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNzE3LDExICsyNzUxLDEzIEBACiAgICAgICAgICAgICBhcnJheVtpXSA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgYXJyYXlbaV0gPSBzdHJkdXAoZGF0YSk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGl0ZW0pICsgMTsKKyAgICAgICAgYXJyYXlbaV0gPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGFycmF5W2ldLCBkYXRhLCBzaXplKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhcnJheVthcmdjXSA9IE5VTEw7CkBAIC0yNzQxLDcgKzI3NzcsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZnJlZShhcnJheVtpXSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJyYXlbaV0pOwogICAgIH0KLSAgICBmcmVlKCh2b2lkKilhcnJheSk7CisgICAgUHlNZW1fRnJlZSgodm9pZCopYXJyYXkpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKaW5kZXggNjBiMjgxMS4uMzFjYzRjYyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCkBAIC0xNTAsNiArMTUwLDcgQEAKICAgICB9CiAgICAgUHlfU0laRShuZXcpID0gc2l6ZTsKICAgICBuZXctPm9iX2FsbG9jID0gYWxsb2M7CisgICAgbmV3LT5vYl9zdGFydCA9IG5ldy0+b2JfYnl0ZXM7CiAgICAgbmV3LT5vYl9leHBvcnRzID0gMDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CkBAIC0xNzcsNDggKzE3OCw3MCBAQAogUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgdm9pZCAqc3ZhbDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYzsKKyAgICBQeUJ5dGVBcnJheU9iamVjdCAqb2JqID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpOworICAgIFB5X3NzaXplX3QgYWxsb2MgPSBvYmotPm9iX2FsbG9jOworICAgIFB5X3NzaXplX3QgbG9naWNhbF9vZmZzZXQgPSBvYmotPm9iX3N0YXJ0IC0gb2JqLT5vYl9ieXRlczsKIAogICAgIGFzc2VydChzZWxmICE9IE5VTEwpOwogICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSk7CiAgICAgYXNzZXJ0KHNpemUgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0ID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA8PSBhbGxvYyk7CiAKICAgICBpZiAoc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIV9jYW5yZXNpemUoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZikpIHsKKyAgICBpZiAoIV9jYW5yZXNpemUob2JqKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKLSAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8IGFsbG9jKSB7Ci0gICAgICAgIC8qIFdpdGhpbiBhbGxvY2F0ZWQgc2l6ZTsgcXVpY2sgZXhpdCAqLwotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgewotICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgaWYgKHNpemUgKyBsb2dpY2FsX29mZnNldCArIDEgPCBhbGxvYykgeworICAgICAgICAvKiBDdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9zdCB0aGUgcmVxdWVzdGVkIHNpemUsCisgICAgICAgICAgIGRlY2lkZSBvbiBhIHN0cmF0ZWd5LiAqLworICAgICAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgeworICAgICAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNaW5vciBkb3duc2l6ZTsgcXVpY2sgZXhpdCAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICAvKiBOZWVkIGdyb3dpbmcsIGRlY2lkZSBvbiBhIHN0cmF0ZWd5ICovCisgICAgICAgIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2MoKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcywgYWxsb2MpOwotICAgIGlmIChzdmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChsb2dpY2FsX29mZnNldCA+IDApIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X01hbGxvYyhhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN2YWwsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgUHlfTUlOKHNpemUsIFB5X1NJWkUoc2VsZikpKTsKKyAgICAgICAgUHlPYmplY3RfRnJlZShvYmotPm9iX2J5dGVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKG9iai0+b2JfYnl0ZXMsIGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMgPSBzdmFsOworICAgIG9iai0+b2JfYnl0ZXMgPSBvYmotPm9iX3N0YXJ0ID0gc3ZhbDsKICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jID0gYWxsb2M7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLworICAgIG9iai0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBvYmotPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTI4OCwxMyArMzExLDEzIEBACiAgICAgfQogICAgIGlmIChzaXplIDwgc2VsZi0+b2JfYWxsb2MpIHsKICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOworICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtMzMxLDYgKzM1NCw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKQEAgLTMzOCwxOSArMzYyLDE2IEBACiAgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzaXplID0gbXlzaXplICogY291bnQ7Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKG15c2l6ZSA9PSAxKQotICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIHNlbGYtPm9iX2J5dGVzWzBdLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1ZiwgYnVmWzBdLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGkqbXlzaXplLCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKKyAgICAgICAgICAgIG1lbWNweShidWYgKyBpKm15c2l6ZSwgYnVmLCBteXNpemUpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmKTsKQEAgLTM2Niw3ICszODcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zODUsNyArNDA2LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoLCBjdXIsIGk7CkBAIC0zOTgsOCArNDE5LDggQEAKICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgICAgICBlbHNlIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBzbGljZWxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpzb3VyY2VfYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtNDI1LDEwICs0NDYsOTQgQEAKIH0KIAogc3RhdGljIGludAorYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgYnl0ZXNfbGVuKQoreworICAgIFB5X3NzaXplX3QgYXZhaWwgPSBoaSAtIGxvOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGdyb3d0aCA9IGJ5dGVzX2xlbiAtIGF2YWlsOworICAgIGludCByZXMgPSAwOworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChncm93dGggPCAwKSB7CisgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgLyogU2hyaW5rIHRoZSBidWZmZXIgYnkgYWR2YW5jaW5nIGl0cyBsb2dpY2FsIHN0YXJ0ICovCisgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCAtPSBncm93dGg7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdGFpbC0tLS0tLT58CisgICAgICAgICAgICAgIHwgICAgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgICBuZXdfbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICB8ICAgfDwtYnl0ZXNfbGVuLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMxOTU3ODogSGFuZGxpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaGVyZSBpcworICAgICAgICAgICAgICAgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGUgYnl0ZWFycmF5IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICBtb2RpZmllZC4gRGVwZW5kaW5nIG9uIGdyb3d0aCBhbmQgbG8sIHRoZSBiZWhhdmlvdXIgaXMKKyAgICAgICAgICAgICAgIGRpZmZlcmVudC4KKworICAgICAgICAgICAgICAgSWYgZ3Jvd3RoIDwgMCBhbmQgbG8gIT0gMCwgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGJ1dCBhCisgICAgICAgICAgICAgICBNZW1vcnlFcnJvciBpcyBzdGlsbCByYWlzZWQgYW5kIHRoZSBtZW1vcnkgYmxvY2sgaXMgbm90CisgICAgICAgICAgICAgICBzaHJpbmtlZC4gT3RoZXJ3aXNlLCB0aGUgYnl0ZWFycmF5IGlzIHJlc3RvcmVkIGluIGl0cyBwcmV2aW91cworICAgICAgICAgICAgICAgc3RhdGUgYW5kIGEgTWVtb3J5RXJyb3IgaXMgcmFpc2VkLiAqLworICAgICAgICAgICAgaWYgKGxvID09IDApIHsKKyAgICAgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCArPSBncm93dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogbWVtbW92ZSgpIHJlbW92ZWQgYnl0ZXMsIHRoZSBieXRlYXJyYXkgb2JqZWN0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzIHN0YXRlLiAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSArPSBncm93dGg7CisgICAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgfQorICAgIGVsc2UgaWYgKGdyb3d0aCA+IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikgPiAoUHlfc3NpemVfdClQWV9TU0laRV9UX01BWCAtIGdyb3d0aCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgICAgIC8qIE1ha2UgdGhlIHBsYWNlIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICAvKgorICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgfCAgIHw8LS0tYnl0ZXNfbGVuLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gYnl0ZXNfbGVuKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNfbGVuID4gMCkKKyAgICAgICAgbWVtY3B5KGJ1ZiArIGxvLCBieXRlcywgYnl0ZXNfbGVuKTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CiBieXRlYXJyYXlfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCiAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWVzKQogewotICAgIFB5X3NzaXplX3QgYXZhaWwsIG5lZWRlZDsKKyAgICBQeV9zc2l6ZV90IG5lZWRlZDsKICAgICB2b2lkICpieXRlczsKICAgICBQeV9idWZmZXIgdmJ5dGVzOwogICAgIGludCByZXMgPSAwOwpAQCAtNDY3LDUwICs1NzIsOSBAQAogICAgIGlmIChoaSA+IFB5X1NJWkUoc2VsZikpCiAgICAgICAgIGhpID0gUHlfU0laRShzZWxmKTsKIAotICAgIGF2YWlsID0gaGkgLSBsbzsKLSAgICBpZiAoYXZhaWwgPCAwKQotICAgICAgICBsbyA9IGhpID0gYXZhaWwgPSAwOwotCi0gICAgaWYgKGF2YWlsICE9IG5lZWRlZCkgewotICAgICAgICBpZiAoYXZhaWwgPiBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byB2ZXJpZnkgdGhpcyBjYW4ndCBvdmVyZmxvdyEgKi8KLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIGF2YWlsKSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXZhaWwgPCBuZWVkZWQpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBsbyAtIG5lZWRlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbG8sIGJ5dGVzLCBuZWVkZWQpOwotCi0KLSBmaW5pc2g6CisgICAgcmVzID0gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBsbywgaGksIGJ5dGVzLCBuZWVkZWQpOwogICAgIGlmICh2Ynl0ZXMubGVuICE9IC0xKQotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC01MzMsNyArNTk3LDcgQEAKICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWUsICZpdmFsKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSBpdmFsOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSA9IGl2YWw7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU0MSw3ICs2MDUsOCBAQAogYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCwgUHlPYmplY3QgKnZhbHVlcykKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmVlZGVkOwotICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgKmJ1ZiwgKmJ5dGVzOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmIChQeUluZGV4X0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaW5kZXgsIFB5RXhjX0luZGV4RXJyb3IpOwpAQCAtNTY4LDcgKzYzMyw3IEBACiAgICAgICAgICAgICBpbnQgaXZhbDsKICAgICAgICAgICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZXMsICZpdmFsKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IChjaGFyKWl2YWw7CisgICAgICAgICAgICBidWZbaV0gPSAoY2hhcilpdmFsOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC02MDYsNyArNjcxLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZXMpKTsKLSAgICAgICAgYnl0ZXMgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopdmFsdWVzKS0+b2JfYnl0ZXM7CisgICAgICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHZhbHVlcyk7CiAgICAgICAgIG5lZWRlZCA9IFB5X1NJWkUodmFsdWVzKTsKICAgICB9CiAgICAgLyogTWFrZSBzdXJlIGJbNToyXSA9IC4uLiBpbnNlcnRzIGJlZm9yZSA1LCBub3QgYmVmb3JlIDIuICovCkBAIC02MTQsMzggKzY3OSw3IEBACiAgICAgICAgIChzdGVwID4gMCAmJiBzdGFydCA+IHN0b3ApKQogICAgICAgICBzdG9wID0gc3RhcnQ7CiAgICAgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICBpZiAoc2xpY2VsZW4gIT0gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBzdGFydCAgICAgICAgICAgc3RvcCAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLXNsaWNlbGVuLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdG9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gc2xpY2VsZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPCBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RhcnQgLSBuZWVkZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCwgYnl0ZXMsIG5lZWRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIHN0YXJ0LCBzdG9wLCBieXRlcywgbmVlZGVkKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChuZWVkZWQgPT0gMCkgewpAQCAtNjcyLDE0ICs3MDYsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAoY3VyICsgc3RlcCA+PSAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKQogICAgICAgICAgICAgICAgICAgICBsaW0gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1ciAtIDE7CiAKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyICsgMSwgbGltKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIGksCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIgKyAxLCBsaW0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogTW92ZSB0aGUgdGFpbCBvZiB0aGUgYnl0ZXMsIGluIG9uZSBjaHVuayAqLwogICAgICAgICAgICAgY3VyID0gc3RhcnQgKyAoc2l6ZV90KXNsaWNlbGVuKnN0ZXA7CiAgICAgICAgICAgICBpZiAoY3VyIDwgKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBzbGljZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyLAorICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gc2xpY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCkBAIC03MDEsNyArNzM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOyBjdXIgKz0gc3RlcCwgaSsrKQotICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2N1cl0gPSBieXRlc1tpXTsKKyAgICAgICAgICAgICAgICBidWZbY3VyXSA9IGJ5dGVzW2ldOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsNyArODE1LDcgQEAKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBjb3VudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbWVtc2V0KHNlbGYtPm9iX2J5dGVzLCAwLCBjb3VudCk7CisgICAgICAgICAgICBtZW1zZXQoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAwLCBjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzk0LDcgKzgyOCw4IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHNpemUgPSB2aWV3LmxlbjsKICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIGdvdG8gZmFpbDsKLSAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhzZWxmLT5vYl9ieXRlcywgJnZpZXcsIHNpemUsICdDJykgPCAwKQorICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgICAgICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtODM4LDcgKzg3Myw3IEBACiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpKys7CiAgICAgICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBQeV9TSVpFKHNlbGYpKzEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKKyAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KQEAgLTg2Miw5ICs4OTcsMTAgQEAKICAgICAvKiAxNSA9PSBzdHJsZW4ocXVvdGVfcHJlZml4KSArIDIgKyBzdHJsZW4ocXVvdGVfcG9zdGZpeCkgKyAxICovCiAgICAgc2l6ZV90IG5ld3NpemU7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICByZWdpc3RlciBjaGFyICpwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBjaGFyICpieXRlczsKKyAgICBjaGFyIGM7CisgICAgY2hhciAqcDsKICAgICBpbnQgcXVvdGU7CiAgICAgY2hhciAqdGVzdCwgKnN0YXJ0OwogICAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTg5OSwxMSArOTM1LDEyIEBACiAgICAgICAgICpwKysgPSAqcXVvdGVfcHJlZml4Kys7CiAgICAgKnArKyA9IHF1b3RlOwogCisgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZQogICAgICAgICAgICBhbmQgYSBjbG9zaW5nIHF1b3RlLiAqLwogICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gYnVmZmVyKSA+PSA1KTsKLSAgICAgICAgYyA9IHNlbGYtPm9iX2J5dGVzW2ldOworICAgICAgICBjID0gYnl0ZXNbaV07CiAgICAgICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnXFwnKQogICAgICAgICAgICAgKnArKyA9ICdcXCcsICpwKysgPSBjOwogICAgICAgICBlbHNlIGlmIChjID09ICdcdCcpCkBAIC0xMDM4LDYgKzEwNzUsNyBAQAogI2RlZmluZSBGQVNUU0VBUkNIIGZhc3RzZWFyY2gKICNkZWZpbmUgU1RSSU5HTElCKEYpIHN0cmluZ2xpYl8jI0YKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgorI2RlZmluZSBTVFJJTkdMSUJfU0laRU9GX0NIQVIgMQogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKQEAgLTEwNDksNiArMTA4Nyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9qb2luLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgpAQCAtMTQyOSw5ICsxNDY4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfdHJhbnNsYXRlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGM7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY29uc3QgY2hhciAqdGFibGU7CisgICAgUHlfc3NpemVfdCBpLCBjOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0OwogICAgIFB5X3NzaXplX3QgaW5sZW47CkBAIC0yMTkyLDcgKzIyMzEsNyBAQAogICAgIFB5X3NzaXplX3QgaSwgaiwgbiA9IFB5X1NJWkUoc2VsZik7CiAKICAgICBqID0gbiAvIDI7Ci0gICAgaGVhZCA9IHNlbGYtPm9iX2J5dGVzOworICAgIGhlYWQgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgdGFpbCA9IGhlYWQgKyBuIC0gMTsKICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CiAgICAgICAgIHN3YXAgPSAqaGVhZDsKQEAgLTIyMTMsNiArMjI1Miw3IEBACiAgICAgUHlPYmplY3QgKnZhbHVlOwogICAgIGludCBpdmFsOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibk86aW5zZXJ0IiwgJndoZXJlLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyMjYsNiArMjI2Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKHdoZXJlIDwgMCkgewogICAgICAgICB3aGVyZSArPSBuOwpAQCAtMjIzNCw4ICsyMjc1LDggQEAKICAgICB9CiAgICAgaWYgKHdoZXJlID4gbikKICAgICAgICAgd2hlcmUgPSBuOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIG4gLSB3aGVyZSk7Ci0gICAgc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID0gaXZhbDsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlICsgMSwgYnVmICsgd2hlcmUsIG4gLSB3aGVyZSk7CisgICAgYnVmW3doZXJlXSA9IGl2YWw7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyNjAsNyArMjMwMSw3IEBACiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPm9iX2J5dGVzW25dID0gdmFsdWU7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gdmFsdWU7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyOTEsNyArMjMzMiw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudC4gMzIgaXMgYXJiaXRyYXJ5LiAqLwotICAgIGJ1Zl9zaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CisgICAgYnVmX3NpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOwogICAgIGlmIChidWZfc2l6ZSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNTMsNiArMjM5NCw3IEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUgPSAtMSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmd2hlcmUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNzEsOCArMjQxMyw5IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHZhbHVlID0gc2VsZi0+b2JfYnl0ZXNbd2hlcmVdOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIHZhbHVlID0gYnVmW3doZXJlXTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjM4OCwxMiArMjQzMSwxMyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGFyZywgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKHdoZXJlID0gMDsgd2hlcmUgPCBuOyB3aGVyZSsrKSB7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPT0gdmFsdWUpCisgICAgICAgIGlmIChidWZbd2hlcmVdID09IHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3aGVyZSA9PSBuKSB7CkBAIC0yNDAzLDcgKzI0NDcsNyBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNDEzLDIxICsyNDU3LDIxIEBACiAvKiBYWFggVGhlc2UgdHdvIGhlbHBlcnMgY291bGQgYmUgb3B0aW1pemVkIGlmIGFyZ3NpemUgPT0gMSAqLwogCiBzdGF0aWMgUHlfc3NpemVfdAotbHN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCitsc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaSsrOwogICAgIHJldHVybiBpOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotcnN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCityc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gbXlzaXplIC0gMTsKLSAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGktLTsKICAgICByZXR1cm4gaSArIDE7CiB9CkBAIC0yNDQyLDcgKzI0ODYsNyBAQAogYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpzdHJpcCIsICZhcmcpKQpAQCAtMjQ1NCwxMCArMjQ5OCwxMCBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChsZWZ0ID09IG15c2l6ZSkKQEAgLTI0NjYsNyArMjUxMCw3IEBACiAgICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIobHN0cmlwX19kb2NfXywKQEAgLTI0NzksNyArMjUyMyw3IEBACiBieXRlYXJyYXlfbHN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpsc3RyaXAiLCAmYXJnKSkKQEAgLTI0OTEsMTYgKzI1MzUsMTYgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICByaWdodCA9IG15c2l6ZTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHJzdHJpcF9fZG9jX18sCkBAIC0yNTEzLDcgKzI1NTcsNyBAQAogYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cnN0cmlwIiwgJmFyZykpCkBAIC0yNTI1LDE1ICsyNTY5LDE1IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzLCByaWdodCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyLCByaWdodCk7CiB9CiAKIFB5RG9jX1NUUlZBUihkZWNvZGVfZG9jLApAQCAtMjU3OCw3MyArMjYyMiw5IEBACiBpbiBiZXR3ZWVuIGVhY2ggcGFpciwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbmV3IGJ5dGVhcnJheS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9qb2luKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXQpCitieXRlYXJyYXlfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIFB5T2JqZWN0ICpzZXE7Ci0gICAgUHlfc3NpemVfdCBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IG47Ci0gICAgUHlPYmplY3QgKippdGVtczsKLSAgICBQeV9zc2l6ZV90IHRvdGFsc2l6ZSA9IDA7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICpkZXN0OwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0LCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOwotICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKHNlcSk7Ci0KLSAgICAvKiBDb21wdXRlIHRoZSB0b3RhbCBzaXplLCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBhbGwgYnl0ZXMgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFQeUJ5dGVBcnJheV9DaGVjayhvYmopICYmICFQeUJ5dGVzX0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUgb2YgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICIoaXRlbSAlbGQgaGFzIHR5cGUgJyUuMTAwcycpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggJWxkIGlzbid0IHJpZ2h0IG9uIFdpbjY0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpaSwgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgdG90YWxzaXplICs9IG15c2l6ZTsKLSAgICAgICAgdG90YWxzaXplICs9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgaWYgKHRvdGFsc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgdGhlIHJlc3VsdCwgYW5kIGNvcHkgdGhlIGJ5dGVzICovCi0gICAgcmVzdWx0ID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdG90YWxzaXplKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGVzdCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXN1bHQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG9iaikpCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc2VsZi0+b2JfYnl0ZXMsIG15c2l6ZSk7Ci0gICAgICAgICAgICBkZXN0ICs9IG15c2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoZGVzdCwgYnVmLCBzaXplKTsKLSAgICAgICAgZGVzdCArPSBzaXplOwotICAgIH0KLQotICAgIC8qIERvbmUgKi8KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLyogRXJyb3IgaGFuZGxpbmcgKi8KLSAgZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLApAQCAtMjc0OCw2ICsyNzI4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CisgICAgY2hhciAqYnVmOwogCiAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfX19kaWN0X18pOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKQEAgLTI3NTYsMTkgKzI3MzcsMjAgQEAKICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwogICAgIH0KIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAocHJvdG8gPCAzKSB7CiAgICAgICAgIC8qIHVzZSBzdHIgYmFzZWQgcmVkdWN0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLnggKi8KICAgICAgICAgUHlPYmplY3QgKmxhdGluMTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKQotICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgTlVMTCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKQorICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShidWYsIFB5X1NJWkUoc2VsZiksIE5VTEwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyhOcylOKSIsIFB5X1RZUEUoc2VsZiksIGxhdGluMSwgImxhdGluLTEiLCBkaWN0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIHVzZSBtb3JlIGVmZmljaWVudCBieXRlIGJhc2VkIHJlZHVjdGlvbiAqLwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpIHsKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpIHsKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIGJ1ZiwgUHlfU0laRShzZWxmKSwgZGljdCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oKU4pIiwgUHlfVFlQRShzZWxmKSwgZGljdCk7CkBAIC0yODQ5LDcgKzI4MzEsNyBAQAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX2RvY30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCkBAIC0zMDAwLDcgKzI5ODIsNyBAQAogCiAgICAgaWYgKGl0LT5pdF9pbmRleCA8IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlcSkpIHsKICAgICAgICAgaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZygKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNlcS0+b2JfYnl0ZXNbaXQtPml0X2luZGV4XSk7CisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VxKVtpdC0+aXRfaW5kZXhdKTsKICAgICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkKICAgICAgICAgICAgICsraXQtPml0X2luZGV4OwogICAgICAgICByZXR1cm4gaXRlbTsKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKaW5kZXggZWYzYzJmNy4uNGU4MTA3YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKKysrIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKQEAgLTEwLDkgKzEwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzc3BhY2UoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNTUEFDRSgqcCkpCkBAIC00MCw5ICs0MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FscGhhKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxQSEEoKnApKQpAQCAtNzAsOSArNzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbG51bShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMTlVNKCpwKSkKQEAgLTEwMCw5ICsxMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNkaWdpdChjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0RJR0lUKCpwKSkKQEAgLTEzMCw5ICsxMzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNsb3dlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTE2NCw5ICsxNjQsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN1cHBlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIwMCw5ICsyMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN0aXRsZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZCwgcHJldmlvdXNfaXNfY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICBjYXNlZCA9IDA7CiAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAwOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOwogCiAgICAgICAgIGlmIChQeV9JU1VQUEVSKGNoKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc29iamVjdC5jIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCmluZGV4IDQ3ODk4ZmUuLjgyMTdiMWUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKQEAgLTEwLDkgKzEwLDE4IEBACiBzdGF0aWMgUHlfc3NpemVfdAogX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCiB7Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVycHJvY3M7CisgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIEZhc3QgcGF0aCwgZS5nLiBmb3IgLmpvaW4oKSBvZiBtYW55IGJ5dGVzIG9iamVjdHMgKi8KKyAgICAgICAgUHlfSU5DUkVGKG9iaik7CisgICAgICAgIHZpZXctPm9iaiA9IG9iajsKKyAgICAgICAgdmlldy0+YnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqKTsKKyAgICAgICAgdmlldy0+bGVuID0gUHlCeXRlc19HRVRfU0laRShvYmopOworICAgICAgICByZXR1cm4gdmlldy0+bGVuOworICAgIH0KIAotICAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBidWZmZXItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQorICAgIGJ1ZmZlcnByb2NzID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgaWYgKGJ1ZmZlcnByb2NzID09IE5VTEwgfHwgYnVmZmVycHJvY3MtPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQogICAgIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkiLApAQCAtMjAsNyArMjksNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGJ1ZmZlci0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCisgICAgaWYgKGJ1ZmZlcnByb2NzLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiB2aWV3LT5sZW47CiB9CkBAIC02NSw3ICs3NCw3IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSBwYXNzZWQgdG8gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSIpOwpAQCAtMTE3LDggKzEyNiw4IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIHNpemVfdCBzaXplOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogCiAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKICAgICBzaXplID0gc3RybGVuKHN0cik7CkBAIC01MDQsNyArNTEzLDcgQEAKIC8qIG9iamVjdCBhcGkgKi8KIAogUHlfc3NpemVfdAotUHlCeXRlc19TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTE1LDcgKzUyNCw3IEBACiB9CiAKIGNoYXIgKgotUHlCeXRlc19Bc1N0cmluZyhyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUJ5dGVzX0FzU3RyaW5nKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MjYsOSArNTM1LDkgQEAKIH0KIAogaW50Ci1QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgKipzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbikKK1B5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKFB5T2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqbGVuKQogewogICAgIGlmIChzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC01NjAsNiArNTY5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC01NjksNyArNTc5LDcgQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfUmVwcihQeU9iamVjdCAqb2JqLCBpbnQgc21hcnRxdW90ZXMpCiB7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCogb3AgPSAoUHlCeXRlc09iamVjdCopIG9iajsKKyAgICBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOwogICAgIFB5X3NzaXplX3QgaSwgbGVuZ3RoID0gUHlfU0laRShvcCk7CiAgICAgc2l6ZV90IG5ld3NpemUsIHNxdW90ZXMsIGRxdW90ZXM7CiAgICAgUHlPYmplY3QgKnY7CkBAIC03MDgsMTIgKzcxOCwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwZWF0KHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgbikKK2J5dGVzX3JlcGVhdChQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgajsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAgICAgc2l6ZV90IG5ieXRlczsKICAgICBpZiAobiA8IDApCiAgICAgICAgIG4gPSAwOwpAQCAtNzgzLDcgKzc5Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19pdGVtKFB5Qnl0ZXNPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK2J5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgUHlfc3NpemVfdCBpKQogewogICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoYSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTc5Miw2ICs4MDIsMjMgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKWEtPm9iX3N2YWxbaV0pOwogfQogCitQeV9MT0NBTChpbnQpCitieXRlc19jb21wYXJlX2VxKFB5Qnl0ZXNPYmplY3QgKmEsIFB5Qnl0ZXNPYmplY3QgKmIpCit7CisgICAgaW50IGNtcDsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKworICAgIGxlbiA9IFB5X1NJWkUoYSk7CisgICAgaWYgKFB5X1NJWkUoYikgIT0gbGVuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChhLT5vYl9zdmFsWzBdICE9IGItPm9iX3N2YWxbMF0pCisgICAgICAgIHJldHVybiAwOworCisgICAgY21wID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIGxlbik7CisgICAgcmV0dXJuIChjbXAgPT0gMCk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKIGJ5dGVzX3JpY2hjb21wYXJlKFB5Qnl0ZXNPYmplY3QgKmEsIFB5Qnl0ZXNPYmplY3QgKmIsIGludCBvcCkKIHsKQEAgLTgxMiw1MyArODM5LDU1IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgICAgIGdvdG8gb3V0OwogICAgIH0KLSAgICBpZiAoYSA9PSBiKSB7CisgICAgZWxzZSBpZiAoYSA9PSBiKSB7CiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBQeV9FUTpjYXNlIFB5X0xFOmNhc2UgUHlfR0U6CisgICAgICAgIGNhc2UgUHlfRVE6CisgICAgICAgIGNhc2UgUHlfTEU6CisgICAgICAgIGNhc2UgUHlfR0U6CisgICAgICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgY2FzZSBQeV9ORTpjYXNlIFB5X0xUOmNhc2UgUHlfR1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeV9ORToKKyAgICAgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgY2FzZSBQeV9HVDoKICAgICAgICAgICAgIHJlc3VsdCA9IFB5X0ZhbHNlOwotICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAob3AgPT0gUHlfRVEpIHsKLSAgICAgICAgLyogU3VwcG9ydGluZyBQeV9ORSBoZXJlIGFzIHdlbGwgZG9lcyBub3Qgc2F2ZQotICAgICAgICAgICBtdWNoIHRpbWUsIHNpbmNlIFB5X05FIGlzIHJhcmVseSB1c2VkLiAgKi8KLSAgICAgICAgaWYgKFB5X1NJWkUoYSkgPT0gUHlfU0laRShiKQotICAgICAgICAgICAgJiYgKGEtPm9iX3N2YWxbMF0gPT0gYi0+b2Jfc3ZhbFswXQotICAgICAgICAgICAgJiYgbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIFB5X1NJWkUoYSkpID09IDApKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9UcnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlfRmFsc2U7CisgICAgZWxzZSBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgaW50IGVxID0gYnl0ZXNfY29tcGFyZV9lcShhLCBiKTsKKyAgICAgICAgZXEgXj0gKG9wID09IFB5X05FKTsKKyAgICAgICAgcmVzdWx0ID0gZXEgPyBQeV9UcnVlIDogUHlfRmFsc2U7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsZW5fYSA9IFB5X1NJWkUoYSk7CisgICAgICAgIGxlbl9iID0gUHlfU0laRShiKTsKKyAgICAgICAgbWluX2xlbiA9IFB5X01JTihsZW5fYSwgbGVuX2IpOworICAgICAgICBpZiAobWluX2xlbiA+IDApIHsKKyAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqYS0+b2Jfc3ZhbCkgLSBQeV9DSEFSTUFTSygqYi0+b2Jfc3ZhbCk7CisgICAgICAgICAgICBpZiAoYyA9PSAwKQorICAgICAgICAgICAgICAgIGMgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbWluX2xlbik7CiAgICAgICAgIH0KLSAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSAwOworICAgICAgICBpZiAoYyA9PSAwKQorICAgICAgICAgICAgYyA9IChsZW5fYSA8IGxlbl9iKSA/IC0xIDogKGxlbl9hID4gbGVuX2IpID8gMSA6IDA7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBQeV9MVDogYyA9IGMgPCAgMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTEU6IGMgPSBjIDw9IDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0dUOiBjID0gYyA+ICAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9HRTogYyA9IGMgPj0gMDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gYyA/IFB5X1RydWUgOiBQeV9GYWxzZTsKICAgICB9Ci0gICAgbGVuX2EgPSBQeV9TSVpFKGEpOyBsZW5fYiA9IFB5X1NJWkUoYik7Ci0gICAgbWluX2xlbiA9IChsZW5fYSA8IGxlbl9iKSA/IGxlbl9hIDogbGVuX2I7Ci0gICAgaWYgKG1pbl9sZW4gPiAwKSB7Ci0gICAgICAgIGMgPSBQeV9DSEFSTUFTSygqYS0+b2Jfc3ZhbCkgLSBQeV9DSEFSTUFTSygqYi0+b2Jfc3ZhbCk7Ci0gICAgICAgIGlmIChjPT0wKQotICAgICAgICAgICAgYyA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBtaW5fbGVuKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYyA9IDA7Ci0gICAgaWYgKGMgPT0gMCkKLSAgICAgICAgYyA9IChsZW5fYSA8IGxlbl9iKSA/IC0xIDogKGxlbl9hID4gbGVuX2IpID8gMSA6IDA7Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgUHlfTFQ6IGMgPSBjIDwgIDA7IGJyZWFrOwotICAgIGNhc2UgUHlfTEU6IGMgPSBjIDw9IDA7IGJyZWFrOwotICAgIGNhc2UgUHlfRVE6IGFzc2VydCgwKTsgIGJyZWFrOyAvKiB1bnJlYWNoYWJsZSAqLwotICAgIGNhc2UgUHlfTkU6IGMgPSBjICE9IDA7IGJyZWFrOwotICAgIGNhc2UgUHlfR1Q6IGMgPSBjID4gIDA7IGJyZWFrOwotICAgIGNhc2UgUHlfR0U6IGMgPSBjID49IDA7IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYyA/IFB5X1RydWUgOiBQeV9GYWxzZTsKLSAgb3V0OgorCiAgICAgUHlfSU5DUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg2OCw3ICs4OTcsNyBAQAogewogICAgIGlmIChhLT5vYl9zaGFzaCA9PSAtMSkgewogICAgICAgICAvKiBDYW4ndCBmYWlsICovCi0gICAgICAgIGEtPm9iX3NoYXNoID0gX1B5X0hhc2hCeXRlcygodW5zaWduZWQgY2hhciAqKSBhLT5vYl9zdmFsLCBQeV9TSVpFKGEpKTsKKyAgICAgICAgYS0+b2Jfc2hhc2ggPSBfUHlfSGFzaEJ5dGVzKGEtPm9iX3N2YWwsIFB5X1NJWkUoYSkpOwogICAgIH0KICAgICByZXR1cm4gYS0+b2Jfc2hhc2g7CiB9CkBAIC0xMTEyLDk0ICsxMTQxLDkgQEAKIEV4YW1wbGU6IGInLicuam9pbihbYidhYicsIGIncHEnLCBiJ3JzJ10pIC0+IGInYWIucHEucnMnLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9yaWcpCitieXRlc19qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgY2hhciAqc2VwID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7Ci0gICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIGNoYXIgKnA7Ci0gICAgUHlfc3NpemVfdCBzZXFsZW4gPSAwOwotICAgIHNpemVfdCBzeiA9IDA7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzZXEsICppdGVtOwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KG9yaWcsICIiKTsKLSAgICBpZiAoc2VxID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7Ci0gICAgaWYgKHNlcWxlbiA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCIiKTsKLSAgICB9Ci0gICAgaWYgKHNlcWxlbiA9PSAxKSB7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCAwKTsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChpdGVtKSkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gaXRlbTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gdGhpbmdzIHRvIGpvaW4sIG9yIGVsc2Ugd2UgaGF2ZSBhIHN1YmNsYXNzCi0gICAgICogb2YgdGhlIGJ1aWx0aW4gdHlwZXMgaW4gdGhlIHNlcXVlbmNlLgotICAgICAqIERvIGEgcHJlLXBhc3MgdG8gZmlndXJlIG91dCB0aGUgdG90YWwgYW1vdW50IG9mIHNwYWNlIHdlJ2xsCi0gICAgICogbmVlZCAoc3opLCBhbmQgc2VlIHdoZXRoZXIgYWxsIGFyZ3VtZW50IGFyZSBieXRlcy4KLSAgICAgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG9sZF9zeiA9IHN6OwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7Ci0gICAgICAgIGlmICghUHlCeXRlc19DaGVjayhpdGVtKSAmJiAhUHlCeXRlQXJyYXlfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNlcXVlbmNlIGl0ZW0gJXpkOiBleHBlY3RlZCBieXRlcywiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiAlLjgwcyBmb3VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaSwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHN6ICs9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgICBzeiArPSBzZXBsZW47Ci0gICAgICAgIGlmIChzeiA8IG9sZF9zeiB8fCBzeiA+IFBZX1NTSVpFX1RfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYnl0ZXMiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSByZXN1bHQgc3BhY2UuICovCi0gICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciopTlVMTCwgc3opOwotICAgIGlmIChyZXMgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogQ2F0ZW5hdGUgZXZlcnl0aGluZy4gKi8KLSAgICAvKiBJJ20gbm90IHdvcnJpZWQgYWJvdXQgYSBQeUJ5dGVBcnJheSBpdGVtIGdyb3dpbmcgYmVjYXVzZSB0aGVyZSdzCi0gICAgICAgbm93aGVyZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHdlIHJlbGVhc2UgdGhlIEdJTC4gKi8KLSAgICBwID0gUHlCeXRlc19BU19TVFJJTkcocmVzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBQeV9NRU1DUFkocCwgc2VwLCBzZXBsZW4pOwotICAgICAgICAgICAgcCArPSBzZXBsZW47Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBuID0gUHlfU0laRShpdGVtKTsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soaXRlbSkpCi0gICAgICAgICAgICBxID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHEgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKLSAgICAgICAgcCArPSBuOwotICAgIH0KLQotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlPYmplY3QgKgpAQCAtMTQyMiw3ICsxMzY2LDcgQEAKIHsKICAgICBQeU9iamVjdCAqc2VwID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAoY2hhciAqKXN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc2VwICE9IE5VTEwgJiYgc2VwICE9IFB5X05vbmUpIHsKQEAgLTE1MzYsOSArMTQ4MCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfdHJhbnNsYXRlKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIGNoYXIgKmlucHV0LCAqb3V0cHV0OworICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OwogICAgIGNvbnN0IGNoYXIgKnRhYmxlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBjLCBjaGFuZ2VkID0gMDsKICAgICBQeU9iamVjdCAqaW5wdXRfb2JqID0gKFB5T2JqZWN0KilzZWxmOwogICAgIGNvbnN0IGNoYXIgKm91dHB1dF9zdGFydCwgKmRlbF90YWJsZT1OVUxMOwogICAgIFB5X3NzaXplX3QgaW5sZW4sIHRhYmxlbiwgZGVsbGVuID0gMDsKQEAgLTIzMTYsOCArMjI2MCw2IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkKLSAgICAgICAgZW5jb2RpbmcgPSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nKCk7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKIH0KIApAQCAtMjQ0Nyw3ICsyMzg5LDcgQEAKICAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlc19kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9fZG9jX199LAogICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywKICAgICAgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCiAgICAgeyJmcm9taGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2Zyb21oZXgsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLApAQCAtMjY3OSw3ICsyNjIxLDcgQEAKICAgICB9CiAKICAgICAvKiBGb3IgaXRlcmF0b3IgdmVyc2lvbiwgY3JlYXRlIGEgc3RyaW5nIG9iamVjdCBhbmQgcmVzaXplIGFzIG5lZWRlZCAqLwotICAgIHNpemUgPSBfUHlPYmplY3RfTGVuZ3RoSGludCh4LCA2NCk7CisgICAgc2l6ZSA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOwogICAgIGlmIChzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUgdG8gcHJldmVudCBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCkgZnJvbQpAQCAtMjczNyw5ICsyNjc5LDggQEAKICAgICByZXR1cm4gbmV3OwogCiAgIGVycm9yOgotICAgIC8qIEVycm9yIGhhbmRsaW5nIHdoZW4gbmV3ICE9IE5VTEwgKi8KICAgICBQeV9YREVDUkVGKGl0KTsKLSAgICBQeV9ERUNSRUYobmV3KTsKKyAgICBQeV9YREVDUkVGKG5ldyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI4MjUsOSArMjc2Niw5IEBACiB9OwogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0KFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGFzc2VydChwdiAhPSBOVUxMKTsKICAgICBpZiAoKnB2ID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NDEsNyArMjc4Miw3IEBACiB9CiAKIHZvaWQKLVB5Qnl0ZXNfQ29uY2F0QW5kRGVsKHJlZ2lzdGVyIFB5T2JqZWN0ICoqcHYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorUHlCeXRlc19Db25jYXRBbmREZWwoUHlPYmplY3QgKipwdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlCeXRlc19Db25jYXQocHYsIHcpOwogICAgIFB5X1hERUNSRUYodyk7CkBAIC0yODY1LDggKzI4MDYsOCBAQAogaW50CiBfUHlCeXRlc19SZXNpemUoUHlPYmplY3QgKipwdiwgUHlfc3NpemVfdCBuZXdzaXplKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKnN2OworICAgIFB5T2JqZWN0ICp2OworICAgIFB5Qnl0ZXNPYmplY3QgKnN2OwogICAgIHYgPSAqcHY7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKHYpIHx8IFB5X1JFRkNOVCh2KSAhPSAxIHx8IG5ld3NpemUgPCAwKSB7CiAgICAgICAgICpwdiA9IDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKaW5kZXggY2RjOWIxYy4uMjcyZjU3NSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jbGFzc29iamVjdC5jCisrKyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwpAQCAtNDQsNyArNDQsNyBAQAogUHlPYmplY3QgKgogUHlNZXRob2RfTmV3KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqc2VsZikKIHsKLSAgICByZWdpc3RlciBQeU1ldGhvZE9iamVjdCAqaW07CisgICAgUHlNZXRob2RPYmplY3QgKmltOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjksNiArNjksMzAgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaW07CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittZXRob2RfcmVkdWNlKFB5TWV0aG9kT2JqZWN0ICppbSkKK3sKKyAgICBQeU9iamVjdCAqc2VsZiA9IFB5TWV0aG9kX0dFVF9TRUxGKGltKTsKKyAgICBQeU9iamVjdCAqZnVuYyA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihpbSk7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIFB5T2JqZWN0ICpmdW5jbmFtZTsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGZ1bmNuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChmdW5jLCAmUHlJZF9fX25hbWVfXyk7CisgICAgaWYgKGZ1bmNuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTikiLCBnZXRhdHRyLCBzZWxmLCBmdW5jbmFtZSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtZXRob2RfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiltZXRob2RfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiAvKiBEZXNjcmlwdG9ycyBmb3IgUHlNZXRob2QgYXR0cmlidXRlcyAqLwogCiAvKiBpbV9mdW5jIGFuZCBpbV9zZWxmIGFyZSBzdG9yZWQgaW4gdGhlIFB5TWV0aG9kIG9iamVjdCAqLwpAQCAtMTY0LDcgKzE4OCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tZXRob2RfZGVhbGxvYyhyZWdpc3RlciBQeU1ldGhvZE9iamVjdCAqaW0pCittZXRob2RfZGVhbGxvYyhQeU1ldGhvZE9iamVjdCAqaW0pCiB7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soaW0pOwogICAgIGlmIChpbS0+aW1fd2Vha3JlZmxpc3QgIT0gTlVMTCkKQEAgLTM2Nyw3ICszOTEsNyBAQAogICAgIG9mZnNldG9mKFB5TWV0aG9kT2JqZWN0LCBpbV93ZWFrcmVmbGlzdCksIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG1ldGhvZF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIG1ldGhvZF9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1ldGhvZF9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC01MDksNyArNTMzLDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbmNlbWV0aG9kX2Rlc2NyX2dldChQeU9iamVjdCAqZGVzY3IsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKSB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CiAgICAgaWYgKG9iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICAgICAgcmV0dXJuIGZ1bmM7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvZGVvYmplY3QuYyBiL09iamVjdHMvY29kZW9iamVjdC5jCmluZGV4IDk3MTNmNjEuLjM1M2Y0MTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvY29kZW9iamVjdC5jCkBAIC03NCw2ICs3NCwxMSBAQAogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgLyogRW5zdXJlIHRoYXQgdGhlIGZpbGVuYW1lIGlzIGEgcmVhZHkgVW5pY29kZSBzdHJpbmcgKi8KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGZpbGVuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbl9jZWxsdmFycyA9IFB5VHVwbGVfR0VUX1NJWkUoY2VsbHZhcnMpOwogICAgIGludGVybl9zdHJpbmdzKG5hbWVzKTsKICAgICBpbnRlcm5fc3RyaW5ncyh2YXJuYW1lcyk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCmluZGV4IGIwOGFhNmYuLjYwYTM4OGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29tcGxleG9iamVjdC5jCisrKyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIFB5T2JqZWN0ICoKIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoUHlfY29tcGxleCBjdmFsKQogewotICAgIHJlZ2lzdGVyIFB5Q29tcGxleE9iamVjdCAqb3A7CisgICAgUHlDb21wbGV4T2JqZWN0ICpvcDsKIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KICAgICBvcCA9IChQeUNvbXBsZXhPYmplY3QgKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZihQeUNvbXBsZXhPYmplY3QpKTsKQEAgLTI3MSw2ICsyNzEsMTIgQEAKICAgICBpZiAoZikgewogICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICBpZiAocmVzICE9IE5VTEwgJiYgIVB5Q29tcGxleF9DaGVjayhyZXMpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yOTYsMTIgKzMwMiw2IEBACiAgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKLSAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7Ci0gICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KICAgICAgICAgY3YgPSAoKFB5Q29tcGxleE9iamVjdCAqKW5ld29wKS0+Y3ZhbDsKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwpAQCAtNzA1LDcgKzcwNSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTc3Myw4ICs3NzMsOSBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHYsICZzLCAmbGVuKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05NTMsOCArOTU0LDkgQEAKICAgICAgICAgbmJpID0gaS0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgIGlmIChuYnIgPT0gTlVMTCB8fCBuYnItPm5iX2Zsb2F0ID09IE5VTEwgfHwKICAgICAgICAgKChpICE9IE5VTEwpICYmIChuYmkgPT0gTlVMTCB8fCBuYmktPm5iX2Zsb2F0ID09IE5VTEwpKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRShyKS0+dHBfbmFtZSk7CiAgICAgICAgIGlmIChvd25fcikgewogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKaW5kZXggYmE5OGEzMC4uMzEyZmM0MCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jCisrKyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAoKFB5VHlwZU9iamVjdCAqKXR5cGUpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCB0eXBlKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCB0eXBlLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAgICAgaWYgKGRlc2NyX2NoZWNrKChQeURlc2NyT2JqZWN0ICopZGVzY3IsIG9iaiwgJnJlcykpCiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIG9iaik7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgb2JqLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHNlbGYpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHNlbGYsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGFyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIGFyZ2MpOwpAQCAtMzk4LDYgKzM5OCwyNCBAQAogICAgIHJldHVybiBkZXNjci0+ZF9xdWFsbmFtZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Rlc2NyX3JlZHVjZShQeURlc2NyT2JqZWN0ICpkZXNjcikKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgUHlEZXNjcl9UWVBFKGRlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX05BTUUoZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGRlc2NyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVzY3JfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgZGVzY3JfbWVtYmVyc1tdID0gewogICAgIHsiX19vYmpjbGFzc19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfdHlwZSksIFJFQURPTkxZfSwKICAgICB7Il9fbmFtZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfbmFtZSksIFJFQURPTkxZfSwKQEAgLTQ5NCw3ICs1MTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTUzMiw3ICs1NTAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTU2OSw3ICs1ODcsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWVtYmVyX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTY0Myw3ICs2NjEsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgd3JhcHBlcmRlc2NyX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTEwMDksNyArMTAyNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogd3JhcHBlcl9yaWNoY29tcGFyZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvcCkKIHsKLSAgICBpbnQgcmVzdWx0OworICAgIFB5X2ludHB0cl90IHJlc3VsdDsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeVdyYXBwZXJEZXNjck9iamVjdCAqYV9kZXNjciwgKmJfZGVzY3I7CiAKQEAgLTEwODUsNiArMTEwMywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwLT5zZWxmKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJfcmVkdWNlKHdyYXBwZXJvYmplY3QgKndwKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTykiLCBnZXRhdHRyLCB3cC0+c2VsZiwgUHlEZXNjcl9OQU1FKHdwLT5kZXNjcikpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgd3JhcHBlcl9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXdyYXBwZXJfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgd3JhcHBlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJfX3NlbGZfXyIsIFRfT0JKRUNULCBvZmZzZXRvZih3cmFwcGVyb2JqZWN0LCBzZWxmKSwgUkVBRE9OTFl9LAogICAgIHswfQpAQCAtMTE5Myw3ICsxMjI4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIHdyYXBwZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIHdyYXBwZXJfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIHdyYXBwZXJfZ2V0c2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDdhYTVlYTguLmJmYzczMGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC02OSw2ICs2OSwxMSBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCisvKltjbGluaWNdCitjbGFzcyBkaWN0CitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgbWVfa2V5LiAqLwogICAgIFB5X2hhc2hfdCBtZV9oYXNoOwpAQCAtOTUsMjAgKzEwMCw2IEBACiBpdCdzIFVTQUJMRV9GUkFDVElPTiAoY3VycmVudGx5IHR3by10aGlyZHMpIGZ1bGwuCiAqLwogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KLQogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIAogLyoKQEAgLTMwNSw5ICsyOTYsOSBAQAogICogI2RlZmluZSBVU0FCTEVfRlJBQ1RJT04obikgKCgobikgPj4gMSkgKyAoKG4pID4+IDIpIC0gKChuKSA+PiAzKSkKICovCiAKLS8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLiAKLSAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4gCi0gKiBUaGlzIG1lYW5zIHRoYXQgZGljdHMgZG91YmxlIGluIHNpemUgd2hlbiBncm93aW5nIHdpdGhvdXQgZGVsZXRpb25zLCAKKy8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLgorICogQ3VycmVudGx5IHNldCB0byB1c2VkKjIgKyBjYXBhY2l0eS8yLgorICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywKICAqIGJ1dCBoYXZlIG1vcmUgaGVhZCByb29tIHdoZW4gdGhlIG51bWJlciBvZiBkZWxldGlvbnMgaXMgb24gYSBwYXIgd2l0aCB0aGUKICAqIG51bWJlciBvZiBpbnNlcnRpb25zLgogICogUmFpc2luZyB0aGlzIHRvIHVzZWQqNCBkb3VibGVzIG1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YKQEAgLTM4OSw2ICszODAsNyBAQAogbmV3X2RpY3QoUHlEaWN0S2V5c09iamVjdCAqa2V5cywgUHlPYmplY3QgKip2YWx1ZXMpCiB7CiAgICAgUHlEaWN0T2JqZWN0ICptcDsKKyAgICBhc3NlcnQoa2V5cyAhPSBOVUxMKTsKICAgICBpZiAobnVtZnJlZSkgewogICAgICAgICBtcCA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwogICAgICAgICBhc3NlcnQgKG1wICE9IE5VTEwpOwpAQCAtNDMxLDcgKzQyMywxMCBAQAogUHlPYmplY3QgKgogUHlEaWN0X05ldyh2b2lkKQogewotICAgIHJldHVybiBuZXdfZGljdChuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpLCBOVUxMKTsKKyAgICBQeURpY3RLZXlzT2JqZWN0ICprZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoa2V5cyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbmV3X2RpY3Qoa2V5cywgTlVMTCk7CiB9CiAKIC8qCkBAIC00NjMsMTMgKzQ1OCwxMyBAQAogbG9va2RpY3QoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzazsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2s7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7Ci0gICAgcmVnaXN0ZXIgaW50IGNtcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgaW50IGNtcDsKICAgICBQeU9iamVjdCAqc3RhcnRrZXk7CiAKIHRvcDoKQEAgLTU1NSwxMiArNTUwLDEyIEBACiBsb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTYyMCwxMSArNjE1LDExIEBACiBsb29rZGljdF91bmljb2RlX25vZHVtbXkoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtNjY1LDExICs2NjAsMTEgQEAKIGxvb2tkaWN0X3NwbGl0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpKSB7CiAgICAgICAgIGVwID0gbG9va2RpY3QobXAsIGtleSwgaGFzaCwgdmFsdWVfYWRkcik7CkBAIC0xMjM3LDcgKzEyMzIsNyBAQAogICAgIGlmIChlcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCp2YWx1ZV9hZGRyID09IE5VTEwpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKQEAgLTEzOTEsNyArMTM4Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmIChrZXlzICE9IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KGtleXMtPmRrX3JlZmNudCA9PSAxKTsKICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KQEAgLTE0MDcsOSArMTQwMiw5IEBACiBkaWN0X3JlcHIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnMsICp0ZW1wLCAqY29sb24gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpwaWVjZXMgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CisgICAgaW50IGZpcnN0OwogCiAgICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKiltcCk7CiAgICAgaWYgKGkgIT0gMCkgewpAQCAtMTQxNyw3MSArMTQxMiw3MyBAQAogICAgIH0KIAogICAgIGlmIChtcC0+bWFfdXNlZCA9PSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7fSIpOwotICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKICAgICB9CiAKLSAgICBwaWVjZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChwaWVjZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICAvKiAieyIgKyAiMTogMiIgKyAiLCAzOiA0IiAqIChsZW4gLSAxKSArICJ9IiAqLworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDQgKyAoMiArIDQpICogKG1wLT5tYV91c2VkIC0gMSkgKyAxOwogCi0gICAgY29sb24gPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiOiAiKTsKLSAgICBpZiAoY29sb24gPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAneycpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGtleSt2YWx1ZSBwYWlyLCBhbmQgaW5zZXJ0ICI6ICIgYmV0d2VlbiB0aGVtLgogICAgICAgIE5vdGUgdGhhdCByZXByIG1heSBtdXRhdGUgdGhlIGRpY3QuICovCiAgICAgaSA9IDA7CisgICAgZmlyc3QgPSAxOwogICAgIHdoaWxlIChQeURpY3RfTmV4dCgoUHlPYmplY3QgKiltcCwgJmksICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgUHlPYmplY3QgKnM7CisgICAgICAgIGludCByZXM7CisKICAgICAgICAgLyogUHJldmVudCByZXByIGZyb20gZGVsZXRpbmcga2V5IG9yIHZhbHVlIGR1cmluZyBrZXkgZm9ybWF0LiAqLwogICAgICAgICBQeV9JTkNSRUYoa2V5KTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKworICAgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGZpcnN0ID0gMDsKKwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcihrZXkpOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZzLCBjb2xvbik7Ci0gICAgICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnMsIFB5T2JqZWN0X1JlcHIodmFsdWUpKTsKLSAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHN0YXR1cyA9IFB5TGlzdF9BcHBlbmQocGllY2VzLCBzKTsKLSAgICAgICAgUHlfREVDUkVGKHMpOyAgLyogYXBwZW5kIGNyZWF0ZWQgYSBuZXcgcmVmICovCi0gICAgICAgIGlmIChzdGF0dXMgPCAwKQotICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKTsKKyAgICAgICAgUHlfREVDUkVGKHMpOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiOiAiLCAyKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHZhbHVlKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIFB5X0NMRUFSKGtleSk7CisgICAgICAgIFB5X0NMRUFSKHZhbHVlKTsKICAgICB9CiAKLSAgICAvKiBBZGQgInt9IiBkZWNvcmF0aW9ucyB0byB0aGUgZmlyc3QgYW5kIGxhc3QgaXRlbXMuICovCi0gICAgYXNzZXJ0KFB5TGlzdF9HRVRfU0laRShwaWVjZXMpID4gMCk7Ci0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCAwKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCB0ZW1wKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCAwLCBzKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICd9JykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ9Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEpOwotICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnRlbXAsIHMpOwotICAgIFB5TGlzdF9TRVRfSVRFTShwaWVjZXMsIFB5TGlzdF9HRVRfU0laRShwaWVjZXMpIC0gMSwgdGVtcCk7Ci0gICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotCi0gICAgLyogUGFzdGUgdGhlbSBhbGwgdG9nZXRoZXIgd2l0aCAiLCAiIGJldHdlZW4uICovCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfSm9pbihzLCBwaWVjZXMpOwotICAgIFB5X0RFQ1JFRihzKTsKLQotRG9uZToKLSAgICBQeV9YREVDUkVGKHBpZWNlcyk7Ci0gICAgUHlfWERFQ1JFRihjb2xvbik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKLSAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCitlcnJvcjoKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRih2YWx1ZSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0xNDkxLDcgKzE0ODgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9zdWJzY3JpcHQoUHlEaWN0T2JqZWN0ICptcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlfaGFzaF90IGhhc2g7CkBAIC0xNTIzLDcgKzE1MjAsNyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZQpAQCAtMTU0NywxMCArMTU0NCwxMCBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfa2V5cyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9rZXlzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CkBAIC0xNTkxLDEwICsxNTg4LDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3ZhbHVlcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF92YWx1ZXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCkBAIC0xNjMzLDEwICsxNjMwLDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2l0ZW1zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2l0ZW1zKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBuOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgaiwgbjsKICAgICBQeV9zc2l6ZV90IHNpemUsIG9mZnNldDsKICAgICBQeU9iamVjdCAqaXRlbSwgKmtleTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CkBAIC0xOTA4LDggKzE5MDUsOCBAQAogaW50CiBQeURpY3RfTWVyZ2UoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ZlcnJpZGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeURpY3RPYmplY3QgKm1wLCAqb3RoZXI7CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIFB5RGljdEtleUVudHJ5ICplbnRyeTsKIAogICAgIC8qIFdlIGFjY2VwdCBmb3IgdGhlIGFyZ3VtZW50IGVpdGhlciBhIGNvbmNyZXRlIGRpY3Rpb25hcnkgb2JqZWN0LApAQCAtMjAwNiw3ICsyMDAzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY29weShyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9jb3B5KFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgcmV0dXJuIFB5RGljdF9Db3B5KChQeU9iamVjdCopbXApOwogfQpAQCAtMjExOCwxMyArMjExNSwxOCBAQAogICAgICAgICBpZiAoYXZhbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpbnQgY21wOwogICAgICAgICAgICAgUHlPYmplY3QgKmJ2YWw7CisgICAgICAgICAgICBQeU9iamVjdCAqKnZhZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IGVwLT5tZV9rZXk7CiAgICAgICAgICAgICAvKiB0ZW1wb3JhcmlseSBidW1wIGF2YWwncyByZWZjb3VudCB0byBlbnN1cmUgaXQgc3RheXMKICAgICAgICAgICAgICAgIGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGF2YWwpOwogICAgICAgICAgICAgLyogZGl0dG8gZm9yIGtleSAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgICAgICBidmFsID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoKFB5T2JqZWN0ICopYiwga2V5KTsKKyAgICAgICAgICAgIC8qIHJldXNlIHRoZSBrbm93biBoYXNoIHZhbHVlICovCisgICAgICAgICAgICBpZiAoKGItPm1hX2tleXMtPmRrX2xvb2t1cCkoYiwga2V5LCBlcC0+bWVfaGFzaCwgJnZhZGRyKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJ2YWwgPSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ2YWwgPSAqdmFkZHI7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIGlmIChidmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXZhbCk7CkBAIC0yMTYyLDkgKzIxNjQsMjkgQEAKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWNdCisKK0Bjb2V4aXN0CitkaWN0Ll9fY29udGFpbnNfXworCisgIGtleTogb2JqZWN0CisgIC8KKworVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGljdF9fX2NvbnRhaW5zX19fX2RvY19fLAorIl9fY29udGFpbnNfXyhrZXkpXG4iCisiVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlXCIiKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb250YWlucyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQorZGljdF9fX2NvbnRhaW5zX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCisvKltjbGluaWMgY2hlY2tzdW06IDNiYmFjNWNlODk4YWU2MzBkOTY2OGZhMWM4YjNhZmI2NDVmZjIyZThdKi8KIHsKKyAgICByZWdpc3RlciBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKXNlbGY7CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKQEAgLTIxODIsNyArMjIwNCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2dldChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK2RpY3RfZ2V0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOwpAQCAtMjIxMCwxOSArMjIzMiwxOSBAQAogICAgIHJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3NldGRlZmF1bHQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitQeU9iamVjdCAqCitQeURpY3RfU2V0RGVmYXVsdChQeU9iamVjdCAqZCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmF1bHRvYmopCiB7Ci0gICAgUHlPYmplY3QgKmtleTsKLSAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CisgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmZhaWxvYmopKQorICAgIGlmICghUHlEaWN0X0NoZWNrKGQpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKICAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKQEAgLTIyNDAsMjMgKzIyNjIsMzUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVwID0gZmluZF9lbXB0eV9zbG90KG1wLCBrZXksIGhhc2gsICZ2YWx1ZV9hZGRyKTsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoZmFpbG9iaik7CisgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0b2JqKTsKICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIGZhaWxvYmopOworICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBkZWZhdWx0b2JqKTsKICAgICAgICAgZXAtPm1lX2tleSA9IGtleTsKICAgICAgICAgZXAtPm1lX2hhc2ggPSBoYXNoOwotICAgICAgICAqdmFsdWVfYWRkciA9IGZhaWxvYmo7Ci0gICAgICAgIHZhbCA9IGZhaWxvYmo7CisgICAgICAgICp2YWx1ZV9hZGRyID0gZGVmYXVsdG9iajsKKyAgICAgICAgdmFsID0gZGVmYXVsdG9iajsKICAgICAgICAgbXAtPm1hX2tleXMtPmRrX3VzYWJsZS0tOwogICAgICAgICBtcC0+bWFfdXNlZCsrOwogICAgIH0KLSAgICBQeV9JTkNSRUYodmFsKTsKICAgICByZXR1cm4gdmFsOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9zZXRkZWZhdWx0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICprZXksICp2YWw7CisgICAgUHlPYmplY3QgKmRlZmF1bHRvYmogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZkZWZhdWx0b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2YWwgPSBQeURpY3RfU2V0RGVmYXVsdCgoUHlPYmplY3QgKiltcCwga2V5LCBkZWZhdWx0b2JqKTsKKyAgICBQeV9YSU5DUkVGKHZhbCk7CisgICAgcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY2xlYXIocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY2xlYXIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeURpY3RfQ2xlYXIoKFB5T2JqZWN0ICopbXApOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjI3OCw3ICsyMzEyLDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fApAQCAtMjI5Niw3ICsyMzMwLDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp2YWx1ZV9hZGRyID0gTlVMTDsKQEAgLTI0MzcsOSArMjQ3MSw2IEBACiAgICAgcmV0dXJuIHNpemVvZihQeURpY3RLZXlzT2JqZWN0KSArIChES19TSVpFKGtleXMpLTEpICogc2l6ZW9mKFB5RGljdEtleUVudHJ5KTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbnRhaW5zX19kb2NfXywKLSJELl9fY29udGFpbnNfXyhrKSAtPiBUcnVlIGlmIEQgaGFzIGEga2V5IGssIGVsc2UgRmFsc2UiKTsKLQogUHlEb2NfU1RSVkFSKGdldGl0ZW1fX2RvY19fLCAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKTsKIAogUHlEb2NfU1RSVkFSKHNpemVvZl9fZG9jX18sCkBAIC0yNDYwLDEwICsyNDkxLDEwIEBACiAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4iKTsKIAogUHlEb2NfU1RSVkFSKHVwZGF0ZV9fZG9jX18sCi0iRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cbiIKLSJJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKLUlmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2XG5cCi1JbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogRFtrXSA9IEZba10iKTsKKyJELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gZGljdC9pdGVyYWJsZSBFIGFuZCBGLlxuXAorSWYgRSBpcyBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgbGFja3MgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGssIHYgaW4gRTogRFtrXSA9IHZcblwKK0luIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgayBpbiBGOiAgRFtrXSA9IEZba10iKTsKIAogUHlEb2NfU1RSVkFSKGZyb21rZXlzX19kb2NfXywKICJkaWN0LmZyb21rZXlzKFNbLHZdKSAtPiBOZXcgZGljdCB3aXRoIGtleXMgZnJvbSBTIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdi5cblwKQEAgLTI0ODgsOCArMjUxOSw3IEBACiAgICAgICAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWFwcF9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2NvbnRhaW5zX18iLChQeUNGdW5jdGlvbilkaWN0X2NvbnRhaW5zLCAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAotICAgICBjb250YWluc19fZG9jX199LAorICAgIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRgogICAgIHsiX19nZXRpdGVtX18iLCAoUHlDRnVuY3Rpb24pZGljdF9zdWJzY3JpcHQsICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGdldGl0ZW1fX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilkaWN0X3NpemVvZiwgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTY4LDIyICsyNTk4LDIzIEBACiBkaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKKyAgICBQeURpY3RPYmplY3QgKmQ7CiAKICAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogICAgIHNlbGYgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdE9iamVjdCAqZCA9IChQeURpY3RPYmplY3QgKilzZWxmOwotICAgICAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKLSAgICAgICAgLyogWFhYIC0gU2hvdWxkIHdlIHJhaXNlIGEgbm8tbWVtb3J5IGVycm9yPyAqLwotICAgICAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBES19JTkNSRUYoUHlfRU1QVFlfS0VZUyk7Ci0gICAgICAgICAgICBkLT5tYV9rZXlzID0gUHlfRU1QVFlfS0VZUzsKLSAgICAgICAgICAgIGQtPm1hX3ZhbHVlcyA9IGVtcHR5X3ZhbHVlczsKLSAgICAgICAgfQotICAgICAgICBkLT5tYV91c2VkID0gMDsKLSAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gJlB5RGljdF9UeXBlKQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZCA9IChQeURpY3RPYmplY3QgKilzZWxmOworCisgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KKyAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOworCisgICAgZC0+bWFfdXNlZCA9IDA7CisgICAgZC0+bWFfa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGQtPm1hX2tleXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2NTksOCArMjY5MCwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdjsKICAgICBrdiA9IF9QeVVuaWNvZGVfRnJvbUlkKGtleSk7IC8qIGJvcnJvd2VkICovCi0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBQeURpY3RfR2V0SXRlbShkcCwga3YpOwogfQogCkBAIC0yNjcxLDggKzI3MDQsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqa3YsICpydjsKICAgICBrdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGtleSk7Ci0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJ2ID0gUHlEaWN0X0dldEl0ZW0odiwga3YpOwogICAgIFB5X0RFQ1JFRihrdik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtMjcwMyw2ICsyNzM4LDE1IEBACiB9CiAKIGludAorX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKnYsIF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlPYmplY3QgKmt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeURpY3RfRGVsSXRlbSh2LCBrdik7Cit9CisKK2ludAogUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqa3Y7CkBAIC0yNzk1LDggKzI4MzksOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4NzgsNyArMjkyMiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk1OSw3ICszMDAzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLmFmNDBiYzggMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xMjEsMTEgKzEyMSwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEJhc2VFeGNlcHRpb25fcmVwcihQeUJhc2VFeGNlcHRpb25PYmplY3QgKnNlbGYpCiB7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICpkb3Q7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpkb3Q7CiAKLSAgICBuYW1lID0gKGNoYXIgKilQeV9UWVBFKHNlbGYpLT50cF9uYW1lOwotICAgIGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBuYW1lID0gUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKKyAgICBkb3QgPSAoY29uc3QgY2hhciAqKSBzdHJyY2hyKG5hbWUsICcuJyk7CiAgICAgaWYgKGRvdCAhPSBOVUxMKSBuYW1lID0gZG90KzE7CiAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzJVIiLCBuYW1lLCBzZWxmLT5hcmdzKTsKQEAgLTg0NSw3ICs4NDUsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4NSwxMSArODg1LDEyIEBACiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgogCisgICAgUHlfSU5DUkVGKGFyZ3MpOworCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7CiAgICAgICAgIGlmICghX1B5QXJnX05vS2V5d29yZHModHlwZS0+dHBfbmFtZSwga3dkcykpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwogICAgICAgICBpZiAob3NlcnJvcl9wYXJzZV9hcmdzKCZhcmdzLCAmbXllcnJubywgJnN0cmVycm9yLCAmZmlsZW5hbWUKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKQEAgLTkzMiw2ICs5MzMsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKIAogZXJyb3I6CkBAIC0yMzI3LDcgKzIzMjksNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI1OTEsMyArMjU5MywxMzEgQEAKICAgICBmcmVlX3ByZWFsbG9jYXRlZF9tZW1lcnJvcnMoKTsKICAgICBQeV9DTEVBUihlcnJub21hcCk7CiB9CisKKy8qIEhlbHBlciB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiAicmFpc2UgWCBmcm9tIFkiIGluIEMsIGJ1dCBhbHdheXMgdXNpbmcKKyAqIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiByYXRoZXIgdGhhbiBwYXNzaW5nIG9uZSBpbi4KKyAqCisgKiBXZSBjdXJyZW50bHkgbGltaXQgdGhpcyB0byAqb25seSogZXhjZXB0aW9ucyB0aGF0IHVzZSB0aGUgQmFzZUV4Y2VwdGlvbgorICogdHBfaW5pdCBhbmQgdHBfbmV3IG1ldGhvZHMsIHNpbmNlIHdlIGNhbiBiZSByZWFzb25hYmx5IHN1cmUgd2UgY2FuIHdyYXAKKyAqIHRob3NlIGNvcnJlY3RseSB3aXRob3V0IGxvc2luZyBkYXRhIGFuZCB3aXRob3V0IGxvc2luZyBiYWNrd2FyZHMKKyAqIGNvbXBhdGliaWxpdHkuCisgKgorICogV2UgYWxzbyBhaW0gdG8gcnVsZSBvdXQgKmFsbCogZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHN0b3JpbmcgYWRkaXRpb25hbAorICogc3RhdGUsIHdoZXRoZXIgYnkgaGF2aW5nIGEgc2l6ZSBkaWZmZXJlbmNlIHJlbGF0aXZlIHRvIEJhc2VFeGNlcHRpb24sCisgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgaW4gZHVyaW5nIGNvbnN0cnVjdGlvbiBvciBieSBoYXZpbmcgYQorICogbm9uLWVtcHR5IGluc3RhbmNlIGRpY3QuCisgKgorICogV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCB3aGF0IHdlIHdyYXAsIHNpbmNlIGNoYW5naW5nIHR5cGVzIHRvCisgKiBhIGJyb2FkZXIgZXhjZXB0aW9uIHR5cGUgd291bGQgYmUgYmFja3dhcmRzIGluY29tcGF0aWJsZSBmb3IKKyAqIGV4aXN0aW5nIGNvZGVjcywgYW5kIHdpdGggZGlmZmVyZW50IGluaXQgb3IgbmV3IG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMKKyAqIG1heSBlaXRoZXIgbm90IHN1cHBvcnQgaW5zdGFudGlhdGlvbiB3aXRoIFB5RXJyX0Zvcm1hdCBvciBsb3NlCisgKiBpbmZvcm1hdGlvbiB3aGVuIGluc3RhbnRpYXRlZCB0aGF0IHdheS4KKyAqCisgKiBYWFggKG5jb2dobGFuKTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcHJlaGVuc2l2ZSBieSBleHBsb2l0aW5nIHRoZQorICogZmFjdCB0aGF0IGV4Y2VwdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHN1cHBvcnQgcGlja2xpbmcuIElmIG1vcmUgYnVpbHRpbgorICogZXhjZXB0aW9ucyAoZS5nLiBBdHRyaWJ1dGVFcnJvcikgc3RhcnQgdG8gYmUgY29udmVydGVkIHRvIHJpY2gKKyAqIGV4Y2VwdGlvbnMgd2l0aCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIHRoYXQncyBwcm9iYWJseSBhIGJldHRlciBhcHByb2FjaAorICogdG8gcHVyc3VlIG92ZXIgYWRkaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHBhcnRpY3VsYXIgc3RhdGVmdWwgc3ViY2xhc3Nlcy4KKyAqCisgKiBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBuZXcgZXhjZXB0aW9uIChpZiBhbnkpLCBOVUxMIGlmIHRoZQorICogZXhpc3RpbmcgZXhjZXB0aW9uIHdhcyBsZWZ0IGluIHBsYWNlLgorICovCitQeU9iamVjdCAqCitfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0KiBtc2dfcHJlZml4OworICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKKyAgICBQeVR5cGVPYmplY3QgKmNhdWdodF90eXBlOworICAgIFB5T2JqZWN0ICoqZGljdHB0cjsKKyAgICBQeU9iamVjdCAqaW5zdGFuY2VfYXJnczsKKyAgICBQeV9zc2l6ZV90IG51bV9hcmdzLCBjYXVnaHRfdHlwZV9zaXplLCBiYXNlX2V4Y19zaXplOworICAgIFB5T2JqZWN0ICpuZXdfZXhjLCAqbmV3X3ZhbCwgKm5ld190YjsKKyAgICB2YV9saXN0IHZhcmdzOworICAgIGludCBzYW1lX2Jhc2ljX3NpemU7CisKKyAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsLCAmdGIpOworICAgIGNhdWdodF90eXBlID0gKFB5VHlwZU9iamVjdCAqKWV4YzsKKyAgICAvKiBFbnN1cmUgdHlwZSBpbmZvIGluZGljYXRlcyBubyBleHRyYSBzdGF0ZSBpcyBzdG9yZWQgYXQgdGhlIEMgbGV2ZWwKKyAgICAgKiBhbmQgdGhhdCB0aGUgdHlwZSBjYW4gYmUgcmVpbnN0YW50aWF0ZWQgdXNpbmcgUHlFcnJfRm9ybWF0CisgICAgICovCisgICAgY2F1Z2h0X3R5cGVfc2l6ZSA9IGNhdWdodF90eXBlLT50cF9iYXNpY3NpemU7CisgICAgYmFzZV9leGNfc2l6ZSA9IF9QeUV4Y19CYXNlRXhjZXB0aW9uLnRwX2Jhc2ljc2l6ZTsKKyAgICBzYW1lX2Jhc2ljX3NpemUgPSAoCisgICAgICAgIGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSB8fAorICAgICAgICAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKGNhdWdodF90eXBlKSAmJgorICAgICAgICAgICAgKGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSArIHNpemVvZihQeU9iamVjdCAqKSkKKyAgICAgICAgKQorICAgICk7CisgICAgaWYgKGNhdWdodF90eXBlLT50cF9pbml0ICE9IChpbml0cHJvYylCYXNlRXhjZXB0aW9uX2luaXQgfHwKKyAgICAgICAgY2F1Z2h0X3R5cGUtPnRwX25ldyAhPSBCYXNlRXhjZXB0aW9uX25ldyB8fAorICAgICAgICAhc2FtZV9iYXNpY19zaXplIHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9pdGVtc2l6ZSAhPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9pdGVtc2l6ZSkgeworICAgICAgICAvKiBXZSBjYW4ndCBiZSBzdXJlIHdlIGNhbiB3cmFwIHRoaXMgc2FmZWx5LCBzaW5jZSBpdCBtYXkgY29udGFpbgorICAgICAgICAgKiBtb3JlIHN0YXRlIHRoYW4ganVzdCB0aGUgZXhjZXB0aW9uIHR5cGUuIEFjY29yZGluZ2x5LCB3ZSBqdXN0CisgICAgICAgICAqIGxlYXZlIGl0IGFsb25lLgorICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgYXJncyBhcmUgZW1wdHkgb3IgY29udGFpbiBhIHNpbmdsZSBzdHJpbmcgKi8KKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmV4YywgJnZhbCwgJnRiKTsKKyAgICBpbnN0YW5jZV9hcmdzID0gKChQeUJhc2VFeGNlcHRpb25PYmplY3QgKil2YWwpLT5hcmdzOworICAgIG51bV9hcmdzID0gUHlUdXBsZV9HRVRfU0laRShpbnN0YW5jZV9hcmdzKTsKKyAgICBpZiAobnVtX2FyZ3MgPiAxIHx8CisgICAgICAgIChudW1fYXJncyA9PSAxICYmCisgICAgICAgICAhUHlVbmljb2RlX0NoZWNrRXhhY3QoUHlUdXBsZV9HRVRfSVRFTShpbnN0YW5jZV9hcmdzLCAwKSkpKSB7CisgICAgICAgIC8qIE1vcmUgdGhhbiAxIGFyZywgb3IgdGhlIG9uZSBhcmcgd2UgZG8gaGF2ZSBpc24ndCBhIHN0cmluZworICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBFbnN1cmUgdGhlIGluc3RhbmNlIGRpY3QgaXMgYWxzbyBlbXB0eSAqLworICAgIGRpY3RwdHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cih2YWwpOworICAgIGlmIChkaWN0cHRyICE9IE5VTEwgJiYgKmRpY3RwdHIgIT0gTlVMTCAmJgorICAgICAgICBQeU9iamVjdF9MZW5ndGgoKmRpY3RwdHIpID4gMCkgeworICAgICAgICAvKiBXaGlsZSB3ZSBjb3VsZCBwb3RlbnRpYWxseSBjb3B5IGEgbm9uLWVtcHR5IGluc3RhbmNlIGRpY3Rpb25hcnkKKyAgICAgICAgICogdG8gdGhlIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiwgZm9yIG5vdyB3ZSB0YWtlIHRoZSBtb3JlCisgICAgICAgICAqIGNvbnNlcnZhdGl2ZSBwYXRoIG9mIGxlYXZpbmcgZXhjZXB0aW9ucyB3aXRoIGF0dHJpYnV0ZXMgc2V0CisgICAgICAgICAqIGFsb25lLgorICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBGb3IgZXhjZXB0aW9ucyB0aGF0IHdlIGNhbiB3cmFwIHNhZmVseSwgd2UgY2hhaW4gdGhlIG9yaWdpbmFsCisgICAgICogZXhjZXB0aW9uIHRvIGEgbmV3IG9uZSBvZiB0aGUgZXhhY3Qgc2FtZSB0eXBlIHdpdGggYW4KKyAgICAgKiBlcnJvciBtZXNzYWdlIHRoYXQgbWVudGlvbnMgdGhlIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgdGhlCisgICAgICogb3JpZ2luYWwgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogSXQgd291bGQgYmUgbmljZSB0byB3cmFwIE9TRXJyb3IgYW5kIHZhcmlvdXMgb3RoZXIgZXhjZXB0aW9uCisgICAgICogdHlwZXMgYXMgd2VsbCwgYnV0IHRoYXQncyBxdWl0ZSBhIGJpdCB0cmlja2llciBkdWUgdG8gdGhlIGV4dHJhCisgICAgICogc3RhdGUgcG90ZW50aWFsbHkgc3RvcmVkIG9uIE9TRXJyb3IgaW5zdGFuY2VzLgorICAgICAqLworCisgICAgUHlfWERFQ1JFRih0Yik7CisKKyNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCisgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CisjZWxzZQorICAgIHZhX3N0YXJ0KHZhcmdzKTsKKyNlbmRpZgorICAgIG1zZ19wcmVmaXggPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CisgICAgdmFfZW5kKHZhcmdzKTsKKyAgICBpZiAobXNnX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihleGMpOworICAgICAgICBQeV9ERUNSRUYodmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlFcnJfRm9ybWF0KGV4YywgIiVVICglczogJVMpIiwKKyAgICAgICAgICAgICAgICAgbXNnX3ByZWZpeCwgUHlfVFlQRSh2YWwpLT50cF9uYW1lLCB2YWwpOworICAgIFB5X0RFQ1JFRihleGMpOworICAgIFB5X0RFQ1JFRihtc2dfcHJlZml4KTsKKyAgICBQeUVycl9GZXRjaCgmbmV3X2V4YywgJm5ld192YWwsICZuZXdfdGIpOworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmbmV3X2V4YywgJm5ld192YWwsICZuZXdfdGIpOworICAgIFB5RXhjZXB0aW9uX1NldENhdXNlKG5ld192YWwsIHZhbCk7CisgICAgUHlFcnJfUmVzdG9yZShuZXdfZXhjLCBuZXdfdmFsLCBuZXdfdGIpOworICAgIHJldHVybiBuZXdfdmFsOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCA5OGY0MmE5Li41OTZmOTA5IDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtMjYsOCArMjYsOCBAQAogLyogRXh0ZXJuYWwgQyBpbnRlcmZhY2UgKi8KIAogUHlPYmplY3QgKgotUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICBjaGFyICplcnJvcnMsIGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQorUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGNvbnN0IGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogewogICAgIFB5T2JqZWN0ICppbywgKnN0cmVhbTsKICAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgbiA9IElOVF9NQVg7CiAgICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBjLCAoaW50KW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGEwOGE4NTIuLjI5YzNiMzIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTksMTEgKzksNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAotI3VuZGVmIE1BWAotI3VuZGVmIE1JTgotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0KIAogLyogU3BlY2lhbCBmcmVlIGxpc3QKICAgIGZyZWVfbGlzdCBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBhdmFpbGFibGUgUHlGbG9hdE9iamVjdHMsIGxpbmtlZApAQCAtMTE0LDcgKzEwOSw3IEBACiBQeU9iamVjdCAqCiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIGZ2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CisgICAgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5RmxvYXRPYmplY3QgKikgUHlfVFlQRShvcCk7CiAgICAgICAgIG51bWZyZWUtLTsKQEAgLTE0OSw4ICsxNDQsOSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih2LCAmcywgJmxlbikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGxhc3QgPSBzICsgbGVuOwpAQCAtMjQ2LDcgKzI0Miw3IEBACiBzdGF0aWMgaW50CiBjb252ZXJ0X3RvX2RvdWJsZShQeU9iamVjdCAqKnYsIGRvdWJsZSAqZGJsKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogPSAqdjsKKyAgICBQeU9iamVjdCAqb2JqID0gKnY7CiAKICAgICBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKICAgICAgICAgKmRibCA9IFB5TG9uZ19Bc0RvdWJsZShvYmopOwpAQCAtMTEzMSw3ICsxMTI3LDcgQEAKICAgICB9CiAKICAgICBtID0gZnJleHAoZmFicyh4KSwgJmUpOwotICAgIHNoaWZ0ID0gMSAtIE1BWChEQkxfTUlOX0VYUCAtIGUsIDApOworICAgIHNoaWZ0ID0gMSAtIFB5X01BWChEQkxfTUlOX0VYUCAtIGUsIDApOwogICAgIG0gPSBsZGV4cChtLCBzaGlmdCk7CiAgICAgZSAtPSBzaGlmdDsKIApAQCAtMTI4NSw4ICsxMjgxLDggQEAKICAgICBmZGlnaXRzID0gY29lZmZfZW5kIC0gc19zdG9yZTsKICAgICBpZiAobmRpZ2l0cyA9PSAwKQogICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgIGlmIChuZGlnaXRzID4gTUlOKERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gTE9OR19NSU4vMiwKLSAgICAgICAgICAgICAgICAgICAgICBMT05HX01BWC8yICsgMSAtIERCTF9NQVhfRVhQKS80KQorICAgIGlmIChuZGlnaXRzID4gUHlfTUlOKERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gTE9OR19NSU4vMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMT05HX01BWC8yICsgMSAtIERCTF9NQVhfRVhQKS80KQogICAgICAgICBnb3RvIGluc2FuZV9sZW5ndGhfZXJyb3I7CiAKICAgICAvKiBbcCA8ZXhwb25lbnQ+XSAqLwpAQCAtMTM0Miw3ICsxMzM4LDcgQEAKIAogICAgIC8qIGxzYiA9IGV4cG9uZW50IG9mIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgKnJvdW5kZWQqIHZhbHVlLgogICAgICAgIFRoaXMgaXMgdG9wX2V4cCAtIERCTF9NQU5UX0RJRyB1bmxlc3MgcmVzdWx0IGlzIHN1Ym5vcm1hbC4gKi8KLSAgICBsc2IgPSBNQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOworICAgIGxzYiA9IFB5X01BWCh0b3BfZXhwLCAobG9uZylEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUc7CiAKICAgICB4ID0gMC4wOwogICAgIGlmIChleHAgPj0gbHNiKSB7CkBAIC0xNDIxLDcgKzE0MTcsNyBAQAogPj4+IGZsb2F0LmZyb21oZXgoJzB4MS5mZmZmcDEwJylcblwKIDIwNDcuOTg0Mzc1XG5cCiA+Pj4gZmxvYXQuZnJvbWhleCgnLTB4MXAtMTA3NCcpXG5cCi0tNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQiKTsKKy01ZS0zMjQiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTcxMSw3ICsxNzA3LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTE4NTgsNyArMTg1NCw3IEBACiAgICAgZmxvYXRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLXZvaWQKK2ludAogX1B5RmxvYXRfSW5pdCh2b2lkKQogewogICAgIC8qIFdlIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWFjaGluZSBpcyB1c2luZyBJRUVFCkBAIC0xOTA4LDggKzE5MDQsMTEgQEAKICAgICBmbG9hdF9mb3JtYXQgPSBkZXRlY3RlZF9mbG9hdF9mb3JtYXQ7CiAKICAgICAvKiBJbml0IGZsb2F0IGluZm8gKi8KLSAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsb2F0SW5mb1R5cGUsICZmbG9hdGluZm9fZGVzYyk7CisgICAgaWYgKEZsb2F0SW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCmluZGV4IDgwOGU1OTUuLjYzZjAzYTYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnJhbWVvYmplY3QuYworKysgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKQEAgLTcsMTEgKzcsNiBAQAogI2luY2x1ZGUgIm9wY29kZS5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlGcmFtZU9iamVjdCwgeCkKIAogc3RhdGljIFB5TWVtYmVyRGVmIGZyYW1lX21lbWJlcmxpc3RbXSA9IHsKQEAgLTI2LDcgKzIxLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9nZXRsb2NhbHMoUHlGcmFtZU9iamVjdCAqZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoZi0+Zl9sb2NhbHMpOwogICAgIHJldHVybiBmLT5mX2xvY2FsczsKIH0KQEAgLTE2MCw4ICsxNTYsOCBAQAogCiAgICAgLyogV2UncmUgbm93IHJlYWR5IHRvIGxvb2sgYXQgdGhlIGJ5dGVjb2RlLiAqLwogICAgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGYtPmZfY29kZS0+Y29fY29kZSwgKGNoYXIgKiopJmNvZGUsICZjb2RlX2xlbik7Ci0gICAgbWluX2FkZHIgPSBNSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKLSAgICBtYXhfYWRkciA9IE1BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOworICAgIG1pbl9hZGRyID0gUHlfTUlOKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWF4X2FkZHIgPSBQeV9NQVgobmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKIAogICAgIC8qIFlvdSBjYW4ndCBqdW1wIG9udG8gYSBsaW5lIHdpdGggYW4gJ2V4Y2VwdCcgc3RhdGVtZW50IG9uIGl0IC0KICAgICAgKiB0aGV5IGV4cGVjdCB0byBoYXZlIGFuIGV4Y2VwdGlvbiBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjaywgd2hpY2gKQEAgLTI5Myw3ICsyODksNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBtaW5fZGVsdGFfaWJsb2NrID0gTUlOKG1pbl9kZWx0YV9pYmxvY2ssIGRlbHRhX2libG9jayk7CisgICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBQeV9NSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKIAogICAgICAgICBpZiAob3AgPj0gSEFWRV9BUkdVTUVOVCkgewogICAgICAgICAgICAgYWRkciArPSAyOwpAQCAtNDY2LDcgKzQ2Miw3IEBACiBmcmFtZV90cmF2ZXJzZShQeUZyYW1lT2JqZWN0ICpmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIFB5X1ZJU0lUKGYtPmZfYmFjayk7CiAgICAgUHlfVklTSVQoZi0+Zl9jb2RlKTsKQEAgLTQ5MywxMCArNDg5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1mcmFtZV9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQorZnJhbWVfdHBfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcCwgKipvbGR0b3A7Ci0gICAgaW50IGksIHNsb3RzOworICAgIFB5X3NzaXplX3QgaSwgc2xvdHM7CiAKICAgICAvKiBCZWZvcmUgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIHRoYXQgdGhpcyBmcmFtZSBpcyBjbGVhcmx5IG1hcmtlZAogICAgICAqIGFzIGJlaW5nIGRlZnVuY3QhICBFbHNlLCBlLmcuLCBhIGdlbmVyYXRvciByZWFjaGFibGUgZnJvbSB0aGlzCkBAIC01MDUsNiArNTAxLDcgQEAKICAgICAgKi8KICAgICBvbGR0b3AgPSBmLT5mX3N0YWNrdG9wOwogICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKIAogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3R5cGUpOwogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3ZhbHVlKTsKQEAgLTUyNSw2ICs1MjIsMjUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2ZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaWYgKGYtPmZfZXhlY3V0aW5nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGYtPmZfZ2VuKSB7CisgICAgICAgIF9QeUdlbl9GaW5hbGl6ZShmLT5mX2dlbik7CisgICAgICAgIGFzc2VydChmLT5mX2dlbiA9PSBOVUxMKTsKKyAgICB9CisgICAgZnJhbWVfdHBfY2xlYXIoZik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCisiRi5jbGVhcigpOiBjbGVhciBtb3N0IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgZnJhbWUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX3NpemVvZihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5X3NzaXplX3QgcmVzLCBleHRyYXMsIG5jZWxscywgbmZyZWVzOwpAQCAtNTQzLDYgKzU1OSw4IEBACiAiRi5fX3NpemVvZl9fKCkgLT4gc2l6ZSBvZiBGIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIGZyYW1lX21ldGhvZHNbXSA9IHsKKyAgICB7ImNsZWFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9jbGVhciwgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIGNsZWFyX19kb2NfX30sCiAgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pZnJhbWVfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAogICAgICBzaXplb2ZfX2RvY19ffSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KQEAgLTU3MSw3ICs1ODksNyBAQAogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmcmFtZV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWZyYW1lX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAoaW5xdWlyeSlmcmFtZV90cF9jbGVhciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTU4MywxMyArNjAxLDEzIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiB9OwogCi1zdGF0aWMgUHlPYmplY3QgKmJ1aWx0aW5fb2JqZWN0OworX1B5X0lERU5USUZJRVIoX19idWlsdGluc19fKTsKIAogaW50IF9QeUZyYW1lX0luaXQoKQogewotICAgIGJ1aWx0aW5fb2JqZWN0ID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fYnVpbHRpbnNfXyIpOwotICAgIGlmIChidWlsdGluX29iamVjdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvKiBCZWZvcmUsIFB5SWRfX19idWlsdGluc19fIHdhcyBhIHN0cmluZyBjcmVhdGVkIGV4cGxpY2l0bHkgaW4KKyAgICAgICB0aGlzIGZ1bmN0aW9uLiBOb3cgdGhlcmUgaXMgbm90aGluZyB0byBpbml0aWFsaXplIGFueW1vcmUsIGJ1dAorICAgICAgIHRoZSBmdW5jdGlvbiBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogICAgIHJldHVybiAxOwogfQogCkBAIC02MTAsNyArNjI4LDcgQEAKICAgICB9CiAjZW5kaWYKICAgICBpZiAoYmFjayA9PSBOVUxMIHx8IGJhY2stPmZfZ2xvYmFscyAhPSBnbG9iYWxzKSB7Ci0gICAgICAgIGJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW0oZ2xvYmFscywgYnVpbHRpbl9vYmplY3QpOworICAgICAgICBidWlsdGlucyA9IF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXyk7CiAgICAgICAgIGlmIChidWlsdGlucykgewogICAgICAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKGJ1aWx0aW5zKSkgewogICAgICAgICAgICAgICAgIGJ1aWx0aW5zID0gUHlNb2R1bGVfR2V0RGljdChidWlsdGlucyk7CkBAIC03MTMsNiArNzMxLDggQEAKICAgICBmLT5mX2xhc3RpID0gLTE7CiAgICAgZi0+Zl9saW5lbm8gPSBjb2RlLT5jb19maXJzdGxpbmVubzsKICAgICBmLT5mX2libG9jayA9IDA7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOworICAgIGYtPmZfZ2VuID0gTlVMTDsKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhmKTsKICAgICByZXR1cm4gZjsKQEAgLTc1MywxMiArNzczLDkgQEAKICAgIElmIGRlcmVmIGlzIHRydWUsIHRoZW4gdGhlIHZhbHVlcyBiZWluZyBjb3BpZWQgYXJlIGNlbGwgdmFyaWFibGVzCiAgICBhbmQgdGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjZWxsIHZhcmlhYmxlIGJlZm9yZSBiZWluZyBwdXQKICAgIGluIGRpY3QuCi0KLSAgIEV4Y2VwdGlvbnMgcmFpc2VkIHdoaWxlIG1vZGlmeWluZyB0aGUgZGljdCBhcmUgc2lsZW50bHkgaWdub3JlZCwKLSAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gcmVwb3J0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1hcF90b19kaWN0KFB5T2JqZWN0ICptYXAsIFB5X3NzaXplX3Qgbm1hcCwgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICoqdmFsdWVzLAogICAgICAgICAgICAgaW50IGRlcmVmKQogewpAQCAtNzc1LDE0ICs3OTIsMTkgQEAKICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9EZWxJdGVtKGRpY3QsIGtleSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogLyogQ29weSB2YWx1ZXMgZnJvbSB0aGUgImxvY2FscyIgZGljdCBpbnRvIHRoZSBmYXN0IGxvY2Fscy4KQEAgLTgzOSw0MiArODYxLDQ5IEBACiAgICAgfQogfQogCi12b2lkCi1QeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoraW50CitQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIC8qIE1lcmdlIGZhc3QgbG9jYWxzIGludG8gZi0+Zl9sb2NhbHMgKi8KICAgICBQeU9iamVjdCAqbG9jYWxzLCAqbWFwOwogICAgIFB5T2JqZWN0ICoqZmFzdDsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlfc3NpemVfdCBqOwotICAgIGludCBuY2VsbHMsIG5mcmVldmFyczsKLSAgICBpZiAoZiA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CiAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIENhbid0IHJlcG9ydCBpdCA6LSggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNvID0gZi0+Zl9jb2RlOwogICAgIG1hcCA9IGNvLT5jb192YXJuYW1lczsKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobWFwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb192YXJuYW1lcyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1hcCktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZhc3QgPSBmLT5mX2xvY2Fsc3BsdXM7CiAgICAgaiA9IFB5VHVwbGVfR0VUX1NJWkUobWFwKTsKICAgICBpZiAoaiA+IGNvLT5jb19ubG9jYWxzKQogICAgICAgICBqID0gY28tPmNvX25sb2NhbHM7Ci0gICAgaWYgKGNvLT5jb19ubG9jYWxzKQotICAgICAgICBtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCk7CisgICAgaWYgKGNvLT5jb19ubG9jYWxzKSB7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBuY2VsbHMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CiAgICAgbmZyZWV2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpOwogICAgIGlmIChuY2VsbHMgfHwgbmZyZWV2YXJzKSB7Ci0gICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAotICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscywgMSk7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fY2VsbHZhcnMsIG5jZWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICAvKiBJZiB0aGUgbmFtZXNwYWNlIGlzIHVub3B0aW1pemVkLCB0aGVuIG9uZSBvZiB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNhc2VzIGFwcGxpZXM6CiAgICAgICAgICAgIDEuIEl0IGRvZXMgbm90IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQKQEAgLTg4NCwxMSArOTEzLDI0IEBACiAgICAgICAgICAgIGludG8gdGhlIGxvY2FscyBkaWN0IHVzZWQgYnkgdGhlIGNsYXNzLgogICAgICAgICAqLwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fT1BUSU1JWkVEKSB7Ci0gICAgICAgICAgICBtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKTsKKyAgICAgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscyArIG5jZWxscywgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGludCByZXM7CisKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgcmVzID0gUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTkwMCw3ICs5NDIsNyBAQAogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOworICAgIFB5X3NzaXplX3QgbmNlbGxzLCBuZnJlZXZhcnM7CiAgICAgaWYgKGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOwpAQCAtOTUyLDggKzk5NCw2IEBACiBQeUZyYW1lX0Zpbmkodm9pZCkKIHsKICAgICAodm9pZClQeUZyYW1lX0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9YREVDUkVGKGJ1aWx0aW5fb2JqZWN0KTsKLSAgICBidWlsdGluX29iamVjdCA9IE5VTEw7CiB9CiAKIC8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggNDk0MTViOS4uYjA0MzkzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTgsNjAgKzgsNTkgQEAKIFB5T2JqZWN0ICoKIFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RnVuY3Rpb25fVHlwZSk7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IDA7Ci0gICAgaWYgKG9wICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRvYzsKLSAgICAgICAgUHlPYmplY3QgKmNvbnN0czsKLSAgICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICAgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOwotICAgICAgICBQeV9JTkNSRUYoY29kZSk7Ci0gICAgICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFscyk7Ci0gICAgICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOwotICAgICAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOwotICAgICAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCi0gICAgICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKLSAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKLSAgICAgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKLSAgICAgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkb2MpOwotICAgICAgICBvcC0+ZnVuY19kb2MgPSBkb2M7Ci0gICAgICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisgICAgUHlGdW5jdGlvbk9iamVjdCAqb3A7CisgICAgUHlPYmplY3QgKmRvYywgKmNvbnN0cywgKm1vZHVsZTsKKyAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gTlVMTDsKIAotICAgICAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCi0gICAgICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuCi0gICAgICAgICovCi0gICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7Ci0gICAgICAgIGlmIChtb2R1bGUpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwotICAgICAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWFsbmFtZSkKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKyAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkgeworICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOworICAgICAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsICZQeUZ1bmN0aW9uX1R5cGUpOworICAgIGlmIChvcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoY29kZSk7CisgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7CisgICAgUHlfSU5DUkVGKGdsb2JhbHMpOworICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOworICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKKyAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCisgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLworICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOworCisgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOworICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7CisgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQorICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZG9jKTsKKyAgICBvcC0+ZnVuY19kb2MgPSBkb2M7CisKKyAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKKyAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOworICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKworICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KKyAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLiAqLworICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKKyAgICBpZiAobW9kdWxlKSB7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7CisgICAgfQorICAgIGlmIChxdWFsbmFtZSkKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKyAgICBlbHNlCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopb3A7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2dlbm9iamVjdC5jIGIvT2JqZWN0cy9nZW5vYmplY3QuYwppbmRleCAwMTZiZmEyLi4wOGQzMGJmIDEwMDY0NAotLS0gYS9PYmplY3RzL2dlbm9iamVjdC5jCisrKyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKQEAgLTE1LDYgKzE1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK19QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKKyAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLworICAgICAgICByZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkCiBnZW5fZGVhbGxvYyhQeUdlbk9iamVjdCAqZ2VuKQogewpAQCAtMjcsMTIgKzUyLDggQEAKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKIAotICAgIGlmIChnZW4tPmdpX2ZyYW1lICE9IE5VTEwgJiYgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdlbmVyYXRvciBpcyBwYXVzZWQsIHNvIHdlIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgUHlfVFlQRShnZW4pLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KLSAgICB9CisgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KIAogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIFB5X0NMRUFSKGdlbi0+Z2lfZnJhbWUpOwpAQCAtNDAsNyArNjEsNiBAQAogICAgIFB5T2JqZWN0X0dDX0RlbChnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQogewpAQCAtMTIwLDYgKzE0MCw3IEBACiAgICAgICAgIFB5X1hERUNSRUYodCk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgICAgIFB5X1hERUNSRUYodGIpOworICAgICAgICBnZW4tPmdpX2ZyYW1lLT5mX2dlbiA9IE5VTEw7CiAgICAgICAgIGdlbi0+Z2lfZnJhbWUgPSBOVUxMOwogICAgICAgICBQeV9ERUNSRUYoZik7CiAgICAgfQpAQCAtMjIyLDY4ICsyNDMsNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotZ2VuX2RlbChQeU9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7Ci0gICAgUHlHZW5PYmplY3QgKmdlbiA9IChQeUdlbk9iamVjdCAqKXNlbGY7Ci0KLSAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKLSAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KLSAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwotCi0gICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7Ci0KLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKLSAgICBlbHNlCi0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotCi0gICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLwotICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCi0gICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KLSAgICAgKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7Ci0gICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCi0gICAgICAgIHJldHVybjsgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBjbG9zZSgpIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KFB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSAmJgotICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwotCi0gICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgX1B5X0RFQ19SRUZUT1RBTDsKLSAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAotICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAqIHVuZG9uZS4KLSAgICAgKi8KLSNpZmRlZiBDT1VOVF9BTExPQ1MKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9mcmVlcyk7Ci0gICAgLS0oUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzKTsKLSNlbmRpZgotfQotCi0KIAogUHlEb2NfU1RSVkFSKHRocm93X2RvYywKICJ0aHJvdyh0eXBbLHZhbFssdGJdXSkgLT4gcmFpc2UgZXhjZXB0aW9uIGluIGdlbmVyYXRvcixcblwKQEAgLTUxNyw3ICs0NzYsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZ2VuX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC01NDQsNyArNTA0LDkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLwotICAgIGdlbl9kZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgX1B5R2VuX0ZpbmFsaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogUHlPYmplY3QgKgpAQCAtNTU2LDYgKzUxOCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBnZW4tPmdpX2ZyYW1lID0gZjsKKyAgICBmLT5mX2dlbiA9IChQeU9iamVjdCAqKSBnZW47CiAgICAgUHlfSU5DUkVGKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9jb2RlID0gKFB5T2JqZWN0ICopKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvaXRlcm9iamVjdC5jIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKaW5kZXggM2NmYmVhZi4uNzdmZjgxMCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKQEAgLTQsNyArNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyAgICAgIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gc2VxaXRlcm9iamVjdDsKIApAQCAtNzYsOSArNzYsMTQgQEAKICAgICBQeV9zc2l6ZV90IHNlcXNpemUsIGxlbjsKIAogICAgIGlmIChpdC0+aXRfc2VxKSB7Ci0gICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7Ci0gICAgICAgIGlmIChzZXFzaXplID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKGl0LT5pdF9zZXEpKSB7CisgICAgICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOworICAgICAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgICAgIH0KICAgICAgICAgbGVuID0gc2Vxc2l6ZSAtIGl0LT5pdF9pbmRleDsKICAgICAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9saXN0b2JqZWN0LmMgYi9PYmplY3RzL2xpc3RvYmplY3QuYwppbmRleCA2ZTBkMDk0Li41Yjc1OTY4IDEwMDY0NAotLS0gYS9PYmplY3RzL2xpc3RvYmplY3QuYworKysgYi9PYmplY3RzL2xpc3RvYmplY3QuYwpAQCAtMjEzLDExICsyMTMsMTEgQEAKIH0KIAogaW50Ci1QeUxpc3RfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlMaXN0X1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksCisgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlMaXN0X0NoZWNrKG9wKSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTMzOCw1NyArMzM4LDU3IEBACiBsaXN0X3JlcHIoUHlMaXN0T2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgaWYgKFB5X1NJWkUodikgPT0gMCkgewogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIltdIik7CiAgICAgfQogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCopdik7CiAgICAgaWYgKGkgIT0gMCkgewogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiWy4uLl0iKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogIlsiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiXSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICdbJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gIE5vdGUgdGhhdCB0aGlzIG1heSBtdXRhdGUgdGhlIGxpc3QsCiAgICAgICAgc28gbXVzdCByZWZldGNoIHRoZSBsaXN0IHNpemUgb24gZWFjaCBpdGVyYXRpb24uICovCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUodik7ICsraSkgeworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIGxpc3QiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICddJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC02NDQsOSArNjQ0LDE0IEBACiAgICAgbWVtY3B5KHJlY3ljbGUsICZpdGVtW2lsb3ddLCBzKTsKIAogICAgIGlmIChkIDwgMCkgeyAvKiBEZWxldGUgLWQgaXRlbXMgKi8KLSAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLAotICAgICAgICAgICAgKFB5X1NJWkUoYSkgLSBpaGlnaCkqc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgbGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpOworICAgICAgICBQeV9zc2l6ZV90IHRhaWw7CisgICAgICAgIHRhaWwgPSAoUHlfU0laRShhKSAtIGloaWdoKSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLCB0YWlsKTsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKSA8IDApIHsKKyAgICAgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2hdLCAmaXRlbVtpaGlnaCtkXSwgdGFpbCk7CisgICAgICAgICAgICBtZW1jcHkoJml0ZW1baWxvd10sIHJlY3ljbGUsIHMpOworICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpdGVtID0gYS0+b2JfaXRlbTsKICAgICB9CiAgICAgZWxzZSBpZiAoZCA+IDApIHsgLyogSW5zZXJ0IGQgaXRlbXMgKi8KQEAgLTgyNiw3ICs4MzEsNyBAQAogICAgIGl0ZXJuZXh0ID0gKml0LT5vYl90eXBlLT50cF9pdGVybmV4dDsKIAogICAgIC8qIEd1ZXNzIGEgcmVzdWx0IGxpc3Qgc2l6ZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CiAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04NzEsOCArODc2LDEwIEBACiAgICAgfQogCiAgICAgLyogQ3V0IGJhY2sgcmVzdWx0IGxpc3QgaWYgaW5pdGlhbCBndWVzcyB3YXMgdG9vIGxhcmdlLiAqLwotICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKQotICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsgIC8qIHNocmlua2luZyBjYW4ndCBmYWlsICovCisgICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpIHsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGl0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTkyNSwxNyArOTMyLDE3IEBACiAgICAgdiA9IHNlbGYtPm9iX2l0ZW1baV07CiAgICAgaWYgKGkgPT0gUHlfU0laRShzZWxmKSAtIDEpIHsKICAgICAgICAgc3RhdHVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSAtIDEpOwotICAgICAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYodik7CiAgICAgc3RhdHVzID0gbGlzdF9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgIC8qIFVzZSBzdGF0dXMsIHNvIHRoYXQgaW4gYSByZWxlYXNlIGJ1aWxkIGNvbXBpbGVycyBkb24ndAotICAgICAqIGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgbmFtZS4KLSAgICAgKi8KLSAgICAodm9pZCkgc3RhdHVzOwotCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNTEsOSArMTA1OCw5IEBACiBzdGF0aWMgaW50CiBiaW5hcnlzb3J0KHNvcnRzbGljZSBsbywgUHlPYmplY3QgKipoaSwgUHlPYmplY3QgKipzdGFydCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGs7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcGl2b3Q7CisgICAgUHlfc3NpemVfdCBrOworICAgIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CisgICAgUHlPYmplY3QgKnBpdm90OwogCiAgICAgYXNzZXJ0KGxvLmtleXMgPD0gc3RhcnQgJiYgc3RhcnQgPD0gaGkpOwogICAgIC8qIGFzc2VydCBbbG8sIHN0YXJ0KSBpcyBzb3J0ZWQgKi8KQEAgLTI0NzYsNiArMjQ4Myw3IEBACiAgICAgICAgICAgICBQeU9iamVjdCAqKmdhcmJhZ2U7CiAgICAgICAgICAgICBzaXplX3QgY3VyOwogICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgaW50IHJlczsKIAogICAgICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTI2LDE0ICsyNTM0LDE0IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLT0gc2xpY2VsZW5ndGg7Ci0gICAgICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsKKyAgICAgICAgICAgIHJlcyA9IGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOwogCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xpY2VsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihnYXJiYWdlW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TWVtX0ZSRUUoZ2FyYmFnZSk7CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGFzc2lnbiBzbGljZSAqLwpAQCAtMjY2MCw3ICsyNjY4LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlMaXN0T2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IGxpc3RpdGVyb2JqZWN0OwogCkBAIC0yNzk3LDcgKzI4MDUsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGxpc3RpdGVyX3NldHN0YXRlKGxpc3RpdGVyb2JqZWN0ICppdCwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIGxvbmcgaW5kZXggPSBQeUxvbmdfQXNMb25nKHN0YXRlKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gUHlMb25nX0FzU3NpemVfdChzdGF0ZSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChpdC0+aXRfc2VxICE9IE5VTEwpIHsKQEAgLTI5NTgsNyArMjk2Niw3IEBACiAgICAgaWYgKGZvcndhcmQpIHsKICAgICAgICAgbGlzdGl0ZXJvYmplY3QgKml0ID0gKGxpc3RpdGVyb2JqZWN0ICopX2l0OwogICAgICAgICBpZiAoaXQtPml0X3NlcSkKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbCIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCisgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKW4iLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPml0X3NlcSwgaXQtPml0X2luZGV4KTsKICAgICB9IGVsc2UgewogICAgICAgICBsaXN0cmV2aXRlcm9iamVjdCAqaXQgPSAobGlzdHJldml0ZXJvYmplY3QgKilfaXQ7CmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IDYzODM1MDcuLmE1YzBkMWIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC0xNyw3ICsxNyw4IEBACiAjZW5kaWYKIAogLyogY29udmVydCBhIFB5TG9uZyBvZiBzaXplIDEsIDAgb3IgLTEgdG8gYW4gc2RpZ2l0ICovCi0jZGVmaW5lIE1FRElVTV9WQUxVRSh4KSAoUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCisjZGVmaW5lIE1FRElVTV9WQUxVRSh4KSAoYXNzZXJ0KC0xIDw9IFB5X1NJWkUoeCkgJiYgUHlfU0laRSh4KSA8PSAxKSwgICBcCisgICAgICAgICBQeV9TSVpFKHgpIDwgMCA/IC0oc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0gOiAgIFwKICAgICAgICAgICAgICAoUHlfU0laRSh4KSA9PSAwID8gKHNkaWdpdCkwIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdKSkKICNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gLSh4KSA6ICh4KSkKQEAgLTcwLDExICs3MSwyMSBAQAogCiAvKiBJZiBhIGZyZXNobHktYWxsb2NhdGVkIGludCBpcyBhbHJlYWR5IHNoYXJlZCwgaXQgbXVzdAogICAgYmUgYSBzbWFsbCBpbnRlZ2VyLCBzbyBuZWdhdGluZyBpdCBtdXN0IGdvIHRvIFB5TG9uZ19Gcm9tTG9uZyAqLwotI2RlZmluZSBORUdBVEUoeCkgXAotICAgIGRvIGlmIChQeV9SRUZDTlQoeCkgPT0gMSkgUHlfU0laRSh4KSA9IC1QeV9TSVpFKHgpOyAgXAotICAgICAgIGVsc2UgeyBQeU9iamVjdCogdG1wPVB5TG9uZ19Gcm9tTG9uZygtTUVESVVNX1ZBTFVFKHgpKTsgIFwKLSAgICAgICAgICAgUHlfREVDUkVGKHgpOyAoeCkgPSAoUHlMb25nT2JqZWN0Kil0bXA7IH0gICAgICAgICAgICAgICBcCi0gICAgd2hpbGUoMCkKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorX1B5TG9uZ19OZWdhdGUoUHlMb25nT2JqZWN0ICoqeF9wKQoreworICAgIFB5TG9uZ09iamVjdCAqeDsKKworICAgIHggPSAoUHlMb25nT2JqZWN0ICopKnhfcDsKKyAgICBpZiAoUHlfUkVGQ05UKHgpID09IDEpIHsKKyAgICAgICAgUHlfU0laRSh4KSA9IC1QeV9TSVpFKHgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnhfcCA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7CisgICAgUHlfREVDUkVGKHgpOworfQorCiAvKiBGb3IgaW50IG11bHRpcGxpY2F0aW9uLCB1c2UgdGhlIE8oTioqMikgc2Nob29sIGFsZ29yaXRobSB1bmxlc3MKICAqIGJvdGggb3BlcmFuZHMgY29udGFpbiBtb3JlIHRoYW4gS0FSQVRTVUJBX0NVVE9GRiBkaWdpdHMgKHRoaXMKICAqIGJlaW5nIGFuIGludGVybmFsIFB5dGhvbiBpbnQgZGlnaXQsIGluIGJhc2UgQkFTRSkuCkBAIC04OSwxMSArMTAwLDYgQEAKICAqLwogI2RlZmluZSBGSVZFQVJZX0NVVE9GRiA4CiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0jZGVmaW5lIE1JTih4LCB5KSAoKHgpID4gKHkpID8gKHkpIDogKHgpKQotCiAjZGVmaW5lIFNJR0NIRUNLKFB5VHJ5QmxvY2spICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayAgICBcCkBAIC0xMDQsNyArMTEwLDcgQEAKICAgIG9mIHRoZSBhbGdvcml0aG1zIHVzZWQsIHRoaXMgY291bGQgc2F2ZSBhdCBtb3N0IGJlIG9uZSB3b3JkIGFueXdheS4gKi8KIAogc3RhdGljIFB5TG9uZ09iamVjdCAqCi1sb25nX25vcm1hbGl6ZShyZWdpc3RlciBQeUxvbmdPYmplY3QgKnYpCitsb25nX25vcm1hbGl6ZShQeUxvbmdPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBqID0gQUJTKFB5X1NJWkUodikpOwogICAgIFB5X3NzaXplX3QgaSA9IGo7CkBAIC0zMzQsNyArMzQwLDcgQEAKIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC00NTcsNyArNDYzLDcgQEAKIAogUHlfc3NpemVfdAogUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqdnYpIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTUxMyw3ICs1MTksNyBAQAogdW5zaWduZWQgbG9uZwogUHlMb25nX0FzVW5zaWduZWRMb25nKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTU0Myw3ICs1NDksNyBAQAogICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBDIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KQEAgLTU1Nyw3ICs1NjMsNyBAQAogc2l6ZV90CiBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC02MDAsNyArNjA2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNjI4LDcgKzYzNCw3IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKICAgICBQeUxvbmdPYmplY3QgKmxvOwpAQCAtOTU0LDkgKzk2MCw2IEBACiBQeUxvbmdfRnJvbVZvaWRQdHIodm9pZCAqcCkKIHsKICNpZiBTSVpFT0ZfVk9JRF9QIDw9IFNJWkVPRl9MT05HCi0gICAgLyogc3BlY2lhbC1jYXNlIG51bGwgcG9pbnRlciAqLwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpKFB5X3VpbnRwdHJfdClwKTsKICNlbHNlCiAKQEAgLTk2Niw5ICs5NjksNiBAQAogI2lmIFNJWkVPRl9MT05HX0xPTkcgPCBTSVpFT0ZfVk9JRF9QCiAjICAgZXJyb3IgIlB5TG9uZ19Gcm9tVm9pZFB0cjogc2l6ZW9mKFBZX0xPTkdfTE9ORykgPCBzaXplb2Yodm9pZCopIgogI2VuZGlmCi0gICAgLyogc3BlY2lhbC1jYXNlIG51bGwgcG9pbnRlciAqLwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpKFB5X3VpbnRwdHJfdClwKTsKICNlbmRpZiAvKiBTSVpFT0ZfVk9JRF9QIDw9IFNJWkVPRl9MT05HICovCiAKQEAgLTEwMTQsNyArMTAxNCw2IEBACiAgKiByZXdyaXR0ZW4gdG8gdXNlIHRoZSBuZXdlciBQeUxvbmdfe0FzLEZyb219Qnl0ZUFycmF5IEFQSS4KICAqLwogCi0jZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gKGludCkqKHVuc2lnbmVkIGNoYXIqKSZvbmUKICNkZWZpbmUgUFlfQUJTX0xMT05HX01JTiAoMC0odW5zaWduZWQgUFlfTE9OR19MT05HKVBZX0xMT05HX01JTikKIAogLyogQ3JlYXRlIGEgbmV3IGludCBvYmplY3QgZnJvbSBhIEMgUFlfTE9OR19MT05HIGludC4gKi8KQEAgLTExNjcsNyArMTE2Niw2IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIFBZX0xPTkdfTE9ORyBieXRlczsKLSAgICBpbnQgb25lID0gMTsKICAgICBpbnQgcmVzOwogCiAgICAgaWYgKHZ2ID09IE5VTEwpIHsKQEAgLTEyMDIsNyArMTIwMCw3IEBACiAgICAgY2FzZSAxOiByZXR1cm4gdi0+b2JfZGlnaXRbMF07CiAgICAgfQogICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMSk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTEyMTksNyArMTIxNyw2IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBieXRlczsKLSAgICBpbnQgb25lID0gMTsKICAgICBpbnQgcmVzOwogCiAgICAgaWYgKHZ2ID09IE5VTEwpIHsKQEAgLTEyMzgsNyArMTIzNSw3IEBACiAgICAgfQogCiAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBQWV9MSVRUTEVfRU5ESUFOLCAwKTsKIAogICAgIC8qIFBsYW4gOSBjYW4ndCBoYW5kbGUgUFlfTE9OR19MT05HIGluID8gOiBleHByZXNzaW9ucyAqLwogICAgIGlmIChyZXMgPCAwKQpAQCAtMTI1Myw3ICsxMjUwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBQWV9MT05HX0xPTkcKIF9QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC0xMjgxLDcgKzEyNzgsNyBAQAogfQogCiB1bnNpZ25lZCBQWV9MT05HX0xPTkcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICpvcCkKIHsKICAgICBQeU51bWJlck1ldGhvZHMgKm5iOwogICAgIFB5TG9uZ09iamVjdCAqbG87CkBAIC0xMzE0LDcgKzEzMTEsNiBAQAogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIFBZX0xPTkdfTE9ORyktMTsKICAgICB9CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiAvKiBHZXQgYSBDIGxvbmcgbG9uZyBpbnQgZnJvbSBhbiBpbnQgb2JqZWN0IG9yIGFueSBvYmplY3QgdGhhdCBoYXMgYW4KICAgIF9faW50X18gbWV0aG9kLgpAQCAtMTMzMCw3ICsxMzI2LDcgQEAKIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnZ2LCBpbnQgKm92ZXJmbG93KQogewogICAgIC8qIFRoaXMgdmVyc2lvbiBieSBUaW0gUGV0ZXJzICovCi0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeCwgcHJldjsKICAgICBQWV9MT05HX0xPTkcgcmVzOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTE2MDYsNyArMTYwMiw3IEBACiAgICAgKi8KICAgICBpZiAoc2l6ZV9hID4gUFlfU1NJWkVfVF9NQVggLyBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9uZyBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvKiB0aGUgZXhwcmVzc2lvbiBzaXplX2EgKiBQeUxvbmdfU0hJRlQgaXMgbm93IHNhZmUgZnJvbSBvdmVyZmxvdyAqLwpAQCAtMTY3Niw3ICsxNjcyLDYgQEAKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwID0gKFRZUEUqKVB5VW5pY29kZV9EQVRBKHN0cikgKyBzdHJsZW47ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKnAgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIC8qIHBvdXRbMF0gdGhyb3VnaCBwb3V0W3NpemUtMl0gY29udHJpYnV0ZSBleGFjdGx5ICAgICAgICAgICAgXAogICAgICAgICAgICBfUHlMb25nX0RFQ0lNQUxfU0hJRlQgZGlnaXRzIGVhY2ggKi8gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZm9yIChpPTA7IGkgPCBzaXplIC0gMTsgaSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzQ5LDcgKzE3NDQsNyBAQAogbG9uZ19mb3JtYXRfYmluYXJ5KFB5T2JqZWN0ICphYSwgaW50IGJhc2UsIGludCBhbHRlcm5hdGUsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqYSA9IChQeUxvbmdPYmplY3QgKilhYTsKKyAgICBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlfc3NpemVfdCBzejsKICAgICBQeV9zc2l6ZV90IHNpemVfYTsKQEAgLTE3OTAsNyArMTc4NSw3IEBACiAgICAgICAgIC8qIEVuc3VyZSBvdmVyZmxvdyBkb2Vzbid0IG9jY3VyIGR1cmluZyBjb21wdXRhdGlvbiBvZiBzei4gKi8KICAgICAgICAgaWYgKHNpemVfYSA+IChQWV9TU0laRV9UX01BWCAtIDMpIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBzaXplX2FfaW5fYml0cyA9IChzaXplX2EgLSAxKSAqIFB5TG9uZ19TSElGVCArCkBAIC0xOTQ2LDEwICsxOTQxLDEwIEBACiAgKiBzdHJpbmcgY2hhcmFjdGVycy4KICAqLwogc3RhdGljIFB5TG9uZ09iamVjdCAqCi1sb25nX2Zyb21fYmluYXJ5X2Jhc2UoY2hhciAqKnN0ciwgaW50IGJhc2UpCitsb25nX2Zyb21fYmluYXJ5X2Jhc2UoY29uc3QgY2hhciAqKnN0ciwgaW50IGJhc2UpCiB7Ci0gICAgY2hhciAqcCA9ICpzdHI7Ci0gICAgY2hhciAqc3RhcnQgPSBwOworICAgIGNvbnN0IGNoYXIgKnAgPSAqc3RyOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsKICAgICBpbnQgYml0c19wZXJfY2hhcjsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlMb25nT2JqZWN0ICp6OwpAQCAtMjAxNCwxMCArMjAwOSwxMCBAQAogICogSWYgdW5zdWNjZXNzZnVsLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIFB5T2JqZWN0ICoKLVB5TG9uZ19Gcm9tU3RyaW5nKGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQorUHlMb25nX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCiB7CiAgICAgaW50IHNpZ24gPSAxLCBlcnJvcl9pZl9ub256ZXJvID0gMDsKLSAgICBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCAqb3JpZ19zdHIgPSBzdHI7CiAgICAgUHlMb25nT2JqZWN0ICp6ID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Ryb2JqOwogICAgIFB5X3NzaXplX3Qgc2xlbjsKQEAgLTIxNDYsMTMgKzIxNDEsMTMgQEAKIGp1c3QgMSBkaWdpdCBhdCB0aGUgc3RhcnQsIHNvIHRoYXQgdGhlIGNvcHlpbmcgY29kZSB3YXMgZXhlcmNpc2VkIGZvciBldmVyeQogZGlnaXQgYmV5b25kIHRoZSBmaXJzdC4KICoqKi8KLSAgICAgICAgcmVnaXN0ZXIgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLworICAgICAgICB0d29kaWdpdHMgYzsgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZV96OwogICAgICAgICBpbnQgaTsKICAgICAgICAgaW50IGNvbnZ3aWR0aDsKICAgICAgICAgdHdvZGlnaXRzIGNvbnZtdWx0bWF4LCBjb252bXVsdDsKICAgICAgICAgZGlnaXQgKnB6LCAqcHpzdG9wOwotICAgICAgICBjaGFyKiBzY2FuOworICAgICAgICBjb25zdCBjaGFyKiBzY2FuOwogCiAgICAgICAgIHN0YXRpYyBkb3VibGUgbG9nX2Jhc2VfQkFTRVszN10gPSB7MC4wZTAsfTsKICAgICAgICAgc3RhdGljIGludCBjb252d2lkdGhfYmFzZVszN10gPSB7MCx9OwpAQCAtMjI4MCwxOSArMjI3NSwxOSBAQAogICAgIGlmICh6ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChwZW5kICE9IE5VTEwpCi0gICAgICAgICpwZW5kID0gc3RyOworICAgICAgICAqcGVuZCA9IChjaGFyICopc3RyOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgejsKIAogICBvbkVycm9yOgogICAgIGlmIChwZW5kICE9IE5VTEwpCi0gICAgICAgICpwZW5kID0gc3RyOworICAgICAgICAqcGVuZCA9IChjaGFyICopc3RyOwogICAgIFB5X1hERUNSRUYoeik7CiAgICAgc2xlbiA9IHN0cmxlbihvcmlnX3N0cikgPCAyMDAgPyBzdHJsZW4ob3JpZ19zdHIpIDogMjAwOwogICAgIHN0cm9iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShvcmlnX3N0ciwgc2xlbik7CiAgICAgaWYgKHN0cm9iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTIzMTYsNyArMjMxMSw3IEBACiAgICAgc3Ryb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBQeV9NSU4obGVuLCAyMDApKTsKICAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwogICAgIH0KQEAgLTIzMzcsNyArMjMzMiw3IEBACiBQeU9iamVjdCAqCiBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QoUHlPYmplY3QgKnUsIGludCBiYXNlKQogewotICAgIFB5T2JqZWN0ICpyZXN1bHQsICphc2NpaWRpZywgKnN0cm9iajsKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWc7CiAgICAgY2hhciAqYnVmZmVyLCAqZW5kID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKIApAQCAtMjM1OSwxMyArMjM1NCw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihhc2NpaWRpZyk7CiAgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgc3Ryb2JqID0gUHlTZXF1ZW5jZV9HZXRTbGljZSh1LCAwLCAyMDApOwotICAgIGlmIChzdHJvYmogIT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAotICAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cm9iaik7Ci0gICAgfQorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCisgICAgICAgICAgICAgICAgIGJhc2UsIHUpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yNDE5LDEwICsyNDEwLDIxIEBACiAgICAgICAgVGhlIHF1b3RpZW50IHogaGFzIHRoZSBzaWduIG9mIGEqYjsKICAgICAgICB0aGUgcmVtYWluZGVyIHIgaGFzIHRoZSBzaWduIG9mIGEsCiAgICAgICAgc28gYSA9IGIqeiArIHIuICovCi0gICAgaWYgKChQeV9TSVpFKGEpIDwgMCkgIT0gKFB5X1NJWkUoYikgPCAwKSkKLSAgICAgICAgTkVHQVRFKHopOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKQotICAgICAgICBORUdBVEUoKnByZW0pOworICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqcHJlbSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5X1NJWkUoYSkgPCAwICYmIFB5X1NJWkUoKnByZW0pICE9IDApIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUocHJlbSk7CisgICAgICAgIGlmICgqcHJlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoeik7CisgICAgICAgICAgICBQeV9DTEVBUigqcHJlbSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CiAgICAgKnBkaXYgPSBtYXliZV9zbWFsbF9sb25nKHopOwogICAgIHJldHVybiAwOwogfQpAQCAtMjY5OCw3ICsyNzAwLDcgQEAKICAgICB4ID0gX1B5TG9uZ19GcmV4cCgoUHlMb25nT2JqZWN0ICopdiwgJmV4cG9uZW50KTsKICAgICBpZiAoKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB8fCBleHBvbmVudCA+IERCTF9NQVhfRVhQKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CiAgICAgICAgIHJldHVybiAtMS4wOwogICAgIH0KICAgICByZXR1cm4gbGRleHAoeCwgKGludClleHBvbmVudCk7CkBAIC0yOTE4LDggKzI5MjAsMTEgQEAKICAgICAgICAgYm9ycm93ICY9IDE7IC8qIEtlZXAgb25seSBvbmUgc2lnbiBiaXQgKi8KICAgICB9CiAgICAgYXNzZXJ0KGJvcnJvdyA9PSAwKTsKLSAgICBpZiAoc2lnbiA8IDApCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICBpZiAoc2lnbiA8IDApIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKIH0KIApAQCAtMzA4Niw3ICszMDkxLDcgQEAKICAgICBQeV9zc2l6ZV90IHNpemVfbG8sIHNpemVfaGk7CiAgICAgY29uc3QgUHlfc3NpemVfdCBzaXplX24gPSBBQlMoUHlfU0laRShuKSk7CiAKLSAgICBzaXplX2xvID0gTUlOKHNpemVfbiwgc2l6ZSk7CisgICAgc2l6ZV9sbyA9IFB5X01JTihzaXplX24sIHNpemUpOwogICAgIHNpemVfaGkgPSBzaXplX24gLSBzaXplX2xvOwogCiAgICAgaWYgKChoaSA9IF9QeUxvbmdfTmV3KHNpemVfaGkpKSA9PSBOVUxMKQpAQCAtMzM1Nyw3ICszMzYyLDcgQEAKICAgICBuYmRvbmUgPSAwOwogICAgIHdoaWxlIChic2l6ZSA+IDApIHsKICAgICAgICAgUHlMb25nT2JqZWN0ICpwcm9kdWN0OwotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IG5idG91c2UgPSBNSU4oYnNpemUsIGFzaXplKTsKKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gUHlfTUlOKGJzaXplLCBhc2l6ZSk7CiAKICAgICAgICAgLyogTXVsdGlwbHkgdGhlIG5leHQgc2xpY2Ugb2YgYiBieSBhLiAqLwogICAgICAgICBtZW1jcHkoYnNsaWNlLT5vYl9kaWdpdCwgYi0+b2JfZGlnaXQgKyBuYmRvbmUsCkBAIC0zNDEwLDggKzM0MTUsMTEgQEAKIAogICAgIHogPSBrX211bChhLCBiKTsKICAgICAvKiBOZWdhdGUgaWYgZXhhY3RseSBvbmUgb2YgdGhlIGlucHV0cyBpcyBuZWdhdGl2ZS4gKi8KLSAgICBpZiAoKChQeV9TSVpFKGEpIF4gUHlfU0laRShiKSkgPCAwKSAmJiB6KQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXo7CiB9CiAKQEAgLTM2NDgsNyArMzY1Niw3IEBACiAgICAgICAgIGdvdG8gdW5kZXJmbG93X29yX3plcm87CiAKICAgICAvKiBDaG9vc2UgdmFsdWUgZm9yIHNoaWZ0OyBzZWUgY29tbWVudHMgZm9yIHN0ZXAgMSBhYm92ZS4gKi8KLSAgICBzaGlmdCA9IE1BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOworICAgIHNoaWZ0ID0gUHlfTUFYKGRpZmYsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRyAtIDI7CiAKICAgICBpbmV4YWN0ID0gMDsKIApAQCAtMzcxOSw3ICszNzI3LDcgQEAKICAgICB4X2JpdHMgPSAoeF9zaXplLTEpKlB5TG9uZ19TSElGVCtiaXRzX2luX2RpZ2l0KHgtPm9iX2RpZ2l0W3hfc2l6ZS0xXSk7CiAKICAgICAvKiBUaGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMgdGhhdCBoYXZlIHRvIGJlIHJvdW5kZWQgYXdheS4gKi8KLSAgICBleHRyYV9iaXRzID0gTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CisgICAgZXh0cmFfYml0cyA9IFB5X01BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOwogICAgIGFzc2VydChleHRyYV9iaXRzID09IDIgfHwgZXh0cmFfYml0cyA9PSAzKTsKIAogICAgIC8qIFJvdW5kIGJ5IGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgbG93IGRpZ2l0IG9mIHguICovCkBAIC0zODU4LDcgKzM4NjYsOSBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGMpOwogICAgICAgICAgICAgYyA9IHRlbXA7CiAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKLSAgICAgICAgICAgIE5FR0FURShjKTsKKyAgICAgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZjKTsKKyAgICAgICAgICAgIGlmIChjID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGlmIG1vZHVsdXMgPT0gMToKQEAgLTM5NjQsMTAgKzM5NzQsNyBAQAogICAgIGdvdG8gRG9uZTsKIAogICBFcnJvcjoKLSAgICBpZiAoeiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih6KTsKLSAgICAgICAgeiA9IE5VTEw7Ci0gICAgfQorICAgIFB5X0NMRUFSKHopOwogICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICBEb25lOgogICAgIGlmIChQeV9TSVpFKGIpID4gRklWRUFSWV9DVVRPRkYpIHsKQEAgLTQwOTcsMTAgKzQxMDQsMTAgQEAKIAogICAgIHNoaWZ0YnkgPSBQeUxvbmdfQXNTc2l6ZV90KChQeU9iamVjdCAqKWIpOwogICAgIGlmIChzaGlmdGJ5ID09IC0xTCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNoaWZ0YnkgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibmVnYXRpdmUgc2hpZnQgY291bnQiKTsKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiB3b3Jkc2hpZnQsIHJlbXNoaWZ0ID0gZGl2bW9kKHNoaWZ0YnksIFB5TG9uZ19TSElGVCkgKi8KICAgICB3b3Jkc2hpZnQgPSBzaGlmdGJ5IC8gUHlMb25nX1NISUZUOwpAQCAtNDExMiw5ICs0MTE5LDExIEBACiAgICAgICAgICsrbmV3c2l6ZTsKICAgICB6ID0gX1B5TG9uZ19OZXcobmV3c2l6ZSk7CiAgICAgaWYgKHogPT0gTlVMTCkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7Ci0gICAgaWYgKFB5X1NJWkUoYSkgPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeV9TSVpFKGEpIDwgMCkgeworICAgICAgICBhc3NlcnQoUHlfUkVGQ05UKHopID09IDEpOworICAgICAgICBQeV9TSVpFKHopID0gLVB5X1NJWkUoeik7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB3b3Jkc2hpZnQ7IGkrKykKICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSAwOwogICAgIGFjY3VtID0gMDsKQEAgLTQxMjgsNyArNDEzNyw2IEBACiAgICAgZWxzZQogICAgICAgICBhc3NlcnQoIWFjY3VtKTsKICAgICB6ID0gbG9uZ19ub3JtYWxpemUoeik7Ci0gIGxzaGlmdF9lcnJvcjoKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG1heWJlX3NtYWxsX2xvbmcoeik7CiB9CiAKQEAgLTQxNTMsNyArNDE2MSw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX2JpdHdpc2UoUHlMb25nT2JqZWN0ICphLAotICAgICAgICAgICAgIGludCBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KKyAgICAgICAgICAgICBjaGFyIG9wLCAgLyogJyYnLCAnfCcsICdeJyAqLwogICAgICAgICAgICAgIFB5TG9uZ09iamVjdCAqYikKIHsKICAgICBpbnQgbmVnYSwgbmVnYiwgbmVnejsKQEAgLTQzMjgsOCArNDMzNiw3IEBACiBsb25nX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqb2Jhc2UgPSBOVUxMLCAqeCA9IE5VTEw7Ci0gICAgbG9uZyBiYXNlOwotICAgIGludCBvdmVyZmxvdzsKKyAgICBQeV9zc2l6ZV90IGJhc2U7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ4IiwgImJhc2UiLCAwfTsKIAogICAgIGlmICh0eXBlICE9ICZQeUxvbmdfVHlwZSkKQEAgLTQzNDgsMTAgKzQzNTUsMTAgQEAKICAgICBpZiAob2Jhc2UgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5TnVtYmVyX0xvbmcoeCk7CiAKLSAgICBiYXNlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iYXNlLCAmb3ZlcmZsb3cpOworICAgIGJhc2UgPSBQeU51bWJlcl9Bc1NzaXplX3Qob2Jhc2UsIE5VTEwpOwogICAgIGlmIChiYXNlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChvdmVyZmxvdyB8fCAoYmFzZSAhPSAwICYmIGJhc2UgPCAyKSB8fCBiYXNlID4gMzYpIHsKKyAgICBpZiAoKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImludCgpIGJhc2UgbXVzdCBiZSA+PSAyIGFuZCA8PSAzNiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ0MzIsNyArNDQzOSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5TG9uZ19Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTUwODksOCArNTA5NiwxMCBAQAogICAgIH0KICNlbmRpZgogICAgIC8qIGluaXRpYWxpemUgaW50X2luZm8gKi8KLSAgICBpZiAoSW50X0luZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYyk7CisgICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZJbnRfSW5mb1R5cGUsICZpbnRfaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICByZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCmluZGV4IDE4OWFmODguLmNiNjQ0YjggMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwpAQCAtMjQwMiw3ICsyNDAyLDcgQEAKIAogLyogQXMgc2VxdWVuY2UgKi8KIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBtZW1vcnlfYXNfc2VxdWVuY2UgPSB7Ci0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKyAgICAgICAgKGxlbmZ1bmMpbWVtb3J5X2xlbmd0aCwgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KICAgICAgICAgKHNzaXplYXJnZnVuYyltZW1vcnlfaXRlbSwgICAgICAgIC8qIHNxX2l0ZW0gKi8KQEAgLTI3NDIsNyArMjc0Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDYW4ndCBmYWlsICovCi0gICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKCh1bnNpZ25lZCBjaGFyICopbWVtLCB2aWV3LT5sZW4pOworICAgICAgICBzZWxmLT5oYXNoID0gX1B5X0hhc2hCeXRlcyhtZW0sIHZpZXctPmxlbik7CiAKICAgICAgICAgaWYgKG1lbSAhPSB2aWV3LT5idWYpCiAgICAgICAgICAgICBQeU1lbV9GcmVlKG1lbSk7CmRpZmYgLS1naXQgYS9PYmplY3RzL21ldGhvZG9iamVjdC5jIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwppbmRleCBmMDY4NWRkLi41NWE3ZDZhIDEwMDY0NAotLS0gYS9PYmplY3RzL21ldGhvZG9iamVjdC5jCisrKyBiL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKQEAgLTEzLDYgKzEzLDE1IEBACiAjZGVmaW5lIFB5Q0Z1bmN0aW9uX01BWEZSRUVMSVNUIDI1NgogI2VuZGlmCiAKKy8qIHVuZGVmaW5lIG1hY3JvIHRyYW1wb2xpbmUgdG8gUHlDRnVuY3Rpb25fTmV3RXggKi8KKyN1bmRlZiBQeUNGdW5jdGlvbl9OZXcKKworUHlPYmplY3QgKgorUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KG1sLCBzZWxmLCBOVUxMKTsKK30KKwogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fTmV3RXgoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZSkKIHsKQEAgLTcwLDIzICs3OSwzNCBAQAogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fQ2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KQogeworI2RlZmluZSBDSEVDS19SRVNVTFQocmVzKSBhc3NlcnQocmVzICE9IE5VTEwgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKwogICAgIFB5Q0Z1bmN0aW9uT2JqZWN0KiBmID0gKFB5Q0Z1bmN0aW9uT2JqZWN0KilmdW5jOwogICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZnVuYyk7CiAgICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9HRVRfU0VMRihmdW5jKTsKKyAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIHN3aXRjaCAoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgfihNRVRIX0NMQVNTIHwgTUVUSF9TVEFUSUMgfCBNRVRIX0NPRVhJU1QpKSB7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1M6Ci0gICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKKyAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFM6Ci0gICAgICAgIHJldHVybiAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmcsIGt3KTsKKyAgICAgICAgcmVzID0gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICByZXR1cm4gcmVzOwogICAgIGNhc2UgTUVUSF9OT0FSR1M6CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtOTYsOCArMTE2LDExIEBACiAgICAgY2FzZSBNRVRIX086CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkgeworICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtMTE0LDYgKzEzNyw4IEBACiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKICAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CisKKyN1bmRlZiBDSEVDS19SRVNVTFQKIH0KIAogLyogTWV0aG9kcyAodGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZHMsIHRoYXQgaXMpICovCkBAIC0xMzUsMTQgKzE2MCw5NCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorbWV0aF9yZWR1Y2UoUHlDRnVuY3Rpb25PYmplY3QgKm0pCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgaWYgKG0tPm1fc2VsZiA9PSBOVUxMIHx8IFB5TW9kdWxlX0NoZWNrKG0tPm1fc2VsZikpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhtLT5tX21sLT5tbF9uYW1lKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPcykiLCBnZXRhdHRyLCBtLT5tX3NlbGYsIG0tPm1fbWwtPm1sX25hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWV0aF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW1ldGhfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCisvKgorICogZmluZHMgdGhlIGRvY3N0cmluZydzIGludHJvc3BlY3Rpb24gc2lnbmF0dXJlLgorICogaWYgcHJlc2VudCwgcmV0dXJucyBhIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIGZpcnN0ICcoJy4KKyAqIG90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3NpZ25hdHVyZShQeUNGdW5jdGlvbk9iamVjdCAqbSkKK3sKKyAgICBjb25zdCBjaGFyICp0cmFjZSA9IG0tPm1fbWwtPm1sX2RvYzsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gbS0+bV9tbC0+bWxfbmFtZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGlmICghdHJhY2UgfHwgIW5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBpZiAoc3RybmNtcCh0cmFjZSwgbmFtZSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHJhY2UgKz0gbGVuZ3RoOworICAgIGlmICgqdHJhY2UgIT0gJygnKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdHJhY2U7Cit9CisKKy8qCisgKiBza2lwcyB0byB0aGUgZW5kIG9mIHRoZSBkb2NzdHJpbmcncyBpbnN0cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX3NpZ25hdHVyZShjb25zdCBjaGFyICp0cmFjZSkKK3sKKyAgICB3aGlsZSAoKnRyYWNlICYmICp0cmFjZSAhPSAnXG4nKQorICAgICAgICB0cmFjZSsrOworICAgIHJldHVybiB0cmFjZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfZW9scyhjb25zdCBjaGFyICp0cmFjZSkKK3sKKyAgICB3aGlsZSAoKnRyYWNlID09ICdcbicpCisgICAgICAgIHRyYWNlKys7CisgICAgcmV0dXJuIHRyYWNlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aF9nZXRfX3RleHRfc2lnbmF0dXJlX18oUHlDRnVuY3Rpb25PYmplY3QgKm0sIHZvaWQgKmNsb3N1cmUpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBmaW5kX3NpZ25hdHVyZShtKTsKKyAgICBjb25zdCBjaGFyICp0cmFjZTsKKworICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICB0cmFjZSA9IHNraXBfc2lnbmF0dXJlKHN0YXJ0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCB0cmFjZSAtIHN0YXJ0KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhfZ2V0X19kb2NfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjb25zdCBjaGFyICpkb2MgPSBtLT5tX21sLT5tbF9kb2M7CisgICAgY29uc3QgY2hhciAqZG9jID0gZmluZF9zaWduYXR1cmUobSk7CiAKLSAgICBpZiAoZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAoZG9jKQorICAgICAgICBkb2MgPSBza2lwX2VvbHMoc2tpcF9zaWduYXR1cmUoZG9jKSk7CisgICAgZWxzZQorICAgICAgICBkb2MgPSBtLT5tX21sLT5tbF9kb2M7CisgICAgCisgICAgaWYgKCFkb2MpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxMSw2ICszMTYsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19uYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fcXVhbG5hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3NlbGZfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3NlbGZfXywgTlVMTCwgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTMwOCw3ICs0MTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aF9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aF9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM0NiwxNyArNDUyLDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5Q0Z1bmN0aW9uT2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeUNGdW5jdGlvbk9iamVjdCkpOwogfQotCi0vKiBQeUNGdW5jdGlvbl9OZXcoKSBpcyBub3cganVzdCBhIG1hY3JvIHRoYXQgY2FsbHMgUHlDRnVuY3Rpb25fTmV3RXgoKSwKLSAgIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIEFQSSBzbyB3ZSBuZWVkIHRvIGtlZXAgYSBmdW5jdGlvbiBhcm91bmQgdGhhdAotICAgZXhpc3RpbmcgQyBleHRlbnNpb25zIGNhbiBjYWxsLgotKi8KLQotI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKiwgUHlPYmplY3QgKik7Ci0KLVB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQotewotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9PYmplY3RzL21vZHVsZW9iamVjdC5jIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwppbmRleCAyZjJiZDM2Li5kNTk0NzVlIDEwMDY0NAotLS0gYS9PYmplY3RzL21vZHVsZW9iamVjdC5jCisrKyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKQEAgLTExLDYgKzExLDggQEAKICAgICBQeU9iamVjdCAqbWRfZGljdDsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKm1kX2RlZjsKICAgICB2b2lkICptZF9zdGF0ZTsKKyAgICBQeU9iamVjdCAqbWRfd2Vha2xpc3Q7CisgICAgUHlPYmplY3QgKm1kX25hbWU7ICAvKiBmb3IgbG9nZ2luZyBwdXJwb3NlcyBhZnRlciBtZF9kaWN0IGlzIGNsZWFyZWQgKi8KIH0gUHlNb2R1bGVPYmplY3Q7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBtb2R1bGVfbWVtYmVyc1tdID0gewpAQCAtMjYsNiArMjgsMzUgQEAKIH07CiAKIAorc3RhdGljIGludAorbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKKyAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCit7CisgICAgaWYgKG1kX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChkb2MgPT0gTlVMTCkKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobmFtZSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZC0+bWRfbmFtZSk7CisgICAgICAgIG1vZC0+bWRfbmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogUHlPYmplY3QgKgogUHlNb2R1bGVfTmV3T2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewpAQCAtMzUsMTQgKzY2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG0tPm1kX2RlZiA9IE5VTEw7CiAgICAgbS0+bWRfc3RhdGUgPSBOVUxMOworICAgIG0tPm1kX3dlYWtsaXN0ID0gTlVMTDsKKyAgICBtLT5tZF9uYW1lID0gTlVMTDsKICAgICBtLT5tZF9kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChtLT5tZF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19kb2NfXyIsIFB5X05vbmUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBtLT5tZF9kaWN0LCBuYW1lLCBOVUxMKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlPYmplY3RfR0NfVHJhY2sobSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW07CkBAIC0zNDcsOSArMzc0LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgbS0+bWRfZGljdCA9IGRpY3Q7CiAgICAgfQotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19uYW1lX18iLCBuYW1lKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl9fZG9jX18iLCBkb2MpIDwgMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBkaWN0LCBuYW1lLCBkb2MpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQpAQCAtMzU4LDEyICszODMsMTUgQEAKIG1vZHVsZV9kZWFsbG9jKFB5TW9kdWxlT2JqZWN0ICptKQogewogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobSk7CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIG0tPm1kX25hbWUpIHsKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGRlc3Ryb3kgJVNcbiIsIG0tPm1kX25hbWUpOworICAgIH0KKyAgICBpZiAobS0+bWRfd2Vha2xpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbSk7CiAgICAgaWYgKG0tPm1kX2RlZiAmJiBtLT5tZF9kZWYtPm1fZnJlZSkKICAgICAgICAgbS0+bWRfZGVmLT5tX2ZyZWUobSk7Ci0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIoKFB5T2JqZWN0ICopbSk7Ci0gICAgICAgIFB5X0RFQ1JFRihtLT5tZF9kaWN0KTsKLSAgICB9CisgICAgUHlfWERFQ1JFRihtLT5tZF9kaWN0KTsKKyAgICBQeV9YREVDUkVGKG0tPm1kX25hbWUpOwogICAgIGlmIChtLT5tZF9zdGF0ZSAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GUkVFKG0tPm1kX3N0YXRlKTsKICAgICBQeV9UWVBFKG0pLT50cF9mcmVlKChQeU9iamVjdCAqKW0pOwpAQCAtMzcyLDU1ICs0MDAsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtb2R1bGVfcmVwcihQeU1vZHVsZU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqbmFtZSwgKmZpbGVuYW1lLCAqcmVwciwgKmxvYWRlciA9IE5VTEw7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogCi0gICAgLyogU2VlIGlmIHRoZSBtb2R1bGUgaGFzIGFuIF9fbG9hZGVyX18uICBJZiBpdCBkb2VzLCBnaXZlIHRoZSBsb2FkZXIgdGhlCi0gICAgICogZmlyc3Qgc2hvdCBhdCBwcm9kdWNpbmcgYSByZXByIGZvciB0aGUgbW9kdWxlLgotICAgICAqLwotICAgIGlmIChtLT5tZF9kaWN0ICE9IE5VTEwpIHsKLSAgICAgICAgbG9hZGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbG9hZGVyX18iKTsKLSAgICB9Ci0gICAgaWYgKGxvYWRlciAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGxvYWRlciwgIm1vZHVsZV9yZXByIiwgIihPKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKW0sIE5VTEwpOwotICAgICAgICBpZiAocmVwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHJlcHI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtKSBkaWQgbm90IHByb3ZpZGUgdXMgd2l0aCBhIHJlcHIuICBOZXh0LCBzZWUgaWYKLSAgICAgKiB0aGUgbW9kdWxlIGhhcyBhbiBfX2ZpbGVfXy4gIElmIGl0IGRvZXNuJ3QgdGhlbiB1c2UgcmVwcihfX2xvYWRlcl9fKSBpZgotICAgICAqIGl0IGV4aXN0cywgb3RoZXJ3aXNlLCBqdXN0IHVzZSBtb2R1bGUuX19uYW1lX18uCi0gICAgICovCi0gICAgbmFtZSA9IFB5TW9kdWxlX0dldE5hbWVPYmplY3QoKFB5T2JqZWN0ICopbSk7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCI/IiwgMSk7Ci0gICAgICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZmlsZW5hbWUgPSBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAvKiBUaGVyZSdzIG5vIG0uX19maWxlX18sIHNvIGlmIHRoZXJlIHdhcyBhbiBfX2xvYWRlcl9fLCB1c2UgdGhhdCBpbgotICAgICAgICAgKiB0aGUgcmVwciwgb3RoZXJ3aXNlLCB0aGUgb25seSB0aGluZyB5b3UgY2FuIHVzZSBpcyBtLl9fbmFtZV9fCi0gICAgICAgICAqLwotICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUj4iLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUiAoJVIpPiIsIG5hbWUsIGxvYWRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogRmluYWxseSwgdXNlIG0uX19maWxlX18gKi8KLSAgICBlbHNlIHsKLSAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSIGZyb20gJVI+IiwgbmFtZSwgZmlsZW5hbWUpOwotICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwotICAgIH0KLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmV0dXJuIHJlcHI7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoaW50ZXJwLT5pbXBvcnRsaWIsICJfbW9kdWxlX3JlcHIiLCAiTyIsIG0pOwogfQogCiBzdGF0aWMgaW50CkBAIC01MDksNyArNDkyLDcgQEAKICAgICAodHJhdmVyc2Vwcm9jKW1vZHVsZV90cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbW9kdWxlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YoUHlNb2R1bGVPYmplY3QsIG1kX3dlYWtsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtb2R1bGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCmluZGV4IGZmMjc4ZDMuLjcyMGFjMGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYwpAQCAtNDQsNyArNDQsNyBAQAogICAgIGlmIChhcmdzICE9IE5VTEwpIHsKICAgICAgICAgUHlfc3NpemVfdCBhcmdjb3VudCA9IFB5T2JqZWN0X1NpemUoYXJncyk7CiAgICAgICAgIGlmIChhcmdjb3VudCA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnY291bnQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGVsc2UgaWYgKGFyZ2NvdW50ID4gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIm5vIHBvc2l0aW9uYWwgYXJndW1lbnRzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC02NiwxNiArNjYsMjAgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotbmFtZXNwYWNlX3JlcHIoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK25hbWVzcGFjZV9yZXByKFB5T2JqZWN0ICpucykKIHsKICAgICBpbnQgaSwgbG9vcF9lcnJvciA9IDA7CiAgICAgUHlPYmplY3QgKnBhaXJzID0gTlVMTCwgKmQgPSBOVUxMLCAqa2V5cyA9IE5VTEwsICprZXlzX2l0ZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKnNlcGFyYXRvciwgKnBhaXJzcmVwciwgKnJlcHIgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBuYW1lOwogCi0gICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKilucyk7CisgICAgbmFtZSA9IChQeV9UWVBFKG5zKSA9PSAmX1B5TmFtZXNwYWNlX1R5cGUpID8gIm5hbWVzcGFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBucy0+b2JfdHlwZS0+dHBfbmFtZTsKKworICAgIGkgPSBQeV9SZXByRW50ZXIobnMpOwogICAgIGlmIChpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIm5hbWVzcGFjZSguLi4pIikgOiBOVUxMOworICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoLi4uKSIsIG5hbWUpIDogTlVMTDsKICAgICB9CiAKICAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7CkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChrZXlzX2l0ZXIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeVVuaWNvZGVfR0VUX1NJWkUoa2V5KSA+IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdGVtOwogCiAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGQsIGtleSk7CkBAIC0xMjcsOCArMTMxLDcgQEAKICAgICBpZiAocGFpcnNyZXByID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUHlPYmplY3QgKilucyktPm9iX3R5cGUtPnRwX25hbWUsIHBhaXJzcmVwcik7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUykiLCBuYW1lLCBwYWlyc3JlcHIpOwogICAgIFB5X0RFQ1JFRihwYWlyc3JlcHIpOwogCiBlcnJvcjoKQEAgLTEzNiw3ICsxMzksNyBAQAogICAgIFB5X1hERUNSRUYoZCk7CiAgICAgUHlfWERFQ1JFRihrZXlzKTsKICAgICBQeV9YREVDUkVGKGtleXNfaXRlcik7Ci0gICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW5zKTsKKyAgICBQeV9SZXByTGVhdmUobnMpOwogCiAgICAgcmV0dXJuIHJlcHI7CiB9CkBAIC0xNTgsMTQgKzE2MSw0OSBAQAogfQogCiAKK3N0YXRpYyBQeU9iamVjdCAqCituYW1lc3BhY2VfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQoreworICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKHNlbGYsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkgJiYKKyAgICAgICAgICAgIFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZSgoKF9QeU5hbWVzcGFjZU9iamVjdCAqKXNlbGYpLT5uc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9QeU5hbWVzcGFjZU9iamVjdCAqKW90aGVyKS0+bnNfZGljdCwgb3ApOworICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworfQorCisKK1B5RG9jX1NUUlZBUihuYW1lc3BhY2VfcmVkdWNlX19kb2NfXywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yZWR1Y2UoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXJncyA9IFB5VHVwbGVfTmV3KDApOworCisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjaygzLCAoUHlPYmplY3QgKilQeV9UWVBFKG5zKSwgYXJncywgbnMtPm5zX2RpY3QpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBuYW1lc3BhY2VfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiluYW1lc3BhY2VfcmVkdWNlLCBNRVRIX05PQVJHUywKKyAgICAgbmFtZXNwYWNlX3JlZHVjZV9fZG9jX199LAorICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCiBQeURvY19TVFJWQVIobmFtZXNwYWNlX2RvYywKICJBIHNpbXBsZSBhdHRyaWJ1dGUtYmFzZWQgbmFtZXNwYWNlLlxuXAogXG5cCi1uYW1lc3BhY2UoKiprd2FyZ3MpIik7CitTaW1wbGVOYW1lc3BhY2UoKiprd2FyZ3MpIik7CiAKIFB5VHlwZU9iamVjdCBfUHlOYW1lc3BhY2VfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgICJuYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJ0eXBlcy5TaW1wbGVOYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihfUHlOYW1lc3BhY2VPYmplY3QpLCAgICAgICAgICAgICAgICAgLyogdHBfc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAoZGVzdHJ1Y3RvciluYW1lc3BhY2VfZGVhbGxvYywgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE4OCwxMSArMjI2LDExIEBACiAgICAgbmFtZXNwYWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKW5hbWVzcGFjZV90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbmFtZXNwYWNlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBuYW1lc3BhY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBuYW1lc3BhY2VfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBuYW1lc3BhY2VfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggOTQ5ZTdkYy4uMTE3MThhYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC04LDYgKzgsMTIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKFB5X1JlcHIpOworX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGlyX18pOworX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworCiAjaWZkZWYgUHlfUkVGX0RFQlVHCiBQeV9zc2l6ZV90IF9QeV9SZWZUb3RhbDsKIApAQCAtMjIsNyArMjgsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjYxLDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDEyLDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NTUsMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIHJlcyA9ICgqdi0+b2JfdHlwZS0+dHBfcmVwcikodik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQxOSw2ICs1MDUsMTMgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9SZXByKHYpOwogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9TdHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgLyogSXQgaXMgcG9zc2libGUgZm9yIGEgdHlwZSB0byBoYXZlIGEgdHBfc3RyIHJlcHJlc2VudGF0aW9uIHRoYXQgbG9vcHMKICAgICAgICBpbmZpbml0ZWx5LiAqLwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSBzdHIgb2YgYW4gb2JqZWN0IikpCkBAIC00NTEsNiArNTQ0LDkgQEAKICAgICBpZiAocmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkocmVwcikpCisgICAgICAgIHJldHVybiByZXByOworCiAgICAgLyogcmVwciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgUHlVbmljb2RlIG9iamVjdCBieSBQeU9iamVjdF9SZXByICovCiAgICAgYXNjaWkgPSBfUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcocmVwciwgImJhY2tzbGFzaHJlcGxhY2UiKTsKICAgICBQeV9ERUNSRUYocmVwcik7CkBAIC00NzAsNyArNTY2LDYgQEAKIFB5T2JqZWN0X0J5dGVzKFB5T2JqZWN0ICp2KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQsICpmdW5jOwotICAgIF9QeV9JREVOVElGSUVSKF9fYnl0ZXNfXyk7CiAKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCI8TlVMTD4iKTsKQEAgLTYzNiwxNTAgKzczMSw2IEBACiAgICAgcmV0dXJuIG9rOwogfQogCi0vKiBTZXQgb2YgaGFzaCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBoZWxwIG1haW50YWluaW5nIHRoZSBpbnZhcmlhbnQgdGhhdAotICAgIGlmIGE9PWIgdGhlbiBoYXNoKGEpPT1oYXNoKGIpCi0KLSAgIEFsbCB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgKF9QeV9IYXNoKigpKSByZXR1cm4gIi0xIiB0byBzaWduaWZ5IGFuIGVycm9yLgotKi8KLQotLyogRm9yIG51bWVyaWMgdHlwZXMsIHRoZSBoYXNoIG9mIGEgbnVtYmVyIHggaXMgYmFzZWQgb24gdGhlIHJlZHVjdGlvbgotICAgb2YgeCBtb2R1bG8gdGhlIHByaW1lIFAgPSAyKipfUHlIQVNIX0JJVFMgLSAxLiAgSXQncyBkZXNpZ25lZCBzbyB0aGF0Ci0gICBoYXNoKHgpID09IGhhc2goeSkgd2hlbmV2ZXIgeCBhbmQgeSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwsIGV2ZW4gaWYKLSAgIHggYW5kIHkgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCi0KLSAgIEEgcXVpY2sgc3VtbWFyeSBvZiB0aGUgaGFzaGluZyBzdHJhdGVneToKLQotICAgKDEpIEZpcnN0IGRlZmluZSB0aGUgJ3JlZHVjdGlvbiBvZiB4IG1vZHVsbyBQJyBmb3IgYW55IHJhdGlvbmFsCi0gICBudW1iZXIgeDsgdGhpcyBpcyBhIHN0YW5kYXJkIGV4dGVuc2lvbiBvZiB0aGUgdXN1YWwgbm90aW9uIG9mCi0gICByZWR1Y3Rpb24gbW9kdWxvIFAgZm9yIGludGVnZXJzLiAgSWYgeCA9PSBwL3EgKHdyaXR0ZW4gaW4gbG93ZXN0Ci0gICB0ZXJtcyksIHRoZSByZWR1Y3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlZHVjdGlvbiBvZiBwIHRpbWVzCi0gICB0aGUgaW52ZXJzZSBvZiB0aGUgcmVkdWN0aW9uIG9mIHEsIGFsbCBtb2R1bG8gUDsgaWYgcSBpcyBleGFjdGx5Ci0gICBkaXZpc2libGUgYnkgUCB0aGVuIGRlZmluZSB0aGUgcmVkdWN0aW9uIHRvIGJlIGluZmluaXR5LiAgU28gd2UndmUKLSAgIGdvdCBhIHdlbGwtZGVmaW5lZCBtYXAKLQotICAgICAgcmVkdWNlIDogeyByYXRpb25hbCBudW1iZXJzIH0gLT4geyAwLCAxLCAyLCAuLi4sIFAtMSwgaW5maW5pdHkgfS4KLQotICAgKDIpIE5vdyBmb3IgYSByYXRpb25hbCBudW1iZXIgeCwgZGVmaW5lIGhhc2goeCkgYnk6Ci0KLSAgICAgIHJlZHVjZSh4KSAgIGlmIHggPj0gMAotICAgICAgLXJlZHVjZSgteCkgaWYgeCA8IDAKLQotICAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uIGlzIGluZmluaXR5ICh0aGlzIGlzIGltcG9zc2libGUgZm9yCi0gICBpbnRlZ2VycywgZmxvYXRzIGFuZCBEZWNpbWFscykgdGhlbiB1c2UgdGhlIHByZWRlZmluZWQgaGFzaCB2YWx1ZQotICAgX1B5SEFTSF9JTkYgZm9yIHggPj0gMCwgb3IgLV9QeUhBU0hfSU5GIGZvciB4IDwgMCwgaW5zdGVhZC4KLSAgIF9QeUhBU0hfSU5GLCAtX1B5SEFTSF9JTkYgYW5kIF9QeUhBU0hfTkFOIGFyZSBhbHNvIHVzZWQgZm9yIHRoZQotICAgaGFzaGVzIG9mIGZsb2F0IGFuZCBEZWNpbWFsIGluZmluaXRpZXMgYW5kIG5hbnMuCi0KLSAgIEEgc2VsbGluZyBwb2ludCBmb3IgdGhlIGFib3ZlIHN0cmF0ZWd5IGlzIHRoYXQgaXQgbWFrZXMgaXQgcG9zc2libGUKLSAgIHRvIGNvbXB1dGUgaGFzaGVzIG9mIGRlY2ltYWwgYW5kIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXJzCi0gICBlZmZpY2llbnRseSwgZXZlbiBpZiB0aGUgZXhwb25lbnQgb2YgdGhlIGJpbmFyeSBvciBkZWNpbWFsIG51bWJlcgotICAgaXMgbGFyZ2UuICBUaGUga2V5IHBvaW50IGlzIHRoYXQKLQotICAgICAgcmVkdWNlKHggKiB5KSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoeSkgKG1vZHVsbyBfUHlIQVNIX01PRFVMVVMpCi0KLSAgIHByb3ZpZGVkIHRoYXQge3JlZHVjZSh4KSwgcmVkdWNlKHkpfSAhPSB7MCwgaW5maW5pdHl9LiAgVGhlIHJlZHVjdGlvbiBvZiBhCi0gICBiaW5hcnkgb3IgZGVjaW1hbCBmbG9hdCBpcyBuZXZlciBpbmZpbml0eSwgc2luY2UgdGhlIGRlbm9taW5hdG9yIGlzIGEgcG93ZXIKLSAgIG9mIDIgKGZvciBiaW5hcnkpIG9yIGEgZGl2aXNvciBvZiBhIHBvd2VyIG9mIDEwIChmb3IgZGVjaW1hbCkuICBTbyB3ZSBoYXZlLAotICAgZm9yIG5vbm5lZ2F0aXZlIHgsCi0KLSAgICAgIHJlZHVjZSh4ICogMioqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDIqKmUpICUgX1B5SEFTSF9NT0RVTFVTCi0KLSAgICAgIHJlZHVjZSh4ICogMTAqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgxMCoqZSkgJSBfUHlIQVNIX01PRFVMVVMKLQotICAgYW5kIHJlZHVjZSgxMCoqZSkgY2FuIGJlIGNvbXB1dGVkIGVmZmljaWVudGx5IGJ5IHRoZSB1c3VhbCBtb2R1bGFyCi0gICBleHBvbmVudGlhdGlvbiBhbGdvcml0aG0uICBGb3IgcmVkdWNlKDIqKmUpIGl0J3MgZXZlbiBiZXR0ZXI6IHNpbmNlCi0gICBQIGlzIG9mIHRoZSBmb3JtIDIqKm4tMSwgcmVkdWNlKDIqKmUpIGlzIDIqKihlIG1vZCBuKSwgYW5kIG11bHRpcGxpY2F0aW9uCi0gICBieSAyKiooZSBtb2QgbikgbW9kdWxvIDIqKm4tMSBqdXN0IGFtb3VudHMgdG8gYSByb3RhdGlvbiBvZiBiaXRzLgotCi0gICAqLwotCi1QeV9oYXNoX3QKLV9QeV9IYXNoRG91YmxlKGRvdWJsZSB2KQotewotICAgIGludCBlLCBzaWduOwotICAgIGRvdWJsZSBtOwotICAgIFB5X3VoYXNoX3QgeCwgeTsKLQotICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7Ci0gICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKLSAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47Ci0gICAgfQotCi0gICAgbSA9IGZyZXhwKHYsICZlKTsKLQotICAgIHNpZ24gPSAxOwotICAgIGlmIChtIDwgMCkgewotICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgIG0gPSAtbTsKLSAgICB9Ci0KLSAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQotICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KLSAgICB4ID0gMDsKLSAgICB3aGlsZSAobSkgewotICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7Ci0gICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLwotICAgICAgICBlIC09IDI4OwotICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLwotICAgICAgICBtIC09IHk7Ci0gICAgICAgIHggKz0geTsKLSAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQotICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7Ci0gICAgfQotCi0gICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLwotICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7Ci0gICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKLQotICAgIHggPSB4ICogc2lnbjsKLSAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKLSAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOwotICAgIHJldHVybiAoUHlfaGFzaF90KXg7Ci19Ci0KLVB5X2hhc2hfdAotX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCi17Ci0gICAgUHlfaGFzaF90IHg7Ci0gICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7Ci0gICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAotICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCi0gICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOwotICAgIHggPSAoUHlfaGFzaF90KXk7Ci0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKLSAgICByZXR1cm4geDsKLX0KLQotUHlfaGFzaF90Ci1fUHlfSGFzaEJ5dGVzKHVuc2lnbmVkIGNoYXIgKnAsIFB5X3NzaXplX3QgbGVuKQotewotICAgIFB5X3VoYXNoX3QgeDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0KLSAgICAvKgotICAgICAgV2UgbWFrZSB0aGUgaGFzaCBvZiB0aGUgZW1wdHkgc3RyaW5nIGJlIDAsIHJhdGhlciB0aGFuIHVzaW5nCi0gICAgICAocHJlZml4IF4gc3VmZml4KSwgc2luY2UgdGhpcyBzbGlnaHRseSBvYmZ1c2NhdGVzIHRoZSBoYXNoIHNlY3JldAotICAgICovCi0jaWZkZWYgUHlfREVCVUcKLSAgICBhc3NlcnQoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpOwotI2VuZGlmCi0gICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnByZWZpeDsKLSAgICB4IF49IChQeV91aGFzaF90KSAqcCA8PCA3OwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIChQeV91aGFzaF90KSAqcCsrOwotICAgIHggXj0gKFB5X3VoYXNoX3QpIGxlbjsKLSAgICB4IF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5zdWZmaXg7Ci0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKLSAgICByZXR1cm4geDsKLX0KLQogUHlfaGFzaF90CiBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQoUHlPYmplY3QgKnYpCiB7CkBAIC03ODgsOCArNzM5LDYgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKLV9QeV9IYXNoU2VjcmV0X3QgX1B5X0hhc2hTZWNyZXQ7Ci0KIFB5X2hhc2hfdAogUHlPYmplY3RfSGFzaChQeU9iamVjdCAqdikKIHsKQEAgLTg1OSw3ICs4MDgsNiBAQAogewogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QqIGlzYWJzdHJhY3Q7Ci0gICAgX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOwogCiAgICAgaWYgKG9iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwMzIsOCArOTgwLDEyIEBACiBQeU9iamVjdCAqCiBfUHlPYmplY3RfR2V0QnVpbHRpbihjb25zdCBjaGFyICpuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2QsICphdHRyOwotICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYnVpbHRpbnMiKTsKKyAgICBQeU9iamVjdCAqbW9kX25hbWUsICptb2QsICphdHRyOworCisgICAgbW9kX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9idWlsdGlucyk7ICAgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAobW9kX25hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0KG1vZF9uYW1lKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGF0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZCwgbmFtZSk7CkBAIC0xMzE3LDEyICsxMjY5LDExIEBACiBfZGlyX2xvY2Fscyh2b2lkKQogewogICAgIFB5T2JqZWN0ICpuYW1lczsKLSAgICBQeU9iamVjdCAqbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIFB5T2JqZWN0ICpsb2NhbHM7CiAKLSAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKKyAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgaWYgKGxvY2FscyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBuYW1lcyA9IFB5TWFwcGluZ19LZXlzKGxvY2Fscyk7CiAgICAgaWYgKCFuYW1lcykKQEAgLTEzNDcsNyArMTI5OCw2IEBACiBfZGlyX29iamVjdChQeU9iamVjdCAqb2JqKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQsICpzb3J0ZWQ7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kaXJfXyk7CiAgICAgUHlPYmplY3QgKmRpcmZ1bmMgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICZQeUlkX19fZGlyX18pOwogCiAgICAgYXNzZXJ0KG9iaik7CkBAIC0xNTE1LDYgKzE0NjUsMTcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK05vdEltcGxlbWVudGVkX3JlZHVjZShQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbm90aW1wbGVtZW50ZWRfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilOb3RJbXBsZW1lbnRlZF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCiBub3RpbXBsZW1lbnRlZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSB8fCAoa3dhcmdzICYmIFB5RGljdF9TaXplKGt3YXJncykpKSB7CkBAIC0xNTI0LDEyICsxNDg1LDIxIEBACiAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogfQogCitzdGF0aWMgdm9pZAorbm90aW1wbGVtZW50ZWRfZGVhbGxvYyhQeU9iamVjdCogaWdub3JlKQoreworICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQsIGJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gU0VHViBpZgorICAgICAqIHdlIGFjY2lkZW50YWxseSBkZWNyZWYgTm90SW1wbGVtZW50ZWQgb3V0IG9mIGV4aXN0ZW5jZS4KKyAgICAgKi8KKyAgICBQeV9GYXRhbEVycm9yKCJkZWFsbG9jYXRpbmcgTm90SW1wbGVtZW50ZWQiKTsKK30KKwogc3RhdGljIFB5VHlwZU9iamVjdCBQeU5vdEltcGxlbWVudGVkX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAiTm90SW1wbGVtZW50ZWRUeXBlIiwKICAgICAwLAogICAgIDAsCi0gICAgbm9uZV9kZWFsbG9jLCAgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCisgICAgbm90aW1wbGVtZW50ZWRfZGVhbGxvYywgICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KQEAgLTE1NTIsNyArMTUyMiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyAqLworICAgIG5vdGltcGxlbWVudGVkX21ldGhvZHMsIC8qdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlICovCkBAIC0xNjk5LDE1ICsxNjY5LDYgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1lbWJlckRlc2NyX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtZW1iZXIgZGVzY3JpcHRvciB0eXBlIik7CiAKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbHRlcl9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgZmlsdGVyIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWFwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtYXAgdHlwZSIpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlaaXBfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIHppcCB0eXBlIik7Ci0KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZfUHlOYW1lc3BhY2VfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG5hbWVzcGFjZSB0eXBlIik7CiAKQEAgLTE3NDksMTAgKzE3MTAsMTAgQEAKIH0KIAogdm9pZAotX1B5X0ZvcmdldFJlZmVyZW5jZShyZWdpc3RlciBQeU9iamVjdCAqb3ApCitfUHlfRm9yZ2V0UmVmZXJlbmNlKFB5T2JqZWN0ICpvcCkKIHsKICNpZmRlZiBTTE9XX1VOUkVGX0NIRUNLCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnA7CisgICAgUHlPYmplY3QgKnA7CiAjZW5kaWYKICAgICBpZiAob3AtPm9iX3JlZmNudCA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlVOUkVGIG5lZ2F0aXZlIHJlZmNudCIpOwpAQCAtMTg1NiwyNiArMTgxNyw2IEBACiBQeV9zc2l6ZV90ICgqX1B5X2Fic3RyYWN0X2hhY2spKFB5T2JqZWN0ICopID0gUHlPYmplY3RfU2l6ZTsKIAogCi0vKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwotCi12b2lkICoKLVB5TWVtX01hbGxvYyhzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9NQUxMT0MobmJ5dGVzKTsKLX0KLQotdm9pZCAqCi1QeU1lbV9SZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIFB5TWVtX1JFQUxMT0MocCwgbmJ5dGVzKTsKLX0KLQotdm9pZAotUHlNZW1fRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19Ci0KIHZvaWQKIF9QeU9iamVjdF9EZWJ1Z1R5cGVTdGF0cyhGSUxFICpvdXQpCiB7CkBAIC0xODg1LDcgKzE4MjYsNiBAQAogICAgIF9QeUZyYW1lX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlMaXN0X0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlNZXRob2RfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwotICAgIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5VHVwbGVfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogfQogCkBAIC0xOTAxLDggKzE4NDEsNiBAQAogICAgU2VlIGRpY3RvYmplY3QuYyBhbmQgbGlzdG9iamVjdC5jIGZvciBleGFtcGxlcyBvZiB1c2UuCiAqLwogCi0jZGVmaW5lIEtFWSAiUHlfUmVwciIKLQogaW50CiBQeV9SZXByRW50ZXIoUHlPYmplY3QgKm9iaikKIHsKQEAgLTE5MTMsMTIgKzE4NTEsMTIgQEAKICAgICBkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgbGlzdCA9IF9QeURpY3RfR2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIpOwogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKICAgICAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBLRVksIGxpc3QpIDwgMCkKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIsIGxpc3QpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgIH0KQEAgLTE5MjcsNyArMTg2NSw4IEBACiAgICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0obGlzdCwgaSkgPT0gb2JqKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKTsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTM3LDEzICsxODc2LDE4IEBACiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKIAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2sobGlzdCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKICAgICAvKiBDb3VudCBiYWNrd2FyZHMgYmVjYXVzZSB3ZSBhbHdheXMgZXhwZWN0IG9iaiB0byBiZSBsaXN0Wy0xXSAqLwogICAgIHdoaWxlICgtLWkgPj0gMCkgewpAQCAtMTk1Miw2ICsxODk2LDEwIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworZmluYWxseToKKyAgICAvKiBpZ25vcmUgZXhjZXB0aW9ucyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgdGhlbS4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwogfQogCiAvKiBUcmFzaGNhbiBzdXBwb3J0LiAqLwpAQCAtMTk3Miw3ICsxOTIwLDcgQEAKIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0KFB5T2JqZWN0ICpvcCkKIHsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKV9QeVRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICBfUHlUcmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKQEAgLTE5ODQsNyArMTkzMiw3IEBACiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKSB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IG9wOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGMyNjFiNjguLjAwNGNmYWEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTEsMTQgKzEsMzc0IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZmRlZiBXSVRIX1BZTUFMTE9DCisvKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwogCi0jaWZkZWYgSEFWRV9NTUFQCi0gI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0gI2lmZGVmIE1BUF9BTk9OWU1PVVMKLSAgI2RlZmluZSBBUkVOQVNfVVNFX01NQVAKKyNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaV9pZCwgY29uc3Qgdm9pZCAqcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkgIC8qIENsYW5nICovCisgI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpICAvKiBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKKyAjZW5kaWYKKyNlbHNlCisgI2lmIGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pICAvKiBHQ0MgNC44LngsIGlzIEFTQU4gZW5hYmxlZD8gKi8KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fKChub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpcykpIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUwogICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTU1BUCkKKyMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjICBpZmRlZiBNQVBfQU5PTllNT1VTCisjICAgIGRlZmluZSBBUkVOQVNfVVNFX01NQVAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fUmF3TWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgLyogUHlNZW1fTWFsbG9jKDApIG1lYW5zIG1hbGxvYygxKS4gU29tZSBzeXN0ZW1zIHdvdWxkIHJldHVybiBOVUxMCisgICAgICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMgd291bGQKKyAgICAgICByZXR1cm4gYSBwb2ludGVyIHdpdGggbm8gbWVtb3J5IGJlaGluZCBpdCwgd2hpY2ggd291bGQgYnJlYWsgcHltYWxsb2MuCisgICAgICAgVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlNZW1fUmF3RnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIFZpcnR1YWxGcmVlKHB0ciwgMCwgTUVNX1JFTEVBU0UpOworfQorCisjZWxpZiBkZWZpbmVkKEFSRU5BU19VU0VfTU1BUCkKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYU1tYXAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisgICAgcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydChwdHIgIT0gTlVMTCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYU11bm1hcCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgbXVubWFwKHB0ciwgc2l6ZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hRnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKworI2RlZmluZSBQWVJBV19GVU5DUyBfUHlNZW1fUmF3TWFsbG9jLCBfUHlNZW1fUmF3UmVhbGxvYywgX1B5TWVtX1Jhd0ZyZWUKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisjICBkZWZpbmUgUFlPQkpfRlVOQ1MgX1B5T2JqZWN0X01hbGxvYywgX1B5T2JqZWN0X1JlYWxsb2MsIF9QeU9iamVjdF9GcmVlCisjZWxzZQorIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyNkZWZpbmUgUFlNRU1fRlVOQ1MgUFlSQVdfRlVOQ1MKKworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCisgICAgY2hhciBhcGlfaWQ7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7Cit9IGRlYnVnX2FsbG9jX2FwaV90Oworc3RhdGljIHN0cnVjdCB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgcmF3OworICAgIGRlYnVnX2FsbG9jX2FwaV90IG1lbTsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBvYmo7Cit9IF9QeU1lbV9EZWJ1ZyA9IHsKKyAgICB7J3InLCB7TlVMTCwgUFlSQVdfRlVOQ1N9fSwKKyAgICB7J20nLCB7TlVMTCwgUFlNRU1fRlVOQ1N9fSwKKyAgICB7J28nLCB7TlVMTCwgUFlPQkpfRlVOQ1N9fQorICAgIH07CisKKyNkZWZpbmUgUFlEQkdfRlVOQ1MgX1B5TWVtX0RlYnVnTWFsbG9jLCBfUHlNZW1fRGVidWdSZWFsbG9jLCBfUHlNZW1fRGVidWdGcmVlCisjZW5kaWYKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU1lbV9SYXcgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLnJhdywgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlSQVdfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW0gPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm1lbSwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlNRU1fRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlPYmplY3QgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm9iaiwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlPQkpfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKKyN1bmRlZiBQWVJBV19GVU5DUworI3VuZGVmIFBZTUVNX0ZVTkNTCisjdW5kZWYgUFlPQkpfRlVOQ1MKKyN1bmRlZiBQWURCR19GVU5DUworCitzdGF0aWMgUHlPYmplY3RBcmVuYUFsbG9jYXRvciBfUHlPYmplY3RfQXJlbmEgPSB7TlVMTCwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEFsbG9jLCBfUHlPYmplY3RfQXJlbmFWaXJ0dWFsRnJlZQorI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCisgICAgX1B5T2JqZWN0X0FyZW5hTW1hcCwgX1B5T2JqZWN0X0FyZW5hTXVubWFwCisjZWxzZQorICAgIF9QeU9iamVjdF9BcmVuYU1hbGxvYywgX1B5T2JqZWN0X0FyZW5hRnJlZQorI2VuZGlmCisgICAgfTsKKwordm9pZAorUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCit7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIGFsbG9jLm1hbGxvYyA9IF9QeU1lbV9EZWJ1Z01hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gX1B5TWVtX0RlYnVnUmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gX1B5TWVtX0RlYnVnRnJlZTsKKworICAgIGlmIChfUHlNZW1fUmF3Lm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5yYXc7CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmX1B5TWVtX0RlYnVnLnJhdy5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlNZW0ubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm1lbTsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZfUHlNZW1fRGVidWcubWVtLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvYyk7CisgICAgfQorCisgICAgaWYgKF9QeU9iamVjdC5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcub2JqOworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJl9QeU1lbV9EZWJ1Zy5vYmouYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZAorUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6ICphbGxvY2F0b3IgPSBfUHlNZW1fUmF3OyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06ICphbGxvY2F0b3IgPSBfUHlNZW07IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogKmFsbG9jYXRvciA9IF9QeU9iamVjdDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biBkb21haW4gKi8KKyAgICAgICAgYWxsb2NhdG9yLT5jdHggPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPm1hbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+cmVhbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+ZnJlZSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogX1B5TWVtX1JhdyA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogX1B5TWVtID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBfUHlPYmplY3QgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICAvKiBpZ25vcmUgdW5rbm93biBkb21haW4gKi8KKyAgICB9CisKK30KKwordm9pZAorUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgICphbGxvY2F0b3IgPSBfUHlPYmplY3RfQXJlbmE7Cit9CisKK3ZvaWQKK1B5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBfUHlPYmplY3RfQXJlbmEgPSAqYWxsb2NhdG9yOworfQorCit2b2lkICoKK1B5TWVtX1Jhd01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKgorICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgorICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCisgICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCisgICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3Igc2l6ZSA8IDAgaXMgbm90IHJlcXVpcmVkLgorICAgICAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5tYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIHNpemUpOworfQorCit2b2lkKgorUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5yZWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW1fUmF3LmZyZWUoX1B5TWVtX1Jhdy5jdHgsIHB0cik7Cit9CisKK3ZvaWQgKgorUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5tYWxsb2MoX1B5TWVtLmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQgKgorUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtLnJlYWxsb2MoX1B5TWVtLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQKK1B5TWVtX0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU1lbS5mcmVlKF9QeU1lbS5jdHgsIHB0cik7Cit9CisKK2NoYXIgKgorX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY2hhciAqCitfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpjb3B5OworCisgICAgc2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbWNweShjb3B5LCBzdHIsIHNpemUpOworICAgIHJldHVybiBjb3B5OworfQorCit2b2lkICoKK1B5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QubWFsbG9jKF9QeU9iamVjdC5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU9iamVjdC5yZWFsbG9jKF9QeU9iamVjdC5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU9iamVjdF9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlPYmplY3QuZnJlZShfUHlPYmplY3QuY3R4LCBwdHIpOworfQorCisKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KIApAQCAtNTI1LDYgKzg4NSwxNSBAQAogLyogSGlnaCB3YXRlciBtYXJrIChtYXggdmFsdWUgZXZlciBzZWVuKSBmb3IgbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkLiAqLwogc3RhdGljIHNpemVfdCBuYXJlbmFzX2hpZ2h3YXRlciA9IDA7CiAKK3N0YXRpYyBQeV9zc2l6ZV90IF9QeV9BbGxvY2F0ZWRCbG9ja3MgPSAwOworCitQeV9zc2l6ZV90CitfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpCit7CisgICAgcmV0dXJuIF9QeV9BbGxvY2F0ZWRCbG9ja3M7Cit9CisKKwogLyogQWxsb2NhdGUgYSBuZXcgYXJlbmEuICBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSwgcmV0dXJuIE5VTEwuICBFbHNlCiAgKiBhbGxvY2F0ZSBhIG5ldyBhcmVuYSwgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhbiBhcmVuYV9vYmplY3QKICAqIGRlc2NyaWJpbmcgdGhlIG5ldyBhcmVuYS4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgY2FsbGVyIHdpbGwgc2V0CkBAIC01MzYsNyArOTA1LDYgQEAKICAgICBzdHJ1Y3QgYXJlbmFfb2JqZWN0KiBhcmVuYW9iajsKICAgICB1aW50IGV4Y2VzczsgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBhYm92ZSBwb29sIGFsaWdubWVudCAqLwogICAgIHZvaWQgKmFkZHJlc3M7Ci0gICAgaW50IGVycjsKIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCiAgICAgaWYgKFB5X0dFVEVOVigiUFlUSE9OTUFMTE9DU1RBVFMiKSkKQEAgLTU1OCw3ICs5MjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIG92ZXJmbG93ICovCiAjZW5kaWYKICAgICAgICAgbmJ5dGVzID0gbnVtYXJlbmFzICogc2l6ZW9mKCphcmVuYXMpOwotICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopcmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CisgICAgICAgIGFyZW5hb2JqID0gKHN0cnVjdCBhcmVuYV9vYmplY3QgKilQeU1lbV9SYXdSZWFsbG9jKGFyZW5hcywgbmJ5dGVzKTsKICAgICAgICAgaWYgKGFyZW5hb2JqID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgYXJlbmFzID0gYXJlbmFvYmo7CkBAIC01ODksMTUgKzk1Nyw4IEBACiAgICAgYXJlbmFvYmogPSB1bnVzZWRfYXJlbmFfb2JqZWN0czsKICAgICB1bnVzZWRfYXJlbmFfb2JqZWN0cyA9IGFyZW5hb2JqLT5uZXh0YXJlbmE7CiAgICAgYXNzZXJ0KGFyZW5hb2JqLT5hZGRyZXNzID09IDApOwotI2lmZGVmIEFSRU5BU19VU0VfTU1BUAotICAgIGFkZHJlc3MgPSBtbWFwKE5VTEwsIEFSRU5BX1NJWkUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gTUFQX0ZBSUxFRCk7Ci0jZWxzZQotICAgIGFkZHJlc3MgPSBtYWxsb2MoQVJFTkFfU0laRSk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gMCk7Ci0jZW5kaWYKLSAgICBpZiAoZXJyKSB7CisgICAgYWRkcmVzcyA9IF9QeU9iamVjdF9BcmVuYS5hbGxvYyhfUHlPYmplY3RfQXJlbmEuY3R4LCBBUkVOQV9TSVpFKTsKKyAgICBpZiAoYWRkcmVzcyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFRoZSBhbGxvY2F0aW9uIGZhaWxlZDogcmV0dXJuIE5VTEwgYWZ0ZXIgcHV0dGluZyB0aGUKICAgICAgICAgICogYXJlbmFvYmogYmFjay4KICAgICAgICAgICovCkBAIC03NjAsMTUgKzExMjEsMTYgQEAKICAqIFVubGVzcyB0aGUgb3B0aW1pemVyIHJlb3JkZXJzIGV2ZXJ5dGhpbmcsIGJlaW5nIHRvbyBzbWFydC4uLgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9NYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICBibG9jayAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MrKzsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCiAgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOwpAQCAtNzc3LDE1ICsxMTM5LDYgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgogICAgICAqIFRoaXMgaW1wbGljaXRseSByZWRpcmVjdHMgbWFsbG9jKDApLgogICAgICAqLwogICAgIGlmICgobmJ5dGVzIC0gMSkgPCBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCkgewpAQCAtOTAxLDYgKzEyNTQsNyBAQAogICAgICAgICAgICAgICAgICAqIGFuZCBmcmVlIGxpc3QgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgYnAgPSBwb29sLT5mcmVlYmxvY2s7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGJwICE9IE5VTEwpOwogICAgICAgICAgICAgICAgIHBvb2wtPmZyZWVibG9jayA9ICooYmxvY2sgKiopYnA7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYnA7CkBAIC05NTYsMTYgKzEzMTAsMTkgQEAKICAgICAgKiBsYXN0IGNoYW5jZSB0byBzZXJ2ZSB0aGUgcmVxdWVzdCkgb3Igd2hlbiB0aGUgbWF4IG1lbW9yeSBsaW1pdAogICAgICAqIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgICovCi0gICAgaWYgKG5ieXRlcyA9PSAwKQotICAgICAgICBuYnl0ZXMgPSAxOwotICAgIHJldHVybiAodm9pZCAqKW1hbGxvYyhuYnl0ZXMpOworICAgIHsKKyAgICAgICAgdm9pZCAqcmVzdWx0ID0gUHlNZW1fUmF3TWFsbG9jKG5ieXRlcyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgX1B5X0FsbG9jYXRlZEJsb2Nrcy0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH0KIAogLyogZnJlZSAqLwogCi0jdW5kZWYgUHlPYmplY3RfRnJlZQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKQogewogICAgIHBvb2xwIHBvb2w7CiAgICAgYmxvY2sgKmxhc3RmcmVlOwpAQCAtOTc4LDYgKzEzMzUsOCBAQAogICAgIGlmIChwID09IE5VTEwpICAgICAgLyogZnJlZShOVUxMKSBoYXMgbm8gZWZmZWN0ICovCiAgICAgICAgIHJldHVybjsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQogICAgICAgICBnb3RvIHJlZGlyZWN0OwpAQCAtMTA3MiwxMSArMTQzMSw4IEBACiAgICAgICAgICAgICAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhbzsKIAogICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGVudGlyZSBhcmVuYS4gKi8KLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICAgICAgICAgICAgICBtdW5tYXAoKHZvaWQgKilhby0+YWRkcmVzcywgQVJFTkFfU0laRSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilhby0+YWRkcmVzcyk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfQXJlbmEuZnJlZShfUHlPYmplY3RfQXJlbmEuY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwogICAgICAgICAgICAgICAgIGFvLT5hZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXJrIHVuYXNzb2NpYXRlZCAqLwogICAgICAgICAgICAgICAgIC0tbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkOwogCkBAIC0xMTg1LDcgKzE1NDEsNyBAQAogcmVkaXJlY3Q6CiAjZW5kaWYKICAgICAvKiBXZSBkaWRuJ3QgYWxsb2NhdGUgdGhpcyBhZGRyZXNzLiAqLwotICAgIGZyZWUocCk7CisgICAgUHlNZW1fUmF3RnJlZShwKTsKIH0KIAogLyogcmVhbGxvYy4gIElmIHAgaXMgTlVMTCwgdGhpcyBhY3RzIGxpa2UgbWFsbG9jKG5ieXRlcykuICBFbHNlIGlmIG5ieXRlcz09MCwKQEAgLTExOTMsOSArMTU0OSw5IEBACiAgKiByZXR1cm4gYSBub24tTlVMTCByZXN1bHQuCiAgKi8KIAotI3VuZGVmIFB5T2JqZWN0X1JlYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgdm9pZCAqYnA7CiAgICAgcG9vbHAgcG9vbDsKQEAgLTEyMDUsMTYgKzE1NjEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfTWFsbG9jKG5ieXRlcyk7Ci0KLSAgICAvKgotICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgotICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCi0gICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCi0gICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3IgbmJ5dGVzIDwgMCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICovCi0gICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIC8qIFRyZWF0IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEgdGhlIHNhbWUgYXMgMCAqLwpAQCAtMTI0MiwxMCArMTU4OSwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZSA9IG5ieXRlczsKICAgICAgICAgfQotICAgICAgICBicCA9IFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOworICAgICAgICBicCA9IF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogICAgICAgICBpZiAoYnAgIT0gTlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KGJwLCBwLCBzaXplKTsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUocCk7CisgICAgICAgICAgICBfUHlPYmplY3RfRnJlZShjdHgsIHApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBicDsKICAgICB9CkBAIC0xMjYzLDE0ICsxNjEwLDE0IEBACiAgICAgICogYXQgcC4gIEluc3RlYWQgd2UgcHVudDogIGxldCBDIGNvbnRpbnVlIHRvIG1hbmFnZSB0aGlzIGJsb2NrLgogICAgICAqLwogICAgIGlmIChuYnl0ZXMpCi0gICAgICAgIHJldHVybiByZWFsbG9jKHAsIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBQeU1lbV9SYXdSZWFsbG9jKHAsIG5ieXRlcyk7CiAgICAgLyogQyBkb2Vzbid0IGRlZmluZSB0aGUgcmVzdWx0IG9mIHJlYWxsb2MocCwgMCkgKGl0IG1heSBvciBtYXkgbm90CiAgICAgICogcmV0dXJuIE5VTEwgdGhlbiksIGJ1dCBQeXRob24ncyBkb2NzIHByb21pc2UgdGhhdCBuYnl0ZXM9PTAgbmV2ZXIKICAgICAgKiByZXR1cm5zIE5VTEwuICBXZSBkb24ndCBwYXNzIDAgdG8gcmVhbGxvYygpLCB0byBhdm9pZCB0aGF0IGVuZGNhc2UKICAgICAgKiB0byBiZWdpbiB3aXRoLiAgRXZlbiB0aGVuLCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgcmVhbGxvYygpIHdvbid0CiAgICAgICogcmV0dXJuIE5VTEwuCiAgICAgICovCi0gICAgYnAgPSByZWFsbG9jKHAsIDEpOworICAgIGJwID0gUHlNZW1fUmF3UmVhbGxvYyhwLCAxKTsKICAgICByZXR1cm4gYnAgPyBicCA6IHA7CiB9CiAKQEAgLTEyODAsMjMgKzE2MjcsMTIgQEAKIC8qIHB5bWFsbG9jIG5vdCBlbmFibGVkOiAgUmVkaXJlY3QgdGhlIGVudHJ5IHBvaW50cyB0byBtYWxsb2MuICBUaGVzZSB3aWxsCiAgKiBvbmx5IGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyB0aGF0IGFyZSBjb21waWxlZCB3aXRoIHB5bWFsbG9jIGVuYWJsZWQuICovCiAKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuKQorUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQogewotICAgIHJldHVybiBQeU1lbV9NQUxMT0Mobik7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuKTsKLX0KLQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19CiAjZW5kaWYgLyogV0lUSF9QWU1BTExPQyAqLwogCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKQEAgLTEzMTYsMTAgKzE2NTIsNiBAQAogI2RlZmluZSBERUFEQllURSAgICAgICAweERCICAgIC8qIGRlYWQgKG5ld2x5IGZyZWVkKSBtZW1vcnkgKi8KICNkZWZpbmUgRk9SQklEREVOQllURSAgMHhGQiAgICAvKiB1bnRvdWNoYWJsZSBieXRlcyBhdCBlYWNoIGVuZCBvZiBhIGJsb2NrICovCiAKLS8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLwotI2RlZmluZSBfUFlNQUxMT0NfTUVNX0lEICdtJyAgIC8qIHRoZSBQeU1lbV9NYWxsb2MoKSBBUEkgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX09CSl9JRCAnbycgICAvKiBUaGUgUHlPYmplY3RfTWFsbG9jKCkgQVBJICovCi0KIHN0YXRpYyBzaXplX3Qgc2VyaWFsbm8gPSAwOyAgICAgLyogaW5jcmVtZW50ZWQgb24gZWFjaCBkZWJ1ZyB7bSxyZX1hbGxvYyAqLwogCiAvKiBzZXJpYWxubyBpcyBhbHdheXMgaW5jcmVtZW50ZWQgdmlhIGNhbGxpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHBvaW50IGlzCkBAIC0xMzkyLDcgKzE3MjQsOSBAQAogcFswOiBTXQogICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4gKGVhc2llcgogICAgIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCi1wW1M6IDIqU10KK3BbU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwW1MrMTogMipTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMipTOiAyKlMrbl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURS4KQEAgLTE0MDIsNTggKzE3MzYsMTggQEAKIHBbMipTK246IDIqUytuK1NdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIG92ZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUytuK1M6IDIqUytuKzIqU10KLSAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotICAgIGFuZCBfUHlPYmplY3RfRGVidWdSZWFsbG9jLgorICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gX1B5TWVtX0RlYnVnTWFsbG9jCisgICAgYW5kIF9QeU1lbV9EZWJ1Z1JlYWxsb2MuCiAgICAgVGhpcyBpcyBhIGJpZy1lbmRpYW4gc2l6ZV90LgogICAgIElmICJiYWQgbWVtb3J5IiBpcyBkZXRlY3RlZCBsYXRlciwgdGhlIHNlcmlhbCBudW1iZXIgZ2l2ZXMgYW4KICAgICBleGNlbGxlbnQgd2F5IHRvIHNldCBhIGJyZWFrcG9pbnQgb24gdGhlIG5leHQgcnVuLCB0byBjYXB0dXJlIHRoZQogICAgIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4KICovCiAKLS8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5TWVtXyogbWVtb3J5IEFQSSAqLwotdm9pZCAqCi1fUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19NRU1fSUQsIHApOwotfQotCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU9iamVjdF8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotCi0KLS8qIGdlbmVyaWMgZGVidWcgbWVtb3J5IGFwaSwgd2l0aCBhbiAiaWQiIHRvIGlkZW50aWZ5IHRoZSBBUEkgaW4gdXNlICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGlkLCBzaXplX3QgbmJ5dGVzKQoteworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CiAgICAgdWNoYXIgKnA7ICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3Mgb2YgbWFsbG9jJ2VkIGJsb2NrICovCiAgICAgdWNoYXIgKnRhaWw7ICAgICAgICAvKiBwICsgMipTU1QgKyBuYnl0ZXMgPT0gcG9pbnRlciB0byB0YWlsIHBhZCBieXRlcyAqLwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KQEAgLTE0NjQsMTQgKzE3NTgsMTQgQEAKICAgICAgICAgLyogb3ZlcmZsb3c6ICBjYW4ndCByZXByZXNlbnQgdG90YWwgYXMgYSBzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwID0gKHVjaGFyICopUHlPYmplY3RfTWFsbG9jKHRvdGFsKTsKKyAgICBwID0gKHVjaGFyICopYXBpLT5hbGxvYy5tYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHRvdGFsKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGF0IHAsIHdyaXRlIHNpemUgKFNTVCBieXRlcyksIGlkICgxIGJ5dGUpLCBwYWQgKFNTVC0xIGJ5dGVzKSAqLwogICAgIHdyaXRlX3NpemVfdChwLCBuYnl0ZXMpOwotICAgIHBbU1NUXSA9ICh1Y2hhcilpZDsKLSAgICBtZW1zZXQocCArIFNTVCArIDEgLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CisgICAgcFtTU1RdID0gKHVjaGFyKWFwaS0+YXBpX2lkOworICAgIG1lbXNldChwICsgU1NUICsgMSwgRk9SQklEREVOQllURSwgU1NULTEpOwogCiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChwICsgMipTU1QsIENMRUFOQllURSwgbmJ5dGVzKTsKQEAgLTE0ODksMzUgKzE3ODMsMzcgQEAKICAgIFRoZW4gZmlsbHMgdGhlIG9yaWdpbmFsIGJ5dGVzIHdpdGggREVBREJZVEUuCiAgICBUaGVuIGNhbGxzIHRoZSB1bmRlcmx5aW5nIGZyZWUuCiAqLwotdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpxID0gKHVjaGFyICopcCAtIDIqU1NUOyAgLyogYWRkcmVzcyByZXR1cm5lZCBmcm9tIG1hbGxvYyAqLwogICAgIHNpemVfdCBuYnl0ZXM7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxKTsKICAgICBuYnl0ZXMgKz0gNCpTU1Q7CiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChxLCBERUFEQllURSwgbmJ5dGVzKTsKLSAgICBQeU9iamVjdF9GcmVlKHEpOworICAgIGFwaS0+YWxsb2MuZnJlZShhcGktPmFsbG9jLmN0eCwgcSk7CiB9CiAKLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewotICAgIHVjaGFyICpxID0gKHVjaGFyICopcDsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OworICAgIHVjaGFyICpxID0gKHVjaGFyICopcCwgKm9sZHE7CiAgICAgdWNoYXIgKnRhaWw7CiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwogICAgIHNpemVfdCBvcmlnaW5hbF9uYnl0ZXM7CiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGFwaSwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z01hbGxvYyhjdHgsIG5ieXRlcyk7CiAKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKKyAgICBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoYXBpLT5hcGlfaWQsIHApOwogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIG9yaWdpbmFsX25ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgdG90YWwgPSBuYnl0ZXMgKyA0KlNTVDsKQEAgLTE1MjUsMjQgKzE4MjEsMjYgQEAKICAgICAgICAgLyogb3ZlcmZsb3c6ICBjYW4ndCByZXByZXNlbnQgdG90YWwgYXMgYSBzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7Ci0gICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCi0gICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzICsgMipTU1QpOwotICAgIH0KLQogICAgIC8qIFJlc2l6ZSBhbmQgYWRkIGRlY29yYXRpb25zLiBXZSBtYXkgZ2V0IGEgbmV3IHBvaW50ZXIgaGVyZSwgaW4gd2hpY2gKICAgICAgKiBjYXNlIHdlIGRpZG4ndCBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIHRoZSBvbGQgbWVtb3J5IHdpdGggREVBREJZVEUsCiAgICAgICogYnV0IHdlIGxpdmUgd2l0aCB0aGF0LgogICAgICAqLwotICAgIHEgPSAodWNoYXIgKilQeU9iamVjdF9SZWFsbG9jKHEgLSAyKlNTVCwgdG90YWwpOworICAgIG9sZHEgPSBxOworICAgIHEgPSAodWNoYXIgKilhcGktPmFsbG9jLnJlYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHEgLSAyKlNTVCwgdG90YWwpOwogICAgIGlmIChxID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKHEgPT0gb2xkcSAmJiBuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKKyAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KKyAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMpOworICAgIH0KKwogICAgIHdyaXRlX3NpemVfdChxLCBuYnl0ZXMpOwotICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaSk7CisgICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpLT5hcGlfaWQpOwogICAgIGZvciAoaSA9IDE7IGkgPCBTU1Q7ICsraSkKICAgICAgICAgYXNzZXJ0KHFbU1NUICsgaV0gPT0gRk9SQklEREVOQllURSk7CiAgICAgcSArPSAyKlNTVDsKKwogICAgIHRhaWwgPSBxICsgbmJ5dGVzOwogICAgIG1lbXNldCh0YWlsLCBGT1JCSURERU5CWVRFLCBTU1QpOwogICAgIHdyaXRlX3NpemVfdCh0YWlsICsgU1NULCBzZXJpYWxubyk7CkBAIC0xNTYxLDggKzE4NTksOCBAQAogICogYW5kIGNhbGwgUHlfRmF0YWxFcnJvciB0byBraWxsIHRoZSBwcm9ncmFtLgogICogVGhlIEFQSSBpZCwgaXMgYWxzbyBjaGVja2VkLgogICovCi0gdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQorc3RhdGljIHZvaWQKK19QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKIHsKICAgICBjb25zdCB1Y2hhciAqcSA9IChjb25zdCB1Y2hhciAqKXA7CiAgICAgY2hhciBtc2didWZbNjRdOwpAQCAtMTYxNCw3ICsxOTEyLDcgQEAKIH0KIAogLyogRGlzcGxheSBpbmZvIHRvIHN0ZGVyciBhYm91dCB0aGUgbWVtb3J5IGJsb2NrIGF0IHAuICovCi12b2lkCitzdGF0aWMgdm9pZAogX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCkKIHsKICAgICBjb25zdCB1Y2hhciAqcSA9IChjb25zdCB1Y2hhciAqKXA7CmRpZmYgLS1naXQgYS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKaW5kZXggZDc5MGNhOC4uYTRkOWZiMyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jCisrKyBiL09iamVjdHMvcmFuZ2VvYmplY3QuYwpAQCAtMzE4LDE5NSArMzE4LDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBBZGRpdGlvbmFsIGhlbHBlcnMsIHNpbmNlIHRoZSBzdGFuZGFyZCBzbGljZSBoZWxwZXJzCi0gKiBhbGwgY2xpcCB0byBQWV9TU0laRV9UX01BWAotICovCi0KLS8qIFJlcGxhY2UgX1B5RXZhbF9TbGljZUluZGV4ICovCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcHV0ZV9zbGljZV9lbGVtZW50KFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUluZGV4X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0luZGV4KG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIFJlcGxhY2UgUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAqICAgUmVzdWx0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2xpY2UgaXMgZW1wdHkKLSAqICAgICgtMSA9IGVycm9yLCAwID0gZW1wdHkgc2xpY2UsIDEgPSBzbGljZSBjb250YWlucyBlbGVtZW50cykKLSAqLwotc3RhdGljIGludAotY29tcHV0ZV9zbGljZV9pbmRpY2VzKHJhbmdlb2JqZWN0ICpyLCBQeVNsaWNlT2JqZWN0ICpzbGljZSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0LCBQeU9iamVjdCAqKnN0b3AsIFB5T2JqZWN0ICoqc3RlcCkKLXsKLSAgICBpbnQgY21wX3Jlc3VsdCwgaGFzX2VsZW1lbnRzOwotICAgIFB5X3NzaXplX3QgY2xhbXBlZF9zdGVwID0gMDsKLSAgICBQeU9iamVjdCAqemVybyA9IE5VTEwsICpvbmUgPSBOVUxMLCAqbmVnX29uZSA9IE5VTEwsICpjYW5kaWRhdGUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0bXBfc3RhcnQgPSBOVUxMLCAqdG1wX3N0b3AgPSBOVUxMLCAqdG1wX3N0ZXAgPSBOVUxMOwotICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKHplcm8gPT0gTlVMTCkgZ290byBGYWlsOwotICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKLSAgICBpZiAob25lID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBuZWdfb25lID0gUHlMb25nX0Zyb21Mb25nKC0xKTsKLSAgICBpZiAobmVnX29uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RlcCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RlcCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGNsYW1wZWRfc3RlcCA9IDE7Ci0gICAgICAgIHRtcF9zdGVwID0gb25lOwotICAgICAgICBQeV9JTkNSRUYodG1wX3N0ZXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghX1B5RXZhbF9TbGljZUluZGV4KHNsaWNlLT5zdGVwLCAmY2xhbXBlZF9zdGVwKSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwID09IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wX3N0ZXAgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0ZXApOwotICAgICAgICBpZiAodG1wX3N0ZXAgPT0gTlVMTCkgZ290byBGYWlsOwotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdGFydCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RhcnQgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0YXJ0KTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9BZGQoci0+bGVuZ3RoLCBjYW5kaWRhdGUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdGFydCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IG5lZ19vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA+PSAwICovCi0gICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHItPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIHN0b3AgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0b3AgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0b3ApOwotICAgICAgICBpZiAoY2FuZGlkYXRlID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjYW5kaWRhdGUsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA8IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgY2FuZGlkYXRlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdG9wLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RvcCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdG9wKTsKLSAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RvcCA+PSByLT5sZW5ndGggKi8KLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNsaWNlIGlzIGVtcHR5IG9yIG5vdCAqLwotICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9HVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGFzX2VsZW1lbnRzID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgdG1wX3N0b3AsIFB5X0xUKTsKLSAgICB9Ci0gICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgZ290byBGYWlsOwotCi0gICAgKnN0YXJ0ID0gdG1wX3N0YXJ0OwotICAgICpzdG9wID0gdG1wX3N0b3A7Ci0gICAgKnN0ZXAgPSB0bXBfc3RlcDsKLSAgICBQeV9ERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfREVDUkVGKG9uZSk7Ci0gICAgUHlfREVDUkVGKHplcm8pOwotICAgIHJldHVybiBoYXNfZWxlbWVudHM7Ci0KLSAgRmFpbDoKLSAgICBQeV9YREVDUkVGKHRtcF9zdGFydCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RvcCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RlcCk7Ci0gICAgUHlfWERFQ1JFRihjYW5kaWRhdGUpOwotICAgIFB5X1hERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfWERFQ1JFRihvbmUpOwotICAgIFB5X1hERUNSRUYoemVybyk7Ci0gICAgcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcHV0ZV9zbGljZShyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKl9zbGljZSkKIHsKQEAgLTUxNCwxMCArMzI1LDExIEBACiAgICAgcmFuZ2VvYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqc3RhcnQgPSBOVUxMLCAqc3RvcCA9IE5VTEwsICpzdGVwID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Vic3RhcnQgPSBOVUxMLCAqc3Vic3RvcCA9IE5VTEwsICpzdWJzdGVwID0gTlVMTDsKLSAgICBpbnQgaGFzX2VsZW1lbnRzOworICAgIGludCBlcnJvcjsKIAotICAgIGhhc19lbGVtZW50cyA9IGNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyLCBzbGljZSwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOwotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIHJldHVybiBOVUxMOworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2xpY2UsIHItPmxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIGlmIChlcnJvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzdWJzdGVwID0gUHlOdW1iZXJfTXVsdGlwbHkoci0+c3RlcCwgc3RlcCk7CiAgICAgaWYgKHN1YnN0ZXAgPT0gTlVMTCkgZ290byBmYWlsOwpAQCAtNTI3LDEzICszMzksOCBAQAogICAgIGlmIChzdWJzdGFydCA9PSBOVUxMKSBnb3RvIGZhaWw7CiAgICAgUHlfQ0xFQVIoc3RhcnQpOwogCi0gICAgaWYgKGhhc19lbGVtZW50cykgewotICAgICAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOwotICAgICAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Vic3RvcCA9IHN1YnN0YXJ0OwotICAgICAgICBQeV9JTkNSRUYoc3Vic3RvcCk7Ci0gICAgfQorICAgIHN1YnN0b3AgPSBjb21wdXRlX2l0ZW0ociwgc3RvcCk7CisgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0b3ApOwogCiAgICAgcmVzdWx0ID0gbWFrZV9yYW5nZV9vYmplY3QoUHlfVFlQRShyKSwgc3Vic3RhcnQsIHN1YnN0b3AsIHN1YnN0ZXApOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zZXRvYmplY3QuYyBiL09iamVjdHMvc2V0b2JqZWN0LmMKaW5kZXggZWE1YTI0Yy4uYWRjOTlkYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zZXRvYmplY3QuYworKysgYi9PYmplY3RzL3NldG9iamVjdC5jCkBAIC0xLDE1NCArMSwxMjEgQEAKIAogLyogc2V0IG9iamVjdCBpbXBsZW1lbnRhdGlvbgorCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KICAgIERlcml2ZWQgZnJvbSBMaWIvc2V0cy5weSBhbmQgT2JqZWN0cy9kaWN0b2JqZWN0LmMuCiAKLSAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCisgICBUaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KKworICAgVGhlIGluaXRpYWwgcHJvYmUgaW5kZXggaXMgY29tcHV0ZWQgYXMgaGFzaCBtb2QgdGhlIHRhYmxlIHNpemUuCisgICBTdWJzZXF1ZW50IHByb2JlIGluZGljZXMgYXJlIGNvbXB1dGVkIGFzIGV4cGxhaW5lZCBpbiBPYmplY3RzL2RpY3RvYmplY3QuYy4KKworICAgVG8gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSwgZWFjaCBwcm9iZSBpbnNwZWN0cyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZQorICAgbmVhcmJ5IGVudHJpZXMgYmVmb3JlIG1vdmluZyBvbiB0byBwcm9iZXMgZWxzZXdoZXJlIGluIG1lbW9yeS4gIFRoaXMgbGVhdmVzCisgICB1cyB3aXRoIGEgaHlicmlkIG9mIGxpbmVhciBwcm9iaW5nIGFuZCBvcGVuIGFkZHJlc3NpbmcuICBUaGUgbGluZWFyIHByb2JpbmcKKyAgIHJlZHVjZXMgdGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGJlY2F1c2UgY29uc2VjdXRpdmUgbWVtb3J5IGFjY2Vzc2VzCisgICB0ZW5kIHRvIGJlIG11Y2ggY2hlYXBlciB0aGFuIHNjYXR0ZXJlZCBwcm9iZXMuICBBZnRlciBMSU5FQVJfUFJPQkVTIHN0ZXBzLAorICAgd2UgdGhlbiB1c2Ugb3BlbiBhZGRyZXNzaW5nIHdpdGggdGhlIHVwcGVyIGJpdHMgZnJvbSB0aGUgaGFzaCB2YWx1ZS4gIFRoaXMKKyAgIGhlbHBzIGJyZWFrLXVwIGxvbmcgY2hhaW5zIG9mIGNvbGxpc2lvbnMuCisKKyAgIEFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KKworICAgVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgorICAgTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKLS8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKLSAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCi0gKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwotc3RhdGljIHZvaWQKLXNldF9rZXlfZXJyb3IoUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCi0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotfQorLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdDsKIAotLyogVGhpcyBtdXN0IGJlID49IDEuICovCisjZGVmaW5lIGR1bW15ICgmX2R1bW15X3N0cnVjdCkKKworLyogRXhwb3J0ZWQgZm9yIHRoZSBnZGIgcGx1Z2luJ3MgYmVuZWZpdC4gKi8KK1B5T2JqZWN0ICpfUHlTZXRfRHVtbXkgPSBkdW1teTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT0gQmVnaW4gbG9naWMgZm9yIHByb2JpbmcgdGhlIGhhc2ggdGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBTZXQgdGhpcyB0byB6ZXJvIHRvIHR1cm4tb2ZmIGxpbmVhciBwcm9iaW5nICovCisjaWZuZGVmIExJTkVBUl9QUk9CRVMKKyNkZWZpbmUgTElORUFSX1BST0JFUyA5CisjZW5kaWYKKworLyogVGhpcyBtdXN0IGJlID49IDEgKi8KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKLS8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLwotc3RhdGljIFB5T2JqZWN0ICpkdW1teSA9IE5VTEw7IC8qIEluaXRpYWxpemVkIGJ5IGZpcnN0IGNhbGwgdG8gbWFrZV9uZXdfc2V0KCkgKi8KLQotI2lmZGVmIFB5X1JFRl9ERUJVRwotUHlPYmplY3QgKgotX1B5U2V0X0R1bW15KHZvaWQpCi17Ci0gICAgcmV0dXJuIGR1bW15OwotfQotI2VuZGlmCi0KLSNkZWZpbmUgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+dGFibGUgPSAoc28pLT5zbWFsbHRhYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5oYXNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIEVNUFRZX1RPX01JTlNJWkUoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbXNldCgoc28pLT5zbWFsbHRhYmxlLCAwLCBzaXplb2YoKHNvKS0+c21hbGx0YWJsZSkpOyAgICAgIFwKLSAgICAoc28pLT51c2VkID0gKHNvKS0+ZmlsbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotLyogUmV1c2Ugc2NoZW1lIHRvIHNhdmUgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBhbmQgbWVtc2V0ICovCi0jaWZuZGVmIFB5U2V0X01BWEZSRUVMSVNUCi0jZGVmaW5lIFB5U2V0X01BWEZSRUVMSVNUIDgwCi0jZW5kaWYKLXN0YXRpYyBQeVNldE9iamVjdCAqZnJlZV9saXN0W1B5U2V0X01BWEZSRUVMSVNUXTsKLXN0YXRpYyBpbnQgbnVtZnJlZSA9IDA7Ci0KLQotLyoKLVRoZSBiYXNpYyBsb29rdXAgZnVuY3Rpb24gdXNlZCBieSBhbGwgb3BlcmF0aW9ucy4KLVRoaXMgaXMgYmFzZWQgb24gQWxnb3JpdGhtIEQgZnJvbSBLbnV0aCBWb2wuIDMsIFNlYy4gNi40LgotT3BlbiBhZGRyZXNzaW5nIGlzIHByZWZlcnJlZCBvdmVyIGNoYWluaW5nIHNpbmNlIHRoZSBsaW5rIG92ZXJoZWFkIGZvcgotY2hhaW5pbmcgd291bGQgYmUgc3Vic3RhbnRpYWwgKDEwMCUgd2l0aCB0eXBpY2FsIG1hbGxvYyBvdmVyaGVhZCkuCi0KLVRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLiBTdWJzZXF1ZW50Ci1wcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCi0KLUFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KLQotVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgotTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCi0qLwotCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKK3NldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotICAgIHJlZ2lzdGVyIGludCBjbXA7Ci0gICAgUHlPYmplY3QgKnN0YXJ0a2V5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOyAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBzaXplX3QgajsKKyAgICBpbnQgY21wOwogCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5ID09IGtleSkKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGVudHJ5OwogCi0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoKSB7Ci0gICAgICAgICAgICBzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwogICAgICAgICAgICAgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKKyAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKKyAgICAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOworICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKwogICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChmcmVlc2xvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGVudHJ5ID0gZnJlZXNsb3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwotICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwotICAgICAgICAgICAgaWYgKGNtcCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQotICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5OworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKQEAgLTE1NywxNCArMTI0LDE1IEBACiAgKiBzZWUgaWYgdGhlIGNvbXBhcmlzb24gYWx0ZXJlZCB0aGUgdGFibGUuCiAgKi8KIHN0YXRpYyBzZXRlbnRyeSAqCi1zZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOworICAgIHNpemVfdCBqOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtMTc0LDQ2ICsxNDIsOTQgQEAKICAgICAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5OwogICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CiAgICAgfQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgIHJldHVybiBlbnRyeTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSkKLSAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICBmcmVlc2xvdCA9IE5VTEw7Ci0gICAgfQogCi0gICAgLyogSW4gdGhlIGxvb3AsIGtleSA9PSBkdW1teSBpcyBieSBmYXIgKGZhY3RvciBvZiAxMDBzKSB0aGUKLSAgICAgICBsZWFzdCBsaWtlbHkgb3V0Y29tZSwgc28gdGVzdCBmb3IgdGhhdCBsYXN0LiAqLwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgd2hpbGUgKDEpIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CiAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAotICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQotICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKKyAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKKyAgICAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAorICAgICAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwogICAgIH0KLSAgICBhc3NlcnQoMCk7ICAgICAgICAgIC8qIE5PVCBSRUFDSEVEICovCi0gICAgcmV0dXJuIDA7CisgIGZvdW5kX251bGw6CisgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwogfQogCiAvKgorSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwora25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAordGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAordXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCitOb3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCitpcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KKyovCitzdGF0aWMgdm9pZAorc2V0X2luc2VydF9jbGVhbihQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQoreworICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIH0KKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisgICAgfQorICBmb3VuZF9udWxsOgorICAgIGVudHJ5LT5rZXkgPSBrZXk7CisgICAgZW50cnktPmhhc2ggPSBoYXNoOworICAgIHNvLT5maWxsKys7CisgICAgc28tPnVzZWQrKzsKK30KKworLyogPT09PT09PT0gRW5kIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKgogSW50ZXJuYWwgcm91dGluZSB0byBpbnNlcnQgYSBuZXcga2V5IGludG8gdGhlIHRhYmxlLgogVXNlZCBieSB0aGUgcHVibGljIGluc2VydCByb3V0aW5lLgogRWF0cyBhIHJlZmVyZW5jZSB0byBrZXkuCiAqLwogc3RhdGljIGludAotc2V0X2luc2VydF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3NldF9pbnNlcnRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydChzby0+bG9va3VwICE9IE5VTEwpOwogICAgIGVudHJ5ID0gc28tPmxvb2t1cChzbywga2V5LCBoYXNoKTsKQEAgLTIzMCw3ICsyNDYsNiBAQAogICAgICAgICBlbnRyeS0+a2V5ID0ga2V5OwogICAgICAgICBlbnRyeS0+aGFzaCA9IGhhc2g7CiAgICAgICAgIHNvLT51c2VkKys7Ci0gICAgICAgIFB5X0RFQ1JFRihkdW1teSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogQUNUSVZFICovCiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMjM5LDM1ICsyNTQsNiBAQAogfQogCiAvKgotSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwota25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAotdGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAotdXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCi1Ob3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCi1pcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KLSovCi1zdGF0aWMgdm9pZAotc2V0X2luc2VydF9jbGVhbihyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQotewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKLSAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgZW50cnktPmtleSAhPSBOVUxMOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKLSAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgIH0KLSAgICBzby0+ZmlsbCsrOwotICAgIGVudHJ5LT5rZXkgPSBrZXk7Ci0gICAgZW50cnktPmhhc2ggPSBoYXNoOwotICAgIHNvLT51c2VkKys7Ci19Ci0KLS8qCiBSZXN0cnVjdHVyZSB0aGUgdGFibGUgYnkgYWxsb2NhdGluZyBhIG5ldyB0YWJsZSBhbmQgcmVpbnNlcnRpbmcgYWxsCiBrZXlzIGFnYWluLiAgV2hlbiBlbnRyaWVzIGhhdmUgYmVlbiBkZWxldGVkLCB0aGUgbmV3IHRhYmxlIG1heQogYWN0dWFsbHkgYmUgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLgpAQCAtMzMwLDIzICszMTYsMTQgQEAKICAgICBzby0+dGFibGUgPSBuZXd0YWJsZTsKICAgICBzby0+bWFzayA9IG5ld3NpemUgLSAxOwogICAgIG1lbXNldChuZXd0YWJsZSwgMCwgc2l6ZW9mKHNldGVudHJ5KSAqIG5ld3NpemUpOworICAgIGkgPSBzby0+dXNlZDsKICAgICBzby0+dXNlZCA9IDA7Ci0gICAgaSA9IHNvLT5maWxsOwogICAgIHNvLT5maWxsID0gMDsKIAogICAgIC8qIENvcHkgdGhlIGRhdGEgb3ZlcjsgdGhpcyBpcyByZWZjb3VudC1uZXV0cmFsIGZvciBhY3RpdmUgZW50cmllczsKICAgICAgICBkdW1teSBlbnRyaWVzIGFyZW4ndCBjb3BpZWQgb3Zlciwgb2YgY291cnNlICovCiAgICAgZm9yIChlbnRyeSA9IG9sZHRhYmxlOyBpID4gMDsgZW50cnkrKykgewotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBVTlVTRUQgKi8KLSAgICAgICAgICAgIDsKLSAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KSB7Ci0gICAgICAgICAgICAvKiBEVU1NWSAqLwotICAgICAgICAgICAgLS1pOwotICAgICAgICAgICAgYXNzZXJ0KGVudHJ5LT5rZXkgPT0gZHVtbXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogQUNUSVZFICovCisgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBkdW1teSkgewogICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgc2V0X2luc2VydF9jbGVhbihzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOwogICAgICAgICB9CkBAIC0zNjAsOSArMzM3LDkgQEAKIC8qIENBVVRJT046IHNldF9hZGRfa2V5L2VudHJ5KCkgbXVzdCBndWFyYW50ZWUgaXQgd29uJ3QgcmVzaXplIHRoZSB0YWJsZSAqLwogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2VudHJ5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQorc2V0X2FkZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKKyAgICBQeV9zc2l6ZV90IG5fdXNlZDsKICAgICBQeU9iamVjdCAqa2V5ID0gZW50cnktPmtleTsKICAgICBQeV9oYXNoX3QgaGFzaCA9IGVudHJ5LT5oYXNoOwogCkBAIC0zNzksMTAgKzM1NiwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2tleShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCitzZXRfYWRkX2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKQEAgLTQwNyw3ICszODQsNyBAQAogCiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICpvbGRlbnRyeSkKLXsgICAgICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworeyAgICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBlbnRyeSA9IChzby0+bG9va3VwKShzbywgb2xkZW50cnktPmtleSwgb2xkZW50cnktPmhhc2gpOwpAQCAtNDE2LDcgKzM5Myw2IEBACiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCiAgICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwogICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwpAQCAtNDI2LDggKzQwMiw4IEBACiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC00NDQsMTMgKzQyMCwyMyBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKICAgICByZXR1cm4gRElTQ0FSRF9GT1VORDsKIH0KIAorc3RhdGljIHZvaWQKK3NldF9lbXB0eV90b19taW5zaXplKFB5U2V0T2JqZWN0ICpzbykKK3sKKyAgICBtZW1zZXQoc28tPnNtYWxsdGFibGUsIDAsIHNpemVvZihzby0+c21hbGx0YWJsZSkpOworICAgIHNvLT5maWxsID0gMDsKKyAgICBzby0+dXNlZCA9IDA7CisgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKKyAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKKyAgICBzby0+aGFzaCA9IC0xOworfQorCiBzdGF0aWMgaW50CiBzZXRfY2xlYXJfaW50ZXJuYWwoUHlTZXRPYmplY3QgKnNvKQogewpAQCAtNDU4LDE0ICs0NDQsMTMgQEAKICAgICBpbnQgdGFibGVfaXNfbWFsbG9jZWQ7CiAgICAgUHlfc3NpemVfdCBmaWxsOwogICAgIHNldGVudHJ5IHNtYWxsX2NvcHlbUHlTZXRfTUlOU0laRV07Ci0jaWZkZWYgUHlfREVCVUcKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogCi0gICAgbiA9IHNvLT5tYXNrICsgMTsKLSAgICBpID0gMDsKKyNpZmRlZiBQeV9ERUJVRworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgUHlfc3NpemVfdCBuID0gc28tPm1hc2sgKyAxOwogI2VuZGlmCiAKKyAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgdGFibGUgPSBzby0+dGFibGU7CiAgICAgYXNzZXJ0KHRhYmxlICE9IE5VTEwpOwogICAgIHRhYmxlX2lzX21hbGxvY2VkID0gdGFibGUgIT0gc28tPnNtYWxsdGFibGU7CkBAIC00NzgsNyArNDYzLDcgQEAKICAgICAgKi8KICAgICBmaWxsID0gc28tPmZpbGw7CiAgICAgaWYgKHRhYmxlX2lzX21hbGxvY2VkKQotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogCiAgICAgZWxzZSBpZiAoZmlsbCA+IDApIHsKICAgICAgICAgLyogSXQncyBhIHNtYWxsIHRhYmxlIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZC4KQEAgLTQ4Nyw3ICs0NzIsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgbWVtY3B5KHNtYWxsX2NvcHksIHRhYmxlLCBzaXplb2Yoc21hbGxfY29weSkpOwogICAgICAgICB0YWJsZSA9IHNtYWxsX2NvcHk7Ci0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOworICAgICAgICBzZXRfZW1wdHlfdG9fbWluc2l6ZShzbyk7CiAgICAgfQogICAgIC8qIGVsc2UgaXQncyBhIHNtYWxsIHRhYmxlIHRoYXQncyBhbHJlYWR5IGVtcHR5ICovCiAKQEAgLTUwMiw3ICs0ODcsOCBAQAogI2VuZGlmCiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICNpZmRlZiBQeV9ERUJVRwogICAgICAgICBlbHNlCkBAIC01MzMsNyArNTE5LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICp0YWJsZTsKKyAgICBzZXRlbnRyeSAqdGFibGU7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgaSA9ICpwb3NfcHRyOwpAQCAtNTUzLDcgKzUzOSw3IEBACiBzdGF0aWMgdm9pZAogc2V0X2RlYWxsb2MoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlfc3NpemVfdCBmaWxsID0gc28tPmZpbGw7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihzbykKQEAgLTU2MywxNSArNTQ5LDEzIEBACiAgICAgZm9yIChlbnRyeSA9IHNvLT50YWJsZTsgZmlsbCA+IDA7IGVudHJ5KyspIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkpIHsKICAgICAgICAgICAgIC0tZmlsbDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IGR1bW15KQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc28tPnRhYmxlICE9IHNvLT5zbWFsbHRhYmxlKQogICAgICAgICBQeU1lbV9ERUwoc28tPnRhYmxlKTsKLSAgICBpZiAobnVtZnJlZSA8IFB5U2V0X01BWEZSRUVMSVNUICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKQotICAgICAgICBmcmVlX2xpc3RbbnVtZnJlZSsrXSA9IHNvOwotICAgIGVsc2UKLSAgICAgICAgUHlfVFlQRShzbyktPnRwX2ZyZWUoc28pOworICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0VORChzbykKIH0KIApAQCAtNjMyLDggKzYxNiw4IEBACiAgICAgUHlTZXRPYmplY3QgKm90aGVyOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2sob3RoZXJzZXQpKTsKQEAgLTcwMSw4ICs2ODUsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wb3AoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICprZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC03MzQsNyArNzE4LDYgQEAKICAgICAgICAgfQogICAgIH0KICAgICBrZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgc28tPnRhYmxlWzBdLmhhc2ggPSBpICsgMTsgIC8qIG5leHQgcGxhY2UgdG8gc3RhcnQgKi8KQEAgLTg2OSw4ICs4NTIsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpzZXRpdGVyX2l0ZXJuZXh0KHNldGl0ZXJvYmplY3QgKnNpKQogewogICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2s7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5U2V0T2JqZWN0ICpzbyA9IHNpLT5zaV9zZXQ7CiAKICAgICBpZiAoc28gPT0gTlVMTCkKQEAgLTEwMjQsMzMgKzEwMDcsMTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX25ld19zZXQoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvID0gTlVMTDsKLQotICAgIGlmIChkdW1teSA9PSBOVUxMKSB7IC8qIEF1dG8taW5pdGlhbGl6ZSBkdW1teSAqLwotICAgICAgICBkdW1teSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOwotICAgICAgICBpZiAoZHVtbXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBQeVNldE9iamVjdCAqc28gPSBOVUxMOwogCiAgICAgLyogY3JlYXRlIFB5U2V0T2JqZWN0IHN0cnVjdHVyZSAqLwotICAgIGlmIChudW1mcmVlICYmCi0gICAgICAgICh0eXBlID09ICZQeVNldF9UeXBlICB8fCAgdHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkpIHsKLSAgICAgICAgc28gPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKLSAgICAgICAgYXNzZXJ0IChzbyAhPSBOVUxMICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKTsKLSAgICAgICAgUHlfVFlQRShzbykgPSB0eXBlOwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKChQeU9iamVjdCAqKXNvKTsKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7Ci0gICAgICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNvKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbyA9IChQeVNldE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgICAgICBpZiAoc28gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiB0cF9hbGxvYyBoYXMgYWxyZWFkeSB6ZXJvZWQgdGhlIHN0cnVjdHVyZSAqLwotICAgICAgICBhc3NlcnQoc28tPnRhYmxlID09IE5VTEwgJiYgc28tPmZpbGwgPT0gMCAmJiBzby0+dXNlZCA9PSAwKTsKLSAgICAgICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7Ci0gICAgfQorICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHNvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOworICAgIHNvLT50YWJsZSA9IHNvLT5zbWFsbHRhYmxlOwogICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleV91bmljb2RlOworICAgIHNvLT5oYXNoID0gLTE7CiAgICAgc28tPndlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIGlmIChpdGVyYWJsZSAhPSBOVUxMKSB7CkBAIC0xMTEzLDM1ICsxMDgyLDE1IEBACiBpbnQKIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCkKIHsKLSAgICBpbnQgZnJlZWxpc3Rfc2l6ZSA9IG51bWZyZWU7Ci0gICAgUHlTZXRPYmplY3QgKnNvOwotCi0gICAgd2hpbGUgKG51bWZyZWUpIHsKLSAgICAgICAgbnVtZnJlZS0tOwotICAgICAgICBzbyA9IGZyZWVfbGlzdFtudW1mcmVlXTsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKHNvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyZWVsaXN0X3NpemU7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQKIFB5U2V0X0Zpbmkodm9pZCkKIHsKLSAgICBQeVNldF9DbGVhckZyZWVMaXN0KCk7Ci0gICAgUHlfQ0xFQVIoZHVtbXkpOwogICAgIFB5X0NMRUFSKGVtcHR5ZnJvemVuc2V0KTsKIH0KIAotLyogUHJpbnQgc3VtbWFyeSBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW1pemVkIGFsbG9jYXRvciAqLwotdm9pZAotX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KQotewotICAgIF9QeURlYnVnQWxsb2NhdG9yU3RhdHMob3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWUgUHlTZXRPYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZnJlZSwgc2l6ZW9mKFB5U2V0T2JqZWN0KSk7Ci19Ci0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xOTUyLDcgKzE5MDEsNyBAQAogICAgIH0KIAogICAgIGlmIChydiA9PSBESVNDQVJEX05PVEZPVU5EKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTI0MTQsNyArMjM2Myw3IEBACiAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICBjaGFyICpzOwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4OworICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng9TlVMTDsKICAgICBQeU9iamVjdCAqb2IgPSAoUHlPYmplY3QgKilzbzsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeU9iamVjdCAqc3RyOwpAQCAtMjUzNywzICsyNDg2LDQ2IEBACiAjdW5kZWYgYXNzZXJ0UmFpc2VzCiAKICNlbmRpZgorCisvKioqKiogRHVtbXkgU3RydWN0ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgUHlPYmplY3QgKgorZHVtbXlfcmVwcihQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZGVhbGxvYyhQeU9iamVjdCogaWdub3JlKQoreworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyA8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IF9QeVNldER1bW15X1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiPGR1bW15IGtleT4gdHlwZSIsCisgICAgMCwKKyAgICAwLAorICAgIGR1bW15X2RlYWxsb2MsICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIGR1bW15X3JlcHIsICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsIC8qdHBfZmxhZ3MgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCBfZHVtbXlfc3RydWN0ID0geworICBfUHlPYmplY3RfRVhUUkFfSU5JVAorICAyLCAmX1B5U2V0RHVtbXlfVHlwZQorfTsKKwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zbGljZW9iamVjdC5jIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCmluZGV4IDE1OTMzMzUuLjEwNDk1MjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2xpY2VvYmplY3QuYworKysgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKQEAgLTMzLDYgKzMzLDE3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZWxsaXBzaXNfcmVkdWNlKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBlbGxpcHNpc19tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWVsbGlwc2lzX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogUHlUeXBlT2JqZWN0IFB5RWxsaXBzaXNfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJlbGxpcHNpcyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTYxLDcgKzcyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBlbGxpcHNpc19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTI5OSwyMyArMzEwLDE5OCBAQAogICAgIHswfQogfTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhIFB5TG9uZywgYW5kIHJhaXNlIFR5cGVFcnJvcgorICAgd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4gKi8KKworc3RhdGljIFB5T2JqZWN0KgorZXZhbHVhdGVfc2xpY2VfaW5kZXgoUHlPYmplY3QgKnYpCit7CisgICAgaWYgKFB5SW5kZXhfQ2hlY2sodikpIHsKKyAgICAgICAgcmV0dXJuIFB5TnVtYmVyX0luZGV4KHYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLyogQ29tcHV0ZSBzbGljZSBpbmRpY2VzIGdpdmVuIGEgc2xpY2UgYW5kIGxlbmd0aC4gIFJldHVybiAtMSBvbiBmYWlsdXJlLiAgVXNlZAorICAgYnkgc2xpY2UuaW5kaWNlcyBhbmQgcmFuZ2VvYmplY3Qgc2xpY2luZy4gIEFzc3VtZXMgdGhhdCBgbGVuYCBpcyBhCisgICBub25uZWdhdGl2ZSBpbnN0YW5jZSBvZiBQeUxvbmcuICovCisKK2ludAorX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoUHlTbGljZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnRfcHRyLCBQeU9iamVjdCAqKnN0b3BfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGVwX3B0cikKK3sKKyAgICBQeU9iamVjdCAqc3RhcnQ9TlVMTCwgKnN0b3A9TlVMTCwgKnN0ZXA9TlVMTDsKKyAgICBQeU9iamVjdCAqdXBwZXI9TlVMTCwgKmxvd2VyPU5VTEw7CisgICAgaW50IHN0ZXBfaXNfbmVnYXRpdmUsIGNtcF9yZXN1bHQ7CisKKyAgICAvKiBDb252ZXJ0IHN0ZXAgdG8gYW4gaW50ZWdlcjsgcmFpc2UgZm9yIHplcm8gc3RlcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RlcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0ZXAgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQgc3RlcF9zaWduOworICAgICAgICBzdGVwID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RlcCk7CisgICAgICAgIGlmIChzdGVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBzdGVwX3NpZ24gPSBfUHlMb25nX1NpZ24oc3RlcCk7CisgICAgICAgIGlmIChzdGVwX3NpZ24gPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IHN0ZXBfc2lnbiA8IDA7CisgICAgfQorCisgICAgLyogRmluZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZvciBzdGFydCBhbmQgc3RvcC4gKi8KKyAgICBpZiAoc3RlcF9pc19uZWdhdGl2ZSkgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygtMUwpOworICAgICAgICBpZiAobG93ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdXBwZXIgPSBQeU51bWJlcl9BZGQobGVuZ3RoLCBsb3dlcik7CisgICAgICAgIGlmICh1cHBlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvd2VyID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gbGVuZ3RoOworICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RhcnQuICovCisgICAgaWYgKHNlbGYtPnN0YXJ0ID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RhcnQgPSBzdGVwX2lzX25lZ2F0aXZlID8gdXBwZXIgOiBsb3dlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0YXJ0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0YXJ0ID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RhcnQpOworICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdGFydCkgPCAwKSB7CisgICAgICAgICAgICAvKiBzdGFydCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RhcnQsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgc3RhcnQgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0LCBsb3dlciwgUHlfTFQpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihsb3dlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgdXBwZXIsIFB5X0dUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RvcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RvcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0b3AgPSBzdGVwX2lzX25lZ2F0aXZlID8gbG93ZXIgOiB1cHBlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0b3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0b3ApOworICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHN0b3ApIDwgMCkgeworICAgICAgICAgICAgLyogc3RvcCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RvcCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIHN0b3AgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RvcCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgICAgICBzdG9wID0gbG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IHVwcGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgKnN0YXJ0X3B0ciA9IHN0YXJ0OworICAgICpzdG9wX3B0ciA9IHN0b3A7CisgICAgKnN0ZXBfcHRyID0gc3RlcDsKKyAgICBQeV9ERUNSRUYodXBwZXIpOworICAgIFB5X0RFQ1JFRihsb3dlcik7CisgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgKnN0YXJ0X3B0ciA9ICpzdG9wX3B0ciA9ICpzdGVwX3B0ciA9IE5VTEw7CisgICAgUHlfWERFQ1JFRihzdGFydCk7CisgICAgUHlfWERFQ1JFRihzdG9wKTsKKyAgICBQeV9YREVDUkVGKHN0ZXApOworICAgIFB5X1hERUNSRUYodXBwZXIpOworICAgIFB5X1hERUNSRUYobG93ZXIpOworICAgIHJldHVybiAtMTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2Ygc2xpY2UuaW5kaWNlcy4gKi8KKwogc3RhdGljIFB5T2JqZWN0Kgogc2xpY2VfaW5kaWNlcyhQeVNsaWNlT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogbGVuKQogewotICAgIFB5X3NzaXplX3QgaWxlbiwgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoOworICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwOworICAgIFB5T2JqZWN0ICpsZW5ndGg7CisgICAgaW50IGVycm9yOwogCi0gICAgaWxlbiA9IFB5TnVtYmVyX0FzU3NpemVfdChsZW4sIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIC8qIENvbnZlcnQgbGVuZ3RoIHRvIGFuIGludGVnZXIgaWYgbmVjZXNzYXJ5OyByYWlzZSBmb3IgbmVnYXRpdmUgbGVuZ3RoLiAqLworICAgIGxlbmd0aCA9IFB5TnVtYmVyX0luZGV4KGxlbik7CisgICAgaWYgKGxlbmd0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChpbGVuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICBpZiAoX1B5TG9uZ19TaWduKGxlbmd0aCkgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIFB5X0RFQ1JFRihsZW5ndGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5T2JqZWN0KilzZWxmLCBpbGVuLCAmc3RhcnQsICZzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNlbGYsIGxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIFB5X0RFQ1JFRihsZW5ndGgpOworICAgIGlmIChlcnJvciA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihubm4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihOTk4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOwogfQogCiBQeURvY19TVFJWQVIoc2xpY2VfaW5kaWNlc19kb2MsCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAppbmRleCBmNjI4MTNkLi5kMGZjMThkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXKFNUUixMRU4pICAgX1B5VW5pY29kZV9Gcm9tQVNDSUkoKGNoYXIqKShTVFIpLChMRU4pKQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaCBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCmluZGV4IGYzNTMzNjcuLjJlYjJkMTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHMsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9zID0gczsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9zID0gczsKKyAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOwogICAgICAgICAgICAgICAgIHdoaWxlIChfcyA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgYSB3aG9sZSBsb25nIGF0IGEgdGltZSAoZWl0aGVyIDQgb3IgOCBieXRlcyksCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkbyBhIGZhc3QgdW5yb2xsZWQgY29weSBpZiBpdCBvbmx5IGNvbnRhaW5zIEFTQ0lJCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3M7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgICAgICAgICAgICAgICAgICBfcFswXSA9IChTVFJJTkdMSUJfQ0hBUikodmFsdWUgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzFdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gOCkgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzJdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gMTYpICYgMHhGRnUpOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9ICppbnB0cjsKICAgICBTVFJJTkdMSUJfQ0hBUiAqcCA9IGRlc3QgKyAqb3V0cG9zOwogICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpaGkgPSAhIW5hdGl2ZV9vcmRlcmluZywgaWxvID0gIW5hdGl2ZV9vcmRlcmluZzsKICNlbHNlCiAgICAgaW50IGloaSA9ICFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICEhbmF0aXZlX29yZGVyaW5nOwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICAgICAgIHJlYWRzIGFyZSBtb3JlIGV4cGVuc2l2ZSwgYmV0dGVyIHRvIGRlZmVyIHRvIGFub3RoZXIgaXRlcmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocSwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHJ1bnMgb2YgaW4tcmFuZ2Ugbm9uLXN1cnJvZ2F0ZSBjaGFycy4gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKICAgICAgICAgICAgIHdoaWxlIChfcSA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9jayA9ICogKHVuc2lnbmVkIGxvbmcgKikgX3E7CiAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgewpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gU1dBQihibG9jayk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAjIGlmIFNJWkVPRl9MT05HID09IDQKICAgICAgICAgICAgICAgICBwWzBdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayAmIDB4RkZGRnUpOwogICAgICAgICAgICAgICAgIHBbMV0gPSAoU1RSSU5HTElCX0NIQVIpKGJsb2NrID4+IDE2KTsKQEAgLTU5NiwyNiArNTk2LDMwIEBACiAjdW5kZWYgU1dBQgogCiAKLVB5X0xPQ0FMX0lOTElORSh2b2lkKQotU1RSSU5HTElCKHV0ZjE2X2VuY29kZSkodW5zaWduZWQgc2hvcnQgKm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICppbiwKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHg4MAorUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCitTVFJJTkdMSUIodXRmMTZfZW5jb2RlKShjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICoqb3V0cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZV9vcmRlcmluZykKIHsKKyAgICB1bnNpZ25lZCBzaG9ydCAqb3V0ID0gKm91dHB0cjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gaW4gKyBsZW47CiAjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKLSMgZGVmaW5lIFNXQUIyKENIKSAgKChDSCkgPDwgOCkKLSNlbHNlCi0jIGRlZmluZSBTV0FCMihDSCkgICgoKENIKSA8PCA4KSB8ICgoQ0gpID4+IDgpKQotI2VuZGlmCi0jaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKLSMgaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDIKLSAgICAgICAgUHlfTUVNQ1BZKG91dCwgaW4sIDIgKiBsZW4pOwotIyBlbHNlCi0gICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUyhTVFJJTkdMSUJfQ0hBUiwgdW5zaWduZWQgc2hvcnQsIGluLCBlbmQsIG91dCk7Ci0jIGVuZGlmCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICBvdXRbMF0gPSBpblswXTsKKyAgICAgICAgICAgIG91dFsxXSA9IGluWzFdOworICAgICAgICAgICAgb3V0WzJdID0gaW5bMl07CisgICAgICAgICAgICBvdXRbM10gPSBpblszXTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgeworICAgICAgICAgICAgKm91dCsrID0gKmluKys7CisgICAgICAgIH0KICAgICB9IGVsc2UgeworIyBkZWZpbmUgU1dBQjIoQ0gpICAoKENIKSA8PCA4KSAvKiBoaWdoIGJ5dGUgaXMgemVybyAqLwogICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CiAgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgewogICAgICAgICAgICAgb3V0WzBdID0gU1dBQjIoaW5bMF0pOwpAQCAtNjI1LDM3ICs2MjksOTUgQEAKICAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKmluKTsKLSAgICAgICAgICAgICsraW47CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7CisgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CiAgICAgICAgIH0KKyN1bmRlZiBTV0FCMgogICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CiAjZWxzZQogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICAvKiBjaGVjayBpZiBhbnkgY2hhcmFjdGVyIGlzIGEgc3Vycm9nYXRlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgaWYgKCgoaW5bMF0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzFdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsyXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bM10gXiAweGQ4MDApICYgMHhmODAwKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgb3V0WzBdID0gaW5bMF07CisgICAgICAgICAgICBvdXRbMV0gPSBpblsxXTsKKyAgICAgICAgICAgIG91dFsyXSA9IGluWzJdOworICAgICAgICAgICAgb3V0WzNdID0gaW5bM107CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOwotICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMCkKKyAgICAgICAgICAgIFB5X1VDUzQgY2g7CisgICAgICAgICAgICBjaCA9ICppbisrOworICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IGNoOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZTAwMCkKKyAgICAgICAgICAgICAgICAvKiByZWplY3Qgc3Vycm9nYXRlIGNoYXJhY3RlcnMgKFUrREM4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIG91dFswXSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisjZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKKyAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGluWzFdKTsKKyAgICAgICAgICAgIG91dFsyXSA9IFNXQUIyKGluWzJdKTsKKyAgICAgICAgICAgIG91dFszXSA9IFNXQUIyKGluWzNdKTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0RDODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBQeV9VQ1MyIGNoMSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gyID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihjaDEpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGNoMik7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CisgICAgICAgIH0KICN1bmRlZiBTV0FCMgorICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CisgIGZhaWw6CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuIC0gKGVuZCAtIGluICsgMSk7CisjZW5kaWYKIH0KKyNlbmRpZgorCiAjZW5kaWYgLyogU1RSSU5HTElCX0lTX1VOSUNPREUgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2VxLmggYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCmluZGV4IDNlNWY1MTAuLmY4ZmQzODQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2VxLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaApAQCAtNiw4ICs2LDggQEAKIFB5X0xPQ0FMX0lOTElORShpbnQpCiB1bmljb2RlX2VxKFB5T2JqZWN0ICphYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CisgICAgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOworICAgIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYSkgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKGIpID09IC0xKSB7CiAgICAgICAgIGFzc2VydCgwICYmICJ1bmljb2RlX2VxIHJlYWR5IGZhaWwiKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAppbmRleCA1NWFjNzdkLi5jZDdjYWM0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCkBAIC0xNDIsNiArMTQyLDggQEAKICAgICBtYXNrID0gMDsKIAogICAgIGlmIChtb2RlICE9IEZBU1RfUlNFQVJDSCkgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqc3MgPSBzICsgbSAtIDE7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwcCA9IHAgKyBtIC0gMTsKIAogICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCiAKQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7CiAgICAgICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLwotICAgICAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgeworICAgICAgICAgICAgaWYgKHNzW2ldID09IHBwWzBdKSB7CiAgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKQEAgLTE3MiwxMyArMTc0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCmluZGV4IDA2NTU5YzguLmViM2ZlODggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB3aGlsZSAocCA8IGVuZCkgewogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBVQ1MxX0FTQ0lJX0NIQVJfTUFTSykKQEAgLTY2LDcgKzY2LDcgQEAKICNlbHNlCiAjZXJyb3IgSW52YWxpZCBTVFJJTkdMSUJfU0laRU9GX0NIQVIgKG11c3QgYmUgMSwgMiBvciA0KQogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlfVUNTNCBtYXNrOworICAgIFB5X1VDUzQgbWFzazsKICAgICBQeV9zc2l6ZV90IG4gPSBlbmQgLSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcCA9IGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBiZWdpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2OGIzMQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApAQCAtMCwwICsxLDEzMyBAQAorLyogc3RyaW5nbGliOiBieXRlcyBqb2luaW5nIGltcGxlbWVudGF0aW9uICovCisKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgIT0gMQorI2Vycm9yIGpvaW4uaCBvbmx5IGNvbXBhdGlibGUgd2l0aCBieXRlLXdpc2Ugc3RyaW5ncworI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorU1RSSU5HTElCKGJ5dGVzX2pvaW4pKFB5T2JqZWN0ICpzZXAsIFB5T2JqZWN0ICppdGVyYWJsZSkKK3sKKyAgICBjaGFyICpzZXBzdHIgPSBTVFJJTkdMSUJfU1RSKHNlcCk7CisgICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBTVFJJTkdMSUJfTEVOKHNlcCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7CisgICAgUHlfc3NpemVfdCBzeiA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBuYnVmczsKKyAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKKyAgICBQeV9idWZmZXIgKmJ1ZmZlcnMgPSBOVUxMOworI2RlZmluZSBOQl9TVEFUSUNfQlVGRkVSUyAxMAorICAgIFB5X2J1ZmZlciBzdGF0aWNfYnVmZmVyc1tOQl9TVEFUSUNfQlVGRkVSU107CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXRlcmFibGUsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7CisgICAgaWYgKHNlcSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworICAgIGlmIChzZXFsZW4gPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgcmV0dXJuIFNUUklOR0xJQl9ORVcoTlVMTCwgMCk7CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChzZXFsZW4gPT0gMSkgeworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7CisgICAgICAgIGlmIChTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QoaXRlbSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBpZiAoc2VxbGVuID4gTkJfU1RBVElDX0JVRkZFUlMpIHsKKyAgICAgICAgYnVmZmVycyA9IFB5TWVtX05FVyhQeV9idWZmZXIsIHNlcWxlbik7CisgICAgICAgIGlmIChidWZmZXJzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZmZXJzID0gc3RhdGljX2J1ZmZlcnM7CisgICAgfQorCisgICAgLyogSGVyZSBpcyB0aGUgZ2VuZXJhbCBjYXNlLiAgRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbAorICAgICAqIGFtb3VudCBvZiBzcGFjZSB3ZSdsbCBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnRzIGFyZQorICAgICAqIGJ1ZmZlci1jb21wYXRpYmxlLgorICAgICAqLworICAgIGZvciAoaSA9IDAsIG5idWZzID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOworICAgICAgICBpZiAoX2dldGJ1ZmZlcihpdGVtLCAmYnVmZmVyc1tpXSkgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIGJ5dGVhcnJheSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvciBhbiBvYmplY3Qgd2l0aCB0aGUgYnVmZmVyIGludGVyZmFjZSwgJS44MHMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBuYnVmcyA9IGkgKyAxOyAgLyogZm9yIGVycm9yIGNsZWFudXAgKi8KKyAgICAgICAgaXRlbWxlbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBpZiAoaXRlbWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gc3opIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN6ICs9IGl0ZW1sZW47CisgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChzZXBsZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VxbGVuICE9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KKyAgICByZXMgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHN6KTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLworICAgIHAgPSBTVFJJTkdMSUJfU1RSKHJlcyk7CisgICAgaWYgKCFzZXBsZW4pIHsKKyAgICAgICAgLyogZmFzdCBwYXRoICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgICAgIGNoYXIgKnEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgICAgIHAgKz0gbjsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgY2hhciAqcTsKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXBzdHIsIHNlcGxlbik7CisgICAgICAgICAgICBwICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgIHEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOworICAgICAgICBwICs9IG47CisgICAgfQorICAgIGdvdG8gZG9uZTsKKworZXJyb3I6CisgICAgcmVzID0gTlVMTDsKK2RvbmU6CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcnNbaV0pOworICAgIGlmIChidWZmZXJzICE9IHN0YXRpY19idWZmZXJzKQorICAgICAgICBQeU1lbV9GUkVFKGJ1ZmZlcnMpOworICAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBOQl9TVEFUSUNfQlVGRkVSUwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAppbmRleCA0MGNiNTEyLi5lZDMyYTZmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaApAQCAtMjksNiArMjksMTEgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKQEAgLTc5LDYgKzg0LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzE4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyogc3RyaW5nbGliOiByZXBsYWNlIGltcGxlbWVudGF0aW9uICovCisKKyNpZm5kZWYgU1RSSU5HTElCX0ZBU1RTRUFSQ0hfSAorI2Vycm9yIG11c3QgaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIgYmVmb3JlIGluY2x1ZGluZyB0aGlzIG1vZHVsZQorI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorU1RSSU5HTElCKHJlcGxhY2VfMWNoYXJfaW5wbGFjZSkoU1RSSU5HTElCX0NIQVIqIHMsIFNUUklOR0xJQl9DSEFSKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgICpzID0gdTI7CisgICAgd2hpbGUgKC0tbWF4Y291bnQgJiYgKytzICE9IGVuZCkgeworICAgICAgICAvKiBGaW5kIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZXBsYWNlZC4KKworICAgICAgICAgICBJZiBpdCBvY2N1cnMgb2Z0ZW4sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhbiBpbmxpbmUKKyAgICAgICAgICAgbG9vcC4gIElmIGl0IG9jY3VycyBzZWxkb20sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhCisgICAgICAgICAgIGZ1bmN0aW9uIGNhbGw7IHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBhbW9ydGl6ZWQKKyAgICAgICAgICAgYWNyb3NzIHRoZSBtYW55IGNoYXJhY3RlcnMgdGhhdCBjYWxsIGNvdmVycy4gIFdlIHN0YXJ0IHdpdGggYW4KKyAgICAgICAgICAgaW5saW5lIGxvb3AgYW5kIHVzZSBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBmYWxsIGJhY2sKKyAgICAgICAgICAgdG8gYSBmdW5jdGlvbiBjYWxsLiAqLworICAgICAgICBpZiAoKnMgIT0gdTEpIHsKKyAgICAgICAgICAgIGludCBhdHRlbXB0cyA9IDEwOworICAgICAgICAgICAgLyogc2VhcmNoIHUxIGluIGEgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgqcyA9PSB1MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCEtLWF0dGVtcHRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHUxIHdhcyBub3QgZm91bmQgZm9yIGF0dGVtcHRzIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZSBGQVNUU0VBUkNIKCkgb3IgbWVtY2hyKCkgKi8KKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQorICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIHMgPSBtZW1jaHIocywgdTEsIGVuZCAtIHMpOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiBjaDEgPSAoU1RSSU5HTElCX0NIQVIpIHUxOworICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIGkgPSBGQVNUU0VBUkNIKHMsIGVuZCAtIHMsICZjaDEsIDEsIDAsIEZBU1RfU0VBUkNIKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzICs9IGk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCB0aGUgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKnMgPSB1MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAppbmRleCA5NDdkZDI4Li4zMWY3N2E3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCiAgICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCiAKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGo7CiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpzdWI7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAppbmRleCA3YmI5MWE3Li5jZTI3ZjNlIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeUJ5dGVzX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeUJ5dGVzX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAppbmRleCA5MGZhMTI5Li5kZDAwOTc2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaApAQCAtNSwyMSArNSwyMyBAQAogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotIkIuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IGNvcHkgb2YgQlxuXAorIkIuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IGNvcHkgb2YgQlxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIEIgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0Kgotc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjb25zdCBjaGFyICplLCAqcDsKICAgICBjaGFyICpxOwogICAgIHNpemVfdCBpLCBqOwogICAgIFB5T2JqZWN0ICp1OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsidGFic2l6ZSIsIDB9OwogICAgIGludCB0YWJzaXplID0gODsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6ZXhwYW5kdGFicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdGFic2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogRmlyc3QgcGFzczogZGV0ZXJtaW5lIHNpemUgb2Ygb3V0cHV0IHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCmluZGV4IGU4YzZmY2IuLmNlMWViNTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKaW5kZXggNDVlNTcyOS4uZjkwMGNiNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1MyCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaAppbmRleCA2NDdhMjdlLi44NmE0ODBmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzQKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKaW5kZXggMDMxMTdlYy4uZjlkM2YxZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCkBAIC02LDcgKzYsNiBAQAogI3VuZGVmICBTVFJJTkdMSUJfU1RSCiAjdW5kZWYgIFNUUklOR0xJQl9MRU4KICN1bmRlZiAgU1RSSU5HTElCX05FVwotI3VuZGVmICBTVFJJTkdMSUJfUkVTSVpFCiAjdW5kZWYgIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZwogI3VuZGVmIFNUUklOR0xJQl9JU19VTklDT0RFCiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCmluZGV4IGQ0NzE5YTUuLmFlYzIyMWEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaApAQCAtNTQzLDcgKzU0Myw3IEBACiAKIHN0YXRpYyBpbnQKIHBhcnNlX2ZpZWxkKFN1YlN0cmluZyAqc3RyLCBTdWJTdHJpbmcgKmZpZWxkX25hbWUsIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsCi0gICAgICAgICAgICBQeV9VQ1M0ICpjb252ZXJzaW9uKQorICAgICAgICAgICAgaW50ICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcsIFB5X1VDUzQgKmNvbnZlcnNpb24pCiB7CiAgICAgLyogTm90ZSB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlmIHRoZSBmaWVsZCBuYW1lIGlzIHplcm8gbGVuZ3RoLAogICAgICAgIHdoaWNoIGlzIGdvb2QuICBaZXJvIGxlbmd0aCBmaWVsZCBuYW1lcyBhcmUgaGFuZGxlZCBsYXRlciwgaW4KQEAgLTU2MSw2ICs1NjEsMTUgQEAKICAgICBmaWVsZF9uYW1lLT5zdGFydCA9IHN0ci0+c3RhcnQ7CiAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgewogICAgICAgICBzd2l0Y2ggKChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKSkpIHsKKyAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuZXhwZWN0ZWQgJ3snIGluIGZpZWxkIG5hbWUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIGZvciAoOyBzdHItPnN0YXJ0IDwgc3RyLT5lbmQ7IHN0ci0+c3RhcnQrKykKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCkgPT0gJ10nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlICd9JzoKICAgICAgICAgY2FzZSAnOic6CiAgICAgICAgIGNhc2UgJyEnOgogICAgICAgICAgICAgYnJlYWs7CkBAIC01NzAsNDEgKzU3OSw2MiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0IC0gMTsKICAgICBpZiAoYyA9PSAnIScgfHwgYyA9PSAnOicpIHsKKyAgICAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICAgICAgLyogd2UgaGF2ZSBhIGZvcm1hdCBzcGVjaWZpZXIgYW5kL29yIGEgY29udmVyc2lvbiAqLwogICAgICAgICAvKiBkb24ndCBpbmNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciAqLwotICAgICAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0LTE7Ci0KLSAgICAgICAgLyogdGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7Ci0gICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7Ci0gICAgICAgIGZvcm1hdF9zcGVjLT5lbmQgPSBzdHItPmVuZDsKIAogICAgICAgICAvKiBzZWUgaWYgdGhlcmUncyBhIGNvbnZlcnNpb24gc3BlY2lmaWVyICovCiAgICAgICAgIGlmIChjID09ICchJykgewogICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhbm90aGVyIGNoYXJhY3RlciBwcmVzZW50ICovCi0gICAgICAgICAgICBpZiAoZm9ybWF0X3NwZWMtPnN0YXJ0ID49IGZvcm1hdF9zcGVjLT5lbmQpIHsKKyAgICAgICAgICAgIGlmIChzdHItPnN0YXJ0ID49IHN0ci0+ZW5kKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQgb2YgZm9ybWF0IHdoaWxlIGxvb2tpbmcgZm9yIGNvbnZlcnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIHN0cmluZyB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllciIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKmNvbnZlcnNpb24gPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGZvcm1hdF9zcGVjLT5zdHIsIGZvcm1hdF9zcGVjLT5zdGFydCsrKTsKKyAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKTsKIAotICAgICAgICAgICAgLyogaWYgdGhlcmUgaXMgYW5vdGhlciBjaGFyYWN0ZXIsIGl0IG11c3QgYmUgYSBjb2xvbiAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA8IGZvcm1hdF9zcGVjLT5lbmQpIHsKLSAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CisgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ30nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGZvcm1hdCBzcGVjaWZpZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnOicgYWZ0ZXIgY29udmVyc2lvbiBzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdHIgPSBzdHItPnN0cjsKKyAgICAgICAgZm9ybWF0X3NwZWMtPnN0YXJ0ID0gc3RyLT5zdGFydDsKKyAgICAgICAgY291bnQgPSAxOworICAgICAgICB3aGlsZSAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CisgICAgICAgICAgICBzd2l0Y2ggKChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKSkpIHsKKyAgICAgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgICAgICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgPSAxOworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLT5lbmQgPSBzdHItPnN0YXJ0IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5tYXRjaGVkICd7JyBpbiBmb3JtYXQgc3BlYyIpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICAvKiBlbmQgb2Ygc3RyaW5nLCB0aGVyZSdzIG5vIGZvcm1hdF9zcGVjIG9yIGNvbnZlcnNpb24gKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydDsKKyAgICBlbHNlIGlmIChjICE9ICd9JykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImV4cGVjdGVkICd9JyBiZWZvcmUgZW5kIG9mIHN0cmluZyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICByZXR1cm4gMTsKIH0KQEAgLTYzOCwxMCArNjY4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywgUHlfVUNTNCAqY29udmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgaW50ICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpCiB7Ci0gICAgaW50IGF0X2VuZCwgaGl0X2Zvcm1hdF9zcGVjOworICAgIGludCBhdF9lbmQ7CiAgICAgUHlfVUNTNCBjID0gMDsKICAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIGludCBjb3VudDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgbWFya3VwX2ZvbGxvd3MgPSAwOwogCkBAIC03MTMsNTIgKzc0MiwxMiBAQAogICAgIGlmICghbWFya3VwX2ZvbGxvd3MpCiAgICAgICAgIHJldHVybiAyOwogCi0gICAgLyogdGhpcyBpcyBtYXJrdXAsIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGJ5IGNvdW50aW5nIG5lc3RlZAotICAgICAgIGJyYWNlcy4gIG5vdGUgdGhhdCB0aGlzIHByb2hpYml0cyBlc2NhcGVkIGJyYWNlcywgc28gdGhhdAotICAgICAgIGZvcm1hdF9zcGVjcyBjYW5ub3QgaGF2ZSBicmFjZXMgaW4gdGhlbS4gKi8KKyAgICAvKiB0aGlzIGlzIG1hcmt1cDsgcGFyc2UgdGhlIGZpZWxkICovCiAgICAgKmZpZWxkX3ByZXNlbnQgPSAxOwotICAgIGNvdW50ID0gMTsKLQotICAgIHN0YXJ0ID0gc2VsZi0+c3RyLnN0YXJ0OwotCi0gICAgLyogd2Uga25vdyB3ZSBjYW4ndCBoYXZlIGEgemVybyBsZW5ndGggc3RyaW5nLCBzbyBkb24ndCB3b3JyeQotICAgICAgIGFib3V0IHRoYXQgY2FzZSAqLwotICAgIGhpdF9mb3JtYXRfc3BlYyA9IDA7Ci0gICAgd2hpbGUgKHNlbGYtPnN0ci5zdGFydCA8IHNlbGYtPnN0ci5lbmQpIHsKLSAgICAgICAgc3dpdGNoIChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzZWxmLT5zdHIuc3RyLCBzZWxmLT5zdHIuc3RhcnQrKykpIHsKLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBpZiAoIWhpdF9mb3JtYXRfc3BlYykgewotICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBoaXRfZm9ybWF0X3NwZWMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3snOgotICAgICAgICAgICAgLyogdGhlIGZvcm1hdCBzcGVjIG5lZWRzIHRvIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkLgotICAgICAgICAgICAgICAgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIGFuZCBub3Qgc3RyaWN0bHkgbmVlZGVkICovCi0gICAgICAgICAgICBpZiAoaGl0X2Zvcm1hdF9zcGVjKQotICAgICAgICAgICAgICAgICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgPSAxOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd9JzoKLSAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICBpZiAoY291bnQgPD0gMCkgewotICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUuICBwYXJzZSBhbmQgZ2V0IG91dCAqLwotICAgICAgICAgICAgICAgIFN1YlN0cmluZyBzOwotCi0gICAgICAgICAgICAgICAgU3ViU3RyaW5nX2luaXQoJnMsIHNlbGYtPnN0ci5zdHIsIHN0YXJ0LCBzZWxmLT5zdHIuc3RhcnQgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VfZmllbGQoJnMsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLCBjb252ZXJzaW9uKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogZW5kIG9mIHN0cmluZyB3aGlsZSBzZWFyY2hpbmcgZm9yIG1hdGNoaW5nICd9JyAqLwotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5tYXRjaGVkICd7JyBpbiBmb3JtYXQiKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcnNlX2ZpZWxkKCZzZWxmLT5zdHIsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBjb252ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDI7CiB9CiAKIApAQCAtODc3LDI1ICs4NjYsMTkgQEAKICAgICBTdWJTdHJpbmcgbGl0ZXJhbDsKICAgICBTdWJTdHJpbmcgZmllbGRfbmFtZTsKICAgICBTdWJTdHJpbmcgZm9ybWF0X3NwZWM7Ci0gICAgUHlfVUNTNCBjb252ZXJzaW9uLCBtYXhjaGFyOwotICAgIFB5X3NzaXplX3Qgc3VibGVuOwotICAgIGludCBlcnI7CisgICAgUHlfVUNTNCBjb252ZXJzaW9uOwogCiAgICAgTWFya3VwSXRlcmF0b3JfaW5pdCgmaXRlciwgaW5wdXQtPnN0ciwgaW5wdXQtPnN0YXJ0LCBpbnB1dC0+ZW5kKTsKICAgICB3aGlsZSAoKHJlc3VsdCA9IE1hcmt1cEl0ZXJhdG9yX25leHQoJml0ZXIsICZsaXRlcmFsLCAmZmllbGRfcHJlc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX25hbWUsICZmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpKSA9PSAyKSB7Ci0gICAgICAgIHN1YmxlbiA9IGxpdGVyYWwuZW5kIC0gbGl0ZXJhbC5zdGFydDsKLSAgICAgICAgaWYgKHN1YmxlbikgewotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIobGl0ZXJhbC5zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCk7Ci0gICAgICAgICAgICBlcnIgPSBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBzdWJsZW4sIG1heGNoYXIpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAtMSkKKyAgICAgICAgaWYgKGxpdGVyYWwuZW5kICE9IGxpdGVyYWwuc3RhcnQpIHsKKyAgICAgICAgICAgIGlmICghZmllbGRfcHJlc2VudCAmJiBpdGVyLnN0ci5zdGFydCA9PSBpdGVyLnN0ci5lbmQpCisgICAgICAgICAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcod3JpdGVyLCBsaXRlcmFsLnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RhcnQsIGxpdGVyYWwuZW5kKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0ciwgbGl0ZXJhbC5zdGFydCwgc3VibGVuKTsKLSAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWVsZF9wcmVzZW50KSB7CkBAIC05MjAsNyArOTAzLDYgQEAKICAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uX2RlcHRoLCBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKLSAgICBQeV9zc2l6ZV90IG1pbmxlbjsKIAogICAgIC8qIGNoZWNrIHRoZSByZWN1cnNpb24gbGV2ZWwgKi8KICAgICBpZiAocmVjdXJzaW9uX2RlcHRoIDw9IDApIHsKQEAgLTkyOSw4ICs5MTEsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBtaW5sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbnB1dC0+c3RyKSArIDEwMDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgbWlubGVuKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbnB1dC0+c3RyKSArIDEwMDsKIAogICAgIGlmICghZG9fbWFya3VwKGlucHV0LCBhcmdzLCBrd2FyZ3MsICZ3cml0ZXIsIHJlY3Vyc2lvbl9kZXB0aCwKICAgICAgICAgICAgICAgICAgICBhdXRvX251bWJlcikpIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCmluZGV4IGYxNmYyMWUuLjNkYjU2MjkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaApAQCAtMjEsMTcgKzIxLDExIEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIFB5VW5pY29kZV9SZXNpemUKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAwMDAwMAotI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfVW5pY29kZQotI2RlZmluZSBTVFJJTkdMSUJfVE9BU0NJSSAgICAgICAgUHlPYmplY3RfUmVwcgotI2Vsc2UKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgogI2RlZmluZSBTVFJJTkdMSUJfVE9BU0NJSSAgICAgICAgUHlPYmplY3RfQVNDSUkKLSNlbmRpZgogCiAjZGVmaW5lIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAxCiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RydWN0c2VxLmMgYi9PYmplY3RzL3N0cnVjdHNlcS5jCmluZGV4IGMzYjlhNzIuLjY2NDM0NGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RydWN0c2VxLmMKKysrIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwpAQCAtMTEsMTcgKzExLDIwIEBACiAvKiBGaWVsZHMgd2l0aCB0aGlzIG5hbWUgaGF2ZSBvbmx5IGEgZmllbGQgaW5kZXgsIG5vdCBhIGZpZWxkIG5hbWUuCiAgICBUaGV5IGFyZSBvbmx5IGFsbG93ZWQgZm9yIGluZGljZXMgPCBuX3Zpc2libGVfZmllbGRzLiAqLwogY2hhciAqUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQgPSAidW5uYW1lZCBmaWVsZCI7CitfUHlfSURFTlRJRklFUihuX3NlcXVlbmNlX2ZpZWxkcyk7CitfUHlfSURFTlRJRklFUihuX2ZpZWxkcyk7CitfUHlfSURFTlRJRklFUihuX3VubmFtZWRfZmllbGRzKTsKIAogI2RlZmluZSBWSVNJQkxFX1NJWkUob3ApIFB5X1NJWkUob3ApCiAjZGVmaW5lIFZJU0lCTEVfU0laRV9UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHZpc2libGVfbGVuZ3RoX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl9zZXF1ZW5jZV9maWVsZHMpKQogCiAjZGVmaW5lIFJFQUxfU0laRV9UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHJlYWxfbGVuZ3RoX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl9maWVsZHMpKQogI2RlZmluZSBSRUFMX1NJWkUob3ApIFJFQUxfU0laRV9UUChQeV9UWVBFKG9wKSkKIAogI2RlZmluZSBVTk5BTUVEX0ZJRUxEU19UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHVubmFtZWRfZmllbGRzX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl91bm5hbWVkX2ZpZWxkcykpCiAjZGVmaW5lIFVOTkFNRURfRklFTERTKG9wKSBVTk5BTUVEX0ZJRUxEU19UUChQeV9UWVBFKG9wKSkKIAogCkBAIC01OSw3ICs2Miw3IEBACiBzdHJ1Y3RzZXFfZGVhbGxvYyhQeVN0cnVjdFNlcXVlbmNlICpvYmopCiB7CiAgICAgUHlfc3NpemVfdCBpLCBzaXplOwotICAgIAorCiAgICAgc2l6ZSA9IFJFQUxfU0laRShvYmopOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYmotPm9iX2l0ZW1baV0pOwpAQCAtMjMwLDggKzIzMyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3RydWN0c2VxX3JlZHVjZShQeVN0cnVjdFNlcXVlbmNlKiBzZWxmKQogewotICAgIFB5T2JqZWN0KiB0dXA7Ci0gICAgUHlPYmplY3QqIGRpY3Q7CisgICAgUHlPYmplY3QqIHR1cCA9IE5VTEw7CisgICAgUHlPYmplY3QqIGRpY3QgPSBOVUxMOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBuX2ZpZWxkcywgbl92aXNpYmxlX2ZpZWxkcywgbl91bm5hbWVkX2ZpZWxkczsKICAgICBpbnQgaTsKQEAgLTI0MCwxNSArMjQzLDEyIEBACiAgICAgbl92aXNpYmxlX2ZpZWxkcyA9IFZJU0lCTEVfU0laRShzZWxmKTsKICAgICBuX3VubmFtZWRfZmllbGRzID0gVU5OQU1FRF9GSUVMRFMoc2VsZik7CiAgICAgdHVwID0gUHlUdXBsZV9OZXcobl92aXNpYmxlX2ZpZWxkcyk7Ci0gICAgaWYgKCF0dXApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghdHVwKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZGljdCA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIWRpY3QpIHsKLSAgICAgICAgUHlfREVDUkVGKHR1cCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWRpY3QpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbl92aXNpYmxlX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5vYl9pdGVtW2ldKTsKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiAgICAgZm9yICg7IGkgPCBuX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIGNoYXIgKm4gPSBQeV9UWVBFKHNlbGYpLT50cF9tZW1iZXJzW2ktbl91bm5hbWVkX2ZpZWxkc10ubmFtZTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfaXRlbVtpXSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBuLCBzZWxmLT5vYl9pdGVtW2ldKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIihPKE9PKSkiLCBQeV9UWVBFKHNlbGYpLCB0dXAsIGRpY3QpOwpAQCAtMjY3LDYgKzI2NywxMSBAQAogICAgIFB5X0RFQ1JFRihkaWN0KTsKIAogICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYodHVwKTsKKyAgICBQeV9YREVDUkVGKGRpY3QpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgc3RydWN0c2VxX21ldGhvZHNbXSA9IHsKQEAgLTMxNSwxMiArMzIwLDEzIEBACiAgICAgc3RydWN0c2VxX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLXZvaWQKLVB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCitpbnQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQogewogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5TWVtYmVyRGVmKiBtZW1iZXJzOwogICAgIGludCBuX21lbWJlcnMsIG5fdW5uYW1lZF9tZW1iZXJzLCBpLCBrOworICAgIFB5T2JqZWN0ICp2OwogCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIGlmIHRoZSB0eXBlIG9iamVjdCB3YXMgY2hhaW5lZCwgdW5jaGFpbiBpdCBmaXJzdApAQCAtMzQyLDggKzM0OCwxMCBAQAogICAgIHR5cGUtPnRwX2RvYyA9IGRlc2MtPmRvYzsKIAogICAgIG1lbWJlcnMgPSBQeU1lbV9ORVcoUHlNZW1iZXJEZWYsIG5fbWVtYmVycy1uX3VubmFtZWRfbWVtYmVycysxKTsKLSAgICBpZiAobWVtYmVycyA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgZm9yIChpID0gayA9IDA7IGkgPCBuX21lbWJlcnM7ICsraSkgewogICAgICAgICBpZiAoZGVzYy0+ZmllbGRzW2ldLm5hbWUgPT0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQpCkBAIC0zNjEsMzAgKzM2OSw1NiBAQAogICAgIHR5cGUtPnRwX21lbWJlcnMgPSBtZW1iZXJzOwogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0lOQ1JFRih0eXBlKTsKIAogICAgIGRpY3QgPSB0eXBlLT50cF9kaWN0OwogI2RlZmluZSBTRVRfRElDVF9GUk9NX0lOVChrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgXAotICAgICAgICBpZiAodiAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGtleSwgdik7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpIDwgMCkgeyAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQodmlzaWJsZV9sZW5ndGhfa2V5LCBkZXNjLT5uX2luX3NlcXVlbmNlKTsKICAgICBTRVRfRElDVF9GUk9NX0lOVChyZWFsX2xlbmd0aF9rZXksIG5fbWVtYmVycyk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQodW5uYW1lZF9maWVsZHNfa2V5LCBuX3VubmFtZWRfbWVtYmVycyk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKK3sKKyAgICAodm9pZClQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMih0eXBlLCBkZXNjKTsKIH0KIAogUHlUeXBlT2JqZWN0KgogUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKLSAgICBQeVR5cGVPYmplY3QgKnJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShyZXN1bHQsIGRlc2MpOworICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0OworCisgICAgcmVzdWx0ID0gKFB5VHlwZU9iamVjdCopUHlUeXBlX0dlbmVyaWNBbGxvYygmUHlUeXBlX1R5cGUsIDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKHJlc3VsdCwgZGVzYykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworaW50IF9QeVN0cnVjdFNlcXVlbmNlX0luaXQodm9pZCkKK3sKKyAgICBpZiAoX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl9zZXF1ZW5jZV9maWVsZHMpID09IE5VTEwKKyAgICAgICAgfHwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl9maWVsZHMpID09IE5VTEwKKyAgICAgICAgfHwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl91bm5hbWVkX2ZpZWxkcykgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKaW5kZXggZWMzZjkxYi4uNTYyNWE2NSAxMDA2NDQKLS0tIGEvT2JqZWN0cy90dXBsZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwpAQCAtNjMsOSArNjMsOSBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX05ldyhyZWdpc3RlciBQeV9zc2l6ZV90IHNpemUpCitQeVR1cGxlX05ldyhQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3A7CisgICAgUHlUdXBsZU9iamVjdCAqb3A7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogfQogCiBQeV9zc2l6ZV90Ci1QeVR1cGxlX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlUdXBsZV9TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VHVwbGVfR2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK1B5VHVwbGVfR2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIH0KIAogaW50Ci1QeVR1cGxlX1NldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlUdXBsZV9TZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkgfHwgb3AtPm9iX3JlZmNudCAhPSAxKSB7CiAgICAgICAgIFB5X1hERUNSRUYobmV3aXRlbSk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMjI0LDEwICsyMjQsMTAgQEAKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKLXR1cGxlZGVhbGxvYyhyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpvcCkKK3R1cGxlZGVhbGxvYyhQeVR1cGxlT2JqZWN0ICpvcCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSAgUHlfU0laRShvcCk7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sob3ApOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4ob3ApCiAgICAgaWYgKGxlbiA+IDApIHsKQEAgLTI1NSwyMCArMjU1LDEyIEBACiB0dXBsZXJlcHIoUHlUdXBsZU9iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgUHlPYmplY3QgKnMgPSBOVUxMOwotICAgIF9QeUFjY3UgYWNjOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc2VwID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIG4gPSBQeV9TSVpFKHYpOwogICAgIGlmIChuID09IDApCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiKCkiKTsKIAotICAgIGlmIChzZXAgPT0gTlVMTCkgewotICAgICAgICBzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICAgICAgaWYgKHNlcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgLyogV2hpbGUgbm90IG11dGFibGUsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGVuZCB1cCB3aXRoIGEgY3ljbGUgaW4gYQogICAgICAgIHR1cGxlIHRocm91Z2ggYW4gb2JqZWN0IHRoYXQgc3RvcmVzIGl0c2VsZiB3aXRoaW4gYSB0dXBsZSAoYW5kIHRodXMKICAgICAgICBpbmZpbml0ZWx5IGFza3MgZm9yIHRoZSByZXByIG9mIGl0c2VsZikuIFRoaXMgc2hvdWxkIG9ubHkgYmUKQEAgLTI3OCw0MCArMjcwLDU4IEBACiAgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoLi4uKSIpIDogTlVMTDsKICAgICB9CiAKLSAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQotICAgICAgICBnb3RvIGVycm9yOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICBpZiAoUHlfU0laRSh2KSA+IDEpIHsKKyAgICAgICAgLyogIigiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiKSIgKi8KKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAxICsgMSArICgyICsgMSkgKiAoUHlfU0laRSh2KSAtIDEpICsgMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qICIoMSwpIiAqLworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IDQ7CisgICAgfQogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICcoJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0ICpzOworCisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSByZXByIG9mIGEgdHVwbGUiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIGlmIChuID4gMSkKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIpIik7Ci0gICAgZWxzZQotICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwpIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CisKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICBpZiAobiA+IDEpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICcpJykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwpIiwgMikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7Ci0gICAgcmV0dXJuIF9QeUFjY3VfRmluaXNoKCZhY2MpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogZXJyb3I6Ci0gICAgX1B5QWNjdV9EZXN0cm95KCZhY2MpOwotICAgIFB5X1hERUNSRUYocyk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTMyMiwxNSArMzMyLDE4IEBACiAKICAgICAgMTA4MjUyNywgMTE2NTA0OSwgMTA4MjUzMSwgMTE2NTA1NywgMTI0NzU4MSwgMTMzMDEwMywgMTA4MjUzMywKICAgICAgMTMzMDExMSwgMTQxMjYzMywgMTE2NTA2OSwgMTI0NzU5OSwgMTQ5NTE3NywgMTU3NzY5OQorCisgICBUZXN0cyBoYXZlIHNob3duIHRoYXQgaXQncyBub3Qgd29ydGggdG8gY2FjaGUgdGhlIGhhc2ggdmFsdWUsIHNlZQorICAgaXNzdWUgIzk2ODUuCiAqLwogCiBzdGF0aWMgUHlfaGFzaF90CiB0dXBsZWhhc2goUHlUdXBsZU9iamVjdCAqdikKIHsKLSAgICByZWdpc3RlciBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBQeV9oYXNoX3QgeTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIFB5X2hhc2hfdCB5OworICAgIFB5X3NzaXplX3QgbGVuID0gUHlfU0laRSh2KTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgUHlfdWhhc2hfdCBtdWx0ID0gX1B5SEFTSF9NVUxUSVBMSUVSOwogICAgIHggPSAweDM0NTY3OFVMOwogICAgIHAgPSB2LT5vYl9pdGVtOwpAQCAtMzY3LDcgKzM4MCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZWl0ZW0ocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQordHVwbGVpdGVtKFB5VHVwbGVPYmplY3QgKmEsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAidHVwbGUgaW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC0zNzgsMTIgKzM5MSwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVzbGljZShyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGlsb3csCi0gICAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaWhpZ2gpCit0dXBsZXNsaWNlKFB5VHVwbGVPYmplY3QgKmEsIFB5X3NzaXplX3QgaWxvdywKKyAgICAgICAgICAgUHlfc3NpemVfdCBpaGlnaCkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpucDsKKyAgICBQeVR1cGxlT2JqZWN0ICpucDsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaWYgKGlsb3cgPCAwKQogICAgICAgICBpbG93ID0gMDsKQEAgLTQyMCwxMCArNDMzLDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZWNvbmNhdChyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeU9iamVjdCAqYmIpCit0dXBsZWNvbmNhdChQeVR1cGxlT2JqZWN0ICphLCBQeU9iamVjdCAqYmIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CiAgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGJiKSkgewpAQCAtODMzLDggKzg0Niw4IEBACiBpbnQKIF9QeVR1cGxlX1Jlc2l6ZShQeU9iamVjdCAqKnB2LCBQeV9zc2l6ZV90IG5ld3NpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpzdjsKKyAgICBQeVR1cGxlT2JqZWN0ICp2OworICAgIFB5VHVwbGVPYmplY3QgKnN2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IG9sZHNpemU7CiAKQEAgLTkyNyw3ICs5NDAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeVR1cGxlT2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IHR1cGxlaXRlcm9iamVjdDsKIApAQCAtOTg1LDcgKzk5OCw3IEBACiB0dXBsZWl0ZXJfcmVkdWNlKHR1cGxlaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbCIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbiIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTigoKSkiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpKTsKQEAgLTk5NCw3ICsxMDA3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0dXBsZWl0ZXJfc2V0c3RhdGUodHVwbGVpdGVyb2JqZWN0ICppdCwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIGxvbmcgaW5kZXggPSBQeUxvbmdfQXNMb25nKHN0YXRlKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gUHlMb25nX0FzU3NpemVfdChzdGF0ZSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChpdC0+aXRfc2VxICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZW9iamVjdC5jIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKaW5kZXggM2RjYmM4Ni4uNDJhMGE1OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy90eXBlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKQEAgLTM5LDE1ICszOSwyMSBAQAogc3RhdGljIHN0cnVjdCBtZXRob2RfY2FjaGVfZW50cnkgbWV0aG9kX2NhY2hlWzEgPDwgTUNBQ0hFX1NJWkVfRVhQXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dF92ZXJzaW9uX3RhZyA9IDA7CiAKKy8qIGFscGhhYmV0aWNhbCBvcmRlciAqLworX1B5X0lERU5USUZJRVIoX19hYnN0cmFjdG1ldGhvZHNfXyk7CiBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogX1B5X0lERU5USUZJRVIoX19kb2NfXyk7Ci1fUHlfSURFTlRJRklFUihfX2dldGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2dldGF0dHJpYnV0ZV9fKTsKK19QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9faGFzaF9fKTsKK19QeV9JREVOVElGSUVSKF9fbGVuX18pOwogX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CiBfUHlfSURFTlRJRklFUihfX25ld19fKTsKK19QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHNsb3RfdHBfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKQEAgLTEwMSwxNiArMTA3LDE3IEBACiAgICAgICAgbmVlZGVkLgogICAgICAqLwogICAgIFB5T2JqZWN0ICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGlmICghUHlUeXBlX0hhc0ZlYXR1cmUodHlwZSwgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJhdyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHJhdyAhPSBOVUxMKSB7Ci0gICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUocmF3KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHJhdywgaSk7CisgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChyYXcpKTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChyYXcsICZpLCBOVUxMLCAmcmVmKSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgICAgICBpZiAocmVmICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICBQeVR5cGVfTW9kaWZpZWQoKFB5VHlwZU9iamVjdCAqKXJlZik7CkBAIC0zNDMsMTEgKzM1MCwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHR5cGVfbW9kdWxlKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBQeU9iamVjdCAqbW9kOwogICAgIGNoYXIgKnM7CiAKICAgICBpZiAodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSB7Ci0gICAgICAgIG1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18pOworICAgICAgICBQeU9iamVjdCAqbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXyk7CiAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX21vZHVsZV9fIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM1NiwxMSArMzYyLDE0IEBACiAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqbmFtZTsKICAgICAgICAgcyA9IHN0cnJjaHIodHlwZS0+dHBfbmFtZSwgJy4nKTsKICAgICAgICAgaWYgKHMgIT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgKFB5X3NzaXplX3QpKHMgLSB0eXBlLT50cF9uYW1lKSk7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiYnVpbHRpbnMiKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2J1aWx0aW5zKTsKKyAgICAgICAgUHlfWElOQ1JFRihuYW1lKTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogfQogCkBAIC0zODIsOSArMzkxLDExIEBACiAgICAgLyogdHlwZSBpdHNlbGYgaGFzIGFuIF9fYWJzdHJhY3RtZXRob2RzX18gZGVzY3JpcHRvciAodGhpcykuIERvbid0IHJldHVybgogICAgICAgIHRoYXQuICovCiAgICAgaWYgKHR5cGUgIT0gJlB5VHlwZV9UeXBlKQotICAgICAgICBtb2QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBtb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKICAgICBpZiAoIW1vZCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CisgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBtZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1hJTkNSRUYobW9kKTsKQEAgLTQwMywxMyArNDE0LDE1IEBACiAgICAgICAgIGFic3RyYWN0ID0gUHlPYmplY3RfSXNUcnVlKHZhbHVlKTsKICAgICAgICAgaWYgKGFic3RyYWN0IDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iLCB2YWx1ZSk7CisgICAgICAgIHJlcyA9IF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18sIHZhbHVlKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFic3RyYWN0ID0gMDsKLSAgICAgICAgcmVzID0gUHlEaWN0X0RlbEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgcmVzID0gX1B5RGljdF9EZWxJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CiAgICAgICAgIGlmIChyZXMgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CisgICAgICAgICAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtNDM1LDYgKzQ0OCw3IEBACiBzdGF0aWMgaW50IGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQoUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqLCBjaGFyICopOwogc3RhdGljIGludCBhZGRfc3ViY2xhc3MoUHlUeXBlT2JqZWN0KiwgUHlUeXBlT2JqZWN0Kik7CiBzdGF0aWMgdm9pZCByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlcyk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3Nsb3RzKFB5VHlwZU9iamVjdCAqKTsKIAogdHlwZWRlZiBpbnQgKCp1cGRhdGVfY2FsbGJhY2spKFB5VHlwZU9iamVjdCAqLCB2b2lkICopOwpAQCAtNDQ4LDE1ICs0NjIsMTUgQEAKIHsKICAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOwogICAgIFB5T2JqZWN0ICpyZWYsICpzdWJjbGFzc2VzLCAqb2xkX21ybzsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgc3ViY2xhc3NlcyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHN1YmNsYXNzZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhzdWJjbGFzc2VzKSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShzdWJjbGFzc2VzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3Qoc3ViY2xhc3NlcykpOworICAgIGkgPSAwOworCisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHN1YmNsYXNzZXMsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICBzdWJjbGFzcyA9IChQeVR5cGVPYmplY3QgKilQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBhc3NlcnQoc3ViY2xhc3MgIT0gTlVMTCk7CkBAIC01NzUsMTMgKzU4OSw3IEBACiAgICAgLyogZm9yIG5vdywgc29kIHRoYXQ6IGp1c3QgcmVtb3ZlIGZyb20gYWxsIG9sZF9iYXNlcywKICAgICAgICBhZGQgdG8gYWxsIG5ld19iYXNlcyAqLwogCi0gICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRShvbGRfYmFzZXMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKG9sZF9iYXNlcywgaSk7Ci0gICAgICAgIGlmIChQeVR5cGVfQ2hlY2sob2IpKSB7Ci0gICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoCi0gICAgICAgICAgICAgICAgKFB5VHlwZU9iamVjdCopb2IsIHR5cGUpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCBvbGRfYmFzZXMpOwogCiAgICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRSh2YWx1ZSkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0odmFsdWUsIGkpOwpAQCAtNzExLDcgKzcxOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChtb2QgIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhtb2QsICJidWlsdGlucyIpKQorICAgIGlmIChtb2QgIT0gTlVMTCAmJiBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kLCAmUHlJZF9idWlsdGlucykpCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y2xhc3MgJyVVLiVVJz4iLCBtb2QsIG5hbWUpOwogICAgIGVsc2UKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjbGFzcyAnJXMnPiIsIHR5cGUtPnRwX25hbWUpOwpAQCAtNzMzLDYgKzc0MSwxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIHR5cGVfY2FsbCgpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9vc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICBvYmogPSB0eXBlLT50cF9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgaWYgKG9iaiAhPSBOVUxMKSB7CiAgICAgICAgIC8qIFVnbHkgZXhjZXB0aW9uOiB3aGVuIHRoZSBjYWxsIHdhcyB0eXBlKHNvbWV0aGluZyksCkBAIC03NDcsMTAgKzc2MiwxMiBAQAogICAgICAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUoUHlfVFlQRShvYmopLCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIHR5cGUgPSBQeV9UWVBFKG9iaik7Ci0gICAgICAgIGlmICh0eXBlLT50cF9pbml0ICE9IE5VTEwgJiYKLSAgICAgICAgICAgIHR5cGUtPnRwX2luaXQob2JqLCBhcmdzLCBrd2RzKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgb2JqID0gTlVMTDsKKyAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCkgeworICAgICAgICAgICAgaW50IHJlcyA9IHR5cGUtPnRwX2luaXQob2JqLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgICAgICAgICAgb2JqID0gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gb2JqOwpAQCAtOTA5LDYgKzkyNiw3IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlLCAqYmFzZTsKICAgICBkZXN0cnVjdG9yIGJhc2VkZWFsbG9jOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgaW50IGhhc19maW5hbGl6ZXI7CiAKICAgICAvKiBFeHRyYWN0IHRoZSB0eXBlOyB3ZSBleHBlY3QgaXQgdG8gYmUgYSBoZWFwIHR5cGUgKi8KICAgICB0eXBlID0gUHlfVFlQRShzZWxmKTsKQEAgLTkyNCw2ICs5NDIsMTAgQEAKICAgICAgICAgICAgY2xlYXJfc2xvdHMoKSwgb3IgREVDUkVGIHRoZSBkaWN0LCBvciBjbGVhciB3ZWFrcmVmcy4gKi8KIAogICAgICAgICAvKiBNYXliZSBjYWxsIGZpbmFsaXplcjsgZXhpdCBlYXJseSBpZiByZXN1cnJlY3RlZCAqLworICAgICAgICBpZiAodHlwZS0+dHBfZmluYWxpemUpIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBpZiAodHlwZS0+dHBfZGVsKSB7CiAgICAgICAgICAgICB0eXBlLT50cF9kZWwoc2VsZik7CiAgICAgICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKQEAgLTk3NSwyNSArOTk3LDM2IEBACiAgICAgICAgIGFzc2VydChiYXNlKTsKICAgICB9CiAKLSAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKLSAgICAgICB0aGUgZmluYWxpemVyIChfX2RlbF9fKSwgY2xlYXJpbmcgc2xvdHMsIG9yIGNsZWFyaW5nIHRoZSBpbnN0YW5jZQotICAgICAgIGRpY3QuICovCisgICAgaGFzX2ZpbmFsaXplciA9IHR5cGUtPnRwX2ZpbmFsaXplIHx8IHR5cGUtPnRwX2RlbDsKIAorICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgaWYgKGhhc19maW5hbGl6ZXIpCisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKKworICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpIDwgMCkgeworICAgICAgICAgICAgLyogUmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogSWYgd2UgYWRkZWQgYSB3ZWFrbGlzdCwgd2UgY2xlYXIgaXQuICAgICAgRG8gdGhpcyAqYmVmb3JlKiBjYWxsaW5nCisgICAgICAgdHBfZGVsLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlIGRpY3QuICovCiAgICAgaWYgKHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ICYmICFiYXNlLT50cF93ZWFrbGlzdG9mZnNldCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcyhzZWxmKTsKIAotICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCiAgICAgaWYgKHR5cGUtPnRwX2RlbCkgewotICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CiAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICBnb3RvIGVuZGxhYmVsOyAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikgeworICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICAgICAgLyogTmV3IHdlYWtyZWZzIGNvdWxkIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBmaW5hbGl6ZXIgY2FsbC4KLSAgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKLSAgICAgICAgICAgIGZpbmFsaXplcnMgc2luY2UgdGhleSBtaWdodCByZWx5IG9uIHBhcnQgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCisgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKKyAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGJlaW5nIGZpbmFsaXplZCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiAqLwogICAgICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KSB7CiAgICAgICAgICAgICAvKiBNb2RlbGVkIGFmdGVyIEdFVF9XRUFLUkVGU19MSVNUUFRSKCkgKi8KICAgICAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSAoUHlXZWFrUmVmZXJlbmNlICoqKSBcCkBAIC0xNDUzLDggKzE0ODYsMTAgQEAKICAgICAgICB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiBhY2MuCiAgICAgKi8KICAgICByZW1haW4gPSAoaW50ICopUHlNZW1fTUFMTE9DKFNJWkVPRl9JTlQqdG9fbWVyZ2Vfc2l6ZSk7Ci0gICAgaWYgKHJlbWFpbiA9PSBOVUxMKQorICAgIGlmIChyZW1haW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB0b19tZXJnZV9zaXplOyBpKyspCiAgICAgICAgIHJlbWFpbltpXSA9IDA7CiAKQEAgLTE0ODYsNyArMTUyMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgb2sgPSBQeUxpc3RfQXBwZW5kKGFjYywgY2FuZGlkYXRlKTsKICAgICAgICAgaWYgKG9rIDwgMCkgewotICAgICAgICAgICAgUHlNZW1fRnJlZShyZW1haW4pOworICAgICAgICAgICAgUHlNZW1fRlJFRShyZW1haW4pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0b19tZXJnZV9zaXplOyBqKyspIHsKQEAgLTE5NDYsNyArMTk4MSw3IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotbG9uZwordW5zaWduZWQgbG9uZwogUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKICAgICByZXR1cm4gdHlwZS0+dHBfZmxhZ3M7CkBAIC0yMTE1LDcgKzIxNTAsNyBAQAogICAgICAgICAgICAgaWYgKCF2YWxpZF9pZGVudGlmaWVyKHRtcCkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodG1wKSk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoIW1heV9hZGRfZGljdCB8fCBhZGRfZGljdCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9fZGljdF9fIHNsb3QgZGlzYWxsb3dlZDogIgpAQCAtMjE0Niw3ICsyMTgxLDcgQEAKICAgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBuc2xvdHM7IGkrKykgewogICAgICAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShzbG90cywgaSk7CiAgICAgICAgICAgICBpZiAoKGFkZF9kaWN0ICYmCi0gICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fZGljdF9fIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHx8CiAgICAgICAgICAgICAgICAgKGFkZF93ZWFrICYmCiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fd2Vha3JlZl9fIikgPT0gMCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMjE3LDcgKzIyNTIsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0cF9mbGFncyAqLwogICAgIHR5cGUtPnRwX2ZsYWdzID0gUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IRUFQVFlQRSB8Ci0gICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEU7CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkU7CiAgICAgaWYgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKQogICAgICAgICB0eXBlLT50cF9mbGFncyB8PSBQeV9UUEZMQUdTX0hBVkVfR0M7CiAKQEAgLTIyODcsOCArMjMyMiwxMCBAQAogICAgICAgICAgICAgLyogU2lsZW50bHkgdHJ1bmNhdGUgdGhlIGRvY3N0cmluZyBpZiBpdCBjb250YWlucyBudWxsIGJ5dGVzLiAqLwogICAgICAgICAgICAgbGVuID0gc3RybGVuKGRvY19zdHIpOwogICAgICAgICAgICAgdHBfZG9jID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBkb2Nfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjQwOCw3ICsyNDQ1LDcgQEAKICAgICBjaGFyICpzOwogICAgIGNoYXIgKnJlc19zdGFydCA9IChjaGFyKilyZXM7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3Q7Ci0gICAgCisKICAgICAvKiBTZXQgdGhlIHR5cGUgbmFtZSBhbmQgcXVhbG5hbWUgKi8KICAgICBzID0gc3RycmNocihzcGVjLT5uYW1lLCAnLicpOwogICAgIGlmIChzID09IE5VTEwpCkBAIC0yNDI5LDcgKzI0NjYsNyBAQAogICAgIHR5cGUtPnRwX25hbWUgPSBzcGVjLT5uYW1lOwogICAgIGlmICghdHlwZS0+dHBfbmFtZSkKICAgICAgICAgZ290byBmYWlsOwotICAgIAorCiAgICAgLyogQWRqdXN0IGZvciBlbXB0eSB0dXBsZSBiYXNlcyAqLwogICAgIGlmICghYmFzZXMpIHsKICAgICAgICAgYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKQEAgLTI0OTEsOCArMjUyOCwxMCBAQAogICAgICAgICBpZiAoc2xvdC0+c2xvdCA9PSBQeV90cF9kb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc2xvdC0+cGZ1bmMpKzE7CiAgICAgICAgICAgICBjaGFyICp0cF9kb2MgPSBQeU9iamVjdF9NQUxMT0MobGVuKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgc2xvdC0+cGZ1bmMsIGxlbik7CiAgICAgICAgICAgICB0eXBlLT50cF9kb2MgPSB0cF9kb2M7CiAgICAgICAgIH0KQEAgLTI1MTMsNyArMjU1Miw3IEBACiAgICAgLyogU2V0IHR5cGUuX19tb2R1bGVfXyAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgIT0gTlVMTCkKLSAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywgCisgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sCiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgc3BlYy0+bmFtZSwgKFB5X3NzaXplX3QpKHMgLSBzcGVjLT5uYW1lKSkpOwogCkBAIC0yNzAyLDEwICsyNzQxLDE0IEBACiB0eXBlX2RlYWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIFB5SGVhcFR5cGVPYmplY3QgKmV0OworICAgIFB5T2JqZWN0ICp0cCwgKnZhbCwgKnRiOwogCiAgICAgLyogQXNzZXJ0IHRoaXMgaXMgYSBoZWFwLWFsbG9jYXRlZCB0eXBlIG9iamVjdCAqLwogICAgIGFzc2VydCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHR5cGUpOworICAgIFB5RXJyX0ZldGNoKCZ0cCwgJnZhbCwgJnRiKTsKKyAgICByZW1vdmVfYWxsX3N1YmNsYXNzZXModHlwZSwgdHlwZS0+dHBfYmFzZXMpOworICAgIFB5RXJyX1Jlc3RvcmUodHAsIHZhbCwgdGIpOwogICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopdHlwZSk7CiAgICAgZXQgPSAoUHlIZWFwVHlwZU9iamVjdCAqKXR5cGU7CiAgICAgUHlfWERFQ1JFRih0eXBlLT50cF9iYXNlKTsKQEAgLTI3MzAsNyArMjc3Myw3IEBACiB0eXBlX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJnc19pZ25vcmVkKQogewogICAgIFB5T2JqZWN0ICpsaXN0LCAqcmF3LCAqcmVmOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAobGlzdCA9PSBOVUxMKQpAQCAtMjczOCwxMCArMjc4MSw5IEBACiAgICAgcmF3ID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAocmF3ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBsaXN0OwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2socmF3KSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShyYXcpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHJhdywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHJhdykpOworICAgIGkgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChyYXcsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICByZWYgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBpZiAocmVmICE9IFB5X05vbmUpIHsKQEAgLTI5MzAsOCArMjk3Miw4IEBACiAgICAgICAgICAgIGNsYXNzJ3MgZGljdDsgdGhlIGN5Y2xlIHdpbGwgYmUgYnJva2VuIHRoYXQgd2F5LgogCiAgICAgICAgdHBfc3ViY2xhc3NlczoKLSAgICAgICAgICAgQSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGU7IGFuZAotICAgICAgICAgICBsaXN0cyBoYXZlIHRoZWlyIG93biB0cF9jbGVhci4KKyAgICAgICAgICAgQSBkaWN0IG9mIHdlYWsgcmVmZXJlbmNlcyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGU7IGFuZAorICAgICAgICAgICBkaWN0cyBoYXZlIHRoZWlyIG93biB0cF9jbGVhci4KIAogICAgICAgIHNsb3RzIChpbiBQeUhlYXBUeXBlT2JqZWN0KToKICAgICAgICAgICAgQSB0dXBsZSBvZiBzdHJpbmdzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZS4KQEAgLTMxNDgsNyArMzE5MCw3IEBACiAgICAgICAgIFB5X1hERUNSRUYobW9kKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChtb2QgIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhtb2QsICJidWlsdGlucyIpKQorICAgIGlmIChtb2QgIT0gTlVMTCAmJiBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kLCAmUHlJZF9idWlsdGlucykpCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JVUuJVUgb2JqZWN0IGF0ICVwPiIsIG1vZCwgbmFtZSwgc2VsZik7CiAgICAgZWxzZQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLApAQCAtMzMyMCw3ICszMzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18gYXNzaWdubWVudDogb25seSBmb3IgaGVhcCB0eXBlcyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG5ld3RvLCBvbGR0bywgIl9fY2xhc3NfXyIpKSB7CisgICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQob2xkdG8sIG5ld3RvLCAiX19jbGFzc19fIikpIHsKICAgICAgICAgUHlfSU5DUkVGKG5ld3RvKTsKICAgICAgICAgUHlfVFlQRShzZWxmKSA9IG5ld3RvOwogICAgICAgICBQeV9ERUNSRUYob2xkdG8pOwpAQCAtMzM2MywxNTAgKzM0MDUsNDI5IEBACiAgICAgcmV0dXJuIGNhY2hlZF9jb3B5cmVnX21vZHVsZTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXNsb3RuYW1lcyhQeU9iamVjdCAqY2xzKQorUHlfTE9DQUwoUHlPYmplY3QgKikKK19QeVR5cGVfR2V0U2xvdE5hbWVzKFB5VHlwZU9iamVjdCAqY2xzKQogewotICAgIFB5T2JqZWN0ICpjbHNkaWN0OwogICAgIFB5T2JqZWN0ICpjb3B5cmVnOwogICAgIFB5T2JqZWN0ICpzbG90bmFtZXM7CiAgICAgX1B5X0lERU5USUZJRVIoX19zbG90bmFtZXNfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX3Nsb3RuYW1lcyk7CiAKLSAgICBjbHNkaWN0ID0gKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9kaWN0OwotICAgIHNsb3RuYW1lcyA9IF9QeURpY3RfR2V0SXRlbUlkKGNsc2RpY3QsICZQeUlkX19fc2xvdG5hbWVzX18pOwotICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCAmJiBQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgeworICAgIGFzc2VydChQeVR5cGVfQ2hlY2soY2xzKSk7CisKKyAgICAvKiBHZXQgdGhlIHNsb3QgbmFtZXMgZnJvbSB0aGUgY2FjaGUgaW4gdGhlIGNsYXNzIGlmIHBvc3NpYmxlLiAqLworICAgIHNsb3RuYW1lcyA9IF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKGNscy0+dHBfZGljdCwgJlB5SWRfX19zbG90bmFtZXNfXyk7CisgICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcy5fX3Nsb3RuYW1lc19fIHNob3VsZCBiZSBhIGxpc3Qgb3IgTm9uZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbHMtPnRwX25hbWUsIFB5X1RZUEUoc2xvdG5hbWVzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeV9JTkNSRUYoc2xvdG5hbWVzKTsKICAgICAgICAgcmV0dXJuIHNsb3RuYW1lczsKICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBUaGUgY2xhc3MgZG9lcyBub3QgaGF2ZSB0aGUgc2xvdCBuYW1lcyBjYWNoZWQgeWV0LiAqLworICAgIH0KIAogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmIChjb3B5cmVnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2xvdG5hbWVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChjb3B5cmVnLCAmUHlJZF9fc2xvdG5hbWVzLCAiTyIsIGNscyk7CisgICAgLyogVXNlIF9zbG90bmFtZXMgZnVuY3Rpb24gZnJvbSB0aGUgY29weXJlZyBtb2R1bGUgdG8gZmluZCB0aGUgc2xvdHMKKyAgICAgICBieSB0aGlzIGNsYXNzIGFuZCBpdHMgYmFzZXMuIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWNoZSB0aGUgcmVzdWx0CisgICAgICAgaW4gX19zbG90bmFtZXNfXy4gKi8KKyAgICBzbG90bmFtZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhjb3B5cmVnLCAmUHlJZF9fc2xvdG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscywgTlVMTCk7CiAgICAgUHlfREVDUkVGKGNvcHlyZWcpOwotICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCAmJgotICAgICAgICBzbG90bmFtZXMgIT0gUHlfTm9uZSAmJgotICAgICAgICAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpCi0gICAgeworICAgIGlmIChzbG90bmFtZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiY29weXJlZy5fc2xvdG5hbWVzIGRpZG4ndCByZXR1cm4gYSBsaXN0IG9yIE5vbmUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9zbG90bmFtZXMgZGlkbid0IHJldHVybiBhIGxpc3Qgb3IgTm9uZSIpOwogICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKLSAgICAgICAgc2xvdG5hbWVzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgcmV0dXJuIHNsb3RuYW1lczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXJlZHVjZV8yKFB5T2JqZWN0ICpvYmopCitQeV9MT0NBTChQeU9iamVjdCAqKQorX1B5T2JqZWN0X0dldFN0YXRlKFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlPYmplY3QgKmNscywgKmdldG5ld2FyZ3M7Ci0gICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqYXJnczIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpnZXRzdGF0ZSA9IE5VTEwsICpzdGF0ZSA9IE5VTEwsICpuYW1lcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnNsb3RzID0gTlVMTCwgKmxpc3RpdGVtcyA9IE5VTEwsICpkaWN0aXRlbXMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTCwgKm5ld29iaiA9IE5VTEwsICpyZXMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfXyk7CisgICAgUHlPYmplY3QgKnN0YXRlOworICAgIFB5T2JqZWN0ICpnZXRzdGF0ZTsKICAgICBfUHlfSURFTlRJRklFUihfX2dldHN0YXRlX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwotCi0gICAgY2xzID0gKFB5T2JqZWN0ICopIFB5X1RZUEUob2JqKTsKLQotICAgIGdldG5ld2FyZ3MgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX18pOwotICAgIGlmIChnZXRuZXdhcmdzICE9IE5VTEwpIHsKLSAgICAgICAgYXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJncywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzKTsKLSAgICAgICAgaWYgKGFyZ3MgIT0gTlVMTCAmJiAhUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCi0gICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUoYXJncyktPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKLSAgICB9Ci0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgZ290byBlbmQ7CiAKICAgICBnZXRzdGF0ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldHN0YXRlX18pOwotICAgIGlmIChnZXRzdGF0ZSAhPSBOVUxMKSB7CisgICAgaWYgKGdldHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnNsb3RuYW1lczsKKworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqZGljdDsKKyAgICAgICAgICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOworICAgICAgICAgICAgLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgb2JqZWN0J3MgZGljdCBpcyBub3QgaW5pdGlhbGl6ZWQgCisgICAgICAgICAgICAgICB5ZXQuIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCByZXR1cm4gTm9uZSBmb3IgdGhlIHN0YXRlLgorICAgICAgICAgICAgICAgV2UgYWxzbyByZXR1cm4gTm9uZSBpZiB0aGUgZGljdCBpcyBlbXB0eSB0byBtYWtlIHRoZSBiZWhhdmlvcgorICAgICAgICAgICAgICAgY29uc2lzdGVudCByZWdhcmRsZXNzIHdoZXRoZXIgdGhlIGRpY3Qgd2FzIGluaXRpYWxpemVkIG9yIG5vdC4KKyAgICAgICAgICAgICAgIFRoaXMgbWFrZSB1bml0IHRlc3RpbmcgZWFzaWVyLiAqLworICAgICAgICAgICAgaWYgKGRpY3QgIT0gTlVMTCAmJiAqZGljdCAhPSBOVUxMICYmIFB5RGljdF9TaXplKCpkaWN0KSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICpkaWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBQeV9Ob25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIHNsb3RuYW1lcyA9IF9QeVR5cGVfR2V0U2xvdE5hbWVzKFB5X1RZUEUob2JqKSk7CisgICAgICAgIGlmIChzbG90bmFtZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0KHNsb3RuYW1lcyA9PSBQeV9Ob25lIHx8IFB5TGlzdF9DaGVjayhzbG90bmFtZXMpKTsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmIFB5X1NJWkUoc2xvdG5hbWVzKSA+IDApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzbG90czsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgc2xvdG5hbWVzX3NpemUsIGk7CisKKyAgICAgICAgICAgIHNsb3RzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKHNsb3RzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzbG90bmFtZXNfc2l6ZSA9IFB5X1NJWkUoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbG90bmFtZXNfc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKKworICAgICAgICAgICAgICAgIG5hbWUgPSBQeUxpc3RfR0VUX0lURU0oc2xvdG5hbWVzLCBpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIEl0IGlzIG5vdCBhbiBlcnJvciBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LiAqLworICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKHNsb3RzLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBUaGUgbGlzdCBpcyBzdG9yZWQgb24gdGhlIGNsYXNzIHNvIGl0IG1heSBtdXRhdGVzIHdoaWxlIHdlCisgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSBvdmVyIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKHNsb3RuYW1lc19zaXplICE9IFB5X1NJWkUoc2xvdG5hbWVzKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc2xvdHNuYW1lX18gY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBXZSBoYW5kbGUgZXJyb3JzIHdpdGhpbiB0aGUgbG9vcCBoZXJlLiAqLworICAgICAgICAgICAgICAgIGlmICgwKSB7CisgICAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgd2UgZm91bmQgc29tZSBzbG90IGF0dHJpYnV0ZXMsIHBhY2sgdGhlbSBpbiBhIHR1cGxlIGFsb25nCisgICAgICAgICAgICAgICB0aGUgb3JnaW5hbCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfU2l6ZShzbG90cykgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0YXRlMjsKKworICAgICAgICAgICAgICAgIHN0YXRlMiA9IFB5VHVwbGVfUGFjaygyLCBzdGF0ZSwgc2xvdHMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlMiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZTI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgIH0KKyAgICBlbHNlIHsgLyogZ2V0c3RhdGUgIT0gTlVMTCAqLwogICAgICAgICBzdGF0ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0c3RhdGUsIE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoZ2V0c3RhdGUpOwogICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqKmRpY3Q7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwotICAgICAgICBpZiAoZGljdCAmJiAqZGljdCkKLSAgICAgICAgICAgIHN0YXRlID0gKmRpY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHN0YXRlKTsKLSAgICAgICAgbmFtZXMgPSBzbG90bmFtZXMoY2xzKTsKLSAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgaWYgKG5hbWVzICE9IFB5X05vbmUgJiYgUHlMaXN0X0dFVF9TSVpFKG5hbWVzKSA+IDApIHsKLSAgICAgICAgICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobmFtZXMpKTsKLSAgICAgICAgICAgIHNsb3RzID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgaWYgKHNsb3RzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgIC8qIENhbid0IHByZS1jb21wdXRlIHRoZSBsaXN0IHNpemU7IHRoZSBsaXN0Ci0gICAgICAgICAgICAgICBpcyBzdG9yZWQgb24gdGhlIGNsYXNzIHNvIGFjY2Vzc2libGUgdG8gb3RoZXIKLSAgICAgICAgICAgICAgIHRocmVhZHMsIHdoaWNoIG1heSBiZSBydW4gYnkgREVDUkVGICovCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKG5hbWVzKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKLSAgICAgICAgICAgICAgICBuYW1lID0gUHlMaXN0X0dFVF9JVEVNKG5hbWVzLCBpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBuYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKHNsb3RzLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobikgewotICAgICAgICAgICAgICAgIHN0YXRlID0gUHlfQnVpbGRWYWx1ZSgiKE5PKSIsIHN0YXRlLCBzbG90cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitQeV9MT0NBTChpbnQpCitfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICoqYXJncywgUHlPYmplY3QgKiprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKmdldG5ld2FyZ3MsICpnZXRuZXdhcmdzX2V4OworICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19leF9fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfXyk7CisKKyAgICBpZiAoYXJncyA9PSBOVUxMIHx8IGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogV2UgZmlyc3QgYXR0ZW1wdCB0byBmZXRjaCB0aGUgYXJndW1lbnRzIGZvciBfX25ld19fIGJ5IGNhbGxpbmcKKyAgICAgICBfX2dldG5ld2FyZ3NfZXhfXyBvbiB0aGUgb2JqZWN0LiAqLworICAgIGdldG5ld2FyZ3NfZXggPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX2V4X18pOworICAgIGlmIChnZXRuZXdhcmdzX2V4ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3NfZXgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJnc19leCk7CisgICAgICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobmV3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKG5ld2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlfU0laRShuZXdhcmdzKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gc2hvdWxkIHJldHVybiBhIHR1cGxlIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIDIsIG5vdCAlemQiLCBQeV9TSVpFKG5ld2FyZ3MpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqYXJncyA9IFB5VHVwbGVfR0VUX0lURU0obmV3YXJncywgMCk7CisgICAgICAgIFB5X0lOQ1JFRigqYXJncyk7CisgICAgICAgICprd2FyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld2FyZ3MsIDEpOworICAgICAgICBQeV9JTkNSRUYoKmt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKworICAgICAgICAvKiBYWFggV2Ugc2hvdWxkIHBlcmhhcHMgYWxsb3cgTm9uZSB0byBiZSBwYXNzZWQgaGVyZS4gKi8KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKCphcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSgqYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soKmt3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIG11c3QgYmUgYSBkaWN0LCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoKmt3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorCisgICAgLyogVGhlIG9iamVjdCBkb2VzIG5vdCBoYXZlIF9fZ2V0bmV3YXJnc19leF9fIHNvIHdlIGZhbGxiYWNrIG9uIHVzaW5nCisgICAgICAgX19nZXRuZXdhcmdzX18gaW5zdGVhZC4gKi8KKyAgICBnZXRuZXdhcmdzID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19fKTsKKyAgICBpZiAoZ2V0bmV3YXJncyAhPSBOVUxMKSB7CisgICAgICAgICphcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOworICAgICAgICBpZiAoKmFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjaygqYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKCphcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmt3YXJncyA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKworICAgIC8qIFRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSBfX2dldG5ld2FyZ3NfZXhfXyBhbmQgX19nZXRuZXdhcmdzX18uIFRoaXMgbWF5CisgICAgICAgbWVhbnMgX19uZXdfXyBkb2VzIG5vdCB0YWtlcyBhbnkgYXJndW1lbnRzIG9uIHRoaXMgb2JqZWN0LCBvciB0aGF0IHRoZQorICAgICAgIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHJlZHVjZSBwcm90b2NvbCBmb3IgcGlja2xpbmcgb3IKKyAgICAgICBjb3B5aW5nLiAqLworICAgICphcmdzID0gTlVMTDsKKyAgICAqa3dhcmdzID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworUHlfTE9DQUwoaW50KQorX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqKmxpc3RpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipkaWN0aXRlbXMpCit7CisgICAgaWYgKGxpc3RpdGVtcyA9PSBOVUxMIHx8IGRpY3RpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKCFQeUxpc3RfQ2hlY2sob2JqKSkgewotICAgICAgICBsaXN0aXRlbXMgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYobGlzdGl0ZW1zKTsKKyAgICAgICAgKmxpc3RpdGVtcyA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRigqbGlzdGl0ZW1zKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGxpc3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKLSAgICAgICAgaWYgKGxpc3RpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICpsaXN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgICAgIGlmICgqbGlzdGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKCFQeURpY3RfQ2hlY2sob2JqKSkgewotICAgICAgICBkaWN0aXRlbXMgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoZGljdGl0ZW1zKTsKKyAgICAgICAgKmRpY3RpdGVtcyA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRigqZGljdGl0ZW1zKTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXRlbXMpOwotICAgICAgICBQeU9iamVjdCAqaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKG9iaiwgJlB5SWRfaXRlbXMsICIiKTsKLSAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgZGljdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CisKKyAgICAgICAgaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhvYmosICZQeUlkX2l0ZW1zLCBOVUxMKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpsaXN0aXRlbXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICpkaWN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKLSAgICAgICAgaWYgKGRpY3RpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGlmICgqZGljdGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpsaXN0aXRlbXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCisgICAgYXNzZXJ0KCpsaXN0aXRlbXMgIT0gTlVMTCAmJiAqZGljdGl0ZW1zICE9IE5VTEwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityZWR1Y2VfNChQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmt3YXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvcHlyZWc7CisgICAgUHlPYmplY3QgKm5ld29iaiwgKm5ld2FyZ3MsICpzdGF0ZSwgKmxpc3RpdGVtcywgKmRpY3RpdGVtczsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX2V4X18pOworCisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAga3dhcmdzID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoa3dhcmdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKKyAgICBpZiAoY29weXJlZyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdvYmogPSBfUHlPYmplY3RfR2V0QXR0cklkKGNvcHlyZWcsICZQeUlkX19fbmV3b2JqX2V4X18pOworICAgIFB5X0RFQ1JFRihjb3B5cmVnKTsKKyAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld2FyZ3MgPSBQeVR1cGxlX1BhY2soMywgUHlfVFlQRShvYmopLCBhcmdzLCBrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3RhdGUgPSBfUHlPYmplY3RfR2V0U3RhdGUob2JqKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9HZXRJdGVtc0l0ZXIob2JqLCAmbGlzdGl0ZW1zLCAmZGljdGl0ZW1zKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDUsIG5ld29iaiwgbmV3YXJncywgc3RhdGUsIGxpc3RpdGVtcywgZGljdGl0ZW1zKTsKKyAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICBQeV9ERUNSRUYobGlzdGl0ZW1zKTsKKyAgICBQeV9ERUNSRUYoZGljdGl0ZW1zKTsKKyAgICByZXR1cm4gcmVzdWx0OyAgICAKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JlZHVjZV8yKFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmNsczsKKyAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEwsICpsaXN0aXRlbXMgPSBOVUxMLCAqZGljdGl0ZW1zID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEwsICpuZXdvYmogPSBOVUxMLCAqcmVzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGksIG47CisgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KGt3YXJncyA9PSBOVUxMKTsKKyAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChrd2FyZ3MgIT0gTlVMTCkgeworICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dhcmdzKSA+IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCB1c2UgcHJvdG9jb2wgNCBvciBncmVhdGVyIHRvIGNvcHkgdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdDsgc2luY2UgX19nZXRuZXdhcmdzX2V4X18gcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoa3dhcmdzKTsKKyAgICB9CisKKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmIChfUHlPYmplY3RfR2V0SXRlbXNJdGVyKG9iaiwgJmxpc3RpdGVtcywgJmRpY3RpdGVtcykgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKwogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmIChjb3B5cmVnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOwpAQCAtMzUxOCw2ICszODM5LDcgQEAKICAgICBhcmdzMiA9IFB5VHVwbGVfTmV3KG4rMSk7CiAgICAgaWYgKGFyZ3MyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOworICAgIGNscyA9IChQeU9iamVjdCAqKSBQeV9UWVBFKG9iaik7CiAgICAgUHlfSU5DUkVGKGNscyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzMiwgMCwgY2xzKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTMxLDkgKzM4NTMsNyBAQAogICBlbmQ6CiAgICAgUHlfWERFQ1JFRihhcmdzKTsKICAgICBQeV9YREVDUkVGKGFyZ3MyKTsKLSAgICBQeV9YREVDUkVGKHNsb3RzKTsKICAgICBQeV9YREVDUkVGKHN0YXRlKTsKLSAgICBQeV9YREVDUkVGKG5hbWVzKTsKICAgICBQeV9YREVDUkVGKGxpc3RpdGVtcyk7CiAgICAgUHlfWERFQ1JFRihkaWN0aXRlbXMpOwogICAgIFB5X1hERUNSRUYoY29weXJlZyk7CkBAIC0zNTYxLDcgKzM4ODEsOSBAQAogewogICAgIFB5T2JqZWN0ICpjb3B5cmVnLCAqcmVzOwogCi0gICAgaWYgKHByb3RvID49IDIpCisgICAgaWYgKHByb3RvID49IDQpCisgICAgICAgIHJldHVybiByZWR1Y2VfNChzZWxmKTsKKyAgICBlbHNlIGlmIChwcm90byA+PSAyKQogICAgICAgICByZXR1cm4gcmVkdWNlXzIoc2VsZik7CiAKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKQEAgLTM2NjYsMTYgKzM5ODgsOSBAQAogICAgICAgICAvKiBJc3N1ZSA3OTk0OiBJZiB3ZSdyZSBjb252ZXJ0aW5nIHRvIGEgc3RyaW5nLCB3ZQogICAgICAgICAgICBzaG91bGQgcmVqZWN0IGZvcm1hdCBzcGVjaWZpY2F0aW9ucyAqLwogICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpID4gMCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkgewotICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZWNvbWUgYW4gZXJyb3I6Ci0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICJub24tZW1wdHkgZm9ybWF0IHN0cmluZyBwYXNzZWQgdG8gb2JqZWN0Ll9fZm9ybWF0X18iKTsKLSAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgICovCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9Gb3JtYXQoc2VsZl9hc19zdHIsIGZvcm1hdF9zcGVjKTsKQEAgLTM4MzAsNyArNDE0NSw3IEBACiAgICAgICAgICAgICBkZXNjciA9IFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QodHlwZSwgbWV0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAobWV0aC0+bWxfZmxhZ3MgJiBNRVRIX1NUQVRJQykgewotICAgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3KG1ldGgsIChQeU9iamVjdCopdHlwZSk7CisgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgobWV0aCwgKFB5T2JqZWN0Kil0eXBlLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjZnVuYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGRlc2NyID0gUHlTdGF0aWNNZXRob2RfTmV3KGNmdW5jKTsKQEAgLTQxMDAsNiArNDQxNSwxMCBAQAogICAgICAgICBDT1BZU0xPVCh0cF9pbml0KTsKICAgICAgICAgQ09QWVNMT1QodHBfYWxsb2MpOwogICAgICAgICBDT1BZU0xPVCh0cF9pc19nYyk7CisgICAgICAgIGlmICgodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpKSB7CisgICAgICAgICAgICBDT1BZU0xPVCh0cF9maW5hbGl6ZSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykgPT0KICAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykpIHsKICAgICAgICAgICAgIC8qIFRoZXkgYWdyZWUgYWJvdXQgZ2MuICovCkBAIC00MjUyLDExICs0NTcxLDE1IEBACiAgICAgICAgICAgICBQeU9iamVjdCAqZG9jID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodHlwZS0+dHBfZG9jKTsKICAgICAgICAgICAgIGlmIChkb2MgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXywgZG9jKTsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkb2MpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZG9jKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fX2RvY19fLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19fZG9jX18sIFB5X05vbmUpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzAwLDEzICs0NjIzLDExIEBACiAgICAgLyogV2FybiBmb3IgYSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0cF9jb21wYXJlIChub3cga25vd24gYXMKICAgICAgICB0cF9yZXNlcnZlZCkgYnV0IG5vdCB0cF9yaWNoY29tcGFyZS4gKi8KICAgICBpZiAodHlwZS0+dHBfcmVzZXJ2ZWQgJiYgIXR5cGUtPnRwX3JpY2hjb21wYXJlKSB7Ci0gICAgICAgIGludCBlcnJvcjsKLSAgICAgICAgZXJyb3IgPSBQeUVycl9XYXJuRm9ybWF0KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgMSwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkZWZpbmVzIHRwX3Jlc2VydmVkIChmb3JtZXJseSB0cF9jb21wYXJlKSAiCiAgICAgICAgICAgICAiYnV0IG5vdCB0cF9yaWNoY29tcGFyZS4gQ29tcGFyaXNvbnMgbWF5IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQuIiwKICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpOwotICAgICAgICBpZiAoZXJyb3IgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIEFsbCBkb25lIC0tIHNldCB0aGUgcmVhZHkgZmxhZyAqLwpAQCAtNDMyMyw0OSArNDY0NCw1NyBAQAogc3RhdGljIGludAogYWRkX3N1YmNsYXNzKFB5VHlwZU9iamVjdCAqYmFzZSwgUHlUeXBlT2JqZWN0ICp0eXBlKQogewotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmLCAqbmV3b2JqOworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBQeU9iamVjdCAqZGljdCwgKmtleSwgKm5ld29iajsKIAotICAgIGxpc3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgYmFzZS0+dHBfc3ViY2xhc3NlcyA9IGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgYmFzZS0+dHBfc3ViY2xhc3NlcyA9IGRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobGlzdCkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChkaWN0KSk7CisgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopIHR5cGUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIG5ld29iaiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopdHlwZSwgTlVMTCk7Ci0gICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKLSAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKGxpc3QsIGkpOwotICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwotICAgICAgICBpZiAoUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKSA9PSBQeV9Ob25lKQotICAgICAgICAgICAgcmV0dXJuIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIG5ld29iaik7CisgICAgaWYgKG5ld29iaiAhPSBOVUxMKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgbmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TGlzdF9BcHBlbmQobGlzdCwgbmV3b2JqKTsKLSAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZAogcmVtb3ZlX3N1YmNsYXNzKFB5VHlwZU9iamVjdCAqYmFzZSwgUHlUeXBlT2JqZWN0ICp0eXBlKQogewotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnJlZjsKKyAgICBQeU9iamVjdCAqZGljdCwgKmtleTsKIAotICAgIGxpc3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKKyAgICBkaWN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhsaXN0KSk7Ci0gICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKLSAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKGxpc3QsIGkpOwotICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwotICAgICAgICBpZiAoUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKSA9PSAoUHlPYmplY3QqKXR5cGUpIHsKLSAgICAgICAgICAgIC8qIHRoaXMgY2FuJ3QgZmFpbCwgcmlnaHQ/ICovCi0gICAgICAgICAgICBQeVNlcXVlbmNlX0RlbEl0ZW0obGlzdCwgaSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KGRpY3QpKTsKKyAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQgKikgdHlwZSk7CisgICAgaWYgKGtleSA9PSBOVUxMIHx8IFB5RGljdF9EZWxJdGVtKGRpY3QsIGtleSkpIHsKKyAgICAgICAgLyogVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB0eXBlIGluaXRpYWxpemF0aW9uIGVycm9yZWQgb3V0IGJlZm9yZQorICAgICAgICAgICB0aGUgYmFzZSBzdWJjbGFzc2VzIHdlcmUgdXBkYXRlZCAoZS5nLiBhIG5vbi1zdHIgX19xdWFsbmFtZV9fCisgICAgICAgICAgIHdhcyBwYXNzZWQgaW4gdGhlIHR5cGUgZGljdCkuICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIFB5X1hERUNSRUYoa2V5KTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9hbGxfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlcykKK3sKKyAgICBpZiAoYmFzZXMpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShiYXNlcyk7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCBpKTsKKyAgICAgICAgICAgIGlmIChQeVR5cGVfQ2hlY2soYmFzZSkpCisgICAgICAgICAgICAgICAgcmVtb3ZlX3N1YmNsYXNzKChQeVR5cGVPYmplY3QqKSBiYXNlLCB0eXBlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ3MjIsNiArNTA1MSwxOCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgord3JhcF9kZWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCB2b2lkICp3cmFwcGVkKQoreworICAgIGRlc3RydWN0b3IgZnVuYyA9IChkZXN0cnVjdG9yKXdyYXBwZWQ7CisKKyAgICBpZiAoIWNoZWNrX251bV9hcmdzKGFyZ3MsIDApKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICgqZnVuYykoc2VsZik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiB3cmFwX3JpY2hjbXBmdW5jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgdm9pZCAqd3JhcHBlZCwgaW50IG9wKQogewogICAgIHJpY2hjbXBmdW5jIGZ1bmMgPSAocmljaGNtcGZ1bmMpd3JhcHBlZDsKQEAgLTQ5MDAsNyArNTI0MSw3IEBACiAKICAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19uZXdfXykgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyh0cF9uZXdfbWV0aG9kZGVmLCAoUHlPYmplY3QgKil0eXBlKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgodHBfbmV3X21ldGhvZGRlZiwgKFB5T2JqZWN0ICopdHlwZSwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX25ld19fLCBmdW5jKSkgewpAQCAtNTAxMiw3ICs1MzUzLDYgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBzbG90X3NxX2xlbmd0aChQeU9iamVjdCAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihfX2xlbl9fKTsKICAgICBQeU9iamVjdCAqcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19sZW5fXywgIigpIik7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKQEAgLTUwNzMsOCArNTQxMyw2IEBACiBzbG90X3NxX2Fzc19pdGVtKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIHJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fZGVsaXRlbV9fLCAiKG4pIiwgaW5kZXgpOwpAQCAtNTEyNCw4ICs1NDYyLDYgQEAKIHNsb3RfbXBfYXNzX3N1YnNjcmlwdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICByZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2RlbGl0ZW1fXywgIihPKSIsIGtleSk7CkBAIC01MTc2LDcgKzU1MTIsNiBAQAogICAgIFB5T2JqZWN0ICpmdW5jLCAqYXJnczsKICAgICBpbnQgcmVzdWx0ID0gLTE7CiAgICAgaW50IHVzaW5nX2xlbiA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19ib29sX18pOwogCiAgICAgZnVuYyA9IGxvb2t1cF9tYXliZShzZWxmLCAmUHlJZF9fX2Jvb2xfXyk7CkBAIC01Mjc4LDI4ICs1NjEzLDExIEBACiAgICAgX1B5X0lERU5USUZJRVIoX19zdHJfXyk7CiAKICAgICBmdW5jID0gbG9va3VwX21ldGhvZChzZWxmLCAmUHlJZF9fX3N0cl9fKTsKLSAgICBpZiAoZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOwotICAgICAgICBQeV9ERUNSRUYoZnVuYyk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBQeU9iamVjdCAqcmVzczsgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgcmVzID0gc2xvdF90cF9yZXByKHNlbGYpOwotICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiBYWFggdGhpcyBpcyBub24tc2Vuc2ljYWwuIFdoeSBzaG91bGQgd2UgcmV0dXJuCi0gICAgICAgICAgIGEgYnl0ZXMgb2JqZWN0IGZyb20gX19zdHJfXy4gSXMgdGhpcyBjb2RlIGV2ZW4KLSAgICAgICAgICAgdXNlZD8gLSBtdmwgKi8KLSAgICAgICAgYXNzZXJ0KDApOwotICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAvKgotICAgICAgICByZXNzID0gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKHJlcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgICAgICByZXR1cm4gcmVzczsKLSAgICAgICAgKi8KLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7CisgICAgUHlfREVDUkVGKGZ1bmMpOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeV9oYXNoX3QKQEAgLTU1OTUsNyArNTkxMyw2IEBACiAgICAgUHlPYmplY3QgKmZ1bmM7CiAgICAgUHlPYmplY3QgKm5ld2FyZ3MsICp4OwogICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBfUHlfSURFTlRJRklFUihfX25ld19fKTsKIAogICAgIGZ1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXR5cGUsICZQeUlkX19fbmV3X18pOwogICAgIGlmIChmdW5jID09IE5VTEwpCkBAIC01NjE5LDE2ICs1OTM2LDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zbG90X3RwX2RlbChQeU9iamVjdCAqc2VsZikKK3Nsb3RfdHBfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19kZWxfXyk7CiAgICAgUHlPYmplY3QgKmRlbCwgKnJlczsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogCi0gICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKLSAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOwotCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKIApAQCAtNTY0NSwzNyArNTk1OCw2IEBACiAKICAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCiAgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKLSAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgotICAgICAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKLSAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgIC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLwotCi0gICAgLyogX19kZWxfXyByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKLSAgICAgKiBuZXZlciBoYXBwZW5lZC4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7Ci0gICAgfQotICAgIGFzc2VydCghUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpIHx8Ci0gICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7Ci0gICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgX1B5X0RFQ19SRUZUT1RBTDsKLSAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAotICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAqIHVuZG9uZS4KLSAgICAgKi8KLSNpZmRlZiBDT1VOVF9BTExPQ1MKLSAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOwotICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOwotI2VuZGlmCiB9CiAKIApAQCAtNTc4NCw3ICs2MDY2LDcgQEAKICAgICAgICAgICAgInNlZSBoZWxwKHR5cGUoeCkpIGZvciBzaWduYXR1cmUiLAogICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKICAgICBUUFNMT1QoIl9fbmV3X18iLCB0cF9uZXcsIHNsb3RfdHBfbmV3LCBOVUxMLCAiIiksCi0gICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZGVsLCBzbG90X3RwX2RlbCwgTlVMTCwgIiIpLAorICAgIFRQU0xPVCgiX19kZWxfXyIsIHRwX2ZpbmFsaXplLCBzbG90X3RwX2ZpbmFsaXplLCAod3JhcHBlcmZ1bmMpd3JhcF9kZWwsICIiKSwKIAogICAgIEJJTlNMT1QoIl9fYWRkX18iLCBuYl9hZGQsIHNsb3RfbmJfYWRkLAogICAgICAgICAiKyIpLApAQCAtNjE4MSwxNSArNjQ2MywxNCBAQAogewogICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CiAgICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpkaWN0OwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHN1YmNsYXNzZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHN1YmNsYXNzZXMsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChzdWJjbGFzc2VzKSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHN1YmNsYXNzZXMsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICBzdWJjbGFzcyA9IChQeVR5cGVPYmplY3QgKilQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBhc3NlcnQoc3ViY2xhc3MgIT0gTlVMTCk7CkBAIC02MzM1LDggKzY2MTYsOCBAQAogICAgICAgICAvKiBXZSB3YW50IF9fY2xhc3NfXyB0byByZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSBzdXBlciBvYmplY3QKICAgICAgICAgICAgKGkuZS4gc3VwZXIsIG9yIGEgc3ViY2xhc3MpLCBub3QgdGhlIGNsYXNzIG9mIHN1LT5vYmouICovCiAgICAgICAgIHNraXAgPSAoUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCi0gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA9PSA5ICYmCi0gICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikgPT0gMCk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPT0gOSAmJgorICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChuYW1lLCAmUHlJZF9fX2NsYXNzX18pID09IDApOwogICAgIH0KIAogICAgIGlmICghc2tpcCkgewpAQCAtNjU0Miw4ICs2ODIzLDcgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgaSk7CiAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKG5hbWUpKTsKLSAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyIpKSB7CisgICAgICAgICAgICBpZiAoIV9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChuYW1lLCAmUHlJZF9fX2NsYXNzX18pKSB7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCA9IGNvLT5jb19ubG9jYWxzICsKICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpICsgaTsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGYtPmZfbG9jYWxzcGx1c1tpbmRleF07CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVjdHlwZS5jIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwppbmRleCBhNTcyYzEyLi5lYTU0MGQ2IDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCisrKyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKQEAgLTYxLDcgKzYxLDcgQEAKIC8qIFJldHVybnMgdGhlIHRpdGxlY2FzZSBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBjaCBvciBqdXN0CiAgICBjaCBpZiBubyB0aXRsZWNhc2UgbWFwcGluZyBpcyBrbm93bi4gKi8KIAotUHlfVUNTNCBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKHJlZ2lzdGVyIFB5X1VDUzQgY2gpCitQeV9VQ1M0IF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UoUHlfVUNTNCBjaCkKIHsKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKaW5kZXggYTE0OTE3Ny4uMzRkNTFlNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKQEAgLTQ3LDEzICs0NywxMCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCi0vKiBFbmRpYW5uZXNzIHN3aXRjaGVzOyBkZWZhdWx0cyB0byBsaXR0bGUgZW5kaWFuICovCi0KLSNpZmRlZiBXT1JEU19CSUdFTkRJQU4KLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19CSUdfRU5ESUFOCi0jZWxzZQotIyBkZWZpbmUgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSNlbmRpZgorLypbY2xpbmljXQorY2xhc3Mgc3RyCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KIAogLyogLS0tIEdsb2JhbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEzMCwxNiArMTI3LDE0IEBACiAvKiB0cnVlIGlmIHRoZSBVbmljb2RlIG9iamVjdCBoYXMgYW4gYWxsb2NhdGVkIFVURi04IG1lbW9yeSBibG9jawogICAgKG5vdCBzaGFyZWQgd2l0aCBvdGhlciBkYXRhKSAqLwogI2RlZmluZSBfUHlVbmljb2RlX0hBU19VVEY4X01FTU9SWShvcCkgICAgICAgICAgICAgICAgICBcCi0gICAgKGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9wKSksICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCFQeVVuaWNvZGVfSVNfQ09NUEFDVF9BU0NJSShvcCkgICAgICAgICAgICAgICAgICAgXAorICAgICgoIVB5VW5pY29kZV9JU19DT01QQUNUX0FTQ0lJKG9wKSAgICAgICAgICAgICAgICAgICBcCiAgICAgICAmJiBfUHlVbmljb2RlX1VURjgob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICYmIF9QeVVuaWNvZGVfVVRGOChvcCkgIT0gUHlVbmljb2RlX0RBVEEob3ApKSkKIAogLyogdHJ1ZSBpZiB0aGUgVW5pY29kZSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCB3c3RyIG1lbW9yeSBibG9jawogICAgKG5vdCBzaGFyZWQgd2l0aCBvdGhlciBkYXRhKSAqLwogI2RlZmluZSBfUHlVbmljb2RlX0hBU19XU1RSX01FTU9SWShvcCkgICAgICAgICAgICAgICAgICBcCi0gICAgKGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9wKSksICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKF9QeVVuaWNvZGVfV1NUUihvcCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoX1B5VW5pY29kZV9XU1RSKG9wKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAoIVB5VW5pY29kZV9JU19SRUFEWShvcCkgfHwgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBfUHlVbmljb2RlX1dTVFIob3ApICE9IFB5VW5pY29kZV9EQVRBKG9wKSkpKQogCkBAIC0xNTAsOSArMTQ1LDkgQEAKICAgIGJ1ZmZlciB3aGVyZSB0aGUgcmVzdWx0IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdG8uICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUyhmcm9tX3R5cGUsIHRvX3R5cGUsIGJlZ2luLCBlbmQsIHRvKSBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdG9fdHlwZSAqX3RvID0gKHRvX3R5cGUgKikgdG87ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9pdGVyID0gKGJlZ2luKTsgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2VuZCA9IChlbmQpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdG9fdHlwZSAqX3RvID0gKHRvX3R5cGUgKikodG8pOyAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2l0ZXIgPSAoZnJvbV90eXBlICopKGJlZ2luKTsgIFwKKyAgICAgICAgY29uc3QgZnJvbV90eXBlICpfZW5kID0gKGZyb21fdHlwZSAqKShlbmQpOyAgICAgXAogICAgICAgICBQeV9zc2l6ZV90IG4gPSAoX2VuZCkgLSAoX2l0ZXIpOyAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX3Vucm9sbGVkX2VuZCA9ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIF9pdGVyICsgX1B5X1NJWkVfUk9VTkRfRE9XTihuLCA0KTsgICAgICAgICAgXApAQCAtMTk5LDYgKzE5NCwxMCBAQAogICAgICAgICByZXR1cm4gdW5pY29kZV9lbXB0eTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworUHlfTE9DQUxfSU5MSU5FKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfVUNTNCBjaCk7CisKIC8qIExpc3Qgb2Ygc3RhdGljIHN0cmluZ3MuICovCiBzdGF0aWMgX1B5X0lkZW50aWZpZXIgKnN0YXRpY19zdHJpbmdzID0gTlVMTDsKIApAQCAtNDI3LDggKzQyNiw2IEBACiAjaWZuZGVmIFB5X0RFQlVHCiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOwotCiAgICAgbGVuID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICBpZiAobGVuID09IDApIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtNDQ1LDEwICs0NDIsMTIgQEAKICAgICB9CiAKICAgICBpZiAoX1B5VW5pY29kZV9SZWFkeSh1bmljb2RlKSA8IDApIHsKLSAgICAgICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZWxzZQorICAgIGFzc2VydChQeV9SRUZDTlQodW5pY29kZSkgPT0gMSk7CisKICAgICAvKiBkb24ndCBtYWtlIHRoZSByZXN1bHQgcmVhZHkgaW4gZGVidWcgbW9kZSB0byBlbnN1cmUgdGhhdCB0aGUgY2FsbGVyCiAgICAgICAgbWFrZXMgdGhlIHN0cmluZyByZWFkeSBiZWZvcmUgdXNpbmcgaXQgKi8KICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKQEAgLTQ3MSw3ICs0NzAsOSBAQAogICAgIH0KIAogICAgIGlmIChsZW5ndGggPT0gMSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCAwKTsKKyAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgMCk7CiAgICAgICAgIGlmIChjaCA8IDI1NikgewogICAgICAgICAgICAgUHlPYmplY3QgKmxhdGluMV9jaGFyID0gdW5pY29kZV9sYXRpbjFbY2hdOwogICAgICAgICAgICAgaWYgKGxhdGluMV9jaGFyICE9IE5VTEwpIHsKQEAgLTU0NCw3ICs1NDUsNiBAQAogCiBzdGF0aWMgQkxPT01fTUFTSyBibG9vbV9saW5lYnJlYWsgPSB+KEJMT09NX01BU0spMDsKIAotI2RlZmluZSBCTE9PTV9BREQobWFzaywgY2gpICgobWFzayB8PSAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAjZGVmaW5lIEJMT09NKG1hc2ssIGNoKSAgICAgKChtYXNrICYgICgxVUwgPDwgKChjaCkgJiAoQkxPT01fV0lEVEggLSAxKSkpKSkKIAogI2RlZmluZSBCTE9PTV9MSU5FQlJFQUsoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTU0LDIxICs1NTQsNDAgQEAKIFB5X0xPQ0FMX0lOTElORShCTE9PTV9NQVNLKQogbWFrZV9ibG9vbV9tYXNrKGludCBraW5kLCB2b2lkKiBwdHIsIFB5X3NzaXplX3QgbGVuKQogeworI2RlZmluZSBCTE9PTV9VUERBVEUoVFlQRSwgTUFTSywgUFRSLCBMRU4pICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRZUEUgKmRhdGEgPSAoVFlQRSAqKVBUUjsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICplbmQgPSBkYXRhICsgTEVOOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfVUNTNCBjaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAoOyBkYXRhICE9IGVuZDsgZGF0YSsrKSB7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2ggPSAqZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1BU0sgfD0gKDFVTCA8PCAoY2ggJiAoQkxPT01fV0lEVEggLSAxKSkpOyBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAgICAgLyogY2FsY3VsYXRlIHNpbXBsZSBibG9vbS1zdHlsZSBiaXRtYXNrIGZvciBhIGdpdmVuIHVuaWNvZGUgc3RyaW5nICovCiAKICAgICBCTE9PTV9NQVNLIG1hc2s7Ci0gICAgUHlfc3NpemVfdCBpOwogCiAgICAgbWFzayA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBCTE9PTV9BREQobWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgcHRyLCBpKSk7Ci0KKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICBCTE9PTV9VUERBVEUoUHlfVUNTMSwgbWFzaywgcHRyLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICBCTE9PTV9VUERBVEUoUHlfVUNTMiwgbWFzaywgcHRyLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICBCTE9PTV9VUERBVEUoUHlfVUNTNCwgbWFzaywgcHRyLCBsZW4pOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CisgICAgfQogICAgIHJldHVybiBtYXNrOwotfQogCi0jZGVmaW5lIEJMT09NX01FTUJFUihtYXNrLCBjaHIsIHN0cikgXAotICAgIChCTE9PTShtYXNrLCBjaHIpIFwKLSAgICAgJiYgKFB5VW5pY29kZV9GaW5kQ2hhcihzdHIsIGNociwgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSwgMSkgPj0gMCkpCisjdW5kZWYgQkxPT01fVVBEQVRFCit9CiAKIC8qIENvbXBpbGF0aW9uIG9mIHRlbXBsYXRlZCByb3V0aW5lcyAqLwogCkBAIC01ODgsNiArNjA3LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNTk4LDYgKzYxOCw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTYwOCw2ICs2MjksNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02NTQsNiArNjc2LDI1IEBACiAgICAgfQogfQogCisjaWZkZWYgUHlfREVCVUcKKy8qIEZpbGwgdGhlIGRhdGEgb2YgYW4gVW5pY29kZSBzdHJpbmcgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IGJ1Z3MKKyAgIGVhcmxpZXIuCisKKyAgIF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShzdHIsIDEpIGRldGVjdHMgaW52YWxpZCBjaGFyYWN0ZXJzLCBhdCBsZWFzdCBmb3IKKyAgIEFTQ0lJIGFuZCBVQ1MtNCBzdHJpbmdzLiBVKzAwRkYgaXMgaW52YWxpZCBpbiBBU0NJSSBhbmQgVStGRkZGRkZGRiBpcyBhbgorICAgaW52YWxpZCBjaGFyYWN0ZXIgaW4gVW5pY29kZSA2LjAuICovCitzdGF0aWMgdm9pZAordW5pY29kZV9maWxsX2ludmFsaWQoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCkKK3sKKyAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKTsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworICAgIGlmIChsZW5ndGggPD0gb2xkX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIG1lbXNldChkYXRhICsgb2xkX2xlbmd0aCAqIGtpbmQsIDB4ZmYsIChsZW5ndGggLSBvbGRfbGVuZ3RoKSAqIGtpbmQpOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCoKIHJlc2l6ZV9jb21wYWN0KFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IGxlbmd0aCkKIHsKQEAgLTY2Miw2ICs3MDMsMTAgQEAKICAgICBQeV9zc2l6ZV90IG5ld19zaXplOwogICAgIGludCBzaGFyZV93c3RyOwogICAgIFB5T2JqZWN0ICpuZXdfdW5pY29kZTsKKyNpZmRlZiBQeV9ERUJVRworICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCisKICAgICBhc3NlcnQodW5pY29kZV9tb2RpZmlhYmxlKHVuaWNvZGUpKTsKICAgICBhc3NlcnQoUHlVbmljb2RlX0lTX1JFQURZKHVuaWNvZGUpKTsKICAgICBhc3NlcnQoUHlVbmljb2RlX0lTX0NPTVBBQ1QodW5pY29kZSkpOwpAQCAtNzAxLDYgKzc0Niw5IEBACiAgICAgICAgIFB5T2JqZWN0X0RFTChfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpOwogICAgICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSBOVUxMOwogICAgIH0KKyNpZmRlZiBQeV9ERUJVRworICAgIHVuaWNvZGVfZmlsbF9pbnZhbGlkKHVuaWNvZGUsIG9sZF9sZW5ndGgpOworI2VuZGlmCiAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpLCBQeVVuaWNvZGVfREFUQSh1bmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCAwKTsKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDApKTsKQEAgLTcxOSw2ICs3NjcsOSBAQAogICAgICAgICBQeV9zc2l6ZV90IGNoYXJfc2l6ZTsKICAgICAgICAgaW50IHNoYXJlX3dzdHIsIHNoYXJlX3V0Zjg7CiAgICAgICAgIHZvaWQgKmRhdGE7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgUHlfc3NpemVfdCBvbGRfbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisjZW5kaWYKIAogICAgICAgICBkYXRhID0gX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKTsKICAgICAgICAgY2hhcl9zaXplID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC03NTQsNiArODA1LDkgQEAKICAgICAgICAgfQogICAgICAgICBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpLCBkYXRhLCBsZW5ndGgsIDApOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIHVuaWNvZGVfZmlsbF9pbnZhbGlkKHVuaWNvZGUsIG9sZF9sZW5ndGgpOworI2VuZGlmCiAgICAgICAgIGlmIChzaGFyZV93c3RyIHx8IF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDApKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtODA2LDggKzg2MCw4IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgY29weV9sZW5ndGggPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpOwogICAgICAgICBjb3B5X2xlbmd0aCA9IFB5X01JTihjb3B5X2xlbmd0aCwgbGVuZ3RoKTsKLSAgICAgICAgUHlfVU5JQ09ERV9DT1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGgpOworICAgICAgICBQeV9NRU1DUFkoX1B5VW5pY29kZV9XU1RSKHcpLCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSksCisgICAgICAgICAgICAgICAgICBjb3B5X2xlbmd0aCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIHJldHVybiB3OwogICAgIH0KIH0KQEAgLTgyNCw3ICs4NzgsNyBAQAogc3RhdGljIFB5VW5pY29kZU9iamVjdCAqCiBfUHlVbmljb2RlX05ldyhQeV9zc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGU7CisgICAgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOwogICAgIHNpemVfdCBuZXdfc2l6ZTsKIAogICAgIC8qIE9wdGltaXphdGlvbiBmb3IgZW1wdHkgc3RyaW5ncyAqLwpAQCAtODQ3LDYgKzkwMSwxOSBAQAogICAgIGlmICh1bmljb2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5ld19zaXplID0gc2l6ZW9mKFB5X1VOSUNPREUpICogKChzaXplX3QpbGVuZ3RoICsgMSk7CisKKyAgICBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpID0gbGVuZ3RoOworICAgIF9QeVVuaWNvZGVfSEFTSCh1bmljb2RlKSA9IC0xOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuaW50ZXJuZWQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkua2luZCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5jb21wYWN0ID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLnJlYWR5ID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmFzY2lpID0gMDsKKyAgICBfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpID0gTlVMTDsKKyAgICBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKSA9IDA7CisgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gTlVMTDsKKyAgICBfUHlVbmljb2RlX1VURjhfTEVOR1RIKHVuaWNvZGUpID0gMDsKKwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9IChQeV9VTklDT0RFKikgUHlPYmplY3RfTUFMTE9DKG5ld19zaXplKTsKICAgICBpZiAoIV9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSkgewogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CkBAIC04NjMsMTcgKzkzMCw3IEBACiAgICAgICovCiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpWzBdID0gMDsKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSlbbGVuZ3RoXSA9IDA7Ci0gICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKLSAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7Ci0gICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7Ci0gICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOwotICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7Ci0gICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KChQeU9iamVjdCAqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gdW5pY29kZTsKIH0KQEAgLTEwNzgsMTEgKzExMzUsNyBAQAogICAgICAgICB9CiAgICAgfQogI2lmZGVmIFB5X0RFQlVHCi0gICAgLyogRmlsbCB0aGUgZGF0YSB3aXRoIGludmFsaWQgY2hhcmFjdGVycyB0byBkZXRlY3QgYnVncyBlYXJsaWVyLgotICAgICAgIF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShzdHIsIDEpIGRldGVjdHMgaW52YWxpZCBjaGFyYWN0ZXJzLAotICAgICAgIGF0IGxlYXN0IGZvciBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkKLSAgICAgICBhbmQgVStGRkZGRkZGRiBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBpbiBVbmljb2RlIDYuMC4gKi8KLSAgICBtZW1zZXQoZGF0YSwgMHhmZiwgc2l6ZSAqIGtpbmQpOworICAgIHVuaWNvZGVfZmlsbF9pbnZhbGlkKChQeU9iamVjdCopdW5pY29kZSwgMCk7CiAjZW5kaWYKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KChQeU9iamVjdCopdW5pY29kZSwgMCkpOwogICAgIHJldHVybiBvYmo7CkBAIC0xNTEyLDcgKzE1NjUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotdW5pY29kZV9kZWFsbG9jKHJlZ2lzdGVyIFB5T2JqZWN0ICp1bmljb2RlKQordW5pY29kZV9kZWFsbG9jKFB5T2JqZWN0ICp1bmljb2RlKQogewogICAgIHN3aXRjaCAoUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKHVuaWNvZGUpKSB7CiAgICAgY2FzZSBTU1RBVEVfTk9UX0lOVEVSTkVEOgpAQCAtMTY0NCwzOCArMTY5Nyw2IEBACiAgICAgcmV0dXJuIHVuaWNvZGVfcmVzaXplKHBfdW5pY29kZSwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIGludAotdW5pY29kZV93aWRlbihQeU9iamVjdCAqKnBfdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhjaGFyKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSgqcF91bmljb2RlKSk7Ci0gICAgYXNzZXJ0KGxlbmd0aCA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqcF91bmljb2RlKSk7Ci0gICAgaWYgKG1heGNoYXIgPD0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKCpwX3VuaWNvZGUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfTmV3KFB5VW5pY29kZV9HRVRfTEVOR1RIKCpwX3VuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y2hhcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzdWx0LCAwLCAqcF91bmljb2RlLCAwLCBsZW5ndGgpOwotICAgIFB5X0RFQ1JFRigqcF91bmljb2RlKTsKLSAgICAqcF91bmljb2RlID0gcmVzdWx0OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci11bmljb2RlX3B1dGNoYXIoUHlPYmplY3QgKipwX3VuaWNvZGUsIFB5X3NzaXplX3QgKnBvcywKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoKQotewotICAgIGFzc2VydChjaCA8PSBNQVhfVU5JQ09ERSk7Ci0gICAgaWYgKHVuaWNvZGVfd2lkZW4ocF91bmljb2RlLCAqcG9zLCBjaCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKCpwX3VuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQSgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgKCpwb3MpKyssIGNoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogLyogQ29weSBhIEFTQ0lJIG9yIGxhdGluMSBjaGFyKiBzdHJpbmcgaW50byBhIFB5dGhvbiBVbmljb2RlIHN0cmluZy4KIAogICAgV0FSTklORzogVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgY29weSB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgYW5kCkBAIC0xNjkyLDYgKzE3MTMsMTQgQEAKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7CiAgICAgICAgIGFzc2VydChpbmRleCArIGxlbiA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKSk7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkgeworICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gdWNzMWxpYl9maW5kX21heF9jaGFyKAorICAgICAgICAgICAgICAgIChjb25zdCBQeV9VQ1MxKilzdHIsCisgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VDUzEqKXN0ciArIGxlbik7CisgICAgICAgICAgICBhc3NlcnQobWF4Y2hhciA8IDEyOCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBtZW1jcHkoKGNoYXIgKikgZGF0YSArIGluZGV4LCBzdHIsIGxlbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE5MzcsMTMgKzE5NjYsMTcgQEAKICAgICBhc3NlcnQoc2l6ZSA+IDApOwogICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgUHlfVUNTNCBjaCA9IHVbMF07CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOwogICAgICAgICBpZiAoY2ggPCAyNTYpCiAgICAgICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKWNoKTsKIAogICAgICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORChyZXMpLCBQeVVuaWNvZGVfREFUQShyZXMpLCAwLCBjaCk7CisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXMpOworICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEocmVzKTsKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIDAsIGNoKTsKICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CkBAIC0xOTczLDEzICsyMDA2LDE3IEBACiAgICAgYXNzZXJ0KHNpemUgPiAwKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSB1WzBdOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKICAgICAgICAgaWYgKGNoIDwgMjU2KQogICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7CiAKICAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocmVzKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcyk7CisgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7CiAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQpAQCAtMjI1OCw3ICsyMjk1LDcgQEAKICNpZmRlZiBIQVZFX1dDSEFSX0gKIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihyZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCitQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGNvbnN0IHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAodyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChzaXplID09IDApCkBAIC0yMjc4LDE2ICsyMzE1LDkgQEAKIAogc3RhdGljIHZvaWQKIG1ha2VmbXQoY2hhciAqZm10LCBpbnQgbG9uZ2ZsYWcsIGludCBsb25nbG9uZ2ZsYWcsIGludCBzaXplX3RmbGFnLAotICAgICAgICBpbnQgemVyb3BhZCwgaW50IHdpZHRoLCBpbnQgcHJlY2lzaW9uLCBjaGFyIGMpCisgICAgICAgIGNoYXIgYykKIHsKICAgICAqZm10KysgPSAnJSc7Ci0gICAgaWYgKHdpZHRoKSB7Ci0gICAgICAgIGlmICh6ZXJvcGFkKQotICAgICAgICAgICAgKmZtdCsrID0gJzAnOwotICAgICAgICBmbXQgKz0gc3ByaW50ZihmbXQsICIlZCIsIHdpZHRoKTsKLSAgICB9Ci0gICAgaWYgKHByZWNpc2lvbikKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiLiVkIiwgcHJlY2lzaW9uKTsKICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICpmbXQrKyA9ICdsJzsKICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpIHsKQEAgLTIzMTIsNDQgKzIzNDIsMTM5IEBACiAgICAgKmZtdCA9ICdcMCc7CiB9CiAKLS8qIGhlbHBlciBmb3IgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgKi8KKy8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkIG9yICVwLgorICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCisgICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCisjZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCwgUHlfc3NpemVfdCBwcmVjaXNpb24pCit7CisgICAgUHlfc3NpemVfdCBsZW5ndGgsIGZpbGwsIGFyZ2xlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CisgICAgaWYgKChwcmVjaXNpb24gPT0gLTEgfHwgcHJlY2lzaW9uID49IGxlbmd0aCkKKyAgICAgICAgJiYgd2lkdGggPD0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4ocHJlY2lzaW9uLCBsZW5ndGgpOworCisgICAgYXJnbGVuID0gUHlfTUFYKGxlbmd0aCwgd2lkdGgpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IHdyaXRlci0+bWF4Y2hhcikKKyAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBsZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBhcmdsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAod2lkdGggPiBsZW5ndGgpIHsKKyAgICAgICAgZmlsbCA9IHdpZHRoIC0gbGVuZ3RoOworICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnICcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgIH0KKworICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIDAsIGxlbmd0aCk7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuZ3RoOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIC8qIFVURi04ICovCisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgaW50IHJlczsKKworICAgIGxlbmd0aCA9IHN0cmxlbihzdHIpOworICAgIGlmIChwcmVjaXNpb24gIT0gLTEpCisgICAgICAgIGxlbmd0aCA9IFB5X01JTihsZW5ndGgsIHByZWNpc2lvbik7CisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBsZW5ndGgsICJyZXBsYWNlIiwgTlVMTCk7CisgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmVzID0gdW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIHVuaWNvZGUsIHdpZHRoLCAtMSk7CisgICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIHJldHVybiByZXM7Cit9CiAKIHN0YXRpYyBjb25zdCBjaGFyKgotcGFyc2VfZm9ybWF0X2ZsYWdzKGNvbnN0IGNoYXIgKmYsCi0gICAgICAgICAgICAgICAgICAgaW50ICpwX3dpZHRoLCBpbnQgKnBfcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgIGludCAqcF9sb25nZmxhZywgaW50ICpwX2xvbmdsb25nZmxhZywgaW50ICpwX3NpemVfdGZsYWcpCit1bmljb2RlX2Zyb21mb3JtYXRfYXJnKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZiwgdmFfbGlzdCAqdmFyZ3MpCiB7Ci0gICAgaW50IHdpZHRoLCBwcmVjaXNpb24sIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWc7CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgemVyb3BhZDsKKyAgICBQeV9zc2l6ZV90IHdpZHRoOworICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uOworICAgIGludCBsb25nZmxhZzsKKyAgICBpbnQgbG9uZ2xvbmdmbGFnOworICAgIGludCBzaXplX3RmbGFnOworICAgIFB5X3NzaXplX3QgZmlsbDsKKworICAgIHAgPSBmOworICAgIGYrKzsKKyAgICB6ZXJvcGFkID0gMDsKKyAgICBpZiAoKmYgPT0gJzAnKSB7CisgICAgICAgIHplcm9wYWQgPSAxOworICAgICAgICBmKys7CisgICAgfQogCiAgICAgLyogcGFyc2UgdGhlIHdpZHRoLnByZWNpc2lvbiBwYXJ0LCBlLmcuICIlMi41cyIgPT4gd2lkdGg9MiwgcHJlY2lzaW9uPTUgKi8KLSAgICBmKys7Ci0gICAgd2lkdGggPSAwOwotICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgIHdpZHRoID0gKHdpZHRoKjEwKSArICpmKysgLSAnMCc7Ci0gICAgcHJlY2lzaW9uID0gMDsKKyAgICB3aWR0aCA9IC0xOworICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgd2lkdGggPSAqZiAtICcwJzsKKyAgICAgICAgZisrOworICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICBpZiAod2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCkqZiAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoID0gKHdpZHRoICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmVjaXNpb24gPSAtMTsKICAgICBpZiAoKmYgPT0gJy4nKSB7CiAgICAgICAgIGYrKzsKLSAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKLSAgICAgICAgICAgIHByZWNpc2lvbiA9IChwcmVjaXNpb24qMTApICsgKmYrKyAtICcwJzsKKyAgICAgICAgaWYgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgcHJlY2lzaW9uID0gKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlY2lzaW9uID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKCpmID09ICclJykgewogICAgICAgICAgICAgLyogIiUuMyVzIiA9PiBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgICAgIGYtLTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKmYgPT0gJ1wwJykgewotICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMSIgPT4gZ28gYmFja3dhcmQsIGYgcG9pbnRzIHRvICIxIiAqLworICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMTIzIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgIGYtLTsKICAgICB9Ci0gICAgaWYgKHBfd2lkdGggIT0gTlVMTCkKLSAgICAgICAgKnBfd2lkdGggPSB3aWR0aDsKLSAgICBpZiAocF9wcmVjaXNpb24gIT0gTlVMTCkKLSAgICAgICAgKnBfcHJlY2lzaW9uID0gcHJlY2lzaW9uOwogCiAgICAgLyogSGFuZGxlICVsZCwgJWx1LCAlbGxkIGFuZCAlbGx1LiAqLwogICAgIGxvbmdmbGFnID0gMDsKICAgICBsb25nbG9uZ2ZsYWcgPSAwOwogICAgIHNpemVfdGZsYWcgPSAwOwotCiAgICAgaWYgKCpmID09ICdsJykgewogICAgICAgICBpZiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScgfHwgZlsxXSA9PSAnaScpIHsKICAgICAgICAgICAgIGxvbmdmbGFnID0gMTsKQEAgLTIzNjgsNDk5ICsyNDkzLDI4NCBAQAogICAgICAgICBzaXplX3RmbGFnID0gMTsKICAgICAgICAgKytmOwogICAgIH0KLSAgICBpZiAocF9sb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nZmxhZyA9IGxvbmdmbGFnOwotICAgIGlmIChwX2xvbmdsb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nbG9uZ2ZsYWcgPSBsb25nbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfc2l6ZV90ZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9zaXplX3RmbGFnID0gc2l6ZV90ZmxhZzsKKworICAgIGlmIChmWzFdID09ICdcMCcpCisgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKworICAgIHN3aXRjaCAoKmYpIHsKKyAgICBjYXNlICdjJzoKKyAgICB7CisgICAgICAgIGludCBvcmRpbmFsID0gdmFfYXJnKCp2YXJncywgaW50KTsKKyAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBhcmd1bWVudCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBvcmRpbmFsKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnaSc6CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAndSc6CisgICAgY2FzZSAneCc6CisgICAgeworICAgICAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KKyAgICAgICAgY2hhciBmbXRbMTBdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAiJTBsbGRcMCIgKi8KKyAgICAgICAgY2hhciBidWZmZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisgICAgICAgIFB5X3NzaXplX3QgYXJnbGVuOworCisgICAgICAgIGlmICgqZiA9PSAndScpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7CisKKyAgICAgICAgICAgIGlmIChsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ3gnKSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgJ3gnKTsKKyAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsIHZhX2FyZygqdmFyZ3MsIGludCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIFB5X3NzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgICAgICBpZiAocHJlY2lzaW9uIDwgbGVuKQorICAgICAgICAgICAgcHJlY2lzaW9uID0gbGVuOworCisgICAgICAgIGFyZ2xlbiA9IFB5X01BWChwcmVjaXNpb24sIHdpZHRoKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICh3aWR0aCA+IHByZWNpc2lvbikgeworICAgICAgICAgICAgUHlfVUNTNCBmaWxsY2hhcjsKKyAgICAgICAgICAgIGZpbGwgPSB3aWR0aCAtIHByZWNpc2lvbjsKKyAgICAgICAgICAgIGZpbGxjaGFyID0gemVyb3BhZD8nMCc6JyAnOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgZmlsbGNoYXIpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlY2lzaW9uID4gbGVuKSB7CisgICAgICAgICAgICBmaWxsID0gcHJlY2lzaW9uIC0gbGVuOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJzAnKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgYnVmZmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdwJzoKKyAgICB7CisgICAgICAgIGNoYXIgbnVtYmVyW01BWF9MT05HX0xPTkdfQ0hBUlNdOworCisgICAgICAgIGxlbiA9IHNwcmludGYobnVtYmVyLCAiJXAiLCB2YV9hcmcoKnZhcmdzLCB2b2lkKikpOworICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCisgICAgICAgIGlmIChudW1iZXJbMV0gPT0gJ1gnKQorICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICBlbHNlIGlmIChudW1iZXJbMV0gIT0gJ3gnKSB7CisgICAgICAgICAgICBtZW1tb3ZlKG51bWJlciArIDIsIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcikgKyAxKTsKKyAgICAgICAgICAgIG51bWJlclswXSA9ICcwJzsKKyAgICAgICAgICAgIG51bWJlclsxXSA9ICd4JzsKKyAgICAgICAgICAgIGxlbiArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIG51bWJlciwgbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncyc6CisgICAgeworICAgICAgICAvKiBVVEYtOCAqLworICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciopOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIod3JpdGVyLCBzLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKKworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZygqdmFyZ3MsIGNvbnN0IGNoYXIgKik7CisgICAgICAgIGlmIChvYmopIHsKKyAgICAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9iaikpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBvYmosIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHN0ciwgd2lkdGgsIHByZWNpc2lvbikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1MnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqc3RyOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpyZXByOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAgICAgaWYgKCFyZXByKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgcmVwciwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnQSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKKyAgICAgICAgaWYgKCFhc2NpaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIGFzY2lpLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJyUnOgorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCAnJScpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdAorICAgICAgICAgICBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0IHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0CisgICAgICAgICAgIHNraXAgdGhlIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hhdCdzIGluIHRoZQorICAgICAgICAgICBhcmd1bWVudCBsaXN0KSAqLworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlTGF0aW4xU3RyaW5nKHdyaXRlciwgcCwgbGVuKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmID0gcCtsZW47CisgICAgICAgIHJldHVybiBmOworICAgIH0KKworICAgIGYrKzsKICAgICByZXR1cm4gZjsKIH0KIAotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsZC4gIDIxIGNoYXJhY3RlcnMKLSAgIGFsbG93cyBmb3IgNjQtYml0IGludGVnZXJzIChpbiBkZWNpbWFsKSBhbmQgYW4gb3B0aW9uYWwgc2lnbi4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfQ0hBUlMgMjEKLS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkLgotICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCi0gICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCi0jZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQotCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogewotICAgIHZhX2xpc3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBjYWxsY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdHMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBuID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBwcmVjaXNpb24gPSAwOwotICAgIGludCB6ZXJvcGFkOwotICAgIGNvbnN0IGNoYXIqIGY7Ci0gICAgUHlPYmplY3QgKnN0cmluZzsKLSAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KLSAgICBjaGFyIGZtdFs2MV07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICUwd2lkdGgucHJlY2lzaW9ubGxkICovCi0gICAgUHlfVUNTNCBtYXhjaGFyID0gMTI3OyAvKiByZXN1bHQgaXMgQVNDSUkgYnkgZGVmYXVsdCAqLwotICAgIFB5X1VDUzQgYXJnbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IG51bWJlcnNpemUgPSAwOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdHMgPSBOVUxMOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CisgICAgdmFfbGlzdCB2YXJnczI7CisgICAgY29uc3QgY2hhciAqZjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAotICAgIFB5X1ZBX0NPUFkoY291bnQsIHZhcmdzKTsKLSAgICAvKiBzdGVwIDE6IGNvdW50IHRoZSBudW1iZXIgb2YgJVMvJVIvJUEvJXMgZm9ybWF0IHNwZWNpZmljYXRpb25zCi0gICAgICogKHdlIGNhbGwgUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5T2JqZWN0X0FTQ0lJKCkvCi0gICAgICogUHlVbmljb2RlX0RlY29kZVVURjgoKSBmb3IgdGhlc2Ugb2JqZWN0cyBvbmNlIGR1cmluZyBzdGVwIDMgYW5kIHB1dCB0aGUKLSAgICAgKiByZXN1bHQgaW4gYW4gYXJyYXkpCi0gICAgICogYWxzbyBlc3RpbWF0ZSBhIHVwcGVyIGJvdW5kIGZvciBhbGwgdGhlIG51bWJlciBmb3JtYXRzIGluIHRoZSBzdHJpbmcsCi0gICAgICogbnVtYmVycyB3aWxsIGJlIGZvcm1hdHRlZCBpbiBzdGVwIDMgYW5kIGJlIGtlcHQgaW4gYSAnXDAnLXNlcGFyYXRlZAotICAgICAqIGJ1ZmZlciBiZWZvcmUgcHV0dGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLiAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgeworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHN0cmxlbihmb3JtYXQpICsgMTAwOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworCisgICAgLyogdmFfbGlzdCBtYXkgYmUgYW4gYXJyYXkgKG9mIDEgaXRlbSkgb24gc29tZSBwbGF0Zm9ybXMgKGV4OiBBTUQ2NCkuCisgICAgICAgQ29weSBpdCB0byBiZSBhYmxlIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gYSBzdWJmdW5jdGlvbi4gKi8KKyAgICBQeV9WQV9DT1BZKHZhcmdzMiwgdmFyZ3MpOworCisgICAgZm9yIChmID0gZm9ybWF0OyAqZjsgKSB7CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICAvKiBza2lwIHdpZHRoIG9yIHdpZHRoLnByZWNpc2lvbiAoZWcuICIxLjIiIG9mICIlMS4yZiIpICovCi0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgTlVMTCwgTlVMTCwgJmxvbmdsb25nZmxhZywgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoKmYgPT0gJ3MnIHx8ICpmPT0nUycgfHwgKmY9PSdSJyB8fCAqZj09J0EnIHx8ICpmPT0nVicpCi0gICAgICAgICAgICAgICAgKytjYWxsY291bnQ7Ci0KLSAgICAgICAgICAgIGVsc2UgaWYgKCpmID09ICdkJyB8fCAqZj09J3UnIHx8ICpmPT0naScgfHwgKmY9PSd4JyB8fCAqZj09J3AnKSB7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2xvbmdmbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0xPTkdfQ0hBUlM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBNQVhfTE9OR19DSEFSUyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdCBpbnRlZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgc2lnbi4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuICBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgIGlzbid0IGVub3VnaCBmb3Igb2N0YWwuICBJZiBhIHdpZHRoIGlzIHNwZWNpZmllZCB3ZQotICAgICAgICAgICAgICAgICAgICAgICBuZWVkIG1vcmUgKHdoaWNoIHdlIGFsbG9jYXRlIGxhdGVyKS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0NIQVJTOwotCi0gICAgICAgICAgICAgICAgLyogYWNjb3VudCBmb3IgdGhlIHNpemUgKyAnXDAnIHRvIHNlcGFyYXRlIG51bWJlcnMKLSAgICAgICAgICAgICAgICAgICBpbnNpZGUgb2YgdGhlIG51bWJlcnJlc3VsdHMgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgbnVtYmVyc2l6ZSArPSAod2lkdGggKyAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgodW5zaWduZWQgY2hhcikqZiA+IDEyNykgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgotICAgICAgICAgICAgICAgICJzdHJpbmcsIGdvdCBhIG5vbi1BU0NJSSBieXRlOiAweCUwMngiLAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIHN0ZXAgMjogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZgotICAgICAqIFB5T2JqZWN0X1N0cigpL1B5T2JqZWN0X1JlcHIoKS9QeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGNhbGxzICovCi0gICAgaWYgKGNhbGxjb3VudCkgewotICAgICAgICBjYWxscmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBjYWxsY291bnQpOwotICAgICAgICBpZiAoIWNhbGxyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIH0KLSAgICAvKiBzdGVwIDIuNTogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZiBmb3JtYXRpbmcgbnVtYmVycyAqLwotICAgIGlmIChudW1iZXJzaXplKSB7Ci0gICAgICAgIG51bWJlcnJlc3VsdHMgPSBQeU9iamVjdF9NYWxsb2MobnVtYmVyc2l6ZSk7Ci0gICAgICAgIGlmICghbnVtYmVycmVzdWx0cykgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBudW1iZXJyZXN1bHQgPSBudW1iZXJyZXN1bHRzOwotICAgIH0KLQotICAgIC8qIHN0ZXAgMzogZm9ybWF0IG51bWJlcnMgYW5kIGZpZ3VyZSBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIHdlIG5lZWQgKi8KLSAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLSAgICAgICAgICAgIGludCBsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICBpbnQgc2l6ZV90ZmxhZzsKLSAgICAgICAgICAgIGludCBudW1wcmludGVkOwotCi0gICAgICAgICAgICBwID0gZjsKLSAgICAgICAgICAgIHplcm9wYWQgPSAoZlsxXSA9PSAnMCcpOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCAmd2lkdGgsICZwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb25nZmxhZywgJmxvbmdsb25nZmxhZywgJnNpemVfdGZsYWcpOwotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoY291bnQsIGludCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgKFB5X1VDUzQpb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICpmKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQeV9zc2l6ZV90KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBieSArMSB0byBza2lwIG92ZXIgdGhlICdcMCcgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgJ3UnKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCB6ZXJvcGFkLCB3aWR0aCwgcHJlY2lzaW9uLCAneCcpOwotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LCB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgIiVwIiwgdmFfYXJnKGNvdW50LCB2b2lkKikpOwotICAgICAgICAgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCi0gICAgICAgICAgICAgICAgaWYgKG51bWJlcnJlc3VsdFsxXSA9PSAnWCcpCi0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFsxXSA9ICd4JzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChudW1iZXJyZXN1bHRbMV0gIT0gJ3gnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW1vdmUobnVtYmVycmVzdWx0ICsgMiwgbnVtYmVycmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihudW1iZXJyZXN1bHQpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFswXSA9ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFVURi04ICovCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHMsIHN0cmxlbihzKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIC8qIHNpbmNlIFB5VW5pY29kZV9EZWNvZGVVVEY4IHJldHVybnMgYWxyZWFkeSBmbGV4aWJsZQotICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgb2JqZWN0cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHJlYWR5IG9uIHRoZW0gKi8KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUob2JqKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyX29iajsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqIHx8IHN0cik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCFvYmogfHwgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyX29iaiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBzdHJsZW4oc3RyKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJfb2JqKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cl9vYmopID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cl9vYmo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlcHI7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXByKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gcmVwcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBhc2NpaSA9IFB5T2JqZWN0X0FTQ0lJKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFhc2NpaSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYXNjaWkpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShhc2NpaSk7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gYXNjaWk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0IG9mCi0gICAgICAgICAgICAgICAgICAgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAgIHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0IHNraXAgdGhlCi0gICAgICAgICAgICAgICAgICAgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdwotICAgICAgICAgICAgICAgICAgIHdoYXQncyBpbiB0aGUgYXJndW1lbnQgbGlzdCkgKi8KLSAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4cGFuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuKys7Ci0gICAgfQotICBleHBhbmQ6Ci0gICAgLyogc3RlcCA0OiBmaWxsIHRoZSBidWZmZXIgKi8KLSAgICAvKiBTaW5jZSB3ZSd2ZSBhbmFseXplZCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkLAotICAgICAgIHdlIGRvbid0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcuCi0gICAgICAgVGhlcmUgY2FuIGJlIG5vIGVycm9ycyBiZXlvbmQgdGhpcyBwb2ludC4gKi8KLSAgICBzdHJpbmcgPSBQeVVuaWNvZGVfTmV3KG4sIG1heGNoYXIpOwotICAgIGlmICghc3RyaW5nKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7Ci0gICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0KLSAgICBmb3IgKGkgPSAwLCBmID0gZm9ybWF0OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHA7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIC8qIGNoZWNraW5nIGZvciA9PSBiZWNhdXNlIHRoZSBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIGEgZW1wdHkKLSAgICAgICAgICAgICAgIHN0cmluZywgd2hpY2ggY2F1c2VzIGkgdG8gcG9pbnQgdG8gZW5kLCB0aGUgYXNzZXJ0IGF0IHRoZSBlbmQgb2YKLSAgICAgICAgICAgICAgIHRoZSBsb29wICovCi0gICAgICAgICAgICBhc3NlcnQoaSA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLQotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IG9yZGluYWwgPSB2YV9hcmcodmFyZ3MsIGludCk7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKmYgPT0gJ3AnKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCB2b2lkICopOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICAvKiBleHRyYWN0IHRoZSByZXN1bHQgZnJvbSBudW1iZXJyZXN1bHRzIGFuZCBhcHBlbmQuICovCi0gICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKG51bWJlcnJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgbnVtYmVycmVzdWx0LCBsZW4pOwotICAgICAgICAgICAgICAgIC8qIHNraXAgb3ZlciB0aGUgc2VwYXJhdGluZyAnXDAnICovCi0gICAgICAgICAgICAgICAgaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKm51bWJlcnJlc3VsdCA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQrKzsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdWJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgdmFfYXJnKHZhcmdzLCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksIG9iaiwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCAgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgJyUnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgcCwgbGVuKTsKLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoaSA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYgPSB1bmljb2RlX2Zyb21mb3JtYXRfYXJnKCZ3cml0ZXIsIGYsICZ2YXJnczIpOworICAgICAgICAgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoaSA8IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgKmYpOwotICAgICAgICB9Ci0gICAgfQotICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOworICAgICAgICAgICAgY29uc3QgY2hhciAqcDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogCi0gIGVuZDoKLSAgICBpZiAoY2FsbHJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUoY2FsbHJlc3VsdHMpOwotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdChzdHJpbmcpOwotICBmYWlsOgotICAgIGlmIChjYWxscmVzdWx0cykgewotICAgICAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQyID0gY2FsbHJlc3VsdHM7Ci0gICAgICAgIHdoaWxlIChjYWxscmVzdWx0MiA8IGNhbGxyZXN1bHQpIHsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoKmNhbGxyZXN1bHQyKTsKLSAgICAgICAgICAgICsrY2FsbHJlc3VsdDI7CisgICAgICAgICAgICBwID0gZjsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSpwID4gMTI3KSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikqcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnJScpOworICAgICAgICAgICAgbGVuID0gcCAtIGY7CisKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsIGYsIGxlbikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgZiA9IHA7CiAgICAgICAgIH0KLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7CiAgICAgfQotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworICBmYWlsOgorICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjk2OCw2ICsyODc4LDkgQEAKIFB5VW5pY29kZV9Gcm9tT3JkaW5hbChpbnQgb3JkaW5hbCkKIHsKICAgICBQeU9iamVjdCAqdjsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOworCiAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjaHIoKSBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwpAQCAtMjk4MCwxMyArMjg5MywxNSBAQAogICAgIHYgPSBQeVVuaWNvZGVfTmV3KDEsIG9yZGluYWwpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh2KSwgUHlVbmljb2RlX0RBVEEodiksIDAsIG9yZGluYWwpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2KTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodik7CisgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIDAsIG9yZGluYWwpOwogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodiwgMSkpOwogICAgIHJldHVybiB2OwogfQogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbU9iamVjdChyZWdpc3RlciBQeU9iamVjdCAqb2JqKQorUHlVbmljb2RlX0Zyb21PYmplY3QoUHlPYmplY3QgKm9iaikKIHsKICAgICAvKiBYWFggUGVyaGFwcyB3ZSBzaG91bGQgbWFrZSB0aGlzIEFQSSBhbiBhbGlhcyBvZgogICAgICAgIFB5T2JqZWN0X1N0cigpIGluc3RlYWQgPyEgKi8KQEAgLTMwMDgsNyArMjkyMyw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChyZWdpc3RlciBQeU9iamVjdCAqb2JqLAorUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KFB5T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewpAQCAtMzA2MCwxNCArMjk3NSwxNyBAQAogICAgMSBvbiBzdWNjZXNzLiAqLwogaW50CiBfUHlfbm9ybWFsaXplX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAotICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93ZXJfbGVuKQogewogICAgIGNvbnN0IGNoYXIgKmU7CiAgICAgY2hhciAqbDsKICAgICBjaGFyICpsX2VuZDsKIAogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIC8qIDYgPT0gc3RybGVuKCJ1dGYtOCIpICsgMSAqLworICAgICAgICBpZiAobG93ZXJfbGVuIDwgNikKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdHJjcHkobG93ZXIsICJ1dGYtOCIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0zMTA5LDcgKzMwMjcsOCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc2l6ZSwgZXJyb3JzLCBOVUxMKTsKICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxhdGluMShzLCBzaXplLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTMxMzAsMTMgKzMwNDksMTUgQEAKICAgICBidWZmZXIgPSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmaW5mbyk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgdW5pY29kZSA9IFB5Q29kZWNfRGVjb2RlKGJ1ZmZlciwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgdW5pY29kZSA9IF9QeUNvZGVjX0RlY29kZVRleHQoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzKTsKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMTk0LDggKzMxMTUsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZGVjb2RlciBkaWQgbm90IHJldHVybiBhIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBkZWNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZSgpIHRvIGRlY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lLCBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzM0Myw3ICszMjY2LDcgQEAKICAgICB9CiAKICAgICBpZiAoc3Vycm9nYXRlZXNjYXBlKSB7Ci0gICAgICAgIC8qIGxvY2FsZSBlbmNvZGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZSAqLworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIGNoYXIgKnN0cjsKIAogICAgICAgICBzdHIgPSBfUHlfd2NoYXIyY2hhcih3c3RyLCAmZXJyb3JfcG9zKTsKQEAgLTMzNjMsNiArMzI4Niw3IEBACiAgICAgICAgIFB5TWVtX0ZyZWUoc3RyKTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0cmljdCBtb2RlICovCiAgICAgICAgIHNpemVfdCBsZW4sIGxlbjI7CiAKICAgICAgICAgbGVuID0gd2NzdG9tYnMoTlVMTCwgd3N0ciwgMCk7CkBAIC0zNDAxLDcgKzMzMjUsNyBAQAogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKICAgICAgICAgaWYgKHdzdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCBlcnJsZW4pOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKICAgICB9CkBAIC0zNDc5LDcgKzM0MDMsOCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKChzdHJjbXAobG93ZXIsICJsYXRpbi0xIikgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImxhdGluMSIpID09IDApIHx8Ci0gICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkpCisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzbzg4NTktMSIpID09IDApKQogICAgICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcodW5pY29kZSwgZXJyb3JzKTsKICNpZmRlZiBIQVZFX01CQ1MKICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCkBAIC0zNDkwLDcgKzM0MTUsNyBAQAogICAgIH0KIAogICAgIC8qIEVuY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCi0gICAgdiA9IFB5Q29kZWNfRW5jb2RlKHVuaWNvZGUsIGVuY29kaW5nLCBlcnJvcnMpOworICAgIHYgPSBfUHlDb2RlY19FbmNvZGVUZXh0KHVuaWNvZGUsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNTA0LDcgKzM0MjksOCBAQAogICAgICAgICBQeU9iamVjdCAqYjsKIAogICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUnVudGltZVdhcm5pbmcsIDEsCi0gICAgICAgICAgICAiZW5jb2RlciAlcyByZXR1cm5lZCBieXRlYXJyYXkgaW5zdGVhZCBvZiBieXRlcyIsCisgICAgICAgICAgICAiZW5jb2RlciAlcyByZXR1cm5lZCBieXRlYXJyYXkgaW5zdGVhZCBvZiBieXRlczsgIgorICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCiAgICAgICAgICAgICBlbmNvZGluZyk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMzUxNyw4ICszNDQzLDEwIEBACiAgICAgfQogCiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgImVuY29kZXIgZGlkIG5vdCByZXR1cm4gYSBieXRlcyBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZW5jb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdieXRlcyc7ICIKKyAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICBQeV9ERUNSRUYodik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zNTQ0LDggKzM0NzIsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhbiBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZW5jb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTM2MDgsOCArMzUzOCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpCi0gICAgeworICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKKyAgICAgICAgLyogInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciAqLwogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoc3RyLCAmd2xlbik7CiAgICAgICAgIGlmICh3c3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmICh3bGVuID09IChzaXplX3QpLTEpCkBAIC0zNjIwLDkgKzM1NTAsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIHdsZW4pOwotICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICNpZm5kZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKICAgICAgICAgd2xlbiA9IG1ic3Rvd2NzKE5VTEwsIHN0ciwgMCk7CiAjZWxzZQpAQCAtMzY0Miw3ICszNTczLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFRoaXMgc2hvdWxkbid0IGZhaWwgbm93ICovCiAgICAgICAgIHdsZW4yID0gbWJzdG93Y3Mod3N0ciwgc3RyLCB3bGVuKzEpOwogICAgICAgICBpZiAod2xlbjIgPT0gKHNpemVfdCktMSkgewogICAgICAgICAgICAgaWYgKHdzdHIgIT0gc21hbGxidWYpCkBAIC0zNjY4LDcgKzM1OTgsNyBAQAogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKICAgICAgICAgaWYgKHdzdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCBlcnJsZW4pOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKICAgICB9CkBAIC0zNzM2LDE4ICszNjY2LDIwIEBACiAKIAogaW50Ci1fUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzKQorX1B5VW5pY29kZV9IYXNOVUxDaGFycyhQeU9iamVjdCogc3RyKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbnVsID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgIGlmIChudWwgPT0gTlVMTCkKLSAgICAgICAgbnVsID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJcMCIsIDEpOwotICAgIGlmIChudWwgPT0gTlVMTCkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0NvbnRhaW5zKHMsIG51bCk7CisgICAgcG9zID0gZmluZGNoYXIoUHlVbmljb2RlX0RBVEEoc3RyKSwgUHlVbmljb2RlX0tJTkQoc3RyKSwKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpLCAnXDAnLCAxKTsKKyAgICBpZiAocG9zID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOwogfQogCi0KIGludAogUHlVbmljb2RlX0ZTQ29udmVydGVyKFB5T2JqZWN0KiBhcmcsIHZvaWQqIGFkZHIpCiB7CkBAIC0zODUxLDYgKzM3ODMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IFB5T2JqZWN0X01BTExPQyhQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKSArIDEpOwogICAgICAgICBpZiAoX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTQwMTksNiArMzk1Miw5IEBACiBQeV9VQ1M0CiBQeVVuaWNvZGVfUmVhZENoYXIoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgaW5kZXgpCiB7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKKwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHVuaWNvZGUpIHx8IFB5VW5pY29kZV9SRUFEWSh1bmljb2RlKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CkBAIC00MDI3LDcgKzM5NjMsOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInN0cmluZyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwogICAgIH0KLSAgICByZXR1cm4gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbmRleCk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwogfQogCiBpbnQKQEAgLTQwODYsNiArNDAyNCw3IEBACiAgICAgKmV4Y2VwdGlvbk9iamVjdCA9IE5VTEw7CiB9CiAKKyNpZmRlZiBIQVZFX01CQ1MKIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBpZiBubyBleGNlcHRpb24gb2NjdXJyZWQsIGNvcHkgdGhlIHJlcGxhY2VtZW50IHRvIHRoZSBvdXRwdXQKQEAgLTQwOTQsMTEgKzQwMzMsMTIgQEAKICovCiAKIHN0YXRpYyBpbnQKLXVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MpCit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93Y2hhcigKKyAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCisgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCisgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCisgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKIHsKICAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CiAKQEAgLTQxMDksMTIgKzQwNDksMTEgQEAKICAgICBQeV9zc2l6ZV90IHJlcXVpcmVkc2l6ZTsKICAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOwotICAgIGludCByZXMgPSAtMTsKKyAgICB3Y2hhcl90ICpyZXB3c3RyOworICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpCi0gICAgICAgIG91dHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqb3V0cHV0KTsKLSAgICBlbHNlCi0gICAgICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOworICAgIGFzc2VydCAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpID09IFB5VW5pY29kZV9XQ0hBUl9LSU5EKTsKKyAgICBvdXRzaXplID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCgqb3V0cHV0KTsKIAogICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpIHsKICAgICAgICAgKmVycm9ySGFuZGxlciA9IFB5Q29kZWNfTG9va3VwRXJyb3IoZXJyb3JzKTsKQEAgLTQxMzksNyArNDA3OCw5OCBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpCisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQorICAgICAgIGNhbGxiYWNrICovCisgICAgaW5wdXRvYmogPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoKmV4Y2VwdGlvbk9iamVjdCk7CisgICAgaWYgKCFpbnB1dG9iaikKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dG9iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4Y2VwdGlvbiBhdHRyaWJ1dGUgb2JqZWN0IG11c3QgYmUgYnl0ZXMiKTsKKyAgICB9CisgICAgKmlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRvYmopOworICAgIGluc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaW5wdXRvYmopOworICAgICppbmVuZCA9ICppbnB1dCArIGluc2l6ZTsKKyAgICAvKiB3ZSBjYW4gREVDUkVGIHNhZmVseSwgYXMgdGhlIGV4Y2VwdGlvbiBoYXMgYW5vdGhlciByZWZlcmVuY2UsCisgICAgICAgc28gdGhlIG9iamVjdCB3b24ndCBnbyBhd2F5LiAqLworICAgIFB5X0RFQ1JFRihpbnB1dG9iaik7CisKKyAgICBpZiAobmV3cG9zPDApCisgICAgICAgIG5ld3BvcyA9IGluc2l6ZStuZXdwb3M7CisgICAgaWYgKG5ld3BvczwwIHx8IG5ld3Bvcz5pbnNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsICJwb3NpdGlvbiAlemQgZnJvbSBlcnJvciBoYW5kbGVyIG91dCBvZiBib3VuZHMiLCBuZXdwb3MpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKKyAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCisgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKKyAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQorICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLworICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXB3bGVuICsgaW5zaXplLW5ld3BvczsKKyAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgeworICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQorICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKKyAgICAqb3V0cG9zICs9IHJlcHdsZW47CisKKyAgICAqZW5kaW5wb3MgPSBuZXdwb3M7CisgICAgKmlucHRyID0gKmlucHV0ICsgbmV3cG9zOworCisgICAgLyogd2UgbWFkZSBpdCEgKi8KKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKKworICBvbkVycm9yOgorICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZiAgIC8qIEhBVkVfTUJDUyAqLworCitzdGF0aWMgaW50Cit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKKyAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAorICAgIGNvbnN0IGNoYXIgKippbnB1dCwgY29uc3QgY2hhciAqKmluZW5kLCBQeV9zc2l6ZV90ICpzdGFydGlucG9zLAorICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAorICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciAvKiBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zICovKQoreworICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKKworICAgIFB5T2JqZWN0ICpyZXN0dXBsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcHVuaWNvZGUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaW5zaXplOworICAgIFB5X3NzaXplX3QgbmV3cG9zOworICAgIFB5X3NzaXplX3QgcmVwbGVuOworICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7CisKKyAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgICplcnJvckhhbmRsZXIgPSBQeUNvZGVjX0xvb2t1cEVycm9yKGVycm9ycyk7CisgICAgICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgbWFrZV9kZWNvZGVfZXhjZXB0aW9uKGV4Y2VwdGlvbk9iamVjdCwKKyAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICppbnB1dCwgKmluZW5kIC0gKmlucHV0LAorICAgICAgICAqc3RhcnRpbnBvcywgKmVuZGlucG9zLAorICAgICAgICByZWFzb24pOworICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIHJlc3R1cGxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygqZXJyb3JIYW5kbGVyLCAqZXhjZXB0aW9uT2JqZWN0LCBOVUxMKTsKKyAgICBpZiAocmVzdHVwbGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN0dXBsZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgJmFyZ3BhcnNlWzRdKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgLyogQ29weSBiYWNrIHRoZSBieXRlcyB2YXJpYWJsZXMsIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUKQEAgLTQxNjQsNTQgKzQxOTQsMjUgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpIHsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICBQeV9zc2l6ZV90IHJlcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHVuaWNvZGUpOwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwbGVuICsgaW5zaXplLW5ld3BvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlZHNpemU8MipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAodW5pY29kZV93aWRlbihvdXRwdXQsICpvdXRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXB1bmljb2RlKSkgPCAwKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycygqb3V0cHV0LCAqb3V0cG9zLCByZXB1bmljb2RlLCAwLCByZXBsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcGxlbjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdjaGFyX3QgKnJlcHdzdHI7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKLSAgICAgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKLSAgICAgICAgaWYgKHJlcHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwd2xlbiArIGluc2l6ZS1uZXdwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICB3Y3NuY3B5KF9QeVVuaWNvZGVfV1NUUigqb3V0cHV0KSArICpvdXRwb3MsIHJlcHdzdHIsIHJlcHdsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcHdsZW47Ci0gICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmVwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwdW5pY29kZSk7CisgICAgd3JpdGVyLT5taW5fbGVuZ3RoICs9IHJlcGxlbjsKKyAgICBpZiAocmVwbGVuID4gMSkKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgcmVwdW5pY29kZSkgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgICplbmRpbnBvcyA9IG5ld3BvczsKICAgICAqaW5wdHIgPSAqaW5wdXQgKyBuZXdwb3M7CiAKICAgICAvKiB3ZSBtYWRlIGl0ISAqLwotICAgIHJlcyA9IDA7CisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CiAKICAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiAtMTsKIH0KIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MzE5LDkgKzQzMjAsOCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAgICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBpbnQgaW5TaGlmdCA9IDA7CiAgICAgUHlfc3NpemVfdCBzaGlmdE91dFN0YXJ0OwpAQCAtNDMzMSwxNyArNDMzMSwxNyBAQAogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCi0gICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAgICAgKmNvbnN1bWVkID0gMDsKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3MgPSAwOworICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKKyAgICBzaGlmdE91dFN0YXJ0ID0gMDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKQEAgLTQzNjQsMTMgKzQzNjQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUob3V0Q2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhzdXJyb2dhdGUsIG91dENoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaDIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gyKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzODAsNyArNDM4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBvdXRDaDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIG91dENoKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgb3V0Q2gpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00Mzg5LDcgKzQzODksNyBAQAogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQxMCw3ICs0NDEwLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qICctJyBpcyBhYnNvcmJlZDsgb3RoZXIgdGVybWluYXRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgcHJlc2VydmVkICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjAsMjAgKzQ0MjAsMjAgQEAKICAgICAgICAgICAgIHMrKzsgLyogY29uc3VtZSAnKycgKi8KICAgICAgICAgICAgIGlmIChzIDwgZSAmJiAqcyA9PSAnLScpIHsgLyogJystJyBlbmNvZGVzICcrJyAqLwogICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCAnKycpIDwgMCkKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgJysnKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBiZWdpbiBiYXNlNjQtZW5jb2RlZCBzZWN0aW9uICovCiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDE7Ci0gICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCA9IG91dHBvczsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gd3JpdGVyLnBvczsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKERFQ09ERV9ESVJFQ1QoY2gpKSB7IC8qIGNoYXJhY3RlciBkZWNvZGVzIGFzIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CkBAIC00NDQ0LDExICs0NDQ0LDExIEBACiAgICAgICAgIGNvbnRpbnVlOwogdXRmN0Vycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGY3IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC00NDYwLDExICs0NDYwLDExIEBACiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPj0gNikgfHwKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+IDAgJiYgYmFzZTY0YnVmZmVyICE9IDApKSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJ1dGY3IiwgInVudGVybWluYXRlZCBzaGlmdCBzZXF1ZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBpZiAocyA8IGUpCiAgICAgICAgICAgICAgICAgZ290byByZXN0YXJ0OwpAQCAtNDQ3NCw3ICs0NDc0LDcgQEAKICAgICAvKiByZXR1cm4gc3RhdGUgKi8KICAgICBpZiAoY29uc3VtZWQpIHsKICAgICAgICAgaWYgKGluU2hpZnQpIHsKLSAgICAgICAgICAgIG91dHBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLworICAgICAgICAgICAgd3JpdGVyLnBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLwogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTQ0ODIsMTcgKzQ0ODIsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHVuaWNvZGUpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDU3NSw3ICs0NTcyLDcgQEAKIAogICAgICAgICAgICAgLyogY29kZSBmaXJzdCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgIGJhc2U2NGJpdHMgKz0gMTY7Ci0gICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IDB4ZDgwMCB8ICgoY2gtMHgxMDAwMCkgPj4gMTApOworICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCAxNikgfCBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRiaXRzID49IDYpIHsKICAgICAgICAgICAgICAgICAqb3V0KysgPSBUT19CQVNFNjQoYmFzZTY0YnVmZmVyID4+IChiYXNlNjRiaXRzLTYpKTsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzIC09IDY7CkBAIC00Njc2LDkgKzQ2NzMsOSBAQAogICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBmb3IKICAgICAgICAgICAgYW4gZXhwbGFuYXRpb24uICovCi0gICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcCA9IHA7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X1VDUzEgKiBxID0gZGVzdDsKKyAgICAgICAgLyogSGVscCBhbGxvY2F0aW9uICovCisgICAgICAgIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgUHlfVUNTMSAqIHEgPSBkZXN0OwogICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3MDEsOCArNDY5OCw4IEBACiAgICAgICAgIC8qIEZhc3QgcGF0aCwgc2VlIGluIFNUUklOR0xJQih1dGY4X2RlY29kZSkgaW4gc3RyaW5nbGliL2NvZGVjcy5oCiAgICAgICAgICAgIGZvciBhbiBleHBsYW5hdGlvbi4gKi8KICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewotICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcCA9IHA7CisgICAgICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCkBAIC00NzI3LDEwICs0NzI0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpjb25zdW1lZCkKIHsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIGNvbnN0IGNoYXIgKmVuZCA9IHMgKyBzaXplOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwogCiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7CkBAIC00NzUxLDI5ICs0NzQ3LDI2IEBACiAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpc1swXSk7CiAgICAgfQogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOwogCi0gICAgb3V0cG9zID0gYXNjaWlfZGVjb2RlKHMsIGVuZCwgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSkpOwotICAgIHMgKz0gb3V0cG9zOworICAgIHdyaXRlci5wb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCB3cml0ZXIuZGF0YSk7CisgICAgcyArPSB3cml0ZXIucG9zOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VDUzQgY2g7Ci0gICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQotICAgICAgICAgICAgICAgIGNoID0gYXNjaWlsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkod3JpdGVyLmJ1ZmZlcikpCisgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNoID0gdWNzMWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgICAgIGNoID0gdWNzMWxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKLSAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBjaCA9IHVjczRsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoY2gpIHsKQEAgLTQ3OTcsMzUgKzQ3OTAsMzEgQEAKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIGNoIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidXRmLTgiLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAogRW5kOgotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gcyAtIHN0YXJ0czsKIAogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiBvbkVycm9yOgogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ4MzUsNyArNDgyNCw3IEBACiAgICB1c2VkIHRvIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvbiBNYWMgT1MgWC4KIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKHVzZQotICAgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSksIG9yIE5VTEwgb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuICovCisgICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KIAogd2NoYXJfdCoKIF9QeV9EZWNvZGVVVEY4X3N1cnJvZ2F0ZWVzY2FwZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUpCkBAIC00ODQ4LDcgKzQ4MzcsNyBAQAogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwogICAgIGlmIChQWV9TU0laRV9UX01BWCAvIHNpemVvZih3Y2hhcl90KSA8IChzaXplICsgMSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHVuaWNvZGUgPSBQeU1lbV9NYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgdW5pY29kZSA9IFB5TWVtX1Jhd01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXVuaWNvZGUpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC00OTcxLDE3ICs0OTYwLDExIEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKLSAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBpbnQgbGUsIGJvID0gMDsgICAgICAgLyogYXNzdW1lIG5hdGl2ZSBvcmRlcmluZyBieSBkZWZhdWx0ICovCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7Ci0gICAgLyogT2Zmc2V0cyBmcm9tIHEgZm9yIHJldHJpZXZpbmcgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0gICAgaW50IGlvcmRlcltdID0gezAsIDEsIDIsIDN9OwotI2Vsc2UKLSAgICBpbnQgaW9yZGVyW10gPSB7MywgMiwgMSwgMH07Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKIApAQCAtNDk5NSwxMDcgKzQ5NzgsMTE4IEBACiAgICAgICAgYnl0ZSBvcmRlciBzZXR0aW5nIGFjY29yZGluZ2x5LiBJbiBuYXRpdmUgbW9kZSwgdGhlIGxlYWRpbmcgQk9NCiAgICAgICAgbWFyayBpcyBza2lwcGVkLCBpbiBhbGwgb3RoZXIgbW9kZXMsIGl0IGlzIGNvcGllZCB0byB0aGUgb3V0cHV0CiAgICAgICAgc3RyZWFtIGFzLWlzIChnaXZpbmcgYSBaV05CU1AgY2hhcmFjdGVyKS4gKi8KLSAgICBpZiAoYm8gPT0gMCkgewotICAgICAgICBpZiAoc2l6ZSA+PSA0KSB7Ci0gICAgICAgICAgICBjb25zdCBQeV9VQ1M0IGJvbSA9IChxW2lvcmRlclszXV0gPDwgMjQpIHwgKHFbaW9yZGVyWzJdXSA8PCAxNikgfAotICAgICAgICAgICAgICAgIChxW2lvcmRlclsxXV0gPDwgOCkgfCBxW2lvcmRlclswXV07Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICAgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAxOwotICAgICAgICAgICAgfQorICAgIGlmIChibyA9PSAwICYmIHNpemUgPj0gNCkgeworICAgICAgICBQeV9VQ1M0IGJvbSA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7CisgICAgICAgICAgICBibyA9IC0xOworICAgICAgICAgICAgcSArPSA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7CisgICAgICAgICAgICBibyA9IDE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ5dGVvcmRlcikKKyAgICAgICAgICAgICpieXRlb3JkZXIgPSBibzsKKyAgICB9CisKKyAgICBpZiAocSA9PSBlKSB7CisgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgICAgICpjb25zdW1lZCA9IHNpemU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOworICAgIH0KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgIGxlID0gYm8gPCAwOwogI2Vsc2UKLSAgICAgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IC0xOwotICAgICAgICAgICAgfQorICAgIGxlID0gYm8gPD0gMDsKICNlbmRpZgorICAgIGVuY29kaW5nID0gbGUgPyAidXRmLTMyLWxlIiA6ICJ1dGYtMzItYmUiOworCisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKGUgLSBxICsgMykgLyA0OworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSAwOworICAgICAgICBQeV9VQ1M0IG1heGNoID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHdyaXRlci5idWZmZXIpOworCisgICAgICAgIGlmIChlIC0gcSA+PSA0KSB7CisgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQgPSB3cml0ZXIua2luZDsKKyAgICAgICAgICAgIHZvaWQgKmRhdGEgPSB3cml0ZXIuZGF0YTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhc3QgPSBlIC0gNDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gd3JpdGVyLnBvczsKKyAgICAgICAgICAgIGlmIChsZSkgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAocVszXSA8PCAyNCkgfCAocVsyXSA8PCAxNikgfCAocVsxXSA8PCA4KSB8IHFbMF07CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+IG1heGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChraW5kICE9IFB5VW5pY29kZV8xQllURV9LSU5EICYmCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIHBvcysrLCBjaCk7CisgICAgICAgICAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChxIDw9IGxhc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IChxWzBdIDw8IDI0KSB8IChxWzFdIDw8IDE2KSB8IChxWzJdIDw8IDgpIHwgcVszXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID4gbWF4Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgcG9zKyssIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHEgPD0gbGFzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cml0ZXIucG9zID0gcG9zOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGJvID09IC0xKSB7Ci0gICAgICAgIC8qIGZvcmNlIExFICovCi0gICAgICAgIGlvcmRlclswXSA9IDA7Ci0gICAgICAgIGlvcmRlclsxXSA9IDE7Ci0gICAgICAgIGlvcmRlclsyXSA9IDI7Ci0gICAgICAgIGlvcmRlclszXSA9IDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJvID09IDEpIHsKLSAgICAgICAgLyogZm9yY2UgQkUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMzsKLSAgICAgICAgaW9yZGVyWzFdID0gMjsKLSAgICAgICAgaW9yZGVyWzJdID0gMTsKLSAgICAgICAgaW9yZGVyWzNdID0gMDsKLSAgICB9Ci0KLSAgICAvKiBUaGlzIG1pZ2h0IGJlIG9uZSB0byBtdWNoLCBiZWNhdXNlIG9mIGEgQk9NICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoKHNpemUrMykvNCwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB1bmljb2RlOwotICAgIG91dHBvcyA9IDA7Ci0KLSAgICB3aGlsZSAocSA8IGUpIHsKLSAgICAgICAgUHlfVUNTNCBjaDsKLSAgICAgICAgLyogcmVtYWluaW5nIGJ5dGVzIGF0IHRoZSBlbmQ/IChzaXplIHNob3VsZCBiZSBkaXZpc2libGUgYnkgNCkgKi8KLSAgICAgICAgaWYgKGUtcTw0KSB7Ci0gICAgICAgICAgICBpZiAoY29uc3VtZWQpCisgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlcG9pbnQgaW4gc3Vycm9nYXRlIGNvZGUgcG9pbnQgcmFuZ2UoMHhkODAwLCAweGUwMDApIjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2ggPD0gbWF4Y2gpIHsKKyAgICAgICAgICAgIGlmIChxID09IGUgfHwgY29uc3VtZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwogICAgICAgICAgICAgZXJybXNnID0gInRydW5jYXRlZCBkYXRhIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpLXN0YXJ0czsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKLSAgICAgICAgICAgIC8qIFRoZSByZW1haW5pbmcgaW5wdXQgY2hhcnMgYXJlIGlnbm9yZWQgaWYgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpIC0gc3RhcnRzOwogICAgICAgICB9Ci0gICAgICAgIGNoID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAocVtpb3JkZXJbMV1dIDw8IDgpIHwgcVtpb3JkZXJbMF1dOwotCi0gICAgICAgIGlmIChjaCA+PSAweDExMDAwMCkKLSAgICAgICAgeworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTEwMDAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnJtc2cgPSAiY29kZXBvaW50IG5vdCBpbiByYW5nZSgweDExMDAwMCkiOwotICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcys0OwotICAgICAgICAgICAgZ290byB1dGYzMkVycm9yOworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgNDsKICAgICAgICAgfQotICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBxICs9IDQ7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgdXRmMzJFcnJvcjoKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorCisgICAgICAgIC8qIFRoZSByZW1haW5pbmcgaW5wdXQgY2hhcnMgYXJlIGlnbm9yZWQgaWYgdGhlIGNhbGxiYWNrCisgICAgICAgICAgIGNob29zZXMgdG8gc2tpcCB0aGUgaW5wdXQgKi8KKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjMyIiwgZXJybXNnLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgKGNvbnN0IGNoYXIgKiopJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsIChjb25zdCBjaGFyICoqKSZxLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAoYnl0ZW9yZGVyKQotICAgICAgICAqYnl0ZW9yZGVyID0gYm87Ci0KICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IChjb25zdCBjaGFyICopcS1zdGFydHM7CiAKLSAgICAvKiBBZGp1c3QgbGVuZ3RoICovCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTExMywxMSArNTEwNywxNSBAQAogICAgIHVuc2lnbmVkIGNoYXIgKnA7CiAgICAgUHlfc3NpemVfdCBuc2l6ZSwgaTsKICAgICAvKiBPZmZzZXRzIGZyb20gcCBmb3Igc3RvcmluZyBieXRlIHBhaXJzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307CiAjZWxzZQogICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKICNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXAgPSBOVUxMOwogCiAjZGVmaW5lIFNUT1JFQ0hBUihDSCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01MTQ5LDcgKzUxNDcsNyBAQAogICAgIGlmIChieXRlb3JkZXIgPT0gMCkKICAgICAgICAgU1RPUkVDSEFSKDB4RkVGRik7CiAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIHJldHVybiB2OwogCiAgICAgaWYgKGJ5dGVvcmRlciA9PSAtMSkgewogICAgICAgICAvKiBmb3JjZSBMRSAqLwpAQCAtNTE1Nyw2ICs1MTU1LDcgQEAKICAgICAgICAgaW9yZGVyWzFdID0gMTsKICAgICAgICAgaW9yZGVyWzJdID0gMjsKICAgICAgICAgaW9yZGVyWzNdID0gMzsKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWxlIjsKICAgICB9CiAgICAgZWxzZSBpZiAoYnl0ZW9yZGVyID09IDEpIHsKICAgICAgICAgLyogZm9yY2UgQkUgKi8KQEAgLTUxNjQsMTMgKzUxNjMsMTAzIEBACiAgICAgICAgIGlvcmRlclsxXSA9IDI7CiAgICAgICAgIGlvcmRlclsyXSA9IDE7CiAgICAgICAgIGlvcmRlclszXSA9IDA7CisgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSI7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyIjsKKworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgICAgIFNUT1JFQ0hBUihQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSk7CisgICAgICAgIHJldHVybiB2OwogICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgU1RPUkVDSEFSKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOykgeworICAgICAgICBQeV9zc2l6ZV90IHJlcHNpemUsIG1vcmV1bml0czsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICBpKys7CisgICAgICAgIGFzc2VydChjaCA8PSBNQVhfVU5JQ09ERSk7CisgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICBTVE9SRUNIQVIoY2gpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICBkb25lOgorICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICBzdHIsICZleGMsIGktMSwgaSwgJmkpOworCisgICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOworICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAzKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgaSAtIDEsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplIC8gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2socmVwKSk7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwKTsKKyAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0lTX0FTQ0lJKHJlcCkpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGZvdXIgYnl0ZXMgYXJlIHJlc2VydmVkIGZvciBlYWNoIHN1cnJvZ2F0ZSAqLworICAgICAgICBpZiAobW9yZXVuaXRzID4gMSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBvdXRwb3MgPSBwIC0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbW9yZWJ5dGVzID0gNCAqIChtb3JldW5pdHMgLSAxKTsKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHYpID4gUFlfU1NJWkVfVF9NQVggLSBtb3JlYnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgUHlCeXRlc19HRVRfU0laRSh2KSArIG1vcmVieXRlcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KSArIG91dHBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKKyAgICAgICAgICAgIHAgKz0gcmVwc2l6ZTsKKyAgICAgICAgfSBlbHNlIC8qIHJlcCBpcyB1bmljb2RlICovIHsKKyAgICAgICAgICAgIGNvbnN0IFB5X1VDUzEgKnJlcGRhdGE7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgICAgICByZXBkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVwKTsKKyAgICAgICAgICAgIHdoaWxlIChyZXBzaXplLS0pIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKnJlcGRhdGErKzsKKyAgICAgICAgICAgICAgICBTVE9SRUNIQVIoY2gpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUHlfQ0xFQVIocmVwKTsKKyAgICB9CisKKyAgICAvKiBDdXQgYmFjayB0byBzaXplIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yLCBmb3IgZXhhbXBsZSwKKyAgICAgICBlbmNvZGluZyBvZiBhIHN0cmluZyBjb250YWluaW5nIGlzb2xhdGVkIHN1cnJvZ2F0ZXMgYW5kIHRoZSAnaWdub3JlJworICAgICAgIGhhbmRsZXIgaXMgdXNlZC4gKi8KKyAgICBuc2l6ZSA9IHAgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgIGlmIChuc2l6ZSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHYpKQorICAgICAgX1B5Qnl0ZXNfUmVzaXplKCZ2LCBuc2l6ZSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gdjsKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXApOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgUHlfWERFQ1JFRih2KTsKKyAgICByZXR1cm4gTlVMTDsKICN1bmRlZiBTVE9SRUNIQVIKIH0KIApAQCAtNTIxNiwxNCArNTMwNSwxNCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSwgKmU7CiAgICAgaW50IGJvID0gMDsgICAgICAgLyogYXNzdW1lIG5hdGl2ZSBvcmRlcmluZyBieSBkZWZhdWx0ICovCiAgICAgaW50IG5hdGl2ZV9vcmRlcmluZzsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKIAogICAgIHEgPSAodW5zaWduZWQgY2hhciAqKXM7CiAgICAgZSA9IHEgKyBzaXplOwpAQCAtNTI1NSw0MCArNTM0NCw0MiBAQAogICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKICAgICB9CiAKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBuYXRpdmVfb3JkZXJpbmcgPSBibyA8PSAwOworICAgIGVuY29kaW5nID0gYm8gPD0gMCA/ICJ1dGYtMTYtbGUiIDogInV0Zi0xNi1iZSI7CiAjZWxzZQogICAgIG5hdGl2ZV9vcmRlcmluZyA9IGJvID49IDA7CisgICAgZW5jb2RpbmcgPSBibyA+PSAwID8gInV0Zi0xNi1iZSIgOiAidXRmLTE2LWxlIjsKICNlbmRpZgogCiAgICAgLyogTm90ZTogc2l6ZSB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nIFVuaWNvZGUKICAgICAgICBjaGFyYWN0ZXIgY291bnQgKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoZSAtIHEgKyAxKSAvIDIsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoZSAtIHEgKyAxKSAvIDI7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOwogCi0gICAgb3V0cG9zID0gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBQeV9VQ1M0IGNoID0gMDsKICAgICAgICAgaWYgKGUgLSBxID49IDIpIHsKLSAgICAgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgICAgICAgICBpbnQga2luZCA9IHdyaXRlci5raW5kOwogICAgICAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQorICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkod3JpdGVyLmJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgIGNoID0gYXNjaWlsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNoID0gdWNzMWxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CiAgICAgICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzIqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKICAgICAgICAgICAgICAgICBjaCA9IHVjczRsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTMyNCwyMyArNTQxNSwyMiBAQAogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgMjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywKICAgICAgICAgICAgICAgICAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICJ1dGYxNiIsIGVycm1zZywKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsCiAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiopJmUsCiAgICAgICAgICAgICAgICAgJnN0YXJ0aW5wb3MsCiAgICAgICAgICAgICAgICAgJmVuZGlucG9zLAogICAgICAgICAgICAgICAgICZleGMsCiAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsCi0gICAgICAgICAgICAgICAgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC01MzQ4LDE2ICs1NDM4LDEyIEBACiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSAoY29uc3QgY2hhciAqKXEtc3RhcnRzOwogCi0gICAgLyogQWRqdXN0IGxlbmd0aCAqLwotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHVuaWNvZGUpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTUzNzMsMTMgKzU0NTksMTcgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCAqdjsKICAgICB1bnNpZ25lZCBzaG9ydCAqb3V0OwotICAgIFB5X3NzaXplX3QgYnl0ZXNpemU7CiAgICAgUHlfc3NpemVfdCBwYWlyczsKLSNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgaW50IG5hdGl2ZV9vcmRlcmluZyA9IGJ5dGVvcmRlciA+PSAwOwogI2Vsc2UKICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyIDw9IDA7CiAjZW5kaWYKKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKKyAgICBQeV9zc2l6ZV90IG5zaXplLCBwb3M7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhzdHIpKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CkBAIC01NDAxLDggKzU0OTEsOCBAQAogICAgIH0KICAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLyAyIC0gcGFpcnMgLSAoYnl0ZW9yZGVyID09IDApKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBieXRlc2l6ZSA9IChsZW4gKyBwYWlycyArIChieXRlb3JkZXIgPT0gMCkpICogMjsKLSAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBieXRlc2l6ZSk7CisgICAgbnNpemUgPSBsZW4gKyBwYWlycyArIChieXRlb3JkZXIgPT0gMCk7CisgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbnNpemUgKiAyKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNTQxNCwyNSArNTUwNCwxMDcgQEAKICAgICBpZiAobGVuID09IDApCiAgICAgICAgIGdvdG8gZG9uZTsKIAotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKLSAgICAgICAgdWNzMWxpYl91dGYxNl9lbmNvZGUob3V0LCAoY29uc3QgUHlfVUNTMSAqKWRhdGEsIGxlbiwgbmF0aXZlX29yZGVyaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6IHsKLSAgICAgICAgdWNzMmxpYl91dGYxNl9lbmNvZGUob3V0LCAoY29uc3QgUHlfVUNTMiAqKWRhdGEsIGxlbiwgbmF0aXZlX29yZGVyaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6IHsKLSAgICAgICAgdWNzNGxpYl91dGYxNl9lbmNvZGUob3V0LCAoY29uc3QgUHlfVUNTNCAqKWRhdGEsIGxlbiwgbmF0aXZlX29yZGVyaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydCgwKTsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTMSAqKWRhdGEsIGxlbiwgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgZ290byBkb25lOwogICAgIH0KIAorICAgIGlmIChieXRlb3JkZXIgPCAwKQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtbGUiOworICAgIGVsc2UgaWYgKGJ5dGVvcmRlciA+IDApCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNi1iZSI7CisgICAgZWxzZQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMTYiOworCisgICAgcG9zID0gMDsKKyAgICB3aGlsZSAocG9zIDwgbGVuKSB7CisgICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZSwgbW9yZXVuaXRzOworCisgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CisgICAgICAgICAgICBwb3MgKz0gdWNzMmxpYl91dGYxNl9lbmNvZGUoKGNvbnN0IFB5X1VDUzIgKilkYXRhICsgcG9zLCBsZW4gLSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKKyAgICAgICAgICAgIHBvcyArPSB1Y3M0bGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTNCAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisgICAgICAgIGlmIChwb3MgPT0gbGVuKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmVwID0gdW5pY29kZV9lbmNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIsCisgICAgICAgICAgICAgICAgc3RyLCAmZXhjLCBwb3MsIHBvcyArIDEsICZwb3MpOworICAgICAgICBpZiAoIXJlcCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgcmVwc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVwKTsKKyAgICAgICAgICAgIGlmIChyZXBzaXplICYgMSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHBvcyAtIDEsIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgLyAyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhyZXApKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXApOworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocmVwKSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHBvcyAtIDEsIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIHR3byBieXRlcyBhcmUgcmVzZXJ2ZWQgZm9yIGVhY2ggc3Vycm9nYXRlICovCisgICAgICAgIGlmIChtb3JldW5pdHMgPiAxKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IG91dCAtICh1bnNpZ25lZCBzaG9ydCopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSAyICogKG1vcmV1bml0cyAtIDEpOworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgeworICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZ2LCBQeUJ5dGVzX0dFVF9TSVpFKHYpICsgbW9yZWJ5dGVzKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG91dCA9ICh1bnNpZ25lZCBzaG9ydCopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpICsgb3V0cG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKG91dCwgUHlCeXRlc19BU19TVFJJTkcocmVwKSwgcmVwc2l6ZSk7CisgICAgICAgICAgICBvdXQgKz0gbW9yZXVuaXRzOworICAgICAgICB9IGVsc2UgLyogcmVwIGlzIHVuaWNvZGUgKi8geworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHJlcCkgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICAgICAgdWNzMWxpYl91dGYxNl9lbmNvZGUoUHlVbmljb2RlXzFCWVRFX0RBVEEocmVwKSwgcmVwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUihyZXApOworICAgIH0KKworICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAorICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnIGhhbmRsZXIKKyAgICBpcyB1c2VkLiAqLworICAgIG5zaXplID0gKHVuc2lnbmVkIGNoYXIqKSBvdXQgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgIGlmIChuc2l6ZSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHYpKQorICAgICAgX1B5Qnl0ZXNfUmVzaXplKCZ2LCBuc2l6ZSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKICAgZG9uZToKICAgICByZXR1cm4gdjsKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXApOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgUHlfWERFQ1JFRih2KTsKKyAgICByZXR1cm4gTlVMTDsKKyN1bmRlZiBTVE9SRUNIQVIKIH0KIAogUHlPYmplY3QgKgpAQCAtNTUyMywyNyArNTY5NSwyNiBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNoYXIqIG1lc3NhZ2U7CiAgICAgUHlfVUNTNCBjaHIgPSAweGZmZmZmZmZmOyAvKiBpbiBjYXNlICdnZXRjb2RlJyBtZXNzZXMgdXAgKi8KICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBsZW4gPSBsZW5ndGhfb2ZfZXNjYXBlZF9hc2NpaV9zdHJpbmcocywgc2l6ZSk7CisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKIAogICAgIC8qIEFmdGVyIGxlbmd0aF9vZl9lc2NhcGVkX2FzY2lpX3N0cmluZygpIHRoZXJlIGFyZSB0d28gYWx0ZXJuYXRpdmVzLAogICAgICAgIGVpdGhlciB0aGUgc3RyaW5nIGlzIHB1cmUgQVNDSUkgd2l0aCBuYW1lZCBlc2NhcGVzIGxpa2UgXG4sIGV0Yy4KICAgICAgICBhbmQgd2UgZGV0ZXJtaW5lZCBpdCdzIGV4YWN0IHNpemUgKGNvbW1vbiBjYXNlKQogICAgICAgIG9yIGl0IGNvbnRhaW5zIFx4LCBcdSwgLi4uIGVzY2FwZSBzZXF1ZW5jZXMuICB0aGVuIHdlIGNyZWF0ZSBhCiAgICAgICAgbGVnYWN5IHdjaGFyIHN0cmluZyBhbmQgcmVzaXplIGl0IGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4gKi8KLSAgICBpZiAobGVuID49IDApIHsKLSAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcobGVuLCAxMjcpOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCh2KSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gbGVuOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogRXNjYXBlZCBzdHJpbmdzIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcKQEAgLTU1NTEsMTUgKzU3MjIsMTEgQEAKICAgICAgICAgICAgbGVuZ3RoIGFmdGVyIGNvbnZlcnNpb24gdG8gdGhlIHRydWUgdmFsdWUuCiAgICAgICAgICAgIChidXQgaWYgdGhlIGVycm9yIGNhbGxiYWNrIHJldHVybnMgYSBsb25nIHJlcGxhY2VtZW50IHN0cmluZwogICAgICAgICAgICB3ZSdsbCBoYXZlIHRvIGFsbG9jYXRlIG1vcmUgc3BhY2UpICovCi0gICAgICAgIHYgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgbGVuID0gc2l6ZTsKKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOwogICAgIH0KIAogICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIGkgPSAwOworICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAgICAgZW5kID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGVuZCkgewpAQCAtNTU2NywxMyArNTczNCwxMSBAQAogICAgICAgICBQeV9VQ1M0IHg7CiAgICAgICAgIGludCBkaWdpdHM7CiAKLSAgICAgICAgLyogVGhlIG9ubHkgY2FzZSBpbiB3aGljaCBpID09IGFzY2lpX2xlbmd0aCBpcyBhIGJhY2tzbGFzaAotICAgICAgICAgICBmb2xsb3dlZCBieSBhIG5ld2xpbmUuICovCi0gICAgICAgIGFzc2VydChpIDw9IGxlbik7Ci0KICAgICAgICAgLyogTm9uLWVzY2FwZSBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZCBhcyBVbmljb2RlIG9yZGluYWxzICovCiAgICAgICAgIGlmICgqcyAhPSAnXFwnKSB7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmaSwgKHVuc2lnbmVkIGNoYXIpICpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqczsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTU1ODUsMTggKzU3NTAsMTQgQEAKICAgICAgICAgaWYgKHMgPiBlbmQpCiAgICAgICAgICAgICBjID0gJ1wwJzsgLyogSW52YWxpZCBhZnRlciBcICovCiAKLSAgICAgICAgLyogVGhlIG9ubHkgY2FzZSBpbiB3aGljaCBpID09IGFzY2lpX2xlbmd0aCBpcyBhIGJhY2tzbGFzaAotICAgICAgICAgICBmb2xsb3dlZCBieSBhIG5ld2xpbmUuICovCi0gICAgICAgIGFzc2VydChpIDwgbGVuIHx8IChpID09IGxlbiAmJiBjID09ICdcbicpKTsKLQogICAgICAgICBzd2l0Y2ggKGMpIHsKIAogICAgICAgICAgICAgLyogXHggZXNjYXBlcyAqLwotI2RlZmluZSBXUklURUNIQVIoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmaSwgY2gpIDwgMCkgICAgXAotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9d2hpbGUoMCkKKyNkZWZpbmUgV1JJVEVDSEFSKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgKGNoKSkgPCAwKSAgICBcCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9IHdoaWxlKDApCiAKICAgICAgICAgY2FzZSAnXG4nOiBicmVhazsKICAgICAgICAgY2FzZSAnXFwnOiBXUklURUNIQVIoJ1xcJyk7IGJyZWFrOwpAQCAtNTcyMCwzNSArNTg4MSwzMiBAQAogCiAgICAgICBlcnJvcjoKICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidW5pY29kZWVzY2FwZSIsIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnYsICZpKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodik7CiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KICN1bmRlZiBXUklURUNIQVIKIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgaSkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIHVjbmhhc2hFcnJvcjoKICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgIFB5RXhjX1VuaWNvZGVFcnJvciwKICAgICAgICAgIlxcTiBlc2NhcGVzIG5vdCBzdXBwb3J0ZWQgKGNhbid0IGxvYWQgdW5pY29kZWRhdGEgbW9kdWxlKSIKICAgICAgICAgKTsKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTU5MDEsMjMgKzYwNTksMjIgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjb25zdCBjaGFyICpiczsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKIAorICAgIGlmIChzaXplID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOworCiAgICAgLyogRXNjYXBlZCBzdHJpbmdzIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcKICAgICAgICBVbmljb2RlIHN0cmluZywgc28gd2Ugc3RhcnQgd2l0aCBzaXplIGhlcmUgYW5kIHRoZW4gcmVkdWNlIHRoZQogICAgICAgIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uIHRvIHRoZSB0cnVlIHZhbHVlLiAoQnV0IGRlY29kaW5nIGVycm9yCiAgICAgICAgaGFuZGxlciBtaWdodCBoYXZlIHRvIHJlc2l6ZSB0aGUgc3RyaW5nKSAqLwotICAgIHYgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKwogICAgIGVuZCA9IHMgKyBzaXplOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKQEAgLTU5MjcsNyArNjA4NCw4IEBACiAKICAgICAgICAgLyogTm9uLWVzY2FwZSBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZCBhcyBVbmljb2RlIG9yZGluYWxzICovCiAgICAgICAgIGlmICgqcyAhPSAnXFwnKSB7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCAodW5zaWduZWQgY2hhcikqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTU5MzksNyArNjA5Nyw4IEBACiAgICAgICAgIGZvciAoO3MgPCBlbmQ7KSB7CiAgICAgICAgICAgICBpZiAoKnMgIT0gJ1xcJykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsICh1bnNpZ25lZCBjaGFyKSpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgocyAtIGJzKSAmIDEpID09IDAgfHwKQEAgLTU5NDcsNyArNjEwNiw3IEBACiAgICAgICAgICAgICAoKnMgIT0gJ3UnICYmICpzICE9ICdVJykpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIG91dHBvcy0tOworICAgICAgICB3cml0ZXIucG9zLS07CiAgICAgICAgIGNvdW50ID0gKnM9PSd1JyA/IDQgOiA4OwogICAgICAgICBzKys7CiAKQEAgLTU5NTYsMTEgKzYxMTUsMTEgQEAKICAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikqczsKICAgICAgICAgICAgIGlmICghUHlfSVNYRElHSVQoYykpIHsKICAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgInJhd3VuaWNvZGVlc2NhcGUiLCAidHJ1bmNhdGVkIFxcdVhYWFgiLAogICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgIGdvdG8gbmV4dEJ5dGU7CiAgICAgICAgICAgICB9CkBAIC01OTczLDI4ICs2MTMyLDI3IEBACiAgICAgICAgICAgICAgICAgeCArPSAxMCArIGMgLSAnQSc7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHggPD0gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHgpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgInJhd3VuaWNvZGVlc2NhcGUiLCAiXFxVeHh4eHh4eHggb3V0IG9mIHJhbmdlIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICBuZXh0Qnl0ZToKICAgICAgICAgOwogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTYwOTQsOCArNjI1Miw3IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY29uc3QgY2hhciAqcmVhc29uOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwpAQCAtNjEwNiwxNSArNjI2MywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgMSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogWFhYIG92ZXJmbG93IGRldGVjdGlvbiBtaXNzaW5nICovCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoKHNpemUrUHlfVU5JQ09ERV9TSVpFLTEpLyBQeV9VTklDT0RFX1NJWkUsIDEyNyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOwotICAgIGVuZCA9IHMgKyBzaXplOworICAgIGlmIChzaXplID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogCisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIGlmIChzaXplIC8gUHlfVU5JQ09ERV9TSVpFID4gUFlfU1NJWkVfVF9NQVggLSAxKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoc2l6ZSArIChQeV9VTklDT0RFX1NJWkUgLSAxKSkgLyBQeV9VTklDT0RFX1NJWkU7CisKKyAgICBlbmQgPSBzICsgc2l6ZTsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICBQeV9VTklDT0RFIHVjaDsKICAgICAgICAgUHlfVUNTNCBjaDsKQEAgLTYxNTYsMjggKzYzMTUsMjYgQEAKICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIGNvbnRpbnVlOwogCiAgIGVycm9yOgogICAgICAgICBzdGFydGlucG9zID0gcyAtIHN0YXJ0czsKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidW5pY29kZV9pbnRlcm5hbCIsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02NTQxLDcgKzY2OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGludCBraW5kOwogICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwpAQCAtNjU1OCw0NiArNjcxNSw0NiBAQAogICAgIGlmIChzaXplID09IDEgJiYgKHVuc2lnbmVkIGNoYXIpc1swXSA8IDEyOCkKICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilzWzBdKTsKIAotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZSA9IHMgKyBzaXplOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKTsKKyAgICBkYXRhID0gd3JpdGVyLmRhdGE7CiAgICAgb3V0cG9zID0gYXNjaWlfZGVjb2RlKHMsIGUsIChQeV9VQ1MxICopZGF0YSk7Ci0gICAgaWYgKG91dHBvcyA9PSBzaXplKQotICAgICAgICByZXR1cm4gdW5pY29kZTsKKyAgICB3cml0ZXIucG9zID0gb3V0cG9zOworICAgIGlmICh3cml0ZXIucG9zID09IHNpemUpCisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAotICAgIHMgKz0gb3V0cG9zOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfMUJZVEVfS0lORDsKKyAgICBzICs9IHdyaXRlci5wb3M7CisgICAga2luZCA9IHdyaXRlci5raW5kOwogICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CiAgICAgICAgIGlmIChjIDwgMTI4KSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgb3V0cG9zKyssIGMpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIHdyaXRlci5wb3MsIGMpOworICAgICAgICAgICAgd3JpdGVyLnBvcysrOwogICAgICAgICAgICAgKytzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgMTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgImFzY2lpIiwgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwotICAgICAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgICAgICAgICAga2luZCA9IHdyaXRlci5raW5kOworICAgICAgICAgICAgZGF0YSA9IHdyaXRlci5kYXRhOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMSkpOwotICAgIHJldHVybiB1bmljb2RlOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02NjI5LDcgKzY3ODYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBGYXN0IHBhdGg6IGlmIGl0IGlzIGFuIEFTQ0lJLW9ubHkgc3RyaW5nLCBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0CiAgICAgICAgZGlyZWN0bHkuIEVsc2UgZGVmZXIgdG8gYWJvdmUgZnVuY3Rpb24gdG8gcmFpc2UgdGhlIGV4Y2VwdGlvbi4gKi8KLSAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHVuaWNvZGUpIDwgMTI4KQorICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKSk7CiAgICAgcmV0dXJuIHVuaWNvZGVfZW5jb2RlX3VjczEodW5pY29kZSwgZXJyb3JzLCAxMjgpOwpAQCAtNjcwNyw4ICs2ODY0LDggQEAKICAqIERlY29kZSBhIGJ5dGUgc3RyaW5nIGZyb20gYSBXaW5kb3dzIGNvZGUgcGFnZSBpbnRvIHVuaWNvZGUgb2JqZWN0IGluIHN0cmljdAogICogbW9kZS4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgcmV0dXJucyAtMiBvbiBkZWNvZGUgZXJyb3IsIG9yIHJhaXNlIGEKLSAqIFdpbmRvd3NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KKyAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGRlY29kZSBlcnJvciwgb3IgcmFpc2UgYW4KKyAqIE9TRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQKIGRlY29kZV9jb2RlX3BhZ2Vfc3RyaWN0KFVJTlQgY29kZV9wYWdlLApAQCAtNjc1OSw3ICs2OTE2LDcgQEAKICAqIERlY29kZSBhIGJ5dGUgc3RyaW5nIGZyb20gYSBjb2RlIHBhZ2UgaW50byB1bmljb2RlIG9iamVjdCB3aXRoIGFuIGVycm9yCiAgKiBoYW5kbGVyLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCBvciByYWlzZSBhIFdpbmRvd3NFcnJvciBvcgorICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGFuIE9TRXJyb3Igb3IKICAqIFVuaWNvZGVEZWNvZGVFcnJvciBleGNlcHRpb24gYW5kIHJldHVybnMgLTEgb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTY3NzgsNyArNjkzNSw4IEBACiAgICAgLyogZWFjaCBzdGVwIGNhbm5vdCBkZWNvZGUgbW9yZSB0aGFuIDEgY2hhcmFjdGVyLCBidXQgYSBjaGFyYWN0ZXIgY2FuIGJlCiAgICAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdXJyb2dhdGUgcGFpciAqLwogICAgIHdjaGFyX3QgYnVmZmVyWzJdLCAqc3RhcnRvdXQsICpvdXQ7Ci0gICAgaW50IGluc2l6ZSwgb3V0c2l6ZTsKKyAgICBpbnQgaW5zaXplOworICAgIFB5X3NzaXplX3Qgb3V0c2l6ZTsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKICAgICBQeU9iamVjdCAqZW5jb2Rpbmdfb2JqID0gTlVMTDsKQEAgLTY4NTgsNyArNzAxNiw3IEBACiAgICAgICAgICAgICBzdGFydGlucG9zID0gaW4gLSBzdGFydGluOwogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgMTsKICAgICAgICAgICAgIG91dHBvcyA9IG91dCAtIFB5VW5pY29kZV9BU19VTklDT0RFKCp2KTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93Y2hhcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgcmVhc29uLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRpbiwgJmVuZGluLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmaW4sCkBAIC03MDE0LDcgKzcxNzIsNyBAQAogICogbW9kZS4KICAqCiAgKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgcmV0dXJucyAtMiBvbiBlbmNvZGUgZXJyb3IsIG9yIHJhaXNlCi0gKiBhIFdpbmRvd3NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KKyAqIGFuIE9TRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQKIGVuY29kZV9jb2RlX3BhZ2Vfc3RyaWN0KFVJTlQgY29kZV9wYWdlLCBQeU9iamVjdCAqKm91dGJ5dGVzLApAQCAtNzA0OCwxMCArNzIwNiwxMSBAQAogICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBhc3NlcnQoc2l6ZSA8PSBJTlRfTUFYKTsKIAogICAgIC8qIEZpcnN0IGdldCB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0ICovCiAgICAgb3V0c2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZV9wYWdlLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIChpbnQpc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpOwogICAgIGlmIChvdXRzaXplIDw9IDApCkBAIC03MDg4LDcgKzcyNDcsNyBAQAogCiAgICAgLyogRG8gdGhlIGNvbnZlcnNpb24gKi8KICAgICBvdXRzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlX3BhZ2UsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgb3V0c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBwdXNlZERlZmF1bHRDaGFyKTsKICAgICBQeV9DTEVBUihzdWJzdHJpbmcpOwpAQCAtNzExMCw3ICs3MjY5LDcgQEAKICAqIEVuY29kZSBhIFVuaWNvZGUgc3RyaW5nIHRvIGEgV2luZG93cyBjb2RlIHBhZ2UgaW50byBhIGJ5dGUgc3RyaW5nIHVzaW5nIGEKICAqIGVycm9yIGhhbmRsZXIuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGEgV2luZG93c0Vycm9yIGFuZCByZXR1cm5zCisgKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYW4gT1NFcnJvciBhbmQgcmV0dXJucwogICogLTEgb24gb3RoZXIgZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTcxOTYsOSArNzM1NSw4IEBACiAgICAgICAgICAgICBjaGFyc2l6ZSA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaCAtPSAweDEwMDAwOwotICAgICAgICAgICAgY2hhcnNbMF0gPSAweGQ4MDAgKyAoY2ggPj4gMTApOwotICAgICAgICAgICAgY2hhcnNbMV0gPSAweGRjMDAgKyAoY2ggJiAweDNmZik7CisgICAgICAgICAgICBjaGFyc1swXSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOworICAgICAgICAgICAgY2hhcnNbMV0gPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgY2hhcnNpemUgPSAyOwogICAgICAgICB9CiAKQEAgLTczOTEsMjIwICs3NTQ5LDI1OCBAQAogCiAvKiAtLS0gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGludAorY2hhcm1hcF9kZWNvZGVfc3RyaW5nKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKKyAgICBjb25zdCBjaGFyICplOworICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvcywgZW5kaW5wb3M7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEwsICpleGMgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbWFwbGVuOworICAgIGVudW0gUHlVbmljb2RlX0tpbmQgbWFwa2luZDsKKyAgICB2b2lkICptYXBkYXRhOworICAgIFB5X1VDUzQgeDsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShtYXBwaW5nKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgobWFwcGluZyk7CisgICAgbWFwZGF0YSA9IFB5VW5pY29kZV9EQVRBKG1hcHBpbmcpOworICAgIG1hcGtpbmQgPSBQeVVuaWNvZGVfS0lORChtYXBwaW5nKTsKKworICAgIGUgPSBzICsgc2l6ZTsKKworICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKKyAgICAgICAgLyogZmFzdC1wYXRoIGZvciBjcDAzNywgY3A1MDAgYW5kIGlzbzg4NTlfMSBlbmNvZGluZ3MuIGlzbzg4NTlfMQorICAgICAgICAgKiBpcyBkaXNhYmxlZCBpbiBlbmNvZGluZyBhbGlhc2VzLCBsYXRpbjEgaXMgcHJlZmVycmVkIGJlY2F1c2UKKyAgICAgICAgICogaXRzIGltcGxlbWVudGF0aW9uIGlzIGZhc3Rlci4gKi8KKyAgICAgICAgUHlfVUNTMSAqbWFwZGF0YV91Y3MxID0gKFB5X1VDUzEgKiltYXBkYXRhOworICAgICAgICBQeV9VQ1MxICpvdXRkYXRhID0gKFB5X1VDUzEgKil3cml0ZXItPmRhdGE7CisgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKworICAgICAgICBhc3NlcnQgKHdyaXRlci0+a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczFbY2hdOworICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIDB4ZmYpID09IC0xKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICAgICAgICAgICAgICBvdXRkYXRhID0gKFB5X1VDUzEgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICB3cml0ZXItPnBvcysrOworICAgICAgICAgICAgKytzOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICBpZiAobWFwa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCAmJiBtYXBsZW4gPj0gMjU2KSB7CisgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG91dGtpbmQgPSB3cml0ZXItPmtpbmQ7CisgICAgICAgICAgICBQeV9VQ1MyICptYXBkYXRhX3VjczIgPSAoUHlfVUNTMiAqKW1hcGRhdGE7CisgICAgICAgICAgICBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgKm91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczJbY2hdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICAgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICAgICAgICAgICsrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMiAqb3V0ZGF0YSA9IChQeV9VQ1MyICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MyW2NoXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgICAgICAgICB3cml0ZXItPnBvcysrOworICAgICAgICAgICAgICAgICAgICArK3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNoID0gKnM7CisKKyAgICAgICAgaWYgKGNoIDwgbWFwbGVuKQorICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKG1hcGtpbmQsIG1hcGRhdGEsIGNoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeCA9IDB4ZmZmZTsgLyogaW52YWxpZCB2YWx1ZSAqLworRXJyb3I6CisgICAgICAgIGlmICh4ID09IDB4ZmZmZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCisgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyKSkgeworICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgeCkgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICArK3M7CisgICAgfQorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIDA7CisKK29uRXJyb3I6CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2NoYXJtYXBfZGVjb2RlX21hcHBpbmcoY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKKyAgICBjb25zdCBjaGFyICplOworICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvcywgZW5kaW5wb3M7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEwsICpleGMgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgY2g7CisgICAgUHlPYmplY3QgKmtleSwgKml0ZW0gPSBOVUxMOworCisgICAgZSA9IHMgKyBzaXplOworCisgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgIGNoID0gKnM7CisKKyAgICAgICAgLyogR2V0IG1hcHBpbmcgKGNoYXIgb3JkaW5hbCAtPiBpbnRlZ2VyLCBVbmljb2RlIGNoYXIgb3IgTm9uZSkgKi8KKyAgICAgICAga2V5ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWNoKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworCisgICAgICAgIGl0ZW0gPSBQeU9iamVjdF9HZXRJdGVtKG1hcHBpbmcsIGtleSk7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Mb29rdXBFcnJvcikpIHsKKyAgICAgICAgICAgICAgICAvKiBObyBtYXBwaW5nIGZvdW5kIG1lYW5zOiBtYXBwaW5nIGlzIHVuZGVmaW5lZC4gKi8KKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLyogQXBwbHkgbWFwcGluZyAqLworICAgICAgICBpZiAoaXRlbSA9PSBQeV9Ob25lKQorICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUxvbmdfQVNfTE9ORyhpdGVtKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCBiZSBpbiByYW5nZSgweCVseCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylNQVhfVU5JQ09ERSArIDEpOworICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgdmFsdWUpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGl0ZW0pID09IC0xKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCB2YWx1ZSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoaXRlbSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgdmFsdWUpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgaXRlbSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIHdyb25nIHJldHVybiB2YWx1ZSAqLworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCByZXR1cm4gaW50ZWdlciwgTm9uZSBvciBzdHIiKTsKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihpdGVtKTsKKyAgICAgICAgKytzOworICAgICAgICBjb250aW51ZTsKKworVW5kZWZpbmVkOgorICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLworICAgICAgICBQeV9DTEVBUihpdGVtKTsKKyAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOworICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAorICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKKyAgICAgICAgICAgICAgICB3cml0ZXIpKSB7CisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gMDsKKworb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKGl0ZW0pOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIC0xOworfQorCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcChjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7Ci0gICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7Ci0gICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBjb25zdCBjaGFyICplOwotICAgIFB5T2JqZWN0ICp2OwotICAgIFB5X3NzaXplX3QgZXh0cmFjaGFycyA9IDA7Ci0gICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICAvKiBEZWZhdWx0IHRvIExhdGluLTEgKi8KICAgICBpZiAobWFwcGluZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxhdGluMShzLCBzaXplLCBlcnJvcnMpOwogCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKLSAgICBlID0gcyArIHNpemU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCiAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KG1hcHBpbmcpKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgbWFwbGVuOwotICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG1hcGtpbmQ7Ci0gICAgICAgIHZvaWQgKm1hcGRhdGE7Ci0gICAgICAgIFB5X1VDUzQgeDsKLQotICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG1hcHBpbmcpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgbWFwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgobWFwcGluZyk7Ci0gICAgICAgIG1hcGRhdGEgPSBQeVVuaWNvZGVfREFUQShtYXBwaW5nKTsKLSAgICAgICAgbWFwa2luZCA9IFB5VW5pY29kZV9LSU5EKG1hcHBpbmcpOwotICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0gICAgICAgICAgICBpZiAobWFwa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCAmJiBtYXBsZW4gPj0gMjU2KSB7Ci0gICAgICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBvdXRraW5kID0gUHlVbmljb2RlX0tJTkQodik7Ci0gICAgICAgICAgICAgICAgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOwotICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKFB5VW5pY29kZV8yQllURV9LSU5ELCBtYXBkYXRhLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfMUJZVEVfS0lORCwgb3V0ZGF0YSwgb3V0cG9zKyssIHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGRhdGEgPSBQeVVuaWNvZGVfREFUQSh2KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDB4RkZGRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV8yQllURV9LSU5ELCBvdXRkYXRhLCBvdXRwb3MrKywgeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ggPSAqczsKLQotICAgICAgICAgICAgaWYgKGNoIDwgbWFwbGVuKQotICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChtYXBraW5kLCBtYXBkYXRhLCBjaCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeCA9IDB4ZmZmZTsgLyogaW52YWxpZCB2YWx1ZSAqLwotRXJyb3I6Ci0gICAgICAgICAgICBpZiAoeCA9PSAweGZmZmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KLSAgICAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHgpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICArK3M7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJtYXBfZGVjb2RlX3N0cmluZyhzLCBzaXplLCBtYXBwaW5nLCBlcnJvcnMsICZ3cml0ZXIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICpzOwotICAgICAgICAgICAgUHlPYmplY3QgKncsICp4OwotCi0gICAgICAgICAgICAvKiBHZXQgbWFwcGluZyAoY2hhciBvcmRpbmFsIC0+IGludGVnZXIsIFVuaWNvZGUgY2hhciBvciBOb25lKSAqLwotICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyljaCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKG1hcHBpbmcsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0xvb2t1cEVycm9yKSkgewotICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXBwaW5nIGZvdW5kIG1lYW5zOiBtYXBwaW5nIGlzIHVuZGVmaW5lZC4gKi8KLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogQXBwbHkgbWFwcGluZyAqLwotICAgICAgICAgICAgaWYgKHggPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soeCkpIHsKLSAgICAgICAgICAgICAgICBsb25nIHZhbHVlID0gUHlMb25nX0FTX0xPTkcoeCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCBiZSBpbiByYW5nZSgweCVseCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpTUFYX1VOSUNPREUgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHZhbHVlKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHgpKSB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCB0YXJnZXRzaXplOwotCi0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh4KSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGFyZ2V0c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldHNpemUgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiAxLTEgbWFwcGluZyAqLwotICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHZhbHVlID0gUHlVbmljb2RlX1JFQURfQ0hBUih4LCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0c2l6ZSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogMS1uIG1hcHBpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHNpemUgPiBleHRyYWNoYXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNpemUgZmlyc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbmVlZGVkID0gKHRhcmdldHNpemUgLSBleHRyYWNoYXJzKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0c2l6ZSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY2hhcnMgKz0gbmVlZGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYIG92ZXJmbG93IGRldGVjdGlvbiBtaXNzaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodikgKyBuZWVkZWQpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3dpZGVuKCZ2LCBvdXRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh4KSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvcHlDaGFyYWN0ZXJzKHYsIG91dHBvcywgeCwgMCwgdGFyZ2V0c2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHBvcyArPSB0YXJnZXRzaXplOwotICAgICAgICAgICAgICAgICAgICBleHRyYWNoYXJzIC09IHRhcmdldHNpemU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIDEtMCBtYXBwaW5nOiBza2lwIHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIHdyb25nIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IHJldHVybiBpbnRlZ2VyLCBOb25lIG9yIHN0ciIpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICBjb250aW51ZTsKLVVuZGVmaW5lZDoKLSAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCi0gICAgICAgICAgICBQeV9YREVDUkVGKHgpOwotICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAotICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkgewotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAoY2hhcm1hcF9kZWNvZGVfbWFwcGluZyhzLCBzaXplLCBtYXBwaW5nLCBlcnJvcnMsICZ3cml0ZXIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKLSAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKLSAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTgxMTgsMTAgKzgzMTQsMTQgQEAKICAgICAgKiAtMT1ub3QgaW5pdGlhbGl6ZWQsIDA9dW5rbm93biwgMT1zdHJpY3QsIDI9cmVwbGFjZSwKICAgICAgKiAzPWlnbm9yZSwgND14bWxjaGFycmVmcmVwbGFjZSAqLwogICAgIGludCBrbm93bl9lcnJvckhhbmRsZXIgPSAtMTsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1bmljb2RlKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CiAKICAgICAvKiBEZWZhdWx0IHRvIExhdGluLTEgKi8KICAgICBpZiAobWFwcGluZyA9PSBOVUxMKQpAQCAtODEzNiw3ICs4MzM2LDcgQEAKICAgICAgICAgcmV0dXJuIHJlczsKIAogICAgIHdoaWxlIChpbnBvczxzaXplKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIGlucG9zKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGlucG9zKTsKICAgICAgICAgLyogdHJ5IHRvIGVuY29kZSBpdCAqLwogICAgICAgICBjaGFybWFwZW5jb2RlX3Jlc3VsdCB4ID0gY2hhcm1hcGVuY29kZV9vdXRwdXQoY2gsIG1hcHBpbmcsICZyZXMsICZyZXNwb3MpOwogICAgICAgICBpZiAoeD09ZW5jX0VYQ0VQVElPTikgLyogZXJyb3IgKi8KQEAgLTgyMjIsMTkgKzg0MjIsNiBAQAogICAgIH0KIH0KIAotLyogcmFpc2VzIGEgVW5pY29kZVRyYW5zbGF0ZUVycm9yICovCi1zdGF0aWMgdm9pZAotcmFpc2VfdHJhbnNsYXRlX2V4Y2VwdGlvbihQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnVuaWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIFB5X3NzaXplX3QgZW5kcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24pCi17Ci0gICAgbWFrZV90cmFuc2xhdGVfZXhjZXB0aW9uKGV4Y2VwdGlvbk9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSwgc3RhcnRwb3MsIGVuZHBvcywgcmVhc29uKTsKLSAgICBpZiAoKmV4Y2VwdGlvbk9iamVjdCAhPSBOVUxMKQotICAgICAgICBQeUNvZGVjX1N0cmljdEVycm9ycygqZXhjZXB0aW9uT2JqZWN0KTsKLX0KLQogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgogICAgYnVpbGQgYXJndW1lbnRzLCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY2hlY2sgdGhlIGFyZ3VtZW50cywKICAgIHB1dCB0aGUgcmVzdWx0IGludG8gbmV3cG9zIGFuZCByZXR1cm4gdGhlIHJlcGxhY2VtZW50IHN0cmluZywgd2hpY2gKQEAgLTg1MTAsOCArODY5NywxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3dpdGNoIChrbm93bl9lcnJvckhhbmRsZXIpIHsKICAgICAgICAgICAgIGNhc2UgMTogLyogc3RyaWN0ICovCi0gICAgICAgICAgICAgICAgcmFpc2VfdHJhbnNsYXRlX2V4Y2VwdGlvbigmZXhjLCBpbnB1dCwgY29sbHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVuZCwgcmVhc29uKTsKKyAgICAgICAgICAgICAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oJmV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGNvbGxzdGFydCwgY29sbGVuZCwgcmVhc29uKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhjICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKGV4Yyk7CiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY2FzZSAyOiAvKiByZXBsYWNlICovCiAgICAgICAgICAgICAgICAgLyogTm8gbmVlZCB0byBjaGVjayBmb3Igc3BhY2UsIHRoaXMgaXMgYSAxOjEgcmVwbGFjZW1lbnQgKi8KQEAgLTkxMDMsNyArOTI5Miw3IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8CiAgICAgICAgIFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN1YnN0cmluZykgPT0gMCkKICAgICAgICAgcmV0dXJuIDE7CkBAIC05MTQxLDcgKzkzMzAsNiBAQAogICAgICAgICAgICAgLyogV2UgZG8gbm90IG5lZWQgdG8gY29tcGFyZSAwIGFuZCBsZW4oc3Vic3RyaW5nKS0xIGJlY2F1c2UKICAgICAgICAgICAgICAgIHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUgZW5zdXJlZCBhbHJlYWR5IHRoYXQgdGhleSBhcmUgZXF1YWwKICAgICAgICAgICAgICAgIHdoZW4gd2UgZW5kIHVwIGhlcmUuICovCi0gICAgICAgICAgICAvKiBUT0RPOiBob25vciBkaXJlY3Rpb24gYW5kIGRvIGEgZm9yd2FyZCBvciBiYWNrd2FyZHMgc2VhcmNoICovCiAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgZW5kX3N1YjsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmRfc2VsZiwgZGF0YV9zZWxmLCBvZmZzZXQgKyBpKSAhPQogICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kX3N1YiwgZGF0YV9zdWIsIGkpKQpAQCAtOTYwMyw0MSArOTc5MSw0OSBAQAogICAgICAgICAgICAgc2VwX2RhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZXApOwogICAgIH0KICNlbmRpZgotICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOwotICAgICAgICBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCi0gICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworICAgIGlmICh1c2VfbWVtY3B5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBQeV9NRU1DUFkocmVzX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kICogc2VwbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogc2VwbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7Ci0gICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOwotICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworCisgICAgICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShpdGVtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19kYXRhICs9IGtpbmQgKiBpdGVtbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMCwgcmVzX29mZnNldCA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIHNlcCwgMCwgc2VwbGVuKTsKKyAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IHNlcGxlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgaXRlbSwgMCwgaXRlbWxlbik7CiAgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBpdGVtbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGlmICh1c2VfbWVtY3B5KQotICAgICAgICBhc3NlcnQocmVzX2RhdGEgPT0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBraW5kICogUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7Ci0gICAgZWxzZQogICAgICAgICBhc3NlcnQocmVzX29mZnNldCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CiAKICAgICBQeV9ERUNSRUYoZnNlcSk7CiAgICAgUHlfWERFQ1JFRihzZXApOwpAQCAtMTAwMjksNiArMTAyMjUsMzEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK3JlcGxhY2VfMWNoYXJfaW5wbGFjZShQeU9iamVjdCAqdSwgUHlfc3NpemVfdCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOworICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1KTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1MxICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICB1Y3MybGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMiAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgIHVjczRsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1M0ICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXBsYWNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyMSwKICAgICAgICAgUHlPYmplY3QgKnN0cjIsIFB5X3NzaXplX3QgbWF4Y291bnQpCkBAIC0xMDA0NSw3ICsxMDI2Niw3IEBACiAgICAgUHlfc3NpemVfdCBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CiAgICAgUHlfc3NpemVfdCBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMik7CiAgICAgaW50IG1heXNocmluazsKLSAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMjsKKyAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMSwgbWF4Y2hhcl9zdHIyOwogCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKQEAgLTEwMDU0LDE1ICsxMDI3NSwxNiBAQAogCiAgICAgaWYgKHN0cjEgPT0gc3RyMikKICAgICAgICAgZ290byBub3RoaW5nOwotICAgIGlmIChza2luZCA8IGtpbmQxKQotICAgICAgICAvKiBzdWJzdHJpbmcgdG9vIHdpZGUgdG8gYmUgcHJlc2VudCAqLwotICAgICAgICBnb3RvIG5vdGhpbmc7CiAKICAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHNlbGYpOworICAgIG1heGNoYXJfc3RyMSA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIxKTsKKyAgICBpZiAobWF4Y2hhciA8IG1heGNoYXJfc3RyMSkKKyAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KKyAgICAgICAgZ290byBub3RoaW5nOwogICAgIG1heGNoYXJfc3RyMiA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIyKTsKICAgICAvKiBSZXBsYWNpbmcgc3RyMSB3aXRoIHN0cjIgbWF5IGNhdXNlIGEgbWF4Y2hhciByZWR1Y3Rpb24gaW4gdGhlCiAgICAgICAgcmVzdWx0IHN0cmluZy4gKi8KLSAgICBtYXlzaHJpbmsgPSAobWF4Y2hhcl9zdHIyIDwgbWF4Y2hhcik7CisgICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXJfc3RyMSkgJiYgKG1heGNoYXIgPT0gbWF4Y2hhcl9zdHIxKTsKICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIG1heGNoYXJfc3RyMik7CiAKICAgICBpZiAobGVuMSA9PSBsZW4yKSB7CkBAIC0xMDA3MiwzNSArMTAyOTQsMTkgQEAKICAgICAgICAgaWYgKGxlbjEgPT0gMSkgewogICAgICAgICAgICAgLyogcmVwbGFjZSBjaGFyYWN0ZXJzICovCiAgICAgICAgICAgICBQeV9VQ1M0IHUxLCB1MjsKLSAgICAgICAgICAgIGludCBya2luZDsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIHBvczsKLSAgICAgICAgICAgIGNoYXIgKnNyYzsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgICAgICAgICB1MSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyMSwgMCk7Ci0gICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBQeVVuaWNvZGVfS0lORChzZWxmKSwgc2xlbiwgdTEsIDEpOworICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRChraW5kMSwgYnVmMSwgMCk7CisgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBza2luZCwgc2xlbiwgdTEsIDEpOwogICAgICAgICAgICAgaWYgKHBvcyA8IDApCiAgICAgICAgICAgICAgICAgZ290byBub3RoaW5nOwotICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjIsIDApOworICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgYnVmMiwgMCk7CiAgICAgICAgICAgICB1ID0gUHlVbmljb2RlX05ldyhzbGVuLCBtYXhjaGFyKTsKICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnModSwgMCwgc2VsZiwgMCwgc2xlbik7Ci0gICAgICAgICAgICBya2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOwogCi0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUocmtpbmQsIFB5VW5pY29kZV9EQVRBKHUpLCBwb3MsIHUyKTsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgIHNyYyA9IHNidWY7Ci0gICAgICAgICAgICB3aGlsZSAoLS1tYXhjb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICBzcmMgKz0gcG9zICogUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgICAgICAgICAgICAgc2xlbiAtPSBwb3M7Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gcG9zOwotICAgICAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNyYywgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgaW5kZXggKyBwb3MsIHUyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOworICAgICAgICAgICAgcmVwbGFjZV8xY2hhcl9pbnBsYWNlKHUsIHBvcywgdTEsIHUyLCBtYXhjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQgcmtpbmQgPSBza2luZDsKQEAgLTEwNDEyLDkgKzEwNjE4LDI0IEBACiBzdGF0aWMgaW50CiB1bmljb2RlX2NvbXBhcmUoUHlPYmplY3QgKnN0cjEsIFB5T2JqZWN0ICpzdHIyKQogeworI2RlZmluZSBDT01QQVJFKFRZUEUxLCBUWVBFMikgXAorICAgIGRvIHsgXAorICAgICAgICBUWVBFMSogcDEgPSAoVFlQRTEgKilkYXRhMTsgXAorICAgICAgICBUWVBFMiogcDIgPSAoVFlQRTIgKilkYXRhMjsgXAorICAgICAgICBUWVBFMSogZW5kID0gcDEgKyBsZW47IFwKKyAgICAgICAgUHlfVUNTNCBjMSwgYzI7IFwKKyAgICAgICAgZm9yICg7IHAxICE9IGVuZDsgcDErKywgcDIrKykgeyBcCisgICAgICAgICAgICBjMSA9ICpwMTsgXAorICAgICAgICAgICAgYzIgPSAqcDI7IFwKKyAgICAgICAgICAgIGlmIChjMSAhPSBjMikgXAorICAgICAgICAgICAgICAgIHJldHVybiAoYzEgPCBjMikgPyAtMSA6IDE7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisgICAgd2hpbGUgKDApCisKICAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmRhdGExLCAqZGF0YTI7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOworICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgbGVuOwogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN0cjIpOwpAQCAtMTA0MjIsMTkgKzEwNjQzLDExNiBAQAogICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKKyAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMSAmJiBpIDwgbGVuMjsgKytpKSB7Ci0gICAgICAgIFB5X1VDUzQgYzEsIGMyOwotICAgICAgICBjMSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBkYXRhMSwgaSk7Ci0gICAgICAgIGMyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGRhdGEyLCBpKTsKLQotICAgICAgICBpZiAoYzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOworICAgIHN3aXRjaChraW5kMSkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIG1lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICB7CisjaWYgZGVmaW5lZChIQVZFX1dNRU1DTVApICYmIFNJWkVPRl9XQ0hBUl9UID09IDQKKyAgICAgICAgICAgIGludCBjbXAgPSB3bWVtY21wKCh3Y2hhcl90ICopZGF0YTEsICh3Y2hhcl90ICopZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIHdtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzQpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIChsZW4xIDwgbGVuMikgPyAtMSA6IChsZW4xICE9IGxlbjIpOworICAgIGlmIChsZW4xID09IGxlbjIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4xIDwgbGVuMikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CisKKyN1bmRlZiBDT01QQVJFCiB9CiAKK1B5X0xPQ0FMKGludCkKK3VuaWNvZGVfY29tcGFyZV9lcShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCit7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgY21wOworCisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpICE9IGxlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cjEpOworICAgIGlmIChQeVVuaWNvZGVfS0lORChzdHIyKSAhPSBraW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkYXRhMSA9IFB5VW5pY29kZV9EQVRBKHN0cjEpOworICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CisKKyAgICBjbXAgPSBtZW1jbXAoZGF0YTEsIGRhdGEyLCBsZW4gKiBraW5kKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKworCiBpbnQKIFB5VW5pY29kZV9Db21wYXJlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCiB7CkBAIC0xMDQ0Miw2ICsxMDc2MCwxMSBAQAogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8CiAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybiAwOworCiAgICAgICAgIHJldHVybiB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtMTA0NTIsMjkgKzEwNzc1LDU5IEBACiB9CiAKIGludAorX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKFB5T2JqZWN0ICpsZWZ0LCBfUHlfSWRlbnRpZmllciAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnJpZ2h0X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKHJpZ2h0KTsgICAvKiBib3Jyb3dlZCAqLworICAgIGlmIChyaWdodF9zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeVVuaWNvZGVfQ29tcGFyZShsZWZ0LCByaWdodF9zdHIpOworfQorCitpbnQKIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0KiB1bmksIGNvbnN0IGNoYXIqIHN0cikKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKICAgICBQeV9VQ1M0IGNocjsKIAogICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKHVuaSkpOwogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmkpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOwotICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLwotICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCi0gICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIChjaHIgPCAodW5zaWduZWQgY2hhcikoc3RyW2ldKSkgPyAtMSA6IDE7Ci0gICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCi0gICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKSAhPSBpIHx8IGNocikKLSAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KLSAgICBpZiAoc3RyW2ldKQotICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KLSAgICByZXR1cm4gMDsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICBjb25zdCB2b2lkICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pKTsKKyAgICAgICAgc2l6ZV90IGxlbjEgPSAoc2l6ZV90KVB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSk7CisgICAgICAgIHNpemVfdCBsZW4sIGxlbjIgPSBzdHJsZW4oc3RyKTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CisgICAgICAgIGNtcCA9IG1lbWNtcChkYXRhLCBzdHIsIGxlbik7CisgICAgICAgIGlmIChjbXAgIT0gMCkgeworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChsZW4xID4gbGVuMikKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCisgICAgICAgIGlmIChsZW4yID4gbGVuMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOworICAgICAgICAvKiBDb21wYXJlIFVuaWNvZGUgc3RyaW5nIGFuZCBzb3VyY2UgY2hhcmFjdGVyIHNldCBzdHJpbmcgKi8KKyAgICAgICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKKyAgICAgICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAoY2hyIDwgKHVuc2lnbmVkIGNoYXIpKHN0cltpXSkpID8gLTEgOiAxOworICAgICAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKKyAgICAgICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KKyAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSkgIT0gaSB8fCBjaHIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAoc3RyW2ldKQorICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAogCkBAIC0xMDQ4NSwzNiArMTA4MzgsNDMgQEAKIFB5VW5pY29kZV9SaWNoQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0LCBpbnQgb3ApCiB7CiAgICAgaW50IHJlc3VsdDsKKyAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkgewotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhsZWZ0KSB8fCAhUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkKKyAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAorICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICAgICAgdiA9IFB5X1RydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeV9ORToKKyAgICAgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgY2FzZSBQeV9HVDoKKyAgICAgICAgICAgIHYgPSBQeV9GYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgobGVmdCkgIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmlnaHQpIHx8Ci0gICAgICAgICAgICBQeVVuaWNvZGVfS0lORChsZWZ0KSAhPSBQeVVuaWNvZGVfS0lORChyaWdodCkpIHsKLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IFB5X05FKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKKyAgICB9CisgICAgZWxzZSBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlX2VxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmVzdWx0IF49IChvcCA9PSBQeV9ORSk7CisgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAKICAgICAgICAgLyogQ29udmVydCB0aGUgcmV0dXJuIHZhbHVlIHRvIGEgQm9vbGVhbiAqLwogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA9PSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB5X05FOgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgIT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQeV9MRToKICAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0IDw9IDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDUzMSwxOCArMTA4OTEsMTYgQEAKICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIHJldHVybiB2OwogICAgIH0KLQotICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICBQeV9JTkNSRUYodik7CisgICAgcmV0dXJuIHY7CiB9CiAKIGludAogUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQogewogICAgIFB5T2JqZWN0ICpzdHIsICpzdWI7Ci0gICAgaW50IGtpbmQxLCBraW5kMiwga2luZDsKKyAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmJ1ZjEsICpidWYyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBpbnQgcmVzdWx0OwpAQCAtMTA1NjEsMjMgKzEwOTE5LDE4IEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3ViKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYoc3ViKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgfQogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3ViKTsKLSAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpIHsKLSAgICAgICAgaWYgKGtpbmQyID4ga2luZCkgeworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBpZiAoa2luZDIgPiBraW5kMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQpOworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kMSk7CiAgICAgfQogICAgIGlmICghYnVmMikgewogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKQEAgLTEwNTg3LDcgKzEwOTQwLDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3ViKTsKIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICByZXN1bHQgPSB1Y3MxbGliX2ZpbmQoYnVmMSwgbGVuMSwgYnVmMiwgbGVuMiwgMCkgIT0gLTE7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA2MDUsNyArMTA5NTgsNyBAQAogICAgIFB5X0RFQ1JFRihzdHIpOwogICAgIFB5X0RFQ1JFRihzdWIpOwogCi0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEwNjgxLDcgKzExMDM0LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBsZWZ0ID0gKnBfbGVmdDsKLSAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSkgeworICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTAorICAgICAgICB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTA3MjEsMTUgKzExMDc1LDkgQEAKICAgICAgICAgJiYgIShQeVVuaWNvZGVfSVNfQVNDSUkobGVmdCkgJiYgIVB5VW5pY29kZV9JU19BU0NJSShyaWdodCkpKQogICAgIHsKICAgICAgICAgLyogYXBwZW5kIGlucGxhY2UgKi8KLSAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkgewotICAgICAgICAgICAgLyogWFhYIGlmIF9QeVVuaWNvZGVfUmVzaXplKCkgZmFpbHMsICdsZWZ0JyBoYXMgYmVlbgotICAgICAgICAgICAgICogZGVhbGxvY2F0ZWQgc28gaXQgY2Fubm90IGJlIHB1dCBiYWNrIGludG8KLSAgICAgICAgICAgICAqICd2YXJpYWJsZScuICBUaGUgTWVtb3J5RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vIHZhbHVlIGluICd2YXJpYWJsZScsIHdoaWNoIG1pZ2h0ICh2ZXJ5Ci0gICAgICAgICAgICAgKiByZW1vdGVseSkgYmUgYSBjYXVzZSBvZiBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgICAgICAqLworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQorCiAgICAgICAgIC8qIGNvcHkgJ3JpZ2h0JyBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYXJlYSBvZiAnbGVmdCcgKi8KICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoKnBfbGVmdCwgbGVmdF9sZW4sIHJpZ2h0LCAwLCByaWdodF9sZW4pOwogICAgIH0KQEAgLTEwNzg1LDggKzExMTMzLDEwIEBACiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDIgPiBraW5kMSkKKyAgICBpZiAoa2luZDIgPiBraW5kMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICB9CiAgICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKQEAgLTEwODU3LDIzICsxMTIwNywyNSBAQAogfQogCiBQeURvY19TVFJWQVIoZXhwYW5kdGFic19fZG9jX18sCi0gICAgICAgICAgICAgIlMuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IHN0clxuXAorICAgICAgICAgICAgICJTLmV4cGFuZHRhYnModGFic2l6ZT04KSAtPiBzdHJcblwKIFxuXAogUmV0dXJuIGEgY29weSBvZiBTIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgZXhwYW5kZWQgdXNpbmcgc3BhY2VzLlxuXAogSWYgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCoKLXVuaWNvZGVfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIGxpbmVfcG9zLCBzcmNfbGVuLCBpbmNyOwogICAgIFB5X1VDUzQgY2g7CiAgICAgUHlPYmplY3QgKnU7CiAgICAgdm9pZCAqc3JjX2RhdGEsICpkZXN0X2RhdGE7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0YWJzaXplIiwgMH07CiAgICAgaW50IHRhYnNpemUgPSA4OwogICAgIGludCBraW5kOwogICAgIGludCBmb3VuZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6ZXhwYW5kdGFicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdGFic2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKQEAgLTEwOTY0LDEwICsxMTMxNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExMDM1LDM5ICsxMTM5MSw4IEBACiAgICAgICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIC8qIFRoZSBoYXNoIGZ1bmN0aW9uIGFzIGEgbWFjcm8sIGdldHMgZXhwYW5kZWQgdGhyZWUgdGltZXMgYmVsb3cuICovCi0jZGVmaW5lIEhBU0goUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB4IF49IChQeV91aGFzaF90KSAqUCA8PCA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgtLWxlbiA+PSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKlArKzsgIFwKLQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc2VsZikpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgUHlfVUNTMiAqcyA9IFB5VW5pY29kZV8yQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKHMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgICBQeV9VQ1M0ICpsOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoc2VsZikgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQgJiYKLSAgICAgICAgICAgICAgICJJbXBvc3NpYmxlIHN3aXRjaCBjYXNlIGluIHVuaWNvZGVfaGFzaCIpOwotICAgICAgICBsID0gUHlVbmljb2RlXzRCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gobCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotCi0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKKyAgICB4ID0gX1B5X0hhc2hCeXRlcyhQeVVuaWNvZGVfREFUQShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKSAqIFB5VW5pY29kZV9LSU5EKHNlbGYpKTsKICAgICBfUHlVbmljb2RlX0hBU0goc2VsZikgPSB4OwogICAgIHJldHVybiB4OwogfQpAQCAtMTEwOTAsMTAgKzExNDE1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTE2MjMsNiArMTE5NTIsNyBAQAogICAgIGludCBraW5kOwogICAgIFB5X3NzaXplX3QgaSwgaiwgbGVuOwogICAgIEJMT09NX01BU0sgc2VwbWFzazsKKyAgICBQeV9zc2l6ZV90IHNlcGxlbjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKHNlcG9iaikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTE2MzAsMjQgKzExOTYwLDM1IEBACiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKKyAgICBzZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBvYmopOwogICAgIHNlcG1hc2sgPSBtYWtlX2Jsb29tX21hc2soUHlVbmljb2RlX0tJTkQoc2Vwb2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKHNlcG9iaiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBvYmopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGxlbik7CiAKICAgICBpID0gMDsKICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYKLSAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSwgc2Vwb2JqKSkgeworICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKCFCTE9PTShzZXBtYXNrLCBjaCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbmRDaGFyKHNlcG9iaiwgY2gsIDAsIHNlcGxlbiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaiA9IGxlbjsKICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewotICAgICAgICBkbyB7CisgICAgICAgIGotLTsKKyAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopOworICAgICAgICAgICAgaWYgKCFCTE9PTShzZXBtYXNrLCBjaCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbmRDaGFyKHNlcG9iaiwgY2gsIDAsIHNlcGxlbiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgai0tOwotICAgICAgICB9IHdoaWxlIChqID49IGkgJiYKLSAgICAgICAgICAgICAgICAgQkxPT01fTUVNQkVSKHNlcG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopLCBzZXBvYmopKTsKKyAgICAgICAgfQorCiAgICAgICAgIGorKzsKICAgICB9CiAKQEAgLTExNjk0LDMwICsxMjAzNSw2MyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRvX3N0cmlwKFB5T2JqZWN0ICpzZWxmLCBpbnQgc3RyaXB0eXBlKQogewotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW4sIGksIGo7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CiAKLSAgICBpID0gMDsKLSAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfVU5JQ09ERV9JU1NQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSkgewotICAgICAgICAgICAgaSsrOworICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc2VsZikpIHsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlbGYpOworCisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSBjaCA9IGRhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKCFfUHlfYXNjaWlfd2hpdGVzcGFjZVtjaF0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CisgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB3aGlsZSAoaiA+PSBpKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSBjaCA9IGRhdGFbal07CisgICAgICAgICAgICAgICAgaWYgKCFfUHlfYXNjaWlfd2hpdGVzcGFjZVtjaF0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKKyAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogCi0gICAgaiA9IGxlbjsKLSAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewotICAgICAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaiA9IGxlbjsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSkpOwotICAgICAgICBqKys7CisgICAgICAgICAgICB3aGlsZSAoaiA+PSBpKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopOworICAgICAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgai0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaisrOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9TdWJzdHJpbmcoc2VsZiwgaSwgaik7CkBAIC0xMTcyOSw3ICsxMjEwMyw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xMTk0MSw3ICsxMjMxNSw3IEBACiAgICAgUHlfc3NpemVfdCBpc2l6ZTsKICAgICBQeV9zc2l6ZV90IG9zaXplLCBzcXVvdGUsIGRxdW90ZSwgaSwgbzsKICAgICBQeV9VQ1M0IG1heCwgcXVvdGU7Ci0gICAgaW50IGlraW5kLCBva2luZDsKKyAgICBpbnQgaWtpbmQsIG9raW5kLCB1bmNoYW5nZWQ7CiAgICAgdm9pZCAqaWRhdGEsICpvZGF0YTsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpCkBAIC0xMTk1Miw3ICsxMjMyNiw3IEBACiAKICAgICAvKiBDb21wdXRlIGxlbmd0aCBvZiBvdXRwdXQsIHF1b3RlIGNoYXJhY3RlcnMsIGFuZAogICAgICAgIG1heGltdW0gY2hhcmFjdGVyICovCi0gICAgb3NpemUgPSAyOyAvKiBxdW90ZXMgKi8KKyAgICBvc2l6ZSA9IDA7CiAgICAgbWF4ID0gMTI3OwogICAgIHNxdW90ZSA9IGRxdW90ZSA9IDA7CiAgICAgaWtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKQEAgLTExOTgzLDcgKzEyMzU3LDkgQEAKICAgICB9CiAKICAgICBxdW90ZSA9ICdcJyc7CisgICAgdW5jaGFuZ2VkID0gKG9zaXplID09IGlzaXplKTsKICAgICBpZiAoc3F1b3RlKSB7CisgICAgICAgIHVuY2hhbmdlZCA9IDA7CiAgICAgICAgIGlmIChkcXVvdGUpCiAgICAgICAgICAgICAvKiBCb3RoIHNxdW90ZSBhbmQgZHF1b3RlIHByZXNlbnQuIFVzZSBzcXVvdGUsCiAgICAgICAgICAgICAgICBhbmQgZXNjYXBlIHRoZW0gKi8KQEAgLTExOTkxLDYgKzEyMzY3LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcXVvdGUgPSAnIic7CiAgICAgfQorICAgIG9zaXplICs9IDI7ICAgLyogcXVvdGVzICovCiAKICAgICByZXByID0gUHlVbmljb2RlX05ldyhvc2l6ZSwgbWF4KTsKICAgICBpZiAocmVwciA9PSBOVUxMKQpAQCAtMTIwMDAsODEgKzEyMzc3LDg3IEBACiAKICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCAwLCBxdW90ZSk7CiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgb3NpemUtMSwgcXVvdGUpOworICAgIGlmICh1bmNoYW5nZWQpIHsKKyAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVwciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMCwgbyA9IDE7IGkgPCBpc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoaWtpbmQsIGlkYXRhLCBpKTsKIAotICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoaWtpbmQsIGlkYXRhLCBpKTsKLQotICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLwotICAgICAgICBpZiAoKGNoID09IHF1b3RlKSB8fCAoY2ggPT0gJ1xcJykpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KLSAgICAgICAgaWYgKGNoID09ICdcdCcpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xuJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ24nKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAncicpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogTWFwIG5vbi1wcmludGFibGUgVVMgQVNDSUkgdG8gJ1x4aGgnICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgJyAnIHx8IGNoID09IDB4N0YpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweDAwMEZdKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDb3B5IEFTQ0lJIGNoYXJhY3RlcnMgYXMtaXMgKi8KLSAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogTWFwIFVuaWNvZGUgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1BSSU5UQUJMRShjaCkpIHsKKyAgICAgICAgICAgIC8qIEVzY2FwZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzICovCisgICAgICAgICAgICBpZiAoKGNoID09IHF1b3RlKSB8fCAoY2ggPT0gJ1xcJykpIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgICAgIC8qIE1hcCA4LWJpdCBjaGFyYWN0ZXJzIHRvICdceGhoJyAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8PSAweGZmKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIE1hcCAxNi1iaXQgY2hhcmFjdGVycyB0byAnXHV4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoIDw9IDB4ZmZmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCi0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1UnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyMCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBDb3B5IGNoYXJhY3RlcnMgYXMtaXMgKi8KLSAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBNYXAgc3BlY2lhbCB3aGl0ZXNwYWNlIHRvICdcdCcsIFxuJywgJ1xyJyAqLworICAgICAgICAgICAgaWYgKGNoID09ICdcdCcpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3QnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ24nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIG5vbi1wcmludGFibGUgVVMgQVNDSUkgdG8gJ1x4aGgnICovCisgICAgICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4N0YpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTm9uLUFTQ0lJIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgIChjYXRlZ29yaWVzIFoqIGFuZCBDKiBleGNlcHQgQVNDSUkgc3BhY2UpCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCA4LWJpdCBjaGFyYWN0ZXJzIHRvICdceGhoJyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCAxNi1iaXQgY2hhcmFjdGVycyB0byAnXHV4eHh4JyAqLworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCAyMS1iaXQgY2hhcmFjdGVycyB0byAnXFUwMHh4eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjQpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTYpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDb3B5IGNoYXJhY3RlcnMgYXMtaXMgKi8KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTIxMDQsMTAgKzEyNDg3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoLTEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTEyMTM2LDEwICsxMjUyMywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKC0xLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMjQ5NiwyOCArMTI4ODcsNzQgQEAKICAgICByZXR1cm4gY2FzZV9vcGVyYXRpb24oc2VsZiwgZG9fc3dhcGNhc2UpOwogfQogCi1QeURvY19TVFJWQVIobWFrZXRyYW5zX19kb2NfXywKLSAgICAgICAgICAgICAic3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSkgLT4gZGljdCAoc3RhdGljIG1ldGhvZClcblwKLVxuXAotUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuXG5cCi1JZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG5cCi1vcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLlxuXAotQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblwKLUlmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuXAotaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZVxuXAotY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0XG5cCi1tdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKKy8qW2NsaW5pY10KIAotc3RhdGljIFB5T2JqZWN0KgotdW5pY29kZV9tYWtldHJhbnMoUHlPYmplY3QgKm51bGwsIFB5T2JqZWN0ICphcmdzKQorQHN0YXRpY21ldGhvZAorc3RyLm1ha2V0cmFucyBhcyB1bmljb2RlX21ha2V0cmFucworCisgIHg6IG9iamVjdAorCisgIHk6IHVuaWNvZGU9TlVMTAorCisgIHo6IHVuaWNvZGU9TlVMTAorCisgIC8KKworUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGUKK29yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuCitDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLgorSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kCitpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlCitjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXQKK211c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIodW5pY29kZV9tYWtldHJhbnNfX2RvY19fLAorIm1ha2V0cmFucyh4LCB5PU5vbmUsIHo9Tm9uZSlcbiIKKyJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cbiIKKyJcbiIKKyJJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG4iCisib3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cbiIKKyJDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuIgorIklmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuIgorImluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcbiIKKyJjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcbiIKKyJtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKKworI2RlZmluZSBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYgICAgXAorICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1N8TUVUSF9TVEFUSUMsIHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKHZvaWQgKm51bGwsIFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnModm9pZCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKngsICp5ID0gTlVMTCwgKnogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp4OworICAgIFB5T2JqZWN0ICp5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk98VVU6bWFrZXRyYW5zIiwKKyAgICAgICAgJngsICZ5LCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlX21ha2V0cmFuc19pbXBsKG51bGwsIHgsIHksIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKHZvaWQgKm51bGwsIFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopCisvKltjbGluaWMgY2hlY2tzdW06IDdmNzZmNDE0YTBkZmQwYzYxNGUwZDQ3MTc4NzJlZWI1MjA1MTZkYTddKi8KK3sKICAgICBQeU9iamVjdCAqbmV3ID0gTlVMTCwgKmtleSwgKnZhbHVlOwogICAgIFB5X3NzaXplX3QgaSA9IDA7CiAgICAgaW50IHJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xVVTptYWtldHJhbnMiLCAmeCwgJnksICZ6KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmV3ID0gUHlEaWN0X05ldygpOwogICAgIGlmICghbmV3KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyNzI4LDYgKzEzMTY1LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzQ0LDYgKzEzMTgzLDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIApAQCAtMTI3NzcsNiArMTMyMTgsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI3OTIsMzMgKzEzMjM1LDQ4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBpZiAoIXdyaXRlci0+cmVhZG9ubHkpCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ29weS1vbi13cml0ZSBtb2RlOiBzZXQgYnVmZmVyIHNpemUgdG8gMCBzbworICAgICAgICAgKiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoKSB3aWxsIGNvcHkgKGFuZCBlbmxhcmdlKSB0aGUgYnVmZmVyIG9uCisgICAgICAgICAqIG5leHQgd3JpdGUuICovCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CisgICAgfQogICAgIHdyaXRlci0+bWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5kYXRhID0gUHlVbmljb2RlX0RBVEEod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+a2luZCA9IFB5VW5pY29kZV9LSU5EKHdyaXRlci0+YnVmZmVyKTsKIH0KIAogdm9pZAotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKQorX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBtZW1zZXQod3JpdGVyLCAwLCBzaXplb2YoKndyaXRlcikpOwogI2lmZGVmIFB5X0RFQlVHCiAgICAgd3JpdGVyLT5raW5kID0gNTsgICAgLyogaW52YWxpZCBraW5kICovCiAjZW5kaWYKLSAgICB3cml0ZXItPm1pbl9sZW5ndGggPSBQeV9NQVgobWluX2xlbmd0aCwgMTAwKTsKLSAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IChtaW5fbGVuZ3RoID4gMCk7CisgICAgd3JpdGVyLT5taW5fY2hhciA9IDEyNzsKIH0KIAogaW50CiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmVJbnRlcm5hbChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfVUNTNCBtYXhjaGFyKQogeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgIC8qIE9uIFdpbmRvd3MsIG92ZXJhbGxvY2F0ZSBieSA1MCUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiAyCisjZWxzZQorICAgLyogT24gTGludXgsIG92ZXJhbGxvY2F0ZSBieSAyNSUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiA0CisjZW5kaWYKICAgICBQeV9zc2l6ZV90IG5ld2xlbjsKICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogCkBAIC0xMjgzMCwyOSArMTMyODgsMzAgQEAKICAgICB9CiAgICAgbmV3bGVuID0gd3JpdGVyLT5wb3MgKyBsZW5ndGg7CiAKKyAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWluX2NoYXIpOworCiAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7Ci0gICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZQorICAgICAgICAgICAgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1IpKSB7CisgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZWFsbG9jKCkgKi8KKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SOwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgIGVsc2UgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgeworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOwogCiAgICAgICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IHdyaXRlci0+cmVhZG9ubHkpIHsKICAgICAgICAgICAgIC8qIHJlc2l6ZSArIHdpZGVuICovCkBAIC0xMjg3MCw3ICsxMzMyOSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gbmV3YnVmZmVyOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwogICAgIH0KICAgICBlbHNlIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyKSB7CiAgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CkBAIC0xMjg4MSw5ICsxMzMzOSwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciwgMCwgd3JpdGVyLT5wb3MpOwogICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOwogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CisgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICByZXR1cm4gMDsKKworI3VuZGVmIE9WRVJBTExPQ0FURV9GQUNUT1IKK30KKworUHlfTE9DQUxfSU5MSU5FKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfVUNTNCBjaCkKK3sKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgY2gpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIGNoKTsKKyAgICB3cml0ZXItPnBvcysrOworICAgIHJldHVybiAwOworfQorCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfVUNTNCBjaCkKK3sKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBjaCk7CiB9CiAKIGludApAQCAtMTI5MDAsMTEgKzEzMzc2LDEwIEBACiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwogICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IGxlbiA+IHdyaXRlci0+c2l6ZSAtIHdyaXRlci0+cG9zKSB7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RyKTsKICAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOwogICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKLSAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwotICAgICAgICAgICAgd3JpdGVyLT5zaXplID0gMDsKICAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjkxNywyOCArMTMzOTIsMTQzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQoreworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXNzZXJ0KDAgPD0gc3RhcnQpOworICAgIGFzc2VydChlbmQgPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSk7CisgICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CisKKyAgICBpZiAoZW5kID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpCisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKTsKKworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IHdyaXRlci0+bWF4Y2hhcikKKyAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCBzdGFydCwgZW5kKTsKKyAgICBlbHNlCisgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgbGVuID0gZW5kIC0gc3RhcnQ7CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHN0YXJ0LCBsZW4pOworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFzY2lpLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBpZiAobGVuID09IC0xKQorICAgICAgICBsZW4gPSBzdHJsZW4oYXNjaWkpOworCisgICAgYXNzZXJ0KHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopYXNjaWksIChQeV9VQ1MxKilhc2NpaSArIGxlbikgPCAxMjgpOworCisgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwgJiYgIXdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdHI7CisKKyAgICAgICAgc3RyID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYXNjaWksIGxlbik7CisgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBzdHI7CisgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3dpdGNoICh3cml0ZXItPmtpbmQpCisgICAgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBjb25zdCBQeV9VQ1MxICpzdHIgPSAoY29uc3QgUHlfVUNTMSAqKWFzY2lpOworICAgICAgICBQeV9VQ1MxICpkYXRhID0gd3JpdGVyLT5kYXRhOworCisgICAgICAgIFB5X01FTUNQWShkYXRhICsgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoCisgICAgICAgICAgICBQeV9VQ1MxLCBQeV9VQ1MyLAorICAgICAgICAgICAgYXNjaWksIGFzY2lpICsgbGVuLAorICAgICAgICAgICAgKFB5X1VDUzIgKil3cml0ZXItPmRhdGEgKyB3cml0ZXItPnBvcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTNCwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1M0ICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KKworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlTGF0aW4xU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBtYXhjaGFyID0gdWNzMWxpYl9maW5kX21heF9jaGFyKChQeV9VQ1MxKilzdHIsIChQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdW5pY29kZV93cml0ZV9jc3RyKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgc3RyLCBsZW4pOworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogeworICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgaWYgKHdyaXRlci0+cG9zID09IDApIHsKLSAgICAgICAgUHlfWERFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgIFB5X0NMRUFSKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogICAgIGlmICh3cml0ZXItPnJlYWRvbmx5KSB7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgPT0gd3JpdGVyLT5wb3MpOwotICAgICAgICByZXR1cm4gd3JpdGVyLT5idWZmZXI7CisgICAgICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpID09IHdyaXRlci0+cG9zKTsKKyAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKSAhPSB3cml0ZXItPnBvcykgewogICAgICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogICAgICAgICBuZXdidWZmZXIgPSByZXNpemVfY29tcGFjdCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MpOwogICAgICAgICBpZiAobmV3YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKICAgICB9Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh3cml0ZXItPmJ1ZmZlciwgMSkpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeSh3cml0ZXItPmJ1ZmZlcik7CisgICAgc3RyID0gd3JpdGVyLT5idWZmZXI7CisgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSk7CisgICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0X3JlYWR5KHN0cik7CiB9CiAKIHZvaWQKQEAgLTEyOTczLDcgKzEzNTYzLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5VW5pY29kZV9Gb3JtYXRBZHZhbmNlZFdyaXRlcigmd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZm9ybWF0X3NwZWMsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykpOwpAQCAtMTMwNDIsNyArMTM2MzIsOCBAQAogICAgIHsidGl0bGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdGl0bGUsIE1FVEhfTk9BUkdTLCB0aXRsZV9fZG9jX199LAogICAgIHsiY2VudGVyIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2NlbnRlciwgTUVUSF9WQVJBUkdTLCBjZW50ZXJfX2RvY19ffSwKICAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywgZXhwYW5kdGFic19fZG9jX199LAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAogICAgIHsicGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3BhcnRpdGlvbiwgTUVUSF9PLCBwYXJ0aXRpb25fX2RvY19ffSwKICAgICB7ImluZGV4IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2luZGV4LCBNRVRIX1ZBUkFSR1MsIGluZGV4X19kb2NfX30sCkBAIC0xMzA1NCw3ICsxMzY0NSw4IEBACiAgICAgeyJyanVzdCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yanVzdCwgTUVUSF9WQVJBUkdTLCByanVzdF9fZG9jX199LAogICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JzdHJpcCwgTUVUSF9WQVJBUkdTLCByc3RyaXBfX2RvY19ffSwKICAgICB7InJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcnBhcnRpdGlvbiwgTUVUSF9PLCBycGFydGl0aW9uX19kb2NfX30sCi0gICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKKyAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3BsaXRsaW5lcywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgc3BsaXRsaW5lc19fZG9jX199LAogICAgIHsic3RyaXAiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3RyaXAsIE1FVEhfVkFSQVJHUywgc3RyaXBfX2RvY19ffSwKICAgICB7InN3YXBjYXNlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N3YXBjYXNlLCBNRVRIX05PQVJHUywgc3dhcGNhc2VfX2RvY19ffSwKICAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV90cmFuc2xhdGUsIE1FVEhfTywgdHJhbnNsYXRlX19kb2NfX30sCkBAIC0xMzA3Niw4ICsxMzY2OCw3IEBACiAgICAgeyJmb3JtYXQiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGZvcm1hdF9fZG9jX199LAogICAgIHsiZm9ybWF0X21hcCIsIChQeUNGdW5jdGlvbikgZG9fc3RyaW5nX2Zvcm1hdF9tYXAsIE1FVEhfTywgZm9ybWF0X21hcF9fZG9jX199LAogICAgIHsiX19mb3JtYXRfXyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9fZm9ybWF0X18sIE1FVEhfVkFSQVJHUywgcF9mb3JtYXRfX2RvY19ffSwKLSAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9tYWtldHJhbnMsCi0gICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfU1RBVElDLCBtYWtldHJhbnNfX2RvY19ffSwKKyAgICBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYKICAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX3NpemVvZl9fLCBNRVRIX05PQVJHUywgc2l6ZW9mX19kb2NfX30sCiAjaWYgMAogICAgIC8qIFRoZXNlIG1ldGhvZHMgYXJlIGp1c3QgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KQEAgLTEzMTkyLDE2ICsxMzc4MywzOSBAQAogCiAvKiBIZWxwZXJzIGZvciBQeVVuaWNvZGVfRm9ybWF0KCkgKi8KIAorc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgeworICAgIFB5T2JqZWN0ICphcmdzOworICAgIGludCBhcmdzX293bmVkOworICAgIFB5X3NzaXplX3QgYXJnbGVuLCBhcmdpZHg7CisgICAgUHlPYmplY3QgKmRpY3Q7CisKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGZtdGtpbmQ7CisgICAgUHlfc3NpemVfdCBmbXRjbnQsIGZtdHBvczsKKyAgICB2b2lkICpmbXRkYXRhOworICAgIFB5T2JqZWN0ICpmbXRzdHI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKK307CisKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCB7CisgICAgUHlfVUNTNCBjaDsKKyAgICBpbnQgZmxhZ3M7CisgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgc2lnbjsKK307CisKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRuZXh0YXJnKFB5T2JqZWN0ICphcmdzLCBQeV9zc2l6ZV90IGFyZ2xlbiwgUHlfc3NpemVfdCAqcF9hcmdpZHgpCit1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgpCiB7Ci0gICAgUHlfc3NpemVfdCBhcmdpZHggPSAqcF9hcmdpZHg7Ci0gICAgaWYgKGFyZ2lkeCA8IGFyZ2xlbikgewotICAgICAgICAoKnBfYXJnaWR4KSsrOwotICAgICAgICBpZiAoYXJnbGVuIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdzOworICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gY3R4LT5hcmdpZHg7CisKKyAgICBpZiAoYXJnaWR4IDwgY3R4LT5hcmdsZW4pIHsKKyAgICAgICAgY3R4LT5hcmdpZHgrKzsKKyAgICAgICAgaWYgKGN0eC0+YXJnbGVuIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBjdHgtPmFyZ3M7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBQeVR1cGxlX0dldEl0ZW0oYXJncywgYXJnaWR4KTsKKyAgICAgICAgICAgIHJldHVybiBQeVR1cGxlX0dldEl0ZW0oY3R4LT5hcmdzLCBhcmdpZHgpOwogICAgIH0KICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZvcm1hdCBzdHJpbmciKTsKQEAgLTEzMjEwLDMzICsxMzgyNCw0MiBAQAogCiAvKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSB0byBhIFB5VW5pY29kZSBvYmplY3QsIG9yIE5VTEwgb24gZmFpbHVyZS4gKi8KIAorLyogRm9ybWF0IGEgZmxvYXQgaW50byB0aGUgd3JpdGVyIGlmIHRoZSB3cml0ZXIgaXMgbm90IE5VTEwsIG9yIGludG8gKnBfb3V0cHV0CisgICBvdGhlcndpc2UuCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogc3RhdGljIGludAotZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlLAotICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQorZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwKKyAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBjaGFyICpwOwogICAgIGRvdWJsZSB4OwogICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBwcmVjOworICAgIGludCBkdG9hX2ZsYWdzOwogCiAgICAgeCA9IFB5RmxvYXRfQXNEb3VibGUodik7CiAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBwcmVjID0gYXJnLT5wcmVjOwogICAgIGlmIChwcmVjIDwgMCkKICAgICAgICAgcHJlYyA9IDY7CiAKLSAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIHR5cGUsIHByZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGX0FMVCkgPyBQeV9EVFNGX0FMVCA6IDAsIE5VTEwpOworICAgIGlmIChhcmctPmZsYWdzICYgRl9BTFQpCisgICAgICAgIGR0b2FfZmxhZ3MgPSBQeV9EVFNGX0FMVDsKKyAgICBlbHNlCisgICAgICAgIGR0b2FfZmxhZ3MgPSAwOworICAgIHAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgYXJnLT5jaCwgcHJlYywgZHRvYV9mbGFncywgTlVMTCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGxlbiA9IHN0cmxlbihwKTsKICAgICBpZiAod3JpdGVyKSB7Ci0gICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIHAsIGxlbikgPCAwKSB7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKHApOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHAsIGxlbik7Ci0gICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKICAgICB9CiAgICAgZWxzZQogICAgICAgICAqcF9vdXRwdXQgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShwLCBsZW4pOwpAQCAtMTMyNjMsNyArMTM4ODYsNyBAQAogICogcHJvZHVjZSBhICctJyBzaWduLCBidXQgY2FuIGZvciBQeXRob24ncyB1bmJvdW5kZWQgaW50cy4KICAqLwogc3RhdGljIFB5T2JqZWN0KgotZm9ybWF0bG9uZyhQeU9iamVjdCAqdmFsLCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSkKK2Zvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgY2hhciAqYnVmOwpAQCAtMTMyNzMsNiArMTM4OTYsOCBAQAogICAgIFB5X3NzaXplX3QgbGxlbjsKICAgICBpbnQgbnVtZGlnaXRzOyAgICAgIC8qIGxlbiA9PSBudW1ub25kaWdpdHMgKyBudW1kaWdpdHMgKi8KICAgICBpbnQgbnVtbm9uZGlnaXRzID0gMDsKKyAgICBpbnQgcHJlYyA9IGFyZy0+cHJlYzsKKyAgICBpbnQgdHlwZSA9IGFyZy0+Y2g7CiAKICAgICAvKiBBdm9pZCBleGNlZWRpbmcgU1NJWkVfVF9NQVggKi8KICAgICBpZiAocHJlYyA+IElOVF9NQVgtMykgewpAQCAtMTMyODQsMTMgKzEzOTA5LDE0IEBACiAgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayh2YWwpKTsKIAogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKICAgICBjYXNlICdkJzoKKyAgICBjYXNlICdpJzoKICAgICBjYXNlICd1JzoKLSAgICAgICAgLyogU3BlY2lhbC1jYXNlIGJvb2xlYW46IHdlIHdhbnQgMC8xICovCi0gICAgICAgIGlmIChQeUJvb2xfQ2hlY2sodmFsKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDEwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gUHlfVFlQRSh2YWwpLT50cF9zdHIodmFsKTsKKyAgICAgICAgLyogaW50IGFuZCBpbnQgc3ViY2xhc3NlcyBzaG91bGQgcHJpbnQgbnVtZXJpY2FsbHkgd2hlbiBhIG51bWVyaWMgKi8KKyAgICAgICAgLyogZm9ybWF0IGNvZGUgaXMgdXNlZCAoc2VlIGlzc3VlMTg3ODApICovCisgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDEwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAnbyc6CiAgICAgICAgIG51bW5vbmRpZ2l0cyA9IDI7CkBAIC0xMzMwMSw4ICsxMzkyNyw2IEBACiAgICAgICAgIG51bW5vbmRpZ2l0cyA9IDI7CiAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDE2KTsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KCEiJ3R5cGUnIG5vdCBpbiBbZHVveFhdIik7CiAgICAgfQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMzEzLDEyICsxMzkzNywxNCBAQAogCiAgICAgLyogVG8gbW9kaWZ5IHRoZSBzdHJpbmcgaW4tcGxhY2UsIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSByZWZlcmVuY2UuICovCiAgICAgaWYgKFB5X1JFRkNOVChyZXN1bHQpICE9IDEpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYnVmID0gUHlVbmljb2RlX0RBVEEocmVzdWx0KTsKICAgICBsbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KTsKICAgICBpZiAobGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyB0b28gbGFyZ2UgaW4gX1B5Qnl0ZXNfRm9ybWF0TG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMzMwLDcgKzEzOTU2LDcgQEAKICAgICBhc3NlcnQobnVtZGlnaXRzID4gMCk7CiAKICAgICAvKiBHZXQgcmlkIG9mIGJhc2UgbWFya2VyIHVubGVzcyBGX0FMVCAqLwotICAgIGlmICgoKGZsYWdzICYgRl9BTFQpID09IDAgJiYKKyAgICBpZiAoKChhcmctPmZsYWdzICYgRl9BTFQpID09IDAgJiYKICAgICAgICAgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSkpIHsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduXSA9PSAnMCcpOwogICAgICAgICBhc3NlcnQoYnVmW3NpZ24rMV0gPT0gJ3gnIHx8IGJ1ZltzaWduKzFdID09ICdYJyB8fApAQCAtMTMzNzUsMTUgKzE0MDAxLDEwMCBAQAogICAgICAgICAgICAgaWYgKGJ1ZltpXSA+PSAnYScgJiYgYnVmW2ldIDw9ICd4JykKICAgICAgICAgICAgICAgICBidWZbaV0gLT0gJ2EnLSdBJzsKICAgICB9Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2socmVzdWx0KSB8fCBsZW4gIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KSkgeworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkKKyAgICAgICAgfHwgYnVmICE9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCkpIHsKICAgICAgICAgUHlPYmplY3QgKnVuaWNvZGU7CiAgICAgICAgIHVuaWNvZGUgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIGxlbik7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXN1bHQgPSB1bmljb2RlOwogICAgIH0KKyAgICBlbHNlIGlmIChsZW4gIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KSkgeworICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmcmVzdWx0LCBsZW4pIDwgMCkKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyLgorICogUmV0dXJuIDEgaWYgdGhlIG51bWJlciBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byB0aGUgd3JpdGVyLAorICogICAgICAgIDAgaWYgdGhlIG51bWJlciBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byAqcF9vdXRwdXQKKyAqICAgICAgIC0xIGFuZCByYWlzZSBhbiBleGNlcHRpb24gb24gZXJyb3IgKi8KK3N0YXRpYyBpbnQKK21haW5mb3JtYXRsb25nKFB5T2JqZWN0ICp2LAorICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfb3V0cHV0LAorICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIFB5T2JqZWN0ICppb2JqLCAqcmVzOworICAgIGNoYXIgdHlwZSA9IChjaGFyKWFyZy0+Y2g7CisKKyAgICBpZiAoIVB5TnVtYmVyX0NoZWNrKHYpKQorICAgICAgICBnb3RvIHdyb25ndHlwZTsKKworICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOworICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFzc2VydChQeUxvbmdfQ2hlY2soaW9iaikpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW9iaiA9IHY7CisgICAgICAgIFB5X0lOQ1JFRihpb2JqKTsKKyAgICB9CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikKKyAgICAgICAgJiYgYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEKKyAgICAgICAgJiYgIShhcmctPmZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKQorICAgICAgICAmJiB0eXBlICE9ICdYJykKKyAgICB7CisgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICBpbnQgYWx0ZXJuYXRlID0gYXJnLT5mbGFncyAmIEZfQUxUOworICAgICAgICBpbnQgYmFzZTsKKworICAgICAgICBzd2l0Y2godHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiJ3R5cGUnIG5vdCBpbiBbZGl1b3hYXSIpOworICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIod3JpdGVyLCB2LCBiYXNlLCBhbHRlcm5hdGUpID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXMgPSBmb3JtYXRsb25nKGlvYmosIGFyZyk7CisgICAgUHlfREVDUkVGKGlvYmopOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICpwX291dHB1dCA9IHJlczsKKyAgICByZXR1cm4gMDsKKword3Jvbmd0eXBlOgorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiJSUlYyBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCAiCisgICAgICAgICAgICAibm90ICUuMjAwcyIsCisgICAgICAgICAgICB0eXBlLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBQeV9VQ1M0CiBmb3JtYXRjaGFyKFB5T2JqZWN0ICp2KQogewpAQCAtMTM0MTYsNTQwICsxNDEyNyw1ODcgQEAKICAgICByZXR1cm4gKFB5X1VDUzQpIC0xOwogfQogCisvKiBQYXJzZSBvcHRpb25zIG9mIGFuIGFyZ3VtZW50OiBmbGFncywgd2lkdGgsIHByZWNpc2lvbi4KKyAgIEhhbmRsZSBhbHNvICIlKG5hbWUpIiBzeW50YXguCisKKyAgIFJldHVybiAwIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byBhcmctPnN0ci4KKyAgIFJldHVybiAxIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiB3cml0dGVuIGludG8gY3R4LT53cml0ZXIsCisgICBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19wYXJzZShzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnKQoreworI2RlZmluZSBGT1JNQVRfUkVBRChjdHgpIFwKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoKGN0eCktPmZtdGtpbmQsIChjdHgpLT5mbXRkYXRhLCAoY3R4KS0+Zm10cG9zKQorCisgICAgUHlPYmplY3QgKnY7CisKKyAgICBpZiAoYXJnLT5jaCA9PSAnKCcpIHsKKyAgICAgICAgLyogR2V0IGFyZ3VtZW50IHZhbHVlIGZyb20gYSBkaWN0aW9uYXJ5LiBFeGFtcGxlOiAiJShuYW1lKXMiLiAqLworICAgICAgICBQeV9zc2l6ZV90IGtleXN0YXJ0OworICAgICAgICBQeV9zc2l6ZV90IGtleWxlbjsKKyAgICAgICAgUHlPYmplY3QgKmtleTsKKyAgICAgICAgaW50IHBjb3VudCA9IDE7CisKKyAgICAgICAgaWYgKGN0eC0+ZGljdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgcmVxdWlyZXMgYSBtYXBwaW5nIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKytjdHgtPmZtdHBvczsKKyAgICAgICAgLS1jdHgtPmZtdGNudDsKKyAgICAgICAga2V5c3RhcnQgPSBjdHgtPmZtdHBvczsKKyAgICAgICAgLyogU2tpcCBvdmVyIGJhbGFuY2VkIHBhcmVudGhlc2VzICovCisgICAgICAgIHdoaWxlIChwY291bnQgPiAwICYmIC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBpZiAoYXJnLT5jaCA9PSAnKScpCisgICAgICAgICAgICAgICAgLS1wY291bnQ7CisgICAgICAgICAgICBlbHNlIGlmIChhcmctPmNoID09ICcoJykKKyAgICAgICAgICAgICAgICArK3Bjb3VudDsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICAgICAga2V5bGVuID0gY3R4LT5mbXRwb3MgLSBrZXlzdGFydCAtIDE7CisgICAgICAgIGlmIChjdHgtPmZtdGNudCA8IDAgfHwgcGNvdW50ID4gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0IGtleSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGtleSA9IFB5VW5pY29kZV9TdWJzdHJpbmcoY3R4LT5mbXRzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5c3RhcnQsIGtleXN0YXJ0ICsga2V5bGVuKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoY3R4LT5hcmdzX293bmVkKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3R4LT5hcmdzKTsKKyAgICAgICAgICAgIGN0eC0+YXJnc19vd25lZCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgY3R4LT5hcmdzID0gUHlPYmplY3RfR2V0SXRlbShjdHgtPmRpY3QsIGtleSk7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICBpZiAoY3R4LT5hcmdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGN0eC0+YXJnc19vd25lZCA9IDE7CisgICAgICAgIGN0eC0+YXJnbGVuID0gLTE7CisgICAgICAgIGN0eC0+YXJnaWR4ID0gLTI7CisgICAgfQorCisgICAgLyogUGFyc2UgZmxhZ3MuIEV4YW1wbGU6ICIlK2kiID0+IGZsYWdzPUZfU0lHTi4gKi8KKyAgICB3aGlsZSAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICBzd2l0Y2ggKGFyZy0+Y2gpIHsKKyAgICAgICAgY2FzZSAnLSc6IGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsgY29udGludWU7CisgICAgICAgIGNhc2UgJysnOiBhcmctPmZsYWdzIHw9IEZfU0lHTjsgY29udGludWU7CisgICAgICAgIGNhc2UgJyAnOiBhcmctPmZsYWdzIHw9IEZfQkxBTks7IGNvbnRpbnVlOworICAgICAgICBjYXNlICcjJzogYXJnLT5mbGFncyB8PSBGX0FMVDsgY29udGludWU7CisgICAgICAgIGNhc2UgJzAnOiBhcmctPmZsYWdzIHw9IEZfWkVSTzsgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogUGFyc2Ugd2lkdGguIEV4YW1wbGU6ICIlMTBzIiA9PiB3aWR0aD0xMCAqLworICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBhcmctPndpZHRoID0gUHlMb25nX0FzU3NpemVfdCh2KTsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPCAwKSB7CisgICAgICAgICAgICBhcmctPmZsYWdzIHw9IEZfTEpVU1Q7CisgICAgICAgICAgICBhcmctPndpZHRoID0gLWFyZy0+d2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGFyZy0+Y2ggPj0gJzAnICYmIGFyZy0+Y2ggPD0gJzknKSB7CisgICAgICAgIGFyZy0+d2lkdGggPSBhcmctPmNoIC0gJzAnOworICAgICAgICB3aGlsZSAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICBpZiAoYXJnLT5jaCA8ICcwJyB8fCBhcmctPmNoID4gJzknKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogU2luY2UgYXJnLT5jaCBpcyB1bnNpZ25lZCwgdGhlIFJIUyB3b3VsZCBlbmQgdXAgYXMgdW5zaWduZWQsCisgICAgICAgICAgICAgICBtaXhpbmcgc2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uLiBTaW5jZSBhcmctPmNoIGlzIGJldHdlZW4KKyAgICAgICAgICAgICAgICcwJyBhbmQgJzknLCBjYXN0aW5nIHRvIGludCBpcyBzYWZlLiAqLworICAgICAgICAgICAgaWYgKGFyZy0+d2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludClhcmctPmNoIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggdG9vIGJpZyIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSBhcmctPndpZHRoKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUGFyc2UgcHJlY2lzaW9uLiBFeGFtcGxlOiAiJS4zZiIgPT4gcHJlYz0zICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJy4nKSB7CisgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnLT5jaCA9PSAnKicpIHsKKyAgICAgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT5wcmVjID0gX1B5TG9uZ19Bc0ludCh2KTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYXJnLT5wcmVjIDwgMCkKKyAgICAgICAgICAgICAgICBhcmctPnByZWMgPSAwOworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgICAgIGFyZy0+cHJlYyA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgICAgICB3aGlsZSAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLT5jaCA8ICcwJyB8fCBhcmctPmNoID4gJzknKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLT5wcmVjID4gKElOVF9NQVggLSAoKGludClhcmctPmNoIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVjaXNpb24gdG9vIGJpZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IGFyZy0+cHJlYyoxMCArIChhcmctPmNoIC0gJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIElnbm9yZSAiaCIsICJsIiBhbmQgIkwiIGZvcm1hdCBwcmVmaXggKGV4OiAiJWhpIiBvciAiJWxzIikgKi8KKyAgICBpZiAoY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICBpZiAoYXJnLT5jaCA9PSAnaCcgfHwgYXJnLT5jaCA9PSAnbCcgfHwgYXJnLT5jaCA9PSAnTCcpIHsKKyAgICAgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChjdHgtPmZtdGNudCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI3VuZGVmIEZPUk1BVF9SRUFECit9CisKKy8qIEZvcm1hdCBvbmUgYXJndW1lbnQuIFN1cHBvcnRlZCBjb252ZXJzaW9uIHNwZWNpZmllcnM6CisKKyAgIC0gInMiLCAiciIsICJhIjogYW55IHR5cGUKKyAgIC0gImkiLCAiZCIsICJ1IiwgIm8iLCAieCIsICJYIjogaW50CisgICAtICJlIiwgIkUiLCAiZiIsICJGIiwgImciLCAiRyI6IGZsb2F0CisgICAtICJjIjogaW50IG9yIHN0ciAoMSBjaGFyYWN0ZXIpCisKKyAgIFdoZW4gcG9zc2libGUsIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiBkaXJlY3RseSBpbnRvIHRoZSBVbmljb2RlIHdyaXRlcgorICAgKGN0eC0+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+IGxlbikgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCAnICcsIHdyaXRlci5wb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47Ci0gICAgICAgICAgICB9Ci0KLW5leHRhcmc6Ci0gICAgICAgICAgICBpZiAoZGljdCAmJiAoYXJnaWR4IDwgYXJnbGVuKSAmJiBjICE9ICclJykgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgIH0gLyogJyUnICovCi0gICAgfSAvKiB1bnRpbCBlbmQgKi8KLSAgICBpZiAoYXJnaWR4IDwgYXJnbGVuICYmICFkaWN0KSB7CisgICAgaWYgKGN0eC5hcmdpZHggPCBjdHguYXJnbGVuICYmICFjdHguZGljdCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBpZiAoY3R4LmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5hcmdzKTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKyAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZjdHgud3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotICAgIFB5X1hERUNSRUYoc2Vjb25kKTsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7Ci0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmN0eC53cml0ZXIpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTE0MjA5LDcgKzE0OTY3LDcgQEAKIHZvaWQKIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKFB5T2JqZWN0ICoqcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcyA9ICpwOworICAgIFB5T2JqZWN0ICpzID0gKnA7CiAgICAgUHlPYmplY3QgKnQ7CiAjaWZkZWYgUHlfREVCVUcKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKQEAgLTE0MjM4LDEyICsxNDk5NiwxMiBAQAogICAgIHQgPSBQeURpY3RfR2V0SXRlbShpbnRlcm5lZCwgcyk7CiAgICAgUHlfRU5EX0FMTE9XX1JFQ1VSU0lPTgogCi0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoKnApOwotICAgICAgICAgICAgKnAgPSB0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKHQpIHsKKyAgICAgICAgUHlfSU5DUkVGKHQpOworICAgICAgICBQeV9ERUNSRUYoKnApOworICAgICAgICAqcCA9IHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fY3JpdGljYWwgPSAxOwogICAgIGlmIChQeURpY3RfU2V0SXRlbShpbnRlcm5lZCwgcywgcykgPCAwKSB7CkBAIC0xNDU0Miw3ICsxNTMwMCw3IEBACiBpbnQKIFB5X1VOSUNPREVfc3RybmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIsIHNpemVfdCBuKQogewotICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgdTEsIHUyOworICAgIFB5X1VOSUNPREUgdTEsIHUyOwogICAgIGZvciAoOyBuICE9IDA7IG4tLSkgewogICAgICAgICB1MSA9ICpzMTsKICAgICAgICAgdTIgPSAqczI7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggNDZhOTJiYi4uMWZkYzA5MiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAogICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDUsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIAogICAgIDIxLCAyMSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDUsIDIxLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNywgOCwgCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgOTYsIDUsIDUsIDUsIDUsIDU1LCAyNSwgMCwgMCwgNywgCiAgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAyNSwgMjUsIDI1LCAyLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjUsIDI1LCAyNSwgMjEsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTE4MjgsNyArMTgyOCw3IEBACiAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDEzMiwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAxOCwgMjUsIApAQCAtMTkxNSwxMSArMTkxNSwxMSBAQAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDUsIDUsIDYsIDMsIDMsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMiwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMiwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAogICAgIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDk1LCAyNDUsIDI2LCAyMiwgMjMsIDI0NiwgCiAgICAgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKICAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgNiwgNiwgNiwgNiwgMjUsIDYsIDYsIDYsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDExMywgNSwgNSwgCkBAIC0yNTkzLDEwICsyNTkzLDEwIEBACiAgICAgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTMzODAsNiArMzM4MCw3IEBACiAgICAgY2FzZSAweDEyNDM1OgogICAgIGNhc2UgMHgxMjQ0QToKICAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU2OgogICAgIGNhc2UgMHgxMjQ1OToKICAgICBjYXNlIDB4MUQzNjE6CiAgICAgY2FzZSAweDFEN0QwOgpAQCAtMzQyNyw2ICszNDI4LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CiAgICAgY2FzZSAweDMyNTE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMS4wOworICAgIGNhc2UgMHgxMjQzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxNjAwMC4wOwogICAgIGNhc2UgMHgzMjUyOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjIuMDsKICAgICBjYXNlIDB4MzI1MzoKQEAgLTM1MzQsNiArMzUzNyw3IEBACiAgICAgY2FzZSAweDEyNDNCOgogICAgIGNhc2UgMHgxMjQ0QjoKICAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDEyNDU3OgogICAgIGNhc2UgMHgxRDM2MjoKICAgICBjYXNlIDB4MUQ3RDE6CiAgICAgY2FzZSAweDFEN0RCOgpAQCAtMzcyMSw2ICszNzI1LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQyLjA7CiAgICAgY2FzZSAweDMyQjg6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0My4wOworICAgIGNhc2UgMHgxMjQzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzMjAwMC4wOwogICAgIGNhc2UgMHgzMkI5OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDQuMDsKICAgICBjYXNlIDB4MzJCQToKQEAgLTQyNzEsNyArNDI3Nyw3IEBACiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCiAgKi8KLWludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDA5OgpAQCAtNDI4Nyw3ICs0MjkzLDYgQEAKICAgICBjYXNlIDB4MDA4NToKICAgICBjYXNlIDB4MDBBMDoKICAgICBjYXNlIDB4MTY4MDoKLSAgICBjYXNlIDB4MTgwRToKICAgICBjYXNlIDB4MjAwMDoKICAgICBjYXNlIDB4MjAwMToKICAgICBjYXNlIDB4MjAwMjoKQEAgLTQzMTMsNyArNDMxOCw3IEBACiAgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCkKK2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDBBOgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwppbmRleCBiNDlkY2VlLi5jMDgzZjhmIDEwMDY0NAotLS0gYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYworKysgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwpAQCAtMzM4LDYgKzMzOCwxMSBAQAogfQogCiAKK3N0YXRpYyBQeU1lbWJlckRlZiB3ZWFrcmVmX21lbWJlcnNbXSA9IHsKKyAgICB7Il9fY2FsbGJhY2tfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVdlYWtSZWZlcmVuY2UsIHdyX2NhbGxiYWNrKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLworfTsKKwogUHlUeXBlT2JqZWN0CiBfUHlXZWFrcmVmX1JlZlR5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKQEAgLTM2OSw3ICszNzQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICB3ZWFrcmVmX21lbWJlcnMsICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwpkaWZmIC0tZ2l0IGEvUEMvVkM2L19jdHlwZXMuZHNwIGIvUEMvVkM2L19jdHlwZXMuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzk4ZWFjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fY3R5cGVzLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlcyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIgQ0ZHPSJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXMiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlcy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AgYi9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlYjIxNy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlc190ZXN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiIENGRz0iX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcCBiL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGMwY2RkLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2VsZW1lbnR0cmVlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiIENGRz0iX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfZWxlbWVudHRyZWUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWUucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXNpLmRzcCBiL1BDL1ZDNi9fbXNpLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhNjFiYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX21zaS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9tc2kiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X21zaSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIgQ0ZHPSJfbXNpIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9tc2kiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2lfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX21zaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwIGIvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI4NDcwLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9tdWx0aXByb2Nlc3NpbmciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXVsdGlwcm9jZXNzaW5nLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfbXVsdGlwcm9jZXNzaW5nLm1hayIgQ0ZHPSJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFkMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zb2NrZXQuZHNwIGIvUEMvVkM2L19zb2NrZXQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWVlOGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc29ja2V0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NvY2tldCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fc29ja2V0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zb2NrZXQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zb2NrZXQubWFrIiBDRkc9Il9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NvY2tldCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AgYi9QQy9WQzYvX3NxbGl0ZTMuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODY5OTM4Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3FsaXRlMyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fc3FsaXRlMyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIiBDRkc9Il9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3NxbGl0ZTMiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlMy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NzbC5kc3AgYi9QQy9WQzYvX3NzbC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YmI5OTMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zc2wuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3NsIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiIDB4MDEwNg0KLQ0KLUNGRz1fc3NsIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIiBDRkc9Il9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbC5leGUiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2wuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob24gYnVpbGRfc3NsLnB5Ig0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2xfZC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob25fZCAtdSBidWlsZF9zc2wucHkgLWQiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3NsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NzbC5tYWsgYi9QQy9WQzYvX3NzbC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3N2E2MTQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zc2wubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0hSUZERUYgREVCVUcKLU1PRFVMRT1fc3NsX2QucHlkCi1URU1QX0RJUj14ODYtdGVtcC1kZWJ1Zy9fc3NsCi1DRkxBR1M9L09kIC9aaSAvTURkIC9MRGQgL0RERUJVRyAvRF9ERUJVRyAvRFdJTjMyCi1MRkxBR1M9L25vZGVmYXVsdGxpYjoibXN2Y3J0IgotIUVMU0UKLU1PRFVMRT1fc3NsLnB5ZAotVEVNUF9ESVI9eDg2LXRlbXAtcmVsZWFzZS9fc3NsCi1DRkxBR1M9L094IC9NRCAvTEQgL0RXSU4zMgotTEZMQUdTPQotIUVORElGCi0KLUlOQ0xVREVTPS1JIC4uLy4uL0luY2x1ZGUgLUkgLi4gLUkgJChTU0xfRElSKS9pbmMzMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMgotTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgotCi1TT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliICQoU1NMX0xJQl9ESVIpL3NzbGVheTMyLmxpYgotCi0kKE1PRFVMRSk6ICQoU09VUkNFKSAuLi8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLSAgICBAaWYgbm90IGV4aXN0ICIkKFRFTVBfRElSKS8uIiBta2RpciAiJChURU1QX0RJUikiCi0gICAgY2wgL25vbG9nbyAkKFNPVVJDRSkgJChDRkxBR1MpIC9GbyQoVEVNUF9ESVIpXCQqLm9iaiAkKElOQ0xVREVTKSAvbGluayAvb3V0OiQoTU9EVUxFKSAkKExJQlMpICQoTEZMQUdTKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AgYi9QQy9WQzYvX3Rlc3RjYXBpLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhYTI1YS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3Rlc3RjYXBpLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3Rlc3RjYXBpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90ZXN0Y2FwaS5tYWsiIENGRz0iX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGVzdGNhcGkiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190ZXN0Y2FwaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGtpbnRlci5kc3AgYi9QQy9WQzYvX3RraW50ZXIuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDY5ZjU5Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fdGtpbnRlci5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGtpbnRlciIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiIENGRz0iX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl90a2ludGVyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlwuLlwuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NWcubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NWcubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODUubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3NzbC5weSBiL1BDL1ZDNi9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YWYwODQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgbW9kdWxlIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgX3NzbC5weWQgaXRzZWxmLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WQzYgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIHNzbCBQeXRob24gZXh0ZW5zaW9uCi0jIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi0jIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKLSMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLSMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgotIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGZpeF9tYWtlZmlsZShtYWtlZmlsZSk6Ci0gICAgIiIiRml4IHNvbWUgc3R1ZmYgaW4gYWxsIG1ha2VmaWxlcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtYWtlZmlsZSkgYXMgZmluOgotICAgICAgICBsaW5lcyA9IGZpbi5yZWFkbGluZXMoKQotICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEVSTD0iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDUD0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIkNQPWNvcHlcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiTUtESVI9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJNS0RJUj1ta2RpclxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDRkxBRz0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgZm9yIGFsZ28gaW4gKCJSQzUiLCAiTURDMiIsICJJREVBIik6Ci0gICAgICAgICAgICAgICAgICAgIG5vYWxnbyA9ICIgLURPUEVOU1NMX05PXyVzIiAlIGFsZ28KLSAgICAgICAgICAgICAgICAgICAgaWYgbm9hbGdvIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBub2FsZ28KLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICdcbicKLSAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBkZWJ1ZyA9ICItZCIgaW4gc3lzLmFyZ3YKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgMTogIyBXaW4zMgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgY29uZmlndXJlICs9ICIgbm8taWRlYSBuby1yYzUgbm8tbWRjMiIKLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQotICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsOgotICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICMgTG9vayBmb3IgU1NMIDMgbGV2ZWxzIHVwIGZyb20gUEMvVkM2IC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGZpeF9tYWtlZmlsZShtYWtlZmlsZSkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKLQotICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQotICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCi0gICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgICMgQW5kIGZpbmFsbHksIHdlIGNhbiBidWlsZCB0aGUgX3NzbCBtb2R1bGUgaXRzZWxmIGZvciBQeXRob24uCi0gICAgZGVmcyA9ICJTU0xfRElSPSVzIiAlIChzc2xfZGlyLCkKLSAgICBpZiBkZWJ1ZzoKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiICIgKyAiREVCVUc9MSIKLSAgICByYyA9IG9zLnN5c3RlbSgnbm1ha2UgL25vbG9nbyAtZiBfc3NsLm1hayAnICsgZGVmcyArICIgIiArIG1ha2VfZmxhZ3MpCi0gICAgc3lzLmV4aXQocmMpCi0KLWlmIF9fbmFtZV9fPT0nX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkgYi9QQy9WQzYvYnVpbGRfdGtpbnRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjYTkyYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnVpbGRfdGtpbnRlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHN1YnByb2Nlc3MKLQotVENMX01BSk9SID0gOAotVENMX01JTk9SID0gNQotVENMX1BBVENIID0gMgotCi1USVhfTUFKT1IgPSA4Ci1USVhfTUlOT1IgPSA0Ci1USVhfUEFUQ0ggPSAzCi0KLWRlZiBhYnNwYXRoKG5hbWUpOgotICAgIHBhciA9IG9zLnBhdGgucGFyZGlyCi0gICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oX19maWxlX18sIHBhciwgcGFyLCBwYXIsIHBhciwgbmFtZSkpCi0KLVRDTF9ESVIgPSBhYnNwYXRoKCJ0Y2wlZC4lZC4lZCIgJSAoVENMX01BSk9SLCBUQ0xfTUlOT1IsIFRDTF9QQVRDSCkpCi1US19ESVIgID0gYWJzcGF0aCgidGslZC4lZC4lZCIgICUgKFRDTF9NQUpPUiwgVENMX01JTk9SLCBUQ0xfUEFUQ0gpKQotVElYX0RJUiA9IGFic3BhdGgoInRpeCVkLiVkLiVkIiAlIChUSVhfTUFKT1IsIFRJWF9NSU5PUiwgVElYX1BBVENIKSkKLU9VVF9ESVIgPSBhYnNwYXRoKCJ0Y2x0ayIpCi0KLWRlZiBoYXZlX2FyZ3MoKmEpOgotICAgIHJldHVybiBhbnkocyBpbiBzeXMuYXJndlsxOl0gZm9yIHMgaW4gYSkKLQotZGVmIGVudGVyKGRpcik6Ci0gICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGRpciwgIndpbiIpKQotCi1kZWYgbWFpbigpOgotICAgIGRlYnVnID0gaGF2ZV9hcmdzKCItZCIsICItLWRlYnVnIikKLSAgICBjbGVhbiA9IGhhdmVfYXJncygiY2xlYW4iKQotICAgIGluc3RhbGwgPSBoYXZlX2FyZ3MoImluc3RhbGwiKQotICAgIHRjbCA9IGhhdmVfYXJncygidGNsIikKLSAgICB0ayA9IGhhdmVfYXJncygidGsiKQotICAgIHRpeCA9IGhhdmVfYXJncygidGl4IikKLSAgICBpZiBub3QodGNsKSBhbmQgbm90KHRrKSBhbmQgbm90KHRpeCk6Ci0gICAgICAgIHRjbCA9IHRrID0gdGl4ID0gVHJ1ZQotCi0gICAgZGVmIG5tYWtlKG1ha2VmaWxlLCAqYSk6Ci0gICAgICAgIGFyZ3MgPSBbIm5tYWtlIiwgIi9ub2xvZ28iLCAiL2YiLCBtYWtlZmlsZSwgIkRFQlVHPSVkIiAlIGRlYnVnXQotICAgICAgICBhcmdzLmV4dGVuZChhKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoYXJncykKLQotICAgIGlmIHRjbDoKLSAgICAgICAgZW50ZXIoVENMX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RjbCgqYSk6Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90Y2woImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGNsKCJpbnN0YWxsIiwgIklOU1RBTExESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90Y2woKQotCi0gICAgaWYgdGs6Ci0gICAgICAgIGVudGVyKFRLX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RrKCphKToKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJUQ0xESVI9IiArIFRDTF9ESVIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RrKCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RrKCJpbnN0YWxsIiwgIklOU1RBTExESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90aygpCi0KLSAgICBpZiB0aXg6Ci0gICAgICAgIGVudGVyKFRJWF9ESVIpCi0gICAgICAgIGRlZiBubWFrZV90aXgoKmEpOgotICAgICAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLAotICAgICAgICAgICAgICAgICAgIlRDTF9NQUpPUj0lZCIgJSBUQ0xfTUFKT1IsCi0gICAgICAgICAgICAgICAgICAiVENMX01JTk9SPSVkIiAlIFRDTF9NSU5PUiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfUEFUQ0g9JWQiICUgVENMX1BBVENILAotICAgICAgICAgICAgICAgICAgIk1BQ0hJTkU9SVg4NiIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RpeCgiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90aXgoImluc3RhbGwiLCAiSU5TVEFMTF9ESVI9IiArIE9VVF9ESVIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBubWFrZV90aXgoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J6Mi5kc3AgYi9QQy9WQzYvYnoyLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyY2JhZC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnoyLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iYnoyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPWJ6MiAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiIENGRz0iYnoyIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgImJ6MiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJiejIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC42IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejIucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZSAvbm9kZWZhdWx0bGliDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuNiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNlxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AgYi9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MzVlMTIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPW1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJtYWtlX3ZlcnNpb25pbmZvLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJtYWtlX3ZlcnNpb25pbmZvLm1hayIgQ0ZHPSJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIm1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm8uZXhlDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotDQotIi4uXHB5dGhvbm50X3JjLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQotCS5cbWFrZV92ZXJzaW9uaW5mby5leGUgPi4uXHB5dGhvbm50X3JjLmgNCi0NCi0jIEVuZCBDdXN0b20gQnVpbGQNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQotSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yY19kLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQotCS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSA+Li5ccHl0aG9ubnRfcmNfZC5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1ha2VfdmVyc2lvbmluZm8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9wY2J1aWxkLmRzdyBiL1BDL1ZDNi9wY2J1aWxkLmRzdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiMmViYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcGNidWlsZC5kc3cKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlcyI9Ii5cX2N0eXBlcy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2N0eXBlc190ZXN0Ij0iLlxfY3R5cGVzX3Rlc3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2VsZW1lbnR0cmVlIj0iLlxfZWxlbWVudHRyZWUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX21zaSI9Ii5cX21zaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX211bHRpcHJvY2Vzc2luZyI9Ii5cX211bHRpcHJvY2Vzc2luZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NvY2tldCI9Ii5cX3NvY2tldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NxbGl0ZTMiPSIuXF9zcWxpdGUzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zc2wiPSIuXF9zc2wuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgdzl4cG9wZW4NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3Rlc3RjYXBpIj0iLlxfdGVzdGNhcGkuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90a2ludGVyIj0iLlxfdGtpbnRlci5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiYnoyIj0iLlxiejIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibWFrZV92ZXJzaW9uaW5mbyI9Ii5cbWFrZV92ZXJzaW9uaW5mby5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweWV4cGF0Ij0iLlxweWV4cGF0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob24iPSIuXHB5dGhvbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uY29yZSI9Ii5ccHl0aG9uY29yZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIG1ha2VfdmVyc2lvbmluZm8NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9udyI9Ii5ccHl0aG9udy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic2VsZWN0Ij0iLlxzZWxlY3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInVuaWNvZGVkYXRhIj0iLlx1bmljb2RlZGF0YS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAidzl4cG9wZW4iPSIuXHc5eHBvcGVuLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIndpbnNvdW5kIj0iLlx3aW5zb3VuZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1HbG9iYWw6DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTwzPg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi0NCmRpZmYgLS1naXQgYS9QQy9WQzYvcHlleHBhdC5kc3AgYi9QQy9WQzYvcHlleHBhdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MWM5ZWYuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5ZXhwYXQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHlleHBhdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weWV4cGF0IC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiIENGRz0icHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5ZXhwYXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiSEFWRV9FWFBBVF9IIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EIEJZVEVPUkRFUj0xMjM0IC9EIFhNTF9DT05URVhUX0JZVEVTPTEwMjQgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHlleHBhdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbi5kc3AgYi9QQy9WQzYvcHl0aG9uLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4Yjc3Mi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9uLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPXB5dGhvbiAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIgQ0ZHPSJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi4uLlxcSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdGFjazoweDIwMDAwMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob25fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5Y29uLmljbw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5dGhvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9uY29yZS5kc3AgYi9QQy9WQzYvcHl0aG9uY29yZS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTk4ZDEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsNzgwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uY29yZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weXRob25jb3JlIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiIENGRz0icHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbmNvcmUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiVVNFX0RMX0VYUE9SVCIgL1lYIC9GRCAvWm0yMDAgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24zMy5kbGwiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiVVNFX0RMX0VYUE9SVCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMzNfZC5kbGwiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Nzdi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9qc29uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbHNwcm9mLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbWF0aC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9zdWJwcm9jZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGltZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxfd2FybmluZ3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYWNjdS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxhY2NlbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdGV4aXRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGJpdHNldC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjYXBzdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNldmFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29kZWNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvbXBpbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxjb25maWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGRsX250LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR0b2EuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHlubG9hZF93aW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGVycm9ycy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmaWxldXRpbHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnJvemVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZ1dHVyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRhcmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLSMgQUREIENQUCAvRCBCVUlMRD00Ng0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldG9wdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGdldHBhdGhwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldHZlcnNpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ3JhbWluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyMS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnRkbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGxpc3Rub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1hcnNoYWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbXN2Y3J0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG15c3RydG91bC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxub2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xvcGVyYXRvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxwYXJzZXRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxwZWVwaG9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlhcmVuYS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5ZnBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5bWF0aC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0YXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RyY21wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RydG9kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9udC5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHl0aG9ucnVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGltZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxyYW5kb20uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeW10YWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3lzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRocmVhZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cdHJhY2ViYWNrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5yZWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9udy5kc3AgYi9QQy9WQzYvcHl0aG9udy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YzMyNWMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbncuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9udyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz1weXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9udy5tYWsiIENGRz0icHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbnciDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbndfZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9udyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxXaW5NYWluLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcmVhZG1lLnR4dCBiL1BDL1ZDNi9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc4Zjg1Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDYuMCBvciA1LjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGZvciBXaW4zMiBwbGF0Zm9ybXMsIGUuZy4gV2luZG93cwotMjAwMCBhbmQgWFAuICBJdCByZXF1aXJlcyBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2Lnggb3IgNS54IGFuZCBQbGF0Zm9ybQotU0RLIEZlYnJ1YXJ5IDIwMDMgRWRpdGlvbiAoQ29yZSBTREspLgotKEZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vcmVhZG1lLnR4dC4pCi0KLUFsbCB5b3UgbmVlZCB0byBkbyBpcyBvcGVuIHRoZSB3b3Jrc3BhY2UgInBjYnVpbGQuZHN3IiBpbiBNU1ZDKyssIHNlbGVjdAotdGhlIERlYnVnIG9yIFJlbGVhc2Ugc2V0dGluZyAodXNpbmcgQnVpbGQgLT4gU2V0IEFjdGl2ZSBDb25maWd1cmF0aW9uLi4uKSwKLWFuZCBidWlsZCB0aGUgcHJvamVjdHMuCi0KLVRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6Ci0KLTEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24zMy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKLQotMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKLSAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCi0KLTMpIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgYXMgZGVzaXJlZCBvciBuZWVkZWQgKG5vdGU6ICB5b3UgcHJvYmFibHkgZG9uJ3QKLSAgIHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgYW4KLSAgIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3Igc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzCi0gICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudDsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHB5ZXhwYXRfZC5weWQsIGFuZCBzbyBvbi4KLQotU1VCUFJPSkVDVFMKLS0tLS0tLS0tLS0tCi1UaGVzZSBzdWJwcm9qZWN0cyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3guICBTdWJwcm9qZWN0cyBvdGhlciB0aGFuIHRoZQotbWFpbiBvbmVzIChweXRob25jb3JlLCBweXRob24sIHB5dGhvbncpIGdlbmVyYWxseSBidWlsZCBhIERMTCAocmVuYW1lZCB0bwotLnB5ZCkgZnJvbSBhIHNwZWNpZmljIG1vZHVsZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgY29kZQotc3VwcG9ydGluZyB0aGF0IG1vZHVsZSB1bmxlc3MgdGhleSBpbXBvcnQgdGhlIG1vZHVsZS4KLQotcHl0aG9uY29yZQotICAgIC5kbGwgYW5kIC5saWIKLXB5dGhvbgotICAgIC5leGUKLXB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKLV9tc2kKLSAgICBfbXNpLmMuIFlvdSBuZWVkIHRvIGluc3RhbGwgV2luZG93cyBJbnN0YWxsZXIgU0RLIHRvIGJ1aWxkIHRoaXMgbW9kdWxlLgotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLXB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwotc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKLXVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQotd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKLQotVGhlIGZvbGxvd2luZyBzdWJwcm9qZWN0cyB3aWxsIGdlbmVyYWxseSBOT1QgYnVpbGQgb3V0IG9mIHRoZSBib3guICBUaGV5Ci13cmFwIGNvZGUgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBiYXNlCi1wYWNrYWdlcyBmaXJzdCBhbmQgdW5wYWNrIHRoZW0gaW50byBzaWJsaW5ncyBvZiBQQ2J1aWxkcydzIHBhcmVudAotZGlyZWN0b3J5OyBmb3IgZXhhbXBsZSwgaWYgeW91ciBQQ2J1aWxkIGlzICAuLi4uLi4uXGRpc3Rcc3JjXFBDYnVpbGRcLAotdW5wYWNrIGludG8gbmV3IHN1YmRpcmVjdG9yaWVzIG9mIGRpc3RcLgotCi1fdGtpbnRlcgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFJlcXVpcmVzIGJ1aWxkaW5nCi0gICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjUuMi4KLQotICAgIEdldCBzb3VyY2UKLSAgICAtLS0tLS0tLS0tCi0gICAgSW4gdGhlIGRpc3QgZGlyZWN0b3J5LCBydW4KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjIuMSB0Y2w4LjUuMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNS4yLjAgdGs4LjUuMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RpeC04LjQuMy4xIHRpeDguNC4zCi0KLSAgICBEZWJ1ZyBCdWlsZAotICAgIC0tLS0tLS0tLS0tCi0gICAgVG8gYnVpbGQgZGVidWcgdmVyc2lvbiwgYWRkIERFQlVHPTEgdG8gYWxsIG5tYWtlIGNhbGwgYmVsbG93LgotCi0gICAgQnVpbGQgVGNsIGZpcnN0IChkb25lIGhlcmUgdy8gTVNWQyA2IG9uIFdpbjJLKQotICAgIC0tLS0tLS0tLS0tLS0tLQotICAgIElmIHlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBoYXZlIHN0cnVjdCBfc3RhdDY0LCB5b3UgbmVlZCB0byBhcHBseQotICAgIHRjbDg1Mi5wYXRjaCBpbiB0aGlzIGRpcmVjdG9yeSB0byBkaXN0XHRjbDguNS4yXGdlbmVyaWNcdGNsLmguCi0KLSAgICBjZCBkaXN0XHRjbDguNS4yXHdpbgotICAgIHJ1biB2Y3ZhcnMzMi5iYXQKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ci0KLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgMjQyNDIgICBQYXNzZWQgIDIzMzU4ICAgU2tpcHBlZCA4NzcgICAgIEZhaWxlZCAgNwotICAgICAgICBTb3VyY2VkIDEzNyBUZXN0IEZpbGVzLgotICAgICAgICBGaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IGV4ZWMudGVzdCBodHRwLnRlc3QgaW8udGVzdCBtYWluLnRlc3Qgc3RyaW5nLnRlc3Qgc3RyaQotICAgICAgICBuZ09iai50ZXN0Ci0KLSAgICBCdWlsZCBUawotICAgIC0tLS0tLS0tCi0gICAgY2QgZGlzdFx0azguNS4yXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjUuMgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjUuMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIFhYWCBJIGhhdmUgbm8gaWRlYSB3aGV0aGVyICJubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0IiBwYXNzZWQgb3IKLSAgICBYWFggZmFpbGVkLiAgSXQgcG9wcGVkIHVwIHRvbnMgb2YgbGl0dGxlIHdpbmRvd3MsIGFuZCBkaWQgbG90cyBvZgotICAgIFhYWCBzdHVmZiwgYW5kIG5vdGhpbmcgYmxldyB1cC4KLQotICAgIEJ1aWxkIFRpeAotICAgIC0tLS0tLS0tLQotICAgIGNkIGRpc3RcdGl4OC40LjNcd2luCi0gICAgbm1ha2UgLWYgcHl0aG9uLm1hayBUQ0xfTUFKT1I9OCBUQ0xfTUlOT1I9NSBUQ0xfUEFUQ0g9MiBNQUNISU5FPUlYODYgREVCVUc9MAotICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgVENMX01BSk9SPTggVENMX01JTk9SPTUgVENMX1BBVENIPTIgTUFDSElORT1JWDg2IERFQlVHPTAgSU5TVEFMTF9ESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi1iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6MiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgIEFuZCByZXF1aXJlcyBidWlsZGluZyBiejIgZmlyc3QuCi0KLSAgICBjZCBkaXN0XGJ6aXAyLTEuMC42Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUubXNjCi0KLSAgICBBbGwgb2YgdGhpcyBtYW5hZ2VkIHRvIGJ1aWxkIGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIsIHdoaWNoIHRoZSBQeXRob24KLSAgICBwcm9qZWN0IGxpbmtzIGluLgotCi0KLV9zcWxpdGUzCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIFNRTGl0ZSBsaWJyYXJ5LgotICAgIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotICAgIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgICAKLSAgICBUbyB1c2UgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBQeXRob24gYnVpbGQgdHJlZSwgY29weSBzcWxpdGUzLmRsbCBpbnRvCi0gICAgdGhlIFBDL1ZDNiBmb2xkZXIuCi0KLQotX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KLQotICAgIEdldCB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlIGZvciBPcGVuU1NMIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZwotCi0gICAgWW91IChwcm9iYWJseSkgZG9uJ3Qgd2FudCB0aGUgImVuZ2luZSIgY29kZS4gIEZvciBleGFtcGxlLCBkb24ndCBnZXQKLSAgICAgICAgb3BlbnNzbC1lbmdpbmUtMC45LjZnLnRhci5negotCi0gICAgVW5wYWNrIGludG8gdGhlICJkaXN0IiBkaXJlY3RvcnksIHJldGFpbmluZyB0aGUgZm9sZGVyIG5hbWUgZnJvbQotICAgIHRoZSBhcmNoaXZlIC0gZm9yIGV4YW1wbGUsIHRoZSBsYXRlc3Qgc3RhYmxlIE9wZW5TU0wgd2lsbCBpbnN0YWxsIGFzCi0gICAgICAgIGRpc3Qvb3BlbnNzbC0xLjAuMWUKLQotICAgIFlvdSBuZWVkIHRvIHVzZSB2ZXJzaW9uIDEuMC4xZSBvZiBPcGVuU1NMLgotCi0gICAgWW91IGNhbiBpbnN0YWxsIHRoZSBOQVNNIGFzc2VtYmxlciBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cubmFzbS51cy8KLSAgICBmb3IgeDg2IGJ1aWxkcy4gIFB1dCBuYXNtdy5leGUgYW55d2hlcmUgaW4geW91ciBQQVRILgotICAgIE5vdGU6IHJlY2VudCByZWxlYXNlcyBvZiBuYXNtIG9ubHkgaGF2ZSBuYXNtLmV4ZS4gSnVzdCByZW5hbWUgaXQgdG8gCi0gICAgbmFzbXcuZXhlLgotCi0gICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCi0gICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20gCi0gICAgcHl0aG9uJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LiBUaGUgc3ZuIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWxkCi0gICAgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLQotICAgIFRoZSBNU1ZDIHByb2plY3Qgc2ltcGx5IGludm9rZXMgUEMvVkM2L2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDL1ZDNi9ybXB5Yy5weSBiL1BDL1ZDNi9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhkNjgyMy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi8uLi9MaWIiKQotcHJpbnQgbnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIgpkaWZmIC0tZ2l0IGEvUEMvVkM2L3J0LmJhdCBiL1BDL1ZDNi9ydC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE5ZWFkZDcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUByZW0gUnVuIFRlc3RzLiAgUnVuIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCi1AcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotQHJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLUByZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4KLUByZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotQHJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotQHJlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4KLUByZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1AcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1AcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZAotQHJlbSBydW5zCi1AcmVtICAgICBweXRob25fZCAtTyAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotQHJlbSB0d2ljZSwgYW5kCi1AcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1AcmVtIHJ1bnMKLUByZW0gICAgIHB5dGhvbl9kIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkKLUByZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotQHNldCBfZXhlPXB5dGhvbgotQHNldCBfcW1vZGU9bm8KLUBzZXQgX2Rhc2hPPQotQGdvdG8gQ2hlY2tPcHRzCi06QWdhaW4KLUBzaGlmdAotOkNoZWNrT3B0cwotQGlmICIlMSI9PSItTyIgc2V0IF9kYXNoTz0tTwotQGlmICIlMSI9PSItTyIgZ290byBBZ2FpbgotQGlmICIlMSI9PSItcSIgc2V0IF9xbW9kZT15ZXMKLUBpZiAiJTEiPT0iLXEiIGdvdG8gQWdhaW4KLUBpZiAiJTEiPT0iLWQiIHNldCBfZXhlPXB5dGhvbl9kCi1AaWYgIiUxIj09Ii1kIiBnb3RvIEFnYWluCi1AaWYgIiVfcW1vZGUlIj09InllcyIgZ290byBRbW9kZQotQGVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotQCVfZXhlJSBybXB5Yy5weQotJV9leGUlICVfZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1AZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1AcGF1c2UKLTpRbW9kZQotJV9leGUlICVfZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1Ac2V0IF9leGU9Ci1Ac2V0IF9xbW9kZT0KLUBzZXQgX2Rhc2hPPQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3NlbGVjdC5kc3AgYi9QQy9WQzYvc2VsZWN0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlNTI4Yy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvc2VsZWN0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ic2VsZWN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXNlbGVjdCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiIENGRz0ic2VsZWN0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJzZWxlY3QiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3NlbGVjdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvb3V0OiIuL3NlbGVjdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi90Y2w4NTIucGF0Y2ggYi9QQy9WQzYvdGNsODUyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY3ODBhLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi90Y2w4NTIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0tLS0gdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlGcmkgSnVuIDEzIDAzOjM1OjM5IDIwMDgKLSsrKyB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCVN1biBKYW4gIDQgMTY6NTI6MzAgMjAwOQotQEAgLTM2Nyw3ICszNjcsNyBAQAotIHR5cGVkZWYgc3RydWN0IHN0YXRpNjQgVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGRlZmluZSBUQ0xfTExfTU9ESUZJRVIJIkwiCi0gIyAgICAgIGVsc2UgLyogX19CT1JMQU5EQ19fICovCi0tIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAmJiAhZGVmaW5lZChfTV9JWDg2KQotKyMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgLyomJiAhZGVmaW5lZChfTV9JWDg2KSovCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXRpNjQJVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGVsc2UKLSB0eXBlZGVmIHN0cnVjdCBfc3RhdDY0CVRjbF9TdGF0QnVmOwpkaWZmIC0tZ2l0IGEvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcCBiL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNGRiNjcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idW5pY29kZWRhdGEiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9dW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIgQ0ZHPSJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInVuaWNvZGVkYXRhIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHVuaWNvZGVkYXRhIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGFfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvdzl4cG9wZW4uZHNwIGIvUEMvVkM2L3c5eHBvcGVuLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2NDAzYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdzl4cG9wZW4uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3OXhwb3BlbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz13OXhwb3BlbiAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIiBDRkc9Inc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIgL25vbG9nbyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93OXhwb3Blbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHc5eHBvcGVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvd2luc291bmQuZHNwIGIvUEMvVkM2L3dpbnNvdW5kLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwOWI5Yi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvd2luc291bmQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3aW5zb3VuZCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz13aW5zb3VuZCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIiBDRkc9IndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAid2luc291bmQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdpbm1tLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcd2luc291bmQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHdpbnNvdW5kLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9Vbmluc3RhbC53c2UgYi9QQy9WUzcuMS9Vbmluc3RhbC53c2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmRkMzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvVW5pbnN0YWwud3NlCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLURvY3VtZW50IFR5cGU6IFdTRQotaXRlbTogR2xvYmFsCi0gIFZlcnNpb249OC4xNAotICBGbGFncz0wMDAwMDEwMAotICBTcGxpdD0xNDIwCi0gIExhbmd1YWdlcz02NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAotICBDb3B5IERlZmF1bHQ9MQotICBKYXBhbmVzZSBGb250IE5hbWU9TVMgR290aGljCi0gIEphcGFuZXNlIEZvbnQgU2l6ZT0xMAotICBTdGFydCBHcmFkaWVudD0wIDAgMjU1Ci0gIEVuZCBHcmFkaWVudD0wIDAgMAotICBXaW5kb3dzIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAxMDAwCi0gIE1lc3NhZ2UgRm9udD1NUyBTYW5zIFNlcmlmCi0gIEZvbnQgU2l6ZT04Ci0gIERpc2sgTGFiZWw9R0xCUwotICBEaXNrIEZpbGVuYW1lPUlOU1RBTEwKLSAgUGF0Y2ggRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICBQYXRjaCBUaHJlc2hvbGQ9MjAwCi0gIFBhdGNoIE1lbW9yeT00MDk2Ci0gIFBlci1Vc2VyIFZlcnNpb24gSUQ9MQotICBDcnlzdGFsIEZvcm1hdD0xMDExMTEwMDEwMTEwMDAwMDAxMDAwMTAwMTAwMTAwMQotICBTdGVwIFZpZXc9JlByb3BlcnRpZXMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIFRoaXMgaXMgYSB2ZXJiYXRpbSBjb3B5IG9mIFdpc2UncyBVbmluc3RhbC53c2UsIGFsdGVyZWQgYXQgdGhlIGVuZCB0byB3cml0ZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD11bmluc3RhbGwgaW5mbyB1bmRlciBIS0NVIGluc3RlYWQgb2YgSEtMTSBpZiBvdXIgRE9BRE1JTiB2YXIgaXMgZmFsc2UuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgU3VwcG9ydCBmb3IgdW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbi4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lX0xPR0ZJTEVfUEFUSF8lCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglXFVOV0lTRS5FWEUKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0VYRV9PU19UWVBFXwotICBWYWx1ZT1XSU4zMgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXFVOV0lTRTMyLkVYRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRWxzZQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXFVOV0lTRS5FWEUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIFN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9MQU5HCi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9MQU5HCi0gIFZhbHVlPSVVTklOU1RBTExfTEFORyVcVU5XSVNFLklOSQotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0NfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19EX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRFVQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREVVCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1GCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5QVEcKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0ZfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlBURwotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19HX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUgKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1JCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JVEEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0lfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklUQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREFOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19KX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5EQU4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUsKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZJTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfS19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRklOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1MCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JU0wKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0xfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklTTAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTkxECi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19NX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OTEQKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU4KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5PUgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTk9SCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1PCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5TVkUKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX09fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlNWRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9UAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSlBOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19QX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5KUE4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgdGhlIGFkZC9yZW1vdmUgb3IgdW5pbnN0YWxsIGljb24KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfUEFUSAotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1JTlNUX0xPR19QQVRICi0gIFZhbHVlPSVfTE9HRklMRV9QQVRIXyUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHVuaW5zdGFsbCBpbmZvIHVuZGVyIEhLTE0uICBUaGlzIGlmL2Vsc2UvZW5kIGJsb2NrIGFkZGVkIGJ5IFRpbS4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lQVBQVElUTEUlCi0gIFZhbHVlIE5hbWU9RGlzcGxheU5hbWUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLSAgTmV3IFZhbHVlPQotICBWYWx1ZSBOYW1lPVVuaW5zdGFsbFN0cmluZwotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHNhbWUsIGJ1dCB3cml0ZSB1bmRlciBIS0NVIGluc3RlYWQuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JUFQUFRJVExFJQotICBWYWx1ZSBOYW1lPURpc3BsYXlOYW1lCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi0gIE5ldyBWYWx1ZT0KLSAgVmFsdWUgTmFtZT1Vbmluc3RhbGxTdHJpbmcKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBBZGQgUHJvZ01hbiBJY29uCi0gIEdyb3VwPSVHUk9VUCUKLSAgSWNvbiBOYW1lPVVuaW5zdGFsbCAlQVBQVElUTEUlCi0gIENvbW1hbmQgTGluZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMTExMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0yCi0gIGl0ZW06IEtleQotICAgIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICAgIE5ldyBWYWx1ZT0lQ09NUEFOWSUKLSAgICBWYWx1ZSBOYW1lPVJlZ0NvbXBhbnkKLSAgICBSb290PTIKLSAgZW5kCi0gIGl0ZW06IEtleQotICAgIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICAgIE5ldyBWYWx1ZT0lTkFNRSUKLSAgICBWYWx1ZSBOYW1lPVJlZ093bmVyCi0gICAgUm9vdD0yCi0gIGVuZAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTlkODguLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9jdHlwZXMiDQotCVByb2plY3RHVUlEPSJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlcyINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IkZBTFNFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IkZBTFNFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIC9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMiPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW42NC5hc20iPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCUNvbW1hbmRMaW5lPSJhbWQ2NF9tbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7DQotIg0KLQkJCQkJT3V0cHV0cz0iJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGU4YTJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9jdHlwZXNfdGVzdCINCi0JUHJvamVjdEdVSUQ9Ins4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qIGIvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyYjlkOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfZWxlbWVudHRyZWUiDQotCVByb2plY3RHVUlEPSJ7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfSINCi0JU2NjUHJvamVjdE5hbWU9Il9lbGVtZW50dHJlZSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWVfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWVfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWVfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX21zaS52Y3Byb2ogYi9QQy9WUzcuMS9fbXNpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmZDQ0Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fbXNpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX21zaSINCi0JUHJvamVjdEdVSUQ9InsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX21zaSINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2lfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgYnVmZmVyb3ZlcmZsb3dVLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfbXNpLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvaiBiL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVkOGU0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc29ja2V0Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX3NvY2tldCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXRfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY3ZDk5MS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0iDQotCVNjY1Byb2plY3ROYW1lPSJfc3FsaXRlMyINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlM19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcaWE2NFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxhbWQ2NFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlMy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zcWxpdGUzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zc2wubWFrIGIvUEMvVlM3LjEvX3NzbC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzZhNjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NzbC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1FWFRSQV9MSUJTPQotCi0hSUZERUYgREVCVUcKLVNVRkZJWD1fZC5weWQKLVRFTVA9eDg2LXRlbXAtZGVidWcvCi1DRkxBR1M9L09kIC9aaSAvTURkIC9MRGQgL0RERUJVRyAvRF9ERUJVRyAvRFdJTjMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyLmRiZwotIUVMU0UKLVNVRkZJWD0ucHlkCi1URU1QPXg4Ni10ZW1wLXJlbGVhc2UvCi1DRkxBR1M9L094IC9NRCAvTEQgL0RXSU4zMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMgotIUVORElGCi0KLUlOQ0xVREVTPS1JIC4uLy4uL0luY2x1ZGUgLUkgLi4vLi4vUEMgLUkgJChTU0xfRElSKS9pbmMzMgotCi1TU0xfTElCUz1nZGkzMi5saWIgd3NvY2szMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL0xJQlBBVEg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliIHNzbGVheTMyLmxpYgotU1NMX1NPVVJDRT0uLi8uLi9Nb2R1bGVzL19zc2wuYyAKLQotSEFTSF9MSUJTPWdkaTMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbGlicGF0aDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIKLUhBU0hfU09VUkNFPS4uLy4uL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgCi0KLWFsbDogX3NzbCQoU1VGRklYKSBfaGFzaGxpYiQoU1VGRklYKQotCi0jIFNwbGl0IGNvbXBpbGUvbGluayBpbnRvIHR3byBzdGVwcyB0byBiZXR0ZXIgc3VwcG9ydCBWU0V4dENvbXAKLV9zc2wkKFNVRkZJWCk6ICQoU1NMX1NPVVJDRSkgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliICQoU1NMX0xJQl9ESVIpL3NzbGVheTMyLmxpYiAuLi8uLi9QQy8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLQlAaWYgbm90IGV4aXN0ICIkKFRFTVApL19zc2wvLiIgbWtkaXIgIiQoVEVNUCkvX3NzbCIKLQljbCAvbm9sb2dvIC9jICQoU1NMX1NPVVJDRSkgJChDRkxBR1MpIC9GbyQoVEVNUClcX3NzbFwkKi5vYmogJChJTkNMVURFUykKLQlsaW5rIC9ub2xvZ28gQDw8Ci0gICAgICAgICAgICAgL2RsbCAvb3V0Ol9zc2wkKFNVRkZJWCkgJChURU1QKVxfc3NsXCQqLm9iaiAkKFNTTF9MSUJTKSAkKEVYVFJBX0xJQlMpCi08PAotCi1faGFzaGxpYiQoU1VGRklYKTogJChIQVNIX1NPVVJDRSkgJChTU0xfTElCX0RJUikvbGliZWF5MzIubGliIC4uLy4uL1BDLyouaCAuLi8uLi9JbmNsdWRlLyouaAotICAgIEBpZiBub3QgZXhpc3QgIiQoVEVNUCkvX2hhc2hsaWIvLiIgbWtkaXIgIiQoVEVNUCkvX2hhc2hsaWIiCi0gICAgY2wgL25vbG9nbyAvYyAkKEhBU0hfU09VUkNFKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpIC9GbyQoVEVNUClcX2hhc2hsaWJcJCoub2JqICQoSU5DTFVERVMpIAotICAgIGxpbmsgL25vbG9nbyBAPDwKLQkvZGxsIC9vdXQ6X2hhc2hsaWIkKFNVRkZJWCkgJChIQVNIX0xJQlMpICQoRVhUUkFfTElCUykgJChURU1QKVxfaGFzaGxpYlwkKi5vYmoKLTw8CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3NsLnZjcHJvaiBiL1BDL1ZTNy4xL19zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmQ2NWZlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zc2wiDQotCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQotCVNjY1Byb2plY3ROYW1lPSIiDQotCVNjY0xvY2FsUGF0aD0iIg0KLQlLZXl3b3JkPSJNYWtlRmlsZVByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2xfZC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGFzaG9wZW5zc2wuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk3ODQyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il90ZXN0Y2FwaSINCi0JU2NjUHJvamVjdE5hbWU9Il90ZXN0Y2FwaSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGlfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvaiBiL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3MzQxNi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il90a2ludGVyIg0KLQlTY2NQcm9qZWN0TmFtZT0iX3RraW50ZXIiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5cLi5cLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlcl9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQgYi9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE5YWNmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFRyeSB0byBmaW5kIHRoZSBBTUQ2NCBhc3NlbWJsZXIgYW5kIGNhbGwgaXQgd2l0aCB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLgotCi1zZXQgTUxFWEU9TWljcm9zb2Z0IFBsYXRmb3JtIFNES1xCaW5cV2luNjRceDg2XEFNRDY0XG1sNjQuRVhFCi0KLXJlbSBGb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZWUgYWxzbwotcmVtIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy93aW42NC93aW42NC93b3c2NF9pbXBsZW1lbnRhdGlvbl9kZXRhaWxzLmFzcAotCi1pZiBleGlzdCAiJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIgKAotICBzZXQgTUw2ND0iJVByb2dyYW1GaWxlcyVcJU1MRVhFJSIKLSkgZWxzZSBpZiBleGlzdCAiJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIgKAotICBzZXQgTUw2ND0iJVByb2dyYW1XNjQzMiVcJU1MRVhFJSIKLSkgZWxzZSAoCi0gIHNldCBNTDY0PW1sNjQuZXhlCi0pCi0KLSVNTDY0JSAlKgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YmUzYzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWlmICIlMSIgPT0gIlJlbGVhc2VBTUQ2NCIgY2FsbCAiJU1TU2RrJVxTZXRFbnYiIC9YUDY0IC9SRVRBSUwKLQotQGVjaG8gb2ZmCi1pZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCi0gIGlmICUxIEVRVSBEZWJ1ZyAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICApIEVMU0UgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICkKLSkKLSVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyCi0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5weSBiL1BDL1ZTNy4xL2J1aWxkX3NzbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU5ZjRlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIGFuZCBfaGFzaGxpYiBtb2R1bGVzIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgdGhlIGFjdHVhbCBfc3NsLnB5ZCBhbmQgX2hhc2hsaWIucHlkIERMTHMuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIF9zc2wgYW5kIF9oYXNobGliCi0jIFB5dGhvbiBleHRlbnNpb25zIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi1pbXBvcnQgb3MsIHN5cywgcmUKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4ocGVybCArICcgLWUgInVzZSBXaW4zMjsiJykKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQgIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IgotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCAiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQgIiAiLCBwCi0gICAgICAgIHByaW50ICIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIgotICAgIHByaW50ICIgUGxlYXNlIGluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGFwcGVhcnMgb24geW91ciBwYXRoIgotICAgIHByaW50ICJUaGUgUHl0aG9uIFNTTCBtb2R1bGUgd2FzIG5vdCBidWlsdCIKLSAgICByZXR1cm4gTm9uZQotCi0jIExvY2F0ZSB0aGUgYmVzdCBTU0wgZGlyZWN0b3J5IGdpdmVuIGEgZmV3IHJvb3RzIHRvIGxvb2sgaW50by4KLWRlZiBmaW5kX2Jlc3Rfc3NsX2Rpcihzb3VyY2VzKToKLSAgICBjYW5kaWRhdGVzID0gW10KLSAgICBmb3IgcyBpbiBzb3VyY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IGRvIG5vdCBhYnNwYXRoIHM7IHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgYW55Ci0gICAgICAgICAgICAjIGhpZ2hlciB1cCBkaXJlY3RvcnkgbmFtZSBoYXMgc3BhY2VzIGluIGl0LgotICAgICAgICAgICAgZm5hbWVzID0gb3MubGlzdGRpcihzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBmbmFtZXMgPSBbXQotICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgotICAgICAgICAgICAgZnFuID0gb3MucGF0aC5qb2luKHMsIGZuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcW4pIGFuZCBmbmFtZS5zdGFydHN3aXRoKCJvcGVuc3NsLSIpOgotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGZxbikKLSAgICAjIE5vdyB3ZSBoYXZlIGFsbCB0aGUgY2FuZGlkYXRlcywgbG9jYXRlIHRoZSBiZXN0LgotICAgIGJlc3RfcGFydHMgPSBbXQotICAgIGJlc3RfbmFtZSA9IE5vbmUKLSAgICBmb3IgYyBpbiBjYW5kaWRhdGVzOgotICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KCJbLi1dIiwgb3MucGF0aC5iYXNlbmFtZShjKSlbMTpdCi0gICAgICAgICMgZWcgLSBvcGVuc3NsLTAuOS43LWJldGExIC0gaWdub3JlIGFsbCAiYmV0YSIgb3IgYW55IG90aGVyIHF1YWxpZmllcnMKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSA0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGFydHMgPiBiZXN0X3BhcnRzOgotICAgICAgICAgICAgYmVzdF9wYXJ0cyA9IHBhcnRzCi0gICAgICAgICAgICBiZXN0X25hbWUgPSBjCi0gICAgaWYgYmVzdF9uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCAiRm91bmQgYW4gU1NMIGRpcmVjdG9yeSBhdCAnJXMnIiAlIChiZXN0X25hbWUsKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbWFzbSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJEZWJ1ZyI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX21hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcZDMyLm1hayIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlSXRhbml1bSI6Ci0gICAgICAgIGFyY2ggPSAiaWE2NCIKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRJIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0aSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICAgICAgb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfSVRBTklVTSIKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlQU1ENjQiOgotICAgICAgICBhcmNoPSJhbWQ2NCIKLSAgICAgICAgZGVidWc9RmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0QSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGEiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgICAgIG9zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgcHJpbnQgIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICMgTG9vayBmb3IgU1NMIDIgbGV2ZWxzIHVwIGZyb20gcGNidWlsZCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBwcmludCAiQ3JlYXRpbmcgdGhlIG1ha2VmaWxlcy4uLiIKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBhcmNoPT0ieDg2IiBhbmQgZGVidWc6Ci0gICAgICAgICAgICAgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIHByaW50ICJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZAotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQgIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIgotICAgICAgICAgICAgcHJpbnQgcmMKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICAjIEFuZCBmaW5hbGx5LCB3ZSBjYW4gYnVpbGQgdGhlIF9zc2wgbW9kdWxlIGl0c2VsZiBmb3IgUHl0aG9uLgotICAgIGRlZnMgPSAiU1NMX0RJUj1cIiVzXCIiICUgKHNzbF9kaXIsKQotICAgIGlmIGRlYnVnOgotICAgICAgICBkZWZzID0gZGVmcyArICIgIiArICJERUJVRz0xIgotICAgIGlmIGFyY2ggaW4gKCdhbWQ2NCcsICdpYTY0Jyk6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiBFWFRSQV9DRkxBR1M9L0dTLSBFWFRSQV9MSUJTPWJ1ZmZlcm92ZXJmbG93VS5saWIiCi0gICAgbWFrZUNvbW1hbmQgPSAnbm1ha2UgL25vbG9nbyAtZiBfc3NsLm1hayAnICsgZGVmcyArICIgIiArIG1ha2VfZmxhZ3MKLSAgICBwcmludCAiRXhlY3V0aW5nOiIsIG1ha2VDb21tYW5kCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgc3lzLmV4aXQocmMpCi0KLWlmIF9fbmFtZV9fPT0nX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnoyLnZjcHJvaiBiL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDA1YTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iYnoyIg0KLQlSb290TmFtZXNwYWNlPSJiejIiDQotCVNjY1Byb2plY3ROYW1lPSJiejIiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibXN2Y3J0LGxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Ml9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Ml9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvZGIuYnVpbGQgYi9QQy9WUzcuMS9kYi5idWlsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE4N2Y3NC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9kYi5idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3Q+Ci0gPHRhcmdldCBuYW1lPSJhbGwiIGRlc2NyaXB0aW9uPSJCdWlsZCBhbGwgdGFyZ2V0cy4iPgotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiPgotICAgICA8cHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iZGJfc3RhdGljLnZjcHJvaiIgLz4KLSAgICAgPC9wcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9maWVsZDMucHkgYi9QQy9WUzcuMS9maWVsZDMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZjI0Y2EuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvZmllbGQzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBBbiBhYnN1cmQgd29ya2Fyb3VuZCBmb3IgdGhlIGxhY2sgb2YgYXJpdGhtZXRpYyBpbiBNUydzIHJlc291cmNlIGNvbXBpbGVyLgotIyBBZnRlciBidWlsZGluZyBQeXRob24sIHJ1biB0aGlzLCB0aGVuIHBhc3RlIHRoZSBvdXRwdXQgaW50byB0aGUgYXBwcm9wcmlhdGUKLSMgcGFydCBvZiBQQ1xweXRob25fbnQucmMuCi0jIEV4YW1wbGUgb3V0cHV0OgotIwotIyAqIEZvciAyLjNhMCwKLSMgKiBQWV9NSUNST19WRVJTSU9OID0gMAotIyAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnYWxwaGEnID0gMHhBCi0jICogUFlfUkVMRUFTRV9TRVJJQUwgPSAxCi0jICoKLSMgKiBhbmQgMCoxMDAwICsgMTAqMTAgKyAxID0gMTAxLgotIyAqLwotIyAjZGVmaW5lIEZJRUxEMyAxMDEKLQotaW1wb3J0IHN5cwotCi1tYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwotbGV2ZWxudW0gPSB7J2FscGhhJzogMHhBLAotICAgICAgICAgICAgJ2JldGEnOiAweEIsCi0gICAgICAgICAgICAnY2FuZGlkYXRlJzogMHhDLAotICAgICAgICAgICAgJ2ZpbmFsJzogMHhGLAotICAgICAgICAgICB9W2xldmVsXQotc3RyaW5nID0gc3lzLnZlcnNpb24uc3BsaXQoKVswXSAjIGxpa2UgJzIuM2EwJwotCi1wcmludCAiICogRm9yICVzLCIgJSBzdHJpbmcKLXByaW50ICIgKiBQWV9NSUNST19WRVJTSU9OID0gJWQiICUgbWljcm8KLXByaW50ICIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpCi1wcmludCAiICogUFlfUkVMRUFTRV9TRVJJQUwgPSAlZCIgJSBzZXJpYWwKLXByaW50ICIgKiIKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCAiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpCi1wcmludCAiICovIgotcHJpbnQgIiNkZWZpbmUgRklFTEQzIiwgZmllbGQzCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wIGIvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3NWUxOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYyBiL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTJiNjYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKiBUaGlzIGZpbGUgY3JlYXRlcyB0aGUgZ2V0YnVpbGRpbmZvLm8gb2JqZWN0LCBieSBmaXJzdAotICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCksIGFuZCB0aGVuIGludm9raW5nIGNsLmV4ZS4KLSAgIEFzIGEgc2lkZSBlZmZlY3QsIGl0IG1pZ2h0IGdlbmVyYXRlIFBDXFZTNy4xXGdldGJ1aWxkaW5mbzIuYwotICAgYWxzby4gSWYgdGhpcyBpc24ndCBhIHN1YnZlcnNpb24gY2hlY2tvdXQsIG9yIHN1YndjcmV2IGlzbid0Ci0gICBmb3VuZCwgaXQgY29tcGlsZXMgLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBpbnN0ZWFkLgotCi0gICBDdXJyZW50bHksIHN1YndjcmV2LmV4ZSBpcyBmb3VuZCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyaWVzCi0gICBvZiBUb3J0b2lzZVNWTi4KLQotICAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHBsYWNlIGdldGJ1aWxkaW5mby5vIGludG8gdGhlIHByb3BlcgotICAgYmluYXJ5IGRpcmVjdG9yeS4gVGhpcyBpc24ndCBuZWNlc3NhcnksIGFzIHRoaXMgdG9vbCBpcwotICAgaW52b2tlZCBhcyBhIHByZS1saW5rIHN0ZXAgZm9yIHB5dGhvbmNvcmUsIHNvIHRoYXQgb3ZlcndyaXRlcwotICAgYW55IHByZXZpb3VzIGdldGJ1aWxkaW5mby5vLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKCkKLXsKLSAgICBzdHJ1Y3QgX3N0YXQgc3Q7Ci0gICAgSEtFWSBoVG9ydG9pc2U7Ci0gICAgY2hhciBjb21tYW5kWzUwMF07Ci0gICAgRFdPUkQgdHlwZSwgc2l6ZTsKLSAgICBpZiAoX3N0YXQoIi5zdm4iLCAmc3QpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLyogQWxsb3cgc3VwcHJlc3Npb24gb2Ygc3Vid2NyZXYuZXhlIGludm9jYXRpb24gaWYgYSBub19zdWJ3Y3JldiBmaWxlIGlzIHByZXNlbnQuICovCi0gICAgaWYgKF9zdGF0KCJub19zdWJ3Y3JldiIsICZzdCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlZ09wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUyAmJgotICAgICAgICBSZWdPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgLyogVG9ydG9pc2Ugbm90IGluc3RhbGxlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBjb21tYW5kWzBdID0gJyInOyAgLyogcXVvdGUgdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgKi8KLSAgICBzaXplID0gc2l6ZW9mKGNvbW1hbmQpIC0gMTsKLSAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhUb3J0b2lzZSwgIkRpcmVjdG9yeSIsIDAsICZ0eXBlLCBjb21tYW5kKzEsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTIHx8Ci0gICAgICAgIHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAvKiBSZWdpc3RyeSBjb3JydXB0ZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICJiaW5cXHN1YndjcmV2LmV4ZSIpOwotICAgIGlmIChfc3RhdChjb21tYW5kKzEsICZzdCkgPCAwKQotICAgICAgICAvKiBzdWJ3Y3Jldi5leGUgbm90IHBhcnQgb2YgdGhlIHJlbGVhc2UgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICJcIiAuLlxcLi4gLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBnZXRidWlsZGluZm8yLmMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKLXsKLSAgICBjaGFyIGNvbW1hbmRbNTAwXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKLSAgICBpbnQgZG9fdW5saW5rLCByZXN1bHQ7Ci0gICAgaWYgKGFyZ2MgIT0gMikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2VfYnVpbGRpbmZvICQoQ29uZmlndXJhdGlvbk5hbWUpXG4iKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiRGVidWciKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLURfREVCVUcgLU1EZCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlSXRhbml1bSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgL1VTRUNMOk1TX0lUQU5JVU0gIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUFNRDY0IikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAiKTsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgL1VTRUNMOk1TX09QVEVST04gIik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKCkpKQotICAgICAgICBzdHJjYXQoY29tbWFuZCwgImdldGJ1aWxkaW5mbzIuYyAtRFNVQldDUkVWICIpOwotICAgIGVsc2UKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0KGNvbW1hbmQsICIgLUZvZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspCi0gICAgICAgIHVubGluaygiZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYzhhNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfYnVpbGRpbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iNSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ii8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX2J1aWxkaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSI0Ig0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qIGIvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZmE0ZWIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Im1ha2VfdmVyc2lvbmluZm8iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVNjY1Byb2plY3ROYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV92ZXJzaW9uaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIuXG1ha2VfdmVyc2lvbmluZm8uZXhlICZndDsuLlwuLlxQQ1xweXRob25udF9yYy5oDQotIg0KLQkJCQlPdXRwdXRzPSIuLlwuLlxQQ1xweXRob25udF9yYy5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm8ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iJChUYXJnZXRGaWxlTmFtZSkgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xtYWtlX3ZlcnNpb25pbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsuLlwuLlxQQ1xweXRob25udF9yY19kLmgNCi0iDQotCQkJCU91dHB1dHM9Ii4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iJChUYXJnZXRGaWxlTmFtZSkgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3BjYnVpbGQuc2xuIGIvUEMvVlM3LjEvcGNidWlsZC5zbG4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGYxOWMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcGNidWlsZC5zbG4KKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOC4wMA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NvY2tldCIsICJfc29ja2V0LnZjcHJvaiIsICJ7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zc2wiLCAiX3NzbC52Y3Byb2oiLCAiezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjcHJvaiIsICJ7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJ6MiIsICJiejIudmNwcm9qIiwgIntBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV92ZXJzaW9uaW5mbyIsICJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIsICJ7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5ZXhwYXQiLCAicHlleHBhdC52Y3Byb2oiLCAiezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24iLCAicHl0aG9uLnZjcHJvaiIsICJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic2VsZWN0IiwgInNlbGVjdC52Y3Byb2oiLCAiezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ1bmljb2RlZGF0YSIsICJ1bmljb2RlZGF0YS52Y3Byb2oiLCAie0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3Byb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3Byb2oiLCAiezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZWxlbWVudHRyZWUiLCAiX2VsZW1lbnR0cmVlLnZjcHJvaiIsICJ7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tc2kiLCAiX21zaS52Y3Byb2oiLCAiezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzIiwgIl9jdHlwZXMudmNwcm9qIiwgIntGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlc190ZXN0IiwgIl9jdHlwZXNfdGVzdC52Y3Byb2oiLCAiezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9ID0ge0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1ZyA9IERlYnVnDQotCQlSZWxlYXNlID0gUmVsZWFzZQ0KLQkJUmVsZWFzZUFNRDY0ID0gUmVsZWFzZUFNRDY0DQotCQlSZWxlYXNlSXRhbml1bSA9IFJlbGVhc2VJdGFuaXVtDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24NCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25JdGVtcykgPSBwb3N0U29sdXRpb24NCi0JCS4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA3MzlmYS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHlleHBhdCINCi0JU2NjUHJvamVjdE5hbWU9InB5ZXhwYXQiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweWV4cGF0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24uYnVpbGQgYi9QQy9WUzcuMS9weXRob24uYnVpbGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTEwMWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdD4KLSA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVzY3JpcHRpb249IkJ1aWxkIGFsbCB0YXJnZXRzLiI+Ci0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSI+Ci0gICAgIDxwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIgLz4KLSAgICAgPC9wcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gICA8ZXhlYyBwcm9ncmFtPSJtYWtlX3ZlcnNpb25pbmZvIiBvdXRwdXQ9InB5dGhvbm50X3JjLmgiIC8+Ci0KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIiBzb2x1dGlvbmZpbGU9InBjYnVpbGQuc2xuIj4KLSAgICAgPGV4Y2x1ZGVwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfdGtpbnRlci52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iYnoyLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfc3FsaXRlMy52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3NzbC52Y3Byb2oiIC8+Ci0gICAgIDwvZXhjbHVkZXByb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi5pc3MgYi9QQy9WUzcuMS9weXRob24uaXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTZhM2MwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi5pc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotOyBTY3JpcHQgZ2VuZXJhdGVkIGJ5IHRoZSBJbm5vIFNldHVwIFNjcmlwdCBXaXphcmQuCi07IFNFRSBUSEUgRE9DVU1FTlRBVElPTiBGT1IgREVUQUlMUyBPTiBDUkVBVElORyBJTk5PIFNFVFVQIFNDUklQVCBGSUxFUyEKLQotOyBUaGlzIGlzIHRoZSB3aG9sZSBiYWxsIG9mIHdheCBmb3IgYW4gSW5ubyBpbnN0YWxsZXIgZm9yIFB5dGhvbi4KLTsgVG8gdXNlLCBkb3dubG9hZCBJbm5vIFNldHVwIGZyb20gaHR0cDovL3d3dy5qcnNvZnR3YXJlLm9yZy9pc2RsLmh0bS8sCi07IGluc3RhbGwgaXQsIGFuZCBkb3VibGUtY2xpY2sgb24gdGhpcyBmaWxlLiAgVGhhdCBsYXVuY2hlcyB0aGUgSW5ubwotOyBzY3JpcHQgY29tcGlsZXIuICBUaGUgR1VJIGlzIGV4dGVtZWx5IHNpbXBsZSwgYW5kIGhhcyBvbmx5IG9uZSBidXR0b24KLTsgeW91IG1heSBub3QgcmVjb2duaXplIGluc3RhbnRseTogIGNsaWNrIGl0LiAgWW91J3JlIGRvbmUuICBJdCBidWlsZHMKLTsgdGhlIGluc3RhbGxlciBpbnRvIFBDQnVpbGQvUHl0aG9uLTIuMmExLmV4ZS4gIFNpemUgYW5kIHNwZWVkIG9mIHRoZQotOyBpbnN0YWxsZXIgYXJlIGNvbXBldGl0aXZlIHdpdGggdGhlIFdpc2UgaW5zdGFsbGVyOyBJbm5vIHVuaW5zdGFsbAotOyBzZWVtcyBtdWNoIHF1aWNrZXIgdGhhbiBXaXNlIChidXQgYWxzbyBmZWVibGVyLCBhbmQgdGhlIHVuaW5zdGFsbAotOyBsb2cgaXMgaW4gc29tZSB1bihodW1hbilyZWFkYWJsZSBiaW5hcnkgZm9ybWF0KS4KLTsKLTsgV2hhdCdzIERvbmUKLTsgLS0tLS0tLS0tLS0KLTsgQWxsIHRoZSB1c3VhbCBXaW5kb3dzIFB5dGhvbiBmaWxlcyBhcmUgaW5zdGFsbGVkIGJ5IHRoaXMgbm93LgotOyBBbGwgdGhlIHVzdWFsIFdpbmRvd3MgUHl0aG9uIFN0YXJ0IG1lbnUgZW50cmllcyBhcmUgY3JlYXRlZCBhbmQKLTsgd29yayBmaW5lLgotOyAucHksIC5weXcsIC5weWMgYW5kIC5weW8gZXh0ZW5zaW9ucyBhcmUgcmVnaXN0ZXJlZC4KLTsgICAgIFBST0JMRU06ICBJbm5vIHVuaW5zdGFsbCBkb2VzIG5vdCByZXN0b3JlIHRoZWlyIHByZXZpb3VzIHJlZ2lzdHJ5Ci07ICAgICAgICAgICAgICAgYXNzb2NpYXRpb25zIChpZiBhbnkpLiAgV2lzZSBkaWQuICBUaGlzIHdpbGwgbWFrZSBsaWZlCi07ICAgICAgICAgICAgICAgZGlmZmljdWx0IGZvciBhbHBoYSAoZXRjKSB0ZXN0ZXJzLgotOyBUaGUgUHl0aG9uIGluc3RhbGwgaXMgZnVsbHkgZnVuY3Rpb25hbCBmb3IgInR5cGljYWwiIHVzZXMuCi07Ci07IFdoYXQncyBOb3QgRG9uZQotOyAtLS0tLS0tLS0tLS0tLS0KLTsgTm9uZSBvZiAiTWFyayBIYW1tb25kJ3MiIHJlZ2lzdHJ5IGVudHJpZXMgYXJlIHdyaXR0ZW4uCi07IE5vIGluc3RhbGxhdGlvbiBvZiBmaWxlcyBpcyBkb25lIGludG8gdGhlIHN5c3RlbSBkaXI6Ci07ICAgICBUaGUgTVMgRExMcyBhcmVuJ3QgaGFuZGxlZCBhdCBhbGwgYnkgdGhpcyB5ZXQuCi07ICAgICBQeXRob24yMi5kbGwgaXMgdW5wYWNrZWQgaW50byB0aGUgbWFpbiBQeXRob24gZGlyLgotOwotOyBJbm5vIGNhbid0IGRvIGRpZmZlcmVudCB0aGluZ3Mgb24gTlQvMjAwMCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdXNlcgotOyBoYXMgQWRtaW4gcHJpdmlsZWdlcywgc28gSSBkb24ndCBrbm93IGhvdyB0byAic29sdmUiIGVpdGhlciBvZiB0aG9zZSwKLTsgc2hvcnQgb2YgYnVpbGRpbmcgdHdvIGluc3RhbGxlcnMgKG9uZSAqcmVxdWlyaW5nKiBBZG1pbiBwcml2cywgdGhlCi07IG90aGVyIG5vdCBkb2luZyBhbnl0aGluZyB0aGF0IG5lZWRzIEFkbWluIHByaXZzKS4KLTsKLTsgSW5ubyBoYXMgbm8gY29uY2VwdCBvZiB2YXJpYWJsZXMsIHNvIGxvdHMgb2YgbGluZXMgaW4gdGhpcyBmaWxlIG5lZWQKLTsgdG8gYmUgZmlkZGxlZCBieSBoYW5kIGFjcm9zcyByZWxlYXNlcy4gIFNpbXBsZXN0IHdheSBvdXQ6ICBzdGljayB0aGlzCi07IGZpbGUgaW4gYSBnaWFudCB0cmlwbGUtcXVvdGVkIHItc3RyaW5nIChub3RlIHRoYXQgYmFja3NsYXNoZXMgYXJlCi07IHJlcXVpcmVkIGFsbCBvdmVyIHRoZSBwbGFjZSBoZXJlIC0tIGZvcndhcmQgc2xhc2hlcyBET04nVCBXT1JLIGluCi07IElubm8pLCBhbmQgdXNlICUoeWFkZGEpcyBzdHJpbmcgaW50ZXJwb2xhdGlvbiB0byBkbyBzdWJzdGl0dXRpb25zOyBpLmUuLAotOyB3cml0ZSBhIHZlcnkgc2ltcGxlIFB5dGhvbiBwcm9ncmFtIHRvICpwcm9kdWNlKiB0aGlzIHNjcmlwdC4KLQotW1NldHVwXQotQXBwTmFtZT1QeXRob24gYW5kIGNvbWJpbmVkIFdpbjMyIEV4dGVuc2lvbnMKLUFwcFZlck5hbWU9UHl0aG9uIDIuMi4yIGFuZCBjb21iaW5lZCBXaW4zMiBFeHRlbnNpb25zIDE1MAotQXBwSWQ9UHl0aG9uIDIuMi4yLjE1MAotQXBwVmVyc2lvbj0yLjIuMi4xNTAKLUFwcENvcHlyaWdodD1QeXRob24gaXMgQ29weXJpZ2h0IKkgMjAwMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gV2luMzIgRXh0ZW5zaW9ucyBhcmUgQ29weXJpZ2h0IKkgMTk5Ni0yMDAxIEdyZWcgU3RlaW4gYW5kIE1hcmsgSGFtbW9uZC4KLQotOyBEZWZhdWx0IGluc3RhbGwgZGlyOyB2YWx1ZSBvZiB7YXBwfSBsYXRlciAodW5sZXNzIHVzZXIgb3ZlcnJpZGVzKS4KLTsge3NkfSA9IHN5c3RlbSByb290IGRyaXZlLCBwcm9iYWJseSAiQzoiLgotRGVmYXVsdERpck5hbWU9e3NkfVxQeXRob24yMgotO0RlZmF1bHREaXJOYW1lPXtwZn1cUHl0aG9uCi0KLTsgU3RhcnQgbWVudSBmb2xkZXIgbmFtZTsgdmFsdWUgb2Yge2dyb3VwfSBsYXRlciAodW5sZXNzIHVzZXIgb3ZlcnJpZGVzKS4KLURlZmF1bHRHcm91cE5hbWU9UHl0aG9uIDIuMgotCi07IFBvaW50IFNvdXJjZURpciB0byBvbmUgYWJvdmUgUENCdWlsZCA9IHNyYy4KLTsgbWVhbnMgdGhpcyBzY3JpcHQgY2FuIHJ1biB1bmNoYW5nZWQgZnJvbSBhbnlvbmUncyBDVlMgdHJlZSwgbm8gbWF0dGVyCi07IHdoYXQgdGhleSBjYWxsZWQgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcmllcy4KLVNvdXJjZURpcj0uCi1PdXRwdXREaXI9Li4KLU91dHB1dEJhc2VGaWxlbmFtZT1QeXRob24tMi4yLjItV2luMzItMTUwLVNldHVwCi0KLUFwcFB1Ymxpc2hlcj1QeXRob25MYWJzIGF0IERpZ2l0YWwgQ3JlYXRpb25zCi1BcHBQdWJsaXNoZXJVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi1BcHBTdXBwb3J0VVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotQXBwVXBkYXRlc1VSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLQotQWx3YXlzQ3JlYXRlVW5pbnN0YWxsSWNvbj10cnVlCi1DaGFuZ2VzQXNzb2NpYXRpb25zPXRydWUKLVVuaW5zdGFsbExvZ01vZGU9bmV3Ci1BbGxvd05vSWNvbnM9dHJ1ZQotQWRtaW5Qcml2aWxlZ2VzUmVxdWlyZWQ9dHJ1ZQotVW5pbnN0YWxsRGlzcGxheUljb249e2FwcH1ccHljLmljbwotV2l6YXJkRGVidWc9ZmFsc2UKLQotOyBUaGUgZmV3ZXIgc2NyZWVucyB0aGUgYmV0dGVyOyBsZWF2ZSB0aGVzZSBjb21tZW50ZWQuCi0KLUNvbXByZXNzaW9uPWJ6aXAKLUluZm9CZWZvcmVGaWxlPUxJQ0VOU0UudHh0Ci07SW5mb0JlZm9yZUZpbGU9TWlzY1xORVdTCi0KLTsgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB5b3VyIGluc3RhbGxhdGlvbiB0byBydW4gb24gTlQgMy41MSB0b28uCi07IE1pblZlcnNpb249NCwzLjUxCi0KLVtUeXBlc10KLU5hbWU6IG5vcm1hbDsgRGVzY3JpcHRpb246IFNlbGVjdCBkZXNpcmVkIGNvbXBvbmVudHM7IEZsYWdzOiBpc2N1c3RvbQotCi1bQ29tcG9uZW50c10KLU5hbWU6IG1haW47IERlc2NyaXB0aW9uOiBQeXRob24gYW5kIFdpbjMyIEV4dGVuc2lvbnM7IFR5cGVzOiBub3JtYWwKLU5hbWU6IGRvY3M7IERlc2NyaXB0aW9uOiBQeXRob24gZG9jdW1lbnRhdGlvbiAoSFRNTCk7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRrOyBEZXNjcmlwdGlvbjogVENML1RLLCB0a2ludGVyLCBhbmQgSWRsZTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdG9vbHM7IERlc2NyaXB0aW9uOiBQeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29sc1wpOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0ZXN0OyBEZXNjcmlwdGlvbjogUHl0aG9uIHRlc3Qgc3VpdGUgKExpYlx0ZXN0XCk7IFR5cGVzOiBub3JtYWwKLQotW1Rhc2tzXQotTmFtZTogZXh0ZW5zaW9uczsgRGVzY3JpcHRpb246IFJlZ2lzdGVyIGZpbGUgYXNzb2NpYXRpb25zICgucHksIC5weXcsIC5weWMsIC5weW8pOyBDb21wb25lbnRzOiBtYWluOyBDaGVjazogSXNBZG1pbkxvZ2dlZE9uCi0KLVtGaWxlc10KLTsgQ2F1dGlvbjogIFVzaW5nIGZvcndhcmQgc2xhc2hlcyBpbnN0ZWFkIHNjcmV3cyB1cCBpbiBhbWF6aW5nIHdheXMuCi07IFVua25vd246ICBCeSB0aGUgdGltZSBDb21wb25lbnRzIChhbmQgb3RoZXIgYXR0cnMpIGFyZSBhZGRlZCB0byB0aGVzZSBsaW5lcywgdGhleSdyZQotOyBnb2luZyB0byBnZXQgYXdmdWxseSBsb25nLiAgQnV0IGRvbid0IHNlZSBhIHdheSB0byBjb250aW51ZSBsb2dpY2FsIGxpbmVzIGFjcm9zcwotOyBwaHlzaWNhbCBsaW5lcy4KLQotU291cmNlOiBMSUNFTlNFLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogUkVBRE1FLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogTmV3cy50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6ICouaWNvOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IHB5dGhvbi5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IHB5dGhvbncuZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiB3OXhwb3Blbi5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLQotU291cmNlOiBETExzXHRjbDgzLmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogRExMc1x0azgzLmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogdGNsXCouKjsgRGVzdERpcjoge2FwcH1cdGNsOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogc3lzZGlyXHB5dGhvbjIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHNoYXJlZGZpbGUgcmVzdGFydHJlcGxhY2UKLVNvdXJjZTogc3lzZGlyXFB5V2luVHlwZXMyMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZXN0YXJ0cmVwbGFjZSBzaGFyZWRmaWxlCi1Tb3VyY2U6IHN5c2RpclxweXRob25jb20yMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZXN0YXJ0cmVwbGFjZSBzaGFyZWRmaWxlCi0KLVNvdXJjZTogRExMc1xfc29ja2V0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zb2NrZXQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfc3JlLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zcmUubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfc3ltdGFibGUucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3N5bXRhYmxlLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3Rlc3RjYXBpLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF90ZXN0Y2FwaS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF90a2ludGVyLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLVNvdXJjZTogbGlic1xfdGtpbnRlci5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi0KLVNvdXJjZTogRExMc1xtbWFwLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXG1tYXAubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xwYXJzZXIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNccGFyc2VyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNccHlleHBhdC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xweWV4cGF0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcc2VsZWN0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHNlbGVjdC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHVuaWNvZGVkYXRhLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHVuaWNvZGVkYXRhLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcd2lucmVnLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHdpbnJlZy5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHdpbnNvdW5kLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHdpbnNvdW5kLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcemxpYi5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x6bGliLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IGxpYnNccHl0aG9uMjIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xleHBhdC5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotCi0KLVNvdXJjZTogTGliXCoucHk7IERlc3REaXI6IHthcHB9XExpYjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBMaWJcY29tcGlsZXJcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcY29tcGlsZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZGlzdHV0aWxzXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGRpc3R1dGlsczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxlbWFpbFwqLio7IERlc3REaXI6IHthcHB9XExpYlxlbWFpbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxlbmNvZGluZ3NcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZW5jb2RpbmdzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGhvdHNob3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcaG90c2hvdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxsaWItb2xkXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGxpYi1vbGQ7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJceG1sXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHhtbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxob3RzaG90XCouKjsgRGVzdERpcjoge2FwcH1cTGliXGhvdHNob3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcdGVzdFwqLio7IERlc3REaXI6IHthcHB9XExpYlx0ZXN0OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0ZXN0OyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHRraW50ZXJcKi5weTsgRGVzdERpcjoge2FwcH1cTGliXHRraW50ZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1xSRUFETUUudHh0OyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogZG9jcwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMlwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21cKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0XCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHQ7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IGluY2x1ZGVcKi5oOyBEZXN0RGlyOiB7YXBwfVxpbmNsdWRlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogVG9vbHNcaWRsZVwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXGlkbGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBUb29sc1xweW5jaGVcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xweW5jaGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcc2NyaXB0c1wqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXFNjcmlwdHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcd2ViY2hlY2tlclwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogVG9vbHNcdmVyc2lvbmNoZWNrXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogRG9jXCouKjsgRGVzdERpcjoge2FwcH1cRG9jOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBGbGFnczogcmVjdXJzZXN1YmRpcnM7IENvbXBvbmVudHM6IGRvY3MKLQotCi1bSWNvbnNdCi1OYW1lOiB7Z3JvdXB9XFB5dGhvbiAoY29tbWFuZCBsaW5lKTsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbi5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBDb21wb25lbnRzOiBtYWluCi1OYW1lOiB7Z3JvdXB9XFB5dGhvbiBNYW51YWxzOyBGaWxlbmFtZToge2FwcH1cRG9jXGluZGV4Lmh0bWw7IFdvcmtpbmdEaXI6IHthcHB9OyBDb21wb25lbnRzOiBkb2NzCi1OYW1lOiB7Z3JvdXB9XFdpbjMyIEV4dGVuc2lvbnMgSGVscDsgRmlsZW5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBXb3JraW5nRGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgQ29tcG9uZW50czogZG9jcwotTmFtZToge2dyb3VwfVxNb2R1bGUgRG9jczsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbncuZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgUGFyYW1ldGVyczogIiIie2FwcH1cVG9vbHNcU2NyaXB0c1xweWRvYy5weXciIiI7IENvbXBvbmVudHM6IHRvb2xzCi1OYW1lOiB7Z3JvdXB9XElETEUgKFB5dGhvbiBHVUkpOyBGaWxlbmFtZToge2FwcH1ccHl0aG9udy5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBQYXJhbWV0ZXJzOiAiIiJ7YXBwfVxUb29sc1xpZGxlXGlkbGUucHl3IiIiOyBDb21wb25lbnRzOiB0b29scwotCi1bUmVnaXN0cnldCi07IFJlZ2lzdGVyIC5weQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHk7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IENvbnRlbnQgVHlwZTsgVmFsdWVEYXRhOiB0ZXh0L3BsYWluOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XFB5LmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9uLmV4ZSIiICIiJTEiIiAlKiIKLQotOyBSZWdpc3RlciAucHljCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHljOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIENvbXBpbGVkRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBDb21waWxlZCBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1ccHljLmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob24uZXhlIiIgIiIlMSIiICUqIgotCi07IFJlZ2lzdGVyIC5weW8KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weW87IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gQ29tcGlsZWRGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotCi07IFJlZ2lzdGVyIC5weXcKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weXc7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gTm9Db25GaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5dzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogQ29udGVudCBUeXBlOyBWYWx1ZURhdGE6IHRleHQvcGxhaW47IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxQeS5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9udy5leGUiIiAiIiUxIiIgJSoiCi0KLQotOyBQeXRob24gUmVnaXN0cnkgS2V5cwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob247IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHk7IENoZWNrOiBJc0FkbWluTG9nZ2VkT24KLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoOyBWYWx1ZURhdGE6ICJ7YXBwfVxMaWI7e2FwcH1cRExMcyI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGhcd2luMzI7IFZhbHVlRGF0YTogInthcHB9XGxpYlxzaXRlLXBhY2thZ2VzXHdpbjMyO3thcHB9XGxpYlxzaXRlLXBhY2thZ2VzXHdpbjMyXGxpYiI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aFx3aW4zMmNvbTsgVmFsdWVEYXRhOiBDOlxQeXRob25cbGliXHNpdGUtcGFja2FnZXM7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlczsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlc1xweXRob25jb207IFZhbHVlRGF0YToge3N5c31ccHl0aG9uY29tMjIuZGxsOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXNccHl3aW50eXBlczsgVmFsdWVEYXRhOiB7c3lzfVxQeVdpblR5cGVzMjIuZGxsOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEluc3RhbGxQYXRoOyBWYWx1ZURhdGE6IHthcHB9OyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5OyBWYWx1ZVR5cGU6IHN0cmluZwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwOyBWYWx1ZURhdGE6IHtncm91cH07IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVEYXRhOiB7YXBwfVxEb2NcaW5kZXguaHRtbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5OyBDb21wb25lbnRzOiBkb2NzCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwXFB5dGhvbiBXaW4zMiBEb2N1bWVudGF0aW9uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVEYXRhOiB7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5OyBDb21wb25lbnRzOiBkb2NzCi0KLVtfSVNUb29sXQotRW5hYmxlSVNYPXRydWUKLQotCi1bQ29kZV0KLVByb2dyYW0gU2V0dXA7Ci0KLUZ1bmN0aW9uIElzQWRtaW5Ob3RMb2dnZWRPbigpOiBCb29sZWFuOwotYmVnaW4KLSAgUmVzdWx0IDo9IE5vdCBJc0FkbWluTG9nZ2VkT24oKTsKLWVuZDsKLQotYmVnaW4KLWVuZC4KLQotCi0KLQotW1VuaW5zdGFsbERlbGV0ZV0KLU5hbWU6IHthcHB9XExpYlxjb21waWxlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxjb21waWxlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxjb21waWxlcjsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1xjb21tYW5kOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHM7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVtYWlsXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVuY29kaW5nc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3M7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxob3RzaG90XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGhvdHNob3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGxpYi1vbGRcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRraW50ZXI7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx0ZXN0XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRlc3RcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGVzdDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxkb21cKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHBhcnNlcnM7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4XCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxzYXhcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHNheDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyOyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb207IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dDsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHB5dGhvbmNvbS5weSo7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlczsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxMaWJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWI7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNccHluY2hlXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNccHluY2hlXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNccHluY2hlOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXGlkbGVcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcaWRsZTsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0c1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHM7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcdmVyc2lvbmNoZWNrOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlcjsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sczsgVHlwZTogZGlyaWZlbXB0eQotCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24udmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiNDQwMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob24iDQotCVNjY1Byb2plY3ROYW1lPSJweXRob24iDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob25fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob25fZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIC9WU0VYVENPTVBfVkVSQk9TRSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uLmljbyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweXRob24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbjIwLndzZSBiL1BDL1ZTNy4xL3B5dGhvbjIwLndzZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3ZjZhZDMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uMjAud3NlCisrKyAvZGV2L251bGwKQEAgLTEsMzExNyArMCwwIEBACi1Eb2N1bWVudCBUeXBlOiBXU0UKLWl0ZW06IEdsb2JhbAotICBWZXJzaW9uPTkuMAotICBUaXRsZT1QeXRob24gMi40YTEKLSAgRmxhZ3M9MDAwMTAxMDAKLSAgTGFuZ3VhZ2VzPTY1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCi0gIEphcGFuZXNlIEZvbnQgTmFtZT1NUyBHb3RoaWMKLSAgSmFwYW5lc2UgRm9udCBTaXplPTEwCi0gIFN0YXJ0IEdyYWRpZW50PTAgMjU1IDAKLSAgRW5kIEdyYWRpZW50PTAgMTI4IDAKLSAgV2luZG93cyBGbGFncz0wMDAwMDEwMDAwMDAxMTAxMDAxMDAxMDEwMDAwMTAxMAotICBMb2cgUGF0aG5hbWU9JU1BSU5ESVIlXElOU1RBTEwuTE9HCi0gIE1lc3NhZ2UgRm9udD1NUyBTYW5zIFNlcmlmCi0gIEZvbnQgU2l6ZT04Ci0gIFBhZ2VzIE1vZGlmaWVkPTAwMDEwMDAwMDExMTAxMDAwMDAwMDAwMTAwMDAwMTExCi0gIEV4dHJhIFBhZ2VzPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTEwMDEwCi0gIERpc2sgRmlsZW5hbWU9U0VUVVAKLSAgUGF0Y2ggRmxhZ3M9MDAwMDAwMDAwMDAwMTAwMQotICBQYXRjaCBUaHJlc2hvbGQ9ODUKLSAgUGF0Y2ggTWVtb3J5PTQwMDAKLSAgTUlGIFBERiBWZXJzaW9uPTEuMAotICBNSUYgU01TIFZlcnNpb249Mi4wCi0gIEVYRSBGaWxlbmFtZT1QeXRob24tMi40YTEuZXhlCi0gIERpYWxvZ3MgVmVyc2lvbj04Ci0gIFZlcnNpb24gRmlsZT0yLjRhMQotICBWZXJzaW9uIERlc2NyaXB0aW9uPVB5dGhvbiBQcm9ncmFtbWluZyBMYW5ndWFnZQotICBWZXJzaW9uIENvcHlyaWdodD2pMjAwMS0yMDA3IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gIFZlcnNpb24gQ29tcGFueT1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotICBDcnlzdGFsIEZvcm1hdD0xMDExMTEwMDEwMTEwMDAwMDAxMDAwMTAwMTAwMTAwMQotICBTdGVwIFZpZXc9JkFsbAotICBWYXJpYWJsZSBOYW1lMT1fV0lTRV8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24xPVdJU0Ugcm9vdCBkaXJlY3RvcnkKLSAgVmFyaWFibGUgRGVmYXVsdDE9QzpcUHJvZ3JhbW1lXFdpc2UgSW5zdGFsbGF0aW9uIFN5c3RlbQotICBWYXJpYWJsZSBGbGFnczE9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTI9X1RDTERJUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPVRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFRjbC9UayBpbnN0YWxsYXRpb24KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPWxpdmVzLiAgVGhpcyBtdXN0IGJlIGEgc2libGluZyBvZiB0aGUgUHl0aG9uCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1kaXJlY3RvcnkuCi0gIFZhcmlhYmxlIERlZmF1bHQyPXRjbDg0Ci0gIFZhcmlhYmxlIEZsYWdzMj0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMz1fRE9DXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjM9VGhlIHVucGFja2VkIEhUTUwgZG9jIGRpcmVjdG9yeS4KLSAgVmFyaWFibGUgRGVmYXVsdDM9Li5caHRtbAotICBWYXJpYWJsZSBGbGFnczM9MDAwMDEwMDEKLSAgVmFyaWFibGUgTmFtZTQ9X1NZU18KLSAgVmFyaWFibGUgRGVzY3JpcHRpb240PVN5c3RlbSBkaXJlY3RvcnkgKHdoZXJlIHRvIGZpbmQgTVNWQ1JULkRMTCkKLSAgVmFyaWFibGUgRGVmYXVsdDQ9QzpcV2luZG93c1xTeXN0ZW0KLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXaW5kb3dzXFN5c3RlbQotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdJTk5UXFN5c3RlbTMyCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcQ29kZVxNU0RMTHMKLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXaW5kb3dzXFN5c3RlbTMyCi0gIFZhcmlhYmxlIEZsYWdzND0wMDAwMDAxMAotICBWYXJpYWJsZSBOYW1lNT1fUFlNQUpPUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb241PVB5dGhvbiBtYWpvciB2ZXJzaW9uIG51bWJlcjsgdGhlIDIgaW4gMi4zLgotICBWYXJpYWJsZSBEZWZhdWx0NT0yCi0gIFZhcmlhYmxlIEZsYWdzNT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lNj1fUFlNSU5PUl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb242PVB5dGhvbiBtaW5vciB2ZXJzaW9uIG51bWJlcjsgdGhlIDMgaW4gMi4zCi0gIFZhcmlhYmxlIERlZmF1bHQ2PTMKLSAgVmFyaWFibGUgRmxhZ3M2PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU3PV9ET0FETUlOXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9VGhlIGluaXRpYWwgdmFsdWUgZm9yICVET0FETUlOJS4KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PVdoZW4gMCwgd2UgbmV2ZXIgdHJ5IHRvIHdyaXRlIHVuZGVyIEhLTE0sCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1hbmQgaW5zdGFsbCB0aGUgUHl0aG9uICsgTVMgcnVudGltZSBETExzIGluCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz10aGUgUHl0aG9uIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0gZGlyLgotICBWYXJpYWJsZSBEZWZhdWx0Nz0xCi0gIFZhcmlhYmxlIFZhbHVlczc9MQotICBWYXJpYWJsZSBWYWx1ZXM3PTAKLSAgVmFyaWFibGUgRmxhZ3M3PTAwMDAxMDEwCi0gIFZhcmlhYmxlIE5hbWU4PV9BTElBU05BTUVfCi0gIFZhcmlhYmxlIEZsYWdzOD0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lOT1fQUxJQVNQQVRIXwotICBWYXJpYWJsZSBGbGFnczk9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTEwPV9BTElBU1RZUEVfCi0gIFZhcmlhYmxlIEZsYWdzMTA9MDAwMDEwMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVBZVkVSX1NUUklORwotICBWYWx1ZT0yLjMKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIHZlcnNpb24gbnVtYmVyIGNoYW5nZXMsIHNldCB0aGUgY29tcGlsZXIKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9dnJibHMgX1BZTUFKT1JfIGFuZCAgX1BZTUlOT1JfLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RoaW5nIGluIHRoZSBzY3JpcHQgYmVsb3cgc2hvdWxkIG5lZWQgZmlkZGxpbmcgdGhlbi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9T3RoZXIgdGhpbmdzIHRoYXQgbmVlZCBmaWRkbGluZzoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIFBZVkVSX1NUUklORyBhYm92ZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIFRoZSAiVGl0bGU6IiBpbiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIEdVSS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgIEJ1aWxkIFNldHRpbmdzIGFuZCBWZXJzaW9uIFJlc291cmNlIG9uIHN0ZXAgNiAoRmluaXNoKSBvZiB0aGUgSW5zdGFsbGF0aW9uIEV4cGVydAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgICAgIEJlIHN1cmUgdG8gc2VsZWN0IFN0ZXBzLT5BbGwgb3IgeW91IG1heSBub3Qgc2VlIHRoZXNlIQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgdmVyc2lvbiBvZiBUY2wvVGsgY2hhbmdlcywgdGhlIGNvbXBpbGVyIHZyYmwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9X1RDTERJUl8gbWF5IGFsc28gbmVlZCB0byBiZSBjaGFuZ2VkLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUFQUFRJVExFCi0gIFZhbHVlPVB5dGhvbiAlUFlWRVJfU1RSSU5HJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1QWV9WRVJTSU9OIHNob3VsZCBiZSBtYWpvci5taW5vciBvbmx5OyB1c2VkIHRvIGNyZWF0ZSB0aGUgcmVnaXN0cnkga2V5OyBtdXN0IG1hdGNoIE1TX0RMTF9JRCBpbiBweXRob25fbnQucmMKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVBZX1ZFUlNJT04KLSAgVmFsdWU9JV9QWU1BSk9SXyUuJV9QWU1JTk9SXyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9R1JPVVAgaXMgdGhlIFN0YXJ0IG1lbnUgZ3JvdXAgbmFtZTsgdXNlciBjYW4gb3ZlcnJpZGUuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT1QeXRob24gJVBZX1ZFUlNJT04lCi0gIEZsYWdzPTEwMDAwMDAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1BSU5ESVIgaXMgdGhlIGFwcCBkaXJlY3Rvcnk7IHVzZXIgY2FuIG92ZXJyaWRlLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT1QeXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0lX0RPQURNSU5fJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1HaXZlIG5vbi1hZG1pbiB1c2VycyBhIGNoYW5jZSB0byBhYm9ydC4KLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDAxMTExMQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IERpc3BsYXkgTWVzc2FnZQotICBUaXRsZT1Eb2luZyBub24tYWRtaW4gaW5zdGFsbAotICBUZXh0PVRoZSBjdXJyZW50IGxvZ2luIGRvZXMgbm90IGhhdmUgQWRtaW5pc3RyYXRvciBQcml2aWxlZ2VzIG9uIHRoaXMgbWFjaGluZS4gIFB5dGhvbiB3aWxsIGluc3RhbGwgaXRzIHJlZ2lzdHJ5IGluZm9ybWF0aW9uIGludG8gdGhlIHBlci11c2VyIGFyZWEgb25seSBmb3IgdGhlIGN1cnJlbnQgbG9naW4sIGluc3RlYWQgb2YgaW50byB0aGUgcGVyLW1hY2hpbmUgYXJlYSBmb3IgZXZlcnkgYWNjb3VudCBvbiB0aGlzIG1hY2hpbmUuICBTb21lIGFkdmFuY2VkIHVzZXMgb2YgUHl0aG9uIG1heSBub3Qgd29yayBhcyBhIHJlc3VsdCAoZm9yIGV4YW1wbGUsIHJ1bm5pbmcgYSBQeXRob24gc2NyaXB0IGFzIGEgc2VydmljZSkuCi0gIFRleHQ9Ci0gIFRleHQ9SWYgdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgcGxlYXNlIGNsaWNrIENhbmNlbCB0byBhYm9ydCB0aGlzIGluc3RhbGxhdGlvbiwgbG9nIG9uIGFzIGFuIEFkbWluaXN0cmF0b3IsIGFuZCBzdGFydCB0aGUgaW5zdGFsbGF0aW9uIGFnYWluLgotICBGbGFncz0wMDAwMTAwMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJFR0lOIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiB0aGUgInN0b3AiIG9uIHRoZSBuZXh0IGxpbmUgaXMgYWN0dWFsbHkgInBhdXNlIi4KLWVuZAotaXRlbTogT3Blbi9DbG9zZSBJTlNUQUxMLkxPRwotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JZiB0aGUgZGVzdGluYXRpb24gc3lzdGVtIGRvZXMgbm90IGhhdmUgYSB3cml0YWJsZSBXaW5kb3dzXFN5c3RlbSBkaXJlY3RvcnksIHN5c3RlbSBmaWxlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIFdpbmRvd3NcIGRpcmVjdG9yeQotZW5kCi1pdGVtOiBDaGVjayBpZiBGaWxlL0RpciBFeGlzdHMKLSAgUGF0aG5hbWU9JVNZUyUKLSAgRmxhZ3M9MTAwMDAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNZUwotICBWYWx1ZT0lV0lOJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNPTU1PTgotICBLZXk9U09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb24KLSAgRGVmYXVsdD1DOlxQcm9ncmFtIEZpbGVzXENvbW1vbiBGaWxlcwotICBWYWx1ZSBOYW1lPUNvbW1vbkZpbGVzRGlyCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9UFJPR1JBTV9GSUxFUwotICBLZXk9U09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb24KLSAgRGVmYXVsdD1DOlxQcm9ncmFtIEZpbGVzCi0gIFZhbHVlIE5hbWU9UHJvZ3JhbUZpbGVzRGlyCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1FWFBMT1JFUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgVGhlIFdpemFyZCBoYXJkY29kICJDOiIgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IGZvciBNQUlORElSLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGF0J3Mgbm90IGFwcHJvcHJpYXRlIGlmIHRoZSBzeXN0ZW0gZHJpdmUgZG9lc24ndCBoYXBwZW4gdG8gYmUgQzouCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUkgcmVtb3ZlZCB0aGUgIkM6IiwgYW5kIHRoYXQgZGlkIHRoZSByaWdodCB0aGluZyBmb3IgdHdvIHBlb3BsZSB3aG8gdGVzdGVkIGl0IG9uIG5vbi1DOiBtYWNoaW5lcywKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9YnV0IGl0J3MgdW5jbGVhciB3aGV0aGVyIGl0IHdpbGwgYWx3YXlzIGRvIHRoZSByaWdodCB0aGluZy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9XCVNQUlORElSJQotICBGbGFncz0wMDAwMTEwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CQUNLVVAgaXMgdGhlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHBhdGggdGhhdCBhbGwgYmFja3VwIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvIHdoZW4gb3ZlcndyaXR0ZW4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUAotICBWYWx1ZT0lTUFJTkRJUiVcQkFDS1VQCi0gIEZsYWdzPTEwMDAwMDAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PURPQkFDS1VQIGRldGVybWluZXMgaWYgYSBiYWNrdXAgd2lsbCBiZSBwZXJmb3JtZWQuICBUaGUgcG9zc2libGUgdmFsdWVzIGFyZSBBIChkbyBiYWNrdXApIG9yIEIgKGRvIG5vdCBkbyBiYWNrdXApCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJSQU5ESU5HIGRldGVybWluZXMgaWYgdGhlIGluc3RhbGxhdGlvbiB3aWxsIGJlIGJyYW5kZWQgd2l0aCBhIG5hbWUgYW5kIGNvbXBhbnkuICBCeSBkZWZhdWx0LCB0aGlzIGlzIHdyaXR0ZW4gdG8gdGhlIElOU1QgZGlyZWN0b3J5IChpbnN0YWxsYXRpb24gbWVkaWEpLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZWFkIElOSSBWYWx1ZQotICBWYXJpYWJsZT1OQU1FCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2VjdGlvbj1SZWdpc3RyYXRpb24KLSAgSXRlbT1OYW1lCi1lbmQKLWl0ZW06IFJlYWQgSU5JIFZhbHVlCi0gIFZhcmlhYmxlPUNPTVBBTlkKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZWN0aW9uPVJlZ2lzdHJhdGlvbgotICBJdGVtPUNvbXBhbnkKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPU5BTUUKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBHZXQgU3lzdGVtIEluZm9ybWF0aW9uCi0gIFZhcmlhYmxlPU5BTUUKLSAgRmxhZ3M9MDAwMDAxMTAKLWVuZAotaXRlbTogR2V0IFN5c3RlbSBJbmZvcm1hdGlvbgotICBWYXJpYWJsZT1DT01QQU5ZCi0gIEZsYWdzPTAwMDAwMTExCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RU5EIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2V0IHZyYmxzIGZvciB0aGUgIkFkdmFuY2VkIE9wdGlvbnMiIHN1YmRpYWxvZyBvZiBDb21wb25lbnRzLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUIKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UQVNLUyB2YWx1ZXM6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IFJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBDcmVhdGUgU3RhcnQgTWVudSBzaG9ydGN1dHMKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUFCCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DT01QT05FTlRTIHZhbHVlczoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBUY2wvVGsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QzogZG9jcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1EOiB0b29scwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FOiB0ZXN0IHN1aXRlCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUFCQ0RFCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NYXJjaCB0aHJ1IHRoZSB1c2VyIEdVSS4KLWVuZAotaXRlbTogV2l6YXJkIEJsb2NrCi0gIERpcmVjdGlvbiBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIEJpdG1hcCBQYXRobmFtZT0uXGluc3RhbGxlci5ibXAKLSAgWCBQb3NpdGlvbj05Ci0gIFkgUG9zaXRpb249MTAKLSAgRmlsbGVyIENvbG9yPTExMTczNzU5Ci0gIERpYWxvZz1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gIERpYWxvZz1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgRGlhbG9nPVNlbGVjdCBDb21wb25lbnRzCi0gIERpYWxvZz1TZWxlY3QgUHJvZ3JhbSBNYW5hZ2VyIEdyb3VwCi0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPQotICBWYWx1ZT0KLSAgVmFsdWU9Ci0gIFZhbHVlPUIKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0zCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ESVNQTEFZCi0gIFZhbHVlPVN0YXJ0IEluc3RhbGxhdGlvbgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT1JbnN0YWxsIGRpcmVjdG9yeTogICVNQUlORElSJSVDUkxGJQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvaW5nIGFkbWluIGluc3RhbGwuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvaW5nIG5vbi1hZG1pbiBpbnN0YWxsLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJU1ha2UgYmFja3VwcywgaW50byAlQkFDS1VQJSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb24ndCBtYWtlIGJhY2t1cHMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlQ29tcG9uZW50czolQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gZG9jdW1lbnRhdGlvbiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgVG9vbCBhbmQgdXRpbGl0eSBzY3JpcHRzJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gdGVzdCBzdWl0ZSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9uJ3QgcmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJVN0YXJ0IE1lbnUgZ3JvdXA6ICAlR1JPVVAlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJU5vIFN0YXJ0IE1lbnUgc2hvcnRjdXRzLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMSAzMjMgMzMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICAgIFRleHQgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGVsIGRpcmVjdG9yaW8gZGUgZGVzdGlubwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBlbmQKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDU4IDMyMSAyMTkKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMQotICAgICAgRmxhZ3M9MDAwMDExMDAwMDAwMTAxMAotICAgICAgVGV4dD0lTUFJTkRJUiUKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQwIDMxMyA1OAotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVBsZWFzZSBzZWxlY3QgYSBkaXJlY3RvcnkgZm9yIHRoZSAlQVBQVElUTEUlIGZpbGVzLgotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgIFRpdGxlIEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgIFRpdGxlIEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgVGl0bGUgU3BhbmlzaD1TZWxlY2Npb25lIGVsIGRpcmVjdG9yaW8gZGUgZGVzdGlubwotICAgIFRpdGxlIEl0YWxpYW49U2VsZXppb25hcmUgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIFdpZHRoPTI3NgotICAgIEhlaWdodD0yMTYKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTYgNiAyMDQgMTg2Ci0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAxMDAwMTAKLSAgICAgIFRleHQ9JU1BSU5ESVIlCi0gICAgICBUZXh0IEZyZW5jaD0lTUFJTkRJUiUKLSAgICAgIFRleHQgR2VybWFuPSVNQUlORElSJQotICAgICAgVGV4dCBTcGFuaXNoPSVNQUlORElSJQotICAgICAgVGV4dCBJdGFsaWFuPSVNQUlORElSJQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDggMjY1IDI2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPU9LCi0gICAgICBUZXh0IEdlcm1hbj1PSwotICAgICAgVGV4dCBTcGFuaXNoPUFjZXB0YXIKLSAgICAgIFRleHQgSXRhbGlhbj1PSwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDMxIDI2NSA1MAotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgVmFsdWU9JU1BSU5ESVJfU0FWRSUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUZpY2hpZXJzIGRlIFNhdXZlZ2FyZGUgUmVtcGxhY+lzCi0gICAgVGl0bGUgR2VybWFuPVNpY2hlcnVuZ3Nrb3BpZSB2b24gZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuCi0gICAgVGl0bGUgUG9ydHVndWVzZT1GaWNoZWlyb3Mgc3Vic3RpdHXtZG9zIGRlIHNlZ3VyYW7nYQotICAgIFRpdGxlIFNwYW5pc2g9Q29waWFzIGRlIHNlZ3VyaWRhZCBkZSBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zCi0gICAgVGl0bGUgSXRhbGlhbj1CYWNrdXAgZmlsZSBzb3N0aXR1aXRpCi0gICAgVGl0bGUgRGFuaXNoPVNpa2tlcmhlZHNrb3BpZXJpbmcgYWYgZXJzdGF0dGVkZSBmaWxlcgotICAgIFRpdGxlIER1dGNoPVZlcnZhbmdlbiBiZXN0YW5kZW4ga29waetyZW4KLSAgICBUaXRsZSBOb3J3ZWdpYW49U2lra2VyaGV0c2tvcGllcmUgZXJzdGF0dGVkZSBmaWxlcgotICAgIFRpdGxlIFN3ZWRpc2g9U+RrZXJoZXRza29waWVyYSB1dGJ5dHRhIGZpbGVyCi0gICAgV2lkdGg9MzUwCi0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXZhbnQ+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyPgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSZQcvN4aW1vPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgICAgVGV4dCBEYW5pc2g9Jk7mc3RlPgotICAgICAgVGV4dCBEdXRjaD0mVm9sZ2VuZGU+Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0mTmVzdGU+Ci0gICAgICBUZXh0IFN3ZWRpc2g9Jk7kc3RhID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwmWnVy/GNrCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9PCZSZXRvcm5hcgotICAgICAgVGV4dCBTcGFuaXNoPTwmUmV0cm9jZWRlcgotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgICBUZXh0IERhbmlzaD08JlRpbGJhZ2UKLSAgICAgIFRleHQgRHV0Y2g9PCZUZXJ1ZwotICAgICAgVGV4dCBOb3J3ZWdpYW49PCZUaWxiYWtlCi0gICAgICBUZXh0IFN3ZWRpc2g9PCAmVGlsbGJha2EKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI3OCAyMzQgMzMwIDI1MQotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUNhbmNlbGFyCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgICBUZXh0IERhbmlzaD1Bbm51bGxlcgotICAgICAgVGV4dCBEdXRjaD1Bbm51bGVyZW4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUF2YnJ5dAotICAgICAgVGV4dCBTd2VkaXNoPUF2YnJ5dAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTExIDIyMSAzMjkgMjIzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ2IDMyMCA5OAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVRoaXMgaW5zdGFsbGF0aW9uIHByb2dyYW0gY2FuIGNyZWF0ZSBiYWNrdXAgY29waWVzIG9mIGFsbCBmaWxlcyByZXBsYWNlZCBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbi4gVGhlc2UgZmlsZXMgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIHNvZnR3YXJlIGlzIHVuaW5zdGFsbGVkIGFuZCBhIHJvbGxiYWNrIGlzIHJlcXVlc3RlZC4gIElmIGJhY2t1cCBjb3BpZXMgYXJlIG5vdCBjcmVhdGVkLCB5b3Ugd2lsbCBvbmx5IGJlIGFibGUgdG8gdW5pbnN0YWxsIHRoZSBzb2Z0d2FyZSBhbmQgbm90IHJvbGwgdGhlIHN5c3RlbSBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1EbyB5b3Ugd2FudCB0byBjcmVhdGUgYmFja3VwcyBvZiByZXBsYWNlZCBmaWxlcz8KLSAgICAgIFRleHQgRnJlbmNoPUxlIHByb2dyYW1tZSBkJ2luc3RhbGxhdGlvbiBwZXV0IGNy6WVyIGRlcyBjb3BpZXMgZGUgc2F1dmVnYXJkZSBkZSB0b3VzIGxlcyBmaWNoaWVycyByZW1wbGFj6XMgcGVuZGFudCBsJ2luc3RhbGxhdGlvbi4gQ2VzIGZpY2hpZXJzIHNvbnQgdXRpbGlz6XMgYXUgY2FzIG/5IGxlIGxvZ2ljaWVsIGVzdCBk6XNpbnN0YWxs6SBldCBxdWUgbCdvbiBwcm9j6GRlIOAgbGEgcmVwcmlzZSBkdSBzeXN06G1lLiBTaSBsZXMgY29waWVzIGRlIHNhdXZlZ2FyZGUgbmUgc29udCBwYXMgY3Lp6WVzLCBvbiBuZSBwb3VycmEgcXVlIGTpc2luc3RhbGxlciBsZSBsb2dpY2llbCBzYW5zIHJlcHJlbmRyZSBsZSBzeXN06G1lIOAgdW4g6XRhdCBwculj6WRlbnQuIFZvdWxlei12b3VzIGNy6WVyIHVuZSBzYXV2ZWdhcmRlIGRlcyBmaWNoaWVycyByZW1wbGFj6XMgPwotICAgICAgVGV4dCBHZXJtYW49RGllc2VzIEluc3RhbGxhdGlvbnNwcm9ncmFtbSBrYW5uIFNpY2hlcnVuZ3Nrb3BpZW4gdm9uIGFsbGVuIHfkaHJlbmQgZGVyIEluc3RhbGxhdGlvbiBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4uIERpZXNlIERhdGVpZW4gd2VyZGVuIHp1ciBS/GNrZ+RuZ2lnbWFjaHVuZyBkZXIgSW5zdGFsbGF0aW9uIHVuZCBiZWkgQW5mb3JkZXJ1bmcgZWluZXMgUm9sbGJhY2tzIHZlcndlbmRldC4gT2huZSBTaWNoZXJ1bmdza29waWVuIGlzdCBudXIgZWluZSBS/GNrZ+RuZ2lnbWFjaHVuZyBkZXIgSW5zdGFsbGF0aW9uIG32Z2xpY2gsIG5pY2h0IGFiZXIgZWluIFJvbGxiYWNrIGRlcyBTeXN0ZW1zLiBTaWNoZXJ1bmdza29waWVuIGRlciBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4/Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9RXN0ZSBwcm9ncmFtYSBkZSBpbnN0YWxh5+NvIHBvZGUgY3JpYXIgY/NwaWFzIGRlIHNlZ3VyYW7nYSBkZSB0b2RvcyBvcyBmaWNoZWlyb3Mgc3Vic3RpdHXtZG9zIGR1cmFudGUgYSBpbnN0YWxh5+NvLiBFc3RlcyBmaWNoZWlyb3Mgc2Vy428gdXRpbGl6YWRvcyBxdWFuZG8gbyBwcm9ncmFtYSBmb3IgZGVzaW5zdGFsYWRvICBlIGZvciByZXF1aXNpdGFkYSB1bWEgcmV0b21hZGEuIFNlIGFzIGPzcGlhcyBkZSBzZWd1cmFu52EgbuNvIGZvcmVtIGNyaWFkYXMsIHPzIHBvZGVy4SBkZXNpbnN0YWxhciBvIHByb2dyYW1hIGUgbuNvIHBvZGUgcmV0b21hciAgdW0gZXN0YWRvIGFudGVyaW9yIGRvIHNpc3RlbWEuIERlc2VqYSBjcmlhciBj83BpYXMgZGUgc2VndXJhbudhIGRvcyBmaWNoZWlyb3Mgc3Vic3RpdHXtZG9zPwotICAgICAgVGV4dCBTcGFuaXNoPUVzdGUgcHJvZ3JhbWEgZGUgaW5zdGFsYWNp824gcHVlZGUgY3JlYXIgY29waWFzIGRlIHNlZ3VyaWRhZCBkZSB0b2RvcyBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zIGR1cmFudGUgbGEgaW5zdGFsYWNp824uIEVzdG9zIGFyY2hpdm9zIHNlIHV0aWxpemFy4W4gY3VhbmRvIHNlIGRlc2luc3RhbGUgZWwgc29mdHdhcmUgeSBzZSBzb2xpY2l0ZSB2b2x2ZXIgYWwgZXN0YWRvIGFudGVyaW9yLiBTaSBubyBzZSBjcmVhbiBjb3BpYXMgZGUgc2VndXJpZGFkLCD6bmljYW1lbnRlIHBvZHLhIGRlc2luc3RhbGFyIGVsIHNvZnR3YXJlIHkgbm8gcG9kcuEgZGV2b2x2ZXIgZWwgc2lzdGVtYSBhbCBlc3RhZG8gYW50ZXJpb3IuIL9EZXNlYSBjcmVhciBhcmNoaXZvcyBkZSBzZWd1cmlkYWQgZGUgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcz8KLSAgICAgIFRleHQgSXRhbGlhbj1RdWVzdG8gcHJvZ3JhbW1hIGRpIGluc3RhbGxhemlvbmUgcHXyIGNyZWFyZSBjb3BpZSBkaSBiYWNrdXAgZGkgdHV0dGkgaSBmaWxlIHNvc3RpdHVpdGkgZHVyYW50ZSBskmluc3RhbGxhemlvbmUuIFF1ZXN0aSBmaWxlIHNhcmFubm8gdXNhdGkgcXVhbmRvIGlsIHNvZnR3YXJlIHNhcuAgZGlzaW5zdGFsbGF0byBlIHNhcuAgcmljaGllc3RvIHVuIHJpdG9ybm8gYWxsbyBzdGF0byBwcmVjZWRlbnRlLiBTZSBub24gY3JlaSBsZSBjb3BpZSBkaSBiYWNrdXAsIHBvdHJhaSBzb2xvIGRpc2luc3RhbGxhcmUgaWwgc29mdHdhcmUsIG1hIG5vbiBwb3RyYWkgcmlwb3J0YXJlIGlsIHNpc3RlbWEgYWxsbyBzdGF0byBwcmVjZWRlbnRlLiBWdW9pIGNyZWFyZSBpIGZpbGUgZGkgYmFja3VwIGRlaSBmaWxlIHNvc3RpdHVpdGk/Ci0gICAgICBUZXh0IERhbmlzaD1EZXR0ZSBpbnN0YWxsYXRpb25zcHJvZ3JhbSBrYW4gb3ByZXR0ZSBzaWtrZXJoZWRza29waWVyIGFmIGFsbGUgZmlsZXIsIHNvbSBlcnN0YXR0ZXMgdW5kZXIgaW5zdGFsbGF0aW9uZW4uIERpc3NlIGZpbGVyIGJlbnl0dGVzLCBu5XIgc29mdHdhcmVuIGZqZXJuZXMsIG9nIGRlbiB0aWRsaWdlcmUgc3lzdGVta29uZmlndXJhdGlvbiBnZW5ldGFibGVyZXMuIEh2aXMgZGVyIGlra2Ugb3ByZXR0ZXMgc2lra2VyaGVkc2tvcGllciwga2FuIGR1IGt1biBmamVybmUgZGVuIGluc3RhbGxlcmVkZSBzb2Z0d2FyZSBvZyBpa2tlIGdlbmV0YWJsZXJlIGRlbiB0aWRsaWdlcmUgc3lzdGVta29uZmlndXJhdGlvbi4gVmlsIGR1IG9wcmV0dGUgc2lra2VyaGVkc2tvcGllciBhZiBmaWxlciwgc29tIGVyc3RhdHRlcz8KLSAgICAgIFRleHQgRHV0Y2g9RGl0IGluc3RhbGxhdGllcHJvZ3JhbW1hIGthbiBrb3BpZetuIG1ha2VuIHZhbiBhbGxlIGJlc3RhbmRlbiBkaWUgdGlqZGVucyBkZSBpbnN0YWxsYXRpZSB3b3JkZW4gdmVydmFuZ2VuLiBEZXplIHdvcmRlbiBkYW4gZ2VicnVpa3QgYWxzIGRlIHNvZnR3YXJlLWluc3RhbGxhdGllIG9uZ2VkYWFuIHdvcmR0IGdlbWFha3QgZW4gdSBoZXQgc3lzdGVlbSB3aWx0IGxhdGVuIHRlcnVna2VyZW4gbmFhciBkZSBvb3JzcHJvbmtlbGlqa2Ugc3RhYXQuIEFscyBlciBnZWVuIGJhY2stdXAga29waWXrbiB3b3JkZW4gZ2VtYWFrdCwga3VudCB1IGRlIHNvZnR3YXJlIGVua2VsIHZlcndpamRlcmVuIG1hYXIgaGV0IHN5c3RlZW0gbmlldCBpbiBkZSBvb3JzcHJvbmtlbGlqa2Ugc3RhYXQgdGVydWdicmVuZ2VuLiBXaWx0IHUgZWVuIGJhY2stdXAgbWFrZW4gdmFuIGRlIHZlcnZhbmdlbiBiZXN0YW5kZW4/Ci0gICAgICBUZXh0IE5vcndlZ2lhbj1EZXR0ZSBpbnN0YWxsYXNqb25zcHJvZ3JhbW1ldCBrYW4gbGFnZSBzaWtrZXJoZXRza29waWVyIGF2IGFsbGUgZmlsZXIgc29tIGJsaXIgZXJzdGF0dGV0IHVuZGVyIGluc3RhbGxhc2pvbmVuLiBEaXNzZSBmaWxlbmUgdmlsIHRhcyBpIGJydWsgbuVyIHByb2dyYW12YXJlbiBlciBhdmluc3RhbGxlcnQgb2cgZGV0IGVyIGJlaG92IGZvciB0aWxiYWtlc3RpbGxpbmcuIEh2aXMgZGV0IGlra2UgZXIgbGFnZXQgc2lra2VyaGV0c2tvcGllciwga2FuIGR1IGt1biBhdmluc3RhbGxlcmUgcHJvZ3JhbXZhcmVuIG9nIGlra2Ugc3RpbGxlIHN5c3RlbWV0IHRpbGJha2UgdGlsIHRpZGxpZ2VyZSBzdGF0dXMuINhuc2tlciBkdSDlIGxhZ2Ugc2lra2VyaGV0c2tvcGllciBhdiBkZSBmaWxlbmUgc29tIGJsaXIgZXJzdGF0dGV0IG7lPwotICAgICAgVGV4dCBTd2VkaXNoPUluc3RhbGxhdGlvbnNwcm9ncmFtbWV0IGthbiBza2FwYSBz5GtlcmhldHNrb3Bpb3IgYXYgYWxsYSBmaWxlciBzb20gYnl0cyB1dCB1bmRlciBpbnN0YWxsYXRpb25lbi4gRGVzc2EgZmlsZXIga2FuIHNlZGFuIGFuduRuZGFzIG7kciBwcm9ncmFtdmFyYW4gYXZpbnN0YWxsZXJhcyBvY2ggZHUgYmVn5HIgcm9sbGJhY2suIE9tIGR1IGTlIGludGUgaGFyIG7lZ3JhIHPka2VyaGV0c2tvcGlvciBrYW4gZHUgYmFyYSBhdmluc3RhbGxlcmEgcHJvZ3JhbXZhcmFuLCBpbnRlIOV0ZXJza2FwYSBzeXN0ZW1ldCBpIGRlc3MgdGlkaWdhcmUgc2tpY2suIFZpbGwgZHUgZ/ZyYSBz5GtlcmhldHNrb3Bpb3IgYXYgZGUgZXJzYXR0YSBmaWxlcm5hPwotICAgIGVuZAotICAgIGl0ZW06IFJhZGlvIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE0MSAxMDYgMjY1IDEzNgotICAgICAgVmFyaWFibGU9RE9CQUNLVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwMQotICAgICAgVGV4dD0mWWVzLCBtYWtlIGJhY2t1cHMKLSAgICAgIFRleHQ9TiZvLCBkbyBub3QgbWFrZSBiYWNrdXBzCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9Jk91aQotICAgICAgVGV4dCBGcmVuY2g9TiZvbgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj0mSmEKLSAgICAgIFRleHQgR2VybWFuPU4mZWluCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgUG9ydHVndWVzZT0mU2ltCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9TuMmbwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPQotICAgICAgVGV4dCBTcGFuaXNoPSZT7QotICAgICAgVGV4dCBTcGFuaXNoPU4mbwotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPSZT7AotICAgICAgVGV4dCBJdGFsaWFuPU4mbwotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBEYW5pc2g9JkphCi0gICAgICBUZXh0IERhbmlzaD0mTmVqCi0gICAgICBUZXh0IERhbmlzaD0KLSAgICAgIFRleHQgRHV0Y2g9JkphCi0gICAgICBUZXh0IER1dGNoPU4mZWUKLSAgICAgIFRleHQgRHV0Y2g9Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0mSmEKLSAgICAgIFRleHQgTm9yd2VnaWFuPSZOZWkKLSAgICAgIFRleHQgTm9yd2VnaWFuPQotICAgICAgVGV4dCBTd2VkaXNoPSZKYQotICAgICAgVGV4dCBTd2VkaXNoPU4mZWoKLSAgICAgIFRleHQgU3dlZGlzaD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMgotICAgICAgUmVjdGFuZ2xlPTEwOCAxNzMgMzIwIDIwOAotICAgICAgQWN0aW9uPTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgICAgVGV4dD1CYWNrdXAgRmlsZSBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICAgIFRleHQgRnJlbmNoPVLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24gZGVzIGZpY2hpZXJzIGRlIHNhdXZlZ2FyZGUKLSAgICAgIFRleHQgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyBm/HIgZGllIFNpY2hlcnVuZ3NkYXRlaQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPURpcmVjdPNyaW8gZGUgZGVzdGlubyBkZSBmaWNoZWlybyBkZSBzZWd1cmFu52EKLSAgICAgIFRleHQgU3BhbmlzaD1EaXJlY3RvcmlvIGRlIERlc3Rpbm8gZGUgbG9zIEFyY2hpdm9zIGRlIFNlZ3VyaWRhZAotICAgICAgVGV4dCBJdGFsaWFuPURpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUgZGVpIGZpbGUgZGkgYmFja3VwCi0gICAgICBUZXh0IERhbmlzaD1EZXN0aW5hdGlvbnNiaWJsaW90ZWsgdGlsIHNpa2tlcmhlZHNrb3BpZXIKLSAgICAgIFRleHQgRHV0Y2g9RG9lbGRpcmVjdG9yeSBiYWNrdXAtYmVzdGFuZAotICAgICAgVGV4dCBOb3J3ZWdpYW49TeVsa2F0YWxvZyBmb3Igc2lra2VyaGV0c2tvcGllcgotICAgICAgVGV4dCBTd2VkaXNoPUthdGFsb2cgZvZyIHPka2VyaGV0c2tvcGllcmFkZSBmaWxlcgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICAgIFJlY3RhbmdsZT0yNjUgMTg1IDMxOCAyMDMKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUF9TQVZFCi0gICAgICBWYWx1ZT0lQkFDS1VQJQotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTEKLSAgICAgIEFjdGlvbj0yCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QiZyb3dzZS4uLgotICAgICAgVGV4dCBGcmVuY2g9UCZhcmNvdXJpcgotICAgICAgVGV4dCBHZXJtYW49QiZs5HR0ZXJuLi4uCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9UCZyb2N1cmFyCi0gICAgICBUZXh0IFNwYW5pc2g9ViZpc3VhbGl6YXIuLi4KLSAgICAgIFRleHQgSXRhbGlhbj1TZm9nbGlhLi4uCi0gICAgICBUZXh0IERhbmlzaD0mR2VubmVtc2UuLi4KLSAgICAgIFRleHQgRHV0Y2g9QiZsYWRlcmVuLi4uCi0gICAgICBUZXh0IE5vcndlZ2lhbj1CbGEgaWdqZW5ub20KLSAgICAgIFRleHQgU3dlZGlzaD0mQmzkZGRyYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgICBSZWN0YW5nbGU9MTI5IDE4OCAyNTQgMjAwCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSVCQUNLVVAlCi0gICAgICBUZXh0IEZyZW5jaD0lQkFDS1VQJQotICAgICAgVGV4dCBHZXJtYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgUG9ydHVndWVzZT0lQkFDS1VQJQotICAgICAgVGV4dCBTcGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEl0YWxpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgRGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IER1dGNoPSVCQUNLVVAlCi0gICAgICBUZXh0IE5vcndlZ2lhbj0lQkFDS1VQJQotICAgICAgVGV4dCBTd2VkaXNoPSVCQUNLVVAlCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDExIDMyMyAzNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1CYWNrdXAgUmVwbGFjZWQgRmlsZXMKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZXMgY29tcG9zYW50cwotICAgICAgVGV4dCBHZXJtYW49S29tcG9uZW50ZW4gYXVzd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBjb21wb25lbnRlcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGkgY29tcG9uZW50aQotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RE9CQUNLVVAKLSAgICAgIFZhbHVlPUIKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICBUaXRsZSBGcmVuY2g9Q2hvaXNpc3NleiBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgVGl0bGUgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICBUaXRsZSBQb3J0dWd1ZXNlPVNlbGVjY2lvbmFyIERpcmVjdPNyaW8gZGUgRGVzdGlubwotICAgIFRpdGxlIFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBEaXJlY3RvcmlvIGRlIERlc3Rpbm8KLSAgICBUaXRsZSBJdGFsaWFuPVNlbGV6aW9uYSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgVGl0bGUgRGFuaXNoPVbmbGcgRGVzdGluYXRpb25zYmlibGlvdGVrCi0gICAgVGl0bGUgRHV0Y2g9S2llcyBEb2VsZGlyZWN0b3J5Ci0gICAgVGl0bGUgTm9yd2VnaWFuPVZlbGcgbeVsa2F0YWxvZwotICAgIFRpdGxlIFN3ZWRpc2g9VuRsaiBkZXN0aW5hdGlvbnNrYWxhdG9nCi0gICAgV2lkdGg9Mjc2Ci0gICAgSGVpZ2h0PTIxNgotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9NiAzIDIwMCAxODYKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMTAwMDEwCi0gICAgICBUZXh0PSVCQUNLVVAlCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSVCQUNLVVAlCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Ci0gICAgICBUZXh0IFNwYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj0lQkFDS1VQJQotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBEYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRGFuaXNoPQotICAgICAgVGV4dCBEdXRjaD0lQkFDS1VQJQotICAgICAgVGV4dCBEdXRjaD0KLSAgICAgIFRleHQgTm9yd2VnaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IE5vcndlZ2lhbj0KLSAgICAgIFRleHQgU3dlZGlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBTd2VkaXNoPQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDggMjY1IDI2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPU9LCi0gICAgICBUZXh0IEdlcm1hbj1PSwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPU9LCi0gICAgICBUZXh0IFNwYW5pc2g9QUNFUFRBUgotICAgICAgVGV4dCBJdGFsaWFuPU9LCi0gICAgICBUZXh0IERhbmlzaD1PSwotICAgICAgVGV4dCBEdXRjaD1PSwotICAgICAgVGV4dCBOb3J3ZWdpYW49T0sKLSAgICAgIFRleHQgU3dlZGlzaD1PSwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjA5IDMxIDI2NSA1MAotICAgICAgVmFyaWFibGU9QkFDS1VQCi0gICAgICBWYWx1ZT0lQkFDS1VQX1NBVkUlCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1DYW5jZWxhcgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgICAgVGV4dCBEYW5pc2g9U2xldAotICAgICAgVGV4dCBEdXRjaD1Bbm51bGVyZW4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUF2YnJ5dAotICAgICAgVGV4dCBTd2VkaXNoPUF2YnJ5dAotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgQ29tcG9uZW50cwotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBDaGVja2JveAotICAgICAgUmVjdGFuZ2xlPTEwOCA2NiAzMTMgMTU2Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTEKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAxMTAKLSAgICAgIFRleHQ9UHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLSAgICAgIFRleHQ9VGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYykKLSAgICAgIFRleHQ9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0PVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBJdGFsaWFuPQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NSAzMjAgNjMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DaG9vc2Ugd2hpY2ggY29tcG9uZW50cyB0byBpbnN0YWxsIGJ5IGNoZWNraW5nIHRoZSBib3hlcyBiZWxvdy4KLSAgICAgIFRleHQgRnJlbmNoPUNob2lzaXNzZXogbGVzIGNvbXBvc2FudHMgcXVlIHZvdXMgdm91bGV6IGluc3RhbGxlciBlbiBjb2NoYW50IGxlcyBjYXNlcyBjaS1kZXNzb3VzLgotICAgICAgVGV4dCBHZXJtYW49V+RobGVuIFNpZSBkaWUgenUgaW5zdGFsbGllcmVuZGVuIEtvbXBvbmVudGVuLCBpbmRlbSBTaWUgaW4gZGllIGVudHNwcmVjaGVuZGVuIEvkc3RjaGVuIGtsaWNrZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9RWxpamEgbG9zIGNvbXBvbmVudGVzIHF1ZSBkZXNlZSBpbnN0YWxhciBtYXJjYW5kbyBsb3MgY3VhZHJvcyBkZSBhYmFqby4KLSAgICAgIFRleHQgSXRhbGlhbj1TY2VnbGllcmUgcXVhbGkgY29tcG9uZW50aSBpbnN0YWxsYXJlIHNlbGV6aW9uYW5kbyBsZSBjYXNlbGxlIHNvdHRvc3RhbnRpLgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIwMyAyNjkgMjIwCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MQotICAgICAgQWN0aW9uPTIKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1BZHZhbmNlZCBPcHRpb25zIC4uLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA0MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgQ29tcG9uZW50cwotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlcyBjb21wb3NhbnRzCi0gICAgICBUZXh0IEdlcm1hbj1Lb21wb25lbnRlbiBhdXN35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGNvbXBvbmVudGVzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaSBjb21wb25lbnRpCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MjUxIDE4MCAzMTEgMTkzCi0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1NQUlORElSCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0yNTEgMTY4IDMxMSAxNzkKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEyMyAxNjggMjM0IDE4MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PURpc2sgU3BhY2UgUmVxdWlyZWQ6Ci0gICAgICBUZXh0IEZyZW5jaD1Fc3BhY2UgZGlzcXVlIHJlcXVpcyA6Ci0gICAgICBUZXh0IEdlcm1hbj1Ob3R3ZW5kaWdlciBTcGVpY2hlcnBsYXR6OgotICAgICAgVGV4dCBTcGFuaXNoPUVzcGFjaW8gcmVxdWVyaWRvIGVuIGVsIGRpc2NvOgotICAgICAgVGV4dCBJdGFsaWFuPVNwYXppbyBzdSBkaXNjbyBuZWNlc3NhcmlvOgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEyMyAxODAgMjM0IDE5MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PURpc2sgU3BhY2UgUmVtYWluaW5nOgotICAgICAgVGV4dCBGcmVuY2g9RXNwYWNlIGRpc3F1ZSBkaXNwb25pYmxlIDoKLSAgICAgIFRleHQgR2VybWFuPVZlcmJsZWliZW5kZXIgU3BlaWNoZXJwbGF0ejoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc3BhY2lvIGVuIGRpc2NvIGRpc3BvbmlibGU6Ci0gICAgICBUZXh0IEl0YWxpYW49U3BhemlvIHN1IGRpc2NvIGRpc3BvbmliaWxlOgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxNTggMzIwIDE5NgotICAgICAgQWN0aW9uPTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICAgIFZhbHVlPVZFUklGWQotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1JZiB0aGV5J3JlIGluc3RhbGxpbmcgVGNsL1RrLCBUb29scywgb3IgdGhlIHRlc3Qgc3VpdGUsIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHVubGVzcyB0aGV5J3JlIGluc3RhbGxpbmcgUHl0aG9uIHRvby4KLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPUJERQotICAgICAgRmxhZ3M9MDAwMDEwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPUEKLSAgICAgIEZsYWdzPTAwMDAwMDExCi0gICAgZW5kCi0gICAgaXRlbTogRGlzcGxheSBNZXNzYWdlCi0gICAgICBUaXRsZT1BcmUgeW91IHN1cmU/Ci0gICAgICBUZXh0PUluc3RhbGxpbmcgVGNsL1RrLCBUb29scyBvciB0aGUgdGVzdCBzdWl0ZSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB1bmxlc3MgeW91IGluc3RhbGwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzIHRvby4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PUNsaWNrIFllcyBpZiB0aGF0J3MgcmVhbGx5IHdoYXQgeW91IHdhbnQuCi0gICAgICBGbGFncz0wMDEwMTEwMQotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1Ob3RoaW5nIC0tIGp1c3QgcHJvY2VlZCB0byB0aGUgbmV4dCBkaWFsb2cuCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9UmV0dXJuIHRvIHRoZSBkaWFsb2cuCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IFZhcmlhYmxlCi0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9QWR2YW5jZWQgT3B0aW9ucwotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yMTMKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUmFkaW8gQnV0dG9uCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgICBSZWN0YW5nbGU9MTEgNDYgOTAgNzYKLSAgICAgIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAxCi0gICAgICBUZXh0PUFkbWluIGluc3RhbGwKLSAgICAgIFRleHQ9Tm9uLUFkbWluIGluc3RhbGxsCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDE3MCAyNDQgMTg5Ci0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTUgMyAzMjYgODMKLSAgICAgIEFjdGlvbj0xCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjEKLSAgICAgIFJlY3RhbmdsZT0xMSAxMSAzMjEgNDUKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1CeSBkZWZhdWx0LCB0aGUgaW5zdGFsbCByZWNvcmRzIHNldHRpbmdzIGluIHRoZSBwZXItbWFjaGluZSBhcmVhIG9mIHRoZSByZWdpc3RyeSAoSEtMTSksIGFuZCBpbnN0YWxscyB0aGUgUHl0aG9uIGFuZCBDIHJ1bnRpbWUgRExMcyB0byAlU1lTMzIlLiAgQ2hvb3NlICJOb24tQWRtaW4gaW5zdGFsbCIgaWYgeW91IHdvdWxkIHByZWZlciBzZXR0aW5ncyBtYWRlIGluIHRoZSBwZXItdXNlciByZWdpc3RyeSAoSEtDVSksIGFuZCBETExzIGluc3RhbGxlZCBpbiAlTUFJTkRJUiUuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9NSA5MCAzMjYgMTU3Ci0gICAgICBBY3Rpb249MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogQ2hlY2tib3gKLSAgICAgIFJlY3RhbmdsZT0xMSAxMjEgMjQzIDE1MQotICAgICAgVmFyaWFibGU9VEFTS1MKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMQotICAgICAgVGV4dD1SZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMgKC5weSwgLnB5dywgLnB5YywgLnB5bykKLSAgICAgIFRleHQ9Q3JlYXRlIFN0YXJ0IE1lbnUgc2hvcnRjdXRzCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTExIDEwMyAzMjAgMTIxCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2hvb3NlIHRhc2tzIHRvIHBlcmZvcm0gYnkgY2hlY2tpbmcgdGhlIGJveGVzIGJlbG93LgotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICAgIFZhbHVlPUlOSVQKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURPQURNSU4KLSAgICAgIFZhbHVlPTEKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIFRleHQKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjEKLSAgICAgIENvbnRyb2wgVGV4dD1UaGlzIHNlY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgbG9nZ2VkIGluIHRvIGFuIGFjY291bnQgd2l0aCBBZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMuCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgUHJvZ3JhbSBNYW5hZ2VyIEdyb3VwCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA1MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgU3RhcnQgTWVudSBHcm91cAotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIGdyb3VwZSBkdSBHZXN0aW9ubmFpcmUgZGUgcHJvZ3JhbW1lCi0gICAgICBUZXh0IEdlcm1hbj1CZXN0aW1tdW5nIGRlciBQcm9ncmFtbS1NYW5hZ2VyZ3J1cHBlCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBncnVwbyBkZWwgQWRtaW5pc3RyYWRvciBkZSBwcm9ncmFtYXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpbCBncnVwcG8gUHJvZ01hbgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAzNSAzMjAgNjUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1FbnRlciB0aGUgbmFtZSBvZiB0aGUgU3RhcnQgTWVudSBwcm9ncmFtIGdyb3VwIHRvIHdoaWNoIHRvIGFkZCB0aGUgJUFQUFRJVExFJSBpY29uczoKLSAgICAgIFRleHQgRnJlbmNoPUVudHJleiBsZSBub20gZHUgZ3JvdXBlIGR1IEdlc3Rpb25uYWlyZSBkZSBwcm9ncmFtbWUgZGFucyBsZXF1ZWwgdm91cyBzb3VoYWl0ZXogYWpvdXRlciBsZXMgaWP0bmVzIGRlICVBUFBUSVRMRSUgOgotICAgICAgVGV4dCBHZXJtYW49R2ViZW4gU2llIGRlbiBOYW1lbiBkZXIgUHJvZ3JhbW1ncnVwcGUgZWluLCBkZXIgZGFzIFN5bWJvbCAlQVBQVElUTEUlIGhpbnp1Z2Vm/Gd0IHdlcmRlbiBzb2xsOgotICAgICAgVGV4dCBTcGFuaXNoPUVzY3JpYmEgZWwgbm9tYnJlIGRlbCBncnVwbyBkZWwgQWRtaW5pc3RyYWRvciBkZSBwcm9ncmFtYXMgZW4gZWwgcXVlIGRlc2VhIGFncmVnYXIgbG9zIGljb25vcyBkZSAlQVBQVElUTEUlOgotICAgICAgVGV4dCBJdGFsaWFuPUluc2VyaXJlIGlsIG5vbWUgZGVsIGdydXBwbyBQcm9ncmFtIE1hbmFnZXIgcGVyIGFnZ2l1bmdlcmUgbGUgaWNvbmUgJUFQUFRJVExFJSBhOgotICAgIGVuZAotICAgIGl0ZW06IENvbWJvYm94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDU2IDMyMCAyMTkKLSAgICAgIFZhcmlhYmxlPUdST1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDEwMDAwMTAwMDAwMDExMDAwMDAwMDEKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9JUdST1VQJQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSVHUk9VUCUKLSAgICAgIFRleHQgR2VybWFuPSVHUk9VUCUKLSAgICAgIFRleHQgU3BhbmlzaD0lR1JPVVAlCi0gICAgICBUZXh0IEl0YWxpYW49JUdST1VQJQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TdGFydCBJbnN0YWxsYXRpb24KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDUzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVJlYWR5IHRvIEluc3RhbGwhCi0gICAgICBUZXh0IEZyZW5jaD1Qcup0IOAgaW5zdGFsbGVyICEKLSAgICAgIFRleHQgR2VybWFuPUluc3RhbGxhdGlvbnNiZXJlaXQhCi0gICAgICBUZXh0IFNwYW5pc2g9oVByZXBhcmFkbyBwYXJhIGxhIGluc3RhbGFjafNuIQotICAgICAgVGV4dCBJdGFsaWFuPVByb250byBwZXIgbCdpbnN0YWxsYXppb25lIQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0MCAzMjAgNjIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DbGljayB0aGUgTmV4dCBidXR0b24gdG8gaW5zdGFsbCAlQVBQVElUTEUlLCBvciB0aGUgQmFjayBidXR0b24gdG8gY2hhbmdlIGNob2ljZXM6Ci0gICAgICBUZXh0IEZyZW5jaD1Wb3VzIOp0ZXMgbWFpbnRlbmFudCBwcup0IOAgaW5zdGFsbGVyIGxlcyBmaWNoaWVycyAlQVBQVElUTEUlLgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEZyZW5jaD1DbGlxdWV6IHN1ciBsZSBib3V0b24gU3VpdGUgcG91ciBjb21tZW5jZXIgbCdpbnN0YWxsYXRpb24gb3Ugc3VyIGxlIGJvdXRvbiBSZXRvdXIgcG91ciBlbnRyZXIgbGVzIGluZm9ybWF0aW9ucyBkJ2luc3RhbGxhdGlvbiDgIG5vdXZlYXUuCi0gICAgICBUZXh0IEdlcm1hbj1TaWUga/ZubmVuICVBUFBUSVRMRSUgbnVuIGluc3RhbGxpZXJlbi4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBHZXJtYW49S2xpY2tlbiBTaWUgYXVmICJXZWl0ZXIiLCB1bSBtaXQgZGVyIEluc3RhbGxhdGlvbiB6dSBiZWdpbm5lbi4gS2xpY2tlbiBTaWUgYXVmICJadXL8Y2siLCB1bSBkaWUgSW5zdGFsbGF0aW9uc2luZm9ybWF0aW9uZW4gbmV1IGVpbnp1Z2ViZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9WWEgZXN04SBsaXN0byBwYXJhIGluc3RhbGFyICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IFNwYW5pc2g9UHJlc2lvbmUgZWwgYm90824gU2lndWllbnRlIHBhcmEgY29tZW56YXIgbGEgaW5zdGFsYWNp824gbyBwcmVzaW9uZSBBdHLhcyBwYXJhIHZvbHZlciBhIGluZ3Jlc2FyIGxhIGluZm9ybWFjafNuIHBhcmEgbGEgaW5zdGFsYWNp824uCi0gICAgICBUZXh0IEl0YWxpYW49T3JhIOggcG9zc2liaWxlIGluc3RhbGxhcmUgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgSXRhbGlhbj1QcmVtZXJlIGlsIHB1bHNhbnRlIEF2YW50aSBwZXIgYXZ2aWFyZSBsJ2luc3RhbGxhemlvbmUgbyBpbCBwdWxzYW50ZSBJbmRpZXRybyBwZXIgcmVpbnNlcmlyZSBsZSBpbmZvcm1hemlvbmkgZGkgaW5zdGFsbGF6aW9uZS4KLSAgICBlbmQKLSAgICBpdGVtOiBFZGl0Ym94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDY2IDMyNCAyMTkKLSAgICAgIEhlbHAgQ29udGV4dD0xNjcxMTY4MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDAwMDAxMTAwMDExMDAwMTAwCi0gICAgICBUZXh0PSVTVU1NQVJZJQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ESVNQTEFZCi0gIFZhbHVlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VXNlciBtYXkgaGF2ZSBjaGFuZ2VkIE1BSU5ESVIsIHNvIHJlc2V0IEJBQ0tVUCB0byBtYXRjaC4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUAotICBWYWx1ZT0lTUFJTkRJUiVcQkFDS1VQCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CRUdJTiBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgQkFDS1VQIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIEJBQ0tVUERJUiBpcyBpbml0aWFsaXplZAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQRElSCi0gIFZhbHVlPSVCQUNLVVAlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgQlJBTkRJTkcgaW5mb3JtYXRpb24gaXMgd3JpdHRlbiB0byB0aGUgSU5JIGZpbGUgb24gdGhlIGluc3RhbGxhdGlvbiBtZWRpYS4KLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IElOSSBGaWxlCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2V0dGluZ3M9W1JlZ2lzdHJhdGlvbl0KLSAgU2V0dGluZ3M9TkFNRT0lTkFNRSUKLSAgU2V0dGluZ3M9Q09NUEFOWT0lQ09NUEFOWSUKLSAgU2V0dGluZ3M9Ci1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QmVnaW4gd3JpdGluZyB0byB0aGUgSU5TVEFMTC5MT0cKLWVuZAotaXRlbTogT3Blbi9DbG9zZSBJTlNUQUxMLkxPRwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DaGVjayBmcmVlIGRpc2sgc3BhY2UgY2FsY3VsYXRlcyBmcmVlIGRpc2sgc3BhY2UgYXMgd2VsbCBhcyBjb21wb25lbnQgc2l6ZXMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUl0IHNob3VsZCBiZSBsb2NhdGVkIGJlZm9yZSBhbGwgSW5zdGFsbCBGaWxlIGFjdGlvbnMuCi1lbmQKLWl0ZW06IENoZWNrIERpc2sgU3BhY2UKLSAgQ29tcG9uZW50PUNPTVBPTkVOVFMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBpbmNsdWRlIHNjcmlwdCBhbGxvd3MgdW5pbnN0YWxsIHN1cHBvcnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIHRoaXMgaXMgb3VyIG93biBVbmluc3RhbC53c2UsIGEgY29weSBvZiBXaXNlJ3MgZXhjZXB0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWl0IHdyaXRlcyB0byBIS0NVIChpbnN0ZWFkIG9mIEhLTE0pIGlmIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBhZG1pbiBwcml2cy4KLWVuZAotaXRlbTogSW5jbHVkZSBTY3JpcHQKLSAgUGF0aG5hbWU9LlxVbmluc3RhbC53c2UKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogdGhlc2Ugc2VlbWluZyBuby1vcHMgYWN0dWFsbHkgY29udmVydCB0byBzaG9ydCBmaWxlbmFtZXMuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DT01NT04KLSAgVmFsdWU9JUNPTU1PTiUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9JU1BSU5ESVIlCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgSUYvVEhFTi9FTFNFIHJlYWRzIHRoZSBjb3JyZWN0IHJlZ2lzdHJ5IGVudHJpZXMgZm9yIHNob3J0Y3V0L2ljb24gcGxhY2VtZW50Ci1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1TVEFSVFVQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudVxQcm9ncmFtc1xTdGFydFVwCi0gIFZhbHVlIE5hbWU9U3RhcnRVcAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPURFU0tUT1BESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxEZXNrdG9wCi0gIFZhbHVlIE5hbWU9RGVza3RvcAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVNUQVJUTUVOVURJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnUKLSAgVmFsdWUgTmFtZT1TdGFydCBNZW51Ci0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9R1JPVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51XFByb2dyYW1zCi0gIFZhbHVlIE5hbWU9UHJvZ3JhbXMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DU1RBUlRVUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVTVEFSVFVQRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBTdGFydHVwCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q0RFU0tUT1BESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lREVTS1RPUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gRGVza3RvcAotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNTVEFSVE1FTlVESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lU1RBUlRNRU5VRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBTdGFydCBNZW51Ci0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q0dST1VQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JUdST1VQRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBQcm9ncmFtcwotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgdGhlIFdpemFyZCBsZWZ0IHRoaXMgYmxvY2sgZW1wdHkhCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBlcmhhcHMgaXQncyBvbmx5IHJlbGV2YW50IG9uIFdpbmRvd3MgMy4xLgotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RU5EIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1CCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSB1c2VyIGNob3NlIGEgbm9uLWFkbWluIGluc3RhbGwgaW4gIkFkdmFuY2VkIE9wdGlvbnMiLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIHNob3VsZCBjb21lIGFmdGVyIHRoZSBpbmNsdWRlIG9mIFVuaW5zdGFsLndzZSBhYm92ZSwgYmVjYXVzZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD13cml0aW5nIHVuaW5zdGFsbCBpbmZvIHRvIEhLQ1UgaXMgaW5lZmZlY3RpdmUgZXhjZXB0IHVuZGVyIFdpbjJLLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNHUk9VUF9TQVZFCi0gIFZhbHVlPSVHUk9VUCUKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9JUNHUk9VUERJUiVcJUdST1VQJQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9JUdST1VQRElSJVwlR1JPVVAlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxvbmcgc2VjdGlvbiB0byBpbnN0YWxsIGZpbGVzLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RExMREVTVAotICBWYWx1ZT0lU1lTMzIlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ETExERVNUCi0gIFZhbHVlPSVNQUlORElSJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGwgdGhlIGxpY2Vuc2UgZXZlbiBpZiB0aGV5IGRlc2VsZWN0IGV2ZXJ5dGhpbmcgPHdpbms+LgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpY2Vuc2UKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExJQ0VOU0UudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFJFQURNRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXG1pc2NcbmV3cwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTkVXUy50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JY29ucyAtLSBhbHdheXMgaW5zdGFsbCBzbyB0aGF0IHRoZSB1bmluc3RhbGxlciBjYW4gdXNlIHRoZW0gZm9yIGl0cyBvd24gZGlzcGxheS4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWNvbi5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5Y29uLmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljLmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHljLmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHkuaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweS5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlc2UgYXJyYW5nZSB0byAocmVjdXJzaXZlbHkhKSBkZWxldGUgYWxsIC5weWMgYW5kIC5weW8gZmlsZXMgYXQgdW5pbnN0YWxsIHRpbWUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgImRvZXMgdGhlIHJpZ2h0IHRoaW5nIjogIGFueSBkaXJlY3RvcmllcyBsZWZ0IGVtcHR5IGF0IHRoZSBlbmQgYXJlIHJlbW92ZWQuCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RmlsZSBUcmVlOiAlTUFJTkRJUiVcKi5weWMKLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1GaWxlIFRyZWU6ICVNQUlORElSJVwqLnB5bwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUV4ZWN1dGFibGVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24uZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweXRob24uZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweXRob253LmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3OXhwb3Blbi5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHc5eHBvcGVuLmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FeHRlbnNpb24gbW9kdWxlIERMTHMgKC5weWQpOyBrZWVwIGluIHN5bmNoIHdpdGggbGlicyBkaXJlY3RvcnkgbmV4dAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2lucmVnLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x3aW5yZWcucHlkCi0gIERlc2NyaXB0aW9uPUV4dGVuc2lvbiBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9jc3YucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9jc3YucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zcmUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zcmUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zc2wucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zc2wucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zeW10YWJsZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3N5bXRhYmxlLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGVzdGNhcGkucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF90ZXN0Y2FwaS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3RraW50ZXIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF90a2ludGVyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc29ja2V0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc29ja2V0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxiejIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXGJ6Mi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cZGF0ZXRpbWUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXGRhdGV0aW1lLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxtbWFwLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xtbWFwLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxwYXJzZXIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHBhcnNlci5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHlleHBhdC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNccHlleHBhdC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cc2VsZWN0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xzZWxlY3QucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHVuaWNvZGVkYXRhLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x1bmljb2RlZGF0YS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2luc291bmQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHdpbnNvdW5kLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx6bGliLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x6bGliLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1MaW5rIGxpYnJhcmllcyAoLmxpYik7IGtlZXAgaW4gc3luY2ggd2l0aCBETExzIGFib3ZlLCBleGNlcHQgdGhhdCB0aGUgUHl0aG9uIGxpYiBsaXZlcyBoZXJlLgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2lucmVnLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x3aW5yZWcubGliCi0gIERlc2NyaXB0aW9uPUxpbmsgbGlicmFyeSBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfY3N2LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfY3N2LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3JlLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3JlLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3NsLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3NsLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3ltdGFibGUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zeW10YWJsZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3Rlc3RjYXBpLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfdGVzdGNhcGkubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90a2ludGVyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfdGtpbnRlci5saWIKLSAgRGVzY3JpcHRpb249RXh0ZW5zaW9uIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NvY2tldC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NvY2tldC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cYnoyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xiejIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGRhdGV0aW1lLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xkYXRldGltZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cbW1hcC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcbW1hcC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccGFyc2VyLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xwYXJzZXIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5ZXhwYXQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHB5ZXhwYXQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHNlbGVjdC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcc2VsZWN0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx1bmljb2RlZGF0YS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcdW5pY29kZWRhdGEubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnNvdW5kLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x3aW5zb3VuZC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cemxpYi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcemxpYi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbiVfcHltYWpvcl8lJV9weW1pbm9yXyUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1haW4gUHl0aG9uIERMTAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UZWxsIFdpc2UgaXQncyBPSyB0byBkZWxldGUgdGhlIFB5dGhvbiBETEwgYXQgdW5pbnN0YWxsIHRpbWUsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWRlc3BpdGUgdGhhdCB3ZSAobWF5KSB3cml0ZSBpdCBpbnRvIGEgc3lzdGVtIGRpcmVjdG9yeS4KLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1Ob24tU3lzdGVtIEZpbGU6Ci1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24lX3B5bWFqb3JfJSVfcHltaW5vcl8lLmRsbAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVccHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJS5kbGwKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TGlicmFyaWVzIChMaWIvKQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWIKLSAgRGVzY3JpcHRpb249TGlicmFyeSBNb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGNvbXBpbGVyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxjb21waWxlcgotICBEZXNjcmlwdGlvbj1QeXRob24gY29tcGlsZXIgd3JpdHRlbiBpbiBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHMKLSAgRGVzY3JpcHRpb249RGlzdHJpYnV0aW9uIHV0aWxpdHkgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcUkVBRE1FLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QuZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFxjb21tYW5kX3RlbXBsYXRlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcY29tbWFuZF90ZW1wbGF0ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWwKLSAgRGVzY3JpcHRpb249TGlicmFyeSBlbWFpbCBwYWNrYWdlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdAotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi5naWYKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCouYXUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVuY29kaW5nc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW5jb2RpbmdzCi0gIERlc2NyaXB0aW9uPVVuaWNvZGUgZW5jb2RpbmcgdGFibGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGhvdHNob3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGhvdHNob3QKLSAgRGVzY3JpcHRpb249RmFzdCBQeXRob24gcHJvZmlsZXIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcbGliLW9sZFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcbGliLW9sZAotICBEZXNjcmlwdGlvbj1PYnNvbGV0ZSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRraW50ZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRraW50ZXIKLSAgRGVzY3JpcHRpb249VGtpbnRlciByZWxhdGVkIGxpYnJhcnkgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxsb2dnaW5nXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxsb2dnaW5nCi0gIERlc2NyaXB0aW9uPUxvZ2dpbmcgcGFja2FnZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxzaXRlLXBhY2thZ2VzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1TaXRlIHBhY2thZ2VzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sCi0gIERlc2NyaXB0aW9uPVhNTCBzdXBwb3J0IHBhY2thZ2VzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXGRvbVwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXGRvbQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxwYXJzZXJzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxccGFyc2VycwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxzYXhcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxzYXgKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QyBJbmNsdWRlIGZpbGVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5caW5jbHVkZVwqLmgKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGluY2x1ZGUKLSAgRGVzY3JpcHRpb249SGVhZGVyIGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWNvbmZpZy5oCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxpbmNsdWRlXHB5Y29uZmlnLmgKLSAgRGVzY3JpcHRpb249SGVhZGVyIGZpbGVzIChweWNvbmZpZy5oKQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NaWNyb3NvZnQgQyBydW50aW1lIGxpYnJhcmllcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfU1lTXyVcTVNWQ0lSVC5ETEwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXE1TVkNJUlQuRExMCi0gIERlc2NyaXB0aW9uPVZpc3VhbCBDKysgUnVudGltZSBETExzCi0gIEZsYWdzPTAwMDAwMTEwMDAwMTAwMTEKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1NZU18lXE1TVkNSVC5ETEwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXE1TVkNSVC5ETEwKLSAgRGVzY3JpcHRpb249VmlzdWFsIEMrKyBSdW50aW1lIERMTHMKLSAgRmxhZ3M9MDAwMDAxMTAwMDAxMDAxMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IFRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGNsL1RrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cLi5cJV90Y2xkaXJfJVxiaW5cKi5kbGwKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHMKLSAgRGVzY3JpcHRpb249VGNsL1RrIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXC4uXCVfdGNsZGlyXyVcbGliXCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcdGNsCi0gIERlc2NyaXB0aW9uPVRjbC9UayBiaW5hcmllcyBhbmQgbGlicmFyaWVzCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlETEUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCouZGVmCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYgotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXEljb25zXCoKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliXEljb25zCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cVG9vbHNcc2NyaXB0c1xpZGxlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dwotICBEZXNjcmlwdGlvbj1JRExFIGJvb3RzdHJhcCBzY3JpcHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2luZG93cyBweWRvYyBkcml2ZXIKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCoucHl3Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVdpbmRvd3MgcHlkb2MgZHJpdmVyCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DOiBkb2NzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX0RPQ18lXCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRG9jCi0gIERlc2NyaXB0aW9uPVB5dGhvbiBEb2N1bWVudGF0aW9uIChIVE1MKQotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RDogdG9vbHMKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5kb2MKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0c1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHdlYmNoZWNrZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcd2ViY2hlY2tlcgotICBEZXNjcmlwdGlvbj1XZWIgY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x3ZWJjaGVja2VyXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcd2ViY2hlY2tlclxSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVdlYiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x2ZXJzaW9uY2hlY2tcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcdmVyc2lvbmNoZWNrCi0gIERlc2NyaXB0aW9uPVZlcnNpb24gY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x2ZXJzaW9uY2hlY2tccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x2ZXJzaW9uY2hlY2tcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1WZXJzaW9uIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGUKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGUKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHhcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxYCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBYIGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gUkVBRE1FCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccHluY2hlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVccHluY2hlLnB5Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBtYWluCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVccHluY2hlLnB5dwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXHB5bmNoZS5weXcKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIG5vY29uc29sZSBtYWluCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcaTE4blwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xpMThuCi0gIERlc2NyaXB0aW9uPUludGVybmF0aW9uYWxpemF0aW9uIGhlbHBlcnMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUU6IHRlc3Qgc3VpdGUKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XGF1ZGlvdGVzdC5hdQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3RcYXVkaW90ZXN0LmF1Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnV1ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnhtbAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoub3V0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5iejIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnRhcgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCouZ3oKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFxvdXRwdXRcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdFxvdXRwdXQKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3Qgb3V0cHV0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1ET05FIHdpdGggZmlsZSBjb3B5aW5nLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgcmVzdCBpcyByZWdpc3RyeSBhbmQgU3RhcnQgTWVudSBmaWRkbGluZy4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiAgQXMgdXN1YWwsIEFkbWluIHByaXZzIGdldCBpbiB0aGUgd2F5LCBidXQgd2l0aCBhIHR3aXN0OgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Zb3UgZG9uJ3QgbmVlZCBhZG1pbiBwcml2cyB0byB3cml0ZSB0byBIS0VZX0NMQVNTRVNfUk9PVCAqZXhjZXB0KiB1bmRlciBXaW4ySy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9T24gV2luMkssIGEgdXNlciB3aXRob3V0IEFkbWluIHByaXZzIGhhcyB0byByZWdpc3RlciBleHRlbnNpb25zIHVuZGVyIEhLQ1VcU29mdHdhcmVcQ0xBU1NFUyBpbnN0ZWFkLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CdXQgd2hpbGUgeW91IGNhbiAqZG8qIHRoYXQgdW5kZXIgb3RoZXIgZmxhdm9ycyBvZiBXaW5kb3dzIHRvbywgaXQgaGFzIG5vIHVzZWZ1bCBlZmZlY3QgZXhjZXB0IGluIFdpbjJLLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTExMTEwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIHR5cGVzLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZSAobm8gY29uc29sZSkKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBOZXcgVmFsdWU9Q29tcGlsZWQgUHl0aG9uIEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweWMuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIGV4dGVuc2lvbnMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHkKLSAgTmV3IFZhbHVlPVB5dGhvbi5GaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHkKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHl3Ci0gIE5ldyBWYWx1ZT1QeXRob24uTm9Db25GaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHl3Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5YwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5bwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIHR5cGVzLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlIChubyBjb25zb2xlKQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlCi0gIE5ldyBWYWx1ZT1Db21waWxlZCBQeXRob24gRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5Yy5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1GaWxlIGV4dGVuc2lvbnMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weQotICBOZXcgVmFsdWU9UHl0aG9uLkZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weQotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weXcKLSAgTmV3IFZhbHVlPVB5dGhvbi5Ob0NvbkZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weXcKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHljCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHlvCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlmIHdlJ3JlIGluc3RhbGxpbmcgSURMRSwgYWxzbyBzZXQgYW4gRWRpdCBjb250ZXh0IG1lbnUgYWN0aW9uIHRvIHVzZSBJRExFLCBmb3IgLnB5IGFuZCAucHl3IGZpbGVzLgotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0ZXIgUHl0aG9uIHBhdGhzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB0byBIS0xNIGZvciBhZG1pbiwgZWxzZSBIS0NVLiAgS2VlcCB0aGVzZSBibG9ja3Mgb3RoZXJ3aXNlIGlkZW50aWNhbCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcQ3VycmVudFZlcnNpb24KLSAgUm9vdD0xMzAKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cAotICBOZXcgVmFsdWU9JUNHUk9VUF9TQVZFJQotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXFB5dGhvblBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxMaWI7JU1BSU5ESVIlXERMTHMKLSAgTmV3IFZhbHVlPQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxNb2R1bGVzCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cQXBwIFBhdGhzXFB5dGhvbi5leGUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeXRob24uZXhlCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcQ3VycmVudFZlcnNpb24KLSAgUm9vdD0xMjkKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cAotICBOZXcgVmFsdWU9JUNHUk9VUF9TQVZFJQotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXFB5dGhvblBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxMaWI7JU1BSU5ESVIlXERMTHMKLSAgTmV3IFZhbHVlPQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxNb2R1bGVzCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cQXBwIFBhdGhzXFB5dGhvbi5leGUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeXRob24uZXhlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RyeSBmaWRkbGluZyBmb3IgZG9jcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdG8gSEtMTSBmb3IgYWRtaW4sIGVsc2UgSEtDVS4gIEtlZXAgdGhlc2UgYmxvY2tzIG90aGVyd2lzZSBpZGVudGljYWwhCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TZXQgdGhlIGFwcCBwdWJsaXNoZXIgYW5kIFVSTCBlbnRyaWVzIGZvciBXaW4ySyBhZGQvcmVtb3ZlLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JdCBkb2Vzbid0IGh1cnQgb24gb3RoZXIgc3lzdGVtcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QXMgdXN1YWwsIHdyaXRlIHRvIEhLTE0gb3IgSEtDVSBkZXBlbmRpbmcgb24gQWRtaW4gcHJpdnMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNBVVRJT046ICBJZiB5b3Ugc2V0IHRoaXMgaW5mbyBvbiB0aGUgIldpbmRvd3MgMjAwMCIgcGFnZSAoc3RlcCA2KSBvZiB0aGUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbGF0aW9uIEV4cGVydCwgaXQgb25seSBzaG93cyB1cCBpbiB0aGUgIklmIiBibG9jayBiZWxvdy4gIEtlZXAgaW4gc3luY2ghCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9SGVscExpbmsKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9UHl0aG9uTGFicyBhdCBab3BlIENvcnBvcmF0aW9uCi0gIFZhbHVlIE5hbWU9UHVibGlzaGVyCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1VUkxJbmZvQWJvdXQKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVBZVkVSX1NUUklORyUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5VmVyc2lvbgotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHkuaWNvLC0wCi0gIFZhbHVlIE5hbWU9RGlzcGxheUljb24KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPUhlbHBMaW5rCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPVB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvbgotICBWYWx1ZSBOYW1lPVB1Ymxpc2hlcgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9VVJMSW5mb0Fib3V0Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVQWVZFUl9TVFJJTkclCi0gIFZhbHVlIE5hbWU9RGlzcGxheVZlcnNpb24KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5LmljbywtMAotICBWYWx1ZSBOYW1lPURpc3BsYXlJY29uCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBvcHVsYXRlIFN0YXJ0IE1lbnUgZ3JvdXAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2hvcnRjdXQgdG8gaW5zdGFsbGVyIG5vIG1hdHRlciB3aGF0LgotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVx1bndpc2UuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcVW5pbnN0YWxsIFB5dGhvbi5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9uLmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFB5dGhvbiAoY29tbWFuZCBsaW5lKS5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEljb24gUGF0aG5hbWU9JU1BSU5ESVIlXHB5Y29uLmljbwotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXElETEUgKFB5dGhvbiBHVUkpLmxuawotICBDb21tYW5kIE9wdGlvbnM9IiVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyIKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxNb2R1bGUgRG9jcy5sbmsKLSAgQ29tbWFuZCBPcHRpb25zPSIlTUFJTkRJUiVcVG9vbHNcU2NyaXB0c1xweWRvY2d1aS5weXciCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFB5dGhvbiBNYW51YWxzLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JIGRvbid0IHRoaW5rIHdlIG5lZWQgdGhpcywgYnV0IGhhdmUgYWx3YXlzIGRvbmUgaXQuCi1lbmQKLWl0ZW06IFNlbGYtUmVnaXN0ZXIgT0NYcy9ETExzCi0gIERlc2NyaXB0aW9uPVVwZGF0aW5nIFN5c3RlbSBDb25maWd1cmF0aW9uLCBQbGVhc2UgV2FpdC4uLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9RG9uJ3QgZW5hYmxlICJEZWxldGUgaW4tdXNlIGZpbGVzIi4gIEhlcmUncyB3aGF0IGhhcHBlbnM6Ci1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGwgUHl0aG9uOyB1bmluc3RhbGwgUHl0aG9uOyBpbnN0YWxsIFB5dGhvbiBhZ2Fpbi4gIFJlYm9vdCB0aGUgbWFjaGluZS4KLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm93IFVOV0lTRS5FWEUgaXMgbWlzc2luZy4gIEkgdGhpbmsgdGhpcyBpcyBhIFdpc2UgYnVnLCBidXQgc28gaXQgZ29lcy4KLWVuZAotcmVtYXJrZWQgaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1EZWxldGUgaW4tdXNlIGZpbGVzOiBPbgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogV2l6YXJkIEJsb2NrCi0gIERpcmVjdGlvbiBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIEJpdG1hcCBQYXRobmFtZT0uXGluc3RhbGxlci5ibXAKLSAgWCBQb3NpdGlvbj05Ci0gIFkgUG9zaXRpb249MTAKLSAgRmlsbGVyIENvbG9yPTExMTczNzU5Ci0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9RmluaXNoZWQKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9JkZpbmlzaAotICAgICAgVGV4dCBGcmVuY2g9JkZpbgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlcgotICAgICAgVGV4dCBTcGFuaXNoPSZUZXJtaW5hcgotICAgICAgVGV4dCBJdGFsaWFuPSZGaW5lCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIFZhcmlhYmxlPURJU0FCTEVECi0gICAgICBWYWx1ZT0hCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDQ4Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PUluc3RhbGxhdGlvbiBDb21wbGV0ZWQhCi0gICAgICBUZXh0IEZyZW5jaD1JbnN0YWxsYXRpb24gdGVybWlu6WUgIQotICAgICAgVGV4dCBHZXJtYW49RGllIEluc3RhbGxhdGlvbiBpc3QgYWJnZXNjaGxvc3NlbiEKLSAgICAgIFRleHQgU3BhbmlzaD2hSW5zdGFsYWNp824gdGVybWluYWRhIQotICAgICAgVGV4dCBJdGFsaWFuPUluc3RhbGxhemlvbmUgY29tcGxldGF0YSEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDQgMzIwIDgyCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JUFQUFRJVExFJSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9UHJlc3MgdGhlIEZpbmlzaCBidXR0b24gdG8gZXhpdCB0aGlzIGluc3RhbGxhdGlvbi4KLSAgICAgIFRleHQgRnJlbmNoPSVBUFBUSVRMRSUgZXN0IG1haW50ZW5hbnQgaW5zdGFsbOkuCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgRnJlbmNoPUNsaXF1ZXogc3VyIGxlIGJvdXRvbiBGaW4gcG91ciBxdWl0dGVyIGwnaW5zdGFsbGF0aW9uLgotICAgICAgVGV4dCBHZXJtYW49JUFQUFRJVExFJSB3dXJkZSBlcmZvbGdyZWljaCBpbnN0YWxsaWVydC4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBHZXJtYW49S2xpY2tlbiBTaWUgYXVmICJXZWl0ZXIiLCB1bSBkaWUgSW5zdGFsbGF0aW9uIHp1IGJlZW5kZW4uCi0gICAgICBUZXh0IFNwYW5pc2g9JUFQUFRJVExFJSBzZSBoYSBpbnN0YWxhZG8gY29uIOl4aXRvLgotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBTcGFuaXNoPVByZXNpb25lIGVsIGJvdPNuIFRlcm1pbmFyIHBhcmEgc2FsaXIgZGUgZXN0YSBpbnN0YWxhY2nzbi4KLSAgICAgIFRleHQgSXRhbGlhbj1MJ2luc3RhbGxhemlvbmUgJUFQUFRJVExFJSDoIHN0YXRhIHBvcnRhdGEgYSB0ZXJtaW5lIGNvbiBzdWNjZXNzby4KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgSXRhbGlhbj1QcmVtZXJlIGlsIHB1bHNhbnRlIEZpbmUgcGVyIHVzY2lyZSBkYWxsJ2luc3RhbGxhemlvbmUuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDYgMTA1IDMxMiAyMTAKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1TcGVjaWFsIFdpbmRvd3MgdGhhbmtzIHRvOgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9V2lzZSBTb2x1dGlvbnMsIGZvciB0aGUgdXNlIG9mIEluc3RhbGxNYXN0ZXIgOC4xLgotICAgICAgVGV4dD0gICAgaHR0cDovL3d3dy53aXNlc29sdXRpb25zLmNvbS8KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1MZXR0RXJyb3IsIEVyaWsgdmFuIEJsb2tsYW5kLCBmb3IgdGhlIFB5dGhvbiBmb3IgV2luZG93cyBncmFwaGljLgotICAgICAgVGV4dD0gICAgaHR0cDovL3d3dy5sZXR0ZXJyb3IuY29tLwotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PU1hcmsgSGFtbW9uZCwgd2l0aG91dCB3aG9zZSB5ZWFycyBvZiBmcmVlbHkgc2hhcmVkIFdpbmRvd3MgZXhwZXJ0aXNlLCBQeXRob24gZm9yIFdpbmRvd3Mgd291bGQgc3RpbGwgYmUgUHl0aG9uIGZvciBET1MuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA2IDk1IDMxMiA5NgotICAgICAgQWN0aW9uPTMKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMQotICAgIGVuZAotICBlbmQKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IE5ldyBFdmVudAotICBOYW1lPUNhbmNlbAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIGluY2x1ZGUgc2NyaXB0IHN1cHBvcnRzIGEgcm9sbGJhY2sgdG8gcHJlaW5zdGFsbGF0aW9uIHN0YXRlIGlmIHRoZSB1c2VyIGNob29zZXMgdG8gY2FuY2VsIGJlZm9yZSB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlLgotZW5kCi1pdGVtOiBJbmNsdWRlIFNjcmlwdAotICBQYXRobmFtZT0lX1dJU0VfJVxJTkNMVURFXHJvbGxiYWNrLndzZQotZW5kCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWM0MTg0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsODI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob25jb3JlIg0KLQlQcm9qZWN0R1VJRD0ie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEzMH0iDQotCVJvb3ROYW1lc3BhY2U9InB5dGhvbmNvcmUiDQotCVNjY1Byb2plY3ROYW1lPSJweXRob25jb3JlIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1VTRV9ETF9FWFBPUlQ7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zM19kLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iRkFMU0UiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzMuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Il9pbyINCi0gICAgICAgICAgICBGaWx0ZXI9IiI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQ0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9InpsaWIiDQotCQkJRmlsdGVyPSIiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jIj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1xfc3VicHJvY2Vzcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxfd2FybmluZ3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFic3RyYWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWNjdS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc2RsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdGV4aXRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdWRpb29wLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcY29uZmlnLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZXJyb3JzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZmlyc3RzZXRzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmcm96ZW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmdXR1cmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xnY21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIxLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbGlzdG5vZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1haW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1hcnNoYWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLSAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1zdmNydG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzbnByaW50Zi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxub2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2VyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXRvay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlhcmVuYS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5bWF0aC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJjbXAuYyINCi0JCQk+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RydG9kLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRpbWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX250LnJjIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aG9ucnVuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxyYW5kb20uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNldG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeW10YWJsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclx0b2tlbml6ZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRyYWNlYmFjay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGNcd2lucmVnLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzcuMS9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkN2Y1MC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9udyINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbnciDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbndfZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXFdpbk1haW4uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JlYWRtZS50eHQgYi9QQy9WUzcuMS9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ4YTcwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgNy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTk1LCA5OCBhbmQgTlQuICBJdCByZXF1aXJlcyBNaWNyb3NvZnQgVmlzdWFsIEMrKyA3LjEKLShhLmsuYS4gVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMpLgotKEZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vUEMvcmVhZG1lLnR4dC4pCi0KLUFsbCB5b3UgbmVlZCB0byBkbyBpcyBvcGVuIHRoZSB3b3Jrc3BhY2UgInBjYnVpbGQuc2xuIiBpbiBNU1ZDKyssIHNlbGVjdAotdGhlIERlYnVnIG9yIFJlbGVhc2Ugc2V0dGluZyAodXNpbmcgIlNvbHV0aW9uIENvbmZpZ3VyYXRpb24iIGZyb20KLXRoZSAiU3RhbmRhcmQiIHRvb2xiYXIiKSwgYW5kIGJ1aWxkIHRoZSBwcm9qZWN0cy4KLQotVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKLQotMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjMzLntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQotICAgICAgICAgICAgICBOT1RFOiAgaW4gcHJldmlvdXMgcmVsZWFzZXMsIHRoaXMgc3VicHJvamVjdCB3YXMKLSAgICAgICAgICAgICAgbmFtZWQgYWZ0ZXIgdGhlIHJlbGVhc2UgbnVtYmVyLCBlLmcuIHB5dGhvbjIwLgotCi0yKSBweXRob24gKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlLAotICAgICAgICAgICBweXRob24uZXhlIGluIFJlbGVhc2UgbW9kZSkKLQotMykgdGhlIG90aGVyIHN1YnByb2plY3RzLCBhcyBkZXNpcmVkIG9yIG5lZWRlZCAobm90ZTogIHlvdSBwcm9iYWJseSBkb24ndAotICAgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzIHlvdSdyZSBidWlsZGluZyBhbgotICAgZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvciBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMKLSAgIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUgcnVubmluZyBhIFB5dGhvbiBjb3JlIGJ1aWxkYm90Ci0gICB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uCi0KLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCi0KLXB5dGhvbmNvcmUKLSAgICAuZGxsIGFuZCAubGliCi1weXRob24KLSAgICAuZXhlCi1weXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94Ci1fc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKLV90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwotcHlleHBhdAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBhY2NlbGVyYXRlZCBYTUwgcGFyc2luZywgd2hpY2ggaW5jb3Jwb3JhdGVzIHN0YWJsZQotICAgIGNvZGUgZnJvbSB0aGUgRXhwYXQgcHJvamVjdDogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvCi1zZWxlY3QKLSAgICBzZWxlY3Rtb2R1bGUuYwotdW5pY29kZWRhdGEKLSAgICBsYXJnZSB0YWJsZXMgb2YgVW5pY29kZSBkYXRhCi13aW5zb3VuZAotICAgIHBsYXkgc291bmRzICh0eXBpY2FsbHkgLndhdiBmaWxlcykgdW5kZXIgV2luZG93cwotCi1UaGUgZm9sbG93aW5nIHN1YnByb2plY3RzIHdpbGwgZ2VuZXJhbGx5IE5PVCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFRoZXkKLXdyYXAgY29kZSBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgdGhlIGJhc2UKLXBhY2thZ2VzIGZpcnN0IGFuZCB1bnBhY2sgdGhlbSBpbnRvIHNpYmxpbmdzIG9mIFBDJ3MgcGFyZW50Ci1kaXJlY3Rvcnk7IGZvciBleGFtcGxlLCBpZiB0aGlzIGRpcmVjdG9yeSBpcyAuLi4uXGRpc3RcdHJ1bmtcUENcVlM3LjEsCi11bnBhY2sgaW50byBuZXcgc3ViZGlyZWN0b3JpZXMgb2YgZGlzdFwuCi0KLV90a2ludGVyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgUmVxdWlyZXMgYnVpbGRpbmcKLSAgICBUY2wvVGsgZmlyc3QuICBGb2xsb3dpbmcgYXJlIGluc3RydWN0aW9ucyBmb3IgVGNsL1RrIDguNC4xMi4KLQotICAgIEdldCBzb3VyY2UKLSAgICAtLS0tLS0tLS0tCi0gICAgSW4gdGhlIGRpc3QgZGlyZWN0b3J5LCBydW4KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2w4LjQuMTIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90azguNC4xMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RpeC04LjQuMAotCi0gICAgQnVpbGQgVGNsIGZpcnN0IChkb25lIGhlcmUgdy8gTVNWQyA3LjEgb24gV2luZG93cyBYUCkKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBVc2UgIlN0YXJ0IC0+IEFsbCBQcm9ncmFtcyAtPiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMKLSAgICAgICAgIC0+IFZpc3VhbCBTdHVkaW8gLk5FVCBUb29scyAtPiBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMyBDb21tYW5kIFByb21wdCIKLSAgICB0byBnZXQgYSBzaGVsbCB3aW5kb3cgd2l0aCB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCBzZXR0aW5ncwotICAgIGNkIGRpc3RcdGNsOC40LjEyXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QKLQotICAgICAgICBPbiBXaW5YUCBQcm8sIHdob2xseSB1cCB0byBkYXRlIGFzIG9mIDMwLUF1Zy0yMDA0OgotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICAxMDY3OCAgIFBhc3NlZCAgOTk2OSAgICBTa2lwcGVkIDcwOSAgICAgRmFpbGVkICAwCi0gICAgICAgIFNvdXJjZWQgMTI5IFRlc3QgRmlsZXMuCi0KLSAgICBCdWlsZCBUawotICAgIC0tLS0tLS0tCi0gICAgY2QgZGlzdFx0azguNC4xMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIFhYWCBPdXIgaW5zdGFsbGVyIGNvcGllcyBhIGxvdCBvZiBzdHVmZiBvdXQgb2YgdGhlIFRjbC9UayBpbnN0YWxsCi0gICAgWFhYIGRpcmVjdG9yeS4gIElzIGFsbCBvZiB0aGF0IHJlYWxseSBuZWVkZWQgZm9yIFB5dGhvbiB1c2Ugb2YgVGNsL1RrPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyIHRlc3QKLQotICAgICAgICBPbiBXaW5YUCBQcm8sIHdob2xseSB1cCB0byBkYXRlIGFzIG9mIDMwLUF1Zy0yMDA0OgotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICA4NDIwICAgIFBhc3NlZCAgNjgyNiAgICBTa2lwcGVkIDE1ODEgICAgRmFpbGVkICAxMwotICAgICAgICBTb3VyY2VkIDkxIFRlc3QgRmlsZXMuCi0gICAgICAgIEZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czogY2FudkltZy50ZXN0IHNjcm9sbGJhci50ZXN0IHRleHRXaW5kLnRlc3Qgd2luV20udGVzdAotCi0gICBCdWlsdCBUaXgKLSAgIC0tLS0tLS0tLQotICAgY2QgZGlzdFx0aXgtOC40LjBcd2luCi0gICBubWFrZSAtZiBweXRob24ubWFrCi0gICBubWFrZSAtZiBweXRob24ubWFrIGluc3RhbGwKLQotYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiejIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCi0gICAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnppcDIvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC4zCi0KLSAgICBBIGN1c3RvbSBwcmUtbGluayBzdGVwIGluIHRoZSBiejIgcHJvamVjdCBzZXR0aW5ncyBzaG91bGQgbWFuYWdlIHRvCi0gICAgYnVpbGQgYnppcDItMS4wLjNcbGliYnoyLmxpYiBieSBtYWdpYyBiZWZvcmUgYnoyLnB5ZCAob3IgYnoyX2QucHlkKSBpcwotICAgIGxpbmtlZCBpbiBWUzcuMVwuCi0gICAgSG93ZXZlciwgdGhlIGJ6MiBwcm9qZWN0IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gcmVtb3ZlIGFueXRoaW5nIHVuZGVyCi0gICAgYnppcDItMS4wLjNcIHdoZW4geW91IGRvIGEgY2xlYW4sIHNvIGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgYnppcDIubGliCi0gICAgeW91IG5lZWQgdG8gY2xlYW4gdXAgYnppcDItMS4wLjNcIGJ5IGhhbmQuCi0KLSAgICBUaGUgYnVpbGQgc3RlcCBzaG91bGRuJ3QgeWllbGQgYW55IHdhcm5pbmdzIG9yIGVycm9ycywgYW5kIHNob3VsZCBlbmQKLSAgICBieSBkaXNwbGF5aW5nIDYgYmxvY2tzIGVhY2ggdGVybWluYXRlZCB3aXRoCi0gICAgICAgIEZDOiBubyBkaWZmZXJlbmNlcyBlbmNvdW50ZXJlZAotCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuM1xsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCi0gICAgcHJvamVjdCBsaW5rcyBpbi4KLQotX3NxbGl0ZTMKLSAgICBQeXRob24gd3JhcHBlciBmb3IgU1FMaXRlIGxpYnJhcnkuCi0gICAgCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0gICAgCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLXNvdXJjZS0zLjMuNAotICAgIAotICAgIFRvIHVzZSB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpbiBhIFB5dGhvbiBidWlsZCB0cmVlLCBjb3B5IHNxbGl0ZTMuZGxsIGludG8KLSAgICB0aGUgVlM3LjEgZm9sZGVyLgotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTAuOS44YQotCi0gICAgQWx0ZXJuYXRpdmVseSwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcuCi0gICAgWW91IGNhbiAodGhlb3JldGljYWxseSkgdXNlIGFueSB2ZXJzaW9uIG9mIE9wZW5TU0wgeW91IGxpa2UgLSB0aGUKLSAgICBidWlsZCBwcm9jZXNzIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi0gICAgWW91IG11c3QgYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQotICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9Qcm9kdWN0cy9BY3RpdmVQZXJsLwotICAgIGFzIHRoaXMgaXMgdXNlZCBieSB0aGUgT3BlblNTTCBidWlsZCBwcm9jZXNzLiAgQ29tcGxhaW4gdG8gdGhlbSA8d2luaz4uCi0KLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIGJ1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotQnVpbGRpbmcgZm9yIEl0YW5pdW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBwcm9qZWN0IGZpbGVzIHN1cHBvcnQgYSBSZWxlYXNlSXRhbml1bSBjb25maWd1cmF0aW9uIHdoaWNoIGNyZWF0ZXMKLVdpbjY0L0l0YW5pdW0gYmluYXJpZXMuIEZvciB0aGlzIHRvIHdvcmssIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFBsYXRmb3JtCi1TREssIGluIHBhcnRpY3VsYXIgdGhlIDY0LWJpdCBzdXBwb3J0LiBUaGlzIGluY2x1ZGVzIGFuIEl0YW5pdW0gY29tcGlsZXIKLShmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIFNESyBsaWtlbHkgaW5jbHVkZSBhbiBBTUQ2NCBjb21waWxlciBhcyB3ZWxsKS4KLUluIGFkZGl0aW9uLCB5b3UgbmVlZCB0aGUgVmlzdWFsIFN0dWRpbyBwbHVnaW4gZm9yIGV4dGVybmFsIEMgY29tcGlsZXJzLAotZnJvbSBodHRwOi8vc2YubmV0L3Byb2plY3RzL3ZzZXh0Y29tcC4gVGhlIHBsdWdpbiB3aWxsIHdyYXAgY2wuZXhlLCB0bwotbG9jYXRlIHRoZSBwcm9wZXIgdGFyZ2V0IGNvbXBpbGVyLCBhbmQgY29udmVydCBjb21waWxlciBvcHRpb25zCi1hY2NvcmRpbmdseS4gVGhlIHByb2plY3QgZmlsZXMgcmVxdWlyZSBhdGxlYXN0IHZlcnNpb24gMC45LgotCi1CdWlsZGluZyBmb3IgQU1ENjQKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFJlbGVhc2VBTUQ2NCBjb25maWd1cmF0aW9uIGlzIHZlcnkgc2ltaWxhcgotdG8gdGhlIEl0YW5pdW0gY29uZmlndXJhdGlvbjsgbWFrZSBzdXJlIHlvdSB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCi12c2V4dGNvbXAuCi0KLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgVmlzdWFsIEMrKyBjYW4gYmUgdXNlZCBhbG1vc3QgdW5jaGFuZ2VkIHdpdGggdGhlIGZyZWUgTVMKLVRvb2xraXQgQ29tcGlsZXIuIFRoaXMgcHJvdmlkZXMgYSB3YXkgb2YgYnVpbGRpbmcgUHl0aG9uIHVzaW5nIGZyZWVseQotYXZhaWxhYmxlIHNvZnR3YXJlLgotCi1Ob3RlIHRoYXQgTWljcm9zb2Z0IGhhdmUgd2l0aGRyYXduIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIsIHNvIHRoaXMgY2FuCi1ubyBsb25nZXIgYmUgY29uc2lkZXJlZCBhIHN1cHBvcnRlZCBvcHRpb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHN0aWxsCi1jb3JyZWN0LCBidXQgeW91IG5lZWQgdG8gYWxyZWFkeSBoYXZlIGEgY29weSBvZiB0aGUgY29tcGlsZXIgaW4gb3JkZXIgdG8gdXNlCi10aGVtLiBNaWNyb3NvZnQgbm93IHN1cHBseSBWaXN1YWwgQysrIDIwMDggRXhwcmVzcyBFZGl0aW9uIGZvciBmcmVlLCBidXQgdGhpcwotaXMgTk9UIGNvbXBhdGlibGUgd2l0aCBWaXN1YWwgQysrIDcuMSAoaXQgdXNlcyBhIGRpZmZlcmVudCBDIHJ1bnRpbWUpLCBhbmQgc28KLWNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBQeXRob24gY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAotcHl0aG9uLm9yZyBidWlsZC4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHVzaW5nIFZpc3VhbCBDKysgMjAwOCBFeHByZXNzCi1FZGl0aW9uLCBob3dldmVyLCB5b3Ugc2hvdWxkIGxvb2sgYXQgdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgotCi1SZXF1aXJlbWVudHMKLQotICAgIFRvIGJ1aWxkIFB5dGhvbiwgdGhlIGZvbGxvd2luZyB0b29scyBhcmUgcmVxdWlyZWQ6Ci0KLSAgICAqIFRoZSBWaXN1YWwgQysrIFRvb2xraXQgQ29tcGlsZXIKLSAgICAgICAgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgLSBzZWUgYWJvdmUKLSAgICAqIEEgcmVjZW50IFBsYXRmb3JtIFNESwotICAgICAgICBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPTQ4NDI2OWUyLTNiODktNDdlMy04ZWI3LTFmMmJlNmQ3MTIzYQotICAgICogVGhlIC5ORVQgMS4xIFNESwotICAgICAgICBmcm9tIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPTliM2EyY2E2LTM2NDctNDA3MC05ZjQxLWEzMzNjNmI5MTgxZAotCi0gICAgW0RvZXMgYW55b25lIGhhdmUgYmV0dGVyIFVSTHMgZm9yIHRoZSBsYXN0IDIgb2YgdGhlc2U/XQotCi0gICAgVGhlIHRvb2xraXQgY29tcGlsZXIgaXMgbmVlZGVkIGFzIGl0IGlzIGFuIG9wdGltaXNpbmcgY29tcGlsZXIgKHRoZQotICAgIGNvbXBpbGVyIHN1cHBsaWVkIHdpdGggdGhlIC5ORVQgU0RLIGlzIGEgbm9uLW9wdGltaXNpbmcgdmVyc2lvbikuIFRoZQotICAgIHBsYXRmb3JtIFNESyBpcyBuZWVkZWQgdG8gcHJvdmlkZSB0aGUgV2luZG93cyBoZWFkZXIgZmlsZXMgYW5kIGxpYnJhcmllcwotICAgICh0aGUgV2luZG93cyAyMDAzIFNlcnZlciBTUDEgZWRpdGlvbiwgdHlwaWNhbCBpbnN0YWxsLCBpcyBrbm93biB0byB3b3JrIC0KLSAgICBvdGhlciBjb25maWd1cmF0aW9ucyBvciB2ZXJzaW9ucyBhcmUgcHJvYmFibHkgZmluZSBhcyB3ZWxsKS4gVGhlIC5ORVQgMS4xCi0gICAgU0RLIGlzIG5lZWRlZCBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgdmVyc2lvbiBvZiBtc3ZjcnQuZGxsIHdoaWNoIGxpbmtzIHRvCi0gICAgdGhlIG1zdmNyNzEuZGxsIENSVC4gTm90ZSB0aGF0IHRoZSAuTkVUIDIuMCBTREsgaXMgTk9UIGFjY2VwdGFibGUsIGFzIGl0Ci0gICAgcmVmZXJlbmNlcyBtc3ZjcjgwLmRsbC4KLQotICAgIEFsbCBvZiB0aGUgYWJvdmUgaXRlbXMgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBub3JtYWwuCi0KLSAgICBJZiB5b3UgaW50ZW5kIHRvIGJ1aWxkIHRoZSBvcGVuc3NsIChuZWVkZWQgZm9yIHRoZSBfc3NsIGV4dGVuc2lvbikgeW91Ci0gICAgd2lsbCBuZWVkIHRoZSBDIHJ1bnRpbWUgc291cmNlcyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgcGxhdGZvcm0gU0RLLgotCi0gICAgSW4gYWRkaXRpb24sIHlvdSB3aWxsIG5lZWQgTmFudCwgYXZhaWxhYmxlIGZyb20KLSAgICBodHRwOi8vbmFudC5zb3VyY2Vmb3JnZS5uZXQuIFRoZSAwLjg1IHJlbGVhc2UgY2FuZGlkYXRlIDMgdmVyc2lvbiBpcyBrbm93bgotICAgIHRvIHdvcmsuIFRoaXMgaXMgdGhlIGxhdGVzdCByZWxlYXNlZCB2ZXJzaW9uIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcuIExhdGVyCi0gICAgIm5pZ2h0bHkgYnVpbGQiIHZlcnNpb25zIGFyZSBrbm93biBOT1QgdG8gd29yayAtIGl0IGlzIG5vdCBjbGVhciBhdAotICAgIHByZXNlbnQgd2hldGhlciBmdXR1cmUgcmVsZWFzZWQgdmVyc2lvbnMgd2lsbCB3b3JrLgotCi1TZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudAotCi0gICAgU3RhcnQgYSBwbGF0Zm9ybSBTREsgImJ1aWxkIGVudmlyb25tZW50IHdpbmRvdyIgZnJvbSB0aGUgc3RhcnQgbWVudS4gVGhlCi0gICAgIldpbmRvd3MgWFAgMzItYml0IHJldGFpbCIgdmVyc2lvbiBpcyBrbm93biB0byB3b3JrLgotCi0gICAgQWRkIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgdG8geW91ciBQQVRIOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIGRpcmVjdG9yeQotICAgICAgICAqIFRoZSBTREsgIldpbjY0IiBiaW5hcmllcyBkaXJlY3RvcnkKLQkqIFRoZSBOYW50IGRpcmVjdG9yeQotICAgIEFkZCB0byB5b3VyIElOQ0xVREUgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgSU5DTFVERSBkaXJlY3RvcnkKLSAgICBBZGQgdG8geW91ciBMSUIgZW52aXJvbm1lbnQgdmFyaWFibGU6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgTElCIGRpcmVjdG9yeQotCSogVGhlIC5ORVQgU0RLIFZpc3VhbCBTdHVkaW8gMjAwMyBWQzdcbGliIGRpcmVjdG9yeQotCi0gICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBzaG91bGQgc2V0IHRoaW5ncyB1cCBhcyB5b3UgbmVlZCB0aGVtOgotCi0gICAgICAgIHJlbSBTZXQgdGhlc2UgdmFsdWVzIGFjY29yZGluZyB0byB3aGVyZSB5b3UgaW5zdGFsbGVkIHRoZSBzb2Z0d2FyZQotICAgICAgICBzZXQgVE9PTEtJVD1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgQysrIFRvb2xraXQgMjAwMwotICAgICAgICBzZXQgU0RLPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFBsYXRmb3JtIFNESwotICAgICAgICBzZXQgTkVUPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzCi0gICAgICAgIHNldCBOQU5UPUM6XFV0aWxzXE5hbnQKLQotICAgICAgICBzZXQgUEFUSD0lVE9PTEtJVCVcYmluOyVQQVRIJTslU0RLJVxCaW5cd2luNjQ7JU5BTlQlXGJpbgotICAgICAgICBzZXQgSU5DTFVERT0lVE9PTEtJVCVcaW5jbHVkZTslSU5DTFVERSUKLSAgICAgICAgc2V0IExJQj0lVE9PTEtJVCVcbGliOyVORVQlXFZDN1xsaWI7JUxJQiUKLQotICAgIFRoZSAid2luNjQiIGRpcmVjdG9yeSBmcm9tIHRoZSBTREsgaXMgYWRkZWQgdG8gc3VwcGx5IGV4ZWN1dGFibGVzIHN1Y2ggYXMKLSAgICAiY3Z0cmVzIiBhbmQgImxpYiIsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZS4gVGhlIHZlcnNpb25zIGluIHRoZQotICAgICJ3aW42NCIgZGlyZWN0b3J5IGFyZSAzMi1iaXQgcHJvZ3JhbXMsIHNvIHRoZXkgYXJlIGZpbmUgdG8gdXNlIGhlcmUuCi0KLSAgICBUaGF0J3MgaXQuIFRvIGJ1aWxkIFB5dGhvbiAodGhlIGNvcmUgb25seSwgbm8gYmluYXJ5IGV4dGVuc2lvbnMgd2hpY2gKLSAgICBkZXBlbmQgb24gZXh0ZXJuYWwgbGlicmFyaWVzKSB5b3UganVzdCBuZWVkIHRvIGlzc3VlIHRoZSBjb21tYW5kCi0KLSAgICAgICAgbmFudCAtYnVpbGRmaWxlOnB5dGhvbi5idWlsZCBhbGwKLQotICAgIGZyb20gd2l0aGluIHRoZSBWUzcuMSBkaXJlY3RvcnkuCi0KLUV4dGVuc2lvbiBtb2R1bGVzCi0KLSAgICBUbyBidWlsZCB0aG9zZSBleHRlbnNpb24gbW9kdWxlcyB3aGljaCByZXF1aXJlIGV4dGVybmFsIGxpYnJhcmllcwotICAgIChfdGtpbnRlciwgYnoyLCBfc3FsaXRlMywgX3NzbCkgeW91IGNhbiBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwotICAgIGZvciB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZCBhYm92ZSwgd2l0aCBhIGZldyBtaW5vciBtb2RpZmljYXRpb25zLiBUaGVzZQotICAgIGluc3RydWN0aW9ucyBoYXZlIG9ubHkgYmVlbiB0ZXN0ZWQgdXNpbmcgdGhlIHNvdXJjZXMgaW4gdGhlIFB5dGhvbgotICAgIHN1YnZlcnNpb24gcmVwb3NpdG9yeSAtIGJ1aWxkaW5nIGZyb20gb3JpZ2luYWwgc291cmNlcyBzaG91bGQgd29yaywgYnV0Ci0gICAgaGFzIG5vdCBiZWVuIHRlc3RlZC4KLQotICAgIEZvciBlYWNoIGV4dGVuc2lvbiBtb2R1bGUgeW91IHdpc2ggdG8gYnVpbGQsIHlvdSBzaG91bGQgcmVtb3ZlIHRoZQotICAgIGFzc29jaWF0ZWQgaW5jbHVkZSBsaW5lIGZyb20gdGhlIGV4Y2x1ZGVwcm9qZWN0cyBzZWN0aW9uIG9mIHBjLmJ1aWxkLgotCi0gICAgVGhlIGNoYW5nZXMgcmVxdWlyZWQgYXJlOgotCi0gICAgX3RraW50ZXIKLSAgICAgICAgVGhlIHRpeCBtYWtlZmlsZSAodGl4LTguNC4wXHdpblxtYWtlZmlsZS52YykgbXVzdCBiZSBtb2RpZmllZCB0bwotCXJlbW92ZSByZWZlcmVuY2VzIHRvIFRPT0xTMzIuIFRoZSByZWxldmFudCBsaW5lcyBzaG91bGQgYmUgY2hhbmdlZCB0bwotCXJlYWQ6Ci0gICAgICAgICAgICBjYzMyID0gY2wuZXhlCi0gICAgICAgICAgICBsaW5rMzIgPSBsaW5rLmV4ZQotICAgICAgICAgICAgaW5jbHVkZTMyID0gCi0JVGhlIHJlbWFpbmRlciBvZiB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIHdpbGwgd29yayBhcyBnaXZlbi4KLQotICAgIGJ6MgotICAgICAgICBObyBjaGFuZ2VzIGFyZSBuZWVkZWQKLQotICAgIF9zcWxpdGUzCi0gICAgICAgIE5vIGNoYW5nZXMgYXJlIG5lZWRlZC4gSG93ZXZlciwgaW4gb3JkZXIgZm9yIHRoZSB0ZXN0cyB0byBzdWNjZWVkLCBhCi0JY29weSBvZiBzcWxpdGUzLmRsbCBtdXN0IGJlIGRvd25sb2FkZWQsIGFuZCBwbGFjZWQgYWxvbmdzaWRlCi0JcHl0aG9uLmV4ZS4KLQotICAgIF9zc2wKLSAgICAgICAgVGhlIGRvY3VtZW50ZWQgYnVpbGQgcHJvY2VzcyB3b3JrcyBhcyB3cml0dGVuLiBIb3dldmVyLCBpdCBuZWVkcyBhCi0JY29weSBvZiB0aGUgZmlsZSBzZXRhcmd2Lm9iaiwgd2hpY2ggaXMgbm90IHN1cHBsaWVkIGluIHRoZSBwbGF0Zm9ybQotCVNESy4gSG93ZXZlciwgdGhlIHNvdXJjZXMgYXJlIGF2YWlsYWJsZSAoaW4gdGhlIGNydCBzb3VyY2UgY29kZSkuIFRvCi0JYnVpbGQgc2V0YXJndi5vYmosIHByb2NlZWQgYXMgZm9sbG93czoKLQotICAgICAgICBDb3B5IHNldGFyZ3YuYywgY3J1bnRpbWUuaCBhbmQgaW50ZXJuYWwuaCBmcm9tICVTREslXHNyY1xjcnQgdG8gYQotCXRlbXBvcmFyeSBkaXJlY3RvcnkuCi0JQ29tcGlsZSB1c2luZyAiY2wgL2MgL0kuIC9NRCAvRF9DUlRCTEQgc2V0YXJndi5jIgotCUNvcHkgdGhlIHJlc3VsdGluZyBzZXRhcmd2Lm9iaiB0byBzb21ld2hlcmUgb24geW91ciBMSUIgZW52aXJvbm1lbnQKLQkoJVNESyVcbGliIGlzIGEgcmVhc29uYWJsZSBwbGFjZSkuCi0KLQlXaXRoIHNldGFyZ3Yub2JqIGluIHBsYWNlLCB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyBzaG91bGQgd29yawotCWZpbmUuCi0KLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcm1weWMucHkgYi9QQy9WUzcuMS9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjODU3Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uL0xpYiIpCi1wcmludCBucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9ydC5iYXQgYi9QQy9WUzcuMS9ydC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE5MTBhNzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gUnVuIFRlc3RzLiAgUnVuIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuCi1yZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSByZWdydGVzdF9hcmdzCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1yZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4KLXJlbSAtcSAgICJxdWljayIgLS0gbm9ybWFsbHkgdGhlIHRlc3RzIGFyZSBydW4gdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1yZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLXJlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4KLXJlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQKLXJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZAotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLU8gLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLXJlbSB0d2ljZSwgYW5kCi1yZW0gICAgIHJ0IC1xIC1nIHRlc3RfYmluYXNjaWkKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkKLXJlbSB0byBnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZm9yIGJpbmFzY2lpIHF1aWNrbHkuCi1yZW0KLXJlbSBDb25mdXNpbmc6ICBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIGxpa2UKLXJlbSAgICAgLXUgbmV0d29yayxsYXJnZWZpbGUKLXJlbSB0aGVuIHlvdSBoYXZlIHRvIHF1b3RlIGl0IG9uIHRoZSBydCBsaW5lLCBsaWtlCi1yZW0gICAgIHJ0IC11ICJuZXR3b3JrLGxhcmdlZmlsZSIKLQotc2V0bG9jYWwKLQotc2V0IGV4ZT1weXRob24KLXNldCBxbW9kZT0KLXNldCBkYXNoTz0KLVBBVEggJVBBVEglOyV+ZHAwLi5cLi5cLi5cdGNsdGtcYmluCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLWQiIChzZXQgZXhlPXB5dGhvbl9kKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci1pZiBkZWZpbmVkIHFtb2RlIGdvdG8gUW1vZGUKLQotZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCi0lZXhlJSBybXB5Yy5weQotCi1lY2hvIG9uCi0lY21kJQotQGVjaG8gb2ZmCi0KLWVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotcGF1c2UKLQotOlFtb2RlCi1lY2hvIG9uCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvc2VsZWN0LnZjcHJvaiBiL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTJkNDUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ic2VsZWN0Ig0KLQlTY2NQcm9qZWN0TmFtZT0ic2VsZWN0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMsbXN2Y3J0Ig0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvaiBiL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0N2Y5Yi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InVuaWNvZGVkYXRhIg0KLQlTY2NQcm9qZWN0TmFtZT0idW5pY29kZWRhdGEiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGFfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGFfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWYzYjRlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVNjY1Byb2plY3ROYW1lPSIiDQotCVNjY0xvY2FsUGF0aD0iIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3c5eHBvcGVuX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdzl4cG9wZW5fZC5wZGIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi93OXhwb3Blbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdzl4cG9wZW4ucGRiIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHc5eHBvcGVuLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNGNmMzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ3aW5zb3VuZCINCi0JU2NjUHJvamVjdE5hbWU9IndpbnNvdW5kIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZF9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTczMjMzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNzA1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzIg0KLQlQcm9qZWN0R1VJRD0iezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGN0eXBlcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGN0eXBlc19kbGZjbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaV9jb21tb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmljb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZml0YXJnZXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW42NC5hc20iDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2ogYi9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTdkYTcyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9lbGVtZW50dHJlZSINCi0JUHJvamVjdEdVSUQ9InsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlSb290TmFtZXNwYWNlPSJfZWxlbWVudHRyZWUiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGFzY2lpLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGFzY2lpdGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2NvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxleHBhdF9leHRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcaW50ZXJuYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbGF0aW4xdGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG1hY2NvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxuYW1ldGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHB5ZXhwYXRucy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx1dGY4dGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHdpbmNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qIGIvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDMxZTJlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2hhc2hsaWIiDQotCVByb2plY3RHVUlEPSJ7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfSINCi0JUm9vdE5hbWVzcGFjZT0iX2hhc2hsaWIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGFzaG9wZW5zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fbXNpLnZjcHJvaiBiL1BDL1ZTOC4wL19tc2kudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTk3MWM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19tc2kudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfbXNpIg0KLQlQcm9qZWN0R1VJRD0iezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30iDQotCVJvb3ROYW1lc3BhY2U9Il9tc2kiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXF9tc2kuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvaiBiL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjFjYWZjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIg0KLQlQcm9qZWN0R1VJRD0iezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVJvb3ROYW1lc3BhY2U9Il9tdWx0aXByb2Nlc3NpbmciDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zb2NrZXQudmNwcm9qIGIvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYmQ5ODIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zb2NrZXQiDQotCVByb2plY3RHVUlEPSJ7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NvY2tldCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+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+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZjE5ZjEuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfc3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9InsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9Ig0KLQlSb290TmFtZXNwYWNlPSJfc3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL19zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI2N2E0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfc3NsIg0KLQlQcm9qZWN0R1VJRD0ie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3NsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qIGIvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzAwYmRlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL190a2ludGVyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3RraW50ZXIiDQotCVByb2plY3RHVUlEPSJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCi0JUm9vdE5hbWVzcGFjZT0iX3RraW50ZXIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWJEZWJ1ZykiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2ogYi9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDExZWRmMi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYmRpc3Rfd2luaW5zdCINCi0JUHJvamVjdEdVSUQ9IntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5pbnN0Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImNvbWN0bDMyLmxpYiBpbWFnZWhscC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAtYW1kNjQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcZXh0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxpbnN0YWxsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcYXJjaGl2ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxpbnN0YWxsLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxQeXRob25Qb3dlcmVkLmJtcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZC5iYXQgYi9QQy9WUzguMC9idWlsZC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzgxODYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIG9yIHJlYnVpbGQgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uCi1yZW0ganVzdCBmb3IgY29udmVuaWVuY2UuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLXNldCBjb25mPVJlbGVhc2UKLXNldCBidWlsZD0vYnVpbGQKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1jIiAoc2V0IGNvbmY9JTIpICAgICAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1yIiAoc2V0IGJ1aWxkPS9yZWJ1aWxkKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD1kZXZlbnYgcGNidWlsZC5zbG4gJWJ1aWxkJSAiJWNvbmYlfCVwbGF0ZiUiCi1lY2hvICVjbWQlCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfZW52LmJhdCBiL1BDL1ZTOC4wL2J1aWxkX2Vudi5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNjdhZTMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfZW52LmJhdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUAlY29tc3BlYyUgL2sgZW52LmJhdCAlKgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3Bnby5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzN2I1YmYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBQR08gKFByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbikgYnkgZmlyc3QKLXJlbSBidWlsZGluZyBpbnN0cnVtZW50ZWQgYmluYXJpZXMsIHRoZW4gcnVubmluZyB0aGUgdGVzdHN1aXRlLCBhbmQKLXJlbSBmaW5hbGx5IGJ1aWxkaW5nIHRoZSBvcHRpbWl6ZWQgY29kZS4KLXJlbSBOb3RlLCBhZnRlciB0aGUgZmlyc3QgaW5zdHJ1bWVudGVkIHJ1biwgb25lIGNhbiBqdXN0IGtlZXAgb24KLXJlbSBidWlsZGluZyB0aGUgUEdVcGRhdGUgY29uZmlndXJhdGlvbiB3aGlsZSBkZXZlbG9waW5nLgotCi1zZXRsb2NhbAotc2V0IHBsYXRmPVdpbjMyCi0KLXJlbSB1c2UgdGhlIHBlcmZvcm1hbmNlIHRlc3RzdWl0ZS4gIFRoaXMgaXMgcXVpY2sgYW5kIHNpbXBsZQotc2V0IGpvYjE9Li5cLi5cdG9vbHNccHliZW5jaFxweWJlbmNoLnB5IC1uIDEgLUMgMSAtLXdpdGgtZ2MKLXNldCBwYXRoMT0uLlwuLlx0b29sc1xweWJlbmNoCi0KLXJlbSBvciB0aGUgd2hvbGUgdGVzdHN1aXRlIGZvciBtb3JlIHRob3JvdWdoIHRlc3RpbmcKLXNldCBqb2IyPS4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci1zZXQgcGF0aDI9Li5cLi5cbGliCi0KLXNldCBqb2I9JWpvYjElCi1zZXQgY2xycGF0aD0lcGF0aDElCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItMiIgKHNldCBqb2I9JWpvYjIlKSAmIChzZXQgY2xycGF0aD0lcGF0aDIlKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IFBHST0lcGxhdGYlLXBnaQotc2V0IFBHTz0lcGxhdGYlLXBnbwotCi1AZWNobyBvbgotcmVtIGJ1aWxkIHRoZSBpbnN0cnVtZW50ZWQgdmVyc2lvbgotY2FsbCBidWlsZCAtcCAlcGxhdGYlIC1jIFBHSW5zdHJ1bWVudAotCi1yZW0gcmVtb3ZlIC5weWMgZmlsZXMsIC5wZ2MgZmlsZXMgYW5kIGV4ZWN1dGUgdGhlIGpvYgotJVBHSSVccHl0aG9uLmV4ZSBybXB5Yy5weSAlY2xycGF0aCUKLWRlbCAlUEdJJVwqLnBnYwotJVBHSSVccHl0aG9uLmV4ZSAlam9iJQotCi1yZW0gZmluYWxseSBidWlsZCB0aGUgb3B0aW1pemVkIHZlcnNpb24KLWlmIGV4aXN0ICVQR08lIGRlbCAvcyAvcSAlUEdPJQotY2FsbCBidWlsZCAtcCAlcGxhdGYlIC1jIFBHVXBkYXRlCi0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQgYi9QQy9WUzguMC9idWlsZF9zc2wuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdiMDhiLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1AZWNobyBvZmYKLWlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKLSAgaWYgJTEgRVFVIERlYnVnICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzX2QuZGxsIGV4aXQgMQotICApIEVMU0UgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzLmRsbCBleGl0IDEKLSAgKQotKQotJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5IGIvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzEzZWY1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgYW5kIF9oYXNobGliIG1vZHVsZXMgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciB0aGUgYWN0dWFsIF9zc2wucHlkIGFuZCBfaGFzaGxpYi5weWQgRExMcy4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUEMvVlM4LjAgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIF9zc2wgYW5kIF9oYXNobGliCi0jIFB5dGhvbiBleHRlbnNpb25zIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi0jIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKLSMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLSMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgotIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCi0jCi0jIEluIE9yZGVyIHRvIGNyZWF0ZSB0aGUgZmlsZXMgaW4gdGhlIGNhc2Ugb2YgYW4gdXBkYXRlIHlvdSBzdGlsbCBuZWVkIFBlcmwuCi0jIFJ1biBidWlsZF9zc2wgaW4gdGhpcyBvcmRlcjoKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSB4NjQKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSBXaW4zMgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IikKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQoIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCgiICIsIHApCi0gICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKSkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKToKLSAgICAiIiJDcmVhdGUgYW5kIGZpeCBtYWtlZmlsZSBmb3IgNjRiaXQKLQotICAgIFJlcGxhY2UgMzIgd2l0aCA2NGJpdCBkaXJlY3RvcmllcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtMzIpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obTMyKSBhcyBmaW46Ci0gICAgICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj10bXAzMiIsICI9dG1wNjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj1vdXQzMiIsICI9b3V0NjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj1pbmMzMiIsICI9aW5jNjQiKQotICAgICAgICAgICAgICAgICMgZm9yY2UgNjQgYml0IG1hY2hpbmUKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJNS0xJQj1saWIiLCAiTUtMSUI9bGliIC9NQUNISU5FOlg2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiTEZMQUdTPSIsICJMRkxBR1M9L01BQ0hJTkU6WDY0ICIpCi0gICAgICAgICAgICAgICAgIyBkb24ndCBsaW5rIGFnYWluc3QgdGhlIGxpYiBvbiA2NGJpdCBzeXN0ZW1zCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiYnVmZmVyb3ZlcmZsb3d1LmxpYiIsICIiKQotICAgICAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLSAgICBvcy51bmxpbmsobTMyKQotCi1kZWYgZml4X21ha2VmaWxlKG1ha2VmaWxlKToKLSAgICAiIiJGaXggc29tZSBzdHVmZiBpbiBhbGwgbWFrZWZpbGVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46Ci0gICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQRVJMPSIpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNQPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiQ1A9Y29weVxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJNS0RJUj0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIk1LRElSPW1rZGlyXG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNGTEFHPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBmb3IgYWxnbyBpbiAoIlJDNSIsICJNREMyIiwgIklERUEiKToKLSAgICAgICAgICAgICAgICAgICAgbm9hbGdvID0gIiAtRE9QRU5TU0xfTk9fJXMiICUgYWxnbwotICAgICAgICAgICAgICAgICAgICBpZiBub2FsZ28gbm90IGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArIG5vYWxnbwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJwotICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgcHJpbnQoInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKyIgbm8taWRlYSBuby1tZGMyIikKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKyIgbm8taWRlYSBuby1tZGMyIikKLSAgICBwcmludChkb19zY3JpcHQpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIGNtcChmMSwgZjIpOgotICAgIGJ1ZnNpemUgPSAxMDI0ICogOAotICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBpZiBiMSAhPSBiMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi1kZWYgY29weShzcmMsIGRzdCk6Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuCi0gICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlIjoKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIkRlYnVnIjoKLSAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgaWYgc3lzLmFyZ3ZbMl0gPT0gIldpbjMyIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19uYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXG50Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUKLSAgICAgICAgZGlyc3VmZml4ID0gIjMyIgotICAgIGVsaWYgc3lzLmFyZ3ZbMl0gPT0gIng2NCI6Ci0gICAgICAgIGFyY2g9ImFtZDY0IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRBIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0YSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50NjQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZS5yZXBsYWNlKCc2NCcsICcnKQotICAgICAgICBkaXJzdWZmaXggPSAiNjQiCi0gICAgICAgICNvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19PUFRFUk9OIgotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKHN5cy5hcmd2KSkKLQotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmw6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WUzguMCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgcmVidWlsZCBtYWtlZmlsZSB3aGVuIHdlIGRvIHRoZSByb2xlIG92ZXIgZnJvbSAzMiB0byA2NCBidWlsZAotICAgICAgICBpZiBhcmNoID09ICJhbWQ2NCIgYW5kIG9zLnBhdGguaXNmaWxlKG0zMikgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgICAgICBvcy51bmxpbmsobTMyKQotCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1ha2VmaWxlcyEiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIikKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiT3BlblNTTCBkZWJ1ZyBidWlsZHMgYXJlbid0IHN1cHBvcnRlZC4iKQotICAgICAgICAgICAgI2lmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICMgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICMgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgIyAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICAgICBpZiBhcmNoID09ICJhbWQ2NCI6Ci0gICAgICAgICAgICAgICAgY3JlYXRlX21ha2VmaWxlNjQobWFrZWZpbGUsIG0zMikKLSAgICAgICAgICAgIGZpeF9tYWtlZmlsZShtYWtlZmlsZSkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKLQotICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQotICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCi0gICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgIHJjID0gb3Muc3lzdGVtKCJtbDY0IC1jIC1Gb21zXFx1cHRhYmxlLm9iaiBtc1xcdXB0YWJsZS5hc20iKQotICAgICAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIm1sNjQgYXNzZW1ibGVyIGhhcyBmYWlsZWQuIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdChyYykKLQotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5IGIvUEMvVlM4LjAvYnVpbGRfdGtpbnRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1OTAzOS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotIiIiU2NyaXB0IHRvIGNvbXBpbGUgdGhlIGRlcGVuZGVuY2llcyBvZiBfdGtpbnRlcgotCi1Db3B5cmlnaHQgKGMpIDIwMDcgYnkgQ2hyaXN0aWFuIEhlaW1lcyA8Y2hyaXN0aWFuQGNoZWltZXMuZGU+Ci0KLUxpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQotcGFyID0gb3MucGF0aC5wYXJkaXIKLQotaWYgMToKLSAgICBUQ0wgPSAidGNsOC40LjE2IgotICAgIFRLID0gInRrOC40LjE2IgotICAgIFRJWCA9ICJ0aXgtOC40LjAiCi1lbHNlOgotICAgIFRDTCA9ICJ0Y2w4LjViMyIKLSAgICBUSyA9ICJ0Y2w4LjViMyIKLSAgICBUSVggPSAiVGl4OC40LjIiCi0KLVJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyLCBwYXIpKQotIyBXaW5kb3dzIDIwMDAgY29tcGF0aWJpbGl0eTogV0lOVkVSIDB4MDUwMAotIyBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzgzNzQ1LmFzcHgKLU5NQUtFID0gIm5tYWtlIC9ub2xvZ28gL2YgJXMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgJXMgJXMiCi0KLWRlZiBubWFrZShtYWtlZmlsZSwgY29tbWFuZD0iIiwgKiprdyk6Ci0gICAgZGVmaW5lcyA9ICcgJy5qb2luKGsrJz0nK3YgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKLSAgICBjbWQgPSBOTUFLRSAlIChtYWtlZmlsZSwgZGVmaW5lcywgY29tbWFuZCkKLSAgICBwcmludCgiXG5cbiIrY21kKyJcbiIpCi0gICAgaWYgb3Muc3lzdGVtKGNtZCkgIT0gMDoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGNtZCkKLQotZGVmIGJ1aWxkKHBsYXRmb3JtLCBjbGVhbik6Ci0gICAgaWYgcGxhdGZvcm0gPT0gIldpbjMyIjoKLSAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihST09ULCAidGNsdGsiKQotICAgICAgICBtYWNoaW5lID0gIlg4NiIKLSAgICBlbGlmIHBsYXRmb3JtID09ICJ4NjQiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0azY0IikKLSAgICAgICAgbWFjaGluZSA9ICJYNjQiCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihwbGF0Zm9ybSkKLQotICAgICMgVENMCi0gICAgdGNsZGlyID0gb3MucGF0aC5qb2luKFJPT1QsIFRDTCkKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4odGNsZGlyLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImluc3RhbGwiLCBJTlNUQUxMRElSPWRlc3QpCi0KLSAgICAjIFRLCi0gICAgaWYgMToKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRLLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImluc3RhbGwiLCBUQ0xESVI9dGNsZGlyLCBJTlNUQUxMRElSPWRlc3QpCi0KLSAgICAjIFRJWAotICAgIGlmIDE6Ci0gICAgICAgICMgcHl0aG9uOS5tYWsgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZwotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVElYLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgTUFDSElORT1tYWNoaW5lKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiaW5zdGFsbCIpCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDIgb3Igc3lzLmFyZ3ZbMV0gbm90IGluICgiV2luMzIiLCAieDY0Iik6Ci0gICAgICAgIHByaW50KCIlcyBXaW4zMnx4NjQiICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBpZiAiLWMiIGluIHN5cy5hcmd2OgotICAgICAgICBjbGVhbiA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICBjbGVhbiA9IEZhbHNlCi0KLSAgICBidWlsZChzeXMuYXJndlsxXSwgY2xlYW4pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J6Mi52Y3Byb2ogYi9QQy9WUzguMC9iejIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjExOTc5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1ODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImJ6MiINCi0JUHJvamVjdEdVSUQ9Ins3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KLQlSb290TmFtZXNwYWNlPSJiejIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWJfcHJpdmF0ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iYnppcDIgMS4wLjYgU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxibG9ja3NvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNvbXByZXNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY3JjdGFibGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxkZWNvbXByZXNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcaHVmZm1hbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXHJhbmR0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMgYi9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzY0M2NiLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iZGVidWciDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJLaWxsUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZW52LmJhdCBiL1BDL1ZTOC4wL2Vudi5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OTkwYTguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZW52LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGVjaG8gb2ZmCi1zZXQgVlM4PSVQcm9ncmFtRmlsZXMlXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDgKLWVjaG8gQnVpbGQgZW52aXJvbm1lbnRzOiB4ODYsIGlhNjQsIGFtZDY0LCB4ODZfYW1kNjQsIHg4Nl9pYTY0Ci1lY2hvLgotY2FsbCAiJVZTOCVcVkNcdmN2YXJzYWxsLmJhdCIgJTEKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2ZpZWxkMy5weSBiL1BDL1ZTOC4wL2ZpZWxkMy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRjYmUzNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9maWVsZDMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEFuIGFic3VyZCB3b3JrYXJvdW5kIGZvciB0aGUgbGFjayBvZiBhcml0aG1ldGljIGluIE1TJ3MgcmVzb3VyY2UgY29tcGlsZXIuCi0jIEFmdGVyIGJ1aWxkaW5nIFB5dGhvbiwgcnVuIHRoaXMsIHRoZW4gcGFzdGUgdGhlIG91dHB1dCBpbnRvIHRoZSBhcHByb3ByaWF0ZQotIyBwYXJ0IG9mIFBDXHB5dGhvbl9udC5yYy4KLSMgRXhhbXBsZSBvdXRwdXQ6Ci0jCi0jICogRm9yIDIuM2EwLAotIyAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCi0jICogUFlfUkVMRUFTRV9MRVZFTCA9ICdhbHBoYScgPSAweEEKLSMgKiBQWV9SRUxFQVNFX1NFUklBTCA9IDEKLSMgKgotIyAqIGFuZCAwKjEwMDAgKyAxMCoxMCArIDEgPSAxMDEuCi0jICovCi0jICNkZWZpbmUgRklFTEQzIDEwMQotCi1pbXBvcnQgc3lzCi0KLW1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCi1sZXZlbG51bSA9IHsnYWxwaGEnOiAweEEsCi0gICAgICAgICAgICAnYmV0YSc6IDB4QiwKLSAgICAgICAgICAgICdjYW5kaWRhdGUnOiAweEMsCi0gICAgICAgICAgICAnZmluYWwnOiAweEYsCi0gICAgICAgICAgIH1bbGV2ZWxdCi1zdHJpbmcgPSBzeXMudmVyc2lvbi5zcGxpdCgpWzBdICMgbGlrZSAnMi4zYTAnCi0KLXByaW50KCIgKiBGb3IgJXMsIiAlIHN0cmluZykKLXByaW50KCIgKiBQWV9NSUNST19WRVJTSU9OID0gJWQiICUgbWljcm8pCi1wcmludCgiICogUFlfUkVMRUFTRV9MRVZFTCA9ICVyID0gJXMiICUgKGxldmVsLCBoZXgobGV2ZWxudW0pKSkKLXByaW50KCIgKiBQWV9SRUxFQVNFX1NFUklBTCA9ICVkIiAlIHNlcmlhbCkKLXByaW50KCIgKiIpCi0KLWZpZWxkMyA9IG1pY3JvICogMTAwMCArIGxldmVsbnVtICogMTAgKyBzZXJpYWwKLQotcHJpbnQoIiAqIGFuZCAlZCoxMDAwICsgJWQqMTAgKyAlZCA9ICVkIiAlIChtaWNybywgbGV2ZWxudW0sIHNlcmlhbCwgZmllbGQzKSkKLXByaW50KCIgKi8iKQotcHJpbnQoIiNkZWZpbmUgRklFTEQzIiwgZmllbGQzKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvaWRsZS5iYXQgYi9QQy9WUzguMC9pZGxlLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIzZTcwNC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9pZGxlLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIHN0YXJ0IGlkbGUKLXJlbSBVc2FnZTogIGlkbGUgWy1kXQotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotCi1zZXRsb2NhbAotc2V0IGV4ZT1weXRob24KLVBBVEggJVBBVEglOy4uXC4uXC4uXHRjbHRrXGJpbgotCi1pZiAiJTEiPT0iLWQiIChzZXQgZXhlPXB5dGhvbl9kKSAmIHNoaWZ0Ci0KLXNldCBjbWQ9JWV4ZSUgLi4vLi4vTGliL2lkbGVsaWIvaWRsZS5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotCi1lY2hvIG9uCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24uYyBiL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMzIzZDMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAva2lsbF9weXRob24uYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogSGVscGVyIHByb2dyYW0gZm9yIGtpbGxpbmcgbGluZ2VyaW5nIHB5dGhvbltfZF0uZXhlIHByb2Nlc3NlcyBiZWZvcmUKLSAqIGJ1aWxkaW5nLCB0aHVzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYnVpbGQgZmFpbHVyZXMgZHVlIHRvIGZpbGVzIGJlaW5nCi0gKiBsb2NrZWQuCi0gKi8KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3Y2hhci5oPgotI2luY2x1ZGUgPHRsaGVscDMyLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI3ByYWdtYSBjb21tZW50KGxpYiwgInBzYXBpIikKLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbl9kLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEyKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFX0xFTiAoMTcpCi0jZWxzZQotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbi5leGUiKQotI2RlZmluZSBQWVRIT05fRVhFX0xFTiAgICAgICgxMCkKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFICAgICAoTCJraWxsX3B5dGhvbi5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNSkKLSNlbmRpZgotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIEhBTkRMRSAgIGhwLCBoc3AsIGhzbTsgLyogcHJvY2Vzcywgc25hcHNob3QgcHJvY2Vzc2VzLCBzbmFwc2hvdCBtb2R1bGVzICovCi0gICAgRFdPUkQgICAgZGFjLCBvdXJfcGlkOwotICAgIHNpemVfdCAgIGxlbjsKLSAgICB3Y2hhcl90ICBwYXRoW01BWF9QQVRIKzFdOwotCi0gICAgTU9EVUxFRU5UUlkzMlcgIG1lOwotICAgIFBST0NFU1NFTlRSWTMyVyBwZTsKLQotICAgIG1lLmR3U2l6ZSA9IHNpemVvZihNT0RVTEVFTlRSWTMyVyk7Ci0gICAgcGUuZHdTaXplID0gc2l6ZW9mKFBST0NFU1NFTlRSWTMyVyk7Ci0KLSAgICBtZW1zZXQocGF0aCwgMCwgTUFYX1BBVEgrMSk7Ci0KLSAgICBvdXJfcGlkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotCi0gICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBvdXJfcGlkKTsKLSAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHByaW50ZigiQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90WzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCFNb2R1bGUzMkZpcnN0Vyhoc20sICZtZSkpIHsKLSAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1sxXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRW51bWVyYXRlIG92ZXIgdGhlIG1vZHVsZXMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MgaW4gb3JkZXIgdG8gZmluZAotICAgICAqIGtpbGxfcHJvY2Vzc1tfZF0uZXhlLCB0aGVuIHRha2UgYSBub3RlIG9mIHRoZSBkaXJlY3RvcnkgaXQgbGl2ZXMgaW4uCi0gICAgICovCi0gICAgZG8gewotICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBLSUxMX1BZVEhPTl9FWEUsIEtJTExfUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGVuID0gd2Nzbmxlbl9zKG1lLnN6RXhlUGF0aCwgTUFYX1BBVEgpIC0gS0lMTF9QWVRIT05fRVhFX0xFTjsKLSAgICAgICAgd2NzbmNweV9zKHBhdGgsIE1BWF9QQVRIKzEsIG1lLnN6RXhlUGF0aCwgbGVuKTsgCi0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc20pOwotCi0gICAgaWYgKHBhdGggPT0gTlVMTCkgewotICAgICAgICBwcmludGYoImZhaWxlZCB0byBkaXNjZXJuIGRpcmVjdG9yeSBvZiBydW5uaW5nIHByb2Nlc3NcbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRha2UgYSBzbmFwc2hvdCBvZiBzeXN0ZW0gcHJvY2Vzc2VzLiAgRW51bWVyYXRlIG92ZXIgdGhlIHNuYXBzaG90LAotICAgICAqIGxvb2tpbmcgZm9yIHB5dGhvbiBwcm9jZXNzZXMuICBXaGVuIHdlIGZpbmQgb25lLCB2ZXJpZnkgaXQgbGl2ZXMKLSAgICAgKiBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2UgbGl2ZSBpbi4gIElmIGl0IGRvZXMsIGtpbGwgaXQuICBJZiB3ZSdyZQotICAgICAqIHVuYWJsZSB0byBraWxsIGl0LCB0cmVhdCB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHJldHVybiAxLgotICAgICAqIAotICAgICAqIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdGhhdCB3ZSdyZSBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICAgKiBidWlsZCBwcm9jZXNzIG9uIHRoZSBiYXNpcyB0aGF0IHdlJ2xsIHRha2UgY2FyZSBvZiBraWxsaW5nIGFueQotICAgICAqIHJ1bm5pbmcgaW5zdGFuY2VzLCBzdWNoIHRoYXQgdGhlIGJ1aWxkIHdvbid0IGVuY291bnRlciBwZXJtaXNzaW9uCi0gICAgICogZGVuaWVkIGVycm9ycyBkdXJpbmcgbGlua2luZy4gSWYgd2UgY2FuJ3Qga2lsbCBvbmUgb2YgdGhlIHByb2Nlc3NlcywKLSAgICAgKiB3ZSBjYW4ndCBwcm92aWRlIHRoaXMgYXNzdXJhbmNlLCBhbmQgdGhlIGJ1aWxkIHNob3VsZG4ndCBzdGFydC4KLSAgICAgKi8KLQotICAgIGhzcCA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOwotICAgIGlmIChoc3AgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMl0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIVByb2Nlc3MzMkZpcnN0Vyhoc3AsICZwZSkpIHsKLSAgICAgICAgcHJpbnRmKCJQcm9jZXNzMzJGaXJzdFcgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBkYWMgPSBQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OIHwgUFJPQ0VTU19WTV9SRUFEIHwgUFJPQ0VTU19URVJNSU5BVEU7Ci0gICAgZG8gewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCi0gICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAotICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KLSAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAotICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChfd2NzbmljbXAocGUuc3pFeGVGaWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAvKiBUaGlzIGlzbid0IGEgcHl0aG9uIHByb2Nlc3MuICovCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBJdCdzIGEgcHl0aG9uIHByb2Nlc3MsIHNvIGZpZ3VyZSBvdXQgd2hpY2ggZGlyZWN0b3J5IGl0J3MgaW4uLi4gKi8KLSAgICAgICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBwZS50aDMyUHJvY2Vzc0lEKTsKLSAgICAgICAgaWYgKGhzbSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICogSWYgb3VyIG1vZHVsZSBzbmFwc2hvdCBmYWlscyAod2hpY2ggd2lsbCBoYXBwZW4gaWYgd2UgZG9uJ3Qgb3duCi0gICAgICAgICAgICAgKiB0aGUgcHJvY2VzcyksIGp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gIChJdCBzZWVtcyBkaWZmZXJlbnQKLSAgICAgICAgICAgICAqIHZlcnNpb25zIG9mIFdpbmRvd3MgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgZm9yIEdldExhc3RFcnJvcigpCi0gICAgICAgICAgICAgKiBpbiB0aGlzIHNpdHVhdGlvbjsgaXQncyBlYXNpZXIgdG8ganVzdCBpZ25vcmUgaXQgYW5kIG1vdmUgb24gdnMuCi0gICAgICAgICAgICAgKiBzdG9wcGluZyB0aGUgYnVpbGQgZm9yIHdoYXQgY291bGQgYmUgYSBmYWxzZSBwb3NpdGl2ZS4pCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1syXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChtZS5zek1vZHVsZSwgUFlUSE9OX0VYRSwgUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgICAgIC8qIFdyb25nIG1vZHVsZSwgd2UncmUgbG9va2luZyBmb3IgcHl0aG9uW19kXS5leGUuLi4gKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChwYXRoLCBtZS5zekV4ZVBhdGgsIGxlbikpCi0gICAgICAgICAgICAgICAgLyogUHJvY2VzcyBkb2Vzbid0IGxpdmUgaW4gb3VyIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogUHl0aG9uIHByb2Nlc3MgcmVzaWRpbmcgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeSwga2lsbCBpdCEgICovCi0gICAgICAgICAgICBocCA9IE9wZW5Qcm9jZXNzKGRhYywgRkFMU0UsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICAgICAgaWYgKCFocCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiT3BlblByb2Nlc3MgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFUZXJtaW5hdGVQcm9jZXNzKGhwLCAxKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiVGVybWluYXRlUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgfSB3aGlsZSAoTW9kdWxlMzJOZXh0Vyhoc20sICZtZSkpOwotCi0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICB9IHdoaWxlIChQcm9jZXNzMzJOZXh0Vyhoc3AsICZwZSkpOwotCi0gICAgQ2xvc2VIYW5kbGUoaHNwKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiB2aTogc2V0IHRzPTggc3c9NCBzdHM9NCBleHBhbmR0YWIgKi8KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvaiBiL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTliZTMzMC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImtpbGxfcHl0aG9uIg0KLQlQcm9qZWN0R1VJRD0iezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQotCVJvb3ROYW1lc3BhY2U9ImtpbGxfcHl0aG9uIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5ca2lsbF9weXRob24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmYTA3YS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jZGVmaW5lIENNRF9TSVpFIDUwMAotCi0vKiBUaGlzIGZpbGUgY3JlYXRlcyB0aGUgZ2V0YnVpbGRpbmZvLm8gb2JqZWN0LCBieSBmaXJzdAotICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCksIGFuZCB0aGVuIGludm9raW5nIGNsLmV4ZS4KLSAgIEFzIGEgc2lkZSBlZmZlY3QsIGl0IG1pZ2h0IGdlbmVyYXRlIFBDQnVpbGRcZ2V0YnVpbGRpbmZvMi5jCi0gICBhbHNvLiBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKLSAgIGZvdW5kLCBpdCBjb21waWxlcyAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGluc3RlYWQuCi0KLSAgIEN1cnJlbnRseSwgc3Vid2NyZXYuZXhlIGlzIGZvdW5kIGZyb20gdGhlIHJlZ2lzdHJ5IGVudHJpZXMKLSAgIG9mIFRvcnRvaXNlU1ZOLgotCi0gICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gcGxhY2UgZ2V0YnVpbGRpbmZvLm8gaW50byB0aGUgcHJvcGVyCi0gICBiaW5hcnkgZGlyZWN0b3J5LiBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYXMgdGhpcyB0b29sIGlzCi0gICBpbnZva2VkIGFzIGEgcHJlLWxpbmsgc3RlcCBmb3IgcHl0aG9uY29yZSwgc28gdGhhdCBvdmVyd3JpdGVzCi0gICBhbnkgcHJldmlvdXMgZ2V0YnVpbGRpbmZvLm8uCi0KLSAgIEhvd2V2ZXIsIGlmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGlzIHdpbGwgYmUgdXNlZAotICAgYXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdoZXJlIGFueSBnZXRidWlsZGluZm8yLmMgYW5kCi0gICBnZXRidWlsZGluZm8ubyBmaWxlcyBhcmUgcHV0LiAgVGhpcyBpcyB1c2VmdWwgaWYgbXVsdGlwbGUKLSAgIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBidWlsdCBpbiBwYXJhbGxlbCwgdG8gYXZvaWQgdGhlbQotICAgdHJhbXBsaW5nIGVhY2ggb3RoZXIncyBmaWxlcy4KLQotKi8KLQotaW50IG1ha2VfYnVpbGRpbmZvMihjb25zdCBjaGFyICp0bXBwYXRoKQotewotICAgIHN0cnVjdCBfc3RhdCBzdDsKLSAgICBIS0VZIGhUb3J0b2lzZTsKLSAgICBjaGFyIGNvbW1hbmRbQ01EX1NJWkUrMV07Ci0gICAgRFdPUkQgdHlwZSwgc2l6ZTsKLSAgICBpZiAoX3N0YXQoIi5zdm4iLCAmc3QpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLyogQWxsb3cgc3VwcHJlc3Npb24gb2Ygc3Vid2NyZXYuZXhlIGludm9jYXRpb24gaWYgYSBub19zdWJ3Y3JldiBmaWxlIGlzIHByZXNlbnQuICovCi0gICAgaWYgKF9zdGF0KCJub19zdWJ3Y3JldiIsICZzdCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlZ09wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUyAmJgotICAgICAgICBSZWdPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgLyogVG9ydG9pc2Ugbm90IGluc3RhbGxlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBjb21tYW5kWzBdID0gJyInOyAgLyogcXVvdGUgdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgKi8KLSAgICBzaXplID0gc2l6ZW9mKGNvbW1hbmQpIC0gMTsKLSAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhUb3J0b2lzZSwgIkRpcmVjdG9yeSIsIDAsICZ0eXBlLCBjb21tYW5kKzEsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTIHx8Ci0gICAgICAgIHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAvKiBSZWdpc3RyeSBjb3JydXB0ZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJiaW5cXHN1YndjcmV2LmV4ZSIpOwotICAgIGlmIChfc3RhdChjb21tYW5kKzEsICZzdCkgPCAwKQotICAgICAgICAvKiBzdWJ3Y3Jldi5leGUgbm90IHBhcnQgb2YgdGhlIHJlbGVhc2UgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiAuLlxcLi4gLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyAiKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKLXsKLSAgICBjaGFyIGNvbW1hbmRbQ01EX1NJWkVdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOwotICAgIGNoYXIgdG1wcGF0aFtDTURfU0laRV0gPSAiIjsKLSAgICBpbnQgZG9fdW5saW5rLCByZXN1bHQ7Ci0gICAgY2hhciAqdG1wZGlyID0gTlVMTDsKLSAgICBpZiAoYXJnYyA8PSAyIHx8IGFyZ2MgPiAzKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSkgW3RtcGRpcl1cbiIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJEZWJ1ZyIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItRF9ERUJVRyAtTURkICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VJdGFuaXVtIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAvVVNFQ0w6TVNfSVRBTklVTSAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlQU1ENjQiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAvVVNFQ0w6TVNfT1BURVJPTiAiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChhcmdjID4gMikgewotICAgICAgICB0bXBkaXIgPSBhcmd2WzJdOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgdG1wZGlyKTsKLSAgICAgICAgc3RyY2F0X3ModG1wcGF0aCwgX2NvdW50b2YodG1wcGF0aCksICJcXCIpOwotICAgIH0KLQotICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKHRtcHBhdGgpKSkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1GbyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKSB7Ci0gICAgICAgIGNvbW1hbmRbMF0gPSAnXDAnOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgICAgIF91bmxpbmsoY29tbWFuZCk7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjVjY2NkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV9idWlsZGluZm8iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKFRhcmdldERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiZjEwZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JUHJvamVjdEdVSUQ9IntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGNidWlsZC5zbG4gYi9QQy9WUzguMC9wY2J1aWxkLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjYTRhYS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wY2J1aWxkLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDU2MCArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwDQotIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbiIsICJweXRob24udmNwcm9qIiwgIntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSA9IHtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV92ZXJzaW9uaW5mbyIsICJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIsICJ7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob25jb3JlIiwgInB5dGhvbmNvcmUudmNwcm9qIiwgIntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSA9IHtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjcHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCi0JUHJvamVjdFNlY3Rpb24oU29sdXRpb25JdGVtcykgPSBwcmVQcm9qZWN0DQotCQkuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLQkJcmVhZG1lLnR4dCA9IHJlYWRtZS50eHQNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3Byb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzIiwgIl9jdHlwZXMudmNwcm9qIiwgInswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlc190ZXN0IiwgIl9jdHlwZXNfdGVzdC52Y3Byb2oiLCAiezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZWxlbWVudHRyZWUiLCAiX2VsZW1lbnR0cmVlLnZjcHJvaiIsICJ7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tc2kiLCAiX21zaS52Y3Byb2oiLCAiezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc29ja2V0IiwgIl9zb2NrZXQudmNwcm9qIiwgIns4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NxbGl0ZTMiLCAiX3NxbGl0ZTMudmNwcm9qIiwgInsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSA9IHtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NzbCIsICJfc3NsLnZjcHJvaiIsICJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0gPSB7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0gPSB7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmNwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYnoyIiwgImJ6Mi52Y3Byb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzZWxlY3QiLCAic2VsZWN0LnZjcHJvaiIsICJ7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInVuaWNvZGVkYXRhIiwgInVuaWNvZGVkYXRhLnZjcHJvaiIsICJ7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5ZXhwYXQiLCAicHlleHBhdC52Y3Byb2oiLCAie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiZGlzdF93aW5pbnN0IiwgImJkaXN0X3dpbmluc3QudmNwcm9qIiwgIntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9oYXNobGliIiwgIl9oYXNobGliLnZjcHJvaiIsICJ7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0gPSB7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNxbGl0ZTMiLCAic3FsaXRlMy52Y3Byb2oiLCAie0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXVsdGlwcm9jZXNzaW5nIiwgIl9tdWx0aXByb2Nlc3NpbmcudmNwcm9qIiwgIns5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsIiwgInNzbC52Y3Byb2oiLCAie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJraWxsX3B5dGhvbiIsICJraWxsX3B5dGhvbi52Y3Byb2oiLCAiezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KLQkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQotCQlQR0luc3RydW1lbnR8V2luMzIgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCVBHSW5zdHJ1bWVudHx4NjQgPSBQR0luc3RydW1lbnR8eDY0DQotCQlQR1VwZGF0ZXxXaW4zMiA9IFBHVXBkYXRlfFdpbjMyDQotCQlQR1VwZGF0ZXx4NjQgPSBQR1VwZGF0ZXx4NjQNCi0JCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQotCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCi0JCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMgYi9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhjNWYxOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ2luc3RydW1lbnQiDQotCU91dHB1dERpcmVjdG9yeT0iJChPdXREaXJQR0kpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtcGdpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCUZhdm9yU2l6ZU9yU3BlZWQ9IjIiDQotCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCi0JCUVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM9ImZhbHNlIg0KLQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMiINCi0JCVByb2ZpbGVHdWlkZWREYXRhYmFzZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCQoVGFyZ2V0TmFtZSkucGdkIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJPdXREaXJQR0kiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcyBiL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2ZjMmQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ3VwZGF0ZSINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ29cIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChTb2x1dGlvbkRpcilccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcz0iIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iNCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkLnZzcHJvcHMgYi9QQy9WUzguMC9weWQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRjMjFlMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWQiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjIiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucHlkIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxM2EzMGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWRfZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjMiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5weWQiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJRW1iZWRNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKXB5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzguMC9weWV4cGF0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU5ZTRlYy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlleHBhdCINCi0JUHJvamVjdEdVSUQ9IntEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9Ig0KLQlSb290TmFtZXNwYWNlPSJweWV4cGF0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweWV4cGF0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxYmQzZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXByb2plY3QiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7IC4uXC4uXFBDIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMiINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJQ29tcGlsZUFzPSIwIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIg0KLQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQlTdWJTeXN0ZW09IjIiDQotCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCVRhcmdldE1hY2hpbmU9IjEiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cSW5jbHVkZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMzIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilccHl0aG9uLmV4ZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iZXh0ZXJuYWxzRGlyIg0KLQkJVmFsdWU9Ii4uXC4uXC4uIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy42LjIxIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJiejJEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC42Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJvcGVuc3NsRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0RGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYiINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODUubGliICQodGNsdGtEaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtMaWJEZWJ1ZyINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGs2NExpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXRob24udmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0N2MwZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob24udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXRob24iDQotCVByb2plY3RHVUlEPSJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbl9kLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMTAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb24uaWNvIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWJiOWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXRob25jb3JlIg0KLQlQcm9qZWN0R1VJRD0ie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVJvb3ROYW1lc3BhY2U9InB5dGhvbmNvcmUiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICgkSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkluY2x1ZGUiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhYnN0cmFjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhY2N1LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFzZGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJpdHNldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxib29sb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVzX21ldGhvZHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZWFycmF5b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVzb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNlbGxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2V2YWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2xhc3NvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlY3MuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29tcGlsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21wbGV4b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRhdGV0aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRlc2Nyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRpY3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHluYW1pY19hbm5vdGF0aW9ucy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxlbnVtb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVycmNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmaWxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGV1dGlscy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmbG9hdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmb3JtYXR0ZXJfdW5pY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmcmFtZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmdW5jb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdlbm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxncmFtaW5pdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxncmFtbWFyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGltcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpbnRyY2hlY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaXRlcm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsaXN0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxvbmdpbnRyZXByLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxvbmdvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWFyc2hhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZW1vcnlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWV0YWdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWV0aG9kb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1vZHN1cHBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kdWxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG5vZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9iamltcGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3Bjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9zZGVmcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwYXJzZXRvay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBnZW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbmhlYWRlcnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlfY3Vyc2VzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5YXJlbmEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljYXBzdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Y3R5cGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlkZWJ1Zy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWVycm9ycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWV4cGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZnBlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Z2V0b3B0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWFjdG9vbGJveC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweW1hdGguaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWVtLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5cG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RyY21wLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RydG9kLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR0b2EuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcUHl0aG9uLWFzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aG9ucnVuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5dGhyZWFkLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHJhbmdlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNldG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzbGljZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RtZW1iZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3RydWN0c2VxLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN5bXRhYmxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN5c21vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0aW1lZnVuY3MuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdG9rZW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHJhY2ViYWNrLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHR1cGxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHVjbmhhc2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdW5pY29kZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJNb2R1bGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3RydWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdWRpb29wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xnY21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWFpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iX2lvIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iemxpYiINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZml4ZWQuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemNvbmYuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemNvbmYuaW4uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemxpYi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJjamtjb2RlY3MiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xhbGdfamlzeDAyMDEuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xjamtjb2RlY3MuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xlbXVfamlzeDAyMTNfMjAwMC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2NuLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfaGsuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qaXN4MDIxM19wYWlyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfanAuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19rci5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX3R3LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJPYmplY3RzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWNjdS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGNvdW50LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxmYXN0c2VhcmNoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZpbmQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RldHlwZV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQYXJzZXIiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGFjY2VsZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxiaXRzZXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxmaXJzdHNldHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxsaXN0bm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG5vZGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXRvay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUEMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX3N1YnByb2Nlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnJlZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcY29uZmlnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xkbF9udC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZXJybWFwLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xnZXRwYXRocC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbXN2Y3J0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUHl0aG9uIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxfd2FybmluZ3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc2RsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjZXZhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvZGVjcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvbXBpbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxlcnJvcnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZyb3plbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZ1dHVyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGFyZ3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdyYW1pbml0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1hcnNoYWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzbnByaW50Zi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c3RydG91bC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHBlZXBob2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlhcmVuYS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWZwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5bWF0aC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGltZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RhdGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cmNtcC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RydG9kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRob25ydW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxyYW5kb20uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeW10YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5c21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZF9udC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRyYWNlYmFjay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX250LnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbncudmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzdiNzguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbnciDQotCVByb2plY3RHVUlEPSJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253X2QuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcV2luTWFpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcyBiL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkZWY5MC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icmVsZWFzZSINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uLmV4ZSINCi0JLz4JDQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3JtcHljLnB5IGIvUEMvVlM4LjAvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTE3MDUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi8uLi9MaWIiKQotcHJpbnQobnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIikKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3J0LmJhdCBiL1BDL1ZTOC4wL3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyOWUxOS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLXJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgZXhlPXB5dGhvbgotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7JX5kcDAuLlwuLlwuLlx0Y2x0a1xiaW4KLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1PIiAoc2V0IGRhc2hPPS1PKSAgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXEiIChzZXQgcW1vZGU9eWVzKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLWlmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQotCi1lY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLSVleGUlIHJtcHljLnB5Ci0KLWVjaG8gb24KLSVjbWQlCi1AZWNobyBvZmYKLQotZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1wYXVzZQotCi06UW1vZGUKLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qIGIvUEMvVlM4LjAvc2VsZWN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcxZmMxNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzZWxlY3QiDQotCVByb2plY3RHVUlEPSJ7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfSINCi0JUm9vdE5hbWVzcGFjZT0ic2VsZWN0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZiZTVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0ie0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0iDQotCVJvb3ROYW1lc3BhY2U9InNxbGl0ZTMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDsuLlwuLlwuLlxzcWxpdGUtMy42LjIxJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlMy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzZXh0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzIGIvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAwMzI4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzcWxpdGUzIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiDQotCQlXYXJuaW5nTGV2ZWw9IjEiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NzbC52Y3Byb2ogYi9QQy9WUzguMC9zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGQ2MzVlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNzbCINCi0JUHJvamVjdEdVSUQ9IntFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9Ig0KLQlSb290TmFtZXNwYWNlPSJzc2wiDQotCUtleXdvcmQ9Ik1ha2VGaWxlUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qIGIvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y3ZDIzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3VuaWNvZGVkYXRhLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idW5pY29kZWRhdGEiDQotCVByb2plY3RHVUlEPSJ7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfSINCi0JUm9vdE5hbWVzcGFjZT0idW5pY29kZWRhdGEiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVuYW1lX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0ZDIwNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlQcm9qZWN0R1VJRD0ie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVJvb3ROYW1lc3BhY2U9Inc5eHBvcGVuIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcdzl4cG9wZW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNzkzNTcuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvd2luc291bmQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ3aW5zb3VuZCINCi0JUHJvamVjdEdVSUQ9InsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5zb3VuZCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3g2NC52c3Byb3BzIGIvUEMvVlM4LjAveDY0LnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODhkNDQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAveDY0LnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYW1kNjQiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcilcYW1kNjRcIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjY0O19NX1g2NCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChIT1NUX1BZVEhPTikiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2ogYi9QQy9WUzkuMC9fc2hhMy52Y3Byb2oKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagpyZW5hbWUgdG8gUEMvVlM5LjAvX3NoYTMudmNwcm9qCmluZGV4IDA5NzI0MWUuLjVmZTE4ZDUgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NoYTMudmNwcm9qCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2N0eXBlc190ZXN0Ig0KLQlQcm9qZWN0R1VJRD0iezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXNfdGVzdCINCisJVmVyc2lvbj0iOSwwMCINCisJTmFtZT0iX3NoYTMiDQorCVByb2plY3RHVUlEPSJ7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fSINCisJUm9vdE5hbWVzcGFjZT0iX3NoYTMiDQogCUtleXdvcmQ9IldpbjMyUHJvaiINCiAJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KIAk+DQpAQCAtNTAwLDE4ICs1MDAsMTAgQEAKIAk8L1JlZmVyZW5jZXM+DQogCTxGaWxlcz4NCiAJCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQogCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYyINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zaGEzXHNoYTNtb2R1bGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagppbmRleCBmNzEwMGYxLi44MmM1N2FlIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCkBAIC01NTUsMTAgKzU1NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fc3NsLnZjcHJvaiBiL1BDL1ZTOS4wL19zc2wudmNwcm9qCmluZGV4IDk3YWEyOTQuLmI0N2RjMjcgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zc2wudmNwcm9qCisrKyBiL1BDL1ZTOS4wL19zc2wudmNwcm9qCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQogPFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQorCVZlcnNpb249IjksMDAiDQogCU5hbWU9Il9zc2wiDQogCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCiAJUm9vdE5hbWVzcGFjZT0iX3NzbCINCkBAIC01Niw3ICs1Niw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTExOCw3ICsxMTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDMxLDcgKzQzMSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvagpyZW5hbWUgdG8gUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKaW5kZXggNzZhZDJkOC4uMTRkOTEwZCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvagorKysgYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpAQCAtMSwxMCArMSwxMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQogPFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il90ZXN0Y2FwaSINCi0JUHJvamVjdEdVSUQ9Ins2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGVzdGNhcGkiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9Il90ZXN0aW1wb3J0bXVsdGlwbGUiDQorCVByb2plY3RHVUlEPSJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUm9vdE5hbWVzcGFjZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCiAJS2V5d29yZD0iV2luMzJQcm9qIg0KIAlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQogCT4NCkBAIC01MTEsNyArNTExLDcgQEAKIAkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCiAJCQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAva2lsbF9weXRob24uYyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKaW5kZXggYmIzMjNkMy4uNjA0NzMxZiAxMDA2NDQKLS0tIGEvUEMvVlM5LjAva2lsbF9weXRob24uYworKysgYi9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgogICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3BjYnVpbGQuc2xuIGIvUEMvVlM5LjAvcGNidWlsZC5zbG4KaW5kZXggOGY4Y2JiNi4uM2I3M2ZjZSAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcGNidWlsZC5zbG4KKysrIGIvUEMvVlM5LjAvcGNidWlsZC5zbG4KQEAgLTIwLDExICsyMCw2IEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3Byb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRlbXMiLCAiezU1M0VDMzNFLTk4MTYtNDk5Ni1BNjYwLTVENjE4NkEwQjBCM30iDQpAQCAtODcsNiArODIsMTEgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oiLCAiezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCkBAIC0xNTIsNiArMTUyLDggQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zaGEzIiwgIl9zaGEzLnZjcHJvaiIsICJ7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtNDIwLDYgKzQyMiwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTY1MSw2ICs2NjksMjIgQEAKIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcwppbmRleCBmZjM3NTllLi5lZDU0NjRkIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcworKysgYi9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcwpAQCAtMzgsNyArMzgsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5RGxsTmFtZSINCi0JCVZhbHVlPSJweXRob24zMyINCisJCVZhbHVlPSJweXRob24zNCINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHl0aG9uRXhlIg0KQEAgLTUwLDcgKzUwLDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy43LjEyIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjEiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9ImJ6MkRpciINCkBAIC01OCw3ICs1OCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ibHptYURpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjMiDQorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHh6LTUuMC41Ig0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJvcGVuc3NsRGlyIg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qIGIvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2oKaW5kZXggOWZiNjNmZi4uY2Y2MDQ3MCAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2oKKysrIGIvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2oKQEAgLTExMTksNyArMTExOSw3IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9vcGVyYXRvci5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpAQCAtMTE1NSw2ICsxMTU1LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2xpYi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3RhdC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTEyNDIsNzQgKzEyNTgsNiBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYyINCi0JCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTE1ODcsNiArMTUzNSwxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNldG9iamVjdC5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4NWIwMC4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlQcm9qZWN0R1VJRD0ie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVJvb3ROYW1lc3BhY2U9Inc5eHBvcGVuIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcdzl4cG9wZW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9fbXNpLmMgYi9QQy9fbXNpLmMKaW5kZXggMGI1Yjk0ZS4uNmE5OWI0MCAxMDA2NDQKLS0tIGEvUEMvX21zaS5jCisrKyBiL1BDL19tc2kuYwpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgRk5GQ0lPUEVOKGNiX29wZW4pCiB7Ci0gICAgaW50IHJlc3VsdCA9IF9vcGVuKHBzekZpbGUsIG9mbGFnLCBwbW9kZSk7CisgICAgaW50IHJlc3VsdCA9IF9vcGVuKHBzekZpbGUsIG9mbGFnIHwgT19OT0lOSEVSSVQsIHBtb2RlKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTYzLDcgKzYzLDcgQEAKIAogc3RhdGljIEZORkNJUkVBRChjYl9yZWFkKQogewotICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3JlYWQoaGYsIG1lbW9yeSwgY2IpOworICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3JlYWQoKGludCloZiwgbWVtb3J5LCBjYik7CiAgICAgaWYgKHJlc3VsdCAhPSBjYikKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03MSw3ICs3MSw3IEBACiAKIHN0YXRpYyBGTkZDSVdSSVRFKGNiX3dyaXRlKQogewotICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3dyaXRlKGhmLCBtZW1vcnksIGNiKTsKKyAgICBVSU5UIHJlc3VsdCA9IChVSU5UKV93cml0ZSgoaW50KWhmLCBtZW1vcnksIGNiKTsKICAgICBpZiAocmVzdWx0ICE9IGNiKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTc5LDcgKzc5LDcgQEAKIAogc3RhdGljIEZORkNJQ0xPU0UoY2JfY2xvc2UpCiB7Ci0gICAgaW50IHJlc3VsdCA9IF9jbG9zZShoZik7CisgICAgaW50IHJlc3VsdCA9IF9jbG9zZSgoaW50KWhmKTsKICAgICBpZiAocmVzdWx0ICE9IDApCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODcsNyArODcsNyBAQAogCiBzdGF0aWMgRk5GQ0lTRUVLKGNiX3NlZWspCiB7Ci0gICAgbG9uZyByZXN1bHQgPSAobG9uZylfbHNlZWsoaGYsIGRpc3QsIHNlZWt0eXBlKTsKKyAgICBsb25nIHJlc3VsdCA9IChsb25nKV9sc2VlaygoaW50KWhmLCBkaXN0LCBzZWVrdHlwZSk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzksNyArMTc5LDcgQEAKIAogICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CiAKLSAgICByZXR1cm4gX29wZW4ocHN6TmFtZSwgX09fUkRPTkxZIHwgX09fQklOQVJZKTsKKyAgICByZXR1cm4gX29wZW4ocHN6TmFtZSwgX09fUkRPTkxZIHwgX09fQklOQVJZIHwgT19OT0lOSEVSSVQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqIGZjaWNyZWF0ZShQeU9iamVjdCogb2JqLCBQeU9iamVjdCogYXJncykKQEAgLTEwMzAsNDAgKzEwMzAsNDAgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJREJPUEVOX1RSQU5TQUNUIiwgKGludClNU0lEQk9QRU5fVFJBTlNBQ1QpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lEQk9QRU5fUEFUQ0hGSUxFIiwgKGludClNU0lEQk9QRU5fUEFUQ0hGSUxFKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lDT0xJTkZPX05BTUVTIiwgTVNJQ09MSU5GT19OQU1FUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSUNPTElORk9fVFlQRVMiLCBNU0lDT0xJTkZPX1RZUEVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lDT0xJTkZPX05BTUVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lDT0xJTkZPX1RZUEVTKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfU0VFSyIsIE1TSU1PRElGWV9TRUVLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1JFRlJFU0giLCBNU0lNT0RJRllfUkVGUkVTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9JTlNFUlQiLCBNU0lNT0RJRllfSU5TRVJUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1VQREFURSIsIE1TSU1PRElGWV9VUERBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfQVNTSUdOIiwgTVNJTU9ESUZZX0FTU0lHTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9SRVBMQUNFIiwgTVNJTU9ESUZZX1JFUExBQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfTUVSR0UiLCBNU0lNT0RJRllfTUVSR0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfREVMRVRFIiwgTVNJTU9ESUZZX0RFTEVURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9JTlNFUlRfVEVNUE9SQVJZIiwgTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEUiLCBNU0lNT0RJRllfVkFMSURBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEVfTkVXIiwgTVNJTU9ESUZZX1ZBTElEQVRFX05FVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9GSUVMRCIsIE1TSU1PRElGWV9WQUxJREFURV9GSUVMRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUiLCBNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfU0VFSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1JFRlJFU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9JTlNFUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9VUERBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9BU1NJR04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9SRVBMQUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfTUVSR0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9JTlNFUlRfVEVNUE9SQVJZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURV9ORVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURV9GSUVMRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NPREVQQUdFIiwgUElEX0NPREVQQUdFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1RJVExFIiwgUElEX1RJVExFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1NVQkpFQ1QiLCBQSURfU1VCSkVDVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9BVVRIT1IiLCBQSURfQVVUSE9SKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0tFWVdPUkRTIiwgUElEX0tFWVdPUkRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NPTU1FTlRTIiwgUElEX0NPTU1FTlRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1RFTVBMQVRFIiwgUElEX1RFTVBMQVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RBVVRIT1IiLCBQSURfTEFTVEFVVEhPUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9SRVZOVU1CRVIiLCBQSURfUkVWTlVNQkVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RQUklOVEVEIiwgUElEX0xBU1RQUklOVEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NSRUFURV9EVE0iLCBQSURfQ1JFQVRFX0RUTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9MQVNUU0FWRV9EVE0iLCBQSURfTEFTVFNBVkVfRFRNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1BBR0VDT1VOVCIsIFBJRF9QQUdFQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfV09SRENPVU5UIiwgUElEX1dPUkRDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DSEFSQ09VTlQiLCBQSURfQ0hBUkNPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0FQUE5BTUUiLCBQSURfQVBQTkFNRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9TRUNVUklUWSIsIFBJRF9TRUNVUklUWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NPREVQQUdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfVElUTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9TVUJKRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQVVUSE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfS0VZV09SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DT01NRU5UUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1RFTVBMQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVEFVVEhPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1JFVk5VTUJFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0xBU1RQUklOVEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ1JFQVRFX0RUTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0xBU1RTQVZFX0RUTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1BBR0VDT1VOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1dPUkRDT1VOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NIQVJDT1VOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0FQUE5BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9TRUNVUklUWSk7CiAKICAgICBNU0lFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbiAoIl9tc2kuTVNJRXJyb3IiLCBOVUxMLCBOVUxMKTsKICAgICBpZiAoIU1TSUVycm9yKQpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMgYi9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYwppbmRleCBjMTFkNDVkLi5lOTQwMWQ5IDEwMDY0NAotLS0gYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYworKysgYi9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYwpAQCAtNzQzLDcgKzc0Myw3IEBACiAgICAgaWYgKHBhdGhuYW1lID09IE5VTEwgfHwgcGF0aG5hbWVbMF0gPT0gJ1wwJykKICAgICAgICAgcmV0dXJuIDI7CiAKLSAgICBmaCA9IG9wZW4ocGF0aG5hbWUsIF9PX1JET05MWSk7CisgICAgZmggPSBvcGVuKHBhdGhuYW1lLCBfT19SRE9OTFkgfCBPX05PSU5IRVJJVCk7CiAgICAgaWYgKC0xID09IGZoKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gcG9zdGluc3RhbGwtc2NyaXB0ICVzXG4iLAogICAgICAgICAgICAgcGF0aG5hbWUpOwpkaWZmIC0tZ2l0IGEvUEMvY29uZmlnLmMgYi9QQy9jb25maWcuYwppbmRleCA1N2I1MDczLi43MmM5MzgxIDEwMDY0NAotLS0gYS9QQy9jb25maWcuYworKysgYi9QQy9jb25maWcuYwpAQCAtMTMsMTEgKzEzLDEyIEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2Vycm5vKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZmF1bHRoYW5kbGVyKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9tYXRoKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX21kNSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X250KHZvaWQpOwotZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfb3BlcmF0b3Iodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3BlcmF0b3Iodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9zaWduYWwodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2hhMSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGEyNTYodm9pZCk7CkBAIC02NCw2ICs2NSw4IEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RyaW5nKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2RlKHZvaWQpOwogCiAvKiB0b29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBtYXJrZXIgZm9yIGFkZGl0aW9uYWwgImV4dGVybiIgKi8KIC8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwpAQCAtODcsNyArOTAsNyBAQAogICAgIHsiZ2MiLCBQeUluaXRfZ2N9LAogICAgIHsibWF0aCIsIFB5SW5pdF9tYXRofSwKICAgICB7Im50IiwgUHlJbml0X250fSwgLyogVXNlIHRoZSBOVCBvcyBmdW5jdGlvbnMsIG5vdCBwb3NpeCAqLwotICAgIHsib3BlcmF0b3IiLCBQeUluaXRfb3BlcmF0b3J9LAorICAgIHsiX29wZXJhdG9yIiwgUHlJbml0X19vcGVyYXRvcn0sCiAgICAgeyJzaWduYWwiLCBQeUluaXRfc2lnbmFsfSwKICAgICB7Il9tZDUiLCBQeUluaXRfX21kNX0sCiAgICAgeyJfc2hhMSIsIFB5SW5pdF9fc2hhMX0sCkBAIC0xMDEsNiArMTA0LDcgQEAKICAgICB7Im1zdmNydCIsIFB5SW5pdF9tc3ZjcnR9LAogICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKICNlbmRpZgorICAgIHsiX3RyYWNlbWFsbG9jIiwgUHlJbml0X190cmFjZW1hbGxvY30sCiAgICAgLyogWFhYIFNob3VsZCBfd2luYXBpIGdvIGluIGEgV0lOMzIgYmxvY2s/ICBub3QgV0lONjQ/ICovCiAgICAgeyJfd2luYXBpIiwgUHlJbml0X193aW5hcGl9LAogCkBAIC0xNTQsNiArMTU4LDggQEAKICAgICB7Il9pbyIsIFB5SW5pdF9faW99LAogICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKICAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsiX3N0YXQiLCBQeUluaXRfX3N0YXR9LAorICAgIHsiX29wY29kZSIsIFB5SW5pdF9fb3Bjb2RlfSwKIAogICAgIC8qIFNlbnRpbmVsICovCiAgICAgezAsIDB9CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagppbmRleCBmYmEwMGI2Li5kZjM2MzQxIDEwMDY0NAotLS0gYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCisrKyBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKQEAgLTM5LDcgKzM5LDcgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9leHBvcnQ6aW5pdGV4YW1wbGUiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjMzLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzQubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIuXFJlbGVhc2UvZXhhbXBsZS5weWQiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KQEAgLTEwNSw3ICsxMDUsNyBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzNfZC5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjM0X2QubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIuXERlYnVnL2V4YW1wbGVfZC5weWQiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KZGlmZiAtLWdpdCBhL1BDL2dldHBhdGhwLmMgYi9QQy9nZXRwYXRocC5jCmluZGV4IGI1YmYzMjUuLmRlYjQwZTcgMTAwNjQ0Ci0tLSBhL1BDL2dldHBhdGhwLmMKKysrIGIvUEMvZ2V0cGF0aHAuYwpAQCAtMSw2ICsxLDYgQEAKIAogLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KKy8qIFVzZWQgYnkgRE9TLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgUEFUSCBSVUxFUyBGT1IgV0lORE9XUzoKQEAgLTI0NSw5ICsyNDUsOSBAQAogICAgIC8qIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSggKi8KICAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwogICAgIC8qIFNwYWNlIGZvciBhbGwgdGhlIGNoYXJzLCBwbHVzIG9uZSBcMCAqLwotICAgIGtleUJ1ZiA9IGtleUJ1ZlB0ciA9IG1hbGxvYyhzaXplb2Yoa2V5UHJlZml4KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXQ0hBUikqKHZlcnNpb25MZW4tMSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KSk7CisgICAga2V5QnVmID0ga2V5QnVmUHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKICAgICBpZiAoa2V5QnVmPT1OVUxMKSBnb3RvIGRvbmU7CiAKICAgICBtZW1jcHkoa2V5QnVmUHRyLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLyogQWxsb2NhdGUgYSB0ZW1wIGFycmF5IG9mIGNoYXIgYnVmZmVycywgc28gd2Ugb25seSBuZWVkIHRvIGxvb3AKICAgICAgICByZWFkaW5nIHRoZSByZWdpc3RyeSBvbmNlCiAgICAgKi8KLSAgICBwcFBhdGhzID0gbWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CisgICAgcHBQYXRocyA9IFB5TWVtX1Jhd01hbGxvYyggc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyApOwogICAgIGlmIChwcFBhdGhzPT1OVUxMKSBnb3RvIGRvbmU7CiAgICAgbWVtc2V0KHBwUGF0aHMsIDAsIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMpOwogICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cywgYWxsb2NhdGluZyBhIHRlbXAgc3ViLWJ1ZmZlci4gKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICAvKiBGaW5kIHRoZSB2YWx1ZSBvZiB0aGUgYnVmZmVyIHNpemUsIG1hbGxvYywgdGhlbiByZWFkIGl0ICovCiAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAmcmVxZFNpemUpOwogICAgICAgICBpZiAocmVxZFNpemUpIHsKLSAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gbWFsbG9jKHJlcWRTaXplKTsKKyAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gUHlNZW1fUmF3TWFsbG9jKHJlcWRTaXplKTsKICAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgewogICAgICAgICAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBCWVRFKXBwUGF0aHNbaW5kZXhdLApAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgaWYgKGRhdGFTaXplID09IDApIGdvdG8gZG9uZTsKIAogICAgIC8qIG9yaWdpbmFsIGRhdGFzaXplIGZyb20gUmVnUXVlcnlJbmZvIGRvZXNuJ3QgaW5jbHVkZSB0aGUgXDAgKi8KLSAgICBkYXRhQnVmID0gbWFsbG9jKChkYXRhU2l6ZSsxKSAqIHNpemVvZihXQ0hBUikpOworICAgIGRhdGFCdWYgPSBQeU1lbV9SYXdNYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CiAgICAgaWYgKGRhdGFCdWYpIHsKICAgICAgICAgV0NIQVIgKnN6Q3VyID0gZGF0YUJ1ZjsKICAgICAgICAgRFdPUkQgcmVxZFNpemUgPSBkYXRhU2l6ZTsKQEAgLTM0NiwxNCArMzQ2LDEzIEBACiBkb25lOgogICAgIC8qIExvb3AgZnJlZWluZyBteSB0ZW1wIGJ1ZmZlcnMgKi8KICAgICBpZiAocHBQYXRocykgewotICAgICAgICBmb3IoaW5kZXg9MDtpbmRleDxudW1LZXlzO2luZGV4KyspCi0gICAgICAgICAgICBpZiAocHBQYXRoc1tpbmRleF0pIGZyZWUocHBQYXRoc1tpbmRleF0pOwotICAgICAgICBmcmVlKHBwUGF0aHMpOworICAgICAgICBmb3IoaW5kZXg9MDsgaW5kZXg8bnVtS2V5czsgaW5kZXgrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRoc1tpbmRleF0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKHBwUGF0aHMpOwogICAgIH0KICAgICBpZiAobmV3S2V5KQogICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIGlmIChrZXlCdWYpCi0gICAgICAgIGZyZWUoa2V5QnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKGtleUJ1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KICNlbmRpZiAvKiBQeV9FTkFCTEVfU0hBUkVEICovCkBAIC00MzQsNyArNDMzLDcgQEAKICAgICAgICAgY2hhciAqIHAgPSBmZ2V0cyhidWZmZXIsIE1BWFBBVEhMRU4qMiwgZW52X2ZpbGUpOwogICAgICAgICB3Y2hhcl90IHRtcGJ1ZmZlcltNQVhQQVRITEVOKjIrMV07CiAgICAgICAgIFB5T2JqZWN0ICogZGVjb2RlZDsKLSAgICAgICAgaW50IG47CisgICAgICAgIHNpemVfdCBuOwogCiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxNiw3ICs2MTUsNyBAQAogICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCiAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihlbnZwYXRoKSArIDE7CiAKLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBQeU1lbV9SYXdNYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwpAQCAtNjI5LDEwICs2MjgsOCBAQAogICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKICAgICAgICAgfQogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKG1hY2hpbmVwYXRoKQotICAgICAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjUyLDEzICs2NDksMTMgQEAKICAgICAgICAgd2NzY3B5KGJ1ZiwgdXNlcnBhdGgpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBmcmVlKHVzZXJwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAgICAgfQogICAgIGlmIChtYWNoaW5lcGF0aCkgewogICAgICAgICB3Y3NjcHkoYnVmLCBtYWNoaW5lcGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKICAgICB9CiAgICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewogICAgICAgICBpZiAoIXNraXBkZWZhdWx0KSB7CkBAIC03NDUsNyArNzQyLDcgQEAKIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCkKIHsKICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKQEAgLTc1MywxMCArNzUwLDEwIEBACiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IG1hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7Ci0JfQorICAgIH0KIH0KIAogd2NoYXJfdCAqCmRpZmYgLS1naXQgYS9QQy9sYXVuY2hlci5jIGIvUEMvbGF1bmNoZXIuYwppbmRleCAyMTZhNTYyLi5lZTNjZDQ0IDEwMDY0NAotLS0gYS9QQy9sYXVuY2hlci5jCisrKyBiL1BDL2xhdW5jaGVyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVmluYXkgU2FqaXAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBWaW5heSBTYWppcC4KICAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KICAqCiAgKiBCYXNlZCBvbiB0aGUgd29yayBvZjoKQEAgLTE4LDcgKzE4LDI4IEBACiAKIC8qIEJ1aWxkIG9wdGlvbnMuICovCiAjZGVmaW5lIFNLSVBfUFJFRklYCi0vKiAjZGVmaW5lIFNFQVJDSF9QQVRIICovCisjZGVmaW5lIFNFQVJDSF9QQVRICisKKy8qIEVycm9yIGNvZGVzICovCisKKyNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKKyNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKKyNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKKyNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKKyNkZWZpbmUgUkNfTk9fTUVNT1JZICAgICAgICAxMDQKKy8qCisgKiBTQ1JJUFRfV1JBUFBFUiBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byB2YXJpYW50cyBvZiBhbiBleGVjdXRhYmxlIGJ1aWx0CisgKiBmcm9tIHRoaXMgc291cmNlIGZpbGUuIElmIG5vdCBkZWZpbmVkLCB0aGUgUEVQIDM5NyBQeXRob24gbGF1bmNoZXIgaXMgYnVpbHQ7CisgKiBpZiBkZWZpbmVkLCBhIHNjcmlwdCBsYXVuY2hlciBvZiB0aGUgdHlwZSB1c2VkIGJ5IHNldHVwdG9vbHMgaXMgYnVpbHQsIHdoaWNoCisgKiBsb29rcyBmb3IgYSBzY3JpcHQgbmFtZSByZWxhdGVkIHRvIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIHJ1bnMgdGhhdCBzY3JpcHQKKyAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBTQ1JJUFRfV1JBUFBFUiBzaG91bGQgYmUgdW5kZWZpbmVkIGluIHRoZSBzb3VyY2UsIGFuZCBkZWZpbmVkIGluIGEgVlMgcHJvamVjdAorICogd2hpY2ggYnVpbGRzIHRoZSBzZXR1cHRvb2xzLXN0eWxlIGxhdW5jaGVyLgorICovCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyNkZWZpbmUgUkNfTk9fU0NSSVBUICAgICAgICAxMDUKKyNlbmRpZgogCiAvKiBKdXN0IGZvciBub3cgLSBzdGF0aWMgZGVmaW5pdGlvbiAqLwogCkBAIC0zMiwzMiArNTMsNiBAQAogICAgIHJldHVybiBwOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50Ci0gKiBhbmQgdG8gdHJlYXQgYmxhbmsgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIGFic2VudC4KLSAqLwotc3RhdGljIHdjaGFyX3QgKiBnZXRfZW52KHdjaGFyX3QgKiBrZXkpCi17Ci0gICAgLyogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGp1c3QgbGlrZSBnZXRlbnYgKi8KLSAgICBzdGF0aWMgd2NoYXJfdCBidWZbMjU2XTsKLSAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgMjU2KTsKLQotICAgIGlmIChyZXN1bHQgPiAyNTUpIHsKLSAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KLSAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7Ci0gICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGJ1ZjI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSAwKQotICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAotICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gYnVmOwotfQotCi0KIHN0YXRpYyB2b2lkCiBkZWJ1Zyh3Y2hhcl90ICogZm9ybWF0LCAuLi4pCiB7CkBAIC0xMDAsMTEgKzk1LDQwIEBACiAjaWYgIWRlZmluZWQoX1dJTkRPV1MpCiAgICAgZndwcmludGYoc3RkZXJyLCBMIiVzXG4iLCBtZXNzYWdlKTsKICNlbHNlCi0gICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLCBNQl9PSyk7IAorICAgIE1lc3NhZ2VCb3goTlVMTCwgbWVzc2FnZSwgVEVYVCgiUHl0aG9uIExhdW5jaGVyIGlzIHNvcnJ5IHRvIHNheSAuLi4iKSwKKyAgICAgICAgICAgICAgIE1CX09LKTsgCiAjZW5kaWYKICAgICBFeGl0UHJvY2VzcyhyYyk7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKKyAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgorICovCitzdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKK3sKKyAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLworICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZltCVUZTSVpFXTsKKyAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgQlVGU0laRSk7CisKKyAgICBpZiAocmVzdWx0ID49IEJVRlNJWkUpIHsKKyAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KKyAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7CisgICAgICAgIGlmIChidWYyID0gTlVMTCkgeworICAgICAgICAgICAgZXJyb3IoUkNfTk9fTUVNT1JZLCBMIkNvdWxkIG5vdCBhbGxvY2F0ZSBlbnZpcm9ubWVudCBidWZmZXIiKTsKKyAgICAgICAgfQorICAgICAgICBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZjIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBidWYyOworICAgIH0KKworICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAgICAgLyogRWl0aGVyIHNvbWUgZXJyb3IsIGUuZy4gRVJST1JfRU5WVkFSX05PVF9GT1VORCwKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGUuICovCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKwogI2lmIGRlZmluZWQoX1dJTkRPV1MpCiAKICNkZWZpbmUgUFlUSE9OX0VYRUNVVEFCTEUgTCJweXRob253LmV4ZSIKQEAgLTExNSwxMSArMTM5LDYgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKLSNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKLSNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKLSNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKLQogI2RlZmluZSBNQVhfVkVSU0lPTl9TSVpFICAgIDQKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNDU3LDYgKzQ3Niw1MSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorLyoKKyAqIENoZWNrIGZvciBhIHNjcmlwdCBsb2NhdGVkIGFsb25nc2lkZSB0aGUgZXhlY3V0YWJsZQorICovCisKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weXciCisjZWxzZQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weSIKKyNlbmRpZgorCitzdGF0aWMgd2NoYXJfdCB3cmFwcGVkX3NjcmlwdF9wYXRoW01BWF9QQVRIXTsKKworLyogTG9jYXRlIHRoZSBzY3JpcHQgYmVpbmcgd3JhcHBlZC4KKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIHNjcmlwdCBpbgorICogd3JhcHBlZF9zY3JpcHRfcGF0aCwgb3IgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdyYXBwZWQgc2NyaXB0IGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKQoreworICAgIHdjaGFyX3QgKiBwOworICAgIHNpemVfdCBwbGVuOworICAgIERXT1JEIGF0dHJzOworCisgICAgcGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCB3cmFwcGVkX3NjcmlwdF9wYXRoLCBNQVhfUEFUSCk7CisgICAgcCA9IHdjc3JjaHIod3JhcHBlZF9zY3JpcHRfcGF0aCwgTCcuJyk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gZXh0ZW5zaW9uOiAlc1xuIiwKKyAgICAgICAgICAgICAgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJXcmFwcGVyIG5hbWUgJyVzJyBpcyBub3QgdmFsaWQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgd2NzbmNweV9zKHAsIE1BWF9QQVRIIC0gKHAgLSB3cmFwcGVkX3NjcmlwdF9wYXRoKSArIDEsIFNDUklQVF9TVUZGSVgsIF9UUlVOQ0FURSk7CisgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisgICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJTY3JpcHQgZmlsZSAnJXMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIH0KKworICAgIGRlYnVnKEwiVXNpbmcgd3JhcHBlZCBzY3JpcHQgZmlsZSAnJXMnXG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKK30KKyNlbmRpZgorCiAvKgogICogUHJvY2VzcyBjcmVhdGlvbiBjb2RlCiAgKi8KQEAgLTU1MCw3ICs2MTQsNyBAQAogICAgICAgICBlcnJvcihSQ19DUkVBVEVfUFJPQ0VTUywgTCJVbmFibGUgdG8gY3JlYXRlIHByb2Nlc3MgdXNpbmcgJyVzJyIsIGNtZGxpbmUpOwogICAgIEFzc2lnblByb2Nlc3NUb0pvYk9iamVjdChqb2IsIHBpLmhQcm9jZXNzKTsKICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisgICAgV2FpdEZvclNpbmdsZU9iamVjdEV4KHBpLmhQcm9jZXNzLCBJTkZJTklURSwgRkFMU0UpOwogICAgIG9rID0gR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmcmMpOwogICAgIGlmICghb2spCiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIkZhaWxlZCB0byBnZXQgZXhpdCBjb2RlIG9mIHByb2Nlc3MiKTsKQEAgLTU5NSwxMiArNjU5LDE3IEBACiAgICAgfQogfQogCi1zdGF0aWMgd2NoYXJfdCAqIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKLSAgICBMIi91c3IvYmluL2VudiBweXRob24iLAotICAgIEwiL3Vzci9iaW4vcHl0aG9uIiwKLSAgICBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsCi0gICAgTCJweXRob24iLAotICAgIE5VTEwKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpzaGViYW5nOworICAgIEJPT0wgc2VhcmNoOworfSBTSEVCQU5HOworCitzdGF0aWMgU0hFQkFORyBidWlsdGluX3ZpcnR1YWxfcGF0aHMgW10gPSB7CisgICAgeyBMIi91c3IvYmluL2VudiBweXRob24iLCBUUlVFIH0sCisgICAgeyBMIi91c3IvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMInB5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBOVUxMLCBGQUxTRSB9LAogfTsKIAogLyogRm9yIG5vdywgYSBzdGF0aWMgYXJyYXkgb2YgY29tbWFuZHMuICovCkBAIC03NzYsMTAgKzg0NSwxMCBAQAogCiBzdGF0aWMgQk9PTAogcGFyc2Vfc2hlYmFuZyh3Y2hhcl90ICogc2hlYmFuZ19saW5lLCBpbnQgbmNoYXJzLCB3Y2hhcl90ICoqIGNvbW1hbmQsCi0gICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4KQorICAgICAgICAgICAgICB3Y2hhcl90ICoqIHN1ZmZpeCwgQk9PTCAqc2VhcmNoKQogewogICAgIEJPT0wgcmMgPSBGQUxTRTsKLSAgICB3Y2hhcl90ICoqIHZwcDsKKyAgICBTSEVCQU5HICogdnBwOwogICAgIHNpemVfdCBwbGVuOwogICAgIHdjaGFyX3QgKiBwOwogICAgIHdjaGFyX3QgemFwcGVkOwpAQCAtNzg5LDE1ICs4NTgsMTcgQEAKIAogICAgICpjb21tYW5kID0gTlVMTDsgICAgLyogZmFpbHVyZSByZXR1cm4gKi8KICAgICAqc3VmZml4ID0gTlVMTDsKKyAgICAqc2VhcmNoID0gRkFMU0U7CiAKICAgICBpZiAoKCpzaGViYW5nX2xpbmUrKyA9PSBMJyMnKSAmJiAoKnNoZWJhbmdfbGluZSsrID09IEwnIScpKSB7CiAgICAgICAgIHNoZWJhbmdfbGluZSA9IHNraXBfd2hpdGVzcGFjZShzaGViYW5nX2xpbmUpOwogICAgICAgICBpZiAoKnNoZWJhbmdfbGluZSkgewogICAgICAgICAgICAgKmNvbW1hbmQgPSBzaGViYW5nX2xpbmU7Ci0gICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgKnZwcDsgKyt2cHApIHsKLSAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKCp2cHApOwotICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKHNoZWJhbmdfbGluZSwgKnZwcCwgcGxlbikgPT0gMCkgeworICAgICAgICAgICAgZm9yICh2cHAgPSBidWlsdGluX3ZpcnR1YWxfcGF0aHM7IHZwcC0+c2hlYmFuZzsgKyt2cHApIHsKKyAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKHZwcC0+c2hlYmFuZyk7CisgICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCB2cHAtPnNoZWJhbmcsIHBsZW4pID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmMgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAqc2VhcmNoID0gdnBwLT5zZWFyY2g7CiAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2UgYWxsIGJ1aWx0aW4gY29tbWFuZHMgY29udGFpbgogICAgICAgICAgICAgICAgICAgICAgKiAicHl0aG9uIi4KICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MDUsNyArODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCp2cHAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHZwcC0+c2hlYmFuZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBOb3QgZm91bmQgaW4gYnVpbHRpbnMgLSBsb29rIGluIGN1c3RvbWl6ZWQgY29tbWFuZHMuCiAgICAgICAgICAgICAgICAgICoKQEAgLTg1Niw3ICs5MjcsNyBAQAogfSBCT007CiAKIC8qCi0gKiBTdHJpY3RseSwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgVVRGLTE2IGFuZiBVVEYtMzIsIHNpbmNlIFB5dGhvbiBpdHNlbGYKKyAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5kIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgogICogZG9lc24ndC4gTmV2ZXIgbWluZCwgb25lIGRheSBpdCBtaWdodCAtIHRoZXJlJ3Mgbm8gaGFybSBsZWF2aW5nIGl0IGluLgogICovCiBzdGF0aWMgQk9NIEJPTXNbXSA9IHsKQEAgLTEwMTIsOCArMTA4MywxMCBAQAogICAgIGludCBpLCBqLCBuY2hhcnMgPSAwOwogICAgIGludCBoZWFkZXJfbGVuOwogICAgIEJPT0wgaXNfdmlydDsKKyAgICBCT09MIHNlYXJjaDsKICAgICB3Y2hhcl90ICogY29tbWFuZDsKICAgICB3Y2hhcl90ICogc3VmZml4OworICAgIENPTU1BTkQgKmNtZCA9IE5VTEw7CiAgICAgSU5TVEFMTEVEX1BZVEhPTiAqIGlwOwogCiAgICAgaWYgKHJjID09IDApIHsKQEAgLTExMjUsNyArMTE5OCw3IEBACiAgICAgICAgICAgICBpZiAobmNoYXJzID4gMCkgewogICAgICAgICAgICAgICAgIHNoZWJhbmdfbGluZVstLW5jaGFyc10gPSBMJ1wwJzsKICAgICAgICAgICAgICAgICBpc192aXJ0ID0gcGFyc2Vfc2hlYmFuZyhzaGViYW5nX2xpbmUsIG5jaGFycywgJmNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCwgJnNlYXJjaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInBhcnNlX3NoZWJhbmc6IGZvdW5kIGNvbW1hbmQ6ICVzXG4iLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc192aXJ0KSB7CkBAIC0xMTQxLDYgKzEyMTQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIlVua25vd24gdmlydHVhbCBcCiBwYXRoICclcyciLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gNjsgICAvKiBza2lwIHBhc3QgInB5dGhvbiIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgKCgqY29tbWFuZCA9PSBMJ1wwJykgfHwgaXNzcGFjZSgqY29tbWFuZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBpcyBlbGlnaWJsZSBmb3IgcGF0aCBzZWFyY2gsIGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIG5vIHZlcnNpb24gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInNlYXJjaGluZyBQQVRIIGZvciBweXRob24gZXhlY3V0YWJsZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZmluZF9vbl9wYXRoKEwicHl0aG9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJQeXRob24gb24gcGF0aDogJXNcbiIsIGNtZCA/IGNtZC0+dmFsdWUgOiBMIjxub3QgZm91bmQ+Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMImxvY2F0ZWQgcHl0aG9uIG9uIFBBVEg6ICVzXG4iLCBjbWQtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlX2NoaWxkKGNtZC0+dmFsdWUsIHN1ZmZpeCwgY21kbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgaGVyZSwgYXMgd2UgaGF2ZSBmb3VuZCB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTEwgVEhST1VHSDogTm8gcHl0aG9uIGZvdW5kIG9uIFBBVEgsIHNvIGZhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiYWNrIHRvIGxvY2F0aW5nIHRoZSBjb3JyZWN0IGluc3RhbGxlZCBweXRob24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbW1hbmQgJiYgIXZhbGlkYXRlX3ZlcnNpb24oY29tbWFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfQkFEX1ZJUlRVQUxfUEFUSCwgTCJJbnZhbGlkIHZlcnNpb24gXAogc3BlY2lmaWNhdGlvbjogJyVzJy5cbkluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzY3JpcHQsICdweXRob24nIG5lZWRzIHRvIGJlIFwKQEAgLTEyMjMsNiArMTMxMywxMiBAQAogICAgIHZvaWQgKiB2ZXJzaW9uX2RhdGE7CiAgICAgVlNfRklYRURGSUxFSU5GTyAqIGZpbGVfaW5mbzsKICAgICBVSU5UIGJsb2NrX3NpemU7CisgICAgaW50IGluZGV4OworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgaW50IG5ld2xlbjsKKyAgICB3Y2hhcl90ICogbmV3Y29tbWFuZDsKKyAgICB3Y2hhcl90ICogYXZbMl07CisjZW5kaWYKIAogICAgIHdwID0gZ2V0X2VudihMIlBZTEFVTkNIX0RFQlVHIik7CiAgICAgaWYgKCh3cCAhPSBOVUxMKSAmJiAoKndwICE9IEwnXDAnKSkKQEAgLTEyNzEsOCArMTM2Nyw4IEBACiAgICAgICAgICAgICBpZiAoIXZhbGlkKQogICAgICAgICAgICAgICAgIGRlYnVnKEwiR2V0RmlsZVZlcnNpb25JbmZvIGZhaWxlZDogJVhcbiIsIEdldExhc3RFcnJvcigpKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwgJmZpbGVfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibG9ja19zaXplKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25fZGF0YSwgTCJcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBWT0lEICopICZmaWxlX2luZm8sICZibG9ja19zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKQogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlZlclF1ZXJ5VmFsdWUgZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTMwMiw3ICsxMzk4LDQwIEBACiAgICAgfQogCiAgICAgY29tbWFuZCA9IHNraXBfbWUoR2V0Q29tbWFuZExpbmVXKCkpOwotICAgIGRlYnVnKEwiQ2FsbGVkIHdpdGggY29tbWFuZCBsaW5lOiAlcyIsIGNvbW1hbmQpOworICAgIGRlYnVnKEwiQ2FsbGVkIHdpdGggY29tbWFuZCBsaW5lOiAlc1xuIiwgY29tbWFuZCk7CisKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorICAgIC8qIFRoZSBsYXVuY2hlciBpcyBiZWluZyB1c2VkIGluICJzY3JpcHQgd3JhcHBlciIgbW9kZS4KKyAgICAgKiBUaGVyZSBzaG91bGQgdGhlcmVmb3JlIGJlIGEgUHl0aG9uIHNjcmlwdCBuYW1lZCA8ZXhlbmFtZT4tc2NyaXB0LnB5IGluCisgICAgICogdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBsYXVuY2hlciBleGVjdXRhYmxlLgorICAgICAqIFB1dCB0aGUgc2NyaXB0IG5hbWUgaW50byBhcmd2IGFzIHRoZSBmaXJzdCAoc2NyaXB0IG5hbWUpIGFyZ3VtZW50LgorICAgICAqLworCisgICAgLyogR2V0IHRoZSB3cmFwcGVkIHNjcmlwdCBuYW1lIC0gaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudCwgdGhpcyB3aWxsCisgICAgICogdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IuCisgICAgICovCisgICAgbG9jYXRlX3dyYXBwZWRfc2NyaXB0KCk7CisKKyAgICAvKiBBZGQgdGhlIHdyYXBwZWQgc2NyaXB0IHRvIHRoZSBzdGFydCBvZiBjb21tYW5kICovCisgICAgbmV3bGVuID0gd2NzbGVuKHdyYXBwZWRfc2NyaXB0X3BhdGgpICsgd2NzbGVuKGNvbW1hbmQpICsgMjsgLyogJyAnICsgTlVMICovCisgICAgbmV3Y29tbWFuZCA9IG1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBuZXdsZW4pOworICAgIGlmICghbmV3Y29tbWFuZCkgeworICAgICAgICBlcnJvcihSQ19OT19NRU1PUlksIEwiQ291bGQgbm90IGFsbG9jYXRlIG5ldyBjb21tYW5kIGxpbmUiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdjc2NweV9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIHdjc2NhdF9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgTCIgIik7CisgICAgICAgIHdjc2NhdF9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgY29tbWFuZCk7CisgICAgICAgIGRlYnVnKEwiUnVubmluZyB3cmFwcGVkIHNjcmlwdCB3aXRoIGNvbW1hbmQgbGluZSAnJXMnXG4iLCBuZXdjb21tYW5kKTsKKyAgICAgICAgcmVhZF9jb21tYW5kcygpOworICAgICAgICBhdlswXSA9IHdyYXBwZWRfc2NyaXB0X3BhdGg7CisgICAgICAgIGF2WzFdID0gTlVMTDsKKyAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoYXYsIG5ld2NvbW1hbmQpOworICAgICAgICAvKiBSZXR1cm5zIGlmIG5vIHNoZWJhbmcgbGluZSAtIHBhc3MgdG8gZGVmYXVsdCBwcm9jZXNzaW5nICovCisgICAgICAgIGNvbW1hbmQgPSBuZXdjb21tYW5kOworICAgICAgICB2YWxpZCA9IEZBTFNFOworICAgIH0KKyNlbHNlCiAgICAgaWYgKGFyZ2MgPD0gMSkgewogICAgICAgICB2YWxpZCA9IEZBTFNFOwogICAgICAgICBwID0gTlVMTDsKQEAgLTEzMTAsMTMgKzE0MzksNiBAQAogICAgIGVsc2UgewogICAgICAgICBwID0gYXJndlsxXTsKICAgICAgICAgcGxlbiA9IHdjc2xlbihwKTsKLSAgICAgICAgaWYgKHBbMF0gIT0gTCctJykgewotICAgICAgICAgICAgcmVhZF9jb21tYW5kcygpOwotICAgICAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoJmFyZ3ZbMV0sIGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIE5vIGZpbGUgd2l0aCBzaGViYW5nLCBvciBhbiB1bnJlY29nbmlzZWQgc2hlYmFuZy4KLSAgICAgICAgICogSXMgdGhlIGZpcnN0IGFyZyBhIHNwZWNpYWwgdmVyc2lvbiBxdWFsaWZpZXI/Ci0gICAgICAgICAqLwogICAgICAgICB2YWxpZCA9ICgqcCA9PSBMJy0nKSAmJiB2YWxpZGF0ZV92ZXJzaW9uKCZwWzFdKTsKICAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICAgICBpcCA9IGxvY2F0ZV9weXRob24oJnBbMV0pOwpAQCAtMTMyNiw3ICsxNDQ4LDE5IEBACiAgICAgICAgICAgICBjb21tYW5kICs9IHdjc2xlbihwKTsKICAgICAgICAgICAgIGNvbW1hbmQgPSBza2lwX3doaXRlc3BhY2UoY29tbWFuZCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCphcmd2W2luZGV4XSAhPSBMJy0nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA8IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgICAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoJmFyZ3ZbaW5kZXhdLCBjb21tYW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICBpcCA9IGxvY2F0ZV9weXRob24oTCIiKTsKICAgICAgICAgaWYgKGlwID09IE5VTEwpCkBAIC0xMzQ0LDcgKzE0NzgsNyBAQAogICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIlwKIFB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93cyBWZXJzaW9uICVzXG5cbiIsIHZlcnNpb25fdGV4dCk7CiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAotdXNhZ2U6ICVzIFsgbGF1bmNoZXItYXJndW1lbnRzIF0gc2NyaXB0IFsgc2NyaXB0LWFyZ3VtZW50cyBdXG5cbiIsIGFyZ3ZbMF0pOwordXNhZ2U6ICVzIFsgbGF1bmNoZXItYXJndW1lbnRzIF0gWyBweXRob24tYXJndW1lbnRzIF0gc2NyaXB0IFsgc2NyaXB0LWFyZ3VtZW50cyBdXG5cbiIsIGFyZ3ZbMF0pOwogICAgICAgICAgICAgZnB1dHdzKEwiXAogTGF1bmNoZXIgYXJndW1lbnRzOlxuXG5cCiAtMiAgICAgOiBMYXVuY2ggdGhlIGxhdGVzdCBQeXRob24gMi54IHZlcnNpb25cblwKZGlmZiAtLWdpdCBhL1BDL21zdmNydG1vZHVsZS5jIGIvUEMvbXN2Y3J0bW9kdWxlLmMKaW5kZXggMDRkMjA4OC4uMThkZWM2ZCAxMDA3NTUKLS0tIGEvUEMvbXN2Y3J0bW9kdWxlLmMKKysrIGIvUEMvbXN2Y3J0bW9kdWxlLmMKQEAgLTExMywxMSArMTEzLDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X29wZW5fb3NmaGFuZGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBsb25nIGhhbmRsZTsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CiAgICAgaW50IGZsYWdzOwogICAgIGludCBmZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGk6b3Blbl9vc2ZoYW5kbGUiLCAmaGFuZGxlLCAmZmxhZ3MpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOm9wZW5fb3NmaGFuZGxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmZCA9IF9vcGVuX29zZmhhbmRsZShoYW5kbGUsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9NYWtlZmlsZSBiL1BDL29zMmVteC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAwNjEwZS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2NzIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotIwotIyBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiAyLjYgZm9yIE9TLzIgdXNpbmcgR0NDL0VNWAotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQW5kcmV3IFphYm9sb3RueSwgPGJpdEBlbHRlY2gucnU+IGZvciBQeXRob24gMS41LjIKLSMgTW9kaWZpZWQgYnkgQW5kcmV3IE1hY0ludHlyZSwgPGFuZHltYWNAcGN1Zy5vcmcuYXU+IGZvciBQeXRob24gMi42Ci0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggW1BdR0NDL0VNWCBjb21waWxlciBhbnkKLSMgdmVyc2lvbiBhbmQgR05VIE1ha2UuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24yNi5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjI2LkRMTCBpcyBuZWVkZWQuIFdlIGFsc28gYnVpbGQgcHl0aG9uX3MuYSBzdGF0aWMgbGlicmFyeSAod2hpY2gKLSMgY2FuIGJlIGNvbnZlcnRlZCBpbnRvIE9NRiAoLmxpYikgZm9ybWF0IHVzaW5nIGVteG9tZiB0b29sKSBhbmQgYm90aAotIyBweXRob24uYSBhbmQgcHl0aG9uLmxpYiBpbXBvcnQgbGlicmFyaWVzLiAgVGhlbiB0aGUgb3B0aW9uYWwgCi0jIGV4dGVuc2lvbiBtb2R1bGVzLCB3aGljaCBhcmUgT1MvMiBETExzIHJlbmFtZWQgd2l0aCBhIFBZRCBmaWxlIGV4dGVuc2lvbi4KLSMKLSMgUmVjb21tZW5kZWQgYnVpbGQgb3JkZXI6Ci0jICAgbWFrZSBkZXBlbmQJCShpZiB5b3UgaGF2ZSBtYWtlZGVwKQotIyAgIG1ha2UgYWxsCi0jICAgbWFrZSBseAkJKGlmIHlvdSBoYXZlIGx4bGl0ZSkKLSMgICBtYWtlIHRlc3QJCShvcHRpb25hbCkKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0KLQotIyA9PT0gQ29tcGlsYXRpb24gbW9kZTogZGVidWcgb3IgcmVsZWFzZSA9PT0KLU1PREU9CQlvcHRpbWl6ZQotI01PREU9CQlkZWJ1ZwotIyA9PT0gQXNzZXJ0KCkgZW5hYmxlZCA9PT0KLUFTU0VSVElPTlM9bm8KLSNBU1NFUlRJT05TPXllcwotIyA9PT0gSGFyZC13aXJlIGluc3RhbGxhdGlvbiBsb2NhdGlvbiA9PT0KLUZJWEVEX1BZSE9NRT1ubwotI0ZJWEVEX1BZSE9NRT15ZXMKLQotIyA9PT0gT3B0aW9uYWwgbW9kdWxlcyA9PT0KLSMgRG8geW91IGhhdmUgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1pMSUI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBVbHRyYSBGYXN0IENyeXB0IChVRkMpIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9VRkM9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBUY2wvVGsgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1RDTFRLPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR05VIHJlYWRsaW5lIGxpYnJhcnkgaW5zdGFsbGVkPwotIyBOT1RFOiBJJ20gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIEthaSBVd2UgUm9tbWVsJ3MgcG9ydCB0aGF0IAotIyAgICAgICAtIGlzIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZAotIyAgICAgICAtIGlzIGxpbmtlZCBzdGF0aWNhbGx5Ci0jICAgICAgIEkgaGF2ZSBoYWQgbm8gc3VjY2VzcyB0cnlpbmcgdG8gdXNlIGEgRExMIHZlcnNpb24sIGV2ZW4gd2hlbgotIyAgICAgICBjb21waWxlZCB3aXRoIG11bHRpdGhyZWFkaW5nIGVuYWJsZWQuCi1IQVZFX0dSRUFETElORT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJTRCBEQiBsaWJyYXJ5ICh2MS44NSkgYXMgaW5jbHVkZWQgaW4gdGhlIEVNWEJTRCBwYWNrYWdlPwotIyBOT1RFOiB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgcmVjb21waWxlZCB3aXRoIGEgc3RydWN0dXJlIG1lbWJlcgotIyAgICAgICByZW5hbWVkIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIG11bHRpdGhyZWFkZWQgZXJybm8gc3VwcG9ydAotIyAgICAgICAodGhlcmUgaXMgYSBzdHJ1Y3R1cmUgbWVtYmVyIGNhbGxlZCBlcnJubywgdXNlZCBmb3Igc2hhZG93aW5nIHRoZQotIyAgICAgICByZWFsIGVycm5vLCB3aGljaCBjb25mbGljdHMgd2l0aCB0aGUgZXJybm8gcmVkZWZpbml0aW9uIG9mIC1abXQpCi1IQVZFX0JTRERCPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgbmN1cnNlcyBsaWJyYXJ5IGluc3RhbGxlZD8gRU1YJ3MgQlNEIGN1cnNlcyBhcmVuJ3QgZW5vdWdoISAKLUhBVkVfTkNVUlNFUz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEdEQk0gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX0dEQk09CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBCWjIgY29tcHJlc3Npb24gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX0JaMj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIE9wZW5TU0wgbGlicmFyaWVzIGluc3RhbGxlZAotSEFWRV9PUEVOU1NMPQlubwotCi0jID09PSBpbnN0YWxsIGxvY2F0aW9ucyA9PT0KLSMgZGVmYXVsdCB2YWx1ZSBvZiBQWVRIT05IT01FCi1MSUJfRElSPUM6L1B5dGhvbjI2Ci0jIGRlZmF1bHQgaXMgdG8gaGF2ZSBldmVyeXRoaW5nIGluIG9yIHVuZGVyIFBZVEhPTkhPTUUKLUVYRV9ESVI9JChMSUJfRElSKQotRExMX0RJUj0kKEVYRV9ESVIpCi0KLQotIyA9PT0gVGhlIFRvb2xzID09PQotQ0M9CQlnY2MKLUNGTEFHUz0JCS1abXQgLVdhbGwgJChJTkNMVURFKQotQ0ZMQUdTLkxJQj0JJChDRkxBR1MpCi1MRD0JCWdjYwotTERGTEFHUz0JLVptdCAtWmNydGRsbCAtTC4gLWxnY2MKLUxERkxBR1MuRVhFPQkkKExERkxBR1MpCi1MREZMQUdTLkRMTD0JJChMREZMQUdTKSAtWmRsbAotTERGTEFHUy5BPQkkKExERkxBR1MpICQoTElCUykKLUFSRkxBR1M9CWNycwotSU1QTElCPQkJZW14aW1wCi1FWFBMSUI9CQllbXhleHAKLUVYRU9QVD0JCWVteGJpbmQKLVBZX0RFRj0JCS1EUHlfQlVJTERfQ09SRQotCi0KLSMgYWRqdXN0IEMgY29tcGlsZXIgc2V0dGluZ3MgYmFzZWQgb24gYnVpbGQgb3B0aW9ucwotaWZlcSAoJChNT0RFKSxkZWJ1ZykKLSAgQ0ZMQUdTKz0JLWcgLU8KLSAgTERGTEFHUys9CS1nCi1lbHNlCi0gIENGTEFHUys9CS1zIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlCi0gIExERkxBR1MrPQktcwotZW5kaWYKLUNGTEFHUys9CSQoUFlfREVGKQotaWZlcSAoJChBU1NFUlRJT05TKSxubykKLSAgQ0ZMQUdTKz0JLUROREVCVUcKLWVuZGlmCi1pZmVxICgkKEZJWEVEX1BZSE9NRSkseWVzKQotICBDRkxBR1MrPQktRFBSRUZJWD0kKERRVU9URSkkKExJQl9ESVIpJChEUVVPVEUpCi1lbmRpZgotCi0jIFdlJ3JlIHVzaW5nIHRoZSBPTUYgZm9ybWF0IHNpbmNlIEVNWCdzIGxkIGhhcyBhIG9ic2N1cmUgYnVnCi0jIGJlY2F1c2Ugb2Ygd2hpY2ggaXQgc29tZXRpbWVzIGZhaWxzIHRvIGJ1aWxkIHJlbG9jYXRpb25zCi0jIGluIC5kYXRhIHNlZ21lbnQgdGhhdCBwb2ludCB0byBhbm90aGVyIC5kYXRhIGxvY2F0aW9ucwotIyAoZXhjZXB0IGZvciB0aGUgZmluYWwgbGlua2luZyBpZiB0aGUgLkVYRXMpCi1PTUY9CQl5ZXMKLQotIyBpZiBmb3JrKCkgc3VwcG9ydCBpcyByZXF1aXJlZCwgdGhlIG1haW4gZXhlY3V0YWJsZSBtdXN0IGJlIGxpbmtlZCB3aXRoIGxkCi1FWEVPTUY9CQlubwotCi0jIEZpbGUgZXh0ZW5zaW9ucwotTU9EVUxFLkVYVD0JLnB5ZAotTU9ETElCLkVYVD0JLmRsbAotaWZlcSAoJChPTUYpLHllcykKLSAgTz0JCS5vYmoKLSAgQT0JCS5saWIKLSAgQVI9CQllbXhvbWZhcgotICBDRkxBR1MrPQktWm9tZgotICBMREZMQUdTKz0JLVpvbWYKLSAgaWZlcSAoJChNT0RFKSxkZWJ1ZykKLSAgICBBUkZMQUdTPQktcDY0IGNycwotICBlbHNlCi0gICAgQVJGTEFHUz0JLXAzMiBjcnMKLSAgZW5kaWYKLWVsc2UKLSAgTz0JCS5vCi0gIEE9CQkuYQotICBBUj0JCWFyCi1lbmRpZgotCi0KLSMgPT09IEJ1aWxkIHRpbWUgcmVzb3VyY2Ugc2V0dGluZ3MgPT09Ci0KLSMgRU1YJ3MgZGVmYXVsdCBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIGlzIDQwLCB3aGljaCBpcyBzb21ldGltZXMgaW5zdWZmaWNpZW50Ci0jICh0aGUgdGVtcGZpbGUgcmVncmVzc2lvbiB0ZXN0IHRyaWVzIHRvIGNyZWF0ZSAxMDAgdGVtcG9yYXJ5IGZpbGVzKQotTkZJTEVTPTI1MAotCi0jIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIGNoaWxkIHRocmVhZHMgaXMgNjRrIGJ5dGVzLCB3aGljaCBpcwotIyBpbnN1ZmZpY2llbnQgZm9yIHNvbWUgYXBwbGljYXRpb25zIHdoaWNoIGRvIGEgbG90IG9mIHdvcmsgaW4gdGhyZWFkcwotIyAoc3VjaCBhcyBab3BlLCBlc3BlY2lhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggUGxvbmUpLgotIyBOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGRpc3RpbmN0IGZyb20gdGhlIHN0YWNrIHNpemUgZm9yIHRoZSBtYWluCi0jIHRocmVhZCwgd2hpY2ggaXMgc2V0IHZpYSB0aGUgJS5kZWYgcnVsZSBiZWxvdy4KLSMgRU1YIGRvY3VtZW50cyB0aGF0IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMzI3NjggYnl0ZXM7Ci0jIGZvciBab3BlL1Bsb25lIGF0IGxlYXN0IDEyOGsgYnl0ZXMgaXMgcmVjb21tZW5kZWQuCi0jIFVuY29tbWVudCAmIGFkanVzdCB0aGUgbmV4dCBsaW5lIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHN0YWNrIHNpemU6Ci0jQ0ZMQUdTKz0JLURUSFJFQURfU1RBQ0tfU0laRT0weDIwMDAwCi0KLQotIyA9PT0gVGhlIGVudmlyb25tZW50ID09PQotCi0jIFNvdXJjZSBmaWxlIHBhdGhzCi1TUkNQQVRIPS47Li4vLi4vUHl0aG9uOy4uLy4uL1BhcnNlcjsuLi8uLi9PYmplY3RzOy4uLy4uL0luY2x1ZGU7Li4vLi4vTW9kdWxlcwotIyBQeXRob24gY29udGFpbnMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotIyBQYXJzZXIgY29udGFpbnMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyIGFuZAotIyAgIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQotIyBPYmplY3RzIGNvbnRhaW5zIFB5dGhvbiBPYmplY3QgVHlwZXMKLSMgTW9kdWxlcyBjb250YWlucyBleHRlbnNpb24gTW9kdWxlcyAoQnVpbHQtSW4gb3IgYXMgU2VwYXJhdGUgRExMcykKLQotIyBVbml4IHNoZWxscyB0ZW5kIHRvIHVzZSAiJCIgYXMgZGVsaW1pdGVyIGZvciB2YXJpYWJsZSBuYW1lcy4KLSMgVGVzdCBmb3IgdGhpcyBiZWhhdmlvdXIgYW5kIHNldCAkKEJVQ0spIHZhcmlhYmxlIGNvcnJlc3BvbmRpZ2x5IC4uLgotX19UTVBfXzo9JChzaGVsbCBlY2hvICQkJCQpCi1pZmVxICgkKF9fVE1QX18pLCQkJCQpCi0gIEJVQ0s9CQkkJAotICBCUk89CQkoCi0gIEJSQz0JCSkKLWVsc2UKLSAgQlVDSz0JCVwkJAotICBCUk89CQlcKAotICBCUkM9CQlcKQotZW5kaWYKLSMgQ29tcHV0ZSB0aGUgImRvdWJsZSBxdW90ZSIgdmFyaWFibGUKLV9fVE1QX186PSQoc2hlbGwgZWNobyAiIikKLWlmZXEgKCQoX19UTVBfXyksIiIpCi0gIERRVU9URT0JIgotZWxzZQotICBEUVVPVEU9CVwiCi1lbmRpZgotCi0jIEluY2x1ZGUgcGF0aHMKLSNJTkNMVURFPQktSSQoc3Vic3QgOywgLUksICQoU1JDUEFUSCkpCi1JTkNMVURFPQktSS4gLUkuLi8uLi9JbmNsdWRlCi0KLSMgUGF0aCB0byBzZWFyY2ggZm9yIC5jIGZpbGVzCi12cGF0aCAlLmMgLjsuLjskKFNSQ1BBVEgpCi0KLSMgVG9wIG9mIHRoZSBwYWNrYWdlIHRyZWUKLVRPUD0JCS4uLy4uLwotCi0jIERpcmVjdG9yeSBmb3Igb3V0cHV0IGZpbGVzCi1PVVRCQVNFPQlvdXQvCi1PVVQ9CQkkKE9VVEJBU0UpJChNT0RFKS8KLQotIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotTElCUz0JCS1sc29ja2V0Ci0KLSMgVXRpbGl0eSBtYWNybzogcmVwbGFjZW1lbnQgZm9yICReCi1eXj0JCSQoZmlsdGVyLW91dCAlJEEsJF4pCi0jIFVzZSAkKExeKSB0byBsaW5rIHdpdGggYWxsIGxpYnJhcmllcyBzcGVjaWZpZWQgYXMgZGVwZW5kZW5jaWVzCi1MXj0JCSQoYWRkcHJlZml4IC1sLCQoYmFzZW5hbWUgJChub3RkaXIgJChmaWx0ZXIgJSRBLCQrKSkpKQotCi0jIEJ1aWxkIHJ1bGVzCi0kKE9VVCklJE86ICUuYwotCSQoQ0MpICQoQ0ZMQUdTLkxJQikgLWMgJDwgLW8gJEAKLQotJS5hOgotCSQoTEQpICQoTERGTEFHUy5BKSAtbyAkQCAkKF5eKSAkKExeKQotCi0lLmRsbDoKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLSUucHlkOiAkKE9VVCklbW9kdWxlJE8gJChPVVQpJV9tLmRlZgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoUFlUSE9OLklNUExJQikgJChMSUJTKQotCi0lLmV4ZToKLQkkKExEKSAkKExERkxBR1MuRVhFKSAtbyAkQCAkKF5eKSAkKExeKQotCi0lX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotICAgICAgICBpZmVxICgkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpLCkKLQkgIEBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKVB5dGhvbiBzdGFuZGFyZCBtb2R1bGUgJChub3RkaXIgJCopJChEUVVPVEUpID4+JEAKLSAgICAgICAgZWxzZQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpJChERVNDUklQVElPTi4kKG5vdGRpciAkKikkKE1PRFVMRS5FWFQpKSQoRFFVT1RFKSA+PiRACi0gICAgICAgIGVuZGlmCi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIEVYUE9SVFMgPj4kQAotCUBlY2hvIAlpbml0JChub3RkaXIgJCopID4+JEAKLQotJS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIE5BTUUgJChub3RkaXIgJCopICQoRVhFVFlQRS4kKG5vdGRpciAkKikuZXhlKSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKS5leGUpJChEUVVPVEUpID4+JEAKLQlAZWNobyBTVEFDS1NJWkUgMjA5NzE1MiA+PiRACi0KLSMgT3V0cHV0IGZpbGUgbmFtZXMKLVBZVEhPTl9WRVI9CTIuNgotUFlUSE9OX0xJQj0JcHl0aG9uMzMKLVBZVEhPTi5MSUI9CSQoUFlUSE9OX0xJQilfcyRBCi1QWVRIT04uSU1QTElCPQkkKFBZVEhPTl9MSUIpJEEKLWlmZXEgKCQoRVhFT01GKSx5ZXMpCi0gIFBZVEhPTi5FWEVJTVA9CSQoUFlUSE9OLklNUExJQikKLSAgTERNT0RFLkVYRT0JCS1ab21mCi1lbHNlCi0gIFBZVEhPTi5FWEVJTVA9CSQoUFlUSE9OX0xJQikuYQotICBMRE1PREUuRVhFID0gCi1lbmRpZgotUFlUSE9OLkRMTD0JJChQWVRIT05fTElCKS5kbGwKLVBZVEhPTi5ERUY9CSQoUFlUSE9OX0xJQikuZGVmCi1QWVRIT04uRVhFPQlweXRob24uZXhlCi1QWVRIT05QTS5FWEU9CXB5dGhvbnBtLmV4ZQotUEdFTi5FWEU9CXBnZW4uZXhlCi1MSUJSQVJZPQkkKFBZVEhPTi5MSUIpCi1MRF9MSUJSQVJZPQkkKFBZVEhPTi5JTVBMSUIpCi0KLSMgQWRkaXRpb25hbCBleGVjdXRhYmxlIHBhcmFtZXRlcnMKLUVYRVRZUEUuJChQWVRIT04uRVhFKT0JCVdJTkRPV0NPTVBBVAotRVhFVFlQRS4kKFBZVEhPTlBNLkVYRSk9CVdJTkRPV0FQSQotRVhFVFlQRS4kKFBHRU4uRVhFKT0JCVdJTkRPV0NPTVBBVAotREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKT0JUHl0aG9uIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciBmb3IgT1MvMgotREVTQ1JJUFRJT04uJChQWVRIT05QTS5FWEUpPQkkKERFU0NSSVBUSU9OLiQoUFlUSE9OLkVYRSkpCi1ERVNDUklQVElPTi4kKFBHRU4uRVhFKT0JUHl0aG9uIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSBwYXJzZXIgZ2VuZXJhdG9yIGZvciBPUy8yCi0KLSMgTW9kdWxlIGRlc2NyaXB0aW9ucwotREVTQ1JJUFRJT04uemxpYiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBJbmZvWmlwIGNvbXByZXNzaW9uIGxpYnJhcnkKLURFU0NSSVBUSU9OLmNyeXB0JChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGltcGxlbWVudGluZyB0aGUgY3J5cHQkKEJSTykkKEJSQykgZnVuY3Rpb24KLURFU0NSSVBUSU9OLl90a2ludGVyJChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBUY2wvVGsgRW52aXJvbm1lbnQKLURFU0NSSVBUSU9OLnJlYWRsaW5lJChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBHTlUgUmVhZExpbmUgbGlicmFyeQotREVTQ1JJUFRJT04uX2N1cnNlcyQoTU9ETElCLkVYVCk9CVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3MgdG8gbmN1cnNlcyBsaWJyYXJ5Ci1ERVNDUklQVElPTi5weWV4cGF0JChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBleHBhdCBsaWJyYXJ5Ci1ERVNDUklQVElPTi5iejIkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2Vzc2luZyB0aGUgYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkKLQotIyBTb3VyY2UgZmlsZXMKLVNSQy5PUzJFTVg9CWNvbmZpZy5jIGRsZmNuLmMgZ2V0cGF0aHAuYwotU1JDLk1BSU49CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlNb2R1bGVzL2dldGJ1aWxkaW5mby5jIFwKLQkJTW9kdWxlcy9tYWluLmMpCi1TUkMuTU9EVUxFUz0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2Ntb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgXAotCQlNb2R1bGVzL3Bvc2l4bW9kdWxlLmMgXAotCQlNb2R1bGVzL190aHJlYWRtb2R1bGUuYyBcCi0JCU1vZHVsZXMvYXJyYXltb2R1bGUuYyBcCi0JCU1vZHVsZXMvYmluYXNjaWkuYyBcCi0JCU1vZHVsZXMvY21hdGhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2NvZGVjc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9jb2xsZWN0aW9uc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY3N2LmMgXAotCQlNb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL2Vycm5vbW9kdWxlLmMgXAotCQlNb2R1bGVzL2ZjbnRsbW9kdWxlLmMgXAotCQlNb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2hlYXBxbW9kdWxlLmMgXAotCQlNb2R1bGVzL2ltYWdlb3AuYyBcCi0JCU1vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgXAotCQlNb2R1bGVzL19sb2NhbGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9vcGVyYXRvci5jIFwKLQkJTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3NyZS5jIFwKLQkJTW9kdWxlcy9fc3RydWN0LmMgXAotCQlNb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMgXAotCQlNb2R1bGVzL3Rlcm1pb3MuYyBcCi0JCU1vZHVsZXMvdGltZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fd2Vha3JlZi5jIFwKLQkJTW9kdWxlcy94eHN1YnR5cGUuYyBcCi0JCU1vZHVsZXMvemlwaW1wb3J0LmMpCi1TUkMuUEFSU0UxPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUGFyc2VyL2FjY2VsZXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyMS5jIFwKLQkJUGFyc2VyL2xpc3Rub2RlLmMgXAotCQlQYXJzZXIvbm9kZS5jIFwKLQkJUGFyc2VyL3BhcnNlci5jIFwKLQkJUGFyc2VyL3BhcnNldG9rLmMgXAotCQlQYXJzZXIvYml0c2V0LmMgXAotCQlQYXJzZXIvbWV0YWdyYW1tYXIuYykKLVNSQy5QQVJTRTI9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyLmMgXAotCQlQYXJzZXIvbXlyZWFkbGluZS5jKQotU1JDLlBBUlNFUj0JJChTUkMuUEFSU0UxKSBcCi0JCSQoU1JDLlBBUlNFMikKLVNSQy5QWVRIT049CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vUHl0aG9uLWFzdC5jIFwKLQkJUHl0aG9uL2FzZGwuYyBcCi0JCVB5dGhvbi9hc3QuYyBcCi0JCVB5dGhvbi9ibHRpbm1vZHVsZS5jIFwKLQkJUHl0aG9uL2V4Y2VwdGlvbnMuYyBcCi0JCVB5dGhvbi9jZXZhbC5jIFwKLQkJUHl0aG9uL2NvbXBpbGUuYyBcCi0JCVB5dGhvbi9jb2RlY3MuYyBcCi0JCVB5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLmMgXAotCQlQeXRob24vZXJyb3JzLmMgXAotCQlQeXRob24vZnJvemVuLmMgXAotCQlQeXRob24vZnJvemVubWFpbi5jIFwKLQkJUHl0aG9uL2Z1dHVyZS5jIFwKLQkJUHl0aG9uL2dldGFyZ3MuYyBcCi0JCVB5dGhvbi9nZXRjb21waWxlci5jIFwKLQkJUHl0aG9uL2dldGNvcHlyaWdodC5jIFwKLQkJUHl0aG9uL2dldHBsYXRmb3JtLmMgXAotCQlQeXRob24vZ2V0dmVyc2lvbi5jIFwKLQkJUHl0aG9uL2dyYW1pbml0LmMgXAotCQlQeXRob24vaW1wb3J0LmMgXAotCQlQeXRob24vaW1wb3J0ZGwuYyBcCi0JCVB5dGhvbi9tYXJzaGFsLmMgXAotCQlQeXRob24vbW9kc3VwcG9ydC5jIFwKLQkJUHl0aG9uL215c25wcmludGYuYyBcCi0JCVB5dGhvbi9teXN0cnRvdWwuYyBcCi0JCVB5dGhvbi9weWFyZW5hLmMgXAotCQlQeXRob24vcHljdHlwZS5jIFwKLQkJUHl0aG9uL3B5ZnBlLmMgXAotCQlQeXRob24vcHlzdGF0ZS5jIFwKLQkJUHl0aG9uL3B5c3RydG9kLmMgXAotCQlQeXRob24vcHl0aG9ucnVuLmMgXAotCQlQeXRob24vc3RydWN0bWVtYmVyLmMgXAotCQlQeXRob24vc3ltdGFibGUuYyBcCi0JCVB5dGhvbi9zeXNtb2R1bGUuYyBcCi0JCVB5dGhvbi90cmFjZWJhY2suYyBcCi0JCVB5dGhvbi9nZXRvcHQuYyBcCi0JCVB5dGhvbi9keW5sb2FkX3NobGliLmMgXAotCQlQeXRob24vdGhyZWFkLmMpCi1TUkMuT0JKRUNUPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9hYnN0cmFjdC5jIFwKLQkJT2JqZWN0cy9ib29sb2JqZWN0LmMgXAotCQlPYmplY3RzL2NlbGxvYmplY3QuYyBcCi0JCU9iamVjdHMvY2xhc3NvYmplY3QuYyBcCi0JCU9iamVjdHMvY29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2Rlb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvbXBsZXhvYmplY3QuYyBcCi0JCU9iamVjdHMvZGVzY3JvYmplY3QuYyBcCi0JCU9iamVjdHMvZGljdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9lbnVtb2JqZWN0LmMgXAotCQlPYmplY3RzL2ZpbGVvYmplY3QuYyBcCi0JCU9iamVjdHMvZmxvYXRvYmplY3QuYyBcCi0JCU9iamVjdHMvZnJhbWVvYmplY3QuYyBcCi0JCU9iamVjdHMvZnVuY29iamVjdC5jIFwKLQkJT2JqZWN0cy9nZW5vYmplY3QuYyBcCi0JCU9iamVjdHMvaXRlcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9saXN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2xvbmdvYmplY3QuYyBcCi0JCU9iamVjdHMvbWV0aG9kb2JqZWN0LmMgXAotCQlPYmplY3RzL21vZHVsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9vYmplY3QuYyBcCi0JCU9iamVjdHMvb2JtYWxsb2MuYyBcCi0JCU9iamVjdHMvcmFuZ2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc2V0b2JqZWN0LmMgXAotCQlPYmplY3RzL3NsaWNlb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cmluZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9zdHJ1Y3RzZXEuYyBcCi0JCU9iamVjdHMvdHVwbGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdHlwZW9iamVjdC5jIFwKLQkJT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVjdHlwZS5jIFwKLQkJT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMpCi0KLVNSQy5MSUI9CSQoU1JDLk9TMkVNWCkgXAotCQkkKFNSQy5NQUlOKSBcCi0JCSQoU1JDLlBBUlNFUikgXAotCQkkKFNSQy5PQkpFQ1QpIFwKLQkJJChTUkMuUFlUSE9OKSBcCi0JCSQoU1JDLk1PRFVMRVMpCi1PQkouTElCPQkkKGFkZHByZWZpeCAkKE9VVCksJChub3RkaXIgJChTUkMuTElCOi5jPSRPKSkpCi0KLVNSQy5QR0VOPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU9iamVjdHMvb2JtYWxsb2MuYykgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUHl0aG9uL215c25wcmludGYuYykgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUGFyc2VyL3Rva2VuaXplcl9wZ2VuLmMgXAotCQlQYXJzZXIvcGdlbm1haW4uYyBcCi0JCVBhcnNlci9wZ2VuLmMgXAotCQlQYXJzZXIvcHJpbnRncmFtbWFyLmMgXAotCQlQYXJzZXIvZ3JhbW1hci5jIFwKLQkJUGFyc2VyL2ZpcnN0c2V0cy5jKSBcCi0KLU9CSi5QR0VOPQkkKGFkZHByZWZpeCAkKE9VVCksJChub3RkaXIgJChTUkMuUEdFTjouYz0kTykpKQotCi1TUkMuRVhFPQkkKFRPUClNb2R1bGVzL3B5dGhvbi5jCi1TUkMuUE1FWEU9CXB5dGhvbnBtLmMKLQotIyBQeXRob24gbW9kdWxlcyB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQgdGhhdDoKLSMgICAxKSBoYXZlIG9ubHkgc2luZ2xlIHNvdXJjZSBmaWxlIGFuZCByZXF1aXJlIG5vIGV4dHJhIGxpYnMKLSMgICAyKSB1c2UgdGhlIHN0YW5kYXJkIG1vZHVsZSBuYW1pbmcgY29udmVudGlvbgotIyAgICAgICh0aGUgJ21vZHVsZScgaW4gPz8/Pz9tb2R1bGUuYyBpcyBhc3N1bWVkKQotIyAtIHRoZXNlIGNhbiBiZSBidWlsdCB3aXRoIGltcGxpY2l0IHJ1bGVzCi1FQVNZRVhUTU9EVUxFUz0JZnBlY3RsIFwKLQkJZnBldGVzdCBcCi0JCXBhcnNlciBcCi0JCXB3ZCBcCi0JCXNlbGVjdCAKLQotIyBQeXRob24gbW9kdWxlcyB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQgdGhhdCBuZWVkIGV4cGxpY2l0IGJ1aWxkIHJ1bGVzCi0jICAoZWl0aGVyIG11bHRpcGxlIHNvdXJjZSBmaWxlcyBhbmQvb3Igbm9uLXN0YW5kYXJkIG1vZHVsZSBuYW1pbmcpCi0jICAoTk9URTogdXNlIHNob3J0ZW5lZCBuYW1lcyBmb3IgbW9kdWxlcyBhZmZlY3RlZCBieSA4IGNoYXIgbmFtZSBsaW1pdCkKLUhBUkRFWFRNT0RVTEVTPQlfc29ja2V0IFwKLQkJX3Rlc3RjYXAgXAotCQl1bmljb2RlZAotCi0jIFB5dGhvbiBtb2R1bGVzIHRoYXQgYXJlIHVzZWQgYXMgbGlicmFyaWVzIGFuZCB0aGVyZWZvcmUgbXVzdCB1c2UKLSMgYSAuRExMIGV4dGVuc2lvbgotTElCRVhUTU9EVUxFUz0KLQotIyBQeXRob24gZXh0ZXJuYWwgKCQoTU9EVUxFLkVYVCkpIG1vZHVsZXMgLSBjYW4gYmUgRUFTWSBvciBIQVJECi1pZmVxICgkKEhBVkVfWkxJQikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CXpsaWIKLWVuZGlmCi1pZmVxICgkKEhBVkVfVUZDKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JY3J5cHQKLWVuZGlmCi1pZmVxICgkKEhBVkVfVENMVEspLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfdGtpbnRlcgotICBDRkxBR1MrPQkJLURIQVNfRElSRU5UIC1JL1RjbFRrODAvaW5jbHVkZQotICBUS19MSUJTKz0JCS1ML1RjbFRrODAvbGliIC1sdGNsODAgLWx0azgwCi1lbmRpZgotaWZlcSAoJChIQVZFX0dSRUFETElORSkseWVzKQotICBIQVJERVhUTU9EVUxFUys9CXJlYWRsaW5lCi1lbmRpZgotaWZlcSAoJChIQVZFX05DVVJTRVMpLHllcykKLSAgTElCRVhUTU9EVUxFUys9CV9jdXJzZXMKLSAgSEFSREVYVE1PRFVMRVMrPQlfY3Vyc2VzXwotZW5kaWYKLWlmZXEgKCQoSEFWRV9HREJNKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX2dkYm0gX2RibQotZW5kaWYKLWlmZXEgKCQoSEFWRV9CWjIpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQliejIKLWVuZGlmCi1pZmVxICgkKEhBVkVfT1BFTlNTTCkseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV9zc2wKLWVuZGlmCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggdGhlIFB5dGhvbiBzb3VyY2UKLUhBUkRFWFRNT0RVTEVTKz0JcHlleHBhdAotRVhQQVQuSU5DPQktSS4uLy4uL01vZHVsZXMvZXhwYXQKLUVYUEFULkRFRj0JLURIQVZFX0VYUEFUX0ggLURYTUxfTlM9MSAtRFhNTF9EVEQ9MSAtRFhNTF9CWVRFX09SREVSPTEyIFwKLQkJLURYTUxfQ09OVEVOVF9CWVRFUz0xMDI0IC1ESEFWRV9NRU1NT1ZFPTEgLURIQVZFX0JDT1BZPTEKLUVYUEFULlNSQz0JJChhZGRwcmVmaXggLi4vLi4vTW9kdWxlcy9leHBhdC8sIFwKLQkJeG1scGFyc2UuYyBcCi0JCXhtbHJvbGUuYyBcCi0JCXhtbHRvay5jKQotCi0jIGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlcwotRVhURVJORExMUz0JJChhZGRzdWZmaXggJChNT0RVTEUuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKEVBU1lFWFRNT0RVTEVTKSkpCi1FWFRFUk5ETExTKz0JJChhZGRzdWZmaXggJChNT0RVTEUuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKEhBUkRFWFRNT0RVTEVTKSkpCi1FWFRFUk5ETExTKz0JJChhZGRzdWZmaXggJChNT0RMSUIuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKExJQkVYVE1PRFVMRVMpKSkKLQotIyBUYXJnZXRzCi1hbGw6ICAkKE9VVCkgJChQWVRIT04uTElCKSAkKFBZVEhPTi5ERUYpICQoUFlUSE9OLklNUExJQikgJChQWVRIT04uRExMKSBcCi0JcHl0aG9uX25vbmNvcmUKLQotcHl0aG9uX25vbmNvcmU6Ci0JbWFrZSBQWV9ERUY9ICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpICQoRVhURVJORExMUykKLQotY2xlYW46Ci0Jcm0gLWYgJChPVVQpKgotCXJtIC1mICQoUFlUSE9OLkxJQikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5FWEVJTVApICQoUFlUSE9OLkRMTCkgXAotCSAgJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgKiQoTU9EVUxFLkVYVCkgKi5kbGwKLQlmaW5kIC4uLy4uL0xpYiAtbmFtZSAiKi5weVtjb10iIC1leGVjIHJtIHt9ICI7IgotCi1seDoKLQlAZWNobyBQYWNraW5nIGV2ZXJ5dGhpbmcgd2l0aCBseExpdGUuLi4KLQlseGxpdGUgJChQWVRIT04uRExMKSAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKQotCi1kZXBlbmQ6ICQoT1VUQkFTRSkKLQltYWtlZGVwIC1mICQoT1VUQkFTRSlweXRob24uZGVwIC1vICQoQlVDSylPIC1wICQoQlVDSylcKE9VVFwpIFwKLQkgIC1yIC1jICQoSU5DTFVERSkgJChTUkMuTElCKSAkKFNSQy5QR0VOKQotCi0kKE9VVCk6ICQoT1VUQkFTRSkKLQotJChPVVQpICQoT1VUQkFTRSk6Ci0JbWtkaXIuZXhlICRACi0KLSQoUFlUSE9OLkxJQik6ICQoT0JKLkxJQikKLQlybS5leGUgLWYgJEAKLQkkKEFSKSAkKEFSRkxBR1MpICRAICReCi0KLSMgdGhlIFB5dGhvbiBjb3JlIERMTCAuZGVmIGZpbGUgbmVlZHMgdG8gaGF2ZSBhIG51bWJlciBvZiBub24tc3RhdGljCi0jIHN5bWJvbHMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUgUHl0aG9uIEMgQVBJIHJlbW92ZWQgKGNvbW1lbnRlZCBvdXQpCi0jIGZyb20gdGhlIERMTCBleHBvcnQgbGlzdC4KLSQoUFlUSE9OLkRFRik6ICQoUFlUSE9OLkxJQikKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKFBZVEhPTl9MSUIpIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uICQoUFlUSE9OX1ZFUikgQ29yZSBETEwkKERRVU9URSkgPj4kQAotCUBlY2hvIFBST1RNT0RFID4+JEAKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JJChFWFBMSUIpIC11ICQoUFlUSE9OLkxJQikgfFwKLQkgc2VkIC1lICIvXiAgLmluaXQuKi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5wY3JlXy4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmFycmF5X21ldGhvZHMvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZmFzdF9zYXZlX2xlYXZlL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsb3Blbi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbHN5bS9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbGNsb3NlL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsZXJyb3Ivcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X3JlXy4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLl9QeV9NRDUuKi9zL14gLzsgLyIgPj4kQAotCi0kKFBZVEhPTi5JTVBMSUIpOiAkKFBZVEhPTi5ERUYpCi0JJChJTVBMSUIpIC1vICRAICReCi0KLSQoUFlUSE9OLkVYRUlNUCk6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRExMKTogJChPVVQpZGxsZW50cnkkTyAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikKLQotIyBFeHBsaWNpdCBtYWtlIHRhcmdldHMgZm9yIHRoZSAuRVhFcyB0byBiZSBhYmxlIHRvIHVzZSBMRCB0byBsaW5rCi0jIChzbyB0aGF0IGZvcmsoKSB3aWxsIHdvcmsgaWYgcmVxdWlyZWQpCi0KLSQoUFlUSE9OLkVYRSk6ICQoU1JDLkVYRSkgJChQWVRIT04uRVhFSU1QKSAkKE9VVClweXRob24uZGVmCi0JJChDQykgLVptdCAkKExETU9ERS5FWEUpIC1aY3J0ZGxsIC1XYWxsICQoSU5DTFVERSkgLUwuIC1sZ2NjIC1vICRAICQoU1JDLkVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbi5kZWYKLQkkKEVYRU9QVCkgLWFxICQoUFlUSE9OLkVYRSkgLWgkKE5GSUxFUykKLQotJChQWVRIT05QTS5FWEUpOiAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKE9VVClweXRob25wbS5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuUE1FWEUpICQoUFlUSE9OLkVYRUlNUCkgJChMSUJTKSAkKE9VVClweXRob25wbS5kZWYKLQkkKEVYRU9QVCkgLWFxICQoUFlUSE9OUE0uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBHRU4uRVhFKTogJChPQkouUEdFTikgJChPVVQpcGdlbi5kZWYKLQotIyBFeHBsaWNpdCBidWlsZGluZyBpbnN0cnVjdGlvbnMgZm9yIHRob3NlIGV4dGVybmFsIG1vZHVsZXMgdGhhdCByZXF1aXJlIAotIyBhd2t3YXJkIGhhbmRsaW5nIChkdWUgZS5nLiB0byBub24tc3RkIG5hbWluZywgb3IgbXVsdGlwbGUgc291cmNlIGZpbGVzKQotIyAtIHN0YW5kYXJkIG1vZHVsZXMKLQotX3NvY2tldCQoTU9EVUxFLkVYVCk6ICQoT1VUKXNvY2tldG1vZHVsZSRPICQoT1VUKV9zb2NrZXRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotIyBfdGVzdGNhcGkgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLV90ZXN0Y2FwaSQoTU9EVUxFLkVYVCk6ICQoT1VUKV90ZXN0Y2FwaW1vZHVsZSRPICQoT1VUKV90ZXN0Y2FwaV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1fdGVzdGNhcCQoTU9EVUxFLkVYVCk6IF90ZXN0Y2FwaSQoTU9EVUxFLkVYVCkKLQljcCAkXiAkQAotCi0jIHVuaWNvZGVkYXRhIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi11bmljb2RlZGF0YSQoTU9EVUxFLkVYVCk6ICQoT1VUKXVuaWNvZGVkYXRhJE8gJChPVVQpdW5pY29kZWRhdGFfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChNT0RVTEVfTElCUykKLQotdW5pY29kZWQkKE1PRFVMRS5FWFQpOiB1bmljb2RlZGF0YSQoTU9EVUxFLkVYVCkKLQljcCAkXiAkQAotCi1jcnlwdCQoTU9EVUxFLkVYVCk6ICQoT1VUKWNyeXB0bW9kdWxlJE8gJChPVVQpY3J5cHRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pIC1sdWZjICQoTElCUykKLQotIyBUaGUgX2N1cnNlc19wYW5lbCBtb2R1bGUgcmVxdWlyZXMgYSBjb3VwbGUgb2YgbmN1cnNlcyBsaWJyYXJ5IGVudHJ5Ci0jIHBvaW50cywgd2hpY2ggYXJlIGJlc3QgZXhwb3NlZCBhcyBleHBvcnRzIGZyb20gdGhlIF9jdXJzZXMgbW9kdWxlIERMTAotJChPVVQpX2N1cnNlc19tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9ETElCLkVYVCkpJChEUVVPVEUpID4+JEAKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXRfY3Vyc2VzID4+JEAKLQlAZWNobyAJd25vdXRyZWZyZXNoID4+JEAKLQlAZWNobyAJX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCWlzX2xpbmV0b3VjaGVkID4+JEAKLQlAZWNobyAJbXZ3aW4gPj4kQAotCUBlY2hvIAlzdGRzY3IgPj4kQAotCUBlY2hvIAl3dG91Y2hsbiA+PiRACi0KLSQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBJTVBPUlRTID4+JEAKLQlAZWNobyAJX2N1cnNlcy53bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfY3Vyc2VzLl9uY19wYW5lbGhvb2sgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLmlzX2xpbmV0b3VjaGVkID4+JEAKLQlAZWNobyAJX2N1cnNlcy5tdndpbiA+PiRACi0JQGVjaG8gCV9jdXJzZXMuc3Rkc2NyID4+JEAKLQlAZWNobyAJX2N1cnNlcy53dG91Y2hsbiA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXRfY3Vyc2VzX3BhbmVsID4+JEAKLQotX2N1cnNlcyQoTU9ETElCLkVYVCk6ICQoT1VUKV9jdXJzZXNtb2R1bGUkTyAkKE9VVClfY3Vyc2VzX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sbmN1cnNlcwotCi0jIGN1cnNlc19wYW5lbCBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX2N1cnNlc19wYW5lbCQoTU9EVUxFLkVYVCk6ICQoT1VUKV9jdXJzZXNfcGFuZWwkTyAkKE9VVClfY3Vyc2VzX3BhbmVsX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1scGFuZWwKLQotX2N1cnNlc18kKE1PRFVMRS5FWFQpOiBfY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLV9kYm0kKE1PRFVMRS5FWFQpOiAkKE9VVClfZGJtbW9kdWxlJE8gJChPVVQpZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi1fZ2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9nZGJtbW9kdWxlJE8gJChPVVQpZ2RibV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGdkYm0KLQotCi0jIEV4cGF0IGlzIG5vdyBkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgc28gdXNlIHRoZSBpbmNsdWRlZCB2ZXJzaW9uCi0kKE9VVClweWV4cGF0JE86CS4uLy4uL01vZHVsZXMvcHlleHBhdC5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scGFyc2UkTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAkKEVYUEFULkRFRikgLWMgLW8gJEAgJF4KLSQoT1VUKXhtbHJvbGUkTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1sdG9rJE86CS4uLy4uL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotcHlleHBhdCQoTU9EVUxFLkVYVCk6ICQoT1VUKXB5ZXhwYXQkTyAkKE9VVCl4bWxwYXJzZSRPICQoT1VUKXhtbHJvbGUkTyBcCi0JCSQoT1VUKXhtbHRvayRPICQoT1VUKXB5ZXhwYXRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotcmVhZGxpbmUkKE1PRFVMRS5FWFQpOiAkKE9VVClyZWFkbGluZSRPICQoT1VUKXJlYWRsaW5lX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1scmVhZGxpbmUgLWxuY3Vyc2VzCi0KLSNfdGtpbnRlciQoTU9EVUxFLkVYVCk6ICQoT1VUKV90a2ludGVyJE8gJChPVVQpdGNsTm90aWZ5JE8gJChPVVQpdGthcHBpbml0JE8KLV90a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyBcCi0JCSQoT1VUKV90a2ludGVyX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpICQoVEtfTElCUykKLQotemxpYiQoTU9EVUxFLkVYVCk6ICQoT1VUKXpsaWJtb2R1bGUkTyAkKE9VVCl6bGliX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1segotCi1iejIkKE1PRFVMRS5FWFQpOiAkKE9VVCliejJtb2R1bGUkTyAkKE9VVCliejJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxiejIKLQotX3NzbCQoTU9EVUxFLkVYVCk6ICQoT1VUKV9zc2wkTyAkKE9VVClfc3NsX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sc3NsIC1sY3J5cHRvCi0KLSMgdGhlIHRlc3QgdGFyZ2V0Ci10ZXN0OgotCS1maW5kIC4uLy4uL0xpYiAtbmFtZSAiKi5weVtjb10iIC1leGVjIHJtIHt9ICI7IgotCS0uL3B5dGhvbiAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtbCAtdSAibmV0d29yayIKLQkuL3B5dGhvbiAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtbCAtdSAibmV0d29yayIKLQotLWluY2x1ZGUgJChPVVRCQVNFKXB5dGhvbi5kZXAKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9SRUFETUUub3MyZW14IGIvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxY2Y2ZGYuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKKysrIC9kZXYvbnVsbApAQCAtMSw2NjMgKzAsMCBAQAotVGhpcyBpcyBhIHBvcnQgb2YgUHl0aG9uIDIuNiB0byBPUy8yIHVzaW5nIHRoZSBFTVggZGV2ZWxvcG1lbnQgdG9vbHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotV2hhdCdzIG5ldyBzaW5jZSB0aGUgcHJldmlvdXMgcmVsZWFzZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Bbm90aGVyIGRheSwgYW5vdGhlciB2ZXJzaW9uLi4uCi0KLQotTGljZW5zZXMgYW5kIGluZm8gYWJvdXQgUHl0aG9uIGFuZCBFTVgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBsZWFzZSByZWFkIHRoZSBmaWxlIFJFQURNRS5QeXRob24tMi42IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSBmb3IgCi1pbmZvcm1hdGlvbiBhYm91dCBQeXRob24gMi42LiAgVGhpcyBmaWxlIGlzIHRoZSBSRUFETUUgZmlsZSBmcm9tIHRoZSAKLVB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiBhdmFpbGFibGUgdmlhIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gCi1hbmQgaXRzIG1pcnJvcnMuICBUaGUgZmlsZSBMSUNFTkNFLlB5dGhvbi0yLjYgaXMgdGhlIHRleHQgb2YgdGhlIExpY2VuY2UgCi1mcm9tIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLU5vdGUgdGhhdCB0aGUgRU1YIHBhY2thZ2UgdGhhdCB0aGlzIHBhY2thZ2UgZGVwZW5kcyBvbiBpcyByZWxlYXNlZCB1bmRlciAKLXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIFBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiAKLWFjY29tcGFueWluZyB0aGUgRU1YIFJ1bnRpbWUgbGlicmFyaWVzIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSAKLWltcGxpY2F0aW9ucyBvZiB0aGlzLiAgQSBjb3B5IG9mIHZlcnNpb24gMiBvZiB0aGUgR1BMIGlzIGluY2x1ZGVkIGFzIHRoZSAKLWZpbGUgQ09QWUlORy5ncGwyLgotCi1SZWFkbGluZSBhbmQgR0RCTSBhcmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UuICBJIHRoaW5rIAotRWJlcmhhcmQgTWF0dGVzJyBwb3J0aW5nIGNoYW5nZXMgdG8gQlNEIERCIHYxLjg1IGFyZSBhbHNvIEdQTCdlZCAoQlNEIERCIAotaXRzZWxmIGlzIEJTRCBMaWNlbmNlZCkuICBuY3Vyc2VzIGFuZCBleHBhdCBhcHBlYXIgdG8gYmUgY292ZXJlZCBieSBNSVQgCi1zdHlsZSBsaWNlbmNlcyAtIHBsZWFzZSByZWZlciB0byB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbnMgZm9yIG1vcmUgZGV0YWlsLiAgCi16bGliIGlzIGRpc3RyaWJ1dGFibGUgdW5kZXIgYSB2ZXJ5IGZyZWUgbGljZW5zZS4gIEdOVSBVRkMgaXMgdW5kZXIgdGhlIAotR05VIExHUEwgKHNlZSBmaWxlIENPUFlJTkcubGliKS4KLQotTXkgcGF0Y2hlcyB0byB0aGUgUHl0aG9uLTIueCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYW5kIGFueSBvdGhlciBwYWNrYWdlcyAKLXVzZWQgaW4gdGhpcyBwb3J0LCBhcmUgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi1UaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLUluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSAKLXVzZSBvZiB0aGUgc29mdHdhcmUuCi0KLUkgZG8gaG9wZSBob3dldmVyIHRoYXQgaXQgcHJvdmVzIHVzZWZ1bCB0byBzb21lb25lLgotCi0KLU90aGVyIHBvcnRzCi0tLS0tLS0tLS0tLQotCi1UaGVyZSBoYXZlIGJlZW4gcG9ydHMgb2YgcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uIHRvIE9TLzIuCi0KLVRoZSBiZXN0IGtub3duIHdvdWxkIGJlIHRoYXQgYnkgSmVmZiBSdXNoLCBtb3N0IHJlY2VudGx5IG9mIHZlcnNpb24gCi0xLjUuMi4gIEplZmYgdXNlZCBJQk0ncyBWaXN1YWwgQWdlIEMrKyAodjMpIGZvciBoaXMgcG9ydHMsIGFuZCBoaXMgCi1wYXRjaGVzIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLgotCi1BbmR5IFphYm9sb3RueSBpbXBsZW1lbnRlZCBhIHBvcnQgb2YgUHl0aG9uIHYxLjUuMiB1c2luZyB0aGUgRU1YIAotZGV2ZWxvcG1lbnQgdG9vbHMuICBIaXMgcGF0Y2hlcyBhZ2FpbnN0IHRoZSBQeXRob24gdjEuNS4yIHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBoYXZlIGJlY29tZSB0aGUgY29yZSBvZiB0aGlzIHBvcnQsIGFuZCB3aXRob3V0IGhpcyBlZmZvcnRzIAotdGhpcyBwb3J0IHdvdWxkbid0IGV4aXN0LiAgQW5keSdzIHBvcnQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYmVlbiAKLWNvbXBpbGVkIHdpdGggaGlzIHBvcnQgb2YgZ2NjIDIuOTUuMiB0byBFTVgsIHdoaWNoIEkgaGF2ZSBidXQgaGF2ZSAKLWNob3NlbiBub3QgdG8gdXNlIGZvciB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBvcnQgKHNlZSBpdGVtIDE2IAotb2YgdGhlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgc2VjdGlvbiBiZWxvdykuCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGhlc2UgZWFybGllciBwb3J0cyBzdGlsbCB1c2FibGUgYWZ0ZXIgaW5zdGFsbGluZyAKLXRoaXMgcG9ydCAtIHNlZSB0aGUgUkVBRE1FLm9zMmVteC5tdWx0aXBsZV92ZXJzaW9ucyBmaWxlLCBjb250cmlidXRlZCBieQotRHIgRGF2aWQgTWVydHosIGZvciBhIHN1Z2dlc3RlZCBhcHByb2FjaCB0byBhY2hpZXZpbmcgdGhpcy4KLQotCi1Tb2Z0d2FyZSByZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHBhY2thZ2UgcmVxdWlyZXMgdGhlIEVNWCBSdW50aW1lIHBhY2thZ2UsIGF2YWlsYWJsZSBmcm9tIHRoZSAKLUhvYmJlcyAoaHR0cDovL2hvYmJlcy5ubXN1LmVkdS8pIGFuZCBMRU8gKGh0dHA6Ly9hcmNoaXYubGVvLm9yZy8pIAotYXJjaGl2ZXMgb2YgT1MvMiBzb2Z0d2FyZS4gIEkgaGF2ZSB1c2VkIEVNWCB2ZXJzaW9uIDAuOWQgZml4MDQgaW4gCi1kZXZlbG9waW5nIHRoaXMgcG9ydC4KLQotTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHJ1bm5pbmcgT1MvMiB2NCB3aXRoIGZpeHBhY2sgMTIuCi0KLTNyZCBwYXJ0eSBzb2Z0d2FyZSB3aGljaCBoYXMgYmVlbiBsaW5rZWQgaW50byBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlczoKLS0gbmN1cnNlcyAgICAgIChzZWUgaHR0cDovL2RpY2tleS5oaXMuY29tLyBmb3IgbW9yZSBpbmZvLCB2NS4yKQotLSBHTlUgUmVhZGxpbmUgKEthaSBVd2UgUm9tbWVsJ3MgcG9ydCBhdmFpbGFibGUgZnJvbSBIb2JiZXMgb3IgTEVPLCB2Mi4xKQotLSBHTlUgR0RCTSAgICAgKEthaSBVd2UgUm9tbWVsJ3MgcG9ydCBhdmFpbGFibGUgZnJvbSBIb2JiZXMgb3IgTEVPLCB2MS43LjMpCi0tIHpsaWIgICAgICAgICAoZGVyaXZlZCBmcm9tIEh1bmctQ2hpIENodSdzIHBvcnQgb2YgdjEuMS4zLCB2MS4xLjQpCi0tIGV4cGF0ICAgICAgICAoZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24sIHYxLjk1LjYpCi0tIEdOVSBVRkMgICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIExFTywgdjIuMC40KQotCi0KLUFib3V0IHRoaXMgcG9ydAotLS0tLS0tLS0tLS0tLS0tCi0KLUkgaGF2ZSBhdHRlbXB0ZWQgdG8gbWFrZSB0aGlzIHBvcnQgYXMgY29tcGxldGUgYW5kIGZ1bmN0aW9uYWwgYXMgSSBjYW4sIAotbm90d2l0aHN0YW5kaW5nIHRoZSBpc3N1ZXMgaW4gdGhlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgc2VjdGlvbiBiZWxvdy4KLQotQ29yZSBjb21wb25lbnRzOgotCi1QeXRob24uZXhlIGlzIGxpbmtlZCBhcyBhbiBhLm91dCBleGVjdXRhYmxlLCBpZSB1c2luZyBFTVggbWV0aG9kIEUxIAotdG8gY29tcGlsZSAmIGxpbmsgdGhlIGV4ZWN1dGFibGUuICBUaGlzIGlzIHNvIHRoYXQgZm9yaygpIHdvcmtzIChzZWUgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMSkuCi0KLVB5dGhvbjI2LmRsbCBpcyBjcmVhdGVkIGFzIGEgbm9ybWFsIE9NRiBETEwsIHdpdGggYW4gT01GIGltcG9ydCAKLWxpYnJhcnkgYW5kIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUuICBUaGVyZSBpcyBhbHNvIGFuIGEub3V0ICguYSkgaW1wb3J0IAotbGlicmFyeSB0byBzdXBwb3J0IGxpbmtpbmcgdGhlIERMTCB0byBhLm91dCBleGVjdXRhYmxlcy4gIFRoZSBETEwgCi1yZXF1aXJlcyB0aGUgRU1YIHJ1bnRpbWUgRExMcy4KLQotVGhpcyBwb3J0IGhhcyBiZWVuIGJ1aWx0IHdpdGggY29tcGxldGUgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcuCi0KLU1vZHVsZXM6Ci0KLVdpdGggdGhlIGV4Y2VwdGlvbiBvZiBtb2R1bGVzIHRoYXQgaGF2ZSBhIHNpZ25pZmljYW50IGNvZGUgc2l6ZSwgb3IgYXJlIAotbm90IHJlY29tbWVuZGVkIG9yIGRlc2lyZWQgZm9yIG5vcm1hbCB1c2UsIHRoZSBzdGFuZGFyZCBtb2R1bGVzIGFyZSBub3cgCi1idWlsdCBpbnRvIHRoZSBjb3JlIERMTCByYXRoZXIgdGhhbiBjb25maWd1cmVkIGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIAotbW9kdWxlcy4gIFRoaXMgaXMgZm9yIGJvdGggcmVhc29ucyBvZiBwZXJmb3JtYW5jZSAoc3RhcnR1cCB0aW1lKSBhbmQgCi1tZW1vcnkgdXNlIChsb3RzIG9mIHNtYWxsIERMTHMgZnJhZ21lbnQgdGhlIGFkZHJlc3Mgc3BhY2UpLgotCi1JIGhhdmVuJ3QgeWV0IGNoYW5nZWQgdGhlIGJ1aWxkaW5nIG9mIFB5dGhvbidzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIAotbW9kdWxlcyBvdmVyIHRvIHVzaW5nIHRoZSBEaXN0VXRpbHMuCi0KLVNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMyBmb3Igbm90ZXMgYWJvdXQgdGhlIGZjbnRsIG1vZHVsZSwgYW5kIAotIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDEwIGZvciBub3RlcyBhYm91dCB0aGUgcHdkIGFuZCBncnAgbW9kdWxlcy4KLQotVGhpcyBwb3J0IHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIG1vZHVsZSBpbXBvcnQgc2VtYW50aWNzLCBtYXRjaGluZyAKLXRoZSBXaW5kb3dzIHJlbGVhc2UuICBUaGlzIGNhbiBiZSBkZWFjdGl2YXRlZCBieSBzZXR0aW5nIHRoZSBQWVRIT05DQVNFT0sgCi1lbnZpcm9ubWVudCB2YXJpYWJsZSAodGhlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyKSAtIHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIAotaXRlbSAxMi4KLQotT3B0aW9uYWwgbW9kdWxlczoKLQotV2hlcmUgSSd2ZSBiZWVuIGFibGUgdG8gbG9jYXRlIHRoZSByZXF1aXJlZCAzcmQgcGFydHkgcGFja2FnZXMgYWxyZWFkeSAKLXBvcnRlZCB0byBPUy8yLCBJJ3ZlIGJ1aWx0IGFuZCBpbmNsdWRlZCB0aGVtLgotCi1UaGVzZSBpbmNsdWRlIG5jdXJzZXMgKF9jdXJzZXMsIF9jdXJzZXNfcGFuZWwpLAotR05VIEdEQk0gKGdkYm0sIGRibSksIHpsaWIgKHpsaWIpLCBHTlUgUmVhZGxpbmUgKHJlYWRsaW5lKSwgYW5kIEdOVSBVRkMgCi0oY3J5cHQpLgotCi1FeHBhdCBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwsIGFuZCB0aGUgcHlleHBhdCAKLW1vZHVsZSBpcyBhbHdheXMgYnVpbHQuCi0KLUkgaGF2ZSBidWlsdCB0aGVzZSBtb2R1bGVzIHN0YXRpY2FsbHkgbGlua2VkIGFnYWluc3QgdGhlIDNyZCBwYXJ0eSAKLWxpYnJhcmllcy4gIFVuZm9ydHVuYXRlbHkgbXkgYXR0ZW1wdHMgdG8gdXNlIHRoZSBkbGwgdmVyc2lvbiBvZiBHTlUgCi1yZWFkbGluZSBoYXZlIGJlZW4gYSBkaXNtYWwgZmFpbHVyZSwgaW4gdGhhdCB3aGVuIHRoZSBkeW5hbWljYWxseSAKLWxpbmtlZCByZWFkbGluZSBtb2R1bGUgaXMgYWN0aXZlIG90aGVyIG1vZHVsZXMgaW1tZWRpYXRlbHkgcHJvdm9rZSBhIAotY29yZSBkdW1wIHdoZW4gaW1wb3J0ZWQuCi0KLU9ubHkgdGhlIEJTRCBEQiBwYWNrYWdlIChwYXJ0IG9mIHRoZSBCU0QgcGFja2FnZSBkaXN0cmlidXRlZCB3aXRoIEVNWCkgCi1uZWVkcyBzb3VyY2UgbW9kaWZpY2F0aW9ucyB0byBiZSB1c2VkIGZvciB0aGlzIHBvcnQsIHBlcnRhaW5pbmcgdG8gdXNlIAotb2YgZXJybm8gd2l0aCBtdWx0aXRocmVhZGluZy4KLQotVGhlIG90aGVyIHBhY2thZ2VzLCBleGNlcHQgZm9yIG5jdXJzZXMgYW5kIHpsaWIsIG5lZWRlZCBNYWtlZmlsZSBjaGFuZ2VzIAotZm9yIG11bHRpdGhyZWFkaW5nIHN1cHBvcnQgYnV0IG5vIHNvdXJjZSBjaGFuZ2VzLgotCi1UaGUgX2N1cnNlc19wYW5lbCBtb2R1bGUgaXMgYSBwb3RlbnRpYWwgcHJvYmxlbSAtIHNlZSAiWU9VIEhBVkUgQkVFTiAKLVdBUk5FRCIgaXRlbSAxMy4KLQotVXBzdHJlYW0gc291cmNlIHBhdGNoZXM6Ci0KLU5vIHVwZGF0ZXMgdG8gdGhlIFB5dGhvbiAyLjYgcmVsZWFzZSBoYXZlIGJlY29tZSBhdmFpbGFibGUuCi0KLUxpYnJhcnkgYW5kIG90aGVyIGRpc3RyaWJ1dGVkIFB5dGhvbiBjb2RlOgotCi1UaGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgbGl2ZXMgaW4gdGhlIExpYiBkaXJlY3RvcnkuICBBbGwgdGhlIHN0YW5kYXJkIAotbGlicmFyeSBjb2RlIGluY2x1ZGVkIHdpdGggdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiBpcyBpbmNsdWRlZCAKLWluIHRoZSBiaW5hcnkgYXJjaGl2ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBkb3MtOHgzIGFuZCB0a2ludGVyIAotc3ViZGlyZWN0b3JpZXMgd2hpY2ggaGF2ZSBiZWVuIG9taXR0ZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgCi1hcmNoaXZlIC0gdGhlIGRvcy04eDMgY29tcG9uZW50cyBhcmUgdW5uZWNlc3NhcnkgZHVwbGljYXRlcyBhbmQgVGtpbnRlciAKLWlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0ICh5ZXQpLiAgQWxsIHRoZSBwbGF0LSogc3ViZGlyZWN0b3JpZXMgaW4gdGhlIAotc291cmNlIGRpc3RyaWJ1dGlvbiBoYXZlIGFsc28gYmVlbiBvbWl0dGVkLCBleGNlcHQgZm9yIHRoZSBwbGF0LW9zMmVteCAKLXN1YmRpcmVjdG9yeS4KLQotVGhlIFRvb2xzIGFuZCBEZW1vIGRpcmVjdG9yaWVzIGNvbnRhaW4gYSBjb2xsZWN0aW9uIG9mIFB5dGhvbiBzY3JpcHRzLiAgCi1UbyByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSBhcmNoaXZlLCB0aGUgRGVtby9zZ2ksIERlbW8vVGl4LCAKLURlbW8vdGtpbnRlciwgVG9vbHMvYXVkaW9weSBhbmQgVG9vbHMvSURMRSBzdWJkaXJlY3RvcmllcyBoYXZlIGJlZW4gCi1vbWl0dGVkIGFzIG5vdCBiZWluZyBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0LiAgVGhlIE1pc2MgZGlyZWN0b3J5IGhhcyAKLWFsc28gYmVlbiBvbWl0dGVkLgotCi1BbGwgc3ViZGlyZWN0b3JpZXMgb21pdHRlZCBmcm9tIHRoZSBiaW5hcnkgYXJjaGl2ZSBjYW4gYmUgcmVjb25zdGl0dXRlZCAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiwgaWYgZGVzaXJlZC4KLQotU3VwcG9ydCBmb3IgYnVpbGRpbmcgUHl0aG9uIGV4dGVuc2lvbnM6Ci0KLVRoZSBDb25maWcgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBmaWxlcyBkZXNjcmliaW5nIHRoZSBjb25maWd1cmF0aW9uIAotb2YgdGhlIGludGVycHJldGVyIGFuZCB0aGUgTWFrZWZpbGUsIGltcG9ydCBsaWJyYXJpZXMgZm9yIHRoZSBQeXRob24gRExMLCAKLWFuZCB0aGUgbW9kdWxlIGRlZmluaXRpb24gZmlsZSB1c2VkIHRvIGNyZWF0ZSB0aGUgUHl0aG9uIERMTC4gIFRoZSAKLUluY2x1ZGUgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgc3RhbmRhcmQgUHl0aG9uIGhlYWRlciBmaWxlcyAKLW5lZWRlZCBmb3IgYnVpbGRpbmcgZXh0ZW5zaW9ucy4KLQotQXMgSSBkb24ndCBoYXZlIHRoZSBWaXN1YWwgQWdlIEMrKyBjb21waWxlciwgSSd2ZSBtYWRlIG5vIGF0dGVtcHQgdG8gCi1oYXZlIHRoaXMgcG9ydCBzdXBwb3J0IGV4dGVuc2lvbnMgYnVpbHQgd2l0aCB0aGF0IGNvbXBpbGVyLgotCi0KLVBhY2thZ2luZwotLS0tLS0tLS0tCi0KLVRoaXMgcG9ydCBpcyBwYWNrYWdlZCBhcyBmb2xsb3dzOgotLSBweXRob24tMi42LW9zMmVteC1iaW4tMDM/Pz8/LnppcCAgKGJpbmFyaWVzLCBsaWJyYXJ5IG1vZHVsZXMpCi0tIHB5dGhvbi0yLjYtb3MyZW14LXNyYy0wMz8/Pz8gICAgICAocGF0Y2hlcyttYWtlZmlsZXMgZm9yIG5vbi1QeXRob24gY29kZSkKLQotQXMgYWxsIHRoZSBQeXRob24gc3BlY2lmaWMgcGF0Y2hlcyBmb3IgdGhlIHBvcnQgYXJlIG5vdyBwYXJ0IG9mIHRoZSAKLVB5dGhvbiByZWxlYXNlIHRhcmJhbGwsIG9ubHkgdGhlIHBhdGNoZXMgYW5kIG1ha2VmaWxlcyBpbnZvbHZlZCBpbiAKLWJ1aWxkaW5nIGV4dGVybmFsIGxpYnJhcmllcyBmb3Igb3B0aW9uYWwgZXh0ZW5zaW9ucyBhcmUgaW5jbHVkZWQgaW4gCi10aGUgc291cmNlIGFyY2hpdmUuCi0KLURvY3VtZW50YXRpb24gZm9yIHRoZSBQeXRob24gbGFuZ3VhZ2UsIGFzIHdlbGwgYXMgdGhlIFB5dGhvbiAyLjYgCi1zb3VyY2UgZGlzdGlidXRpb24sIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBQeXRob24gd2Vic2l0ZSAKLShodHRwOi8vd3d3LnB5dGhvbi5vcmcvKSBvciB0aGUgUHl0aG9uIHByb2plY3QgcGFnZXMgYXQgU291cmNlZm9yZ2UgCi0oaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9weXRob24vKS4KLQotCi1JbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLQotCi1PYnRhaW4gYW5kIGluc3RhbGwsIGFzIHBlciB0aGUgaW5jbHVkZWQgaW5zdHJ1Y3Rpb25zLCB0aGUgRU1YIHJ1bnRpbWUgCi1wYWNrYWdlLgotCi1VbnBhY2sgdGhpcyBhcmNoaXZlLCBwcmVzZXJ2aW5nIHRoZSBzdWJkaXJlY3RvcmllcywgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IAotb2YgdGhlIGRyaXZlIHdoZXJlIHlvdSB3YW50IFB5dGhvbiB0byBsaXZlLgotCi1BZGQgdGhlIFB5dGhvbiBkaXJlY3RvcnkgKGVnIEM6XFB5dGhvbjI2KSB0byB0aGUgUEFUSCBhbmQgTElCUEFUSCAKLXZhcmlhYmxlcyBpbiBDT05GSUcuU1lTLgotCi1Zb3Ugc2hvdWxkIHRoZW4gc2V0IHRoZSBQWVRIT05IT01FIGFuZCBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcyAKLWluIENPTkZJRy5TWVMuCi0KLVBZVEhPTkhPTUUgc2hvdWxkIGJlIHNldCB0byBQeXRob24ncyB0b3AgbGV2ZWwgZGlyZWN0b3J5LiAgUFlUSE9OUEFUSCAKLXNob3VsZCBiZSBzZXQgdG8gdGhlIHNlbWljb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBwcmluY2lwYWwgUHl0aG9uIGxpYnJhcnkgCi1kaXJlY3Rvcmllcy4KLUkgdXNlOgotICBTRVQgUFlUSE9OSE9NRT1GOi9QeXRob24yNgotICBTRVQgUFlUSE9OUEFUSD1GOi9QeXRob24yNi9MaWI7RjovUHl0aG9uMjYvTGliL3BsYXQtb3MyZW14OwotICAgICAgICAgICAgICAgICBGOi9QeXRob24yNi9MaWIvbGliLWR5bmxvYWQ7RjovUHl0aG9uMjYvTGliL3NpdGUtcGFja2FnZXMKLQotTk9URSE6ICB0aGUgUFlUSE9OUEFUSCBzZXR0aW5nIGFib3ZlIGlzIGxpbmV3cmFwcGVkIGZvciB0aGlzIGRvY3VtZW50IC0gaXQgCi1zaG91bGQgYWxsIGJlIG9uIG9uZSBsaW5lIGluIENPTkZJRy5TWVMhCi0KLUlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgY3Vyc2VzIG1vZHVsZSwgeW91IHNob3VsZCBzZXQgdGhlIFRFUk0gYW5kIFRFUk1JTkZPIAotZW52aXJvbm1lbnQgdmFyaWFibGVzIGFwcHJvcHJpYXRlbHkuCi0KLUlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgbmN1cnNlcyBpbnN0YWxsZWQsIEkgaGF2ZSBpbmNsdWRlZCBhIGNvcHkgb2YgdGhlIAotRU1YIHN1YnNldCBvZiB0aGUgVGVybWluZm8gZGF0YWJhc2UgaW5jbHVkZWQgd2l0aCB0aGUgbmN1cnNlcy01LjIgc291cmNlIAotZGlzdHJpYnV0aW9uLiAgVGhpcyBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoZSBURVJNSU5GTyBlbnZpcm9ubWVudCB2YXJpYWJsZSAKLXRvIHRoZSBwYXRoIG9mIHRoZSBUZXJtaW5mbyBzdWJkaXJlY3RvcnkgYmVsb3cgdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeS4KLU9uIG15IHN5c3RlbSB0aGlzIGxvb2tzIGxpa2U6Ci0gIFNFVCBURVJNSU5GTz1GOi9QeXRob24yNi9UZXJtaW5mbwotCi1Gb3IgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUsIEkgd291bGQgdHJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICBTRVQgVEVSTT1hbnNpCi0gIFNFVCBURVJNPW9zMgotICBTRVQgVEVSTT13aW5kb3cKLQotWW91IHdpbGwgaGF2ZSB0byByZWJvb3QgeW91ciBzeXN0ZW0gZm9yIHRoZXNlIGNoYW5nZXMgdG8gQ09ORklHLlNZUyB0byB0YWtlIAotZWZmZWN0LgotCi1JZiB5b3Ugd2lzaCB0byBjb21waWxlIGFsbCB0aGUgaW5jbHVkZWQgUHl0aG9uIGxpYnJhcnkgbW9kdWxlcyB0byBieXRlY29kZSwgCi15b3UgY2FuIGNoYW5nZSBpbnRvIHRoZSBQeXRob24gaG9tZSBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgQ09NUElMRUFMTC5DTUQgCi1iYXRjaCBmaWxlLgotCi1Zb3UgY2FuIGV4ZWN1dGUgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgCi1kaXN0cmlidXRpb24gYnkgY2hhbmdpbmcgdG8gdGhlIFB5dGhvbiAyLjYgaG9tZSBkaXJlY3RvcnkgYW5kIGV4ZWN1dGluZyB0aGUgCi1SRUdSVEVTVC5DTUQgYmF0Y2ggZmlsZS4gIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIGtub3duIHRvIGZhaWwgYXQgdGhpcyAKLXRpbWU6Ci0tIHRlc3RfbWhsaWIgKEkgZG9uJ3Qga25vdyBvZiBhbnkgcG9ydCBvZiBNSCB0byBPUy8yKTsKLS0gdGVzdF9zdHJwdGltZSAoc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAyMik7Ci0tIHRlc3RfdGltZSAoc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAyMik7Ci0tIHRlc3RfcG9zaXhwYXRoIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIzKS4KLQotTm90ZSB0aGF0IHNvbWUgb2YgdGhlIG5ldHdvcmsgcmVsYXRlZCB0ZXN0cyBleHBlY3QgdGhlIGxvb3BiYWNrIGludGVyZmFjZQotKGludGVyZmFjZSAibG8iLCB3aXRoIElQIGFkZHJlc3MgMTI3LjAuMC4xKSB0byBiZSBlbmFibGVkLCB3aGljaCBmcm9tIG15Ci1leHBlcmllbmNlIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiAgQWRkaXRpb25hbGx5LCB0ZXN0X3BvcGVuMgotZXhwZWN0cyB0aGUgImNhdCIgdXRpbGl0eSAoc3VjaCBhcyBmb3VuZCBpbiBwb3J0cyBvZiB0aGUgR05VIHRvb2xzKSB0bwotYmUgaW5zdGFsbGVkLgotCi0KLUJ1aWxkaW5nIGZyb20gc291cmNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaXRoIHRoZSBFTVggcG9ydCBub3cgY2hlY2tlZCBpbnRvIFB5dGhvbidzIENWUyByZXBvc2l0b3J5LCB0aGUgYnVpbGQgCi1pbmZyYXN0cnVjdHVyZSBpcyBwYXJ0IG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2ViYWxsLgotCi1QcmVyZXF1aXNpdGVzCi0KLUZpcnN0IGFuZCBmb3JlbW9zdCwgeW91IG5lZWQgYW4gb3BlcmF0aW9uYWwgRU1YIGRldmVsb3BtZW50IGluc3RhbGxhdGlvbiAtIAotRU1YIHYwLjlkIHdpdGggZml4MDQgKHRoZSBsYXRlc3QgYXQgdGltZSBvZiB3cml0aW5nKSAmIHRoZSBnY2MgMi44LjEgCi1jb21waWxlciByZWxlYXNlZCBieSBFYmVyaGFyZCBNYXR0ZXMgaXMgdGhlIHJlY29tbWVuZGVkIHNldHVwLgotCi1JZiB5b3UgaGF2ZSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGdjYyBpbnN0YWxsZWQsIHNlZSAiWU9VIEhBVkUgQkVFTiAKLVdBUk5FRCIgaXRlbSAxNi4KLQotT3RoZXIgaXRlbXMgb2Ygc29mdHdhcmUgcmVxdWlyZWQ6LQotCi0tIEdOVSBtYWtlIChJJ20gdXNpbmcgdjMuNzYuMSkKLS0gcm0sIGNwLCBta2RpciBmcm9tIHRoZSBHTlUgZmlsZSB1dGlsaXRpZXMgcGFja2FnZQotLSBHTlUgZmluZAotLSBHTlUgc2VkCi0KLVByb2NlZHVyZQotCi0wLiBhbGwgY2hhbmdlcyBtZW50aW9uZWQgYXBwbHkgdG8gZmlsZXMgaW4gdGhlIFBDL29zMmVteCBzdWJkaXJlY3RvcnkgCi0gICBvZiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlIHRyZWUuICBtYWtlIGlzIGFsc28gZXhlY3V0ZWQgZnJvbSB0aGlzIAotICAgZGlyZWN0b3J5LCBzbyBjaGFuZ2UgaW50byB0aGlzIGRpcmVjdG9yeSBiZWZvcmUgcHJvY2VlZGluZy4KLQotMS4gZGVjaWRlIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24uCi0gICBJZiB5b3Ugd2lzaCB0byBkbyB0aGlzLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSUJfRElSIAotICAgdG8gdGhlIGRpcmVjdG9yeSB5b3Ugd2lzaCB0byB1c2UgZm9yIFBZVEhPTkhPTUUgCi0gICAoZWcgL3Vzci9sb2NhbC9saWIvcHl0aG9uMi42KS4KLQotICAgSWYgeW91IHdhbnQgUHl0aG9uIHRvIGZpbmQgaXRzIGxpYnJhcnkgd2l0aG91dCB0aGUgUFlUSE9OSE9NRSAKLSAgIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCwgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgCi0gICBGSVhFRF9QWUhPTUUgdG8gInllcyIgKHVuY29tbWVudCB0aGUgYXBwcm9wcmlhdGUgbGluZSkuCi0KLTIuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gZXhlY3V0YWJsZXMgKHB5dGhvbi5leGUsIHB5dGhvbnBtLmV4ZSAmIHBnZW4uZXhlKSAKLSAgIHRvIGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSwgc2V0IAotICAgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBFWEVfRElSIHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkuCi0KLTMuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gY29yZSBETEwgKHB5dGhvbjMzLmRsbCkgdG8gYmUgaW5zdGFsbGVkIGluIGEgCi0gICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBQeXRob24gZXhlY3V0YWJsZXMgYXJlIAotICAgaW5zdGFsbGVkIChieSBkZWZhdWx0LCB0aGUgUFlUSE9OSE9NRSBkaXJlY3RvcnkpLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSAKLSAgIE1ha2VmaWxlIHZhcmlhYmxlIERMTF9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4gIFRoaXMgRExMIG11c3QgCi0gICBiZSBwbGFjZWQgaW4gYSBkaXJlY3Rvcnkgb24gdGhlIHN5c3RlbSdzIExJQlBBVEgsIG9yIHRoYXQgZ2V0cyBzZXQgCi0gICB3aXRoIEJFR0lOTElCUEFUSCBvciBFTkRMSUJQQVRILgotCi00LiBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgYW55IG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCAKLSAgIG9wdGlvbmFsIFB5dGhvbiBtb2R1bGVzLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSByZWxldmFudCBIQVZFXzxwYWNrYWdlPiAKLSAgIE1ha2VmaWxlIHZhcmlhYmxlIHRvICJ5ZXMiLiAgVGhlIE1ha2VmaWxlIGN1cnJlbnRseSBzdXBwb3J0czoKLQotICAgbGlicmFyeSAgICAgICAgICAgICAgIE1ha2VmaWxlIHZhcmlhYmxlCi0gICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICB6bGliICgxLjEuNCkgICAgICAgICAgSEFWRV9aTElCCi0gICBHTlUgVWx0cmFGYXN0IENyeXB0ICAgSEFWRV9VRkMKLSAgIFRjbC9UayAgICAgICAgICAgICAgICBIQVZFX1RDTFRLIChub3Qga25vd24gdG8gd29yaykKLSAgIEdOVSBSZWFkbGluZSAgICAgICAgICBIQVZFX0dSRUFETElORQotICAgbmN1cnNlcyAgICAgICAgICAgICAgIEhBVkVfTkNVUlNFUwotICAgR05VIGdkYm0gICAgICAgICAgICAgIEhBVkVfR0RCTQotICAgbGliYnoyICAgICAgICAgICAgICAgIEhBVkVfQloyCi0gICBPcGVuU1NMICAgICAgICAgICAgICAgSEFWRV9PUEVOU1NMCi0KLSAgIFBsZWFzZSBub3RlIHRoYXQgeW91IG5lZWQgdG8gY2hlY2sgdGhhdCB3aGF0IHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGlzIGNvbXBhdGlibGUgd2l0aCBQeXRob24ncyBidWlsZCBvcHRpb25zLiAgSW4gcGFydGljdWxhciwgdGhlIAotICAgQlNEIERCIHYxLjg1IGxpYnJhcnkgbmVlZHMgdG8gYmUgcmVidWlsdCB3aXRoIGEgc291cmNlIHBhdGNoIGZvciAKLSAgIG11bHRpdGhyZWFkIHN1cHBvcnQgKGRvZXNuJ3QgY2hhbmdlIHRoZSBsaWJyYXJ5J3MgcmVlbnRyYW50IHN0YXR1cyAKLSAgIGJ1dCBhbGxvd3MgaXQgdG8gYmUgbGlua2VkIHRvIFB5dGhvbiB3aGljaCBpcyBtdWx0aXRocmVhZGVkKS4gIAotICAgV2lkZWx5IGF2YWlsYWJsZSBiaW5hcnkgcGFja2FnZXMgb2Ygb3RoZXIgbGlicmFyeXMgJiBETExzIGFyZSAKLSAgIG5vdCBidWlsdC9saW5rZWQgd2l0aCBtdWx0aXRocmVhZCBzdXBwb3J0LiAgQmV3YXJlIQotCi0gICBBbHNvIG5vdGUgdGhhdCB0aGUgTWFrZWZpbGUgY3VycmVudGx5IGV4cGVjdHMgYW55IGxpYnJhcmllcyB0byBiZSAKLSAgIGZvdW5kIHdpdGggdGhlIGRlZmF1bHQgbGlicmFyeSBzZWFyY2ggcGF0aC4gIFlvdSBtYXkgbmVlZCB0byBhZGQgCi0gICAtTCBzd2l0Y2hlcyB0byB0aGUgTERGTEFHUyBNYWtlZmlsZSB2YXJpYWJsZSBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgCi0gICBsaWJyYXJpZXMgaW4gZGlyZWN0b3JpZXMgbm90IGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoICh3aGljaCBjYW4gCi0gICBiZSBjb250cm9sbGVkIGJ5IHRoZSBMSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBieSBFTVgpLgotCi01LiBtYWtlCi0KLSAgIEl0IGlzIHVzdWFsbHkgYSBnb29kIGlkZWEgdG8gcmVkaXJlY3QgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgCi0gICBvZiB0aGUgbWFrZSBwcm9jZXNzIHRvIGxvZyBmaWxlcywgc28gdGhhdCB5b3UgY2FuIHJldmlldyBhbnkgbWVzc2FnZXMuIAotCi02LiBtYWtlIHRlc3QKLQotICAgVGhpcyBydW5zIHRoZSBQeXRob24gcmVncmVzc2lvbiB0ZXN0cywgYW5kIGNvbXBsZXRpb24gaXMgYSBzaWduIG9mIAotICAgYSB1c2FibGUgYnVpbGQuICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBsaXN0IG9mIHNraXBwZWQgbW9kdWxlcyB0byAKLSAgIGVuc3VyZSB0aGF0IGFueSBvcHRpb25hbCBtb2R1bGVzIHlvdSBzZWxlY3RlZCBoYXZlIGJlZW4gYnVpbHQ7IAotICAgY2hlY2tpbmcgdGhlIGxpc3Qgb2YgZmFpbHVyZXMgYWdhaW5zdCB0aGUgbGlzdCBvZiBrbm93biBmYWlsdXJlcyAKLSAgIGVsc2V3aGVyZSBpbiB0aGlzIGRvY3VtZW50IGlzIGFsc28gcHJ1ZGVudC4KLQotNy4gbWFrZSBpbnN0YWxsCi0gICA+Pj4+Pj4gTk9UIFlFVCBDT01QTEVURSA8PDw8PDwgCi0KLTguIGNoYW5nZSB0byBhIGRpcmVjdG9yeSBvdXRzaWRlIHRoZSBQeXRob24gc291cmNlIHRyZWUgYW5kIHN0YXJ0IFB5dGhvbi4gCi0gICBDaGVjayB0aGUgdmVyc2lvbiBhbmQgYnVpbGQgZGF0ZSB0byBjb25maXJtIHNhdGlzZmFjdG9yeSBpbnN0YWxsYXRpb24uCi0KLQotWU9VIEhBVkUgQkVFTiBXQVJORUQhIQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JIGtub3cgYWJvdXQgYSBudW1iZXIgb2YgbmFzdGllcyBpbiB0aGlzIHBvcnQuCi0KLTEuICBFYmVyaGFyZCBNYXR0ZXMsIGF1dGhvciBvZiBFTVgsIHdyaXRlcyBpbiBoaXMgZG9jdW1lbnRhdGlvbiB0aGF0IGZvcmsoKSAKLWlzIHZlcnkgaW5lZmZpY2llbnQgaW4gdGhlIE9TLzIgZW52aXJvbm1lbnQuICBJdCBhbHNvIHJlcXVpcmVzIHRoYXQgdGhlIAotZXhlY3V0YWJsZSBiZSBsaW5rZWQgaW4gYS5vdXQgZm9ybWF0IHJhdGhlciB0aGFuIE9NRi4gIFVzZSB0aGUgb3MuZXhlYyAKLWFuZC9vciB0aGUgb3Muc3Bhd24gZmFtaWx5IG9mIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZS4KLQotMi4gIEluIHRoZSBhYnNlbmNlIG9mIEdOVSBSZWFkbGluZSwgdGVybWluYXRpbmcgdGhlIGludGVycHJldGVyIHJlcXVpcmVzIGEgCi1jb250cm9sLVogKF5aKSBmb2xsb3dlZCBieSBhIGNhcnJpYWdlIHJldHVybi4gIEplZmYgUnVzaCBkb2N1bWVudGVkIHRoaXMgCi1wcm9ibGVtIGluIGhpcyBQeXRob24gMS41LjIgcG9ydC4gIFdpdGggUmVhZGxpbmUsIGEgY29udHJvbC1EICheRCkgd29ya3MgCi1hcyBwZXIgdGhlIHN0YW5kYXJkIFVuaXggZW52aXJvbm1lbnQuCi0KLTMuICBFTVggb25seSBoYXMgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIGZjbnRsKCkuICBUaGUgZmNudGwgbW9kdWxlIAotaW4gdGhpcyBwb3J0IHN1cHBvcnRzIHdoYXQgRU1YIHN1cHBvcnRzLiAgSWYgZmNudGwgaXMgaW1wb3J0YW50IHRvIHlvdSwgCi1wbGVhc2UgcmV2aWV3IHRoZSBFTVggQyBMaWJyYXJ5IFJlZmVyZW5jZSAoaW5jbHVkZWQgaW4gLklORiBmb3JtYXQgaW4gdGhlIAotRU1YVklFVy5aSVAgYXJjaGl2ZSBhcyBwYXJ0IG9mIHRoZSBjb21wbGV0ZSBFTVggZGV2ZWxvcG1lbnQgdG9vbHMgc3VpdGUpLgotQmVjYXVzZSBvZiBvdGhlciBzaWRlLWVmZmVjdHMgSSBoYXZlIG1vZGlmaWVkIHRoZSB0ZXN0X2ZjbnRsLnB5IHRlc3QgCi1zY3JpcHQgdG8gZGVhY3RpdmF0ZSB0aGUgZXhlcmNpc2luZyBvZiB0aGUgbWlzc2luZyBmdW5jdGlvbmFsaXR5LgotCi00LiAgVGhlIHJlYWRsaW5lIG1vZHVsZSBoYXMgYmVlbiBsaW5rZWQgYWdhaW5zdCBuY3Vyc2VzIHJhdGhlciB0aGFuIHRoZSAKLXRlcm1jYXAgbGlicmFyeSBzdXBwbGllZCB3aXRoIEVNWC4KLQotNS4gIEkgaGF2ZSBjb25maWd1cmVkIHRoaXMgcG9ydCB0byB1c2UgIi8iIGFzIHRoZSBwcmVmZXJyZWQgcGF0aCBzZXBhcmF0b3IgCi1jaGFyYWN0ZXIsIHJhdGhlciB0aGFuICJcIiAoJ1xcJyksIGluIGxpbmUgd2l0aCB0aGUgY29udmVudGlvbiBzdXBwb3J0ZWQgCi1ieSBFTVguICBCYWNrc2xhc2hlcyBhcmUgc3RpbGwgc3VwcG9ydGVkIG9mIGNvdXJzZSwgYW5kIHN0aWxsIGFwcGVhciBpbiAKLXVuZXhwZWN0ZWQgcGxhY2VzIGR1ZSB0byBvdXRzaWRlIHNvdXJjZXMgdGhhdCBkb24ndCBnZXQgbm9ybWFsaXNlZC4KLQotNi4gIFdoaWxlIHRoZSBEaXN0VXRpbHMgY29tcG9uZW50cyBhcmUgbm93IGZ1bmN0aW9uYWwsIG90aGVyIAotcGFja2FnaW5nL2JpbmFyeSBoYW5kbGluZyB0b29scyBhbmQgdXRpbGl0aWVzIHN1Y2ggYXMgdGhvc2UgaW5jbHVkZWQgaW4KLXRoZSBEZW1vIGFuZCBUb29scyBkaXJlY3RvcmllcyAtIGZyZWV6ZSBpbiBwYXJ0aWN1bGFyIC0gYXJlIHVubGlrZWx5IHRvIAotd29yay4gIElmIHlvdSBkbyBnZXQgdGhlbSBnb2luZywgSSdkIGxpa2UgdG8ga25vdyBhYm91dCB5b3VyIHN1Y2Nlc3MuCi0KLTcuICBJIGhhdmVuJ3Qgc2V0IG91dCB0byBzdXBwb3J0IHRoZSBbQkVHSU58RU5EXUxJQlBBVEggZnVuY3Rpb25hbGl0eSAKLXN1cHBvcnRlZCBieSBvbmUgb2YgdGhlIGVhcmxpZXIgcG9ydHMgKFJ1c2gncz8/KS4gIElmIGl0IHdvcmtzIGxldCBtZSBrbm93LgotCi04LiBBcyBhIHJlc3VsdCBvZiB0aGUgbGltaXRhdGlvbnMgaW1wb3NlZCBieSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzLCB0aGUgCi1zdGFuZGFyZCBleHRlbnNpb24gbW9kdWxlIHB3ZCBvbmx5IHN5bnRoZXNpc2VzIGEgc2ltcGxlIHBhc3N3ZCBkYXRhYmFzZSwgCi1hbmQgdGhlIGdycCBtb2R1bGUgY2Fubm90IGJlIHN1cHBvcnRlZCBhdCBhbGwuCi0KLUkgaGF2ZSB3cml0dGVuIHB1cmUgUHl0aG9uIHN1YnN0aXR1dGVzIGZvciBwd2QgYW5kIGdycCwgd2hpY2ggY2FuIHByb2Nlc3MgCi1yZWFsIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm9yIHRob3NlIGFwcGxpY2F0aW9ucyAoc3VjaCBhcyBNYWlsTWFuKSB0aGF0IAotcmVxdWlyZSBtb3JlIHRoYW4gRU1YIGVtdWxhdGVzLiAgSSBoYXZlIHBsYWNlZCBwd2QucHkgYW5kIGdycC5weSBpbiAKLUxpYi9wbGF0LW9zMmVteCwgd2hpY2ggaXMgdXN1YWxseSBiZWZvcmUgTGliL2xpYi1keW5sb2FkICh3aGljaCBjb250YWlucyAKLXB3ZC5weWQpIGluIHRoZSBQWVRIT05QQVRILiAgSWYgeW91IGhhdmUgYmVjb21lIGF0dGFjaGVkIHRvIHdoYXQgcHdkLnB5ZCAKLXN1cHBvcnRzLCB5b3UgY2FuIHB1dCBMaWIvbGliLWR5bmxvYWQgYmVmb3JlIExpYi9wbGF0LW9zMmVteCBpbiBQWVRIT05QQVRIIAotb3IgZGVsZXRlL3JlbmFtZSBwd2QucHkgJiBncnAucHkuCi0KLXB3ZC5weSAmIGdycC5weSBzdXBwb3J0IGxvY2F0aW5nIHRoZWlyIGRhdGEgZmlsZXMgYnkgbG9va2luZyBpbiB0aGUgCi1lbnZpcm9ubWVudCBmb3IgdGhlbSBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgotcHdkLnB5OiAgJEVUQ19QQVNTV0QgICAgICAgICAgICAgKCVFVENfUEFTU1dEJSkKLSAgICAgICAgICRFVEMvcGFzc3dkICAgICAgICAgICAgICglRVRDJS9wYXNzd2QpCi0gICAgICAgICAkUFlUSE9OSE9NRS9FdGMvcGFzc3dkICAoJVBZVEhPTkhPTUUlL0V0Yy9wYXNzd2QpCi1ncnAucHk6ICAkRVRDX0dST1VQICAgICAgICAgICAgICAoJUVUQ19HUk9VUCUpCi0gICAgICAgICAkRVRDL2dyb3VwICAgICAgICAgICAgICAoJUVUQyUvZ3JvdXApCi0gICAgICAgICAkUFlUSE9OSE9NRS9FdGMvZ3JvdXAgICAoJVBZVEhPTkhPTUUlL0V0Yy9ncm91cCkKLQotVGhlIEVUQ19QQVNTV0QgYW5kIEVUQ19HUk9VUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGludGVuZGVkIHRvIGFsbG93IAotc3VwcG9ydCBmb3IgbXVsdGlwbGUgcGFzc3dkL2dycCBmaWxlcywgd2hlcmUgb3RoZXIgYXBwbGljYXRpb25zIG1heSBub3QgCi1zdXBwb3J0IGFzIHdpZGUgYSB2YXJpZXR5IG9mIGlucHV0IHZhcmlhdGlvbnMgKGRyaXZlIHJlbWFwcGluZ3MsIAotc2VwYXJhdG9ycyBldGMpLgotCi1Cb3RoIG1vZHVsZXMgc3VwcG9ydCB1c2luZyBlaXRoZXIgdGhlICI6IiBjaGFyYWN0ZXIgKFVuaXggc3RhbmRhcmQpIG9yIAotIjsiIChPUy8yLCBET1MsIFdpbmRvd3Mgc3RhbmRhcmQpIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGFuZCBwd2QucHkgCi1pbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgZHJpdmUgbGV0dGVyIGNvbnZlcnNpb25zIGZvciB0aGUgaG9tZV9kaXJlY3RvcnkgYW5kIAotc2hlbGwgZmllbGRzIChmb3IgdGhlICI6IiBzZXBhcmF0b3Igb25seSk6Ci0gICAgICAgICAkeCAgLT4gIHg6Ci0gICAgICAgICB4OyAgLT4gIHg6Ci0KLUV4YW1wbGUgdmVyc2lvbnMgb2YgcGFzc3dkIGFuZCBncm91cCBhcmUgaW4gdGhlIEV0YyBzdWJkaXJlY3RvcnkuICBUaGUgCi1yZWdyZXNzaW9uIHRlc3RzICh0ZXN0X3B3ZCBhbmQgdGVzdF9ncnApIHdpbGwgZmFpbCBpZiB2YWxpZCBwYXNzd29yZCBhbmQgCi1ncm91cCBmaWxlcyBjYW5ub3QgYmUgZm91bmQsIGJ1dCBzaG91bGQgcGFzcyBvdGhlcndpc2UuCi0KLUJlIGF3YXJlIHRoYXQgUHl0aG9uJ3MgcHdkICYgZ3JvdXAgbW9kdWxlcyBhcmUgZm9yIHJlYWRpbmcgcGFzc3dvcmQgYW5kIAotZ3JvdXAgaW5mb3JtYXRpb24gb25seS4KLQotMTEuIEVNWCdzIHRlcm1pb3Mgcm91dGluZXMgZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgbm93IAotZXhwb3NlZCBieSB0aGUgdGVybWlvcyBtb2R1bGUgLSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gdG8gZmluZCAKLW91dCB3aGF0IGlzIHN1cHBvcnRlZC4KLQotMTIuIFRoZSBjYXNlIHNlbnNpdGl2ZSBpbXBvcnQgc2VtYW50aWNzIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuMSBmb3Igb3RoZXIgCi1jYXNlIGluc2Vuc2l0aXZlIGJ1dCBjYXNlIHByZXNlcnZpbmcgZmlsZS9vcGVyYXRpbmcgc3lzdGVtcyAoV2luZG93cyBldGMpLCAKLWhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byB0aGlzIHBvcnQsIGFuZCBhcmUgYWN0aXZlIGJ5IGRlZmF1bHQuICBTZXR0aW5nIAotdGhlIFBZVEhPTkNBU0VPSyBlbnZpcm9ubWVudCB2YXJpYWJsZSAodG8gYW55IHZhbHVlKSByZXZlcnRzIHRvIHRoZSAKLXByZXZpb3VzIChjYXNlIGluc2Vuc2l0aXZlKSBzZW1hbnRpY3MuICBUaGlzIGNhbiBiZSBhbiBpc3N1ZSB3aXRoIHNvbWUgCi1maWxlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIHRoYXQgZG8gbm90IHByZXNlcnZlIHRoZSBjYXNlIG9mIGZpbGUgYW5kCi1kaXJlY3RvcnkgbmFtZXMuCi0KLTEzLiBCZWNhdXNlIEkgYW0gc3RhdGljYWxseSBsaW5raW5nIG5jdXJzZXMsIHRoZSBfY3Vyc2VzX3BhbmVsIAotbW9kdWxlIGhhcyBwb3RlbnRpYWwgcHJvYmxlbXMgYXJpc2luZyBmcm9tIHNlcGFyYXRlIGxpYnJhcnkgZGF0YSBhcmVhcy4KLVRvIGF2b2lkIHRoaXMsIEkgaGF2ZSBjb25maWd1cmVkIHRoZSBfY3Vyc2VzXy5weWQgKGltcG9ydGVkIGFzIAotIl9jdXJzZXNfcGFuZWwiKSB0byBpbXBvcnQgdGhlIG5jdXJzZXMgc3ltYm9scyBpdCBuZWVkcyBmcm9tIF9jdXJzZXMuZGxsIAotKHdoaWNoIGlzIHRoZSBjdXJzZXMgbW9kdWxlLCBidXQgd2l0aCBhIC5kbGwgZXh0ZW5zaW9uIHJhdGhlciB0aGFuIC5weWQgCi1zbyB0aGF0IHRoZSBkeW5hbWljIGxvYWRlciBjYW4gYWN0dWFsbHkgaW1wb3J0IHRoZSBzeW1ib2xzIGZyb20gaXQgYXMgYSAKLURMTCkuCi0KLVRoZSBzaXRlIG1vZHVsZSAoTGliL3NpdGUucHkpIGhhcyBjb2RlIGFkZGVkIHRvIHR3ZWFrIEJFR0lOTElCUEFUSCBzbwotdGhhdCBfY3Vyc2VzLmRsbCBpcyBmb3VuZCB3aGVuIF9jdXJzZXNfcGFuZWwgaXMgaW1wb3J0ZWQuICBJZiB5b3UgaGF2ZQotcHJvYmxlbXMgYXR0ZW1wdGluZyB0byB1c2UgdGhlIF9jdXJzZXNfcGFuZWwgc3VwcG9ydCBwbGVhc2UgbGV0IG1lIGtub3csCi1hbmQgSSdsbCBoYXZlIGFub3RoZXIgbG9vayBhdCB0aGlzLgotCi0xNC4gc3lzLnBsYXRmb3JtIHJlcG9ydHMgIm9zMmVteCIgaW5zdGVhZCBvZiAib3MyIi4gIG9zLm5hbWUgc3RpbGwgCi1yZXBvcnRzICJvczIiLiAgVGhpcyBjaGFuZ2Ugd2FzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gCi10aGUgVkFDKysgYnVpbGQgKGZvcm1lcmx5IG1haW50YWluZWQgYnkgTWljaGFlbCBNdWxsZXIpIGFuZCB0aGUgRU1YIGJ1aWxkIAotKHRoaXMgcG9ydCksIHByaW5jaXBhbGx5IGZvciBEaXN0VXRpbHMuCi0KLTE1LiBpdCBhcHBlYXJzIHRoYXQgdGhlICVXIHN1YnN0aXR1dGlvbiBpbiB0aGUgRU1YIHN0cmZ0aW1lKCkgcm91dGluZSBoYXMgCi1hbiBvZmYtYnktb25lIGJ1Zy4gIHN0cmZ0aW1lIHdhcyBsaXN0ZWQgYXMgcGFzc2luZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyAKLWluIHByZXZpb3VzIHJlbGVhc2VzLCBidXQgdGhpcyBmYWN0IGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGFuIG92ZXJzaWdodCBpbiAKLXRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuICBUbyBmaXggdGhpcyByZWFsbHkgcmVxdWlyZXMgYSBwb3J0YWJsZSAKLXN0cmZ0aW1lIHJvdXRpbmUgLSBJJ20gbG9va2luZyBpbnRvIHVzaW5nIG9uZSBmcm9tIEZyZWVCU0QsIGJ1dCBpdHMgbm90IAotcmVhZHkgeWV0LgotCi0xNi4gSSBoYXZlIHN1Y2Nlc3NmdWxseSBidWlsdCB0aGlzIHBvcnQgd2l0aCBBbmR5IFphYm9sb3RueSdzIHBvcnRzIG9mIAotcGdjYyAyLjk1IGFuZCBnY2MgMy4yLjEsIGluIGFkZGl0aW9uIHRvIEVNJ3MgZ2NjIDIuOC4xLgotCi1JIGhhdmUgbm90IGF0dGVtcHRlZCB0byBjb21waWxlIFB5dGhvbiB3aXRoIGFueSB2ZXJzaW9uIG9mIGdjYyBwcmlvciB0byAKLXYyLjguMS4KLQotVGhpcyByZWxlYXNlIHNlZXMgdGhlIGRlZmF1bHQgb3B0aW1pc2F0aW9uIGNoYW5nZSB0byAKLSItTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSIuICBUaGlzIHdvcmtzIGZpbmUgdG9vIGZvciBwZ2NjIDIuOTUgCi1idXQgbm90IGZvciBnY2MgMy4yLjEuCi0KLVdpdGggZ2NjIDMuMi4xLCAtTzMgY2F1c2VzIDIgdW5leHBlY3RlZCB0ZXN0IGZhaWx1cmVzOiB0ZXN0X2Zvcm1hdCBhbmQgCi10ZXN0X3VuaWNvZGUuICBCb3RoIHRoZXNlIHRlc3RzIHBhc3MgaWYgLU8yIGlzIGluc3RlYWQgb2YgLU8zIHdpdGggdGhpcyAKLWNvbXBpbGVyLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgaXMgbmVnbGlnaWJsZSAoaW4gY29udHJhc3QgdG8gCi1nY2MgMi44LjEgYW5kIHBnY2MgMi45NSwgd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgCi0yIG9wdGltaXNhdGlvbiBzZXR0aW5ncyBhcHByb2FjaGVzIDEwJSkuCi0KLTE3LiAgb3Muc3Bhd252KCkgYW5kIG9zLnNwYXdudmUoKSBleHBvc2UgRU1YJ3MgbGlicmFyeSByb3V0aW5lcyByYXRoZXIgCi10aGFuIHVzZSB0aGUgZW11bGF0aW9uIGluIG9zLnB5LgotCi1JbiBvcmRlciB0byBtYWtlIHVzZSBvZiBzb21lIG9mIHRoZSBmZWF0dXJlcyB0aGlzIG1ha2VzIGF2YWlsYWJsZSBpbiAKLXRoZSBPUy8yIGVudmlyb25tZW50LCB5b3Ugc2hvdWxkIHBlcnVzZSB0aGUgcmVsZXZhbnQgRU1YIGRvY3VtZW50YXRpb24gCi0oRU1YTElCLklORiBpbiB0aGUgRU1YVklFVy5aSVAgYXJjaGl2ZSBhY2NvbXBhbnlpbmcgdGhlIEVNWCBhcmNoaXZlcyAKLW9uIEhvYmJlcyBvciBMRU8pLiAgQmUgYXdhcmUgdGhhdCBJIGhhdmUgZXhwb3NlZCBhbGwgdGhlICJtb2RlIiBvcHRpb25zIAotc3VwcG9ydGVkIGJ5IEVNWCwgYnV0IHRoZXJlIGFyZSBjb21iaW5hdGlvbnMgdGhhdCBlaXRoZXIgY2Fubm90IGJlIAotcHJhY3RpY2FsbHkgdXNlZCBieS9pbiBQeXRob24gb3IgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGNvbXByb21pc2UgeW91ciAKLXN5c3RlbSdzIHN0YWJpbGl0eS4KLQotMTguICBweXRob25wbS5leGUgdXNlZCB0byBiZSBqdXN0IHB5dGhvbi5leGUgd2l0aCB0aGUgV0lORE9XQVBJIGxpbmtlciAKLW9wdGlvbiBzZXQgaW4gdGhlIHB5dGhvbnBtLmRlZiBmaWxlLiAgSW4gcHJhY3RpY2UsIHRoaXMgdHVybnMgb3V0IHRvIGRvIAotbm90aGluZyB1c2VmdWwuCi0KLUkgaGF2ZSB3cml0dGVuIGEgcmVwbGFjZW1lbnQgd2hpY2ggd3JhcHMgdGhlIFB5dGhvbiBETEwgaW4gYSBnZW51aW5lIAotUHJlc2VudGF0aW9uIE1hbmFnZXIgYXBwbGljYXRpb24uICBUaGlzIHZlcnNpb24gYWN0dWFsbHkgcnVucyB0aGUgCi1QeXRob24gaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgZnJvbSB0aGUgUE0gc2hlbGwsIGluIG9yZGVyIAotdGhhdCBQeXRob25QTSBoYXMgYSBmdW5jdGlvbmluZyBtZXNzYWdlIHF1ZXVlIGFzIGdvb2QgUE0gYXBwcyBzaG91bGQuCi1JbiBpdHMgY3VycmVudCBzdGF0ZSwgUHl0aG9uUE0ncyB3aW5kb3cgaXMgaGlkZGVuLiAgSXQgY2FuIGJlIGRpc3BsYXllZCwgCi1hbHRob3VnaCBpdCB3aWxsIGhhdmUgbm8gY29udGVudCBhcyBub3RoaW5nIGlzIGV2ZXIgd3JpdHRlbiB0byB0aGUgCi13aW5kb3cuICBPbmx5IHRoZSAiaGlkZSIgYnV0dG9uIGlzIGF2YWlsYWJsZS4gIEFsdGhvdWdoIHRoZSBjb2RlIAotaGFzIHN1cHBvcnQgZm9yIHNodXR0aW5nIFB5dGhvblBNIGRvd24gd2hlbiB0aGUgUHl0aG9uIGludGVycHJldGVyIGlzIAotc3RpbGwgYnVzeSAodmlhIHRoZSAiY29udHJvbCIgbWVudSksIHRoaXMgaXMgbm90IHdlbGwgdGVzdGVkIGFuZCBnaXZlbiAKLWNvbW1lbnRzIEkndmUgY29tZSBhY3Jvc3MgaW4gRU1YIGRvY3VtZW50YXRpb24gc3VnZ2VzdGluZyB0aGF0IHRoZSAKLXRocmVhZCBraWxsaW5nIG9wZXJhdGlvbiBoYXMgcHJvYmxlbXMgSSB3b3VsZCBzdWdnZXN0IGNhdXRpb24gaW4gCi1yZWx5aW5nIG9uIHRoaXMgY2FwYWJpbGl0eS4KLQotUHl0aG9uUE0gcHJvY2Vzc2VzIGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgbm9ybWFsbHkuICBUaGUgc3RhbmRhcmQgaW5wdXQsIAotb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zIGFyZSBvbmx5IHVzZWZ1bCBpZiByZWRpcmVjdGVkLCBhcyBQeXRob25QTSdzIAotd2luZG93IGlzIG5vdCBhIGNvbnNvbGUgaW4gYW55IGZvcm0gYW5kIHNvIGNhbm5vdCBhY2NlcHQgb3IgZGlzcGxheSAKLWFueXRoaW5nLiAgVGhpcyBtZWFucyB0aGF0IHRoZSAtaSBvcHRpb24gaXMgaW5lZmZlY3RpdmUuCi0KLUJlY2F1c2UgdGhlIFB5dGhvbiB0aHJlYWQgZG9lc24ndCBjcmVhdGUgaXRzIG93biBtZXNzYWdlIHF1ZXVlLCBjcmVhdGluZyAKLVBNIFdpbmRvd3MgYW5kIHBlcmZvcm1pbmcgbW9zdCBQTSBvcGVyYXRpb25zIGlzIG5vdCBwb3NzaWJsZSBmcm9tIHdpdGhpbiAKLXRoaXMgdGhyZWFkLiAgSG93IHRoaXMgd2lsbCBhZmZlY3Qgc3VwcG9ydGluZyBQTSBleHRlbnNpb25zIChzdWNoIGFzIAotVGtpbnRlciB1c2luZyBhIFBNIHBvcnQgb2YgVGNsL1RrLCBvciB3eFB5dGhvbiB1c2luZyB0aGUgUE0gcG9ydCBvZiAKLVd4V2luZG93cykgaXMgc3RpbGwgYmVpbmcgcmVzZWFyY2hlZC4KLQotTm90ZSB0aGF0IG9zLmZvcmsoKSBfRE9FU19OT1RfV09SS18gaW4gUHl0aG9uUE0gLSBTWVMzMTc1cyBhcmUgdGhlIHJlc3VsdCAKLW9mIHRyeWluZy4gIG9zLnNwYXdudigpIF9kb2VzXyB3b3JrLiAgUHl0aG9uUE0gcGFzc2VzIGFsbCByZWdyZXNzaW9uIHRlc3RzIAotdGhhdCB0aGUgc3RhbmRhcmQgUHl0aG9uIGludGVycHJldGVyIChweXRob24uZXhlKSBwYXNzZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiAKLW9mIHRlc3RfZm9yazEgYW5kIHRlc3Rfc29ja2V0IHdoaWNoIGJvdGggYXR0ZW1wdCB0byB1c2Ugb3MuZm9yaygpLgotCi1JIHZlcnkgbXVjaCB3YW50IGZlZWRiYWNrIG9uIHRoZSBwZXJmb3JtYW5jZSwgYmVoYXZpb3VyIGFuZCB1dGlsaXR5IG9mIAotUHl0aG9uUE0uICBJIHdvdWxkIGxpa2UgdG8gYWRkIGEgUE0gY29uc29sZSBjYXBhYmlsaXR5IHRvIGl0LCBidXQgdGhhdCAKLXdpbGwgYmUgYSBub24tdHJpdmlhbCBlZmZvcnQuICBJIG1heSBiZSBhYmxlIHRvIGxldmVyYWdlIHRoZSBjb2RlIGluIAotSWxseWEgVmFlcycgVGNsL1RrIHBvcnQsIHdoaWNoIHdvdWxkIG1ha2UgaXQgZWFzaWVyLgotCi0xOS4gIG9zLmNoZGlyKCkgdXNlcyBFTVgncyBfY2hkaXIyKCksIHdoaWNoIHN1cHBvcnRzIGNoYW5naW5nIGJvdGggZHJpdmUgCi1hbmQgZGlyZWN0b3J5IGF0IG9uY2UuICBTaW1pbGFybHksIG9zLmdldGN3ZCgpIHVzZXMgRU1YJ3MgX2dldGN3ZCgpIAotd2hpY2ggcmV0dXJucyBkcml2ZSBhcyB3ZWxsIGFzIHBhdGguCi0KLTIwLiAgcHljb25maWcuaCBpcyBpbnN0YWxsZWQgaW4gdGhlIEluY2x1ZGUgc3ViZGlyZWN0b3J5IHdpdGggYWxsIAotb3RoZXIgaW5jbHVkZSBmaWxlcy4KLQotMjEuICB0aGUgZGVmYXVsdCBidWlsZCBleHBsaWNpdGx5IHNldHMgdGhlIG51bWJlciBvZiBmaWxlIGhhbmRsZXMgCi1hdmFpbGFibGUgdG8gYSBQeXRob24gcHJvY2VzcyB0byAyNTAuICBFTVggZGVmYXVsdCBpcyA0MCwgd2hpY2ggaXMgCi1pbnN1ZmZpY2llbnQgZm9yIHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgKHRlc3RfdGVtcGZpbGUpIHdoaWNoIAotdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMuCi0KLVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlIEVNWE9QVCBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgc2V0IEVNWE9QVD0taDI1MAotaXMgZXF1aXZhbGVudCB0byB0aGUgc2V0dGluZyBjdXJyZW50bHkgdXNlZC4gIFRoZSBlbXhiaW5kIHV0aWxpdHkgKGlmIHlvdSAKLWhhdmUgaXQgaW5zdGFsbGVkKSBjYW4gYWxzbyBiZSB1c2VkIHRvIHBlcm1hbmVudGx5IGNoYW5nZSB0aGUgc2V0dGluZyBpbiAKLXB5dGhvbi5leGUgLSBwbGVhc2UgcmVmZXIgdG8gdGhlIEVNWCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0yMi4gIGEgcHVyZSBweXRob24gc3RycHRpbWUgbW9kdWxlIGlzIG5vdyBwYXJ0IG9mIHRoZSBQeXRob24gc3RhbmRhcmQKLWxpYnJhcnksIHN1cGVyY2VkaW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgZXh0ZW5zaW9uIG1vZHVsZS4gVGhpcyBtb2R1bGUKLWxldmVyYWdlcyB0aGUgc3RyZnRpbWUgbW9kdWxlLCBhbmQgYXMgYSByZXN1bHQgdGVzdF9zdHJwdGltZSBmYWlscwotZHVlIHRvIHRoZSBFTVggc3RyZnRpbWUgYnVnIGluIGl0ZW0gMjAgYWJvdmUuCi0KLTIzLiAgdGVzdF9wb3NpeHBhdGggYXR0ZW1wdHMgdG8gZXhlcmNpc2UgdmFyaW91cyBQb3NpeCBwYXRoIHJlbGF0ZWQKLWZ1bmN0aW9uYWxpdHkuICBNb3N0IG9mIHRoZSBzdWItdGVzdHMgcGFzcywgYnV0IHRoZSAiaXNtb3VudCIgYW5kCi0ic2FtZXN0YXQiIHN1YnRlc3RzIGZhaWw6Ci0tIEVNWCBwcm92aWRlcyBub3Qgc2F0aXNmYWN0b3J5IG1vdW50IHBvaW50IGVtdWxhdGlvbiwgc28gImlzbW91bnQiCi0gIGNhbm5vdCBzdWNjZWVkOwotLSBFTVggZG9jdW1lbnRzIHRoYXQgc3VjY2Vzc2l2ZSBzdGF0KCkgY2FsbHMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudAotICByZXN1bHRzLCBzbyAic2FtZXN0YXQiIGNhbm5vdCBzdWNjZWVkLgotCi10ZXN0X3Bvc2l4cGF0aCBzaG91bGQgc2tpcCB0aGVzZSB0ZXN0cyBvbiBFTVguCi0KLTI0LiAgSSBoYXZlIHJlcG9ydHMgb2YgQml0VG9ycmVudCBub3Qgd29ya2luZy4gIEl0IGFwcGVhcnMgdGhhdCB0aGUKLUVNWCBzZWxlY3QoKSBlbXVsYXRpb24sIHBvc3NpYmx5IGluIGNvbmNlcnQgd2l0aCBidWdzIGluIHRoZSBUQ1AvSVAKLXN0YWNrLCBydW5zIGludG8gcHJvYmxlbXMgdW5kZXIgdGhlIHN0cmVzcyBpbXBvc2VkIGJ5IHRoaXMgYXBwbGljYXRpb24uCi1JIHRoaW5rIGl0IHN1ZmZpY2VzIHRvIHNheSB0aGF0IEJpdFRvcnJlbnQgaXMgYSBmYWlyIHN0cmVzcyB0ZXN0IG9mIGEKLXN5c3RlbSdzIG5ldHdvcmtpbmcgY2FwYWJpbGl0eS4KLQotMjUuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiBFTVggaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpbmsoKSBmdW5jdGlvbiwgSSd2ZSAKLWltcGxlbWVudGVkIGEgY3J1ZGUgUHl0aG9uIGVtdWxhdGlvbiwgaW4gdGhlIGZpbGUgCi1MaWIvcGxhdC1vczJlbXgvX2VteF9saW5rLnB5LiAgVGhpcyBpcyBpbXBvcnRlZCBpbnRvIHRoZSBvcyBtb2R1bGUsIGFuZCAKLWJlY29tZXMgYXZhaWxhYmxlIGFzIG9zLmxpbmsoKSBpbiB0aGUgbm9ybWFsIHdheS4KLQotVGhlIGVtdWxhdGlvbiBjb3BpZXMgdGhlIHNvdXJjZSBmaWxlIGluIGJpbmFyeSBtb2RlLCBhbmQgd2lsbCBmYWlsIGlmIAotZGlzayBzcGFjZSBpcyBleGhhdXN0ZWQuIFRoZSBjYWxsIGZhaWxzIGlmIHRoZSB0YXJnZXQgYWxyZWFkeSBleGlzdHMuIAotVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdG8gdGhyZWFkIHNhZmV0eSB3aXRoIHRoaXMgZW11bGF0aW9uIC0gYmV3YXJlIQotCi1UaGUgZW11bGF0aW9uIHdhcyB3cml0dGVuIHRvIHN1cHBvcnQgYSBsaW5rKCkgYmFzZWQgZmlsZSBsb2NraW5nIHN5c3RlbSAKLXVzZWQgaW4gR05VIE1haWxtYW4uCi0KLTI2LiAgQUZfVU5JWCBzb2NrZXRzLCBvdGhlcndpc2Uga25vd24gYXMgVW5peCBkb21haW4gc29ja2V0cywgYXJlIG5vdwotc3VwcG9ydGVkLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHNvbWUgdHJhcHMgYXJpc2luZyBmcm9tIHRoZQotaW1wbGVtZW50YXRpb24gaW4gSUJNJ3MgVENQL0lQIHN0YWNrOi0KLS0gdGhlIHBhdGggbmFtZSBtdXN0IHN0YXJ0IHdpdGggJ1xcc29ja2V0XFwnICgnL3NvY2tldC8nIHdvbid0IHdvcmshKSwKLSAgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxsIHBhdGggbmFtZSBsZXNzIHRoYW4gMTA4IGNoYXJhY3RlcnM7Ci0tIHVubGlrZSBVbml4LCB0aGUgc29ja2V0IGVuZHBvaW50cyBkb24ndCBleGlzdCBpbiB0aGUgZmlsZXN5c3RlbTsKLS0gYnkgZGVmYXVsdCwgc29ja2V0cyBhcmUgaW4gYmluYXJ5IG1vZGUuCi0KLTI3LiAgQXMgb2YgUHl0aG9uIDIuNCwgdGhlIG1weiwgcm90b3IgYW5kIHhyZWFkbGluZXMgbW9kdWxlcyBoYXZlIGJlZW4gCi1kcm9wcGVkIGZyb20gdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KLQotMjguICBUaGUgc3VicHJvY2VzcyBtb2R1bGUgd2FzIGFkZGVkIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHJlbGF0aXZlbHkKLWxhdGUgaW4gdGhlIDIuNCBkZXZlbG9wbWVudCBjeWNsZS4gIFVuZm9ydHVuYXRlbHkgSSBoYXZlbid0IGhhZCB0aGUKLXJvdW5kIHR1aXRzIHRvIGFkYXB0IHRoZSBtb2R1bGUgdG8gdGhlIEVNWCBlbnZpcm9ubWVudCB5ZXQsIGFuZAotdGVzdF9zdWJwcm9jZXNzIGhhcyBhIG51bWJlciBvZiBmYWlsdXJlcyBhcyBhIHJlc3VsdC4KLQotMjkuICBUaGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciB0aHJlYWRzIGhhcyBiZWVuIDY0ay4gIFRoaXMgaXMgcHJvdmluZwotaW5zdWZmaWNpZW50IGZvciBzb21lIGNvZGViYXNlcywgc3VjaCBhcyBab3BlLiAgVGhlIHRocmVhZCBzdGFjayBzaXplCi1zdGlsbCBkZWZhdWx0cyB0byA2NGssIGJ1dCB0aGlzIGNhbiBub3cgYmUgaW5jcmVhc2VkIHZpYSB0aGUgc3RhY2tfc2l6ZSgpCi1mdW5jdGlvbiBleHBvc2VkIGJ5IHRoZSB0aHJlYWRpbmcgJiB0aHJlYWQgbW9kdWxlcyBhcyB3ZWxsIGFzIGJ5IGRlZmluaW5nCi1USFJFQURfU1RBQ0tfU0laRSB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBpbiB0aGUgTWFrZWZpbGUgKHdoaWNoIGNvbnRhaW5zCi1hIGNvbW1lbnRlZCBvdXQgZGVmaW5pdGlvbiBmb3IgMTI4a0IgdGhyZWFkIHN0YWNrcykuICBJIGhhdmUgc2VlbgotcmVmZXJlbmNlcyB0byBoZWF2eSBab3BlL1Bsb25lIHVzYWdlIHJlcXVpcmluZyAxTUIgdGhyZWFkIHN0YWNrcyBvbgotRnJlZUJTRCBhbmQgTGludXgsIGJ1dCBkb3VidCB0aGF0IGZvciBtb3N0IGxpa2VseSB1c2FnZSBvbiBPUy8yIHRoYXQKLW1vcmUgdGhhbiAyNTZrQiBpcyBuZWNlc3NhcnkuICBUaGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgc3RhY2tzIChtYWluIAotYW5kIHRocmVhZCkgY2FuIHZhcnkgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiBvZiBnY2MKLWlzIHVzZWQgYWxvbmcgd2l0aCB0aGUgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBzZWxlY3RlZC4gIE5vdGUgdGhhdCB0aGUKLW1haW4gdGhyZWFkIHN0YWNrIHNpemUgaXMgc2V0IGR1cmluZyBsaW5raW5nIGFuZCBpcyBjdXJyZW50bHkgMk1CLgotCi0uLi4gcHJvYmFibHkgb3RoZXIgaXNzdWVzIHRoYXQgSSd2ZSBub3QgZW5jb3VudGVyZWQsIG9yIGRvbid0IHJlbWVtYmVyIDotKAotCi1JZiB5b3UgZW5jb3VudGVyIG90aGVyIGRpZmZpY3VsdGllcyB3aXRoIHRoaXMgcG9ydCwgd2hpY2ggY2FuIGJlIAotY2hhcmFjdGVyaXNlZCBhcyBwZWN1bGlhciB0byB0aGlzIHBvcnQgcmF0aGVyIHRoYW4gdG8gdGhlIFB5dGhvbiByZWxlYXNlLAotSSB3b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlbS4gIEhvd2V2ZXIgSSBjYW5ub3QgcHJvbWlzZSB0byBiZSBhYmxlIHRvIGRvIAotYW55dGhpbmcgdG8gcmVzb2x2ZSBzdWNoIHByb2JsZW1zLiAgU2VlIHRoZSBDb250YWN0IHNlY3Rpb24gYmVsb3cuLi4KLQotCi1UbyBkby4uLgotLS0tLS0tLS0KLQotSW4gbm8gcGFydGljdWxhciBvcmRlciBvZiBhcHBhcmVudCBpbXBvcnRhbmNlIG9yIGxpa2VsaWhvb2QuLi4KLQotLSBzdXBwb3J0IFRraW50ZXIgYW5kL29yIGFsdGVybmF0aXZlIEdVSSAod3hXaW5kb3dzPz8pCi0KLQotQ3JlZGl0cwotLS0tLS0tLQotCi1JbiBhZGRpdGlvbiB0byBwZW9wbGUgaWRlbnRpZmllZCBhYm92ZSwgSSdkIGxpa2UgdG8gdGhhbms6Ci0tIHRoZSBCREZMLCBHdWlkbyB2YW4gUm9zc3VtLCBhbmQgY3JldyBmb3IgUHl0aG9uOwotLSBEciBEYXZpZCBNZXJ0eiwgZm9yIHRyeWluZyBvdXQgYSBwcmUtcmVsZWFzZSBvZiB0aGlzIHBvcnQ7Ci0tIHRoZSBQeXRob24tbGlzdC9jb21wLmxhbmcucHl0aG9uIGNvbW11bml0eTsKLS0gSm9obiBQb2x0b3JhaywgZm9yIGlucHV0IGFib3V0IHB3ZC9ncnAuCi0KLUNvbnRhY3QKLS0tLS0tLS0KLQotQ29uc3RydWN0aXZlIGZlZWRiYWNrLCBuZWdhdGl2ZSBvciBwb3NpdGl2ZSwgYWJvdXQgdGhpcyBwb3J0IGlzIHdlbGNvbWUgCi1hbmQgc2hvdWxkIGJlIGFkZHJlc3NlZCB0byBtZSBhdCB0aGUgZS1tYWlsIGFkZHJlc3NlcyBiZWxvdy4KLQotSSBoYXZlIGEgcHJpdmF0ZSBtYWlsaW5nIGxpc3QgZm9yIGFubm91bmNlbWVudHMgb2YgZml4ZXMgJiB1cGRhdGVzIHRvIAotdGhpcyBwb3J0LiAgSWYgeW91IHdpc2ggdG8gcmVjZWl2ZSBzdWNoIGUtbWFpbCBhbm5vdW5jbWVudHMsIHBsZWFzZSBzZW5kIAotbWUgYW4gZS1tYWlsIHJlcXVlc3RpbmcgdGhhdCB5b3UgYmUgYWRkZWQgdG8gdGhpcyBsaXN0LgotCi1BbmRyZXcgTWFjSW50eXJlCi1FLW1haWw6IGFuZHltYWNAYnVsbHNleWUuYXBhbmEub3JnLmF1LCBvciBhbmR5bWFjQHBjdWcub3JnLmF1Ci1XZWI6ICAgIGh0dHA6Ly93d3cuYW5keW1hYy5vcmcvCi0KLTI4IEphbnVhcnksIDIwMDguCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvY29uZmlnLmMgYi9QQy9vczJlbXgvY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzkxMTAuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2NvbmZpZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1vZHVsZSBjb25maWd1cmF0aW9uICovCi0KLS8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGFibGUgb2YgYnVpbHQtaW4gbW9kdWxlcy4KLSAgIFNlZSBpbml0X2J1aWx0aW4oKSBpbiBpbXBvcnQuYy4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1leHRlcm4gdm9pZCBpbml0b3MyKCk7Ci1leHRlcm4gdm9pZCBpbml0c2lnbmFsKCk7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKCk7Ci0jZW5kaWYKLWV4dGVybiB2b2lkIGluaXRfY29kZWNzKCk7Ci1leHRlcm4gdm9pZCBpbml0X2NzdigpOwotZXh0ZXJuIHZvaWQgaW5pdF9sb2NhbGUoKTsKLWV4dGVybiB2b2lkIGluaXRfcmFuZG9tKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NyZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zeW10YWJsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF93ZWFrcmVmKCk7Ci1leHRlcm4gdm9pZCBpbml0YXJyYXkoKTsKLWV4dGVybiB2b2lkIGluaXRiaW5hc2NpaSgpOwotZXh0ZXJuIHZvaWQgaW5pdGNvbGxlY3Rpb25zKCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgoKTsKLWV4dGVybiB2b2lkIGluaXRkYXRldGltZSgpOwotZXh0ZXJuIHZvaWQgaW5pdGRsKCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8oKTsKLWV4dGVybiB2b2lkIGluaXRmY250bCgpOwotZXh0ZXJuIHZvaWQgaW5pdF9mdW5jdG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRfaGVhcHEoKTsKLWV4dGVybiB2b2lkIGluaXRpbWFnZW9wKCk7Ci1leHRlcm4gdm9pZCBpbml0aXRlcnRvb2xzKCk7Ci1leHRlcm4gdm9pZCBpbml0bWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdF9tZDUoKTsKLWV4dGVybiB2b2lkIGluaXRvcGVyYXRvcigpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhMjU2KCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYTUxMigpOwotZXh0ZXJuIHZvaWQgaW5pdF9zdHJ1Y3QoKTsKLWV4dGVybiB2b2lkIGluaXR0ZXJtaW9zKCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSgpOwotZXh0ZXJuIHZvaWQgaW5pdHh4c3VidHlwZSgpOwotZXh0ZXJuIHZvaWQgaW5pdHppcGltcG9ydCgpOwotI2lmICFIQVZFX0RZTkFNSUNfTE9BRElORwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXMoKTsKLWV4dGVybiB2b2lkIGluaXRfY3Vyc2VzX3BhbmVsKCk7Ci1leHRlcm4gdm9pZCBpbml0X3Rlc3RjYXBpKCk7Ci1leHRlcm4gdm9pZCBpbml0YnoyKCk7Ci1leHRlcm4gdm9pZCBpbml0ZnBlY3RsKCk7Ci1leHRlcm4gdm9pZCBpbml0ZnBldGVzdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHBhcnNlcigpOwotZXh0ZXJuIHZvaWQgaW5pdHB3ZCgpOwotZXh0ZXJuIHZvaWQgaW5pdHVuaWNvZGVkYXRhKCk7Ci1leHRlcm4gdm9pZCBpbml0emxpYigpOwotI2lmZGVmIFVTRV9TT0NLRVQKLWV4dGVybiB2b2lkIGluaXRfc29ja2V0KCk7Ci1leHRlcm4gdm9pZCBpbml0c2VsZWN0KCk7Ci0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KCk7Ci1leHRlcm4gdm9pZCBpbml0aW1wKCk7Ci1leHRlcm4gdm9pZCBpbml0Z2MoKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICB7Im9zMiIsIGluaXRvczJ9LAotICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICB7Il90aHJlYWQiLCBpbml0X3RocmVhZH0sCi0jZW5kaWYKLSAgICB7Il9jb2RlY3MiLCBpbml0X2NvZGVjc30sCi0gICAgeyJfY3N2IiwgaW5pdF9jc3Z9LAotICAgIHsiX2xvY2FsZSIsIGluaXRfbG9jYWxlfSwKLSAgICB7Il9yYW5kb20iLCBpbml0X3JhbmRvbX0sCi0gICAgeyJfc3JlIiwgaW5pdF9zcmV9LAotICAgIHsiX3N5bXRhYmxlIiwgaW5pdF9zeW10YWJsZX0sCi0gICAgeyJfd2Vha3JlZiIsIGluaXRfd2Vha3JlZn0sCi0gICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0gICAgeyJiaW5hc2NpaSIsIGluaXRiaW5hc2NpaX0sCi0gICAgeyJjb2xsZWN0aW9ucyIsIGluaXRjb2xsZWN0aW9uc30sCi0gICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgeyJkYXRldGltZSIsIGluaXRkYXRldGltZX0sCi0gICAgeyJkbCIsIGluaXRkbH0sCi0gICAgeyJlcnJubyIsIGluaXRlcnJub30sCi0gICAgeyJmY250bCIsIGluaXRmY250bH0sCi0gICAgeyJfZnVuY3Rvb2xzIiwgaW5pdF9mdW5jdG9vbHN9LAotICAgIHsiX2hlYXBxIiwgaW5pdF9oZWFwcX0sCi0gICAgeyJpbWFnZW9wIiwgaW5pdGltYWdlb3B9LAotICAgIHsiaXRlcnRvb2xzIiwgaW5pdGl0ZXJ0b29sc30sCi0gICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotICAgIHsiX3NoYTI1NiIsIGluaXRfc2hhMjU2fSwKLSAgICB7Il9zaGE1MTIiLCBpbml0X3NoYTUxMn0sCi0gICAgeyJfc3RydWN0IiwgaW5pdF9zdHJ1Y3R9LAotICAgIHsidGVybWlvcyIsIGluaXR0ZXJtaW9zfSwKLSAgICB7InRpbWUiLCBpbml0dGltZX0sCi0gICAgeyJ4eHN1YnR5cGUiLCBpbml0eHhzdWJ0eXBlfSwKLSAgICB7InppcGltcG9ydCIsIGluaXR6aXBpbXBvcnR9LAotI2lmICFIQVZFX0RZTkFNSUNfTE9BRElORwotICAgIHsiX2N1cnNlcyIsIGluaXRfY3Vyc2VzfSwKLSAgICB7Il9jdXJzZXNfcGFuZWwiLCBpbml0X2N1cnNlc19wYW5lbH0sCi0gICAgeyJfdGVzdGNhcGkiLCBpbml0X3Rlc3RjYXBpfSwKLSAgICB7ImJ6MiIsIGluaXRiejJ9LAotICAgIHsiZnBlY3RsIiwgaW5pdGZwZWN0bH0sCi0gICAgeyJmcGV0ZXN0IiwgaW5pdGZwZXRlc3R9LAotICAgIHsicGFyc2VyIiwgaW5pdHBhcnNlcn0sCi0gICAgeyJwd2QiLCBpbml0cHdkfSwKLSAgICB7InVuaWNvZGVkYXRhIiwgaW5pdHVuaWNvZGVkYXRhfSwKLSAgICB7InpsaWIiLCBpbml0emxpYn0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgIHsiX3NvY2tldCIsIGluaXRfc29ja2V0fSwKLSAgICB7InNlbGVjdCIsIGluaXRzZWxlY3R9LAotI2VuZGlmCi0jZW5kaWYKLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMiAtLSAqLwotCi0gICAgLyogVGhpcyBtb2R1bGUgImxpdmVzIGluIiB3aXRoIG1hcnNoYWwuYyAqLwotICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaXQgd2l0aCBpbXBvcnQuYyAqLwotICAgIHsiX2ltcCIsIGluaXRpbXB9LAotCi0gICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgeyJidWlsdGlucyIsIE5VTEx9LAotICAgIHsic3lzIiwgTlVMTH0sCi0KLSAgICAvKiBUaGlzIGxpdmVzIGluIGdjbW9kdWxlLmMgKi8KLSAgICB7ImdjIiwgaW5pdGdjfSwKLQotICAgIC8qIFNlbnRpbmVsICovCi0gICAgezAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmMgYi9QQy9vczJlbXgvZGxmY24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYTljZC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uYworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTUgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG9yIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcyBvcgotQ05SSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi1wZXJtaXNzaW9uLgotCi1XaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KLWlzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMKLShDTlJJKSBhdCB0aGUgSW50ZXJuZXQgYWRkcmVzcyBmdHA6Ly9mdHAucHl0aG9uLm9yZy4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEFORCBDTlJJIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgKLVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICi1DRU5UUlVNIE9SIENOUkkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBkbG9wZW4oKSAtIFVuaXgtbGlrZSBkeW5hbWljIGxpbmtpbmcKLSAqIGVtdWxhdGlvbiBmdW5jdGlvbnMgZm9yIE9TLzIgdXNpbmcgRG9zTG9hZE1vZHVsZSgpIGFuZCBjb21wYW55LgotICovCi0KLSNkZWZpbmUgSU5DTF9ET1MKLSNkZWZpbmUgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgSU5DTF9ET1NTRVNNR1IKLSNkZWZpbmUgSU5DTF9XSU5QUk9HUkFNTElTVAotI2RlZmluZSBJTkNMX1dJTkZSQU1FTUdSCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgotCi10eXBlZGVmIHN0cnVjdCBfdHJhY2tfcmVjIHsKLSAgICBjaGFyICpuYW1lOwotICAgIEhNT0RVTEUgaGFuZGxlOwotICAgIHZvaWQgKmlkOwotICAgIHN0cnVjdCBfdHJhY2tfcmVjICpuZXh0OwotfSB0RExMY2hhaW4sICpETExjaGFpbjsKLQotc3RhdGljIERMTGNoYWluIGRsbG9hZCA9IE5VTEw7ICAvKiBBIHNpbXBsZSBjaGFpbmVkIGxpc3Qgb2YgRExMIG5hbWVzICovCi1zdGF0aWMgY2hhciBkbGVyciBbMjU2XTsgICAgICAgIC8qIGxhc3QgZXJyb3IgdGV4dCBzdHJpbmcgKi8KLXN0YXRpYyB2b2lkICpsYXN0X2lkOwotCi1zdGF0aWMgRExMY2hhaW4gZmluZF9pZCh2b2lkICppZCkKLXsKLSAgICBETExjaGFpbiB0bXA7Ci0KLSAgICBmb3IgKHRtcCA9IGRsbG9hZDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCi0gICAgICAgIGlmIChpZCA9PSB0bXAtPmlkKQotICAgICAgICAgICAgcmV0dXJuIHRtcDsKLQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKQotewotICAgIEhNT0RVTEUgaG07Ci0gICAgRExMY2hhaW4gdG1wOwotICAgIGNoYXIgZXJyWzI1Nl07Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCByYyA9IDAsIHNldF9jaGFpbiA9IDA7Ci0KLSAgICBmb3IgKHRtcCA9IGRsbG9hZDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCi0gICAgICAgIGlmIChzdHJuaWNtcCh0bXAtPm5hbWUsIGZpbGVuYW1lLCA5OTkpID09IDApCi0gICAgICAgICAgICBicmVhazsKLQotICAgIGlmICghdG1wKQotICAgIHsKLSAgICAgICAgdG1wID0gKERMTGNoYWluKSBtYWxsb2Moc2l6ZW9mKHRETExjaGFpbikpOwotICAgICAgICBpZiAoIXRtcCkKLSAgICAgICAgICAgIGdvdG8gbm9tZW07Ci0gICAgICAgIHRtcC0+bmFtZSA9IHN0cmR1cChmaWxlbmFtZSk7Ci0gICAgICAgIHRtcC0+bmV4dCA9IGRsbG9hZDsKLSAgICAgICAgc2V0X2NoYWluID0gMTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zTG9hZE1vZHVsZSgoUFNaKSZlcnIsIHNpemVvZihlcnIpLCBmaWxlbmFtZSwgJmhtKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICB0bXAtPmhhbmRsZSA9IGhtOwotICAgICAgICAgICAgaWYgKHNldF9jaGFpbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkbwotICAgICAgICAgICAgICAgICAgICBsYXN0X2lkKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChsYXN0X2lkID09IDApIHx8IChmaW5kX2lkKGxhc3RfaWQpKSk7Ci0gICAgICAgICAgICAgICAgdG1wLT5pZCA9IGxhc3RfaWQ7Ci0gICAgICAgICAgICAgICAgZGxsb2FkID0gdG1wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRtcC0+aWQ7Ci0gICAgICAgIGNhc2UgRVJST1JfRklMRV9OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAibW9kdWxlIGAlcycgbm90IGZvdW5kIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVM6Ci0gICAgICAgIGNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6Ci1ub21lbToKLSAgICAgICAgICAgIGVycnR4dCA9ICJvdXQgb2Ygc3lzdGVtIHJlc291cmNlcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgotICAgICAgICAgICAgZXJydHh0ID0gImFjY2VzcyBkZW5pZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfQkFEX0ZPUk1BVDoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX1NFR01FTlRfTlVNQkVSOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfT1JESU5BTDoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX01PRFVMRVRZUEU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9FWEVfU0lHTkFUVVJFOgotICAgICAgICBjYXNlIEVSUk9SX0VYRV9NQVJLRURfSU5WQUxJRDoKLSAgICAgICAgY2FzZSBFUlJPUl9JVEVSQVRFRF9EQVRBX0VYQ0VFRFNfNjRLOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTUlOQUxMT0NTSVpFOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHRFBMOgotICAgICAgICBjYXNlIEVSUk9SX0FVVE9EQVRBU0VHX0VYQ0VFRFNfNjRLOgotICAgICAgICBjYXNlIEVSUk9SX1JFTE9DU1JDX0NIQUlOX0VYQ0VFRFNfU0VHTElNSVQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiaW52YWxpZCBtb2R1bGUgZm9ybWF0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTkFNRToKLSAgICAgICAgICAgIGVycnR4dCA9ICJmaWxlbmFtZSBkb2Vzbid0IG1hdGNoIG1vZHVsZSBuYW1lIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgotICAgICAgICBjYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgotICAgICAgICAgICAgZXJydHh0ID0gInNoYXJpbmcgdmlvbGF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0lOSVRfUk9VVElORV9GQUlMRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAibW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJjYXVzZSBgJXMnLCBlcnJvciBjb2RlID0gJWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNucHJpbnRmKGRsZXJyLCBzaXplb2YoZGxlcnIpLCBlcnJ0eHQsICZlcnIsIHJjKTsKLSAgICBpZiAodG1wKQotICAgIHsKLSAgICAgICAgaWYgKHRtcC0+bmFtZSkKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCkKLXsKLSAgICBpbnQgcmMgPSAwOwotICAgIFBGTiBhZGRyOwotICAgIGNoYXIgKmVycnR4dDsKLSAgICBpbnQgc3ltb3JkID0gMDsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgaWYgKCpzeW1ib2wgPT0gJyMnKQotICAgICAgICBzeW1vcmQgPSBhdG9pKHN5bWJvbCArIDEpOwotCi0gICAgc3dpdGNoIChyYyA9IERvc1F1ZXJ5UHJvY0FkZHIodG1wLT5oYW5kbGUsIHN5bW9yZCwgc3ltYm9sLCAmYWRkcikpCi0gICAgewotICAgICAgICBjYXNlIE5PX0VSUk9SOgotICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYWRkcjsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRToKLWludl9oYW5kbGU6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiaW52YWxpZCBtb2R1bGUgaGFuZGxlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1BST0NfTk9UX0ZPVU5EOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTkFNRToKLSAgICAgICAgICAgIGVycnR4dCA9ICJubyBzeW1ib2wgYCVzJyBpbiBtb2R1bGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic3ltYm9sIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgc3ltYm9sLCByYyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSkKLXsKLSAgICBpbnQgcmM7Ci0gICAgRExMY2hhaW4gdG1wID0gZmluZF9pZChoYW5kbGUpOwotCi0gICAgaWYgKCF0bXApCi0gICAgICAgIGdvdG8gaW52X2hhbmRsZTsKLQotICAgIHN3aXRjaCAocmMgPSBEb3NGcmVlTW9kdWxlKHRtcC0+aGFuZGxlKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICBmcmVlKHRtcC0+bmFtZSk7Ci0gICAgICAgICAgICBkbGxvYWQgPSB0bXAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRToKLWludl9oYW5kbGU6Ci0gICAgICAgICAgICBzdHJjcHkoZGxlcnIsICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0FDQ0VTUzoKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImFjY2VzcyBkZW5pZWQiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3IoKQotewotICAgIHJldHVybiBkbGVycjsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGZjbi5oIGIvUEMvb3MyZW14L2RsZmNuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2FlNjkuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsZmNuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTUgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG9yIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcyBvcgotQ05SSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi1wZXJtaXNzaW9uLgotCi1XaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KLWlzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMKLShDTlJJKSBhdCB0aGUgSW50ZXJuZXQgYWRkcmVzcyBmdHA6Ly9mdHAucHl0aG9uLm9yZy4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEFORCBDTlJJIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgKLVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICi1DRU5UUlVNIE9SIENOUkkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBkbG9wZW4oKSAtIFVuaXgtbGlrZSBkeW5hbWljIGxpbmtpbmcKLSAqIGVtdWxhdGlvbiBmdW5jdGlvbnMgZm9yIE9TLzIgdXNpbmcgRG9zTG9hZE1vZHVsZSgpIGFuZCBjb21wYW55LgotICovCi0KLSNpZm5kZWYgX0RMRkNOX0gKLSNkZWZpbmUgX0RMRkNOX0gKLQotLyogbG9hZCBhIGR5bmFtaWMtbGluayBsaWJyYXJ5IGFuZCByZXR1cm4gaGFuZGxlICovCi12b2lkICpkbG9wZW4oY2hhciAqZmlsZW5hbWUsIGludCBmbGFncyk7Ci0KLS8qIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGBzeW1ib2wnIGluIERMTCAqLwotdm9pZCAqZGxzeW0odm9pZCAqaGFuZGxlLCBjaGFyICpzeW1ib2wpOwotCi0vKiBmcmVlIGR5bmFtaWNhbGx5LWxpbmtlZCBsaWJyYXJ5ICovCi1pbnQgZGxjbG9zZSh2b2lkICpoYW5kbGUpOwotCi0vKiByZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyBsYXN0IG9jY3VycmVkIGRsIGVycm9yICovCi1jaGFyICpkbGVycm9yKHZvaWQpOwotCi0jZW5kaWYgLyogIV9ETEZDTl9IICovCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxsZW50cnkuYyBiL1BDL29zMmVteC9kbGxlbnRyeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NjYTFjLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGxlbnRyeS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgUHl0aG9uIDIuMyBjb3JlIERMTC4KLSAqLwotCi0jZGVmaW5lIE5VTEwgMAotCi0jZGVmaW5lIFJFRihzKSAgZXh0ZXJuIHZvaWQgcygpOyB2b2lkICpfX19fcmVmXyMjcyA9ICZzOwotCi0vKiBNYWtlIHJlZmVyZW5jZXMgdG8gaW1wb3J0ZWQgc3ltYm9scyB0byBwdWxsIHRoZW0gZnJvbSBzdGF0aWMgbGlicmFyeSAqLwotUkVGKFB5X01haW4pOwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLWV4dGVybiBpbnQgX0NSVF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX0NSVF90ZXJtKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19jdG9yZHRvckluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9yVGVybSh2b2lkKTsKLQotdW5zaWduZWQgbG9uZyBfRExMX0luaXRUZXJtKHVuc2lnbmVkIGxvbmcgbW9kX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBmbGFnKQotewotICAgIHN3aXRjaCAoZmxhZykKLSAgICB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmIChfQ1JUX2luaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIF9fY3RvcmR0b3JJbml0KCk7Ci0KLSAgICAgICAgICAgIC8qIElnbm9yZSBmYXRhbCBzaWduYWxzICovCi0gICAgICAgICAgICBzaWduYWwoU0lHU0VHViwgU0lHX0lHTik7Ci0gICAgICAgICAgICBzaWduYWwoU0lHRlBFLCBTSUdfSUdOKTsKLQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgX19jdG9yZHRvclRlcm0oKTsKLSAgICAgICAgICAgIF9DUlRfdGVybSgpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9nZXRwYXRocC5jIGIvUEMvb3MyZW14L2dldHBhdGhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzM3NzQuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2dldHBhdGhwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotCi0vKiBSZXR1cm4gdGhlIGluaXRpYWwgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLwotLyogVGhpcyB2ZXJzaW9uIHVzZWQgYnkgT1MvMitFTVggKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgUEFUSCBSVUxFUyBGT1IgT1MvMitFTVg6Ci0gICBUaGlzIGRlc2NyaWJlcyBob3cgc3lzLnBhdGggaXMgZm9ybWVkIG9uIE9TLzIrRU1YLiAgSXQgZGVzY3JpYmVzIHRoZQotICAgZnVuY3Rpb25hbGl0eSwgbm90IHRoZSBpbXBsZW1lbnRhdGlvbiAoaWUsIHRoZSBvcmRlciBpbiB3aGljaCB0aGVzZQotICAgYXJlIGFjdHVhbGx5IGZldGNoZWQgaXMgZGlmZmVyZW50KQotCi0gICAqIFB5dGhvbiBhbHdheXMgYWRkcyBhbiBlbXB0eSBlbnRyeSBhdCB0aGUgc3RhcnQsIHdoaWNoIGNvcnJlc3BvbmRzCi0gICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotICAgKiBJZiB0aGUgUFlUSE9OUEFUSCBlbnYuIHZhci4gZXhpc3RzLCBpdHMgZW50cmllcyBhcmUgYWRkZWQgbmV4dC4KLQotICAgKiBXZSBhdHRlbXB0IHRvIGxvY2F0ZSB0aGUgIlB5dGhvbiBIb21lIiAtIGlmIHRoZSBQWVRIT05IT01FIGVudiB2YXIKLSAgICAgaXMgc2V0LCB3ZSBiZWxpZXZlIGl0LiAgT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIHBhdGggb2Ygb3VyIGhvc3QgLkVYRSdzCi0gICAgIHRvIHRyeSBhbmQgbG9jYXRlIG91ciAibGFuZG1hcmsiIChsaWJcXG9zLnB5KSBhbmQgZGVkdWNlIG91ciBob21lLgotICAgICAtIElmIHdlIERPIGhhdmUgYSBQeXRob24gSG9tZTogVGhlIHJlbGV2YW50IHN1Yi1kaXJlY3RvcmllcyAoTGliLAotICAgICAgIHBsYXQtd2luLCBldGMpIGFyZSBiYXNlZCBvbiB0aGUgUHl0aG9uIEhvbWUKLSAgICAgLSBJZiB3ZSBETyBOT1QgaGF2ZSBhIFB5dGhvbiBIb21lLCB0aGUgY29yZSBQeXRob24gUGF0aCBpcwotICAgICAgIGxvYWRlZCBmcm9tIHRoZSByZWdpc3RyeS4gIFRoaXMgaXMgdGhlIG1haW4gUHl0aG9uUGF0aCBrZXksCi0gICAgICAgYW5kIGJvdGggSEtMTSBhbmQgSEtDVSBhcmUgY29tYmluZWQgdG8gZm9ybSB0aGUgcGF0aCkKLQotICAgKiBJZmYgLSB3ZSBjYW4gbm90IGxvY2F0ZSB0aGUgUHl0aG9uIEhvbWUsIGFuZCBoYXZlIG5vdCBoYWQgYSBQWVRIT05QQVRICi0gICAgIHNwZWNpZmllZCAoaWUsIHdlIGhhdmUgX25vdGhpbmdfIHdlIGNhbiBhc3N1bWUgaXMgYSBnb29kIHBhdGgpLCBhCi0gICAgIGRlZmF1bHQgcGF0aCB3aXRoIHJlbGF0aXZlIGVudHJpZXMgaXMgdXNlZCAoZWcuIC5cTGliOy5ccGxhdC13aW4sIGV0YykKLQotCi0gIFRoZSBlbmQgcmVzdWx0IG9mIGFsbCB0aGlzIGlzOgotICAqIFdoZW4gcnVubmluZyBweXRob24uZXhlLCBvciBhbnkgb3RoZXIgLmV4ZSBpbiB0aGUgbWFpbiBQeXRob24gZGlyZWN0b3J5Ci0gICAgKGVpdGhlciBhbiBpbnN0YWxsZWQgdmVyc2lvbiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgUENidWlsZCBkaXJlY3RvcnkpLAotICAgIHRoZSBjb3JlIHBhdGggaXMgZGVkdWNlZC4KLQotICAqIFdoZW4gUHl0aG9uIGlzIGhvc3RlZCBpbiBhbm90aGVyIGV4ZSAoZGlmZmVyZW50IGRpcmVjdG9yeSwgZW1iZWRkZWQgdmlhCi0gICAgQ09NLCBldGMpLCB0aGUgUHl0aG9uIEhvbWUgd2lsbCBub3QgYmUgZGVkdWNlZCwgc28gdGhlIGNvcmUgcGF0aCBmcm9tCi0gICAgdGhlIHJlZ2lzdHJ5IGlzIHVzZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMgImluIHRoZSByZWdpc3RyeSBhcmUKLSAgICBhbHdheXMgcmVhZC4KLQotICAqIElmIFB5dGhvbiBjYW4ndCBmaW5kIGl0cyBob21lIGFuZCB0aGVyZSBpcyBubyByZWdpc3RyeSAoZWcsIGZyb3plbgotICAgIGV4ZSwgc29tZSB2ZXJ5IHN0cmFuZ2UgaW5zdGFsbGF0aW9uIHNldHVwKSB5b3UgZ2V0IGEgcGF0aCB3aXRoCi0gICAgc29tZSBkZWZhdWx0LCBidXQgcmVsYXRpdmUsIHBhdGhzLgotCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZuZGVmIFBZT1NfT1MyCi0jZXJyb3IgVGhpcyBmaWxlIG9ubHkgY29tcGlsYWJsZSBvbiBPUy8yCi0jZW5kaWYKLQotI2RlZmluZSBJTkNMX0RPUwotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogVGhlIGFwcHJvYWNoIGlzIGFuIGFkYXB0YXRpb24gZm9yIFdpbmRvd3Mgb2YgdGhlIHN0cmF0ZWd5IHVzZWQgaW4KLSAqIC4uL01vZHVsZXMvZ2V0cGF0aC5jOyBpdCB1c2VzIHRoZSBXaW5kb3dzIFJlZ2lzdHJ5IGFzIG9uZSBvZiBpdHMKLSAqIGluZm9ybWF0aW9uIHNvdXJjZXMuCi0gKi8KLQotI2lmbmRlZiBMQU5ETUFSSwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIExBTkRNQVJLICJsaWIvb3MucHkiCi0jZWxzZQotI2RlZmluZSBMQU5ETUFSSyAibGliXFxvcy5weSIKLSNlbmRpZgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotCi0KLXN0YXRpYyBpbnQKLWlzX3NlcChjaGFyIGNoKSAvKiBkZXRlcm1pbmUgaWYgImNoIiBpcyBhIHNlcGFyYXRvciBjaGFyYWN0ZXIgKi8KLXsKLSNpZmRlZiBBTFRTRVAKLSAgICByZXR1cm4gY2ggPT0gU0VQIHx8IGNoID09IEFMVFNFUDsKLSNlbHNlCi0gICAgcmV0dXJuIGNoID09IFNFUDsKLSNlbmRpZgotfQotCi0vKiBhc3N1bWVzICdkaXInIG51bGwgdGVybWluYXRlZCBpbiBib3VuZHMuCi0gKiBOZXZlciB3cml0ZXMgYmV5b25kIGV4aXN0aW5nIHRlcm1pbmF0b3IuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZWR1Y2UoY2hhciAqZGlyKQotewotICAgIHNpemVfdCBpID0gc3RybGVuKGRpcik7Ci0gICAgd2hpbGUgKGkgPiAwICYmICFpc19zZXAoZGlyW2ldKSkKLSAgICAgICAgLS1pOwotICAgIGRpcltpXSA9ICdcMCc7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLS8qIElzIG1vZHVsZSAgKGNoZWNrIGZvciAucHljLy5weW8gdG9vKQotICogQXNzdW1lcyAnZmlsZW5hbWUnIE1BWFBBVEhMRU4rMSBieXRlcyBsb25nIC0KLSAqIG1heSBleHRlbmQgJ2ZpbGVuYW1lJyBieSBvbmUgY2hhcmFjdGVyLgotICovCi1zdGF0aWMgaW50Ci1pc21vZHVsZShjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBpZiAoZXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvKiBDaGVjayBmb3IgdGhlIGNvbXBpbGVkIHZlcnNpb24gb2YgcHJlZml4LiAqLwotICAgIGlmIChzdHJsZW4oZmlsZW5hbWUpIDwgTUFYUEFUSExFTikgewotICAgICAgICBzdHJjYXQoZmlsZW5hbWUsIFB5X09wdGltaXplRmxhZyA/ICJvIiA6ICJjIik7Ci0gICAgICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiBBZGQgYSBwYXRoIGNvbXBvbmVudCwgYnkgYXBwZW5kaW5nIHN0dWZmIHRvIGJ1ZmZlci4KLSAgIGJ1ZmZlciBtdXN0IGhhdmUgYXQgbGVhc3QgTUFYUEFUSExFTiArIDEgYnl0ZXMgYWxsb2NhdGVkLCBhbmQgY29udGFpbiBhCi0gICBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIChub3QgY291bnRpbmcKLSAgIHRoZSB0cmFpbGluZyBOVUwpLiAgSXQncyBhIGZhdGFsIGVycm9yIGlmIGl0IGNvbnRhaW5zIGEgc3RyaW5nIGxvbmdlciB0aGFuCi0gICB0aGF0IChjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCEpLiAgSWYgdGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGl0J3MKLSAgIGd1YXJhbnRlZWQgdGhhdCBidWZmZXIgd2lsbCBzdGlsbCBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUKLSAgIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIGF0IGV4aXQuICBJZiBzdHVmZiBpcyB0b28gbG9uZywgb25seSBhcyBtdWNoIG9mCi0gICBzdHVmZiBhcyBmaXRzIHdpbGwgYmUgYXBwZW5kZWQuCi0qLwotCi1zdGF0aWMgdm9pZAotam9pbihjaGFyICpidWZmZXIsIGNoYXIgKnN0dWZmKQotewotICAgIHNpemVfdCBuLCBrOwotICAgIGlmIChpc19zZXAoc3R1ZmZbMF0pKQotICAgICAgICBuID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbiA9IHN0cmxlbihidWZmZXIpOwotICAgICAgICBpZiAobiA+IDAgJiYgIWlzX3NlcChidWZmZXJbbi0xXSkgJiYgbiA8IE1BWFBBVEhMRU4pCi0gICAgICAgICAgICBidWZmZXJbbisrXSA9IFNFUDsKLSAgICB9Ci0gICAgaWYgKG4gPiBNQVhQQVRITEVOKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGpvaW5wYXRoKCkiKTsKLSAgICBrID0gc3RybGVuKHN0dWZmKTsKLSAgICBpZiAobiArIGsgPiBNQVhQQVRITEVOKQotICAgICAgICBrID0gTUFYUEFUSExFTiAtIG47Ci0gICAgc3RybmNweShidWZmZXIrbiwgc3R1ZmYsIGspOwotICAgIGJ1ZmZlcltuK2tdID0gJ1wwJzsKLX0KLQotLyogZ290bGFuZG1hcmsgb25seSBjYWxsZWQgYnkgc2VhcmNoX2Zvcl9wcmVmaXgsIHdoaWNoIGVuc3VyZXMKLSAqICdwcmVmaXgnIGlzIG51bGwgdGVybWluYXRlZCBpbiBib3VuZHMuICBqb2luKCkgZW5zdXJlcwotICogJ2xhbmRtYXJrJyBjYW4gbm90IG92ZXJmbG93IHByZWZpeCBpZiB0b28gbG9uZy4KLSAqLwotc3RhdGljIGludAotZ290bGFuZG1hcmsoY2hhciAqbGFuZG1hcmspCi17Ci0gICAgaW50IG4sIG9rOwotCi0gICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgIGpvaW4ocHJlZml4LCBsYW5kbWFyayk7Ci0gICAgb2sgPSBpc21vZHVsZShwcmVmaXgpOwotICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgcmV0dXJuIG9rOwotfQotCi0vKiBhc3N1bWVzIGFyZ3YwX3BhdGggaXMgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcsIGFscmVhZHkgXDAgdGVybSdkLgotICogYXNzdW1wdGlvbiBwcm92aWRlZCBieSBvbmx5IGNhbGxlciwgY2FsY3VsYXRlX3BhdGgoKQotICovCi1zdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeChjaGFyICphcmd2MF9wYXRoLCBjaGFyICpsYW5kbWFyaykKLXsKLSAgICAvKiBTZWFyY2ggZnJvbSBhcmd2MF9wYXRoLCB1bnRpbCBsYW5kbWFyayBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgaWYgKGdvdGxhbmRtYXJrKGxhbmRtYXJrKSkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nZXRfcHJvZ3BhdGgodm9pZCkKLXsKLSAgICBleHRlcm4gY2hhciAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7Ci0gICAgY2hhciAqcGF0aCA9IGdldGVudigiUEFUSCIpOwotICAgIGNoYXIgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwotCi0gICAgUFBJQiBwaWI7Ci0gICAgaWYgKChEb3NHZXRJbmZvQmxvY2tzKE5VTEwsICZwaWIpID09IDApICYmCi0gICAgICAgIChEb3NRdWVyeU1vZHVsZU5hbWUocGliLT5waWJfaG10ZSwgc2l6ZW9mKHByb2dwYXRoKSwgcHJvZ3BhdGgpID09IDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJvZyA9PSBOVUxMIHx8ICpwcm9nID09ICdcMCcpCi0gICAgICAgIHByb2cgPSAicHl0aG9uIjsKLQotICAgIC8qIElmIHRoZXJlIGlzIG5vIHNsYXNoIGluIHRoZSBhcmd2MCBwYXRoLCB0aGVuIHdlIGhhdmUgdG8KLSAgICAgKiBhc3N1bWUgcHl0aG9uIGlzIG9uIHRoZSB1c2VyJ3MgJFBBVEgsIHNpbmNlIHRoZXJlJ3Mgbm8KLSAgICAgKiBvdGhlciB3YXkgdG8gZmluZCBhIGRpcmVjdG9yeSB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uICBJZgotICAgICAqICRQQVRIIGlzbid0IGV4cG9ydGVkLCB5b3UgbG9zZS4KLSAgICAgKi8KLSNpZmRlZiBBTFRTRVAKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkgfHwgc3RyY2hyKHByb2csIEFMVFNFUCkpCi0jZWxzZQotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSkKLSNlbmRpZgotICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKLSAgICBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBjaGFyICpkZWxpbSA9IHN0cmNocihwYXRoLCBERUxJTSk7Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIHBhdGg7Ci0gICAgICAgICAgICAgICAgLyogZW5zdXJlIHdlIGNhbid0IG92ZXJ3cml0ZSBidWZmZXIgKi8KLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgICAgICAgICBsZW4gPSBtaW4oTUFYUEFUSExFTixsZW4pOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBsZW4gPSBNQVhQQVRITEVOIDwgbGVuID8gTUFYUEFUSExFTiA6IGxlbjsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIE1BWFBBVEhMRU4pOwotCi0gICAgICAgICAgICAvKiBqb2luKCkgaXMgc2FmZSBmb3IgTUFYUEFUSExFTisxIHNpemUgYnVmZmVyICovCi0gICAgICAgICAgICBqb2luKHByb2dwYXRoLCBwcm9nKTsKLSAgICAgICAgICAgIGlmIChleGlzdHMocHJvZ3BhdGgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWRlbGltKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9wYXRoKHZvaWQpCi17Ci0gICAgY2hhciBhcmd2MF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqYnVmOwotICAgIHNpemVfdCBidWZzejsKLSAgICBjaGFyICpweXRob25ob21lID0gUHlfR2V0UHl0aG9uSG9tZSgpOwotICAgIGNoYXIgKmVudnBhdGggPSBnZXRlbnYoIlBZVEhPTlBBVEgiKTsKLSAgICBjaGFyIHppcF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgc2l6ZV90IGxlbjsKLQotICAgIGdldF9wcm9ncGF0aCgpOwotICAgIC8qIHByb2dwYXRoIGd1YXJhbnRlZWQgXDAgdGVybWluYXRlZCBpbiBNQVhQQVRIKzEgYnl0ZXMuICovCi0gICAgc3RyY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoKTsKLSAgICByZWR1Y2UoYXJndjBfcGF0aCk7Ci0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCB8fCAqcHl0aG9uaG9tZSA9PSAnXDAnKSB7Ci0gICAgICAgIGlmIChzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBMQU5ETUFSSykpCi0gICAgICAgICAgICBweXRob25ob21lID0gcHJlZml4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBweXRob25ob21lID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBzdHJuY3B5KHByZWZpeCwgcHl0aG9uaG9tZSwgTUFYUEFUSExFTik7Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIENhbGN1bGF0ZSB6aXAgYXJjaGl2ZSBwYXRoICovCi0gICAgc3RybmNweSh6aXBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwotICAgIHppcF9wYXRoW01BWFBBVEhMRU5dID0gJ1wwJzsKLSAgICBsZW4gPSBzdHJsZW4oemlwX3BhdGgpOwotICAgIGlmIChsZW4gPiA0KSB7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0zXSA9ICd6JzsgIC8qIGNoYW5nZSBlbmRpbmcgdG8gInppcCIgKi8KLSAgICAgICAgemlwX3BhdGhbbGVuLTJdID0gJ2knOwotICAgICAgICB6aXBfcGF0aFtsZW4tMV0gPSAncCc7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6aXBfcGF0aFswXSA9IDA7Ci0gICAgfQotCi0gICAgLyogV2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXRoIGZyb20gdGhlIGZvbGxvd2luZyBwYXJ0cy4KLSAgICAgKiAoMSkgdGhlIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldDsKLSAgICAgKiAoMikgdGhlIHppcCBhcmNoaXZlIGZpbGUgcGF0aDsKLSAgICAgKiAoMykgdGhlIFBZVEhPTlBBVEggY29uZmlnIG1hY3JvLCB3aXRoIHRoZSBsZWFkaW5nICIuIgotICAgICAqICAgICBvZiBlYWNoIGNvbXBvbmVudCByZXBsYWNlZCB3aXRoIHB5dGhvbmhvbWUsIGlmIHNldDsKLSAgICAgKiAoNCkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIChhcmd2MF9wYXRoKS4KLSAgICAgKiBUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGNhbGN1bGF0ZXMgIzMgZmlyc3QuCi0gICAgICovCi0KLSAgICAvKiBDYWxjdWxhdGUgc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovCi0gICAgaWYgKHB5dGhvbmhvbWUgIT0gTlVMTCkgewotICAgICAgICBjaGFyICpwOwotICAgICAgICBidWZzeiA9IDE7Ci0gICAgICAgIGZvciAocCA9IFBZVEhPTlBBVEg7ICpwOyBwKyspIHsKLSAgICAgICAgICAgIGlmICgqcCA9PSBERUxJTSkKLSAgICAgICAgICAgICAgICBidWZzeisrOyAvKiBudW1iZXIgb2YgREVMSU0gcGx1cyBvbmUgKi8KLSAgICAgICAgfQotICAgICAgICBidWZzeiAqPSBzdHJsZW4ocHl0aG9uaG9tZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgYnVmc3ogPSAwOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihQWVRIT05QQVRIKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oemlwX3BhdGgpICsgMTsKLSAgICBpZiAoZW52cGF0aCAhPSBOVUxMKQotICAgICAgICBidWZzeiArPSBzdHJsZW4oZW52cGF0aCkgKyAxOwotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBlbnZpcm9ubWVudCAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgcGF0aC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgZW52cGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0gICAgaWYgKHppcF9wYXRoWzBdKSB7Ci0gICAgICAgIHN0cmNweShidWYsIHppcF9wYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLQotICAgIGlmIChweXRob25ob21lID09IE5VTEwpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgUFlUSE9OUEFUSCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqcCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBxID0gc3RyY2hyKHAsIERFTElNKTsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuID0gcS1wOwotICAgICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIGlzX3NlcChwWzFdKSkgewotICAgICAgICAgICAgICAgIHN0cmNweShidWYsIHB5dGhvbmhvbWUpOwotICAgICAgICAgICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBuLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgcCwgbik7Ci0gICAgICAgICAgICBidWYgKz0gbjsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgICAgIHAgPSBxKzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFyZ3YwX3BhdGgpIHsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIHN0cmNweShidWYsIGFyZ3YwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgKmJ1ZiA9ICdcMCc7Ci19Ci0KLQotLyogRXh0ZXJuYWwgaW50ZXJmYWNlICovCi0KLWNoYXIgKgotUHlfR2V0UGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotICAgIHJldHVybiBtb2R1bGVfc2VhcmNoX3BhdGg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5X0dldFByZWZpeCgpOwotfQotCi1jaGFyICoKLVB5X0dldFByb2dyYW1GdWxsUGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotICAgIHJldHVybiBwcm9ncGF0aDsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weWNvbmZpZy5oIGIvUEMvb3MyZW14L3B5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjEwNWEuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0jZXJyb3IgIlBFUCAxMTogT1MvMiBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0KLS8qIGNvbmZpZy5oLgotICogQXQgc29tZSB0aW1lIGluIHRoZSBwYXN0LCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieS9mcm9tIGNvbmZpZ3VyZS4KLSAqIG5vdyBtYWludGFpbmVkIG1hbnVhbGx5LgotICovCi0KLS8qIGJ1aWxkIGVudmlyb25tZW50ICovCi0jZGVmaW5lIFBMQVRGT1JNCSJvczJlbXgiCi0jZGVmaW5lIENPTVBJTEVSCSJbRU1YIEdDQyAiIF9fVkVSU0lPTl9fICJdIgotI2RlZmluZSBQWU9TX09TMgkxCi0jZGVmaW5lIFBZQ0NfR0NDCTEKLQotLyogZGVmYXVsdCBsb2NhdGlvbihzKSAqLwotI2lmbmRlZiBQUkVGSVgKLSNkZWZpbmUgUFJFRklYCQkiIgotI2VuZGlmCi0jaWZuZGVmIFBZVEhPTlBBVEgKLSNkZWZpbmUgUFlUSE9OUEFUSAkiLi9MaWI7Li9MaWIvcGxhdC0iIFBMQVRGT1JNIFwKLQkJCSI7Li9MaWIvbGliLWR5bmxvYWQ7Li9MaWIvc2l0ZS1wYWNrYWdlcyIKLSNlbmRpZgotCi0vKiBEZWJ1Z2dpbmcgKi8KLSNpZm5kZWYgUHlfREVCVUcKLS8qI2RlZmluZSBQeV9ERUJVRyAxKi8KLSNlbmRpZgotCi0vKiBpZiBidWlsZGluZyBhbiBleHRlbnNpb24gb3Igd3JhcHBlciBleGVjdXRhYmxlLAotICogbWFyayBQeXRob24gQVBJIHN5bWJvbHMgImV4dGVybiIgc28gdGhhdCBzeW1ib2xzCi0gKiBpbXBvcnRlZCBmcm9tIHRoZSBQeXRob24gY29yZSBETEwgYXJlbid0IGR1cGxpY2F0ZWQuCi0gKi8KLSNpZmRlZiBQeV9CVUlMRF9DT1JFCi0jICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkJUlRZUEUKLSNlbHNlCi0jICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkJZXh0ZXJuIFJUWVBFCi0jZW5kaWYKLSNkZWZpbmUgUHlBUElfREFUQShSVFlQRSkJZXh0ZXJuIFJUWVBFCi0jZGVmaW5lIFB5TU9ESU5JVF9GVU5DCXZvaWQKLQotLyogVXNlIE9TLzIgZmxhdm91ciBvZiB0aHJlYWRzICovCi0jZGVmaW5lIFdJVEhfVEhSRUFECTEKLSNkZWZpbmUgT1MyX1RIUkVBRFMJMQotCi0vKiBXZSB3YW50IHNvY2tldHMgKi8KLSNkZWZpbmUgVENQSVBWNAkJMQotI2RlZmluZSBVU0VfU09DS0VUCTEKLSNkZWZpbmUgc29ja2xlbl90CWludAotI2RlZmluZSBGRF9TRVRTSVpFCTEwMjQKLQotLyogZW5hYmxlIHRoZSBQeXRob24gb2JqZWN0IGFsbG9jYXRvciAqLwotI2RlZmluZQlXSVRIX1BZTUFMTE9DCTEKLQotLyogZW5hYmxlIHRoZSBHQyBtb2R1bGUgKi8KLSNkZWZpbmUgV0lUSF9DWUNMRV9HQwkxCi0KLS8qIERlZmluZSBpZiB5b3Ugd2FudCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLSNkZWZpbmUgV0lUSF9ET0NfU1RSSU5HUyAxCi0KLS8qIFVuaWNvZGUgcmVsYXRlZCAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUJd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIEVNWCBkZWZpbmVzIHNzaXplX3QgKi8KLSNkZWZpbmUgSEFWRV9TU0laRV9UCTEKLQotLyogc3lzdGVtIGNhcGFiaWxpdGllcyAqLwotI2RlZmluZSBIQVZFX1RUWU5BTUUJMQotI2RlZmluZSBIQVZFX1dBSVQJMQotI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgMQotI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVFVJRCAgICAgMQotI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgMQotI2RlZmluZSBIQVZFX1NZU1RFTQkxCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5HCTEKLQotLyogaWYgcG9ydCBvZiBHREJNIGluc3RhbGxlZCwgaXQgaW5jbHVkZXMgTkRCTSBlbXVsYXRpb24gKi8KLSNkZWZpbmUgSEFWRV9OREJNX0ggMQotCi0vKiBuZWVkIHRoaXMgZm9yIHNwYXdudiBjb2RlIGluIHBvc2l4bW9kdWxlIChjbG9uZWQgZnJvbSBXSU4zMiBkZWYnbikgKi8KLXR5cGVkZWYgbG9uZyBpbnRwdHJfdDsKLQotLyogd2UgZG9uJ3QgaGF2ZSB0bV96b25lIGJ1dCBkbyBoYXZlIHRoZSBleHRlcm5hbCBhcnJheSB0em5hbWUgKi8KLSNkZWZpbmUgSEFWRV9UWk5BTUUgMQotCi0vKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAqLwotI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwotI2RlZmluZSBTVERDX0hFQURFUlMgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCi0KLS8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgSEFWRV9MT05HX0xPTkcgMQotCi0vKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLwotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGggZnVuY3Rpb24gcHJvdG90eXBlcwotICogKGUuZy4gdm9pZCBmcHJpbnRmKEZJTEUgKiwgY2hhciAqLCAuLi4pOykgKmFuZCogPHN0ZGFyZy5oPi4KLSAqLwotI2RlZmluZSBIQVZFX1NUREFSR19QUk9UT1RZUEVTIDEKLQotLyogRGVmaW5lIGlmIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwb2ludGVyLiAqLwotI2RlZmluZSBNQUxMT0NfWkVST19SRVRVUk5TX05VTEwgMQotCi0vKiBEZWZpbmUgdG8gZm9yY2UgdXNlIG9mIHRocmVhZC1zYWZlIGVycm5vLCBoX2Vycm5vLCBhbmQgb3RoZXIgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBfUkVFTlRSQU5UIDEKLQotLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+Ci0gKiAod2hpY2ggeW91IGNhbid0IG9uIFNDTyBPRFQgMy4wKS4KLSAqLwotI2RlZmluZSBTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUgMQotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIG9mZl90LiAqLwotI2RlZmluZSBTSVpFT0ZfT0ZGX1QgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIHRpbWVfdC4gKi8KLSNkZWZpbmUgU0laRU9GX1RJTUVfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzaG9ydC4gKi8KLSNkZWZpbmUgU0laRU9GX1NIT1JUIDIKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGludC4gKi8KLSNkZWZpbmUgU0laRU9GX0lOVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBsb25nLiAqLwotI2RlZmluZSBTSVpFT0ZfTE9ORyA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBsb25nIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgdm9pZCAqLiAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNpemVfdC4gKi8KLSNkZWZpbmUgU0laRU9GX1NJWkVfVCA0Ci0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYWxhcm0gZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQUxBUk0gMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0NMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkdXAyIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0RVUDIgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGV4ZWN2IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0VYRUNWIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzcGF3bnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1BBV05WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmbG9jayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GTE9DSyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZm9yayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GT1JLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmc3luYyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GU1lOQyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRpbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlRJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGN3ZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBlZXJuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBHUlAgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHB3ZW50IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBXRU5UIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR3ZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaHlwb3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSFlQT1QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGtpbGwgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfS0lMTCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWVtbW92ZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBta3RpbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUtUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwYXVzZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QQVVTRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcHV0ZW52IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VsZWN0IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFTEVDVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0Z2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVEdJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0bG9jYWxlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0cGdpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRQR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR1aWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVUlEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR2YnVmIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFZCVUYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNpZ2FjdGlvbiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RDR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNzZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RDU0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdG1wZmlsZSBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEhBVkVfVE1QRklMRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGltZXMgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVElNRVMgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RSVU5DQVRFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bmFtZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9VTkFNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgd2FpdHBpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Y29uaW8uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9DT05JT19ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0RJUkVDVF9ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9ESVJFTlRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9JT19ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VuLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19VTl9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VVElNRV9IIDEKLQotLyogRU1YIGhhcyBhbiBzbnByaW50ZigpLiAqLwotI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKLQotI2VuZGlmIC8qICFQeV9DT05GSUdfSCAqLwotCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHl0aG9uMzMuZGVmIGIvUEMvb3MyZW14L3B5dGhvbjMzLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2NzI2Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMTMxNCArMCwwIEBACi1MSUJSQVJZIHB5dGhvbjMzIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgCi1ERVNDUklQVElPTiAiUHl0aG9uIDIuNiBDb3JlIERMTCIgCi1QUk9UTU9ERSAKLURBVEEgTVVMVElQTEUgTk9OU0hBUkVEIAotRVhQT1JUUyAKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbmZpZykKLSAgIl9QeUltcG9ydF9Jbml0dGFiIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxmY24pCi07ICAiZGxvcGVuIgotOyAgImRsc3ltIgotOyAgImRsY2xvc2UiCi07ICAiZGxlcnJvciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBhdGhwKQotICAiUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoIgotICAiUHlfR2V0UHJlZml4IgotICAiUHlfR2V0RXhlY1ByZWZpeCIKLSAgIlB5X0dldFBhdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRidWlsZGluZm8pCi0gICJQeV9HZXRCdWlsZEluZm8iCi0gICJfUHlfc3ZudmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1haW4pCi0gICJQeV9NYWluIgotICAiUHlfR2V0QXJnY0FyZ3YiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhY2NlbGVyKQotICAiUHlHcmFtbWFyX0FkZEFjY2VsZXJhdG9ycyIKLSAgIlB5R3JhbW1hcl9SZW1vdmVBY2NlbGVyYXRvcnMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihncmFtbWFyMSkKLSAgIlB5R3JhbW1hcl9GaW5kREZBIgotICAiUHlHcmFtbWFyX0xhYmVsUmVwciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3Rub2RlKQotICAiUHlOb2RlX0xpc3RUcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobm9kZSkKLSAgIlB5Tm9kZV9OZXciCi0gICJQeU5vZGVfQWRkQ2hpbGQiCi0gICJQeU5vZGVfRnJlZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHBhcnNlcikKLSAgIlB5UGFyc2VyX0FkZFRva2VuIgotICAiUHlQYXJzZXJfTmV3IgotICAiUHlQYXJzZXJfRGVsZXRlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2V0b2spCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZyIKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZSIKLSAgIlB5UGFyc2VyX1BhcnNlRmlsZSIKLSAgIlB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFncyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpdHNldCkKLSAgIl9QeV9uZXdiaXRzZXQiCi0gICJfUHlfZGVsYml0c2V0IgotICAiX1B5X2FkZGJpdCIKLSAgIl9QeV9zYW1lYml0c2V0IgotICAiX1B5X21lcmdlYml0c2V0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0YWdyYW1tYXIpCi0gICJfUHlfbWV0YV9ncmFtbWFyIgotICAiUHlfbWV0YV9ncmFtbWFyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodG9rZW5pemVyKQotICAiUHlUb2tlbl9PbmVDaGFyIgotICAiUHlUb2tlbl9Ud29DaGFycyIKLSAgIlB5VG9rZW5fVGhyZWVDaGFycyIKLSAgIlB5VG9rZW5pemVyX0Zyb21TdHJpbmciCi0gICJQeVRva2VuaXplcl9GcmVlIgotICAiUHlUb2tlbml6ZXJfRnJvbUZpbGUiCi0gICJQeVRva2VuaXplcl9HZXQiCi0gICJfUHlQYXJzZXJfVG9rZW5OYW1lcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15cmVhZGxpbmUpCi0gICJfUHlPU19SZWFkbGluZVRTdGF0ZSIKLSAgIlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIiCi0gICJQeU9TX1N0ZGlvUmVhZGxpbmUiCi0gICJQeU9TX1JlYWRsaW5lIgotICAiUHlPU19JbnB1dEhvb2siCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhYnN0cmFjdCkKLSAgIl9QeU9iamVjdF9MZW5ndGhIaW50IgotICAiUHlNYXBwaW5nX1NpemUiCi0gICJQeU9iamVjdF9DYWxsTWV0aG9kIgotICAiUHlPYmplY3RfR2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfR2V0SXRlbSIKLSAgIlB5T2JqZWN0X1NldEl0ZW0iCi0gICJQeVNlcXVlbmNlX1NldEl0ZW0iCi0gICJQeU9iamVjdF9EZWxJdGVtIgotICAiUHlTZXF1ZW5jZV9EZWxJdGVtIgotICAiUHlOdW1iZXJfTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JblBsYWNlQWRkIgotICAiUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5IgotICAiUHlOdW1iZXJfSW50IgotICAiUHlOdW1iZXJfTG9uZyIKLSAgIlB5TnVtYmVyX0Zsb2F0IgotICAiUHlTZXF1ZW5jZV9Db25jYXQiCi0gICJQeVNlcXVlbmNlX1JlcGVhdCIKLSAgIlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdCIKLSAgIlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdCIKLSAgIlB5U2VxdWVuY2VfR2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1NldFNsaWNlIgotICAiUHlTZXF1ZW5jZV9UdXBsZSIKLSAgIlB5T2JqZWN0X0dldEl0ZXIiCi0gICJQeUl0ZXJfTmV4dCIKLSAgIlB5U2VxdWVuY2VfRmFzdCIKLSAgIl9QeVNlcXVlbmNlX0l0ZXJTZWFyY2giCi0gICJQeU9iamVjdF9DYWxsRnVuY3Rpb24iCi0gICJfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUIgotICAiX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQiCi0gICJQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MiCi0gICJQeU9iamVjdF9DbXAiCi0gICJQeU9iamVjdF9DYWxsIgotICAiUHlPYmplY3RfQ2FsbE9iamVjdCIKLSAgIlB5T2JqZWN0X1R5cGUiCi0gICJQeU9iamVjdF9TaXplIgotICAiUHlPYmplY3RfTGVuZ3RoIgotICAiUHlPYmplY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0FzQ2hhckJ1ZmZlciIKLSAgIlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlciIKLSAgIlB5T2JqZWN0X0FzUmVhZEJ1ZmZlciIKLSAgIlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIiCi0gICJQeU51bWJlcl9DaGVjayIKLSAgIlB5TnVtYmVyX0FkZCIKLSAgIlB5TnVtYmVyX1N1YnRyYWN0IgotICAiUHlOdW1iZXJfRGl2aWRlIgotICAiUHlOdW1iZXJfRmxvb3JEaXZpZGUiCi0gICJQeU51bWJlcl9UcnVlRGl2aWRlIgotICAiUHlOdW1iZXJfUmVtYWluZGVyIgotICAiUHlOdW1iZXJfRGl2bW9kIgotICAiUHlOdW1iZXJfUG93ZXIiCi0gICJQeU51bWJlcl9OZWdhdGl2ZSIKLSAgIlB5TnVtYmVyX1Bvc2l0aXZlIgotICAiUHlOdW1iZXJfQWJzb2x1dGUiCi0gICJQeU51bWJlcl9JbnZlcnQiCi0gICJQeU51bWJlcl9Mc2hpZnQiCi0gICJQeU51bWJlcl9Sc2hpZnQiCi0gICJQeU51bWJlcl9BbmQiCi0gICJQeU51bWJlcl9Yb3IiCi0gICJQeU51bWJlcl9PciIKLSAgIlB5TnVtYmVyX0luZGV4IgotICAiUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0IgotICAiUHlOdW1iZXJfSW5QbGFjZURpdmlkZSIKLSAgIlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlciIKLSAgIlB5TnVtYmVyX0luUGxhY2VQb3dlciIKLSAgIlB5TnVtYmVyX0luUGxhY2VMc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlUnNoaWZ0IgotICAiUHlOdW1iZXJfSW5QbGFjZUFuZCIKLSAgIlB5TnVtYmVyX0luUGxhY2VYb3IiCi0gICJQeU51bWJlcl9JblBsYWNlT3IiCi0gICJQeVNlcXVlbmNlX0NoZWNrIgotICAiUHlTZXF1ZW5jZV9TaXplIgotICAiUHlTZXF1ZW5jZV9MZW5ndGgiCi0gICJQeVNlcXVlbmNlX0RlbFNsaWNlIgotICAiUHlTZXF1ZW5jZV9MaXN0IgotICAiUHlTZXF1ZW5jZV9Db3VudCIKLSAgIlB5U2VxdWVuY2VfQ29udGFpbnMiCi0gICJQeVNlcXVlbmNlX0luIgotICAiUHlTZXF1ZW5jZV9JbmRleCIKLSAgIlB5TWFwcGluZ19DaGVjayIKLSAgIlB5TWFwcGluZ19MZW5ndGgiCi0gICJQeU1hcHBpbmdfSGFzS2V5U3RyaW5nIgotICAiUHlNYXBwaW5nX0hhc0tleSIKLSAgIlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nIgotICAiUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmciCi0gICJQeU9iamVjdF9Jc0luc3RhbmNlIgotICAiUHlPYmplY3RfSXNTdWJjbGFzcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJvb2xvYmplY3QpCi0gICJQeUJvb2xfRnJvbUxvbmciCi0gICJQeUJvb2xfVHlwZSIKLSAgIl9QeV9aZXJvU3RydWN0IgotICAiX1B5X1RydWVTdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihidWZmZXJvYmplY3QpCi0gICJQeUJ1ZmZlcl9Gcm9tT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU9iamVjdCIKLSAgIlB5QnVmZmVyX0Zyb21NZW1vcnkiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5IgotICAiUHlCdWZmZXJfTmV3IgotICAiUHlCdWZmZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNlbGxvYmplY3QpCi0gICJQeUNlbGxfTmV3IgotICAiUHlDZWxsX0dldCIKLSAgIlB5Q2VsbF9TZXQiCi0gICJQeUNlbGxfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNsYXNzb2JqZWN0KQotICAiUHlDbGFzc19OZXciCi0gICJQeUNsYXNzX0lzU3ViY2xhc3MiCi0gICJQeUluc3RhbmNlX05ldyIKLSAgIlB5SW5zdGFuY2VfTmV3UmF3IgotICAiUHlNZXRob2RfTmV3IgotICAiUHlNZXRob2RfRnVuY3Rpb24iCi0gICJQeU1ldGhvZF9TZWxmIgotICAiUHlNZXRob2RfQ2xhc3MiCi0gICJfUHlJbnN0YW5jZV9Mb29rdXAiCi0gICJQeU1ldGhvZF9GaW5pIgotICAiUHlDbGFzc19UeXBlIgotICAiUHlJbnN0YW5jZV9UeXBlIgotICAiUHlNZXRob2RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNhcHN1bGUpCi0gICJQeUNhcHN1bGVfR2V0Q29udGV4dCIKLSAgIlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yIgotICAiUHlDYXBzdWxlX0dldE5hbWUiCi0gICJQeUNhcHN1bGVfR2V0UG9pbnRlciIKLSAgIlB5Q2Fwc3VsZV9JbXBvcnQiCi0gICJQeUNhcHN1bGVfSXNWYWxpZCIKLSAgIlB5Q2Fwc3VsZV9OZXciCi0gICJQeUNhcHN1bGVfU2V0Q29udGV4dCIKLSAgIlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yIgotICAiUHlDYXBzdWxlX1NldE5hbWUiCi0gICJQeUNhcHN1bGVfU2V0UG9pbnRlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvYmplY3QpCi0gICJQeUNPYmplY3RfRnJvbVZvaWRQdHIiCi0gICJQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjIgotICAiUHlDT2JqZWN0X0FzVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9HZXREZXNjIgotICAiUHlDT2JqZWN0X0ltcG9ydCIKLSAgIlB5Q09iamVjdF9TZXRWb2lkUHRyIgotICAiUHlDT2JqZWN0X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2Rlb2JqZWN0KQotICAiUHlDb2RlX05ldyIKLSAgIlB5Q29kZV9BZGRyMkxpbmUiCi0gICJQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyIgotICAiUHlDb2RlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb21wbGV4b2JqZWN0KQotICAiX1B5X2NfcG93IgotICAiX1B5X2Nfc3VtIgotICAiX1B5X2NfZGlmZiIKLSAgIl9QeV9jX25lZyIKLSAgIl9QeV9jX3Byb2QiCi0gICJfUHlfY19xdW90IgotICAiUHlDb21wbGV4X0Zyb21DQ29tcGxleCIKLSAgIlB5Q29tcGxleF9Gcm9tRG91YmxlcyIKLSAgIlB5Q29tcGxleF9SZWFsQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfSW1hZ0FzRG91YmxlIgotICAiUHlDb21wbGV4X0FzQ0NvbXBsZXgiCi0gICJQeUNvbXBsZXhfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRlc2Nyb2JqZWN0KQotICAiUHlXcmFwcGVyX05ldyIKLSAgIlB5RGVzY3JfTmV3TWV0aG9kIgotICAiUHlEZXNjcl9OZXdDbGFzc01ldGhvZCIKLSAgIlB5RGVzY3JfTmV3TWVtYmVyIgotICAiUHlEZXNjcl9OZXdHZXRTZXQiCi0gICJQeURlc2NyX05ld1dyYXBwZXIiCi0gICJQeURpY3RQcm94eV9OZXciCi0gICJQeVdyYXBwZXJEZXNjcl9UeXBlIgotICAiUHlQcm9wZXJ0eV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGljdG9iamVjdCkKLSAgIlB5RGljdF9OZXciCi0gICJQeURpY3RfR2V0SXRlbSIKLSAgIlB5RGljdF9TZXRJdGVtIgotICAiUHlEaWN0X0RlbEl0ZW0iCi0gICJQeURpY3RfQ2xlYXIiCi0gICJQeURpY3RfTWVyZ2VGcm9tU2VxMiIKLSAgIlB5RGljdF9NZXJnZSIKLSAgIlB5RGljdF9LZXlzIgotICAiUHlEaWN0X1ZhbHVlcyIKLSAgIlB5RGljdF9Db250YWlucyIKLSAgIlB5RGljdF9OZXh0IgotICAiUHlEaWN0X0l0ZW1zIgotICAiUHlEaWN0X1NpemUiCi0gICJQeURpY3RfQ29weSIKLSAgIlB5RGljdF9VcGRhdGUiCi0gICJQeURpY3RfR2V0SXRlbVN0cmluZyIKLSAgIlB5RGljdF9TZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X0RlbEl0ZW1TdHJpbmciCi0gICJQeURpY3RfVHlwZSIKLSAgIlB5RGljdEl0ZXJLZXlfVHlwZSIKLSAgIlB5RGljdEl0ZXJWYWx1ZV9UeXBlIgotICAiUHlEaWN0SXRlckl0ZW1fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVudW1vYmplY3QpCi0gICJQeUVudW1fVHlwZSIKLSAgIlB5UmV2ZXJzZWRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZpbGVvYmplY3QpCi0gICJQeUZpbGVfRnJvbVN0cmluZyIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGcmVhZCIKLSAgIlB5RmlsZV9HZXRMaW5lIgotICAiUHlGaWxlX1NvZnRTcGFjZSIKLSAgIlB5RmlsZV9Xcml0ZU9iamVjdCIKLSAgIlB5RmlsZV9Xcml0ZVN0cmluZyIKLSAgIlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IiCi0gICJQeV9Vbml2ZXJzYWxOZXdsaW5lRmdldHMiCi0gICJQeUZpbGVfU2V0QnVmU2l6ZSIKLSAgIlB5RmlsZV9TZXRFbmNvZGluZyIKLSAgIlB5RmlsZV9Gcm9tRmlsZSIKLSAgIlB5RmlsZV9Bc0ZpbGUiCi0gICJQeUZpbGVfTmFtZSIKLSAgIlB5RmlsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmxvYXRvYmplY3QpCi0gICJQeUZsb2F0X0Zyb21TdHJpbmciCi0gICJQeUZsb2F0X0FzRG91YmxlIgotICAiUHlGbG9hdF9GaW5pIgotICAiX1B5RmxvYXRfUGFjazQiCi0gICJfUHlGbG9hdF9QYWNrOCIKLSAgIl9QeUZsb2F0X1VucGFjazQiCi0gICJfUHlGbG9hdF9VbnBhY2s4IgotICAiUHlGbG9hdF9Gcm9tRG91YmxlIgotICAiUHlGbG9hdF9Bc1JlcHJTdHJpbmciCi0gICJQeUZsb2F0X0FzU3RyaW5nIgotICAiX1B5RmxvYXRfSW5pdCIKLSAgIlB5RmxvYXRfQXNTdHJpbmdFeCIKLSAgIlB5RmxvYXRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyYW1lb2JqZWN0KQotICAiUHlGcmFtZV9OZXciCi0gICJQeUZyYW1lX0Zhc3RUb0xvY2FscyIKLSAgIlB5RnJhbWVfTG9jYWxzVG9GYXN0IgotICAiX1B5RnJhbWVfSW5pdCIKLSAgIlB5RnJhbWVfRmluaSIKLSAgIlB5RnJhbWVfQmxvY2tTZXR1cCIKLSAgIlB5RnJhbWVfQmxvY2tQb3AiCi0gICJQeUZyYW1lX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmdW5jb2JqZWN0KQotICAiUHlGdW5jdGlvbl9OZXciCi0gICJQeUZ1bmN0aW9uX0dldENvZGUiCi0gICJQeUZ1bmN0aW9uX0dldEdsb2JhbHMiCi0gICJQeUZ1bmN0aW9uX0dldE1vZHVsZSIKLSAgIlB5RnVuY3Rpb25fR2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX1NldERlZmF1bHRzIgotICAiUHlGdW5jdGlvbl9HZXRDbG9zdXJlIgotICAiUHlGdW5jdGlvbl9TZXRDbG9zdXJlIgotICAiUHlDbGFzc01ldGhvZF9OZXciCi0gICJQeVN0YXRpY01ldGhvZF9OZXciCi0gICJQeUZ1bmN0aW9uX1R5cGUiCi0gICJQeUNsYXNzTWV0aG9kX1R5cGUiCi0gICJQeVN0YXRpY01ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2Vub2JqZWN0KQotICAiUHlHZW5fTmV3IgotICAiUHlHZW5fTmVlZHNGaW5hbGl6aW5nIgotICAiUHlHZW5fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGludG9iamVjdCkKLSAgIlB5SW50X0FzTG9uZyIKLSAgIlB5SW50X0FzVW5zaWduZWRMb25nTWFzayIKLSAgIlB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUludF9Gcm9tU3RyaW5nIgotICAiUHlJbnRfQXNTc2l6ZV90IgotICAiUHlJbnRfRmluaSIKLSAgIlB5SW50X0Zyb21Vbmljb2RlIgotICAiUHlJbnRfRnJvbUxvbmciCi0gICJQeUludF9Gcm9tU2l6ZV90IgotICAiUHlJbnRfRnJvbVNzaXplX3QiCi0gICJQeUludF9HZXRNYXgiCi0gICJfUHlJbnRfSW5pdCIKLSAgIlB5SW50X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpdGVyb2JqZWN0KQotICAiUHlTZXFJdGVyX05ldyIKLSAgIlB5Q2FsbEl0ZXJfTmV3IgotICAiUHlTZXFJdGVyX1R5cGUiCi0gICJQeUNhbGxJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsaXN0b2JqZWN0KQotICAiUHlMaXN0X05ldyIKLSAgIlB5TGlzdF9BcHBlbmQiCi0gICJQeUxpc3RfU2l6ZSIKLSAgIlB5TGlzdF9HZXRJdGVtIgotICAiUHlMaXN0X1NldEl0ZW0iCi0gICJQeUxpc3RfSW5zZXJ0IgotICAiUHlMaXN0X0dldFNsaWNlIgotICAiUHlMaXN0X1NldFNsaWNlIgotICAiUHlMaXN0X1NvcnQiCi0gICJQeUxpc3RfUmV2ZXJzZSIKLSAgIlB5TGlzdF9Bc1R1cGxlIgotICAiX1B5TGlzdF9FeHRlbmQiCi0gICJQeUxpc3RfRmluaSIKLSAgIlB5TGlzdF9UeXBlIgotICAiUHlMaXN0SXRlcl9UeXBlIgotICAiUHlMaXN0UmV2SXRlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobG9uZ29iamVjdCkKLSAgIlB5TG9uZ19Gcm9tRG91YmxlIgotICAiUHlMb25nX0FzTG9uZyIKLSAgIl9QeUxvbmdfQXNTc2l6ZV90IgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nIgotICAiX1B5TG9uZ19Gcm9tQnl0ZUFycmF5IgotICAiX1B5TG9uZ19Bc0J5dGVBcnJheSIKLSAgIlB5TG9uZ19Bc0RvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNMb25nTG9uZyIKLSAgIlB5TG9uZ19Gcm9tU3RyaW5nIgotICAiUHlMb25nX0Zyb21Mb25nIgotICAiUHlMb25nX0Zyb21VbnNpZ25lZExvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiX1B5TG9uZ19Gcm9tU2l6ZV90IgotICAiX1B5TG9uZ19Gcm9tU3NpemVfdCIKLSAgIl9QeUxvbmdfQXNTY2FsZWREb3VibGUiCi0gICJQeUxvbmdfRnJvbVZvaWRQdHIiCi0gICJQeUxvbmdfQXNWb2lkUHRyIgotICAiUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrIgotICAiUHlMb25nX0Zyb21Vbmljb2RlIgotICAiX1B5TG9uZ19TaWduIgotICAiX1B5TG9uZ19OdW1CaXRzIgotICAiX1B5TG9uZ19OZXciCi0gICJfUHlMb25nX0NvcHkiCi0gICJQeUxvbmdfVHlwZSIKLSAgIl9QeUxvbmdfRGlnaXRWYWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1ldGhvZG9iamVjdCkKLSAgIlB5Q0Z1bmN0aW9uX0NhbGwiCi0gICJQeV9GaW5kTWV0aG9kSW5DaGFpbiIKLSAgIlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uIgotICAiUHlDRnVuY3Rpb25fR2V0U2VsZiIKLSAgIlB5Q0Z1bmN0aW9uX0dldEZsYWdzIgotICAiUHlfRmluZE1ldGhvZCIKLSAgIlB5Q0Z1bmN0aW9uX05ld0V4IgotICAiUHlDRnVuY3Rpb25fRmluaSIKLSAgIlB5Q0Z1bmN0aW9uX05ldyIKLSAgIlB5Q0Z1bmN0aW9uX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2R1bGVvYmplY3QpCi0gICJQeU1vZHVsZV9OZXciCi0gICJfUHlNb2R1bGVfQ2xlYXIiCi0gICJQeU1vZHVsZV9HZXREaWN0IgotICAiUHlNb2R1bGVfR2V0TmFtZSIKLSAgIlB5TW9kdWxlX0dldEZpbGVuYW1lIgotICAiUHlNb2R1bGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9iamVjdCkKLSAgIlB5X0RpdmlzaW9uV2FybmluZ0ZsYWciCi0gICJQeU9iamVjdF9TdHIiCi0gICJQeU9iamVjdF9SZXByIgotICAiX1B5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1VuaWNvZGUiCi0gICJQeU9iamVjdF9HZXRBdHRyIgotICAiUHlPYmplY3RfSXNUcnVlIgotICAiUHlOdW1iZXJfQ29lcmNlRXgiCi0gICJQeU9iamVjdF9Db21wYXJlIgotICAiUHlPYmplY3RfUmljaENvbXBhcmUiCi0gICJfUHlfSGFzaERvdWJsZSIKLSAgIlB5T2JqZWN0X0hhc2giCi0gICJQeU9iamVjdF9TZXRBdHRyIgotICAiUHlPYmplY3RfR2VuZXJpY0dldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljU2V0QXR0ciIKLSAgIlB5Q2FsbGFibGVfQ2hlY2siCi0gICJQeU9iamVjdF9EaXIiCi0gICJQeU1lbV9NYWxsb2MiCi0gICJQeU1lbV9SZWFsbG9jIgotICAiUHlNZW1fRnJlZSIKLSAgIlB5T2JqZWN0X1ByaW50IgotICAiX1B5T2JqZWN0X0R1bXAiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wiCi0gICJQeU9iamVjdF9HZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfU2V0QXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHJTdHJpbmciCi0gICJQeU9iamVjdF9IYXNBdHRyIgotICAiX1B5T2JqZWN0X0dldERpY3RQdHIiCi0gICJQeU9iamVjdF9TZWxmSXRlciIKLSAgIlB5T2JqZWN0X05vdCIKLSAgIlB5TnVtYmVyX0NvZXJjZSIKLSAgIlB5X1JlcHJFbnRlciIKLSAgIlB5X1JlcHJMZWF2ZSIKLSAgIl9QeV9IYXNoUG9pbnRlciIKLSAgIlB5X0luY1JlZiIKLSAgIlB5X0RlY1JlZiIKLSAgIl9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0IgotICAiX1B5VHJhc2hfZGVzdHJveV9jaGFpbiIKLSAgIlB5T2JqZWN0X0luaXQiCi0gICJQeU9iamVjdF9Jbml0VmFyIgotICAiX1B5T2JqZWN0X05ldyIKLSAgIl9QeU9iamVjdF9OZXdWYXIiCi0gICJfUHlPYmplY3RfRGVsIgotICAiX1B5X1JlYWR5VHlwZXMiCi0gICJfUHlfU3dhcHBlZE9wIgotICAiX1B5X05vdEltcGxlbWVudGVkU3RydWN0IgotICAiX1B5X05vbmVTdHJ1Y3QiCi0gICJfUHlfY29iamVjdF9oYWNrIgotICAiX1B5X2Fic3RyYWN0X2hhY2siCi0gICJfUHlUcmFzaF9kZWxldGVfbmVzdGluZyIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9sYXRlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9ibWFsbG9jKQotICAiUHlPYmplY3RfTWFsbG9jIgotICAiUHlPYmplY3RfRnJlZSIKLSAgIlB5T2JqZWN0X1JlYWxsb2MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihyYW5nZW9iamVjdCkKLSAgIlB5UmFuZ2VfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNldG9iamVjdCkKLSAgIlB5U2V0X1BvcCIKLSAgIlB5U2V0X05ldyIKLSAgIlB5RnJvemVuU2V0X05ldyIKLSAgIlB5U2V0X1NpemUiCi0gICJQeVNldF9DbGVhciIKLSAgIlB5U2V0X0NvbnRhaW5zIgotICAiUHlTZXRfRGlzY2FyZCIKLSAgIlB5U2V0X0FkZCIKLSAgIl9QeVNldF9OZXh0IgotICAiX1B5U2V0X1VwZGF0ZSIKLSAgIlB5U2V0X0ZpbmkiCi0gICJQeVNldF9UeXBlIgotICAiUHlGcm96ZW5TZXRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNsaWNlb2JqZWN0KQotICAiX1B5U2xpY2VfRnJvbUluZGljZXMiCi0gICJQeVNsaWNlX0dldEluZGljZXMiCi0gICJQeVNsaWNlX0dldEluZGljZXNFeCIKLSAgIlB5U2xpY2VfTmV3IgotICAiX1B5X0VsbGlwc2lzT2JqZWN0IgotICAiUHlTbGljZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RyaW5nb2JqZWN0KQotICAiUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUiCi0gICJQeVN0cmluZ19JbnRlcm5JblBsYWNlIgotICAiUHlTdHJpbmdfRnJvbVN0cmluZyIKLSAgIlB5U3RyaW5nX0Zyb21Gb3JtYXRWIgotICAiUHlTdHJpbmdfQXNTdHJpbmciCi0gICJfUHlTdHJpbmdfUmVzaXplIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdCIKLSAgIlB5U3RyaW5nX0FzRGVjb2RlZFN0cmluZyIKLSAgIlB5U3RyaW5nX0FzRW5jb2RlZFN0cmluZyIKLSAgIlB5U3RyaW5nX0RlY29kZUVzY2FwZSIKLSAgIlB5U3RyaW5nX1JlcHIiCi0gICJQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUiCi0gICJfUHlTdHJpbmdfRm9ybWF0TG9uZyIKLSAgIlB5U3RyaW5nX0Zvcm1hdCIKLSAgIl9QeV9SZWxlYXNlSW50ZXJuZWRTdHJpbmdzIgotICAiUHlTdHJpbmdfU2l6ZSIKLSAgIlB5U3RyaW5nX0NvbmNhdCIKLSAgIlB5U3RyaW5nX0NvbmNhdEFuZERlbCIKLSAgIl9QeVN0cmluZ19FcSIKLSAgIlB5U3RyaW5nX0ludGVybkltbW9ydGFsIgotICAiUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyIKLSAgIl9QeVN0cmluZ19Kb2luIgotICAiUHlTdHJpbmdfRGVjb2RlIgotICAiUHlTdHJpbmdfRW5jb2RlIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0IgotICAiUHlTdHJpbmdfRmluaSIKLSAgIlB5U3RyaW5nX1R5cGUiCi0gICJQeUJhc2VTdHJpbmdfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cnVjdHNlcSkKLSAgIlB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUiCi0gICJQeVN0cnVjdFNlcXVlbmNlX05ldyIKLSAgIlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHVwbGVvYmplY3QpCi0gICJQeVR1cGxlX05ldyIKLSAgIlB5VHVwbGVfUGFjayIKLSAgIl9QeVR1cGxlX1Jlc2l6ZSIKLSAgIlB5VHVwbGVfU2l6ZSIKLSAgIlB5VHVwbGVfR2V0SXRlbSIKLSAgIlB5VHVwbGVfU2V0SXRlbSIKLSAgIlB5VHVwbGVfR2V0U2xpY2UiCi0gICJQeVR1cGxlX0ZpbmkiCi0gICJQeVR1cGxlX1R5cGUiCi0gICJQeVR1cGxlSXRlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHlwZW9iamVjdCkKLSAgIlB5VHlwZV9Jc1N1YnR5cGUiCi0gICJfUHlUeXBlX0xvb2t1cCIKLSAgIlB5VHlwZV9SZWFkeSIKLSAgIlB5VHlwZV9HZW5lcmljQWxsb2MiCi0gICJfUHlPYmplY3RfU2xvdENvbXBhcmUiCi0gICJQeVR5cGVfR2VuZXJpY05ldyIKLSAgIlB5VHlwZV9UeXBlIgotICAiUHlCYXNlT2JqZWN0X1R5cGUiCi0gICJQeVN1cGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih1bmljb2Rlb2JqZWN0KQotICAiUHlVbmljb2RlVUNTMl9SZXNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsIgotICAiUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9Gcm9tRW5jb2RlZE9iamVjdCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlIgotICAiUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0xhdGluMVN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZyIKLSAgIlB5VW5pY29kZV9EZWNvZGVVVEY3IgotICAiUHlVbmljb2RlX0VuY29kZVVURjciCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjhTdGF0ZWZ1bCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bCIKLSAgIlB5VW5pY29kZVVDUzJfQXNVVEYxNlN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlUmF3VW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlUmF3VW5pY29kZUVzY2FwZSIKLSAgIl9QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUludGVybmFsIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVDaGFybWFwIgotICAiUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZURlY2ltYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0NvdW50IgotICAiUHlVbmljb2RlVUNTMl9GaW5kIgotICAiUHlVbmljb2RlVUNTMl9Kb2luIgotICAiUHlVbmljb2RlVUNTMl9TcGxpdGxpbmVzIgotICAiUHlVbmljb2RlVUNTMl9Db21wYXJlIgotICAiUHlVbmljb2RlVUNTMl9Db250YWlucyIKLSAgIlB5VW5pY29kZVVDUzJfQ29uY2F0IgotICAiX1B5VW5pY29kZV9YU3RyaXAiCi0gICJQeVVuaWNvZGVVQ1MyX1JlcGxhY2UiCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0IgotICAiUHlVbmljb2RlVUNTMl9SU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX0Zvcm1hdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0luaXQiCi0gICJfUHlVbmljb2RlVUNTMl9GaW5pIgotICAiUHlVbmljb2RlVUNTMl9Gcm9tVW5pY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9HZXRTaXplIgotICAiUHlVbmljb2RlVUNTMl9HZXRNYXgiCi0gICJfUHlVbmljb2RlVUNTMl9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9TZXREZWZhdWx0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVVRGMTYiCi0gICJQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVMYXRpbjEiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUFTQ0lJIgotICAiUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1BhcnRpdGlvbiIKLSAgIlB5VW5pY29kZVVDUzJfUlBhcnRpdGlvbiIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlIgotICAiUHlVbmljb2RlVUNTMl9UYWlsbWF0Y2giCi0gICJQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih1bmljb2RlY3R5cGUpCi0gICJfUHlVbmljb2RlX1R5cGVSZWNvcmRzIgotICAiX1B5VW5pY29kZVVDUzJfVG9OdW1lcmljIgotICAiX1B5VW5pY29kZVVDUzJfSXNMb3dlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1VwcGVyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVGl0bGVjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNXaGl0ZXNwYWNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNMaW5lYnJlYWsiCi0gICJfUHlVbmljb2RlVUNTMl9Ub0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9UaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub0RlY2ltYWxEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0RlY2ltYWxEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jc051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0FscGhhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIod2Vha3JlZm9iamVjdCkKLSAgIlB5V2Vha3JlZl9OZXdSZWYiCi0gICJQeVdlYWtyZWZfTmV3UHJveHkiCi0gICJQeU9iamVjdF9DbGVhcldlYWtSZWZzIgotICAiUHlXZWFrcmVmX0dldE9iamVjdCIKLSAgIl9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50IgotICAiX1B5V2Vha3JlZl9DbGVhclJlZiIKLSAgIl9QeVdlYWtyZWZfUmVmVHlwZSIKLSAgIl9QeVdlYWtyZWZfUHJveHlUeXBlIgotICAiX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKFB5dGhvbi1hc3QpCi07ICAiaW5pdF9hc3QiCi0gICJNb2R1bGUiCi0gICJJbnRlcmFjdGl2ZSIKLSAgIkV4cHJlc3Npb24iCi0gICJTdWl0ZSIKLSAgIkZ1bmN0aW9uRGVmIgotICAiQ2xhc3NEZWYiCi0gICJSZXR1cm4iCi0gICJEZWxldGUiCi0gICJBc3NpZ24iCi0gICJBdWdBc3NpZ24iCi0gICJQcmludCIKLSAgIkZvciIKLSAgIldoaWxlIgotICAiSWYiCi0gICJXaXRoIgotICAiUmFpc2UiCi0gICJUcnlFeGNlcHQiCi0gICJUcnlGaW5hbGx5IgotICAiQXNzZXJ0IgotICAiSW1wb3J0IgotICAiSW1wb3J0RnJvbSIKLSAgIkV4ZWMiCi0gICJHbG9iYWwiCi0gICJFeHByIgotICAiUGFzcyIKLSAgIkJyZWFrIgotICAiQ29udGludWUiCi0gICJCb29sT3AiCi0gICJCaW5PcCIKLSAgIlVuYXJ5T3AiCi0gICJMYW1iZGEiCi0gICJJZkV4cCIKLSAgIkRpY3QiCi0gICJMaXN0Q29tcCIKLSAgIkdlbmVyYXRvckV4cCIKLSAgIllpZWxkIgotICAiQ29tcGFyZSIKLSAgIkNhbGwiCi0gICJSZXByIgotICAiTnVtIgotICAiU3RyIgotICAiQXR0cmlidXRlIgotICAiU3Vic2NyaXB0IgotICAiTmFtZSIKLSAgIkxpc3QiCi0gICJUdXBsZSIKLSAgIkVsbGlwc2lzIgotICAiU2xpY2UiCi0gICJFeHRTbGljZSIKLSAgIkluZGV4IgotICAiY29tcHJlaGVuc2lvbiIKLSAgImV4Y2VwdGhhbmRsZXIiCi0gICJhcmd1bWVudHMiCi0gICJrZXl3b3JkIgotICAiYWxpYXMiCi0gICJQeUFTVF9tb2Qyb2JqIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYXNkbCkKLSAgImFzZGxfc2VxX25ldyIKLSAgImFzZGxfaW50X3NlcV9uZXciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc3QpCi0gICJQeUFTVF9Gcm9tTm9kZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJsdGlubW9kdWxlKQotICAiX1B5QnVpbHRpbl9Jbml0IgotICAiUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGV4Y2VwdGlvbnMpCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kIgotICAiX1B5RXhjX0luaXQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24iCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24iCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24iCi0gICJfUHlFeGNfRmluaSIKLSAgIlB5RXhjX0Jhc2VFeGNlcHRpb24iCi0gICJQeUV4Y19FeGNlcHRpb24iCi0gICJQeUV4Y19TdGFuZGFyZEVycm9yIgotICAiUHlFeGNfVHlwZUVycm9yIgotICAiUHlFeGNfU3RvcEl0ZXJhdGlvbiIKLSAgIlB5RXhjX0dlbmVyYXRvckV4aXQiCi0gICJQeUV4Y19TeXN0ZW1FeGl0IgotICAiUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQiCi0gICJQeUV4Y19JbXBvcnRFcnJvciIKLSAgIlB5RXhjX0Vudmlyb25tZW50RXJyb3IiCi0gICJQeUV4Y19JT0Vycm9yIgotICAiUHlFeGNfT1NFcnJvciIKLSAgIlB5RXhjX0VPRkVycm9yIgotICAiUHlFeGNfUnVudGltZUVycm9yIgotICAiUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciIKLSAgIlB5RXhjX05hbWVFcnJvciIKLSAgIlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIgotICAiUHlFeGNfQXR0cmlidXRlRXJyb3IiCi0gICJQeUV4Y19JbmRleEVycm9yIgotICAiUHlFeGNfU3ludGF4RXJyb3IiCi0gICJQeUV4Y19JbmRlbnRhdGlvbkVycm9yIgotICAiUHlFeGNfVGFiRXJyb3IiCi0gICJQeUV4Y19Mb29rdXBFcnJvciIKLSAgIlB5RXhjX0tleUVycm9yIgotICAiUHlFeGNfVmFsdWVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciIKLSAgIlB5RXhjX0Fzc2VydGlvbkVycm9yIgotICAiUHlFeGNfQXJpdGhtZXRpY0Vycm9yIgotICAiUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIgotICAiUHlFeGNfT3ZlcmZsb3dFcnJvciIKLSAgIlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIgotICAiUHlFeGNfU3lzdGVtRXJyb3IiCi0gICJQeUV4Y19SZWZlcmVuY2VFcnJvciIKLSAgIlB5RXhjX01lbW9yeUVycm9yIgotICAiUHlFeGNfV2FybmluZyIKLSAgIlB5RXhjX1VzZXJXYXJuaW5nIgotICAiUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyIKLSAgIlB5RXhjX1N5bnRheFdhcm5pbmciCi0gICJQeUV4Y19SdW50aW1lV2FybmluZyIKLSAgIlB5RXhjX0Z1dHVyZVdhcm5pbmciCi0gICJQeUV4Y19JbXBvcnRXYXJuaW5nIgotICAiUHlFeGNfTWVtb3J5RXJyb3JJbnN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2V2YWwpCi0gICJQeUV2YWxfRXZhbEZyYW1lRXgiCi0gICJQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyIKLSAgIlB5RXZhbF9FdmFsQ29kZUV4IgotICAiUHlFdmFsX0dldEZyYW1lIgotICAiUHlFdmFsX0NhbGxPYmplY3QiCi0gICJQeUV2YWxfU2V0UHJvZmlsZSIKLSAgIlB5RXZhbF9TZXRUcmFjZSIKLSAgIlB5RXZhbF9HZXRCdWlsdGlucyIKLSAgIlB5RXZhbF9HZXRHbG9iYWxzIgotICAiUHlFdmFsX0dldExvY2FscyIKLSAgIlB5RXZhbF9HZXRSZXN0cmljdGVkIgotICAiUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncyIKLSAgIlB5X0ZsdXNoTGluZSIKLSAgIlB5X0FkZFBlbmRpbmdDYWxsIgotICAiUHlfTWFrZVBlbmRpbmdDYWxscyIKLSAgIlB5X1NldFJlY3Vyc2lvbkxpbWl0IgotICAiUHlfR2V0UmVjdXJzaW9uTGltaXQiCi0gICJfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsIgotICAiUHlFdmFsX0dldEZ1bmNOYW1lIgotICAiUHlFdmFsX0dldEZ1bmNEZXNjIgotICAiUHlFdmFsX0dldENhbGxTdGF0cyIKLSAgIlB5RXZhbF9FdmFsRnJhbWUiCi0gICJQeUV2YWxfU2F2ZVRocmVhZCIKLSAgIlB5RXZhbF9SZXN0b3JlVGhyZWFkIgotICAiUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZCIKLSAgIlB5RXZhbF9Jbml0VGhyZWFkcyIKLSAgIlB5RXZhbF9BY3F1aXJlTG9jayIKLSAgIlB5RXZhbF9SZWxlYXNlTG9jayIKLSAgIlB5RXZhbF9BY3F1aXJlVGhyZWFkIgotICAiUHlFdmFsX1JlbGVhc2VUaHJlYWQiCi0gICJQeUV2YWxfUmVJbml0VGhyZWFkcyIKLSAgIl9QeUV2YWxfU2xpY2VJbmRleCIKLSAgIlB5RXZhbF9FdmFsQ29kZSIKLSAgIl9QeUV2YWxfQ2FsbFRyYWNpbmciCi0gICJfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja0ludGVydmFsIgotICAiX1B5X1RpY2tlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBpbGUpCi0gICJfUHlfTWFuZ2xlIgotICAiUHlBU1RfQ29tcGlsZSIKLSAgIlB5Tm9kZV9Db21waWxlIgotICAiUHlfT3B0aW1pemVGbGFnIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29kZWNzKQotICAiX1B5Q29kZWNfTG9va3VwIgotICAiUHlDb2RlY19FbmNvZGUiCi0gICJQeUNvZGVjX0RlY29kZSIKLSAgIlB5Q29kZWNfSWdub3JlRXJyb3JzIgotICAiUHlDb2RlY19SZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycyIKLSAgIlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycyIKLSAgIlB5Q29kZWNfUmVnaXN0ZXIiCi0gICJQeUNvZGVjX0VuY29kZXIiCi0gICJQeUNvZGVjX0RlY29kZXIiCi0gICJQeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyIgotICAiUHlDb2RlY19TdHJlYW1SZWFkZXIiCi0gICJQeUNvZGVjX1N0cmVhbVdyaXRlciIKLSAgIlB5Q29kZWNfUmVnaXN0ZXJFcnJvciIKLSAgIlB5Q29kZWNfTG9va3VwRXJyb3IiCi0gICJQeUNvZGVjX1N0cmljdEVycm9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVycm9ycykKLSAgIlB5RXJyX1NldE5vbmUiCi0gICJQeUVycl9TZXRTdHJpbmciCi0gICJQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMiCi0gICJQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24iCi0gICJQeUVycl9GZXRjaCIKLSAgIlB5RXJyX0NsZWFyIgotICAiUHlFcnJfTm9NZW1vcnkiCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QiCi0gICJQeUVycl9Gb3JtYXQiCi0gICJQeUVycl9OZXdFeGNlcHRpb24iCi0gICJQeUVycl9Xcml0ZVVucmFpc2FibGUiCi0gICJQeUVycl9TeW50YXhMb2NhdGlvbiIKLSAgIlB5RXJyX1Byb2dyYW1UZXh0IgotICAiUHlFcnJfU2V0T2JqZWN0IgotICAiUHlFcnJfT2NjdXJyZWQiCi0gICJQeUVycl9SZXN0b3JlIgotICAiUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX0JhZEFyZ3VtZW50IgotICAiUHlFcnJfU2V0RnJvbUVycm5vIgotICAiUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lIgotICAiUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiX1B5RXJyX0JhZEludGVybmFsQ2FsbCIKLSAgIlB5RXJyX1dhcm4iCi0gICJQeUVycl9XYXJuRXhwbGljaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW4pCi0gICJQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJvemVubWFpbikKLSAgIlB5X0Zyb3plbk1haW4iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmdXR1cmUpCi0gICJQeUZ1dHVyZV9Gcm9tQVNUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0YXJncykKLSAgIlB5QXJnX1BhcnNlIgotICAiX1B5QXJnX1BhcnNlX1NpemVUIgotICAiUHlBcmdfUGFyc2VUdXBsZSIKLSAgIl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUIgotICAiUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzIgotICAiX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVCIKLSAgIlB5QXJnX1VucGFja1R1cGxlIgotICAiX1B5QXJnX05vS2V5d29yZHMiCi0gICJQeUFyZ19WYVBhcnNlIgotICAiUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfVmFQYXJzZV9TaXplVCIKLSAgIl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvbXBpbGVyKQotICAiUHlfR2V0Q29tcGlsZXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRjb3B5cmlnaHQpCi0gICJQeV9HZXRDb3B5cmlnaHQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRwbGF0Zm9ybSkKLSAgIlB5X0dldFBsYXRmb3JtIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0dmVyc2lvbikKLSAgIlB5X0dldFZlcnNpb24iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihncmFtaW5pdCkKLSAgIl9QeVBhcnNlcl9HcmFtbWFyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1wb3J0KQotICAiX1B5SW1wb3J0X0luaXQiCi0gICJfUHlJbXBvcnRIb29rc19Jbml0IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlIgotICAiUHlJbXBvcnRfQ2xlYW51cCIKLSAgIl9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbiIKLSAgIlB5SW1wb3J0X0FkZE1vZHVsZSIKLSAgIlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgiCi0gICJQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsIgotICAiUHlJbXBvcnRfUmVsb2FkTW9kdWxlIgotICAiUHlJbXBvcnRfSW1wb3J0IgotOyAgImluaXRpbXAiCi0gICJfUHlJbXBvcnRfRmluaSIKLSAgIlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUiCi0gICJQeUltcG9ydF9HZXRNb2R1bGVEaWN0IgotICAiX1B5SW1wb3J0X0ZpbmRNb2R1bGUiCi0gICJfUHlJbXBvcnRfSXNTY3JpcHQiCi0gICJfUHlJbXBvcnRfUmVJbml0TG9jayIKLSAgIl9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQXBwZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0V4dGVuZEluaXR0YWIiCi0gICJQeUltcG9ydF9Jbml0dGFiIgotICAiX1B5SW1wb3J0X0ZpbGV0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnRkbCkKLSAgIl9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hcnNoYWwpCi0gICJQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nIgotICAiUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZSIKLSAgIlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUiCi0gICJQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyIKLSAgIlB5TWFyc2hhbF9Jbml0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobW9kc3VwcG9ydCkKLSAgIlB5X0luaXRNb2R1bGU0IgotICAiUHlfQnVpbGRWYWx1ZSIKLSAgIl9QeV9CdWlsZFZhbHVlX1NpemVUIgotICAiUHlFdmFsX0NhbGxGdW5jdGlvbiIKLSAgIlB5RXZhbF9DYWxsTWV0aG9kIgotICAiX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVCIKLSAgIlB5X1ZhQnVpbGRWYWx1ZSIKLSAgIlB5TW9kdWxlX0FkZE9iamVjdCIKLSAgIlB5TW9kdWxlX0FkZEludENvbnN0YW50IgotICAiUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQiCi0gICJfUHlfUGFja2FnZUNvbnRleHQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXNucHJpbnRmKQotICAiUHlPU19zbnByaW50ZiIKLSAgIlB5T1NfdnNucHJpbnRmIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlzdHJ0b3VsKQotICAiUHlPU19zdHJ0b3VsIgotICAiUHlPU19zdHJ0b2wiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweWFyZW5hKQotICAiUHlBcmVuYV9OZXciCi0gICJQeUFyZW5hX0ZyZWUiCi0gICJQeUFyZW5hX01hbGxvYyIKLSAgIlB5QXJlbmFfQWRkUHlPYmplY3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweWZwZSkKLSAgIlB5RlBFX2R1bW15IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHlzdGF0ZSkKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhciIKLSAgIlB5VGhyZWFkU3RhdGVfQ2xlYXIiCi0gICJfUHlUaHJlYWRfQ3VycmVudEZyYW1lcyIKLSAgIlB5R0lMU3RhdGVfRW5zdXJlIgotICAiUHlHSUxTdGF0ZV9SZWxlYXNlIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05ldyIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUiCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfTmV3IgotICAiUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50IgotICAiUHlUaHJlYWRTdGF0ZV9HZXQiCi0gICJQeVRocmVhZFN0YXRlX1N3YXAiCi0gICJQeVRocmVhZFN0YXRlX0dldERpY3QiCi0gICJQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjIgotICAiUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUiCi0gICJQeUludGVycHJldGVyU3RhdGVfSGVhZCIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXh0IgotICAiUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWQiCi0gICJQeVRocmVhZFN0YXRlX05leHQiCi0gICJfUHlHSUxTdGF0ZV9Jbml0IgotICAiX1B5R0lMU3RhdGVfRmluaSIKLSAgIl9QeVRocmVhZFN0YXRlX0N1cnJlbnQiCi0gICJfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5dGhvbnJ1bikKLSAgIlB5X0lnbm9yZUVudmlyb25tZW50RmxhZyIKLSAgIlB5X0RlYnVnRmxhZyIKLSAgIlB5X1ZlcmJvc2VGbGFnIgotICAiUHlfTm9TaXRlRmxhZyIKLSAgIlB5X0ludGVyYWN0aXZlRmxhZyIKLSAgIlB5X0Zyb3plbkZsYWciCi0gICJQeV9Jbml0aWFsaXplRXgiCi0gICJQeV9GYXRhbEVycm9yIgotICAiUHlfTmV3SW50ZXJwcmV0ZXIiCi0gICJQeUVycl9QcmludCIKLSAgIlB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MiCi0gICJQeVBhcnNlcl9BU1RGcm9tRmlsZSIKLSAgIlB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzIgotICAiUHlSdW5fRmlsZUV4RmxhZ3MiCi0gICJQeV9FeGl0IgotICAiUHlFcnJfUHJpbnRFeCIKLSAgIlB5RXJyX0Rpc3BsYXkiCi0gICJQeV9TZXRQcm9ncmFtTmFtZSIKLSAgIlB5X0dldFByb2dyYW1OYW1lIgotICAiUHlfU2V0UHl0aG9uSG9tZSIKLSAgIlB5X0dldFB5dGhvbkhvbWUiCi0gICJQeV9Jbml0aWFsaXplIgotICAiUHlfRmluYWxpemUiCi0gICJQeV9Jc0luaXRpYWxpemVkIgotICAiUHlfRW5kSW50ZXJwcmV0ZXIiCi0gICJQeVJ1bl9BbnlGaWxlRmxhZ3MiCi0gICJQeV9GZElzSW50ZXJhY3RpdmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyIKLSAgIlB5UnVuX0FueUZpbGVFeEZsYWdzIgotICAiUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MiCi0gICJQeVJ1bl9TdHJpbmdGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21TdHJpbmciCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3MiCi0gICJQeV9Db21waWxlU3RyaW5nRmxhZ3MiCi0gICJQeV9TeW10YWJsZVN0cmluZyIKLSAgIlB5X0F0RXhpdCIKLSAgIlB5T1NfZ2V0c2lnIgotICAiUHlPU19zZXRzaWciCi0gICJQeVBhcnNlcl9TZXRFcnJvciIKLSAgIlB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGaWxlbmFtZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nIgotICAiUHlSdW5fQW55RmlsZSIKLSAgIlB5UnVuX0FueUZpbGVFeCIKLSAgIlB5UnVuX0ZpbGUiCi0gICJQeVJ1bl9GaWxlRXgiCi0gICJQeVJ1bl9GaWxlRmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVGaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4IgotICAiUHlSdW5fU3RyaW5nIgotICAiUHlSdW5fU2ltcGxlU3RyaW5nIgotICAiUHlfQ29tcGlsZVN0cmluZyIKLSAgIlB5UnVuX0ludGVyYWN0aXZlT25lIgotICAiUHlSdW5fSW50ZXJhY3RpdmVMb29wIgotICAiUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZyIKLSAgIlB5X1VuaWNvZGVGbGFnIgotICAiX1B5X1FuZXdGbGFnIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0bWVtYmVyKQotICAiUHlNZW1iZXJfR2V0IgotICAiUHlNZW1iZXJfR2V0T25lIgotICAiUHlNZW1iZXJfU2V0T25lIgotICAiUHlNZW1iZXJfU2V0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3ltdGFibGUpCi0gICJQeVN5bXRhYmxlX0J1aWxkIgotICAiUHlTeW10YWJsZV9GcmVlIgotICAiUHlTVF9HZXRTY29wZSIKLSAgIlB5U3ltdGFibGVfTG9va3VwIgotICAiUHlTVEVudHJ5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeXNtb2R1bGUpCi0gICJfUHlTeXNfSW5pdCIKLSAgIlB5U3lzX1dyaXRlU3RkZXJyIgotICAiUHlTeXNfU2V0UGF0aCIKLSAgIlB5U3lzX1NldEFyZ3YiCi0gICJQeVN5c19Xcml0ZVN0ZG91dCIKLSAgIlB5X1N1YnZlcnNpb25SZXZpc2lvbiIKLSAgIlB5X1N1YnZlcnNpb25TaG9ydEJyYW5jaCIKLSAgIlB5U3lzX0dldE9iamVjdCIKLSAgIlB5U3lzX1NldE9iamVjdCIKLSAgIlB5U3lzX0dldEZpbGUiCi0gICJQeVN5c19SZXNldFdhcm5PcHRpb25zIgotICAiUHlTeXNfQWRkV2Fybk9wdGlvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRyYWNlYmFjaykKLSAgIlB5VHJhY2VCYWNrX0hlcmUiCi0gICJQeVRyYWNlQmFja19QcmludCIKLSAgIlB5VHJhY2VCYWNrX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRvcHQpCi0gICJfUHlPU19HZXRPcHQiCi0gICJfUHlPU19vcHRlcnIiCi0gICJfUHlPU19vcHRpbmQiCi0gICJfUHlPU19vcHRhcmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkeW5sb2FkX3NobGliKQotICAiX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiIgotICAiX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGhyZWFkKQotICAiUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZSIKLSAgIlB5VGhyZWFkX2luaXRfdGhyZWFkIgotICAiUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCIKLSAgIlB5VGhyZWFkX2V4aXRfdGhyZWFkIgotICAiUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCIKLSAgIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2siCi0gICJQeVRocmVhZF9mcmVlX2xvY2siCi0gICJQeVRocmVhZF9hY3F1aXJlX2xvY2siCi0gICJQeVRocmVhZF9yZWxlYXNlX2xvY2siCi0gICJQeVRocmVhZF9nZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfc2V0X3N0YWNrc2l6ZSIKLSAgIlB5VGhyZWFkX2NyZWF0ZV9rZXkiCi0gICJQeVRocmVhZF9kZWxldGVfa2V5IgotICAiUHlUaHJlYWRfc2V0X2tleV92YWx1ZSIKLSAgIlB5VGhyZWFkX2dldF9rZXlfdmFsdWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnY21vZHVsZSkKLTsgICJpbml0Z2MiCi0gICJfUHlPYmplY3RfR0NfTmV3IgotICAiX1B5T2JqZWN0X0dDX05ld1ZhciIKLSAgIlB5R0NfQ29sbGVjdCIKLSAgIl9QeU9iamVjdF9HQ19SZXNpemUiCi0gICJfUHlPYmplY3RfR0NfTWFsbG9jIgotICAiUHlPYmplY3RfR0NfVHJhY2siCi0gICJQeU9iamVjdF9HQ19VblRyYWNrIgotICAiUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfRHVtcCIKLSAgIl9QeU9iamVjdF9HQ19UcmFjayIKLSAgIl9QeU9iamVjdF9HQ19VblRyYWNrIgotICAiX1B5T2JqZWN0X0dDX0RlbCIKLSAgIl9QeUdDX2dlbmVyYXRpb24wIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2lnbmFsbW9kdWxlKQotOyAgImluaXRzaWduYWwiCi0gICJQeUVycl9DaGVja1NpZ25hbHMiCi0gICJQeUVycl9TZXRJbnRlcnJ1cHQiCi0gICJQeU9TX0ZpbmlJbnRlcnJ1cHRzIgotICAiUHlPU19JbnRlcnJ1cHRPY2N1cnJlZCIKLSAgIlB5T1NfSW5pdEludGVycnVwdHMiCi0gICJQeU9TX0FmdGVyRm9yayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHBvc2l4bW9kdWxlKQotOyAgImluaXRvczIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfdGhyZWFkbW9kdWxlKQotOyAgImluaXRfdGhyZWFkIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYXJyYXltb2R1bGUpCi07ICAiaW5pdGFycmF5IgotOyAgImFycmF5X21ldGhvZHMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihiaW5hc2NpaSkKLTsgICJpbml0YmluYXNjaWkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjbWF0aG1vZHVsZSkKLTsgICJpbml0Y21hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY29kZWNzbW9kdWxlKQotOyAgImluaXRfY29kZWNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29sbGVjdGlvbnNtb2R1bGUpCi07ICAiaW5pdGNvbGxlY3Rpb25zIgotICAiZGVxdWVpdGVyX3R5cGUiCi0gICJkZXF1ZXJldml0ZXJfdHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNQaWNrbGUpCi07ICAiaW5pdGNQaWNrbGUiCi07ICAiZmFzdF9zYXZlX2xlYXZlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2NzdikKLTsgICJpbml0X2NzdiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRhdGV0aW1lbW9kdWxlKQotOyAgImluaXRkYXRldGltZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRsbW9kdWxlKQotOyAgImluaXRkbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVycm5vbW9kdWxlKQotOyAgImluaXRlcnJubyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZjbnRsbW9kdWxlKQotOyAgImluaXRmY250bCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9mdW5jdG9vbHNtb2R1bGUpCi07ICAiaW5pdF9mdW5jdG9vbHMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfaGVhcHFtb2R1bGUpCi07ICAiaW5pdF9oZWFwcSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltYWdlb3ApCi07ICAiaW5pdGltYWdlb3AiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpdGVydG9vbHNtb2R1bGUpCi07ICAiaW5pdGl0ZXJ0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9sb2NhbGVtb2R1bGUpCi07ICAiaW5pdF9sb2NhbGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtYXRobW9kdWxlKQotOyAgImluaXRtYXRoIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1KQotICAibWQ1X2ZpbmlzaCIKLSAgIm1kNV9pbml0IgotICAibWQ1X2FwcGVuZCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1kNW1vZHVsZSkKLTsgICJpbml0X21kNSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9wZXJhdG9yKQotOyAgImluaXRvcGVyYXRvciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9yYW5kb21tb2R1bGUpCi07ICAiaW5pdF9yYW5kb20iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihyZ2JpbWdtb2R1bGUpCi07ICAiaW5pdHJnYmltZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYW1vZHVsZSkKLTsgICJpbml0X3NoYSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYTI1Nm1vZHVsZSkKLTsgICJpbml0X3NoYTI1NiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYTUxMm1vZHVsZSkKLTsgICJpbml0X3NoYTUxMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zcmUpCi07ICAiaW5pdF9zcmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJvcG1vZHVsZSkKLTsgICJpbml0c3Ryb3AiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfc3RydWN0KQotOyAgImluaXRfc3RydWN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3ltdGFibGVtb2R1bGUpCi07ICAiaW5pdF9zeW10YWJsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRlcm1pb3MpCi07ICAiaW5pdHRlcm1pb3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aW1lbW9kdWxlKQotOyAgImluaXR0aW1lIgotICAiX1B5VGltZV9Eb3VibGVUb1RpbWV0IgotOyAgImluaXR0aW1lem9uZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWluZ21vZHVsZSkKLTsgICJpbml0dGltaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3dlYWtyZWYpCi07ICAiaW5pdF93ZWFrcmVmIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoeHhzdWJ0eXBlKQotOyAgImluaXR4eHN1YnR5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih6aXBpbXBvcnQpCi07ICAiaW5pdHppcGltcG9ydCIKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob25wbS5jIGIvUEMvb3MyZW14L3B5dGhvbnBtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNDdmNGIuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L3B5dGhvbnBtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyogT1MvMiBQTSBtYWluIHByb2dyYW0gLSBjcmVhdGVzIGEgaGlkZGVuIHdpbmRvdywgYW5kIHN0YXJ0cyBQeXRob24KLSAqIGludGVycHJldGVyIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBzbyB0aGF0IFB5dGhvbiBzY3JpcHRzIGNhbiBiZQotICogcnVuIGluIFBNIHByb2Nlc3Mgc3BhY2Ugd2l0aG91dCBhIGNvbnNvbGUgV2luZG93LiAgVGhlIGludGVycHJldGVyCi0gKiBpcyBpbmNvcnBvcmF0ZWQgYnkgbGlua2luZyBpbiB0aGUgUHl0aG9uIERMTC4KLSAqCi0gKiBBcyBpdCBzdGFuZHMsIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBhZGVxdWF0ZSBmb3Igc3VwcG9ydGluZyBQeXRob24KLSAqIEdVSSBtb2R1bGVzLCBhcyB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGhhdmUgaXRzIG93biBtZXNzYWdlCi0gKiBxdWV1ZSAtIHdoaWNoIGlzIHJlcXVpcmVkIG9mIHRocmVhZHMgdGhhdCB3YW50IHRvIGNyZWF0ZS91c2UKLSAqIFBNIHdpbmRvd3MuCi0gKgotICogVGhpcyBjb2RlIG93ZXMgYSBsb3QgdG8gIk9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgUHJvZ3JhbW1pbmciLCBieQotICogQ2hhcmxlcyBQZXR6b2xkLgotICoKLSAqIEFuZHJldyBNYWNJbnR5cmUgPGFuZHltYWNAYnVsbHNleWUuYXBhbmEub3JnLmF1PiwgQXVndXN0IDIwMDEuCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFB5dGhvbiAyLjEuMSBsaWNlbmNlIC0gc2VlIHRoZSBMSUNFTkNFCi0gKiBmaWxlIGluIHRoZSBQeXRob24gdjIuMS4xIChvciBsYXRlcikgc291cmNlIGRpc3RyaWJ1dGlvbi4KLSAqIENvcHlyaWdodCBhc3NpZ25lZCB0byB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIDIwMDEuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX1dJTgotI2luY2x1ZGUgPG9zMi5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0vKiB1c2Ugc3RydWN0dXJlIHRvIHBhc3MgY29tbWFuZCBsaW5lIHRvIFB5dGhvbiB0aHJlYWQgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgaW50IGFyZ2M7Ci0gICAgY2hhciAqKmFyZ3Y7Ci0gICAgSFdORCBGcmFtZTsKLSAgICBpbnQgcnVubmluZzsKLX0gYXJnbGlzdDsKLQotLyogbWFrZSB0aGlzIGEgZ2xvYmFsIHRvIHNpbXBsaWZ5IGFjY2Vzcy4KLSAqIGl0IHNob3VsZCBvbmx5IGJlIHNldCBmcm9tIHRoZSBQeXRob24gdGhyZWFkLCBvciBieSB0aGUgY29kZSB0aGF0Ci0gKiBpbml0aWF0ZXMgdGhlIFB5dGhvbiB0aHJlYWQgd2hlbiB0aGUgdGhyZWFkIGNhbm5vdCBiZSBjcmVhdGVkLgotICovCi1pbnQgUHl0aG9uUkM7Ci0KLWV4dGVybiBETF9FWFBPUlQoaW50KSBQeV9NYWluKGludCwgY2hhciAqKik7Ci12b2lkIFB5dGhvblRocmVhZCh2b2lkICopOwotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIFVMT05HIEZyYW1lRmxhZ3MgPSBGQ0ZfVElUTEVCQVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfU1lTTUVOVSB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSVpFQk9SREVSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX0hJREVCVVRUT04gfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfU0hFTExQT1NJVElPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9UQVNLTElTVDsKLSAgICBIQUIgaGFiOwotICAgIEhNUSBobXE7Ci0gICAgSFdORCBDbGllbnQ7Ci0gICAgUU1TRyBxbXNnOwotICAgIGFyZ2xpc3QgYXJnczsKLSAgICBpbnQgcHl0aG9uX3RpZDsKLQotICAgIC8qIGluaXQgUE0gYW5kIGNyZWF0ZSBtZXNzYWdlIHF1ZXVlICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLSAgICBobXEgPSBXaW5DcmVhdGVNc2dRdWV1ZShoYWIsIDApOwotCi0gICAgLyogY3JlYXRlIGEgKGhpZGRlbikgV2luZG93IHRvIGhvdXNlIHRoZSB3aW5kb3cgcHJvY2VkdXJlICovCi0gICAgYXJncy5GcmFtZSA9IFdpbkNyZWF0ZVN0ZFdpbmRvdyhIV05EX0RFU0tUT1AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyYW1lRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvblBNIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2xpZW50KTsKLQotICAgIC8qIHJ1biBQeXRob24gaW50ZXJwcmV0ZXIgaW4gYSB0aHJlYWQgKi8KLSAgICBhcmdzLmFyZ2MgPSBhcmdjOwotICAgIGFyZ3MuYXJndiA9IGFyZ3Y7Ci0gICAgYXJncy5ydW5uaW5nID0gMDsKLSAgICBpZiAoLTEgPT0gKHB5dGhvbl90aWQgPSBfYmVnaW50aHJlYWQoUHl0aG9uVGhyZWFkLCBOVUxMLCAxMDI0ICogMTAyNCwgJmFyZ3MpKSkKLSAgICB7Ci0gICAgICAgIC8qIGNvdWxkbid0IHN0YXJ0IHRocmVhZCAqLwotICAgICAgICBXaW5BbGFybShIV05EX0RFU0tUT1AsIFdBX0VSUk9SKTsKLSAgICAgICAgUHl0aG9uUkMgPSAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBwcm9jZXNzIFBNIG1lc3NhZ2VzLCB1bnRpbCBQeXRob24gZXhpdHMgKi8KLSAgICAgICAgd2hpbGUgKFdpbkdldE1zZyhoYWIsICZxbXNnLCBOVUxMSEFORExFLCAwLCAwKSkKLSAgICAgICAgICAgIFdpbkRpc3BhdGNoTXNnKGhhYiwgJnFtc2cpOwotICAgICAgICBpZiAoYXJncy5ydW5uaW5nID4gMCkKLSAgICAgICAgICAgIERvc0tpbGxUaHJlYWQocHl0aG9uX3RpZCk7Ci0gICAgfQotCi0gICAgLyogZGVzdHJveSB3aW5kb3csIHNodXRkb3duIG1lc3NhZ2UgcXVldWUgYW5kIFBNICovCi0gICAgV2luRGVzdHJveVdpbmRvdyhhcmdzLkZyYW1lKTsKLSAgICBXaW5EZXN0cm95TXNnUXVldWUoaG1xKTsKLSAgICBXaW5UZXJtaW5hdGUoaGFiKTsKLQotICAgIHJldHVybiBQeXRob25SQzsKLX0KLQotdm9pZCBQeXRob25UaHJlYWQodm9pZCAqYXJnbCkKLXsKLSAgICBIQUIgaGFiOwotICAgIGFyZ2xpc3QgKmFyZ3M7Ci0KLSAgICAvKiBQTSBpbml0aWFsaXNhdGlvbiAqLwotICAgIGhhYiA9IFdpbkluaXRpYWxpemUoMCk7Ci0KLSAgICAvKiBzdGFydCBQeXRob24gKi8KLSAgICBhcmdzID0gKGFyZ2xpc3QgKilhcmdsOwotICAgIGFyZ3MtPnJ1bm5pbmcgPSAxOwotICAgIFB5dGhvblJDID0gUHlfTWFpbihhcmdzLT5hcmdjLCBhcmdzLT5hcmd2KTsKLQotICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgc2VuZCB0aGUgdGVybWluYXRpb24gbWVzc2FnZSAqLwotICAgIERvc0VudGVyQ3JpdFNlYygpOwotICAgIGFyZ3MtPnJ1bm5pbmcgPSAwOwotICAgIFdpblBvc3RNc2coYXJncy0+RnJhbWUsIFdNX1FVSVQsIE5VTEwsIE5VTEwpOwotCi0gICAgLyogc2h1dGRvd24gUE0gYW5kIHRlcm1pbmF0ZSB0aHJlYWQgKi8KLSAgICBXaW5UZXJtaW5hdGUoaGFiKTsKLSAgICBfZW5kdGhyZWFkKCk7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYgYi9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZGFiOGQuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvX3RraW50ZXIuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1MSUJSQVJZICAgICAgICBfVEtJTlRFUiBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFCi1ERVNDUklQVElPTiAgICAnUHl0aG9uIEV4dGVuc2lvbiBETEwgdjEuMCBmb3IgQWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudCcKLVBST1RNT0RFCi1EQVRBICAgICAgICAgICBNVUxUSVBMRSBOT05TSEFSRUQKLQotRVhQT1JUUwotICAgICAgICAgICAgICAgaW5pdF90a2ludGVyCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL2NvbmZpZy5jIGIvUEMvb3MydmFjcHAvY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNmI1MjEuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAoYykgMjAwMCwgQmVPcGVuLmNvbS4KLUNvcHlyaWdodCAoYykgMTk5NS0yMDAwLCBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMuCi1Db3B5cmlnaHQgKGMpIDE5OTAtMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotU2VlIHRoZSBmaWxlICJNaXNjL0NPUFlSSUdIVCIgZm9yIGluZm9ybWF0aW9uIG9uIHVzYWdlIGFuZAotcmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCBhbmQgZm9yIGEgRElTQ0xBSU1FUiBPRiBBTEwgV0FSUkFOVElFUy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRhcnJheSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRhdWRpb29wKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGNtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGVycm5vKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0bWF0aCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtZDUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0bnQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3MyKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBvc2l4KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHJnYmltZyh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0c2VsZWN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0c3RydWN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHRpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3RocmVhZCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRwY3JlKHZvaWQpOwotI2lmZGVmIFdJTjMyCi1leHRlcm4gdm9pZCBpbml0bXN2Y3J0KHZvaWQpOwotI2VuZGlmCi0KLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwotCi1leHRlcm4gdm9pZCBQeU1hcnNoYWxfSW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRpbXAodm9pZCk7Ci0KLXN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdID0gewotCi0gICAgICAgIHsiYXJyYXkiLCBpbml0YXJyYXl9LAotI2lmZGVmIE1fSTM4NgotICAgICAgICB7ImF1ZGlvb3AiLCBpbml0YXVkaW9vcH0sCi0jZW5kaWYKLSAgICAgICAgeyJiaW5hc2NpaSIsIGluaXRiaW5hc2NpaX0sCi0gICAgICAgIHsiY21hdGgiLCBpbml0Y21hdGh9LAotICAgICAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLS8vICAgICAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgICAgIHsibWF0aCIsIGluaXRtYXRofSwKLSAgICAgICAgeyJtZDUiLCBpbml0bWQ1fSwKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQotICAgICAgICB7Im50IiwgaW5pdG50fSwgLyogVXNlIHRoZSBOVCBvcyBmdW5jdGlvbnMsIG5vdCBwb3NpeCAqLwotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICB7Im9zMiIsIGluaXRvczJ9LAotI2Vsc2UKLSAgICAgICAgeyJwb3NpeCIsIGluaXRwb3NpeH0sCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICB7Im9wZXJhdG9yIiwgaW5pdG9wZXJhdG9yfSwKLS8vICAgICAgICB7InJnYmltZyIsIGluaXRyZ2JpbWd9LAotICAgICAgICB7InNpZ25hbCIsIGluaXRzaWduYWx9LAotI2lmZGVmIFVTRV9TT0NLRVQKLSAgICAgICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgICAgICB7InNlbGVjdCIsIGluaXRzZWxlY3R9LAotI2VuZGlmCi0gICAgICAgIHsic3RydWN0IiwgaW5pdHN0cnVjdH0sCi0gICAgICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICB7Il90aHJlYWQiLCBpbml0X3RocmVhZH0sCi0jZW5kaWYKLSAgICAgICAgeyJwY3JlIiwgaW5pdHBjcmV9LAotI2lmZGVmIFdJTjMyCi0gICAgICAgIHsibXN2Y3J0IiwgaW5pdG1zdmNydH0sCi0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAgICAgLyogVGhpcyBtb2R1bGUgImxpdmVzIGluIiB3aXRoIG1hcnNoYWwuYyAqLwotICAgICAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCi0KLSAgICAgICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgICAgIHsiX2ltcCIsIGluaXRpbXB9LAotCi0gICAgICAgIC8qIFRoZXNlIGVudHJpZXMgYXJlIGhlcmUgZm9yIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcyAqLwotICAgICAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgICAgIHsic3lzIiwgTlVMTH0sCi0KLSAgICAgICAgLyogU2VudGluZWwgKi8KLSAgICAgICAgezAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYyBiL1BDL29zMnZhY3BwL2dldHBhdGhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzI4MjcuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBVc2VkIGJ5IERPUywgT1MvMiwgV2luZG93cyAzLjEuICBXb3JrcyBvbiBOVCB0b28uICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJvc2RlZnMuaCIKLQotI2lmZGVmIE1TX1dJTjMyCi0jaW5jbHVkZSA8d2luZG93cy5oPgotZXh0ZXJuIEJPT0wgUHlXaW5fSXNXaW4zMnModm9pZCk7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLwotCi0vKiBTZWFyY2ggaW4gc29tZSBjb21tb24gbG9jYXRpb25zIGZvciB0aGUgYXNzb2NpYXRlZCBQeXRob24gbGlicmFyaWVzLgotICoKLSAqIFR3byBkaXJlY3RvcmllcyBtdXN0IGJlIGZvdW5kLCB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZGlyZWN0b3J5Ci0gKiAocHJlZml4KSwgY29udGFpbmluZyB0aGUgY29tbW9uIC5weSBhbmQgLnB5YyBmaWxlcywgYW5kIHRoZSBwbGF0Zm9ybQotICogZGVwZW5kZW50IGRpcmVjdG9yeSAoZXhlY19wcmVmaXgpLCBjb250YWluaW5nIHRoZSBzaGFyZWQgbGlicmFyeQotICogbW9kdWxlcy4gIE5vdGUgdGhhdCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGNhbiBiZSB0aGUgc2FtZSBkaXJlY3RvcnksCi0gKiBidXQgZm9yIHNvbWUgaW5zdGFsbGF0aW9ucywgdGhleSBhcmUgZGlmZmVyZW50LgotICoKLSAqIFB5X0dldFBhdGgoKSB0cmllcyB0byByZXR1cm4gYSBzZW5zaWJsZSBQeXRob24gbW9kdWxlIHNlYXJjaCBwYXRoLgotICoKLSAqIEZpcnN0LCB3ZSBsb29rIHRvIHNlZSBpZiB0aGUgZXhlY3V0YWJsZSBpcyBpbiBhIHN1YmRpcmVjdG9yeSBvZgotICogdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnkuICBXZSBjYWxjdWxhdGUgdGhlIGZ1bGwgcGF0aCBvZiB0aGUKLSAqIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIGFzIHByb2dwYXRoLiAgV2Ugd29yayBiYWNrd2FyZHMKLSAqIGFsb25nIHByb2dwYXRoIGFuZCBsb29rIGZvciAkZGlyL01vZHVsZXMvU2V0dXAuaW4sIGEgZGlzdGluY3RpdmUKLSAqIGxhbmRtYXJrLiAgSWYgZm91bmQsIHdlIHVzZSAkZGlyL0xpYiBhcyAkcm9vdC4gIFRoZSByZXR1cm5lZAotICogUHl0aG9uIHBhdGggaXMgdGhlIGNvbXBpbGVkICNkZWZpbmUgUFlUSE9OUEFUSCB3aXRoIGFsbCB0aGUgaW5pdGlhbAotICogIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdC4KLSAqCi0gKiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGEgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2UgcmV0dXJuIHRoYXQuCi0gKgotICogT3RoZXJ3aXNlIHdlIHRyeSB0byBmaW5kICRwcm9ncGF0aC9saWIvb3MucHksIGFuZCBpZiBmb3VuZCwgdGhlbgotICogcm9vdCBpcyAkcHJvZ3BhdGgvbGliLCBhbmQgd2UgcmV0dXJuIFB5dGhvbiBwYXRoIGFzIGNvbXBpbGVkIFBZVEhPTlBBVEgKLSAqIHdpdGggYWxsICIuL2xpYiIgcmVwbGFjZWQgYnkgJHJvb3QgKGFzIGFib3ZlKS4KLSAqCi0gKi8KLQotI2lmbmRlZiBMQU5ETUFSSwotI2RlZmluZSBMQU5ETUFSSyAibGliXFxvcy5weSIKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgaW50IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotCi1zdGF0aWMgaW50Ci1leGlzdHMoY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgc3RydWN0IHN0YXQgYnVmOwotICAgIHJldHVybiBzdGF0KGZpbGVuYW1lLCAmYnVmKSA9PSAwOwotfQotCi0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi1zdGF0aWMgdm9pZAotam9pbihjaGFyICpidWZmZXIsIGNoYXIgKnN0dWZmKQotewotICAgIGludCBuLCBrOwotICAgIGlmIChpc19zZXAoc3R1ZmZbMF0pKQotICAgICAgICBuID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbiA9IHN0cmxlbihidWZmZXIpOwotICAgICAgICBpZiAobiA+IDAgJiYgIWlzX3NlcChidWZmZXJbbi0xXSkgJiYgbiA8IE1BWFBBVEhMRU4pCi0gICAgICAgICAgICBidWZmZXJbbisrXSA9IFNFUDsKLSAgICB9Ci0gICAgaWYgKG4gPiBNQVhQQVRITEVOKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGpvaW5wYXRoKCkiKTsKLSAgICBrID0gc3RybGVuKHN0dWZmKTsKLSAgICBpZiAobiArIGsgPiBNQVhQQVRITEVOKQotICAgICAgICBrID0gTUFYUEFUSExFTiAtIG47Ci0gICAgc3RybmNweShidWZmZXIrbiwgc3R1ZmYsIGspOwotICAgIGJ1ZmZlcltuK2tdID0gJ1wwJzsKLX0KLQotCi1zdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeChjaGFyICphcmd2MF9wYXRoLCBjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbjsKLQotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIHJvb3QgaXMgZm91bmQgKi8KLSAgICBzdHJjcHkocHJlZml4LCBhcmd2MF9wYXRoKTsKLSAgICBkbyB7Ci0gICAgICAgIG4gPSBzdHJsZW4ocHJlZml4KTsKLSAgICAgICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICAgICAgaWYgKGV4aXN0cyhwcmVmaXgpKSB7Ci0gICAgICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICAgICAgcmVkdWNlKHByZWZpeCk7Ci0gICAgfSB3aGlsZSAocHJlZml4WzBdKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2lmZGVmIE1TX1dJTjMyCi0jaW5jbHVkZSAibWFsbG9jLmgiIC8vIGZvciBhbGxvY2EgLSBzZWUgY29tbWVudHMgYmVsb3chCi1leHRlcm4gY29uc3QgY2hhciAqUHlXaW5fRExMVmVyc2lvblN0cmluZzsgLy8gYSBzdHJpbmcgbG9hZGVkIGZyb20gdGhlIERMTCBhdCBzdGFydHVwLgotCi0KLS8qIExvYWQgYSBQWVRIT05QQVRIIHZhbHVlIGZyb20gdGhlIHJlZ2lzdHJ5LgotICAgTG9hZCBmcm9tIGVpdGhlciBIS0VZX0xPQ0FMX01BQ0hJTkUgb3IgSEtFWV9DVVJSRU5UX1VTRVIuCi0KLSAgIFJldHVybnMgTlVMTCwgb3IgYSBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGZyZWVkLgotKi8KLQotc3RhdGljIGNoYXIgKgotZ2V0cHl0aG9ucmVncGF0aChIS0VZIGtleUJhc2UsIEJPT0wgYldpbjMycykKLXsKLSAgICBIS0VZIG5ld0tleSA9IDA7Ci0gICAgRFdPUkQgbmFtZVNpemUgPSAwOwotICAgIERXT1JEIGRhdGFTaXplID0gMDsKLSAgICBEV09SRCBudW1FbnRyaWVzID0gMDsKLSAgICBMT05HIHJjOwotICAgIGNoYXIgKnJldHZhbCA9IE5VTEw7Ci0gICAgY2hhciAqZGF0YUJ1ZjsKLSAgICBjb25zdCBjaGFyIGtleVByZWZpeFtdID0gIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXCI7Ci0gICAgY29uc3QgY2hhciBrZXlTdWZmaXhbXSA9ICJcXFB5dGhvblBhdGgiOwotICAgIGludCB2ZXJzaW9uTGVuOwotICAgIGNoYXIgKmtleUJ1ZjsKLQotICAgIC8vIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSgKLSAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwotICAgIC8vIGFsbG9jYSA9PSBubyBmcmVlIHJlcXVpcmVkLCBidXQgbWVtb3J5IG9ubHkgbG9jYWwgdG8gZm4uCi0gICAgLy8gYWxzbyBubyBoZWFwIGZyYWdtZW50YXRpb24hICBBbSBJIGJlaW5nIHNpbGx5PwotICAgIGtleUJ1ZiA9IGFsbG9jYShzaXplb2Yoa2V5UHJlZml4KS0xICsgdmVyc2lvbkxlbiArIHNpemVvZihrZXlTdWZmaXgpKTsgLy8gY2hhcnMgb25seSwgcGx1cyAxIE5VTEwuCi0gICAgLy8gbG90cyBvZiBjb25zdGFudHMgaGVyZSBmb3IgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGF3YXkgOi0pCi0gICAgbWVtY3B5KGtleUJ1Ziwga2V5UHJlZml4LCBzaXplb2Yoa2V5UHJlZml4KS0xKTsKLSAgICBtZW1jcHkoa2V5QnVmK3NpemVvZihrZXlQcmVmaXgpLTEsIFB5V2luX0RMTFZlcnNpb25TdHJpbmcsIHZlcnNpb25MZW4pOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSt2ZXJzaW9uTGVuLCBrZXlTdWZmaXgsIHNpemVvZihrZXlTdWZmaXgpKTsgLy8gTlVMTCBjb21lcyB3aXRoIHRoaXMgb25lIQotCi0gICAgcmM9UmVnT3BlbktleShrZXlCYXNlLAotICAgICAgICAgICAgICAgICAga2V5QnVmLAotICAgICAgICAgICAgICAgICAgJm5ld0tleSk7Ci0gICAgaWYgKHJjPT1FUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFJlZ1F1ZXJ5SW5mb0tleShuZXdLZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAmbnVtRW50cmllcywgJm5hbWVTaXplLCAmZGF0YVNpemUsIE5VTEwsIE5VTEwpOwotICAgIH0KLSAgICBpZiAoYldpbjMycyAmJiBudW1FbnRyaWVzPT0wICYmIGRhdGFTaXplPT0wKSB7Ci0gICAgICAgIC8qIG11c3QgaGFyZGNvZGUgZm9yIFdpbjMycyAqLwotICAgICAgICBudW1FbnRyaWVzID0gMTsKLSAgICAgICAgZGF0YVNpemUgPSA1MTE7Ci0gICAgfQotICAgIGlmIChudW1FbnRyaWVzKSB7Ci0gICAgICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cy4gKi8KLSAgICAgICAgLyogV2luMzJzIGRvZXNudCBrbm93IGhvdyBtYW55IHN1YmtleXMsIHNvIHdlIGRvCi0gICAgICAgICAgIGl0IHR3aWNlICovCi0gICAgICAgIGNoYXIga2V5QnVmW01BWF9QQVRIKzFdOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBpbnQgb2ZmID0gMDsKLSAgICAgICAgZm9yKGluZGV4PTA7O2luZGV4KyspIHsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSAwOwotICAgICAgICAgICAgRFdPUkQgcmMgPSBSZWdFbnVtS2V5KG5ld0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwga2V5QnVmLCBNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LCBrZXlCdWYsIE5VTEwsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKGJXaW4zMnMgJiYgcmVxZFNpemU9PTApIHJlcWRTaXplID0gNTEyOwotICAgICAgICAgICAgZGF0YVNpemUgKz0gcmVxZFNpemUgKyAxOyAvKiAxIGZvciB0aGUgIjsiICovCi0gICAgICAgIH0KLSAgICAgICAgZGF0YUJ1ZiA9IG1hbGxvYyhkYXRhU2l6ZSsxKTsKLSAgICAgICAgaWYgKGRhdGFCdWY9PU5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogcHJldHR5IHNlcmlvdXM/ICBSYWlzZSBlcnJvcj8gKi8KLSAgICAgICAgLyogTm93IGxvb3Agb3ZlciwgZ3JhYmJpbmcgdGhlIHBhdGhzLgotICAgICAgICAgICBTdWJrZXlzIGJlZm9yZSBtYWluIGxpYnJhcnkgKi8KLSAgICAgICAgZm9yKGluZGV4PTA7O2luZGV4KyspIHsKLSAgICAgICAgICAgIGludCBhZGp1c3Q7Ci0gICAgICAgICAgICBsb25nIHJlcWRTaXplID0gZGF0YVNpemU7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsTUFYX1BBVEgrMSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlCdWYsIGRhdGFCdWYrb2ZmLCAmcmVxZFNpemUpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXFkU2l6ZT4xKSB7Ci0gICAgICAgICAgICAgICAgLyogSWYgTm90aGluZywgb3Igb25seSAnXDAnIGNvcGllZC4gKi8KLSAgICAgICAgICAgICAgICBhZGp1c3QgPSBzdHJsZW4oZGF0YUJ1ZitvZmYpOwotICAgICAgICAgICAgICAgIGRhdGFTaXplIC09IGFkanVzdDsKLSAgICAgICAgICAgICAgICBvZmYgKz0gYWRqdXN0OwotICAgICAgICAgICAgICAgIGRhdGFCdWZbb2ZmKytdID0gJzsnOwotICAgICAgICAgICAgICAgIGRhdGFCdWZbb2ZmXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBBZGRpdGlvbmFsbHksIHdpbjMycyBkb2VzbnQgd29yayBhcyBleHBlY3RlZCwgc28KLSAgICAgICAgICAgdGhlIHNwZWNpZmljIHN0cmxlbigpIGlzIHJlcXVpcmVkIGZvciAzLjEuICovCi0gICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksICIiLCBkYXRhQnVmK29mZiwgJmRhdGFTaXplKTsKLSAgICAgICAgaWYgKHJjPT1FUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBpZiAoc3RybGVuKGRhdGFCdWYpPT0wKQotICAgICAgICAgICAgICAgIGZyZWUoZGF0YUJ1Zik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dmFsID0gZGF0YUJ1ZjsgLyogY2FsbGVyIHdpbGwgZnJlZSAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyZWUoZGF0YUJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKG5ld0tleSkKLSAgICAgICAgUmVnQ2xvc2VLZXkobmV3S2V5KTsKLSAgICByZXR1cm4gcmV0dmFsOwotfQotI2VuZGlmIC8qIE1TX1dJTjMyICovCi0KLXN0YXRpYyB2b2lkCi1nZXRfcHJvZ3BhdGgodm9pZCkKLXsKLSAgICBleHRlcm4gY2hhciAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7Ci0gICAgY2hhciAqcGF0aCA9IGdldGVudigiUEFUSCIpOwotICAgIGNoYXIgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwotCi0jaWZkZWYgTVNfV0lOMzIKLSAgICBpZiAoR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpZiAocHJvZyA9PSBOVUxMIHx8ICpwcm9nID09ICdcMCcpCi0gICAgICAgIHByb2cgPSAicHl0aG9uIjsKLQotICAgIC8qIElmIHRoZXJlIGlzIG5vIHNsYXNoIGluIHRoZSBhcmd2MCBwYXRoLCB0aGVuIHdlIGhhdmUgdG8KLSAgICAgKiBhc3N1bWUgcHl0aG9uIGlzIG9uIHRoZSB1c2VyJ3MgJFBBVEgsIHNpbmNlIHRoZXJlJ3Mgbm8KLSAgICAgKiBvdGhlciB3YXkgdG8gZmluZCBhIGRpcmVjdG9yeSB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uICBJZgotICAgICAqICRQQVRIIGlzbid0IGV4cG9ydGVkLCB5b3UgbG9zZS4KLSAgICAgKi8KLSNpZmRlZiBBTFRTRVAKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkgfHwgc3RyY2hyKHByb2csIEFMVFNFUCkpCi0jZWxzZQotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSkKLSNlbmRpZgotICAgICAgICBzdHJjcHkocHJvZ3BhdGgsIHByb2cpOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwYXRoLCBsZW4pOwotICAgICAgICAgICAgICAgICoocHJvZ3BhdGggKyBsZW4pID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJjcHkocHJvZ3BhdGgsIHBhdGgpOwotCi0gICAgICAgICAgICBqb2luKHByb2dwYXRoLCBwcm9nKTsKLSAgICAgICAgICAgIGlmIChleGlzdHMocHJvZ3BhdGgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWRlbGltKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9wYXRoKHZvaWQpCi17Ci0gICAgY2hhciBhcmd2MF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBidWZzejsKLSAgICBjaGFyICpweXRob25ob21lID0gUHlfR2V0UHl0aG9uSG9tZSgpOwotICAgIGNoYXIgKmVudnBhdGggPSBQeV9HRVRFTlYoIlBZVEhPTlBBVEgiKTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGNoYXIgKm1hY2hpbmVwYXRoLCAqdXNlcnBhdGg7Ci0KLSAgICAvKiBBcmUgd2UgcnVubmluZyB1bmRlciBXaW5kb3dzIDMuMSgxKSBXaW4zMnM/ICovCi0gICAgaWYgKFB5V2luX0lzV2luMzJzKCkpIHsKLSAgICAgICAgLyogT25seSBDTEFTU0VTX1JPT1QgaXMgc3VwcG9ydGVkICovCi0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0NMQVNTRVNfUk9PVCwgVFJVRSk7Ci0gICAgICAgIHVzZXJwYXRoID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgICBtYWNoaW5lcGF0aCA9IGdldHB5dGhvbnJlZ3BhdGgoSEtFWV9MT0NBTF9NQUNISU5FLCBGQUxTRSk7Ci0gICAgICAgIHVzZXJwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0NVUlJFTlRfVVNFUiwgRkFMU0UpOwotICAgIH0KLSNlbmRpZgotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgc3RyY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoKTsKLSAgICByZWR1Y2UoYXJndjBfcGF0aCk7Ci0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCB8fCAqcHl0aG9uaG9tZSA9PSAnXDAnKSB7Ci0gICAgICAgIGlmIChzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBMQU5ETUFSSykpCi0gICAgICAgICAgICBweXRob25ob21lID0gcHJlZml4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBweXRob25ob21lID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgY2hhciAqZGVsaW07Ci0KLSAgICAgICAgc3RyY3B5KHByZWZpeCwgcHl0aG9uaG9tZSk7Ci0KLSAgICAvKiBFeHRyYWN0IEFueSBPcHRpb25hbCBUcmFpbGluZyBFWEVDX1BSRUZJWCAqLwotICAgIC8qIGUuZy4gUFlUSE9OSE9NRT08cHJlZml4Pjo8ZXhlY19wcmVmaXg+ICAgKi8KLSAgICBkZWxpbSA9IHN0cmNocihwcmVmaXgsIERFTElNKTsKLSAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgKmRlbGltID0gJ1wwJzsKLSAgICAgICAgc3RyY3B5KGV4ZWNfcHJlZml4LCBkZWxpbSsxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY3B5KGV4ZWNfcHJlZml4LCBFWEVDX1BSRUZJWCk7Ci0gICAgfQotCi0gICAgaWYgKGVudnBhdGggJiYgKmVudnBhdGggPT0gJ1wwJykKLSAgICAgICAgZW52cGF0aCA9IE5VTEw7Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzOgotICAgICAgICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAgICgyKSBmb3IgV2luMzIsIHRoZSBtYWNoaW5lcGF0aCBhbmQgdXNlcnBhdGgsIGlmIHNldDsKLSAgICAgICAoMykgdGhlIFBZVEhPTlBBVEggY29uZmlnIG1hY3JvLCB3aXRoIHRoZSBsZWFkaW5nICIuIgotICAgICAgICAgICBvZiBlYWNoIGNvbXBvbmVudCByZXBsYWNlZCB3aXRoIHB5dGhvbmhvbWUsIGlmIHNldDsKLSAgICAgICAoNCkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIChhcmd2MF9wYXRoKS4KLSAgICAgICBUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGNhbGN1bGF0ZXMgIzMgZmlyc3QuCi0gICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBpZiAoZW52cGF0aCAhPSBOVUxMKQotICAgICAgICBidWZzeiArPSBzdHJsZW4oZW52cGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihhcmd2MF9wYXRoKSArIDE7Ci0jaWZkZWYgTVNfV0lOMzIKLSAgICBpZiAobWFjaGluZXBhdGgpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihtYWNoaW5lcGF0aCkgKyAxOwotICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKHVzZXJwYXRoKSArIDE7Ci0jZW5kaWYKLQotICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IG1hbGxvYyhidWZzeik7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hbGxvYyBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGVudnBhdGg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0gICAgaWYgKHVzZXJwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIHVzZXJwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChweXRob25ob21lID09IE5VTEwpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgUFlUSE9OUEFUSCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqcCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIGludCBuOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBxID0gc3RyY2hyKHAsIERFTElNKTsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuID0gcS1wOwotICAgICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIGlzX3NlcChwWzFdKSkgewotICAgICAgICAgICAgICAgIHN0cmNweShidWYsIHB5dGhvbmhvbWUpOwotICAgICAgICAgICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBuLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgcCwgbik7Ci0gICAgICAgICAgICBidWYgKz0gbjsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgICAgIHAgPSBxKzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFyZ3YwX3BhdGgpIHsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIHN0cmNweShidWYsIGFyZ3YwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgKmJ1ZiA9ICdcMCc7Ci19Ci0KLQotLyogRXh0ZXJuYWwgaW50ZXJmYWNlICovCi0KLWNoYXIgKgotUHlfR2V0UGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLQotICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0RXhlY1ByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIGV4ZWNfcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldFByb2dyYW1GdWxsUGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmMGFkYy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9tYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE1NDkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAgICAgICAgICBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiBmb3IgT1MvMgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIElCTSdzIFZpc3VhbEFnZSBDL0MrKwotIyBmb3IgT1MvMiBjb21waWxlciwgdmVyc2lvbiAzLjAsIHdpdGggRml4cGFjayA4IGFwcGxpZWQuICBJdCB1c2VzCi0jIHZlcnNpb24gNC4wIG9mIHRoZSBOTUFLRSB0b29sIHRoYXQgY29tZXMgd2l0aCB0aGF0IHBhY2thZ2UuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24yMy5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24yMy5ETEwgaXMgbmVlZGVkLgotIwotIyBUaGVzZSB0d28gYmluYXJpZXMgY2FuIGJlIHN0YXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIFZpc3VhbEFnZSBDL0MrKwotIyBydW50aW1lIGxpYnJhcnkgKHByb2R1Y2luZyBsYXJnZXIgYmluYXJpZXMpLCBvciBkeW5hbWljYWxseSBsaW5rZWQKLSMgdG8gbWFrZSBzbWFsbGVyIG9uZXMgdGhhdCByZXF1aXJlIHRoZSBjb21waWxlciB0byBiZSBpbnN0YWxsZWQgb24KLSMgYW55IHN5c3RlbSBQeXRob24gaXMgdXNlZCBvbi4gIFJldmlldyB0aGUgL0dkKyBjb21waWxlciBvcHRpb24gZm9yCi0jIGhvdyB0byBkbyB0aGlzLgotIwotIyBOT1RFOiBJQk0ncyBOTUFLRSA0LjAgaXMgcmF0aGVyIGR1bWIsIHJlcXVpcmluZyB0aGlzIG1ha2VmaWxlIHRvCi0jICAgICAgIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIG5lY2Vzc2FyeS4gIEkgdXNlIE9wdXNNQUtFCi0jICAgICAgIG15c2VsZiBmb3IgYSBtdWNoIG1vcmUgcG93ZXJmdWwgTUFLRSB0b29sIGJ1dCBub3QgZXZlcnlvbmUKLSMgICAgICAgd2lzaGVzIHRvIGJ1eSBpdC4gIEhvd2V2ZXIsIGFzIGEgcmVzdWx0IEkgZGlkbid0IGhvb2sgaW4KLSMgICAgICAgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGUgaW5jbHVkZSBmaWxlcyBhcyBOTUFLRSBoYXMgbm8gZWFzeQotIyAgICAgICB3YXkgdG8gZG8gdGhpcyB3aXRob3V0IGV4cGxpY2l0bHkgc3BlbGxpbmcgaXQgYWxsIG91dC4KLSMKLSMgSGlzdG9yeSAoTW9zdCBSZWNlbnQgRmlyc3QpCi0jCi0jIDI2LVNlcC05OCBqcnIgUmV0ZXN0ZWQgYW5kIGFkanVzdGVkIGZvciBidWlsZGluZyB3L1B5dGhvbiAxLjUuMmExCi0jIDIwLU5vdi05NyBqcnIgQ2xlYW5lZCBVcCBmb3IgQXBwbHlpbmcgdG8gRGlzdHJpYnV0aW9uCi0jIDI5LU9jdC05NyBqcnIgTW9kaWZpZWQgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjUgQWxwaGEgNAotIyAwMy1BdWctOTYganJyIE9yaWdpbmFsIGZvciBVc2Ugd2l0aCBQeXRob24gMS40IFJlbGVhc2UKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQbGFjZXMgYW5kIFRoaW5ncwotIyMjIyMjIyMjIyMjIyMjIyMjIwotUFlfTU9EVUxFUyAgICAgID0gLi5cLi5cTW9kdWxlcwotUFlfT0JKRUNUUyAgICAgID0gLi5cLi5cT2JqZWN0cwotUFlfUEFSU0VSICAgICAgID0gLi5cLi5cUGFyc2VyCi1QWV9QWVRIT04gICAgICAgPSAuLlwuLlxQeXRob24KLVBZX0lOQ0xVREUgICAgICA9IC4uXC4uXEluY2x1ZGUKLVBZX0lOQ0xVREVTICAgICA9IC47JChQWV9JTkNMVURFKTskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotCi0jIEZpbGUgdG8gQ29sbGVjdCBXb3JkeSBDb21waWxlciBPdXRwdXQgcmUgRXJyb3JzCi1FUlJTCQk9IG1ha2Uub3V0Ci0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIEZpbmQgdGhlIFRjbC9UayBCYXNlIERpcmVjdG9yeSBmb3IgTGlicy9JbmNsdWRlcwotVENMVEsJCT0gRDpcVGNsVGsKLVRDTEJBU0UJCT0gRDpcVGNsNy42XE9TMgotVEtCQVNFCQk9IEQ6XFRrNC4yXE9TMgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci1QQVRIT0JKCQk9IG9iagotCi0jIFNlYXJjaCBQYXRoIGZvciBJbmNsdWRlIEZpbGVzCi1QUk9KSU5DTFVERQk9IC47JChUQ0xCQVNFKTskKFRLQkFTRSk7JChPUzJUQ1BJUClcSW5jbHVkZTskKFBZX0lOQ0xVREVTKQotCi0jIFBsYWNlIHRvIFNlYXJjaCBmb3IgU291cmNlcyByZSBPcHVzTUFLRSBEZXBlbmRlbmN5IEdlbmVyYXRvciAoQ29tbWVyY2lhbCkKLU1LTUZfU1JDUwk9ICQoUFlfTU9EVUxFUylcKi5jICQoUFlfT0JKRUNUUylcKi5jICQoUFlfUEFSU0VSKVwqLmMgJChQWV9QWVRIT04pXCouYwotCi0jLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotIy5QQVRILmMgICAgICAgICA9IC47JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLU9USEVSTElCUwk9IHNvMzJkbGwubGliIHRjcDMyZGxsLmxpYiAjIFRjbDc2LmxpYiBUazQyLmxpYgotCi0jIyMjIyMjIyMjIyMjIyMjIwotIyBJbmZlcmVuY2UgUnVsZXMKLSMjIyMjIyMjIyMjIyMjIyMjCi17JChQWV9NT0RVTEVTKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi17JChQWV9PQkpFQ1RTKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi17JChQWV9QQVJTRVIpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BZVEhPTilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotLmN7JChQQVRIT0JKKVx9Lm9iajoJCQkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQmx0aW5Nb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ29tcGlsZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJyb3JzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0YXJncy5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0Q29tcGlsZXIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0TVRpbWUub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0T3B0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0VmVyc2lvbi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR3JhbUluaXQub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSW1wb3J0REwub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWFyc2hhbC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTdHJ0b3VsLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHlTdGF0ZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TWVtYmVyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3lzTW9kdWxlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHJhY2VCYWNrLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnJvemVuTWFpbi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZXhjZXB0aW9ucy5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcc3ltdGFibGUub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcY29kZWNzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZnV0dXJlLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZHlubG9hZF9vczIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcbXlzbnByaW50Zi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcaXRlcm9iamVjdC5vYmoKLQotIyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIKLVBBUlNFUgkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtbWFyMS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3ROb2RlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQYXJzZXIub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlVG9rLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQml0U2V0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRhR3JhbW1hci5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRva2VuaXplci5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlSZWFkbGluZS5vYmoKLQotIyBQeXRob24gT2JqZWN0IFR5cGVzCi1PQkpFQ1RTCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBYnN0cmFjdC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJvb2xPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQnVmZmVyT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDZWxsT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENsYXNzT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21wbGV4T2JqZWN0Lm9iaiBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXERlc2NyT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFbnVtT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZpbGVPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcmFtZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZ1bmNPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSXRlck9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxMaXN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExvbmdPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2R1bGVPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9iamVjdC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JNYWxsb2Mub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSYW5nZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNsaWNlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RTZXEub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFR1cGxlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHlwZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxVbmljb2RlT2JqZWN0Lm9iaiBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVDVHlwZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcV2Vha3JlZk9iamVjdC5vYmoKLQotIyBFeHRlbnNpb24gTW9kdWxlcyAoQnVpbHQtSW4gb3IgYXMgU2VwYXJhdGUgRExMcykKLU1PRFVMRVMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQmluQXNjaWkub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDTWF0aE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR0NNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRCdWlsZEluZm8ub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWFpbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXRoTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1TW9kdWxlLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPcGVyYXRvci5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBDUkVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHlQQ1JFLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQb3NpeE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnRXhwci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTZWxlY3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU29ja2V0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJvcE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGltZU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWRNb2R1bGUub2JqCi0KLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUEdlbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE15U05QcmludGYub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyX1BnZW4ub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHJpbnRHcmFtbWFyLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZpcnN0U2V0cy5vYmoKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQotX0dFTgkJPSAvRzQgL0dtIC9HZC0KLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL01zICA9IFVzZSBfU3lzdGVtIENhbGxpbmcgQ29udmVudGlvbiAodnMgX09wdGxpbmspCi0JCSMgICAgICAgICh0byBhbGxvdyBub24tVkFDKysgY29kZSB0byBjYWxsIGludG8gUHl0aG9uMjMuZGxsKQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvV3Byby0gL1RpLSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0gICAgICAgICAgICAgICAgIyAvV3Bybz0gR2VuZXJhdGUgQ29tcGlsZXIgV2FybmluZ3MgcmUgTWlzc2luZyBQcm90b3R5cGVzCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvREhBVkVfQ09ORklHX0ggPSBDYXVzZXMgVXNlIG9mIENPTkZJRy5IIFNldHRpbmdzCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9TT0NLRVQgPSBFbmFibGVzIEJ1aWxkaW5nIEluIG9mIFNvY2tldCBBUEkKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoQFIpLm1hcAotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFByaW1hcnkgVGFyZ2V0KHMpCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1BbGw6ICBvYmogbm9pc2UgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgUEdlbi5leGUgXAotICAgICAgUHl0aG9uLmV4ZSBQeXRob25QTS5leGUgUHl0aG9uMjMuZGxsICMgX3RraW50ZXIuZGxsCi0KLU1vZHVsZXM6ICQoTU9EVUxFUykKLU9iamVjdHM6ICQoT0JKRUNUUykKLVBhcnNlcjogICQoUEFSU0VSKQotUHl0aG9uOiAgJChQWVRIT04pCi0KLSMgRGlyZWN0b3J5IHRvIEtlZXAgLk9CSiBGaWxlcyBPdXQgb2YgdGhlIFdheQotb2JqOgotCUAtbWtkaXIgb2JqID4+TlVMCi0KLSMgRGlyZWN0b3J5IHRvIEtlZXAgLk1BUCBhbmQgU3VjaCBUZXh0IEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1ub2lzZToKLQlALW1rZGlyIG5vaXNlID4+TlVMCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIFB5dGhvbiBFeHRlbnNpb24gRExMOiBUY2wvVGsgSW50ZXJmYWNlCi0jX3RraW50ZXIuZGxsOiAkKFBBVEhPQkopXF90a2ludGVyLm9iaiBQeXRob24yMy5saWIgX3RraW50ZXIuZGVmCi0jCUAgRWNobyBMaW5raW5nICRAIEFzIERMTAotIwlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyQoUEFUSE9CSilcX3RraW50ZXIub2JqOiAkKFBZX01PRFVMRVMpXF90a2ludGVyLmMKLSMJQCBFY2hvIENvbXBpbGluZyAkKioKLSMJQCAkKENDKSAtYyAkKENGTEFHUykgJChfRExMKSAtRm8kQCAkKiogPj4kKEVSUlMpCi0KLSMgT2JqZWN0IExpYnJhcnkgb2YgQWxsIEVzc2VudGlhbCBQeXRob24gUm91dGluZXMKLVB5Q29yZS5saWI6ICQoTU9EVUxFUykgJChPQkpFQ1RTKSAkKFBBUlNFUikgJChQWVRIT04pICQoUEFUSE9CSilcQ29uZmlnLm9iagotCUAgRWNobyBBZGRpbmcgVXBkYXRlZCBPYmplY3QgRmlsZXMgdG8gTGluayBMaWJyYXJ5ICRACi0JQCAhIElMSUIgJEAgL05PTE9HTyAvTk9CQUNLVVAgLSskPyA7ID4+JChFUlJTKQotCi1QeXRob24yMy5kbGw6ICQoUEFUSE9CSilcQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0JQCAkKENDKSAkKENGTEFHUykgL0IiL05PRSIgJChfRExMKSAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0jCUAgRWNobyBDb21wcmVzc2luZyAkQCB3aXRoIEx4TGl0ZQotIwlAIGx4bGl0ZSAkQAotCi0jIElCTSBMaW5rZXIgUmVxdWlyZXMgT25lIEV4cGxpY2l0IC5PQkogVG8gQnVpbGQgYSAuRExMIGZyb20gYSAuTElCCi0kKFBBVEhPQkopXENvbXBpbGUub2JqOiAkKFBZX1BZVEhPTilcQ29tcGlsZS5jCi0JQCBFY2hvIENvbXBpbGluZyAkKioKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjIzLmRsbAotUHl0aG9uMjMubGliOiBQeXRob24uZGVmCi0JQCBFY2hvIE1ha2luZyAkQAotCUAgSU1QTElCIC9OT0xPR08gL05PSUdOT1JFICRAICQqKiA+PiQoRVJSUykKLQlAIElMSUIgL05PTE9HTyAvQ09OVkZPUk1BVCAvTk9FWFRESUNUSU9OQVJZIC9OT0JST1dTRSAvTk9CQUNLVVAgJEA7ID4+JChFUlJTKQotCi0jIFNtYWxsIENvbW1hbmQtTGluZSBQcm9ncmFtIHRvIFN0YXJ0IEludGVycHJldGVyIGluIFB5dGhvbjIzLmRsbAotUHl0aG9uLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlZJTyAvU1RBQ0s6MzYwMDAwIiAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLSMgU21hbGwgUE0tR1VJIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob25QTS5leGU6ICQoUEFUSE9CSilcUHl0aG9uLm9iaiBQeXRob24yMy5saWIKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBFWEUKLQlAICQoQ0MpICQoQ0ZMQUdTKSAkKF9FWEUpIC9CIi9QTTpQTSAvU1RBQ0s6MzYwMDAwIiAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLVBHZW4uZXhlOiAkKFBHRU4pIFB5Q29yZS5saWIKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBFWEUKLQlAICQoQ0MpICQoQ0ZMQUdTKSAkKF9FWEUpIC9CIi9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWlzY2VsbGFuZW91cyBUYXJnZXRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFJlbW92ZSBJbnRlcm1lZGlhdGUgVGFyZ2V0cyBidXQgTGVhdmUgRXhlY3V0YWJsZSBCaW5hcmllcwotY2xlYW46Ci0JLS0gRGVsIC9RICQoUEFUSE9CSilcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMjMubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMjMuZGxsIFB5dGhvbi5leGUgUEdlbi5leGUgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMjMuZGxsIFB5dGhvbjIzLmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbi5leGUgICBEOlxFWEVzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uMjMuZGxsIEQ6XERMTHMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5saWIgRTpcVGF1XExpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIF90a2ludGVyLmRsbCBEOlxQeXRob24KLQotdGVzdDoKLSAgICAgICAgcHl0aG9uIC4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci0KLSMgVXBkYXRlIERlcGVuZGVuY2llcyBvbiBUYXJnZXRzIChVc2VzIE9wdXNNQUtFIENvbW1lcmNpYWwgUHJvZHVjdCkKLWRlcGVuZDoKLQlEOlxPcHVzTWFrZVxvczJta21mIC1jIC1zCi0KLSMjIyBPUFVTIE1LTUY6ICBEbyBub3QgcmVtb3ZlIHRoaXMgbGluZSEgIEdlbmVyYXRlZCBkZXBlbmRlbmNpZXMgZm9sbG93LgotCi1fdGtpbnRlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYXJyYXltb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYXVkaW9vcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWJpbmFzY2lpLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNwaWNrbGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm8ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWVycm5vbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZjbnRsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXGlvY3RsLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldGJ1aWxkaW5mby5vYmo6IHB5Y29uZmlnLmgKLQotZ2V0cGF0aC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcZ3JwLmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWltYWdlb3Aub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hdGhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW5pc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1x0aW1lLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBhcnNlcm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtaW5pdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxteXRpbWUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXB3ZG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoT1MyVENQSVApXEluY2x1ZGVccHdkLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1yZXNvdXJjZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1x0aW1lLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2VsZWN0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXlzZWxlY3QuaCAkKFBZX0lOQ0xVREUpXG15dGltZS5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1xzb2NrZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoT1MyVENQSVApXEluY2x1ZGVcbmV0ZGIuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zeXNsb2dtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c2xvZy5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10ZXJtaW9zLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fdGhyZWFkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRocmVhZC5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdGltZW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi16bGlibW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hYnN0cmFjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZGljdG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZsb2F0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnJhbWVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1saXN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ2ludHJlcHIuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWV0aG9kb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1yYW5nZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zbGljZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJpbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi14eG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYWNjZWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotYml0c2V0Lm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1maXJzdHNldHMub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWdyYW1tYXIxLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1pbnRyY2hlY2sub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbGlzdG5vZGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0YWdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1teXJlYWRsaW5lLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oCi0KLW5vZGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1wYXJzZXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX1BBUlNFUilcdG9rZW5pemVyLmgKLQotcGdlbi5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0YWdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1wZ2VubWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXByaW50Z3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaCAkKFBZX1BBUlNFUilcdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZXZhbC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNldmFsLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY29tcGlsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcZ3JhbWluaXQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oIFwKLQkgJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mbW9kLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oCi0KLWZyb3plbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnJvemVubWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YXJncy5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHBhdGNobGV2ZWwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JhbWluaXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotaHlwb3Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotaW1wb3J0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfUFlUSE9OKVxpbXBvcnRkbC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtYXJzaGFsLmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3NkZWZzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1wb3J0ZGwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfUFlUSE9OKVxpbXBvcnRkbC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3NkZWZzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tYXJzaGFsLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ2ludHJlcHIuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tb2RzdXBwb3J0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmgKLQotcHlzdGF0ZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcYml0c2V0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZXJyY29kZS5oICQoUFlfSU5DTFVERSlcZXZhbC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHBhcnNldG9rLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3RyZHVwLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotc3RydG9kLm9iajogcHljb25maWcuaAotCi1zdHJ1Y3RtZW1iZXIub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zeXNtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aHJlYWQub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaApkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rIGIvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTEyYzk2Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlLm9taworKysgL2Rldi9udWxsCkBAIC0xLDEwNDcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAgICAgICAgICBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiBmb3IgT1MvMgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIElCTSdzIFZpc3VhbEFnZSBDL0MrKwotIyBmb3IgT1MvMiBjb21waWxlciwgdmVyc2lvbiAzLjAsIHdpdGggRml4cGFjayA4IGFwcGxpZWQuICBJdCB1c2VzCi0jIHRoZSBjb21tZXJjaWFsIE9wdXNNQUtFIHRvb2wuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24xNS5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24xNS5ETEwgaXMgbmVlZGVkLgotIwotIyBUaGVzZSB0d28gYmluYXJpZXMgY2FuIGJlIHN0YXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIFZpc3VhbEFnZSBDL0MrKwotIyBydW50aW1lIGxpYnJhcnkgKHByb2R1Y2luZyBsYXJnZXIgYmluYXJpZXMpLCBvciBkeW5hbWljYWxseSBsaW5rZWQKLSMgdG8gbWFrZSBzbWFsbGVyIG9uZXMgdGhhdCByZXF1aXJlIHRoZSBjb21waWxlciB0byBiZSBpbnN0YWxsZWQgb24KLSMgYW55IHN5c3RlbSBQeXRob24gaXMgdXNlZCBvbi4KLSMKLSMgSGlzdG9yeSAoTW9zdCBSZWNlbnQgRmlyc3QpCi0jCi0jIDIwLU5vdi05NyBqcnIgQ2xlYW5lZCBVcCBmb3IgQXBwbHlpbmcgdG8gRGlzdHJpYnV0aW9uCi0jIDI5LU9jdC05NyBqcnIgTW9kaWZpZWQgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjUgQWxwaGEgNAotIyAwMy1BdWctOTYganJyIE9yaWdpbmFsIGZvciBVc2Ugd2l0aCBQeXRob24gMS40IFJlbGVhc2UKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQbGFjZXMgYW5kIFRoaW5ncwotIyMjIyMjIyMjIyMjIyMjIyMjIwotUFlfTU9EVUxFUyAgICAgID0gLi5cLi5cTW9kdWxlcwotUFlfT0JKRUNUUyAgICAgID0gLi5cLi5cT2JqZWN0cwotUFlfUEFSU0VSICAgICAgID0gLi5cLi5cUGFyc2VyCi1QWV9QWVRIT04gICAgICAgPSAuLlwuLlxQeXRob24KLVBZX0lOQ0xVREUgICAgICA9IC4uXC4uXEluY2x1ZGUKLVBZX0lOQ0xVREVTICAgICA9IC47JChQWV9JTkNMVURFKTskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotCi0jIFdoZXJlIHRvIEZpbmQgdGhlIElCTSBUQ1AvSVAgU29ja2V0IEluY2x1ZGVzIGFuZCBMaWJyYXJpZXMKLU9TMlRDUElQICAgICAgICA9IEM6XE1QVE4KLQotIyBXaGVyZSB0byBQdXQgdGhlIC5PQkogRmlsZXMsIFRvIEtlZXAgVGhlbSBPdXQgb2YgdGhlIFdheQotLlBBVEgub2JqCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLS5IRFJQQVRILmMJOj0gJChQUk9KSU5DTFVERSw7PSApICQoLkhEUlBBVEguYykKLS5QQVRILmMgICAgICAgICA9IC47JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLU9USEVSTElCUwk9ICQoT1MyVENQSVApXGxpYlxzbzMyZGxsLmxpYiAkKE9TMlRDUElQKVxsaWJcdGNwMzJkbGwubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFB5dGhvbiBTdWJzeXN0ZW1zCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUFlUSE9OIGlzIHRoZSBjZW50cmFsIGNvcmUsIGNvbnRhaW5pbmcgdGhlIGJ1aWx0aW5zIGFuZCBpbnRlcnByZXRlci4KLVBZVEhPTgkJPSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQmx0aW5Nb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIENFdmFsLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRXJyb3JzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEZyb3plbi5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29tcGlsZXIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldENvcHlyaWdodC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0T3B0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFBsYXRmb3JtLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbUluaXQub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgTWFyc2hhbC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1vZFN1cHBvcnQub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgUHlTdGF0ZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFB5dGhvblJ1bi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3lzTW9kdWxlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuTWFpbi5vYmoKLQotIyBPbWl0dGVkIFB5dGhvbiBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgYXRvZi5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBkdXAyLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGZtb2QuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZ2V0Y3dkLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBoeXBvdC5jICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIG1lbW1vdmUuYyAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RyZHVwLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJlcnJvci5jICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cnRvZC5jICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0KLSAgIyBzaWdjaGVjay5jICAgICAgLS0gUHJpbWl0aXZlIFNpZ25hbCBDYXRjaGVyIChTaWduYWxNb2R1bGUuYyBVc2VkIEluc3RlYWQpCi0gICMgcHlmcGUuYyAgICAgICAgIC0tIFByaW1pdGl2ZSBGUEUgQ2F0Y2hlciAoTm90IFJlZmVyZW5jZWQgYnkgQW55b25lKQotICAjIGZyb3plbm1haW4uYwotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFjY2VsZXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE15UmVhZGxpbmUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE5vZGUub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBhcnNlVG9rLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRva2VuaXplci5vYmoKLQotIyBQeXRob24gT2JqZWN0IFR5cGVzCi1PQkpFQ1RTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENsYXNzT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIENPYmplY3Qub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgIERpY3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEZpbGVPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEZsb2F0T2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEZ1bmNPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIExvbmdPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ldGhvZE9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIE9iamVjdC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFNsaWNlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cmluZ09iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFR1cGxlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFR5cGVPYmplY3Qub2JqCi0KLSMgT21pdHRlZCBPYmplY3RzIChhbmQgUmVhc29uKToKLSAgIyB4eG9iamVjdC5jICAgICAgLS0gVGVtcGxhdGUgdG8gQ3JlYXRlIFlvdXIgT3duIE9iamVjdCBUeXBlcwotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBBcnJheU1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBDTWF0aE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBFcnJub01vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBHZXRCdWlsZEluZm8ub2JqICBcCi0gICAgICAgICAgICAgICAgICBHZXRQYXRoUC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXRoTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBNRDVjLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBPcGVyYXRvci5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQb3NpeE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBSZWdleE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBSZW9wTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBTZWxlY3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTaWduYWxNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTb3VuZEV4Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBTdHJvcE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTdHJ1Y3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBUaHJlYWRNb2R1bGUub2JqCi0KLSMgT21pdHRlZCBNb2R1bGVzIChhbmQgRGVzY3JpcHRpb24vUmVhc29uKToKLSAgIwotICAjIE11bHRpbWVkaWE6Ci0gICMgYXVkaW9vcC5jICAgICAgIC0tIFZhcmlvdXMgQ29tcHV0ZSBPcGVyYXRpb25zIG9uIEF1ZGlvIFNhbXBsZXMKLQotICAjIERhdGFiYXNlOgotICAjIF9kYm1tb2R1bGUuYyAgICAtLSBXcmFwcGVyIG9mIERCTSBEYXRhYmFzZSBBUEkgKEdlbmVyaWMgRmxhdm9yKQotICAjIF9nZGJtbW9kdWxlLmMgICAtLSBXcmFwcGVyIG9mIERCTSBEYXRhYmFzZSBBUEkgKEdOVSBGbGF2b3IpCi0KLSAgIyBDcnlwdG9ncmFwaHk6Ci0gICMgY3J5cHRtb2R1bGUuYyAgIC0tIFNpbXBsZSBXcmFwcGVyIGZvciBjcnlwdCgpIEZ1bmN0aW9uCi0KLSMgICAgICAgICAgICAgICAgICBmY250bG1vZHVsZS5vYmogICBcCi0jICAgICAgICAgICAgICAgICAgZnBlY3RsbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIGZwZXRlc3Rtb2R1bGUub2JqIFwKLSMgVW5peC1TcGVjaWZpYyAgICBnZXRwYXRoLm9iaiAgICAgICBcCi0jICAgICAgICAgICAgICAgICAgZ3JwbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG1wem1vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBuaXNtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgcGFyc2VybW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHB3ZG1vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICByZWFkbGluZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uub2JqICAgICAgXAotIyAgICAgICAgICAgICAgICAgIHN5c2xvZ21vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICB0ZXJtaW9zLm9iaiAgICAgICBcCi0KLSAgIyBVc2VyIEludGVyZmFjZToKLSMgICAgICAgICAgICAgICAgICBfdGtpbnRlci5vYmogICAgICBcICAgICAKLSMgICAgICAgICAgICAgICAgICBzdGR3aW5tb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgY3Vyc2VzbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRjbE5vdGlmeS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICB0a2FwcGluaXQub2JqICAgICBcCi0gICMgZmxtb2R1bGUuYyAgICAgIC0tIFdyYXBwZXIgb2YgRk9STVMgTGlicmFyeSAoU2NyZWVuIEZvcm1zKQotCi0gICMgemxpYm1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgWkxpYiBDb21wcmVzc2lvbiBBUEkgKEdaaXAgRm9ybWF0KQotICAjIHB1cmVtb2R1bGUuYyAgICAtLSBXcmFwcGVyIG9mIFB1cmlmeSBEZWJ1Z2dpbmcgQVBJIChQcm9iYWJseSBOb24tT1MvMikKLSAgIyB4eG1vZHVsZS5jICAgICAgLS0gVGVtcGxhdGUgdG8gQ3JlYXRlIFlvdXIgT3duIE1vZHVsZQotCi0jCi0jIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQotUEdFTiAgICAgICAgICAgID0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUEdlbk1haW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgUEdlbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHJpbnRHcmFtbWFyLm9iaiAgXAotICAgICAgICAgICAgICAgICAgTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQml0U2V0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRmlyc3RTZXRzLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgTWV0YUdyYW1tYXIub2JqCi0KLSMgT21pdHRlZCBQYXJzZXIgRWxlbWVudHMgKGFuZCBSZWFzb24pOgotICAjIGludHJjaGVjay5jICAgICAtLSBOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUgKD8pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBNYWNyb3MgYW5kIEZsYWdzCi0jIyMjIyMjIyMjIyMjIyMjIyMKLV9CQVNFCQk9IC9RIC9XMiAvSSQoUFJPSklOQ0xVREUpCi0JCSMgL1EgICA9IE9taXQgSUJNIENvcHlyaWdodAotCQkjIC9XMiAgPSBTaG93IFdhcm5pbmdzL0Vycm9ycyBPbmx5Ci0JCSMgL0ZpICA9IENyZWF0ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0JCSMgL1NpICA9IFV0aWxpemUgUHJlY29tcGlsZWQgSGVhZGVycwotCi1fR0VOCQk9IC9HNCAvR20gL0dkIC9CIi9TVEFDSzozNjAwMDAiCi0JCSMgL0c0ICA9IEdlbmVyYXRlIENvZGUgZm9yIDQ4NiAoVXNlIDM4NiBmb3IgRGVidWdnZXIpCi0JCSMgL0dtICA9IFVzZSBNdWx0aXRocmVhZCBSdW50aW1lCi0JCSMgL0dkICA9IER5bmFtaWNhbGx5IExvYWQgUnVudGltZQotCQkjIC9HcyAgPSBSZW1vdmUgQ29kZSBmb3IgU3RhY2sgUHJvYmVzCi0JCSMgL0d4ICA9IFJlbW92ZSBDKysgRXhjZXB0aW9uLUhhbmRsaW5nIEluZm8KLQkJIyAvVGRwID0gR2VuZXJhdGUgQ29kZSBmb3IgQysrIFRlbXBsYXRlcwotCQkjIC9SbiAgPSBHZW5lcmF0ZSBDb2RlIHdpdGhvdXQgYSBSdW50aW1lCi0JCSMgL0IiL1NUQUNLOm4iID0gU2V0IFN0YWNrIFNpemUKLQotX09QVAkJPSAvTyAvR2wKLQkJIyAvTyAgID0gRW5hYmxlIFNwZWVkLU9wdGltaXphdGlvbnMKLQkJIyAvT2wgID0gUGFzcyBDb2RlIFRocnUgSW50ZXJtZWRpYXRlIExpbmtlcgotCQkjIC9HdSAgPSBBZHZpc2UgTGlua2VyIEFsbCBFeHQgRGF0YSBpcyBJRCdkCi0JCSMgL0dsICA9IEhhdmUgTGlua2VyIFJlbW92ZSBVbnVzZWQgRm5zCi0KLV9EQkcJCT0gL0RIQVZFX0NPTkZJR19IIC9EVVNFX1NPQ0tFVAotCQkjIC9UaSAgPSBFbWJlZCBEZWJ1Z2dlci9BbmFseXplciBSZWNzCi0JCSMgL1RtICA9IEVuYWJsZSBEZWJ1ZyBNZW1vcnkgRm5zCi0JCSMgL1R4ICA9IFJlcXVlc3QgRnVsbCBEdW1wIFVwb24gRXhjZXB0aW9uCi0JCSMgL0RERUJVRyA9IEVuYWJsZSBBcHAtSW50ZXJuYWwgRGVidWdnaW5nIENvZGUKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IAotICAgICAgICAgICAgICAgICMgL0RVU0VfRExfRVhQT1JUID0gCi0KLV9PVVQJCT0gCi0JCSMgL0ZiICA9IEVtYmVkIEJyb3dzZXIgUmVjcwotCQkjIC9HaCAgPSBHZW5lcmF0ZSBDb2RlIGZvciBQcm9maWxlciBIb29rcwotCQkjIC9GbCAgPSBPdXRwdXQgQy9DKysgTGlzdGluZyBGaWxlcwotICAgICAgICAgICAgICAgICMgL0xmICA9IFByb3ZpZGUgRnVsbCAoRGV0YWlsZWQpIExpc3RpbmcgRmlsZXMKLQkJIyAvRm0uID0gT3V0cHV0IExpbmtlciBNYXAgRmlsZQotCQkjIC9GdC4gPSBPdXRwdXQgQysrIFRlbXBsYXRlIFJlc29sdXRpb24gRmlsZXMKLQotX01BUAkJPSAvRm1Ob2lzZVwkKC5UQVJHRVQsQiw+Lm1hcCkKLQotX0RMTAkJPSAvR2UtCi1fRVhFCQk9IC9HZQotCQkjIC9HZSA9IENyZWF0ZSBhbiBFWEUsIG5vdCBETEwKLQotQ0ZMQUdTCQk9ICQoX0JBU0UpICQoX0dFTikgJChfT1BUKSAkKF9EQkcpICQoX09VVCkgJChfRVhFKSAvU3MKLUNQUEZMQUdTCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjE1LmxpYiBQeXRob24xNS5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZQotCi0jIyMjIyMjIyMjIyMjIwotIwotIyMjIyMjIyMjIyMjIyMKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgQ29uZmlnLm9iagotICAgICAgICAlZG8gIiUubGliIgotCi1QeXRob24xNS5kbGw6IENvbXBpbGUub2JqIFB5Q29yZS5saWIgUHl0aG9uLmRlZgotICAgICAgICAlZG8gIiUuZGxsIiBDUFBGTEFHUys9L0IiL05PRSIgQ1BQRkxBR1MrPSQoX01BUCkKLQotQ29tcGlsZS5vYmo6IENvbXBpbGUuYwotICAgICAgICAlZG8gIi5jLm9iaiIgQ0ZMQUdTKz0kKF9ETEwpCi0KLSMgSW1wb3J0IExpYnJhcnkgZm9yIFVzaW5nIHRoZSBQeXRob24xNS5kbGwKLVB5dGhvbjE1LmxpYjogUHl0aG9uLmRlZgotICAgICAgICAlZG8gIi5kZWYubGliIgotCi0jIFNtYWxsIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMTUuZGxsCi1QeXRob24uZXhlOiBQeXRob24ub2JqIFB5dGhvbjE1LmxpYgotICAgICAgICAlZG8gIiUuZXhlIiBDUFBGTEFHUys9JChfTUFQKQotCi0jUHl0aG9uLm9iajogUHl0aG9uLmMKLSMgICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0VYRSkKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotICAgICAgICAlZG8gIiUuZXhlIiBDUFBGTEFHUys9JChfTUFQKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJCguUEFUSC5vYmopXCoub2JqCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgL1kgTm9pc2UJCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgJChFUlJTKQkJCT5OVUwgMj4mMQotCi0jIFJlbW92ZSBBbGwgVGFyZ2V0cywgSW5jbHVkaW5nIEZpbmFsIEJpbmFyaWVzCi1kaXN0Y2xlYW46IGNsZWFuCi0gICAgICAgIC0tIERlbCAvUSBQeUNvcmUubGliIFB5dGhvbjE1LmxpYiAgICAgICA+TlVMIDI+JjEKLSAgICAgICAgLS0gRGVsIC9RIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlICAgICAgID5OVUwgMj4mMQotCi1yZWxlYXNlOiBQeXRob24uZXhlIFB5dGhvbjE1LmRsbCBQeXRob24xNS5saWIKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5leGUiKSBEOlxFWEVzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIiouZGxsIikgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmxpYiIpIEU6XFRhdVxMaWIKLQotdGVzdDoKLSAgICAgICAgcHl0aG9uIC4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci0KLSMgVXBkYXRlIERlcGVuZGVuY2llcyBvbiBUYXJnZXRzIChVc2VzIE9wdXNNQUtFIENvbW1lcmNpYWwgUHJvZHVjdCkKLWRlcGVuZDoKLQlEOlxPcHVzTWFrZVxvczJta21mIC1jIC1zCi0KLSMjIyBPUFVTIE1LTUY6ICBEbyBub3QgcmVtb3ZlIHRoaXMgbGluZSEgIEdlbmVyYXRlZCBkZXBlbmRlbmNpZXMgZm9sbG93LgotCi1fdGtpbnRlci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWJpbmFzY2lpLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNwaWNrbGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3J5cHRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3Vyc2VzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV9kYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJybm8ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcaW9jdGwuaCBjZXZhbC5oIFwKLQkgY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIFwKLQkgaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZWN0bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcGV0ZXN0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV9nZGJtbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGJ1aWxkaW5mby5vYmo6IHB5Y29uZmlnLmgKLQotZ2V0cGF0aC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1ncnBtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgZ3JwLmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbXB6bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW9wZXJhdG9yLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBhcnNlcm1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggZ3JhbWluaXQuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBvc2l4Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXB3ZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB3ZC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yZWFkbGluZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yZXNvdXJjZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1x0aW1lLmggY2V2YWwuaCBjbGFzc29iamVjdC5oIFwKLQkgY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15c2VsZWN0LmggbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWduYWxtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc29ja2V0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcbmV0aW5ldFxpbi5oIFwKLQkgYzpcbXB0blxpbmNsdWRlXHN5c1xzb2NrZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBteXRpbWUuaCBuZXRkYi5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBcCi0JIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3RydWN0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbG9nLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10ZXJtaW9zLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRocmVhZC5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdGltZW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi14eG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi16bGlibW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNsYXNzb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29tcGxleG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZpbGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnJhbWVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN0cnVjdG1lbWJlci5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mdW5jb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbG9uZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25naW50cmVwci5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbWV0aG9kb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kdWxlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yYW5nZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zbGljZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJpbmdvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdHVwbGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdHlwZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi14eG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2VyLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1iaXRzZXQub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1ncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIxLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbGlzdG5vZGUub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCBcCi0JIHRva2VuLmgKLQotbWV0YWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggcGdlbi5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oIGludHJjaGVjay5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLW5vZGUub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1wYXJzZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGVycmNvZGUuaCBncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBub2RlLmggcGFyc2VyLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1wYXJzZXRvay5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG5vZGUuaCBwYXJzZXIuaCBwYXJzZXRvay5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmggXAotCSB0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbWV0YWdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1wZ2VubWFpbi5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBcCi0JIHBhcnNldG9rLmggcGdlbi5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXByaW50Z3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotdG9rZW5pemVyLm9iajogcHljb25maWcuaCBlcnJjb2RlLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBcCi0JIHB5ZGVidWcuaCB0b2tlbi5oIHRva2VuaXplci5oCi0KLWF0b2Yub2JqOiBweWNvbmZpZy5oCi0KLWJsdGlubW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBldmFsLmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG5vZGUuaCBvYmplY3QuaCBcCi0JIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIFwKLQkgaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3Bjb2RlLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotY29tcGlsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggZ3JhbWluaXQuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIG9wY29kZS5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWVycm9ycy5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbW9kLm9iajogcHljb25maWcuaCBteW1hdGguaAotCi1mcm96ZW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnJvemVubWFpbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGNvbXBpbGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGNvcHlyaWdodC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRwbGF0Zm9ybS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXR2ZXJzaW9uLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcGF0Y2hsZXZlbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotaHlwb3Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oIG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGVycmNvZGUuaCBldmFsLmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW1wb3J0ZGwuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbXBvcnRkbC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1hcnNoYWwuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbXlzdHJ0b3VsLm9iajogcHljb25maWcuaAotCi1weWZwZS5vYmo6IHB5Y29uZmlnLmggcHlmcGUuaAotCi1weXN0YXRlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXB5dGhvbnJ1bi5vYmo6IGFic3RyYWN0LmggYml0c2V0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBpbGUuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBncmFtbWFyLmggaW1wb3J0LmggXAotCSBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1hcnNoYWwuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG5vZGUuaCBvYmplY3QuaCBvYmppbXBsLmggcGFyc2V0b2suaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc2lnY2hlY2sub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3RyZHVwLm9iajogcHljb25maWcuaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aHJlYWQub2JqOiBweWNvbmZpZy5oIHRocmVhZC5oCi0KLXRyYWNlYmFjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weWNvbmZpZy5oIGIvUEMvb3MydmFjcHAvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2NWI0NC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLSNpZm5kZWYgUHlfQ09ORklHX0gKLSNkZWZpbmUgUHlfQ09ORklHX0gKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHB5Y29uZmlnLmguICBOT1QgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgotICoKLSAqIFRoaXMgaXMgYSBtYW51YWxseSBtYWludGFpbmVkIHZlcnNpb24gdXNlZCBmb3IgdGhlIElCTSBWaXN1YWxBZ2UKLSAqIEMvQysrIGNvbXBpbGVyIG9uIHRoZSBPUy8yIHBsYXRmb3JtLiAgSXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mCi0gKiB0aGUgUHl0aG9uIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBGSUxFU1lTVEVNIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgd2F5IG9mIG5hbWluZyBmaWxlcyBhbmQKLSAqIGRpcmVjdG9yeSBwYXRocyBzaG91bGQgYmUgd3JhcHBlZCBhcm91bmQgb25lIG9mIHRoZSBmb2xsb3dpbmcKLSAqICNkZWZpbmVzOgotICoKLSAqICAgICBET1NGSUxFU1lTICAgUENET1MtU3R5bGUgKGZvciBQQ0RPUywgV2luZG93cyBhbmQgT1MvMikKLSAqICAgICBNQUNGSUxFU1lTICAgTWFjaW50b3NoLVN0eWxlCi0gKiAgICAgVU5JWEZJTEVTWVMgIFVuaXgtU3R5bGUKLSAqICAgICBBTUlHQUZJTEVTWVMgQW1pZ2FET1MtU3R5bGUKLSAqIAotICogQmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMgaW4KLSAqIHVzZSBvbiB0aGUgSW50ZWwgcGxhdGZvcm0sIG5laXRoZXIgdGhlIGNvbXBpbGVyIG5hbWUgbm9yCi0gKiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBuYW1lIGlzIHN1ZmZpY2llbnQuCi0gKgotICogT1MvMiBERUZJTkVTOgotICogVGhlIGNvZGUgc3BlY2lmaWMgdG8gT1MvMidzIFByb2dyYW0gQVBJIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZAotICoKLSAqIF9fVE9TX09TMl9fICAgVGFyZ2V0IE9wZXJhdGluZyBTeXN0ZW0sIE9TLzIKLSAqCi0gKiBBbnkgY29kZSBzcGVjaWZpYyB0byB0aGUgY29tcGlsZXIgaXRzZWxmIHNob3VsZCBiZSB3cmFwcGVkIHdpdGgKLSAqCi0gKiBfX0lCTUNfXyAgICAgIElCTSBDIENvbXBpbGVyCi0gKiBfX0lCTUNQUF9fICAgIElCTSBDKysgQ29tcGlsZXIKLSAqCi0gKiBOb3RlIHRoYXQgc2luY2UgdGhlIFZpc3VhbEFnZSBDL0MrKyBjb21waWxlciBpcyBhbHNvIGF2YWlsYWJsZQotICogZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHVzZSBib3RoIGEKLSAqIF9fVE9TX09TMl9fIGFuZCBhIF9fSUJNQ19fIHRvIHNlbGVjdCBhIHZlcnkgc3BlY2lmaWMgZW52aXJvbm1lbnQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTb21lIHN5c3RlbXMgcmVxdWlyZSBzcGVjaWFsIGRlY2xhcmF0aW9ucyBmb3IgZGF0YSBpdGVtcyBpbXBvcnRlZAotICogb3IgZXhwb3J0ZWQgZnJvbSBkeW5hbWljIGxpbmsgbGlicmFyaWVzLiAgTm90ZSB0aGF0IHRoZSBkZWZpbml0aW9uCi0gKiBvZiBETF9JTVBPUlQgY292ZXJzIGJvdGggY2FzZXMuICBEZWZpbmUgVVNFX0RMX0lNUE9SVCBmb3IgdGhlIGNsaWVudAotICogb2YgYSBETEwuICBEZWZpbmUgVVNFX0RMX0VYUE9SVCB3aGVuIG1ha2luZyBhIERMTC4KLSAqLwotCi0jaW5jbHVkZSA8aW8uaD4KLQotLyogQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBGaW5kaW5nIE1vZHVsZXMgKi8KLSNkZWZpbmUgUFJFRklYICAgICAgICAgICAgICAgICAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAgICAgICAgICAgICIiCi0KLS8qIFByb3ZpZGUgYSBkZWZhdWx0IGxpYnJhcnkgc28gd3JpdGVycyBvZiBleHRlbnNpb24gbW9kdWxlcwotICogd29uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQgYW55bW9yZQotICovCi0jcHJhZ21hIGxpYnJhcnkoIlB5dGhvbjI0LmxpYiIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAzMi1CaXQgSUJNIFZpc3VhbEFnZSBDL0MrKyB2My4wIGZvciBPUy8yICAgICAqLwotLyogIChDb252ZXJ0IENvbXBpbGVyIEZsYWdzIGludG8gVXNlZnVsIFN3aXRjaGVzKSAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFBMQVRGT1JNICAgICJvczIiCi0jZGVmaW5lIENPTVBJTEVSICAgICJbVmlzdWFsQWdlIEMvQysrXSIKLSNkZWZpbmUgUFlPU19PUzIgICAgLyogRGVmaW5lIEluZGljYXRvciBvZiBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIFBZQ0NfVkFDUFAgIC8qIERlZmluZSBJbmRpY2F0b3Igb2YgQyBDb21waWxlciAqLwotCi0gIC8qIFBsYXRmb3JtIEZpbGVzeXN0ZW0gKi8KLSNkZWZpbmUgUFlUSE9OUEFUSCAgIi47LlxcbGliOy5cXGxpYlxccGxhdC13aW4iCi0jZGVmaW5lIERPU0ZJTEVTWVMgIC8qIE9TLzIgVXNlcyB0aGUgRE9TIEZpbGUgTmFtaW5nIENvbnZlbnRpb25zICovCi0vKiAjZGVmaW5lIElNUE9SVF84eDNfTkFNRVMgKGxldCdzIG1vdmUgdXAgdG8gbG9uZyBmaWxlbmFtZXMpICovCi0KLSAgLyogUGxhdGZvcm0gQ1BVLU1vZGUgRGVwZW5kZW5jaWVzICovCi0jZGVmaW5lIFdPUkRfQklUICAgICAgICAgICAgICAgIDMyIC8qIE9TLzIgaXMgYSAzMi1CaXQgT3BlcmF0aW5nIFN5c3RlbSAqLwotI2RlZmluZSBMT05HX0JJVCAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBTSVpFT0ZfSU5UICAgICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhbiAoaW50KSAgICAgICAgICAgICovCi0jZGVmaW5lIFNJWkVPRl9MT05HICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGEgKGxvbmcpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX1ZPSURfUCAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAodm9pZCAqKSAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAgICAgMSAqLyAvKiBWQUMrKyBkb2VzIG5vdCBzdXBwb3J0IChsb25nIGxvbmcpICAgICovCi0vKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgICA4ICovIC8qIENvdW50IG9mIEJ5dGVzIGluIGEgKGxvbmcgbG9uZykgICAgICAgKi8KLQotLyogdW5pY29kZSBkZWZpbmluZXMgKi8KLSNkZWZpbmUgUFlfVU5JQ09ERV9UWVBFICAgIHdjaGFyX3QKLSNkZWZpbmUgUHlfVU5JQ09ERV9TSVpFIFNJWkVPRl9TSE9SVAotCi0vKiBkeW5hbWljIGxvYWRpbmcgKi8KLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcgMQotCi0vKiBEZWZpbmUgaWYgdHlwZSBjaGFyIGlzIHVuc2lnbmVkIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBnY2MuICAqLwotI2lmbmRlZiBfX0NIQVJfVU5TSUdORURfXwotLyogI3VuZGVmIF9fQ0hBUl9VTlNJR05FRF9fICovCi0jZW5kaWYKLQotdHlwZWRlZiBpbnQgbW9kZV90OwotdHlwZWRlZiBpbnQgdWlkX3Q7Ci10eXBlZGVmIGludCBnaWRfdDsKLXR5cGVkZWYgaW50IHBpZF90OwotCi0jaWYgZGVmaW5lZChfX01VTFRJX18pICAgICAvKiBJZiBDb21waWxlciAvR3QrIE11bHRpdGhyZWFkIE9wdGlvbiBFbmFibGVkLCAgKi8KLSAgI2RlZmluZSBXSVRIX1RIUkVBRCAgICAgICAgICAgIDEgLyogRW5hYmxlIFRocmVhZGluZyBUaHJvdWdob3V0IFB5dGhvbiAgICAqLwotICAjZGVmaW5lIE9TMl9USFJFQURTICAgICAgICAgICAgMSAvKiBBbmQgVXNlIHRoZSBPUy8yIEZsYXZvciBvZiBUaHJlYWRzICAgICovCi0vKiAjZGVmaW5lIF9SRUVOVFJBTlQgMSAqLyAvKiBVc2UgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmbnMgKi8KLSNlbmRpZgotCi0gIC8qIENvbXBpbGVyIFJ1bnRpbWUgTGlicmFyeSBDYXBhYmlsaXRpZXMgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGRpcmVjdC5oPgotLyogI3VuZGVmIEJBRF9TVEFUSUNfRk9SV0FSRCAqLyAvKiBpZiBjb21waWxlciBib3RjaGVzIHN0YXRpYyBmd2QgZGVjbHMgKi8KLQotI2RlZmluZSBTVERDX0hFQURFUlMgICAgICAgICAgICAgMSAvKiBWQUMrKyBpcyBhbiBBTlNJIEMgQ29tcGlsZXIgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfSFlQT1QgICAgICAgICAgICAgICAxIC8qIGh5cG90KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9QVVRFTlYgICAgICAgICAgICAgIDEgLyogcHV0ZW52KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBWQV9MSVNUX0lTX0FSUkFZICAgMSAqLyAvKiBpZiB2YV9saXN0IGlzIGFuIGFycmF5IG9mIHNvbWUga2luZCAgICovCi0vKiAjZGVmaW5lIEhBVkVfQ09OSU9fSCAgICAgICAxICovIC8qICNpbmNsdWRlIDxjb25pby5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9FUlJOT19IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4gICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAgICAgICAgICAgKi8KLQotICAvKiBWYXJpYWJsZS1Bcmd1bWVudHMvUHJvdG90eXBlcyAqLwotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMgICAgICAgICAgMSAvKiBWQUMrKyBzdXBwb3J0cyBDIEZ1bmN0aW9uIFByb3RvdHlwZXMgICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgICAxIC8qIE91ciA8c3RkYXJnLmg+IGhhcyBwcm90b3R5cGVzICAgICAgICAgKi8KLQotICAvKiBTdHJpbmcvTWVtb3J5L0xvY2FsZSBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAgICAgICAgICAgICAxIC8qIG1lbW1vdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJFUlJPUiAgICAgICAgICAgIDEgLyogc3RyZXJyb3IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAgICAgICAgICAgMSAvKiBzZXRsb2NhbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxIC8qIE91ciBtYWxsb2MoMCkgcmV0dXJucyBhIE5VTEwgcHRyICAgICAgKi8KLQotICAvKiBTaWduYWwgSGFuZGxpbmcgKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAgICAgICAgICAgIDEgLyogc2lnbmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBSRVRTSUdUWVBFICAgICAgICAgICAgdm9pZCAvKiBSZXR1cm4gdHlwZSBvZiBoYW5kbGVycyAoaW50IG9yIHZvaWQpICovCi0vKiAjdW5kZWYgV0FOVF9TSUdGUEVfSEFORExFUiAgICovIC8qIEhhbmRsZSBTSUdGUEUgKHNlZSBJbmNsdWRlL3B5ZnBlLmgpICAgKi8KLS8qICNkZWZpbmUgSEFWRV9BTEFSTSAgICAgICAgIDEgKi8gLyogYWxhcm0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NJR0lOVEVSUlVQVCAgMSAqLyAvKiBzaWdpbnRlcnJ1cHQoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHUkVMU0UgICAgICAxICovIC8qIHNpZ3JlbHNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE9OVF9IQVZFX1NJR19BTEFSTSAgICAgIDEKLSNkZWZpbmUgRE9OVF9IQVZFX1NJR19QQVVTRSAgICAgIDEKLQotICAvKiBDbG9jay9UaW1lIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAgICAgICAgICAgICAgIDEgLyogV2UgaGF2ZSBmdGltZSgpIGluIDxzeXMvdGltZWIuaD4gICAgICAqLwotI2RlZmluZSBIQVZFX0NMT0NLICAgICAgICAgICAgICAgMSAvKiBjbG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1RSRlRJTUUgICAgICAgICAgICAxIC8qIHN0cmZ0aW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgICAgICAgICAgICAgIDEgLyogbWt0aW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAgICAgICAgICAgICAgMSAvKiBObyB0bV96b25lIGJ1dCBkbyBoYXZlIHR6bmFtZVtdICAgICAgICovCi0jZGVmaW5lIEhBVkVfVElNRVMgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdGltZXMuaD4gICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy91dGltZS5oPiAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VUSU1FX0ggICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dXRpbWUuaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdGltZS5oPiAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVE1fSU5fU1lTX1RJTUUgICAgIDEgKi8gLyogPHN5cy90aW1lLmg+IGRlY2xhcmVzIHN0cnVjdCB0bSAgICAgICAqLwotI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAgICAgICAgMSAvKiBnZXR0aW1lb2ZkYXkoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEdFVFRJTUVPRkRBWV9OT19UWiAxICovIC8qIGdldHRpbWVvZmRheSgpIGRvZXMgbm90IGhhdmUgMm5kIGFyZyAgKi8KLS8qICNkZWZpbmUgSEFWRV9USU1FR00gICAgICAgIDEgKi8gLyogdGltZWdtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgICAgICAgMSAvKiBNaXggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPiAgICAgICAgICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxIC8qIE1peCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+ICAgKi8KLS8qICNkZWZpbmUgSEFWRV9BTFRaT05FICAgICAgIDEgKi8gLyogaWYgPHRpbWUuaD4gZGVmaW5lcyBhbHR6b25lICAgICAgICAgICAqLwotCi0gIC8qIE5ldHdvcmsvU29ja2V0cyBTdXBwb3J0ICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4gICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQlNEX1NFTEVDVCAgICAgICAgICAgICAgMSAvKiBVc2UgQlNEIHZlcnN1cyBPUy8yIGZvcm0gb2Ygc2VsZWN0KCkgICAqLwotI2RlZmluZSBIQVZFX1NFTEVDVCAgICAgICAgICAgICAxIC8qIHNlbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgICAgICAgIDEgLyogZ2V0cGVlcm5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICN1bmRlZiBIQVZFX0dFVEhPU1ROQU1FX1IgMSAqLyAvKiBnZXRob3N0bmFtZV9yKCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIEZpbGUgSS9PICovCi0jZGVmaW5lIEhBVkVfRFVQMiAgICAgICAgICAgICAgICAxIC8qIGR1cDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9FWEVDViAgICAgICAgICAgICAgIDEgLyogZXhlY3YoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NFVFZCVUYgICAgICAgICAgICAgMSAvKiBzZXR2YnVmKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAgICAgICAgICAxIC8qIGdldGN3ZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9QSVBFICAgICAgICAgICAgICAgIDEgLyogcGlwZSgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX0lPX0ggICAgICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfRkNOVExfSCAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9ESVJFQ1RfSCAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGRpcmVjdC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZMT0NLICAgICAgICAgMSAqLyAvKiBmbG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVFJVTkNBVEUgICAgICAxICovIC8qIHRydW5jYXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgICAgIDEgKi8gLyogZnRydW5jYXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0xTVEFUICAgICAgICAgMSAqLyAvKiBsc3RhdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRElSRU5UX0ggICAgICAxICovIC8qICNpbmNsdWRlIDxkaXJlbnQuaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9PUEVORElSICAgICAgIDEgKi8gLyogb3BlbmRpcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFByb2Nlc3MgT3BlcmF0aW9ucyAqLwotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8cHJvY2Vzcy5oPiAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUUElEICAgICAgICAgICAgICAxIC8qIGdldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNURU0gICAgICAgICAgICAgIDEgLyogc3lzdGVtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1dBSVQgICAgICAgICAgICAgICAgMSAvKiB3YWl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfS0lMTCAgICAgICAgICAgICAgICAxIC8qIGtpbGwoKSAgICAgW09TLzItc3BlY2lmaWMgY29kZSBhZGRlZF0gKi8KLSNkZWZpbmUgSEFWRV9QT1BFTiAgICAgICAgICAgICAgIDEgLyogcG9wZW4oKSAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotLyogI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgICAgMSAqLyAvKiBnZXRwcGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfV0FJVFBJRCAgICAgICAxICovIC8qIHdhaXRwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9GT1JLICAgICAgICAgIDEgKi8gLyogZm9yaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFVzZXIvR3JvdXAgSUQgUXVlcmllcyAqLwotLyogI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVFVJRCAgICAgICAgMSAqLwotCi0gIC8qIFVuaXgtU3BlY2lmaWMgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfVU5fSCAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy91bi5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VVFNOQU1FX0ggMSAqLyAvKiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4gICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAgICAxICovIC8qICNpbmNsdWRlIDxzeXMvd2FpdC5oPiAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9VTklTVERfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOQU1FICAgICAgICAgMSAqLyAvKiB1bmFtZSAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIERlZmluZSBpZiB5b3Ugd2FudCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLSNkZWZpbmUgV0lUSF9ET0NfU1RSSU5HUyAxCi0KLSNpZmRlZiBVU0VfRExfRVhQT1JUCi0gICNkZWZpbmUgRExfSU1QT1JUKFJUWVBFKSBSVFlQRSBfU3lzdGVtCi0jZW5kaWYKLQotI2VuZGlmIC8qICFQeV9DT05GSUdfSCAqLwotCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weXRob24uZGVmIGIvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNWMyYS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9weXRob24uZGVmCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIFBZVEhPTjI0IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gMi40IENvcmUgRExMJwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICA7IERhdGEKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfVHlwZQotICAgICAgICAgICAgICAgUHlDbGFzc19UeXBlCi0gICAgICAgICAgICAgICBQeUNvZGVfVHlwZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1R5cGUKLSAgICAgICAgICAgICAgIFB5RGljdF9UeXBlCi0gICAgICAgICAgICAgICBQeUV4Y19Bcml0aG1ldGljRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0Fzc2VydGlvbkVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19BdHRyaWJ1dGVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRU9GRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0Vudmlyb25tZW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JT0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSW5kZXhFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAgICAgICBQeUV4Y19Mb29rdXBFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX01lbW9yeUVycm9ySW5zdAotICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19PdmVyZmxvd0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5bnRheEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXhpdAotICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcgotICAgICAgICAgICAgICAgUHlGaWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5RmxvYXRfVHlwZQotICAgICAgICAgICAgICAgUHlGcmFtZV9UeXBlCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1R5cGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0luaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfVHlwZQotICAgICAgICAgICAgICAgUHlJbnRfVHlwZQotICAgICAgICAgICAgICAgUHlMaXN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19UeXBlCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9UeXBlCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9UeXBlCi0gICAgICAgICAgICAgICBQeU9TX0lucHV0SG9vawotICAgICAgICAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcgotICAgICAgICAgICAgICAgUHlSYW5nZV9UeXBlCi0gICAgICAgICAgICAgICBQeVNsaWNlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHVwbGVfVHlwZQotICAgICAgICAgICAgICAgUHlUeXBlX1R5cGUKLSAgICAgICAgICAgICAgIFB5X0RlYnVnRmxhZwotICAgICAgICAgICAgICAgUHlfRnJvemVuRmxhZwotICAgICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnCi0gICAgICAgICAgICAgICBQeV9Ob1NpdGVGbGFnCi0gICAgICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X1VzZUNsYXNzRXhjZXB0aW9uc0ZsYWcKLSAgICAgICAgICAgICAgIFB5X1ZlcmJvc2VGbGFnCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmlsZXRhYgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXR0YWIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9HcmFtbWFyCi0gICAgICAgICAgICAgICBfUHlQYXJzZXJfVG9rZW5OYW1lcwotICAgICAgICAgICAgICAgX1B5X0VsbGlwc2lzT2JqZWN0Ci0gICAgICAgICAgICAgICBfUHlfTm9uZVN0cnVjdAotICAgICAgICAgICAgICAgX1B5X1BhY2thZ2VDb250ZXh0Ci0gICAgICAgICAgICAgICBfUHlfVHJ1ZVN0cnVjdAotICAgICAgICAgICAgICAgX1B5X1plcm9TdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9hYnN0cmFjdF9oYWNrCi0gICAgICAgICAgICAgICBfUHlfY2Fwc3VsZV9oYWNrCi0gICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4Ci0gICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4X3RhYmxlCi0KLSAgICAgICAgICAgICAgIDsgQ29kZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2UKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlVHVwbGUKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcwotICAgICAgICAgICAgICAgUHlBcmdfVmFQYXJzZQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fRmluaQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RmxhZ3MKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRTZWxmCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfSXNWYWxpZAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Bc1ZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0dldERlc2MKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2FsbGFibGVfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfSXNTdWJjbGFzcwotICAgICAgICAgICAgICAgUHlDbGFzc19OZXcKLSAgICAgICAgICAgICAgIFB5Q29kZV9BZGRyMkxpbmUKLSAgICAgICAgICAgICAgIFB5Q29kZV9OZXcKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Bc0NDb21wbGV4Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfRnJvbUNDb21wbGV4Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9SZWFsQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5RGljdF9DbGVhcgotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9JdGVtcwotICAgICAgICAgICAgICAgUHlEaWN0X0tleXMKLSAgICAgICAgICAgICAgIFB5RGljdF9OZXcKLSAgICAgICAgICAgICAgIFB5RGljdF9OZXh0Ci0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9TaXplCi0gICAgICAgICAgICAgICBQeURpY3RfVmFsdWVzCi0gICAgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudAotICAgICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gICAgICAgICAgICAgICBQeUVycl9DaGVja1NpZ25hbHMKLSAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyCi0gICAgICAgICAgICAgICBQeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gICAgICAgICAgICAgICBQeUVycl9GZXRjaAotICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkKLSAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFcnJfT2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50Ci0gICAgICAgICAgICAgICBQeUVycl9QcmludEV4Ci0gICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlCi0gICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8KLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0SW50ZXJydXB0Ci0gICAgICAgICAgICAgICBQeUVycl9TZXROb25lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZwotICAgICAgICAgICAgICAgUHlFdmFsX0FjcXVpcmVMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxNZXRob2QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICAgICAgICAgICAgICAgUHlFdmFsX0V2YWxDb2RlCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRGcmFtZQotICAgICAgICAgICAgICAgUHlFdmFsX0dldEdsb2JhbHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRMb2NhbHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRSZXN0cmljdGVkCi0gICAgICAgICAgICAgICBQeUV2YWxfSW5pdFRocmVhZHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZWxlYXNlTG9jawotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfU2F2ZVRocmVhZAotICAgICAgICAgICAgICAgUHlGaWxlX0FzRmlsZQotICAgICAgICAgICAgICAgUHlGaWxlX0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlGaWxlX0dldExpbmUKLSAgICAgICAgICAgICAgIFB5RmlsZV9OYW1lCi0gICAgICAgICAgICAgICBQeUZpbGVfU2V0QnVmU2l6ZQotICAgICAgICAgICAgICAgUHlGaWxlX1NvZnRTcGFjZQotICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmxvYXRfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5RmxvYXRfQXNTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmxvYXRfRmluaQotICAgICAgICAgICAgICAgUHlGbG9hdF9Gcm9tRG91YmxlCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrUG9wCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzCi0gICAgICAgICAgICAgICBQeUZyYW1lX0ZpbmkKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0Ci0gICAgICAgICAgICAgICBQeUZyYW1lX05ldwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXRDb2RlCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldERlZmF1bHRzCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldEdsb2JhbHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfRmluZERGQQotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0xhYmVsUmVwcgotICAgICAgICAgICAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycwotICAgICAgICAgICAgICAgUHlJbXBvcnRfQWRkTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BcHBlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9DbGVhbnVwCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0dldE1vZHVsZURpY3QKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9SZWxvYWRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfRG9CaW5PcAotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9OZXcKLSAgICAgICAgICAgICAgIFB5SW50X0FzTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfRmluaQotICAgICAgICAgICAgICAgUHlJbnRfRnJvbUxvbmcKLSAgICAgICAgICAgICAgIFB5SW50X0dldE1heAotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kCi0gICAgICAgICAgICAgICBQeUxpc3RfQXNUdXBsZQotICAgICAgICAgICAgICAgUHlMaXN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X0luc2VydAotICAgICAgICAgICAgICAgUHlMaXN0X05ldwotICAgICAgICAgICAgICAgUHlMaXN0X1JldmVyc2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeUxpc3RfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9TaXplCi0gICAgICAgICAgICAgICBQeUxpc3RfU29ydAotICAgICAgICAgICAgICAgUHlMb25nX0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc1ZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tRG91YmxlCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVm9pZFB0cgotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0NoZWNrCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0hhc0tleQotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0xlbmd0aAotICAgICAgICAgICAgICAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Jbml0Ci0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1lbV9GcmVlCi0gICAgICAgICAgICAgICBQeU1lbV9NYWxsb2MKLSAgICAgICAgICAgICAgIFB5TWVtX1JlYWxsb2MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0NsYXNzCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9GaW5pCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9GdW5jdGlvbgotICAgICAgICAgICAgICAgUHlNZXRob2RfTmV3Ci0gICAgICAgICAgICAgICBQeU1ldGhvZF9TZWxmCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9HZXREaWN0Ci0gICAgICAgICAgICAgICBQeU1vZHVsZV9HZXROYW1lCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9OZXcKLSAgICAgICAgICAgICAgIFB5Tm9kZV9BZGRDaGlsZAotICAgICAgICAgICAgICAgUHlOb2RlX0NvbXBpbGUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9GcmVlCi07ICAgICAgICAgICAgICAgUHlOb2RlX0xpc3RUcmVlCi0gICAgICAgICAgICAgICBQeU5vZGVfTmV3Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9BYnNvbHV0ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQWRkCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BbmQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NoZWNrCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Db2VyY2UKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZUV4Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9EaXZpZGUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Rpdm1vZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfRmxvYXQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0ludAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW52ZXJ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9Mb25nCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Mc2hpZnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX011bHRpcGx5Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9OZWdhdGl2ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfT3IKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvc2l0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Qb3dlcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUmVtYWluZGVyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Sc2hpZnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1N1YnRyYWN0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9Yb3IKLSAgICAgICAgICAgICAgIFB5T1NfQWZ0ZXJGb3JrCi0gICAgICAgICAgICAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzCi0gICAgICAgICAgICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzCi0gICAgICAgICAgICAgICBQeU9TX0ludGVycnVwdE9jY3VycmVkCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lCi0gICAgICAgICAgICAgICBQeU9TX1N0ZGlvUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG9sCi0gICAgICAgICAgICAgICBQeU9TX3N0cnRvdWwKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbE9iamVjdAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ21wCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Db21wYXJlCi0gICAgICAgICAgICAgICBQeU9iamVjdF9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Jc1RydWUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0xlbmd0aAotICAgICAgICAgICAgICAgUHlPYmplY3RfTm90Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9QcmludAotICAgICAgICAgICAgICAgUHlPYmplY3RfUmVwcgotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0QXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfU3RyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9BZGRUb2tlbgotICAgICAgICAgICAgICAgUHlQYXJzZXJfRGVsZXRlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9OZXcKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1BhcnNlRmlsZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UmFuZ2VfTmV3Ci0gICAgICAgICAgICAgICBQeVJ1bl9BbnlGaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9GaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlT25lCi0gICAgICAgICAgICAgICBQeVJ1bl9TaW1wbGVGaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9TaW1wbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UnVuX1N0cmluZwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9DaGVjawotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db25jYXQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ29udGFpbnMKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ291bnQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0luCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0luZGV4Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xlbmd0aAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9MaXN0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1JlcGVhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1R1cGxlCi0gICAgICAgICAgICAgICBQeVNsaWNlX0dldEluZGljZXMKLSAgICAgICAgICAgICAgIFB5U2xpY2VfTmV3Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfQ29uY2F0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXRBbmREZWwKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ZpbmkKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zvcm1hdAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkluUGxhY2UKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX1NpemUKLSAgICAgICAgICAgICAgIFB5U3lzX0dldEZpbGUKLSAgICAgICAgICAgICAgIFB5U3lzX0dldE9iamVjdAotICAgICAgICAgICAgICAgUHlTeXNfU2V0QXJndgotICAgICAgICAgICAgICAgUHlTeXNfU2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRQYXRoCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycgotICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRvdXQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfRGVsZXRlCi0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX05ldwotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9Td2FwCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2Rvd25fc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZXhpdF90aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50Ci0gICAgICAgICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF91cF9zZW1hCi0gICAgICAgICAgICAgICBQeVRva2VuX09uZUNoYXIKLSAgICAgICAgICAgICAgIFB5VG9rZW5fVHdvQ2hhcnMKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9HZXQKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX1ByaW50Ci0gICAgICAgICAgICAgICBQeVR1cGxlX0ZpbmkKLSAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlUdXBsZV9OZXcKLSAgICAgICAgICAgICAgIFB5VHVwbGVfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlUdXBsZV9TaXplCi0gICAgICAgICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbAotICAgICAgICAgICAgICAgUHlfQXRFeGl0Ci0gICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlCi0gICAgICAgICAgICAgICBQeV9Db21waWxlU3RyaW5nCi0gICAgICAgICAgICAgICBQeV9FbmRJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfRXhpdAotICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcgotICAgICAgICAgICAgICAgUHlfRmRJc0ludGVyYWN0aXZlCi0gICAgICAgICAgICAgICBQeV9GaW5hbGl6ZQotICAgICAgICAgICAgICAgUHlfRmluZE1ldGhvZAotICAgICAgICAgICAgICAgUHlfRmluZE1ldGhvZEluQ2hhaW4KLSAgICAgICAgICAgICAgIFB5X0ZsdXNoTGluZQotICAgICAgICAgICAgICAgUHlfRnJlZQotICAgICAgICAgICAgICAgUHlfR2V0QXJnY0FyZ3YKLSAgICAgICAgICAgICAgIFB5X0dldEJ1aWxkSW5mbwotICAgICAgICAgICAgICAgUHlfR2V0Q29tcGlsZXIKLSAgICAgICAgICAgICAgIFB5X0dldENvcHlyaWdodAotICAgICAgICAgICAgICAgUHlfR2V0RXhlY1ByZWZpeAotICAgICAgICAgICAgICAgUHlfR2V0UGF0aAotICAgICAgICAgICAgICAgUHlfR2V0UGxhdGZvcm0KLSAgICAgICAgICAgICAgIFB5X0dldFByZWZpeAotICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtTmFtZQotICAgICAgICAgICAgICAgUHlfR2V0UHl0aG9uSG9tZQotICAgICAgICAgICAgICAgUHlfR2V0VmVyc2lvbgotICAgICAgICAgICAgICAgUHlfSW5pdE1vZHVsZTQKLSAgICAgICAgICAgICAgIFB5X0luaXRpYWxpemUKLSAgICAgICAgICAgICAgIFB5X0lzSW5pdGlhbGl6ZWQKLSAgICAgICAgICAgICAgIFB5X01haW4KLSAgICAgICAgICAgICAgIFB5X01ha2VQZW5kaW5nQ2FsbHMKLSAgICAgICAgICAgICAgIFB5X01hbGxvYwotICAgICAgICAgICAgICAgUHlfTmV3SW50ZXJwcmV0ZXIKLSAgICAgICAgICAgICAgIFB5X1JlYWxsb2MKLSAgICAgICAgICAgICAgIFB5X1JlcHJFbnRlcgotICAgICAgICAgICAgICAgUHlfUmVwckxlYXZlCi0gICAgICAgICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZQotICAgICAgICAgICAgICAgUHlfU2V0UHl0aG9uSG9tZQotICAgICAgICAgICAgICAgUHlfVmFCdWlsZFZhbHVlCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9GaW5pXzIKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0luaXRfMgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24KLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaW5pCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24KLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Jbml0Ci0gICAgICAgICAgICAgICBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUKLSAgICAgICAgICAgICAgIF9QeUxvbmdfTmV3Ci0gICAgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIKLSAgICAgICAgICAgICAgIF9QeU9iamVjdF9OZXcKLSAgICAgICAgICAgICAgIF9QeU9iamVjdF9OZXdWYXIKLSAgICAgICAgICAgICAgIF9QeVN0cmluZ19SZXNpemUKLSAgICAgICAgICAgICAgIF9QeVN5c19Jbml0Ci0gICAgICAgICAgICAgICBfUHlUdXBsZV9SZXNpemUKLSAgICAgICAgICAgICAgIF9QeV9NRDVGaW5hbAotICAgICAgICAgICAgICAgX1B5X01ENUluaXQKLSAgICAgICAgICAgICAgIF9QeV9NRDVVcGRhdGUKLTsgICAgICAgICAgICAgICBfUHlfYWRkYml0Ci0gICAgICAgICAgICAgICBfUHlfY19kaWZmCi0gICAgICAgICAgICAgICBfUHlfY19uZWcKLSAgICAgICAgICAgICAgIF9QeV9jX3BvdwotICAgICAgICAgICAgICAgX1B5X2NfcHJvZAotICAgICAgICAgICAgICAgX1B5X2NfcXVvdAotICAgICAgICAgICAgICAgX1B5X2Nfc3VtCi07ICAgICAgICAgICAgICAgX1B5X2RlbGJpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9tZXJnZWJpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9tZXRhX2dyYW1tYXIKLTsgICAgICAgICAgICAgICBfUHlfbmV3Yml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X3NhbWViaXRzZXQKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX1R5cGUKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21PYmplY3QKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21NZW1vcnkKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX05ldwotCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9yZWFkbWUudHh0IGIvUEMvb3MydmFjcHAvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1ODYwNC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLUlCTSBWaXN1YWxBZ2UgQy9DKysgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVG8gYnVpbGQgUHl0aG9uIGZvciBPUy8yLCBjaGFuZ2UgaW50byAuL29zMnZhY3BwIGFuZCBpc3N1ZSBhbiAnTk1BS0UnCi1jb21tYW5kLiAgVGhpcyB3aWxsIGJ1aWxkIGEgUFlUSE9OMTUuRExMIGNvbnRhaW5pbmcgdGhlIHNldCBvZiBQeXRob24KLW1vZHVsZXMgbGlzdGVkIGluIGNvbmZpZy5jIGFuZCBhIHNtYWxsIFBZVEhPTi5FWEUgdG8gc3RhcnQgdGhlCi1pbnRlcnByZXRlci4KLQotQnkgY2hhbmdpbmcgdGhlIEMgY29tcGlsZXIgZmxhZyAvR2QtIGluIHRoZSBtYWtlZmlsZSB0byAvR2QrLCB5b3UgY2FuCi1yZWR1Y2UgdGhlIHNpemUgb2YgdGhlc2UgYnkgY2F1c2luZyBQeXRob24gdG8gZHluYW1pY2FsbHkgbGluayB0byB0aGUKLUMgcnVudGltZSBETExzIGluc3RlYWQgb2YgaW5jbHVkaW5nIHRoZWlyIGJ1bGsgaW4geW91ciBiaW5hcmllcy4gCi1Ib3dldmVyLCB0aGlzIG1lYW5zIHRoYXQgYW55IHN5c3RlbSBvbiB3aGljaCB5b3UgcnVuIFB5dGhvbiBtdXN0IGhhdmUKLXRoZSBWQUMrKyBjb21waWxlciBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aG9zZSBETExzIGF2YWlsYWJsZS4KLQotRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHlvdSBtYXkgc2VlIGEgY291cGxlIG9mIGhhcm1sZXNzIHdhcm5pbmdzOgotCi0gIEZyb20gdGhlIEMgQ29tcGlsZXIsICJObyBmdW5jdGlvbiBwcm90b3R5cGUgZ2l2ZW4gZm9yIFhYWCIsIHdoaWNoCi0gIGNvbWVzIGZyb20gdGhlIHVzZSBvZiBLJlIgcGFyYW1ldGVycyB3aXRoaW4gUHl0aG9uIGZvciBwb3J0YWJpbGl0eS4KLQotICBGcm9tIHRoZSBJTElCIGxpYnJhcmlhbiwgIk1vZHVsZSBOb3QgRm91bmQgKFhYWCkiLCB3aGljaCBjb21lcwotICBmcm9tIGl0cyBhdHRlbXB0IHRvIHBlcmZvcm0gdGhlICgtKykgb3BlcmF0aW9uLCB3aGljaCByZW1vdmVzIGFuZAotICB0aGVuIGFkZHMgYSAuT0JKIHRvIHRoZSBsaWJyYXJ5LiAgVGhlIGZpcnN0IHRpbWUgYSBidWlsZCBpcyBkb25lLAotICBpdCBvYnZpb3VzbHkgY2Fubm90IHJlbW92ZSB3aGF0IGlzIG5vdCB5ZXQgYnVpbHQuCi0KLVRoaXMgYnVpbGQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgbW9zdCBQeXRob24gZnVuY3Rpb25hbGl0eSBhcyB3ZWxsIGFzCi1UQ1AvSVAgc29ja2V0cy4gIEl0IG9taXRzIHRoZSBQb3NpeCBhYmlsaXR5IHRvICdmb3JrJyBhIHByb2Nlc3MgYnV0Ci1zdXBwb3J0cyB0aHJlYWRzIHVzaW5nIE9TLzIgbmF0aXZlIGNhcGFiaWxpdGllcy4gIEkgaGF2ZSB0cmllZCB0bwotc3VwcG9ydCBldmVyeXRoaW5nIHBvc3NpYmxlIGJ1dCBoZXJlIGFyZSBhIGZldyB1c2FnZSBub3Rlcy4KLQotCi0tLSBvcy5wb3BlbigpIFVzYWdlIFdhcm5pbmdzCi0KLVdpdGggcmVzcGVjdCB0byBteSBpbXBsZW1lbnRhdGlvbiBvZiBwb3BlbigpIHVuZGVyIE9TLzI6Ci0KLSAgICBpbXBvcnQgb3MKLQotICAgIGZkID0gb3MucG9wZW4oInBremlwLmV4ZSAtQCBqdW5rLnppcCIsICd3YicpCi0gICAgZmQud3JpdGUoImZpbGUxLnR4dFxuIikKLSAgICBmZC53cml0ZSgiZmlsZTIudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMy50eHRcbiIpCi0gICAgZmQud3JpdGUoIlx4MWEiKSAgIyBTaG91bGQgTm90IEJlIE5lY2Vzc2FyeSBCdXQgSXMKLSAgICBmZC5jbG9zZSgpCi0KLVRoZXJlIGlzIGEgYnVnLCBlaXRoZXIgaW4gdGhlIFZBQysrIGNvbXBpbGVyIG9yIE9TLzIgaXRzZWxmLCB3aGVyZSB0aGUKLXNpbXBsZSBjbG9zdXJlIG9mIHRoZSB3cml0ZS1zaWRlIG9mIGEgcGlwZSAtdG8tIGEgcHJvY2VzcyBkb2VzIG5vdAotc2VuZCBhbiBFT0YgdG8gdGhhdCBwcm9jZXNzLiAgSSBmaW5kIEkgbXVzdCBleHBsaWNpdGx5IHdyaXRlIGEKLWNvbnRyb2wtWiAoRU9GKSBiZWZvcmUgY2xvc2luZyB0aGUgcGlwZS4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSB3aGVuCi11c2luZyBwb3BlbigpIGluIHJlYWQgbW9kZS4KLQotT25lIG90aGVyIHNsaWdodCBkaWZmZXJlbmNlIHdpdGggbXkgcG9wZW4oKSBpcyB0aGF0IEkgcmV0dXJuIE5vbmUKLWZyb20gdGhlIGNsb3NlKCksIGluc3RlYWQgb2YgdGhlIFVuaXggY29udmVudGlvbiBvZiB0aGUgcmV0dXJuIGNvZGUKLW9mIHRoZSBzcGF3bmVkIHByb2dyYW0uICBJIGNvdWxkIGZpbmQgbm8gZWFzeSB3YXkgdG8gZG8gdGhpcyB1bmRlcgotT1MvMi4KLQotCi0tLSBCRUdJTkxJQlBBVEgvRU5ETElCUEFUSAotCi1XaXRoIHJlc3BlY3QgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGlzIE9TLzIgcG9ydCBzdXBwb3J0cyB0aGUKLXNwZWNpYWwtdG8tT1MvMiBtYWdpYyBuYW1lcyBvZiAnQkVHSU5MSUJQQVRIJyBhbmQgJ0VORExJQlBBVEgnIHRvCi1jb250cm9sIHdoZXJlIHRvIGxvYWQgY29udmVudGlvbmFsIERMTHMgZnJvbS4gIFRob3NlIG5hbWVzIGFyZQotaW50ZXJjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byBjYWxscyBvbiB0aGUgT1MvMiBrZXJuZWwgQVBJcyBhbmQKLWFyZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLCB3aGV0aGVyIFB5dGhvbi1iYXNlZCBvciBub3QuCi0KLUEgZmV3IG5ldyBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgb3MgbW9kdWxlOgotCi0gICAgb3MubWVtaW5zdGFsbGVkICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBJbnN0YWxsZWQgb24gTWFjaGluZQotICAgIG9zLm1lbWtlcm5lbCAgICAgIyBDb3VudCBvZiBCeXRlcyBvZiBSQU0gUmVzZXJ2ZWQgKE5vbi1Td2FwcGFibGUpCi0gICAgb3MubWVtdmlydHVhbCAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFZpcnR1YWwgUkFNIFBvc3NpYmxlCi0gICAgb3MudGltZXNsaWNlICAgICAjIER1cmF0aW9uIG9mIFNjaGVkdWxlciBUaW1lc2xpY2UsIGluIE1pbGxpc2Vjb25kcwotICAgIG9zLm1heHBhdGhsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFBhdGggU3BlY2lmaWNhdGlvbiwgaW4gY2hhcnMKLSAgICBvcy5tYXhuYW1lbGVuICAgICMgTWF4aW11bSBMZW5ndGggb2YgYSBTaW5nbGUgRGlyL0ZpbGUgTmFtZSwgaW4gY2hhcnMKLSAgICBvcy52ZXJzaW9uICAgICAgICMgVmVyc2lvbiBvZiBPUy8yIEJlaW5nIFJ1biBlLmcuICI0LjAwIgotICAgIG9zLnJldmlzaW9uICAgICAgIyBSZXZpc2lvbiBvZiBPUy8yIEJlaW5nIFJ1biAodXN1YWxseSB6ZXJvKQotICAgIG9zLmJvb3Rkcml2ZSAgICAgIyBEcml2ZSB0aGF0IFN5c3RlbSBCb290ZWQgRnJvbSBlLmcuICJDOiIKLSAgICAgICAgICAgICAgICAgICAgICMgKHVzZWZ1bCB0byBmaW5kIHRoZSBDT05GSUcuU1lTIHVzZWQgdG8gYm9vdCB3aXRoKQotCi0KLS0tIFVzaW5nIFB5dGhvbiBhcyB0aGUgRGVmYXVsdCBPUy8yIEJhdGNoIExhbmd1YWdlCi0KLU5vdGUgdGhhdCBPUy8yIHN1cHBvcnRzIHRoZSBVbml4IHRlY2huaXF1ZSBvZiBwdXR0aW5nIHRoZSBzcGVjaWFsCi1jb21tZW50IGxpbmUgYXQgdGhlIHRpbWUgb2Ygc2NyaXB0cyBlLmcuICIjIS91c3IvYmluL3B5dGhvbiIgaW4KLWEgZGlmZmVyZW50IHN5bnRhY3RpYyBmb3JtLiAgVG8gZG8gdGhpcywgcHV0IHlvdXIgc2NyaXB0IGludG8gYSBmaWxlCi13aXRoIGEgLkNNRCBleHRlbnNpb24gYW5kIGFkZGVkICdleHRwcm9jJyB0byB0aGUgdG9wIGFzIGZvbGxvd3M6Ci0KLSAgICBleHRwcm9jIEM6XFB5dGhvblxQeXRob24uZXhlIC14Ci0gICAgaW1wb3J0IG9zCi0gICAgcHJpbnQgIkhlbGxvIGZyb20gUHl0aG9uIgotCi1UaGUgJy14JyBvcHRpb24gdGVsbHMgUHl0aG9uIHRvIHNraXAgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUKLXdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlc3QgYXMgbm9ybWFsIFB5dGhvbiBzb3VyY2UuCi0KLQotLS0gU3VnZ2VzdGVkIEVudmlyb25tZW50IFZhcmlhYmxlIFNldHVwCi0KLVdpdGggcmVzcGVjdCB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBQeXRob24sIEkgdXNlIHRoZQotZm9sbG93aW5nIHNldHVwOgotCi0gICAgU2V0IFBZVEhPTkhPTUU9RTpcVGF1XFByb2plY3RzXFB5dGhvbjtEOlxETExzCi0gICAgU2V0IFBZVEhPTlBBVEg9LjtFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYjsgXAotICAgICAgICAgICAgICAgICAgICAgRTpcVGF1XFByb2plY3RzXFB5dGhvblxMaWJccGxhdC13aW4KLQotVGhlIEVYRUNfUFJFRklYIChvcHRpb25hbCBzZWNvbmQgcGF0aHNwZWMgb24gUFlUSE9OSE9NRSkgaXMgd2hlcmUKLXlvdSBwdXQgYW55IFB5dGhvbiBleHRlbnNpb24gRExMcyB5b3UgbWF5IGNyZWF0ZS9vYnRhaW4uICBUaGVyZQotYXJlIG5vbmUgcHJvdmlkZWQgd2l0aCB0aGlzIHJlbGVhc2UuCi0KLQotLS0gQ29udGFjdCBJbmZvCi0KLUplZmYgUnVzaCBpcyBubyBsb25nZXIgc3VwcG9ydGluZyB0aGUgVkFDUFAgcG9ydCA6LSgKLQotSSBkb24ndCBoYXZlIHRoZSBWQUNQUCBjb21waWxlciwgc28gY2FuJ3QgcmVsaWFibHkgbWFpbnRhaW4gdGhpcyBwb3J0LiAKLQotQW55b25lIHdpdGggVkFDUFAgd2hvIGNhbiBjb250cmlidXRlIHBhdGNoZXMgdG8ga2VlcCB0aGlzIHBvcnQgYnVpbGRhYmxlCi1zaG91bGQgdXBsb2FkIHRoZW0gdG8gdGhlIFB5dGhvbiBQYXRjaCBNYW5hZ2VyIGF0IFNvdXJjZWZvcmdlIGFuZCAKLWFzc2lnbiB0aGVtIHRvIG1lIGZvciByZXZpZXcvY2hlY2tpbi4KLQotQW5kcmV3IE1hY0ludHlyZQotYWltYWNpbnR5cmUgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0Ci1BdWd1c3QgMTgsIDIwMDIuCmRpZmYgLS1naXQgYS9QQy9weWNvbmZpZy5oIGIvUEMvcHljb25maWcuaAppbmRleCBmMzIwY2NmLi4yOTk1MjdkIDEwMDY0NAotLS0gYS9QQy9weWNvbmZpZy5oCisrKyBiL1BDL3B5Y29uZmlnLmgKQEAgLTc0LDggKzc0LDYgQEAKICNkZWZpbmUgRE9OVF9IQVZFX1NJR19QQVVTRQogI2RlZmluZSBMT05HX0JJVAkzMgogI2RlZmluZSBXT1JEX0JJVCAzMgotI2RlZmluZSBQUkVGSVggIiIKLSNkZWZpbmUgRVhFQ19QUkVGSVggIiIKIAogI2RlZmluZSBNU19XSU4zMiAvKiBvbmx5IHN1cHBvcnQgd2luMzIgYW5kIGdyZWF0ZXIuICovCiAjZGVmaW5lIE1TX1dJTkRPV1MKQEAgLTE1NiwxNSArMTU0LDkgQEAKICNlbmRpZiAvKiBNU19XSU42NCAqLwogCiAvKiBzZXQgdGhlIHZlcnNpb24gbWFjcm9zIGZvciB0aGUgd2luZG93cyBoZWFkZXJzICovCi0jaWZkZWYgTVNfV0lOWDY0Ci0vKiA2NCBiaXQgb25seSBydW5zIG9uIFhQIG9yIGdyZWF0ZXIgKi8KKy8qIFB5dGhvbiAzLjQrIHJlcXVpcmVzIFdpbmRvd3MgWFAgb3IgZ3JlYXRlciAqLwogI2RlZmluZSBQeV9XSU5WRVIgMHgwNTAxIC8qIF9XSU4zMl9XSU5OVF9XSU5YUCAqLwogI2RlZmluZSBQeV9OVERESSBOVERESV9XSU5YUAotI2Vsc2UKLS8qIFB5dGhvbiAyLjYrIHJlcXVpcmVzIFdpbmRvd3MgMjAwMCBvciBncmVhdGVyICovCi0jZGVmaW5lIFB5X1dJTlZFUiAweDA1MDAgLyogX1dJTjMyX1dJTk5UX1dJTjJLICovCi0jZGVmaW5lIFB5X05URERJIE5URERJX1dJTjJLU1A0Ci0jZW5kaWYKIAogLyogV2Ugb25seSBzZXQgdGhlc2UgdmFsdWVzIHdoZW4gYnVpbGRpbmcgUHl0aG9uIC0gd2UgZG9uJ3Qgd2FudCB0byBmb3JjZQogICAgdGhlc2UgdmFsdWVzIG9uIGV4dGVuc2lvbnMsIGFzIHRoYXQgd2lsbCBhZmZlY3QgdGhlIHByb3RvdHlwZXMgYW5kCkBAIC0xOTksOCArMTkxLDEwIEBACiAjZGVmaW5lIEhBVkVfU1NJWkVfVCAxCiAKICNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKLSNpZmRlZiBfTV9JWDg2CisjaWYgZGVmaW5lZChfTV9JWDg2KQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChJbnRlbCkiKQorI2VsaWYgZGVmaW5lZChfTV9BUk0pCisjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEFSTSkiKQogI2Vsc2UKICNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoVW5rbm93bikiKQogI2VuZGlmCkBAIC0zMjQsMTEgKzMxOCwxMSBAQAogCQkJdGhlaXIgTWFrZWZpbGUgKG90aGVyIGNvbXBpbGVycyBhcmUgZ2VuZXJhbGx5CiAJCQl0YWtlbiBjYXJlIG9mIGJ5IGRpc3R1dGlscy4pICovCiAjCQkJaWYgZGVmaW5lZChfREVCVUcpCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzNfZC5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjM0X2QubGliIikKICMJCQllbGlmIGRlZmluZWQoUHlfTElNSVRFRF9BUEkpCiAjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMy5saWIiKQogIwkJCWVsc2UKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zMy5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjM0LmxpYiIpCiAjCQkJZW5kaWYgLyogX0RFQlVHICovCiAjCQllbmRpZiAvKiBfTVNDX1ZFUiAqLwogIwllbmRpZiAvKiBQeV9CVUlMRF9DT1JFICovCkBAIC03MjcsNiArNzIxLDkgQEAKIC8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAyCiAKKy8qIFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1BJRF9UIFNJWkVPRl9JTlQKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovCiAvKiAjdW5kZWYgSEFWRV9MSUJETCAqLwogCmRpZmYgLS1naXQgYS9QQy9weXRob24ubWsgYi9QQy9weXRob24ubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjUxMDYuLjAwMDAwMDAKLS0tIGEvUEMvcHl0aG9uLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1wcm9qZWN0IDogbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLmV4ZSBuOlxweXRob25ccHl0aG9uLTEuJg0KLTUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMNCi0NCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIubWsxDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQ0KZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMuZGVmIGIvUEMvcHl0aG9uMy5kZWYKaW5kZXggZDcyNjUyNS4uMGNmMGQ5NCAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5kZWYKKysrIGIvUEMvcHl0aG9uMy5kZWYKQEAgLTEsNjk5ICsxLDcwMCBAQAotOyBXaGVuIGNoYW5naW5nIHRoaXMgZmlsZSwgcnVuIHB5dGhvbjMzZ2VuLnB5Cis7IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzRnZW4ucHkKIExJQlJBUlkJInB5dGhvbjMiCiBFWFBPUlRTCi0gIFB5QXJnX1BhcnNlPXB5dGhvbjMzLlB5QXJnX1BhcnNlCi0gIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZQotICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjMzLlB5QXJnX1VucGFja1R1cGxlCi0gIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzMuUHlBcmdfVmFQYXJzZQotICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzMuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCi0gIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5QmFzZU9iamVjdF9UeXBlIERBVEEKLSAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjMzLlB5Qm9vbF9Gcm9tTG9uZwotICBQeUJvb2xfVHlwZT1weXRob24zMy5QeUJvb2xfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQXNTdHJpbmcKLSAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0NvbmNhdAotICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKLSAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1Jlc2l6ZQotICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1NpemUKLSAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zMy5QeUJ5dGVBcnJheV9UeXBlIERBVEEKLSAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zMy5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVzX0FzU3RyaW5nCi0gIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0Ci0gIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCi0gIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjMzLlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCi0gIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXQKLSAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXRWCi0gIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zMy5QeUJ5dGVzX0Zyb21PYmplY3QKLSAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZwotICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19SZXByPXB5dGhvbjMzLlB5Qnl0ZXNfUmVwcgotICBQeUJ5dGVzX1NpemU9cHl0aG9uMzMuUHlCeXRlc19TaXplCi0gIFB5Qnl0ZXNfVHlwZT1weXRob24zMy5QeUJ5dGVzX1R5cGUgREFUQQotICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NhbGwKLSAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0Ci0gIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0U2VsZgotICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zMy5QeUNGdW5jdGlvbl9OZXdFeAotICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQotICBQeUNhbGxJdGVyX05ldz1weXRob24zMy5QeUNhbGxJdGVyX05ldwotICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzMuUHlDYWxsSXRlcl9UeXBlIERBVEEKLSAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zMy5QeUNhbGxhYmxlX0NoZWNrCi0gIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXROYW1lCi0gIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzMuUHlDYXBzdWxlX0ltcG9ydAotICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zMy5QeUNhcHN1bGVfSXNWYWxpZAotICBQeUNhcHN1bGVfTmV3PXB5dGhvbjMzLlB5Q2Fwc3VsZV9OZXcKLSAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX1NldENvbnRleHQKLSAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX1NldE5hbWUKLSAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzMuUHlDYXBzdWxlX1R5cGUgREFUQQotICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCi0gIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGUKLSAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfRGVjb2RlcgotICBQeUNvZGVjX0VuY29kZT1weXRob24zMy5QeUNvZGVjX0VuY29kZQotICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19FbmNvZGVyCi0gIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfSWdub3JlRXJyb3JzCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCi0gIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zMy5QeUNvZGVjX0tub3duRW5jb2RpbmcKLSAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zMy5QeUNvZGVjX0xvb2t1cEVycm9yCi0gIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlcgotICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlckVycm9yCi0gIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1SZWFkZXIKLSAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1Xcml0ZXIKLSAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19TdHJpY3RFcnJvcnMKLSAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCi0gIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zMy5QeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzMuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICBQeUNvbXBsZXhfVHlwZT1weXRob24zMy5QeUNvbXBsZXhfVHlwZSBEQVRBCi0gIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzMuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAotICBQeURlc2NyX05ld0dldFNldD1weXRob24zMy5QeURlc2NyX05ld0dldFNldAotICBQeURlc2NyX05ld01lbWJlcj1weXRob24zMy5QeURlc2NyX05ld01lbWJlcgotICBQeURlc2NyX05ld01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld01ldGhvZAotICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZW1zX1R5cGUgREFUQQotICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQotICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKLSAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQotICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzMuUHlEaWN0S2V5c19UeXBlIERBVEEKLSAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjMzLlB5RGljdFByb3h5X05ldwotICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjMzLlB5RGljdFByb3h5X1R5cGUgREFUQQotICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zMy5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCi0gIFB5RGljdF9DbGVhcj1weXRob24zMy5QeURpY3RfQ2xlYXIKLSAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjMzLlB5RGljdF9Db250YWlucwotICBQeURpY3RfQ29weT1weXRob24zMy5QeURpY3RfQ29weQotICBQeURpY3RfRGVsSXRlbT1weXRob24zMy5QeURpY3RfRGVsSXRlbQotICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfRGVsSXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbT1weXRob24zMy5QeURpY3RfR2V0SXRlbQotICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfR2V0SXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zMy5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgotICBQeURpY3RfSXRlbXM9cHl0aG9uMzMuUHlEaWN0X0l0ZW1zCi0gIFB5RGljdF9LZXlzPXB5dGhvbjMzLlB5RGljdF9LZXlzCi0gIFB5RGljdF9NZXJnZT1weXRob24zMy5QeURpY3RfTWVyZ2UKLSAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzMuUHlEaWN0X01lcmdlRnJvbVNlcTIKLSAgUHlEaWN0X05ldz1weXRob24zMy5QeURpY3RfTmV3Ci0gIFB5RGljdF9OZXh0PXB5dGhvbjMzLlB5RGljdF9OZXh0Ci0gIFB5RGljdF9TZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtCi0gIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9TaXplPXB5dGhvbjMzLlB5RGljdF9TaXplCi0gIFB5RGljdF9UeXBlPXB5dGhvbjMzLlB5RGljdF9UeXBlIERBVEEKLSAgUHlEaWN0X1VwZGF0ZT1weXRob24zMy5QeURpY3RfVXBkYXRlCi0gIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzMuUHlEaWN0X1ZhbHVlcwotICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzMuUHlFbGxpcHNpc19UeXBlIERBVEEKLSAgUHlFbnVtX1R5cGU9cHl0aG9uMzMuUHlFbnVtX1R5cGUgREFUQQotICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zMy5QeUVycl9CYWRBcmd1bWVudAotICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zMy5QeUVycl9DaGVja1NpZ25hbHMKLSAgUHlFcnJfQ2xlYXI9cHl0aG9uMzMuUHlFcnJfQ2xlYXIKLSAgUHlFcnJfRGlzcGxheT1weXRob24zMy5QeUVycl9EaXNwbGF5Ci0gIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzMuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9GZXRjaD1weXRob24zMy5QeUVycl9GZXRjaAotICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzMuUHlFcnJfRm9ybWF0Ci0gIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbgotICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKLSAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzMuUHlFcnJfTm9NZW1vcnkKLSAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICBQeUVycl9PY2N1cnJlZD1weXRob24zMy5QeUVycl9PY2N1cnJlZAotICBQeUVycl9QcmludD1weXRob24zMy5QeUVycl9QcmludAotICBQeUVycl9QcmludEV4PXB5dGhvbjMzLlB5RXJyX1ByaW50RXgKLSAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzMuUHlFcnJfUHJvZ3JhbVRleHQKLSAgUHlFcnJfUmVzdG9yZT1weXRob24zMy5QeUVycl9SZXN0b3JlCi0gIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm8KLSAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0Ci0gIFB5RXJyX1NldEludGVycnVwdD1weXRob24zMy5QeUVycl9TZXRJbnRlcnJ1cHQKLSAgUHlFcnJfU2V0Tm9uZT1weXRob24zMy5QeUVycl9TZXROb25lCi0gIFB5RXJyX1NldE9iamVjdD1weXRob24zMy5QeUVycl9TZXRPYmplY3QKLSAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjMzLlB5RXJyX1NldFN0cmluZwotICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zMy5QeUVycl9TeW50YXhMb2NhdGlvbgotICBQeUVycl9XYXJuRXg9cHl0aG9uMzMuUHlFcnJfV2FybkV4Ci0gIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zMy5QeUVycl9XYXJuRXhwbGljaXQKLSAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zMy5QeUVycl9XYXJuRm9ybWF0Ci0gIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zMy5QeUVycl9Xcml0ZVVucmFpc2FibGUKLSAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlTG9jawotICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zMy5QeUV2YWxfQWNxdWlyZVRocmVhZAotICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlFdmFsX0NhbGxNZXRob2QKLSAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzMuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZQotICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zMy5QeUV2YWxfRXZhbENvZGVFeAotICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWUKLSAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWVFeAotICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzMuUHlFdmFsX0dldEJ1aWx0aW5zCi0gIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzMuUHlFdmFsX0dldENhbGxTdGF0cwotICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZyYW1lCi0gIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zMy5QeUV2YWxfR2V0RnVuY0Rlc2MKLSAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jTmFtZQotICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zMy5QeUV2YWxfR2V0R2xvYmFscwotICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRMb2NhbHMKLSAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9Jbml0VGhyZWFkcwotICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zMy5QeUV2YWxfUmVJbml0VGhyZWFkcwotICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VMb2NrCi0gIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9TYXZlVGhyZWFkCi0gIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzMuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAotICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKLSAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQotICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zMy5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCi0gIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzMuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjMzLlB5RXhjX0J1ZmZlckVycm9yIERBVEEKLSAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCi0gIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19FT0ZFcnJvcj1weXRob24zMy5QeUV4Y19FT0ZFcnJvciBEQVRBCi0gIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCi0gIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19FeGNlcHRpb24gREFUQQotICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKLSAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zMy5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKLSAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zMy5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKLSAgUHlFeGNfSU9FcnJvcj1weXRob24zMy5QeUV4Y19JT0Vycm9yIERBVEEKLSAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQotICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQotICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGV4RXJyb3IgREFUQQotICBQeUV4Y19LZXlFcnJvcj1weXRob24zMy5QeUV4Y19LZXlFcnJvciBEQVRBCi0gIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjMzLlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKLSAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzMuUHlFeGNfTG9va3VwRXJyb3IgREFUQQotICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQotICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfTmFtZUVycm9yIERBVEEKLSAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zMy5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKLSAgUHlFeGNfT1NFcnJvcj1weXRob24zMy5QeUV4Y19PU0Vycm9yIERBVEEKLSAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zMy5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKLSAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKLSAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjMzLlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCi0gIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKLSAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zMy5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKLSAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzMuUHlFeGNfU3ludGF4RXJyb3IgREFUQQotICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQotICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zMy5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCi0gIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzMuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCi0gIFB5RXhjX1RhYkVycm9yPXB5dGhvbjMzLlB5RXhjX1RhYkVycm9yIERBVEEKLSAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjMzLlB5RXhjX1R5cGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjMzLlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKLSAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVXNlcldhcm5pbmcgREFUQQotICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1ZhbHVlRXJyb3IgREFUQQotICBQeUV4Y19XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1dhcm5pbmcgREFUQQotICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zMy5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCi0gIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldENhdXNlCi0gIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCi0gIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldENhdXNlCi0gIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCi0gIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzMuUHlGaWxlX0Zyb21GZAotICBQeUZpbGVfR2V0TGluZT1weXRob24zMy5QeUZpbGVfR2V0TGluZQotICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzMuUHlGaWxlX1dyaXRlT2JqZWN0Ci0gIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zMy5QeUZpbGVfV3JpdGVTdHJpbmcKLSAgUHlGaWx0ZXJfVHlwZT1weXRob24zMy5QeUZpbHRlcl9UeXBlIERBVEEKLSAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zMy5QeUZsb2F0X0FzRG91YmxlCi0gIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zMy5QeUZsb2F0X0Zyb21Eb3VibGUKLSAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5RmxvYXRfRnJvbVN0cmluZwotICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzMuUHlGbG9hdF9HZXRJbmZvCi0gIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjMzLlB5RmxvYXRfR2V0TWF4Ci0gIFB5RmxvYXRfR2V0TWluPXB5dGhvbjMzLlB5RmxvYXRfR2V0TWluCi0gIFB5RmxvYXRfVHlwZT1weXRob24zMy5QeUZsb2F0X1R5cGUgREFUQQotICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzMuUHlGcm96ZW5TZXRfTmV3Ci0gIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzMuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCi0gIFB5R0NfQ29sbGVjdD1weXRob24zMy5QeUdDX0NvbGxlY3QKLSAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9FbnN1cmUKLSAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKLSAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjMzLlB5R0lMU3RhdGVfUmVsZWFzZQotICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzMuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKLSAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0FkZE1vZHVsZQotICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjMzLlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zMy5QeUltcG9ydF9DbGVhbnVwCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCi0gIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldEltcG9ydGVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljVGFnCi0gIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0Ci0gIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zMy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKLSAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgUHlJdGVyX05leHQ9cHl0aG9uMzMuUHlJdGVyX05leHQKLSAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdEl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zMy5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQotICBQeUxpc3RfQXBwZW5kPXB5dGhvbjMzLlB5TGlzdF9BcHBlbmQKLSAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzMuUHlMaXN0X0FzVHVwbGUKLSAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzMuUHlMaXN0X0dldEl0ZW0KLSAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9HZXRTbGljZQotICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjMzLlB5TGlzdF9JbnNlcnQKLSAgUHlMaXN0X05ldz1weXRob24zMy5QeUxpc3RfTmV3Ci0gIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjMzLlB5TGlzdF9SZXZlcnNlCi0gIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjMzLlB5TGlzdF9TZXRJdGVtCi0gIFB5TGlzdF9TZXRTbGljZT1weXRob24zMy5QeUxpc3RfU2V0U2xpY2UKLSAgUHlMaXN0X1NpemU9cHl0aG9uMzMuUHlMaXN0X1NpemUKLSAgUHlMaXN0X1NvcnQ9cHl0aG9uMzMuUHlMaXN0X1NvcnQKLSAgUHlMaXN0X1R5cGU9cHl0aG9uMzMuUHlMaXN0X1R5cGUgREFUQQotICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zMy5QeUxvbmdfQXNEb3VibGUKLSAgUHlMb25nX0FzTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nCi0gIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0xvbmcKLSAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93Ci0gIFB5TG9uZ19Bc1NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTaXplX3QKLSAgUHlMb25nX0FzU3NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTc2l6ZV90Ci0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzawotICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Bc1ZvaWRQdHIKLSAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzMuUHlMb25nX0Zyb21Eb3VibGUKLSAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZwotICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21TaXplX3QKLSAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3NpemVfdAotICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zMy5QeUxvbmdfRnJvbVN0cmluZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zMy5QeUxvbmdfRnJvbVZvaWRQdHIKLSAgUHlMb25nX0dldEluZm89cHl0aG9uMzMuUHlMb25nX0dldEluZm8KLSAgUHlMb25nX1R5cGU9cHl0aG9uMzMuUHlMb25nX1R5cGUgREFUQQotICBQeU1hcF9UeXBlPXB5dGhvbjMzLlB5TWFwX1R5cGUgREFUQQotICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzMuUHlNYXBwaW5nX0NoZWNrCi0gIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleQotICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjMzLlB5TWFwcGluZ19JdGVtcwotICBQeU1hcHBpbmdfS2V5cz1weXRob24zMy5QeU1hcHBpbmdfS2V5cwotICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjMzLlB5TWFwcGluZ19MZW5ndGgKLSAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzMuUHlNYXBwaW5nX1NpemUKLSAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zMy5QeU1hcHBpbmdfVmFsdWVzCi0gIFB5TWVtX0ZyZWU9cHl0aG9uMzMuUHlNZW1fRnJlZQotICBQeU1lbV9NYWxsb2M9cHl0aG9uMzMuUHlNZW1fTWFsbG9jCi0gIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzMuUHlNZW1fUmVhbGxvYwotICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKLSAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKLSAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQotICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzMuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKLSAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjMzLlB5TW9kdWxlX0FkZE9iamVjdAotICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAotICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjMzLlB5TW9kdWxlX0NyZWF0ZTIKLSAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjMzLlB5TW9kdWxlX0dldERlZgotICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjMzLlB5TW9kdWxlX0dldERpY3QKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWUKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKLSAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXROYW1lCi0gIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjMzLlB5TW9kdWxlX0dldFN0YXRlCi0gIFB5TW9kdWxlX05ldz1weXRob24zMy5QeU1vZHVsZV9OZXcKLSAgUHlNb2R1bGVfVHlwZT1weXRob24zMy5QeU1vZHVsZV9UeXBlIERBVEEKLSAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zMy5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKLSAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzMuUHlOdW1iZXJfQWJzb2x1dGUKLSAgUHlOdW1iZXJfQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0FkZAotICBQeU51bWJlcl9BbmQ9cHl0aG9uMzMuUHlOdW1iZXJfQW5kCi0gIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zMy5QeU51bWJlcl9Bc1NzaXplX3QKLSAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzMuUHlOdW1iZXJfQ2hlY2sKLSAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjMzLlB5TnVtYmVyX0Rpdm1vZAotICBQeU51bWJlcl9GbG9hdD1weXRob24zMy5QeU51bWJlcl9GbG9hdAotICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9GbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBZGQKLSAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlQW5kCi0gIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTHNoaWZ0Ci0gIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKLSAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VPcgotICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCi0gIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgotICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAotICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQotICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VYb3IKLSAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzMuUHlOdW1iZXJfSW5kZXgKLSAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjMzLlB5TnVtYmVyX0ludmVydAotICBQeU51bWJlcl9Mb25nPXB5dGhvbjMzLlB5TnVtYmVyX0xvbmcKLSAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0xzaGlmdAotICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9NdWx0aXBseQotICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zMy5QeU51bWJlcl9OZWdhdGl2ZQotICBQeU51bWJlcl9Pcj1weXRob24zMy5QeU51bWJlcl9PcgotICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zMy5QeU51bWJlcl9Qb3NpdGl2ZQotICBQeU51bWJlcl9Qb3dlcj1weXRob24zMy5QeU51bWJlcl9Qb3dlcgotICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfUmVtYWluZGVyCi0gIFB5TnVtYmVyX1JzaGlmdD1weXRob24zMy5QeU51bWJlcl9Sc2hpZnQKLSAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfU3VidHJhY3QKLSAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjMzLlB5TnVtYmVyX1RvQmFzZQotICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX1RydWVEaXZpZGUKLSAgUHlOdW1iZXJfWG9yPXB5dGhvbjMzLlB5TnVtYmVyX1hvcgotICBQeU9TX0FmdGVyRm9yaz1weXRob24zMy5QeU9TX0FmdGVyRm9yawotICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjMzLlB5T1NfSW5pdEludGVycnVwdHMKLSAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzMuUHlPU19JbnB1dEhvb2sgREFUQQotICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjMzLlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zMy5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKLSAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjMzLlB5T1NfZG91YmxlX3RvX3N0cmluZwotICBQeU9TX2dldHNpZz1weXRob24zMy5QeU9TX2dldHNpZwotICBQeU9TX215c3RyaWNtcD1weXRob24zMy5QeU9TX215c3RyaWNtcAotICBQeU9TX215c3RybmljbXA9cHl0aG9uMzMuUHlPU19teXN0cm5pY21wCi0gIFB5T1Nfc2V0c2lnPXB5dGhvbjMzLlB5T1Nfc2V0c2lnCi0gIFB5T1Nfc25wcmludGY9cHl0aG9uMzMuUHlPU19zbnByaW50ZgotICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzMuUHlPU19zdHJpbmdfdG9fZG91YmxlCi0gIFB5T1Nfc3RydG9sPXB5dGhvbjMzLlB5T1Nfc3RydG9sCi0gIFB5T1Nfc3RydG91bD1weXRob24zMy5QeU9TX3N0cnRvdWwKLSAgUHlPU192c25wcmludGY9cHl0aG9uMzMuUHlPU192c25wcmludGYKLSAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzMuUHlPYmplY3RfQVNDSUkKLSAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgotICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjMzLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKLSAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKLSAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzMuUHlPYmplY3RfQnl0ZXMKLSAgUHlPYmplY3RfQ2FsbD1weXRob24zMy5QeU9iamVjdF9DYWxsCi0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE1ldGhvZAotICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncwotICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxPYmplY3QKLSAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjMzLlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKLSAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtCi0gIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfRGVsSXRlbVN0cmluZwotICBQeU9iamVjdF9EaXI9cHl0aG9uMzMuUHlPYmplY3RfRGlyCi0gIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zMy5QeU9iamVjdF9Gb3JtYXQKLSAgUHlPYmplY3RfRnJlZT1weXRob24zMy5QeU9iamVjdF9GcmVlCi0gIFB5T2JqZWN0X0dDX0RlbD1weXRob24zMy5QeU9iamVjdF9HQ19EZWwKLSAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzMuUHlPYmplY3RfR0NfVHJhY2sKLSAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19VblRyYWNrCi0gIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCi0gIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0cgotICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9HZXRJdGVtCi0gIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzMuUHlPYmplY3RfR2V0SXRlcgotICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHIKLSAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzMuUHlPYmplY3RfSGFzaAotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzMuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCi0gIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzMuUHlPYmplY3RfSW5pdAotICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjMzLlB5T2JqZWN0X0luaXRWYXIKLSAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zMy5QeU9iamVjdF9Jc0luc3RhbmNlCi0gIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzMuUHlPYmplY3RfSXNTdWJjbGFzcwotICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzMuUHlPYmplY3RfSXNUcnVlCi0gIFB5T2JqZWN0X0xlbmd0aD1weXRob24zMy5QeU9iamVjdF9MZW5ndGgKLSAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjMzLlB5T2JqZWN0X01hbGxvYwotICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzMuUHlPYmplY3RfTm90Ci0gIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfUmVhbGxvYwotICBQeU9iamVjdF9SZXByPXB5dGhvbjMzLlB5T2JqZWN0X1JlcHIKLSAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmUKLSAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjMzLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAotICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zMy5QeU9iamVjdF9TZWxmSXRlcgotICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHIKLSAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfU2V0SXRlbQotICBQeU9iamVjdF9TaXplPXB5dGhvbjMzLlB5T2JqZWN0X1NpemUKLSAgUHlPYmplY3RfU3RyPXB5dGhvbjMzLlB5T2JqZWN0X1N0cgotICBQeU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5T2JqZWN0X1R5cGUgREFUQQotICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zMy5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncwotICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKLSAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjMzLlB5UHJvcGVydHlfVHlwZSBEQVRBCi0gIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzMuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5UmFuZ2VfVHlwZT1weXRob24zMy5QeVJhbmdlX1R5cGUgREFUQQotICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzMuUHlSZXZlcnNlZF9UeXBlIERBVEEKLSAgUHlTZXFJdGVyX05ldz1weXRob24zMy5QeVNlcUl0ZXJfTmV3Ci0gIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjMzLlB5U2VxSXRlcl9UeXBlIERBVEEKLSAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zMy5QeVNlcXVlbmNlX0NoZWNrCi0gIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ29uY2F0Ci0gIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db250YWlucwotICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ291bnQKLSAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsSXRlbQotICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjMzLlB5U2VxdWVuY2VfRmFzdAotICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRTbGljZQotICBQeVNlcXVlbmNlX0luPXB5dGhvbjMzLlB5U2VxdWVuY2VfSW4KLSAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAotICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0Ci0gIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbmRleAotICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zMy5QeVNlcXVlbmNlX0xlbmd0aAotICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9MaXN0Ci0gIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjMzLlB5U2VxdWVuY2VfUmVwZWF0Ci0gIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX1NldEl0ZW0KLSAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX1NldFNsaWNlCi0gIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zMy5QeVNlcXVlbmNlX1NpemUKLSAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zMy5QeVNlcXVlbmNlX1R1cGxlCi0gIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjMzLlB5U2V0SXRlcl9UeXBlIERBVEEKLSAgUHlTZXRfQWRkPXB5dGhvbjMzLlB5U2V0X0FkZAotICBQeVNldF9DbGVhcj1weXRob24zMy5QeVNldF9DbGVhcgotICBQeVNldF9Db250YWlucz1weXRob24zMy5QeVNldF9Db250YWlucwotICBQeVNldF9EaXNjYXJkPXB5dGhvbjMzLlB5U2V0X0Rpc2NhcmQKLSAgUHlTZXRfTmV3PXB5dGhvbjMzLlB5U2V0X05ldwotICBQeVNldF9Qb3A9cHl0aG9uMzMuUHlTZXRfUG9wCi0gIFB5U2V0X1NpemU9cHl0aG9uMzMuUHlTZXRfU2l6ZQotICBQeVNldF9UeXBlPXB5dGhvbjMzLlB5U2V0X1R5cGUgREFUQQotICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzCi0gIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjMzLlB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gIFB5U2xpY2VfTmV3PXB5dGhvbjMzLlB5U2xpY2VfTmV3Ci0gIFB5U2xpY2VfVHlwZT1weXRob24zMy5QeVNsaWNlX1R5cGUgREFUQQotICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzMuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKLSAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfRmluZE1vZHVsZQotICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zMy5QeVN0YXRlX0FkZE1vZHVsZQotICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zMy5QeVN0YXRlX1JlbW92ZU1vZHVsZQotICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3Ci0gIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQotICBQeVN1cGVyX1R5cGU9cHl0aG9uMzMuUHlTdXBlcl9UeXBlIERBVEEKLSAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zMy5QeVN5c19BZGRXYXJuT3B0aW9uCi0gIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCi0gIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zMy5QeVN5c19Gb3JtYXRTdGRlcnIKLSAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZG91dAotICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfR2V0T2JqZWN0Ci0gIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjMzLlB5U3lzX0hhc1dhcm5PcHRpb25zCi0gIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucwotICBQeVN5c19TZXRBcmd2PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3YKLSAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3ZFeAotICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfU2V0T2JqZWN0Ci0gIFB5U3lzX1NldFBhdGg9cHl0aG9uMzMuUHlTeXNfU2V0UGF0aAotICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zMy5QeVN5c19Xcml0ZVN0ZGVycgotICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zMy5QeVN5c19Xcml0ZVN0ZG91dAotICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAotICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldAotICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfTmV3Ci0gIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YwotICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9Td2FwCi0gIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfSGVyZQotICBQeVRyYWNlQmFja19QcmludD1weXRob24zMy5QeVRyYWNlQmFja19QcmludAotICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjMzLlB5VHJhY2VCYWNrX1R5cGUgREFUQQotICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjMzLlB5VHVwbGVJdGVyX1R5cGUgREFUQQotICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzMuUHlUdXBsZV9DbGVhckZyZWVMaXN0Ci0gIFB5VHVwbGVfR2V0SXRlbT1weXRob24zMy5QeVR1cGxlX0dldEl0ZW0KLSAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zMy5QeVR1cGxlX0dldFNsaWNlCi0gIFB5VHVwbGVfTmV3PXB5dGhvbjMzLlB5VHVwbGVfTmV3Ci0gIFB5VHVwbGVfUGFjaz1weXRob24zMy5QeVR1cGxlX1BhY2sKLSAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfU2V0SXRlbQotICBQeVR1cGxlX1NpemU9cHl0aG9uMzMuUHlUdXBsZV9TaXplCi0gIFB5VHVwbGVfVHlwZT1weXRob24zMy5QeVR1cGxlX1R5cGUgREFUQQotICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zMy5QeVR5cGVfQ2xlYXJDYWNoZQotICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzMuUHlUeXBlX0Zyb21TcGVjCi0gIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKLSAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zMy5QeVR5cGVfR2VuZXJpY0FsbG9jCi0gIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljTmV3Ci0gIFB5VHlwZV9HZXRGbGFncz1weXRob24zMy5QeVR5cGVfR2V0RmxhZ3MKLSAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zMy5QeVR5cGVfSXNTdWJ0eXBlCi0gIFB5VHlwZV9Nb2RpZmllZD1weXRob24zMy5QeVR5cGVfTW9kaWZpZWQKLSAgUHlUeXBlX1JlYWR5PXB5dGhvbjMzLlB5VHlwZV9SZWFkeQotICBQeVR5cGVfVHlwZT1weXRob24zMy5QeVR5cGVfVHlwZSBEQVRBCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9BcHBlbmQKLSAgUHlVbmljb2RlX0FwcGVuZEFuZERlbD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FwcGVuZEFuZERlbAotICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZwotICBQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkVW5pY29kZQotICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRTdHJpbmcKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVVEYzMlN0cmluZwotICBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1dpZGVDaGFyCi0gIFB5VW5pY29kZV9DbGVhckZyZWVsaXN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ2xlYXJGcmVlbGlzdAotICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvbXBhcmUKLSAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvbmNhdAotICBQeVVuaWNvZGVfQ29udGFpbnM9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db250YWlucwotICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db3VudAotICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlCi0gIFB5VW5pY29kZV9EZWNvZGVBU0NJST1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUFTQ0lJCi0gIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlQ2hhcm1hcAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0Ci0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQotICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xCi0gIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlUmF3VW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTY9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzIKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9GU0NvbnZlcnRlcgotICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRlNEZWNvZGVyCi0gIFB5VW5pY29kZV9GaW5kPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRmluZAotICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRm9ybWF0Ci0gIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0VgotICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QKLSAgUHlVbmljb2RlX0Zyb21PcmRpbmFsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmdBbmRTaXplCi0gIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tV2lkZUNoYXIKLSAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0dldFNpemUKLSAgUHlVbmljb2RlX0lzSWRlbnRpZmllcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0lzSWRlbnRpZmllcgotICBQeVVuaWNvZGVfSm9pbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0pvaW4KLSAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1BhcnRpdGlvbgotICBQeVVuaWNvZGVfUlBhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JQYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JTcGxpdAotICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JlcGxhY2UKLSAgUHlVbmljb2RlX1Jlc2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1Jlc2l6ZQotICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SaWNoQ29tcGFyZQotICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfU2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9TcGxpdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1NwbGl0Ci0gIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfU3BsaXRsaW5lcwotICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfVGFpbG1hdGNoCi0gIFB5VW5pY29kZV9UcmFuc2xhdGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUKLSAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzMuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKLSAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjcKLSAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCi0gIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZwotICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCi0gIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi0gIFB5VW5pY29kZV9UeXBlPXB5dGhvbjMzLlB5VW5pY29kZV9UeXBlIERBVEEKLSAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zMy5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKLSAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdQcm94eQotICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdSZWYKLSAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zMy5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlXcmFwcGVyX05ldz1weXRob24zMy5QeVdyYXBwZXJfTmV3Ci0gIFB5WmlwX1R5cGU9cHl0aG9uMzMuUHlaaXBfVHlwZSBEQVRBCi0gIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjMzLlB5X0FkZFBlbmRpbmdDYWxsCi0gIFB5X0F0RXhpdD1weXRob24zMy5QeV9BdEV4aXQKLSAgUHlfQnVpbGRWYWx1ZT1weXRob24zMy5QeV9CdWlsZFZhbHVlCi0gIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzMuUHlfQ29tcGlsZVN0cmluZwotICBQeV9EZWNSZWY9cHl0aG9uMzMuUHlfRGVjUmVmCi0gIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjMzLlB5X0VuZEludGVycHJldGVyCi0gIFB5X0V4aXQ9cHl0aG9uMzMuUHlfRXhpdAotICBQeV9GYXRhbEVycm9yPXB5dGhvbjMzLlB5X0ZhdGFsRXJyb3IKLSAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfRmluYWxpemU9cHl0aG9uMzMuUHlfRmluYWxpemUKLSAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjMzLlB5X0dldEJ1aWxkSW5mbwotICBQeV9HZXRDb21waWxlcj1weXRob24zMy5QeV9HZXRDb21waWxlcgotICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzMuUHlfR2V0Q29weXJpZ2h0Ci0gIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzMuUHlfR2V0RXhlY1ByZWZpeAotICBQeV9HZXRQYXRoPXB5dGhvbjMzLlB5X0dldFBhdGgKLSAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzMuUHlfR2V0UGxhdGZvcm0KLSAgUHlfR2V0UHJlZml4PXB5dGhvbjMzLlB5X0dldFByZWZpeAotICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzMuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X0dldFByb2dyYW1OYW1lCi0gIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfR2V0UHl0aG9uSG9tZQotICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9HZXRSZWN1cnNpb25MaW1pdAotICBQeV9HZXRWZXJzaW9uPXB5dGhvbjMzLlB5X0dldFZlcnNpb24KLSAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfSW5jUmVmPXB5dGhvbjMzLlB5X0luY1JlZgotICBQeV9Jbml0aWFsaXplPXB5dGhvbjMzLlB5X0luaXRpYWxpemUKLSAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjMzLlB5X0luaXRpYWxpemVFeAotICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjMzLlB5X0lzSW5pdGlhbGl6ZWQKLSAgUHlfTWFpbj1weXRob24zMy5QeV9NYWluCi0gIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzMuUHlfTWFrZVBlbmRpbmdDYWxscwotICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zMy5QeV9OZXdJbnRlcnByZXRlcgotICBQeV9SZXByRW50ZXI9cHl0aG9uMzMuUHlfUmVwckVudGVyCi0gIFB5X1JlcHJMZWF2ZT1weXRob24zMy5QeV9SZXByTGVhdmUKLSAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzMuUHlfU2V0UHJvZ3JhbU5hbWUKLSAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zMy5QeV9TZXRQeXRob25Ib21lCi0gIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLlB5X1NldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjMzLlB5X1N5bXRhYmxlU3RyaW5nCi0gIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zMy5QeV9WYUJ1aWxkVmFsdWUKLSAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAotICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zMy5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19NYWxsb2MKLSAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zMy5fUHlPYmplY3RfR0NfTmV3Ci0gIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ld1ZhcgotICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19SZXNpemUKLSAgX1B5T2JqZWN0X05ldz1weXRob24zMy5fUHlPYmplY3RfTmV3Ci0gIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X05ld1ZhcgotICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzMuX1B5U3RhdGVfQWRkTW9kdWxlCi0gIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfSW5pdAotICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zMy5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKLSAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQotICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zMy5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAotICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjMzLl9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLSAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zMy5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQotICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKLSAgX1B5X0RlYWxsb2M9cHl0aG9uMzMuX1B5X0RlYWxsb2MKLSAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjMzLl9QeV9FbGxpcHNpc09iamVjdCBEQVRBCi0gIF9QeV9GYWxzZVN0cnVjdD1weXRob24zMy5fUHlfRmFsc2VTdHJ1Y3QgREFUQQotICBfUHlfTm9uZVN0cnVjdD1weXRob24zMy5fUHlfTm9uZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zMy5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQotICBfUHlfU3dhcHBlZE9wPXB5dGhvbjMzLl9QeV9Td2FwcGVkT3AgREFUQQotICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zMy5fUHlfVHJ1ZVN0cnVjdCBEQVRBCi0gIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zMy5fUHlBcmdfVmFQYXJzZV9TaXplVAotICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCisgIFB5QXJnX1BhcnNlPXB5dGhvbjM0LlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM0LlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzQuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM0LlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zNC5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM0LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjM0LlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzQuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zNC5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3CisgIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ld0V4CisgIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzQuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCisgIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM0LlB5Q2FsbEl0ZXJfTmV3CisgIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNC5QeUNhbGxJdGVyX1R5cGUgREFUQQorICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM0LlB5Q2FsbGFibGVfQ2hlY2sKKyAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX0dldENvbnRleHQKKyAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX0dldE5hbWUKKyAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNC5QeUNhcHN1bGVfSW1wb3J0CisgIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM0LlB5Q2Fwc3VsZV9Jc1ZhbGlkCisgIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzQuUHlDYXBzdWxlX05ldworICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfU2V0Q29udGV4dAorICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfU2V0TmFtZQorICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfU2V0UG9pbnRlcgorICBQeUNhcHN1bGVfVHlwZT1weXRob24zNC5QeUNhcHN1bGVfVHlwZSBEQVRBCisgIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworICBQeUNvZGVjX0RlY29kZT1weXRob24zNC5QeUNvZGVjX0RlY29kZQorICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGVyCisgIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlCisgIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0VuY29kZXIKKyAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19JZ25vcmVFcnJvcnMKKyAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKKyAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKKyAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM0LlB5Q29kZWNfS25vd25FbmNvZGluZworICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5Q29kZWNfTG9va3VwRXJyb3IKKyAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyCisgIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKKyAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfUmVwbGFjZUVycm9ycworICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVJlYWRlcgorICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVdyaXRlcgorICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNC5QeUNvZGVjX1N0cmljdEVycm9ycworICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKKyAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM0LlB5Q29tcGxleF9Gcm9tRG91YmxlcworICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKKyAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCisgIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM0LlB5Q29tcGxleF9UeXBlIERBVEEKKyAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld0NsYXNzTWV0aG9kCisgIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM0LlB5RGVzY3JfTmV3R2V0U2V0CisgIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWVtYmVyCisgIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWV0aG9kCisgIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNC5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQorICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNC5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCisgIFB5RGljdEtleXNfVHlwZT1weXRob24zNC5QeURpY3RLZXlzX1R5cGUgREFUQQorICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzQuUHlEaWN0UHJveHlfTmV3CisgIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzQuUHlEaWN0UHJveHlfVHlwZSBEQVRBCisgIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM0LlB5RGljdFZhbHVlc19UeXBlIERBVEEKKyAgUHlEaWN0X0NsZWFyPXB5dGhvbjM0LlB5RGljdF9DbGVhcgorICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzQuUHlEaWN0X0NvbnRhaW5zCisgIFB5RGljdF9Db3B5PXB5dGhvbjM0LlB5RGljdF9Db3B5CisgIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtCisgIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtCisgIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCisgIFB5RGljdF9JdGVtcz1weXRob24zNC5QeURpY3RfSXRlbXMKKyAgUHlEaWN0X0tleXM9cHl0aG9uMzQuUHlEaWN0X0tleXMKKyAgUHlEaWN0X01lcmdlPXB5dGhvbjM0LlB5RGljdF9NZXJnZQorICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNC5QeURpY3RfTWVyZ2VGcm9tU2VxMgorICBQeURpY3RfTmV3PXB5dGhvbjM0LlB5RGljdF9OZXcKKyAgUHlEaWN0X05leHQ9cHl0aG9uMzQuUHlEaWN0X05leHQKKyAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW0KKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X1NpemU9cHl0aG9uMzQuUHlEaWN0X1NpemUKKyAgUHlEaWN0X1R5cGU9cHl0aG9uMzQuUHlEaWN0X1R5cGUgREFUQQorICBQeURpY3RfVXBkYXRlPXB5dGhvbjM0LlB5RGljdF9VcGRhdGUKKyAgUHlEaWN0X1ZhbHVlcz1weXRob24zNC5QeURpY3RfVmFsdWVzCisgIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNC5QeUVsbGlwc2lzX1R5cGUgREFUQQorICBQeUVudW1fVHlwZT1weXRob24zNC5QeUVudW1fVHlwZSBEQVRBCisgIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM0LlB5RXJyX0JhZEFyZ3VtZW50CisgIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM0LlB5RXJyX0NoZWNrU2lnbmFscworICBQeUVycl9DbGVhcj1weXRob24zNC5QeUVycl9DbGVhcgorICBQeUVycl9EaXNwbGF5PXB5dGhvbjM0LlB5RXJyX0Rpc3BsYXkKKyAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX0ZldGNoPXB5dGhvbjM0LlB5RXJyX0ZldGNoCisgIFB5RXJyX0Zvcm1hdD1weXRob24zNC5QeUVycl9Gb3JtYXQKKyAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uCisgIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYworICBQeUVycl9Ob01lbW9yeT1weXRob24zNC5QeUVycl9Ob01lbW9yeQorICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCisgIFB5RXJyX09jY3VycmVkPXB5dGhvbjM0LlB5RXJyX09jY3VycmVkCisgIFB5RXJyX1ByaW50PXB5dGhvbjM0LlB5RXJyX1ByaW50CisgIFB5RXJyX1ByaW50RXg9cHl0aG9uMzQuUHlFcnJfUHJpbnRFeAorICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zNC5QeUVycl9Qcm9ncmFtVGV4dAorICBQeUVycl9SZXN0b3JlPXB5dGhvbjM0LlB5RXJyX1Jlc3RvcmUKKyAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJubworICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCisgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKKyAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjM0LlB5RXJyX1NldEludGVycnVwdAorICBQeUVycl9TZXROb25lPXB5dGhvbjM0LlB5RXJyX1NldE5vbmUKKyAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldE9iamVjdAorICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzQuUHlFcnJfU2V0U3RyaW5nCisgIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjM0LlB5RXJyX1N5bnRheExvY2F0aW9uCisgIFB5RXJyX1dhcm5FeD1weXRob24zNC5QeUVycl9XYXJuRXgKKyAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjM0LlB5RXJyX1dhcm5FeHBsaWNpdAorICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjM0LlB5RXJyX1dhcm5Gb3JtYXQKKyAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjM0LlB5RXJyX1dyaXRlVW5yYWlzYWJsZQorICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVMb2NrCisgIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlVGhyZWFkCisgIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlFdmFsX0NhbGxGdW5jdGlvbgorICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zNC5QeUV2YWxfQ2FsbE1ldGhvZAorICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zNC5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcworICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlCisgIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZUV4CisgIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZQorICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZUV4CisgIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zNC5QeUV2YWxfR2V0QnVpbHRpbnMKKyAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zNC5QeUV2YWxfR2V0Q2FsbFN0YXRzCisgIFB5RXZhbF9HZXRGcmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnJhbWUKKyAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jRGVzYworICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNOYW1lCisgIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRHbG9iYWxzCisgIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzQuUHlFdmFsX0dldExvY2FscworICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX0luaXRUaHJlYWRzCisgIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9SZUluaXRUaHJlYWRzCisgIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zNC5QeUV2YWxfUmVsZWFzZUxvY2sKKyAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VUaHJlYWQKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKKyAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1NhdmVUaHJlYWQKKyAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zNC5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCisgIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zNC5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQorICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zNC5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCisgIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKKyAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKKyAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzQuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQorICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKKyAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCisgIFB5RXhjX0VPRkVycm9yPXB5dGhvbjM0LlB5RXhjX0VPRkVycm9yIERBVEEKKyAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zNC5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKKyAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0V4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zNC5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQorICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQorICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjM0LlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQorICBQeUV4Y19JT0Vycm9yPXB5dGhvbjM0LlB5RXhjX0lPRXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zNC5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCisgIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCisgIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCisgIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZXhFcnJvciBEQVRBCisgIFB5RXhjX0tleUVycm9yPXB5dGhvbjM0LlB5RXhjX0tleUVycm9yIERBVEEKKyAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQorICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zNC5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9yIERBVEEKKyAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCisgIFB5RXhjX05hbWVFcnJvcj1weXRob24zNC5QeUV4Y19OYW1lRXJyb3IgREFUQQorICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjM0LlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQorICBQeUV4Y19PU0Vycm9yPXB5dGhvbjM0LlB5RXhjX09TRXJyb3IgREFUQQorICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjM0LlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQorICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKKyAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzQuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQorICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfUnVudGltZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQorICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjM0LlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQorICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zNC5QeUV4Y19TeW50YXhFcnJvciBEQVRBCisgIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCisgIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjM0LlB5RXhjX1N5c3RlbUVycm9yIERBVEEKKyAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zNC5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKKyAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzQuUHlFeGNfVGFiRXJyb3IgREFUQQorICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVHlwZUVycm9yIERBVEEKKyAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQorICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zNC5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCisgIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVmFsdWVFcnJvciBEQVRBCisgIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfV2FybmluZyBEQVRBCisgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjM0LlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKKyAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKKyAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKKyAgUHlGaWxlX0Zyb21GZD1weXRob24zNC5QeUZpbGVfRnJvbUZkCisgIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjM0LlB5RmlsZV9HZXRMaW5lCisgIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zNC5QeUZpbGVfV3JpdGVPYmplY3QKKyAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjM0LlB5RmlsZV9Xcml0ZVN0cmluZworICBQeUZpbHRlcl9UeXBlPXB5dGhvbjM0LlB5RmlsdGVyX1R5cGUgREFUQQorICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfQXNEb3VibGUKKyAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfRnJvbURvdWJsZQorICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tU3RyaW5nCisgIFB5RmxvYXRfR2V0SW5mbz1weXRob24zNC5QeUZsb2F0X0dldEluZm8KKyAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzQuUHlGbG9hdF9HZXRNYXgKKyAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzQuUHlGbG9hdF9HZXRNaW4KKyAgUHlGbG9hdF9UeXBlPXB5dGhvbjM0LlB5RmxvYXRfVHlwZSBEQVRBCisgIFB5RnJvemVuU2V0X05ldz1weXRob24zNC5QeUZyb3plblNldF9OZXcKKyAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zNC5QeUZyb3plblNldF9UeXBlIERBVEEKKyAgUHlHQ19Db2xsZWN0PXB5dGhvbjM0LlB5R0NfQ29sbGVjdAorICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zNC5QeUdJTFN0YXRlX0Vuc3VyZQorICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zNC5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQorICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzQuUHlHSUxTdGF0ZV9SZWxlYXNlCisgIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zNC5QeUdldFNldERlc2NyX1R5cGUgREFUQQorICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfQWRkTW9kdWxlCisgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzQuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgorICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjM0LlB5SW1wb3J0X0NsZWFudXAKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4CisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKKyAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNUYWcKKyAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zNC5QeUltcG9ydF9HZXRNb2R1bGVEaWN0CisgIFB5SW1wb3J0X0ltcG9ydD1weXRob24zNC5QeUltcG9ydF9JbXBvcnQKKyAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaworICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKKyAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX05ldworICBQeUl0ZXJfTmV4dD1weXRob24zNC5QeUl0ZXJfTmV4dAorICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0SXRlcl9UeXBlIERBVEEKKyAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzQuUHlMaXN0X0FwcGVuZAorICBQeUxpc3RfQXNUdXBsZT1weXRob24zNC5QeUxpc3RfQXNUdXBsZQorICBQeUxpc3RfR2V0SXRlbT1weXRob24zNC5QeUxpc3RfR2V0SXRlbQorICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X0dldFNsaWNlCisgIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzQuUHlMaXN0X0luc2VydAorICBQeUxpc3RfTmV3PXB5dGhvbjM0LlB5TGlzdF9OZXcKKyAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzQuUHlMaXN0X1JldmVyc2UKKyAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzQuUHlMaXN0X1NldEl0ZW0KKyAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9TZXRTbGljZQorICBQeUxpc3RfU2l6ZT1weXRob24zNC5QeUxpc3RfU2l6ZQorICBQeUxpc3RfU29ydD1weXRob24zNC5QeUxpc3RfU29ydAorICBQeUxpc3RfVHlwZT1weXRob24zNC5QeUxpc3RfVHlwZSBEQVRBCisgIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Bc0RvdWJsZQorICBQeUxvbmdfQXNMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmcKKyAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdworICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZworICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NpemVfdAorICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NzaXplX3QKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCisgIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0FzVm9pZFB0cgorICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zNC5QeUxvbmdfRnJvbURvdWJsZQorICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nCisgIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nTG9uZworICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNpemVfdAorICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21Tc2l6ZV90CisgIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3RyaW5nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVm9pZFB0cgorICBQeUxvbmdfR2V0SW5mbz1weXRob24zNC5QeUxvbmdfR2V0SW5mbworICBQeUxvbmdfVHlwZT1weXRob24zNC5QeUxvbmdfVHlwZSBEQVRBCisgIFB5TWFwX1R5cGU9cHl0aG9uMzQuUHlNYXBfVHlwZSBEQVRBCisgIFB5TWFwcGluZ19DaGVjaz1weXRob24zNC5QeU1hcHBpbmdfQ2hlY2sKKyAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5CisgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleVN0cmluZworICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzQuUHlNYXBwaW5nX0l0ZW1zCisgIFB5TWFwcGluZ19LZXlzPXB5dGhvbjM0LlB5TWFwcGluZ19LZXlzCisgIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzQuUHlNYXBwaW5nX0xlbmd0aAorICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZworICBQeU1hcHBpbmdfU2l6ZT1weXRob24zNC5QeU1hcHBpbmdfU2l6ZQorICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjM0LlB5TWFwcGluZ19WYWx1ZXMKKyAgUHlNZW1fRnJlZT1weXRob24zNC5QeU1lbV9GcmVlCisgIFB5TWVtX01hbGxvYz1weXRob24zNC5QeU1lbV9NYWxsb2MKKyAgUHlNZW1fUmVhbGxvYz1weXRob24zNC5QeU1lbV9SZWFsbG9jCisgIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zNC5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQorICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zNC5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAorICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zNC5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cworICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zNC5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCisgIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQorICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAorICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfQWRkT2JqZWN0CisgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50CisgIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzQuUHlNb2R1bGVfQ3JlYXRlMgorICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGVmCisgIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGljdAorICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZQorICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAorICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldE5hbWUKKyAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0U3RhdGUKKyAgUHlNb2R1bGVfTmV3PXB5dGhvbjM0LlB5TW9kdWxlX05ldworICBQeU1vZHVsZV9UeXBlPXB5dGhvbjM0LlB5TW9kdWxlX1R5cGUgREFUQQorICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjM0LlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQorICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zNC5QeU51bWJlcl9BYnNvbHV0ZQorICBQeU51bWJlcl9BZGQ9cHl0aG9uMzQuUHlOdW1iZXJfQWRkCisgIFB5TnVtYmVyX0FuZD1weXRob24zNC5QeU51bWJlcl9BbmQKKyAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TnVtYmVyX0FzU3NpemVfdAorICBQeU51bWJlcl9DaGVjaz1weXRob24zNC5QeU51bWJlcl9DaGVjaworICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzQuUHlOdW1iZXJfRGl2bW9kCisgIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjM0LlB5TnVtYmVyX0Zsb2F0CisgIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0Zsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFkZAorICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBbmQKKyAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQorICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU9yCisgIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUG93ZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCisgIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAorICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0CisgIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVhvcgorICBQeU51bWJlcl9JbmRleD1weXRob24zNC5QeU51bWJlcl9JbmRleAorICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW52ZXJ0CisgIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzQuUHlOdW1iZXJfTG9uZworICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfTHNoaWZ0CisgIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX011bHRpcGx5CisgIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX05lZ2F0aXZlCisgIFB5TnVtYmVyX09yPXB5dGhvbjM0LlB5TnVtYmVyX09yCisgIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX1Bvc2l0aXZlCisgIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX1Bvd2VyCisgIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9SZW1haW5kZXIKKyAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX1JzaGlmdAorICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9TdWJ0cmFjdAorICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzQuUHlOdW1iZXJfVG9CYXNlCisgIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfVHJ1ZURpdmlkZQorICBQeU51bWJlcl9Yb3I9cHl0aG9uMzQuUHlOdW1iZXJfWG9yCisgIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjM0LlB5T1NfQWZ0ZXJGb3JrCisgIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzQuUHlPU19Jbml0SW50ZXJydXB0cworICBQeU9TX0lucHV0SG9vaz1weXRob24zNC5QeU9TX0lucHV0SG9vayBEQVRBCisgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzQuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAorICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjM0LlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQorICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzQuUHlPU19kb3VibGVfdG9fc3RyaW5nCisgIFB5T1NfZ2V0c2lnPXB5dGhvbjM0LlB5T1NfZ2V0c2lnCisgIFB5T1NfbXlzdHJpY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJpY21wCisgIFB5T1NfbXlzdHJuaWNtcD1weXRob24zNC5QeU9TX215c3RybmljbXAKKyAgUHlPU19zZXRzaWc9cHl0aG9uMzQuUHlPU19zZXRzaWcKKyAgUHlPU19zbnByaW50Zj1weXRob24zNC5QeU9TX3NucHJpbnRmCisgIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zNC5QeU9TX3N0cmluZ190b19kb3VibGUKKyAgUHlPU19zdHJ0b2w9cHl0aG9uMzQuUHlPU19zdHJ0b2wKKyAgUHlPU19zdHJ0b3VsPXB5dGhvbjM0LlB5T1Nfc3RydG91bAorICBQeU9TX3ZzbnByaW50Zj1weXRob24zNC5QeU9TX3ZzbnByaW50ZgorICBQeU9iamVjdF9BU0NJST1weXRob24zNC5QeU9iamVjdF9BU0NJSQorICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNDaGFyQnVmZmVyCisgIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzQuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgorICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgorICBQeU9iamVjdF9CeXRlcz1weXRob24zNC5QeU9iamVjdF9CeXRlcworICBQeU9iamVjdF9DYWxsPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGwKKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbgorICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kCisgIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE9iamVjdAorICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzQuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcworICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW0KKyAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCisgIFB5T2JqZWN0X0Rpcj1weXRob24zNC5QeU9iamVjdF9EaXIKKyAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjM0LlB5T2JqZWN0X0Zvcm1hdAorICBQeU9iamVjdF9GcmVlPXB5dGhvbjM0LlB5T2JqZWN0X0ZyZWUKKyAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjM0LlB5T2JqZWN0X0dDX0RlbAorICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19UcmFjaworICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1VuVHJhY2sKKyAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKKyAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0clN0cmluZworICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZW0KKyAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zNC5QeU9iamVjdF9HZXRJdGVyCisgIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0cgorICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKKyAgUHlPYmplY3RfSGFzaD1weXRob24zNC5QeU9iamVjdF9IYXNoCisgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zNC5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKKyAgUHlPYmplY3RfSW5pdD1weXRob24zNC5QeU9iamVjdF9Jbml0CisgIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzQuUHlPYmplY3RfSW5pdFZhcgorICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjM0LlB5T2JqZWN0X0lzSW5zdGFuY2UKKyAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zNC5QeU9iamVjdF9Jc1N1YmNsYXNzCisgIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zNC5QeU9iamVjdF9Jc1RydWUKKyAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjM0LlB5T2JqZWN0X0xlbmd0aAorICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfTWFsbG9jCisgIFB5T2JqZWN0X05vdD1weXRob24zNC5QeU9iamVjdF9Ob3QKKyAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zNC5QeU9iamVjdF9SZWFsbG9jCisgIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzQuUHlPYmplY3RfUmVwcgorICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZQorICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCisgIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X1NlbGZJdGVyCisgIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0cgorICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9TZXRJdGVtCisgIFB5T2JqZWN0X1NpemU9cHl0aG9uMzQuUHlPYmplY3RfU2l6ZQorICBQeU9iamVjdF9TdHI9cHl0aG9uMzQuUHlPYmplY3RfU3RyCisgIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlPYmplY3RfVHlwZSBEQVRBCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncworICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzQuUHlQcm9wZXJ0eV9UeXBlIERBVEEKKyAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeVJhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlSYW5nZV9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VfVHlwZSBEQVRBCisgIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zNC5QeVJldmVyc2VkX1R5cGUgREFUQQorICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjM0LlB5U2VxSXRlcl9OZXcKKyAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXFJdGVyX1R5cGUgREFUQQorICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ2hlY2sKKyAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db25jYXQKKyAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zNC5QeVNlcXVlbmNlX0NvbnRhaW5zCisgIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db3VudAorICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxJdGVtCisgIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxTbGljZQorICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9GYXN0CisgIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0dldFNsaWNlCisgIFB5U2VxdWVuY2VfSW49cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbgorICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0CisgIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKKyAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zNC5QeVNlcXVlbmNlX0luZGV4CisgIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjM0LlB5U2VxdWVuY2VfTGVuZ3RoCisgIFB5U2VxdWVuY2VfTGlzdD1weXRob24zNC5QeVNlcXVlbmNlX0xpc3QKKyAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9SZXBlYXQKKyAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0SXRlbQorICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0U2xpY2UKKyAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2l6ZQorICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjM0LlB5U2VxdWVuY2VfVHVwbGUKKyAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXRJdGVyX1R5cGUgREFUQQorICBQeVNldF9BZGQ9cHl0aG9uMzQuUHlTZXRfQWRkCisgIFB5U2V0X0NsZWFyPXB5dGhvbjM0LlB5U2V0X0NsZWFyCisgIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjM0LlB5U2V0X0NvbnRhaW5zCisgIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzQuUHlTZXRfRGlzY2FyZAorICBQeVNldF9OZXc9cHl0aG9uMzQuUHlTZXRfTmV3CisgIFB5U2V0X1BvcD1weXRob24zNC5QeVNldF9Qb3AKKyAgUHlTZXRfU2l6ZT1weXRob24zNC5QeVNldF9TaXplCisgIFB5U2V0X1R5cGU9cHl0aG9uMzQuUHlTZXRfVHlwZSBEQVRBCisgIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXMKKyAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzRXgKKyAgUHlTbGljZV9OZXc9cHl0aG9uMzQuUHlTbGljZV9OZXcKKyAgUHlTbGljZV9UeXBlPXB5dGhvbjM0LlB5U2xpY2VfVHlwZSBEQVRBCisgIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zNC5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQorICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9GaW5kTW9kdWxlCisgIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfQWRkTW9kdWxlCisgIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfUmVtb3ZlTW9kdWxlCisgIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQorICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCisgIFB5U3VwZXJfVHlwZT1weXRob24zNC5QeVN1cGVyX1R5cGUgREFUQQorICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb24KKyAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKKyAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZGVycgorICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3Rkb3V0CisgIFB5U3lzX0dldE9iamVjdD1weXRob24zNC5QeVN5c19HZXRPYmplY3QKKyAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfSGFzV2Fybk9wdGlvbnMKKyAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19SZXNldFdhcm5PcHRpb25zCisgIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzQuUHlTeXNfU2V0QXJndgorICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzQuUHlTeXNfU2V0QXJndkV4CisgIFB5U3lzX1NldE9iamVjdD1weXRob24zNC5QeVN5c19TZXRPYmplY3QKKyAgUHlTeXNfU2V0UGF0aD1weXRob24zNC5QeVN5c19TZXRQYXRoCisgIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjM0LlB5U3lzX1dyaXRlU3RkZXJyCisgIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjM0LlB5U3lzX1dyaXRlU3Rkb3V0CisgIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9DbGVhcgorICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZQorICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50CisgIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0CisgIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldERpY3QKKyAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9OZXcKKyAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zNC5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCisgIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zNC5QeVRocmVhZFN0YXRlX1N3YXAKKyAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zNC5QeVRyYWNlQmFja19IZXJlCisgIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjM0LlB5VHJhY2VCYWNrX1ByaW50CisgIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCisgIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCisgIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKKyAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfR2V0SXRlbQorICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjM0LlB5VHVwbGVfR2V0U2xpY2UKKyAgUHlUdXBsZV9OZXc9cHl0aG9uMzQuUHlUdXBsZV9OZXcKKyAgUHlUdXBsZV9QYWNrPXB5dGhvbjM0LlB5VHVwbGVfUGFjaworICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9TZXRJdGVtCisgIFB5VHVwbGVfU2l6ZT1weXRob24zNC5QeVR1cGxlX1NpemUKKyAgUHlUdXBsZV9UeXBlPXB5dGhvbjM0LlB5VHVwbGVfVHlwZSBEQVRBCisgIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjM0LlB5VHlwZV9DbGVhckNhY2hlCisgIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWMKKyAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcworICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljQWxsb2MKKyAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNOZXcKKyAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjM0LlB5VHlwZV9HZXRGbGFncworICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjM0LlB5VHlwZV9Jc1N1YnR5cGUKKyAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjM0LlB5VHlwZV9Nb2RpZmllZAorICBQeVR5cGVfUmVhZHk9cHl0aG9uMzQuUHlUeXBlX1JlYWR5CisgIFB5VHlwZV9UeXBlPXB5dGhvbjM0LlB5VHlwZV9UeXBlIERBVEEKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zNC5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FwcGVuZAorICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXBwZW5kQW5kRGVsCisgIFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZworICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNDaGFybWFwU3RyaW5nCisgIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRGVjb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZworICBQeVVuaWNvZGVfQXNFbmNvZGVkVW5pY29kZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNMYXRpbjFTdHJpbmcKKyAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNVVEYxNlN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVVRGMTZTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VURjMyU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmcKKyAgUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzV2lkZUNoYXIKKyAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9DbGVhckZyZWVsaXN0CisgIFB5VW5pY29kZV9Db21wYXJlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ29tcGFyZQorICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ29uY2F0CisgIFB5VW5pY29kZV9Db250YWlucz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvbnRhaW5zCisgIFB5VW5pY29kZV9Db3VudD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvdW50CisgIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGUKKyAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlQVNDSUkKKyAgUHlVbmljb2RlX0RlY29kZUNoYXJtYXA9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVDaGFybWFwCisgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHRBbmRTaXplCisgIFB5VW5pY29kZV9EZWNvZGVMYXRpbjE9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVMYXRpbjEKKyAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2CisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyU3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjg9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4CisgIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9GU0NvbnZlcnRlcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0ZTQ29udmVydGVyCisgIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9GU0RlY29kZXIKKyAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9GaW5kCisgIFB5VW5pY29kZV9Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbUVuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXRWCisgIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbU9iamVjdAorICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbAorICBQeVVuaWNvZGVfRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmcKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21XaWRlQ2hhcgorICBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfR2V0RGVmYXVsdEVuY29kaW5nCisgIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfR2V0U2l6ZQorICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfSXNJZGVudGlmaWVyCisgIFB5VW5pY29kZV9Kb2luPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfSm9pbgorICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUGFydGl0aW9uCisgIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUlBhcnRpdGlvbgorICBQeVVuaWNvZGVfUlNwbGl0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUlNwbGl0CisgIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUmVwbGFjZQorICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUmVzaXplCisgIFB5VW5pY29kZV9SaWNoQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1JpY2hDb21wYXJlCisgIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9TZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfU3BsaXQKKyAgUHlVbmljb2RlX1NwbGl0bGluZXM9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9TcGxpdGxpbmVzCisgIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9UYWlsbWF0Y2gKKyAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZQorICBQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcD1weXRob24zNC5QeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcAorICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZworICBQeVVuaWNvZGVfRGVjb2RlVVRGNz1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGNworICBQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwKKyAgUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdD1weXRob24zNC5QeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0CisgIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbD1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWwKKyAgUHlVbmljb2RlX0ludGVybkluUGxhY2U9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkluUGxhY2UKKyAgUHlVbmljb2RlX1R5cGU9cHl0aG9uMzQuUHlVbmljb2RlX1R5cGUgREFUQQorICBQeVdlYWtyZWZfR2V0T2JqZWN0PXB5dGhvbjM0LlB5V2Vha3JlZl9HZXRPYmplY3QgREFUQQorICBQeVdlYWtyZWZfTmV3UHJveHk9cHl0aG9uMzQuUHlXZWFrcmVmX05ld1Byb3h5CisgIFB5V2Vha3JlZl9OZXdSZWY9cHl0aG9uMzQuUHlXZWFrcmVmX05ld1JlZgorICBQeVdyYXBwZXJEZXNjcl9UeXBlPXB5dGhvbjM0LlB5V3JhcHBlckRlc2NyX1R5cGUgREFUQQorICBQeVdyYXBwZXJfTmV3PXB5dGhvbjM0LlB5V3JhcHBlcl9OZXcKKyAgUHlaaXBfVHlwZT1weXRob24zNC5QeVppcF9UeXBlIERBVEEKKyAgUHlfQWRkUGVuZGluZ0NhbGw9cHl0aG9uMzQuUHlfQWRkUGVuZGluZ0NhbGwKKyAgUHlfQXRFeGl0PXB5dGhvbjM0LlB5X0F0RXhpdAorICBQeV9CdWlsZFZhbHVlPXB5dGhvbjM0LlB5X0J1aWxkVmFsdWUKKyAgUHlfQ29tcGlsZVN0cmluZz1weXRob24zNC5QeV9Db21waWxlU3RyaW5nCisgIFB5X0RlY1JlZj1weXRob24zNC5QeV9EZWNSZWYKKyAgUHlfRW5kSW50ZXJwcmV0ZXI9cHl0aG9uMzQuUHlfRW5kSW50ZXJwcmV0ZXIKKyAgUHlfRXhpdD1weXRob24zNC5QeV9FeGl0CisgIFB5X0ZhdGFsRXJyb3I9cHl0aG9uMzQuUHlfRmF0YWxFcnJvcgorICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQorICBQeV9GaW5hbGl6ZT1weXRob24zNC5QeV9GaW5hbGl6ZQorICBQeV9HZXRCdWlsZEluZm89cHl0aG9uMzQuUHlfR2V0QnVpbGRJbmZvCisgIFB5X0dldENvbXBpbGVyPXB5dGhvbjM0LlB5X0dldENvbXBpbGVyCisgIFB5X0dldENvcHlyaWdodD1weXRob24zNC5QeV9HZXRDb3B5cmlnaHQKKyAgUHlfR2V0RXhlY1ByZWZpeD1weXRob24zNC5QeV9HZXRFeGVjUHJlZml4CisgIFB5X0dldFBhdGg9cHl0aG9uMzQuUHlfR2V0UGF0aAorICBQeV9HZXRQbGF0Zm9ybT1weXRob24zNC5QeV9HZXRQbGF0Zm9ybQorICBQeV9HZXRQcmVmaXg9cHl0aG9uMzQuUHlfR2V0UHJlZml4CisgIFB5X0dldFByb2dyYW1GdWxsUGF0aD1weXRob24zNC5QeV9HZXRQcm9ncmFtRnVsbFBhdGgKKyAgUHlfR2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbU5hbWUKKyAgUHlfR2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9HZXRQeXRob25Ib21lCisgIFB5X0dldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X0dldFJlY3Vyc2lvbkxpbWl0CisgIFB5X0dldFZlcnNpb249cHl0aG9uMzQuUHlfR2V0VmVyc2lvbgorICBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQorICBQeV9JbmNSZWY9cHl0aG9uMzQuUHlfSW5jUmVmCisgIFB5X0luaXRpYWxpemU9cHl0aG9uMzQuUHlfSW5pdGlhbGl6ZQorICBQeV9Jbml0aWFsaXplRXg9cHl0aG9uMzQuUHlfSW5pdGlhbGl6ZUV4CisgIFB5X0lzSW5pdGlhbGl6ZWQ9cHl0aG9uMzQuUHlfSXNJbml0aWFsaXplZAorICBQeV9NYWluPXB5dGhvbjM0LlB5X01haW4KKyAgUHlfTWFrZVBlbmRpbmdDYWxscz1weXRob24zNC5QeV9NYWtlUGVuZGluZ0NhbGxzCisgIFB5X05ld0ludGVycHJldGVyPXB5dGhvbjM0LlB5X05ld0ludGVycHJldGVyCisgIFB5X1JlcHJFbnRlcj1weXRob24zNC5QeV9SZXByRW50ZXIKKyAgUHlfUmVwckxlYXZlPXB5dGhvbjM0LlB5X1JlcHJMZWF2ZQorICBQeV9TZXRQcm9ncmFtTmFtZT1weXRob24zNC5QeV9TZXRQcm9ncmFtTmFtZQorICBQeV9TZXRQeXRob25Ib21lPXB5dGhvbjM0LlB5X1NldFB5dGhvbkhvbWUKKyAgUHlfU2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuUHlfU2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfU3ltdGFibGVTdHJpbmc9cHl0aG9uMzQuUHlfU3ltdGFibGVTdHJpbmcKKyAgUHlfVmFCdWlsZFZhbHVlPXB5dGhvbjM0LlB5X1ZhQnVpbGRWYWx1ZQorICBfUHlFcnJfQmFkSW50ZXJuYWxDYWxsPXB5dGhvbjM0Ll9QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUCisgIF9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUPXB5dGhvbjM0Ll9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUCisgIF9QeU9iamVjdF9HQ19NYWxsb2M9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX01hbGxvYworICBfUHlPYmplY3RfR0NfTmV3PXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19OZXcKKyAgX1B5T2JqZWN0X0dDX05ld1Zhcj1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3VmFyCisgIF9QeU9iamVjdF9HQ19SZXNpemU9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX1Jlc2l6ZQorICBfUHlPYmplY3RfTmV3PXB5dGhvbjM0Ll9QeU9iamVjdF9OZXcKKyAgX1B5T2JqZWN0X05ld1Zhcj1weXRob24zNC5fUHlPYmplY3RfTmV3VmFyCisgIF9QeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNC5fUHlTdGF0ZV9BZGRNb2R1bGUKKyAgX1B5VGhyZWFkU3RhdGVfSW5pdD1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9Jbml0CisgIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jPXB5dGhvbjM0Ll9QeVRocmVhZFN0YXRlX1ByZWFsbG9jCisgIF9QeVRyYXNoX2RlbGV0ZV9sYXRlcj1weXRob24zNC5fUHlUcmFzaF9kZWxldGVfbGF0ZXIgREFUQQorICBfUHlUcmFzaF9kZWxldGVfbmVzdGluZz1weXRob24zNC5fUHlUcmFzaF9kZWxldGVfbmVzdGluZyBEQVRBCisgIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0PXB5dGhvbjM0Ll9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0CisgIF9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW49cHl0aG9uMzQuX1B5VHJhc2hfZGVzdHJveV9jaGFpbgorICBfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUgREFUQQorICBfUHlXZWFrcmVmX1Byb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX1Byb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUmVmVHlwZT1weXRob24zNC5fUHlXZWFrcmVmX1JlZlR5cGUgREFUQQorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfQnVpbGRWYWx1ZV9TaXplVAorICBfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdD1weXRob24zNC5fUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCBEQVRBCisgIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGw9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbAorICBfUHlfRGVhbGxvYz1weXRob24zNC5fUHlfRGVhbGxvYworICBfUHlfRWxsaXBzaXNPYmplY3Q9cHl0aG9uMzQuX1B5X0VsbGlwc2lzT2JqZWN0IERBVEEKKyAgX1B5X0ZhbHNlU3RydWN0PXB5dGhvbjM0Ll9QeV9GYWxzZVN0cnVjdCBEQVRBCisgIF9QeV9Ob25lU3RydWN0PXB5dGhvbjM0Ll9QeV9Ob25lU3RydWN0IERBVEEKKyAgX1B5X05vdEltcGxlbWVudGVkU3RydWN0PXB5dGhvbjM0Ll9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdCBEQVRBCisgIF9QeV9Td2FwcGVkT3A9cHl0aG9uMzQuX1B5X1N3YXBwZWRPcCBEQVRBCisgIF9QeV9UcnVlU3RydWN0PXB5dGhvbjM0Ll9QeV9UcnVlU3RydWN0IERBVEEKKyAgX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfVmFCdWlsZFZhbHVlX1NpemVUCisgIF9QeUFyZ19QYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisgIF9QeUFyZ19WYVBhcnNlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19WYVBhcnNlX1NpemVUCisgIF9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMubWFrIGIvUEMvcHl0aG9uMy5tYWsKaW5kZXggOWNmMTgwNy4uZmI4ZTdhYSAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5tYWsKKysrIGIvUEMvcHl0aG9uMy5tYWsKQEAgLTEsMTQgKzEsMTQgQEAKLSQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zM3N0dWIubGliCi0JY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zM3N0dWIubGliCiskKE91dERpcilweXRob24zLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgorCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgogCi0kKE91dERpcilweXRob24zM3N0dWIubGliOglweXRob24zM3N0dWIuZGVmCi0JbGliIC9kZWY6cHl0aG9uMzNzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQorJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYjoJcHl0aG9uMzRzdHViLmRlZgorCWxpYiAvZGVmOnB5dGhvbjM0c3R1Yi5kZWYgL291dDokKE91dERpcilweXRob24zNHN0dWIubGliIC9NQUNISU5FOiQoTUFDSElORSkKIAogY2xlYW46CiAJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMy5kbGwgZGVsICQoT3V0RGlyKXB5dGhvbjMuZGxsCiAJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMy5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjMubGliCi0JSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgorCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMy5leHAKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zM3N0dWIuZXhwIGRlbCAkKE91dERpcilweXRob24zM3N0dWIuZXhwCisJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzRzdHViLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMzRzdHViLmV4cAogCiByZWJ1aWxkOiBjbGVhbiAkKE91dERpcilweXRob24zLmRsbApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzNnZW4ucHkgYi9QQy9weXRob24zNGdlbi5weQpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBQQy9weXRob24zM2dlbi5weQpyZW5hbWUgdG8gUEMvcHl0aG9uMzRnZW4ucHkKaW5kZXggMjFiOWY1Ni4uMTgwY2UxMSAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMzNnZW4ucHkKKysrIGIvUEMvcHl0aG9uMzRnZW4ucHkKQEAgLTEsOSArMSw5IEBACi0jIEdlbmVyYXRlIHB5dGhvbjMzc3R1Yi5kZWYgb3V0IG9mIHB5dGhvbjMuZGVmCisjIEdlbmVyYXRlIHB5dGhvbjM0c3R1Yi5kZWYgb3V0IG9mIHB5dGhvbjMuZGVmCiAjIFRoZSByZWd1bGFyIGltcG9ydCBsaWJyYXJ5IGNhbm5vdCBiZSB1c2VkLAogIyBzaW5jZSBpdCBkb2Vzbid0IHByb3ZpZGUgdGhlIHJpZ2h0IHN5bWJvbHMgZm9yCiAjIGRhdGEgZm9yd2FyZGluZwotb3V0ID0gb3BlbigicHl0aG9uMzNzdHViLmRlZiIsICJ3IikKLW91dC53cml0ZSgnTElCUkFSWSAicHl0aG9uMzMiXG4nKQorb3V0ID0gb3BlbigicHl0aG9uMzRzdHViLmRlZiIsICJ3IikKK291dC53cml0ZSgnTElCUkFSWSAicHl0aG9uMzQiXG4nKQogb3V0LndyaXRlKCdFWFBPUlRTXG4nKQogCiBpbnAgPSBvcGVuKCJweXRob24zLmRlZiIpCkBAIC0xNCw3ICsxNCw3IEBACiBhc3NlcnQgbGluZS5zdHJpcCgpPT0nRVhQT1JUUycKIAogZm9yIGxpbmUgaW4gaW5wOgotICAgICMgU1lNMT1weXRob24zMy5TWU0yWyBEQVRBXQorICAgICMgU1lNMT1weXRob24zNC5TWU0yWyBEQVRBXQogICAgIGhlYWQsIHRhaWwgPSBsaW5lLnNwbGl0KCcuJykKICAgICBpZiAnREFUQScgaW4gdGFpbDoKICAgICAgICAgc3ltYm9sLCB0YWlsID0gdGFpbC5zcGxpdCgnICcpCmRpZmYgLS1naXQgYS9QQy9weXRob24zM3N0dWIuZGVmIGIvUEMvcHl0aG9uMzRzdHViLmRlZgpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBQQy9weXRob24zM3N0dWIuZGVmCnJlbmFtZSB0byBQQy9weXRob24zNHN0dWIuZGVmCmluZGV4IDViOGNjZjYuLmMwZjNiMzUgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMzc3R1Yi5kZWYKKysrIGIvUEMvcHl0aG9uMzRzdHViLmRlZgpAQCAtMSw0ICsxLDQgQEAKLUxJQlJBUlkgInB5dGhvbjMzIgorTElCUkFSWSAicHl0aG9uMzQiCiBFWFBPUlRTCiBQeUFyZ19QYXJzZQogUHlBcmdfUGFyc2VUdXBsZQpAQCAtMzcsNiArMzcsNyBAQAogUHlDRnVuY3Rpb25fR2V0RmxhZ3MKIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCiBQeUNGdW5jdGlvbl9HZXRTZWxmCitQeUNGdW5jdGlvbl9OZXcKIFB5Q0Z1bmN0aW9uX05ld0V4CiBQeUNGdW5jdGlvbl9UeXBlCiBQeUNhbGxJdGVyX05ldwpkaWZmIC0tZ2l0IGEvUEMvcmVhZG1lLnR4dCBiL1BDL3JlYWRtZS50eHQKaW5kZXggZmRjMDlhYi4uNjBmMjMxZSAxMDA2NDQKLS0tIGEvUEMvcmVhZG1lLnR4dAorKysgYi9QQy9yZWFkbWUudHh0CkBAIC03OSwxOSArNzksNiBAQAogVGhlIHN1YmRpcmVjdG9yaWVzIFZDNiwgVlM3LjEgYW5kIFZTOC4wIGNvbnRhaW4gbGVnYWN5IHN1cHBvcnQgb2xkZXIKIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBTZWUgUENidWlsZC9yZWFkbWUudHh0LgogCi1FTVggZGV2ZWxvcG1lbnQgdG9vbHMgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TZWUgb3MyZW14L3JlYWRtZS50eHQuIFRoaXMgcGxhdGZvcm0gaXMgbWFpbnRhaW5lZCBieSBBbmRyZXcgTWFjSW50eXJlLgotCi1JQk0gVmlzdWFsQWdlIEMvQysrIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJ2YWNwcC9yZWFkbWUudHh0LiAgVGhpcyBwbGF0Zm9ybSBpcyBzdXBwb3J0ZWQgYnkgSmVmZiBSdXNoLgotCi1OT1RFOiBTdXBwb3J0IGZvciBvczJ2YWNwcCBtYXkgYmUgZHJvcHBlZCBpbiB0aGUgbmVhciBmdXR1cmUuIFBsZWFzZSBtb3ZlCi0gICAgICB0byBFTVguCi0KIE5vdGUgZm9yIFdpbmRvd3MgMy54IGFuZCBET1MgdXNlcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvUEMvdzl4cG9wZW4uYyBiL1BDL3c5eHBvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTc4ZGQuLjAwMDAwMDAKLS0tIGEvUEMvdzl4cG9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogdzl4cG9wZW4uYwotICoKLSAqIFNlcnZlcyBhcyBhbiBpbnRlcm1lZGlhdGUgc3R1YiBXaW4zMiBjb25zb2xlIGFwcGxpY2F0aW9uIHRvCi0gKiBhdm9pZCBhIGhhbmdpbmcgcGlwZSB3aGVuIHJlZGlyZWN0aW5nIDE2LWJpdCBjb25zb2xlIGJhc2VkCi0gKiBwcm9ncmFtcyAoaW5jbHVkaW5nIE1TLURPUyBjb25zb2xlIGJhc2VkIHByb2dyYW1zIGFuZCBiYXRjaAotICogZmlsZXMpIG9uIFdpbmRvdyA5NSBhbmQgV2luZG93cyA5OC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgdG8gYmUgbGF1bmNoZWQgd2l0aCByZWRpcmVjdGVkIHN0YW5kYXJkCi0gKiBoYW5kbGVzLiBJdCB3aWxsIGxhdW5jaCB0aGUgY29tbWFuZCBsaW5lIHNwZWNpZmllZCAxNi1iaXQKLSAqIGNvbnNvbGUgYmFzZWQgYXBwbGljYXRpb24gaW4gdGhlIHNhbWUgY29uc29sZSwgZm9yd2FyZGluZwotICogaXRzIG93biByZWRpcmVjdGVkIHN0YW5kYXJkIGhhbmRsZXMgdG8gdGhlIDE2LWJpdCBjaGlsZC4KLQotICogQUtBIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbiBLQjogUTE1MDk1Ni4KLSAqLyAgICAKLQotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+ICAvKiBmb3IgbWFsbG9jIGFuZCBpdHMgZnJpZW5kcyAqLwotCi1jb25zdCBjaGFyICp1c2FnZSA9Ci0iVGhpcyBwcm9ncmFtIGlzIHVzZWQgYnkgUHl0aG9uJ3Mgb3MucG9wZW4gZnVuY3Rpb25cbiIKLSJ0byB3b3JrIGFyb3VuZCBhIGxpbWl0YXRpb24gaW4gV2luZG93cyA5NS85OC4gIEl0IGlzXG4iCi0ibm90IGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBwcm9ncmFtLiI7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgQk9PTCBiUmV0OwotICAgIFNUQVJUVVBJTkZPIHNpOwotICAgIFBST0NFU1NfSU5GT1JNQVRJT04gcGk7Ci0gICAgRFdPUkQgZXhpdF9jb2RlPTA7Ci0gICAgc2l6ZV90IGNtZGxlbiA9IDA7Ci0gICAgaW50IGk7Ci0gICAgY2hhciAqY21kbGluZSwgKmNtZGxpbmVmaWxsOwotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIGlmIChHZXRGaWxlVHlwZShHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkpPT1GSUxFX1RZUEVfQ0hBUikKLSAgICAgICAgICAgIC8qIEF0dGFjaGVkIHRvIGEgY29uc29sZSwgYW5kIHRoZXJlZm9yZSBub3QgZXhlY3V0ZWQgYnkgUHl0aG9uCi0gICAgICAgICAgICAgICBEaXNwbGF5IGEgbWVzc2FnZSBib3ggZm9yIHRoZSBpbnF1aXNpdGl2ZSB1c2VyCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgTWVzc2FnZUJveChOVUxMLCB1c2FnZSwgYXJndlswXSwgTUJfT0spOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEVlZWsgLSBleGVjdXRlZCBieSBQeXRob24sIGJ1dCBhcmdzIGFyZSBzY3Jld2VkIQotICAgICAgICAgICAgICAgV3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRvdXQgc28gdGhlcmUgaXMgYXQKLSAgICAgICAgICAgICAgIGxlYXN0IHNvbWUgY2x1ZSBmb3IgdGhlIGVuZCB1c2VyIHdoZW4gaXQgYXBwZWFycwotICAgICAgICAgICAgICAgaW4gdGhlaXIgb3V0cHV0LgotICAgICAgICAgICAgICAgQSBtZXNzYWdlIGJveCB3b3VsZCBiZSBoaWRkZW4gYW5kIGJsb2NrcyB0aGUgYXBwLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIkludGVybmFsIHBvcGVuIGVycm9yIC0gbm8gYXJncyBzcGVjaWZpZWRcbiVzXG4iLCB1c2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIC8qIEJ1aWxkIHVwIHRoZSBjb21tYW5kLWxpbmUgZnJvbSB0aGUgYXJncy4KLSAgICAgICBBcmdzIHdpdGggYSBzcGFjZSBhcmUgcXVvdGVkLCBleGlzdGluZyBxdW90ZXMgYXJlIGVzY2FwZWQuCi0gICAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGNhbGN1bGF0aW5nIHRoZSBidWZmZXIgc2l6ZSwgd2UgYXNzdW1lCi0gICAgICAgZXZlcnkgY2hhcmFjdGVyIGlzIGEgcXVvdGUgLSBpZSwgd2UgYWxsb2NhdGUgZG91YmxlIHdoYXQgd2UgbmVlZAotICAgICAgIGluIHRoZSB3b3JzdCBjYXNlLiAgQXMgdGhpcyBpcyBvbmx5IGRvdWJsZSB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZAotICAgICAgIHRvIHVzLCB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgcmVhc29uYWJseSBzbWFsbCwgc28gdGhlIHRvdGFsIAotICAgICAgIGFsbG9jYXRpb24gd2lsbCBhbG1vc3QgYWx3YXlzIGJlIDwgNTEyIGJ5dGVzLgotICAgICovCi0gICAgZm9yIChpPTE7aTxhcmdjO2krKykKLSAgICAgICAgY21kbGVuICs9IHN0cmxlbihhcmd2W2ldKSoyICsgMzsgLyogb25lIHNwYWNlLCBtYXliZSAyIHF1b3RlcyAqLwotICAgIGNtZGxpbmUgPSBjbWRsaW5lZmlsbCA9IChjaGFyICopbWFsbG9jKGNtZGxlbisxKTsKLSAgICBpZiAoY21kbGluZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZm9yIChpPTE7aTxhcmdjO2krKykgewotICAgICAgICBjb25zdCBjaGFyICphcmdsb29rOwotICAgICAgICBpbnQgYlF1b3RlID0gc3RyY2hyKGFyZ3ZbaV0sICcgJykgIT0gTlVMTDsKLSAgICAgICAgaWYgKGJRdW90ZSkKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyInOwotICAgICAgICAvKiBlc2NhcGUgcXVvdGVzICovCi0gICAgICAgIGZvciAoYXJnbG9vaz1hcmd2W2ldOyphcmdsb29rO2FyZ2xvb2srKykgewotICAgICAgICAgICAgaWYgKCphcmdsb29rPT0nIicpCi0gICAgICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnXFwnOwotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAqYXJnbG9vazsKLSAgICAgICAgfQotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyAnOwotICAgIH0KLSAgICAqY21kbGluZWZpbGwgPSAnXDAnOwotCi0gICAgLyogTWFrZSBjaGlsZCBwcm9jZXNzIHVzZSB0aGlzIGFwcCdzIHN0YW5kYXJkIGZpbGVzLiAqLwotICAgIFplcm9NZW1vcnkoJnNpLCBzaXplb2Ygc2kpOwotICAgIHNpLmNiID0gc2l6ZW9mIHNpOwotICAgIHNpLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKLSAgICBzaS5oU3RkSW5wdXQgPSBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZE91dHB1dCA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZEVycm9yID0gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpOwotCi0gICAgYlJldCA9IENyZWF0ZVByb2Nlc3MoCi0gICAgICAgIE5VTEwsIGNtZGxpbmUsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgIFRSVUUsIDAsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgICZzaSwgJnBpCi0gICAgICAgICk7Ci0KLSAgICBmcmVlKGNtZGxpbmUpOwotCi0gICAgaWYgKGJSZXQpIHsKLSAgICAgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QocGkuaFByb2Nlc3MsIElORklOSVRFKSAhPSBXQUlUX0ZBSUxFRCkgewotCSAgICBHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZleGl0X2NvZGUpOwotCX0KLSAgICAgICAgQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotICAgICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGV4aXRfY29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL1BDL3dpbnJlZy5jIGIvUEMvd2lucmVnLmMKaW5kZXggM2I5NjkzYy4uNTYzYTNlYiAxMDA2NDQKLS0tIGEvUEMvd2lucmVnLmMKKysrIGIvUEMvd2lucmVnLmMKQEAgLTkzNyw3ICs5MzcsNyBAQAogICAgICAgICAgICAgICAgIHdjaGFyX3QgKmRhdGEgPSAod2NoYXJfdCAqKXJldERhdGFCdWY7CiAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJldERhdGFTaXplIC8gMjsKICAgICAgICAgICAgICAgICBpbnQgcyA9IGNvdW50U3RyaW5ncyhkYXRhLCBsZW4pOwotICAgICAgICAgICAgICAgIHdjaGFyX3QgKipzdHIgPSAod2NoYXJfdCAqKiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QgKikqcyk7CisgICAgICAgICAgICAgICAgd2NoYXJfdCAqKnN0ciA9ICh3Y2hhcl90ICoqKVB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCAqKSpzKTsKICAgICAgICAgICAgICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCkBAIC05NTgsNyArOTU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoc3RyW2luZGV4XSwgbGVuKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE3OTMsOSArMTc5Myw5IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJIS0VZVHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeUhLRVlfVHlwZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKFB5RXhjX1dpbmRvd3NFcnJvcik7CisgICAgUHlfSU5DUkVGKFB5RXhjX09TRXJyb3IpOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogQWRkIHRoZSByZWxldmFudCBjb25zdGFudHMgKi8KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvaiBiL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagpzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKcmVuYW1lIHRvIFBDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagppbmRleCBkMWFmZTIyLi5kMGVlNzJmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKKysrIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+e0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl9vdmVybGFwcGVkPC9Sb290TmFtZXNwYWNlPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgogICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CkBAIC0xNTksMTI3ICsxNTAsODMgQEAKICAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1x3OXhwb3Blbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvdmVybGFwcGVkLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvaiBiL1BDYnVpbGQvX3NoYTMudmN4cHJvagpzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCmNvcHkgdG8gUENidWlsZC9fc2hhMy52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLmYyNGNiZGMgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL19zaGEzLnZjeHByb2oKQEAgLTM1LDEwNCArMzUsOTUgQEAKICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgogICA8L0l0ZW1Hcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fTwvUHJvamVjdEd1aWQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+dzl4cG9wZW48L1Jvb3ROYW1lc3BhY2U+CisgICAgPFByb2plY3RHdWlkPnsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fc2hhMzwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KICAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KICAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgpAQCAtMTU5LDEyNyArMTUwLDY3IEBACiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1x3OXhwb3Blbi5jIiAvPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NoYTNcc2hhM21vZHVsZS5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvaiBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagppbmRleCAzOTJkYWQxLi5lZDM1ZDViIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKKysrIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCkBAIC0yNDMsNyArMjQzLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5oIiAvPgogICA8L0l0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKaW5kZXggODhlNWZkYi4uZGNlNzdjOSAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qLmZpbHRlcnMKQEAgLTMwLDkgKzMwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuaCI+CiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qIGIvUENidWlsZC9fc3NsLnZjeHByb2oKaW5kZXggYWU3MWQxOS4uNzM3ODc5NCAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3NsLnZjeHByb2oKKysrIGIvUENidWlsZC9fc3NsLnZjeHByb2oKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgpAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzdhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpAQCAtMCwwICsxLDE2MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdGVtYmVkPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgorICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+CisgICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RlbWJlZC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UHJpdmF0ZT50cnVlPC9Qcml2YXRlPgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PnRydWU8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgICAgPENvcHlMb2NhbFNhdGVsbGl0ZUFzc2VtYmxpZXM+ZmFsc2U8L0NvcHlMb2NhbFNhdGVsbGl0ZUFzc2VtYmxpZXM+CisgICAgICA8TGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+dHJ1ZTwvTGlua0xpYnJhcnlEZXBlbmRlbmNpZXM+CisgICAgICA8VXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHM+ZmFsc2U8L1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNTRkNAotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSwyMiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCmNvcHkgdG8gUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uODQ5ODRmZiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RpbXBvcnRtdWx0aXBsZTwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KICAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KICAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgpAQCAtMTU5LDEyOSArMTUwLDY5IEBACiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCnJlbmFtZSB0byBQQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCmluZGV4IGRlYzY3YWQuLmRiMGQwYTYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTIgKzIsMTIgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsxZWMzOGFkOS0xYWJmLTRiODAtODYyOC1hYzQzY2NiYTMyNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF9zc2wuYmF0IGIvUENidWlsZC9idWlsZF9zc2wuYmF0CmluZGV4IDM1N2IwOGIuLjgwNWQ3N2EgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfc3NsLmJhdAorKysgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKQEAgLTIsMTAgKzIsMTAgQEAKIGlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKICAgaWYgJTEgRVFVIERlYnVnICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzX2QuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNF9kLmRsbCBleGl0IDEKICAgKSBFTFNFICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMy5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0LmRsbCBleGl0IDEKICAgKQogKQogJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weSBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQppbmRleCA0MTk2Y2YzLi5jODA3ZTdiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKKysrIGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CkBAIC0xMSwxNiArMTEsMTIgQEAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIHBhciA9IG9zLnBhdGgucGFyZGlyCiAKLVRDTCA9ICJ0Y2w4LjUuMTEiCi1USyA9ICJ0azguNS4xMSIKLVRJWCA9ICJ0aXgtOC40LjMueCIKK1RDTCA9ICJ0Y2w4LjYuMSIKK1RLID0gInRrOC42LjEiCitUSVggPSAidGl4LTguNC4zLjMiCiAKIFJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyKSkKLSMgV2luZG93cyAyMDAwIGNvbXBhdGliaWxpdHk6IFdJTlZFUiAweDA1MDAKLSMgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM4Mzc0NS5hc3B4Ci1OTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAnCi0gICAgJ0NPTVBJTEVSRkxBR1M9XCItRFdJTlZFUj0weDA1MDAgLURfV0lOMzJfV0lOTlQ9MHgwNTAwIC1ETlRERElfVkVSU0lPTj1OVERESV9XSU4yS1NQNFwiICcKLSAgICAnJXMgJXMnKQorTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJXMgJXMnKQogCiBkZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgogICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKZGlmZiAtLWdpdCBhL1BDYnVpbGQva2lsbF9weXRob24uYyBiL1BDYnVpbGQva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42MDQ3MzFmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKKysrIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgogICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcGNidWlsZC5zbG4gYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCmluZGV4IGQ2YTAyMmYuLmU0MzFjOTEgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcGNidWlsZC5zbG4KKysrIGIvUENidWlsZC9wY2J1aWxkLnNsbgpAQCAtMTQsOCArMTQsNiBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjeHByb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmN4cHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3hwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjeHByb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQpAQCAtMzgsNiArMzYsOCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3hwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjeHByb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2J6MiIsICJfYnoyLnZjeHByb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQpAQCAtNzQsNiArNzQsMTIgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9mcmVlemVfaW1wb3J0bGliIiwgIl9mcmVlemVfaW1wb3J0bGliLnZjeHByb2oiLCAiezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NoYTMiLCAiX3NoYTMudmN4cHJvaiIsICJ7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfb3ZlcmxhcHBlZCIsICJfb3ZlcmxhcHBlZC52Y3hwcm9qIiwgIntFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0ZW1iZWQiLCAiX3Rlc3RlbWJlZC52Y3hwcm9qIiwgIns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9Ig0KK0VuZFByb2plY3QNCiBHbG9iYWwNCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCiAJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCkBAIC0xNTAsMjIgKzE1Niw2IEBACiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCkBAIC0zNDIsNiArMzMyLDIyIEBACiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQpAQCAtNjExLDYgKzYxNyw1NCBAQAogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCmluZGV4IDgxNTUyMzEuLjdiNjU5NjEgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCisrKyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCkBAIC0xMywyMCArMTMsMjAgQEAKICAgICA8SW50RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyI+Ci0gICAgPFB5RGxsTmFtZT5weXRob24zMyQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KKyAgICA8UHlEbGxOYW1lPnB5dGhvbjM0JChQeURlYnVnRXh0KTwvUHlEbGxOYW1lPgogICAgIDxQeXRob25FeGU+JChPdXREaXIpcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L1B5dGhvbkV4ZT4KICAgICA8S2lsbFB5dGhvbkV4ZT4kKE91dERpcilraWxsX3B5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9LaWxsUHl0aG9uRXhlPgogICAgIDxleHRlcm5hbHNEaXI+Li5cLi48L2V4dGVybmFsc0Rpcj4KLSAgICA8c3FsaXRlM0Rpcj4kKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMjwvc3FsaXRlM0Rpcj4KKyAgICA8c3FsaXRlM0Rpcj4kKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuOC4xPC9zcWxpdGUzRGlyPgogICAgIDxiejJEaXI+JChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC42PC9iejJEaXI+Ci0gICAgPGx6bWFEaXI+JChleHRlcm5hbHNEaXIpXHh6LTUuMC4zPC9sem1hRGlyPgorICAgIDxsem1hRGlyPiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuNTwvbHptYURpcj4KICAgICA8b3BlbnNzbERpcj4kKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0xLjAuMWU8L29wZW5zc2xEaXI+CiAgICAgPHRjbHRrRGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azwvdGNsdGtEaXI+CiAgICAgPHRjbHRrNjREaXI+JChleHRlcm5hbHNEaXIpXHRjbHRrNjQ8L3RjbHRrNjREaXI+Ci0gICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0a0RpcilcbGliXHRrODUubGliPC90Y2x0a0xpYj4KLSAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliPC90Y2x0a0xpYkRlYnVnPgotICAgIDx0Y2x0azY0TGliPiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYjwvdGNsdGs2NExpYj4KLSAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliPC90Y2x0azY0TGliRGVidWc+CisgICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGtEaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrTGliPgorICAgIDx0Y2x0a0xpYkRlYnVnPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnRnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KKyAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0LmxpYjwvdGNsdGs2NExpYj4KKyAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg2dGcubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrNjRMaWJEZWJ1Zz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgpAQCAtNDksOSArNDksOCBAQAogICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CiAgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KICAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+dHJ1ZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPnRydWU8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgICAgPFJlc291cmNlQ29tcGlsZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCmluZGV4IGQwYTlkZTAuLmJkMTI2MjQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob24udmN4cHJvagpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgPExpbms+CiAgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob25fZC5leGU8L091dHB1dEZpbGU+CiAgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIxMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+CisgICAgICA8U3RhY2tSZXNlcnZlU2l6ZT40MTk0MzA0PC9TdGFja1Jlc2VydmVTaXplPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpAQCAtMzU3LDEyICszNTcsOCBAQAogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ3OXhwb3Blbi52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntlOWUwYTFmNi0wMDA5LTRlOGMtYjhmOC0xYjhmNWQ0OWEwNTh9PC9Qcm9qZWN0PgotICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKaW5kZXggODlhNjNkMS4uMTFiNzA1NCAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKQEAgLTQ2MCw2ICs0NjAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGdlbmhlYWRlcnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5X2N1cnNlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWFyZW5hLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIiAvPgpAQCAtNDk2LDcgKzQ5NywxMSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX21hdGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfbGliLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxjcmMzMi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuaCIgLz4KQEAgLTUyMyw2ICs1MjgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmFzdHNlYXJjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1x1bmljb2RldHlwZV9kYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUGFyc2VyXHBhcnNlci5oIiAvPgpAQCAtNTQ4LDYgKzU1NCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9waWNrbGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3JlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdHJ1Y3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3dlYWtyZWYuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyIgLz4KQEAgLTU1OSwxMiArNTY2LDE0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGZhdWx0aGFuZGxlci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnY21vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1haW4uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3Bjb2RlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiIC8+CkBAIC01NzQsNiArNTgzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RyYWNlbWFsbG9jLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHppcGltcG9ydC5jIiAvPgpAQCAtNjU5LDYgKzY2OSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xkbF9udC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZ2V0cGF0aHAuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXG1zdmNydG1vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5aGFzaC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHJhbmRvbS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXF93YXJuaW5ncy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXGFzZGwuYyIgLz4KQEAgLTcyNSw0ICs3MzYsNCBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDA5YjRiYjQuLjQxZmUxYjIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzAwLDYgKzMwMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXF9pbzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzc4LDYgKzM4Nyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCI+CisgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00MDksNiArNDIxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFB5dGhvblxjZXZhbF9naWwuaCI+CiAgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWhhc2guaCI+CisgICAgICA8RmlsdGVyPkluY2x1ZGU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+CkBAIC00OTgsNyArNTEzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4KQEAgLTkxNiw2ICs5MzEsMTIgQEAKICAgICAgIDxGaWx0ZXI+UEM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcbmFtZXNwYWNlb2JqZWN0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHloYXNoLmMiPgorICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9yZWFkbWUudHh0IGIvUENidWlsZC9yZWFkbWUudHh0CmluZGV4IDZmMDc2ODkuLjMyNjM1NzAgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcmVhZG1lLnR4dAorKysgYi9QQ2J1aWxkL3JlYWRtZS50eHQKQEAgLTEsMjAwICsxLDI1OSBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgMTAuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGRpbmcgUHl0aG9uIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIGFuZCB4NjQgcGxhdGZvcm1zLCBlLmcuCi1XaW5kb3dzIFhQLCBWaXN0YSBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOC4gIEluIG9yZGVyIHRvIGJ1aWxkIDMyLWJpdAotZGVidWcgYW5kIHJlbGVhc2UgZXhlY3V0YWJsZXMsIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uIGlzCi1yZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdCBkZWJ1ZyBhbmQgcmVsZWFzZQotZXhlY3V0YWJsZXMsIFZpc3VhbCBTdHVkaW8gMjAxMCBTdGFuZGFyZCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5Ci1sZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIGFsbCBvZiB0aGUgYWJvdmUsIGFzIHdlbGwgYXMgZ2VuZXJhdGUgcmVsZWFzZSBidWlsZHMKLXRoYXQgbWFrZSB1c2Ugb2YgUHJvZmlsZSBHdWlkZWQgT3B0aW1pc2F0aW9uIChQRzApLCBWaXN1YWwgU3R1ZGlvIDIwMTAKLVByb2Zlc3Npb25hbCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgVGhlIG9mZmljaWFsIFB5dGhvbgotcmVsZWFzZXMgYXJlIGJ1aWx0IHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8uCitUaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIENQeXRob24gZm9yIE1pY3Jvc29mdCBXaW5kb3dzIE5UIHZlcnNpb24KKzUuMSBvciBoaWdoZXIgKFdpbmRvd3MgWFAsIFdpbmRvd3MgU2VydmVyIDIwMDMsIG9yIGxhdGVyKSBvbiAzMiBhbmQgNjQKK2JpdCBwbGF0Zm9ybXMuICBVc2luZyB0aGlzIGRpcmVjdG9yeSByZXF1aXJlcyBhbiBpbnN0YWxsYXRpb24gb2YKK01pY3Jvc29mdCBWaXN1YWwgQysrIDIwMTAgKE1TVkMgMTAuMCkgb2YgYW55IGVkaXRpb24uICBUaGUgc3BlY2lmaWMKK3JlcXVpcmVtZW50cyBhcmUgYXMgZm9sbG93czoKK1Zpc3VhbCBDKysgMjAxMCBFeHByZXNzIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgMzItYml0IERlYnVnIGFuZCBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzLgorICAgIFRoaXMgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0ICJzb2x1dGlvbiBmb2xkZXJzIiwgd2hpY2ggcGNidWlsZC5zbG4KKyAgICB1c2VzOyB0aGlzIHdpbGwgbm90IHByZXZlbnQgYnVpbGRpbmcuCitWaXN1YWwgU3R1ZGlvIDIwMTAgU3RhbmRhcmQgRWRpdGlvbgorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyA2NC1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMKK1Zpc3VhbCBTdHVkaW8gMjAxMCBQcm9mZXNzaW9uYWwgRWRpdGlvbgorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzIHRoYXQgbWFrZSB1c2Ugb2YKKyAgICBQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24gKFBHTyksIG9uIGVpdGhlciBwbGF0Zm9ybS4gIFRoZSBvZmZpY2lhbAorICAgIFB5dGhvbiByZWxlYXNlcyBhcmUgYnVpbHQgd2l0aCBQcm9mZXNzaW9uYWwgRWRpdGlvbiB1c2luZyBQR08uCiAKLUZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vUEMvcmVhZG1lLnR4dC4KK0FsbCB5b3UgbmVlZCB0byBkbyB0byBidWlsZCBpcyBvcGVuIHRoZSBzb2x1dGlvbiAicGNidWlsZC5zbG4iIGluIFZpc3VhbAorU3R1ZGlvLCBzZWxlY3QgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gb2YgY29uZmlndXJhdGlvbiBhbmQgcGxhdGZvcm0sCit0aGVuIGJ1aWxkIHdpdGggIkJ1aWxkIFNvbHV0aW9uIiBvciB0aGUgRjcga2V5Ym9hcmQgc2hvcnRjdXQuICBZb3UgY2FuCithbHNvIGJ1aWxkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgImJ1aWxkLmJhdCIgc2NyaXB0IGluIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSBzb2x1dGlvbiBpcyBjb25maWd1cmVkIHRvIGJ1aWxkIHRoZSBwcm9qZWN0cyBpbiB0aGUKK2NvcnJlY3Qgb3JkZXIuCiAKLUFsbCB5b3UgbmVlZCB0byBkbyBpcyBvcGVuIHRoZSB3b3Jrc3BhY2UgInBjYnVpbGQuc2xuIiBpbiBWaXN1YWwgU3R1ZGlvLAotc2VsZWN0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBsYXRmb3JtIGFuZCBldmVudHVhbGx5Ci1idWlsZCB0aGUgc29sdXRpb24uIFVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIGRlYnVnIGEgcHJvYmxlbSBpbiB0aGUgY29yZSBvcgoteW91IGFyZSBnb2luZyB0byBjcmVhdGUgYW4gb3B0aW1pemVkIGJ1aWxkIHlvdSB3YW50IHRvIHNlbGVjdCAiUmVsZWFzZSIgYXMKLWNvbmZpZ3VyYXRpb24uCitUaGUgc29sdXRpb24gY3VycmVudGx5IHN1cHBvcnRzIHR3byBwbGF0Zm9ybXMuICBUaGUgV2luMzIgcGxhdGZvcm0gaXMKK3VzZWQgdG8gYnVpbGQgc3RhbmRhcmQgeDg2LWNvbXBhdGlibGUgMzItYml0IGJpbmFyaWVzLCBvdXRwdXQgaW50byB0aGlzCitkaXJlY3RvcnkuICBUaGUgeDY0IHBsYXRmb3JtIGlzIHVzZWQgZm9yIGJ1aWxkaW5nIDY0LWJpdCBBTUQ2NCAoYWthCit4ODZfNjQgb3IgRU02NFQpIGJpbmFyaWVzLCBvdXRwdXQgaW50byB0aGUgYW1kNjQgc3ViLWRpcmVjdG9yeSB3aGljaAord2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIFRoZSBJdGFuaXVtIChJQS02NCkKK3BsYXRmb3JtIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBTZWUgdGhlICJCdWlsZGluZyBmb3IgQU1ENjQiIHNlY3Rpb24KK2JlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDY0LWJpdCBidWlsZHMuCiAKLVRoZSBQQ2J1aWxkIGRpcmVjdG9yeSBpcyBjb21wYXRpYmxlIHdpdGggYWxsIHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8gZnJvbQotVlMgQysrIEV4cHJlc3MgRWRpdGlvbiBvdmVyIHRoZSBzdGFuZGFyZCBlZGl0aW9uIHVwIHRvIHRoZSBwcm9mZXNzaW9uYWwKLWVkaXRpb24uIEhvd2V2ZXIgdGhlIGV4cHJlc3MgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmVzIGxpa2Ugc29sdXRpb24KLWZvbGRlcnMgb3IgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uIChQR08pLiBUaGUgbWlzc2luZyBiaXRzIGFuZCBwaWVjZXMKLXdvbid0IHN0b3AgeW91IGZyb20gYnVpbGRpbmcgUHl0aG9uLgorRm91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc29sdXRpb246CitEZWJ1ZworICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIHdpdGggZXh0cmEgZGVidWdnaW5nIGNhcGFiaWxpdGllcywgZXF1aXZhbGVudAorICAgIHRvIHVzaW5nIC4vY29uZmlndXJlIC0td2l0aC1weWRlYnVnIG9uIFVOSVguICBBbGwgYmluYXJpZXMgYnVpbHQKKyAgICB1c2luZyB0aGlzIGNvbmZpZ3VyYXRpb24gaGF2ZSAiX2QiIGFkZGVkIHRvIHRoZWlyIG5hbWU6CisgICAgcHl0aG9uMzRfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uICBCb3RoIHRoZQorICAgIGJ1aWxkIGFuZCBydCAocnVuIHRlc3QpIGJhdGNoIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGFjY2VwdCBhIC1kCisgICAgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuICBJZiB5b3UgYXJlIGJ1aWxkaW5nIFB5dGhvbiB0byBoZWxwIHdpdGgKKyAgICBkZXZlbG9wbWVudCBvZiBDUHl0aG9uLCB5b3Ugd2lsbCBtb3N0IGxpa2VseSB1c2UgdGhpcyBjb25maWd1cmF0aW9uLgorUEdJbnN0cnVtZW50LCBQR1VwZGF0ZQorICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIGluIFJlbGVhc2UgY29uZmlndXJhdGlvbiB1c2luZyBQR08sIHdoaWNoCisgICAgcmVxdWlyZXMgUHJvZmVzc2lvbmFsIEVkaXRpb24gb2YgVmlzdWFsIFN0dWRpby4gIFNlZSB0aGUgIlByb2ZpbGUKKyAgICBHdWlkZWQgT3B0aW1pemF0aW9uIiBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLiAgQnVpbGQKKyAgICBvdXRwdXQgZnJvbSBlYWNoIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGxhbmRzIGluIGl0cyBvd24KKyAgICBzdWItZGlyZWN0b3J5IG9mIHRoaXMgZGlyZWN0b3J5LiAgVGhlIG9mZmljaWFsIFB5dGhvbiByZWxlYXNlcyBhcmUKKyAgICBidWlsdCB1c2luZyB0aGVzZSBjb25maWd1cmF0aW9ucy4KK1JlbGVhc2UKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBhcyBpdCBpcyBtZWFudCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24KKyAgICBzZXR0aW5ncywgdGhvdWdoIHdpdGhvdXQgUEdPLgogCi1UaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuICJCdWlsZAotU29sdXRpb24iIG9yIEY3IHRha2VzIGNhcmUgb2YgZGVwZW5kZW5jaWVzIGV4Y2VwdCBmb3IgeDY0IGJ1aWxkcy4gVG8gbWFrZQotY3Jvc3MgY29tcGlsaW5nIHg2NCBidWlsZHMgb24gYSAzMmJpdCBPUyBwb3NzaWJsZSB0aGUgeDY0IGJ1aWxkcyByZXF1aXJlIGEKLTMyYml0IHZlcnNpb24gb2YgUHl0aG9uLgotCi1OT1RFOgotICAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcwotICAgeW91J3JlIGJ1aWxkaW5nIGFuIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3IKLSAgIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcyB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudCwgb3IgYXJlCi0gICBydW5uaW5nIGEgUHl0aG9uIGNvcmUgYnVpbGRib3QgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLiBCb3RoCi10aGUgYnVpbGQgYW5kIHJ0IGJhdGNoIGZpbGVzIGFjY2VwdCBhIC1kIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLgotCi1UaGUgMzJiaXQgYnVpbGRzIGVuZCB1cCBpbiB0aGUgc29sdXRpb24gZm9sZGVyIFBDYnVpbGQgd2hpbGUgdGhlIHg2NCBidWlsZHMKLWxhbmQgaW4gdGhlIGFtZDY0IHN1YmZvbGRlci4gVGhlIFBHSSBhbmQgUEdPIGJ1aWxkcyBmb3IgcHJvZmlsZSBndWlkZWQKLW9wdGltaXphdGlvbiBlbmQgdXAgaW4gdGhlaXIgb3duIGZvbGRlcnMsIHRvby4KIAogTGVnYWN5IHN1cHBvcnQKIC0tLS0tLS0tLS0tLS0tCiAKIFlvdSBjYW4gZmluZCBidWlsZCBkaXJlY3RvcmllcyBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBhbmQKLVZpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8gbG9uZ2VyCi1hY3RpdmVseSBtYWludGFpbmVkIGFuZCBtYXkgbm90IHdvcmsgb3V0IG9mIHRoZSBib3guCitWaXN1YWwgQysrIGluIHRoZSBQQyBkaXJlY3RvcnkuIFRoZSBsZWdhY3kgYnVpbGQgZGlyZWN0b3JpZXMgYXJlIG5vCitsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWF5IG5vdCB3b3JrIG91dCBvZiB0aGUgYm94LgogCi1QQy9WQzYvCi0gICAgVmlzdWFsIEMrKyA2LjAKLVBDL1ZTNy4xLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwMyAoNy4xKQotUEMvVlM4LjAvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDA1ICg4LjApCi1QQy9WUzkuMC8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDggKDkuMCkKK0N1cnJlbnRseSwgdGhlIG9ubHkgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yeSBpcyBQQ1xWUzkuMCwgZm9yIFZpc3VhbAorU3R1ZGlvIDIwMDggKDkuMCkuCiAKIAotQyBSVU5USU1FCitDIFJ1bnRpbWUKIC0tLS0tLS0tLQogCi1WaXN1YWwgU3R1ZGlvIDIwMTAgdXNlcyB2ZXJzaW9uIDEwIG9mIHRoZSBDIHJ1bnRpbWUgKE1TVkNSVDEwKS4gIFRoZSBleGVjdXRhYmxlcwotbm8gbG9uZ2VyIHVzZSB0aGUgIlNpZGUgYnkgU2lkZSIgYXNzZW1ibGllcyB1c2VkIGluIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZQotY29tcGlsZXIuICBUaGlzIHNpbXBsaWZpZXMgZGlzdHJpYnV0aW9uIG9mIGFwcGxpY2F0aW9ucy4KLVRoZSBydW4gdGltZSBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgVkMvUmVkaXN0IGZvbGRlciBvZiB5b3VyIHZpc3VhbCBzdHVkaW8KLWRpc3RyaWJ1dGlvbi4gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSBSZWFkbWUgaW4gdGhlIFZDL1JlZGlzdCBmb2xkZXIuCitWaXN1YWwgU3R1ZGlvIDIwMTAgdXNlcyB2ZXJzaW9uIDEwIG9mIHRoZSBDIHJ1bnRpbWUgKE1TVkNSVDEwKS4gIFRoZQorZXhlY3V0YWJsZXMgbm8gbG9uZ2VyIHVzZSB0aGUgIlNpZGUgYnkgU2lkZSIgYXNzZW1ibGllcyB1c2VkIGluIHByZXZpb3VzCit2ZXJzaW9ucyBvZiB0aGUgY29tcGlsZXIuICBUaGlzIHNpbXBsaWZpZXMgZGlzdHJpYnV0aW9uIG9mIGFwcGxpY2F0aW9ucy4KIAotU1VCUFJPSkVDVFMKLS0tLS0tLS0tLS0tCi1UaGVzZSBzdWJwcm9qZWN0cyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3guICBTdWJwcm9qZWN0cyBvdGhlciB0aGFuIHRoZQotbWFpbiBvbmVzIChweXRob25jb3JlLCBweXRob24sIHB5dGhvbncpIGdlbmVyYWxseSBidWlsZCBhIERMTCAocmVuYW1lZCB0bwotLnB5ZCkgZnJvbSBhIHNwZWNpZmljIG1vZHVsZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgY29kZQotc3VwcG9ydGluZyB0aGF0IG1vZHVsZSB1bmxlc3MgdGhleSBpbXBvcnQgdGhlIG1vZHVsZS4KK1RoZSBydW4gdGltZSBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgVkMvUmVkaXN0IGZvbGRlciBvZiB5b3VyCitWaXN1YWwgU3R1ZGlvIGRpc3RyaWJ1dGlvbi4gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSBSZWFkbWUgaW4gdGhlCitWQy9SZWRpc3QgZm9sZGVyLgogCisKK1N1Yi1Qcm9qZWN0cworLS0tLS0tLS0tLS0tCisKK1RoZSBDUHl0aG9uIHByb2plY3QgaXMgc3BsaXQgdXAgaW50byBzZXZlcmFsIHNtYWxsZXIgc3ViLXByb2plY3RzIHdoaWNoCithcmUgbWFuYWdlZCBieSB0aGUgcGNidWlsZC5zbG4gc29sdXRpb24gZmlsZS4gIEVhY2ggc3ViLXByb2plY3QgaXMKK3JlcHJlc2VudGVkIGJ5IGEgLnZjeHByb2ogYW5kIGEgLnZjeHByb2ouZmlsdGVycyBmaWxlIHN0YXJ0aW5nIHdpdGggdGhlCituYW1lIG9mIHRoZSBzdWItcHJvamVjdC4gIFRoZXNlIHN1Yi1wcm9qZWN0cyBmYWxsIGludG8gYSBmZXcgZ2VuZXJhbAorY2F0ZWdvcmllczoKKworVGhlIGZvbGxvd2luZyBzdWItcHJvamVjdHMgcmVwcmVzZW50IHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgdG8gYnVpbGQKK2EgZnVuY3Rpb25pbmcgQ1B5dGhvbiBpbnRlcnByZXRlci4gIElmIG5vdGhpbmcgZWxzZSBidWlsZHMgYnV0IHRoZXNlLAoreW91J2xsIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgYnV0IHVzYWJsZSBweXRob24uZXhlOgogcHl0aG9uY29yZQogICAgIC5kbGwgYW5kIC5saWIKIHB5dGhvbgogICAgIC5leGUKK2tpbGxfcHl0aG9uCisgICAga2lsbF9weXRob24uZXhlLCBhIHNtYWxsIHByb2dyYW0gZGVzaWduZWQgdG8ga2lsbCBhbnkgaW5zdGFuY2VzIG9mCisgICAgcHl0aG9uKF9kKS5leGUgdGhhdCBhcmUgcnVubmluZyBhbmQgbGl2ZSBpbiB0aGUgYnVpbGQgb3V0cHV0CisgICAgZGlyZWN0b3J5OyB0aGlzIGlzIG1lYW50IHRvIGF2b2lkIGJ1aWxkIGlzc3VlcyBkdWUgdG8gbG9ja2VkIGZpbGVzCittYWtlX2J1aWxkaW5mbywgbWFrZV92ZXJzaW9uaW5mbworICAgIGhlbHBlcnMgdG8gcHJvdmlkZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gdGhlIGJ1aWxkIHByb2Nlc3MKKworVGhlc2Ugc3ViLXByb2plY3RzIHByb3ZpZGUgZXh0cmEgZXhlY3V0YWJsZXMgdGhhdCBhcmUgdXNlZnVsIGZvciBydW5uaW5nCitDUHl0aG9uIGluIGRpZmZlcmVudCB3YXlzOgogcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAorICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3Qgb3BlbiBhIENvbW1hbmQKKyAgICBQcm9tcHQgd2luZG93CitweWxhdW5jaGVyCisgICAgcHkuZXhlLCB0aGUgUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzLCBzZWUKKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL3dpbmRvd3MuaHRtbCNsYXVuY2hlcgorcHl3bGF1bmNoZXIKKyAgICBweXcuZXhlLCBhIHZhcmlhbnQgb2YgcHkuZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZCBQcm9tcHQKKyAgICB3aW5kb3cKK190ZXN0ZW1iZWQKKyAgICBfdGVzdGVtYmVkLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIHRoYXQgZW1iZWRzIFB5dGhvbiBmb3IgdGVzdGluZworICAgIHB1cnBvc2VzLCB1c2VkIGJ5IHRlc3RfY2FwaS5weQorCitUaGVzZSBhcmUgbWlzY2VsbGFuZW91cyBzdWItcHJvamVjdHMgdGhhdCBkb24ndCByZWFsbHkgZml0IHRoZSBvdGhlcgorY2F0ZWdvcmllcy4gIEJ5IGRlZmF1bHQsIHRoZXNlIHByb2plY3RzIGRvIG5vdCBidWlsZCBpbiBEZWJ1ZworY29uZmlndXJhdGlvbjoKK19mcmVlemVfaW1wb3J0bGliCisgICAgX2ZyZWV6ZV9pbXBvcnRsaWIuZXhlLCB1c2VkIHRvIHJlZ2VuZXJhdGUgUHl0aG9uXGltcG9ydGxpYi5oIGFmdGVyCisgICAgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBMaWJcaW1wb3J0bGliXF9ib290c3RyYXAucHkKK2JkaXN0X3dpbmluc3QKKyAgICAuLlxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC0xMC4wWy1hbWQ2NF0uZXhlLCB0aGUgYmFzZQorICAgIGV4ZWN1dGFibGUgdXNlZCBieSB0aGUgZGlzdHV0aWxzIGJkaXN0X3dpbmluc3QgY29tbWFuZAorcHl0aG9uM2RsbAorICAgIHB5dGhvbjMuZGxsLCB0aGUgUEVQIDM4NCBTdGFibGUgQUJJIGRsbAoreHhsaW1pdGVkCisgICAgYnVpbGRzIGFuIGV4YW1wbGUgbW9kdWxlIHRoYXQgbWFrZXMgdXNlIG9mIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkksCisgICAgc2VlIE1vZHVsZXNceHhsaW1pdGVkLmMKKworVGhlIGZvbGxvd2luZyBzdWItcHJvamVjdHMgYXJlIGZvciBpbmRpdmlkdWFsIG1vZHVsZXMgb2YgdGhlIHN0YW5kYXJkCitsaWJyYXJ5IHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBpbiBDOyBlYWNoIG9uZSBidWlsZHMgYSBETEwgKHJlbmFtZWQgdG8KKy5weWQpIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHByb2plY3Q6CitfY3R5cGVzCitfY3R5cGVzX3Rlc3QKK19kZWNpbWFsCitfZWxlbWVudHRyZWUKK19oYXNobGliCitfbXNpCitfbXVsdGlwcm9jZXNzaW5nCitfb3ZlcmxhcHBlZAorX3NoYTMKIF9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwogX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCiBfdGVzdGJ1ZmZlcgotICAgIGJ1ZmZlciBwcm90b2NvbCB0ZXN0cywgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2J1ZmZlci5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RidWZmZXIuYworX3Rlc3RpbXBvcnRtdWx0aXBsZQogcHlleHBhdAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBhY2NlbGVyYXRlZCBYTUwgcGFyc2luZywgd2hpY2ggaW5jb3Jwb3JhdGVzIHN0YWJsZQotICAgIGNvZGUgZnJvbSB0aGUgRXhwYXQgcHJvamVjdDogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvCiBzZWxlY3QKLSAgICBzZWxlY3Rtb2R1bGUuYwogdW5pY29kZWRhdGEKLSAgICBsYXJnZSB0YWJsZXMgb2YgVW5pY29kZSBkYXRhCiB3aW5zb3VuZAotICAgIHBsYXkgc291bmRzICh0eXBpY2FsbHkgLndhdiBmaWxlcykgdW5kZXIgV2luZG93cwogCi1QeXRob24tY29udHJvbGxlZCBzdWJwcm9qZWN0cyB0aGF0IHdyYXAgZXh0ZXJuYWwgcHJvamVjdHM6Ci1fc3FsaXRlMwotICAgIFdyYXBzIFNRTGl0ZSAzLjcuMTIsIHdoaWNoIGlzIGN1cnJlbnRseSBidWlsdCBieSBzcWxpdGUzLnZjeHByb2ouCi1fdGtpbnRlcgotICAgIFdyYXBzIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgVW5saWtlIF9zcWxpdGUzLCB0aGVyZSdzIG5vCi0gICAgY29ycmVzcG9uZGluZyB0Y2x0ay52Y3hwcm9qLXR5cGUgcHJvamVjdCB0aGF0IGJ1aWxkcyBUY2wvVGsgZnJvbSB2Y3hwcm9qJ3MKLSAgICB3aXRoaW4gb3VyIHBjYnVpbGQuc2xuLCB3aGljaCBtZWFucyB0aGlzIG1vZHVsZSBleHBlY3RzIHRvIGZpbmQgYQotICAgIHByZS1idWlsdCBUY2wvVGsgaW4gZWl0aGVyIC4uXC4uXHRjbHRrIGZvciAzMi1iaXQgb3IgLi5cLi5cdGNsdGs2NCBmb3IKLSAgICA2NC1iaXQgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4gIFNlZSBiZWxvdyBmb3IgaW5zdHJ1Y3Rpb25zIHRvIGJ1aWxkCi0gICAgVGNsL1RrLgorVGhlIGZvbGxvd2luZyBQeXRob24tY29udHJvbGxlZCBzdWItcHJvamVjdHMgd3JhcCBleHRlcm5hbCBwcm9qZWN0cy4KK05vdGUgdGhhdCB0aGVzZSBleHRlcm5hbCBsaWJyYXJpZXMgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGEgd29ya2luZworaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGRvIGltcGxlbWVudCBzZXZlcmFsIG1ham9yIGZlYXR1cmVzLiAgU2VlIHRoZQorIkdldHRpbmcgRXh0ZXJuYWwgU291cmNlcyIgc2VjdGlvbiBiZWxvdyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorYWJvdXQgZ2V0dGluZyB0aGUgc291cmNlIGZvciBidWlsZGluZyB0aGVzZSBsaWJyYXJpZXMuICBUaGUgc3ViLXByb2plY3RzCithcmU6CiBfYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiemlwMiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKKyAgICBQeXRob24gd3JhcHBlciBmb3IgdmVyc2lvbiAxLjAuNiBvZiB0aGUgbGliYnppcDIgY29tcHJlc3Npb24gbGlicmFyeQorICAgIEhvbWVwYWdlOgogICAgICAgICBodHRwOi8vd3d3LmJ6aXAub3JnLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuNgotCi0gICAgKiogTk9URTogaWYgeW91IHVzZSB0aGUgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwoLWFtZDY0KS5iYXQgYXBwcm9hY2ggZm9yCi0gICAgb2J0YWluaW5nIGV4dGVybmFsIHNvdXJjZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIHNvdXJjZQotICAgIGFib3ZlIHZpYSBzdWJ2ZXJzaW9uLiAqKgogX2x6bWEKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmx6bWEgY29tcHJlc3Npb24gbGlicmFyeS4KLQotICAgIERvd25sb2FkIHRoZSBwcmUtYnVpbHQgV2luZG93cyBiaW5hcmllcyBmcm9tIGh0dHA6Ly90dWthYW5pLm9yZy94ei8sIGFuZAotICAgIGV4dHJhY3QgdG8gLi5ceHotNS4wLjMuIElmIHlvdSBhcmUgdXNpbmcgYSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIGxpYmx6bWEsCi0gICAgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gcmVuYW1lIHRoZSBkaXJlY3RvcnkgZnJvbSB4ei08VkVSU0lPTj4gdG8geHotNS4wLjMuCi0KKyAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmx6bWEgY29tcHJlc3Npb24gbGlicmFyeSwgdXNpbmcgcHJlLWJ1aWx0CisgICAgYmluYXJpZXMgb2YgWFogVXRpbHMgdmVyc2lvbiA1LjAuNQorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vdHVrYWFuaS5vcmcveHovCiBfc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC4xZSBvZiB0aGUgT3BlblNTTCBzZWN1cmUgc29ja2V0cworICAgIGxpYnJhcnksIHdoaWNoIGlzIGJ1aWx0IGJ5IHNzbC52Y3hwcm9qCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvCiAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKKyAgICBCdWlsZGluZyBPcGVuU1NMIHJlcXVpcmVzIG5hc20uZXhlICh0aGUgTmV0d2lkZSBBc3NlbWJsZXIpLCB2ZXJzaW9uCisgICAgMi4xMCBvciBuZXdlciBmcm9tCisgICAgICAgIGh0dHA6Ly93d3cubmFzbS51cy8KKyAgICB0byBiZSBzb21ld2hlcmUgb24geW91ciBQQVRILiAgTW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgT3BlblNTTCBtYXkKKyAgICBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZiB0ZXN0cyBkb24ndCBwYXNzLAorICAgIHlvdSBzaG91bGQgZmlyc3QgdHJ5IHRvIHVwZGF0ZSBOQVNNIGFuZCBkbyBhIGZ1bGwgcmVidWlsZCBvZgorICAgIE9wZW5TU0wuCiAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4xZQotCi0gICAgKiogTk9URTogaWYgeW91IHVzZSB0aGUgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwoLWFtZDY0KS5iYXQgYXBwcm9hY2ggZm9yCi0gICAgb2J0YWluaW5nIGV4dGVybmFsIHNvdXJjZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIHNvdXJjZQotICAgIGFib3ZlIHZpYSBzdWJ2ZXJzaW9uLiAqKgotCi0gICAgQWx0ZXJuYXRpdmVseSwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcuCi0gICAgWW91IGNhbiAodGhlb3JldGljYWxseSkgdXNlIGFueSB2ZXJzaW9uIG9mIE9wZW5TU0wgeW91IGxpa2UgLSB0aGUKLSAgICBidWlsZCBwcm9jZXNzIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi0gICAgWW91IG11c3QgaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgMi4xMCBvciBuZXdlciBmcm9tCi0gICAgICAgIGh0dHA6Ly9uYXNtLnNmLm5ldAotICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc20uZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4gTW9yZSByZWNlbnQKLSAgICB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heSBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZgotICAgIHRlc3RzIGRvbid0IHBhc3MsIHlvdSBzaG91bGQgZmlyc3QgdHJ5IHRvIHVwZGF0ZSBOQVNNIGFuZCBkbyBhIGZ1bGwKLSAgICByZWJ1aWxkIG9mIE9wZW5TU0wuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KKyAgICBJZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbQorICAgIHB5dGhvbi5vcmcncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIFBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlCisgICAgbmVjZXNzYXJ5IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuICBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZQorICAgIGZyb20KICAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbQotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCisgICAgVGhlIHN2bi5weXRob24ub3JnIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWx0IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkKKyAgICBmaWxlcy4KIAotICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZSBpbmNsdWRlZC4KLSAgICBGb3Igbm93IFJDNSwgTURDMiBhbmQgSURFQSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuIFlvdSBtYXkgaGF2ZQotICAgIHRvIG1hbnVhbGx5IHJlbW92ZSAkKE9CSl9EKVxpXyoub2JqIGZyb20gbXNcbnQubWFrIGlmIHRoZSBidWlsZCBwcm9jZXNzCi0gICAgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgZmlsZXMgb3IgZm9yYmlkZGVuIElERUEuIEFnYWluIHRoZSBmaWxlcyBwcm92aWRlZAotICAgIGluIHRoZSBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYXJlIGFscmVhZHkgZml4ZWQuCisgICAgVGhlIGJ1aWxkIHByb2Nlc3MgbWFrZXMgc3VyZSB0aGF0IG5vIHBhdGVudGVkIGFsZ29yaXRobXMgYXJlCisgICAgaW5jbHVkZWQuICBGb3Igbm93IFJDNSwgTURDMiBhbmQgSURFQSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuCisgICAgWW91IG1heSBoYXZlIHRvIG1hbnVhbGx5IHJlbW92ZSAkKE9CSl9EKVxpXyoub2JqIGZyb20gbXNcbnQubWFrIGlmCisgICAgdXNpbmcgb2ZmaWNpYWwgc291cmNlczsgdGhlIHN2bi5weXRob24ub3JnLWhvc3RlZCB2ZXJzaW9uIGlzIGFscmVhZHkKKyAgICBmaXhlZC4KIAotICAgIFRoZSBNU1ZDIHByb2plY3Qgc2ltcGx5IGludm9rZXMgUENCdWlsZC9idWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCisgICAgVGhlIHNzbC52Y3hwcm9qIHN1Yi1wcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDYnVpbGQvYnVpbGRfc3NsLnB5LAorICAgIHdoaWNoIGxvY2F0ZXMgYW5kIGJ1aWxkcyBPcGVuU1NMLgogCiAgICAgYnVpbGRfc3NsLnB5IGF0dGVtcHRzIHRvIGNhdGNoIHRoZSBtb3N0IGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgbm90CiAgICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwKLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgKGVnLCB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UKLSAgICBhIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5CisgICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLiAgSWYKKyAgICB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkgKGUuZy4sCisgICAgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlIGEKKyAgICBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQogICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCiAKLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KKyAgICBUaGUgc3NsIHN1Yi1wcm9qZWN0IGRvZXMgbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gY2xlYW4gdGhlIE9wZW5TU0wKKyAgICBidWlsZDsgaWYgeW91IG5lZWQgdG8gcmVidWlsZCwgeW91J2xsIGhhdmUgdG8gY2xlYW4gaXQgYnkgaGFuZC4KK19zcWxpdGUzCisgICAgV3JhcHMgU1FMaXRlIDMuOC4xLCB3aGljaCBpcyBpdHNlbGYgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy8KK190a2ludGVyCisgICAgV3JhcHMgdmVyc2lvbiA4LjYuMSBvZiB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4KKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3d3dy50Y2wudGsvCiAKLVRoZSBzdWJwcm9qZWN0cyBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCBhcwotc3VjaCwgYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGRvd25sb2FkIHRoZSByZWxldmFudCBzb3VyY2UKLWZpbGVzIGZvciBlYWNoIHByb2plY3QgYmVmb3JlIHRoZXkgY2FuIGJlIGJ1aWx0LiAgVGhlIGJ1aWxkYm90cyBkbyB0aGlzIGVhY2gKLXRpbWUgdGhleSdyZSBidWlsdCwgc28gdGhlIGVhc2llc3QgYXBwcm9hY2ggaXMgdG8gcnVuIGVpdGhlciBleHRlcm5hbC5iYXQgb3IKLWV4dGVybmFsLWFtZDY0LmJhdCBpbiB0aGUgLi5cVG9vbHNcYnVpbGRib3QgZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorICAgIFVubGlrZSB0aGUgb3RoZXIgZXh0ZXJuYWwgbGlicmFyaWVzIGxpc3RlZCBhYm92ZSwgVGsgbXVzdCBiZSBidWlsdAorICAgIHNlcGFyYXRlbHkgYmVmb3JlIHRoZSBfdGtpbnRlciBtb2R1bGUgY2FuIGJlIGJ1aWx0LiBUaGlzIG1lYW5zIHRoYXQKKyAgICBhIHByZS1idWlsdCBUY2wvVGsgaW5zdGFsbGF0aW9uIGlzIGV4cGVjdGVkIGluIC4uXC4uXHRjbHRrICh0Y2x0azY0CisgICAgZm9yIDY0LWJpdCkgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuICBTZWUgIkdldHRpbmcgRXh0ZXJuYWwKKyAgICBTb3VyY2VzIiBiZWxvdyBmb3IgdGhlIGVhc2llc3QgbWV0aG9kIHRvIGVuc3VyZSBUY2wvVGsgaXMgYnVpbHQuCiAKLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmtcUENidWlsZD5jZCAuLgotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuaz5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKIAotVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGZyb20gaHR0cDovL3N2bi5weXRob24ub3JnL2V4dGVybmFsCi12aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbSBpbgotLi5cLi4gKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4gIFRoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwKLWFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZiBUY2wvVGs7IHRoZXJlIGFyZW4ndCBhbnkgZXF1aXZhbGVudCBiYXRjaCBmaWxlcwotZm9yIGJ1aWxkaW5nIHJlbGVhc2UgdmVyc2lvbnMgb2YgVGNsL1RrIGx5aW5nIGFyb3VuZCBpbiB0aGUgVG9vbHNcYnVpbGRib3QKLWRpcmVjdG9yeS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZSB2ZXJzaW9uIG9mIFRjbC9UayBpdCBpc24ndCBoYXJkCi10aG91Z2gsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBleHRlcm5hbCgtYW1kNjQpLmJhdCBmaWxlIGFuZCBmaW5kIHRoZQotdHdvIG5tYWtlIGxpbmVzLCB0aGVuIGNhbGwgZWFjaCBvbmUgd2l0aG91dCB0aGUgJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKK0dldHRpbmcgRXh0ZXJuYWwgU291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IGNhdGVnb3J5IG9mIHN1Yi1wcm9qZWN0cyBsaXN0ZWQgYWJvdmUgd3JhcCBleHRlcm5hbCBwcm9qZWN0cworUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzIHN1Y2ggYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluCitvcmRlciB0byBkb3dubG9hZCB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGZvciBlYWNoIHByb2plY3QgYmVmb3JlIHRoZXkKK2NhbiBiZSBidWlsdC4gIFRoZSBidWlsZGJvdHMgbXVzdCBlbnN1cmUgdGhhdCBhbGwgbGlicmFyaWVzIGFyZSBwcmVzZW50CitiZWZvcmUgYnVpbGRpbmcsIHNvIHRoZSBlYXNpZXN0IGFwcHJvYWNoIGlzIHRvIHJ1biBlaXRoZXIgZXh0ZXJuYWwuYmF0CitvciBleHRlcm5hbC1hbWQ2NC5iYXQgKGRlcGVuZGluZyBvbiBwbGF0Zm9ybSkgaW4gdGhlIC4uXFRvb2xzXGJ1aWxkYm90CitkaXJlY3RvcnkgZnJvbSAuLlwsIGkuZS46CisKKyAgICBDOlxweXRob25cY3B5dGhvblxQQ2J1aWxkPmNkIC4uCisgICAgQzpccHl0aG9uXGNweXRob24+VG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwuYmF0CisKK1RoaXMgZXh0cmFjdHMgYWxsIHRoZSBleHRlcm5hbCBzdWItcHJvamVjdHMgZnJvbQorICAgIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbAordmlhIFN1YnZlcnNpb24gKHNvIHlvdSdsbCBuZWVkIGFuIHN2bi5leGUgb24geW91ciBQQVRIKSBhbmQgcGxhY2VzIHRoZW0KK2luIC4uXC4uIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZG93bmxvYWQgc291cmNlcyBmcm9tIGVhY2ggcHJvamVjdCdzIGhvbWVwYWdlLAordGhvdWdoIHlvdSBtYXkgaGF2ZSB0byBjaGFuZ2UgdGhlIG5hbWVzIG9mIHNvbWUgZm9sZGVycyBpbiBvcmRlciB0byBtYWtlCit0aGluZ3Mgd29yay4gIEZvciBpbnN0YW5jZSwgaWYgeW91IHdlcmUgdG8gZG93bmxvYWQgYSB2ZXJzaW9uIDUuMC43IG9mCitYWiBVdGlscywgeW91IHdvdWxkIG5lZWQgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBpbnRvIC4uXC4uXHh6LTUuMC41Cithbnl3YXksIHNpbmNlIHRoYXQgaXMgd2hlcmUgdGhlIHNvbHV0aW9uIGlzIHNldCB0byBsb29rIGZvciB4ei4gIFRoZQorc2FtZSBpcyB0cnVlIGZvciBhbGwgb3RoZXIgZXh0ZXJuYWwgcHJvamVjdHMuCisKK1RoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwgYWxzbyBidWlsZCBhIGRlYnVnIGJ1aWxkIG9mCitUY2wvVGssIGJ1dCB0aGVyZSBhcmVuJ3QgYW55IGVxdWl2YWxlbnQgYmF0Y2ggZmlsZXMgZm9yIGJ1aWxkaW5nIHJlbGVhc2UKK3ZlcnNpb25zIG9mIFRjbC9UayBjdXJyZW50bHkgYXZhaWxhYmxlLiAgSWYgeW91IG5lZWQgdG8gYnVpbGQgYSByZWxlYXNlCit2ZXJzaW9uIG9mIFRjbC9UaywganVzdCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgZXh0ZXJuYWwoLWFtZDY0KS5iYXQKK2ZpbGUgYW5kIGZpbmQgdGhlIHR3byBubWFrZSBsaW5lcywgdGhlbiBjYWxsIGVhY2ggb25lIHdpdGhvdXQgdGhlCisnREVCVUc9MScgcGFyYW1ldGVyLCBpLmUuOgogCiBUaGUgZXh0ZXJuYWwtYW1kNjQuYmF0IGZpbGUgY29udGFpbnMgdGhpcyBmb3IgdGNsOgogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKQEAgLTIwMiw4OSArMjYxLDU0IEBACiBTbyBmb3IgYSByZWxlYXNlIGJ1aWxkLCB5b3UnZCBjYWxsIGl0IGFzOgogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCiAKLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0gICAgWFhYIE91ciBpbnN0YWxsZXIgY29waWVzIGEgbG90IG9mIHN0dWZmIG91dCBvZiB0aGUgVGNsL1RrIGluc3RhbGwKLSAgICBYWFggZGlyZWN0b3J5LiAgSXMgYWxsIG9mIHRoYXQgcmVhbGx5IG5lZWRlZCBmb3IgUHl0aG9uIHVzZSBvZiBUY2wvVGs/CitOb3RlIHRoYXQgdGhlIGFib3ZlIGNvbW1hbmQgaXMgY2FsbGVkIGZyb20gd2l0aGluIC4uXC4uXHRjbC04LjYuMS4wXHdpbgorKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KTsgZG9uJ3QgZm9yZ2V0IHRvIGJ1aWxkIFRrIGFzIHdlbGwgYXMgVGNsIQogCi1UaGlzIHdpbGwgYmUgY2xlYW5lZCB1cCBpbiB0aGUgZnV0dXJlOyBpZGVhbGx5IFRjbC9UayB3aWxsIGJlIGJyb3VnaHQgaW50byBvdXIKLXBjYnVpbGQuc2xuIGFzIGN1c3RvbSAudmN4cHJvaiBmaWxlcywganVzdCBhcyB3ZSd2ZSByZWNlbnRseSBkb25lIHdpdGggdGhlCi1zcWxpdGUzLnZjeHByb2ogZmlsZSwgd2hpY2ggd2lsbCByZW1vdmUgdGhlIG5lZWQgZm9yIFRjbC9UayB0byBiZSBidWlsdAotc2VwYXJhdGVseSB2aWEgYSBiYXRjaCBmaWxlLgorVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1OTY4Cit0cmFja3MgYWRkaW5nIGEgbmV3IHRjbHRrLnZjeHByb2ogZmlsZSB0aGF0IHdpbGwgYnVpbGQgVGNsL1RrIGFuZCBUaXgKK3RoZSBzYW1lIHdheSB0aGUgb3RoZXIgZXh0ZXJuYWwgcHJvamVjdHMgbGlzdGVkIGFib3ZlIGFyZSBidWlsdC4KIAotWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDg6Ci0gICAgSGF2aW5nIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBpbiAuLlwuLiByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSBpcyBhCi0gICAgYml0IG9mIGEgbnVpc2FuY2Ugd2hlbiB5b3UncmUgd29ya2luZyBvbiBweTNrIGFuZCB0cnVuayBpbiBwYXJhbGxlbCBhbmQKLSAgICB5b3VyIGRpcmVjdG9yeSBsYXlvdXQgbWltaWNzIHRoYXQgb2YgUHl0aG9uJ3Mgc3VidmVyc2lvbiBsYXlvdXQsIGUuZy46Ci0KLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xweTNrCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xyZWxlYXNlMjUtbWFpbnQKLQotICAgIEknZCBsaWtlIHRvIGNoYW5nZSB0aGluZ3Mgc28gdGhhdCBleHRlcm5hbCBzdWJwcm9qZWN0cyBhcmUgZmV0Y2hlZCBmcm9tCi0gICAgLi5cZXh0ZXJuYWwgaW5zdGVhZCBvZiAuLlwuLiwgdGhlbiBwcm92aWRlIHNvbWUgaGVscGVyIHNjcmlwdHMgb3IgYmF0Y2gKLSAgICBmaWxlcyB0aGF0IHdvdWxkIHNldCB1cCBhIG5ldyAuLlxleHRlcm5hbCBkaXJlY3Rvcnkgd2l0aCBzdm4gY2hlY2tvdXRzIG9mCi0gICAgdGhlIHJlbGV2YW50IGJyYW5jaGVzIGluIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC8sIG9yCi0gICAgYWx0ZXJuYXRpdmVseSwgdXNlIGp1bmN0aW9ucyB0byBsaW5rIC4uXGV4dGVybmFsIHdpdGggYSBwcmUtZXhpc3RpbmcKLSAgICBleHRlcm5hbHMgZGlyZWN0b3J5IGJlaW5nIHVzZWQgYnkgYW5vdGhlciBicmFuY2guICBpLmUuIGlmIEknbSB1c3VhbGx5Ci0gICAgd29ya2luZyBvbiB0cnVuayAoYW5kIGhhdmUgcHJldmlvdXNseSBjcmVhdGVkIHRydW5rXGV4dGVybmFsIHZpYSB0aGUKLSAgICBwcm92aWRlZCBiYXRjaCBmaWxlKSwgYW5kIHdhbnQgdG8gZG8gc29tZSB3b3JrIG9uIHB5M2ssIEknZCBzZXQgdXAgYQotICAgIGp1bmN0aW9uIGFzIGZvbGxvd3MgKHVzaW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFib3ZlIGFzIGFuIGV4YW1wbGUpOgotCi0gICAgICAgIEM6XC4uXHB5dGhvblx0cnVua1xleHRlcm5hbCA8LSBhbHJlYWR5IGV4aXN0cyBhbmQgaGFzIGJ1aWx0IHZlcnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMKLQotICAgICAgICBDOlwuLlxweXRob25cYnJhbmNoZXNccHkzaz5saW5rZC5leGUgZXh0ZXJuYWwgLi5cLi5cdHJ1bmtcZXh0ZXJuYWwKLSAgICAgICAgTGluayBjcmVhdGVkIGF0OiBleHRlcm5hbAotCi0gICAgT25seSBhIHNsaWdodCB0d2VhayB3b3VsZCBiZSBuZWVkZWQgdG8gdGhlIGJ1aWxkYm90cyBzdWNoIHRoYXQgYm90cwotICAgIGJ1aWxkaW5nIHRydW5rIGFuZCBweTNrIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSBzYW1lIGZhY2lsaXR5LiAgKDIuNS54Ci0gICAgYnVpbGRzIG5lZWQgdG8gYmUga2VwdCBzZXBhcmF0ZSBhcyB0aGV5J3JlIHVzaW5nIFZpc3VhbCBTdHVkaW8gNy4xLikKLS9YWFggdHJlbnQubmVsc29uIDAyLUFwci0wOAotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT2ZmaWNpYWwgc3VwcG9ydCBmb3IgSXRhbml1bSBidWlsZHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUgYnVpbGQuIFBsZWFzZQotY29udGFjdCB1cyBhbmQgcHJvdmlkZSBwYXRjaGVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBJdGFuaXVtIGJ1aWxkcy4KIAogQnVpbGRpbmcgZm9yIEFNRDY0CiAtLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMuIFlvdSBqdXN0Ci1oYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04gZW52aXJvbm1lbnQgdmFyaWFibGUKLW11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksIHRvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24uCitUaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcywKK3lvdSBqdXN0IGhhdmUgdG8gc2V0IHg2NCBhcyBwbGF0Zm9ybS4gSW4gYWRkaXRpb24sIHRoZSBIT1NUX1BZVEhPTgorZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byBhIFB5dGhvbiBpbnRlcnByZXRlciAoYXQgbGVhc3QgMi40KSwKK3RvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gZnJvbSBXaW4zMi4gIE5vdGUgdGhhdCBWaXN1YWwgU3R1ZGlvCityZXF1aXJlcyBlaXRoZXIgU3RhbmRhcmQgRWRpdGlvbiBvciBiZXR0ZXIsIG9yIEV4cHJlc3MgRWRpdGlvbiB3aXRoIHRoZQorV2luZG93cyBTREsgNjQtYml0IGNvbXBpbGVycyB0byBiZSBhdmFpbGFibGUgaW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0CitiaW5hcmllcy4KIAotQnVpbGRpbmcgUHl0aG9uIFVzaW5nIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1pY3Jvc29mdCBoYXMgd2l0aGRyYXduIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIsIHNvIHRoaXMgY2FuIG5vIGxvbmdlcgotYmUgY29uc2lkZXJlZCBhIHN1cHBvcnRlZCBvcHRpb24uIEluc3RlYWQgeW91IGNhbiB1c2UgdGhlIGZyZWUgVlMgQysrIEV4cHJlc3MKLUVkaXRpb24uCiAKIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBzb2x1dGlvbiBoYXMgdHdvIGNvbmZpZ3VyYXRpb25zIGZvciBQR08uIFRoZSBQR0luc3RydW1lbnQKLWNvbmZpZ3VyYXRpb24gbXVzdCBiZSBidWlsZCBmaXJzdC4gVGhlIFBHSW5zdHJ1bWVudCBiaW5hcmllcyBhcmUKLWxpbmtlZCBhZ2FpbnN0IGEgcHJvZmlsaW5nIGxpYnJhcnkgYW5kIGNvbnRhaW4gZXh0cmEgZGVidWcKLWluZm9ybWF0aW9uLiBUaGUgUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kCi1nZW5lcmF0ZXMgb3B0aW1pemVkIGJpbmFyaWVzLgorY29uZmlndXJhdGlvbiBtdXN0IGJlIGJ1aWx0IGZpcnN0LiBUaGUgUEdJbnN0cnVtZW50IGJpbmFyaWVzIGFyZSBsaW5rZWQKK2FnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZyBpbmZvcm1hdGlvbi4gVGhlCitQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHRha2VzIHRoZSBwcm9maWxpbmcgZGF0YSBhbmQgZ2VuZXJhdGVzIG9wdGltaXplZAorYmluYXJpZXMuCiAKLVRoZSBidWlsZF9wZ28uYmF0IHNjcmlwdCBhdXRvbWF0ZXMgdGhlIGNyZWF0aW9uIG9mIG9wdGltaXplZCBiaW5hcmllcy4gSXQKLWNyZWF0ZXMgdGhlIFBHSSBmaWxlcywgcnVucyB0aGUgdW5pdCB0ZXN0IHN1aXRlIG9yIFB5QmVuY2ggd2l0aCB0aGUgUEdJCi1weXRob24gYW5kIGZpbmFsbHkgY3JlYXRlcyB0aGUgb3B0aW1pemVkIGZpbGVzLgorVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLgorSXQgY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZQorUEdJIHB5dGhvbiwgYW5kIGZpbmFsbHkgY3JlYXRlcyB0aGUgb3B0aW1pemVkIGZpbGVzLgogCi1odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuMTAwKS5hc3B4CitTZWUKKyAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuMTAwKS5hc3B4Citmb3IgbW9yZSBvbiB0aGlzIHRvcGljLgorCiAKIFN0YXRpYyBsaWJyYXJ5CiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgc29sdXRpb24gaGFzIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXRpYyBsaWJyYXJpZXMuIEhvd2V2ZXIgaXQgaXMgZWFzeQotaXQgYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0IHRoZQotIkNvbmZpZ3VyYXRpb24gVHlwZSIgdG8gIlN0YXRpYyBMaWJyYXJ5ICgubGliKSIgYW5kIGFsdGVyIHRoZSBwcmVwcm9jZXNzb3IKLW1hY3JvICJQeV9FTkFCTEVfU0hBUkVEIiB0byAiUHlfTk9fRU5BQkxFX1NIQVJFRCIuIFlvdSBtYXkgYWxzbyBoYXZlIHRvCi1jaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTCAoL01EKSIgdG8KLSJNdWx0aS10aHJlYWRlZCAoL01UKSIuCitUaGUgc29sdXRpb24gaGFzIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXRpYyBsaWJyYXJpZXMuIEhvd2V2ZXIgaXQgaXMKK2Vhc3kgdG8gYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0Cit0aGUgIkNvbmZpZ3VyYXRpb24gVHlwZSIgdG8gIlN0YXRpYyBMaWJyYXJ5ICgubGliKSIgYW5kIGFsdGVyIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvICJQeV9FTkFCTEVfU0hBUkVEIiB0byAiUHlfTk9fRU5BQkxFX1NIQVJFRCIuIFlvdSBtYXkKK2Fsc28gaGF2ZSB0byBjaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTAorKC9NRCkiIHRvICJNdWx0aS10aHJlYWRlZCAoL01UKSIuCisKIAogVmlzdWFsIFN0dWRpbyBwcm9wZXJ0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5Myw2ICszMTcsNyBAQAogKCoucHJvcHMpLiBUaGUgcHJvcGVydGllcyBjYW4gYmUgdmlld2VkIGFuZCBhbHRlcmVkIGluIHRoZSBQcm9wZXJ0eQogTWFuYWdlciAoVmlldyAtPiBPdGhlciBXaW5kb3dzIC0+IFByb3BlcnR5IE1hbmFnZXIpLgogCitUaGUgcHJvcGVydHkgZmlsZXMgdXNlZCBhcmUgKCstLSA9ICJhbHNvIGltcG9ydHMiKToKICAqIGRlYnVnIChkZWJ1ZyBtYWNybzogX0RFQlVHKQogICogcGdpbnN0cnVtZW50IChQR08pCiAgKiBwZ3VwZGF0ZSAoUEdPKQpAQCAtMzA1LDE1ICszMzAsMTggQEAKICAgICArLS0gcHlwcm9qZWN0CiAgKiBweXByb2plY3QgKGJhc2Ugc2V0dGluZ3MgZm9yIGFsbCBwcm9qZWN0cywgdXNlciBtYWNyb3MgbGlrZSBQeURsbE5hbWUpCiAgKiByZWxlYXNlIChyZWxlYXNlIG1hY3JvOiBOREVCVUcpCisgKiBzcWxpdGUzICh1c2VkIG9ubHkgYnkgc3FsaXRlMy52Y3hwcm9qKQogICogeDY0IChBTUQ2NCAvIHg2NCBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR0aW5ncykKIAotVGhlIHB5cHJvamVjdCBwcm9wZXJ0eWZpbGUgZGVmaW5lcyBfV0lOMzIgYW5kIHg2NCBkZWZpbmVzIF9XSU42NCBhbmQgX01fWDY0Ci1hbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndCBhbHdheXMga25vdwotYWJvdXQgdGhlIG1hY3JvcyBhbmQgY29uZnVzZSB0aGUgdXNlciB3aXRoIGZhbHNlIGluZm9ybWF0aW9uLgorVGhlIHB5cHJvamVjdCBwcm9wZXJ0eSBmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kCitfTV9YNjQgYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QKK2Fsd2F5cyBrbm93IGFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZQoraW5mb3JtYXRpb24uCiAKLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCisKK1lvdXIgT3duIEV4dGVuc2lvbiBETExzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwgKC5weWQpLCB0aGVyZSdzIGFuCitleGFtcGxlIHdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uXFBDXGV4YW1wbGVcOyByZWFkIHRoZQorZmlsZSByZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUGFyc2VyL1B5dGhvbi5hc2RsIGIvUGFyc2VyL1B5dGhvbi5hc2RsCmluZGV4IGMyNGQ4NDAuLmRlYmQ4OWUgMTAwNjQ0Ci0tLSBhL1BhcnNlci9QeXRob24uYXNkbAorKysgYi9QYXJzZXIvUHl0aG9uLmFzZGwKQEAgLTEsNCArMSw0IEBACi0tLSBBU0RMJ3MgZml2ZSBidWlsdGluIHR5cGVzIGFyZSBpZGVudGlmaWVyLCBpbnQsIHN0cmluZywgYnl0ZXMsIG9iamVjdAorLS0gQVNETCdzIHNpeCBidWlsdGluIHR5cGVzIGFyZSBpZGVudGlmaWVyLCBpbnQsIHN0cmluZywgYnl0ZXMsIG9iamVjdCwgc2luZ2xldG9uCiAKIG1vZHVsZSBQeXRob24KIHsKQEAgLTY5LDggKzY5LDggQEAKICAgICAgICAgIHwgTnVtKG9iamVjdCBuKSAtLSBhIG51bWJlciBhcyBhIFB5T2JqZWN0LgogICAgICAgICAgfCBTdHIoc3RyaW5nIHMpIC0tIG5lZWQgdG8gc3BlY2lmeSByYXcsIHVuaWNvZGUsIGV0Yz8KICAgICAgICAgIHwgQnl0ZXMoYnl0ZXMgcykKKyAgICAgICAgIHwgTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSkKICAgICAgICAgIHwgRWxsaXBzaXMKLSAgICAgICAgIC0tIG90aGVyIGxpdGVyYWxzPyBib29scz8KIAogICAgICAgICAgLS0gdGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGNhbiBhcHBlYXIgaW4gYXNzaWdubWVudCBjb250ZXh0CiAgICAgICAgICB8IEF0dHJpYnV0ZShleHByIHZhbHVlLCBpZGVudGlmaWVyIGF0dHIsIGV4cHJfY29udGV4dCBjdHgpCkBAIC0xMDMsMTEgKzEwMywxMSBAQAogICAgIGV4Y2VwdGhhbmRsZXIgPSBFeGNlcHRIYW5kbGVyKGV4cHI/IHR5cGUsIGlkZW50aWZpZXI/IG5hbWUsIHN0bXQqIGJvZHkpCiAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCi0gICAgYXJndW1lbnRzID0gKGFyZyogYXJncywgaWRlbnRpZmllcj8gdmFyYXJnLCBleHByPyB2YXJhcmdhbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgYXJnKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyPyBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHI/IGt3YXJnYW5ub3RhdGlvbiwgZXhwciogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICBleHByKiBrd19kZWZhdWx0cykKKyAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBhcmc/IHZhcmFyZywgYXJnKiBrd29ubHlhcmdzLCBleHByKiBrd19kZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgYXJnPyBrd2FyZywgZXhwciogZGVmYXVsdHMpCisKICAgICBhcmcgPSAoaWRlbnRpZmllciBhcmcsIGV4cHI/IGFubm90YXRpb24pCisgICAgICAgICAgIGF0dHJpYnV0ZXMgKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICAgLS0ga2V5d29yZCBhcmd1bWVudHMgc3VwcGxpZWQgdG8gY2FsbAogICAgIGtleXdvcmQgPSAoaWRlbnRpZmllciBhcmcsIGV4cHIgdmFsdWUpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbC5weSBiL1BhcnNlci9hc2RsLnB5CmluZGV4IDA4YWEwNWIuLmZjMWIxNmMgMTAwNjQ0Ci0tLSBhL1BhcnNlci9hc2RsLnB5CisrKyBiL1BhcnNlci9hc2RsLnB5CkBAIC0xNiw4ICsxNiw5IEBACiAKIGltcG9ydCBzcGFyawogCi1kZWYgb3V0cHV0KHN0cmluZyk6Ci0gICAgc3lzLnN0ZG91dC53cml0ZShzdHJpbmcgKyAiXG4iKQorZGVmIG91dHB1dCgqc3RyaW5ncyk6CisgICAgZm9yIHMgaW4gc3RyaW5nczoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIocykgKyAiXG4iKQogCiAKIGNsYXNzIFRva2VuKG9iamVjdCk6CkBAIC0xNTgsMTEgKzE1OSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgYXR0cmlidXRlcywgZm91bmQgJXMiICUgaWQpCiAgICAgICAgIHJldHVybiBTdW0oc3VtLCBhdHRyaWJ1dGVzKQogCi0gICAgZGVmIHBfcHJvZHVjdChzZWxmLCBpbmZvKToKKyAgICBkZWYgcF9wcm9kdWN0XzAoc2VsZiwgaW5mbyk6CiAgICAgICAgICIgcHJvZHVjdCA6Oj0gKCBmaWVsZHMgKSAiCiAgICAgICAgIF8wLCBmaWVsZHMsIF8xID0gaW5mbwogICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMpCiAKKyAgICBkZWYgcF9wcm9kdWN0XzEoc2VsZiwgaW5mbyk6CisgICAgICAgICIgcHJvZHVjdCA6Oj0gKCBmaWVsZHMgKSBJZCAoIGZpZWxkcyApICIKKyAgICAgICAgXzAsIGZpZWxkcywgXzEsIGlkLCBfMiwgYXR0cmlidXRlcywgXzMgPSBpbmZvCisgICAgICAgIGlmIGlkLnZhbHVlICE9ICJhdHRyaWJ1dGVzIjoKKyAgICAgICAgICAgIHJhaXNlIEFTRExTeW50YXhFcnJvcihpZC5saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKKyAgICAgICAgcmV0dXJuIFByb2R1Y3QoZmllbGRzLCBhdHRyaWJ1dGVzKQorCiAgICAgZGVmIHBfc3VtXzAoc2VsZiwgY29uc3RydWN0b3IpOgogICAgICAgICAiIHN1bSA6Oj0gY29uc3RydWN0b3IgIgogICAgICAgICByZXR1cm4gW2NvbnN0cnVjdG9yWzBdXQpAQCAtMjIyLDcgKzIzMSw3IEBACiAgICAgICAgICIgZmllbGQgOjo9IElkID8gIgogICAgICAgICByZXR1cm4gRmllbGQodHlwZVswXSwgb3B0PVRydWUpCiAKLWJ1aWx0aW5fdHlwZXMgPSAoImlkZW50aWZpZXIiLCAic3RyaW5nIiwgImJ5dGVzIiwgImludCIsICJvYmplY3QiKQorYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIsICJzaW5nbGV0b24iKQogCiAjIGJlbG93IGlzIGEgY29sbGVjdGlvbiBvZiBjbGFzc2VzIHRvIGNhcHR1cmUgdGhlIEFTVCBvZiBhbiBBU1QgOi0pCiAjIG5vdCBzdXJlIGlmIGFueSBvZiB0aGUgbWV0aG9kcyBhcmUgdXNlZnVsIHlldCwgYnV0IEknbSBhZGRpbmcgdGhlbQpAQCAtMjg5LDExICsyOTgsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAiU3VtKCVzLCAlcykiICUgKHNlbGYudHlwZXMsIHNlbGYuYXR0cmlidXRlcykKIAogY2xhc3MgUHJvZHVjdChBU1QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWVsZHMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWVsZHMsIGF0dHJpYnV0ZXM9Tm9uZSk6CiAgICAgICAgIHNlbGYuZmllbGRzID0gZmllbGRzCisgICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgb3IgW10KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBpZiBzZWxmLmF0dHJpYnV0ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAiUHJvZHVjdCglcykiICUgc2VsZi5maWVsZHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiUHJvZHVjdCglcywgJXMpIiAlIChzZWxmLmZpZWxkcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBWaXNpdG9yQmFzZShvYmplY3QpOgogCkBAIC0zODUsNyArMzk4LDExIEBACiAgICAgc2Nhbm5lciA9IEFTRExTY2FubmVyKCkKICAgICBwYXJzZXIgPSBBU0RMUGFyc2VyKCkKIAotICAgIGJ1ZiA9IG9wZW4oZmlsZSkucmVhZCgpCisgICAgZiA9IG9wZW4oZmlsZSkKKyAgICB0cnk6CisgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgZmluYWxseToKKyAgICAgICAgZi5jbG9zZSgpCiAgICAgdG9rZW5zID0gc2Nhbm5lci50b2tlbml6ZShidWYpCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKHRva2VucykKQEAgLTQxNiw0ICs0MzMsNCBAQAogICAgICAgICAgICAgb3V0cHV0KCJDaGVjayBmYWlsZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIGRmbiBpbiBtb2QuZGZuczoKLSAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLnR5cGUpCisgICAgICAgICAgICAgICAgb3V0cHV0KGRmbi5uYW1lLCBkZm4udmFsdWUpCmRpZmYgLS1naXQgYS9QYXJzZXIvYXNkbF9jLnB5IGIvUGFyc2VyL2FzZGxfYy5weQppbmRleCAwYjZjODhjLi44MGU0MzJhIDEwMDc1NQotLS0gYS9QYXJzZXIvYXNkbF9jLnB5CisrKyBiL1BhcnNlci9hc2RsX2MucHkKQEAgLTIwOSw2ICsyMDksMTEgQEAKICAgICAgICAgc2VsZi5lbWl0KCJzdHJ1Y3QgXyUobmFtZSlzIHsiICUgbG9jYWxzKCksIGRlcHRoKQogICAgICAgICBmb3IgZiBpbiBwcm9kdWN0LmZpZWxkczoKICAgICAgICAgICAgIHNlbGYudmlzaXQoZiwgZGVwdGggKyAxKQorICAgICAgICBmb3IgZmllbGQgaW4gcHJvZHVjdC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgIyBydWRpbWVudGFyeSBhdHRyaWJ1dGUgaGFuZGxpbmcKKyAgICAgICAgICAgIHR5cGUgPSBzdHIoZmllbGQudHlwZSkKKyAgICAgICAgICAgIGFzc2VydCB0eXBlIGluIGFzZGwuYnVpbHRpbl90eXBlcywgdHlwZQorICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyAlczsiICUgKHR5cGUsIGZpZWxkLm5hbWUpLCBkZXB0aCArIDEpOwogICAgICAgICBzZWxmLmVtaXQoIn07IiwgZGVwdGgpCiAgICAgICAgIHNlbGYuZW1pdCgiIiwgZGVwdGgpCiAKQEAgLTQ5Myw3ICs0OTgsMTEgQEAKIAogICAgIGRlZiB2aXNpdEZpZWxkKHNlbGYsIGZpZWxkLCBuYW1lLCBzdW09Tm9uZSwgcHJvZD1Ob25lLCBkZXB0aD0wKToKICAgICAgICAgY3R5cGUgPSBnZXRfY190eXBlKGZpZWxkLnR5cGUpCi0gICAgICAgIHNlbGYuZW1pdCgiaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykpIHsiICUgZmllbGQubmFtZSwgZGVwdGgpCisgICAgICAgIGlmIGZpZWxkLm9wdDoKKyAgICAgICAgICAgIGNoZWNrID0gImV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkXyVzKSIgJSAoZmllbGQubmFtZSwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaGVjayA9ICJfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgc2VsZi5lbWl0KCJpZiAoJXMpIHsiICUgKGNoZWNrLCksIGRlcHRoLCByZWZsb3c9RmFsc2UpCiAgICAgICAgIHNlbGYuZW1pdCgiaW50IHJlczsiLCBkZXB0aCsxKQogICAgICAgICBpZiBmaWVsZC5zZXE6CiAgICAgICAgICAgICBzZWxmLmVtaXQoIlB5X3NzaXplX3QgbGVuOyIsIGRlcHRoKzEpCkBAIC01MTAsOSArNTE5LDkgQEAKICAgICAgICAgICAgIHNlbGYuZW1pdCgifSIsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOyIsIGRlcHRoKzEpCiAgICAgICAgICAgICBpZiBzZWxmLmlzU2ltcGxlVHlwZShmaWVsZCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoJXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeyIsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzIHZhbHVlOyIgJSBjdHlwZSwgZGVwdGgrMikKQEAgLTU1OCw2ICs1NjcsMTMgQEAKICAgICBkZWYgdmlzaXRQcm9kdWN0KHNlbGYsIHByb2QsIG5hbWUpOgogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBQeVR5cGVPYmplY3QgKiVzX3R5cGU7IiAlIG5hbWUsIDApCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqXyVzKHZvaWQqKTsiICUgbmFtZSwgMCkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9pZGVudGlmaWVyKGEubmFtZSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGNoYXIgKiVzX2F0dHJpYnV0ZXNbXSA9IHsiICUgbmFtZSwgMCkKKyAgICAgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJyIlcyIsJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgifTsiLCAwKQogICAgICAgICBpZiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgIGZvciBmIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9pZGVudGlmaWVyKGYubmFtZSkKQEAgLTgxOSw2ICs4MzUsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC04MzAsNiArODQ3LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtOTA0LDYgKzkzMiwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAiIiIsIDAsIHJlZmxvdz1GYWxzZSkKIAogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKSIsMCkKQEAgLTkyNSw2ICs5NjYsMTEgQEAKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgJXMsICVkKTsnICUKICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBuYW1lLCBmaWVsZHMsIGxlbihwcm9kLmZpZWxkcykpLCAxKQogICAgICAgICBzZWxmLmVtaXQoImlmICghJXNfdHlwZSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCisgICAgICAgIGlmIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCAlc19hdHRyaWJ1dGVzLCAlZCkpIHJldHVybiAwOyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBuYW1lLCBsZW4ocHJvZC5hdHRyaWJ1dGVzKSksIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghYWRkX2F0dHJpYnV0ZXMoJXNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOyIgJSBuYW1lLCAxKQogCiAgICAgZGVmIHZpc2l0U3VtKHNlbGYsIHN1bSwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAmQVNUX3R5cGUsIE5VTEwsIDApOycgJQpAQCAtOTY4LDcgKzEwMTQsNyBAQAogICAgICAgICBzZWxmLmVtaXQoImlmICghbSkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgc2VsZi5lbWl0KCJkID0gUHlNb2R1bGVfR2V0RGljdChtKTsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQVNUIiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7JywgMSkKLSAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKKyAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlDRl9PTkxZX0FTVCkgPCAwKScsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgicmV0dXJuIE5VTEw7IiwgMikKICAgICAgICAgZm9yIGRmbiBpbiBtb2QuZGZuczoKICAgICAgICAgICAgIHNlbGYudmlzaXQoZGZuKQpAQCAtMTA4MCw2ICsxMTI2LDEyIEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFyZXN1bHQpIHJldHVybiBOVUxMOyIsIDEpCiAgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgIHNlbGYudmlzaXRGaWVsZChmaWVsZCwgbmFtZSwgMSwgVHJ1ZSkKKyAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJ2YWx1ZSA9IGFzdDJvYmpfJXMoby0+JXMpOyIgJSAoYS50eXBlLCBhLm5hbWUpLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsiLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkXyVzLCB2YWx1ZSkgPCAwKScgJSBhLm5hbWUsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2dvdG8gZmFpbGVkOycsIDIpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ1B5X0RFQ1JFRih2YWx1ZSk7JywgMSkKICAgICAgICAgc2VsZi5mdW5jX2VuZCgpCiAKICAgICBkZWYgdmlzaXRDb25zdHJ1Y3RvcihzZWxmLCBjb25zLCBlbnVtLCBuYW1lKToKQEAgLTExNDIsNyArMTE5NCw4IEBACiAgICAgQ09ERSA9ICIiIgogUHlPYmplY3QqIFB5QVNUX21vZDJvYmoobW9kX3R5IHQpCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gYXN0Mm9ial9tb2QodCk7CiB9CiAKQEAgLTExNTYsNyArMTIwOSw4IEBACiAgICAgaW50IGlzaW5zdGFuY2U7CiAgICAgYXNzZXJ0KDAgPD0gbW9kZSAmJiBtb2RlIDw9IDIpOwogCi0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKGFzdCwgcmVxX3R5cGVbbW9kZV0pOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKQpAQCAtMTE3NCw3ICsxMjI4LDggQEAKIAogaW50IFB5QVNUX0NoZWNrKFB5T2JqZWN0KiBvYmopCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKSZBU1RfdHlwZSk7CiB9CiAiIiIKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyLmMgYi9QYXJzZXIvZ3JhbW1hci5jCmluZGV4IGYyYTI1Y2EuLmI1OTgyOTQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ncmFtbWFyLmMKKysrIGIvUGFyc2VyL2dyYW1tYXIuYwpAQCAtMjksNyArMjksNyBAQAogfQogCiBkZmEgKgotYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjaGFyICpuYW1lKQorYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQogewogICAgIGRmYSAqZDsKIApAQCAtNjMsNyArNjMsNyBAQAogICAgIHMtPnNfdXBwZXIgPSAwOwogICAgIHMtPnNfYWNjZWwgPSBOVUxMOwogICAgIHMtPnNfYWNjZXB0ID0gMDsKLSAgICByZXR1cm4gcyAtIGQtPmRfc3RhdGU7CisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QocyAtIGQtPmRfc3RhdGUsIFB5X2ludHB0cl90LCBpbnQpOwogfQogCiB2b2lkCkBAIC04NSw3ICs4NSw3IEBACiB9CiAKIGludAotYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cikKK2FkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgaW50IGk7CiAgICAgbGFiZWwgKmxiOwpAQCAtMTA1LDEzICsxMDUsMTMgQEAKICAgICBpZiAoUHlfRGVidWdGbGFnKQogICAgICAgICBwcmludGYoIkxhYmVsIEAgJThwLCAlZDogJXNcbiIsIGxsLCBsbC0+bGxfbmxhYmVscywKICAgICAgICAgICAgICAgIFB5R3JhbW1hcl9MYWJlbFJlcHIobGIpKTsKLSAgICByZXR1cm4gbGIgLSBsbC0+bGxfbGFiZWw7CisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobGIgLSBsbC0+bGxfbGFiZWwsIFB5X2ludHB0cl90LCBpbnQpOwogfQogCiAvKiBTYW1lLCBidXQgcmF0aGVyIGRpZXMgdGhhbiBhZGRzICovCiAKIGludAotZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpCitmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvUGFyc2VyL2dyYW1tYXIxLmMgYi9QYXJzZXIvZ3JhbW1hcjEuYwppbmRleCA0NDBiYTQ0Li4zMGE2ZjA3IDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hcjEuYworKysgYi9QYXJzZXIvZ3JhbW1hcjEuYwpAQCAtOSw5ICs5LDkgQEAKIC8qIFJldHVybiB0aGUgREZBIGZvciB0aGUgZ2l2ZW4gdHlwZSAqLwogCiBkZmEgKgotUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgcmVnaXN0ZXIgaW50IHR5cGUpCitQeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCBpbnQgdHlwZSkKIHsKLSAgICByZWdpc3RlciBkZmEgKmQ7CisgICAgZGZhICpkOwogI2lmIDEKICAgICAvKiBNYXNzaXZlIHNwZWVkLXVwICovCiAgICAgZCA9ICZnLT5nX2RmYVt0eXBlIC0gTlRfT0ZGU0VUXTsKQEAgLTE5LDcgKzE5LDcgQEAKICAgICByZXR1cm4gZDsKICNlbHNlCiAgICAgLyogT2xkLCBzbG93IHZlcnNpb24gKi8KLSAgICByZWdpc3RlciBpbnQgaTsKKyAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IGctPmdfbmRmYXMsIGQgPSBnLT5nX2RmYTsgLS1pID49IDA7IGQrKykgewogICAgICAgICBpZiAoZC0+ZF90eXBlID09IHR5cGUpCkBAIC0zMCw3ICszMCw3IEBACiAjZW5kaWYKIH0KIAotY2hhciAqCitjb25zdCBjaGFyICoKIFB5R3JhbW1hcl9MYWJlbFJlcHIobGFiZWwgKmxiKQogewogICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMDBdOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL215cmVhZGxpbmUuYyBiL1BhcnNlci9teXJlYWRsaW5lLmMKaW5kZXggOWYxZmMxZS4uYTFjNGI1YyAxMDA2NDQKLS0tIGEvUGFyc2VyL215cmVhZGxpbmUuYworKysgYi9QYXJzZXIvbXlyZWFkbGluZS5jCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICovCiAgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKT09RVJST1JfT1BFUkFUSU9OX0FCT1JURUQpIHsKICAgICAgICAgICAgIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCAxMCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdEV4KGhJbnRlcnJ1cHRFdmVudCwgMTAsIEZBTFNFKSkgewogICAgICAgICAgICAgY2FzZSBXQUlUX09CSkVDVF8wOgogICAgICAgICAgICAgICAgIFJlc2V0RXZlbnQoaEludGVycnVwdEV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogSW50ZXJydXB0ICovCkBAIC0xMDksMjIgKzEwOSwyNiBAQAogLyogUmVhZGxpbmUgaW1wbGVtZW50YXRpb24gdXNpbmcgZmdldHMoKSAqLwogCiBjaGFyICoKLVB5T1NfU3RkaW9SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfU3RkaW9SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcHI7CisKICAgICBuID0gMTAwOwotICAgIGlmICgocCA9IChjaGFyICopUHlNZW1fTUFMTE9DKG4pKSA9PSBOVUxMKQorICAgIHAgPSAoY2hhciAqKVB5TWVtX1Jhd01hbGxvYyhuKTsKKyAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGZmbHVzaChzeXNfc3Rkb3V0KTsKICAgICBpZiAocHJvbXB0KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgcHJvbXB0KTsKICAgICBmZmx1c2goc3RkZXJyKTsKKwogICAgIHN3aXRjaCAobXlfZmdldHMocCwgKGludCluLCBzeXNfc3RkaW4pKSB7CiAgICAgY2FzZSAwOiAvKiBOb3JtYWwgY2FzZSAqLwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE6IC8qIEludGVycnVwdCAqLwotICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjYXNlIC0xOiAvKiBFT0YgKi8KICAgICBjYXNlIC0yOiAvKiBFcnJvciAqLwpAQCAtMTM2LDEzICsxNDAsMTMgQEAKICAgICB3aGlsZSAobiA+IDAgJiYgcFtuLTFdICE9ICdcbicpIHsKICAgICAgICAgc2l6ZV90IGluY3IgPSBuKzI7CiAgICAgICAgIGlmIChpbmNyID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgImlucHV0IGxpbmUgdG9vIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHByID0gKGNoYXIgKilQeU1lbV9SRUFMTE9DKHAsIG4gKyBpbmNyKTsKKyAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1Jhd1JlYWxsb2MocCwgbiArIGluY3IpOwogICAgICAgICBpZiAocHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTE1MSw5ICsxNTUsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG4gKz0gc3RybGVuKHArbik7CiAgICAgfQotICAgIHByID0gKGNoYXIgKilQeU1lbV9SRUFMTE9DKHAsIG4rMSk7CisgICAgcHIgPSAoY2hhciAqKVB5TWVtX1Jhd1JlYWxsb2MocCwgbisxKTsKICAgICBpZiAocHIgPT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNjYsMTUgKzE3MCwxNiBAQAogCiAgICBOb3RlOiBQeXRob24gZXhwZWN0cyBpbiByZXR1cm4gYSBidWZmZXIgYWxsb2NhdGVkIHdpdGggUHlNZW1fTWFsbG9jLiAqLwogCi1jaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworY2hhciAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKIAogCiAvKiBJbnRlcmZhY2UgdXNlZCBieSB0b2tlbml6ZXIuYyBhbmQgYmx0aW5tb2R1bGUuYyAqLwogCiBjaGFyICoKLVB5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewotICAgIGNoYXIgKnJ2OworICAgIGNoYXIgKnJ2LCAqcmVzOworICAgIHNpemVfdCBsZW47CiAKICAgICBpZiAoX1B5T1NfUmVhZGxpbmVUU3RhdGUgPT0gUHlUaHJlYWRTdGF0ZV9HRVQoKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMjIxLDUgKzIyNiwxNCBAQAogCiAgICAgX1B5T1NfUmVhZGxpbmVUU3RhdGUgPSBOVUxMOwogCi0gICAgcmV0dXJuIHJ2OworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxlbiA9IHN0cmxlbihydikgKyAxOworICAgIHJlcyA9IFB5TWVtX01hbGxvYyhsZW4pOworICAgIGlmIChyZXMgIT0gTlVMTCkKKyAgICAgICAgbWVtY3B5KHJlcywgcnYsIGxlbik7CisgICAgUHlNZW1fUmF3RnJlZShydik7CisKKyAgICByZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvUGFyc2VyL25vZGUuYyBiL1BhcnNlci9ub2RlLmMKaW5kZXggMWU0ZjBkYS4uYjI2Y2U2MSAxMDA2NDQKLS0tIGEvUGFyc2VyL25vZGUuYworKysgYi9QYXJzZXIvbm9kZS5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAogaW50Ci1QeU5vZGVfQWRkQ2hpbGQocmVnaXN0ZXIgbm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorUHlOb2RlX0FkZENoaWxkKG5vZGUgKm4xLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBjb25zdCBpbnQgbmNoID0gbjEtPm5fbmNoaWxkcmVuOwogICAgIGludCBjdXJyZW50X2NhcGFjaXR5OwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNlci5jIGIvUGFyc2VyL3BhcnNlci5jCmluZGV4IGI1MDVmZTAuLjU2ZWM1MTQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wYXJzZXIuYworKysgYi9QYXJzZXIvcGFyc2VyLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNkZWZpbmUgc19lbXB0eShzKSAoKHMpLT5zX3RvcCA9PSAmKHMpLT5zX2Jhc2VbTUFYU1RBQ0tdKQogCiBzdGF0aWMgaW50Ci1zX3B1c2gocmVnaXN0ZXIgc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQorc19wdXNoKHN0YWNrICpzLCBkZmEgKmQsIG5vZGUgKnBhcmVudCkKIHsKLSAgICByZWdpc3RlciBzdGFja2VudHJ5ICp0b3A7CisgICAgc3RhY2tlbnRyeSAqdG9wOwogICAgIGlmIChzLT5zX3RvcCA9PSBzLT5zX2Jhc2UpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzX3B1c2g6IHBhcnNlciBzdGFjayBvdmVyZmxvd1xuIik7CiAgICAgICAgIHJldHVybiBFX05PTUVNOwpAQCAtNTIsNyArNTIsNyBAQAogI2lmZGVmIFB5X0RFQlVHCiAKIHN0YXRpYyB2b2lkCi1zX3BvcChyZWdpc3RlciBzdGFjayAqcykKK3NfcG9wKHN0YWNrICpzKQogewogICAgIGlmIChzX2VtcHR5KHMpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJzX3BvcDogcGFyc2VyIHN0YWNrIHVuZGVyZmxvdyAtLSBGQVRBTCIpOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAvKiBQQVJTRVIgU1RBQ0sgT1BFUkFUSU9OUyAqLwogCiBzdGF0aWMgaW50Ci1zaGlmdChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3NoaWZ0KHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGludCBlcnI7CiAgICAgYXNzZXJ0KCFzX2VtcHR5KHMpKTsKQEAgLTExNywxMCArMTE3LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXB1c2gocmVnaXN0ZXIgc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitwdXNoKHN0YWNrICpzLCBpbnQgdHlwZSwgZGZhICpkLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGludCBlcnI7Ci0gICAgcmVnaXN0ZXIgbm9kZSAqbjsKKyAgICBub2RlICpuOwogICAgIG4gPSBzLT5zX3RvcC0+c19wYXJlbnQ7CiAgICAgYXNzZXJ0KCFzX2VtcHR5KHMpKTsKICAgICBlcnIgPSBQeU5vZGVfQWRkQ2hpbGQobiwgdHlwZSwgKGNoYXIgKilOVUxMLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwpAQCAtMTM0LDE1ICsxMzQsMTUgQEAKIC8qIFBBUlNFUiBQUk9QRVIgKi8KIAogc3RhdGljIGludAotY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNoYXIgKnN0cikKK2NsYXNzaWZ5KHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgZ3JhbW1hciAqZyA9IHBzLT5wX2dyYW1tYXI7Ci0gICAgcmVnaXN0ZXIgaW50IG4gPSBnLT5nX2xsLmxsX25sYWJlbHM7CisgICAgaW50IG4gPSBnLT5nX2xsLmxsX25sYWJlbHM7CiAKICAgICBpZiAodHlwZSA9PSBOQU1FKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKnMgPSBzdHI7Ci0gICAgICAgIHJlZ2lzdGVyIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBzdHI7CisgICAgICAgIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKKyAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IG47IGkgPiAwOyBpLS0sIGwrKykgewogICAgICAgICAgICAgaWYgKGwtPmxiX3R5cGUgIT0gTkFNRSB8fCBsLT5sYl9zdHIgPT0gTlVMTCB8fAogICAgICAgICAgICAgICAgIGwtPmxiX3N0clswXSAhPSBzWzBdIHx8CkBAIC0xNjUsOCArMTY1LDggQEAKICAgICB9CiAKICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgIGxhYmVsICpsID0gZy0+Z19sbC5sbF9sYWJlbDsKKyAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IG47IGkgPiAwOyBpLS0sIGwrKykgewogICAgICAgICAgICAgaWYgKGwtPmxiX3R5cGUgPT0gdHlwZSAmJiBsLT5sYl9zdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIEQocHJpbnRmKCJJdCdzIGEgdG9rZW4gd2Uga25vd1xuIikpOwpAQCAtMjI1LDEwICsyMjUsMTAgQEAKICNlbmRpZiAvKiBmdXR1cmUga2V5d29yZCAqLwogCiBpbnQKLVB5UGFyc2VyX0FkZFRva2VuKHJlZ2lzdGVyIHBhcnNlcl9zdGF0ZSAqcHMsIHJlZ2lzdGVyIGludCB0eXBlLCBjaGFyICpzdHIsCitQeVBhcnNlcl9BZGRUb2tlbihwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIGludCAqZXhwZWN0ZWRfcmV0KQogewotICAgIHJlZ2lzdGVyIGludCBpbGFiZWw7CisgICAgaW50IGlsYWJlbDsKICAgICBpbnQgZXJyOwogCiAgICAgRChwcmludGYoIlRva2VuICVzLyclcycgLi4uICIsIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW3R5cGVdLCBzdHIpKTsKQEAgLTI0MSwxNSArMjQxLDE1IEBACiAgICAgLyogTG9vcCB1bnRpbCB0aGUgdG9rZW4gaXMgc2hpZnRlZCBvciBhbiBlcnJvciBvY2N1cnJlZCAqLwogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogRmV0Y2ggdGhlIGN1cnJlbnQgZGZhIGFuZCBzdGF0ZSAqLwotICAgICAgICByZWdpc3RlciBkZmEgKmQgPSBwcy0+cF9zdGFjay5zX3RvcC0+c19kZmE7Ci0gICAgICAgIHJlZ2lzdGVyIHN0YXRlICpzID0gJmQtPmRfc3RhdGVbcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGVdOworICAgICAgICBkZmEgKmQgPSBwcy0+cF9zdGFjay5zX3RvcC0+c19kZmE7CisgICAgICAgIHN0YXRlICpzID0gJmQtPmRfc3RhdGVbcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGVdOwogCiAgICAgICAgIEQocHJpbnRmKCIgREZBICclcycsIHN0YXRlICVkOiIsCiAgICAgICAgICAgICBkLT5kX25hbWUsIHBzLT5wX3N0YWNrLnNfdG9wLT5zX3N0YXRlKSk7CiAKICAgICAgICAgLyogQ2hlY2sgYWNjZWxlcmF0b3IgKi8KICAgICAgICAgaWYgKHMtPnNfbG93ZXIgPD0gaWxhYmVsICYmIGlsYWJlbCA8IHMtPnNfdXBwZXIpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGludCB4ID0gcy0+c19hY2NlbFtpbGFiZWwgLSBzLT5zX2xvd2VyXTsKKyAgICAgICAgICAgIGludCB4ID0gcy0+c19hY2NlbFtpbGFiZWwgLSBzLT5zX2xvd2VyXTsKICAgICAgICAgICAgIGlmICh4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgaWYgKHggJiAoMTw8NykpIHsKICAgICAgICAgICAgICAgICAgICAgLyogUHVzaCBub24tdGVybWluYWwgKi8KZGlmZiAtLWdpdCBhL1BhcnNlci9wYXJzZXRvay5jIGIvUGFyc2VyL3BhcnNldG9rLmMKaW5kZXggN2JlYjczNS4uNjI5ZGVlNSAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNldG9rLmMKKysrIGIvUGFyc2VyL3BhcnNldG9rLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogLyogRm9yd2FyZCAqLwogc3RhdGljIG5vZGUgKnBhcnNldG9rKHN0cnVjdCB0b2tfc3RhdGUgKiwgZ3JhbW1hciAqLCBpbnQsIHBlcnJkZXRhaWwgKiwgaW50ICopOwotc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqIGZpbGVuYW1lKTsKIAogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBzdHJpbmcuICBSZXR1cm4gZXJyb3IgY29kZSwgcHJpbnQgc29tZSBlcnJvcnMuICovCiBub2RlICoKQEAgLTQxLDkgKzQxLDkgQEAKIH0KIAogbm9kZSAqCi1QeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQorUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKIHsKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2s7CiAgICAgaW50IGV4ZWNfaW5wdXQgPSBzdGFydCA9PSBmaWxlX2lucHV0OwpAQCAtNjcsMTEgKzY3LDM1IEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK3sKKyAgICBub2RlICpuOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEw7CisjaWZuZGVmIFBHRU4KKyAgICBpZiAoZmlsZW5hbWVfc3RyICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKKyNpZm5kZWYgUEdFTgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIG47Cit9CisKIC8qIFBhcnNlIGlucHV0IGNvbWluZyBmcm9tIGEgZmlsZS4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqcHMxLCBjaGFyICpwczIsIHBlcnJkZXRhaWwgKmVycl9yZXQpCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCkKIHsKICAgICByZXR1cm4gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoZnAsIGZpbGVuYW1lLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLCBzdGFydCwgcHMxLCBwczIsIGVycl9yZXQsIDApOwpAQCAtODAsNyArMTA0LDggQEAKIG5vZGUgKgogUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICplbmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50IGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCiB7CiAgICAgaW50IGlmbGFncyA9IGZsYWdzOwogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KGZwLCBmaWxlbmFtZSwgZW5jLCBnLCBzdGFydCwgcHMxLApAQCAtODgsMTYgKzExMywxNyBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmMsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMxLCBjaGFyICpwczIsIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmMsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKIAogICAgIGlmIChpbml0ZXJyKGVycl9yZXQsIGZpbGVuYW1lKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgKGNoYXIgKillbmMsIHBzMSwgcHMyKSkgPT0gTlVMTCkgeworICAgIGlmICgodG9rID0gUHlUb2tlbml6ZXJfRnJvbUZpbGUoZnAsIGVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTA4LDYgKzEzNCwzMSBAQAogICAgIHJldHVybiBwYXJzZXRvayh0b2ssIGcsIHN0YXJ0LCBlcnJfcmV0LCBmbGFncyk7CiB9CiAKK25vZGUgKgorUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK3sKKyAgICBub2RlICpuOworICAgIFB5T2JqZWN0ICpmaWxlb2JqID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBuID0gUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KGZwLCBmaWxlb2JqLCBlbmMsIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsIGVycl9yZXQsIGZsYWdzKTsKKyNpZm5kZWYgUEdFTgorICAgIFB5X1hERUNSRUYoZmlsZW9iaik7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogI2lmZGVmIFBZX1BBUlNFUl9SRVFVSVJFU19GVVRVUkVfS0VZV09SRAogI2lmIDAKIHN0YXRpYyBjaGFyIHdpdGhfbXNnW10gPQpAQCAtMTM4LDcgKzE4OSw2IEBACiAgICAgaW50IHN0YXJ0ZWQgPSAwOwogCiAgICAgaWYgKChwcyA9IFB5UGFyc2VyX05ldyhnLCBzdGFydCkpID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJubyBtZW0gZm9yIG5ldyBwYXJzZXJcbiIpOwogICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CiAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUodG9rKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzgsNyArMjI4LDYgQEAKICAgICAgICAgbGVuID0gYiAtIGE7IC8qIFhYWCB0aGlzIG1heSBjb21wdXRlIE5VTEwgLSBOVUxMICovCiAgICAgICAgIHN0ciA9IChjaGFyICopIFB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV4dCB0b2tlblxuIik7CiAgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjA1LDcgKzI1NCw4IEBACiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBpZiAoYSA+PSB0b2stPmxpbmVfc3RhcnQpCi0gICAgICAgICAgICBjb2xfb2Zmc2V0ID0gYSAtIHRvay0+bGluZV9zdGFydDsKKyAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBQeV9TQUZFX0RPV05DQVNUKGEgLSB0b2stPmxpbmVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9pbnRwdHJfdCwgaW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29sX29mZnNldCA9IC0xOwogCkBAIC0zMDgsNyArMzU4LDcgQEAKIH0KIAogc3RhdGljIGludAotaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2luaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIGVycl9yZXQtPmVycm9yID0gRV9PSzsKICAgICBlcnJfcmV0LT5saW5lbm8gPSAwOwpAQCAtMzE3LDEzICszNjcsMTYgQEAKICAgICBlcnJfcmV0LT50b2tlbiA9IC0xOwogICAgIGVycl9yZXQtPmV4cGVjdGVkID0gLTE7CiAjaWZuZGVmIFBHRU4KLSAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgZWxzZQorICAgIGlmIChmaWxlbmFtZSkgeworICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOworICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IGZpbGVuYW1lOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHN0cmluZz4iKTsKLSAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGVycl9yZXQtPmZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BnZW5tYWluLmMgYi9QYXJzZXIvcGdlbm1haW4uYwppbmRleCA1MmI4MzgwLi4wMTdhNGY5IDEwMDY0NAotLS0gYS9QYXJzZXIvcGdlbm1haW4uYworKysgYi9QYXJzZXIvcGdlbm1haW4uYwpAQCAtMTEzLDYgKzExMyw3IEBACiAgICAgICAgIFB5X0V4aXQoMSk7CiAgICAgfQogICAgIGcgPSBwZ2VuKG4pOworICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIGlmIChnID09IE5VTEwpIHsKICAgICAgICAgcHJpbnRmKCJCYWQgZ3JhbW1hci5cbiIpOwogICAgICAgICBQeV9FeGl0KDEpOwpAQCAtMTM3LDcgKzEzOCw3IEBACiAvKiBOby1ub25zZW5zZSBteV9yZWFkbGluZSgpIGZvciB0b2tlbml6ZXIuYyAqLwogCiBjaGFyICoKLVB5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuID0gMTAwMDsKICAgICBjaGFyICpwID0gKGNoYXIgKilQeU1lbV9NQUxMT0Mobik7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmMgYi9QYXJzZXIvdG9rZW5pemVyLmMKaW5kZXggNWMwYmQ2ZS4uNWJmN2U4NCAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5jCisrKyBiL1BhcnNlci90b2tlbml6ZXIuYwpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgICAgICAgfHwgYyA9PSAnXydcCiAgICAgICAgICAgICAgICB8fCAoYyA+PSAxMjgpKQogCi1leHRlcm4gY2hhciAqUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK2V4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogLyogUmV0dXJuIG1hbGxvYydlZCBzdHJpbmcgaW5jbHVkaW5nIHRyYWlsaW5nIFxuOwogICAgZW1wdHkgbWFsbG9jJ2VkIHN0cmluZyBmb3IgRU9GOwogICAgTlVMTCBpZiBpbnRlcnJ1cHRlZCAqLwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBUb2tlbiBuYW1lcyAqLwogCi1jaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0geworY29uc3QgY2hhciAqX1B5UGFyc2VyX1Rva2VuTmFtZXNbXSA9IHsKICAgICAiRU5ETUFSS0VSIiwKICAgICAiTkFNRSIsCiAgICAgIk5VTUJFUiIsCkBAIC02NzEsNyArNjcxLDggQEAKIAogc3RhdGljIGNoYXIgKgogdHJhbnNsYXRlX25ld2xpbmVzKGNvbnN0IGNoYXIgKnMsIGludCBleGVjX2lucHV0LCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spIHsKLSAgICBpbnQgc2tpcF9uZXh0X2xmID0gMCwgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKKyAgICBpbnQgc2tpcF9uZXh0X2xmID0gMDsKKyAgICBzaXplX3QgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKICAgICBjaGFyICpidWYsICpjdXJyZW50OwogICAgIGNoYXIgYyA9ICdcMCc7CiAgICAgYnVmID0gUHlNZW1fTUFMTE9DKG5lZWRlZF9sZW5ndGgpOwpAQCAtNzc5LDcgKzc4MCw3IEBACiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3RyID0gKGNoYXIgKilkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKKyAgICBzdHIgPSBkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgyMiw3ICs4MjMsOCBAQAogLyogU2V0IHVwIHRva2VuaXplciBmb3IgZmlsZSAqLwogCiBzdHJ1Y3QgdG9rX3N0YXRlICoKLVB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKmZwLCBjaGFyKiBlbmMsIGNoYXIgKnBzMSwgY2hhciAqcHMyKQorUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvayA9IHRva19uZXcoKTsKICAgICBpZiAodG9rID09IE5VTEwpCkBAIC04NzMsNyArODc1LDcgQEAKIC8qIEdldCBuZXh0IGNoYXIsIHVwZGF0aW5nIHN0YXRlOyBlcnJvciBjb2RlIGdvZXMgaW50byB0b2stPmRvbmUgKi8KIAogc3RhdGljIGludAotdG9rX25leHRjKHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK3Rva19uZXh0YyhzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAodG9rLT5jdXIgIT0gdG9rLT5pbnApIHsKQEAgLTEwNzAsNyArMTA3Miw3IEBACiAvKiBCYWNrLXVwIG9uZSBjaGFyYWN0ZXIgKi8KIAogc3RhdGljIHZvaWQKLXRva19iYWNrdXAocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rLCByZWdpc3RlciBpbnQgYykKK3Rva19iYWNrdXAoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBpbnQgYykKIHsKICAgICBpZiAoYyAhPSBFT0YpIHsKICAgICAgICAgaWYgKC0tdG9rLT5jdXIgPCB0b2stPmJ1ZikKQEAgLTEzMDAsOSArMTMwMiw5IEBACiAvKiBHZXQgbmV4dCB0b2tlbiwgYWZ0ZXIgc3BhY2Ugc3RyaXBwaW5nIGV0Yy4gKi8KIAogc3RhdGljIGludAotdG9rX2dldChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGNoYXIgKipwX3N0YXJ0LCBjaGFyICoqcF9lbmQpCit0b2tfZ2V0KHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKIHsKLSAgICByZWdpc3RlciBpbnQgYzsKKyAgICBpbnQgYzsKICAgICBpbnQgYmxhbmtsaW5lLCBub25hc2NpaTsKIAogICAgICpwX3N0YXJ0ID0gKnBfZW5kID0gTlVMTDsKQEAgLTEzMTIsOCArMTMxNCw4IEBACiAKICAgICAvKiBHZXQgaW5kZW50YXRpb24gbGV2ZWwgKi8KICAgICBpZiAodG9rLT5hdGJvbCkgewotICAgICAgICByZWdpc3RlciBpbnQgY29sID0gMDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGFsdGNvbCA9IDA7CisgICAgICAgIGludCBjb2wgPSAwOworICAgICAgICBpbnQgYWx0Y29sID0gMDsKICAgICAgICAgdG9rLT5hdGJvbCA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKQEAgLTE3MjksMTAgKzE3MzEsMTUgQEAKICAgICBGSUxFICpmcDsKICAgICBjaGFyICpwX3N0YXJ0ID1OVUxMICwgKnBfZW5kID1OVUxMICwgKmVuY29kaW5nID0gTlVMTDsKIAorI2lmbmRlZiBQR0VOCisgICAgZmQgPSBfUHlfZHVwKGZkKTsKKyNlbHNlCiAgICAgZmQgPSBkdXAoZmQpOworI2VuZGlmCiAgICAgaWYgKGZkIDwgMCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBmcCA9IGZkb3BlbihmZCwgInIiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuaCBiL1BhcnNlci90b2tlbml6ZXIuaAppbmRleCBlZDFmM2FhLi4xY2U2ZWViIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmgKKysrIGIvUGFyc2VyL3Rva2VuaXplci5oCkBAIC0zNSw3ICszNSw3IEBACiAgICAgaW50IGluZHN0YWNrW01BWElOREVOVF07ICAgICAgICAgICAgLyogU3RhY2sgb2YgaW5kZW50cyAqLwogICAgIGludCBhdGJvbDsgICAgICAgICAgLyogTm9uemVybyBpZiBhdCBiZWdpbiBvZiBuZXcgbGluZSAqLwogICAgIGludCBwZW5kaW47ICAgICAgICAgLyogUGVuZGluZyBpbmRlbnRzIChpZiA+IDApIG9yIGRlZGVudHMgKGlmIDwgMCkgKi8KLSAgICBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCisgICAgY29uc3QgY2hhciAqcHJvbXB0LCAqbmV4dHByb21wdDsgICAgICAgICAgLyogRm9yIGludGVyYWN0aXZlIHByb21wdGluZyAqLwogICAgIGludCBsaW5lbm87ICAgICAgICAgLyogQ3VycmVudCBsaW5lIG51bWJlciAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgLyogKCkgW10ge30gUGFyZW50aGVzZXMgbmVzdGluZyBsZXZlbCAqLwogICAgICAgICAgICAgLyogVXNlZCB0byBhbGxvdyBmcmVlIGNvbnRpbnVhdGlvbnMgaW5zaWRlIHRoZW0gKi8KQEAgLTY5LDggKzY5LDggQEAKIAogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21VVEY4KGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICosIGNoYXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICosIGNvbnN0IGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIFB5VG9rZW5pemVyX0ZyZWUoc3RydWN0IHRva19zdGF0ZSAqKTsKIGV4dGVybiBpbnQgUHlUb2tlbml6ZXJfR2V0KHN0cnVjdCB0b2tfc3RhdGUgKiwgY2hhciAqKiwgY2hhciAqKik7CiBleHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX1Jlc3RvcmVFbmNvZGluZyhzdHJ1Y3QgdG9rX3N0YXRlKiB0b2ssCmRpZmYgLS1naXQgYS9QeXRob24vUHl0aG9uLWFzdC5jIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwppbmRleCA3YmYyYzUwLi5lMDdhOTNmIDEwMDY0NAotLS0gYS9QeXRob24vUHl0aG9uLWFzdC5jCisrKyBiL1B5dGhvbi9QeXRob24tYXN0LmMKQEAgLTI3MSw2ICsyNzEsMTAgQEAKIHN0YXRpYyBjaGFyICpCeXRlc19maWVsZHNbXT17CiAgICAgInMiLAogfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKk5hbWVDb25zdGFudF90eXBlOworc3RhdGljIGNoYXIgKk5hbWVDb25zdGFudF9maWVsZHNbXT17CisgICAgInZhbHVlIiwKK307CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpFbGxpcHNpc190eXBlOwogc3RhdGljIFB5VHlwZU9iamVjdCAqQXR0cmlidXRlX3R5cGU7CiBfUHlfSURFTlRJRklFUihhdHRyKTsKQEAgLTQwOCwyNCArNDEyLDI0IEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0ICphcmd1bWVudHNfdHlwZTsKIHN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial9hcmd1bWVudHModm9pZCopOwogX1B5X0lERU5USUZJRVIodmFyYXJnKTsKLV9QeV9JREVOVElGSUVSKHZhcmFyZ2Fubm90YXRpb24pOwogX1B5X0lERU5USUZJRVIoa3dvbmx5YXJncyk7Ci1fUHlfSURFTlRJRklFUihrd2FyZyk7Ci1fUHlfSURFTlRJRklFUihrd2FyZ2Fubm90YXRpb24pOwotX1B5X0lERU5USUZJRVIoZGVmYXVsdHMpOwogX1B5X0lERU5USUZJRVIoa3dfZGVmYXVsdHMpOworX1B5X0lERU5USUZJRVIoa3dhcmcpOworX1B5X0lERU5USUZJRVIoZGVmYXVsdHMpOwogc3RhdGljIGNoYXIgKmFyZ3VtZW50c19maWVsZHNbXT17CiAgICAgImFyZ3MiLAogICAgICJ2YXJhcmciLAotICAgICJ2YXJhcmdhbm5vdGF0aW9uIiwKICAgICAia3dvbmx5YXJncyIsCi0gICAgImt3YXJnIiwKLSAgICAia3dhcmdhbm5vdGF0aW9uIiwKLSAgICAiZGVmYXVsdHMiLAogICAgICJrd19kZWZhdWx0cyIsCisgICAgImt3YXJnIiwKKyAgICAiZGVmYXVsdHMiLAogfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZyh2b2lkKik7CitzdGF0aWMgY2hhciAqYXJnX2F0dHJpYnV0ZXNbXSA9IHsKKyAgICAibGluZW5vIiwKKyAgICAiY29sX29mZnNldCIsCit9OwogX1B5X0lERU5USUZJRVIoYXJnKTsKIF9QeV9JREVOVElGSUVSKGFubm90YXRpb24pOwogc3RhdGljIGNoYXIgKmFyZ19maWVsZHNbXT17CkBAIC02NzMsNiArNjc3LDcgQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KilvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilvOwogfQorI2RlZmluZSBhc3Qyb2JqX3NpbmdsZXRvbiBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2lkZW50aWZpZXIgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9zdHJpbmcgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9ieXRlcyBhc3Qyb2JqX29iamVjdApAQCAtNjg0LDYgKzY4OSwxNyBAQAogCiAvKiBDb252ZXJzaW9uIFB5dGhvbiAtPiBBU1QgKi8KIAorc3RhdGljIGludCBvYmoyYXN0X3NpbmdsZXRvbihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lICYmIG9iaiAhPSBQeV9UcnVlICYmIG9iaiAhPSBQeV9GYWxzZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBU1Qgc2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBvYmo7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2JqMmFzdF9vYmplY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQogewogICAgIGlmIChvYmogPT0gUHlfTm9uZSkKQEAgLTc1OCw2ICs3NzQsMTkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBleGlzdHNfbm90X25vbmUoUHlPYmplY3QgKm9iaiwgX1B5X0lkZW50aWZpZXIgKmlkKQoreworICAgIGludCBpc25vbmU7CisgICAgUHlPYmplY3QgKmF0dHIgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgaWQpOworICAgIGlmICghYXR0cikgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaXNub25lID0gYXR0ciA9PSBQeV9Ob25lOworICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICByZXR1cm4gIWlzbm9uZTsKK30KKwogCiBzdGF0aWMgaW50IGluaXRfdHlwZXModm9pZCkKIHsKQEAgLTg2Miw2ICs4OTEsOSBAQAogICAgIGlmICghU3RyX3R5cGUpIHJldHVybiAwOwogICAgIEJ5dGVzX3R5cGUgPSBtYWtlX3R5cGUoIkJ5dGVzIiwgZXhwcl90eXBlLCBCeXRlc19maWVsZHMsIDEpOwogICAgIGlmICghQnl0ZXNfdHlwZSkgcmV0dXJuIDA7CisgICAgTmFtZUNvbnN0YW50X3R5cGUgPSBtYWtlX3R5cGUoIk5hbWVDb25zdGFudCIsIGV4cHJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lQ29uc3RhbnRfZmllbGRzLCAxKTsKKyAgICBpZiAoIU5hbWVDb25zdGFudF90eXBlKSByZXR1cm4gMDsKICAgICBFbGxpcHNpc190eXBlID0gbWFrZV90eXBlKCJFbGxpcHNpcyIsIGV4cHJfdHlwZSwgTlVMTCwgMCk7CiAgICAgaWYgKCFFbGxpcHNpc190eXBlKSByZXR1cm4gMDsKICAgICBBdHRyaWJ1dGVfdHlwZSA9IG1ha2VfdHlwZSgiQXR0cmlidXRlIiwgZXhwcl90eXBlLCBBdHRyaWJ1dGVfZmllbGRzLCAzKTsKQEAgLTEwMzksNiArMTA3MSw3IEBACiAgICAgY29tcHJlaGVuc2lvbl90eXBlID0gbWFrZV90eXBlKCJjb21wcmVoZW5zaW9uIiwgJkFTVF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFjb21wcmVoZW5zaW9uX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoY29tcHJlaGVuc2lvbl90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgZXhjZXB0aGFuZGxlcl90eXBlID0gbWFrZV90eXBlKCJleGNlcHRoYW5kbGVyIiwgJkFTVF90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIWV4Y2VwdGhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7CiAgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhleGNlcHRoYW5kbGVyX3R5cGUsIGV4Y2VwdGhhbmRsZXJfYXR0cmlidXRlcywgMikpCkBAIC0xMDQ2LDE2ICsxMDc5LDIxIEBACiAgICAgRXhjZXB0SGFuZGxlcl90eXBlID0gbWFrZV90eXBlKCJFeGNlcHRIYW5kbGVyIiwgZXhjZXB0aGFuZGxlcl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRIYW5kbGVyX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFFeGNlcHRIYW5kbGVyX3R5cGUpIHJldHVybiAwOwotICAgIGFyZ3VtZW50c190eXBlID0gbWFrZV90eXBlKCJhcmd1bWVudHMiLCAmQVNUX3R5cGUsIGFyZ3VtZW50c19maWVsZHMsIDgpOworICAgIGFyZ3VtZW50c190eXBlID0gbWFrZV90eXBlKCJhcmd1bWVudHMiLCAmQVNUX3R5cGUsIGFyZ3VtZW50c19maWVsZHMsIDYpOwogICAgIGlmICghYXJndW1lbnRzX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJndW1lbnRzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBhcmdfdHlwZSA9IG1ha2VfdHlwZSgiYXJnIiwgJkFTVF90eXBlLCBhcmdfZmllbGRzLCAyKTsKICAgICBpZiAoIWFyZ190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFyZ190eXBlLCBhcmdfYXR0cmlidXRlcywgMikpIHJldHVybiAwOwogICAgIGtleXdvcmRfdHlwZSA9IG1ha2VfdHlwZSgia2V5d29yZCIsICZBU1RfdHlwZSwga2V5d29yZF9maWVsZHMsIDIpOwogICAgIGlmICgha2V5d29yZF90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGtleXdvcmRfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFsaWFzX3R5cGUgPSBtYWtlX3R5cGUoImFsaWFzIiwgJkFTVF90eXBlLCBhbGlhc19maWVsZHMsIDIpOwogICAgIGlmICghYWxpYXNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhbGlhc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgd2l0aGl0ZW1fdHlwZSA9IG1ha2VfdHlwZSgid2l0aGl0ZW0iLCAmQVNUX3R5cGUsIHdpdGhpdGVtX2ZpZWxkcywgMik7CiAgICAgaWYgKCF3aXRoaXRlbV90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKHdpdGhpdGVtX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgcmV0dXJuIDE7CiB9CkBAIC0xOTIzLDYgKzE5NjEsMjUgQEAKIH0KIAogZXhwcl90eQorTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIGV4cHJfdHkgcDsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBOYW1lQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwLT5raW5kID0gTmFtZUNvbnN0YW50X2tpbmQ7CisgICAgcC0+di5OYW1lQ29uc3RhbnQudmFsdWUgPSB2YWx1ZTsKKyAgICBwLT5saW5lbm8gPSBsaW5lbm87CisgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHA7Cit9CisKK2V4cHJfdHkKIEVsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBleHByX3R5IHA7CkBAIC0yMTc3LDkgKzIyMzQsOCBAQAogfQogCiBhcmd1bWVudHNfdHkKLWFyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGlkZW50aWZpZXIgdmFyYXJnLCBleHByX3R5IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyIGt3YXJnLCBleHByX3R5IGt3YXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGRlZmF1bHRzLCBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSkKK2FyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGFyZ190eSB2YXJhcmcsIGFzZGxfc2VxICoga3dvbmx5YXJncywgYXNkbF9zZXEgKgorICAgICAgICAgIGt3X2RlZmF1bHRzLCBhcmdfdHkga3dhcmcsIGFzZGxfc2VxICogZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFyZ3VtZW50c190eSBwOwogICAgIHAgPSAoYXJndW1lbnRzX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKQEAgLTIxODcsMTIgKzIyNDMsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcC0+YXJncyA9IGFyZ3M7CiAgICAgcC0+dmFyYXJnID0gdmFyYXJnOwotICAgIHAtPnZhcmFyZ2Fubm90YXRpb24gPSB2YXJhcmdhbm5vdGF0aW9uOwogICAgIHAtPmt3b25seWFyZ3MgPSBrd29ubHlhcmdzOwotICAgIHAtPmt3YXJnID0ga3dhcmc7Ci0gICAgcC0+a3dhcmdhbm5vdGF0aW9uID0ga3dhcmdhbm5vdGF0aW9uOwotICAgIHAtPmRlZmF1bHRzID0gZGVmYXVsdHM7CiAgICAgcC0+a3dfZGVmYXVsdHMgPSBrd19kZWZhdWx0czsKKyAgICBwLT5rd2FyZyA9IGt3YXJnOworICAgIHAtPmRlZmF1bHRzID0gZGVmYXVsdHM7CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTI5NDMsNiArMjk5NywxNSBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KE5hbWVDb25zdGFudF90eXBlLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfc2luZ2xldG9uKG8tPnYuTmFtZUNvbnN0YW50LnZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFsdWUsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBicmVhazsKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KEVsbGlwc2lzX3R5cGUsIE5VTEwsIE5VTEwpOwogICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CkBAIC0zMzYxLDI5ICszNDI0LDI0IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hcmdzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2lkZW50aWZpZXIoby0+dmFyYXJnKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfYXJnKG8tPnZhcmFyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YXJhcmcsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52YXJhcmdhbm5vdGF0aW9uKTsKLSAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd29ubHlhcmdzLCBhc3Qyb2JqX2FyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd29ubHlhcmdzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2lkZW50aWZpZXIoby0+a3dhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmcsIHZhbHVlKSA9PSAtMSkKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3X2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+a3dhcmdhbm5vdGF0aW9uKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfYXJnKG8tPmt3YXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmcsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKQEAgLTMzOTEsMTEgKzM0NDksNiBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd19kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKLSAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3X2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKQEAgLTM0MjUsNiArMzQ3OCwxNiBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+bGluZW5vKTsKKyAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2xpbmVubywgdmFsdWUpIDwgMCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfaW50KG8tPmNvbF9vZmZzZXQpOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfY29sX29mZnNldCwgdmFsdWUpIDwgMCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzU0OSw3ICszNjEyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzU4NCw3ICszNjQ3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzY0MSw3ICszNzA0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzc0NCw3ICszODA3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzc2OCw3ICszODMxLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGVjb3JhdG9yX2xpc3QgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzc4MSw3ICszODQ0LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlY29yYXRvcl9saXN0XCIgbWlzc2luZyBmcm9tIEZ1bmN0aW9uRGVmIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3JldHVybnMpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9yZXR1cm5zKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9yZXR1cm5zKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODMxLDcgKzM4OTQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBiYXNlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJhc2VzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChiYXNlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zODU1LDcgKzM5MTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXl3b3JkcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGtleXdvcmRfdHkgdmFsdWU7CkBAIC0zODY4LDcgKzM5MzEsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia2V5d29yZHNcIiBtaXNzaW5nIGZyb20gQ2xhc3NEZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4NzgsNyArMzk0MSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGFyYXJncyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg5OSw3ICszOTYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzkyMyw3ICszOTg2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGVjb3JhdG9yX2xpc3QgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzk0OCw3ICs0MDExLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM5ODAsNyArNDA0Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB0YXJnZXRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh0YXJnZXRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTQwMTYsNyArNDA3OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB0YXJnZXRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh0YXJnZXRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTQxMzMsNyArNDE5Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQxNTcsNyArNDIyMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyMDUsNyArNDI2OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyMjksNyArNDI5Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyNzcsNyArNDM0MCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzMDEsNyArNDM2NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzMzcsNyArNDQwMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaXRlbXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgd2l0aGl0ZW1fdHkgdmFsdWU7CkBAIC00MzYxLDcgKzQ0MjQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00Mzg2LDcgKzQ0NDksNyBAQAogICAgICAgICBleHByX3R5IGV4YzsKICAgICAgICAgZXhwcl90eSBjYXVzZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2V4YykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2V4YykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZXhjKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00Mzk2LDcgKzQ0NTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXhjID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2NhdXNlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfY2F1c2UpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2NhdXNlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NDMxLDcgKzQ0OTQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NDU1LDcgKzQ1MTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGhhbmRsZXJzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4Y2VwdGhhbmRsZXJfdHkgdmFsdWU7CkBAIC00NDc5LDcgKzQ1NDIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NTAzLDcgKzQ1NjYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBmaW5hbGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBmaW5hbGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGZpbmFsYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NTQwLDcgKzQ2MDMsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidGVzdFwiIG1pc3NpbmcgZnJvbSBBc3NlcnQiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbXNnKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbXNnKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tc2cpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ1NzIsNyArNDYzNSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NTk4LDcgKzQ2NjEsNyBAQAogICAgICAgICBhc2RsX3NlcSogbmFtZXM7CiAgICAgICAgIGludCBsZXZlbDsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX21vZHVsZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX21vZHVsZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NjE5LDcgKzQ2ODIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGFsaWFzX3R5IHZhbHVlOwpAQCAtNDYzMiw3ICs0Njk1LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIm5hbWVzXCIgbWlzc2luZyBmcm9tIEltcG9ydEZyb20iKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbGV2ZWwpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9sZXZlbCkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbGV2ZWwpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2NjQsNyArNDcyNyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllciB2YWx1ZTsKQEAgLTQ2OTksNyArNDc2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllciB2YWx1ZTsKQEAgLTQ4NDAsNyArNDkwMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodmFsdWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwMzYsNyArNTA5OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXlzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwNjAsNyArNTEyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodmFsdWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwOTUsNyArNTE1OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUxNDIsNyArNTIwNSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUxODksNyArNTI1Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUyNDgsNyArNTMxMSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUyOTUsNyArNTM1OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUzMTksNyArNTM4Miw3IEBACiAgICAgaWYgKGlzaW5zdGFuY2UpIHsKICAgICAgICAgZXhwcl90eSB2YWx1ZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01Mzg2LDcgKzU0NDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3BzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3BzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY21wb3BfdHkgdmFsdWU7CkBAIC01NDEwLDcgKzU0NzMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBjb21wYXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChjb21wYXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01NDYwLDcgKzU1MjMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01NDg0LDcgKzU1NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXl3b3JkcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGtleXdvcmRfdHkgdmFsdWU7CkBAIC01NDk3LDcgKzU1NjAsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia2V5d29yZHNcIiBtaXNzaW5nIGZyb20gQ2FsbCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTUwNyw3ICs1NTcwLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTg4LDYgKzU2NTEsMjggQEAKICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopTmFtZUNvbnN0YW50X3R5cGUpOworICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3Rfc2luZ2xldG9uKHRtcCwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcInZhbHVlXCIgbWlzc2luZyBmcm9tIE5hbWVDb25zdGFudCIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKm91dCA9IE5hbWVDb25zdGFudCh2YWx1ZSwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNTc3Nyw3ICs1ODYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTgyNCw3ICs1OTA5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTkzNyw3ICs2MDIyLDcgQEAKICAgICAgICAgZXhwcl90eSB1cHBlcjsKICAgICAgICAgZXhwcl90eSBzdGVwOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbG93ZXIpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9sb3dlcikpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbG93ZXIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5NDcsNyArNjAzMiw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsb3dlciA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF91cHBlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3VwcGVyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF91cHBlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk1Nyw3ICs2MDQyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVwcGVyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0ZXApKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGVwKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGVwKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTg5LDcgKzYwNzQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkaW1zID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGltcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGltcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHNsaWNlX3R5IHZhbHVlOwpAQCAtNjM0MCw3ICs2NDI1LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChpZnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTY0MDQsNyArNjQ4OSw3IEBACiAgICAgICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICAgICAgYXNkbF9zZXEqIGJvZHk7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF90eXBlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdHlwZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdHlwZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQxNCw3ICs2NDk5LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHR5cGUgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbmFtZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX25hbWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX25hbWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY0MzUsNyArNjUyMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTY0NjQsMTMgKzY1NDksMTEgQEAKIHsKICAgICBQeU9iamVjdCogdG1wID0gTlVMTDsKICAgICBhc2RsX3NlcSogYXJnczsKLSAgICBpZGVudGlmaWVyIHZhcmFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb247CisgICAgYXJnX3R5IHZhcmFyZzsKICAgICBhc2RsX3NlcSoga3dvbmx5YXJnczsKLSAgICBpZGVudGlmaWVyIGt3YXJnOwotICAgIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uOwotICAgIGFzZGxfc2VxKiBkZWZhdWx0czsKICAgICBhc2RsX3NlcSoga3dfZGVmYXVsdHM7CisgICAgYXJnX3R5IGt3YXJnOworICAgIGFzZGxfc2VxKiBkZWZhdWx0czsKIAogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXJncykpIHsKICAgICAgICAgaW50IHJlczsKQEAgLTY0ODMsNyArNjU2Niw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgYXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGFyZ190eSB2YWx1ZTsKQEAgLTY0OTYsMjYgKzY1NzksMTYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YXJhcmcpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2lkZW50aWZpZXIodG1wLCAmdmFyYXJnLCBhcmVuYSk7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJnZhcmFyZywgYXJlbmEpOwogICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9DTEVBUih0bXApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZhcmFyZyA9IE5VTEw7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbikpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmdmFyYXJnYW5ub3RhdGlvbiwgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhcmFyZ2Fubm90YXRpb24gPSBOVUxMOwotICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3b25seWFyZ3MpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtNjUyNyw3ICs2NjAwLDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBrd29ubHlhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd29ubHlhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGt3b25seWFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjU0MCw1MCArNjYxMyw2IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3b25seWFyZ3NcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJnKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2lkZW50aWZpZXIodG1wLCAma3dhcmcsIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBrd2FyZyA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJmt3YXJnYW5ub3RhdGlvbiwgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudHMgZmllbGQgXCJkZWZhdWx0c1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGRlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwotICAgICAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKLSAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlZmF1bHRzLCBpLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dfZGVmYXVsdHMpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtNjU5NSw3ICs2NjI0LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBrd19kZWZhdWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAga3dfZGVmYXVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dfZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTY2MDgsOCArNjYzNyw0MiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrd19kZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgICpvdXQgPSBhcmd1bWVudHMoYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLCBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiwgZGVmYXVsdHMsIGt3X2RlZmF1bHRzLCBhcmVuYSk7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJnKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXMgPSBvYmoyYXN0X2FyZyh0bXAsICZrd2FyZywgYXJlbmEpOworICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIGt3YXJnID0gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgUHlfc3NpemVfdCBsZW47CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKKyAgICAgICAgZGVmYXVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlZmF1bHRzLCBpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBhcmd1bWVudHMoYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd19kZWZhdWx0cywga3dhcmcsIGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgYXJlbmEpOwogICAgIHJldHVybiAwOwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodG1wKTsKQEAgLTY2MzQsNyArNjY5Nyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImFyZ1wiIG1pc3NpbmcgZnJvbSBhcmciKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbikpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYW5ub3RhdGlvbikpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2Fubm90YXRpb24pOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjcwNSw3ICs2NzY4LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZVwiIG1pc3NpbmcgZnJvbSBhbGlhcyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hc25hbWUpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2FzbmFtZSkpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2FzbmFtZSk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzQwLDcgKzY4MDMsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJjb250ZXh0X2V4cHJcIiBtaXNzaW5nIGZyb20gd2l0aGl0ZW0iKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycykpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjc3MCw3ICs2ODMzLDcgQEAKICAgICBpZiAoIW0pIHJldHVybiBOVUxMOwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQVNUIiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUNGX09OTFlfQVNUIiwgUHlDRl9PTkxZX0FTVCkgPCAwKQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAibW9kIiwgKFB5T2JqZWN0Kiltb2RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk1vZHVsZSIsIChQeU9iamVjdCopTW9kdWxlX3R5cGUpIDwgMCkgcmV0dXJuCkBAIC02ODUwLDYgKzY5MTMsOCBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiU3RyIiwgKFB5T2JqZWN0KilTdHJfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJ5dGVzIiwgKFB5T2JqZWN0KilCeXRlc190eXBlKSA8IDApIHJldHVybgogICAgICAgICBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTmFtZUNvbnN0YW50IiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSkgPAorICAgICAgICAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVsbGlwc2lzIiwgKFB5T2JqZWN0KilFbGxpcHNpc190eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQXR0cmlidXRlIiwgKFB5T2JqZWN0KilBdHRyaWJ1dGVfdHlwZSkgPCAwKQpAQCAtNjk0OSw3ICs3MDE0LDggQEAKIAogUHlPYmplY3QqIFB5QVNUX21vZDJvYmoobW9kX3R5IHQpCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gYXN0Mm9ial9tb2QodCk7CiB9CiAKQEAgLTY5NjMsNyArNzAyOSw4IEBACiAgICAgaW50IGlzaW5zdGFuY2U7CiAgICAgYXNzZXJ0KDAgPD0gbW9kZSAmJiBtb2RlIDw9IDIpOwogCi0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKGFzdCwgcmVxX3R5cGVbbW9kZV0pOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKQpAQCAtNjk4MSw3ICs3MDQ4LDggQEAKIAogaW50IFB5QVNUX0NoZWNrKFB5T2JqZWN0KiBvYmopCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKSZBU1RfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCBmMzNlNDc3Li42MDEzZDdkIDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC0xMyw2ICsxMyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKl9vbmNlX3JlZ2lzdHJ5OyAgLyogRGljdCAqLwogc3RhdGljIFB5T2JqZWN0ICpfZGVmYXVsdF9hY3Rpb247IC8qIFN0cmluZyAqLwogCitfUHlfSURFTlRJRklFUihhcmd2KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKIHN0YXRpYyBpbnQKIGNoZWNrX21hdGNoZWQoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmFyZykKQEAgLTk5LDcgKzEwMSw3IEBACiAKIAogLyogVGhlIGl0ZW0gaXMgYSBib3Jyb3dlZCByZWZlcmVuY2UuICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitzdGF0aWMgUHlPYmplY3QqCiBnZXRfZmlsdGVyKFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgbGluZW5vLAogICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqKml0ZW0pCiB7CkBAIC0xNDQsMjEgKzE0NiwyOCBAQAogICAgICAgICBsbl9vYmogPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCA0KTsKIAogICAgICAgICBnb29kX21zZyA9IGNoZWNrX21hdGNoZWQobXNnLCB0ZXh0KTsKKyAgICAgICAgaWYgKGdvb2RfbXNnID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgZ29vZF9tb2QgPSBjaGVja19tYXRjaGVkKG1vZCwgbW9kdWxlKTsKKyAgICAgICAgaWYgKGdvb2RfbW9kID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGNhdGVnb3J5LCBjYXQpOworICAgICAgICBpZiAoaXNfc3ViY2xhc3MgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBsbiA9IFB5TG9uZ19Bc1NzaXplX3QobG5fb2JqKTsKLSAgICAgICAgaWYgKGdvb2RfbXNnID09IC0xIHx8IGdvb2RfbW9kID09IC0xIHx8IGlzX3N1YmNsYXNzID09IC0xIHx8Ci0gICAgICAgICAgICAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpCisgICAgICAgIGlmIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgaWYgKGdvb2RfbXNnICYmIGlzX3N1YmNsYXNzICYmIGdvb2RfbW9kICYmIChsbiA9PSAwIHx8IGxpbmVubyA9PSBsbikpCi0gICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc1N0cmluZyhhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICB9CiAKICAgICBhY3Rpb24gPSBnZXRfZGVmYXVsdF9hY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNTdHJpbmcoYWN0aW9uKTsKLSAgICB9CisgICAgaWYgKGFjdGlvbiAhPSBOVUxMKQorICAgICAgICByZXR1cm4gYWN0aW9uOwogCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuZGVmYXVsdGFjdGlvbiBub3QgZm91bmQiKTsKQEAgLTE5MiwyMyArMjAxLDI2IEBACiBub3JtYWxpemVfbW9kdWxlKFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgIGNvbnN0IGNoYXIgKm1vZF9zdHI7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGludCByYyA9IFB5T2JqZWN0X0lzVHJ1ZShmaWxlbmFtZSk7Ci0gICAgaWYgKHJjID09IC0xKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlIGlmIChyYyA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOwotCi0gICAgbW9kX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZmlsZW5hbWUpOwotICAgIGlmIChtb2Rfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGxlbiA9IFB5VW5pY29kZV9HZXRMZW5ndGgoZmlsZW5hbWUpOwogICAgIGlmIChsZW4gPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChmaWxlbmFtZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKGZpbGVuYW1lKTsKKworICAgIC8qIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIucHkiKTogKi8KICAgICBpZiAobGVuID49IDMgJiYKLSAgICAgICAgc3RybmNtcChtb2Rfc3RyICsgKGxlbiAtIDMpLCAiLnB5IiwgMykgPT0gMCkgeworICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMykgPT0gJy4nICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0yKSA9PSAncCcgJiYKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTEpID09ICd5JykKKyAgICB7CiAgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcoZmlsZW5hbWUsIDAsIGxlbi0zKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNTMsMzkgKzI2NSw2MyBAQAogCiAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2F0ZWdvcnksICZQeUlkX19fbmFtZV9fKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKSAgLyogWFhYIENhbiBhbiBvYmplY3QgbGFjayBhICdfX25hbWVfXycgYXR0cmlidXRlPyAqLwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBmX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgZl9zdGRlcnIgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoZl9zdGRlcnIgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvc3Qgc3lzLnN0ZGVyclxuIik7Ci0gICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIFByaW50ICJmaWxlbmFtZTpsaW5lbm86IGNhdGVnb3J5OiB0ZXh0XG4iICovCi0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KGZpbGVuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcobGluZW5vX3N0ciwgZl9zdGRlcnIpOwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZl9zdGRlcnIpOwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh0ZXh0LCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwotICAgIFB5X1hERUNSRUYobmFtZSk7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcobGluZW5vX3N0ciwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh0ZXh0LCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0NMRUFSKG5hbWUpOwogCiAgICAgLyogUHJpbnQgIiAgc291cmNlX2xpbmVcbiIgKi8KICAgICBpZiAoc291cmNlbGluZSkgewotICAgICAgICBjaGFyICpzb3VyY2VfbGluZV9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNvdXJjZWxpbmUpOwotICAgICAgICBpZiAoc291cmNlX2xpbmVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aGlsZSAoKnNvdXJjZV9saW5lX3N0ciA9PSAnICcgfHwgKnNvdXJjZV9saW5lX3N0ciA9PSAnXHQnIHx8Ci0gICAgICAgICAgICAgICAgKnNvdXJjZV9saW5lX3N0ciA9PSAnXDAxNCcpCi0gICAgICAgICAgICBzb3VyY2VfbGluZV9zdHIrKzsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIFB5X3NzaXplX3QgaSwgbGVuOworICAgICAgICBQeV9VQ1M0IGNoOworICAgICAgICBQeU9iamVjdCAqdHJ1bmNhdGVkOwogCi0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhzb3VyY2VfbGluZV9zdHIsIGZfc3RkZXJyKTsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzb3VyY2VsaW5lKSA8IDEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzb3VyY2VsaW5lKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNvdXJjZWxpbmUpOworICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzb3VyY2VsaW5lKTsKKyAgICAgICAgZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKyAgICAgICAgICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgICAgICBpZiAoY2ggIT0gJyAnICYmIGNoICE9ICdcdCcgJiYgY2ggIT0gJ1wwMTQnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdHJ1bmNhdGVkID0gUHlVbmljb2RlX1N1YnN0cmluZyhzb3VyY2VsaW5lLCBpLCBsZW4pOworICAgICAgICBpZiAodHJ1bmNhdGVkID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChzb3VyY2VsaW5lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKKyAgICAgICAgUHlfREVDUkVGKHRydW5jYXRlZCk7CiAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycik7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgaWYgKF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBlbHNlIHsKKyAgICAgICAgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBmaWxlbmFtZSwgbGluZW5vLCAyKTsKKyAgICB9CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgUHlFcnJfQ2xlYXIoKTsKIH0KIApAQCAtMjk2LDkgKzMzMiwxNiBAQAogewogICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdGV4dCA9IE5VTEwsICpyZXN1bHQgPSBOVUxMLCAqbGluZW5vX29iaiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBQeV9Ob25lOwotICAgIGNvbnN0IGNoYXIgKmFjdGlvbjsKKyAgICBQeU9iamVjdCAqYWN0aW9uOwogICAgIGludCByYzsKIAorICAgIC8qIG1vZHVsZSBjYW4gYmUgTm9uZSBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBsYXRlIGR1cmluZyBQeXRob24gc2h1dGRvd24uCisgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgUHl0aG9uIHdhcm5pbmdzIG1vZHVsZSB3YXMgcHJvYmFibHkgdW5sb2FkZWQsIGZpbHRlcnMKKyAgICAgICBhcmUgbm8gbW9yZSBhdmFpbGFibGUgdG8gY2hvb3NlIGFzIGFjdGlvbi4gSXQgaXMgc2FmZXIgdG8gaWdub3JlIHRoZQorICAgICAgIHdhcm5pbmcgYW5kIGRvIG5vdGhpbmcuICovCisgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKwogICAgIGlmIChyZWdpc3RyeSAmJiAhUHlEaWN0X0NoZWNrKHJlZ2lzdHJ5KSAmJiAocmVnaXN0cnkgIT0gUHlfTm9uZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidyZWdpc3RyeScgbXVzdCBiZSBhIGRpY3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTQsNyArMzk3LDcgQEAKICAgICBpZiAoYWN0aW9uID09IE5VTEwpCiAgICAgICAgIGdvdG8gY2xlYW51cDsKIAotICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiZXJyb3IiKSA9PSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImVycm9yIikgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UpOwogICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQpAQCAtMzYyLDEzICs0MDUsMTMgQEAKICAgICAvKiBTdG9yZSBpbiB0aGUgcmVnaXN0cnkgdGhhdCB3ZSd2ZSBiZWVuIGhlcmUsICpleGNlcHQqIHdoZW4gdGhlIGFjdGlvbgogICAgICAgIGlzICJhbHdheXMiLiAqLwogICAgIHJjID0gMDsKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiYWx3YXlzIikgIT0gMCkgewogICAgICAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lICYmCiAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVnaXN0cnksIGtleSwgUHlfVHJ1ZSkgPCAwKQogICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAiaWdub3JlIikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiaWdub3JlIikgPT0gMCkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuX25vbmU7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJvbmNlIikgPT0gMCkgeworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJvbmNlIikgPT0gMCkgewogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwgfHwgcmVnaXN0cnkgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0gZ2V0X29uY2VfcmVnaXN0cnkoKTsKICAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCkKQEAgLTM3NywyNCArNDIwLDE1IEBACiAgICAgICAgICAgICAvKiBfb25jZV9yZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnkpXSA9IDEgKi8KICAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgewogICAgICAgICAgICAgLyogcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5LCAwKV0gPSAxICovCiAgICAgICAgICAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdG9fc3RyID0gUHlPYmplY3RfU3RyKGl0ZW0pOwotICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyX3N0ciA9ICI/Pz8iOwotCi0gICAgICAgICAgICBpZiAodG9fc3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBlcnJfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyh0b19zdHIpOwotICAgICAgICAgICAgICAgIGlmIChlcnJfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVzKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgZXJyX3N0cik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHRvX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJVIpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBpdGVtKTsKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgICAgfQogICAgIH0KQEAgLTUyOCwxMyArNTYyLDEyIEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKCptb2R1bGUpOwogICAgICAgICAqZmlsZW5hbWUgPSBOVUxMOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwotICAgICAgICBpZiAoc3RyY21wKG1vZHVsZV9zdHIsICJfX21haW5fXyIpID09IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7Ci0gICAgICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgeworICAgICAgICBpZiAoKm1vZHVsZSAhPSBQeV9Ob25lICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKCptb2R1bGUsICJfX21haW5fXyIpID09IDApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICphcmd2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2FyZ3YpOworICAgICAgICAgICAgLyogUHlMaXN0X0NoZWNrKCkgaXMgbmVlZGVkIGJlY2F1c2Ugc3lzLmFyZ3YgaXMgc2V0IHRvIE5vbmUgZHVyaW5nCisgICAgICAgICAgICAgICBQeXRob24gZmluYWxpemF0aW9uICovCisgICAgICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9DaGVjayhhcmd2KSAmJiBQeUxpc3RfU2l6ZShhcmd2KSA+IDApIHsKICAgICAgICAgICAgICAgICBpbnQgaXNfdHJ1ZTsKICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeUxpc3RfR2V0SXRlbShhcmd2LCAwKTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKQEAgLTU1NCw4ICs1ODcsOCBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogZW1iZWRkZWQgaW50ZXJwcmV0ZXJzIGRvbid0IGhhdmUgc3lzLmFyZ3YsIHNlZSBidWcgIzgzOTE1MSAqLwogICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkgewpAQCAtNjQ5LDcgKzY4Miw3IEBACiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5ID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlX2dsb2JhbHMgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PT2l8T09POndhcm5fZXhwbGljaXQiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT1VpfE9PTzp3YXJuX2V4cGxpY2l0IiwKICAgICAgICAgICAgICAgICBrd2RfbGlzdCwgJm1lc3NhZ2UsICZjYXRlZ29yeSwgJmZpbGVuYW1lLCAmbGluZW5vLCAmbW9kdWxlLAogICAgICAgICAgICAgICAgICZyZWdpc3RyeSwgJm1vZHVsZV9nbG9iYWxzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MDcsMTQgKzc0MCwxNCBAQAogCiAgICAgICAgIC8qIEhhbmRsZSB0aGUgd2FybmluZy4gKi8KICAgICAgICAgcmV0dXJuZWQgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIHNvdXJjZV9saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzb3VyY2VfbGlzdCk7CiAgICAgICAgIHJldHVybiByZXR1cm5lZDsKICAgICB9CiAKICBzdGFuZGFyZF9jYWxsOgogICAgIHJldHVybiB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgTlVMTCk7CiB9CiAKIApAQCAtNzg2LDExICs4MTksMjYgQEAKIAogLyogV2FybmluZyB3aXRoIGV4cGxpY2l0IG9yaWdpbiAqLwogaW50CitQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCisgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CisgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnksIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiAwOworfQorCitpbnQKIFB5RXJyX1dhcm5FeHBsaWNpdChQeU9iamVjdCAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgbGluZW5vLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIHsKLSAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodGV4dCk7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOwogICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOwpAQCAtODAwLDE4ICs4NDgsMTIgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKICAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7Ci0gICAgICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0gICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7Ci0gICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLCByZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBleGl0OwotICAgIFB5X0RFQ1JFRihyZXMpOwotICAgIHJldCA9IDA7CisgICAgcmV0ID0gUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5KTsKIAogIGV4aXQ6CiAgICAgUHlfWERFQ1JFRihtZXNzYWdlKTsKQEAgLTgyMCw2ICs4NjIsNDkgQEAKICAgICByZXR1cm4gcmV0OwogfQogCitpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIsIFB5T2JqZWN0ICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCAqbWVzc2FnZTsKKyAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaW50IHJldCA9IC0xOworICAgIHZhX2xpc3QgdmFyZ3M7CisKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKKyAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCisgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CisjZWxzZQorICAgIHZhX3N0YXJ0KHZhcmdzKTsKKyNlbmRpZgorICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnksIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHZhX2VuZCh2YXJncyk7CitleGl0OgorICAgIFB5X1hERUNSRUYobW9kdWxlKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmV0OworfQorCiAKIFB5RG9jX1NUUlZBUih3YXJuX2RvYywKICJJc3N1ZSBhIHdhcm5pbmcsIG9yIG1heWJlIGlnbm9yZSBpdCBvciByYWlzZSBhbiBleGNlcHRpb24uIik7CmRpZmYgLS1naXQgYS9QeXRob24vYXNkbC5jIGIvUHl0aG9uL2FzZGwuYwppbmRleCBlN2UzMjgwLi43NGZhOTQxIDEwMDY0NAotLS0gYS9QeXRob24vYXNkbC5jCisrKyBiL1B5dGhvbi9hc2RsLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSAiYXNkbC5oIgogCiBhc2RsX3NlcSAqCi1hc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKK19QeV9hc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhc2RsX3NlcSAqc2VxID0gTlVMTDsKICAgICBzaXplX3QgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKQEAgLTMzLDcgKzMzLDcgQEAKIH0KIAogYXNkbF9pbnRfc2VxICoKLWFzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKK19QeV9hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXNkbF9pbnRfc2VxICpzZXEgPSBOVUxMOwogICAgIHNpemVfdCBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzdC5jIGIvUHl0aG9uL2FzdC5jCmluZGV4IDlhMGIwNjQuLjNiZDI0ZmQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc3QuYworKysgYi9QeXRob24vYXN0LmMKQEAgLTEwOSwyMiArMTA5LDE0IEBACiB7CiAgICAgaWYgKCF2YWxpZGF0ZV9hcmdzKGFyZ3MtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXJncy0+dmFyYXJnYW5ub3RhdGlvbikgewotICAgICAgICBpZiAoIWFyZ3MtPnZhcmFyZykgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ2YXJhcmdhbm5vdGF0aW9uIGJ1dCBubyB2YXJhcmcgb24gYXJndW1lbnRzIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXZhbGlkYXRlX2V4cHIoYXJncy0+dmFyYXJnYW5ub3RhdGlvbiwgTG9hZCkpCisgICAgaWYgKGFyZ3MtPnZhcmFyZyAmJiBhcmdzLT52YXJhcmctPmFubm90YXRpb24KKyAgICAgICAgJiYgIXZhbGlkYXRlX2V4cHIoYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uLCBMb2FkKSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVfYXJncyhhcmdzLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbikgewotICAgICAgICBpZiAoIWFyZ3MtPmt3YXJnKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImt3YXJnYW5ub3RhdGlvbiBidXQgbm8ga3dhcmcgb24gYXJndW1lbnRzIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXZhbGlkYXRlX2V4cHIoYXJncy0+a3dhcmdhbm5vdGF0aW9uLCBMb2FkKSkKKyAgICBpZiAoYXJncy0+a3dhcmcgJiYgYXJncy0+a3dhcmctPmFubm90YXRpb24gCisgICAgICAgICYmICF2YWxpZGF0ZV9leHByKGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uLCBMb2FkKSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChhc2RsX3NlcV9MRU4oYXJncy0+ZGVmYXVsdHMpID4gYXNkbF9zZXFfTEVOKGFyZ3MtPmFyZ3MpKSB7CkBAIC0yODIsNiArMjc0LDcgQEAKICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX2V4cHJzKGV4cC0+di5UdXBsZS5lbHRzLCBjdHgsIDApOwogICAgIC8qIFRoZXNlIGxhc3QgY2FzZXMgZG9uJ3QgaGF2ZSBhbnkgY2hlY2tpbmcuICovCiAgICAgY2FzZSBOYW1lX2tpbmQ6CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgIHJldHVybiAxOwogICAgIGRlZmF1bHQ6CkBAIC00OTgsNyArNDkxLDcgQEAKIHN0cnVjdCBjb21waWxpbmcgewogICAgIGNoYXIgKmNfZW5jb2Rpbmc7IC8qIHNvdXJjZSBlbmNvZGluZyAqLwogICAgIFB5QXJlbmEgKmNfYXJlbmE7IC8qIGFyZW5hIGZvciBhbGxvY2F0aW5nIG1lbWVvcnkgKi8KLSAgICBjb25zdCBjaGFyICpjX2ZpbGVuYW1lOyAvKiBmaWxlbmFtZSAqLworICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lOyAvKiBmaWxlbmFtZSAqLwogICAgIFB5T2JqZWN0ICpjX25vcm1hbGl6ZTsgLyogTm9ybWFsaXphdGlvbiBmdW5jdGlvbiBmcm9tIHVuaWNvZGVkYXRhLiAqLwogICAgIFB5T2JqZWN0ICpjX25vcm1hbGl6ZV9hcmdzOyAvKiBOb3JtYWxpemF0aW9uIGFyZ3VtZW50IHR1cGxlLiAqLwogfTsKQEAgLTU2Nyw3ICs1NjAsMTAgQEAKICAgICAgICAgaWQgPSBpZDI7CiAgICAgfQogICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZpZCk7Ci0gICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBpZCk7CisgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgaWQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoaWQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIGlkOwogfQogCkBAIC01NzcsMjQgKzU3MywxMyBAQAogYXN0X2Vycm9yKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGNvbnN0IGNoYXIgKmVycm1zZykKIHsKICAgICBQeU9iamVjdCAqdmFsdWUsICplcnJzdHIsICpsb2MsICp0bXA7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lX29iajsKIAotICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0KGMtPmNfZmlsZW5hbWUsIExJTkVOTyhuKSk7CisgICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoYy0+Y19maWxlbmFtZSwgTElORU5PKG4pKTsKICAgICBpZiAoIWxvYykgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIGxvYyA9IFB5X05vbmU7CiAgICAgfQotICAgIGlmIChjLT5jX2ZpbGVuYW1lKSB7Ci0gICAgICAgIGZpbGVuYW1lX29iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoYy0+Y19maWxlbmFtZSk7Ci0gICAgICAgIGlmICghZmlsZW5hbWVfb2JqKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobG9jKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICBmaWxlbmFtZV9vYmogPSBQeV9Ob25lOwotICAgIH0KLSAgICB0bXAgPSBQeV9CdWlsZFZhbHVlKCIoTmlpTikiLCBmaWxlbmFtZV9vYmosIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBsb2MpOworICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihPaWlOKSIsIGMtPmNfZmlsZW5hbWUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBsb2MpOwogICAgIGlmICghdG1wKQogICAgICAgICByZXR1cm4gMDsKICAgICBlcnJzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhlcnJtc2cpOwpAQCAtNjc3LDggKzY2Miw4IEBACiAqLwogCiBtb2RfdHkKLVB5QVNUX0Zyb21Ob2RlKGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCitQeUFTVF9Gcm9tTm9kZU9iamVjdChjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBpbnQgaSwgaiwgaywgbnVtOwogICAgIGFzZGxfc2VxICpzdG10cyA9IE5VTEw7CkBAIC02ODgsNiArNjczLDcgQEAKICAgICBtb2RfdHkgcmVzID0gTlVMTDsKIAogICAgIGMuY19hcmVuYSA9IGFyZW5hOworICAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLwogICAgIGMuY19maWxlbmFtZSA9IGZpbGVuYW1lOwogICAgIGMuY19ub3JtYWxpemUgPSBjLmNfbm9ybWFsaXplX2FyZ3MgPSBOVUxMOwogICAgIGlmIChmbGFncyAmJiBmbGFncy0+Y2ZfZmxhZ3MgJiBQeUNGX1NPVVJDRV9JU19VVEY4KSB7CkBAIC03MTAsNyArNjk2LDcgQEAKICAgICBrID0gMDsKICAgICBzd2l0Y2ggKFRZUEUobikpIHsKICAgICAgICAgY2FzZSBmaWxlX2lucHV0OgotICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtX3N0bXRzKG4pLCBhcmVuYSk7CisgICAgICAgICAgICBzdG10cyA9IF9QeV9hc2RsX3NlcV9uZXcobnVtX3N0bXRzKG4pLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXN0bXRzKQogICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKSAtIDE7IGkrKykgewpAQCAtNzUwLDcgKzczNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2FzZSBzaW5nbGVfaW5wdXQ6CiAgICAgICAgICAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gTkVXTElORSkgewotICAgICAgICAgICAgICAgIHN0bXRzID0gYXNkbF9zZXFfbmV3KDEsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBzdG10cyA9IF9QeV9hc2RsX3NlcV9uZXcoMSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChzdG10cywgMCwgUGFzcyhuLT5uX2xpbmVubywgbi0+bl9jb2xfb2Zmc2V0LApAQCAtNzYyLDcgKzc0OCw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgICAgICAgICAgICAgbnVtID0gbnVtX3N0bXRzKG4pOwotICAgICAgICAgICAgICAgIHN0bXRzID0gYXNkbF9zZXFfbmV3KG51bSwgYXJlbmEpOworICAgICAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldyhudW0sIGFyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0bXRzKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICBpZiAobnVtID09IDEpIHsKQEAgLTgwMSw2ICs3ODcsMjEgQEAKICAgICByZXR1cm4gcmVzOwogfQogCittb2RfdHkKK1B5QVNUX0Zyb21Ob2RlKGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQoreworICAgIG1vZF90eSBtb2Q7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7CisKK30KKwogLyogUmV0dXJuIHRoZSBBU1QgcmVwci4gb2YgdGhlIG9wZXJhdG9yIHJlcHJlc2VudGVkIGFzIHN5bnRheCAofCwgXiwgZXRjLikKICovCiAKQEAgLTkwMyw3ICs5MDQsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTmFtZV9raW5kOgogICAgICAgICAgICAgaWYgKGN0eCA9PSBTdG9yZSkgewotICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCBlLT52Lk5hbWUuaWQsIG4sIDEpKQorICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCBlLT52Lk5hbWUuaWQsIG4sIDApKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogZm9yYmlkZGVuX25hbWUoKSBjYWxscyBhc3RfZXJyb3IoKSAqLwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZS0+di5OYW1lLmN0eCA9IGN0eDsKQEAgLTk1NSw2ICs5NTYsOSBAQAogICAgICAgICBjYXNlIEJ5dGVzX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAibGl0ZXJhbCI7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJrZXl3b3JkIjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAiRWxsaXBzaXMiOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDk1LDcgKzEwOTksNyBAQAogICAgIGludCBpOwogICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0IHx8IFRZUEUobikgPT0gdGVzdGxpc3Rfc3Rhcl9leHByIHx8IFRZUEUobikgPT0gdGVzdGxpc3RfY29tcCk7CiAKLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTExMTksNiArMTEyMyw3IEBACiAgICAgaWRlbnRpZmllciBuYW1lOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbiA9IE5VTEw7CiAgICAgbm9kZSAqY2g7CisgICAgYXJnX3R5IHRtcDsKIAogICAgIGFzc2VydChUWVBFKG4pID09IHRmcGRlZiB8fCBUWVBFKG4pID09IHZmcGRlZik7CiAgICAgY2ggPSBDSElMRChuLCAwKTsKQEAgLTExMzQsNyArMTEzOSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmV0dXJuIGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICB0bXAgPSBhcmcobmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CisgICAgaWYgKCF0bXApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdG1wLT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgdG1wLT5jb2xfb2Zmc2V0ID0gbi0+bl9jb2xfb2Zmc2V0OworICAgIHJldHVybiB0bXA7CiB9CiAKIC8qIHJldHVybnMgLTEgaWYgZmFpbGVkIHRvIGhhbmRsZSBrZXl3b3JkIG9ubHkgYXJndW1lbnRzCkBAIC0xMjMwLDE1ICsxMjQxLDEzIEBACiAgICAgaW50IGksIGosIGssIG5wb3NhcmdzID0gMCwgbmt3b25seWFyZ3MgPSAwOwogICAgIGludCBucG9zZGVmYXVsdHMgPSAwLCBmb3VuZF9kZWZhdWx0ID0gMDsKICAgICBhc2RsX3NlcSAqcG9zYXJncywgKnBvc2RlZmF1bHRzLCAqa3dvbmx5YXJncywgKmt3ZGVmYXVsdHM7Ci0gICAgaWRlbnRpZmllciB2YXJhcmcgPSBOVUxMLCBrd2FyZyA9IE5VTEw7CisgICAgYXJnX3R5IHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKICAgICBhcmdfdHkgYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEwsIGt3YXJnYW5ub3RhdGlvbiA9IE5VTEw7CiAgICAgbm9kZSAqY2g7CiAKICAgICBpZiAoVFlQRShuKSA9PSBwYXJhbWV0ZXJzKSB7CiAgICAgICAgIGlmIChOQ0gobikgPT0gMikgLyogKCkgYXMgYXJndW1lbnQgbGlzdCAqLwotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICB9CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdHlwZWRhcmdzbGlzdCB8fCBUWVBFKG4pID09IHZhcmFyZ3NsaXN0KTsKQEAgLTEyNzAsMjIgKzEyNzksMjIgQEAKICAgICAgICAgaWYgKFRZUEUoY2gpID09IERPVUJMRVNUQVIpIGJyZWFrOwogICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZikgbmt3b25seWFyZ3MrKzsKICAgICB9Ci0gICAgcG9zYXJncyA9IChucG9zYXJncyA/IGFzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gX1B5X2FzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2FyZ3MgJiYgbnBvc2FyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGt3b25seWFyZ3MgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dvbmx5YXJncyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcG9zZGVmYXVsdHMgPSAobnBvc2RlZmF1bHRzID8KLSAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhucG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFwb3NkZWZhdWx0cyAmJiBucG9zZGVmYXVsdHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIFRoZSBsZW5ndGggb2Yga3dvbmx5YXJncyBhbmQga3dkZWZhdWx0cyBhcmUgc2FtZQogICAgICAgIHNpbmNlIHdlIHNldCBOVUxMIGFzIGRlZmF1bHQgZm9yIGtleXdvcmQgb25seSBhcmd1bWVudCB3L28gZGVmYXVsdAogICAgICAgIC0gd2UgaGF2ZSBzZXF1ZW5jZSBkYXRhIHN0cnVjdHVyZSwgYnV0IG5vIGRpY3Rpb25hcnkgKi8KICAgICBrd2RlZmF1bHRzID0gKG5rd29ubHlhcmdzID8KLSAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWt3ZGVmYXVsdHMgJiYgbmt3b25seWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMzQ0LDE3ICsxMzUzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGkgPSByZXM7IC8qIHJlcyBoYXMgbmV3IHBvc2l0aW9uIHRvIHByb2Nlc3MgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IGFzdF9mb3JfYXJnKGMsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIHZhcmFyZywgQ0hJTEQoY2gsIDApLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIHZhcmFyZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IE5DSChuKSAmJiAoVFlQRShDSElMRChuLCBpKSkgPT0gdGZwZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBUWVBFKENISUxEKG4sIGkpKSA9PSB2ZnBkZWYpKSB7CkBAIC0xMzY5LDE3ICsxMzcxLDkgQEAKICAgICAgICAgICAgIGNhc2UgRE9VQkxFU1RBUjoKICAgICAgICAgICAgICAgICBjaCA9IENISUxEKG4sIGkrMSk7ICAvKiB0ZnBkZWYgKi8KICAgICAgICAgICAgICAgICBhc3NlcnQoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZik7Ci0gICAgICAgICAgICAgICAga3dhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOworICAgICAgICAgICAgICAgIGt3YXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgIGlmICgha3dhcmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIG9uIHRoZSBrd2FyZyAqLwotICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGt3YXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM4OSw4ICsxMzgzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnRzKHBvc2FyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiwgcG9zZGVmYXVsdHMsIGt3ZGVmYXVsdHMsIGMtPmNfYXJlbmEpOworICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBrd2FyZywgcG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpOwogfQogCiBzdGF0aWMgZXhwcl90eQpAQCAtMTQ2OSw3ICsxNDYyLDcgQEAKICAgICBpbnQgaTsKIAogICAgIFJFUShuLCBkZWNvcmF0b3JzKTsKLSAgICBkZWNvcmF0b3Jfc2VxID0gYXNkbF9zZXFfbmV3KE5DSChuKSwgYy0+Y19hcmVuYSk7CisgICAgZGVjb3JhdG9yX3NlcSA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWRlY29yYXRvcl9zZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNTU1LDggKzE1NDgsNyBAQAogICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKIAogICAgIGlmIChOQ0gobikgPT0gMykgewotICAgICAgICBhcmdzID0gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKQEAgLTE2NjYsNyArMTY1OCw3IEBACiAgICAgaWYgKG5fZm9ycyA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBjb21wcyA9IGFzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOworICAgIGNvbXBzID0gX1B5X2FzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghY29tcHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNzA3LDcgKzE2OTksNyBAQAogICAgICAgICAgICAgaWYgKG5faWZzID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWlmcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTgxOSwxMSArMTgxMSwyMSBAQAogCiAgICAgc3dpdGNoIChUWVBFKGNoKSkgewogICAgIGNhc2UgTkFNRTogewotICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlCi0gICAgICAgICAgIGNoYW5nZWQuICovCi0gICAgICAgIFB5T2JqZWN0ICpuYW1lID0gTkVXX0lERU5USUZJRVIoY2gpOworICAgICAgICBQeU9iamVjdCAqbmFtZTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IFNUUihjaCk7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocyk7CisgICAgICAgIGlmIChsZW4gPj0gNCAmJiBsZW4gPD0gNSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIk5vbmUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X05vbmUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJUcnVlIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9UcnVlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiRmFsc2UiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X0ZhbHNlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IG5ld19pZGVudGlmaWVyKHMsIGMpOwogICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZSBjaGFuZ2VkLiAqLwogICAgICAgICByZXR1cm4gTmFtZShuYW1lLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CkBAIC0xODQ4LDEyICsxODUwLDE1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBuLCBidWYpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0eXBlKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAoYnl0ZXNtb2RlKQogICAgICAgICAgICAgcmV0dXJuIEJ5dGVzKHN0ciwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICBlbHNlCkBAIC0xODY0LDcgKzE4NjksMTAgQEAKICAgICAgICAgaWYgKCFweW51bSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocHludW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE51bShweW51bSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBjYXNlIEVMTElQU0lTOiAvKiBFbGxpcHNpcyAqLwpAQCAtMTkxMyw3ICsxOTIxLDcgQEAKICAgICAgICAgICAgIC8qIGl0J3MgYSBzaW1wbGUgc2V0ICovCiAgICAgICAgICAgICBhc2RsX3NlcSAqZWx0czsKICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gMjsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChjaCk7IGkgKz0gMikgewpAQCAtMTkzMiwxMSArMTk0MCwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogaXQncyBhIGRpY3QgKi8KICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gNDsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFrZXlzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIwOTMsMTUgKzIxMDEsMjIgQEAKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKQogICAgICAgICAgICAgcmV0dXJuIENhbGwobGVmdF9leHByLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBMSU5FTk8obiksCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDEpLCBsZWZ0X2V4cHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGV4cHJfdHkgdG1wID0gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDEpLCBsZWZ0X2V4cHIpOworICAgICAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIHRtcC0+bGluZW5vID0gTElORU5PKG4pOworICAgICAgICAgICAgdG1wLT5jb2xfb2Zmc2V0ID0gbi0+bl9jb2xfb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIHRtcDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBET1QgKSB7CiAgICAgICAgIFB5T2JqZWN0ICphdHRyX2lkID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpOwogICAgICAgICBpZiAoIWF0dHJfaWQpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmV0dXJuIEF0dHJpYnV0ZShsZWZ0X2V4cHIsIGF0dHJfaWQsIExvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhDSElMRChuLCAxKSksIENISUxEKG4sIDEpLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUkVRKENISUxEKG4sIDApLCBMU1FCKTsKQEAgLTIxMjQsNyArMjEzOSw3IEBACiAgICAgICAgICAgICBleHByX3R5IGU7CiAgICAgICAgICAgICBpbnQgc2ltcGxlID0gMTsKICAgICAgICAgICAgIGFzZGxfc2VxICpzbGljZXMsICplbHRzOwotICAgICAgICAgICAgc2xpY2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgc2xpY2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghc2xpY2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE5DSChuKTsgaiArPSAyKSB7CkBAIC0yMTQwLDcgKzIxNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogZXh0cmFjdCBJbmRleCB2YWx1ZXMgYW5kIHB1dCB0aGVtIGluIGEgVHVwbGUgKi8KLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFzZGxfc2VxX0xFTihzbGljZXMpOyArK2opIHsKQEAgLTIyMDIsOCArMjIxNyw2IEBACiAgICAgICAgIHRtcCA9IGFzdF9mb3JfdHJhaWxlcihjLCBjaCwgZSk7CiAgICAgICAgIGlmICghdG1wKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHRtcC0+bGluZW5vID0gZS0+bGluZW5vOwotICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBlLT5jb2xfb2Zmc2V0OwogICAgICAgICBlID0gdG1wOwogICAgIH0KICAgICBpZiAoVFlQRShDSElMRChuLCBOQ0gobikgLSAxKSkgPT0gZmFjdG9yKSB7CkBAIC0yMjc1LDcgKzIyODgsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzZXEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTIzMTEsMTAgKzIzMjQsMTAgQEAKICAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgYXNkbF9pbnRfc2VxICpvcHM7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmNtcHM7Ci0gICAgICAgICAgICAgICAgb3BzID0gYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIW9wcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgY21wcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBjbXBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWNtcHMpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ0MCwxMCArMjQ1MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcmdzID0gYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOworICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKKyAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWtleXdvcmRzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuYXJncyA9IDA7CkBAIC0yNjIwLDcgKzI2MzMsNyBAQAogCiAgICAgICAgIC8qIGEgbm9ybWFsIGFzc2lnbm1lbnQgKi8KICAgICAgICAgUkVRKENISUxEKG4sIDEpLCBFUVVBTCk7Ci0gICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIXRhcmdldHMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMjY2MSw3ICsyNjc0LDcgQEAKIAogICAgIFJFUShuLCBleHBybGlzdCk7CiAKLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0yODQ2LDEzICsyODU5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHN0ciA9IHVuaTsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmc3RyKTsKLSAgICAgICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMoc3RyLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNUQVI6CiAgICAgICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiKiIpOwotICAgICAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMjg4NSw3ICsyOTA0LDcgQEAKICAgICBpZiAoVFlQRShuKSA9PSBpbXBvcnRfbmFtZSkgewogICAgICAgICBuID0gQ0hJTEQobiwgMSk7CiAgICAgICAgIFJFUShuLCBkb3R0ZWRfYXNfbmFtZXMpOwotICAgICAgICBhbGlhc2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI5NDcsNyArMjk2Niw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKG5fY2hpbGRyZW4gKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYWxpYXNlcykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yOTg2LDcgKzMwMDUsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGdsb2JhbF9zdG10KTsKLSAgICBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0zMDA3LDcgKzMwMjYsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIG5vbmxvY2FsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwNjAsNyArMzA3OSw3IEBACiAgICAgUkVRKG4sIHN1aXRlKTsKIAogICAgIHRvdGFsID0gbnVtX3N0bXRzKG4pOwotICAgIHNlcSA9IGFzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBzaW1wbGVfc3RtdCkgewpAQCAtMzE3OSw3ICszMTk4LDcgQEAKICAgICAgICAgaWYgKGhhc19lbHNlKSB7CiAgICAgICAgICAgICBhc2RsX3NlcSAqc3VpdGVfc2VxMjsKIAotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghb3JlbHNlKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBOQ0gobikgLSA2KSk7CkBAIC0zMjAzLDcgKzMyMjIsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2VsaWY7IGkrKykgewogICAgICAgICAgICAgaW50IG9mZiA9IDUgKyAobl9lbGlmIC0gaSAtIDEpICogNDsKLSAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBhc2RsX3NlcSAqbmV3b2JqID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghbmV3b2JqKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBvZmYpKTsKQEAgLTM0MTUsNyArMzQzNCw3IEBACiAgICAgaWYgKG5fZXhjZXB0ID4gMCkgewogICAgICAgICBpbnQgaTsKICAgICAgICAgLyogcHJvY2VzcyBleGNlcHQgc3RhdGVtZW50cyB0byBjcmVhdGUgYSB0cnkgLi4uIGV4Y2VwdCAqLwotICAgICAgICBoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGhhbmRsZXJzID0gX1B5X2FzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM0NjYsNyArMzQ4NSw3IEBACiAgICAgUkVRKG4sIHdpdGhfc3RtdCk7CiAKICAgICBuX2l0ZW1zID0gKE5DSChuKSAtIDIpIC8gMjsKLSAgICBpdGVtcyA9IGFzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKKyAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9pdGVtcywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFpdGVtcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMzYzMiwxOCArMzY1MSwxNiBAQAogICAgIGVuZCA9IHMgKyBzdHJsZW4ocykgLSAxOwogICAgIGltZmxhZyA9ICplbmQgPT0gJ2onIHx8ICplbmQgPT0gJ0onOwogICAgIGlmIChzWzBdID09ICcwJykgewotICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICAgICAgaWYgKHggPCAwICYmIGVycm5vID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZyhzLCAoY2hhciAqKikwLCAwKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHggPSBQeU9TX3N0cnRvbCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gUHlPU19zdHJ0b2wocywgKGNoYXIgKiopJmVuZCwgMCk7CiAgICAgaWYgKCplbmQgPT0gJ1wwJykgewogICAgICAgICBpZiAoZXJybm8gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsIChjaGFyICoqKTAsIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgpOwogICAgIH0KICAgICAvKiBYWFggSHVnZSBmbG9hdHMgbWF5IHNpbGVudGx5IGZhaWwgKi8KQEAgLTM2NjYsOCArMzY4Myw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVjb2RlX3V0Zjgoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3QgY2hhciAqKnNQdHIsIGNvbnN0IGNoYXIgKmVuZCkKIHsKLSAgICBjaGFyICpzLCAqdDsKLSAgICB0ID0gcyA9IChjaGFyICopKnNQdHI7CisgICAgY29uc3QgY2hhciAqcywgKnQ7CisgICAgdCA9IHMgPSAqc1B0cjsKICAgICAvKiB3aGlsZSAocyA8IGVuZCAmJiAqcyAhPSAnXFwnKSBzKys7ICovIC8qIGluZWZmaWNpZW50IGZvciB1Ii4uIiAqLwogICAgIHdoaWxlIChzIDwgZW5kICYmICgqcyAmIDB4ODApKSBzKys7CiAgICAgKnNQdHIgPSBzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2JsdGlubW9kdWxlLmMgYi9QeXRob24vYmx0aW5tb2R1bGUuYwppbmRleCBkZmZkZjQ2Li4wNTdhYjQ3IDEwMDY0NAotLS0gYS9QeXRob24vYmx0aW5tb2R1bGUuYworKysgYi9QeXRob24vYmx0aW5tb2R1bGUuYwpAQCAtMzIsOCArMzIsMTkgQEAKIGludCBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gMDsKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOworX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOworX1B5X0lERU5USUZJRVIoX19yb3VuZF9fKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKGVycm9ycyk7CiBfUHlfSURFTlRJRklFUihmaWxlbm8pOwogX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobWV0YWNsYXNzKTsKK19QeV9JREVOVElGSUVSKHNvcnQpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX19fYnVpbGRfY2xhc3NfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtNDIsNyArNTMsNiBAQAogICAgIFB5T2JqZWN0ICpjbHMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbmFyZ3M7CiAgICAgaW50IGlzY2xhc3M7Ci0gICAgX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCk7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CkBAIC01Nyw2ICs2NywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZnVuYyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7IC8qIEJldHRlciBiZSBjYWxsYWJsZSAqLworICAgIGlmICghUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfX2NsYXNzX186IGZ1bmMgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAxKTsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhuYW1lKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNzcsMTAgKzkyLDEwIEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbWV0YSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1rdywgIm1ldGFjbGFzcyIpOworICAgICAgICBtZXRhID0gX1B5RGljdF9HZXRJdGVtSWQobWt3LCAmUHlJZF9tZXRhY2xhc3MpOwogICAgICAgICBpZiAobWV0YSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYobWV0YSk7Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW1TdHJpbmcobWt3LCAibWV0YWNsYXNzIikgPCAwKSB7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9EZWxJdGVtSWQobWt3LCAmUHlJZF9tZXRhY2xhc3MpIDwgMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtZXRhKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWt3KTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwpAQCAtMTU1LDcgKzE3MCw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBjZWxsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCBucywgTlVMTCk7CisgICAgY2VsbCA9IFB5RXZhbF9FdmFsQ29kZUV4KFB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksIFB5RnVuY3Rpb25fR0VUX0dMT0JBTFMoZnVuYyksIG5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dFVF9DTE9TVVJFKGZ1bmMpKTsKICAgICBpZiAoY2VsbCAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICptYXJnczsKICAgICAgICAgbWFyZ3MgPSBQeVR1cGxlX1BhY2soMywgbmFtZSwgYmFzZXMsIG5zKTsKQEAgLTMzMyw3ICszNTAsMTEgQEAKIFB5RG9jX1NUUlZBUihiaW5fZG9jLAogImJpbihudW1iZXIpIC0+IHN0cmluZ1xuXAogXG5cCi1SZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IGJpbigyNzk2MjAyKVxuXAorICAgJzBiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCdcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzIsOCArNTkzLDcgQEAKIGJ1aWx0aW5fY29tcGlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGNoYXIgKnN0cjsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwotICAgIGNoYXIgKmZpbGVuYW1lOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBjaGFyICpzdGFydHN0cjsKICAgICBpbnQgbW9kZSA9IC0xOwogICAgIGludCBkb250X2luaGVyaXQgPSAwOwpAQCAtNTg5LDEyICs2MDksMTEgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyZzfGlpaTpjb21waWxlIiwgIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJmZpbGVuYW1lX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyLCAmc3VwcGxpZWRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbnRfaW5oZXJpdCwgJm9wdGltaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGZpbGVuYW1lX29iaik7CiAgICAgY2YuY2ZfZmxhZ3MgPSBzdXBwbGllZF9mbGFncyB8IFB5Q0ZfU09VUkNFX0lTX1VURjg7CiAKICAgICBpZiAoc3VwcGxpZWRfZmxhZ3MgJgpAQCAtNjUyLDI0ICs2NzEsMjQgQEAKICAgICAgICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgfQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCi0gICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMsIEFTVCBvciBjb2RlIiwgJmNmKTsKKyAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcyBvciBBU1QiLCAmY2YpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKKyAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKICAgICBnb3RvIGZpbmFsbHk7CiAKIGVycm9yOgogICAgIHJlc3VsdCA9IE5VTEw7CiBmaW5hbGx5OgotICAgIFB5X0RFQ1JFRihmaWxlbmFtZV9vYmopOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzUwLDggKzc2OSwxMSBAQAogICAgIH0KICAgICBpZiAoZ2xvYmFscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwotICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpCisgICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGxvY2FscyA9PSBQeV9Ob25lKQogICAgICAgICBsb2NhbHMgPSBnbG9iYWxzOwpAQCAtNzYzLDkgKzc4NSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIikgPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKKyAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtODE1LDYgKzgzNyw4IEBACiAgICAgICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwogICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdsb2JhbHMgfHwgIWxvY2FscykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtODM2LDkgKzg2MCw5IEBACiAgICAgICAgICAgICBsb2NhbHMtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjU2LDcgKzEyODAsMTEgQEAKIFB5RG9jX1NUUlZBUihoZXhfZG9jLAogImhleChudW1iZXIpIC0+IHN0cmluZ1xuXAogXG5cCi1SZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBoZXgoMzczNTkyODU1OSlcblwKKyAgICcweGRlYWRiZWVmJ1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEzMjIsMjYgKzEzNTAsMzUgQEAKIG1pbl9tYXgoUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzLCBpbnQgb3ApCiB7CiAgICAgUHlPYmplY3QgKnYsICppdCwgKml0ZW0sICp2YWwsICptYXhpdGVtLCAqbWF4dmFsLCAqa2V5ZnVuYz1OVUxMOworICAgIFB5T2JqZWN0ICplbXB0eXR1cGxlLCAqZGVmYXVsdHZhbCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAiZGVmYXVsdCIsIE5VTEx9OwogICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBvcCA9PSBQeV9MVCA/ICJtaW4iIDogIm1heCI7CisgICAgY29uc3QgaW50IHBvc2l0aW9uYWwgPSBQeVR1cGxlX1NpemUoYXJncykgPiAxOworICAgIGludCByZXQ7CiAKLSAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpID4gMSkKKyAgICBpZiAocG9zaXRpb25hbCkKICAgICAgICAgdiA9IGFyZ3M7Ci0gICAgZWxzZSBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsIChjaGFyICopbmFtZSwgMSwgMSwgJnYpKQorICAgIGVsc2UgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCBuYW1lLCAxLCAxLCAmdikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGt3ZHMgIT0gTlVMTCAmJiBQeURpY3RfQ2hlY2soa3dkcykgJiYgUHlEaWN0X1NpemUoa3dkcykpIHsKLSAgICAgICAga2V5ZnVuYyA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGt3ZHMsICJrZXkiKTsKLSAgICAgICAgaWYgKFB5RGljdF9TaXplKGt3ZHMpIT0xICB8fCAga2V5ZnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICIlcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQiLCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihrZXlmdW5jKTsKKyAgICBlbXB0eXR1cGxlID0gUHlUdXBsZV9OZXcoMCk7CisgICAgaWYgKGVtcHR5dHVwbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0ID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGVtcHR5dHVwbGUsIGt3ZHMsICJ8JE9PIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5ZnVuYywgJmRlZmF1bHR2YWwpOworICAgIFB5X0RFQ1JFRihlbXB0eXR1cGxlKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocG9zaXRpb25hbCAmJiBkZWZhdWx0dmFsICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBhIGRlZmF1bHQgZm9yICVzKCkgd2l0aCBtdWx0aXBsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb25hbCBhcmd1bWVudHMiLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKHYpOwogICAgIGlmIChpdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTM4NSwxNCArMTQyMiwxOCBAQAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIEZhaWxfaXQ7CiAgICAgaWYgKG1heHZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIiVzKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlIiwgbmFtZSk7CiAgICAgICAgIGFzc2VydChtYXhpdGVtID09IE5VTEwpOworICAgICAgICBpZiAoZGVmYXVsdHZhbCAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdHZhbCk7CisgICAgICAgICAgICBtYXhpdGVtID0gZGVmYXVsdHZhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygpIGFyZyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSIsIG5hbWUpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgUHlfREVDUkVGKG1heHZhbCk7CiAgICAgUHlfREVDUkVGKGl0KTsKLSAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgIHJldHVybiBtYXhpdGVtOwogCiBGYWlsX2l0X2l0ZW1fYW5kX3ZhbDoKQEAgLTE0MDMsNyArMTQ0NCw2IEBACiAgICAgUHlfWERFQ1JFRihtYXh2YWwpOwogICAgIFB5X1hERUNSRUYobWF4aXRlbSk7CiAgICAgUHlfREVDUkVGKGl0KTsKLSAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNDQ0LDcgKzE0ODQsMTEgQEAKIFB5RG9jX1NUUlZBUihvY3RfZG9jLAogIm9jdChudW1iZXIpIC0+IHN0cmluZ1xuXAogXG5cCi1SZXR1cm4gdGhlIG9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CitSZXR1cm4gdGhlIG9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBvY3QoMzQyMzkxKVxuXAorICAgJzBvMTIzNDU2NydcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNTMwLDcgKzE1NzQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzZXAsICZlbmQsICZmaWxlLCAmZmx1c2gpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZmlsZSA9PSBOVUxMIHx8IGZpbGUgPT0gUHlfTm9uZSkgewotICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKyAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBzeXMuc3Rkb3V0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIHN5cy5zdGRvdXQgbWF5IGJlIE5vbmUgd2hlbiBGSUxFKiBzdGRvdXQgaXNuJ3QgY29ubmVjdGVkICovCiAgICAgICAgIGlmIChmaWxlID09IFB5X05vbmUpCiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTE1ODQsNyArMTYzMyw3IEBACiAgICAgICAgIGlmIChkb19mbHVzaCA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBlbHNlIGlmIChkb19mbHVzaCkgewotICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChmaWxlLCAiZmx1c2giLCAiIik7CisgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZpbGUsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNjEwLDkgKzE2NTksOSBAQAogYnVpbHRpbl9pbnB1dChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnByb21wdGFyZyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpbiA9IFB5U3lzX0dldE9iamVjdCgic3RkaW4iKTsKLSAgICBQeU9iamVjdCAqZm91dCA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7Ci0gICAgUHlPYmplY3QgKmZlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIFB5T2JqZWN0ICpmaW4gPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOworICAgIFB5T2JqZWN0ICpmb3V0ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CisgICAgUHlPYmplY3QgKmZlcnIgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBQeU9iamVjdCAqdG1wOwogICAgIGxvbmcgZmQ7CiAgICAgaW50IHR0eTsKQEAgLTE2ODMsOCArMTczMiw2IEBACiAgICAgICAgIGNoYXIgKnN0ZGluX2VuY29kaW5nX3N0ciwgKnN0ZGluX2Vycm9yc19zdHI7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZXJyb3JzKTsKIAogICAgICAgICBzdGRpbl9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQoZmluLCAmUHlJZF9lbmNvZGluZyk7CiAgICAgICAgIHN0ZGluX2Vycm9ycyA9IF9QeU9iamVjdF9HZXRBdHRySWQoZmluLCAmUHlJZF9lcnJvcnMpOwpAQCAtMTgxMCwxMCArMTg1Nyw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9yb3VuZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqcm91bmRfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmRpZ2l0cyA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJudW1iZXIiLCAibmRpZ2l0cyIsIDB9OwotICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZDsKKyAgICBQeU9iamVjdCAqbnVtYmVyLCAqcm91bmQsICpyZXN1bHQ7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOnJvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZudW1iZXIsICZuZGlnaXRzKSkKQEAgLTE4MjQsMjQgKzE4NzAsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChyb3VuZF9zdHIgPT0gTlVMTCkgewotICAgICAgICByb3VuZF9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yb3VuZF9fIik7Ci0gICAgICAgIGlmIChyb3VuZF9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJvdW5kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShudW1iZXIpLCByb3VuZF9zdHIpOworICAgIHJvdW5kID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobnVtYmVyLCAmUHlJZF9fX3JvdW5kX18pOwogICAgIGlmIChyb3VuZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19yb3VuZF9fIG1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3JvdW5kX18gbWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAobmRpZ2l0cyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJvdW5kLCAiTyIsIG51bWJlcik7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocm91bmQsIE5VTEwpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyb3VuZCwgIk9PIiwgbnVtYmVyLCBuZGlnaXRzKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyb3VuZCwgbmRpZ2l0cywgTlVMTCk7CisgICAgUHlfREVDUkVGKHJvdW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIocm91bmRfZG9jLApAQCAtMTg1OSw3ICsxOTAyLDYgQEAKICAgICBQeU9iamVjdCAqY2FsbGFibGU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJpdGVyYWJsZSIsICJrZXkiLCAicmV2ZXJzZSIsIDB9OwogICAgIGludCByZXZlcnNlOwotICAgIF9QeV9JREVOVElGSUVSKHNvcnQpOwogCiAgICAgLyogYXJncyAxLTMgc2hvdWxkIG1hdGNoIGxpc3Rzb3J0IGluIE9iamVjdHMvbGlzdG9iamVjdC5jICovCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T2k6c29ydGVkIiwKQEAgLTE5MDcsMTYgKzE5NDksMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICBkID0gUHlFdmFsX0dldExvY2FscygpOwotICAgICAgICBpZiAoZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFycygpOiBubyBsb2NhbHMhPyIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkKTsKKyAgICAgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeV9JTkNSRUYoZCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CiAgICAgICAgIGQgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX19fZGljdF9fKTsKICAgICAgICAgaWYgKGQgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTI0MTMsNiArMjQ1MCwxMiBAQAogX1B5QnVpbHRpbl9Jbml0KHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm1vZCwgKmRpY3QsICpkZWJ1ZzsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsdGVyX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5TWFwX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBtb2QgPSBQeU1vZHVsZV9DcmVhdGUoJmJ1aWx0aW5zbW9kdWxlKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NldmFsLmMgYi9QeXRob24vY2V2YWwuYwppbmRleCA3MzkyNWRjLi44MmYwNjUxIDEwMDY0NAotLS0gYS9QeXRob24vY2V2YWwuYworKysgYi9QeXRob24vY2V2YWwuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIHZvaWQKIHBwY19nZXRjb3VudGVyKHVpbnQ2NCAqdikKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CisgICAgdW5zaWduZWQgbG9uZyB0YnUsIHRiLCB0YnUyOwogCiAgIGxvb3A6CiAgICAgYXNtIHZvbGF0aWxlICgibWZ0YnUgJTAiIDogIj1yIiAodGJ1KSApOwpAQCAtMTQyLDggKzE0Miw2IEBACiAKICNkZWZpbmUgTkFNRV9FUlJPUl9NU0cgXAogICAgICJuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgotI2RlZmluZSBHTE9CQUxfTkFNRV9FUlJPUl9NU0cgXAotICAgICJnbG9iYWwgbmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKICNkZWZpbmUgVU5CT1VORExPQ0FMX0VSUk9SX01TRyBcCiAgICAgImxvY2FsIHZhcmlhYmxlICclLjIwMHMnIHJlZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQiCiAjZGVmaW5lIFVOQk9VTkRGUkVFX0VSUk9SX01TRyBcCkBAIC0zNjQsMjkgKzM2MiwyOCBAQAogICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZW5zdXJlIHRoYXQgbmV3bHkKLSAgIGNyZWF0ZWQgY2hpbGQgcHJvY2Vzc2VzIGRvbid0IGhvbGQgbG9ja3MgcmVmZXJyaW5nIHRvIHRocmVhZHMgd2hpY2gKLSAgIGFyZSBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gIChUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZwotICAgcHRocmVhZF9hdGZvcmsgbWVjaGFuaXNtLCBhdCBsZWFzdCBmb3IgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLikgKi8KKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZGVzdHJveSBhbGwgdGhyZWFkcyB3aGljaCBhcmUKKyAqIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgY2xlYXIgaW50ZXJuYWwgbG9ja3Mgd2hpY2ggbWlnaHQgYmUKKyAqIGhlbGQgYnkgdGhvc2UgdGhyZWFkcy4gKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nIHB0aHJlYWRfYXRmb3JrCisgKiBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLwogCiB2b2lkCiBQeUV2YWxfUmVJbml0VGhyZWFkcyh2b2lkKQogewogICAgIF9QeV9JREVOVElGSUVSKF9hZnRlcl9mb3JrKTsKICAgICBQeU9iamVjdCAqdGhyZWFkaW5nLCAqcmVzdWx0OwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlUaHJlYWRTdGF0ZSAqY3VycmVudF90c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogCiAgICAgaWYgKCFnaWxfY3JlYXRlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgcmVjcmVhdGVfZ2lsKCk7CiAgICAgcGVuZGluZ19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgIHRha2VfZ2lsKHRzdGF0ZSk7CisgICAgdGFrZV9naWwoY3VycmVudF90c3RhdGUpOwogICAgIG1haW5fdGhyZWFkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogCiAgICAgLyogVXBkYXRlIHRoZSB0aHJlYWRpbmcgbW9kdWxlIHdpdGggdGhlIG5ldyBzdGF0ZS4KICAgICAgKi8KLSAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwotICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHRzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAorICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKGN1cnJlbnRfdHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZGluZyIpOwogICAgIGlmICh0aHJlYWRpbmcgPT0gTlVMTCkgewogICAgICAgICAvKiB0aHJlYWRpbmcgbm90IGltcG9ydGVkICovCkBAIC0zOTksNiArMzk2LDkgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIFB5X0RFQ1JFRih0aHJlYWRpbmcpOworCisgICAgLyogRGVzdHJveSBhbGwgdGhyZWFkcyBleGNlcHQgdGhlIGN1cnJlbnQgb25lICovCisgICAgX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KGN1cnJlbnRfdHN0YXRlKTsKIH0KIAogI2Vsc2UKQEAgLTc0Miw3ICs3NDIsNiBAQAogZW51bSB3aHlfY29kZSB7CiAgICAgICAgIFdIWV9OT1QgPSAgICAgICAweDAwMDEsIC8qIE5vIGVycm9yICovCiAgICAgICAgIFdIWV9FWENFUFRJT04gPSAweDAwMDIsIC8qIEV4Y2VwdGlvbiBvY2N1cnJlZCAqLwotICAgICAgICBXSFlfUkVSQUlTRSA9ICAgMHgwMDA0LCAvKiBFeGNlcHRpb24gcmUtcmFpc2VkIGJ5ICdmaW5hbGx5JyAqLwogICAgICAgICBXSFlfUkVUVVJOID0gICAgMHgwMDA4LCAvKiAncmV0dXJuJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0JSRUFLID0gICAgIDB4MDAxMCwgLyogJ2JyZWFrJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0NPTlRJTlVFID0gIDB4MDAyMCwgLyogJ2NvbnRpbnVlJyBzdGF0ZW1lbnQgKi8KQEAgLTc1Myw3ICs3NTIsNyBAQAogc3RhdGljIHZvaWQgc2F2ZV9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgc3dhcF9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgcmVzdG9yZV9hbmRfY2xlYXJfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKLXN0YXRpYyBlbnVtIHdoeV9jb2RlIGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworc3RhdGljIGludCBkb19yYWlzZShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgdW5wYWNrX2l0ZXJhYmxlKFB5T2JqZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKik7CiAKIC8qIFJlY29yZHMgd2hldGhlciB0cmFjaW5nIGlzIG9uIGZvciBhbnkgdGhyZWFkLiAgQ291bnRzIHRoZSBudW1iZXIgb2YKQEAgLTc5MywxOCArNzkyLDEyIEBACiAjaWZkZWYgRFhQQUlSUwogICAgIGludCBsYXN0b3Bjb2RlID0gMDsKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKLSAgICByZWdpc3RlciBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KLSAgICByZWdpc3RlciBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLwotICAgIHJlZ2lzdGVyIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLwotICAgIHJlZ2lzdGVyIGludCBlcnI7ICAgICAgICAgICAvKiBFcnJvciBzdGF0dXMgLS0gbm9uemVybyBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp4OyAgICAgICAvKiBSZXN1bHQgb2JqZWN0IC0tIE5VTEwgaWYgZXJyb3IgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsgICAgICAgLyogVGVtcG9yYXJ5IG9iamVjdHMgcG9wcGVkIG9mZiBzdGFjayAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp3OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp1OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp0OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKKyAgICBQeU9iamVjdCAqKnN0YWNrX3BvaW50ZXI7ICAvKiBOZXh0IGZyZWUgc2xvdCBpbiB2YWx1ZSBzdGFjayAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHRfaW5zdHI7CisgICAgaW50IG9wY29kZTsgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlICovCisgICAgaW50IG9wYXJnOyAgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlIGFyZ3VtZW50LCBpZiBhbnkgKi8KKyAgICBlbnVtIHdoeV9jb2RlIHdoeTsgLyogUmVhc29uIGZvciBibG9jayBzdGFjayB1bndpbmQgKi8KKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7ICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeUNvZGVPYmplY3QgKmNvOwpAQCAtMTE4OSw2ICsxMTgyLDcgQEAKICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciAhPSBOVUxMKTsKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsgICAgICAgLyogcmVtYWlucyBOVUxMIHVubGVzcyB5aWVsZCBzdXNwZW5kcyBmcmFtZSAqLworICAgIGYtPmZfZXhlY3V0aW5nID0gMTsKIAogICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgIXRocm93ZmxhZykgewogICAgICAgICBpZiAoZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgewpAQCAtMTIwNiwxNCArMTIwMCwxNiBAQAogI2VuZGlmCiAKICAgICB3aHkgPSBXSFlfTk9UOwotICAgIGVyciA9IDA7Ci0gICAgeCA9IFB5X05vbmU7ICAgICAgICAvKiBOb3QgYSByZWZlcmVuY2UsIGp1c3QgYW55dGhpbmcgbm9uLU5VTEwgKi8KLSAgICB3ID0gTlVMTDsKIAotICAgIGlmICh0aHJvd2ZsYWcpIHsgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KLSAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICB9CisgICAgaWYgKHRocm93ZmxhZykgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KKyAgICAgICAgZ290byBlcnJvcjsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0V2YWxGcmFtZUV4KCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKIAogICAgIGZvciAoOzspIHsKICNpZmRlZiBXSVRIX1RTQwpAQCAtMTIzNSw2ICsxMjMxLDcgQEAKICNlbmRpZgogICAgICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciA+PSBmLT5mX3ZhbHVlc3RhY2spOyAvKiBlbHNlIHVuZGVyZmxvdyAqLwogICAgICAgICBhc3NlcnQoU1RBQ0tfTEVWRUwoKSA8PSBjby0+Y29fc3RhY2tzaXplKTsgIC8qIGVsc2Ugb3ZlcmZsb3cgKi8KKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKIAogICAgICAgICAvKiBEbyBwZXJpb2RpYyB0aGluZ3MuICBEb2luZyB0aGlzIGV2ZXJ5IHRpbWUgdGhyb3VnaAogICAgICAgICAgICB0aGUgbG9vcCB3b3VsZCBhZGQgdG9vIG11Y2ggb3ZlcmhlYWQsIHNvIHdlIGRvIGl0CkBAIC0xMjUwLDE1ICsxMjQ3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgYSB0cnk6IGZpbmFsbHk6IGJsb2NrIHVuaW50ZXJydXB0aWJsZS4gKi8KICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlcisrOwogI2lmZGVmIFdJVEhfVFNDCiAgICAgICAgICAgICB0aWNrZWQgPSAxOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbykpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfZHJvcF9yZXF1ZXN0KSkgewpAQCAtMTI3NiwxMyArMTI3MCwxMiBAQAogI2VuZGlmCiAgICAgICAgICAgICAvKiBDaGVjayBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuICovCiAgICAgICAgICAgICBpZiAodHN0YXRlLT5hc3luY19leGMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHggPSB0c3RhdGUtPmFzeW5jX2V4YzsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gdHN0YXRlLT5hc3luY19leGM7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogICAgICAgICAgICAgICAgIFVOU0lHTkFMX0FTWU5DX0VYQygpOwotICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoeCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKGV4Yyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjkzLDYgKzEyODYsNyBAQAogCiAgICAgICAgIGlmIChfUHlfVHJhY2luZ1Bvc3NpYmxlICYmCiAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwgJiYgIXRzdGF0ZS0+dHJhY2luZykgeworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIC8qIHNlZSBtYXliZV9jYWxsX2xpbmVfdHJhY2UKICAgICAgICAgICAgICAgIGZvciBleHBvc2l0b3J5IGNvbW1lbnRzICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKQEAgLTEzMDcsMTAgKzEzMDEsOSBAQAogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBmLT5mX3N0YWNrdG9wOwogICAgICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgaWYgKGVycikKICAgICAgICAgICAgICAgICAvKiB0cmFjZSBmdW5jdGlvbiByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgLyogRXh0cmFjdCBvcGNvZGUgYW5kIGFyZ3VtZW50ICovCkBAIC0xMzU3LDg3ICsxMzUwLDk5IEBACiAgICAgICAgIFRBUkdFVChOT1ApCiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAKLSAgICAgICAgVEFSR0VUKExPQURfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IsCi0gICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpCi0gICAgICAgICAgICB4ID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9DT05TVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhTVE9SRV9GQVNUKTsKLSAgICAgICAgVEFSR0VUKFNUT1JFX0ZBU1QpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdik7CisgICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCB2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX1RPUCkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgVEFSR0VUKFBPUF9UT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChST1RfVFdPKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodik7CisgICAgICAgIFRBUkdFVChST1RfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RIUkVFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgeCA9IFRISVJEKCk7Ci0gICAgICAgICAgICBTRVRfVE9QKHcpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh4KTsKLSAgICAgICAgICAgIFNFVF9USElSRCh2KTsKKyAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnRoaXJkID0gVEhJUkQoKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2Vjb25kKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQodGhpcmQpOworICAgICAgICAgICAgU0VUX1RISVJEKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgICAgIFBVU0godik7CisgICAgICAgIFRBUkdFVChEVVBfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFBVU0godG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWNvbmQpOwogICAgICAgICAgICAgU1RBQ0tBREooMik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh3KTsKKyAgICAgICAgICAgIFNFVF9UT1AodG9wKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQoc2Vjb25kKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Qb3NpdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUG9zaXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9OZWdhdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTmVnYXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9OT1QpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChVTkFSWV9OT1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwogICAgICAgICAgICAgICAgIFNFVF9UT1AoUHlfVHJ1ZSk7CkBAIC0xNDUwLDQxNiArMTQ1NSw0NjQgQEAKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JbnZlcnQodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfSU5WRVJUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JbnZlcnQodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG93ZXIodiwgdywgUHlfTm9uZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvd2VyKGJhc2UsIGV4cCwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhwKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX1RydWVEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9GbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9GbG9vckRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpKQotICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfRm9ybWF0KHYsIHcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9SZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5VW5pY29kZV9DaGVja0V4YWN0KGRpdmlkZW5kKSA/CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zvcm1hdChkaXZpZGVuZCwgZGl2aXNvcikgOgorICAgICAgICAgICAgICAgIFB5TnVtYmVyX1JlbWFpbmRlcihkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHcpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHVuaWNvZGVfY29uY2F0ZW5hdGUodiwgdywgZiwgbmV4dF9pbnN0cik7CisgICAgICAgIFRBUkdFVChCSU5BUllfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmCisgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdChyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSB1bmljb2RlX2NvbmNhdGVuYXRlKGxlZnQsIHJpZ2h0LCBmLCBuZXh0X2luc3RyKTsKICAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gdiAqLwotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9kZWNyZWZfdng7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfQWRkKHYsIHcpOworICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0FkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfU3VidHJhY3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFNFVF9UT1AoZGlmZik7CisgICAgICAgICAgICBpZiAoZGlmZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRJdGVtKGNvbnRhaW5lciwgc3ViKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0xzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Sc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfQU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1hvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX09yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9IFBFRUsob3BhcmcpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQobGlzdCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdng6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfU3VidHJhY3Qodiwgdyk7CisgICAgICAgIFRBUkdFVChTRVRfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNldCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Mc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfQW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Yb3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKG1vZCk7CisgICAgICAgICAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX09yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gUEVFSyhvcGFyZyk7Ci0gICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNFVF9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOwotICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVBvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW07CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Y7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9JblBsYWNlQWRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdjoKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChzdW0pOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTFNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VBbmQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfWE9SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVhvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlT3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICB1ID0gVEhJUkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0zKTsKICAgICAgICAgICAgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHYsIHcsIHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbShjb250YWluZXIsIHN1Yiwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7CiAgICAgICAgICAgICAvKiBkZWwgdlt3XSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB3ID0gUHlTeXNfR2V0T2JqZWN0KCJkaXNwbGF5aG9vayIpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoUFJJTlRfRVhQUikgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzcGxheWhvb2spOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaG9vayA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9kaXNwbGF5aG9vayk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaWYgKGhvb2sgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb3N0IHN5cy5kaXNwbGF5aG9vayIpOwotICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIHggPSBQeVR1cGxlX1BhY2soMSwgdik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICB3ID0gUHlFdmFsX0NhbGxPYmplY3QodywgeCk7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRih3KTsKLSAgICAgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaG9vaywgdmFsdWUsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICNpZmRlZiBDQVNFX1RPT19CSUcKICAgICAgICAgZGVmYXVsdDogc3dpdGNoIChvcGNvZGUpIHsKICNlbmRpZgotICAgICAgICBUQVJHRVQoUkFJU0VfVkFSQVJHUykKLSAgICAgICAgICAgIHYgPSB3ID0gTlVMTDsKKyAgICAgICAgVEFSR0VUKFJBSVNFX1ZBUkFSR1MpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjYXVzZSA9IE5VTEwsICpleGMgPSBOVUxMOwogICAgICAgICAgICAgc3dpdGNoIChvcGFyZykgewogICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsgLyogY2F1c2UgKi8KKyAgICAgICAgICAgICAgICBjYXVzZSA9IFBPUCgpOyAvKiBjYXVzZSAqLwogICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogZXhjICovCisgICAgICAgICAgICAgICAgZXhjID0gUE9QKCk7IC8qIGV4YyAqLwogICAgICAgICAgICAgY2FzZSAwOiAvKiBGYWxsdGhyb3VnaCAqLwotICAgICAgICAgICAgICAgIHdoeSA9IGRvX3JhaXNlKHcsIHYpOworICAgICAgICAgICAgICAgIGlmIChkb19yYWlzZShleGMsIGNhdXNlKSkgeworICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBSQUlTRV9WQVJBUkdTIG9wYXJnIik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9MT0NBTFMpCi0gICAgICAgICAgICB4ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gZi0+Zl9sb2NhbHM7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHYpOwotICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPSB4OwotICAgICAgICAgICAgRElTUEFUQ0goKTsKLQotICAgICAgICBUQVJHRVQoUkVUVVJOX1ZBTFVFKQorICAgICAgICBUQVJHRVQoUkVUVVJOX1ZBTFVFKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKICAgICAgICAgICAgIHdoeSA9IFdIWV9SRVRVUk47CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFlJRUxEX0ZST00pCi0gICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICB4ID0gVE9QKCk7Ci0gICAgICAgICAgICAvKiBzZW5kIHUgdG8geCAqLwotICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QoeCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlHZW5fU2VuZCgoUHlHZW5PYmplY3QgKil4LCB1KTsKKyAgICAgICAgVEFSR0VUKFlJRUxEX0ZST00pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVjaWV2ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdChyZWNpZXZlcikpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlHZW5fU2VuZCgoUHlHZW5PYmplY3QgKilyZWNpZXZlciwgdik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKHNlbmQpOwotICAgICAgICAgICAgICAgIGlmICh1ID09IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFB5X1RZUEUoeCktPnRwX2l0ZXJuZXh0KHgpOworICAgICAgICAgICAgICAgIGlmICh2ID09IFB5X05vbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFB5X1RZUEUocmVjaWV2ZXIpLT50cF9pdGVybmV4dChyZWNpZXZlcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHgsICZQeUlkX3NlbmQsICJPIiwgdSk7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmVjaWV2ZXIsICZQeUlkX3NlbmQsICJPIiwgdik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbDsKLSAgICAgICAgICAgICAgICB4ID0gUE9QKCk7IC8qIFJlbW92ZSBpdGVyIGZyb20gc3RhY2sgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKICAgICAgICAgICAgICAgICBlcnIgPSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoJnZhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4ID0gdmFsOwotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlY2lldmVyKTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKHZhbCk7CisgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIHggcmVtYWlucyBvbiBzdGFjaywgcmV0dmFsIGlzIHZhbHVlIHRvIGJlIHlpZWxkZWQgKi8KICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwpAQCAtMTg2NywzOSArMTkyMCwzOCBAQAogICAgICAgICAgICAgLyogYW5kIHJlcGVhdC4uLiAqLwogICAgICAgICAgICAgZi0+Zl9sYXN0aS0tOwogICAgICAgICAgICAgZ290byBmYXN0X3lpZWxkOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFlJRUxEX1ZBTFVFKQorICAgICAgICBUQVJHRVQoWUlFTERfVkFMVUUpIHsKICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CiAgICAgICAgICAgICB3aHkgPSBXSFlfWUlFTEQ7CiAgICAgICAgICAgICBnb3RvIGZhc3RfeWllbGQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX0VYQ0VQVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKLSAgICAgICAgICAgICAgICBpZiAoYi0+Yl90eXBlICE9IEVYQ0VQVF9IQU5ETEVSKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3BwZWQgYmxvY2sgaXMgbm90IGFuIGV4Y2VwdCBoYW5kbGVyIik7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CisgICAgICAgIFRBUkdFVChQT1BfRVhDRVBUKSB7CisgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKKyAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3BwZWQgYmxvY2sgaXMgbm90IGFuIGV4Y2VwdCBoYW5kbGVyIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX0JMT0NLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOwotICAgICAgICAgICAgICAgIFVOV0lORF9CTE9DSyhiKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgVEFSR0VUKFBPUF9CTE9DSykgeworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICBVTldJTkRfQkxPQ0soYik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEKEVORF9GSU5BTExZKTsKLSAgICAgICAgVEFSR0VUKEVORF9GSU5BTExZKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIHdoeSA9IChlbnVtIHdoeV9jb2RlKSBQeUxvbmdfQVNfTE9ORyh2KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCk7CisgICAgICAgIFRBUkdFVChFTkRfRklOQUxMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXR1cyA9IFBPUCgpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgd2h5ID0gKGVudW0gd2h5X2NvZGUpIFB5TG9uZ19BU19MT05HKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQgJiYgd2h5ICE9IFdIWV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAgIGlmICh3aHkgPT0gV0hZX1JFVFVSTiB8fAogICAgICAgICAgICAgICAgICAgICB3aHkgPT0gV0hZX0NPTlRJTlVFKQogICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKQEAgLTE5MTIsMjQ4ICsxOTY0LDI4MCBAQAogICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYi0+Yl90eXBlID09IEVYQ0VQVF9IQU5ETEVSKTsKICAgICAgICAgICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOwogICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfTk9UOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUodiwgdywgdSk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX1JFUkFJU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRiID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShzdGF0dXMsIGV4YywgdGIpOworICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHYgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICInZmluYWxseScgcG9wcyBiYWQgZXhjZXB0aW9uIik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9CVUlMRF9DTEFTUykKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoTE9BRF9CVUlMRF9DTEFTUykgewogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19idWlsZF9jbGFzc19fKTsKIAorICAgICAgICAgICAgUHlPYmplY3QgKmJjOwogICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19fYnVpbGRfY2xhc3NfXyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJjID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19idWlsZF9jbGFzc19fKTsKKyAgICAgICAgICAgICAgICBpZiAoYmMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTmFtZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoYmMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmJ1aWxkX2NsYXNzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYnVpbGRfY2xhc3NfXyk7CiAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkX2NsYXNzX3N0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBidWlsZF9jbGFzc19zdHIpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiYyA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgYnVpbGRfY2xhc3Nfc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoYmMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTmFtZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX2NsYXNzX18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0goYmMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KHgpKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh4LCB3LCB2KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0oeCwgdywgdik7CisgICAgICAgIFRBUkdFVChTVE9SRV9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbnMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCB3aGVuIHN0b3JpbmcgJVIiLCBuYW1lKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCB3aGVuIHN0b3JpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG5zKSkKKyAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShucywgbmFtZSwgdik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbShucywgbmFtZSwgdik7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0oeCwgdykpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoREVMRVRFX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm5zID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBkZWxldGluZyAlUiIsIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGRlbGV0aW5nICVSIiwgdyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0obnMsIG5hbWUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFVOUEFDS19TRVFVRU5DRSk7Ci0gICAgICAgIFRBUkdFVChVTlBBQ0tfU0VRVUVOQ0UpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRSh2KSA9PSBvcGFyZykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqaXRlbXMgPSBcCi0gICAgICAgICAgICAgICAgICAgICgoUHlUdXBsZU9iamVjdCAqKXYpLT5vYl9pdGVtOworICAgICAgICBUQVJHRVQoVU5QQUNLX1NFUVVFTkNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VxID0gUE9QKCksICppdGVtLCAqKml0ZW1zOworICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdChzZXEpICYmCisgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShzZXEpID09IG9wYXJnKSB7CisgICAgICAgICAgICAgICAgaXRlbXMgPSAoKFB5VHVwbGVPYmplY3QgKilzZXEpLT5vYl9pdGVtOwogICAgICAgICAgICAgICAgIHdoaWxlIChvcGFyZy0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBpdGVtc1tvcGFyZ107Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUFVTSCh3KTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW29wYXJnXTsKKyAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBQVVNIKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKHYpID09IG9wYXJnKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKippdGVtcyA9IFwKLSAgICAgICAgICAgICAgICAgICAgKChQeUxpc3RPYmplY3QgKil2KS0+b2JfaXRlbTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3Qoc2VxKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoc2VxKSA9PSBvcGFyZykgeworICAgICAgICAgICAgICAgIGl0ZW1zID0gKChQeUxpc3RPYmplY3QgKilzZXEpLT5vYl9pdGVtOwogICAgICAgICAgICAgICAgIHdoaWxlIChvcGFyZy0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBpdGVtc1tvcGFyZ107Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUFVTSCh3KTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW29wYXJnXTsKKyAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBQVVNIKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnLCAtMSwKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHNlcSwgb3BhcmcsIC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIG9wYXJnKSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKG9wYXJnKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogdW5wYWNrX2l0ZXJhYmxlKCkgcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOUEFDS19FWCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoVU5QQUNLX0VYKSB7CiAgICAgICAgICAgICBpbnQgdG90YWxhcmdzID0gMSArIChvcGFyZyAmIDB4RkYpICsgKG9wYXJnID4+IDgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlcSA9IFBPUCgpOwogCi0gICAgICAgICAgICBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnICYgMHhGRiwgb3BhcmcgPj4gOCwKKyAgICAgICAgICAgIGlmICh1bnBhY2tfaXRlcmFibGUoc2VxLCBvcGFyZyAmIDB4RkYsIG9wYXJnID4+IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyB0b3RhbGFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArPSB0b3RhbGFyZ3M7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOworICAgICAgICBUQVJHRVQoU1RPUkVfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gU0VDT05EKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cih2LCB3LCB1KTsgLyogdi53ID0gdSAqLworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cihvd25lciwgbmFtZSwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cih2LCB3LCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVsIHYudyAqLworICAgICAgICBUQVJHRVQoREVMRVRFX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cihvd25lciwgbmFtZSwgKFB5T2JqZWN0ICopTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKFNUT1JFX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3LCB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChERUxFVEVfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgoZXJyID0gUHlEaWN0X0RlbEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KSkgIT0gMCkKKyAgICAgICAgVEFSR0VUKERFTEVURV9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9EZWxJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLCBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKHYgPSBmLT5mX2xvY2FscykgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGxvYWRpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoeCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGxvYWRpbmcgJVIiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGxvY2FscykpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCAmJiBfUHlFcnJfT0NDVVJSRUQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwgJiYgX1B5RXJyX09DQ1VSUkVEKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodik7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICBUQVJHRVQoTE9BRF9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9nbG9iYWxzKQogICAgICAgICAgICAgICAgICYmIFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IF9QeURpY3RfTG9hZEdsb2JhbCgoUHlEaWN0T2JqZWN0ICopZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgIHYgPSBfUHlEaWN0X0xvYWRHbG9iYWwoKFB5RGljdE9iamVjdCAqKWYtPmZfZ2xvYmFscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURpY3RPYmplY3QgKilmLT5mX2J1aWx0aW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIV9QeUVycl9PQ0NVUlJFRCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBTbG93LXBhdGggaWYgZ2xvYmFscyBvciBidWlsdGlucyBpcyBub3QgYSBkaWN0ICovCi0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0godik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9GQVNUKQotICAgICAgICAgICAgeCA9IEdFVExPQ0FMKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKERFTEVURV9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IEdFVExPQ0FMKG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh2ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgTlVMTCk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KQEAgLTIxNjIsMjUyICsyMjQ2LDMxMiBAQAogICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCiAgICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpCiAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfREVSRUYpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgaWYgKFB5Q2VsbF9HRVQoeCkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgTlVMTCk7CisgICAgICAgIFRBUkdFVChERUxFVEVfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgaWYgKFB5Q2VsbF9HRVQoY2VsbCkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5Q2VsbF9TZXQoY2VsbCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IC0xOwogICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9DTE9TVVJFKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfREVSRUYpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgdyA9IFB5Q2VsbF9HZXQoeCk7Ci0gICAgICAgICAgICBpZiAodyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUFVTSCh3KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTVE9SRV9ERVJFRikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBQeUNlbGxfU2V0KHgsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoTE9BRF9DTE9TVVJFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihjZWxsKTsKKyAgICAgICAgICAgIFBVU0goY2VsbCk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX1RVUExFKQotICAgICAgICAgICAgeCA9IFB5VHVwbGVfTmV3KG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oeCwgb3BhcmcsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0NMQVNTREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWUsICpsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaWR4OworICAgICAgICAgICAgYXNzZXJ0KGxvY2Fscyk7CisgICAgICAgICAgICBhc3NlcnQob3BhcmcgPj0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpKTsKKyAgICAgICAgICAgIGlkeCA9IG9wYXJnIC0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpOworICAgICAgICAgICAgYXNzZXJ0KGlkeCA+PSAwICYmIGlkeCA8IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2ZyZWV2YXJzKSk7CisgICAgICAgICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGlkeCk7CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobG9jYWxzKSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChCVUlMRF9MSVNUKQotICAgICAgICAgICAgeCA9ICBQeUxpc3RfTmV3KG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTSh4LCBvcGFyZywgdyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoQlVJTERfU0VUKQotICAgICAgICAgICAgeCA9IFB5U2V0X05ldyhOVUxMKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh4LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVChjZWxsKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfTUFQKQotICAgICAgICAgICAgeCA9IF9QeURpY3RfTmV3UHJlc2l6ZWQoKFB5X3NzaXplX3Qpb3BhcmcpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKQotICAgICAgICAgICAgdyA9IFRPUCgpOyAgICAgLyoga2V5ICovCi0gICAgICAgICAgICB1ID0gU0VDT05EKCk7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgdiA9IFRISVJEKCk7ICAgLyogZGljdCAqLwotICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTUFQX0FERCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCi0gICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlDZWxsX0dFVChjZWxsKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEF0dHIodiwgdyk7CisgICAgICAgIFRBUkdFVChTVE9SRV9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlDZWxsX1NldChjZWxsLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENPTVBBUkVfT1ApCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gY21wX291dGNvbWUob3BhcmcsIHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIGJyZWFrOworICAgICAgICBUQVJHRVQoQlVJTERfVFVQTEUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeVR1cGxlX05ldyhvcGFyZyk7CisgICAgICAgICAgICBpZiAodHVwID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCBvcGFyZywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKHR1cCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0ID0gIFB5TGlzdF9OZXcob3BhcmcpOworICAgICAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIG9wYXJnLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0gobGlzdCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX1NFVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNldCA9IFB5U2V0X05ldyhOVUxMKTsKKyAgICAgICAgICAgIGludCBlcnIgPSAwOworICAgICAgICAgICAgaWYgKHNldCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCisgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChzZXQsIGl0ZW0pOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKHNldCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm1hcCA9IF9QeURpY3RfTmV3UHJlc2l6ZWQoKFB5X3NzaXplX3Qpb3BhcmcpOworICAgICAgICAgICAgaWYgKG1hcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQVVNIKG1hcCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKFNUT1JFX01BUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gVEhJUkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBTVEFDS0FESigtMik7CisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QobWFwKSk7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShtYXAsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKE1BUF9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1hcDsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBTVEFDS0FESigtMik7CisgICAgICAgICAgICBtYXAgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QobWFwKSk7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShtYXAsIGtleSwgdmFsdWUpOyAgLyogdlt3XSA9IHUgKi8KKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0dldEF0dHIob3duZXIsIG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChDT01QQVJFX09QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gY21wX291dGNvbWUob3BhcmcsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfRkFMU0UpOwogICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9UUlVFKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0KLSAgICAgICAgVEFSR0VUKElNUE9SVF9OQU1FKQotICAgICAgICB7Ci0gICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB4ID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQXNMb25nKHUpICE9IC0xIHx8IFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgdyA9IFB5VHVwbGVfUGFjayg1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHcgPSBQeVR1cGxlX1BhY2soNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHYgPSB4OwotICAgICAgICAgICAgeCA9IFB5RXZhbF9DYWxsT2JqZWN0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTVBPUlRfU1RBUikKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpID09IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKElNUE9SVF9OQU1FKSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tLCAqbGV2ZWwsICphcmdzLCAqcmVzOworICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW1wb3J0X18gbm90IGZvdW5kIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKKyAgICAgICAgICAgIGZyb20gPSBQT1AoKTsKKyAgICAgICAgICAgIGxldmVsID0gVE9QKCk7CisgICAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhsZXZlbCkgIT0gLTEgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGV2ZWwpOworICAgICAgICAgICAgUHlfREVDUkVGKGZyb20pOworICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKKyAgICAgICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIGFyZ3MpOworICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOworICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKElNUE9SVF9TVEFSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSA9IFBPUCgpLCAqbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgZHVyaW5nICdpbXBvcnQgKiciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgZXJyID0gaW1wb3J0X2FsbF9mcm9tKHgsIHYpOworICAgICAgICAgICAgZXJyID0gaW1wb3J0X2FsbF9mcm9tKGxvY2FscywgZnJvbSk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CiAgICAgICAgICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdChmLCAwKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKGZyb20pOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElNUE9SVF9GUk9NKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKKyAgICAgICAgVEFSR0VUKElNUE9SVF9GUk9NKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgeCA9IGltcG9ydF9mcm9tKHYsIHcpOworICAgICAgICAgICAgcmVzID0gaW1wb3J0X2Zyb20oZnJvbSwgbmFtZSk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfRk9SV0FSRCkKKyAgICAgICAgVEFSR0VUKEpVTVBfRk9SV0FSRCkgewogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhQT1BfSlVNUF9JRl9GQUxTRSk7Ci0gICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9GQUxTRSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9GQUxTRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhQT1BfSlVNUF9JRl9UUlVFKTsKLSAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX1RSVUUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX1RSVUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKQEAgLTI0MTUsNTggKzI1NTksNjMgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0lGX0ZBTFNFX09SX1BPUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgVEFSR0VUKEpVTVBfSUZfRkFMU0VfT1JfUE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9JRl9UUlVFX09SX1BPUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgIFRBUkdFVChKVU1QX0lGX1RSVUVfT1JfUE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgewogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICBUQVJHRVQoSlVNUF9BQlNPTFVURSkKKyAgICAgICAgVEFSR0VUKEpVTVBfQUJTT0xVVEUpIHsKICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAjaWYgRkFTVF9MT09QUwogICAgICAgICAgICAgLyogRW5hYmxpbmcgdGhpcyBwYXRoIHNwZWVkcy11cCBhbGwgd2hpbGUgYW5kIGZvci1sb29wcyBieSBieXBhc3NpbmcKQEAgLTI0ODAsNjAgKzI2MjksNjIgQEAKICNlbHNlCiAgICAgICAgICAgICBESVNQQVRDSCgpOwogI2VuZGlmCisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoR0VUX0lURVIpCisgICAgICAgIFRBUkdFVChHRVRfSVRFUikgewogICAgICAgICAgICAgLyogYmVmb3JlOiBbb2JqXTsgYWZ0ZXIgW2dldGl0ZXIob2JqKV0gKi8KLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVyKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChGT1JfSVRFUik7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXJhYmxlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgIFNFVF9UT1AoaXRlcik7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEZPUl9JVEVSKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoRk9SX0lURVIpOwotICAgICAgICBUQVJHRVQoRk9SX0lURVIpCisgICAgICAgIFRBUkdFVChGT1JfSVRFUikgewogICAgICAgICAgICAgLyogYmVmb3JlOiBbaXRlcl07IGFmdGVyOiBbaXRlciwgaXRlcigpXSAqb3IqIFtdICovCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gKCp2LT5vYl90eXBlLT50cF9pdGVybmV4dCkodik7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmV4dCA9ICgqaXRlci0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKGl0ZXIpOworICAgICAgICAgICAgaWYgKG5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFBVU0gobmV4dCk7CiAgICAgICAgICAgICAgICAgUFJFRElDVChTVE9SRV9GQVNUKTsKICAgICAgICAgICAgICAgICBQUkVESUNUKFVOUEFDS19TRVFVRU5DRSk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19TdG9wSXRlcmF0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaXRlcmF0b3IgZW5kZWQgbm9ybWFsbHkgKi8KLSAgICAgICAgICAgIHggPSB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCUkVBS19MT09QKQorICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkgewogICAgICAgICAgICAgd2h5ID0gV0hZX0JSRUFLOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT05USU5VRV9MT09QKQorICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkgewogICAgICAgICAgICAgcmV0dmFsID0gUHlMb25nX0Zyb21Mb25nKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9DT05USU5VRTsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0xPT1AsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0VYQ0VQVCwgX3NldHVwX2ZpbmFsbHkpCiAgICAgICAgIFRBUkdFVChTRVRVUF9GSU5BTExZKQotICAgICAgICBfc2V0dXBfZmluYWxseToKKyAgICAgICAgX3NldHVwX2ZpbmFsbHk6IHsKICAgICAgICAgICAgIC8qIE5PVEU6IElmIHlvdSBhZGQgYW55IG5ldyBibG9jay1zZXR1cCBvcGNvZGVzIHRoYXQKICAgICAgICAgICAgICAgIGFyZSBub3QgdHJ5L2V4Y2VwdC9maW5hbGx5IGhhbmRsZXJzLCB5b3UgbWF5IG5lZWQKICAgICAgICAgICAgICAgIHRvIHVwZGF0ZSB0aGUgUHlHZW5fTmVlZHNGaW5hbGl6aW5nKCkgZnVuY3Rpb24uCkBAIC0yNTQyLDM3ICsyNjkzLDM1IEBACiAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAoZiwgb3Bjb2RlLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2V4aXRfXyk7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2VudGVyX18pOwotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZXhpdF9fKTsKLSAgICAgICAgICAgIGlmICgheCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICB1ID0gc3BlY2lhbF9sb29rdXAodywgJlB5SWRfX19lbnRlcl9fKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICghdSkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModSwgTlVMTCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqbWdyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhpdCA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19leGl0X18pLCAqZW50ZXI7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaWYgKGV4aXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgU0VUX1RPUChleGl0KTsKKyAgICAgICAgICAgIGVudGVyID0gc3BlY2lhbF9sb29rdXAobWdyLCAmUHlJZF9fX2VudGVyX18pOworICAgICAgICAgICAgUHlfREVDUkVGKG1ncik7CisgICAgICAgICAgICBpZiAoZW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhlbnRlciwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW50ZXIpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgZmluYWxseSBibG9jayBiZWZvcmUgcHVzaGluZyB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICBvZiBfX2VudGVyX18gb24gdGhlIHN0YWNrLiAqLwogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIFNFVFVQX0ZJTkFMTFksIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHJlcyk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoV0lUSF9DTEVBTlVQKSB7CiAgICAgICAgICAgICAvKiBBdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhcmUgMS02IHZhbHVlcyBpbmRpY2F0aW5nCiAgICAgICAgICAgICAgICBob3cvd2h5IHdlIGVudGVyZWQgdGhlIGZpbmFsbHkgY2xhdXNlOgogICAgICAgICAgICAgICAgLSBUT1AgPSBOb25lCkBAIC0yNTk5LDQyICsyNzQ4LDQyIEBACiAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBQeU9iamVjdCAqZXhpdF9mdW5jOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFRPUCgpLCAqdmFsID0gUHlfTm9uZSwgKnRiID0gUHlfTm9uZSwgKnJlczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoZXhjID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOwotICAgICAgICAgICAgICAgIHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sodSkpIHsKLSAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlMb25nX0FzTG9uZyh1KSkgeworICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGV4YykpIHsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChQeUxvbmdfQXNMb25nKGV4YykpIHsKICAgICAgICAgICAgICAgICBjYXNlIFdIWV9SRVRVUk46CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfQ09OVElOVUU6CiAgICAgICAgICAgICAgICAgICAgIC8qIFJldHZhbCBpbiBUT1AuICovCiAgICAgICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFNFQ09ORCgpOwogICAgICAgICAgICAgICAgICAgICBTRVRfU0VDT05EKFRPUCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdSA9IHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBleGMgPSBQeV9Ob25lOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwLCAqZXhjLCAqdGI7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwMiwgKmV4YzIsICp0YjI7CiAgICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYmxvY2s7Ci0gICAgICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgICAgIHcgPSBUSElSRCgpOwotICAgICAgICAgICAgICAgIHRwID0gRk9VUlRIKCk7Ci0gICAgICAgICAgICAgICAgZXhjID0gUEVFSyg1KTsKLSAgICAgICAgICAgICAgICB0YiA9IFBFRUsoNik7CisgICAgICAgICAgICAgICAgdmFsID0gU0VDT05EKCk7CisgICAgICAgICAgICAgICAgdGIgPSBUSElSRCgpOworICAgICAgICAgICAgICAgIHRwMiA9IEZPVVJUSCgpOworICAgICAgICAgICAgICAgIGV4YzIgPSBQRUVLKDUpOworICAgICAgICAgICAgICAgIHRiMiA9IFBFRUsoNik7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gUEVFSyg3KTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNywgdGIpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cCk7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiMik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4YzIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cDIpOwogICAgICAgICAgICAgICAgIC8qIFVOV0lORF9FWENFUFRfSEFORExFUiB3aWxsIHBvcCB0aGlzIG9mZi4gKi8KICAgICAgICAgICAgICAgICBTRVRfRk9VUlRIKE5VTEwpOwogICAgICAgICAgICAgICAgIC8qIFdlIGp1c3Qgc2hpZnRlZCB0aGUgc3RhY2sgZG93biwgc28gd2UgaGF2ZQpAQCAtMjY0NSw1NiArMjc5NCw1MyBAQAogICAgICAgICAgICAgICAgIGJsb2NrLT5iX2xldmVsLS07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBYWFggTm90IHRoZSBmYXN0ZXN0IHdheSB0byBjYWxsIGl0Li4uICovCi0gICAgICAgICAgICB4ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhleGl0X2Z1bmMsIHUsIHYsIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCBleGMsIHZhbCwgdGIsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4aXRfZnVuYyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBHbyB0byBlcnJvciBleGl0ICovCisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAgICAgaWYgKHUgIT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoeCk7CisgICAgICAgICAgICBpZiAoZXhjICE9IFB5X05vbmUpCisgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogCiAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYW4gZXhjZXB0aW9uIGFuZCBhIFRydWUgcmV0dXJuICovCiAgICAgICAgICAgICAgICAgUFVTSChQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIFdIWV9TSUxFTkNFRCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUFJFRElDVChFTkRfRklOQUxMWSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTikKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKipzcDsKKyAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogI2lmZGVmIFdJVEhfVFNDCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcsICZpbnRyMCwgJmludHIxKTsKICNlbHNlCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnKTsKKyAgICAgICAgICAgIHJlcyA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBzcDsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9WQVIsIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdykKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChDQUxMX0ZVTkNUSU9OX0tXLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OX1ZBUl9LVykKLSAgICAgICAgX2NhbGxfZnVuY3Rpb25fdmFyX2t3OgotICAgICAgICB7CisgICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzogewogICAgICAgICAgICAgaW50IG5hID0gb3BhcmcgJiAweGZmOwogICAgICAgICAgICAgaW50IG5rID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAob3Bjb2RlIC0gQ0FMTF9GVU5DVElPTikgJiAzOwogICAgICAgICAgICAgaW50IG4gPSBuYSArIDIgKiBuazsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwOworICAgICAgICAgICAgUHlPYmplY3QgKipwZnVuYywgKmZ1bmMsICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgQ0FMTF9GTEFHX1ZBUikKICAgICAgICAgICAgICAgICBuKys7CkBAIC0yNzE3LDEzNyArMjg2MywxNTYgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gZXh0X2RvX2NhbGwoZnVuYywgJnNwLCBmbGFncywgbmEsIG5rKTsKKyAgICAgICAgICAgIHJlcyA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAKICAgICAgICAgICAgIHdoaWxlIChzdGFja19wb2ludGVyID4gcGZ1bmMpIHsKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChNQUtFX0NMT1NVUkUsIF9tYWtlX2Z1bmN0aW9uKQogICAgICAgICBUQVJHRVQoTUFLRV9GVU5DVElPTikKLSAgICAgICAgX21ha2VfZnVuY3Rpb246Ci0gICAgICAgIHsKKyAgICAgICAgX21ha2VfZnVuY3Rpb246IHsKICAgICAgICAgICAgIGludCBwb3NkZWZhdWx0cyA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBrd2RlZmF1bHRzID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgbnVtX2Fubm90YXRpb25zID0gKG9wYXJnID4+IDE2KSAmIDB4N2ZmZjsKIAotICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBxdWFsbmFtZSAqLwotICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLwotICAgICAgICAgICAgeCA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKHYsIGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVhbG5hbWUgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlID0gUE9QKCk7IC8qIGNvZGUgb2JqZWN0ICovCisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKGNvZGUsIGYtPmZfZ2xvYmFscywgcXVhbG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvZGUpOworICAgICAgICAgICAgUHlfREVDUkVGKHF1YWxuYW1lKTsKIAotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBvcGNvZGUgPT0gTUFLRV9DTE9TVVJFKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAob3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjbG9zdXJlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0Q2xvc3VyZShmdW5jLCBjbG9zdXJlKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MgYnl0ZWNvZGUgaXMgY29ycnVwdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgbnVtX2Fubm90YXRpb25zID4gMCkgeworICAgICAgICAgICAgaWYgKG51bV9hbm5vdGF0aW9ucyA+IDApIHsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5hbWVfaXg7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUE9QKCk7IC8qIG5hbWVzIG9mIGFyZ3Mgd2l0aCBhbm5vdGF0aW9ucyAqLworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphbm5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgICAgIGlmIChhbm5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKHUpOworICAgICAgICAgICAgICAgIG5hbWVfaXggPSBQeVR1cGxlX1NpemUobmFtZXMpOwogICAgICAgICAgICAgICAgIGFzc2VydChudW1fYW5ub3RhdGlvbnMgPT0gbmFtZV9peCsxKTsKICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZV9peCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgICAgICAgICAgLS1uYW1lX2l4OwotICAgICAgICAgICAgICAgICAgICB0ID0gUHlUdXBsZV9HRVRfSVRFTSh1LCBuYW1lX2l4KTsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgobm5vcndpdHopOiBjaGVjayBmb3IgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIHQsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKG5hbWVzLCBuYW1lX2l4KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oYW5ucywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoZnVuYywgYW5ucykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIFhYWCBNYXliZSB0aGlzIHNob3VsZCBiZSBhIHNlcGFyYXRlIG9wY29kZT8gKi8KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgcG9zZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh2LCBwb3NkZWZhdWx0cywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKHgsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwotICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYga3dkZWZhdWx0cyA+IDApIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoa3dkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd2hpbGUgKC0ta3dkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogZGVmYXVsdCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICB1ID0gUE9QKCk7IC8qIGt3IG9ubHkgYXJnIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB1LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShkZWZzLCBrZXksIHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyhmdW5jLCBkZWZzKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHBvc2RlZmF1bHRzID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZzID0gUHlUdXBsZV9OZXcocG9zZGVmYXVsdHMpOworICAgICAgICAgICAgICAgIGlmIChkZWZzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKQorICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGRlZnMsIHBvc2RlZmF1bHRzLCBQT1AoKSk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCisgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgY2hhbmdlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goZnVuYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKQorICAgICAgICBUQVJHRVQoQlVJTERfU0xJQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwLCAqc2xpY2U7CiAgICAgICAgICAgICBpZiAob3BhcmcgPT0gMykKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7CisgICAgICAgICAgICAgICAgc3RlcCA9IFBPUCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHcgPSBOVUxMOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5U2xpY2VfTmV3KHUsIHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3RlcCA9IE5VTEw7CisgICAgICAgICAgICBzdG9wID0gUE9QKCk7CisgICAgICAgICAgICBzdGFydCA9IFRPUCgpOworICAgICAgICAgICAgc2xpY2UgPSBQeVNsaWNlX05ldyhzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2xpY2UpOworICAgICAgICAgICAgaWYgKHNsaWNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKQorICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKSB7CiAgICAgICAgICAgICBvcGNvZGUgPSBORVhUT1AoKTsKICAgICAgICAgICAgIG9wYXJnID0gb3Bhcmc8PDE2IHwgTkVYVEFSRygpOwogICAgICAgICAgICAgZ290byBkaXNwYXRjaF9vcGNvZGU7CisgICAgICAgIH0KIAogI2lmIFVTRV9DT01QVVRFRF9HT1RPUwogICAgICAgICBfdW5rbm93bl9vcGNvZGU6CkBAIC0yODU4LDggKzMwMjMsNyBAQAogICAgICAgICAgICAgICAgIFB5RnJhbWVfR2V0TGluZU51bWJlcihmKSwKICAgICAgICAgICAgICAgICBvcGNvZGUpOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAidW5rbm93biBvcGNvZGUiKTsKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICNpZmRlZiBDQVNFX1RPT19CSUcKICAgICAgICAgfQpAQCAtMjg2Nyw3MSArMzAzMSwzNSBAQAogCiAgICAgICAgIH0gLyogc3dpdGNoICovCiAKLSAgICAgICAgb25fZXJyb3I6CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQuIEV2ZXJ5IG9wY29kZSBzaG91bGQgZW5kIHdpdGggRElTUEFUQ0goKQorICAgICAgICAgICBvciBnb3RvIGVycm9yLiAqLworICAgICAgICBhc3NlcnQoMCk7CiAKK2Vycm9yOgogICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnN0MSk7CiAKLSAgICAgICAgLyogUXVpY2tseSBjb250aW51ZSBpZiBubyBlcnJvciBvY2N1cnJlZCAqLworICAgICAgICBhc3NlcnQod2h5ID09IFdIWV9OT1QpOworICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX05PVCkgewotICAgICAgICAgICAgaWYgKGVyciA9PSAwICYmIHggIT0gTlVMTCkgewotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIlhYWCB1bmRldGVjdGVkIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBOb3JtYWwsIGZhc3QgcGF0aCAqLwotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgeCA9IFB5X05vbmU7Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMgKi8KLQotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04gfHwgd2h5ID09IFdIWV9SRVJBSVNFKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJTdGFjayB1bndpbmQgd2l0aCBleGNlcHRpb24gIgotICAgICAgICAgICAgICAgICAgICAic2V0IGFuZCB3aHk9JWQiLCB3aHkpOwotICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvKiBEb3VibGUtY2hlY2sgZXhjZXB0aW9uIHN0YXR1cy4gKi8KKyNpZmRlZiBOREVCVUcKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7CisjZWxzZQorICAgICAgICBhc3NlcnQoUHlFcnJfT2NjdXJyZWQoKSk7CiAjZW5kaWYKIAotICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8gaWYgdGhpcyBpcyBhIHJlYWwgZXhjZXB0aW9uICovCisgICAgICAgIC8qIExvZyB0cmFjZWJhY2sgaW5mby4gKi8KKyAgICAgICAgUHlUcmFjZUJhY2tfSGVyZShmKTsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pIHsKLSAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7Ci0KLSAgICAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRm9yIHRoZSByZXN0LCB0cmVhdCBXSFlfUkVSQUlTRSBhcyBXSFlfRVhDRVBUSU9OICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVSQUlTRSkKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0KLSAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLworICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKIAogZmFzdF9ibG9ja19lbmQ6CisgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX05PVCk7CisKKyAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLwogICAgICAgICB3aGlsZSAod2h5ICE9IFdIWV9OT1QgJiYgZi0+Zl9pYmxvY2sgPiAwKSB7CiAgICAgICAgICAgICAvKiBQZWVrIGF0IHRoZSBjdXJyZW50IGJsb2NrLiAqLwogICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9ICZmLT5mX2Jsb2Nrc3RhY2tbZi0+Zl9pYmxvY2sgLSAxXTsKQEAgLTI5NzgsNyArMzEwNiwxMCBAQAogICAgICAgICAgICAgICAgICAgIFB5dGhvbiBtYWluIGxvb3AuICovCiAgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAmZXhjLCAmdmFsLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBpZiAodGIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgUHlfTm9uZSk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGV4Yyk7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5leGNfdHlwZSA9IGV4YzsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsKTsKQEAgLTMwMTAsMTggKzMxNDEsMjMgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7CiAKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKwogICAgIH0gLyogbWFpbiBsb29wICovCiAKICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCk7CiAgICAgLyogUG9wIHJlbWFpbmluZyBzdGFjayBlbnRyaWVzLiAqLwogICAgIHdoaWxlICghRU1QVFkoKSkgewotICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgIFB5X1hERUNSRUYodik7CisgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgIFB5X1hERUNSRUYobyk7CiAgICAgfQogCiAgICAgaWYgKHdoeSAhPSBXSFlfUkVUVVJOKQogICAgICAgICByZXR2YWwgPSBOVUxMOwogCisgICAgYXNzZXJ0KChyZXR2YWwgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHx8IChyZXR2YWwgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CisKIGZhc3RfeWllbGQ6CiAgICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUiAmJiAod2h5ID09IFdIWV9ZSUVMRCB8fCB3aHkgPT0gV0hZX1JFVFVSTikpIHsKICAgICAgICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBibG9jayBpcyB0byBwdXQgYXNpZGUgdGhlIGdlbmVyYXRvcidzIGV4Y2VwdGlvbgpAQCAtMzA3OCw2ICszMjE0LDcgQEAKICAgICAvKiBwb3AgZnJhbWUgKi8KIGV4aXRfZXZhbF9mcmFtZToKICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKKyAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CiAgICAgdHN0YXRlLT5mcmFtZSA9IGYtPmZfYmFjazsKIAogICAgIHJldHVybiByZXR2YWw7CkBAIC0zMjQzLDkgKzMzODAsOSBAQAogICAgICAgICAgICBQeU9iamVjdCAqKmRlZnMsIGludCBkZWZjb3VudCwgUHlPYmplY3QgKmt3ZGVmcywgUHlPYmplY3QgKmNsb3N1cmUpCiB7CiAgICAgUHlDb2RlT2JqZWN0KiBjbyA9IChQeUNvZGVPYmplY3QqKV9jbzsKLSAgICByZWdpc3RlciBQeUZyYW1lT2JqZWN0ICpmOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKKyAgICBQeUZyYW1lT2JqZWN0ICpmOworICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIFB5T2JqZWN0ICp4LCAqdTsKICAgICBpbnQgdG90YWxfYXJncyA9IGNvLT5jb19hcmdjb3VudCArIGNvLT5jb19rd29ubHlhcmdjb3VudDsKQEAgLTM1MjIsNyArMzY1OSw3IEBACiAKIC8qIExvZ2ljIGZvciB0aGUgcmFpc2Ugc3RhdGVtZW50ICh0b28gY29tcGxpY2F0ZWQgZm9yIGlubGluaW5nKS4KICAgIFRoaXMgKmNvbnN1bWVzKiBhIHJlZmVyZW5jZSBjb3VudCB0byBlYWNoIG9mIGl0cyBhcmd1bWVudHMuICovCi1zdGF0aWMgZW51bSB3aHlfY29kZQorc3RhdGljIGludAogZG9fcmFpc2UoUHlPYmplY3QgKmV4YywgUHlPYmplY3QgKmNhdXNlKQogewogICAgIFB5T2JqZWN0ICp0eXBlID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKQEAgLTM1MzcsMTMgKzM2NzQsMTMgQEAKICAgICAgICAgaWYgKHR5cGUgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gYWN0aXZlIGV4Y2VwdGlvbiB0byByZXJhaXNlIik7Ci0gICAgICAgICAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIFB5X1hJTkNSRUYodHlwZSk7CiAgICAgICAgIFB5X1hJTkNSRUYodmFsdWUpOwogICAgICAgICBQeV9YSU5DUkVGKHRiKTsKICAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdGIpOwotICAgICAgICByZXR1cm4gV0hZX1JFUkFJU0U7CisgICAgICAgIHJldHVybiAxOwogICAgIH0KIAogICAgIC8qIFdlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBmb3JtcyBvZiByYWlzZToKQEAgLTM2MDYsMTMgKzM3NDMsMTMgQEAKICAgICAvKiBQeUVycl9TZXRPYmplY3QgaW5jcmVmJ3MgaXRzIGFyZ3VtZW50cyAqLwogICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgIFB5X1hERUNSRUYodHlwZSk7Ci0gICAgcmV0dXJuIFdIWV9FWENFUFRJT047CisgICAgcmV0dXJuIDA7CiAKIHJhaXNlX2Vycm9yOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgIFB5X1hERUNSRUYodHlwZSk7CiAgICAgUHlfWERFQ1JFRihjYXVzZSk7Ci0gICAgcmV0dXJuIFdIWV9FWENFUFRJT047CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qIEl0ZXJhdGUgdiBhcmdjbnQgdGltZXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIG9uIHRoZSBzdGFjayAodmlhIGRlY3JlYXNpbmcKQEAgLTM3MTEsMjcgKzM4NDgsMjggQEAKIHN0YXRpYyB2b2lkCiBjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmYpCiB7Ci0gICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKmFyZzsKKyAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqb3JpZ190cmFjZWJhY2ssICphcmc7CiAgICAgaW50IGVycjsKLSAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKyAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICB9Ci0gICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOworICAgIHRyYWNlYmFjayA9IChvcmlnX3RyYWNlYmFjayAhPSBOVUxMKSA/IG9yaWdfdHJhY2ViYWNrIDogUHlfTm9uZTsKICAgICBhcmcgPSBQeVR1cGxlX1BhY2soMywgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBlcnIgPSBjYWxsX3RyYWNlKGZ1bmMsIHNlbGYsIGYsIFB5VHJhY2VfRVhDRVBUSU9OLCBhcmcpOwogICAgIFB5X0RFQ1JFRihhcmcpOwogICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgIGVsc2UgewogICAgICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRih0cmFjZWJhY2spOworICAgICAgICBQeV9YREVDUkVGKG9yaWdfdHJhY2ViYWNrKTsKICAgICB9CiB9CiAKQEAgLTM3NjAsNyArMzg5OCw3IEBACiBjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgaW50IHdoYXQsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gZnJhbWUtPmZfdHN0YXRlOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKICAgICBpbnQgcmVzdWx0OwogICAgIGlmICh0c3RhdGUtPnRyYWNpbmcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzg3MSw5ICs0MDA5LDE1IEBACiBQeUV2YWxfR2V0TG9jYWxzKHZvaWQpCiB7CiAgICAgUHlGcmFtZU9iamVjdCAqY3VycmVudF9mcmFtZSA9IFB5RXZhbF9HZXRGcmFtZSgpOwotICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpCisgICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJmcmFtZSBkb2VzIG5vdCBleGlzdCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhjdXJyZW50X2ZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoY3VycmVudF9mcmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFzc2VydChjdXJyZW50X2ZyYW1lLT5mX2xvY2FscyAhPSBOVUxMKTsKICAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9sb2NhbHM7CiB9CiAKQEAgLTM4ODMsOCArNDAyNyw5IEBACiAgICAgUHlGcmFtZU9iamVjdCAqY3VycmVudF9mcmFtZSA9IFB5RXZhbF9HZXRGcmFtZSgpOwogICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfZ2xvYmFsczsKKworICAgIGFzc2VydChjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHMgIT0gTlVMTCk7CisgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfZ2xvYmFsczsKIH0KIAogUHlGcmFtZU9iamVjdCAqCkBAIC0zOTI2LDYgKzQwNzEsMTMgQEAKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcygpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbgorICAgICAgIHNldCwgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpCisgICAgICAgYW5kIHNvIHRoZSBjYWxsZXIgbG9vc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICBpZiAoYXJnID09IE5VTEwpIHsKICAgICAgICAgYXJnID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgIGlmIChhcmcgPT0gTlVMTCkKQEAgLTM5NDgsNiArNDEwMCw5IEBACiAKICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZywga3cpOwogICAgIFB5X0RFQ1JFRihhcmcpOworCisgICAgYXNzZXJ0KChyZXN1bHQgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00MDY1LDEwICs0MjIwLDE1IEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlPYmplY3QgKmNhbGxhcmdzOwogICAgICAgICAgICAgY2FsbGFyZ3MgPSBsb2FkX2FyZ3MocHBfc3RhY2ssIG5hKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOwotICAgICAgICAgICAgQ19UUkFDRSh4LCBQeUNGdW5jdGlvbl9DYWxsKGZ1bmMsY2FsbGFyZ3MsTlVMTCkpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIGlmIChjYWxsYXJncyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMCk7CisgICAgICAgICAgICAgICAgQ19UUkFDRSh4LCBQeUNGdW5jdGlvbl9DYWxsKGZ1bmMsY2FsbGFyZ3MsTlVMTCkpOworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgeCA9IE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoUHlNZXRob2RfQ2hlY2soZnVuYykgJiYgUHlNZXRob2RfR0VUX1NFTEYoZnVuYykgIT0gTlVMTCkgewpAQCAtNDA5Myw2ICs0MjUzLDggQEAKICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7CiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICB9CisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogCiAgICAgLyogQ2xlYXIgdGhlIHN0YWNrIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBBbHNvIHJlbW92ZXMKICAgICAgICB0aGUgYXJndW1lbnRzIGluIGNhc2UgdGhleSB3ZXJlbid0IGNvbnN1bWVkIGFscmVhZHkKQEAgLTQxMDMsNiArNDI2NSw5IEBACiAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgUENBTEwoUENBTExfUE9QKTsKICAgICB9CisKKyAgICBhc3NlcnQoKHggIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHg7CiB9CiAKQEAgLTQzODYsNiArNDU1MSw4IEBACiAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CiAgICAgUHlfWERFQ1JFRihrd2RpY3QpOwogICAgIFB5X1hERUNSRUYoc3RhcmFyZyk7CisgICAgYXNzZXJ0KChyZXN1bHQgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NDI0LDcgKzQ1OTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uIGlzIG5vdCBhbGxvd2VkIgogCiBzdGF0aWMgUHlPYmplY3QgKgotY21wX291dGNvbWUoaW50IG9wLCByZWdpc3RlciBQeU9iamVjdCAqdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitjbXBfb3V0Y29tZShpbnQgb3AsIFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBpbnQgcmVzID0gMDsKICAgICBzd2l0Y2ggKG9wKSB7CkBAIC00NDgyLDcgKzQ2NDksNyBAQAogCiAgICAgeCA9IFB5T2JqZWN0X0dldEF0dHIodiwgbmFtZSk7CiAgICAgaWYgKHggPT0gTlVMTCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJjYW5ub3QgaW1wb3J0IG5hbWUgJVMiLCBuYW1lKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVSIiwgbmFtZSk7CiAgICAgfQogICAgIHJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvZGVjcy5jIGIvUHl0aG9uL2NvZGVjcy5jCmluZGV4IGZkNjdkMWIuLjVmZjQxYjUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb2RlY3MuYworKysgYi9QeXRob24vY29kZWNzLmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYwogUHlPYmplY3QgKm5vcm1hbGl6ZXN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7CisgICAgc2l6ZV90IGk7CiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzdHJpbmcpOwogICAgIGNoYXIgKnA7CiAgICAgUHlPYmplY3QgKnY7CkBAIC02NSw5ICs2NSw5IEBACiAKICAgICBwID0gUHlNZW1fTWFsbG9jKGxlbiArIDEpOwogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciBjaCA9IHN0cmluZ1tpXTsKKyAgICAgICAgY2hhciBjaCA9IHN0cmluZ1tpXTsKICAgICAgICAgaWYgKGNoID09ICcgJykKICAgICAgICAgICAgIGNoID0gJy0nOwogICAgICAgICBlbHNlCkBAIC0zMzIsMzAgKzMzMiw0NSBAQAogICAgIHJldHVybiBjb2RlY19nZXRzdHJlYW1jb2RlYyhlbmNvZGluZywgc3RyZWFtLCBlcnJvcnMsIDMpOwogfQogCisvKiBIZWxwZXIgdGhhdCB0cmllcyB0byBlbnN1cmUgdGhlIHJlcG9ydGVkIGV4Y2VwdGlvbiBjaGFpbiBpbmRpY2F0ZXMgdGhlCisgKiBjb2RlYyB0aGF0IHdhcyBpbnZva2VkIHRvIHRyaWdnZXIgdGhlIGZhaWx1cmUgd2l0aG91dCBjaGFuZ2luZyB0aGUgdHlwZQorICogb2YgdGhlIGV4Y2VwdGlvbiByYWlzZWQuCisgKi8KK3N0YXRpYyB2b2lkCit3cmFwX2NvZGVjX2Vycm9yKGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgLyogVHJ5U2V0RnJvbUNhdXNlIHdpbGwgcmVwbGFjZSB0aGUgYWN0aXZlIGV4Y2VwdGlvbiB3aXRoIGEgc3VpdGFibHkKKyAgICAgKiB1cGRhdGVkIGNsb25lIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIGl0IHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsCisgICAgICogZXhjZXB0aW9uIGFsb25lLgorICAgICAqLworICAgIF9QeUVycl9UcnlTZXRGcm9tQ2F1c2UoIiVzIHdpdGggJyVzJyBjb2RlYyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBlbmNvZGluZyk7Cit9CisKIC8qIEVuY29kZSBhbiBvYmplY3QgKGUuZy4gYW4gVW5pY29kZSBvYmplY3QpIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZwogICAgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGVuY29kZWQgb2JqZWN0ICh1c3VhbGx5IGEgUHl0aG9uIHN0cmluZykuCiAKICAgIGVycm9ycyBpcyBwYXNzZWQgdG8gdGhlIGVuY29kZXIgZmFjdG9yeSBhcyBhcmd1bWVudCBpZiBub24tTlVMTC4gKi8KIAotUHlPYmplY3QgKlB5Q29kZWNfRW5jb2RlKFB5T2JqZWN0ICpvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorc3RhdGljIFB5T2JqZWN0ICoKK19QeUNvZGVjX0VuY29kZUludGVybmFsKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIFB5T2JqZWN0ICplbmNvZGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2ID0gTlVMTDsKIAotICAgIGVuY29kZXIgPSBQeUNvZGVjX0VuY29kZXIoZW5jb2RpbmcpOwotICAgIGlmIChlbmNvZGVyID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIGFyZ3MgPSBhcmdzX3R1cGxlKG9iamVjdCwgZXJyb3JzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChlbmNvZGVyLCBhcmdzKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHdyYXBfY29kZWNfZXJyb3IoImVuY29kaW5nIiwgZW5jb2RpbmcpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogCiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3VsdCkgfHwKICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpICE9IDIpIHsKQEAgLTM4NCwyNSArMzk5LDI0IEBACiAKICAgIGVycm9ycyBpcyBwYXNzZWQgdG8gdGhlIGRlY29kZXIgZmFjdG9yeSBhcyBhcmd1bWVudCBpZiBub24tTlVMTC4gKi8KIAotUHlPYmplY3QgKlB5Q29kZWNfRGVjb2RlKFB5T2JqZWN0ICpvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorc3RhdGljIFB5T2JqZWN0ICoKK19QeUNvZGVjX0RlY29kZUludGVybmFsKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIFB5T2JqZWN0ICpkZWNvZGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgZGVjb2RlciA9IFB5Q29kZWNfRGVjb2RlcihlbmNvZGluZyk7Ci0gICAgaWYgKGRlY29kZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgYXJncyA9IGFyZ3NfdHVwbGUob2JqZWN0LCBlcnJvcnMpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGRlY29kZXIsYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICB3cmFwX2NvZGVjX2Vycm9yKCJkZWNvZGluZyIsIGVuY29kaW5nKTsKICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdWx0KSB8fAogICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgIT0gMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNDI1LDYgKzQzOSwxMTggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogR2VuZXJpYyBlbmNvZGluZy9kZWNvZGluZyBBUEkgKi8KK1B5T2JqZWN0ICpQeUNvZGVjX0VuY29kZShQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKworICAgIGVuY29kZXIgPSBQeUNvZGVjX0VuY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChlbmNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0VuY29kZUludGVybmFsKG9iamVjdCwgZW5jb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKK1B5T2JqZWN0ICpQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZGVjb2RlcjsKKworICAgIGRlY29kZXIgPSBQeUNvZGVjX0RlY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChkZWNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0RlY29kZUludGVybmFsKG9iamVjdCwgZGVjb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKKy8qIFRleHQgZW5jb2RpbmcvZGVjb2RpbmcgQVBJICovCitzdGF0aWMKK1B5T2JqZWN0ICpjb2RlY19nZXRpdGVtX2NoZWNrZWQoY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wZXJhdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpCit7CisgICAgX1B5X0lERU5USUZJRVIoX2lzX3RleHRfZW5jb2RpbmcpOworICAgIFB5T2JqZWN0ICpjb2RlYzsKKyAgICBQeU9iamVjdCAqYXR0cjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBpbnQgaXNfdGV4dF9jb2RlYzsKKworICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKKyAgICBpZiAoY29kZWMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogYXNzdW1lIGFueSByYXcgdHVwbGUgZGVzY3JpYmVzIGEgdGV4dAorICAgICAqIGVuY29kaW5nLCBhbmQgdGhlIHNhbWUgZm9yIGFueXRoaW5nIGxhY2tpbmcgdGhlIHByaXZhdGUKKyAgICAgKiBhdHRyaWJ1dGUuCisgICAgICovCisgICAgaWYgKCFQeVR1cGxlX0NoZWNrRXhhY3QoY29kZWMpKSB7CisgICAgICAgIGF0dHIgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNvZGVjLCAmUHlJZF9faXNfdGV4dF9lbmNvZGluZyk7CisgICAgICAgIGlmIChhdHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc190ZXh0X2NvZGVjID0gUHlPYmplY3RfSXNUcnVlKGF0dHIpOworICAgICAgICAgICAgUHlfREVDUkVGKGF0dHIpOworICAgICAgICAgICAgaWYgKCFpc190ZXh0X2NvZGVjKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvZGVjKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLiVzKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgb3BlcmF0aW9uX25hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdiA9IFB5VHVwbGVfR0VUX0lURU0oY29kZWMsIGluZGV4KTsKKyAgICBQeV9ERUNSRUYoY29kZWMpOworICAgIFB5X0lOQ1JFRih2KTsKKyAgICByZXR1cm4gdjsKK30KKworc3RhdGljIFB5T2JqZWN0ICogX1B5Q29kZWNfVGV4dEVuY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGNvZGVjX2dldGl0ZW1fY2hlY2tlZChlbmNvZGluZywgImVuY29kZSIsIDApOworfQorCitzdGF0aWMgUHlPYmplY3QgKiBfUHlDb2RlY19UZXh0RGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICByZXR1cm4gY29kZWNfZ2V0aXRlbV9jaGVja2VkKGVuY29kaW5nLCAiZGVjb2RlIiwgMSk7Cit9CisKK1B5T2JqZWN0ICpfUHlDb2RlY19FbmNvZGVUZXh0KFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKworICAgIGVuY29kZXIgPSBfUHlDb2RlY19UZXh0RW5jb2RlcihlbmNvZGluZyk7CisgICAgaWYgKGVuY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5Q29kZWNfRW5jb2RlSW50ZXJuYWwob2JqZWN0LCBlbmNvZGVyLCBlbmNvZGluZywgZXJyb3JzKTsKK30KKworUHlPYmplY3QgKl9QeUNvZGVjX0RlY29kZVRleHQoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIFB5T2JqZWN0ICpkZWNvZGVyOworCisgICAgZGVjb2RlciA9IF9QeUNvZGVjX1RleHREZWNvZGVyKGVuY29kaW5nKTsKKyAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlDb2RlY19EZWNvZGVJbnRlcm5hbChvYmplY3QsIGRlY29kZXIsIGVuY29kaW5nLCBlcnJvcnMpOworfQorCiAvKiBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gZXJyb3IgdW5kZXIgdGhlIG5hbWUKICAgIG5hbWUuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGNvZGVjIHdoZW4gaXQgZW5jb3VudGVycwogICAgYW4gdW5lbmNvZGFibGUgY2hhcmFjdGVycy91bmRlY29kYWJsZSBieXRlcyBhbmQgZG9lc24ndCBrbm93IHRoZQpAQCAtNDQxLDcgKzU2Nyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbmFtZSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBlcnJvcik7CiB9CiAKIC8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKQEAgLTQ1Nyw3ICs1ODMsNyBAQAogCiAgICAgaWYgKG5hbWU9PU5VTEwpCiAgICAgICAgIG5hbWUgPSAic3RyaWN0IjsKLSAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgKGNoYXIgKiluYW1lKTsKKyAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgbmFtZSk7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsICJ1bmtub3duIGVycm9yIGhhbmRsZXIgbmFtZSAnJS40MDBzJyIsIG5hbWUpOwogICAgIGVsc2UKQEAgLTczMyw2ICs4NTksNjUgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRU5DX1VURjggICAgICAgIDAKKyNkZWZpbmUgRU5DX1VURjE2QkUgICAgIDEKKyNkZWZpbmUgRU5DX1VURjE2TEUgICAgIDIKKyNkZWZpbmUgRU5DX1VURjMyQkUgICAgIDMKKyNkZWZpbmUgRU5DX1VURjMyTEUgICAgIDQKKworc3RhdGljIGludAorZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQgKmJ5dGVsZW5ndGgpCit7CisgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICd1JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAndCcgJiYKKyAgICAgICAgUHlfVE9MT1dFUihlbmNvZGluZ1syXSkgPT0gJ2YnKSB7CisgICAgICAgIGVuY29kaW5nICs9IDM7CisgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgaWYgKGVuY29kaW5nWzBdID09ICcxJyAmJiBlbmNvZGluZ1sxXSA9PSAnNicpIHsKKyAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CisgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDI7CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2QkU7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAnZScgJiYgZW5jb2RpbmdbMl0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnYicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2wnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2TEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW5jb2RpbmdbMF0gPT0gJzMnICYmIGVuY29kaW5nWzFdID09ICcyJykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gNDsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB1dGYtOCAqLworICAgICpieXRlbGVuZ3RoID0gMzsKKyAgICByZXR1cm4gRU5DX1VURjg7Cit9CisKIC8qIFRoaXMgaGFuZGxlciBpcyBkZWNsYXJlZCBzdGF0aWMgdW50aWwgc29tZW9uZSBkZW1vbnN0cmF0ZXMKICAgIGEgbmVlZCB0byBjYWxsIGl0IGRpcmVjdGx5LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc0MCwzNyArOTI1LDc3IEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgIFB5T2JqZWN0ICpvYmplY3Q7CisgICAgUHlPYmplY3QgKmVuY29kZTsKKyAgICBjaGFyICplbmNvZGluZzsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgYnl0ZWxlbmd0aDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewotICAgICAgICBjaGFyICpvdXRwOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAzKihlbmQtc3RhcnQpKTsKKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVsZW5ndGgqKGVuZC1zdGFydCkpOwogICAgICAgICBpZiAoIXJlcykgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBvdXRwID0gUHlCeXRlc19Bc1N0cmluZyhyZXMpOworICAgICAgICBvdXRwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgInJlYWR5IiAqLwogICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCB8fCBjaCA+IDB4ZGZmZikgeworICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKICAgICAgICAgICAgICAgICAvKiBOb3QgYSBzdXJyb2dhdGUsIGZhaWwgd2l0aCBvcmlnaW5hbCBleGNlcHRpb24gKi8KICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweGUwIHwgKGNoID4+IDEyKSk7Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZMRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkJFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyTEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMTYpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMjQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoT24pIiwgcmVzLCBlbmQpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTc4MiwzNCArMTAwNyw2NCBAQAogICAgICAgICBQeV9VQ1M0IGNoID0gMDsKICAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhvYmplY3QpKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCiAgICAgICAgIC8qIFRyeSBkZWNvZGluZyBhIHNpbmdsZSBzdXJyb2dhdGUgY2hhcmFjdGVyLiBJZgogICAgICAgICAgICB0aGVyZSBhcmUgbW9yZSwgbGV0IHRoZSBjb2RlYyBjYWxsIHVzIGFnYWluLiAqLwogICAgICAgICBwICs9IHN0YXJ0OwotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gMyAmJgotICAgICAgICAgICAgKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCi0gICAgICAgICAgICAocFsxXSAmIDB4YzApID09IDB4ODAgJiYKLSAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgewotICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpCi0gICAgICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCi0gICAgICAgICAgICAgICAgY2ggPSAwOworICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gYnl0ZWxlbmd0aCkgeworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgIGlmICgocFswXSAmIDB4ZjApID09IDB4ZTAgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGhyZWUtYnl0ZSBjb2RlICovCisgICAgICAgICAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzFdIDw8IDggfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICBjaCA9IHBbMF0gPDwgOCB8IHBbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgIGNoID0gKHBbM10gPDwgMjQpIHwgKHBbMl0gPDwgMTYpIHwgKHBbMV0gPDwgOCkgfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwotICAgICAgICBpZiAoY2ggPT0gMCkgeworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCszKTsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIHN0YXJ0ICsgYnl0ZWxlbmd0aCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3cm9uZ19leGNlcHRpb25fdHlwZShleGMpOwpAQCAtMTAyNiw3ICsxMjgxLDcgQEAKIAogICAgIGlmIChpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5KSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgobWV0aG9kcyk7ICsraSkgewotICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoJm1ldGhvZHNbaV0uZGVmLCBOVUxMKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoJm1ldGhvZHNbaV0uZGVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICBpZiAoIWZ1bmMpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgaW5pdGlhbGl6ZSBjb2RlYyBlcnJvciByZWdpc3RyeSIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggNmQ2NjI1NS4uMGZjOTE4NiAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC05NCw2ICs5NCw3IEBACiAgICAgQ09NUElMRVJfU0NPUEVfTU9EVUxFLAogICAgIENPTVBJTEVSX1NDT1BFX0NMQVNTLAogICAgIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICBDT01QSUxFUl9TQ09QRV9DT01QUkVIRU5TSU9OLAogfTsKIApAQCAtMTE5LDggKzEyMCw4IEBACiAKICAgICBQeU9iamVjdCAqdV9wcml2YXRlOyAgICAgICAgLyogZm9yIHByaXZhdGUgbmFtZSBtYW5nbGluZyAqLwogCi0gICAgaW50IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLwotICAgIGludCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KKyAgICBQeV9zc2l6ZV90IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLworICAgIFB5X3NzaXplX3QgdV9rd29ubHlhcmdjb3VudDsgLyogbnVtYmVyIG9mIGtleXdvcmQgb25seSBhcmd1bWVudHMgZm9yIGJsb2NrICovCiAgICAgLyogUG9pbnRlciB0byB0aGUgbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgYmxvY2suICBCeSBmb2xsb3dpbmcgYl9saXN0CiAgICAgICAgbWVtYmVycywgeW91IGNhbiByZWFjaCBhbGwgZWFybHkgYWxsb2NhdGVkIGJsb2Nrcy4gKi8KICAgICBiYXNpY2Jsb2NrICp1X2Jsb2NrczsKQEAgLTE0OSw4ICsxNTAsNyBAQAogKi8KIAogc3RydWN0IGNvbXBpbGVyIHsKLSAgICBjb25zdCBjaGFyICpjX2ZpbGVuYW1lOwotICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lX29iajsKKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKmNfc3Q7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqY19mdXR1cmU7IC8qIHBvaW50ZXIgdG8gbW9kdWxlJ3MgX19mdXR1cmVfXyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqY19mbGFnczsKQEAgLTE3MCw3ICsxNzAsNyBAQAogc3RhdGljIGludCBjb21waWxlcl9uZXh0X2luc3RyKHN0cnVjdCBjb21waWxlciAqLCBiYXNpY2Jsb2NrICopOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcChzdHJ1Y3QgY29tcGlsZXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfbyhzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKLXN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIFB5X3NzaXplX3QpOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9qKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIGJhc2ljYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBiYXNpY2Jsb2NrICpjb21waWxlcl91c2VfbmV3X2Jsb2NrKHN0cnVjdCBjb21waWxlciAqKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfZXJyb3Ioc3RydWN0IGNvbXBpbGVyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xOTUsMTIgKzE5NSwxMyBAQAogc3RhdGljIGludCBleHByX2NvbnN0YW50KHN0cnVjdCBjb21waWxlciAqLCBleHByX3R5KTsKIAogc3RhdGljIGludCBjb21waWxlcl93aXRoKHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5LCBpbnQpOwotc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBuLAorc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5X3NzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpOwogc3RhdGljIGludCBjb21waWxlcl90cnlfZXhjZXB0KHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5KTsKK3N0YXRpYyBpbnQgY29tcGlsZXJfc2V0X3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqKTsKIAogc3RhdGljIFB5Q29kZU9iamVjdCAqYXNzZW1ibGUoc3RydWN0IGNvbXBpbGVyICosIGludCBhZGROb25lKTsKIHN0YXRpYyBQeU9iamVjdCAqX19kb2NfXzsKQEAgLTI4OCw4ICsyODksOCBAQAogfQogCiBQeUNvZGVPYmplY3QgKgotUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAotICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCitQeUFTVF9Db21waWxlT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIHN0cnVjdCBjb21waWxlciBjOwogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzA0LDEyICszMDUsMTAgQEAKIAogICAgIGlmICghY29tcGlsZXJfaW5pdCgmYykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgYy5jX2ZpbGVuYW1lX29iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgIGlmICghYy5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGMuY19hcmVuYSA9IGFyZW5hOwotICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUKG1vZCwgZmlsZW5hbWUpOworICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOwogICAgIGlmIChjLmNfZnV0dXJlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAoIWZsYWdzKSB7CkBAIC0zMjMsNyArMzIyLDcgQEAKICAgICBjLmNfb3B0aW1pemUgPSAob3B0aW1pemUgPT0gLTEpID8gUHlfT3B0aW1pemVGbGFnIDogb3B0aW1pemU7CiAgICAgYy5jX25lc3RsZXZlbCA9IDA7CiAKLSAgICBjLmNfc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIGMuY19mdXR1cmUpOworICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CiAgICAgaWYgKGMuY19zdCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIm5vIHN5bXRhYmxlIik7CkBAIC0zMzksNiArMzM4LDIxIEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCitQeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIFB5Q29kZU9iamVjdCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKKworfQorCitQeUNvZGVPYmplY3QgKgogUHlOb2RlX0NvbXBpbGUoc3RydWN0IF9ub2RlICpuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKQEAgLTM2MCw4ICszNzQsNyBAQAogICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoYy0+Y19zdCk7CiAgICAgaWYgKGMtPmNfZnV0dXJlKQogICAgICAgICBQeU9iamVjdF9GcmVlKGMtPmNfZnV0dXJlKTsKLSAgICBpZiAoYy0+Y19maWxlbmFtZV9vYmopCi0gICAgICAgIFB5X0RFQ1JFRihjLT5jX2ZpbGVuYW1lX29iaik7CisgICAgUHlfWERFQ1JFRihjLT5jX2ZpbGVuYW1lKTsKICAgICBQeV9ERUNSRUYoYy0+Y19zdGFjayk7CiB9CiAKQEAgLTM3NSw3ICszODgsNyBAQAogCiAgICAgbiA9IFB5TGlzdF9TaXplKGxpc3QpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKICAgICAgICAgaWYgKCF2KSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQwMyw3ICs0MTYsNyBAQAogKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RieXR5cGUoUHlPYmplY3QgKnNyYywgaW50IHNjb3BlX3R5cGUsIGludCBmbGFnLCBpbnQgb2Zmc2V0KQorZGljdGJ5dHlwZShQeU9iamVjdCAqc3JjLCBpbnQgc2NvcGVfdHlwZSwgaW50IGZsYWcsIFB5X3NzaXplX3Qgb2Zmc2V0KQogewogICAgIFB5X3NzaXplX3QgaSA9IG9mZnNldCwgc2NvcGUsIG51bV9rZXlzLCBrZXlfaTsKICAgICBQeU9iamVjdCAqaywgKnYsICpkZXN0ID0gUHlEaWN0X05ldygpOwpAQCAtNDM3LDcgKzQ1MCw3IEBACiAgICAgICAgIHNjb3BlID0gKHZpID4+IFNDT1BFX09GRlNFVCkgJiBTQ09QRV9NQVNLOwogCiAgICAgICAgIGlmIChzY29wZSA9PSBzY29wZV90eXBlIHx8IHZpICYgZmxhZykgewotICAgICAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKml0ZW0gPSBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CiAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNvcnRlZF9rZXlzKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVzdCk7CkBAIC01MzUsNiArNTQ4LDM3IEBACiAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICh1LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgLyogQ29vayB1cCBhIGltcGxpY2l0IF9fY2xhc3NfXyBjZWxsLiAqLworICAgICAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworICAgICAgICBQeU9iamVjdCAqdHVwbGUsICpuYW1lLCAqemVybzsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgYXNzZXJ0KHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUyk7CisgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fY2xhc3NfXyk7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgUHlfVFlQRShuYW1lKSk7CisgICAgICAgIGlmICghdHVwbGUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKHUtPnVfY2VsbHZhcnMsIHR1cGxlLCB6ZXJvKTsKKyAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB1LT51X2ZyZWV2YXJzID0gZGljdGJ5dHlwZSh1LT51X3N0ZS0+c3RlX3N5bWJvbHMsIEZSRUUsIERFRl9GUkVFX0NMQVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpKTsKQEAgLTU4MCwxMyArNjI0LDE4IEBACiAgICAgaWYgKGNvbXBpbGVyX3VzZV9uZXdfYmxvY2soYykgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAodS0+dV9zY29wZV90eXBlICE9IENPTVBJTEVSX1NDT1BFX01PRFVMRSkgeworICAgICAgICBpZiAoIWNvbXBpbGVyX3NldF9xdWFsbmFtZShjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZAogY29tcGlsZXJfZXhpdF9zY29wZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgaW50IG47CisgICAgUHlfc3NpemVfdCBuOwogICAgIFB5T2JqZWN0ICpjYXBzdWxlOwogCiAgICAgYy0+Y19uZXN0bGV2ZWwtLTsKQEAgLTYwNyw1NyArNjU2LDc3IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgUHlfc3NpemVfdCBzdGFja19zaXplLCBpOwogICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdCwgIi4iKTsKLSAgICBfUHlfc3RhdGljX3N0cmluZyhsb2NhbHMsICI8bG9jYWxzPiIpOwotICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1OwotICAgIFB5T2JqZWN0ICpjYXBzdWxlLCAqbmFtZSwgKnNlcSwgKmRvdF9zdHIsICpsb2NhbHNfc3RyOworICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdF9sb2NhbHMsICIuPGxvY2Fscz4iKTsKKyAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnUgPSBjLT51OworICAgIFB5T2JqZWN0ICpuYW1lLCAqYmFzZSwgKmRvdF9zdHIsICpkb3RfbG9jYWxzX3N0cjsKIAotICAgIHUgPSBjLT51OwotICAgIGlmICh1LT51X3F1YWxuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKHUtPnVfcXVhbG5hbWUpOwotICAgICAgICByZXR1cm4gdS0+dV9xdWFsbmFtZTsKLSAgICB9Ci0KLSAgICBzZXEgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICBiYXNlID0gTlVMTDsKICAgICBzdGFja19zaXplID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdGFja19zaXplOyBpKyspIHsKLSAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBpKTsKLSAgICAgICAgdSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKLSAgICAgICAgYXNzZXJ0KHUpOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX01PRFVMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTikgewotICAgICAgICAgICAgbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZsb2NhbHMpOwotICAgICAgICAgICAgaWYgKGxvY2Fsc19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgbG9jYWxzX3N0cikpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7CisgICAgYXNzZXJ0KHN0YWNrX3NpemUgPj0gMSk7CisgICAgaWYgKHN0YWNrX3NpemUgPiAxKSB7CisgICAgICAgIGludCBzY29wZSwgZm9yY2VfZ2xvYmFsID0gMDsKKyAgICAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnBhcmVudDsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQsICpjYXBzdWxlOworCisgICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgc3RhY2tfc2l6ZSAtIDEpOworICAgICAgICBwYXJlbnQgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7CisgICAgICAgIGFzc2VydChwYXJlbnQpOworCisgICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04gfHwgdS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKSB7CisgICAgICAgICAgICBhc3NlcnQodS0+dV9uYW1lKTsKKyAgICAgICAgICAgIG1hbmdsZWQgPSBfUHlfTWFuZ2xlKHBhcmVudC0+dV9wcml2YXRlLCB1LT51X25hbWUpOworICAgICAgICAgICAgaWYgKCFtYW5nbGVkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKHBhcmVudC0+dV9zdGUsIG1hbmdsZWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOworICAgICAgICAgICAgYXNzZXJ0KHNjb3BlICE9IEdMT0JBTF9JTVBMSUNJVCk7CisgICAgICAgICAgICBpZiAoc2NvcGUgPT0gR0xPQkFMX0VYUExJQ0lUKQorICAgICAgICAgICAgICAgIGZvcmNlX2dsb2JhbCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvcmNlX2dsb2JhbCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OCisgICAgICAgICAgICAgICAgfHwgcGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTEFNQkRBKSB7CisgICAgICAgICAgICAgICAgZG90X2xvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90X2xvY2Fscyk7CisgICAgICAgICAgICAgICAgaWYgKGRvdF9sb2NhbHNfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfQ29uY2F0KHBhcmVudC0+dV9xdWFsbmFtZSwgZG90X2xvY2Fsc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHBhcmVudC0+dV9xdWFsbmFtZSk7CisgICAgICAgICAgICAgICAgYmFzZSA9IHBhcmVudC0+dV9xdWFsbmFtZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICB1ID0gYy0+dTsKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgIGdvdG8gX2Vycm9yOwotICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKLSAgICBpZiAoZG90X3N0ciA9PSBOVUxMKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBuYW1lID0gUHlVbmljb2RlX0pvaW4oZG90X3N0ciwgc2VxKTsKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKLSAgICBQeV9YSU5DUkVGKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwogCi1fZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgZG90X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3QpOworICAgICAgICBpZiAoZG90X3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gUHlVbmljb2RlX0NvbmNhdChiYXNlLCBkb3Rfc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJm5hbWUsIHUtPnVfbmFtZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRih1LT51X25hbWUpOworICAgICAgICBuYW1lID0gdS0+dV9uYW1lOworICAgIH0KKyAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKKworICAgIHJldHVybiAxOwogfQogCiAvKiBBbGxvY2F0ZSBhIG5ldyBibG9jayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KQEAgLTc4NCw4ICs4NTMsOCBAQAogICAgIGItPmJfaW5zdHJbb2ZmXS5pX2xpbmVubyA9IGMtPnUtPnVfbGluZW5vOwogfQogCi1zdGF0aWMgaW50Ci1vcGNvZGVfc3RhY2tfZWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKK2ludAorUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKIHsKICAgICBzd2l0Y2ggKG9wY29kZSkgewogICAgICAgICBjYXNlIFBPUF9UT1A6CkBAIC04NjIsOCArOTMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCi0gICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgotICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIFJFVFVSTl9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfU1RBUjoKQEAgLTk3MCwxNyArMTAzNywxNiBAQAogICAgICAgICBjYXNlIExPQURfQ0xPU1VSRToKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIExPQURfREVSRUY6CisgICAgICAgIGNhc2UgTE9BRF9DTEFTU0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgU1RPUkVfREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgREVMRVRFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBvcGNvZGUpOwotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigib3Bjb2RlX3N0YWNrX2VmZmVjdCgpIik7Ci0KKyAgICAgICAgICAgIHJldHVybiBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVDsKICAgICB9Ci0gICAgcmV0dXJuIDA7IC8qIG5vdCByZWFjaGFibGUgKi8KKyAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7IC8qIG5vdCByZWFjaGFibGUgKi8KIH0KIAogLyogQWRkIGFuIG9wY29kZSB3aXRoIG5vIGFyZ3VtZW50LgpAQCAtMTAwNiw3ICsxMDcyLDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIFB5X3NzaXplX3QKIGNvbXBpbGVyX2FkZF9vKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICpvKQogewogICAgIFB5T2JqZWN0ICp0LCAqdjsKQEAgLTEwNjAsNyArMTEyNiw3IEBACiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBhcmcgPSBQeURpY3RfU2l6ZShkaWN0KTsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhhcmcpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGFyZyk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKHQpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA4Miw3ICsxMTQ4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvKQogewotICAgIGludCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKKyAgICBQeV9zc2l6ZV90IGFyZyA9IGNvbXBpbGVyX2FkZF9vKGMsIGRpY3QsIG8pOwogICAgIGlmIChhcmcgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY29tcGlsZXJfYWRkb3BfaShjLCBvcGNvZGUsIGFyZyk7CkBAIC0xMDkyLDcgKzExNTgsNyBAQAogY29tcGlsZXJfYWRkb3BfbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpkaWN0LAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIFB5T2JqZWN0ICptYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIG8pOwogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA4LDE2ICsxMTc0LDIyIEBACiAqLwogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgaW50IG9wYXJnKQorY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5X3NzaXplX3Qgb3BhcmcpCiB7CiAgICAgc3RydWN0IGluc3RyICppOwogICAgIGludCBvZmY7CisKKyAgICAvKiBJbnRlZ2VyIGFyZ3VtZW50cyBhcmUgbGltaXQgdG8gMTYtYml0LiBUaGVyZSBpcyBhbiBleHRlbnNpb24gZm9yIDMyLWJpdAorICAgICAgIGludGVnZXIgYXJndW1lbnRzLiAqLworICAgIGFzc2VydCgoLTIxNDc0ODM2NDctMSkgPD0gb3BhcmcpOworICAgIGFzc2VydChvcGFyZyA8PSAyMTQ3NDgzNjQ3KTsKKwogICAgIG9mZiA9IGNvbXBpbGVyX25leHRfaW5zdHIoYywgYy0+dS0+dV9jdXJibG9jayk7CiAgICAgaWYgKG9mZiA8IDApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSAmYy0+dS0+dV9jdXJibG9jay0+Yl9pbnN0cltvZmZdOwogICAgIGktPmlfb3Bjb2RlID0gb3Bjb2RlOwotICAgIGktPmlfb3BhcmcgPSBvcGFyZzsKKyAgICBpLT5pX29wYXJnID0gUHlfU0FGRV9ET1dOQ0FTVChvcGFyZywgUHlfc3NpemVfdCwgaW50KTsKICAgICBpLT5pX2hhc2FyZyA9IDE7CiAgICAgY29tcGlsZXJfc2V0X2xpbmVubyhjLCBvZmYpOwogICAgIHJldHVybiAxOwpAQCAtMTMzMCwxNiArMTQwMiwxOSBAQAogc3RhdGljIGludAogZ2V0X3JlZl90eXBlKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgaW50IHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CisgICAgaW50IHNjb3BlOworICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSkKKyAgICAgICAgcmV0dXJuIENFTEw7CisgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKICAgICBpZiAoc2NvcGUgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpXG4iCiAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfaWQpLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV92YXJuYW1lcyksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X25hbWVzKQpAQCAtMTM2NSw5ICsxNDQwLDkgQEAKIH0KIAogc3RhdGljIGludAotY29tcGlsZXJfbWFrZV9jbG9zdXJlKHN0cnVjdCBjb21waWxlciAqYywgUHlDb2RlT2JqZWN0ICpjbywgaW50IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKK2NvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIFB5X3NzaXplX3QgYXJncywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIGludCBpLCBmcmVlID0gUHlDb2RlX0dldE51bUZyZWUoY28pOworICAgIFB5X3NzaXplX3QgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKICAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCkKICAgICAgICAgcXVhbG5hbWUgPSBjby0+Y29fbmFtZTsKIApAQCAtMTQ5NCwyMiArMTU2OSwyMiBAQAogICAgICAgICovCiAgICAgc3RhdGljIGlkZW50aWZpZXIgcmV0dXJuX3N0cjsKICAgICBQeU9iamVjdCAqbmFtZXM7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBuYW1lcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFuYW1lcykKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+dmFyYXJnYW5ub3RhdGlvbiAmJgotICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPnZhcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPnZhcmFyZyAmJiBhcmdzLT52YXJhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmctPmFubm90YXRpb24sIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbnMoYywgYXJncy0+a3dvbmx5YXJncywgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZ2Fubm90YXRpb24sIG5hbWVzKSkKKyAgICBpZiAoYXJncy0+a3dhcmcgJiYgYXJncy0+a3dhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZy0+YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIXJldHVybl9zdHIpIHsKQEAgLTE1MzEsNyArMTYwNiw3IEBACiAgICAgaWYgKGxlbikgewogICAgICAgICAvKiBjb252ZXJ0IG5hbWVzIHRvIGEgdHVwbGUgYW5kIHBsYWNlIG9uIHN0YWNrICovCiAgICAgICAgIFB5T2JqZWN0ICplbHQ7Ci0gICAgICAgIGludCBpOworICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIFB5T2JqZWN0ICpzID0gUHlUdXBsZV9OZXcobGVuKTsKICAgICAgICAgaWYgKCFzKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTE1NDUsNyArMTYyMCw5IEBACiAgICAgICAgIGxlbisrOyAvKiBpbmNsdWRlIHRoZSBqdXN0LXB1c2hlZCB0dXBsZSAqLwogICAgIH0KICAgICBQeV9ERUNSRUYobmFtZXMpOwotICAgIHJldHVybiBsZW47CisKKyAgICAvKiBXZSBqdXN0IGNoZWNrZWQgdGhhdCBsZW4gPD0gNjU1MzUsIHNlZSBhYm92ZSAqLworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxlbiwgUHlfc3NpemVfdCwgaW50KTsKIAogZXJyb3I6CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKQEAgLTE1NjEsMTMgKzE2MzgsMTYgQEAKICAgICBleHByX3R5IHJldHVybnMgPSBzLT52LkZ1bmN0aW9uRGVmLnJldHVybnM7CiAgICAgYXNkbF9zZXEqIGRlY29zID0gcy0+di5GdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdDsKICAgICBzdG10X3R5IHN0OwotICAgIGludCBpLCBuLCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwLCBhcmdsZW5ndGg7CisgICAgUHlfc3NpemVfdCBpLCBuLCBhcmdsZW5ndGg7CisgICAgaW50IGRvY3N0cmluZywga3dfZGVmYXVsdF9jb3VudCA9IDA7CiAgICAgaW50IG51bV9hbm5vdGF0aW9uczsKIAogICAgIGFzc2VydChzLT5raW5kID09IEZ1bmN0aW9uRGVmX2tpbmQpOwogCiAgICAgaWYgKCFjb21waWxlcl9kZWNvcmF0b3JzKGMsIGRlY29zKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQorICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwpAQCAtMTU3NSw4ICsxNjU1LDYgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBrd19kZWZhdWx0X2NvdW50ID0gcmVzOwogICAgIH0KLSAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCi0gICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgbnVtX2Fubm90YXRpb25zID0gY29tcGlsZXJfdmlzaXRfYW5ub3RhdGlvbnMoYywgYXJncywgcmV0dXJucyk7CiAgICAgaWYgKG51bV9hbm5vdGF0aW9ucyA8IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTYwNSw5ICsxNjgzLDEwIEBACiAgICAgICAgIFZJU0lUX0lOX1NDT1BFKGMsIHN0bXQsIHN0KTsKICAgICB9CiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkgeworICAgIGlmIChjbyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1hERUNSRUYocXVhbG5hbWUpOwogICAgICAgICBQeV9YREVDUkVGKGNvKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjYxLDEyICsxNzQwLDYgQEAKICAgICAgICAgUHlfSU5DUkVGKHMtPnYuQ2xhc3NEZWYubmFtZSk7CiAgICAgICAgIFB5X1hERUNSRUYoYy0+dS0+dV9wcml2YXRlKTsKICAgICAgICAgYy0+dS0+dV9wcml2YXRlID0gcy0+di5DbGFzc0RlZi5uYW1lOwotICAgICAgICAvKiBmb3JjZSBpdCB0byBoYXZlIG9uZSBtYW5kYXRvcnkgYXJndW1lbnQgKi8KLSAgICAgICAgYy0+dS0+dV9hcmdjb3VudCA9IDE7Ci0gICAgICAgIC8qIGxvYWQgdGhlIGZpcnN0IGFyZ3VtZW50IChfX2xvY2Fsc19fKSAuLi4gKi8KLSAgICAgICAgQURET1BfSShjLCBMT0FEX0ZBU1QsIDApOwotICAgICAgICAvKiAuLi4gYW5kIHN0b3JlIGl0IGludG8gZl9sb2NhbHMgKi8KLSAgICAgICAgQURET1BfSU5fU0NPUEUoYywgU1RPUkVfTE9DQUxTKTsKICAgICAgICAgLyogbG9hZCAoZ2xvYmFsKSBfX25hbWVfXyAuLi4gKi8KICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7CiAgICAgICAgIGlmICghc3RyIHx8ICFjb21waWxlcl9uYW1lb3AoYywgc3RyLCBMb2FkKSkgewpAQCAtMTY4MywxNCArMTc1Niw4IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgLyogc3RvcmUgdGhlIF9fcXVhbG5hbWVfXyAqLwotICAgICAgICBzdHIgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKLSAgICAgICAgaWYgKCFzdHIpIHsKLSAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIHN0ciwgY29uc3RzKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGFzc2VydChjLT51LT51X3F1YWxuYW1lKTsKKyAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBjLT51LT51X3F1YWxuYW1lLCBjb25zdHMpOwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19xdWFsbmFtZV9fIik7CiAgICAgICAgIGlmICghc3RyIHx8ICFjb21waWxlcl9uYW1lb3AoYywgc3RyLCBTdG9yZSkpIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYoc3RyKTsKQEAgLTE3MDMsMjQgKzE3NzAsMjggQEAKICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICAvKiByZXR1cm4gdGhlIChlbXB0eSkgX19jbGFzc19fIGNlbGwgKi8KLSAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOwotICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpID0gY29tcGlsZXJfbG9va3VwX2FyZyhjLT51LT51X2NlbGx2YXJzLCBzdHIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgaWYgKGkgPT0gLTEpIHsKLSAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgLyogUmV0dXJuIE5vbmUgKi8KLSAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGMtPnUtPnVfc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSkgeworICAgICAgICAgICAgLyogcmV0dXJuIHRoZSAoZW1wdHkpIF9fY2xhc3NfXyBjZWxsICovCisgICAgICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7CisgICAgICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGNvbXBpbGVyX2xvb2t1cF9hcmcoYy0+dS0+dV9jZWxsdmFycywgc3RyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChpID09IDApOwogICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBjZWxsIHdoZXJlIHRvIHN0b3JlIF9fY2xhc3NfXyAqLwogICAgICAgICAgICAgQURET1BfSShjLCBMT0FEX0NMT1NVUkUsIGkpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9TaXplKGMtPnUtPnVfY2VsbHZhcnMpID09IDApOworICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIHdoZW4gbm9ib2R5IHJlZmVyZW5jZXMgdGhlIGNlbGwuIFJldHVybiBOb25lLiAqLworICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOworICAgICAgICB9CiAgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CiAgICAgICAgIC8qIGNyZWF0ZSB0aGUgY29kZSBvYmplY3QgKi8KICAgICAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKQEAgLTE3ODcsNyArMTg1OCw4IEBACiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeU9iamVjdCAqcXVhbG5hbWU7CiAgICAgc3RhdGljIGlkZW50aWZpZXIgbmFtZTsKLSAgICBpbnQga3dfZGVmYXVsdF9jb3VudCA9IDAsIGFyZ2xlbmd0aDsKKyAgICBpbnQga3dfZGVmYXVsdF9jb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBhcmdsZW5ndGg7CiAgICAgYXJndW1lbnRzX3R5IGFyZ3MgPSBlLT52LkxhbWJkYS5hcmdzOwogICAgIGFzc2VydChlLT5raW5kID09IExhbWJkYV9raW5kKTsKIApAQCAtMTc5NywxNSArMTg2OSwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQorICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwogICAgICAgICBpZiAocmVzIDwgMCkgcmV0dXJuIDA7CiAgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CiAgICAgfQotICAgIGlmIChhcmdzLT5kZWZhdWx0cykKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKLSAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgQ09NUElMRVJfU0NPUEVfTEFNQkRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKillLCBlLT5saW5lbm8pKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTgyNCw5ICsxODk2LDEwIEBACiAgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CiAgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpCisgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXJnbGVuZ3RoID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKTsKQEAgLTIwOTcsNyArMjE3MCw3IEBACiBjb21waWxlcl90cnlfZXhjZXB0KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewogICAgIGJhc2ljYmxvY2sgKmJvZHksICpvcmVsc2UsICpleGNlcHQsICplbmQ7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgYm9keSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBleGNlcHQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0yMjYzLDcgKzIzMzYsNyBAQAogICAgICAgIG1vZHVsZSBuYW1lcy4KICAgICAgICBYWFggUGVyaGFwcyBjaGFuZ2UgdGhlIHJlcHJlc2VudGF0aW9uIHRvIG1ha2UgdGhpcyBjYXNlIHNpbXBsZXI/CiAgICAgICovCi0gICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnQubmFtZXMpOworICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydC5uYW1lcyk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgIGFsaWFzX3R5IGFsaWFzID0gKGFsaWFzX3R5KWFzZGxfc2VxX0dFVChzLT52LkltcG9ydC5uYW1lcywgaSk7CkBAIC0yMjg4LDggKzIzNjEsMTEgQEAKICAgICAgICAgICAgIGlkZW50aWZpZXIgdG1wID0gYWxpYXMtPm5hbWU7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGRvdCA9IFB5VW5pY29kZV9GaW5kQ2hhcigKICAgICAgICAgICAgICAgICBhbGlhcy0+bmFtZSwgJy4nLCAwLCBQeVVuaWNvZGVfR0VUX0xFTkdUSChhbGlhcy0+bmFtZSksIDEpOwotICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkKKyAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICB0bXAgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGFsaWFzLT5uYW1lLCAwLCBkb3QpOworICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByID0gY29tcGlsZXJfbmFtZW9wKGMsIHRtcCwgU3RvcmUpOwogICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwpAQCAtMjMwNCw3ICsyMzgwLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2Zyb21faW1wb3J0KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0RnJvbS5uYW1lcyk7CisgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0RnJvbS5uYW1lcyk7CiAKICAgICBQeU9iamVjdCAqbmFtZXMgPSBQeVR1cGxlX05ldyhuKTsKICAgICBQeU9iamVjdCAqbGV2ZWw7CkBAIC0yMzgwLDYgKzI0NTYsNyBAQAogewogICAgIHN0YXRpYyBQeU9iamVjdCAqYXNzZXJ0aW9uX2Vycm9yID0gTlVMTDsKICAgICBiYXNpY2Jsb2NrICplbmQ7CisgICAgUHlPYmplY3QqIG1zZzsKIAogICAgIGlmIChjLT5jX29wdGltaXplKQogICAgICAgICByZXR1cm4gMTsKQEAgLTIzOTAsMTEgKzI0NjcsMTcgQEAKICAgICB9CiAgICAgaWYgKHMtPnYuQXNzZXJ0LnRlc3QtPmtpbmQgPT0gVHVwbGVfa2luZCAmJgogICAgICAgICBhc2RsX3NlcV9MRU4ocy0+di5Bc3NlcnQudGVzdC0+di5UdXBsZS5lbHRzKSA+IDApIHsKLSAgICAgICAgY29uc3QgY2hhciogbXNnID0KLSAgICAgICAgICAgICJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUsIHBlcmhhcHMgcmVtb3ZlIHBhcmVudGhlc2VzPyI7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXQoUHlFeGNfU3ludGF4V2FybmluZywgbXNnLCBjLT5jX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfbGluZW5vLCBOVUxMLCBOVUxMKSA9PSAtMSkKKyAgICAgICAgbXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyaGFwcyByZW1vdmUgcGFyZW50aGVzZXM/Iik7CisgICAgICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG1zZyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYobXNnKTsKICAgICB9CiAgICAgVklTSVQoYywgZXhwciwgcy0+di5Bc3NlcnQudGVzdCk7CiAgICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMjQxNCw3ICsyNDk3LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X3N0bXQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgLyogQWx3YXlzIGFzc2lnbiBhIGxpbmVubyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmb3IgYSBzdG10LiAqLwogICAgIGMtPnUtPnVfbGluZW5vID0gcy0+bGluZW5vOwpAQCAtMjQ2MiwxMiArMjU0NSwxMiBAQAogICAgICAgICBpZiAocy0+di5SYWlzZS5leGMpIHsKICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuZXhjKTsKICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgaWYgKHMtPnYuUmFpc2UuY2F1c2UpIHsKLSAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5jYXVzZSk7Ci0gICAgICAgIG4rKzsKKyAgICAgICAgICAgIGlmIChzLT52LlJhaXNlLmNhdXNlKSB7CisgICAgICAgICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5jYXVzZSk7CisgICAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgQURET1BfSShjLCBSQUlTRV9WQVJBUkdTLCBuKTsKKyAgICAgICAgQURET1BfSShjLCBSQUlTRV9WQVJBUkdTLCAoaW50KW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRyeV9raW5kOgogICAgICAgICByZXR1cm4gY29tcGlsZXJfdHJ5KGMsIHMpOwpAQCAtMjYyNyw3ICsyNzEwLDggQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX25hbWVvcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGlkZW50aWZpZXIgbmFtZSwgZXhwcl9jb250ZXh0X3R5IGN0eCkKIHsKLSAgICBpbnQgb3AsIHNjb3BlLCBhcmc7CisgICAgaW50IG9wLCBzY29wZTsKKyAgICBQeV9zc2l6ZV90IGFyZzsKICAgICBlbnVtIHsgT1BfRkFTVCwgT1BfR0xPQkFMLCBPUF9ERVJFRiwgT1BfTkFNRSB9IG9wdHlwZTsKIAogICAgIFB5T2JqZWN0ICpkaWN0ID0gYy0+dS0+dV9uYW1lczsKQEAgLTI2MzgsNiArMjcyMiwxMCBAQAogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIk5vbmUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiVHJ1ZSIpICYmCisgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJGYWxzZSIpKTsKKwogICAgIG9wID0gMDsKICAgICBvcHR5cGUgPSBPUF9OQU1FOwogICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbWFuZ2xlZCk7CkBAIC0yNjczLDcgKzI3NjEsOSBAQAogICAgIHN3aXRjaCAob3B0eXBlKSB7CiAgICAgY2FzZSBPUF9ERVJFRjoKICAgICAgICAgc3dpdGNoIChjdHgpIHsKLSAgICAgICAgY2FzZSBMb2FkOiBvcCA9IExPQURfREVSRUY7IGJyZWFrOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICBvcCA9IChjLT51LT51X3N0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jaykgPyBMT0FEX0NMQVNTREVSRUYgOiBMT0FEX0RFUkVGOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmU6IG9wID0gU1RPUkVfREVSRUY7IGJyZWFrOwogICAgICAgICBjYXNlIEF1Z0xvYWQ6CiAgICAgICAgIGNhc2UgQXVnU3RvcmU6CkBAIC0yNzQ3LDcgKzI4MzcsOCBAQAogY29tcGlsZXJfYm9vbG9wKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewogICAgIGJhc2ljYmxvY2sgKmVuZDsKLSAgICBpbnQganVtcGksIGksIG47CisgICAgaW50IGp1bXBpOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBhc2RsX3NlcSAqczsKIAogICAgIGFzc2VydChlLT5raW5kID09IEJvb2xPcF9raW5kKTsKQEAgLTI3NzMsNyArMjg2NCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9saXN0KHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuTGlzdC5lbHRzKTsKKyAgICBQeV9zc2l6ZV90IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5MaXN0LmVsdHMpOwogICAgIGlmIChlLT52Lkxpc3QuY3R4ID09IFN0b3JlKSB7CiAgICAgICAgIGludCBpLCBzZWVuX3N0YXIgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0yODA2LDcgKzI4OTcsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdHVwbGUoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKTsKKyAgICBQeV9zc2l6ZV90IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKTsKICAgICBpZiAoZS0+di5UdXBsZS5jdHggPT0gU3RvcmUpIHsKICAgICAgICAgaW50IGksIHNlZW5fc3RhciA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTI4MzksNyArMjkzMCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9jb21wYXJlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBiYXNpY2Jsb2NrICpjbGVhbnVwID0gTlVMTDsKIAogICAgIC8qIFhYWCB0aGUgbG9naWMgY2FuIGJlIGNsZWFuZWQgdXAgZm9yIDEgb3IgbXVsdGlwbGUgY29tcGFyaXNvbnMgKi8KQEAgLTI4OTUsMTEgKzI5ODYsMTEgQEAKIC8qIHNoYXJlZCBjb2RlIGJldHdlZW4gY29tcGlsZXJfY2FsbCBhbmQgY29tcGlsZXJfY2xhc3MgKi8KIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBuLCAvKiBBcmdzIGFscmVhZHkgcHVzaGVkICovCi0gICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCi0gICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAotICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCi0gICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG4sIC8qIEFyZ3MgYWxyZWFkeSBwdXNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKQogewogICAgIGludCBjb2RlID0gMDsKIApAQCAtMjk2MCw3ICszMDUxLDcgQEAKIAogICAgIGNvbXByZWhlbnNpb25fdHkgZ2VuOwogICAgIGJhc2ljYmxvY2sgKnN0YXJ0LCAqYW5jaG9yLCAqc2tpcCwgKmlmX2NsZWFudXA7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgc3RhcnQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgc2tpcCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTMwODUsOSArMzE3NiwxMCBAQAogICAgIH0KIAogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpCisgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIWNvbXBpbGVyX21ha2VfY2xvc3VyZShjLCBjbywgMCwgcXVhbG5hbWUpKQpAQCAtMzE5NywxMiArMzI4OSwxOCBAQAogICAgIGNhc2UgTmFtZV9raW5kOgogICAgICAgICAvKiBvcHRpbWl6ZSBhd2F5IG5hbWVzIHRoYXQgY2FuJ3QgYmUgcmVhc3NpZ25lZCAqLwogICAgICAgICBpZCA9IFB5VW5pY29kZV9Bc1VURjgoZS0+di5OYW1lLmlkKTsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIlRydWUiKSA9PSAwKSByZXR1cm4gMTsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIkZhbHNlIikgPT0gMCkgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJOb25lIikgPT0gMCkgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJfX2RlYnVnX18iKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICEgYy0+Y19vcHRpbWl6ZTsKLSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGlmIChpZCAmJiBzdHJjbXAoaWQsICJfX2RlYnVnX18iKSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuICFjLT5jX29wdGltaXplOworICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDogeworICAgICAgICBQeU9iamVjdCAqbyA9IGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlOworICAgICAgICBpZiAobyA9PSBQeV9Ob25lKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgaWYgKG8gPT0gUHlfVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNlIGlmIChvID09IFB5X0ZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zMjkyLDcgKzMzOTAsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfZXhwcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICAvKiBJZiBleHByIGUgaGFzIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIHRoYW4gdGhlIGxhc3QgZXhwci9zdG10LAogICAgICAgIHNldCBhIG5ldyBsaW5lIG51bWJlciBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCkBAIC0zMzIxLDYgKzM0MTksOCBAQAogICAgICAgICByZXR1cm4gY29tcGlsZXJfaWZleHAoYywgZSk7CiAgICAgY2FzZSBEaWN0X2tpbmQ6CiAgICAgICAgIG4gPSBhc2RsX3NlcV9MRU4oZS0+di5EaWN0LnZhbHVlcyk7CisgICAgICAgIC8qIEJVSUxEX01BUCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHRvIHByZWFsbG9jYXRlIHRoZSBkaWN0aW9uYXJ5LAorICAgICAgICAgICBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgZXhhY3QgKi8KICAgICAgICAgQURET1BfSShjLCBCVUlMRF9NQVAsIChuPjB4RkZGRiA/IDB4RkZGRiA6IG4pKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgVklTSVQoYywgZXhwciwKQEAgLTMzNzgsNiArMzQ3OCw5IEBACiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X0VsbGlwc2lzLCBjb25zdHMpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlLCBjb25zdHMpOworICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCiAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKICAgICAgICAgaWYgKGUtPnYuQXR0cmlidXRlLmN0eCAhPSBBdWdTdG9yZSkKQEAgLTM1NDcsMTIgKzM2NTAsMTIgQEAKICAgICBQeU9iamVjdCAqbG9jOwogICAgIFB5T2JqZWN0ICp1ID0gTlVMTCwgKnYgPSBOVUxMOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKICAgICBpZiAoIWxvYykgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIGxvYyA9IFB5X05vbmU7CiAgICAgfQotICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9saW5lbm8sCisgICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXUpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM2NjUsNyArMzc2OCw3IEBACiAgICAgY2FzZSBFeHRTbGljZV9raW5kOgogICAgICAgICBraW5kbmFtZSA9ICJleHRlbmRlZCBzbGljZSI7CiAgICAgICAgIGlmIChjdHggIT0gQXVnU3RvcmUpIHsKLSAgICAgICAgICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuRXh0U2xpY2UuZGltcyk7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5FeHRTbGljZS5kaW1zKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzbGljZV90eSBzdWIgPSAoc2xpY2VfdHkpYXNkbF9zZXFfR0VUKAogICAgICAgICAgICAgICAgICAgICBzLT52LkV4dFNsaWNlLmRpbXMsIGkpOwpAQCAtMzcyNCw3ICszODI3LDcgQEAKIHN0YXRpYyBpbnQKIHN0YWNrZGVwdGhfd2FsayhzdHJ1Y3QgY29tcGlsZXIgKmMsIGJhc2ljYmxvY2sgKmIsIGludCBkZXB0aCwgaW50IG1heGRlcHRoKQogewotICAgIGludCBpLCB0YXJnZXRfZGVwdGg7CisgICAgaW50IGksIHRhcmdldF9kZXB0aCwgZWZmZWN0OwogICAgIHN0cnVjdCBpbnN0ciAqaW5zdHI7CiAgICAgaWYgKGItPmJfc2VlbiB8fCBiLT5iX3N0YXJ0ZGVwdGggPj0gZGVwdGgpCiAgICAgICAgIHJldHVybiBtYXhkZXB0aDsKQEAgLTM3MzIsNyArMzgzNSwxMyBAQAogICAgIGItPmJfc3RhcnRkZXB0aCA9IGRlcHRoOwogICAgIGZvciAoaSA9IDA7IGkgPCBiLT5iX2l1c2VkOyBpKyspIHsKICAgICAgICAgaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKLSAgICAgICAgZGVwdGggKz0gb3Bjb2RlX3N0YWNrX2VmZmVjdChpbnN0ci0+aV9vcGNvZGUsIGluc3RyLT5pX29wYXJnKTsKKyAgICAgICAgZWZmZWN0ID0gUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGluc3RyLT5pX29wY29kZSwgaW5zdHItPmlfb3BhcmcpOworICAgICAgICBpZiAoZWZmZWN0ID09IFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBpbnN0ci0+aV9vcGNvZGUpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KCkiKTsKKyAgICAgICAgfQorICAgICAgICBkZXB0aCArPSBlZmZlY3Q7CisKICAgICAgICAgaWYgKGRlcHRoID4gbWF4ZGVwdGgpCiAgICAgICAgICAgICBtYXhkZXB0aCA9IGRlcHRoOwogICAgICAgICBhc3NlcnQoZGVwdGggPj0gMCk7IC8qIGludmFsaWQgY29kZSBvciBidWcgaW4gc3RhY2tkZXB0aCgpICovCkBAIC0zODQzLDcgKzM5NTIsNyBAQAogYXNzZW1ibGVfbG5vdGFiKHN0cnVjdCBhc3NlbWJsZXIgKmEsIHN0cnVjdCBpbnN0ciAqaSkKIHsKICAgICBpbnQgZF9ieXRlY29kZSwgZF9saW5lbm87Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBjaGFyICpsbm90YWI7CiAKICAgICBkX2J5dGVjb2RlID0gYS0+YV9vZmZzZXQgLSBhLT5hX2xpbmVub19vZmY7CkBAIC00MDM0LDcgKzQxNDMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9rZXlzX2lub3JkZXIoUHlPYmplY3QgKmRpY3QsIGludCBvZmZzZXQpCitkaWN0X2tleXNfaW5vcmRlcihQeU9iamVjdCAqZGljdCwgUHlfc3NpemVfdCBvZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKnR1cGxlLCAqaywgKnY7CiAgICAgUHlfc3NpemVfdCBpLCBwb3MgPSAwLCBzaXplID0gUHlEaWN0X1NpemUoZGljdCk7CkBAIC00MDU5LDEwICs0MTY4LDEwIEBACiBjb21wdXRlX2NvZGVfZmxhZ3Moc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIFB5U1RFbnRyeU9iamVjdCAqc3RlID0gYy0+dS0+dV9zdGU7Ci0gICAgaW50IGZsYWdzID0gMCwgbjsKLSAgICBpZiAoc3RlLT5zdGVfdHlwZSAhPSBNb2R1bGVCbG9jaykKLSAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOworICAgIGludCBmbGFncyA9IDA7CisgICAgUHlfc3NpemVfdCBuOwogICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2spIHsKKyAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOwogICAgICAgICBpZiAoIXN0ZS0+c3RlX3Vub3B0aW1pemVkKQogICAgICAgICAgICAgZmxhZ3MgfD0gQ09fT1BUSU1JWkVEOwogICAgICAgICBpZiAoc3RlLT5zdGVfbmVzdGVkKQpAQCAtNDA4NCw5ICs0MTkzLDkgQEAKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIG4gPSBQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKTsKICAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChuID09IDApIHsKLSAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOworICAgICAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MTA1LDcgKzQyMTQsMTAgQEAKICAgICBQeU9iamVjdCAqZnJlZXZhcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjZWxsdmFycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmJ5dGVjb2RlID0gTlVMTDsKLSAgICBpbnQgbmxvY2FscywgZmxhZ3M7CisgICAgUHlfc3NpemVfdCBubG9jYWxzOworICAgIGludCBubG9jYWxzX2ludDsKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudDsKIAogICAgIHRtcCA9IGRpY3Rfa2V5c19pbm9yZGVyKGMtPnUtPnVfY29uc3RzLCAwKTsKICAgICBpZiAoIXRtcCkKQEAgLTQxMjQsNyArNDIzNiwxMSBAQAogICAgIGZyZWV2YXJzID0gZGljdF9rZXlzX2lub3JkZXIoYy0+dS0+dV9mcmVldmFycywgUHlUdXBsZV9TaXplKGNlbGx2YXJzKSk7CiAgICAgaWYgKCFmcmVldmFycykKICAgICAgICAgZ290byBlcnJvcjsKKwogICAgIG5sb2NhbHMgPSBQeURpY3RfU2l6ZShjLT51LT51X3Zhcm5hbWVzKTsKKyAgICBhc3NlcnQobmxvY2FscyA8IElOVF9NQVgpOworICAgIG5sb2NhbHNfaW50ID0gUHlfU0FGRV9ET1dOQ0FTVChubG9jYWxzLCBQeV9zc2l6ZV90LCBpbnQpOworCiAgICAgZmxhZ3MgPSBjb21wdXRlX2NvZGVfZmxhZ3MoYyk7CiAgICAgaWYgKGZsYWdzIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTQxMzksMTEgKzQyNTUsMTMgQEAKICAgICBQeV9ERUNSRUYoY29uc3RzKTsKICAgICBjb25zdHMgPSB0bXA7CiAKLSAgICBjbyA9IFB5Q29kZV9OZXcoYy0+dS0+dV9hcmdjb3VudCwgYy0+dS0+dV9rd29ubHlhcmdjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgbmxvY2Fscywgc3RhY2tkZXB0aChjKSwgZmxhZ3MsCisgICAgYXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfYXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAga3dvbmx5YXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfa3dvbmx5YXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAgY28gPSBQeUNvZGVfTmV3KGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgbmxvY2Fsc19pbnQsIHN0YWNrZGVwdGgoYyksIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBieXRlY29kZSwgY29uc3RzLCBuYW1lcywgdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAgIGZyZWV2YXJzLCBjZWxsdmFycywKLSAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZV9vYmosIGMtPnUtPnVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9uYW1lLAogICAgICAgICAgICAgICAgICAgICBjLT51LT51X2ZpcnN0bGluZW5vLAogICAgICAgICAgICAgICAgICAgICBhLT5hX2xub3RhYik7CiAgZXJyb3I6CkBAIC00MjU5LDQgKzQzNzcsMyBAQAogICAgIHJldHVybiBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiB9CiAKLQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbmR2YXIuaCBiL1B5dGhvbi9jb25kdmFyLmgKaW5kZXggYmJiNDBiYS4uZTAyMmRjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbmR2YXIuaAorKysgYi9QeXRob24vY29uZHZhci5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgKiBidXQgd2UgYXJlIHNhZmUgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZW1hcGhvcmUgd2ljaCBoYXMgYW4gaW50ZXJuYWwKICAgICAgKiBjb3VudC4KICAgICAgKi8KLSAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdChjdi0+c2VtLCBtcyk7CisgICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdi0+c2VtLCBtcywgRkFMU0UpOwogICAgIFB5TVVURVhfTE9DSyhjcyk7CiAgICAgaWYgKHdhaXQgIT0gV0FJVF9PQkpFQ1RfMCkKICAgICAgICAgLS1jdi0+d2FpdGluZzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2FpeC5jIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKaW5kZXggZjQwYTBiZS4uNWFjMzBlZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKQEAgLTMwLDExICszMCwxMSBAQAogc3RhdGljIGludAogYWl4X2dldG9sZG1vZHVsZXModm9pZCAqKm1vZGxpc3RwdHIpCiB7Ci0gICAgcmVnaXN0ZXIgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKLSAgICByZWdpc3RlciBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKLSAgICByZWdpc3RlciBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKKyAgICBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOworICAgIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOworICAgIGNoYXIgICAgICAgICAgICAqbGRpYnVmOworICAgIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKKyAgICB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OwogICAgIGNoYXIgKnByb2duYW1lID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKIAogICAgIC8qCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBjaGFyICptZXNzYWdlWzEwMjRdLCBlcnJidWZbMTAyNF07CiAgICAgUHlPYmplY3QgKnBhdGhuYW1lX29iID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXJyYnVmX29iID0gTlVMTDsKLSAgICByZWdpc3RlciBpbnQgaSxqOworICAgIGludCBpLGo7CiAKICAgICBzdHJ1Y3QgZXJydGFiIHsKICAgICAgICAgaW50IGVyck5vOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMgYi9QeXRob24vZHlubG9hZF9vczIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxYjkwNy4uMDAwMDAwMAotLS0gYS9QeXRob24vZHlubG9hZF9vczIuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLQotLyogU3VwcG9ydCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzICovCi0KLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU01PRFVMRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAiaW1wb3J0ZGwuaCIKLQotCi1jb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsiLnB5ZCIsICIuZGxsIiwgTlVMTH07Ci0KLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKLXsKLSAgICBkbF9mdW5jcHRyIHA7Ci0gICAgQVBJUkVUICByYzsKLSAgICBITU9EVUxFIGhETEw7Ci0gICAgY2hhciBmYWlscmVhc29uWzI1Nl07Ci0gICAgY2hhciBmdW5jbmFtZVsyNThdOwotCi0gICAgcmMgPSBEb3NMb2FkTW9kdWxlKGZhaWxyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmYWlscmVhc29uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICZoRExMKTsKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBjaGFyIGVyckJ1ZlsyNTZdOwotICAgICAgICBQeU9TX3NucHJpbnRmKGVyckJ1Ziwgc2l6ZW9mKGVyckJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgIkRMTCBsb2FkIGZhaWxlZCwgcmMgPSAlZDogJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICByYywgZmFpbHJlYXNvbik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgZXJyQnVmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIlB5SW5pdF8lLjIwMHMiLCBzaG9ydG5hbWUpOwotICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoRExMLCAwTCwgZnVuY25hbWUsICZwKTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHAgPSBOVUxMOyAvKiBTaWduaWZ5IEZhaWx1cmUgdG8gQWNxdWlyZSBFbnRyeXBvaW50ICovCi0gICAgcmV0dXJuIHA7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9zaGxpYi5jIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwppbmRleCA3NTU0NGVkLi44ODhmYmZjIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9zaGxpYi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpZmRlZiBIQVZFX0RMRkNOX0gKICNpbmNsdWRlIDxkbGZjbi5oPgotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgImRsZmNuLmgiCi0jZW5kaWYKICNlbmRpZgogCiAjaWYgKGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykpICYmICFkZWZpbmVkKF9fRUxGX18pCkBAIC00MCwxMCArMzYsNiBAQAogI2lmZGVmIF9fQ1lHV0lOX18KICAgICAiLmRsbCIsCiAjZWxzZSAgLyogIV9fQ1lHV0lOX18gKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgICIucHlkIiwKLSAgICAiLmRsbCIsCi0jZWxzZSAgLyogIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkgKi8KICNpZmRlZiBfX1ZNUwogICAgICIuZXhlIiwKICAgICAiLkVYRSIsCkBAIC01Miw3ICs0NCw2IEBACiAgICAgIi5hYmkiIFBZVEhPTl9BQklfU1RSSU5HICIuc28iLAogICAgICIuc28iLAogI2VuZGlmICAvKiBfX1ZNUyAqLwotI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLwogI2VuZGlmICAvKiBfX0NZR1dJTl9fICovCiAgICAgTlVMTCwKIH07CkBAIC0xMTQsOSArMTA1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotI2lmICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCiAgICAgZGxvcGVuZmxhZ3MgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnAtPmRsb3BlbmZsYWdzOwotI2VuZGlmCiAKICNpZmRlZiBfX1ZNUwogICAgIC8qIFZNUyBjdXJyZW50bHkgZG9uJ3QgYWxsb3cgYSBwYXRobmFtZSwgdXNlIGEgbG9naWNhbCBuYW1lIGluc3RlYWQgKi8KQEAgLTEzMiwxOSArMTIxLDMwIEBACiAgICAgaGFuZGxlID0gZGxvcGVuKHBhdGhuYW1lLCBkbG9wZW5mbGFncyk7CiAKICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKm1vZF9uYW1lID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKnBhdGggPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2IgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqbW9kX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpwYXRoOworICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2I7CiAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yID0gZGxlcnJvcigpOwogICAgICAgICBpZiAoZXJyb3IgPT0gTlVMTCkKICAgICAgICAgICAgIGVycm9yID0gInVua25vd24gZGxvcGVuKCkgZXJyb3IiOwogICAgICAgICBlcnJvcl9vYiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm9yKTsKLSAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKGVycm9yX29iID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbW9kX25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzaG9ydG5hbWUpOworICAgICAgICBpZiAobW9kX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwYXRobmFtZSk7CisgICAgICAgIGlmIChwYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IoZXJyb3Jfb2IsIG1vZF9uYW1lLCBwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihlcnJvcl9vYik7Ci0gICAgICAgIFB5X1hERUNSRUYocGF0aCk7Ci0gICAgICAgIFB5X1hERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoZnAgIT0gTlVMTCAmJiBuaGFuZGxlcyA8IDEyOCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9lcnJvcnMuYyBiL1B5dGhvbi9lcnJvcnMuYwppbmRleCA2MjZiMTZlLi45MGRjNzI5IDEwMDY0NAotLS0gYS9QeXRob24vZXJyb3JzLmMKKysrIGIvUHl0aG9uL2Vycm9ycy5jCkBAIC0yMCw2ICsyMCw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworCiAKIHZvaWQKIFB5RXJyX1Jlc3RvcmUoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRyYWNlYmFjaykKQEAgLTcxLDYgKzc0LDExIEBACiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8ICFQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICAgICAgLyogV2UgbXVzdCBub3JtYWxpemUgdGhlIHZhbHVlIHJpZ2h0IG5vdyAqLwogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpmaXhlZF92YWx1ZTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTExMiw2ICsxMjAsMjAgQEAKICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKIH0KIAorLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQorICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKKyAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCit2b2lkCitfUHlFcnJfU2V0S2V5RXJyb3IoUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqdHVwOworICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOworICAgIGlmICghdHVwKQorICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCisgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOworICAgIFB5X0RFQ1JFRih0dXApOworfQorCiB2b2lkCiBQeUVycl9TZXROb25lKFB5T2JqZWN0ICpleGNlcHRpb24pCiB7CkBAIC0yMjcsMTIgKzI0OSwyMSBAQAogICAgICAgIHZhbHVlIHdpbGwgYmUgYW4gaW5zdGFuY2UuCiAgICAgKi8KICAgICBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0eXBlKSkgeworICAgICAgICBpbnQgaXNfc3ViY2xhc3M7CisgICAgICAgIGlmIChpbmNsYXNzKSB7CisgICAgICAgICAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoaW5jbGFzcywgdHlwZSk7CisgICAgICAgICAgICBpZiAoaXNfc3ViY2xhc3MgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpc19zdWJjbGFzcyA9IDA7CisKICAgICAgICAgLyogaWYgdGhlIHZhbHVlIHdhcyBub3QgYW4gaW5zdGFuY2UsIG9yIGlzIG5vdCBhbiBpbnN0YW5jZQogICAgICAgICAgICB3aG9zZSBjbGFzcyBpcyAob3IgaXMgZGVyaXZlZCBmcm9tKSB0eXBlLCB0aGVuIHVzZSB0aGUKICAgICAgICAgICAgdmFsdWUgYXMgYW4gYXJndW1lbnQgdG8gaW5zdGFudGlhdGlvbiBvZiB0aGUgdHlwZQogICAgICAgICAgICBjbGFzcy4KICAgICAgICAgKi8KLSAgICAgICAgaWYgKCFpbmNsYXNzIHx8ICFQeU9iamVjdF9Jc1N1YmNsYXNzKGluY2xhc3MsIHR5cGUpKSB7CisgICAgICAgIGlmICghaW5jbGFzcyB8fCAhaXNfc3ViY2xhc3MpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCAqcmVzOwogCiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gUHlfTm9uZSkKQEAgLTM2Niw2ICszOTcsMTIgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX05vTWVtb3J5KHZvaWQpCiB7CisgICAgaWYgKFB5X1RZUEUoUHlFeGNfTWVtb3J5RXJyb3IpID09IE5VTEwpIHsKKyAgICAgICAgLyogUHlFcnJfTm9NZW1vcnkoKSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlIFB5RXhjX01lbW9yeUVycm9yIGhhcyBiZWVuCisgICAgICAgICAgIGluaXRpYWxpemVkIGJ5IF9QeUV4Y19Jbml0KCkgKi8KKyAgICAgICAgUHlfRmF0YWxFcnJvcigiT3V0IG9mIG1lbW9yeSBhbmQgUHlFeGNfTWVtb3J5RXJyb3IgaXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6ZWQgeWV0Iik7CisgICAgfQogICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTWVtb3J5RXJyb3IpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNTg4LDcgKzYyNSw3IEBACiAKIFB5T2JqZWN0ICpQeUVycl9TZXRGcm9tV2luZG93c0VycihpbnQgaWVycikKIHsKLSAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfV2luZG93c0Vycm9yLAorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBOVUxMKTsKIH0KIFB5T2JqZWN0ICpQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKQEAgLTU5Nyw3ICs2MzQsNyBAQAogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTYxMSw3ICs2NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjQ2LDggKzY4MywxMSBAQAogCiAgICAgUHlfSU5DUkVGKG1zZyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBtc2cpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCk7CisKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAibmFtZSIsIG5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgInBhdGgiLCBwYXRoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsKFB5RXhjX0ltcG9ydEVycm9yLCBhcmdzLCBrd2FyZ3MpOwogICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CkBAIC02NzUsNiArNzE1LDcgQEAKIHZvaWQKIFB5RXJyX0JhZEludGVybmFsQ2FsbCh2b2lkKQogeworICAgIGFzc2VydCgwICYmICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKIH0KQEAgLTY5NCw2ICs3MzUsMTIgQEAKICAgICB2YV9zdGFydCh2YXJncyk7CiAjZW5kaWYKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgorCiAgICAgc3RyaW5nID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOwogICAgIFB5RXJyX1NldE9iamVjdChleGNlcHRpb24sIHN0cmluZyk7CiAgICAgUHlfWERFQ1JFRihzdHJpbmcpOwpAQCAtNzk1LDYwICs4NDIsODQgQEAKIHsKICAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKICAgICBQeU9iamVjdCAqZiwgKnQsICp2LCAqdGI7Ci0gICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOwotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgIGlmIChmICE9IE5VTEwgJiYgZiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uICIsIGYpOwotICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgUHlPYmplY3QqIG1vZHVsZU5hbWU7Ci0gICAgICAgICAgICBjaGFyKiBjbGFzc05hbWU7Ci0gICAgICAgICAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSk7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBQeUV4Y2VwdGlvbkNsYXNzX05hbWUodCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyICpkb3QgPSBzdHJyY2hyKGNsYXNzTmFtZSwgJy4nKTsKLSAgICAgICAgICAgICAgICBpZiAoZG90ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOwotICAgICAgICAgICAgfQorICAgIFB5T2JqZWN0ICptb2R1bGVOYW1lID0gTlVMTDsKKyAgICBjaGFyKiBjbGFzc05hbWU7CiAKLSAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOwotICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2hhciogbW9kc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2R1bGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kc3RyICYmCi0gICAgICAgICAgICAgICAgICAgIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGNsYXNzTmFtZSwgZik7Ci0gICAgICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZik7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpbiAiLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApOwotICAgICAgICB9Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGlnbm9yZWRcbiIsIGYpOwotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KKyAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7CisKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CisgICAgaWYgKGYgPT0gTlVMTCB8fCBmID09IFB5X05vbmUpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmIChvYmopIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uIGlnbm9yZWQgaW46ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorCisgICAgaWYgKFB5VHJhY2VCYWNrX1ByaW50KHRiLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmICghdCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOworICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKKyAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7CisgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOworICAgIH0KKworICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOworICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkgeworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChtb2R1bGVOYW1lLCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2xhc3NOYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodiwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZikgPCAwKQorICAgICAgICBnb3RvIGRvbmU7CisKK2RvbmU6CisgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKICAgICBQeV9YREVDUkVGKHQpOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCiB9CiAKIGV4dGVybiBQeU9iamVjdCAqUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUodm9pZCk7CiAKIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pIHsKK1B5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorewogICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIGxpbmVubywgLTEpOwogfQogCkBAIC04NTgsNyArOTI5LDcgQEAKICAgIHRvIG1ha2UgcHJpbnRpbmcgb2YgZXhjZXB0aW9ucyBiZWxpZXZlIGl0IGlzIGEgc3ludGF4IGVycm9yLiAqLwogCiB2b2lkCi1QeUVycl9TeW50YXhMb2NhdGlvbkV4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK1B5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKmV4YywgKnYsICp0YiwgKnRtcDsKICAgICBfUHlfSURFTlRJRklFUihmaWxlbmFtZSk7CkBAIC04OTIsMTYgKzk2MywxMCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIHRtcCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCB0bXApKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKLSAgICAgICAgfQogCi0gICAgICAgIHRtcCA9IFB5RXJyX1Byb2dyYW1UZXh0KGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChmaWxlbmFtZSwgbGluZW5vKTsKICAgICAgICAgaWYgKHRtcCkgewogICAgICAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQodiwgJlB5SWRfdGV4dCwgdG1wKSkKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtOTMxLDIyICs5OTYsMzMgQEAKICAgICBQeUVycl9SZXN0b3JlKGV4YywgdiwgdGIpOwogfQogCit2b2lkCitQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW9iajsKKyAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgeworICAgICAgICBmaWxlb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7CisgICAgICAgIGlmIChmaWxlb2JqID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGZpbGVvYmogPSBOVUxMOworICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVvYmosIGxpbmVubywgY29sX29mZnNldCk7CisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKK30KKwogLyogQXR0ZW1wdCB0byBsb2FkIHRoZSBsaW5lIG9mIHRleHQgdGhhdCB0aGUgZXhjZXB0aW9uIHJlZmVycyB0by4gIElmIGl0CiAgICBmYWlscywgaXQgd2lsbCByZXR1cm4gTlVMTCBidXQgd2lsbCBub3Qgc2V0IGFuIGV4Y2VwdGlvbi4KIAogICAgWFhYIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgc2ltaWxhciB0byB0aGUKICAgIGZ1bmN0aW9uYWxpdHkgaW4gdGJfZGlzcGxheWxpbmUoKSBpbiB0cmFjZWJhY2suYy4gKi8KIAotUHlPYmplY3QgKgotUHlFcnJfUHJvZ3JhbVRleHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCitzdGF0aWMgUHlPYmplY3QgKgorZXJyX3Byb2dyYW10ZXh0KEZJTEUgKmZwLCBpbnQgbGluZW5vKQogewotICAgIEZJTEUgKmZwOwogICAgIGludCBpOwogICAgIGNoYXIgbGluZWJ1ZlsxMDAwXTsKIAotICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8ICpmaWxlbmFtZSA9PSAnXDAnIHx8IGxpbmVubyA8PSAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CiAgICAgaWYgKGZwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lbm87IGkrKykgewpAQCAtOTc3LDYgKzEwNTMsMjYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorUHlPYmplY3QgKgorUHlFcnJfUHJvZ3JhbVRleHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisgICAgRklMRSAqZnA7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgKmZpbGVuYW1lID09ICdcMCcgfHwgbGluZW5vIDw9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZwID0gX1B5X2ZvcGVuKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CisgICAgcmV0dXJuIGVycl9wcm9ncmFtdGV4dChmcCwgbGluZW5vKTsKK30KKworUHlPYmplY3QgKgorUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIEZJTEUgKmZwOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8IGxpbmVubyA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKKyAgICByZXR1cm4gZXJyX3Byb2dyYW10ZXh0KGZwLCBsaW5lbm8pOworfQorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ZpbGV1dGlscy5jIGIvUHl0aG9uL2ZpbGV1dGlscy5jCmluZGV4IGRiY2I5MjMuLjgxNGYwNzYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9maWxldXRpbHMuYworKysgYi9QeXRob24vZmlsZXV0aWxzLmMKQEAgLTksMjAgKzksMzkgQEAKICNpbmNsdWRlIDxsYW5naW5mby5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogSEFWRV9GQ05UTF9IICovCisKICNpZmRlZiBfX0FQUExFX18KIGV4dGVybiB3Y2hhcl90KiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKTsKICNlbmRpZgogCisjaWZkZWYgT19DTE9FWEVDCisvKiBEb2VzIG9wZW4oKSBzdXBwb3J0IHRoZSBPX0NMT0VYRUMgZmxhZz8gUG9zc2libGUgdmFsdWVzOgorCisgICAtMTogdW5rbm93bgorICAgIDA6IG9wZW4oKSBpZ25vcmVzIE9fQ0xPRVhFQyBmbGFnLCBleDogTGludXgga2VybmVsIG9sZGVyIHRoYW4gMi42LjIzCisgICAgMTogb3BlbigpIHN1cHBvcnRzIE9fQ0xPRVhFQyBmbGFnLCBjbG9zZS1vbi1leGVjIGlzIHNldAorCisgICBUaGUgZmxhZyBpcyB1c2VkIGJ5IF9QeV9vcGVuKCksIGlvLkZpbGVJTyBhbmQgb3Mub3BlbigpICovCitpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrcyA9IC0xOworI2VuZGlmCisKIFB5T2JqZWN0ICoKIF9QeV9kZXZpY2VfZW5jb2RpbmcoaW50IGZkKQogewotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgVUlOVCBjcDsKICNlbmRpZgogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSB8fCAhaXNhdHR5KGZkKSkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKE1TX1dJTjY0KQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICBpZiAoZmQgPT0gMCkKICAgICAgICAgY3AgPSBHZXRDb25zb2xlQ1AoKTsKICAgICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MCw3ICs3OSw3IEBACiAgICB3b3JrYXJvdW5kIGlzIGFsc28gZW5hYmxlZCBvbiBlcnJvciwgZm9yIGV4YW1wbGUgaWYgZ2V0dGluZyB0aGUgbG9jYWxlCiAgICBmYWlsZWQuCiAKLSAgIFZhbHVlcyBvZiBsb2NhbGVfaXNfYXNjaWk6CisgICBWYWx1ZXMgb2YgZm9yY2VfYXNjaWk6CiAKICAgICAgICAxOiB0aGUgd29ya2Fyb3VuZCBpcyB1c2VkOiBfUHlfd2NoYXIyY2hhcigpIHVzZXMKICAgICAgICAgICBlbmNvZGVfYXNjaWlfc3Vycm9nYXRlZXNjYXBlKCkgYW5kIF9QeV9jaGFyMndjaGFyKCkgdXNlcwpAQCAtMjAxLDcgKzIyMCw3IEBACiAgICAgdW5zaWduZWQgY2hhciAqaW47CiAgICAgd2NoYXJfdCAqb3V0OwogCi0gICAgcmVzID0gUHlNZW1fTWFsbG9jKChzdHJsZW4oYXJnKSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9IFB5TWVtX1Jhd01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIyOSw3ICsyNDgsNyBAQAogICAgVXNlIF9QeV93Y2hhcjJjaGFyKCkgdG8gZW5jb2RlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGJhY2sgdG8gYSBieXRlIHN0cmluZy4KIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKHVzZQotICAgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCisgICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKICAgIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvICpzaXplIGlmIHNpemUgaXMgbm90IE5VTEwsIG9yCiAgICBOVUxMIG9uIGVycm9yIChkZWNvZGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcikuIElmIHNpemUgaXMgbm90IE5VTEwsCiAgICAqc2l6ZSBpcyBzZXQgdG8gKHNpemVfdCktMSBvbiBtZW1vcnkgZXJyb3IgYW5kIChzaXplX3QpLTIgb24gZGVjb2RpbmcKQEAgLTI1NCw5ICsyNzMsOSBAQAogICAgIHdjaGFyX3QgKnJlczsKICAgICBzaXplX3QgYXJnc2l6ZTsKICAgICBzaXplX3QgY291bnQ7CisjaWZkZWYgSEFWRV9NQlJUT1dDCiAgICAgdW5zaWduZWQgY2hhciAqaW47CiAgICAgd2NoYXJfdCAqb3V0OwotI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIG1ic3RhdGVfdCBtYnM7CiAjZW5kaWYKIApAQCAtMjgzLDcgKzMwMiw3IEBACiAgICAgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZywgMCk7CiAjZW5kaWYKICAgICBpZiAoYXJnc2l6ZSAhPSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgZ290byBvb207CiAgICAgICAgIGNvdW50ID0gbWJzdG93Y3MocmVzLCBhcmcsIGFyZ3NpemUrMSk7CkBAIC0yOTIsNyArMzExLDcgQEAKICAgICAgICAgICAgIC8qIE9ubHkgdXNlIHRoZSByZXN1bHQgaWYgaXQgY29udGFpbnMgbm8KICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzLiAqLwogICAgICAgICAgICAgZm9yICh0bXAgPSByZXM7ICp0bXAgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICgqdG1wIDwgMHhkODAwIHx8ICp0bXAgPiAweGRmZmYpOyB0bXArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAhUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoKnRtcCk7IHRtcCsrKQogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGlmICgqdG1wID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQpAQCAtMzAwLDcgKzMxOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocmVzKTsKICAgICB9CiAgICAgLyogQ29udmVyc2lvbiBmYWlsZWQuIEZhbGwgYmFjayB0byBlc2NhcGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICNpZmRlZiBIQVZFX01CUlRPV0MKQEAgLTMwOSw3ICszMjgsNyBAQAogICAgIC8qIE92ZXJhbGxvY2F0ZTsgYXMgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBpbiB0aGUgYXJndW1lbnQsIHRoZQogICAgICAgIGFjdHVhbCBvdXRwdXQgY291bGQgdXNlIGxlc3MgbWVtb3J5LiAqLwogICAgIGFyZ3NpemUgPSBzdHJsZW4oYXJnKSArIDE7Ci0gICAgcmVzID0gKHdjaGFyX3QqKVB5TWVtX01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CisgICAgcmVzID0gKHdjaGFyX3QqKVB5TWVtX1Jhd01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFyZXMpCiAgICAgICAgIGdvdG8gb29tOwogICAgIGluID0gKHVuc2lnbmVkIGNoYXIqKWFyZzsKQEAgLTMyNSw3ICszNDQsNyBAQAogICAgICAgICAgICAgICAgc2luY2Ugd2UgcHJvdmlkZSBldmVyeXRoaW5nIHRoYXQgd2UgaGF2ZSAtCiAgICAgICAgICAgICAgICB1bmxlc3MgdGhlcmUgaXMgYSBidWcgaW4gdGhlIEMgbGlicmFyeSwgb3IgSQogICAgICAgICAgICAgICAgbWlzdW5kZXJzdG9vZCBob3cgbWJydG93YyB3b3Jrcy4gKi8KLSAgICAgICAgICAgIFB5TWVtX0ZyZWUocmVzKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocmVzKTsKICAgICAgICAgICAgIGlmIChzaXplICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgKnNpemUgPSAoc2l6ZV90KS0yOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzgsNyArMzU3LDcgQEAKICAgICAgICAgICAgIG1lbXNldCgmbWJzLCAwLCBzaXplb2YgbWJzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmICgqb3V0ID49IDB4ZDgwMCAmJiAqb3V0IDw9IDB4ZGZmZikgeworICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoKm91dCkpIHsKICAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIuICBFc2NhcGUgdGhlIG9yaWdpbmFsCiAgICAgICAgICAgICAgICBieXRlIHNlcXVlbmNlIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLwogICAgICAgICAgICAgYXJnc2l6ZSAtPSBjb252ZXJ0ZWQ7CkBAIC01NDcsMTQgKzU2NiwyMTUgQEAKIAogI2VuZGlmCiAKLS8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCi0gICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiAqLworc3RhdGljIGludAorZ2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IHJhaXNlKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOwogCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKGhhbmRsZSwgJmZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKKyNlbHNlCisgICAgaW50IGZsYWdzOworCisgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCwgMCk7CisgICAgaWYgKGZsYWdzID09IC0xKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gIShmbGFncyAmIEZEX0NMT0VYRUMpOworI2VuZGlmCit9CisKKy8qIEdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KKyAgIFJldHVybiAxIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2FuIGJlIGluaGVyaXRlZCwgMCBpZiBpdCBjYW5ub3QsCisgICByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK2ludAorX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpCit7CisgICAgcmV0dXJuIGdldF9pbmhlcml0YWJsZShmZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwgaW50IHJhaXNlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT0NMRVgpICYmIGRlZmluZWQoRklPTkNMRVgpCisgICAgaW50IHJlcXVlc3Q7CisgICAgaW50IGVycjsKKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKQorICAgIGludCBmbGFnczsKKyAgICBpbnQgcmVzOworI2VuZGlmCisKKyAgICAvKiBhdG9taWNfZmxhZ193b3JrcyBjYW4gb25seSBiZSB1c2VkIHRvIG1ha2UgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGFzc2VydCghKGF0b21pY19mbGFnX3dvcmtzICE9IE5VTEwgJiYgaW5oZXJpdGFibGUpKTsKKworICAgIGlmIChhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmICFpbmhlcml0YWJsZSkgeworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpbnQgaW5oZXJpdGFibGUgPSBnZXRfaW5oZXJpdGFibGUoZmQsIHJhaXNlKTsKKyAgICAgICAgICAgIGlmIChpbmhlcml0YWJsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAqYXRvbWljX2ZsYWdfd29ya3MgPSAhaW5oZXJpdGFibGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT0NMRVgpICYmIGRlZmluZWQoRklPTkNMRVgpCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICByZXF1ZXN0ID0gRklPTkNMRVg7CisgICAgZWxzZQorICAgICAgICByZXF1ZXN0ID0gRklPQ0xFWDsKKyAgICBlcnIgPSBpb2N0bChmZCwgcmVxdWVzdCwgTlVMTCk7CisgICAgaWYgKGVycikgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbHNlCisgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CisgICAgaWYgKGZsYWdzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgIGZsYWdzICY9IH5GRF9DTE9FWEVDOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgfD0gRkRfQ0xPRVhFQzsKKyAgICByZXMgPSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKiBNYWtlIHRoZSBmaWxlIGRlc2NyaXB0b3Igbm9uLWluaGVyaXRhYmxlLgorICAgUmV0dXJuIDAgb24gc3VjY2Vzcywgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50CittYWtlX25vbl9pbmhlcml0YWJsZShpbnQgZmQpCit7CisgICAgcmV0dXJuIHNldF9pbmhlcml0YWJsZShmZCwgMCwgMCwgTlVMTCk7Cit9CisKKy8qIFNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KKyAgIE9uIHN1Y2Nlc3M6IHJldHVybiAwLCBvbiBlcnJvcjogcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHJhaXNlIGlzIG5vbnplcm8KKyAgIGFuZCByZXR1cm4gLTEuCisKKyAgIElmIGF0b21pY19mbGFnX3dvcmtzIGlzIG5vdCBOVUxMOgorCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PS0xLCBjaGVjayBpZiB0aGUgaW5oZXJpdGFibGUgaXMgc2V0IG9uIHRoZSBmaWxlCisgICAgICBkZXNjcmlwdG9yOiBpZiB5ZXMsIHNldCAqYXRvbWljX2ZsYWdfd29ya3MgdG8gMSwgb3RoZXJ3aXNlIHNldCB0byAwIGFuZAorICAgICAgc2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTE6IGRvIG5vdGhpbmcKKyAgICAqIGlmICphdG9taWNfZmxhZ193b3Jrcz09MDogc2V0IGluaGVyaXRhYmxlIGZsYWcgdG8gRmFsc2UKKworICAgU2V0IGF0b21pY19mbGFnX3dvcmtzIHRvIE5VTEwgaWYgbm8gYXRvbWljIGZsYWcgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZQorICAgZmlsZSBkZXNjcmlwdG9yLgorCisgICBhdG9taWNfZmxhZ193b3JrcyBjYW4gb25seSBiZSB1c2VkIHRvIG1ha2UgYSBmaWxlIGRlc2NyaXB0b3IKKyAgIG5vbi1pbmhlcml0YWJsZTogYXRvbWljX2ZsYWdfd29ya3MgbXVzdCBiZSBOVUxMIGlmIGluaGVyaXRhYmxlPTEuICovCitpbnQKK19QeV9zZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgaW5oZXJpdGFibGUsIGludCAqYXRvbWljX2ZsYWdfd29ya3MpCit7CisgICAgcmV0dXJuIHNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUsIDEsIGF0b21pY19mbGFnX3dvcmtzKTsKK30KKworLyogT3BlbiBhIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzICh3cmFwcGVyIHRvIG9wZW4oKSBmdW5jdGlvbikuCisgICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworaW50CitfUHlfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworICAgIGludCBmZDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmQgPSBvcGVuKHBhdGhuYW1lLCBmbGFncyB8IE9fTk9JTkhFUklUKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gZmQ7CisjZWxzZQorCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrczsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBhdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbHNlCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisgICAgZmQgPSBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworCisgICAgaWYgKHNldF9pbmhlcml0YWJsZShmZCwgMCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYgICAvKiAhTVNfV0lORE9XUyAqLworICAgIHJldHVybiBmZDsKK30KKworLyogT3BlbiBhIGZpbGUuIFVzZSBfd2ZvcGVuKCkgb24gV2luZG93cywgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUKKyAgIGVuY29kaW5nIGFuZCB1c2UgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLiAqLwogRklMRSAqCiBfUHlfd2ZvcGVuKGNvbnN0IHdjaGFyX3QgKnBhdGgsIGNvbnN0IHdjaGFyX3QgKm1vZGUpCiB7Ci0jaWZuZGVmIE1TX1dJTkRPV1MKICAgICBGSUxFICpmOworI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgY2hhciAqY3BhdGg7CiAgICAgY2hhciBjbW9kZVsxMF07CiAgICAgc2l6ZV90IHI7CkBAIC01NjgsMjEgKzc4OCw0MiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmID0gZm9wZW4oY3BhdGgsIGNtb2RlKTsKICAgICBQeU1lbV9GcmVlKGNwYXRoKTsKLSAgICByZXR1cm4gZjsKICNlbHNlCi0gICAgcmV0dXJuIF93Zm9wZW4ocGF0aCwgbW9kZSk7CisgICAgZiA9IF93Zm9wZW4ocGF0aCwgbW9kZSk7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKLS8qIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyBhbmQKLSAgIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuCisvKiBXcmFwcGVyIHRvIGZvcGVuKCkuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBub24taW5oZXJpdGFibGUuICovCitGSUxFKgorX1B5X2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25zdCBjaGFyICptb2RlKQoreworICAgIEZJTEUgKmYgPSBmb3BlbihwYXRobmFtZSwgbW9kZSk7CisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOworfQorCisvKiBPcGVuIGEgZmlsZS4gQ2FsbCBfd2ZvcGVuKCkgb24gV2luZG93cywgb3IgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBmaWxlc3lzdGVtCisgICBlbmNvZGluZyBhbmQgY2FsbCBmb3BlbigpIG90aGVyd2lzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkCisgICBub24taW5oZXJpdGFibGUuCiAKICAgIFJldHVybiB0aGUgbmV3IGZpbGUgb2JqZWN0IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgaWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW4gb3IKLSAgIChpZiBQeUVycl9PY2N1cnJlZCgpKSBvbiB1bmljb2RlIGVycm9yICovCi0KKyAgIChpZiBQeUVycl9PY2N1cnJlZCgpKSBvbiB1bmljb2RlIGVycm9yLiAqLwogRklMRSoKLV9QeV9mb3BlbihQeU9iamVjdCAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK19QeV9mb3Blbl9vYmooUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7CisgICAgRklMRSAqZjsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgd2NoYXJfdCAqd3BhdGg7CiAgICAgd2NoYXJfdCB3bW9kZVsxMF07CkBAIC02MDIsMTYgKzg0MywyMSBAQAogICAgIGlmICh1c2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CisgICAgZiA9IF93Zm9wZW4od3BhdGgsIHdtb2RlKTsKICNlbHNlCi0gICAgRklMRSAqZjsKICAgICBQeU9iamVjdCAqYnl0ZXM7CiAgICAgaWYgKCFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIocGF0aCwgJmJ5dGVzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKSwgbW9kZSk7CiAgICAgUHlfREVDUkVGKGJ5dGVzKTsKLSAgICByZXR1cm4gZjsKICNlbmRpZgorICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKIH0KIAogI2lmZGVmIEhBVkVfUkVBRExJTksKQEAgLTY0OCwxMiArODk0LDEyIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKGJ1ZnNpeiA8PSByMSkgewotICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICB3Y3NuY3B5KGJ1Ziwgd2J1ZiwgYnVmc2l6KTsKLSAgICBQeU1lbV9GcmVlKHdidWYpOworICAgIFB5TWVtX1Jhd0ZyZWUod2J1Zik7CiAgICAgcmV0dXJuIChpbnQpcjE7CiB9CiAjZW5kaWYKQEAgLTY4OSwxMiArOTM1LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAocmVzb2x2ZWRfcGF0aF9zaXplIDw9IHIpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3cmVzb2x2ZWRfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHdjc25jcHkocmVzb2x2ZWRfcGF0aCwgd3Jlc29sdmVkX3BhdGgsIHJlc29sdmVkX3BhdGhfc2l6ZSk7Ci0gICAgUHlNZW1fRnJlZSh3cmVzb2x2ZWRfcGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZSh3cmVzb2x2ZWRfcGF0aCk7CiAgICAgcmV0dXJuIHJlc29sdmVkX3BhdGg7CiB9CiAjZW5kaWYKQEAgLTcwNyw3ICs5NTMsOCBAQAogX1B5X3dnZXRjd2Qod2NoYXJfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgcmV0dXJuIF93Z2V0Y3dkKGJ1Ziwgc2l6ZSk7CisgICAgaW50IGlzaXplID0gKGludClQeV9NSU4oc2l6ZSwgSU5UX01BWCk7CisgICAgcmV0dXJuIF93Z2V0Y3dkKGJ1ZiwgaXNpemUpOwogI2Vsc2UKICAgICBjaGFyIGZuYW1lW01BWFBBVEhMRU5dOwogICAgIHdjaGFyX3QgKnduYW1lOwpAQCAtNzE5LDEyICs5NjYsODEgQEAKICAgICBpZiAod25hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNpemUgPD0gbGVuKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHduYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHdjc25jcHkoYnVmLCB3bmFtZSwgc2l6ZSk7Ci0gICAgUHlNZW1fRnJlZSh3bmFtZSk7CisgICAgUHlNZW1fUmF3RnJlZSh3bmFtZSk7CiAgICAgcmV0dXJuIGJ1ZjsKICNlbmRpZgogfQogCisvKiBEdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgYXMKKyAgIG5vbi1pbmhlcml0YWJsZS4gUmV0dXJuIGEgbmV3IGZpbGUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCByYWlzZSBhbiBPU0Vycm9yCisgICBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4KKworICAgVGhlIEdJTCBpcyByZWxlYXNlZCB0byBjYWxsIGR1cCgpLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgR0lMLiAqLworaW50CitfUHlfZHVwKGludCBmZCkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmdHlwZTsKKyNlbmRpZgorCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBmaWxlIHR5cGUsIGlnbm9yZSB0aGUgZXJyb3IgaWYgaXQgZmFpbGVkICovCisgICAgZnR5cGUgPSBHZXRGaWxlVHlwZShoYW5kbGUpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZHVwKGZkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoZnR5cGUgIT0gRklMRV9UWVBFX0NIQVIpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVBGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGZjbnRsKGZkLCBGX0RVUEZEX0NMT0VYRUMsIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNlbHNlCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZHVwKGZkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gZmQ7Cit9CisKZGlmZiAtLWdpdCBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKaW5kZXggYTY1MTZkYy4uMGEzY2M1OSAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKKysrIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKiBEbyB0aGUgcGFkZGluZywgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGNhbGxlci1zdXBwbGllZAogICAgY29udGVudCBnb2VzLiAqLwotc3RhdGljIFB5X3NzaXplX3QKK3N0YXRpYyBpbnQKIGZpbGxfcGFkZGluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgUHlfc3NpemVfdCBuY2hhcnMsCiAgICAgICAgICAgICAgUHlfVUNTNCBmaWxsX2NoYXIsIFB5X3NzaXplX3Qgbl9scGFkZGluZywKQEAgLTU1Niw3ICs1NTYsNyBAQAogewogICAgIC8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBkaWdpdHMsIGRlY2ltYWwsIGFuZCByZW1haW5kZXIuICovCiAgICAgUHlfc3NpemVfdCBkX3BvcyA9IGRfc3RhcnQ7Ci0gICAgY29uc3QgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kID0gd3JpdGVyLT5raW5kOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBraW5kID0gd3JpdGVyLT5raW5kOwogICAgIGNvbnN0IHZvaWQgKmRhdGEgPSB3cml0ZXItPmRhdGE7CiAgICAgUHlfc3NpemVfdCByOwogCkBAIC03NTcsNyArNzU3LDggQEAKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIGlmIChmb3JtYXQtPndpZHRoID09IC0xICYmIGZvcm1hdC0+cHJlY2lzaW9uID09IC0xKSB7CisgICAgaWYgKChmb3JtYXQtPndpZHRoID09IC0xIHx8IGZvcm1hdC0+d2lkdGggPD0gbGVuKQorICAgICAgICAmJiAoZm9ybWF0LT5wcmVjaXNpb24gPT0gLTEgfHwgZm9ybWF0LT5wcmVjaXNpb24gPj0gbGVuKSkgewogICAgICAgICAvKiBGYXN0IHBhdGggKi8KICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCB2YWx1ZSk7CiAgICAgfQpAQCAtNzcwLDkgKzc3MSwxMyBAQAogCiAgICAgY2FsY19wYWRkaW5nKGxlbiwgZm9ybWF0LT53aWR0aCwgZm9ybWF0LT5hbGlnbiwgJmxwYWQsICZycGFkLCAmdG90YWwpOwogCi0gICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodmFsdWUsIDAsIGxlbik7CisgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKICAgICBpZiAobHBhZCAhPSAwIHx8IHJwYWQgIT0gMCkKICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmb3JtYXQtPmZpbGxfY2hhcik7CisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2YWx1ZSkgPiBtYXhjaGFyKSB7CisgICAgICAgIFB5X1VDUzQgdmFsbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodmFsdWUsIDAsIGxlbik7CisgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgdmFsbWF4Y2hhcik7CisgICAgfQogCiAgICAgLyogYWxsb2NhdGUgdGhlIHJlc3VsdGluZyBzdHJpbmcgKi8KICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgdG90YWwsIG1heGNoYXIpID09IC0xKQpAQCAtOTc3LDggKzk4Miw3IEBACiAgICAgUHlfc3NpemVfdCBuX3RvdGFsOwogICAgIGludCBoYXNfZGVjaW1hbDsKICAgICBkb3VibGUgdmFsOwotICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uOwotICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIGludCBwcmVjaXNpb24sIGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKICAgICBQeV9VQ1M0IHR5cGUgPSBmb3JtYXQtPnR5cGU7CiAgICAgaW50IGFkZF9wY3QgPSAwOwogICAgIFB5X3NzaXplX3QgaW5kZXg7CkBAIC0xMDQ5LDI0ICsxMDUzLDI0IEBACiAgICAgICAgIG5fZGlnaXRzICs9IDE7CiAgICAgfQogCi0gICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKLSAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCi0gICAgdW5pY29kZV90bXAgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIG5fZGlnaXRzKTsKLSAgICBQeU1lbV9GcmVlKGJ1Zik7Ci0gICAgaWYgKHVuaWNvZGVfdG1wID09IE5VTEwpCi0gICAgICAgIGdvdG8gZG9uZTsKLQogICAgIGlmIChmb3JtYXQtPnNpZ24gIT0gJysnICYmIGZvcm1hdC0+c2lnbiAhPSAnICcKICAgICAgICAgJiYgZm9ybWF0LT53aWR0aCA9PSAtMQogICAgICAgICAmJiBmb3JtYXQtPnR5cGUgIT0gJ24nCiAgICAgICAgICYmICFmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKQogICAgIHsKICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgIHJlc3VsdCA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCB1bmljb2RlX3RtcCk7Ci0gICAgICAgIFB5X0RFQ1JFRih1bmljb2RlX3RtcCk7CisgICAgICAgIHJlc3VsdCA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIGJ1Ziwgbl9kaWdpdHMpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU2luY2UgdGhlcmUgaXMgbm8gdW5pY29kZSB2ZXJzaW9uIG9mIFB5T1NfZG91YmxlX3RvX3N0cmluZywKKyAgICAgICBqdXN0IHVzZSB0aGUgOCBiaXQgdmVyc2lvbiBhbmQgdGhlbiBjb252ZXJ0IHRvIHVuaWNvZGUuICovCisgICAgdW5pY29kZV90bXAgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIG5fZGlnaXRzKTsKKyAgICBQeU1lbV9GcmVlKGJ1Zik7CisgICAgaWYgKHVuaWNvZGVfdG1wID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKwogICAgIC8qIElzIGEgc2lnbiBjaGFyYWN0ZXIgcHJlc2VudCBpbiB0aGUgb3V0cHV0PyAgSWYgc28sIHJlbWVtYmVyIGl0CiAgICAgICAgYW5kIHNraXAgaXQgKi8KICAgICBpbmRleCA9IDA7CkBAIC0xMTMzLDggKzExMzcsNyBAQAogICAgIFB5X3NzaXplX3Qgbl9pbV90b3RhbDsKICAgICBpbnQgcmVfaGFzX2RlY2ltYWw7CiAgICAgaW50IGltX2hhc19kZWNpbWFsOwotICAgIGludCBwcmVjaXNpb247Ci0gICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgaW50IHByZWNpc2lvbiwgZGVmYXVsdF9wcmVjaXNpb24gPSA2OwogICAgIFB5X1VDUzQgdHlwZSA9IGZvcm1hdC0+dHlwZTsKICAgICBQeV9zc2l6ZV90IGlfcmU7CiAgICAgUHlfc3NpemVfdCBpX2ltOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbi5jIGIvUHl0aG9uL2Zyb3plbi5jCmluZGV4IDI1ZmRjMTcuLjliYzY2MmIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mcm96ZW4uYworKysgYi9QeXRob24vZnJvemVuLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2RlZmluZSBTSVpFIChpbnQpc2l6ZW9mKE1fX19oZWxsb19fKQogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0gewogICAgIC8qIGltcG9ydGxpYiAqLwogICAgIHsiX2Zyb3plbl9pbXBvcnRsaWIiLCBfUHlfTV9faW1wb3J0bGliLCAoaW50KXNpemVvZihfUHlfTV9faW1wb3J0bGliKX0sCiAgICAgLyogVGVzdCBtb2R1bGUgKi8KQEAgLTQyLDQgKzQyLDQgQEAKIC8qIEVtYmVkZGluZyBhcHBzIG1heSBjaGFuZ2UgdGhpcyBwb2ludGVyIHRvIHBvaW50IHRvIHRoZWlyIGZhdm9yaXRlCiAgICBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzOiAqLwogCi1zdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlcyA9IF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKZGlmZiAtLWdpdCBhL1B5dGhvbi9mcm96ZW5tYWluLmMgYi9QeXRob24vZnJvemVubWFpbi5jCmluZGV4IDhiMWYyZDQuLjU1ZDA1ZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mcm96ZW5tYWluLmMKKysrIGIvUHl0aG9uL2Zyb3plbm1haW4uYwpAQCAtMTYsMTkgKzE2LDE5IEBACiBQeV9Gcm96ZW5NYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICBjaGFyICpwOwotICAgIGludCBpLCBuLCBzdHM7CisgICAgaW50IGksIG4sIHN0cyA9IDE7CiAgICAgaW50IGluc3BlY3QgPSAwOwogICAgIGludCB1bmJ1ZmZlcmVkID0gMDsKLSAgICBjaGFyICpvbGRsb2M7Ci0gICAgd2NoYXJfdCAqKmFyZ3ZfY29weTsKKyAgICBjaGFyICpvbGRsb2MgPSBOVUxMOworICAgIHdjaGFyX3QgKiphcmd2X2NvcHkgPSBOVUxMOwogICAgIC8qIFdlIG5lZWQgYSBzZWNvbmQgY29waWVzLCBhcyBQeXRob24gbWlnaHQgbW9kaWZ5IHRoZSBmaXJzdCBvbmUuICovCi0gICAgd2NoYXJfdCAqKmFyZ3ZfY29weTI7CisgICAgd2NoYXJfdCAqKmFyZ3ZfY29weTIgPSBOVUxMOwogCi0gICAgYXJndl9jb3B5ID0gUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqYXJnYyk7Ci0gICAgYXJndl9jb3B5MiA9IFB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKmFyZ2MpOworICAgIGFyZ3ZfY29weSA9IFB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogYXJnYyk7CisgICAgYXJndl9jb3B5MiA9IFB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogYXJnYyk7CiAgICAgaWYgKCFhcmd2X2NvcHkgfHwgIWFyZ3ZfY29weTIpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgUHlfRnJvemVuRmxhZyA9IDE7IC8qIFN1cHByZXNzIGVycm9ycyBmcm9tIGdldHBhdGguYyAqLwpAQCAtNDQsMzIgKzQ0LDI2IEBACiAgICAgICAgIHNldGJ1ZihzdGRlcnIsIChjaGFyICopTlVMTCk7CiAgICAgfQogCi0gICAgb2xkbG9jID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgb2xkbG9jID0gX1B5TWVtX1Jhd1N0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgaWYgKCFvbGRsb2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotI2lmZGVmIEhBVkVfQlJPS0VOX01CU1RPV0NTCi0gICAgICAgIHNpemVfdCBhcmdzaXplID0gc3RybGVuKGFyZ3ZbaV0pOwotI2Vsc2UKLSAgICAgICAgc2l6ZV90IGFyZ3NpemUgPSBtYnN0b3djcyhOVUxMLCBhcmd2W2ldLCAwKTsKLSNlbmRpZgotICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgIGlmIChhcmdzaXplID09IChzaXplX3QpLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgJWQgdG8gc3RyaW5nXG4iLCBpKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGFyZ3ZfY29weVtpXSA9IFB5TWVtX01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgYXJndl9jb3B5MltpXSA9IGFyZ3ZfY29weVtpXTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBjb3VudCA9IG1ic3Rvd2NzKGFyZ3ZfY29weVtpXSwgYXJndltpXSwgYXJnc2l6ZSsxKTsKLSAgICAgICAgaWYgKGNvdW50ID09IChzaXplX3QpLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgJWQgdG8gc3RyaW5nXG4iLCBpKTsKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgIyVpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxKTsKKyAgICAgICAgICAgIGFyZ2MgPSBpOworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgIH0KICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOworICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKKyAgICBvbGRsb2MgPSBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5SW5pdEZyb3plbkV4dGVuc2lvbnMoKTsKQEAgLTEwMywxMCArOTcsMTQgQEAKICAgICBQeVdpbkZyZWV6ZV9FeGVUZXJtKCk7CiAjZW5kaWYKICAgICBQeV9GaW5hbGl6ZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKworZXJyb3I6CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIGlmIChhcmd2X2NvcHkyKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTJbaV0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTIpOwogICAgIH0KLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weSk7Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmV0dXJuIHN0czsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9mdXR1cmUuYyBiL1B5dGhvbi9mdXR1cmUuYwppbmRleCBkMjRhZTQxLi44MWVhYjU0IDEwMDY0NAotLS0gYS9QeXRob24vZnV0dXJlLmMKKysrIGIvUHl0aG9uL2Z1dHVyZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIgogCiBzdGF0aWMgaW50Ci1mdXR1cmVfY2hlY2tfZmVhdHVyZXMoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIHN0bXRfdHkgcywgY29uc3QgY2hhciAqZmlsZW5hbWUpCitmdXR1cmVfY2hlY2tfZmVhdHVyZXMoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIHN0bXRfdHkgcywgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIGludCBpOwogICAgIGFzZGxfc2VxICpuYW1lczsKQEAgLTQzLDEyICs0MywxMiBAQAogICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmZWF0dXJlLCAiYnJhY2VzIikgPT0gMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBjaGFuY2UiKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIFVOREVGSU5FRF9GVVRVUkVfRkVBVFVSRSwgZmVhdHVyZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTU2LDEzICs1NiwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1mdXR1cmVfcGFyc2UoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZnV0dXJlX3BhcnNlKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgaW50IGksIGZvdW5kX2RvY3N0cmluZyA9IDAsIGRvbmUgPSAwLCBwcmV2X2xpbmUgPSAwOworICAgIGludCBpLCBkb25lID0gMCwgcHJldl9saW5lID0gMDsKKyAgICBzdG10X3R5IGZpcnN0OwogCiAgICAgaWYgKCEobW9kLT5raW5kID09IE1vZHVsZV9raW5kIHx8IG1vZC0+a2luZCA9PSBJbnRlcmFjdGl2ZV9raW5kKSkKICAgICAgICAgcmV0dXJuIDE7CiAKKyAgICBpZiAoYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisKICAgICAvKiBBIHN1YnNlcXVlbnQgcGFzcyB3aWxsIGRldGVjdCBmdXR1cmUgaW1wb3J0cyB0aGF0IGRvbid0CiAgICAgICAgYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBUaGVyZSdzIG9uZSBjYXNlLAogICAgICAgIGhvd2V2ZXIsIHRoYXQgaXMgZWFzaWVyIHRvIGhhbmRsZSBoZXJlOiBBIHNlcmllcyBvZiBpbXBvcnRzCkBAIC03MSw4ICs3NSwxMyBAQAogICAgICAgIGJ1dCBpcyBwcmVjZWRlZCBieSBhIHJlZ3VsYXIgaW1wb3J0LgogICAgICovCiAKKyAgICBpID0gMDsKKyAgICBmaXJzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChtb2QtPnYuTW9kdWxlLmJvZHksIGkpOworICAgIGlmIChmaXJzdC0+a2luZCA9PSBFeHByX2tpbmQgJiYgZmlyc3QtPnYuRXhwci52YWx1ZS0+a2luZCA9PSBTdHJfa2luZCkKKyAgICAgICAgaSsrOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpOyBpKyspIHsKKworICAgIGZvciAoOyBpIDwgYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSk7IGkrKykgewogICAgICAgICBzdG10X3R5IHMgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQobW9kLT52Lk1vZHVsZS5ib2R5LCBpKTsKIAogICAgICAgICBpZiAoZG9uZSAmJiBzLT5saW5lbm8gPiBwcmV2X2xpbmUpCkBAIC05MiwzMiArMTAxLDI3IEBACiAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSX0xBVEVfRlVUVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIWZ1dHVyZV9jaGVja19mZWF0dXJlcyhmZiwgcywgZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBmZi0+ZmZfbGluZW5vID0gcy0+bGluZW5vOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocy0+a2luZCA9PSBFeHByX2tpbmQgJiYgIWZvdW5kX2RvY3N0cmluZykgewotICAgICAgICAgICAgZXhwcl90eSBlID0gcy0+di5FeHByLnZhbHVlOwotICAgICAgICAgICAgaWYgKGUtPmtpbmQgIT0gU3RyX2tpbmQpCi0gICAgICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm91bmRfZG9jc3RyaW5nID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CiAKIAogUHlGdXR1cmVGZWF0dXJlcyAqCi1QeUZ1dHVyZV9Gcm9tQVNUKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqZmY7CiAKQEAgLTEzNSwzICsxMzksMTggQEAKICAgICB9CiAgICAgcmV0dXJuIGZmOwogfQorCisKK1B5RnV0dXJlRmVhdHVyZXMgKgorUHlGdXR1cmVfRnJvbUFTVChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIpCit7CisgICAgUHlGdXR1cmVGZWF0dXJlcyAqZmY7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZmID0gUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2QsIGZpbGVuYW1lKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBmZjsKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRhcmdzLmMgYi9QeXRob24vZ2V0YXJncy5jCmluZGV4IGFlOTMxYjkuLjYwODQ1NjggMTAwNjQ0Ci0tLSBhL1B5dGhvbi9nZXRhcmdzLmMKKysrIGIvUHl0aG9uL2dldGFyZ3MuYwpAQCAtNDYsMTQgKzQ2LDE2IEBACiB9IGZyZWVsaXN0ZW50cnlfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBpbnQgZmlyc3RfYXZhaWxhYmxlOwogICBmcmVlbGlzdGVudHJ5X3QgKmVudHJpZXM7CisgIGludCBmaXJzdF9hdmFpbGFibGU7CisgIGludCBlbnRyaWVzX21hbGxvY2VkOwogfSBmcmVlbGlzdF90OwogCisjZGVmaW5lIFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTIDgKIAogLyogRm9yd2FyZCAqLwogc3RhdGljIGludCB2Z2V0YXJnczEoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0ICosIGludCk7Ci1zdGF0aWMgdm9pZCBzZXRlcnJvcihpbnQsIGNvbnN0IGNoYXIgKiwgaW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyB2b2lkIHNldGVycm9yKFB5X3NzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIHN0YXRpYyBjaGFyICpjb252ZXJ0aXRlbShQeU9iamVjdCAqLCBjb25zdCBjaGFyICoqLCB2YV9saXN0ICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBzaXplX3QsIGZyZWVsaXN0X3QgKik7CiBzdGF0aWMgY2hhciAqY29udmVydHR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiosIHZhX2xpc3QgKiwgaW50LApAQCAtMTg3LDcgKzE4OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZWxpc3QtPmVudHJpZXNbaW5kZXhdLml0ZW0pOwogICAgICAgfQogICAgIH0KLSAgICBQeU1lbV9GUkVFKGZyZWVsaXN0LT5lbnRyaWVzKTsKKyAgICBpZiAoZnJlZWxpc3QtPmVudHJpZXNfbWFsbG9jZWQpCisgICAgICAgIFB5TWVtX0ZSRUUoZnJlZWxpc3QtPmVudHJpZXMpOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE5Nyw2ICsyMDAsOCBAQAogewogICAgIGNoYXIgbXNnYnVmWzI1Nl07CiAgICAgaW50IGxldmVsc1szMl07CisgICAgZnJlZWxpc3RlbnRyeV90IHN0YXRpY19lbnRyaWVzW1NUQVRJQ19GUkVFTElTVF9FTlRSSUVTXTsKKyAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0ge3N0YXRpY19lbnRyaWVzLCAwLCAwfTsKICAgICBjb25zdCBjaGFyICpmbmFtZSA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CiAgICAgaW50IG1pbiA9IC0xOwpAQCAtMjA2LDcgKzIxMSw2IEBACiAgICAgY29uc3QgY2hhciAqZm9ybWF0c2F2ZSA9IGZvcm1hdDsKICAgICBQeV9zc2l6ZV90IGksIGxlbjsKICAgICBjaGFyICptc2c7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKICAgICBpbnQgY29tcGF0ID0gZmxhZ3MgJiBGTEFHX0NPTVBBVDsKIAogICAgIGFzc2VydChjb21wYXQgfHwgKGFyZ3MgIT0gKFB5T2JqZWN0KilOVUxMKSk7CkBAIC0yNDAsMTUgKzI0NCwxNSBAQAogICAgICAgICAgICAgbWVzc2FnZSA9IGZvcm1hdDsKICAgICAgICAgICAgIGVuZGZtdCA9IDE7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICAgICAgICAgICAgICBtaW4gPSBtYXg7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ08nKQotICAgICAgICAgICAgICAgICAgICBtYXgrKzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChQeV9JU0FMUEhBKFB5X0NIQVJNQVNLKGMpKSkgeworICAgICAgICAgICAgICAgIGlmIChQeV9JU0FMUEhBKFB5X0NIQVJNQVNLKGMpKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ2UnKSAvKiBza2lwIGVuY29kZWQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnfCcpCi0gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjIsMTAgKzI2NiwxMyBAQAogCiAgICAgZm9ybWF0ID0gZm9ybWF0c2F2ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBtYXgpOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1heCA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBtYXgpOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgaWYgKGNvbXBhdCkgewpAQCAtMzUwLDcgKzM1Nyw3IEBACiAKIAogc3RhdGljIHZvaWQKLXNldGVycm9yKGludCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKK3NldGVycm9yKFB5X3NzaXplX3QgaWFyZywgY29uc3QgY2hhciAqbXNnLCBpbnQgKmxldmVscywgY29uc3QgY2hhciAqZm5hbWUsCiAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIGNoYXIgYnVmWzUxMl07CkBAIC0zNjYsMTAgKzM3MywxMCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChpYXJnICE9IDApIHsKICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlZCIsIGlhcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsIGlhcmcpOwogICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICBwICs9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIHdoaWxlIChsZXZlbHNbaV0gPiAwICYmIGkgPCAzMiAmJiAoaW50KShwLWJ1ZikgPCAyMjApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgMzIgJiYgbGV2ZWxzW2ldID4gMCAmJiAoaW50KShwLWJ1ZikgPCAyMjApIHsKICAgICAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKHAsIHNpemVvZihidWYpIC0gKHAgLSBidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgaXRlbSAlZCIsIGxldmVsc1tpXS0xKTsKICAgICAgICAgICAgICAgICBwICs9IHN0cmxlbihwKTsKQEAgLTQxNCw2ICs0MjEsNyBAQAogICAgIGludCBuID0gMDsKICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAqcF9mb3JtYXQ7CiAgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGludCBjID0gKmZvcm1hdCsrOwpAQCAtNDQzLDEyICs0NTEsMjAgQEAKICAgICAgICAgcmV0dXJuIG1zZ2J1ZjsKICAgICB9CiAKLSAgICBpZiAoKGkgPSBQeVNlcXVlbmNlX1NpemUoYXJnKSkgIT0gbikgeworICAgIGxlbiA9IFB5U2VxdWVuY2VfU2l6ZShhcmcpOworICAgIGlmIChsZW4gIT0gbikgewogICAgICAgICBsZXZlbHNbMF0gPSAwOwotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/ICJleHBlY3RlZCAlZCBhcmd1bWVudHMsIG5vdCAlZCIgOgotICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc2VxdWVuY2Ugb2YgbGVuZ3RoICVkLCBub3QgJWQiLAotICAgICAgICAgICAgICAgICAgbiwgaSk7CisgICAgICAgIGlmICh0b3BsZXZlbCkgeworICAgICAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlZCBhcmd1bWVudHMsIG5vdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgbGVuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzZXF1ZW5jZSBvZiBsZW5ndGggJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgbGVuKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbXNnYnVmOwogICAgIH0KIApAQCAtNTYzLDcgKzU3OSw3IEBACiAgICAgICAgICAgICAgICAgInNpemUgZG9lcyBub3QgZml0IGluIGFuIGludCIpOyBcCiAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOyBcCiAgICAgICAgIH0gXAotICAgICAgICAqcT1zOyBcCisgICAgICAgICpxID0gKGludClzOyBcCiAgICAgfQogI2RlZmluZSBCVUZGRVJfTEVOICAgICAgKChmbGFncyAmIEZMQUdfU0laRV9UKSA/ICpxMjoqcSkKICNkZWZpbmUgUkVUVVJOX0VSUl9PQ0NVUlJFRCByZXR1cm4gbXNnYnVmCkBAIC0xNDE5LDkgKzE0MzUsMTEgQEAKICAgICBjb25zdCBjaGFyICpmbmFtZSwgKm1zZywgKmN1c3RvbV9tc2csICprZXl3b3JkOwogICAgIGludCBtaW4gPSBJTlRfTUFYOwogICAgIGludCBtYXggPSBJTlRfTUFYOwotICAgIGludCBpLCBsZW4sIG5hcmdzLCBua2V5d29yZHM7CisgICAgaW50IGksIGxlbjsKKyAgICBQeV9zc2l6ZV90IG5hcmdzLCBua2V5d29yZHM7CiAgICAgUHlPYmplY3QgKmN1cnJlbnRfYXJnOwotICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7MCwgTlVMTH07CisgICAgZnJlZWxpc3RlbnRyeV90IHN0YXRpY19lbnRyaWVzW1NUQVRJQ19GUkVFTElTVF9FTlRSSUVTXTsKKyAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0ge3N0YXRpY19lbnRyaWVzLCAwLCAwfTsKIAogICAgIGFzc2VydChhcmdzICE9IE5VTEwgJiYgUHlUdXBsZV9DaGVjayhhcmdzKSk7CiAgICAgYXNzZXJ0KGtleXdvcmRzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGtleXdvcmRzKSk7CkBAIC0xNDQ1LDE3ICsxNDYzLDIwIEBACiAgICAgZm9yIChsZW49MDsga3dsaXN0W2xlbl07IGxlbisrKQogICAgICAgICBjb250aW51ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogICAgIG5rZXl3b3JkcyA9IChrZXl3b3JkcyA9PSBOVUxMKSA/IDAgOiBQeURpY3RfU2l6ZShrZXl3b3Jkcyk7CiAgICAgaWYgKG5hcmdzICsgbmtleXdvcmRzID4gbGVuKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gImZ1bmN0aW9uIiA6IGZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gIiIgOiAiKCkiLAogICAgICAgICAgICAgICAgICAgICAgbGVuLApAQCAtMTU3NCwyMCArMTU5NSwxNSBAQAogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrZXl3b3JkcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewogICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKLSAgICAgICAgICAgIGNoYXIgKmtzOwogICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgJmZyZWVsaXN0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgX1B5VW5pY29kZV9Bc1N0cmluZygpIHJlc3VsdCBpcyBub3QgTlVMTCAqLwotICAgICAgICAgICAga3MgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChrcywga3dsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCBrd2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtYXRjaCkgewpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGN3ZC5jIGIvUHl0aG9uL2dldGN3ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVkYmQxLi4wMDAwMDAwCi0tLSBhL1B5dGhvbi9nZXRjd2QuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLQotLyogVHdvIFBEIGdldGN3ZCgpIGltcGxlbWVudGF0aW9ucy4KLSAgIEF1dGhvcjogR3VpZG8gdmFuIFJvc3N1bSwgQ1dJIEFtc3RlcmRhbSwgSmFuIDE5OTEsIDxndWlkb0Bjd2kubmw+LiAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWZkZWYgSEFWRV9HRVRXRAotCi0vKiBWZXJzaW9uIGZvciBCU0Qgc3lzdGVtcyAtLSB1c2UgZ2V0d2QoKSAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLSNpZm5kZWYgTUFYUEFUSExFTgotI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAotI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCi0jZWxzZQotI2RlZmluZSBNQVhQQVRITEVOIDEwMjQKLSNlbmRpZgotI2VuZGlmCi0KLWV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwotCi1jaGFyICoKLWdldGN3ZChjaGFyICpidWYsIGludCBzaXplKQotewotICAgIGNoYXIgbG9jYWxidWZbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpyZXQ7Ci0KLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0ID0gZ2V0d2QobG9jYWxidWYpOwotICAgIGlmIChyZXQgIT0gTlVMTCAmJiBzdHJsZW4obG9jYWxidWYpID49IChzaXplX3Qpc2l6ZSkgewotICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHN0cm5jcHkoYnVmLCBsb2NhbGJ1Ziwgc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2Vsc2UgLyogIUhBVkVfR0VUV0QgKi8KLQotLyogVmVyc2lvbiBmb3IgcmVhbGx5IG9sZCBVTklYIHN5c3RlbXMgLS0gdXNlIHBpcGUgZnJvbSBwd2QgKi8KLQotI2lmbmRlZiBQV0RfQ01ECi0jZGVmaW5lIFBXRF9DTUQgIi9iaW4vcHdkIgotI2VuZGlmCi0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgRklMRSAqZnA7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgc3RzOwotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKGZwID0gcG9wZW4oUFdEX0NNRCwgInIiKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGZnZXRzKGJ1Ziwgc2l6ZSwgZnApID09IE5VTEwgfHwgKHN0cyA9IHBjbG9zZShmcCkpICE9IDApIHsKLSAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmb3IgKHAgPSBidWY7ICpwICE9ICdcbic7IHArKykgewotICAgICAgICBpZiAoKnAgPT0gJ1wwJykgewotICAgICAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAqcCA9ICdcMCc7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2VuZGlmIC8qICFIQVZFX0dFVFdEICovCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0LmMgYi9QeXRob24vaW1wb3J0LmMKaW5kZXggZTkxY2VmOC4uNTg0YjFiNCAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydC5jCisrKyBiL1B5dGhvbi9pbXBvcnQuYwpAQCAtMTksMjIgKzE5LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZkZWYgTVNfV0lORE9XUwotLyogZm9yIHN0YXQuc3RfbW9kZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7Ci0vKiBmb3IgX21rZGlyICovCi0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jZW5kaWYKLQotCiAjZGVmaW5lIENBQ0hFRElSICJfX3B5Y2FjaGVfXyIKIAogLyogU2VlIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGJlbG93ICovCiBzdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbnMgPSBOVUxMOwogCi0vKiBGdW5jdGlvbiBmcm9tIFBhcnNlci90b2tlbml6ZXIuYyAqLwotZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShpbnQsIFB5T2JqZWN0ICopOwotCiAvKiBUaGlzIHRhYmxlIGlzIGRlZmluZWQgaW4gY29uZmlnLmM6ICovCiBleHRlcm4gc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW107CiAKQEAgLTkzLDggKzgyLDEwIEBACiAgICAgaW50IGVyciA9IDA7CiAKICAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7Ci0gICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkKKyAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5wYXRoX2hvb2tzIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBpbnN0YWxsaW5nIHppcGltcG9ydCBob29rXG4iKTsKQEAgLTIwNCw4ICsxOTUsMTEgQEAKICAgICBpZiAoaW1wb3J0X2xvY2tfbGV2ZWwgPiAxKSB7CiAgICAgICAgIC8qIEZvcmtlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGltcG9ydCAqLwogICAgICAgICBsb25nIG1lID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwotICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIDApOwotICAgICAgICAvKiBYWFg6IGNhbiB0aGUgcHJldmlvdXMgbGluZSBmYWlsPyAqLworICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNvdWxkIGZhaWwgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgZm9ya2luZyBhcworICAgICAgICAgICBhIHNpZGUtZWZmZWN0IG9mIGFuIGltcG9ydCBpcyBhKSByYXJlLCBiKSBudXRzLCBhbmQgYykgZGlmZmljdWx0IHRvCisgICAgICAgICAgIGRvIHRoYW5rcyB0byB0aGUgbG9jayBvbmx5IGJlaW5nIGhlbGQgd2hlbiBkb2luZyBpbmRpdmlkdWFsIG1vZHVsZQorICAgICAgICAgICBsb2NrcyBwZXIgaW1wb3J0LiAqLworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIE5PV0FJVF9MT0NLKTsKICAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gbWU7CiAgICAgICAgIGltcG9ydF9sb2NrX2xldmVsLS07CiAgICAgfSBlbHNlIHsKQEAgLTI4MCw2ICsyNzQsNyBAQAogICAgICJwYXRoIiwgImFyZ3YiLCAicHMxIiwgInBzMiIsCiAgICAgImxhc3RfdHlwZSIsICJsYXN0X3ZhbHVlIiwgImxhc3RfdHJhY2ViYWNrIiwKICAgICAicGF0aF9ob29rcyIsICJwYXRoX2ltcG9ydGVyX2NhY2hlIiwgIm1ldGFfcGF0aCIsCisgICAgIl9faW50ZXJhY3RpdmVob29rX18iLAogICAgIC8qIG1pc2Mgc3R1ZmYgKi8KICAgICAiZmxhZ3MiLCAiZmxvYXRfaW5mbyIsCiAgICAgTlVMTApAQCAtMjkyLDE2ICsyODcsMTcgQEAKICAgICBOVUxMCiB9OwogCi0KIC8qIFVuLWluaXRpYWxpemUgdGhpbmdzLCBhcyBnb29kIGFzIHdlIGNhbiAqLwogCiB2b2lkCiBQeUltcG9ydF9DbGVhbnVwKHZvaWQpCiB7Ci0gICAgUHlfc3NpemVfdCBwb3MsIG5kb25lOworICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKmRpY3Q7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gaW50ZXJwLT5idWlsdGluczsKKyAgICBQeU9iamVjdCAqd2Vha2xpc3QgPSBOVUxMOwogCiAgICAgaWYgKG1vZHVsZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOyAvKiBBbHJlYWR5IGRvbmUgKi8KQEAgLTMxMiw2ICszMDgsOCBAQAogICAgICAgIGRlbGV0ZWQgKmxhc3QqIG9mIGFsbCwgdGhleSB3b3VsZCBjb21lIHRvbyBsYXRlIGluIHRoZSBub3JtYWwKICAgICAgICBkZXN0cnVjdGlvbiBvcmRlci4gIFNpZ2guICovCiAKKyAgICAvKiBYWFggUGVyaGFwcyB0aGVzZSBwcmVjYXV0aW9ucyBhcmUgb2Jzb2xldGUuIFdobyBrbm93cz8gKi8KKwogICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CiAgICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KHZhbHVlKTsKQEAgLTMzOSw4NyArMzM3LDg3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBGaXJzdCwgZGVsZXRlIF9fbWFpbl9fICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBfX21haW5fX1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIsIFB5X05vbmUpOworICAgIC8qIFdlIHByZXBhcmUgYSBsaXN0IHdoaWNoIHdpbGwgcmVjZWl2ZSAobmFtZSwgd2Vha3JlZikgdHVwbGVzIG9mCisgICAgICAgbW9kdWxlcyB3aGVuIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4gIFRoZSBuYW1lIGlzIHVzZWQKKyAgICAgICBmb3IgZGlhZ25vc2lzIG1lc3NhZ2VzIChpbiB2ZXJib3NlIG1vZGUpLCB3aGlsZSB0aGUgd2Vha3JlZiBoZWxwcworICAgICAgIGRldGVjdCB0aG9zZSBtb2R1bGVzIHdoaWNoIGhhdmUgYmVlbiBoZWxkIGFsaXZlLiAqLworICAgIHdlYWtsaXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAod2Vha2xpc3QgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworI2RlZmluZSBTVE9SRV9NT0RVTEVfV0VBS1JFRihuYW1lLCBtb2QpIFwKKyAgICBpZiAod2Vha2xpc3QgIT0gTlVMTCkgeyBcCisgICAgICAgIFB5T2JqZWN0ICp3ciA9IFB5V2Vha3JlZl9OZXdSZWYobW9kLCBOVUxMKTsgXAorICAgICAgICBpZiAobmFtZSAmJiB3cikgeyBcCisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIHdyKTsgXAorICAgICAgICAgICAgUHlMaXN0X0FwcGVuZCh3ZWFrbGlzdCwgdHVwKTsgXAorICAgICAgICAgICAgUHlfWERFQ1JFRih0dXApOyBcCisgICAgICAgIH0gXAorICAgICAgICBQeV9YREVDUkVGKHdyKTsgXAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgXAorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgXAogICAgIH0KIAotICAgIC8qIFRoZSBzcGVjaWFsIHRyZWF0bWVudCBvZiAiYnVpbHRpbnMiIGhlcmUgaXMgYmVjYXVzZSBldmVuCi0gICAgICAgd2hlbiBpdCdzIG5vdCByZWZlcmVuY2VkIGFzIGEgbW9kdWxlLCBpdHMgZGljdGlvbmFyeSBpcwotICAgICAgIHJlZmVyZW5jZWQgYnkgYWxtb3N0IGV2ZXJ5IG1vZHVsZSdzIF9fYnVpbHRpbnNfXy4gIFNpbmNlCi0gICAgICAgZGVsZXRpbmcgYSBtb2R1bGUgY2xlYXJzIGl0cyBkaWN0aW9uYXJ5IChldmVuIGlmIHRoZXJlIGFyZQotICAgICAgIHJlZmVyZW5jZXMgbGVmdCB0byBpdCksIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSAiYnVpbHRpbnMiCi0gICAgICAgbW9kdWxlIGxhc3QuICBMaWtld2lzZSwgd2UgZG9uJ3QgZGVsZXRlIHN5cyB1bnRpbCB0aGUgdmVyeQotICAgICAgIGVuZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkgcmVmZXJlbmNlZCAoZS5nLiBieSBwcmludCkuCi0KLSAgICAgICBBbHNvIG5vdGUgdGhhdCB3ZSAnZGVsZXRlJyBtb2R1bGVzIGJ5IHJlcGxhY2luZyB0aGVpciBlbnRyeQotICAgICAgIGluIHRoZSBtb2R1bGVzIGRpY3Qgd2l0aCBOb25lLCByYXRoZXIgdGhhbiByZWFsbHkgZGVsZXRpbmcKLSAgICAgICB0aGVtOyB0aGlzIGF2b2lkcyBhIHJlaGFzaCBvZiB0aGUgbW9kdWxlcyBkaWN0aW9uYXJ5IGFuZAotICAgICAgIGFsc28gbWFya3MgdGhlbSBhcyAibm9uIGV4aXN0ZW50IiBzbyB0aGV5IHdvbid0IGJlCi0gICAgICAgcmUtaW1wb3J0ZWQuICovCi0KLSAgICAvKiBOZXh0LCByZXBlYXRlZGx5IGRlbGV0ZSBtb2R1bGVzIHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YKLSAgICAgICBvbmUgKHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpIGFuZCBkZWxldGUgdGhlbSAqLwotICAgIGRvIHsKLSAgICAgICAgbmRvbmUgPSAwOwotICAgICAgICBwb3MgPSAwOwotICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5vYl9yZWZjbnQgIT0gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAic3lzIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiIyBjbGVhbnVwWzFdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICBuZG9uZSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAobmRvbmUgPiAwKTsKLQotICAgIC8qIE5leHQsIGRlbGV0ZSBhbGwgbW9kdWxlcyAoc3RpbGwgc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgKi8KKyAgICAvKiBSZW1vdmUgYWxsIG1vZHVsZXMgZnJvbSBzeXMubW9kdWxlcywgaG9waW5nIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgY2FuIHJlY2xhaW0gbW9zdCBvZiB0aGVtLiAqLwogICAgIHBvcyA9IDA7CiAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgImJ1aWx0aW5zIikgPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKKyAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhrZXkpKQorICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdIHJlbW92aW5nICVVXG4iLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFNUT1JFX01PRFVMRV9XRUFLUkVGKGtleSwgdmFsdWUpOwogICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIE5leHQsIGRlbGV0ZSBzeXMgYW5kIGJ1aWx0aW5zIChpbiB0aGF0IG9yZGVyKSAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIHN5c1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiLCBQeV9Ob25lKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBidWlsdGluc1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIsIFB5X05vbmUpOworICAgIC8qIENsZWFyIHRoZSBtb2R1bGVzIGRpY3QuICovCisgICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIFJlcGxhY2UgdGhlIGludGVycHJldGVyJ3MgcmVmZXJlbmNlIHRvIGJ1aWx0aW5zIHdpdGggYW4gZW1wdHkgZGljdAorICAgICAgIChtb2R1bGUgZ2xvYmFscyBzdGlsbCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBidWlsdGlucykuICovCisgICAgYnVpbHRpbnMgPSBpbnRlcnAtPmJ1aWx0aW5zOworICAgIGludGVycC0+YnVpbHRpbnMgPSBQeURpY3RfTmV3KCk7CisgICAgUHlfREVDUkVGKGJ1aWx0aW5zKTsKKyAgICAvKiBDbGVhciBtb2R1bGUgZGljdCBjb3BpZXMgc3RvcmVkIGluIHRoZSBpbnRlcnByZXRlciBzdGF0ZSAqLworICAgIF9QeVN0YXRlX0NsZWFyTW9kdWxlcygpOworICAgIC8qIENvbGxlY3QgcmVmZXJlbmNlcyAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKyAgICAvKiBEdW1wIEdDIHN0YXRzIGJlZm9yZSBpdCdzIHRvbyBsYXRlLCBzaW5jZSBpdCB1c2VzIHRoZSB3YXJuaW5ncworICAgICAgIG1hY2hpbmVyeS4gKi8KKyAgICBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cygpOworCisgICAgLyogTm93LCBpZiB0aGVyZSBhcmUgYW55IG1vZHVsZXMgbGVmdCBhbGl2ZSwgY2xlYXIgdGhlaXIgZ2xvYmFscyB0bworICAgICAgIG1pbmltaXplIHBvdGVudGlhbCBsZWFrcy4gIEFsbCBDIGV4dGVuc2lvbiBtb2R1bGVzIGFjdHVhbGx5IGVuZAorICAgICAgIHVwIGhlcmUsIHNpbmNlIHRoZXkgYXJlIGtlcHQgYWxpdmUgaW4gdGhlIGludGVycHJldGVyIHN0YXRlLiAqLworICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh3ZWFrbGlzdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeUxpc3RfR0VUX0lURU0od2Vha2xpc3QsIGkpOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QoUHlUdXBsZV9HRVRfSVRFTSh0dXAsIDEpKTsKKyAgICAgICAgICAgIGlmIChtb2QgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgYXNzZXJ0KFB5TW9kdWxlX0NoZWNrKG1vZCkpOworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhuYW1lKSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgJVVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCk7CisgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIobW9kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2QpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih3ZWFrbGlzdCk7CiAgICAgfQogCi0gICAgLyogRmluYWxseSwgY2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkgKi8KLSAgICBQeURpY3RfQ2xlYXIobW9kdWxlcyk7CisgICAgLyogQ2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkuICBBY3R1YWwgbW9kdWxlcyB3aWxsCisgICAgICAgc3RpbGwgYmUgdGhlcmUgb25seSBpZiBpbXBvcnRlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBzb21lCisgICAgICAgZGVzdHJ1Y3Rvci4gKi8KICAgICBpbnRlcnAtPm1vZHVsZXMgPSBOVUxMOwogICAgIFB5X0RFQ1JFRihtb2R1bGVzKTsKKworICAgIC8qIE9uY2UgbW9yZSAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKworI3VuZGVmIFNUT1JFX01PRFVMRV9XRUFLUkVGCiB9CiAKIApAQCAtNDUxLDEyICs0NDksMTIgQEAKIAogLyogTWFnaWMgZm9yIGV4dGVuc2lvbiBtb2R1bGVzIChidWlsdC1pbiBhcyB3ZWxsIGFzIGR5bmFtaWNhbGx5CiAgICBsb2FkZWQpLiAgVG8gcHJldmVudCBpbml0aWFsaXppbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBtb3JlIHRoYW4KLSAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgbW9kdWxlIG5hbWUKLSAgIChmb3IgYnVpbHQtaW4gbW9kdWxlcykgb3IgYnkgZmlsZW5hbWUgKGZvciBkeW5hbWljYWxseSBsb2FkZWQKLSAgIG1vZHVsZXMpLCBjb250YWluaW5nIHRoZXNlIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzCi0gICBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBieSBjYWxsaW5nIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpCi0gICBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQQotICAgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZworICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSB0aGUgdHVwbGUKKyAgIChtb2R1bGUgbmFtZSwgbW9kdWxlIG5hbWUpICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5CisgICAoZmlsZW5hbWUsIG1vZHVsZSBuYW1lKSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZQorICAgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZworICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbgorICAgZnVuY3Rpb24gc3VjY2VlZHMuICBBIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKICAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KCkuCiAKICAgIE1vZHVsZXMgd2hpY2ggZG8gc3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBzZXQgdGhlaXIgbV9zaXplCkBAIC00NjksOCArNDY3LDkgQEAKIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZHVsZXMsICpkaWN0OworICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdCwgKmtleTsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKmRlZjsKKyAgICBpbnQgcmVzOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpIHsKICAgICAgICAgZXh0ZW5zaW9ucyA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKQEAgLTUwNywxMiArNTA2LDE4IEBACiAgICAgICAgIGlmIChkZWYtPm1fYmFzZS5tX2NvcHkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUsIChQeU9iamVjdCopZGVmKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGtleSwgKFB5T2JqZWN0ICopZGVmKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKLV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY2hhciAqbmFtZSkKK19QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqOwpAQCAtNTI3LDExICs1MzIsMTUgQEAKIFB5T2JqZWN0ICoKIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0OworICAgIFB5T2JqZWN0ICptb2QsICptZGljdCwgKmtleTsKICAgICBQeU1vZHVsZURlZiogZGVmOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGRlZiA9IChQeU1vZHVsZURlZiopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUpOworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBmaWxlbmFtZSwgbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWYgPSAoUHlNb2R1bGVEZWYgKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBrZXkpOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIGlmIChkZWYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGRlZi0+bV9zaXplID09IC0xKSB7CkBAIC02NDcsMjIgKzY1NiwyMyBAQAogICogaW50ZXJmYWNlLiAgVGhlIG90aGVyIHR3byBleGlzdCBwcmltYXJpbHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgKi8KIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKIHsKICAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAogICAgICAgICBuYW1lLCBjbywgKGNoYXIgKilOVUxMLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIHBhdGhuYW1lLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIHsKICAgICBQeU9iamVjdCAqbSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWVvYmosICpwYXRob2JqID0gTlVMTCwgKmNwYXRob2JqID0gTlVMTDsKQEAgLTY5Myw3ICs3MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gaW50ZXJwcmV0ZXIhIik7CiAgICAgICAgIH0KIAotICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19nZXRfc291cmNlZmlsZSwgY3BhdGhvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgaWYgKHBhdGhvYmogPT0gTlVMTCkKQEAgLTgzNSw3ICs4NDUsNyBAQAogCiAKIC8qIEZvcndhcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiAqIGZpbmRfZnJvemVuKFB5T2JqZWN0ICopOworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CiAKIAogLyogSGVscGVyIHRvIHRlc3QgZm9yIGJ1aWx0LWluIG1vZHVsZSAqLwpAQCAtOTE3LDExICs5MjcsMTEgQEAKIFB5SW1wb3J0X0dldEltcG9ydGVyKFB5T2JqZWN0ICpwYXRoKSB7CiAgICAgUHlPYmplY3QgKmltcG9ydGVyPU5VTEwsICpwYXRoX2ltcG9ydGVyX2NhY2hlPU5VTEwsICpwYXRoX2hvb2tzPU5VTEw7CiAKLSAgICBpZiAoKHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKSkpIHsKLSAgICAgICAgaWYgKChwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIikpKSB7Ci0gICAgICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwotICAgICAgICB9CisgICAgcGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpOworICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKKyAgICBpZiAocGF0aF9pbXBvcnRlcl9jYWNoZSAhPSBOVUxMICYmIHBhdGhfaG9va3MgIT0gTlVMTCkgeworICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7CiAgICAgfQogICAgIFB5X1hJTkNSRUYoaW1wb3J0ZXIpOyAvKiBnZXRfcGF0aF9pbXBvcnRlciByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgcmV0dXJuIGltcG9ydGVyOwpAQCAtOTM4LDggKzk0OCwxMiBAQAogaW5pdF9idWlsdGluKFB5T2JqZWN0ICpuYW1lKQogewogICAgIHN0cnVjdCBfaW5pdHRhYiAqcDsKKyAgICBQeU9iamVjdCAqbW9kOwogCi0gICAgaWYgKF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KG5hbWUsIG5hbWUpICE9IE5VTEwpCisgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFtZSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobW9kICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgZm9yIChwID0gUHlJbXBvcnRfSW5pdHRhYjsgcC0+bmFtZSAhPSBOVUxMOyBwKyspIHsKQEAgLTk3MiwxMCArOTg2LDEwIEBACiAKIC8qIEZyb3plbiBtb2R1bGVzICovCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiAqCitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gKgogZmluZF9mcm96ZW4oUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnA7CiAKICAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk5Miw3ICsxMDA2LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZnJvemVuX29iamVjdChQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CiAgICAgaW50IHNpemU7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7CkBAIC0xMDEwLDEzICsxMDI0LDEzIEBACiAgICAgc2l6ZSA9IHAtPnNpemU7CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICBzaXplID0gLXNpemU7Ci0gICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY2hhciAqKXAtPmNvZGUsIHNpemUpOworICAgIHJldHVybiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGlzX2Zyb3plbl9wYWNrYWdlKFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwNDMsNyArMTA1Nyw3IEBACiBpbnQKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZU9iamVjdChQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKICAgICBQeU9iamVjdCAqY28sICptLCAqcGF0aDsKICAgICBpbnQgaXNwYWNrYWdlOwogICAgIGludCBzaXplOwpAQCAtMTA2Miw3ICsxMDc2LDcgQEAKICAgICBpc3BhY2thZ2UgPSAoc2l6ZSA8IDApOwogICAgIGlmIChpc3BhY2thZ2UpCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICBjbyA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY2hhciAqKXAtPmNvZGUsIHNpemUpOworICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjb25zdCBjaGFyICopcC0+Y29kZSwgc2l6ZSk7CiAgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIVB5Q29kZV9DaGVjayhjbykpIHsKQEAgLTEwNzIsMTkgKzEwODYsMTcgQEAKICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNwYWNrYWdlKSB7Ci0gICAgICAgIC8qIFNldCBfX3BhdGhfXyB0byB0aGUgcGFja2FnZSBuYW1lICovCisgICAgICAgIC8qIFNldCBfX3BhdGhfXyB0byB0aGUgZW1wdHkgbGlzdCAqLwogICAgICAgICBQeU9iamVjdCAqZCwgKmw7CiAgICAgICAgIGludCBlcnI7CiAgICAgICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGVPYmplY3QobmFtZSk7CiAgICAgICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgICAgICBsID0gUHlMaXN0X05ldygxKTsKKyAgICAgICAgbCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYobmFtZSk7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsLCAwLCBuYW1lKTsKICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fcGF0aF9fIiwgbCk7CiAgICAgICAgIFB5X0RFQ1JFRihsKTsKICAgICAgICAgaWYgKGVyciAhPSAwKQpAQCAtMTEwNiw3ICsxMTE4LDcgQEAKIH0KIAogaW50Ci1QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKK1B5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lb2JqOwogICAgIGludCByZXQ7CkBAIC0xMjIwLDcgKzEyMzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsKQogewogICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOwotICAgIF9QeV9JREVOVElGSUVSKF9faW5pdGlhbGl6aW5nX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fc3BlY19fKTsKKyAgICBfUHlfSURFTlRJRklFUihfaW5pdGlhbGl6aW5nKTsKICAgICBfUHlfSURFTlRJRklFUihfX3BhY2thZ2VfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19wYXRoX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKQEAgLTEzNTYsNyArMTM2OSwxMSBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBiYXNlID0gUHlVbmljb2RlX1N1YnN0cmluZyhwYWNrYWdlLCAwLCBsYXN0X2RvdCk7CisgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpib3Jyb3dlZF9kb3QsICpzZXEgPSBOVUxMOwogCkBAIC0xNDEwLDE2ICsxNDI3LDIxIEBACiAgICAgICAgIGdvdG8gZXJyb3Jfd2l0aF91bmxvY2s7CiAgICAgfQogICAgIGVsc2UgaWYgKG1vZCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKnNwZWM7CiAgICAgICAgIGludCBpbml0aWFsaXppbmcgPSAwOwogCiAgICAgICAgIFB5X0lOQ1JFRihtb2QpOwogICAgICAgICAvKiBPcHRpbWl6YXRpb246IG9ubHkgY2FsbCBfYm9vdHN0cmFwLl9sb2NrX3VubG9ja19tb2R1bGUoKSBpZgotICAgICAgICAgICBfX2luaXRpYWxpemluZ19fIGlzIHRydWUuCi0gICAgICAgICAgIE5PVEU6IGJlY2F1c2Ugb2YgdGhpcywgX19pbml0aWFsaXppbmdfXyBtdXN0IGJlIHNldCAqYmVmb3JlKgorICAgICAgICAgICBfX3NwZWNfXy5faW5pdGlhbGl6aW5nIGlzIHRydWUuCisgICAgICAgICAgIE5PVEU6IGJlY2F1c2Ugb2YgdGhpcywgaW5pdGlhbGl6aW5nIG11c3QgYmUgc2V0ICpiZWZvcmUqCiAgICAgICAgICAgIHN0dWZmaW5nIHRoZSBuZXcgbW9kdWxlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgKi8KLSAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1vZCwgJlB5SWRfX19pbml0aWFsaXppbmdfXyk7CisgICAgICAgIHNwZWMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1vZCwgJlB5SWRfX19zcGVjX18pOworICAgICAgICBpZiAoc3BlYyAhPSBOVUxMKSB7CisgICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoc3BlYywgJlB5SWRfX2luaXRpYWxpemluZyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3BlYyk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlIHsKQEAgLTE0MzAsNyArMTQ1Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGluaXRpYWxpemluZyA+IDApIHsKICAgICAgICAgICAgIC8qIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19sb2NrX3VubG9ja19tb2R1bGUsIGFic19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQpAQCAtMTQ0OCw3ICsxNDcwLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIF9ib290c3RyYXAuX2ZpbmRfYW5kX2xvYWQoKSByZWxlYXNlcyB0aGUgaW1wb3J0IGxvY2sgKi8KLSAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIG1vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZmluZF9hbmRfbG9hZCwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5zX2ltcG9ydCwgTlVMTCk7CiAgICAgICAgIGlmIChtb2QgPT0gTlVMTCkgewpAQCAtMTUxNyw3ICsxNTM5LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIGZpbmFsX21vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9faGFuZGxlX2Zyb21saXN0LCBtb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0LCBidWlsdGluc19pbXBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwpAQCAtMTc3MSw3ICsxNzkzLDcgQEAKIGltcF9pc19mcm96ZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW4iLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHAgPSBmaW5kX2Zyb3plbihuYW1lKTsKQEAgLTE3OTAsNyArMTgxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG5hbWUsICZmb2IpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZm9iICE9IE5VTEwpIHsKLSAgICAgICAgZnAgPSBfUHlfZm9wZW4ocGF0aG5hbWUsICJyIik7CisgICAgICAgIGZwID0gX1B5X2ZvcGVuX29iaihwYXRobmFtZSwgInIiKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuYyBiL1B5dGhvbi9pbXBvcnRkbC5jCmluZGV4IDBlYTk1NGMuLmI2MGYxYzcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5jCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5jCkBAIC03Nyw2ICs3Nyw4IEBACiAgICAgICAgIFB5T2JqZWN0ICptc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiZHluYW1pYyBtb2R1bGUgZG9lcyBub3QgZGVmaW5lICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0IGZ1bmN0aW9uIChQeUluaXRfJXMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0bmFtZSk7CisgICAgICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEltcG9ydEVycm9yKG1zZywgbmFtZSwgcGF0aCk7CiAgICAgICAgIFB5X0RFQ1JFRihtc2cpOwogICAgICAgICBnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGRsLmggYi9QeXRob24vaW1wb3J0ZGwuaAppbmRleCA2YjljZjc1Li42YTUxYTkxIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0ZGwuaAorKysgYi9QeXRob24vaW1wb3J0ZGwuaApAQCAtMTgsMTMgKzE4LDggQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiB0eXBlZGVmIEZBUlBST0MgZGxfZnVuY3B0cjsKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8b3MyZGVmLmg+Ci10eXBlZGVmIGludCAoKiBBUElFTlRSWSBkbF9mdW5jcHRyKSgpOwotI2Vsc2UKIHR5cGVkZWYgdm9pZCAoKmRsX2Z1bmNwdHIpKHZvaWQpOwogI2VuZGlmCi0jZW5kaWYKIAogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRsaWIuaCBiL1B5dGhvbi9pbXBvcnRsaWIuaAppbmRleCBjYjZhZmM1Li5mY2QyMjRmIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0bGliLmgKKysrIGIvUHl0aG9uL2ltcG9ydGxpYi5oCkBAIC0xLDM5NyArMSwzMzYgQEAKIC8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLwotdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7Ci0gICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsCi0gICAgMCw2NCwwLDAsMCwxMTUsMjA2LDMsMCwwLDEwMCwwLDAsOTAsMCwwLAotICAgIDEwMCwxMzEsMCw5MCwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCitjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwxODIsNCwwLDAsMTAwLDAsMCw5MCwwLDAsCisgICAgMTAwLDE1NywwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKICAgICAyLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsMywwLDEwMCw4LAogICAgIDAsMTAwLDksMCwxMzIsMCwwLDkwLDQsMCwxMDAsMTAsMCwxMDAsMTEsMCwKICAgICAxMzIsMCwwLDkwLDUsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLAogICAgIDYsMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTYsCiAgICAgMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTgsMCwxMDAsMTksMCwKLSAgICAxMzIsMCwwLDkwLDksMCwxMDAsMjAsMCwxMDAsMjEsMCwxMDAsMjIsMCwxMzIsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDIzLDAsMTAwLDI0LDAsMTMyLDAsMCw5MCwxMSwKLSAgICAwLDEwMSwxMiwwLDEwMSwxMSwwLDEwNiwxMywwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDE1LDAsMTA1LDAsMCw5MCwKLSAgICAxNiwwLDEwNSwwLDAsOTAsMTcsMCw3MSwxMDAsMjcsMCwxMDAsMjgsMCwxMzIsCi0gICAgMCwwLDEwMCwyOCwwLDEwMSwxOCwwLDEzMSwzLDAsOTAsMTksMCw3MSwxMDAsCi0gICAgMjksMCwxMDAsMzAsMCwxMzIsMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMjAsCi0gICAgMCw3MSwxMDAsMzEsMCwxMDAsMzIsMCwxMzIsMCwwLDEwMCwzMiwwLDEzMSwyLAotICAgIDAsOTAsMjEsMCwxMDAsMzMsMCwxMDAsMzQsMCwxMzIsMCwwLDkwLDIyLDAsCi0gICAgMTAwLDM1LDAsMTAwLDM2LDAsMTMyLDAsMCw5MCwyMywwLDEwMCwzNywwLDEwMCwKLSAgICAzOCwwLDEzMiwwLDAsOTAsMjQsMCwxMDAsMzksMCwxMDEsMjUsMCwxMDAsNDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0MSwwLDYyLDY2LDEwMSwyNSwwLDEwMCw0MiwwLDEzMSwKLSAgICAxLDAsMTAwLDQzLDAsNjIsNjYsOTAsMjYsMCwxMDEsMjcsMCwxMDAsNDQsMCwKLSAgICAxMDAsNDUsMCwxMzIsMCwwLDEwMSwyOCwwLDEwMCw0NiwwLDEwMCw0NywwLDEwMCwKLSAgICA0OCwwLDEzMSwzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDkwLDI5LDAsMTAwLAotICAgIDQ5LDAsOTAsMzAsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDMxLDAsMTAwLDUxLAotICAgIDAsMTAzLDEsMCw5MCwzMiwwLDEwMCw1MiwwLDEwMywxLDAsOTAsMzMsMCwKLSAgICAxMDAsMTMwLDAsMTAwLDUzLDAsMTAwLDU0LDAsMTMyLDEsMCw5MCwzNSwwLDEwMCwKLSAgICA1NSwwLDEwMCw1NiwwLDEzMiwwLDAsOTAsMzYsMCwxMDAsNTcsMCwxMDAsNTgsCi0gICAgMCwxMzIsMCwwLDkwLDM3LDAsMTAwLDU5LDAsMTAwLDYwLDAsMTAwLDYxLDAsCi0gICAgMTAwLDYyLDAsMTMyLDAsMSw5MCwzOCwwLDEwMCw2MywwLDEwMCw2NCwwLDEzMiwKLSAgICAwLDAsOTAsMzksMCwxMDAsNjUsMCwxMDAsNjYsMCwxMzIsMCwwLDkwLDQwLAotICAgIDAsMTAwLDY3LDAsMTAwLDY4LDAsMTMyLDAsMCw5MCw0MSwwLDEwMCw2OSwwLAotICAgIDEwMCw3MCwwLDEzMiwwLDAsOTAsNDIsMCwxMDAsNzEsMCwxMDAsNzIsMCwxMzIsCi0gICAgMCwwLDkwLDQzLDAsMTAwLDczLDAsMTAwLDc0LDAsMTMyLDAsMCw5MCw0NCwKLSAgICAwLDEwMCw3NSwwLDEwMCw3NiwwLDEzMiwwLDAsOTAsNDUsMCw3MSwxMDAsNzcsCi0gICAgMCwxMDAsNzgsMCwxMzIsMCwwLDEwMCw3OCwwLDEzMSwyLDAsOTAsNDYsMCwKLSAgICA3MSwxMDAsNzksMCwxMDAsODAsMCwxMzIsMCwwLDEwMCw4MCwwLDEzMSwyLDAsCi0gICAgOTAsNDcsMCw3MSwxMDAsODEsMCwxMDAsODIsMCwxMzIsMCwwLDEwMCw4MiwwLAotICAgIDEzMSwyLDAsOTAsNDgsMCw3MSwxMDAsODMsMCwxMDAsODQsMCwxMzIsMCwwLAotICAgIDEwMCw4NCwwLDEzMSwyLDAsOTAsNDksMCw3MSwxMDAsODUsMCwxMDAsODYsMCwKLSAgICAxMzIsMCwwLDEwMCw4NiwwLDEwMSw0OSwwLDEzMSwzLDAsOTAsNTAsMCw3MSwKLSAgICAxMDAsODcsMCwxMDAsODgsMCwxMzIsMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsCi0gICAgNTEsMCw3MSwxMDAsODksMCwxMDAsOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEwMSwKLSAgICA1MSwwLDEwMSw1MCwwLDEzMSw0LDAsOTAsNTIsMCw3MSwxMDAsOTEsMCwxMDAsCi0gICAgOTIsMCwxMzIsMCwwLDEwMCw5MiwwLDEwMSw1MSwwLDEwMSw0OSwwLDEzMSw0LAotICAgIDAsOTAsNTMsMCwxMDMsMCwwLDkwLDU0LDAsNzEsMTAwLDkzLDAsMTAwLDk0LAotICAgIDAsMTMyLDAsMCwxMDAsOTQsMCwxMzEsMiwwLDkwLDU1LDAsNzEsMTAwLDk1LAotICAgIDAsMTAwLDk2LDAsMTMyLDAsMCwxMDAsOTYsMCwxMzEsMiwwLDkwLDU2LDAsCi0gICAgNzEsMTAwLDk3LDAsMTAwLDk4LDAsMTMyLDAsMCwxMDAsOTgsMCwxMzEsMiwwLAotICAgIDkwLDU3LDAsNzEsMTAwLDk5LDAsMTAwLDEwMCwwLDEzMiwwLDAsMTAwLDEwMCwwLAotICAgIDEzMSwyLDAsOTAsNTgsMCw3MSwxMDAsMTAxLDAsMTAwLDEwMiwwLDEzMiwwLDAsCi0gICAgMTAwLDEwMiwwLDEzMSwyLDAsOTAsNTksMCw3MSwxMDAsMTAzLDAsMTAwLDEwNCwwLAotICAgIDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsNjAsMCwxMDAsMTA1LDAsMTAwLAotICAgIDEwNiwwLDEzMiwwLDAsOTAsNjEsMCwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLAotICAgIDAsOTAsNjIsMCwxMDAsMTA5LDAsMTAwLDExMCwwLDEzMiwwLDAsOTAsNjMsMCwKLSAgICAxMDAsMTExLDAsOTAsNjQsMCwxMDAsMTEyLDAsMTAwLDExMywwLDEzMiwwLDAsOTAsCi0gICAgNjUsMCwxMDAsMTE0LDAsMTAwLDExNSwwLDEzMiwwLDAsOTAsNjYsMCwxMDAsMTMwLAotICAgIDAsMTAwLDQ2LDAsMTAwLDExNiwwLDEwMCwxMTcsMCwxMzIsMiwwLDkwLDY3LDAsCi0gICAgMTAwLDExOCwwLDEwMCwxMTksMCwxMzIsMCwwLDkwLDY4LDAsMTAwLDEyMCwwLDEwMCwKLSAgICAxMjEsMCwxMzIsMCwwLDkwLDY5LDAsMTAwLDEyMiwwLDEwMCwxMjMsMCwxMzIsMCwKLSAgICAwLDkwLDcwLDAsMTAwLDEzMCwwLDEwMCwxMzAsMCwxMDIsMCwwLDEwMCw0NiwwLAotICAgIDEwMCwxMjQsMCwxMDAsMTI1LDAsMTMyLDQsMCw5MCw3MSwwLDEwMCwxMjYsMCwxMDAsCi0gICAgMTI3LDAsMTMyLDAsMCw5MCw3MiwwLDEwMCwxMjgsMCwxMDAsMTI5LDAsMTMyLDAsCi0gICAgMCw5MCw3MywwLDEwMCwxMzAsMCw4Myw0MCwxMzIsMCwwLDAsMTE3LDgzLDEsCi0gICAgMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LAotICAgIDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLDExNiwxMTEsMzIsOTgsMTAxLAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLAotICAgIDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNyw5OSwxMDQsMTAsMTE2LDEwNCwKLSAgICA5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsMTEwLDExNiwxMTEsMzIsODAsCi0gICAgMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwxMTcsOTksMTA0LDMyLDEwNSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCi0gICAgMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE1LDExMiwxMDEsOTksCi0gICAgMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsCi0gICAgMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDExMSwKLSAgICAxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwxMDcsNDYsMzIsNzksMTEwLAotICAgIDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE3LAotICAgIDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLDMyLDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMCwxMCwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsNiwwLAotICAgIDAsMCw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDExNyw2LDAsMCwwLDEwMCw5NywxMTQsCi0gICAgMTE5LDEwNSwxMTAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsCi0gICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw4MywwLDAsMCwxMTUsMTMsMCwwLDAsMTAwLDEsCi0gICAgMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw1MywwLDAsMCw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsMTAxLAotICAgIDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLDAsMCw4MCwKLSAgICA4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MCwyLDAsMCwwLAotICAgIDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDcsMCwwLDAsMTAxLDExMCwxMTgsCi0gICAgMTA1LDExNCwxMTEsMTEwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLAotICAgIDk1LDk5LDk3LDExNSwxMDEsMzQsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzNywwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsCi0gICAgMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw4MywwLDAsMCwxMTUsCi0gICAgNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUzLDAsCi0gICAgMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LDEwNCwxMDEsOTksCi0gICAgMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLAotICAgIDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsCi0gICAgMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDM4LDAsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsMiw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LAotICAgIDExNyw4LDAsMCwwLDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwxMTcsMTAsMCwKLSAgICAwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDY3LDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLAotICAgIDg2LDY5LDk1LDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDQwLDEsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsCi0gICAgMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywKLSAgICAxMTUsMTAxLDMyLDAsMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LAotICAgIDQsMTIsMywxMTcsMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTA4LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwwLDAsMTAzLDAsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsCi0gICAgNjQsMTMxLDEsMCwxLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwyLAotICAgIDAsNjMsMTAwLDEsMCw2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLAotICAgIDEyNCwwLDAsMTAwLDMsMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsCi0gICAgMSwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsNCwwLDYzLDEwMCwxLDAsNjQsCi0gICAgMTMxLDEsMCwxLDExNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDExMSwwLDAsMCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiwKLSAgICA5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwKLSAgICAzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywKLSAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwzOSwxMTUsMzIsMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTA1LDI1NSwwLDAsMCwxMDUsOCwwLDAsCi0gICAgMCwxMDUsMTYsMCwwLDAsMTA1LDI0LDAsMCwwLDQwLDMsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwKLSAgICAxMDEsMTEwLDEwMCwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5NywxMTQsMTE0LDk3LAotICAgIDEyMSw0MCwyLDAsMCwwLDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsCi0gICAgMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDQ1LDAsMCwwLDExNSwxNCwwLDAsMCwwLDYsMTIsMSw2LAotICAgIDEsMTcsMSwyMSwxLDIxLDEsMjEsMSwxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgOTUsMTA4LDExMSwxMTAsMTAzLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwKLSAgICAwLDAsMTAwLDEsMCwyNSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsCi0gICAgMiwwLDI1LDEwMCwzLDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLDEyNCwwLAotICAgIDAsMTAwLDQsMCwyNSwxMDAsNSwwLDYyLDc5LDEyNSwxLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDEwMCw2LDAsMjUsMTAwLDcsMCw2Miw3OSwxMjUsMSwwLDEyNCwKLSAgICAxLDAsODMsNDAsOCwwLDAsMCwxMTcsMTE1LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLAotICAgIDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwKLSAgICAzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDg4LDg4LDg4LDMyLDg0LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwKLSAgICAxMTcsMTEwLDExNiwxMDUsMTA4LDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMzksMTE1LDMyLAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsMTA1LDgsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTA1LDE2LDAsMCwwLDEwNSwzLDAsMCwwLDEwNSwyNCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNywxLDAsMCwwLAotICAgIDEyMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsCi0gICAgMCwwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNjEsMCwwLDAsMTE1LDEwLDAsCi0gICAgMCwwLDAsNiwxMCwxLDE4LDEsMTgsMSwxOCwxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsOTksMCwwLDAsMCwwLDAsMCwKLSAgICAwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDEwMywwLDAsMTI1LDEsMCwxMjAsNzEsMCwxMjQsMCwwLDY4LDkzLAotICAgIDYzLDAsMTI1LDIsMCwxMjQsMiwwLDExNSwzMSwwLDExMywxMywwLDExMCwwLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLAotICAgIDAsMTAwLDQsMCwyNSwxMTYsMSwwLDEwNyw3LDAsMTE0LDEzLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDExNiwyLDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywKLSAgICAwLDg3LDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwMCwzLDAsMTAwLDUsCi0gICAgMCwxMzMsMiwwLDI1LDEzMSwxLDAsODMsNDAsNiwwLDAsMCwxMTcsMzEsCi0gICAgMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNiwxMTEsMTA1LDExMCw0MCwKLSAgICA0MSw0NiwxMDUsMSwwLDAsMCwxMTcsMCwwLDAsMCw3OCwxMDUsMjU1LDI1NSwKLSAgICAyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsCi0gICAgMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNywxNSwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNyw0LDAsMCwwLDEwNiwxMTEsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDksMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LAotICAgIDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTQsMTE2LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw3NCwwLDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCwyLDYsMSwxMywxLDYsMSw2LDEsMTMsMSwxNiwxLDIwLDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw4NSwwLDAsMCwxMjAsNDgsMCwxMTYsMCwwLDEyNCwKLSAgICAwLDAsMTMxLDEsMCw2OCw5MywyOCwwLDEyNSwxLDAsMTI0LDEsMCwxMTYsCi0gICAgMSwwLDEwNyw2LDAsMTE0LDEzLDAsMTI0LDEsMCwxMjUsMiwwLDgwLDExMywKLSAgICAxMywwLDExMywxMywwLDg3LDExNiwyLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwKLSAgICAzLDAsMTI0LDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMywwLDEyNSw0LAotICAgIDAsMTI1LDUsMCwxMjQsMywwLDEyNCw1LDAsMTAyLDIsMCw4Myw0MCwxLAotICAgIDAsMCwwLDExNywzMiwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0Niw0MCw0LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwxMDAsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDEwLDAsMCwwLAotICAgIDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDYsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDEsMCwwLDAsMTIwLDExNywzLAotICAgIDAsMCwwLDExNSwxMDEsMTEyLDExNyw1LDAsMCwwLDEwMiwxMTQsMTExLDExMCwxMTYsCi0gICAgMTE3LDEsMCwwLDAsOTUsMTE3LDQsMCwwLDAsMTE2LDk3LDEwNSwxMDgsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiw4NiwwLDAsMCwxMTUsCi0gICAgMTQsMCwwLDAsMCwyLDE5LDEsMTIsMSw2LDEsOCwyLDYsMSwKLSAgICAyNCwxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw2MSwwLDAsMCwxMjEsMTksMCwxMTYsCi0gICAgMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDEwMCwKLSAgICAyLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiw0LDAsMTAwLDEsCi0gICAgMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDAsMywwLDAsMCwxMTcsNDksCi0gICAgMCwwLDAsODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLAorICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEzMiwwLDAsOTAsCisgICAgMTAsMCwxMDAsMjIsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMSwwLDkwLDExLAorICAgIDAsMTAwLDI1LDAsMTAwLDI2LDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyNywwLAorICAgIDEwMCwyOCwwLDEzMiwwLDAsOTAsMTMsMCwxMDEsMTQsMCwxMDEsMTIsMCwxMDYsCisgICAgMTUsMCwxMzEsMSwwLDkwLDE2LDAsMTA1LDAsMCw5MCwxNywwLDEwNSwwLAorICAgIDAsOTAsMTgsMCw3MSwxMDAsMjksMCwxMDAsMzAsMCwxMzIsMCwwLDEwMCwzMCwKKyAgICAwLDEwMSwxOSwwLDEzMSwzLDAsOTAsMjAsMCw3MSwxMDAsMzEsMCwxMDAsMzIsCisgICAgMCwxMzIsMCwwLDEwMCwzMiwwLDEzMSwyLDAsOTAsMjEsMCw3MSwxMDAsMzMsCisgICAgMCwxMDAsMzQsMCwxMzIsMCwwLDEwMCwzNCwwLDEzMSwyLDAsOTAsMjIsMCwKKyAgICA3MSwxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDEwMCwzNiwwLDEzMSwyLDAsCisgICAgOTAsMjMsMCwxMDAsMzcsMCwxMDAsMzgsMCwxMzIsMCwwLDkwLDI0LDAsMTAwLAorICAgIDM5LDAsMTAwLDQwLDAsMTMyLDAsMCw5MCwyNSwwLDEwMCw0MSwwLDEwMCw0MiwKKyAgICAwLDEzMiwwLDAsOTAsMjYsMCwxMDAsNDMsMCwxMDYsMjcsMCwxMDAsNDQsMCwKKyAgICAxMDAsNDUsMCwxMzEsMiwwLDEwMCw0NiwwLDIzLDkwLDI4LDAsMTAxLDI5LDAsCisgICAgMTA2LDMwLDAsMTAxLDI4LDAsMTAwLDQ1LDAsMTMxLDIsMCw5MCwzMSwwLDEwMCwKKyAgICA0NywwLDkwLDMyLDAsMTAwLDQ4LDAsMTAzLDEsMCw5MCwzMywwLDEwMCw0OSwKKyAgICAwLDEwMywxLDAsOTAsMzQsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDM1LDAsCisgICAgMTAwLDUxLDAsMTAwLDUyLDAsMTAwLDUzLDAsMTMyLDEsMCw5MCwzNiwwLDEwMCwKKyAgICA1NCwwLDEwMCw1NSwwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTYsMCwxMDAsNTcsCisgICAgMCwxMzIsMCwwLDkwLDM4LDAsMTAwLDU4LDAsMTAwLDU5LDAsMTMyLDAsMCwKKyAgICA5MCwzOSwwLDEwMCw2MCwwLDEwMCw2MSwwLDEwMCw2MiwwLDEwMCw2MywwLDEzMiwKKyAgICAwLDEsOTAsNDAsMCwxMDAsNjQsMCwxMDAsNjUsMCwxMzIsMCwwLDkwLDQxLAorICAgIDAsMTAwLDY2LDAsMTAwLDY3LDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw2OCwwLAorICAgIDEwMCw2OSwwLDEzMiwwLDAsOTAsNDMsMCwxMDAsNzAsMCwxMDAsNzEsMCwxMzIsCisgICAgMCwwLDkwLDQ0LDAsMTAwLDcyLDAsMTAwLDczLDAsMTMyLDAsMCw5MCw0NSwKKyAgICAwLDEwMCw1MSwwLDEwMCw1MSwwLDEwMCw1MSwwLDEwMCw3NCwwLDEwMCw3NSwwLAorICAgIDEzMiwzLDAsOTAsNDYsMCwxMDAsNTEsMCwxMDAsNTEsMCwxMDAsNTEsMCwxMDAsCisgICAgNzYsMCwxMDAsNzcsMCwxMzIsMywwLDkwLDQ3LDAsMTAwLDc4LDAsMTAwLDc4LAorICAgIDAsMTAwLDc5LDAsMTAwLDgwLDAsMTMyLDIsMCw5MCw0OCwwLDEwMCw4MSwwLAorICAgIDEwMCw4MiwwLDEzMiwwLDAsOTAsNDksMCwxMDAsODMsMCwxMDAsODQsMCwxMzIsCisgICAgMCwwLDkwLDUwLDAsNzEsMTAwLDg1LDAsMTAwLDg2LDAsMTMyLDAsMCwxMDAsCisgICAgODYsMCwxMzEsMiwwLDkwLDUxLDAsNzEsMTAwLDg3LDAsMTAwLDg4LDAsMTMyLAorICAgIDAsMCwxMDAsODgsMCwxMzEsMiwwLDkwLDUyLDAsMTAwLDg5LDAsMTAwLDUxLAorICAgIDAsMTAwLDkwLDAsMTAwLDUxLDAsMTAwLDkxLDAsMTAwLDkyLDAsMTMyLDAsMiwKKyAgICA5MCw1MywwLDEwMSw1NCwwLDEzMSwwLDAsOTAsNTUsMCwxMDAsNTEsMCwxMDAsCisgICAgOTMsMCwxMDAsNTEsMCwxMDAsOTQsMCwxMDEsNTUsMCwxMDAsOTUsMCwxMDAsOTYsCisgICAgMCwxMzIsMSwyLDkwLDU2LDAsMTAwLDUxLDAsMTAwLDUxLDAsMTAwLDk3LDAsCisgICAgMTAwLDk4LDAsMTMyLDIsMCw5MCw1NywwLDcxLDEwMCw5OSwwLDEwMCwxMDAsMCwKKyAgICAxMzIsMCwwLDEwMCwxMDAsMCwxMzEsMiwwLDkwLDU4LDAsNzEsMTAwLDEwMSwwLAorICAgIDEwMCwxMDIsMCwxMzIsMCwwLDEwMCwxMDIsMCwxMzEsMiwwLDkwLDU5LDAsNzEsCisgICAgMTAwLDEwMywwLDEwMCwxMDQsMCwxMzIsMCwwLDEwMCwxMDQsMCwxMzEsMiwwLDkwLAorICAgIDYwLDAsNzEsMTAwLDEwNSwwLDEwMCwxMDYsMCwxMzIsMCwwLDEwMCwxMDYsMCwxMzEsCisgICAgMiwwLDkwLDYxLDAsNzEsMTAwLDEwNywwLDEwMCwxMDgsMCwxMzIsMCwwLDEwMCwKKyAgICAxMDgsMCwxMzEsMiwwLDkwLDYyLDAsNzEsMTAwLDEwOSwwLDEwMCwxMTAsMCwxMzIsCisgICAgMCwwLDEwMCwxMTAsMCwxMDEsNjIsMCwxMzEsMywwLDkwLDYzLDAsNzEsMTAwLAorICAgIDExMSwwLDEwMCwxMTIsMCwxMzIsMCwwLDEwMCwxMTIsMCwxMzEsMiwwLDkwLDY0LAorICAgIDAsNzEsMTAwLDExMywwLDEwMCwxMTQsMCwxMzIsMCwwLDEwMCwxMTQsMCwxMDEsNjQsCisgICAgMCwxMDEsNjMsMCwxMzEsNCwwLDkwLDY1LDAsNzEsMTAwLDExNSwwLDEwMCwxMTYsCisgICAgMCwxMzIsMCwwLDEwMCwxMTYsMCwxMDEsNjQsMCwxMDEsNjIsMCwxMzEsNCwwLAorICAgIDkwLDY2LDAsMTAzLDAsMCw5MCw2NywwLDcxLDEwMCwxMTcsMCwxMDAsMTE4LDAsCisgICAgMTMyLDAsMCwxMDAsMTE4LDAsMTMxLDIsMCw5MCw2OCwwLDcxLDEwMCwxMTksMCwKKyAgICAxMDAsMTIwLDAsMTMyLDAsMCwxMDAsMTIwLDAsMTMxLDIsMCw5MCw2OSwwLDcxLAorICAgIDEwMCwxMjEsMCwxMDAsMTIyLDAsMTMyLDAsMCwxMDAsMTIyLDAsMTMxLDIsMCw5MCwKKyAgICA3MCwwLDcxLDEwMCwxMjMsMCwxMDAsMTI0LDAsMTMyLDAsMCwxMDAsMTI0LDAsMTMxLAorICAgIDIsMCw5MCw3MSwwLDcxLDEwMCwxMjUsMCwxMDAsMTI2LDAsMTMyLDAsMCwxMDAsCisgICAgMTI2LDAsMTMxLDIsMCw5MCw3MiwwLDcxLDEwMCwxMjcsMCwxMDAsMTI4LDAsMTMyLAorICAgIDAsMCwxMDAsMTI4LDAsMTMxLDIsMCw5MCw3MywwLDEwMCwxMjksMCwxMDAsMTMwLAorICAgIDAsMTMyLDAsMCw5MCw3NCwwLDEwMCw1MSwwLDEwMCwxMzEsMCwxMDAsMTMyLDAsCisgICAgMTMyLDEsMCw5MCw3NSwwLDEwMCwxMzMsMCwxMDAsMTM0LDAsMTMyLDAsMCw5MCwKKyAgICA3NiwwLDEwMCwxMzUsMCw5MCw3NywwLDEwMSw3NywwLDEwMCwxMzYsMCwyMyw5MCwKKyAgICA3OCwwLDEwMCwxMzcsMCwxMDAsMTM4LDAsMTMyLDAsMCw5MCw3OSwwLDEwMCwxMzksCisgICAgMCwxMDAsMTQwLDAsMTMyLDAsMCw5MCw4MCwwLDEwMCw1MSwwLDEwMCw3OCwwLAorICAgIDEwMCwxNDEsMCwxMDAsMTQyLDAsMTMyLDIsMCw5MCw4MSwwLDEwMCwxNDMsMCwxMDAsCisgICAgMTQ0LDAsMTMyLDAsMCw5MCw4MiwwLDEwMCwxNDUsMCwxMDAsMTQ2LDAsMTMyLDAsCisgICAgMCw5MCw4MywwLDEwMCwxNDcsMCwxMDAsMTQ4LDAsMTMyLDAsMCw5MCw4NCwwLAorICAgIDEwMCw1MSwwLDEwMCw1MSwwLDEwMiwwLDAsMTAwLDc4LDAsMTAwLDE0OSwwLDEwMCwKKyAgICAxNTAsMCwxMzIsNCwwLDkwLDg1LDAsMTAwLDE1MSwwLDEwMCwxNTIsMCwxMzIsMCwKKyAgICAwLDkwLDg2LDAsMTAwLDE1MywwLDEwMCwxNTQsMCwxMzIsMCwwLDkwLDg3LDAsCisgICAgMTAwLDE1NSwwLDEwMCwxNTYsMCwxMzIsMCwwLDkwLDg4LDAsMTAwLDUxLDAsODMsCisgICAgNDEsMTU4LDk3LDgzLDEsMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDQ2LDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLAorICAgIDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLAorICAgIDk4LDEwMSwxMDEsMTEwLDMyLDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNywKKyAgICA5OSwxMDQsMTAsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsCisgICAgMTAxLDMyLDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsCisgICAgMTEwLDExNiwxMTEsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwKKyAgICAxMTcsOTksMTA0LDMyLDEwNSwxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDUsMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsCisgICAgMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE1LDMyLDk3LDExMCwxMDAsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwKKyAgICAzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwKKyAgICAxMDcsNDYsMzIsNzksMTEwLDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTIsMTE3LDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLAorICAgIDMyLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwyMTgsMywxMTksMTA1LDExMCwyMTgsCisgICAgNiw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDIxOCw2LDEwMCw5NywxMTQsMTE5LDEwNSwxMTAsOTksCisgICAgMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKKyAgICAyLDAsMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzIsMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsMCwxMDAsMiwwLAorICAgIDEzMiwwLDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQxLDQsNzgsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw4MywwLAorICAgIDAsMCwxMTUsMTMsMCwwLDAsMTAwLDEsMCwxMTYsMCwwLDEwNiwxLDAsCisgICAgMTA3LDYsMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LAorICAgIDEwMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LAorICAgIDExMCwxMTUsMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLAorICAgIDAsMCw4MCw4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MSwyLAorICAgIDIxOCwzLDk1LDExMSwxMTUsOTAsNywxMDEsMTEwLDExOCwxMDUsMTE0LDExMSwxMTAsMTY5LDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMjUwLDI5LDYwLDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCisgICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDIxOCwxMSw5NSwxMTQsMTAxLDEwOCw5NywKKyAgICAxMjAsOTUsOTksOTcsMTE1LDEwMSwzMCwwLDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDIsMTIyLDM3LDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSwKKyAgICA5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLAorICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSw0LDAsCisgICAgMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LAorICAgIDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKKyAgICAzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLAorICAgIDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNiwwLDAsMCwzNCwwLAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsNDEsNCwyMTgsMywxMTUsMTIxLDExNSwKKyAgICAyMTgsOCwxMTIsMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMjE4LDEwLDExNSwxMTYsOTcsMTE0LAorICAgIDExNiwxMTUsMTE5LDEwNSwxMTYsMTA0LDIxOCwyNyw5NSw2Nyw2NSw4Myw2OSw5NSw3Myw3OCwKKyAgICA4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCw3MCw3OSwKKyAgICA4Miw3Nyw4Myw0MSwxLDExNCw2LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDksOTcsMTA3LDEwMSwKKyAgICA5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwyOCwwLDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDEsMTgsMSwxNSw0LDEyLDMsMTE0LDExLDAsMCwKKyAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDEwMCwxLDAsNjQsMTA2LDEsMCwxMDAsMiwwLDEwMCwzLAorICAgIDAsMTMxLDIsMCw4Myw0MSw0LDEyMiw0Miw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwKKyAgICAzMiw5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLAorICAgIDExNCwzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSwKKyAgICA5NywxMTAsNDYsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCwyMzMsNCwKKyAgICAwLDAsMCwyMTgsNiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0MSwyLDIxOCwzLDEwNSwKKyAgICAxMTAsMTE2LDIxOCw4LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsMjE4LDEsCisgICAgMTIwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCw3LDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsNDAsMCwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwyLDExNCwxNywwLDAsMCw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwKKyAgICAyLDAsODMsNDEsMiwxMjIsNDcsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsNTIsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsCisgICAgNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLDMyLDk3LDExMCwzMiwxMDUsMTEwLAorICAgIDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTE0LDEzLDAsMCwwLDQxLDIsMTE0LDE0LDAsCisgICAgMCwwLDIxOCwxMCwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsCisgICAgOTAsOSwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDcsOTUsMTE0LDk1LDEwOCwKKyAgICAxMTEsMTEwLDEwMyw0NSwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDE5LAorICAgIDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDMsMCwwLDAsNzEsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwxMjQsMCwwLDY4LAorICAgIDEzMSwxLDAsMTMxLDEsMCw4Myw0MSwzLDEyMiwzMSw4MiwxMDEsMTEyLDEwOCw5NywKKyAgICA5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLDQxLDQ2LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDQsMCwwLDAsODMsMCwwLDAsMTE1LAorICAgIDM3LDAsMCwwLDEwMywwLDAsMTI0LDAsMCw5MywyNywwLDEyNSwxLDAsCisgICAgMTI0LDEsMCwxMTQsNiwwLDEyNCwxLDAsMTA2LDAsMCwxMTYsMSwwLDEzMSwKKyAgICAxLDAsMTQ1LDIsMCwxMTMsNiwwLDgzLDExNCw0LDAsMCwwLDQxLDIsCisgICAgMjE4LDYsMTE0LDExNSwxMTYsMTE0LDEwNSwxMTIsMjE4LDE1LDExMiw5NywxMTYsMTA0LDk1LDExNSwKKyAgICAxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsNDEsMiwyMTgsMiw0Niw0OCwyMTgsCisgICAgNCwxMTIsOTcsMTE0LDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyNTAsMTAsNjAsMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLAorICAgIDUyLDAsMCwwLDExNSwyLDAsMCwwLDksMSwxMjIsMzAsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKKyAgICA0Niw2MCwxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNDEsMiwyMTgsOCwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwyMTgsNCwxMDYsMTExLDEwNSwxMTAsNDEsMSwyMTgsCisgICAgMTAsMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsNTAsMCwwLDAsMTE1LDQsMCwwLDAsMCwKKyAgICAyLDE1LDEsMTE0LDI4LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNCwwLAorICAgIDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLAorICAgIDAsMTE0LDUyLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwzLDAsMTMxLDEsMCwKKyAgICA5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMjQsCisgICAgMywwLDEwMiwyLDAsODMsMTIwLDY5LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsNjgsOTMsNTUsMCwxMjUsNCwwLDEyNCw0LDAsMTE2LDEsMCwxMDcsCisgICAgNiwwLDExNCw2NSwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsNCwwLDEwMCwyLAorICAgIDAsMTAwLDEsMCwxMzEsMSwxLDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsCisgICAgMTI0LDEsMCwxMjQsMywwLDEwMiwyLDAsODMsMTEzLDY1LDAsODcsMTAwLDMsCisgICAgMCwxMjQsMCwwLDEwMiwyLDAsODMsNDEsNCwxMjIsMzIsODIsMTAxLDExMiwxMDgsCisgICAgOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiwKKyAgICA5NywxMTYsMTA0LDQ2LDExNSwxMTIsMTA4LDEwNSwxMTYsNDAsNDEsNDYsMjMzLDEsMCwwLAorICAgIDAsOTAsOCwxMDksOTcsMTIwLDExNSwxMTIsMTA4LDEwNSwxMTYsMjE4LDAsNDEsNiwyMTgsCisgICAgMywxMDgsMTAxLDExMCwxMTQsMjEsMCwwLDAsMjE4LDEwLDExNCwxMTIsOTcsMTE0LDExNiwKKyAgICAxMDUsMTE2LDEwNSwxMTEsMTEwLDExNCwyNSwwLDAsMCwyMTgsOCwxMTQsMTAxLDExOCwxMDEsCisgICAgMTE0LDExNSwxMDEsMTAwLDIxOCw2LDExNCwxMTUsMTEyLDEwOCwxMDUsMTE2LDQxLDUsMjE4LDQsCisgICAgMTEyLDk3LDExNiwxMDQsOTAsNSwxMDIsMTE0LDExMSwxMTAsMTE2LDIxOCwxLDk1LDIxOCw0LAorICAgIDExNiw5NywxMDUsMTA4LDExNCwxNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTE1LDExMiwxMDgsMTA1LDExNiw1NiwwLDAsMCwxMTUsMTYsMCwwLDAsMCwyLAorICAgIDE4LDEsMjQsMSwxMCwxLDE5LDEsMTIsMSwyNywxLDE0LDEsMTE0LDM4LAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSwxMjIsMTI2LDgzLDExNiwKKyAgICA5NywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsNzcsOTcsMTAwLDEwMSwzMiw5NywzMiwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LAorICAgIDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDksOTcsCisgICAgMTA3LDEwMSwzMiwxMDUsMTE2LDMyLDEwMSw5NywxMTUsMTA1LDEwMSwxMTQsMzIsMTE2LDExMSwzMiwKKyAgICAxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTAsMzIsMTAxLDEyMCwxMTIsMTAxLAorICAgIDExNCwxMDUsMTA5LDEwMSwxMTAsMTE2LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLAorICAgIDQ2LDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTE1LDExNiw5NywxMTYsMzIsMTE0LDEwMSwxMTUsCisgICAgMTE3LDEwOCwxMTYsMTE1LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDQxLDIsMTE0LDMsCisgICAgMCwwLDAsOTAsNCwxMTUsMTE2LDk3LDExNiw0MSwxLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsNjgsMCwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCw3LDExNCwzOSwwLDAsMCw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNTgsMCwwLDAsMTIxLDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLAorICAgIDAsMTI1LDIsMCw4NywxMTAsMjIsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LAorICAgIDQwLDAsMSwxLDEsMTAwLDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLAorICAgIDAsMTA2LDIsMCwxMDAsMiwwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MSwKKyAgICAzLDEyMiw0OSw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsCiAgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKICAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsCi0gICAgMTIxLDExMiwxMDEsNDYsMTA1LDAsMjQwLDAsMCw3MCw0MCw1LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsCi0gICAgMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwKLSAgICAwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwKLSAgICAxMDAsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDExNSwxMTYsCi0gICAgOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LAotICAgIDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsOTgsMCwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMiwzLDEsMTksMSwxMywxLDksMSwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDAsMiwwLDAsMCwKLSAgICAxMTcsMzEsMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICAzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDQ2LDEwNSwwLDEyOCwwLDAsNDAsMSwwLDAsMCwxMTcsMTgsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDEyMSwxMTIsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTIsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsCi0gICAgMTA4LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwxMTUsMjEsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwxMjQsMCwKLSAgICAwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MCwyLDAsMCwwLDExNywzMCwwLAotICAgIDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCw0NiwKLSAgICAxMDUsMCw2NCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5NSwKLSAgICAxMTEsMTE1LDExNyw2LDAsMCwwLDEwMywxMDEsMTE2LDk5LDExOSwxMDAsMTE3LDE4LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE0LDAsCi0gICAgMCwwLDExNSw2LDAsMCwwLDAsMiw2LDEsMTUsMSwxMTcsMTEsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMDUsMTgyLDEsCi0gICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTAwLDEsMCwxMDYsCi0gICAgMCwwLDEyNCwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsCi0gICAgMCwxMjUsMywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDExNiwyLDAsCi0gICAgMTA2LDQsMCwxMTYsMiwwLDEwNiw1LDAsNjYsMTE2LDIsMCwxMDYsNiwwLAotICAgIDY2LDEyNCwyLDAsMTAwLDIsMCw2NCwxMzEsMywwLDEyNSw0LDAsMTIxLDYwLAotICAgIDAsMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDMsMCwxMzEsMiwwLAotICAgIDE0MywyMCwwLDEyNSw1LDAsMTI0LDUsMCwxMDYsOSwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxLDg3LDEwMCw0LDAsODEsODgsMTE2LDIsMCwxMDYsMTAsMCwxMjQsCi0gICAgMywwLDEyNCwwLDAsMTMxLDIsMCwxLDg3LDExMCw1OSwwLDQsMTE2LDExLAotICAgIDAsMTA3LDEwLDAsMTE0LDE4NywwLDEsMSwxLDEyMSwxNywwLDExNiwyLDAsCi0gICAgMTA2LDEyLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLDE4LDAsNCwxMTYsCi0gICAgMTEsMCwxMDcsMTAsMCwxMTQsMTc5LDAsMSwxLDEsODksMTEwLDEsMCw4OCwKLSAgICAxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4Myw0MCw1LDAsMCwKLSAgICAwLDExNywxNjIsMCwwLDAsNjYsMTAxLDExNSwxMTYsNDUsMTAxLDEwMiwxMDIsMTExLDExNCwKLSAgICAxMTYsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTE5LDExNCwKLSAgICAxMDUsMTE2LDEwMSwzMiwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMzIsOTcsMTE2LDExMSwxMDksMTA1LDk5LDk3LDEwOCwxMDgsMTIxLDQ2LDEwLDMyLAotICAgIDMyLDMyLDMyLDY2LDEwMSwzMiwxMTIsMTE0LDEwMSwxMTIsOTcsMTE0LDEwMSwxMDAsMzIsMTE2LAotICAgIDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDk3LDMyLDcwLDEwNSwxMDgsMTAxLDY5LAotICAgIDEyMCwxMDUsMTE1LDExNiwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMDIsMzIsOTksMTExLAotICAgIDExMCw5OSwxMTcsMTE0LDExNCwxMDEsMTEwLDExNiwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsCi0gICAgMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDExNiwKLSAgICAxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsNDYsMTE3LDUsMCwwLDAsMTIzLDEyNSw0NiwKLSAgICAxMjMsMTI1LDEwNSwxODIsMSwwLDAsMTE3LDIsMCwwLDAsMTE5LDk4LDc4LDQwLAotICAgIDEzLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LAotICAgIDIsMCwwLDAsMTA1LDEwMCwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LAotICAgIDAsMCwwLDExMSwxMTIsMTAxLDExMCwxMTcsNiwwLDAsMCw3OSw5NSw2OSw4OCwKLSAgICA2Nyw3NiwxMTcsNywwLDAsMCw3OSw5NSw2Nyw4Miw2OSw2NSw4NCwxMTcsOCwKLSAgICAwLDAsMCw3OSw5NSw4Nyw4Miw3OSw3OCw3Niw4OSwxMTcsMywwLDAsMCwKLSAgICA5NSwxMDUsMTExLDExNyw2LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDczLDc5LDExNyw1LAotICAgIDAsMCwwLDExOSwxMTQsMTA1LDExNiwxMDEsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMTIsCi0gICAgMTA4LDk3LDk5LDEwMSwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDYsMCwwLDAsMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsNDAsNiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsCi0gICAgMTE2LDk3LDExNyw0LDAsMCwwLDEwOSwxMTEsMTAwLDEwMSwxMTcsOCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LDExMiwxMTcsMiwwLDAsMCwxMDIsMTAwLDExNywKLSAgICA0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LAotICAgIDk3LDExNiwxMTEsMTA5LDEwNSw5OSwxMjEsMCwwLDAsMTE1LDI2LDAsMCwwLDAsCisgICAgMTIxLDExMiwxMDEsNDYsNzAsMTA1LDAsMjQwLDAsMCw0MSwzLDExNCwzOSwwLDAsCisgICAgMCwyMTgsNyw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDcsMTE1LDExNiw5NSwxMDksCisgICAgMTExLDEwMCwxMDEsNDEsMywxMTQsMzUsMCwwLDAsMjE4LDQsMTA5LDExMSwxMDAsMTAxLAorICAgIDkwLDksMTE1LDExNiw5NywxMTYsOTUsMTA1LDExMCwxMDIsMTExLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxOCw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsNzgsMCwKKyAgICAwLDAsMTE1LDEwLDAsMCwwLDAsMiwzLDEsMTYsMSwxMywxLDksCisgICAgMSwxMTQsNDMsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCisgICAgMTE2LDAsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiwKKyAgICAzMSw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsNDYsCisgICAgMTA1LDAsMTI4LDAsMCw0MSwxLDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTIsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsCisgICAgODcsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNCw0NCwwLDAsMCwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwzNCwwLDAsMCwxMjQsMCwwLDExNSwyMSwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwwLDAsMTEwLDAsMCwxMTYsCisgICAgMiwwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDMwLAorICAgIDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMCwxMDUsMTE0LDQ2LDEwNSwwLAorICAgIDY0LDAsMCw0MSwzLDExNCwzLDAsMCwwLDIxOCw2LDEwMywxMDEsMTE2LDk5LAorICAgIDExOSwxMDAsMTE0LDQzLDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDkyLDAsMCwwLDExNSw2LAorICAgIDAsMCwwLDAsMiw2LDEsMTUsMSwxMTQsNDYsMCwwLDAsMTA1LDE4MiwKKyAgICAxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwKKyAgICAxNywwLDAsMCw2NywwLDAsMCwxMTUsMTkyLDAsMCwwLDEwMCwxLDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwKKyAgICAyLDAsMTI1LDMsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMTYsMiwKKyAgICAwLDEwNiw0LDAsMTE2LDIsMCwxMDYsNSwwLDY2LDExNiwyLDAsMTA2LDYsCisgICAgMCw2NiwxMjQsMiwwLDEwMCwyLDAsNjQsMTMxLDMsMCwxMjUsNCwwLDEyMSwKKyAgICA2MCwwLDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCwzLDAsMTMxLDIsCisgICAgMCwxNDMsMjAsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDksMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMSw4NywxMDAsNCwwLDgxLDg4LDExNiwyLDAsMTA2LDEwLDAsCisgICAgMTI0LDMsMCwxMjQsMCwwLDEzMSwyLDAsMSw4NywxMTAsNTksMCw0LDExNiwKKyAgICAxMSwwLDEwNywxMCwwLDExNCwxODcsMCwxLDEsMSwxMjEsMTcsMCwxMTYsMiwKKyAgICAwLDEwNiwxMiwwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwxOCwwLDQsCisgICAgMTE2LDExLDAsMTA3LDEwLDAsMTE0LDE3OSwwLDEsMSwxLDg5LDExMCwxLDAsCisgICAgODgsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsNDEsNSwxMjIsCisgICAgMTYyLDY2LDEwMSwxMTUsMTE2LDQ1LDEwMSwxMDIsMTAyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTcsMTEwLAorICAgIDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMzIsMTAwLAorICAgIDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNiwKKyAgICAxMTEsMTA5LDEwNSw5OSw5NywxMDgsMTA4LDEyMSw0NiwxMCwzMiwzMiwzMiwzMiw2NiwxMDEsCisgICAgMzIsMTEyLDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwKKyAgICAxMDAsMTA4LDEwMSwzMiw5NywzMiw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LAorICAgIDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTAyLDMyLDk5LDExMSwxMTAsOTksMTE3LDExNCwxMTQsCisgICAgMTAxLDExMCwxMTYsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsMTE2LAorICAgIDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwKKyAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwKKyAgICAxMDEsMTAwLDQ2LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSwxMDUsMTgyLDEsMCwwLDkwLAorICAgIDIsMTE5LDk4LDc4LDQxLDEzLDIxOCw2LDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMjE4LDIsCisgICAgMTA1LDEwMCwxMTQsMywwLDAsMCw5MCw0LDExMSwxMTIsMTAxLDExMCw5MCw2LDc5LAorICAgIDk1LDY5LDg4LDY3LDc2LDkwLDcsNzksOTUsNjcsODIsNjksNjUsODQsOTAsOCwKKyAgICA3OSw5NSw4Nyw4Miw3OSw3OCw3Niw4OSwyMTgsMyw5NSwxMDUsMTExLDIxOCw2LDcwLAorICAgIDEwNSwxMDgsMTAxLDczLDc5LDIxOCw1LDExOSwxMTQsMTA1LDExNiwxMDEsMjE4LDcsMTE0LDEwMSwKKyAgICAxMTIsMTA4LDk3LDk5LDEwMSwxMTQsNDAsMCwwLDAsOTAsNiwxMTcsMTEwLDEwOCwxMDUsCisgICAgMTEwLDEwNyw0MSw2LDExNCwzNSwwLDAsMCwyMTgsNCwxMDAsOTcsMTE2LDk3LDExNCwKKyAgICA0MiwwLDAsMCw5MCw4LDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDkwLDIsCisgICAgMTAyLDEwMCwyMTgsNCwxMDIsMTA1LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCisgICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDk5LDAsMCwwLDExNSwyNiwwLDAsMCwwLAogICAgIDUsMjQsMSw5LDEsMzMsMSwzLDMsMjEsMSwxOSwxLDIwLDEsMTMsCi0gICAgMSwzLDEsMTcsMSwxMywxLDUsMSwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTUsMCwwLDAsMTIwLDY5LDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ5LDAsMTI1LDIsMCwxMTYsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLDExNiwxLDAsCi0gICAgMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwKLSAgICAyLDAsMTMxLDMsMCwxLDExMywxOSwwLDExMywxOSwwLDg3LDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEsCi0gICAgMTAwLDUsMCw4Myw0MCw2LDAsMCwwLDExNyw0NywwLDAsMCw4MywxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDMyLDExNSwxMTcsOTgsMTE1LDExNiwxMDUsMTE2LDExNywxMTYsMTAxLDMyLAotICAgIDEwMiwxMTEsMTE0LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMTEsMTExLDEwOCwxMTUsNDYsMTE3LDExMiwKLSAgICAxMDAsOTcsMTE2LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsNzgsNDAsNSwwLDAsMCwxMTcsNywwLDAsCi0gICAgMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw3LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk3LDExNiwxMTYsMTE0LDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LDExNyw2LDAsCi0gICAgMCwwLDExNywxMTIsMTAwLDk3LDExNiwxMDEsNDAsMywwLDAsMCwxMTcsMywwLAotICAgIDAsMCwxMTAsMTAxLDExOSwxMTcsMywwLDAsMCwxMTEsMTA4LDEwMCwxMTcsNywwLAotICAgIDAsMCwxMTQsMTAxLDExMiwxMDgsOTcsOTksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsMTQzLAotICAgIDAsMCwwLDExNSw4LDAsMCwwLDAsMiwyNSwxLDE1LDEsMzIsMSwKLSAgICAxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxNiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLDEsMCwxMjQsMCwwLAotICAgIDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsNzUsMCwwLDAsNjcsMTE0LAotICAgIDEwMSw5NywxMTYsMTAxLDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDEsMTEwLDExNiwxMDEsMTE0LDEwMSwKLSAgICAxMDAsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNiwxMjEsMTEyLDEwMSwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDQwLAotICAgIDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEwLDEwMSwKLSAgICAxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTU0LDAsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsNiwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwKLSAgICAwLDAsMCw2NiwwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDgzLAotICAgIDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsMTA4LAotICAgIDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQwLDMsMCwwLDAsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSwKLSAgICA5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSw0MCwxLDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsCi0gICAgOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTcxLDAsCi0gICAgMCwwLDExNSwyLDAsMCwwLDE2LDEsMTE3LDE0LDAsMCwwLDk1LDY4LAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDk5LDEsMCwwLAotICAgIDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLAotICAgIDAsMTE1LDg2LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsCi0gICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsCi0gICAgMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKLSAgICAwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwKLSAgICAxMSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwKLSAgICAwLDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKLSAgICAxMDcsMTE3LDE2OSwwLDAsMCw2NSwzMiwxMTQsMTAxLDk5LDExNywxMTQsMTE1LDEwNSwxMTgsCisgICAgMSwzLDEsMTcsMSwxMywxLDUsMSwxMTQsNTUsMCwwLDAsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsOTUsMCwwLDAsMTIwLDY5LDAsMTAwLDEsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ5LDAsMTI1LDIsCisgICAgMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLAorICAgIDExNiwxLDAsMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMTMxLDMsMCwxLDExMywxOSwwLDExMywxOSwwLDg3LAorICAgIDEyNCwwLDAsMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsCisgICAgMSwwLDEsMTAwLDUsMCw4Myw0MSw2LDEyMiw0Nyw4MywxMDUsMTA5LDExMiwxMDgsCisgICAgMTAxLDMyLDExNSwxMTcsOTgsMTE1LDExNiwxMDUsMTE2LDExNywxMTYsMTAxLDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMTEsMTExLDEwOCwxMTUsNDYsMTE3LDExMiwxMDAsOTcsMTE2LAorICAgIDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwyMTgsMTAsOTUsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMjE4LDgsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsCisgICAgMjE4LDEyLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCw3LAorICAgIDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsNzgsNDEsNSwyMTgsNywxMDQsOTcsMTE1LDk3LAorICAgIDExNiwxMTYsMTE0LDIxOCw3LDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDIxOCw3LDEwMywxMDEsCisgICAgMTE2LDk3LDExNiwxMTYsMTE0LDIxOCw4LDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LDIxOCwKKyAgICA2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNDEsMyw5MCwzLDExMCwxMDEsMTE5LDkwLDMsCisgICAgMTExLDEwOCwxMDAsMTE0LDUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCw1LDk1LDExOSwxMTQsOTcsMTEyLDEyMSwwLAorICAgIDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsMTE0LAorICAgIDY1LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLAorICAgIDAsMTE2LDEsMCwxMzEsMSwwLDEyNCwwLDAsMTMxLDEsMCw4Myw0MSwxLAorICAgIDc4LDQxLDIsMjE4LDQsMTE2LDEyMSwxMTIsMTAxLDExNCw3LDAsMCwwLDQxLDEsCisgICAgMjE4LDQsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDEyOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE0LDY4LDAsCisgICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsCisgICAgMCwwLDAsNjQsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMSwwLDAsOTAsCisgICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsODMsNDEsMiwyMTgsMTQsCisgICAgOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsNzgsNDEsCisgICAgMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsNjksMCwwLDAsMTQ0LDAsMCwwLDExNSwyLDAsCisgICAgMCwwLDEyLDEsMTE0LDY5LDAsMCwwLDk5LDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDgyLAorICAgIDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwKKyAgICAxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsCisgICAgMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwKKyAgICAxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwxMzIsCisgICAgMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLDgsCisgICAgMCwxMDAsMTIsMCw4Myw0MSwxMywyMTgsMTEsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTksMTA3LDEyMiwxNjksNjUsMzIsMTE0LDEwMSw5OSwxMTcsMTE0LDExNSwxMDUsMTE4LAogICAgIDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKICAgICA5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTcsCiAgICAgOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMzIsMTAwLDEwMSwKQEAgLTQwNiw0NSArMzQ1LDMzIEBACiAgICAgNjcsMCwwLDAsMTE1LDcwLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsCiAgICAgMCwwLDEyNCwwLDAsOTUsMiwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwKICAgICAwLDEyNCwwLDAsOTUsMywwLDEyNCwxLDAsMTI0LDAsMCw5NSw0LDAsCi0gICAgMTAwLDAsMCwxMjQsMCwwLDk1LDYsMCwxMDAsMSwwLDEyNCwwLDAsOTUsCi0gICAgNywwLDEwMCwxLDAsMTI0LDAsMCw5NSw4LDAsMTAwLDAsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDEwNSwwLDAsMCwwLDQwLDksMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTMsMCwwLDAsCi0gICAgOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsNCwwLAotICAgIDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNiwwLDAsMCwxMTksOTcsMTA3LDEwMSwxMTcsCi0gICAgMTEyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LAotICAgIDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDUsMCwKLSAgICAwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw3LDAsMCwwLDExOSw5NywxMDUsMTE2LAotICAgIDEwMSwxMTQsMTE1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsCi0gICAgMTE2LDk1LDk1LDE4MSwwLDAsMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsCi0gICAgMTUsMSw5LDEsOSwxLDksMSwxMTcsMjAsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw5OSwxLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLAotICAgIDEyMCw1OSwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LAotICAgIDMsMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsNTUsMCwxMDAsMSwKLSAgICAwLDgzLDEyNCwzLDAsMTA2LDIsMCwxMjUsMiwwLDEyNCwyLDAsMTI0LDEsCi0gICAgMCwxMDcsMiwwLDExNCwyNCwwLDEwMCwyLDAsODMsMTEzLDI0LDAsMTAwLDAsCi0gICAgMCw4Myw0MCwzLDAsMCwwLDc4LDcwLDg0LDQwLDgsMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwKLSAgICAxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNyw1LDAsMCwwLDExMSwxMTksCi0gICAgMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsCi0gICAgMTAzLDk1LDExMSwxMTAsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwwLAotICAgIDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LAotICAgIDQsMCwwLDAsODQsMTE0LDExNywxMDEsNDAsNCwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDIsMCwwLDAsMTA5LDEwMSwxMTcsMywwLAotICAgIDAsMCwxMTYsMTA1LDEwMCwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDE4OSwwLDAsMCwxMTUsCi0gICAgMTgsMCwwLDAsMCwyLDEyLDEsOSwxLDMsMSwxNSwxLDEyLDEsCi0gICAgNCwxLDksMSwxMiwxLDExNywyNCwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywKKyAgICAxMDAsMCwwLDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKKyAgICA2LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwwLDgzLDQxLAorICAgIDIsNzgsMjMzLDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsMTA0LDExNCwxMDEsCisgICAgOTcsMTAwLDkwLDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwKKyAgICAxMDcsMjE4LDQsMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsMTE3LDExMiwxMTQsCisgICAgNjcsMCwwLDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSw5OSwxMTEsMTE3LAorICAgIDExMCwxMTYsMjE4LDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwyMTgsNCwxMTUsCisgICAgMTAxLDEwOCwxMDIsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKKyAgICA5NSwxNTQsMCwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLDE1LDEsCisgICAgOSwxLDksMSw5LDEsMTIyLDIwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsCisgICAgMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsODcsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI1LAorICAgIDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwxMjAsNTksMCwxMTYsMywKKyAgICAwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LDMsMCwKKyAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsMTAwLDEsMCw4MywxMjQsMywwLAorICAgIDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEyNCwxLDAsMTA3LDIsMCwxMTQsCisgICAgMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLDEwMCwwLDAsODMsNDEsMyw3OCwKKyAgICA3MCw4NCw0MSw1LDExNCw3MiwwLDAsMCwyMTgsOSwxMDMsMTAxLDExNiw5NSwxMDUsCisgICAgMTAwLDEwMSwxMTAsMTE2LDExNCw3NSwwLDAsMCwyMTgsMTIsOTUsOTgsMTA4LDExMSw5OSwKKyAgICAxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwyMTgsMywxMDMsMTAxLDExNiw0MSw0LDExNCw3OCwKKyAgICAwLDAsMCwyMTgsMiwxMDksMTAxLDIxOCwzLDExNiwxMDUsMTAwLDExNCw3MywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywxNjIsMCwKKyAgICAwLDAsMTE1LDE4LDAsMCwwLDAsMiwxMiwxLDksMSwzLDEsMTUsCisgICAgMSwxMiwxLDQsMSw5LDEsMTIsMSwxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsCiAgICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LAogICAgIDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCiAgICAgMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDIxNCwwLDAsMCwxMTYsMCwwLApAQCAtNDUzLDI4NjEgKzM4MCwzMDE2IEBACiAgICAgMTMwLDAsMSwxMjQsMCwwLDEwNiw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNSwKICAgICA2OCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNywyLDAsMTE0LDk2LAogICAgIDAsMTI0LDEsMCwxMjQsMCwwLDk1LDUsMCwxMjQsMCwwLDQsMTA2LDQsCi0gICAgMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCw1LDAsODMsMTI0LDAsMCwKLSAgICAxMDYsNywwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw4LDAsMTAwLDMsMCwxMjQsCisgICAgMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCwzLDAsODMsMTI0LDAsMCwKKyAgICAxMDYsNiwwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw3LDAsMTAwLDQsMCwxMjQsCiAgICAgMCwwLDIyLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAotICAgIDksMCwxMDYsMTAsMCwxMDAsNiwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLAotICAgIDAsNCwxMDYsMTIsMCwxMDAsMiwwLDU1LDIsOTUsMTIsMCwxMTAsMCwwLAotICAgIDg3LDEwMCw0LDAsODEsODgsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwKLSAgICAwLDAsMSwxMjQsMCwwLDEwNiw5LDAsMTA2LDEzLDAsMTMxLDAsMCwxLAotICAgIDExMywyOCwwLDg3LDEwMCw0LDAsMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCwKLSAgICA0LDAsODMsNDAsNywwLDAsMCwxMTcsMTg1LDAsMCwwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsMzIsCi0gICAgNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTAwLAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsOTUsCi0gICAgNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKLSAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LDEwMSwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsCi0gICAgMTE3LDIzLDAsMCwwLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwMCwxMDEsCi0gICAgMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMzcsMTE0LDc4LDg0LDcwLDQwLAotICAgIDE0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCi0gICAgMTE3LDksMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsCi0gICAgNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LAotICAgIDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExOSwKLSAgICA5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywKLSAgICAxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDExNywzLDAsMCwwLDExNiwxMDUsMTAwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAyMDEsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwxLDEwLDEsMywKLSAgICAxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwxLDEyLDEsMTksCi0gICAgMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDExNywxOSwwLDAsMCw5NSw3NywKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywxMzgsMCwKLSAgICAxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LDUyLDAsCi0gICAgMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsMTE2LDYsCi0gICAgMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsCi0gICAgMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsOCwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw4LDAsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwwLDAsMSwKLSAgICAxMTMsMTU1LDAsMTEwLDAsMCw4NywxMDAsMCwwLDgxLDg4LDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMTcsMzEsMCwwLDAsOTksOTcsMTEwLDExMCwxMTEsCi0gICAgMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywxMTAsNDUsOTcsOTksMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LDAsMCwwLDAsMTA1LAotICAgIDEsMCwwLDAsNDAsMTEsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LAotICAgIDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLAotICAgIDEwMSwxMTAsMTE2LDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwKLSAgICAwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwKLSAgICAxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwKLSAgICAxMTYsMTE3LDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsCi0gICAgMCwwLDExOSw5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw2LDAsMCwwLDExOSw5NywKLSAgICAxMDcsMTAxLDExNywxMTIsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyMjYsMCwKLSAgICAwLDAsMTE1LDIyLDAsMCwwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwKLSAgICAxLDIxLDEsMTUsMSwxNSwxLDksMSw5LDEsMTUsMSwxMTcsMTksMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDEwMCwKLSAgICAxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjEsMCwwLAotICAgIDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDM3LDExNCw0MSwKLSAgICAzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LDEwMCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwyMzksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMCwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDksMCwwLDAsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsCi0gICAgMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywKLSAgICA3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDE3NSwwLDAsMCwxMTUsMTIsMCwwLAotICAgIDAsMTYsNCw2LDIsMTIsOCwxMiwxMiwxMiwyNSwxMiwxMywxMTcsMTEsMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKLSAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCi0gICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLAotICAgIDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDExNyw4NiwwLDAsMCwKLSAgICA2NSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDc2LDExMSw5OSwxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwxMDAsCi0gICAgMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksMTE3LAotICAgIDEwOCwxMTYsMTA1LDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExNywKLSAgICAxMTIsMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLAotICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDEsMCwxMjQsMCwwLDk1LAotICAgIDEsMCwxMDAsMCwwLDgzLDQwLDIsMCwwLDAsNzgsMTA1LDAsMCwwLAotICAgIDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQ3LDAsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI1LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LAotICAgIDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwKLSAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLAotICAgIDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLDAsMTAwLDIsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDc4LDEwNSwxLDAsMCwwLDg0LDQwLDIsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwyNTEsMCwwLDAsMTE1LAotICAgIDQsMCwwLDAsMCwxLDE1LDEsMTE3LDI0LDAsMCwwLDk1LDY4LDExNywKLSAgICAxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksCi0gICAgMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwzMCwwLDExNiwxLAotICAgIDAsMTAwLDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDQsMTA2LDAsMCwxMDAsMywwLDU2LDIsOTUsMCwwLDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMDUsMCwwLDAsMCwxMTcsMzEsMCwwLDAsCi0gICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywKLSAgICAxMTAsNDUsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LAotICAgIDEsMCwwLDAsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5OSwxMTEsCi0gICAgMTE3LDExMCwxMTYsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LAotICAgIDExNCwxMTQsMTExLDExNCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LAotICAgIDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDI1NSwwLDAsMCwxMTUsNiwKLSAgICAwLDAsMCwwLDEsMTUsMSwxNSwxLDExNywyNCwwLDAsMCw5NSw2OCwKLSAgICAxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwKLSAgICAxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLAotICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLAotICAgIDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsCi0gICAgMSwwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNyw0MCwzNywxMTQsNDEsMzIsOTcsMTE2LDMyLDM3LDEwMCw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyLDAsMCwwLDEwNSwKLSAgICAxMDAsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNCwxLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDEsMTE3LDI1LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAotICAgIDk1LDc4LDQwLDgsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsNywwLAotICAgIDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNyw3LDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywyNDMsMCwwLDAsMTE1LDEwLDAsMCwwLAotICAgIDE2LDIsNiwyLDEyLDQsMTIsNCwxMiw1LDExNywxNiwwLDAsMCw5NSwKLSAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLAotICAgIDMsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDAsMywwLDEyNSwxLDAsMTIxLAotICAgIDE3LDAsMTE2LDEsMCwxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsCi0gICAgODksMTEwLDEsMCw4OCwxMjQsMSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTM4LAotICAgIDAsMTE2LDMsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDQsMCwKLSAgICAxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNSwwLDEzNiwKLSAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMiwwLDExNiw2LDAsMTA2LDcsMCwKLSAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTYsMSwwLDEzNiwwLDAsNjAsCi0gICAgMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDQsMCwwLDAsMTE3LDEwOSwwLDAsCi0gICAgMCw3MSwxMDEsMTE2LDMyLDExMSwxMTQsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksCi0gICAgMCwwLDAsMTE1LDExLDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LAotICAgIDQwLDEsMCwwLDAsMTE3LDEsMCwwLDAsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMiwwLDAsMCw5OSw5OCwyNCwxLDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDI4LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw5OSw5OCw3OCw0MCw4LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwKLSAgICAxMTAsMTAxLDExNywxMywwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk5LDEwNywxMTUsMTE3LDgsMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNywKLSAgICAzLDAsMCwwLDExNCwxMDEsMTAyLDQwLDMsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDIsCi0gICAgMCwwLDAsOTksOTgsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTAsCisgICAgOCwwLDEwNiw5LDAsMTAwLDUsMCwxMzEsMSwwLDExNCwxNjMsMCwxMjQsMCwKKyAgICAwLDQsMTA2LDEwLDAsMTAwLDIsMCw1NSwyLDk1LDEwLDAsMTEwLDAsMCwKKyAgICA4NywxMDAsNiwwLDgxLDg4LDEyNCwwLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwKKyAgICAwLDAsMSwxMjQsMCwwLDEwNiw4LDAsMTA2LDExLDAsMTMxLDAsMCwxLAorICAgIDExMywyOCwwLDg3LDEwMCw2LDAsMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCwKKyAgICA2LDAsODMsNDEsNywxMjIsMTg1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExMiwKKyAgICAxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwKKyAgICAxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDEwMSwxMDAsNDQsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLAorICAgIDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCisgICAgMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc5LDExNiwxMDQsMTAxLDExNCwKKyAgICAxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LAorICAgIDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKKyAgICAxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTE0LDcxLDAsMCwwLDExNCwyOSwwLDAsMCw4NCwxMjIsMjMsMTAwLDEwMSw5NywKKyAgICAxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LAorICAgIDEyMSwzMiwzNywxMTQsNzAsNzgsNDEsMTIsMTE0LDcyLDAsMCwwLDExNCw4MCwwLAorICAgIDAsMCwxMTQsODEsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3NiwwLDAsCisgICAgMCwxMTQsNzUsMCwwLDAsMTE0LDg1LDAsMCwwLDExNCw2OSwwLDAsMCwKKyAgICAxMTQsNzQsMCwwLDAsMjE4LDcsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTQsNzcsCisgICAgMCwwLDAsMjE4LDcsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsNDEsMiwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDg0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw4NiwwLDAsMCwxNzQsMCwwLDAsCisgICAgMTE1LDMyLDAsMCwwLDAsNiwxMiwxLDEwLDEsMywxLDMsMSwxMCwKKyAgICAxLDMwLDEsOSwxLDE1LDEsNCwxLDEyLDEsMTksMSwxOCwxLDI0LAorICAgIDIsMTMsMSwyMCwyLDEyMiwxOSw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKKyAgICA5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTY1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsCisgICAgMTI0LDAsMCwxMDYsMiwwLDE0MywxMzgsMCwxLDEyNCwwLDAsMTA2LDMsMCwKKyAgICAxMjQsMSwwLDEwNywzLDAsMTE0LDUyLDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwKKyAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwKKyAgICAwLDEwNyw0LDAsMTE1LDczLDAsMTE2LDYsMCwxMzAsMSwwLDEyNCwwLDAsCisgICAgNCwxMDYsNSwwLDEwMCwzLDAsNTYsMiw5NSw1LDAsMTI0LDAsMCwxMDYsCisgICAgNSwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTU1LDAsMTAwLDAsMCwxMjQsMCwKKyAgICAwLDk1LDMsMCwxMjQsMCwwLDEwNiw3LDAsMTE0LDE1NSwwLDEyNCwwLDAsCisgICAgNCwxMDYsNywwLDEwMCwzLDAsNTYsMiw5NSw3LDAsMTI0LDAsMCwxMDYsCisgICAgOCwwLDEwNiw5LDAsMTMxLDAsMCwxLDExMywxNTUsMCwxMTAsMCwwLDg3LAorICAgIDEwMCwwLDAsODEsODgsMTAwLDAsMCw4Myw0MSw0LDc4LDEyMiwzMSw5OSw5NywKKyAgICAxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSwKKyAgICA5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDI5LDAsMCwwLDQxLDEwLDExNCw3MiwwLDAsMCwxMTQsODAsCisgICAgMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3NSwwLDAsMCwyMTgsMTIsODIsCisgICAgMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw3NiwwLDAsMCwKKyAgICAyMTgsMTQsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgMTE0LDc3LDAsMCwwLDExNCw3NCwwLDAsMCwxMTQsODcsMCwwLDAsNDEsCisgICAgMiwxMTQsNzgsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NywwLDAsMCwxOTksCisgICAgMCwwLDAsMTE1LDIyLDAsMCwwLDAsMSwxMiwxLDEwLDEsMTUsMSwKKyAgICAxNSwxLDIxLDEsMTUsMSwxNSwxLDksMSw5LDEsMTUsMSwxMjIsMTksCisgICAgOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSwKKyAgICA5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTMxLDIsMCw4Myw0MSwyLDc4LDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMTIzLDMzLDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLAorICAgIDEyMywxMjUsNDEsMywxMTQsNDcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCw0OCwKKyAgICAwLDAsMCw0MSwxLDExNCw3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMTQsMTAxLDExMiwKKyAgICAxMTQsOTUsOTUsMjEyLDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjAsCisgICAgOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsCisgICAgMTEyLDExNCw5NSw5NSw3OCw0MSw5LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLAorICAgIDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzksMCwwLDAsCisgICAgMTE0LDg1LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsODcsMCwwLDAsMTE0LAorICAgIDkwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MCwwLDAsMCwxNDgsMCwwLAorICAgIDAsMTE1LDEyLDAsMCwwLDEyLDQsNiwyLDEyLDgsMTIsMTIsMTIsMjUsCisgICAgMTIsMTMsMTE0LDcwLDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDcwLDAsMCwKKyAgICAwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCisgICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCisgICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywKKyAgICAwLDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLAorICAgIDkwLDcsMCwxMDAsMTAsMCw4Myw0MSwxMSwyMTgsMTYsOTUsNjgsMTE3LDEwOSwxMDksCisgICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxMjIsODYsNjUsMzIsMTE1LAorICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMzIsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCisgICAgMTA3LDMyLDEwMSwxMTMsMTE3LDEwNSwxMTgsOTcsMTA4LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTgsMTE3LDEwNSwxMDgsMTAwLDExNSwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMTExLDExNywxMTYsMTAsMzIsMzIsMzIsMzIsMTA5LDExNywxMDgsMTE2LDEwNSwKKyAgICA0NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsCisgICAgMTE0LDExNiw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwwLAorICAgIDEyNCwwLDAsOTUsMCwwLDEwMCwxLDAsMTI0LDAsMCw5NSwxLDAsMTAwLAorICAgIDAsMCw4Myw0MSwyLDc4LDExNCw3MSwwLDAsMCw0MSwyLDExNCw2NywwLAorICAgIDAsMCwxMTQsNzYsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw3OSwwLDAsMCwyMjAsMCwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwxLDksMSwxMjIsMjUsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsMCw0LDEwNiwwLDAsCisgICAgMTAwLDEsMCw1NSwyLDk1LDAsMCwxMDAsMiwwLDgzLDQxLDMsNzgsMTE0LAorICAgIDI5LDAsMCwwLDg0LDQxLDEsMTE0LDc2LDAsMCwwLDQxLDEsMTE0LDc4LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw4NiwwLDAsMCwyMjQsMCwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwxLDE1LDEsMTIyLDI0LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsCisgICAgMCwxMDcsMiwwLDExNCwzMCwwLDExNiwxLDAsMTAwLDIsMCwxMzEsMSwwLAorICAgIDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDQsMTA2LDAsMCwxMDAsMywwLAorICAgIDU2LDIsOTUsMCwwLDEwMCwwLDAsODMsNDEsNCw3OCwxMTQsNzEsMCwwLAorICAgIDAsMTIyLDMxLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LAorICAgIDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsCisgICAgOTksMTA3LDExNCwyOSwwLDAsMCw0MSwyLDExNCw3NiwwLDAsMCwxMTQsODgsCisgICAgMCwwLDAsNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDg3LDAsMCwwLDIyOCwwLAorICAgIDAsMCwxMTUsNiwwLDAsMCwwLDEsMTUsMSwxNSwxLDEyMiwyNCw5NSwKKyAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LAorICAgIDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwKKyAgICAwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTE2LDIsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwyLDc4LDEyMiwyOCw5NSwKKyAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLAorICAgIDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LDExNiwzMiwxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsCisgICAgMCwwLDExNCw2NywwLDAsMCwxMTQsNDgsMCwwLDAsNDEsMSwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDkwLDAsMCwwLDIzMywwLDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDEsMTIyLDI1LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQxLDgsCisgICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAorICAgIDU5LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsODYsMCwwLDAsMTE0LDg3LAorICAgIDAsMCwwLDExNCw5MCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTEsMCwwLAorICAgIDAsMjE2LDAsMCwwLDExNSwxMCwwLDAsMCwxMiwyLDYsMiwxMiw0LAorICAgIDEyLDQsMTIsNSwxMTQsOTEsMCwwLDAsOTksMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsCisgICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAorICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLDQsCisgICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCwKKyAgICA5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxOCw5NSw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDk5LDIsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsCisgICAgMTAwLDAsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsCisgICAgNDEsMiwyMTgsNSw5NSwxMTAsOTcsMTA5LDEwMSwyMTgsNSw5NSwxMDgsMTExLDk5LDEwNywKKyAgICA0MSwyLDExNCw3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc5LDAsMCwwLAorICAgIDIzOSwwLDAsMCwxMTUsNCwwLDAsMCwwLDEsOSwxLDEyMiwyNyw5NSwKKyAgICA3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsCisgICAgMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMSwwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNTMsMCwwLDAsMTIyLDIyLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsCisgICAgMTMxLDEsMCwxMjQsMCwwLDk1LDIsMCw4NywxMDAsMCwwLDExNiwzLDAsCisgICAgMTA2LDQsMCwxMzEsMCwwLDEsODgsMTI0LDAsMCwxMDYsMiwwLDEwNiw1LAorICAgIDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsNDEsMSw3OCw0MSw2LDIxOCwxNiwKKyAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKKyAgICAxMTQsOTMsMCwwLDAsMTE0LDk0LDAsMCwwLDIxOCw0LDk1LDEwNSwxMDksMTEyLAorICAgIDIxOCwxMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTQsODYsCisgICAgMCwwLDAsNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDksOTUsOTUsMTAxLDExMCwxMTYsCisgICAgMTAxLDExNCw5NSw5NSwyNDMsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDMsCisgICAgMSwyMiwyLDExLDEsMTIyLDI4LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLAorICAgIDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKKyAgICAxLDAsMCwwLDc5LDAsMCwwLDExNSwxNywwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDAsMCw4Myw0MSwxLAorICAgIDc4LDQxLDIsMTE0LDk0LDAsMCwwLDExNCw4NywwLDAsMCw0MSwzLDExNCwKKyAgICA3OCwwLDAsMCwyMTgsNCw5NywxMTQsMTAzLDExNSwyMTgsNiwxMDcsMTE5LDk3LDExNCwKKyAgICAxMDMsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCw4LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSwyNTAsMCwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LAorICAgIDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LAorICAgIDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsCisgICAgMTE0LDU4LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LAorICAgIDEwMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTIsMCwwLDAsMjM3LDAsMCwKKyAgICAwLDExNSw2LDAsMCwwLDEyLDIsMTIsNCwxMiw3LDExNCw5MiwwLDAsCisgICAgMCw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLAorICAgIDAsMCwzLDAsMCwwLDExNSwxNDIsMCwwLDAsMTAwLDEsMCwxMjUsMSwKKyAgICAwLDEyMSwxNywwLDExNiwwLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLAorICAgIDAsODcsMTEwLDE4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw0MywwLDEsCisgICAgMSwxLDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMSwwLDEwNyw4LDAsCisgICAgMTE0LDEzOCwwLDExNiwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwKKyAgICAzLDAsMTM2LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDQsCisgICAgMCwxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsCisgICAgMTAwLDIsMCwxMDAsMywwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNSwwLDEwNiwKKyAgICA2LDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE2LDAsMCwxMzYsMCwKKyAgICAwLDYwLDExMCwwLDAsMTI0LDEsMCw4Myw0MSw0LDEyMiwxMDksNzEsMTAxLDExNiwKKyAgICAzMiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywKKyAgICAzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsCisgICAgMTExLDExMCwxMDgsMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LAorICAgIDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwKKyAgICAxMTEsOTksMTA3LDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw3OCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDE5LDAsMCwwLAorICAgIDExNSwxMSwwLDAsMCwxMTYsMCwwLDEzNiwwLDAsNjEsMTAwLDAsMCw4MywKKyAgICA0MSwxLDc4LDQxLDEsMjE4LDEzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwKKyAgICAxMTEsOTksMTA3LDExNSw0MSwxLDExNCwzNiwwLDAsMCw0MSwxLDExNCw2NywwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMiw5OSw5OCwKKyAgICAxNCwxLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsCisgICAgMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwKKyAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5OSw5OCw0MSw3LDExNCwxMDIsMCwwLDAsCisgICAgMjE4LDgsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDcyLDAsMCwwLDExNCwKKyAgICA5MSwwLDAsMCwxMTQsNzAsMCwwLDAsMjE4LDgsOTUsMTE5LDEwMSw5NywxMDcsCisgICAgMTE0LDEwMSwxMDIsOTAsMywxMTQsMTAxLDEwMiw0MSwzLDExNCw2NywwLDAsMCwxMTQsCisgICAgNzMsMCwwLDAsMTE0LDEwMywwLDAsMCwxMTQsNCwwLDAsMCw0MSwxLAorICAgIDExNCw2NywwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTUsMCwwLDAsMCwKICAgICAxLDAsMCwxMTUsMjQsMCwwLDAsMCw0LDYsMSwzLDEsMTcsMSwKICAgICAxMywxLDUsMSwxMiwxLDEyLDEsMTUsMiwxMiwxLDE4LDIsMjUsMSwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAxMTQsOTUsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKICAgICAwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDcxLDAsMCwwLDExNiwKICAgICAwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwKICAgICAwLDEzMSwwLDAsMSwxMjEsMTQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDAsCiAgICAgMCwxLDg3LDExMCwxOCwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNTYsMCwKICAgICAxLDEsMSw4OSwxMTAsMTEsMCw4OCwxMjQsMSwwLDEwNiw1LDAsMTMxLDAsCi0gICAgMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjEsMSwwLDAsCi0gICAgODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTA4LDExMSw5OCwKLSAgICA5NywxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDQsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwKLSAgICAxMTAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMTAsMTE1LDExNywxMTQsCi0gICAgMTAxLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTksMTExLAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMTYsMTAxLDEwOCwxMjEsMzIsMTA1LDExMCwxMDUsMTE2LDEwNSw5NywxMDgsCi0gICAgMTA1LDEyMiwxMDEsMTAwLDQ0LDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTAxLDExOCwxMDEsMTEwLDExNiwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsOTgsMTAxLDEwNSwKLSAgICAxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk3LAotICAgIDExMCwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsCi0gICAgOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LAotICAgIDk3LDEwNywxMDEsMTEwLDQ2LDc4LDQwLDYsMCwwLDAsMTE3LDE2LDAsMCwwLAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAotICAgIDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsNywwLDAsMCw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLAotICAgIDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE5LDAsMCwwLDk1LDEwOCwxMTEsCi0gICAgOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMjksMSwwLDAsMTE1LDE0LDAsMCwwLDAsNywxMiwxLDEwLDEsMywKLSAgICAxLDE0LDEsMTMsMyw1LDIsMTE3LDE5LDAsMCwwLDk1LDEwOCwxMTEsOTksCi0gICAgMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksCisgICAgMCwxLDEwMCwxLDAsODMsNDEsMiw5NywyMSwxLDAsMCw4MiwxMDEsMTA4LAorICAgIDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0NCwzMiw5NywxMTAsMTAwLAorICAgIDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTQsCisgICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywKKyAgICAzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsCisgICAgMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMTUsMTE3LDExNCwxMDEsMzIsOTcsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTA5LDExMiwxMDgsCisgICAgMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwKKyAgICAxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDEsMTE4LAorICAgIDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTcsMTEwLDExMSwxMTYsCisgICAgMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5OCwxMDEsMzIsCisgICAgOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsOTcsMTA3LDEwMSwKKyAgICAxMTAsNDYsNzgsNDEsNiwxMTQsOTUsMCwwLDAsMTE0LDk2LDAsMCwwLDExNCwKKyAgICA5NywwLDAsMCwxMTQsODYsMCwwLDAsMTE0LDY5LDAsMCwwLDExNCw4NywKKyAgICAwLDAsMCw0MSwyLDExNCw2NywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE5LAorICAgIDk1LDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTksMSwwLDAsMTE1LDE0LDAsMCwwLDAsNywxMiwxLAorICAgIDEwLDEsMywxLDE0LDEsMTMsMyw1LDIsMTE0LDEwNiwwLDAsMCw5OSwKICAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAogICAgIDc5LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LAotICAgIDIsMCwxNDIsMCwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDEsMCwwLAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTEwLAotICAgIDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwzMiwxMTYsMTExLAotICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCi0gICAgOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LDEwOCwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LDMyLDExOSwxMDQsCi0gICAgMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLDMyLDMyLDMyLAotICAgIDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwKLSAgICAxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsMTA1LDExNSwxMDEsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsOTksMTAxLDk4LAotICAgIDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLDMyLDQwLDAsCi0gICAgMCwwLDAsNDAsMywwLDAsMCwxMTcsMSwwLDAsMCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDQsMCwwLDAsMTA3LDExOSwxMDAsMTE1LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDQ5LDEsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsOCwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTA1LDE1OCwxMiwwLDAsMTE3LDEsMCwwLDAsMTMsMTA1LDE2LAotICAgIDAsMCwwLDExNywxLDAsMCwwLDEwLDEwNSwyNCwwLDAsMCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDk5LAotICAgIDAsMCwwLDExNSwyOSwwLDAsMCwxMjQsMCwwLDkzLDE5LDAsMTI1LDEsCi0gICAgMCwxMTYsMCwwLDEyNCwxLDAsNjMsMTAwLDAsMCw2NCw4NiwxLDExMywzLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDEwNSwyNTUsMCwwLDAsNzgsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsODcsOTUsNzcsCi0gICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsNDAsMiwwLDAsMCwKLSAgICAxMTcsMiwwLDAsMCw0Niw0OCwxMTcsMSwwLDAsMCwxMTAsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsCi0gICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUwLDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDYsMCwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDI1LDAsMCwwLDEwNSw4LDAsMCwwLDExNywKLSAgICAxMSwwLDAsMCw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTE3LAotICAgIDMsMCwwLDAsNDYsMTEyLDEyMSwxMTcsNCwwLDAsMCw0NiwxMTIsMTIxLDk5LAotICAgIDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsMTExLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxMSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsCi0gICAgMCwwLDAsMTI0LDEsMCwxMDAsNSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsNCwwLDEyNSwzLDAsMTEwLDYsCi0gICAgMCwxMTYsNSwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw3LDAsMTAwLAotICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMjUsOSwwLDEyNCw5LDAsCi0gICAgMTAwLDUsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsMTAsMCwxMDAsMiwwLDEzMSwKLSAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEwMCwzLDAsMTA2LDExLDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEwMyw0LAotICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTIsMCwxMjQsNCwwLDExNiwxMywwLAotICAgIDEyNCwxMCwwLDEzMSwzLDAsODMsNDAsNiwwLDAsMCwxMTcsMjQ0LDEsMCwKLSAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwKLSAgICAxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLAotICAgIDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICAxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLAotICAgIDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDExMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwKLSAgICAxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw3OCwKLSAgICAxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMDksMTE3LDExNSwKLSAgICAxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSw5NywxMTAsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsCi0gICAgMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTcsMSwwLDAsMCw0NiwxMTcsMzYsMCwwLDAsCi0gICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywwLDAsMCwwLDEwNSwwLDAsMCwwLDc4LDQwLAotICAgIDE0LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsCi0gICAgMCwwLDExNSwxMjEsMTE1LDExNyw1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyMywwLDAsCi0gICAgMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMjcsMCwwLDAsNzksODAsODQsCi0gICAgNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICA0LDAsMCwwLDEwNiwxMTEsMTA1LDExMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LAotICAgIDY1LDY3LDcyLDY5LDQwLDExLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxNCwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsCi0gICAgMTE0LDExNCwxMDUsMTAwLDEwMSwxMTcsNSwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsMTE3LAotICAgIDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCwxMTcsMTMsCi0gICAgMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDEsMCwwLDAsOTUsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDk3LDEwMywxMTcsOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxNTksMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsCi0gICAgMzEsMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLAotICAgIDE1LDEsMzEsMSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDcsMCwKLSAgICAxMDcsOCwwLDExNCwzMywwLDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwKLSAgICAxLDAsMTEwLDAsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLAotICAgIDAsMTI1LDEsMCwxMjUsMiwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMTYsNiwwLDEwNywKLSAgICAzLDAsMTE0LDEwOCwwLDExNiw3LDAsMTAwLDIsMCwxMDYsOCwwLDExNiw2LAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEyNCwyLDAsMTA2LDksMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwxMDcsCi0gICAgMywwLDExNCwxNTMsMCwxMTYsNywwLDEwMCw1LDAsMTA2LDgsMCwxMjQsMiwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwKLSAgICAxMDYsMTAsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDYsMCwyNSwxMjUsNCwwLAotICAgIDExNiwxMSwwLDEyNCwxLDAsMTI0LDQsMCwxMTYsMTIsMCwxMDAsNiwwLDI1LAotICAgIDIzLDEzMSwyLDAsODMsNDAsOCwwLDAsMCwxMTcsMTIxLDEsMCwwLDcxLAotICAgIDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSwzMiwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwxMTIsCi0gICAgMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwKLSAgICAxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwKLSAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDAsCi0gICAgMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLDExMCwxMDIsCi0gICAgMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1Miw1NSwzMiwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksCisgICAgMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwxLDAsMCwxMTQsMTAxLDEwOSwKKyAgICAxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDk1LDEwMiwxMTQsCisgICAgOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0Niw5OSwKKyAgICAzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywxMjEsMTE1LDMyLDExNCwxMDEsMTA5LAorICAgIDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwxMTUsMTAsMzIsMzIsCisgICAgMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDEwMiwKKyAgICAxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDExMCwxMDAsMzIsMTE5LAorICAgIDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCwzMiwKKyAgICAxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywxMDgsMzIsOTksOTcsMTA4LDEwOCwKKyAgICAzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLAorICAgIDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwzMiwzMiwzMiwxMDIsMTE0LDk3LAorICAgIDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLDExNyw5OSwxMDEsMTE1LDMyLDExNywKKyAgICAxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLDEwNSwxMTUsMTAxLDMyLDEwNSwxMTAsCisgICAgMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsCisgICAgMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTAxLDEyMCwxMDEsOTksCisgICAgMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwzMiwxMTQsNCwwLDAsMCwKKyAgICA0MSwzLDIxOCwxLDEwMiwxMTQsOTksMCwwLDAsOTAsNCwxMDcsMTE5LDEwMCwxMTUsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAorICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDM5LDEsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsOCwxMTQsMTA4LDAsMCwwLDEwNSwyMjgsMTIsMCwwLDIzMywKKyAgICAyLDAsMCwwLDExNCwxMywwLDAsMCwxMTUsMiwwLDAsMCwxMywxMCwKKyAgICA5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTIyLDMsNDYsCisgICAgMTEyLDEyMSwxMjIsNCw0NiwxMTIsMTIxLDk5LDEyMiw0LDQ2LDExMiwxMjEsMTExLDc4LDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCw2LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxODAsMCwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwNywKKyAgICA4LDAsMTE0LDI1LDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTIsMTEwLAorICAgIDMsMCwxMjQsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsMywKKyAgICAwLDEyNSwzLDAsMTEwLDYsMCwxMTYsNCwwLDEyNSwzLDAsMTE2LDUsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsCisgICAgNSwwLDEwNiw2LDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwKKyAgICAwLDEyNSw3LDAsMTI1LDgsMCwxMTYsMCwwLDEwNiw3LDAsMTA2LDgsMCwKKyAgICAxMjUsOSwwLDEyNCw5LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsCisgICAgOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTAwLDQsCisgICAgMCwxMDYsMTAsMCwxMjQsNiwwLDEyNCw3LDAsMTI0LDksMCwxMjQsMywwLAorICAgIDEwMCw1LDAsMjUsMTAzLDQsMCwxMzEsMSwwLDEyNSwxMCwwLDExNiwxMSwwLAorICAgIDEyNCw0LDAsMTE2LDEyLDAsMTI0LDEwLDAsMTMxLDMsMCw4Myw0MSw2LDk3LAorICAgIDI0NCwxLDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICA0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLAorICAgIDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwKKyAgICAxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLAorICAgIDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMjAsMTA1LDExNSwKKyAgICAxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLDMyLDExNCwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKKyAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDQ2LDExMiwxMjEsOTksNDcsCisgICAgNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LAorICAgIDk3LDExNiwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LAorICAgIDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExOSwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAxLDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LAorICAgIDEwMSwzMiw0NiwxMTIsMTIxLDk5LDMyLDExNywxMTAsMTA4LDEwMSwxMTUsMTE1LDMyLDExNSwxMjEsCisgICAgMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTAsNDUsMTIyLDEwMSwxMTQsMTExLDQ0LDMyLDExNiwxMDQsCisgICAgMTAxLDExMCwzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsMTEyLAorICAgIDEyMSwxMTEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDEwMCwxMDEsOTgsMTE3LAorICAgIDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwKKyAgICAxMTYsMzIsNzgsMTExLDExMCwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDEwNSwxMTYsMzIsCisgICAgMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5NywzMiw5OCwxMTEsMTExLDEwOCwxMDEsOTcsCisgICAgMTEwLDMyLDk3LDExMCwxMDAsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTIsMTA4LDk3LDk5LDEwMSwzMiwxMTEsMTAyLDMyLDExNSwxMjEsCisgICAgMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LAogICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksCiAgICAgMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAogICAgIDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKICAgICAxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDM2LDAsMCwwLDExNSwxMjEsMTE1LAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwyMTgsMSw0NiwxMjIsMzYsMTE1LDEyMSwKKyAgICAxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwKKyAgICAxMTAsMTAxLDExNCwzMCwwLDAsMCwxMTQsNzEsMCwwLDAsNDEsMTMsMTE0LDcsCisgICAgMCwwLDAsMjE4LDUsMTAyLDEwOCw5NywxMDMsMTE1LDIxOCw4LDExMSwxMTIsMTE2LDEwNSwKKyAgICAxMDksMTA1LDEyMiwxMDEsMjE4LDIzLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LAorICAgIDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDIxOCwyNyw3OSwKKyAgICA4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCwKKyAgICA2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTQsMzgsMCwwLDAsMjE4LAorICAgIDksMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwyMTgsMTQsMTA1LDEwOSwxMTIsMTA4LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDIxOCw5LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsOTUsMTE2LDk3LDEwMywyMTgsMTksNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwyNiwwLDAsMCwxMTQsCisgICAgMjgsMCwwLDAsMjE4LDgsOTUsODAsODksNjcsNjUsNjcsNzIsNjksNDEsMTEsCisgICAgMTE0LDM1LDAsMCwwLDkwLDE0LDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwKKyAgICAxMTQsMTE0LDEwNSwxMDAsMTAxLDIxOCw1LDEwMCwxMDEsOTgsMTE3LDEwMywyMTgsOCwxMTUsMTE3LAorICAgIDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDIxOCw0LDEwNCwxMDEsOTcsMTAwLDExNCwzNywwLDAsCisgICAgMCwyMTgsMTMsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCisgICAgMjE4LDMsMTE1LDEwMSwxMTIsMTE0LDM2LDAsMCwwLDkwLDMsMTE2LDk3LDEwMywyMTgsCisgICAgOCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk5LDk3LDk5LDEwNCwxMDEsOTUsCisgICAgMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTYyLDEsMCwwLDExNSwKKyAgICAyMiwwLDAsMCwwLDEzLDMxLDEsNiwxLDksMiw2LDEsMTgsMSwKKyAgICAyNCwxLDEyLDEsMTIsMSwxNSwxLDMxLDEsMTE0LDEyNiwwLDAsMCw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKKyAgICAyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMywwLDExNiwzLDAsMTAwLDIsCisgICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwxMjUsMiwwLDExNiw0LDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsCisgICAgMCwxMTYsNSwwLDEwNywzLDAsMTE0LDEwOCwwLDExNiw2LDAsMTAwLDMsMCwKKyAgICAxMDYsNywwLDExNiw1LDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLAorICAgIDEsMCwxMTAsMCwwLDEyNCwyLDAsMTA2LDgsMCwxMDAsNCwwLDEzMSwxLAorICAgIDAsMTAwLDUsMCwxMDcsMywwLDExNCwxNTMsMCwxMTYsNiwwLDEwMCw2LDAsCisgICAgMTA2LDcsMCwxMjQsMiwwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwKKyAgICAwLDAsMTI0LDIsMCwxMDYsOSwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNywKKyAgICAwLDI1LDEyNSw0LDAsMTE2LDEwLDAsMTI0LDEsMCwxMjQsNCwwLDExNiwxMSwKKyAgICAwLDEwMCw3LDAsMjUsMjMsMTMxLDIsMCw4Myw0MSw4LDk3LDEyMSwxLDAsCisgICAgMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsCisgICAgMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDk5LDQ2LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsCisgICAgMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsCisgICAgNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLAorICAgIDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLAorICAgIDEwMSwxMjAsMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwKKyAgICAxMDgsMTIxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LAorICAgIDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwKKyAgICAxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwxMDAsCisgICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsCisgICAgMTExLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwzMiwzMiw3MywxMDIsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDk5LDExMSwKKyAgICAxMTAsMTAyLDExMSwxMTQsMTA5LDMyLDExNiwxMTEsMzIsODAsNjksODAsMzIsNTEsNDksNTIsCisgICAgNTUsMzIsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0NCwzMiw4Niw5NywxMDgsMTE3LDEwMSw2OSwKKyAgICAxMTQsMTE0LDExMSwxMTQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTQsOTcsMTA1LAorICAgIDExNSwxMDEsMTAwLDQ2LDMyLDczLDEwMiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwKKyAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksCisgICAgOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsCisgICAgMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMTIyLDM2LDExNSwxMjEsMTE1LAogICAgIDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0NiwKICAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMzcsMCwwLDAsMTIzLDEyNSwzMiwxMTAsMTExLDExNiwzMiw5OCwxMTEsMTE2LAotICAgIDExNiwxMTEsMTA5LDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwKLSAgICAxMTEsMTE0LDEyMSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDExNywxLDAsMCwwLAotICAgIDQ2LDEwNSwyLDAsMCwwLDExNywyOCwwLDAsMCwxMDEsMTIwLDExMiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwKLSAgICAxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDEwNSwwLDAsMCwwLDc4LDQwLDEzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywxNCwwLDAsMCwxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMTE3LDksMCwKLSAgICAwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDExNyw0LDAsMCwwLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLAotICAgIDAsOTUsODAsODksNjcsNjUsNjcsNzIsNjksMTE3LDEwLDAsMCwwLDg2LDk3LAotICAgIDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsOSwwLAotICAgIDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LDE1LDAsMCwwLDgzLAotICAgIDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLAotICAgIDAsMTA0LDEwMSw5NywxMDAsMTE3LDE2LDAsMCwwLDExMiwxMjEsOTksOTcsOTksMTA0LAotICAgIDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLAotICAgIDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMywwLDAsMCw5OCw5NywxMTUsMTAxLDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAotICAgIDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDE4NiwxLDAsMCwxMTUsMjQsCi0gICAgMCwwLDAsMCw5LDE4LDEsMTUsMSwxOCwxLDE4LDEsMTIsMSw5LAotICAgIDEsMTgsMSwyMSwxLDksMSwxNSwxLDE5LDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTMsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2NCwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIyLDAsMTAwLDYsMCwKLSAgICA4MywxMjQsMCwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwKLSAgICAxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyLDExNSw4MSwwLAotICAgIDEyNCwzLDAsMTA2LDMsMCwxMzEsMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzMsCi0gICAgMiwwLDI1LDEwMCw1LDAsMTA3LDMsMCwxMTQsODUsMCwxMjQsMCwwLDgzLAotICAgIDEyMSwxNiwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsODcsCi0gICAgMTEwLDQwLDAsNCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwxMDcsMTAsMCwKLSAgICAxMTQsMTQzLDAsMSwxLDEsMTI0LDAsMCwxMDAsNiwwLDEwMCw5LDAsMTMzLAotICAgIDIsMCwyNSwxMjUsNCwwLDg5LDExMCwxLDAsODgsMTE2LDcsMCwxMjQsNCwKLSAgICAwLDEzMSwxLDAsMTE0LDE2MCwwLDEyNCw0LDAsODMsMTI0LDAsMCw4Myw0MCwKLSAgICAxMCwwLDAsMCwxMTcsMTg4LDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LAotICAgIDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTA1LDEwMiwzMiwxMTIsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTE1LDMyLAotICAgIDExMiwxMTcsMTE0LDEwMSwxMDgsMTIxLDMyLDEwMiwxMTEsMTE0LDMyLDk4LDk3LDk5LDEwNywxMTksCi0gICAgOTcsMTE0LDEwMCwxMTUsNDUsOTksMTExLDEwOSwxMTIsOTcsMTE2LDEwNSw5OCwxMDUsMTA4LDEwNSwKLSAgICAxMTYsMTIxLDMyLDEwMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDgwLDEyMSw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDY5LDEyMCwxMDEsOTksNjcsMTExLDEwMCwxMDEsNzcsMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw4NywxMDUsMTE2LDEwNCw3MCwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsNDAsCi0gICAgNDEsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw2NywzMiw2NSw4MCw3Myw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMywwLDAsMCwxMDUsMSwwLDAsMCwxMTcsMiwwLDAsMCwxMTIsCi0gICAgMTIxLDc4LDEwNSwyNTMsMjU1LDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsCi0gICAgMjU1LDQwLDgsMCwwLDAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LAotICAgIDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0MCw1LAotICAgIDAsMCwwLDExNywxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMTQsMTAxLDExNSwxMTYsMTE3LDEsCi0gICAgMCwwLDAsOTUsMTE3LDksMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsCi0gICAgMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LAotICAgIDEwOCwxMDEsMjA5LDEsMCwwLDExNSwyMCwwLDAsMCwwLDcsMTgsMSw0LAotICAgIDEsMjQsMSwzNSwxLDQsMSwzLDEsMTYsMSwxOSwxLDIxLDEsMTE3LAotICAgIDE1LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTA1LDExNiwKLSAgICAxMjEsMTA1LDEsMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsCisgICAgMTAxLDEyMiwzNywxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwxMTYsMTE2LDExMSwxMDksCisgICAgNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLAorICAgIDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDExMCwwLDAsMCwxMTQsMTA5LDAsCisgICAgMCwwLDEyMiwyOCwxMDEsMTIwLDExMiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsMTExLDExMCwxMDgsCisgICAgMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LAorICAgIDExNCw3MSwwLDAsMCw0MSwxMiwxMTQsNywwLDAsMCwxMTQsMTE2LDAsMCwKKyAgICAwLDExNCwxMTcsMCwwLDAsMTE0LDExOCwwLDAsMCwxMTQsMzgsMCwwLDAsCisgICAgMTE0LDExOSwwLDAsMCwyMTgsMTAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsCisgICAgMTE0LDExNCw0NywwLDAsMCwxMTQsNzYsMCwwLDAsMTE0LDExNSwwLDAsMCwKKyAgICAxMTQsMjgsMCwwLDAsMjE4LDE1LDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LAorICAgIDcwLDcwLDczLDg4LDY5LDgzLDQxLDUsMTE0LDM1LDAsMCwwLDExNCwxMjIsMCwKKyAgICAwLDAsOTAsMTYsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwKKyAgICAxMTAsOTcsMTA5LDEwMSw5MCw3LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSwxMTQsMTIzLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxNywxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDE4OSwxLDAsMCwxMTUsMjQsMCwwLDAsMCw5LDE4LAorICAgIDEsMTUsMSwxOCwxLDE4LDEsMTIsMSwzLDEsMjQsMSwyMSwxLDMsCisgICAgMSwyMSwxLDE5LDEsMTE0LDEyOSwwLDAsMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsNSwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEwMCwxLDAsCisgICAgMTA3LDIsMCwxMTQsMjIsMCwxMDAsMiwwLDgzLDEyNCwwLDAsMTA2LDEsMCwKKyAgICAxMDAsMywwLDEzMSwxLDAsOTIsMywwLDEyNSwxLDAsMTI1LDIsMCwxMjUsCisgICAgMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsMTI0LDMsMCwxMDYsMiwwLDEzMSwKKyAgICAwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywyLDAsMjUsMTAwLDYsMCwxMDcsCisgICAgMywwLDExNCw4NSwwLDEyNCwwLDAsODMsMTIxLDE2LDAsMTE2LDMsMCwxMjQsCisgICAgMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywxMTAsNDAsMCw0LDExNiw0LDAsCisgICAgMTE2LDUsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxNDMsMCwxLDEsMSwxMjQsCisgICAgMCwwLDEwMCwyLDAsMTAwLDksMCwxMzMsMiwwLDI1LDEyNSw0LDAsODksCisgICAgMTEwLDEsMCw4OCwxMTYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMTQsMTYwLDAsCisgICAgMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQxLDEwLDEyMiwxODgsNjcsMTExLDExMCwxMTgsCisgICAgMTAxLDExNCwxMTYsMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwxMTEsCisgICAgMTE1LDExNSwxMDUsOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsCisgICAgMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LAorICAgIDExNiwxMTUsMzIsMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsOTcsCisgICAgOTksMTA3LDExOSw5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LAorICAgIDEwNSwxMDgsMTA1LDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsMTIxLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSw3NywKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywxMDksCisgICAgMTAxLDExNSw0MCw0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LDgwLAorICAgIDczLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw3MSwwLDAsMCw3OCwxMTQsMTEwLAorICAgIDAsMCwwLDIzMywzLDAsMCwwLDExNCwyOSwwLDAsMCw5MCwyLDExMiwKKyAgICAxMjEsMjMzLDI1MywyNTUsMjU1LDI1NSwyMzMsMjU1LDI1NSwyNTUsMjU1LDExNCwxMzIsMCwwLDAsCisgICAgNDEsNywxMTQsMzEsMCwwLDAsMTE0LDMyLDAsMCwwLDIxOCw1LDEwOCwxMTEsCisgICAgMTE5LDEwMSwxMTQsMTE0LDEyOSwwLDAsMCwxMTQsMTE4LDAsMCwwLDExNCwxMjcsMCwKKyAgICAwLDAsMTE0LDQ0LDAsMCwwLDQxLDUsMjE4LDEzLDk4LDEyMSwxMTYsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDkwLDQsMTE0LDEwMSwxMTUsMTE2LDExNCwzNiwKKyAgICAwLDAsMCw5MCw5LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDIxOCwxMSwKKyAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNSw5NSwxMDMsMTAxLDExNiwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwyMTIsMSwwLDAsMTE1LAorICAgIDIwLDAsMCwwLDAsNywxOCwxLDQsMSwyNCwxLDM1LDEsNCwxLAorICAgIDMsMSwxNiwxLDE5LDEsMjEsMSwxMTQsMTM2LDAsMCwwLDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw2MCwwLDAsMCwxMjEsMTksMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMDYsMSwwLDEyNSwxLDAsODcsMTEwLDI0LDAsNCwxMTYsMiwKKyAgICAwLDEwNywxMCwwLDExNCw0NSwwLDEsMSwxLDEwMCwxLDAsMTI1LDEsMCwKKyAgICA4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDIsMCw3OSwxMjUsMSwwLDEyNCwKKyAgICAxLDAsODMsNDEsMywxMjIsNTEsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsCisgICAgMTE1LDEwNSwxMTEsMTEwLDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDE4MiwxLDAsMCwyMzMsCisgICAgMTI4LDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDExNCw0MSwwLDAsMCwKKyAgICAxMTQsNDAsMCwwLDAsNDEsMiwxMTQsMzUsMCwwLDAsMTE0LDQyLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxMCw5NSw5OSw5NywxMDgsOTksOTUsMTA5LDExMSwxMDAsMTAxLDIzMSwxLDAsMCwKKyAgICAxMTUsMTIsMCwwLDAsMCwyLDMsMSwxOSwxLDEzLDEsMTEsMywxMCwKKyAgICAxLDExNCwxMzgsMCwwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LAorICAgIDEyMSwxMTQsMjksMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsCiAgICAgMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsMCwwLDAsCiAgICAgMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsNSwwLDExNCwKICAgICA3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLDAsMTE1LDQ2LAogICAgIDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsMCwxMTYsNCwKICAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsMTAwLDQsMCwKICAgICAxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsMTAwLDUsMCwKLSAgICA4Myw0MCw3LDAsMCwwLDExNyw2MSwwLDAsMCw4MCwxMTQsMTA1LDExMCwxMTYsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwKLSAgICAxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCwKLSAgICA3Miw3OSw3OCw4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMDEsMTAwLDMyLDExMSwxMTAsNDYsMTE3LDEsMCwwLDAsMzUsMTE3LDcsCi0gICAgMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE3LDIsMCwwLDAsMzUsCi0gICAgMzIsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDc4LDQwLDIsMCwwLDAsCi0gICAgMTE3LDEsMCwwLDAsMzUsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsNDAsNywwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgNSwwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDcsMCwwLDAsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LDExNiwxMTUsCi0gICAgMTE5LDEwNSwxMTYsMTA0LDExNyw1LDAsMCwwLDExMiwxMTQsMTA1LDExMCwxMTYsMTE3LDYsCi0gICAgMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNiwwLDAsMCwxMTUsMTE2LAotICAgIDEwMCwxMDEsMTE0LDExNCw0MCwzLDAsMCwwLDExNyw3LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE1LDExNSw5NywxMDMsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsCi0gICAgMTA1LDExNiwxMjEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMjI4LDEsMCwKLSAgICAwLDExNSw4LDAsMCwwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTcsMTYsCi0gICAgMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LAotICAgIDk3LDEwMywxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsCi0gICAgMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MywxMDEsMTE2LDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNDYsOTksMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsMTAxLDAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDE0MiwwLDAsMTI1LDIsMCwxMTYsMCwwLDEyNCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwKLSAgICA5NywwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMiwwLDk1LDMsMCwxMTYsNCwKLSAgICAwLDEyNCwyLDAsMTAwLDIsMCwxMzEsMiwwLDExNSw5NywwLDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMDYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDI1LAotICAgIDEyNCwyLDAsOTUsMywwLDExMyw5NywwLDExMCwwLDAsMTI0LDIsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNDAsNiwKLSAgICAwLDAsMCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNywKLSAgICA5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDYsCi0gICAgMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsCi0gICAgMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCi0gICAgMjM4LDEsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwyNCwxLDEyLAotICAgIDEsMTUsMSwzMSwxLDExNyw0MCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE5LAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksCi0gICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjM2LDEsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMiwxOCw3LDEzLDEsMTE3LDExLDAsMCwwLDExNSwxMDEsCi0gICAgMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LAotICAgIDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LAotICAgIDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLAotICAgIDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LDM4LDAsMCwwLAotICAgIDgzLDEwMSwxMTYsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwzMiwxMTEsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNCwwLDAsMCwzMSwwLDAsMCwxMTUsNDksMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMSwwLDEyNSwKLSAgICAzLDAsMTE2LDAsMCwxMjQsMywwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMjQsMCwwLDEyNCwzLDAsOTUsMSwwLDExMCwwLDAsMTI0LDMsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMjUxLDEsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDEsMTIsMSwxMTcsCi0gICAgMzgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNywKLSAgICA1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAyNDksMSwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsCi0gICAgMTE3LDQyLDMsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTUsMTAxLDEwOCwxMDEsOTksMTE2LDEwNSwKLSAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsMTE1LAotICAgIDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAotICAgIDEwMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDExMCw5NywxMDksMTAxLDQ2LDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwxMTYsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLDEyMSwzMiwxMDEsMTIwLDEwNSwxMTUsCi0gICAgMTE2LDExNSwzMiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMTksNDQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0NCwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiw5Nyw5OSwKLSAgICA5OSwxMTEsMTE0LDEwMCwxMDUsMTEwLDEwMywxMDgsMTIxLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDQxLDMyLDExOSwxMDUsMTA4LDEwOCwKLSAgICAzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwMiwxMTEsCi0gICAgMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwKLSAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDExOSwxMTEsMTE0LAotICAgIDEwNywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsCi0gICAgMTEyLDExMSwxMTUsMTE2LDQ1LDEwOCwxMTEsOTcsMTAwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDczLDEwMiwzMiw5NywxMTAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsOTksMTE0LDEwMSwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE2LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTE1LDExNyw5OCwxMTUsMTAxLDExMywKLSAgICAxMTcsMTAxLDExMCwxMTYsMTA4LDEyMSwzMiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywKLSAgICAxMTYsMTExLDExNCwzMiw5NywxMTUsMTE1LDExNywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiw5NywxMDcsMTAxLDExNSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiw5NywxMTUsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsMTEwLDEwMCwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMjUsMCwwLDAsCi0gICAgMzEsMCwwLDAsMTE1LDI1NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLAotICAgIDAsMTA3LDksMCwxMjUsNSwwLDEyNCw1LDAsMTE1LDE2OCwwLDExNiw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTAwLDMsMCwxMjQsNCwwLDk1LAotICAgIDYsMCwxMjQsNCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYwLDEyNCwKLSAgICAwLDAsMTI0LDQsMCw5NSw3LDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwyNCwwLDQsMTE2LAotICAgIDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxMjQsMCwxLDEsCi0gICAgMSw4OSwxMTMsMTc3LDAsODgsMTI0LDYsMCwxMTQsMTQzLDAsMTI0LDEsMCwxMjQsCi0gICAgNCwwLDk1LDExLDAsMTEzLDE3NywwLDEyNCwxLDAsMTA2LDEyLDAsMTAwLDEsCi0gICAgMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDQsMCw5NSwxMSwwLDExMCw5LAotICAgIDAsMTAwLDMsMCwxMjQsNCwwLDk1LDYsMCwxMjIsNjAsMCwxMjEsMjMsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDQsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLAotICAgIDIsMCw4Myw4NywxMTAsMzAsMCwxLDEsMSwxMjQsNSwwLDExNSwyMjgsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsCi0gICAgODksMTEwLDEsMCw4OCw4NywxMDAsMCwwLDEwMCw0LDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsODgsMTAwLDAsMCw4Myw0MCw1LDAsMCwwLDc4LDExNywxLDAsCi0gICAgMCwwLDQ2LDEwNSwwLDAsMCwwLDg0LDcwLDQwLDE0LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICAxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCw3LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LAotICAgIDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LAotICAgIDExMSw5NywxMDAsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDQ0LDAsMCwwLDAsMSwxOCwKLSAgICAxLDEyLDEsNiw0LDEyLDMsOSwxLDEzLDEsOSwxLDMsMSwxOSwKLSAgICAxLDE5LDEsNSwyLDYsMSwxMiwyLDI1LDIsOSwxLDYsMiwyMywKLSAgICAxLDMsMSw2LDEsMTMsMSwxMiwyLDExNyw1MiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjUsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQsMiwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAxOCwxOCwzMywxMywxLDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKLSAgICAxMTUsMzgsMCwwLDAsMTAwLDMsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwxLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLAotICAgIDExNywyNTIsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsCi0gICAgMTE1LDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDEwMSw5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LAotICAgIDExNSwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywKLSAgICAxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICAxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwKLSAgICAwLDAsMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLDAsCi0gICAgMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLAotICAgIDExMCw0MCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAotICAgIDY0LDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsCisgICAgODMsNDEsNywxMjIsNjEsODAsMTE0LDEwNSwxMTAsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDMyLDExNiwxMTEsMzIsMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsCisgICAgMzIsMTA1LDEwMiwzMiw0NSwxMTgsNDcsODAsODksODQsNzIsNzksNzgsODYsNjksODIsCisgICAgNjYsNzksODMsNjksMzIsMTA1LDExNSwzMiwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMTEsCisgICAgMTEwLDQ2LDI1MCwxLDM1LDI1MCw3LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEyMiwyLAorICAgIDM1LDMyLDExNCw1NCwwLDAsMCw3OCw0MSwyLDExNCwxNDAsMCwwLDAsMTE0LAorICAgIDE0MSwwLDAsMCw0MSw3LDExNCw3LDAsMCwwLDExNCwxMTEsMCwwLDAsCisgICAgMjE4LDcsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsMTE0LDksMCwwLDAsMjE4LDUsCisgICAgMTEyLDExNCwxMDUsMTEwLDExNiwxMTQsNDcsMCwwLDAsMjE4LDYsMTE1LDExNiwxMDAsMTAxLAorICAgIDExNCwxMTQsNDEsMywyMTgsNywxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTQsMTM5LDAsCisgICAgMCwwLDExNCw5OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsCisgICAgOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMjQzLDEsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTQsMTQ2LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMywKKyAgICAwLDAsMCwxMTUsMzgsMCwwLDAsMTAwLDEsMCwxMzUsMCwwLDEwMiwxLAorICAgIDAsMTAwLDIsMCwxMDAsMywwLDEzNCwxLDAsMTI1LDEsMCwxMTYsMCwwLAorICAgIDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MSw0LAorICAgIDEyMiwyNTIsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsCisgICAgMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LDEwMSwxMTMsMTE3LAorICAgIDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiwKKyAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsMTAyLDQxLDMyLAorICAgIDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsCisgICAgMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwxMCwzMiwKKyAgICAzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywxMDMsOTcsMTA1LAorICAgIDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMTEsMTA5LDExMiwKKyAgICA5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKKyAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwwLDAsCisgICAgMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsCisgICAgOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLDExMCw0MCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNywzLDAsMTE0LDY0LDAsCisgICAgMTE2LDEsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsMSwwLAorICAgIDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsCisgICAgMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQxLDMsNzgsMTIyLAorICAgIDIzLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwNCwKKyAgICA5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LDExNCw2NywwLDAsMCw0MSwyLDExNCwKKyAgICA2NywwLDAsMCwyMTgsMTEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsNDEsNCwxMTQsNzgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCw5OSwwLAorICAgIDAsMCwxMTQsMTAwLDAsMCwwLDQxLDEsMjE4LDYsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE5LDk1LDk5LDEwNCwKKyAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LAorICAgIDMsMiwwLDAsMTE1LDEwLDAsMCwwLDAsMSwxMiwxLDEyLDEsMTUsCisgICAgMSwyNSwxLDEyMiw0MCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LDEwMSw5OSwxMDcsCisgICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsCisgICAgNjUsMCwwLDAsNDEsMiwxMTQsMTQ4LDAsMCwwLDExNCwxNDksMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTQ4LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwyNTEsMSwKKyAgICAwLDAsMTE1LDYsMCwwLDAsMCw4LDIxLDYsMTMsMSwxMTQsMTUwLDAsCisgICAgMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCisgICAgMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsCisgICAgMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsCisgICAgMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDEsCisgICAgMywxMjIsNDksNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwKKyAgICAxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgNDUsMTA1LDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLDAsMCwxMjQsMSwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNywwLDExNCw0NSwwLDExNiwyLDAsCisgICAgMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwKICAgICAxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsNDAsMywKLSAgICAwLDAsMCw3OCwxMTcsMjMsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMywwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsCi0gICAgMTE3LDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSw0MCwxLDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw2NywyLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMCwxLDEyLDEsMTIsMSwxNSwxLDI1LDEsMTE3LDQwLDAsCi0gICAgMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDQ2LDYwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw3OCw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMTE3LDE5LDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDU5LDIsMCwwLDExNSw2LDAsMCwwLDAsOCwyMSw2LDEzLAotICAgIDEsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwKLSAgICAwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwKLSAgICAwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwKLSAgICAxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywKLSAgICAwLDAsMCwxMTcsNDksMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwKLSAgICAxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwKLSAgICA5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0Niw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwKLSAgICAwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNywwLDExNCwKLSAgICA0NSwwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsCi0gICAgMCwwLDc4LDExNywyNywwLDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwKLSAgICAxMTYsMzIsOTcsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMjAsMCwwLDAsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE1LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNSwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDc5LDIsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTIsMCwwLDAsCisgICAgMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsMjksMTIzLDMzLDExNCwKKyAgICAxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwwLDAsNDEsCisgICAgNCwxMTQsNywwLDAsMCwyMTgsMjAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNCwxNDcsMCwwLAorICAgIDAsMTE0LDQ3LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDIxOCw4LDEwMiwKKyAgICAxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MSwxLDIxOCwzLDEwMiwxMjAsMTEwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMTQsMTAxLDExMywxMTcsMTA1LAorICAgIDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLAorICAgIDExMiwxMDEsMTE0LDE1LDIsMCwwLDExNSw4LDAsMCwwLDAsMSwxNSwxLAorICAgIDE4LDEsMTIsMSwxMjIsNTIsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwKKyAgICA5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsCisgICAgNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCw2NSwwLDAsCisgICAgMCw0MSwyLDExNCwxNTMsMCwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCw0MSwxLDExNCwxNTMsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LAogICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywKLSAgICAxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyNSwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsCi0gICAgMCwwLDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzcsMiwwLDAsMTE1LDYsMCwwLAotICAgIDAsMCwyLDE4LDUsMTMsMSwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwKLSAgICAwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLAotICAgIDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsCi0gICAgMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LAotICAgIDQ3LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwxMTEsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDUsMCwxMTYsMiwwLDEwMCwKLSAgICAxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDIsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwKLSAgICAxMjQsMSwwLDEzMSwyLDAsODMsNDAsMywwLDAsMCw3OCwxMTcsMjUsMCwKLSAgICAwLDAsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICAxMDIsMTIwLDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjQsMCwwLDAsOTUsCi0gICAgMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwKLSAgICAxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw5MCwyLDAsMCwxMTUsOCwwLDAsMCwKLSAgICAwLDEsMTUsMSwxOCwxLDEyLDEsMTE3LDUwLDAsMCwwLDk1LDExNCwxMDEsCi0gICAgMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsCi0gICAgMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyNCwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLAotICAgIDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsODgsMiwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAotICAgIDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwKLSAgICAwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsCi0gICAgMTE2LDIsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDEsMCwxMjUsCi0gICAgNCwwLDExNiwzLDAsMTA2LDQsMCwxMjQsNCwwLDEwNiw1LDAsMTI0LDMsCi0gICAgMCwxMDAsMiwwLDI1LDEzMSwxLDAsMTE2LDYsMCwxMzEsMiwwLDEsMTEwLAotICAgIDAsMCwxMjQsMiwwLDgzLDQwLDQsMCwwLDAsMTE3LDg2LDAsMCwwLAotICAgIDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKLSAgICA5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEyMSwKLSAgICAzMiwxMDAsMTAxLDEwOCwxMDEsMTAzLDk3LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLAotICAgIDMyLDMyLDMyLDExNSwxMDEsMTA4LDEwMiw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0MCw0MSw0NiwxMTcsNDQsMCwwLDAsNzgsMTExLDExNiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEyMywxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMDUsMCwwLDAsMCw3OCw0MCw3LDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwKLSAgICAxMDgsMTAxLDExMCwxMTcsOSwwLDAsMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwxMTAsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDQwLDUsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsCi0gICAgMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMTE3LDMsMCwwLDAsMTA5LAotICAgIDExNSwxMDMsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNSwxMDQsMTA1LDEwOSw5OSwyLDAsMCwxMTUsMTAsMCwwLDAsMCw2LDIxLAotICAgIDEsMjQsMSw2LDEsMzIsMSwxMTcsMTcsMCwwLDAsOTUsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMSwwLDAsMCw2LDAsMCwwLDY2LDAsCi0gICAgMCwwLDExNSwxNzMsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCi0gICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLAotICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSwKLSAgICA0LDAsMTAwLDE0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwxLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAxLDQsMCwxMDEsOCwwLDEwMSw5LDAsMTAxLDEwLDAsCi0gICAgMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMSwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsCi0gICAgMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsCi0gICAgMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLAotICAgIDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMTQsMCw4Myw0MCwxNSwwLDAsMCwxMTcsMTUsMCwwLDAsNjYsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNDQsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LAotICAgIDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LAotICAgIDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsCi0gICAgOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiwKLSAgICA5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwKLSAgICAxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwKLSAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsCi0gICAgMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLDIsMCwwLAotICAgIDAsNzgsMTE3LDI0LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDM5LAotICAgIDEyMywxMjUsMzksMzIsNDAsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDAsCi0gICAgMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywKLSAgICA4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLDIsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgMTI1LDIsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjcsMCwwLDAsCi0gICAgNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSwzOSwwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTYsCi0gICAgMCwxMDAsMSwwLDgzLDExNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsMTE0LDM1LDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLAotICAgIDAsMTE3LDExMywwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTEyLDk3LDExNiwKLSAgICAxMDQsMzksMzIsMTA1LDExNSwzMiwxMDEsMTE4LDEwMSwxMTQsMzIsMTE1LDExMiwxMDEsOTksMTA1LAotICAgIDEwMiwxMDUsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwKLSAgICA5NywxMTQsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LAotICAgIDEwMSwxMDAsMzIsOTcsMzIsMTAyLDk3LDEwNSwxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDAsMywwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTAsMCwwLDAsMTA1LDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0MCwzLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMjksMiwwLAotICAgIDAsMTE1LDYsMCwwLDAsMCw3LDEyLDEsNCwxLDExNywyNywwLDAsCi0gICAgMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwzLDAsMCwwLDksMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDg4LDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTI1LDIsMCwxMjEsMjAsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsCi0gICAgMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDQ2LDAsMSwxLDEsMTI0LAotICAgIDIsMCwxMiwxMTQsNzYsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsCi0gICAgNiwwLDExNCw3NiwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYxLDExMCwKLSAgICAwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCwxLDAsODMsNDAsMiwKLSAgICAwLDAsMCwxMTcsMjMsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywzMiw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwKLSAgICA0MCw1LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksCi0gICAgOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsCi0gICAgMTE3LDEyLDAsMCwwLDEwNSwxMTAsMTA1LDExNiw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwwLAotICAgIDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxNDAsMiwwLDAsMTE1LDE0LDAsMCwwLDAsNiwKLSAgICAxNSwxLDMsMSwyMCwxLDMsMSwyMiwxLDEzLDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTcsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKLSAgICA5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsCi0gICAgOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxNTQsCi0gICAgMiwwLDAsMTE1LDIsMCwwLDAsMCw0LDExNywyNCwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDU2LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywKLSAgICAxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsCi0gICAgMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwKLSAgICAwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTYwLDIsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsCi0gICAgMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUyLDAsMCwwLDgyLDEwMSwxMTYsCi0gICAgMTE3LDExNCwxMTAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsCi0gICAgMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDExMCwxMDEsMTE4LDEwMSwxMTQsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSwKLSAgICA0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsCi0gICAgMTAxLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTY2LDIsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDc4LDQwLDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsCi0gICAgMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LAotICAgIDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE3LDExLDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsCi0gICAgMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNiwyLDAsMCwKLSAgICAxMTUsMjgsMCwwLDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsMTAsMywKLSAgICAxLDMsMSwzLDEsMjcsMTEsMywxLDIxLDUsMywxLDIxLDUsMywKLSAgICAxLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNiwwLDAsMCw2NiwwLDAsMCwxMTUsMTczLDAsMCwwLDEyNCwKLSAgICAwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAotICAgIDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsCi0gICAgMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCwxNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMSwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LDAsMTAxLAotICAgIDgsMCwxMDEsOSwwLDEwMSwxMCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLAotICAgIDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLAotICAgIDAsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDEsMTE0LDExNywxNDIsMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwKLSAgICAxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LAotICAgIDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIyLDAsMCwwLDYwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksCi0gICAgOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMSwwLDAsCi0gICAgMCwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE4MiwyLAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI2LDAsMCwwLDcwLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwKLSAgICAwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwKLSAgICAwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTg2LDIsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMywxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDEwMCwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDMyLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCi0gICAgMiwwLDEyNSwzLDAsMTI0LDMsMCw5Niw1LDAsMTI0LDMsMCw4Myw4NywKLSAgICAxMTAsNDYsMCwxLDEsMSwxMjQsMiwwLDEyLDExNCw4OCwwLDEyNCwxLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTE0LDg4LDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsCi0gICAgODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwwLDAsMCw3NiwKLSAgICAxMTEsOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQ2LDc4LDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw5NSwxMDUsMTA5LDExMiwxMTcsMTEsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICA5NSw5NSw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsMSwwLDAsMCwxMDksCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDIsMCwwLAotICAgIDExNSwxOCwwLDAsMCwwLDYsMTUsMSwzLDEsMTgsMiw2LDEsOCwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMTE3LDI2LDAsMCwwLDcwLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LAorICAgIDExMCwxMywyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLAorICAgIDExNCwxNTUsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsCisgICAgMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsCisgICAgMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsCisgICAgMCw4Myw0MSwzLDEyMiw0Nyw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwKKyAgICAxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwMiwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsMCwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE1LDQ1LDAsMTE2LDIsCisgICAgMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsCisgICAgMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwKKyAgICAwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQxLDMsNzgsMTIyLDI3LDEyMywzMywKKyAgICAxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLAorICAgIDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDY3LDAsMCwwLDQxLDQsCisgICAgMTE0LDk2LDAsMCwwLDIxOCw5LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCisgICAgMTE0LDE0NywwLDAsMCwxMTQsNDcsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLAorICAgIDAsMTE0LDE1MiwwLDAsMCw0MSwxLDExNCwxNTMsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDI0LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwKKyAgICAxMTQsMjYsMiwwLDAsMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTgsMSwKKyAgICAxMiwxLDEyMiw1MCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsCisgICAgMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExOSwKKyAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwwLDQxLDIsMTE0LAorICAgIDE1MywwLDAsMCwxMTQsMTU3LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsCisgICAgMTE0LDE1MywwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTE0LDEwMSwxMTMsCisgICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwyNCwyLDAsMCwKKyAgICAxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLDExNCwxNTgsMCwwLDAsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwKKyAgICAyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwxLDAsMTI0LDMsCisgICAgMCwxMzEsMSwwLDExNCw4MywwLDEwMCwyLDAsMTI1LDQsMCwxMTYsMiwwLAorICAgIDEwNiwzLDAsMTI0LDQsMCwxMDYsNCwwLDEyNCwzLDAsMTAwLDMsMCwyNSwKKyAgICAxMzEsMSwwLDExNiw1LDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDIsMCwKKyAgICA4Myw0MSw0LDEyMiw4Niw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLAorICAgIDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywxMTYsMTA1LDExMCwxMDMsCisgICAgMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsNzgsMTIyLDQ0LDc4LDExMSwKKyAgICAxMTYsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsMzIsMTAwLDEwNSwxMTQsMTAxLAorICAgIDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMjMsMTI1LDU4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLAorICAgIDEwMywzMiw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE0LDcxLDAsMCwwLDQxLAorICAgIDYsMjE4LDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNCwzMSwKKyAgICAwLDAsMCwyMTgsOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMjE4LDQsCisgICAgMTE5LDk3LDExNCwxMTAsMTE0LDQ3LDAsMCwwLDIxOCwxMyw3MywxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDEsNSwxMTQsNzgsMCwwLDAsMTE0LAorICAgIDE1MiwwLDAsMCwyMTgsNiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDIxOCw4LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDMsMTA5LDExNSwxMDMsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDEwMiwxMDUsMTEwLAorICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksMzUsMiwwLAorICAgIDAsMTE1LDEwLDAsMCwwLDAsNiwyMSwxLDI0LDEsNiwxLDMyLDEsCisgICAgMTE0LDE2NiwwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAorICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw5MywwLDAsMCwxMTYsCisgICAgMCwwLDEyNCwxLDAsMTI0LDAsMCwxMzEsMiwwLDEyNSwyLDAsMTE2LDEsCisgICAgMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMSwwLDExNiwyLDAsCisgICAgMTA2LDMsMCwxMDcsNiwwLDExNCw3OSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsCisgICAgMSwwLDI1LDEyNSw0LDAsMTI0LDMsMCwxMDYsNCwwLDEyNCw0LDAsMTMxLAorICAgIDEsMCwxLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LDgzLDEyNCwzLAorICAgIDAsMTA2LDUsMCwxMzEsMCwwLDgzLDEwMCwxLDAsODMsNDEsMiwxMjIsNTcsCisgICAgNzYsMTExLDk3LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwKKyAgICAxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsCisgICAgMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsCisgICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMDUsMTE2LDQ2LDc4LDQxLDYsMjE4LDE2LDExNSwxMTIsCisgICAgMTAxLDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDIxOCwxMiwKKyAgICA5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDExNCw3LDAsMCwKKyAgICAwLDIxOCw3LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwyMTgsNCwxMDEsMTIwLDEwMSw5OSwKKyAgICAyMTgsNCwxMDgsMTExLDk3LDEwMCw0MSw1LDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsCisgICAgMCwwLDIxOCw0LDExNSwxMTIsMTAxLDk5LDIxOCw3LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDExNSwyMTgsNiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsMTA4LDExMSw5NywxMDAsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDQ4LDIsMCwwLDExNSwKKyAgICAxNCwwLDAsMCwwLDMsMTUsMSwxMiwxLDE1LDEsMTMsMSwxMywxLAorICAgIDExLDIsMTE0LDE3NSwwLDAsMCw5OSw0LDAsMCwwLDAsMCwwLDAsCisgICAgMTEsMCwwLDAsMTksMCwwLDAsNjcsMCwwLDAsMTE1LDI0MywxLDAsCisgICAgMCwxMDUsMCwwLDEyNSw0LDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw5LDAsCisgICAgMTE0LDMxLDAsMTI0LDIsMCwxMjQsNCwwLDEwMCwyLDAsNjAsMTEwLDYsMCwKKyAgICAxMDAsMywwLDEyNSwyLDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LAorICAgIDYyLDAsMTI0LDMsMCwxMjQsNCwwLDEwMCw0LDAsNjAsMTEwLDAsMCwxMjQsCisgICAgMCwwLDEwMCwxLDAsMTAwLDUsMCwxMzMsMiwwLDI1LDEyNSw1LDAsMTI0LAorICAgIDAsMCwxMDAsNSwwLDEwMCw2LDAsMTMzLDIsMCwyNSwxMjUsNiwwLDEyNCwKKyAgICAwLDAsMTAwLDYsMCwxMDAsNywwLDEzMywyLDAsMjUsMTI1LDcsMCwxMjQsCisgICAgNSwwLDExNiwwLDAsMTA3LDMsMCwxMTQsMTY4LDAsMTAwLDgsMCwxMDYsMSwKKyAgICAwLDEyNCwyLDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw4LDAsMTE2LDIsMCwKKyAgICAxMjQsOCwwLDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsMTI0LDQsMCwKKyAgICAxNDEsMSwwLDEzMCwxLDAsMTEwLDExNiwwLDExNiw0LDAsMTI0LDYsMCwxMzEsCisgICAgMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMjI2LDAsMTAwLDksMCwxMDYsMSwKKyAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwKKyAgICAxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOCwwLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTAsNTgsMCwxMTYsNCwwLDEyNCw3LDAsMTMxLDEsMCwxMDAsNSwwLDEwNywKKyAgICAzLDAsMTE0LDI4LDEsMTAwLDEwLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsMTMxLDEsMCwxLDExNiw1LAorICAgIDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMSwwLAorICAgIDEwMCwxLDAsMTA3LDksMCwxMTQsMjI5LDEsMTIxLDIwLDAsMTE2LDYsMCwxMjQsCisgICAgMSwwLDEwMCwxMSwwLDI1LDEzMSwxLDAsMTI1LDksMCw4NywxMTAsMTgsMCwKKyAgICA0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDgwLDEsMSwxLDEsODksMTEwLDYyLAorICAgIDAsODgsMTE2LDgsMCwxMjQsNiwwLDEzMSwxLDAsMTI0LDksMCwxMDcsMywKKyAgICAwLDExNCwxNDIsMSwxMDAsMTIsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwxMzEsMSwwLDEsMTE2LDMsMCwKKyAgICAxMjQsOCwwLDEyNCw0LDAsMTQxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTIxLAorICAgIDE4LDAsMTI0LDEsMCwxMDAsMTMsMCwyNSwxMDAsMTQsMCw2NCwxMjUsMTAsMCwKKyAgICA4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDE4MCwxLDEsMSwKKyAgICAxLDg5LDExMywyMjksMSw4OCwxMTYsOCwwLDEyNCw3LDAsMTMxLDEsMCwxMjQsCisgICAgMTAsMCwxMDcsMywwLDExNCwyMjksMSwxMTYsMywwLDEwMCwxMiwwLDEwNiwxLAorICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEyNCw0LDAsMTQxLDEsMCwxMzAsMSwwLAorICAgIDExMywyMjksMSwxMTAsMCwwLDEyNCwwLDAsMTAwLDcsMCwxMDAsMSwwLDEzMywKKyAgICAyLDAsMjUsODMsNDEsMTUsOTcsMTIyLDEsMCwwLDg2LDk3LDEwOCwxMDUsMTAwLAorICAgIDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA0LDEwMSw5NywxMDAsMTAxLDExNCwzMiwxMTEsCisgICAgMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsNDUsMTA1LDExMCwzMiwKKyAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMDMsOTcsMTA1LDExMCwxMTUsMTE2LAorICAgIDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDQwLDEwNSwKKyAgICAxMDIsMTAsMzIsMzIsMzIsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCw0MSwzMiw5NywxMTAsMTAwLAorICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDk4LAorICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDk5LDk3LDExMCwKKyAgICAzMiw5OCwxMDEsMzIsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMTAwLDMyLDk4LDEyMSwzMiwKKyAgICA5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA2NSwxMDgsMTA4LDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLAorICAgIDEwMSwxMTAsMTA0LDk3LDExMCw5OSwxMDEsMzIsMTAxLDExNCwxMTQsMTExLDExNCwzMiwxMTQsMTAxLAorICAgIDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsCisgICAgMTE1LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSw5NywxMDMsCisgICAgMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTA1LDExNSwzMiwxMDUsMTEwLDk5LAorICAgIDExMSwxMTQsMTE0LDEwMSw5OSwxMTYsMzIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMjEsCisgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDEwMiwxMTEsCisgICAgMTE3LDExMCwxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTE1LDExNiw5NywxMDgsMTAxLDQ2LAorICAgIDMyLDY5LDc5LDcwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsCisgICAgMTE1LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsCisgICAgOTcsMzIsMTA1LDExNSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMTQsMTE3LDExMCw5OSw5NywxMTYsMTAxLDEwMCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw3OCwxMTQsNjcsMCwwLDAsMTIyLDEwLDYwLDk4LDEyMSwKKyAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDYyLDExNCwzNSwwLDAsMCwxMTQsMTIsMCwwLAorICAgIDAsMjMzLDgsMCwwLDAsMjMzLDEyLDAsMCwwLDEyMiwzMCw5OCw5NywxMDAsCisgICAgMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTEwLAorICAgIDMyLDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDEyMiw0MywxMTQsMTAxLDk3LAorICAgIDk5LDEwNCwxMDEsMTAwLDMyLDY5LDc5LDcwLDMyLDExOSwxMDQsMTA1LDEwOCwxMDEsMzIsMTE0LAorICAgIDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwKKyAgICAzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDEyMiw0OCwxMTQsMTAxLDk3LDk5LDEwNCwxMDEsCisgICAgMTAwLDMyLDY5LDc5LDcwLDMyLDExOSwxMDQsMTA1LDEwOCwxMDEsMzIsMTE0LDEwMSw5NywxMDAsCisgICAgMTA1LDExMCwxMDMsMzIsMTE1LDEwNSwxMjIsMTAxLDMyLDExMSwxMDIsMzIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDIxOCw1LDEwOSwxMTYsMTA1LDEwOSwKKyAgICAxMDEsMTIyLDI2LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsMTE1LAorICAgIDExNiw5NywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEyMywzMywxMTQsMTI1LDIxOCw0LDExNSwKKyAgICAxMDUsMTIyLDEwMSwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsMywwLDQxLDksCisgICAgMjE4LDEyLDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LDY2LDY5LDgyLDExNCw0NywKKyAgICAwLDAsMCwxMTQsMTQ2LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDMxLDAsCisgICAgMCwwLDIxOCw4LDY5LDc5LDcwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTQsMCwwLAorICAgIDAsMTE0LDEwNCwwLDAsMCwxMTQsMTksMCwwLDAsNDEsMTEsMTE0LDUzLDAsCisgICAgMCwwLDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDkwLDExLDEwMSwxMjAsOTksOTUsCisgICAgMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsOTAsNSwxMDksOTcsMTAzLDEwNSw5OSw5MCwxMywKKyAgICAxMTQsOTcsMTE5LDk1LDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsOTAsOCwxMTQsCisgICAgOTcsMTE5LDk1LDExNSwxMDUsMTIyLDEwMSwxMTQsMTQ1LDAsMCwwLDIxOCwxMiwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDExLDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsOTUsMTE1LDEwNSwxMjIsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LAorICAgIDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMDQsMTAxLDk3LDEwMCwxMDEsCisgICAgMTE0LDYxLDIsMCwwLDExNSw3NiwwLDAsMCwwLDExLDYsMSwxMiwxLAorICAgIDEzLDMsNiwxLDEyLDEsMTMsMSwxNiwxLDE2LDEsMTYsMSwxMiwxLAorICAgIDE4LDEsMTAsMSwxOCwxLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTgsMSwKKyAgICAxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwyMCwxLDEzLDEsNSwyLAorICAgIDE4LDEsMTUsMSwxMCwxLDE4LDEsMywxLDE4LDEsMTMsMSw1LDIsCisgICAgMTgsMSwxNSwxLDE1LDEsMTE0LDE4NSwwLDAsMCw5OSw0LDAsMCwwLAorICAgIDAsMCwwLDAsNSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxMTUsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMjUsNCwwLDExNiwyLDAsMTI0LDQsMCwxMTYsMywwLDEzMSwyLDAsCisgICAgMTE0LDc4LDAsMTE2LDQsMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMCwxLAorICAgIDEyNCwzLDAsMTAwLDIsMCwxMDcsOSwwLDExNCw3NCwwLDExNiw1LDAsMTA2LAorICAgIDYsMCwxMjQsNCwwLDEyNCwzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LAorICAgIDQsMCw4MywxMTYsNywwLDEwMCwzLDAsMTA2LDgsMCwxMjQsMiwwLDEzMSwKKyAgICAxLDAsMTAwLDQsMCwxMjQsMSwwLDEwMCw1LDAsMTI0LDIsMCwxMzEsMSwKKyAgICAyLDEzMCwxLDAsMTAwLDIsMCw4Myw0MSw2LDEyMiw2MCw2NywxMTEsMTA5LDExMiwKKyAgICAxMDUsMTA4LDEwMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMTUsMzIsCisgICAgMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTUsMTE4LDk3LDEwOCwKKyAgICAxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LAorICAgIDEwMSw5NywxMDAsMTAxLDExNCw0MCw0MSw0NiwxMjIsMjEsOTksMTExLDEwMCwxMDEsMzIsMTExLAorICAgIDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw3OCwKKyAgICAxMjIsMjMsNzgsMTExLDExMCw0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwKKyAgICAxMTYsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsNjcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDQxLDksMjE4LDcsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw5MCw1LAorICAgIDEwOCwxMTEsOTcsMTAwLDExNSwyMTgsMTAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LAorICAgIDEwMSwyMTgsMTAsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNCwxNDYsMCwKKyAgICAwLDAsMTE0LDk2LDAsMCwwLDkwLDE2LDk1LDEwMiwxMDUsMTIwLDk1LDk5LDExMSwKKyAgICA5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE0LDE0NywwLDAsMCwxMTQsNDcsCisgICAgMCwwLDAsNDEsNSwxMTQsNTMsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAxMzQsMCwwLDAsMTE0LDEzNSwwLDAsMCwyMTgsNCw5OSwxMTEsMTAwLDEwMSwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsCisgICAgOTUsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMTE2LDIsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTUsMSwxNSwxLAorICAgIDEzLDEsMTIsMSwxOSwxLDQsMiwxOCwxLDExNCwxOTAsMCwwLDAsMTE0LAorICAgIDcxLDAsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw0LDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDc2LDAsMCwwLDExNiwwLAorICAgIDAsMTE2LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMDYsMiwwLAorICAgIDExNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjQsMywwLAorICAgIDEwNiwyLDAsMTE2LDMsMCwxMjQsMiwwLDEzMSwxLDAsMTMxLDEsMCwxLAorICAgIDEyNCwzLDAsMTA2LDIsMCwxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDEzMSwxLDAsMSwxMjQsMywwLDgzLDQxLDEsMTIyLDgwLDY3LDExMSwKKyAgICAxMDksMTEyLDEwNSwxMDgsMTAxLDMyLDk3LDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsCisgICAgMTAxLDk5LDExNiwzMiwxMDUsMTEwLDExNiwxMTEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMTcsCisgICAgMTE2LDMyLDExNiwxMTEsMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsNDUsOTksMTExLDEwOSwxMTIsCisgICAgMTA1LDEwOCwxMDEsMTAwLDEwLDMyLDMyLDMyLDMyLDEwMiwxMDUsMTA4LDEwMSw0Niw0MSw2LAorICAgIDIxOCw5LDk4LDEyMSwxMTYsMTAxLDk3LDExNCwxMTQsOTcsMTIxLDExNCwxODAsMCwwLDAsCisgICAgMjE4LDYsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE0LDE3LDAsMCwwLDExNCwxODYsMCwKKyAgICAwLDAsOTAsNSwxMDAsMTE3LDEwOSwxMTIsMTE1LDQxLDQsMTE0LDE4OSwwLDAsMCwKKyAgICAxMTQsMTc4LDAsMCwwLDExNCwxODQsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNywKKyAgICA5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTExLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsCisgICAgMTAxLDEyOCwyLDAsMCwxMTUsMTAsMCwwLDAsMCwzLDEyLDEsMTksMSwKKyAgICAxOSwxLDIyLDEsMTE0LDE5MywwLDAsMCw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4OSwKKyAgICAwLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LDAsMCwxMjUsMSwwLDExNiwKKyAgICAxLDAsMTA2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTA2LDMsMCwxMjUsMiwKKyAgICAwLDEyNCwxLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwKKyAgICAxMTYsMSwwLDEwNiw1LDAsMTAwLDIsMCwxMDAsMywwLDEzMSwyLDAsMTI1LAorICAgIDQsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLAorICAgIDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEzMSwxLDAsODMsNDEsNCwxMjIsMTIxLAorICAgIDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTE0LDEwMSwxMTIsCisgICAgMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICAzMiw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDg1LDExMCwxMDUsMTE4LDEwMSwxMTQsMTE1LDk3LDEwOCwzMiwxMTAsMTAxLDExOSwxMDgsCisgICAgMTA1LDExMCwxMDEsMzIsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDMyLDEwNSwxMTUsMzIsMTE3LAorICAgIDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTAwLAorICAgIDEwNSwxMTAsMTAzLDQ2LDEwLDMyLDMyLDMyLDMyLDExNCw3MSwwLDAsMCw3OCw4NCwKKyAgICA0MSw3LDIxOCw4LDExNiwxMTEsMTA3LDEwMSwxMTAsMTA1LDEyMiwxMDEsMTE0LDQ5LDAsMCwKKyAgICAwLDkwLDcsNjYsMTIxLDExNiwxMDEsMTE1LDczLDc5LDkwLDgsMTE0LDEwMSw5NywxMDAsCisgICAgMTA4LDEwNSwxMTAsMTAxLDkwLDE1LDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsOTUsMTAxLDExMCw5OSwKKyAgICAxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDI1LDczLDExMCw5OSwxMTQsMTAxLDEwOSwxMDEsMTEwLDExNiwKKyAgICA5NywxMDgsNzgsMTAxLDExOSwxMDgsMTA1LDExMCwxMDEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwKKyAgICAyMTgsNiwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDQxLDUsMjE4LDEyLDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNCwxOTQsMCwwLDAsOTAsMjEsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTE0LDEwMSw5NywxMDAsCisgICAgMTA4LDEwNSwxMTAsMTAxLDIxOCw4LDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMyw5MCwxNSwKKyAgICAxMTAsMTAxLDExOSwxMDgsMTA1LDExMCwxMDEsOTUsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLAorICAgIDEwMCwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMzgsMiwwLAorICAgIDAsMTE1LDEwLDAsMCwwLDAsNSwxMiwxLDE4LDEsMTUsMSwxOCwxLAorICAgIDExNCwxOTgsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwKKyAgICAwLDAsMzUsMCwwLDAsNjcsMCwwLDAsMTE1LDE1LDEsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMDAsMSwwLDEwMCwwLDAsMTMxLDMsMCwxMjUsMSwKKyAgICAwLDExNiwxLDAsMTI0LDEsMCwxMDAsMiwwLDEzMSwyLDAsMTE0LDc0LDAsCisgICAgMTIxLDE3LDAsMTI0LDEsMCwxMDYsMiwwLDEyNCwwLDAsMTMxLDEsMCw4MywKKyAgICA4NywxMTMsNzQsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDcwLDAsMSwxLAorICAgIDEsODksMTEzLDc0LDAsODgsMTEwLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwKKyAgICA0LDAsMTI1LDIsMCw4NywxMTAsMTgsMCw0LDExNiw1LDAsMTA3LDEwLDAsCisgICAgMTE0LDEwNywwLDEsMSwxLDg5LDExMCwyOSwwLDg4LDEyNCwyLDAsMTAwLDAsCisgICAgMCwxMDcsOSwwLDExNCwxMzYsMCwxMTYsNiwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMDYsMiwwLDEzMSwwLDAsODMsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNywwLAorICAgIDEyNSwzLDAsODcsMTEwLDI0LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxNzUsCisgICAgMCwxLDEsMSwxMDAsMywwLDEyNSwzLDAsODksMTEwLDEsMCw4OCwxMjEsCisgICAgMTMsMCwxMjQsMCwwLDEwNiw4LDAsMTI1LDQsMCw4NywxMTAsNTksMCw0LAorICAgIDExNiw1LDAsMTA3LDEwLDAsMTE0LDI1MCwwLDEsMSwxLDEyNCwxLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwyMzAsMCwxMDAsNCwwLDEwNiw5LDAsMTI0LDMsCisgICAgMCwxMzEsMSwwLDgzLDEwMCw1LDAsMTA2LDksMCwxMjQsMywwLDEyNCwxLAorICAgIDAsMTMxLDIsMCw4Myw4OSwxMTAsMTcsMCw4OCwxMDAsNiwwLDEwNiw5LDAsCisgICAgMTI0LDMsMCwxMjQsNCwwLDEzMSwyLDAsODMsMTAwLDAsMCw4Myw0MSw3LAorICAgIDc4LDIxOCwxMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDIxOCwxMSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMjUwLDEsNjMsMTIyLDEzLDYwLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDYyLDEyMiwyMCw2MCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMjMsMzMsMTE0LDEyNSwKKyAgICA0MSw2MiwxMjIsMjMsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDYyLDQxLDEwLDExNCw2MiwwLAorICAgIDAsMCwxMTQsNjAsMCwwLDAsMTE0LDIwMCwwLDAsMCwyMTgsOSw2OSwxMjAsCisgICAgOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMjE4LDgsOTUsOTUsMTE1LDExMiwxMDEsOTksOTUsCisgICAgOTUsMjE4LDE0LDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsMTE0LDE2OCwwLDAsMCwxMTQsNTcsMCwwLDAsMjE4LDgsOTUsOTUsMTAyLAorICAgIDEwNSwxMDgsMTAxLDk1LDk1LDExNCw0NywwLDAsMCw0MSw1LDExNCwxNzQsMCwwLAorICAgIDAsMTE0LDE2MywwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsMTI1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLAorICAgIDExMiwxMTQsMTUyLDIsMCwwLDExNSw0NiwwLDAsMCwwLDIsMTgsMSwxNSwKKyAgICAyLDMsMSwxNywxLDEzLDEsOCwxLDMsMSwxMywxLDEzLDEsNSwKKyAgICAyLDEyLDEsMTYsNCwzLDEsMTMsMSwxMywxLDExLDEsMywxLDEzLAorICAgIDEsMTMsMSwxMiwxLDEzLDIsMjEsMiwxMTQsMjA2LDAsMCwwLDk5LDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsCisgICAgMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLAorICAgIDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwKKyAgICAxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsCisgICAgNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsODMsNDEsOCwyMTgsMTcsCisgICAgOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsCisgICAgMTIxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEyNCwxLDAsMTI0LDAsCisgICAgMCw5NSwwLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsOTUsMiwwLAorICAgIDEwMCwwLDAsODMsNDEsMSw3OCw0MSwzLDIxOCw3LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNCwyMDMsMCwwLDAsMjE4LDUsOTUsMTE1LDExMiwxMDEsOTksNDEsMiwKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzksMCwwLDAsMTg4LDIsCisgICAgMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI2LDk1LDEwNSwxMTAsCisgICAgMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSwKKyAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLAorICAgIDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsOTUsMSwwLDEyNCwwLDAsCisgICAgMTA2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwKKyAgICA1LDAsNjAsMTAwLDAsMCw4Myw0MSwyLDc4LDg0LDQxLDYsMTE0LDIwOSwwLAorICAgIDAsMCwyMTgsMTMsOTUsMTA1LDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDUsMTEwLAorICAgIDEwMywxMTQsMjA4LDAsMCwwLDExNCw3LDAsMCwwLDExNCwxNjksMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDQxLDEsMTE0LDc4LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5OCwwLDAsMCwKKyAgICAxOTIsMiwwLDAsMTE1LDQsMCwwLDAsMCw0LDEyLDEsMTIyLDI3LDk1LAorICAgIDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSwKKyAgICA0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDE3LDAsMCwwLDcxLDAsMCwwLDExNSwKKyAgICAxMjEsMCwwLDAsMTIyLDEwMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMiwwLAorICAgIDExNiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI0LDEsMCw2OCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTE0LDc4LDAsMTIxLDE3LDAsMTE2LDIsMCwxMDYsCisgICAgMywwLDEyNCwyLDAsMTA2LDQsMCw2MSw4NywxMTMsMTAwLDAsNCwxMTYsNSwKKyAgICAwLDEwNywxMCwwLDExNCw3NCwwLDEsMSwxLDg5LDExMywxMDAsMCw4OCwxMTAsCisgICAgMjIsMCwxMTYsNiwwLDEwMCwzLDAsMTI0LDIsMCwxMDYsNCwwLDEyNCwyLAorICAgIDAsMTA2LDcsMCwxMzEsMywwLDEsODcsMTAwLDAsMCwxMDAsNCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCw5NSw4LDAsODgsMTAwLDAsMCw4Myw0MSw1LDc4LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLAorICAgIDAsMTE1LDAsMCwwLDExNSwyNywwLDAsMCwxMjQsMCwwLDkzLDE3LDAsCisgICAgMTI1LDEsMCwxMjQsMSwwLDEwMCwwLDAsMTA3LDksMCw4NiwxLDExMywzLAorICAgIDAsMTAwLDAsMCw4Myw0MSwxLDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LAorICAgIDIyLDAsMCwwLDkwLDMsOTcsMTE0LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyNTAsOSw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAorICAgIDExMiwxMTQsNjIsMjAyLDIsMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsNDUsCisgICAgOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsCisgICAgMTIxLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0Niw2MCwxMDgsMTExLDk5LDk3LAorICAgIDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEyMiwxOCwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwzNSwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSw3MCw0MSw5LDExNCwyMDksMCwwLDAsMjE4LDMsOTcsMTEwLDEyMSwxMTQsNywKKyAgICAwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTA0LDAsCisgICAgMCwwLDExNCwxNDYsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjEwLDAsMCwKKyAgICAwLDQxLDMsMTE0LDc4LDAsMCwwLDExNCw5OSwwLDAsMCwxMTQsMTcyLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwxMDEsMCwwLDAsMTk5LDIsMCwwLDExNSwxOCwwLDAsMCwwLAorICAgIDEsMywxLDksMSwyNSwxLDMsMSwxNywxLDEzLDEsOCwyLDI2LAorICAgIDIsMTIyLDI2LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LAorICAgIDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDEsNiwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsCisgICAgNzksMCwwLDAsMTE0LDk4LDAsMCwwLDExNCwxMDEsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIwNywwLDAsMCwxODYsMiwwLDAsMTE1LDYsMCwwLDAsCisgICAgMTIsMiwxMiw0LDEyLDcsMTE0LDIwNywwLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxNTEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsCisgICAgMTAwLDMsMCwxMDAsNSwwLDEwMCwzLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwKKyAgICAwLDMsOTAsNCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDUsCisgICAgMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLDYsMCwxMDEsNywwLAorICAgIDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLAorICAgIDgsMCwxMDYsOSwwLDEwMCwxNCwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLDEsCisgICAgMCw5MCw4LDAsMTAxLDcsMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwwLAorICAgIDEzMSwxLDAsOTAsMTAsMCwxMDEsNywwLDEwMCwxNywwLDEwMCwxOCwwLDEzMiwKKyAgICAwLDAsMTMxLDEsMCw5MCwxMSwwLDEwMCwzLDAsODMsNDEsMTksMjE4LDEwLAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw5NywyMDgsNSwwLDAsODQsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTE3LAorICAgIDExNSwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDY1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTA1LDExMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDMyLDk3LDk4LDExMSwxMTcsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDcwLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsMTAwLAorICAgIDk3LDExNiw5NywzMiw5NywxMTUsMTE1LDExMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzIsMTE5LAorICAgIDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAorICAgIDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA0NCwzMiwxMTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsCisgICAgMTAsMzIsMzIsMzIsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw5NiwxMTAsOTcsMTA5LDEwMSw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsMzIsOTYsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwKKyAgICAxMTksMTA0LDEwMSwxMTAsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsMzIsOTYsMTEyLDk3LDExNCwxMDEsMTEwLAorICAgIDExNiw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwKKyAgICAxMDIsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsCisgICAgMTA1LDExMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsCisgICAgMTA1LDExNSwzMiwxMDAsMTAxLDExNCwxMDUsMTE4LDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk2LAorICAgIDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk2LDMyLDEwMCwxMDEsMTE2LDEwMSwKKyAgICAxMTQsMTA5LDEwNSwxMTAsMTAxLDExNSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LAorICAgIDEwMSwxMDAsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMSwxMTQsMTAsCisgICAgMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsNDYsMzIsMzIsNzksMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDExNSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDEwMiwKKyAgICAxMDgsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiw5Niw5NSwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LAorICAgIDExNiwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsCisgICAgOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwKKyAgICA5OSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsCisgICAgOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLAorICAgIDEwOCwxMTEsOTcsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LAorICAgIDMyLDEwNSwxMDIsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExMCwxMDIsMTExLDExNCwxMDksOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LAorICAgIDEwMSw0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwKKyAgICAxMDEsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDExNiw0NCwzMiwxMTEsMTE0LAorICAgIDEwNSwxMDMsMTA1LDExMCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsMTA5LDk3LDExNiw5OSwxMDQsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTA0LDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwKKyAgICAxMDUsMTExLDExMCw5NiwzMiwxMDUsMTEwLDEwMCwxMDUsOTksOTcsMTE2LDEwMSwxMTUsMzIsMTE2LAorICAgIDEwNCw5NywxMTYsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDMyLDM0LDExMSwxMTQsCisgICAgMTA1LDEwMywxMDUsMTEwLDM0LDMyLDExNCwxMDEsMTAyLDEwOCwxMDEsOTksMTE2LDExNSwzMiw5NywKKyAgICAzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw0NiwxMCwzMiwzMiwzMiwzMiw4NywKKyAgICAxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA1LDExNSwzMiw4NCwxMTQsMTE3LDEwMSwKKyAgICA0NCwzMiw5Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsOTYsMzIsOTcsMTE2LDExNiwKKyAgICAxMTQsMTA1LDk4LDExNywxMTYsMTAxLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw5Niw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDEwNSwxMDIsMzIsOTcsMTEwLDEyMSw0NiwzMiwKKyAgICAzMiw3MywxMTYsMTAsMzIsMzIsMzIsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLAorICAgIDExMCwxMDAsMTE1LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMDAsOTUsOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsCisgICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk2LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDExNSw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsMTEzLDExNywKKyAgICAxMDEsMTEwLDk5LDEwMSwzMiwxMTEsMTAyLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LAorICAgIDExNCwxMDUsMTAxLDExNSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsOTcsMTE0LAorICAgIDk5LDEwNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKKyAgICAxMDMsMzIsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMzIsMzIsNzMsCisgICAgMTAyLDMyLDExNSwxMDEsMTE2LDQ0LDMyLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMTQsMTE3LDEwMSw0NSw0NSw5NywxMTAsMTAwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLAorICAgIDExMSwxMTYsMTA0LDEwMSwxMTQsMTE5LDEwNSwxMTUsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDgwLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwxMDUsMTA5LAorICAgIDExMiwxMDgsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiw0MCwxMDksOTcsMTIxLDQxLDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTcsOTgsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDMyLDMyLDczLDEwMiwzMiw5NywzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwxMCwzMiwzMiwzMiwzMiwxMDQsOTcsMTE1LDMyLDk3LDMyLDExMCwxMTEsMTEwLAorICAgIDQ1LDc4LDExMSwxMTAsMTAxLDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTEwLDMyLDk2LAorICAgIDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LAorICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSw5Niw0NCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSwxMTYsCisgICAgMTAxLDEwOSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLAorICAgIDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTUsCisgICAgMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA3OSwxMTAsMTA4LDEyMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMzIsNDAsMTE1LDEwMSwKKyAgICAxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5Nyw5OCw5OSw0NiwKKyAgICA3NywxMDEsMTE2LDk3LDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwzMiw5NywKKyAgICAxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCisgICAgNDYsOTcsOTgsOTksNDYsODAsOTcsMTE2LDEwNCw2OSwxMTAsMTE2LDExNCwxMjEsNzAsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0MSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMDksMTExLDEwMCwKKyAgICAxMDUsMTAyLDEyMSwzMiw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksMzIsMTA1LAorICAgIDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDIxOCwKKyAgICA2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDc4LDIxOCwxMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDk1LDExNSwxMTYsOTcsMTE2LDEwMSwyMTgsMTAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsOTksMywwLDAsMCwzLDAsMCwwLDYsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNzksMCwwLDAsMTI0LDEsMCwxMjQsCisgICAgMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDEyNCwzLAorICAgIDAsMTI0LDAsMCw5NSwyLDAsMTI0LDQsMCwxMjQsMCwwLDk1LDMsMCwKKyAgICAxMjQsNSwwLDExNCw0OCwwLDEwMywwLDAsMTEwLDMsMCwxMDAsMCwwLDEyNCwKKyAgICAwLDAsOTUsNCwwLDEwMCwxLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsCisgICAgMCwxMjQsMCwwLDk1LDYsMCwxMDAsMCwwLDgzLDQxLDIsNzgsNzAsNDEsCisgICAgNywxMTQsNjcsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjE0LDAsMCwwLAorICAgIDExNCwyMTUsMCwwLDAsMjE4LDI2LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDExNSwyMTgsMTMsOTUsMTE1LDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDk3LDExNiwxMTYsMTE0LAorICAgIDIxOCw3LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDQxLDYsMTE0LDc4LDAsMCwwLAorICAgIDExNCw2NywwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTQsMCwwLDAsMTE0LAorICAgIDIxNSwwLDAsMCwxMTQsMjE2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw3OSwwLDAsMCwyNTAsMiwwLAorICAgIDAsMTE1LDE0LDAsMCwwLDAsMiw5LDEsOSwxLDksMSw5LDEsCisgICAgMjEsMyw5LDEsMTIyLDE5LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSwKKyAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTUzLAorICAgIDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLAorICAgIDEsMCwxMDAsMiwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLAorICAgIDAsMTAzLDIsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLAorICAgIDEwNyw5LDAsMTE0LDc5LDAsMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLAorICAgIDAsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMjIsCisgICAgMCwxMjQsMSwwLDEwNiw0LDAsMTAwLDQsMCwxMDYsMCwwLDEyNCwwLDAsCisgICAgMTA2LDUsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMTAsMCwwLDEwMCw1LDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDEwNiw2LDAsMTA2LDcsMCwxMDAsNiwwLDEwNiwKKyAgICA4LDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwyLDAsODMsNDEsNyw3OCwxMjIsCisgICAgOSwxMTAsOTcsMTA5LDEwMSw2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMTEsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMTEsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNjEsCisgICAgMTIzLDMzLDExNCwxMjUsMTIyLDI5LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCisgICAgMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSwKKyAgICA2MSwxMjMsMTI1LDEyMiw2LDEyMywxMjUsNDAsMTIzLDEyNSw0MSwxMjIsMiw0NCwzMiw0MSwKKyAgICA5LDExNCw0NywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE2MywwLDAsMCwKKyAgICAxMTQsMjE0LDAsMCwwLDIxOCw2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE0LDIxNywwLAorICAgIDAsMCwyMTgsOSw5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSw5NSwxMTQsNTcsMCwKKyAgICAwLDAsMTE0LDI2LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDExNCw5OSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsOTAsMCwwLDAsNiwzLDAsMCwxMTUsMTYsMCwwLDAsCisgICAgMCwxLDE1LDEsMjEsMSwxNSwxLDI4LDEsMTUsMSw2LDEsMjIsMSwKKyAgICAxMjIsMTksNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDExNCwKKyAgICAxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMTQ1LDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjUsMiwwLDEyMSwxMDcsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTI0LDEsMCwxMDYsMSwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsCisgICAgMTA2LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LAorICAgIDAsMCwxMDYsMywwLDEyNCwxLDAsMTA2LDMsMCwxMDcsMiwwLDExMSwxMTQsCisgICAgMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDAsMCwxMDcsMiwwLDExMSwxMTQsMCwKKyAgICAxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsNCwwLDEwNywyLDAsMTExLAorICAgIDExNCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNiw1LDAsMTA3LDIsCisgICAgMCw4Myw4NywxMTAsMjIsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDE0MCwwLAorICAgIDEsMSwxLDEwMCwxLDAsODMsODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLAorICAgIDQxLDIsNzgsNzAsNDEsNywxMTQsMjE3LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsMTYzLDAsMCwwLDExNCwyMTQsMCwwLDAsMjE4LDYsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMDAsMjE4LDEyLDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgMTE0LDIwNCwwLDAsMCw0MSwzLDExNCw3OCwwLDAsMCw5MCw1LDExMSwxMTYsCisgICAgMTA0LDEwMSwxMTQsOTAsNCwxMTUsMTA5LDExNSwxMDgsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDYsOTUsOTUsMTAxLDExMyw5NSw5NSwKKyAgICAxNiwzLDAsMCwxMTUsMjAsMCwwLDAsMCwxLDksMSwzLDEsMTgsCisgICAgMSwxOCwxLDE4LDEsMTUsMSwxOCwxLDIwLDEsMTMsMSwxMjIsMTcsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTIsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTAwLDAsMCwxMDcsOCwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLAorICAgIDAsMCwxMDcsOSwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwyLDAsMTE0LDE1MSwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDMsMCwKKyAgICAxMTYsNCwwLDExNiw1LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxMTIsMCwxMjEsCisgICAgMTksMCwxMTYsNiwwLDEyNCwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDAsCisgICAgMCw4NywxMTMsMTQ1LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxMDgsMCwxLAorICAgIDEsMSw4OSwxMTMsMTQ1LDAsODgsMTEzLDE0OCwwLDEyNCwxLDAsMTA2LDMsMCwKKyAgICAxMTYsNCwwLDExNiw4LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxNDgsMCwxMjQsCisgICAgMSwwLDEyNCwwLDAsOTUsMCwwLDExMywxNDgsMCwxMTMsMTUxLDAsMTEwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSw3OCw0MSw5LDExNCwyMTksMCwKKyAgICAwLDAsMTE0LDIxNCwwLDAsMCwxMTQsMjE4LDAsMCwwLDIxOCw4LDEwMSwxMTAsCisgICAgMTAwLDExNSwxMTksMTA1LDExNiwxMDQsMjE4LDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTQsMTI4LDAsCisgICAgMCwwLDExNCwxMjYsMCwwLDAsMTE0LDExOCwwLDAsMCwyMTgsMTcsNjYsODksCisgICAgODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsCisgICAgMiwxMTQsNzgsMCwwLDAsMTE0LDEyNSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIyLDAsMCwwLDI4LAorICAgIDMsMCwwLDExNSwyMiwwLDAsMCwwLDIsMTUsMSwyNCwxLDksMSwKKyAgICAyMSwxLDMsMSwxOSwxLDEzLDEsOCwxLDIxLDEsMTgsMSwxMjIsMTcsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgMTAwLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwxLDAsMTI0LDAsCisgICAgMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDIxOSwwLAorICAgIDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMjIyLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjIsMCwKKyAgICAwLDAsNDIsMywwLDAsMTE1LDIsMCwwLDAsMCwyLDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDQ2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLAorICAgIDEwNyw4LDAsMTE0LDM1LDAsMTI0LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLAorICAgIDIsMCwxMzEsMSwwLDEwMCwzLDAsMjUsODMsMTI0LDAsMCwxMDYsMSwwLAorICAgIDgzLDEwMCwxLDAsODMsNDEsNCwxMjIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LAorICAgIDExNSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ2LDc4LDExNCwxMTAsMCwwLDAsMTE0LAorICAgIDcxLDAsMCwwLDQxLDMsMTE0LDIxNywwLDAsMCwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDMyLDAsMCwwLDQxLDEsMTE0LDc4LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw2LDExMiw5NywxMTQsCisgICAgMTAxLDExMCwxMTYsNDYsMywwLDAsMTE1LDYsMCwwLDAsMCwzLDE1LDEsCisgICAgMjAsMiwxMjIsMTcsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDExMiwKKyAgICA5NywxMTQsMTAxLDExMCwxMTYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsODMsNDEsMSw3OCw0MSwxLDExNCwyMTgsMCwwLDAsCisgICAgNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIyMywwLDAsMCw1NCwzLDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDIsMTIyLDIzLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLAorICAgIDEwMSw5OSw0NiwxMDQsOTcsMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQxLAorICAgIDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAorICAgIDExNCw1OSwwLDAsMCwxMTQsNzksMCwwLDAsMTE0LDkwLDAsMCwwLDExNCwKKyAgICAyMjQsMCwwLDAsMjE4LDgsMTEyLDExNCwxMTEsMTEyLDEwMSwxMTQsMTE2LDEyMSwxMTQsMjIyLAorICAgIDAsMCwwLDIxOCw2LDExNSwxMDEsMTE2LDExNiwxMDEsMTE0LDExNCwyMjgsMCwwLDAsCisgICAgMTE0LDIyMywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjEzLDAsMCwwLDIxMywyLAorICAgIDAsMCwxMTUsMTgsMCwwLDAsMTIsMzUsNiwyLDE1LDEsMTUsMTEsMTIsCisgICAgMTAsMTIsMTIsMTgsMTQsMjEsNCwxOCw4LDExNCwyMTMsMCwwLDAsMTE0LDIxNCwKKyAgICAwLDAsMCwxMTQsMjE2LDAsMCwwLDk5LDIsMCwwLDAsMiwwLDAsCisgICAgMCw1LDAsMCwwLDE1LDAsMCwwLDY3LDAsMCwwLDExNSwxOTMsMCwKKyAgICAwLDAsMTE2LDAsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsODMsCisgICAgMCwxMjQsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsNDMsMCwxMTYsMSwwLAorICAgIDEyNCwwLDAsMTAwLDMsMCwxMjQsMSwwLDEzMSwxLDEsODMsMTI0LDMsMCwKKyAgICAxMTQsNTUsMCwxMDMsMCwwLDExMCwzLDAsMTAwLDIsMCwxMjUsNCwwLDExNiwKKyAgICAxLDAsMTI0LDAsMCwxMDAsMywwLDEyNCwxLDAsMTAwLDQsMCwxMjQsNCwKKyAgICAwLDEzMSwxLDIsODMsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE2OCwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMDAsNSwwLDEzMSwyLDAsMTE0LDE1OSwwLAorICAgIDEyMSwxOSwwLDEyNCwxLDAsMTA2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAorICAgIDMsMCw4NywxMTMsMTY1LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwxNTUsMCwKKyAgICAxLDEsMSwxMDAsMiwwLDEyNSwzLDAsODksMTEzLDE2NSwwLDg4LDExMywxNjgsCisgICAgMCwxMDAsNiwwLDEyNSwzLDAsMTEwLDAsMCwxMTYsNCwwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMDAsNywwLDEyNCwyLDAsMTAwLDUsMCwxMjQsMywwLDEzMSwKKyAgICAyLDIsODMsNDEsOCwxMjIsNTMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5OCw5NywxMTUsMTAxLAorICAgIDEwMCwzMiwxMTEsMTEwLDMyLDExOCw5NywxMTQsMTA1LDExMSwxMTcsMTE1LDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDIxOCwxMiwxMDMsMTAxLAorICAgIDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsMTE0LDE2MywwLDAsMCwKKyAgICAxMTQsMjE3LDAsMCwwLDExNCwyMTYsMCwwLDAsNzAsMTE0LDIxNCwwLDAsMCwKKyAgICA0MSw1LDExNCw2MCwwLDAsMCwyMTgsMjMsMTE1LDExMiwxMDEsOTksOTUsMTAyLDExNCwKKyAgICAxMTEsMTA5LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAxMTQsMjE2LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDIxMywwLDAsMCw0MSwKKyAgICA1LDExNCw2NywwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTQsMCwwLDAsCisgICAgMTE0LDIxNiwwLDAsMCw5MCw2LDExNSwxMDEsOTcsMTE0LDk5LDEwNCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTY3LDAsMCwKKyAgICAwLDU5LDMsMCwwLDExNSwyOCwwLDAsMCwwLDIsMTUsMSwxMiwxLAorICAgIDE2LDEsMTgsMSwxNSwxLDcsMiwxMiwxLDE1LDEsMywxLDE5LDEsCisgICAgMTMsMSwxNCwzLDksMiwxMTQsMTY3LDAsMCwwLDExNCwxNjMsMCwwLDAsCisgICAgMTE0LDIxNywwLDAsMCw5OSwyLDAsMCwwLDIsMCwwLDAsOSwwLAorICAgIDAsMCwxOSwwLDAsMCw2NywwLDAsMCwxMTUsMTEwLDEsMCwwLDEyNCwKKyAgICAxLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw3OSwwLDEwMCwyLDAsMTI1LDEsCisgICAgMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwwLDExNCw3OSwwLAorICAgIDEyMSwxOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAorICAgIDEsMCw4NywxMTMsNzYsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDcyLDAsCisgICAgMSwxLDEsODksMTEzLDc2LDAsODgsMTEzLDc5LDAsMTEwLDAsMCwxMTYsMywKKyAgICAwLDEyNCwwLDAsMTI0LDIsMCwxMDAsNCwwLDEyNCwxLDAsMTMxLDIsMSwKKyAgICAxMjUsNCwwLDEwMCw1LDAsMTI0LDQsMCw5NSw0LDAsMTI0LDIsMCwxMDAsCisgICAgMSwwLDEwNyw4LDAsMTE0LDIwMywwLDEyMCw3OSwwLDExNiw1LDAsMTMxLDAsCisgICAgMCw2OCw5Myw2MSwwLDkyLDIsMCwxMjUsNSwwLDEyNSw2LDAsMTI0LDEsCisgICAgMCwxMDYsNiwwLDExNiw3LDAsMTI0LDYsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTE0LDEzMSwwLDEyNCw1LDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LAorICAgIDIsMCwxMjQsMiwwLDEyNCw0LDAsOTUsOCwwLDgwLDExMywxMzEsMCwxMTMsCisgICAgMTMxLDAsODcsMTAwLDEsMCw4MywxMTAsMCwwLDEyNCwzLDAsMTE2LDksMCwKKyAgICAxMDcsOCwwLDExNCwzOCwxLDExNiwwLDAsMTI0LDIsMCwxMDAsNiwwLDEzMSwKKyAgICAyLDAsMTE0LDQ3LDEsMTIxLDE5LDAsMTI0LDIsMCwxMDYsMTAsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDAsMTI1LDcsMCw4NywxMTAsMTgsMCw0LDExNiwyLDAsMTA3LAorICAgIDEwLDAsMTE0LDEzLDEsMSwxLDEsODksMTEzLDM1LDEsODgsMTI0LDcsMCwKKyAgICAxMTQsMzUsMSwxMDMsMCwwLDEyNCw0LDAsOTUsMTEsMCwxMTMsMzUsMSwxMTMsCisgICAgNDcsMSwxMTAsOSwwLDEyNCwzLDAsMTI0LDQsMCw5NSwxMSwwLDEyNCw0LAorICAgIDAsMTA2LDExLDAsMTAzLDAsMCwxMDcsMiwwLDExNCwxMDYsMSwxMjQsMSwwLAorICAgIDExNCwxMDYsMSwxMTYsMTIsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDcsMCwyNSwKKyAgICAxMjUsOCwwLDEyNCw0LDAsMTA2LDExLDAsMTA2LDEzLDAsMTI0LDgsMCwxMzEsCisgICAgMSwwLDEsMTEzLDEwNiwxLDExMCwwLDAsMTI0LDQsMCw4Myw0MSw4LDk3LAorICAgIDYxLDEsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLAorICAgIDExMCwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTExLDMyLDEwNSwxMTAsMTAwLDEwNSw5OSwKKyAgICA5NywxMTYsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAorICAgIDQ0LDMyLDExNSwxMDEsMTE2LDEwLDMyLDMyLDMyLDMyLDExNSwxMTcsOTgsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNSwzMiwxMTYsMTExLDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMTEsCisgICAgMTAyLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMTE1LDQ2LDMyLDMyLDY1LDExMCwxMCwzMiwzMiwzMiwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLAorICAgIDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMDUsMTE1LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsOTksMTA1LAorICAgIDEwMSwxMTAsMTE2LDQ0LDMyLDExNiwxMDQsMTExLDExNywxMDMsMTA0LDMyLDEwNSwxMTYsMTE1LDMyLAorICAgIDExMCwxMTEsMTE2LDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsMTE5LDEwNSwxMTUsMTAxLDMyLDExNywxMTUsCisgICAgMTAxLDEwMiwxMTcsMTA4LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwKKyAgICAxMTcsMTE1LDExNiwzMiwxMTYsOTcsMTA3LDEwMSwzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwzMiwKKyAgICA5NywxMTUsMzIsMTA1LDExNiwxMTUsMzIsMTExLDExMCwxMDgsMTIxLDMyLDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw0MCw0MSwzMiw5NywxMTQsMTAzLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDc4LDEyMiw5LDYwLDExNywxMTAsMTA3LDExMCwxMTEsMTE5LDExMCw2MiwxMTQsMjMxLDAsCisgICAgMCwwLDExNCwyMTQsMCwwLDAsODQsMTE0LDIxNiwwLDAsMCwxMTQsNzEsMCwKKyAgICAwLDAsNDEsMTQsMTE0LDYwLDAsMCwwLDExNCwyMzEsMCwwLDAsMTE0LDE0NywKKyAgICAwLDAsMCwxMTQsMjEzLDAsMCwwLDExNCwyMTgsMCwwLDAsMjE4LDI3LDk1LAorICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsCisgICAgMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsMjI1LDAsMCwwLDExNCwKKyAgICAyMjYsMCwwLDAsMTE0LDE2MywwLDAsMCwyMTgsOSw5NSw4MCw3OSw4MCw4NSwKKyAgICA3Niw2NSw4NCw2OSwxMTQsMjE2LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDM4LAorICAgIDAsMCwwLDExNCwyMjAsMCwwLDAsNDEsOSwxMTQsNjcsMCwwLDAsMjE4LAorICAgIDgsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDE2MywwLDAsMCwxMTQsMjE3LAorICAgIDAsMCwwLDExNCwxNzIsMCwwLDAsMjE4LDEyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgOTUsOTksMTA4LDk3LDExNSwxMTUsMTE0LDEyMSwwLDAsMCwxMTQsMjE2LDAsMCwwLAorICAgIDkwLDcsMTAwLDEwNSwxMTQsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzMiwwLDAsMCw4NCwzLDAsCisgICAgMCwxMTUsNjAsMCwwLDAsMCwxMiwxMiw0LDYsMSwxNSwyLDMsMSwKKyAgICAxOSwxLDEzLDEsMTEsOCwyMSwxLDksMywxMiwxLDIyLDEsMjEsMSwKKyAgICAxNSwxLDksMSw4LDIsNywzLDEyLDIsMTUsMSwzLDEsMTksMSwKKyAgICAxMywxLDUsMiw2LDEsMTgsMiw5LDEsMTUsMSw2LDEsMTYsMSwKKyAgICAyMiwyLDExNCwyMzIsMCwwLDAsOTksMywwLDAsMCwwLDAsMCwwLAorICAgIDgsMCwwLDAsNTMsMCwwLDAsNjcsMCwwLDAsMTE1LDEyNCwxLDAsCisgICAgMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDMsMCw4NywxMTAsMTgsCisgICAgMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDMzLDAsMSwxLDEsODksMTEwLAorICAgIDE3LDAsODgsMTI0LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDUwLDAsMTI0LAorICAgIDMsMCw4MywxMjQsMCwwLDEwNiwyLDAsMTI1LDQsMCwxMjQsMSwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsMywKKyAgICAwLDEyNSwxLDAsODcsMTEzLDEwOCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsCisgICAgMTA0LDAsMSwxLDEsODksMTEzLDEwOCwwLDg4LDExMCwwLDAsMTIxLDEzLDAsCisgICAgMTI0LDAsMCwxMDYsNCwwLDEyNSw1LDAsODcsMTEwLDI0LDAsNCwxMTYsMSwKKyAgICAwLDEwNywxMCwwLDExNCwxNDcsMCwxLDEsMSwxMDAsMCwwLDEyNSw1LDAsCisgICAgODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMjI0LAorICAgIDAsMTI0LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDIxNSwwLDEyMSwxMywwLAorICAgIDEyNCwxLDAsMTA2LDUsMCwxMjUsMiwwLDg3LDExMywyMjEsMCw0LDExNiwxLAorICAgIDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMSwxLDEwMCwwLDAsMTI1LDIsMCwKKyAgICA4OSwxMTMsMjIxLDAsODgsMTEzLDIyNCwwLDEyNCw1LDAsMTI1LDIsMCwxMTAsMCwKKyAgICAwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDYsMCwxMjUsNiwwLDg3LDExMCwyNCwKKyAgICAwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNywxLDEsMSwxLDEwMCwwLAorICAgIDAsMTI1LDYsMCw4OSwxMTAsMSwwLDg4LDEyMSwxOSwwLDExNiw3LDAsMTI0LAorICAgIDAsMCwxMDYsOCwwLDEzMSwxLDAsMTI1LDcsMCw4NywxMTAsMjQsMCw0LAorICAgIDExNiwxLDAsMTA3LDEwLDAsMTE0LDUzLDEsMSwxLDEsMTAwLDAsMCwxMjUsCisgICAgNywwLDg5LDExMCwxLDAsODgsMTE2LDksMCwxMjQsNCwwLDEyNCwxLDAsCisgICAgMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDEsMTI1LDMsMCwxMjQsNSwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsOTMsMSwxMDAsMiwwLDExMCwzLDAsMTAwLDMsCisgICAgMCwxMjQsMywwLDk1LDEwLDAsMTI0LDYsMCwxMjQsMywwLDk1LDExLDAsCisgICAgMTI0LDcsMCwxMjQsMywwLDk1LDEyLDAsMTI0LDMsMCw4Myw0MSw0LDc4LAorICAgIDExNCwyMTQsMCwwLDAsNzAsODQsNDEsMTMsMTE0LDIwMywwLDAsMCwxMTQsMjA0LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMTk5LDAsMCwwLDExNCwyMDUsMCwKKyAgICAwLDAsOTAsNyw5NSw3OSw4Miw3Myw3MSw3Myw3OCwyMTgsMTAsOTUsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMjE4LDQsMTA4LDEwNSwxMTUsMTE2LDIxOCw4LDk1LAorICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNCwyMTMsMCwwLDAsMTE0LDIxOCwwLDAsCisgICAgMCwxMTQsMjIyLDAsMCwwLDExNCwyMTcsMCwwLDAsNDEsOCwxMTQsMTc0LDAsCisgICAgMCwwLDExNCwxNjMsMCwwLDAsMTE0LDIxNCwwLDAsMCwxMTQsMTcyLDAsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsMjM1LDAsMCwwLDExNCwyMjIsMCwwLDAsCisgICAgMTE0LDIxNywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTcsOTUsMTE1LDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE0OCwzLDAsMCwxMTUsNzIsMCwwLDAsCisgICAgMCwyLDMsMSwxMywxLDEzLDEsNSwyLDEyLDEsNCwyLDksMSwKKyAgICAxMiwxLDMsMSwxMywxLDEzLDIsOCwxLDMsMSwxMywxLDEzLDEsCisgICAgMTEsMSwxMiwxLDEyLDEsMywxLDEzLDEsMTMsMSwxNCwyLDksMSwKKyAgICAzLDEsMTMsMSwxMywxLDExLDEsMywxLDE5LDEsMTMsMSwxMSwyLAorICAgIDIxLDEsMjcsMSw5LDEsOSwxLDExNCwyNDAsMCwwLDAsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCw2NCwwLAorICAgIDAsMCwxMTUsMTcyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsCisgICAgOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsCisgICAgMCwwLDkwLDQsMCwxMDEsNSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKKyAgICAwLDEzMSwxLDAsOTAsNiwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLAorICAgIDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTAwLDEwLDAsMTAwLDExLDAsMTAwLAorICAgIDEyLDAsMTAwLDEzLDAsMTMyLDAsMiw5MCw4LDAsMTAwLDE0LDAsMTAwLDE1LAorICAgIDAsMTMyLDAsMCw5MCw5LDAsMTAwLDE2LDAsMTAwLDE3LDAsMTMyLDAsMCwKKyAgICA5MCwxMCwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsMTEsMCwxMDAsCisgICAgMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDIyLDAsMTAwLDIzLAorICAgIDAsMTMyLDAsMCw5MCwxMywwLDEwMCwyNCwwLDEwMCwyNSwwLDEzMiwwLDAsCisgICAgOTAsMTQsMCwxMDAsMjYsMCwxMDAsMjcsMCwxMzIsMCwwLDkwLDE1LDAsMTAwLAorICAgIDI4LDAsODMsNDEsMjksMTE0LDE2OCwwLDAsMCwxMjIsNzcsNjcsMTExLDExMCwxMTgsCisgICAgMTAxLDExMCwxMDUsMTAxLDExMCw5OSwxMDEsMzIsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMzIsCisgICAgOTcsMTE0LDExMSwxMTcsMTEwLDEwMCwzMiwxMTUsMTEyLDEwMSw5OSwzMiwxMTEsOTgsMTA2LDEwMSwKKyAgICA5OSwxMTYsMTE1LDMyLDExNiwxMTEsMzIsMTEyLDExNCwxMTEsMTE4LDEwNSwxMDAsMTAxLDMyLDExNSwKKyAgICAxMTIsMTAxLDk5LDQ1LDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDEwLDMyLDMyLDMyLAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywKKyAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsODMsCisgICAgNDEsMSw3OCw0MSwxLDExNCwxNzIsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLAorICAgIDAsMTE0LDE3MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNzksMCwwLDAsMTk4LDMsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjEsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDExNSw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMTcsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDE0NCwwLDAsMCwxMjEsMTMsMCwxMjQsMSwwLDEwNiwwLDAsMTI1LAorICAgIDIsMCw4NywxMTAsMTE4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwxMzMsMCwKKyAgICAxLDEsMSwxMjEsMTMsMCwxMjQsMiwwLDEwNiwyLDAsMTI1LDMsMCw4NywKKyAgICAxMTAsNjYsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDExMCwwLDEsMSwxLAorICAgIDExNiwzLDAsMTI0LDEsMCwxMDYsNCwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsCisgICAgMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTA2LDAsMTE2LDUsMCwxMjQsMSwKKyAgICAwLDEwNiw0LDAsMTI0LDMsMCwxMzEsMiwwLDEyNSwyLDAsMTEwLDAsMCwKKyAgICA4OSwxMTAsMTksMCw4OCwxMTYsNSwwLDEyNCwxLDAsMTA2LDQsMCwxMjQsMywKKyAgICAwLDEzMSwyLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LDEyNCwwLDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLDQxLDY3LDExNCwxMDEsOTcsMTE2LDEwMSwKKyAgICAzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwzMiwxMDIsMTE0LDExMSwxMDksMzIsOTcsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LAorICAgIDEwMSwxMTUsNDYsNzgsNDEsNiwxMTQsMjAzLDAsMCwwLDExNCwyMDQsMCwwLDAsCisgICAgMTE0LDE5OSwwLDAsMCwyMTgsMTAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDExNCw1NywwLDAsMCwxMTQsMTY3LDAsMCwwLDQxLDQsMjE4LDMsOTksCisgICAgMTA4LDExNSwxMTQsMTc0LDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE2MywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTEsMTAyLDExNCwxMTEsMTA5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDIwMSwzLDAsCisgICAgMCwxMTUsMjIsMCwwLDAsMCwzLDMsMSwxMywxLDEzLDEsMywxLAorICAgIDEzLDEsMTMsMSwxNSwxLDEyLDEsMjYsMiwyMywxLDEyMiwyNCw5NSw4MywKKyAgICAxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDEwMiwxMTQsMTExLDEwOSw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNTgsMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEwMCwKKyAgICAxLDAsMTA3LDgsMCwxMTQsMzAsMCwxMDAsMiwwLDExMCw2LDAsMTI0LDEsCisgICAgMCwxMDYsMSwwLDEyNSwyLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwxLDAsCisgICAgMTA3LDgsMCwxMTQsMTA0LDAsMTI0LDEsMCwxMDYsMywwLDEwMCwxLDAsMTA3LAorICAgIDgsMCwxMTQsODIsMCwxMDAsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDgzLDEwMCw0LDAsMTA2LDQsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDMsCisgICAgMCwxMzEsMiwwLDgzLDExMCw1MCwwLDEyNCwxLDAsMTA2LDUsMCwxMTQsMTMyLAorICAgIDAsMTAwLDUsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMiwwLAorICAgIDEzMSwyLDAsODMsMTAwLDYsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDEsMCwKKyAgICAxMjQsMSwwLDEwNiwyLDAsMTMxLDIsMCw4MywxMDAsMSwwLDgzLDQxLDcsCisgICAgMTIyLDM4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMTIsCisgICAgMTE0LDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTE0LDIwMSwwLDAsMCwxMjIsMTMsCisgICAgNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsCisgICAgMTI1LDQxLDYyLDEyMiwyMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDE4LDYwLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywxMjUsNDEsNjIsCisgICAgNDEsNiwxMTQsMTcyLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMjE0LDAsMCwKKyAgICAwLDExNCwxNjMsMCwwLDAsMTE0LDQ3LDAsMCwwLDExNCwyMjMsMCwwLDAsCisgICAgNDEsMywxMTQsNzgsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIwMCwwLDAsMCwyMTcsMywwLDAsMTE1LDE4LDAsMCwwLDAsMywKKyAgICA5LDEsMzAsMSwxNSwxLDE1LDEsMTMsMiwyMiwyLDksMSwxOSwyLAorICAgIDEyMiwyNCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyMTgsOSw5NSwxMTEsMTE4LDEwMSwKKyAgICAxMTQsMTE0LDEwNSwxMDAsMTAxLDcwLDIxOCwxMSw5NSwxMDIsMTExLDExNCw5OSwxMDEsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsODQsOTksMiwwLDAsMCwyLDAsMCwwLDYsMCwwLAorICAgIDAsNjYsMCwwLDAsNjcsMCwwLDAsMTE1LDc1LDIsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMjUsNCwwLDEyNCwyLDAsMTE1LDQ1LDAsMTI0LDMsMCwKKyAgICAxMTUsNDUsMCwxMTYsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwKKyAgICAzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw4NSwwLDEyMSwxNiwwLDEyNCw0LAorICAgIDAsMTA2LDIsMCwxMjQsMSwwLDk1LDMsMCw4NywxMTMsODUsMCw0LDExNiwKKyAgICA0LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsODksMTEzLDg1LDAsODgsCisgICAgMTEwLDAsMCwxMjQsMiwwLDExNSwxMTUsMCwxMTYsMSwwLDEyNCwxLDAsMTAwLAorICAgIDMsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwyMjEsCisgICAgMCwxMjQsNCwwLDEwNiw1LDAsMTI1LDUsMCwxMjQsNSwwLDEwMCwyLDAsCisgICAgMTA3LDgsMCwxMTQsMTg0LDAsMTI0LDQsMCwxMDYsNiwwLDEwMCwyLDAsMTA3LAorICAgIDksMCwxMTQsMTg0LDAsMTE2LDcsMCwxMDYsOCwwLDExNiw3LDAsMTMxLDEsCisgICAgMCwxMjUsNSwwLDEyNCw0LDAsMTA2LDYsMCwxMjQsNSwwLDk1LDksMCwKKyAgICAxMTMsMTg0LDAsMTEwLDAsMCwxMjEsMTMsMCwxMjQsNSwwLDEyNCwxLDAsOTUsCisgICAgMTAsMCw4NywxMTMsMjIxLDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwyMTcsMCwKKyAgICAxLDEsMSw4OSwxMTMsMjIxLDAsODgsMTEwLDAsMCwxMjQsMiwwLDExNSwyNTEsCisgICAgMCwxMTYsMSwwLDEyNCwxLDAsMTAwLDQsMCwxMDAsMiwwLDEzMSwzLDAsCisgICAgMTAwLDIsMCwxMDcsOCwwLDExNCwzNSwxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LAorICAgIDExLDAsMTI0LDEsMCw5NSwxMiwwLDg3LDExMywzNSwxLDQsMTE2LDQsMCwKKyAgICAxMDcsMTAsMCwxMTQsMzEsMSwxLDEsMSw4OSwxMTMsMzUsMSw4OCwxMTAsMCwKKyAgICAwLDEyMSwxMywwLDEyNCw0LDAsMTI0LDEsMCw5NSwxMywwLDg3LDExMCwxOCwKKyAgICAwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNjgsMSwxLDEsMSw4OSwxMTAsCisgICAgMSwwLDg4LDEyNCwyLDAsMTE1LDk5LDEsMTE2LDEsMCwxMjQsMSwwLDEwMCwKKyAgICA1LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTU3LAorICAgIDEsMTI0LDQsMCwxMDYsNiwwLDEwMCwyLDAsMTA3LDksMCwxMTQsMTU3LDEsCisgICAgMTIxLDE2LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCwxLDAsOTUsMTQsMCw4NywKKyAgICAxMTMsMTU0LDEsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwxNTAsMSwxLDEsMSwKKyAgICA4OSwxMTMsMTU0LDEsODgsMTEzLDE1NywxLDExMCwwLDAsMTI0LDQsMCwxMDYsMTUsCisgICAgMCwxMTQsNzEsMiwxMjQsMiwwLDExNSwxOTYsMSwxMTYsMSwwLDEyNCwxLDAsCisgICAgMTAwLDYsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwKKyAgICAyMzYsMSwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxNiwwLDEyNCwxLDAsOTUsMTcsCisgICAgMCw4NywxMTMsMjM2LDEsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwyMzIsMSwxLAorICAgIDEsMSw4OSwxMTMsMjM2LDEsODgsMTEwLDAsMCwxMjQsMiwwLDExNSwxMCwyLAorICAgIDExNiwxLDAsMTI0LDEsMCwxMDAsNywwLDEwMCwyLDAsMTMxLDMsMCwxMDAsCisgICAgMiwwLDEwNyw4LDAsMTE0LDcxLDIsMTI0LDQsMCwxMDYsMTgsMCwxMDAsMiwKKyAgICAwLDEwNyw5LDAsMTE0LDY4LDIsMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTgsMCwKKyAgICAxMjQsMSwwLDk1LDE5LDAsODcsMTEzLDY1LDIsNCwxMTYsNCwwLDEwNywxMCwKKyAgICAwLDExNCw2MSwyLDEsMSwxLDg5LDExMyw2NSwyLDg4LDExMyw2OCwyLDExMywKKyAgICA3MSwyLDExMCwwLDAsMTAwLDIsMCw4Myw0MSw4LDk3LDI5LDIsMCwwLAorICAgIDgzLDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LAorICAgIDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwKKyAgICAxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDUsMTE0LDEwMSwxMDgsOTcsMTE2LDEwMSwxMDAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsCisgICAgMTAxLDExNSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDQ2LDMyLAorICAgIDMyLDcyLDEwMSwxMTQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwxMTUsCisgICAgMzIsMTA0LDExMSwxMTksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE2LAorICAgIDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDksOTcsMTEyLDMyLDExMSwxMTAsMTE2LAorICAgIDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw1OCwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTAsOTcsMTA5LDEwMSwKKyAgICAzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSwKKyAgICA0NiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ2LDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKKyAgICAzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTIsOTcsOTksCisgICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsCisgICAgMTE1LDExMiwxMDEsOTksOTUsOTUsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNTgsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsMzIsNDUsNjIsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDk1LAorICAgIDMyLDQwLDEwNSwxMDIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDEwMSwxMTYsOTUsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDk3LDExNiwxMTYsMTE0LDMyLDEwNSwxMTUsMzIsMTE2LDExNCwxMTcsMTAxLDQxLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMTAwLDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsOTUsOTUsMTAyLAorICAgIDEwNSwxMDgsMTAxLDk1LDk1LDMyLDk3LDEwOCwxMTUsMTExLDMyLDExNSwxMDEsMTE2LDQxLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExNSwxMTcsOTgsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsCisgICAgOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw0Niw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw0MCwxMDUsMTAyLDMyLDExNSwKKyAgICAxMDEsMTE2LDQxLDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCw1NywwLAorICAgIDAsMCw3OCwxMTQsMTk5LDAsMCwwLDIxOCwxMSw5NSw5NSwxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsOTUsOTUsMTE0LDIzOSwwLDAsMCwxMTQsMjA1LDAsMCwwLDExNCwKKyAgICAyMzcsMCwwLDAsNDEsMjAsMTE0LDE3MiwwLDAsMCwxMTQsNjIsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMjA0LDAsMCwwLDExNCwKKyAgICAxNjMsMCwwLDAsMTE0LDIxNywwLDAsMCwyMTgsMTYsOTUsNzgsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDcsOTUsOTUsMTEwLAorICAgIDEwMSwxMTksOTUsOTUsMjE4LDUsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE5OSwwLDAsMCwKKyAgICAxMTQsMjI4LDAsMCwwLDExNCwyNDYsMCwwLDAsMTE0LDIwMywwLDAsMCwxMTQsCisgICAgMjM5LDAsMCwwLDExNCwyMjMsMCwwLDAsMTE0LDIxNCwwLDAsMCwxMTQsMjA1LAorICAgIDAsMCwwLDExNCwyMjIsMCwwLDAsMTE0LDIzNywwLDAsMCw0MSw2LDExNCwKKyAgICA3OCwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwyNDQsMCwwLDAsMTE0LDI0NSwKKyAgICAwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NywxMTYsMTE2LDExNCwxMTUsMjMzLAorICAgIDMsMCwwLDExNSw4OCwwLDAsMCwwLDE3LDksNiwxMiwxLDI0LDEsCisgICAgMywxLDE2LDEsMTMsMSw4LDMsMzAsMSw5LDEsMTIsMiwxNSwxLAorICAgIDE1LDEsMTgsMSwzLDEsMTMsMSwxMywxLDgsMywzMCwxLDMsMSwKKyAgICAxNiwxLDEzLDEsOCwzLDMsMSwxMywxLDEzLDEsNSwzLDMwLDEsCisgICAgMTUsMSwzLDEsMTYsMSwxMywxLDExLDIsOSwyLDMwLDEsMywxLAorICAgIDE2LDEsMTMsMSw4LDMsMzAsMSwxNSwxLDMsMSwxNiwxLDEzLDEsCisgICAgMTIyLDMwLDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxMDEsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNSwxLDAsMTE2LDEsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwxMzEsCisgICAgMiwwLDExNCw0OCwwLDEyNCwxLDAsMTA2LDIsMCwxMDYsMywwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxMjUsMiwwLDExMCw2LDAsMTAwLDIsMCwxMjUsMiwwLAorICAgIDEyNCwyLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw4NCwwLDExNiw0LDAsMTI0LAorICAgIDEsMCwxMDYsNSwwLDEzMSwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDYsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMjQsMiwwLDgzLDQxLAorICAgIDMsMTIyLDE1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwKKyAgICAxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsMzIsCisgICAgMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDk3LDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDExOCw5NywxMDgsCisgICAgMTE3LDEwMSwxMTUsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLAorICAgIDk5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDIxOCwxMyw5OSwxMTQsCisgICAgMTAxLDk3LDExNiwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsNywxMTQsMTcyLAorICAgIDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyNTEsMCwKKyAgICAwLDAsMTE0LDY4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMjUwLDAsMCwKKyAgICAwLDQxLDMsMTE0LDc4LDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE3NCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsNiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsNTcsNCwwLDAsMTE1LDE2LDAsCisgICAgMCwwLDAsNyw5LDIsMTgsMywyMSwyLDYsMSwxMiw0LDE4LDEsCisgICAgMTMsMSwxMjIsMTksOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwKKyAgICA0Niw5OSwxMTQsMTAxLDk3LDExNiwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDE4OSw2OCwxMTEsMzIsMTAxLAorICAgIDExOCwxMDEsMTE0LDEyMSwxMTYsMTA0LDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsOTksMTAxLDExNSwxMTUsCisgICAgOTcsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKKyAgICAxMDEsMzIsMTExLDEwMiwzMiw5NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NiwzMiwxMDUsMTE1LAorICAgIDMyLDExNywxMTUsMTAxLDEwMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDk3LDExNCwKKyAgICAxMDMsMTAxLDExNiwzMiwxMTEsMTAyLDMyLDEwMSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMSwxMTAsCisgICAgNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LAorICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzksMTE1LDMyLDk2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQwLDQxLDk2LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDMsMTE0LDE3MiwwLDAsCisgICAgMCwxMTQsMTYzLDAsMCwwLDIxOCwxMSwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw1LAorICAgIDk1LDEwMSwxMjAsMTAxLDk5LDgwLDQsMCwwLDExNSwyLDAsMCwwLDAsNywKKyAgICAxMjIsMTgsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSwKKyAgICAxMDEsMTIwLDEwMSw5OSw5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsMTcsMSwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsCisgICAgMTMxLDAsMCwxLDExNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDE0MywyMjYsMCwKKyAgICAxLDExNiw1LDAsMTA2LDYsMCwxMDYsNywwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjQsMSwwLDEwNyw5LDAsMTE0LDk1LDAsMTAwLDEsMCwxMDYsOCwwLDEyNCwKKyAgICAyLDAsMTMxLDEsMCwxMjUsMywwLDExNiw5LDAsMTI0LDMsMCwxMDAsMiwKKyAgICAwLDEyNCwyLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEwNiwxMCwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTgxLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEwNiwxMSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTU4LAorICAgIDAsMTE2LDksMCwxMDAsNCwwLDEwMCwyLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEwNiwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMTIsMCwxMjQsMSwwLDEwMCw1LDAsMTAwLDYsMCwxMzEsMSwxLDEsMTI0LAorICAgIDEsMCw4MywxMjQsMCwwLDEwNiwxMiwwLDEyNCwxLDAsMTAwLDUsMCwxMDAsCisgICAgNiwwLDEzMSwxLDEsMSwxMTYsMTMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDEwLDAsMTAwLDcsMCwxMzEsMiwwLDExNSwyNDMsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTA2LDEwLDAsMTA2LDE0LDAsMTI0LDIsMCwxMzEsMSwwLDEsMTEwLDEzLAorICAgIDAsMTI0LDAsMCwxMDYsMTUsMCwxMjQsMSwwLDEzMSwxLDAsMSw4NywxMDAsCisgICAgMywwLDgxLDg4LDExNiw1LDAsMTA2LDYsMCwxMjQsMiwwLDI1LDgzLDQxLAorICAgIDgsMTIyLDUxLDY5LDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMzIsMTA1LDExMCwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsCisgICAgMTEwLDEwMywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsNDYsMTIyLDMwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywKKyAgICAzMywxMTQsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNCw2NywwLDAsMCw3OCwxMjIsMTQsMTA5LDEwNSwKKyAgICAxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDI0NCwwLDAsCisgICAgMCw4NCwxMTQsMjUzLDAsMCwwLDQxLDE2LDExNCwxNzIsMCwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCw5NiwwLDAsMCwyMTgsMTIsOTcsOTksMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTQsOTIsMCwwLDAsMTE0LDcsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsODIsMCwwLDAsMTE0LDQ3LDAsMCwwLDExNCwKKyAgICAxNDcsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyNTAsCisgICAgMCwwLDAsMTE0LDYwLDAsMCwwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMjU0LDAsMCwwLDQxLDQsMTE0LDc4LDAsMCwKKyAgICAwLDExNCwxNzQsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNjUsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDE3MCwwLDAsMCw5MCw0LDAsMCwxMTUsMzIsMCwwLDAsMCwyLDEyLAorICAgIDEsMTAsMSwxMywxLDI0LDEsMTUsMSwyMSwxLDE4LDEsMTgsMSwyNywKKyAgICAyLDE5LDEsNCwxLDE5LDEsMjEsMiwyMiwyLDE5LDEsMTIyLDE3LDk1LAorICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAxLDEyMCwxMDEsOTksCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMjcsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDI0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwxMzEsMSwwLDEsMTE2LDQsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwyNSwxMjUsMiwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwKKyAgICAwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxNiwKKyAgICAwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMiwwLDk1LDcsMCw4NywxMTMsMTA4LAorICAgIDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsCisgICAgMTA4LDAsODgsMTEwLDAsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDIsMCwxMDAsCisgICAgMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTUsMCwxMjEsNTksCisgICAgMCwxMjQsMiwwLDEwNiw5LDAsMTI0LDIsMCw5NSwxMCwwLDExNiwxMSwwLAorICAgIDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwwLDExNSwxOTAsMCwxMjQsMSwwLDEwNiwKKyAgICAzLDAsMTA2LDEyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LAorICAgIDIsMCw5NSwxMCwwLDExMCwwLDAsODcsMTEzLDIxNSwwLDQsMTE2LDgsMCwKKyAgICAxMDcsMTAsMCwxMTQsMjExLDAsMSwxLDEsODksMTEzLDIxNSwwLDg4LDExMCwwLAorICAgIDAsMTE2LDYsMCwxMjQsMiwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLAorICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMjAsMSwxMjEsMTMsMCwxMjQsMSwwLDEyNCwKKyAgICAyLDAsOTUsMTMsMCw4NywxMTMsMjAsMSw0LDExNiw4LDAsMTA3LDEwLDAsCisgICAgMTE0LDE2LDEsMSwxLDEsODksMTEzLDIwLDEsODgsMTEwLDAsMCwxMjQsMiwKKyAgICAwLDgzLDQxLDcsNzgsMTE0LDE5OSwwLDAsMCwxMTQsMjQ2LDAsMCwwLDExNCwKKyAgICAyMzksMCwwLDAsMTE0LDExMCwwLDAsMCwxMTQsNzEsMCwwLDAsMTE0LDIwMywKKyAgICAwLDAsMCw0MSwxNCwxMTQsMTcyLDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LAorICAgIDAsMSwwLDAsMTE0LDY3LDAsMCwwLDExNCw3LDAsMCwwLDExNCwxNjksCisgICAgMCwwLDAsMTE0LDYyLDAsMCwwLDExNCwxOTksMCwwLDAsMTE0LDIwNCwwLAorICAgIDAsMCwxMTQsNTcsMCwwLDAsMTE0LDI0NiwwLDAsMCwxMTQsNjAsMCwwLAorICAgIDAsMTE0LDMyLDAsMCwwLDExNCwyMDMsMCwwLDAsNDEsMywxMTQsNzgsMCwKKyAgICAwLDAsMTE0LDE3MiwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMDgsMTExLAorICAgIDk3LDEwMCw5NSw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwxMDAsOTUsOTksMTExLDEwOSwxMTIsCisgICAgOTcsMTE2LDEwNSw5OCwxMDgsMTAxLDExMiw0LDAsMCwxMTUsNDIsMCwwLDAsMCwKKyAgICAyLDksMiwxOSwxLDE2LDEsMjQsMSwzLDEsMTYsMSwxMywxLDgsCisgICAgMSwyNCwxLDMsNCwxMiwxLDE1LDEsMzIsMSwxMywxLDgsMSwyNCwKKyAgICAxLDMsMSwxMywxLDEzLDEsOCwxLDEyMiwzOCw5NSw4MywxMTIsMTAxLDk5LAorICAgIDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDk4LDk3LAorICAgIDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwOCwKKyAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsOSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLDAsMTE2LDAsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTQzLDIwLDAsMSwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEyNSwyLDAsODcsMTAwLDEsMCw4MSw4OCwxMjQsMiwwLAorICAgIDgzLDQxLDIsMTIyLDYwLDY5LDEyMCwxMDEsOTksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksMzksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTEwLDExNiwKKyAgICAxMTEsMzIsOTcsMTEwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwxMDMsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDQ2LDc4LDQxLDIsMTE0LDIwNywwLDAsMCwxMTQsMTcwLDAsMCwwLDQxLDMsCisgICAgMTE0LDc4LDAsMCwwLDExNCwxNzQsMCwwLDAsOTAsNiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxNCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsCisgICAgMTAzLDE0Miw0LDAsMCwxMTUsNiwwLDAsMCwwLDMsMTMsMSwyMSwxLAorICAgIDEyMiwyNyw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LAorICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwxMDMsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDE3OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwKKyAgICAxMDAsMCwwLDEwNyw5LDAsMTE0LDUyLDAsMTE2LDIsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDUyLDAsMTI0LDAsCisgICAgMCwxMDYsMywwLDEzMSwwLDAsODMsMTEwLDAsMCwxMjQsMCwwLDEwNiw0LAorICAgIDAsMTMxLDAsMCwxMjUsMSwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDE0Myw4NCwwLDEsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDAsMCwKKyAgICAxMDcsOCwwLDExNCwxNDMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDYsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDE1NiwwLDExNiw3LDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsOCwwLDEzMSwxLDEsMTMwLDEsMCwKKyAgICAxMTMsMTU2LDAsMTEwLDEzLDAsMTI0LDAsMCwxMDYsOSwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxLDg3LDEwMCwwLDAsODEsODgsMTE2LDEwLDAsMTA2LDExLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEwNiw4LDAsMjUsODMsNDEsNCw3OCwxMTQsMjUzLDAsCisgICAgMCwwLDEyMiwxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCwxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDE3MiwwLDAsMCwxMTQsMTYzLAorICAgIDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsMSwxLDAsMCwxMTQsMjUyLDAsCisgICAgMCwwLDExNCwyMDcsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMTQ3LDAsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsMjU0LDAsMCwwLDExNCw3LDAsMCwwLAorICAgIDExNCwxNjksMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTQsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLAorICAgIDE0OSw0LDAsMCwxMTUsMjAsMCwwLDAsMCwyLDE4LDIsMjEsMSwxMywKKyAgICAyLDEyLDEsMTMsMSwxOCwxLDE4LDEsMzAsMywxOSw1LDEyMiwyNyw5NSwKKyAgICA4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMSwwLDAsMCw4LDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA0OSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDExNiwyLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwNiw0LDAsMTMxLDEsMCwxNDMsMTUsMCwKKyAgICAxLDEyNCwwLDAsMTA2LDUsMCwxMzEsMCwwLDgzLDg3LDEwMCwxLDAsODEsCisgICAgODgsMTAwLDEsMCw4Myw0MSwyLDEyMiwyMDcsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICA5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsOTgsMTA2LAorICAgIDEwMSw5OSwxMTYsNDQsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDEwMCwxMDAsCisgICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLAorICAgIDEyMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICA0NCwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsMTAzLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMywxMDEsMTE2LDExNSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw5OSwxMDgsMTExLDk4LDk4LDEwMSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSw2LDExNCw5NiwwLDAsMCwKKyAgICAxMTQsMjU1LDAsMCwwLDExNCw5MiwwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCwKKyAgICA2NywwLDAsMCwxMTQsMywxLDAsMCw0MSwxLDExNCw3OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTcxLDAsMCwwLDE3Miw0LDAsMCwxMTUsNiwwLDAsMCwwLDksMTAsCisgICAgMSwxOSwxLDEyMiwxNyw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMTE1LDQ2LDEwOCwxMTEsOTcsMTAwLDc4LDQxLDE2LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzksMCwKKyAgICAwLDAsMjE4LDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwKKyAgICAyNDMsMCwwLDAsMTE0LDIwMCwwLDAsMCwxMTQsMjUwLDAsMCwwLDExNCwyNTIsCisgICAgMCwwLDAsMTE0LDI1NCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwxLDEsCisgICAgMCwwLDExNCwyLDEsMCwwLDExNCwzLDEsMCwwLDExNCwxNzEsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDE2OCwwLDAsMCwxOTMsMywwLDAsMTE1LDI0LAorICAgIDAsMCwwLDEyLDMsNiwyLDEyLDMsMTgsMTYsMTIsMTYsMjQsODAsMTIsCisgICAgMjMsMTIsMTAsMTIsMjIsMTIsMzAsMTIsNywxMiwyMywxMTQsMTY4LDAsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDE5MywwLDAsMCwxMDEsMCwwLDkwLDEsMCwKKyAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LAorICAgIDAsMTAwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMiwwLAorICAgIDEzMSwxLDAsOTAsNywwLDEwMSw2LDAsMTAwLDQsMCwxMDAsNywwLDEwMCwKKyAgICA4LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNCwwLDEwMCw5LAorICAgIDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDksMCwxMDEsNiwwLAorICAgIDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSwKKyAgICA2LDAsMTAxLDExLDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNiwwLDEwMSwxMSwwLDEwMCwxNSwwLAorICAgIDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEzLDAsMTAxLAorICAgIDYsMCwxMDEsMTEsMCwxMDAsMTcsMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsMTMxLDEsMCw5MCwxNCwwLDEwMCw0LDAsODMsNDEsMTksMjE4LDE1LDY2LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQ0LAorICAgIDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LAorICAgIDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwKKyAgICAxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LAorICAgIDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLAorICAgIDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwKKyAgICAxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyNCw2MCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCw5OCwxMTcsMTA1LAorICAgIDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MSwyLDExNCw0NywwLDAsMCwxMTQsNTcsCisgICAgMCwwLDAsNDEsMSwxMTQsMTc0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDAsMCwwLDAsMTk3LDQsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw1OCwwLDAsCisgICAgMCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTYsMCwxMDAsMCwwLAorICAgIDgzLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDUwLDAsCisgICAgMTE2LDIsMCwxMjQsMSwwLDEyNCwwLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwKKyAgICAyLDEsODMsMTAwLDAsMCw4MywxMDAsMCwwLDgzLDQxLDMsNzgsMTE0LDIxNCwKKyAgICAwLDAsMCwxMjIsOCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSwzLDExNCwKKyAgICA5NiwwLDAsMCwyMTgsMTAsMTA1LDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKKyAgICAxMTQsMTY3LDAsMCwwLDQxLDQsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwKKyAgICAwLDExNCwzNSwwLDAsMCwyMTgsNiwxMTYsOTcsMTE0LDEwMywxMDEsMTE2LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw5LDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSwyMDIsNCwwLDAsMTE1LDEwLDAsMCwKKyAgICAwLDAsMiwxMiwxLDQsMSwxNSwxLDE5LDIsMTIyLDI1LDY2LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLDAsMCwwLDAsMCwwLDQsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwKKyAgICAzLDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDM3LDAsMTI0LDMsCisgICAgMCwxMDYsMSwwLDgzLDEwMCwxLDAsODMsNDEsMiwxMjIsMTEzLDcwLDEwNSwxMTAsCisgICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLAorICAgIDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwKKyAgICAxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwKKyAgICAxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwKKyAgICAyLDExNCw4LDEsMCwwLDExNCwxNjMsMCwwLDAsNDEsNCwxMTQsMjQyLDAsCisgICAgMCwwLDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxNzIsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMTEsNCwwLAorICAgIDAsMTE1LDQsMCwwLDAsMCw3LDE4LDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LAorICAgIDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTA5LDAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwKKyAgICAxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMiwwLDEzMSwxLDAsMTE1LAorICAgIDYzLDAsMTE2LDQsMCwxMDAsMSwwLDEwNiw1LDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDEwMCwyLDAsMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwKKyAgICAxMTYsNiwwLDExNiwyLDAsMTA2LDcsMCwxMjQsMiwwLDEzMSwyLDAsMSwKKyAgICAxMTYsOCwwLDEyNCwxLDAsMTMxLDEsMCwxMDYsOSwwLDExNiwxMCwwLDEwNiwKKyAgICAxMSwwLDEyNCwyLDAsMjUsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDEsMywKKyAgICA3OCwxMjIsMjksMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywKKyAgICAzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDIwMywwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDk2LDAsMCwwLDExNCw2LDEsMCwwLDExNCwxNDcsMCwwLDAsCisgICAgMTE0LDQ3LDAsMCwwLDExNCwxMDgsMCwwLDAsOTAsMTIsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNCwxNjgsMCwwLDAsMTE0LDI1MCwwLAorICAgIDAsMCwxMTQsNywwLDAsMCwxMTQsMTY5LDAsMCwwLDQxLDMsMTE0LDE3NCwKKyAgICAwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjUzLDAsMCwKKyAgICAwLDIyMSw0LDAsMCwxMTUsMTQsMCwwLDAsMCwyLDksMSw5LDEsCisgICAgMTUsMSwxOCwxLDEyLDEsMTYsNCwxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMSwxMjIsMjMsCisgICAgNzYsMTExLDk3LDEwMCwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw0MSwxLDExNCwxNzUsMCwwLDAsNDEsMiwKKyAgICAxMTQsMjQyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDAsMSwwLDAsMjM0LDQsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LAogICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsMSwwLAotICAgIDAsMCwxMTcsNDUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsMTcsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQwLDIsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwyMDgsMiwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCw0LDExNywyMywwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNTQsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCisgICAgMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDU3LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsCisgICAgMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAogICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCwKLSAgICA5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsCi0gICAgNzgsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLAotICAgIDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMjE0LDIsMCwwLDExNSwyLDAsMCwwLDAsNCwxMTcsCi0gICAgMjUsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSwxMywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxNywwLDAsMCwxMDUsCi0gICAgMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDIyMCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDc4LDQwLAotICAgIDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwKLSAgICAxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwKLSAgICAwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsCi0gICAgMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTczLDIsMCwwLDExNSwyOCwwLDAsCi0gICAgMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCw0LDMsMSwzLDEsMywKLSAgICAxLDI3LDE0LDMsMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTcsMTQsMCwKLSAgICAwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsMTAxLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsCi0gICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCi0gICAgMTAwLDIsMCw5MCw0LDAsMTAwLDMsMCw5MCw1LDAsMTAwLDExLDAsOTAsCi0gICAgNywwLDEwMSw4LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw5LDAsMTAxLDgsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwKLSAgICAxMzEsMSwwLDkwLDEwLDAsMTAxLDgsMCwxMDAsMTAsMCwxMDAsOCwwLDEwMCwKLSAgICA5LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAwLDEwLDAsODMsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAotICAgIDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw2NywKLSAgICAwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKLSAgICAxMDAsMTAxLDk5LDEwOCw5NywxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCi0gICAgNDYsMTAsMzIsMzIsMzIsMzIsMTE3LDU5LDAsMCwwLDgzLDExMSwxMDIsMTE2LDExOSwKLSAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAotICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMTcsNjUsMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw2NywwLDAsMCwxMjEsMjMsMCwxMTYsMCwwLDEwNiwxLDAsMTE2LAotICAgIDAsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsMzcsMCwKLSAgICA0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYyLDAsMSwxLDEsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDExNiwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsODMsCi0gICAgODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywKLSAgICAxMTcsNywwLDAsMCw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDExNywxNywwLDAsCi0gICAgMCw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSw3OCw4NCw5NSw4NSw4MywKLSAgICA2OSw4MiwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNywxOCwwLDAsMCw3Miw3NSw2OSw4OSw5NSw3Niw3OSw2NywKLSAgICA2NSw3Niw5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MCwyLDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDMsMCwwLDAsMTA3LDEwMSwxMjEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsCi0gICAgOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMjQwLDIsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMiwzLDEsMjMsMSwxMywxLDExNywKLSAgICAzNiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsCi0gICAgMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwyLDAsMCwwLDAsMCwwLAotICAgIDAsNiwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTQyLDAsCi0gICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMTQsMjEsMCwxMjQsMCwwLDEwNiwxLAotICAgIDAsMTI1LDIsMCwxMTAsOSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLAotICAgIDEyNCwyLDAsMTA2LDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMTYsCi0gICAgNCwwLDEwNiw1LDAsMTAwLDAsMCwxMDAsMywwLDEzMywyLDAsMjUsMTMxLAotICAgIDAsMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywKLSAgICAwLDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsMCwxMTYsNywwLDEwNiw4LDAsCi0gICAgMTI0LDQsMCwxMDAsNCwwLDEzMSwyLDAsMTI1LDUsMCw4NywxMDAsMCwwLAotICAgIDgxLDg4LDg3LDExMCwyMiwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMTM3LDAsCi0gICAgMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwxMDUsMywwLDAsMCwxMTcsMCwwLDAsMCw0MCwxMSwwLAotICAgIDAsMCwxMTcsMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsCi0gICAgNzYsNjgsMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LAotICAgIDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNywxMiwwLDAsMCw4Miw2OSwKLSAgICA3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsCi0gICAgMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsOTUsMTExLAotICAgIDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsMTE3LDEwLDAsMCwwLDgxLDExNywxMDEsCi0gICAgMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsCi0gICAgMTExLDExOSwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDEyLDAsMCwwLAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE3LDMsMCwwLAotICAgIDAsMTA3LDEwMSwxMjEsMTE3LDQsMCwwLDAsMTA0LDEwNywxMDEsMTIxLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLDk3LDExNCwKLSAgICA5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDcsMiwwLDAsMTE1LAotICAgIDIyLDAsMCwwLDAsMiw5LDEsMTIsMiw5LDEsMTUsMSwyMiwxLAotICAgIDMsMSwxOCwxLDI4LDEsMTMsMSw5LDEsMTE3LDM4LDAsMCwwLDg3LAotICAgIDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywKLSAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsCi0gICAgMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwxMzcsMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLAotICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMSwwLDEwMCwxLDAsODMsMTIxLDE3LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwKLSAgICAyMiwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNzIsMCwxLDEsMSwxMDAsCi0gICAgMSwwLDgzLDg5LDExMCwxLDAsODgsMTIwLDU3LDAsMTE2LDUsMCwxMzEsMCwKLSAgICAwLDY4LDkzLDQ2LDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsMywKLSAgICAwLDEwNiw2LDAsMTE2LDcsMCwxMjQsNSwwLDEzMSwxLDAsMTMxLDEsMCwKLSAgICAxMTQsODMsMCwxMjQsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDgzLAotICAgIDExMyw4MywwLDg3LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMzQsMCwKLSAgICAwLDAsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LAotICAgIDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw0Niw3OCw0MCw4LDAsMCwwLDExNywxNiwwLDAsMCw5NSwKLSAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LAotICAgIDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw3LDAsMCwwLDc5LDgzLAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDEwMSwxMTAsMTAwLDExNSwxMTksMTA1LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTE2LDExNywxMTIsMTA4LDEwMSw0MCw2LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICA4LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYsMywwLDAsMTE1LDIwLDAsMCwwLDAsMywxNSwxLDEyLDEsNCwKLSAgICAxLDMsMSwxNywxLDEzLDEsOSwxLDIyLDEsMjEsMSwxMTcsMzMsMCwKLSAgICAwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsCi0gICAgMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc4LDcwLDQwLDEzLDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTIsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksCi0gICAgOTUsNzUsNjksODksMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLAotICAgIDg5LDk1LDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNyw1LDAsMCwwLAotICAgIDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSwKLSAgICA2Niw4NSw3Myw3Niw2OCwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LAotICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE0LDAsMCwwLDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsCi0gICAgMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICAyMjcsMiwwLDAsMTE1LDE2LDAsMCwwLDE2LDMsNiwzLDYsMyw2LAotICAgIDIsNiwyLDE4LDcsMTgsMTUsMywxLDExNywyMSwwLDAsMCw4NywxMDUsCisgICAgOTcsMTE4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LAorICAgIDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDIzOSw0LDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDQsMTIyLDI0LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsNTYsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywKKyAgICAxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsCisgICAgMCw0MSwyLDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTAzLDEwMSwKKyAgICAxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwyNDUsNCwwLDAsMTE1LDIsMCwwLAorICAgIDAsMCw0LDEyMiwyNiw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsCisgICAgNTIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsCisgICAgMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE1LDMyLDk3LDExNCwxMDEsMzIsMTEwLDEwMSwxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsMTE1LDQ2LDcwLDExNCw0LDAsMCwwLDQxLDIsMTE0LDI0MiwwLAorICAgIDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwyMTYsMCwwLDAsMjUxLDQsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsNSwxMjIsMjYsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDQxLDE1LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LAorICAgIDAsMCwwLDExNCw1OSwwLDAsMCwyMTgsMTIsMTE1LDExNiw5NywxMTYsMTA1LDk5LAorICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwyMDAsMCwwLDAsMTE0LDQsMSwwLDAsCisgICAgMTE0LDgsMSwwLDAsMTE0LDksMSwwLDAsMTE0LDI1MywwLDAsMCwxMTQsCisgICAgMCwxLDAsMCwxMTQsMTU1LDAsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsCisgICAgMSwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNSwxLDAsCisgICAgMCwxODgsNCwwLDAsMTE1LDI4LDAsMCwwLDEyLDcsNiwyLDE4LDUsCisgICAgMywxLDIxLDgsMywxLDE4LDksMTgsMTMsMTgsNSwzLDEsMjEsNSwKKyAgICAzLDEsMjEsNSwzLDEsMTE0LDUsMSwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsMTkzLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwKKyAgICAwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywwLAorICAgIDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCwKKyAgICA0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwyLDAsMTMxLDEsMCw5MCw3LAorICAgIDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMSwwLAorICAgIDEzMSwxLDAsOTAsOCwwLDEwMSw0LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsCisgICAgMCwwLDEzMSwxLDAsOTAsOSwwLDEwMSw2LDAsMTAwLDExLDAsMTAwLDEyLAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDYsMCwxMDEsMTEsMCwKKyAgICAxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwKKyAgICAxMiwwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsCisgICAgMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDEsNiwwLDEwMSwxMSwwLAorICAgIDEwMCwxNywwLDEwMCwxOCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLAorICAgIDE0LDAsMTAwLDQsMCw4Myw0MSwxOSwyMTgsMTQsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTIyLDE0Miw3NywxMDEsMTE2LDk3LDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDEwMiwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwKKyAgICA5NywxMTQsMTAxLDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LAorICAgIDMyLDExMSwxMTQsMzIsMTE1LDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDExNSwzMiwxMTYsMTExLDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsCisgICAgOTcsMTEwLDExNiwxMDUsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LAorICAgIDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLAorICAgIDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLAorICAgIDAsODMsNDEsMiw3OCwxMjIsMjIsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsNjIsNDEsMiwxMTQsCisgICAgNDcsMCwwLDAsMTE0LDU3LDAsMCwwLDQxLDEsMjE4LDEsMTA5LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDAsMCwKKyAgICAwLDAsMTIsNSwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNiw3MCwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNDIsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMTQsMzQsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsMSwwLDEwMCwKKyAgICAyLDAsMTMxLDIsMSw4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsNDEsMywKKyAgICA3OCwxMTQsMjE0LDAsMCwwLDkwLDYsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsMywKKyAgICAxMTQsOTYsMCwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsMTY3LDAsMCwwLDQxLAorICAgIDQsMTE0LDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsOCwxLDAsMCwxNyw1LDAsMCwxMTUsNiwwLAorICAgIDAsMCwwLDIsMTUsMSwxOSwyLDEyMiwyNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwKKyAgICAxMDEsOTksOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMTksMCwxMjQsMCwwLDgzLDEwMCwKKyAgICAxLDAsODMsNDEsMiwxMjIsMjEsNzAsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTAyLDExNCwKKyAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsNDEsMiwxMTQsCisgICAgOTYsMCwwLDAsMTE0LDE1NiwwLDAsMCw0MSwzLDExNCwyNDIsMCwwLDAsCisgICAgMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDksMSwwLDAsMjQsNSwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsOTUsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEwNiwxLDAsMTI1LDEsMCwxMTYsMiwwLDEwNiwzLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNSw1NywwLDExNiw0LDAsMTAwLDEsMCwKKyAgICAxMDYsNSwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMSwxMzAsMSwwLDExMCwwLDAsMTE2LDYsMCwxMTYsMiwwLDEwNiw3LAorICAgIDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLDAsMTE2LDgsMCwxMjQsMiwwLAorICAgIDEyNCwwLDAsMTA2LDksMCwxMzEsMiwwLDEsMTAwLDAsMCw4Myw0MSwzLAorICAgIDc4LDEyMiwyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAorICAgIDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywKKyAgICAwLDAsMCw0MSwxMCwxMTQsMjAzLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsCisgICAgOTYsMCwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsMTQ3LDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCwxMTQsMTA4LDAsMCwwLDIxOCwxNywxMDMsMTAxLDExNiw5NSwxMDIsMTE0LAorICAgIDExMSwxMjIsMTAxLDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE0LDE3MCwwLDAsMCwKKyAgICAxMTQsNjMsMCwwLDAsNDEsMywxMTQsMTc0LDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsMTg5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwyNTMsMCwwLDAsMjksNSwwLDAsMTE1LDEyLAorICAgIDAsMCwwLDAsMiwxMiwxLDE1LDEsMTgsMSwxMiwxLDE4LDEsMTIyLAorICAgIDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LAorICAgIDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDEzLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsODMsNDEsMSwxMjIsMjEsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwKKyAgICAxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw0MSwxLDExNCwxNzUsMCwKKyAgICAwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDAsMSwKKyAgICAwLDAsMzgsNSwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNiw3MCwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDgsMTExLAorICAgIDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDgzLAorICAgIDQxLDEsMTIyLDQ1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksCisgICAgMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ2LDQxLDIsMTE0LDk2LDAsMCwwLDExNCwxNSwxLDAsMCw0MSwyLDExNCwKKyAgICAyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAsMSwwLDAsNDMsNSwwLAorICAgIDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyMyw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsNTQsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywKKyAgICAxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwKKyAgICAyLDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTEsMSwwLDAsNDksCisgICAgNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLDEyMiwKKyAgICAxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwxMjIsNDYsCisgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDQxLDIsCisgICAgMTE0LDk2LDAsMCwwLDkwLDE3LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCisgICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDIsMTE0LDI0MiwwLDAsMCwxMTQsCisgICAgMTUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwyMTYsMCwwLDAsNTUsNSwwLDAsMTE1LDIsMCwwLAorICAgIDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwxNSwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsCisgICAgNTksMCwwLDAsMTE0LDEyLDEsMCwwLDExNCwyMDAsMCwwLDAsMTE0LDQsCisgICAgMSwwLDAsMTE0LDgsMSwwLDAsMTE0LDksMSwwLDAsMTE0LDI1MywwLAorICAgIDAsMCwxMTQsMCwxLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwxMCwxLDAsCisgICAgMCwxMTQsMTEsMSwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTMsMSwwLDAsMyw1LDAsMCwxMTUsMjgsMCwwLDAsMTIsNyw2LAorICAgIDIsMTgsNSwzLDEsMjEsNiwzLDEsMTgsNCwxOCw5LDE4LDUsMywKKyAgICAxLDIxLDUsMywxLDIxLDUsMywxLDExNCwxMywxLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSwxMjEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCw5MCw0LDAsCisgICAgMTAwLDMsMCw5MCw1LDAsMTAwLDQsMCw5MCw2LDAsMTAxLDcsMCwxMDAsCisgICAgNSwwLDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywKKyAgICAwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLAorICAgIDEwMSw3LDAsMTAwLDksMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwKKyAgICAyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDksMCwxMDAsMTIsCisgICAgMCwxMDAsMTMsMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsOSwwLAorICAgIDgzLDQxLDE0LDIxOCwyMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwKKyAgICAxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDEwMSw5OSwxMDgsOTcsMTE0LDEwMSwKKyAgICAxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwKKyAgICAzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEyMiw1OSw4MywxMTEsMTAyLDExNiwKKyAgICAxMTksOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LAorICAgIDExMSwxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwKKyAgICAxMDUsMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsCisgICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsMTIyLDY1LDgzLDExMSwxMDIsMTE2LDExOSw5NywxMTQsCisgICAgMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw2NywKKyAgICAxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLAorICAgIDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsMTA4LDExMCwKKyAgICA5NywxMDksMTAxLDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw3MCw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNjcsMCwwLDAsMTIxLDIzLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwwLAorICAgIDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDM3LDAsNCwKKyAgICAxMTYsMywwLDEwNywxMCwwLDExNCw2MiwwLDEsMSwxLDExNiwwLDAsMTA2LAorICAgIDEsMCwxMTYsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg5LAorICAgIDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDUsMjE4LDcsOTUsCisgICAgMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTAsNyw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDkwLAorICAgIDE3LDcyLDc1LDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLAorICAgIDY5LDgyLDExNCw0MCwwLDAsMCw5MCwxOCw3Miw3NSw2OSw4OSw5NSw3Niw3OSwKKyAgICA2Nyw2NSw3Niw5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MSwyLDExNCwyNDIsMCwKKyAgICAwLDAsMjE4LDMsMTA3LDEwMSwxMjEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDE0LDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLAorICAgIDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDc0LDUsMCwwLDExNSw4LDAsMCwwLDAsCisgICAgMiwzLDEsMjMsMSwxMywxLDEyMiwzNiw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwKKyAgICA4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKKyAgICAxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsNiwwLDAsMCwxNiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTQyLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMTQsMjEsMCwKKyAgICAxMjQsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsOSwwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMjUsMiwwLDEyNCwyLDAsMTA2LDMsMCwxMDAsMSwwLDEyNCwxLAorICAgIDAsMTAwLDIsMCwxMTYsNCwwLDEwNiw1LDAsMTAwLDAsMCwxMDAsMywwLAorICAgIDEzMywyLDAsMjUsMTMxLDAsMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwwLDAsCisgICAgMTA2LDYsMCwxMjQsMywwLDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsMCwxMTYsCisgICAgNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsNCwwLDEzMSwyLDAsMTI1LDUsCisgICAgMCw4NywxMDAsMCwwLDgxLDg4LDg3LDExMCwyMiwwLDQsMTE2LDksMCwxMDcsCisgICAgMTAsMCwxMTQsMTM3LDAsMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLAorICAgIDg4LDEyNCw1LDAsODMsNDEsNSw3OCwxMTQsMTUyLDAsMCwwLDkwLDExLDExNSwKKyAgICAxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTQsMTMwLDAsMCwwLDExNCwKKyAgICAzMCwwLDAsMCw0MSwxMCwyMTgsMTEsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsCisgICAgNzMsNzYsNjgsMjE4LDE4LDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LDc1LDY5LAorICAgIDg5LDk1LDY4LDY5LDY2LDg1LDcxLDIxOCwxMiw4Miw2OSw3MSw3Myw4Myw4NCw4MiwKKyAgICA4OSw5NSw3NSw2OSw4OSwxMTQsNDcsMCwwLDAsMTE0LDcsMCwwLDAsMjE4LAorICAgIDcsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwxOSwxLDAsMCwxMTQsMTcsMSwKKyAgICAwLDAsOTAsMTAsODEsMTE3LDEwMSwxMTQsMTIxLDg2LDk3LDEwOCwxMTcsMTAxLDExNCw0MCwKKyAgICAwLDAsMCw0MSw2LDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCw5MCwKKyAgICAxMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk1LDEwNywxMDEsMTIxLDExNCwxOCwxLAorICAgIDAsMCw5MCw0LDEwNCwxMDcsMTAxLDEyMSwyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LAorICAgIDExNiwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDE2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LAorICAgIDExNiwxMTQsMTIxLDgxLDUsMCwwLDExNSwyMiwwLDAsMCwwLDIsOSwxLAorICAgIDEyLDIsOSwxLDE1LDEsMjIsMSwzLDEsMTgsMSwyOCwxLDEzLDEsCisgICAgOSwxLDEyMiwzOCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsCisgICAgMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTUsMTAxLDk3LDExNCw5OSwKKyAgICAxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3OCw5OSw0LDAsMCwwLAorICAgIDAsMCwwLDAsOCwwLDAsMCwxNCwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTU1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzEsMCwKKyAgICAxMDAsMCwwLDgzLDEyMSwxNCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsMSwwLAorICAgIDEsODcsMTEwLDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw2OSwwLDEsCisgICAgMSwxLDEwMCwwLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNzgsMCwxMTYsMywKKyAgICAwLDEzMSwwLDAsNjgsOTMsNjcsMCw5MiwyLDAsMTI1LDUsMCwxMjUsNiwKKyAgICAwLDEyNCw0LDAsMTA2LDQsMCwxMTYsNSwwLDEyNCw2LDAsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDExNCw4MCwwLDExNiw2LDAsMTI0LDEsMCwxMjQsNSwwLDEyNCwKKyAgICAxLDAsMTI0LDQsMCwxMzEsMiwwLDEwMCwxLDAsMTI0LDQsMCwxMzEsMiwKKyAgICAxLDEyNSw3LDAsMTI0LDcsMCw4MywxMTMsODAsMCw4NywxMDAsMCwwLDgzLAorICAgIDQxLDIsNzgsMTE0LDIxNCwwLDAsMCw0MSw3LDExNCwyNSwxLDAsMCwxMTQsCisgICAgMzksMCwwLDAsMTE0LDQwLDAsMCwwLDExNCwyMzMsMCwwLDAsMTE0LDIyNSwKKyAgICAwLDAsMCwxMTQsMjI2LDAsMCwwLDExNCwxNjcsMCwwLDAsNDEsOCwxMTQsCisgICAgMjQyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw3LAorICAgIDEsMCwwLDExNCwyNCwxLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwxMjEsMCwKKyAgICAwLDAsMTE0LDE3MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsOCwxLDAsMCw5Niw1LDAsMCwxMTUsCisgICAgMjQsMCwwLDAsMCwzLDE1LDEsMTIsMSw0LDEsMywxLDE0LDEsCisgICAgMTMsMSw5LDEsMjIsMSwyMSwxLDIxLDEsOSwxLDEyMiwzMSw4NywxMDUsCiAgICAgMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICA1LDAsMCwwLDY2LDAsMCwwLDExNSw3NCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNiwKLSAgICAwLDEwMCwxMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwxLDEzMSwxLDAsCi0gICAgOTAsOCwwLDEwMCw5LDAsODMsNDAsMTEsMCwwLDAsMTE3LDEzLDAsMCwKLSAgICAwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMTcsODMsCi0gICAgMCwwLDAsNjYsOTcsMTE1LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTAyLAotICAgIDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksMTExLDEwMCwxMDEsMzIsMTEwLDEwMSwxMDEsCi0gICAgMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwxMTYsMTA0LDMyLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsNSwKLSAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw4OCwwLDAsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLDEwMCwKLSAgICAyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwzLDAsMjUsMTI1LDMsMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI1LAotICAgIDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LDIsMCwxMTEsODcsMCwxMjQsNCwKLSAgICAwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MCw2LDAsMCwwLDExNywxNDEsMCwKLSAgICAwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwKLSAgICAxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwxMTAsCi0gICAgMTAzLDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiw5OCwKLSAgICAxMjEsMzIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNCwKLSAgICA5NywxMTUsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsCi0gICAgMzIsMzksOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsMTA1LAotICAgIDEsMCwwLDAsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDQwLDQsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsMCwxMTQsMTE1LDExMiwxMDgsCi0gICAgMTA1LDExNiwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwKLSAgICAxMTAsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTMsMCwwLDAsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsMjYsMywwLDAsMTE1LDgsMCwwLDAsMCwzLDI1LAotICAgIDEsMjIsMSwxOSwxLDExNywyNCwwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTksNSwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDIyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMDgsMSwwLDAsMTI0LDIsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTMzLDIsMCwyNSwxMjUsNSwwLDEyNCwyLDAsMTAwLAotICAgIDIsMCwxMDAsMywwLDEzMywyLDAsMjUsMTI1LDYsMCwxMjQsMiwwLDEwMCwKLSAgICAzLDAsMTAwLDQsMCwxMzMsMiwwLDI1LDEyNSw3LDAsMTI0LDUsMCwxMTYsCi0gICAgMCwwLDEwNywzLDAsMTE0LDExNSwwLDEwMCw1LDAsMTA2LDEsMCwxMjQsMSwKLSAgICAwLDEyNCw1LDAsMTMxLDIsMCwxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwKLSAgICAxMzEsMSwwLDEsMTE2LDMsMCwxMjQsOCwwLDEwMCw2LDAsMTI0LDEsMCwKLSAgICAxMDAsNywwLDEyNCwzLDAsMTMxLDEsMiwxMzAsMSwwLDExMCwxMTYsMCwxMTYsCi0gICAgNCwwLDEyNCw2LDAsMTMxLDEsMCwxMDAsMiwwLDEwNywzLDAsMTE0LDE3MywKLSAgICAwLDEwMCw4LDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwKLSAgICAxMTYsMiwwLDEyNCw5LDAsMTMxLDEsMCwxLDExNiw1LDAsMTI0LDksMCwKLSAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDU4LDAsMTE2LDQsMCwxMjQsNywwLDEzMSwKLSAgICAxLDAsMTAwLDIsMCwxMDcsMywwLDExNCwyMzEsMCwxMDAsOSwwLDEwNiwxLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsMTE2LDIsMCwxMjQsOSwwLAotICAgIDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw5LDAsMTMxLDEsMCwxMzAsMSwwLAotICAgIDExMCwwLDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDE5NCwxLDEyMSwKLSAgICAyMCwwLDExNiw3LDAsMTI0LDQsMCwxMDAsMTAsMCwyNSwxMzEsMSwwLDEyNSwKLSAgICAxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjcsMSwKLSAgICAxLDEsMSw4OSwxMTAsNzEsMCw4OCwxMTYsOSwwLDEyNCw2LDAsMTMxLDEsCi0gICAgMCwxMjQsMTAsMCwxMDcsMywwLDExNCw5OCwxLDEwMCwxMSwwLDEwNiwxLDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsMTE2LDIsMCwxMjQsOSwwLDEzMSwKLSAgICAxLDAsMSwxMTYsMywwLDEyNCw5LDAsMTAwLDYsMCwxMjQsMSwwLDEwMCwKLSAgICA3LDAsMTI0LDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsCi0gICAgMCwxMjQsNCwwLDEwMCwxMiwwLDI1LDEwMCwxMywwLDY0LDEyNSwxMSwwLDg3LAotICAgIDExMCwxOCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMTM2LDEsMSwxLDEsCi0gICAgODksMTEzLDE5NCwxLDg4LDExNiw5LDAsMTI0LDcsMCwxMzEsMSwwLDEyNCwxMSwKLSAgICAwLDEwNywzLDAsMTE0LDE5NCwxLDExNiwzLDAsMTAwLDExLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTAwLDYsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LAotICAgIDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEzLDE5NCwxLDExMCwwLDAsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDEwMCwxLDAsMTMzLDIsMCwyNSw4Myw0MCwxNCwwLDAsCi0gICAgMCwxMTcsMTkzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiw5OCwxMjEsMTE2LDEwMSwKLSAgICAxMTUsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LAotICAgIDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKLSAgICA5NywxMDMsMTA1LDk5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMCwxMTcsMTA5LAotICAgIDk4LDEwMSwxMTQsNDQsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTE1LDEwNSwxMjIsMTAxLDMyLDk3LAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTksOTcsMTIxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDExMCwzMiwxMTUsMTA3LDEwNSwxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiw5OSwxMDQsMTAxLDk5LDEwNyw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMDUsNCwwLDAsMCwxMDUsOCwwLAotICAgIDAsMCwxMDUsMTIsMCwwLDAsMTE3LDMwLDAsMCwwLDk4LDk3LDEwMCwzMiwKLSAgICAxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE5LDAsMCwKLSAgICAwLDk4LDk3LDEwMCwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwKLSAgICAxMTAsMzIsMTIzLDEyNSwxMTcsMTQsMCwwLDAsOTgsOTcsMTAwLDMyLDExNSwxMDUsMTIyLAotICAgIDEwMSwzMiwxMDUsMTEwLDMyLDEyMywxMjUsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTcsMjQsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LAotICAgIDExNSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDEyNSwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTA1LDEyMiwxMDEsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LAotICAgIDMsMCw0MCwxMCwwLDAsMCwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsCi0gICAgNzMsNjcsOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsCi0gICAgOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLAotICAgIDExNyw4LDAsMCwwLDY5LDc5LDcwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsOCwKLSAgICAwLDAsMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCwKLSAgICA5NSwxMTQsOTUsMTA4LDExMSwxMTAsMTAzLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsMTMsMCwwLDAsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsCi0gICAgMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNyw1LAotICAgIDAsMCwwLDEwOSw5NywxMDMsMTA1LDk5LDExNywxMywwLDAsMCwxMTQsOTcsMTE5LAotICAgIDk1LDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMTE3LDgsMCwwLDAsMTE0LAotICAgIDk3LDExOSw5NSwxMTUsMTA1LDEyMiwxMDEsMTE3LDMsMCwwLDAsMTA5LDExNSwxMDMsMTE3LAotICAgIDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEyLDAsMCwwLAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsMCwwLAotICAgIDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTA1LDEyMiwxMDEsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjAsMCwwLDAsOTUsOTgsMTIxLAotICAgIDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAotICAgIDEwMSwzNCwzLDAsMCwxMTUsNjgsMCwwLDAsMCw3LDE2LDEsMTYsMSwKLSAgICAxNiwxLDEyLDEsMTgsMSwxMCwxLDI3LDEsMTgsMSwxNSwxLDEwLDEsCi0gICAgMTUsMSwxOCwxLDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLDIwLDEsCi0gICAgMTMsMSw1LDIsMTgsMSwxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwKLSAgICAxOCwxLDEzLDEsNSwyLDE4LDEsMywxLDE1LDEsMjEsMywxMTcsMzQsCi0gICAgMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LAotICAgIDQ2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgMTA4LDEwMSwxMTUsMTE1LDk5LDIsMCwwLDAsMSwwLDAsMCw1LDAsMCwKLSAgICAwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDEyNSwzLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwzLDAsCi0gICAgMTMxLDEsMCwxMjUsNCwwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMywwLDEzMSwKLSAgICAxLDAsMTI0LDEsMCw5NSwzLDAsMTI0LDIsMCwxMTUsMTA2LDAsMTIxLDIyLAotICAgIDAsMTE2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwxMjQsMSwwLAotICAgIDk1LDUsMCw4NywxMTMsMTE4LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCwxMDIsCi0gICAgMCwxLDEsMSwxMjQsMSwwLDEwNiwzLDAsMTI0LDEsMCw5NSw1LDAsCi0gICAgODksMTEzLDExOCwwLDg4LDExMCwxMiwwLDEyNCwxLDAsMTA2LDMsMCwxMjQsMSwKLSAgICAwLDk1LDUsMCwxMjQsMywwLDEyNCwxLDAsOTUsNywwLDEyNCwwLDAsCi0gICAgMTA2LDgsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDE3MCwwLDExNiw5LDAsMTI0LAotICAgIDEsMCwxMDYsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMDMsMSwwLDEyNCwKLSAgICAxLDAsOTUsMTAsMCwxMTAsMjUsMCwxMjQsMSwwLDEwNiw3LDAsMTA2LDExLAotICAgIDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTI0LDEsMCw5NSw3LAotICAgIDAsMTI0LDAsMCwxMjQsMSwwLDk1LDEyLDAsMTE2LDEzLDAsMTE2LDE0LDAsCi0gICAgMTI0LDQsMCwxMjQsMSwwLDEwNiwxNSwwLDEzMSwzLDAsMSwxMjQsMSwwLAotICAgIDgzLDQwLDMsMCwwLDAsMTE3LDgyLDAsMCwwLDcyLDEwMSwxMDgsMTEyLDEwMSwKLSAgICAxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsCi0gICAgMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTEsCi0gICAgMTE0LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDQ2LDEwNSwwLDAsCi0gICAgMCwwLDExNywxLDAsMCwwLDQ2LDQwLDE2LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsOTUsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDk1LDk1LDExNywxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwxMTcsMTksMCwwLDAsNzgsCi0gICAgMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsCi0gICAgMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTAxLAotICAgIDEyMCwxMDEsOTksMTE3LDgsMCwwLDAsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsCi0gICAgNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywxMSwwLDAsMCw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsOTgsMTA2LDEwMSw5OSwKLSAgICAxMTYsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwKLSAgICAwLDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsODAsMywKLSAgICAwLDAsMTE1LDMyLDAsMCwwLDAsNCw5LDEsMTUsMSwxOCwxLDYsCi0gICAgMSwzLDEsMjIsMSwxMywxLDIwLDIsMTIsMSw5LDEsMTUsMSwyOCwKLSAgICAyLDI1LDEsOSwxLDE5LDEsMTE3LDI2LDAsMCwwLDk1LDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0Niw5NSwxMDgsMTExLDk3LDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw3MCw0MCw5LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMTE3LDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEyLAotICAgIDAsMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwKLSAgICAxMTUsMjEsMywwLDAsMTE1LDEwLDAsMCwwLDE2LDMsNiwyLDEyLDgsCi0gICAgMTIsNDYsNiwxLDExNywxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNjYsOTcsMTE1LDEwNSw5OSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsCi0gICAgMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwxMTUsMTA0LDAsMCwwLAotICAgIDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLAotICAgIDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsCi0gICAgMCw5MCw1LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsOTAsNiwwLAotICAgIDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCw5MCw3LDAsMTAwLDExLDAsMTAwLAotICAgIDEyLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsCi0gICAgMCw5MCw5LDAsMTAwLDE1LDAsODMsNDAsMTYsMCwwLDAsMTE3LDEyLDAsCi0gICAgMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTAsMCwwLDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLAotICAgIDAsODMsNDAsMiwwLDAsMCwxMTcsMTIxLDAsMCwwLDc5LDExMiwxMTYsMTA1LAotICAgIDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNiwxMDQsOTcsMTE2LAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDEwNSwxMDksMTAxLDMyLDQwLAotICAgIDk3LDExMCwzMiwxMDUsMTEwLDExNiw0MSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsCi0gICAgMTAwLDMyLDExMiw5NywxMTYsMTA0LDQ0LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMzIsMTA1LDExNSwzMiw5NywzMiwxMTUsMTE2LDExNCw0NiwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw3OCw0MCwxLDAsMCwwLDExNywxOSwwLDAsMCwKLSAgICA3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMDYsMywwLDAsMTE1LDIsMCwwLDAsMCw0LAotICAgIDExNywyMywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMjAsMCwwLDAsMTA1LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LAotICAgIDEsMCwxMzEsMSwwLDEwMCwxLDAsNTQsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgMTE0LDEsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwNSwxMTAsMTAzLDMyLDk3LDMyLAotICAgIDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAwLDEwNSw5OSwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLAotICAgIDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMTUsMTE2LDExNCwKLSAgICA0MSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MCwxMTEsMTE1LDExNSwxMDUsCi0gICAgOTgsMTA4LDEwMSwzMiwxMDcsMTAxLDEyMSwxMTUsNTgsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsNDUsMzIsMzksMTA5LDExNiwxMDUsMTA5LDEwMSwzOSwzMiw0MCwxMDksOTcsMTEwLAotICAgIDEwMCw5NywxMTYsMTExLDExNCwxMjEsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsCi0gICAgMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLAotICAgIDMyLDExMSwxMDIsMzIsMTA4LDk3LDExNSwxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMDksCi0gICAgMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsNTksMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTE1LDEwNSwxMjIsMTAxLDM5LDMyLDQwLDExMSwKLSAgICAxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDExNSwxMDUsMTIyLDEwMSwzMiwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTEsMTAyLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTE0LDEwMSw5NywxMDAsMzIsOTgsMTIxLAotICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwKLSAgICAxMTYsMTA1LDEwOSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDExMiwzLDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDEwLDExNywyMywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSw0LDAsCisgICAgMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwKICAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwwLAotICAgIDEyNCwzLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDExNywyMjgsMCwwLAotICAgIDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywKLSAgICAxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsCi0gICAgMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsCi0gICAgMTE0LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LAotICAgIDMyLDExMiwxMDEsMTE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNDAsMSwwLDAsMCwxMTcsOCwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNywxMCwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMjQsMywwLAotICAgIDAsMTE1LDIsMCwwLDAsMCw4LDExNywyOCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTksMywwLDAsMCwwLDAsCi0gICAgMCwwLDMsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMTcsMTUxLDAsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA0MCw5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksCi0gICAgMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDQwLDMsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDAsOTcsMTE2LDk3LDEzNCwzLDAsMCwxMTUsMiwwLDAsMCwwLDYsCi0gICAgMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsOSwwLDAsMCw0NCwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgNjIsMSwwLDAsMTAwLDEsMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDIsMCwKLSAgICAxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTIxLAotICAgIDE5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMjUsNCwKLSAgICAwLDg3LDExMCw1OCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsMTA2LDAsMSwKLSAgICAxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsMywwLDEwMCw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwKLSAgICAwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTE2LAotICAgIDUsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMDYsNywwLDEyNSw2LAotICAgIDAsMTIxLDE5LDAsMTI0LDIsMCwxMDYsOCwwLDEyNCw2LDAsMTMxLDEsMCwKLSAgICAxMjUsNywwLDg3LDExMCw1OCwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMjA0LAotICAgIDAsMSwxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNSwwLDEwMCwKLSAgICA0LDAsMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwKLSAgICAxMDAsMiwwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsCi0gICAgODgsMTE2LDUsMCwxMDYsMTAsMCwxMDAsMiwwLDEwMCw3LDAsMTMxLDIsMCwKLSAgICAxMjUsOCwwLDEyMSwzMCwwLDEyNCw4LDAsMTA2LDEzLDAsMTI0LDQsMCwxMDYsCi0gICAgMTMsMCwxMjQsNywwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMzEsMSwwLDgzLAotICAgIDg3LDExMCw1OCwwLDQsMTE2LDE0LDAsMTA3LDEwLDAsMTE0LDU3LDEsMSwxMjUsCi0gICAgNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNiwwLDEwMCw0LDAsMTI0LAotICAgIDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwwLAotICAgIDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTAwLDIsCi0gICAgMCw4Myw0MCw4LDAsMCwwLDExNyw1MiwwLDAsMCw2NywxMTEsMTEwLDk5LAotICAgIDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCi0gICAgMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ2LAotICAgIDEwNSwwLDAsMCwwLDc4LDExNywzOSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDExMCwxMTEsMTE2LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsMzIsCi0gICAgMTE2LDEwNCwxMTQsMTExLDExNywxMDMsMTA0LDMyLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgNDAsNDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDI1LDAsMCwwLAotICAgIDcwLDk3LDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywyOCwwLDAsMCw3MCw5NywKLSAgICAxMDUsMTA4LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDg0LDQwLDE1LDAsMCwwLAotICAgIDExNyw4LDAsMCwwLDExNiwxMTEsMTA3LDEwMSwxMTAsMTA1LDEyMiwxMDEsMTE3LDEyLDAsCi0gICAgMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNyw3LDAsMCwwLAotICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSwxMTcsCi0gICAgNywwLDAsMCw2NiwxMjEsMTE2LDEwMSwxMTUsNzMsNzksMTE3LDgsMCwwLDAsCi0gICAgMTE0LDEwMSw5NywxMDAsMTA4LDEwNSwxMTAsMTAxLDExNywxNSwwLDAsMCwxMDAsMTAxLDExNiwKLSAgICAxMDEsOTksMTE2LDk1LDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywxMTcsMTEsMCwwLAotICAgIDAsODMsMTIxLDExMCwxMTYsOTcsMTIwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjUsMCwwLAotICAgIDAsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsMTE5LDEwOCwKLSAgICAxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDExNyw0LDAsMCwwLDc4LAotICAgIDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNyw2LDAsMCwKLSAgICAwLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDE4LDAsMCwwLDg1LDExMCwxMDUsOTksCi0gICAgMTExLDEwMCwxMDEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDY5LDExNCwxMTQsMTExLDExNCw0MCw5LAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsMTE2LDExMSwKLSAgICAxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTIsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsCi0gICAgMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSwxMTcsMTAsMCwwLDAsMTE0LDEwMSw5NywKLSAgICAxMDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLDAsMCwxMDEsMTEwLDk5LDExMSwKLSAgICAxMDAsMTA1LDExMCwxMDMsMTE3LDE1LDAsMCwwLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwKLSAgICA5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDE0MywzLDAsMCwxMTUsMzgsMCwwLDAsMCwyLDEyLDEsCi0gICAgMTUsMSwzLDEsMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLAotICAgIDE5LDEsMTgsMSw5LDEsMzEsMSwxOCwxLDMsMSwzMCwxLDE4LDEsCi0gICAgOSwxLDExNywyMywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDQ1LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MiwyLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsCi0gICAgMCwxMzEsMSwwLDEyNSwyLDAsMTAwLDEwLDAsMTI1LDMsMCwxMjEsMTYsMCwKLSAgICAxMTYsMiwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCwyNCwwLAotICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjMsMCwxLDEsMSwxMDAsMTAsMCwKLSAgICAxMjUsNCwwLDg5LDExMCwxNCwxLDg4LDEyMSwxOSwwLDEyNCwwLDAsMTA2LDQsCi0gICAgMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsMCw4NywxMTAsMTgsMCw0LDExNiwKLSAgICAzLDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsMSwxLDg5LDExMCwyMzAsMCw4OCwKLSAgICAxMTYsNSwwLDEyNCw1LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEyNSwzLDAsCi0gICAgMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMjUsCi0gICAgNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU5LDAsCi0gICAgMSwxLDEsODksMTEwLDE3NCwwLDg4LDEyMSwyOCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMjQsMSwwLDEyNCw2LDAsMTI0LDQsMCwxMjQsNSwwLDEzMSw0LDAsCi0gICAgMTI1LDcsMCw4NywxMTAsMjQsMCw0LDExNiw5LDAsMTE2LDEwLDAsMTAyLDIsCi0gICAgMCwxMDcsMTAsMCwxMTQsMjE0LDAsMSwxLDEsODksMTEwLDExOSwwLDg4LDExNiwKLSAgICAxMSwwLDEwMCwyLDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMTYsCi0gICAgMTIsMCwxMDYsMTMsMCwxMjQsNywwLDEzMSwxLDAsMTI1LDgsMCwxMTYsMTQsCi0gICAgMCwxMjQsOCwwLDExNiwxNSwwLDEzMSwyLDAsMTE0LDM4LDEsMTE2LDE2LDAsCi0gICAgMTA2LDE3LDAsMTI0LDgsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMTEsMCwKLSAgICAxMDAsMywwLDEyNCw0LDAsMTMxLDIsMCwxLDEyNCw4LDAsODMsMTAwLDQsCi0gICAgMCwxMjUsOSwwLDExNiw5LDAsMTI0LDksMCwxMDYsMTgsMCwxMjQsNCwwLAotICAgIDEzMSwxLDAsMTAwLDUsMCwxMjQsMSwwLDEwMCw2LDAsMTI0LDQsMCwxMzEsCi0gICAgMSwyLDEzMCwxLDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMTAsMCwxMTYsMTksMCwxMTYsMjAsMCwxMjQsMTAsMCwxMjQsMiwwLAotICAgIDEwMCw3LDAsMTAwLDgsMCwxMDAsMTEsMCwxMzEsNCwxLDEyNSwxMSwwLDExNiwKLSAgICAxMSwwLDEwMCwzLDAsMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDIyLDAsMTA2LAotICAgIDIzLDAsMTIsMTE0LDQ4LDIsMTI0LDQsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCwKLSAgICA0OCwyLDEyNCwzLDAsMTAwLDEwLDAsMTA3LDksMCwxMTQsNDgsMiwxMTYsMjQsCi0gICAgMCwxMTYsMjUsMCwxMzEsMSwwLDEyNSw2LDAsMTI0LDYsMCwxMDYsMjYsMCwKLSAgICAxMTYsMjcsMCwxMjQsMywwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCw2LDAsCi0gICAgMTA2LDI2LDAsMTE2LDI3LDAsMTE2LDI4LDAsMTI0LDEwLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMSwxMjQsNiwwLDEwNiwyNiwwLDExNiwxMiwwLDEwNiwKLSAgICAyOSwwLDEyNCwxMSwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyMSwzNiwwLDEyNCwKLSAgICAwLDAsMTA2LDMwLDAsMTI0LDIsMCwxMjQsNCwwLDEyNCw2LDAsMTMxLDMsCi0gICAgMCwxLDExNiwxMSwwLDEwMCw5LDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsCi0gICAgMTEzLDQ4LDIsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0NCwyLDEsMSwxLAotICAgIDg5LDExMyw0OCwyLDg4LDExMCwwLDAsMTI0LDExLDAsODMsNDAsMTIsMCwwLAotICAgIDAsMTE3LDE5MCwwLDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsCisgICAgMCwwLDExNSw0NSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKKyAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LAorICAgIDksMCwxMTQsMzcsMCwxMjQsMywwLDEwNiwyLDAsODMsMTAwLDEsMCw4MywKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDM0LDcwLDEwNSwxMTAsMTAwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNDYsNzgsNDEsMywxMTQsNzgsMCwKKyAgICAwLDAsMTE0LDgsMSwwLDAsMTE0LDE2MywwLDAsMCw0MSw0LDExNCwyNDIsCisgICAgMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE3MiwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsOSwxLDAsMCwxMTIsNSwwLDAsMTE1LDgsMCwwLDAsMCwKKyAgICAzLDE4LDEsMTIsMSw3LDIsMTIyLDMzLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAorICAgIDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MSwxMiwxMTQsNTcsMCwwLAorICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCisgICAgMTE0LDIyLDEsMCwwLDExNCwyMSwxLDAsMCwxMTQsMjAsMSwwLDAsMTE0LAorICAgIDQsMSwwLDAsMTE0LDE5LDEsMCwwLDExNCwyNSwxLDAsMCwxMTQsOCwKKyAgICAxLDAsMCwxMTQsOSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLAorICAgIDAsNjIsNSwwLDAsMTE1LDIwLDAsMCwwLDEyLDIsNiwzLDYsMywKKyAgICA2LDIsNiwyLDE4LDcsMTgsMTUsMywxLDIxLDE1LDMsMSwxMTQsMTYsCisgICAgMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLAorICAgIDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsCisgICAgMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDkwLDcsMCwxMDAsNiwwLAorICAgIDgzLDQxLDcsMjE4LDEzLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LAorICAgIDk5LDExNSwxMjIsODMsNjYsOTcsMTE1LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsCisgICAgMTAyLDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksMTExLDEwMCwxMDEsMzIsMTEwLDEwMSwKKyAgICAxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwxMTYsMTA0LDMyLDgzLDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgNSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw4OCwwLDAsCisgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLAorICAgIDEwMCwyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwzLDAsMjUsMTI1LDMsMCwKKyAgICAxMjQsMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCw0LDAsMjUsCisgICAgMTI1LDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LDIsMCwxMTEsODcsMCwxMjQsCisgICAgNCwwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MSw2LDEyMiwxNDEsNjcsMTExLDExMCwKKyAgICA5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDIsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTAzLDEwMSwxMTYsCisgICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNCw5NywxMTUsMzIsOTcsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMzksOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsMTE0LDI5LDAsMCwwLDExNCwKKyAgICAxMTAsMCwwLDAsMTE0LDcxLDAsMCwwLDExNCwxMDksMCwwLDAsMTE0LDc5LAorICAgIDAsMCwwLDQxLDQsMTE0LDM4LDAsMCwwLDExNCwyMzEsMCwwLDAsMTE0LAorICAgIDM0LDAsMCwwLDExNCwzMiwwLDAsMCw0MSw1LDExNCw3OCwwLDAsMCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCwxMjUsMCwwLDAsOTAsMTMsMTAyLDEwNSwxMDgsMTAxLAorICAgIDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsOTAsOSwxMTYsOTcsMTA1LDEwOCw5NSwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMjE2LDAsMCwwLDEyOCw1LDAsMCwxMTUsOCwwLDAsCisgICAgMCwwLDMsMjUsMSwyMiwxLDE5LDEsMTIyLDI0LDk1LDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKKyAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw4MCwwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsCisgICAgMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNTcsMCwxMTYsMiwwLDEwMCwyLAorICAgIDAsMTA2LDMsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDExNiw1LDAsMTI0LDIsMCwxMjQsCisgICAgMSwwLDEwNiw2LDAsMTMxLDMsMCwxLDEwMCwxLDAsODMsNDEsMywxMjIsCisgICAgMTksNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw0Niw3OCwxMjIsNTIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDExOSwKKyAgICAxMDQsMTAxLDExMCwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw0MCw0MSwzMiwxMTQsCisgICAgMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNzgsMTExLDExMCwxMDEsNDEsNywxMTQsMTAsMSwKKyAgICAwLDAsMTE0LDU3LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDQ3LDAsMCwKKyAgICAwLDExNCwxMDgsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsNjMsMCwwLDAsCisgICAgNDEsMywxMTQsNzgsMCwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsMTg5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwyNTMsMCwwLDAsMTM2LDUsMCwwLDExNSwxMCwwLDAsMCwwLDIsCisgICAgMTgsMSwxMiwxLDMsMSwyNCwxLDEyMiwyNSw5NSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzgsNDEsOCwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsCisgICAgMjUzLDAsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDAsMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDI2LDEsMCwwLDEyMiw1LDAsMCwxMTUsOCwwLDAsMCwKKyAgICAxMiwzLDYsMywxMiw4LDEyLDgsMTE0LDI2LDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNjQsMCwKKyAgICAwLDAsMTE1LDEwNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLAorICAgIDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLAorICAgIDMsMCwxMDAsNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsCisgICAgMCwxMzIsMCwwLDkwLDUsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCwKKyAgICA5MCw2LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDcsMCwxMDAsCisgICAgMTEsMCwxMDAsMTgsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwxLDkwLDgsCisgICAgMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwwLDkwLDksMCwxMDAsMTcsMCwKKyAgICA4Myw0MSwxOSwyMTgsMTIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLDEzMCwxLAorICAgIDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwxNzgsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywKKyAgICAxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTE0LDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LAorICAgIDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTA1LDEwOSwxMDEsMzIsNDAsOTcsMTEwLDMyLAorICAgIDEwNSwxMTAsMTE2LDQxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsNDQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKKyAgICAxMDUsMTE1LDMyLDk3LDMyLDExNSwxMTYsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDgyLDk3LDEwNSwxMTUsMTAxLDExNSwzMiw3Myw3OSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OCwxMDEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKKyAgICAxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMSwyMTgsNywKKyAgICA3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDE0OSw1LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDYsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsCisgICAgMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMCwwLDAsMCwxMDUsMSwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDEsMCw1NCw4MywKKyAgICA0MSwyLDk3LDE3MCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwKKyAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywKKyAgICAzMiw5NywzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsOTksMTE2LAorICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LAorICAgIDEwMSwxMDAsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTE2LDExMSwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsCisgICAgMTE1LDExNiwxMTQsNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODAsMTExLAorICAgIDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksMzIsNDAsCisgICAgMTA5LDk3LDExMCwxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEwLDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsCisgICAgOTcsMTA5LDExMiwzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDU5LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLDEwMSwzOSwKKyAgICAzMiw0MCwxMTEsMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsCisgICAgMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LAorICAgIDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwKKyAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLAorICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsOTcsMTAwLAorICAgIDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LDMyLAorICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwzMiwKKyAgICAxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMTQsMTc4LDAsMCwwLDQxLDEsMTE0LDI5LDEsMCwwLDQxLDIsMTE0LAorICAgIDc4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LAorICAgIDExNiw5NywxMTYsMTE1LDE1Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDExLDEyMiwKKyAgICAyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsMCwwLAorICAgIDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwyLAorICAgIDAsODMsNDEsMSwxMjIsMjI4LDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwKKyAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwxMTYsCisgICAgMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwzMiwKKyAgICAxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwKKyAgICA5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsCisgICAgMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LAorICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwKKyAgICAzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsCisgICAgMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDExNiwxMTQsOTcsCisgICAgMTEwLDExNSwxMDIsMTAxLDExNCwzMiwxMTIsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsCisgICAgMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQxLDEsMjE4LDgsMTE1LDEwMSwKKyAgICAxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MSw0LDExNCw3OCwwLDAsMCwxMTQsMTM1LDAsCisgICAgMCwwLDkwLDEwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDUzLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDE3MCw1LDAsMCwxMTUsMiwwLDAsMCwwLDgsMTIyLDI4LAorICAgIDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCwxLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMTUwLDc5LDExMiwKKyAgICAxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsCisgICAgMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLAorICAgIDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCw5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLAorICAgIDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsNzgsMTE0LDQsMCwwLDAsNDEsMywxMTQsNzgsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzEsMSwwLDAsMTgwLAorICAgIDUsMCwwLDExNSwwLDAsMCwwLDEyMiwyMSw4MywxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTYsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDEwNSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsMSwKKyAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDg3LDExMCw1OCwwLDQsMTE2LAorICAgIDIsMCwxMDcsMTAsMCwxMTQsOTQsMCwxLDEyNSw0LDAsMSwxMjIsMjYsMCwKKyAgICAxMTYsMywwLDEwMCwxLDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTI0LAorICAgIDQsMCwxMzAsMiwwLDg3LDg5LDEwMCwzLDAsMTAwLDMsMCwxMjUsNCwwLAorICAgIDEyNiw0LDAsODgsMTEwLDEsMCw4OCwxMTYsNCwwLDEyNCwzLDAsMTMxLDEsCisgICAgMCw4Myw0MSw0LDEyMiw1Miw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsCiAgICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwKICAgICAzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw4MiwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsCi0gICAgMTE5LDExNCwxMDUsMTE2LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsCi0gICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMywKLSAgICAwLDAsMCwxMjMsMTI1LDMyLDEwOSw5NywxMTYsOTksMTA0LDEwMSwxMTUsMzIsMTIzLDEyNSwKLSAgICAxMTcsMTksMCwwLDAsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAotICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMTI1LDExNywyMSwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDQ1LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywxMjUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAxLDEyMCwxMDEsOTksMTE3LDEyLDAsCi0gICAgMCwwLDEwMCwxMTEsMTEwLDExNiw5NSwxMDUsMTEwLDEwNCwxMDEsMTE0LDEwNSwxMTYsMTE3LDEwLAotICAgIDAsMCwwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNzgsODQsNDAsCi0gICAgMzEsMCwwLDAsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDMsMCwwLDAsCi0gICAgMTA1LDExMCwxMTYsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNywwLDAsMCw3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNyw4LDAsMCwwLDY5LDc5LDcwLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsCi0gICAgMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwxMTcsNSwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsCi0gICAgMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTcsMTYsMCwwLDAsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLAotICAgIDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsMCwxMDIsMTExLAotICAgIDExNCwxMDksOTcsMTE2LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwKLSAgICAxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsCi0gICAgMTAxLDEwMCwxMTcsNywwLDAsMCw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgMTksMCwwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDksMCwwLDAsOTgsMTIxLDExNiwxMDEsCi0gICAgOTcsMTE0LDExNCw5NywxMjEsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLDczLDY3LAotICAgIDk1LDY2LDg5LDg0LDY5LDgzLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTAwLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsMTE3LDMsMCwKLSAgICAwLDAsMTA4LDEwMSwxMTAsMTE3LDUsMCwwLDAsMTAwLDExNywxMDksMTEyLDExNSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSw0MCwxMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwKLSAgICAwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LAotICAgIDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNywyLDAsMCwwLDExNSwxMTYsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiwKLSAgICA5NywxMTcsMTAsMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMTE3LDUsMCwwLDAsMTAyLDExMSwxMTcsMTEwLDEwMCwxMTcsMywwLDAsMCwxMDksCi0gICAgMTE1LDEwMywxMTcsMTIsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDExLDAsMCwwLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsCi0gICAgMTAxLDk5LDExNiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE2NSwzLDAsMCwKLSAgICAxMTUsOTgsMCwwLDAsMCw3LDE1LDEsNiwxLDMsMSwxNiwxLDEzLAotICAgIDEsMTEsMiwzLDEsMTksMSwxMywxLDUsMiwxNiwxLDMsMSwxOSwKLSAgICAxLDEzLDEsNSwyLDMsMSwxMiwxLDMsMSwxMywxLDE5LDEsNSwKLSAgICAyLDksMSw3LDEsMTUsMSwxNSwxLDE2LDEsNiwxLDcsMSw0LAotICAgIDIsNiwxLDE4LDEsMTUsMSwxNSwxLDYsMSwxMiwxLDksMSwxMywKLSAgICAxLDIyLDEsMTIsMSwxMiwxLDE5LDEsMjUsMSwyMiwxLDMsMSwxOSwKLSAgICAxLDE3LDEsMTMsMSw4LDEsMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKLSAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNywwLDEsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwxMTUsMzIsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTEsMTEwLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiw4MiwxMDEsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwzMiw4NSwxMTUsMTAxLDMyLDExMSwKLSAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMDAsMTA1LAotICAgIDk5LDExNiw5NywxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsCi0gICAgMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDMyLDExNywxMTUsMTAxLDExNSw0NywxMTksMTE0LDEwNSwxMTYsMTAxLDExNSwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0MCwxLDAsMCwwLDExNywxMiwwLDAsMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjI3LAotICAgIDMsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTcsMjQsMCwwLDAsODMsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMCwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsMTAsMCwwLDAsMTAzLDEwMSwKLSAgICAxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTA0LDMsMCwwLDExNSwxNCwwLDAsMCwxNiwKLSAgICAyLDEyLDYsMTIsMTIsMTIsMTAsMTIsOSwxMiwyMiwxMiw2MiwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLDIsCi0gICAgMCwwLDAsMTE1LDkyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwKLSAgICAxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LDAsMTM1LDAsMCwKLSAgICAxMDIsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzQsMCwwLDEzMSwxLDAsOTAsCi0gICAgNiwwLDEwMSw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOCwwLAotICAgIDEzNSwwLDAsODMsNDAsMTAsMCwwLDAsMTE3LDEwLDAsMCwwLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAzLDAsMCwwLDY2LDk3LDExNSwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksMTA4LAotICAgIDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAotICAgIDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsCi0gICAgMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwxMTcsMTE1LAotICAgIDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsCi0gICAgMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNzUsMCwwLDAsNjcsOTcsCi0gICAgOTksMTA0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsCi0gICAgOTcsMTA5LDEwMSwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAotICAgIDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LAotICAgIDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQwLDIsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDI0MywzLAotICAgIDAsMCwxMTUsNCwwLDAsMCwwLDMsOSwxLDExNywxOSwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsCi0gICAgMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwKLSAgICAxMTYsMSwwLDEyNCwwLDAsMTMxLDIsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCw4Myw0MCwxLDAsMCwwLDExNywyNiwwLDAsMCw3NiwxMTEsOTcsCi0gICAgMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDAsMywwLDAsMCwxMTcsNSwwLDAsCi0gICAgMCwxMTUsMTE3LDExMiwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyNDksMywwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw1LDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgODMsNDAsMSwwLDAsMCwxMTcsNTgsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk3LDExNSwKLSAgICAzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0Niw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMCw0LDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDMsMTE3LDIzLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsOCwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDE0MywxNywwLDEyNSwyLAotICAgIDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsODcsMTAwLDIsMCw4MSwKLSAgICA4OCwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsCi0gICAgOTgsMTIxLDExNiwxMDEsMTE1LDQ2LDExNywxLDAsMCwwLDExNCw3OCw0MCwzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzMsNzksMTE3LDQsMCwwLDAsMTE0LDEwMSw5NywxMDAsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw1LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMiwyMSwxLDExNywxOSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw5LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsCi0gICAgMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMSwKLSAgICAwLDAsMCwxMTcsOSwwLDAsMCw5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSwKLSAgICA5NSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwyMzgsMywwLDAsMTE1LDEwLDAsMCwwLDE2LDMsNiwyLDEyLAotICAgIDYsMjQsNywxOCw1LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LDAsCi0gICAgMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwKKyAgICAxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsMTIyLDM5LDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwKKyAgICAzMiwxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiwKKyAgICA5Nyw0MCw0MSwxMTQsNjcsMCwwLDAsNzgsNDEsNSwxMTQsMjMxLDAsMCwwLAorICAgIDIxOCw4LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE0LDQwLDAsMCwwLDExNCwKKyAgICAxNDcsMCwwLDAsMTE0LDE5OCwwLDAsMCw0MSw1LDExNCw3OCwwLDAsMCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTk2LDAsMCwwLDIxOCwKKyAgICAzLDEwMSwxMjAsOTksMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDExLDEsMCwwLDE4Nyw1LDAsMCwxMTUsMTQsMCwwLAorICAgIDAsMCwyLDE1LDEsMywxLDE5LDEsMTgsMSw5LDEsMzEsMSwxMjIsCisgICAgMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDIxOCw5LDk1LDExMSwxMTIsMTE2LDEwNSwxMDksCisgICAgMTA1LDEyMiwxMDEsMTE0LDI5LDAsMCwwLDk5LDMsMCwwLDAsMSwwLDAsCisgICAgMCw0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDMxLDAsCisgICAgMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMSwwLDEyNCwyLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMjQsMywwLDEzMSw0LDIsCisgICAgODMsNDEsNSwxMjIsMTMwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDk5LDExMSwxMDksMTEyLAorICAgIDEwNSwxMDgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LAorICAgIDEwMCw5NywxMTYsOTcsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDk5LAorICAgIDk3LDExMCwzMiw5OCwxMDEsMzIsOTcsMTEwLDEyMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCisgICAgMzIsMTE2LDEyMSwxMTIsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDk5LDExMSwxMDksMTEyLDEwNSwKKyAgICAxMDgsMTAxLDQwLDQxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMTUsNDYsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE3MCwwLDAsMCwyMTgsMTIsMTAwLDExMSwKKyAgICAxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiw4NCwxMTQsMTEyLDAsMCwwLAorICAgIDQxLDIsMTE0LDEwOCwwLDAsMCwyMTgsNyw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwKKyAgICA0MSw0LDExNCw3OCwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCwzNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTQsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTYsMTExLAorICAgIDk1LDk5LDExMSwxMDAsMTAxLDE5Nyw1LDAsMCwxMTUsNCwwLDAsMCwwLDUsCisgICAgMTgsMSwxMjIsMjcsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsOTUsOTksMTExLDEwMCwxMDEsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDEwLDAsMCwwLDQ1LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNzcsMSwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKKyAgICAxLDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxLDAsMTI1LDMsMCwxMjEsMTYsCisgICAgMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCwyNCwKKyAgICAwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjMsMCwxLDEsMSwxMDAsMSwKKyAgICAwLDEyNSw0LDAsODksMTEwLDIwMiwwLDg4LDEyMSwxOSwwLDEyNCwwLDAsMTA2LAorICAgIDMsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsMCw4NywxMTAsMTgsMCw0LAorICAgIDExNiw0LDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsMSwxLDg5LDExMCwxNjIsMCwKKyAgICA4OCwxMTYsNSwwLDEyNCw1LDAsMTAwLDIsMCwyNSwxMzEsMSwwLDEyNSwzLAorICAgIDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwKKyAgICAxMjUsNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU5LAorICAgIDAsMSwxLDEsODksMTEwLDEwNiwwLDg4LDEyMSwzNCwwLDExNiw4LDAsMTI0LAorICAgIDYsMCwxMDAsMywwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMSwwLDEwMCw1LAorICAgIDAsMTI0LDQsMCwxMzEsMSwzLDEyNSw3LDAsODcsMTEwLDI0LDAsNCwxMTYsCisgICAgOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDIyMCwwLDEsMSwKKyAgICAxLDg5LDExMCw0NSwwLDg4LDExNiwxMSwwLDEwMCw2LDAsMTI0LDQsMCwxMjQsCisgICAgMiwwLDEzMSwzLDAsMSwxMTYsMTIsMCwxMjQsNywwLDEwMCw0LDAsMTI0LAorICAgIDEsMCwxMDAsNywwLDEyNCw0LDAsMTAwLDgsMCwxMjQsMiwwLDEzMSwxLAorICAgIDMsODMsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwKKyAgICAwLDEyNCwwLDAsMTA2LDEzLDAsMTI0LDgsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMTI1LDksMCwxMTYsMTEsMCwxMDAsOSwwLDEyNCwyLDAsMTMxLDIsMCwxLAorICAgIDExNiwxNCwwLDEwNiwxNSwwLDEyLDExNCwxNzMsMSwxMjQsNCwwLDEwMCwxLDAsCisgICAgMTA3LDksMCwxMTQsMTczLDEsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LAorICAgIDE3MywxLDExNiwxNiwwLDEyNCw5LDAsMTI0LDMsMCwxMTYsMTcsMCwxMjQsOCwKKyAgICAwLDEzMSwxLDAsMTMxLDMsMCwxMjUsNiwwLDEyMSwzNiwwLDEyNCwwLDAsCisgICAgMTA2LDE4LDAsMTI0LDIsMCwxMjQsNCwwLDEyNCw2LDAsMTMxLDMsMCwxLAorICAgIDExNiwxMSwwLDEwMCwxMCwwLDEyNCw0LDAsMTMxLDIsMCwxLDg3LDExMywxNzMsCisgICAgMSw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDE2OSwxLDEsMSwxLDg5LDExMywKKyAgICAxNzMsMSw4OCwxMTAsMCwwLDEyNCw5LDAsODMsNDEsMTEsMTIyLDE5MCw2NywxMTEsCisgICAgMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsOTcsMTAwLDEwNSwxMTAsCisgICAgMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE0LDEwMSwKKyAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwKKyAgICAxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwKKyAgICAxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwzMiwKKyAgICAxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5NywxMDgsCisgICAgMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsMTc4LDAsCisgICAgMCwwLDExNCwxODIsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsCisgICAgMCwxMjIsMTMsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LDMyLDEyMywxMjUsCisgICAgMTE0LDEzNCwwLDAsMCwxMTQsMTM1LDAsMCwwLDEyMiwxOSw5OSwxMTEsMTAwLDEwMSwKKyAgICAzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywxMjUsMTIyLAorICAgIDEwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTksMTE0LDIzMSwwLAorICAgIDAsMCwxMTQsMTI2LDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDMwLDEsMCwKKyAgICAwLDExNCwyOCwxLDAsMCwxMTQsMTQsMCwwLDAsMTE0LDMzLDEsMCwwLAorICAgIDExNCw0MCwwLDAsMCwxMTQsMTg1LDAsMCwwLDExNCwxNDcsMCwwLDAsMTE0LAorICAgIDE4MSwwLDAsMCwxMTQsMTQ2LDAsMCwwLDExNCwxOTAsMCwwLDAsMTE0LDM4LAorICAgIDEsMCwwLDExNCw3LDAsMCwwLDIxOCwxOSwxMDAsMTExLDExMCwxMTYsOTUsMTE5LAorICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTkzLDAsCisgICAgMCwwLDExNCwzMSwwLDAsMCwxMTQsMzIsMSwwLDAsNDEsMTAsMTE0LDc4LAorICAgIDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDEzNSwwLDAsMCwxMTQsMTgzLDAsCisgICAgMCwwLDExNCwxMzQsMCwwLDAsMjE4LDIsMTE1LDExNiwxMTQsNTMsMCwwLDAsCisgICAgMjE4LDEwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LDk3LDExNCwxOTYsMCwwLAorICAgIDAsOTAsMTEsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLAorICAgIDAsMCwyMDUsNSwwLDAsMTE1LDc4LDAsMCwwLDAsNywxNSwxLDYsCisgICAgMSwzLDEsMTYsMSwxMywxLDExLDIsMywxLDE5LDEsMTMsMSw1LAorICAgIDIsMTYsMSwzLDEsMTksMSwxMywxLDUsMiwzLDEsOSwxLDEyLAorICAgIDEsMTMsMSwxOSwxLDUsMiw5LDEsNywxLDE1LDEsNiwxLDcsCisgICAgMSwxNSwxLDE4LDEsMTMsMSwyMiwxLDEyLDEsOSwxLDE1LDEsMywKKyAgICAxLDE5LDEsMTcsMSwxMywxLDgsMSwxMjIsMjEsODMsMTExLDExNywxMTQsOTksCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKKyAgICA3OCwxMTQsMTMyLDAsMCwwLDQxLDEwLDExNCw1NywwLDAsMCwxMTQsNTYsMCwKKyAgICAwLDAsMTE0LDU4LDAsMCwwLDExNCwyOSwxLDAsMCwxMTQsMzAsMSwwLAorICAgIDAsMTE0LDMyLDEsMCwwLDExNCwzMSwxLDAsMCwxMTQsMTEsMSwwLDAsCisgICAgMTE0LDM4LDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjcsCisgICAgMSwwLDAsMTQ3LDUsMCwwLDExNSwxNCwwLDAsMCwxMiwyLDEyLDgsCisgICAgMTIsMTMsMTIsMTAsMTIsNywxMiwxMCwxOCw4LDExNCwyNywxLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLAorICAgIDAsMCwwLDAsMTE1LDg4LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCisgICAgMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwwLDEzNSwwLDAsMTAyLDEsMCwKKyAgICAxMDAsNCwwLDEwMCw1LDAsMTM0LDAsMCwxMzEsMSwwLDkwLDYsMCwxMDEsCisgICAgNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNywKKyAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDgsMCwxMzUsMCwwLAorICAgIDgzLDQxLDEwLDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLAorICAgIDEwMyw2Niw5NywxMTUsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LAorICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCwzMiwxMTIsMTE0LDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsCisgICAgMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsCisgICAgMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwKKyAgICAxMDksMzIsMTE3LDExNSw5NywxMDMsMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsCisgICAgMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsCisgICAgMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwKKyAgICAwLDk1LDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDc1LDY3LDk3LDk5LDEwNCwKKyAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwKKyAgICAxMDEsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsCisgICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywxMTAsMTAwLAorICAgIDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw3OCw0MSwyLDExNCw2NywwLDAsMCwxMTQsCisgICAgMzUsMCwwLDAsNDEsMywxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLDAsMCwKKyAgICAxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDc5LDAsMCwwLDYsNiwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMCwzLDksMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgMTE1LDIyLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwyLAorICAgIDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwxMjIsMjYsNzYsCisgICAgMTExLDk3LDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDIsMTE0LDExMSwKKyAgICAxMDksMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDMsMjE4LDUsMTE1LDExNywxMTIsCisgICAgMTAxLDExNCwxMTQsNDIsMSwwLDAsMTE0LDAsMSwwLDAsNDEsMiwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDE1MiwwLDAsMCw0MSwxLDExNCwyMjEsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDAsMSwwLDAsMTIsNiwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsODMsNDEsMSwxMjIsNTgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTExLDExNywxMTAsCisgICAgMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKKyAgICA0MSwxLDExNCwzNSwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMzEsMCwwLDAsMjEsNiwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwzLDEyMiwyMyw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLAorICAgIDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwzLDAsMCwwLDgsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDQxLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwMCwxLAorICAgIDAsMTMxLDIsMCwxNDMsMTcsMCwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwKKyAgICAxMzEsMCwwLDgzLDg3LDEwMCwyLDAsODEsODgsMTAwLDIsMCw4Myw0MSwzLAorICAgIDEyMiwzOSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsCisgICAgOTcsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNSwzMiwxMTQsCisgICAgOTcsMTE5LDMyLDk4LDEyMSwxMTYsMTAxLDExNSw0NiwyMTgsMSwxMTQsNzgsNDEsMywxMTQsCisgICAgNDksMCwwLDAsMTE0LDUwLDAsMCwwLDkwLDQsMTE0LDEwMSw5NywxMDAsNDEsCisgICAgMywxMTQsNzgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw1NCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMzMsMSwwLDAsMjYsNiwwLDAsMTE1LDQsMCwwLDAsMCwyLDIxLAorICAgIDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDksMTE0LDU3LDAsMCwwLDExNCw1NiwwLAorICAgIDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3OSwwLDAsCisgICAgMCwxMTQsMTUwLDAsMCwwLDExNCwwLDEsMCwwLDExNCwyMzEsMCwwLDAsCisgICAgMTE0LDMzLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDQxLAorICAgIDEsMTE0LDIyMSwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNDIsMSwwLDAsCisgICAgMSw2LDAsMCwxMTUsMTAsMCwwLDAsMTIsMyw2LDIsMTIsNiwyNCwKKyAgICA5LDE4LDUsMTE0LDQyLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsNjQsMCwwLDAsMTE1LDY0LDAsCisgICAgMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLAogICAgIDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwKICAgICAxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsCiAgICAgNywwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsCi0gICAgMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNjIsMCwwLAotICAgIDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSw0Niw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzOSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTA1LDIsMCwxMjQsMiwwLDEwNiwyLAotICAgIDAsMTAwLDEsMCw1NCwxMjQsMiwwLDEwNiwzLDAsMTAwLDIsMCw1NCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzMywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTUsMTA1LDEyMiwxMDEsNDAsNCwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLAotICAgIDExNSwxMTYsOTcsMTE2LDExNyw4LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MCwzLDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMiwwLDAsMCwxMTUsMTE2LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxNSw0LDAsMCwxMTUsNCwwLDAsMCwwLAotICAgIDIsMTUsMSwxMTcsMjcsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LAotICAgIDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCi0gICAgMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDgxLDAsMCwwLDEyMSwyMiwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTA2LDIsMCwxMjUsCi0gICAgNCwwLDg3LDExMCwyNCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNDgsMCwKLSAgICAxLDEsMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwKLSAgICAwLDEwMCwyLDAsNzksMTI1LDQsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDIsCi0gICAgMCwxMjQsMywwLDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwxLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsMTA1LDE4MiwxLDAsMCwxMDUsMTI4LDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSw0MCw1LDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsCi0gICAgMCwwLDAsMTE1LDExNiw5NSwxMDksMTExLDEwMCwxMDEsMTE3LDcsMCwwLDAsNzksCi0gICAgODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwMCwKLSAgICA5NywxMTYsOTcsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDQsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMjAsNCwwLDAsMTE1LDEyLDAsMCwwLDAsMiwKLSAgICAzLDEsMjIsMSwxMywxLDExLDMsMTAsMSwxMTcsMzIsMCwwLDAsODMsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywKLSAgICA1LDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSwxMDUsMTgyLDEsMCwwLDk5LDMsCi0gICAgMCwwLDAsMSwwLDAsMCw5LDAsMCwwLDE4LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywwLDAsMTI1LDYsMCwKLSAgICAxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsCi0gICAgMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsMCwxMzEsMSwwLDkyLAotICAgIDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwxMDYsMiwwLDEyNCw3LAotICAgIDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsMCwxMTYsMywwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywwLDExNiw0LDAsMTI0LAotICAgIDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNSwKLSAgICAwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEsODcsMTEzLDk0LDAsNCwKLSAgICAxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsMSwxMTksOTQsMCw4OSwKLSAgICAxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMTI1LDgsCi0gICAgMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsNCwwLDEyNCw4LAotICAgIDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsODksMTAwLDIsMCwxMDAsMiwKLSAgICAwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCw4OCwxMTMsOTQsMCw4NywKLSAgICAxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLDAsMTMxLDIsMCwxLAotICAgIDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSwKLSAgICA4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDEsMCwxMjQsCi0gICAgOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsCi0gICAgMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsMCw4Myw0MCw0LDAsCi0gICAgMCwwLDExNywyNywwLDAsMCw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwKLSAgICAxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwKLSAgICAxMDEsNDYsMTE3LDI3LDAsMCwwLDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwKLSAgICAzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsNzgsMTE3LDEyLDAsMCwwLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNDAsMTEsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDYsMCwwLDAsOTcsMTEyLAotICAgIDExMiwxMDEsMTEwLDEwMCwxMTcsOCwwLDAsMCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwxMDEsCi0gICAgMTAwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNSwwLDAsMCwxMDksMTA3LDEwMCwKLSAgICAxMDUsMTE0LDExNywxNSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsCi0gICAgMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw0MCw5LDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw1LDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsNiwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTQsMTE2LDExNywzLDAsMCwwLDEwMSwxMjAsOTksNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwKLSAgICAxMDAsOTcsMTE2LDk3LDMxLDQsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTgsCi0gICAgMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLDMsMSwxNywKLSAgICAxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwxNiwxLDE3LAotICAgIDEsMTgsMiwxMTcsMjUsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LAotICAgIDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMSw0LDAsMCwxMTUsOCwwLDAsMCwxNiwyLAotICAgIDYsMiwxMiw1LDEyLDExLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDYyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCw4Myw0MCw5LDAsMCwwLDExNywyMCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsNDUsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LAotICAgIDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDAsMCwxMjQsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMSwxLDgzLAotICAgIDQwLDMsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDg0LDQwLDIsMCwwLDAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2NCw0LDAsMCwKLSAgICAxMTUsMiwwLDAsMCwwLDEsMTE3LDMyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCw2LDAsMCwwLDYsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDEzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEyNCwzLDAsCi0gICAgMTI0LDIsMCwxMDAsMCwwLDEzMSw0LDAsMTI1LDQsMCwxMTYsNCwwLDEwNiwKLSAgICA1LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw1LDAsMTE2LDYsMCwxMjQsNSwKLSAgICAwLDExNiw3LDAsMTMxLDIsMCwxMTQsMTAxLDAsMTE2LDgsMCwxMDAsMSwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxLDEyNCw1LDAsODMsMTE2LDksMCwxMDAsMiwKLSAgICAwLDEwNiwxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMDAsMywwLDEyNCwxLDAsCi0gICAgMTAwLDQsMCwxMjQsMiwwLDEzMSwxLDIsMTMwLDEsMCwxMDAsMCwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDIxLDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLAotICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsCi0gICAgMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LAotICAgIDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxMSwwLDAsCi0gICAgMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LAotICAgIDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMTcsNSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwKLSAgICAxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwwLDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLAotICAgIDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsNDAsNiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICA5OSwxMTEsMTAwLDEwMSw2Nyw0LDAsMCwxMTUsMTgsMCwwLDAsMCwxLDE1LAotICAgIDEsMTUsMSwyNCwxLDE1LDEsMTUsMSwxMywxLDQsMiwxOCwxLDExNywKLSAgICAyOSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsCi0gICAgMiwwLDAsMCwxMTcsMzksMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc5LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwKLSAgICAxMTcsMzEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwKLSAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSw3OCw0MCw3LDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDYwLDQsMCwwLDExNSw4LDAsMCwKLSAgICAwLDE2LDIsNiwyLDEyLDMsMTIsMTIsMTE3LDIwLDAsMCwwLDgzLDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDUsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDEwNCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsCi0gICAgMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwKLSAgICAwLDEwMSw2LDAsMTAxLDcsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICAxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCw5MCw4LDAsMTAwLDYsMCwxMDAsCi0gICAgNywwLDEzMiwwLDAsOTAsOSwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwKLSAgICAwLDkwLDEwLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCwxMSwwLAotICAgIDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwwLDExNywxOSwwLDAsMCw2OSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsOTMsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDAsODMsNDEsMTEsMjE4LDE2LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDYyLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMTEsMTAyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LAorICAgIDEyMSwxMTUsMTE2LDEwMSwxMDksNDYsOTksMiwwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzYsMCwwLDAsCisgICAgMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDUsMiwwLDEyNCwKKyAgICAyLDAsMTA2LDEsMCwxMDAsMSwwLDU0LDEyNCwyLDAsMTA2LDIsMCwxMDAsCisgICAgMiwwLDU0LDgzLDQxLDMsMTIyLDMzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTQsMTc4LDAsMCwwLDExNCwxNzksCisgICAgMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMjE4LDgsMTE1LDExNiw5NSwxMDksCisgICAgMTE2LDEwNSwxMDksMTAxLDkwLDcsMTE1LDExNiw5NSwxMTUsMTA1LDEyMiwxMDEsNDEsMywxMTQsCisgICAgNzgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0MCwxLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzAsMSwKKyAgICAwLDAsMzYsNiwwLDAsMTE1LDQsMCwwLDAsMCwyLDEyLDEsMTIyLAorICAgIDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLAorICAgIDAsMCwwLDAsMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDM0LDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwKKyAgICA0LDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMDAsMSwKKyAgICAwLDEyNCw0LDAsMTMxLDIsMSw4Myw0MSwyLDc4LDIxOCw1LDk1LDEwOSwxMTEsCisgICAgMTAwLDEwMSw0MSwyLDExNCwxMzgsMCwwLDAsMTE0LDMxLDEsMCwwLDQxLDUsCisgICAgMTE0LDc4LDAsMCwwLDExNCwxMzUsMCwwLDAsMTE0LDEzNCwwLDAsMCwxMTQsCisgICAgNTMsMCwwLDAsMTE0LDQyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMiwxLDAsMCw0MSw2LDAsCisgICAgMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwxMjIsMzIsODMsMTExLDExNywxMTQsCisgICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw0NywxLDAsCisgICAgMCwxMDUsMTgyLDEsMCwwLDk5LDMsMCwwLDAsMSwwLDAsMCw5LAorICAgIDAsMCwwLDE4LDAsMCwwLDY3LDAsMCwwLDExNSw1MywxLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsCisgICAgNSwwLDEwMywwLDAsMTI1LDYsMCwxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwKKyAgICAwLDExNiwxLDAsMTI0LDQsMCwxMzEsMSwwLDEyLDExNCw4MCwwLDExNiwwLAorICAgIDAsMTI0LDQsMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSw3LDAsCisgICAgMTI0LDYsMCwxMDYsMiwwLDEyNCw3LDAsMTMxLDEsMCwxLDExMywyNywwLAorICAgIDg3LDEyMCwxMzIsMCwxMTYsMywwLDEyNCw2LDAsMTMxLDEsMCw2OCw5MywxMTgsCisgICAgMCwxMjUsNywwLDExNiw0LDAsMTI0LDQsMCwxMjQsNywwLDEzMSwyLDAsCisgICAgMTI1LDQsMCwxMjEsMTcsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsCisgICAgMSwwLDEsODcsMTEzLDk0LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsCisgICAgMCwxLDEsMSwxMTksOTQsMCw4OSwxMTMsOTQsMCw0LDExNiw4LDAsMTA3LAorICAgIDEwLDAsMTE0LDIxMSwwLDEsMTI1LDgsMCwxLDEyMiwyNSwwLDExNiw5LDAsCisgICAgMTAwLDEsMCwxMjQsNCwwLDEyNCw4LDAsMTMxLDMsMCwxLDEwMCwyLDAsCisgICAgODMsODcsODksMTAwLDIsMCwxMDAsMiwwLDEyNSw4LDAsMTI2LDgsMCw4OCwKKyAgICAxMTMsOTQsMCw4OCwxMTMsOTQsMCw4NywxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwKKyAgICAwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEsMTE2LDksMCwxMDAsMywKKyAgICAwLDEyNCwxLDAsMTMxLDIsMCwxLDg3LDExMCw1MywwLDQsMTE2LDgsMCwKKyAgICAxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSw4LDAsMSwxMjIsMjEsMCwxMTYsOSwKKyAgICAwLDEwMCwxLDAsMTI0LDEsMCwxMjQsOCwwLDEzMSwzLDAsMSw4Nyw4OSwKKyAgICAxMDAsMiwwLDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMCwxLDAsCisgICAgODgsMTAwLDIsMCw4Myw0MSw0LDEyMiwyNyw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsNDYsMTIyLDI3LDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwzMiwKKyAgICA5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsNzgsMTIyLDEyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgNDEsMTEsMTE0LDM4LDAsMCwwLDExNCw0NiwwLDAsMCwxMTQsMjIwLDAsMCwKKyAgICAwLDExNCwzMywwLDAsMCwxMTQsMjgsMCwwLDAsMTE0LDMsMCwwLDAsCisgICAgOTAsNSwxMDksMTA3LDEwMCwxMDUsMTE0LDIxOCwxNSw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LAorICAgIDExNSwxMTYsMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTQsNDAsMCwwLDAsMTE0LDE0NiwwLAorICAgIDAsMCwxMTQsNTUsMCwwLDAsNDEsOSwxMTQsNzgsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNDcsMSwwLDAsMTE0LDIyOCwwLAorICAgIDAsMCwxMTQsMTI1LDAsMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLAorICAgIDAsMTE0LDM0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwzMSwxLDAsMCw0Niw2LDAsMCwxMTUsMzgsCisgICAgMCwwLDAsMCwyLDE4LDEsNiwyLDIyLDEsMTgsMSwxNywyLDE5LAorICAgIDEsMTUsMSwzLDEsMTcsMSwxMywyLDcsMSwxOCwzLDE2LDEsMjcsCisgICAgMSwzLDEsMTYsMSwxNywxLDE4LDIsMTIyLDI1LDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsOTUsCisgICAgMTAwLDk3LDExNiw5Nyw3OCw0MSw3LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLAorICAgIDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMzAsMSwwLDAsCisgICAgMTE0LDMyLDEsMCwwLDExNCwzMSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNDUsCisgICAgMSwwLDAsMzIsNiwwLDAsMTE1LDgsMCwwLDAsMTIsMiw2LDIsCisgICAgMTIsNSwxMiw1LDExNCw0NSwxLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw0NiwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LAorICAgIDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsCisgICAgODMsNDEsNywyMTgsMjAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDQ1LDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwxMTUsMzIsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNSw0Niw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsNSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSw3NiwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLAorICAgIDExNiwyLDAsMTI0LDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMjQsCisgICAgMiwwLDEzMSwxLDIsMTI1LDQsMCwxMTYsMywwLDEyNCw0LDAsMTAwLDEsCisgICAgMCwxMjQsMSwwLDEwMCwzLDAsMTI0LDIsMCwxMzEsMSwyLDgzLDQxLDQsCisgICAgNzgsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTM0LDAsMCwwLAorICAgIDQxLDQsMTE0LDIzMSwwLDAsMCwxMTQsMzMsMSwwLDAsMTE0LDE4NSwwLDAsCisgICAgMCwxMTQsMTkwLDAsMCwwLDQxLDUsMTE0LDc4LDAsMCwwLDExNCwxNTIsMCwKKyAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNDEsMSwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDEwLDEsMCwwLDc5LDYsMCwwLDExNSw4LDAsMCwwLDAsMSwKKyAgICAxNSwxLDE1LDEsMjQsMSwxMjIsMjksODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsCisgICAgMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsCisgICAgOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsCisgICAgMSwwLDgzLDQxLDIsMTIyLDM5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLAorICAgIDExMCwxMDEsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsCisgICAgMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LAorICAgIDQsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTEsMSwwLDAsODUsNiwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwKKyAgICAzMSw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDc4LDQxLDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwKKyAgICAwLDAsMTE0LDU5LDAsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsMSwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDQ5LDEsMCwwLDc1LDYsMCwwLDExNSw2LAorICAgIDAsMCwwLDEyLDIsNiwyLDEyLDYsMTE0LDQ5LDEsMCwwLDk5LDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsCisgICAgMCwwLDAsMTE1LDExOCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwKKyAgICAwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCisgICAgNSwwLDEwMSw2LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsCisgICAgMCw5MCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOCwwLAorICAgIDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsOSwwLDEwMCwxMiwwLDEwMCwKKyAgICAxMywwLDEzMiwwLDAsOTAsMTAsMCwxMDEsNiwwLDEwMCwxNCwwLDEwMCwxNSwKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMSwwLDEwMCwxNiwwLDgzLDQxLDE3LAorICAgIDIxOCwxOSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwxMjIsOTMsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDk5LDExMSwKKyAgICAxMTAsMTE1LDExNiwxMTQsMTE3LDk5LDExNiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsCisgICAgMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDExOSwxMTEsMTE0LDEwNywzMiwxMTksMTA1LAorICAgIDExNiwxMDQsMzIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCisgICAgMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDY3LDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCw0MSwzLDExNCw3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw3OSwwLDAsMCwxMDIsNiwwLDAsMTE1LDQsMCwwLAorICAgIDAsMCwxLDksMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKKyAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE0MCwwLDAsMCwxMjQsMSwwLAorICAgIDEwNiwwLDAsMTI1LDIsMCwxMjQsMiwwLDEwNiwxLDAsMTI1LDMsMCwxMTYsCisgICAgMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMywwLDEyNCwwLDAsMTA2LDUsCisgICAgMCwxMzEsMywwLDEyNSwxLDAsMTE2LDYsMCwxMDAsMSwwLDEyNCwwLDAsCisgICAgMTA2LDUsMCwxMzEsMiwwLDEsMTI0LDAsMCwxMDYsNywwLDEyNCwzLDAsCisgICAgMTMxLDEsMCwxMTQsMTE3LDAsMTE2LDgsMCwxMjQsMSwwLDEwMCwyLDAsMTMxLAorICAgIDIsMCwxMiwxMTQsMTE3LDAsMTE2LDksMCwxMjQsMCwwLDEwNiw1LDAsMTMxLAorICAgIDEsMCwxMDAsMywwLDI1LDEwMywxLDAsMTI0LDEsMCw5NSwxMCwwLDExMCwKKyAgICAwLDAsMTE2LDExLDAsMTI0LDIsMCwxMzEsMSwwLDEwNiwxMiwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDEsNCw3OCwxMjIsMzMsMTAxLDEyMCwKKyAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE0LAorICAgIDIzOSwwLDAsMCwxMTQsNzEsMCwwLDAsNDEsMTMsMTE0LDIwMywwLDAsMCwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsOTYsMCwwLDAsOTAsCisgICAgMTIsMTA4LDExMSw5NywxMDAsOTUsMTAwLDEyMSwxMTAsOTcsMTA5LDEwNSw5OSwxMTQsMzUsMCwKKyAgICAwLDAsMTE0LDE0NiwwLDAsMCwxMTQsMjE2LDAsMCwwLDExNCw2MCwwLDAsCisgICAgMCwxMTQsMzgsMCwwLDAsMTE0LDIzOSwwLDAsMCwxMTQsMTY4LDAsMCwwLAorICAgIDExNCwyNTAsMCwwLDAsNDEsNCwxMTQsNzgsMCwwLDAsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsMTcyLDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI1MywwLDAsMCwxMDYsCisgICAgNiwwLDAsMTE1LDE2LDAsMCwwLDAsMiw5LDEsOSwxLDksMSwKKyAgICAxNSwxLDE2LDEsMzEsMSwyOCwxLDEyMiwzMSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDEsMTIwLAorICAgIDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywKKyAgICAwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLAorICAgIDQxLDEsMTIyLDI1LDc2LDExMSw5NywxMDAsMzIsOTcsMTEwLDMyLDEwMSwxMjAsMTE2LDEwMSwKKyAgICAxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDQxLDEsMTE0LAorICAgIDE3NSwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwxMTQsMTUyLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAwLDEsMCwwLDExOCw2LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLAorICAgIDMxLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAorICAgIDAsMywwLDAsMCwxMTUsNDgsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAorICAgIDEwNiwxLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEzNywwLDAsMTE2LDIsMCwKKyAgICAxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwwLDAsMTE2LAorICAgIDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsODMsNDEsNCwxMjIsNDksODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLAogICAgIDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDk5LDExMSwxMTAsCi0gICAgMTE1LDExNiwxMTQsMTE3LDk5LDExNiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LAotICAgIDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDExOSwxMTEsMTE0LDEwNywzMiwxMTksMTA1LDExNiwKLSAgICAxMDQsMzIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTAwLAotICAgIDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDIsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTYsNCwwLDAsMTE1LDQsMCwKLSAgICAwLDAsMCwxLDksMSwxMTcsMjgsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLAotICAgIDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwxNzUsMCwwLAotICAgIDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCwxMjUsMiwwLAotICAgIDEyMSwxMDcsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEyNCwKLSAgICAwLDAsMTA2LDUsMCwxMzEsMywwLDEyNSwzLDAsMTE2LDYsMCwxMDAsMSwKLSAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMzEsMiwwLDEsMTI0LDAsMCwxMDYsNywKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMTE3LDAsMTE2LDgsMCwxMjQsMywwLAotICAgIDEwMCwyLDAsMTMxLDIsMCwxMiwxMTQsMTE3LDAsMTE2LDksMCwxMjQsMCwwLAotICAgIDEwNiw1LDAsMTMxLDEsMCwxMDAsMywwLDI1LDEwMywxLDAsMTI0LDMsMCwKLSAgICA5NSwxMCwwLDExMCwwLDAsMTI0LDMsMCw4Myw4NywxMTAsNDYsMCwxLDEsCi0gICAgMSwxMjQsMiwwLDEyLDExNCwxNjMsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMDcsNiwwLDExNCwxNjMsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKLSAgICA2MSwxMTAsMCwwLDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLAotICAgIDQwLDUsMCwwLDAsMTE3LDI1LDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsCi0gICAgMTEwLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDExNywzMywwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLAotICAgIDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsOCwwLDAsMCw5NSw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMDUsMCwwLDAsMCw3OCw0MCwxMSwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsCi0gICAgMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLAotICAgIDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDAsMTIxLDExMCw5NywxMDksMTA1LDk5LDExNyw0LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwKLSAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDcsMCwwLDAsMTA0LAotICAgIDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksCi0gICAgMCwwLDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDEwMCw0LDAsMCwxMTUsMjQsMCwwLDAsMCw1LDE1LDEsCi0gICAgMywxLDksMSwxNSwxLDE2LDEsMzEsMSwyOCwxLDgsMSwzLDEsCi0gICAgMjIsMSwxMywxLDExNywzMSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsMTE1LDQ4LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTAwLDEsCi0gICAgMCwyNSwxMzcsMCwwLDExNiwyLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwyLAotICAgIDAsMTAwLDMsMCwxMzQsMCwwLDExNiwzLDAsNjgsMTMxLDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDQsMCwwLDAsMTE3LDQ5LDAsMCwwLDgyLDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDEsCi0gICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMDUsMSwwLAotICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LAotICAgIDAsMCwwLDUxLDAsMCwwLDExNSwzMSwwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIxLDAsMTI1LDEsMCwxMzYsMCwwLDEwMCwwLDAsMTI0LDEsMCwyMywxMDcsCi0gICAgMiwwLDg2LDEsMTEzLDMsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDc4LDQwLDAsCi0gICAgMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLDAsMCw0Niw0OCwxMTcsCi0gICAgNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwxLDAsMCwwLDExNywKLSAgICA5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwKLSAgICAxMTQsNjIsMTIxLDQsMCwwLDExNSwyLDAsMCwwLDYsMSwxMTcsNDksMCwKLSAgICAwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwKKyAgICAxMDEsMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTE0LAorICAgIDI5LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDQsMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLAorICAgIDAsOTMsMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLAorICAgIDIzLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDEsMiwxMTQsCisgICAgNzksMCwwLDAsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLAorICAgIDAsMjE4LDYsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDEsMSwyMTgsOSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIxMSwwLDAsMCwxMjYsNiwwLDAsMTE1LDIsMCwwLDAsNiwxLAorICAgIDEyMiw0OSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAogICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKICAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwKLSAgICAxMTIsMTE0LDYyLDQwLDQsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDMsMCwwLDAsOTcsMTEwLDEyMSwxMTcsMTgsMCwwLDAsNjksODgsCi0gICAgODQsNjksNzgsODMsNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwxMTgsNCwwLDAsMTE1LDYsMCwwLDAsMCwyLDE5LAotICAgIDEsMTgsMSwxMTcsMzAsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwKLSAgICAxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYzLDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk3LDExMCwzMiwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDk3LAotICAgIDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiw0Niw3OCw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwKLSAgICAxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDEyNCw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI4LDAsMCwwLAotICAgIDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTI4LDQsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMzAsMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCw0MCwxMiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsCi0gICAgMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDg4LDQsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxNiw2LDYsMiwxMiw0LDMsMSwzLDEsMjQsMTYsMTIsCi0gICAgNiwxMiw0LDExNywxOSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLAotICAgIDExNSwxMzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLAotICAgIDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwKLSAgICA5MCw5LDAsMTAwLDE0LDAsMTAwLDE1LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwKLSAgICAxNiwwLDEwMCwxNywwLDEzMiwwLDAsOTAsMTEsMCwxMDAsMTgsMCwxMDAsMTksCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDIwLDAsODMsNDAsMjEsMCwwLDAsCi0gICAgMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCi0gICAgOTcsMTE2LDEwNCwxMTcsMzgsMSwwLDAsODIsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLAotICAgIDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwzMiwzMiwKLSAgICA3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwxMTEsMTExLDEwNywxMTUsMzIsMTE3LAotICAgIDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDM5LDExNSwxMCwzMiwKLSAgICAzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0NiwzMiwzMiw4NywxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LDk3LDExMCwxMDMsMTAxLDExNSw0NCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTExLDExOSwKLSAgICAxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDk5LDExMSwxMDksMTEyLAotICAgIDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDMyLDMyLDcwLDExMSwKLSAgICAxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0Niw5OSw0LAotICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwKLSAgICAwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTE2LDIsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwwLDAsOTUsNCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDYsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDUsMCwwLDAsCi0gICAgMTE2LDExNywxMTIsMTA4LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTcsMCwwLDAsOTUsCi0gICAgMTA4LDk3LDExNSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsMTIsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCi0gICAgMTE0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDE0MCw0LDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDExNywyMywwLDAsMCwKLSAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCwKLSAgICA5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwNywyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCwKLSAgICA1LDAsMTAyLDIsMCw4Myw0MCw3LDAsMCwwLDExNyw2MiwwLDAsMCwKLSAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLAotICAgIDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiwKLSAgICA5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LDQ1LDExMCw5NywxMDksMTAxLDQxLDExNywxLAotICAgIDAsMCwwLDQ2LDExNywwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsCi0gICAgMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMiwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNCwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsMCwwLDAsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsMiwwLDAsCi0gICAgMCwxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxNDYsNCwwLDAsMTE1LAotICAgIDgsMCwwLDAsMCwyLDI3LDEsMTIsMiw0LDMsMTE3LDM4LDAsMCwKLSAgICAwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0NiwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsOTIsMiwwLDEyNSwxLDAsCi0gICAgMTI1LDIsMCwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LAotICAgIDEyNCwyLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDQsMCwKLSAgICAwLDAsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDE4LDAsMCwKLSAgICAwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDE0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDk3LDExNiwxMTYsCi0gICAgMTE0LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLAotICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTU2LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMSwxOCwxLDExNywzMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwKLSAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTA3LDMsMCwKLSAgICAxMTQsOTYsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwKLSAgICAxLDAsMTMxLDIsMCw5MiwyLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLAotICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCw4NCwwLDEyNCwzLDAsMTI0LDAsMCwKLSAgICA5NSw2LDAsMTEwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMiwwLDExMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsNiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNywwLDAsMCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxNjAsNCwwLDAsMTE1LDE0LAotICAgIDAsMCwwLDAsMiwxOCwxLDE1LDEsMjcsMywxMiwxLDEyLDEsMTIsCi0gICAgMSwxMTcsMjcsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCwKLSAgICA3OCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDEwNSwxMTYsMTAxLDExNCwxMTcsCi0gICAgMTIsMCwwLDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDE3Miw0LDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDIzLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKLSAgICAxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDQwLDEsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTUsOTUsMTA4LDEwMSwxMTAsCi0gICAgOTUsOTUsMTc1LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjIsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsCi0gICAgMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDc4LDExNywyMCwwLDAsMCw5NSw3OCw5NywKLSAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDAsMTIzLDMzLDExNCwxMjUsCi0gICAgNDEsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsCi0gICAgMTE2LDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDE3OCw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIzLDAsCi0gICAgMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwKLSAgICA0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCwxMDcsCi0gICAgNiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTIsCi0gICAgMCwwLDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsCi0gICAgMCwwLDEwNSwxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxMiwwLDAsMCw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLAotICAgIDExNSw5NSw5NSwxODEsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyNywKLSAgICAwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwKLSAgICAxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsOTUsOTUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDIsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMDUsCi0gICAgMTE2LDEwMSwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDE4NCw0LDAsMCwxMTUsMiwKLSAgICAwLDAsMCwwLDEsMTE3LDIxLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LAotICAgIDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDc4LAotICAgIDQwLDEzLDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICA5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDIzLDAsMCwwLAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTAxLDExMCw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwKLSAgICAxMTQsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwKLSAgICAxMTAsMTE1LDk1LDk1LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCi0gICAgMTE2LDEwNCwxMzMsNCwwLDAsMTE1LDIwLDAsMCwwLDE2LDUsNiwyLDEyLAotICAgIDYsMTIsMTAsMTIsNCwxMiwxMiwxMiwzLDEyLDMsMTIsMywxMiwzLDExNywKLSAgICAxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAotICAgIDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywKLSAgICAwLDAsMCw2NiwwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwKLSAgICAyLDAsMTMyLDAsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMywwLDEwMCw0LAotICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLDEwMCw1LDAsCi0gICAgMTAwLDYsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNywwLDEwMCw3LDAsODMsCi0gICAgNDAsOCwwLDAsMCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksNCwwLDAsMCwwLDAsCi0gICAgMCwwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjUsCi0gICAgMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMywwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCwyLDAsMCwwLDExNywxNCwwLDAsMCw5NSw3OCw5NywxMDksCi0gICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsMTE3LDUsMCwwLDAsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDExLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDE4OSw0LDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDI0LDAsMCwwLDc4LDk3LDEwOSwKLSAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwKLSAgICAxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsCi0gICAgMSwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDAsCi0gICAgMiwwLDAsMCw3OCwxMTcsMjUsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMzksMTIzLDEyNSwzOSwzMiw0MCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAotICAgIDEwMSw0MSw2Miw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsCi0gICAgNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw2LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNCwxMDEsMTEyLDExNCwxOTIsNCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywKLSAgICAyNywwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMTIsMTE0LDYyLDQxLDQsMTE0LDM4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsCisgICAgMjEyLDAsMCwwLDIxOCwxOCw2OSw4OCw4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSwKKyAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MSwyLDExNCw3OCwwLDAsMCwxMTQsCisgICAgMTUyLDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDUyLDEsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwyMTYsMCwwLDAsMTIzLDYsMCwwLDExNSw2LAorICAgIDAsMCwwLDAsMiwxOSwxLDE4LDEsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwKKyAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwKKyAgICAxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsCisgICAgMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw2Myw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsCisgICAgMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksOTcsCisgICAgMTEwLDExMCwxMTEsMTE2LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiw5OSwxMTEsCisgICAgMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDYsNzgsMTE0LDQsMCwwLDAsCisgICAgNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAsMSwwLDAsCisgICAgMTI5LDYsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMjgsNjksMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwKKyAgICAwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwKKyAgICAzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsCisgICAgNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMTEsMSwwLDAsMTMzLDYsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMiwxMjIsMzAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCw4Myw0MSwxLDEyMiw1OCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwKKyAgICAxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAorICAgIDQxLDEsMTE0LDM1LDAsMCwwLDQxLDIsMTE0LDc4LDAsMCwwLDExNCwxNTIsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIzMSwwLDAsMCwxMzcsNiwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwzLDEyMiwzMiw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsCisgICAgMTEwLDk3LDEwOSwxMDEsNzgsNDEsMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsCisgICAgMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3OSwwLDAsMCwKKyAgICAxMTQsMjUzLDAsMCwwLDExNCwxNTAsMCwwLDAsMTE0LDAsMSwwLDAsMTE0LAorICAgIDIxNiwwLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDExLDEsMCwwLDExNCwyMzEsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDUwLDEsMCwwLDk0LDYsMCwwLAorICAgIDExNSwxNiwwLDAsMCwxMiw2LDYsMiwxMiw0LDEyLDEyLDE4LDUsMTIsCisgICAgNiwxMiw0LDEyLDQsMTE0LDUwLDEsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDEzMCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LAorICAgIDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsCisgICAgMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCwKKyAgICA4LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDE0LAorICAgIDAsMTAwLDE1LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwxNiwwLDEwMCwxNywwLAorICAgIDEzMiwwLDAsOTAsMTEsMCwxMDAsMTgsMCwxMDAsMTksMCwxMzIsMCwwLDkwLAorICAgIDEyLDAsMTAwLDIwLDAsODMsNDEsMjEsMjE4LDE0LDk1LDc4LDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw5NywzOCwxLDAsMCw4MiwxMDEsMTEyLAorICAgIDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDExNSwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzksMTE1LDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDQ2LDMyLDMyLDczLDExNiwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMzIsMzIsMzIsCisgICAgMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA4LDExMSwKKyAgICAxMTEsMTA3LDExNSwzMiwxMTcsMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwKKyAgICAxMTYsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LAorICAgIDQ2LDMyLDMyLDg3LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiw5OSwxMDQsOTcsCisgICAgMTEwLDEwMywxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDM5LDExNSwzMiwxMTEsMTE5LDExMCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNCwKKyAgICAxMDEsOTksMTExLDEwOSwxMTIsMTE3LDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDExNywKKyAgICAxMTUsMTA1LDExMCwxMDMsMzIsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsMzIsMzIsNzAsMTExLDExNCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsCisgICAgMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwxMDUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDQ2LDk5LDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDUyLDAsMCwwLDEyNCwxLDAsCisgICAgMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMTYsCisgICAgMiwwLDEyNCwwLDAsMTA2LDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI0LDAsCisgICAgMCw5NSw0LDAsMTI0LDMsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLAorICAgIDgzLDQxLDEsNzgsNDEsNiwxMTQsOTMsMCwwLDAsMTE0LDI0OSwwLDAsMCwKKyAgICAxMTQsMjI2LDAsMCwwLDIxOCwxNiw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwKKyAgICAxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDIxOCwxNyw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsCisgICAgOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDIxOCwxMiw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw0LDExNCw3OCwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDIxOCwxMSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNzksMCwwLDAsMTUwLDYsMCwwLDExNSw4LAorICAgIDAsMCwwLDAsMSw5LDEsOSwxLDIxLDEsMTIyLDIzLDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLDkyLDMsMCwKKyAgICAxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LAorICAgIDIsMCwxMTQsNDMsMCwxMDAsNiwwLDgzLDEyNCwxLDAsMTAwLDUsMCwxMDIsCisgICAgMiwwLDgzLDQxLDcsMTIyLDYyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LAorICAgIDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsMTExLDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsCisgICAgMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiwKKyAgICA5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLDk3LDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsCisgICAgMTEwLDk3LDEwOSwxMDEsNDEsMTE0LDExMCwwLDAsMCwxMTQsMzAsMCwwLDAsMTE0LAorICAgIDcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwyMzksMCwwLDAsNDEsMiwKKyAgICAxMjIsMywxMTUsMTIxLDExNSwxMjIsNCwxMTIsOTcsMTE2LDEwNCw0MSwyLDExNCw5MywwLAorICAgIDAsMCwxMTQsMzIsMCwwLDAsNDEsNCwxMTQsNzgsMCwwLDAsMTE0LDIyOCwKKyAgICAwLDAsMCwyMTgsMywxMDAsMTExLDExNiwxMTQsODMsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIzLDk1LDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDExMCw5NywxMDksMTAxLDExNSwxNTYsNiwwLDAsMTE1LDgsMCwwLDAsMCwyLAorICAgIDI3LDEsMTIsMiw0LDMsMTIyLDM4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5NywKKyAgICA5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMzgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLAorICAgIDAsOTIsMiwwLDEyNSwxLDAsMTI1LDIsMCwxMTYsMSwwLDExNiwyLDAsCisgICAgMTA2LDMsMCwxMjQsMSwwLDI1LDEyNCwyLDAsMTMxLDIsMCw4Myw0MSwxLAorICAgIDc4LDQxLDQsMTE0LDYwLDEsMCwwLDExNCw2MiwwLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsMTY5LDAsMCwwLDQxLDMsMTE0LDc4LDAsMCwwLDkwLDE4LAorICAgIDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDU1LDEsMCwwLDE2Niw2LDAsMCwxMTUsNCwwLDAsMCwwLAorICAgIDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKKyAgICA5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTI3LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMSwwLAorICAgIDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsMTE0LDEyMCwwLDEyNCwKKyAgICAwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwKKyAgICAwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEwOCwwLAorICAgIDEyNCwyLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyNCwKKyAgICAyLDAsMTA2LDYsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDEyNCwwLAorICAgIDAsOTUsNywwLDExMywxMDgsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICA5NSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw3LDAsODMsNDEsMSw3OCwKKyAgICA0MSw4LDExNCwyMjYsMCwwLDAsMTE0LDU1LDEsMCwwLDExNCw1NiwxLDAsCisgICAgMCwxMTQsNTcsMSwwLDAsMTE0LDkzLDAsMCwwLDExNCwxNjMsMCwwLDAsCisgICAgMTE0LDIxNywwLDAsMCwxMTQsMjQ5LDAsMCwwLDQxLDMsMTE0LDc4LDAsMCwKKyAgICAwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE3MiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDE3MCw2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsMTUsMSwyMSwKKyAgICAzLDI3LDEsOSwxLDE4LDEsMTIsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LAorICAgIDk5LDExNywxMDgsOTcsMTE2LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsCisgICAgNDEsMSw3OCw0MSwyLDIxOCw0LDEwNSwxMTYsMTAxLDExNCwxMTQsNjEsMSwwLDAsCisgICAgNDEsMSwxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LAorICAgIDE4Myw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTE2LAorICAgIDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwxMTQsMzEsMCwwLDAsMTE0LDYxLDEsMCwwLDQxLDEsMTE0LAorICAgIDc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDE4Niw2LDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LAorICAgIDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMjAsOTUsNzgsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsCisgICAgMTI1LDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwyNDksMCwwLDAsNDEsMSwKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDkwLDAsMCwwLDE4OSw2LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDIzLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTMxLDAsMCwxMDcsNiwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsNjEsMSwwLAorICAgIDAsNDEsMiwxMTQsNzgsMCwwLDAsMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiw5NSwKKyAgICA5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSwxOTIsNiwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwKKyAgICAxMTUsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDIsMTE0LDI0OSwwLDAsMCwxMTQsMjIwLDAsMCwwLAorICAgIDQxLDIsMTE0LDc4LDAsMCwwLDExNCw2NSwxLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLDAsMCwwLAorICAgIDE5NSw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIxLDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NywxMTIsMTEyLDEwMSwKKyAgICAxMTAsMTAwLDc4LDQxLDEzLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LAorICAgIDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzksMCwwLDAsMTE0LDYwLAorICAgIDEsMCwwLDExNCw1NSwxLDAsMCwxMTQsNjEsMSwwLDAsMTE0LDYzLDEsCisgICAgMCwwLDExNCw2NCwxLDAsMCwxMTQsOTAsMCwwLDAsMTE0LDY2LDEsMCwKKyAgICAwLDExNCwyMjAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDU0LDEsMCwwLDE0MywKKyAgICA2LDAsMCwxMTUsMjAsMCwwLDAsMTIsNSw2LDIsMTIsNiwxMiwxMCwKKyAgICAxMiw0LDEyLDEzLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE0LDU0LDEsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsNjQsMCwwLDAsMTE1LDk0LDAsMCwwLDEwMSwwLDAsOTAsMSwKKyAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLAorICAgIDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsOTAsNSwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLDYsCisgICAgMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDksMCwKKyAgICAxMDAsMTAsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsCisgICAgMCwwLDkwLDksMCwxMDAsMTMsMCw4Myw0MSwxNCwxMTQsMjQ3LDAsMCwwLAorICAgIDk5LDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDQsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDExNiwwLDAsMTI0LDEsMCwKKyAgICAxMjQsMiwwLDEyNCwzLDAsMTMxLDMsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCisgICAgMCwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsNTQsMSwwLDAsMTE0LDI0OSwwLAorICAgIDAsMCw0MSw0LDExNCw3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw1OCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzksMCwwLDAsMjAxLDYsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LAorICAgIDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwKKyAgICAyNSw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMTAsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0MSw2Miw0MSwyLDExNCw0NywwLDAsCisgICAgMCwxMTQsNTcsMCwwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCwxNzQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDIwMCwwLDAsMCwyMDUsNiwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDEyMiwyOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywKICAgICAxMDAsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMzIsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEyNCwKLSAgICAwLDAsMTA2LDEsMCwxMzEsMiwwLDEsMTI0LDAsMCwxMDYsMSwwLDEyNCwKLSAgICAxLDAsOTUsMiwwLDEyNCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjQsCi0gICAgMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMTcsMzgsMCwwLDAsCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsNzgsCisgICAgODQsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjE2LDAsMCwwLDIwOSw2LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDc4LDExNCwKKyAgICAzMCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3OCwwLDAsMCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxMSwxLDAsMCwyMTIsNiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDYsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMDAsNSwwLDEzMSwzLDEsCisgICAgODMsNDEsNiw3OCwxMTQsMzAsMCwwLDAsMTIyLDgsNjAsMTE1LDExNiwxMTQsMTA1LAorICAgIDExMCwxMDMsNjIsMTE0LDE3MCwwLDAsMCwxMTQsMzYsMSwwLDAsODQsNDEsMSwKKyAgICAxMTQsMzcsMSwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMTAsMSwwLDAsMjE1LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwKKyAgICAxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMjksMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDEsCisgICAgMCwxMzEsMiwwLDEsMTE2LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCw4Myw0MSwyLDEyMiwyNCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEyMiwzOCwKICAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKICAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MCwzLDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwKLSAgICAxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MCwyLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTYsNCwwLDAsCi0gICAgMTE1LDYsMCwwLDAsMCwzLDE2LDEsMTIsMSwxMTcsMjcsMCwwLDAsCi0gICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDAsOCwwLDAsCi0gICAgMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsMCwwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsMTcsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDE4OCw0LDAsMCwxMTUsNiwwLDAsMCwxNiwxLAotICAgIDEyLDMsMTgsNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsMTE5LDAsCi0gICAgMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKLSAgICAyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSw0LDAsMTAwLAotICAgIDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsCi0gICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwKLSAgICAxMDEsNCwwLDEwMCwxMiwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwxLDAsMTMxLAotICAgIDEsMCw5MCwxMCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYyLDAsCi0gICAgMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTUsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw1OCwwLDAsMCwxMjAsNTEsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDY4LDkzLDM0LDAsMTI1LDEsMCwKLSAgICAxMTYsMywwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwxNiwwLDEyNCwKLSAgICAxLDAsMTA2LDQsMCwxMzEsMCwwLDEsMTEzLDE2LDAsMTEzLDE2LDAsODcsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMjUsMCwwLDAsNjcsOTcsCi0gICAgMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDQwLDQxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCi0gICAgMTAwLDMyLDExMSwxMTAsMzIsOTcsMTA4LDEwOCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLAotICAgIDExNiwxMTQsMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTUsMzIsNDAsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQxLDQ2LDExNywxNywwLDAsMCwKLSAgICAxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE1LDc4LDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNiwwLDAsMCwxMTgsOTcsMTA4LDExNywKLSAgICAxMDEsMTE1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDE3LAotICAgIDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSwxMTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsCi0gICAgMTE1LDExNyw2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMjEwLDQsCi0gICAgMCwwLDExNSw2LDAsMCwwLDAsNCwyMiwxLDE1LDEsMTE3LDI4LDAsCi0gICAgMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCwKLSAgICA5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw5NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLAotICAgIDEsMTEwLDAsMCwxMjAsNTksMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsNDQsCi0gICAgMCwxMjUsMiwwLDEyMSwxNCwwLDEyNCwyLDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDgzLDg3LDExMywzOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsODEsMCwxLAotICAgIDEsMSwxMTksMzgsMCw4OSwxMTMsMzgsMCw4OCwxMTMsMzgsMCw4NywxMDAsMiwKLSAgICAwLDgzLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMTEzLDAsMCwwLAotICAgIDgzLDEwMSw5NywxMTQsOTksMTA0LDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzksMzIsMTA1LDExNSwzMiwxMDIsOTcsMTA4LDExNSwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNywxMTUsMTAxLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMTE3LDIzLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLDc4LDQwLDcsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDEwLDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDksMCwwLDAsOTUsCi0gICAgMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw0LDAsMCwwLDExOSw5NywxMTQsCi0gICAgMTEwLDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDMsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDQsMTExLDExMSwxMDcsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwyMTgsNCwwLDAsMTE1LDE2LDAsMCwwLAotICAgIDAsNyw5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDkxLDAsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMSwKLSAgICAwLDEwMCwyLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwxMTYsCi0gICAgMiwwLDEwNywxMCwwLDExNCw4NiwwLDEsMSwxLDEyNCwwLDAsMTA2LDMsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywyMTAsMCwwLDAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwKLSAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwKLSAgICAxMTAsMTE2LDExNCwxMjEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwKLSAgICAxMDAsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsCi0gICAgMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwKLSAgICAxMDgsOTcsOTgsMTA4LDEwMSw0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNywwLDAsMCwKLSAgICAwLDExNywxLDAsMCwwLDQ2LDQwLDQsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOCwwLDAsCi0gICAgMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0MCwzLDAsMCwwLDExNywzLAotICAgIDAsMCwwLDk5LDEwOCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIzNSwKLSAgICA0LDAsMCwxMTUsMTYsMCwwLDAsMCw4LDEyLDEsOSwxLDMsMSwKLSAgICAxNywxLDEzLDEsMTUsMSwxOCwxLDExNywzMSwwLDAsMCw4MCw5NywxMTYsCisgICAgMTA0LDMyLDEyMywzMywxMTQsMTI1LDQxLDMsMTE0LDE0NiwwLDAsMCwxMTQsMjQ5LDAsCisgICAgMCwwLDExNCwxNzUsMCwwLDAsNDEsMiwxMTQsNzgsMCwwLDAsMTE0LDE1MiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMCwxLDAsMCwyMTksNiwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwyLDE2LDEsMTIyLDI4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDc4LDQxLDEwLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LAorICAgIDU4LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsNCwxLDAsMCwxMTQsMjAwLAorICAgIDAsMCwwLDExNCwyMTYsMCwwLDAsMTE0LDExLDEsMCwwLDExNCwxMCwxLAorICAgIDAsMCwxMTQsMCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjQ3LDAsMCwwLAorICAgIDIwMCw2LDAsMCwxMTUsMTIsMCwwLDAsMTIsMSwxMiw0LDE4LDQsMTIsCisgICAgMywxMiwzLDEyLDQsMTE0LDI0NywwLDAsMCw5OSwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLDExNSwKKyAgICAxNjAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCisgICAgMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLAorICAgIDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCw0LDAsMTAwLDUsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSw0LDAsMTAwLDYsMCwKKyAgICAxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsMCwxMDAsCisgICAgOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNCwKKyAgICAwLDEwMCwxMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwxLDAsMTMxLDEsMCwKKyAgICA5MCw5LDAsMTAxLDQsMCwxMDAsMTAsMCwxMDAsMTAsMCwxMDAsMTMsMCwxMDAsCisgICAgMTQsMCwxMzIsMiwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNCwwLDEwMCwxMCwKKyAgICAwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMSwwLAorICAgIDEwMCwxMCwwLDgzLDQxLDE3LDIxOCwxMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsMTIyLDYyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwKKyAgICAxMDQsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTUsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLAorICAgIDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw1OCwwLDAsMCwxMjAsNTEsMCwxMTYsCisgICAgMCwwLDEwNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDY4LDkzLDM0LDAsMTI1LAorICAgIDEsMCwxMTYsMywwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwxNiwKKyAgICAwLDEyNCwxLDAsMTA2LDQsMCwxMzEsMCwwLDEsMTEzLDE2LDAsMTEzLDE2LAorICAgIDAsODcsMTAwLDIsMCw4Myw0MSwzLDEyMiwxMjUsNjcsOTcsMTA4LDEwOCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMTE1LDQwLDQxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExMSwxMTAsCisgICAgMzIsOTcsMTA4LDEwOCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLAorICAgIDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMTUsMTE2LDExMSwxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMTUsMzIsNDAsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKKyAgICAxMDEsMTEwLDExNiwxMDEsMTAwLDQxLDQ2LDIxOCwxNywxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCwKKyAgICA5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDc4LDQxLDUsMTE0LDcsMCwKKyAgICAwLDAsMjE4LDE5LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKKyAgICAxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsNiwxMTgsOTcsMTA4LDExNywxMDEsMTE1LDExNCwKKyAgICA2MCwwLDAsMCwxMTQsNjgsMSwwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLAorICAgIDIxOCw2LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw2OCwxLDAsMCwyMzEsNiwwLDAsCisgICAgMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMjIsMjgsODAsOTcsMTE2LAorICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAorICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDk0LAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsMCwxMTYsMiwwLDEwNiwKKyAgICAzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsMSwxMTAsMCwwLDEyMCwKKyAgICA1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwwLDEyNSwyLDAsMTIxLAorICAgIDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsODcsMTEzLDM4LDAsCisgICAgNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsMSwxLDExOSwzOCwwLAorICAgIDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLDAsODMsMTAwLDIsMCwKKyAgICA4Myw0MSwzLDEyMiwxMTMsODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LAorICAgIDEwMSwxMTAsOTksMTAxLDMyLDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLAorICAgIDExNCwzMiw5NywzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwKKyAgICAxMTIsOTcsMTE2LDEwNCwzOSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA3MywxMDIsMzIsMzksMTA0LDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywKKyAgICAxMDgsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMjMsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsCisgICAgNDEsNiwxMTQsNywwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKKyAgICAxMTEsMTA3LDExNSwxMTQsMTYwLDAsMCwwLDExNCwxNjEsMCwwLDAsMTE0LDE2MiwwLAorICAgIDAsMCwxMTQsMTQ3LDAsMCwwLDQxLDMsMTE0LDI0MiwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsOTAsNCwxMDQsMTExLDExMSwxMDcsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwNCwxMTEsMTExLDEwNywxMTUsMjM5LDYsMCwwLDExNSwxNiwwLDAsMCwwLDcsCisgICAgOSwxLDE5LDEsMTYsMSwzLDEsMTQsMSwxMywxLDEyLDIsMTIyLDIyLAorICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw5NywwLDAsMCwKKyAgICAxMjQsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLDEwNiwKKyAgICAxLDAsMTMxLDAsMCwxMjUsMSwwLDExMCwwLDAsMTIxLDE3LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LAorICAgIDExNiw0LDAsMTA3LDEwLDAsMTE0LDkyLDAsMSwxLDEsMTI0LDAsMCwxMDYsCisgICAgNSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsNjAsODksMTEwLDEsMCw4OCwxMjQsMiwwLAorICAgIDgzLDQxLDIsMTIyLDIxMCw3MSwxMDEsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAorICAgIDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwKKyAgICAxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsCisgICAgOTksMTA0LDEwMSw0NCwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTcsMTEyLAorICAgIDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMTEwLDEwMCwzMiw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDMyLDEwNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExMCwxMTEsMzIsMTAyLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLAorICAgIDQ0LDMyLDExNSwxMTYsMTExLDExNCwxMDEsMzIsNzgsMTExLDExMCwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDMwLDAsMCwwLDQxLDYsMTE0LDMsCisgICAgMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw3LDAsMCwwLDExNCw2OSwxLAorICAgIDAsMCwxMTQsMTA0LDAsMCwwLDExNCw3MywxLDAsMCw0MSwzLDExNCwyNDIsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw3MSwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjAsOTUsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDAsNywwLDAsMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDE1LAorICAgIDEsMywxLDE3LDEsMTMsMSwxNSwxLDE4LDEsMTIyLDMxLDgwLDk3LDExNiwKICAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAogICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMywwLDAsCi0gICAgMCwwLDAsMCwwLDgsMCwwLDAsNSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTg5LDAsMCwwLDEwMywwLDAsMTI1LDMsMCwxMjAsMTc2LDAsMTI0LAotICAgIDIsMCw2OCw5MywxNTgsMCwxMjUsNCwwLDExNiwwLDAsMTI0LDQsMCwxMTYsCi0gICAgMSwwLDExNiwyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywKLSAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsMywwLDEyNCw0LDAsMTMxLDEsMCwKLSAgICAxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxMywwLDExNiwKLSAgICA1LDAsMTI0LDUsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDExMiwwLDEyNCw1LAotICAgIDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSw2LDAsCi0gICAgMTI1LDcsMCwxMTAsMjEsMCwxMjQsNSwwLDEwNiw3LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSw2LDAsMTAzLDAsMCwxMjUsNywwLDEyNCw2LDAsMTAwLDIsCi0gICAgMCwxMDcsOSwwLDExNCwxNTUsMCwxMjQsNiwwLDEyNCwzLDAsMTAyLDIsMCwKLSAgICA4MywxMjQsMywwLDEwNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDEzLAotICAgIDAsMTEzLDEzLDAsODcsMTAwLDIsMCwxMjQsMywwLDEwMiwyLDAsODMsMTAwLAotICAgIDIsMCw4Myw0MCwzLDAsMCwwLDExNyw2MywwLDAsMCw3MCwxMDUsMTEwLAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMTQsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ3LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNzgsNDAsOSwwLAotICAgIDAsMCwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTE2LDExNCwxMTcsNSwwLDAsMCw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDQwLDgsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDEwMSwxMTAsMTE2LDExNCwxMjEsMTE3LDYsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsOCwwLDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjUyLDQsMCwwLDExNSwKLSAgICAyOCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSw2LDEsMTUsMSwKLSAgICAxMiwxLDE1LDEsMjQsMiwxNSwxLDYsMSwxMiwyLDEwLDUsMjAsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTcsMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI0LAotICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsOTIsMiwwLDEyNSwKLSAgICAzLDAsMTI1LDQsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjQsCi0gICAgMCwxMjQsMywwLDgzLDEyNCw0LDAsMTE0LDg5LDAsMTE2LDQsMCwxMjQsMSwKLSAgICAwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMywwLDEzMSwzLDAsODMsMTAwLDEsCi0gICAgMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDk4LDAsMCwwLAotICAgIDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwKLSAgICAxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwKLSAgICAxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLAotICAgIDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDYsNzgsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMjMsNSwwLDAsMTE1LDE2LDAsMCwwLDAsNCwxMiwxLAotICAgIDEyLDEsMjQsMSwxMiwxLDQsMiw2LDMsMTksMiwxMTcsMjIsMCwwLAotICAgIDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsCi0gICAgMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNywyMCwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCi0gICAgOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDIwNiw0LDAsCi0gICAgMCwxMTUsMTQsMCwwLDAsMTYsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywKLSAgICAxOCwyNywzLDEsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAzLDAsMCwwLDY2LDAsMCwwLDExNSwxMTAsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsOTAsNywKLSAgICAwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsOCwwLAotICAgIDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEyLDAsMTAwLDEzLAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywKLSAgICAxNzIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCwKLSAgICA5NywxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsCi0gICAgMCw3LDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLAotICAgIDEyMCw1MiwwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwKLSAgICAxMjUsNCwwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEyNCwxLDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsCi0gICAgNiwwLDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwKLSAgICAwLDk1LDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsCi0gICAgMTAwLDUsMCw4Myw0MCw3LDAsMCwwLDExNywxNTQsMCwwLDAsNzMsMTEwLAorICAgIDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDExMywwLDAsMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMzEsCisgICAgMiwwLDExNCwzOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsOTIsMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTAsMjEsMCwxMjQsMiwwLAorICAgIDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTAwLDAsMCwxMjUsCisgICAgNCwwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOSwwLDExNCw4NSwwLDExNiwzLAorICAgIDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsMTE2LDQsMCwxMjQsMSwKKyAgICAwLDEwMCwwLDAsMTMxLDIsMCwxMjUsNSwwLDEyNCw0LDAsMTI0LDUsMCwKKyAgICA5NSw1LDAsMTI0LDUsMCw4Myw0MSwyLDc4LDExNCwxNTksMCwwLDAsNDEsCisgICAgNiwxMTQsNjAsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsOSwxLDAsMCwKKyAgICAxMTQsMTY3LDAsMCwwLDExNCwyMTMsMCwwLDAsMTE0LDIxNywwLDAsMCw0MSwKKyAgICA2LDExNCwyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNzEsMSwwLDAsCisgICAgMTE0LDE2MywwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LAorICAgIDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSwKKyAgICAxNyw3LDAsMCwxMTUsMTgsMCwwLDAsMCwyLDE1LDEsMjQsMiwxNSwKKyAgICAxLDYsMSwxMiwxLDEzLDEsMTUsMSw5LDEsMTIyLDI3LDgwLDk3LDExNiwKKyAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsOTUsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzgsOTksNCwwLDAsMCwwLDAsCisgICAgMCwwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjUyLAorICAgIDAsMCwwLDEwMywwLDAsMTI1LDQsMCwxMjAsMjM5LDAsMTI0LDIsMCw2OCwKKyAgICA5MywyMDMsMCwxMjUsNSwwLDExNiwwLDAsMTI0LDUsMCwxMTYsMSwwLDExNiwKKyAgICAyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywwLDExMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEyNCw1LDAsMTMxLDEsMCwxMjUsNiwwLAorICAgIDEyNCw2LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxMywwLDExNiw0LDAsMTI0LAorICAgIDYsMCwxMDAsMiwwLDEzMSwyLDAsMTE0LDEwOSwwLDEyNCw2LDAsMTA2LDUsCisgICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExMCwxOCwwLAorICAgIDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEyNCw2LDAsMTMxLDIsMCwxMjUsCisgICAgNywwLDEyNCw3LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxNDUsMCwxMTMsMTMsCisgICAgMCwxMTAsMCwwLDEyNCw3LDAsMTA2LDcsMCwxMDAsMSwwLDEwNyw5LDAsCisgICAgMTE0LDE2NCwwLDEyNCw3LDAsODMsMTI0LDcsMCwxMDYsOCwwLDEyNSw4LDAsCisgICAgMTI0LDgsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDIwMCwwLDExNiw5LDAsMTAwLAorICAgIDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsNCwwLDEwNiwxMCwKKyAgICAwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywwLDg3LDExNiwKKyAgICAxMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDEyNSw3LDAsMTI0LDQsCisgICAgMCwxMjQsNywwLDk1LDgsMCwxMjQsNywwLDgzLDEwMCwxLDAsODMsNDEsCisgICAgNCwxMjIsNjMsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCwzMiwxMTEsMTE0LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw0NywxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEwLDk3LDEwOSwKKyAgICAxMDEsNDYsNzgsMTE0LDgsMSwwLDAsMTIyLDE5LDExNSwxMTIsMTAxLDk5LDMyLDEwOSwKKyAgICAxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQxLDEyLDExNCwKKyAgICAxODcsMCwwLDAsMjE4LDMsMTE1LDExNiwxMTQsMjE4LDUsOTgsMTIxLDExNiwxMDEsMTE1LAorICAgIDExNCw3NCwxLDAsMCwxMTQsNjAsMCwwLDAsMTE0LDgsMSwwLDAsMTE0LAorICAgIDc1LDEsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMTQ3LAorICAgIDAsMCwwLDExNCwxOTIsMCwwLDAsMTE0LDIxMywwLDAsMCw0MSw5LDExNCwKKyAgICAyNDIsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDcsCisgICAgMSwwLDAsMjE4LDE0LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiwKKyAgICA5NywxMTYsMTA0LDkwLDUsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTQsNzEsMSwwLDAsMTE0LAorICAgIDE3MiwwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCw5LDk1LDEwMywxMDEsMTE2LDk1LDExNSwKKyAgICAxMTIsMTAxLDk5LDMwLDcsMCwwLDExNSw0MCwwLDAsMCwwLDUsNiwxLAorICAgIDEzLDEsMjEsMSw2LDEsMTUsMSwxMiwxLDE1LDEsMjEsMiwxOCwxLAorICAgIDEyLDEsNiwxLDE1LDEsNCwxLDksMSwxMiwxLDE1LDUsMjAsMiwKKyAgICAxNSwxLDksMSwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDk5LDQsMCwwLDAsMCwKKyAgICAwLDAsMCw2LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDE0MywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEyNSw0LAorICAgIDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDYxLDAsMTAwLDEsMCwKKyAgICA4MywxMjQsNCwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzUsMCwKKyAgICAxMjQsNCwwLDEwNiw0LDAsMTI1LDUsMCwxMjQsNSwwLDExNCwxMjgsMCwxMDAsCisgICAgMiwwLDEyNCw0LDAsOTUsNSwwLDExNiw2LDAsMTI0LDEsMCwxMjQsNSwKKyAgICAwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMywwLDEyNCw0LDAsOTUsNCwwLAorICAgIDEyNCw0LDAsODMsMTAwLDEsMCw4MywxMTAsNCwwLDEyNCw0LDAsODMsMTAwLAorICAgIDEsMCw4Myw0MSwzLDEyMiw5OCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwKKyAgICAxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAorICAgIDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw3OCw5MCw5LDExMCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCw3OSwxLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMTcsMCwwLDAsCisgICAgMTE0LDIxNCwwLDAsMCwxMTQsNTQsMSwwLDAsNDEsNiwxMTQsMjQyLDAsMCwKKyAgICAwLDExNCwxNTIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw3LDEsMCwwLAorICAgIDExNCwxNzIsMCwwLDAsMTE0LDc4LDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4LDEsMCwwLDYyLDcsCisgICAgMCwwLDExNSwyNiwwLDAsMCwwLDQsMTIsMSwxMiwxLDIxLDEsMTIsCisgICAgMSw0LDEsMTUsMSw5LDEsNiwzLDksMSwyNCwxLDQsMiw3LAorICAgIDIsMTIyLDIwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LAorICAgIDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLDAsMCwwLDAsMCwwLAorICAgIDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLAorICAgIDEyNSwzLDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDM0LDAsMTAwLAorICAgIDEsMCw4MywxMjQsMywwLDEwNiwxLDAsODMsNDEsMiwxMjIsOTgsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMSwxMTAsCisgICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwxMTIsOTcsCisgICAgMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLDEwMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsCisgICAgNzgsNDEsMiwxMTQsOCwxLDAsMCwxMTQsMTYzLDAsMCwwLDQxLDQsMTE0LAorICAgIDI0MiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTcyLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw5LDEsMCwwLDg0LDcsMCwwLDExNSw4LDAsMCwwLAorICAgIDAsNSwxOCwxLDEyLDEsNCwxLDEyMiwyMiw4MCw5NywxMTYsMTA0LDcwLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQxLDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwKKyAgICAwLDExNCw1OSwwLDAsMCwxMTQsNCwxLDAsMCwxMTQsNjgsMSwwLDAsCisgICAgMTE0LDczLDEsMCwwLDExNCw3NCwxLDAsMCwxMTQsNzUsMSwwLDAsMTE0LAorICAgIDc5LDEsMCwwLDExNCw4LDEsMCwwLDExNCw5LDEsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw2NywxLDAsMCwyMjcsNiwwLDAsMTE1LDIyLDAsMCwwLAorICAgIDEyLDIsNiwyLDE4LDgsMTgsMTcsMTgsMTcsMTgsMTMsMywxLDE4LDMxLAorICAgIDMsMSwyMSwyMSwzLDEsMTE0LDY3LDEsMCwwLDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsMCwwLDAsCisgICAgMTE1LDEzMywwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsCisgICAgMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCwKKyAgICA5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSwKKyAgICA2LDAsOTAsNywwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsCisgICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAwLDEwLDAsCisgICAgMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCw5MCwxMCwwLDEwMCwxMywwLDEwMCwKKyAgICAxNCwwLDEzMiwwLDAsOTAsMTEsMCwxMDEsMTIsMCwxMDAsMTUsMCwxMDAsMTYsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTMsMCwxMDAsMTcsMCwxMDAsMTgsMCwKKyAgICAxMzIsMCwwLDkwLDE0LDAsMTAwLDEwLDAsODMsNDEsMTksMjE4LDEwLDcwLDEwNSwKKyAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTIyLDE3Miw3MCwxMDUsMTA4LDEwMSw0NSw5OCwKKyAgICA5NywxMTUsMTAxLDEwMCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw3MywxMTAsMTE2LDEwMSwxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LAorICAgIDExNiwxMDEsMTA5LDMyLDk3LDExNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsNDQsMzIsCisgICAgOTgsMTAxLDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwxMDEsMTE1LAorICAgIDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwKKyAgICAxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDMyLDEwNSwxMTUsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLDEwNCw5NywKKyAgICAxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLDEwMCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsNSwKKyAgICAwLDAsMCw1LDAsMCwwLDcsMCwwLDAsMTE1LDEyMiwwLDAsMCwKKyAgICAxMDMsMCwwLDEyNSwzLDAsMTIwLDUyLDAsMTI0LDIsMCw2OCw5Myw0NCwwLAorICAgIDkyLDIsMCwxMzcsMCwwLDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwwLDEzNSwKKyAgICAwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjQsNCwKKyAgICAwLDY4LDEzMSwxLDAsMTMxLDEsMCwxLDExMywxMywwLDg3LDEyNCwzLDAsCisgICAgMTI0LDAsMCw5NSwxLDAsMTI0LDEsMCwxMTIsNzksMCwxMDAsMywwLDEyNCwKKyAgICAwLDAsOTUsMiwwLDEwMCw2LDAsMTI0LDAsMCw5NSwzLDAsMTE2LDQsCisgICAgMCwxMzEsMCwwLDEyNCwwLDAsOTUsNSwwLDExNiw0LDAsMTMxLDAsMCwKKyAgICAxMjQsMCwwLDk1LDYsMCwxMDAsNSwwLDgzLDQxLDcsMTIyLDE1NCw3MywxMTAsCiAgICAgMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAogICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKICAgICAzMiwxMTEsMTEwLDMyLDk3LDExMCwxMDAsMzIsOTcsMzIsMTE4LDk3LDExNCwxMDUsOTcsOTgsCkBAIC0zMzIwLDIwNyArMzQwMiwxOTUgQEAKICAgICAxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwKICAgICAwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsMCwxMTUsMjcsMCwKICAgICAwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwKLSAgICAwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDAsMSwwLAotICAgIDAsMCw3OCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsCi0gICAgMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwKLSAgICAxMjAsMTEyLDExNCw2Miw1Niw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTE3LAotICAgIDM4LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCisgICAgMCwxMDIsMiwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLDgzLDQxLDEsNzgsCisgICAgMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMTE0LDUxLDEsMCwKKyAgICAwLDQxLDEsMTE0LDE2MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjExLDAsMCwwLDExMCw3LDAsMCwxMTUsMiwwLDAsMCwKKyAgICA2LDAsMTIyLDM4LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCiAgICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDEsMCwwLDAsNzgsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw3LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNyw3LDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw1MCw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMCw0LDYsMSwxOSwxLDM2LDEsOSwyLDE1LDEsOSwxLDEyLAotICAgIDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLAotICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAotICAgIDAsMCwwLDEwMCwzLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDIsMCw4MywKLSAgICA0MCw0LDAsMCwwLDExNywzMSwwLDAsMCw3MywxMTAsMTE4LDk3LDEwOCwxMDUsCi0gICAgMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsCi0gICAgMTE0LDEyMSwzMiwxMDksMTE2LDEwNSwxMDksMTAxLDQ2LDEwNSwxLDAsMCwwLDc4LDEwNSwKLSAgICAyNTUsMjU1LDI1NSwyNTUsNDAsMSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw0MCwxLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywKLSAgICAxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDY0LDUsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsMiwxMTcsMjgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LAotICAgIDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwxMiwwLAotICAgIDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjE2LDEsMCwwLDEwMCwKLSAgICA4LDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwKLSAgICAwLDEwMCwyLDAsMjUsMTI1LDMsMCwxMjEsMjUsMCwxMTYsMiwwLDEwNiwzLAotICAgIDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMTA2LDUsMCwxMjUsNCwwLAotICAgIDg3LDExMCwyNCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsNzYsMCwxLDEsCi0gICAgMSwxMDAsOSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwwLDEyNCwKLSAgICAwLDAsMTA2LDcsMCwxMDcsMywwLDExNCwxMTQsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTMxLDAsMCwxLDEyNCw0LDAsMTI0LDAsMCw5NSw3LDAsMTEwLDAsCi0gICAgMCwxMTYsOSwwLDEzMSwwLDAsMTE0LDE0NywwLDEyNCwwLDAsMTA2LDEwLDAsCi0gICAgMTI1LDUsMCwxMjQsMywwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDYsMCwxMTAsCi0gICAgMTUsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNSw1LDAsMTI0LDMsMCwxMjUsNiwKLSAgICAwLDEyNCw2LDAsMTI0LDUsMCwxMDcsNiwwLDExNCw0NSwxLDExNiwxMywwLAotICAgIDEyNCwwLDAsMTA2LDQsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDcsMCwxMTYsCi0gICAgMTQsMCwxMjQsNywwLDEzMSwxLDAsMTE0LDQ1LDEsMTIwLDkxLDAsMTI0LDAsCi0gICAgMCwxMDYsMTUsMCw2OCw5Myw3MSwwLDkyLDIsMCwxMjUsOCwwLDEyNSw5LAotICAgIDAsMTAwLDQsMCwxMjQsOCwwLDIzLDEyNSwxMCwwLDExNiwxMywwLDEyNCw3LAotICAgIDAsMTI0LDEwLDAsMTMxLDIsMCwxMjUsMTEsMCwxMTYsMTYsMCwxMjQsMTEsMCwKLSAgICAxMzEsMSwwLDExNCwyMTQsMCwxMjQsOSwwLDEyNCwxLDAsMTI0LDExLDAsMTMxLAotICAgIDIsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMTMsMjE0LDAsODcsCi0gICAgMTAwLDEwLDAsMTI1LDIsMCwxMTMsNDUsMSwxMTAsMCwwLDEyMCwxMjAsMCwxMjQsCi0gICAgMCwwLDEwNiwxNSwwLDY4LDkzLDEwOSwwLDkyLDIsMCwxMjUsOCwwLDEyNSwKLSAgICA5LDAsMTE2LDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTI0LDgsCi0gICAgMCwyMywxMzEsMiwwLDEyNSwxMSwwLDExNiwxOCwwLDEwMCw1LDAsMTA2LDE5LAotICAgIDAsMTI0LDExLDAsMTMxLDEsMCwxMDAsNiwwLDEwMCwyLDAsMTMxLDEsMSwKLSAgICAxLDEyNCw2LDAsMTI0LDgsMCwyMywxMjQsNSwwLDEwNyw2LDAsMTE0LDU1LAotICAgIDEsMTE2LDE2LDAsMTI0LDExLDAsMTMxLDEsMCwxMTQsMTY0LDEsMTI0LDksMCwKLSAgICAxMjQsMSwwLDEyNCwxMSwwLDEzMSwyLDAsMTAzLDAsMCwxMDIsMiwwLDgzLAotICAgIDExMyw1NSwxLDExMyw1NSwxLDg3LDEyNCwyLDAsMTE0LDIwNiwxLDExNiwxOCwwLAotICAgIDEwMCw3LDAsMTA2LDE5LDAsMTI0LDcsMCwxMzEsMSwwLDEzMSwxLDAsMSwKLSAgICAxMDAsMTEsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMDAsMTEsMCwKLSAgICAxMDMsMCwwLDEwMiwyLDAsODMsNDAsMTIsMCwwLDAsMTE3LDEyNSwwLDAsCi0gICAgMCw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwKLSAgICAxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwKLSAgICAxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICAzMiwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMTE1LDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LAotICAgIDQ1LDExMSwxMDIsNDUsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0NiwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMDUsMiwwLDAsMCwxMDUsMSwwLDAsMCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTIzLDEyNSwxMTcsOSwwLDAsMCwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwNSwxMTYsMTIxLDExNywyNSwwLDAsMCwxMTIsMTExLDExNSwxMTUsCi0gICAgMTA1LDk4LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTIzLDEyNSw3MCwxMDUsMjU1LDI1NSwyNTUsMjU1LDg0LDc4LDQwLDIxLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMCwwLDAsCi0gICAgMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMywwLDAsMCwKLSAgICA5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExNiwxMDUsCi0gICAgMTA5LDEwMSwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsMTksCi0gICAgMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LAotICAgIDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LAotICAgIDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LAotICAgIDgsMCwwLDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEyLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDExNyw0LDAsCi0gICAgMCwwLDg0LDExNCwxMTcsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwKLSAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNiwwLDAsMCwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDEyLDAsMCwwLDEwNSwKLSAgICAxMTUsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMTE3LDExLDAsMCwwLAotICAgIDExNiw5NywxMDUsMTA4LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw1LDAsMCwwLAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDUsMCwwLDAsOTksOTcsOTksMTA0LDEwMSwxMTcsCi0gICAgMTIsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTcsOSwwLDAsMCw5OCw5NywxMTUsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNyw2LAotICAgIDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDEzLDAsMCwwLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsMTAyLDExNywxMDgsMTA4LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDcwLDUsMCwwLDExNSw2NiwwLDAsMCwwLDMsNiwxLDE5LDEsMywKLSAgICAxLDI1LDEsMTMsMSwxMSwxLDE1LDEsMTAsMSwxMiwyLDksMSw5LAotICAgIDEsMTUsMiw5LDEsNiwyLDEyLDEsMTgsMSwxMiwxLDIyLDEsMTAsCi0gICAgMSwxNSwxLDEyLDEsMjYsNCwxMiwyLDIyLDEsMjIsMSwyNSwxLDE2LAotICAgIDEsMTIsMSwyNiwxLDYsMSwxOSwxLDEzLDEsMTE3LDIyLDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDksCi0gICAgMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDgsMSwwLDAsCi0gICAgMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTIxLDE5LDAsMTE2LDEsMCwxMDYsCi0gICAgMiwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDExMCwzMywwLDQsCi0gICAgMTE2LDMsMCwxMTYsNCwwLDExNiw1LDAsMTAyLDMsMCwxMDcsMTAsMCwxMTQsCi0gICAgNjMsMCwxLDEsMSwxMDMsMCwwLDEyNSwyLDAsODksMTEwLDEsMCw4OCwKLSAgICAxMTYsNiwwLDEwNiw3LDAsMTA2LDgsMCwxMDAsMSwwLDEzMSwxLDAsMTE1LAotICAgIDEwMCwwLDExNiw5LDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTAsCi0gICAgMCwxMTAsMTExLDAsMTE2LDksMCwxMzEsMCwwLDEyNSwzLDAsMTIwLDkwLDAsCi0gICAgMTI0LDIsMCw2OCw5Myw4MiwwLDEyNSw0LDAsMTI0LDQsMCwxMDYsMTEsMCwKLSAgICAxMDAsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSw1LDAsMTI1LDYsMCwxMjUsCi0gICAgNywwLDEyNCw2LDAsMTE0LDE3OSwwLDEwMCwzLDAsMTA2LDEyLDAsMTI0LDUsCi0gICAgMCwxMjQsNywwLDEwNiwxMywwLDEzMSwwLDAsMTMxLDIsMCwxMjUsOCwwLAotICAgIDExMCw2LDAsMTI0LDUsMCwxMjUsOCwwLDEyNCwzLDAsMTA2LDE0LDAsMTI0LAotICAgIDgsMCwxMzEsMSwwLDEsMTEzLDExNiwwLDg3LDEyNCwzLDAsMTI0LDAsMCwKLSAgICA5NSwxMCwwLDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNSwwLDEzMSwKLSAgICAxLDAsMTE0LDQsMSwxMTYsOSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKLSAgICAwLDEyNCwyLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTYsCi0gICAgMCwxMTAsMCwwLDEwMCw2LDAsODMsNDAsNywwLDAsMCwxMTcsNjgsMCwKLSAgICAwLDAsNzAsMTA1LDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwKLSAgICAzMiwxMTEsMTAyLDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAwLDEwNSwxMTQsMTAxLAotICAgIDk5LDExNiwxMTEsMTE0LDEyMSw0NiwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwxMTUsCi0gICAgMCwwLDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwKLSAgICAwLDEyNCwxLDAsMTA2LDAsMCwxMzEsMCwwLDg2LDEsMTEzLDMsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsNSwKLSAgICAwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDIsMCwwLDAsMTAyLDExMCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLAotICAgIDEwMSwxMjAsMTEyLDExNCw2MiwxNDMsNSwwLDAsMTE1LDIsMCwwLDAsNiwwLAotICAgIDExNyw0MSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDYwLDEwOCwxMTEsOTksCi0gICAgOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNzgsNDAsCi0gICAgMTcsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDMsMCwKLSAgICAwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDgsMTA1LDExNSwxMTYsMTAwLDEwNSwKLSAgICAxMTQsMTE3LDE3LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsMTExLDExNywKLSAgICAxMTAsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTUsMCwwLDAsODAsMTAxLDExNCwxMDksCi0gICAgMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOCwwLDAsMCwKLSAgICA3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDgsMCwwLDAsMTEyLAotICAgIDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLDAsMCwxMTUsMTE2LDk3LDExNCwKLSAgICAxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLAotICAgIDExNCwxMTcsMywwLDAsMCw5NywxMDAsMTAwLDExNywyNywwLDAsMCw5NSw2NywKLSAgICA2NSw4Myw2OSw5NSw3Myw3OCw4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSwKLSAgICA4MCw3Niw2NSw4NCw3MCw3OSw4Miw3Nyw4MywxMTcsMTksMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5OSwxMTEsMTEwLAotICAgIDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LDIxLDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsOTUsCi0gICAgMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNywKLSAgICA0LDAsMCwwLDEwNSwxMTYsMTAxLDEwOSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsNiwwLDAsMCwxMTUsMTE3LAotICAgIDEwMiwxMDIsMTA1LDEyMCwxMTcsOCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNSwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDAsMiw5LDEsMywxLDE5LDEsMjIsMywKLSAgICAxMSwzLDE4LDEsMTgsNyw5LDEsMTMsMSwyNCwxLDYsMSwyNywyLAotICAgIDYsMSwxNywxLDksMSwxOCwxLDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDMsMCwwLDAsNywwLDAsMCwxMTUsMjUsMCwwLDAsMTM1LDAsMCwKLSAgICAxMzUsMSwwLDEwMiwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDIwLDEsMCwwLAorICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsMTEwLDAsMCwwLDExNCwKKyAgICAyOSwwLDAsMCw3OCwxMTQsMTMyLDAsMCwwLDQxLDcsMTE0LDE5MiwwLDAsCisgICAgMCwyMTgsOCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsMzUsMCwwLDAsCisgICAgMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDMsMTE1LAorICAgIDEwMSwxMTYsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LAorICAgIDE5LDk1LDExNCwxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LAorICAgIDk3LDk5LDEwNCwxMDEsNDEsNSwxMTQsNzgsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDIxOCwxNCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LAorICAgIDkwLDcsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDEyMSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCw0MSwxLDExNCwxNjMsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDc5LDAsMCwwLDEwNCw3LDAsMCwxMTUsMTYsMCwwLDAsMCw0LDYsCisgICAgMSwxOSwxLDM2LDEsOSwyLDE1LDEsOSwxLDEyLDEsMTIyLDE5LDcwLAorICAgIDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEwMCwzLDAsMTI0LAorICAgIDAsMCw5NSwwLDAsMTAwLDIsMCw4Myw0MSw0LDEyMiwzMSw3MywxMTAsMTE4LAorICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLAorICAgIDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMDksMTE2LDEwNSwxMDksMTAxLDQ2LDExNCwyOSwwLDAsCisgICAgMCw3OCwxMTQsMTMyLDAsMCwwLDQxLDEsMTE0LDgyLDEsMCwwLDQxLDEsCisgICAgMTE0LDc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw2OCwxLDAsMCwxMTgsNywwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwyLDEyMiwyOCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNTksMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTAwLDEsCisgICAgMCwxMDcsOCwwLDExNCwzNywwLDEwMCwxLDAsMTAzLDAsMCwxMDIsMiwwLAorICAgIDgzLDEyNCwyLDAsMTA2LDEsMCwxMjQsMiwwLDEwNiwyLDAsMTEyLDU1LDAsCisgICAgMTAzLDAsMCwxMDIsMiwwLDgzLDQxLDIsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLDExNiwKKyAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAorICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsMTA1LAorICAgIDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3OCw0MSwzLDExNCw4LDEsMCwwLAorICAgIDExNCwxNjMsMCwwLDAsMTE0LDIxNywwLDAsMCw0MSwzLDExNCw3OCwwLDAsCisgICAgMCwxMTQsMTUyLDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMjQsCisgICAgNywwLDAsMTE1LDgsMCwwLDAsMCwzLDE1LDEsMTIsMSwxMCwxLAorICAgIDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLAorICAgIDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDYsMCwwLDAsMCwwLDAsCisgICAgMCw4LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSw5NywwLAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw2LAorICAgIDAsMTIxLDEzLDAsMTI0LDYsMCwxMDYsMCwwLDEyNSw3LDAsODcsMTEwLDQzLAorICAgIDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw3MywwLDEsMSwxLDExNiwyLAorICAgIDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDYsMCwxMDAsMiwwLAorICAgIDEyNCw0LDAsMTMxLDIsMiw4Myw4OSwxMTAsMjAsMCw4OCwxMjQsNywwLDEyNCwKKyAgICAyLDAsMTI0LDMsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDQsMCw4MywxMDAsCisgICAgMCwwLDgzLDQxLDMsNzgsMTE0LDE2MywwLDAsMCwxMTQsMjE3LDAsMCwwLAorICAgIDQxLDMsMTE0LDc5LDEsMCwwLDExNCwyMDQsMCwwLDAsMTE0LDIzMiwwLDAsCisgICAgMCw0MSw4LDExNCw3OCwwLDAsMCwxMTQsMjM2LDAsMCwwLDExNCwxNTIsMCwKKyAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDcsMSwwLAorICAgIDAsMTE0LDE2MywwLDAsMCw5MCw4LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA3OSwxLDAsMCwxMzIsNywwLDAsMTE1LDE0LDAsMCwwLDAsMSwxNSwKKyAgICAxLDMsMSwxMywxLDEzLDEsMTgsMSwxMiwyLDEyMiwyMCw3MCwxMDUsMTA4LAorICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDc4LDk5LDMsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwxNSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjQwLDEsMCwwLDEwMCwxLDAsMTI1LAorICAgIDMsMCwxMjQsMSwwLDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwzLAorICAgIDAsMjUsMTI1LDQsMCwxMjEsMzQsMCwxMTYsMSwwLDEyNCwwLDAsMTA2LDIsCisgICAgMCwxMTIsNDksMCwxMTYsMywwLDEwNiw0LDAsMTMxLDAsMCwxMzEsMSwwLAorICAgIDEwNiw1LDAsMTI1LDUsMCw4NywxMTAsMjQsMCw0LDExNiw2LDAsMTA3LDEwLAorICAgIDAsMTE0LDg1LDAsMSwxLDEsMTAwLDEwLDAsMTI1LDUsMCw4OSwxMTAsMSwKKyAgICAwLDg4LDEyNCw1LDAsMTI0LDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDEyMywKKyAgICAwLDEyNCwwLDAsMTA2LDgsMCwxMzEsMCwwLDEsMTI0LDUsMCwxMjQsMCwKKyAgICAwLDk1LDcsMCwxMTAsMCwwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTU2LDAsCisgICAgMTI0LDAsMCwxMDYsMTAsMCwxMjUsNiwwLDEyNCw0LDAsMTA2LDExLDAsMTMxLAorICAgIDAsMCwxMjUsNywwLDExMCwxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDYsCisgICAgMCwxMjQsNCwwLDEyNSw3LDAsMTI0LDcsMCwxMjQsNiwwLDEwNyw2LDAsCisgICAgMTE0LDUxLDEsMTE2LDEzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCw0LDAsMTMxLAorICAgIDIsMCwxMjUsOCwwLDEyMCwxMDMsMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLAorICAgIDc3LDAsOTIsMiwwLDEyNSw5LDAsMTI1LDEwLDAsMTAwLDUsMCwxMjQsOSwKKyAgICAwLDIzLDEyNSwxMSwwLDExNiwxMywwLDEyNCw4LDAsMTI0LDExLDAsMTMxLDIsCisgICAgMCwxMjUsMTIsMCwxMTYsMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwyMTEsMCwKKyAgICAxMjQsMCwwLDEwNiwxNiwwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTI0LAorICAgIDgsMCwxMDMsMSwwLDEyNCwyLDAsMTMxLDUsMCw4MywxMTMsMjExLDAsODcsCisgICAgMTE2LDE3LDAsMTI0LDgsMCwxMzEsMSwwLDEyNSwzLDAsMTEwLDAsMCwxMjAsCisgICAgMTI2LDAsMTI0LDAsMCwxMDYsMTQsMCw2OCw5MywxMTUsMCw5MiwyLDAsMTI1LAorICAgIDksMCwxMjUsMTAsMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDQsCisgICAgMCwxMjQsOSwwLDIzLDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE4LDAsMTAwLDYsCisgICAgMCwxMDYsMTksMCwxMjQsMTIsMCwxMzEsMSwwLDEwMCw3LDAsMTAwLDMsMCwKKyAgICAxMzEsMSwxLDEsMTI0LDcsMCwxMjQsOSwwLDIzLDEyNCw2LDAsMTA3LDYsCisgICAgMCwxMTQsNjEsMSwxMTYsMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwxNzYsMSwKKyAgICAxMjQsMCwwLDEwNiwxNiwwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTAwLAorICAgIDgsMCwxMjQsMiwwLDEzMSw1LDAsODMsMTEzLDYxLDEsMTEzLDYxLDEsODcsCisgICAgMTI0LDMsMCwxMTQsMjM2LDEsMTE2LDE4LDAsMTAwLDksMCwxMDYsMTksMCwxMjQsCisgICAgOCwwLDEzMSwxLDAsMTMxLDEsMCwxLDExNiwyMCwwLDEyNCwxLDAsMTAwLAorICAgIDgsMCwxMzEsMiwwLDEyNSwxMywwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMTMsCisgICAgMCw5NSwyMSwwLDEyNCwxMywwLDgzLDEwMCw4LDAsODMsNDEsMTEsMTIyLDEyNSwKKyAgICA4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsCisgICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwKKyAgICAxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMTE1LDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LAorICAgIDExMSwxMDIsNDUsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsMTEwLAorICAgIDAsMCwwLDExNCwxMDksMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3OSwwLAorICAgIDAsMCwxMjIsOSwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxMzksMCwKKyAgICAwLDAsNzgsMTIyLDI1LDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNCwxMzIsCisgICAgMCwwLDAsNDEsMjIsMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsCisgICAgMzUsMCwwLDAsMTE0LDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw0NiwKKyAgICAxLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDgyLDEsMCwwLDIxOCwxMSw5NSwKKyAgICAxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNiwwLDAsMCwxMTQsCisgICAgODUsMSwwLDAsMTE0LDEzMywwLDAsMCwxMTQsODQsMSwwLDAsMTE0LDI4LAorICAgIDAsMCwwLDExNCw4MSwxLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDc5LDEsCisgICAgMCwwLDExNCw0NiwwLDAsMCwxMTQsMTQ2LDAsMCwwLDExNCw0NywwLDAsCisgICAgMCwxMTQsMjEzLDAsMCwwLDExNCwyMTcsMCwwLDAsNDEsMTQsMTE0LDc4LDAsCisgICAgMCwwLDExNCwxNTIsMCwwLDAsMTE0LDcsMSwwLDAsOTAsMTIsMTA1LDExNSwKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5MCwxMSwxMTYsOTcsMTA1LDEwOCwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMTc4LDAsMCwwLDkwLDUsOTksOTcsCisgICAgOTksMTA0LDEwMSw5MCwxMiw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDkwLDksOTgsOTcsMTE1LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsNTEsMSwwLAorICAgIDAsMTE0LDIzNiwwLDAsMCw5MCwxMywxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLDEwNSwxMDgsCisgICAgMTAxLDExMCw5NywxMDksMTAxLDkwLDksMTAyLDExNywxMDgsMTA4LDk1LDExMiw5NywxMTYsMTA0LAorICAgIDExNCwxNzIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDgsMSwwLDAsMTQyLDcsMCwwLDExNSw2OCwwLAorICAgIDAsMCwwLDMsNiwxLDE5LDEsMywxLDM0LDEsMTMsMSwxMSwxLAorICAgIDE1LDEsMTAsMSwxMiwyLDksMSw5LDEsMTUsMiw5LDEsNiwyLAorICAgIDEyLDEsMTgsMSwyMiwxLDEwLDEsMTUsMSwxMiwxLDMyLDQsMTUsMiwKKyAgICAyMiwxLDIyLDEsMjUsMSwxNiwxLDEyLDEsMzIsMSw2LDEsMTksMSwKKyAgICAxNSwxLDEyLDEsNCwxLDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsOSwwLDAsMCwxMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTQsMSwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTIxLAorICAgIDMxLDAsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTEyLDMzLDAsMTE2LDEsCisgICAgMCwxMDYsMywwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDExMCwzMywKKyAgICAwLDQsMTE2LDQsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDMsMCwxMDcsMTAsCisgICAgMCwxMTQsNzUsMCwxLDEsMSwxMDMsMCwwLDEyNSwyLDAsODksMTEwLDEsCisgICAgMCw4OCwxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMDAsMSwwLDEzMSwxLAorICAgIDAsMTE1LDExMiwwLDExNiwxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMjQsMCwwLAorICAgIDk1LDExLDAsMTEwLDExMSwwLDExNiwxMCwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsCisgICAgOTAsMCwxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwKKyAgICAxMiwwLDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwKKyAgICAwLDEyNSw3LDAsMTI0LDYsMCwxMTQsMTkxLDAsMTAwLDMsMCwxMDYsMTMsMCwKKyAgICAxMjQsNSwwLDEyNCw3LDAsMTA2LDE0LDAsMTMxLDAsMCwxMzEsMiwwLDEyNSwKKyAgICA4LDAsMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTUsCisgICAgMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTMsMTI4LDAsODcsMTI0LDMsMCwxMjQsCisgICAgMCwwLDk1LDExLDAsMTE2LDcsMCwxMDYsOCwwLDEwNiw5LDAsMTE2LDE2LAorICAgIDAsMTMxLDEsMCwxMTQsMTAsMSwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKKyAgICAxMjQsMiwwLDY4LDEzMSwxLDAsMTI0LDAsMCw5NSwxNywwLDExMCwwLDAsCisgICAgMTAwLDYsMCw4Myw0MSw3LDEyMiw2OCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiw5OSw5Nyw5OSwxMDQsMTAxLDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsCisgICAgMTA1LDk3LDEwOCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LAorICAgIDExNSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNCwwLDAsMCwKKyAgICAwLDExNCwxMTAsMCwwLDAsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsODMsMCwKKyAgICAwLDAsMTE1LDI4LDAsMCwwLDEwNCwwLDAsMTI0LDAsMCw5MywxOCwwLAorICAgIDEyNSwxLDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsMTQ2LDIsMCwxMTMsCisgICAgNiwwLDgzLDExNCw0LDAsMCwwLDQxLDEsMTE0LDEzMywwLDAsMCw0MSwKKyAgICAyLDExNCwyMiwwLDAsMCw5MCwyLDEwMiwxMTAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjUwLDksNjAsMTE1LDEwMSwxMTYsOTksCisgICAgMTExLDEwOSwxMTIsNjIsMjE2LDcsMCwwLDExNSwyLDAsMCwwLDksMCwxMjIsCisgICAgNDEsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDgsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsCisgICAgNDYsNjAsMTE1LDEwMSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNzgsNDEsMTgsMTE0LDM1LDAsCisgICAgMCwwLDExNCwzLDAsMCwwLDkwLDcsMTA4LDEwNSwxMTUsMTE2LDEwMCwxMDUsMTE0LAorICAgIDExNCw0NSwwLDAsMCwyMTgsMTcsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsCisgICAgMTE3LDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDIxOCwxNSw4MCwxMDEsMTE0LDEwOSwxMDUsMTE1LAorICAgIDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDE4LDc4LDExMSwxMTYsNjUsNjgsCisgICAgMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsNywwLAorICAgIDAsMCwxMTQsOCwwLDAsMCwxMTQsOSwwLDAsMCwxMTQsODMsMSwwLAorICAgIDAsMTE0LDg0LDEsMCwwLDExNCwxMTUsMCwwLDAsMTE0LDQ3LDAsMCwwLAorICAgIDExNCwxMzMsMCwwLDAsMjE4LDMsOTcsMTAwLDEwMCwxMTQsMTAsMCwwLDAsMTE0LAorICAgIDg1LDEsMCwwLDQxLDksMTE0LDc4LDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICA5MCw4LDk5LDExMSwxMTAsMTE2LDEwMSwxMTAsMTE2LDExNSw5MCwyMSwxMDgsMTExLDExOSwxMDEsCisgICAgMTE0LDk1LDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDk1LDk5LDExMSwxMTAsMTE2LDEwMSwxMTAsMTE2LAorICAgIDExNSwxMTQsNjUsMSwwLDAsMTE0LDY3LDAsMCwwLDExNCw1OSwxLDAsMCwKKyAgICAxMTQsNTEsMSwwLDAsOTAsOCwxMTAsMTAxLDExOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODcsCisgICAgMSwwLDAsMTg3LDcsMCwwLDExNSwzNCwwLDAsMCwwLDIsOSwxLAorICAgIDMsMSwzMSwxLDIyLDMsMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsCisgICAgMjQsMSw2LDEsMjcsMiw2LDEsMTcsMSw5LDEsMTgsMSwxMjIsMjIsCisgICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsCisgICAgOTUsOTksOTcsOTksMTA0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLAorICAgIDEzNSwwLDAsMTM1LDEsMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsCisgICAgMCwwLDEyNSwyLDAsMTI0LDIsMCw4Myw0MSwzLDk3LDIwLDEsMCwwLAogICAgIDY1LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwKICAgICAxMDQsMTA1LDk5LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksCiAgICAgMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLApAQCAtMzU0Miw4ODkgKzM2MTIsNjE1IEBACiAgICAgMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwKICAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsCiAgICAgMTAwLDIsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwKLSAgICAwLDAsMTI0LDAsMCwxMzYsMSwwLDE0MCwxLDAsODMsNDAsMywwLDAsCi0gICAgMCwxMTcsNDUsMCwwLDAsODAsOTcsMTE2LDEwNCwzMiwxMDQsMTExLDExMSwxMDcsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwxMDksOTcsCi0gICAgOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0NiwxMTcsMzAsMCwwLDAsMTExLDExMCwxMDgsMTIxLDMyLDEwMCwxMDUsMTE0LAotICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwxMTcsMTEyLAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLAotICAgIDIsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwKLSAgICAxMTUsMTAwLDEwNSwxMTQsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywKLSAgICAxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwKLSAgICAxMDgsMTE1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxNTUsNSwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAyLDEyLDEsMjEsMSwxMTcsNTQsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsCi0gICAgMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAotICAgIDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDQwLDAsMCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwKLSAgICAxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsCi0gICAgMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsOTksMTA4LDExNSwxMTcsMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwKLSAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDE0NSw1LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEwLDIxLDYsMTE3LDIwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE0LDAsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDEwMiwxLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzNywxMTQsNDEsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywxOSwKLSAgICAwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxNywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDExNywxMSwKLSAgICAwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDksCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTYsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsNDQsMTIsMzEsMTgsCi0gICAgMTgsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsNTAsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKKyAgICAwLDAsMTI0LDAsMCwxMzYsMSwwLDE0MCwxLDAsODMsNDEsMywxMjIsNDUsCisgICAgODAsOTcsMTE2LDEwNCwzMiwxMDQsMTExLDExMSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwKKyAgICAxMjEsNDYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMjIsMzAsMTExLAorICAgIDExMCwxMDgsMTIxLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiwKKyAgICA5NywxMTQsMTAxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNCwzNSwwLAorICAgIDAsMCw0MSwyLDExNCw0NiwwLDAsMCwxMTQsMTQ3LDAsMCwwLDQxLDEsCisgICAgMTE0LDM1LDAsMCwwLDQxLDIsMTE0LDI0MiwwLDAsMCwxMTQsODYsMSwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI0LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwKKyAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDIyOCw3LDAsMCwxMTUsNiwwLDAsMCwwLDIsCisgICAgMTIsMSwyMSwxLDEyMiw1NCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwxMDgsMTExLDk5LDk3LAorICAgIDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsCisgICAgMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLAorICAgIDAsNDEsMywxMTQsMjQyLDAsMCwwLDExNCw4NiwxLDAsMCwxMTQsOTMsMSwKKyAgICAwLDAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjQyLDAsMCwwLDExNCw4NiwKKyAgICAxLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCisgICAgMTExLDExMSwxMDcsMjE4LDcsMCwwLDExNSw0LDAsMCwwLDAsMTAsMjEsNiwKKyAgICAxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDEsCisgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsCisgICAgMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLAorICAgIDQxLDIsNzgsMTIyLDE2LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsCisgICAgMTIzLDMzLDExNCwxMjUsNDEsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDQxLDEsMTE0LDc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw5MCwwLDAsMCwyMzYsNywwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MSwxNSwxMTQsNTcsCisgICAgMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwKKyAgICAwLDAsMTE0LDc5LDAsMCwwLDExNCw2OCwxLDAsMCwxMTQsMTY2LDAsMCwKKyAgICAwLDExNCw5LDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDc5LDEsMCwwLAorICAgIDExNCw4LDEsMCwwLDExNCw4NywxLDAsMCwxMTQsNCwxLDAsMCwxMTQsCisgICAgOTQsMSwwLDAsMTE0LDkwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4MCwxLAorICAgIDAsMCw5NSw3LDAsMCwxMTUsMjAsMCwwLDAsMTIsNyw2LDIsMTIsCisgICAgMTQsMTIsNCw2LDIsMTIsOCwxMiwxMCwxNSw0NSwxMiwzMSwxOCwxOCwxMTQsCisgICAgODAsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNDYsMCwwLDAsMTAxLDAsCiAgICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCiAgICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLAotICAgIDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDgzLDQwLDcsMCwwLAotICAgIDAsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LAotICAgIDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxMTcsMzYsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTYsMTAxLDEyMCwxMTYsMzIsMTA5LDk3LDExMCw5NywxMDMsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKKyAgICA1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MSw3LDIxOCwxOCwKKyAgICA5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLAorICAgIDEyMCwxMTYsMTIyLDM2LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsCisgICAgMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDEsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTQsMCwKKyAgICAwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLAorICAgIDQxLDIsMTIyLDI0LDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwxMTQsCisgICAgOTYsMCwwLDAsMTE0LDI1NSwwLDAsMCw0MSwxLDExNCw3OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgOTgsMCwwLDAsMjQ2LDcsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsCisgICAgMjgsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAorICAgIDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksNCwwLAorICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsCisgICAgMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDYwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCiAgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsCi0gICAgNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTUsMTczLDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsCi0gICAgMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwKLSAgICAxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksCi0gICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYwLDAsMCwKLSAgICAwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE0LDEwMSwxMDMsOTcsMTE0LDEwMCwxMDgsCi0gICAgMTAxLDExNSwxMTUsMzIsMTExLDEwMiwzMiw5NywxMTAsMTIxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwxMTUsNDYsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsNCwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDksMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA5NSwxMTgsOTcsMTA4LDExNywxMDEsMTE3LDEzLDAsMCwwLDEwMSwxMjAsOTksOTUsMTE2LAotICAgIDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LAotICAgIDk1LDE3Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDAsNiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwKLSAgICAxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxNjksNSwwLAotICAgIDAsMTE1LDYsMCwwLDAsMTYsMiw2LDIsMTIsNCwxMTcsMTgsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwwLDEyNCwxLDAsCi0gICAgMTA2LDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwyNCwxMzEsMiwwLAotICAgIDEyNSwzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTI0LDIsMCwxMDcsCi0gICAgMCwwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLAotICAgIDAsMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMCwKLSAgICAwLDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDIsMCw4MywxMjQsNCwwLDgzLDQwLDYsMCwwLDAsMTE3LDUwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LAotICAgIDExNiwxMDUsMTE4LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDExMCwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMTEsMTEwLDEwMSw0NiwxMTcsMSwwLDAsMCw0NiwxMDUsMSwwLDAsMCwxMTcsCi0gICAgNTAsMCwwLDAsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwzMiwxMTQsMTAxLAotICAgIDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTgsMTAxLAotICAgIDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMDUsMCwwLDAsMCwxMTcsNSwwLDAsMCwKLSAgICAxMjMsMTI1LDQ2LDEyMywxMjUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsMCwxMTQsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMTAsMCwKLSAgICAwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNCwwLDAsMCwKLSAgICA5OCwxMDUsMTE2LDExNSwxMTcsNCwwLDAsMCw5OCw5NywxMTUsMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxODIsNSwwLDAsMTE1LAotICAgIDEwLDAsMCwwLDAsMiwyMiwxLDE4LDEsMTUsMSwxMCwxLDExNywxMywKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDEzOCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsCi0gICAgMTE1LDI4LDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsCi0gICAgMiwwLDEsMTEwLDAsMCwxMjAsMTAzLDAsMTE2LDAsMCwxMDYsMSwwLDY4LAotICAgIDkzLDg4LDAsMTI1LDIsMCwxMTYsNSwwLDEzMSwwLDAsMTQzLDIzLDAsMSwKLSAgICAxMjQsMiwwLDEwNiw2LDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LAotICAgIDMsMCw4NywxMDAsMiwwLDgxLDg4LDEyNCwzLDAsMTAwLDIsMCwxMDcsOSwKLSAgICAwLDExNCwzOCwwLDEyNCwwLDAsMTE2LDAsMCwxMDYsOCwwLDEwNyw3LDAsCi0gICAgMTE0LDEwOSwwLDEyNCwzLDAsODMsMTE2LDAsMCwxMDYsOCwwLDEyNCwwLDAsCi0gICAgMjUsMTA2LDksMCw4MywxMTMsMzgsMCwxMTMsMzgsMCw4NywxMDAsMiwwLDgzLAotICAgIDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjMsMCwwLDAsNzAsMTA1LAotICAgIDExMCwxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTE3LDIyLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwKLSAgICA3OCw0MCwxMCwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOSwKLSAgICAwLDAsMCwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOSwwLDAsCi0gICAgMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LAotICAgIDk3LDExNCwxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsCi0gICAgMTE0LDExMCwxMDUsMTEwLDEwMywxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMTE1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDUsMCwwLDExNSwyMCwKLSAgICAwLDAsMCwwLDIsOSwxLDE5LDEsMTYsMSwxMCwxLDI0LDEsMTIsCi0gICAgMiwxNSwxLDQsMiwyMSwyLDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMywwLDAsMCwwLDAsMCwKLSAgICAwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LAotICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsCi0gICAgMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLDEwMCwzLAotICAgIDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsMTU2LDAsCi0gICAgMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LDAsMTE2LAotICAgIDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTI0LDEsCi0gICAgMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLDUsMCwKLSAgICAxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsMTI0LDAsCi0gICAgMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE5MCwKLSAgICAwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMDAsNywwLDgzLDQwLDgsMCwwLDAsMTE3LDI4LDAsMCwwLDg2LDEwMSwKLSAgICAxMTQsMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywKLSAgICAxMTQsMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDExNywzMSwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsCi0gICAgOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsMTA1LDAsCi0gICAgMCwwLDAsMTE3LDE4LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTA5LDExNywKLSAgICAxMTUsMTE2LDMyLDk4LDEwMSwzMiw2Miw2MSwzMiw0OCwxMTcsMzEsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMCwxMTEsMTE2LDMyLDExNSwKLSAgICAxMDEsMTE2LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsMTE3LDYxLAotICAgIDAsMCwwLDgwLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMTAsMTExLDExNiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLAotICAgIDQ0LDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTIsMTAxLDExNCwxMDIsMTExLDExNCwxMDksCi0gICAgMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDExNywxNywwLDAsMCw2OSwxMDksMTEyLDExNiwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNzgsNDAsOSwwLDAsMCwxMTcsMTAsMCwwLAotICAgIDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMywwLDAsMCwKLSAgICAxMTUsMTE2LDExNCwxMTcsOSwwLDAsMCw4NCwxMjEsMTEyLDEwMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNCwwLDAsCi0gICAgMCwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LAotICAgIDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDExLDAsMCwwLDgzLDEyMSwxMTUsCi0gICAgMTE2LDEwMSwxMDksNjksMTE0LDExNCwxMTEsMTE0LDQwLDQsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDMsMCwwLAotICAgIDAsMTA5LDExNSwxMDMsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwxMDQsMTAxLAotICAgIDk5LDEwNywyMDgsNSwwLDAsMTE1LDI0LDAsMCwwLDAsMiwxNSwxLDMwLAotICAgIDEsMTIsMSwxNSwxLDYsMSwxNSwxLDE1LDEsMTUsMSw2LDIsMjcsCi0gICAgMSwxOSwxLDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LAotICAgIDk5LDEwNCwxMDEsOTksMTA3LDExNywyMCwwLDAsMCw3OCwxMTEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEyMywzMywxMTQsMTI1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDI3LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMiwyLDAsMCwxMDAsMCwwLDEyNSwyLDAsMTI0LDAsCi0gICAgMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNSwzLAotICAgIDAsMTI0LDMsMCwxMTQsMTc4LDAsMTI0LDMsMCwxMTYsMiwwLDEwNiwzLDAsCi0gICAgMTA3LDcsMCwxMTQsNjIsMCwxMTYsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsCi0gICAgMiwwLDEsMTEwLDAsMCwxMjQsMCwwLDExNiwyLDAsMTA2LDMsMCwxMDcsCi0gICAgNiwwLDExNCw4OCwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMCwwLDI1LDgzLAotICAgIDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDI1LDEyNSw0LDAsMTIxLDEzLDAsCi0gICAgMTI0LDQsMCwxMDYsNSwwLDEyNSwyLDAsODcsMTEzLDE3OCwwLDQsMTE2LDYsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LDcsMCwxMDAsMywwLAotICAgIDIzLDEwNiw4LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDUsMCwKLSAgICAxMTYsOSwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLAotICAgIDEsMCw4OSwxMTMsMTc4LDAsODgsMTEwLDAsMCwxMTYsMTAsMCwxMjQsMCwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDAsMCwxMDcsCi0gICAgOCwwLDExNCwyNTAsMCwxMTYsOSwwLDExNiw3LDAsMTA2LDgsMCwxMjQsMCwKLSAgICAwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTI1LDcsMCwKLSAgICAxMDAsMTAsMCwxMjQsNywwLDk1LDEyLDAsMTI0LDcsMCwxMzAsMSwwLDExMCwKLSAgICA0NywwLDEyNCwwLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw3LDAsMTE0LDQxLAotICAgIDEsMTI0LDYsMCwxMDYsMTMsMCwxMjQsMCwwLDEzMSwxLDAsMSwxMTYsMTQsCi0gICAgMCwxMDAsNSwwLDEyNCwwLDAsMTI0LDYsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSwxMjUsOCwwLDEyNCwzLAotICAgIDAsMTE0LDEwNSwxLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDI1LDEyNSw0LAotICAgIDAsMTE2LDE1LDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLDEsMCwKLSAgICAxMzEsMSwwLDEwMCw2LDAsMjUsMTI0LDgsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMTYsMCwxMjQsOCwwLDEwMCw3LDAsMTAwLDAsMCwxMzEsMywwLAotICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMjEyLDEsMTIxLDU5LDAsMTI0LDgsMCwxMDYsCi0gICAgMTcsMCwxMjQsOCwwLDk1LDE4LDAsMTE2LDE5LDAsMTI0LDgsMCwxMDAsOCwKLSAgICAwLDEzMSwyLDAsMTE1LDE4NywxLDEyNCw4LDAsMTA2LDE4LDAsMTA2LDEsMCwKLSAgICAxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsOCwwLDk1LDE4LDAsCi0gICAgMTEwLDAsMCw4NywxMTMsMjEyLDEsNCwxMTYsNiwwLDEwNywxMCwwLDExNCwyMDgsCi0gICAgMSwxLDEsMSw4OSwxMTMsMjEyLDEsODgsMTEwLDAsMCwxMTYsMTksMCwxMjQsCi0gICAgOCwwLDEwMCw5LDAsMTMxLDIsMCwxMTUsOCwyLDEyMSwxMywwLDEyNCw2LAotICAgIDAsMTI0LDgsMCw5NSwyMCwwLDg3LDExMyw4LDIsNCwxMTYsNiwwLDEwNywKLSAgICAxMCwwLDExNCw0LDIsMSwxLDEsODksMTEzLDgsMiw4OCwxMTAsMCwwLAotICAgIDEyNCw4LDAsODMsNDAsMTEsMCwwLDAsNzgsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDAsMCwwLDAsMTE3LDIxLDAsMCwwLDU5LDMyLDEyMywxMjUsMzIsMTA1LAotICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDE4LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDMyLDEyMywzMywxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsMTI1LDEwNSwKLSAgICAyLDAsMCwwLDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgODQsNDAsMjEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LAotICAgIDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLAotICAgIDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKLSAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDE0LDAsCi0gICAgMCwwLDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsOTUsNjksODIsODIsOTUsNzcsODMsNzEsMTE3LDYsMCwKLSAgICAwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsCi0gICAgMTE3LDEwMSwxMTcsMTAsMCwwLDAsOTUsMTEwLDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLAotICAgIDEwMCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwKLSAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDExNSwxMDEsMTE2LDk3LDExNiwKLSAgICAxMTYsMTE0LDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsMTE3LDEzLDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDMsMCwwLDAsMTA5LDExNSwxMDMsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMywwLDAsMCwxMDEsMTIwLAotICAgIDk5LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSwKLSAgICA5OSwxMDcsMTAxLDEwMCwyMjcsNSwwLDAsMTE1LDc2LDAsMCwwLDAsMSw2LAotICAgIDEsMTksMSw2LDEsMTUsMSwxNiwyLDE1LDEsMTEsMiwxMywxLDMsCi0gICAgMSwxMywxLDEzLDEsMjIsMSwyNiwxLDE1LDEsMTIsMSwyNywzLDksCi0gICAgMSw5LDEsMTUsMiwxMywxLDE5LDIsMTMsMSw2LDIsMTMsMSwzMiwKLSAgICAyLDI0LDEsMywxLDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwyLDE1LAotICAgIDEsMywxLDEzLDEsMTMsMSw4LDEsMTE3LDIzLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LAotICAgIDExMSw5OSwxMDcsMTAxLDEwMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLAotICAgIDAsMCwxOCwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMCwwLDAsMTIyLAotICAgIDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMDAsCi0gICAgMSwwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEsODgsMTI0LDIsMCwKLSAgICAxMDYsMywwLDEzMSwwLDAsMSwxMjIsMTcsMCwxMTYsNCwwLDEyNCwwLDAsCi0gICAgMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDEwMCwxLDAsMTI0LDIsMCwxMDYsNSwKLSAgICAwLDEzMSwwLDAsMSw4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDU0LDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLAotICAgIDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MCw2LDAsMCwwLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNywxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsCi0gICAgMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LAotICAgIDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSwKLSAgICA5NywxMTUsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMjEsNiwwLDAsMTE1LDE0LDAsMCwwLDAsMiwKLSAgICAzLDEsMTYsMiwxMSwxLDEwLDEsMywxLDE3LDIsMTE3LDE0LDAsMCwKLSAgICAwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk5LAotICAgIDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LAotICAgIDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLDEwMCwxLDAsMTA3LAotICAgIDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwKLSAgICAwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LDAsMTA3LDcsMCwKLSAgICAxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwxMzEsMiwwLDgzLAotICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLDAsMTI0LDMsMCwKLSAgICAxMDAsNCwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsMTA2LDksMCwxMzEsCi0gICAgMCwwLDEsMTAwLDIsMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAotICAgIDQsMCwxMTYsMTEsMCwxMjQsNCwwLDEwMCwzLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTIsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgMSwxMjQsMywwLDgzLDQwLDUsMCwwLDAsMTE3LDUwLDEsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLAotICAgIDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwKLSAgICAxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsCi0gICAgMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LAotICAgIDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsCi0gICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LAotICAgIDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCi0gICAgMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwwLDAsMCwwLDExNyw0MCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMTEsMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsCi0gICAgMTAxLDk1LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMiwwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAotICAgIDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LAotICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsCi0gICAgMTE3LDEyLDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksCi0gICAgMTA3LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwKLSAgICAwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOSwwLDAsCi0gICAgMCw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzNCw2LDAsMCwxMTUsCi0gICAgMjgsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsMSwKLSAgICAxMywxLDEzLDEsMTIsMSwxMCwxLDYsMSw5LDEsMjEsMSwxMCwxLAotICAgIDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAotICAgIDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUwLDAsMTAwLDIsMCwxMjQsMSwwLDEwNywKLSAgICA2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDEsCi0gICAgMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDEsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksMCwxMjQsMSwwLAotICAgIDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMSwxMTMsODksMCwKLSAgICAxMTAsMCwwLDEyMCwxNTgsMCwxMjQsMSwwLDY4LDkzLDE0NywwLDEyNSwzLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMTUsOTYsMCwxMDAsCi0gICAgNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDIsCi0gICAgMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsMCwxMjQsNCwwLAotICAgIDEzMSwyLDAsMSw4NywxMTMsMjQzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwKLSAgICAyMzksMCwxLDEyNSw1LDAsMSwxMjIsNTAsMCwxMTYsOSwwLDEyNCw1LDAsCi0gICAgMTAwLDUsMCwxMDAsNywwLDEzMSwzLDAsMTE0LDIxOCwwLDEyNCw1LDAsMTA2LAotICAgIDExLDAsMTI0LDQsMCwxMDcsMiwwLDExNCwyMTgsMCwxMTksOTYsMCwxMTMsMjE4LAotICAgIDAsMTEwLDAsMCwxMzAsMCwwLDg3LDg5LDEwMCw2LDAsMTAwLDYsMCwxMjUsCi0gICAgNSwwLDEyNiw1LDAsODgsMTEzLDI0MywwLDg4LDExMyw5NiwwLDExMyw5NiwwLAotICAgIDg3LDExMCwwLDAsMTI0LDAsMCw4Myw0MCw4LDAsMCwwLDExNywyMzgsMCwKLSAgICAwLDAsNzAsMTA1LDEwMywxMTcsMTE0LDEwMSwzMiwxMTEsMTE3LDExNiwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwzMiwxMTUsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDMyLDExMiw5NywxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgOTcsOTgsMTA4LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDk3LDEwNywxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwzMiw3MywxMTYsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTE3LDExMiwxMDgsMTAxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMTE1LDExNSwxMTcsMTA5LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMSwwLAotICAgIDAsMCw0MiwxMTcsNywwLDAsMCw5NSw5NSw5NywxMDgsMTA4LDk1LDk1LDExNywKLSAgICA1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSwxMTcsMTAsMCwwLDAsOTUsMTEwLAotICAgIDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLDEwMCw3OCw3MCw0MCwxMiwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw0LDAsMCwwLAotICAgIDEwOCwxMDUsMTE1LDExNiwxMTcsNiwwLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTcsCi0gICAgNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSw5NywxMDgsMTA4LDk1LDk1LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsCi0gICAgMTE1LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw2LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwwLDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw1OCw2LDAsMCwxMTUsMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsCi0gICAgMTIsMSwxMywxLDE1LDEsMjIsMSwxMywxLDE1LDEsMjEsMSwzLDEsCi0gICAgMTcsMSwxOCw2LDE4LDEsMTUsMSw5LDEsMzIsMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDc4LDAsMCwwLDEyNCwwLDAsMTA2LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCw2LDAsCi0gICAgMTA3LDgsMCwxMTQsNzQsMCwxMjQsMCwwLDEwMCwyLDAsMjUsMTI1LDEsMCwKLSAgICAxMDAsMywwLDEyNCwwLDAsMTA3LDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwKLSAgICAyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI1LDEsMCwxMTMsCi0gICAgNzQsMCwxMTAsMCwwLDEyNCwxLDAsODMsNDAsNywwLDAsMCwxMTcsMTY3LAotICAgIDAsMCwwLDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywKLSAgICAxMTYsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExNSwxMDQsCi0gICAgMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwKLSAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKLSAgICAzMiwxMDMsMTE3LDk3LDExNCw5NywxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTgsCi0gICAgMTAxLDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LDMyLDk5LDExMSwxMTcsCi0gICAgMTA4LDEwMCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwxMTQsMTExLDExMiwKLSAgICAxMDEsMTE0LDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywxMTAsMTA3LDExMCwKLSAgICAxMTEsMTE5LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMTEsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDk1LDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDc4LAotICAgIDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwKLSAgICAxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsMTAzLAotICAgIDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSw5Miw2LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LAotICAgIDEsMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTcsMTcsMCwwLDAsOTUsOTksCi0gICAgOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSw5OSwKKyAgICAzMiwxMTQsMTAxLDEwMyw5NywxMTQsMTAwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LAorICAgIDExMCwxMjEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNSw0Niw3OCw0MSwyLDExNCw5NiwwLDAsMCwxMTQsOTcsMCwKKyAgICAwLDAsNDEsNCwxMTQsNzgsMCwwLDAsOTAsOCwxMDEsMTIwLDk5LDk1LDExNiwKKyAgICAxMjEsMTEyLDEwMSw5MCw5LDEwMSwxMjAsOTksOTUsMTE4LDk3LDEwOCwxMTcsMTAxLDkwLDEzLAorICAgIDEwMSwxMjAsOTksOTUsMTE2LDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDEsMCwwLAorICAgIDAsMjUwLDcsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMjcsOTUsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAorICAgIDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsCisgICAgMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwKKyAgICAxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTUsCisgICAgMSwwLDAsMjQyLDcsMCwwLDExNSw2LDAsMCwwLDEyLDIsNiwyLAorICAgIDEyLDQsMTE0LDk1LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCwKKyAgICA1LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwKKyAgICAwLDEyNCwxLDAsMTA2LDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwKKyAgICAyNCwxMzEsMiwwLDEyNSwzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsCisgICAgMTI0LDIsMCwxMDcsMCwwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsCisgICAgMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LAorICAgIDQsMCwxMjQsMCwwLDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwKKyAgICAwLDEyNCwwLDAsMTMxLDIsMCw4MywxMjQsNCwwLDgzLDQxLDYsMTIyLDUwLAorICAgIDgyLDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsCisgICAgMTE4LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTYsCisgICAgMTExLDMyLDk3LDExMCwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwxMTEsMTEwLAorICAgIDEwMSw0NiwxMTQsMTEwLDAsMCwwLDExNCwyOSwwLDAsMCwxMjIsNTAsOTcsMTE2LAorICAgIDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTgsMTAxLDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsCisgICAgMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICAxMTQsNzEsMCwwLDAsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDQxLDQsMTE0LDM0LAorICAgIDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsMTI3LDAsMCwwLDExNCw0NywwLAorICAgIDAsMCw0MSw1LDExNCw2NywwLDAsMCwyMTgsNywxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsMjE4LDUsMTA4LDEwMSwxMTgsMTAxLDEwOCw5MCw0LDk4LDEwNSwxMTYsMTE1LDkwLAorICAgIDQsOTgsOTcsMTE1LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTMsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCwKKyAgICA5NywxMDksMTAxLDI1NSw3LDAsMCwxMTUsMTAsMCwwLDAsMCwyLDIyLDEsCisgICAgMTgsMSwxNSwxLDEwLDEsMTE0LDk4LDEsMCwwLDk5LDMsMCwwLDAsCisgICAgMCwwLDAsMCwxMCwwLDAsMCwyNywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNDksMSwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLAorICAgIDAsMTI0LDAsMCwxMTYsMCwwLDEwNiw1LDAsMTA3LDYsMCwxMjUsMywwLAorICAgIDEyMCwyNTUsMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsMjQwLDAsMTI1LDQsMCwKKyAgICAxMTYsNiwwLDEzMSwwLDAsMTQzLDEwOCwwLDEsMTIxLDEzLDAsMTI0LDQsMCwKKyAgICAxMDYsNywwLDEyNSw1LDAsODcsMTEwLDY5LDAsNCwxMTYsOCwwLDEwNywxMCwKKyAgICAwLDExNCwxNTMsMCwxLDEsMSwxMjQsNCwwLDEwNiw5LDAsMTI0LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwyLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwyLDAsMTA3LAorICAgIDgsMCwxMTQsMTM0LDAsMTE5LDUzLDAsMTEwLDAsMCwxMTYsMTAsMCwxMjQsMCwKKyAgICAwLDEyNCw2LDAsMTMxLDIsMCwxMjUsNywwLDg5LDExMCwxOSwwLDg4LDEyNCwKKyAgICA1LDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxMjUsNywKKyAgICAwLDg3LDEwMCwyLDAsODEsODgsMTI0LDcsMCwxMDAsMiwwLDEwNyw5LDAsCisgICAgMTE0LDUzLDAsMTI0LDMsMCwxMiwxMTQsMzAsMSwxMjQsMCwwLDExNiwwLDAsCisgICAgMTA2LDUsMCwxMDcsNiwwLDExNCwzMCwxLDExNiwwLDAsMTA2LDUsMCwxMjQsCisgICAgMCwwLDI1LDEyNSw4LDAsMTIxLDEzLDAsMTI0LDgsMCwxMDYsMTEsMCwxMjUsCisgICAgOSwwLDg3LDExMCwyMiwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNiwxLAorICAgIDEsMSwxLDEyNCw3LDAsODMsODksMTEzLDM0LDEsODgsMTI0LDksMCwxMDAsCisgICAgMiwwLDEwNyw4LDAsMTE0LDIzLDEsMTI0LDcsMCw4MywxMjQsOSwwLDgzLAorICAgIDExMywzNywxLDEyNCw3LDAsODMsMTEzLDUzLDAsMTEzLDUzLDAsODcsMTAwLDIsCisgICAgMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLDk3LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDEsMTIsMTE0LDcsMCwwLAorICAgIDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2MCwwLDAsCisgICAgMCwxMTQsMTYxLDAsMCwwLDExNCwxNjIsMCwwLDAsMTE0LDE2OSwwLDAsMCwKKyAgICAxMTQsOTUsMSwwLDAsMTE0LDgsMSwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsCisgICAgOSwxLDAsMCwxMTQsMTY3LDAsMCwwLDExNCwyMDMsMCwwLDAsNDEsMTAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNywxLDAsMCw5MCwKKyAgICA5LDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTQsNzEsMSwwLDAsMTE0LAorICAgIDgsMSwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCwxNzQsCisgICAgMCwwLDAsMTE0LDIwMywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjQxLDAsMCwwLDgsOCwwLDAsCisgICAgMTE1LDUwLDAsMCwwLDAsMiw5LDEsMTksNCwxNSwxLDE2LDEsMTAsCisgICAgMSwzLDEsMTMsMSwxMywxLDE4LDEsMTIsMSw2LDEsMjAsMiwyNCwKKyAgICAxLDEyLDIsMjIsMSwxMywxLDMsMSwxMywxLDEzLDQsOSwyLDEyLAorICAgIDEsNCwyLDcsMiwxMSwyLDExNCwyNDEsMCwwLDAsOTksMywwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTk0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwKKyAgICAyLDAsMTE1LDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsCisgICAgMTEwLDAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsCisgICAgNSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsCisgICAgMCwxMTQsMTU2LDAsMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwKKyAgICAxMTUsMTA4LDAsMTE2LDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsCisgICAgMTU2LDAsMTI0LDEsMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LAorICAgIDAsMTAwLDUsMCwxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywwLAorICAgIDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwKKyAgICAwLDAsMTI0LDAsMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywKKyAgICAyLDAsMTE0LDE5MCwwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMDAsNywwLDgzLDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LAorICAgIDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLAorICAgIDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsCisgICAgMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsMTE0LDcxLDAsMCwwLDEyMiwxOCwKKyAgICAxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsCisgICAgMzIsNDgsMTIyLDMxLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwKKyAgICAxMTAsMTExLDExNiwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LAorICAgIDEwNSwxMTAsMTAzLDEyMiw2MSw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDEwMCw0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwKKyAgICAxMTQsMTA5LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMjIsMTcsNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDc4LDQxLDksMTE0LDE4NywwLDAsMCwxMTQsNzYsMSwKKyAgICAwLDAsMjE4LDksODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLAorICAgIDAsMCwxMTQsNjYsMCwwLDAsMTE0LDEyNywwLDAsMCwxMTQsNywwLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDIxOCwxMSw4MywxMjEsMTE1LDExNiwxMDEsMTA5LDY5LDExNCwKKyAgICAxMTQsMTExLDExNCw0MSw0LDExNCw2NywwLDAsMCwxMTQsOTYsMSwwLDAsMTE0LAorICAgIDk3LDEsMCwwLDExNCwxNjUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExNSw5NywxMTAsMTA1LDExNiwKKyAgICAxMjEsOTUsOTksMTA0LDEwMSw5OSwxMDcsNDksOCwwLDAsMTE1LDI0LDAsMCwwLAorICAgIDAsMiwxNSwxLDMwLDEsMTIsMSwxNSwxLDYsMSwxNSwxLDE1LDEsCisgICAgMTUsMSw2LDIsMjcsMSwxOSwxLDExNCwxMDIsMSwwLDAsMTIyLDE2LDc4LAorICAgIDExMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTIyLAorICAgIDQsMTIzLDMzLDExNCwxMjUsOTksMiwwLDAsMCwwLDAsMCwwLDgsMCwKKyAgICAwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDUyLDEsMCwwLDEwMCwKKyAgICAwLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMzEsMSwKKyAgICAwLDEwMCwyLDAsMjUsMTI1LDMsMCwxMjQsMywwLDExNCwxNzgsMCwxMjQsMywKKyAgICAwLDExNiwxLDAsMTA2LDIsMCwxMDcsNywwLDExNCw2MiwwLDExNiwzLDAsCisgICAgMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsMSwxMTAsMCwwLDEyNCwwLDAsCisgICAgMTE2LDEsMCwxMDYsMiwwLDEwNyw2LDAsMTE0LDg4LDAsMTE2LDEsMCwxMDYsCisgICAgMiwwLDEyNCwwLDAsMjUsODMsMTE2LDEsMCwxMDYsMiwwLDEyNCwzLDAsCisgICAgMjUsMTI1LDQsMCwxMjEsMTMsMCwxMjQsNCwwLDEwNiw0LDAsMTI1LDIsMCwKKyAgICA4NywxMTMsMTc4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxNzQsMCwxLDEsCisgICAgMSwxMTYsNiwwLDEwMCwzLDAsMjMsMTA2LDcsMCwxMjQsMCwwLDEyNCwzLAorICAgIDAsMTMxLDIsMCwxMjUsNSwwLDExNiw4LDAsMTI0LDUsMCwxMDAsNCwwLAorICAgIDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDg5LDExMywxNzgsMCw4OCwxMTAsMCwKKyAgICAwLDExNiw5LDAsMTI0LDAsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDYsMCwKKyAgICAxMjQsNiwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMjM1LDAsMTE2LDgsMCwxMTYsCisgICAgNiwwLDEwNiw3LDAsMTI0LDAsMCwxMzEsMSwwLDEwMCw0LDAsMTI0LDAsCisgICAgMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDE4LDAsMTE2LDEwLDAsMTI0LDYsMCwKKyAgICAxMzEsMSwwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDcsMCwxMjQsMywwLDExNCwKKyAgICA0OCwxLDExNiwxLDAsMTA2LDIsMCwxMjQsMywwLDI1LDEyNSw0LDAsMTE2LAorICAgIDEyLDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMzEsMSwKKyAgICAwLDEwMCw1LDAsMjUsMTI0LDcsMCwxMzEsMywwLDEsMTEwLDAsMCwxMjQsCisgICAgNywwLDgzLDQxLDYsNzgsMTE0LDExMCwwLDAsMCwxMTQsNzEsMCwwLDAsCisgICAgMTIyLDIzLDU5LDMyLDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsCisgICAgOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNCw2NywwLDAsMCwxMTQsMTA5LAorICAgIDAsMCwwLDQxLDEzLDExNCwzMiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgMTY5LDAsMCwwLDExNCwxMDgsMCwwLDAsMTE0LDIzOSwwLDAsMCwxMTQsMjA0LAorICAgIDAsMCwwLDIxOCw4LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNCw0NywwLAorICAgIDAsMCwxMTQsMTQ3LDAsMCwwLDExNCwyNDEsMCwwLDAsMTE0LDE2OCwwLDAsCisgICAgMCwxMTQsMywxLDAsMCwxMTQsNjEsMCwwLDAsNDEsOCwxMTQsNjcsMCwKKyAgICAwLDAsMjE4LDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE0LDM1LDAsMCwwLAorICAgIDExNCwyMjgsMCwwLDAsOTAsMTMsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTQsMTY1LDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE3NCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMjMsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSwKKyAgICA5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDY5LDgsMCwwLDExNSwKKyAgICA0MiwwLDAsMCwwLDEsNiwxLDE5LDEsNiwxLDE1LDEsMTYsMiwKKyAgICAxNSwxLDExLDEsMTMsMSwzLDEsMTMsMSwxMywxLDIyLDEsMjYsMSwKKyAgICAxNSwxLDEyLDEsMzAsMiwxOCwxLDYsMiwxMywxLDMyLDEsMTE0LDEwNSwKKyAgICAxLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAxMCwwLDAsMCw2NywwLDAsMCwxMTUsMzYsMCwwLDAsMTE2LDAsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTQzLDE4LDAsMSwxMTYsMSwwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDEwMCwxLDAsODEsODgsMTAwLDEsMCwKKyAgICA4Myw0MSwyLDEyMiw1NCw3MCwxMDUsMTEwLDEwMCwzMiw5NywxMTAsMTAwLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LAorICAgIDExMCwxMDAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwxMTQsOTIsCisgICAgMCwwLDAsMTE0LDEwNSwxLDAsMCw0MSwyLDExNCw2NywwLDAsMCwxMTQsCisgICAgMTA0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsCisgICAgMTExLDk3LDEwMCw5Niw4LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTMsMSwKKyAgICAxMTQsMTA2LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsCisgICAgMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsCisgICAgMiwwLDEwMCwxLDAsMTA3LDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLAorICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLAorICAgIDExNiwyLDAsMTA2LDMsMCwxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLAorICAgIDEwNiw1LDAsMTA3LDcsMCwxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LAorICAgIDcsMCwxMzEsMiwwLDgzLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LAorICAgIDEyNSwzLDAsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwKKyAgICAyLDAsMTA2LDgsMCwxMzEsMCwwLDEsMTAwLDMsMCwxMDYsOSwwLDEyNCwKKyAgICAwLDAsMTMxLDEsMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTAwLDQsCisgICAgMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiwxMSwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxLDEyNCwzLDAsODMsNDEsNSw5Nyw1MCwxLAorICAgIDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsCisgICAgOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwKKyAgICA0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsOTksOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwKKyAgICAxMDUsMTEwLDEwMywzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsCisgICAgMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsCisgICAgMTE3LDExNSwxMTYsMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsCisgICAgMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LAorICAgIDEwMSwxMTUsMTE2LDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwKKyAgICAxMDUsMTEwLDk3LDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwKKyAgICAxMTEsMTEwLDk3LDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwKKyAgICAxMDEsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiw5NywxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LAorICAgIDQ2LDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwKKyAgICAxMTUsMTAxLDExNiwxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDk1LDk1LDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMTQsNzEsMCwwLDAsNzgsMTIyLDQwLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDMyLDExMSwxMDIsMzIsMTIzLDEyNSwzMiwxMDQsOTcsMTA4LDExNiwxMDEsMTAwLDU5LAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTAyLDEsMCwwLAorICAgIDExNCw5OCwxLDAsMCwxMTQsOTYsMCwwLDAsMTE0LDI1NSwwLDAsMCwxMTQsCisgICAgNywwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwxMDYsMSwwLDAsMjE4LDExLAorICAgIDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE0LDk3LDAsMCwwLAorICAgIDExNCw0NywwLDAsMCwxMTQsMTQ3LDAsMCwwLDExNCwxMDYsMCwwLDAsNDEsCisgICAgNSwxMTQsNjcsMCwwLDAsMTE0LDk2LDEsMCwwLDExNCw5NywxLDAsMCwKKyAgICAxMTQsMTc0LDAsMCwwLDExNCwxNDUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwNywxLDAsMCwxMDIsOCwKKyAgICAwLDAsMTE1LDI2LDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwxMCwKKyAgICAxLDE1LDEsMTMsMSwxMywxLDEyLDEsMTAsMiwxNSwxLDIxLDEsMTAsCisgICAgMSwxMTQsMTA3LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LAorICAgIDAsMCwwLDE3LDAsMCwwLDY3LDAsMCwwLDExNSwxLDEsMCwwLAorICAgIDExNiwwLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MywwLDEwMCwKKyAgICAyLDAsMTI0LDEsMCwxMDcsNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsCisgICAgMTMxLDEsMCwxLDExNiwwLDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsCisgICAgMTE0LDg5LDAsMTI0LDEsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsCisgICAgMSwwLDEsMTEzLDg5LDAsMTEwLDAsMCwxMjAsMTYxLDAsMTI0LDEsMCw2OCwKKyAgICA5MywxNTAsMCwxMjUsMywwLDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwKKyAgICAyLDAsMTE1LDk2LDAsMTAwLDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsCisgICAgMCwxMjQsMywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLAorICAgIDEyNCwyLDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsMTEzLDI0NiwwLDQsMTE2LAorICAgIDgsMCwxMDcsMTAsMCwxMTQsMjQyLDAsMSwxMjUsNSwwLDEsMTIyLDUzLDAsCisgICAgMTE2LDksMCwxMjQsNSwwLDEzMSwxLDAsMTA2LDEwLDAsMTE2LDExLDAsMTMxLAorICAgIDEsMCwxMTQsMjIxLDAsMTI0LDUsMCwxMDYsMTIsMCwxMjQsNCwwLDEwNywyLAorICAgIDAsMTE0LDIyMSwwLDExOSw5NiwwLDExMywyMjEsMCwxMTAsMCwwLDEzMCwwLDAsCisgICAgODcsODksMTAwLDUsMCwxMDAsNSwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTMsCisgICAgMjQ2LDAsODgsMTEzLDk2LDAsMTEzLDk2LDAsODcsMTEwLDAsMCwxMjQsMCwwLAorICAgIDgzLDQxLDYsMTIyLDIzOCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLAorICAgIDExOSwxMDQsOTcsMTE2LDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLAorICAgIDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsCisgICAgMTEyLDk3LDExNCw5NywxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksCisgICAgOTcsMTA4LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsCisgICAgMTA3LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywKKyAgICAxMDUsMTE0LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsCisgICAgMTExLDEwOSwzMiw5NywxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTA4LDEwNSw5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsCisgICAgMTEwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDExNCwyMzksMCwwLDAsMjUwLDEsNDIsMjE4LDcsOTUsOTUsOTcsCisgICAgMTA4LDEwOCw5NSw5NSwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNzgsNDEsMTMsMTE0LDYwLAorICAgIDAsMCwwLDExNCwyMzgsMCwwLDAsMjE4LDYsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsCisgICAgMTE0LDE5MiwwLDAsMCwxMTQsMTA5LDEsMCwwLDExNCw0NywwLDAsMCwxMTQsCisgICAgNTcsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMTQ3LDAsMCwwLDExNCw3NiwKKyAgICAxLDAsMCwxMTQsOSwwLDAsMCwyMTgsMTUsOTUsNjksODIsODIsOTUsNzcsCisgICAgODMsNzEsOTUsODAsODIsNjksNzAsNzMsODgsMTE0LDY3LDAsMCwwLDQxLDYsCisgICAgMTE0LDE3NCwwLDAsMCwyMTgsOCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNCwKKyAgICAxMDQsMSwwLDAsMTE0LDE2LDAsMCwwLDkwLDksMTAyLDExNCwxMTEsMTA5LDk1LAorICAgIDExMCw5NywxMDksMTAxLDExNCwzNCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA0LDk3LDExMCwxMDAsMTA4LAorICAgIDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDEyNiw4LDAsMCwxMTUsMzQsCisgICAgMCwwLDAsMCwxMCwxNSwxLDEyLDEsMTIsMSwxMywxLDE1LDEsMjIsCisgICAgMSwxMywxLDE1LDEsMjEsMSwzLDEsMTcsMSwxOCw0LDIxLDEsMTUsCisgICAgMSw5LDEsMzIsMSwxMTQsMTEzLDEsMCwwLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDc4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsCisgICAgMTI1LDEsMCwxMjQsMSwwLDEwMCwyLDAsMTA3LDgsMCwxMTQsNzQsMCwxMjQsCisgICAgMCwwLDEwMCwzLDAsMjUsMTI1LDEsMCwxMDAsNCwwLDEyNCwwLDAsMTA3LAorICAgIDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDUsMCwxMzEsMSwKKyAgICAwLDEwMCw2LDAsMjUsMTI1LDEsMCwxMTMsNzQsMCwxMTAsMCwwLDEyNCwxLAorICAgIDAsODMsNDEsNywxMjIsMTY3LDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsCisgICAgMTE5LDEwNCw5NywxMTYsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LAorICAgIDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwKKyAgICAxMTAsMTExLDExNiwzMiwxMDMsMTE3LDk3LDExNCw5NywxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLDExNiwKKyAgICAxMTEsMzIsOTgsMTAxLDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LDMyLAorICAgIDk5LDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiwKKyAgICA3OCwxMTEsMTEwLDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwKKyAgICAxMDEsMTE1LDEwMSwxMTAsMTE2LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwKKyAgICAxMTQsMTExLDExMiwxMDEsMTE0LDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywKKyAgICAxMTAsMTA3LDExMCwxMTEsMTE5LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsMjQ2LDAsCisgICAgMCwwLDc4LDExNCw1NywwLDAsMCwxMTQsMjM5LDAsMCwwLDExNCwxMTAsMCwKKyAgICAwLDAsMTE0LDcxLDAsMCwwLDQxLDIsMTE0LDgyLDAsMCwwLDExNCwzMiwKKyAgICAwLDAsMCw0MSwyLDIxOCw3LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE0LDk2LAorICAgIDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNyw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDk1LDk1LDE1OCw4LDAsMCwxMTUsMTIsMCwwLDAsMCw3LAorICAgIDE1LDEsMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTQsMTE1LDEsMCwwLDk5LAogICAgIDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCiAgICAgNjcsMCwwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsCiAgICAgMiwwLDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsCiAgICAgMCwxMDIsMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsCiAgICAgMTI1LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLAotICAgIDQwLDEsMCwwLDAsMTE3LDk1LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICA0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsCi0gICAgMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwKLSAgICAzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLAotICAgIDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsNDAsNywwLDAsMCwxMTcsMTksCi0gICAgMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LAotICAgIDE4LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDk1LDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE1LDAsMCwwLAotICAgIDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywKLSAgICAyMCwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwwLDAsNjYsODksODQsCi0gICAgNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDAsMywKLSAgICAwLDAsMCwxMTcsMTAsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsMTE1LDExNyw2LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDEwNyw2LDAsMCwxMTUsOCwwLDAsMCwwLAotICAgIDUsMTgsMSwxMiwxLDEyLDEsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LAotICAgIDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw5OSw1LDAsMCwwLDAsMCwwLDAsCi0gICAgOSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLAotICAgIDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwKLSAgICAxMjQsMCwwLDEzMSwxLDAsMTI1LDUsMCwxMTAsNTQsMCwxMjQsMSwwLDEwMCwKLSAgICAzLDAsMTA3LDksMCwxMTQsNDUsMCwxMjQsMSwwLDExMCwzLDAsMTA1LDAsCi0gICAgMCwxMjUsNiwwLDExNiwyLDAsMTI0LDYsMCwxMzEsMSwwLDEyNSw3LDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCw3LDAsMTI0LDQsMCwxMzEsMywwLDEyNSwKLSAgICA1LDAsMTI0LDMsMCwxMTUsMjA3LDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLAotICAgIDAsMTE0LDEyMiwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsCi0gICAgMTMxLDEsMCwxMDAsMSwwLDI1LDEzMSwxLDAsODMsMTI0LDAsMCwxMTUsMTMyLAotICAgIDAsMTI0LDUsMCw4MywxMTYsNCwwLDEyNCwwLDAsMTMxLDEsMCwxMTYsNCwKLSAgICAwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDEsMCwKLSAgICAyNSwxMzEsMSwwLDI0LDEyNSw4LDAsMTE2LDUsMCwxMDYsNiwwLDEyNCw1LAotICAgIDAsMTA2LDcsMCwxMDAsMywwLDExNiw0LDAsMTI0LDUsMCwxMDYsNywwLAotICAgIDEzMSwxLDAsMTI0LDgsMCwyNCwxMzMsMiwwLDI1LDI1LDgzLDExMCwxNiwwLAotICAgIDExNiw4LDAsMTI0LDUsMCwxMjQsMywwLDExNiwwLDAsMTMxLDMsMCw4MywKLSAgICAxMDAsMywwLDgzLDQwLDQsMCwwLDAsMTE3LDIxNCwxLDAsMCw3MywxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwKLSAgICAzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LAotICAgIDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LDMyLDExOSwxMDQsMTAxLDExNCwKLSAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwKLSAgICAxMTEsOTksOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwxMDIsMTE0LDExMSwxMDksMTAsMzIsMzIsCi0gICAgMzIsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNCwxMDEsMTA4LDk3LAotICAgIDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTUsNDYsMzIsODQsMTA0LAotICAgIDEwMSwzMiwzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywxMTAsMTExLDExNCwxMDEsMTAwLDQ2LDMyLAotICAgIDg0LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzksMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE1LDExMiwxMDEsOTksCi0gICAgMTA1LDEwMiwxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LDExNiwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LAotICAgIDEwMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LDExNSwzMiw5NywxMTYsMTE2LDExNCwxMDUsCi0gICAgOTgsMTE3LDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiw2Miw5Niw5Niw0MSw0NiwKLSAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMTAsMzIsMzIsCi0gICAgMzIsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsCi0gICAgMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTA1LDExMCwzMiw5NywzMiwxMTQsCi0gICAgMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgNDYsNDYsMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDExMSwxMDAsCi0gICAgOTYsOTYsMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwxMDQsOTcsMTE4LDEwMSwzMiw5NywzMiwKLSAgICAzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwxMDIsMzIsNTAsNDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTE3LDEsMCwwLDAsNDYsNzgsCi0gICAgNDAsOSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSwxMTcsOSwwLDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LAotICAgIDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsCi0gICAgMCwwLDAsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTcsNiwwLDAsMCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsCi0gICAgMTE1LDExNiwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywxMDgsMTExLDk4LAotICAgIDk3LDEwOCwxMTUsOTUsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDExNyw3LDAsMCwwLDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsOTUsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMTE4LDYsMCwwLDExNSwyNiwwLDAsMCwKLSAgICAwLDExLDEyLDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwKLSAgICAyMywxLDYsMSw0LDQsMzUsMyw0MCwyLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMTYsMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDI0LAotICAgIDMsMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwwLDAsOTcsMSwwLDExNiwKLSAgICAxLDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywwLDExNiw0LDAsOTcsNSwKLSAgICAwLDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsMTE2LDcsMCwxMTYsMSwwLAotICAgIDEzMSwxLDAsMTI1LDIsMCwxMjAsMTE5LDAsMTE2LDEsMCwxMDYsOCwwLDEwNiwKLSAgICA5LDAsMTMxLDAsMCw2OCw5MywxMDIsMCw5MiwyLDAsMTI1LDMsMCwxMjUsCi0gICAgNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMiwwLDExNCw2NywKLSAgICAwLDExNiwxMSwwLDEyNCw0LDAsMTAwLDEsMCwxMzEsMiwwLDExNSwxNjksMCwKLSAgICAxMjQsMywwLDExNiwxLDAsMTA2LDEyLDAsMTA3LDYsMCwxMTQsMTM2LDAsMTE2LAotICAgIDEzLDAsMTI0LDQsMCw5NSwxNCwwLDExMywxNjYsMCwxMTYsMCwwLDEwNiwxNSwKLSAgICAwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTY2LDAsMTE2LDE2LDAsMTI0LDQsMCwKLSAgICA5NSwxNCwwLDExMywxNjYsMCwxMTMsMTY5LDAsMTEzLDY3LDAsMTEzLDY3LDAsODcsCi0gICAgMTE2LDEsMCwxMDYsOCwwLDExNiwxNywwLDI1LDEyNSw1LDAsMTIwLDc2LDAsCi0gICAgMTAwLDI4LDAsNjgsOTMsNjgsMCwxMjUsNiwwLDEyNCw2LDAsMTE2LDEsMCwKLSAgICAxMDYsOCwwLDEwNyw3LDAsMTE0LDIzMiwwLDExNiwxMywwLDEwNiwxOCwwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCwxMjUsNywwLDExMCwxMywwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMjQsNiwwLDI1LDEyNSw3LDAsMTE2LDE5LDAsMTI0LDUsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTMxLDMsMCwxLDExMywxOTMsMCw4NywxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw4LDAsMTAwLDksMCwxMDAsNywKLSAgICAwLDEwMywyLDAsMTAyLDIsMCwxMDAsMTAsMCwxMDAsOSwwLDEwMCw3LDAsCi0gICAgMTAzLDIsMCwxMDIsMiwwLDEwMiwzLDAsMTI1LDgsMCwxMjAsMTg5LDAsMTI0LAotICAgIDgsMCw2OCw5MywxNjksMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwxMTYsCi0gICAgMjAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEyNCwxMCwwLDY4LDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxMTUsMTA3LDEsMTE2LDIxLDAsMTMwLDEsMCwxMjQsMTAsCi0gICAgMCwxMDAsMTMsMCwyNSwxMjUsMTEsMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMDcsNiwwLDExNCwxNDksMSwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwKLSAgICAyNSwxMjUsMTIsMCw4MCwxMTMsNjQsMSwxMjEsNjAsMCwxMTYsMTMsMCwxMDYsMTgsCi0gICAgMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEyLDAsMTI0LDksMCwxMDAsMTAsMCwKLSAgICAxMDcsMiwwLDExNCwyMDcsMSwxMDAsMTQsMCwxMTYsMSwwLDEwNiwyMiwwLDEwNywKLSAgICA2LDAsMTE0LDIwNywxLDEyNCwxMCwwLDEwMCwxNSwwLDI1LDEyNSwxMSwwLDExMCwKLSAgICAwLDAsODAsODcsMTEzLDY0LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMjMyLAotICAgIDEsMSwxLDEsMTE5LDY0LDEsODksMTEzLDY0LDEsODgsMTEzLDY0LDEsODcsCi0gICAgMTE2LDIzLDAsMTAwLDE2LDAsMTMxLDEsMCwxMzAsMSwwLDEyMSwxOSwwLDExNiwKLSAgICAxMywwLDEwNiwxOCwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDEzLDAsODcsMTEwLAotICAgIDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMzgsMiwxLDEsMSwxMDAsCi0gICAgMjcsMCwxMjUsMTMsMCw4OSwxMTAsMSwwLDg4LDExNiwxMywwLDEwNiwxOCwwLAotICAgIDEwMCwxOCwwLDEzMSwxLDAsMTI1LDE0LDAsMTI0LDksMCwxMDAsOCwwLDEwNywKLSAgICAyLDAsMTE0LDEwMCwyLDExNiwxMywwLDEwNiwxOCwwLDEwMCwxOSwwLDEzMSwxLAotICAgIDAsMTI1LDE1LDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjAsMCwxMjQsMTUsMCwKLSAgICAxMzEsMywwLDEsMTEwLDAsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMSwwLAotICAgIDEyNCwxMiwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxNywwLAotICAgIDEyNCwxMywwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxOCwwLAotICAgIDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMiwwLAotICAgIDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMywwLAotICAgIDExNiwyNSwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLDMsMCwxLDExNiwxOSwwLAotICAgIDEyNCw1LDAsMTAwLDI0LDAsMTE2LDI2LDAsMTMxLDAsMCwxMzEsMywwLDEsCi0gICAgMTE2LDI3LDAsMTA2LDI4LDAsMTE2LDAsMCwxMDYsMjksMCwxMzEsMCwwLDEzMSwKLSAgICAxLDAsMSwxMjQsOSwwLDEwMCw4LDAsMTA3LDIsMCwxMTQsMjAsMywxMTYsCi0gICAgMzAsMCwxMDYsMzEsMCwxMDAsMjUsMCwxMzEsMSwwLDEsMTAwLDI2LDAsMTE2LAotICAgIDI3LDAsMTA3LDYsMCwxMTQsMjAsMywxMDAsMjksMCwxMTYsMzMsMCw5NSwzNCwKLSAgICAwLDExMywyMCwzLDExMCwwLDAsMTAwLDI3LDAsODMsNDAsMzAsMCwwLDAsCi0gICAgMTE3LDI1MCwwLDAsMCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKLSAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKLSAgICAxMDYsMTAxLDk5LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwxMDksMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw2NSwxMTUsMzIsMTE1LDEyMSwxMTUsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMzIsOTcsOTksOTksMTAxLDExNSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NSwxMDUsMTA5LAotICAgIDExMiwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCi0gICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKLSAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDAsMCwwLDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIzLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwKLSAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMDUsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsCi0gICAgNDgsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsMTkxLDYsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsMjUsCi0gICAgMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEwNSwwLDAsMCwKLSAgICAwLDExNyw3LDAsMCwwLDY5LDc3LDg4LDMyLDcxLDY3LDY3LDEwNSwxLDAsCi0gICAgMCwwLDExNywzMCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwKLSAgICAxMTEsMTE0LDMyLDExMCwxMTYsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw4LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNywxNSwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw0NiwxMTIsMTIxLDExOSwxMTcsNiwwLDAsMCw5NSwxMDAsNDYsMTEyLAotICAgIDEyMSwxMDAsNzgsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLAotICAgIDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw4NCw0MCwzNSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDgsMCwwLDAsMTExLDExMiwxMTYsCi0gICAgMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsCi0gICAgOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsCi0gICAgNzAsNzMsODgsNjksODMsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LDY5LDY3LDc5LAotICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyMywwLDAsMCwKLSAgICA2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4MywKLSAgICA4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsCi0gICAgMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw1LDAsMCwKLSAgICAwLDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsCi0gICAgMTE2LDk3LDExMCw5OSwxMDEsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMjAsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNSwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw3LDAsMCwwLAotICAgIDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDk3LDEwOCwxMDgsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw3LDAsMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTEsCi0gICAgMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LAotICAgIDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKLSAgICA5OSw5NywxMTUsMTAxLDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4Myw3MywKLSAgICA3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNiwwLDAsMCwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTUsMCwKLSAgICAwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksCi0gICAgODMsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LDQwLAotICAgIDE2LDAsMCwwLDExNywxMCwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNiwKLSAgICAxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCw5OCwxMTcsMTA1LDEwOCwKLSAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMSwxMTUsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDEwLDAsMCwwLDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE3LDE1LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDksMCwwLDAsMTExLAotICAgIDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsMTE2LDEwNCwxMTQsCi0gICAgMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTQsMCwwLDAsMTE5LAotICAgIDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsCi0gICAgMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxNTQsNiwwLDAsMTE1LDEwNiwwLDAsMCwwLAotICAgIDksNiwxLDYsMiwxMiwxLDksMiw2LDIsMTIsMSwyOCwxLDE1LAotICAgIDEsMTUsMSwxNSwxLDEyLDEsMTUsMSwyMiwyLDEzLDEsMTMsMSwxNSwKLSAgICAxLDE4LDIsMTMsMSwyMCwyLDQ4LDEsMTksMiwzMSwxLDEwLDEsMTUsCi0gICAgMSwxMywxLDQsMiwzLDEsMTUsMiwyNywxLDEzLDEsNSwxLDEzLAotICAgIDEsMTIsMiwxMiwyLDMsMSwxOSwxLDEzLDIsMTEsMSwxNSwyLDEyLAotICAgIDEsMTUsMSwxOSwyLDE2LDEsMTYsMSwxNiwxLDE2LDEsMjIsMiwxOSwKLSAgICAxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE3LDYsMCwwLDAsOTUsMTE1LAotICAgIDEwMSwxMTYsMTE3LDExMiw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMzYsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxLDExNiwxLDAsMTMxLDAsCi0gICAgMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMDYsNCwwLDExNiw1LDAsCi0gICAgMTA2LDYsMCwxMjQsMiwwLDE0MCwwLDAsMTAzLDEsMCwxMzEsMSwwLDEsCi0gICAgMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDksMCwxMzEsMSwwLDEsCi0gICAgMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDEwLDAsMTMxLDEsMCwxLAotICAgIDExNiwxMSwwLDEwNiwxMiwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTE2LDAsMTE2LAotICAgIDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDEzLDAsMTMxLDEsMCwxLDExMCwKLSAgICAwLDAsMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE0LDAsMTMxLDEsCi0gICAgMCwxLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsNTAsMCwwLDAsCi0gICAgNzMsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCi0gICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwxMTcsMiwwLDAsMCwxMTAsMTE2LDc4LDQwLDE1LDAsMCwwLDExNywKLSAgICA2LDAsMCwwLDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDI3LDAsMCwwLDk1LAotICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LAotICAgIDExNSwxMTcsNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTAsMCwwLAotICAgIDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsOSwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDksMCwwLDAsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsCi0gICAgMTEwLDEwMCwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMywwLDAsMCw5NSwxMTEsCi0gICAgMTE1LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyMSwKLSAgICAwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LAotICAgIDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTcsMCwwLDAsCi0gICAgMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAxMTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLAotICAgIDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwyMzMsNiwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDAsMiwxMywxLDksMSwyOCwxLDE2LDEsMTYsMSwxNSwKLSAgICAxLDE5LDEsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCi0gICAgNzgsNDAsMywwLDAsMCwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsNiwKLSAgICAwLDAsMCw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDExNyw2LDAsMCwwLDEwMCw5NywKLSAgICAxMTQsMTE5LDEwNSwxMTAsNDAsNzQsMCwwLDAsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsMjcsMCwwLDAsOTUsNjcsNjUsODMsNjksOTUsCi0gICAgNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsODYsNjksOTUsODAsNzYsNjUsODQsCi0gICAgNzAsNzksODIsNzcsODMsMTE3LDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LAotICAgIDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNyw3LDAsMCwwLDk1LAotICAgIDExOSw5NSwxMDgsMTExLDExMCwxMDMsMTE3LDcsMCwwLDAsOTUsMTE0LDk1LDEwOCwxMTEsCi0gICAgMTEwLDEwMywxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsCi0gICAgMTEwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsCi0gICAgMTE2LDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEyLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNywxMywwLDAsMCw5NSwxMTksCi0gICAgMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSwxMTcsNSwwLDAsMCwKLSAgICA5NSwxMTksMTE0LDk3LDExMiwxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsOTksMTExLDEwMCwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTAsMCwwLDAsMTEwLAotICAgIDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSwxMTcsMTIsMCwwLDAsCi0gICAgOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsMTIsMCwwLAotICAgIDAsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNCwwLAotICAgIDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAotICAgIDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw3NiwxMTEsOTksMTA3LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsMTksMCwwLDAsOTUsCi0gICAgMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKLSAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCi0gICAgMTE3LDMsMCwwLDAsMTExLDExNCwxMDAsMTE3LDE3LDAsMCwwLDk1LDgyLDY1LAotICAgIDg3LDk1LDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LDY2LDY5LDgyLDExNyw1LAotICAgIDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSwxMTcsNSwwLDAsMCwxMTQsOTcsMTEwLAotICAgIDEwMywxMDEsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLDczLDY3LDk1LDY2LDg5LAotICAgIDg0LDY5LDgzLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LAotICAgIDExNywxNSwwLDAsMCw4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCwKLSAgICA3Myw4OCw2OSw4MywxMTcsMjMsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsCi0gICAgODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgMTE3LDI3LDAsMCwwLDc5LDgwLDg0LDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywwLDAsMCw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywKLSAgICAxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDExNywxNSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LAotICAgIDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE3LDE2LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDE3LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTUsMTA0LDEwNSwxMDksMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDIxLDAsMCwwLAotICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTE3LDEyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjAsMCwwLAotICAgIDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE4LDAsMCwwLDY5LDg4LDg0LDY5LDc4LDgzLAotICAgIDczLDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywxOSwwLDAsCi0gICAgMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLAotICAgIDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsCi0gICAgODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw5NSw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsCi0gICAgMTE3LDEzLDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LAotICAgIDk5LDEwNCwxMDEsOTksMTA3LDExNyw4LDAsMCwwLDk1LDY5LDgyLDgyLDk1LDc3LAotICAgIDgzLDcxLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMTE3LDE0LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDExNywxNiwwLDAsMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsCi0gICAgMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDE3LDAsMCwwLDk1LDk5LDk3LDEwOCw5OSwKLSAgICA5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxMTcsOCwwLDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsCi0gICAgOTcsMTA4LDEwOCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNjIsOCwwLDAsMCwxMTUsMTMyLDAsMCwwLDYsMjEsNiwzLDEyLDEzLAotICAgIDEyLDE2LDEyLDEzLDEyLDEyLDEyLDEyLDEyLDEwLDEyLDYsMTIsNywxNSwyMiwKLSAgICAxMiw4LDE1LDMsMTIsMTIsNiwyLDYsMywyMiw0LDE5LDY4LDE5LDIzLAotICAgIDEyLDE5LDEyLDIwLDEyLDEwMCwzNCwxLDM3LDIsNiwyLDksMiw5LDEsCi0gICAgOSwyLDE1LDI3LDEyLDIzLDEyLDE5LDE4LDgsMTIsMTMsMTIsMTEsMTIsNTUsCi0gICAgMTIsMTgsMTIsMTEsMTIsMTEsMTIsMTcsMTksNTcsMTksNTQsMTksNTAsMTksODMsCi0gICAgMjIsMTM0LDE5LDI5LDI1LDQ5LDI1LDI1LDYsMywxOSw0NSwxOSw1NSwxOSwxOCwKLSAgICAxOSw5MSwxOSwxMjgsMTksMTMsMTIsOSwxMiwxNywxMiwxNyw2LDIsMTIsNTAsCi0gICAgMTIsMTMsMTgsMjQsMTIsMzQsMTIsMTUsMTIsMTEsMjQsMzYsMTIsNzksCisgICAgNDEsMSwxMjIsOTUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsMTA4LDEwNSwKKyAgICAxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ1LDk4LDk3LDExNSwxMDEsMTAwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwzMiwxMDUsMTE2LDEwMSwxMDksMzIsCisgICAgMTA1LDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDQwLDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSw0MSw0NiwxMCwzMiwKKyAgICAzMiwzMiwzMiw0MSw3LDExNCw1MCwxLDAsMCwxMTQsOTYsMCwwLDAsMjE4LAorICAgIDE4LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDk1LDExNSwxMTcsMTAyLDEwMiwxMDUsCisgICAgMTIwLDEwMSwxMTUsMTE0LDQ1LDEsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDQ5LDEsCisgICAgMCwwLDExNCwyMjcsMCwwLDAsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLAorICAgIDExNSwxMDUsMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIzMywwLDAsMCwxNzMsOCwwLDAsMTE1LAorICAgIDgsMCwwLDAsMCw1LDE4LDEsMTIsMSwxMiwxLDExNCwyMzMsMCwwLAorICAgIDAsOTksNSwwLDAsMCwwLDAsMCwwLDksMCwwLDAsNSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwwLDEyNCw0LDAsMTAwLDEsCisgICAgMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLAorICAgIDEyNSw1LDAsMTEwLDU0LDAsMTI0LDEsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LAorICAgIDQ1LDAsMTI0LDEsMCwxMTAsMywwLDEwNSwwLDAsMTI1LDYsMCwxMTYsMSwKKyAgICAwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMjQsNywwLDEyNCw0LDAsMTMxLDMsMCwxMjUsNSwwLDEyNCwzLDAsMTE1LAorICAgIDIwNywwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwxMjIsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDEsMCwKKyAgICAyNSwxMzEsMSwwLDgzLDEyNCwwLDAsMTE1LDEzMiwwLDEyNCw1LDAsODMsMTE2LAorICAgIDMsMCwxMjQsMCwwLDEzMSwxLDAsMTE2LDMsMCwxMjQsMCwwLDEwNiwyLAorICAgIDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCwyNCwxMjUsCisgICAgOCwwLDExNiw0LDAsMTA2LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsCisgICAgMCwxMTYsMywwLDEyNCw1LDAsMTA2LDYsMCwxMzEsMSwwLDEyNCw4LDAsCisgICAgMjQsMTMzLDIsMCwyNSwyNSw4MywxMTAsMTYsMCwxMTYsNywwLDEyNCw1LDAsCisgICAgMTI0LDMsMCwxMTYsMCwwLDEzMSwzLDAsODMsMTAwLDIsMCw4Myw0MSw0LAorICAgIDk3LDIxNCwxLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksCisgICAgMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwKKyAgICAxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwKKyAgICAxMDEsMTE0LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTEsOTksOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwKKyAgICAxMDIsMTE0LDExMSwxMDksMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwKKyAgICAxMDgsMTAxLDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMTUsNDYsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCisgICAgMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywKKyAgICAxMTAsMTExLDExNCwxMDEsMTAwLDQ2LDMyLDg0LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzksCisgICAgMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLAorICAgIDExMCwxMTYsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LAorICAgIDExNiwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LAorICAgIDExNSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTAsMzIsMzIsMzIsMzIsOTgsCisgICAgMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLAorICAgIDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsCisgICAgMTE1LDExNiw2Miw5Niw5Niw0MSw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsCisgICAgMTE4LDEwMSwxMDgsMzksMTAsMzIsMzIsMzIsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsCisgICAgMTE2LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMzIsMTE2LDExMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksCisgICAgMzIsMTA1LDExMCwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsCisgICAgMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwKKyAgICA5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsNDYsNDYsMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMzIsMTA5LDExMSwxMDAsOTYsOTYsMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwKKyAgICAxMDQsOTcsMTE4LDEwMSwzMiw5NywzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwKKyAgICAxMDIsMzIsNTAsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDcxLDAsMCwwLAorICAgIDc4LDExNCwxMTAsMCwwLDAsNDEsOCwxMTQsMTA3LDEsMCwwLDExNCwxMTUsMSwKKyAgICAwLDAsMTE0LDExNSwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDcsMCwwLAorICAgIDAsMTE0LDE2OSwwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDExMywxLDAsMCwKKyAgICA0MSw5LDExNCw2NywwLDAsMCwxMTQsMTE0LDEsMCwwLDIxOCw2LDEwOCwxMTEsCisgICAgOTksOTcsMTA4LDExNSwxMTQsMTEyLDEsMCwwLDExNCw5NywxLDAsMCwxMTQsMTc0LAorICAgIDAsMCwwLDkwLDgsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSw5NSwxMTQsOTYsMSwKKyAgICAwLDAsOTAsNyw5OSwxMTcsMTE2LDk1LDExMSwxMDIsMTAyLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSw5NSwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiw5NSw5NSwxODQsOCwwLDAsMTE1LDI2LDAsMCwwLDAsCisgICAgMTEsMTIsMSwxNSwyLDI0LDEsMTIsMSwxOCwxLDYsMywxMiwxLDIzLAorICAgIDEsNiwxLDQsNCwzNSwzLDQwLDIsMTE0LDExOCwxLDAsMCw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw2OCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LDAsCisgICAgMTE0LDQ2LDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwwLDAsMjMsMTMxLDEsMCwKKyAgICAxMzAsMSwwLDExMCwwLDAsMTE2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCwxMjQsMiwwLDEwNiw0LDAsMTMxLDAsMCw4Myw0MSwyLDc4LDEyMiwKKyAgICAyNSwxMTAsMTExLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiw0MSw1LDExNCw1LDEsMCwKKyAgICAwLDExNCw4LDEsMCwwLDExNCwxNDcsMCwwLDAsMTE0LDE2OCwwLDAsMCwKKyAgICAxMTQsMywxLDAsMCw0MSwzLDExNCw2NywwLDAsMCwxMTQsMTcyLDAsMCwKKyAgICAwLDExNCwxNzMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDE4LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LAorICAgIDEwMiwxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwyMTksOCwwLDAsMTE1LDEwLDAsCisgICAgMCwwLDAsMSwxNSwxLDEyLDEsMTksMSwxMiwxLDExNCwxMTksMSwwLAorICAgIDAsOTksMiwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDEyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwyMzIsMiwwLDAsMTI0LDEsMCw5NywwLAorICAgIDAsMTI0LDAsMCw5NywxLDAsMTE2LDEsMCwxMDYsMiwwLDEwNiwzLDAsCisgICAgMTE0LDMzLDAsMTE2LDQsMCw5Nyw1LDAsMTEwLDYsMCwxMTYsNiwwLDk3LAorICAgIDUsMCwxMTYsNywwLDExNiwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyMCwxMzgsCisgICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMzEsMCwwLDY4LDkzLDEyMSwKKyAgICAwLDkyLDIsMCwxMjUsMywwLDEyNSw0LDAsMTE2LDEwLDAsMTI0LDQsMCwKKyAgICAxMjQsMiwwLDEzMSwyLDAsMTE0LDY3LDAsMTI0LDMsMCwxMTYsMSwwLDEwNiwKKyAgICAxMSwwLDEwNyw2LDAsMTE0LDExOCwwLDExNiwxMiwwLDEyNSw1LDAsMTEwLDI3LAorICAgIDAsMTE2LDAsMCwxMDYsMTMsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDY3LDAsCisgICAgMTE2LDE0LDAsMTI1LDUsMCwxMTAsMywwLDExMyw2NywwLDExNiwxNSwwLDEyNCwKKyAgICA0LDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw2LDAsMTE2LDE2LDAsMTI0LDYsCisgICAgMCwxMzEsMSwwLDEyNSw3LDAsMTI0LDcsMCwxMDYsMTcsMCwxMjQsNCwwLAorICAgIDEzMSwxLDAsMSwxMTMsNjcsMCwxMTMsNjcsMCw4NywxMTYsMSwwLDEwNiw4LAorICAgIDAsMTE2LDE4LDAsMjUsMTI1LDgsMCwxMjAsNzMsMCwxMDAsMjYsMCw2OCw5MywKKyAgICA2NSwwLDEyNSw5LDAsMTI0LDksMCwxMTYsMSwwLDEwNiw4LDAsMTA3LDcsCisgICAgMCwxMTQsMjQ4LDAsMTE2LDE5LDAsMTI0LDksMCwxMzEsMSwwLDEyNSwxMCwwLAorICAgIDExMCwxMywwLDExNiwxLDAsMTA2LDgsMCwxMjQsOSwwLDI1LDEyNSwxMCwwLAorICAgIDExNiwyMCwwLDEyNCw4LDAsMTI0LDksMCwxMjQsMTAsMCwxMzEsMywwLDEsCisgICAgMTEzLDIxMiwwLDg3LDEwMCw1LDAsMTAwLDYsMCwxMDMsMSwwLDEwMiwyLDAsCisgICAgMTAwLDcsMCwxMDAsOCwwLDEwMCw2LDAsMTAzLDIsMCwxMDIsMiwwLDEwMiwKKyAgICAyLDAsMTI1LDExLDAsMTIwLDE0NiwwLDEyNCwxMSwwLDY4LDkzLDEyNiwwLDkyLAorICAgIDIsMCwxMjUsMTIsMCwxMjUsMTMsMCwxMTYsMjEsMCwxMDAsOSwwLDEwMCwxMCwKKyAgICAwLDEzMiwwLDAsMTI0LDEzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDExNSwxMDgsCisgICAgMSwxMTYsMjIsMCwxMzAsMSwwLDEyNCwxMywwLDEwMCwxMSwwLDI1LDEyNSwxNCwKKyAgICAwLDEyNCwxMiwwLDExNiwxLDAsMTA2LDgsMCwxMDcsNiwwLDExNCwxNTAsMSwKKyAgICAxMTYsMSwwLDEwNiw4LDAsMTI0LDEyLDAsMjUsMTI1LDE1LDAsODAsMTEzLDY1LAorICAgIDEsMTIxLDE3LDAsMTE2LDE5LDAsMTI0LDEyLDAsMTMxLDEsMCwxMjUsMTUsMCwKKyAgICA4MCw4NywxMTMsNjUsMSw0LDExNiwyMywwLDEwNywxMCwwLDExNCwxOTAsMSwxLAorICAgIDEsMSwxMTksNjUsMSw4OSwxMTMsNjUsMSw4OCwxMTMsNjUsMSw4NywxMTYsMjMsCisgICAgMCwxMDAsMTIsMCwxMzEsMSwwLDEzMCwxLDAsMTE2LDIwLDAsMTI0LDgsMCwKKyAgICAxMDAsMTMsMCwxMjQsMTUsMCwxMzEsMywwLDEsMTE2LDIwLDAsMTI0LDgsMCwKKyAgICAxMDAsMTQsMCwxMjQsMTQsMCwxMzEsMywwLDEsMTE2LDIwLDAsMTI0LDgsMCwKKyAgICAxMDAsMTUsMCwxMDAsMTYsMCwxMDYsMjQsMCwxMjQsMTMsMCwxMzEsMSwwLDEzMSwKKyAgICAzLDAsMSwxMjEsMTYsMCwxMTYsMTksMCwxMDAsMTcsMCwxMzEsMSwwLDEyNSwKKyAgICAxNiwwLDg3LDExMCwyNCwwLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDUwLDIsCisgICAgMSwxLDEsMTAwLDE4LDAsMTI1LDE2LDAsODksMTEwLDEsMCw4OCwxMTYsMjAsCisgICAgMCwxMjQsOCwwLDEwMCwxNywwLDEyNCwxNiwwLDEzMSwzLDAsMSwxMTYsMTksCisgICAgMCwxMDAsMTksMCwxMzEsMSwwLDEyNSwxNywwLDExNiwyMCwwLDEyNCw4LDAsCisgICAgMTAwLDE5LDAsMTI0LDE3LDAsMTMxLDMsMCwxLDEyNCwxMiwwLDEwMCw3LDAsCisgICAgMTA3LDIsMCwxMTQsMTM4LDIsMTE2LDE5LDAsMTAwLDIwLDAsMTMxLDEsMCwxMjUsCisgICAgMTgsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwyMSwwLDEyNCwxOCwwLDEzMSwzLAorICAgIDAsMSwxMTAsMCwwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDIyLDAsMTE2LDI1LAorICAgIDAsMTMxLDAsMCwxMzEsMywwLDEsMTE2LDI2LDAsMTA2LDI3LDAsMTE2LDAsCisgICAgMCwxMDYsMjgsMCwxMzEsMCwwLDEzMSwxLDAsMSwxMjQsMTIsMCwxMDAsNywKKyAgICAwLDEwNywyLDAsMTE0LDIyOCwyLDExNiwyOSwwLDEwNiwzMCwwLDEwMCwyMywwLAorICAgIDEzMSwxLDAsMSwxMDAsMjQsMCwxMTYsMjYsMCwxMDcsNiwwLDExNCwyMjgsMiwKKyAgICAxMDAsMjUsMCwxMTYsMzEsMCw5NSwzMiwwLDExMywyMjgsMiwxMTAsMCwwLDEwMCwKKyAgICAxOCwwLDgzLDQxLDI3LDEyMiwyNTAsODMsMTAxLDExNiwxMTcsMTEyLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLAorICAgIDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMTA5LDEwLDMyLAorICAgIDMyLDMyLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTA4LDExMSw5OCwKKyAgICA5NywxMDgsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNjUsMTE1LDMyLDExNSwxMjEsMTE1LDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMDEsCisgICAgMTAwLDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDMyLDk3LDk5LDk5LDEwMSwxMTUsMTE1LDMyLDk3LDExMCwxMDAsMzIsOTUsCisgICAgMTA1LDEwOSwxMTIsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDExMSwxMTUsCisgICAgMTAxLDMyLDExNiwxMTksMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDksMTE3LAorICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDEwMSwxMjAsMTEyLDEwOCwxMDUsOTksMTA1LDExNiwxMDgsMTIxLAorICAgIDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTQsNDksMCwwLDAsMTE0LDE2MCwwLDAsMCwyMTgsOCw5OCwxMTcsMTA1LAorICAgIDEwOCwxMTYsMTA1LDExMCwxMTUsMTE0LDE4NiwwLDAsMCw5MCw1LDExMiwxMTEsMTE1LDEwNSwKKyAgICAxMjAsMjUwLDEsNDcsMjE4LDIsMTEwLDExNiwyNTAsMSw5Miw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsMCwKKyAgICAxMTUsMzMsMCwwLDAsMTI0LDAsMCw5MywyMywwLDEyNSwxLDAsMTE2LDAsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDAsMCwxMDcsMiwwLDg2LDEsMTEzLAorICAgIDMsMCwxMDAsMSwwLDgzLDQxLDIsMTE0LDI5LDAsMCwwLDc4LDQxLDEsCisgICAgMTE0LDMxLDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwxMjQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIxMSwwLDAsMCwxNSw5LDAsMCwxMTUsMiwwLDAsMCw2LDAsCisgICAgMTIyLDI1LDk1LDExNSwxMDEsMTE2LDExNywxMTIsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LAorICAgIDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsNzEsMCwwLDAsCisgICAgMTIyLDMwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsMTE0LDEwMSwxMTMsMTE3LAorICAgIDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLDExMSwxMTQsMzIsMTEwLDExNiwKKyAgICAxMTQsMywwLDAsMCwxMTQsMjUsMCwwLDAsMTE0LDIxLDAsMCwwLDExNCwKKyAgICAzMCwwLDAsMCwxMTQsNzIsMCwwLDAsNzgsMTE0LDEwNSwwLDAsMCw5MCwKKyAgICA2LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNCwxNywxLDAsMCwxMTQsNiwwLDAsCisgICAgMCwxMjIsNCw0NiwxMTIsMTIxLDExOSwxMjIsNiw5NSwxMDAsNDYsMTEyLDEyMSwxMDAsODQsCisgICAgNDEsNCwxMjIsMyw5NSwxMDUsMTExLDEyMiw5LDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsCisgICAgMTAzLDExNSwxMjIsOCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTIyLDcsMTA5LDk3LAorICAgIDExNCwxMTUsMTA0LDk3LDEwOCw0MSwzMywxMTQsOTYsMCwwLDAsMTE0LDcsMCwwLAorICAgIDAsMTE0LDExMSwwLDAsMCwxMTQsMTEyLDAsMCwwLDExNCwxMTQsMCwwLDAsCisgICAgMTE0LDIyNywwLDAsMCwxMTQsMTEzLDAsMCwwLDExNCw2NiwwLDAsMCwxMTQsCisgICAgMTY5LDAsMCwwLDIxOCw1LDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE0LDE4NywwLDAsMCwKKyAgICAxMTQsMTUxLDAsMCwwLDExNCw1LDEsMCwwLDExNCwxNTYsMCwwLDAsMTE0LAorICAgIDEzLDEsMCwwLDExNCwyNDAsMCwwLDAsMTE0LDE2OCwwLDAsMCwxMTQsMjUwLAorICAgIDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMTE5LDEsMCwwLDExNCw2MSwwLAorICAgIDAsMCwyMTgsMyw5NywxMDgsMTA4LDExNCw4OSwwLDAsMCwxMTQsMTQ3LDAsMCwKKyAgICAwLDExNCwyNiwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDUzLDEsMCwwLAorICAgIDExNCwxOTIsMCwwLDAsMTE0LDExNiwxLDAsMCwxMTQsMTI4LDAsMCwwLDExNCwKKyAgICAyMjAsMCwwLDAsMTE0LDE2LDEsMCwwLDExNCwyMCwxLDAsMCw0MSwxOSwKKyAgICAyMTgsMTAsMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDk1LDEwNSwKKyAgICAxMDksMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDExLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDE3NCwwLDAsMCwKKyAgICAxMTQsMTYzLDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDE3MywwLDAsMCw5MCwKKyAgICAxMSwxMTUsMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwxMDAsCisgICAgMTAxLDExNiw5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwKKyAgICAxMTEsMTE1LDExNCwyMSwwLDAsMCwxMTQsMjUsMCwwLDAsOTAsOSwxMTEsMTE1LAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwyMjcsOCwwLDAsCisgICAgMTE1LDEwOCwwLDAsMCwwLDksNiwxLDYsMiwxMiwxLDksMiw2LAorICAgIDMsMTIsMSwyOCwxLDE1LDEsMTUsMSw5LDEsMTUsMSw5LDIsMywKKyAgICAxLDE1LDEsMTIsMSwyMCwzLDEzLDEsMTMsMSwxNSwxLDE1LDIsMTMsCisgICAgMSwyMCwzLDMzLDEsMTksMiwzMSwxLDEwLDEsMTUsMSwxMywxLDQsCisgICAgMiwzLDEsMTIsMSw1LDEsMTMsMSwxMiwyLDEyLDEsMTYsMSwxNiwKKyAgICAxLDI1LDMsMywxLDE2LDEsMTMsMiwxMSwxLDE2LDMsMTIsMSwxNiwKKyAgICAzLDEyLDEsMTIsMSwxOSwzLDE5LDEsMTksMSwxMiwxLDEzLDEsMTIsCisgICAgMSwxMTQsMTI4LDEsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNiwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEsMTE2LDEsMCwKKyAgICAxMzEsMCwwLDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEwNiw0LDAsMTE2LAorICAgIDUsMCwxMDYsNiwwLDEyNCwyLDAsMTQwLDAsMCwxMDMsMSwwLDEzMSwxLAorICAgIDAsMSwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsOSwwLDEzMSwxLAorICAgIDAsMSwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTAsMCwxMzEsMSwKKyAgICAwLDEsMTE2LDExLDAsMTA2LDEyLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwxMTYsCisgICAgMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTMsMCwxMzEsMSwwLAorICAgIDEsMTEwLDAsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTQsMCwKKyAgICAxMzEsMSwwLDEsMTAwLDIsMCw4Myw0MSwzLDEyMiw1MCw3MywxMTAsMTE1LDExNiwKKyAgICA5NywxMDgsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKKyAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDExNCwxMjIsCisgICAgMSwwLDAsNzgsNDEsMTUsMTE0LDEyOCwxLDAsMCwxMTQsMjMzLDAsMCwwLAorICAgIDExNCw3LDAsMCwwLDExNCw3MiwxLDAsMCwxMTQsMTkyLDAsMCwwLDExNCwKKyAgICA4MCwxLDAsMCwxMTQsOTQsMSwwLDAsMTE0LDk5LDEsMCwwLDExNCwyMjAsCisgICAgMCwwLDAsMTE0LDUsMSwwLDAsMTE0LDEzLDEsMCwwLDExNCwzLDAsCisgICAgMCwwLDExNCw1NywwLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDY3LDEsMCwKKyAgICAwLDQxLDMsMTE0LDEyNiwxLDAsMCwxMTQsMTI3LDEsMCwwLDkwLDE3LDExNSwKKyAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICA4LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDU4LDksMCwwLDExNSwxNiwwLAorICAgIDAsMCwwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsMSwKKyAgICAxOSwxLDExNCwxMjksMSwwLDAsNDEsMywxMjIsMywxMTksMTA1LDExMCwxMTQsMSwKKyAgICAwLDAsMCwxMTQsMiwwLDAsMCw0MSw4OSwxMTQsNTksMCwwLDAsMTE0LAorICAgIDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTcsMCwwLDAsMTE0LDE5LAorICAgIDAsMCwwLDExNCwyOCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDM5LDAsCisgICAgMCwwLDExNCw0MywwLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDQ2LDAsMCwKKyAgICAwLDExNCw1NSwwLDAsMCwxMTQsNjUsMCwwLDAsMTE0LDY4LDAsMCwwLAorICAgIDExNCw2NiwwLDAsMCwyMTgsOCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTQsCisgICAgMTg4LDAsMCwwLDExNCwxMDIsMCwwLDAsMTE0LDgxLDAsMCwwLDExNCw4OCwKKyAgICAwLDAsMCwxMTQsNjksMCwwLDAsMTE0LDcwLDAsMCwwLDExNCw5MSwwLAorICAgIDAsMCwxMTQsOTIsMCwwLDAsMTE0LDk1LDAsMCwwLDExNCwxMDYsMCwwLAorICAgIDAsMTE0LDEwOCwwLDAsMCwxMTQsMTUsMCwwLDAsMTE0LDE4MCwwLDAsMCwKKyAgICAxMTQsMTQsMCwwLDAsMTE0LDE4LDAsMCwwLDkwLDE3LDk1LDgyLDY1LDg3LAorICAgIDk1LDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LDY2LDY5LDgyLDExNCwxMTksMCwKKyAgICAwLDAsMTE0LDEyOCwwLDAsMCwxMTQsMTEzLDAsMCwwLDExNCwxMTQsMCwwLAorICAgIDAsMTE0LDEyNiwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCwxMzYsMCwwLDAsCisgICAgMTE0LDEzOCwwLDAsMCwxMTQsMTQ2LDAsMCwwLDExNCwxNTAsMCwwLDAsMTE0LAorICAgIDE1NSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwxNjYsMCwwLDAsMTE0LDE3NSwKKyAgICAwLDAsMCwxMTQsMTg1LDAsMCwwLDExNCwxOTAsMCwwLDAsMTE0LDE5MywwLAorICAgIDAsMCwxMTQsMTk4LDAsMCwwLDExNCwyMDYsMCwwLDAsMTE0LDIwNywwLDAsCisgICAgMCwxMTQsMjEzLDAsMCwwLDExNCwxNjcsMCwwLDAsMjE4LDYsMTExLDk4LDEwNiwKKyAgICAxMDEsOTksMTE2LDExNCwyMzQsMCwwLDAsMTE0LDIzMiwwLDAsMCwxMTQsMjQwLDAsCisgICAgMCwwLDExNCwxNjgsMCwwLDAsMTE0LDUsMSwwLDAsMTE0LDEzLDEsMCwKKyAgICAwLDExNCwxNiwxLDAsMCwxMTQsMjYsMSwwLDAsMTE0LDI3LDEsMCwwLAorICAgIDExNCw0MiwxLDAsMCwxMTQsNDUsMSwwLDAsMTE0LDQ5LDEsMCwwLDExNCwKKyAgICA1MywxLDAsMCwxMTQsNTAsMSwwLDAsMTE0LDU0LDEsMCwwLDExNCwyNDcsCisgICAgMCwwLDAsMTE0LDY3LDEsMCwwLDExNCw4MCwxLDAsMCwxMTQsOTUsMSwKKyAgICAwLDAsMTE0LDk4LDEsMCwwLDExNCwyNDEsMCwwLDAsMTE0LDEwMiwxLDAsCisgICAgMCwxMTQsMTExLDEsMCwwLDExNCwxMDMsMSwwLDAsMTE0LDEwNSwxLDAsMCwKKyAgICAxMTQsMTA2LDEsMCwwLDExNCwxMDcsMSwwLDAsMTE0LDExMywxLDAsMCwxMTQsCisgICAgMTE1LDEsMCwwLDExNCwyMzMsMCwwLDAsMTE0LDExOCwxLDAsMCwxMTQsMTE5LAorICAgIDEsMCwwLDExNCwxMjgsMSwwLDAsMTE0LDEyOSwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsOCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2Miw4LDAsMCwwLDExNSwKKyAgICAxNjQsMCwwLDAsNiwxNyw2LDMsMTIsMTIsMTIsNSwxMiw1LDEyLDYsCisgICAgMTIsMTIsMTIsMTAsMTIsOSwxMiw1LDEyLDcsMTUsMjIsMTIsOCwxMiw0LAorICAgIDE1LDYsNiwyLDYsMywyMiw0LDE5LDY4LDE5LDIxLDE5LDE5LDEyLDE5LAorICAgIDEyLDIwLDEyLDExMywyMiwxLDE4LDIsNiwyLDksMiw5LDEsOSwyLAorICAgIDE1LDI3LDEyLDIzLDEyLDE5LDEyLDEyLDE4LDgsMTIsMTgsMTIsMTEsMTIsMTEsCisgICAgMTIsMTMsMTIsMTMsMjEsNTUsMjEsMTIsMTgsMTAsMTIsMTQsMTIsMzQsMTksMjcsCisgICAgMTksMTAyLDI0LDIyLDksMywxMiwxLDE1LDYzLDE4LDQ1LDE5LDI1MSwxOSw3MSwKKyAgICAxOSw1OSwxOSw2MCwxOSwyNSwyMiwxMTAsMTksMzEsMjUsNDMsMjUsMTYsNiwzLAorICAgIDE5LDQ5LDE5LDU3LDE5LDI3LDE5LDEyNCwxOSwxNDcsMTksMTMsMTIsOSwxNSw0MSwKKyAgICAxMiwxNyw2LDEsMTAsMiwxMiwyNywxMiw2LDE4LDI0LDEyLDMyLDEyLDE1LAorICAgIDEyLDExLDI0LDM1LDEyLDgsMTIsODcsCiB9OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21hcnNoYWwuYyBiL1B5dGhvbi9tYXJzaGFsLmMKaW5kZXggY2MxNzMyOS4uZGM1NDExYyAxMDA2NDQKLS0tIGEvUHl0aG9uL21hcnNoYWwuYworKysgYi9QeXRob24vbWFyc2hhbC5jCkBAIC0xLDggKzEsMTAgQEAKIAogLyogV3JpdGUgUHl0aG9uIG9iamVjdHMgdG8gZmlsZXMgYW5kIHJlYWQgdGhlbSBiYWNrLgotICAgVGhpcyBpcyBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSBvbmx5OwotICAgYSB0cnVlIHBlcnNpc3RlbnQgc3RvcmFnZSBmYWNpbGl0eSB3b3VsZCBiZSBtdWNoIGhhcmRlciwgc2luY2UKLSAgIGl0IHdvdWxkIGhhdmUgdG8gdGFrZSBjaXJjdWxhciBsaW5rcyBhbmQgc2hhcmluZyBpbnRvIGFjY291bnQuICovCisgICBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSwKKyAgIGV2ZW4gdGhvdWdoIGRpY3RzLCBsaXN0cywgc2V0cyBhbmQgZnJvemVuc2V0cywgbm90IGNvbW1vbmx5IHNlZW4gaW4KKyAgIGNvZGUgb2JqZWN0cywgYXJlIHN1cHBvcnRlZC4KKyAgIFZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sIHByb3Blcmx5IHN1cHBvcnRzIGNpcmN1bGFyIGxpbmtzCisgICBhbmQgc2hhcmluZy4gKi8KIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKQEAgLTMxLDE2ICszMywxNCBAQAogI2RlZmluZSBUWVBFX1NUT1BJVEVSICAgICAgICAgICAnUycKICNkZWZpbmUgVFlQRV9FTExJUFNJUyAgICAgICAgICAgJy4nCiAjZGVmaW5lIFRZUEVfSU5UICAgICAgICAgICAgICAgICdpJwotLyogVFlQRV9JTlQ2NCBpcyBkZXByZWNhdGVkLiBJdCBpcyBub3QKLSAgIGdlbmVyYXRlZCBhbnltb3JlLCBhbmQgc3VwcG9ydCBmb3IgcmVhZGluZyBpdAotICAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQuICovCi0jZGVmaW5lIFRZUEVfSU5UNjQgICAgICAgICAgICAgICdJJwogI2RlZmluZSBUWVBFX0ZMT0FUICAgICAgICAgICAgICAnZicKICNkZWZpbmUgVFlQRV9CSU5BUllfRkxPQVQgICAgICAgJ2cnCiAjZGVmaW5lIFRZUEVfQ09NUExFWCAgICAgICAgICAgICd4JwogI2RlZmluZSBUWVBFX0JJTkFSWV9DT01QTEVYICAgICAneScKICNkZWZpbmUgVFlQRV9MT05HICAgICAgICAgICAgICAgJ2wnCiAjZGVmaW5lIFRZUEVfU1RSSU5HICAgICAgICAgICAgICdzJworI2RlZmluZSBUWVBFX0lOVEVSTkVEICAgICAgICAgICAndCcKKyNkZWZpbmUgVFlQRV9SRUYgICAgICAgICAgICAgICAgJ3InCiAjZGVmaW5lIFRZUEVfVFVQTEUgICAgICAgICAgICAgICcoJwogI2RlZmluZSBUWVBFX0xJU1QgICAgICAgICAgICAgICAnWycKICNkZWZpbmUgVFlQRV9ESUNUICAgICAgICAgICAgICAgJ3snCkBAIC00OSw2ICs0OSwxMyBAQAogI2RlZmluZSBUWVBFX1VOS05PV04gICAgICAgICAgICAnPycKICNkZWZpbmUgVFlQRV9TRVQgICAgICAgICAgICAgICAgJzwnCiAjZGVmaW5lIFRZUEVfRlJPWkVOU0VUICAgICAgICAgICc+JworI2RlZmluZSBGTEFHX1JFRiAgICAgICAgICAgICAgICAnXHg4MCcgLyogd2l0aCBhIHR5cGUsIGFkZCBvYmogdG8gaW5kZXggKi8KKworI2RlZmluZSBUWVBFX0FTQ0lJICAgICAgICAgICAgICAnYScKKyNkZWZpbmUgVFlQRV9BU0NJSV9JTlRFUk5FRCAgICAgJ0EnCisjZGVmaW5lIFRZUEVfU01BTExfVFVQTEUgICAgICAgICcpJworI2RlZmluZSBUWVBFX1NIT1JUX0FTQ0lJICAgICAgICAneicKKyNkZWZpbmUgVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRCAnWicKIAogI2RlZmluZSBXRkVSUl9PSyAwCiAjZGVmaW5lIFdGRVJSX1VOTUFSU0hBTExBQkxFIDEKQEAgLTY1LDE1ICs3MiwxOCBAQAogICAgIFB5T2JqZWN0ICpjdXJyZW50X2ZpbGVuYW1lOwogICAgIGNoYXIgKnB0cjsKICAgICBjaGFyICplbmQ7CisgICAgY2hhciAqYnVmOworICAgIFB5X3NzaXplX3QgYnVmX3NpemU7CisgICAgUHlPYmplY3QgKnJlZnM7IC8qIGRpY3Qgb24gbWFyc2hhbCwgbGlzdCBvbiB1bm1hcnNoYWwgKi8KICAgICBpbnQgdmVyc2lvbjsKIH0gV0ZJTEU7CiAKICNkZWZpbmUgd19ieXRlKGMsIHApIGlmICgoKHApLT5mcCkpIHB1dGMoKGMpLCAocCktPmZwKTsgXAogICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwKS0+cHRyICE9IChwKS0+ZW5kKSAqKHApLT5wdHIrKyA9IChjKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3X21vcmUoYywgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKChjKSwgcCkKIAogc3RhdGljIHZvaWQKLXdfbW9yZShpbnQgYywgV0ZJTEUgKnApCit3X21vcmUoY2hhciBjLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG5ld3NpemU7CiAgICAgaWYgKHAtPnN0ciA9PSBOVUxMKQpAQCAtOTAsNyArMTAwLDcgQEAKICAgICAgICAgcC0+cHRyID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKilwLT5zdHIpICsgc2l6ZTsKICAgICAgICAgcC0+ZW5kID0KICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIG5ld3NpemU7Ci0gICAgICAgICpwLT5wdHIrKyA9IFB5X1NBRkVfRE9XTkNBU1QoYywgaW50LCBjaGFyKTsKKyAgICAgICAgKnAtPnB0cisrID0gYzsKICAgICB9CiB9CiAKQEAgLTE0Niw2ICsxNTYsMTMgQEAKICAgICAgICAgd19zdHJpbmcocywgbiwgcCk7CiB9CiAKK3N0YXRpYyB2b2lkCit3X3Nob3J0X3BzdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuLCBXRklMRSAqcCkKK3sKKyAgICB3X2J5dGUoUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKSwgcCk7CisgICAgd19zdHJpbmcocywgbiwgcCk7Cit9CisKIC8qIFdlIGFzc3VtZSB0aGF0IFB5dGhvbiBpbnRzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBpbiBiYXNlIHNvbWUgcG93ZXIgb2YKICAgIDIqKjE1OyBmb3IgdGhlIHNha2Ugb2YgcG9ydGFiaWxpdHkgd2UnbGwgYWx3YXlzIHJlYWQgYW5kIHdyaXRlIHRoZW0gaW4gYmFzZQogICAgZXhhY3RseSAyKioxNS4gKi8KQEAgLTE1OCwxMyArMTc1LDE3IEBACiAjZW5kaWYKICNkZWZpbmUgUHlMb25nX01BUlNIQUxfUkFUSU8gKFB5TG9uZ19TSElGVCAvIFB5TG9uZ19NQVJTSEFMX1NISUZUKQogCisjZGVmaW5lIFdfVFlQRSh0LCBwKSBkbyB7IFwKKyAgICB3X2J5dGUoKHQpIHwgZmxhZywgKHApKTsgXAorfSB3aGlsZSgwKQorCiBzdGF0aWMgdm9pZAotd19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgV0ZJTEUgKnApCit3X1B5TG9uZyhjb25zdCBQeUxvbmdPYmplY3QgKm9iLCBjaGFyIGZsYWcsIFdGSUxFICpwKQogewogICAgIFB5X3NzaXplX3QgaSwgaiwgbiwgbDsKICAgICBkaWdpdCBkOwogCi0gICAgd19ieXRlKFRZUEVfTE9ORywgcCk7CisgICAgV19UWVBFKFRZUEVfTE9ORywgcCk7CiAgICAgaWYgKFB5X1NJWkUob2IpID09IDApIHsKICAgICAgICAgd19sb25nKChsb25nKTAsIHApOwogICAgICAgICByZXR1cm47CkBAIC0yMDEsMTAgKzIyMiw2NCBAQAogICAgIH0gd2hpbGUgKGQgIT0gMCk7CiB9CiAKK3N0YXRpYyBpbnQKK3dfcmVmKFB5T2JqZWN0ICp2LCBjaGFyICpmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeU9iamVjdCAqaWQ7CisgICAgUHlPYmplY3QgKmlkeDsKKworICAgIGlmIChwLT52ZXJzaW9uIDwgMyB8fCBwLT5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOyAvKiBub3Qgd3JpdGluZyBvYmplY3QgcmVmZXJlbmNlcyAqLworCisgICAgLyogaWYgaXQgaGFzIG9ubHkgb25lIHJlZmVyZW5jZSwgaXQgZGVmaW5pdGVseSBpc24ndCBzaGFyZWQgKi8KKyAgICBpZiAoUHlfUkVGQ05UKHYpID09IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQqKXYpOworICAgIGlmIChpZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycjsKKyAgICBpZHggPSBQeURpY3RfR2V0SXRlbShwLT5yZWZzLCBpZCk7CisgICAgaWYgKGlkeCAhPSBOVUxMKSB7CisgICAgICAgIC8qIHdyaXRlIHRoZSByZWZlcmVuY2UgaW5kZXggdG8gdGhlIHN0cmVhbSAqLworICAgICAgICBsb25nIHcgPSBQeUxvbmdfQXNMb25nKGlkeCk7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIGlmICh3ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIC8qIHdlIGRvbid0IHN0b3JlICJsb25nIiBpbmRpY2VzIGluIHRoZSBkaWN0ICovCisgICAgICAgIGFzc2VydCgwIDw9IHcgJiYgdyA8PSAweDdmZmZmZmZmKTsKKyAgICAgICAgd19ieXRlKFRZUEVfUkVGLCBwKTsKKyAgICAgICAgd19sb25nKHcsIHApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgb2s7CisgICAgICAgIFB5X3NzaXplX3QgcyA9IFB5RGljdF9TaXplKHAtPnJlZnMpOworICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGxvbmcgaW5kaWNlcyAqLworICAgICAgICBpZiAocyA+PSAweDdmZmZmZmZmKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRvbyBtYW55IG9iamVjdHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIGlkeCA9IFB5TG9uZ19Gcm9tU3NpemVfdChzKTsKKyAgICAgICAgb2sgPSBpZHggJiYgUHlEaWN0X1NldEl0ZW0ocC0+cmVmcywgaWQsIGlkeCkgPT0gMDsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgUHlfWERFQ1JFRihpZHgpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICpmbGFnIHw9IEZMQUdfUkVGOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CitlcnI6CisgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3dfY29tcGxleF9vYmplY3QoUHlPYmplY3QgKnYsIGNoYXIgZmxhZywgV0ZJTEUgKnApOworCiBzdGF0aWMgdm9pZAogd19vYmplY3QoUHlPYmplY3QgKnYsIFdGSUxFICpwKQogewotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBjaGFyIGZsYWcgPSAnXDAnOwogCiAgICAgcC0+ZGVwdGgrKzsKIApAQCAtMjI5LDI0ICszMDQsMzUgQEAKICAgICBlbHNlIGlmICh2ID09IFB5X1RydWUpIHsKICAgICAgICAgd19ieXRlKFRZUEVfVFJVRSwgcCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CisgICAgZWxzZSBpZiAoIXdfcmVmKHYsICZmbGFnLCBwKSkKKyAgICAgICAgd19jb21wbGV4X29iamVjdCh2LCBmbGFnLCBwKTsKKworICAgIHAtPmRlcHRoLS07Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKQoreworICAgIFB5X3NzaXplX3QgaSwgbjsKKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBsb25nIHggPSBQeUxvbmdfQXNMb25nKHYpOwogICAgICAgICBpZiAoKHggPT0gLTEpICAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKm9iID0gKFB5TG9uZ09iamVjdCAqKXY7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgd19QeUxvbmcob2IsIHApOworICAgICAgICAgICAgd19QeUxvbmcob2IsIGZsYWcsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogI2lmIFNJWkVPRl9MT05HID4gNAogICAgICAgICAgICAgbG9uZyB5ID0gUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChsb25nLCB4LCAzMSk7CiAgICAgICAgICAgICBpZiAoeSAmJiB5ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgLyogVG9vIGxhcmdlIGZvciBUWVBFX0lOVCAqLwotICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIHApOworICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIGZsYWcsIHApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd19ieXRlKFRZUEVfSU5ULCBwKTsKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlQsIHApOwogICAgICAgICAgICAgICAgIHdfbG9uZyh4LCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjU5LDcgKzM0NSw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtMjcwLDcgKzM1Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IHN0cmxlbihidWYpOwotICAgICAgICAgICAgd19ieXRlKFRZUEVfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRkxPQVQsIHApOwogICAgICAgICAgICAgd19ieXRlKChpbnQpbiwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZyhidWYsIG4sIHApOwogICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwpAQCAtMjg0LDcgKzM3MCw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgICAgIGlmIChfUHlGbG9hdF9QYWNrOChQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMSkgPCAwKSB7CkBAIC0yOTUsNyArMzgxLDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIDE3LCAwLCBOVUxMKTsKICAgICAgICAgICAgIGlmICghYnVmKSB7CkBAIC0zMTksMzEgKzQwNSw2MSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9TVFJJTkcsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9TVFJJTkcsIHApOwogICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodiksIFB5Qnl0ZXNfR0VUX1NJWkUodiksIHApOwogICAgIH0KICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICBQeU9iamVjdCAqdXRmODsKLSAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBQeVVuaWNvZGVfSVNfQVNDSUkodikpIHsKKyAgICAgICAgICAgIGludCBpc19zaG9ydCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpIDwgMjU2OworICAgICAgICAgICAgaWYgKGlzX3Nob3J0KSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfc2hvcnRfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHdfYnl0ZShUWVBFX1VOSUNPREUsIHApOwotICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOwotICAgICAgICBQeV9ERUNSRUYodXRmOCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnV0Zjg7CisgICAgICAgICAgICB1dGY4ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2LCAidXRmOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcC0+ZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDMgJiYgIFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlRFUk5FRCwgcCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfVU5JQ09ERSwgcCk7CisgICAgICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOworICAgICAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9UVVBMRSwgcCk7CiAgICAgICAgIG4gPSBQeVR1cGxlX1NpemUodik7Ci0gICAgICAgIFdfU0laRShuLCBwKTsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBuIDwgMjU2KSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TTUFMTF9UVVBMRSwgcCk7CisgICAgICAgICAgICB3X2J5dGUoKHVuc2lnbmVkIGNoYXIpbiwgcCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9UVVBMRSwgcCk7CisgICAgICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIH0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgd19vYmplY3QoUHlUdXBsZV9HRVRfSVRFTSh2LCBpKSwgcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfTElTVCwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX0xJU1QsIHApOwogICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHYpOwogICAgICAgICBXX1NJWkUobiwgcCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTM1Myw3ICs0NjksNyBAQAogICAgIGVsc2UgaWYgKFB5RGljdF9DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0RJQ1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9ESUNULCBwKTsKICAgICAgICAgLyogVGhpcyBvbmUgaXMgTlVMTCBvYmplY3QgdGVybWluYXRlZCEgKi8KICAgICAgICAgcG9zID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHYsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKQEAgLTM2Niw5ICs0ODIsOSBAQAogICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdDsKIAogICAgICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeVNldF9UeXBlKSkKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX1NFVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TRVQsIHApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9GUk9aRU5TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRlJPWkVOU0VULCBwKTsKICAgICAgICAgbiA9IFB5T2JqZWN0X1NpemUodik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwpAQCAtMzk1LDcgKzUxMSw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5Q29kZV9DaGVjayh2KSkgewogICAgICAgICBQeUNvZGVPYmplY3QgKmNvID0gKFB5Q29kZU9iamVjdCAqKXY7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0NPREUsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9DT0RFLCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19hcmdjb3VudCwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fa3dvbmx5YXJnY291bnQsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX25sb2NhbHMsIHApOwpAQCAtNDIxLDE1ICs1MzcsMTQgQEAKICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKHZpZXcuYnVmLCB2aWV3LmxlbiwgcCk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVU5LTk9XTiwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX1VOS05PV04sIHApOwogICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgIH0KLSAgICBwLT5kZXB0aC0tOwogfQogCiAvKiB2ZXJzaW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IGZvciB3cml0aW5nIGludHMuICovCkBAIC00NDAsNiArNTU1LDcgQEAKICAgICB3Zi5mcCA9IGZwOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOworICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfbG9uZyh4LCAmd2YpOwogfQpAQCAtNDUxLDgxICs1NjcsMTA3IEBACiAgICAgd2YuZnAgPSBmcDsKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKKyAgICBpZiAodmVyc2lvbiA+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+cmVmcywgbik7CisgICAgICAgIGlmICh2ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW52YWxpZCByZWZlcmVuY2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYodik7CisgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogQm9ndXMgZGF0YSBnb3Qgd3JpdHRlbiwgd2hpY2ggaXNuJ3QgaWRlYWwuCiAgICAgICAgICAgIFRoaXMgd2lsbCBsZXQgeW91IGtlZXAgd29ya2luZyBhbmQgcmVjb3Zlci4gKi8KICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmtub3duIHR5cGUgY29kZSkiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICB9CkBAIC0xMTM5LDIzICsxMzg4LDMzIEBACiBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZnApCiB7CiAgICAgUkZJTEUgcmY7CisgICAgaW50IHJlczsKICAgICBhc3NlcnQoZnApOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLmVuZCA9IHJmLnB0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfc2hvcnQoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfc2hvcnQoJnJmKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBsb25nCiBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBsb25nIHJlczsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOwotICAgIHJldHVybiByX2xvbmcoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfbG9uZygmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKICNpZmRlZiBIQVZFX0ZTVEFUCkBAIC0xMjE0LDIyICsxNDczLDM2IEBACiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZi5yZWZzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmYucmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByX29iamVjdCgmcmYpOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeU9iamVjdCAqCi1QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK1B5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFJGSUxFIHJmOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgcmYuZnAgPSBOVUxMOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICByZi5wdHIgPSBzdHI7Ci0gICAgcmYuZW5kID0gc3RyICsgbGVuOworICAgIHJmLnB0ciA9IChjaGFyICopc3RyOworICAgIHJmLmVuZCA9IChjaGFyICopc3RyICsgbGVuOworICAgIHJmLmJ1ZiA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyNDgsNyArMTUyMSwxMyBAQAogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKICAgICBpZiAod2Yuc3RyICE9IE5VTEwpIHsKICAgICAgICAgY2hhciAqYmFzZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopd2Yuc3RyKTsKICAgICAgICAgaWYgKHdmLnB0ciAtIGJhc2UgPiBQWV9TU0laRV9UX01BWCkgewpAQCAtMTMyMCw2ICsxNTk5LDggQEAKICAgICAgKiBNYWtlIGEgY2FsbCB0byB0aGUgcmVhZCBtZXRob2QsIGJ1dCByZWFkIHplcm8gYnl0ZXMuCiAgICAgICogVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHBhc3NlZCBpbiBhdCBsZWFzdAogICAgICAqIGhhcyBhIHJlYWQgbWV0aG9kIHdoaWNoIHJldHVybnMgYnl0ZXMuCisgICAgICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiB3ZSBndWFyYW50ZWUgZ29vZCBlcnJvciBoYW5kbGluZworICAgICAqIGZvciByX3N0cmluZygpCiAgICAgICovCiAgICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfcmVhZCwgImkiLCAwKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKQpAQCAtMTMzNSw3ICsxNjE2LDE1IEBACiAgICAgICAgIHJmLmZwID0gTlVMTDsKICAgICAgICAgcmYucmVhZGFibGUgPSBmOwogICAgICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICAgICAgcmYuYnVmID0gTlVMTDsKKyAgICAgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICAgICAgICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGRhdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzkyLDggKzE2ODEsMTEgQEAKICAgICByZi5wdHIgPSBzOwogICAgIHJmLmVuZCA9IHMgKyBuOwogICAgIHJmLmRlcHRoID0gMDsKKyAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnApOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNDMzLDYgKzE3MjUsNyBAQAogdmVyc2lvbiAtLSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZVxuXAogICAgIGhpc3RvcmljYWwgZm9ybWF0LCB2ZXJzaW9uIDEgc2hhcmVzIGludGVybmVkIHN0cmluZ3MgYW5kIHZlcnNpb24gMlxuXAogICAgIHVzZXMgYSBiaW5hcnkgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuXAorICAgIFZlcnNpb24gMyBzaGFyZXMgY29tbW9uIG9iamVjdCByZWZlcmVuY2VzIChOZXcgaW4gdmVyc2lvbiAzLjQpLlxuXAogXG5cCiBGdW5jdGlvbnM6XG5cCiBcblwKZGlmZiAtLWdpdCBhL1B5dGhvbi9teXN0cnRvdWwuYyBiL1B5dGhvbi9teXN0cnRvdWwuYwppbmRleCA4YTU0Y2JmLi45ODQyOWQ0IDEwMDY0NAotLS0gYS9QeXRob24vbXlzdHJ0b3VsLmMKKysrIGIvUHl0aG9uL215c3RydG91bC5jCkBAIC05MiwxMSArOTIsMTEgQEAKICoqICAgICAgICAgICAgICBleGNlcHRpb25zIC0gd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0uCiAqLwogdW5zaWduZWQgbG9uZwotUHlPU19zdHJ0b3VsKHJlZ2lzdGVyIGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCitQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKi8KLSAgICByZWdpc3RlciBpbnQgYzsgICAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KLSAgICByZWdpc3RlciBpbnQgb3ZsaW1pdDsgICAgICAgLyogcmVxdWlyZWQgZGlnaXRzIHRvIG92ZXJmbG93ICovCisgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCisgICAgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLwogCiAgICAgLyogc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlICovCiAgICAgd2hpbGUgKCpzdHIgJiYgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqc3RyKSkpCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQogICAgICAgICAgICAgICAgICAgICArK3N0cjsKICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBiICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAvKiBjYXRjaCBzaWxseSBiYXNlcyAqLwogICAgIGlmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpIHsKICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgICAgIGlmIChvdmxpbWl0ID4gMCkgLyogbm8gb3ZlcmZsb3cgY2hlY2sgcmVxdWlyZWQgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBjOwogICAgICAgICBlbHNlIHsgLyogcmVxdWlyZXMgb3ZlcmZsb3cgY2hlY2sgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGVtcF9yZXN1bHQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OwogCiAgICAgICAgICAgICBpZiAob3ZsaW1pdCA8IDApIC8qIGd1YXJhbnRlZWQgb3ZlcmZsb3cgKi8KICAgICAgICAgICAgICAgICBnb3RvIG92ZXJmbG93ZWQ7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogICAgIC8qIHNldCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBzY2FubmVkICovCiAgICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgIC8qIHNwb29sIHRocm91Z2ggcmVtYWluaW5nIGRpZ2l0IGNoYXJhY3RlcnMgKi8KICAgICAgICAgd2hpbGUgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0gPCBiYXNlKQogICAgICAgICAgICAgKytzdHI7Ci0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICB9CiAgICAgZXJybm8gPSBFUkFOR0U7CiAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAjZGVmaW5lIFBZX0FCU19MT05HX01JTiAgICAgICAgICgwLSh1bnNpZ25lZCBsb25nKUxPTkdfTUlOKQogCiBsb25nCi1QeU9TX3N0cnRvbChjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b2woY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKICAgICBsb25nIHJlc3VsdDsKICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CmRpZmYgLS1naXQgYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaCBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCmluZGV4IDJkNmJjZGEuLmY5MGExN2EgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCisrKyBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCkBAIC02OCw3ICs2OCw3IEBACiAgICAgJiZUQVJHRVRfQklOQVJZX09SLAogICAgICYmVEFSR0VUX0lOUExBQ0VfUE9XRVIsCiAgICAgJiZUQVJHRVRfR0VUX0lURVIsCi0gICAgJiZUQVJHRVRfU1RPUkVfTE9DQUxTLAorICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX1BSSU5UX0VYUFIsCiAgICAgJiZUQVJHRVRfTE9BRF9CVUlMRF9DTEFTUywKICAgICAmJlRBUkdFVF9ZSUVMRF9GUk9NLApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgJiZUQVJHRVRfTElTVF9BUFBFTkQsCiAgICAgJiZUQVJHRVRfU0VUX0FERCwKICAgICAmJlRBUkdFVF9NQVBfQURELAotICAgICYmX3Vua25vd25fb3Bjb2RlLAorICAgICYmVEFSR0VUX0xPQURfQ0xBU1NERVJFRiwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKZGlmZiAtLWdpdCBhL1B5dGhvbi9wZWVwaG9sZS5jIGIvUHl0aG9uL3BlZXBob2xlLmMKaW5kZXggNWQ1MzY3Ny4uNDE4NTQ2MiAxMDA2NDQKLS0tIGEvUHl0aG9uL3BlZXBob2xlLmMKKysrIGIvUHl0aG9uL3BlZXBob2xlLmMKQEAgLTI3NSw2ICsyNzUsNyBAQAogICAgIGxlbl9jb25zdHMgPSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKTsKICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG5ld2NvbnN0KSkgewogICAgICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKQEAgLTMyNywzNyArMzI4LDYgQEAKICAgICByZXR1cm4gYmxvY2tzOwogfQogCi0vKiBIZWxwZXIgdG8gcmVwbGFjZSBMT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlIHdpdGggTE9BRF9DT05TVAotICAgUmV0dXJuczogMCBpZiBubyBjaGFuZ2UsIDEgaWYgY2hhbmdlLCAtMSBpZiBlcnJvciAqLwotc3RhdGljIGludAotbG9hZF9nbG9iYWwodW5zaWduZWQgY2hhciAqY29kZXN0ciwgUHlfc3NpemVfdCBpLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY29uc3RzKQotewotICAgIFB5X3NzaXplX3QgajsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChzdHJjbXAobmFtZSwgIk5vbmUiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9Ob25lOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiVHJ1ZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X1RydWU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJGYWxzZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X0ZhbHNlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZm9yIChqID0gMDsgaiA8IFB5TGlzdF9HRVRfU0laRShjb25zdHMpOyBqKyspIHsKLSAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopID09IG9iaikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaiA9PSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKSkgewotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG9iaikgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKTsKLSAgICBjb2Rlc3RyW2ldID0gTE9BRF9DT05TVDsKLSAgICBTRVRBUkcoY29kZXN0ciwgaSwgaik7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIC8qIFBlcmZvcm0gYmFzaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyB0byBjb21wb25lbnRzIG9mIGEgY29kZSBvYmplY3QuCiAgICBUaGUgY29uc3RzIG9iamVjdCBzaG91bGQgc3RpbGwgYmUgaW4gbGlzdCBmb3JtIHRvIGFsbG93IG5ldyBjb25zdGFudHMKICAgIHRvIGJlIGFwcGVuZGVkLgpAQCAtMzkyLDcgKzM2Miw2IEBACiAgICAgUHlfc3NpemVfdCBjb25zdF9zdGFja19zaXplID0gMDsKICAgICBpbnQgaW5fY29uc3RzID0gMDsgIC8qIHdoZXRoZXIgd2UgYXJlIGluIGEgTE9BRF9DT05TVCBzZXF1ZW5jZSAqLwogICAgIHVuc2lnbmVkIGludCAqYmxvY2tzID0gTlVMTDsKLSAgICBjaGFyICpuYW1lOwogCiAgICAgLyogQmFpbCBvdXQgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCAqLwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDEzLDggKzM4MiwxMCBAQAogCiAgICAgLyogTWFrZSBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUgY29kZSBzdHJpbmcgKi8KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoY29kZWxlbik7Ci0gICAgaWYgKGNvZGVzdHIgPT0gTlVMTCkKKyAgICBpZiAoY29kZXN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKiltZW1jcHkoY29kZXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY29kZSksIGNvZGVsZW4pOwogCkBAIC00MjgsOCArMzk5LDEwIEBACiAKICAgICAvKiBNYXBwaW5nIHRvIG5ldyBqdW1wIHRhcmdldHMgYWZ0ZXIgTk9QcyBhcmUgcmVtb3ZlZCAqLwogICAgIGFkZHJtYXAgPSAoaW50ICopUHlNZW1fTWFsbG9jKGNvZGVsZW4gKiBzaXplb2YoaW50KSk7Ci0gICAgaWYgKGFkZHJtYXAgPT0gTlVMTCkKKyAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KIAogICAgIGJsb2NrcyA9IG1hcmtibG9ja3MoY29kZXN0ciwgY29kZWxlbik7CiAgICAgaWYgKGJsb2NrcyA9PSBOVUxMKQpAQCAtNDc1LDIwICs0NDgsNiBAQAogICAgICAgICAgICAgICAgIGNvZGVzdHJbaSszXSA9IE5PUDsKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgTE9BRF9HTE9CQUwvTE9BRF9OQU1FIE5vbmUvVHJ1ZS9GYWxzZQotICAgICAgICAgICAgICAgICAgIHdpdGggTE9BRF9DT05TVCBOb25lL1RydWUvRmFsc2UgKi8KLSAgICAgICAgICAgIGNhc2UgTE9BRF9OQU1FOgotICAgICAgICAgICAgY2FzZSBMT0FEX0dMT0JBTDoKLSAgICAgICAgICAgICAgICBqID0gR0VUQVJHKGNvZGVzdHIsIGkpOwotICAgICAgICAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5VHVwbGVfR0VUX0lURU0obmFtZXMsIGopKTsKLSAgICAgICAgICAgICAgICBoID0gbG9hZF9nbG9iYWwoY29kZXN0ciwgaSwgbmFtZSwgY29uc3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoaCA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdEVycm9yOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQ09OU1RfU1RBQ0tfUFVTSF9PUChpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBMT0FEX0NPTlNUIHRydWVjb25zdAogICAgICAgICAgICAgICAgICAgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4LiBUaGlzIGltcHJvdmVzCiAgICAgICAgICAgICAgICAgICAgIndoaWxlIDEiIHBlcmZvcm1hbmNlLiAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5YXJlbmEuYyBiL1B5dGhvbi9weWFyZW5hLmMKaW5kZXggMDJhMzFkOC4uMTAzNjAzZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5YXJlbmEuYworKysgYi9QeXRob24vcHlhcmVuYS5jCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAgICAgLyogQWxsb2NhdGUgaGVhZGVyIGFuZCBibG9jayBhcyBvbmUgdW5pdC4KICAgICAgICBhYl9tZW0gcG9pbnRzIGp1c3QgcGFzdCBoZWFkZXIuICovCi0gICAgYmxvY2sgKmIgPSAoYmxvY2sgKiltYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOworICAgIGJsb2NrICpiID0gKGJsb2NrICopUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykgKyBzaXplKTsKICAgICBpZiAoIWIpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGItPmFiX3NpemUgPSBzaXplOwpAQCAtOTIsNyArOTIsNyBAQAogYmxvY2tfZnJlZShibG9jayAqYikgewogICAgIHdoaWxlIChiKSB7CiAgICAgICAgIGJsb2NrICpuZXh0ID0gYi0+YWJfbmV4dDsKLSAgICAgICAgZnJlZShiKTsKKyAgICAgICAgUHlNZW1fRnJlZShiKTsKICAgICAgICAgYiA9IG5leHQ7CiAgICAgfQogfQpAQCAtMTI3LDIwICsxMjcsMjAgQEAKIFB5QXJlbmEgKgogUHlBcmVuYV9OZXcoKQogewotICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKiltYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKKyAgICBQeUFyZW5hKiBhcmVuYSA9IChQeUFyZW5hICopUHlNZW1fTWFsbG9jKHNpemVvZihQeUFyZW5hKSk7CiAgICAgaWYgKCFhcmVuYSkKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogCiAgICAgYXJlbmEtPmFfaGVhZCA9IGJsb2NrX25ldyhERUZBVUxUX0JMT0NLX1NJWkUpOwogICAgIGFyZW5hLT5hX2N1ciA9IGFyZW5hLT5hX2hlYWQ7CiAgICAgaWYgKCFhcmVuYS0+YV9oZWFkKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAgICAgYXJlbmEtPmFfb2JqZWN0cyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFhcmVuYS0+YV9vYmplY3RzKSB7CiAgICAgICAgIGJsb2NrX2ZyZWUoYXJlbmEtPmFfaGVhZCk7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAjaWYgZGVmaW5lZChQeV9ERUJVRykKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICovCiAKICAgICBQeV9ERUNSRUYoYXJlbmEtPmFfb2JqZWN0cyk7Ci0gICAgZnJlZShhcmVuYSk7CisgICAgUHlNZW1fRnJlZShhcmVuYSk7CiB9CiAKIHZvaWQgKgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5aGFzaC5jIGIvUHl0aG9uL3B5aGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWVlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vcHloYXNoLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qIFNldCBvZiBoYXNoIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgbWFpbnRhaW5pbmcgdGhlIGludmFyaWFudCB0aGF0CisgICAgaWYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKKworICAgQWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyAoX1B5X0hhc2gqKCkpIHJldHVybiAiLTEiIHRvIHNpZ25pZnkgYW4gZXJyb3IuCisqLworI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19BUFBMRV9fCisjICBpbmNsdWRlIDxsaWJrZXJuL09TQnl0ZU9yZGVyLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX0VORElBTl9IKQorIyAgaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyMgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19QeV9IYXNoU2VjcmV0X3QgX1B5X0hhc2hTZWNyZXQ7CisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0VYVEVSTkFMCitleHRlcm4gUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZWxzZQorc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jOworI2VuZGlmCisKKy8qIENvdW50IF9QeV9IYXNoQnl0ZXMoKSBjYWxscyAqLworI2lmZGVmIFB5X0hBU0hfU1RBVFMKKyNkZWZpbmUgUHlfSEFTSF9TVEFUU19NQVggMzIKK3N0YXRpYyBQeV9zc2l6ZV90IGhhc2hzdGF0c1tQeV9IQVNIX1NUQVRTX01BWCArIDFdID0gezB9OworI2VuZGlmCisKKy8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KKyAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAorICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCisgICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgorCisgICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6CisKKyAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAorICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgorICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAorICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcworICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQorICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCisgICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCisKKyAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCisKKyAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgorCisgICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKKyAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCisKKyAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgorICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKKyAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCisgICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKKyAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgorCisgICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCisgICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKKyAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0CisKKyAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQorCisgICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQorICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCisgICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKKyAgIGZvciBub25uZWdhdGl2ZSB4LAorCisgICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUworCisgICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgorICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQorICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgorICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KKworICAgKi8KKworUHlfaGFzaF90CitfUHlfSGFzaERvdWJsZShkb3VibGUgdikKK3sKKyAgICBpbnQgZSwgc2lnbjsKKyAgICBkb3VibGUgbTsKKyAgICBQeV91aGFzaF90IHgsIHk7CisKKyAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgeworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCisgICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOworICAgIH0KKworICAgIG0gPSBmcmV4cCh2LCAmZSk7CisKKyAgICBzaWduID0gMTsKKyAgICBpZiAobSA8IDApIHsKKyAgICAgICAgc2lnbiA9IC0xOworICAgICAgICBtID0gLW07CisgICAgfQorCisgICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKKyAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCisgICAgeCA9IDA7CisgICAgd2hpbGUgKG0pIHsKKyAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOworICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KKyAgICAgICAgZSAtPSAyODsKKyAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KKyAgICAgICAgbSAtPSB5OworICAgICAgICB4ICs9IHk7CisgICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKKyAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOworICAgIH0KKworICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KKyAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOworICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7CisKKyAgICB4ID0geCAqIHNpZ247CisgICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCisgICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKKyAgICByZXR1cm4gKFB5X2hhc2hfdCl4OworfQorCitQeV9oYXNoX3QKK19QeV9IYXNoUG9pbnRlcih2b2lkICpwKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIHNpemVfdCB5ID0gKHNpemVfdClwOworICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKKyAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLworICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKKyAgICB4ID0gKFB5X2hhc2hfdCl5OworICAgIGlmICh4ID09IC0xKQorICAgICAgICB4ID0gLTI7CisgICAgcmV0dXJuIHg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIC8qCisgICAgICBXZSBtYWtlIHRoZSBoYXNoIG9mIHRoZSBlbXB0eSBzdHJpbmcgYmUgMCwgcmF0aGVyIHRoYW4gdXNpbmcKKyAgICAgIChwcmVmaXggXiBzdWZmaXgpLCBzaW5jZSB0aGlzIHNsaWdodGx5IG9iZnVzY2F0ZXMgdGhlIGhhc2ggc2VjcmV0CisgICAgKi8KKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGhhc2hzdGF0c1sobGVuIDw9IFB5X0hBU0hfU1RBVFNfTUFYKSA/IGxlbiA6IDBdKys7CisjZW5kaWYKKworI2lmIFB5X0hBU0hfQ1VUT0ZGID4gMAorICAgIGlmIChsZW4gPCBQeV9IQVNIX0NVVE9GRikgeworICAgICAgICAvKiBPcHRpbWl6ZSBoYXNoaW5nIG9mIHZlcnkgc21hbGwgc3RyaW5ncyB3aXRoIGlubGluZSBESkJYMzNBLiAqLworICAgICAgICBQeV91aGFzaF90IGhhc2g7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgICAgIGhhc2ggPSA1MzgxOyAvKiBESkJYMzNBIHN0YXJ0cyB3aXRoIDUzODEgKi8KKworICAgICAgICBzd2l0Y2gobGVuKSB7CisgICAgICAgICAgICAvKiAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwID09IGhhc2ggKiAzMyArICpwICovCisgICAgICAgICAgICBjYXNlIDc6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDY6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDU6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDQ6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDM6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDI6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDE6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaGFzaCBePSBsZW47CisgICAgICAgIGhhc2ggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmRqYngzM2Euc3VmZml4OworICAgICAgICB4ID0gKFB5X2hhc2hfdCloYXNoOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKyAgICAgICAgeCA9IFB5SGFzaF9GdW5jLmhhc2goc3JjLCBsZW4pOworCisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHJldHVybiAtMjsKKyAgICByZXR1cm4geDsKK30KKwordm9pZAorX1B5SGFzaF9GaW5pKHZvaWQpCit7CisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGludCBpOworICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIGNoYXIgKmZtdCA9ICIlMmkgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiI7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgImxlbiAgIGNhbGxzICAgIHRvdGFsXG4iKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IFB5X0hBU0hfU1RBVFNfTUFYOyBpKyspIHsKKyAgICAgICAgdG90YWwgKz0gaGFzaHN0YXRzW2ldOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgZm10LCBpLCBoYXNoc3RhdHNbaV0sIHRvdGFsKTsKKyAgICB9CisgICAgdG90YWwgKz0gaGFzaHN0YXRzWzBdOworICAgIGZwcmludGYoc3RkZXJyLCAiPiAgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgICBoYXNoc3RhdHNbMF0sIHRvdGFsKTsKKyNlbmRpZgorfQorCitQeUhhc2hfRnVuY0RlZiAqCitQeUhhc2hfR2V0RnVuY0RlZih2b2lkKQoreworICAgIHJldHVybiAmUHlIYXNoX0Z1bmM7Cit9CisKKy8qIE9wdGltaXplZCBtZW1jcHkoKSBmb3IgV2luZG93cyAqLworI2lmZGVmIF9NU0NfVkVSCisjICBpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA0CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA4CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgZHN0WzRdID0gc3JjWzRdOyBkc3RbNV0gPSBzcmNbNV07IGRzdFs2XSA9IHNyY1s2XTsgZHN0WzddID0gc3JjWzddOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxzZQorIyAgICBlcnJvciBTSVpFT0ZfUFlfVUhBU0hfVCBtdXN0IGJlIDQgb3IgOAorIyAgZW5kaWYgLyogU0laRU9GX1BZX1VIQVNIX1QgKi8KKyNlbHNlIC8qIG5vdCBXaW5kb3dzICovCisjICBkZWZpbmUgUFlfVUhBU0hfQ1BZKGRzdCwgc3JjKSBtZW1jcHkoZHN0LCBzcmMsIFNJWkVPRl9QWV9VSEFTSF9UKQorI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kaWZpZWQgRm93bGVyLU5vbGwtVm8gKEZOVikgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMgUHlfaGFzaF90CitmbnYoY29uc3Qgdm9pZCAqc3JjLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3JjOworICAgIFB5X3VoYXNoX3QgeDsKKyAgICBQeV9zc2l6ZV90IHJlbWFpbmRlciwgYmxvY2tzOworICAgIHVuaW9uIHsKKyAgICAgICAgUHlfdWhhc2hfdCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBieXRlc1tTSVpFT0ZfUFlfVUhBU0hfVF07CisgICAgfSBibG9jazsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKKyNlbmRpZgorICAgIHJlbWFpbmRlciA9IGxlbiAlIFNJWkVPRl9QWV9VSEFTSF9UOworICAgIGlmIChyZW1haW5kZXIgPT0gMCkgeworICAgICAgICAvKiBQcm9jZXNzIGF0IGxlYXN0IG9uZSBibG9jayBieXRlIGJ5IGJ5dGUgdG8gcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgKiBmb3Igc3RyaW5ncyB3aXRoIGNvbW1vbiBwcmVmaXhlcy4gKi8KKyAgICAgICAgcmVtYWluZGVyID0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIGJsb2NrcyA9IChsZW4gLSByZW1haW5kZXIpIC8gU0laRU9GX1BZX1VIQVNIX1Q7CisKKyAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5wcmVmaXg7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKKyAgICB3aGlsZSAoYmxvY2tzLS0pIHsKKyAgICAgICAgUFlfVUhBU0hfQ1BZKGJsb2NrLmJ5dGVzLCBwKTsKKyAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIGJsb2NrLnZhbHVlOworICAgICAgICBwICs9IFNJWkVPRl9QWV9VSEFTSF9UOworICAgIH0KKyAgICAvKiBhZGQgcmVtYWluZGVyICovCisgICAgZm9yICg7IHJlbWFpbmRlciA+IDA7IHJlbWFpbmRlci0tKQorICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpwKys7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgbGVuOworICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5zdWZmaXg7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgeCA9IC0yOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0ge2ZudiwgImZudiIsIDggKiBTSVpFT0ZfUFlfSEFTSF9ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICogU0laRU9GX1BZX0hBU0hfVH07CisKKyNlbmRpZiAvKiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0ZOViAqLworCisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX1NJUEhBU0gyNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyA8TUlUIExpY2Vuc2U+CisgQ29weXJpZ2h0IChjKSAyMDEzICBNYXJlayBNYWprb3dza2kgPG1hcmVrQHBvcGNvdW50Lm9yZz4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyBUSEUgU09GVFdBUkUuCisgPC9NSVQgTGljZW5zZT4KKworIE9yaWdpbmFsIGxvY2F0aW9uOgorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGNvZGUgZnJvbToKKyAgICBTYW11ZWwgTmV2ZXMgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUpCisgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICBKZWFuLVBoaWxpcHBlIEF1bWFzc29uIChodHRwczovLzEzMTAwMi5uZXQvc2lwaGFzaC9zaXBoYXNoMjQuYykKKworIE1vZGlmaWVkIGZvciBQeXRob24gYnkgQ2hyaXN0aWFuIEhlaW1lczoKKyAgICAtIEM4OSAvIE1TVkMgY29tcGF0aWJpbGl0eQorICAgIC0gUFlfVUlOVDY0X1QsIFBZX1VJTlQzMl9UIGFuZCBQWV9VSU5UOF9UCisgICAgLSBfcm90bDY0KCkgb24gV2luZG93cworICAgIC0gbGV0b2g2NCgpIGZhbGxiYWNrCisqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFlfVUlOVDhfVDsKKworLyogYnl0ZSBzd2FwIGxpdHRsZSBlbmRpYW4gdG8gaG9zdCBlbmRpYW4KKyAqIEVuZGlhbiBjb252ZXJzaW9uIG5vdCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgaGFzaCBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lCisgKiB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLiBJdCBpcyBhbHNvIHJlcXVpcmVkIHRvIGZvciBhIGdvb2QgZGlzcGVyc2lvbiBvZgorICogdGhlIGhhc2ggdmFsdWVzJyBsZWFzdCBzaWduaWZpY2FudCBiaXRzLgorICovCisjaWYgUFlfTElUVExFX0VORElBTgorIyAgZGVmaW5lIF9sZTY0dG9oKHgpICgoUFlfVUlOVDY0X1QpKHgpKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjICBkZWZpbmUgX2xlNjR0b2goeCkgT1NTd2FwTGl0dGxlVG9Ib3N0SW50NjQoeCkKKyNlbGlmIGRlZmluZWQoSEFWRV9MRVRPSDY0KQorIyAgZGVmaW5lIF9sZTY0dG9oKHgpIGxlNjR0b2goeCkKKyNlbHNlCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDU2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNDApICYgMHhmZjAwMDAwMDAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgOCkgICYgMHhmZjAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gOCkgICYgMHhmZjAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpID4+IDI0KSAmIDB4ZmYwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gNDApICYgMHhmZjAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKFBZX1VJTlQ2NF9UKSh4KSAgPj4gNTYpKQorI2VuZGlmCisKKworI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpICBfcm90bDY0KHgsIGIpCisjZWxzZQorIyAgZGVmaW5lIFJPVEFURSh4LCBiKSAoUFlfVUlOVDY0X1QpKCAoKHgpIDw8IChiKSkgfCAoICh4KSA+PiAoNjQgLSAoYikpKSApCisjZW5kaWYKKworI2RlZmluZSBIQUxGX1JPVU5EKGEsYixjLGQscyx0KSAgICAgICAgIFwKKyAgICBhICs9IGI7IGMgKz0gZDsgICAgICAgICAgICAgXAorICAgIGIgPSBST1RBVEUoYiwgcykgXiBhOyAgICAgICAgICAgXAorICAgIGQgPSBST1RBVEUoZCwgdCkgXiBjOyAgICAgICAgICAgXAorICAgIGEgPSBST1RBVEUoYSwgMzIpOworCisjZGVmaW5lIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2MykgICAgICAgXAorICAgIEhBTEZfUk9VTkQodjAsdjEsdjIsdjMsMTMsMTYpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYyLHYxLHYwLHYzLDE3LDIxKTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOworCisKK3N0YXRpYyBQeV9oYXNoX3QKK3NpcGhhc2gyNChjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3Qgc3JjX3N6KSB7CisgICAgUFlfVUlOVDY0X1QgazAgPSBfbGU2NHRvaChfUHlfSGFzaFNlY3JldC5zaXBoYXNoLmswKTsKKyAgICBQWV9VSU5UNjRfVCBrMSA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazEpOworICAgIFBZX1VJTlQ2NF9UIGIgPSAoUFlfVUlOVDY0X1Qpc3JjX3N6IDw8IDU2OworICAgIGNvbnN0IFBZX1VJTlQ2NF9UICppbiA9IChQWV9VSU5UNjRfVCopc3JjOworCisgICAgUFlfVUlOVDY0X1QgdjAgPSBrMCBeIDB4NzM2ZjZkNjU3MDczNjU3NVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MSA9IGsxIF4gMHg2NDZmNzI2MTZlNjQ2ZjZkVUxMOworICAgIFBZX1VJTlQ2NF9UIHYyID0gazAgXiAweDZjNzk2NzY1NmU2NTcyNjFVTEw7CisgICAgUFlfVUlOVDY0X1QgdjMgPSBrMSBeIDB4NzQ2NTY0NjI3OTc0NjU3M1VMTDsKKworICAgIFBZX1VJTlQ2NF9UIHQ7CisgICAgUFlfVUlOVDhfVCAqcHQ7CisgICAgUFlfVUlOVDhfVCAqbTsKKworICAgIHdoaWxlIChzcmNfc3ogPj0gOCkgeworICAgICAgICBQWV9VSU5UNjRfVCBtaSA9IF9sZTY0dG9oKCppbik7CisgICAgICAgIGluICs9IDE7CisgICAgICAgIHNyY19zeiAtPSA4OworICAgICAgICB2MyBePSBtaTsKKyAgICAgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICAgICAgdjAgXj0gbWk7CisgICAgfQorCisgICAgdCA9IDA7CisgICAgcHQgPSAoUFlfVUlOVDhfVCAqKSZ0OworICAgIG0gPSAoUFlfVUlOVDhfVCAqKWluOworICAgIHN3aXRjaCAoc3JjX3N6KSB7CisgICAgICAgIGNhc2UgNzogcHRbNl0gPSBtWzZdOworICAgICAgICBjYXNlIDY6IHB0WzVdID0gbVs1XTsKKyAgICAgICAgY2FzZSA1OiBwdFs0XSA9IG1bNF07CisgICAgICAgIGNhc2UgNDogKigoUFlfVUlOVDMyX1QqKSZwdFswXSkgPSAqKChQWV9VSU5UMzJfVCopJm1bMF0pOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBwdFsyXSA9IG1bMl07CisgICAgICAgIGNhc2UgMjogcHRbMV0gPSBtWzFdOworICAgICAgICBjYXNlIDE6IHB0WzBdID0gbVswXTsKKyAgICB9CisgICAgYiB8PSBfbGU2NHRvaCh0KTsKKworICAgIHYzIF49IGI7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICB2MCBePSBiOworICAgIHYyIF49IDB4ZmY7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworCisgICAgLyogbW9kaWZpZWQgKi8KKyAgICB0ID0gKHYwIF4gdjEpIF4gKHYyIF4gdjMpOworICAgIHJldHVybiAoUHlfaGFzaF90KXQ7Cit9CisKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHtzaXBoYXNoMjQsICJzaXBoYXNoMjQiLCA2NCwgMTI4fTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCA3NzJhYTUzLi42YmU3MWRlIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTYsMTEgKzYsMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDQVVUSU9OCiAKLUFsd2F5cyB1c2UgbWFsbG9jKCkgYW5kIGZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBIG51bWJlciBvZiB0aGVzZQotZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QgaGVsZCwgYW5kIGluCi1hIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncyBkZWJ1Z2dpbmcKLW9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwgdG8gYXZvaWQKLXRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KK0Fsd2F5cyB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBCitudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QKK2hlbGQsIGFuZCBpbiBhIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncworZGVidWdnaW5nIG9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwKK3RvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBIQVZFX0RMT1BFTgpAQCAtNjAsNyArNjAsNyBAQAogUHlJbnRlcnByZXRlclN0YXRlX05ldyh2b2lkKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlJbnRlcnByZXRlclN0YXRlKSk7CiAKICAgICBpZiAoaW50ZXJwICE9IE5VTEwpIHsKICAgICAgICAgSEVBRF9JTklUKCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZTogcmVtYWluaW5nIHRocmVhZHMiKTsKICAgICAqcCA9IGludGVycC0+bmV4dDsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUoaW50ZXJwKTsKKyAgICBQeU1lbV9SYXdGcmVlKGludGVycCk7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoaW50ZXJwX2hlYWQgPT0gTlVMTCAmJiBoZWFkX211dGV4ICE9IE5VTEwpIHsKICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKGhlYWRfbXV0ZXgpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqCiBuZXdfdGhyZWFkc3RhdGUoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAsIGludCBpbml0KQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlICopbWFsbG9jKHNpemVvZihQeVRocmVhZFN0YXRlKSk7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKIAogICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9PSBOVUxMKQogICAgICAgICBfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9IHRocmVhZHN0YXRlX2dldGZyYW1lOwpAQCAtMTgyLDcgKzE4Miw2IEBACiAgICAgICAgIHRzdGF0ZS0+cmVjdXJzaW9uX2NyaXRpY2FsID0gMDsKICAgICAgICAgdHN0YXRlLT50cmFjaW5nID0gMDsKICAgICAgICAgdHN0YXRlLT51c2VfdHJhY2luZyA9IDA7Ci0gICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5naWxzdGF0ZV9jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMDgsMTIgKzIwNywxNyBAQAogCiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX25lc3RpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CiAKICAgICAgICAgaWYgKGluaXQpCiAgICAgICAgICAgICBfUHlUaHJlYWRTdGF0ZV9Jbml0KHRzdGF0ZSk7CiAKICAgICAgICAgSEVBRF9MT0NLKCk7CisgICAgICAgIHRzdGF0ZS0+cHJldiA9IE5VTEw7CiAgICAgICAgIHRzdGF0ZS0+bmV4dCA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGU7CiAgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGU7CiAgICAgICAgIEhFQURfVU5MT0NLKCk7CiAgICAgfQpAQCAtMzE3LDYgKzMyMSwzMSBAQAogICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaW5kZXgsIFB5X05vbmUpOwogfQogCisvKiB1c2VkIGJ5IGltcG9ydC5jOlB5SW1wb3J0X0NsZWFudXAgKi8KK3ZvaWQKK19QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgaWYgKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKm0gPSBQeUxpc3RfR0VUX0lURU0oc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsIGkpOworICAgICAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKG0pKSB7CisgICAgICAgICAgICAgICAgLyogY2xlYW51cCB0aGUgc2F2ZWQgY29weSBvZiBtb2R1bGUgZGljdHMgKi8KKyAgICAgICAgICAgICAgICBQeU1vZHVsZURlZiAqbWQgPSBQeU1vZHVsZV9HZXREZWYobSk7CisgICAgICAgICAgICAgICAgaWYgKG1kKQorICAgICAgICAgICAgICAgICAgICBQeV9DTEVBUihtZC0+bV9iYXNlLm1fY29weSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogU2V0dGluZyBtb2R1bGVzX2J5X2luZGV4IHRvIE5VTEwgY291bGQgYmUgZGFuZ2Vyb3VzLCBzbyB3ZQorICAgICAgICAgICBjbGVhciB0aGUgbGlzdCBpbnN0ZWFkLiAqLworICAgICAgICBpZiAoUHlMaXN0X1NldFNsaWNlKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpOworICAgIH0KK30KKwogdm9pZAogUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CkBAIC0zNDksMzcgKzM3OCwyMyBAQAogdHN0YXRlX2RlbGV0ZV9jb21tb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKipwOwotICAgIFB5VGhyZWFkU3RhdGUgKnByZXZfcCA9IE5VTEw7CiAgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogTlVMTCB0c3RhdGUiKTsKICAgICBpbnRlcnAgPSB0c3RhdGUtPmludGVycDsKICAgICBpZiAoaW50ZXJwID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIGludGVycCIpOwogICAgIEhFQURfTE9DSygpOwotICAgIGZvciAocCA9ICZpbnRlcnAtPnRzdGF0ZV9oZWFkOyA7IHAgPSAmKCpwKS0+bmV4dCkgewotICAgICAgICBpZiAoKnAgPT0gTlVMTCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBpbnZhbGlkIHRzdGF0ZSIpOwotICAgICAgICBpZiAoKnAgPT0gdHN0YXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIFNhbml0eSBjaGVjay4gIFRoZXNlIHN0YXRlcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBpZgotICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nIGluCi0gICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQotICAgICAgICAgKiBpbiB0aHJlYWQuYyBmaW5kX2tleSgpLiAgKi8KLSAgICAgICAgaWYgKCpwID09IHByZXZfcCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBzbWFsbCBjaXJjdWxhciBsaXN0KCEpIgotICAgICAgICAgICAgICAgICIgYW5kIHRzdGF0ZSBub3QgZm91bmQuIik7Ci0gICAgICAgIHByZXZfcCA9ICpwOwotICAgICAgICBpZiAoKCpwKS0+bmV4dCA9PSBpbnRlcnAtPnRzdGF0ZV9oZWFkKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGNpcmN1bGFyIGxpc3QoISkgYW5kIgotICAgICAgICAgICAgICAgICIgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICB9Ci0gICAgKnAgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+cHJldikKKyAgICAgICAgdHN0YXRlLT5wcmV2LT5uZXh0ID0gdHN0YXRlLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CiAgICAgSEVBRF9VTkxPQ0soKTsKLSAgICBmcmVlKHRzdGF0ZSk7CisgICAgaWYgKHRzdGF0ZS0+b25fZGVsZXRlICE9IE5VTEwpIHsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUodHN0YXRlLT5vbl9kZWxldGVfZGF0YSk7CisgICAgfQorICAgIFB5TWVtX1Jhd0ZyZWUodHN0YXRlKTsKIH0KIAogCkBAIC00MTQsNiArNDI5LDQzIEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCisvKgorICogRGVsZXRlIGFsbCB0aHJlYWQgc3RhdGVzIGV4Y2VwdCB0aGUgb25lIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAqIE5vdGUgdGhhdCwgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRocmVhZCBzdGF0ZSwgaXQgKm11c3QqIGJlIHRoZSBvbmUKKyAqIHBhc3NlZCBhcyBhcmd1bWVudC4gIEFsc28sIHRoaXMgd29uJ3QgdG91Y2ggYW55IG90aGVyIGludGVycHJldGVycworICogdGhhbiB0aGUgY3VycmVudCBvbmUsIHNpbmNlIHdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIHN0YXRlIHNob3VsZAorICogYmUga2VwdCBpbiB0aG9zZSBvdGhlciBpbnRlcnByZXRlcmVzLgorICovCit2b2lkCitfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CisgICAgUHlUaHJlYWRTdGF0ZSAqcCwgKm5leHQsICpnYXJiYWdlOworICAgIEhFQURfTE9DSygpOworICAgIC8qIFJlbW92ZSBhbGwgdGhyZWFkIHN0YXRlcywgZXhjZXB0IHRzdGF0ZSwgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2YKKyAgICAgICB0aHJlYWQgc3RhdGVzLiAgVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgUHlUaHJlYWRTdGF0ZV9DbGVhcigpCisgICAgICAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiAqLworICAgIGdhcmJhZ2UgPSBpbnRlcnAtPnRzdGF0ZV9oZWFkOworICAgIGlmIChnYXJiYWdlID09IHRzdGF0ZSkKKyAgICAgICAgZ2FyYmFnZSA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlLT5wcmV2OworICAgIHRzdGF0ZS0+cHJldiA9IHRzdGF0ZS0+bmV4dCA9IE5VTEw7CisgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKKyAgICBIRUFEX1VOTE9DSygpOworICAgIC8qIENsZWFyIGFuZCBkZWFsbG9jYXRlIGFsbCBzdGFsZSB0aHJlYWQgc3RhdGVzLiAgRXZlbiBpZiB0aGlzCisgICAgICAgZXhlY3V0ZXMgUHl0aG9uIGNvZGUsIHdlIHNob3VsZCBiZSBzYWZlIHNpbmNlIGl0IGV4ZWN1dGVzCisgICAgICAgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLCBub3Qgb25lIG9mIHRoZSBzdGFsZSB0aHJlYWRzLiAqLworICAgIGZvciAocCA9IGdhcmJhZ2U7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAgICBQeVRocmVhZFN0YXRlX0NsZWFyKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOworICAgIH0KK30KKworCiBQeVRocmVhZFN0YXRlICoKIFB5VGhyZWFkU3RhdGVfR2V0KHZvaWQpCiB7CkBAIC02OTcsNiArNzQ5LDE1IEBACiAgICAgcmV0dXJuIChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKIH0KIAoraW50CitQeUdJTFN0YXRlX0NoZWNrKHZvaWQpCit7CisgICAgLyogY2FuJ3QgdXNlIFB5VGhyZWFkU3RhdGVfR2V0KCkgc2luY2UgaXQgd2lsbCBhc3NlcnQgdGhhdCBpdCBoYXMgdGhlIEdJTCAqLworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKKyAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOworICAgIHJldHVybiB0c3RhdGUgJiYgKHRzdGF0ZSA9PSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpKTsKK30KKwogUHlHSUxTdGF0ZV9TVEFURQogUHlHSUxTdGF0ZV9FbnN1cmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0cnRvZC5jIGIvUHl0aG9uL3B5c3RydG9kLmMKaW5kZXggNGFiOGYwOC4uYjhkZDkxOSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RydG9kLmMKKysrIGIvUHl0aG9uL3B5c3RydG9kLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogX1B5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCiB7CiAgICAgY2hhciAqZmFpbF9wb3M7Ci0gICAgZG91YmxlIHZhbCA9IC0xLjA7CisgICAgZG91YmxlIHZhbDsKICAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhOwogICAgIGNvbnN0IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgICAgc2l6ZV90IGRlY2ltYWxfcG9pbnRfbGVuOwpAQCAtOTIzLDcgKzkyMyw3IEBACiAKIHN0YXRpYyBjaGFyICoKIGZvcm1hdF9mbG9hdF9zaG9ydChkb3VibGUgZCwgY2hhciBmb3JtYXRfY29kZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgUHlfc3NpemVfdCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGludCBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgaW50IGFsd2F5c19hZGRfc2lnbiwgaW50IGFkZF9kb3RfMF9pZl9pbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgIGludCB1c2VfYWx0X2Zvcm1hdHRpbmcsIGNoYXIgKipmbG9hdF9zdHJpbmdzLCBpbnQgKnR5cGUpCiB7CkBAIC0xMDU5LDcgKzEwNTksNyBAQAogICAgIC8qIGlmIHVzaW5nIGFuIGV4cG9uZW50LCByZXNldCBkZWNpbWFsIHBvaW50IHBvc2l0aW9uIHRvIDEgYW5kIGFkanVzdAogICAgICAgIGV4cG9uZW50IGFjY29yZGluZ2x5LiovCiAgICAgaWYgKHVzZV9leHApIHsKLSAgICAgICAgZXhwID0gZGVjcHQgLSAxOworICAgICAgICBleHAgPSAoaW50KWRlY3B0IC0gMTsKICAgICAgICAgZGVjcHQgPSAxOwogICAgIH0KICAgICAvKiBlbnN1cmUgdmRpZ2l0c19zdGFydCA8IGRlY3B0IDw9IHZkaWdpdHNfZW5kLCBvciB2ZGlnaXRzX3N0YXJ0IDwKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXRob25ydW4uYyBiL1B5dGhvbi9weXRob25ydW4uYwppbmRleCBlMDJkYmUyLi4zYWRiYmQ3IDEwMDY0NAotLS0gYS9QeXRob24vcHl0aG9ucnVuLmMKKysrIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCkBAIC0zNSwxMiArMzUsNDIgQEAKICNkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGV4Y2VwdGhvb2spOworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobGFzdF90cmFjZWJhY2spOworX1B5X0lERU5USUZJRVIobGFzdF90eXBlKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdmFsdWUpOworX1B5X0lERU5USUZJRVIobmFtZSk7CitfUHlfSURFTlRJRklFUihwczEpOworX1B5X0lERU5USUZJRVIocHMyKTsKK19QeV9JREVOVElGSUVSKHN0ZGluKTsKK19QeV9JREVOVElGSUVSKHN0ZG91dCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9zdHJpbmcsICI8c3RyaW5nPiIpOworCisjaWZkZWYgUHlfUkVGX0RFQlVHCitzdGF0aWMKK3ZvaWQgX3ByaW50X3RvdGFsX3JlZnModm9pZCkgeworICAgIFB5T2JqZWN0ICp4b3B0aW9ucywgKnZhbHVlOworICAgIF9QeV9JREVOVElGSUVSKHNob3dyZWZjb3VudCk7CisKKyAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgaWYgKHhvcHRpb25zID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICB2YWx1ZSA9IF9QeURpY3RfR2V0SXRlbUlkKHhvcHRpb25zLCAmUHlJZF9zaG93cmVmY291bnQpOworICAgIGlmICh2YWx1ZSA9PSBQeV9UcnVlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiWyUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgcmVmcywgIgorICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkIGJsb2Nrc11cbiIsCisgICAgICAgICAgICAgICAgX1B5X0dldFJlZlRvdGFsKCksIF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSk7Cit9CisjZW5kaWYKKwogI2lmbmRlZiBQeV9SRUZfREVCVUcKICNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpCiAjZWxzZSAvKiBQeV9SRUZfREVCVUcgKi8KLSNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpIGZwcmludGYoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAiWyUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgcmVmc11cbiIsICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSkKKyNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpIF9wcmludF90b3RhbF9yZWZzKCkKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTU3LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIGluaXRzaXRlKHZvaWQpOwogc3RhdGljIGludCBpbml0c3RkaW8odm9pZCk7CiBzdGF0aWMgdm9pZCBmbHVzaF9pbyh2b2lkKTsKLXN0YXRpYyBQeU9iamVjdCAqcnVuX21vZChtb2RfdHksIGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKK3N0YXRpYyBQeU9iamVjdCAqcnVuX21vZChtb2RfdHksIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqLCBQeUFyZW5hICopOwogc3RhdGljIFB5T2JqZWN0ICpydW5fcHljX2ZpbGUoRklMRSAqLCBjb25zdCBjaGFyICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKik7CkBAIC02OCwxMSArOTgsMTQgQEAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bih2b2lkKTsKIHN0YXRpYyB2b2lkIGNhbGxfbGxfZXhpdGZ1bmNzKHZvaWQpOwogZXh0ZXJuIGludCBfUHlVbmljb2RlX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVN0cnVjdFNlcXVlbmNlX0luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfUHlVbmljb2RlX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUxvbmdfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFB5TG9uZ19GaW5pKHZvaWQpOwogZXh0ZXJuIGludCBfUHlGYXVsdGhhbmRsZXJfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeUZhdWx0aGFuZGxlcl9GaW5pKHZvaWQpOworZXh0ZXJuIHZvaWQgX1B5SGFzaF9GaW5pKHZvaWQpOworZXh0ZXJuIGludCBfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIGV4dGVybiB2b2lkIF9QeUdJTFN0YXRlX0luaXQoUHlJbnRlcnByZXRlclN0YXRlICosIFB5VGhyZWFkU3RhdGUgKik7CkBAIC05Myw2ICsxMjYsNyBAQAogaW50IFB5X05vVXNlclNpdGVEaXJlY3RvcnkgPSAwOyAvKiBmb3IgLXMgYW5kIHNpdGUucHkgKi8KIGludCBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnID0gMDsgLyogVW5idWZmZXJlZCBiaW5hcnkgc3Rke2luLG91dCxlcnJ9ICovCiBpbnQgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnID0gMDsgLyogZm9yIC1SIGFuZCBQWVRIT05IQVNIU0VFRCAqLworaW50IFB5X0lzb2xhdGVkRmxhZyA9IDA7IC8qIGZvciAtSSwgaXNvbGF0ZSBmcm9tIHVzZXIncyBlbnYgKi8KIAogUHlUaHJlYWRTdGF0ZSAqX1B5X0ZpbmFsaXppbmcgPSBOVUxMOwogCkBAIC0xMTgsNiArMTUyLDQ1IEBACiAgICAgcmV0dXJuIGluaXRpYWxpemVkOwogfQogCisvKiBIZWxwZXIgdG8gYWxsb3cgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZSBub3JtYWwKKyAqIG1lY2hhbmlzbSB0aGF0IGF0dGVtcHRzIHRvIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgSU8gZW5jb2RpbmcKKyAqLworCitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcgPSBOVUxMOworc3RhdGljIGNoYXIgKl9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisKK2ludAorUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIGlmIChQeV9Jc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgLyogVGhpcyBpcyB0b28gbGF0ZSB0byBoYXZlIGFueSBlZmZlY3QgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBDYW4ndCBjYWxsIFB5RXJyX05vTWVtb3J5KCkgb24gZXJyb3JzLCBhcyBQeXRob24gaGFzbid0IGJlZW4KKyAgICAgKiBpbml0aWFsaXNlZCB5ZXQuCisgICAgICoKKyAgICAgKiBIb3dldmVyLCB0aGUgcmF3IG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBpbml0aWFsaXNlZCBhcHByb3ByaWF0ZWx5CisgICAgICogYXMgQyBzdGF0aWMgdmFyaWFibGVzLCBzbyBfUHlNZW1fUmF3U3RyZHVwIGlzIE9LIGV2ZW4gdGhvdWdoCisgICAgICogUHlfSW5pdGlhbGl6ZSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LgorICAgICAqLworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IF9QeU1lbV9SYXdTdHJkdXAoZW5jb2RpbmcpOworICAgICAgICBpZiAoIV9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBfUHlNZW1fUmF3U3RyZHVwKGVycm9ycyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzKSB7CisgICAgICAgICAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogLyogR2xvYmFsIGluaXRpYWxpemF0aW9ucy4gIENhbiBiZSB1bmRvbmUgYnkgUHlfRmluYWxpemUoKS4gIERvbid0CiAgICBjYWxsIHRoaXMgdHdpY2Ugd2l0aG91dCBhbiBpbnRlcnZlbmluZyBQeV9GaW5hbGl6ZSgpIGNhbGwuICBXaGVuCiAgICBpbml0aWFsaXphdGlvbnMgZmFpbCwgYSBmYXRhbCBlcnJvciBpcyBpc3N1ZWQgYW5kIHRoZSBmdW5jdGlvbiBkb2VzCkBAIC0xNDYsNyArMjE5LDYgQEAKIHsKICAgICBjaGFyICpuYW1lX3V0ZjgsICpuYW1lX3N0cjsKICAgICBQeU9iamVjdCAqY29kZWMsICpuYW1lID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKIAogICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKICAgICBpZiAoIWNvZGVjKQpAQCAtMTYwLDcgKzIzMiw3IEBACiAgICAgbmFtZV91dGY4ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKICAgICBpZiAobmFtZV91dGY4ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgbmFtZV9zdHIgPSBzdHJkdXAobmFtZV91dGY4KTsKKyAgICBuYW1lX3N0ciA9IF9QeU1lbV9SYXdTdHJkdXAobmFtZV91dGY4KTsKICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTMxMyw3ICszODUsOCBAQAogICAgIGlmICghUHlCeXRlQXJyYXlfSW5pdCgpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGJ5dGVhcnJheSIpOwogCi0gICAgX1B5RmxvYXRfSW5pdCgpOworICAgIGlmICghX1B5RmxvYXRfSW5pdCgpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGZsb2F0Iik7CiAKICAgICBpbnRlcnAtPm1vZHVsZXMgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKGludGVycC0+bW9kdWxlcyA9PSBOVUxMKQpAQCAtMzIyLDYgKzM5NSw4IEBACiAgICAgLyogSW5pdCBVbmljb2RlIGltcGxlbWVudGF0aW9uOyByZWxpZXMgb24gdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCiAgICAgaWYgKF9QeVVuaWNvZGVfSW5pdCgpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSB1bmljb2RlIik7CisgICAgaWYgKF9QeVN0cnVjdFNlcXVlbmNlX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgc3RydWN0c2VxIik7CiAKICAgICBiaW1vZCA9IF9QeUJ1aWx0aW5fSW5pdCgpOwogICAgIGlmIChiaW1vZCA9PSBOVUxMKQpAQCAtMzUyLDcgKzQyNyw3IEBACiAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICBpZiAocHN0ZGVyciA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBzZXQgcHJlbGltaW5hcnkgc3RkZXJyIik7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTM4MCw2ICs0NTUsOSBAQAogICAgIGlmIChpbnN0YWxsX3NpZ3MpCiAgICAgICAgIGluaXRzaWdzKCk7IC8qIFNpZ25hbCBoYW5kbGluZyBzdHVmZiwgaW5jbHVkaW5nIGluaXRpbnRyKCkgKi8KIAorICAgIGlmIChfUHlUcmFjZU1hbGxvY19Jbml0KCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHRyYWNlbWFsbG9jIik7CisKICAgICBpbml0bWFpbihpbnRlcnApOyAvKiBNb2R1bGUgX19tYWluX18gKi8KICAgICBpZiAoaW5pdHN0ZGlvKCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKApAQCAtNDM3LDEwICs1MTUsOSBAQAogc3RhdGljIHZvaWQKIGZsdXNoX3N0ZF9maWxlcyh2b2lkKQogewotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgaWYgKGZvdXQgIT0gTlVMTCAmJiBmb3V0ICE9IFB5X05vbmUgJiYgIWZpbGVfaXNfY2xvc2VkKGZvdXQpKSB7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZm91dCwgJlB5SWRfZmx1c2gsICIiKTsKQEAgLTUwNCwxMSArNTgxLDEzIEBACiAgICAgX1B5X0ZpbmFsaXppbmcgPSB0c3RhdGU7CiAgICAgaW5pdGlhbGl6ZWQgPSAwOwogCi0gICAgLyogRmx1c2ggc3Rkb3V0K3N0ZGVyciAqLwotICAgIGZsdXNoX3N0ZF9maWxlcygpOwotCi0gICAgLyogRGlzYWJsZSBzaWduYWwgaGFuZGxpbmcgKi8KLSAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzKCk7CisgICAgLyogRGVzdHJveSB0aGUgc3RhdGUgb2YgYWxsIHRocmVhZHMgZXhjZXB0IG9mIHRoZSBjdXJyZW50IHRocmVhZDogaW4KKyAgICAgICBwcmFjdGljZSwgb25seSBkYWVtb24gdGhyZWFkcyBzaG91bGQgc3RpbGwgYmUgYWxpdmUuIENsZWFyIGZyYW1lcyBvZgorICAgICAgIG90aGVyIHRocmVhZHMgdG8gY2FsbCBvYmplY3RzIGRlc3RydWN0b3IuIERlc3RydWN0b3JzIHdpbGwgYmUgY2FsbGVkIGluCisgICAgICAgdGhlIGN1cnJlbnQgUHl0aG9uIHRocmVhZC4gU2luY2UgX1B5X0ZpbmFsaXppbmcgaGFzIGJlZW4gc2V0LCBubyBvdGhlcgorICAgICAgIFB5dGhvbiB0aHJlYWRzIGNhbiBsb2NrIHRoZSBHSUwgYXQgdGhpcyBwb2ludCAoaWYgdGhleSB0cnksIHRoZXkgd2lsbAorICAgICAgIGV4aXQgaW1tZWRpYXRlbHkpLiAqLworICAgIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdCh0c3RhdGUpOwogCiAgICAgLyogQ29sbGVjdCBnYXJiYWdlLiAgVGhpcyBtYXkgY2FsbCBmaW5hbGl6ZXJzOyBpdCdzIG5pY2UgdG8gY2FsbCB0aGVzZQogICAgICAqIGJlZm9yZSBhbGwgbW9kdWxlcyBhcmUgZGVzdHJveWVkLgpAQCAtNTIzLDYgKzYwMiw3IEBACiAgICAgICogWFhYIEkgaGF2ZW4ndCBzZWVuIGEgcmVhbC1saWZlIHJlcG9ydCBvZiBlaXRoZXIgb2YgdGhlc2UuCiAgICAgICovCiAgICAgUHlHQ19Db2xsZWN0KCk7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICAvKiBXaXRoIENPVU5UX0FMTE9DUywgaXQgaGVscHMgdG8gcnVuIEdDIG11bHRpcGxlIHRpbWVzOgogICAgICAgIGVhY2ggY29sbGVjdGlvbiBtaWdodCByZWxlYXNlIHNvbWUgdHlwZXMgZnJvbSB0aGUgdHlwZQpAQCAtNTMwLDkgKzYxMCwxMiBAQAogICAgIHdoaWxlIChQeUdDX0NvbGxlY3QoKSA+IDApCiAgICAgICAgIC8qIG5vdGhpbmcgKi87CiAjZW5kaWYKLSAgICAvKiBXZSBydW4gdGhpcyB3aGlsZSBtb3N0IGludGVycHJldGVyIHN0YXRlIGlzIHN0aWxsIGFsaXZlLCBzbyB0aGF0Ci0gICAgICAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHByaW50ZWQgb3V0ICovCi0gICAgX1B5R0NfRmluaSgpOworCisgICAgLyogRmx1c2ggc3Rkb3V0K3N0ZGVyciAqLworICAgIGZsdXNoX3N0ZF9maWxlcygpOworCisgICAgLyogRGlzYWJsZSBzaWduYWwgaGFuZGxpbmcgKi8KKyAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzKCk7CiAKICAgICAvKiBEZXN0cm95IGFsbCBtb2R1bGVzICovCiAgICAgUHlJbXBvcnRfQ2xlYW51cCgpOwpAQCAtNTcyLDYgKzY1NSw4IEBACiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgZHVtcF9jb3VudHMoc3Rkb3V0KTsKICNlbmRpZgorICAgIC8qIGR1bXAgaGFzaCBzdGF0cyAqLworICAgIF9QeUhhc2hfRmluaSgpOwogCiAgICAgUFJJTlRfVE9UQUxfUkVGUygpOwogCkBAIC01OTYsMTEgKzY4MSw2IEBACiAKICAgICBfUHlFeGNfRmluaSgpOwogCi0gICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfRmluaSgpOwotI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCi0KICAgICAvKiBTdW5kcnkgZmluYWxpemVycyAqLwogICAgIFB5TWV0aG9kX0ZpbmkoKTsKICAgICBQeUZyYW1lX0ZpbmkoKTsKQEAgLTYxNCwxNyArNjk0LDE1IEBACiAgICAgUHlGbG9hdF9GaW5pKCk7CiAgICAgUHlEaWN0X0ZpbmkoKTsKICAgICBQeVNsaWNlX0ZpbmkoKTsKKyAgICBfUHlHQ19GaW5pKCk7CisgICAgX1B5UmFuZG9tX0ZpbmkoKTsKIAogICAgIC8qIENsZWFudXAgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiAqLwogICAgIF9QeVVuaWNvZGVfRmluaSgpOwogCi0gICAgLyogRGVsZXRlIGN1cnJlbnQgdGhyZWFkLiBBZnRlciB0aGlzLCBtYW55IEMgQVBJIGNhbGxzIGJlY29tZSBjcmFzaHkuICovCi0gICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOwotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUoaW50ZXJwKTsKLQogICAgIC8qIHJlc2V0IGZpbGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcgKi8KICAgICBpZiAoIVB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgJiYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZykgewotICAgICAgICBmcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CiAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOwogICAgIH0KIApAQCAtNjM2LDYgKzcxNCwxNSBAQAogCiAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycygmX1B5UGFyc2VyX0dyYW1tYXIpOwogCisgICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgX1B5R0lMU3RhdGVfRmluaSgpOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKKyAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KKyAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7CisgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOworCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIERpc3BsYXkgYWRkcmVzc2VzICgmIHJlZmNudHMpIG9mIGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlLgogICAgICAqIEFuIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcmVwciBvZiB0aGUgb2JqZWN0LCBwcmludGVkCkBAIC03MTgsNyArODA1LDcgQEAKICAgICAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICAgICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgcHN0ZGVycik7CiAgICAgICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTc3Myw2ICs4NjAsOSBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIGlzIG5vdCBjdXJyZW50Iik7CiAgICAgaWYgKHRzdGF0ZS0+ZnJhbWUgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBzdGlsbCBoYXMgYSBmcmFtZSIpOworCisgICAgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKCk7CisKICAgICBpZiAodHN0YXRlICE9IGludGVycC0+dHN0YXRlX2hlYWQgfHwgdHN0YXRlLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiBub3QgdGhlIGxhc3QgdGhyZWFkIik7CiAKQEAgLTgwMiw3ICs4OTIsNyBAQAogfQogCiBzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGVudl9ob21lW1BBVEhfTUFYKzFdOworc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbTUFYUEFUSExFTisxXTsKIAogdm9pZAogUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtODMyLDcgKzkyMiw3IEBACiBzdGF0aWMgdm9pZAogaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKQEAgLTg1Myw3ICs5NDMsOCBAQAogICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKICAgICAgKiBwcm9jZXNzLgogICAgICAqLwotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpID09IE5VTEwpIHsKKyAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOworICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwogICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKQEAgLTkwMyw2ICs5OTQsNyBAQAogICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOwogICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgICAgICBleGl0KDEpOwpAQCAtOTI1LDcgKzEwMTcsNiBAQAogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CiAKICAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CkBAIC0xMDM1LDcgKzExMjYsNyBAQAogICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwLCBmZDsKICAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzOworICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7CiAKICAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKICAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwpAQCAtMTA2NywxNCArMTE1OCwyOCBAQAogICAgIH0KICAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKLSAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwotICAgIGVycm9ycyA9IE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIGVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICAgICAgZXJyb3JzID0gc3RyY2hyKGVuY29kaW5nLCAnOicpOwotICAgICAgICBpZiAoZXJyb3JzKSB7Ci0gICAgICAgICAgICAqZXJyb3JzID0gJ1wwJzsKLSAgICAgICAgICAgIGVycm9ycysrOworICAgIGVuY29kaW5nID0gX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2Rpbmc7CisgICAgZXJyb3JzID0gX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzOworICAgIGlmICghZW5jb2RpbmcgfHwgIWVycm9ycykgeworICAgICAgICBweXRob25pb2VuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7CisgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nKSB7CisgICAgICAgICAgICBjaGFyICplcnI7CisgICAgICAgICAgICBweXRob25pb2VuY29kaW5nID0gX1B5TWVtX1N0cmR1cChweXRob25pb2VuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBzdHJjaHIocHl0aG9uaW9lbmNvZGluZywgJzonKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAqZXJyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgICAgICBpZiAoKmVyciAmJiAhZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnB5dGhvbmlvZW5jb2RpbmcgJiYgIWVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBweXRob25pb2VuY29kaW5nOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDk0LDcgKzExOTksNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGluX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkaW4iLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRpbiwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogICAgIC8qIFNldCBzeXMuc3Rkb3V0ICovCkBAIC0xMTA5LDcgKzEyMTQsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZG91dF9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwpAQCAtMTEyOSwxOCArMTIzNCwyNCBAQAogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAjZW5kaWYKIApAQCAtMTE0OSw4ICsxMjYwLDE2IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KIAotICAgIGlmIChlbmNvZGluZykKLSAgICAgICAgZnJlZShlbmNvZGluZyk7CisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwogICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIFB5X1hERUNSRUYoaW9tb2QpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMTc1LDM2ICsxMjk0LDQ3IEBACiB9CiAKIGludAotUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnY7CisgICAgaW50IHJldCwgZXJyOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbF9mbGFnczsKIAorICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBmbGFncyA9ICZsb2NhbF9mbGFnczsKICAgICAgICAgbG9jYWxfZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMSIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPj4+ICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMSwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczIiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMik7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMiIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KKyAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwogICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7Ci0gICAgICAgIGlmIChyZXQgPT0gRV9FT0YpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHJldCA9PSBFX0VPRikgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgIGlmIChyZXQgPT0gRV9OT01FTSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAqLwogICAgIH0KKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIC8qIGNvbXB1dGUgcGFyc2VyIGZsYWdzIGJhc2VkIG9uIGNvbXBpbGVyIGZsYWdzICovCkBAIC0xMjMyLDE4ICsxMzYyLDI1IEBACiAjZW5kaWYKIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKK1B5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKncsICpvZW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMLCAqbW9kX25hbWU7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUFyZW5hICphcmVuYTsKICAgICBjaGFyICpwczEgPSAiIiwgKnBzMiA9ICIiLCAqZW5jID0gTlVMTDsKICAgICBpbnQgZXJyY29kZSA9IDA7CiAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworICAgIF9QeV9JREVOVElGSUVSKF9fbWFpbl9fKTsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoZnAgPT0gc3RkaW4pIHsKICAgICAgICAgLyogRmV0Y2ggZW5jb2RpbmcgZnJvbSBzeXMuc3RkaW4gaWYgcG9zc2libGUuICovCi0gICAgICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7CisgICAgICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOwogICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIG9lbmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgICAgIGlmIChvZW5jKQpAQCAtMTI1Miw3ICsxMzg5LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCkBAIC0xMjY1LDcgKzE0MDIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHcgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHcgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodyAhPSBOVUxMKSB7CiAgICAgICAgIHcgPSBQeU9iamVjdF9TdHIodyk7CiAgICAgICAgIGlmICh3ID09IE5VTEwpCkBAIC0xMjg1LDkgKzE0MjIsOSBAQAogICAgICAgICBQeV9YREVDUkVGKG9lbmMpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NpbmdsZV9pbnB1dCwgcHMxLCBwczIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsICZlcnJjb2RlLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodyk7CiAgICAgUHlfWERFQ1JFRihvZW5jKTsKQEAgLTEzMDAsNyArMTQzNyw3IEBACiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG1vZF9uYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzMTcsNiArMTQ1NCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK1B5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IHJlczsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKIC8qIENoZWNrIHdoZXRoZXIgYSBmaWxlIG1heWJlIGEgcHljIGZpbGU6IExvb2sgYXQgdGhlIGV4dGVuc2lvbiwKICAgIHRoZSBmaWxlIHR5cGUsIGFuZCwgaWYgd2UgbWF5IGNsb3NlIGl0LCBhdCB0aGUgZmlyc3QgZmV3IGJ5dGVzLiAqLwogCkBAIC0xMzU3LDggKzE1MTEsOCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQKLXN0YXRpYyBzZXRfbWFpbl9sb2FkZXIoUHlPYmplY3QgKmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpsb2FkZXJfbmFtZSkKK3N0YXRpYyBpbnQKK3NldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKQEAgLTE0MjUsNyArMTU3OSw3IEBACiAgICAgICAgIC8qIFRyeSB0byBydW4gYSBweWMgZmlsZS4gRmlyc3QsIHJlLW9wZW4gaW4gYmluYXJ5ICovCiAgICAgICAgIGlmIChjbG9zZWl0KQogICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgaWYgKChweWNfZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKKyAgICAgICAgaWYgKChweWNfZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInB5dGhvbjogQ2FuJ3QgcmVvcGVuIC5weWMgZmlsZVxuIik7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KQEAgLTE0ODQsOCArMTYzOCw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXBhcnNlX3N5bnRheF9lcnJvcihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCAqKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKipmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIGNvbnN0IGNoYXIgKip0ZXh0KQorcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgUHlPYmplY3QgKipmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIFB5T2JqZWN0ICoqdGV4dCkKIHsKICAgICBsb25nIGhvbGQ7CiAgICAgUHlPYmplY3QgKnY7CkBAIC0xNDk2LDYgKzE2NTAsNyBAQAogICAgIF9QeV9JREVOVElGSUVSKHRleHQpOwogCiAgICAgKm1lc3NhZ2UgPSBOVUxMOworICAgICpmaWxlbmFtZSA9IE5VTEw7CiAKICAgICAvKiBuZXcgc3R5bGUgZXJyb3JzLiAgYGVycicgaXMgYW4gaW5zdGFuY2UgKi8KICAgICAqbWVzc2FnZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9tc2cpOwpAQCAtMTUwNywxMyArMTY2MiwxMyBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgaWYgKHYgPT0gUHlfTm9uZSkgewogICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICpmaWxlbmFtZSA9IE5VTEw7CisgICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX3N0cmluZyk7CisgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqZmlsZW5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKmZpbGVuYW1lKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICAqZmlsZW5hbWUgPSB2OwogICAgIH0KIAogICAgIHYgPSBfUHlPYmplY3RfR2V0QXR0cklkKGVyciwgJlB5SWRfbGluZW5vKTsKQEAgLTE1NDcsMTUgKzE3MDIsMTMgQEAKICAgICAgICAgKnRleHQgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgKnRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKnRleHQpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICp0ZXh0ID0gdjsKICAgICB9CiAgICAgcmV0dXJuIDE7CiAKIGZpbmFsbHk6CiAgICAgUHlfWERFQ1JFRigqbWVzc2FnZSk7CisgICAgUHlfWERFQ1JFRigqZmlsZW5hbWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTY2LDkgKzE3MTksMTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKnRleHQpCitwcmludF9lcnJvcl90ZXh0KFB5T2JqZWN0ICpmLCBpbnQgb2Zmc2V0LCBQeU9iamVjdCAqdGV4dF9vYmopCiB7CisgICAgY2hhciAqdGV4dDsKICAgICBjaGFyICpubDsKKworICAgIHRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHRleHRfb2JqKTsKKyAgICBpZiAodGV4dCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAob2Zmc2V0ID49IDApIHsKICAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID09IHN0cmxlbih0ZXh0KSAmJiB0ZXh0W29mZnNldCAtIDFdID09ICdcbicpCiAgICAgICAgICAgICBvZmZzZXQtLTsKQEAgLTE2MjcsNyArMTc4Niw3IEBACiAgICAgaWYgKFB5TG9uZ19DaGVjayh2YWx1ZSkpCiAgICAgICAgIGV4aXRjb2RlID0gKGludClQeUxvbmdfQXNMb25nKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoc3lzX3N0ZGVyciAhPSBOVUxMICYmIHN5c19zdGRlcnIgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHZhbHVlLCBzeXNfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTY3MCwxMSArMTgyOSwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgLyogTm93IHdlIGtub3cgdiAhPSBOVUxMIHRvbyAqLwogICAgIGlmIChzZXRfc3lzX2xhc3RfdmFycykgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHlwZSIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF92YWx1ZSIsIHYpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHJhY2ViYWNrIiwgdGIpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF90eXBlLCBleGNlcHRpb24pOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF92YWx1ZSwgdik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3RyYWNlYmFjaywgdGIpOwogICAgIH0KLSAgICBob29rID0gUHlTeXNfR2V0T2JqZWN0KCJleGNlcHRob29rIik7CisgICAgaG9vayA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9leGNlcHRob29rKTsKICAgICBpZiAoaG9vaykgewogICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfUGFjaygzLCBleGNlcHRpb24sIHYsIHRiKTsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGhvb2ssIGFyZ3MpOwpAQCAtMTczOSwyNyArMTg5OCwzMCBAQAogICAgIGlmIChlcnIgPT0gMCAmJgogICAgICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHZhbHVlLCAmUHlJZF9wcmludF9maWxlX2FuZF9saW5lKSkKICAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICptZXNzYWdlOwotICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgKnRleHQ7CisgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlLCAqZmlsZW5hbWUsICp0ZXh0OwogICAgICAgICBpbnQgbGluZW5vLCBvZmZzZXQ7CiAgICAgICAgIGlmICghcGFyc2Vfc3ludGF4X2Vycm9yKHZhbHVlLCAmbWVzc2FnZSwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZW5vLCAmb2Zmc2V0LCAmdGV4dCkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzEwXTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiICBGaWxlIFwiIiwgZik7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjxzdHJpbmc+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGZpbGVuYW1lLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXCIsIGxpbmUgIiwgZik7Ci0gICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGxpbmVubyk7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoYnVmLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKTsKLSAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcHJpbnRfZXJyb3JfdGV4dChmLCBvZmZzZXQsIHRleHQpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpbmU7CisKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IG1lc3NhZ2U7CisKKyAgICAgICAgICAgIGxpbmUgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiICBGaWxlIFwiJVVcIiwgbGluZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChsaW5lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QobGluZSwgZiwgUHlfUFJJTlRfUkFXKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludF9lcnJvcl90ZXh0KGYsIG9mZnNldCwgdGV4dCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRleHQpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvKiBDYW4ndCBiZSBib3RoZXJlZCB0byBjaGVjayBhbGwgdGhvc2UKICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygpIGNhbGxzICovCiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE3ODgsMTAgKzE5NTAsOSBAQAogICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICBpZiAobW9kc3RyICYmIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKTsKICAgICAgICAgICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlTmFtZSk7CkBAIC0xODg0LDcgKzIwNDUsNyBAQAogUHlFcnJfRGlzcGxheShQeU9iamVjdCAqZXhjZXB0aW9uLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YikKIHsKICAgICBQeU9iamVjdCAqc2VlbjsKLSAgICBQeU9iamVjdCAqZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkKICAgICAgICAgJiYgdGIgIT0gTlVMTCAmJiBQeVRyYWNlQmFja19DaGVjayh0YikpIHsKICAgICAgICAgLyogUHV0IHRoZSB0cmFjZWJhY2sgb24gdGhlIGV4Y2VwdGlvbiwgb3RoZXJ3aXNlIGl0IHdvbid0IGdldApAQCAtMTkyMCwzNyArMjA4MSw1NCBAQAogewogICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsICI8c3RyaW5nPiIsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCAhPSBOVUxMKQotICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgIjxzdHJpbmc+IiwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOworICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiByZXQ7CiB9CiAKIFB5T2JqZWN0ICoKLVB5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywKK1B5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsCiAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzLCBpbnQgY2xvc2VpdCwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqcmV0OworICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgIGlmIChhcmVuYSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeUFyZW5hICphcmVuYSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGUoZnAsIGZpbGVuYW1lLCBOVUxMLCBzdGFydCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCwgYXJlbmEpOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKGFyZW5hID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgTlVMTCwgc3RhcnQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIE5VTEwsIGFyZW5hKTsKICAgICBpZiAoY2xvc2VpdCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKLSAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmV0ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7Ci0gICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKKworZXhpdDoKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICBpZiAoYXJlbmEgIT0gTlVMTCkKKyAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xOTU5LDEyICsyMTM3LDExIEBACiB7CiAgICAgUHlPYmplY3QgKmYsICpyOwogICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24gKi8KICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKIAotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHIgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgIGlmIChyKQpAQCAtMTk3Miw3ICsyMTQ5LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgaWYgKHIpCkBAIC0xOTg1LDEyICsyMTYyLDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ydW5fbW9kKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKLSAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorcnVuX21vZChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAorICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeU9iamVjdCAqdjsKLSAgICBjbyA9IFB5QVNUX0NvbXBpbGUobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiAgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgbG9jYWxzKTsKQEAgLTIwMzIsOCArMjIwOSw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKK1B5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgbW9kX3R5IG1vZDsKQEAgLTIwNDEsNyArMjIxOCw3IEBACiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIwNTEsMTEgKzIyMjgsMjQgQEAKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgY28gPSBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWNvOwogfQogCitQeU9iamVjdCAqCitQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKmNvOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbyA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBvcHRpbWl6ZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gY287Cit9CisKIC8qIEZvciB1c2UgaW4gUHlfTElNSVRFRF9BUEkgKi8KICN1bmRlZiBQeV9Db21waWxlU3RyaW5nCiBQeU9iamVjdCAqCkBAIC0yMDY1LDQ2ICsyMjU1LDYyIEBACiB9CiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCitQeV9TeW10YWJsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgZmxhZ3M7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZsYWdzLmNmX2ZsYWdzID0gMDsKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCAwKTsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgMCk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gc3Q7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0KQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHN0OworfQorCiAvKiBQcmVmZXJyZWQgYWNjZXNzIHRvIHBhcnNlciBpcyB0aHJvdWdoIEFTVC4gKi8KIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbVN0cmluZyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgocywgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBsb2NhbGZsYWdzLmNmX2ZsYWdzID0gMDsKICAgICAgICAgZmxhZ3MgPSAmbG9jYWxmbGFnczsKICAgICB9CiAgICAgaWYgKG4pIHsKICAgICAgICAgZmxhZ3MtPmNmX2ZsYWdzIHw9IGlmbGFncyAmIFB5Q0ZfTUFTSzsKLSAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOwogICAgICAgICBQeU5vZGVfRnJlZShuKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMTE2LDI2ICsyMzIyLDQwIEBACiB9CiAKIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyKiBlbmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAotICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCitQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgbW9kX3R5IG1vZDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCittb2RfdHkKK1B5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKIHsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbGZsYWdzOwogICAgIHBlcnJkZXRhaWwgZXJyOwogICAgIGludCBpZmxhZ3MgPSBQQVJTRVJfRkxBR1MoZmxhZ3MpOwogCi0gICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOworICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxNDgsNiArMjM2OCwyMyBAQAogICAgIHJldHVybiBtb2Q7CiB9CiAKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQoreworICAgIG1vZF90eSBtb2Q7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywgc3RhcnQsIHBzMSwgcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBlcnJjb2RlLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCiAvKiBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBwYXJzZWZpbGUgLS0gcmV0dXJuIG5vZGUgb3Igc2V0IGV4Y2VwdGlvbiAqLwogCiBub2RlICoKQEAgLTI0NzQsNiArMjcxMSw5IEBACiAgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0lHTik7CiAjZW5kaWYKICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzKCk7IC8qIE1heSBpbXBseSBpbml0c2lnbmFsKCkgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbXBvcnQgc2lnbmFsIik7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9yYW5kb20uYyBiL1B5dGhvbi9yYW5kb20uYwppbmRleCAzMzdiZTg2Li5kZThlOWU3IDEwMDY0NAotLS0gYS9QeXRob24vcmFuZG9tLmMKKysrIGIvUHl0aG9uL3JhbmRvbS5jCkBAIC0xMiwxMyArMTIsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi10eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ1JZUFRBQ1FVSVJFQ09OVEVYVEEpKEhDUllQVFBST1YgKnBoUHJvdixcCi0gICAgICAgICAgICAgIExQQ1NUUiBwc3pDb250YWluZXIsIExQQ1NUUiBwc3pQcm92aWRlciwgRFdPUkQgZHdQcm92VHlwZSxcCi0gICAgICAgICAgICAgIERXT1JEIGR3RmxhZ3MgKTsKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEdFTlJBTkRPTSkoSENSWVBUUFJPViBoUHJvdiwgRFdPUkQgZHdMZW4sXAotICAgICAgICAgICAgICBCWVRFICpwYkJ1ZmZlciApOwotCi1zdGF0aWMgQ1JZUFRHRU5SQU5ET00gcENyeXB0R2VuUmFuZG9tID0gTlVMTDsKIC8qIFRoaXMgaGFuZGxlIGlzIG5ldmVyIGV4cGxpY2l0bHkgcmVsZWFzZWQuIEluc3RlYWQsIHRoZSBvcGVyYXRpbmcKICAgIHN5c3RlbSB3aWxsIHJlbGVhc2UgaXQgd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLiAqLwogc3RhdGljIEhDUllQVFBST1YgaENyeXB0UHJvdiA9IDA7CkBAIC0yNiwyOSArMTksOSBAQAogc3RhdGljIGludAogd2luMzJfdXJhbmRvbV9pbml0KGludCByYWlzZSkKIHsKLSAgICBISU5TVEFOQ0UgaEFkdkFQSTMyID0gTlVMTDsKLSAgICBDUllQVEFDUVVJUkVDT05URVhUQSBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IE5VTEw7Ci0KLSAgICAvKiBPYnRhaW4gaGFuZGxlIHRvIHRoZSBETEwgY29udGFpbmluZyBDcnlwdG9BUEkuIFRoaXMgc2hvdWxkIG5vdCBmYWlsLiAqLwotICAgIGhBZHZBUEkzMiA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7Ci0gICAgaWYoaEFkdkFQSTMyID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBPYnRhaW4gcG9pbnRlcnMgdG8gdGhlIENyeXB0b0FQSSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBmYWlsIG9uIHNvbWUgZWFybHkKLSAgICAgICB2ZXJzaW9ucyBvZiBXaW45NS4gKi8KLSAgICBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IChDUllQVEFDUVVJUkVDT05URVhUQSlHZXRQcm9jQWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoQWR2QVBJMzIsICJDcnlwdEFjcXVpcmVDb250ZXh0QSIpOwotICAgIGlmIChwQ3J5cHRBY3F1aXJlQ29udGV4dCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgcENyeXB0R2VuUmFuZG9tID0gKENSWVBUR0VOUkFORE9NKUdldFByb2NBZGRyZXNzKGhBZHZBUEkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNyeXB0R2VuUmFuZG9tIik7Ci0gICAgaWYgKHBDcnlwdEdlblJhbmRvbSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCiAgICAgLyogQWNxdWlyZSBjb250ZXh0ICovCi0gICAgaWYgKCEgcENyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9SU0FfRlVMTCwgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpCisgICAgaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoQ3J5cHRQcm92LCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIHJldHVybiAwOwpAQCAtNzcsNyArNTAsNyBAQAogICAgIHdoaWxlIChzaXplID4gMCkKICAgICB7CiAgICAgICAgIGNodW5rID0gc2l6ZSA+IElOVF9NQVggPyBJTlRfTUFYIDogc2l6ZTsKLSAgICAgICAgaWYgKCFwQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgY2h1bmssIGJ1ZmZlcikpCisgICAgICAgIGlmICghQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgKERXT1JEKWNodW5rLCBidWZmZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBDcnlwdEdlblJhbmRvbSgpIGZhaWxlZCAqLwogICAgICAgICAgICAgaWYgKHJhaXNlKQpAQCAtMTE3LDE4ICs5MCwxOSBAQAogCiAKICNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChfX1ZNUykKK3N0YXRpYyBpbnQgdXJhbmRvbV9mZCA9IC0xOwogCiAvKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCiAgICBDYWxsIFB5X0ZhdGFsRXJyb3IoKSBvbiBlcnJvci4gKi8KIHN0YXRpYyB2b2lkCi1kZXZfdXJhbmRvbV9ub3JhaXNlKGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQorZGV2X3VyYW5kb21fbm9yYWlzZSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpbnQgZmQ7CiAgICAgUHlfc3NpemVfdCBuOwogCiAgICAgYXNzZXJ0ICgwIDwgc2l6ZSk7CiAKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICBmZCA9IF9QeV9vcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIG9wZW4gL2Rldi91cmFuZG9tIik7CiAKQEAgLTE2MCwxOCArMTM0LDMwIEBACiAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoZmQgPCAwKQotICAgIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAotICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgIGlmICh1cmFuZG9tX2ZkID49IDApCisgICAgICAgIGZkID0gdXJhbmRvbV9mZDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBmZCA9IF9QeV9vcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5YSU8gfHwKKyAgICAgICAgICAgICAgICBlcnJubyA9PSBFTk9ERVYgfHwgZXJybm8gPT0gRUFDQ0VTKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi91cmFuZG9tIChvciBlcXVpdmFsZW50KSBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkgeworICAgICAgICAgICAgLyogdXJhbmRvbV9mZCB3YXMgaW5pdGlhbGl6ZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgd2Ugd2VyZQorICAgICAgICAgICAgICAgbm90IGhvbGRpbmcgdGhlIEdJTCwga2VlcCBpdC4gKi8KKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIGZkID0gdXJhbmRvbV9mZDsKKyAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHVyYW5kb21fZmQgPSBmZDsKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTUsMTIgKzE4MSwyMCBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlYWQgJXppIGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKLSAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQKK2Rldl91cmFuZG9tX2Nsb3NlKHZvaWQpCit7CisgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkgeworICAgICAgICBjbG9zZSh1cmFuZG9tX2ZkKTsKKyAgICAgICAgdXJhbmRvbV9mZCA9IC0xOworICAgIH0KK30KKwogI2VuZGlmIC8qICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKSAqLwogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGEgbGluZWFyIGNvbmdydWVudApAQCAtMjU1LDggKzI0OSw5IEBACiBfUHlSYW5kb21fSW5pdCh2b2lkKQogewogICAgIGNoYXIgKmVudjsKLSAgICB2b2lkICpzZWNyZXQgPSAmX1B5X0hhc2hTZWNyZXQ7CisgICAgdW5zaWduZWQgY2hhciAqc2VjcmV0ID0gKHVuc2lnbmVkIGNoYXIgKikmX1B5X0hhc2hTZWNyZXQudWM7CiAgICAgUHlfc3NpemVfdCBzZWNyZXRfc2l6ZSA9IHNpemVvZihfUHlfSGFzaFNlY3JldF90KTsKKyAgICBhc3NlcnQoc2VjcmV0X3NpemUgPT0gc2l6ZW9mKF9QeV9IYXNoU2VjcmV0LnVjKSk7CiAKICAgICBpZiAoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NCwxOCArMjc5LDI2IEBACiAgICAgICAgICAgICBtZW1zZXQoc2VjcmV0LCAwLCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCAodW5zaWduZWQgY2hhciopc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CisgICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCBzZWNyZXQsIHNlY3JldF9zaXplKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICh2b2lkKXdpbjMyX3VyYW5kb20oKHVuc2lnbmVkIGNoYXIgKilzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKKyAgICAgICAgKHZvaWQpd2luMzJfdXJhbmRvbShzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKICNlbHNlIC8qICNpZmRlZiBNU19XSU5ET1dTICovCiAjIGlmZGVmIF9fVk1TCi0gICAgICAgIHZtc191cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7CisgICAgICAgIHZtc191cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOwogIyBlbHNlCi0gICAgICAgIGRldl91cmFuZG9tX25vcmFpc2UoKGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOworICAgICAgICBkZXZfdXJhbmRvbV9ub3JhaXNlKHNlY3JldCwgc2VjcmV0X3NpemUpOwogIyBlbmRpZgogI2VuZGlmCiAgICAgfQogfQorCit2b2lkCitfUHlSYW5kb21fRmluaSh2b2lkKQoreworI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKQorICAgIGRldl91cmFuZG9tX2Nsb3NlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJkdXAuYyBiL1B5dGhvbi9zdHJkdXAuYwppbmRleCAyMDE4N2UwLi43NjlkM2RiIDEwMDY0NAotLS0gYS9QeXRob24vc3RyZHVwLmMKKysrIGIvUHl0aG9uL3N0cmR1cC5jCkBAIC02LDcgKzYsNyBAQAogc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyICE9IE5VTEwpIHsKLQkJcmVnaXN0ZXIgY2hhciAqY29weSA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworCQljaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CiAJCWlmIChjb3B5ICE9IE5VTEwpCiAJCQlyZXR1cm4gc3RyY3B5KGNvcHksIHN0cik7CiAJfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5bXRhYmxlLmMgYi9QeXRob24vc3ltdGFibGUuYwppbmRleCAxZTEzYjc5MC4uZGExNjRhYSAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTM3LDI0ICszNywxNCBAQAogICAgIHN0ZS0+c3RlX3RhYmxlID0gc3Q7CiAgICAgc3RlLT5zdGVfaWQgPSBrOyAvKiBzdGUgb3ducyByZWZlcmVuY2UgdG8gayAqLwogCi0gICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgIHN0ZS0+c3RlX25hbWUgPSBuYW1lOwogCiAgICAgc3RlLT5zdGVfc3ltYm9scyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBOVUxMOwogICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gTlVMTDsKIAotICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKKyAgICBzdGUtPnN0ZV9kaXJlY3RpdmVzID0gTlVMTDsKIAogICAgIHN0ZS0+c3RlX3R5cGUgPSBibG9jazsKICAgICBzdGUtPnN0ZV91bm9wdGltaXplZCA9IDA7CkBAIC03NSw2ICs2NSwxNSBAQAogICAgIHN0ZS0+c3RlX2NoaWxkX2ZyZWUgPSAwOwogICAgIHN0ZS0+c3RlX2dlbmVyYXRvciA9IDA7CiAgICAgc3RlLT5zdGVfcmV0dXJuc192YWx1ZSA9IDA7CisgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDA7CisKKyAgICBzdGUtPnN0ZV9zeW1ib2xzID0gUHlEaWN0X05ldygpOworICAgIHN0ZS0+c3RlX3Zhcm5hbWVzID0gUHlMaXN0X05ldygwKTsKKyAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTAorICAgICAgICB8fCBzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGlmIChQeURpY3RfU2V0SXRlbShzdC0+c3RfYmxvY2tzLCBzdGUtPnN0ZV9pZCwgKFB5T2JqZWN0ICopc3RlKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTEwMiw2ICsxMDEsNyBAQAogICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfc3ltYm9scyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV92YXJuYW1lcyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9jaGlsZHJlbik7CisgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKICAgICBQeU9iamVjdF9EZWwoc3RlKTsKIH0KIApAQCAtMTg4LDcgKzE4OCw3IEBACiAKIHN0YXRpYyBpZGVudGlmaWVyIHRvcCA9IE5VTEwsIGxhbWJkYSA9IE5VTEwsIGdlbmV4cHIgPSBOVUxMLAogICAgIGxpc3Rjb21wID0gTlVMTCwgc2V0Y29tcCA9IE5VTEwsIGRpY3Rjb21wID0gTlVMTCwKLSAgICBfX2NsYXNzX18gPSBOVUxMLCBfX2xvY2Fsc19fID0gTlVMTDsKKyAgICBfX2NsYXNzX18gPSBOVUxMOwogCiAjZGVmaW5lIEdFVF9JREVOVElGSUVSKFZBUikgXAogICAgICgoVkFSKSA/IChWQVIpIDogKChWQVIpID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIyBWQVIpKSkKQEAgLTIzMyw3ICsyMzMsNyBAQAogI2RlZmluZSBDT01QSUxFUl9TVEFDS19GUkFNRV9TQ0FMRSAzCiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCitQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3QgPSBzeW10YWJsZV9uZXcoKTsKICAgICBhc2RsX3NlcSAqc2VxOwpAQCAtMjQyLDcgKzI0MiwxMiBAQAogICAgIGludCByZWN1cnNpb25fbGltaXQgPSBQeV9HZXRSZWN1cnNpb25MaW1pdCgpOwogCiAgICAgaWYgKHN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBzdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlTeW10YWJsZV9GcmVlKHN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgc3QtPnN0X2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgc3QtPnN0X2Z1dHVyZSA9IGZ1dHVyZTsKIApAQCAtMzA2LDkgKzMxMSwyMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdHJ1Y3Qgc3ltdGFibGUgKgorUHlTeW10YWJsZV9CdWlsZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZ1dHVyZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIHZvaWQKIFB5U3ltdGFibGVfRnJlZShzdHJ1Y3Qgc3ltdGFibGUgKnN0KQogeworICAgIFB5X1hERUNSRUYoc3QtPnN0X2ZpbGVuYW1lKTsKICAgICBQeV9YREVDUkVGKHN0LT5zdF9ibG9ja3MpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X3N0YWNrKTsKICAgICBQeU1lbV9GcmVlKCh2b2lkICopc3QpOwpAQCAtMzQ2LDYgKzM2NSwyNCBAQAogICAgIHJldHVybiAoUHlMb25nX0FTX0xPTkcodikgPj4gU0NPUEVfT0ZGU0VUKSAmIFNDT1BFX01BU0s7CiB9CiAKK3N0YXRpYyBpbnQKK2Vycm9yX2F0X2RpcmVjdGl2ZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGFzc2VydChzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKKyAgICBmb3IgKGkgPSAwOyA7IGkrKykgeworICAgICAgICBkYXRhID0gUHlMaXN0X0dFVF9JVEVNKHN0ZS0+c3RlX2RpcmVjdGl2ZXMsIGkpOworICAgICAgICBhc3NlcnQoUHlUdXBsZV9DaGVja0V4YWN0KGRhdGEpKTsKKyAgICAgICAgaWYgKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMCkgPT0gbmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMikpKTsKKyAgICByZXR1cm4gMDsKK30KKwogCiAvKiBBbmFseXplIHJhdyBzeW1ib2wgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHNjb3BlIG9mIGVhY2ggbmFtZS4KIApAQCAtNDIwLDE2ICs0NTcsMTMgQEAKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfbGluZW5vLCBzdGUtPnN0ZV9jb2xfb2Zmc2V0KTsKLQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZsYWdzICYgREVGX05PTkxPQ0FMKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBub25sb2NhbCBhbmQgZ2xvYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEdMT0JBTF9FWFBMSUNJVCk7CiAgICAgICAgIGlmIChQeVNldF9BZGQoZ2xvYmFsLCBuYW1lKSA8IDApCkBAIC00NDMsMTkgKzQ3NywxOSBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBub25sb2NhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWJvdW5kKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmxvY2FsIGRlY2xhcmF0aW9uIG5vdCBhbGxvd2VkIGF0IG1vZHVsZSBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhib3VuZCwgbmFtZSkpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gYmluZGluZyBmb3Igbm9ubG9jYWwgJyVVJyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEZSRUUpOwogICAgICAgICBzdGUtPnN0ZV9mcmVlID0gMTsKQEAgLTUwMCwxMyArNTM0LDEwIEBACiAKICAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBibG9jaydzIGZyZWUgdmFyaWFibGVzIGFyZSBpbmNsdWRlZCBpbiBmcmVlLgogICAgVGhhdCdzIHNhZmUgYmVjYXVzZSBubyBuYW1lIGNhbiBiZSBmcmVlIGFuZCBsb2NhbCBpbiB0aGUgc2FtZSBzY29wZS4KLQotICAgVGhlICdyZXN0cmljdGVkJyBhcmd1bWVudCBtYXkgYmUgc2V0IHRvIGEgc3RyaW5nIHRvIHJlc3RyaWN0IHRoZSBhbmFseXNpcwotICAgdG8gdGhlIG9uZSB2YXJpYWJsZSB3aG9zZSBuYW1lIGVxdWFscyB0aGF0IHN0cmluZyAoZS5nLiAiX19jbGFzc19fIikuCiAqLwogCiBzdGF0aWMgaW50Ci1hbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlLCBjb25zdCBjaGFyICpyZXN0cmljdGVkKQorYW5hbHl6ZV9jZWxscyhQeU9iamVjdCAqc2NvcGVzLCBQeU9iamVjdCAqZnJlZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSwgKnYsICp2X2NlbGw7CiAgICAgaW50IHN1Y2Nlc3MgPSAwOwpAQCAtNTIzLDkgKzU1NCw2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhmcmVlLCBuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVzdHJpY3RlZCAhPSBOVUxMICYmCi0gICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCByZXN0cmljdGVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvKiBSZXBsYWNlIExPQ0FMIHdpdGggQ0VMTCBmb3IgdGhpcyBuYW1lLCBhbmQgcmVtb3ZlCiAgICAgICAgICAgIGZyb20gZnJlZS4gSXQgaXMgc2FmZSB0byByZXBsYWNlIHRoZSB2YWx1ZSBvZiBuYW1lCiAgICAgICAgICAgIGluIHRoZSBkaWN0LCBiZWNhdXNlIGl0IHdpbGwgbm90IGNhdXNlIGEgcmVzaXplLgpAQCAtNTQxLDYgKzU2OSwyMCBAQAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCitzdGF0aWMgaW50Citkcm9wX2NsYXNzX2ZyZWUoUHlTVEVudHJ5T2JqZWN0ICpzdGUsIFB5T2JqZWN0ICpmcmVlKQoreworICAgIGludCByZXM7CisgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXMgPSBQeVNldF9EaXNjYXJkKGZyZWUsIF9fY2xhc3NfXyk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChyZXMpCisgICAgICAgIHN0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgPSAxOworICAgIHJldHVybiAxOworfQorCiAvKiBDaGVjayBmb3IgaWxsZWdhbCBzdGF0ZW1lbnRzIGluIHVub3B0aW1pemVkIG5hbWVzcGFjZXMgKi8KIHN0YXRpYyBpbnQKIGNoZWNrX3Vub3B0aW1pemVkKGNvbnN0IFB5U1RFbnRyeU9iamVjdCogc3RlKSB7CkBAIC01NjQsOCArNjA2LDkgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsIHN0ZS0+c3RlX29wdF9saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2NvbF9vZmZzZXQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC03NzEsNyArODE0LDYgQEAKICAgICAgICAgLyogU3BlY2lhbC1jYXNlIF9fY2xhc3NfXyAqLwogICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBhc3NlcnQoUHlTZXRfQ29udGFpbnMobG9jYWwsIF9fY2xhc3NfXykgPT0gMSk7CiAgICAgICAgIGlmIChQeVNldF9BZGQobmV3Ym91bmQsIF9fY2xhc3NfXykgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC04MDQsMTEgKzg0Niw5IEBACiAgICAgUHlfREVDUkVGKHRlbXApOwogCiAgICAgLyogQ2hlY2sgaWYgYW55IGxvY2FsIHZhcmlhYmxlcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBjZWxsIHZhcmlhYmxlcyAqLwotICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGVzLCBuZXdmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkKKyAgICBlbHNlIGlmIChzdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYgIWRyb3BfY2xhc3NfZnJlZShzdGUsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIC8qIFJlY29yZHMgdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzIGluIHRoZSBzeW1ib2wgdGFibGUgZW50cnkgKi8KICAgICBpZiAoIXVwZGF0ZV9zeW1ib2xzKHN0ZS0+c3RlX3N5bWJvbHMsIHNjb3BlcywgYm91bmQsIG5ld2ZyZWUsCkBAIC04OTksMTUgKzkzOSwyMCBAQAogc3RhdGljIGludAogc3ltdGFibGVfd2FybihzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBjaGFyICptc2csIGludCBsaW5lbm8pCiB7Ci0gICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobXNnKTsKKyAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1lc3NhZ2UsIHN0LT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheFdhcm5pbmcpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIG1zZyk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTk5MCw5ICsxMDM1LDkgQEAKICAgICAgICAgaWYgKChmbGFnICYgREVGX1BBUkFNKSAmJiAodmFsICYgREVGX1BBUkFNKSkgewogICAgICAgICAgICAgLyogSXMgaXQgYmV0dGVyIHRvIHVzZSAnbWFuZ2xlZCcgb3IgJ25hbWUnIGhlcmU/ICovCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsIERVUExJQ0FURV9BUkdVTUVOVCwgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgdmFsIHw9IGZsYWc7CkBAIC0xMTAyLDYgKzExNDcsMjUgQEAKIAogCiBzdGF0aWMgaW50CitzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgc3RtdF90eSBzKQoreworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCByZXM7CisgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykgeworICAgICAgICBzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICghc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZGF0YSA9IFB5X0J1aWxkVmFsdWUoIihPaWkpIiwgbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMsIGRhdGEpOworICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICByZXR1cm4gcmVzID09IDA7Cit9CisKKworc3RhdGljIGludAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKQEAgLTExNDYsMTMgKzEyMTAsNiBAQAogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzLT52LkNsYXNzRGVmLm5hbWUsIENsYXNzQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7Ci0gICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSB8fAotICAgICAgICAgICAgIXN5bXRhYmxlX2FkZF9kZWYoc3QsIF9fY2xhc3NfXywgREVGX0xPQ0FMKSB8fAotICAgICAgICAgICAgIUdFVF9JREVOVElGSUVSKF9fbG9jYWxzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19sb2NhbHNfXywgREVGX1BBUkFNKSkgewotICAgICAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgcyk7Ci0gICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgfQogICAgICAgICB0bXAgPSBzdC0+c3RfcHJpdmF0ZTsKICAgICAgICAgc3QtPnN0X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5DbGFzc0RlZi5ib2R5KTsKQEAgLTEyNDAsMTQgKzEyOTcsNyBAQAogICAgICAgICBhc2RsX3NlcSAqc2VxID0gcy0+di5HbG9iYWwubmFtZXM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oc2VxKTsgaSsrKSB7CiAgICAgICAgICAgICBpZGVudGlmaWVyIG5hbWUgPSAoaWRlbnRpZmllcilhc2RsX3NlcV9HRVQoc2VxLCBpKTsKLSAgICAgICAgICAgIGxvbmcgY3VyOwotICAgICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYKLSAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCAiY2Fubm90IG1ha2UgX19jbGFzc19fIGdsb2JhbCIpOwotICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKKyAgICAgICAgICAgIGxvbmcgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKICAgICAgICAgICAgIGlmIChjdXIgPCAwKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwogICAgICAgICAgICAgaWYgKGN1ciAmIChERUZfTE9DQUwgfCBVU0UpKSB7CkBAIC0xMjY4LDYgKzEzMTgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfR0xPQkFMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5Nyw2ICsxMzQ5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgbmFtZSwgREVGX05PTkxPQ0FMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQwNyw2ICsxNDYxLDcgQEAKICAgICBjYXNlIFN0cl9raW5kOgogICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLwogICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCkBAIC0xNDk5LDEwICsxNTU0LDEwIEBACiAKICAgICBpZiAoYS0+YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYS0+dmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmIChhLT5rd2FyZ2Fubm90YXRpb24pCi0gICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZ2Fubm90YXRpb24pOworICAgIGlmIChhLT52YXJhcmcgJiYgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKQorICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKTsKKyAgICBpZiAoYS0+a3dhcmcgJiYgYS0+a3dhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZy0+YW5ub3RhdGlvbik7CiAgICAgaWYgKGEtPmt3b25seWFyZ3MgJiYgIXN5bXRhYmxlX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucykKQEAgLTE1MjEsMTIgKzE1NzYsMTIgQEAKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfcGFyYW1zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGEtPnZhcmFyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZywgREVGX1BBUkFNKSkKKyAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBhLT52YXJhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFyYXJncyA9IDE7CiAgICAgfQogICAgIGlmIChhLT5rd2FyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLT5hcmcsIERFRl9QQVJBTSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX3ZhcmtleXdvcmRzID0gMTsKICAgICB9CkBAIC0xNTg3LDcgKzE2NDIsNyBAQAogICAgICAgICAgICAgaW50IGxpbmVubyA9IHN0LT5zdF9jdXItPnN0ZV9saW5lbm87CiAgICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBJTVBPUlRfU1RBUl9XQVJOSU5HKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0b3JlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCBkZjlkZmIxLi40MDI4YTAxIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC00MSw2ICs0MSwyNiBAQAogI2luY2x1ZGUgPGxhbmdpbmZvLmg+CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoXyk7CitfUHlfSURFTlRJRklFUihfX3NpemVvZl9fKTsKK19QeV9JREVOVElGSUVSKGJ1ZmZlcik7CitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihlbmNvZGluZyk7CitfUHlfSURFTlRJRklFUihwYXRoKTsKK19QeV9JREVOVElGSUVSKHN0ZG91dCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworX1B5X0lERU5USUZJRVIod3JpdGUpOworCitQeU9iamVjdCAqCitfUHlTeXNfR2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSkKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmIChzZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5RGljdF9HZXRJdGVtSWQoc2QsIGtleSk7Cit9CisKIFB5T2JqZWN0ICoKIFB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNTIsNiArNzIsMjEgQEAKIH0KIAogaW50CitfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKnYpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeU9iamVjdCAqc2QgPSB0c3RhdGUtPmludGVycC0+c3lzZGljdDsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfUHlEaWN0X0RlbEl0ZW1JZChzZCwga2V5KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gX1B5RGljdF9TZXRJdGVtSWQoc2QsIGtleSwgdik7Cit9CisKK2ludAogUHlTeXNfU2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CkBAIC03OSw4ICsxMTQsNiBAQAogICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqZXNjYXBlZF9zdHIsICpyZXByX3N0ciwgKmJ1ZmZlciwgKnJlc3VsdDsKICAgICBjaGFyICpzdGRvdXRfZW5jb2Rpbmdfc3RyOwogICAgIGludCByZXQ7Ci0gICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOwotICAgIF9QeV9JREVOVElGSUVSKGJ1ZmZlcik7CiAKICAgICBzdGRvdXRfZW5jb2RpbmcgPSBfUHlPYmplY3RfR2V0QXR0cklkKG91dGYsICZQeUlkX2VuY29kaW5nKTsKICAgICBpZiAoc3Rkb3V0X2VuY29kaW5nID09IE5VTEwpCkBAIC0xMDEsNyArMTM0LDYgQEAKIAogICAgIGJ1ZmZlciA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfYnVmZmVyKTsKICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChidWZmZXIsICZQeUlkX3dyaXRlLCAiKE8pIiwgZW5jb2RlZCk7CiAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CkBAIC0xMzcsMTAgKzE2OSwxMSBAQAogICAgIFB5T2JqZWN0ICpvdXRmOwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOwogICAgIFB5T2JqZWN0ICptb2R1bGVzID0gaW50ZXJwLT5tb2R1bGVzOwotICAgIFB5T2JqZWN0ICpidWlsdGlucyA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBzdGF0aWMgUHlPYmplY3QgKm5ld2xpbmUgPSBOVUxMOwogICAgIGludCBlcnI7Ci0gICAgX1B5X0lERU5USUZJRVIoXyk7CiAKKyAgICBidWlsdGlucyA9IF9QeURpY3RfR2V0SXRlbUlkKG1vZHVsZXMsICZQeUlkX2J1aWx0aW5zKTsKICAgICBpZiAoYnVpbHRpbnMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBidWlsdGlucyBtb2R1bGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTUsNyArMTg4LDcgQEAKICAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoYnVpbHRpbnMsICZQeUlkX18sIFB5X05vbmUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG91dGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgIG91dGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKICAgICBpZiAob3V0ZiA9PSBOVUxMIHx8IG91dGYgPT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBzeXMuc3Rkb3V0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTczLDcgKzIwNiwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBvdXRmKSAhPSAwKQorICAgIGlmIChuZXdsaW5lID09IE5VTEwpIHsKKyAgICAgICAgbmV3bGluZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJcbiIpOworICAgICAgICBpZiAobmV3bGluZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobmV3bGluZSwgb3V0ZiwgUHlfUFJJTlRfUkFXKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgbykgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzIsMTIgKzM3MCwxNiBAQAogY2FsbF90cmFtcG9saW5lKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3QqIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKmZyYW1lLCBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfTmV3KDMpOworICAgIFB5T2JqZWN0ICphcmdzOwogICAgIFB5T2JqZWN0ICp3aGF0c3RyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKKyAgICBhcmdzID0gUHlUdXBsZV9OZXcoMyk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGZyYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUHlfSU5DUkVGKGZyYW1lKTsKICAgICB3aGF0c3RyID0gd2hhdHN0cmluZ3Nbd2hhdF07CiAgICAgUHlfSU5DUkVGKHdoYXRzdHIpOwpAQCAtMzQ5LDcgKzM5MSw2IEBACiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAyLCBhcmcpOwogCiAgICAgLyogY2FsbCB0aGUgUHl0aG9uLWxldmVsIGZ1bmN0aW9uICovCi0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZnJhbWUpOwogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGNhbGxiYWNrLCBhcmdzKTsKICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdChmcmFtZSwgMSk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQpAQCAtNjE3LDcgKzY1OCw3IEBACiAiaGFzaF9pbmZvXG5cCiBcblwKIEEgc3RydWN0IHNlcXVlbmNlIHByb3ZpZGluZyBwYXJhbWV0ZXJzIHVzZWQgZm9yIGNvbXB1dGluZ1xuXAotbnVtZXJpYyBoYXNoZXMuICBUaGUgYXR0cmlidXRlcyBhcmUgcmVhZCBvbmx5LiIpOworaGFzaGVzLiBUaGUgYXR0cmlidXRlcyBhcmUgcmVhZCBvbmx5LiIpOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBoYXNoX2luZm9fZmllbGRzW10gPSB7CiAgICAgeyJ3aWR0aCIsICJ3aWR0aCBvZiB0aGUgdHlwZSB1c2VkIGZvciBoYXNoaW5nLCBpbiBiaXRzIn0sCkBAIC02MjYsNiArNjY3LDExIEBACiAgICAgeyJpbmYiLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIHBvc2l0aXZlIGluZmluaXR5In0sCiAgICAgeyJuYW4iLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIG5hbiJ9LAogICAgIHsiaW1hZyIsICJtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIn0sCisgICAgeyJhbGdvcml0aG0iLCAibmFtZSBvZiB0aGUgYWxnb3JpdGhtIGZvciBoYXNoaW5nIG9mIHN0ciwgYnl0ZXMgYW5kICIKKyAgICAgICAgICAgICAgICAgICJtZW1vcnl2aWV3cyJ9LAorICAgIHsiaGFzaF9iaXRzIiwgImludGVybmFsIG91dHB1dCBzaXplIG9mIGhhc2ggYWxnb3JpdGhtIn0sCisgICAgeyJzZWVkX2JpdHMiLCAic2VlZCBzaXplIG9mIGhhc2ggYWxnb3JpdGhtIn0sCisgICAgeyJjdXRvZmYiLCAic21hbGwgc3RyaW5nIG9wdGltaXphdGlvbiBjdXRvZmYifSwKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKQEAgLTYzMyw3ICs2NzksNyBAQAogICAgICJzeXMuaGFzaF9pbmZvIiwKICAgICBoYXNoX2luZm9fZG9jLAogICAgIGhhc2hfaW5mb19maWVsZHMsCi0gICAgNSwKKyAgICA5LAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY0MSw5ICs2ODcsMTEgQEAKIHsKICAgICBQeU9iamVjdCAqaGFzaF9pbmZvOwogICAgIGludCBmaWVsZCA9IDA7CisgICAgUHlIYXNoX0Z1bmNEZWYgKmhhc2hmdW5jOwogICAgIGhhc2hfaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZIYXNoX0luZm9UeXBlKTsKICAgICBpZiAoaGFzaF9pbmZvID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGhhc2hmdW5jID0gUHlIYXNoX0dldEZ1bmNEZWYoKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyg4KnNpemVvZihQeV9oYXNoX3QpKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCkBAIC02NTQsNiArNzAyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoX1B5SEFTSF9OQU4pKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX0lNQUcpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGhhc2hmdW5jLT5uYW1lKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPmhhc2hfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKGhhc2hmdW5jLT5zZWVkX2JpdHMpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhQeV9IQVNIX0NVVE9GRikpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0NMRUFSKGhhc2hfaW5mbyk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzc0LDcgKzgzMCw3IEBACiBpbnRlcnByZXRlciBsb2FkcyBleHRlbnNpb24gbW9kdWxlcy4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB3aWxsIGVuYWJsZVxuXAogYSBsYXp5IHJlc29sdmluZyBvZiBzeW1ib2xzIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlLCBpZiBjYWxsZWQgYXNcblwKIHN5cy5zZXRkbG9wZW5mbGFncygwKS4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzXG5cCi1zeXMuc2V0ZGxvcGVuZmxhZ3MoY3R5cGVzLlJUTERfR0xPQkFMKS4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzXG5cCitzeXMuc2V0ZGxvcGVuZmxhZ3Mob3MuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKIGNhbiBiZSBmb3VuZCBpbiB0aGUgb3MgbW9kdWxlIChSVExEX3h4eCBjb25zdGFudHMsIGUuZy4gb3MuUlRMRF9MQVpZKS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc5MCw3ICs4NDYsNyBAQAogImdldGRsb3BlbmZsYWdzKCkgLT4gaW50XG5cCiBcblwKIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgZGxvcGVuIGNhbGxzLlxuXAotVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBjdHlwZXMgYW5kIERMRkNOIG1vZHVsZXMuIik7CitUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIG9zIG1vZHVsZS4iKTsKIAogI2VuZGlmICAvKiBIQVZFX0RMT1BFTiAqLwogCkBAIC04MTgsNyArODc0LDYgQEAKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iamVjdCIsICJkZWZhdWx0IiwgMH07CiAgICAgUHlPYmplY3QgKm8sICpkZmx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqbWV0aG9kOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpnZXRzaXplb2YiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm8sICZkZmx0KSkKQEAgLTg5NCw2ICs5NDksMTkgQEAKIHJlZmVyZW5jZSBhcyBhbiBhcmd1bWVudCB0byBnZXRyZWZjb3VudCgpLiIKICk7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitzeXNfZ2V0YWxsb2NhdGVkYmxvY2tzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKworUHlEb2NfU1RSVkFSKGdldGFsbG9jYXRlZGJsb2Nrc19kb2MsCisiZ2V0YWxsb2NhdGVkYmxvY2tzKCkgLT4gaW50ZWdlclxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlaXJcblwKK3NpemUuIgorKTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19nZXRjb3VudHMoUHlPYmplY3QgKnNlbGYpCkBAIC0xMDYyLDYgKzExMzAsOCBAQAogICAgIHsiZ2V0ZGxvcGVuZmxhZ3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGRsb3BlbmZsYWdzLCBNRVRIX05PQVJHUywKICAgICAgZ2V0ZGxvcGVuZmxhZ3NfZG9jfSwKICNlbmRpZgorICAgIHsiZ2V0YWxsb2NhdGVkYmxvY2tzIiwgKFB5Q0Z1bmN0aW9uKXN5c19nZXRhbGxvY2F0ZWRibG9ja3MsIE1FVEhfTk9BUkdTLAorICAgICAgZ2V0YWxsb2NhdGVkYmxvY2tzX2RvY30sCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgeyJnZXRjb3VudHMiLCAgICAgICAoUHlDRnVuY3Rpb24pc3lzX2dldGNvdW50cywgTUVUSF9OT0FSR1N9LAogI2VuZGlmCkBAIC0xMjgzLDYgKzEzNTMsNyBAQAogZXhlY3V0YWJsZSAtLSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGJpbmFyeSBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyXG5cCiBmbG9hdF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsb2F0IGltcGxlbWVudGF0aW9uLlxuXAogZmxvYXRfcmVwcl9zdHlsZSAtLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgc3R5bGUgb2YgcmVwcigpIG91dHB1dCBmb3IgZmxvYXRzXG5cCitoYXNoX2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFzaCBhbGdvcml0aG0uXG5cCiBoZXh2ZXJzaW9uIC0tIHZlcnNpb24gaW5mb3JtYXRpb24gZW5jb2RlZCBhcyBhIHNpbmdsZSBpbnRlZ2VyXG5cCiBpbXBsZW1lbnRhdGlvbiAtLSBQeXRob24gaW1wbGVtZW50YXRpb24gaW5mb3JtYXRpb24uXG5cCiBpbnRfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnQgaW1wbGVtZW50YXRpb24uXG5cCkBAIC0xMzQ5LDE0ICsxNDIwLDEyIEBACiAgICAgeyJub19zaXRlIiwgICAgICAgICAgICAgICAgICItUyJ9LAogICAgIHsiaWdub3JlX2Vudmlyb25tZW50IiwgICAgICAiLUUifSwKICAgICB7InZlcmJvc2UiLCAgICAgICAgICAgICAgICAgIi12In0sCi0jaWZkZWYgUklTQ09TCi0gICAgeyJyaXNjb3Nfd2ltcCIsICAgICAgICAgICAgICI/Pz8ifSwKLSNlbmRpZgogICAgIC8qIHsidW5idWZmZXJlZCIsICAgICAgICAgICAgICAgICAgICItdSJ9LCAqLwogICAgIC8qIHsic2tpcF9maXJzdCIsICAgICAgICAgICAgICAgICAgICIteCJ9LCAqLwogICAgIHsiYnl0ZXNfd2FybmluZyIsICAgICAgICAgICAiLWIifSwKICAgICB7InF1aWV0IiwgICAgICAgICAgICAgICAgICAgIi1xIn0sCiAgICAgeyJoYXNoX3JhbmRvbWl6YXRpb24iLCAgICAgICItUiJ9LAorICAgIHsiaXNvbGF0ZWQiLCAgICAgICAgICAgICAgICAiLUkifSwKICAgICB7MH0KIH07CiAKQEAgLTEzNjQsMTEgKzE0MzMsNyBAQAogICAgICJzeXMuZmxhZ3MiLCAgICAgICAgLyogbmFtZSAqLwogICAgIGZsYWdzX19kb2NfXywgICAgICAgLyogZG9jICovCiAgICAgZmxhZ3NfZmllbGRzLCAgICAgICAvKiBmaWVsZHMgKi8KLSNpZmRlZiBSSVNDT1MKICAgICAxMwotI2Vsc2UKLSAgICAxMgotI2VuZGlmCiB9OwogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzkzLDE0ICsxNDU4LDEyIEBACiAgICAgU2V0RmxhZyhQeV9Ob1NpdGVGbGFnKTsKICAgICBTZXRGbGFnKFB5X0lnbm9yZUVudmlyb25tZW50RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9WZXJib3NlRmxhZyk7Ci0jaWZkZWYgUklTQ09TCi0gICAgU2V0RmxhZyhQeV9SSVNDT1NXaW1wRmxhZyk7Ci0jZW5kaWYKICAgICAvKiBTZXRGbGFnKHNhd191bmJ1ZmZlcmVkX2ZsYWcpOyAqLwogICAgIC8qIFNldEZsYWcoc2tpcGZpcnN0bGluZSk7ICovCiAgICAgU2V0RmxhZyhQeV9CeXRlc1dhcm5pbmdGbGFnKTsKICAgICBTZXRGbGFnKFB5X1F1aWV0RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcpOworICAgIFNldEZsYWcoUHlfSXNvbGF0ZWRGbGFnKTsKICN1bmRlZiBTZXRGbGFnCiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMTU2MCwxOCArMTYyMywzNSBAQAogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKnYsICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwotICAgIGNoYXIgKnM7CisgICAgUHlPYmplY3QgKm0sICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3lzbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgXAotICAgIHYgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHYgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgICAgXAotICAgIFB5X1hERUNSRUYodikKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coa2V5LCB2YWx1ZSkgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9TWVNfRlJPTV9TVFJJTkcoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICp2ID0gKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsIGtleSwgdik7ICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBDaGVjayB0aGF0IHN0ZGluIGlzIG5vdCBhIGRpcmVjdG9yeQogICAgIFVzaW5nIHNoZWxsIHJlZGlyZWN0aW9uLCB5b3UgY2FuIHJlZGlyZWN0IHN0ZGluIHRvIGEgZGlyZWN0b3J5LApAQCAtMTU5MywxMCArMTY3MywxMCBAQAogCiAgICAgLyogc3RkaW4vc3Rkb3V0L3N0ZGVyciBhcmUgbm93IHNldCBieSBweXRob25ydW4uYyAqLwogCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZGlzcGxheWhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfX2V4Y2VwdGhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZGlzcGxheWhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfX2V4Y2VwdGhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0VmVyc2lvbigpKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGV4dmVyc2lvbiIsCkBAIC0xNjMwLDI4ICsxNzEwLDI0IEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW50X2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0dldEluZm8oKSk7CiAgICAgLyogaW5pdGlhbGl6ZSBoYXNoX2luZm8gKi8KLSAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYyk7CisgICAgaWYgKEhhc2hfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGFzaF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9oYXNoX2luZm8oKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygibWF4dW5pY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoMHgxMEZGRkYpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJidWlsdGluX21vZHVsZV9uYW1lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2J1aWx0aW5fbW9kdWxlX25hbWVzKCkpOwotICAgIHsKLSAgICAgICAgLyogQXNzdW1lcyB0aGF0IGxvbmdzIGFyZSBhdCBsZWFzdCAyIGJ5dGVzIGxvbmcuCi0gICAgICAgICAgIFNob3VsZCBiZSBzYWZlISAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIG51bWJlciA9IDE7Ci0gICAgICAgIGNoYXIgKnZhbHVlOworI2lmIFBZX0JJR19FTkRJQU4KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImJpZyIpKTsKKyNlbHNlCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJsaXR0bGUiKSk7CisjZW5kaWYKIAotICAgICAgICBzID0gKGNoYXIgKikgJm51bWJlcjsKLSAgICAgICAgaWYgKHNbMF0gPT0gMCkKLSAgICAgICAgICAgIHZhbHVlID0gImJpZyI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gImxpdHRsZSI7Ci0gICAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsdWUpKTsKLSAgICB9CiAjaWZkZWYgTVNfQ09SRURMTAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImRsbGhhbmRsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbVZvaWRQdHIoUHlXaW5fRExMaE1vZHVsZSkpOwpAQCAtMTY2NCwyMiArMTc0MCwyMiBAQAogI2VuZGlmCiAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpIHsKICAgICAgICAgd2Fybm9wdGlvbnMgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKHdhcm5vcHRpb25zKTsKICAgICB9Ci0gICAgaWYgKHdhcm5vcHRpb25zICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwotICAgIH0KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7CiAKLSAgICB2ID0gZ2V0X3hvcHRpb25zKCk7Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX3hvcHRpb25zIiwgdik7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfeG9wdGlvbnMiLCBnZXRfeG9wdGlvbnMoKSk7CiAKICAgICAvKiB2ZXJzaW9uX2luZm8gKi8KLSAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVmVyc2lvbkluZm9UeXBlLCAmdmVyc2lvbl9pbmZvX2Rlc2MpOworICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVmVyc2lvbkluZm9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZlcnNpb25faW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgdmVyc2lvbl9pbmZvID0gbWFrZV92ZXJzaW9uX2luZm8oKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uX2luZm8iLCB2ZXJzaW9uX2luZm8pOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KQEAgLTE2OTAsOCArMTc2NiwxMCBAQAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImltcGxlbWVudGF0aW9uIiwgbWFrZV9pbXBsX2luZm8odmVyc2lvbl9pbmZvKSk7CiAKICAgICAvKiBmbGFncyAqLwotICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKTsKKyAgICBpZiAoRmxhZ3NUeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbGFncyIsIG1ha2VfZmxhZ3MoKSk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIEZsYWdzVHlwZS50cF9pbml0ID0gTlVMTDsKQEAgLTE3MDEsNyArMTc3OSw5IEBACiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIC8qIGdldHdpbmRvd3N2ZXJzaW9uICovCiAgICAgaWYgKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldpbmRvd3NWZXJzaW9uVHlwZSwgJndpbmRvd3NfdmVyc2lvbl9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZXaW5kb3dzVmVyc2lvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93c192ZXJzaW9uX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX25ldyA9IE5VTEw7CkBAIC0xNzY1LDcgKzE4NDUsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogICAgIGlmICgodiA9IG1ha2VwYXRob2JqZWN0KHBhdGgsIERFTElNKSkgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgY3JlYXRlIHN5cy5wYXRoIik7Ci0gICAgaWYgKFB5U3lzX1NldE9iamVjdCgicGF0aCIsIHYpICE9IDApCisgICAgaWYgKF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9wYXRoLCB2KSAhPSAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBhc3NpZ24gc3lzLnBhdGgiKTsKICAgICBQeV9ERUNSRUYodik7CiB9CkBAIC0xODM0LDcgKzE5MTQsNyBAQAogICAgIHdjaGFyX3QgZnVsbHBhdGhbTUFYX1BBVEhdOwogI2VuZGlmCiAKLSAgICBwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAocGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MzMsNyArMjAxMyw3IEBACiB2b2lkCiBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKLSAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMSk7CisgICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIFB5X0lzb2xhdGVkRmxhZyA9PSAwKTsKIH0KIAogLyogUmVpbXBsZW1lbnRhdGlvbiBvZiBQeUZpbGVfV3JpdGVTdHJpbmcoKSBubyBjYWxsaW5nIGluZGlyZWN0bHkKQEAgLTE5NDQsNyArMjAyNCw2IEBACiB7CiAgICAgUHlPYmplY3QgKndyaXRlciA9IE5VTEwsICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0yMDIxLDcgKzIxMDAsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1zeXNfd3JpdGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c193cml0ZShfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CkBAIC0yMDI5LDcgKzIxMDgsNyBAQAogICAgIGludCB3cml0dGVuOwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgd3JpdHRlbiA9IFB5T1NfdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgdmEpOwogICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlKGJ1ZmZlciwgZmlsZSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjA0OSw3ICsyMTI4LDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjA1OSwxOSArMjEzOCwxOSBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCiBzdGF0aWMgdm9pZAotc3lzX2Zvcm1hdChjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX2Zvcm1hdChfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlLCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIGNoYXIgKnV0Zjg7CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmEpOwogICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGVfdW5pY29kZShtZXNzYWdlLCBmaWxlKSAhPSAwKSB7CkBAIC0yMDkxLDcgKzIxNzAsNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIxMDEsNiArMjE4MCw2IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCBlNTVkMzQyLi44NTQwOTQyIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC05MSwxMCArOTEsNiBAQAogI2luY2x1ZGUgInRocmVhZF9udC5oIgogI2VuZGlmCiAKLSNpZmRlZiBPUzJfVEhSRUFEUwotI2RlZmluZSBQWVRIUkVBRF9OQU1FICJvczIiCi0jaW5jbHVkZSAidGhyZWFkX29zMi5oIgotI2VuZGlmCiAKIC8qCiAjaWZkZWYgRk9PQkFSX1RIUkVBRFMKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgICAgICBhc3NlcnQocCA9PSBOVUxMKTsKICAgICAgICAgZ290byBEb25lOwogICAgIH0KLSAgICBwID0gKHN0cnVjdCBrZXkgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKKyAgICBwID0gKHN0cnVjdCBrZXkgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHAtPmlkID0gaWQ7CiAgICAgICAgIHAtPmtleSA9IGtleTsKQEAgLTI3NCw3ICsyNzAsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5KSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zMjgsNyArMzI0LDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSAmJiBwLT5pZCA9PSBpZCkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxLDcgKzM1Nyw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmlkICE9IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDMsOCArMzk5LDEwIEBACiAgICAgaW50IGxlbjsKICNlbmRpZgogCi0gICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGhyZWFkSW5mb1R5cGUsICZ0aHJlYWRpbmZvX2Rlc2MpOworICAgIGlmIChUaHJlYWRJbmZvVHlwZS50cF9uYW1lID09IDApIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgdGhyZWFkaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZUaHJlYWRJbmZvVHlwZSk7CiAgICAgaWYgKHRocmVhZGluZm8gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbnQuaCBiL1B5dGhvbi90aHJlYWRfbnQuaAppbmRleCA5MzhiZjFlLi5hYjVhMDgxIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX250LmgKKysrIGIvUHl0aG9uL3RocmVhZF9udC5oCkBAIC0zNCw3ICszNCw3IEBACiBQTlJNVVRFWAogQWxsb2NOb25SZWN1cnNpdmVNdXRleCgpCiB7Ci0gICAgUE5STVVURVggbSA9IChQTlJNVVRFWCltYWxsb2Moc2l6ZW9mKE5STVVURVgpKTsKKyAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoTlJNVVRFWCkpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Q09ORF9JTklUKCZtLT5jdikpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgbS0+bG9ja2VkID0gMDsKICAgICByZXR1cm4gbTsKIGZhaWw6Ci0gICAgZnJlZShtKTsKKyAgICBQeU1lbV9SYXdGcmVlKG0pOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC01Niw3ICs1Niw3IEBACiAgICAgaWYgKG11dGV4KSB7CiAgICAgICAgIFB5Q09ORF9GSU5JKCZtdXRleC0+Y3YpOwogICAgICAgICBQeU1VVEVYX0ZJTkkoJm11dGV4LT5jcyk7Ci0gICAgICAgIGZyZWUobXV0ZXgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG11dGV4KTsKICAgICB9CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIHJlc3VsdCA9IFB5Q09ORF9TSUdOQUwoJm11dGV4LT5jdik7CiAgICAgcmVzdWx0ICY9IFB5TVVURVhfVU5MT0NLKCZtdXRleC0+Y3MpOwogICAgIHJldHVybiByZXN1bHQ7Ci19ICAgIAorfQogCiAjZWxzZSAvKiBpZiAhIF9QWV9VU0VfQ1ZfTE9DS1MgKi8KIApAQCAtMTMwLDcgKzEzMCw3IEBACiBEV09SRAogRW50ZXJOb25SZWN1cnNpdmVNdXRleChQTlJNVVRFWCBtdXRleCwgRFdPUkQgbWlsbGlzZWNvbmRzKQogewotICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0KG11dGV4LCBtaWxsaXNlY29uZHMpOworICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgobXV0ZXgsIG1pbGxpc2Vjb25kcywgRkFMU0UpOwogfQogCiBCT09MCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNjRiNS4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRlZCBieSBjdmFsZUBuZXRjb20uY29tICovCi0KLSNkZWZpbmUgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lIElOQ0xfRE9TU0VNQVBIT1JFUwotI2luY2x1ZGUgIm9zMi5oIgotI2luY2x1ZGUgImxpbWl0cy5oIgotCi0jaW5jbHVkZSAicHJvY2Vzcy5oIgotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvYnVpbHRpbi5oPgotI2luY2x1ZGUgPHN5cy9mbXV0ZXguaD4KLSNlbHNlCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCB0aHJlYWQgc3RhY2sgc2l6ZSBvZiA2NGtCICovCi0jaWYgIWRlZmluZWQoVEhSRUFEX1NUQUNLX1NJWkUpCi0jZGVmaW5lIFRIUkVBRF9TVEFDS19TSVpFICAgICAgIDB4MTAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIE9TMl9TVEFDS1NJWkUoeCkgICAgICAgICh4ID8geCA6IFRIUkVBRF9TVEFDS19TSVpFKQotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIEMgcGFja2FnZSwgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1QeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi1sb25nCi1QeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgaW50IHRocmVhZF9pZDsKLQotICAgIHRocmVhZF9pZCA9IF9iZWdpbnRocmVhZChmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1MyX1NUQUNLU0laRShfcHl0aHJlYWRfc3RhY2tzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOwotCi0gICAgaWYgKHRocmVhZF9pZCA9PSAtMSkgewotICAgICAgICBkcHJpbnRmKCgiX2JlZ2ludGhyZWFkIGZhaWxlZC4gcmV0dXJuICVsZFxuIiwgZXJybm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhyZWFkX2lkOwotfQotCi1sb25nCi1QeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUFBJQiBwaWI7Ci0gICAgUFRJQiB0aWI7Ci0jZW5kaWYKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJldHVybiBfZ2V0dGlkKCk7Ci0jZWxzZQotICAgIERvc0dldEluZm9CbG9ja3MoJnRpYiwgJnBpYik7Ci0gICAgcmV0dXJuIHRpYi0+dGliX3B0aWIyLT50aWIyX3VsdGlkOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCi0vKgotICogTG9jayBzdXBwb3J0LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIGFuIGV2ZW50IHNlbWFwaG9yZSBhbmQgY3JpdGljYWwKLSAqIHNlY3Rpb25zIHRvIG1ha2UgaXQgYmVoYXZlIG1vcmUgbGlrZSBhIHBvc2l4IG11dGV4IHRoYW4gaXRzIE9TLzIKLSAqIGNvdW50ZXJwYXJ0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBvczJfbG9ja190IHsKLSAgICBpbnQgaXNfc2V0OwotICAgIEhFViBjaGFuZ2VkOwotfSAqdHlwZV9vczJfbG9jazsKLQotUHlUaHJlYWRfdHlwZV9sb2NrCi1QeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBfZm11dGV4ICpzZW0gPSBtYWxsb2Moc2l6ZW9mKF9mbXV0ZXgpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlbHhcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIChsb25nKXNlbSkpOwotICAgIGlmIChfZm11dGV4X2NyZWF0ZShzZW0sIDApKSB7Ci0gICAgICAgIGZyZWUoc2VtKTsKLSAgICAgICAgc2VtID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spc2VtOwotI2Vsc2UKLSAgICBBUElSRVQgcmM7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3MyX2xvY2tfdCkpOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0KLSAgICBEb3NDcmVhdGVFdmVudFNlbShOVUxMLCAmbG9jay0+Y2hhbmdlZCwgMCwgMCk7Ci0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGxvY2stPmNoYW5nZWQpKTsKLQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKWxvY2s7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykgewotICAgICAgICBfZm11dGV4X2Nsb3NlKChfZm11dGV4ICopYUxvY2spOwotICAgICAgICBmcmVlKChfZm11dGV4ICopYUxvY2spOwotICAgIH0KLSNlbHNlCi0gICAgRG9zQ2xvc2VFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLSAgICBmcmVlKGFMb2NrKTsKLSNlbmRpZgotfQotCi0vKgotICogUmV0dXJuIDEgb24gc3VjY2VzcyBpZiB0aGUgbG9jayB3YXMgYWNxdWlyZWQKLSAqCi0gKiBhbmQgMCBpZiB0aGUgbG9jayB3YXMgbm90IGFjcXVpcmVkLgotICovCi1pbnQKLVB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpbnQgICBkb25lID0gMDsKLSAgICBVTE9ORyBjb3VudDsKLSAgICBQSUQgICBwaWQgPSAwOwotICAgIFRJRCAgIHRpZCA9IDA7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgd2FpdGZsYWcpKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogYWx3YXlzIHN1Y2Nlc3NmdWwgaWYgdGhlIGxvY2sgZG9lc24ndCBleGlzdCAqLwotICAgIGlmIChhTG9jayAmJgotICAgICAgICBfZm11dGV4X3JlcXVlc3QoKF9mbXV0ZXggKilhTG9jaywgd2FpdGZsYWcgPyAwIDogX0ZNUl9OT1dBSVQpKQotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIC8qIGlmIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBzZXQsIHdlIGhhdmUgdG8gd2FpdCBmb3IKLSAgICAgICAgICogdGhlIHN0YXRlIHRvIGNoYW5nZQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgaWYgKCF3YWl0ZmxhZykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIERvc1dhaXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCBTRU1fSU5ERUZJTklURV9XQUlUKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgdHJ5IHRvIGdldCB0aGUgc2VtYXBob3JlLiAgSWYKLSAgICAgICAgICogaXQgaXMgc3RpbGwgbG9ja2VkLCB3ZSB3aWxsIHRyeSBhZ2Fpbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBsb2NrLT5pc19zZXQgPSAxOwotICAgICAgICAgICAgRG9zUmVzZXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCAmY291bnQpOwotICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBEb3NFeGl0Q3JpdFNlYygpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spCi0gICAgICAgIF9mbXV0ZXhfcmVsZWFzZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSNlbHNlCi0gICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0gICAgRG9zUG9zdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotCi0gICAgRG9zRXhpdENyaXRTZWMoKTsKLSNlbmRpZgotfQotCi0vKiBtaW5pbXVtL21heGltdW0gdGhyZWFkIHN0YWNrIHNpemVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBUSFJFQURfTUlOX1NUQUNLU0laRSAgICAweDgwMDAgICAgICAgICAgLyogMzJrQiAqLwotI2RlZmluZSBUSFJFQURfTUFYX1NUQUNLU0laRSAgICAweDIwMDAwMDAgICAgICAgLyogMzJNQiAqLwotCi0vKiBzZXQgdGhlIHRocmVhZCBzdGFjayBzaXplLgotICogUmV0dXJuIDAgaWYgc2l6ZSBpcyB2YWxpZCwgLTEgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50Ci1fcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgLyogc2V0IHRvIGRlZmF1bHQgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiB2YWxpZCByYW5nZT8gKi8KLSAgICBpZiAoc2l6ZSA+PSBUSFJFQURfTUlOX1NUQUNLU0laRSAmJiBzaXplIDwgVEhSRUFEX01BWF9TVEFDS1NJWkUpIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IHNpemU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotI2RlZmluZSBUSFJFQURfU0VUX1NUQUNLU0laRSh4KSBfcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoeCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRoLmggYi9QeXRob24vdGhyZWFkX3B0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA0MjY2Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfcHRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0vKiBHTlUgcHRoIHRocmVhZHMgaW50ZXJmYWNlCi0gICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoCi0gICAyMDAwLTA1LTAzIEFuZHkgRHVzdG1hbiA8YW5keUBkdXN0bWFuLm5ldD4KLQotICAgQWRhcHRlZCBmcm9tIFBvc2l4IHRocmVhZHMgaW50ZXJmYWNlCi0gICAxMiBNYXkgMTk5NyAtLSBkYXZpZCBhcm5vbGQgPGRhdmlkYUBwb2JveC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHB0aC5oPgotCi0vKiBBIHB0aCBtdXRleCBpc24ndCBzdWZmaWNpZW50IHRvIG1vZGVsIHRoZSBQeXRob24gbG9jayB0eXBlCi0gKiBiZWNhdXNlIHB0aCBtdXRleGVzIGNhbiBiZSBhY3F1aXJlZCBtdWx0aXBsZSB0aW1lcyBieSB0aGUKLSAqIHNhbWUgdGhyZWFkLgotICoKLSAqIFRoZSBwdGhfbG9jayBzdHJ1Y3QgaW1wbGVtZW50cyBhIFB5dGhvbiBsb2NrIGFzIGEgImxvY2tlZD8iIGJpdAotICogYW5kIGEgPGNvbmRpdGlvbiwgbXV0ZXg+IHBhaXIuICBJbiBnZW5lcmFsLCBpZiB0aGUgYml0IGNhbiBiZSBhY3F1aXJlZAotICogaW5zdGFudGx5LCBpdCBpcywgZWxzZSB0aGUgcGFpciBpcyB1c2VkIHRvIGJsb2NrIHRoZSB0aHJlYWQgdW50aWwgdGhlCi0gKiBiaXQgaXMgY2xlYXJlZC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAgICAgICAgICAgICBsb2NrZWQ7IC8qIDA9dW5sb2NrZWQsIDE9bG9ja2VkICovCi0gICAgLyogYSA8Y29uZCwgbXV0ZXg+IHBhaXIgdG8gaGFuZGxlIGFuIGFjcXVpcmUgb2YgYSBsb2NrZWQgbG9jayAqLwotICAgIHB0aF9jb25kX3QgICBsb2NrX3JlbGVhc2VkOwotICAgIHB0aF9tdXRleF90ICBtdXQ7Ci19IHB0aF9sb2NrOwotCi0jZGVmaW5lIENIRUNLX1NUQVRVUyhuYW1lKSAgaWYgKHN0YXR1cyA9PSAtMSkgeyBwcmludGYoIiVkICIsIHN0YXR1cyk7IHBlcnJvcihuYW1lKTsgZXJyb3IgPSAxOyB9Ci0KLXB0aF9hdHRyX3QgUHlUaHJlYWRfYXR0cjsKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotICAgIHB0aF9pbml0KCk7Ci0gICAgUHlUaHJlYWRfYXR0ciA9IHB0aF9hdHRyX25ldygpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9TVEFDS19TSVpFLCAxPDwxOCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX0pPSU5BQkxFLCBGQUxTRSk7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotCi0KLWxvbmcgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIHB0aF90IHRoOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICB0aCA9IHB0aF9zcGF3bihQeVRocmVhZF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCogKCopKHZvaWQgKikpZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIHJldHVybiB0aDsKLX0KLQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0gICAgdm9sYXRpbGUgcHRoX3QgdGhyZWFkaWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICB0aHJlYWRpZCA9IHB0aF9zZWxmKCk7Ci0gICAgcmV0dXJuIChsb25nKSB0aHJlYWRpZDsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgfQotfQotCi0vKgotICogTG9jayBzdXBwb3J0LgotICovCi1QeVRocmVhZF90eXBlX2xvY2sgUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotICAgIHB0aF9sb2NrICpsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrID0gKHB0aF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRoX2xvY2spKTsKLSAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRoX2xvY2spKTsKLSAgICBpZiAobG9jaykgewotICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfaW5pdCgmbG9jay0+bXV0KTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfaW5pdCIpOwotICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9pbml0KCZsb2NrLT5sb2NrX3JlbGVhc2VkKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9pbml0Iik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOwotICAgICAgICAgICAgbG9jayA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwgbG9jaykpOwotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBsb2NrOwotfQotCi12b2lkIFB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKLX0KLQotaW50IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgaW50IHdhaXRmbGFnKQotewotICAgIGludCBzdWNjZXNzOwotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzFdIik7Ci0gICAgc3VjY2VzcyA9IHRoZWxvY2stPmxvY2tlZCA9PSAwOwotICAgIGlmIChzdWNjZXNzKSB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsxXSIpOwotCi0gICAgaWYgKCAhc3VjY2VzcyAmJiB3YWl0ZmxhZyApIHsKLSAgICAgICAgLyogY29udGludWUgdHJ5aW5nIHVudGlsIHdlIGdldCB0aGUgbG9jayAqLwotCi0gICAgICAgIC8qIG11dCBtdXN0IGJlIGxvY2tlZCBieSBtZSAtLSBwYXJ0IG9mIHRoZSBjb25kaXRpb24KLSAgICAgICAgICogcHJvdG9jb2wgKi8KLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzJdIik7Ci0gICAgICAgIHdoaWxlICggdGhlbG9jay0+bG9ja2VkICkgewotICAgICAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfYXdhaXQoJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0LCBOVUxMKTsKLSAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfYXdhaXQiKTsKLSAgICAgICAgfQotICAgICAgICB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzJdIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAxOwotICAgIH0KLSAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSAwOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdm9pZCBQeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsIDAsIE5VTEwgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzNdIik7Ci0KLSAgICB0aGVsb2NrLT5sb2NrZWQgPSAwOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzNdIik7Ci0KLSAgICAvKiB3YWtlIHVwIHNvbWVvbmUgKGFueW9uZSwgaWYgYW55KSB3YWl0aW5nIG9uIHRoZSBsb2NrICovCi0gICAgc3RhdHVzID0gcHRoX2NvbmRfbm90aWZ5KCAmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwgMCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfbm90aWZ5Iik7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaCBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCmluZGV4IGU5MGFlN2UuLjIwZjg1MzUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHNlbV90ICopbWFsbG9jKHNpemVvZihzZW1fdCkpOworICAgIGxvY2sgPSAoc2VtX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHNlbV90KSk7CiAKICAgICBpZiAobG9jaykgewogICAgICAgICBzdGF0dXMgPSBzZW1faW5pdChsb2NrLDAsMSk7CiAgICAgICAgIENIRUNLX1NUQVRVUygic2VtX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgc3RhdHVzID0gc2VtX2Rlc3Ryb3kodGhlbG9jayk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1fZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogLyoKQEAgLTQxMCw3ICs0MTAsNyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOworICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF9kZXN0cm95KCAmdGhlbG9jay0+bXV0ICk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIFB5TG9ja1N0YXR1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RyYWNlYmFjay5jIGIvUHl0aG9uL3RyYWNlYmFjay5jCmluZGV4IDc0MDc1YzkuLmU5MTY5Y2UgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90cmFjZWJhY2suYworKysgYi9QeXRob24vdHJhY2ViYWNrLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlUcmFjZWJhY2tPYmplY3QsIHgpCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKyNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCAoaW50KXN0cmxlbihzdHIpKQogI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSCA1MDAKICNkZWZpbmUgTUFYX0ZSQU1FX0RFUFRIIDEwMAogI2RlZmluZSBNQVhfTlRIUkVBRFMgMTAwCkBAIC0yMSw2ICsyMSwxMSBAQAogLyogRnVuY3Rpb24gZnJvbSBQYXJzZXIvdG9rZW5pemVyLmMgKi8KIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoaW50LCBQeU9iamVjdCAqKTsKIAorX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CitfUHlfSURFTlRJRklFUihjbG9zZSk7CitfUHlfSURFTlRJRklFUihvcGVuKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdGJfZGlyKFB5VHJhY2ViYWNrT2JqZWN0ICpzZWxmKQogewpAQCAtMTUyLDcgKzE1Nyw2IEBACiAgICAgY29uc3QgY2hhciogZmlsZXBhdGg7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKIAogICAgIGZpbGVieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwogICAgIGlmIChmaWxlYnl0ZXMgPT0gTlVMTCkgewpAQCAtMTY5LDcgKzE3Myw3IEBACiAgICAgICAgIHRhaWwrKzsKICAgICB0YWlsbGVuID0gc3RybGVuKHRhaWwpOwogCi0gICAgc3lzcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOworICAgIHN5c3BhdGggPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcGF0aCk7CiAgICAgaWYgKHN5c3BhdGggPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKHN5c3BhdGgpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIG5wYXRoID0gUHlMaXN0X1NpemUoc3lzcGF0aCk7CkBAIC0yMzIsOSArMjM2LDYgQEAKICAgICBjaGFyIGJ1ZltNQVhQQVRITEVOKzFdOwogICAgIGludCBraW5kOwogICAgIHZvaWQgKmRhdGE7Ci0gICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOwotICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwotICAgIF9QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOwogCiAgICAgLyogb3BlbiB0aGUgZmlsZSAqLwogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQpAQCAtMjQ2LDEwICsyNDcsMTIgQEAKICAgICBiaW5hcnkgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9vcGVuLCAiT3MiLCBmaWxlbmFtZSwgInJiIik7CiAKICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgICAgICBiaW5hcnkgPSBfUHlfRmluZFNvdXJjZUZpbGUoZmlsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlvKTsKICAgICAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2OSwxMyArNDcyLDEzIEBACiAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgbGVuKTsKIH0KIAotLyogRm9ybWF0IGFuIGludGVnZXIgaW4gcmFuZ2UgWzA7IDB4ZmZmZmZmZmZdIHRvIGhleGRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCisvKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4YWRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCiAgICBhbmQgd3JpdGUgaXQgaW50byB0aGUgZmlsZSBmZC4KIAogICAgVGhpcyBmdW5jdGlvbiBpcyBzaWduYWwgc2FmZS4gKi8KIAogc3RhdGljIHZvaWQKLWR1bXBfaGV4YWRlY2ltYWwoaW50IHdpZHRoLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZmQpCitkdW1wX2hleGFkZWNpbWFsKGludCBmZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IHdpZHRoKQogewogICAgIGludCBsZW47CiAgICAgY2hhciBidWZmZXJbc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMiArIDFdOwpAQCAtNTQyLDE1ICs1NDUsMTUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHgiKTsKLSAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoMiwgY2gsIGZkKTsKKyAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCAyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmZmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcdSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg0LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcVSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg4LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICh0cnVuY2F0ZWQpCkBAIC02MDEsNyArNjA0LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgZGVwdGg7CiAKICAgICBpZiAod3JpdGVfaGVhZGVyKQotICAgICAgICBQVVRTKGZkLCAiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOworICAgICAgICBQVVRTKGZkLCAiU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiAKICAgICBmcmFtZSA9IF9QeVRocmVhZFN0YXRlX0dldEZyYW1lKHRzdGF0ZSk7CiAgICAgaWYgKGZyYW1lID09IE5VTEwpCkBAIC02MzksOCArNjQyLDggQEAKICAgICAgICAgUFVUUyhmZCwgIkN1cnJlbnQgdGhyZWFkIDB4Iik7CiAgICAgZWxzZQogICAgICAgICBQVVRTKGZkLCAiVGhyZWFkIDB4Iik7Ci0gICAgZHVtcF9oZXhhZGVjaW1hbChzaXplb2YobG9uZykqMiwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIGZkKTsKLSAgICBQVVRTKGZkLCAiOlxuIik7CisgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIHNpemVvZihsb25nKSoyKTsKKyAgICBQVVRTKGZkLCAiIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOwogfQogCiBjb25zdCBjaGFyKgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGY2ZjhlYTAuLjZhNzgwNDYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNSArMSw1IEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuMy4zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuNC4wIGJldGEgMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAogMjAxMiwgMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC01Miw5ICs1Miw5IEBACiAtLS0tLS0tLS0tCiAKIFdlIHRyeSB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgIldoYXQncyBOZXcgaW4KLVB5dGhvbiAzLjMiIGRvY3VtZW50LCBmb3VuZCBhdAorUHl0aG9uIDMuNCIgZG9jdW1lbnQsIGZvdW5kIGF0CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy8zLjMuaHRtbAorICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3LzMuNC5odG1sCiAKIEZvciBhIG1vcmUgZGV0YWlsZWQgY2hhbmdlIGxvZywgcmVhZCBNaXNjL05FV1MgKHRob3VnaCB0aGlzIGZpbGUsIHRvbywgaXMKIGluY29tcGxldGUsIGFuZCBhbHNvIGRvZXNuJ3QgbGlzdCBhbnl0aGluZyBtZXJnZWQgaW4gZnJvbSB0aGUgMi43IHJlbGVhc2UgdW5kZXIKQEAgLTY3LDkgKzY3LDkgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuMyBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CitEb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy40IGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKIAotICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLworICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LwogCiBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIG1hbnkgZm9ybWF0cyBmb3IgZmFzdGVyIGFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uCiBpcyBkb3dubG9hZGFibGUgaW4gSFRNTCwgUERGLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXRzOyB0aGUgbGF0dGVyIHZlcnNpb24KQEAgLTk0LDcgKzk0LDcgQEAKIEEgc291cmNlLXRvLXNvdXJjZSB0cmFuc2xhdGlvbiB0b29sLCAiMnRvMyIsIGNhbiB0YWtlIGNhcmUgb2YgdGhlIG11bmRhbmUgdGFzawogb2YgY29udmVydGluZyBsYXJnZSBhbW91bnRzIG9mIHNvdXJjZSBjb2RlLiAgSXQgaXMgbm90IGEgY29tcGxldGUgc29sdXRpb24gYnV0CiBpcyBjb21wbGVtZW50ZWQgYnkgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGluIDIuNi4gIFNlZQotaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiBUZXN0aW5nCkBAIC0xMzIsNyArMTMyLDcgQEAKIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIgdmVyc2lvbnMgdXNpbmcKICJtYWtlIGFsdGluc3RhbGwiLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuMyB3aXRoIDIuNyBiZWluZyB0aGUKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy40IHdpdGggMi43IGJlaW5nIHRoZQogcHJpbWFyeSB2ZXJzaW9uLCB5b3Ugd291bGQgZXhlY3V0ZSAibWFrZSBpbnN0YWxsIiBpbiB5b3VyIDIuNyBidWlsZCBkaXJlY3RvcnkKIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBpbiB0aGUgb3RoZXJzLgogCkBAIC0xNjgsNyArMTY4LDcgQEAKIFJlbGVhc2UgU2NoZWR1bGUKIC0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIFBFUCAzOTggZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk4LworU2VlIFBFUCA0MjkgZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI5LwogCiAKIENvcHlyaWdodCBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IGQyZmYyNTUuLjRjM2I2N2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTQsMTggKzQsMTggQEAKIGNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCiBjYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAogCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODVnLmRsbCAoCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCitpZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODZ0Zy5kbGwgKAorICAgIGNkIHRjbC04LjYuMS4wXHdpbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIAotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjExLjBcd2luICAgIAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODZ0Zy5kbGwgKAorICAgIGNkIHRrLTguNi4xLjBcd2luICAgIAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmluZGV4IGM2Mjc4YjIuLjI0NGFiZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdApAQCAtMzAsMTkgKzMwLDIwIEBACiApCiAKIEByZW0gdGNsL3RrCi1pZiBub3QgZXhpc3QgdGNsLTguNS4xMS4wICgKLSAgIHJkIC9zL3EgdGNsdGsgdGNsdGs2NAotICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNS4xMS4wCitpZiBub3QgZXhpc3QgdGNsLTguNi4xLjAgKAorICAgcmQgL3MvcSB0Y2x0ayB0Y2x0azY0IHRjbC04LjUuMTEuMCB0ay04LjUuMTEuMAorICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNi4xLjAKICkKLWlmIG5vdCBleGlzdCB0ay04LjUuMTEuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMTEuMAoraWYgbm90IGV4aXN0IHRrLTguNi4xLjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC42LjEuMAogCiBAcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy43LjEyICgKLSAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjcuMTIKK2lmIG5vdCBleGlzdCBzcWxpdGUtMy44LjEgKAorICByZCAvcy9xIHNxbGl0ZS1zb3VyY2UtMy43LjEyCisgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjguMQogKQogCiBAcmVtIGx6bWEKLWlmIG5vdCBleGlzdCB4ei01LjAuMyAoCi0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC4zCitpZiBub3QgZXhpc3QgeHotNS4wLjUgKAorICByZCAvcy9xIHh6LTUuMC4zCisgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC41CiApCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKaW5kZXggZWQ1YzEwZS4uYzU4MGExNCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdApAQCAtNCwxOCArNCwxOCBAQAogY2FsbCAiVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtY29tbW9uLmJhdCIKIGNhbGwgIiVWUzEwMENPTU5UT09MUyVcdnN2YXJzMzIuYmF0IgogCi1pZiBub3QgZXhpc3QgdGNsdGtcYmluXHRjbDg1Zy5kbGwgKAoraWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NnRnLmRsbCAoCiAgICAgQHJlbSBhbGwgYW5kIGluc3RhbGwgbmVlZCB0byBiZSBzZXBhcmF0ZSBpbnZvY2F0aW9ucywgb3RoZXJ3aXNlIG5tYWtlaGxwIGlzIG5vdCBmb3VuZCBvbiBpbnN0YWxsCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBhbGwgCisgICAgY2QgdGNsLTguNi4xLjBcd2luCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKLWlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGluc3RhbGwKK2lmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NnRnLmRsbCAoCisgICAgY2QgdGstOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pYy5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzMzMmIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKQEAgLTAsMCArMSwyNzI4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYWJjCitpbXBvcnQgYXN0CitpbXBvcnQgYXRleGl0CitpbXBvcnQgY2xpbmljCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKKworIyBUT0RPOgorIworIyBzb29uOgorIworIyAqIGFsbG93IG1peGluZyBhbnkgdHdvIG9mIHtwb3NpdGlvbmFsLW9ubHksIHBvc2l0aW9uYWwtb3Ita2V5d29yZCwKKyMgICBrZXl3b3JkLW9ubHl9CisjICAgICAgICogZGljdCBjb25zdHJ1Y3RvciB1c2VzIHBvc2l0aW9uYWwtb25seSBhbmQga2V5d29yZC1vbmx5CisjICAgICAgICogbWF4IGFuZCBtaW4gdXNlIHBvc2l0aW9uYWwgb25seSB3aXRoIGFuIG9wdGlvbmFsIGdyb3VwCisjICAgICAgICAgYW5kIGtleXdvcmQtb25seQorIworCit2ZXJzaW9uID0gJzEnCisKK19lbXB0eSA9IGluc3BlY3QuX2VtcHR5Citfdm9pZCA9IGluc3BlY3QuX3ZvaWQKKworCitjbGFzcyBVbnNwZWNpZmllZDoKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFVuc3BlY2lmaWVkPicKKwordW5zcGVjaWZpZWQgPSBVbnNwZWNpZmllZCgpCisKKworY2xhc3MgTnVsbDoKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPE51bGw+JworCitOVUxMID0gTnVsbCgpCisKKworZGVmIF90ZXh0X2FjY3VtdWxhdG9yKCk6CisgICAgdGV4dCA9IFtdCisgICAgZGVmIG91dHB1dCgpOgorICAgICAgICBzID0gJycuam9pbih0ZXh0KQorICAgICAgICB0ZXh0LmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIHMKKyAgICByZXR1cm4gdGV4dCwgdGV4dC5hcHBlbmQsIG91dHB1dAorCisKK2RlZiB0ZXh0X2FjY3VtdWxhdG9yKCk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0IGFjY3VtdWxhdG9yIC8gam9pbmVyLgorCisgICAgUmV0dXJucyBhIHBhaXIgb2YgY2FsbGFibGVzOgorICAgICAgICBhcHBlbmQsIG91dHB1dAorICAgICJhcHBlbmQiIGFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGFjY3VtdWxhdG9yLgorICAgICJvdXRwdXQiIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBhY2N1bXVsYXRvcgorICAgICAgIGpvaW5lZCB0b2dldGhlciAoJycuam9pbihhY2N1bXVsYXRvcikpIGFuZAorICAgICAgIGVtcHRpZXMgdGhlIGFjY3VtdWxhdG9yLgorICAgICIiIgorICAgIHRleHQsIGFwcGVuZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIHJldHVybiBhcHBlbmQsIG91dHB1dAorCisKK2RlZiBmYWlsKCphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICBqb2luZWQgPSAiICIuam9pbihbc3RyKGEpIGZvciBhIGluIGFyZ3NdKQorICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgYWRkKCJFcnJvciIpCisgICAgaWYgY2xpbmljOgorICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgaWYgY2xpbmljLmJsb2NrX3BhcnNlciBhbmQgKGxpbmVfbnVtYmVyIGlzIE5vbmUpOgorICAgICAgICAgICAgbGluZV9udW1iZXIgPSBjbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGFkZCgnIGluIGZpbGUgIicgKyBmaWxlbmFtZSArICciJykKKyAgICBpZiBsaW5lX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCIgb24gbGluZSAiICsgc3RyKGxpbmVfbnVtYmVyKSkKKyAgICBhZGQoJzpcbicpCisgICAgYWRkKGpvaW5lZCkKKyAgICBwcmludChvdXRwdXQoKSkKKyAgICBzeXMuZXhpdCgtMSkKKworCisKK2RlZiBxdW90ZWRfZm9yX2Nfc3RyaW5nKHMpOgorICAgIGZvciBvbGQsIG5ldyBpbiAoCisgICAgICAgICgnIicsICdcXCInKSwKKyAgICAgICAgKCInIiwgIlxcJyIpLAorICAgICAgICApOgorICAgICAgICBzID0gcy5yZXBsYWNlKG9sZCwgbmV3KQorICAgIHJldHVybiBzCisKK2lzX2xlZ2FsX2NfaWRlbnRpZmllciA9IHJlLmNvbXBpbGUoJ15bQS1aYS16X11bQS1aYS16MC05X10qJCcpLm1hdGNoCisKK2RlZiBpc19sZWdhbF9weV9pZGVudGlmaWVyKHMpOgorICAgIHJldHVybiBhbGwoaXNfbGVnYWxfY19pZGVudGlmaWVyKGZpZWxkKSBmb3IgZmllbGQgaW4gcy5zcGxpdCgnLicpKQorCisjIGFkZGVkICJtb2R1bGUiLCAic2VsZiIsICJjbHMiLCBhbmQgIm51bGwiIGp1c3QgdG8gYmUgc2FmZQorIyAoY2xpbmljIHdpbGwgZ2VuZXJhdGUgdmFyaWFibGVzIHdpdGggdGhlc2UgbmFtZXMpCitjX2tleXdvcmRzID0gc2V0KCIiIgorYXNtIGF1dG8gYnJlYWsgY2FzZSBjaGFyIGNscyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGRvdWJsZQorZWxzZSBlbnVtIGV4dGVybiBmbG9hdCBmb3IgZ290byBpZiBpbmxpbmUgaW50IGxvbmcgbW9kdWxlIG51bGwKK3JlZ2lzdGVyIHJldHVybiBzZWxmIHNob3J0IHNpZ25lZCBzaXplb2Ygc3RhdGljIHN0cnVjdCBzd2l0Y2gKK3R5cGVkZWYgdHlwZW9mIHVuaW9uIHVuc2lnbmVkIHZvaWQgdm9sYXRpbGUgd2hpbGUKKyIiIi5zdHJpcCgpLnNwbGl0KCkpCisKK2RlZiBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICMgZm9yIG5vdywganVzdCBjb21wbGFpbiBpZiB3aGF0IHdlJ3JlIGdpdmVuIGlzbid0IGxlZ2FsCisgICAgaWYgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihzKToKKyAgICAgICAgZmFpbCgiSWxsZWdhbCBDIGlkZW50aWZpZXI6IHt9Ii5mb3JtYXQocykpCisgICAgIyBidXQgaWYgd2UgcGlja2VkIGEgQyBrZXl3b3JkLCBwaWNrIHNvbWV0aGluZyBlbHNlCisgICAgaWYgcyBpbiBjX2tleXdvcmRzOgorICAgICAgICByZXR1cm4gcyArICJfdmFsdWUiCisgICAgcmV0dXJuIHMKKworZGVmIHJzdHJpcF9saW5lcyhzKToKKyAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBhZGQobGluZS5yc3RyaXAoKSkKKyAgICAgICAgYWRkKCdcbicpCisgICAgdGV4dC5wb3AoKQorICAgIHJldHVybiBvdXRwdXQoKQorCitkZWYgbGluZWFyX2Zvcm1hdChzLCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgUGVyZm9ybSBzdHIuZm9ybWF0LWxpa2Ugc3Vic3RpdHV0aW9uLCBleGNlcHQ6CisgICAgICAqIFRoZSBzdHJpbmdzIHN1YnN0aXR1dGVkIG11c3QgYmUgb24gbGluZXMgYnkKKyAgICAgICAgdGhlbXNlbHZlcy4gIChUaGlzIGxpbmUgaXMgdGhlICJzb3VyY2UgbGluZSIuKQorICAgICAgKiBJZiB0aGUgc3Vic3RpdHV0aW9uIHRleHQgaXMgZW1wdHksIHRoZSBzb3VyY2UgbGluZQorICAgICAgICBpcyByZW1vdmVkIGluIHRoZSBvdXRwdXQuCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBub3QgZW1wdHk6CisgICAgICAgICAgKiBFYWNoIGxpbmUgb2YgdGhlIHN1YnN0aXR1dGVkIHRleHQgaXMgaW5kZW50ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBpbmRlbnQgb2YgdGhlIHNvdXJjZSBsaW5lLgorICAgICAgICAgICogQSBuZXdsaW5lIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZC4KKyAgICAiIiIKKworICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgaW5kZW50LCBjdXJseSwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbigneycpCisgICAgICAgIGlmIG5vdCBjdXJseToKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5hbWUsIGN1cmwsIHRyYWlsaW5nID0gdHJhaWxpbmcucGFydGl0aW9uKCd9JykKKyAgICAgICAgaWYgbm90IGN1cmx5IG9yIG5hbWUgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHRyYWlsaW5nOgorICAgICAgICAgICAgZmFpbCgiVGV4dCBmb3VuZCBhZnRlciB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKyAgICAgICAgaWYgaW5kZW50LnN0cmlwKCk6CisgICAgICAgICAgICBmYWlsKCJOb24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvdW5kIGJlZm9yZSB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKworICAgICAgICB2YWx1ZSA9IGt3YXJnc1tuYW1lXQorICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHZhbHVlID0gdGV4dHdyYXAuaW5kZW50KHJzdHJpcF9saW5lcyh2YWx1ZSksIGluZGVudCkKKyAgICAgICAgYWRkKHZhbHVlKQorICAgICAgICBhZGQoJ1xuJykKKworICAgIHJldHVybiBvdXRwdXQoKVs6LTFdCisKK2RlZiB2ZXJzaW9uX3NwbGl0dGVyKHMpOgorICAgICIiIlNwbGl0cyBhIHZlcnNpb24gc3RyaW5nIGludG8gYSB0dXBsZSBvZiBpbnRlZ2Vycy4KKworICAgIFRoZSBmb2xsb3dpbmcgQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCwgYW5kIGVtcGxveQorICAgIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CisgICAgICAgIGEgLT4gLTMKKyAgICAgICAgYiAtPiAtMgorICAgICAgICBjIC0+IC0xCisgICAgKFRoaXMgcGVybWl0cyBQeXRob24tc3R5bGUgdmVyc2lvbiBzdHJpbmdzIHN1Y2ggYXMgIjEuNGIzIi4pCisgICAgIiIiCisgICAgdmVyc2lvbiA9IFtdCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGRlZiBmbHVzaCgpOgorICAgICAgICBpZiBub3QgYWNjdW11bGF0b3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNYWxmb3JtZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyByZXByKHMpKQorICAgICAgICB2ZXJzaW9uLmFwcGVuZChpbnQoJycuam9pbihhY2N1bXVsYXRvcikpKQorICAgICAgICBhY2N1bXVsYXRvci5jbGVhcigpCisKKyAgICBmb3IgYyBpbiBzOgorICAgICAgICBpZiBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChjKQorICAgICAgICBlbGlmIGMgPT0gJy4nOgorICAgICAgICAgICAgZmx1c2goKQorICAgICAgICBlbGlmIGMgaW4gJ2FiYyc6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgICAgICB2ZXJzaW9uLmFwcGVuZCgnYWJjJy5pbmRleChjKSAtIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbGxlZ2FsIGNoYXJhY3RlciAnICsgcmVwcihjKSArICcgaW4gdmVyc2lvbiBzdHJpbmcgJyArIHJlcHIocykpCisgICAgZmx1c2goKQorICAgIHJldHVybiB0dXBsZSh2ZXJzaW9uKQorCitkZWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24xLCB2ZXJzaW9uMik6CisgICAgaXRlcmF0b3IgPSBpdGVydG9vbHMuemlwX2xvbmdlc3QodmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMSksIHZlcnNpb25fc3BsaXR0ZXIodmVyc2lvbjIpLCBmaWxsdmFsdWU9MCkKKyAgICBmb3IgaSwgKGEsIGIpIGluIGVudW1lcmF0ZShpdGVyYXRvcik6CisgICAgICAgIGlmIGEgPCBiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGEgPiBiOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCisKK2NsYXNzIENSZW5kZXJEYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgdG8gZGVjbGFyZSB2YXJpYWJsZXMuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5kZWNsYXJhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSBwYXJzZSBjYWxsLgorICAgICAgICAjIFNob3VsZCBiZSBmdWxsIGxpbmVzIHdpdGggXG4gZW9sIGNoYXJhY3RlcnMuCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZXJzID0gW10KKworICAgICAgICAjIFRoZSBlbnRyaWVzIGZvciB0aGUgImtleXdvcmRzIiBhcnJheSBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgIyBTaG91bGQgYmUgaW5kaXZpZHVhbCBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgbmFtZXMuCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBbXQorCisgICAgICAgICMgVGhlICJmb3JtYXQgdW5pdHMiIGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgdGhhdCB3aWxsIGdldAorICAgICAgICBzZWxmLmZvcm1hdF91bml0cyA9IFtdCisKKyAgICAgICAgIyBUaGUgdmFyYXJncyBhcmd1bWVudHMgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIFRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5pbXBsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgICMgVGhlIGFyZ3VtZW50cyB0byB0aGUgaW1wbCBmdW5jdGlvbiBhdCB0aGUgdGltZSBpdCdzIGNhbGxlZC4KKyAgICAgICAgc2VsZi5pbXBsX2FyZ3VtZW50cyA9IFtdCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0CisgICAgICAgICMgc2hvdWxkIHJlY2VpdmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbXBsLgorICAgICAgICBzZWxmLnJldHVybl92YWx1ZSA9ICJyZXR1cm5fdmFsdWUiCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBjb2RlIHRvIGNvbnZlcnQgdGhlIHJldHVybgorICAgICAgICAjIHZhbHVlIGZyb20gdGhlIHBhcnNlIGZ1bmN0aW9uLiAgVGhpcyBpcyBhbHNvIHdoZXJlCisgICAgICAgICMgeW91IHNob3VsZCBjaGVjayB0aGUgX3JldHVybl92YWx1ZSBmb3IgZXJyb3JzLCBhbmQKKyAgICAgICAgIyAiZ290byBleGl0IiBpZiB0aGVyZSBhcmUgYW55LgorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJzaW9uID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhlIGltcGwgY2FsbC4KKyAgICAgICAgc2VsZi5jbGVhbnVwID0gW10KKworCitjbGFzcyBMYW5ndWFnZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorCisgICAgc3RhcnRfbGluZSA9ICIiCisgICAgYm9keV9wcmVmaXggPSAiIgorICAgIHN0b3BfbGluZSA9ICIiCisgICAgY2hlY2tzdW1fbGluZSA9ICIiCisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbmRlcihzZWxmLCBibG9jayk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGFzc2VydF9vbmx5X29uZShmaWVsZCwgdG9rZW49J2RzbF9uYW1lJyk6CisgICAgICAgICAgICBsaW5lID0gZ2V0YXR0cihzZWxmLCBmaWVsZCkKKyAgICAgICAgICAgIHRva2VuID0gJ3snICsgdG9rZW4gKyAnfScKKyAgICAgICAgICAgIGlmIGxlbihsaW5lLnNwbGl0KHRva2VuKSkgIT0gMjoKKyAgICAgICAgICAgICAgICBmYWlsKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgIiAiICsgZmllbGQgKyAiIG11c3QgY29udGFpbiAiICsgdG9rZW4gKyAiIGV4YWN0bHkgb25jZSEiKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0YXJ0X2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0b3BfbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnY2hlY2tzdW1fbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnY2hlY2tzdW1fbGluZScsICdjaGVja3N1bScpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuYm9keV9wcmVmaXguc3BsaXQoJ3tkc2xfbmFtZX0nKSkgPj0gMzoKKyAgICAgICAgICAgIGZhaWwoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAiIGJvZHlfcHJlZml4IG1heSBjb250YWluICIgKyB0b2tlbiArICIgb25jZSBhdCBtb3N0ISIpCisKKworCitjbGFzcyBQeXRob25MYW5ndWFnZShMYW5ndWFnZSk6CisKKyAgICBsYW5ndWFnZSAgICAgID0gJ1B5dGhvbicKKyAgICBzdGFydF9saW5lICAgID0gIiMvKlt7ZHNsX25hbWV9XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiMiCisgICAgc3RvcF9saW5lICAgICA9ICIjW3tkc2xfbmFtZX1dKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIjLypbe2RzbF9uYW1lfSBjaGVja3N1bToge2NoZWNrc3VtfV0qLyIKKworCitkZWYgcGVybXV0ZV9sZWZ0X29wdGlvbl9ncm91cHMobCk6CisgICAgIiIiCisgICAgR2l2ZW4gWzEsIDIsIDNdLCBzaG91bGQgeWllbGQ6CisgICAgICAgKCkKKyAgICAgICAoMywpCisgICAgICAgKDIsIDMpCisgICAgICAgKDEsIDIsIDMpCisgICAgIiIiCisgICAgeWllbGQgdHVwbGUoKQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBmb3IgZ3JvdXAgaW4gcmV2ZXJzZWQobCk6CisgICAgICAgIGFjY3VtdWxhdG9yID0gbGlzdChncm91cCkgKyBhY2N1bXVsYXRvcgorICAgICAgICB5aWVsZCB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgcGVybXV0ZV9yaWdodF9vcHRpb25fZ3JvdXBzKGwpOgorICAgICIiIgorICAgIEdpdmVuIFsxLCAyLCAzXSwgc2hvdWxkIHlpZWxkOgorICAgICAgKCkKKyAgICAgICgxLCkKKyAgICAgICgxLCAyKQorICAgICAgKDEsIDIsIDMpCisgICAgIiIiCisgICAgeWllbGQgdHVwbGUoKQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBmb3IgZ3JvdXAgaW4gbDoKKyAgICAgICAgYWNjdW11bGF0b3IuZXh0ZW5kKGdyb3VwKQorICAgICAgICB5aWVsZCB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAiIiIKKyAgICBHZW5lcmF0b3IgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgc2V0IG9mIGFjY2VwdGFibGUKKyAgICBhcmd1bWVudCBsaXN0cyBmb3IgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlcyBvZgorICAgIGFyZ3VtZW50IGdyb3Vwcy4gIChBY3R1YWxseSBpdCBnZW5lcmF0ZXMgYSB0dXBsZSBvZiB0dXBsZXMuKQorCisgICAgQWxnb3JpdGhtOiBwcmVmZXIgbGVmdCBvcHRpb25zIG92ZXIgcmlnaHQgb3B0aW9ucy4KKworICAgIElmIHJlcXVpcmVkIGlzIGVtcHR5LCBsZWZ0IG11c3QgYWxzbyBiZSBlbXB0eS4KKyAgICAiIiIKKyAgICByZXF1aXJlZCA9IHR1cGxlKHJlcXVpcmVkKQorICAgIHJlc3VsdCA9IFtdCisKKyAgICBpZiBub3QgcmVxdWlyZWQ6CisgICAgICAgIGFzc2VydCBub3QgbGVmdAorCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGNvdW50cyA9IHNldCgpCisgICAgZm9yIHIgaW4gcGVybXV0ZV9yaWdodF9vcHRpb25fZ3JvdXBzKHJpZ2h0KToKKyAgICAgICAgZm9yIGwgaW4gcGVybXV0ZV9sZWZ0X29wdGlvbl9ncm91cHMobGVmdCk6CisgICAgICAgICAgICB0ID0gbCArIHJlcXVpcmVkICsgcgorICAgICAgICAgICAgaWYgbGVuKHQpIGluIGNvdW50czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgY291bnRzLmFkZChsZW4odCkpCisgICAgICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmQodCkKKworICAgIGFjY3VtdWxhdG9yLnNvcnQoa2V5PWxlbikKKyAgICByZXR1cm4gdHVwbGUoYWNjdW11bGF0b3IpCisKKworY2xhc3MgQ0xhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGxhbmd1YWdlICAgICAgPSAnQycKKyAgICBzdGFydF9saW5lICAgID0gIi8qW3tkc2xfbmFtZX1dIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIgorICAgIHN0b3BfbGluZSAgICAgPSAiW3tkc2xfbmFtZX1dKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIvKlt7ZHNsX25hbWV9IGNoZWNrc3VtOiB7Y2hlY2tzdW19XSovIgorCisgICAgZGVmIHJlbmRlcihzZWxmLCBzaWduYXR1cmVzKToKKyAgICAgICAgZnVuY3Rpb24gPSBOb25lCisgICAgICAgIGZvciBvIGluIHNpZ25hdHVyZXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIEZ1bmN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiWW91IG1heSBzcGVjaWZ5IGF0IG1vc3Qgb25lIGZ1bmN0aW9uIHBlciBibG9jay5cbkZvdW5kIGEgYmxvY2sgY29udGFpbmluZyBhdCBsZWFzdCB0d286XG5cdCIgKyByZXByKGZ1bmN0aW9uKSArICIgYW5kICIgKyByZXByKG8pKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gbworICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfZnVuY3Rpb24oZnVuY3Rpb24pCisKKyAgICBkZWYgZG9jc3RyaW5nX2Zvcl9jX3N0cmluZyhzZWxmLCBmKToKKyAgICAgICAgdGV4dCwgYWRkLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgICMgdHVybiBkb2NzdHJpbmcgaW50byBhIHByb3Blcmx5IHF1b3RlZCBDIHN0cmluZworICAgICAgICBmb3IgbGluZSBpbiBmLmRvY3N0cmluZy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGFkZCgnIicpCisgICAgICAgICAgICBhZGQocXVvdGVkX2Zvcl9jX3N0cmluZyhsaW5lKSkKKyAgICAgICAgICAgIGFkZCgnXFxuIlxuJykKKworICAgICAgICB0ZXh0LnBvcCgpCisgICAgICAgIGFkZCgnIicpCisgICAgICAgIHJldHVybiAnJy5qb2luKHRleHQpCisKKyAgICBpbXBsX3Byb3RvdHlwZV90ZW1wbGF0ZSA9ICJ7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9wYXJhbWV0ZXJzfSkiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHRlbXBsYXRlX2Jhc2UoKmFyZ3MpOgorICAgICAgICBmbGFncyA9ICd8Jy5qb2luKGYgZm9yIGYgaW4gYXJncyBpZiBmKQorICAgICAgICByZXR1cm4gIiIiCitQeURvY19TVFJWQVIoe2NfYmFzZW5hbWV9X19kb2NfXywKK3tkb2NzdHJpbmd9KTsKKworI2RlZmluZSB7bWV0aG9kZGVmX25hbWV9ICAgIFxcCisgICAge3sie25hbWV9IiwgKFB5Q0Z1bmN0aW9uKXtjX2Jhc2VuYW1lfSwge21ldGhvZGRlZl9mbGFnc30sIHtjX2Jhc2VuYW1lfV9fZG9jX199fSwKKyIiIi5yZXBsYWNlKCd7bWV0aG9kZGVmX2ZsYWdzfScsIGZsYWdzKQorCisgICAgZGVmIG1ldGhfbm9hcmdzX3B5b2JqZWN0X3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTk9BUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKKyIiIgorCisgICAgZGVmIG1ldGhfbm9hcmdzX3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTk9BUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9KQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisKKyAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgZGVmIG1ldGhfb190ZW1wbGF0ZShzZWxmLCBtZXRob2RkZWZfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX08iLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorIiIiCisKKyAgICBkZWYgbWV0aF9vX3JldHVybl9jb252ZXJ0ZXJfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9PIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorICAgIF9yZXR1cm5fdmFsdWUgPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIGRlZiBvcHRpb25fZ3JvdXBfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAge29wdGlvbl9ncm91cF9wYXJzaW5nfQorICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYga2V5d29yZHNfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMiLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0sIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7e3trZXl3b3Jkc30sIE5VTEx9fTsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCBfa2V5d29yZHMsCisgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYgcG9zaXRpb25hbF9vbmx5X3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfVkFSQVJHUyIsIG1ldGhvZGRlZl9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MpCit7eworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHtkZWNsYXJhdGlvbnN9CisgICAge2luaXRpYWxpemVyc30KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwKKyAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCk6CisgICAgICAgIGFkamVjdGl2ZSA9ICJsZWZ0XyIgaWYgZ3JvdXAgPCAwIGVsc2UgInJpZ2h0XyIKKyAgICAgICAgcmV0dXJuICJncm91cF8iICsgYWRqZWN0aXZlICsgc3RyKGFicyhncm91cCkpCisKKyAgICBkZWYgcmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKHNlbGYsIGYsIHRlbXBsYXRlX2RpY3QpOgorICAgICAgICAjIHBvc2l0aW9uYWwgb25seSwgZ3JvdXBlZCwgb3B0aW9uYWwgYXJndW1lbnRzIQorICAgICAgICAjIGNhbiBiZSBvcHRpb25hbCBvbiB0aGUgbGVmdCBvciByaWdodC4KKyAgICAgICAgIyBoZXJlJ3MgYW4gZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIFsgWyBbIEExIEEyIF0gQjEgQjIgQjMgXSBDMSBDMiBdIEQxIEQyIEQzIFsgRTEgRTIgRTMgWyBGMSBGMiBGMyBdIF0KKyAgICAgICAgIworICAgICAgICAjIEhlcmUgZ3JvdXAgRCBhcmUgcmVxdWlyZWQsIGFuZCBhbGwgb3RoZXIgZ3JvdXBzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgIyAoR3JvdXAgRCdzICJncm91cCIgaXMgYWN0dWFsbHkgTm9uZS4pCisgICAgICAgICMgV2UgY2FuIGZpZ3VyZSBvdXQgd2hpY2ggc2V0cyBvZiBhcmd1bWVudHMgd2UgaGF2ZSBiYXNlZCBvbgorICAgICAgICAjIGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgaW4gdGhlIHR1cGxlLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNvdW50IHVwIG9uIGJvdGggc2lkZXMuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgIyB5b3UgY291bGQgaGF2ZSBncm91cHMgQytELCBvciBDK0QrRSwgb3IgQytEK0UrRi4KKyAgICAgICAgIworICAgICAgICAjIFdoYXQgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbGVhZHMgdXMgdG8gYW4gYW1iaWd1b3VzIHJlc3VsdD8KKyAgICAgICAgIyBDbGluaWMgcHJlZmVycyBncm91cHMgb24gdGhlIGxlZnQuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICAgICAgIyBmaXZlIGFyZ3VtZW50cyB3b3VsZCBtYXAgdG8gQitDLCBub3QgQytELgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgICAgICBncm91cHMgPSBbXQorICAgICAgICBncm91cCA9IE5vbmUKKyAgICAgICAgbGVmdCA9IFtdCisgICAgICAgIHJpZ2h0ID0gW10KKyAgICAgICAgcmVxdWlyZWQgPSBbXQorICAgICAgICBsYXN0ID0gdW5zcGVjaWZpZWQKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgZ3JvdXBfaWQgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBncm91cF9pZCAhPSBsYXN0OgorICAgICAgICAgICAgICAgIGxhc3QgPSBncm91cF9pZAorICAgICAgICAgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgICAgICAgICBpZiBncm91cF9pZCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgICAgIGVsaWYgZ3JvdXBfaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSByZXF1aXJlZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LmFwcGVuZChncm91cCkKKyAgICAgICAgICAgIGdyb3VwLmFwcGVuZChwKQorCisgICAgICAgIGNvdW50X21pbiA9IHN5cy5tYXhzaXplCisgICAgICAgIGNvdW50X21heCA9IC0xCisKKyAgICAgICAgYWRkKCJzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkge3tcbiIpCisgICAgICAgIGZvciBzdWJzZXQgaW4gcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1YnNldCkKKyAgICAgICAgICAgIGNvdW50X21pbiA9IG1pbihjb3VudF9taW4sIGNvdW50KQorICAgICAgICAgICAgY291bnRfbWF4ID0gbWF4KGNvdW50X21heCwgY291bnQpCisKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHtwLmdyb3VwIGZvciBwIGluIHN1YnNldH0gICMgZWxpbWluYXRlIGR1cGxpY2F0ZXMKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZFsnY291bnQnXSA9IGNvdW50CisgICAgICAgICAgICBkWyduYW1lJ10gPSBmLm5hbWUKKyAgICAgICAgICAgIGRbJ2dyb3VwcyddID0gc29ydGVkKGdyb3VwX2lkcykKKyAgICAgICAgICAgIGRbJ2Zvcm1hdF91bml0cyddID0gIiIuam9pbihwLmNvbnZlcnRlci5mb3JtYXRfdW5pdCBmb3IgcCBpbiBzdWJzZXQpCisKKyAgICAgICAgICAgIHBhcnNlX2FyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzdWJzZXQ6CisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucGFyc2VfYXJndW1lbnQocGFyc2VfYXJndW1lbnRzKQorICAgICAgICAgICAgZFsncGFyc2VfYXJndW1lbnRzJ10gPSAiLCAiLmpvaW4ocGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICAgICBncm91cF9pZHMuZGlzY2FyZCgwKQorICAgICAgICAgICAgbGluZXMgPSBbc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGcpICsgIiA9IDE7IiBmb3IgZyBpbiBncm91cF9pZHNdCisgICAgICAgICAgICBsaW5lcyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICAgICAgcyA9ICIiIgorICAgIGNhc2Uge2NvdW50fToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAge2dyb3VwX2Jvb2xlYW5zfQorICAgICAgICBicmVhazsKKyIiIlsxOl0KKyAgICAgICAgICAgIHMgPSBsaW5lYXJfZm9ybWF0KHMsIGdyb3VwX2Jvb2xlYW5zPWxpbmVzKQorICAgICAgICAgICAgcyA9IHMuZm9ybWF0X21hcChkKQorICAgICAgICAgICAgYWRkKHMpCisKKyAgICAgICAgYWRkKCIgICAgZGVmYXVsdDpcbiIpCisgICAgICAgIHMgPSAnICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAie30gcmVxdWlyZXMge30gdG8ge30gYXJndW1lbnRzIik7XG4nCisgICAgICAgIGFkZChzLmZvcm1hdChmLmZ1bGxfbmFtZSwgY291bnRfbWluLCBjb3VudF9tYXgpKQorICAgICAgICBhZGQoJyAgICAgICAgcmV0dXJuIE5VTEw7XG4nKQorICAgICAgICBhZGQoIn19IikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSA9IG91dHB1dCgpCisKKyAgICBkZWYgcmVuZGVyX2Z1bmN0aW9uKHNlbGYsIGYpOgorICAgICAgICBpZiBub3QgZjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGRhdGEgPSBDUmVuZGVyRGF0YSgpCisKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgdGVtcGxhdGVfZGljdCA9IHt9CisKKyAgICAgICAgZnVsbF9uYW1lID0gZi5mdWxsX25hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZnVsbF9uYW1lJ10gPSBmdWxsX25hbWUKKworICAgICAgICBuYW1lID0gZnVsbF9uYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WyduYW1lJ10gPSBuYW1lCisKKyAgICAgICAgY19iYXNlbmFtZSA9IGYuY19iYXNlbmFtZSBvciBmdWxsX25hbWUucmVwbGFjZSgiLiIsICJfIikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY19iYXNlbmFtZSddID0gY19iYXNlbmFtZQorCisgICAgICAgIG1ldGhvZGRlZl9uYW1lID0gInt9X01FVEhPRERFRiIuZm9ybWF0KGNfYmFzZW5hbWUudXBwZXIoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbWV0aG9kZGVmX25hbWUnXSA9IG1ldGhvZGRlZl9uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZG9jc3RyaW5nJ10gPSBzZWxmLmRvY3N0cmluZ19mb3JfY19zdHJpbmcoZikKKworICAgICAgICBwb3NpdGlvbmFsID0gaGFzX29wdGlvbl9ncm91cHMgPSAgRmFsc2UKKworICAgICAgICBpZiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgbGFzdF9ncm91cCA9IDAKKworICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBjID0gcC5jb252ZXJ0ZXIKKworICAgICAgICAgICAgICAgICMgaW5zZXJ0IGdyb3VwIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBwLmdyb3VwCisgICAgICAgICAgICAgICAgaWYgbGFzdF9ncm91cCAhPSBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9ncm91cCA9IGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfbmFtZSA9IHNlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKGdyb3VwX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSArICIgPSAwOyIpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGMucmVuZGVyKHAsIGRhdGEpCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgPSBwYXJhbWV0ZXJzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICAgICAgaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBvc2l0aW9uYWwKKworICAgICAgICAjIG5vdyBpbnNlcnQgb3VyICJzZWxmIiAob3Igd2hhdGV2ZXIpIHBhcmFtZXRlcnMKKyAgICAgICAgIyAod2UgZGVsaWJlcmF0ZWx5IGRvbid0IGNhbGwgcmVuZGVyIG9uIHNlbGYgY29udmVydGVycykKKyAgICAgICAgc3RvY2tfc2VsZiA9IHNlbGZfY29udmVydGVyKCdzZWxmJywgZikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl9uYW1lJ10gPSBzdG9ja19zZWxmLm5hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlJ10gPSBzdG9ja19zZWxmLnR5cGUKKyAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuaW5zZXJ0KDAsIGYuc2VsZl9jb252ZXJ0ZXIudHlwZSArICgiIiBpZiBmLnNlbGZfY29udmVydGVyLnR5cGUuZW5kc3dpdGgoJyonKSBlbHNlICIgIikgKyBmLnNlbGZfY29udmVydGVyLm5hbWUpCisgICAgICAgIGlmIGYuc2VsZl9jb252ZXJ0ZXIudHlwZSAhPSBzdG9ja19zZWxmLnR5cGU6CisgICAgICAgICAgICBzZWxmX2Nhc3QgPSAnKCcgKyBmLnNlbGZfY29udmVydGVyLnR5cGUgKyAnKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGZfY2FzdCA9ICcnCisgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuaW5zZXJ0KDAsIHNlbGZfY2FzdCArIHN0b2NrX3NlbGYubmFtZSkKKworICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIucmVuZGVyKGYsIGRhdGEpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcmV0dXJuX3R5cGUnXSA9IGYucmV0dXJuX2NvbnZlcnRlci50eXBlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGF0YS5kZWNsYXJhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddID0gIlxuXG4iLmpvaW4oZGF0YS5pbml0aWFsaXplcnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2tleXdvcmRzJ10gPSAnIicgKyAnIiwgIicuam9pbihkYXRhLmtleXdvcmRzKSArICciJworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydmb3JtYXRfdW5pdHMnXSA9ICcnLmpvaW4oZGF0YS5mb3JtYXRfdW5pdHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3BhcnNlX2FyZ3VtZW50cyddID0gJywgJy5qb2luKGRhdGEucGFyc2VfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3BhcmFtZXRlcnMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfcGFyYW1ldGVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9hcmd1bWVudHMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddID0gIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10gPSAiIi5qb2luKGRhdGEuY2xlYW51cCkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncmV0dXJuX3ZhbHVlJ10gPSBkYXRhLnJldHVybl92YWx1ZQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcHJvdG90eXBlJ10gPSBzZWxmLmltcGxfcHJvdG90eXBlX3RlbXBsYXRlLmZvcm1hdF9tYXAodGVtcGxhdGVfZGljdCkKKworICAgICAgICBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIgPSAobm90IGYucmV0dXJuX2NvbnZlcnRlciBvcgorICAgICAgICAgICAgZi5yZXR1cm5fY29udmVydGVyLnR5cGUgPT0gJ1B5T2JqZWN0IConKQorCisgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX25vYXJnc19weW9iamVjdF90ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfbm9hcmdzX3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICBlbGlmIChsZW4ocGFyYW1ldGVycykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBhbmQKKyAgICAgICAgICAgICAgbm90IGNvbnZlcnRlcnNbMF0uaXNfb3B0aW9uYWwoKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgY29udmVydGVyc1swXS5mb3JtYXRfdW5pdCA9PSAnTycpOgorICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX29fdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSEFDSworICAgICAgICAgICAgICAgICMgd2UncmUgdXNpbmcgImltcGxfcGFyYW1ldGVycyIgZm9yIHRoZQorICAgICAgICAgICAgICAgICMgbm9uLWltcGwgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCB3b3JrcworICAgICAgICAgICAgICAgICMgYmV0dGVyIGZvciBNRVRIX08uICBidXQgdGhhdCBtZWFucyB3ZQorICAgICAgICAgICAgICAgICMgbXVzdCBzdXByZXNzIGFjdHVhbGx5IGRlY2xhcmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIGltcGwncyBwYXJhbWV0ZXJzIGFzIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAjIG5vbi1pbXBsLiAgYnV0IHNpbmNlIGl0J3MgTUVUSF9PLCB3ZQorICAgICAgICAgICAgICAgICMgb25seSBoYXZlIG9uZSBhbnl3YXksIHNvCisgICAgICAgICAgICAgICAgIyB3ZSBkb24ndCBoYXZlIGFueSBwcm9ibGVtIGZpbmRpbmcgaXQuCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zX2NvcHkgPSBsaXN0KGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgICAgIGJlZm9yZSwgcHlvYmplY3QsIGFmdGVyID0gZGVjbGFyYXRpb25zX2NvcHlbMF0ucGFydGl0aW9uKCdQeU9iamVjdCAqJykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGJlZm9yZSwgImhhY2sgZmFpbGVkLCBzZWUgY29tbWVudCIKKyAgICAgICAgICAgICAgICBhc3NlcnQgcHlvYmplY3QsICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGFmdGVyIGFuZCBhZnRlclswXS5pc2FscGhhKCksICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgZGVsIGRlY2xhcmF0aW9uc19jb3B5WzBdCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGVjbGFyYXRpb25zX2NvcHkpCisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfb19yZXR1cm5fY29udmVydGVyX3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICBlbGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoZiwgdGVtcGxhdGVfZGljdCkKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5vcHRpb25fZ3JvdXBfdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgb3B0aW9uX2dyb3VwX3BhcnNpbmc9dGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSkKKyAgICAgICAgZWxpZiBwb3NpdGlvbmFsOgorICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLnBvc2l0aW9uYWxfb25seV90ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5rZXl3b3Jkc190ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKworICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICBkZWNsYXJhdGlvbnM9dGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10sCisgICAgICAgICAgICByZXR1cm5fY29udmVyc2lvbj10ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddLAorICAgICAgICAgICAgaW5pdGlhbGl6ZXJzPXRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddLAorICAgICAgICAgICAgY2xlYW51cD10ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10sCisgICAgICAgICAgICApCisKKyAgICAgICAgIyBPbmx5IGdlbmVyYXRlIHRoZSAiZXhpdDoiIGxhYmVsCisgICAgICAgICMgaWYgd2UgaGF2ZSBhbnkgZ290b3MKKyAgICAgICAgbmVlZF9leGl0X2xhYmVsID0gImdvdG8gZXhpdDsiIGluIHRlbXBsYXRlCisgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGV4aXRfbGFiZWw9ImV4aXQ6IiBpZiBuZWVkX2V4aXRfbGFiZWwgZWxzZSAnJworICAgICAgICAgICAgKQorCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5mb3JtYXRfbWFwKHRlbXBsYXRlX2RpY3QpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBPdmVycmlkZVN0ZGlvV2l0aChzdGRvdXQpOgorICAgIHNhdmVkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGFzc2VydCBzeXMuc3Rkb3V0IGlzIHN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZWRfc3Rkb3V0CisKKworZGVmIGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyKToKKyAgICAiIiJDcmVhdGUgYW4gcmUgb2JqZWN0IGZvciBtYXRjaGluZyBtYXJrZXIgbGluZXMuIiIiCisgICAgcGF0dGVybiA9IHInXnt9KFx3Kyl7fSQnCisgICAgcmV0dXJuIHJlLmNvbXBpbGUocGF0dGVybi5mb3JtYXQocmUuZXNjYXBlKGJlZm9yZSksIHJlLmVzY2FwZShhZnRlcikpKQorCisKK2NsYXNzIEJsb2NrOgorICAgIHIiIiIKKyAgICBSZXByZXNlbnRzIGEgc2luZ2xlIGJsb2NrIG9mIHRleHQgZW1iZWRkZWQgaW4KKyAgICBhbm90aGVyIGZpbGUuICBJZiBkc2xfbmFtZSBpcyBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cworICAgIHZlcmJhdGltIHRleHQsIHJhdyBvcmlnaW5hbCB0ZXh0IGZyb20gdGhlIGZpbGUsIGluCisgICAgd2hpY2ggY2FzZSAiaW5wdXQiIHdpbGwgYmUgdGhlIG9ubHkgbm9uLWZhbHNlIG1lbWJlci4KKyAgICBJZiBkc2xfbmFtZSBpcyBub3QgTm9uZSwgdGhlIGJsb2NrIHJlcHJlc2VudHMgYSBDbGluaWMKKyAgICBibG9jay4KKworICAgIGlucHV0IGlzIGFsd2F5cyBzdHIsIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKyAgICBpbnB1dCByZXByZXNlbnRzIHRoZSBvcmlnaW5hbCB0ZXh0IGZyb20gdGhlIGZpbGU7CisgICAgaWYgaXQncyBhIENsaW5pYyBibG9jaywgaXQgaXMgdGhlIG9yaWdpbmFsIHRleHQgd2l0aAorICAgIHRoZSBib2R5X3ByZWZpeCBhbmQgcmVkdW5kYW50IGxlYWRpbmcgd2hpdGVzcGFjZSByZW1vdmVkLgorCisgICAgZHNsX25hbWUgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSWYgc3RyLCBpdCdzIHRoZSB0ZXh0CisgICAgZm91bmQgb24gdGhlIHN0YXJ0IGxpbmUgb2YgdGhlIGJsb2NrIGJldHdlZW4gdGhlIHNxdWFyZQorICAgIGJyYWNrZXRzLgorCisgICAgc2lnbmF0dXJlcyBpcyBlaXRoZXIgbGlzdCBvciBOb25lLiAgSWYgaXQncyBhIGxpc3QsCisgICAgaXQgbWF5IG9ubHkgY29udGFpbiBjbGluaWMuTW9kdWxlLCBjbGluaWMuQ2xhc3MsIGFuZAorICAgIGNsaW5pYy5GdW5jdGlvbiBvYmplY3RzLiAgQXQgdGhlIG1vbWVudCBpdCBzaG91bGQKKyAgICBjb250YWluIGF0IG1vc3Qgb25lIG9mIGVhY2guCisKKyAgICBvdXRwdXQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSWYgc3RyLCBpdCdzIHRoZSBvdXRwdXQKKyAgICBmcm9tIHRoaXMgYmxvY2ssIHdpdGggZW1iZWRkZWQgJ1xuJyBjaGFyYWN0ZXJzLgorCisgICAgaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZQorICAgIHRoYXQgd2FzIGZvdW5kIG9uIGV2ZXJ5IGxpbmUgb2YgaW5wdXQuICAoSWYgYm9keV9wcmVmaXggaXMKKyAgICBub3QgZW1wdHksIHRoaXMgaXMgdGhlIGluZGVudCAqYWZ0ZXIqIHJlbW92aW5nIHRoZQorICAgIGJvZHlfcHJlZml4LikKKworICAgIHByZWluZGVudCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJdCdzIHRoZSB3aGl0ZXNwYWNlIHRoYXQKKyAgICB3YXMgZm91bmQgaW4gZnJvbnQgb2YgZXZlcnkgbGluZSBvZiBpbnB1dCAqYmVmb3JlKiB0aGUKKyAgICAiYm9keV9wcmVmaXgiIChzZWUgdGhlIExhbmd1YWdlIG9iamVjdCkuICBJZiBib2R5X3ByZWZpeAorICAgIGlzIGVtcHR5LCBwcmVpbmRlbnQgbXVzdCBhbHdheXMgYmUgZW1wdHkgdG9vLgorCisgICAgVG8gaWxsdXN0cmF0ZSBpbmRlbnQgYW5kIHByZWluZGVudDogQXNzdW1lIHRoYXQgJ18nCisgICAgcmVwcmVzZW50cyB3aGl0ZXNwYWNlLiAgSWYgdGhlIGJsb2NrIHByb2Nlc3NlZCB3YXMgaW4gYQorICAgIFB5dGhvbiBmaWxlLCBhbmQgbG9va2VkIGxpa2UgdGhpczoKKyAgICAgIF9fX18jLypbcHl0aG9uXQorICAgICAgX19fXyNfX2ZvciBhIGluIHJhbmdlKDIwKToKKyAgICAgIF9fX18jX19fX3ByaW50KGEpCisgICAgICBfX19fI1tweXRob25dKi8KKyAgICAicHJlaW5kZW50IiB3b3VsZCBiZSAiX19fXyIgYW5kICJpbmRlbnQiIHdvdWxkIGJlICJfXyIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXQsIGRzbF9uYW1lPU5vbmUsIHNpZ25hdHVyZXM9Tm9uZSwgb3V0cHV0PU5vbmUsIGluZGVudD0nJywgcHJlaW5kZW50PScnKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaW5wdXQsIHN0cikKKyAgICAgICAgc2VsZi5pbnB1dCA9IGlucHV0CisgICAgICAgIHNlbGYuZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICBzZWxmLnNpZ25hdHVyZXMgPSBzaWduYXR1cmVzIG9yIFtdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisgICAgICAgIHNlbGYucHJlaW5kZW50ID0gcHJlaW5kZW50CisKKworY2xhc3MgQmxvY2tQYXJzZXI6CisgICAgIiIiCisgICAgQmxvY2stb3JpZW50ZWQgcGFyc2VyIGZvciBBcmd1bWVudCBDbGluaWMuCisgICAgSXRlcmF0b3IsIHlpZWxkcyBCbG9jayBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBsYW5ndWFnZSwgKiwgdmVyaWZ5PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgImlucHV0IiBzaG91bGQgYmUgYSBzdHIgb2JqZWN0CisgICAgICAgIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKworICAgICAgICAibGFuZ3VhZ2UiIHNob3VsZCBiZSBhIExhbmd1YWdlIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGxhbmd1YWdlLnZhbGlkYXRlKCkKKworICAgICAgICBzZWxmLmlucHV0ID0gY29sbGVjdGlvbnMuZGVxdWUocmV2ZXJzZWQoaW5wdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBiZWZvcmUsIF8sIGFmdGVyID0gbGFuZ3VhZ2Uuc3RhcnRfbGluZS5wYXJ0aXRpb24oJ3tkc2xfbmFtZX0nKQorICAgICAgICBhc3NlcnQgXyA9PSAne2RzbF9uYW1lfScKKyAgICAgICAgc2VsZi5zdGFydF9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyKQorICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQorICAgICAgICBzZWxmLmxhc3RfY2hlY2tzdW1fcmUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9kc2xfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5wdXQ6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICAgICAgaWYgc2VsZi5kc2xfbmFtZToKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYucGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYuZHNsX25hbWUpCisgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV92ZXJiYXRpbV9ibG9jaygpCisKKyAgICBkZWYgaXNfc3RhcnRfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnN0YXJ0X3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKworICAgIGRlZiBfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlciArPSAxCisgICAgICAgIHJldHVybiBzZWxmLmlucHV0LnBvcCgpCisKKyAgICBkZWYgcGFyc2VfdmVyYmF0aW1fYmxvY2soc2VsZik6CisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyCisKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGRzbF9uYW1lID0gc2VsZi5pc19zdGFydF9saW5lKGxpbmUpCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWRkKGxpbmUpCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKG91dHB1dCgpKQorCisgICAgZGVmIHBhcnNlX2NsaW5pY19ibG9jayhzZWxmLCBkc2xfbmFtZSk6CisgICAgICAgIGlucHV0X2FkZCwgaW5wdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyICsgMQorICAgICAgICBzdG9wX2xpbmUgPSBzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpICsgJ1xuJworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorCisgICAgICAgICMgY29uc3VtZSBib2R5IG9mIHByb2dyYW0KKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gc3RvcF9saW5lIG9yIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYm9keV9wcmVmaXg6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdGFydHN3aXRoKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbihib2R5X3ByZWZpeCk6XQorICAgICAgICAgICAgaW5wdXRfYWRkKGxpbmUpCisKKyAgICAgICAgIyBjb25zdW1lIG91dHB1dCBhbmQgY2hlY2tzdW0gbGluZSwgaWYgcHJlc2VudC4KKyAgICAgICAgaWYgc2VsZi5sYXN0X2RzbF9uYW1lID09IGRzbF9uYW1lOgorICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBzZWxmLmxhc3RfY2hlY2tzdW1fcmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBjaGVja3N1bT0ne2NoZWNrc3VtfScpLnBhcnRpdGlvbigne2NoZWNrc3VtfScpCisgICAgICAgICAgICBhc3NlcnQgXyA9PSAne2NoZWNrc3VtfScKKyAgICAgICAgICAgIGNoZWNrc3VtX3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gY2hlY2tzdW1fcmUKKworICAgICAgICAjIHNjYW4gZm9yd2FyZCBmb3IgY2hlY2tzdW0gbGluZQorICAgICAgICBvdXRwdXRfYWRkLCBvdXRwdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGNoZWNrc3VtID0gTm9uZQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgbWF0Y2ggPSBjaGVja3N1bV9yZS5tYXRjaChsaW5lLmxzdHJpcCgpKQorICAgICAgICAgICAgY2hlY2tzdW0gPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvdXRwdXRfYWRkKGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBvdXRwdXQgPSBvdXRwdXRfb3V0cHV0KCkKKyAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICBpZiBzZWxmLnZlcmlmeToKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0KQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtICE9IGNvbXB1dGVkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJDaGVja3N1bSBtaXNtYXRjaCFcbkV4cGVjdGVkOiB7fVxuQ29tcHV0ZWQ6IHt9Ii5mb3JtYXQoY2hlY2tzdW0sIGNvbXB1dGVkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcHV0IGJhY2sgb3V0cHV0CisgICAgICAgICAgICBzZWxmLmlucHV0LmV4dGVuZChyZXZlcnNlZChvdXRwdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVyIC09IGxlbihvdXRwdXQpCisgICAgICAgICAgICBvdXRwdXQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKGlucHV0X291dHB1dCgpLCBkc2xfbmFtZSwgb3V0cHV0PW91dHB1dCkKKworCitjbGFzcyBCbG9ja1ByaW50ZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIGY9Tm9uZSk6CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLmYgPSBmIG9yIGlvLlN0cmluZ0lPKCkKKworICAgIGRlZiBwcmludF9ibG9jayhzZWxmLCBibG9jayk6CisgICAgICAgIGlucHV0ID0gYmxvY2suaW5wdXQKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGRzbF9uYW1lID0gYmxvY2suZHNsX25hbWUKKyAgICAgICAgd3JpdGUgPSBzZWxmLmYud3JpdGUKKworICAgICAgICBhc3NlcnQgbm90ICgoZHNsX25hbWUgPT0gTm9uZSkgXiAob3V0cHV0ID09IE5vbmUpKSwgInlvdSBtdXN0IHNwZWNpZnkgZHNsX25hbWUgYW5kIG91dHB1dCB0b2dldGhlciwgZHNsX25hbWUgIiArIHJlcHIoZHNsX25hbWUpCisKKyAgICAgICAgaWYgbm90IGRzbF9uYW1lOgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0YXJ0X2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBpZiBub3QgYm9keV9wcmVmaXg6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlucHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIHdyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIG91dHB1dCA9IGJsb2NrLm91dHB1dAorICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICB3cml0ZShvdXRwdXQpCisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKCdcbicpCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5jaGVja3N1bV9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSwgY2hlY2tzdW09Y29tcHV0ZV9jaGVja3N1bShvdXRwdXQpKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworCisjIG1hcHMgc3RyaW5ncyB0byBMYW5ndWFnZSBvYmplY3RzLgorIyAibGFuZ3VhZ2VzIiBtYXBzIHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSAoIkMiLCAiUHl0aG9uIikuCisjICJleHRlbnNpb25zIiBtYXBzIHRoZSBmaWxlIGV4dGVuc2lvbiAoImMiLCAicHkiKS4KK2xhbmd1YWdlcyA9IHsgJ0MnOiBDTGFuZ3VhZ2UsICdQeXRob24nOiBQeXRob25MYW5ndWFnZSB9CitleHRlbnNpb25zID0geyAnYyc6IENMYW5ndWFnZSwgJ2gnOiBDTGFuZ3VhZ2UsICdweSc6IFB5dGhvbkxhbmd1YWdlIH0KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28obmFtZSwgZGVmYXVsdCwgKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCitjb252ZXJ0ZXJzID0ge30KKworIyBtYXBzIHN0cmluZ3MgdG8gY2FsbGFibGVzLgorIyB0aGVzZSBjYWxsYWJsZXMgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGZvciAiY29udmVydGVycyIgYWJvdmUuCisjIG5vdGUgaG93ZXZlciB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZSBjYWxsZWQgd2l0aCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KK2xlZ2FjeV9jb252ZXJ0ZXJzID0ge30KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28oKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCityZXR1cm5fY29udmVydGVycyA9IHt9CisKK2NsYXNzIENsaW5pYzoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIHByaW50ZXI9Tm9uZSwgKiwgdmVyaWZ5PVRydWUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICAjIG1hcHMgc3RyaW5ncyB0byBQYXJzZXIgb2JqZWN0cy4KKyAgICAgICAgIyAoaW5zdGFudGlhdGVkIGZyb20gdGhlICJwYXJzZXJzIiBnbG9iYWwuKQorICAgICAgICBzZWxmLnBhcnNlcnMgPSB7fQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlciBvciBCbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKworICAgICAgICBnbG9iYWwgY2xpbmljCisgICAgICAgIGNsaW5pYyA9IHNlbGYKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CisgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja19wYXJzZXI6CisgICAgICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBpZiBkc2xfbmFtZSBub3QgaW4gc2VsZi5wYXJzZXJzOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZHNsX25hbWUgaW4gcGFyc2VycywgIk5vIHBhcnNlciB0byBoYW5kbGUgeyFyfSBibG9jay4iLmZvcm1hdChkc2xfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXJzW2RzbF9uYW1lXSA9IHBhcnNlcnNbZHNsX25hbWVdKHNlbGYpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXJzW2RzbF9uYW1lXQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIHJldHVybiBwcmludGVyLmYuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9tb2R1bGVfYW5kX2NsYXNzKHNlbGYsIGZpZWxkcyk6CisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGZpZWxkIG5hbWVzLgorICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgKG1vZHVsZSwgY2xhc3MpLgorICAgICAgICB0aGUgbW9kdWxlIG9iamVjdCBjb3VsZCBhY3R1YWxseSBiZSBzZWxmIChhIGNsaW5pYyBvYmplY3QpLgorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciB1c2VkIHRvIGZpbmQgdGhlIHBhcmVudCBvZiB3aGVyZQorICAgICAgICBhIG5ldyBjbGFzcy9tb2R1bGUgc2hvdWxkIGdvLgorICAgICAgICAiIiIKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IHNlbGYKKyAgICAgICAgY2xzID0gTm9uZQorICAgICAgICBzb19mYXIgPSBbXQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzb19mYXIuYXBwZW5kKGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGluX2NsYXNzZXM6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQubW9kdWxlcy5nZXQoZmllbGQpCisgICAgICAgICAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5fY2xhc3NlcyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBhcmVudCwgJ2NsYXNzZXMnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBjbHMKKyAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNsYXNzZXMuZ2V0KGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGNoaWxkOgorICAgICAgICAgICAgICAgIGZhaWwoJ1BhcmVudCBjbGFzcyBvciBtb2R1bGUgJyArICcuJy5qb2luKHNvX2ZhcikgKyAiIGRvZXMgbm90IGV4aXN0LiIpCisgICAgICAgICAgICBjbHMgPSBwYXJlbnQgPSBjaGlsZAorCisgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworCisKK2RlZiBwYXJzZV9maWxlKGZpbGVuYW1lLCAqLCB2ZXJpZnk9VHJ1ZSwgb3V0cHV0PU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdWzE6XQorICAgIGlmIG5vdCBleHRlbnNpb246CisgICAgICAgIGZhaWwoIkNhbid0IGV4dHJhY3QgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHRyeToKKyAgICAgICAgbGFuZ3VhZ2UgPSBleHRlbnNpb25zW2V4dGVuc2lvbl0oKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgaWRlbnRpZnkgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIGNsaW5pYyA9IENsaW5pYyhsYW5ndWFnZSwgdmVyaWZ5PXZlcmlmeSwgZmlsZW5hbWU9ZmlsZW5hbWUpCisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgIHJhdyA9IGYucmVhZCgpCisKKyAgICBjb29rZWQgPSBjbGluaWMucGFyc2UocmF3KQorICAgIGlmIGNvb2tlZCA9PSByYXc6CisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSBvciAnLicKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iY2xpbmljIiwgZGlyPWRpcmVjdG9yeSkgYXMgdG1wZGlyOgorICAgICAgICBieXRlcyA9IGNvb2tlZC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHRtcGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMpCisgICAgICAgIG9zLnJlcGxhY2UodG1wZmlsZW5hbWUsIG91dHB1dCBvciBmaWxlbmFtZSkKKworCitkZWYgY29tcHV0ZV9jaGVja3N1bShpbnB1dCk6CisgICAgaW5wdXQgPSBpbnB1dCBvciAnJworICAgIHJldHVybiBoYXNobGliLnNoYTEoaW5wdXQuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKQorCisKKworCitjbGFzcyBQeXRob25QYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggT3ZlcnJpZGVTdGRpb1dpdGgocyk6CisgICAgICAgICAgICBleGVjKGJsb2NrLmlucHV0KQorICAgICAgICBibG9jay5vdXRwdXQgPSBzLmdldHZhbHVlKCkKKworCitjbGFzcyBNb2R1bGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IHNlbGYucGFyZW50ID0gbW9kdWxlCisKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLk1vZHVsZSAiICsgcmVwcihzZWxmLm5hbWUpICsgIiBhdCAiICsgc3RyKGlkKHNlbGYpKSArICI+IgorCitjbGFzcyBDbGFzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUsIGNscz1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKworICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLkNsYXNzICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKKworREFUQSwgQ0FMTEFCTEUsIE1FVEhPRCwgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9EID0gcmFuZ2UoNSkKKworY2xhc3MgRnVuY3Rpb246CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgZm9yIGluc3BlY3QuRnVuY3Rpb24uCisKKyAgICBkb2NzdHJpbmcgLSBhIHN0ciBjb250YWluaW5nCisgICAgICAgICogZW1iZWRkZWQgbGluZSBicmVha3MKKyAgICAgICAgKiB0ZXh0IG91dGRlbnRlZCB0byB0aGUgbGVmdCBtYXJnaW4KKyAgICAgICAgKiBubyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBJdCB3aWxsIGFsd2F5cyBiZSB0cnVlIHRoYXQKKyAgICAgICAgICAgIChub3QgZG9jc3RyaW5nKSBvciAoKG5vdCBkb2NzdHJpbmdbMF0uaXNzcGFjZSgpKSBhbmQgKGRvY3N0cmluZy5yc3RyaXAoKSA9PSBkb2NzdHJpbmcpKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcnM9Tm9uZSwgKiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHM9Tm9uZSwgY19iYXNlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBmdWxsX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciwgcmV0dXJuX2Fubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwga2luZD1DQUxMQUJMRSwgY29leGlzdD1GYWxzZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgb3IgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLnJldHVybl9hbm5vdGF0aW9uID0gcmV0dXJuX2Fubm90YXRpb24KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmZ1bGxfbmFtZSA9IGZ1bGxfbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKyAgICAgICAgc2VsZi5jX2Jhc2VuYW1lID0gY19iYXNlbmFtZQorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYua2luZCA9IGtpbmQKKyAgICAgICAgc2VsZi5jb2V4aXN0ID0gY29leGlzdAorICAgICAgICBzZWxmLnNlbGZfY29udmVydGVyID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1ldGhvZGRlZl9mbGFncyhzZWxmKToKKyAgICAgICAgZmxhZ3MgPSBbXQorICAgICAgICBpZiBzZWxmLmtpbmQgPT0gQ0xBU1NfTUVUSE9EOgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NMQVNTJykKKyAgICAgICAgZWxpZiBzZWxmLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9TVEFUSUMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYua2luZCA9PSBDQUxMQUJMRSwgInVua25vd24ga2luZDogIiArIHJlcHIoc2VsZi5raW5kKQorICAgICAgICBpZiBzZWxmLmNvZXhpc3Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfQ09FWElTVCcpCisgICAgICAgIHJldHVybiAnfCcuam9pbihmbGFncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Y2xpbmljLkZ1bmN0aW9uICcgKyBzZWxmLm5hbWUgKyAnPicKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgb2YgaW5zcGVjdC5QYXJhbWV0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga2luZCwgKiwgZGVmYXVsdD1fZW1wdHksCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBjb252ZXJ0ZXIsIGFubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwgZ3JvdXA9MCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBzZWxmLmFubm90YXRpb24gPSBhbm5vdGF0aW9uCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYuZ3JvdXAgPSBncm91cAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuUGFyYW1ldGVyICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBpc19rZXl3b3JkX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisKK3B5X3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOb25lIiwKK30KKworZGVmIHB5X3JlcHIobyk6CisgICAgc3BlY2lhbCA9IHB5X3NwZWNpYWxfdmFsdWVzLmdldChvKQorICAgIGlmIHNwZWNpYWw6CisgICAgICAgIHJldHVybiBzcGVjaWFsCisgICAgcmV0dXJuIHJlcHIobykKKworCitjX3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOVUxMIiwKKyAgICBOb25lOiAiUHlfTm9uZSIsCit9CisKK2RlZiBjX3JlcHIobyk6CisgICAgc3BlY2lhbCA9IGNfc3BlY2lhbF92YWx1ZXMuZ2V0KG8pCisgICAgaWYgc3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIHNwZWNpYWwKKyAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgIHJldHVybiAnIicgKyBxdW90ZWRfZm9yX2Nfc3RyaW5nKG8pICsgJyInCisgICAgcmV0dXJuIHJlcHIobykKKworZGVmIGFkZF9jX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19jb252ZXJ0ZXInKV0KKyAgICBjb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKK2RlZiBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKToKKyAgICAjIGF1dG9tYXRpY2FsbHkgYWRkIGNvbnZlcnRlciBmb3IgZGVmYXVsdCBmb3JtYXQgdW5pdAorICAgICMgKGJ1dCB3aXRob3V0IHN0b21waW5nIG9uIHRoZSBleGlzdGluZyBvbmUgaWYgaXQncyBhbHJlYWR5CisgICAgIyBzZXQsIGluIGNhc2UgeW91IHN1YmNsYXNzKQorICAgIGlmICgoY2xzLmZvcm1hdF91bml0ICE9ICdPJicpIGFuZAorICAgICAgICAoY2xzLmZvcm1hdF91bml0IG5vdCBpbiBsZWdhY3lfY29udmVydGVycykpOgorICAgICAgICBsZWdhY3lfY29udmVydGVyc1tjbHMuZm9ybWF0X3VuaXRdID0gY2xzCisgICAgcmV0dXJuIGNscworCitkZWYgYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcihmb3JtYXRfdW5pdCwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIEFkZHMgYSBsZWdhY3kgY29udmVydGVyLgorICAgICIiIgorICAgIGRlZiBjbG9zdXJlKGYpOgorICAgICAgICBpZiBub3Qga3dhcmdzOgorICAgICAgICAgICAgYWRkZWRfZiA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZGVkX2YgPSBmdW5jdG9vbHMucGFydGlhbChmLCAqKmt3YXJncykKKyAgICAgICAgbGVnYWN5X2NvbnZlcnRlcnNbZm9ybWF0X3VuaXRdID0gYWRkZWRfZgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBjbG9zdXJlCisKK2NsYXNzIENDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIodHlwZSk6CisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgIGFkZF9jX2NvbnZlcnRlcihjbHMpCisgICAgICAgIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENDb252ZXJ0ZXIobWV0YWNsYXNzPUNDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorICAgICIiIgorICAgIEZvciB0aGUgaW5pdCBmdW5jdGlvbiwgc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGFuZCBkZWZhdWx0CisgICAgbXVzdCBiZSBrZXl3b3JkLW9yLXBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIEFsbCBvdGhlcgorICAgIHBhcmFtZXRlcnMgKGluY2x1ZGluZyAicmVxdWlyZWQiIGFuZCAiZG9jX2RlZmF1bHQiKQorICAgIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICdPJicKKworICAgICMgVGhlIFB5dGhvbiBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgYXMgYSBQeXRob24gdmFsdWUuCisgICAgIyBPciAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgZGVmYXVsdCA9IHVuc3BlY2lmaWVkCisKKyAgICAjICJkZWZhdWx0IiBhcyBpdCBzaG91bGQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkb2NfZGVmYXVsdCA9IE5vbmUKKworICAgICMgImRlZmF1bHQiIGNvbnZlcnRlZCBpbnRvIGEgc3RyIGZvciByZW5kZXJpbmcgaW50byBQeXRob24gY29kZS4KKyAgICBweV9kZWZhdWx0ID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgQyB2YXJpYWJsZSB3aGVuCisgICAgIyB0aGVyZSBpcyBubyBkZWZhdWx0LCBidXQgbm90IHNwZWNpZnlpbmcgYSBkZWZhdWx0IG1heQorICAgICMgcmVzdWx0IGluIGFuICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIiB3YXJuaW5nLiAgVGhpcyBjYW4KKyAgICAjIGVhc2lseSBoYXBwZW4gd2hlbiB1c2luZyBvcHRpb24gZ3JvdXBzLS1hbHRob3VnaAorICAgICMgcHJvcGVybHktd3JpdHRlbiBjb2RlIHdvbid0IGFjdHVhbGx5IHVzZSB0aGUgdmFyaWFibGUsCisgICAgIyB0aGUgdmFyaWFibGUgZG9lcyBnZXQgcGFzc2VkIGluIHRvIHRoZSBfaW1wbC4gIChBaCwgaWYKKyAgICAjIG9ubHkgZGF0YWZsb3cgYW5hbHlzaXMgY291bGQgaW5saW5lIHRoZSBzdGF0aWMgZnVuY3Rpb24hKQorICAgICMKKyAgICAjIFRoaXMgdmFsdWUgaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorICAgICMgRXZlcnkgbm9uLWFic3RyYWN0IHN1YmNsYXNzIHNob3VsZCBzdXBwbHkgYSB2YWxpZCB2YWx1ZS4KKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICdOVUxMJworCisgICAgIyBUaGUgQyBjb252ZXJ0ZXIgKmZ1bmN0aW9uKiB0byBiZSB1c2VkLCBpZiBhbnkuCisgICAgIyAoSWYgdGhpcyBpcyBub3QgTm9uZSwgZm9ybWF0X3VuaXQgbXVzdCBiZSAnTyYnLikKKyAgICBjb252ZXJ0ZXIgPSBOb25lCisKKyAgICBlbmNvZGluZyA9IE5vbmUKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IEZhbHNlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGRlZmF1bHQ9dW5zcGVjaWZpZWQsICosIGRvY19kZWZhdWx0PU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9yZXByKGRlZmF1bHQpCisgICAgICAgICAgICBzZWxmLmRvY19kZWZhdWx0ID0gZG9jX2RlZmF1bHQgaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmUgZWxzZSBzZWxmLnB5X2RlZmF1bHQKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19yZXByKGRlZmF1bHQpCisgICAgICAgIGVsaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsKGZ1bmN0aW9uLmZ1bGxuYW1lICsgIiBhcmd1bWVudCAiICsgbmFtZSArICIgc3BlY2lmaWVkIGEgJ2RvY19kZWZhdWx0JyB3aXRob3V0IGhhdmluZyBhICdkZWZhdWx0JyIpCisgICAgICAgIGlmIGFubm90YXRpb24gIT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBmYWlsKCJUaGUgJ2Fubm90YXRpb24nIHBhcmFtZXRlciBpcyBub3QgY3VycmVudGx5IHBlcm1pdHRlZC4iKQorICAgICAgICBzZWxmLnJlcXVpcmVkID0gcmVxdWlyZWQKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGlzX29wdGlvbmFsKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpIGFuZCAobm90IHNlbGYucmVxdWlyZWQpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisKKyAgICAgICAgIyBkZWNsYXJhdGlvbnMKKyAgICAgICAgZCA9IHNlbGYuZGVjbGFyYXRpb24oKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoZCkKKworICAgICAgICAjIGluaXRpYWxpemVycworICAgICAgICBpbml0aWFsaXplcnMgPSBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICBpZiBpbml0aWFsaXplcnM6CisgICAgICAgICAgICBkYXRhLmluaXRpYWxpemVycy5hcHBlbmQoJy8qIGluaXRpYWxpemVycyBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgaW5pdGlhbGl6ZXJzLnJzdHJpcCgpKQorCisgICAgICAgICMgaW1wbF9hcmd1bWVudHMKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5pbXBsX2J5X3JlZmVyZW5jZSBlbHNlICIiKSArIG5hbWUKKyAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQocykKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICAgICAgIyBrZXl3b3JkcworICAgICAgICBkYXRhLmtleXdvcmRzLmFwcGVuZChuYW1lKQorCisgICAgICAgICMgZm9ybWF0X3VuaXRzCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW9uYWwoKSBhbmQgJ3wnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnfCcpCisgICAgICAgIGlmIHBhcmFtZXRlci5pc19rZXl3b3JkX29ubHkoKSBhbmQgJyQnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnJCcpCisgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZChzZWxmLmZvcm1hdF91bml0KQorCisgICAgICAgICMgcGFyc2VfYXJndW1lbnRzCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnQoZGF0YS5wYXJzZV9hcmd1bWVudHMpCisKKyAgICAgICAgIyBpbXBsX3BhcmFtZXRlcnMKKyAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuYXBwZW5kKHNlbGYuc2ltcGxlX2RlY2xhcmF0aW9uKGJ5X3JlZmVyZW5jZT1zZWxmLmltcGxfYnlfcmVmZXJlbmNlKSkKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoIlB5X3NzaXplX2NsZWFuX3QgIiArIHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgY2xlYW51cCA9IHNlbGYuY2xlYW51cCgpCisgICAgICAgIGlmIGNsZWFudXA6CisgICAgICAgICAgICBkYXRhLmNsZWFudXAuYXBwZW5kKCcvKiBDbGVhbnVwIGZvciAnICsgbmFtZSArICcgKi9cbicgKyBjbGVhbnVwLnJzdHJpcCgpICsgIlxuIikKKworICAgIGRlZiBsZW5ndGhfbmFtZShzZWxmKToKKyAgICAgICAgIiIiQ29tcHV0ZXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgImxlbmd0aCIgdmFyaWFibGUuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkgKyAiX2xlbmd0aCIKKworICAgICMgV2h5IGlzIHRoaXMgb25lIGJyb2tlbiBvdXQgc2VwYXJhdGVseT8KKyAgICAjIEZvciAicG9zaXRpb25hbC1vbmx5IiBmdW5jdGlvbiBwYXJzaW5nLAorICAgICMgd2hpY2ggZ2VuZXJhdGVzIGEgYnVuY2ggb2YgUHlBcmdfUGFyc2VUdXBsZSBjYWxscy4KKyAgICBkZWYgcGFyc2VfYXJndW1lbnQoc2VsZiwgbGlzdCk6CisgICAgICAgIGFzc2VydCBub3QgKHNlbGYuY29udmVydGVyIGFuZCBzZWxmLmVuY29kaW5nKQorICAgICAgICBpZiBzZWxmLmZvcm1hdF91bml0ID09ICdPJic6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb252ZXJ0ZXIKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYuY29udmVydGVyKQorCisgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLmVuY29kaW5nKQorCisgICAgICAgIGxlZ2FsX25hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5wYXJzZV9ieV9yZWZlcmVuY2UgZWxzZSAiIikgKyBsZWdhbF9uYW1lCisgICAgICAgIGxpc3QuYXBwZW5kKHMpCisKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBsaXN0LmFwcGVuZCgiJiIgKyBzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICAjCisgICAgIyBBbGwgdGhlIGZ1bmN0aW9ucyBhZnRlciBoZXJlIGFyZSBpbnRlbmRlZCBhcyBleHRlbnNpb24gcG9pbnRzLgorICAgICMKKworICAgIGRlZiBzaW1wbGVfZGVjbGFyYXRpb24oc2VsZiwgYnlfcmVmZXJlbmNlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGVzIHRoZSBiYXNpYyBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgIFVzZWQgaW4gY29tcHV0aW5nIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gYW5kIHRoZQorICAgICAgICB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByb3RvdHlwZSA9IFtzZWxmLnR5cGVdCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZSBvciBub3Qgc2VsZi50eXBlLmVuZHN3aXRoKCcqJyk6CisgICAgICAgICAgICBwcm90b3R5cGUuYXBwZW5kKCIgIikKKyAgICAgICAgaWYgYnlfcmVmZXJlbmNlOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgnKicpCisgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpKQorICAgICAgICByZXR1cm4gIiIuam9pbihwcm90b3R5cGUpCisKKyAgICBkZWYgZGVjbGFyYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnQgdG8gZGVjbGFyZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgZGVjbGFyYXRpb24gPSBbc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oKV0KKyAgICAgICAgZGVmYXVsdCA9IHNlbGYuY19kZWZhdWx0CisgICAgICAgIGlmIG5vdCBkZWZhdWx0IGFuZCBzZWxmLnBhcmFtZXRlci5ncm91cDoKKyAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfaWdub3JlZF9kZWZhdWx0CisgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoIiA9ICIpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoZGVmYXVsdCkKKyAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCI7IikKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJ1xuUHlfc3NpemVfY2xlYW5fdCAnKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgnOycpCisgICAgICAgIHJldHVybiAiIi5qb2luKGRlY2xhcmF0aW9uKQorCisgICAgZGVmIGluaXRpYWxpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGlzIHZhcmlhYmxlIGJlZm9yZSBwYXJzaW5nLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBpbml0aWFsaXphdGlvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gY2xlYW51cCBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKworY2xhc3MgYm9vbF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAncCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICcwJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmRlZmF1bHQgPSBib29sKHNlbGYuZGVmYXVsdCkKKyAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdCJywgYml0d2lzZT1UcnVlKQorY2xhc3MgYnl0ZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdieXRlJworICAgIGZvcm1hdF91bml0ID0gJ2InCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiJ1wwJyIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgYml0d2lzZToKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnQicKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9zaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBzaG9ydCcKKyAgICBmb3JtYXRfdW5pdCA9ICdIJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK2NsYXNzIGludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAnaScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdpbnQnKToKKyAgICAgICAgaWYgdHlwZXMgPT0gJ3N0cic6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCisgICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6CisgICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorCitjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGZvcm1hdF91bml0ID0gJ0knCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGZvcm1hdF91bml0ID0gJ2wnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworY2xhc3MgdW5zaWduZWRfbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGZvcm1hdF91bml0ID0gJ2snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBsb25ncyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFBZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQWV9MT05HX0xPTkcnCisgICAgZm9ybWF0X3VuaXQgPSAnTCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGZvcm1hdF91bml0ID0gJ0snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBQWV9MT05HX0xPTkdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUHlfc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGZvcm1hdF91bml0ID0gJ24nCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworCitjbGFzcyBmbG9hdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdmbG9hdCcKKyAgICBmb3JtYXRfdW5pdCA9ICdmJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAuMCIKKworY2xhc3MgZG91YmxlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2RvdWJsZScKKyAgICBmb3JtYXRfdW5pdCA9ICdkJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAuMCIKKworCitjbGFzcyBQeV9jb21wbGV4X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2NvbXBsZXgnCisgICAgZm9ybWF0X3VuaXQgPSAnRCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICJ7MC4wLCAwLjB9IgorCisKK2NsYXNzIG9iamVjdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ08nCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZT1Ob25lKToKKyAgICAgICAgaWYgdHlwZToKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHR5cGUsIHN0cikKKyAgICAgICAgICAgIGFzc2VydCB0eXBlLmlzaWRlbnRpZmllcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHlwZSA9IGV2YWwodHlwZSkKKyAgICAgICAgICAgICAgICAjIG5lZWQgbW9yZSBvZiB0aGVzZSEKKyAgICAgICAgICAgICAgICB0eXBlID0geworICAgICAgICAgICAgICAgICAgICBzdHI6ICcmUHlVbmljb2RlX1R5cGUnLAorICAgICAgICAgICAgICAgICAgICB9W3R5cGVdCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlCisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ08hJworICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IHR5cGUKKworCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigncyMnLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd5JywgdHlwZT0iYnl0ZXMiKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3kjJywgdHlwZT0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdzJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAorICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorCisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoImJ5dGVzIiwpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoInN0ciIsKSkKKyAgICAgICAgYWxsXzNfdHlwZSA9IHNldCgoImJ5dGVhcnJheSIsKSkgfCBieXRlc190eXBlIHwgc3RyX3R5cGUKKyAgICAgICAgaXNfYnl0ZXMgPSB0eXBlcyA9PSBieXRlc190eXBlCisgICAgICAgIGlzX3N0ciA9IHR5cGVzID09IHN0cl90eXBlCisgICAgICAgIGlzX2FsbF8zID0gdHlwZXMgPT0gYWxsXzNfdHlwZQorCisgICAgICAgIHNlbGYubGVuZ3RoID0gYm9vbChsZW5ndGgpCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorCisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICAgICAgICAgIGlmIGlzX3N0ciBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIG5vdCAobGVuZ3RoIG9yIHplcm9lcyBvciBudWxsYWJsZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnZXQnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCB6ZXJvZXMgYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcyMnCisgICAgICAgICAgICBlbGlmIGlzX2FsbF8zIGFuZCBsZW5ndGggYW5kIG5vdCAobnVsbGFibGUgb3IgemVyb2VzKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCMnCisKKyAgICAgICAgICAgIGlmIGZvcm1hdF91bml0LmVuZHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IGNvZGUgdXNpbmcgZm9ybWF0IHVuaXQgIiwgcmVwcihmb3JtYXRfdW5pdCksICJwcm9iYWJseSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIikKKyAgICAgICAgICAgICAgICAjIFRPRE8gc2V0IHBvaW50ZXIgdG8gTlVMTAorICAgICAgICAgICAgICAgICMgVE9ETyBhZGQgY2xlYW51cCBmb3IgYnVmZmVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKHplcm9lcyBpcyBvbmx5IGxlZ2FsIHdpdGggYW4gZW5jb2RpbmcpIikKKworICAgICAgICAgICAgaWYgaXNfYnl0ZXMgYW5kIG5vdCAobnVsbGFibGUgb3IgbGVuZ3RoKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5JworICAgICAgICAgICAgZWxpZiBpc19ieXRlcyBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgIGFuZCBub3QgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3onCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgYW5kIGxlbmd0aDoKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6IycKKworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd1IycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBQeV9VTklDT0RFX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X1VOSUNPREUgKicKKyAgICBmb3JtYXRfdW5pdCA9ICd1JworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIG51bGxhYmxlPUZhbHNlLCBsZW5ndGg9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBudWxsYWJsZSBlbHNlICd1JworICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQorICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworIworIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6CisjICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQorIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQorIworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK2NsYXNzIFB5X2J1ZmZlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9idWZmZXInCisgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAie05VTEwsIE5VTEwsIDAsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9IgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICB0eXBlcyA9IHNldCh0eXBlcy5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIGJ5dGVzX3R5cGUgPSBzZXQoKCdieXRlcycsKSkKKyAgICAgICAgYnl0ZWFycmF5X3R5cGUgPSBzZXQoKCdieXRlYXJyYXknLCkpCisgICAgICAgIGJ1ZmZlcl90eXBlID0gc2V0KCgnYnVmZmVyJywpKQorICAgICAgICByd2J1ZmZlcl90eXBlID0gc2V0KCgncndidWZmZXInLCkpCisgICAgICAgIHJvYnVmZmVyX3R5cGUgPSBzZXQoKCdyb2J1ZmZlcicsKSkKKyAgICAgICAgc3RyX3R5cGUgPSBzZXQoKCdzdHInLCkpCisgICAgICAgIGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSA9IGJ5dGVzX3R5cGUgfCBieXRlYXJyYXlfdHlwZSB8IGJ1ZmZlcl90eXBlCisKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCisgICAgICAgIGlmIHR5cGVzID09IChzdHJfdHlwZSB8IGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzKicgaWYgbm90IG51bGxhYmxlIGVsc2UgJ3oqJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZmFpbCgnUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKG51bGxhYmxlPVRydWUpJykKKyAgICAgICAgICAgIGVsaWYgdHlwZXMgPT0gKGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlYXJyYXlfdHlwZSB8IHJ3dWZmZXJfdHlwZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAndyonCisgICAgICAgIGlmIG5vdCBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGZhaWwoIlB5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIikKKworICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiAiIi5qb2luKFsiaWYgKCIsIG5hbWUsICIuYnVmKVxuICAgUHlCdWZmZXJfUmVsZWFzZSgmIiwgbmFtZSwgIik7XG4iXSkKKworCitjbGFzcyBzZWxmX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICAiIiIKKyAgICBBIHNwZWNpYWwtY2FzZSBjb252ZXJ0ZXI6CisgICAgdGhpcyBpcyB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgdXNlZCBmb3IgInNlbGYiLgorICAgICIiIgorICAgIHR5cGUgPSAiUHlPYmplY3QgKiIKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisgICAgICAgIGlmIGYua2luZCA9PSBDQUxMQUJMRToKKyAgICAgICAgICAgIGlmIGYuY2xzOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9ICJzZWxmIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSAibW9kdWxlIgorICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9ICJQeU1vZHVsZURlZiAqIgorICAgICAgICBlbGlmIGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gIm51bGwiCisgICAgICAgICAgICBzZWxmLnR5cGUgPSAidm9pZCAqIgorICAgICAgICBlbGlmIGYua2luZCA9PSBDTEFTU19NRVRIT0Q6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSAiY2xzIgorICAgICAgICAgICAgc2VsZi50eXBlID0gIlB5VHlwZU9iamVjdCAqIgorCisgICAgZGVmIHJlbmRlcihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBmYWlsKCJyZW5kZXIoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIHNlbGZfY29udmVydGVyIGluc3RhbmNlcyIpCisKKworCitkZWYgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX3JldHVybl9jb252ZXJ0ZXInKToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIG5hbWUgPSBuYW1lWzotbGVuKCdfcmV0dXJuX2NvbnZlcnRlcicpXQorICAgIHJldHVybl9jb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcih0eXBlKToKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENSZXR1cm5Db252ZXJ0ZXIobWV0YWNsYXNzPUNSZXR1cm5Db252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorCisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGRlZmF1bHQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgZG9jX2RlZmF1bHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmRvY19kZWZhdWx0ID0gZG9jX2RlZmF1bHQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyX2luaXQoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHMgPSAnLCAnLmpvaW4obmFtZSArICc9JyArIHJlcHIodmFsdWUpIGZvciBuYW1lLCB2YWx1ZSBpbiBrd2FyZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgIHN5cy5leGl0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJygnICsgcyArICcpXG4nICsgc3RyKGUpKQorCisgICAgZGVmIHJldHVybl9jb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRlY2xhcmUoc2VsZiwgZGF0YSwgbmFtZT0iX3JldHVybl92YWx1ZSIpOgorICAgICAgICBsaW5lID0gW10KKyAgICAgICAgYWRkID0gbGluZS5hcHBlbmQKKyAgICAgICAgYWRkKHNlbGYudHlwZSkKKyAgICAgICAgaWYgbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICAgICAgYWRkKG5hbWUgKyAnOycpCisgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgnJy5qb2luKGxpbmUpKQorICAgICAgICBkYXRhLnJldHVybl92YWx1ZSA9IG5hbWUKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWYoc2VsZiwgZXhwciwgZGF0YSk6CisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdpZiAoKHt9KSAmJiBQeUVycl9PY2N1cnJlZCgpKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KGV4cHIpKQorCisgICAgZGVmIGVycl9vY2N1cnJlZF9pZl9udWxsX3BvaW50ZXIoc2VsZiwgdmFyaWFibGUsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKHt9ID09IE5VTEwpXG4gICAgZ290byBleGl0O1xuJy5mb3JtYXQodmFyaWFibGUpKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBmdW5jdGlvbiBpcyBhIGNsaW5pYy5GdW5jdGlvbiBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCithZGRfY19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIsICdvYmplY3QnKQorCitjbGFzcyBpbnRfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIGxvbmdfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2xvbmcnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IC0xIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKF9yZXR1cm5fdmFsdWUpO1xuJykKKworCitjbGFzcyBQeV9zc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgRGVjb2RlRlNEZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyIConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIEluZGVudFN0YWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KKyAgICAgICAgc2VsZi5tYXJnaW4gPSBOb25lCisKKyAgICBkZWYgX2Vuc3VyZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoJ0luZGVudFN0YWNrIGV4cGVjdGVkIGluZGVudHMsIGJ1dCBub25lIGFyZSBkZWZpbmVkLicpCisKKyAgICBkZWYgbWVhc3VyZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSdzIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLicpCisgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3RyaXAoKQorICAgICAgICBpZiBub3QgbGVuKHN0cmlwcGVkKToKKyAgICAgICAgICAgICMgd2UgY2FuJ3QgdGVsbCBhbnl0aGluZyBmcm9tIGFuIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgc28ganVzdCBwcmV0ZW5kIGl0J3MgaW5kZW50ZWQgbGlrZSBvdXIgY3VycmVudCBpbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKHN0cmlwcGVkKQorCisgICAgZGVmIGluZmVyKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5mZXIgd2hhdCBpcyBub3cgdGhlIGN1cnJlbnQgbWFyZ2luIGJhc2VkIG9uIHRoaXMgbGluZS4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDEgaWYgd2UgaGF2ZSBpbmRlbnRlZCAob3IgdGhpcyBpcyB0aGUgZmlyc3QgbWFyZ2luKQorICAgICAgICAgICAgMCBpZiB0aGUgbWFyZ2luIGhhcyBub3QgY2hhbmdlZAorICAgICAgICAgICAtTiBpZiB3ZSBoYXZlIGRlZGVudGVkIE4gdGltZXMKKyAgICAgICAgIiIiCisgICAgICAgIGluZGVudCA9IHNlbGYubWVhc3VyZShsaW5lKQorICAgICAgICBtYXJnaW4gPSAnICcgKiBpbmRlbnQKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIGlmIGluZGVudCA9PSBjdXJyZW50OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgaW5kZW50ID4gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICMgaW5kZW50IDwgY3VycmVudAorICAgICAgICBpZiBpbmRlbnQgbm90IGluIHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgb3V0ZGVudC4iKQorICAgICAgICBvdXRkZW50X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBpbmRlbnQgIT0gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgICAgIG91dGRlbnRfY291bnQgLT0gMQorICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICByZXR1cm4gb3V0ZGVudF9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBob3cgbWFueSBtYXJnaW5zIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5pbmRlbnRzKQorCisgICAgZGVmIGluZGVudChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluZGVudHMgYSBsaW5lIGJ5IHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXJnaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYXJnaW4gKyBsaW5lCisKKyAgICBkZWYgZGVkZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVkZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgKFRoZSBpbnZlcnNlIG9mICdpbmRlbnQnLikKKyAgICAgICAgIiIiCisgICAgICAgIG1hcmdpbiA9IHNlbGYubWFyZ2luCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChtYXJnaW4pOgorICAgICAgICAgICAgZmFpbCgnQ2Fubm90IGRlZGVudCwgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmV2aW91cyBtYXJnaW46JykKKyAgICAgICAgcmV0dXJuIGxpbmVbaW5kZW50Ol0KKworCitjbGFzcyBEU0xQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisKKyAgICAgICAgc2VsZi5kaXJlY3RpdmVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHNlbGYpOgorICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGRpcmVjdGl2ZV8gYXJlIGFkZGVkIHRvIGRpcmVjdGl2ZXMKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJkaXJlY3RpdmVfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzW2tleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgICAgICMgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBhdF8gYXJlIHRvbywgd2l0aCBhbiBAIGluIGZyb250CisgICAgICAgICAgICBfLCBzLCBrZXkgPSBuYW1lLnBhcnRpdGlvbigiYXRfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzWydAJyArIGtleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlX2RzbF9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9pbmRlbnQgPSBOb25lCisgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cCA9IDAKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgIHNlbGYuaW5kZW50ID0gSW5kZW50U3RhY2soKQorICAgICAgICBzZWxmLmtpbmQgPSBDQUxMQUJMRQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBGYWxzZQorCisgICAgZGVmIGRpcmVjdGl2ZV92ZXJzaW9uKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgZ2xvYmFsIHZlcnNpb24KKyAgICAgICAgaWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24sIHJlcXVpcmVkKSA8IDA6CisgICAgICAgICAgICBmYWlsKCJJbnN1ZmZpY2llbnQgQ2xpbmljIHZlcnNpb24hXG4gIFZlcnNpb246ICIgKyB2ZXJzaW9uICsgIlxuICBSZXF1aXJlZDogIiArIHJlcXVpcmVkKQorCisgICAgZGVmIGRpcmVjdGl2ZV9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBuZXcgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisgICAgICAgIGlmIGNsczoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IG5lc3QgYSBtb2R1bGUgaW5zaWRlIGEgY2xhc3MhIikKKyAgICAgICAgbSA9IE1vZHVsZShuYW1lLCBtb2R1bGUpCisgICAgICAgIG1vZHVsZS5tb2R1bGVzW25hbWVdID0gbQorICAgICAgICBzZWxmLmJsb2NrLnNpZ25hdHVyZXMuYXBwZW5kKG0pCisKKyAgICBkZWYgZGlyZWN0aXZlX2NsYXNzKHNlbGYsIG5hbWUpOgorICAgICAgICBmaWVsZHMgPSBuYW1lLnNwbGl0KCcuJykKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IHNlbGYKKyAgICAgICAgbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBzb19mYXIgPSBbXQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBjID0gQ2xhc3MobmFtZSwgbW9kdWxlLCBjbHMpCisgICAgICAgIGlmIGNsczoKKyAgICAgICAgICAgIGNscy5jbGFzc2VzW25hbWVdID0gYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlLmNsYXNzZXNbbmFtZV0gPSBjCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoYykKKworICAgIGRlZiBhdF9jbGFzc21ldGhvZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYua2luZCBpcyBDQUxMQUJMRQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmtpbmQgaXMgQ0FMTEFCTEUKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmNvZXhpc3QgPT0gRmFsc2UKKyAgICAgICAgc2VsZi5jb2V4aXN0ID0gVHJ1ZQorCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ibG9jayA9IGJsb2NrCisgICAgICAgIGJsb2NrX3N0YXJ0ID0gc2VsZi5jbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgICAgIGxpbmVzID0gYmxvY2suaW5wdXQuc3BsaXQoJ1xuJykKKyAgICAgICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcywgc2VsZi5jbGluaWMuYmxvY2tfcGFyc2VyLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyKToKKyAgICAgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBmYWlsKCdUYWIgY2hhcmFjdGVycyBhcmUgaWxsZWdhbCBpbiB0aGUgQ2xpbmljIERTTC5cblx0JyArIHJlcHIobGluZSksIGxpbmVfbnVtYmVyPWJsb2NrX3N0YXJ0KQorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX3Rlcm1pbmFsKQorICAgICAgICBzZWxmLnN0YXRlKE5vbmUpCisKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gc2VsZi5jbGluaWMubGFuZ3VhZ2UucmVuZGVyKGJsb2NrLnNpZ25hdHVyZXMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAjIGlnbm9yZSBjb21tZW50LW9ubHkgbGluZXMKKyAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgSWdub3JlIGVtcHR5IGxpbmVzIHRvbworICAgICAgICAjIChidXQgbm90IGluIGRvY3N0cmluZyBzZWN0aW9ucyEpCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYWxjdWxhdGVfaW5kZW50KGxpbmUpOgorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKGxpbmUuc3RyaXAoKSkKKworICAgIGRlZiBuZXh0KHNlbGYsIHN0YXRlLCBsaW5lPU5vbmUpOgorICAgICAgICAjIHJlYWxfcHJpbnQoc2VsZi5zdGF0ZS5fX25hbWVfXywgIi0+Iiwgc3RhdGUuX19uYW1lX18sICIsIGxpbmU9IiwgbGluZSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIGlmIGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICBkZWYgc3RhdGVfZHNsX3N0YXJ0KHNlbGYsIGxpbmUpOgorICAgICAgICAjIHNlbGYuYmxvY2sgPSBzZWxmLkNsaW5pY091dHB1dEJsb2NrKHNlbGYpCisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfbW9kdWxlbmFtZV9uYW1lLCBsaW5lKQorCisgICAgZGVmIHN0YXRlX21vZHVsZW5hbWVfbmFtZShzZWxmLCBsaW5lKToKKyAgICAgICAgIyBsb29raW5nIGZvciBkZWNsYXJhdGlvbiwgd2hpY2ggZXN0YWJsaXNoZXMgdGhlIGxlZnRtb3N0IGNvbHVtbgorICAgICAgICAjIGxpbmUgc2hvdWxkIGJlCisgICAgICAgICMgICAgIG1vZHVsZW5hbWUuZm5uYW1lIFthcyBjX2Jhc2VuYW1lXSBbLT4gcmV0dXJuIGFubm90YXRpb25dCisgICAgICAgICMgc3F1YXJlIGJyYWNrZXRzIGRlbm90ZSBvcHRpb25hbCBzeW50YXguCisgICAgICAgICMKKyAgICAgICAgIyAoYnV0IHdlIG1pZ2h0IGZpbmQgYSBkaXJlY3RpdmUgZmlyc3QhKQorICAgICAgICAjCisgICAgICAgICMgdGhpcyBsaW5lIGlzIHBlcm1pdHRlZCB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UuCisgICAgICAgICMgd2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRiAoZm9yICJmdW5jdGlvbiIpLgorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorCisgICAgICAgICMgaXMgaXQgYSBkaXJlY3RpdmU/CisgICAgICAgIGZpZWxkcyA9IHNobGV4LnNwbGl0KGxpbmUpCisgICAgICAgIGRpcmVjdGl2ZV9uYW1lID0gZmllbGRzWzBdCisgICAgICAgIGRpcmVjdGl2ZSA9IHNlbGYuZGlyZWN0aXZlcy5nZXQoZGlyZWN0aXZlX25hbWUsIE5vbmUpCisgICAgICAgIGlmIGRpcmVjdGl2ZToKKyAgICAgICAgICAgIGRpcmVjdGl2ZSgqZmllbGRzWzE6XSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUsIF8sIHJldHVybnMgPSBsaW5lLnBhcnRpdGlvbignLT4nKQorCisgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGxpbmUucGFydGl0aW9uKCcgYXMgJykKKyAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUuc3RyaXAoKSBvciBOb25lCisKKyAgICAgICAgaWYgbm90IGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgZnVuY3Rpb24gbmFtZToge30iLmZvcm1hdChmdWxsX25hbWUpKQorICAgICAgICBpZiBjX2Jhc2VuYW1lIGFuZCBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBDIGJhc2VuYW1lOiB7fSIuZm9ybWF0KGNfYmFzZW5hbWUpKQorCisgICAgICAgIGlmIG5vdCByZXR1cm5zOgorICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IENSZXR1cm5Db252ZXJ0ZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KCkgLT4ge306IHBhc3MiLmZvcm1hdChyZXR1cm5zKQorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIobW9kdWxlLmJvZHlbMF0ucmV0dXJucykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGxlZ2FjeQorICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHJldHVybl9jb252ZXJ0ZXJzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJFcnJvcjogTm8gYXZhaWxhYmxlIHJldHVybiBjb252ZXJ0ZXIgY2FsbGVkICIgKyByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyc1tuYW1lXSgqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisKKyAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiVW5kZWZpbmVkIG1vZHVsZSB1c2VkIGluIGRlY2xhcmF0aW9uIG9mICIgKyByZXByKGZ1bGxfbmFtZS5zdHJpcCgpKSArICIuIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IEZ1bmN0aW9uKG5hbWU9ZnVuY3Rpb25fbmFtZSwgZnVsbF9uYW1lPWZ1bGxfbmFtZSwgbW9kdWxlPW1vZHVsZSwgY2xzPWNscywgY19iYXNlbmFtZT1jX2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlcj1yZXR1cm5fY29udmVydGVyLCBraW5kPXNlbGYua2luZCwgY29leGlzdD1zZWxmLmNvZXhpc3QpCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyc19zdGFydCkKKworICAgICMgTm93IGVudGVyaW5nIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24uICBUaGUgcnVsZXMsIGZvcm1hbGx5IHN0YXRlZDoKKyAgICAjCisgICAgIyAgICogQWxsIGxpbmVzIG11c3QgYmUgaW5kZW50ZWQgd2l0aCBzcGFjZXMgb25seS4KKyAgICAjICAgKiBUaGUgZmlyc3QgbGluZSBtdXN0IGJlIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgaW5kZW50ZWQuCisgICAgIyAgICAgICAqIFRoaXMgZmlyc3QgbGluZSBlc3RhYmxpc2hlcyB0aGUgaW5kZW50IGZvciBwYXJhbWV0ZXJzLgorICAgICMgICAgICAgKiBXZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBQIChmb3IgInBhcmFtZXRlciIpLgorICAgICMgICAqIFRoZW5jZWZvcnRoOgorICAgICMgICAgICAgKiBMaW5lcyBpbmRlbnRlZCB3aXRoIFAgc3BhY2VzIHNwZWNpZnkgYSBwYXJhbWV0ZXIuCisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggPiBQIHNwYWNlcyBhcmUgZG9jc3RyaW5ncyBmb3IgdGhlIHByZXZpb3VzCisgICAgIyAgICAgICAgIHBhcmFtZXRlci4KKyAgICAjICAgICAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIEQgKGZvciAiZG9jc3RyaW5nIikuCisgICAgIyAgICAgICAgICAgKiBBbGwgc3Vic2VxdWVudCBsaW5lcyBpbmRlbnRlZCB3aXRoID49IEQgc3BhY2VzIGFyZSBzdG9yZWQgYXMKKyAgICAjICAgICAgICAgICAgIHBhcnQgb2YgdGhlIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nLgorICAgICMgICAgICAgICAgICogQWxsIGxpbmVzIHdpbGwgaGF2ZSB0aGUgZmlyc3QgRCBzcGFjZXMgb2YgdGhlIGluZGVudCBzdHJpcHBlZAorICAgICMgICAgICAgICAgICAgYmVmb3JlIHRoZXkgYXJlIHN0b3JlZC4KKyAgICAjICAgICAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGEgbGluZSBzdGFydGluZyB3aXRoIGEgbnVtYmVyIG9mIHNwYWNlcyBYCisgICAgIyAgICAgICAgICAgICBzdWNoIHRoYXQgUCA8IFggPCBELgorICAgICMgICAgICAgKiBBIGxpbmUgd2l0aCA8IFAgc3BhY2VzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmdW5jdGlvbgorICAgICMgICAgICAgICBkb2NzdHJpbmcsIHdoaWNoIGVuZHMgcHJvY2Vzc2luZyBmb3IgcGFyYW1ldGVycyBhbmQgcGVyLXBhcmFtZXRlcgorICAgICMgICAgICAgICBkb2NzdHJpbmdzLgorICAgICMgICAgICAgICAgICogVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uIGRvY3N0cmluZyBtdXN0IGJlIGF0IHRoZSBzYW1lCisgICAgIyAgICAgICAgICAgICBpbmRlbnQgYXMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICMgICAgICAgKiBJdCdzIGlsbGVnYWwgdG8gaGF2ZSBhbnkgbGluZSBpbiB0aGUgcGFyYW1ldGVycyBzZWN0aW9uIHN0YXJ0aW5nCisgICAgIyAgICAgICAgIHdpdGggWCBzcGFjZXMgc3VjaCB0aGF0IEYgPCBYIDwgUC4gIChBcyBiZWZvcmUsIEYgaXMgdGhlIGluZGVudAorICAgICMgICAgICAgICBvZiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uKQorICAgICMKKyAgICAjIyMjIyMjIyMjIyMjIworICAgICMKKyAgICAjIEFsc28sIGN1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgcGxhY2VzIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIGdyb3VwczoKKyAgICAjICAgKiBFYWNoIGdyb3VwIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLgorICAgICMgICAqIEVhY2ggZ3JvdXAgbWF5IGNvbnRhaW4gYXQgbW9zdCBvbmUgZ3JvdXAsIHdoaWNoIG11c3QgYmUgdGhlIGZ1cnRoZXN0CisgICAgIyAgICAgdGhpbmcgaW4gdGhlIGdyb3VwIGZyb20gdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuICAoVGhlIG5lc3RlZCBncm91cAorICAgICMgICAgIG11c3QgYmUgdGhlIGZpcnN0IGluIHRoZSBncm91cCB3aGVuIGl0J3MgYmVmb3JlIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMsIGFuZCB0aGUgbGFzdCB0aGluZyBpbiB0aGUgZ3JvdXAgd2hlbiBhZnRlciB0aGUgcmVxdWlyZWQKKyAgICAjICAgICBwYXJhbWV0ZXJzLikKKyAgICAjICAgKiBUaGVyZSBtYXkgYmUgYXQgbW9zdCBvbmUgKHRvcC1sZXZlbCkgZ3JvdXAgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YKKyAgICAjICAgICB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjICAgKiBZb3UgbXVzdCBzcGVjaWZ5IGEgc2xhc2gsIGFuZCBpdCBtdXN0IGJlIGFmdGVyIGFsbCBwYXJhbWV0ZXJzLgorICAgICMgICAgIChJbiBvdGhlciB3b3JkczogZWl0aGVyIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLW9ubHksCisgICAgIyAgICAgIG9yIG5vbmUgYXJlLikKKyAgICAjCisgICAgIyAgU2FpZCBhbm90aGVyIHdheToKKyAgICAjICAgKiBFYWNoIGdyb3VwIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLgorICAgICMgICAqIEFsbCBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgbXVzdCBiZQorICAgICMgICAgIGNvbnNlY3V0aXZlLiAgKFlvdSBjYW4ndCBoYXZlIGEgbGVmdCBzcXVhcmUgYnJhY2tldCBmb2xsb3dlZAorICAgICMgICAgIGJ5IGEgcGFyYW1ldGVyLCB0aGVuIGFub3RoZXIgbGVmdCBzcXVhcmUgYnJhY2tldC4gIFlvdSBjYW4ndAorICAgICMgICAgIGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0LCBhIHBhcmFtZXRlciwgYSByaWdodCBzcXVhcmUgYnJhY2tldCwKKyAgICAjICAgICBhbmQgdGhlbiBhIGxlZnQgc3F1YXJlIGJyYWNrZXQuKQorICAgICMgICAqIEFsbCByaWdodCBzcXVhcmUgYnJhY2tldHMgYWZ0ZXIgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgbXVzdCBiZQorICAgICMgICAgIGNvbnNlY3V0aXZlLgorICAgICMKKyAgICAjIFRoZXNlIHJ1bGVzIGFyZSBlbmZvcmNlZCB3aXRoIGEgc2luZ2xlIHN0YXRlIHZhcmlhYmxlOgorICAgICMgInBhcmFtZXRlcl9zdGF0ZSIuICAoUHJldmlvdXNseSB0aGUgY29kZSB3YXMgYSBtaWFzbWEgb2YgaWZzIGFuZAorICAgICMgc2VwYXJhdGUgYm9vbGVhbiBzdGF0ZSB2YXJpYWJsZXMuKSAgVGhlIHN0YXRlcyBhcmU6CisgICAgIworICAgICMgIFsgWyBhLCBiLCBdIGMsIF0gZCwgZSwgZiwgWyBnLCBoLCBbIGkgXSBdIC8gICA8LSBsaW5lCisgICAgIyAwMSAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgICA1ICAgNiAgIDwtIHN0YXRlIHRyYW5zaXRpb25zCisgICAgIworICAgICMgMDogcHNfc3RhcnQuICBiZWZvcmUgd2UndmUgc2VlbiBhbnl0aGluZy4gIGxlZ2FsIHRyYW5zaXRpb25zIGFyZSB0byAxIG9yIDMuCisgICAgIyAxOiBwc19sZWZ0X3NxdWFyZV9iZWZvcmUuICBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDI6IHBzX2dyb3VwX2JlZm9yZS4gIGluIGEgZ3JvdXAsIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMzogcHNfcmVxdWlyZWQuICByZXF1aXJlZCBwYXJhbWV0ZXJzLiAgKHJlbnVtYmVyIGxlZnQgZ3JvdXBzISkKKyAgICAjIDQ6IHBzX2dyb3VwX2FmdGVyLiAgaW4gYSBncm91cCwgYWZ0ZXIgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDU6IHBzX3JpZ2h0X3NxdWFyZV9hZnRlci4gIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNjogcHNfc2Vlbl9zbGFzaC4gIHNlZW4gc2xhc2guCisgICAgcHNfc3RhcnQsIHBzX2xlZnRfc3F1YXJlX2JlZm9yZSwgcHNfZ3JvdXBfYmVmb3JlLCBwc19yZXF1aXJlZCwgXAorICAgIHBzX2dyb3VwX2FmdGVyLCBwc19yaWdodF9zcXVhcmVfYWZ0ZXIsIHBzX3NlZW5fc2xhc2ggPSByYW5nZSg3KQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcnNfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlmIHRoaXMgbGluZSBpcyBub3QgaW5kZW50ZWQsIHdlIGhhdmUgbm8gcGFyYW1ldGVycworICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnQuaW5mZXIobGluZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisKKworICAgIGRlZiB0b19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zaXRpb24gdG8gdGhlICJyZXF1aXJlZCIgcGFyYW1ldGVyIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yZXF1aXJlZAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHAuZ3JvdXAgPSAtcC5ncm91cAorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAyCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICMgd2Ugb3V0ZGVudGVkLCBtdXN0IGJlIHRvIGRlZmluaXRpb24gY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgIyB3ZSBpbmRlbnRlZCwgbXVzdCBiZSB0byBuZXcgcGFyYW1ldGVyIGRvY3N0cmluZyBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0LCBsaW5lKQorCisgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisKKyAgICAgICAgaWYgbGluZSBpbiAoJyonLCAnLycsICdbJywgJ10nKToKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc3BlY2lhbF9zeW1ib2wobGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYmVmb3JlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19ncm91cF9hZnRlcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKworICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKKyAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gaW52YWxpZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb246XG5cdCIgKyBsaW5lKQorCisgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSBtb2R1bGUuYm9keVswXS5hcmdzCisgICAgICAgIHBhcmFtZXRlciA9IGZ1bmN0aW9uX2FyZ3MuYXJnc1swXQorCisgICAgICAgIGlmIGZ1bmN0aW9uX2FyZ3MuZGVmYXVsdHM6CisgICAgICAgICAgICBleHByID0gZnVuY3Rpb25fYXJncy5kZWZhdWx0c1swXQorICAgICAgICAgICAgIyBtaWxkIGhhY2s6IGV4cGxpY2l0bHkgc3VwcG9ydCBOVUxMIGFzIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHByLCBhc3QuTmFtZSkgYW5kIGV4cHIuaWQgPT0gJ05VTEwnOgorICAgICAgICAgICAgICAgIHZhbHVlID0gTlVMTAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdC5saXRlcmFsX2V2YWwoZXhwcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gdW5zcGVjaWZpZWQKKworICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5hcmcKKyAgICAgICAgbmFtZSwgbGVnYWN5LCBrd2FyZ3MgPSBzZWxmLnBhcnNlX2NvbnZlcnRlcihwYXJhbWV0ZXIuYW5ub3RhdGlvbikKKyAgICAgICAgZGljdCA9IGxlZ2FjeV9jb252ZXJ0ZXJzIGlmIGxlZ2FjeSBlbHNlIGNvbnZlcnRlcnMKKyAgICAgICAgbGVnYWN5X3N0ciA9ICJsZWdhY3kgIiBpZiBsZWdhY3kgZWxzZSAiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWN0OgorICAgICAgICAgICAgZmFpbCgne30gaXMgbm90IGEgdmFsaWQge31jb252ZXJ0ZXInLmZvcm1hdChuYW1lLCBsZWdhY3lfc3RyKSkKKyAgICAgICAgY29udmVydGVyID0gZGljdFtuYW1lXShwYXJhbWV0ZXJfbmFtZSwgc2VsZi5mdW5jdGlvbiwgdmFsdWUsICoqa3dhcmdzKQorCisgICAgICAgICMgc3BlY2lhbCBjYXNlOiBpZiBpdCdzIHRoZSBzZWxmIGNvbnZlcnRlciwKKyAgICAgICAgIyBkb24ndCBhY3R1YWxseSBhZGQgaXQgdG8gdGhlIHBhcmFtZXRlciBsaXN0CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMgb3IgKHNlbGYucGFyYW1ldGVyX3N0YXRlICE9IHNlbGYucHNfcmVxdWlyZWQpOgorICAgICAgICAgICAgICAgIGZhaWwoIlRoZSAnc2VsZicgcGFyYW1ldGVyLCBpZiBzcGVjaWZpZWQsIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgdGhpbmcgaW4gdGhlIHBhcmFtZXRlciBibG9jay4iKQorICAgICAgICAgICAgaWYgc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICBmYWlsKCJZb3UgY2FuJ3Qgc3BlY2lmeSB0aGUgJ3NlbGYnIHBhcmFtZXRlciBtb3JlIHRoYW4gb25jZS4iKQorICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBraW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZIGlmIHNlbGYua2V5d29yZF9vbmx5IGVsc2UgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisgICAgICAgIHAgPSBQYXJhbWV0ZXIocGFyYW1ldGVyX25hbWUsIGtpbmQsIGZ1bmN0aW9uPXNlbGYuZnVuY3Rpb24sIGNvbnZlcnRlcj1jb252ZXJ0ZXIsIGRlZmF1bHQ9dmFsdWUsIGdyb3VwPXNlbGYuZ3JvdXApCisgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyc1twYXJhbWV0ZXJfbmFtZV0gPSBwCisKKyAgICBkZWYgcGFyc2VfY29udmVydGVyKHNlbGYsIGFubm90YXRpb24pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5TdHIpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24ucywgVHJ1ZSwge30KKworICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5OYW1lKToKKyAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLmlkLCBGYWxzZSwge30KKworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhbm5vdGF0aW9uLCBhc3QuQ2FsbCkKKworICAgICAgICBuYW1lID0gYW5ub3RhdGlvbi5mdW5jLmlkCisgICAgICAgIGt3YXJncyA9IHtub2RlLmFyZzogYXN0LmxpdGVyYWxfZXZhbChub2RlLnZhbHVlKSBmb3Igbm9kZSBpbiBhbm5vdGF0aW9uLmtleXdvcmRzfQorICAgICAgICByZXR1cm4gbmFtZSwgRmFsc2UsIGt3YXJncworCisgICAgZGVmIHBhcnNlX3NwZWNpYWxfc3ltYm9sKHNlbGYsIHN5bWJvbCk6CisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfc2Vlbl9zbGFzaDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHNwZWNpZmllcyAiICsgc3ltYm9sICsgIiBhZnRlciAvLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorCisgICAgICAgIGlmIHN5bWJvbCA9PSAnKic6CisgICAgICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiB1c2VzICcqJyBtb3JlIHRoYW4gb25jZS4iKQorICAgICAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICdbJzoKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19yZXF1aXJlZCwgc2VsZi5wc19ncm91cF9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2FmdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgKz0gMQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnXSc6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ncm91cDoKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisgICAgICAgICAgICBpZiBub3QgYW55KHAuZ3JvdXAgPT0gc2VsZi5ncm91cCBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCkpOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBlbXB0eSBncm91cC5cbkFsbCBncm91cHMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBzZWxmLnBzX2dyb3VwX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19ncm91cF9hZnRlciwgc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnLyc6CisgICAgICAgICAgICAjIHBzX3JlcXVpcmVkIGlzIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIG1peGVzIGtleXdvcmQtb25seSBhbmQgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc2Vlbl9zbGFzaAorICAgICAgICAgICAgIyBmaXh1cCBwcmVjZWVkaW5nIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiBwLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXI6CisgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLnNlbGZfY29udmVydGVyID0gc2VsZl9jb252ZXJ0ZXIoInNlbGYiLCBzZWxmLmZ1bmN0aW9uKQorCisgICAgICAgIGlmIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICJcbiIKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5pbmRlbnQuZGVkZW50KGxpbmUpLnJzdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gJycKKyAgICAgICAgbmV3X2RvY3N0cmluZyArPSBsaW5lCisgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nID0gbmV3X2RvY3N0cmluZworCisgICAgZGVmIGZvcm1hdF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBmaXJzdCBsaW5lCisgICAgICAgICMjCisKKyAgICAgICAgYWRkKGYubmFtZSkKKyAgICAgICAgYWRkKCcoJykKKworICAgICAgICAjIHBvcHVsYXRlICJyaWdodF9icmFja2V0X2NvdW50IiBmaWVsZCBmb3IgZXZlcnkgcGFyYW1ldGVyCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAjIGZvciBub3csIHRoZSBvbmx5IHdheSBDbGluaWMgc3VwcG9ydHMgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICMgaXMgaWYgYWxsIG9mIHRoZW0gYXJlIHBvc2l0aW9uYWwtb25seS4KKyAgICAgICAgICAgIHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzID0gW3Aua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkgZm9yIHAgaW4gcGFyYW1ldGVyc10KKyAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNbMF0ua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGFsbChwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICBwLnJpZ2h0X2JyYWNrZXRfY291bnQgPSBhYnMocC5ncm91cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBkb24ndCBwdXQgYW55IHJpZ2h0IGJyYWNrZXRzIGFyb3VuZCBub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIGV2ZXIuCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAgICAgcC5yaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgPSAwCisKKyAgICAgICAgZGVmIGZpeF9yaWdodF9icmFja2V0X2NvdW50KGRlc2lyZWQpOgorICAgICAgICAgICAgbm9ubG9jYWwgcmlnaHRfYnJhY2tldF9jb3VudAorICAgICAgICAgICAgcyA9ICcnCisgICAgICAgICAgICB3aGlsZSByaWdodF9icmFja2V0X2NvdW50IDwgZGVzaXJlZDoKKyAgICAgICAgICAgICAgICBzICs9ICdbJworICAgICAgICAgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgKz0gMQorICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA+IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnXScKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50IC09IDEKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICAgICAgYWRkZWRfc3RhciA9IEZhbHNlCisgICAgICAgIGFkZF9jb21tYSA9IEZhbHNlCisKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGFzc2VydCBwLm5hbWUKKworICAgICAgICAgICAgaWYgcC5pc19rZXl3b3JkX29ubHkoKSBhbmQgbm90IGFkZGVkX3N0YXI6CisgICAgICAgICAgICAgICAgYWRkZWRfc3RhciA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgICAgIGFkZCgnLCAnKQorICAgICAgICAgICAgICAgIGFkZCgnKicpCisKKyAgICAgICAgICAgIGEgPSBbcC5uYW1lXQorICAgICAgICAgICAgaWYgcC5jb252ZXJ0ZXIuaXNfb3B0aW9uYWwoKToKKyAgICAgICAgICAgICAgICBhLmFwcGVuZCgnPScpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBwLmNvbnZlcnRlci5kZWZhdWx0CisgICAgICAgICAgICAgICAgYS5hcHBlbmQocC5jb252ZXJ0ZXIuZG9jX2RlZmF1bHQpCisgICAgICAgICAgICBzID0gZml4X3JpZ2h0X2JyYWNrZXRfY291bnQocC5yaWdodF9icmFja2V0X2NvdW50KQorICAgICAgICAgICAgcyArPSAiIi5qb2luKGEpCisgICAgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgYWRkKCcsICcpCisgICAgICAgICAgICBhZGQocykKKyAgICAgICAgICAgIGFkZF9jb21tYSA9IFRydWUKKworICAgICAgICBhZGQoZml4X3JpZ2h0X2JyYWNrZXRfY291bnQoMCkpCisgICAgICAgIGFkZCgnKScpCisKKyAgICAgICAgIyBpZiBmLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQ6CisgICAgICAgICMgICAgIGFkZCgnIC0+ICcpCisgICAgICAgICMgICAgIGFkZChmLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQpCisKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQorCisgICAgICAgICMgbm93IGZpeCB1cCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBicmFja2V0cyBsb29rIHdyb25nCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gZG9jc3RyaW5nX2ZpcnN0X2xpbmUucmVwbGFjZSgnLCBdJywgJyxdICcpCisKKyAgICAgICAgIyBva2F5LiAgbm93IHdlJ3JlIG9mZmljaWFsbHkgYnVpbGRpbmcgdGhlICJwYXJhbWV0ZXJzIiBzZWN0aW9uLgorICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIHNwYWNlcl9saW5lID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBwLmRvY3N0cmluZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzcGFjZXJfbGluZToKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BhY2VyX2xpbmUgPSBUcnVlCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IG91dHB1dCgpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICdcbicKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwYXJhbWV0ZXJzfSB3ZSdyZSBhYm91dCB0byBhZGQuCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPSBsZW4oZG9jc3RyaW5nLnNwbGl0KCd7cGFyYW1ldGVyc30nKSkgLSAxCisgICAgICAgIGlmIHBhcmFtZXRlcnNfbWFya2VyX2NvdW50ID4gMToKKyAgICAgICAgICAgIGZhaWwoJ1lvdSBtYXkgbm90IHNwZWNpZnkge3BhcmFtZXRlcnN9IG1vcmUgdGhhbiBvbmNlIGluIGEgZG9jc3RyaW5nIScpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnNfbWFya2VyX2NvdW50OgorICAgICAgICAgICAgIyBpbnNlcnQgYWZ0ZXIgc3VtbWFyeSBsaW5lCisgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twYXJhbWV0ZXJzfScpCisKKyAgICAgICAgIyBpbnNlcnQgYXQgZnJvbnQgb2YgZG9jc3RyaW5nCisgICAgICAgIGxpbmVzLmluc2VydCgwLCBkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICBkb2NzdHJpbmcgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgYWRkKGRvY3N0cmluZykKKyAgICAgICAgZG9jc3RyaW5nID0gb3V0cHV0KCkKKworICAgICAgICBkb2NzdHJpbmcgPSBsaW5lYXJfZm9ybWF0KGRvY3N0cmluZywgcGFyYW1ldGVycz1wYXJhbWV0ZXJzKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlIGNhbGxhYmxlIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0CisjIHRoYXQgaW1wbGVtZW50cyB0aGUgY2xpbmljIHBhcnNlcgorIyBpbnRlcmZhY2UgKF9faW5pdF9fIGFuZCBwYXJzZSkuCisjCisjIGV4YW1wbGUgcGFyc2VyczoKKyMgICAiY2xpbmljIiwgaGFuZGxlcyB0aGUgQ2xpbmljIERTTAorIyAgICJweXRob24iLCBoYW5kbGVzIHJ1bm5pbmcgUHl0aG9uIGNvZGUKKyMKK3BhcnNlcnMgPSB7J2NsaW5pYycgOiBEU0xQYXJzZXIsICdweXRob24nOiBQeXRob25QYXJzZXJ9CisKKworY2xpbmljID0gTm9uZQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIGltcG9ydCBzeXMKKworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPCAzIG9yIHN5cy52ZXJzaW9uX2luZm8ubWlub3IgPCAzOgorICAgICAgICBzeXMuZXhpdCgiRXJyb3I6IGNsaW5pYy5weSByZXF1aXJlcyBQeXRob24gMy4zIG9yIGdyZWF0ZXIuIikKKworICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGNtZGxpbmUgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dHB1dCIsIHR5cGU9c3RyKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLWNvbnZlcnRlcnMiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLW1ha2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCJmaWxlbmFtZSIsIHR5cGU9c3RyLCBuYXJncz0iKiIpCisgICAgbnMgPSBjbWRsaW5lLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGlmIG5zLmNvbnZlcnRlcnM6CisgICAgICAgIGlmIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCBzcGVjaWZ5IC0tY29udmVydGVycyBhbmQgYSBmaWxlbmFtZSBhdCB0aGUgc2FtZSB0aW1lLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBjb252ZXJ0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2NvbnZlcnRlcnMgPSBbXQorICAgICAgICBpZ25vcmVkID0gc2V0KCIiIgorICAgICAgICAgICAgYWRkX2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyCisgICAgICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgICIiIi5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIG1vZHVsZSA9IGdsb2JhbHMoKQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGU6CisgICAgICAgICAgICBmb3Igc3VmZml4LCBpZHMgaW4gKAorICAgICAgICAgICAgICAgICgiX3JldHVybl9jb252ZXJ0ZXIiLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICAgICAgICAgKCJfY29udmVydGVyIiwgY29udmVydGVycyksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKG5hbWUsIG5hbWVbOi1sZW4oc3VmZml4KV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBwcmludCgpCisKKyAgICAgICAgcHJpbnQoIkxlZ2FjeSBjb252ZXJ0ZXJzOiIpCisgICAgICAgIGxlZ2FjeSA9IHNvcnRlZChsZWdhY3lfY29udmVydGVycykKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc3VwcGVyKCkpKQorICAgICAgICBwcmludCgnICAgICcgKyAnICcuam9pbihjIGZvciBjIGluIGxlZ2FjeSBpZiBjWzBdLmlzbG93ZXIoKSkpCisgICAgICAgIHByaW50KCkKKworICAgICAgICBmb3IgdGl0bGUsIGF0dHJpYnV0ZSwgaWRzIGluICgKKyAgICAgICAgICAgICgiQ29udmVydGVycyIsICdjb252ZXJ0ZXJfaW5pdCcsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKCJSZXR1cm4gY29udmVydGVycyIsICdyZXR1cm5fY29udmVydGVyX2luaXQnLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICk6CisgICAgICAgICAgICBwcmludCh0aXRsZSArICI6IikKKyAgICAgICAgICAgIGxvbmdlc3QgPSAtMQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gaWRzOgorICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgbGVuKHNob3J0X25hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gc29ydGVkKGlkcywga2V5PWxhbWJkYSB4OiB4WzFdLmxvd2VyKCkpOgorICAgICAgICAgICAgICAgIGNscyA9IG1vZHVsZVtuYW1lXQorICAgICAgICAgICAgICAgIGNhbGxhYmxlID0gZ2V0YXR0cihjbHMsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY2FsbGFibGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUoY2FsbGFibGUpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIgaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICd7fT17IXJ9Jy5mb3JtYXQocGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fSh7fSknLmZvcm1hdChzaG9ydF9uYW1lLCAnLCAnLmpvaW4ocGFyYW1ldGVycykpKQorICAgICAgICAgICAgICAgICMgYWRkX2NvbW1hID0gRmFsc2UKKyAgICAgICAgICAgICAgICAjIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgIyAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICMgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnLCAnKQorICAgICAgICAgICAgICAgICMgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgYWRkX2NvbW1hID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAjICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBzICs9ICc9JyArIHJlcHIocGFyYW1ldGVyLmRlZmF1bHQpCisgICAgICAgICAgICAgICAgIyAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLmFwcGVuZCgnKScpCisKKyAgICAgICAgICAgICAgICAjIHByaW50KCIgICAiLCBzaG9ydF9uYW1lICsgIiIuam9pbihwYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChkb2NfZGVmYXVsdD1Ob25lLCByZXF1aXJlZD1GYWxzZSkuIikKKyAgICAgICAgcHJpbnQoIkFsbCByZXR1cm4gY29udmVydGVycyBhbHNvIGFjY2VwdCAoZG9jX2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5zLm1ha2U6CisgICAgICAgIGlmIG5zLm91dHB1dCBvciBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIG9yIGZpbGVuYW1lcyB3aXRoIC0tbWFrZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoJy4nKToKKyAgICAgICAgICAgIGZvciByY3NfZGlyIGluICgnLnN2bicsICcuZ2l0JywgJy5oZycpOgorICAgICAgICAgICAgICAgIGlmIHJjc19kaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocmNzX2RpcikKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWUuZW5kc3dpdGgoJy5jJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBwYXJzZV9maWxlKHBhdGgsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IG5zLmZpbGVuYW1lOgorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBpZiBucy5vdXRwdXQgYW5kIGxlbihucy5maWxlbmFtZSkgPiAxOgorICAgICAgICBwcmludCgiVXNhZ2UgZXJyb3I6IGNhbid0IHVzZSAtbyB3aXRoIG11bHRpcGxlIGZpbGVuYW1lcy4iKQorICAgICAgICBwcmludCgpCisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGZvciBmaWxlbmFtZSBpbiBucy5maWxlbmFtZToKKyAgICAgICAgcGFyc2VfZmlsZShmaWxlbmFtZSwgb3V0cHV0PW5zLm91dHB1dCwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFmMzgwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5CkBAIC0wLDAgKzEsNzEzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBjbGluaWMKK2Zyb20gY2xpbmljIGltcG9ydCBEU0xQYXJzZXIKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorCitjbGFzcyBGYWtlQ29udmVydGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKworY2xhc3MgRmFrZUNvbnZlcnRlckZhY3Rvcnk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgbmFtZSwgZGVmYXVsdCwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gRmFrZUNvbnZlcnRlcihzZWxmLm5hbWUsIGt3YXJncykKKworCitjbGFzcyBGYWtlQ29udmVydGVyc0RpY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnVzZWRfY29udmVydGVycyA9IHt9CisKKyAgICBkZWYgZ2V0KHNlbGYsIG5hbWUsIGRlZmF1bHQpOgorICAgICAgICByZXR1cm4gc2VsZi51c2VkX2NvbnZlcnRlcnMuc2V0ZGVmYXVsdChuYW1lLCBGYWtlQ29udmVydGVyRmFjdG9yeShuYW1lKSkKKworY2xhc3MgRmFrZUNsaW5pYzoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY29udmVydGVycyA9IEZha2VDb252ZXJ0ZXJzRGljdCgpCisgICAgICAgIHNlbGYubGVnYWN5X2NvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZSgpCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmxvY2tfcGFyc2VyID0gY2xpbmljLkJsb2NrUGFyc2VyKCcnLCBzZWxmLmxhbmd1YWdlKQorICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIGNsaW5pYy5jbGluaWMgPSBzZWxmCisgICAgICAgIHNlbGYubmFtZSA9ICJGYWtlQ2xpbmljIgorCisgICAgZGVmIGlzX2RpcmVjdGl2ZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgPT0gIm1vZHVsZSIKKworICAgIGRlZiBkaXJlY3RpdmUoc2VsZiwgbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYuY2FsbGVkX2RpcmVjdGl2ZXNbbmFtZV0gPSBhcmdzCisKKyAgICBfbW9kdWxlX2FuZF9jbGFzcyA9IGNsaW5pYy5DbGluaWMuX21vZHVsZV9hbmRfY2xhc3MKKworCisKK2NsYXNzIENsaW5pY0dyb3VwUGVybXV0ZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgbCwgbSwgciwgb3V0cHV0KToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMobCwgbSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snc3RhcnQnXV0sIFsnc3RvcCddLCBbWydzdGVwJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsICdzdGVwJywpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9hZGRfd2luZG93KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3gnLCAneSddXSwgWydjaCddLCBbWydhdHRyJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnY2gnLCksCisgICAgICAgICAgICAoJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywpLAorICAgICAgICAgICAgKCd4JywgJ3knLCAnY2gnLCAnYXR0cicpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9sdWRpY3JvdXMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snYTEnLCAnYTInLCAnYTMnXSwgWydiMScsICdiMiddXSwgWydjMSddLCBbWydkMScsICdkMiddLCBbJ2UxJywgJ2UyJywgJ2UzJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoJ2MxJywpLAorICAgICAgICAgICgnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJywgJ2UxJywgJ2UyJywgJ2UzJyksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X3JpZ2h0X29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW10sIFtdLCBbWydhJ10sWydiJ10sWydjJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoKSwKKyAgICAgICAgICAoJ2EnLCksCisgICAgICAgICAgKCdhJywgJ2InKSwKKyAgICAgICAgICAoJ2EnLCAnYicsICdjJykKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfaGF2ZV9sZWZ0X29wdGlvbnNfYnV0X3JlcXVpcmVkX2lzX2VtcHR5KHNlbGYpOgorICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgIGNsaW5pYy5wZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhbJ2EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgZm4pCisKKworY2xhc3MgQ2xpbmljTGluZWFyRm9ybWF0VGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQsICoqa3dhcmdzKToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMubGluZWFyX2Zvcm1hdChpbnB1dCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoJycsICcnKQorCisgICAgZGVmIHRlc3Rfc29sb19uZXdsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCdcbicsICdcbicpCisKKyAgICBkZWYgdGVzdF9ub19zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9JycpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfbGluZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBHQVJHTEUKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J0dBUkdMRScpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgYmluZ2xlCisgICAgICAgICAgYnVuZ2xlCisKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J2JpbmdsZVxuYnVuZ2xlXG4nKQorCitjbGFzcyBJbmVydFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcGFzcworCitjbGFzcyBDb3B5UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBibG9jay5vdXRwdXQgPSBibG9jay5pbnB1dAorCisKK2NsYXNzIENsaW5pY0Jsb2NrUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoKQorCisgICAgICAgIGJsb2NrcyA9IGxpc3QoY2xpbmljLkJsb2NrUGFyc2VyKGlucHV0LCBsYW5ndWFnZSkpCisgICAgICAgIHdyaXRlciA9IGNsaW5pYy5CbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIGZvciBibG9jayBpbiBibG9ja3M6CisgICAgICAgICAgICB3cml0ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIG91dHB1dCA9IHdyaXRlci5mLmdldHZhbHVlKCkKKyAgICAgICAgYXNzZXJ0IG91dHB1dCA9PSBpbnB1dCwgIm91dHB1dCAhPSBpbnB1dCFcblxub3V0cHV0ICIgKyByZXByKG91dHB1dCkgKyAiXG5cbiBpbnB1dCAiICsgcmVwcihpbnB1dCkKKworICAgIGRlZiByb3VuZF90cmlwKHNlbGYsIGlucHV0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3QoaW5wdXQsIGlucHV0KQorCisgICAgZGVmIHRlc3Rfcm91bmRfdHJpcF8xKHNlbGYpOgorICAgICAgICBzZWxmLnJvdW5kX3RyaXAoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKyIiIikKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzIoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbaW5lcnRdCithYmMKK1tpbmVydF0qLworZGVmCisvKltpbmVydCBjaGVja3N1bTogN2IxOGQwMTdmODlmNjFjZjE3ZDQ3ZjkyNzQ5ZWE2OTMwYTNmMWRlYl0qLworeHl6CisiIiIpCisKKyAgICBkZWYgX3Rlc3RfY2xpbmljKHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoKQorICAgICAgICBjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZSkKKyAgICAgICAgYy5wYXJzZXJzWydpbmVydCddID0gSW5lcnRQYXJzZXIoYykKKyAgICAgICAgYy5wYXJzZXJzWydjb3B5J10gPSBDb3B5UGFyc2VyKGMpCisgICAgICAgIGNvbXB1dGVkID0gYy5wYXJzZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfY2xpbmljXzEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2xpbmljKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5XQorZGVmCitbY29weV0qLworYWJjCisvKltjb3B5IGNoZWNrc3VtOiAwM2NmZDc0MzY2MWYwNzk3NWZhMmYxMjIwYzUxOTRjYmFmZjQ4NDUxXSovCit4eXoKKyIiIiwgIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2NvcHldCitkZWYKK1tjb3B5XSovCitkZWYKKy8qW2NvcHkgY2hlY2tzdW06IDdiMThkMDE3Zjg5ZjYxY2YxN2Q0N2Y5Mjc0OWVhNjkzMGEzZjFkZWJdKi8KK3h5egorIiIiKQorCisKK2NsYXNzIENsaW5pY1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihGYWtlQ2xpbmljKCkpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKCJtb2R1bGUgb3Ncbm9zLmFjY2VzcyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9saW5lKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoIiNcbm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X3BhcmFtKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdwYXRoJywgcC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocC5jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfY29udmVydGVyKQorCisgICAgZGVmIHRlc3RfcGFyYW1fZGVmYXVsdChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBwLmRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9ub19kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3MuYWNjZXNzCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgIHNvbWV0aGluZ19lbHNlOiBzdHIiIiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3NvbWV0aGluZ19lbHNlJ10uY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiBkaXNhYmxlZF90ZXN0X2NvbnZlcnRlcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9MSkiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5jb252ZXJ0ZXIuYXJnc1snYWxsb3dfZmQnXSkKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0IGFzIG9zX3N0YXRfZm4gLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdzdGF0X3Jlc3VsdCcpCisKKyAgIHBhdGg6IHN0cgorICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQiIiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUGF0aCB0byBiZSBleGFtaW5lZCIsIHAuZG9jc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQsICdzdGF0X3Jlc3VsdCcpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdCBhcyBvc19zdGF0X2ZuCisKKyAgIHBhdGg6IHN0cgorICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisKK29zLnN0YXQocGF0aCkKKyAgcGF0aAorICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9wYXJhbWV0ZXJzX2luX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICB4OiBpbnQKKyAgICAgRG9jdW1lbnRhdGlvbiBmb3IgeC4KKyAgeTogaW50CisKK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIGZvby4KKworT2theSwgd2UncmUgZG9uZSBoZXJlLgorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCitmb28uYmFyKHgsIHkpCisgIHgKKyAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcy5zdGF0KHBhdGgpXG5cblRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfY19uYW1lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCBhcyBvc19zdGF0X2ZuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3Nfc3RhdF9mbiIsIGZ1bmN0aW9uLmNfYmFzZW5hbWUpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29udmVydGVyKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCAtPiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnVuY3Rpb24ucmV0dXJuX2NvbnZlcnRlciwgY2xpbmljLmludF9yZXR1cm5fY29udmVydGVyKQorCisgICAgZGVmIHRlc3Rfc3RhcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgICpcbiAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZLCBwLmtpbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSB3aW5kb3dcbndpbmRvdy5ib3JkZXJcbiBbXG4gbHMgOiBpbnRcbiBdXG4gL1xuIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2xzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmdyb3VwKQorCisgICAgZGVmIHRlc3RfbGVmdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLndpbmRvdy5hZGRjaAorICAgWworICAgeTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHg6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5JywgLTEpLCAoJ3gnLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHInLCAxKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgorY3Vyc2VzLndpbmRvdy5hZGRjaChbeSwgeCxdIGNoLCBbYXR0cl0pCisgIHkKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgKKyAgICBYLWNvb3JkaW5hdGUuCisgIGNoCisgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgYXR0cgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAiIiIuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9ncm91cHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy53aW5kb3cuaW1hZ2luYXJ5CisgICBbCisgICBbCisgICB5MTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHkyOiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgXQorICAgeDE6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICB4MjogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIF0KKyAgIGNoOiBjaGFyCisgICAgIENoYXJhY3RlciB0byBhZGQuCisgICBbCisgICBhdHRyMTogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjI6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIzOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBbCisgICBhdHRyNDogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjU6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI2OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBdCisgICBdCisgICAvCisiIiIpCisgICAgICAgIGZvciBuYW1lLCBncm91cCBpbiAoCisgICAgICAgICAgICAoJ3kxJywgLTIpLCAoJ3kyJywgLTIpLAorICAgICAgICAgICAgKCd4MScsIC0xKSwgKCd4MicsIC0xKSwKKyAgICAgICAgICAgICgnY2gnLCAwKSwKKyAgICAgICAgICAgICgnYXR0cjEnLCAxKSwgKCdhdHRyMicsIDEpLCAoJ2F0dHIzJywgMSksCisgICAgICAgICAgICAoJ2F0dHI0JywgMiksICgnYXR0cjUnLCAyKSwgKCdhdHRyNicsIDIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtpbmQsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLmRvY3N0cmluZy5zdHJpcCgpLCAiIiIKK2N1cnNlcy53aW5kb3cuaW1hZ2luYXJ5KFtbeTEsIHkyLF0geDEsIHgyLF0gY2gsIFthdHRyMSwgYXR0cjIsIGF0dHIzLCBbYXR0cjQsIGF0dHI1LCBhdHRyNl1dKQorICB5MQorICAgIFktY29vcmRpbmF0ZS4KKyAgeTIKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgxCisgICAgWC1jb29yZGluYXRlLgorICB4MgorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyMQorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHIyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjMKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNAorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI1CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjYKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKHNlbGYsIHMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uKHMpCisgICAgICAgIHJldHVybiBzdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fdHdvX3RvcF9ncm91cHNfb25fbGVmdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28udHdvX3RvcF9ncm91cHNfb25fbGVmdAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICgnRXJyb3Igb24gbGluZSAwOlxuJworICAgICAgICAgICAgJ0Z1bmN0aW9uIHR3b190b3BfZ3JvdXBzX29uX2xlZnQgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlIDIpXG4nKSkKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3R3b190b3BfZ3JvdXBzX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnR3b190b3BfZ3JvdXBzX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3BhcmFtZXRlcl9hZnRlcl9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQKKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIFsKKyAgICBbCisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19lbXB0eV9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9ub19wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisKK0RvY3N0cmluZworCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkRvY3N0cmluZ1xuXG5mb28uYmFyKCkiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9tb2R1bGVfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIgPT4gaW50CisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9jX2Jhc2VuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciBhcyA5MzUKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc3RhcihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhvdXRfaW5pdGlhbF9wYXJhbWV0ZXJzX29yX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorRG9jc3RyaW5nIGhlcmUuCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aG91dF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhfaW5pdGlhbF9wYXJhbWV0ZXJzX2FuZF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorRG9jc3RyaW5nLgorIiIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3NsYXNoKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9taXhfc3Rhcl9hbmRfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICB4OiBpbnQKKyAgIHk6IGludAorICAgKgorICAgejogaW50CisgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX25vdF9wZXJtaXR0ZWRfYWZ0ZXJfc2xhc2hfZm9yX25vdyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAvCisgICAgeDogaW50CisiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9ub3RfYXRfY29sdW1uXzAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKKyAgbW9kdWxlIGZvbworICBmb28uYmFyCisgICAgeDogaW50CisgICAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorICAgICoKKyAgICB5OiBzdHIKKyAgTm90IGF0IGNvbHVtbiAwIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorTm90IGF0IGNvbHVtbiAwIQorCitmb28uYmFyKHgsICosIHkpCisgIHgKKyAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdAorICAgIHBhdGg6IHN0cgorVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyFcblxub3Muc3RhdChwYXRoKSIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2RpcmVjdGl2ZShzZWxmKToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgcGFyc2VyLmZsYWcgPSBGYWxzZQorICAgICAgICBwYXJzZXIuZGlyZWN0aXZlc1snc2V0ZmxhZyddID0gbGFtYmRhIDogc2V0YXR0cihwYXJzZXIsICdmbGFnJywgVHJ1ZSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soInNldGZsYWciKQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXIuZmxhZykKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jb252ZXJ0ZXJzKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoJ21vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiAicyInKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXSkuY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiBwYXJzZShzZWxmLCB0ZXh0KToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2sodGV4dCkKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICByZXR1cm4gYmxvY2sKKworICAgIGRlZiBwYXJzZV9mdW5jdGlvbihzZWxmLCB0ZXh0KToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKHRleHQpCisgICAgICAgIHMgPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIGFzc2VydCBsZW4ocykgPT0gMgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzWzBdLCBjbGluaWMuTW9kdWxlKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzWzFdLCBjbGluaWMuRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzWzFdCisKKyAgICBkZWYgdGVzdF9zY2FmZm9sZGluZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlcHIgb24gc3BlY2lhbCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy51bnNwZWNpZmllZCksICc8VW5zcGVjaWZpZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy5OVUxMKSwgJzxOdWxsPicpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgZmFpbCBmYWlscworICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBjbGluaWMuZmFpbCgnVGhlIGlnbG9vcyBhcmUgbWVsdGluZyEnLCBmaWxlbmFtZT0nY2xvd24udHh0JywgbGluZV9udW1iZXI9NjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdFcnJvciBpbiBmaWxlICJjbG93bi50eHQiIG9uIGxpbmUgNjk6XG5UaGUgaWdsb29zIGFyZSBtZWx0aW5nIVxuJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weSBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKaW5kZXggMGU4OTVmMi4uNTgyNDZmYSAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weQorKysgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CkBAIC03LDExICs3LDExIEBACiAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBmaWxlICsgJ34nCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9fYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZSwgc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBOb25lCiAgICAgICAgIHNlbGYuX19maWxlID0gX29yaWdfb3BlbihmaWxlLCBtb2RlLCBidWZzaXplKQogICAgICAgICBzZWxmLmNsb3NlZCA9IHNlbGYuX19maWxlLmNsb3NlZApkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggYTQxMjY3YS4uNDc5Y2EzYyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAjIGRlZmF1bHQgdGhlIGV4Y2x1ZGUgbGlzdCBmb3IgZWFjaCBwbGF0Zm9ybQogICAgIGlmIHdpbjogZXhjbHVkZSA9IGV4Y2x1ZGUgKyBbCiAgICAgICAgICdkb3MnLCAnZG9zcGF0aCcsICdtYWMnLCAnbWFjcGF0aCcsICdtYWNmcycsICdNQUNGUycsICdwb3NpeCcsCi0gICAgICAgICdvczInLCAnY2UnLAorICAgICAgICAnY2UnLAogICAgICAgICBdCiAKICAgICBmYWlsX2ltcG9ydCA9IGV4Y2x1ZGVbOl0KQEAgLTMxMSw3ICszMTEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihvZGlyKQogICAgICAgICAgICAgcHJpbnQoIkNyZWF0ZWQgb3V0cHV0IGRpcmVjdG9yeSIsIG9kaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHVzYWdlKCclczogbWtkaXIgZmFpbGVkICglcyknICUgKG9kaXIsIHN0cihtc2cpKSkKICAgICBiYXNlID0gJycKICAgICBpZiBvZGlyOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weSBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKaW5kZXggMWMyYzNjYi4uMmFkMjJlMiAxMDA2NDQKLS0tIGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQorKysgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CkBAIC05MzksMjEgKzkzOSwyNiBAQAogY2xhc3MgUHlTZXRPYmplY3RQdHIoUHlPYmplY3RQdHIpOgogICAgIF90eXBlbmFtZSA9ICdQeVNldE9iamVjdCcKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZHVtbXlfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gZ2RiLmxvb2t1cF9nbG9iYWxfc3ltYm9sKCdfUHlTZXRfRHVtbXknKS52YWx1ZSgpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGR1bW15X3B0ciA9IHNlbGYuX2R1bW15X2tleSgpCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSArIDEpOgorICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQorICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCisgICAgICAgICAgICBpZiBrZXkgIT0gMCBhbmQga2V5ICE9IGR1bW15X3B0cjoKKyAgICAgICAgICAgICAgICB5aWVsZCBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCisKICAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CiAgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKICAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKICAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCclcyguLi4pJyAlIHNlbGYuc2FmZV90cF9uYW1lKCkpCiAgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQogCi0gICAgICAgIG1lbWJlcnMgPSBbXQotICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKLSAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6Ci0gICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCi0gICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KLSAgICAgICAgICAgIGlmIGtleSAhPSAwOgotICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkucHJveHl2YWwodmlzaXRlZCkKLSAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKLSAgICAgICAgICAgICAgICAgICAgbWVtYmVycy5hcHBlbmQoa2V5X3Byb3h5KQorICAgICAgICBtZW1iZXJzID0gKGtleS5wcm94eXZhbCh2aXNpdGVkKSBmb3Iga2V5IGluIHNlbGYpCiAgICAgICAgIGlmIHNlbGYuc2FmZV90cF9uYW1lKCkgPT0gJ2Zyb3plbnNldCc6CiAgICAgICAgICAgICByZXR1cm4gZnJvemVuc2V0KG1lbWJlcnMpCiAgICAgICAgIGVsc2U6CkBAIC05ODIsMTggKzk4NywxMSBAQAogCiAgICAgICAgIG91dC53cml0ZSgneycpCiAgICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKLSAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6Ci0gICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCi0gICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KLSAgICAgICAgICAgIGlmIGtleSAhPSAwOgotICAgICAgICAgICAgICAgIHB5b3Bfa2V5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQotICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IHB5b3Bfa2V5LnByb3h5dmFsKHZpc2l0ZWQpICMgRklYTUUhCi0gICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHB5b3Bfa2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBmb3Iga2V5IGluIHNlbGY6CisgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBrZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCiAgICAgICAgIG91dC53cml0ZSgnfScpCiAKICAgICAgICAgaWYgdHBfbmFtZSAhPSAnc2V0JzoKQEAgLTExNzcsNyArMTE3NSw5IEBACiAgICAgICAgICMgQ29udmVydCB0aGUgaW50IGNvZGUgcG9pbnRzIHRvIHVuaWNvZGUgY2hhcmFjdGVycywgYW5kIGdlbmVyYXRlIGEKICAgICAgICAgIyBsb2NhbCB1bmljb2RlIGluc3RhbmNlLgogICAgICAgICAjIFRoaXMgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBoZXJlIChpbiBnZGIpLgotICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbX3VuaWNocih1Y3MpIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQorICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbCisgICAgICAgICAgICAoX3VuaWNocih1Y3MpIGlmIHVjcyA8PSAweDEwZmZmZiBlbHNlICdcdWZmZmQnKQorICAgICAgICAgICAgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21zZ2ZtdC5weSBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CmluZGV4IGNkOTA2OTEuLmIwNzUxYTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5CisrKyBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoIm1zZ2ZtdC5weSIsIF9fdmVyc2lvbl9fLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBwcmludCgibXNnZm10LnB5IiwgX192ZXJzaW9uX18pCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1vJywgJy0tb3V0cHV0LWZpbGUnKToKICAgICAgICAgICAgIG91dGZpbGUgPSBhcmcKZGlmZiAtLWdpdCBhL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5IGIvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKaW5kZXggNzE0YzBlNC4uNjM1ZGQ1NiAxMDA2NDQKLS0tIGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKKysrIGIvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKQEAgLTQ2LDggKzQ2LDcgQEAKICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnJwogICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIGJ1aWx0aW5fbW9kKHNlY29uZHMsIHJlcGVhdCk6CkBAIC01Niw5ICs1NSw4IEBACiAgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCiAgICAgIyBSZWx5aW5nIG9uIGJ1aWx0LWluIGltcG9ydGVyIGJlaW5nIGltcGxpY2l0LgotICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICB5aWVsZCByZXN1bHQKKyAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBzb3VyY2Vfd29fYnl0ZWNvZGUoc2Vjb25kcywgcmVwZWF0KToKQEAgLTczLDkgKzcxLDggQEAKICAgICAgICAgICAgIGxvYWRlciA9IChpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMsIFRydWUpCiAgICAgICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQotICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKICAgICBmaW5hbGx5OgogICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCiAKQEAgLTg5LDkgKzg2LDggQEAKICAgICAgICAgICAgIG9zLnVubGluayhieXRlY29kZV9wYXRoKQogICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKIApAQCAtMTI3LDggKzEyMyw3IEBACiAgICAgICAgIGRlZiBjbGVhbnVwKCk6CiAgICAgICAgICAgICBzeXMubW9kdWxlcy5wb3AobmFtZSkKICAgICAgICAgICAgIG9zLnVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKSkKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgY2xlYW51cCwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogCiAgICAgd3JpdGluZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXy5mb3JtYXQobmFtZSkpCkBAIC0xNDgsOSArMTQzLDggQEAKICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkpCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgX3VzaW5nX2J5dGVjb2RlKG1vZHVsZSk6CkBAIC0xNTgsOSArMTUyLDggQEAKICAgICBkZWYgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrKHNlY29uZHMsIHJlcGVhdCk6CiAgICAgICAgICIiIlNvdXJjZSB3LyBieXRlY29kZToge30iIiIKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1vZHVsZS5fX2ZpbGVfXykKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAgICAgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18gPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fLmZvcm1hdChuYW1lKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weSBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQppbmRleCA1MzBiYzc5Li43MTJlNTg0IDEwMDY0NAotLS0gYS9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKKysrIGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CkBAIC0yNCw2ICsyNCw4IEBACiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSwgZW5jb2Rpbmc9ZW5jb2Rpbmcgb3IgVEVYVF9FTkNPRElORykKICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBpZiAncicgaW4gbW9kZToKKyAgICAgICAgICAgIG1vZGUgKz0gJ1UnICMgJ1UnIG1vZGUgaXMgbmVlZGVkIG9ubHkgaW4gUHl0aG9uIDIueAogICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSkKIAogZGVmIGdldF9maWxlX3NpemVzKCk6CkBAIC0zODAsNyArMzgyLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUob3MudXJhbmRvbShzaXplKSkKICAgICAjIFRleHQgZmlsZXMKICAgICBjaHVuayA9IFtdCi0gICAgd2l0aCB0ZXh0X29wZW4oX19maWxlX18sICJyVSIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInIiLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMgPGlvYmVuY2ggdGV4dCBjaHVuayBtYXJrZXI+Iik6CiAgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tc2kucHkgYi9Ub29scy9tc2kvbXNpLnB5CmluZGV4IDVlZDAyNWQuLjY5NDg3NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL21zaS9tc2kucHkKKysrIGIvVG9vbHMvbXNpL21zaS5weQpAQCAtOTksNyArOTksMTAgQEAKICAgICAnX211bHRpcHJvY2Vzc2luZy5weWQnLAogICAgICdfbHptYS5weWQnLAogICAgICdfZGVjaW1hbC5weWQnLAotICAgICdfdGVzdGJ1ZmZlci5weWQnCisgICAgJ190ZXN0YnVmZmVyLnB5ZCcsCisgICAgJ19zaGEzLnB5ZCcsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUucHlkJywKKyAgICAnX292ZXJsYXBwZWQucHlkJywKIF0KIAogIyBXZWxsLWtub3duIGNvbXBvbmVudCBVVUlEcwpAQCAtMTE5LDYgKzEyMiw3IEBACiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAogICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICAiMzMiOiJ7Zjc1ODFjYTQtZDM2OC00ZWVhLThmODItZDQ4YzY0YzRmMDQ3fSIsCisgICAgIjM0IjoiezdBMEM1ODEyLTI1ODMtNDBEOS1CQ0JCLUNENzQ4NUYxMTM3N30iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKQEAgLTQxNyw2ICs0MjEsOCBAQAogCiAgICAgY29tcGlsZWFyZ3MgPSByJy1XaSAiW1RBUkdFVERJUl1MaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkyX3xsaWIydG8zXFx0ZXN0c3x2ZW52XFxzY3JpcHRzIiAiW1RBUkdFVERJUl1MaWIiJwogICAgIGxpYjJ0bzNhcmdzID0gcictYyAiaW1wb3J0IGxpYjJ0bzMucHlncmFtLCBsaWIydG8zLnBhdGNvbXA7bGliMnRvMy5wYXRjb21wLlBhdHRlcm5Db21waWxlcigpIicKKyAgICB1cGRhdGVwaXBhcmdzID0gcictbSBlbnN1cmVwaXAgLVUnCisgICAgcmVtb3ZlcGlwYXJncyA9IHInLW0gZW5zdXJlcGlwIC1yJyAjIGRvZXMgbm90IHlldCB3b3JrCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVGaXJzdFNlcXVlbmNlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlVGV4dERhdGEgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVQcm9wZXJ0eQpAQCAtNDMzLDYgKzQzOSw5IEBACiAgICAgICAgICgiQ29tcGlsZVB5YyIsIDE4LCAicHl0aG9uLmV4ZSIsIGNvbXBpbGVhcmdzKSwKICAgICAgICAgKCJDb21waWxlUHlvIiwgMTgsICJweXRob24uZXhlIiwgIi1PICIrY29tcGlsZWFyZ3MpLAogICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgMTgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUluU2NyaXB0ICgxMDI0KTsgcnVuIGR1cmluZyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICgiVXBkYXRlUGlwIiwgMTgrMTAyNCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKKyAgICAgICAgIygiUmVtb3ZlUGlwIiwgMTgsICJweXRob24uZXhlIiwgcmVtb3ZlcGlwYXJncyksCiAgICAgICAgIF0pCiAKICAgICAjIFVJIFNlcXVlbmNlcywgc2VlICJJbnN0YWxsVUlTZXF1ZW5jZSBUYWJsZSIsICJVc2luZyBhIFNlcXVlbmNlIFRhYmxlIgpAQCAtNDU5LDcgKzQ2OCw3IEBACiAKICAgICAjIFByZXBlbmQgVEFSR0VURElSIHRvIHRoZSBzeXN0ZW0gcGF0aCwgYW5kIHJlbW92ZSBpdCBvbiB1bmluc3RhbGwuCiAgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCi0gICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCisgICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W1RBUkdFVERJUl1TY3JpcHRzO1t+XSIsICJSRUdJU1RSWS5wYXRoIildKQogCiAgICAgIyBFeGVjdXRlIFNlcXVlbmNlcwogICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCkBAIC00NjksNiArNDc4LDEyIEBACiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvV2luZG93cyIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgJyArIHN5czMyY29uZCwgNzUzKSwKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiIgYW5kIG5vdCAnICsgc3lzMzJjb25kLCA3NTQpLAogICAgICAgICAgICAgICgiVXBkYXRlRWRpdElETEUiLCBOb25lLCAxMDUwKSwKKyAgICAgICAgICAgICAjIHJ1biBjb21tYW5kIGlmIGluc3RhbGwgc3RhdGUgb2YgcGlwIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0xPQ0FMCisgICAgICAgICAgICAgIyBydW4gYWZ0ZXIgSW5zdGFsbEZpbGVzCisgICAgICAgICAgICAgKCJVcGRhdGVQaXAiLCAiJnBpcD0zIiwgNDAwMSksCisgICAgICAgICAgICAgIyByZW1vdmUgcGlwIHdoZW4gc3RhdGUgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfQUJTRU5UCisgICAgICAgICAgICAgIyBydW4gYmVmb3JlIFJlbW92ZUZpbGVzCisgICAgICAgICAgICAgIygiUmVtb3ZlUGlwIiwgIiZwaXA9MiIsIDM0OTkpLAogICAgICAgICAgICAgICgiQ29tcGlsZVB5YyIsICJDT01QSUxFQUxMIiwgNjgwMCksCiAgICAgICAgICAgICAgKCJDb21waWxlUHlvIiwgIkNPTVBJTEVBTEwiLCA2ODAxKSwKICAgICAgICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgIkNPTVBJTEVBTEwiLCA2ODAyKSwKQEAgLTc0OCw3ICs3NjMsOCBAQAogICAgIGFkdmFuY2VkID0gUHlEaWFsb2coZGIsICJBZHZhbmNlZERsZyIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21waWxlUHljIiwgIk9rIiwgIk9rIikKICAgICBhZHZhbmNlZC50aXRsZSgiQWR2YW5jZWQgT3B0aW9ucyBmb3IgW1Byb2R1Y3ROYW1lXSIpCi0gICAgIyBBIHJhZGlvIGdyb3VwIHdpdGggdHdvIG9wdGlvbnM6IGFsbHVzZXJzLCBqdXN0bWUKKworICAgICMgQSBjaGVja2JveCB3aGV0aGVyIHRvIGJ1aWxkIHB5YyBmaWxlcwogICAgIGFkdmFuY2VkLmNoZWNrYm94KCJDb21waWxlUHljIiwgMTM1LCA2MCwgMjMwLCA1MCwgMywKICAgICAgICAgICAgICAgICAgICAgICAiQ09NUElMRUFMTCIsICJDb21waWxlIC5weSBmaWxlcyB0byBieXRlIGNvZGUgYWZ0ZXIgaW5zdGFsbGF0aW9uIiwgIk9rIikKIApAQCAtODQ1LDcgKzg2MSw4IEBACiAgICAgIyAoaS5lLiBhZGRpdGlvbmFsIFB5dGhvbiBsaWJyYXJpZXMpIG5lZWQgdG8gZm9sbG93IHRoZSBwYXJlbnQgZmVhdHVyZS4KICAgICAjIEZlYXR1cmVzIHRoYXQgaGF2ZSBubyBhZHZlcnRpc2VtZW50IHRyaWdnZXIgKGUuZy4gdGhlIHRlc3Qgc3VpdGUpCiAgICAgIyBtdXN0IG5vdCBzdXBwb3J0IGFkdmVydGlzZW1lbnQKLSAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlLCBleHRfZmVhdHVyZSwgcHJpdmF0ZV9jcnQsIHByZXBlbmRfcGF0aAorICAgIGdsb2JhbCBkZWZhdWx0X2ZlYXR1cmUsIHRjbHRrLCBodG1sZmlsZXMsIHRvb2xzLCB0ZXN0c3VpdGUKKyAgICBnbG9iYWwgZXh0X2ZlYXR1cmUsIHByaXZhdGVfY3J0LCBwcmVwZW5kX3BhdGgsIHVwZGF0ZV9waXAKICAgICBkZWZhdWx0X2ZlYXR1cmUgPSBGZWF0dXJlKGRiLCAiRGVmYXVsdEZlYXR1cmUiLCAiUHl0aG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gSW50ZXJwcmV0ZXIgYW5kIExpYnJhcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBkaXJlY3RvcnkgPSAiVEFSR0VURElSIikKQEAgLTg2Nyw4ICs4ODQsMTQgQEAKICAgICB0b29scyA9IEZlYXR1cmUoZGIsICJUb29scyIsICJVdGlsaXR5IFNjcmlwdHMiLAogICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKSIsIDksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yKQorICAgICMgcGlwIGluc3RhbGxhdGlvbiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgdW50aWwgYSBjbGVhbiB1bmluc3RhbGwgcHJvY2VkdXJlCisgICAgIyBiZWNvbWVzIHBvc3NpYmxlCisgICAgdXBkYXRlX3BpcCA9IEZlYXR1cmUoZGIsICJwaXAiLCAicGlwIiwKKyAgICAgICAgICAgICAgICAgICAgIkluc3RhbGwgKG9yIHVwZ3JhZGUgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pIHBpcCwgIgorICAgICAgICAgICAgICAgICAgICAiYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuIiwgMTEsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgsIGxldmVsPTIpCiAgICAgdGVzdHN1aXRlID0gRmVhdHVyZShkYiwgIlRlc3RzdWl0ZSIsICJUZXN0IHN1aXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKSIsIDExLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4KQogICAgICMgcHJlcGVuZF9wYXRoIGlzIGFuIGFkZGl0aW9uYWwgZmVhdHVyZSB3aGljaCBpcyB0byBiZSBvZmYgYnkgZGVmYXVsdC4KICAgICAjIFNpbmNlIHRoZSBkZWZhdWx0IGxldmVsIGZvciB0aGUgYWJvdmUgZmVhdHVyZXMgaXMgMSwgdGhpcyBuZWVkcyB0byBiZQpAQCAtODc2LDcgKzg5OSw3IEBACiAgICAgcHJlcGVuZF9wYXRoID0gRmVhdHVyZShkYiwgIlByZXBlbmRQYXRoIiwgIkFkZCBweXRob24uZXhlIHRvIFBhdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlByZXBlbmQgW1RBUkdFVERJUl0gdG8gdGhlIHN5c3RlbSBQYXRoIHZhcmlhYmxlLiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBhbGxvd3MgeW91IHRvIHR5cGUgJ3B5dGhvbicgaW50byBhIGNvbW1hbmQgIgotICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm9tcHQgd2l0aG91dCBuZWVkaW5nIHRoZSBmdWxsIHBhdGguIiwgMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4LAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKIApAQCAtOTU0LDggKzk3Nyw2IEBACiAgICAgIyBBZGQgYWxsIGV4ZWN1dGFibGVzLCBpY29ucywgdGV4dCBmaWxlcyBpbnRvIHRoZSBUQVJHRVRESVIgY29tcG9uZW50CiAgICAgcm9vdCA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIE5vbmUsIHNyY2RpciwgIlRBUkdFVERJUiIsICJTb3VyY2VEaXIiKQogICAgIGRlZmF1bHRfZmVhdHVyZS5zZXRfY3VycmVudCgpCi0gICAgaWYgbm90IG1zaWxpYi5XaW42NDoKLSAgICAgICAgcm9vdC5hZGRfZmlsZSgiJXMvdzl4cG9wZW4uZXhlIiAlIFBDQlVJTEQpCiAgICAgcm9vdC5hZGRfZmlsZSgiUkVBRE1FLnR4dCIsIHNyYz0iUkVBRE1FIikKICAgICByb290LmFkZF9maWxlKCJORVdTLnR4dCIsIHNyYz0iTWlzYy9ORVdTIikKICAgICBnZW5lcmF0ZV9saWNlbnNlKCkKQEAgLTEyNjksNiArMTI5MCwxMCBAQAogICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCiAgICAgICAgICAgICBdKQogCisgICAgIyBQQVRIRVhUCisgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCisgICAgICAgICAgICAgWygiUGF0aEV4dEFkZGl0aW9uIiwgIj0tKlBhdGhFeHQiLCAiW35dOy5QWSIsICJSRUdJU1RSWS5kZWYiKV0pCisKICAgICAjIFJlZ2lzdHJ5IGtleXMKICAgICBwcmVmaXggPSByIlNvZnR3YXJlXCVzUHl0aG9uXFB5dGhvbkNvcmVcJXMiICUgKHRlc3RwcmVmaXgsIHNob3J0X3ZlcnNpb24pCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCmRpZmYgLS1naXQgYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weSBiL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CmluZGV4IGI1NWUyYzYuLjgzN2NkODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CisrKyBiL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CkBAIC0zMDcsNiArMzA3LDkgQEAKICAgICBkZWYgX05hbWUoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5pZCkKIAorICAgIGRlZiBfTmFtZUNvbnN0YW50KHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIodC52YWx1ZSkpCisKICAgICBkZWYgX051bShzZWxmLCB0KToKICAgICAgICAgIyBTdWJzdGl0dXRlIG92ZXJmbG93aW5nIGRlY2ltYWwgbGl0ZXJhbCBmb3IgQVNUIGluZmluaXRpZXMuCiAgICAgICAgIHNlbGYud3JpdGUocmVwcih0Lm4pLnJlcGxhY2UoImluZiIsIElORlNUUikpCkBAIC01MTUsMTAgKzUxOCwxMCBAQAogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQogICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCiAgICAgICAgICAgICBpZiB0LnZhcmFyZzoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnKQotICAgICAgICAgICAgICAgIGlmIHQudmFyYXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnLmFyZykKKyAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZy5hbm5vdGF0aW9uOgogICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YXJhcmdhbm5vdGF0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnLmFubm90YXRpb24pCiAKICAgICAgICAgIyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCiAgICAgICAgIGlmIHQua3dvbmx5YXJnczoKQEAgLTUzNCwxMCArNTM3LDEwIEBACiAgICAgICAgIGlmIHQua3dhcmc6CiAgICAgICAgICAgICBpZiBmaXJzdDpmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIrdC5rd2FyZykKLSAgICAgICAgICAgIGlmIHQua3dhcmdhbm5vdGF0aW9uOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcuYXJnKQorICAgICAgICAgICAgaWYgdC5rd2FyZy5hbm5vdGF0aW9uOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKLSAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmdhbm5vdGF0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rd2FyZy5hbm5vdGF0aW9uKQogCiAgICAgZGVmIF9rZXl3b3JkKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuYXJnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9SRUFETUUgYi9Ub29scy9zY3JpcHRzL1JFQURNRQppbmRleCBkNjVkMWZkLi5jNmIyMjgyIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL1JFQURNRQorKysgYi9Ub29scy9zY3JpcHRzL1JFQURNRQpAQCAtMiw2NCArMiw2OCBAQAogdXNlZnVsIHdoaWxlIGJ1aWxkaW5nLCBleHRlbmRpbmcgb3IgbWFuYWdpbmcgUHl0aG9uLiAgU29tZSAoZS5nLiwgZHV0cmVlIG9yIGxsbCkKIGFyZSBhbHNvIGdlbmVyYWxseSB1c2VmdWwgVU5JWCB0b29scy4KIAotMnRvMyAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCi1hbmFseXplX2R4cC5weSAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQotYnlleHQucHkgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCi1ieXRleWVhcnMucHkgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQotY2hlY2tweWMucHkgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcwotY2xlYW5mdXR1cmUucHkgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCi1jb21iaW5lcmVmcy5weSAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAotY29weXRpbWUucHkgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCi1jcmxmLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKLWRiMnBpY2tsZS5weSAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCi1kaWZmLnB5ICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKLWR1dHJlZS5weSAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCi1lcHRhZ3MucHkgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCi1maW5kZGl2LnB5ICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycwotZmluZGxpbmtzdG8ucHkgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4Ci1maW5kbm9jb2RpbmcucHkgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCi1maXhjaWQucHkgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCi1maXhkaXYucHkgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCi1maXhoZWFkZXIucHkgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQotZml4bm90aWNlLnB5ICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcwotZml4cHMucHkgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKLWZ0cG1pcnJvci5weSAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0Ci1nb29nbGUucHkgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQotZ3Byb2YyaHRtbC5weSAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCi1oMnB5LnB5ICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCi1oaWdobGlnaHQucHkgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0Ci1pZGxlMyAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQotaWZkZWYucHkgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKLWxmY3IucHkgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQotbGlua3RyZWUucHkgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKLWxsbC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKLW1haWxlcmRhZW1vbi5weSAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQotbWFrZV9jdHlwZS5weSAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYwotbWQ1c3VtLnB5ICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcwotbWtyZWFsLnB5ICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKLW5kaWZmLnB5ICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQotbm0yZGVmLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKLW9iamdyYXBoLnB5ICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKLXBhcnNlZW50aXRpZXMucHkgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKLXBhdGNoY2hlY2sucHkgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZwotcGF0aGZpeC5weSAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKLXBkZXBzLnB5ICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCi1waWNrbGUyZGIucHkgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQotcGluZGVudC5weSAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cwotcHRhZ3MucHkgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLXB5ZG9jMyAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKLXB5c291cmNlLnB5ICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcwotcmVkZW1vLnB5ICAgICAgICAgICAgICAgQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKLXJlaW5kZW50LnB5ICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cwotcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCi1yZ3JlcC5weSAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQotcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKLXNlcnZlLnB5ICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYwotc3VmZi5weSAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Ci1zdm5lb2wucHkgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Ci10ZXhpMmh0bWwucHkgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAotdHJlZXN5bmMucHkgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCi11bnRhYmlmeS5weSAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKLXdpbl9hZGQycGF0aC5weSAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKLXdoaWNoLnB5ICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICisydG8zICAgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAorYWJpdHlwZS5weSAgICAgICAgICAgICAgICBDb252ZXJ0cyBhIEMgZmlsZSB0byB1c2UgdGhlIFBFUCAzODQgdHlwZSBkZWZpbml0aW9uIEFQSQorYW5hbHl6ZV9keHAucHkgICAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQorYnlleHQucHkgICAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KK2J5dGV5ZWFycy5weSAgICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKK2NoZWNrcHljLnB5ICAgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcworY2xlYW5mdXR1cmUucHkgICAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKK2NvbWJpbmVyZWZzLnB5ICAgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKK2NvcHl0aW1lLnB5ICAgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCitjcmxmLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQorZGIycGlja2xlLnB5ICAgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQorZGlmZi5weSAgICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKK2R1dHJlZS5weSAgICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKK2VwdGFncy5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK2ZpbmRkaXYucHkgICAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKK2ZpbmRsaW5rc3RvLnB5ICAgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CitmaW5kbm9jb2RpbmcucHkgICAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KK2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgICAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCitmaW5kLXVuYW1lLnB5ICAgICAgICAgICAgIExvb2sgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgaW4gdGhlIHNldHMgb2YgYWxsIFVuaWNvZGUgbmFtZXMKK2ZpeGNpZC5weSAgICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcworZml4ZGl2LnB5ICAgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCitmaXhoZWFkZXIucHkgICAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCitmaXhub3RpY2UucHkgICAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKK2ZpeHBzLnB5ICAgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKK2Z0cG1pcnJvci5weSAgICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKK2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkgRmV0Y2ggdGhlIGNlcnRpZmljYXRlIHRoYXQgdGhlIHNlcnZlcihzKSBhcmUgcHJvdmlkaW5nIGluIFBFTSBmb3JtCitnb29nbGUucHkgICAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCitncHJvZjJodG1sLnB5ICAgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAoraDJweS5weSAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCitoaWdobGlnaHQucHkgICAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKK2lkbGUzICAgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKK2lmZGVmLnB5ICAgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKK2ltcG9ydF9kaWFnbm9zdGljcy5weSAgICAgTWlzY2VsbGFuZW91cyBkaWFnbm9zdGljcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0KK2xmY3IucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCitsaW5rdHJlZS5weSAgICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCitsbGwucHkgICAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKK21haWxlcmRhZW1vbi5weSAgICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCittYWtlX2N0eXBlLnB5ICAgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKK21kNXN1bS5weSAgICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcworbWtyZWFsLnB5ICAgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQorbmRpZmYucHkgICAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKK25tMmRlZi5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKK29iamdyYXBoLnB5ICAgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQorcGFyc2VlbnRpdGllcy5weSAgICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCitwYXJzZV9odG1sNV9lbnRpdGllcy5weSAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zCitwYXRjaGNoZWNrLnB5ICAgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZworcGF0aGZpeC5weSAgICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQorcGRlcHMucHkgICAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcworcGlja2xlMmRiLnB5ICAgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQorcGluZGVudC5weSAgICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCitwdGFncy5weSAgICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitweWRvYzMgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKK3B5c291cmNlLnB5ICAgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCityZWluZGVudC5weSAgICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cworcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKK3JncmVwLnB5ICAgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKK3J1bl90ZXN0cy5weSAgICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKK3NlcnZlLnB5ICAgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCitzdWZmLnB5ICAgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAorc3ZuZW9sLnB5ICAgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Cit0ZXhpMmh0bWwucHkgICAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCit0cmVlc3luYy5weSAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQordW50YWJpZnkucHkgICAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKK3doaWNoLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKK3dpbl9hZGQycGF0aC5weSAgICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weSBiL1Rvb2xzL3NjcmlwdHMvYW5hbHl6ZV9keHAucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weSBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKaW5kZXggYjc5ZmYzNy4uNzM2YTQ0MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgImRpcnMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0ICVzOiAlc1xuIiAlIChkaXIsIGVycikpCiAgICAgICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJ1bmxpc3RhYmxlIiwgMSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQppbmRleCA0OTBiMzdmLi5mNThjMzQ2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgIGZvciBmaWxlbmFtZSBpbiBzeXMuYXJndlsxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gc3RhdGZ1bmMoZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNhbid0IHN0YXQgJXI6ICVyXG4iICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICAgICAgc3RhdHVzID0gMQogICAgICAgICAgICAgc3QgPSAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MTAxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKQEAgLTAsMCArMSwzMiBAQAorIy91c3IvYmluL2VudiBweXRob24zCisiIiIKK0NoZWNrcyB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0cyBidW5kbGVkIGluIGVuc3VyZXBpcCBhcmUgdGhlIGxhdGVzdAordmVyc2lvbnMgYXZhaWxhYmxlLgorIiIiCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQganNvbgoraW1wb3J0IHVybGxpYi5yZXF1ZXN0CitpbXBvcnQgc3lzCisKKworZGVmIG1haW4oKToKKyAgICBvdXRvZmRhdGUgPSBGYWxzZQorCisgICAgZm9yIHByb2plY3QsIHZlcnNpb24gaW4gZW5zdXJlcGlwLl9QUk9KRUNUUzoKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHModXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3t9L2pzb24iLmZvcm1hdChwcm9qZWN0KSwKKyAgICAgICAgICAgIGNhZGVmYXVsdD1UcnVlLAorICAgICAgICApLnJlYWQoKS5kZWNvZGUoInV0ZjgiKSkKKyAgICAgICAgdXBzdHJlYW1fdmVyc2lvbiA9IGRhdGFbImluZm8iXVsidmVyc2lvbiJdCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSB1cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAgICAgb3V0b2ZkYXRlID0gVHJ1ZQorICAgICAgICAgICAgcHJpbnQoIlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB7fSBvbiBQeVBJIGlzIHt9LCBidXQgZW5zdXJlcGlwICIKKyAgICAgICAgICAgICAgICAgICJoYXMge30iLmZvcm1hdChwcm9qZWN0LCB1cHN0cmVhbV92ZXJzaW9uLCB2ZXJzaW9uKSkKKworICAgIGlmIG91dG9mZGF0ZToKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKaW5kZXggZDRmZGNlMi4uYmJhYTNkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQorKysgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CkBAIC01LDExICs1LDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGZyb20gc3RhdCBpbXBvcnQgU1RfTVRJTUUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogCiAjIFBFUCAzMTQ3IGNvbXBhdGliaWxpdHkgKFBZQyBSZXBvc2l0b3J5IERpcmVjdG9yaWVzKQotY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wLmNhY2hlX2Zyb21fc291cmNlIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBwYXRoOiBwYXRoICsgJ2MnKQorY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UgaWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworICAgICAgICAgICAgICAgICAgICAgZWxzZSBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKIAogCiBkZWYgbWFpbigpOgpAQCAtMTgsMTMgKzE4LDEzIEBACiAgICAgICAgIHNpbGVudCA9IChzeXMuYXJndlsxXSA9PSAnLXMnKQogICAgIGVsc2U6CiAgICAgICAgIHZlcmJvc2UgPSBzaWxlbnQgPSBGYWxzZQotICAgIE1BR0lDID0gaW1wLmdldF9tYWdpYygpCisgICAgTUFHSUMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICBpZiBub3Qgc2lsZW50OgogICAgICAgICBwcmludCgnVXNpbmcgTUFHSUMgd29yZCcsIHJlcHIoTUFHSUMpKQogICAgIGZvciBkaXJuYW1lIGluIHN5cy5wYXRoOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCdDYW5ub3QgbGlzdCBkaXJlY3RvcnknLCByZXByKGRpcm5hbWUpKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHNpbGVudDoKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5hbWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCdDYW5ub3Qgc3RhdCcsIHJlcHIobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CmluZGV4IGUwMjIwYjUuLjcxNTY4M2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQpAQCAtMTMsMTIgKzEzLDEyIEBACiAgICAgZmlsZTEsIGZpbGUyID0gc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdCiAgICAgdHJ5OgogICAgICAgICBzdGF0MSA9IG9zLnN0YXQoZmlsZTEpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUxICsgJzogY2Fubm90IHN0YXRcbicpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgogICAgICAgICBvcy51dGltZShmaWxlMiwgKHN0YXQxW1NUX0FUSU1FXSwgc3RhdDFbU1RfTVRJTUVdKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZmlsZTIgKyAnOiBjYW5ub3QgY2hhbmdlIHRpbWVcbicpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weSBiL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQppbmRleCBmOWIxNGJmLi44YmU1MjdmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2RpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CkBAIC0zOCw5ICszOCw5IEBACiAKICAgICBmcm9tZGF0ZSA9IGZpbGVfbXRpbWUoZnJvbWZpbGUpCiAgICAgdG9kYXRlID0gZmlsZV9tdGltZSh0b2ZpbGUpCi0gICAgd2l0aCBvcGVuKGZyb21maWxlLCAnVScpIGFzIGZmOgorICAgIHdpdGggb3Blbihmcm9tZmlsZSkgYXMgZmY6CiAgICAgICAgIGZyb21saW5lcyA9IGZmLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKHRvZmlsZSwgJ1UnKSBhcyB0ZjoKKyAgICB3aXRoIG9wZW4odG9maWxlKSBhcyB0ZjoKICAgICAgICAgdG9saW5lcyA9IHRmLnJlYWRsaW5lcygpCiAKICAgICBpZiBvcHRpb25zLnU6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKaW5kZXggZjI0YTcwMi4uYTcwNWY1NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQpAQCAtNzAsNyArNzAsNyBAQAogZGVmIHByb2Nlc3NkaXIoZGlyLCBsaXN0bmFtZXMpOgogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCBkaXJlY3Rvcnk6ICVzXG4iICUgZGlyKQogICAgICAgICByZXR1cm4gMQogICAgIGZpbGVzID0gW10KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CmluZGV4IGI0YzA5ZWYuLmI5MjRmMjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgbGlua3RvID0gb3MucmVhZGxpbmsobmFtZSkKICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmt0bykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcHJpbnQobmFtZSwgJy0+JywgbGlua3RvKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQppbmRleCA4N2UyYTA5Li4xZTRjNDI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZGlybmFtZSArICc6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTE3NSwxNyArMTc1LDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycih0ZW1wbmFtZSArICc6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHJlbmFtZSBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZnRwbWlycm9yLnB5IGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKaW5kZXggOWU4YmUxZC4uYTFiNjgzYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnQ3JlYXRpbmcgbG9jYWwgZGlyZWN0b3J5JywgcmVwcihsb2NhbGRpcikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXIobG9jYWxkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gZXN0YWJsaXNoIGxvY2FsIGRpcmVjdG9yeSIsIHJlcHIobG9jYWxkaXIpKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgaW5mb2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGxvY2FsZGlyLCAnLm1pcnJvcmluZm8nKQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBtb2RlWzBdID09ICdsJzoKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogICAgICAgICAgICAgICAgIGZwMS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXJyb3IKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbmFtZSAlciB0byAlcjogJXMiICUgKHRlbXBuYW1lLCBmdWxsbmFtZSwgbXNnKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGluZm9bZmlsZW5hbWVdID0gaW5mb3N0dWZmCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIG5vdCBsb2NhbGRpcjogbmFtZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKICAgICAgICAgZWxzZTogbmFtZXMgPSBvcy5saXN0ZGlyKGxvY2FsZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgbmFtZXMgPSBbXQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBpZiBuYW1lWzBdID09ICcuJyBvciBuYW1lIGluIGluZm8gb3IgbmFtZSBpbiBzdWJkaXJzOgpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG5hbWVzID0gW10KICAgICAgICAgb2sgPSAxCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMzIyLDEzICszMjIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGRpcmVjdG9yeSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICBlbHNlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZmlsZSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICByZXR1cm4gMQpAQCAtMzg2LDcgKzM4Niw3IEBACiAgICAgYmFja3VwID0gb3MucGF0aC5qb2luKGRpciwgZm5hbWUgKyAnficpCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGZwID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQogICAgIGZwLndyaXRlKCd7XG4nKQpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgZnAuY2xvc2UoKQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKaW5kZXggOTgyZjQ4MC4uZTgzZjE5OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgICAgcmV0dXJuIDEKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG5ld3RyZWUsIDBvNzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChuZXd0cmVlICsgJzogY2Fubm90IG1rZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuIDEKICAgICBsaW5rbmFtZSA9IG9zLnBhdGguam9pbihuZXd0cmVlLCBsaW5rKQogICAgIHRyeToKICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCBvbGR0cmVlKSwgbGlua25hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBsaW5rX21heV9mYWlsOgogICAgICAgICAgICAgcHJpbnQobGlua25hbWUgKyAnOiBjYW5ub3Qgc3ltbGluazonLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4gMQpAQCAtNTEsNyArNTEsNyBAQAogICAgIGlmIGRlYnVnOiBwcmludCgnbGlua25hbWVzJywgKG9sZCwgbmV3LCBsaW5rKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihvbGQpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG9sZCArICc6IHdhcm5pbmc6IGNhbm5vdCBsaXN0ZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQppbmRleCAyNDIyMDkxLi5jNmQwOWI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICMgY291bGRuJ3QgYmUgb3BlbmVkCiBkZWYgZm9wZW4oZm5hbWUpOgogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUsICdVJykKKyAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZGV0YWlsOgogICAgICAgICByZXR1cm4gZmFpbCgiY291bGRuJ3Qgb3BlbiAiICsgZm5hbWUgKyAiOiAiICsgc3RyKGRldGFpbCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMTEzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK1V0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zIGF2YWlsYWJsZSBmcm9tOgorCisgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uCisKK1dyaXR0ZW4gYnkgRXppbyBNZWxvdHRpIGFuZCBJdWxpaWEgUHJvc2t1cm5pYS4KKworIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKKworZW50aXRpZXNfdXJsID0gJ2h0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvZW50aXRpZXMuanNvbicKKworZGVmIGdldF9qc29uKHVybCk6CisgICAgIiIiRG93bmxvYWQgdGhlIGpzb24gZmlsZSBmcm9tIHRoZSB1cmwgYW5kIHJldHVybnMgYSBkZWNvZGVkIG9iamVjdC4iIiIKKyAgICB3aXRoIHVybG9wZW4odXJsKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgcmV0dXJuIGpzb24ubG9hZHMoZGF0YSkKKworZGVmIGNyZWF0ZV9kaWN0KGVudGl0aWVzKToKKyAgICAiIiJDcmVhdGUgdGhlIGh0bWw1IGRpY3QgZnJvbSB0aGUgZGVjb2RlZCBqc29uIG9iamVjdC4iIiIKKyAgICBuZXdfaHRtbDUgPSB7fQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBlbnRpdGllcy5pdGVtcygpOgorICAgICAgICBuZXdfaHRtbDVbbmFtZS5sc3RyaXAoJyYnKV0gPSB2YWx1ZVsnY2hhcmFjdGVycyddCisgICAgcmV0dXJuIG5ld19odG1sNQorCitkZWYgY29tcGFyZV9kaWN0cyhvbGQsIG5ldyk6CisgICAgIiIiQ29tcGFyZSB0aGUgb2xkIGFuZCBuZXcgZGljdHMgYW5kIHByaW50IHRoZSBkaWZmZXJlbmNlcy4iIiIKKyAgICBhZGRlZCA9IG5ldy5rZXlzKCkgLSBvbGQua2V5cygpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBhZGRlZDonLmZvcm1hdChsZW4oYWRkZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKGFkZGVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBuZXdbbmFtZV0pKQorICAgIHJlbW92ZWQgPSBvbGQua2V5cygpIC0gbmV3LmtleXMoKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiByZW1vdmVkOicuZm9ybWF0KGxlbihyZW1vdmVkKSkpCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChyZW1vdmVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBvbGRbbmFtZV0pKQorICAgIGNoYW5nZWQgPSBzZXQoKQorICAgIGZvciBuYW1lIGluIChvbGQua2V5cygpICYgbmV3LmtleXMoKSk6CisgICAgICAgIGlmIG9sZFtuYW1lXSAhPSBuZXdbbmFtZV06CisgICAgICAgICAgICBjaGFuZ2VkLmFkZCgobmFtZSwgb2xkW25hbWVdLCBuZXdbbmFtZV0pKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBtb2RpZmllZDonLmZvcm1hdChsZW4oY2hhbmdlZCkpKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoY2hhbmdlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9IC0+IHshcn0nLmZvcm1hdCgqaXRlbSkpCisKK2RlZiB3cml0ZV9pdGVtcyhlbnRpdGllcywgZmlsZT1zeXMuc3Rkb3V0KToKKyAgICAiIiJXcml0ZSB0aGUgaXRlbXMgb2YgdGhlIGRpY3Rpb25hcnkgaW4gdGhlIHNwZWNpZmllZCBmaWxlLiIiIgorICAgICMgVGhlIGtleXMgaW4gdGhlIGdlbmVyYXRlZCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBzb3J0ZWQKKyAgICAjIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXksIGhvd2V2ZXIsIHdoZW4gdHdvIGtleXMgYXJlIGVxdWFsLAorICAgICMgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIHNob3VsZCBjb21lIGZpcnN0IHNvIHRoYXQgdGhlIHJlc3VsdAorICAgICMgbG9va3MgbGlrZTogWydBYWN1dGUnLCAnYWFjdXRlJywgJ0FhY3V0ZTsnLCAnYWFjdXRlOycsIC4uLl0KKyAgICAjIFRvIGRvIHRoaXMgd2UgZmlyc3Qgc29ydCBpbiBhIGNhc2Utc2Vuc2l0aXZlIHdheSAoc28gYWxsIHRoZQorICAgICMgdXBwZXJjYXNlIGNoYXJzIGNvbWUgZmlyc3QpIGFuZCB0aGVuIHNvcnQgd2l0aCBrZXk9c3RyLmxvd2VyLgorICAgICMgU2luY2UgdGhlIHNvcnRpbmcgaXMgc3RhYmxlIHRoZSB1cHBlcmNhc2Uga2V5cyB3aWxsIGV2ZW50dWFsbHkKKyAgICAjIGJlIGJlZm9yZSB0aGVpciBlcXVpdmFsZW50IGxvd2VyY2FzZSB2ZXJzaW9uLgorICAgIGtleXMgPSBzb3J0ZWQoZW50aXRpZXMua2V5cygpKQorICAgIGtleXMgPSBzb3J0ZWQoa2V5cywga2V5PXN0ci5sb3dlcikKKyAgICBwcmludCgnaHRtbDUgPSB7JywgZmlsZT1maWxlKQorICAgIGZvciBuYW1lIGluIGtleXM6CisgICAgICAgIHByaW50KCcgICAgeyFyfTogeyFhfSwnLmZvcm1hdChuYW1lLCBlbnRpdGllc1tuYW1lXSksIGZpbGU9ZmlsZSkKKyAgICBwcmludCgnfScsIGZpbGU9ZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICMgd2l0aG91dCBhcmdzIHByaW50IGEgZGlmZiBiZXR3ZWVuIGh0bWwuZW50aXRpZXMuaHRtbDUgYW5kIG5ld19odG1sNQorICAgICMgd2l0aCAtLWNyZWF0ZSBwcmludCB0aGUgbmV3IGh0bWw1IGRpY3QKKyAgICAjIHdpdGggLS1wYXRjaCBwYXRjaCB0aGUgTGliL2h0bWwvZW50aXRpZXMucHkgZmlsZQorICAgIG5ld19odG1sNSA9IGNyZWF0ZV9kaWN0KGdldF9qc29uKGVudGl0aWVzX3VybCkpCisgICAgaWYgJy0tY3JlYXRlJyBpbiBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQoJyMgbWFwIHRoZSBIVE1MNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0byB0aGUgJworICAgICAgICAgICAgICAnZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKScpCisgICAgICAgIHByaW50KCcjIEdlbmVyYXRlZCBieSB7fS4gIERvIG5vdCBlZGl0IG1hbnVhbGx5LicuZm9ybWF0KF9fZmlsZV9fKSkKKyAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1KQorICAgIGVsaWYgJy0tcGF0Y2gnIGluIHN5cy5hcmd2OgorICAgICAgICBmbmFtZSA9ICdMaWIvaHRtbC9lbnRpdGllcy5weScKKyAgICAgICAgdGVtcF9mbmFtZSA9IGZuYW1lICsgJy50ZW1wJworICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGYxLCBvcGVuKHRlbXBfZm5hbWUsICd3JykgYXMgZjI6CisgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYxOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaHRtbDUgPSB7Jyk6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlX2l0ZW1zKG5ld19odG1sNSwgZmlsZT1mMikKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgICAgICAgICAjIHNraXAgdGhlIG9sZCBpdGVtcyB1bnRpbCB0aGUgfQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ30nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGYyLndyaXRlKGxpbmUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgb3MucmVuYW1lKHRlbXBfZm5hbWUsIGZuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIGh0bWw1ID09IG5ld19odG1sNToKKyAgICAgICAgICAgIHByaW50KCdUaGUgY3VycmVudCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBhcmVfZGljdHMoaHRtbDUsIG5ld19odG1sNSkKKyAgICAgICAgICAgIHByaW50KCdSdW4gIi4vcHl0aG9uIHswfSAtLXBhdGNoIiB0byB1cGRhdGUgTGliL2h0bWwvZW50aXRpZXMuaHRtbCAnCisgICAgICAgICAgICAgICAgICAnb3IgIi4vcHl0aG9uIHswfSAtLWNyZWF0ZSIgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgJyAnZGljdGlvbmFyeS4nLmZvcm1hdChfX2ZpbGVfXykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKaW5kZXggMTNjYTg2Ni4uMjI0MzJkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQpAQCAtNzMsNyArNzMsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xMzEsMjQgKzEzMSwyNCBAQAogICAgICAgICBtdGltZSA9IHN0YXRidWYuc3RfbXRpbWUKICAgICAgICAgYXRpbWUgPSBzdGF0YnVmLnN0X2F0aW1lCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBpZiBwcmVzZXJ2ZV90aW1lc3RhbXBzOgogICAgICAgICBpZiBhdGltZSBhbmQgbXRpbWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBlcnIoJyVzOiByZXNldCBvZiB0aW1lc3RhbXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKaW5kZXggMjg3MmRjMC4uMzMzMzQyMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQpAQCAtMzc2LDEzICszNzYsMTMgQEAKICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgYmFja3VwICVyIiAlIChiYWNrdXAsKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAjIGVuZCB0cnkKICAgICAjIGVuZCBpZgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyIiAlIChmaWxlbmFtZSwgYmFja3VwKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICMgZW5kIHRyeQogIyBlbmQgZGVmIG1ha2VfYmFja3VwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5ZG9jZ3VpLnB5dyBiL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CmluZGV4IDRhOTE2ZWEuLjE4NDI0ZGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQpAQCAtNTIsOCArNTIsOCBAQAogcmVjdXJzZSA9IEZhbHNlCiBkcnlydW4gPSBGYWxzZQogbWFrZWJhY2t1cCA9IFRydWUKKyMgQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKQogc3BlY19uZXdsaW5lID0gTm9uZQotIiIiQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKSIiIgogCiAKIGRlZiB1c2FnZShtc2c9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5IGIvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQppbmRleCBiMjY0OWM0Li42NTJkMzk0IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcHJpbnQoImNyZWF0aW5nIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihzbGF2ZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoImNhbid0IG1ha2Ugc2xhdmUgZGlyZWN0b3J5Iiwgc2xhdmUsICI6IiwgbXNnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5IGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQppbmRleCA0YjY3YzE1Li44NjFjODNjIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKQEAgLTM5LDExICszOSwxMSBAQAogICAgIGJhY2t1cCA9IGZpbGVuYW1lICsgIn4iCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgogICAgICAgICBmLndyaXRlKG5ld3RleHQpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5IGIvVG9vbHMvc2NyaXB0cy93aGljaC5weQppbmRleCA0ZmMzN2EwLi5kZjU0Y2UwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgcHJvZykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgbm90IFNfSVNSRUcoc3RbU1RfTU9ERV0pOgogICAgICAgICAgICAgICAgIG1zZyhmaWxlbmFtZSArICc6IG5vdCBhIGRpc2sgZmlsZScpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weSBiL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOTI1OWI0NC4uYzg1YmVhNQotLS0gYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQorKysgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHdpdGggd2lucmVnLkNyZWF0ZUtleShIS0NVLCBFTlYpIGFzIGtleToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW52cGF0aCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LCBQQVRIKVswXQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGVudnBhdGggPSBERUZBVUxUCiAKICAgICAgICAgcGF0aHMgPSBbZW52cGF0aF0KZGlmZiAtLWdpdCBhL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5IGIvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKaW5kZXggMTQyYjNjYS4uNWFiYzI1YSAxMDA3NTUKLS0tIGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKKysrIGIvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKQEAgLTgwOCw3ICs4MDgsNyBAQAogcHJvZ3JhbW1lcnMgcmVwb3J0IHN1YnN0YW50aWFsIHByb2R1Y3Rpdml0eSBnYWlucyBhbmQgZmVlbCB0aGUgbGFuZ3VhZ2UKIGVuY291cmFnZXMgdGhlIGRldmVsb3BtZW50IG9mIGhpZ2hlciBxdWFsaXR5LCBtb3JlIG1haW50YWluYWJsZSBjb2RlLgogCi1QeXRob24gcnVucyBvbiBXaW5kb3dzLCBMaW51eC9Vbml4LCBNYWMgT1MgWCwgT1MvMiwgQW1pZ2EsIFBhbG0KK1B5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBBbWlnYSwgUGFsbQogSGFuZGhlbGRzLCBhbmQgTm9raWEgbW9iaWxlIHBob25lcy4gUHl0aG9uIGhhcyBhbHNvIGJlZW4gcG9ydGVkIHRvIHRoZQogSmF2YSBhbmQgLk5FVCB2aXJ0dWFsIG1hY2hpbmVzLgogCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQppbmRleCBmNWExYWYzLi5mNGM3YzAzIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKQEAgLTI5MCwyNyArMjkwLDI3IEBACiAKIGNsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CiAKLSAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfJXMpCisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgZXJyb3JzLCBlbmNvZGluZ18lcykKIAotICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ18lcykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LCBlcnJvcnMsIGRlY29kaW5nXyVzKQogJycnICUgKGVuY29kaW5nbmFtZSwgbmFtZSwgc3VmZml4LCBzdWZmaXgpXQogICAgIGwuYXBwZW5kKCcnJ1wKIGNsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKICAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfJXMpWzBdCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBlbmNvZGluZ18lcylbMF0KIAogY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgogICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ18lcylbMF0nJycgJQorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LCBzZWxmLmVycm9ycywgZGVjb2RpbmdfJXMpWzBdJycnICUKICAgICAgICAgKHN1ZmZpeCwgc3VmZml4KSkKIAogICAgIGwuYXBwZW5kKCcnJwotY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtV3JpdGVyKToKICAgICBwYXNzCiAKLWNsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYywgY29kZWNzLlN0cmVhbVJlYWRlcik6CiAgICAgcGFzcwogCiAjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKQEAgLTM0Myw3ICszNDMsNyBAQAogICAgIGlmIGRlY29kaW5nX3RhYmxlX2NvZGU6CiAgICAgICAgIGwuYXBwZW5kKCcnJwogIyMjIEVuY29kaW5nIHRhYmxlCi1lbmNvZGluZ190YWJsZT1jb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKK2VuY29kaW5nX3RhYmxlID0gY29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCiAnJycpCiAgICAgZWxzZToKICAgICAgICAgbC5hcHBlbmQoJycnCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CmluZGV4IGJjM2QwY2IuLjA5NDI1MDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CkBAIC0zNyw3ICszNyw3IEBACiBWRVJTSU9OID0gIjMuMiIKIAogIyBUaGUgVW5pY29kZSBEYXRhYmFzZQotVU5JREFUQV9WRVJTSU9OID0gIjYuMS4wIgorVU5JREFUQV9WRVJTSU9OID0gIjYuMy4wIgogVU5JQ09ERV9EQVRBID0gIlVuaWNvZGVEYXRhJXMudHh0IgogQ09NUE9TSVRJT05fRVhDTFVTSU9OUyA9ICJDb21wb3NpdGlvbkV4Y2x1c2lvbnMlcy50eHQiCiBFQVNUQVNJQU5fV0lEVEggPSAiRWFzdEFzaWFuV2lkdGglcy50eHQiCkBAIC02OCw3ICs2OCw3IEBACiAKIEJJRElSRUNUSU9OQUxfTkFNRVMgPSBbICIiLCAiTCIsICJMUkUiLCAiTFJPIiwgIlIiLCAiQUwiLCAiUkxFIiwgIlJMTyIsCiAgICAgIlBERiIsICJFTiIsICJFUyIsICJFVCIsICJBTiIsICJDUyIsICJOU00iLCAiQk4iLCAiQiIsICJTIiwgIldTIiwKLSAgICAiT04iIF0KKyAgICAiT04iLCAiTFJJIiwgIlJMSSIsICJGU0kiLCAiUERJIiBdCiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKQEAgLTU1Miw3ICs1NTIsNyBAQAogICAgIHByaW50KCIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAKQEAgLTU3MCw3ICs1NzAsNyBAQAogICAgIHByaW50KCIgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQobGluZWJyZWFrcyk6CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQgYi9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApAQCAtMCwwICsxLDI1OCBAQAorMHgwMAkweDAwMDAJI05VTEwgKE5VTCkKKzB4MDEJMHgwMDAxCSNTVEFSVCBPRiBIRUFESU5HIChTT0gpCisweDAyCTB4MDAwMgkjU1RBUlQgT0YgVEVYVCAoU1RYKQorMHgwMwkweDAwMDMJI0VORCBPRiBURVhUIChFVFgpCisweDA0CTB4MDA5QwkjU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorMHgwNQkweDAwMDkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKzB4MDYJMHgwMDg2CSNTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisweDA3CTB4MDA3RgkjREVMRVRFIChERUwpCisweDA4CTB4MDA5NwkjRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorMHgwOQkweDAwOEQJI1JFVkVSU0UgTElORSBGRUVEIChSSSkKKzB4MEEJMHgwMDhFCSNTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisweDBCCTB4MDAwQgkjTElORSBUQUJVTEFUSU9OIChWVCkKKzB4MEMJMHgwMDBDCSNGT1JNIEZFRUQgKEZGKQorMHgwRAkweDAwMEQJI0NBUlJJQUdFIFJFVFVSTiAoQ1IpCisweDBFCTB4MDAwRQkjU0hJRlQgT1VUIChTTykKKzB4MEYJMHgwMDBGCSNTSElGVCBJTiAoU0kpCisweDEwCTB4MDAxMAkjREFUQUxJTksgRVNDQVBFIChETEUpCisweDExCTB4MDAxMQkjREVWSUNFIENPTlRST0wgT05FIChEQzEpCisweDEyCTB4MDAxMgkjREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisweDEzCTB4MDAxMwkjREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKzB4MTQJMHgwMDlECSNPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKzB4MTUJMHgwMDg1CSNORVhUIExJTkUgKE5FTCkKKzB4MTYJMHgwMDA4CSNCQUNLU1BBQ0UgKEJTKQorMHgxNwkweDAwODcJI0VORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisweDE4CTB4MDAxOAkjQ0FOQ0VMIChDQU4pCisweDE5CTB4MDAxOQkjRU5EIE9GIE1FRElVTSAoRU0pCisweDFBCTB4MDA5MgkjUFJJVkFURSBVU0UgVFdPIChQVTIpCisweDFCCTB4MDA4RgkjU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisweDFDCTB4MDAxQwkjRklMRSBTRVBBUkFUT1IgKElTNCkKKzB4MUQJMHgwMDFECSNHUk9VUCBTRVBBUkFUT1IgKElTMykKKzB4MUUJMHgwMDFFCSNSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisweDFGCTB4MDAxRgkjVU5JVCBTRVBBUkFUT1IgKElTMSkKKzB4MjAJMHgwMDgwCSNQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorMHgyMQkweDAwODEJI0hJR0ggT0NURVQgUFJFU0VUIChIT1ApCisweDIyCTB4MDA4MgkjQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKzB4MjMJMHgwMDgzCSNOTyBCUkVBSyBIRVJFIChOQkgpCisweDI0CTB4MDA4NAkjSU5ERVggKElORCkKKzB4MjUJMHgwMDBBCSNMSU5FIEZFRUQgKExGKQorMHgyNgkweDAwMTcJI0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKzB4MjcJMHgwMDFCCSNFU0NBUEUgKEVTQykKKzB4MjgJMHgwMDg4CSNDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKzB4MjkJMHgwMDg5CSNDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKzB4MkEJMHgwMDhBCSNMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisweDJCCTB4MDA4QgkjUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKzB4MkMJMHgwMDhDCSNQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKzB4MkQJMHgwMDA1CSNFTlFVSVJZIChFTlEpCisweDJFCTB4MDAwNgkjQUNLTk9XTEVER0UgKEFDSykKKzB4MkYJMHgwMDA3CSNCRUxMIChCRUwpCisweDMwCTB4MDA5MAkjREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisweDMxCTB4MDA5MQkjUFJJVkFURSBVU0UgT05FIChQVTEpCisweDMyCTB4MDAxNgkjU1lOQ0hST05PVVMgSURMRSAoU1lOKQorMHgzMwkweDAwOTMJI1NFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorMHgzNAkweDAwOTQJI0NBTkNFTCBDSEFSQUNURVIgKENDSCkKKzB4MzUJMHgwMDk1CSNNRVNTQUdFIFdBSVRJTkcgKE1XKQorMHgzNgkweDAwOTYJI1NUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorMHgzNwkweDAwMDQJI0VORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKzB4MzgJMHgwMDk4CSNTVEFSVCBPRiBTVFJJTkcgKFNPUykKKzB4MzkJMHgwMDk5CSNTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKzB4M0EJMHgwMDlBCSNTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKzB4M0IJMHgwMDlCCSNDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKzB4M0MJMHgwMDE0CSNERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisweDNECTB4MDAxNQkjTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKzB4M0UJMHgwMDlFCSNQUklWQUNZIE1FU1NBR0UgKFBNKQorMHgzRgkweDAwMUEJI1NVQlNUSVRVVEUgKFNVQikKKzB4NDAJMHgwMDIwCSNTUEFDRQorMHg0MQkweDAwQTAJI05PLUJSRUFLIFNQQUNFCisweDQyCTB4MDBFMgkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDQzCTB4MDA3QgkjTEVGVCBDVVJMWSBCUkFDS0VUCisweDQ0CTB4MDBFMAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg0NQkweDAwRTEJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NDYJMHgwMEUzCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisweDQ3CTB4MDBFNQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDQ4CTB4MDBFNwkjTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDQ5CTB4MDBGMQkjTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorMHg0QQkweDAwQzQJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4NEIJMHgwMDJFCSNGVUxMIFNUT1AKKzB4NEMJMHgwMDNDCSNMRVNTLVRIQU4gU0lHTgorMHg0RAkweDAwMjgJI0xFRlQgUEFSRU5USEVTSVMKKzB4NEUJMHgwMDJCCSNQTFVTIFNJR04KKzB4NEYJMHgwMDIxCSNFWENMQU1BVElPTiBNQVJLCisweDUwCTB4MDAyNgkjQU1QRVJTQU5ECisweDUxCTB4MDBFOQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg1MgkweDAwRUEJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg1MwkweDAwRUIJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisweDU0CTB4MDBFOAkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg1NQkweDAwRUQJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NTYJMHgwMEVFCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzB4NTcJMHgwMEVGCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg1OAkweDAwRUMJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NTkJMHgwMDdFCSNUSUxERQorMHg1QQkweDAwREMJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzB4NUIJMHgwMDI0CSNET0xMQVIgU0lHTgorMHg1QwkweDAwMkEJI0FTVEVSSVNLCisweDVECTB4MDAyOQkjUklHSFQgUEFSRU5USEVTSVMKKzB4NUUJMHgwMDNCCSNTRU1JQ09MT04KKzB4NUYJMHgwMDVFCSNDSVJDVU1GTEVYIEFDQ0VOVAorMHg2MAkweDAwMkQJI0hZUEhFTi1NSU5VUworMHg2MQkweDAwMkYJI1NPTElEVVMKKzB4NjIJMHgwMEMyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorMHg2MwkweDAwNUIJI0xFRlQgU1FVQVJFIEJSQUNLRVQKKzB4NjQJMHgwMEMwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKzB4NjUJMHgwMEMxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NjYJMHgwMEMzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NjcJMHgwMEM1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMHg2OAkweDAwQzcJI0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDY5CTB4MDBEMQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDZBCTB4MDBGNgkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzB4NkIJMHgwMDJDCSNDT01NQQorMHg2QwkweDAwMjUJI1BFUkNFTlQgU0lHTgorMHg2RAkweDAwNUYJI0xPVyBMSU5FCisweDZFCTB4MDAzRQkjR1JFQVRFUi1USEFOIFNJR04KKzB4NkYJMHgwMDNGCSNRVUVTVElPTiBNQVJLCisweDcwCTB4MDBGOAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4NzEJMHgwMEM5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKzB4NzIJMHgwMENBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg3MwkweDAwQ0IJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NzQJMHgwMEM4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKzB4NzUJMHgwMENECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NzYJMHgwMENFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg3NwkweDAwQ0YJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzB4NzgJMHgwMENDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NzkJMHgwMDYwCSNHUkFWRSBBQ0NFTlQKKzB4N0EJMHgwMDNBCSNDT0xPTgorMHg3QgkweDAwMjMJI05VTUJFUiBTSUdOCisweDdDCTB4MDBBNwkjU0VDVElPTiBTSUdOCisweDdECTB4MDAyNwkjQVBPU1RST1BIRQorMHg3RQkweDAwM0QJI0VRVUFMUyBTSUdOCisweDdGCTB4MDAyMgkjUVVPVEFUSU9OIE1BUksKKzB4ODAJMHgwMEQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisweDgxCTB4MDA2MQkjTEFUSU4gU01BTEwgTEVUVEVSIEEKKzB4ODIJMHgwMDYyCSNMQVRJTiBTTUFMTCBMRVRURVIgQgorMHg4MwkweDAwNjMJI0xBVElOIFNNQUxMIExFVFRFUiBDCisweDg0CTB4MDA2NAkjTEFUSU4gU01BTEwgTEVUVEVSIEQKKzB4ODUJMHgwMDY1CSNMQVRJTiBTTUFMTCBMRVRURVIgRQorMHg4NgkweDAwNjYJI0xBVElOIFNNQUxMIExFVFRFUiBGCisweDg3CTB4MDA2NwkjTEFUSU4gU01BTEwgTEVUVEVSIEcKKzB4ODgJMHgwMDY4CSNMQVRJTiBTTUFMTCBMRVRURVIgSAorMHg4OQkweDAwNjkJI0xBVElOIFNNQUxMIExFVFRFUiBJCisweDhBCTB4MDBBQgkjTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEIJMHgwMEJCCSNSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEMJMHgwMEYwCSNMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweDhECTB4MDBGRAkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorMHg4RQkweDAwRkUJI0xBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHg4RgkweDAwQjEJI1BMVVMtTUlOVVMgU0lHTgorMHg5MAkweDAwQjAJI0RFR1JFRSBTSUdOCisweDkxCTB4MDA2QQkjTEFUSU4gU01BTEwgTEVUVEVSIEoKKzB4OTIJMHgwMDZCCSNMQVRJTiBTTUFMTCBMRVRURVIgSworMHg5MwkweDAwNkMJI0xBVElOIFNNQUxMIExFVFRFUiBMCisweDk0CTB4MDA2RAkjTEFUSU4gU01BTEwgTEVUVEVSIE0KKzB4OTUJMHgwMDZFCSNMQVRJTiBTTUFMTCBMRVRURVIgTgorMHg5NgkweDAwNkYJI0xBVElOIFNNQUxMIExFVFRFUiBPCisweDk3CTB4MDA3MAkjTEFUSU4gU01BTEwgTEVUVEVSIFAKKzB4OTgJMHgwMDcxCSNMQVRJTiBTTUFMTCBMRVRURVIgUQorMHg5OQkweDAwNzIJI0xBVElOIFNNQUxMIExFVFRFUiBSCisweDlBCTB4MDBBQQkjRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUIJMHgwMEJBCSNNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUMJMHgwMEU2CSNMQVRJTiBTTUFMTCBMRVRURVIgQUUKKzB4OUQJMHgwMEI4CSNDRURJTExBCisweDlFCTB4MDBDNgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKzB4OUYJMHgwMEE0CSNDVVJSRU5DWSBTSUdOCisweEEwCTB4MDBCNQkjTUlDUk8gU0lHTgorMHhBMQkweDAwREYJI0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisweEEyCTB4MDA3MwkjTEFUSU4gU01BTEwgTEVUVEVSIFMKKzB4QTMJMHgwMDc0CSNMQVRJTiBTTUFMTCBMRVRURVIgVAorMHhBNAkweDAwNzUJI0xBVElOIFNNQUxMIExFVFRFUiBVCisweEE1CTB4MDA3NgkjTEFUSU4gU01BTEwgTEVUVEVSIFYKKzB4QTYJMHgwMDc3CSNMQVRJTiBTTUFMTCBMRVRURVIgVworMHhBNwkweDAwNzgJI0xBVElOIFNNQUxMIExFVFRFUiBYCisweEE4CTB4MDA3OQkjTEFUSU4gU01BTEwgTEVUVEVSIFkKKzB4QTkJMHgwMDdBCSNMQVRJTiBTTUFMTCBMRVRURVIgWgorMHhBQQkweDAwQTEJI0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKzB4QUIJMHgwMEJGCSNJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisweEFDCTB4MDBEMAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweEFECTB4MDBERAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweEFFCTB4MDBERQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKzB4QUYJMHgwMEFFCSNSRUdJU1RFUkVEIFNJR04KKzB4QjAJMHgwMEEyCSNDRU5UIFNJR04KKzB4QjEJMHgwMEEzCSNQT1VORCBTSUdOCisweEIyCTB4MDBBNQkjWUVOIFNJR04KKzB4QjMJMHgwMEI3CSNNSURETEUgRE9UCisweEI0CTB4MDBBOQkjQ09QWVJJR0hUIFNJR04KKzB4QjUJMHgwMDQwCSNDT01NRVJDSUFMIEFUCisweEI2CTB4MDBCNgkjUElMQ1JPVyBTSUdOCisweEI3CTB4MDBCQwkjVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisweEI4CTB4MDBCRAkjVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisweEI5CTB4MDBCRQkjVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisweEJBCTB4MDBBQwkjTk9UIFNJR04KKzB4QkIJMHgwMDdDCSNWRVJUSUNBTCBMSU5FCisweEJDCTB4MjAzRQkjT1ZFUkxJTkUKKzB4QkQJMHgwMEE4CSNESUFFUkVTSVMKKzB4QkUJMHgwMEI0CSNBQ1VURSBBQ0NFTlQKKzB4QkYJMHgwMEQ3CSNNVUxUSVBMSUNBVElPTiBTSUdOCisweEMwCTB4MDBFNAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4QzEJMHgwMDQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisweEMyCTB4MDA0MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorMHhDMwkweDAwNDMJI0xBVElOIENBUElUQUwgTEVUVEVSIEMKKzB4QzQJMHgwMDQ0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBECisweEM1CTB4MDA0NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorMHhDNgkweDAwNDYJI0xBVElOIENBUElUQUwgTEVUVEVSIEYKKzB4QzcJMHgwMDQ3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisweEM4CTB4MDA0OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorMHhDOQkweDAwNDkJI0xBVElOIENBUElUQUwgTEVUVEVSIEkKKzB4Q0EJMHgwMEFECSNTT0ZUIEhZUEhFTgorMHhDQgkweDAwRjQJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorMHhDQwkweDAwQTYJI0JST0tFTiBCQVIKKzB4Q0QJMHgwMEYyCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweENFCTB4MDBGMwkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorMHhDRgkweDAwRjUJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RDAJMHgwMEZDCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHhEMQkweDAwNEEJI0xBVElOIENBUElUQUwgTEVUVEVSIEoKKzB4RDIJMHgwMDRCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisweEQzCTB4MDA0QwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorMHhENAkweDAwNEQJI0xBVElOIENBUElUQUwgTEVUVEVSIE0KKzB4RDUJMHgwMDRFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisweEQ2CTB4MDA0RgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworMHhENwkweDAwNTAJI0xBVElOIENBUElUQUwgTEVUVEVSIFAKKzB4RDgJMHgwMDUxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisweEQ5CTB4MDA1MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorMHhEQQkweDAwQjkJI1NVUEVSU0NSSVBUIE9ORQorMHhEQgkweDAwRkIJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhEQwkweDAwN0QJI1JJR0hUIENVUkxZIEJSQUNLRVQKKzB4REQJMHgwMEY5CSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweERFCTB4MDBGQQkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhERgkweDAwRkYJI0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisweEUwCTB4MDBENgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHhFMQkweDAwRjcJI0RJVklTSU9OIFNJR04KKzB4RTIJMHgwMDUzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisweEUzCTB4MDA1NAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorMHhFNAkweDAwNTUJI0xBVElOIENBUElUQUwgTEVUVEVSIFUKKzB4RTUJMHgwMDU2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisweEU2CTB4MDA1NwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworMHhFNwkweDAwNTgJI0xBVElOIENBUElUQUwgTEVUVEVSIFgKKzB4RTgJMHgwMDU5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisweEU5CTB4MDA1QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorMHhFQQkweDAwQjIJI1NVUEVSU0NSSVBUIFRXTworMHhFQgkweDAwRDQJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweEVDCTB4MDA1QwkjUkVWRVJTRSBTT0xJRFVTCisweEVECTB4MDBEMgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweEVFCTB4MDBEMwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweEVGCTB4MDBENQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisweEYwCTB4MDAzMAkjRElHSVQgWkVSTworMHhGMQkweDAwMzEJI0RJR0lUIE9ORQorMHhGMgkweDAwMzIJI0RJR0lUIFRXTworMHhGMwkweDAwMzMJI0RJR0lUIFRIUkVFCisweEY0CTB4MDAzNAkjRElHSVQgRk9VUgorMHhGNQkweDAwMzUJI0RJR0lUIEZJVkUKKzB4RjYJMHgwMDM2CSNESUdJVCBTSVgKKzB4RjcJMHgwMDM3CSNESUdJVCBTRVZFTgorMHhGOAkweDAwMzgJI0RJR0lUIEVJR0hUCisweEY5CTB4MDAzOQkjRElHSVQgTklORQorMHhGQQkweDAwQjMJI1NVUEVSU0NSSVBUIFRIUkVFCisweEZCCTB4MDBEQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzB4RkMJMHgwMDVECSNSSUdIVCBTUVVBUkUgQlJBQ0tFVAorMHhGRAkweDAwRDkJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorMHhGRQkweDAwREEJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhGRgkweDAwOUYJI0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorCisgCSAgCSAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA2YmU0MWY1Li41ZDY2NmVkIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIHB5dGhvbiAzLjMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuNC4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4KICMKQEAgLTU4MCw4ICs1ODAsOCBAQAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J3B5dGhvbicKIFBBQ0tBR0VfVEFSTkFNRT0ncHl0aG9uJwotUEFDS0FHRV9WRVJTSU9OPSczLjMnCi1QQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuMycKK1BBQ0tBR0VfVkVSU0lPTj0nMy40JworUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAzLjQnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2J1Z3MucHl0aG9uLm9yZy8nCiBQQUNLQUdFX1VSTD0nJwogCkBAIC02MjMsOCArNjIzLDExIEBACiAjZW5kaWYiCiAKIGFjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworRU5TVVJFUElQCiBTUkNESVJTCiBUSFJFQURIRUFERVJTCitMSUJQTAorUFlfRU5BQkxFX1NIQVJFRAogRVhUX1NVRkZJWAogU09BQkkKIExJQkMKQEAgLTcxMCw2ICs3MTMsNyBAQAogTUFDSERFUAogRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVgKIEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWAorRlJBTUVXT1JLUFlUSE9OVwogRlJBTUVXT1JLQUxUSU5TVEFMTExBU1QKIEZSQU1FV09SS0FMVElOU1RBTExGSVJTVAogRlJBTUVXT1JLSU5TVEFMTExBU1QKQEAgLTc5MCw2ICs3OTQsNyBAQAogZW5hYmxlX3NoYXJlZAogZW5hYmxlX3Byb2ZpbGluZwogd2l0aF9weWRlYnVnCit3aXRoX2hhc2hfYWxnb3JpdGhtCiB3aXRoX2xpYnMKIHdpdGhfc3lzdGVtX2V4cGF0CiB3aXRoX3N5c3RlbV9mZmkKQEAgLTgxMSw2ICs4MTYsNyBAQAogd2l0aF9saWJjCiBlbmFibGVfYmlnX2RpZ2l0cwogd2l0aF9jb21wdXRlZF9nb3Rvcword2l0aF9lbnN1cmVwaXAKICcKICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCiBob3N0X2FsaWFzCkBAIC0xMzYyLDcgKzEzNjgsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDI3LDcgKzE0MzMsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy40OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NTMsNyArMTQ1OSw3IEBACiAgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKICAgLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNICiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKQogICAtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLWZyYW1ld29yawpAQCAtMTQ2Myw2ICsxNDY5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQogICAtLXdpdGgtbGlicz0nbGliMSAuLi4nICBsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzCiAgIC0td2l0aC1zeXN0ZW0tZXhwYXQgICAgIGJ1aWxkIHB5ZXhwYXQgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBleHBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CkBAIC0xNDkyLDYgKzE1MDAsOCBAQAogICAtLXdpdGgob3V0KS1jb21wdXRlZC1nb3RvcwogICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycykKKyAgLS13aXRoKG91dCktZW5zdXJlcGlwPVs9dXBncmFkZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcAogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgTUFDSERFUCAgICAgbmFtZSBmb3IgbWFjaGluZS1kZXBlbmRlbnQgbGlicmFyeSBmaWxlcwpAQCAtMTU3MCw3ICsxNTgwLDcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1weXRob24gY29uZmlndXJlIDMuMworcHl0aG9uIGNvbmZpZ3VyZSAzLjQKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCiBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0yNDA5LDcgKzI0MTksNyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy4zLCB3aGljaCB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI5NzksNyArMjk4OSw3IEBACiBtdiBjb25mZGVmcy5oLm5ldyBjb25mZGVmcy5oCiAKIAotVkVSU0lPTj0zLjMKK1ZFUlNJT049My40CiAKICMgVmVyc2lvbiBudW1iZXIgb2YgUHl0aG9uJ3Mgb3duIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCiAKQEAgLTMwMzUsNyArMzA0NSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTMwNzgsNiArMzA4OCw3IEBACiAKIAogCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMzA4Niw3ICszMDk3LDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0zMTAwLDE5ICszMTExLDE4IEBACiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXVuaXZlcnNhbC1hcmNocyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfdW5pdmVyc2FsX2FyY2hzK3NldH0iID0gc2V0OyB0aGVuIDoKICAgd2l0aHZhbD0kd2l0aF91bml2ZXJzYWxfYXJjaHM7Ci0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKLSRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIAotZWxzZQotCi0gCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQotJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9Ci0KIGZpCiAKLQotCitpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY1CiskYXNfZWNobyAiJHtVTklWRVJTQUxfQVJDSFN9IiA+JjY7IH0KK2Vsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mcmFtZXdvcmstbmFtZSB3YXMgZ2l2ZW4uCkBAIC0zMTQ3LDYgKzMxNTcsNyBAQAogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwkJRlJBTUVXT1JLUFlUSE9OVz0KIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCQllbHNlCkBAIC0zMTYxLDYgKzMxNzIsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjI4LDYgKzMyNDAsNyBAQAogCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwlGUkFNRVdPUktQWVRIT05XPQogCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIiA7IHRoZW4KIAkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAllbHNlCkBAIC0zMjUwLDYgKzMyNjMsNyBAQAogCiAKIAorCiAjI0FDX0FSR19XSVRIKGR5bGQsCiAjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCiAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQpAQCAtNDgwMSwxNiArNDgxNSwxNiBAQAogZmkKIGlmIHRlc3QgIiRwcmVzZXRfY3h4IiAhPSAiJENYWCIKIHRoZW4KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306CiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggXCIkQ1hYXCIuCiAgIElmIHRoaXMgaXMgbm90IGludGVuZGVkLCB0aGVuIHNldCBDWFggb24gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCiAgICIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOgorJGFzX2VjaG8gIiRhc19tZToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KLSAgIiA+JjI7fQorICAiID4mNjt9CiBmaQogCiAKQEAgLTU1ODQsNiArNTU5OCw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogCiAkYXNfZWNobyAiI2RlZmluZSBQeV9FTkFCTEVfU0hBUkVEIDEiID4+Y29uZmRlZnMuaAogCkBAIC01NjQxLDYgKzU2NTYsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC02MzgxLDYgKzYzOTcsNDkgQEAKICAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xbm8tdW51c2VkLXJlc3VsdCIKICAgICBmaQogCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50Li4uICIgPiY2OyB9CisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIGlmICR7YWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9eWVzCisKK2Vsc2UKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nID0geWVzCisgICAgdGhlbgorICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgZmkKKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTYzOTQsMTEzICs2NDUzLDEyNCBAQAogCVNDT19TViopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1tNDg2IC1EU0NPNSIKIAkgICAgOzsKLQkjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/Ci0JRGFyd2luKikKLQkgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKLQkgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCi0gICAgICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKLQkgICAgdGhlbgotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKKworICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQuLi4gIiA+JjY7IH0KLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiAkYXNfZWNobyAiJENDIiA+JjY7IH0KLQkgICAgZmkKKyAgICAgICAgZmkKIAorICAgICAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjYXNlICIkVU5JVkVSU0FMX0FSQ0hTIiBpbgorICAgICAgICAgICAgMzItYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICA2NC1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgYWxsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwtMzIpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgMy13YXkpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1CisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZS4uLiAiID4mNjsgfQorICAgICAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQorICAgICAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCisgICAgICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgorICAgICAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCisgICAgICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCisgICAgICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgICAgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY1CiskYXNfZWNobyAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY2OyB9CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQotCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LAotCQkJCSAgICAjIHRoYXQncyB0aGUgZmlyc3QgT1MgcmVsZWFzZSB3aGVyZQotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0KLQkgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtNjUyNyw0NCArNjU5Nyw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXy4uLiAiID4mNjsgfQotICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0IgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFIDEiID4+Y29uZmRlZnMuaAotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotZWxzZQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwotZmkKLQogIyBPbiBzb21lIGNvbXBpbGVycywgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IGZ1cnRoZXIgb3B0aW9ucwogIyAoZS5nLiBNYWNPUyBYKS4gT24gc29tZSBvZiB0aGVzZSBzeXN0ZW1zLCB0aGUgY29tcGlsZXIgd2lsbCBub3QKICMgY29tcGxhaW4gaWYgdW5hY2NlcHRlZCBvcHRpb25zIGFyZSBwYXNzZWQgKGUuZy4gZ2NjIG9uIE1hYyBPUyBYKS4KQEAgLTY5MzYsNyArNjk2OCw4IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKQEAgLTcyMjksNyArNzI2Miw3IEBACiAKIAogIyBPbiBMaW51eCwgY2FuLmggYW5kIGNhbi9yYXcuaCByZXF1aXJlIHN5cy9zb2NrZXQuaAotZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmgKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKQEAgLTczMTAsNiArNzM0Myw0MyBAQAogCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxlNjR0b2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxlNjR0b2guLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgICBsZTY0dG9oKDEpCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXNfbGU2NHRvaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGFzX2xlNjR0b2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXNfbGU2NHRvaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhc19sZTY0dG9oIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0hUT0xFNjQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTgyNzYsNyArODM0Niw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgRGFyd2luL1swMTU2N11cLi4qKQpAQCAtODM0OCwxNCArODQxNywxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLWVuYWJsZS1mcmFtZXdvcmsiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yay4uLiAiID4mNjsgfQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCkBAIC04NDgzLDkgKzg1NTAsNiBAQAogCiAJCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCiAJCXRoZW4KLQkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJZmkKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgpAQCAtODYxMyw2ICs4Njc3LDEyIEBACiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKIAlEYXJ3aW4vKikKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtODk2Nyw2ICs5MDM3LDc5IEBACiAJKikgOzsKIGVzYWMKIAorIyBjaGVjayBmb3Igc3lzdGVtcyB0aGF0IHJlcXVpcmUgYWxpZ25lZCBtZW1vcnkgYWNjZXNzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWxpZ25lZF9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbigpCit7CisgICAgY2hhciBzWzE2XTsKKyAgICBpbnQgaSwgKnAxLCAqcDI7CisgICAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKQorICAgICAgICBzW2ldID0gaTsKKyAgICBwMSA9IChpbnQqKShzKzEpOworICAgIHAyID0gKGludCopKHMrMik7CisgICAgaWYgKCpwMSA9PSAqcDIpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhbGlnbmVkX3JlcXVpcmVkPW5vCitlbHNlCisgIGFsaWduZWRfcmVxdWlyZWQ9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitpZiB0ZXN0ICIkYWxpZ25lZF9yZXF1aXJlZCIgPSB5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxJR05FRF9SRVFVSVJFRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWxpZ25lZF9yZXF1aXJlZCIgPiY1CiskYXNfZWNobyAiJGFsaWduZWRfcmVxdWlyZWQiID4mNjsgfQorCisKKyMgc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldyBoYXNoIGFsZ29yaXRobQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1oYXNoLWFsZ29yaXRobSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtLi4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaGFzaF9hbGdvcml0aG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2hhc2hfYWxnb3JpdGhtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9oYXNoX2FsZ29yaXRobTsKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAiJHdpdGh2YWwiID4mNjsgfQorY2FzZSAiJHdpdGh2YWwiIGluCisgICAgc2lwaGFzaDI0KQorICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9IQVNIX0FMR09SSVRITSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gMiIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnIiAiJExJTkVOTyIgNQorICAgICAgICA7OworZXNhYworCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJkZWZhdWx0IiA+JjY7IH0KK2ZpCisKKwogIyBNb3N0IFNWUjQgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIG5lZWQgLWxzb2NrZXQgYW5kIC1sbnNsLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wuLi4gIiA+JjY7IH0KQEAgLTEwMzA4LDcgKzEwNDUxLDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBmb3IgYWNfZnVuYyBpbiBhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0xMDMyOCw3ICsxMDQ3MSw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKQEAgLTEwNTgxLDYgKzEwNzI0LDM1IEBACiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBybGltaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBybGltaXQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2ludAorbWFpbiAoKQorewordm9pZCAqeD1wcmxpbWl0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkxJTUlUIDEiID4+Y29uZmRlZnMuaAorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0xMTQxMiwxOSArMTE1ODQsNiBAQAogCiBmaQogCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRjd2QiICJhY19jdl9mdW5jX2dldGN3ZCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRjd2QiID0geHllczsgdGhlbiA6Ci0gICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQ1dEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGdldGN3ZC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0Y3dkLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQotZmkKLQogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyZHVwIiAiYWNfY3ZfZnVuY19zdHJkdXAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RyZHVwIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkRVUCAxIiA+PmNvbmZkZWZzLmgKQEAgLTEzNzc4LDYgKzEzOTM3LDEwIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEVkVSU0lPTiIgPiY1CiAkYXNfZWNobyAiJExEVkVSU0lPTiIgPiY2OyB9CiAKKworTElCUEw9IiR7cHJlZml4fS9saWIvcHl0aG9uJHtWRVJTSU9OfS9jb25maWctJHtMRFZFUlNJT059IgorCisKICMgQ2hlY2sgd2hldGhlciByaWdodCBzaGlmdGluZyBhIG5lZ2F0aXZlIGludGVnZXIgZXh0ZW5kcyB0aGUgc2lnbiBiaXQKICMgb3IgZmlsbHMgd2l0aCB6ZXJvcyAobGlrZSB0aGUgQ3JheSBKOTAsIGFjY29yZGluZyB0byBUaW0gUGV0ZXJzKS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCIgPiY1CkBAIC0xNTE4NSw4ICsxNTM0OCwzMyBAQAogICAgIGVzYWMKIGZpCiAKKyMgZW5zdXJlcGlwIG9wdGlvbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZW5zdXJlcGlwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlbnN1cmVwaXAuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnN1cmVwaXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Vuc3VyZXBpcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW5zdXJlcGlwOworZWxzZQorICB3aXRoX2Vuc3VyZXBpcD11cGdyYWRlCitmaQorCitjYXNlICR3aXRoX2Vuc3VyZXBpcCBpbiAjKAorICB5ZXN8dXBncmFkZSkgOgorICAgIEVOU1VSRVBJUD11cGdyYWRlIDs7ICMoCisgIGluc3RhbGwpIDoKKyAgICBFTlNVUkVQSVA9aW5zdGFsbCA7OyAjKAorICBubykgOgorICAgIEVOU1VSRVBJUD1ubyA7OyAjKAorICAqKSA6CisgICAgYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1lbnN1cmVwaXA9dXBncmFkZXxpbnN0YWxsfG5vIiAiJExJTkVOTyIgNSA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRFTlNVUkVQSVAiID4mNQorJGFzX2VjaG8gIiRFTlNVUkVQSVAiID4mNjsgfQorCisKICMgZ2VuZXJhdGUgb3V0cHV0IGZpbGVzCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyBNaXNjL3B5dGhvbi1jb25maWcuc2giCiAKIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNb2R1bGVzL2xkX3NvX2FpeCIKIApAQCAtMTU2OTcsNyArMTU4ODUsNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcHl0aG9uICRhc19tZSAzLjMsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCkBAIC0xNTc1OSw3ICsxNTk0Nyw3IEBACiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotcHl0aG9uIGNvbmZpZy5zdGF0dXMgMy4zCitweXRob24gY29uZmlnLnN0YXR1cyAzLjQKIGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKICAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKQEAgLTE1ODkwLDYgKzE2MDc4LDcgQEAKICAgICAiTWFrZWZpbGUucHJlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlLnByZSIgOzsKICAgICAiTW9kdWxlcy9TZXR1cC5jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTW9kdWxlcy9TZXR1cC5jb25maWciIDs7CiAgICAgIk1pc2MvcHl0aG9uLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1pc2MvcHl0aG9uLnBjIiA7OworICAgICJNaXNjL3B5dGhvbi1jb25maWcuc2giKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24tY29uZmlnLnNoIiA7OwogICAgICJNb2R1bGVzL2xkX3NvX2FpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL2xkX3NvX2FpeCIgOzsKIAogICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA2YTY0YmZmLi4xNGIzYWVmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zLDcgKzMsNyBAQAogZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICMgU2V0IFZFUlNJT04gc28gd2Ugb25seSBuZWVkIHRvIGVkaXQgaW4gb25lIHBsYWNlIChpLmUuLCBoZXJlKQotbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAzLjMpCittNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuNCkKIAogQUNfUFJFUkVRKDIuNjUpCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0xODksNiArMTg5LDcgQEAKIEFDX1NVQlNUKFVOSVZFUlNBTFNESykKIAogQUNfU1VCU1QoQVJDSF9SVU5fMzJCSVQpCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMTk3LDcgKzE5OCw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMjA3LDE2ICsyMDgsMTcgQEAKIEFDX1NVQlNUKExJUE9fMzJCSVRfRkxBR1MpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC11bml2ZXJzYWwtYXJjaHMpCiBBQ19BUkdfV0lUSCh1bml2ZXJzYWwtYXJjaHMsCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpXSksCisgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKV0pLAogWwotCUFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIF0sCi1bCi0gCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQotXSkKLQotCitbXSkKK2lmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKCR7VU5JVkVSU0FMX0FSQ0hTfSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKIAogQUNfQVJHX1dJVEgoZnJhbWV3b3JrLW5hbWUsCiAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLXSwKQEAgLTI0OCw2ICsyNTAsNyBAQAogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwkJRlJBTUVXT1JLUFlUSE9OVz0KIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCQllbHNlCkBAIC0yNjIsNiArMjY1LDcgQEAKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlICIKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLUFlUSE9OVz0iZnJhbWV3b3JrcHl0aG9udyIKIAkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgpAQCAtMzIzLDYgKzMyNyw3IEBACiAJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCUZSQU1FV09SS1BZVEhPTlc9CiAJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCWVsc2UKQEAgLTM0MCw2ICszNDUsNyBAQAogQUNfU1VCU1QoRlJBTUVXT1JLSU5TVEFMTExBU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMTEFTVCkKK0FDX1NVQlNUKEZSQU1FV09SS1BZVEhPTlcpCiBBQ19TVUJTVChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpCiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWCkKIApAQCAtNjkxLDcgKzY5Nyw3IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICBBQ19NU0dfV0FSTihbCisgICAgICAgIEFDX01TR19OT1RJQ0UoWwogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoICIkQ1hYIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KQEAgLTkxNyw2ICs5MjMsNyBAQAogCiAjIE90aGVyIHBsYXRmb3JtcyBmb2xsb3cKIGlmIHRlc3QgJGVuYWJsZV9zaGFyZWQgPSAieWVzIjsgdGhlbgorICBQWV9FTkFCTEVfU0hBUkVEPTEKICAgQUNfREVGSU5FKFB5X0VOQUJMRV9TSEFSRUQsIDEsIFtEZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5Ll0pCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQpAQCAtOTcyLDYgKzk3OSw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTExODIsNiArMTE5MCwyOCBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcsCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbCisJICAgQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pCisJIF0sWworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisJIF0pKQorICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nKQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtMTE5NSwxMTEgKzEyMjUsMTIwIEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCUFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZSAKLQkJCSMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQotCQkJIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgotCQkJQ0M9Z2NjLTQuMAotCQkJQ1BQPWNwcC00LjAKLQkJCTs7Ci0JCWVzYWMKLQkJQUNfTVNHX1JFU1VMVCgkQ0MpCi0JICAgIGZpCiAKKyAgICAjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/CisgICAgRGFyd2luKikKKyAgICAgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKKyAgICAgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCisgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYworICAgICAgICB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQpCisgICAgICAgICAgICBjYXNlICIke1VOSVZFUlNBTFNES30iIGluCisgICAgICAgICAgICAqL01hY09TWDEwLjR1LnNkaykKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42CisgICAgICAgICAgICAgICAgQ0M9Z2NjLTQuMAorICAgICAgICAgICAgICAgIENQUD1jcHAtNC4wCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJENDKQorICAgICAgICBmaQogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisgICAgICAgICAgICBmaQorICAgICAgICBmaQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICMgQ2FsY3VsYXRlIGFuIGFwcHJvcHJpYXRlIGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkOgorICAgICAgICAjIFRoZSBkZXBsb3ltZW50IHRhcmdldCB2YWx1ZSBpcyB1c2VkIGV4cGxpY2l0bHkgdG8gZW5hYmxlIGNlcnRhaW4KKyAgICAgICAgIyBmZWF0dXJlcyBhcmUgZW5hYmxlZCAoc3VjaCBhcyBidWlsdGluIGxpYmVkaXQgc3VwcG9ydCBmb3IgcmVhZGxpbmUpCisgICAgICAgICMgdGhyb3VnaCB0aGUgdXNlIG9mIEFwcGxlJ3MgQXZhaWxhYmlsaXkgTWFjcm9zIGFuZCBpcyB1c2VkIGFzIGEKKyAgICAgICAgIyBjb21wb25lbnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBkaXN0dXRpbHMuZ2V0X3BsYXRmb3JtKCkuCisgICAgICAgICMKKyAgICAgICAgIyBVc2UgdGhlIHZhbHVlIGZyb206CisgICAgICAgICMgMS4gdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzcGVjaWZpZWQKKyAgICAgICAgIyAyLiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBtYWNoaW5lIGlmID49IDEwLjYKKyAgICAgICAgIyAzLiBJZiBydW5uaW5nIG9uIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUsIHVzZSB0aGUgbGVnYWN5IHRlc3RzCisgICAgICAgICMgICAgICAgYmVsb3cgdG8gcGljayBlaXRoZXIgMTAuMywgMTAuNCwgb3IgMTAuNSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAjIDQuIElmIHdlIGFyZSBydW5uaW5nIG9uIE9TIFggMTAuMiBvciBlYXJsaWVyLCBnb29kIGx1Y2shCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSkKKyAgICAgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JCSBlbHNlCi0JICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIEFDX01TR19SRVNVTFQoJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCkKIAotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQotCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCi0JICAgICMKLQkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhIAotCQkJCSAgICAjIDQtd2F5IHVuaXZlcnNhbCBidWlsZCBpcyBPU1ggMTAuNSwgCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlIAotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0JICAgIAotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlIAotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtMTMyNiwyNCArMTM2NSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCi0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1BST0dSQU0oW1t2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTtdXSwgW1tdXSkKLSAgXSxbCi0gICAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLAotICAgICAgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLFsKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBdKQotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtMTUyNiw3ICsxNTQ3LDggQEAKIHN5cy9zdGF0Lmggc3lzL3N5c2NhbGwuaCBzeXMvc3lzX2RvbWFpbi5oIHN5cy90ZXJtaW8uaCBzeXMvdGltZS5oIFwKIHN5cy90aW1lcy5oIHN5cy90eXBlcy5oIHN5cy91aW8uaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggXAogbGlidXRpbC5oIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmgpCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaCkKIENQUEZMQUdTPSRhY19zYXZlX2NwcGZsYWdzCiBBQ19IRUFERVJfRElSRU5UCiBBQ19IRUFERVJfTUFKT1IKQEAgLTE1NjYsNyArMTU4OCw3IEBACiBdKQogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1BQ19DSEVDS19IRUFERVJTKGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaCwsLFsKK0FDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaCwsLFsKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTU5Nyw2ICsxNjE5LDIyIEBACiAgICAgQUNfREVGSU5FKEhBVkVfTUFLRURFViwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3JvLl0pCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK0FDX01TR19DSEVDS0lORyhmb3IgbGU2NHRvaCkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX0VORElBTl9ICisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorXV0sIFtbCisgICBsZTY0dG9oKDEpIF1dKQorXSxbYWNfY3ZfaGFzX2xlNjR0b2g9eWVzXSxbYWNfY3ZfaGFzX2xlNjR0b2g9bm9dKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGFzX2xlNjR0b2gpCitpZiB0ZXN0ICIkYWNfY3ZfaGFzX2xlNjR0b2giID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9IVE9MRTY0LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpXSkKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTE3OTgsNyArMTgzNiw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIEFDX1NVQlNUKExJQlRPT0xfQ1JVRlQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIApAQCAtMTg1NSwxNCArMTg5MiwxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLWZyYW1ld29yaykKIGlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogdGhlbgpAQCAtMTk4Miw5ICsyMDE3LDYgQEAKIAogCQlpZiB0ZXN0ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSAnPicgMTAuMgogCQl0aGVuCi0JCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCWZpCiAJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKQEAgLTIxMDgsNiArMjE0MCwxMiBAQAogCSMgLXUgbGlic3lzX3MgcHVsbHMgaW4gYWxsIHN5bWJvbHMgaW4gbGlic3lzCiAJRGFyd2luLyopIAogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC0yMjEyLDYgKzIyNTAsNTkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK0FDX01TR19DSEVDS0lORyhhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQpCitBQ19UUllfUlVOKFsKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisgICAgICAgICAgICAgIF0sCisgICAgIFthbGlnbmVkX3JlcXVpcmVkPW5vXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSkKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfQUxJR05FRF9SRVFVSVJFRF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZF0pCitmaQorQUNfTVNHX1JFU1VMVCgkYWxpZ25lZF9yZXF1aXJlZCkKKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KK0FIX1RFTVBMQVRFKFB5X0hBU0hfQUxHT1JJVEhNLAorICBbRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LgorICAgU2lwSGFzaDI0OiAxLCBGTlY6IDIsIGV4dGVybmFsbHkgZGVmaW5lZDogMF0pCisKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtKQorZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKK0FDX0FSR19XSVRIKGhhc2hfYWxnb3JpdGhtLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXNoLWFsZ29yaXRobT1APDpAZm52fHNpcGhhc2gyNEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCBoYXNoIGFsZ29yaXRobV0pLAorWworQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAxKQorICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAyKQorICAgICAgICA7OworICAgICopCisgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnXSkKKyAgICAgICAgOzsKK2VzYWMKK10sCitbQUNfTVNHX1JFU1VMVChkZWZhdWx0KV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjgyMyw3ICsyOTE0LDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0yODQzLDcgKzI5MzQsNyBAQAogIHNpZ3RpbWVkd2FpdCBzaWd3YWl0IHNpZ3dhaXRpbmZvIHNucHJpbnRmIHN0cmZ0aW1lIHN0cmxjcHkgc3ltbGlua2F0IHN5bmMgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5saW5rYXQgdW5zZXRlbnYgdXRpbWVuc2F0IHV0aW1lcyB3YWl0aWQgd2FpdHBpZCB3YWl0MyB3YWl0NCBcCi0gd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdyaXRldiBfZ2V0cHR5KQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5KQogCiBBQ19DSEVDS19ERUNMKGRpcmZkLAogICAgIEFDX0RFRklORShIQVZFX0RJUkZELCAxLApAQCAtMjkxMCw2ICszMDAxLDE2IEBACiAgICBBQ19NU0dfUkVTVUxUKHllcyldLAogICBbQUNfTVNHX1JFU1VMVChubykKIF0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHBybGltaXQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAgICBdXSwgW1t2b2lkICp4PXBybGltaXRdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJMSU1JVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKKwogIyBPbiBzb21lIHN5c3RlbXMgKGVnLiBGcmVlQlNEIDUpLCB3ZSB3b3VsZCBmaW5kIGEgZGVmaW5pdGlvbiBvZiB0aGUKICMgZnVuY3Rpb25zIGN0ZXJtaWRfciwgc2V0Z3JvdXBzIGluIHRoZSBsaWJyYXJ5LCBidXQgbm8gcHJvdG90eXBlCiAjIChlLmcuIGJlY2F1c2Ugd2UgdXNlIF9YT1BFTl9TT1VSQ0UpLiBTZWUgd2hldGhlciB3ZSBjYW4gdGFrZSB0aGVpcgpAQCAtMzExMCw3ICszMjExLDcgQEAKICMgY2hlY2sgZm9yIGxvbmcgZmlsZSBzdXBwb3J0IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoZnNlZWs2NCBmc2Vla28gZnN0YXR2ZnMgZnRlbGw2NCBmdGVsbG8gc3RhdHZmcykKIAotQUNfUkVQTEFDRV9GVU5DUyhkdXAyIGdldGN3ZCBzdHJkdXApCitBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgc3RyZHVwKQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCiAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAogICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCkBAIC0zOTgzLDYgKzQwODQsMTEgQEAKIExEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJwogQUNfTVNHX1JFU1VMVCgkTERWRVJTSU9OKQogCitkbmwgZGVmaW5lIExJQlBMIGFmdGVyIEFCSUZMQUdTIGFuZCBMRFZFUlNJT04gaXMgZGVmaW5lZC4KK0FDX1NVQlNUKFBZX0VOQUJMRV9TSEFSRUQpCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00NjYxLDggKzQ3NjcsMjMgQEAKICAgICBlc2FjCiBmaQogCisjIGVuc3VyZXBpcCBvcHRpb24KK0FDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQorQUNfQVJHX1dJVEgoZW5zdXJlcGlwLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZW5zdXJlcGlwPUA8OkA9dXBncmFkZUA6PkBdLAorICAgICAgICBbImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcF0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9lbnN1cmVwaXA9dXBncmFkZV0pCitBU19DQVNFKCR3aXRoX2Vuc3VyZXBpcCwKKyAgICBbeWVzfHVwZ3JhZGVdLFtFTlNVUkVQSVA9dXBncmFkZV0sCisgICAgW2luc3RhbGxdLFtFTlNVUkVQSVA9aW5zdGFsbF0sCisgICAgW25vXSxbRU5TVVJFUElQPW5vXSwKKyAgICBbQUNfTVNHX0VSUk9SKFstLXdpdGgtZW5zdXJlcGlwPXVwZ3JhZGV8aW5zdGFsbHxub10pXSkKK0FDX01TR19SRVNVTFQoJEVOU1VSRVBJUCkKK0FDX1NVQlNUKEVOU1VSRVBJUCkKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjI5ZTFiZmEgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDksNiArNDksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BTEFSTQogCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkICovCisjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gKIApAQCAtNjQsOSArNjcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsOSArMTk2LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRFVQMgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMworCiAvKiBEZWZpbmVkIHdoZW4gYW55IGR5bmFtaWMgbW9kdWxlIGxvYWRpbmcgaXMgZW5hYmxlZC4gKi8KICN1bmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCiAjdW5kZWYgSEFWRV9FUE9MTAogCkBAIC0zMjAsOSArMzI2LDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGN3ZCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9HRVRDV0QKLQogLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQoKSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KICN1bmRlZiBIQVZFX0dFVENfVU5MT0NLRUQKIApAQCAtNDExLDYgKzQxNCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFNUUkVSUk9SCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLworI3VuZGVmIEhBVkVfSFRPTEU2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0hZUE9UCiAKQEAgLTUwNCw2ICs1MTAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaW5rYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTElOS0FUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0NBTl9ICiAKQEAgLTYyNyw2ICs2MzYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRAogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCisjdW5kZWYgSEFWRV9QUkxJTUlUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BST0NFU1NfSAogCkBAIC05MjQsNiArOTM2LDkgQEAKICAgICovCiAjdW5kZWYgSEFWRV9TWVNfRElSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0VORElBTl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Vwb2xsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX0VQT0xMX0gKIApAQCAtMTEyMSw2ICsxMTM2LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzeGZybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9XQ1NYRlJNCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd21lbWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XTUVNQ01QCisKIC8qIERlZmluZSBpZiB0enNldCgpIGFjdHVhbGx5IHN3aXRjaGVzIHRoZSBsb2NhbCB0aW1lem9uZSBpbiBhIG1lYW5pbmdmdWwgd2F5LgogICAgKi8KICN1bmRlZiBIQVZFX1dPUktJTkdfVFpTRVQKQEAgLTExODcsNiArMTIwNSwxMCBAQAogLyogRGVmaW5lZCBpZiBQeXRob24gaXMgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4gKi8KICN1bmRlZiBQeV9FTkFCTEVfU0hBUkVECiAKKy8qIERlZmluZSBoYXNoIGFsZ29yaXRobSBmb3Igc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldy4gU2lwSGFzaDI0OiAxLCBGTlY6IDIsCisgICBleHRlcm5hbGx5IGRlZmluZWQ6IDAgKi8KKyN1bmRlZiBQeV9IQVNIX0FMR09SSVRITQorCiAvKiBhc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWQgKi8KICN1bmRlZiBSRVRTSUdUWVBFCiAKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggOTA2NDAxNC4uZDdmNTJhZiAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTEsNyArMSw3IEBACiAjIEF1dG9kZXRlY3Rpbmcgc2V0dXAucHkgc2NyaXB0IGZvciBidWlsZGluZyB0aGUgUHl0aG9uIGV4dGVuc2lvbnMKICMKIAotaW1wb3J0IHN5cywgb3MsIGltcCwgcmUsIG9wdHBhcnNlCitpbXBvcnQgc3lzLCBvcywgaW1wb3J0bGliLm1hY2hpbmVyeSwgcmUsIG9wdHBhcnNlCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIGltcG9ydCBzeXNjb25maWcKIApAQCAtMjU5LDggKzI1OSw5IEBACiAKICAgICAgICAgaWYgbWlzc2luZzoKICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgIgotICAgICAgICAgICAgICAgICAgICJ0aGVzZSBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOiIpCisgICAgICAgICAgICBwcmludCgiUHl0aG9uIGJ1aWxkIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSEiKQorICAgICAgICAgICAgcHJpbnQoIlRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90ICIKKyAgICAgICAgICAgICAgICAgICJmb3VuZDoiKQogICAgICAgICAgICAgcHJpbnRfdGhyZWVfY29sdW1uKG1pc3NpbmcpCiAgICAgICAgICAgICBwcmludCgiVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4iCiAgICAgICAgICAgICAgICAgICAiIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLiIpCkBAIC0zMjUsOCArMzI2LDkgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCkBAIC01ODgsMTAgKzU5MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9Wyd0ZXN0Y2FwaV9sb25nLmgnXSkgKQogICAgICAgICAjIFB5dGhvbiBQRVAtMzExOCAoYnVmZmVyIHByb3RvY29sKSB0ZXN0IG1vZHVsZQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGJ1ZmZlcicsIFsnX3Rlc3RidWZmZXIuYyddKSApCisgICAgICAgICMgVGVzdCBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgY29tcGlsZWQgZmlsZSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2NDIxKQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGltcG9ydG11bHRpcGxlJywgWydfdGVzdGltcG9ydG11bHRpcGxlLmMnXSkgKQogICAgICAgICAjIHByb2ZpbGVyIChfbHNwcm9mIGlzIGZvciBjUHJvZmlsZS5weSkKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX2xzcHJvZicsIFsnX2xzcHJvZi5jJywgJ3JvdGF0aW5ndHJlZS5jJ10pICkKICAgICAgICAgIyBzdGF0aWMgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigndW5pY29kZWRhdGEnLCBbJ3VuaWNvZGVkYXRhLmMnXSkgKQorICAgICAgICAjIF9vcGNvZGUgbW9kdWxlCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19vcGNvZGUnLCBbJ19vcGNvZGUuYyddKSApCiAKICAgICAgICAgIyBNb2R1bGVzIHdpdGggc29tZSBVTklYIGRlcGVuZGVuY2llcyAtLSBvbiBieSBkZWZhdWx0OgogICAgICAgICAjIChJZiB5b3UgaGF2ZSBhIHJlYWxseSBiYWNrd2FyZCBVTklYLCBzZWxlY3QgYW5kIHNvY2tldCBtYXkgbm90IGJlCkBAIC03ODQsMTAgKzc5MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbmNmaWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG9wZW5zc2xfdmVyX3JlLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gZXZhbChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gaW50KG0uZ3JvdXAoMSksIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQoIklPRXJyb3Igd2hpbGUgcmVhZGluZyBvcGVuc3Nodi5oOiIsIG1zZykKLSAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgI3ByaW50KCdvcGVuc3NsX3ZlciA9IDB4JTA4eCcgJSBvcGVuc3NsX3ZlcikKICAgICAgICAgbWluX29wZW5zc2xfdmVyID0gMHgwMDkwNzAwMApAQCAtODIxLDYgKzgyNywxNSBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMScsIFsnc2hhMW1vZHVsZS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcz1bJ2hhc2hsaWIuaCddKSApCiAKKyAgICAgICAgIyBTSEEtMyAoS2VjY2FrKSBtb2R1bGUKKyAgICAgICAgc2hhM19kZXBlbmRzID0gWydoYXNobGliLmgnXQorICAgICAgICBrZWNjYWsgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnLCAnX3NoYTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlY2NhaycpCisgICAgICAgIGZvciBwYXR0ZXJuIGluICgnKi5jJywgJyouaCcsICcqLm1hY3JvcycpOgorICAgICAgICAgICAgc2hhM19kZXBlbmRzLmV4dGVuZChnbG9iKG9zLnBhdGguam9pbihrZWNjYWssIHBhdHRlcm4pKSkKKyAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCJfc2hhMyIsIFsiX3NoYTMvc2hhM21vZHVsZS5jIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPXNoYTNfZGVwZW5kcykpCisKICAgICAgICAgIyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBzZW1hbnRpY3MuICBZb3Ugd2lsbAogICAgICAgICAjIHByb2JhYmx5IHdhbnQgdG8gYXJyYW5nZSBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZW0gdG8gYmUgYXZhaWxhYmxlIG9uCiAgICAgICAgICMgeW91ciBtYWNoaW5lLCB0aG91Z2ggbm9uZSBhcmUgZGVmaW5lZCBieSBkZWZhdWx0IGJlY2F1c2Ugb2YgbGlicmFyeQpAQCAtMTUwOSwxMCArMTUyNCw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTIxNTYsNyArMjE2Nyw3IEBACiBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLgogCiBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkgYnJhbmRzIG9mIFVOSVgsCi1vbiBXaW5kb3dzLCBET1MsIE9TLzIsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKK29uIFdpbmRvd3MsIERPUywgTWFjLCBBbWlnYS4uLiBJZiB5b3VyIGZhdm9yaXRlIHN5c3RlbSBpc24ndAogbGlzdGVkIGhlcmUsIGl0IG1heSBzdGlsbCBiZSBzdXBwb3J0ZWQsIGlmIHRoZXJlJ3MgYSBDIGNvbXBpbGVyIGZvcgogaXQuIEFzayBhcm91bmQgb24gY29tcC5sYW5nLnB5dGhvbiAtLSBvciBqdXN0IHRyeSBjb21waWxpbmcgUHl0aG9uCiB5b3Vyc2VsZi4K